Lines Matching refs:msgr

31 static inline void _mpic_msgr_mer_write(struct mpic_msgr *msgr, u32 value)  in _mpic_msgr_mer_write()  argument
33 out_be32(msgr->mer, value); in _mpic_msgr_mer_write()
36 static inline u32 _mpic_msgr_mer_read(struct mpic_msgr *msgr) in _mpic_msgr_mer_read() argument
38 return in_be32(msgr->mer); in _mpic_msgr_mer_read()
41 static inline void _mpic_msgr_disable(struct mpic_msgr *msgr) in _mpic_msgr_disable() argument
43 u32 mer = _mpic_msgr_mer_read(msgr); in _mpic_msgr_disable()
45 _mpic_msgr_mer_write(msgr, mer & ~(1 << msgr->num)); in _mpic_msgr_disable()
51 struct mpic_msgr *msgr; in mpic_msgr_get() local
54 msgr = ERR_PTR(-EBUSY); in mpic_msgr_get()
60 msgr = mpic_msgrs[reg_num]; in mpic_msgr_get()
61 if (msgr->in_use == MSGR_FREE) in mpic_msgr_get()
62 msgr->in_use = MSGR_INUSE; in mpic_msgr_get()
65 return msgr; in mpic_msgr_get()
69 void mpic_msgr_put(struct mpic_msgr *msgr) in mpic_msgr_put() argument
73 raw_spin_lock_irqsave(&msgr->lock, flags); in mpic_msgr_put()
74 msgr->in_use = MSGR_FREE; in mpic_msgr_put()
75 _mpic_msgr_disable(msgr); in mpic_msgr_put()
76 raw_spin_unlock_irqrestore(&msgr->lock, flags); in mpic_msgr_put()
80 void mpic_msgr_enable(struct mpic_msgr *msgr) in mpic_msgr_enable() argument
85 raw_spin_lock_irqsave(&msgr->lock, flags); in mpic_msgr_enable()
86 mer = _mpic_msgr_mer_read(msgr); in mpic_msgr_enable()
87 _mpic_msgr_mer_write(msgr, mer | (1 << msgr->num)); in mpic_msgr_enable()
88 raw_spin_unlock_irqrestore(&msgr->lock, flags); in mpic_msgr_enable()
92 void mpic_msgr_disable(struct mpic_msgr *msgr) in mpic_msgr_disable() argument
96 raw_spin_lock_irqsave(&msgr->lock, flags); in mpic_msgr_disable()
97 _mpic_msgr_disable(msgr); in mpic_msgr_disable()
98 raw_spin_unlock_irqrestore(&msgr->lock, flags); in mpic_msgr_disable()
226 struct mpic_msgr *msgr; in mpic_msgr_probe() local
229 msgr = kzalloc(sizeof(struct mpic_msgr), GFP_KERNEL); in mpic_msgr_probe()
230 if (!msgr) { in mpic_msgr_probe()
236 msgr->base = msgr_block_addr + i * MPIC_MSGR_STRIDE; in mpic_msgr_probe()
237 msgr->mer = msgr->base + MPIC_MSGR_MER_OFFSET; in mpic_msgr_probe()
238 msgr->in_use = MSGR_FREE; in mpic_msgr_probe()
239 msgr->num = i; in mpic_msgr_probe()
240 raw_spin_lock_init(&msgr->lock); in mpic_msgr_probe()
243 msgr->irq = irq_of_parse_and_map(np, irq_index); in mpic_msgr_probe()
244 if (!msgr->irq) { in mpic_msgr_probe()
247 kfree(msgr); in mpic_msgr_probe()
252 msgr->irq = 0; in mpic_msgr_probe()
255 mpic_msgrs[reg_number] = msgr; in mpic_msgr_probe()
256 mpic_msgr_disable(msgr); in mpic_msgr_probe()
258 reg_number, msgr->irq); in mpic_msgr_probe()