Lines Matching defs:ioc

65  * @ioc: per adapter object
67 * Context: Calling function should acquire ioc->sas_node_lock.
73 _transport_sas_node_find_by_sas_address(struct MPT3SAS_ADAPTER *ioc,
76 if (ioc->sas_hba.sas_address == sas_address)
77 return &ioc->sas_hba;
79 return mpt3sas_scsih_expander_find_by_sas_address(ioc,
131 * @ioc: per adapter object
140 _transport_set_identify(struct MPT3SAS_ADAPTER *ioc, u16 handle,
148 if (ioc->shost_recovery || ioc->pci_error_recovery) {
149 ioc_info(ioc, "%s: host reset in progress!\n", __func__);
153 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0,
155 ioc_err(ioc, "failure at %s:%d/%s()!\n",
163 ioc_err(ioc, "handle(0x%04x), ioc_status(0x%04x) failure at %s:%d/%s()!\n",
218 * @ioc: per adapter object
224 * The callback index passed is `ioc->transport_cb_idx`
230 mpt3sas_transport_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
235 mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply);
236 if (ioc->transport_cmds.status == MPT3_CMD_NOT_USED)
238 if (ioc->transport_cmds.smid != smid)
240 ioc->transport_cmds.status |= MPT3_CMD_COMPLETE;
242 memcpy(ioc->transport_cmds.reply, mpi_reply,
244 ioc->transport_cmds.status |= MPT3_CMD_REPLY_VALID;
246 ioc->transport_cmds.status &= ~MPT3_CMD_PENDING;
247 complete(&ioc->transport_cmds.done);
281 * @ioc: per adapter object
290 _transport_expander_report_manufacture(struct MPT3SAS_ADAPTER *ioc,
307 if (ioc->shost_recovery || ioc->pci_error_recovery) {
308 ioc_info(ioc, "%s: host reset in progress!\n", __func__);
312 mutex_lock(&ioc->transport_cmds.mutex);
314 if (ioc->transport_cmds.status != MPT3_CMD_NOT_USED) {
315 ioc_err(ioc, "%s: transport_cmds in use\n", __func__);
319 ioc->transport_cmds.status = MPT3_CMD_PENDING;
321 rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT);
325 smid = mpt3sas_base_get_smid(ioc, ioc->transport_cb_idx);
327 ioc_err(ioc, "%s: failed obtaining a smid\n", __func__);
333 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid);
334 ioc->transport_cmds.smid = smid;
338 data_out = dma_alloc_coherent(&ioc->pdev->dev, data_out_sz + data_in_sz,
344 mpt3sas_base_free_smid(ioc, smid);
363 ioc->build_sg(ioc, psge, data_out_dma, data_out_sz, data_in_dma,
366 dtransportprintk(ioc,
367 ioc_info(ioc, "report_manufacture - send to sas_addr(0x%016llx)\n",
369 init_completion(&ioc->transport_cmds.done);
370 ioc->put_smid_default(ioc, smid);
371 wait_for_completion_timeout(&ioc->transport_cmds.done, 10*HZ);
373 if (!(ioc->transport_cmds.status & MPT3_CMD_COMPLETE)) {
374 ioc_err(ioc, "%s: timeout\n", __func__);
377 if (!(ioc->transport_cmds.status & MPT3_CMD_RESET))
382 dtransportprintk(ioc, ioc_info(ioc, "report_manufacture - complete\n"));
384 if (ioc->transport_cmds.status & MPT3_CMD_REPLY_VALID) {
387 mpi_reply = ioc->transport_cmds.reply;
389 dtransportprintk(ioc,
390 ioc_info(ioc, "report_manufacture - reply data transfer size(%d)\n",
415 dtransportprintk(ioc,
416 ioc_info(ioc, "report_manufacture - no reply\n"));
420 mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER);
422 ioc->transport_cmds.status = MPT3_CMD_NOT_USED;
424 dma_free_coherent(&ioc->pdev->dev, data_out_sz + data_in_sz,
427 mutex_unlock(&ioc->transport_cmds.mutex);
434 * @ioc: per adapter object
438 _transport_delete_port(struct MPT3SAS_ADAPTER *ioc,
449 ioc->logging_level |= MPT_DEBUG_TRANSPORT;
451 mpt3sas_device_remove_by_sas_address(ioc, sas_address);
454 mpt3sas_expander_remove(ioc, sas_address);
455 ioc->logging_level &= ~MPT_DEBUG_TRANSPORT;
460 * @ioc: per adapter object
465 _transport_delete_phy(struct MPT3SAS_ADAPTER *ioc,
482 * @ioc: per adapter object
487 _transport_add_phy(struct MPT3SAS_ADAPTER *ioc, struct _sas_port *mpt3sas_port,
504 * @ioc: per adapter object
510 _transport_add_phy_to_an_existing_port(struct MPT3SAS_ADAPTER *ioc,
530 _transport_add_phy(ioc, mpt3sas_port, mpt3sas_phy);
538 * @ioc: per adapter object
543 _transport_del_phy_from_an_existing_port(struct MPT3SAS_ADAPTER *ioc,
560 _transport_delete_port(ioc, mpt3sas_port);
562 _transport_delete_phy(ioc, mpt3sas_port,
571 * @ioc: per adapter object
578 _transport_sanity_check(struct MPT3SAS_ADAPTER *ioc, struct _sas_node *sas_node,
587 _transport_del_phy_from_an_existing_port(ioc, sas_node,
594 * @ioc: per adapter object
597 * Context: This function will acquire ioc->sas_node_lock.
604 mpt3sas_transport_port_add(struct MPT3SAS_ADAPTER *ioc, u16 handle,
619 ioc_err(ioc, "failure at %s:%d/%s()!\n",
626 spin_lock_irqsave(&ioc->sas_node_lock, flags);
627 sas_node = _transport_sas_node_find_by_sas_address(ioc, sas_address);
628 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
631 ioc_err(ioc, "%s: Could not find parent sas_address(0x%016llx)!\n",
636 if ((_transport_set_identify(ioc, handle,
638 ioc_err(ioc, "failure at %s:%d/%s()!\n",
644 ioc_err(ioc, "failure at %s:%d/%s()!\n",
649 _transport_sanity_check(ioc, sas_node,
662 ioc_err(ioc, "failure at %s:%d/%s()!\n",
668 ioc_err(ioc, "failure at %s:%d/%s()!\n",
674 ioc_err(ioc, "failure at %s:%d/%s()!\n",
681 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT))
699 ioc_err(ioc, "failure at %s:%d/%s()!\n",
707 sas_device = mpt3sas_get_sdev_by_addr(ioc,
710 dfailprintk(ioc,
711 ioc_info(ioc, "failure at %s:%d/%s()!\n",
719 ioc_err(ioc, "failure at %s:%d/%s()!\n",
736 spin_lock_irqsave(&ioc->sas_node_lock, flags);
738 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
745 _transport_expander_report_manufacture(ioc,
763 * @ioc: per adapter object
766 * Context: This function will acquire ioc->sas_node_lock.
769 * ioc->sas_port_list.
772 mpt3sas_transport_port_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
782 spin_lock_irqsave(&ioc->sas_node_lock, flags);
783 sas_node = _transport_sas_node_find_by_sas_address(ioc,
786 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
799 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
809 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
813 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT))
820 if (!ioc->remove_host)
825 if (!ioc->remove_host)
827 ioc_info(ioc, "%s: removed: sas_addr(0x%016llx)\n",
834 * @ioc: per adapter object
842 mpt3sas_transport_add_host_phy(struct MPT3SAS_ADAPTER *ioc, struct _sas_phy
852 ioc_err(ioc, "failure at %s:%d/%s()!\n",
856 if ((_transport_set_identify(ioc, mpt3sas_phy->handle,
858 ioc_err(ioc, "failure at %s:%d/%s()!\n",
866 _transport_set_identify(ioc, mpt3sas_phy->attached_handle,
881 ioc_err(ioc, "failure at %s:%d/%s()!\n",
886 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT))
902 * @ioc: per adapter object
910 mpt3sas_transport_add_expander_phy(struct MPT3SAS_ADAPTER *ioc, struct _sas_phy
920 ioc_err(ioc, "failure at %s:%d/%s()!\n",
924 if ((_transport_set_identify(ioc, mpt3sas_phy->handle,
926 ioc_err(ioc, "failure at %s:%d/%s()!\n",
935 _transport_set_identify(ioc, mpt3sas_phy->attached_handle,
951 ioc_err(ioc, "failure at %s:%d/%s()!\n",
956 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT))
971 * @ioc: per adapter object
978 mpt3sas_transport_update_links(struct MPT3SAS_ADAPTER *ioc,
985 if (ioc->shost_recovery || ioc->pci_error_recovery)
988 spin_lock_irqsave(&ioc->sas_node_lock, flags);
989 sas_node = _transport_sas_node_find_by_sas_address(ioc, sas_address);
991 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
997 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
999 _transport_set_identify(ioc, handle,
1001 _transport_add_phy_to_an_existing_port(ioc, sas_node,
1011 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT))
1064 * @ioc: per adapter object
1071 _transport_get_expander_phy_error_log(struct MPT3SAS_ADAPTER *ioc,
1086 if (ioc->shost_recovery || ioc->pci_error_recovery) {
1087 ioc_info(ioc, "%s: host reset in progress!\n", __func__);
1091 mutex_lock(&ioc->transport_cmds.mutex);
1093 if (ioc->transport_cmds.status != MPT3_CMD_NOT_USED) {
1094 ioc_err(ioc, "%s: transport_cmds in use\n", __func__);
1098 ioc->transport_cmds.status = MPT3_CMD_PENDING;
1100 rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT);
1104 smid = mpt3sas_base_get_smid(ioc, ioc->transport_cb_idx);
1106 ioc_err(ioc, "%s: failed obtaining a smid\n", __func__);
1111 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid);
1112 ioc->transport_cmds.smid = smid;
1116 data_out = dma_alloc_coherent(&ioc->pdev->dev, sz, &data_out_dma,
1122 mpt3sas_base_free_smid(ioc, smid);
1145 ioc->build_sg(ioc, psge, data_out_dma,
1150 dtransportprintk(ioc,
1151 ioc_info(ioc, "phy_error_log - send to sas_addr(0x%016llx), phy(%d)\n",
1154 init_completion(&ioc->transport_cmds.done);
1155 ioc->put_smid_default(ioc, smid);
1156 wait_for_completion_timeout(&ioc->transport_cmds.done, 10*HZ);
1158 if (!(ioc->transport_cmds.status & MPT3_CMD_COMPLETE)) {
1159 ioc_err(ioc, "%s: timeout\n", __func__);
1162 if (!(ioc->transport_cmds.status & MPT3_CMD_RESET))
1167 dtransportprintk(ioc, ioc_info(ioc, "phy_error_log - complete\n"));
1169 if (ioc->transport_cmds.status & MPT3_CMD_REPLY_VALID) {
1171 mpi_reply = ioc->transport_cmds.reply;
1173 dtransportprintk(ioc,
1174 ioc_info(ioc, "phy_error_log - reply data transfer size(%d)\n",
1184 dtransportprintk(ioc,
1185 ioc_info(ioc, "phy_error_log - function_result(%d)\n",
1198 dtransportprintk(ioc,
1199 ioc_info(ioc, "phy_error_log - no reply\n"));
1203 mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER);
1205 ioc->transport_cmds.status = MPT3_CMD_NOT_USED;
1207 dma_free_coherent(&ioc->pdev->dev, sz, data_out, data_out_dma);
1209 mutex_unlock(&ioc->transport_cmds.mutex);
1223 struct MPT3SAS_ADAPTER *ioc = phy_to_ioc(phy);
1228 spin_lock_irqsave(&ioc->sas_node_lock, flags);
1229 if (_transport_sas_node_find_by_sas_address(ioc,
1231 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1234 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1236 if (phy->identify.sas_address != ioc->sas_hba.sas_address)
1237 return _transport_get_expander_phy_error_log(ioc, phy);
1240 if ((mpt3sas_config_get_phy_pg1(ioc, &mpi_reply, &phy_pg1,
1242 ioc_err(ioc, "failure at %s:%d/%s()!\n",
1248 ioc_info(ioc, "phy(%d), ioc_status (0x%04x), loginfo(0x%08x)\n",
1274 struct MPT3SAS_ADAPTER *ioc = rphy_to_ioc(rphy);
1279 spin_lock_irqsave(&ioc->sas_device_lock, flags);
1280 sas_device = __mpt3sas_get_sdev_by_addr(ioc,
1291 spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
1304 struct MPT3SAS_ADAPTER *ioc = rphy_to_ioc(rphy);
1309 spin_lock_irqsave(&ioc->sas_device_lock, flags);
1310 sas_device = __mpt3sas_get_sdev_by_addr(ioc,
1318 spin_unlock_irqrestore(&ioc->sas_device_lock, flags);
1353 * @ioc: per adapter object
1361 _transport_expander_phy_control(struct MPT3SAS_ADAPTER *ioc,
1376 if (ioc->shost_recovery || ioc->pci_error_recovery) {
1377 ioc_info(ioc, "%s: host reset in progress!\n", __func__);
1381 mutex_lock(&ioc->transport_cmds.mutex);
1383 if (ioc->transport_cmds.status != MPT3_CMD_NOT_USED) {
1384 ioc_err(ioc, "%s: transport_cmds in use\n", __func__);
1388 ioc->transport_cmds.status = MPT3_CMD_PENDING;
1390 rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT);
1394 smid = mpt3sas_base_get_smid(ioc, ioc->transport_cb_idx);
1396 ioc_err(ioc, "%s: failed obtaining a smid\n", __func__);
1401 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid);
1402 ioc->transport_cmds.smid = smid;
1406 data_out = dma_alloc_coherent(&ioc->pdev->dev, sz, &data_out_dma,
1412 mpt3sas_base_free_smid(ioc, smid);
1440 ioc->build_sg(ioc, psge, data_out_dma,
1445 dtransportprintk(ioc,
1446 ioc_info(ioc, "phy_control - send to sas_addr(0x%016llx), phy(%d), opcode(%d)\n",
1449 init_completion(&ioc->transport_cmds.done);
1450 ioc->put_smid_default(ioc, smid);
1451 wait_for_completion_timeout(&ioc->transport_cmds.done, 10*HZ);
1453 if (!(ioc->transport_cmds.status & MPT3_CMD_COMPLETE)) {
1454 ioc_err(ioc, "%s: timeout\n", __func__);
1457 if (!(ioc->transport_cmds.status & MPT3_CMD_RESET))
1462 dtransportprintk(ioc, ioc_info(ioc, "phy_control - complete\n"));
1464 if (ioc->transport_cmds.status & MPT3_CMD_REPLY_VALID) {
1466 mpi_reply = ioc->transport_cmds.reply;
1468 dtransportprintk(ioc,
1469 ioc_info(ioc, "phy_control - reply data transfer size(%d)\n",
1479 dtransportprintk(ioc,
1480 ioc_info(ioc, "phy_control - function_result(%d)\n",
1485 dtransportprintk(ioc,
1486 ioc_info(ioc, "phy_control - no reply\n"));
1490 mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER);
1492 ioc->transport_cmds.status = MPT3_CMD_NOT_USED;
1494 dma_free_coherent(&ioc->pdev->dev, sz, data_out,
1497 mutex_unlock(&ioc->transport_cmds.mutex);
1511 struct MPT3SAS_ADAPTER *ioc = phy_to_ioc(phy);
1516 spin_lock_irqsave(&ioc->sas_node_lock, flags);
1517 if (_transport_sas_node_find_by_sas_address(ioc,
1519 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1522 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1525 if (phy->identify.sas_address != ioc->sas_hba.sas_address)
1526 return _transport_expander_phy_control(ioc, phy,
1537 if ((mpt3sas_base_sas_iounit_control(ioc, &mpi_reply, &mpi_request))) {
1538 ioc_err(ioc, "failure at %s:%d/%s()!\n",
1544 ioc_info(ioc, "phy(%d), ioc_status(0x%04x), loginfo(0x%08x)\n",
1562 struct MPT3SAS_ADAPTER *ioc = phy_to_ioc(phy);
1572 spin_lock_irqsave(&ioc->sas_node_lock, flags);
1573 if (_transport_sas_node_find_by_sas_address(ioc,
1575 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1578 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1581 if (phy->identify.sas_address != ioc->sas_hba.sas_address)
1582 return _transport_expander_phy_control(ioc, phy,
1589 sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys *
1593 ioc_err(ioc, "failure at %s:%d/%s()!\n",
1598 if ((mpt3sas_config_get_sas_iounit_pg0(ioc, &mpi_reply,
1600 ioc_err(ioc, "failure at %s:%d/%s()!\n",
1608 ioc_err(ioc, "failure at %s:%d/%s()!\n",
1615 for (i = 0, discovery_active = 0; i < ioc->sas_hba.num_phys ; i++) {
1618 ioc_err(ioc, "discovery is active on port = %d, phy = %d: unable to enable/disable phys, try again later!\n",
1630 sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys *
1634 ioc_err(ioc, "failure at %s:%d/%s()!\n",
1639 if ((mpt3sas_config_get_sas_iounit_pg1(ioc, &mpi_reply,
1641 ioc_err(ioc, "failure at %s:%d/%s()!\n",
1649 ioc_err(ioc, "failure at %s:%d/%s()!\n",
1656 for (i = 0; i < ioc->sas_hba.num_phys ; i++) {
1675 mpt3sas_config_set_sas_iounit_pg1(ioc, &mpi_reply, sas_iounit_pg1, sz);
1699 struct MPT3SAS_ADAPTER *ioc = phy_to_ioc(phy);
1709 spin_lock_irqsave(&ioc->sas_node_lock, flags);
1710 if (_transport_sas_node_find_by_sas_address(ioc,
1712 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1715 spin_unlock_irqrestore(&ioc->sas_node_lock, flags);
1728 if (phy->identify.sas_address != ioc->sas_hba.sas_address) {
1731 return _transport_expander_phy_control(ioc, phy,
1738 sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys *
1742 ioc_err(ioc, "failure at %s:%d/%s()!\n",
1747 if ((mpt3sas_config_get_sas_iounit_pg1(ioc, &mpi_reply,
1749 ioc_err(ioc, "failure at %s:%d/%s()!\n",
1757 ioc_err(ioc, "failure at %s:%d/%s()!\n",
1763 for (i = 0; i < ioc->sas_hba.num_phys; i++) {
1766 (ioc->sas_hba.phy[i].phy->minimum_linkrate +
1767 (ioc->sas_hba.phy[i].phy->maximum_linkrate << 4));
1775 if (mpt3sas_config_set_sas_iounit_pg1(ioc, &mpi_reply, sas_iounit_pg1,
1777 ioc_err(ioc, "failure at %s:%d/%s()!\n",
1787 if (!mpt3sas_config_get_phy_pg0(ioc, &mpi_reply, &phy_pg0,
1849 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost);
1863 if (ioc->shost_recovery || ioc->pci_error_recovery) {
1864 ioc_info(ioc, "%s: host reset in progress!\n", __func__);
1869 rc = mutex_lock_interruptible(&ioc->transport_cmds.mutex);
1873 if (ioc->transport_cmds.status != MPT3_CMD_NOT_USED) {
1874 ioc_err(ioc, "%s: transport_cmds in use\n",
1879 ioc->transport_cmds.status = MPT3_CMD_PENDING;
1881 rc = _transport_map_smp_buffer(&ioc->pdev->dev, &job->request_payload,
1891 rc = _transport_map_smp_buffer(&ioc->pdev->dev, &job->reply_payload,
1896 rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT);
1900 smid = mpt3sas_base_get_smid(ioc, ioc->transport_cb_idx);
1902 ioc_err(ioc, "%s: failed obtaining a smid\n", __func__);
1908 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid);
1909 ioc->transport_cmds.smid = smid;
1916 cpu_to_le64(ioc->sas_hba.sas_address);
1920 ioc->build_sg(ioc, psge, dma_addr_out, dma_len_out - 4, dma_addr_in,
1923 dtransportprintk(ioc,
1924 ioc_info(ioc, "%s: sending smp request\n", __func__));
1926 init_completion(&ioc->transport_cmds.done);
1927 ioc->put_smid_default(ioc, smid);
1928 wait_for_completion_timeout(&ioc->transport_cmds.done, 10*HZ);
1930 if (!(ioc->transport_cmds.status & MPT3_CMD_COMPLETE)) {
1931 ioc_err(ioc, "%s: timeout\n", __func__);
1934 if (!(ioc->transport_cmds.status & MPT3_CMD_RESET)) {
1935 mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER);
1941 dtransportprintk(ioc, ioc_info(ioc, "%s - complete\n", __func__));
1943 if (!(ioc->transport_cmds.status & MPT3_CMD_REPLY_VALID)) {
1944 dtransportprintk(ioc,
1945 ioc_info(ioc, "%s: no reply\n", __func__));
1950 mpi_reply = ioc->transport_cmds.reply;
1952 dtransportprintk(ioc,
1953 ioc_info(ioc, "%s: reply data transfer size(%d)\n",
1969 _transport_unmap_smp_buffer(&ioc->pdev->dev, &job->reply_payload,
1972 _transport_unmap_smp_buffer(&ioc->pdev->dev, &job->request_payload,
1975 ioc->transport_cmds.status = MPT3_CMD_NOT_USED;
1976 mutex_unlock(&ioc->transport_cmds.mutex);