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()
474 dtransportprintk(ioc, in _transport_expander_report_manufacture()
475 ioc_info(ioc, "report_manufacture - no reply\n")); in _transport_expander_report_manufacture()
479 mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); in _transport_expander_report_manufacture()
481 ioc->transport_cmds.status = MPT3_CMD_NOT_USED; in _transport_expander_report_manufacture()
483 dma_free_coherent(&ioc->pdev->dev, data_out_sz + data_in_sz, in _transport_expander_report_manufacture()
486 mutex_unlock(&ioc->transport_cmds.mutex); in _transport_expander_report_manufacture()
497 _transport_delete_port(struct MPT3SAS_ADAPTER *ioc, in _transport_delete_port() argument
509 ioc->logging_level |= MPT_DEBUG_TRANSPORT; in _transport_delete_port()
511 mpt3sas_device_remove_by_sas_address(ioc, in _transport_delete_port()
515 mpt3sas_expander_remove(ioc, sas_address, port); in _transport_delete_port()
516 ioc->logging_level &= ~MPT_DEBUG_TRANSPORT; in _transport_delete_port()
526 _transport_delete_phy(struct MPT3SAS_ADAPTER *ioc, in _transport_delete_phy() argument
548 _transport_add_phy(struct MPT3SAS_ADAPTER *ioc, struct _sas_port *mpt3sas_port, in _transport_add_phy() argument
572 mpt3sas_transport_add_phy_to_an_existing_port(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_transport_add_phy_to_an_existing_port() argument
597 _transport_add_phy(ioc, mpt3sas_port, mpt3sas_phy); in mpt3sas_transport_add_phy_to_an_existing_port()
610 mpt3sas_transport_del_phy_from_an_existing_port(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_transport_del_phy_from_an_existing_port() argument
630 if (mpt3sas_port->num_phys == 1 && !ioc->shost_recovery) in mpt3sas_transport_del_phy_from_an_existing_port()
631 _transport_delete_port(ioc, mpt3sas_port); in mpt3sas_transport_del_phy_from_an_existing_port()
633 _transport_delete_phy(ioc, mpt3sas_port, in mpt3sas_transport_del_phy_from_an_existing_port()
650 _transport_sanity_check(struct MPT3SAS_ADAPTER *ioc, struct _sas_node *sas_node, in _transport_sanity_check() argument
661 mpt3sas_transport_del_phy_from_an_existing_port(ioc, in _transport_sanity_check()
679 mpt3sas_transport_port_add(struct MPT3SAS_ADAPTER *ioc, u16 handle, in mpt3sas_transport_port_add() argument
693 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
701 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
708 spin_lock_irqsave(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_add()
709 sas_node = _transport_sas_node_find_by_sas_address(ioc, in mpt3sas_transport_port_add()
711 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_add()
714 ioc_err(ioc, "%s: Could not find parent sas_address(0x%016llx)!\n", in mpt3sas_transport_port_add()
719 if ((_transport_set_identify(ioc, handle, in mpt3sas_transport_port_add()
721 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
727 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
733 _transport_sanity_check(ioc, sas_node, in mpt3sas_transport_port_add()
745 if (sas_node->handle <= ioc->sas_hba.num_phys) { in mpt3sas_transport_port_add()
751 vphy = mpt3sas_get_vphy_by_phy(ioc, hba_port, i); in mpt3sas_transport_port_add()
753 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
761 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
767 sas_device = mpt3sas_get_sdev_by_addr(ioc, in mpt3sas_transport_port_add()
771 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
779 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
785 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
792 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT)) in mpt3sas_transport_port_add()
807 if (sas_node->handle <= ioc->sas_hba.num_phys) { in mpt3sas_transport_port_add()
818 if (sas_node->handle <= ioc->sas_hba.num_phys) in mpt3sas_transport_port_add()
824 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
832 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_port_add()
849 spin_lock_irqsave(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_add()
851 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_add()
858 _transport_expander_report_manufacture(ioc, in mpt3sas_transport_port_add()
886 mpt3sas_transport_port_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address, in mpt3sas_transport_port_remove() argument
901 spin_lock_irqsave(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_remove()
902 sas_node = _transport_sas_node_find_by_sas_address(ioc, in mpt3sas_transport_port_remove()
905 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_remove()
920 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_remove()
924 if (sas_node->handle <= ioc->sas_hba.num_phys && in mpt3sas_transport_port_remove()
925 (ioc->multipath_on_hba)) { in mpt3sas_transport_port_remove()
931 ioc_info(ioc, in mpt3sas_transport_port_remove()
941 &ioc->port_table_list, list) { in mpt3sas_transport_port_remove()
956 ioc_info(ioc, in mpt3sas_transport_port_remove()
970 ioc_info(ioc, in mpt3sas_transport_port_remove()
985 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_transport_port_remove()
989 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT)) in mpt3sas_transport_port_remove()
996 if (!ioc->remove_host) in mpt3sas_transport_port_remove()
1001 if (!ioc->remove_host) in mpt3sas_transport_port_remove()
1003 ioc_info(ioc, "%s: removed: sas_addr(0x%016llx)\n", in mpt3sas_transport_port_remove()
1018 mpt3sas_transport_add_host_phy(struct MPT3SAS_ADAPTER *ioc, struct _sas_phy in mpt3sas_transport_add_host_phy() argument
1028 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_add_host_phy()
1032 if ((_transport_set_identify(ioc, mpt3sas_phy->handle, in mpt3sas_transport_add_host_phy()
1034 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_add_host_phy()
1042 _transport_set_identify(ioc, mpt3sas_phy->attached_handle, in mpt3sas_transport_add_host_phy()
1058 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_add_host_phy()
1063 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT)) in mpt3sas_transport_add_host_phy()
1087 mpt3sas_transport_add_expander_phy(struct MPT3SAS_ADAPTER *ioc, struct _sas_phy in mpt3sas_transport_add_expander_phy() argument
1097 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_add_expander_phy()
1101 if ((_transport_set_identify(ioc, mpt3sas_phy->handle, in mpt3sas_transport_add_expander_phy()
1103 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_add_expander_phy()
1112 _transport_set_identify(ioc, mpt3sas_phy->attached_handle, in mpt3sas_transport_add_expander_phy()
1129 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_transport_add_expander_phy()
1134 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT)) in mpt3sas_transport_add_expander_phy()
1159 mpt3sas_transport_update_links(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_transport_update_links() argument
1168 if (ioc->shost_recovery || ioc->pci_error_recovery) in mpt3sas_transport_update_links()
1171 spin_lock_irqsave(&ioc->sas_node_lock, flags); in mpt3sas_transport_update_links()
1172 sas_node = _transport_sas_node_find_by_sas_address(ioc, in mpt3sas_transport_update_links()
1175 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_transport_update_links()
1181 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_transport_update_links()
1183 _transport_set_identify(ioc, handle, in mpt3sas_transport_update_links()
1185 if ((sas_node->handle <= ioc->sas_hba.num_phys) && in mpt3sas_transport_update_links()
1186 (ioc->multipath_on_hba)) { in mpt3sas_transport_update_links()
1188 &ioc->port_table_list, list) { in mpt3sas_transport_update_links()
1195 mpt3sas_transport_add_phy_to_an_existing_port(ioc, sas_node, in mpt3sas_transport_update_links()
1206 if ((ioc->logging_level & MPT_DEBUG_TRANSPORT)) in mpt3sas_transport_update_links()
1266 _transport_get_expander_phy_error_log(struct MPT3SAS_ADAPTER *ioc, in _transport_get_expander_phy_error_log() argument
1281 if (ioc->shost_recovery || ioc->pci_error_recovery) { in _transport_get_expander_phy_error_log()
1282 ioc_info(ioc, "%s: host reset in progress!\n", __func__); in _transport_get_expander_phy_error_log()
1286 mutex_lock(&ioc->transport_cmds.mutex); in _transport_get_expander_phy_error_log()
1288 if (ioc->transport_cmds.status != MPT3_CMD_NOT_USED) { in _transport_get_expander_phy_error_log()
1289 ioc_err(ioc, "%s: transport_cmds in use\n", __func__); in _transport_get_expander_phy_error_log()
1293 ioc->transport_cmds.status = MPT3_CMD_PENDING; in _transport_get_expander_phy_error_log()
1295 rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT); in _transport_get_expander_phy_error_log()
1299 smid = mpt3sas_base_get_smid(ioc, ioc->transport_cb_idx); in _transport_get_expander_phy_error_log()
1301 ioc_err(ioc, "%s: failed obtaining a smid\n", __func__); in _transport_get_expander_phy_error_log()
1306 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _transport_get_expander_phy_error_log()
1307 ioc->transport_cmds.smid = smid; in _transport_get_expander_phy_error_log()
1311 data_out = dma_alloc_coherent(&ioc->pdev->dev, sz, &data_out_dma, in _transport_get_expander_phy_error_log()
1317 mpt3sas_base_free_smid(ioc, smid); in _transport_get_expander_phy_error_log()
1340 ioc->build_sg(ioc, psge, data_out_dma, in _transport_get_expander_phy_error_log()
1345 dtransportprintk(ioc, in _transport_get_expander_phy_error_log()
1346 ioc_info(ioc, "phy_error_log - send to sas_addr(0x%016llx), phy(%d)\n", in _transport_get_expander_phy_error_log()
1349 init_completion(&ioc->transport_cmds.done); in _transport_get_expander_phy_error_log()
1350 ioc->put_smid_default(ioc, smid); in _transport_get_expander_phy_error_log()
1351 wait_for_completion_timeout(&ioc->transport_cmds.done, 10*HZ); in _transport_get_expander_phy_error_log()
1353 if (!(ioc->transport_cmds.status & MPT3_CMD_COMPLETE)) { in _transport_get_expander_phy_error_log()
1354 ioc_err(ioc, "%s: timeout\n", __func__); in _transport_get_expander_phy_error_log()
1357 if (!(ioc->transport_cmds.status & MPT3_CMD_RESET)) in _transport_get_expander_phy_error_log()
1362 dtransportprintk(ioc, ioc_info(ioc, "phy_error_log - complete\n")); in _transport_get_expander_phy_error_log()
1364 if (ioc->transport_cmds.status & MPT3_CMD_REPLY_VALID) { in _transport_get_expander_phy_error_log()
1366 mpi_reply = ioc->transport_cmds.reply; in _transport_get_expander_phy_error_log()
1368 dtransportprintk(ioc, in _transport_get_expander_phy_error_log()
1369 ioc_info(ioc, "phy_error_log - reply data transfer size(%d)\n", in _transport_get_expander_phy_error_log()
1379 dtransportprintk(ioc, in _transport_get_expander_phy_error_log()
1380 ioc_info(ioc, "phy_error_log - function_result(%d)\n", in _transport_get_expander_phy_error_log()
1393 dtransportprintk(ioc, in _transport_get_expander_phy_error_log()
1394 ioc_info(ioc, "phy_error_log - no reply\n")); in _transport_get_expander_phy_error_log()
1398 mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); in _transport_get_expander_phy_error_log()
1400 ioc->transport_cmds.status = MPT3_CMD_NOT_USED; in _transport_get_expander_phy_error_log()
1402 dma_free_coherent(&ioc->pdev->dev, sz, data_out, data_out_dma); in _transport_get_expander_phy_error_log()
1404 mutex_unlock(&ioc->transport_cmds.mutex); in _transport_get_expander_phy_error_log()
1418 struct MPT3SAS_ADAPTER *ioc = phy_to_ioc(phy); in _transport_get_linkerrors() local
1425 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _transport_get_linkerrors()
1426 if (_transport_sas_node_find_by_sas_address(ioc, in _transport_get_linkerrors()
1428 mpt3sas_get_port_by_id(ioc, port_id, 0)) == NULL) { in _transport_get_linkerrors()
1429 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_get_linkerrors()
1432 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_get_linkerrors()
1434 if (phy->identify.sas_address != ioc->sas_hba.sas_address) in _transport_get_linkerrors()
1435 return _transport_get_expander_phy_error_log(ioc, phy); in _transport_get_linkerrors()
1438 if ((mpt3sas_config_get_phy_pg1(ioc, &mpi_reply, &phy_pg1, in _transport_get_linkerrors()
1440 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_get_linkerrors()
1446 ioc_info(ioc, "phy(%d), ioc_status (0x%04x), loginfo(0x%08x)\n", in _transport_get_linkerrors()
1472 struct MPT3SAS_ADAPTER *ioc = rphy_to_ioc(rphy); in _transport_get_enclosure_identifier() local
1477 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _transport_get_enclosure_identifier()
1478 sas_device = __mpt3sas_get_sdev_by_rphy(ioc, rphy); in _transport_get_enclosure_identifier()
1488 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _transport_get_enclosure_identifier()
1501 struct MPT3SAS_ADAPTER *ioc = rphy_to_ioc(rphy); in _transport_get_bay_identifier() local
1506 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _transport_get_bay_identifier()
1507 sas_device = __mpt3sas_get_sdev_by_rphy(ioc, rphy); in _transport_get_bay_identifier()
1514 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _transport_get_bay_identifier()
1557 _transport_expander_phy_control(struct MPT3SAS_ADAPTER *ioc, in _transport_expander_phy_control() argument
1572 if (ioc->shost_recovery || ioc->pci_error_recovery) { in _transport_expander_phy_control()
1573 ioc_info(ioc, "%s: host reset in progress!\n", __func__); in _transport_expander_phy_control()
1577 mutex_lock(&ioc->transport_cmds.mutex); in _transport_expander_phy_control()
1579 if (ioc->transport_cmds.status != MPT3_CMD_NOT_USED) { in _transport_expander_phy_control()
1580 ioc_err(ioc, "%s: transport_cmds in use\n", __func__); in _transport_expander_phy_control()
1584 ioc->transport_cmds.status = MPT3_CMD_PENDING; in _transport_expander_phy_control()
1586 rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT); in _transport_expander_phy_control()
1590 smid = mpt3sas_base_get_smid(ioc, ioc->transport_cb_idx); in _transport_expander_phy_control()
1592 ioc_err(ioc, "%s: failed obtaining a smid\n", __func__); in _transport_expander_phy_control()
1597 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _transport_expander_phy_control()
1598 ioc->transport_cmds.smid = smid; in _transport_expander_phy_control()
1602 data_out = dma_alloc_coherent(&ioc->pdev->dev, sz, &data_out_dma, in _transport_expander_phy_control()
1608 mpt3sas_base_free_smid(ioc, smid); in _transport_expander_phy_control()
1636 ioc->build_sg(ioc, psge, data_out_dma, in _transport_expander_phy_control()
1641 dtransportprintk(ioc, in _transport_expander_phy_control()
1642 ioc_info(ioc, "phy_control - send to sas_addr(0x%016llx), phy(%d), opcode(%d)\n", in _transport_expander_phy_control()
1645 init_completion(&ioc->transport_cmds.done); in _transport_expander_phy_control()
1646 ioc->put_smid_default(ioc, smid); in _transport_expander_phy_control()
1647 wait_for_completion_timeout(&ioc->transport_cmds.done, 10*HZ); in _transport_expander_phy_control()
1649 if (!(ioc->transport_cmds.status & MPT3_CMD_COMPLETE)) { in _transport_expander_phy_control()
1650 ioc_err(ioc, "%s: timeout\n", __func__); in _transport_expander_phy_control()
1653 if (!(ioc->transport_cmds.status & MPT3_CMD_RESET)) in _transport_expander_phy_control()
1658 dtransportprintk(ioc, ioc_info(ioc, "phy_control - complete\n")); in _transport_expander_phy_control()
1660 if (ioc->transport_cmds.status & MPT3_CMD_REPLY_VALID) { in _transport_expander_phy_control()
1662 mpi_reply = ioc->transport_cmds.reply; in _transport_expander_phy_control()
1664 dtransportprintk(ioc, in _transport_expander_phy_control()
1665 ioc_info(ioc, "phy_control - reply data transfer size(%d)\n", in _transport_expander_phy_control()
1675 dtransportprintk(ioc, in _transport_expander_phy_control()
1676 ioc_info(ioc, "phy_control - function_result(%d)\n", in _transport_expander_phy_control()
1681 dtransportprintk(ioc, in _transport_expander_phy_control()
1682 ioc_info(ioc, "phy_control - no reply\n")); in _transport_expander_phy_control()
1686 mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); in _transport_expander_phy_control()
1688 ioc->transport_cmds.status = MPT3_CMD_NOT_USED; in _transport_expander_phy_control()
1690 dma_free_coherent(&ioc->pdev->dev, sz, data_out, in _transport_expander_phy_control()
1693 mutex_unlock(&ioc->transport_cmds.mutex); in _transport_expander_phy_control()
1707 struct MPT3SAS_ADAPTER *ioc = phy_to_ioc(phy); in _transport_phy_reset() local
1714 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _transport_phy_reset()
1715 if (_transport_sas_node_find_by_sas_address(ioc, in _transport_phy_reset()
1717 mpt3sas_get_port_by_id(ioc, port_id, 0)) == NULL) { in _transport_phy_reset()
1718 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_phy_reset()
1721 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_phy_reset()
1724 if (phy->identify.sas_address != ioc->sas_hba.sas_address) in _transport_phy_reset()
1725 return _transport_expander_phy_control(ioc, phy, in _transport_phy_reset()
1736 if ((mpt3sas_base_sas_iounit_control(ioc, &mpi_reply, &mpi_request))) { in _transport_phy_reset()
1737 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_reset()
1743 ioc_info(ioc, "phy(%d), ioc_status(0x%04x), loginfo(0x%08x)\n", in _transport_phy_reset()
1761 struct MPT3SAS_ADAPTER *ioc = phy_to_ioc(phy); in _transport_phy_enable() local
1773 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _transport_phy_enable()
1774 if (_transport_sas_node_find_by_sas_address(ioc, in _transport_phy_enable()
1776 mpt3sas_get_port_by_id(ioc, port_id, 0)) == NULL) { in _transport_phy_enable()
1777 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_phy_enable()
1780 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_phy_enable()
1783 if (phy->identify.sas_address != ioc->sas_hba.sas_address) in _transport_phy_enable()
1784 return _transport_expander_phy_control(ioc, phy, in _transport_phy_enable()
1791 sz = struct_size(sas_iounit_pg0, PhyData, ioc->sas_hba.num_phys); in _transport_phy_enable()
1794 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_enable()
1799 if ((mpt3sas_config_get_sas_iounit_pg0(ioc, &mpi_reply, in _transport_phy_enable()
1801 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_enable()
1809 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_enable()
1816 for (i = 0, discovery_active = 0; i < ioc->sas_hba.num_phys ; i++) { in _transport_phy_enable()
1819 …ioc_err(ioc, "discovery is active on port = %d, phy = %d: unable to enable/disable phys, try again… in _transport_phy_enable()
1831 sz = struct_size(sas_iounit_pg1, PhyData, ioc->sas_hba.num_phys); in _transport_phy_enable()
1834 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_enable()
1839 if ((mpt3sas_config_get_sas_iounit_pg1(ioc, &mpi_reply, in _transport_phy_enable()
1841 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_enable()
1849 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_enable()
1856 for (i = 0; i < ioc->sas_hba.num_phys ; i++) { in _transport_phy_enable()
1875 mpt3sas_config_set_sas_iounit_pg1(ioc, &mpi_reply, sas_iounit_pg1, sz); in _transport_phy_enable()
1899 struct MPT3SAS_ADAPTER *ioc = phy_to_ioc(phy); in _transport_phy_speed() local
1911 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _transport_phy_speed()
1912 if (_transport_sas_node_find_by_sas_address(ioc, in _transport_phy_speed()
1914 mpt3sas_get_port_by_id(ioc, port_id, 0)) == NULL) { in _transport_phy_speed()
1915 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_phy_speed()
1918 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _transport_phy_speed()
1931 if (phy->identify.sas_address != ioc->sas_hba.sas_address) { in _transport_phy_speed()
1934 return _transport_expander_phy_control(ioc, phy, in _transport_phy_speed()
1941 sz = struct_size(sas_iounit_pg1, PhyData, ioc->sas_hba.num_phys); in _transport_phy_speed()
1944 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_speed()
1949 if ((mpt3sas_config_get_sas_iounit_pg1(ioc, &mpi_reply, in _transport_phy_speed()
1951 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_speed()
1959 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_speed()
1965 for (i = 0; i < ioc->sas_hba.num_phys; i++) { in _transport_phy_speed()
1968 (ioc->sas_hba.phy[i].phy->minimum_linkrate + in _transport_phy_speed()
1969 (ioc->sas_hba.phy[i].phy->maximum_linkrate << 4)); in _transport_phy_speed()
1977 if (mpt3sas_config_set_sas_iounit_pg1(ioc, &mpi_reply, sas_iounit_pg1, in _transport_phy_speed()
1979 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _transport_phy_speed()
1989 if (!mpt3sas_config_get_phy_pg0(ioc, &mpi_reply, &phy_pg0, in _transport_phy_speed()
2051 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _transport_smp_handler() local
2065 if (ioc->shost_recovery || ioc->pci_error_recovery) { in _transport_smp_handler()
2066 ioc_info(ioc, "%s: host reset in progress!\n", __func__); in _transport_smp_handler()
2071 rc = mutex_lock_interruptible(&ioc->transport_cmds.mutex); in _transport_smp_handler()
2075 if (ioc->transport_cmds.status != MPT3_CMD_NOT_USED) { in _transport_smp_handler()
2076 ioc_err(ioc, "%s: transport_cmds in use\n", in _transport_smp_handler()
2081 ioc->transport_cmds.status = MPT3_CMD_PENDING; in _transport_smp_handler()
2083 rc = _transport_map_smp_buffer(&ioc->pdev->dev, &job->request_payload, in _transport_smp_handler()
2093 rc = _transport_map_smp_buffer(&ioc->pdev->dev, &job->reply_payload, in _transport_smp_handler()
2098 rc = mpt3sas_wait_for_ioc(ioc, IOC_OPERATIONAL_WAIT_COUNT); in _transport_smp_handler()
2102 smid = mpt3sas_base_get_smid(ioc, ioc->transport_cb_idx); in _transport_smp_handler()
2104 ioc_err(ioc, "%s: failed obtaining a smid\n", __func__); in _transport_smp_handler()
2110 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _transport_smp_handler()
2111 ioc->transport_cmds.smid = smid; in _transport_smp_handler()
2115 mpi_request->PhysicalPort = _transport_get_port_id_by_rphy(ioc, rphy); in _transport_smp_handler()
2118 cpu_to_le64(ioc->sas_hba.sas_address); in _transport_smp_handler()
2122 ioc->build_sg(ioc, psge, dma_addr_out, dma_len_out - 4, dma_addr_in, in _transport_smp_handler()
2125 dtransportprintk(ioc, in _transport_smp_handler()
2126 ioc_info(ioc, "%s: sending smp request\n", __func__)); in _transport_smp_handler()
2128 init_completion(&ioc->transport_cmds.done); in _transport_smp_handler()
2129 ioc->put_smid_default(ioc, smid); in _transport_smp_handler()
2130 wait_for_completion_timeout(&ioc->transport_cmds.done, 10*HZ); in _transport_smp_handler()
2132 if (!(ioc->transport_cmds.status & MPT3_CMD_COMPLETE)) { in _transport_smp_handler()
2133 ioc_err(ioc, "%s: timeout\n", __func__); in _transport_smp_handler()
2136 if (!(ioc->transport_cmds.status & MPT3_CMD_RESET)) { in _transport_smp_handler()
2137 mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); in _transport_smp_handler()
2143 dtransportprintk(ioc, ioc_info(ioc, "%s - complete\n", __func__)); in _transport_smp_handler()
2145 if (!(ioc->transport_cmds.status & MPT3_CMD_REPLY_VALID)) { in _transport_smp_handler()
2146 dtransportprintk(ioc, in _transport_smp_handler()
2147 ioc_info(ioc, "%s: no reply\n", __func__)); in _transport_smp_handler()
2152 mpi_reply = ioc->transport_cmds.reply; in _transport_smp_handler()
2154 dtransportprintk(ioc, in _transport_smp_handler()
2155 ioc_info(ioc, "%s: reply data transfer size(%d)\n", in _transport_smp_handler()
2171 _transport_unmap_smp_buffer(&ioc->pdev->dev, &job->reply_payload, in _transport_smp_handler()
2174 _transport_unmap_smp_buffer(&ioc->pdev->dev, &job->request_payload, in _transport_smp_handler()
2177 ioc->transport_cmds.status = MPT3_CMD_NOT_USED; in _transport_smp_handler()
2178 mutex_unlock(&ioc->transport_cmds.mutex); in _transport_smp_handler()