Lines Matching +full:function +full:- +full:enumerator

1 // SPDX-License-Identifier: GPL-2.0-or-later
9 * Copyright 2009 - 2013 Integrated Device Technology, Inc.
30 * struct rio_pwrite - RIO portwrite event
65 * rio_local_get_device_id - Get the base/extended device id for a port
69 * implementing the master port. Returns the 8/16-bit device
78 return (RIO_GET_DID(port->sys_size, result)); in rio_local_get_device_id()
83 * rio_query_mport - Query mport device attributes
93 if (!port->ops->query_mport) in rio_query_mport()
94 return -ENODATA; in rio_query_mport()
95 return port->ops->query_mport(port, mport_attr); in rio_query_mport()
100 * rio_alloc_net- Allocate and initialize a new RIO network data structure
103 * Allocates a RIO network structure, initializes per-network
113 INIT_LIST_HEAD(&net->node); in rio_alloc_net()
114 INIT_LIST_HEAD(&net->devices); in rio_alloc_net()
115 INIT_LIST_HEAD(&net->switches); in rio_alloc_net()
116 INIT_LIST_HEAD(&net->mports); in rio_alloc_net()
117 mport->net = net; in rio_alloc_net()
127 err = device_register(&net->dev); in rio_add_net()
131 list_add_tail(&net->node, &rio_nets); in rio_add_net()
141 if (!list_empty(&net->node)) in rio_free_net()
142 list_del(&net->node); in rio_free_net()
144 if (net->release) in rio_free_net()
145 net->release(net); in rio_free_net()
146 device_unregister(&net->dev); in rio_free_net()
151 * rio_local_set_device_id - Set the base/extended device id for a port
160 RIO_SET_DID(port->sys_size, did)); in rio_local_set_device_id()
165 * rio_add_device- Adds a RIO device to the device model
176 atomic_set(&rdev->state, RIO_DEVICE_RUNNING); in rio_add_device()
177 err = device_register(&rdev->dev); in rio_add_device()
182 list_add_tail(&rdev->global_list, &rio_devices); in rio_add_device()
183 if (rdev->net) { in rio_add_device()
184 list_add_tail(&rdev->net_list, &rdev->net->devices); in rio_add_device()
185 if (rdev->pef & RIO_PEF_SWITCH) in rio_add_device()
186 list_add_tail(&rdev->rswitch->node, in rio_add_device()
187 &rdev->net->switches); in rio_add_device()
196 * rio_del_device - removes a RIO device from the device model
206 atomic_set(&rdev->state, state); in rio_del_device()
208 list_del(&rdev->global_list); in rio_del_device()
209 if (rdev->net) { in rio_del_device()
210 list_del(&rdev->net_list); in rio_del_device()
211 if (rdev->pef & RIO_PEF_SWITCH) { in rio_del_device()
212 list_del(&rdev->rswitch->node); in rio_del_device()
213 kfree(rdev->rswitch->route_table); in rio_del_device()
217 device_unregister(&rdev->dev); in rio_del_device()
222 * rio_request_inb_mbox - request inbound mailbox service
230 * a callback function to the resource. Returns %0 on success.
239 int rc = -ENOSYS; in rio_request_inb_mbox()
242 if (!mport->ops->open_inb_mbox) in rio_request_inb_mbox()
250 rc = request_resource(&mport->riores[RIO_INB_MBOX_RESOURCE], in rio_request_inb_mbox()
257 mport->inb_msg[mbox].res = res; in rio_request_inb_mbox()
260 mport->inb_msg[mbox].mcback = minb; in rio_request_inb_mbox()
262 rc = mport->ops->open_inb_mbox(mport, dev_id, mbox, entries); in rio_request_inb_mbox()
264 mport->inb_msg[mbox].mcback = NULL; in rio_request_inb_mbox()
265 mport->inb_msg[mbox].res = NULL; in rio_request_inb_mbox()
270 rc = -ENOMEM; in rio_request_inb_mbox()
278 * rio_release_inb_mbox - release inbound mailbox message service
289 if (!mport->ops->close_inb_mbox || !mport->inb_msg[mbox].res) in rio_release_inb_mbox()
290 return -EINVAL; in rio_release_inb_mbox()
292 mport->ops->close_inb_mbox(mport, mbox); in rio_release_inb_mbox()
293 mport->inb_msg[mbox].mcback = NULL; in rio_release_inb_mbox()
295 rc = release_resource(mport->inb_msg[mbox].res); in rio_release_inb_mbox()
299 kfree(mport->inb_msg[mbox].res); in rio_release_inb_mbox()
300 mport->inb_msg[mbox].res = NULL; in rio_release_inb_mbox()
307 * rio_request_outb_mbox - request outbound mailbox service
315 * a callback function to the resource. Returns 0 on success.
323 int rc = -ENOSYS; in rio_request_outb_mbox()
326 if (!mport->ops->open_outb_mbox) in rio_request_outb_mbox()
334 rc = request_resource(&mport->riores[RIO_OUTB_MBOX_RESOURCE], in rio_request_outb_mbox()
341 mport->outb_msg[mbox].res = res; in rio_request_outb_mbox()
344 mport->outb_msg[mbox].mcback = moutb; in rio_request_outb_mbox()
346 rc = mport->ops->open_outb_mbox(mport, dev_id, mbox, entries); in rio_request_outb_mbox()
348 mport->outb_msg[mbox].mcback = NULL; in rio_request_outb_mbox()
349 mport->outb_msg[mbox].res = NULL; in rio_request_outb_mbox()
354 rc = -ENOMEM; in rio_request_outb_mbox()
362 * rio_release_outb_mbox - release outbound mailbox message service
373 if (!mport->ops->close_outb_mbox || !mport->outb_msg[mbox].res) in rio_release_outb_mbox()
374 return -EINVAL; in rio_release_outb_mbox()
376 mport->ops->close_outb_mbox(mport, mbox); in rio_release_outb_mbox()
377 mport->outb_msg[mbox].mcback = NULL; in rio_release_outb_mbox()
379 rc = release_resource(mport->outb_msg[mbox].res); in rio_release_outb_mbox()
383 kfree(mport->outb_msg[mbox].res); in rio_release_outb_mbox()
384 mport->outb_msg[mbox].res = NULL; in rio_release_outb_mbox()
391 * rio_setup_inb_dbell - bind inbound doorbell callback
409 return -ENOMEM; in rio_setup_inb_dbell()
411 dbell->res = res; in rio_setup_inb_dbell()
412 dbell->dinb = dinb; in rio_setup_inb_dbell()
413 dbell->dev_id = dev_id; in rio_setup_inb_dbell()
415 mutex_lock(&mport->lock); in rio_setup_inb_dbell()
416 list_add_tail(&dbell->node, &mport->dbells); in rio_setup_inb_dbell()
417 mutex_unlock(&mport->lock); in rio_setup_inb_dbell()
422 * rio_request_inb_dbell - request inbound doorbell message service
430 * a callback function to the resource. Returns 0 if the request
447 rc = request_resource(&mport->riores[RIO_DOORBELL_RESOURCE], in rio_request_inb_dbell()
457 rc = -ENOMEM; in rio_request_inb_dbell()
465 * rio_release_inb_dbell - release inbound doorbell message service
479 mutex_lock(&mport->lock); in rio_release_inb_dbell()
480 list_for_each_entry(dbell, &mport->dbells, node) { in rio_release_inb_dbell()
481 if ((dbell->res->start == start) && (dbell->res->end == end)) { in rio_release_inb_dbell()
482 list_del(&dbell->node); in rio_release_inb_dbell()
487 mutex_unlock(&mport->lock); in rio_release_inb_dbell()
491 rc = -EINVAL; in rio_release_inb_dbell()
496 rc = release_resource(dbell->res); in rio_release_inb_dbell()
507 * rio_request_outb_dbell - request outbound doorbell message range
524 if (request_resource(&rdev->riores[RIO_DOORBELL_RESOURCE], res) in rio_request_outb_dbell()
536 * rio_release_outb_dbell - release outbound doorbell message range
554 * rio_add_mport_pw_handler - add port-write message handler into the list
569 return -ENOMEM; in rio_add_mport_pw_handler()
571 pwrite->pwcback = pwcback; in rio_add_mport_pw_handler()
572 pwrite->context = context; in rio_add_mport_pw_handler()
573 mutex_lock(&mport->lock); in rio_add_mport_pw_handler()
574 list_add_tail(&pwrite->node, &mport->pwrites); in rio_add_mport_pw_handler()
575 mutex_unlock(&mport->lock); in rio_add_mport_pw_handler()
581 * rio_del_mport_pw_handler - remove port-write message handler from the list
585 * @pwcback: Registered callback function
593 int rc = -EINVAL; in rio_del_mport_pw_handler()
596 mutex_lock(&mport->lock); in rio_del_mport_pw_handler()
597 list_for_each_entry(pwrite, &mport->pwrites, node) { in rio_del_mport_pw_handler()
598 if (pwrite->pwcback == pwcback && pwrite->context == context) { in rio_del_mport_pw_handler()
599 list_del(&pwrite->node); in rio_del_mport_pw_handler()
605 mutex_unlock(&mport->lock); in rio_del_mport_pw_handler()
612 * rio_request_inb_pwrite - request inbound port-write message service for
614 * @rdev: RIO device to which register inbound port-write callback routine
615 * @pwcback: Callback routine to execute when port-write is received
617 * Binds a port-write callback function to the RapidIO device.
626 if (rdev->pwcback) in rio_request_inb_pwrite()
627 rc = -ENOMEM; in rio_request_inb_pwrite()
629 rdev->pwcback = pwcback; in rio_request_inb_pwrite()
637 * rio_release_inb_pwrite - release inbound port-write message service
639 * @rdev: RIO device which registered for inbound port-write callback
646 int rc = -ENOMEM; in rio_release_inb_pwrite()
649 if (rdev->pwcback) { in rio_release_inb_pwrite()
650 rdev->pwcback = NULL; in rio_release_inb_pwrite()
660 * rio_pw_enable - Enables/disables port-write handling by a master port
661 * @mport: Master port associated with port-write handling
666 if (mport->ops->pwenable) { in rio_pw_enable()
667 mutex_lock(&mport->lock); in rio_pw_enable()
669 if ((enable && ++mport->pwe_refcnt == 1) || in rio_pw_enable()
670 (!enable && mport->pwe_refcnt && --mport->pwe_refcnt == 0)) in rio_pw_enable()
671 mport->ops->pwenable(mport, enable); in rio_pw_enable()
672 mutex_unlock(&mport->lock); in rio_pw_enable()
678 * rio_map_inb_region -- Map inbound memory region.
685 * Return: 0 -- Success.
687 * This function will create the mapping from RIO space to local memory.
695 if (!mport->ops->map_inb) in rio_map_inb_region()
696 return -1; in rio_map_inb_region()
698 rc = mport->ops->map_inb(mport, local, rbase, size, rflags); in rio_map_inb_region()
705 * rio_unmap_inb_region -- Unmap the inbound memory region
712 if (!mport->ops->unmap_inb) in rio_unmap_inb_region()
715 mport->ops->unmap_inb(mport, lstart); in rio_unmap_inb_region()
721 * rio_map_outb_region -- Map outbound memory region.
729 * Return: 0 -- Success.
731 * This function will create the mapping from RIO space to local memory.
739 if (!mport->ops->map_outb) in rio_map_outb_region()
740 return -ENODEV; in rio_map_outb_region()
743 rc = mport->ops->map_outb(mport, destid, rbase, size, in rio_map_outb_region()
752 * rio_unmap_inb_region -- Unmap the inbound memory region
761 if (!mport->ops->unmap_outb) in rio_unmap_outb_region()
765 mport->ops->unmap_outb(mport, destid, rstart); in rio_unmap_outb_region()
771 * rio_mport_get_physefb - Helper function that returns register offset
829 * rio_get_comptag - Begin or continue searching for a RIO device by component tag
846 n = from ? from->global_list.next : rio_devices.next; in rio_get_comptag()
850 if (rdev->comp_tag == comp_tag) in rio_get_comptag()
852 n = n->next; in rio_get_comptag()
862 * rio_set_port_lockout - Sets/clears LOCKOUT bit (RIO EM 1.3) for a switch port.
887 * rio_enable_rx_tx_port - enable input receiver and output transmitter of
893 * @port_num: Port (-number on switch) to enable on a far end device
924 return -EIO; in rio_enable_rx_tx_port()
936 return -EIO; in rio_enable_rx_tx_port()
945 * rio_chk_dev_route - Validate route to the specified device.
957 int p_port, rc = -EIO; in rio_chk_dev_route()
961 while (rdev->prev && (rdev->prev->pef & RIO_PEF_SWITCH)) { in rio_chk_dev_route()
962 if (!rio_read_config_32(rdev->prev, RIO_DEV_ID_CAR, &result)) { in rio_chk_dev_route()
963 prev = rdev->prev; in rio_chk_dev_route()
966 rdev = rdev->prev; in rio_chk_dev_route()
972 p_port = prev->rswitch->route_table[rdev->destid]; in rio_chk_dev_route()
975 pr_debug("RIO: link failed on [%s]-P%d\n", in rio_chk_dev_route()
987 * rio_mport_chk_dev_access - Validate access to the specified device.
1002 return -EIO; in rio_mport_chk_dev_access()
1011 * rio_chk_dev_access - Validate access to the specified device.
1016 return rio_mport_chk_dev_access(rdev->net->hport, in rio_chk_dev_access()
1017 rdev->destid, rdev->hopcount); in rio_chk_dev_access()
1021 * rio_get_input_status - Sends a Link-Request/Input-Status control symbol and
1022 * returns link-response (if requested).
1023 * @rdev: RIO devive to issue Input-status command
1042 /* Issue Input-status command */ in rio_get_input_status()
1052 while (checkcount--) { in rio_get_input_status()
1063 return -EIO; in rio_get_input_status()
1067 * rio_clr_err_stopped - Clears port Error-stopped states.
1076 * IDT gen3 switch driver now implements HW-specific error handler that
1081 struct rio_dev *nextdev = rdev->rswitch->nextdev[pnum]; in rio_clr_err_stopped()
1091 pr_debug("RIO_EM: servicing Output Error-Stopped state\n"); in rio_clr_err_stopped()
1093 * Send a Link-Request/Input-Status control symbol in rio_clr_err_stopped()
1096 pr_debug("RIO_EM: Input-status response timeout\n"); in rio_clr_err_stopped()
1100 pr_debug("RIO_EM: SP%d Input-status response=0x%08x\n", in rio_clr_err_stopped()
1137 RIO_GET_PORT_NUM(nextdev->swpinfo)), in rio_clr_err_stopped()
1148 pr_debug("RIO_EM: servicing Input Error-Stopped state\n"); in rio_clr_err_stopped()
1150 RIO_GET_PORT_NUM(nextdev->swpinfo), NULL); in rio_clr_err_stopped()
1163 * rio_inb_pwrite_handler - inbound port-write message handler
1164 * @mport: mport device associated with port-write
1165 * @pw_msg: pointer to inbound port-write message
1167 * Processes an inbound port-write message. Returns 0 if the request
1181 pr_debug("%s: PW to mport_%d:\n", __func__, mport->id); in rio_inb_pwrite_handler()
1184 i * 4, pw_msg->raw[i], pw_msg->raw[i + 1], in rio_inb_pwrite_handler()
1185 pw_msg->raw[i + 2], pw_msg->raw[i + 3]); in rio_inb_pwrite_handler()
1190 rdev = rio_get_comptag((pw_msg->em.comptag & RIO_CTAG_UDEVID), NULL); in rio_inb_pwrite_handler()
1192 pr_debug("RIO: Port-Write message from %s\n", rio_name(rdev)); in rio_inb_pwrite_handler()
1195 __func__, pw_msg->em.comptag); in rio_inb_pwrite_handler()
1198 /* Call a device-specific handler (if it is registered for the device). in rio_inb_pwrite_handler()
1199 * This may be the service for endpoints that send device-specific in rio_inb_pwrite_handler()
1200 * port-write messages. End-point messages expected to be handled in rio_inb_pwrite_handler()
1204 if (rdev && rdev->pwcback) { in rio_inb_pwrite_handler()
1205 rc = rdev->pwcback(rdev, pw_msg, 0); in rio_inb_pwrite_handler()
1210 mutex_lock(&mport->lock); in rio_inb_pwrite_handler()
1211 list_for_each_entry(pwrite, &mport->pwrites, node) in rio_inb_pwrite_handler()
1212 pwrite->pwcback(mport, pwrite->context, pw_msg, 0); in rio_inb_pwrite_handler()
1213 mutex_unlock(&mport->lock); in rio_inb_pwrite_handler()
1220 * how to do default PW handling in combination with per-mport callbacks in rio_inb_pwrite_handler()
1223 portnum = pw_msg->em.is_port & 0xFF; in rio_inb_pwrite_handler()
1230 pr_debug("RIO: device access failed - get link partner\n"); in rio_inb_pwrite_handler()
1238 return -EIO; in rio_inb_pwrite_handler()
1243 /* For End-point devices processing stops here */ in rio_inb_pwrite_handler()
1244 if (!(rdev->pef & RIO_PEF_SWITCH)) in rio_inb_pwrite_handler()
1247 if (rdev->phys_efptr == 0) { in rio_inb_pwrite_handler()
1254 * Process the port-write notification from switch in rio_inb_pwrite_handler()
1256 if (rdev->rswitch->ops && rdev->rswitch->ops->em_handle) in rio_inb_pwrite_handler()
1257 rdev->rswitch->ops->em_handle(rdev, portnum); in rio_inb_pwrite_handler()
1265 if (!(rdev->rswitch->port_ok & (1 << portnum))) { in rio_inb_pwrite_handler()
1266 rdev->rswitch->port_ok |= (1 << portnum); in rio_inb_pwrite_handler()
1269 pr_debug("RIO_PW: Device Insertion on [%s]-P%d\n", in rio_inb_pwrite_handler()
1273 /* Clear error-stopped states (if reported). in rio_inb_pwrite_handler()
1284 if (rdev->rswitch->port_ok & (1 << portnum)) { in rio_inb_pwrite_handler()
1285 rdev->rswitch->port_ok &= ~(1 << portnum); in rio_inb_pwrite_handler()
1288 if (rdev->phys_rmap == 1) { in rio_inb_pwrite_handler()
1302 pr_debug("RIO_PW: Device Extraction on [%s]-P%d\n", in rio_inb_pwrite_handler()
1308 rdev->em_efptr + RIO_EM_PN_ERR_DETECT(portnum), &em_perrdet); in rio_inb_pwrite_handler()
1314 rdev->em_efptr + RIO_EM_PN_ERR_DETECT(portnum), 0); in rio_inb_pwrite_handler()
1318 rdev->em_efptr + RIO_EM_LTL_ERR_DETECT, &em_ltlerrdet); in rio_inb_pwrite_handler()
1324 rdev->em_efptr + RIO_EM_LTL_ERR_DETECT, 0); in rio_inb_pwrite_handler()
1327 /* Clear remaining error bits and Port-Write Pending bit */ in rio_inb_pwrite_handler()
1336 * rio_mport_get_efb - get pointer to next extended features block
1370 * rio_mport_get_feature - query for devices' extended features
1416 * rio_get_asm - Begin or continue searching for a RIO device by vid/did/asm_vid/asm_did
1440 n = from ? from->global_list.next : rio_devices.next; in rio_get_asm()
1444 if ((vid == RIO_ANY_ID || rdev->vid == vid) && in rio_get_asm()
1445 (did == RIO_ANY_ID || rdev->did == did) && in rio_get_asm()
1446 (asm_vid == RIO_ANY_ID || rdev->asm_vid == asm_vid) && in rio_get_asm()
1447 (asm_did == RIO_ANY_ID || rdev->asm_did == asm_did)) in rio_get_asm()
1449 n = n->next; in rio_get_asm()
1461 * rio_get_device - Begin or continue searching for a RIO device by vid/did
1481 * rio_std_route_add_entry - Add switch route table entry using standard
1486 * @table: routing table ID (global or port-specific)
1508 * rio_std_route_get_entry - Read switch route table entry (port number)
1514 * @table: routing table ID (global or port-specific)
1537 * rio_std_route_clr_table - Clear swotch route table using standard registers
1542 * @table: routing table ID (global or port-specific)
1556 if (mport->sys_size) { in rio_std_route_clr_table()
1588 * rio_lock_device - Acquires host device lock for specified device
1605 RIO_HOST_DID_LOCK_CSR, port->host_deviceid); in rio_lock_device()
1609 while (result != port->host_deviceid) { in rio_lock_device()
1613 return -EINVAL; in rio_lock_device()
1623 port->host_deviceid); in rio_lock_device()
1634 * rio_unlock_device - Releases host device lock for specified device
1649 port->host_deviceid); in rio_unlock_device()
1655 return -EINVAL; in rio_unlock_device()
1663 * rio_route_add_entry- Add a route entry to a switch routing table
1677 * Returns %0 on success or %-EINVAL on failure.
1682 int rc = -EINVAL; in rio_route_add_entry()
1683 struct rio_switch_ops *ops = rdev->rswitch->ops; in rio_route_add_entry()
1686 rc = rio_lock_device(rdev->net->hport, rdev->destid, in rio_route_add_entry()
1687 rdev->hopcount, 1000); in rio_route_add_entry()
1692 spin_lock(&rdev->rswitch->lock); in rio_route_add_entry()
1694 if (!ops || !ops->add_entry) { in rio_route_add_entry()
1695 rc = rio_std_route_add_entry(rdev->net->hport, rdev->destid, in rio_route_add_entry()
1696 rdev->hopcount, table, in rio_route_add_entry()
1698 } else if (try_module_get(ops->owner)) { in rio_route_add_entry()
1699 rc = ops->add_entry(rdev->net->hport, rdev->destid, in rio_route_add_entry()
1700 rdev->hopcount, table, route_destid, in rio_route_add_entry()
1702 module_put(ops->owner); in rio_route_add_entry()
1705 spin_unlock(&rdev->rswitch->lock); in rio_route_add_entry()
1708 rio_unlock_device(rdev->net->hport, rdev->destid, in rio_route_add_entry()
1709 rdev->hopcount); in rio_route_add_entry()
1716 * rio_route_get_entry- Read an entry from a switch routing table
1730 * Returns %0 on success or %-EINVAL on failure.
1735 int rc = -EINVAL; in rio_route_get_entry()
1736 struct rio_switch_ops *ops = rdev->rswitch->ops; in rio_route_get_entry()
1739 rc = rio_lock_device(rdev->net->hport, rdev->destid, in rio_route_get_entry()
1740 rdev->hopcount, 1000); in rio_route_get_entry()
1745 spin_lock(&rdev->rswitch->lock); in rio_route_get_entry()
1747 if (!ops || !ops->get_entry) { in rio_route_get_entry()
1748 rc = rio_std_route_get_entry(rdev->net->hport, rdev->destid, in rio_route_get_entry()
1749 rdev->hopcount, table, in rio_route_get_entry()
1751 } else if (try_module_get(ops->owner)) { in rio_route_get_entry()
1752 rc = ops->get_entry(rdev->net->hport, rdev->destid, in rio_route_get_entry()
1753 rdev->hopcount, table, route_destid, in rio_route_get_entry()
1755 module_put(ops->owner); in rio_route_get_entry()
1758 spin_unlock(&rdev->rswitch->lock); in rio_route_get_entry()
1761 rio_unlock_device(rdev->net->hport, rdev->destid, in rio_route_get_entry()
1762 rdev->hopcount); in rio_route_get_entry()
1768 * rio_route_clr_table - Clear a switch routing table
1779 * Returns %0 on success or %-EINVAL on failure.
1783 int rc = -EINVAL; in rio_route_clr_table()
1784 struct rio_switch_ops *ops = rdev->rswitch->ops; in rio_route_clr_table()
1787 rc = rio_lock_device(rdev->net->hport, rdev->destid, in rio_route_clr_table()
1788 rdev->hopcount, 1000); in rio_route_clr_table()
1793 spin_lock(&rdev->rswitch->lock); in rio_route_clr_table()
1795 if (!ops || !ops->clr_table) { in rio_route_clr_table()
1796 rc = rio_std_route_clr_table(rdev->net->hport, rdev->destid, in rio_route_clr_table()
1797 rdev->hopcount, table); in rio_route_clr_table()
1798 } else if (try_module_get(ops->owner)) { in rio_route_clr_table()
1799 rc = ops->clr_table(rdev->net->hport, rdev->destid, in rio_route_clr_table()
1800 rdev->hopcount, table); in rio_route_clr_table()
1802 module_put(ops->owner); in rio_route_clr_table()
1805 spin_unlock(&rdev->rswitch->lock); in rio_route_clr_table()
1808 rio_unlock_device(rdev->net->hport, rdev->destid, in rio_route_clr_table()
1809 rdev->hopcount); in rio_route_clr_table()
1822 return mport == container_of(chan->device, struct rio_mport, dma); in rio_chan_filter()
1826 * rio_request_mport_dma - request RapidIO capable DMA channel associated
1843 * rio_request_dma - request RapidIO capable DMA channel that supports
1851 return rio_request_mport_dma(rdev->net->hport); in rio_request_dma()
1856 * rio_release_dma - release specified DMA channel
1866 * rio_dma_prep_xfer - RapidIO specific wrapper
1879 * error-valued pointer or NULL if failed.
1887 if (!dchan->device->device_prep_slave_sg) { in rio_dma_prep_xfer()
1893 rio_ext.rio_addr_u = data->rio_addr_u; in rio_dma_prep_xfer()
1894 rio_ext.rio_addr = data->rio_addr; in rio_dma_prep_xfer()
1895 rio_ext.wr_type = data->wr_type; in rio_dma_prep_xfer()
1897 return dmaengine_prep_rio_sg(dchan, data->sg, data->sg_len, in rio_dma_prep_xfer()
1903 * rio_dma_prep_slave_sg - RapidIO specific wrapper
1916 * error-valued pointer or NULL if failed.
1922 return rio_dma_prep_xfer(dchan, rdev->destid, data, direction, flags); in rio_dma_prep_slave_sg()
1929 * rio_find_mport - find RIO mport by its ID
1942 if (port->id == mport_id) in rio_find_mport()
1953 * rio_register_scan - enumeration/discovery method registration interface
1962 * Returns error if the mport already has an enumerator attached to it.
1975 return -EINVAL; in rio_register_scan()
1980 * Check if there is another enumerator already registered for in rio_register_scan()
1985 if (scan->mport_id == mport_id) { in rio_register_scan()
1986 rc = -EBUSY; in rio_register_scan()
1996 rc = -ENOMEM; in rio_register_scan()
2000 scan->mport_id = mport_id; in rio_register_scan()
2001 scan->ops = scan_ops; in rio_register_scan()
2008 * enumerator registration check above). in rio_register_scan()
2013 if (port->id == mport_id) { in rio_register_scan()
2014 port->nscan = scan_ops; in rio_register_scan()
2016 } else if (mport_id == RIO_MPORT_ANY && !port->nscan) in rio_register_scan()
2017 port->nscan = scan_ops; in rio_register_scan()
2020 list_add_tail(&scan->node, &rio_scans); in rio_register_scan()
2030 * rio_unregister_scan - removes enumeration/discovery method from mport
2048 return -EINVAL; in rio_unregister_scan()
2053 if (port->id == mport_id || in rio_unregister_scan()
2054 (mport_id == RIO_MPORT_ANY && port->nscan == scan_ops)) in rio_unregister_scan()
2055 port->nscan = NULL; in rio_unregister_scan()
2058 if (scan->mport_id == mport_id) { in rio_unregister_scan()
2059 list_del(&scan->node); in rio_unregister_scan()
2072 * rio_mport_scan - execute enumeration/discovery on the specified mport
2082 if (port->id == mport_id) in rio_mport_scan()
2086 return -ENODEV; in rio_mport_scan()
2088 if (!port->nscan) { in rio_mport_scan()
2090 return -EINVAL; in rio_mport_scan()
2093 if (!try_module_get(port->nscan->owner)) { in rio_mport_scan()
2095 return -ENODEV; in rio_mport_scan()
2100 if (port->host_deviceid >= 0) in rio_mport_scan()
2101 rc = port->nscan->enumerate(port, 0); in rio_mport_scan()
2103 rc = port->nscan->discover(port, RIO_SCAN_ENUM_NO_WAIT); in rio_mport_scan()
2105 module_put(port->nscan->owner); in rio_mport_scan()
2136 work->mport->id, work->mport->name); in disc_work_handler()
2137 if (try_module_get(work->mport->nscan->owner)) { in disc_work_handler()
2138 work->mport->nscan->discover(work->mport, 0); in disc_work_handler()
2139 module_put(work->mport->nscan->owner); in disc_work_handler()
2150 return -ENODEV; in rio_init_mports()
2158 if (port->host_deviceid >= 0) { in rio_init_mports()
2159 if (port->nscan && try_module_get(port->nscan->owner)) { in rio_init_mports()
2160 port->nscan->enumerate(port, 0); in rio_init_mports()
2161 module_put(port->nscan->owner); in rio_init_mports()
2194 if (port->host_deviceid < 0 && port->nscan) { in rio_init_mports()
2218 return -1; in rio_get_hdid()
2227 return -ENODEV; in rio_mport_initialize()
2230 atomic_set(&mport->state, RIO_DEVICE_INITIALIZING); in rio_mport_initialize()
2231 mport->id = next_portid++; in rio_mport_initialize()
2232 mport->host_deviceid = rio_get_hdid(mport->id); in rio_mport_initialize()
2233 mport->nscan = NULL; in rio_mport_initialize()
2234 mutex_init(&mport->lock); in rio_mport_initialize()
2235 mport->pwe_refcnt = 0; in rio_mport_initialize()
2236 INIT_LIST_HEAD(&mport->pwrites); in rio_mport_initialize()
2254 if (port->id == scan->mport_id || in rio_register_mport()
2255 scan->mport_id == RIO_MPORT_ANY) { in rio_register_mport()
2256 port->nscan = scan->ops; in rio_register_mport()
2257 if (port->id == scan->mport_id) in rio_register_mport()
2262 list_add_tail(&port->node, &rio_mports); in rio_register_mport()
2265 dev_set_name(&port->dev, "rapidio%d", port->id); in rio_register_mport()
2266 port->dev.class = &rio_mport_class; in rio_register_mport()
2267 atomic_set(&port->state, RIO_DEVICE_RUNNING); in rio_register_mport()
2269 res = device_register(&port->dev); in rio_register_mport()
2271 dev_err(&port->dev, "RIO: mport%d registration failed ERR=%d\n", in rio_register_mport()
2272 port->id, res); in rio_register_mport()
2274 dev_dbg(&port->dev, "RIO: registered mport%d\n", port->id); in rio_register_mport()
2284 if (dev->bus == &rio_bus_type) in rio_mport_cleanup_callback()
2295 device_for_each_child(&net->dev, NULL, rio_mport_cleanup_callback); in rio_net_remove_children()
2301 pr_debug("RIO: %s %s id=%d\n", __func__, port->name, port->id); in rio_unregister_mport()
2304 if (atomic_cmpxchg(&port->state, in rio_unregister_mport()
2308 __func__, port->name); in rio_unregister_mport()
2311 if (port->net && port->net->hport == port) { in rio_unregister_mport()
2312 rio_net_remove_children(port->net); in rio_unregister_mport()
2313 rio_free_net(port->net); in rio_unregister_mport()
2321 list_del(&port->node); in rio_unregister_mport()
2323 device_unregister(&port->dev); in rio_unregister_mport()