Lines Matching refs:msgr

35 static inline void _mpic_msgr_mer_write(struct mpic_msgr *msgr, u32 value)  in _mpic_msgr_mer_write()  argument
37 out_be32(msgr->mer, value); in _mpic_msgr_mer_write()
40 static inline u32 _mpic_msgr_mer_read(struct mpic_msgr *msgr) in _mpic_msgr_mer_read() argument
42 return in_be32(msgr->mer); in _mpic_msgr_mer_read()
45 static inline void _mpic_msgr_disable(struct mpic_msgr *msgr) in _mpic_msgr_disable() argument
47 u32 mer = _mpic_msgr_mer_read(msgr); in _mpic_msgr_disable()
49 _mpic_msgr_mer_write(msgr, mer & ~(1 << msgr->num)); in _mpic_msgr_disable()
55 struct mpic_msgr *msgr; in mpic_msgr_get() local
58 msgr = ERR_PTR(-EBUSY); in mpic_msgr_get()
64 msgr = mpic_msgrs[reg_num]; in mpic_msgr_get()
65 if (msgr->in_use == MSGR_FREE) in mpic_msgr_get()
66 msgr->in_use = MSGR_INUSE; in mpic_msgr_get()
69 return msgr; in mpic_msgr_get()
73 void mpic_msgr_put(struct mpic_msgr *msgr) in mpic_msgr_put() argument
77 raw_spin_lock_irqsave(&msgr->lock, flags); in mpic_msgr_put()
78 msgr->in_use = MSGR_FREE; in mpic_msgr_put()
79 _mpic_msgr_disable(msgr); in mpic_msgr_put()
80 raw_spin_unlock_irqrestore(&msgr->lock, flags); in mpic_msgr_put()
84 void mpic_msgr_enable(struct mpic_msgr *msgr) in mpic_msgr_enable() argument
89 raw_spin_lock_irqsave(&msgr->lock, flags); in mpic_msgr_enable()
90 mer = _mpic_msgr_mer_read(msgr); in mpic_msgr_enable()
91 _mpic_msgr_mer_write(msgr, mer | (1 << msgr->num)); in mpic_msgr_enable()
92 raw_spin_unlock_irqrestore(&msgr->lock, flags); in mpic_msgr_enable()
96 void mpic_msgr_disable(struct mpic_msgr *msgr) in mpic_msgr_disable() argument
100 raw_spin_lock_irqsave(&msgr->lock, flags); in mpic_msgr_disable()
101 _mpic_msgr_disable(msgr); in mpic_msgr_disable()
102 raw_spin_unlock_irqrestore(&msgr->lock, flags); in mpic_msgr_disable()
223 struct mpic_msgr *msgr; in mpic_msgr_probe() local
226 msgr = kzalloc(sizeof(struct mpic_msgr), GFP_KERNEL); in mpic_msgr_probe()
227 if (!msgr) { in mpic_msgr_probe()
233 msgr->base = msgr_block_addr + i * MPIC_MSGR_STRIDE; in mpic_msgr_probe()
234 msgr->mer = (u32 *)((u8 *)msgr->base + MPIC_MSGR_MER_OFFSET); in mpic_msgr_probe()
235 msgr->in_use = MSGR_FREE; in mpic_msgr_probe()
236 msgr->num = i; in mpic_msgr_probe()
237 raw_spin_lock_init(&msgr->lock); in mpic_msgr_probe()
240 msgr->irq = irq_of_parse_and_map(np, irq_index); in mpic_msgr_probe()
241 if (msgr->irq == NO_IRQ) { in mpic_msgr_probe()
244 kfree(msgr); in mpic_msgr_probe()
249 msgr->irq = NO_IRQ; in mpic_msgr_probe()
252 mpic_msgrs[reg_number] = msgr; in mpic_msgr_probe()
253 mpic_msgr_disable(msgr); in mpic_msgr_probe()
255 reg_number, msgr->irq); in mpic_msgr_probe()