Lines Matching refs:ioc

92 _transport_sas_node_find_by_sas_address(struct MPT3SAS_ADAPTER *ioc,  in _transport_sas_node_find_by_sas_address()  argument
95 if (ioc->sas_hba.sas_address == sas_address) in _transport_sas_node_find_by_sas_address()
96 return &ioc->sas_hba; in _transport_sas_node_find_by_sas_address()
98 return mpt3sas_scsih_expander_find_by_sas_address(ioc, in _transport_sas_node_find_by_sas_address()
110 _transport_get_port_id_by_rphy(struct MPT3SAS_ADAPTER *ioc, in _transport_get_port_id_by_rphy() argument
123 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _transport_get_port_id_by_rphy()
125 &ioc->sas_expander_list, list) { in _transport_get_port_id_by_rphy()
131 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_get_port_id_by_rphy()
133 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _transport_get_port_id_by_rphy()
134 sas_device = __mpt3sas_get_sdev_by_rphy(ioc, rphy); in _transport_get_port_id_by_rphy()
139 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _transport_get_port_id_by_rphy()
202 _transport_set_identify(struct MPT3SAS_ADAPTER *ioc, u16 handle, in _transport_set_identify() argument
210 if (ioc->shost_recovery || ioc->pci_error_recovery) { in _transport_set_identify()
211 ioc_info(ioc, "%s: host reset in progress!\n", __func__); in _transport_set_identify()
215 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _transport_set_identify()
217 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_set_identify()
225 ioc_err(ioc, "handle(0x%04x), ioc_status(0x%04x) failure at %s:%d/%s()!\n", in _transport_set_identify()
292 mpt3sas_transport_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, in mpt3sas_transport_done() argument
297 mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply); in mpt3sas_transport_done()
298 if (ioc->transport_cmds.status == MPT3_CMD_NOT_USED) in mpt3sas_transport_done()
300 if (ioc->transport_cmds.smid != smid) in mpt3sas_transport_done()
302 ioc->transport_cmds.status |= MPT3_CMD_COMPLETE; in mpt3sas_transport_done()
304 memcpy(ioc->transport_cmds.reply, mpi_reply, in mpt3sas_transport_done()
306 ioc->transport_cmds.status |= MPT3_CMD_REPLY_VALID; in mpt3sas_transport_done()
308 ioc->transport_cmds.status &= ~MPT3_CMD_PENDING; in mpt3sas_transport_done()
309 complete(&ioc->transport_cmds.done); in mpt3sas_transport_done()
353 _transport_expander_report_manufacture(struct MPT3SAS_ADAPTER *ioc, in _transport_expander_report_manufacture() argument
370 if (ioc->shost_recovery || ioc->pci_error_recovery) { in _transport_expander_report_manufacture()
371 ioc_info(ioc, "%s: host reset in progress!\n", __func__); in _transport_expander_report_manufacture()
375 mutex_lock(&ioc->transport_cmds.mutex); in _transport_expander_report_manufacture()
377 if (ioc->transport_cmds.status != MPT3_CMD_NOT_USED) { in _transport_expander_report_manufacture()
378 ioc_err(ioc, "%s: transport_cmds in use\n", __func__); in _transport_expander_report_manufacture()
382 ioc->transport_cmds.status = MPT3_CMD_PENDING; in _transport_expander_report_manufacture()
384 rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT); in _transport_expander_report_manufacture()
388 smid = mpt3sas_base_get_smid(ioc, ioc->transport_cb_idx); in _transport_expander_report_manufacture()
390 ioc_err(ioc, "%s: failed obtaining a smid\n", __func__); in _transport_expander_report_manufacture()
396 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _transport_expander_report_manufacture()
397 ioc->transport_cmds.smid = smid; in _transport_expander_report_manufacture()
401 data_out = dma_alloc_coherent(&ioc->pdev->dev, data_out_sz + data_in_sz, in _transport_expander_report_manufacture()
407 mpt3sas_base_free_smid(ioc, smid); in _transport_expander_report_manufacture()
426 ioc->build_sg(ioc, psge, data_out_dma, data_out_sz, data_in_dma, in _transport_expander_report_manufacture()
429 dtransportprintk(ioc, in _transport_expander_report_manufacture()
430 ioc_info(ioc, "report_manufacture - send to sas_addr(0x%016llx)\n", in _transport_expander_report_manufacture()
432 init_completion(&ioc->transport_cmds.done); in _transport_expander_report_manufacture()
433 ioc->put_smid_default(ioc, smid); in _transport_expander_report_manufacture()
434 wait_for_completion_timeout(&ioc->transport_cmds.done, 10*HZ); in _transport_expander_report_manufacture()
436 if (!(ioc->transport_cmds.status & MPT3_CMD_COMPLETE)) { in _transport_expander_report_manufacture()
437 ioc_err(ioc, "%s: timeout\n", __func__); in _transport_expander_report_manufacture()
440 if (!(ioc->transport_cmds.status & MPT3_CMD_RESET)) in _transport_expander_report_manufacture()
445 dtransportprintk(ioc, ioc_info(ioc, "report_manufacture - complete\n")); in _transport_expander_report_manufacture()
447 if (ioc->transport_cmds.status & MPT3_CMD_REPLY_VALID) { in _transport_expander_report_manufacture()
450 mpi_reply = ioc->transport_cmds.reply; in _transport_expander_report_manufacture()
452 dtransportprintk(ioc, in _transport_expander_report_manufacture()
453 ioc_info(ioc, "report_manufacture - reply data transfer size(%d)\n", in _transport_expander_report_manufacture()
478 dtransportprintk(ioc, in _transport_expander_report_manufacture()
479 ioc_info(ioc, "report_manufacture - no reply\n")); in _transport_expander_report_manufacture()
483 mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); in _transport_expander_report_manufacture()
485 ioc->transport_cmds.status = MPT3_CMD_NOT_USED; in _transport_expander_report_manufacture()
487 dma_free_coherent(&ioc->pdev->dev, data_out_sz + data_in_sz, in _transport_expander_report_manufacture()
490 mutex_unlock(&ioc->transport_cmds.mutex); in _transport_expander_report_manufacture()
501 _transport_delete_port(struct MPT3SAS_ADAPTER *ioc, in _transport_delete_port() argument
513 ioc->logging_level |= MPT_DEBUG_TRANSPORT; in _transport_delete_port()
515 mpt3sas_device_remove_by_sas_address(ioc, in _transport_delete_port()
519 mpt3sas_expander_remove(ioc, sas_address, port); in _transport_delete_port()
520 ioc->logging_level &= ~MPT_DEBUG_TRANSPORT; in _transport_delete_port()
530 _transport_delete_phy(struct MPT3SAS_ADAPTER *ioc, in _transport_delete_phy() argument
552 _transport_add_phy(struct MPT3SAS_ADAPTER *ioc, struct _sas_port *mpt3sas_port, in _transport_add_phy() argument
576 mpt3sas_transport_add_phy_to_an_existing_port(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_transport_add_phy_to_an_existing_port() argument
601 _transport_add_phy(ioc, mpt3sas_port, mpt3sas_phy); in mpt3sas_transport_add_phy_to_an_existing_port()
614 mpt3sas_transport_del_phy_from_an_existing_port(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_transport_del_phy_from_an_existing_port() argument
634 if (mpt3sas_port->num_phys == 1 && !ioc->shost_recovery) in mpt3sas_transport_del_phy_from_an_existing_port()
635 _transport_delete_port(ioc, mpt3sas_port); in mpt3sas_transport_del_phy_from_an_existing_port()
637 _transport_delete_phy(ioc, mpt3sas_port, in mpt3sas_transport_del_phy_from_an_existing_port()
654 _transport_sanity_check(struct MPT3SAS_ADAPTER *ioc, struct _sas_node *sas_node, in _transport_sanity_check() argument
665 mpt3sas_transport_del_phy_from_an_existing_port(ioc, in _transport_sanity_check()
683 mpt3sas_transport_port_add(struct MPT3SAS_ADAPTER *ioc, u16 handle, in mpt3sas_transport_port_add() argument
697 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
705 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
712 spin_lock_irqsave(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_add()
713 sas_node = _transport_sas_node_find_by_sas_address(ioc, in mpt3sas_transport_port_add()
715 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_add()
718 ioc_err(ioc, "%s: Could not find parent sas_address(0x%016llx)!\n", in mpt3sas_transport_port_add()
723 if ((_transport_set_identify(ioc, handle, in mpt3sas_transport_port_add()
725 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
731 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
737 _transport_sanity_check(ioc, sas_node, in mpt3sas_transport_port_add()
749 if (sas_node->handle <= ioc->sas_hba.num_phys) { in mpt3sas_transport_port_add()
755 vphy = mpt3sas_get_vphy_by_phy(ioc, hba_port, i); in mpt3sas_transport_port_add()
757 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
765 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
771 sas_device = mpt3sas_get_sdev_by_addr(ioc, in mpt3sas_transport_port_add()
775 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
783 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
789 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
796 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT)) in mpt3sas_transport_port_add()
811 if (sas_node->handle <= ioc->sas_hba.num_phys) { in mpt3sas_transport_port_add()
822 if (sas_node->handle <= ioc->sas_hba.num_phys) in mpt3sas_transport_port_add()
830 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
844 spin_lock_irqsave(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_add()
846 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_add()
853 _transport_expander_report_manufacture(ioc, in mpt3sas_transport_port_add()
878 mpt3sas_transport_port_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address, in mpt3sas_transport_port_remove() argument
893 spin_lock_irqsave(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_remove()
894 sas_node = _transport_sas_node_find_by_sas_address(ioc, in mpt3sas_transport_port_remove()
897 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_remove()
912 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_remove()
916 if (sas_node->handle <= ioc->sas_hba.num_phys && in mpt3sas_transport_port_remove()
917 (ioc->multipath_on_hba)) { in mpt3sas_transport_port_remove()
923 ioc_info(ioc, in mpt3sas_transport_port_remove()
933 &ioc->port_table_list, list) { in mpt3sas_transport_port_remove()
948 ioc_info(ioc, in mpt3sas_transport_port_remove()
962 ioc_info(ioc, in mpt3sas_transport_port_remove()
977 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_remove()
981 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT)) in mpt3sas_transport_port_remove()
988 if (!ioc->remove_host) in mpt3sas_transport_port_remove()
993 if (!ioc->remove_host) in mpt3sas_transport_port_remove()
995 ioc_info(ioc, "%s: removed: sas_addr(0x%016llx)\n", in mpt3sas_transport_port_remove()
1010 mpt3sas_transport_add_host_phy(struct MPT3SAS_ADAPTER *ioc, struct _sas_phy in mpt3sas_transport_add_host_phy() argument
1020 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_add_host_phy()
1024 if ((_transport_set_identify(ioc, mpt3sas_phy->handle, in mpt3sas_transport_add_host_phy()
1026 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_add_host_phy()
1034 _transport_set_identify(ioc, mpt3sas_phy->attached_handle, in mpt3sas_transport_add_host_phy()
1050 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_add_host_phy()
1055 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT)) in mpt3sas_transport_add_host_phy()
1079 mpt3sas_transport_add_expander_phy(struct MPT3SAS_ADAPTER *ioc, struct _sas_phy in mpt3sas_transport_add_expander_phy() argument
1089 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_add_expander_phy()
1093 if ((_transport_set_identify(ioc, mpt3sas_phy->handle, in mpt3sas_transport_add_expander_phy()
1095 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_add_expander_phy()
1104 _transport_set_identify(ioc, mpt3sas_phy->attached_handle, in mpt3sas_transport_add_expander_phy()
1121 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_add_expander_phy()
1126 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT)) in mpt3sas_transport_add_expander_phy()
1151 mpt3sas_transport_update_links(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_transport_update_links() argument
1160 if (ioc->shost_recovery || ioc->pci_error_recovery) in mpt3sas_transport_update_links()
1163 spin_lock_irqsave(&ioc->sas_node_lock, flags); in mpt3sas_transport_update_links()
1164 sas_node = _transport_sas_node_find_by_sas_address(ioc, in mpt3sas_transport_update_links()
1167 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_transport_update_links()
1173 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_transport_update_links()
1175 _transport_set_identify(ioc, handle, in mpt3sas_transport_update_links()
1177 if ((sas_node->handle <= ioc->sas_hba.num_phys) && in mpt3sas_transport_update_links()
1178 (ioc->multipath_on_hba)) { in mpt3sas_transport_update_links()
1180 &ioc->port_table_list, list) { in mpt3sas_transport_update_links()
1187 mpt3sas_transport_add_phy_to_an_existing_port(ioc, sas_node, in mpt3sas_transport_update_links()
1198 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT)) in mpt3sas_transport_update_links()
1258 _transport_get_expander_phy_error_log(struct MPT3SAS_ADAPTER *ioc, in _transport_get_expander_phy_error_log() argument
1273 if (ioc->shost_recovery || ioc->pci_error_recovery) { in _transport_get_expander_phy_error_log()
1274 ioc_info(ioc, "%s: host reset in progress!\n", __func__); in _transport_get_expander_phy_error_log()
1278 mutex_lock(&ioc->transport_cmds.mutex); in _transport_get_expander_phy_error_log()
1280 if (ioc->transport_cmds.status != MPT3_CMD_NOT_USED) { in _transport_get_expander_phy_error_log()
1281 ioc_err(ioc, "%s: transport_cmds in use\n", __func__); in _transport_get_expander_phy_error_log()
1285 ioc->transport_cmds.status = MPT3_CMD_PENDING; in _transport_get_expander_phy_error_log()
1287 rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT); in _transport_get_expander_phy_error_log()
1291 smid = mpt3sas_base_get_smid(ioc, ioc->transport_cb_idx); in _transport_get_expander_phy_error_log()
1293 ioc_err(ioc, "%s: failed obtaining a smid\n", __func__); in _transport_get_expander_phy_error_log()
1298 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _transport_get_expander_phy_error_log()
1299 ioc->transport_cmds.smid = smid; in _transport_get_expander_phy_error_log()
1303 data_out = dma_alloc_coherent(&ioc->pdev->dev, sz, &data_out_dma, in _transport_get_expander_phy_error_log()
1309 mpt3sas_base_free_smid(ioc, smid); in _transport_get_expander_phy_error_log()
1332 ioc->build_sg(ioc, psge, data_out_dma, in _transport_get_expander_phy_error_log()
1337 dtransportprintk(ioc, in _transport_get_expander_phy_error_log()
1338 ioc_info(ioc, "phy_error_log - send to sas_addr(0x%016llx), phy(%d)\n", in _transport_get_expander_phy_error_log()
1341 init_completion(&ioc->transport_cmds.done); in _transport_get_expander_phy_error_log()
1342 ioc->put_smid_default(ioc, smid); in _transport_get_expander_phy_error_log()
1343 wait_for_completion_timeout(&ioc->transport_cmds.done, 10*HZ); in _transport_get_expander_phy_error_log()
1345 if (!(ioc->transport_cmds.status & MPT3_CMD_COMPLETE)) { in _transport_get_expander_phy_error_log()
1346 ioc_err(ioc, "%s: timeout\n", __func__); in _transport_get_expander_phy_error_log()
1349 if (!(ioc->transport_cmds.status & MPT3_CMD_RESET)) in _transport_get_expander_phy_error_log()
1354 dtransportprintk(ioc, ioc_info(ioc, "phy_error_log - complete\n")); in _transport_get_expander_phy_error_log()
1356 if (ioc->transport_cmds.status & MPT3_CMD_REPLY_VALID) { in _transport_get_expander_phy_error_log()
1358 mpi_reply = ioc->transport_cmds.reply; in _transport_get_expander_phy_error_log()
1360 dtransportprintk(ioc, in _transport_get_expander_phy_error_log()
1361 ioc_info(ioc, "phy_error_log - reply data transfer size(%d)\n", in _transport_get_expander_phy_error_log()
1371 dtransportprintk(ioc, in _transport_get_expander_phy_error_log()
1372 ioc_info(ioc, "phy_error_log - function_result(%d)\n", in _transport_get_expander_phy_error_log()
1385 dtransportprintk(ioc, in _transport_get_expander_phy_error_log()
1386 ioc_info(ioc, "phy_error_log - no reply\n")); in _transport_get_expander_phy_error_log()
1390 mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); in _transport_get_expander_phy_error_log()
1392 ioc->transport_cmds.status = MPT3_CMD_NOT_USED; in _transport_get_expander_phy_error_log()
1394 dma_free_coherent(&ioc->pdev->dev, sz, data_out, data_out_dma); in _transport_get_expander_phy_error_log()
1396 mutex_unlock(&ioc->transport_cmds.mutex); in _transport_get_expander_phy_error_log()
1410 struct MPT3SAS_ADAPTER *ioc = phy_to_ioc(phy); in _transport_get_linkerrors() local
1417 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _transport_get_linkerrors()
1418 if (_transport_sas_node_find_by_sas_address(ioc, in _transport_get_linkerrors()
1420 mpt3sas_get_port_by_id(ioc, port_id, 0)) == NULL) { in _transport_get_linkerrors()
1421 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_get_linkerrors()
1424 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_get_linkerrors()
1426 if (phy->identify.sas_address != ioc->sas_hba.sas_address) in _transport_get_linkerrors()
1427 return _transport_get_expander_phy_error_log(ioc, phy); in _transport_get_linkerrors()
1430 if ((mpt3sas_config_get_phy_pg1(ioc, &mpi_reply, &phy_pg1, in _transport_get_linkerrors()
1432 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_get_linkerrors()
1438 ioc_info(ioc, "phy(%d), ioc_status (0x%04x), loginfo(0x%08x)\n", in _transport_get_linkerrors()
1464 struct MPT3SAS_ADAPTER *ioc = rphy_to_ioc(rphy); in _transport_get_enclosure_identifier() local
1469 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _transport_get_enclosure_identifier()
1470 sas_device = __mpt3sas_get_sdev_by_rphy(ioc, rphy); in _transport_get_enclosure_identifier()
1480 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _transport_get_enclosure_identifier()
1493 struct MPT3SAS_ADAPTER *ioc = rphy_to_ioc(rphy); in _transport_get_bay_identifier() local
1498 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _transport_get_bay_identifier()
1499 sas_device = __mpt3sas_get_sdev_by_rphy(ioc, rphy); in _transport_get_bay_identifier()
1506 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _transport_get_bay_identifier()
1549 _transport_expander_phy_control(struct MPT3SAS_ADAPTER *ioc, in _transport_expander_phy_control() argument
1564 if (ioc->shost_recovery || ioc->pci_error_recovery) { in _transport_expander_phy_control()
1565 ioc_info(ioc, "%s: host reset in progress!\n", __func__); in _transport_expander_phy_control()
1569 mutex_lock(&ioc->transport_cmds.mutex); in _transport_expander_phy_control()
1571 if (ioc->transport_cmds.status != MPT3_CMD_NOT_USED) { in _transport_expander_phy_control()
1572 ioc_err(ioc, "%s: transport_cmds in use\n", __func__); in _transport_expander_phy_control()
1576 ioc->transport_cmds.status = MPT3_CMD_PENDING; in _transport_expander_phy_control()
1578 rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT); in _transport_expander_phy_control()
1582 smid = mpt3sas_base_get_smid(ioc, ioc->transport_cb_idx); in _transport_expander_phy_control()
1584 ioc_err(ioc, "%s: failed obtaining a smid\n", __func__); in _transport_expander_phy_control()
1589 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _transport_expander_phy_control()
1590 ioc->transport_cmds.smid = smid; in _transport_expander_phy_control()
1594 data_out = dma_alloc_coherent(&ioc->pdev->dev, sz, &data_out_dma, in _transport_expander_phy_control()
1600 mpt3sas_base_free_smid(ioc, smid); in _transport_expander_phy_control()
1628 ioc->build_sg(ioc, psge, data_out_dma, in _transport_expander_phy_control()
1633 dtransportprintk(ioc, in _transport_expander_phy_control()
1634 ioc_info(ioc, "phy_control - send to sas_addr(0x%016llx), phy(%d), opcode(%d)\n", in _transport_expander_phy_control()
1637 init_completion(&ioc->transport_cmds.done); in _transport_expander_phy_control()
1638 ioc->put_smid_default(ioc, smid); in _transport_expander_phy_control()
1639 wait_for_completion_timeout(&ioc->transport_cmds.done, 10*HZ); in _transport_expander_phy_control()
1641 if (!(ioc->transport_cmds.status & MPT3_CMD_COMPLETE)) { in _transport_expander_phy_control()
1642 ioc_err(ioc, "%s: timeout\n", __func__); in _transport_expander_phy_control()
1645 if (!(ioc->transport_cmds.status & MPT3_CMD_RESET)) in _transport_expander_phy_control()
1650 dtransportprintk(ioc, ioc_info(ioc, "phy_control - complete\n")); in _transport_expander_phy_control()
1652 if (ioc->transport_cmds.status & MPT3_CMD_REPLY_VALID) { in _transport_expander_phy_control()
1654 mpi_reply = ioc->transport_cmds.reply; in _transport_expander_phy_control()
1656 dtransportprintk(ioc, in _transport_expander_phy_control()
1657 ioc_info(ioc, "phy_control - reply data transfer size(%d)\n", in _transport_expander_phy_control()
1667 dtransportprintk(ioc, in _transport_expander_phy_control()
1668 ioc_info(ioc, "phy_control - function_result(%d)\n", in _transport_expander_phy_control()
1673 dtransportprintk(ioc, in _transport_expander_phy_control()
1674 ioc_info(ioc, "phy_control - no reply\n")); in _transport_expander_phy_control()
1678 mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); in _transport_expander_phy_control()
1680 ioc->transport_cmds.status = MPT3_CMD_NOT_USED; in _transport_expander_phy_control()
1682 dma_free_coherent(&ioc->pdev->dev, sz, data_out, in _transport_expander_phy_control()
1685 mutex_unlock(&ioc->transport_cmds.mutex); in _transport_expander_phy_control()
1699 struct MPT3SAS_ADAPTER *ioc = phy_to_ioc(phy); in _transport_phy_reset() local
1706 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _transport_phy_reset()
1707 if (_transport_sas_node_find_by_sas_address(ioc, in _transport_phy_reset()
1709 mpt3sas_get_port_by_id(ioc, port_id, 0)) == NULL) { in _transport_phy_reset()
1710 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_phy_reset()
1713 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_phy_reset()
1716 if (phy->identify.sas_address != ioc->sas_hba.sas_address) in _transport_phy_reset()
1717 return _transport_expander_phy_control(ioc, phy, in _transport_phy_reset()
1728 if ((mpt3sas_base_sas_iounit_control(ioc, &mpi_reply, &mpi_request))) { in _transport_phy_reset()
1729 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_reset()
1735 ioc_info(ioc, "phy(%d), ioc_status(0x%04x), loginfo(0x%08x)\n", in _transport_phy_reset()
1753 struct MPT3SAS_ADAPTER *ioc = phy_to_ioc(phy); in _transport_phy_enable() local
1765 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _transport_phy_enable()
1766 if (_transport_sas_node_find_by_sas_address(ioc, in _transport_phy_enable()
1768 mpt3sas_get_port_by_id(ioc, port_id, 0)) == NULL) { in _transport_phy_enable()
1769 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_phy_enable()
1772 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_phy_enable()
1775 if (phy->identify.sas_address != ioc->sas_hba.sas_address) in _transport_phy_enable()
1776 return _transport_expander_phy_control(ioc, phy, in _transport_phy_enable()
1783 sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys * in _transport_phy_enable()
1787 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_enable()
1792 if ((mpt3sas_config_get_sas_iounit_pg0(ioc, &mpi_reply, in _transport_phy_enable()
1794 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_enable()
1802 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_enable()
1809 for (i = 0, discovery_active = 0; i < ioc->sas_hba.num_phys ; i++) { in _transport_phy_enable()
1812 …ioc_err(ioc, "discovery is active on port = %d, phy = %d: unable to enable/disable phys, try again… in _transport_phy_enable()
1824 sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys * in _transport_phy_enable()
1828 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_enable()
1833 if ((mpt3sas_config_get_sas_iounit_pg1(ioc, &mpi_reply, in _transport_phy_enable()
1835 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_enable()
1843 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_enable()
1850 for (i = 0; i < ioc->sas_hba.num_phys ; i++) { in _transport_phy_enable()
1869 mpt3sas_config_set_sas_iounit_pg1(ioc, &mpi_reply, sas_iounit_pg1, sz); in _transport_phy_enable()
1893 struct MPT3SAS_ADAPTER *ioc = phy_to_ioc(phy); in _transport_phy_speed() local
1905 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _transport_phy_speed()
1906 if (_transport_sas_node_find_by_sas_address(ioc, in _transport_phy_speed()
1908 mpt3sas_get_port_by_id(ioc, port_id, 0)) == NULL) { in _transport_phy_speed()
1909 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_phy_speed()
1912 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_phy_speed()
1925 if (phy->identify.sas_address != ioc->sas_hba.sas_address) { in _transport_phy_speed()
1928 return _transport_expander_phy_control(ioc, phy, in _transport_phy_speed()
1935 sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys * in _transport_phy_speed()
1939 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_speed()
1944 if ((mpt3sas_config_get_sas_iounit_pg1(ioc, &mpi_reply, in _transport_phy_speed()
1946 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_speed()
1954 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_speed()
1960 for (i = 0; i < ioc->sas_hba.num_phys; i++) { in _transport_phy_speed()
1963 (ioc->sas_hba.phy[i].phy->minimum_linkrate + in _transport_phy_speed()
1964 (ioc->sas_hba.phy[i].phy->maximum_linkrate << 4)); in _transport_phy_speed()
1972 if (mpt3sas_config_set_sas_iounit_pg1(ioc, &mpi_reply, sas_iounit_pg1, in _transport_phy_speed()
1974 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_speed()
1984 if (!mpt3sas_config_get_phy_pg0(ioc, &mpi_reply, &phy_pg0, in _transport_phy_speed()
2046 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _transport_smp_handler() local
2060 if (ioc->shost_recovery || ioc->pci_error_recovery) { in _transport_smp_handler()
2061 ioc_info(ioc, "%s: host reset in progress!\n", __func__); in _transport_smp_handler()
2066 rc = mutex_lock_interruptible(&ioc->transport_cmds.mutex); in _transport_smp_handler()
2070 if (ioc->transport_cmds.status != MPT3_CMD_NOT_USED) { in _transport_smp_handler()
2071 ioc_err(ioc, "%s: transport_cmds in use\n", in _transport_smp_handler()
2076 ioc->transport_cmds.status = MPT3_CMD_PENDING; in _transport_smp_handler()
2078 rc = _transport_map_smp_buffer(&ioc->pdev->dev, &job->request_payload, in _transport_smp_handler()
2088 rc = _transport_map_smp_buffer(&ioc->pdev->dev, &job->reply_payload, in _transport_smp_handler()
2093 rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT); in _transport_smp_handler()
2097 smid = mpt3sas_base_get_smid(ioc, ioc->transport_cb_idx); in _transport_smp_handler()
2099 ioc_err(ioc, "%s: failed obtaining a smid\n", __func__); in _transport_smp_handler()
2105 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _transport_smp_handler()
2106 ioc->transport_cmds.smid = smid; in _transport_smp_handler()
2110 mpi_request->PhysicalPort = _transport_get_port_id_by_rphy(ioc, rphy); in _transport_smp_handler()
2113 cpu_to_le64(ioc->sas_hba.sas_address); in _transport_smp_handler()
2117 ioc->build_sg(ioc, psge, dma_addr_out, dma_len_out - 4, dma_addr_in, in _transport_smp_handler()
2120 dtransportprintk(ioc, in _transport_smp_handler()
2121 ioc_info(ioc, "%s: sending smp request\n", __func__)); in _transport_smp_handler()
2123 init_completion(&ioc->transport_cmds.done); in _transport_smp_handler()
2124 ioc->put_smid_default(ioc, smid); in _transport_smp_handler()
2125 wait_for_completion_timeout(&ioc->transport_cmds.done, 10*HZ); in _transport_smp_handler()
2127 if (!(ioc->transport_cmds.status & MPT3_CMD_COMPLETE)) { in _transport_smp_handler()
2128 ioc_err(ioc, "%s: timeout\n", __func__); in _transport_smp_handler()
2131 if (!(ioc->transport_cmds.status & MPT3_CMD_RESET)) { in _transport_smp_handler()
2132 mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); in _transport_smp_handler()
2138 dtransportprintk(ioc, ioc_info(ioc, "%s - complete\n", __func__)); in _transport_smp_handler()
2140 if (!(ioc->transport_cmds.status & MPT3_CMD_REPLY_VALID)) { in _transport_smp_handler()
2141 dtransportprintk(ioc, in _transport_smp_handler()
2142 ioc_info(ioc, "%s: no reply\n", __func__)); in _transport_smp_handler()
2147 mpi_reply = ioc->transport_cmds.reply; in _transport_smp_handler()
2149 dtransportprintk(ioc, in _transport_smp_handler()
2150 ioc_info(ioc, "%s: reply data transfer size(%d)\n", in _transport_smp_handler()
2166 _transport_unmap_smp_buffer(&ioc->pdev->dev, &job->reply_payload, in _transport_smp_handler()
2169 _transport_unmap_smp_buffer(&ioc->pdev->dev, &job->request_payload, in _transport_smp_handler()
2172 ioc->transport_cmds.status = MPT3_CMD_NOT_USED; in _transport_smp_handler()
2173 mutex_unlock(&ioc->transport_cmds.mutex); in _transport_smp_handler()