Lines Matching +full:data +full:- +full:path

1 // SPDX-License-Identifier: GPL-2.0-or-later
20 * CP Programming Service, IBM document # SC24-5760
51 * IPSRCCLS - Indicates you have specified a source class.
52 * IPTRGCLS - Indicates you have specified a target class.
53 * IPFGPID - Indicates you have specified a pathid.
54 * IPFGMID - Indicates you have specified a message ID.
55 * IPNORPY - Indicates a one-way message. No reply expected.
56 * IPALL - Indicates that all paths are affected.
101 dev->bus = &iucv_bus; in iucv_alloc_device()
102 dev->parent = iucv_root; in iucv_alloc_device()
103 dev->driver = driver; in iucv_alloc_device()
104 dev->groups = attrs; in iucv_alloc_device()
105 dev->release = iucv_release_device; in iucv_alloc_device()
127 struct iucv_irq_data data; member
153 * The work element to deliver path pending interrupts.
209 static int iucv_active_cpu = -1;
217 * Counter for number of non-smp capable handlers.
222 * IUCV control data structure. Used by iucv_path_accept, iucv_path_connect,
237 * Data in parameter list iucv structure. Used by iucv_message_send,
255 * Data in buffer iucv structure. Used by iucv_message_receive,
309 * Anchor for per-cpu IUCV command parameter block.
346 return ccode == 1 ? parm->ctrl.iprcode : ccode; in iucv_call_b2f0()
354 * Returns the maximum number of connections or -EPERM is IUCV is not
384 return -ENOMEM; in iucv_query_maxconn()
389 return ccode ? -EPERM : 0; in iucv_query_maxconn()
394 * @data: unused
398 static void iucv_allow_cpu(void *data) in iucv_allow_cpu() argument
406 * 0x80 - Flag to allow nonpriority message pending interrupts in iucv_allow_cpu()
407 * 0x40 - Flag to allow priority message pending interrupts in iucv_allow_cpu()
408 * 0x20 - Flag to allow nonpriority message completion interrupts in iucv_allow_cpu()
409 * 0x10 - Flag to allow priority message completion interrupts in iucv_allow_cpu()
410 * 0x08 - Flag to allow IUCV control interrupts in iucv_allow_cpu()
414 parm->set_mask.ipmask = 0xf8; in iucv_allow_cpu()
420 * 0x80 - Flag to allow pending connections interrupts in iucv_allow_cpu()
421 * 0x40 - Flag to allow connection complete interrupts in iucv_allow_cpu()
422 * 0x20 - Flag to allow connection severed interrupts in iucv_allow_cpu()
423 * 0x10 - Flag to allow connection quiesced interrupts in iucv_allow_cpu()
424 * 0x08 - Flag to allow connection resumed interrupts in iucv_allow_cpu()
427 parm->set_mask.ipmask = 0xf8; in iucv_allow_cpu()
435 * @data: unused
439 static void iucv_block_cpu(void *data) in iucv_block_cpu() argument
455 * @data: unused
459 static void iucv_declare_cpu(void *data) in iucv_declare_cpu() argument
471 parm->db.ipbfadr1 = virt_to_dma32(iucv_irq_data[cpu]); in iucv_declare_cpu()
510 * @data: unused
514 static void iucv_retrieve_cpu(void *data) in iucv_retrieve_cpu() argument
583 rc = -ENOMEM; in iucv_enable()
589 rc = -EIO; in iucv_enable()
654 return -ENOMEM; in iucv_cpu_prepare()
674 return -ENOMEM; in iucv_cpu_down_prep()
680 ret = -EINVAL; in iucv_cpu_down_prep()
698 * @pathid: path identification number.
699 * @userdata: 16-bytes of user data.
701 * Sever an iucv path to free up the pathid. Used internally.
710 memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser)); in iucv_sever_pathid()
711 parm->ctrl.ippathid = pathid; in iucv_sever_pathid()
729 * Function called after a path has been severed to find all remaining
738 * When a path is severed, the pathid can be reused immediately in iucv_cleanup_queue()
750 if (iucv_path_table[p->data.ippathid] == NULL) { in iucv_cleanup_queue()
751 list_del(&p->list); in iucv_cleanup_queue()
765 * Returns 0 on success, -ENOMEM if the memory allocation for the pathid
766 * table failed, or -EIO if IUCV_DECLARE_BUFFER failed on all cpus.
773 return -ENOSYS; in iucv_register()
783 INIT_LIST_HEAD(&handler->paths); in iucv_register()
786 list_add_tail(&handler->list, &iucv_handler_list); in iucv_register()
809 list_del_init(&handler->list); in iucv_unregister()
811 list_for_each_entry_safe(p, n, &handler->paths, list) { in iucv_unregister()
812 iucv_sever_pathid(p->pathid, NULL); in iucv_unregister()
813 iucv_path_table[p->pathid] = NULL; in iucv_unregister()
814 list_del(&p->list); in iucv_unregister()
819 iucv_nonsmp_handler--; in iucv_unregister()
855 * @path: address of iucv path structure
857 * @userdata: 16 bytes of data reflected to the communication partner
858 * @private: private data passed to interrupt handlers for this path
861 * external interrupt and now wishes to complete the IUCV communication path.
865 int iucv_path_accept(struct iucv_path *path, struct iucv_handler *handler, in iucv_path_accept() argument
873 rc = -EIO; in iucv_path_accept()
879 parm->ctrl.ippathid = path->pathid; in iucv_path_accept()
880 parm->ctrl.ipmsglim = path->msglim; in iucv_path_accept()
882 memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser)); in iucv_path_accept()
883 parm->ctrl.ipflags1 = path->flags; in iucv_path_accept()
887 path->private = private; in iucv_path_accept()
888 path->msglim = parm->ctrl.ipmsglim; in iucv_path_accept()
889 path->flags = parm->ctrl.ipflags1; in iucv_path_accept()
899 * @path: address of iucv path structure
901 * @userid: 8-byte user identification
902 * @system: 8-byte target system identification
903 * @userdata: 16 bytes of data reflected to the communication partner
904 * @private: private data passed to interrupt handlers for this path
906 * This function establishes an IUCV path. Although the connect may complete
907 * successfully, you are not able to use the path until you receive an IUCV
912 int iucv_path_connect(struct iucv_path *path, struct iucv_handler *handler, in iucv_path_connect() argument
922 rc = -EIO; in iucv_path_connect()
927 parm->ctrl.ipmsglim = path->msglim; in iucv_path_connect()
928 parm->ctrl.ipflags1 = path->flags; in iucv_path_connect()
930 memcpy(parm->ctrl.ipvmid, userid, sizeof(parm->ctrl.ipvmid)); in iucv_path_connect()
931 ASCEBC(parm->ctrl.ipvmid, sizeof(parm->ctrl.ipvmid)); in iucv_path_connect()
932 EBC_TOUPPER(parm->ctrl.ipvmid, sizeof(parm->ctrl.ipvmid)); in iucv_path_connect()
935 memcpy(parm->ctrl.iptarget, system, in iucv_path_connect()
936 sizeof(parm->ctrl.iptarget)); in iucv_path_connect()
937 ASCEBC(parm->ctrl.iptarget, sizeof(parm->ctrl.iptarget)); in iucv_path_connect()
938 EBC_TOUPPER(parm->ctrl.iptarget, sizeof(parm->ctrl.iptarget)); in iucv_path_connect()
941 memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser)); in iucv_path_connect()
945 if (parm->ctrl.ippathid < iucv_max_pathid) { in iucv_path_connect()
946 path->pathid = parm->ctrl.ippathid; in iucv_path_connect()
947 path->msglim = parm->ctrl.ipmsglim; in iucv_path_connect()
948 path->flags = parm->ctrl.ipflags1; in iucv_path_connect()
949 path->handler = handler; in iucv_path_connect()
950 path->private = private; in iucv_path_connect()
951 list_add_tail(&path->list, &handler->paths); in iucv_path_connect()
952 iucv_path_table[path->pathid] = path; in iucv_path_connect()
954 iucv_sever_pathid(parm->ctrl.ippathid, in iucv_path_connect()
956 rc = -EIO; in iucv_path_connect()
967 * @path: address of iucv path structure
968 * @userdata: 16 bytes of data reflected to the communication partner
970 * This function temporarily suspends incoming messages on an IUCV path.
971 * You can later reactivate the path by invoking the iucv_resume function.
975 int iucv_path_quiesce(struct iucv_path *path, u8 *userdata) in iucv_path_quiesce() argument
982 rc = -EIO; in iucv_path_quiesce()
988 memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser)); in iucv_path_quiesce()
989 parm->ctrl.ippathid = path->pathid; in iucv_path_quiesce()
999 * @path: address of iucv path structure
1000 * @userdata: 16 bytes of data reflected to the communication partner
1002 * This function resumes incoming messages on an IUCV path that has
1007 int iucv_path_resume(struct iucv_path *path, u8 *userdata) in iucv_path_resume() argument
1014 rc = -EIO; in iucv_path_resume()
1020 memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser)); in iucv_path_resume()
1021 parm->ctrl.ippathid = path->pathid; in iucv_path_resume()
1030 * @path: address of iucv path structure
1031 * @userdata: 16 bytes of data reflected to the communication partner
1033 * This function terminates an IUCV path.
1037 int iucv_path_sever(struct iucv_path *path, u8 *userdata) in iucv_path_sever() argument
1043 rc = -EIO; in iucv_path_sever()
1048 rc = iucv_sever_pathid(path->pathid, userdata); in iucv_path_sever()
1049 iucv_path_table[path->pathid] = NULL; in iucv_path_sever()
1050 list_del_init(&path->list); in iucv_path_sever()
1061 * @path: address of iucv path structure
1069 int iucv_message_purge(struct iucv_path *path, struct iucv_message *msg, in iucv_message_purge() argument
1077 rc = -EIO; in iucv_message_purge()
1082 parm->purge.ippathid = path->pathid; in iucv_message_purge()
1083 parm->purge.ipmsgid = msg->id; in iucv_message_purge()
1084 parm->purge.ipsrccls = srccls; in iucv_message_purge()
1085 parm->purge.ipflags1 = IUCV_IPSRCCLS | IUCV_IPFGMID | IUCV_IPFGPID; in iucv_message_purge()
1088 msg->audit = (*(u32 *) &parm->purge.ipaudit) >> 8; in iucv_message_purge()
1089 msg->tag = parm->purge.ipmsgtag; in iucv_message_purge()
1099 * @path: address of iucv path structure
1102 * @buffer: address of data buffer or address of struct iucv_array
1103 * @size: length of data buffer
1107 * to receive RMDATA data stored in struct iucv_message.
1109 static int iucv_message_receive_iprmdata(struct iucv_path *path, in iucv_message_receive_iprmdata() argument
1123 *residual = abs(size - 8); in iucv_message_receive_iprmdata()
1124 rmmsg = msg->rmmsg; in iucv_message_receive_iprmdata()
1129 copy = min_t(size_t, size, array->length); in iucv_message_receive_iprmdata()
1130 memcpy(dma32_to_virt(array->address), rmmsg, copy); in iucv_message_receive_iprmdata()
1132 size -= copy; in iucv_message_receive_iprmdata()
1143 * @path: address of iucv path structure
1146 * @buffer: address of data buffer or address of struct iucv_array
1147 * @size: length of data buffer
1158 int __iucv_message_receive(struct iucv_path *path, struct iucv_message *msg, in __iucv_message_receive() argument
1164 if (msg->flags & IUCV_IPRMDATA) in __iucv_message_receive()
1165 return iucv_message_receive_iprmdata(path, msg, flags, in __iucv_message_receive()
1168 return -EIO; in __iucv_message_receive()
1172 parm->db.ipbfadr1 = virt_to_dma32(buffer); in __iucv_message_receive()
1173 parm->db.ipbfln1f = (u32) size; in __iucv_message_receive()
1174 parm->db.ipmsgid = msg->id; in __iucv_message_receive()
1175 parm->db.ippathid = path->pathid; in __iucv_message_receive()
1176 parm->db.iptrgcls = msg->class; in __iucv_message_receive()
1177 parm->db.ipflags1 = (flags | IUCV_IPFGPID | in __iucv_message_receive()
1181 msg->flags = parm->db.ipflags1; in __iucv_message_receive()
1183 *residual = parm->db.ipbfln1f; in __iucv_message_receive()
1191 * @path: address of iucv path structure
1194 * @buffer: address of data buffer or address of struct iucv_array
1195 * @size: length of data buffer
1206 int iucv_message_receive(struct iucv_path *path, struct iucv_message *msg, in iucv_message_receive() argument
1211 if (msg->flags & IUCV_IPRMDATA) in iucv_message_receive()
1212 return iucv_message_receive_iprmdata(path, msg, flags, in iucv_message_receive()
1215 rc = __iucv_message_receive(path, msg, flags, buffer, size, residual); in iucv_message_receive()
1223 * @path: address of iucv path structure
1232 int iucv_message_reject(struct iucv_path *path, struct iucv_message *msg) in iucv_message_reject() argument
1239 rc = -EIO; in iucv_message_reject()
1244 parm->db.ippathid = path->pathid; in iucv_message_reject()
1245 parm->db.ipmsgid = msg->id; in iucv_message_reject()
1246 parm->db.iptrgcls = msg->class; in iucv_message_reject()
1247 parm->db.ipflags1 = (IUCV_IPTRGCLS | IUCV_IPFGMID | IUCV_IPFGPID); in iucv_message_reject()
1257 * @path: address of iucv path structure
1260 * @reply: address of reply data buffer or address of struct iucv_array
1261 * @size: length of reply data buffer
1263 * This function responds to the two-way messages that you receive. You
1265 * pathid, msgid, and trgcls. Prmmsg signifies the data is moved into
1270 int iucv_message_reply(struct iucv_path *path, struct iucv_message *msg, in iucv_message_reply() argument
1278 rc = -EIO; in iucv_message_reply()
1284 parm->dpl.ippathid = path->pathid; in iucv_message_reply()
1285 parm->dpl.ipflags1 = flags; in iucv_message_reply()
1286 parm->dpl.ipmsgid = msg->id; in iucv_message_reply()
1287 parm->dpl.iptrgcls = msg->class; in iucv_message_reply()
1288 memcpy(parm->dpl.iprmmsg, reply, min_t(size_t, size, 8)); in iucv_message_reply()
1290 parm->db.ipbfadr1 = virt_to_dma32(reply); in iucv_message_reply()
1291 parm->db.ipbfln1f = (u32) size; in iucv_message_reply()
1292 parm->db.ippathid = path->pathid; in iucv_message_reply()
1293 parm->db.ipflags1 = flags; in iucv_message_reply()
1294 parm->db.ipmsgid = msg->id; in iucv_message_reply()
1295 parm->db.iptrgcls = msg->class; in iucv_message_reply()
1306 * @path: address of iucv path structure
1313 * This function transmits data to another application. Data to be
1314 * transmitted is in a buffer and this is a one-way message and the
1321 int __iucv_message_send(struct iucv_path *path, struct iucv_message *msg, in __iucv_message_send() argument
1328 rc = -EIO; in __iucv_message_send()
1335 parm->dpl.ippathid = path->pathid; in __iucv_message_send()
1336 parm->dpl.ipflags1 = flags | IUCV_IPNORPY; in __iucv_message_send()
1337 parm->dpl.iptrgcls = msg->class; in __iucv_message_send()
1338 parm->dpl.ipsrccls = srccls; in __iucv_message_send()
1339 parm->dpl.ipmsgtag = msg->tag; in __iucv_message_send()
1340 memcpy(parm->dpl.iprmmsg, buffer, 8); in __iucv_message_send()
1342 parm->db.ipbfadr1 = virt_to_dma32(buffer); in __iucv_message_send()
1343 parm->db.ipbfln1f = (u32) size; in __iucv_message_send()
1344 parm->db.ippathid = path->pathid; in __iucv_message_send()
1345 parm->db.ipflags1 = flags | IUCV_IPNORPY; in __iucv_message_send()
1346 parm->db.iptrgcls = msg->class; in __iucv_message_send()
1347 parm->db.ipsrccls = srccls; in __iucv_message_send()
1348 parm->db.ipmsgtag = msg->tag; in __iucv_message_send()
1352 msg->id = parm->db.ipmsgid; in __iucv_message_send()
1360 * @path: address of iucv path structure
1367 * This function transmits data to another application. Data to be
1368 * transmitted is in a buffer and this is a one-way message and the
1375 int iucv_message_send(struct iucv_path *path, struct iucv_message *msg, in iucv_message_send() argument
1381 rc = __iucv_message_send(path, msg, flags, srccls, buffer, size); in iucv_message_send()
1389 * @path: address of iucv path structure
1400 * This function transmits data to another application. Data to be
1407 int iucv_message_send2way(struct iucv_path *path, struct iucv_message *msg, in iucv_message_send2way() argument
1416 rc = -EIO; in iucv_message_send2way()
1422 parm->dpl.ippathid = path->pathid; in iucv_message_send2way()
1423 parm->dpl.ipflags1 = path->flags; /* priority message */ in iucv_message_send2way()
1424 parm->dpl.iptrgcls = msg->class; in iucv_message_send2way()
1425 parm->dpl.ipsrccls = srccls; in iucv_message_send2way()
1426 parm->dpl.ipmsgtag = msg->tag; in iucv_message_send2way()
1427 parm->dpl.ipbfadr2 = virt_to_dma32(answer); in iucv_message_send2way()
1428 parm->dpl.ipbfln2f = (u32) asize; in iucv_message_send2way()
1429 memcpy(parm->dpl.iprmmsg, buffer, 8); in iucv_message_send2way()
1431 parm->db.ippathid = path->pathid; in iucv_message_send2way()
1432 parm->db.ipflags1 = path->flags; /* priority message */ in iucv_message_send2way()
1433 parm->db.iptrgcls = msg->class; in iucv_message_send2way()
1434 parm->db.ipsrccls = srccls; in iucv_message_send2way()
1435 parm->db.ipmsgtag = msg->tag; in iucv_message_send2way()
1436 parm->db.ipbfadr1 = virt_to_dma32(buffer); in iucv_message_send2way()
1437 parm->db.ipbfln1f = (u32) size; in iucv_message_send2way()
1438 parm->db.ipbfadr2 = virt_to_dma32(answer); in iucv_message_send2way()
1439 parm->db.ipbfln2f = (u32) asize; in iucv_message_send2way()
1443 msg->id = parm->db.ipmsgid; in iucv_message_send2way()
1465 * @data: Pointer to external interrupt buffer
1470 static void iucv_path_pending(struct iucv_irq_data *data) in iucv_path_pending() argument
1472 struct iucv_path_pending *ipp = (void *) data; in iucv_path_pending()
1474 struct iucv_path *path; in iucv_path_pending() local
1477 BUG_ON(iucv_path_table[ipp->ippathid]); in iucv_path_pending()
1478 /* New pathid, handler found. Create a new path struct. */ in iucv_path_pending()
1480 path = iucv_path_alloc(ipp->ipmsglim, ipp->ipflags1, GFP_ATOMIC); in iucv_path_pending()
1481 if (!path) in iucv_path_pending()
1483 path->pathid = ipp->ippathid; in iucv_path_pending()
1484 iucv_path_table[path->pathid] = path; in iucv_path_pending()
1485 EBCASC(ipp->ipvmid, 8); in iucv_path_pending()
1487 /* Call registered handler until one is found that wants the path. */ in iucv_path_pending()
1489 if (!handler->path_pending) in iucv_path_pending()
1492 * Add path to handler to allow a call to iucv_path_sever in iucv_path_pending()
1494 * an error remove the path from the handler again. in iucv_path_pending()
1496 list_add(&path->list, &handler->paths); in iucv_path_pending()
1497 path->handler = handler; in iucv_path_pending()
1498 if (!handler->path_pending(path, ipp->ipvmid, ipp->ipuser)) in iucv_path_pending()
1500 list_del(&path->list); in iucv_path_pending()
1501 path->handler = NULL; in iucv_path_pending()
1503 /* No handler wanted the path. */ in iucv_path_pending()
1504 iucv_path_table[path->pathid] = NULL; in iucv_path_pending()
1505 iucv_path_free(path); in iucv_path_pending()
1508 iucv_sever_pathid(ipp->ippathid, error); in iucv_path_pending()
1526 * @data: Pointer to external interrupt buffer
1531 static void iucv_path_complete(struct iucv_irq_data *data) in iucv_path_complete() argument
1533 struct iucv_path_complete *ipc = (void *) data; in iucv_path_complete()
1534 struct iucv_path *path = iucv_path_table[ipc->ippathid]; in iucv_path_complete() local
1536 if (path) in iucv_path_complete()
1537 path->flags = ipc->ipflags1; in iucv_path_complete()
1538 if (path && path->handler && path->handler->path_complete) in iucv_path_complete()
1539 path->handler->path_complete(path, ipc->ipuser); in iucv_path_complete()
1556 * @data: Pointer to external interrupt buffer
1561 static void iucv_path_severed(struct iucv_irq_data *data) in iucv_path_severed() argument
1563 struct iucv_path_severed *ips = (void *) data; in iucv_path_severed()
1564 struct iucv_path *path = iucv_path_table[ips->ippathid]; in iucv_path_severed() local
1566 if (!path || !path->handler) /* Already severed */ in iucv_path_severed()
1568 if (path->handler->path_severed) in iucv_path_severed()
1569 path->handler->path_severed(path, ips->ipuser); in iucv_path_severed()
1571 iucv_sever_pathid(path->pathid, NULL); in iucv_path_severed()
1572 iucv_path_table[path->pathid] = NULL; in iucv_path_severed()
1573 list_del(&path->list); in iucv_path_severed()
1574 iucv_path_free(path); in iucv_path_severed()
1592 * @data: Pointer to external interrupt buffer
1597 static void iucv_path_quiesced(struct iucv_irq_data *data) in iucv_path_quiesced() argument
1599 struct iucv_path_quiesced *ipq = (void *) data; in iucv_path_quiesced()
1600 struct iucv_path *path = iucv_path_table[ipq->ippathid]; in iucv_path_quiesced() local
1602 if (path && path->handler && path->handler->path_quiesced) in iucv_path_quiesced()
1603 path->handler->path_quiesced(path, ipq->ipuser); in iucv_path_quiesced()
1620 * @data: Pointer to external interrupt buffer
1625 static void iucv_path_resumed(struct iucv_irq_data *data) in iucv_path_resumed() argument
1627 struct iucv_path_resumed *ipr = (void *) data; in iucv_path_resumed()
1628 struct iucv_path *path = iucv_path_table[ipr->ippathid]; in iucv_path_resumed() local
1630 if (path && path->handler && path->handler->path_resumed) in iucv_path_resumed()
1631 path->handler->path_resumed(path, ipr->ipuser); in iucv_path_resumed()
1651 * @data: Pointer to external interrupt buffer
1656 static void iucv_message_complete(struct iucv_irq_data *data) in iucv_message_complete() argument
1658 struct iucv_message_complete *imc = (void *) data; in iucv_message_complete()
1659 struct iucv_path *path = iucv_path_table[imc->ippathid]; in iucv_message_complete() local
1662 if (path && path->handler && path->handler->message_complete) { in iucv_message_complete()
1663 msg.flags = imc->ipflags1; in iucv_message_complete()
1664 msg.id = imc->ipmsgid; in iucv_message_complete()
1665 msg.audit = imc->ipaudit; in iucv_message_complete()
1666 memcpy(msg.rmmsg, imc->iprmmsg, 8); in iucv_message_complete()
1667 msg.class = imc->ipsrccls; in iucv_message_complete()
1668 msg.tag = imc->ipmsgtag; in iucv_message_complete()
1669 msg.length = imc->ipbfln2f; in iucv_message_complete()
1670 path->handler->message_complete(path, &msg); in iucv_message_complete()
1698 * @data: Pointer to external interrupt buffer
1703 static void iucv_message_pending(struct iucv_irq_data *data) in iucv_message_pending() argument
1705 struct iucv_message_pending *imp = (void *) data; in iucv_message_pending()
1706 struct iucv_path *path = iucv_path_table[imp->ippathid]; in iucv_message_pending() local
1709 if (path && path->handler && path->handler->message_pending) { in iucv_message_pending()
1710 msg.flags = imp->ipflags1; in iucv_message_pending()
1711 msg.id = imp->ipmsgid; in iucv_message_pending()
1712 msg.class = imp->iptrgcls; in iucv_message_pending()
1713 if (imp->ipflags1 & IUCV_IPRMDATA) { in iucv_message_pending()
1714 memcpy(msg.rmmsg, &imp->rmmsg, 8); in iucv_message_pending()
1717 msg.length = imp->rmmsg.ln1msg2.ipbfln1f; in iucv_message_pending()
1718 msg.reply_size = imp->ipbfln2f; in iucv_message_pending()
1719 path->handler->message_pending(path, &msg); in iucv_message_pending()
1758 list_del_init(&p->list); in iucv_tasklet_fn()
1759 irq_fn[p->data.iptype](&p->data); in iucv_tasklet_fn()
1763 iucv_active_cpu = -1; in iucv_tasklet_fn()
1770 * This work function loops over the queue of path pending irq blocks
1789 list_del_init(&p->list); in iucv_work_fn()
1790 iucv_path_pending(&p->data); in iucv_work_fn()
1794 iucv_active_cpu = -1; in iucv_work_fn()
1812 if (p->ippathid >= iucv_max_pathid) { in iucv_external_interrupt()
1813 WARN_ON(p->ippathid >= iucv_max_pathid); in iucv_external_interrupt()
1814 iucv_sever_pathid(p->ippathid, iucv_error_no_listener); in iucv_external_interrupt()
1817 BUG_ON(p->iptype < 0x01 || p->iptype > 0x09); in iucv_external_interrupt()
1823 memcpy(&work->data, p, sizeof(work->data)); in iucv_external_interrupt()
1825 if (p->iptype == 0x01) { in iucv_external_interrupt()
1826 /* Path pending interrupt. */ in iucv_external_interrupt()
1827 list_add_tail(&work->list, &iucv_work_queue); in iucv_external_interrupt()
1831 list_add_tail(&work->list, &iucv_task_queue); in iucv_external_interrupt()
1862 * Allocates and initializes various data structures.
1869 rc = -EPROTONOSUPPORT; in iucv_init()