Lines Matching refs:ioc

66 static void _scsih_expander_node_remove(struct MPT3SAS_ADAPTER *ioc,
70 static void _scsih_remove_device(struct MPT3SAS_ADAPTER *ioc,
72 static int _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle,
74 static int _scsih_pcie_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle);
75 static void _scsih_pcie_device_remove_from_sml(struct MPT3SAS_ADAPTER *ioc,
78 _scsih_pcie_check_device(struct MPT3SAS_ADAPTER *ioc, u16 handle);
79 static u8 _scsih_check_for_pending_tm(struct MPT3SAS_ADAPTER *ioc, u16 smid);
203 struct MPT3SAS_ADAPTER *ioc; member
299 struct MPT3SAS_ADAPTER *ioc; in _scsih_set_debug_level() local
306 list_for_each_entry(ioc, &mpt3sas_ioc_list, list) in _scsih_set_debug_level()
307 ioc->logging_level = logging_level; in _scsih_set_debug_level()
413 _scsih_get_sas_address(struct MPT3SAS_ADAPTER *ioc, u16 handle, in _scsih_get_sas_address() argument
422 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_get_sas_address()
424 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_get_sas_address()
434 if ((handle <= ioc->sas_hba.num_phys) && in _scsih_get_sas_address()
437 *sas_address = ioc->sas_hba.sas_address; in _scsih_get_sas_address()
448 ioc_err(ioc, "handle(0x%04x), ioc_status(0x%04x), failure at %s:%d/%s()!\n", in _scsih_get_sas_address()
467 _scsih_determine_boot_device(struct MPT3SAS_ADAPTER *ioc, void *device, in _scsih_determine_boot_device() argument
479 if (!ioc->is_driver_loading) in _scsih_determine_boot_device()
483 if (!ioc->bios_pg3.BiosVersion) in _scsih_determine_boot_device()
506 if (!ioc->req_boot_device.device) { in _scsih_determine_boot_device()
509 (ioc->bios_pg2.ReqBootDeviceForm & in _scsih_determine_boot_device()
511 &ioc->bios_pg2.RequestedBootDevice)) { in _scsih_determine_boot_device()
512 dinitprintk(ioc, in _scsih_determine_boot_device()
513 ioc_info(ioc, "%s: req_boot_device(0x%016llx)\n", in _scsih_determine_boot_device()
515 ioc->req_boot_device.device = device; in _scsih_determine_boot_device()
516 ioc->req_boot_device.channel = channel; in _scsih_determine_boot_device()
520 if (!ioc->req_alt_boot_device.device) { in _scsih_determine_boot_device()
523 (ioc->bios_pg2.ReqAltBootDeviceForm & in _scsih_determine_boot_device()
525 &ioc->bios_pg2.RequestedAltBootDevice)) { in _scsih_determine_boot_device()
526 dinitprintk(ioc, in _scsih_determine_boot_device()
527 ioc_info(ioc, "%s: req_alt_boot_device(0x%016llx)\n", in _scsih_determine_boot_device()
529 ioc->req_alt_boot_device.device = device; in _scsih_determine_boot_device()
530 ioc->req_alt_boot_device.channel = channel; in _scsih_determine_boot_device()
534 if (!ioc->current_boot_device.device) { in _scsih_determine_boot_device()
537 (ioc->bios_pg2.CurrentBootDeviceForm & in _scsih_determine_boot_device()
539 &ioc->bios_pg2.CurrentBootDevice)) { in _scsih_determine_boot_device()
540 dinitprintk(ioc, in _scsih_determine_boot_device()
541 ioc_info(ioc, "%s: current_boot_device(0x%016llx)\n", in _scsih_determine_boot_device()
543 ioc->current_boot_device.device = device; in _scsih_determine_boot_device()
544 ioc->current_boot_device.channel = channel; in _scsih_determine_boot_device()
550 __mpt3sas_get_sdev_from_target(struct MPT3SAS_ADAPTER *ioc, in __mpt3sas_get_sdev_from_target() argument
555 assert_spin_locked(&ioc->sas_device_lock); in __mpt3sas_get_sdev_from_target()
565 mpt3sas_get_sdev_from_target(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_get_sdev_from_target() argument
571 spin_lock_irqsave(&ioc->sas_device_lock, flags); in mpt3sas_get_sdev_from_target()
572 ret = __mpt3sas_get_sdev_from_target(ioc, tgt_priv); in mpt3sas_get_sdev_from_target()
573 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in mpt3sas_get_sdev_from_target()
579 __mpt3sas_get_pdev_from_target(struct MPT3SAS_ADAPTER *ioc, in __mpt3sas_get_pdev_from_target() argument
584 assert_spin_locked(&ioc->pcie_device_lock); in __mpt3sas_get_pdev_from_target()
604 mpt3sas_get_pdev_from_target(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_get_pdev_from_target() argument
610 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in mpt3sas_get_pdev_from_target()
611 ret = __mpt3sas_get_pdev_from_target(ioc, tgt_priv); in mpt3sas_get_pdev_from_target()
612 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in mpt3sas_get_pdev_from_target()
618 __mpt3sas_get_sdev_by_addr(struct MPT3SAS_ADAPTER *ioc, in __mpt3sas_get_sdev_by_addr() argument
623 assert_spin_locked(&ioc->sas_device_lock); in __mpt3sas_get_sdev_by_addr()
625 list_for_each_entry(sas_device, &ioc->sas_device_list, list) in __mpt3sas_get_sdev_by_addr()
629 list_for_each_entry(sas_device, &ioc->sas_device_init_list, list) in __mpt3sas_get_sdev_by_addr()
650 mpt3sas_get_sdev_by_addr(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_get_sdev_by_addr() argument
656 spin_lock_irqsave(&ioc->sas_device_lock, flags); in mpt3sas_get_sdev_by_addr()
657 sas_device = __mpt3sas_get_sdev_by_addr(ioc, in mpt3sas_get_sdev_by_addr()
659 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in mpt3sas_get_sdev_by_addr()
665 __mpt3sas_get_sdev_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in __mpt3sas_get_sdev_by_handle() argument
669 assert_spin_locked(&ioc->sas_device_lock); in __mpt3sas_get_sdev_by_handle()
671 list_for_each_entry(sas_device, &ioc->sas_device_list, list) in __mpt3sas_get_sdev_by_handle()
675 list_for_each_entry(sas_device, &ioc->sas_device_init_list, list) in __mpt3sas_get_sdev_by_handle()
696 mpt3sas_get_sdev_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in mpt3sas_get_sdev_by_handle() argument
701 spin_lock_irqsave(&ioc->sas_device_lock, flags); in mpt3sas_get_sdev_by_handle()
702 sas_device = __mpt3sas_get_sdev_by_handle(ioc, handle); in mpt3sas_get_sdev_by_handle()
703 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in mpt3sas_get_sdev_by_handle()
716 _scsih_display_enclosure_chassis_info(struct MPT3SAS_ADAPTER *ioc, in _scsih_display_enclosure_chassis_info() argument
753 ioc_info(ioc, "enclosure logical id(0x%016llx), slot(%d)\n", in _scsih_display_enclosure_chassis_info()
757 ioc_info(ioc, "enclosure level(0x%04x), connector name( %s)\n", in _scsih_display_enclosure_chassis_info()
761 ioc_info(ioc, "chassis slot(0x%04x)\n", in _scsih_display_enclosure_chassis_info()
775 _scsih_sas_device_remove(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_remove() argument
782 ioc_info(ioc, "removing handle(0x%04x), sas_addr(0x%016llx)\n", in _scsih_sas_device_remove()
785 _scsih_display_enclosure_chassis_info(ioc, sas_device, NULL, NULL); in _scsih_sas_device_remove()
791 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_remove()
796 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_remove()
805 _scsih_device_remove_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_device_remove_by_handle() argument
810 if (ioc->shost_recovery) in _scsih_device_remove_by_handle()
813 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_device_remove_by_handle()
814 sas_device = __mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_device_remove_by_handle()
819 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_device_remove_by_handle()
821 _scsih_remove_device(ioc, sas_device); in _scsih_device_remove_by_handle()
832 mpt3sas_device_remove_by_sas_address(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_device_remove_by_sas_address() argument
838 if (ioc->shost_recovery) in mpt3sas_device_remove_by_sas_address()
841 spin_lock_irqsave(&ioc->sas_device_lock, flags); in mpt3sas_device_remove_by_sas_address()
842 sas_device = __mpt3sas_get_sdev_by_addr(ioc, sas_address); in mpt3sas_device_remove_by_sas_address()
847 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in mpt3sas_device_remove_by_sas_address()
849 _scsih_remove_device(ioc, sas_device); in mpt3sas_device_remove_by_sas_address()
863 _scsih_sas_device_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_add() argument
868 dewtprintk(ioc, in _scsih_sas_device_add()
869 ioc_info(ioc, "%s: handle(0x%04x), sas_addr(0x%016llx)\n", in _scsih_sas_device_add()
873 dewtprintk(ioc, _scsih_display_enclosure_chassis_info(ioc, sas_device, in _scsih_sas_device_add()
876 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_add()
878 list_add_tail(&sas_device->list, &ioc->sas_device_list); in _scsih_sas_device_add()
879 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_add()
881 if (ioc->hide_drives) { in _scsih_sas_device_add()
882 clear_bit(sas_device->handle, ioc->pend_os_device_add); in _scsih_sas_device_add()
886 if (!mpt3sas_transport_port_add(ioc, sas_device->handle, in _scsih_sas_device_add()
888 _scsih_sas_device_remove(ioc, sas_device); in _scsih_sas_device_add()
895 if (!ioc->is_driver_loading) { in _scsih_sas_device_add()
896 mpt3sas_transport_port_remove(ioc, in _scsih_sas_device_add()
899 _scsih_sas_device_remove(ioc, sas_device); in _scsih_sas_device_add()
902 clear_bit(sas_device->handle, ioc->pend_os_device_add); in _scsih_sas_device_add()
914 _scsih_sas_device_init_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_init_add() argument
919 dewtprintk(ioc, in _scsih_sas_device_init_add()
920 ioc_info(ioc, "%s: handle(0x%04x), sas_addr(0x%016llx)\n", in _scsih_sas_device_init_add()
924 dewtprintk(ioc, _scsih_display_enclosure_chassis_info(ioc, sas_device, in _scsih_sas_device_init_add()
927 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_init_add()
929 list_add_tail(&sas_device->list, &ioc->sas_device_init_list); in _scsih_sas_device_init_add()
930 _scsih_determine_boot_device(ioc, sas_device, 0); in _scsih_sas_device_init_add()
931 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_init_add()
936 __mpt3sas_get_pdev_by_wwid(struct MPT3SAS_ADAPTER *ioc, u64 wwid) in __mpt3sas_get_pdev_by_wwid() argument
940 assert_spin_locked(&ioc->pcie_device_lock); in __mpt3sas_get_pdev_by_wwid()
942 list_for_each_entry(pcie_device, &ioc->pcie_device_list, list) in __mpt3sas_get_pdev_by_wwid()
946 list_for_each_entry(pcie_device, &ioc->pcie_device_init_list, list) in __mpt3sas_get_pdev_by_wwid()
969 mpt3sas_get_pdev_by_wwid(struct MPT3SAS_ADAPTER *ioc, u64 wwid) in mpt3sas_get_pdev_by_wwid() argument
974 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in mpt3sas_get_pdev_by_wwid()
975 pcie_device = __mpt3sas_get_pdev_by_wwid(ioc, wwid); in mpt3sas_get_pdev_by_wwid()
976 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in mpt3sas_get_pdev_by_wwid()
983 __mpt3sas_get_pdev_by_idchannel(struct MPT3SAS_ADAPTER *ioc, int id, in __mpt3sas_get_pdev_by_idchannel() argument
988 assert_spin_locked(&ioc->pcie_device_lock); in __mpt3sas_get_pdev_by_idchannel()
990 list_for_each_entry(pcie_device, &ioc->pcie_device_list, list) in __mpt3sas_get_pdev_by_idchannel()
994 list_for_each_entry(pcie_device, &ioc->pcie_device_init_list, list) in __mpt3sas_get_pdev_by_idchannel()
1006 __mpt3sas_get_pdev_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in __mpt3sas_get_pdev_by_handle() argument
1010 assert_spin_locked(&ioc->pcie_device_lock); in __mpt3sas_get_pdev_by_handle()
1012 list_for_each_entry(pcie_device, &ioc->pcie_device_list, list) in __mpt3sas_get_pdev_by_handle()
1016 list_for_each_entry(pcie_device, &ioc->pcie_device_init_list, list) in __mpt3sas_get_pdev_by_handle()
1040 mpt3sas_get_pdev_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in mpt3sas_get_pdev_by_handle() argument
1045 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in mpt3sas_get_pdev_by_handle()
1046 pcie_device = __mpt3sas_get_pdev_by_handle(ioc, handle); in mpt3sas_get_pdev_by_handle()
1047 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in mpt3sas_get_pdev_by_handle()
1062 _scsih_set_nvme_max_shutdown_latency(struct MPT3SAS_ADAPTER *ioc) in _scsih_set_nvme_max_shutdown_latency() argument
1068 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in _scsih_set_nvme_max_shutdown_latency()
1069 list_for_each_entry(pcie_device, &ioc->pcie_device_list, list) { in _scsih_set_nvme_max_shutdown_latency()
1076 ioc->max_shutdown_latency = shutdown_latency; in _scsih_set_nvme_max_shutdown_latency()
1077 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_set_nvme_max_shutdown_latency()
1089 _scsih_pcie_device_remove(struct MPT3SAS_ADAPTER *ioc, in _scsih_pcie_device_remove() argument
1098 ioc_info(ioc, "removing handle(0x%04x), wwid(0x%016llx)\n", in _scsih_pcie_device_remove()
1101 ioc_info(ioc, "removing enclosure logical id(0x%016llx), slot(%d)\n", in _scsih_pcie_device_remove()
1105 ioc_info(ioc, "removing enclosure level(0x%04x), connector name( %s)\n", in _scsih_pcie_device_remove()
1109 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in _scsih_pcie_device_remove()
1114 if (pcie_device->shutdown_latency == ioc->max_shutdown_latency) in _scsih_pcie_device_remove()
1116 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_pcie_device_remove()
1128 _scsih_set_nvme_max_shutdown_latency(ioc); in _scsih_pcie_device_remove()
1138 _scsih_pcie_device_remove_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_pcie_device_remove_by_handle() argument
1145 if (ioc->shost_recovery) in _scsih_pcie_device_remove_by_handle()
1148 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in _scsih_pcie_device_remove_by_handle()
1149 pcie_device = __mpt3sas_get_pdev_by_handle(ioc, handle); in _scsih_pcie_device_remove_by_handle()
1156 if (pcie_device->shutdown_latency == ioc->max_shutdown_latency) in _scsih_pcie_device_remove_by_handle()
1159 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_pcie_device_remove_by_handle()
1161 _scsih_pcie_device_remove_from_sml(ioc, pcie_device); in _scsih_pcie_device_remove_by_handle()
1171 _scsih_set_nvme_max_shutdown_latency(ioc); in _scsih_pcie_device_remove_by_handle()
1182 _scsih_pcie_device_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_pcie_device_add() argument
1187 dewtprintk(ioc, in _scsih_pcie_device_add()
1188 ioc_info(ioc, "%s: handle (0x%04x), wwid(0x%016llx)\n", in _scsih_pcie_device_add()
1192 dewtprintk(ioc, in _scsih_pcie_device_add()
1193 ioc_info(ioc, "%s: enclosure logical id(0x%016llx), slot( %d)\n", in _scsih_pcie_device_add()
1198 dewtprintk(ioc, in _scsih_pcie_device_add()
1199 ioc_info(ioc, "%s: enclosure level(0x%04x), connector name( %s)\n", in _scsih_pcie_device_add()
1203 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in _scsih_pcie_device_add()
1205 list_add_tail(&pcie_device->list, &ioc->pcie_device_list); in _scsih_pcie_device_add()
1206 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_pcie_device_add()
1210 clear_bit(pcie_device->handle, ioc->pend_os_device_add); in _scsih_pcie_device_add()
1213 if (scsi_add_device(ioc->shost, PCIE_CHANNEL, pcie_device->id, 0)) { in _scsih_pcie_device_add()
1214 _scsih_pcie_device_remove(ioc, pcie_device); in _scsih_pcie_device_add()
1216 if (!ioc->is_driver_loading) { in _scsih_pcie_device_add()
1218 clear_bit(pcie_device->handle, ioc->pend_os_device_add); in _scsih_pcie_device_add()
1221 clear_bit(pcie_device->handle, ioc->pend_os_device_add); in _scsih_pcie_device_add()
1233 _scsih_pcie_device_init_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_pcie_device_init_add() argument
1238 dewtprintk(ioc, in _scsih_pcie_device_init_add()
1239 ioc_info(ioc, "%s: handle (0x%04x), wwid(0x%016llx)\n", in _scsih_pcie_device_init_add()
1243 dewtprintk(ioc, in _scsih_pcie_device_init_add()
1244 ioc_info(ioc, "%s: enclosure logical id(0x%016llx), slot( %d)\n", in _scsih_pcie_device_init_add()
1249 dewtprintk(ioc, in _scsih_pcie_device_init_add()
1250 ioc_info(ioc, "%s: enclosure level(0x%04x), connector name( %s)\n", in _scsih_pcie_device_init_add()
1254 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in _scsih_pcie_device_init_add()
1256 list_add_tail(&pcie_device->list, &ioc->pcie_device_init_list); in _scsih_pcie_device_init_add()
1259 _scsih_determine_boot_device(ioc, pcie_device, PCIE_CHANNEL); in _scsih_pcie_device_init_add()
1260 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_pcie_device_init_add()
1273 _scsih_raid_device_find_by_id(struct MPT3SAS_ADAPTER *ioc, int id, int channel) in _scsih_raid_device_find_by_id() argument
1278 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in _scsih_raid_device_find_by_id()
1299 mpt3sas_raid_device_find_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in mpt3sas_raid_device_find_by_handle() argument
1304 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in mpt3sas_raid_device_find_by_handle()
1325 _scsih_raid_device_find_by_wwid(struct MPT3SAS_ADAPTER *ioc, u64 wwid) in _scsih_raid_device_find_by_wwid() argument
1330 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in _scsih_raid_device_find_by_wwid()
1349 _scsih_raid_device_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_raid_device_add() argument
1354 dewtprintk(ioc, in _scsih_raid_device_add()
1355 ioc_info(ioc, "%s: handle(0x%04x), wwid(0x%016llx)\n", in _scsih_raid_device_add()
1359 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_raid_device_add()
1360 list_add_tail(&raid_device->list, &ioc->raid_device_list); in _scsih_raid_device_add()
1361 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_raid_device_add()
1371 _scsih_raid_device_remove(struct MPT3SAS_ADAPTER *ioc, in _scsih_raid_device_remove() argument
1376 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_raid_device_remove()
1379 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_raid_device_remove()
1392 mpt3sas_scsih_expander_find_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in mpt3sas_scsih_expander_find_by_handle() argument
1397 list_for_each_entry(sas_expander, &ioc->sas_expander_list, list) { in mpt3sas_scsih_expander_find_by_handle()
1417 mpt3sas_scsih_enclosure_find_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in mpt3sas_scsih_enclosure_find_by_handle() argument
1422 list_for_each_entry(enclosure_dev, &ioc->enclosure_list, list) { in mpt3sas_scsih_enclosure_find_by_handle()
1441 mpt3sas_scsih_expander_find_by_sas_address(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_scsih_expander_find_by_sas_address() argument
1447 list_for_each_entry(sas_expander, &ioc->sas_expander_list, list) { in mpt3sas_scsih_expander_find_by_sas_address()
1466 _scsih_expander_node_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_expander_node_add() argument
1471 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_expander_node_add()
1472 list_add_tail(&sas_expander->list, &ioc->sas_expander_list); in _scsih_expander_node_add()
1473 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_expander_node_add()
1526 _scsih_scsi_lookup_find_by_target(struct MPT3SAS_ADAPTER *ioc, int id, in _scsih_scsi_lookup_find_by_target() argument
1533 smid <= ioc->shost->can_queue; smid++) { in _scsih_scsi_lookup_find_by_target()
1534 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid); in _scsih_scsi_lookup_find_by_target()
1556 _scsih_scsi_lookup_find_by_lun(struct MPT3SAS_ADAPTER *ioc, int id, in _scsih_scsi_lookup_find_by_lun() argument
1562 for (smid = 1; smid <= ioc->shost->can_queue; smid++) { in _scsih_scsi_lookup_find_by_lun()
1564 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid); in _scsih_scsi_lookup_find_by_lun()
1584 mpt3sas_scsih_scsi_lookup_get(struct MPT3SAS_ADAPTER *ioc, u16 smid) in mpt3sas_scsih_scsi_lookup_get() argument
1591 smid <= ioc->scsiio_depth - INTERNAL_SCSIIO_CMDS_COUNT) { in mpt3sas_scsih_scsi_lookup_get()
1594 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in mpt3sas_scsih_scsi_lookup_get()
1605 scmd = scsi_host_find_tag(ioc->shost, unique_tag); in mpt3sas_scsih_scsi_lookup_get()
1627 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_change_queue_depth() local
1639 if (ioc->enable_sdev_max_qd) in scsih_change_queue_depth()
1651 spin_lock_irqsave(&ioc->sas_device_lock, flags); in scsih_change_queue_depth()
1652 sas_device = __mpt3sas_get_sdev_from_target(ioc, sas_target_priv_data); in scsih_change_queue_depth()
1659 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in scsih_change_queue_depth()
1686 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in mpt3sas_scsih_change_queue_depth() local
1688 if (ioc->enable_sdev_max_qd) in mpt3sas_scsih_change_queue_depth()
1705 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_target_alloc() local
1724 spin_lock_irqsave(&ioc->raid_device_lock, flags); in scsih_target_alloc()
1725 raid_device = _scsih_raid_device_find_by_id(ioc, starget->id, in scsih_target_alloc()
1731 if (ioc->is_warpdrive) in scsih_target_alloc()
1735 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in scsih_target_alloc()
1741 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in scsih_target_alloc()
1742 pcie_device = __mpt3sas_get_pdev_by_idchannel(ioc, starget->id, in scsih_target_alloc()
1757 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in scsih_target_alloc()
1762 spin_lock_irqsave(&ioc->sas_device_lock, flags); in scsih_target_alloc()
1764 sas_device = __mpt3sas_get_sdev_by_addr(ioc, in scsih_target_alloc()
1774 if (test_bit(sas_device->handle, ioc->pd_handles)) in scsih_target_alloc()
1781 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in scsih_target_alloc()
1794 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_target_destroy() local
1806 spin_lock_irqsave(&ioc->raid_device_lock, flags); in scsih_target_destroy()
1807 raid_device = _scsih_raid_device_find_by_id(ioc, starget->id, in scsih_target_destroy()
1813 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in scsih_target_destroy()
1818 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in scsih_target_destroy()
1819 pcie_device = __mpt3sas_get_pdev_from_target(ioc, in scsih_target_destroy()
1834 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in scsih_target_destroy()
1838 spin_lock_irqsave(&ioc->sas_device_lock, flags); in scsih_target_destroy()
1839 sas_device = __mpt3sas_get_sdev_from_target(ioc, sas_target_priv_data); in scsih_target_destroy()
1854 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in scsih_target_destroy()
1872 struct MPT3SAS_ADAPTER *ioc; in scsih_slave_alloc() local
1898 ioc = shost_priv(shost); in scsih_slave_alloc()
1900 spin_lock_irqsave(&ioc->raid_device_lock, flags); in scsih_slave_alloc()
1901 raid_device = _scsih_raid_device_find_by_id(ioc, in scsih_slave_alloc()
1905 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in scsih_slave_alloc()
1908 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in scsih_slave_alloc()
1909 pcie_device = __mpt3sas_get_pdev_by_wwid(ioc, in scsih_slave_alloc()
1920 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in scsih_slave_alloc()
1923 spin_lock_irqsave(&ioc->sas_device_lock, flags); in scsih_slave_alloc()
1924 sas_device = __mpt3sas_get_sdev_by_addr(ioc, in scsih_slave_alloc()
1936 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in scsih_slave_alloc()
1952 struct MPT3SAS_ADAPTER *ioc; in scsih_slave_destroy() local
1965 ioc = shost_priv(shost); in scsih_slave_destroy()
1968 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in scsih_slave_destroy()
1969 pcie_device = __mpt3sas_get_pdev_from_target(ioc, in scsih_slave_destroy()
1977 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in scsih_slave_destroy()
1980 spin_lock_irqsave(&ioc->sas_device_lock, flags); in scsih_slave_destroy()
1981 sas_device = __mpt3sas_get_sdev_from_target(ioc, in scsih_slave_destroy()
1988 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in scsih_slave_destroy()
2002 _scsih_display_sata_capabilities(struct MPT3SAS_ADAPTER *ioc, in _scsih_display_sata_capabilities() argument
2011 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_display_sata_capabilities()
2013 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_display_sata_capabilities()
2021 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_display_sata_capabilities()
2056 struct MPT3SAS_ADAPTER *ioc = shost_priv(sdev->host); in scsih_is_raid() local
2058 if (ioc->is_warpdrive) in scsih_is_raid()
2079 struct MPT3SAS_ADAPTER *ioc = shost_priv(sdev->host); in scsih_get_resync() local
2090 if (ioc->is_warpdrive) in scsih_get_resync()
2093 spin_lock_irqsave(&ioc->raid_device_lock, flags); in scsih_get_resync()
2094 raid_device = _scsih_raid_device_find_by_id(ioc, sdev->id, in scsih_get_resync()
2100 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in scsih_get_resync()
2105 if (mpt3sas_config_get_raid_volume_pg0(ioc, &mpi_reply, &vol_pg0, in scsih_get_resync()
2108 ioc_err(ioc, "failure at %s:%d/%s()!\n", in scsih_get_resync()
2121 switch (ioc->hba_mpi_version_belonged) { in scsih_get_resync()
2140 struct MPT3SAS_ADAPTER *ioc = shost_priv(sdev->host); in scsih_get_state() local
2149 spin_lock_irqsave(&ioc->raid_device_lock, flags); in scsih_get_state()
2150 raid_device = _scsih_raid_device_find_by_id(ioc, sdev->id, in scsih_get_state()
2154 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in scsih_get_state()
2159 if (mpt3sas_config_get_raid_volume_pg0(ioc, &mpi_reply, &vol_pg0, in scsih_get_state()
2162 ioc_err(ioc, "failure at %s:%d/%s()!\n", in scsih_get_state()
2187 switch (ioc->hba_mpi_version_belonged) { in scsih_get_state()
2205 _scsih_set_level(struct MPT3SAS_ADAPTER *ioc, in _scsih_set_level() argument
2225 switch (ioc->hba_mpi_version_belonged) { in _scsih_set_level()
2247 _scsih_get_volume_capabilities(struct MPT3SAS_ADAPTER *ioc, in _scsih_get_volume_capabilities() argument
2257 if ((mpt3sas_config_get_number_pds(ioc, raid_device->handle, in _scsih_get_volume_capabilities()
2259 dfailprintk(ioc, in _scsih_get_volume_capabilities()
2260 ioc_warn(ioc, "failure at %s:%d/%s()!\n", in _scsih_get_volume_capabilities()
2270 dfailprintk(ioc, in _scsih_get_volume_capabilities()
2271 ioc_warn(ioc, "failure at %s:%d/%s()!\n", in _scsih_get_volume_capabilities()
2276 if ((mpt3sas_config_get_raid_volume_pg0(ioc, &mpi_reply, vol_pg0, in _scsih_get_volume_capabilities()
2278 dfailprintk(ioc, in _scsih_get_volume_capabilities()
2279 ioc_warn(ioc, "failure at %s:%d/%s()!\n", in _scsih_get_volume_capabilities()
2290 if (!(mpt3sas_config_get_phys_disk_pg0(ioc, &mpi_reply, in _scsih_get_volume_capabilities()
2293 if (!(mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_get_volume_capabilities()
2315 _scsih_enable_tlr(struct MPT3SAS_ADAPTER *ioc, struct scsi_device *sdev) in _scsih_enable_tlr() argument
2322 if (!(ioc->facts.IOCCapabilities & MPI2_IOCFACTS_CAPABILITY_TLR)) in _scsih_enable_tlr()
2343 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_slave_configure() local
2367 spin_lock_irqsave(&ioc->raid_device_lock, flags); in scsih_slave_configure()
2368 raid_device = mpt3sas_raid_device_find_by_handle(ioc, handle); in scsih_slave_configure()
2369 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in scsih_slave_configure()
2371 dfailprintk(ioc, in scsih_slave_configure()
2372 ioc_warn(ioc, "failure at %s:%d/%s()!\n", in scsih_slave_configure()
2377 if (_scsih_get_volume_capabilities(ioc, raid_device)) { in scsih_slave_configure()
2378 dfailprintk(ioc, in scsih_slave_configure()
2379 ioc_warn(ioc, "failure at %s:%d/%s()!\n", in scsih_slave_configure()
2387 mpt3sas_init_warpdrive_properties(ioc, raid_device); in scsih_slave_configure()
2413 if (ioc->manu_pg10.OEMIdentifier && in scsih_slave_configure()
2414 (le32_to_cpu(ioc->manu_pg10.GenericFlags0) & in scsih_slave_configure()
2436 if (!ioc->hide_ir_msg) in scsih_slave_configure()
2455 if (!ioc->is_warpdrive) in scsih_slave_configure()
2456 _scsih_set_level(ioc, sdev, raid_device->volume_type); in scsih_slave_configure()
2462 if (mpt3sas_config_get_volume_handle(ioc, handle, in scsih_slave_configure()
2464 dfailprintk(ioc, in scsih_slave_configure()
2465 ioc_warn(ioc, "failure at %s:%d/%s()!\n", in scsih_slave_configure()
2469 if (volume_handle && mpt3sas_config_get_volume_wwid(ioc, in scsih_slave_configure()
2471 dfailprintk(ioc, in scsih_slave_configure()
2472 ioc_warn(ioc, "failure at %s:%d/%s()!\n", in scsih_slave_configure()
2480 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in scsih_slave_configure()
2481 pcie_device = __mpt3sas_get_pdev_by_wwid(ioc, in scsih_slave_configure()
2484 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in scsih_slave_configure()
2485 dfailprintk(ioc, in scsih_slave_configure()
2486 ioc_warn(ioc, "failure at %s:%d/%s()!\n", in scsih_slave_configure()
2515 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in scsih_slave_configure()
2524 ioc->page_size - 1); in scsih_slave_configure()
2528 spin_lock_irqsave(&ioc->sas_device_lock, flags); in scsih_slave_configure()
2529 sas_device = __mpt3sas_get_sdev_by_addr(ioc, in scsih_slave_configure()
2532 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in scsih_slave_configure()
2533 dfailprintk(ioc, in scsih_slave_configure()
2534 ioc_warn(ioc, "failure at %s:%d/%s()!\n", in scsih_slave_configure()
2570 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in scsih_slave_configure()
2573 _scsih_display_sata_capabilities(ioc, handle, sdev); in scsih_slave_configure()
2580 _scsih_enable_tlr(ioc, sdev); in scsih_slave_configure()
2638 _scsih_response_code(struct MPT3SAS_ADAPTER *ioc, u8 response_code) in _scsih_response_code() argument
2671 ioc_warn(ioc, "response_code(0x%01x): %s\n", response_code, desc); in _scsih_response_code()
2688 _scsih_tm_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply) in _scsih_tm_done() argument
2692 if (ioc->tm_cmds.status == MPT3_CMD_NOT_USED) in _scsih_tm_done()
2694 if (ioc->tm_cmds.smid != smid) in _scsih_tm_done()
2696 ioc->tm_cmds.status |= MPT3_CMD_COMPLETE; in _scsih_tm_done()
2697 mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_tm_done()
2699 memcpy(ioc->tm_cmds.reply, mpi_reply, mpi_reply->MsgLength*4); in _scsih_tm_done()
2700 ioc->tm_cmds.status |= MPT3_CMD_REPLY_VALID; in _scsih_tm_done()
2702 ioc->tm_cmds.status &= ~MPT3_CMD_PENDING; in _scsih_tm_done()
2703 complete(&ioc->tm_cmds.done); in _scsih_tm_done()
2715 mpt3sas_scsih_set_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle) in mpt3sas_scsih_set_tm_flag() argument
2721 shost_for_each_device(sdev, ioc->shost) { in mpt3sas_scsih_set_tm_flag()
2730 ioc->ignore_loginfos = 1; in mpt3sas_scsih_set_tm_flag()
2743 mpt3sas_scsih_clear_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle) in mpt3sas_scsih_clear_tm_flag() argument
2749 shost_for_each_device(sdev, ioc->shost) { in mpt3sas_scsih_clear_tm_flag()
2758 ioc->ignore_loginfos = 0; in mpt3sas_scsih_clear_tm_flag()
2776 scsih_tm_cmd_map_status(struct MPT3SAS_ADAPTER *ioc, uint channel, in scsih_tm_cmd_map_status() argument
2780 if (smid_task <= ioc->shost->can_queue) { in scsih_tm_cmd_map_status()
2783 if (!(_scsih_scsi_lookup_find_by_target(ioc, in scsih_tm_cmd_map_status()
2789 if (!(_scsih_scsi_lookup_find_by_lun(ioc, id, in scsih_tm_cmd_map_status()
2796 } else if (smid_task == ioc->scsih_cmds.smid) { in scsih_tm_cmd_map_status()
2797 if ((ioc->scsih_cmds.status & MPT3_CMD_COMPLETE) || in scsih_tm_cmd_map_status()
2798 (ioc->scsih_cmds.status & MPT3_CMD_NOT_USED)) in scsih_tm_cmd_map_status()
2800 } else if (smid_task == ioc->ctl_cmds.smid) { in scsih_tm_cmd_map_status()
2801 if ((ioc->ctl_cmds.status & MPT3_CMD_COMPLETE) || in scsih_tm_cmd_map_status()
2802 (ioc->ctl_cmds.status & MPT3_CMD_NOT_USED)) in scsih_tm_cmd_map_status()
2827 scsih_tm_post_processing(struct MPT3SAS_ADAPTER *ioc, u16 handle, in scsih_tm_post_processing() argument
2832 rc = scsih_tm_cmd_map_status(ioc, channel, id, lun, type, smid_task); in scsih_tm_post_processing()
2836 ioc_info(ioc, in scsih_tm_post_processing()
2846 mpt3sas_base_mask_interrupts(ioc); in scsih_tm_post_processing()
2847 mpt3sas_base_sync_reply_irqs(ioc, 1); in scsih_tm_post_processing()
2848 mpt3sas_base_unmask_interrupts(ioc); in scsih_tm_post_processing()
2850 return scsih_tm_cmd_map_status(ioc, channel, id, lun, type, smid_task); in scsih_tm_post_processing()
2875 mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle, uint channel, in mpt3sas_scsih_issue_tm() argument
2887 lockdep_assert_held(&ioc->tm_cmds.mutex); in mpt3sas_scsih_issue_tm()
2889 if (ioc->tm_cmds.status != MPT3_CMD_NOT_USED) { in mpt3sas_scsih_issue_tm()
2890 ioc_info(ioc, "%s: tm_cmd busy!!!\n", __func__); in mpt3sas_scsih_issue_tm()
2894 if (ioc->shost_recovery || ioc->remove_host || in mpt3sas_scsih_issue_tm()
2895 ioc->pci_error_recovery) { in mpt3sas_scsih_issue_tm()
2896 ioc_info(ioc, "%s: host reset in progress!\n", __func__); in mpt3sas_scsih_issue_tm()
2900 ioc_state = mpt3sas_base_get_iocstate(ioc, 0); in mpt3sas_scsih_issue_tm()
2902 dhsprintk(ioc, ioc_info(ioc, "unexpected doorbell active!\n")); in mpt3sas_scsih_issue_tm()
2903 rc = mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); in mpt3sas_scsih_issue_tm()
2908 mpt3sas_print_fault_code(ioc, ioc_state & in mpt3sas_scsih_issue_tm()
2910 rc = mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); in mpt3sas_scsih_issue_tm()
2914 mpt3sas_print_coredump_info(ioc, ioc_state & in mpt3sas_scsih_issue_tm()
2916 rc = mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); in mpt3sas_scsih_issue_tm()
2920 smid = mpt3sas_base_get_smid_hpr(ioc, ioc->tm_cb_idx); in mpt3sas_scsih_issue_tm()
2922 ioc_err(ioc, "%s: failed obtaining a smid\n", __func__); in mpt3sas_scsih_issue_tm()
2926 dtmprintk(ioc, in mpt3sas_scsih_issue_tm()
2927 …ioc_info(ioc, "sending tm: handle(0x%04x), task_type(0x%02x), smid(%d), timeout(%d), tr_method(0x%… in mpt3sas_scsih_issue_tm()
2929 ioc->tm_cmds.status = MPT3_CMD_PENDING; in mpt3sas_scsih_issue_tm()
2930 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in mpt3sas_scsih_issue_tm()
2931 ioc->tm_cmds.smid = smid; in mpt3sas_scsih_issue_tm()
2933 memset(ioc->tm_cmds.reply, 0, sizeof(Mpi2SCSITaskManagementReply_t)); in mpt3sas_scsih_issue_tm()
2942 mpt3sas_scsih_set_tm_flag(ioc, handle); in mpt3sas_scsih_issue_tm()
2943 init_completion(&ioc->tm_cmds.done); in mpt3sas_scsih_issue_tm()
2944 ioc->put_smid_hi_priority(ioc, smid, msix_task); in mpt3sas_scsih_issue_tm()
2945 wait_for_completion_timeout(&ioc->tm_cmds.done, timeout*HZ); in mpt3sas_scsih_issue_tm()
2946 if (!(ioc->tm_cmds.status & MPT3_CMD_COMPLETE)) { in mpt3sas_scsih_issue_tm()
2947 mpt3sas_check_cmd_timeout(ioc, in mpt3sas_scsih_issue_tm()
2948 ioc->tm_cmds.status, mpi_request, in mpt3sas_scsih_issue_tm()
2951 rc = mpt3sas_base_hard_reset_handler(ioc, in mpt3sas_scsih_issue_tm()
2959 mpt3sas_base_sync_reply_irqs(ioc, 0); in mpt3sas_scsih_issue_tm()
2961 if (ioc->tm_cmds.status & MPT3_CMD_REPLY_VALID) { in mpt3sas_scsih_issue_tm()
2962 mpt3sas_trigger_master(ioc, MASTER_TRIGGER_TASK_MANAGMENT); in mpt3sas_scsih_issue_tm()
2963 mpi_reply = ioc->tm_cmds.reply; in mpt3sas_scsih_issue_tm()
2964 dtmprintk(ioc, in mpt3sas_scsih_issue_tm()
2965 ioc_info(ioc, "complete tm: ioc_status(0x%04x), loginfo(0x%08x), term_count(0x%08x)\n", in mpt3sas_scsih_issue_tm()
2969 if (ioc->logging_level & MPT_DEBUG_TM) { in mpt3sas_scsih_issue_tm()
2970 _scsih_response_code(ioc, mpi_reply->ResponseCode); in mpt3sas_scsih_issue_tm()
2991 request = mpt3sas_base_get_msg_frame(ioc, smid_task); in mpt3sas_scsih_issue_tm()
2995 ioc_info(ioc, "Task abort tm failed: handle(0x%04x)," in mpt3sas_scsih_issue_tm()
3004 rc = scsih_tm_post_processing(ioc, handle, channel, id, lun, in mpt3sas_scsih_issue_tm()
3016 mpt3sas_scsih_clear_tm_flag(ioc, handle); in mpt3sas_scsih_issue_tm()
3017 ioc->tm_cmds.status = MPT3_CMD_NOT_USED; in mpt3sas_scsih_issue_tm()
3021 int mpt3sas_scsih_issue_locked_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle, in mpt3sas_scsih_issue_locked_tm() argument
3027 mutex_lock(&ioc->tm_cmds.mutex); in mpt3sas_scsih_issue_locked_tm()
3028 ret = mpt3sas_scsih_issue_tm(ioc, handle, channel, id, lun, type, in mpt3sas_scsih_issue_locked_tm()
3030 mutex_unlock(&ioc->tm_cmds.mutex); in mpt3sas_scsih_issue_locked_tm()
3043 _scsih_tm_display_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd) in _scsih_tm_display_info() argument
3054 if (ioc->hide_ir_msg) in _scsih_tm_display_info()
3067 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in _scsih_tm_display_info()
3068 pcie_device = __mpt3sas_get_pdev_from_target(ioc, priv_target); in _scsih_tm_display_info()
3088 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_tm_display_info()
3091 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_tm_display_info()
3092 sas_device = __mpt3sas_get_sdev_from_target(ioc, priv_target); in _scsih_tm_display_info()
3113 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_tm_display_info()
3126 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in scsih_abort() local
3138 _scsih_tm_display_info(ioc, scmd); in scsih_abort()
3142 ioc->remove_host) { in scsih_abort()
3169 mpt3sas_halt_firmware(ioc); in scsih_abort()
3172 pcie_device = mpt3sas_get_pdev_by_handle(ioc, handle); in scsih_abort()
3173 if (pcie_device && (!ioc->tm_custom_handling) && in scsih_abort()
3175 timeout = ioc->nvme_abort_timeout; in scsih_abort()
3176 r = mpt3sas_scsih_issue_locked_tm(ioc, handle, scmd->device->channel, in scsih_abort()
3200 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in scsih_dev_reset() local
3214 _scsih_tm_display_info(ioc, scmd); in scsih_dev_reset()
3218 ioc->remove_host) { in scsih_dev_reset()
3231 sas_device = mpt3sas_get_sdev_from_target(ioc, in scsih_dev_reset()
3244 pcie_device = mpt3sas_get_pdev_by_handle(ioc, handle); in scsih_dev_reset()
3246 if (pcie_device && (!ioc->tm_custom_handling) && in scsih_dev_reset()
3253 r = mpt3sas_scsih_issue_locked_tm(ioc, handle, scmd->device->channel, in scsih_dev_reset()
3281 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in scsih_target_reset() local
3294 _scsih_tm_display_info(ioc, scmd); in scsih_target_reset()
3298 ioc->remove_host) { in scsih_target_reset()
3311 sas_device = mpt3sas_get_sdev_from_target(ioc, in scsih_target_reset()
3324 pcie_device = mpt3sas_get_pdev_by_handle(ioc, handle); in scsih_target_reset()
3326 if (pcie_device && (!ioc->tm_custom_handling) && in scsih_target_reset()
3332 r = mpt3sas_scsih_issue_locked_tm(ioc, handle, scmd->device->channel, in scsih_target_reset()
3360 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in scsih_host_reset() local
3363 ioc_info(ioc, "attempting host reset! scmd(0x%p)\n", scmd); in scsih_host_reset()
3366 if (ioc->is_driver_loading || ioc->remove_host) { in scsih_host_reset()
3367 ioc_info(ioc, "Blocking the host reset\n"); in scsih_host_reset()
3372 retval = mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); in scsih_host_reset()
3375 ioc_info(ioc, "host reset: %s scmd(0x%p)\n", in scsih_host_reset()
3391 _scsih_fw_event_add(struct MPT3SAS_ADAPTER *ioc, struct fw_event_work *fw_event) in _scsih_fw_event_add() argument
3395 if (ioc->firmware_event_thread == NULL) in _scsih_fw_event_add()
3398 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_fw_event_add()
3401 list_add_tail(&fw_event->list, &ioc->fw_event_list); in _scsih_fw_event_add()
3404 queue_work(ioc->firmware_event_thread, &fw_event->work); in _scsih_fw_event_add()
3405 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_fw_event_add()
3417 _scsih_fw_event_del_from_list(struct MPT3SAS_ADAPTER *ioc, struct fw_event_work in _scsih_fw_event_del_from_list() argument
3422 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_fw_event_del_from_list()
3427 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_fw_event_del_from_list()
3437 mpt3sas_send_trigger_data_event(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_send_trigger_data_event() argument
3443 if (ioc->is_driver_loading) in mpt3sas_send_trigger_data_event()
3450 fw_event->ioc = ioc; in mpt3sas_send_trigger_data_event()
3452 _scsih_fw_event_add(ioc, fw_event); in mpt3sas_send_trigger_data_event()
3461 _scsih_error_recovery_delete_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_error_recovery_delete_devices() argument
3465 if (ioc->is_driver_loading) in _scsih_error_recovery_delete_devices()
3471 fw_event->ioc = ioc; in _scsih_error_recovery_delete_devices()
3472 _scsih_fw_event_add(ioc, fw_event); in _scsih_error_recovery_delete_devices()
3481 mpt3sas_port_enable_complete(struct MPT3SAS_ADAPTER *ioc) in mpt3sas_port_enable_complete() argument
3489 fw_event->ioc = ioc; in mpt3sas_port_enable_complete()
3490 _scsih_fw_event_add(ioc, fw_event); in mpt3sas_port_enable_complete()
3494 static struct fw_event_work *dequeue_next_fw_event(struct MPT3SAS_ADAPTER *ioc) in dequeue_next_fw_event() argument
3499 spin_lock_irqsave(&ioc->fw_event_lock, flags); in dequeue_next_fw_event()
3500 if (!list_empty(&ioc->fw_event_list)) { in dequeue_next_fw_event()
3501 fw_event = list_first_entry(&ioc->fw_event_list, in dequeue_next_fw_event()
3506 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in dequeue_next_fw_event()
3519 _scsih_fw_event_cleanup_queue(struct MPT3SAS_ADAPTER *ioc) in _scsih_fw_event_cleanup_queue() argument
3523 if ((list_empty(&ioc->fw_event_list) && !ioc->current_event) || in _scsih_fw_event_cleanup_queue()
3524 !ioc->firmware_event_thread || in_interrupt()) in _scsih_fw_event_cleanup_queue()
3527 ioc->fw_events_cleanup = 1; in _scsih_fw_event_cleanup_queue()
3528 while ((fw_event = dequeue_next_fw_event(ioc)) || in _scsih_fw_event_cleanup_queue()
3529 (fw_event = ioc->current_event)) { in _scsih_fw_event_cleanup_queue()
3545 if (fw_event == ioc->current_event && in _scsih_fw_event_cleanup_queue()
3546 ioc->current_event->event != in _scsih_fw_event_cleanup_queue()
3548 ioc->current_event = NULL; in _scsih_fw_event_cleanup_queue()
3564 ioc->fw_events_cleanup = 0; in _scsih_fw_event_cleanup_queue()
3643 _scsih_ublock_io_all_device(struct MPT3SAS_ADAPTER *ioc) in _scsih_ublock_io_all_device() argument
3648 shost_for_each_device(sdev, ioc->shost) { in _scsih_ublock_io_all_device()
3655 dewtprintk(ioc, sdev_printk(KERN_INFO, sdev, in _scsih_ublock_io_all_device()
3671 _scsih_ublock_io_device(struct MPT3SAS_ADAPTER *ioc, u64 sas_address) in _scsih_ublock_io_device() argument
3676 shost_for_each_device(sdev, ioc->shost) { in _scsih_ublock_io_device()
3696 _scsih_block_io_all_device(struct MPT3SAS_ADAPTER *ioc) in _scsih_block_io_all_device() argument
3701 shost_for_each_device(sdev, ioc->shost) { in _scsih_block_io_all_device()
3725 _scsih_block_io_device(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_block_io_device() argument
3731 sas_device = mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_block_io_device()
3733 shost_for_each_device(sdev, ioc->shost) { in _scsih_block_io_device()
3766 _scsih_block_io_to_children_attached_to_ex(struct MPT3SAS_ADAPTER *ioc, in _scsih_block_io_to_children_attached_to_ex() argument
3781 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_block_io_to_children_attached_to_ex()
3782 sas_device = __mpt3sas_get_sdev_by_addr(ioc, in _scsih_block_io_to_children_attached_to_ex()
3786 ioc->blocking_handles); in _scsih_block_io_to_children_attached_to_ex()
3789 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_block_io_to_children_attached_to_ex()
3802 ioc, mpt3sas_port->remote_identify.sas_address); in _scsih_block_io_to_children_attached_to_ex()
3803 _scsih_block_io_to_children_attached_to_ex(ioc, in _scsih_block_io_to_children_attached_to_ex()
3818 _scsih_block_io_to_children_attached_directly(struct MPT3SAS_ADAPTER *ioc, in _scsih_block_io_to_children_attached_directly() argument
3832 _scsih_block_io_device(ioc, handle); in _scsih_block_io_to_children_attached_directly()
3845 _scsih_block_io_to_pcie_children_attached_directly(struct MPT3SAS_ADAPTER *ioc, in _scsih_block_io_to_pcie_children_attached_directly() argument
3860 _scsih_block_io_device(ioc, handle); in _scsih_block_io_to_pcie_children_attached_directly()
3879 _scsih_tm_tr_send(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_tm_tr_send() argument
3892 if (ioc->pci_error_recovery) { in _scsih_tm_tr_send()
3893 dewtprintk(ioc, in _scsih_tm_tr_send()
3894 ioc_info(ioc, "%s: host in pci error recovery: handle(0x%04x)\n", in _scsih_tm_tr_send()
3898 ioc_state = mpt3sas_base_get_iocstate(ioc, 1); in _scsih_tm_tr_send()
3900 dewtprintk(ioc, in _scsih_tm_tr_send()
3901 ioc_info(ioc, "%s: host is not operational: handle(0x%04x)\n", in _scsih_tm_tr_send()
3907 if (test_bit(handle, ioc->pd_handles)) in _scsih_tm_tr_send()
3910 clear_bit(handle, ioc->pend_os_device_add); in _scsih_tm_tr_send()
3912 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_tm_tr_send()
3913 sas_device = __mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_tm_tr_send()
3920 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_tm_tr_send()
3922 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in _scsih_tm_tr_send()
3923 pcie_device = __mpt3sas_get_pdev_by_handle(ioc, handle); in _scsih_tm_tr_send()
3930 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_tm_tr_send()
3931 if (pcie_device && (!ioc->tm_custom_handling) && in _scsih_tm_tr_send()
3940 dewtprintk(ioc, in _scsih_tm_tr_send()
3941 ioc_info(ioc, "setting delete flag: handle(0x%04x), sas_addr(0x%016llx)\n", in _scsih_tm_tr_send()
3945 dewtprintk(ioc, in _scsih_tm_tr_send()
3946 ioc_info(ioc, "setting delete flag:enclosure logical id(0x%016llx), slot(%d)\n", in _scsih_tm_tr_send()
3950 dewtprintk(ioc, in _scsih_tm_tr_send()
3951 ioc_info(ioc, "setting delete flag: enclosure level(0x%04x), connector name( %s)\n", in _scsih_tm_tr_send()
3956 dewtprintk(ioc, in _scsih_tm_tr_send()
3957 ioc_info(ioc, "setting delete flag: logical id(0x%016llx), slot(%d)\n", in _scsih_tm_tr_send()
3961 dewtprintk(ioc, in _scsih_tm_tr_send()
3962 ioc_info(ioc, "setting delete flag:, enclosure level(0x%04x), connector name( %s)\n", in _scsih_tm_tr_send()
3966 _scsih_ublock_io_device(ioc, sas_address); in _scsih_tm_tr_send()
3970 smid = mpt3sas_base_get_smid_hpr(ioc, ioc->tm_tr_cb_idx); in _scsih_tm_tr_send()
3977 list_add_tail(&delayed_tr->list, &ioc->delayed_tr_list); in _scsih_tm_tr_send()
3978 dewtprintk(ioc, in _scsih_tm_tr_send()
3979 ioc_info(ioc, "DELAYED:tr:handle(0x%04x), (open)\n", in _scsih_tm_tr_send()
3984 dewtprintk(ioc, in _scsih_tm_tr_send()
3985 ioc_info(ioc, "tr_send:handle(0x%04x), (open), smid(%d), cb(%d)\n", in _scsih_tm_tr_send()
3986 handle, smid, ioc->tm_tr_cb_idx)); in _scsih_tm_tr_send()
3987 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_tm_tr_send()
3993 set_bit(handle, ioc->device_remove_in_progress); in _scsih_tm_tr_send()
3994 ioc->put_smid_hi_priority(ioc, smid, 0); in _scsih_tm_tr_send()
3995 mpt3sas_trigger_master(ioc, MASTER_TRIGGER_DEVICE_REMOVAL); in _scsih_tm_tr_send()
4021 _scsih_tm_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, in _scsih_tm_tr_complete() argument
4027 mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_tm_tr_complete()
4033 if (ioc->pci_error_recovery) { in _scsih_tm_tr_complete()
4034 dewtprintk(ioc, in _scsih_tm_tr_complete()
4035 ioc_info(ioc, "%s: host in pci error recovery\n", in _scsih_tm_tr_complete()
4039 ioc_state = mpt3sas_base_get_iocstate(ioc, 1); in _scsih_tm_tr_complete()
4041 dewtprintk(ioc, in _scsih_tm_tr_complete()
4042 ioc_info(ioc, "%s: host is not operational\n", in _scsih_tm_tr_complete()
4047 ioc_err(ioc, "mpi_reply not valid at %s:%d/%s()!\n", in _scsih_tm_tr_complete()
4051 mpi_request_tm = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_tm_tr_complete()
4054 dewtprintk(ioc, in _scsih_tm_tr_complete()
4055 ioc_err(ioc, "spurious interrupt: handle(0x%04x:0x%04x), smid(%d)!!!\n", in _scsih_tm_tr_complete()
4061 mpt3sas_trigger_master(ioc, MASTER_TRIGGER_TASK_MANAGMENT); in _scsih_tm_tr_complete()
4062 dewtprintk(ioc, in _scsih_tm_tr_complete()
4063 …ioc_info(ioc, "tr_complete:handle(0x%04x), (open) smid(%d), ioc_status(0x%04x), loginfo(0x%08x), c… in _scsih_tm_tr_complete()
4068 smid_sas_ctrl = mpt3sas_base_get_smid(ioc, ioc->tm_sas_control_cb_idx); in _scsih_tm_tr_complete()
4072 return _scsih_check_for_pending_tm(ioc, smid); in _scsih_tm_tr_complete()
4075 list_add_tail(&delayed_sc->list, &ioc->delayed_sc_list); in _scsih_tm_tr_complete()
4076 dewtprintk(ioc, in _scsih_tm_tr_complete()
4077 ioc_info(ioc, "DELAYED:sc:handle(0x%04x), (open)\n", in _scsih_tm_tr_complete()
4079 return _scsih_check_for_pending_tm(ioc, smid); in _scsih_tm_tr_complete()
4082 dewtprintk(ioc, in _scsih_tm_tr_complete()
4083 ioc_info(ioc, "sc_send:handle(0x%04x), (open), smid(%d), cb(%d)\n", in _scsih_tm_tr_complete()
4084 handle, smid_sas_ctrl, ioc->tm_sas_control_cb_idx)); in _scsih_tm_tr_complete()
4085 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid_sas_ctrl); in _scsih_tm_tr_complete()
4090 ioc->put_smid_default(ioc, smid_sas_ctrl); in _scsih_tm_tr_complete()
4092 return _scsih_check_for_pending_tm(ioc, smid); in _scsih_tm_tr_complete()
4102 inline bool _scsih_allow_scmd_to_device(struct MPT3SAS_ADAPTER *ioc, in _scsih_allow_scmd_to_device() argument
4106 if (ioc->pci_error_recovery) in _scsih_allow_scmd_to_device()
4109 if (ioc->hba_mpi_version_belonged == MPI2_VERSION) { in _scsih_allow_scmd_to_device()
4110 if (ioc->remove_host) in _scsih_allow_scmd_to_device()
4116 if (ioc->remove_host) { in _scsih_allow_scmd_to_device()
4146 _scsih_sas_control_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, in _scsih_sas_control_complete() argument
4150 mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_sas_control_complete()
4153 dewtprintk(ioc, in _scsih_sas_control_complete()
4154 …ioc_info(ioc, "sc_complete:handle(0x%04x), (open) smid(%d), ioc_status(0x%04x), loginfo(0x%08x)\n", in _scsih_sas_control_complete()
4161 ioc->device_remove_in_progress); in _scsih_sas_control_complete()
4164 ioc_err(ioc, "mpi_reply not valid at %s:%d/%s()!\n", in _scsih_sas_control_complete()
4167 return mpt3sas_check_for_pending_internal_cmds(ioc, smid); in _scsih_sas_control_complete()
4181 _scsih_tm_tr_volume_send(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_tm_tr_volume_send() argument
4187 if (ioc->pci_error_recovery) { in _scsih_tm_tr_volume_send()
4188 dewtprintk(ioc, in _scsih_tm_tr_volume_send()
4189 ioc_info(ioc, "%s: host reset in progress!\n", in _scsih_tm_tr_volume_send()
4194 smid = mpt3sas_base_get_smid_hpr(ioc, ioc->tm_tr_volume_cb_idx); in _scsih_tm_tr_volume_send()
4201 list_add_tail(&delayed_tr->list, &ioc->delayed_tr_volume_list); in _scsih_tm_tr_volume_send()
4202 dewtprintk(ioc, in _scsih_tm_tr_volume_send()
4203 ioc_info(ioc, "DELAYED:tr:handle(0x%04x), (open)\n", in _scsih_tm_tr_volume_send()
4208 dewtprintk(ioc, in _scsih_tm_tr_volume_send()
4209 ioc_info(ioc, "tr_send:handle(0x%04x), (open), smid(%d), cb(%d)\n", in _scsih_tm_tr_volume_send()
4210 handle, smid, ioc->tm_tr_volume_cb_idx)); in _scsih_tm_tr_volume_send()
4211 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_tm_tr_volume_send()
4216 ioc->put_smid_hi_priority(ioc, smid, 0); in _scsih_tm_tr_volume_send()
4231 _scsih_tm_volume_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, in _scsih_tm_volume_tr_complete() argument
4237 mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_tm_volume_tr_complete()
4239 if (ioc->shost_recovery || ioc->pci_error_recovery) { in _scsih_tm_volume_tr_complete()
4240 dewtprintk(ioc, in _scsih_tm_volume_tr_complete()
4241 ioc_info(ioc, "%s: host reset in progress!\n", in _scsih_tm_volume_tr_complete()
4246 ioc_err(ioc, "mpi_reply not valid at %s:%d/%s()!\n", in _scsih_tm_volume_tr_complete()
4251 mpi_request_tm = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_tm_volume_tr_complete()
4254 dewtprintk(ioc, in _scsih_tm_volume_tr_complete()
4255 ioc_err(ioc, "spurious interrupt: handle(0x%04x:0x%04x), smid(%d)!!!\n", in _scsih_tm_volume_tr_complete()
4261 dewtprintk(ioc, in _scsih_tm_volume_tr_complete()
4262 …ioc_info(ioc, "tr_complete:handle(0x%04x), (open) smid(%d), ioc_status(0x%04x), loginfo(0x%08x), c… in _scsih_tm_volume_tr_complete()
4267 return _scsih_check_for_pending_tm(ioc, smid); in _scsih_tm_volume_tr_complete()
4280 _scsih_issue_delayed_event_ack(struct MPT3SAS_ADAPTER *ioc, u16 smid, U16 event, in _scsih_issue_delayed_event_ack() argument
4284 int i = smid - ioc->internal_smid; in _scsih_issue_delayed_event_ack()
4291 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_issue_delayed_event_ack()
4292 ioc->internal_lookup[i].cb_idx = ioc->base_cb_idx; in _scsih_issue_delayed_event_ack()
4293 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_issue_delayed_event_ack()
4295 dewtprintk(ioc, in _scsih_issue_delayed_event_ack()
4296 ioc_info(ioc, "EVENT ACK: event(0x%04x), smid(%d), cb(%d)\n", in _scsih_issue_delayed_event_ack()
4297 le16_to_cpu(event), smid, ioc->base_cb_idx)); in _scsih_issue_delayed_event_ack()
4298 ack_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_issue_delayed_event_ack()
4305 ioc->put_smid_default(ioc, smid); in _scsih_issue_delayed_event_ack()
4318 _scsih_issue_delayed_sas_io_unit_ctrl(struct MPT3SAS_ADAPTER *ioc, in _scsih_issue_delayed_sas_io_unit_ctrl() argument
4323 int i = smid - ioc->internal_smid; in _scsih_issue_delayed_sas_io_unit_ctrl()
4326 if (ioc->remove_host) { in _scsih_issue_delayed_sas_io_unit_ctrl()
4327 dewtprintk(ioc, in _scsih_issue_delayed_sas_io_unit_ctrl()
4328 ioc_info(ioc, "%s: host has been removed\n", in _scsih_issue_delayed_sas_io_unit_ctrl()
4331 } else if (ioc->pci_error_recovery) { in _scsih_issue_delayed_sas_io_unit_ctrl()
4332 dewtprintk(ioc, in _scsih_issue_delayed_sas_io_unit_ctrl()
4333 ioc_info(ioc, "%s: host in pci error recovery\n", in _scsih_issue_delayed_sas_io_unit_ctrl()
4337 ioc_state = mpt3sas_base_get_iocstate(ioc, 1); in _scsih_issue_delayed_sas_io_unit_ctrl()
4339 dewtprintk(ioc, in _scsih_issue_delayed_sas_io_unit_ctrl()
4340 ioc_info(ioc, "%s: host is not operational\n", in _scsih_issue_delayed_sas_io_unit_ctrl()
4349 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_issue_delayed_sas_io_unit_ctrl()
4350 ioc->internal_lookup[i].cb_idx = ioc->tm_sas_control_cb_idx; in _scsih_issue_delayed_sas_io_unit_ctrl()
4351 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_issue_delayed_sas_io_unit_ctrl()
4353 dewtprintk(ioc, in _scsih_issue_delayed_sas_io_unit_ctrl()
4354 ioc_info(ioc, "sc_send:handle(0x%04x), (open), smid(%d), cb(%d)\n", in _scsih_issue_delayed_sas_io_unit_ctrl()
4355 handle, smid, ioc->tm_sas_control_cb_idx)); in _scsih_issue_delayed_sas_io_unit_ctrl()
4356 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_issue_delayed_sas_io_unit_ctrl()
4361 ioc->put_smid_default(ioc, smid); in _scsih_issue_delayed_sas_io_unit_ctrl()
4378 mpt3sas_check_for_pending_internal_cmds(struct MPT3SAS_ADAPTER *ioc, u16 smid) in mpt3sas_check_for_pending_internal_cmds() argument
4383 if (!list_empty(&ioc->delayed_event_ack_list)) { in mpt3sas_check_for_pending_internal_cmds()
4384 delayed_event_ack = list_entry(ioc->delayed_event_ack_list.next, in mpt3sas_check_for_pending_internal_cmds()
4386 _scsih_issue_delayed_event_ack(ioc, smid, in mpt3sas_check_for_pending_internal_cmds()
4393 if (!list_empty(&ioc->delayed_sc_list)) { in mpt3sas_check_for_pending_internal_cmds()
4394 delayed_sc = list_entry(ioc->delayed_sc_list.next, in mpt3sas_check_for_pending_internal_cmds()
4396 _scsih_issue_delayed_sas_io_unit_ctrl(ioc, smid, in mpt3sas_check_for_pending_internal_cmds()
4417 _scsih_check_for_pending_tm(struct MPT3SAS_ADAPTER *ioc, u16 smid) in _scsih_check_for_pending_tm() argument
4421 if (!list_empty(&ioc->delayed_tr_volume_list)) { in _scsih_check_for_pending_tm()
4422 delayed_tr = list_entry(ioc->delayed_tr_volume_list.next, in _scsih_check_for_pending_tm()
4424 mpt3sas_base_free_smid(ioc, smid); in _scsih_check_for_pending_tm()
4425 _scsih_tm_tr_volume_send(ioc, delayed_tr->handle); in _scsih_check_for_pending_tm()
4431 if (!list_empty(&ioc->delayed_tr_list)) { in _scsih_check_for_pending_tm()
4432 delayed_tr = list_entry(ioc->delayed_tr_list.next, in _scsih_check_for_pending_tm()
4434 mpt3sas_base_free_smid(ioc, smid); in _scsih_check_for_pending_tm()
4435 _scsih_tm_tr_send(ioc, delayed_tr->handle); in _scsih_check_for_pending_tm()
4456 _scsih_check_topo_delete_events(struct MPT3SAS_ADAPTER *ioc, in _scsih_check_topo_delete_events() argument
4474 _scsih_tm_tr_send(ioc, handle); in _scsih_check_topo_delete_events()
4478 if (expander_handle < ioc->sas_hba.num_phys) { in _scsih_check_topo_delete_events()
4479 _scsih_block_io_to_children_attached_directly(ioc, event_data); in _scsih_check_topo_delete_events()
4485 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_check_topo_delete_events()
4486 sas_expander = mpt3sas_scsih_expander_find_by_handle(ioc, in _scsih_check_topo_delete_events()
4488 _scsih_block_io_to_children_attached_to_ex(ioc, sas_expander); in _scsih_check_topo_delete_events()
4489 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_check_topo_delete_events()
4491 handle = find_first_bit(ioc->blocking_handles, in _scsih_check_topo_delete_events()
4492 ioc->facts.MaxDevHandle); in _scsih_check_topo_delete_events()
4493 if (handle < ioc->facts.MaxDevHandle) in _scsih_check_topo_delete_events()
4494 _scsih_block_io_device(ioc, handle); in _scsih_check_topo_delete_events()
4495 } while (test_and_clear_bit(handle, ioc->blocking_handles)); in _scsih_check_topo_delete_events()
4497 _scsih_block_io_to_children_attached_directly(ioc, event_data); in _scsih_check_topo_delete_events()
4503 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_check_topo_delete_events()
4504 list_for_each_entry(fw_event, &ioc->fw_event_list, list) { in _scsih_check_topo_delete_events()
4516 dewtprintk(ioc, in _scsih_check_topo_delete_events()
4517 ioc_info(ioc, "setting ignoring flag\n")); in _scsih_check_topo_delete_events()
4522 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_check_topo_delete_events()
4537 _scsih_check_pcie_topo_remove_events(struct MPT3SAS_ADAPTER *ioc, in _scsih_check_pcie_topo_remove_events() argument
4553 _scsih_tm_tr_send(ioc, handle); in _scsih_check_pcie_topo_remove_events()
4559 ioc, event_data); in _scsih_check_pcie_topo_remove_events()
4568 ioc, event_data); in _scsih_check_pcie_topo_remove_events()
4574 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_check_pcie_topo_remove_events()
4575 list_for_each_entry(fw_event, &ioc->fw_event_list, list) { in _scsih_check_pcie_topo_remove_events()
4588 dewtprintk(ioc, in _scsih_check_pcie_topo_remove_events()
4589 ioc_info(ioc, "setting ignoring flag for switch event\n")); in _scsih_check_pcie_topo_remove_events()
4594 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_check_pcie_topo_remove_events()
4605 _scsih_set_volume_delete_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_set_volume_delete_flag() argument
4611 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_set_volume_delete_flag()
4612 raid_device = mpt3sas_raid_device_find_by_handle(ioc, handle); in _scsih_set_volume_delete_flag()
4618 dewtprintk(ioc, in _scsih_set_volume_delete_flag()
4619 ioc_info(ioc, "setting delete flag: handle(0x%04x), wwid(0x%016llx)\n", in _scsih_set_volume_delete_flag()
4622 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_set_volume_delete_flag()
4659 _scsih_check_ir_config_unhide_events(struct MPT3SAS_ADAPTER *ioc, in _scsih_check_ir_config_unhide_events() argument
4670 if (ioc->is_warpdrive) in _scsih_check_ir_config_unhide_events()
4684 _scsih_set_volume_delete_flag(ioc, volume_handle); in _scsih_check_ir_config_unhide_events()
4702 _scsih_tm_tr_volume_send(ioc, a); in _scsih_check_ir_config_unhide_events()
4704 _scsih_tm_tr_volume_send(ioc, b); in _scsih_check_ir_config_unhide_events()
4713 clear_bit(handle, ioc->pd_handles); in _scsih_check_ir_config_unhide_events()
4715 _scsih_tm_tr_send(ioc, handle); in _scsih_check_ir_config_unhide_events()
4721 list_add_tail(&delayed_tr->list, &ioc->delayed_tr_list); in _scsih_check_ir_config_unhide_events()
4722 dewtprintk(ioc, in _scsih_check_ir_config_unhide_events()
4723 ioc_info(ioc, "DELAYED:tr:handle(0x%04x), (open)\n", in _scsih_check_ir_config_unhide_events()
4726 _scsih_tm_tr_send(ioc, handle); in _scsih_check_ir_config_unhide_events()
4742 _scsih_check_volume_delete_events(struct MPT3SAS_ADAPTER *ioc, in _scsih_check_volume_delete_events() argument
4752 _scsih_set_volume_delete_flag(ioc, in _scsih_check_volume_delete_events()
4763 _scsih_temp_threshold_events(struct MPT3SAS_ADAPTER *ioc, in _scsih_temp_threshold_events() argument
4767 if (ioc->temp_sensors_count >= event_data->SensorNum) { in _scsih_temp_threshold_events()
4768 ioc_err(ioc, "Temperature Threshold flags %s%s%s%s exceeded for Sensor: %d !!!\n", in _scsih_temp_threshold_events()
4774 ioc_err(ioc, "Current Temp In Celsius: %d\n", in _scsih_temp_threshold_events()
4776 if (ioc->hba_mpi_version_belonged != MPI2_VERSION) { in _scsih_temp_threshold_events()
4777 doorbell = mpt3sas_base_get_iocstate(ioc, 0); in _scsih_temp_threshold_events()
4780 mpt3sas_print_fault_code(ioc, in _scsih_temp_threshold_events()
4784 mpt3sas_print_coredump_info(ioc, in _scsih_temp_threshold_events()
4813 _scsih_flush_running_cmds(struct MPT3SAS_ADAPTER *ioc) in _scsih_flush_running_cmds() argument
4820 for (smid = 1; smid <= ioc->scsiio_depth; smid++) { in _scsih_flush_running_cmds()
4821 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid); in _scsih_flush_running_cmds()
4827 mpt3sas_base_clear_st(ioc, st); in _scsih_flush_running_cmds()
4829 if (ioc->pci_error_recovery || ioc->remove_host) in _scsih_flush_running_cmds()
4835 dtmprintk(ioc, ioc_info(ioc, "completing %d cmds\n", count)); in _scsih_flush_running_cmds()
4847 _scsih_setup_eedp(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, in _scsih_setup_eedp() argument
4894 if (ioc->is_gen35_ioc) in _scsih_setup_eedp()
4943 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_qcmd() local
4955 if (ioc->logging_level & MPT_DEBUG_SCSI) in scsih_qcmd()
4965 if (!(_scsih_allow_scmd_to_device(ioc, scmd))) { in scsih_qcmd()
4982 if (ioc->shost_recovery || ioc->ioc_link_reset_in_progress) { in scsih_qcmd()
5024 if (((!ioc->is_warpdrive && !scsih_is_raid(&scmd->device->sdev_gendev)) in scsih_qcmd()
5029 smid = mpt3sas_base_get_smid_scsiio(ioc, ioc->scsi_io_cb_idx, scmd); in scsih_qcmd()
5031 ioc_err(ioc, "%s: failed obtaining a smid\n", __func__); in scsih_qcmd()
5035 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in scsih_qcmd()
5036 memset(mpi_request, 0, ioc->request_sz); in scsih_qcmd()
5037 _scsih_setup_eedp(ioc, scmd, mpi_request); in scsih_qcmd()
5054 mpt3sas_base_get_sense_buffer_dma(ioc, smid); in scsih_qcmd()
5062 if (ioc->build_sg_scmd(ioc, scmd, smid, pcie_device)) { in scsih_qcmd()
5063 mpt3sas_base_free_smid(ioc, smid); in scsih_qcmd()
5068 ioc->build_zero_len_sge(ioc, &mpi_request->SGL); in scsih_qcmd()
5072 mpt3sas_setup_direct_io(ioc, scmd, in scsih_qcmd()
5079 ioc->put_smid_fast_path(ioc, smid, handle); in scsih_qcmd()
5081 ioc->put_smid_scsi_io(ioc, smid, in scsih_qcmd()
5084 ioc->put_smid_default(ioc, smid); in scsih_qcmd()
5124 _scsih_scsi_ioc_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, in _scsih_scsi_ioc_info() argument
5135 char *desc_scsi_state = ioc->tmp_string; in _scsih_scsi_ioc_info()
5145 if (ioc->hide_ir_msg) in _scsih_scsi_ioc_info()
5269 ioc_warn(ioc, "\t%s wwid(0x%016llx)\n", in _scsih_scsi_ioc_info()
5272 pcie_device = mpt3sas_get_pdev_from_target(ioc, priv_target); in _scsih_scsi_ioc_info()
5274 ioc_info(ioc, "\twwid(0x%016llx), port(%d)\n", in _scsih_scsi_ioc_info()
5277 ioc_info(ioc, "\tenclosure logical id(0x%016llx), slot(%d)\n", in _scsih_scsi_ioc_info()
5281 ioc_info(ioc, "\tenclosure level(0x%04x), connector name( %s)\n", in _scsih_scsi_ioc_info()
5287 sas_device = mpt3sas_get_sdev_from_target(ioc, priv_target); in _scsih_scsi_ioc_info()
5289 ioc_warn(ioc, "\tsas_address(0x%016llx), phy(%d)\n", in _scsih_scsi_ioc_info()
5292 _scsih_display_enclosure_chassis_info(ioc, sas_device, in _scsih_scsi_ioc_info()
5299 ioc_warn(ioc, "\thandle(0x%04x), ioc_status(%s)(0x%04x), smid(%d)\n", in _scsih_scsi_ioc_info()
5302 ioc_warn(ioc, "\trequest_len(%d), underflow(%d), resid(%d)\n", in _scsih_scsi_ioc_info()
5304 ioc_warn(ioc, "\ttag(%d), transfer_count(%d), sc->result(0x%08x)\n", in _scsih_scsi_ioc_info()
5307 ioc_warn(ioc, "\tscsi_status(%s)(0x%02x), scsi_state(%s)(0x%02x)\n", in _scsih_scsi_ioc_info()
5313 ioc_warn(ioc, "\t[sense_key,asc,ascq]: [0x%02x,0x%02x,0x%02x], count(%d)\n", in _scsih_scsi_ioc_info()
5320 _scsih_response_code(ioc, response_bytes[0]); in _scsih_scsi_ioc_info()
5331 _scsih_turn_on_pfa_led(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_turn_on_pfa_led() argument
5337 sas_device = mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_turn_on_pfa_led()
5348 if ((mpt3sas_base_scsi_enclosure_processor(ioc, &mpi_reply, in _scsih_turn_on_pfa_led()
5350 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_turn_on_pfa_led()
5357 dewtprintk(ioc, in _scsih_turn_on_pfa_led()
5358 ioc_info(ioc, "enclosure_processor: ioc_status (0x%04x), loginfo(0x%08x)\n", in _scsih_turn_on_pfa_led()
5374 _scsih_turn_off_pfa_led(struct MPT3SAS_ADAPTER *ioc, in _scsih_turn_off_pfa_led() argument
5388 if ((mpt3sas_base_scsi_enclosure_processor(ioc, &mpi_reply, in _scsih_turn_off_pfa_led()
5390 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_turn_off_pfa_led()
5396 dewtprintk(ioc, in _scsih_turn_off_pfa_led()
5397 ioc_info(ioc, "enclosure_processor: ioc_status (0x%04x), loginfo(0x%08x)\n", in _scsih_turn_off_pfa_led()
5411 _scsih_send_event_to_turn_on_pfa_led(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_send_event_to_turn_on_pfa_led() argument
5420 fw_event->ioc = ioc; in _scsih_send_event_to_turn_on_pfa_led()
5421 _scsih_fw_event_add(ioc, fw_event); in _scsih_send_event_to_turn_on_pfa_led()
5432 _scsih_smart_predicted_fault(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_smart_predicted_fault() argument
5443 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_smart_predicted_fault()
5444 sas_device = __mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_smart_predicted_fault()
5457 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_smart_predicted_fault()
5459 if (ioc->pdev->subsystem_vendor == PCI_VENDOR_ID_IBM) in _scsih_smart_predicted_fault()
5460 _scsih_send_event_to_turn_on_pfa_led(ioc, handle); in _scsih_smart_predicted_fault()
5467 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_smart_predicted_fault()
5484 mpt3sas_ctl_add_to_event_log(ioc, event_reply); in _scsih_smart_predicted_fault()
5492 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_smart_predicted_fault()
5509 _scsih_io_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply) in _scsih_io_done() argument
5523 mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_io_done()
5525 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid); in _scsih_io_done()
5531 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_io_done()
5559 ioc->put_smid_scsi_io(ioc, smid, in _scsih_io_done()
5570 if ((!ioc->is_warpdrive && in _scsih_io_done()
5598 const void *sense_data = mpt3sas_base_get_sense_buffer(ioc, in _scsih_io_done()
5606 _scsih_smart_predicted_fault(ioc, in _scsih_io_done()
5608 mpt3sas_trigger_scsi(ioc, data.skey, data.asc, data.ascq); in _scsih_io_done()
5610 if ((ioc->logging_level & MPT_DEBUG_REPLY) && in _scsih_io_done()
5614 _scsih_scsi_ioc_info(ioc, scmd, mpi_reply, smid); in _scsih_io_done()
5728 if (scmd->result && (ioc->logging_level & MPT_DEBUG_REPLY)) in _scsih_io_done()
5729 _scsih_scsi_ioc_info(ioc , scmd, mpi_reply, smid); in _scsih_io_done()
5734 mpt3sas_base_free_smid(ioc, smid); in _scsih_io_done()
5749 _scsih_sas_host_refresh(struct MPT3SAS_ADAPTER *ioc) in _scsih_sas_host_refresh() argument
5759 dtmprintk(ioc, in _scsih_sas_host_refresh()
5760 ioc_info(ioc, "updating handles for sas_host(0x%016llx)\n", in _scsih_sas_host_refresh()
5761 (u64)ioc->sas_hba.sas_address)); in _scsih_sas_host_refresh()
5763 sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys in _scsih_sas_host_refresh()
5767 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_host_refresh()
5772 if ((mpt3sas_config_get_sas_iounit_pg0(ioc, &mpi_reply, in _scsih_sas_host_refresh()
5778 for (i = 0; i < ioc->sas_hba.num_phys ; i++) { in _scsih_sas_host_refresh()
5781 ioc->sas_hba.handle = le16_to_cpu(sas_iounit_pg0-> in _scsih_sas_host_refresh()
5783 ioc->sas_hba.phy[i].handle = ioc->sas_hba.handle; in _scsih_sas_host_refresh()
5788 mpt3sas_transport_update_links(ioc, ioc->sas_hba.sas_address, in _scsih_sas_host_refresh()
5802 _scsih_sas_host_add(struct MPT3SAS_ADAPTER *ioc) in _scsih_sas_host_add() argument
5816 mpt3sas_config_get_number_hba_phys(ioc, &num_phys); in _scsih_sas_host_add()
5818 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_host_add()
5822 ioc->sas_hba.phy = kcalloc(num_phys, in _scsih_sas_host_add()
5824 if (!ioc->sas_hba.phy) { in _scsih_sas_host_add()
5825 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_host_add()
5829 ioc->sas_hba.num_phys = num_phys; in _scsih_sas_host_add()
5832 sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys * in _scsih_sas_host_add()
5836 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_host_add()
5840 if ((mpt3sas_config_get_sas_iounit_pg0(ioc, &mpi_reply, in _scsih_sas_host_add()
5842 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_host_add()
5849 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_host_add()
5855 sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys * in _scsih_sas_host_add()
5859 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_host_add()
5863 if ((mpt3sas_config_get_sas_iounit_pg1(ioc, &mpi_reply, in _scsih_sas_host_add()
5865 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_host_add()
5872 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_host_add()
5877 ioc->io_missing_delay = in _scsih_sas_host_add()
5882 ioc->device_missing_delay = (device_missing_delay & in _scsih_sas_host_add()
5885 ioc->device_missing_delay = device_missing_delay & in _scsih_sas_host_add()
5888 ioc->sas_hba.parent_dev = &ioc->shost->shost_gendev; in _scsih_sas_host_add()
5889 for (i = 0; i < ioc->sas_hba.num_phys ; i++) { in _scsih_sas_host_add()
5890 if ((mpt3sas_config_get_phy_pg0(ioc, &mpi_reply, &phy_pg0, in _scsih_sas_host_add()
5892 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_host_add()
5899 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_host_add()
5905 ioc->sas_hba.handle = le16_to_cpu(sas_iounit_pg0-> in _scsih_sas_host_add()
5907 ioc->sas_hba.phy[i].handle = ioc->sas_hba.handle; in _scsih_sas_host_add()
5908 ioc->sas_hba.phy[i].phy_id = i; in _scsih_sas_host_add()
5909 mpt3sas_transport_add_host_phy(ioc, &ioc->sas_hba.phy[i], in _scsih_sas_host_add()
5910 phy_pg0, ioc->sas_hba.parent_dev); in _scsih_sas_host_add()
5912 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_sas_host_add()
5913 MPI2_SAS_DEVICE_PGAD_FORM_HANDLE, ioc->sas_hba.handle))) { in _scsih_sas_host_add()
5914 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_host_add()
5918 ioc->sas_hba.enclosure_handle = in _scsih_sas_host_add()
5920 ioc->sas_hba.sas_address = le64_to_cpu(sas_device_pg0.SASAddress); in _scsih_sas_host_add()
5921 ioc_info(ioc, "host_add: handle(0x%04x), sas_addr(0x%016llx), phys(%d)\n", in _scsih_sas_host_add()
5922 ioc->sas_hba.handle, in _scsih_sas_host_add()
5923 (u64)ioc->sas_hba.sas_address, in _scsih_sas_host_add()
5924 ioc->sas_hba.num_phys); in _scsih_sas_host_add()
5926 if (ioc->sas_hba.enclosure_handle) { in _scsih_sas_host_add()
5927 if (!(mpt3sas_config_get_enclosure_pg0(ioc, &mpi_reply, in _scsih_sas_host_add()
5929 ioc->sas_hba.enclosure_handle))) in _scsih_sas_host_add()
5930 ioc->sas_hba.enclosure_logical_id = in _scsih_sas_host_add()
5949 _scsih_expander_add(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_expander_add() argument
5968 if (ioc->shost_recovery || ioc->pci_error_recovery) in _scsih_expander_add()
5971 if ((mpt3sas_config_get_expander_pg0(ioc, &mpi_reply, &expander_pg0, in _scsih_expander_add()
5973 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_expander_add()
5981 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_expander_add()
5988 if (_scsih_get_sas_address(ioc, parent_handle, &sas_address_parent) in _scsih_expander_add()
5990 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_expander_add()
5994 if (sas_address_parent != ioc->sas_hba.sas_address) { in _scsih_expander_add()
5995 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_expander_add()
5996 sas_expander = mpt3sas_scsih_expander_find_by_sas_address(ioc, in _scsih_expander_add()
5998 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_expander_add()
6000 rc = _scsih_expander_add(ioc, parent_handle); in _scsih_expander_add()
6006 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_expander_add()
6008 sas_expander = mpt3sas_scsih_expander_find_by_sas_address(ioc, in _scsih_expander_add()
6010 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_expander_add()
6018 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_expander_add()
6028 ioc_info(ioc, "expander_add: handle(0x%04x), parent(0x%04x), sas_addr(0x%016llx), phys(%d)\n", in _scsih_expander_add()
6039 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_expander_add()
6046 mpt3sas_port = mpt3sas_transport_port_add(ioc, handle, in _scsih_expander_add()
6049 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_expander_add()
6057 if ((mpt3sas_config_get_expander_pg1(ioc, &mpi_reply, in _scsih_expander_add()
6059 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_expander_add()
6067 if ((mpt3sas_transport_add_expander_phy(ioc, in _scsih_expander_add()
6070 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_expander_add()
6079 mpt3sas_scsih_enclosure_find_by_handle(ioc, in _scsih_expander_add()
6086 _scsih_expander_node_add(ioc, sas_expander); in _scsih_expander_add()
6092 mpt3sas_transport_port_remove(ioc, sas_expander->sas_address, in _scsih_expander_add()
6104 mpt3sas_expander_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address) in mpt3sas_expander_remove() argument
6109 if (ioc->shost_recovery) in mpt3sas_expander_remove()
6112 spin_lock_irqsave(&ioc->sas_node_lock, flags); in mpt3sas_expander_remove()
6113 sas_expander = mpt3sas_scsih_expander_find_by_sas_address(ioc, in mpt3sas_expander_remove()
6115 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_expander_remove()
6117 _scsih_expander_node_remove(ioc, sas_expander); in mpt3sas_expander_remove()
6134 _scsih_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply) in _scsih_done() argument
6138 mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_done()
6139 if (ioc->scsih_cmds.status == MPT3_CMD_NOT_USED) in _scsih_done()
6141 if (ioc->scsih_cmds.smid != smid) in _scsih_done()
6143 ioc->scsih_cmds.status |= MPT3_CMD_COMPLETE; in _scsih_done()
6145 memcpy(ioc->scsih_cmds.reply, mpi_reply, in _scsih_done()
6147 ioc->scsih_cmds.status |= MPT3_CMD_REPLY_VALID; in _scsih_done()
6149 ioc->scsih_cmds.status &= ~MPT3_CMD_PENDING; in _scsih_done()
6150 complete(&ioc->scsih_cmds.done); in _scsih_done()
6170 _scsih_check_access_status(struct MPT3SAS_ADAPTER *ioc, u64 sas_address, in _scsih_check_access_status() argument
6218 ioc_err(ioc, "discovery errors(%s): sas_address(0x%016llx), handle(0x%04x)\n", in _scsih_check_access_status()
6232 _scsih_check_device(struct MPT3SAS_ADAPTER *ioc, in _scsih_check_device() argument
6246 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_check_device()
6265 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_check_device()
6267 sas_device = __mpt3sas_get_sdev_by_addr(ioc, in _scsih_check_device()
6296 enclosure_dev = mpt3sas_scsih_enclosure_find_by_handle(ioc, in _scsih_check_device()
6313 ioc_err(ioc, "device is not present handle(0x%04x), flags!!!\n", in _scsih_check_device()
6319 if (_scsih_check_access_status(ioc, sas_address, handle, in _scsih_check_device()
6323 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_check_device()
6324 _scsih_ublock_io_device(ioc, sas_address); in _scsih_check_device()
6331 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_check_device()
6348 _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num, in _scsih_add_device() argument
6359 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_add_device()
6361 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_add_device()
6369 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_add_device()
6378 set_bit(handle, ioc->pend_os_device_add); in _scsih_add_device()
6384 ioc_err(ioc, "device is not present handle(0x04%x)!!!\n", in _scsih_add_device()
6390 if (_scsih_check_access_status(ioc, sas_address, handle, in _scsih_add_device()
6394 sas_device = mpt3sas_get_sdev_by_addr(ioc, in _scsih_add_device()
6397 clear_bit(handle, ioc->pend_os_device_add); in _scsih_add_device()
6404 mpt3sas_scsih_enclosure_find_by_handle(ioc, in _scsih_add_device()
6407 ioc_info(ioc, "Enclosure handle(0x%04x) doesn't match with enclosure device!\n", in _scsih_add_device()
6414 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_add_device()
6421 if (_scsih_get_sas_address(ioc, in _scsih_add_device()
6424 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_add_device()
6464 if (ioc->wait_for_discovery_to_complete) in _scsih_add_device()
6465 _scsih_sas_device_init_add(ioc, sas_device); in _scsih_add_device()
6467 _scsih_sas_device_add(ioc, sas_device); in _scsih_add_device()
6479 _scsih_remove_device(struct MPT3SAS_ADAPTER *ioc, in _scsih_remove_device() argument
6484 if ((ioc->pdev->subsystem_vendor == PCI_VENDOR_ID_IBM) && in _scsih_remove_device()
6486 _scsih_turn_off_pfa_led(ioc, sas_device); in _scsih_remove_device()
6490 dewtprintk(ioc, in _scsih_remove_device()
6491 ioc_info(ioc, "%s: enter: handle(0x%04x), sas_addr(0x%016llx)\n", in _scsih_remove_device()
6495 dewtprintk(ioc, _scsih_display_enclosure_chassis_info(ioc, sas_device, in _scsih_remove_device()
6501 _scsih_ublock_io_device(ioc, sas_device->sas_address); in _scsih_remove_device()
6506 if (!ioc->hide_drives) in _scsih_remove_device()
6507 mpt3sas_transport_port_remove(ioc, in _scsih_remove_device()
6511 ioc_info(ioc, "removing handle(0x%04x), sas_addr(0x%016llx)\n", in _scsih_remove_device()
6514 _scsih_display_enclosure_chassis_info(ioc, sas_device, NULL, NULL); in _scsih_remove_device()
6516 dewtprintk(ioc, in _scsih_remove_device()
6517 ioc_info(ioc, "%s: exit: handle(0x%04x), sas_addr(0x%016llx)\n", in _scsih_remove_device()
6520 dewtprintk(ioc, _scsih_display_enclosure_chassis_info(ioc, sas_device, in _scsih_remove_device()
6531 _scsih_sas_topology_change_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_topology_change_event_debug() argument
6559 ioc_info(ioc, "sas topology change: (%s)\n", status_str); in _scsih_sas_topology_change_event_debug()
6609 _scsih_sas_topology_change_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_topology_change_event() argument
6624 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_topology_change_event()
6625 _scsih_sas_topology_change_event_debug(ioc, event_data); in _scsih_sas_topology_change_event()
6627 if (ioc->shost_recovery || ioc->remove_host || ioc->pci_error_recovery) in _scsih_sas_topology_change_event()
6630 if (!ioc->sas_hba.num_phys) in _scsih_sas_topology_change_event()
6631 _scsih_sas_host_add(ioc); in _scsih_sas_topology_change_event()
6633 _scsih_sas_host_refresh(ioc); in _scsih_sas_topology_change_event()
6636 dewtprintk(ioc, ioc_info(ioc, "ignoring expander event\n")); in _scsih_sas_topology_change_event()
6644 if (_scsih_expander_add(ioc, parent_handle) != 0) in _scsih_sas_topology_change_event()
6647 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_sas_topology_change_event()
6648 sas_expander = mpt3sas_scsih_expander_find_by_handle(ioc, in _scsih_sas_topology_change_event()
6653 } else if (parent_handle < ioc->sas_hba.num_phys) { in _scsih_sas_topology_change_event()
6654 sas_address = ioc->sas_hba.sas_address; in _scsih_sas_topology_change_event()
6655 max_phys = ioc->sas_hba.num_phys; in _scsih_sas_topology_change_event()
6657 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_sas_topology_change_event()
6660 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_sas_topology_change_event()
6665 dewtprintk(ioc, in _scsih_sas_topology_change_event()
6666 ioc_info(ioc, "ignoring expander event\n")); in _scsih_sas_topology_change_event()
6669 if (ioc->remove_host || ioc->pci_error_recovery) in _scsih_sas_topology_change_event()
6688 if (ioc->shost_recovery) in _scsih_sas_topology_change_event()
6694 mpt3sas_transport_update_links(ioc, sas_address, in _scsih_sas_topology_change_event()
6700 _scsih_check_device(ioc, sas_address, handle, in _scsih_sas_topology_change_event()
6703 if (!test_bit(handle, ioc->pend_os_device_add)) in _scsih_sas_topology_change_event()
6710 if (ioc->shost_recovery) in _scsih_sas_topology_change_event()
6713 mpt3sas_transport_update_links(ioc, sas_address, in _scsih_sas_topology_change_event()
6716 _scsih_add_device(ioc, handle, phy_number, 0); in _scsih_sas_topology_change_event()
6721 _scsih_device_remove_by_handle(ioc, handle); in _scsih_sas_topology_change_event()
6729 mpt3sas_expander_remove(ioc, sas_address); in _scsih_sas_topology_change_event()
6741 _scsih_sas_device_status_change_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_status_change_event_debug() argument
6790 ioc_info(ioc, "device status change: (%s)\thandle(0x%04x), sas address(0x%016llx), tag(%d)", in _scsih_sas_device_status_change_event_debug()
6807 _scsih_sas_device_status_change_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_status_change_event() argument
6818 if ((ioc->facts.HeaderVersion >> 8) < 0xC) in _scsih_sas_device_status_change_event()
6827 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_status_change_event()
6829 sas_device = __mpt3sas_get_sdev_by_addr(ioc, in _scsih_sas_device_status_change_event()
6845 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_device_status_change_event()
6846 ioc_info(ioc, in _scsih_sas_device_status_change_event()
6855 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_status_change_event()
6869 _scsih_check_pcie_access_status(struct MPT3SAS_ADAPTER *ioc, u64 wwid, in _scsih_check_pcie_access_status() argument
6885 ioc_info(ioc, in _scsih_check_pcie_access_status()
6934 ioc_err(ioc, "NVMe discovery error(0x%02x): wwid(0x%016llx), handle(0x%04x)\n", in _scsih_check_pcie_access_status()
6942 ioc_info(ioc, "NVMe discovery error(%s): wwid(0x%016llx), handle(0x%04x)\n", in _scsih_check_pcie_access_status()
6954 _scsih_pcie_device_remove_from_sml(struct MPT3SAS_ADAPTER *ioc, in _scsih_pcie_device_remove_from_sml() argument
6959 dewtprintk(ioc, in _scsih_pcie_device_remove_from_sml()
6960 ioc_info(ioc, "%s: enter: handle(0x%04x), wwid(0x%016llx)\n", in _scsih_pcie_device_remove_from_sml()
6964 dewtprintk(ioc, in _scsih_pcie_device_remove_from_sml()
6965 ioc_info(ioc, "%s: enter: enclosure logical id(0x%016llx), slot(%d)\n", in _scsih_pcie_device_remove_from_sml()
6970 dewtprintk(ioc, in _scsih_pcie_device_remove_from_sml()
6971 ioc_info(ioc, "%s: enter: enclosure level(0x%04x), connector name(%s)\n", in _scsih_pcie_device_remove_from_sml()
6979 _scsih_ublock_io_device(ioc, pcie_device->wwid); in _scsih_pcie_device_remove_from_sml()
6983 ioc_info(ioc, "removing handle(0x%04x), wwid(0x%016llx)\n", in _scsih_pcie_device_remove_from_sml()
6986 ioc_info(ioc, "removing : enclosure logical id(0x%016llx), slot(%d)\n", in _scsih_pcie_device_remove_from_sml()
6990 ioc_info(ioc, "removing: enclosure level(0x%04x), connector name( %s)\n", in _scsih_pcie_device_remove_from_sml()
6997 dewtprintk(ioc, in _scsih_pcie_device_remove_from_sml()
6998 ioc_info(ioc, "%s: exit: handle(0x%04x), wwid(0x%016llx)\n", in _scsih_pcie_device_remove_from_sml()
7002 dewtprintk(ioc, in _scsih_pcie_device_remove_from_sml()
7003 ioc_info(ioc, "%s: exit: enclosure logical id(0x%016llx), slot(%d)\n", in _scsih_pcie_device_remove_from_sml()
7008 dewtprintk(ioc, in _scsih_pcie_device_remove_from_sml()
7009 ioc_info(ioc, "%s: exit: enclosure level(0x%04x), connector name( %s)\n", in _scsih_pcie_device_remove_from_sml()
7024 _scsih_pcie_check_device(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_pcie_check_device() argument
7036 if ((mpt3sas_config_get_pcie_device_pg0(ioc, &mpi_reply, in _scsih_pcie_check_device()
7050 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in _scsih_pcie_check_device()
7051 pcie_device = __mpt3sas_get_pdev_by_wwid(ioc, wwid); in _scsih_pcie_check_device()
7054 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_pcie_check_device()
7083 ioc_info(ioc, "device is not present handle(0x%04x), flags!!!\n", in _scsih_pcie_check_device()
7085 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_pcie_check_device()
7091 if (_scsih_check_pcie_access_status(ioc, wwid, handle, in _scsih_pcie_check_device()
7093 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_pcie_check_device()
7098 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_pcie_check_device()
7101 _scsih_ublock_io_device(ioc, wwid); in _scsih_pcie_check_device()
7116 _scsih_pcie_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_pcie_add_device() argument
7126 if ((mpt3sas_config_get_pcie_device_pg0(ioc, &mpi_reply, in _scsih_pcie_add_device()
7128 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_pcie_add_device()
7135 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_pcie_add_device()
7140 set_bit(handle, ioc->pend_os_device_add); in _scsih_pcie_add_device()
7146 ioc_err(ioc, "device is not present handle(0x04%x)!!!\n", in _scsih_pcie_add_device()
7152 if (_scsih_check_pcie_access_status(ioc, wwid, handle, in _scsih_pcie_add_device()
7160 pcie_device = mpt3sas_get_pdev_by_wwid(ioc, wwid); in _scsih_pcie_add_device()
7162 clear_bit(handle, ioc->pend_os_device_add); in _scsih_pcie_add_device()
7173 if (mpt3sas_config_get_pcie_device_pg2(ioc, &mpi_reply, in _scsih_pcie_add_device()
7176 ioc_err(ioc, in _scsih_pcie_add_device()
7185 ioc_err(ioc, in _scsih_pcie_add_device()
7194 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_pcie_add_device()
7200 pcie_device->id = ioc->pcie_target_id++; in _scsih_pcie_add_device()
7228 mpt3sas_scsih_enclosure_find_by_handle(ioc, in _scsih_pcie_add_device()
7246 if (pcie_device->shutdown_latency > ioc->max_shutdown_latency) in _scsih_pcie_add_device()
7247 ioc->max_shutdown_latency = in _scsih_pcie_add_device()
7257 if (ioc->wait_for_discovery_to_complete) in _scsih_pcie_add_device()
7258 _scsih_pcie_device_init_add(ioc, pcie_device); in _scsih_pcie_add_device()
7260 _scsih_pcie_device_add(ioc, pcie_device); in _scsih_pcie_add_device()
7274 _scsih_pcie_topology_change_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_pcie_topology_change_event_debug() argument
7302 ioc_info(ioc, "pcie topology change: (%s)\n", status_str); in _scsih_pcie_topology_change_event_debug()
7354 _scsih_pcie_topology_change_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_pcie_topology_change_event() argument
7367 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_pcie_topology_change_event()
7368 _scsih_pcie_topology_change_event_debug(ioc, event_data); in _scsih_pcie_topology_change_event()
7370 if (ioc->shost_recovery || ioc->remove_host || in _scsih_pcie_topology_change_event()
7371 ioc->pci_error_recovery) in _scsih_pcie_topology_change_event()
7375 dewtprintk(ioc, ioc_info(ioc, "ignoring switch event\n")); in _scsih_pcie_topology_change_event()
7382 dewtprintk(ioc, in _scsih_pcie_topology_change_event()
7383 ioc_info(ioc, "ignoring switch event\n")); in _scsih_pcie_topology_change_event()
7386 if (ioc->remove_host || ioc->pci_error_recovery) in _scsih_pcie_topology_change_event()
7401 if (ioc->shost_recovery) in _scsih_pcie_topology_change_event()
7408 _scsih_pcie_check_device(ioc, handle); in _scsih_pcie_topology_change_event()
7416 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in _scsih_pcie_topology_change_event()
7417 pcie_device = __mpt3sas_get_pdev_by_handle(ioc, handle); in _scsih_pcie_topology_change_event()
7418 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_pcie_topology_change_event()
7425 if (!test_bit(handle, ioc->pend_os_device_add)) in _scsih_pcie_topology_change_event()
7428 dewtprintk(ioc, in _scsih_pcie_topology_change_event()
7429 ioc_info(ioc, "handle(0x%04x) device not found: convert event to a device add\n", in _scsih_pcie_topology_change_event()
7436 if (ioc->shost_recovery) in _scsih_pcie_topology_change_event()
7441 rc = _scsih_pcie_add_device(ioc, handle); in _scsih_pcie_topology_change_event()
7453 _scsih_pcie_device_remove_by_handle(ioc, handle); in _scsih_pcie_topology_change_event()
7466 _scsih_pcie_device_status_change_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_pcie_device_status_change_event_debug() argument
7513 ioc_info(ioc, "PCIE device status change: (%s)\n" in _scsih_pcie_device_status_change_event_debug()
7532 _scsih_pcie_device_status_change_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_pcie_device_status_change_event() argument
7541 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_pcie_device_status_change_event()
7542 _scsih_pcie_device_status_change_event_debug(ioc, in _scsih_pcie_device_status_change_event()
7551 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in _scsih_pcie_device_status_change_event()
7553 pcie_device = __mpt3sas_get_pdev_by_wwid(ioc, wwid); in _scsih_pcie_device_status_change_event()
7571 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_pcie_device_status_change_event()
7582 _scsih_sas_enclosure_dev_status_change_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_enclosure_dev_status_change_event_debug() argument
7599 ioc_info(ioc, "enclosure status change: (%s)\n" in _scsih_sas_enclosure_dev_status_change_event_debug()
7614 _scsih_sas_enclosure_dev_status_change_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_enclosure_dev_status_change_event() argument
7624 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_enclosure_dev_status_change_event()
7625 _scsih_sas_enclosure_dev_status_change_event_debug(ioc, in _scsih_sas_enclosure_dev_status_change_event()
7628 if (ioc->shost_recovery) in _scsih_sas_enclosure_dev_status_change_event()
7633 mpt3sas_scsih_enclosure_find_by_handle(ioc, in _scsih_sas_enclosure_dev_status_change_event()
7642 ioc_info(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_enclosure_dev_status_change_event()
7646 rc = mpt3sas_config_get_enclosure_pg0(ioc, &mpi_reply, in _scsih_sas_enclosure_dev_status_change_event()
7658 &ioc->enclosure_list); in _scsih_sas_enclosure_dev_status_change_event()
7679 _scsih_sas_broadcast_primitive_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_broadcast_primitive_event() argument
7700 mutex_lock(&ioc->tm_cmds.mutex); in _scsih_sas_broadcast_primitive_event()
7701 ioc_info(ioc, "%s: enter: phy number(%d), width(%d)\n", in _scsih_sas_broadcast_primitive_event()
7704 _scsih_block_io_all_device(ioc); in _scsih_sas_broadcast_primitive_event()
7706 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
7707 mpi_reply = ioc->tm_cmds.reply; in _scsih_sas_broadcast_primitive_event()
7712 dewtprintk(ioc, ioc_info(ioc, "%s: giving up\n", __func__)); in _scsih_sas_broadcast_primitive_event()
7715 dewtprintk(ioc, in _scsih_sas_broadcast_primitive_event()
7716 ioc_info(ioc, "%s: %d retry\n", in _scsih_sas_broadcast_primitive_event()
7721 for (smid = 1; smid <= ioc->scsiio_depth; smid++) { in _scsih_sas_broadcast_primitive_event()
7722 if (ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
7724 scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid); in _scsih_sas_broadcast_primitive_event()
7749 if (ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
7752 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
7753 r = mpt3sas_scsih_issue_tm(ioc, handle, 0, 0, lun, in _scsih_sas_broadcast_primitive_event()
7760 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
7769 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
7778 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
7784 dewtprintk(ioc, in _scsih_sas_broadcast_primitive_event()
7785 ioc_info(ioc, "%s: ABORT_TASK: giving up\n", in _scsih_sas_broadcast_primitive_event()
7787 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
7791 if (ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
7794 r = mpt3sas_scsih_issue_tm(ioc, handle, sdev->channel, sdev->id, in _scsih_sas_broadcast_primitive_event()
7811 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
7814 if (ioc->broadcast_aen_pending) { in _scsih_sas_broadcast_primitive_event()
7815 dewtprintk(ioc, in _scsih_sas_broadcast_primitive_event()
7816 ioc_info(ioc, in _scsih_sas_broadcast_primitive_event()
7819 ioc->broadcast_aen_pending = 0; in _scsih_sas_broadcast_primitive_event()
7824 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
7827 dewtprintk(ioc, in _scsih_sas_broadcast_primitive_event()
7828 ioc_info(ioc, "%s - exit, query_count = %d termination_count = %d\n", in _scsih_sas_broadcast_primitive_event()
7831 ioc->broadcast_aen_busy = 0; in _scsih_sas_broadcast_primitive_event()
7832 if (!ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
7833 _scsih_ublock_io_all_device(ioc); in _scsih_sas_broadcast_primitive_event()
7834 mutex_unlock(&ioc->tm_cmds.mutex); in _scsih_sas_broadcast_primitive_event()
7844 _scsih_sas_discovery_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_discovery_event() argument
7850 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) { in _scsih_sas_discovery_event()
7851 ioc_info(ioc, "discovery event: (%s)", in _scsih_sas_discovery_event()
7861 !ioc->sas_hba.num_phys) { in _scsih_sas_discovery_event()
7862 if (disable_discovery > 0 && ioc->shost_recovery) { in _scsih_sas_discovery_event()
7864 while (ioc->shost_recovery) in _scsih_sas_discovery_event()
7867 _scsih_sas_host_add(ioc); in _scsih_sas_discovery_event()
7879 _scsih_sas_device_discovery_error_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_discovery_error_event() argument
7887 …ioc_warn(ioc, "SMP command sent to the expander (handle:0x%04x, sas_address:0x%016llx, physical_po… in _scsih_sas_device_discovery_error_event()
7893 …ioc_warn(ioc, "SMP command sent to the expander (handle:0x%04x, sas_address:0x%016llx, physical_po… in _scsih_sas_device_discovery_error_event()
7910 _scsih_pcie_enumeration_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_pcie_enumeration_event() argument
7916 if (!(ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK)) in _scsih_pcie_enumeration_event()
7919 ioc_info(ioc, "pcie enumeration event: (%s) Flag 0x%02x", in _scsih_pcie_enumeration_event()
7938 _scsih_ir_fastpath(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phys_disk_num) in _scsih_ir_fastpath() argument
7948 if (ioc->hba_mpi_version_belonged == MPI2_VERSION) in _scsih_ir_fastpath()
7951 mutex_lock(&ioc->scsih_cmds.mutex); in _scsih_ir_fastpath()
7953 if (ioc->scsih_cmds.status != MPT3_CMD_NOT_USED) { in _scsih_ir_fastpath()
7954 ioc_err(ioc, "%s: scsih_cmd in use\n", __func__); in _scsih_ir_fastpath()
7958 ioc->scsih_cmds.status = MPT3_CMD_PENDING; in _scsih_ir_fastpath()
7960 smid = mpt3sas_base_get_smid(ioc, ioc->scsih_cb_idx); in _scsih_ir_fastpath()
7962 ioc_err(ioc, "%s: failed obtaining a smid\n", __func__); in _scsih_ir_fastpath()
7963 ioc->scsih_cmds.status = MPT3_CMD_NOT_USED; in _scsih_ir_fastpath()
7968 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_ir_fastpath()
7969 ioc->scsih_cmds.smid = smid; in _scsih_ir_fastpath()
7976 dewtprintk(ioc, in _scsih_ir_fastpath()
7977 … ioc_info(ioc, "IR RAID_ACTION: turning fast path on for handle(0x%04x), phys_disk_num (0x%02x)\n", in _scsih_ir_fastpath()
7980 init_completion(&ioc->scsih_cmds.done); in _scsih_ir_fastpath()
7981 ioc->put_smid_default(ioc, smid); in _scsih_ir_fastpath()
7982 wait_for_completion_timeout(&ioc->scsih_cmds.done, 10*HZ); in _scsih_ir_fastpath()
7984 if (!(ioc->scsih_cmds.status & MPT3_CMD_COMPLETE)) { in _scsih_ir_fastpath()
7985 mpt3sas_check_cmd_timeout(ioc, in _scsih_ir_fastpath()
7986 ioc->scsih_cmds.status, mpi_request, in _scsih_ir_fastpath()
7992 if (ioc->scsih_cmds.status & MPT3_CMD_REPLY_VALID) { in _scsih_ir_fastpath()
7994 mpi_reply = ioc->scsih_cmds.reply; in _scsih_ir_fastpath()
8002 dewtprintk(ioc, in _scsih_ir_fastpath()
8003 ioc_info(ioc, "IR RAID_ACTION: failed: ioc_status(0x%04x), loginfo(0x%08x)!!!\n", in _scsih_ir_fastpath()
8007 dewtprintk(ioc, in _scsih_ir_fastpath()
8008 ioc_info(ioc, "IR RAID_ACTION: completed successfully\n")); in _scsih_ir_fastpath()
8012 ioc->scsih_cmds.status = MPT3_CMD_NOT_USED; in _scsih_ir_fastpath()
8013 mutex_unlock(&ioc->scsih_cmds.mutex); in _scsih_ir_fastpath()
8016 mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); in _scsih_ir_fastpath()
8042 _scsih_sas_volume_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_volume_add() argument
8051 mpt3sas_config_get_volume_wwid(ioc, handle, &wwid); in _scsih_sas_volume_add()
8053 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_volume_add()
8058 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
8059 raid_device = _scsih_raid_device_find_by_wwid(ioc, wwid); in _scsih_sas_volume_add()
8060 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
8067 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_volume_add()
8072 raid_device->id = ioc->sas_id++; in _scsih_sas_volume_add()
8076 _scsih_raid_device_add(ioc, raid_device); in _scsih_sas_volume_add()
8077 if (!ioc->wait_for_discovery_to_complete) { in _scsih_sas_volume_add()
8078 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_sas_volume_add()
8081 _scsih_raid_device_remove(ioc, raid_device); in _scsih_sas_volume_add()
8083 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
8084 _scsih_determine_boot_device(ioc, raid_device, 1); in _scsih_sas_volume_add()
8085 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
8096 _scsih_sas_volume_delete(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_sas_volume_delete() argument
8103 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_volume_delete()
8104 raid_device = mpt3sas_raid_device_find_by_handle(ioc, handle); in _scsih_sas_volume_delete()
8111 ioc_info(ioc, "removing handle(0x%04x), wwid(0x%016llx)\n", in _scsih_sas_volume_delete()
8116 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_volume_delete()
8128 _scsih_sas_pd_expose(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_pd_expose() argument
8137 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_pd_expose()
8138 sas_device = __mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_sas_pd_expose()
8142 clear_bit(handle, ioc->pd_handles); in _scsih_sas_pd_expose()
8150 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_pd_expose()
8168 _scsih_sas_pd_hide(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_pd_hide() argument
8179 mpt3sas_config_get_volume_handle(ioc, handle, &volume_handle); in _scsih_sas_pd_hide()
8181 mpt3sas_config_get_volume_wwid(ioc, volume_handle, in _scsih_sas_pd_hide()
8184 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_pd_hide()
8185 sas_device = __mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_sas_pd_hide()
8187 set_bit(handle, ioc->pd_handles); in _scsih_sas_pd_hide()
8197 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_pd_hide()
8202 _scsih_ir_fastpath(ioc, handle, element->PhysDiskNum); in _scsih_sas_pd_hide()
8217 _scsih_sas_pd_delete(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_pd_delete() argument
8222 _scsih_device_remove_by_handle(ioc, handle); in _scsih_sas_pd_delete()
8232 _scsih_sas_pd_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_pd_add() argument
8243 set_bit(handle, ioc->pd_handles); in _scsih_sas_pd_add()
8245 sas_device = mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_sas_pd_add()
8247 _scsih_ir_fastpath(ioc, handle, element->PhysDiskNum); in _scsih_sas_pd_add()
8252 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_sas_pd_add()
8254 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_pd_add()
8262 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_pd_add()
8268 if (!_scsih_get_sas_address(ioc, parent_handle, &sas_address)) in _scsih_sas_pd_add()
8269 mpt3sas_transport_update_links(ioc, sas_address, handle, in _scsih_sas_pd_add()
8272 _scsih_ir_fastpath(ioc, handle, element->PhysDiskNum); in _scsih_sas_pd_add()
8273 _scsih_add_device(ioc, handle, 0, 1); in _scsih_sas_pd_add()
8283 _scsih_sas_ir_config_change_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_config_change_event_debug() argument
8293 ioc_info(ioc, "raid config change: (%s), elements(%d)\n", in _scsih_sas_ir_config_change_event_debug()
8361 _scsih_sas_ir_config_change_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_config_change_event() argument
8371 if ((ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) && in _scsih_sas_ir_config_change_event()
8372 (!ioc->hide_ir_msg)) in _scsih_sas_ir_config_change_event()
8373 _scsih_sas_ir_config_change_event_debug(ioc, event_data); in _scsih_sas_ir_config_change_event()
8379 if (ioc->shost_recovery && in _scsih_sas_ir_config_change_event()
8380 ioc->hba_mpi_version_belonged != MPI2_VERSION) { in _scsih_sas_ir_config_change_event()
8383 _scsih_ir_fastpath(ioc, in _scsih_sas_ir_config_change_event()
8396 _scsih_sas_volume_add(ioc, element); in _scsih_sas_ir_config_change_event()
8401 _scsih_sas_volume_delete(ioc, in _scsih_sas_ir_config_change_event()
8405 if (!ioc->is_warpdrive) in _scsih_sas_ir_config_change_event()
8406 _scsih_sas_pd_hide(ioc, element); in _scsih_sas_ir_config_change_event()
8409 if (!ioc->is_warpdrive) in _scsih_sas_ir_config_change_event()
8410 _scsih_sas_pd_expose(ioc, element); in _scsih_sas_ir_config_change_event()
8413 if (!ioc->is_warpdrive) in _scsih_sas_ir_config_change_event()
8414 _scsih_sas_pd_add(ioc, element); in _scsih_sas_ir_config_change_event()
8417 if (!ioc->is_warpdrive) in _scsih_sas_ir_config_change_event()
8418 _scsih_sas_pd_delete(ioc, element); in _scsih_sas_ir_config_change_event()
8431 _scsih_sas_ir_volume_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_volume_event() argument
8443 if (ioc->shost_recovery) in _scsih_sas_ir_volume_event()
8451 if (!ioc->hide_ir_msg) in _scsih_sas_ir_volume_event()
8452 dewtprintk(ioc, in _scsih_sas_ir_volume_event()
8453 ioc_info(ioc, "%s: handle(0x%04x), old(0x%08x), new(0x%08x)\n", in _scsih_sas_ir_volume_event()
8460 _scsih_sas_volume_delete(ioc, handle); in _scsih_sas_ir_volume_event()
8467 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_ir_volume_event()
8468 raid_device = mpt3sas_raid_device_find_by_handle(ioc, handle); in _scsih_sas_ir_volume_event()
8469 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_ir_volume_event()
8474 mpt3sas_config_get_volume_wwid(ioc, handle, &wwid); in _scsih_sas_ir_volume_event()
8476 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_ir_volume_event()
8483 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_ir_volume_event()
8488 raid_device->id = ioc->sas_id++; in _scsih_sas_ir_volume_event()
8492 _scsih_raid_device_add(ioc, raid_device); in _scsih_sas_ir_volume_event()
8493 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_sas_ir_volume_event()
8496 _scsih_raid_device_remove(ioc, raid_device); in _scsih_sas_ir_volume_event()
8512 _scsih_sas_ir_physical_disk_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_physical_disk_event() argument
8525 if (ioc->shost_recovery) in _scsih_sas_ir_physical_disk_event()
8534 if (!ioc->hide_ir_msg) in _scsih_sas_ir_physical_disk_event()
8535 dewtprintk(ioc, in _scsih_sas_ir_physical_disk_event()
8536 ioc_info(ioc, "%s: handle(0x%04x), old(0x%08x), new(0x%08x)\n", in _scsih_sas_ir_physical_disk_event()
8548 if (!ioc->is_warpdrive) in _scsih_sas_ir_physical_disk_event()
8549 set_bit(handle, ioc->pd_handles); in _scsih_sas_ir_physical_disk_event()
8551 sas_device = mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_sas_ir_physical_disk_event()
8557 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_sas_ir_physical_disk_event()
8560 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_ir_physical_disk_event()
8568 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_sas_ir_physical_disk_event()
8574 if (!_scsih_get_sas_address(ioc, parent_handle, &sas_address)) in _scsih_sas_ir_physical_disk_event()
8575 mpt3sas_transport_update_links(ioc, sas_address, handle, in _scsih_sas_ir_physical_disk_event()
8578 _scsih_add_device(ioc, handle, 0, 1); in _scsih_sas_ir_physical_disk_event()
8597 _scsih_sas_ir_operation_status_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_operation_status_event_debug() argument
8623 ioc_info(ioc, "raid operational status: (%s)\thandle(0x%04x), percent complete(%d)\n", in _scsih_sas_ir_operation_status_event_debug()
8636 _scsih_sas_ir_operation_status_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_operation_status_event() argument
8646 if ((ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) && in _scsih_sas_ir_operation_status_event()
8647 (!ioc->hide_ir_msg)) in _scsih_sas_ir_operation_status_event()
8648 _scsih_sas_ir_operation_status_event_debug(ioc, in _scsih_sas_ir_operation_status_event()
8654 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_ir_operation_status_event()
8656 raid_device = mpt3sas_raid_device_find_by_handle(ioc, handle); in _scsih_sas_ir_operation_status_event()
8660 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_ir_operation_status_event()
8672 _scsih_prep_device_scan(struct MPT3SAS_ADAPTER *ioc) in _scsih_prep_device_scan() argument
8677 shost_for_each_device(sdev, ioc->shost) { in _scsih_prep_device_scan()
8693 _scsih_mark_responding_sas_device(struct MPT3SAS_ADAPTER *ioc, in _scsih_mark_responding_sas_device() argument
8704 mpt3sas_scsih_enclosure_find_by_handle(ioc, in _scsih_mark_responding_sas_device()
8707 ioc_info(ioc, "Enclosure handle(0x%04x) doesn't match with enclosure device!\n", in _scsih_mark_responding_sas_device()
8710 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_mark_responding_sas_device()
8711 list_for_each_entry(sas_device, &ioc->sas_device_list, list) { in _scsih_mark_responding_sas_device()
8777 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_mark_responding_sas_device()
8786 _scsih_create_enclosure_list_after_reset(struct MPT3SAS_ADAPTER *ioc) in _scsih_create_enclosure_list_after_reset() argument
8794 mpt3sas_free_enclosure_list(ioc); in _scsih_create_enclosure_list_after_reset()
8802 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_create_enclosure_list_after_reset()
8806 rc = mpt3sas_config_get_enclosure_pg0(ioc, &mpi_reply, in _scsih_create_enclosure_list_after_reset()
8817 &ioc->enclosure_list); in _scsih_create_enclosure_list_after_reset()
8831 _scsih_search_responding_sas_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_search_responding_sas_devices() argument
8839 ioc_info(ioc, "search for end-devices: start\n"); in _scsih_search_responding_sas_devices()
8841 if (list_empty(&ioc->sas_device_list)) in _scsih_search_responding_sas_devices()
8845 while (!(mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_search_responding_sas_devices()
8856 _scsih_mark_responding_sas_device(ioc, &sas_device_pg0); in _scsih_search_responding_sas_devices()
8860 ioc_info(ioc, "search for end-devices: complete\n"); in _scsih_search_responding_sas_devices()
8872 _scsih_mark_responding_pcie_device(struct MPT3SAS_ADAPTER *ioc, in _scsih_mark_responding_pcie_device() argument
8880 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in _scsih_mark_responding_pcie_device()
8881 list_for_each_entry(pcie_device, &ioc->pcie_device_list, list) { in _scsih_mark_responding_pcie_device()
8911 (ioc->hba_mpi_version_belonged != MPI2_VERSION)) { in _scsih_mark_responding_pcie_device()
8936 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_mark_responding_pcie_device()
8947 _scsih_search_responding_pcie_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_search_responding_pcie_devices() argument
8955 ioc_info(ioc, "search for end-devices: start\n"); in _scsih_search_responding_pcie_devices()
8957 if (list_empty(&ioc->pcie_device_list)) in _scsih_search_responding_pcie_devices()
8961 while (!(mpt3sas_config_get_pcie_device_pg0(ioc, &mpi_reply, in _scsih_search_responding_pcie_devices()
8967 ioc_info(ioc, "\tbreak from %s: ioc_status(0x%04x), loginfo(0x%08x)\n", in _scsih_search_responding_pcie_devices()
8976 _scsih_mark_responding_pcie_device(ioc, &pcie_device_pg0); in _scsih_search_responding_pcie_devices()
8979 ioc_info(ioc, "search for PCIe end-devices: complete\n"); in _scsih_search_responding_pcie_devices()
8992 _scsih_mark_responding_raid_device(struct MPT3SAS_ADAPTER *ioc, u64 wwid, in _scsih_mark_responding_raid_device() argument
9000 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
9001 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in _scsih_mark_responding_raid_device()
9010 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
9020 mpt3sas_init_warpdrive_properties(ioc, raid_device); in _scsih_mark_responding_raid_device()
9021 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
9023 spin_unlock_irqrestore(&ioc->raid_device_lock, in _scsih_mark_responding_raid_device()
9032 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
9036 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
9047 _scsih_search_responding_raid_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_search_responding_raid_devices() argument
9057 if (!ioc->ir_firmware) in _scsih_search_responding_raid_devices()
9060 ioc_info(ioc, "search for raid volumes: start\n"); in _scsih_search_responding_raid_devices()
9062 if (list_empty(&ioc->raid_device_list)) in _scsih_search_responding_raid_devices()
9066 while (!(mpt3sas_config_get_raid_volume_pg1(ioc, &mpi_reply, in _scsih_search_responding_raid_devices()
9074 if (mpt3sas_config_get_raid_volume_pg0(ioc, &mpi_reply, in _scsih_search_responding_raid_devices()
9082 _scsih_mark_responding_raid_device(ioc, in _scsih_search_responding_raid_devices()
9087 if (!ioc->is_warpdrive) { in _scsih_search_responding_raid_devices()
9089 memset(ioc->pd_handles, 0, ioc->pd_handles_sz); in _scsih_search_responding_raid_devices()
9090 while (!(mpt3sas_config_get_phys_disk_pg0(ioc, &mpi_reply, in _scsih_search_responding_raid_devices()
9099 set_bit(handle, ioc->pd_handles); in _scsih_search_responding_raid_devices()
9103 ioc_info(ioc, "search for responding raid volumes: complete\n"); in _scsih_search_responding_raid_devices()
9115 _scsih_mark_responding_expander(struct MPT3SAS_ADAPTER *ioc, in _scsih_mark_responding_expander() argument
9128 mpt3sas_scsih_enclosure_find_by_handle(ioc, in _scsih_mark_responding_expander()
9131 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_mark_responding_expander()
9132 list_for_each_entry(sas_expander, &ioc->sas_expander_list, list) { in _scsih_mark_responding_expander()
9156 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_mark_responding_expander()
9167 _scsih_search_responding_expanders(struct MPT3SAS_ADAPTER *ioc) in _scsih_search_responding_expanders() argument
9175 ioc_info(ioc, "search for expanders: start\n"); in _scsih_search_responding_expanders()
9177 if (list_empty(&ioc->sas_expander_list)) in _scsih_search_responding_expanders()
9181 while (!(mpt3sas_config_get_expander_pg0(ioc, &mpi_reply, &expander_pg0, in _scsih_search_responding_expanders()
9194 _scsih_mark_responding_expander(ioc, &expander_pg0); in _scsih_search_responding_expanders()
9198 ioc_info(ioc, "search for expanders: complete\n"); in _scsih_search_responding_expanders()
9206 _scsih_remove_unresponding_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_remove_unresponding_devices() argument
9216 ioc_info(ioc, "removing unresponding devices: start\n"); in _scsih_remove_unresponding_devices()
9219 ioc_info(ioc, "removing unresponding devices: end-devices\n"); in _scsih_remove_unresponding_devices()
9224 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_remove_unresponding_devices()
9226 &ioc->sas_device_list, list) { in _scsih_remove_unresponding_devices()
9232 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_remove_unresponding_devices()
9238 _scsih_remove_device(ioc, sas_device); in _scsih_remove_unresponding_devices()
9243 ioc_info(ioc, "Removing unresponding devices: pcie end-devices\n"); in _scsih_remove_unresponding_devices()
9245 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in _scsih_remove_unresponding_devices()
9247 &ioc->pcie_device_list, list) { in _scsih_remove_unresponding_devices()
9253 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_remove_unresponding_devices()
9256 _scsih_pcie_device_remove_from_sml(ioc, pcie_device); in _scsih_remove_unresponding_devices()
9262 if (ioc->ir_firmware) { in _scsih_remove_unresponding_devices()
9263 ioc_info(ioc, "removing unresponding devices: volumes\n"); in _scsih_remove_unresponding_devices()
9265 &ioc->raid_device_list, list) { in _scsih_remove_unresponding_devices()
9267 _scsih_sas_volume_delete(ioc, in _scsih_remove_unresponding_devices()
9275 ioc_info(ioc, "removing unresponding devices: expanders\n"); in _scsih_remove_unresponding_devices()
9276 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_remove_unresponding_devices()
9279 &ioc->sas_expander_list, list) { in _scsih_remove_unresponding_devices()
9285 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_remove_unresponding_devices()
9288 _scsih_expander_node_remove(ioc, sas_expander); in _scsih_remove_unresponding_devices()
9291 ioc_info(ioc, "removing unresponding devices: complete\n"); in _scsih_remove_unresponding_devices()
9294 _scsih_ublock_io_all_device(ioc); in _scsih_remove_unresponding_devices()
9298 _scsih_refresh_expander_links(struct MPT3SAS_ADAPTER *ioc, in _scsih_refresh_expander_links() argument
9306 if ((mpt3sas_config_get_expander_pg1(ioc, &mpi_reply, in _scsih_refresh_expander_links()
9308 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_refresh_expander_links()
9313 mpt3sas_transport_update_links(ioc, sas_expander->sas_address, in _scsih_refresh_expander_links()
9324 _scsih_scan_for_devices_after_reset(struct MPT3SAS_ADAPTER *ioc) in _scsih_scan_for_devices_after_reset() argument
9345 ioc_info(ioc, "scan devices: start\n"); in _scsih_scan_for_devices_after_reset()
9347 _scsih_sas_host_refresh(ioc); in _scsih_scan_for_devices_after_reset()
9349 ioc_info(ioc, "\tscan devices: expanders start\n"); in _scsih_scan_for_devices_after_reset()
9353 while (!(mpt3sas_config_get_expander_pg0(ioc, &mpi_reply, &expander_pg0, in _scsih_scan_for_devices_after_reset()
9358 ioc_info(ioc, "\tbreak from expander scan: ioc_status(0x%04x), loginfo(0x%08x)\n", in _scsih_scan_for_devices_after_reset()
9363 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_scan_for_devices_after_reset()
9365 ioc, le64_to_cpu(expander_pg0.SASAddress)); in _scsih_scan_for_devices_after_reset()
9366 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_scan_for_devices_after_reset()
9368 _scsih_refresh_expander_links(ioc, expander_device, in _scsih_scan_for_devices_after_reset()
9371 ioc_info(ioc, "\tBEFORE adding expander: handle (0x%04x), sas_addr(0x%016llx)\n", in _scsih_scan_for_devices_after_reset()
9374 _scsih_expander_add(ioc, handle); in _scsih_scan_for_devices_after_reset()
9375 ioc_info(ioc, "\tAFTER adding expander: handle (0x%04x), sas_addr(0x%016llx)\n", in _scsih_scan_for_devices_after_reset()
9381 ioc_info(ioc, "\tscan devices: expanders complete\n"); in _scsih_scan_for_devices_after_reset()
9383 if (!ioc->ir_firmware) in _scsih_scan_for_devices_after_reset()
9386 ioc_info(ioc, "\tscan devices: phys disk start\n"); in _scsih_scan_for_devices_after_reset()
9390 while (!(mpt3sas_config_get_phys_disk_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
9396 ioc_info(ioc, "\tbreak from phys disk scan: ioc_status(0x%04x), loginfo(0x%08x)\n", in _scsih_scan_for_devices_after_reset()
9402 sas_device = mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_scan_for_devices_after_reset()
9407 if (mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
9414 ioc_info(ioc, "\tbreak from phys disk scan ioc_status(0x%04x), loginfo(0x%08x)\n", in _scsih_scan_for_devices_after_reset()
9419 if (!_scsih_get_sas_address(ioc, parent_handle, in _scsih_scan_for_devices_after_reset()
9421 ioc_info(ioc, "\tBEFORE adding phys disk: handle (0x%04x), sas_addr(0x%016llx)\n", in _scsih_scan_for_devices_after_reset()
9424 mpt3sas_transport_update_links(ioc, sas_address, in _scsih_scan_for_devices_after_reset()
9427 set_bit(handle, ioc->pd_handles); in _scsih_scan_for_devices_after_reset()
9433 while (_scsih_add_device(ioc, handle, retry_count++, in _scsih_scan_for_devices_after_reset()
9437 ioc_info(ioc, "\tAFTER adding phys disk: handle (0x%04x), sas_addr(0x%016llx)\n", in _scsih_scan_for_devices_after_reset()
9443 ioc_info(ioc, "\tscan devices: phys disk complete\n"); in _scsih_scan_for_devices_after_reset()
9445 ioc_info(ioc, "\tscan devices: volumes start\n"); in _scsih_scan_for_devices_after_reset()
9449 while (!(mpt3sas_config_get_raid_volume_pg1(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
9454 ioc_info(ioc, "\tbreak from volume scan: ioc_status(0x%04x), loginfo(0x%08x)\n", in _scsih_scan_for_devices_after_reset()
9459 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_scan_for_devices_after_reset()
9460 raid_device = _scsih_raid_device_find_by_wwid(ioc, in _scsih_scan_for_devices_after_reset()
9462 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_scan_for_devices_after_reset()
9465 if (mpt3sas_config_get_raid_volume_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
9472 ioc_info(ioc, "\tbreak from volume scan: ioc_status(0x%04x), loginfo(0x%08x)\n", in _scsih_scan_for_devices_after_reset()
9482 ioc_info(ioc, "\tBEFORE adding volume: handle (0x%04x)\n", in _scsih_scan_for_devices_after_reset()
9484 _scsih_sas_volume_add(ioc, &element); in _scsih_scan_for_devices_after_reset()
9485 ioc_info(ioc, "\tAFTER adding volume: handle (0x%04x)\n", in _scsih_scan_for_devices_after_reset()
9490 ioc_info(ioc, "\tscan devices: volumes complete\n"); in _scsih_scan_for_devices_after_reset()
9494 ioc_info(ioc, "\tscan devices: end devices start\n"); in _scsih_scan_for_devices_after_reset()
9498 while (!(mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
9504 ioc_info(ioc, "\tbreak from end device scan: ioc_status(0x%04x), loginfo(0x%08x)\n", in _scsih_scan_for_devices_after_reset()
9512 sas_device = mpt3sas_get_sdev_by_addr(ioc, in _scsih_scan_for_devices_after_reset()
9519 if (!_scsih_get_sas_address(ioc, parent_handle, &sas_address)) { in _scsih_scan_for_devices_after_reset()
9520 ioc_info(ioc, "\tBEFORE adding end device: handle (0x%04x), sas_addr(0x%016llx)\n", in _scsih_scan_for_devices_after_reset()
9523 mpt3sas_transport_update_links(ioc, sas_address, handle, in _scsih_scan_for_devices_after_reset()
9530 while (_scsih_add_device(ioc, handle, retry_count++, in _scsih_scan_for_devices_after_reset()
9534 ioc_info(ioc, "\tAFTER adding end device: handle (0x%04x), sas_addr(0x%016llx)\n", in _scsih_scan_for_devices_after_reset()
9539 ioc_info(ioc, "\tscan devices: end devices complete\n"); in _scsih_scan_for_devices_after_reset()
9540 ioc_info(ioc, "\tscan devices: pcie end devices start\n"); in _scsih_scan_for_devices_after_reset()
9544 while (!(mpt3sas_config_get_pcie_device_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
9550 ioc_info(ioc, "\tbreak from pcie end device scan: ioc_status(0x%04x), loginfo(0x%08x)\n", in _scsih_scan_for_devices_after_reset()
9558 pcie_device = mpt3sas_get_pdev_by_wwid(ioc, in _scsih_scan_for_devices_after_reset()
9566 _scsih_pcie_add_device(ioc, handle); in _scsih_scan_for_devices_after_reset()
9568 ioc_info(ioc, "\tAFTER adding pcie end device: handle (0x%04x), wwid(0x%016llx)\n", in _scsih_scan_for_devices_after_reset()
9571 ioc_info(ioc, "\tpcie devices: pcie end devices complete\n"); in _scsih_scan_for_devices_after_reset()
9572 ioc_info(ioc, "scan devices: complete\n"); in _scsih_scan_for_devices_after_reset()
9581 void mpt3sas_scsih_pre_reset_handler(struct MPT3SAS_ADAPTER *ioc) in mpt3sas_scsih_pre_reset_handler() argument
9583 dtmprintk(ioc, ioc_info(ioc, "%s: MPT3_IOC_PRE_RESET\n", __func__)); in mpt3sas_scsih_pre_reset_handler()
9594 mpt3sas_scsih_clear_outstanding_scsi_tm_commands(struct MPT3SAS_ADAPTER *ioc) in mpt3sas_scsih_clear_outstanding_scsi_tm_commands() argument
9596 dtmprintk(ioc, in mpt3sas_scsih_clear_outstanding_scsi_tm_commands()
9597 ioc_info(ioc, "%s: clear outstanding scsi & tm cmds\n", __func__)); in mpt3sas_scsih_clear_outstanding_scsi_tm_commands()
9598 if (ioc->scsih_cmds.status & MPT3_CMD_PENDING) { in mpt3sas_scsih_clear_outstanding_scsi_tm_commands()
9599 ioc->scsih_cmds.status |= MPT3_CMD_RESET; in mpt3sas_scsih_clear_outstanding_scsi_tm_commands()
9600 mpt3sas_base_free_smid(ioc, ioc->scsih_cmds.smid); in mpt3sas_scsih_clear_outstanding_scsi_tm_commands()
9601 complete(&ioc->scsih_cmds.done); in mpt3sas_scsih_clear_outstanding_scsi_tm_commands()
9603 if (ioc->tm_cmds.status & MPT3_CMD_PENDING) { in mpt3sas_scsih_clear_outstanding_scsi_tm_commands()
9604 ioc->tm_cmds.status |= MPT3_CMD_RESET; in mpt3sas_scsih_clear_outstanding_scsi_tm_commands()
9605 mpt3sas_base_free_smid(ioc, ioc->tm_cmds.smid); in mpt3sas_scsih_clear_outstanding_scsi_tm_commands()
9606 complete(&ioc->tm_cmds.done); in mpt3sas_scsih_clear_outstanding_scsi_tm_commands()
9609 memset(ioc->pend_os_device_add, 0, ioc->pend_os_device_add_sz); in mpt3sas_scsih_clear_outstanding_scsi_tm_commands()
9610 memset(ioc->device_remove_in_progress, 0, in mpt3sas_scsih_clear_outstanding_scsi_tm_commands()
9611 ioc->device_remove_in_progress_sz); in mpt3sas_scsih_clear_outstanding_scsi_tm_commands()
9612 _scsih_fw_event_cleanup_queue(ioc); in mpt3sas_scsih_clear_outstanding_scsi_tm_commands()
9613 _scsih_flush_running_cmds(ioc); in mpt3sas_scsih_clear_outstanding_scsi_tm_commands()
9623 mpt3sas_scsih_reset_done_handler(struct MPT3SAS_ADAPTER *ioc) in mpt3sas_scsih_reset_done_handler() argument
9625 dtmprintk(ioc, ioc_info(ioc, "%s: MPT3_IOC_DONE_RESET\n", __func__)); in mpt3sas_scsih_reset_done_handler()
9626 if ((!ioc->is_driver_loading) && !(disable_discovery > 0 && in mpt3sas_scsih_reset_done_handler()
9627 !ioc->sas_hba.num_phys)) { in mpt3sas_scsih_reset_done_handler()
9628 _scsih_prep_device_scan(ioc); in mpt3sas_scsih_reset_done_handler()
9629 _scsih_create_enclosure_list_after_reset(ioc); in mpt3sas_scsih_reset_done_handler()
9630 _scsih_search_responding_sas_devices(ioc); in mpt3sas_scsih_reset_done_handler()
9631 _scsih_search_responding_pcie_devices(ioc); in mpt3sas_scsih_reset_done_handler()
9632 _scsih_search_responding_raid_devices(ioc); in mpt3sas_scsih_reset_done_handler()
9633 _scsih_search_responding_expanders(ioc); in mpt3sas_scsih_reset_done_handler()
9634 _scsih_error_recovery_delete_devices(ioc); in mpt3sas_scsih_reset_done_handler()
9645 _mpt3sas_fw_work(struct MPT3SAS_ADAPTER *ioc, struct fw_event_work *fw_event) in _mpt3sas_fw_work() argument
9647 ioc->current_event = fw_event; in _mpt3sas_fw_work()
9648 _scsih_fw_event_del_from_list(ioc, fw_event); in _mpt3sas_fw_work()
9651 if (ioc->remove_host || ioc->pci_error_recovery) { in _mpt3sas_fw_work()
9653 ioc->current_event = NULL; in _mpt3sas_fw_work()
9659 mpt3sas_process_trigger_data(ioc, in _mpt3sas_fw_work()
9664 while (scsi_host_in_recovery(ioc->shost) || in _mpt3sas_fw_work()
9665 ioc->shost_recovery) { in _mpt3sas_fw_work()
9670 if (ioc->remove_host || ioc->fw_events_cleanup) in _mpt3sas_fw_work()
9674 _scsih_remove_unresponding_devices(ioc); in _mpt3sas_fw_work()
9675 _scsih_scan_for_devices_after_reset(ioc); in _mpt3sas_fw_work()
9676 _scsih_set_nvme_max_shutdown_latency(ioc); in _mpt3sas_fw_work()
9679 ioc->start_scan = 0; in _mpt3sas_fw_work()
9681 mpt3sas_base_update_missing_delay(ioc, missing_delay[0], in _mpt3sas_fw_work()
9683 dewtprintk(ioc, in _mpt3sas_fw_work()
9684 ioc_info(ioc, "port enable: complete from worker thread\n")); in _mpt3sas_fw_work()
9687 _scsih_turn_on_pfa_led(ioc, fw_event->device_handle); in _mpt3sas_fw_work()
9690 _scsih_sas_topology_change_event(ioc, fw_event); in _mpt3sas_fw_work()
9693 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _mpt3sas_fw_work()
9694 _scsih_sas_device_status_change_event_debug(ioc, in _mpt3sas_fw_work()
9699 _scsih_sas_discovery_event(ioc, fw_event); in _mpt3sas_fw_work()
9702 _scsih_sas_device_discovery_error_event(ioc, fw_event); in _mpt3sas_fw_work()
9705 _scsih_sas_broadcast_primitive_event(ioc, fw_event); in _mpt3sas_fw_work()
9708 _scsih_sas_enclosure_dev_status_change_event(ioc, in _mpt3sas_fw_work()
9712 _scsih_sas_ir_config_change_event(ioc, fw_event); in _mpt3sas_fw_work()
9715 _scsih_sas_ir_volume_event(ioc, fw_event); in _mpt3sas_fw_work()
9718 _scsih_sas_ir_physical_disk_event(ioc, fw_event); in _mpt3sas_fw_work()
9721 _scsih_sas_ir_operation_status_event(ioc, fw_event); in _mpt3sas_fw_work()
9724 _scsih_pcie_device_status_change_event(ioc, fw_event); in _mpt3sas_fw_work()
9727 _scsih_pcie_enumeration_event(ioc, fw_event); in _mpt3sas_fw_work()
9730 _scsih_pcie_topology_change_event(ioc, fw_event); in _mpt3sas_fw_work()
9731 ioc->current_event = NULL; in _mpt3sas_fw_work()
9737 ioc->current_event = NULL; in _mpt3sas_fw_work()
9754 _mpt3sas_fw_work(fw_event->ioc, fw_event); in _firmware_event_work()
9771 mpt3sas_scsih_event_callback(struct MPT3SAS_ADAPTER *ioc, u8 msix_index, in mpt3sas_scsih_event_callback() argument
9781 if (ioc->pci_error_recovery) in mpt3sas_scsih_event_callback()
9784 mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply); in mpt3sas_scsih_event_callback()
9787 ioc_err(ioc, "mpi_reply not valid at %s:%d/%s()!\n", in mpt3sas_scsih_event_callback()
9795 mpt3sas_trigger_event(ioc, event, 0); in mpt3sas_scsih_event_callback()
9809 if (ioc->broadcast_aen_busy) { in mpt3sas_scsih_event_callback()
9810 ioc->broadcast_aen_pending++; in mpt3sas_scsih_event_callback()
9813 ioc->broadcast_aen_busy = 1; in mpt3sas_scsih_event_callback()
9818 _scsih_check_topo_delete_events(ioc, in mpt3sas_scsih_event_callback()
9823 _scsih_check_pcie_topo_remove_events(ioc, in mpt3sas_scsih_event_callback()
9828 _scsih_check_ir_config_unhide_events(ioc, in mpt3sas_scsih_event_callback()
9833 _scsih_check_volume_delete_events(ioc, in mpt3sas_scsih_event_callback()
9842 if (!ioc->is_warpdrive) in mpt3sas_scsih_event_callback()
9855 …ioc_warn(ioc, "WarpDrive Warning: IO Throttling has occurred in the WarpDrive subsystem. Check War… in mpt3sas_scsih_event_callback()
9858 …ioc_warn(ioc, "WarpDrive Warning: Program/Erase Cycles for the WarpDrive subsystem in degraded ran… in mpt3sas_scsih_event_callback()
9861 …ioc_err(ioc, "WarpDrive Fatal Error: There are no Program/Erase Cycles for the WarpDrive subsystem… in mpt3sas_scsih_event_callback()
9864 …ioc_err(ioc, "WarpDrive Fatal Error: The Backup Rail Monitor has failed on the WarpDrive subsystem… in mpt3sas_scsih_event_callback()
9871 _scsih_sas_device_status_change_event(ioc, in mpt3sas_scsih_event_callback()
9885 _scsih_temp_threshold_events(ioc, in mpt3sas_scsih_event_callback()
9894 ioc_notice(ioc, "Currently an active cable with ReceptacleID %d\n", in mpt3sas_scsih_event_callback()
9903 ioc_notice(ioc, "Currently a cable with ReceptacleID %d\n", in mpt3sas_scsih_event_callback()
9919 ioc_err(ioc, "failure at %s:%d/%s()!\n", in mpt3sas_scsih_event_callback()
9925 fw_event->ioc = ioc; in mpt3sas_scsih_event_callback()
9929 _scsih_fw_event_add(ioc, fw_event); in mpt3sas_scsih_event_callback()
9943 _scsih_expander_node_remove(struct MPT3SAS_ADAPTER *ioc, in _scsih_expander_node_remove() argument
9952 if (ioc->shost_recovery) in _scsih_expander_node_remove()
9956 mpt3sas_device_remove_by_sas_address(ioc, in _scsih_expander_node_remove()
9962 mpt3sas_expander_remove(ioc, in _scsih_expander_node_remove()
9966 mpt3sas_transport_port_remove(ioc, sas_expander->sas_address, in _scsih_expander_node_remove()
9969 ioc_info(ioc, "expander_remove: handle(0x%04x), sas_addr(0x%016llx)\n", in _scsih_expander_node_remove()
9973 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_expander_node_remove()
9975 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_expander_node_remove()
9990 _scsih_nvme_shutdown(struct MPT3SAS_ADAPTER *ioc) in _scsih_nvme_shutdown() argument
9997 if (list_empty(&ioc->pcie_device_list)) in _scsih_nvme_shutdown()
10000 mutex_lock(&ioc->scsih_cmds.mutex); in _scsih_nvme_shutdown()
10002 if (ioc->scsih_cmds.status != MPT3_CMD_NOT_USED) { in _scsih_nvme_shutdown()
10003 ioc_err(ioc, "%s: scsih_cmd in use\n", __func__); in _scsih_nvme_shutdown()
10007 ioc->scsih_cmds.status = MPT3_CMD_PENDING; in _scsih_nvme_shutdown()
10009 smid = mpt3sas_base_get_smid(ioc, ioc->scsih_cb_idx); in _scsih_nvme_shutdown()
10011 ioc_err(ioc, in _scsih_nvme_shutdown()
10013 ioc->scsih_cmds.status = MPT3_CMD_NOT_USED; in _scsih_nvme_shutdown()
10017 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_nvme_shutdown()
10018 ioc->scsih_cmds.smid = smid; in _scsih_nvme_shutdown()
10023 init_completion(&ioc->scsih_cmds.done); in _scsih_nvme_shutdown()
10024 ioc->put_smid_default(ioc, smid); in _scsih_nvme_shutdown()
10026 ioc_info(ioc, in _scsih_nvme_shutdown()
10028 ioc->max_shutdown_latency); in _scsih_nvme_shutdown()
10029 wait_for_completion_timeout(&ioc->scsih_cmds.done, in _scsih_nvme_shutdown()
10030 ioc->max_shutdown_latency*HZ); in _scsih_nvme_shutdown()
10032 if (!(ioc->scsih_cmds.status & MPT3_CMD_COMPLETE)) { in _scsih_nvme_shutdown()
10033 ioc_err(ioc, "%s: timeout\n", __func__); in _scsih_nvme_shutdown()
10037 if (ioc->scsih_cmds.status & MPT3_CMD_REPLY_VALID) { in _scsih_nvme_shutdown()
10038 mpi_reply = ioc->scsih_cmds.reply; in _scsih_nvme_shutdown()
10039 ioc_info(ioc, "Io Unit Control shutdown (complete):" in _scsih_nvme_shutdown()
10045 ioc->scsih_cmds.status = MPT3_CMD_NOT_USED; in _scsih_nvme_shutdown()
10046 mutex_unlock(&ioc->scsih_cmds.mutex); in _scsih_nvme_shutdown()
10058 _scsih_ir_shutdown(struct MPT3SAS_ADAPTER *ioc) in _scsih_ir_shutdown() argument
10065 if (!ioc->ir_firmware) in _scsih_ir_shutdown()
10069 if (list_empty(&ioc->raid_device_list)) in _scsih_ir_shutdown()
10072 mutex_lock(&ioc->scsih_cmds.mutex); in _scsih_ir_shutdown()
10074 if (ioc->scsih_cmds.status != MPT3_CMD_NOT_USED) { in _scsih_ir_shutdown()
10075 ioc_err(ioc, "%s: scsih_cmd in use\n", __func__); in _scsih_ir_shutdown()
10078 ioc->scsih_cmds.status = MPT3_CMD_PENDING; in _scsih_ir_shutdown()
10080 smid = mpt3sas_base_get_smid(ioc, ioc->scsih_cb_idx); in _scsih_ir_shutdown()
10082 ioc_err(ioc, "%s: failed obtaining a smid\n", __func__); in _scsih_ir_shutdown()
10083 ioc->scsih_cmds.status = MPT3_CMD_NOT_USED; in _scsih_ir_shutdown()
10087 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_ir_shutdown()
10088 ioc->scsih_cmds.smid = smid; in _scsih_ir_shutdown()
10094 if (!ioc->hide_ir_msg) in _scsih_ir_shutdown()
10095 ioc_info(ioc, "IR shutdown (sending)\n"); in _scsih_ir_shutdown()
10096 init_completion(&ioc->scsih_cmds.done); in _scsih_ir_shutdown()
10097 ioc->put_smid_default(ioc, smid); in _scsih_ir_shutdown()
10098 wait_for_completion_timeout(&ioc->scsih_cmds.done, 10*HZ); in _scsih_ir_shutdown()
10100 if (!(ioc->scsih_cmds.status & MPT3_CMD_COMPLETE)) { in _scsih_ir_shutdown()
10101 ioc_err(ioc, "%s: timeout\n", __func__); in _scsih_ir_shutdown()
10105 if (ioc->scsih_cmds.status & MPT3_CMD_REPLY_VALID) { in _scsih_ir_shutdown()
10106 mpi_reply = ioc->scsih_cmds.reply; in _scsih_ir_shutdown()
10107 if (!ioc->hide_ir_msg) in _scsih_ir_shutdown()
10108 ioc_info(ioc, "IR shutdown (complete): ioc_status(0x%04x), loginfo(0x%08x)\n", in _scsih_ir_shutdown()
10114 ioc->scsih_cmds.status = MPT3_CMD_NOT_USED; in _scsih_ir_shutdown()
10115 mutex_unlock(&ioc->scsih_cmds.mutex); in _scsih_ir_shutdown()
10129 struct Scsi_Host **shost, struct MPT3SAS_ADAPTER **ioc) in _scsih_get_shost_and_ioc() argument
10137 *ioc = shost_priv(*shost); in _scsih_get_shost_and_ioc()
10138 if (*ioc == NULL) { in _scsih_get_shost_and_ioc()
10155 struct MPT3SAS_ADAPTER *ioc; in scsih_remove() local
10164 if (_scsih_get_shost_and_ioc(pdev, &shost, &ioc)) in scsih_remove()
10167 ioc->remove_host = 1; in scsih_remove()
10170 _scsih_flush_running_cmds(ioc); in scsih_remove()
10172 _scsih_fw_event_cleanup_queue(ioc); in scsih_remove()
10174 spin_lock_irqsave(&ioc->fw_event_lock, flags); in scsih_remove()
10175 wq = ioc->firmware_event_thread; in scsih_remove()
10176 ioc->firmware_event_thread = NULL; in scsih_remove()
10177 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in scsih_remove()
10184 if (ioc->is_aero_ioc) in scsih_remove()
10185 mpt3sas_config_set_ioc_pg1(ioc, &mpi_reply, in scsih_remove()
10186 &ioc->ioc_pg1_copy); in scsih_remove()
10188 _scsih_ir_shutdown(ioc); in scsih_remove()
10189 mpt3sas_destroy_debugfs(ioc); in scsih_remove()
10191 list_for_each_entry_safe(raid_device, next, &ioc->raid_device_list, in scsih_remove()
10199 ioc_info(ioc, "removing handle(0x%04x), wwid(0x%016llx)\n", in scsih_remove()
10201 _scsih_raid_device_remove(ioc, raid_device); in scsih_remove()
10203 list_for_each_entry_safe(pcie_device, pcienext, &ioc->pcie_device_list, in scsih_remove()
10205 _scsih_pcie_device_remove_from_sml(ioc, pcie_device); in scsih_remove()
10212 &ioc->sas_hba.sas_port_list, port_list) { in scsih_remove()
10215 mpt3sas_device_remove_by_sas_address(ioc, in scsih_remove()
10221 mpt3sas_expander_remove(ioc, in scsih_remove()
10226 if (ioc->sas_hba.num_phys) { in scsih_remove()
10227 kfree(ioc->sas_hba.phy); in scsih_remove()
10228 ioc->sas_hba.phy = NULL; in scsih_remove()
10229 ioc->sas_hba.num_phys = 0; in scsih_remove()
10232 mpt3sas_base_detach(ioc); in scsih_remove()
10234 list_del(&ioc->list); in scsih_remove()
10247 struct MPT3SAS_ADAPTER *ioc; in scsih_shutdown() local
10252 if (_scsih_get_shost_and_ioc(pdev, &shost, &ioc)) in scsih_shutdown()
10255 ioc->remove_host = 1; in scsih_shutdown()
10258 _scsih_flush_running_cmds(ioc); in scsih_shutdown()
10260 _scsih_fw_event_cleanup_queue(ioc); in scsih_shutdown()
10262 spin_lock_irqsave(&ioc->fw_event_lock, flags); in scsih_shutdown()
10263 wq = ioc->firmware_event_thread; in scsih_shutdown()
10264 ioc->firmware_event_thread = NULL; in scsih_shutdown()
10265 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in scsih_shutdown()
10272 if (ioc->is_aero_ioc) in scsih_shutdown()
10273 mpt3sas_config_set_ioc_pg1(ioc, &mpi_reply, in scsih_shutdown()
10274 &ioc->ioc_pg1_copy); in scsih_shutdown()
10276 _scsih_ir_shutdown(ioc); in scsih_shutdown()
10277 _scsih_nvme_shutdown(ioc); in scsih_shutdown()
10278 mpt3sas_base_detach(ioc); in scsih_shutdown()
10291 _scsih_probe_boot_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_probe_boot_devices() argument
10306 if (!ioc->bios_pg3.BiosVersion) in _scsih_probe_boot_devices()
10310 if (ioc->req_boot_device.device) { in _scsih_probe_boot_devices()
10311 device = ioc->req_boot_device.device; in _scsih_probe_boot_devices()
10312 channel = ioc->req_boot_device.channel; in _scsih_probe_boot_devices()
10313 } else if (ioc->req_alt_boot_device.device) { in _scsih_probe_boot_devices()
10314 device = ioc->req_alt_boot_device.device; in _scsih_probe_boot_devices()
10315 channel = ioc->req_alt_boot_device.channel; in _scsih_probe_boot_devices()
10316 } else if (ioc->current_boot_device.device) { in _scsih_probe_boot_devices()
10317 device = ioc->current_boot_device.device; in _scsih_probe_boot_devices()
10318 channel = ioc->current_boot_device.channel; in _scsih_probe_boot_devices()
10326 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_probe_boot_devices()
10329 _scsih_raid_device_remove(ioc, raid_device); in _scsih_probe_boot_devices()
10331 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in _scsih_probe_boot_devices()
10334 list_move_tail(&pcie_device->list, &ioc->pcie_device_list); in _scsih_probe_boot_devices()
10335 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in _scsih_probe_boot_devices()
10336 rc = scsi_add_device(ioc->shost, PCIE_CHANNEL, tid, 0); in _scsih_probe_boot_devices()
10338 _scsih_pcie_device_remove(ioc, pcie_device); in _scsih_probe_boot_devices()
10340 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_probe_boot_devices()
10345 list_move_tail(&sas_device->list, &ioc->sas_device_list); in _scsih_probe_boot_devices()
10346 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_probe_boot_devices()
10348 if (ioc->hide_drives) in _scsih_probe_boot_devices()
10350 if (!mpt3sas_transport_port_add(ioc, handle, in _scsih_probe_boot_devices()
10352 _scsih_sas_device_remove(ioc, sas_device); in _scsih_probe_boot_devices()
10354 if (!ioc->is_driver_loading) { in _scsih_probe_boot_devices()
10355 mpt3sas_transport_port_remove(ioc, in _scsih_probe_boot_devices()
10358 _scsih_sas_device_remove(ioc, sas_device); in _scsih_probe_boot_devices()
10371 _scsih_probe_raid(struct MPT3SAS_ADAPTER *ioc) in _scsih_probe_raid() argument
10377 &ioc->raid_device_list, list) { in _scsih_probe_raid()
10380 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_probe_raid()
10383 _scsih_raid_device_remove(ioc, raid_device); in _scsih_probe_raid()
10387 static struct _sas_device *get_next_sas_device(struct MPT3SAS_ADAPTER *ioc) in get_next_sas_device() argument
10392 spin_lock_irqsave(&ioc->sas_device_lock, flags); in get_next_sas_device()
10393 if (!list_empty(&ioc->sas_device_init_list)) { in get_next_sas_device()
10394 sas_device = list_first_entry(&ioc->sas_device_init_list, in get_next_sas_device()
10398 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in get_next_sas_device()
10403 static void sas_device_make_active(struct MPT3SAS_ADAPTER *ioc, in sas_device_make_active() argument
10408 spin_lock_irqsave(&ioc->sas_device_lock, flags); in sas_device_make_active()
10424 list_add_tail(&sas_device->list, &ioc->sas_device_list); in sas_device_make_active()
10426 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in sas_device_make_active()
10436 _scsih_probe_sas(struct MPT3SAS_ADAPTER *ioc) in _scsih_probe_sas() argument
10440 if (ioc->hide_drives) in _scsih_probe_sas()
10443 while ((sas_device = get_next_sas_device(ioc))) { in _scsih_probe_sas()
10444 if (!mpt3sas_transport_port_add(ioc, sas_device->handle, in _scsih_probe_sas()
10446 _scsih_sas_device_remove(ioc, sas_device); in _scsih_probe_sas()
10456 if (!ioc->is_driver_loading) { in _scsih_probe_sas()
10457 mpt3sas_transport_port_remove(ioc, in _scsih_probe_sas()
10460 _scsih_sas_device_remove(ioc, sas_device); in _scsih_probe_sas()
10465 sas_device_make_active(ioc, sas_device); in _scsih_probe_sas()
10479 static struct _pcie_device *get_next_pcie_device(struct MPT3SAS_ADAPTER *ioc) in get_next_pcie_device() argument
10484 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in get_next_pcie_device()
10485 if (!list_empty(&ioc->pcie_device_init_list)) { in get_next_pcie_device()
10486 pcie_device = list_first_entry(&ioc->pcie_device_init_list, in get_next_pcie_device()
10490 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in get_next_pcie_device()
10503 static void pcie_device_make_active(struct MPT3SAS_ADAPTER *ioc, in pcie_device_make_active() argument
10508 spin_lock_irqsave(&ioc->pcie_device_lock, flags); in pcie_device_make_active()
10515 list_add_tail(&pcie_device->list, &ioc->pcie_device_list); in pcie_device_make_active()
10517 spin_unlock_irqrestore(&ioc->pcie_device_lock, flags); in pcie_device_make_active()
10527 _scsih_probe_pcie(struct MPT3SAS_ADAPTER *ioc) in _scsih_probe_pcie() argument
10533 while ((pcie_device = get_next_pcie_device(ioc))) { in _scsih_probe_pcie()
10540 pcie_device_make_active(ioc, pcie_device); in _scsih_probe_pcie()
10544 rc = scsi_add_device(ioc->shost, PCIE_CHANNEL, in _scsih_probe_pcie()
10547 _scsih_pcie_device_remove(ioc, pcie_device); in _scsih_probe_pcie()
10557 if (!ioc->is_driver_loading) { in _scsih_probe_pcie()
10561 _scsih_pcie_device_remove(ioc, pcie_device); in _scsih_probe_pcie()
10566 pcie_device_make_active(ioc, pcie_device); in _scsih_probe_pcie()
10578 _scsih_probe_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_probe_devices() argument
10582 if (!(ioc->facts.ProtocolFlags & MPI2_IOCFACTS_PROTOCOL_SCSI_INITIATOR)) in _scsih_probe_devices()
10585 _scsih_probe_boot_devices(ioc); in _scsih_probe_devices()
10587 if (ioc->ir_firmware) { in _scsih_probe_devices()
10589 le16_to_cpu(ioc->ioc_pg8.IRVolumeMappingFlags) & in _scsih_probe_devices()
10593 _scsih_probe_raid(ioc); in _scsih_probe_devices()
10594 _scsih_probe_sas(ioc); in _scsih_probe_devices()
10596 _scsih_probe_sas(ioc); in _scsih_probe_devices()
10597 _scsih_probe_raid(ioc); in _scsih_probe_devices()
10600 _scsih_probe_sas(ioc); in _scsih_probe_devices()
10601 _scsih_probe_pcie(ioc); in _scsih_probe_devices()
10616 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_scan_start() local
10619 mpt3sas_enable_diag_buffer(ioc, diag_buffer_enable); in scsih_scan_start()
10620 else if (ioc->manu_pg11.HostTraceBufferMaxSizeKB != 0) in scsih_scan_start()
10621 mpt3sas_enable_diag_buffer(ioc, 1); in scsih_scan_start()
10626 ioc->start_scan = 1; in scsih_scan_start()
10627 rc = mpt3sas_port_enable(ioc); in scsih_scan_start()
10630 ioc_info(ioc, "port enable: FAILED\n"); in scsih_scan_start()
10645 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_scan_finished() local
10648 ioc->is_driver_loading = 0; in scsih_scan_finished()
10649 ioc->wait_for_discovery_to_complete = 0; in scsih_scan_finished()
10654 ioc->port_enable_cmds.status = MPT3_CMD_NOT_USED; in scsih_scan_finished()
10655 ioc_info(ioc, "port enable: FAILED with timeout (timeout=300s)\n"); in scsih_scan_finished()
10656 ioc->is_driver_loading = 0; in scsih_scan_finished()
10660 if (ioc->start_scan) in scsih_scan_finished()
10663 if (ioc->start_scan_failed) { in scsih_scan_finished()
10664 ioc_info(ioc, "port enable: FAILED with (ioc_status=0x%08x)\n", in scsih_scan_finished()
10665 ioc->start_scan_failed); in scsih_scan_finished()
10666 ioc->is_driver_loading = 0; in scsih_scan_finished()
10667 ioc->wait_for_discovery_to_complete = 0; in scsih_scan_finished()
10668 ioc->remove_host = 1; in scsih_scan_finished()
10672 ioc_info(ioc, "port enable: SUCCESS\n"); in scsih_scan_finished()
10673 ioc->port_enable_cmds.status = MPT3_CMD_NOT_USED; in scsih_scan_finished()
10675 if (ioc->wait_for_discovery_to_complete) { in scsih_scan_finished()
10676 ioc->wait_for_discovery_to_complete = 0; in scsih_scan_finished()
10677 _scsih_probe_devices(ioc); in scsih_scan_finished()
10679 mpt3sas_base_start_watchdog(ioc); in scsih_scan_finished()
10680 ioc->is_driver_loading = 0; in scsih_scan_finished()
10843 struct MPT3SAS_ADAPTER *ioc; in _scsih_probe() local
10875 ioc = shost_priv(shost); in _scsih_probe()
10876 memset(ioc, 0, sizeof(struct MPT3SAS_ADAPTER)); in _scsih_probe()
10877 ioc->hba_mpi_version_belonged = hba_mpi_version; in _scsih_probe()
10878 ioc->id = mpt2_ids++; in _scsih_probe()
10879 sprintf(ioc->driver_name, "%s", MPT2SAS_DRIVER_NAME); in _scsih_probe()
10882 ioc->is_warpdrive = 1; in _scsih_probe()
10883 ioc->hide_ir_msg = 1; in _scsih_probe()
10887 ioc->is_mcpu_endpoint = 1; in _scsih_probe()
10890 ioc->mfg_pg10_hide_flag = MFG_PAGE10_EXPOSE_ALL_DISKS; in _scsih_probe()
10901 ioc = shost_priv(shost); in _scsih_probe()
10902 memset(ioc, 0, sizeof(struct MPT3SAS_ADAPTER)); in _scsih_probe()
10903 ioc->hba_mpi_version_belonged = hba_mpi_version; in _scsih_probe()
10904 ioc->id = mpt3_ids++; in _scsih_probe()
10905 sprintf(ioc->driver_name, "%s", MPT3SAS_DRIVER_NAME); in _scsih_probe()
10915 ioc->is_gen35_ioc = 1; in _scsih_probe()
10938 ioc->is_aero_ioc = ioc->is_gen35_ioc = 1; in _scsih_probe()
10941 ioc->is_gen35_ioc = ioc->is_aero_ioc = 0; in _scsih_probe()
10943 if ((ioc->hba_mpi_version_belonged == MPI25_VERSION && in _scsih_probe()
10945 (ioc->hba_mpi_version_belonged == MPI26_VERSION)) { in _scsih_probe()
10946 ioc->combined_reply_queue = 1; in _scsih_probe()
10947 if (ioc->is_gen35_ioc) in _scsih_probe()
10948 ioc->combined_reply_index_count = in _scsih_probe()
10951 ioc->combined_reply_index_count = in _scsih_probe()
10959 INIT_LIST_HEAD(&ioc->list); in _scsih_probe()
10961 list_add_tail(&ioc->list, &mpt3sas_ioc_list); in _scsih_probe()
10963 ioc->shost = shost; in _scsih_probe()
10964 ioc->pdev = pdev; in _scsih_probe()
10965 ioc->scsi_io_cb_idx = scsi_io_cb_idx; in _scsih_probe()
10966 ioc->tm_cb_idx = tm_cb_idx; in _scsih_probe()
10967 ioc->ctl_cb_idx = ctl_cb_idx; in _scsih_probe()
10968 ioc->base_cb_idx = base_cb_idx; in _scsih_probe()
10969 ioc->port_enable_cb_idx = port_enable_cb_idx; in _scsih_probe()
10970 ioc->transport_cb_idx = transport_cb_idx; in _scsih_probe()
10971 ioc->scsih_cb_idx = scsih_cb_idx; in _scsih_probe()
10972 ioc->config_cb_idx = config_cb_idx; in _scsih_probe()
10973 ioc->tm_tr_cb_idx = tm_tr_cb_idx; in _scsih_probe()
10974 ioc->tm_tr_volume_cb_idx = tm_tr_volume_cb_idx; in _scsih_probe()
10975 ioc->tm_sas_control_cb_idx = tm_sas_control_cb_idx; in _scsih_probe()
10976 ioc->logging_level = logging_level; in _scsih_probe()
10977 ioc->schedule_dead_ioc_flush_running_cmds = &_scsih_flush_running_cmds; in _scsih_probe()
10979 ioc->max_shutdown_latency = IO_UNIT_CONTROL_SHUTDOWN_TIMEOUT; in _scsih_probe()
10983 ioc->drv_support_bitmap |= MPT_DRV_SUPPORT_BITMAP_MEMMOVE; in _scsih_probe()
10985 ioc->enable_sdev_max_qd = enable_sdev_max_qd; in _scsih_probe()
10988 mutex_init(&ioc->reset_in_progress_mutex); in _scsih_probe()
10990 mutex_init(&ioc->pci_access_mutex); in _scsih_probe()
10991 spin_lock_init(&ioc->ioc_reset_in_progress_lock); in _scsih_probe()
10992 spin_lock_init(&ioc->scsi_lookup_lock); in _scsih_probe()
10993 spin_lock_init(&ioc->sas_device_lock); in _scsih_probe()
10994 spin_lock_init(&ioc->sas_node_lock); in _scsih_probe()
10995 spin_lock_init(&ioc->fw_event_lock); in _scsih_probe()
10996 spin_lock_init(&ioc->raid_device_lock); in _scsih_probe()
10997 spin_lock_init(&ioc->pcie_device_lock); in _scsih_probe()
10998 spin_lock_init(&ioc->diag_trigger_lock); in _scsih_probe()
11000 INIT_LIST_HEAD(&ioc->sas_device_list); in _scsih_probe()
11001 INIT_LIST_HEAD(&ioc->sas_device_init_list); in _scsih_probe()
11002 INIT_LIST_HEAD(&ioc->sas_expander_list); in _scsih_probe()
11003 INIT_LIST_HEAD(&ioc->enclosure_list); in _scsih_probe()
11004 INIT_LIST_HEAD(&ioc->pcie_device_list); in _scsih_probe()
11005 INIT_LIST_HEAD(&ioc->pcie_device_init_list); in _scsih_probe()
11006 INIT_LIST_HEAD(&ioc->fw_event_list); in _scsih_probe()
11007 INIT_LIST_HEAD(&ioc->raid_device_list); in _scsih_probe()
11008 INIT_LIST_HEAD(&ioc->sas_hba.sas_port_list); in _scsih_probe()
11009 INIT_LIST_HEAD(&ioc->delayed_tr_list); in _scsih_probe()
11010 INIT_LIST_HEAD(&ioc->delayed_sc_list); in _scsih_probe()
11011 INIT_LIST_HEAD(&ioc->delayed_event_ack_list); in _scsih_probe()
11012 INIT_LIST_HEAD(&ioc->delayed_tr_volume_list); in _scsih_probe()
11013 INIT_LIST_HEAD(&ioc->reply_queue_list); in _scsih_probe()
11015 sprintf(ioc->name, "%s_cm%d", ioc->driver_name, ioc->id); in _scsih_probe()
11021 shost->unique_id = ioc->id; in _scsih_probe()
11023 if (ioc->is_mcpu_endpoint) { in _scsih_probe()
11026 ioc_info(ioc, "The max_sectors value is set to %d\n", in _scsih_probe()
11032 …ioc_warn(ioc, "Invalid value %d passed for max_sectors, range is 64 to 32767. Assigning value of 6… in _scsih_probe()
11036 …ioc_warn(ioc, "Invalid value %d passed for max_sectors, range is 64 to 32767.Assigning default val… in _scsih_probe()
11040 ioc_info(ioc, "The max_sectors value is set to %d\n", in _scsih_probe()
11056 snprintf(ioc->firmware_event_name, sizeof(ioc->firmware_event_name), in _scsih_probe()
11057 "fw_event_%s%d", ioc->driver_name, ioc->id); in _scsih_probe()
11058 ioc->firmware_event_thread = alloc_ordered_workqueue( in _scsih_probe()
11059 ioc->firmware_event_name, 0); in _scsih_probe()
11060 if (!ioc->firmware_event_thread) { in _scsih_probe()
11061 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_probe()
11067 ioc->is_driver_loading = 1; in _scsih_probe()
11068 if ((mpt3sas_base_attach(ioc))) { in _scsih_probe()
11069 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_probe()
11075 if (ioc->is_warpdrive) { in _scsih_probe()
11076 if (ioc->mfg_pg10_hide_flag == MFG_PAGE10_EXPOSE_ALL_DISKS) in _scsih_probe()
11077 ioc->hide_drives = 0; in _scsih_probe()
11078 else if (ioc->mfg_pg10_hide_flag == MFG_PAGE10_HIDE_ALL_DISKS) in _scsih_probe()
11079 ioc->hide_drives = 1; in _scsih_probe()
11081 if (mpt3sas_get_num_volumes(ioc)) in _scsih_probe()
11082 ioc->hide_drives = 1; in _scsih_probe()
11084 ioc->hide_drives = 0; in _scsih_probe()
11087 ioc->hide_drives = 0; in _scsih_probe()
11091 ioc_err(ioc, "failure at %s:%d/%s()!\n", in _scsih_probe()
11097 mpt3sas_setup_debugfs(ioc); in _scsih_probe()
11100 mpt3sas_base_detach(ioc); in _scsih_probe()
11102 destroy_workqueue(ioc->firmware_event_thread); in _scsih_probe()
11105 list_del(&ioc->list); in _scsih_probe()
11123 struct MPT3SAS_ADAPTER *ioc; in scsih_suspend() local
11127 rc = _scsih_get_shost_and_ioc(pdev, &shost, &ioc); in scsih_suspend()
11131 mpt3sas_base_stop_watchdog(ioc); in scsih_suspend()
11134 _scsih_nvme_shutdown(ioc); in scsih_suspend()
11136 ioc_info(ioc, "pdev=0x%p, slot=%s, entering operating state [D%d]\n", in scsih_suspend()
11140 mpt3sas_base_free_resources(ioc); in scsih_suspend()
11155 struct MPT3SAS_ADAPTER *ioc; in scsih_resume() local
11159 r = _scsih_get_shost_and_ioc(pdev, &shost, &ioc); in scsih_resume()
11163 ioc_info(ioc, "pdev=0x%p, slot=%s, previous operating state [D%d]\n", in scsih_resume()
11169 ioc->pdev = pdev; in scsih_resume()
11170 r = mpt3sas_base_map_resources(ioc); in scsih_resume()
11173 ioc_info(ioc, "Issuing Hard Reset as part of OS Resume\n"); in scsih_resume()
11174 mpt3sas_base_hard_reset_handler(ioc, SOFT_RESET); in scsih_resume()
11176 mpt3sas_base_start_watchdog(ioc); in scsih_resume()
11194 struct MPT3SAS_ADAPTER *ioc; in scsih_pci_error_detected() local
11196 if (_scsih_get_shost_and_ioc(pdev, &shost, &ioc)) in scsih_pci_error_detected()
11199 ioc_info(ioc, "PCI error: detected callback, state(%d)!!\n", state); in scsih_pci_error_detected()
11206 ioc->pci_error_recovery = 1; in scsih_pci_error_detected()
11207 scsi_block_requests(ioc->shost); in scsih_pci_error_detected()
11208 mpt3sas_base_stop_watchdog(ioc); in scsih_pci_error_detected()
11209 mpt3sas_base_free_resources(ioc); in scsih_pci_error_detected()
11213 ioc->pci_error_recovery = 1; in scsih_pci_error_detected()
11214 mpt3sas_base_stop_watchdog(ioc); in scsih_pci_error_detected()
11215 _scsih_flush_running_cmds(ioc); in scsih_pci_error_detected()
11233 struct MPT3SAS_ADAPTER *ioc; in scsih_pci_slot_reset() local
11236 if (_scsih_get_shost_and_ioc(pdev, &shost, &ioc)) in scsih_pci_slot_reset()
11239 ioc_info(ioc, "PCI error: slot reset callback!!\n"); in scsih_pci_slot_reset()
11241 ioc->pci_error_recovery = 0; in scsih_pci_slot_reset()
11242 ioc->pdev = pdev; in scsih_pci_slot_reset()
11244 rc = mpt3sas_base_map_resources(ioc); in scsih_pci_slot_reset()
11248 ioc_info(ioc, "Issuing Hard Reset as part of PCI Slot Reset\n"); in scsih_pci_slot_reset()
11249 rc = mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); in scsih_pci_slot_reset()
11251 ioc_warn(ioc, "hard reset: %s\n", in scsih_pci_slot_reset()
11272 struct MPT3SAS_ADAPTER *ioc; in scsih_pci_resume() local
11274 if (_scsih_get_shost_and_ioc(pdev, &shost, &ioc)) in scsih_pci_resume()
11277 ioc_info(ioc, "PCI error: resume callback!!\n"); in scsih_pci_resume()
11279 mpt3sas_base_start_watchdog(ioc); in scsih_pci_resume()
11280 scsi_unblock_requests(ioc->shost); in scsih_pci_resume()
11291 struct MPT3SAS_ADAPTER *ioc; in scsih_pci_mmio_enabled() local
11293 if (_scsih_get_shost_and_ioc(pdev, &shost, &ioc)) in scsih_pci_mmio_enabled()
11296 ioc_info(ioc, "PCI error: mmio enabled callback!!\n"); in scsih_pci_mmio_enabled()