Lines Matching refs:msgr

32 static inline void _mpic_msgr_mer_write(struct mpic_msgr *msgr, u32 value)  in _mpic_msgr_mer_write()  argument
34 out_be32(msgr->mer, value); in _mpic_msgr_mer_write()
37 static inline u32 _mpic_msgr_mer_read(struct mpic_msgr *msgr) in _mpic_msgr_mer_read() argument
39 return in_be32(msgr->mer); in _mpic_msgr_mer_read()
42 static inline void _mpic_msgr_disable(struct mpic_msgr *msgr) in _mpic_msgr_disable() argument
44 u32 mer = _mpic_msgr_mer_read(msgr); in _mpic_msgr_disable()
46 _mpic_msgr_mer_write(msgr, mer & ~(1 << msgr->num)); in _mpic_msgr_disable()
52 struct mpic_msgr *msgr; in mpic_msgr_get() local
55 msgr = ERR_PTR(-EBUSY); in mpic_msgr_get()
61 msgr = mpic_msgrs[reg_num]; in mpic_msgr_get()
62 if (msgr->in_use == MSGR_FREE) in mpic_msgr_get()
63 msgr->in_use = MSGR_INUSE; in mpic_msgr_get()
66 return msgr; in mpic_msgr_get()
70 void mpic_msgr_put(struct mpic_msgr *msgr) in mpic_msgr_put() argument
74 raw_spin_lock_irqsave(&msgr->lock, flags); in mpic_msgr_put()
75 msgr->in_use = MSGR_FREE; in mpic_msgr_put()
76 _mpic_msgr_disable(msgr); in mpic_msgr_put()
77 raw_spin_unlock_irqrestore(&msgr->lock, flags); in mpic_msgr_put()
81 void mpic_msgr_enable(struct mpic_msgr *msgr) in mpic_msgr_enable() argument
86 raw_spin_lock_irqsave(&msgr->lock, flags); in mpic_msgr_enable()
87 mer = _mpic_msgr_mer_read(msgr); in mpic_msgr_enable()
88 _mpic_msgr_mer_write(msgr, mer | (1 << msgr->num)); in mpic_msgr_enable()
89 raw_spin_unlock_irqrestore(&msgr->lock, flags); in mpic_msgr_enable()
93 void mpic_msgr_disable(struct mpic_msgr *msgr) in mpic_msgr_disable() argument
97 raw_spin_lock_irqsave(&msgr->lock, flags); in mpic_msgr_disable()
98 _mpic_msgr_disable(msgr); in mpic_msgr_disable()
99 raw_spin_unlock_irqrestore(&msgr->lock, flags); in mpic_msgr_disable()
227 struct mpic_msgr *msgr; in mpic_msgr_probe() local
230 msgr = kzalloc(sizeof(struct mpic_msgr), GFP_KERNEL); in mpic_msgr_probe()
231 if (!msgr) { in mpic_msgr_probe()
237 msgr->base = msgr_block_addr + i * MPIC_MSGR_STRIDE; in mpic_msgr_probe()
238 msgr->mer = msgr->base + MPIC_MSGR_MER_OFFSET; in mpic_msgr_probe()
239 msgr->in_use = MSGR_FREE; in mpic_msgr_probe()
240 msgr->num = i; in mpic_msgr_probe()
241 raw_spin_lock_init(&msgr->lock); in mpic_msgr_probe()
244 msgr->irq = irq_of_parse_and_map(np, irq_index); in mpic_msgr_probe()
245 if (!msgr->irq) { in mpic_msgr_probe()
248 kfree(msgr); in mpic_msgr_probe()
253 msgr->irq = 0; in mpic_msgr_probe()
256 mpic_msgrs[reg_number] = msgr; in mpic_msgr_probe()
257 mpic_msgr_disable(msgr); in mpic_msgr_probe()
259 reg_number, msgr->irq); in mpic_msgr_probe()