Lines Matching refs:monmsg

105 static inline unsigned long mon_mca_start(struct mon_msg *monmsg)  in mon_mca_start()  argument
107 return *(u32 *) &monmsg->msg.rmmsg; in mon_mca_start()
110 static inline unsigned long mon_mca_end(struct mon_msg *monmsg) in mon_mca_end() argument
112 return *(u32 *) &monmsg->msg.rmmsg[4]; in mon_mca_end()
115 static inline u8 mon_mca_type(struct mon_msg *monmsg, u8 index) in mon_mca_type() argument
117 return *((u8 *) mon_mca_start(monmsg) + monmsg->mca_offset + index); in mon_mca_type()
120 static inline u32 mon_mca_size(struct mon_msg *monmsg) in mon_mca_size() argument
122 return mon_mca_end(monmsg) - mon_mca_start(monmsg) + 1; in mon_mca_size()
125 static inline u32 mon_rec_start(struct mon_msg *monmsg) in mon_rec_start() argument
127 return *((u32 *) (mon_mca_start(monmsg) + monmsg->mca_offset + 4)); in mon_rec_start()
130 static inline u32 mon_rec_end(struct mon_msg *monmsg) in mon_rec_end() argument
132 return *((u32 *) (mon_mca_start(monmsg) + monmsg->mca_offset + 8)); in mon_rec_end()
135 static int mon_check_mca(struct mon_msg *monmsg) in mon_check_mca() argument
137 if ((mon_rec_end(monmsg) <= mon_rec_start(monmsg)) || in mon_check_mca()
138 (mon_rec_start(monmsg) < mon_dcss_start) || in mon_check_mca()
139 (mon_rec_end(monmsg) > mon_dcss_end) || in mon_check_mca()
140 (mon_mca_type(monmsg, 0) == 0) || in mon_check_mca()
141 (mon_mca_size(monmsg) % 12 != 0) || in mon_check_mca()
142 (mon_mca_end(monmsg) <= mon_mca_start(monmsg)) || in mon_check_mca()
143 (mon_mca_end(monmsg) > mon_dcss_end) || in mon_check_mca()
144 (mon_mca_start(monmsg) < mon_dcss_start) || in mon_check_mca()
145 ((mon_mca_type(monmsg, 1) == 0) && (mon_mca_type(monmsg, 2) == 0))) in mon_check_mca()
150 static int mon_send_reply(struct mon_msg *monmsg, in mon_send_reply() argument
155 rc = iucv_message_reply(monpriv->path, &monmsg->msg, in mon_send_reply()
158 if (likely(!monmsg->msglim_reached)) { in mon_send_reply()
159 monmsg->pos = 0; in mon_send_reply()
160 monmsg->mca_offset = 0; in mon_send_reply()
165 monmsg->replied_msglim = 1; in mon_send_reply()
201 static inline void mon_next_mca(struct mon_msg *monmsg) in mon_next_mca() argument
203 if (likely((mon_mca_size(monmsg) - monmsg->mca_offset) == 12)) in mon_next_mca()
205 monmsg->mca_offset += 12; in mon_next_mca()
206 monmsg->pos = 0; in mon_next_mca()
211 struct mon_msg *monmsg; in mon_next_message() local
215 monmsg = monpriv->msg_array[monpriv->read_index]; in mon_next_message()
216 if (unlikely(monmsg->replied_msglim)) { in mon_next_message()
217 monmsg->replied_msglim = 0; in mon_next_message()
218 monmsg->msglim_reached = 0; in mon_next_message()
219 monmsg->pos = 0; in mon_next_message()
220 monmsg->mca_offset = 0; in mon_next_message()
226 return monmsg; in mon_next_message()
370 struct mon_msg *monmsg; in mon_read() local
374 monmsg = mon_next_message(monpriv); in mon_read()
375 if (IS_ERR(monmsg)) in mon_read()
376 return PTR_ERR(monmsg); in mon_read()
378 if (!monmsg) { in mon_read()
388 monmsg = monpriv->msg_array[monpriv->read_index]; in mon_read()
391 if (!monmsg->pos) in mon_read()
392 monmsg->pos = mon_mca_start(monmsg) + monmsg->mca_offset; in mon_read()
393 if (mon_check_mca(monmsg)) in mon_read()
397 mce_start = mon_mca_start(monmsg) + monmsg->mca_offset; in mon_read()
398 if ((monmsg->pos >= mce_start) && (monmsg->pos < mce_start + 12)) { in mon_read()
399 count = min(count, (size_t) mce_start + 12 - monmsg->pos); in mon_read()
400 ret = copy_to_user(data, (void *) (unsigned long) monmsg->pos, in mon_read()
404 monmsg->pos += count; in mon_read()
405 if (monmsg->pos == mce_start + 12) in mon_read()
406 monmsg->pos = mon_rec_start(monmsg); in mon_read()
411 if (monmsg->pos <= mon_rec_end(monmsg)) { in mon_read()
412 count = min(count, (size_t) mon_rec_end(monmsg) - monmsg->pos in mon_read()
414 ret = copy_to_user(data, (void *) (unsigned long) monmsg->pos, in mon_read()
418 monmsg->pos += count; in mon_read()
419 if (monmsg->pos > mon_rec_end(monmsg)) in mon_read()
420 mon_next_mca(monmsg); in mon_read()
424 ret = mon_send_reply(monmsg, monpriv); in mon_read()