Lines Matching refs:ioc

64  * @ioc: per adapter object
66 * Context: Calling function should acquire ioc->sas_node_lock.
72 _transport_sas_node_find_by_sas_address(struct MPT2SAS_ADAPTER *ioc,
75 if (ioc->sas_hba.sas_address == sas_address)
76 return &ioc->sas_hba;
78 return mpt2sas_scsih_expander_find_by_sas_address(ioc,
126 * @ioc: per adapter object
135 _transport_set_identify(struct MPT2SAS_ADAPTER *ioc, u16 handle,
143 if (ioc->shost_recovery || ioc->pci_error_recovery) {
145 __func__, ioc->name);
149 if ((mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0,
153 ioc->name, __FILE__, __LINE__, __func__);
161 "\nfailure at %s:%d/%s()!\n", ioc->name, handle, ioc_status,
213 * @ioc: per adapter object
219 * The callback index passed is `ioc->transport_cb_idx`
225 mpt2sas_transport_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
230 mpi_reply = mpt2sas_base_get_reply_virt_addr(ioc, reply);
231 if (ioc->transport_cmds.status == MPT2_CMD_NOT_USED)
233 if (ioc->transport_cmds.smid != smid)
235 ioc->transport_cmds.status |= MPT2_CMD_COMPLETE;
237 memcpy(ioc->transport_cmds.reply, mpi_reply,
239 ioc->transport_cmds.status |= MPT2_CMD_REPLY_VALID;
241 ioc->transport_cmds.status &= ~MPT2_CMD_PENDING;
242 complete(&ioc->transport_cmds.done);
276 * @ioc: per adapter object
285 _transport_expander_report_manufacture(struct MPT2SAS_ADAPTER *ioc,
304 if (ioc->shost_recovery || ioc->pci_error_recovery) {
306 __func__, ioc->name);
310 mutex_lock(&ioc->transport_cmds.mutex);
312 if (ioc->transport_cmds.status != MPT2_CMD_NOT_USED) {
314 ioc->name, __func__);
318 ioc->transport_cmds.status = MPT2_CMD_PENDING;
321 ioc_state = mpt2sas_base_get_iocstate(ioc, 1);
325 "%s: failed due to ioc not operational\n",
326 ioc->name, __func__);
331 ioc_state = mpt2sas_base_get_iocstate(ioc, 1);
333 "operational state(count=%d)\n", ioc->name,
337 printk(MPT2SAS_INFO_FMT "%s: ioc is operational\n",
338 ioc->name, __func__);
340 smid = mpt2sas_base_get_smid(ioc, ioc->transport_cb_idx);
343 ioc->name, __func__);
349 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid);
350 ioc->transport_cmds.smid = smid;
353 data_out = pci_alloc_consistent(ioc->pdev, sz, &data_out_dma);
359 mpt2sas_base_free_smid(ioc, smid);
383 ioc->base_add_sg_single(psge, sgl_flags |
387 psge += ioc->sge_size;
394 ioc->base_add_sg_single(psge, sgl_flags |
398 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT "report_manufacture - "
399 "send to sas_addr(0x%016llx)\n", ioc->name,
401 init_completion(&ioc->transport_cmds.done);
402 mpt2sas_base_put_smid_default(ioc, smid);
403 timeleft = wait_for_completion_timeout(&ioc->transport_cmds.done,
406 if (!(ioc->transport_cmds.status & MPT2_CMD_COMPLETE)) {
408 ioc->name, __func__);
411 if (!(ioc->transport_cmds.status & MPT2_CMD_RESET))
416 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT "report_manufacture - "
417 "complete\n", ioc->name));
419 if (ioc->transport_cmds.status & MPT2_CMD_REPLY_VALID) {
422 mpi_reply = ioc->transport_cmds.reply;
424 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT
426 ioc->name, le16_to_cpu(mpi_reply->ResponseDataLength)));
450 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT
451 "report_manufacture - no reply\n", ioc->name));
455 mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP,
458 ioc->transport_cmds.status = MPT2_CMD_NOT_USED;
460 pci_free_consistent(ioc->pdev, sz, data_out, data_out_dma);
462 mutex_unlock(&ioc->transport_cmds.mutex);
468 * @ioc: per adapter object
474 _transport_delete_port(struct MPT2SAS_ADAPTER *ioc,
485 ioc->logging_level |= MPT_DEBUG_TRANSPORT;
487 mpt2sas_device_remove(ioc, sas_address);
490 mpt2sas_expander_remove(ioc, sas_address);
491 ioc->logging_level &= ~MPT_DEBUG_TRANSPORT;
496 * @ioc: per adapter object
503 _transport_delete_phy(struct MPT2SAS_ADAPTER *ioc,
520 * @ioc: per adapter object
527 _transport_add_phy(struct MPT2SAS_ADAPTER *ioc, struct _sas_port *mpt2sas_port,
544 * @ioc: per adapter object
552 _transport_add_phy_to_an_existing_port(struct MPT2SAS_ADAPTER *ioc,
571 _transport_add_phy(ioc, mpt2sas_port, mpt2sas_phy);
579 * @ioc: per adapter object
586 _transport_del_phy_from_an_existing_port(struct MPT2SAS_ADAPTER *ioc,
602 _transport_delete_port(ioc, mpt2sas_port);
604 _transport_delete_phy(ioc, mpt2sas_port,
613 * @ioc: per adapter object
620 _transport_sanity_check(struct MPT2SAS_ADAPTER *ioc, struct _sas_node *sas_node,
629 _transport_del_phy_from_an_existing_port(ioc, sas_node,
636 * @ioc: per adapter object
639 * Context: This function will acquire ioc->sas_node_lock.
646 mpt2sas_transport_port_add(struct MPT2SAS_ADAPTER *ioc, u16 handle,
661 ioc->name, __FILE__, __LINE__, __func__);
667 spin_lock_irqsave(&ioc->sas_node_lock, flags);
668 sas_node = _transport_sas_node_find_by_sas_address(ioc, sas_address);
669 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
673 "parent sas_address(0x%016llx)!\n", ioc->name,
678 if ((_transport_set_identify(ioc, handle,
681 ioc->name, __FILE__, __LINE__, __func__);
687 ioc->name, __FILE__, __LINE__, __func__);
691 _transport_sanity_check(ioc, sas_node,
705 ioc->name, __FILE__, __LINE__, __func__);
712 ioc->name, __FILE__, __LINE__, __func__);
718 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT))
738 ioc->name, __FILE__, __LINE__, __func__);
740 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT))
746 spin_lock_irqsave(&ioc->sas_node_lock, flags);
748 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
755 _transport_expander_report_manufacture(ioc,
771 * @ioc: per adapter object
774 * Context: This function will acquire ioc->sas_node_lock.
777 * ioc->sas_port_list.
782 mpt2sas_transport_port_remove(struct MPT2SAS_ADAPTER *ioc, u64 sas_address,
792 spin_lock_irqsave(&ioc->sas_node_lock, flags);
793 sas_node = _transport_sas_node_find_by_sas_address(ioc,
795 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
818 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT))
834 * @ioc: per adapter object
842 mpt2sas_transport_add_host_phy(struct MPT2SAS_ADAPTER *ioc, struct _sas_phy
853 ioc->name, __FILE__, __LINE__, __func__);
856 if ((_transport_set_identify(ioc, mpt2sas_phy->handle,
859 ioc->name, __FILE__, __LINE__, __func__);
865 _transport_set_identify(ioc, mpt2sas_phy->attached_handle,
881 ioc->name, __FILE__, __LINE__, __func__);
885 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT))
901 * @ioc: per adapter object
909 mpt2sas_transport_add_expander_phy(struct MPT2SAS_ADAPTER *ioc, struct _sas_phy
919 ioc->name, __FILE__, __LINE__, __func__);
922 if ((_transport_set_identify(ioc, mpt2sas_phy->handle,
925 ioc->name, __FILE__, __LINE__, __func__);
932 _transport_set_identify(ioc, mpt2sas_phy->attached_handle,
949 ioc->name, __FILE__, __LINE__, __func__);
953 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT))
968 * @ioc: per adapter object
977 mpt2sas_transport_update_links(struct MPT2SAS_ADAPTER *ioc,
984 if (ioc->shost_recovery || ioc->pci_error_recovery)
987 spin_lock_irqsave(&ioc->sas_node_lock, flags);
988 sas_node = _transport_sas_node_find_by_sas_address(ioc, sas_address);
989 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
996 _transport_set_identify(ioc, handle,
998 _transport_add_phy_to_an_existing_port(ioc, sas_node,
1008 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT))
1062 * @ioc: per adapter object
1069 _transport_get_expander_phy_error_log(struct MPT2SAS_ADAPTER *ioc,
1088 if (ioc->shost_recovery || ioc->pci_error_recovery) {
1090 __func__, ioc->name);
1094 mutex_lock(&ioc->transport_cmds.mutex);
1096 if (ioc->transport_cmds.status != MPT2_CMD_NOT_USED) {
1098 ioc->name, __func__);
1102 ioc->transport_cmds.status = MPT2_CMD_PENDING;
1105 ioc_state = mpt2sas_base_get_iocstate(ioc, 1);
1109 "%s: failed due to ioc not operational\n",
1110 ioc->name, __func__);
1115 ioc_state = mpt2sas_base_get_iocstate(ioc, 1);
1117 "operational state(count=%d)\n", ioc->name,
1121 printk(MPT2SAS_INFO_FMT "%s: ioc is operational\n",
1122 ioc->name, __func__);
1124 smid = mpt2sas_base_get_smid(ioc, ioc->transport_cb_idx);
1127 ioc->name, __func__);
1132 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid);
1133 ioc->transport_cmds.smid = smid;
1137 data_out = pci_alloc_consistent(ioc->pdev, sz, &data_out_dma);
1142 mpt2sas_base_free_smid(ioc, smid);
1169 ioc->base_add_sg_single(psge, sgl_flags |
1173 psge += ioc->sge_size;
1180 ioc->base_add_sg_single(psge, sgl_flags |
1184 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT "phy_error_log - "
1185 "send to sas_addr(0x%016llx), phy(%d)\n", ioc->name,
1187 init_completion(&ioc->transport_cmds.done);
1188 mpt2sas_base_put_smid_default(ioc, smid);
1189 timeleft = wait_for_completion_timeout(&ioc->transport_cmds.done,
1192 if (!(ioc->transport_cmds.status & MPT2_CMD_COMPLETE)) {
1194 ioc->name, __func__);
1197 if (!(ioc->transport_cmds.status & MPT2_CMD_RESET))
1202 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT "phy_error_log - "
1203 "complete\n", ioc->name));
1205 if (ioc->transport_cmds.status & MPT2_CMD_REPLY_VALID) {
1207 mpi_reply = ioc->transport_cmds.reply;
1209 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT
1211 ioc->name, le16_to_cpu(mpi_reply->ResponseDataLength)));
1220 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT
1222 ioc->name, phy_error_log_reply->function_result));
1234 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT
1235 "phy_error_log - no reply\n", ioc->name));
1239 mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP,
1242 ioc->transport_cmds.status = MPT2_CMD_NOT_USED;
1244 pci_free_consistent(ioc->pdev, sz, data_out, data_out_dma);
1246 mutex_unlock(&ioc->transport_cmds.mutex);
1260 struct MPT2SAS_ADAPTER *ioc = phy_to_ioc(phy);
1265 spin_lock_irqsave(&ioc->sas_node_lock, flags);
1266 if (_transport_sas_node_find_by_sas_address(ioc,
1268 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1271 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1273 if (phy->identify.sas_address != ioc->sas_hba.sas_address)
1274 return _transport_get_expander_phy_error_log(ioc, phy);
1277 if ((mpt2sas_config_get_phy_pg1(ioc, &mpi_reply, &phy_pg1,
1280 ioc->name, __FILE__, __LINE__, __func__);
1286 "(0x%04x), loginfo(0x%08x)\n", ioc->name,
1310 struct MPT2SAS_ADAPTER *ioc = rphy_to_ioc(rphy);
1314 spin_lock_irqsave(&ioc->sas_device_lock, flags);
1315 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc,
1317 spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
1335 struct MPT2SAS_ADAPTER *ioc = rphy_to_ioc(rphy);
1339 spin_lock_irqsave(&ioc->sas_device_lock, flags);
1340 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc,
1342 spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
1381 * @ioc: per adapter object
1388 _transport_expander_phy_control(struct MPT2SAS_ADAPTER *ioc,
1407 if (ioc->shost_recovery) {
1409 __func__, ioc->name);
1413 mutex_lock(&ioc->transport_cmds.mutex);
1415 if (ioc->transport_cmds.status != MPT2_CMD_NOT_USED) {
1417 ioc->name, __func__);
1421 ioc->transport_cmds.status = MPT2_CMD_PENDING;
1424 ioc_state = mpt2sas_base_get_iocstate(ioc, 1);
1428 "%s: failed due to ioc not operational\n",
1429 ioc->name, __func__);
1434 ioc_state = mpt2sas_base_get_iocstate(ioc, 1);
1436 "operational state(count=%d)\n", ioc->name,
1440 printk(MPT2SAS_INFO_FMT "%s: ioc is operational\n",
1441 ioc->name, __func__);
1443 smid = mpt2sas_base_get_smid(ioc, ioc->transport_cb_idx);
1446 ioc->name, __func__);
1451 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid);
1452 ioc->transport_cmds.smid = smid;
1456 data_out = pci_alloc_consistent(ioc->pdev, sz, &data_out_dma);
1461 mpt2sas_base_free_smid(ioc, smid);
1493 ioc->base_add_sg_single(psge, sgl_flags |
1497 psge += ioc->sge_size;
1504 ioc->base_add_sg_single(psge, sgl_flags |
1508 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT "phy_control - "
1509 "send to sas_addr(0x%016llx), phy(%d), opcode(%d)\n", ioc->name,
1513 init_completion(&ioc->transport_cmds.done);
1514 mpt2sas_base_put_smid_default(ioc, smid);
1515 timeleft = wait_for_completion_timeout(&ioc->transport_cmds.done,
1518 if (!(ioc->transport_cmds.status & MPT2_CMD_COMPLETE)) {
1520 ioc->name, __func__);
1523 if (!(ioc->transport_cmds.status & MPT2_CMD_RESET))
1528 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT "phy_control - "
1529 "complete\n", ioc->name));
1531 if (ioc->transport_cmds.status & MPT2_CMD_REPLY_VALID) {
1533 mpi_reply = ioc->transport_cmds.reply;
1535 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT
1537 ioc->name, le16_to_cpu(mpi_reply->ResponseDataLength)));
1546 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT
1548 ioc->name, phy_control_reply->function_result));
1552 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT
1553 "phy_control - no reply\n", ioc->name));
1557 mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP,
1560 ioc->transport_cmds.status = MPT2_CMD_NOT_USED;
1562 pci_free_consistent(ioc->pdev, sz, data_out, data_out_dma);
1564 mutex_unlock(&ioc->transport_cmds.mutex);
1578 struct MPT2SAS_ADAPTER *ioc = phy_to_ioc(phy);
1583 spin_lock_irqsave(&ioc->sas_node_lock, flags);
1584 if (_transport_sas_node_find_by_sas_address(ioc,
1586 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1589 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1592 if (phy->identify.sas_address != ioc->sas_hba.sas_address)
1593 return _transport_expander_phy_control(ioc, phy,
1604 if ((mpt2sas_base_sas_iounit_control(ioc, &mpi_reply, &mpi_request))) {
1606 ioc->name, __FILE__, __LINE__, __func__);
1612 "(0x%04x), loginfo(0x%08x)\n", ioc->name,
1630 struct MPT2SAS_ADAPTER *ioc = phy_to_ioc(phy);
1638 spin_lock_irqsave(&ioc->sas_node_lock, flags);
1639 if (_transport_sas_node_find_by_sas_address(ioc,
1641 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1644 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1647 if (phy->identify.sas_address != ioc->sas_hba.sas_address)
1648 return _transport_expander_phy_control(ioc, phy,
1655 sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys *
1660 ioc->name, __FILE__, __LINE__, __func__);
1664 if ((mpt2sas_config_get_sas_iounit_pg1(ioc, &mpi_reply,
1667 ioc->name, __FILE__, __LINE__, __func__);
1675 ioc->name, __FILE__, __LINE__, __func__);
1687 mpt2sas_config_set_sas_iounit_pg1(ioc, &mpi_reply, sas_iounit_pg1, sz);
1709 struct MPT2SAS_ADAPTER *ioc = phy_to_ioc(phy);
1719 spin_lock_irqsave(&ioc->sas_node_lock, flags);
1720 if (_transport_sas_node_find_by_sas_address(ioc,
1722 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1725 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1738 if (phy->identify.sas_address != ioc->sas_hba.sas_address) {
1741 return _transport_expander_phy_control(ioc, phy,
1748 sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys *
1753 ioc->name, __FILE__, __LINE__, __func__);
1757 if ((mpt2sas_config_get_sas_iounit_pg1(ioc, &mpi_reply,
1760 ioc->name, __FILE__, __LINE__, __func__);
1768 ioc->name, __FILE__, __LINE__, __func__);
1773 for (i = 0; i < ioc->sas_hba.num_phys; i++) {
1776 (ioc->sas_hba.phy[i].phy->minimum_linkrate +
1777 (ioc->sas_hba.phy[i].phy->maximum_linkrate << 4));
1785 if (mpt2sas_config_set_sas_iounit_pg1(ioc, &mpi_reply, sas_iounit_pg1,
1788 ioc->name, __FILE__, __LINE__, __func__);
1797 if (!mpt2sas_config_get_phy_pg0(ioc, &mpi_reply, &phy_pg0,
1828 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost);
1845 "missing\n", ioc->name, __func__);
1852 "rsp %u %u\n", ioc->name, __func__, req->bio->bi_vcnt,
1857 if (ioc->shost_recovery) {
1859 __func__, ioc->name);
1863 rc = mutex_lock_interruptible(&ioc->transport_cmds.mutex);
1867 if (ioc->transport_cmds.status != MPT2_CMD_NOT_USED) {
1868 printk(MPT2SAS_ERR_FMT "%s: transport_cmds in use\n", ioc->name,
1873 ioc->transport_cmds.status = MPT2_CMD_PENDING;
1876 ioc_state = mpt2sas_base_get_iocstate(ioc, 1);
1880 "%s: failed due to ioc not operational\n",
1881 ioc->name, __func__);
1886 ioc_state = mpt2sas_base_get_iocstate(ioc, 1);
1888 "operational state(count=%d)\n", ioc->name,
1892 printk(MPT2SAS_INFO_FMT "%s: ioc is operational\n",
1893 ioc->name, __func__);
1895 smid = mpt2sas_base_get_smid(ioc, ioc->transport_cb_idx);
1898 ioc->name, __func__);
1904 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid);
1905 ioc->transport_cmds.smid = smid;
1914 cpu_to_le64(ioc->sas_hba.sas_address);
1922 dma_addr_out = pci_map_single(ioc->pdev, bio_data(req->bio),
1925 mpt2sas_base_free_smid(ioc, smid);
1929 ioc->base_add_sg_single(psge, sgl_flags | (blk_rq_bytes(req) - 4),
1933 psge += ioc->sge_size;
1940 dma_addr_in = pci_map_single(ioc->pdev, bio_data(rsp->bio),
1943 mpt2sas_base_free_smid(ioc, smid);
1947 ioc->base_add_sg_single(psge, sgl_flags | (blk_rq_bytes(rsp) + 4),
1950 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT "%s - "
1951 "sending smp request\n", ioc->name, __func__));
1953 init_completion(&ioc->transport_cmds.done);
1954 mpt2sas_base_put_smid_default(ioc, smid);
1955 timeleft = wait_for_completion_timeout(&ioc->transport_cmds.done,
1958 if (!(ioc->transport_cmds.status & MPT2_CMD_COMPLETE)) {
1960 __func__, ioc->name);
1963 if (!(ioc->transport_cmds.status & MPT2_CMD_RESET))
1968 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT "%s - "
1969 "complete\n", ioc->name, __func__));
1971 if (ioc->transport_cmds.status & MPT2_CMD_REPLY_VALID) {
1973 mpi_reply = ioc->transport_cmds.reply;
1975 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT
1977 ioc->name, __func__,
1986 dtransportprintk(ioc, printk(MPT2SAS_INFO_FMT
1987 "%s - no reply\n", ioc->name, __func__));
1993 mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP,
2000 pci_unmap_single(ioc->pdev, dma_addr_out, blk_rq_bytes(req),
2003 pci_unmap_single(ioc->pdev, dma_addr_in, blk_rq_bytes(rsp),
2007 ioc->transport_cmds.status = MPT2_CMD_NOT_USED;
2008 mutex_unlock(&ioc->transport_cmds.mutex);