Lines Matching refs:monmsg

102 static inline unsigned long mon_mca_start(struct mon_msg *monmsg)  in mon_mca_start()  argument
104 return *(u32 *) &monmsg->msg.rmmsg; in mon_mca_start()
107 static inline unsigned long mon_mca_end(struct mon_msg *monmsg) in mon_mca_end() argument
109 return *(u32 *) &monmsg->msg.rmmsg[4]; in mon_mca_end()
112 static inline u8 mon_mca_type(struct mon_msg *monmsg, u8 index) in mon_mca_type() argument
114 return *((u8 *)__va(mon_mca_start(monmsg)) + monmsg->mca_offset + index); in mon_mca_type()
117 static inline u32 mon_mca_size(struct mon_msg *monmsg) in mon_mca_size() argument
119 return mon_mca_end(monmsg) - mon_mca_start(monmsg) + 1; in mon_mca_size()
122 static inline u32 mon_rec_start(struct mon_msg *monmsg) in mon_rec_start() argument
124 return *((u32 *)(__va(mon_mca_start(monmsg)) + monmsg->mca_offset + 4)); in mon_rec_start()
127 static inline u32 mon_rec_end(struct mon_msg *monmsg) in mon_rec_end() argument
129 return *((u32 *)(__va(mon_mca_start(monmsg)) + monmsg->mca_offset + 8)); in mon_rec_end()
132 static int mon_check_mca(struct mon_msg *monmsg) in mon_check_mca() argument
134 if ((mon_rec_end(monmsg) <= mon_rec_start(monmsg)) || in mon_check_mca()
135 (mon_rec_start(monmsg) < mon_dcss_start) || in mon_check_mca()
136 (mon_rec_end(monmsg) > mon_dcss_end) || in mon_check_mca()
137 (mon_mca_type(monmsg, 0) == 0) || in mon_check_mca()
138 (mon_mca_size(monmsg) % 12 != 0) || in mon_check_mca()
139 (mon_mca_end(monmsg) <= mon_mca_start(monmsg)) || in mon_check_mca()
140 (mon_mca_end(monmsg) > mon_dcss_end) || in mon_check_mca()
141 (mon_mca_start(monmsg) < mon_dcss_start) || in mon_check_mca()
142 ((mon_mca_type(monmsg, 1) == 0) && (mon_mca_type(monmsg, 2) == 0))) in mon_check_mca()
147 static int mon_send_reply(struct mon_msg *monmsg, in mon_send_reply() argument
152 rc = iucv_message_reply(monpriv->path, &monmsg->msg, in mon_send_reply()
155 if (likely(!monmsg->msglim_reached)) { in mon_send_reply()
156 monmsg->pos = 0; in mon_send_reply()
157 monmsg->mca_offset = 0; in mon_send_reply()
162 monmsg->replied_msglim = 1; in mon_send_reply()
198 static inline void mon_next_mca(struct mon_msg *monmsg) in mon_next_mca() argument
200 if (likely((mon_mca_size(monmsg) - monmsg->mca_offset) == 12)) in mon_next_mca()
202 monmsg->mca_offset += 12; in mon_next_mca()
203 monmsg->pos = 0; in mon_next_mca()
208 struct mon_msg *monmsg; in mon_next_message() local
212 monmsg = monpriv->msg_array[monpriv->read_index]; in mon_next_message()
213 if (unlikely(monmsg->replied_msglim)) { in mon_next_message()
214 monmsg->replied_msglim = 0; in mon_next_message()
215 monmsg->msglim_reached = 0; in mon_next_message()
216 monmsg->pos = 0; in mon_next_message()
217 monmsg->mca_offset = 0; in mon_next_message()
223 return monmsg; in mon_next_message()
365 struct mon_msg *monmsg; in mon_read() local
369 monmsg = mon_next_message(monpriv); in mon_read()
370 if (IS_ERR(monmsg)) in mon_read()
371 return PTR_ERR(monmsg); in mon_read()
373 if (!monmsg) { in mon_read()
383 monmsg = monpriv->msg_array[monpriv->read_index]; in mon_read()
386 if (!monmsg->pos) in mon_read()
387 monmsg->pos = mon_mca_start(monmsg) + monmsg->mca_offset; in mon_read()
388 if (mon_check_mca(monmsg)) in mon_read()
392 mce_start = mon_mca_start(monmsg) + monmsg->mca_offset; in mon_read()
393 if ((monmsg->pos >= mce_start) && (monmsg->pos < mce_start + 12)) { in mon_read()
394 count = min(count, (size_t) mce_start + 12 - monmsg->pos); in mon_read()
395 ret = copy_to_user(data, __va(monmsg->pos), count); in mon_read()
398 monmsg->pos += count; in mon_read()
399 if (monmsg->pos == mce_start + 12) in mon_read()
400 monmsg->pos = mon_rec_start(monmsg); in mon_read()
405 if (monmsg->pos <= mon_rec_end(monmsg)) { in mon_read()
406 count = min(count, (size_t) mon_rec_end(monmsg) - monmsg->pos in mon_read()
408 ret = copy_to_user(data, __va(monmsg->pos), count); in mon_read()
411 monmsg->pos += count; in mon_read()
412 if (monmsg->pos > mon_rec_end(monmsg)) in mon_read()
413 mon_next_mca(monmsg); in mon_read()
417 ret = mon_send_reply(monmsg, monpriv); in mon_read()