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

1 // SPDX-License-Identifier: GPL-2.0-or-later
20 * CP Programming Service, IBM document # SC24-5760
53 * IPSRCCLS - Indicates you have specified a source class.
54 * IPTRGCLS - Indicates you have specified a target class.
55 * IPFGPID - Indicates you have specified a pathid.
56 * IPFGMID - Indicates you have specified a message ID.
57 * IPNORPY - Indicates a one-way message. No reply expected.
58 * IPALL - Indicates that all paths are affected.
103 dev->bus = &iucv_bus; in iucv_alloc_device()
104 dev->parent = iucv_root; in iucv_alloc_device()
105 dev->driver = driver; in iucv_alloc_device()
106 dev->groups = attrs; in iucv_alloc_device()
107 dev->release = iucv_release_device; in iucv_alloc_device()
129 struct iucv_irq_data data; member
155 * The work element to deliver path pending interrupts.
211 static int iucv_active_cpu = -1;
219 * Counter for number of non-smp capable handlers.
224 * IUCV control data structure. Used by iucv_path_accept, iucv_path_connect,
239 * Data in parameter list iucv structure. Used by iucv_message_send,
257 * Data in buffer iucv structure. Used by iucv_message_receive,
311 * Anchor for per-cpu IUCV command parameter block.
348 return ccode == 1 ? parm->ctrl.iprcode : ccode; in iucv_call_b2f0()
356 * Returns the maximum number of connections or -EPERM is IUCV is not
386 return -ENOMEM; in iucv_query_maxconn()
391 return ccode ? -EPERM : 0; in iucv_query_maxconn()
396 * @data: unused
400 static void iucv_allow_cpu(void *data) in iucv_allow_cpu() argument
408 * 0x80 - Flag to allow nonpriority message pending interrupts in iucv_allow_cpu()
409 * 0x40 - Flag to allow priority message pending interrupts in iucv_allow_cpu()
410 * 0x20 - Flag to allow nonpriority message completion interrupts in iucv_allow_cpu()
411 * 0x10 - Flag to allow priority message completion interrupts in iucv_allow_cpu()
412 * 0x08 - Flag to allow IUCV control interrupts in iucv_allow_cpu()
416 parm->set_mask.ipmask = 0xf8; in iucv_allow_cpu()
422 * 0x80 - Flag to allow pending connections interrupts in iucv_allow_cpu()
423 * 0x40 - Flag to allow connection complete interrupts in iucv_allow_cpu()
424 * 0x20 - Flag to allow connection severed interrupts in iucv_allow_cpu()
425 * 0x10 - Flag to allow connection quiesced interrupts in iucv_allow_cpu()
426 * 0x08 - Flag to allow connection resumed interrupts in iucv_allow_cpu()
429 parm->set_mask.ipmask = 0xf8; in iucv_allow_cpu()
437 * @data: unused
441 static void iucv_block_cpu(void *data) in iucv_block_cpu() argument
457 * @data: unused
461 static void iucv_declare_cpu(void *data) in iucv_declare_cpu() argument
473 parm->db.ipbfadr1 = virt_to_dma32(iucv_irq_data[cpu]); in iucv_declare_cpu()
512 * @data: unused
516 static void iucv_retrieve_cpu(void *data) in iucv_retrieve_cpu() argument
585 rc = -ENOMEM; in iucv_enable()
591 rc = -EIO; in iucv_enable()
656 return -ENOMEM; in iucv_cpu_prepare()
676 return -ENOMEM; in iucv_cpu_down_prep()
682 ret = -EINVAL; in iucv_cpu_down_prep()
700 * @pathid: path identification number.
701 * @userdata: 16-bytes of user data.
703 * Sever an iucv path to free up the pathid. Used internally.
712 memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser)); in iucv_sever_pathid()
713 parm->ctrl.ippathid = pathid; in iucv_sever_pathid()
731 * Function called after a path has been severed to find all remaining
740 * When a path is severed, the pathid can be reused immediately in iucv_cleanup_queue()
752 if (iucv_path_table[p->data.ippathid] == NULL) { in iucv_cleanup_queue()
753 list_del(&p->list); in iucv_cleanup_queue()
767 * Returns 0 on success, -ENOMEM if the memory allocation for the pathid
768 * table failed, or -EIO if IUCV_DECLARE_BUFFER failed on all cpus.
775 return -ENOSYS; in iucv_register()
785 INIT_LIST_HEAD(&handler->paths); in iucv_register()
788 list_add_tail(&handler->list, &iucv_handler_list); in iucv_register()
811 list_del_init(&handler->list); in iucv_unregister()
813 list_for_each_entry_safe(p, n, &handler->paths, list) { in iucv_unregister()
814 iucv_sever_pathid(p->pathid, NULL); in iucv_unregister()
815 iucv_path_table[p->pathid] = NULL; in iucv_unregister()
816 list_del(&p->list); in iucv_unregister()
821 iucv_nonsmp_handler--; in iucv_unregister()
857 * @path: address of iucv path structure
859 * @userdata: 16 bytes of data reflected to the communication partner
860 * @private: private data passed to interrupt handlers for this path
863 * external interrupt and now wishes to complete the IUCV communication path.
867 int iucv_path_accept(struct iucv_path *path, struct iucv_handler *handler, in iucv_path_accept() argument
875 rc = -EIO; in iucv_path_accept()
881 parm->ctrl.ippathid = path->pathid; in iucv_path_accept()
882 parm->ctrl.ipmsglim = path->msglim; in iucv_path_accept()
884 memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser)); in iucv_path_accept()
885 parm->ctrl.ipflags1 = path->flags; in iucv_path_accept()
889 path->private = private; in iucv_path_accept()
890 path->msglim = parm->ctrl.ipmsglim; in iucv_path_accept()
891 path->flags = parm->ctrl.ipflags1; in iucv_path_accept()
901 * @path: address of iucv path structure
903 * @userid: 8-byte user identification
904 * @system: 8-byte target system identification
905 * @userdata: 16 bytes of data reflected to the communication partner
906 * @private: private data passed to interrupt handlers for this path
908 * This function establishes an IUCV path. Although the connect may complete
909 * successfully, you are not able to use the path until you receive an IUCV
914 int iucv_path_connect(struct iucv_path *path, struct iucv_handler *handler, in iucv_path_connect() argument
924 rc = -EIO; in iucv_path_connect()
929 parm->ctrl.ipmsglim = path->msglim; in iucv_path_connect()
930 parm->ctrl.ipflags1 = path->flags; in iucv_path_connect()
932 memcpy(parm->ctrl.ipvmid, userid, sizeof(parm->ctrl.ipvmid)); in iucv_path_connect()
933 ASCEBC(parm->ctrl.ipvmid, sizeof(parm->ctrl.ipvmid)); in iucv_path_connect()
934 EBC_TOUPPER(parm->ctrl.ipvmid, sizeof(parm->ctrl.ipvmid)); in iucv_path_connect()
937 memcpy(parm->ctrl.iptarget, system, in iucv_path_connect()
938 sizeof(parm->ctrl.iptarget)); in iucv_path_connect()
939 ASCEBC(parm->ctrl.iptarget, sizeof(parm->ctrl.iptarget)); in iucv_path_connect()
940 EBC_TOUPPER(parm->ctrl.iptarget, sizeof(parm->ctrl.iptarget)); in iucv_path_connect()
943 memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser)); in iucv_path_connect()
947 if (parm->ctrl.ippathid < iucv_max_pathid) { in iucv_path_connect()
948 path->pathid = parm->ctrl.ippathid; in iucv_path_connect()
949 path->msglim = parm->ctrl.ipmsglim; in iucv_path_connect()
950 path->flags = parm->ctrl.ipflags1; in iucv_path_connect()
951 path->handler = handler; in iucv_path_connect()
952 path->private = private; in iucv_path_connect()
953 list_add_tail(&path->list, &handler->paths); in iucv_path_connect()
954 iucv_path_table[path->pathid] = path; in iucv_path_connect()
956 iucv_sever_pathid(parm->ctrl.ippathid, in iucv_path_connect()
958 rc = -EIO; in iucv_path_connect()
969 * @path: address of iucv path structure
970 * @userdata: 16 bytes of data reflected to the communication partner
972 * This function temporarily suspends incoming messages on an IUCV path.
973 * You can later reactivate the path by invoking the iucv_resume function.
977 int iucv_path_quiesce(struct iucv_path *path, u8 *userdata) in iucv_path_quiesce() argument
984 rc = -EIO; in iucv_path_quiesce()
990 memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser)); in iucv_path_quiesce()
991 parm->ctrl.ippathid = path->pathid; in iucv_path_quiesce()
1001 * @path: address of iucv path structure
1002 * @userdata: 16 bytes of data reflected to the communication partner
1004 * This function resumes incoming messages on an IUCV path that has
1009 int iucv_path_resume(struct iucv_path *path, u8 *userdata) in iucv_path_resume() argument
1016 rc = -EIO; in iucv_path_resume()
1022 memcpy(parm->ctrl.ipuser, userdata, sizeof(parm->ctrl.ipuser)); in iucv_path_resume()
1023 parm->ctrl.ippathid = path->pathid; in iucv_path_resume()
1032 * @path: address of iucv path structure
1033 * @userdata: 16 bytes of data reflected to the communication partner
1035 * This function terminates an IUCV path.
1039 int iucv_path_sever(struct iucv_path *path, u8 *userdata) in iucv_path_sever() argument
1045 rc = -EIO; in iucv_path_sever()
1050 rc = iucv_sever_pathid(path->pathid, userdata); in iucv_path_sever()
1051 iucv_path_table[path->pathid] = NULL; in iucv_path_sever()
1052 list_del_init(&path->list); in iucv_path_sever()
1063 * @path: address of iucv path structure
1071 int iucv_message_purge(struct iucv_path *path, struct iucv_message *msg, in iucv_message_purge() argument
1079 rc = -EIO; in iucv_message_purge()
1084 parm->purge.ippathid = path->pathid; in iucv_message_purge()
1085 parm->purge.ipmsgid = msg->id; in iucv_message_purge()
1086 parm->purge.ipsrccls = srccls; in iucv_message_purge()
1087 parm->purge.ipflags1 = IUCV_IPSRCCLS | IUCV_IPFGMID | IUCV_IPFGPID; in iucv_message_purge()
1090 msg->audit = (*(u32 *) &parm->purge.ipaudit) >> 8; in iucv_message_purge()
1091 msg->tag = parm->purge.ipmsgtag; in iucv_message_purge()
1101 * @path: address of iucv path structure
1104 * @buffer: address of data buffer or address of struct iucv_array
1105 * @size: length of data buffer
1109 * to receive RMDATA data stored in struct iucv_message.
1111 static int iucv_message_receive_iprmdata(struct iucv_path *path, in iucv_message_receive_iprmdata() argument
1125 *residual = abs(size - 8); in iucv_message_receive_iprmdata()
1126 rmmsg = msg->rmmsg; in iucv_message_receive_iprmdata()
1131 copy = min_t(size_t, size, array->length); in iucv_message_receive_iprmdata()
1132 memcpy(dma32_to_virt(array->address), rmmsg, copy); in iucv_message_receive_iprmdata()
1134 size -= copy; in iucv_message_receive_iprmdata()
1145 * @path: address of iucv path structure
1148 * @buffer: address of data buffer or address of struct iucv_array
1149 * @size: length of data buffer
1160 int __iucv_message_receive(struct iucv_path *path, struct iucv_message *msg, in __iucv_message_receive() argument
1166 if (msg->flags & IUCV_IPRMDATA) in __iucv_message_receive()
1167 return iucv_message_receive_iprmdata(path, msg, flags, in __iucv_message_receive()
1170 return -EIO; in __iucv_message_receive()
1174 parm->db.ipbfadr1 = virt_to_dma32(buffer); in __iucv_message_receive()
1175 parm->db.ipbfln1f = (u32) size; in __iucv_message_receive()
1176 parm->db.ipmsgid = msg->id; in __iucv_message_receive()
1177 parm->db.ippathid = path->pathid; in __iucv_message_receive()
1178 parm->db.iptrgcls = msg->class; in __iucv_message_receive()
1179 parm->db.ipflags1 = (flags | IUCV_IPFGPID | in __iucv_message_receive()
1183 msg->flags = parm->db.ipflags1; in __iucv_message_receive()
1185 *residual = parm->db.ipbfln1f; in __iucv_message_receive()
1193 * @path: address of iucv path structure
1196 * @buffer: address of data buffer or address of struct iucv_array
1197 * @size: length of data buffer
1208 int iucv_message_receive(struct iucv_path *path, struct iucv_message *msg, in iucv_message_receive() argument
1213 if (msg->flags & IUCV_IPRMDATA) in iucv_message_receive()
1214 return iucv_message_receive_iprmdata(path, msg, flags, in iucv_message_receive()
1217 rc = __iucv_message_receive(path, msg, flags, buffer, size, residual); in iucv_message_receive()
1225 * @path: address of iucv path structure
1234 int iucv_message_reject(struct iucv_path *path, struct iucv_message *msg) in iucv_message_reject() argument
1241 rc = -EIO; in iucv_message_reject()
1246 parm->db.ippathid = path->pathid; in iucv_message_reject()
1247 parm->db.ipmsgid = msg->id; in iucv_message_reject()
1248 parm->db.iptrgcls = msg->class; in iucv_message_reject()
1249 parm->db.ipflags1 = (IUCV_IPTRGCLS | IUCV_IPFGMID | IUCV_IPFGPID); in iucv_message_reject()
1259 * @path: address of iucv path structure
1262 * @reply: address of reply data buffer or address of struct iucv_array
1263 * @size: length of reply data buffer
1265 * This function responds to the two-way messages that you receive. You
1267 * pathid, msgid, and trgcls. Prmmsg signifies the data is moved into
1272 int iucv_message_reply(struct iucv_path *path, struct iucv_message *msg, in iucv_message_reply() argument
1280 rc = -EIO; in iucv_message_reply()
1286 parm->dpl.ippathid = path->pathid; in iucv_message_reply()
1287 parm->dpl.ipflags1 = flags; in iucv_message_reply()
1288 parm->dpl.ipmsgid = msg->id; in iucv_message_reply()
1289 parm->dpl.iptrgcls = msg->class; in iucv_message_reply()
1290 memcpy(parm->dpl.iprmmsg, reply, min_t(size_t, size, 8)); in iucv_message_reply()
1292 parm->db.ipbfadr1 = virt_to_dma32(reply); in iucv_message_reply()
1293 parm->db.ipbfln1f = (u32) size; in iucv_message_reply()
1294 parm->db.ippathid = path->pathid; in iucv_message_reply()
1295 parm->db.ipflags1 = flags; in iucv_message_reply()
1296 parm->db.ipmsgid = msg->id; in iucv_message_reply()
1297 parm->db.iptrgcls = msg->class; in iucv_message_reply()
1308 * @path: address of iucv path structure
1315 * This function transmits data to another application. Data to be
1316 * transmitted is in a buffer and this is a one-way message and the
1323 int __iucv_message_send(struct iucv_path *path, struct iucv_message *msg, in __iucv_message_send() argument
1330 rc = -EIO; in __iucv_message_send()
1337 parm->dpl.ippathid = path->pathid; in __iucv_message_send()
1338 parm->dpl.ipflags1 = flags | IUCV_IPNORPY; in __iucv_message_send()
1339 parm->dpl.iptrgcls = msg->class; in __iucv_message_send()
1340 parm->dpl.ipsrccls = srccls; in __iucv_message_send()
1341 parm->dpl.ipmsgtag = msg->tag; in __iucv_message_send()
1342 memcpy(parm->dpl.iprmmsg, buffer, 8); in __iucv_message_send()
1344 parm->db.ipbfadr1 = virt_to_dma32(buffer); in __iucv_message_send()
1345 parm->db.ipbfln1f = (u32) size; in __iucv_message_send()
1346 parm->db.ippathid = path->pathid; in __iucv_message_send()
1347 parm->db.ipflags1 = flags | IUCV_IPNORPY; in __iucv_message_send()
1348 parm->db.iptrgcls = msg->class; in __iucv_message_send()
1349 parm->db.ipsrccls = srccls; in __iucv_message_send()
1350 parm->db.ipmsgtag = msg->tag; in __iucv_message_send()
1354 msg->id = parm->db.ipmsgid; in __iucv_message_send()
1362 * @path: address of iucv path structure
1369 * This function transmits data to another application. Data to be
1370 * transmitted is in a buffer and this is a one-way message and the
1377 int iucv_message_send(struct iucv_path *path, struct iucv_message *msg, in iucv_message_send() argument
1383 rc = __iucv_message_send(path, msg, flags, srccls, buffer, size); in iucv_message_send()
1391 * @path: address of iucv path structure
1402 * This function transmits data to another application. Data to be
1409 int iucv_message_send2way(struct iucv_path *path, struct iucv_message *msg, in iucv_message_send2way() argument
1418 rc = -EIO; in iucv_message_send2way()
1424 parm->dpl.ippathid = path->pathid; in iucv_message_send2way()
1425 parm->dpl.ipflags1 = path->flags; /* priority message */ in iucv_message_send2way()
1426 parm->dpl.iptrgcls = msg->class; in iucv_message_send2way()
1427 parm->dpl.ipsrccls = srccls; in iucv_message_send2way()
1428 parm->dpl.ipmsgtag = msg->tag; in iucv_message_send2way()
1429 parm->dpl.ipbfadr2 = virt_to_dma32(answer); in iucv_message_send2way()
1430 parm->dpl.ipbfln2f = (u32) asize; in iucv_message_send2way()
1431 memcpy(parm->dpl.iprmmsg, buffer, 8); in iucv_message_send2way()
1433 parm->db.ippathid = path->pathid; in iucv_message_send2way()
1434 parm->db.ipflags1 = path->flags; /* priority message */ in iucv_message_send2way()
1435 parm->db.iptrgcls = msg->class; in iucv_message_send2way()
1436 parm->db.ipsrccls = srccls; in iucv_message_send2way()
1437 parm->db.ipmsgtag = msg->tag; in iucv_message_send2way()
1438 parm->db.ipbfadr1 = virt_to_dma32(buffer); in iucv_message_send2way()
1439 parm->db.ipbfln1f = (u32) size; in iucv_message_send2way()
1440 parm->db.ipbfadr2 = virt_to_dma32(answer); in iucv_message_send2way()
1441 parm->db.ipbfln2f = (u32) asize; in iucv_message_send2way()
1445 msg->id = parm->db.ipmsgid; in iucv_message_send2way()
1467 * @data: Pointer to external interrupt buffer
1472 static void iucv_path_pending(struct iucv_irq_data *data) in iucv_path_pending() argument
1474 struct iucv_path_pending *ipp = (void *) data; in iucv_path_pending()
1476 struct iucv_path *path; in iucv_path_pending() local
1479 BUG_ON(iucv_path_table[ipp->ippathid]); in iucv_path_pending()
1480 /* New pathid, handler found. Create a new path struct. */ in iucv_path_pending()
1482 path = iucv_path_alloc(ipp->ipmsglim, ipp->ipflags1, GFP_ATOMIC); in iucv_path_pending()
1483 if (!path) in iucv_path_pending()
1485 path->pathid = ipp->ippathid; in iucv_path_pending()
1486 iucv_path_table[path->pathid] = path; in iucv_path_pending()
1487 EBCASC(ipp->ipvmid, 8); in iucv_path_pending()
1489 /* Call registered handler until one is found that wants the path. */ in iucv_path_pending()
1491 if (!handler->path_pending) in iucv_path_pending()
1494 * Add path to handler to allow a call to iucv_path_sever in iucv_path_pending()
1496 * an error remove the path from the handler again. in iucv_path_pending()
1498 list_add(&path->list, &handler->paths); in iucv_path_pending()
1499 path->handler = handler; in iucv_path_pending()
1500 if (!handler->path_pending(path, ipp->ipvmid, ipp->ipuser)) in iucv_path_pending()
1502 list_del(&path->list); in iucv_path_pending()
1503 path->handler = NULL; in iucv_path_pending()
1505 /* No handler wanted the path. */ in iucv_path_pending()
1506 iucv_path_table[path->pathid] = NULL; in iucv_path_pending()
1507 iucv_path_free(path); in iucv_path_pending()
1510 iucv_sever_pathid(ipp->ippathid, error); in iucv_path_pending()
1528 * @data: Pointer to external interrupt buffer
1533 static void iucv_path_complete(struct iucv_irq_data *data) in iucv_path_complete() argument
1535 struct iucv_path_complete *ipc = (void *) data; in iucv_path_complete()
1536 struct iucv_path *path = iucv_path_table[ipc->ippathid]; in iucv_path_complete() local
1538 if (path) in iucv_path_complete()
1539 path->flags = ipc->ipflags1; in iucv_path_complete()
1540 if (path && path->handler && path->handler->path_complete) in iucv_path_complete()
1541 path->handler->path_complete(path, ipc->ipuser); in iucv_path_complete()
1558 * @data: Pointer to external interrupt buffer
1563 static void iucv_path_severed(struct iucv_irq_data *data) in iucv_path_severed() argument
1565 struct iucv_path_severed *ips = (void *) data; in iucv_path_severed()
1566 struct iucv_path *path = iucv_path_table[ips->ippathid]; in iucv_path_severed() local
1568 if (!path || !path->handler) /* Already severed */ in iucv_path_severed()
1570 if (path->handler->path_severed) in iucv_path_severed()
1571 path->handler->path_severed(path, ips->ipuser); in iucv_path_severed()
1573 iucv_sever_pathid(path->pathid, NULL); in iucv_path_severed()
1574 iucv_path_table[path->pathid] = NULL; in iucv_path_severed()
1575 list_del(&path->list); in iucv_path_severed()
1576 iucv_path_free(path); in iucv_path_severed()
1594 * @data: Pointer to external interrupt buffer
1599 static void iucv_path_quiesced(struct iucv_irq_data *data) in iucv_path_quiesced() argument
1601 struct iucv_path_quiesced *ipq = (void *) data; in iucv_path_quiesced()
1602 struct iucv_path *path = iucv_path_table[ipq->ippathid]; in iucv_path_quiesced() local
1604 if (path && path->handler && path->handler->path_quiesced) in iucv_path_quiesced()
1605 path->handler->path_quiesced(path, ipq->ipuser); in iucv_path_quiesced()
1622 * @data: Pointer to external interrupt buffer
1627 static void iucv_path_resumed(struct iucv_irq_data *data) in iucv_path_resumed() argument
1629 struct iucv_path_resumed *ipr = (void *) data; in iucv_path_resumed()
1630 struct iucv_path *path = iucv_path_table[ipr->ippathid]; in iucv_path_resumed() local
1632 if (path && path->handler && path->handler->path_resumed) in iucv_path_resumed()
1633 path->handler->path_resumed(path, ipr->ipuser); in iucv_path_resumed()
1653 * @data: Pointer to external interrupt buffer
1658 static void iucv_message_complete(struct iucv_irq_data *data) in iucv_message_complete() argument
1660 struct iucv_message_complete *imc = (void *) data; in iucv_message_complete()
1661 struct iucv_path *path = iucv_path_table[imc->ippathid]; in iucv_message_complete() local
1664 if (path && path->handler && path->handler->message_complete) { in iucv_message_complete()
1665 msg.flags = imc->ipflags1; in iucv_message_complete()
1666 msg.id = imc->ipmsgid; in iucv_message_complete()
1667 msg.audit = imc->ipaudit; in iucv_message_complete()
1668 memcpy(msg.rmmsg, imc->iprmmsg, 8); in iucv_message_complete()
1669 msg.class = imc->ipsrccls; in iucv_message_complete()
1670 msg.tag = imc->ipmsgtag; in iucv_message_complete()
1671 msg.length = imc->ipbfln2f; in iucv_message_complete()
1672 path->handler->message_complete(path, &msg); in iucv_message_complete()
1700 * @data: Pointer to external interrupt buffer
1705 static void iucv_message_pending(struct iucv_irq_data *data) in iucv_message_pending() argument
1707 struct iucv_message_pending *imp = (void *) data; in iucv_message_pending()
1708 struct iucv_path *path = iucv_path_table[imp->ippathid]; in iucv_message_pending() local
1711 if (path && path->handler && path->handler->message_pending) { in iucv_message_pending()
1712 msg.flags = imp->ipflags1; in iucv_message_pending()
1713 msg.id = imp->ipmsgid; in iucv_message_pending()
1714 msg.class = imp->iptrgcls; in iucv_message_pending()
1715 if (imp->ipflags1 & IUCV_IPRMDATA) { in iucv_message_pending()
1716 memcpy(msg.rmmsg, &imp->rmmsg, 8); in iucv_message_pending()
1719 msg.length = imp->rmmsg.ln1msg2.ipbfln1f; in iucv_message_pending()
1720 msg.reply_size = imp->ipbfln2f; in iucv_message_pending()
1721 path->handler->message_pending(path, &msg); in iucv_message_pending()
1760 list_del_init(&p->list); in iucv_tasklet_fn()
1761 irq_fn[p->data.iptype](&p->data); in iucv_tasklet_fn()
1765 iucv_active_cpu = -1; in iucv_tasklet_fn()
1772 * This work function loops over the queue of path pending irq blocks
1791 list_del_init(&p->list); in iucv_work_fn()
1792 iucv_path_pending(&p->data); in iucv_work_fn()
1796 iucv_active_cpu = -1; in iucv_work_fn()
1814 if (p->ippathid >= iucv_max_pathid) { in iucv_external_interrupt()
1815 WARN_ON(p->ippathid >= iucv_max_pathid); in iucv_external_interrupt()
1816 iucv_sever_pathid(p->ippathid, iucv_error_no_listener); in iucv_external_interrupt()
1819 BUG_ON(p->iptype < 0x01 || p->iptype > 0x09); in iucv_external_interrupt()
1825 memcpy(&work->data, p, sizeof(work->data)); in iucv_external_interrupt()
1827 if (p->iptype == 0x01) { in iucv_external_interrupt()
1828 /* Path pending interrupt. */ in iucv_external_interrupt()
1829 list_add_tail(&work->list, &iucv_work_queue); in iucv_external_interrupt()
1833 list_add_tail(&work->list, &iucv_task_queue); in iucv_external_interrupt()
1864 * Allocates and initializes various data structures.
1871 rc = -EPROTONOSUPPORT; in iucv_init()