Lines Matching refs:ioc
63 static void _scsih_expander_node_remove(struct MPT3SAS_ADAPTER *ioc,
67 static void _scsih_remove_device(struct MPT3SAS_ADAPTER *ioc,
69 static int _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle,
72 static u8 _scsih_check_for_pending_tm(struct MPT3SAS_ADAPTER *ioc, u16 smid);
194 struct MPT3SAS_ADAPTER *ioc; member
288 struct MPT3SAS_ADAPTER *ioc; in _scsih_set_debug_level() local
295 list_for_each_entry(ioc, &mpt3sas_ioc_list, list) in _scsih_set_debug_level()
296 ioc->logging_level = logging_level; in _scsih_set_debug_level()
401 _scsih_get_sas_address(struct MPT3SAS_ADAPTER *ioc, u16 handle, in _scsih_get_sas_address() argument
410 if (handle <= ioc->sas_hba.num_phys) { in _scsih_get_sas_address()
411 *sas_address = ioc->sas_hba.sas_address; in _scsih_get_sas_address()
415 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_get_sas_address()
417 pr_err(MPT3SAS_FMT "failure at %s:%d/%s()!\n", ioc->name, in _scsih_get_sas_address()
435 ioc->name, handle, ioc_status, in _scsih_get_sas_address()
454 _scsih_determine_boot_device(struct MPT3SAS_ADAPTER *ioc, in _scsih_determine_boot_device() argument
465 if (!ioc->is_driver_loading) in _scsih_determine_boot_device()
469 if (!ioc->bios_pg3.BiosVersion) in _scsih_determine_boot_device()
486 if (!ioc->req_boot_device.device) { in _scsih_determine_boot_device()
489 (ioc->bios_pg2.ReqBootDeviceForm & in _scsih_determine_boot_device()
491 &ioc->bios_pg2.RequestedBootDevice)) { in _scsih_determine_boot_device()
492 dinitprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_determine_boot_device()
494 ioc->name, __func__, in _scsih_determine_boot_device()
496 ioc->req_boot_device.device = device; in _scsih_determine_boot_device()
497 ioc->req_boot_device.is_raid = is_raid; in _scsih_determine_boot_device()
501 if (!ioc->req_alt_boot_device.device) { in _scsih_determine_boot_device()
504 (ioc->bios_pg2.ReqAltBootDeviceForm & in _scsih_determine_boot_device()
506 &ioc->bios_pg2.RequestedAltBootDevice)) { in _scsih_determine_boot_device()
507 dinitprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_determine_boot_device()
509 ioc->name, __func__, in _scsih_determine_boot_device()
511 ioc->req_alt_boot_device.device = device; in _scsih_determine_boot_device()
512 ioc->req_alt_boot_device.is_raid = is_raid; in _scsih_determine_boot_device()
516 if (!ioc->current_boot_device.device) { in _scsih_determine_boot_device()
519 (ioc->bios_pg2.CurrentBootDeviceForm & in _scsih_determine_boot_device()
521 &ioc->bios_pg2.CurrentBootDevice)) { in _scsih_determine_boot_device()
522 dinitprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_determine_boot_device()
524 ioc->name, __func__, in _scsih_determine_boot_device()
526 ioc->current_boot_device.device = device; in _scsih_determine_boot_device()
527 ioc->current_boot_device.is_raid = is_raid; in _scsih_determine_boot_device()
533 __mpt3sas_get_sdev_from_target(struct MPT3SAS_ADAPTER *ioc, in __mpt3sas_get_sdev_from_target() argument
538 assert_spin_locked(&ioc->sas_device_lock); in __mpt3sas_get_sdev_from_target()
548 mpt3sas_get_sdev_from_target(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_get_sdev_from_target() argument
554 spin_lock_irqsave(&ioc->sas_device_lock, flags); in mpt3sas_get_sdev_from_target()
555 ret = __mpt3sas_get_sdev_from_target(ioc, tgt_priv); in mpt3sas_get_sdev_from_target()
556 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in mpt3sas_get_sdev_from_target()
563 __mpt3sas_get_sdev_by_addr(struct MPT3SAS_ADAPTER *ioc, in __mpt3sas_get_sdev_by_addr() argument
568 assert_spin_locked(&ioc->sas_device_lock); in __mpt3sas_get_sdev_by_addr()
570 list_for_each_entry(sas_device, &ioc->sas_device_list, list) in __mpt3sas_get_sdev_by_addr()
574 list_for_each_entry(sas_device, &ioc->sas_device_init_list, list) in __mpt3sas_get_sdev_by_addr()
595 mpt3sas_get_sdev_by_addr(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_get_sdev_by_addr() argument
601 spin_lock_irqsave(&ioc->sas_device_lock, flags); in mpt3sas_get_sdev_by_addr()
602 sas_device = __mpt3sas_get_sdev_by_addr(ioc, in mpt3sas_get_sdev_by_addr()
604 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in mpt3sas_get_sdev_by_addr()
610 __mpt3sas_get_sdev_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in __mpt3sas_get_sdev_by_handle() argument
614 assert_spin_locked(&ioc->sas_device_lock); in __mpt3sas_get_sdev_by_handle()
616 list_for_each_entry(sas_device, &ioc->sas_device_list, list) in __mpt3sas_get_sdev_by_handle()
620 list_for_each_entry(sas_device, &ioc->sas_device_init_list, list) in __mpt3sas_get_sdev_by_handle()
641 mpt3sas_get_sdev_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in mpt3sas_get_sdev_by_handle() argument
646 spin_lock_irqsave(&ioc->sas_device_lock, flags); in mpt3sas_get_sdev_by_handle()
647 sas_device = __mpt3sas_get_sdev_by_handle(ioc, handle); in mpt3sas_get_sdev_by_handle()
648 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in mpt3sas_get_sdev_by_handle()
662 _scsih_sas_device_remove(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_remove() argument
671 ioc->name, sas_device->handle, in _scsih_sas_device_remove()
677 ioc->name, (unsigned long long) in _scsih_sas_device_remove()
683 ioc->name, sas_device->enclosure_level, in _scsih_sas_device_remove()
690 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_remove()
695 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_remove()
706 _scsih_device_remove_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_device_remove_by_handle() argument
711 if (ioc->shost_recovery) in _scsih_device_remove_by_handle()
714 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_device_remove_by_handle()
715 sas_device = __mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_device_remove_by_handle()
720 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_device_remove_by_handle()
722 _scsih_remove_device(ioc, sas_device); in _scsih_device_remove_by_handle()
735 mpt3sas_device_remove_by_sas_address(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_device_remove_by_sas_address() argument
741 if (ioc->shost_recovery) in mpt3sas_device_remove_by_sas_address()
744 spin_lock_irqsave(&ioc->sas_device_lock, flags); in mpt3sas_device_remove_by_sas_address()
745 sas_device = __mpt3sas_get_sdev_by_addr(ioc, sas_address); in mpt3sas_device_remove_by_sas_address()
750 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in mpt3sas_device_remove_by_sas_address()
752 _scsih_remove_device(ioc, sas_device); in mpt3sas_device_remove_by_sas_address()
766 _scsih_sas_device_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_add() argument
771 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_device_add()
773 ioc->name, __func__, sas_device->handle, in _scsih_sas_device_add()
777 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_device_add()
779 ioc->name, __func__, (unsigned long long) in _scsih_sas_device_add()
783 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_device_add()
785 ioc->name, __func__, in _scsih_sas_device_add()
788 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_add()
790 list_add_tail(&sas_device->list, &ioc->sas_device_list); in _scsih_sas_device_add()
791 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_add()
793 if (!mpt3sas_transport_port_add(ioc, sas_device->handle, in _scsih_sas_device_add()
795 _scsih_sas_device_remove(ioc, sas_device); in _scsih_sas_device_add()
802 if (!ioc->is_driver_loading) { in _scsih_sas_device_add()
803 mpt3sas_transport_port_remove(ioc, in _scsih_sas_device_add()
806 _scsih_sas_device_remove(ioc, sas_device); in _scsih_sas_device_add()
820 _scsih_sas_device_init_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_init_add() argument
825 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_device_init_add()
826 "%s: handle(0x%04x), sas_addr(0x%016llx)\n", ioc->name, in _scsih_sas_device_init_add()
831 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_device_init_add()
833 ioc->name, __func__, (unsigned long long) in _scsih_sas_device_init_add()
837 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_device_init_add()
839 ioc->name, __func__, sas_device->enclosure_level, in _scsih_sas_device_init_add()
842 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_init_add()
844 list_add_tail(&sas_device->list, &ioc->sas_device_init_list); in _scsih_sas_device_init_add()
845 _scsih_determine_boot_device(ioc, sas_device, 0); in _scsih_sas_device_init_add()
846 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_init_add()
860 _scsih_raid_device_find_by_id(struct MPT3SAS_ADAPTER *ioc, int id, int channel) in _scsih_raid_device_find_by_id() argument
865 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in _scsih_raid_device_find_by_id()
886 mpt3sas_raid_device_find_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in mpt3sas_raid_device_find_by_handle() argument
891 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in mpt3sas_raid_device_find_by_handle()
912 _scsih_raid_device_find_by_wwid(struct MPT3SAS_ADAPTER *ioc, u64 wwid) in _scsih_raid_device_find_by_wwid() argument
917 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in _scsih_raid_device_find_by_wwid()
936 _scsih_raid_device_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_raid_device_add() argument
941 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_raid_device_add()
942 "%s: handle(0x%04x), wwid(0x%016llx)\n", ioc->name, __func__, in _scsih_raid_device_add()
945 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_raid_device_add()
946 list_add_tail(&raid_device->list, &ioc->raid_device_list); in _scsih_raid_device_add()
947 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_raid_device_add()
957 _scsih_raid_device_remove(struct MPT3SAS_ADAPTER *ioc, in _scsih_raid_device_remove() argument
962 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_raid_device_remove()
965 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_raid_device_remove()
978 mpt3sas_scsih_expander_find_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in mpt3sas_scsih_expander_find_by_handle() argument
983 list_for_each_entry(sas_expander, &ioc->sas_expander_list, list) { in mpt3sas_scsih_expander_find_by_handle()
1003 mpt3sas_scsih_expander_find_by_sas_address(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_scsih_expander_find_by_sas_address() argument
1009 list_for_each_entry(sas_expander, &ioc->sas_expander_list, list) { in mpt3sas_scsih_expander_find_by_sas_address()
1030 _scsih_expander_node_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_expander_node_add() argument
1035 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_expander_node_add()
1036 list_add_tail(&sas_expander->list, &ioc->sas_expander_list); in _scsih_expander_node_add()
1037 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_expander_node_add()
1067 _scsih_scsi_lookup_get(struct MPT3SAS_ADAPTER *ioc, u16 smid) in _scsih_scsi_lookup_get() argument
1069 return ioc->scsi_lookup[smid - 1].scmd; in _scsih_scsi_lookup_get()
1081 _scsih_scsi_lookup_get_clear(struct MPT3SAS_ADAPTER *ioc, u16 smid) in _scsih_scsi_lookup_get_clear() argument
1086 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_get_clear()
1087 scmd = ioc->scsi_lookup[smid - 1].scmd; in _scsih_scsi_lookup_get_clear()
1088 ioc->scsi_lookup[smid - 1].scmd = NULL; in _scsih_scsi_lookup_get_clear()
1089 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_get_clear()
1105 _scsih_scsi_lookup_find_by_scmd(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd in _scsih_scsi_lookup_find_by_scmd() argument
1112 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_scmd()
1114 for (i = 0; i < ioc->scsiio_depth; i++) { in _scsih_scsi_lookup_find_by_scmd()
1115 if (ioc->scsi_lookup[i].scmd == scmd) { in _scsih_scsi_lookup_find_by_scmd()
1116 smid = ioc->scsi_lookup[i].smid; in _scsih_scsi_lookup_find_by_scmd()
1121 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_scmd()
1136 _scsih_scsi_lookup_find_by_target(struct MPT3SAS_ADAPTER *ioc, int id, in _scsih_scsi_lookup_find_by_target() argument
1143 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_target()
1145 for (i = 0 ; i < ioc->scsiio_depth; i++) { in _scsih_scsi_lookup_find_by_target()
1146 if (ioc->scsi_lookup[i].scmd && in _scsih_scsi_lookup_find_by_target()
1147 (ioc->scsi_lookup[i].scmd->device->id == id && in _scsih_scsi_lookup_find_by_target()
1148 ioc->scsi_lookup[i].scmd->device->channel == channel)) { in _scsih_scsi_lookup_find_by_target()
1154 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_target()
1170 _scsih_scsi_lookup_find_by_lun(struct MPT3SAS_ADAPTER *ioc, int id, in _scsih_scsi_lookup_find_by_lun() argument
1177 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_lun()
1179 for (i = 0 ; i < ioc->scsiio_depth; i++) { in _scsih_scsi_lookup_find_by_lun()
1180 if (ioc->scsi_lookup[i].scmd && in _scsih_scsi_lookup_find_by_lun()
1181 (ioc->scsi_lookup[i].scmd->device->id == id && in _scsih_scsi_lookup_find_by_lun()
1182 ioc->scsi_lookup[i].scmd->device->channel == channel && in _scsih_scsi_lookup_find_by_lun()
1183 ioc->scsi_lookup[i].scmd->device->lun == lun)) { in _scsih_scsi_lookup_find_by_lun()
1189 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_lun()
1205 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_change_queue_depth() local
1223 spin_lock_irqsave(&ioc->sas_device_lock, flags); in scsih_change_queue_depth()
1224 sas_device = __mpt3sas_get_sdev_from_target(ioc, sas_target_priv_data); in scsih_change_queue_depth()
1231 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in scsih_change_queue_depth()
1253 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_target_alloc() local
1271 spin_lock_irqsave(&ioc->raid_device_lock, flags); in scsih_target_alloc()
1272 raid_device = _scsih_raid_device_find_by_id(ioc, starget->id, in scsih_target_alloc()
1279 if (ioc->is_warpdrive) in scsih_target_alloc()
1282 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in scsih_target_alloc()
1287 spin_lock_irqsave(&ioc->sas_device_lock, flags); in scsih_target_alloc()
1289 sas_device = __mpt3sas_get_sdev_by_addr(ioc, in scsih_target_alloc()
1299 if (test_bit(sas_device->handle, ioc->pd_handles)) in scsih_target_alloc()
1305 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in scsih_target_alloc()
1320 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_target_destroy() local
1332 spin_lock_irqsave(&ioc->raid_device_lock, flags); in scsih_target_destroy()
1333 raid_device = _scsih_raid_device_find_by_id(ioc, starget->id, in scsih_target_destroy()
1339 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in scsih_target_destroy()
1343 spin_lock_irqsave(&ioc->sas_device_lock, flags); in scsih_target_destroy()
1345 sas_device = __mpt3sas_get_sdev_from_target(ioc, sas_target_priv_data); in scsih_target_destroy()
1360 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in scsih_target_destroy()
1378 struct MPT3SAS_ADAPTER *ioc; in scsih_slave_alloc() local
1403 ioc = shost_priv(shost); in scsih_slave_alloc()
1405 spin_lock_irqsave(&ioc->raid_device_lock, flags); in scsih_slave_alloc()
1406 raid_device = _scsih_raid_device_find_by_id(ioc, in scsih_slave_alloc()
1410 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in scsih_slave_alloc()
1414 spin_lock_irqsave(&ioc->sas_device_lock, flags); in scsih_slave_alloc()
1415 sas_device = __mpt3sas_get_sdev_by_addr(ioc, in scsih_slave_alloc()
1427 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in scsih_slave_alloc()
1445 struct MPT3SAS_ADAPTER *ioc; in scsih_slave_destroy() local
1457 ioc = shost_priv(shost); in scsih_slave_destroy()
1460 spin_lock_irqsave(&ioc->sas_device_lock, flags); in scsih_slave_destroy()
1461 sas_device = __mpt3sas_get_sdev_from_target(ioc, in scsih_slave_destroy()
1468 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in scsih_slave_destroy()
1482 _scsih_display_sata_capabilities(struct MPT3SAS_ADAPTER *ioc, in _scsih_display_sata_capabilities() argument
1491 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_display_sata_capabilities()
1494 ioc->name, __FILE__, __LINE__, __func__); in _scsih_display_sata_capabilities()
1502 ioc->name, __FILE__, __LINE__, __func__); in _scsih_display_sata_capabilities()
1536 struct MPT3SAS_ADAPTER *ioc = shost_priv(sdev->host); in scsih_is_raid() local
1538 if (ioc->is_warpdrive) in scsih_is_raid()
1551 struct MPT3SAS_ADAPTER *ioc = shost_priv(sdev->host); in scsih_get_resync() local
1562 if (ioc->is_warpdrive) in scsih_get_resync()
1565 spin_lock_irqsave(&ioc->raid_device_lock, flags); in scsih_get_resync()
1566 raid_device = _scsih_raid_device_find_by_id(ioc, sdev->id, in scsih_get_resync()
1572 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in scsih_get_resync()
1577 if (mpt3sas_config_get_raid_volume_pg0(ioc, &mpi_reply, &vol_pg0, in scsih_get_resync()
1581 ioc->name, __FILE__, __LINE__, __func__); in scsih_get_resync()
1592 if (ioc->hba_mpi_version_belonged == MPI2_VERSION) in scsih_get_resync()
1594 if (ioc->hba_mpi_version_belonged == MPI25_VERSION) in scsih_get_resync()
1606 struct MPT3SAS_ADAPTER *ioc = shost_priv(sdev->host); in scsih_get_state() local
1615 spin_lock_irqsave(&ioc->raid_device_lock, flags); in scsih_get_state()
1616 raid_device = _scsih_raid_device_find_by_id(ioc, sdev->id, in scsih_get_state()
1620 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in scsih_get_state()
1625 if (mpt3sas_config_get_raid_volume_pg0(ioc, &mpi_reply, &vol_pg0, in scsih_get_state()
1629 ioc->name, __FILE__, __LINE__, __func__); in scsih_get_state()
1653 if (ioc->hba_mpi_version_belonged == MPI2_VERSION) in scsih_get_state()
1655 if (ioc->hba_mpi_version_belonged == MPI25_VERSION) in scsih_get_state()
1665 _scsih_set_level(struct MPT3SAS_ADAPTER *ioc, in _scsih_set_level() argument
1685 if (ioc->hba_mpi_version_belonged == MPI2_VERSION) in _scsih_set_level()
1688 if (ioc->hba_mpi_version_belonged == MPI25_VERSION) in _scsih_set_level()
1702 _scsih_get_volume_capabilities(struct MPT3SAS_ADAPTER *ioc, in _scsih_get_volume_capabilities() argument
1712 if ((mpt3sas_config_get_number_pds(ioc, raid_device->handle, in _scsih_get_volume_capabilities()
1714 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in _scsih_get_volume_capabilities()
1715 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, __LINE__, in _scsih_get_volume_capabilities()
1725 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in _scsih_get_volume_capabilities()
1726 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, __LINE__, in _scsih_get_volume_capabilities()
1731 if ((mpt3sas_config_get_raid_volume_pg0(ioc, &mpi_reply, vol_pg0, in _scsih_get_volume_capabilities()
1733 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in _scsih_get_volume_capabilities()
1734 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, __LINE__, in _scsih_get_volume_capabilities()
1745 if (!(mpt3sas_config_get_phys_disk_pg0(ioc, &mpi_reply, in _scsih_get_volume_capabilities()
1748 if (!(mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_get_volume_capabilities()
1770 _scsih_enable_tlr(struct MPT3SAS_ADAPTER *ioc, struct scsi_device *sdev) in _scsih_enable_tlr() argument
1777 if (!(ioc->facts.IOCCapabilities & MPI2_IOCFACTS_CAPABILITY_TLR)) in _scsih_enable_tlr()
1798 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_slave_configure() local
1821 spin_lock_irqsave(&ioc->raid_device_lock, flags); in scsih_slave_configure()
1822 raid_device = mpt3sas_raid_device_find_by_handle(ioc, handle); in scsih_slave_configure()
1823 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in scsih_slave_configure()
1825 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in scsih_slave_configure()
1826 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, in scsih_slave_configure()
1831 if (_scsih_get_volume_capabilities(ioc, raid_device)) { in scsih_slave_configure()
1832 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in scsih_slave_configure()
1833 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, in scsih_slave_configure()
1841 mpt3sas_init_warpdrive_properties(ioc, raid_device); in scsih_slave_configure()
1867 if (ioc->manu_pg10.OEMIdentifier && in scsih_slave_configure()
1868 (le32_to_cpu(ioc->manu_pg10.GenericFlags0) & in scsih_slave_configure()
1890 if (!ioc->hide_ir_msg) in scsih_slave_configure()
1901 if (!ioc->is_warpdrive) in scsih_slave_configure()
1902 _scsih_set_level(ioc, sdev, raid_device->volume_type); in scsih_slave_configure()
1908 if (mpt3sas_config_get_volume_handle(ioc, handle, in scsih_slave_configure()
1910 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in scsih_slave_configure()
1911 "failure at %s:%d/%s()!\n", ioc->name, in scsih_slave_configure()
1915 if (volume_handle && mpt3sas_config_get_volume_wwid(ioc, in scsih_slave_configure()
1917 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in scsih_slave_configure()
1918 "failure at %s:%d/%s()!\n", ioc->name, in scsih_slave_configure()
1924 spin_lock_irqsave(&ioc->sas_device_lock, flags); in scsih_slave_configure()
1925 sas_device = __mpt3sas_get_sdev_by_addr(ioc, in scsih_slave_configure()
1928 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in scsih_slave_configure()
1929 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in scsih_slave_configure()
1930 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, __LINE__, in scsih_slave_configure()
1966 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in scsih_slave_configure()
1969 _scsih_display_sata_capabilities(ioc, handle, sdev); in scsih_slave_configure()
1976 _scsih_enable_tlr(ioc, sdev); in scsih_slave_configure()
2038 _scsih_response_code(struct MPT3SAS_ADAPTER *ioc, u8 response_code) in _scsih_response_code() argument
2072 ioc->name, response_code, desc); in _scsih_response_code()
2089 _scsih_tm_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply) in _scsih_tm_done() argument
2093 if (ioc->tm_cmds.status == MPT3_CMD_NOT_USED) in _scsih_tm_done()
2095 if (ioc->tm_cmds.smid != smid) in _scsih_tm_done()
2097 mpt3sas_base_flush_reply_queues(ioc); in _scsih_tm_done()
2098 ioc->tm_cmds.status |= MPT3_CMD_COMPLETE; in _scsih_tm_done()
2099 mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_tm_done()
2101 memcpy(ioc->tm_cmds.reply, mpi_reply, mpi_reply->MsgLength*4); in _scsih_tm_done()
2102 ioc->tm_cmds.status |= MPT3_CMD_REPLY_VALID; in _scsih_tm_done()
2104 ioc->tm_cmds.status &= ~MPT3_CMD_PENDING; in _scsih_tm_done()
2105 complete(&ioc->tm_cmds.done); in _scsih_tm_done()
2117 mpt3sas_scsih_set_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle) in mpt3sas_scsih_set_tm_flag() argument
2123 shost_for_each_device(sdev, ioc->shost) { in mpt3sas_scsih_set_tm_flag()
2132 ioc->ignore_loginfos = 1; in mpt3sas_scsih_set_tm_flag()
2145 mpt3sas_scsih_clear_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle) in mpt3sas_scsih_clear_tm_flag() argument
2151 shost_for_each_device(sdev, ioc->shost) { in mpt3sas_scsih_clear_tm_flag()
2160 ioc->ignore_loginfos = 0; in mpt3sas_scsih_clear_tm_flag()
2185 mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle, uint channel, in mpt3sas_scsih_issue_tm() argument
2198 mutex_lock(&ioc->tm_cmds.mutex); in mpt3sas_scsih_issue_tm()
2199 if (ioc->tm_cmds.status != MPT3_CMD_NOT_USED) { in mpt3sas_scsih_issue_tm()
2201 __func__, ioc->name); in mpt3sas_scsih_issue_tm()
2206 if (ioc->shost_recovery || ioc->remove_host || in mpt3sas_scsih_issue_tm()
2207 ioc->pci_error_recovery) { in mpt3sas_scsih_issue_tm()
2209 __func__, ioc->name); in mpt3sas_scsih_issue_tm()
2214 ioc_state = mpt3sas_base_get_iocstate(ioc, 0); in mpt3sas_scsih_issue_tm()
2216 dhsprintk(ioc, pr_info(MPT3SAS_FMT in mpt3sas_scsih_issue_tm()
2217 "unexpected doorbell active!\n", ioc->name)); in mpt3sas_scsih_issue_tm()
2218 rc = mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP, in mpt3sas_scsih_issue_tm()
2225 mpt3sas_base_fault_info(ioc, ioc_state & in mpt3sas_scsih_issue_tm()
2227 rc = mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP, in mpt3sas_scsih_issue_tm()
2233 smid = mpt3sas_base_get_smid_hpr(ioc, ioc->tm_cb_idx); in mpt3sas_scsih_issue_tm()
2236 ioc->name, __func__); in mpt3sas_scsih_issue_tm()
2242 scsi_lookup = &ioc->scsi_lookup[smid_task - 1]; in mpt3sas_scsih_issue_tm()
2244 dtmprintk(ioc, pr_info(MPT3SAS_FMT in mpt3sas_scsih_issue_tm()
2246 ioc->name, handle, type, smid_task)); in mpt3sas_scsih_issue_tm()
2247 ioc->tm_cmds.status = MPT3_CMD_PENDING; in mpt3sas_scsih_issue_tm()
2248 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in mpt3sas_scsih_issue_tm()
2249 ioc->tm_cmds.smid = smid; in mpt3sas_scsih_issue_tm()
2251 memset(ioc->tm_cmds.reply, 0, sizeof(Mpi2SCSITaskManagementReply_t)); in mpt3sas_scsih_issue_tm()
2257 mpt3sas_scsih_set_tm_flag(ioc, handle); in mpt3sas_scsih_issue_tm()
2258 init_completion(&ioc->tm_cmds.done); in mpt3sas_scsih_issue_tm()
2259 mpt3sas_base_put_smid_hi_priority(ioc, smid); in mpt3sas_scsih_issue_tm()
2260 timeleft = wait_for_completion_timeout(&ioc->tm_cmds.done, timeout*HZ); in mpt3sas_scsih_issue_tm()
2261 if (!(ioc->tm_cmds.status & MPT3_CMD_COMPLETE)) { in mpt3sas_scsih_issue_tm()
2263 ioc->name, __func__); in mpt3sas_scsih_issue_tm()
2266 if (!(ioc->tm_cmds.status & MPT3_CMD_RESET)) { in mpt3sas_scsih_issue_tm()
2267 rc = mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP, in mpt3sas_scsih_issue_tm()
2270 ioc->tm_cmds.status = MPT3_CMD_NOT_USED; in mpt3sas_scsih_issue_tm()
2271 mpt3sas_scsih_clear_tm_flag(ioc, handle); in mpt3sas_scsih_issue_tm()
2276 if (ioc->tm_cmds.status & MPT3_CMD_REPLY_VALID) { in mpt3sas_scsih_issue_tm()
2277 mpt3sas_trigger_master(ioc, MASTER_TRIGGER_TASK_MANAGMENT); in mpt3sas_scsih_issue_tm()
2278 mpi_reply = ioc->tm_cmds.reply; in mpt3sas_scsih_issue_tm()
2279 dtmprintk(ioc, pr_info(MPT3SAS_FMT "complete tm: " \ in mpt3sas_scsih_issue_tm()
2281 ioc->name, le16_to_cpu(mpi_reply->IOCStatus), in mpt3sas_scsih_issue_tm()
2284 if (ioc->logging_level & MPT_DEBUG_TM) { in mpt3sas_scsih_issue_tm()
2285 _scsih_response_code(ioc, mpi_reply->ResponseCode); in mpt3sas_scsih_issue_tm()
2301 if (_scsih_scsi_lookup_find_by_target(ioc, id, channel)) in mpt3sas_scsih_issue_tm()
2308 if (_scsih_scsi_lookup_find_by_lun(ioc, id, lun, channel)) in mpt3sas_scsih_issue_tm()
2321 mpt3sas_scsih_clear_tm_flag(ioc, handle); in mpt3sas_scsih_issue_tm()
2322 ioc->tm_cmds.status = MPT3_CMD_NOT_USED; in mpt3sas_scsih_issue_tm()
2324 mutex_unlock(&ioc->tm_cmds.mutex); in mpt3sas_scsih_issue_tm()
2330 mutex_unlock(&ioc->tm_cmds.mutex); in mpt3sas_scsih_issue_tm()
2342 _scsih_tm_display_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd) in _scsih_tm_display_info() argument
2352 if (ioc->hide_ir_msg) in _scsih_tm_display_info()
2364 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_tm_display_info()
2365 sas_device = __mpt3sas_get_sdev_from_target(ioc, priv_target); in _scsih_tm_display_info()
2394 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_tm_display_info()
2407 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in scsih_abort() local
2415 _scsih_tm_display_info(ioc, scmd); in scsih_abort()
2428 smid = _scsih_scsi_lookup_find_by_scmd(ioc, scmd); in scsih_abort()
2444 mpt3sas_halt_firmware(ioc); in scsih_abort()
2447 r = mpt3sas_scsih_issue_tm(ioc, handle, scmd->device->channel, in scsih_abort()
2466 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in scsih_dev_reset() local
2477 _scsih_tm_display_info(ioc, scmd); in scsih_dev_reset()
2493 sas_device = mpt3sas_get_sdev_from_target(ioc, in scsih_dev_reset()
2506 r = mpt3sas_scsih_issue_tm(ioc, handle, scmd->device->channel, in scsih_dev_reset()
2529 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in scsih_target_reset() local
2539 _scsih_tm_display_info(ioc, scmd); in scsih_target_reset()
2555 sas_device = mpt3sas_get_sdev_from_target(ioc, in scsih_target_reset()
2568 r = mpt3sas_scsih_issue_tm(ioc, handle, scmd->device->channel, in scsih_target_reset()
2592 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in scsih_host_reset() local
2596 ioc->name, scmd); in scsih_host_reset()
2599 if (ioc->is_driver_loading) { in scsih_host_reset()
2601 ioc->name); in scsih_host_reset()
2606 retval = mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP, in scsih_host_reset()
2611 ioc->name, ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd); in scsih_host_reset()
2628 _scsih_fw_event_add(struct MPT3SAS_ADAPTER *ioc, struct fw_event_work *fw_event) in _scsih_fw_event_add() argument
2632 if (ioc->firmware_event_thread == NULL) in _scsih_fw_event_add()
2635 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_fw_event_add()
2638 list_add_tail(&fw_event->list, &ioc->fw_event_list); in _scsih_fw_event_add()
2641 queue_work(ioc->firmware_event_thread, &fw_event->work); in _scsih_fw_event_add()
2642 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_fw_event_add()
2656 _scsih_fw_event_del_from_list(struct MPT3SAS_ADAPTER *ioc, struct fw_event_work in _scsih_fw_event_del_from_list() argument
2661 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_fw_event_del_from_list()
2666 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_fw_event_del_from_list()
2678 mpt3sas_send_trigger_data_event(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_send_trigger_data_event() argument
2684 if (ioc->is_driver_loading) in mpt3sas_send_trigger_data_event()
2691 fw_event->ioc = ioc; in mpt3sas_send_trigger_data_event()
2693 _scsih_fw_event_add(ioc, fw_event); in mpt3sas_send_trigger_data_event()
2704 _scsih_error_recovery_delete_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_error_recovery_delete_devices() argument
2708 if (ioc->is_driver_loading) in _scsih_error_recovery_delete_devices()
2714 fw_event->ioc = ioc; in _scsih_error_recovery_delete_devices()
2715 _scsih_fw_event_add(ioc, fw_event); in _scsih_error_recovery_delete_devices()
2726 mpt3sas_port_enable_complete(struct MPT3SAS_ADAPTER *ioc) in mpt3sas_port_enable_complete() argument
2734 fw_event->ioc = ioc; in mpt3sas_port_enable_complete()
2735 _scsih_fw_event_add(ioc, fw_event); in mpt3sas_port_enable_complete()
2739 static struct fw_event_work *dequeue_next_fw_event(struct MPT3SAS_ADAPTER *ioc) in dequeue_next_fw_event() argument
2744 spin_lock_irqsave(&ioc->fw_event_lock, flags); in dequeue_next_fw_event()
2745 if (!list_empty(&ioc->fw_event_list)) { in dequeue_next_fw_event()
2746 fw_event = list_first_entry(&ioc->fw_event_list, in dequeue_next_fw_event()
2750 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in dequeue_next_fw_event()
2765 _scsih_fw_event_cleanup_queue(struct MPT3SAS_ADAPTER *ioc) in _scsih_fw_event_cleanup_queue() argument
2769 if (list_empty(&ioc->fw_event_list) || in _scsih_fw_event_cleanup_queue()
2770 !ioc->firmware_event_thread || in_interrupt()) in _scsih_fw_event_cleanup_queue()
2773 while ((fw_event = dequeue_next_fw_event(ioc))) { in _scsih_fw_event_cleanup_queue()
2865 _scsih_ublock_io_all_device(struct MPT3SAS_ADAPTER *ioc) in _scsih_ublock_io_all_device() argument
2870 shost_for_each_device(sdev, ioc->shost) { in _scsih_ublock_io_all_device()
2877 dewtprintk(ioc, sdev_printk(KERN_INFO, sdev, in _scsih_ublock_io_all_device()
2893 _scsih_ublock_io_device(struct MPT3SAS_ADAPTER *ioc, u64 sas_address) in _scsih_ublock_io_device() argument
2898 shost_for_each_device(sdev, ioc->shost) { in _scsih_ublock_io_device()
2919 _scsih_block_io_all_device(struct MPT3SAS_ADAPTER *ioc) in _scsih_block_io_all_device() argument
2924 shost_for_each_device(sdev, ioc->shost) { in _scsih_block_io_all_device()
2942 _scsih_block_io_device(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_block_io_device() argument
2948 sas_device = mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_block_io_device()
2952 shost_for_each_device(sdev, ioc->shost) { in _scsih_block_io_device()
2978 _scsih_block_io_to_children_attached_to_ex(struct MPT3SAS_ADAPTER *ioc, in _scsih_block_io_to_children_attached_to_ex() argument
2993 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_block_io_to_children_attached_to_ex()
2994 sas_device = __mpt3sas_get_sdev_by_addr(ioc, in _scsih_block_io_to_children_attached_to_ex()
2998 ioc->blocking_handles); in _scsih_block_io_to_children_attached_to_ex()
3001 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_block_io_to_children_attached_to_ex()
3014 ioc, mpt3sas_port->remote_identify.sas_address); in _scsih_block_io_to_children_attached_to_ex()
3015 _scsih_block_io_to_children_attached_to_ex(ioc, in _scsih_block_io_to_children_attached_to_ex()
3030 _scsih_block_io_to_children_attached_directly(struct MPT3SAS_ADAPTER *ioc, in _scsih_block_io_to_children_attached_directly() argument
3044 _scsih_block_io_device(ioc, handle); in _scsih_block_io_to_children_attached_directly()
3064 _scsih_tm_tr_send(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_tm_tr_send() argument
3075 if (ioc->remove_host) { in _scsih_tm_tr_send()
3076 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_send()
3078 __func__, ioc->name, handle)); in _scsih_tm_tr_send()
3080 } else if (ioc->pci_error_recovery) { in _scsih_tm_tr_send()
3081 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_send()
3083 __func__, ioc->name, in _scsih_tm_tr_send()
3087 ioc_state = mpt3sas_base_get_iocstate(ioc, 1); in _scsih_tm_tr_send()
3089 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_send()
3091 __func__, ioc->name, in _scsih_tm_tr_send()
3097 if (test_bit(handle, ioc->pd_handles)) in _scsih_tm_tr_send()
3100 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_tm_tr_send()
3101 sas_device = __mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_tm_tr_send()
3108 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_tm_tr_send()
3111 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_send()
3113 ioc->name, handle, in _scsih_tm_tr_send()
3116 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_send()
3118 " slot(%d)\n", ioc->name, (unsigned long long) in _scsih_tm_tr_send()
3122 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_send()
3124 " connector name( %s)\n", ioc->name, in _scsih_tm_tr_send()
3127 _scsih_ublock_io_device(ioc, sas_address); in _scsih_tm_tr_send()
3131 smid = mpt3sas_base_get_smid_hpr(ioc, ioc->tm_tr_cb_idx); in _scsih_tm_tr_send()
3138 list_add_tail(&delayed_tr->list, &ioc->delayed_tr_list); in _scsih_tm_tr_send()
3139 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_send()
3141 ioc->name, handle)); in _scsih_tm_tr_send()
3145 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_send()
3147 ioc->name, handle, smid, in _scsih_tm_tr_send()
3148 ioc->tm_tr_cb_idx)); in _scsih_tm_tr_send()
3149 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_tm_tr_send()
3154 mpt3sas_base_put_smid_hi_priority(ioc, smid); in _scsih_tm_tr_send()
3155 mpt3sas_trigger_master(ioc, MASTER_TRIGGER_DEVICE_REMOVAL); in _scsih_tm_tr_send()
3179 _scsih_tm_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, in _scsih_tm_tr_complete() argument
3185 mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_tm_tr_complete()
3190 if (ioc->remove_host) { in _scsih_tm_tr_complete()
3191 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_complete()
3192 "%s: host has been removed\n", __func__, ioc->name)); in _scsih_tm_tr_complete()
3194 } else if (ioc->pci_error_recovery) { in _scsih_tm_tr_complete()
3195 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_complete()
3197 ioc->name)); in _scsih_tm_tr_complete()
3200 ioc_state = mpt3sas_base_get_iocstate(ioc, 1); in _scsih_tm_tr_complete()
3202 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_complete()
3203 "%s: host is not operational\n", __func__, ioc->name)); in _scsih_tm_tr_complete()
3208 ioc->name, __FILE__, __LINE__, __func__); in _scsih_tm_tr_complete()
3211 mpi_request_tm = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_tm_tr_complete()
3214 dewtprintk(ioc, pr_err(MPT3SAS_FMT in _scsih_tm_tr_complete()
3216 ioc->name, handle, in _scsih_tm_tr_complete()
3221 mpt3sas_trigger_master(ioc, MASTER_TRIGGER_TASK_MANAGMENT); in _scsih_tm_tr_complete()
3222 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_complete()
3224 "loginfo(0x%08x), completed(%d)\n", ioc->name, in _scsih_tm_tr_complete()
3229 smid_sas_ctrl = mpt3sas_base_get_smid(ioc, ioc->tm_sas_control_cb_idx); in _scsih_tm_tr_complete()
3232 ioc->name, __func__); in _scsih_tm_tr_complete()
3236 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_complete()
3238 ioc->name, handle, smid_sas_ctrl, in _scsih_tm_tr_complete()
3239 ioc->tm_sas_control_cb_idx)); in _scsih_tm_tr_complete()
3240 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid_sas_ctrl); in _scsih_tm_tr_complete()
3245 mpt3sas_base_put_smid_default(ioc, smid_sas_ctrl); in _scsih_tm_tr_complete()
3247 return _scsih_check_for_pending_tm(ioc, smid); in _scsih_tm_tr_complete()
3267 _scsih_sas_control_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, in _scsih_sas_control_complete() argument
3271 mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_sas_control_complete()
3274 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_control_complete()
3277 ioc->name, le16_to_cpu(mpi_reply->DevHandle), smid, in _scsih_sas_control_complete()
3282 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_control_complete()
3298 _scsih_tm_tr_volume_send(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_tm_tr_volume_send() argument
3304 if (ioc->shost_recovery || ioc->remove_host || in _scsih_tm_tr_volume_send()
3305 ioc->pci_error_recovery) { in _scsih_tm_tr_volume_send()
3306 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_volume_send()
3308 __func__, ioc->name)); in _scsih_tm_tr_volume_send()
3312 smid = mpt3sas_base_get_smid_hpr(ioc, ioc->tm_tr_volume_cb_idx); in _scsih_tm_tr_volume_send()
3319 list_add_tail(&delayed_tr->list, &ioc->delayed_tr_volume_list); in _scsih_tm_tr_volume_send()
3320 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_volume_send()
3322 ioc->name, handle)); in _scsih_tm_tr_volume_send()
3326 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_volume_send()
3328 ioc->name, handle, smid, in _scsih_tm_tr_volume_send()
3329 ioc->tm_tr_volume_cb_idx)); in _scsih_tm_tr_volume_send()
3330 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_tm_tr_volume_send()
3335 mpt3sas_base_put_smid_hi_priority(ioc, smid); in _scsih_tm_tr_volume_send()
3350 _scsih_tm_volume_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, in _scsih_tm_volume_tr_complete() argument
3356 mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_tm_volume_tr_complete()
3358 if (ioc->shost_recovery || ioc->remove_host || in _scsih_tm_volume_tr_complete()
3359 ioc->pci_error_recovery) { in _scsih_tm_volume_tr_complete()
3360 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_volume_tr_complete()
3362 __func__, ioc->name)); in _scsih_tm_volume_tr_complete()
3367 ioc->name, __FILE__, __LINE__, __func__); in _scsih_tm_volume_tr_complete()
3371 mpi_request_tm = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_tm_volume_tr_complete()
3374 dewtprintk(ioc, pr_err(MPT3SAS_FMT in _scsih_tm_volume_tr_complete()
3376 ioc->name, handle, in _scsih_tm_volume_tr_complete()
3381 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_volume_tr_complete()
3383 "loginfo(0x%08x), completed(%d)\n", ioc->name, in _scsih_tm_volume_tr_complete()
3388 return _scsih_check_for_pending_tm(ioc, smid); in _scsih_tm_volume_tr_complete()
3404 _scsih_check_for_pending_tm(struct MPT3SAS_ADAPTER *ioc, u16 smid) in _scsih_check_for_pending_tm() argument
3408 if (!list_empty(&ioc->delayed_tr_volume_list)) { in _scsih_check_for_pending_tm()
3409 delayed_tr = list_entry(ioc->delayed_tr_volume_list.next, in _scsih_check_for_pending_tm()
3411 mpt3sas_base_free_smid(ioc, smid); in _scsih_check_for_pending_tm()
3412 _scsih_tm_tr_volume_send(ioc, delayed_tr->handle); in _scsih_check_for_pending_tm()
3418 if (!list_empty(&ioc->delayed_tr_list)) { in _scsih_check_for_pending_tm()
3419 delayed_tr = list_entry(ioc->delayed_tr_list.next, in _scsih_check_for_pending_tm()
3421 mpt3sas_base_free_smid(ioc, smid); in _scsih_check_for_pending_tm()
3422 _scsih_tm_tr_send(ioc, delayed_tr->handle); in _scsih_check_for_pending_tm()
3445 _scsih_check_topo_delete_events(struct MPT3SAS_ADAPTER *ioc, in _scsih_check_topo_delete_events() argument
3463 _scsih_tm_tr_send(ioc, handle); in _scsih_check_topo_delete_events()
3467 if (expander_handle < ioc->sas_hba.num_phys) { in _scsih_check_topo_delete_events()
3468 _scsih_block_io_to_children_attached_directly(ioc, event_data); in _scsih_check_topo_delete_events()
3474 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_check_topo_delete_events()
3475 sas_expander = mpt3sas_scsih_expander_find_by_handle(ioc, in _scsih_check_topo_delete_events()
3477 _scsih_block_io_to_children_attached_to_ex(ioc, sas_expander); in _scsih_check_topo_delete_events()
3478 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_check_topo_delete_events()
3480 handle = find_first_bit(ioc->blocking_handles, in _scsih_check_topo_delete_events()
3481 ioc->facts.MaxDevHandle); in _scsih_check_topo_delete_events()
3482 if (handle < ioc->facts.MaxDevHandle) in _scsih_check_topo_delete_events()
3483 _scsih_block_io_device(ioc, handle); in _scsih_check_topo_delete_events()
3484 } while (test_and_clear_bit(handle, ioc->blocking_handles)); in _scsih_check_topo_delete_events()
3486 _scsih_block_io_to_children_attached_directly(ioc, event_data); in _scsih_check_topo_delete_events()
3492 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_check_topo_delete_events()
3493 list_for_each_entry(fw_event, &ioc->fw_event_list, list) { in _scsih_check_topo_delete_events()
3505 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_check_topo_delete_events()
3506 "setting ignoring flag\n", ioc->name)); in _scsih_check_topo_delete_events()
3511 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_check_topo_delete_events()
3522 _scsih_set_volume_delete_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_set_volume_delete_flag() argument
3528 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_set_volume_delete_flag()
3529 raid_device = mpt3sas_raid_device_find_by_handle(ioc, handle); in _scsih_set_volume_delete_flag()
3535 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_set_volume_delete_flag()
3537 "wwid(0x%016llx)\n", ioc->name, handle, in _scsih_set_volume_delete_flag()
3540 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_set_volume_delete_flag()
3579 _scsih_check_ir_config_unhide_events(struct MPT3SAS_ADAPTER *ioc, in _scsih_check_ir_config_unhide_events() argument
3590 if (ioc->is_warpdrive) in _scsih_check_ir_config_unhide_events()
3604 _scsih_set_volume_delete_flag(ioc, volume_handle); in _scsih_check_ir_config_unhide_events()
3622 _scsih_tm_tr_volume_send(ioc, a); in _scsih_check_ir_config_unhide_events()
3624 _scsih_tm_tr_volume_send(ioc, b); in _scsih_check_ir_config_unhide_events()
3633 clear_bit(handle, ioc->pd_handles); in _scsih_check_ir_config_unhide_events()
3635 _scsih_tm_tr_send(ioc, handle); in _scsih_check_ir_config_unhide_events()
3641 list_add_tail(&delayed_tr->list, &ioc->delayed_tr_list); in _scsih_check_ir_config_unhide_events()
3642 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_check_ir_config_unhide_events()
3643 "DELAYED:tr:handle(0x%04x), (open)\n", ioc->name, in _scsih_check_ir_config_unhide_events()
3646 _scsih_tm_tr_send(ioc, handle); in _scsih_check_ir_config_unhide_events()
3664 _scsih_check_volume_delete_events(struct MPT3SAS_ADAPTER *ioc, in _scsih_check_volume_delete_events() argument
3674 _scsih_set_volume_delete_flag(ioc, in _scsih_check_volume_delete_events()
3687 _scsih_temp_threshold_events(struct MPT3SAS_ADAPTER *ioc, in _scsih_temp_threshold_events() argument
3690 if (ioc->temp_sensors_count >= event_data->SensorNum) { in _scsih_temp_threshold_events()
3692 " exceeded for Sensor: %d !!!\n", ioc->name, in _scsih_temp_threshold_events()
3699 ioc->name, event_data->CurrentTemperature); in _scsih_temp_threshold_events()
3713 _scsih_flush_running_cmds(struct MPT3SAS_ADAPTER *ioc) in _scsih_flush_running_cmds() argument
3719 for (smid = 1; smid <= ioc->scsiio_depth; smid++) { in _scsih_flush_running_cmds()
3720 scmd = _scsih_scsi_lookup_get_clear(ioc, smid); in _scsih_flush_running_cmds()
3724 mpt3sas_base_free_smid(ioc, smid); in _scsih_flush_running_cmds()
3726 if (ioc->pci_error_recovery) in _scsih_flush_running_cmds()
3732 dtmprintk(ioc, pr_info(MPT3SAS_FMT "completing %d cmds\n", in _scsih_flush_running_cmds()
3733 ioc->name, count)); in _scsih_flush_running_cmds()
3747 _scsih_setup_eedp(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, in _scsih_setup_eedp() argument
3844 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_qcmd() local
3853 if (ioc->logging_level & MPT_DEBUG_SCSI) in scsih_qcmd()
3863 if (ioc->pci_error_recovery || ioc->remove_host) { in scsih_qcmd()
3881 if (ioc->shost_recovery || ioc->ioc_link_reset_in_progress) in scsih_qcmd()
3907 if (!ioc->is_warpdrive && !scsih_is_raid(&scmd->device->sdev_gendev) in scsih_qcmd()
3911 smid = mpt3sas_base_get_smid_scsiio(ioc, ioc->scsi_io_cb_idx, scmd); in scsih_qcmd()
3914 ioc->name, __func__); in scsih_qcmd()
3917 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in scsih_qcmd()
3919 _scsih_setup_eedp(ioc, scmd, mpi_request); in scsih_qcmd()
3936 mpt3sas_base_get_sense_buffer_dma(ioc, smid); in scsih_qcmd()
3943 if (ioc->build_sg_scmd(ioc, scmd, smid)) { in scsih_qcmd()
3944 mpt3sas_base_free_smid(ioc, smid); in scsih_qcmd()
3948 ioc->build_zero_len_sge(ioc, &mpi_request->SGL); in scsih_qcmd()
3952 mpt3sas_setup_direct_io(ioc, scmd, raid_device, mpi_request, in scsih_qcmd()
3959 mpt3sas_base_put_smid_fast_path(ioc, smid, handle); in scsih_qcmd()
3961 mpt3sas_base_put_smid_scsi_io(ioc, smid, in scsih_qcmd()
3964 mpt3sas_base_put_smid_default(ioc, smid); in scsih_qcmd()
4007 _scsih_scsi_ioc_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, in _scsih_scsi_ioc_info() argument
4018 char *desc_scsi_state = ioc->tmp_string; in _scsih_scsi_ioc_info()
4027 if (ioc->hide_ir_msg) in _scsih_scsi_ioc_info()
4148 pr_warn(MPT3SAS_FMT "\t%s wwid(0x%016llx)\n", ioc->name, in _scsih_scsi_ioc_info()
4151 sas_device = mpt3sas_get_sdev_from_target(ioc, priv_target); in _scsih_scsi_ioc_info()
4155 ioc->name, (unsigned long long) in _scsih_scsi_ioc_info()
4160 "slot(%d)\n", ioc->name, in _scsih_scsi_ioc_info()
4167 " connector name( %s)\n", ioc->name, in _scsih_scsi_ioc_info()
4177 ioc->name, le16_to_cpu(mpi_reply->DevHandle), in _scsih_scsi_ioc_info()
4181 ioc->name, scsi_bufflen(scmd), scmd->underflow, in _scsih_scsi_ioc_info()
4185 ioc->name, le16_to_cpu(mpi_reply->TaskTag), in _scsih_scsi_ioc_info()
4189 ioc->name, desc_scsi_status, in _scsih_scsi_ioc_info()
4197 ioc->name, data.skey, in _scsih_scsi_ioc_info()
4204 _scsih_response_code(ioc, response_bytes[0]); in _scsih_scsi_ioc_info()
4217 _scsih_turn_on_pfa_led(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_turn_on_pfa_led() argument
4223 sas_device = mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_turn_on_pfa_led()
4234 if ((mpt3sas_base_scsi_enclosure_processor(ioc, &mpi_reply, in _scsih_turn_on_pfa_led()
4236 pr_err(MPT3SAS_FMT "failure at %s:%d/%s()!\n", ioc->name, in _scsih_turn_on_pfa_led()
4243 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_turn_on_pfa_led()
4245 ioc->name, le16_to_cpu(mpi_reply.IOCStatus), in _scsih_turn_on_pfa_led()
4262 _scsih_turn_off_pfa_led(struct MPT3SAS_ADAPTER *ioc, in _scsih_turn_off_pfa_led() argument
4276 if ((mpt3sas_base_scsi_enclosure_processor(ioc, &mpi_reply, in _scsih_turn_off_pfa_led()
4278 printk(MPT3SAS_FMT "failure at %s:%d/%s()!\n", ioc->name, in _scsih_turn_off_pfa_led()
4284 dewtprintk(ioc, printk(MPT3SAS_FMT in _scsih_turn_off_pfa_led()
4286 ioc->name, le16_to_cpu(mpi_reply.IOCStatus), in _scsih_turn_off_pfa_led()
4301 _scsih_send_event_to_turn_on_pfa_led(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_send_event_to_turn_on_pfa_led() argument
4310 fw_event->ioc = ioc; in _scsih_send_event_to_turn_on_pfa_led()
4311 _scsih_fw_event_add(ioc, fw_event); in _scsih_send_event_to_turn_on_pfa_led()
4324 _scsih_smart_predicted_fault(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_smart_predicted_fault() argument
4335 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_smart_predicted_fault()
4336 sas_device = __mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_smart_predicted_fault()
4357 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_smart_predicted_fault()
4359 if (ioc->pdev->subsystem_vendor == PCI_VENDOR_ID_IBM) in _scsih_smart_predicted_fault()
4360 _scsih_send_event_to_turn_on_pfa_led(ioc, handle); in _scsih_smart_predicted_fault()
4368 ioc->name, __FILE__, __LINE__, __func__); in _scsih_smart_predicted_fault()
4384 mpt3sas_ctl_add_to_event_log(ioc, event_reply); in _scsih_smart_predicted_fault()
4392 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_smart_predicted_fault()
4409 _scsih_io_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply) in _scsih_io_done() argument
4423 mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_io_done()
4424 scmd = _scsih_scsi_lookup_get_clear(ioc, smid); in _scsih_io_done()
4428 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_io_done()
4447 if (mpt3sas_scsi_direct_io_get(ioc, smid) && in _scsih_io_done()
4450 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_io_done()
4451 ioc->scsi_lookup[smid - 1].scmd = scmd; in _scsih_io_done()
4452 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_io_done()
4453 mpt3sas_scsi_direct_io_set(ioc, smid, 0); in _scsih_io_done()
4457 mpt3sas_base_put_smid_scsi_io(ioc, smid, in _scsih_io_done()
4468 if (!ioc->is_warpdrive && in _scsih_io_done()
4495 const void *sense_data = mpt3sas_base_get_sense_buffer(ioc, in _scsih_io_done()
4503 _scsih_smart_predicted_fault(ioc, in _scsih_io_done()
4505 mpt3sas_trigger_scsi(ioc, data.skey, data.asc, data.ascq); in _scsih_io_done()
4507 if (!(ioc->logging_level & MPT_DEBUG_REPLY) && in _scsih_io_done()
4511 _scsih_scsi_ioc_info(ioc, scmd, mpi_reply, smid); in _scsih_io_done()
4618 if (scmd->result && (ioc->logging_level & MPT_DEBUG_REPLY)) in _scsih_io_done()
4619 _scsih_scsi_ioc_info(ioc , scmd, mpi_reply, smid); in _scsih_io_done()
4641 _scsih_sas_host_refresh(struct MPT3SAS_ADAPTER *ioc) in _scsih_sas_host_refresh() argument
4651 dtmprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_host_refresh()
4653 ioc->name, (unsigned long long)ioc->sas_hba.sas_address)); in _scsih_sas_host_refresh()
4655 sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys in _scsih_sas_host_refresh()
4660 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_refresh()
4664 if ((mpt3sas_config_get_sas_iounit_pg0(ioc, &mpi_reply, in _scsih_sas_host_refresh()
4670 for (i = 0; i < ioc->sas_hba.num_phys ; i++) { in _scsih_sas_host_refresh()
4673 ioc->sas_hba.handle = le16_to_cpu(sas_iounit_pg0-> in _scsih_sas_host_refresh()
4675 ioc->sas_hba.phy[i].handle = ioc->sas_hba.handle; in _scsih_sas_host_refresh()
4680 mpt3sas_transport_update_links(ioc, ioc->sas_hba.sas_address, in _scsih_sas_host_refresh()
4696 _scsih_sas_host_add(struct MPT3SAS_ADAPTER *ioc) in _scsih_sas_host_add() argument
4709 mpt3sas_config_get_number_hba_phys(ioc, &ioc->sas_hba.num_phys); in _scsih_sas_host_add()
4710 if (!ioc->sas_hba.num_phys) { in _scsih_sas_host_add()
4712 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4717 sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys * in _scsih_sas_host_add()
4722 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4725 if ((mpt3sas_config_get_sas_iounit_pg0(ioc, &mpi_reply, in _scsih_sas_host_add()
4728 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4735 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4740 sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys * in _scsih_sas_host_add()
4745 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4748 if ((mpt3sas_config_get_sas_iounit_pg1(ioc, &mpi_reply, in _scsih_sas_host_add()
4751 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4758 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4762 ioc->io_missing_delay = in _scsih_sas_host_add()
4767 ioc->device_missing_delay = (device_missing_delay & in _scsih_sas_host_add()
4770 ioc->device_missing_delay = device_missing_delay & in _scsih_sas_host_add()
4773 ioc->sas_hba.parent_dev = &ioc->shost->shost_gendev; in _scsih_sas_host_add()
4774 ioc->sas_hba.phy = kcalloc(ioc->sas_hba.num_phys, in _scsih_sas_host_add()
4776 if (!ioc->sas_hba.phy) { in _scsih_sas_host_add()
4778 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4781 for (i = 0; i < ioc->sas_hba.num_phys ; i++) { in _scsih_sas_host_add()
4782 if ((mpt3sas_config_get_phy_pg0(ioc, &mpi_reply, &phy_pg0, in _scsih_sas_host_add()
4785 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4792 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4797 ioc->sas_hba.handle = le16_to_cpu(sas_iounit_pg0-> in _scsih_sas_host_add()
4799 ioc->sas_hba.phy[i].handle = ioc->sas_hba.handle; in _scsih_sas_host_add()
4800 ioc->sas_hba.phy[i].phy_id = i; in _scsih_sas_host_add()
4801 mpt3sas_transport_add_host_phy(ioc, &ioc->sas_hba.phy[i], in _scsih_sas_host_add()
4802 phy_pg0, ioc->sas_hba.parent_dev); in _scsih_sas_host_add()
4804 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_sas_host_add()
4805 MPI2_SAS_DEVICE_PGAD_FORM_HANDLE, ioc->sas_hba.handle))) { in _scsih_sas_host_add()
4807 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4810 ioc->sas_hba.enclosure_handle = in _scsih_sas_host_add()
4812 ioc->sas_hba.sas_address = le64_to_cpu(sas_device_pg0.SASAddress); in _scsih_sas_host_add()
4815 ioc->name, ioc->sas_hba.handle, in _scsih_sas_host_add()
4816 (unsigned long long) ioc->sas_hba.sas_address, in _scsih_sas_host_add()
4817 ioc->sas_hba.num_phys) ; in _scsih_sas_host_add()
4819 if (ioc->sas_hba.enclosure_handle) { in _scsih_sas_host_add()
4820 if (!(mpt3sas_config_get_enclosure_pg0(ioc, &mpi_reply, in _scsih_sas_host_add()
4822 ioc->sas_hba.enclosure_handle))) in _scsih_sas_host_add()
4823 ioc->sas_hba.enclosure_logical_id = in _scsih_sas_host_add()
4842 _scsih_expander_add(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_expander_add() argument
4861 if (ioc->shost_recovery || ioc->pci_error_recovery) in _scsih_expander_add()
4864 if ((mpt3sas_config_get_expander_pg0(ioc, &mpi_reply, &expander_pg0, in _scsih_expander_add()
4867 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4875 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4881 if (_scsih_get_sas_address(ioc, parent_handle, &sas_address_parent) in _scsih_expander_add()
4884 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4887 if (sas_address_parent != ioc->sas_hba.sas_address) { in _scsih_expander_add()
4888 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_expander_add()
4889 sas_expander = mpt3sas_scsih_expander_find_by_sas_address(ioc, in _scsih_expander_add()
4891 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_expander_add()
4893 rc = _scsih_expander_add(ioc, parent_handle); in _scsih_expander_add()
4899 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_expander_add()
4901 sas_expander = mpt3sas_scsih_expander_find_by_sas_address(ioc, in _scsih_expander_add()
4903 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_expander_add()
4912 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4922 " parent(0x%04x), sas_addr(0x%016llx), phys(%d)\n", ioc->name, in _scsih_expander_add()
4932 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4938 mpt3sas_port = mpt3sas_transport_port_add(ioc, handle, in _scsih_expander_add()
4942 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4949 if ((mpt3sas_config_get_expander_pg1(ioc, &mpi_reply, in _scsih_expander_add()
4952 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4959 if ((mpt3sas_transport_add_expander_phy(ioc, in _scsih_expander_add()
4963 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4970 if (!(mpt3sas_config_get_enclosure_pg0(ioc, &mpi_reply, in _scsih_expander_add()
4977 _scsih_expander_node_add(ioc, sas_expander); in _scsih_expander_add()
4983 mpt3sas_transport_port_remove(ioc, sas_expander->sas_address, in _scsih_expander_add()
4997 mpt3sas_expander_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address) in mpt3sas_expander_remove() argument
5002 if (ioc->shost_recovery) in mpt3sas_expander_remove()
5005 spin_lock_irqsave(&ioc->sas_node_lock, flags); in mpt3sas_expander_remove()
5006 sas_expander = mpt3sas_scsih_expander_find_by_sas_address(ioc, in mpt3sas_expander_remove()
5010 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_expander_remove()
5012 _scsih_expander_node_remove(ioc, sas_expander); in mpt3sas_expander_remove()
5029 _scsih_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply) in _scsih_done() argument
5033 mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_done()
5034 if (ioc->scsih_cmds.status == MPT3_CMD_NOT_USED) in _scsih_done()
5036 if (ioc->scsih_cmds.smid != smid) in _scsih_done()
5038 ioc->scsih_cmds.status |= MPT3_CMD_COMPLETE; in _scsih_done()
5040 memcpy(ioc->scsih_cmds.reply, mpi_reply, in _scsih_done()
5042 ioc->scsih_cmds.status |= MPT3_CMD_REPLY_VALID; in _scsih_done()
5044 ioc->scsih_cmds.status &= ~MPT3_CMD_PENDING; in _scsih_done()
5045 complete(&ioc->scsih_cmds.done); in _scsih_done()
5065 _scsih_check_access_status(struct MPT3SAS_ADAPTER *ioc, u64 sas_address, in _scsih_check_access_status() argument
5115 ioc->name, desc, (unsigned long long)sas_address, handle); in _scsih_check_access_status()
5130 _scsih_check_device(struct MPT3SAS_ADAPTER *ioc, in _scsih_check_device() argument
5144 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_check_device()
5163 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_check_device()
5165 sas_device = __mpt3sas_get_sdev_by_addr(ioc, in _scsih_check_device()
5196 ioc->name, handle); in _scsih_check_device()
5201 if (_scsih_check_access_status(ioc, sas_address, handle, in _scsih_check_device()
5205 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_check_device()
5206 _scsih_ublock_io_device(ioc, sas_address); in _scsih_check_device()
5213 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_check_device()
5230 _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num, in _scsih_add_device() argument
5241 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_add_device()
5244 ioc->name, __FILE__, __LINE__, __func__); in _scsih_add_device()
5252 ioc->name, __FILE__, __LINE__, __func__); in _scsih_add_device()
5266 ioc->name, handle); in _scsih_add_device()
5271 if (_scsih_check_access_status(ioc, sas_address, handle, in _scsih_add_device()
5275 sas_device = mpt3sas_get_sdev_by_addr(ioc, in _scsih_add_device()
5286 ioc->name, __FILE__, __LINE__, __func__); in _scsih_add_device()
5292 if (_scsih_get_sas_address(ioc, in _scsih_add_device()
5296 ioc->name, __FILE__, __LINE__, __func__); in _scsih_add_device()
5319 ioc, &mpi_reply, &enclosure_pg0, MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE, in _scsih_add_device()
5327 if (ioc->wait_for_discovery_to_complete) in _scsih_add_device()
5328 _scsih_sas_device_init_add(ioc, sas_device); in _scsih_add_device()
5330 _scsih_sas_device_add(ioc, sas_device); in _scsih_add_device()
5344 _scsih_remove_device(struct MPT3SAS_ADAPTER *ioc, in _scsih_remove_device() argument
5349 if ((ioc->pdev->subsystem_vendor == PCI_VENDOR_ID_IBM) && in _scsih_remove_device()
5351 _scsih_turn_off_pfa_led(ioc, sas_device); in _scsih_remove_device()
5354 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_remove_device()
5356 ioc->name, __func__, in _scsih_remove_device()
5360 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_remove_device()
5362 ioc->name, __func__, in _scsih_remove_device()
5366 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_remove_device()
5368 ioc->name, __func__, in _scsih_remove_device()
5375 _scsih_ublock_io_device(ioc, sas_device->sas_address); in _scsih_remove_device()
5380 if (!ioc->hide_drives) in _scsih_remove_device()
5381 mpt3sas_transport_port_remove(ioc, in _scsih_remove_device()
5387 ioc->name, sas_device->handle, in _scsih_remove_device()
5392 ioc->name, in _scsih_remove_device()
5398 ioc->name, sas_device->enclosure_level, in _scsih_remove_device()
5401 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_remove_device()
5403 ioc->name, __func__, in _scsih_remove_device()
5407 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_remove_device()
5409 ioc->name, __func__, in _scsih_remove_device()
5413 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_remove_device()
5415 ioc->name, __func__, sas_device->enclosure_level, in _scsih_remove_device()
5426 _scsih_sas_topology_change_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_topology_change_event_debug() argument
5455 ioc->name, status_str); in _scsih_sas_topology_change_event_debug()
5505 _scsih_sas_topology_change_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_topology_change_event() argument
5520 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_topology_change_event()
5521 _scsih_sas_topology_change_event_debug(ioc, event_data); in _scsih_sas_topology_change_event()
5523 if (ioc->shost_recovery || ioc->remove_host || ioc->pci_error_recovery) in _scsih_sas_topology_change_event()
5526 if (!ioc->sas_hba.num_phys) in _scsih_sas_topology_change_event()
5527 _scsih_sas_host_add(ioc); in _scsih_sas_topology_change_event()
5529 _scsih_sas_host_refresh(ioc); in _scsih_sas_topology_change_event()
5532 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_topology_change_event()
5533 "ignoring expander event\n", ioc->name)); in _scsih_sas_topology_change_event()
5541 if (_scsih_expander_add(ioc, parent_handle) != 0) in _scsih_sas_topology_change_event()
5544 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_sas_topology_change_event()
5545 sas_expander = mpt3sas_scsih_expander_find_by_handle(ioc, in _scsih_sas_topology_change_event()
5550 } else if (parent_handle < ioc->sas_hba.num_phys) { in _scsih_sas_topology_change_event()
5551 sas_address = ioc->sas_hba.sas_address; in _scsih_sas_topology_change_event()
5552 max_phys = ioc->sas_hba.num_phys; in _scsih_sas_topology_change_event()
5554 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_sas_topology_change_event()
5557 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_sas_topology_change_event()
5562 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_topology_change_event()
5563 "ignoring expander event\n", ioc->name)); in _scsih_sas_topology_change_event()
5566 if (ioc->remove_host || ioc->pci_error_recovery) in _scsih_sas_topology_change_event()
5585 if (ioc->shost_recovery) in _scsih_sas_topology_change_event()
5591 mpt3sas_transport_update_links(ioc, sas_address, in _scsih_sas_topology_change_event()
5597 _scsih_check_device(ioc, sas_address, handle, in _scsih_sas_topology_change_event()
5603 if (ioc->shost_recovery) in _scsih_sas_topology_change_event()
5606 mpt3sas_transport_update_links(ioc, sas_address, in _scsih_sas_topology_change_event()
5609 _scsih_add_device(ioc, handle, phy_number, 0); in _scsih_sas_topology_change_event()
5614 _scsih_device_remove_by_handle(ioc, handle); in _scsih_sas_topology_change_event()
5622 mpt3sas_expander_remove(ioc, sas_address); in _scsih_sas_topology_change_event()
5635 _scsih_sas_device_status_change_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_status_change_event_debug() argument
5686 ioc->name, reason_str, le16_to_cpu(event_data->DevHandle), in _scsih_sas_device_status_change_event_debug()
5690 pr_info(MPT3SAS_FMT ", ASC(0x%x), ASCQ(0x%x)\n", ioc->name, in _scsih_sas_device_status_change_event_debug()
5704 _scsih_sas_device_status_change_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_status_change_event() argument
5715 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_device_status_change_event()
5716 _scsih_sas_device_status_change_event_debug(ioc, in _scsih_sas_device_status_change_event()
5722 if ((ioc->facts.HeaderVersion >> 8) < 0xC) in _scsih_sas_device_status_change_event()
5731 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_status_change_event()
5733 sas_device = __mpt3sas_get_sdev_by_addr(ioc, in _scsih_sas_device_status_change_event()
5753 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_status_change_event()
5767 _scsih_sas_enclosure_dev_status_change_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_enclosure_dev_status_change_event_debug() argument
5786 " number slots(%d)\n", ioc->name, reason_str, in _scsih_sas_enclosure_dev_status_change_event_debug()
5801 _scsih_sas_enclosure_dev_status_change_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_enclosure_dev_status_change_event() argument
5804 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_enclosure_dev_status_change_event()
5805 _scsih_sas_enclosure_dev_status_change_event_debug(ioc, in _scsih_sas_enclosure_dev_status_change_event()
5819 _scsih_sas_broadcast_primitive_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_broadcast_primitive_event() argument
5839 mutex_lock(&ioc->tm_cmds.mutex); in _scsih_sas_broadcast_primitive_event()
5842 ioc->name, __func__, event_data->PhyNum, in _scsih_sas_broadcast_primitive_event()
5845 _scsih_block_io_all_device(ioc); in _scsih_sas_broadcast_primitive_event()
5847 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5848 mpi_reply = ioc->tm_cmds.reply; in _scsih_sas_broadcast_primitive_event()
5853 dewtprintk(ioc, pr_info(MPT3SAS_FMT "%s: giving up\n", in _scsih_sas_broadcast_primitive_event()
5854 ioc->name, __func__)); in _scsih_sas_broadcast_primitive_event()
5857 dewtprintk(ioc, pr_info(MPT3SAS_FMT "%s: %d retry\n", in _scsih_sas_broadcast_primitive_event()
5858 ioc->name, __func__, max_retries - 1)); in _scsih_sas_broadcast_primitive_event()
5862 for (smid = 1; smid <= ioc->scsiio_depth; smid++) { in _scsih_sas_broadcast_primitive_event()
5863 if (ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
5865 scmd = _scsih_scsi_lookup_get(ioc, smid); in _scsih_sas_broadcast_primitive_event()
5885 if (ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
5888 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5889 r = mpt3sas_scsih_issue_tm(ioc, handle, 0, 0, lun, in _scsih_sas_broadcast_primitive_event()
5896 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5905 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5914 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5920 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_broadcast_primitive_event()
5921 "%s: ABORT_TASK: giving up\n", ioc->name, in _scsih_sas_broadcast_primitive_event()
5923 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5927 if (ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
5930 r = mpt3sas_scsih_issue_tm(ioc, handle, sdev->channel, sdev->id, in _scsih_sas_broadcast_primitive_event()
5947 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5950 if (ioc->broadcast_aen_pending) { in _scsih_sas_broadcast_primitive_event()
5951 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_broadcast_primitive_event()
5953 ioc->name, __func__)); in _scsih_sas_broadcast_primitive_event()
5954 ioc->broadcast_aen_pending = 0; in _scsih_sas_broadcast_primitive_event()
5959 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5962 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_broadcast_primitive_event()
5964 ioc->name, __func__, query_count, termination_count)); in _scsih_sas_broadcast_primitive_event()
5966 ioc->broadcast_aen_busy = 0; in _scsih_sas_broadcast_primitive_event()
5967 if (!ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
5968 _scsih_ublock_io_all_device(ioc); in _scsih_sas_broadcast_primitive_event()
5969 mutex_unlock(&ioc->tm_cmds.mutex); in _scsih_sas_broadcast_primitive_event()
5981 _scsih_sas_discovery_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_discovery_event() argument
5987 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) { in _scsih_sas_discovery_event()
5988 pr_info(MPT3SAS_FMT "discovery event: (%s)", ioc->name, in _scsih_sas_discovery_event()
5998 !ioc->sas_hba.num_phys) { in _scsih_sas_discovery_event()
5999 if (disable_discovery > 0 && ioc->shost_recovery) { in _scsih_sas_discovery_event()
6001 while (ioc->shost_recovery) in _scsih_sas_discovery_event()
6004 _scsih_sas_host_add(ioc); in _scsih_sas_discovery_event()
6017 _scsih_ir_fastpath(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phys_disk_num) in _scsih_ir_fastpath() argument
6027 if (ioc->hba_mpi_version_belonged == MPI2_VERSION) in _scsih_ir_fastpath()
6030 mutex_lock(&ioc->scsih_cmds.mutex); in _scsih_ir_fastpath()
6032 if (ioc->scsih_cmds.status != MPT3_CMD_NOT_USED) { in _scsih_ir_fastpath()
6034 ioc->name, __func__); in _scsih_ir_fastpath()
6038 ioc->scsih_cmds.status = MPT3_CMD_PENDING; in _scsih_ir_fastpath()
6040 smid = mpt3sas_base_get_smid(ioc, ioc->scsih_cb_idx); in _scsih_ir_fastpath()
6043 ioc->name, __func__); in _scsih_ir_fastpath()
6044 ioc->scsih_cmds.status = MPT3_CMD_NOT_USED; in _scsih_ir_fastpath()
6049 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_ir_fastpath()
6050 ioc->scsih_cmds.smid = smid; in _scsih_ir_fastpath()
6057 dewtprintk(ioc, pr_info(MPT3SAS_FMT "IR RAID_ACTION: turning fast "\ in _scsih_ir_fastpath()
6058 "path on for handle(0x%04x), phys_disk_num (0x%02x)\n", ioc->name, in _scsih_ir_fastpath()
6061 init_completion(&ioc->scsih_cmds.done); in _scsih_ir_fastpath()
6062 mpt3sas_base_put_smid_default(ioc, smid); in _scsih_ir_fastpath()
6063 wait_for_completion_timeout(&ioc->scsih_cmds.done, 10*HZ); in _scsih_ir_fastpath()
6065 if (!(ioc->scsih_cmds.status & MPT3_CMD_COMPLETE)) { in _scsih_ir_fastpath()
6067 ioc->name, __func__); in _scsih_ir_fastpath()
6068 if (!(ioc->scsih_cmds.status & MPT3_CMD_RESET)) in _scsih_ir_fastpath()
6074 if (ioc->scsih_cmds.status & MPT3_CMD_REPLY_VALID) { in _scsih_ir_fastpath()
6076 mpi_reply = ioc->scsih_cmds.reply; in _scsih_ir_fastpath()
6084 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_ir_fastpath()
6086 "loginfo(0x%08x)!!!\n", ioc->name, ioc_status, in _scsih_ir_fastpath()
6090 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_ir_fastpath()
6092 ioc->name)); in _scsih_ir_fastpath()
6096 ioc->scsih_cmds.status = MPT3_CMD_NOT_USED; in _scsih_ir_fastpath()
6097 mutex_unlock(&ioc->scsih_cmds.mutex); in _scsih_ir_fastpath()
6100 mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP, in _scsih_ir_fastpath()
6130 _scsih_sas_volume_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_volume_add() argument
6139 mpt3sas_config_get_volume_wwid(ioc, handle, &wwid); in _scsih_sas_volume_add()
6142 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_sas_volume_add()
6147 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
6148 raid_device = _scsih_raid_device_find_by_wwid(ioc, wwid); in _scsih_sas_volume_add()
6149 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
6157 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_sas_volume_add()
6162 raid_device->id = ioc->sas_id++; in _scsih_sas_volume_add()
6166 _scsih_raid_device_add(ioc, raid_device); in _scsih_sas_volume_add()
6167 if (!ioc->wait_for_discovery_to_complete) { in _scsih_sas_volume_add()
6168 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_sas_volume_add()
6171 _scsih_raid_device_remove(ioc, raid_device); in _scsih_sas_volume_add()
6173 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
6174 _scsih_determine_boot_device(ioc, raid_device, 1); in _scsih_sas_volume_add()
6175 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
6188 _scsih_sas_volume_delete(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_sas_volume_delete() argument
6195 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_volume_delete()
6196 raid_device = mpt3sas_raid_device_find_by_handle(ioc, handle); in _scsih_sas_volume_delete()
6204 ioc->name, raid_device->handle, in _scsih_sas_volume_delete()
6209 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_volume_delete()
6223 _scsih_sas_pd_expose(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_pd_expose() argument
6232 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_pd_expose()
6233 sas_device = __mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_sas_pd_expose()
6237 clear_bit(handle, ioc->pd_handles); in _scsih_sas_pd_expose()
6245 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_pd_expose()
6265 _scsih_sas_pd_hide(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_pd_hide() argument
6276 mpt3sas_config_get_volume_handle(ioc, handle, &volume_handle); in _scsih_sas_pd_hide()
6278 mpt3sas_config_get_volume_wwid(ioc, volume_handle, in _scsih_sas_pd_hide()
6281 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_pd_hide()
6282 sas_device = __mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_sas_pd_hide()
6284 set_bit(handle, ioc->pd_handles); in _scsih_sas_pd_hide()
6294 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_pd_hide()
6299 _scsih_ir_fastpath(ioc, handle, element->PhysDiskNum); in _scsih_sas_pd_hide()
6316 _scsih_sas_pd_delete(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_pd_delete() argument
6321 _scsih_device_remove_by_handle(ioc, handle); in _scsih_sas_pd_delete()
6333 _scsih_sas_pd_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_pd_add() argument
6344 set_bit(handle, ioc->pd_handles); in _scsih_sas_pd_add()
6346 sas_device = mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_sas_pd_add()
6348 _scsih_ir_fastpath(ioc, handle, element->PhysDiskNum); in _scsih_sas_pd_add()
6353 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_sas_pd_add()
6356 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_pd_add()
6364 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_pd_add()
6369 if (!_scsih_get_sas_address(ioc, parent_handle, &sas_address)) in _scsih_sas_pd_add()
6370 mpt3sas_transport_update_links(ioc, sas_address, handle, in _scsih_sas_pd_add()
6373 _scsih_ir_fastpath(ioc, handle, element->PhysDiskNum); in _scsih_sas_pd_add()
6374 _scsih_add_device(ioc, handle, 0, 1); in _scsih_sas_pd_add()
6386 _scsih_sas_ir_config_change_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_config_change_event_debug() argument
6397 ioc->name, (le32_to_cpu(event_data->Flags) & in _scsih_sas_ir_config_change_event_debug()
6466 _scsih_sas_ir_config_change_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_config_change_event() argument
6476 if ((ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) && in _scsih_sas_ir_config_change_event()
6477 (!ioc->hide_ir_msg)) in _scsih_sas_ir_config_change_event()
6478 _scsih_sas_ir_config_change_event_debug(ioc, event_data); in _scsih_sas_ir_config_change_event()
6484 if (ioc->shost_recovery && in _scsih_sas_ir_config_change_event()
6485 ioc->hba_mpi_version_belonged != MPI2_VERSION) { in _scsih_sas_ir_config_change_event()
6488 _scsih_ir_fastpath(ioc, in _scsih_sas_ir_config_change_event()
6501 _scsih_sas_volume_add(ioc, element); in _scsih_sas_ir_config_change_event()
6506 _scsih_sas_volume_delete(ioc, in _scsih_sas_ir_config_change_event()
6510 if (!ioc->is_warpdrive) in _scsih_sas_ir_config_change_event()
6511 _scsih_sas_pd_hide(ioc, element); in _scsih_sas_ir_config_change_event()
6514 if (!ioc->is_warpdrive) in _scsih_sas_ir_config_change_event()
6515 _scsih_sas_pd_expose(ioc, element); in _scsih_sas_ir_config_change_event()
6518 if (!ioc->is_warpdrive) in _scsih_sas_ir_config_change_event()
6519 _scsih_sas_pd_add(ioc, element); in _scsih_sas_ir_config_change_event()
6522 if (!ioc->is_warpdrive) in _scsih_sas_ir_config_change_event()
6523 _scsih_sas_pd_delete(ioc, element); in _scsih_sas_ir_config_change_event()
6538 _scsih_sas_ir_volume_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_volume_event() argument
6550 if (ioc->shost_recovery) in _scsih_sas_ir_volume_event()
6558 if (!ioc->hide_ir_msg) in _scsih_sas_ir_volume_event()
6559 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_ir_volume_event()
6561 ioc->name, __func__, handle, in _scsih_sas_ir_volume_event()
6566 _scsih_sas_volume_delete(ioc, handle); in _scsih_sas_ir_volume_event()
6573 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_ir_volume_event()
6574 raid_device = mpt3sas_raid_device_find_by_handle(ioc, handle); in _scsih_sas_ir_volume_event()
6575 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_ir_volume_event()
6580 mpt3sas_config_get_volume_wwid(ioc, handle, &wwid); in _scsih_sas_ir_volume_event()
6583 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_sas_ir_volume_event()
6591 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_sas_ir_volume_event()
6596 raid_device->id = ioc->sas_id++; in _scsih_sas_ir_volume_event()
6600 _scsih_raid_device_add(ioc, raid_device); in _scsih_sas_ir_volume_event()
6601 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_sas_ir_volume_event()
6604 _scsih_raid_device_remove(ioc, raid_device); in _scsih_sas_ir_volume_event()
6622 _scsih_sas_ir_physical_disk_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_physical_disk_event() argument
6635 if (ioc->shost_recovery) in _scsih_sas_ir_physical_disk_event()
6644 if (!ioc->hide_ir_msg) in _scsih_sas_ir_physical_disk_event()
6645 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_ir_physical_disk_event()
6647 ioc->name, __func__, handle, in _scsih_sas_ir_physical_disk_event()
6657 if (!ioc->is_warpdrive) in _scsih_sas_ir_physical_disk_event()
6658 set_bit(handle, ioc->pd_handles); in _scsih_sas_ir_physical_disk_event()
6660 sas_device = mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_sas_ir_physical_disk_event()
6666 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_sas_ir_physical_disk_event()
6670 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_ir_physical_disk_event()
6678 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_ir_physical_disk_event()
6683 if (!_scsih_get_sas_address(ioc, parent_handle, &sas_address)) in _scsih_sas_ir_physical_disk_event()
6684 mpt3sas_transport_update_links(ioc, sas_address, handle, in _scsih_sas_ir_physical_disk_event()
6687 _scsih_add_device(ioc, handle, 0, 1); in _scsih_sas_ir_physical_disk_event()
6708 _scsih_sas_ir_operation_status_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_operation_status_event_debug() argument
6736 ioc->name, reason_str, in _scsih_sas_ir_operation_status_event_debug()
6750 _scsih_sas_ir_operation_status_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_operation_status_event() argument
6760 if ((ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) && in _scsih_sas_ir_operation_status_event()
6761 (!ioc->hide_ir_msg)) in _scsih_sas_ir_operation_status_event()
6762 _scsih_sas_ir_operation_status_event_debug(ioc, in _scsih_sas_ir_operation_status_event()
6768 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_ir_operation_status_event()
6770 raid_device = mpt3sas_raid_device_find_by_handle(ioc, handle); in _scsih_sas_ir_operation_status_event()
6774 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_ir_operation_status_event()
6786 _scsih_prep_device_scan(struct MPT3SAS_ADAPTER *ioc) in _scsih_prep_device_scan() argument
6791 shost_for_each_device(sdev, ioc->shost) { in _scsih_prep_device_scan()
6809 _scsih_mark_responding_sas_device(struct MPT3SAS_ADAPTER *ioc, in _scsih_mark_responding_sas_device() argument
6817 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_mark_responding_sas_device()
6818 list_for_each_entry(sas_device, &ioc->sas_device_list, list) { in _scsih_mark_responding_sas_device()
6867 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_mark_responding_sas_device()
6880 _scsih_search_responding_sas_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_search_responding_sas_devices() argument
6888 pr_info(MPT3SAS_FMT "search for end-devices: start\n", ioc->name); in _scsih_search_responding_sas_devices()
6890 if (list_empty(&ioc->sas_device_list)) in _scsih_search_responding_sas_devices()
6894 while (!(mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_search_responding_sas_devices()
6909 _scsih_mark_responding_sas_device(ioc, &sas_device_pg0); in _scsih_search_responding_sas_devices()
6914 ioc->name); in _scsih_search_responding_sas_devices()
6929 _scsih_mark_responding_raid_device(struct MPT3SAS_ADAPTER *ioc, u64 wwid, in _scsih_mark_responding_raid_device() argument
6937 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
6938 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in _scsih_mark_responding_raid_device()
6947 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
6957 mpt3sas_init_warpdrive_properties(ioc, raid_device); in _scsih_mark_responding_raid_device()
6958 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
6960 spin_unlock_irqrestore(&ioc->raid_device_lock, in _scsih_mark_responding_raid_device()
6969 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
6973 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
6986 _scsih_search_responding_raid_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_search_responding_raid_devices() argument
6996 if (!ioc->ir_firmware) in _scsih_search_responding_raid_devices()
7000 ioc->name); in _scsih_search_responding_raid_devices()
7002 if (list_empty(&ioc->raid_device_list)) in _scsih_search_responding_raid_devices()
7006 while (!(mpt3sas_config_get_raid_volume_pg1(ioc, &mpi_reply, in _scsih_search_responding_raid_devices()
7014 if (mpt3sas_config_get_raid_volume_pg0(ioc, &mpi_reply, in _scsih_search_responding_raid_devices()
7022 _scsih_mark_responding_raid_device(ioc, in _scsih_search_responding_raid_devices()
7027 if (!ioc->is_warpdrive) { in _scsih_search_responding_raid_devices()
7029 memset(ioc->pd_handles, 0, ioc->pd_handles_sz); in _scsih_search_responding_raid_devices()
7030 while (!(mpt3sas_config_get_phys_disk_pg0(ioc, &mpi_reply, in _scsih_search_responding_raid_devices()
7039 set_bit(handle, ioc->pd_handles); in _scsih_search_responding_raid_devices()
7044 ioc->name); in _scsih_search_responding_raid_devices()
7059 _scsih_mark_responding_expander(struct MPT3SAS_ADAPTER *ioc, u64 sas_address, in _scsih_mark_responding_expander() argument
7066 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_mark_responding_expander()
7067 list_for_each_entry(sas_expander, &ioc->sas_expander_list, list) { in _scsih_mark_responding_expander()
7083 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_mark_responding_expander()
7096 _scsih_search_responding_expanders(struct MPT3SAS_ADAPTER *ioc) in _scsih_search_responding_expanders() argument
7104 pr_info(MPT3SAS_FMT "search for expanders: start\n", ioc->name); in _scsih_search_responding_expanders()
7106 if (list_empty(&ioc->sas_expander_list)) in _scsih_search_responding_expanders()
7110 while (!(mpt3sas_config_get_expander_pg0(ioc, &mpi_reply, &expander_pg0, in _scsih_search_responding_expanders()
7123 _scsih_mark_responding_expander(ioc, sas_address, handle); in _scsih_search_responding_expanders()
7127 pr_info(MPT3SAS_FMT "search for expanders: complete\n", ioc->name); in _scsih_search_responding_expanders()
7137 _scsih_remove_unresponding_sas_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_remove_unresponding_sas_devices() argument
7147 ioc->name); in _scsih_remove_unresponding_sas_devices()
7151 ioc->name); in _scsih_remove_unresponding_sas_devices()
7156 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_remove_unresponding_sas_devices()
7158 &ioc->sas_device_list, list) { in _scsih_remove_unresponding_sas_devices()
7164 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_remove_unresponding_sas_devices()
7170 _scsih_remove_device(ioc, sas_device); in _scsih_remove_unresponding_sas_devices()
7176 if (ioc->ir_firmware) { in _scsih_remove_unresponding_sas_devices()
7178 ioc->name); in _scsih_remove_unresponding_sas_devices()
7180 &ioc->raid_device_list, list) { in _scsih_remove_unresponding_sas_devices()
7182 _scsih_sas_volume_delete(ioc, in _scsih_remove_unresponding_sas_devices()
7191 ioc->name); in _scsih_remove_unresponding_sas_devices()
7192 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_remove_unresponding_sas_devices()
7195 &ioc->sas_expander_list, list) { in _scsih_remove_unresponding_sas_devices()
7201 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_remove_unresponding_sas_devices()
7205 _scsih_expander_node_remove(ioc, sas_expander); in _scsih_remove_unresponding_sas_devices()
7209 ioc->name); in _scsih_remove_unresponding_sas_devices()
7212 _scsih_ublock_io_all_device(ioc); in _scsih_remove_unresponding_sas_devices()
7216 _scsih_refresh_expander_links(struct MPT3SAS_ADAPTER *ioc, in _scsih_refresh_expander_links() argument
7224 if ((mpt3sas_config_get_expander_pg1(ioc, &mpi_reply, in _scsih_refresh_expander_links()
7227 ioc->name, __FILE__, __LINE__, __func__); in _scsih_refresh_expander_links()
7231 mpt3sas_transport_update_links(ioc, sas_expander->sas_address, in _scsih_refresh_expander_links()
7244 _scsih_scan_for_devices_after_reset(struct MPT3SAS_ADAPTER *ioc) in _scsih_scan_for_devices_after_reset() argument
7263 pr_info(MPT3SAS_FMT "scan devices: start\n", ioc->name); in _scsih_scan_for_devices_after_reset()
7265 _scsih_sas_host_refresh(ioc); in _scsih_scan_for_devices_after_reset()
7267 pr_info(MPT3SAS_FMT "\tscan devices: expanders start\n", ioc->name); in _scsih_scan_for_devices_after_reset()
7271 while (!(mpt3sas_config_get_expander_pg0(ioc, &mpi_reply, &expander_pg0, in _scsih_scan_for_devices_after_reset()
7278 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
7283 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_scan_for_devices_after_reset()
7285 ioc, le64_to_cpu(expander_pg0.SASAddress)); in _scsih_scan_for_devices_after_reset()
7286 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_scan_for_devices_after_reset()
7288 _scsih_refresh_expander_links(ioc, expander_device, in _scsih_scan_for_devices_after_reset()
7292 "handle (0x%04x), sas_addr(0x%016llx)\n", ioc->name, in _scsih_scan_for_devices_after_reset()
7295 _scsih_expander_add(ioc, handle); in _scsih_scan_for_devices_after_reset()
7297 "handle (0x%04x), sas_addr(0x%016llx)\n", ioc->name, in _scsih_scan_for_devices_after_reset()
7304 ioc->name); in _scsih_scan_for_devices_after_reset()
7306 if (!ioc->ir_firmware) in _scsih_scan_for_devices_after_reset()
7309 pr_info(MPT3SAS_FMT "\tscan devices: phys disk start\n", ioc->name); in _scsih_scan_for_devices_after_reset()
7313 while (!(mpt3sas_config_get_phys_disk_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
7321 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
7327 sas_device = mpt3sas_get_sdev_by_handle(ioc, handle); in _scsih_scan_for_devices_after_reset()
7332 if (mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
7341 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
7346 if (!_scsih_get_sas_address(ioc, parent_handle, in _scsih_scan_for_devices_after_reset()
7350 ioc->name, handle, (unsigned long long) in _scsih_scan_for_devices_after_reset()
7352 mpt3sas_transport_update_links(ioc, sas_address, in _scsih_scan_for_devices_after_reset()
7355 set_bit(handle, ioc->pd_handles); in _scsih_scan_for_devices_after_reset()
7361 while (_scsih_add_device(ioc, handle, retry_count++, in _scsih_scan_for_devices_after_reset()
7367 ioc->name, handle, (unsigned long long) in _scsih_scan_for_devices_after_reset()
7373 ioc->name); in _scsih_scan_for_devices_after_reset()
7375 pr_info(MPT3SAS_FMT "\tscan devices: volumes start\n", ioc->name); in _scsih_scan_for_devices_after_reset()
7379 while (!(mpt3sas_config_get_raid_volume_pg1(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
7386 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
7391 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_scan_for_devices_after_reset()
7392 raid_device = _scsih_raid_device_find_by_wwid(ioc, in _scsih_scan_for_devices_after_reset()
7394 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_scan_for_devices_after_reset()
7397 if (mpt3sas_config_get_raid_volume_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
7406 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
7418 ioc->name, volume_pg1.DevHandle); in _scsih_scan_for_devices_after_reset()
7419 _scsih_sas_volume_add(ioc, &element); in _scsih_scan_for_devices_after_reset()
7422 ioc->name, volume_pg1.DevHandle); in _scsih_scan_for_devices_after_reset()
7427 ioc->name); in _scsih_scan_for_devices_after_reset()
7432 ioc->name); in _scsih_scan_for_devices_after_reset()
7436 while (!(mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
7444 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
7452 sas_device = mpt3sas_get_sdev_by_addr(ioc, in _scsih_scan_for_devices_after_reset()
7459 if (!_scsih_get_sas_address(ioc, parent_handle, &sas_address)) { in _scsih_scan_for_devices_after_reset()
7461 "handle (0x%04x), sas_addr(0x%016llx)\n", ioc->name, in _scsih_scan_for_devices_after_reset()
7464 mpt3sas_transport_update_links(ioc, sas_address, handle, in _scsih_scan_for_devices_after_reset()
7471 while (_scsih_add_device(ioc, handle, retry_count++, in _scsih_scan_for_devices_after_reset()
7476 "handle (0x%04x), sas_addr(0x%016llx)\n", ioc->name, in _scsih_scan_for_devices_after_reset()
7482 ioc->name); in _scsih_scan_for_devices_after_reset()
7484 pr_info(MPT3SAS_FMT "scan devices: complete\n", ioc->name); in _scsih_scan_for_devices_after_reset()
7499 mpt3sas_scsih_reset_handler(struct MPT3SAS_ADAPTER *ioc, int reset_phase) in mpt3sas_scsih_reset_handler() argument
7503 dtmprintk(ioc, pr_info(MPT3SAS_FMT in mpt3sas_scsih_reset_handler()
7504 "%s: MPT3_IOC_PRE_RESET\n", ioc->name, __func__)); in mpt3sas_scsih_reset_handler()
7507 dtmprintk(ioc, pr_info(MPT3SAS_FMT in mpt3sas_scsih_reset_handler()
7508 "%s: MPT3_IOC_AFTER_RESET\n", ioc->name, __func__)); in mpt3sas_scsih_reset_handler()
7509 if (ioc->scsih_cmds.status & MPT3_CMD_PENDING) { in mpt3sas_scsih_reset_handler()
7510 ioc->scsih_cmds.status |= MPT3_CMD_RESET; in mpt3sas_scsih_reset_handler()
7511 mpt3sas_base_free_smid(ioc, ioc->scsih_cmds.smid); in mpt3sas_scsih_reset_handler()
7512 complete(&ioc->scsih_cmds.done); in mpt3sas_scsih_reset_handler()
7514 if (ioc->tm_cmds.status & MPT3_CMD_PENDING) { in mpt3sas_scsih_reset_handler()
7515 ioc->tm_cmds.status |= MPT3_CMD_RESET; in mpt3sas_scsih_reset_handler()
7516 mpt3sas_base_free_smid(ioc, ioc->tm_cmds.smid); in mpt3sas_scsih_reset_handler()
7517 complete(&ioc->tm_cmds.done); in mpt3sas_scsih_reset_handler()
7520 _scsih_fw_event_cleanup_queue(ioc); in mpt3sas_scsih_reset_handler()
7521 _scsih_flush_running_cmds(ioc); in mpt3sas_scsih_reset_handler()
7524 dtmprintk(ioc, pr_info(MPT3SAS_FMT in mpt3sas_scsih_reset_handler()
7525 "%s: MPT3_IOC_DONE_RESET\n", ioc->name, __func__)); in mpt3sas_scsih_reset_handler()
7526 if ((!ioc->is_driver_loading) && !(disable_discovery > 0 && in mpt3sas_scsih_reset_handler()
7527 !ioc->sas_hba.num_phys)) { in mpt3sas_scsih_reset_handler()
7528 _scsih_prep_device_scan(ioc); in mpt3sas_scsih_reset_handler()
7529 _scsih_search_responding_sas_devices(ioc); in mpt3sas_scsih_reset_handler()
7530 _scsih_search_responding_raid_devices(ioc); in mpt3sas_scsih_reset_handler()
7531 _scsih_search_responding_expanders(ioc); in mpt3sas_scsih_reset_handler()
7532 _scsih_error_recovery_delete_devices(ioc); in mpt3sas_scsih_reset_handler()
7547 _mpt3sas_fw_work(struct MPT3SAS_ADAPTER *ioc, struct fw_event_work *fw_event) in _mpt3sas_fw_work() argument
7549 _scsih_fw_event_del_from_list(ioc, fw_event); in _mpt3sas_fw_work()
7552 if (ioc->remove_host || ioc->pci_error_recovery) { in _mpt3sas_fw_work()
7559 mpt3sas_process_trigger_data(ioc, in _mpt3sas_fw_work()
7564 while (scsi_host_in_recovery(ioc->shost) || in _mpt3sas_fw_work()
7565 ioc->shost_recovery) { in _mpt3sas_fw_work()
7570 if (ioc->remove_host) in _mpt3sas_fw_work()
7574 _scsih_remove_unresponding_sas_devices(ioc); in _mpt3sas_fw_work()
7575 _scsih_scan_for_devices_after_reset(ioc); in _mpt3sas_fw_work()
7578 ioc->start_scan = 0; in _mpt3sas_fw_work()
7580 mpt3sas_base_update_missing_delay(ioc, missing_delay[0], in _mpt3sas_fw_work()
7582 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _mpt3sas_fw_work()
7584 ioc->name)); in _mpt3sas_fw_work()
7587 _scsih_turn_on_pfa_led(ioc, fw_event->device_handle); in _mpt3sas_fw_work()
7590 _scsih_sas_topology_change_event(ioc, fw_event); in _mpt3sas_fw_work()
7593 _scsih_sas_device_status_change_event(ioc, fw_event); in _mpt3sas_fw_work()
7596 _scsih_sas_discovery_event(ioc, fw_event); in _mpt3sas_fw_work()
7599 _scsih_sas_broadcast_primitive_event(ioc, fw_event); in _mpt3sas_fw_work()
7602 _scsih_sas_enclosure_dev_status_change_event(ioc, in _mpt3sas_fw_work()
7606 _scsih_sas_ir_config_change_event(ioc, fw_event); in _mpt3sas_fw_work()
7609 _scsih_sas_ir_volume_event(ioc, fw_event); in _mpt3sas_fw_work()
7612 _scsih_sas_ir_physical_disk_event(ioc, fw_event); in _mpt3sas_fw_work()
7615 _scsih_sas_ir_operation_status_event(ioc, fw_event); in _mpt3sas_fw_work()
7639 _mpt3sas_fw_work(fw_event->ioc, fw_event); in _firmware_event_work()
7656 mpt3sas_scsih_event_callback(struct MPT3SAS_ADAPTER *ioc, u8 msix_index, in mpt3sas_scsih_event_callback() argument
7665 if (ioc->remove_host || ioc->pci_error_recovery) in mpt3sas_scsih_event_callback()
7668 mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply); in mpt3sas_scsih_event_callback()
7672 ioc->name, __FILE__, __LINE__, __func__); in mpt3sas_scsih_event_callback()
7679 mpt3sas_trigger_event(ioc, event, 0); in mpt3sas_scsih_event_callback()
7693 if (ioc->broadcast_aen_busy) { in mpt3sas_scsih_event_callback()
7694 ioc->broadcast_aen_pending++; in mpt3sas_scsih_event_callback()
7697 ioc->broadcast_aen_busy = 1; in mpt3sas_scsih_event_callback()
7702 _scsih_check_topo_delete_events(ioc, in mpt3sas_scsih_event_callback()
7707 _scsih_check_ir_config_unhide_events(ioc, in mpt3sas_scsih_event_callback()
7712 _scsih_check_volume_delete_events(ioc, in mpt3sas_scsih_event_callback()
7721 if (!ioc->is_warpdrive) in mpt3sas_scsih_event_callback()
7737 "additional details.\n", ioc->name); in mpt3sas_scsih_event_callback()
7743 "for additional details.\n", ioc->name); in mpt3sas_scsih_event_callback()
7750 "for additional details.\n", ioc->name); in mpt3sas_scsih_event_callback()
7757 ioc->name); in mpt3sas_scsih_event_callback()
7771 _scsih_temp_threshold_events(ioc, in mpt3sas_scsih_event_callback()
7784 ioc->name, __FILE__, __LINE__, __func__); in mpt3sas_scsih_event_callback()
7789 fw_event->ioc = ioc; in mpt3sas_scsih_event_callback()
7793 _scsih_fw_event_add(ioc, fw_event); in mpt3sas_scsih_event_callback()
7810 _scsih_expander_node_remove(struct MPT3SAS_ADAPTER *ioc, in _scsih_expander_node_remove() argument
7818 if (ioc->shost_recovery) in _scsih_expander_node_remove()
7822 mpt3sas_device_remove_by_sas_address(ioc, in _scsih_expander_node_remove()
7828 mpt3sas_expander_remove(ioc, in _scsih_expander_node_remove()
7832 mpt3sas_transport_port_remove(ioc, sas_expander->sas_address, in _scsih_expander_node_remove()
7837 ioc->name, in _scsih_expander_node_remove()
7855 _scsih_ir_shutdown(struct MPT3SAS_ADAPTER *ioc) in _scsih_ir_shutdown() argument
7862 if (!ioc->ir_firmware) in _scsih_ir_shutdown()
7866 if (list_empty(&ioc->raid_device_list)) in _scsih_ir_shutdown()
7869 mutex_lock(&ioc->scsih_cmds.mutex); in _scsih_ir_shutdown()
7871 if (ioc->scsih_cmds.status != MPT3_CMD_NOT_USED) { in _scsih_ir_shutdown()
7873 ioc->name, __func__); in _scsih_ir_shutdown()
7876 ioc->scsih_cmds.status = MPT3_CMD_PENDING; in _scsih_ir_shutdown()
7878 smid = mpt3sas_base_get_smid(ioc, ioc->scsih_cb_idx); in _scsih_ir_shutdown()
7881 ioc->name, __func__); in _scsih_ir_shutdown()
7882 ioc->scsih_cmds.status = MPT3_CMD_NOT_USED; in _scsih_ir_shutdown()
7886 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_ir_shutdown()
7887 ioc->scsih_cmds.smid = smid; in _scsih_ir_shutdown()
7893 if (!ioc->hide_ir_msg) in _scsih_ir_shutdown()
7894 pr_info(MPT3SAS_FMT "IR shutdown (sending)\n", ioc->name); in _scsih_ir_shutdown()
7895 init_completion(&ioc->scsih_cmds.done); in _scsih_ir_shutdown()
7896 mpt3sas_base_put_smid_default(ioc, smid); in _scsih_ir_shutdown()
7897 wait_for_completion_timeout(&ioc->scsih_cmds.done, 10*HZ); in _scsih_ir_shutdown()
7899 if (!(ioc->scsih_cmds.status & MPT3_CMD_COMPLETE)) { in _scsih_ir_shutdown()
7901 ioc->name, __func__); in _scsih_ir_shutdown()
7905 if (ioc->scsih_cmds.status & MPT3_CMD_REPLY_VALID) { in _scsih_ir_shutdown()
7906 mpi_reply = ioc->scsih_cmds.reply; in _scsih_ir_shutdown()
7907 if (!ioc->hide_ir_msg) in _scsih_ir_shutdown()
7910 ioc->name, le16_to_cpu(mpi_reply->IOCStatus), in _scsih_ir_shutdown()
7915 ioc->scsih_cmds.status = MPT3_CMD_NOT_USED; in _scsih_ir_shutdown()
7916 mutex_unlock(&ioc->scsih_cmds.mutex); in _scsih_ir_shutdown()
7929 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_remove() local
7936 ioc->remove_host = 1; in scsih_remove()
7937 _scsih_fw_event_cleanup_queue(ioc); in scsih_remove()
7939 spin_lock_irqsave(&ioc->fw_event_lock, flags); in scsih_remove()
7940 wq = ioc->firmware_event_thread; in scsih_remove()
7941 ioc->firmware_event_thread = NULL; in scsih_remove()
7942 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in scsih_remove()
7947 _scsih_ir_shutdown(ioc); in scsih_remove()
7948 list_for_each_entry_safe(raid_device, next, &ioc->raid_device_list, in scsih_remove()
7957 ioc->name, raid_device->handle, in scsih_remove()
7959 _scsih_raid_device_remove(ioc, raid_device); in scsih_remove()
7964 &ioc->sas_hba.sas_port_list, port_list) { in scsih_remove()
7967 mpt3sas_device_remove_by_sas_address(ioc, in scsih_remove()
7973 mpt3sas_expander_remove(ioc, in scsih_remove()
7978 if (ioc->sas_hba.num_phys) { in scsih_remove()
7979 kfree(ioc->sas_hba.phy); in scsih_remove()
7980 ioc->sas_hba.phy = NULL; in scsih_remove()
7981 ioc->sas_hba.num_phys = 0; in scsih_remove()
7986 mpt3sas_base_detach(ioc); in scsih_remove()
7988 list_del(&ioc->list); in scsih_remove()
8003 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_shutdown() local
8007 ioc->remove_host = 1; in scsih_shutdown()
8008 _scsih_fw_event_cleanup_queue(ioc); in scsih_shutdown()
8010 spin_lock_irqsave(&ioc->fw_event_lock, flags); in scsih_shutdown()
8011 wq = ioc->firmware_event_thread; in scsih_shutdown()
8012 ioc->firmware_event_thread = NULL; in scsih_shutdown()
8013 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in scsih_shutdown()
8017 _scsih_ir_shutdown(ioc); in scsih_shutdown()
8018 mpt3sas_base_detach(ioc); in scsih_shutdown()
8031 _scsih_probe_boot_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_probe_boot_devices() argument
8044 if (!ioc->bios_pg3.BiosVersion) in _scsih_probe_boot_devices()
8049 if (ioc->req_boot_device.device) { in _scsih_probe_boot_devices()
8050 device = ioc->req_boot_device.device; in _scsih_probe_boot_devices()
8051 is_raid = ioc->req_boot_device.is_raid; in _scsih_probe_boot_devices()
8052 } else if (ioc->req_alt_boot_device.device) { in _scsih_probe_boot_devices()
8053 device = ioc->req_alt_boot_device.device; in _scsih_probe_boot_devices()
8054 is_raid = ioc->req_alt_boot_device.is_raid; in _scsih_probe_boot_devices()
8055 } else if (ioc->current_boot_device.device) { in _scsih_probe_boot_devices()
8056 device = ioc->current_boot_device.device; in _scsih_probe_boot_devices()
8057 is_raid = ioc->current_boot_device.is_raid; in _scsih_probe_boot_devices()
8065 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_probe_boot_devices()
8068 _scsih_raid_device_remove(ioc, raid_device); in _scsih_probe_boot_devices()
8070 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_probe_boot_devices()
8075 list_move_tail(&sas_device->list, &ioc->sas_device_list); in _scsih_probe_boot_devices()
8076 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_probe_boot_devices()
8078 if (ioc->hide_drives) in _scsih_probe_boot_devices()
8080 if (!mpt3sas_transport_port_add(ioc, handle, in _scsih_probe_boot_devices()
8082 _scsih_sas_device_remove(ioc, sas_device); in _scsih_probe_boot_devices()
8084 if (!ioc->is_driver_loading) { in _scsih_probe_boot_devices()
8085 mpt3sas_transport_port_remove(ioc, in _scsih_probe_boot_devices()
8088 _scsih_sas_device_remove(ioc, sas_device); in _scsih_probe_boot_devices()
8101 _scsih_probe_raid(struct MPT3SAS_ADAPTER *ioc) in _scsih_probe_raid() argument
8107 &ioc->raid_device_list, list) { in _scsih_probe_raid()
8110 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_probe_raid()
8113 _scsih_raid_device_remove(ioc, raid_device); in _scsih_probe_raid()
8117 static struct _sas_device *get_next_sas_device(struct MPT3SAS_ADAPTER *ioc) in get_next_sas_device() argument
8122 spin_lock_irqsave(&ioc->sas_device_lock, flags); in get_next_sas_device()
8123 if (!list_empty(&ioc->sas_device_init_list)) { in get_next_sas_device()
8124 sas_device = list_first_entry(&ioc->sas_device_init_list, in get_next_sas_device()
8128 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in get_next_sas_device()
8133 static void sas_device_make_active(struct MPT3SAS_ADAPTER *ioc, in sas_device_make_active() argument
8138 spin_lock_irqsave(&ioc->sas_device_lock, flags); in sas_device_make_active()
8154 list_add_tail(&sas_device->list, &ioc->sas_device_list); in sas_device_make_active()
8156 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in sas_device_make_active()
8166 _scsih_probe_sas(struct MPT3SAS_ADAPTER *ioc) in _scsih_probe_sas() argument
8170 if (ioc->hide_drives) in _scsih_probe_sas()
8173 while ((sas_device = get_next_sas_device(ioc))) { in _scsih_probe_sas()
8174 if (!mpt3sas_transport_port_add(ioc, sas_device->handle, in _scsih_probe_sas()
8176 _scsih_sas_device_remove(ioc, sas_device); in _scsih_probe_sas()
8186 if (!ioc->is_driver_loading) { in _scsih_probe_sas()
8187 mpt3sas_transport_port_remove(ioc, in _scsih_probe_sas()
8190 _scsih_sas_device_remove(ioc, sas_device); in _scsih_probe_sas()
8195 sas_device_make_active(ioc, sas_device); in _scsih_probe_sas()
8207 _scsih_probe_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_probe_devices() argument
8211 if (!(ioc->facts.ProtocolFlags & MPI2_IOCFACTS_PROTOCOL_SCSI_INITIATOR)) in _scsih_probe_devices()
8214 _scsih_probe_boot_devices(ioc); in _scsih_probe_devices()
8216 if (ioc->ir_firmware) { in _scsih_probe_devices()
8218 le16_to_cpu(ioc->ioc_pg8.IRVolumeMappingFlags) & in _scsih_probe_devices()
8222 _scsih_probe_raid(ioc); in _scsih_probe_devices()
8223 _scsih_probe_sas(ioc); in _scsih_probe_devices()
8225 _scsih_probe_sas(ioc); in _scsih_probe_devices()
8226 _scsih_probe_raid(ioc); in _scsih_probe_devices()
8229 _scsih_probe_sas(ioc); in _scsih_probe_devices()
8243 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_scan_start() local
8246 mpt3sas_enable_diag_buffer(ioc, diag_buffer_enable); in scsih_scan_start()
8251 ioc->start_scan = 1; in scsih_scan_start()
8252 rc = mpt3sas_port_enable(ioc); in scsih_scan_start()
8255 pr_info(MPT3SAS_FMT "port enable: FAILED\n", ioc->name); in scsih_scan_start()
8270 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_scan_finished() local
8273 ioc->is_driver_loading = 0; in scsih_scan_finished()
8274 ioc->wait_for_discovery_to_complete = 0; in scsih_scan_finished()
8279 ioc->base_cmds.status = MPT3_CMD_NOT_USED; in scsih_scan_finished()
8282 ioc->name); in scsih_scan_finished()
8283 ioc->is_driver_loading = 0; in scsih_scan_finished()
8287 if (ioc->start_scan) in scsih_scan_finished()
8290 if (ioc->start_scan_failed) { in scsih_scan_finished()
8293 ioc->name, ioc->start_scan_failed); in scsih_scan_finished()
8294 ioc->is_driver_loading = 0; in scsih_scan_finished()
8295 ioc->wait_for_discovery_to_complete = 0; in scsih_scan_finished()
8296 ioc->remove_host = 1; in scsih_scan_finished()
8300 pr_info(MPT3SAS_FMT "port enable: SUCCESS\n", ioc->name); in scsih_scan_finished()
8301 ioc->base_cmds.status = MPT3_CMD_NOT_USED; in scsih_scan_finished()
8303 if (ioc->wait_for_discovery_to_complete) { in scsih_scan_finished()
8304 ioc->wait_for_discovery_to_complete = 0; in scsih_scan_finished()
8305 _scsih_probe_devices(ioc); in scsih_scan_finished()
8307 mpt3sas_base_start_watchdog(ioc); in scsih_scan_finished()
8308 ioc->is_driver_loading = 0; in scsih_scan_finished()
8440 struct MPT3SAS_ADAPTER *ioc; in _scsih_probe() local
8469 ioc = shost_priv(shost); in _scsih_probe()
8470 memset(ioc, 0, sizeof(struct MPT3SAS_ADAPTER)); in _scsih_probe()
8471 ioc->hba_mpi_version_belonged = hba_mpi_version; in _scsih_probe()
8472 ioc->id = mpt2_ids++; in _scsih_probe()
8473 sprintf(ioc->driver_name, "%s", MPT2SAS_DRIVER_NAME); in _scsih_probe()
8475 ioc->is_warpdrive = 1; in _scsih_probe()
8476 ioc->hide_ir_msg = 1; in _scsih_probe()
8478 ioc->mfg_pg10_hide_flag = MFG_PAGE10_EXPOSE_ALL_DISKS; in _scsih_probe()
8486 ioc = shost_priv(shost); in _scsih_probe()
8487 memset(ioc, 0, sizeof(struct MPT3SAS_ADAPTER)); in _scsih_probe()
8488 ioc->hba_mpi_version_belonged = hba_mpi_version; in _scsih_probe()
8489 ioc->id = mpt3_ids++; in _scsih_probe()
8490 sprintf(ioc->driver_name, "%s", MPT3SAS_DRIVER_NAME); in _scsih_probe()
8492 ioc->msix96_vector = 1; in _scsih_probe()
8498 INIT_LIST_HEAD(&ioc->list); in _scsih_probe()
8500 list_add_tail(&ioc->list, &mpt3sas_ioc_list); in _scsih_probe()
8502 ioc->shost = shost; in _scsih_probe()
8503 ioc->pdev = pdev; in _scsih_probe()
8504 ioc->scsi_io_cb_idx = scsi_io_cb_idx; in _scsih_probe()
8505 ioc->tm_cb_idx = tm_cb_idx; in _scsih_probe()
8506 ioc->ctl_cb_idx = ctl_cb_idx; in _scsih_probe()
8507 ioc->base_cb_idx = base_cb_idx; in _scsih_probe()
8508 ioc->port_enable_cb_idx = port_enable_cb_idx; in _scsih_probe()
8509 ioc->transport_cb_idx = transport_cb_idx; in _scsih_probe()
8510 ioc->scsih_cb_idx = scsih_cb_idx; in _scsih_probe()
8511 ioc->config_cb_idx = config_cb_idx; in _scsih_probe()
8512 ioc->tm_tr_cb_idx = tm_tr_cb_idx; in _scsih_probe()
8513 ioc->tm_tr_volume_cb_idx = tm_tr_volume_cb_idx; in _scsih_probe()
8514 ioc->tm_sas_control_cb_idx = tm_sas_control_cb_idx; in _scsih_probe()
8515 ioc->logging_level = logging_level; in _scsih_probe()
8516 ioc->schedule_dead_ioc_flush_running_cmds = &_scsih_flush_running_cmds; in _scsih_probe()
8518 mutex_init(&ioc->reset_in_progress_mutex); in _scsih_probe()
8520 mutex_init(&ioc->pci_access_mutex); in _scsih_probe()
8521 spin_lock_init(&ioc->ioc_reset_in_progress_lock); in _scsih_probe()
8522 spin_lock_init(&ioc->scsi_lookup_lock); in _scsih_probe()
8523 spin_lock_init(&ioc->sas_device_lock); in _scsih_probe()
8524 spin_lock_init(&ioc->sas_node_lock); in _scsih_probe()
8525 spin_lock_init(&ioc->fw_event_lock); in _scsih_probe()
8526 spin_lock_init(&ioc->raid_device_lock); in _scsih_probe()
8527 spin_lock_init(&ioc->diag_trigger_lock); in _scsih_probe()
8529 INIT_LIST_HEAD(&ioc->sas_device_list); in _scsih_probe()
8530 INIT_LIST_HEAD(&ioc->sas_device_init_list); in _scsih_probe()
8531 INIT_LIST_HEAD(&ioc->sas_expander_list); in _scsih_probe()
8532 INIT_LIST_HEAD(&ioc->fw_event_list); in _scsih_probe()
8533 INIT_LIST_HEAD(&ioc->raid_device_list); in _scsih_probe()
8534 INIT_LIST_HEAD(&ioc->sas_hba.sas_port_list); in _scsih_probe()
8535 INIT_LIST_HEAD(&ioc->delayed_tr_list); in _scsih_probe()
8536 INIT_LIST_HEAD(&ioc->delayed_tr_volume_list); in _scsih_probe()
8537 INIT_LIST_HEAD(&ioc->reply_queue_list); in _scsih_probe()
8539 sprintf(ioc->name, "%s_cm%d", ioc->driver_name, ioc->id); in _scsih_probe()
8545 shost->unique_id = ioc->id; in _scsih_probe()
8552 "value of 64.\n", ioc->name, max_sectors); in _scsih_probe()
8557 "default value of 32767.\n", ioc->name, in _scsih_probe()
8563 ioc->name, shost->max_sectors); in _scsih_probe()
8578 snprintf(ioc->firmware_event_name, sizeof(ioc->firmware_event_name), in _scsih_probe()
8579 "fw_event_%s%d", ioc->driver_name, ioc->id); in _scsih_probe()
8580 ioc->firmware_event_thread = alloc_ordered_workqueue( in _scsih_probe()
8581 ioc->firmware_event_name, WQ_MEM_RECLAIM); in _scsih_probe()
8582 if (!ioc->firmware_event_thread) { in _scsih_probe()
8584 ioc->name, __FILE__, __LINE__, __func__); in _scsih_probe()
8589 ioc->is_driver_loading = 1; in _scsih_probe()
8590 if ((mpt3sas_base_attach(ioc))) { in _scsih_probe()
8592 ioc->name, __FILE__, __LINE__, __func__); in _scsih_probe()
8597 if (ioc->is_warpdrive) { in _scsih_probe()
8598 if (ioc->mfg_pg10_hide_flag == MFG_PAGE10_EXPOSE_ALL_DISKS) in _scsih_probe()
8599 ioc->hide_drives = 0; in _scsih_probe()
8600 else if (ioc->mfg_pg10_hide_flag == MFG_PAGE10_HIDE_ALL_DISKS) in _scsih_probe()
8601 ioc->hide_drives = 1; in _scsih_probe()
8603 if (mpt3sas_get_num_volumes(ioc)) in _scsih_probe()
8604 ioc->hide_drives = 1; in _scsih_probe()
8606 ioc->hide_drives = 0; in _scsih_probe()
8609 ioc->hide_drives = 0; in _scsih_probe()
8614 ioc->name, __FILE__, __LINE__, __func__); in _scsih_probe()
8621 mpt3sas_base_detach(ioc); in _scsih_probe()
8623 destroy_workqueue(ioc->firmware_event_thread); in _scsih_probe()
8626 list_del(&ioc->list); in _scsih_probe()
8644 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_suspend() local
8647 mpt3sas_base_stop_watchdog(ioc); in scsih_suspend()
8653 ioc->name, pdev, pci_name(pdev), device_state); in scsih_suspend()
8656 mpt3sas_base_free_resources(ioc); in scsih_suspend()
8671 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_resume() local
8677 ioc->name, pdev, pci_name(pdev), device_state); in scsih_resume()
8682 ioc->pdev = pdev; in scsih_resume()
8683 r = mpt3sas_base_map_resources(ioc); in scsih_resume()
8687 mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP, SOFT_RESET); in scsih_resume()
8689 mpt3sas_base_start_watchdog(ioc); in scsih_resume()
8708 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_pci_error_detected() local
8711 ioc->name, state); in scsih_pci_error_detected()
8718 ioc->pci_error_recovery = 1; in scsih_pci_error_detected()
8719 scsi_block_requests(ioc->shost); in scsih_pci_error_detected()
8720 mpt3sas_base_stop_watchdog(ioc); in scsih_pci_error_detected()
8721 mpt3sas_base_free_resources(ioc); in scsih_pci_error_detected()
8725 ioc->pci_error_recovery = 1; in scsih_pci_error_detected()
8726 mpt3sas_base_stop_watchdog(ioc); in scsih_pci_error_detected()
8727 _scsih_flush_running_cmds(ioc); in scsih_pci_error_detected()
8745 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_pci_slot_reset() local
8749 ioc->name); in scsih_pci_slot_reset()
8751 ioc->pci_error_recovery = 0; in scsih_pci_slot_reset()
8752 ioc->pdev = pdev; in scsih_pci_slot_reset()
8754 rc = mpt3sas_base_map_resources(ioc); in scsih_pci_slot_reset()
8758 rc = mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP, in scsih_pci_slot_reset()
8761 pr_warn(MPT3SAS_FMT "hard reset: %s\n", ioc->name, in scsih_pci_slot_reset()
8782 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_pci_resume() local
8784 pr_info(MPT3SAS_FMT "PCI error: resume callback!!\n", ioc->name); in scsih_pci_resume()
8787 mpt3sas_base_start_watchdog(ioc); in scsih_pci_resume()
8788 scsi_unblock_requests(ioc->shost); in scsih_pci_resume()
8799 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in scsih_pci_mmio_enabled() local
8802 ioc->name); in scsih_pci_mmio_enabled()