Lines Matching refs:msgr
30 static inline void _mpic_msgr_mer_write(struct mpic_msgr *msgr, u32 value) in _mpic_msgr_mer_write() argument
32 out_be32(msgr->mer, value); in _mpic_msgr_mer_write()
35 static inline u32 _mpic_msgr_mer_read(struct mpic_msgr *msgr) in _mpic_msgr_mer_read() argument
37 return in_be32(msgr->mer); in _mpic_msgr_mer_read()
40 static inline void _mpic_msgr_disable(struct mpic_msgr *msgr) in _mpic_msgr_disable() argument
42 u32 mer = _mpic_msgr_mer_read(msgr); in _mpic_msgr_disable()
44 _mpic_msgr_mer_write(msgr, mer & ~(1 << msgr->num)); in _mpic_msgr_disable()
50 struct mpic_msgr *msgr; in mpic_msgr_get() local
53 msgr = ERR_PTR(-EBUSY); in mpic_msgr_get()
59 msgr = mpic_msgrs[reg_num]; in mpic_msgr_get()
60 if (msgr->in_use == MSGR_FREE) in mpic_msgr_get()
61 msgr->in_use = MSGR_INUSE; in mpic_msgr_get()
64 return msgr; in mpic_msgr_get()
68 void mpic_msgr_put(struct mpic_msgr *msgr) in mpic_msgr_put() argument
72 raw_spin_lock_irqsave(&msgr->lock, flags); in mpic_msgr_put()
73 msgr->in_use = MSGR_FREE; in mpic_msgr_put()
74 _mpic_msgr_disable(msgr); in mpic_msgr_put()
75 raw_spin_unlock_irqrestore(&msgr->lock, flags); in mpic_msgr_put()
79 void mpic_msgr_enable(struct mpic_msgr *msgr) in mpic_msgr_enable() argument
84 raw_spin_lock_irqsave(&msgr->lock, flags); in mpic_msgr_enable()
85 mer = _mpic_msgr_mer_read(msgr); in mpic_msgr_enable()
86 _mpic_msgr_mer_write(msgr, mer | (1 << msgr->num)); in mpic_msgr_enable()
87 raw_spin_unlock_irqrestore(&msgr->lock, flags); in mpic_msgr_enable()
91 void mpic_msgr_disable(struct mpic_msgr *msgr) in mpic_msgr_disable() argument
95 raw_spin_lock_irqsave(&msgr->lock, flags); in mpic_msgr_disable()
96 _mpic_msgr_disable(msgr); in mpic_msgr_disable()
97 raw_spin_unlock_irqrestore(&msgr->lock, flags); in mpic_msgr_disable()
218 struct mpic_msgr *msgr; in mpic_msgr_probe() local
221 msgr = kzalloc(sizeof(struct mpic_msgr), GFP_KERNEL); in mpic_msgr_probe()
222 if (!msgr) { in mpic_msgr_probe()
228 msgr->base = msgr_block_addr + i * MPIC_MSGR_STRIDE; in mpic_msgr_probe()
229 msgr->mer = (u32 *)((u8 *)msgr->base + MPIC_MSGR_MER_OFFSET); in mpic_msgr_probe()
230 msgr->in_use = MSGR_FREE; in mpic_msgr_probe()
231 msgr->num = i; in mpic_msgr_probe()
232 raw_spin_lock_init(&msgr->lock); in mpic_msgr_probe()
235 msgr->irq = irq_of_parse_and_map(np, irq_index); in mpic_msgr_probe()
236 if (!msgr->irq) { in mpic_msgr_probe()
239 kfree(msgr); in mpic_msgr_probe()
244 msgr->irq = 0; in mpic_msgr_probe()
247 mpic_msgrs[reg_number] = msgr; in mpic_msgr_probe()
248 mpic_msgr_disable(msgr); in mpic_msgr_probe()
250 reg_number, msgr->irq); in mpic_msgr_probe()