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