Lines Matching refs:ioc
67 static void _scsih_expander_node_remove(struct MPT3SAS_ADAPTER *ioc,
71 static void _scsih_remove_device(struct MPT3SAS_ADAPTER *ioc,
73 static int _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle,
76 static u8 _scsih_check_for_pending_tm(struct MPT3SAS_ADAPTER *ioc, u16 smid);
188 struct MPT3SAS_ADAPTER *ioc; member
279 struct MPT3SAS_ADAPTER *ioc; in _scsih_set_debug_level() local
285 list_for_each_entry(ioc, &mpt3sas_ioc_list, list) in _scsih_set_debug_level()
286 ioc->logging_level = logging_level; in _scsih_set_debug_level()
390 _scsih_get_sas_address(struct MPT3SAS_ADAPTER *ioc, u16 handle, in _scsih_get_sas_address() argument
399 if (handle <= ioc->sas_hba.num_phys) { in _scsih_get_sas_address()
400 *sas_address = ioc->sas_hba.sas_address; in _scsih_get_sas_address()
404 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_get_sas_address()
406 pr_err(MPT3SAS_FMT "failure at %s:%d/%s()!\n", ioc->name, in _scsih_get_sas_address()
424 ioc->name, handle, ioc_status, in _scsih_get_sas_address()
443 _scsih_determine_boot_device(struct MPT3SAS_ADAPTER *ioc, in _scsih_determine_boot_device() argument
454 if (!ioc->is_driver_loading) in _scsih_determine_boot_device()
458 if (!ioc->bios_pg3.BiosVersion) in _scsih_determine_boot_device()
475 if (!ioc->req_boot_device.device) { in _scsih_determine_boot_device()
478 (ioc->bios_pg2.ReqBootDeviceForm & in _scsih_determine_boot_device()
480 &ioc->bios_pg2.RequestedBootDevice)) { in _scsih_determine_boot_device()
481 dinitprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_determine_boot_device()
483 ioc->name, __func__, in _scsih_determine_boot_device()
485 ioc->req_boot_device.device = device; in _scsih_determine_boot_device()
486 ioc->req_boot_device.is_raid = is_raid; in _scsih_determine_boot_device()
490 if (!ioc->req_alt_boot_device.device) { in _scsih_determine_boot_device()
493 (ioc->bios_pg2.ReqAltBootDeviceForm & in _scsih_determine_boot_device()
495 &ioc->bios_pg2.RequestedAltBootDevice)) { in _scsih_determine_boot_device()
496 dinitprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_determine_boot_device()
498 ioc->name, __func__, in _scsih_determine_boot_device()
500 ioc->req_alt_boot_device.device = device; in _scsih_determine_boot_device()
501 ioc->req_alt_boot_device.is_raid = is_raid; in _scsih_determine_boot_device()
505 if (!ioc->current_boot_device.device) { in _scsih_determine_boot_device()
508 (ioc->bios_pg2.CurrentBootDeviceForm & in _scsih_determine_boot_device()
510 &ioc->bios_pg2.CurrentBootDevice)) { in _scsih_determine_boot_device()
511 dinitprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_determine_boot_device()
513 ioc->name, __func__, in _scsih_determine_boot_device()
515 ioc->current_boot_device.device = device; in _scsih_determine_boot_device()
516 ioc->current_boot_device.is_raid = is_raid; in _scsih_determine_boot_device()
531 mpt3sas_scsih_sas_device_find_by_sas_address(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_scsih_sas_device_find_by_sas_address() argument
536 list_for_each_entry(sas_device, &ioc->sas_device_list, list) in mpt3sas_scsih_sas_device_find_by_sas_address()
540 list_for_each_entry(sas_device, &ioc->sas_device_init_list, list) in mpt3sas_scsih_sas_device_find_by_sas_address()
557 _scsih_sas_device_find_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_sas_device_find_by_handle() argument
561 list_for_each_entry(sas_device, &ioc->sas_device_list, list) in _scsih_sas_device_find_by_handle()
565 list_for_each_entry(sas_device, &ioc->sas_device_init_list, list) in _scsih_sas_device_find_by_handle()
581 _scsih_sas_device_remove(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_remove() argument
589 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_remove()
592 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_remove()
603 _scsih_device_remove_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_device_remove_by_handle() argument
608 if (ioc->shost_recovery) in _scsih_device_remove_by_handle()
611 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_device_remove_by_handle()
612 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_device_remove_by_handle()
615 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_device_remove_by_handle()
617 _scsih_remove_device(ioc, sas_device); in _scsih_device_remove_by_handle()
628 mpt3sas_device_remove_by_sas_address(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_device_remove_by_sas_address() argument
634 if (ioc->shost_recovery) in mpt3sas_device_remove_by_sas_address()
637 spin_lock_irqsave(&ioc->sas_device_lock, flags); in mpt3sas_device_remove_by_sas_address()
638 sas_device = mpt3sas_scsih_sas_device_find_by_sas_address(ioc, in mpt3sas_device_remove_by_sas_address()
642 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in mpt3sas_device_remove_by_sas_address()
644 _scsih_remove_device(ioc, sas_device); in mpt3sas_device_remove_by_sas_address()
656 _scsih_sas_device_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_add() argument
661 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_device_add()
663 ioc->name, __func__, sas_device->handle, in _scsih_sas_device_add()
666 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_add()
667 list_add_tail(&sas_device->list, &ioc->sas_device_list); in _scsih_sas_device_add()
668 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_add()
670 if (!mpt3sas_transport_port_add(ioc, sas_device->handle, in _scsih_sas_device_add()
672 _scsih_sas_device_remove(ioc, sas_device); in _scsih_sas_device_add()
679 if (!ioc->is_driver_loading) { in _scsih_sas_device_add()
680 mpt3sas_transport_port_remove(ioc, in _scsih_sas_device_add()
683 _scsih_sas_device_remove(ioc, sas_device); in _scsih_sas_device_add()
697 _scsih_sas_device_init_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_init_add() argument
702 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_device_init_add()
703 "%s: handle(0x%04x), sas_addr(0x%016llx)\n", ioc->name, in _scsih_sas_device_init_add()
707 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_init_add()
708 list_add_tail(&sas_device->list, &ioc->sas_device_init_list); in _scsih_sas_device_init_add()
709 _scsih_determine_boot_device(ioc, sas_device, 0); in _scsih_sas_device_init_add()
710 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_init_add()
724 _scsih_raid_device_find_by_id(struct MPT3SAS_ADAPTER *ioc, int id, int channel) in _scsih_raid_device_find_by_id() argument
729 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in _scsih_raid_device_find_by_id()
750 _scsih_raid_device_find_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_raid_device_find_by_handle() argument
755 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in _scsih_raid_device_find_by_handle()
776 _scsih_raid_device_find_by_wwid(struct MPT3SAS_ADAPTER *ioc, u64 wwid) in _scsih_raid_device_find_by_wwid() argument
781 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in _scsih_raid_device_find_by_wwid()
800 _scsih_raid_device_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_raid_device_add() argument
805 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_raid_device_add()
806 "%s: handle(0x%04x), wwid(0x%016llx)\n", ioc->name, __func__, in _scsih_raid_device_add()
809 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_raid_device_add()
810 list_add_tail(&raid_device->list, &ioc->raid_device_list); in _scsih_raid_device_add()
811 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_raid_device_add()
821 _scsih_raid_device_remove(struct MPT3SAS_ADAPTER *ioc, in _scsih_raid_device_remove() argument
826 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_raid_device_remove()
829 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_raid_device_remove()
842 mpt3sas_scsih_expander_find_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle) in mpt3sas_scsih_expander_find_by_handle() argument
847 list_for_each_entry(sas_expander, &ioc->sas_expander_list, list) { in mpt3sas_scsih_expander_find_by_handle()
867 mpt3sas_scsih_expander_find_by_sas_address(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_scsih_expander_find_by_sas_address() argument
873 list_for_each_entry(sas_expander, &ioc->sas_expander_list, list) { in mpt3sas_scsih_expander_find_by_sas_address()
894 _scsih_expander_node_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_expander_node_add() argument
899 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_expander_node_add()
900 list_add_tail(&sas_expander->list, &ioc->sas_expander_list); in _scsih_expander_node_add()
901 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_expander_node_add()
931 _scsih_scsi_lookup_get(struct MPT3SAS_ADAPTER *ioc, u16 smid) in _scsih_scsi_lookup_get() argument
933 return ioc->scsi_lookup[smid - 1].scmd; in _scsih_scsi_lookup_get()
945 _scsih_scsi_lookup_get_clear(struct MPT3SAS_ADAPTER *ioc, u16 smid) in _scsih_scsi_lookup_get_clear() argument
950 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_get_clear()
951 scmd = ioc->scsi_lookup[smid - 1].scmd; in _scsih_scsi_lookup_get_clear()
952 ioc->scsi_lookup[smid - 1].scmd = NULL; in _scsih_scsi_lookup_get_clear()
953 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_get_clear()
969 _scsih_scsi_lookup_find_by_scmd(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd in _scsih_scsi_lookup_find_by_scmd() argument
976 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_scmd()
978 for (i = 0; i < ioc->scsiio_depth; i++) { in _scsih_scsi_lookup_find_by_scmd()
979 if (ioc->scsi_lookup[i].scmd == scmd) { in _scsih_scsi_lookup_find_by_scmd()
980 smid = ioc->scsi_lookup[i].smid; in _scsih_scsi_lookup_find_by_scmd()
985 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_scmd()
1000 _scsih_scsi_lookup_find_by_target(struct MPT3SAS_ADAPTER *ioc, int id, in _scsih_scsi_lookup_find_by_target() argument
1007 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_target()
1009 for (i = 0 ; i < ioc->scsiio_depth; i++) { in _scsih_scsi_lookup_find_by_target()
1010 if (ioc->scsi_lookup[i].scmd && in _scsih_scsi_lookup_find_by_target()
1011 (ioc->scsi_lookup[i].scmd->device->id == id && in _scsih_scsi_lookup_find_by_target()
1012 ioc->scsi_lookup[i].scmd->device->channel == channel)) { in _scsih_scsi_lookup_find_by_target()
1018 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_target()
1034 _scsih_scsi_lookup_find_by_lun(struct MPT3SAS_ADAPTER *ioc, int id, in _scsih_scsi_lookup_find_by_lun() argument
1041 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_lun()
1043 for (i = 0 ; i < ioc->scsiio_depth; i++) { in _scsih_scsi_lookup_find_by_lun()
1044 if (ioc->scsi_lookup[i].scmd && in _scsih_scsi_lookup_find_by_lun()
1045 (ioc->scsi_lookup[i].scmd->device->id == id && in _scsih_scsi_lookup_find_by_lun()
1046 ioc->scsi_lookup[i].scmd->device->channel == channel && in _scsih_scsi_lookup_find_by_lun()
1047 ioc->scsi_lookup[i].scmd->device->lun == lun)) { in _scsih_scsi_lookup_find_by_lun()
1053 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_lun()
1069 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_change_queue_depth() local
1086 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_change_queue_depth()
1087 sas_device = mpt3sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_change_queue_depth()
1092 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_change_queue_depth()
1114 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_target_alloc() local
1132 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_target_alloc()
1133 raid_device = _scsih_raid_device_find_by_id(ioc, starget->id, in _scsih_target_alloc()
1141 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_target_alloc()
1146 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_target_alloc()
1148 sas_device = mpt3sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_target_alloc()
1157 if (test_bit(sas_device->handle, ioc->pd_handles)) in _scsih_target_alloc()
1163 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_target_alloc()
1178 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_target_destroy() local
1190 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_target_destroy()
1191 raid_device = _scsih_raid_device_find_by_id(ioc, starget->id, in _scsih_target_destroy()
1197 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_target_destroy()
1201 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_target_destroy()
1203 sas_device = mpt3sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_target_destroy()
1210 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_target_destroy()
1228 struct MPT3SAS_ADAPTER *ioc; in _scsih_slave_alloc() local
1253 ioc = shost_priv(shost); in _scsih_slave_alloc()
1255 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_slave_alloc()
1256 raid_device = _scsih_raid_device_find_by_id(ioc, in _scsih_slave_alloc()
1260 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_slave_alloc()
1264 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_slave_alloc()
1265 sas_device = mpt3sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_slave_alloc()
1273 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_slave_alloc()
1291 struct MPT3SAS_ADAPTER *ioc; in _scsih_slave_destroy() local
1303 ioc = shost_priv(shost); in _scsih_slave_destroy()
1306 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_slave_destroy()
1307 sas_device = mpt3sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_slave_destroy()
1311 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_slave_destroy()
1325 _scsih_display_sata_capabilities(struct MPT3SAS_ADAPTER *ioc, in _scsih_display_sata_capabilities() argument
1334 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_display_sata_capabilities()
1337 ioc->name, __FILE__, __LINE__, __func__); in _scsih_display_sata_capabilities()
1345 ioc->name, __FILE__, __LINE__, __func__); in _scsih_display_sata_capabilities()
1391 struct MPT3SAS_ADAPTER *ioc = shost_priv(sdev->host); in _scsih_get_resync() local
1402 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_get_resync()
1403 raid_device = _scsih_raid_device_find_by_id(ioc, sdev->id, in _scsih_get_resync()
1409 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_get_resync()
1414 if (mpt3sas_config_get_raid_volume_pg0(ioc, &mpi_reply, &vol_pg0, in _scsih_get_resync()
1418 ioc->name, __FILE__, __LINE__, __func__); in _scsih_get_resync()
1440 struct MPT3SAS_ADAPTER *ioc = shost_priv(sdev->host); in _scsih_get_state() local
1449 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_get_state()
1450 raid_device = _scsih_raid_device_find_by_id(ioc, sdev->id, in _scsih_get_state()
1454 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_get_state()
1459 if (mpt3sas_config_get_raid_volume_pg0(ioc, &mpi_reply, &vol_pg0, in _scsih_get_state()
1463 ioc->name, __FILE__, __LINE__, __func__); in _scsih_get_state()
1527 _scsih_get_volume_capabilities(struct MPT3SAS_ADAPTER *ioc, in _scsih_get_volume_capabilities() argument
1537 if ((mpt3sas_config_get_number_pds(ioc, raid_device->handle, in _scsih_get_volume_capabilities()
1539 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in _scsih_get_volume_capabilities()
1540 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, __LINE__, in _scsih_get_volume_capabilities()
1550 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in _scsih_get_volume_capabilities()
1551 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, __LINE__, in _scsih_get_volume_capabilities()
1556 if ((mpt3sas_config_get_raid_volume_pg0(ioc, &mpi_reply, vol_pg0, in _scsih_get_volume_capabilities()
1558 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in _scsih_get_volume_capabilities()
1559 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, __LINE__, in _scsih_get_volume_capabilities()
1570 if (!(mpt3sas_config_get_phys_disk_pg0(ioc, &mpi_reply, in _scsih_get_volume_capabilities()
1573 if (!(mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_get_volume_capabilities()
1597 _scsih_enable_tlr(struct MPT3SAS_ADAPTER *ioc, struct scsi_device *sdev) in _scsih_enable_tlr() argument
1604 if (!(ioc->facts.IOCCapabilities & MPI2_IOCFACTS_CAPABILITY_TLR)) in _scsih_enable_tlr()
1625 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_slave_configure() local
1648 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_slave_configure()
1649 raid_device = _scsih_raid_device_find_by_handle(ioc, handle); in _scsih_slave_configure()
1650 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_slave_configure()
1652 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in _scsih_slave_configure()
1653 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, in _scsih_slave_configure()
1658 if (_scsih_get_volume_capabilities(ioc, raid_device)) { in _scsih_slave_configure()
1659 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in _scsih_slave_configure()
1660 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, in _scsih_slave_configure()
1690 if (ioc->manu_pg10.OEMIdentifier && in _scsih_slave_configure()
1691 (le32_to_cpu(ioc->manu_pg10.GenericFlags0) & in _scsih_slave_configure()
1729 if (mpt3sas_config_get_volume_handle(ioc, handle, in _scsih_slave_configure()
1731 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in _scsih_slave_configure()
1732 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_slave_configure()
1736 if (volume_handle && mpt3sas_config_get_volume_wwid(ioc, in _scsih_slave_configure()
1738 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in _scsih_slave_configure()
1739 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_slave_configure()
1745 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_slave_configure()
1746 sas_device = mpt3sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_slave_configure()
1749 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_slave_configure()
1750 dfailprintk(ioc, pr_warn(MPT3SAS_FMT in _scsih_slave_configure()
1751 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, __LINE__, in _scsih_slave_configure()
1780 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_slave_configure()
1783 _scsih_display_sata_capabilities(ioc, handle, sdev); in _scsih_slave_configure()
1790 _scsih_enable_tlr(ioc, sdev); in _scsih_slave_configure()
1852 _scsih_response_code(struct MPT3SAS_ADAPTER *ioc, u8 response_code) in _scsih_response_code() argument
1886 ioc->name, response_code, desc); in _scsih_response_code()
1903 _scsih_tm_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply) in _scsih_tm_done() argument
1907 if (ioc->tm_cmds.status == MPT3_CMD_NOT_USED) in _scsih_tm_done()
1909 if (ioc->tm_cmds.smid != smid) in _scsih_tm_done()
1911 mpt3sas_base_flush_reply_queues(ioc); in _scsih_tm_done()
1912 ioc->tm_cmds.status |= MPT3_CMD_COMPLETE; in _scsih_tm_done()
1913 mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_tm_done()
1915 memcpy(ioc->tm_cmds.reply, mpi_reply, mpi_reply->MsgLength*4); in _scsih_tm_done()
1916 ioc->tm_cmds.status |= MPT3_CMD_REPLY_VALID; in _scsih_tm_done()
1918 ioc->tm_cmds.status &= ~MPT3_CMD_PENDING; in _scsih_tm_done()
1919 complete(&ioc->tm_cmds.done); in _scsih_tm_done()
1931 mpt3sas_scsih_set_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle) in mpt3sas_scsih_set_tm_flag() argument
1937 shost_for_each_device(sdev, ioc->shost) { in mpt3sas_scsih_set_tm_flag()
1946 ioc->ignore_loginfos = 1; in mpt3sas_scsih_set_tm_flag()
1959 mpt3sas_scsih_clear_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle) in mpt3sas_scsih_clear_tm_flag() argument
1965 shost_for_each_device(sdev, ioc->shost) { in mpt3sas_scsih_clear_tm_flag()
1974 ioc->ignore_loginfos = 0; in mpt3sas_scsih_clear_tm_flag()
1999 mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle, uint channel, in mpt3sas_scsih_issue_tm() argument
2012 mutex_lock(&ioc->tm_cmds.mutex); in mpt3sas_scsih_issue_tm()
2013 if (ioc->tm_cmds.status != MPT3_CMD_NOT_USED) { in mpt3sas_scsih_issue_tm()
2015 __func__, ioc->name); in mpt3sas_scsih_issue_tm()
2020 if (ioc->shost_recovery || ioc->remove_host || in mpt3sas_scsih_issue_tm()
2021 ioc->pci_error_recovery) { in mpt3sas_scsih_issue_tm()
2023 __func__, ioc->name); in mpt3sas_scsih_issue_tm()
2028 ioc_state = mpt3sas_base_get_iocstate(ioc, 0); in mpt3sas_scsih_issue_tm()
2030 dhsprintk(ioc, pr_info(MPT3SAS_FMT in mpt3sas_scsih_issue_tm()
2031 "unexpected doorbell active!\n", ioc->name)); in mpt3sas_scsih_issue_tm()
2032 rc = mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP, in mpt3sas_scsih_issue_tm()
2039 mpt3sas_base_fault_info(ioc, ioc_state & in mpt3sas_scsih_issue_tm()
2041 rc = mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP, in mpt3sas_scsih_issue_tm()
2047 smid = mpt3sas_base_get_smid_hpr(ioc, ioc->tm_cb_idx); in mpt3sas_scsih_issue_tm()
2050 ioc->name, __func__); in mpt3sas_scsih_issue_tm()
2056 scsi_lookup = &ioc->scsi_lookup[smid_task - 1]; in mpt3sas_scsih_issue_tm()
2058 dtmprintk(ioc, pr_info(MPT3SAS_FMT in mpt3sas_scsih_issue_tm()
2060 ioc->name, handle, type, smid_task)); in mpt3sas_scsih_issue_tm()
2061 ioc->tm_cmds.status = MPT3_CMD_PENDING; in mpt3sas_scsih_issue_tm()
2062 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in mpt3sas_scsih_issue_tm()
2063 ioc->tm_cmds.smid = smid; in mpt3sas_scsih_issue_tm()
2065 memset(ioc->tm_cmds.reply, 0, sizeof(Mpi2SCSITaskManagementReply_t)); in mpt3sas_scsih_issue_tm()
2071 mpt3sas_scsih_set_tm_flag(ioc, handle); in mpt3sas_scsih_issue_tm()
2072 init_completion(&ioc->tm_cmds.done); in mpt3sas_scsih_issue_tm()
2073 mpt3sas_base_put_smid_hi_priority(ioc, smid); in mpt3sas_scsih_issue_tm()
2074 timeleft = wait_for_completion_timeout(&ioc->tm_cmds.done, timeout*HZ); in mpt3sas_scsih_issue_tm()
2075 if (!(ioc->tm_cmds.status & MPT3_CMD_COMPLETE)) { in mpt3sas_scsih_issue_tm()
2077 ioc->name, __func__); in mpt3sas_scsih_issue_tm()
2080 if (!(ioc->tm_cmds.status & MPT3_CMD_RESET)) { in mpt3sas_scsih_issue_tm()
2081 rc = mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP, in mpt3sas_scsih_issue_tm()
2084 ioc->tm_cmds.status = MPT3_CMD_NOT_USED; in mpt3sas_scsih_issue_tm()
2085 mpt3sas_scsih_clear_tm_flag(ioc, handle); in mpt3sas_scsih_issue_tm()
2090 if (ioc->tm_cmds.status & MPT3_CMD_REPLY_VALID) { in mpt3sas_scsih_issue_tm()
2091 mpt3sas_trigger_master(ioc, MASTER_TRIGGER_TASK_MANAGMENT); in mpt3sas_scsih_issue_tm()
2092 mpi_reply = ioc->tm_cmds.reply; in mpt3sas_scsih_issue_tm()
2093 dtmprintk(ioc, pr_info(MPT3SAS_FMT "complete tm: " \ in mpt3sas_scsih_issue_tm()
2095 ioc->name, le16_to_cpu(mpi_reply->IOCStatus), in mpt3sas_scsih_issue_tm()
2098 if (ioc->logging_level & MPT_DEBUG_TM) { in mpt3sas_scsih_issue_tm()
2099 _scsih_response_code(ioc, mpi_reply->ResponseCode); in mpt3sas_scsih_issue_tm()
2115 if (_scsih_scsi_lookup_find_by_target(ioc, id, channel)) in mpt3sas_scsih_issue_tm()
2122 if (_scsih_scsi_lookup_find_by_lun(ioc, id, lun, channel)) in mpt3sas_scsih_issue_tm()
2135 mpt3sas_scsih_clear_tm_flag(ioc, handle); in mpt3sas_scsih_issue_tm()
2136 ioc->tm_cmds.status = MPT3_CMD_NOT_USED; in mpt3sas_scsih_issue_tm()
2138 mutex_unlock(&ioc->tm_cmds.mutex); in mpt3sas_scsih_issue_tm()
2144 mutex_unlock(&ioc->tm_cmds.mutex); in mpt3sas_scsih_issue_tm()
2156 _scsih_tm_display_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd) in _scsih_tm_display_info() argument
2175 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_tm_display_info()
2176 sas_device = mpt3sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_tm_display_info()
2197 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_tm_display_info()
2210 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in _scsih_abort() local
2218 _scsih_tm_display_info(ioc, scmd); in _scsih_abort()
2231 smid = _scsih_scsi_lookup_find_by_scmd(ioc, scmd); in _scsih_abort()
2247 mpt3sas_halt_firmware(ioc); in _scsih_abort()
2250 r = mpt3sas_scsih_issue_tm(ioc, handle, scmd->device->channel, in _scsih_abort()
2269 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in _scsih_dev_reset() local
2278 _scsih_tm_display_info(ioc, scmd); in _scsih_dev_reset()
2294 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_dev_reset()
2295 sas_device = _scsih_sas_device_find_by_handle(ioc, in _scsih_dev_reset()
2299 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_dev_reset()
2309 r = mpt3sas_scsih_issue_tm(ioc, handle, scmd->device->channel, in _scsih_dev_reset()
2328 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in _scsih_target_reset() local
2338 _scsih_tm_display_info(ioc, scmd); in _scsih_target_reset()
2354 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_target_reset()
2355 sas_device = _scsih_sas_device_find_by_handle(ioc, in _scsih_target_reset()
2359 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_target_reset()
2369 r = mpt3sas_scsih_issue_tm(ioc, handle, scmd->device->channel, in _scsih_target_reset()
2389 struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in _scsih_host_reset() local
2393 ioc->name, scmd); in _scsih_host_reset()
2396 if (ioc->is_driver_loading) { in _scsih_host_reset()
2398 ioc->name); in _scsih_host_reset()
2403 retval = mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP, in _scsih_host_reset()
2408 ioc->name, ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd); in _scsih_host_reset()
2425 _scsih_fw_event_add(struct MPT3SAS_ADAPTER *ioc, struct fw_event_work *fw_event) in _scsih_fw_event_add() argument
2429 if (ioc->firmware_event_thread == NULL) in _scsih_fw_event_add()
2432 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_fw_event_add()
2434 list_add_tail(&fw_event->list, &ioc->fw_event_list); in _scsih_fw_event_add()
2436 queue_work(ioc->firmware_event_thread, &fw_event->work); in _scsih_fw_event_add()
2437 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_fw_event_add()
2451 _scsih_fw_event_free(struct MPT3SAS_ADAPTER *ioc, struct fw_event_work in _scsih_fw_event_free() argument
2456 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_fw_event_free()
2459 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_fw_event_free()
2471 mpt3sas_send_trigger_data_event(struct MPT3SAS_ADAPTER *ioc, in mpt3sas_send_trigger_data_event() argument
2476 if (ioc->is_driver_loading) in mpt3sas_send_trigger_data_event()
2483 fw_event->ioc = ioc; in mpt3sas_send_trigger_data_event()
2485 _scsih_fw_event_add(ioc, fw_event); in mpt3sas_send_trigger_data_event()
2495 _scsih_error_recovery_delete_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_error_recovery_delete_devices() argument
2499 if (ioc->is_driver_loading) in _scsih_error_recovery_delete_devices()
2505 fw_event->ioc = ioc; in _scsih_error_recovery_delete_devices()
2506 _scsih_fw_event_add(ioc, fw_event); in _scsih_error_recovery_delete_devices()
2516 mpt3sas_port_enable_complete(struct MPT3SAS_ADAPTER *ioc) in mpt3sas_port_enable_complete() argument
2524 fw_event->ioc = ioc; in mpt3sas_port_enable_complete()
2525 _scsih_fw_event_add(ioc, fw_event); in mpt3sas_port_enable_complete()
2538 _scsih_fw_event_cleanup_queue(struct MPT3SAS_ADAPTER *ioc) in _scsih_fw_event_cleanup_queue() argument
2542 if (list_empty(&ioc->fw_event_list) || in _scsih_fw_event_cleanup_queue()
2543 !ioc->firmware_event_thread || in_interrupt()) in _scsih_fw_event_cleanup_queue()
2546 list_for_each_entry_safe(fw_event, next, &ioc->fw_event_list, list) { in _scsih_fw_event_cleanup_queue()
2548 _scsih_fw_event_free(ioc, fw_event); in _scsih_fw_event_cleanup_queue()
2561 _scsih_ublock_io_all_device(struct MPT3SAS_ADAPTER *ioc) in _scsih_ublock_io_all_device() argument
2566 shost_for_each_device(sdev, ioc->shost) { in _scsih_ublock_io_all_device()
2574 dewtprintk(ioc, sdev_printk(KERN_INFO, sdev, in _scsih_ublock_io_all_device()
2590 _scsih_ublock_io_device(struct MPT3SAS_ADAPTER *ioc, u64 sas_address) in _scsih_ublock_io_device() argument
2595 shost_for_each_device(sdev, ioc->shost) { in _scsih_ublock_io_device()
2617 _scsih_block_io_all_device(struct MPT3SAS_ADAPTER *ioc) in _scsih_block_io_all_device() argument
2622 shost_for_each_device(sdev, ioc->shost) { in _scsih_block_io_all_device()
2643 _scsih_block_io_device(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_block_io_device() argument
2648 shost_for_each_device(sdev, ioc->shost) { in _scsih_block_io_device()
2673 _scsih_block_io_to_children_attached_to_ex(struct MPT3SAS_ADAPTER *ioc, in _scsih_block_io_to_children_attached_to_ex() argument
2688 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_block_io_to_children_attached_to_ex()
2690 mpt3sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_block_io_to_children_attached_to_ex()
2694 ioc->blocking_handles); in _scsih_block_io_to_children_attached_to_ex()
2695 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_block_io_to_children_attached_to_ex()
2708 ioc, mpt3sas_port->remote_identify.sas_address); in _scsih_block_io_to_children_attached_to_ex()
2709 _scsih_block_io_to_children_attached_to_ex(ioc, in _scsih_block_io_to_children_attached_to_ex()
2724 _scsih_block_io_to_children_attached_directly(struct MPT3SAS_ADAPTER *ioc, in _scsih_block_io_to_children_attached_directly() argument
2738 _scsih_block_io_device(ioc, handle); in _scsih_block_io_to_children_attached_directly()
2758 _scsih_tm_tr_send(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_tm_tr_send() argument
2769 if (ioc->remove_host) { in _scsih_tm_tr_send()
2770 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_send()
2772 __func__, ioc->name, handle)); in _scsih_tm_tr_send()
2774 } else if (ioc->pci_error_recovery) { in _scsih_tm_tr_send()
2775 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_send()
2777 __func__, ioc->name, in _scsih_tm_tr_send()
2781 ioc_state = mpt3sas_base_get_iocstate(ioc, 1); in _scsih_tm_tr_send()
2783 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_send()
2785 __func__, ioc->name, in _scsih_tm_tr_send()
2791 if (test_bit(handle, ioc->pd_handles)) in _scsih_tm_tr_send()
2794 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_tm_tr_send()
2795 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_tm_tr_send()
2802 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_tm_tr_send()
2805 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_send()
2807 ioc->name, handle, in _scsih_tm_tr_send()
2809 _scsih_ublock_io_device(ioc, sas_address); in _scsih_tm_tr_send()
2813 smid = mpt3sas_base_get_smid_hpr(ioc, ioc->tm_tr_cb_idx); in _scsih_tm_tr_send()
2820 list_add_tail(&delayed_tr->list, &ioc->delayed_tr_list); in _scsih_tm_tr_send()
2821 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_send()
2823 ioc->name, handle)); in _scsih_tm_tr_send()
2827 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_send()
2829 ioc->name, handle, smid, in _scsih_tm_tr_send()
2830 ioc->tm_tr_cb_idx)); in _scsih_tm_tr_send()
2831 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_tm_tr_send()
2836 mpt3sas_base_put_smid_hi_priority(ioc, smid); in _scsih_tm_tr_send()
2837 mpt3sas_trigger_master(ioc, MASTER_TRIGGER_DEVICE_REMOVAL); in _scsih_tm_tr_send()
2857 _scsih_tm_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, in _scsih_tm_tr_complete() argument
2863 mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_tm_tr_complete()
2868 if (ioc->remove_host) { in _scsih_tm_tr_complete()
2869 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_complete()
2870 "%s: host has been removed\n", __func__, ioc->name)); in _scsih_tm_tr_complete()
2872 } else if (ioc->pci_error_recovery) { in _scsih_tm_tr_complete()
2873 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_complete()
2875 ioc->name)); in _scsih_tm_tr_complete()
2878 ioc_state = mpt3sas_base_get_iocstate(ioc, 1); in _scsih_tm_tr_complete()
2880 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_complete()
2881 "%s: host is not operational\n", __func__, ioc->name)); in _scsih_tm_tr_complete()
2886 ioc->name, __FILE__, __LINE__, __func__); in _scsih_tm_tr_complete()
2889 mpi_request_tm = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_tm_tr_complete()
2892 dewtprintk(ioc, pr_err(MPT3SAS_FMT in _scsih_tm_tr_complete()
2894 ioc->name, handle, in _scsih_tm_tr_complete()
2899 mpt3sas_trigger_master(ioc, MASTER_TRIGGER_TASK_MANAGMENT); in _scsih_tm_tr_complete()
2900 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_complete()
2902 "loginfo(0x%08x), completed(%d)\n", ioc->name, in _scsih_tm_tr_complete()
2907 smid_sas_ctrl = mpt3sas_base_get_smid(ioc, ioc->tm_sas_control_cb_idx); in _scsih_tm_tr_complete()
2910 ioc->name, __func__); in _scsih_tm_tr_complete()
2914 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_complete()
2916 ioc->name, handle, smid_sas_ctrl, in _scsih_tm_tr_complete()
2917 ioc->tm_sas_control_cb_idx)); in _scsih_tm_tr_complete()
2918 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid_sas_ctrl); in _scsih_tm_tr_complete()
2923 mpt3sas_base_put_smid_default(ioc, smid_sas_ctrl); in _scsih_tm_tr_complete()
2925 return _scsih_check_for_pending_tm(ioc, smid); in _scsih_tm_tr_complete()
2945 _scsih_sas_control_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, in _scsih_sas_control_complete() argument
2949 mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_sas_control_complete()
2952 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_control_complete()
2955 ioc->name, le16_to_cpu(mpi_reply->DevHandle), smid, in _scsih_sas_control_complete()
2960 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_control_complete()
2976 _scsih_tm_tr_volume_send(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_tm_tr_volume_send() argument
2982 if (ioc->shost_recovery || ioc->remove_host || in _scsih_tm_tr_volume_send()
2983 ioc->pci_error_recovery) { in _scsih_tm_tr_volume_send()
2984 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_volume_send()
2986 __func__, ioc->name)); in _scsih_tm_tr_volume_send()
2990 smid = mpt3sas_base_get_smid_hpr(ioc, ioc->tm_tr_volume_cb_idx); in _scsih_tm_tr_volume_send()
2997 list_add_tail(&delayed_tr->list, &ioc->delayed_tr_volume_list); in _scsih_tm_tr_volume_send()
2998 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_volume_send()
3000 ioc->name, handle)); in _scsih_tm_tr_volume_send()
3004 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_tr_volume_send()
3006 ioc->name, handle, smid, in _scsih_tm_tr_volume_send()
3007 ioc->tm_tr_volume_cb_idx)); in _scsih_tm_tr_volume_send()
3008 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_tm_tr_volume_send()
3013 mpt3sas_base_put_smid_hi_priority(ioc, smid); in _scsih_tm_tr_volume_send()
3028 _scsih_tm_volume_tr_complete(struct MPT3SAS_ADAPTER *ioc, u16 smid, in _scsih_tm_volume_tr_complete() argument
3034 mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_tm_volume_tr_complete()
3036 if (ioc->shost_recovery || ioc->remove_host || in _scsih_tm_volume_tr_complete()
3037 ioc->pci_error_recovery) { in _scsih_tm_volume_tr_complete()
3038 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_volume_tr_complete()
3040 __func__, ioc->name)); in _scsih_tm_volume_tr_complete()
3045 ioc->name, __FILE__, __LINE__, __func__); in _scsih_tm_volume_tr_complete()
3049 mpi_request_tm = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_tm_volume_tr_complete()
3052 dewtprintk(ioc, pr_err(MPT3SAS_FMT in _scsih_tm_volume_tr_complete()
3054 ioc->name, handle, in _scsih_tm_volume_tr_complete()
3059 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_tm_volume_tr_complete()
3061 "loginfo(0x%08x), completed(%d)\n", ioc->name, in _scsih_tm_volume_tr_complete()
3066 return _scsih_check_for_pending_tm(ioc, smid); in _scsih_tm_volume_tr_complete()
3082 _scsih_check_for_pending_tm(struct MPT3SAS_ADAPTER *ioc, u16 smid) in _scsih_check_for_pending_tm() argument
3086 if (!list_empty(&ioc->delayed_tr_volume_list)) { in _scsih_check_for_pending_tm()
3087 delayed_tr = list_entry(ioc->delayed_tr_volume_list.next, in _scsih_check_for_pending_tm()
3089 mpt3sas_base_free_smid(ioc, smid); in _scsih_check_for_pending_tm()
3090 _scsih_tm_tr_volume_send(ioc, delayed_tr->handle); in _scsih_check_for_pending_tm()
3096 if (!list_empty(&ioc->delayed_tr_list)) { in _scsih_check_for_pending_tm()
3097 delayed_tr = list_entry(ioc->delayed_tr_list.next, in _scsih_check_for_pending_tm()
3099 mpt3sas_base_free_smid(ioc, smid); in _scsih_check_for_pending_tm()
3100 _scsih_tm_tr_send(ioc, delayed_tr->handle); in _scsih_check_for_pending_tm()
3123 _scsih_check_topo_delete_events(struct MPT3SAS_ADAPTER *ioc, in _scsih_check_topo_delete_events() argument
3141 _scsih_tm_tr_send(ioc, handle); in _scsih_check_topo_delete_events()
3145 if (expander_handle < ioc->sas_hba.num_phys) { in _scsih_check_topo_delete_events()
3146 _scsih_block_io_to_children_attached_directly(ioc, event_data); in _scsih_check_topo_delete_events()
3152 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_check_topo_delete_events()
3153 sas_expander = mpt3sas_scsih_expander_find_by_handle(ioc, in _scsih_check_topo_delete_events()
3155 _scsih_block_io_to_children_attached_to_ex(ioc, sas_expander); in _scsih_check_topo_delete_events()
3156 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_check_topo_delete_events()
3158 handle = find_first_bit(ioc->blocking_handles, in _scsih_check_topo_delete_events()
3159 ioc->facts.MaxDevHandle); in _scsih_check_topo_delete_events()
3160 if (handle < ioc->facts.MaxDevHandle) in _scsih_check_topo_delete_events()
3161 _scsih_block_io_device(ioc, handle); in _scsih_check_topo_delete_events()
3162 } while (test_and_clear_bit(handle, ioc->blocking_handles)); in _scsih_check_topo_delete_events()
3164 _scsih_block_io_to_children_attached_directly(ioc, event_data); in _scsih_check_topo_delete_events()
3170 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_check_topo_delete_events()
3171 list_for_each_entry(fw_event, &ioc->fw_event_list, list) { in _scsih_check_topo_delete_events()
3183 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_check_topo_delete_events()
3184 "setting ignoring flag\n", ioc->name)); in _scsih_check_topo_delete_events()
3189 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_check_topo_delete_events()
3200 _scsih_set_volume_delete_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_set_volume_delete_flag() argument
3206 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_set_volume_delete_flag()
3207 raid_device = _scsih_raid_device_find_by_handle(ioc, handle); in _scsih_set_volume_delete_flag()
3213 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_set_volume_delete_flag()
3215 "wwid(0x%016llx)\n", ioc->name, handle, in _scsih_set_volume_delete_flag()
3218 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_set_volume_delete_flag()
3257 _scsih_check_ir_config_unhide_events(struct MPT3SAS_ADAPTER *ioc, in _scsih_check_ir_config_unhide_events() argument
3279 _scsih_set_volume_delete_flag(ioc, volume_handle); in _scsih_check_ir_config_unhide_events()
3297 _scsih_tm_tr_volume_send(ioc, a); in _scsih_check_ir_config_unhide_events()
3299 _scsih_tm_tr_volume_send(ioc, b); in _scsih_check_ir_config_unhide_events()
3308 clear_bit(handle, ioc->pd_handles); in _scsih_check_ir_config_unhide_events()
3310 _scsih_tm_tr_send(ioc, handle); in _scsih_check_ir_config_unhide_events()
3316 list_add_tail(&delayed_tr->list, &ioc->delayed_tr_list); in _scsih_check_ir_config_unhide_events()
3317 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_check_ir_config_unhide_events()
3318 "DELAYED:tr:handle(0x%04x), (open)\n", ioc->name, in _scsih_check_ir_config_unhide_events()
3321 _scsih_tm_tr_send(ioc, handle); in _scsih_check_ir_config_unhide_events()
3339 _scsih_check_volume_delete_events(struct MPT3SAS_ADAPTER *ioc, in _scsih_check_volume_delete_events() argument
3349 _scsih_set_volume_delete_flag(ioc, in _scsih_check_volume_delete_events()
3362 _scsih_temp_threshold_events(struct MPT3SAS_ADAPTER *ioc, in _scsih_temp_threshold_events() argument
3365 if (ioc->temp_sensors_count >= event_data->SensorNum) { in _scsih_temp_threshold_events()
3367 " exceeded for Sensor: %d !!!\n", ioc->name, in _scsih_temp_threshold_events()
3374 ioc->name, event_data->CurrentTemperature); in _scsih_temp_threshold_events()
3388 _scsih_flush_running_cmds(struct MPT3SAS_ADAPTER *ioc) in _scsih_flush_running_cmds() argument
3394 for (smid = 1; smid <= ioc->scsiio_depth; smid++) { in _scsih_flush_running_cmds()
3395 scmd = _scsih_scsi_lookup_get_clear(ioc, smid); in _scsih_flush_running_cmds()
3399 mpt3sas_base_free_smid(ioc, smid); in _scsih_flush_running_cmds()
3401 if (ioc->pci_error_recovery) in _scsih_flush_running_cmds()
3407 dtmprintk(ioc, pr_info(MPT3SAS_FMT "completing %d cmds\n", in _scsih_flush_running_cmds()
3408 ioc->name, count)); in _scsih_flush_running_cmds()
3422 _scsih_setup_eedp(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, in _scsih_setup_eedp() argument
3518 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_qcmd() local
3527 if (ioc->logging_level & MPT_DEBUG_SCSI) in _scsih_qcmd()
3538 if (ioc->pci_error_recovery || ioc->remove_host) { in _scsih_qcmd()
3556 if (ioc->shost_recovery || ioc->ioc_link_reset_in_progress) in _scsih_qcmd()
3583 smid = mpt3sas_base_get_smid_scsiio(ioc, ioc->scsi_io_cb_idx, scmd); in _scsih_qcmd()
3586 ioc->name, __func__); in _scsih_qcmd()
3589 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_qcmd()
3591 _scsih_setup_eedp(ioc, scmd, mpi_request); in _scsih_qcmd()
3608 mpt3sas_base_get_sense_buffer_dma(ioc, smid); in _scsih_qcmd()
3615 if (ioc->build_sg_scmd(ioc, scmd, smid)) { in _scsih_qcmd()
3616 mpt3sas_base_free_smid(ioc, smid); in _scsih_qcmd()
3620 ioc->build_zero_len_sge(ioc, &mpi_request->SGL); in _scsih_qcmd()
3626 mpt3sas_base_put_smid_fast_path(ioc, smid, handle); in _scsih_qcmd()
3628 mpt3sas_base_put_smid_scsi_io(ioc, smid, handle); in _scsih_qcmd()
3630 mpt3sas_base_put_smid_default(ioc, smid); in _scsih_qcmd()
3674 _scsih_scsi_ioc_info(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, in _scsih_scsi_ioc_info() argument
3685 char *desc_scsi_state = ioc->tmp_string; in _scsih_scsi_ioc_info()
3813 pr_warn(MPT3SAS_FMT "\t%s wwid(0x%016llx)\n", ioc->name, in _scsih_scsi_ioc_info()
3816 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_scsi_ioc_info()
3817 sas_device = mpt3sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_scsi_ioc_info()
3822 ioc->name, (unsigned long long) in _scsih_scsi_ioc_info()
3826 ioc->name, (unsigned long long) in _scsih_scsi_ioc_info()
3829 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_scsi_ioc_info()
3834 ioc->name, le16_to_cpu(mpi_reply->DevHandle), in _scsih_scsi_ioc_info()
3838 ioc->name, scsi_bufflen(scmd), scmd->underflow, in _scsih_scsi_ioc_info()
3842 ioc->name, le16_to_cpu(mpi_reply->TaskTag), in _scsih_scsi_ioc_info()
3846 ioc->name, desc_scsi_status, in _scsih_scsi_ioc_info()
3854 ioc->name, data.skey, in _scsih_scsi_ioc_info()
3861 _scsih_response_code(ioc, response_bytes[0]); in _scsih_scsi_ioc_info()
3875 _scsih_turn_on_pfa_led(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_turn_on_pfa_led() argument
3881 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_turn_on_pfa_led()
3892 if ((mpt3sas_base_scsi_enclosure_processor(ioc, &mpi_reply, in _scsih_turn_on_pfa_led()
3894 pr_err(MPT3SAS_FMT "failure at %s:%d/%s()!\n", ioc->name, in _scsih_turn_on_pfa_led()
3901 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_turn_on_pfa_led()
3903 ioc->name, le16_to_cpu(mpi_reply.IOCStatus), in _scsih_turn_on_pfa_led()
3917 _scsih_turn_off_pfa_led(struct MPT3SAS_ADAPTER *ioc, in _scsih_turn_off_pfa_led() argument
3931 if ((mpt3sas_base_scsi_enclosure_processor(ioc, &mpi_reply, in _scsih_turn_off_pfa_led()
3933 printk(MPT3SAS_FMT "failure at %s:%d/%s()!\n", ioc->name, in _scsih_turn_off_pfa_led()
3939 dewtprintk(ioc, printk(MPT3SAS_FMT in _scsih_turn_off_pfa_led()
3941 ioc->name, le16_to_cpu(mpi_reply.IOCStatus), in _scsih_turn_off_pfa_led()
3955 _scsih_send_event_to_turn_on_pfa_led(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_send_event_to_turn_on_pfa_led() argument
3964 fw_event->ioc = ioc; in _scsih_send_event_to_turn_on_pfa_led()
3965 _scsih_fw_event_add(ioc, fw_event); in _scsih_send_event_to_turn_on_pfa_led()
3977 _scsih_smart_predicted_fault(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_smart_predicted_fault() argument
3988 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_smart_predicted_fault()
3989 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_smart_predicted_fault()
3991 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_smart_predicted_fault()
3999 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_smart_predicted_fault()
4003 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_smart_predicted_fault()
4005 if (ioc->pdev->subsystem_vendor == PCI_VENDOR_ID_IBM) in _scsih_smart_predicted_fault()
4006 _scsih_send_event_to_turn_on_pfa_led(ioc, handle); in _scsih_smart_predicted_fault()
4014 ioc->name, __FILE__, __LINE__, __func__); in _scsih_smart_predicted_fault()
4030 mpt3sas_ctl_add_to_event_log(ioc, event_reply); in _scsih_smart_predicted_fault()
4047 _scsih_io_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply) in _scsih_io_done() argument
4060 mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_io_done()
4061 scmd = _scsih_scsi_lookup_get_clear(ioc, smid); in _scsih_io_done()
4065 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_io_done()
4111 const void *sense_data = mpt3sas_base_get_sense_buffer(ioc, in _scsih_io_done()
4119 _scsih_smart_predicted_fault(ioc, in _scsih_io_done()
4121 mpt3sas_trigger_scsi(ioc, data.skey, data.asc, data.ascq); in _scsih_io_done()
4227 if (scmd->result && (ioc->logging_level & MPT_DEBUG_REPLY)) in _scsih_io_done()
4228 _scsih_scsi_ioc_info(ioc , scmd, mpi_reply, smid); in _scsih_io_done()
4251 _scsih_sas_host_refresh(struct MPT3SAS_ADAPTER *ioc) in _scsih_sas_host_refresh() argument
4261 dtmprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_host_refresh()
4263 ioc->name, (unsigned long long)ioc->sas_hba.sas_address)); in _scsih_sas_host_refresh()
4265 sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys in _scsih_sas_host_refresh()
4270 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_refresh()
4274 if ((mpt3sas_config_get_sas_iounit_pg0(ioc, &mpi_reply, in _scsih_sas_host_refresh()
4280 for (i = 0; i < ioc->sas_hba.num_phys ; i++) { in _scsih_sas_host_refresh()
4283 ioc->sas_hba.handle = le16_to_cpu(sas_iounit_pg0-> in _scsih_sas_host_refresh()
4285 ioc->sas_hba.phy[i].handle = ioc->sas_hba.handle; in _scsih_sas_host_refresh()
4290 mpt3sas_transport_update_links(ioc, ioc->sas_hba.sas_address, in _scsih_sas_host_refresh()
4306 _scsih_sas_host_add(struct MPT3SAS_ADAPTER *ioc) in _scsih_sas_host_add() argument
4319 mpt3sas_config_get_number_hba_phys(ioc, &ioc->sas_hba.num_phys); in _scsih_sas_host_add()
4320 if (!ioc->sas_hba.num_phys) { in _scsih_sas_host_add()
4322 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4327 sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys * in _scsih_sas_host_add()
4332 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4335 if ((mpt3sas_config_get_sas_iounit_pg0(ioc, &mpi_reply, in _scsih_sas_host_add()
4338 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4345 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4350 sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys * in _scsih_sas_host_add()
4355 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4358 if ((mpt3sas_config_get_sas_iounit_pg1(ioc, &mpi_reply, in _scsih_sas_host_add()
4361 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4368 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4372 ioc->io_missing_delay = in _scsih_sas_host_add()
4377 ioc->device_missing_delay = (device_missing_delay & in _scsih_sas_host_add()
4380 ioc->device_missing_delay = device_missing_delay & in _scsih_sas_host_add()
4383 ioc->sas_hba.parent_dev = &ioc->shost->shost_gendev; in _scsih_sas_host_add()
4384 ioc->sas_hba.phy = kcalloc(ioc->sas_hba.num_phys, in _scsih_sas_host_add()
4386 if (!ioc->sas_hba.phy) { in _scsih_sas_host_add()
4388 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4391 for (i = 0; i < ioc->sas_hba.num_phys ; i++) { in _scsih_sas_host_add()
4392 if ((mpt3sas_config_get_phy_pg0(ioc, &mpi_reply, &phy_pg0, in _scsih_sas_host_add()
4395 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4402 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4407 ioc->sas_hba.handle = le16_to_cpu(sas_iounit_pg0-> in _scsih_sas_host_add()
4409 ioc->sas_hba.phy[i].handle = ioc->sas_hba.handle; in _scsih_sas_host_add()
4410 ioc->sas_hba.phy[i].phy_id = i; in _scsih_sas_host_add()
4411 mpt3sas_transport_add_host_phy(ioc, &ioc->sas_hba.phy[i], in _scsih_sas_host_add()
4412 phy_pg0, ioc->sas_hba.parent_dev); in _scsih_sas_host_add()
4414 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_sas_host_add()
4415 MPI2_SAS_DEVICE_PGAD_FORM_HANDLE, ioc->sas_hba.handle))) { in _scsih_sas_host_add()
4417 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4420 ioc->sas_hba.enclosure_handle = in _scsih_sas_host_add()
4422 ioc->sas_hba.sas_address = le64_to_cpu(sas_device_pg0.SASAddress); in _scsih_sas_host_add()
4425 ioc->name, ioc->sas_hba.handle, in _scsih_sas_host_add()
4426 (unsigned long long) ioc->sas_hba.sas_address, in _scsih_sas_host_add()
4427 ioc->sas_hba.num_phys) ; in _scsih_sas_host_add()
4429 if (ioc->sas_hba.enclosure_handle) { in _scsih_sas_host_add()
4430 if (!(mpt3sas_config_get_enclosure_pg0(ioc, &mpi_reply, in _scsih_sas_host_add()
4432 ioc->sas_hba.enclosure_handle))) in _scsih_sas_host_add()
4433 ioc->sas_hba.enclosure_logical_id = in _scsih_sas_host_add()
4452 _scsih_expander_add(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_expander_add() argument
4471 if (ioc->shost_recovery || ioc->pci_error_recovery) in _scsih_expander_add()
4474 if ((mpt3sas_config_get_expander_pg0(ioc, &mpi_reply, &expander_pg0, in _scsih_expander_add()
4477 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4485 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4491 if (_scsih_get_sas_address(ioc, parent_handle, &sas_address_parent) in _scsih_expander_add()
4494 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4497 if (sas_address_parent != ioc->sas_hba.sas_address) { in _scsih_expander_add()
4498 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_expander_add()
4499 sas_expander = mpt3sas_scsih_expander_find_by_sas_address(ioc, in _scsih_expander_add()
4501 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_expander_add()
4503 rc = _scsih_expander_add(ioc, parent_handle); in _scsih_expander_add()
4509 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_expander_add()
4511 sas_expander = mpt3sas_scsih_expander_find_by_sas_address(ioc, in _scsih_expander_add()
4513 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_expander_add()
4522 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4532 " parent(0x%04x), sas_addr(0x%016llx), phys(%d)\n", ioc->name, in _scsih_expander_add()
4542 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4548 mpt3sas_port = mpt3sas_transport_port_add(ioc, handle, in _scsih_expander_add()
4552 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4559 if ((mpt3sas_config_get_expander_pg1(ioc, &mpi_reply, in _scsih_expander_add()
4562 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4569 if ((mpt3sas_transport_add_expander_phy(ioc, in _scsih_expander_add()
4573 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4580 if (!(mpt3sas_config_get_enclosure_pg0(ioc, &mpi_reply, in _scsih_expander_add()
4587 _scsih_expander_node_add(ioc, sas_expander); in _scsih_expander_add()
4593 mpt3sas_transport_port_remove(ioc, sas_expander->sas_address, in _scsih_expander_add()
4607 mpt3sas_expander_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address) in mpt3sas_expander_remove() argument
4612 if (ioc->shost_recovery) in mpt3sas_expander_remove()
4615 spin_lock_irqsave(&ioc->sas_node_lock, flags); in mpt3sas_expander_remove()
4616 sas_expander = mpt3sas_scsih_expander_find_by_sas_address(ioc, in mpt3sas_expander_remove()
4620 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt3sas_expander_remove()
4622 _scsih_expander_node_remove(ioc, sas_expander); in mpt3sas_expander_remove()
4639 _scsih_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply) in _scsih_done() argument
4643 mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply); in _scsih_done()
4644 if (ioc->scsih_cmds.status == MPT3_CMD_NOT_USED) in _scsih_done()
4646 if (ioc->scsih_cmds.smid != smid) in _scsih_done()
4648 ioc->scsih_cmds.status |= MPT3_CMD_COMPLETE; in _scsih_done()
4650 memcpy(ioc->scsih_cmds.reply, mpi_reply, in _scsih_done()
4652 ioc->scsih_cmds.status |= MPT3_CMD_REPLY_VALID; in _scsih_done()
4654 ioc->scsih_cmds.status &= ~MPT3_CMD_PENDING; in _scsih_done()
4655 complete(&ioc->scsih_cmds.done); in _scsih_done()
4675 _scsih_check_access_status(struct MPT3SAS_ADAPTER *ioc, u64 sas_address, in _scsih_check_access_status() argument
4725 ioc->name, desc, (unsigned long long)sas_address, handle); in _scsih_check_access_status()
4740 _scsih_check_device(struct MPT3SAS_ADAPTER *ioc, in _scsih_check_device() argument
4754 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_check_device()
4773 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_check_device()
4775 sas_device = mpt3sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_check_device()
4779 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_check_device()
4798 ioc->name, handle); in _scsih_check_device()
4799 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_check_device()
4804 if (_scsih_check_access_status(ioc, sas_address, handle, in _scsih_check_device()
4806 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_check_device()
4810 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_check_device()
4811 _scsih_ublock_io_device(ioc, sas_address); in _scsih_check_device()
4827 _scsih_add_device(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phy_num, in _scsih_add_device() argument
4839 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_add_device()
4842 ioc->name, __FILE__, __LINE__, __func__); in _scsih_add_device()
4850 ioc->name, __FILE__, __LINE__, __func__); in _scsih_add_device()
4864 ioc->name, handle); in _scsih_add_device()
4869 if (_scsih_check_access_status(ioc, sas_address, handle, in _scsih_add_device()
4873 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_add_device()
4874 sas_device = mpt3sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_add_device()
4876 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_add_device()
4885 ioc->name, __FILE__, __LINE__, __func__); in _scsih_add_device()
4890 if (_scsih_get_sas_address(ioc, in _scsih_add_device()
4894 ioc->name, __FILE__, __LINE__, __func__); in _scsih_add_device()
4907 ioc, &mpi_reply, &enclosure_pg0, MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE, in _scsih_add_device()
4915 if (ioc->wait_for_discovery_to_complete) in _scsih_add_device()
4916 _scsih_sas_device_init_add(ioc, sas_device); in _scsih_add_device()
4918 _scsih_sas_device_add(ioc, sas_device); in _scsih_add_device()
4931 _scsih_remove_device(struct MPT3SAS_ADAPTER *ioc, in _scsih_remove_device() argument
4936 if ((ioc->pdev->subsystem_vendor == PCI_VENDOR_ID_IBM) && in _scsih_remove_device()
4938 _scsih_turn_off_pfa_led(ioc, sas_device); in _scsih_remove_device()
4941 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_remove_device()
4943 ioc->name, __func__, in _scsih_remove_device()
4950 _scsih_ublock_io_device(ioc, sas_device->sas_address); in _scsih_remove_device()
4954 mpt3sas_transport_port_remove(ioc, in _scsih_remove_device()
4960 ioc->name, sas_device->handle, in _scsih_remove_device()
4963 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_remove_device()
4965 ioc->name, __func__, in _scsih_remove_device()
4980 _scsih_sas_topology_change_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_topology_change_event_debug() argument
5009 ioc->name, status_str); in _scsih_sas_topology_change_event_debug()
5060 _scsih_sas_topology_change_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_topology_change_event() argument
5076 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_topology_change_event()
5077 _scsih_sas_topology_change_event_debug(ioc, event_data); in _scsih_sas_topology_change_event()
5080 if (ioc->shost_recovery || ioc->remove_host || ioc->pci_error_recovery) in _scsih_sas_topology_change_event()
5083 if (!ioc->sas_hba.num_phys) in _scsih_sas_topology_change_event()
5084 _scsih_sas_host_add(ioc); in _scsih_sas_topology_change_event()
5086 _scsih_sas_host_refresh(ioc); in _scsih_sas_topology_change_event()
5089 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_topology_change_event()
5090 "ignoring expander event\n", ioc->name)); in _scsih_sas_topology_change_event()
5098 if (_scsih_expander_add(ioc, parent_handle) != 0) in _scsih_sas_topology_change_event()
5101 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_sas_topology_change_event()
5102 sas_expander = mpt3sas_scsih_expander_find_by_handle(ioc, in _scsih_sas_topology_change_event()
5107 } else if (parent_handle < ioc->sas_hba.num_phys) { in _scsih_sas_topology_change_event()
5108 sas_address = ioc->sas_hba.sas_address; in _scsih_sas_topology_change_event()
5109 max_phys = ioc->sas_hba.num_phys; in _scsih_sas_topology_change_event()
5111 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_sas_topology_change_event()
5114 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_sas_topology_change_event()
5119 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_topology_change_event()
5120 "ignoring expander event\n", ioc->name)); in _scsih_sas_topology_change_event()
5123 if (ioc->remove_host || ioc->pci_error_recovery) in _scsih_sas_topology_change_event()
5142 if (ioc->shost_recovery) in _scsih_sas_topology_change_event()
5148 mpt3sas_transport_update_links(ioc, sas_address, in _scsih_sas_topology_change_event()
5154 _scsih_check_device(ioc, sas_address, handle, in _scsih_sas_topology_change_event()
5160 if (ioc->shost_recovery) in _scsih_sas_topology_change_event()
5163 mpt3sas_transport_update_links(ioc, sas_address, in _scsih_sas_topology_change_event()
5166 _scsih_add_device(ioc, handle, phy_number, 0); in _scsih_sas_topology_change_event()
5171 _scsih_device_remove_by_handle(ioc, handle); in _scsih_sas_topology_change_event()
5179 mpt3sas_expander_remove(ioc, sas_address); in _scsih_sas_topology_change_event()
5193 _scsih_sas_device_status_change_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_status_change_event_debug() argument
5244 ioc->name, reason_str, le16_to_cpu(event_data->DevHandle), in _scsih_sas_device_status_change_event_debug()
5248 pr_info(MPT3SAS_FMT ", ASC(0x%x), ASCQ(0x%x)\n", ioc->name, in _scsih_sas_device_status_change_event_debug()
5263 _scsih_sas_device_status_change_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_device_status_change_event() argument
5275 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_device_status_change_event()
5276 _scsih_sas_device_status_change_event_debug(ioc, in _scsih_sas_device_status_change_event()
5283 if ((ioc->facts.HeaderVersion >> 8) < 0xC) in _scsih_sas_device_status_change_event()
5292 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_status_change_event()
5294 sas_device = mpt3sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_sas_device_status_change_event()
5298 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_status_change_event()
5304 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_status_change_event()
5313 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_status_change_event()
5327 _scsih_sas_enclosure_dev_status_change_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_enclosure_dev_status_change_event_debug() argument
5346 " number slots(%d)\n", ioc->name, reason_str, in _scsih_sas_enclosure_dev_status_change_event_debug()
5362 _scsih_sas_enclosure_dev_status_change_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_enclosure_dev_status_change_event() argument
5366 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_enclosure_dev_status_change_event()
5367 _scsih_sas_enclosure_dev_status_change_event_debug(ioc, in _scsih_sas_enclosure_dev_status_change_event()
5382 _scsih_sas_broadcast_primitive_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_broadcast_primitive_event() argument
5402 mutex_lock(&ioc->tm_cmds.mutex); in _scsih_sas_broadcast_primitive_event()
5405 ioc->name, __func__, event_data->PhyNum, in _scsih_sas_broadcast_primitive_event()
5408 _scsih_block_io_all_device(ioc); in _scsih_sas_broadcast_primitive_event()
5410 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5411 mpi_reply = ioc->tm_cmds.reply; in _scsih_sas_broadcast_primitive_event()
5416 dewtprintk(ioc, pr_info(MPT3SAS_FMT "%s: giving up\n", in _scsih_sas_broadcast_primitive_event()
5417 ioc->name, __func__)); in _scsih_sas_broadcast_primitive_event()
5420 dewtprintk(ioc, pr_info(MPT3SAS_FMT "%s: %d retry\n", in _scsih_sas_broadcast_primitive_event()
5421 ioc->name, __func__, max_retries - 1)); in _scsih_sas_broadcast_primitive_event()
5425 for (smid = 1; smid <= ioc->scsiio_depth; smid++) { in _scsih_sas_broadcast_primitive_event()
5426 if (ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
5428 scmd = _scsih_scsi_lookup_get(ioc, smid); in _scsih_sas_broadcast_primitive_event()
5448 if (ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
5451 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5452 r = mpt3sas_scsih_issue_tm(ioc, handle, 0, 0, lun, in _scsih_sas_broadcast_primitive_event()
5459 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5468 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5477 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5483 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_broadcast_primitive_event()
5484 "%s: ABORT_TASK: giving up\n", ioc->name, in _scsih_sas_broadcast_primitive_event()
5486 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5490 if (ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
5493 r = mpt3sas_scsih_issue_tm(ioc, handle, sdev->channel, sdev->id, in _scsih_sas_broadcast_primitive_event()
5510 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5513 if (ioc->broadcast_aen_pending) { in _scsih_sas_broadcast_primitive_event()
5514 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_broadcast_primitive_event()
5516 ioc->name, __func__)); in _scsih_sas_broadcast_primitive_event()
5517 ioc->broadcast_aen_pending = 0; in _scsih_sas_broadcast_primitive_event()
5522 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5525 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_broadcast_primitive_event()
5527 ioc->name, __func__, query_count, termination_count)); in _scsih_sas_broadcast_primitive_event()
5529 ioc->broadcast_aen_busy = 0; in _scsih_sas_broadcast_primitive_event()
5530 if (!ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
5531 _scsih_ublock_io_all_device(ioc); in _scsih_sas_broadcast_primitive_event()
5532 mutex_unlock(&ioc->tm_cmds.mutex); in _scsih_sas_broadcast_primitive_event()
5544 _scsih_sas_discovery_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_discovery_event() argument
5551 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) { in _scsih_sas_discovery_event()
5552 pr_info(MPT3SAS_FMT "discovery event: (%s)", ioc->name, in _scsih_sas_discovery_event()
5563 !ioc->sas_hba.num_phys) { in _scsih_sas_discovery_event()
5564 if (disable_discovery > 0 && ioc->shost_recovery) { in _scsih_sas_discovery_event()
5566 while (ioc->shost_recovery) in _scsih_sas_discovery_event()
5569 _scsih_sas_host_add(ioc); in _scsih_sas_discovery_event()
5582 _scsih_ir_fastpath(struct MPT3SAS_ADAPTER *ioc, u16 handle, u8 phys_disk_num) in _scsih_ir_fastpath() argument
5593 mutex_lock(&ioc->scsih_cmds.mutex); in _scsih_ir_fastpath()
5595 if (ioc->scsih_cmds.status != MPT3_CMD_NOT_USED) { in _scsih_ir_fastpath()
5597 ioc->name, __func__); in _scsih_ir_fastpath()
5601 ioc->scsih_cmds.status = MPT3_CMD_PENDING; in _scsih_ir_fastpath()
5603 smid = mpt3sas_base_get_smid(ioc, ioc->scsih_cb_idx); in _scsih_ir_fastpath()
5606 ioc->name, __func__); in _scsih_ir_fastpath()
5607 ioc->scsih_cmds.status = MPT3_CMD_NOT_USED; in _scsih_ir_fastpath()
5612 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_ir_fastpath()
5613 ioc->scsih_cmds.smid = smid; in _scsih_ir_fastpath()
5620 dewtprintk(ioc, pr_info(MPT3SAS_FMT "IR RAID_ACTION: turning fast "\ in _scsih_ir_fastpath()
5621 "path on for handle(0x%04x), phys_disk_num (0x%02x)\n", ioc->name, in _scsih_ir_fastpath()
5624 init_completion(&ioc->scsih_cmds.done); in _scsih_ir_fastpath()
5625 mpt3sas_base_put_smid_default(ioc, smid); in _scsih_ir_fastpath()
5626 wait_for_completion_timeout(&ioc->scsih_cmds.done, 10*HZ); in _scsih_ir_fastpath()
5628 if (!(ioc->scsih_cmds.status & MPT3_CMD_COMPLETE)) { in _scsih_ir_fastpath()
5630 ioc->name, __func__); in _scsih_ir_fastpath()
5631 if (!(ioc->scsih_cmds.status & MPT3_CMD_RESET)) in _scsih_ir_fastpath()
5637 if (ioc->scsih_cmds.status & MPT3_CMD_REPLY_VALID) { in _scsih_ir_fastpath()
5639 mpi_reply = ioc->scsih_cmds.reply; in _scsih_ir_fastpath()
5647 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_ir_fastpath()
5649 "loginfo(0x%08x)!!!\n", ioc->name, ioc_status, in _scsih_ir_fastpath()
5653 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_ir_fastpath()
5655 ioc->name)); in _scsih_ir_fastpath()
5659 ioc->scsih_cmds.status = MPT3_CMD_NOT_USED; in _scsih_ir_fastpath()
5660 mutex_unlock(&ioc->scsih_cmds.mutex); in _scsih_ir_fastpath()
5663 mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP, in _scsih_ir_fastpath()
5693 _scsih_sas_volume_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_volume_add() argument
5702 mpt3sas_config_get_volume_wwid(ioc, handle, &wwid); in _scsih_sas_volume_add()
5705 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_sas_volume_add()
5710 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
5711 raid_device = _scsih_raid_device_find_by_wwid(ioc, wwid); in _scsih_sas_volume_add()
5712 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
5720 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_sas_volume_add()
5725 raid_device->id = ioc->sas_id++; in _scsih_sas_volume_add()
5729 _scsih_raid_device_add(ioc, raid_device); in _scsih_sas_volume_add()
5730 if (!ioc->wait_for_discovery_to_complete) { in _scsih_sas_volume_add()
5731 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_sas_volume_add()
5734 _scsih_raid_device_remove(ioc, raid_device); in _scsih_sas_volume_add()
5736 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
5737 _scsih_determine_boot_device(ioc, raid_device, 1); in _scsih_sas_volume_add()
5738 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
5751 _scsih_sas_volume_delete(struct MPT3SAS_ADAPTER *ioc, u16 handle) in _scsih_sas_volume_delete() argument
5758 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_volume_delete()
5759 raid_device = _scsih_raid_device_find_by_handle(ioc, handle); in _scsih_sas_volume_delete()
5767 ioc->name, raid_device->handle, in _scsih_sas_volume_delete()
5772 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_volume_delete()
5786 _scsih_sas_pd_expose(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_pd_expose() argument
5795 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_pd_expose()
5796 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_sas_pd_expose()
5800 clear_bit(handle, ioc->pd_handles); in _scsih_sas_pd_expose()
5808 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_pd_expose()
5826 _scsih_sas_pd_hide(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_pd_hide() argument
5837 mpt3sas_config_get_volume_handle(ioc, handle, &volume_handle); in _scsih_sas_pd_hide()
5839 mpt3sas_config_get_volume_wwid(ioc, volume_handle, in _scsih_sas_pd_hide()
5842 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_pd_hide()
5843 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_sas_pd_hide()
5845 set_bit(handle, ioc->pd_handles); in _scsih_sas_pd_hide()
5855 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_pd_hide()
5860 _scsih_ir_fastpath(ioc, handle, element->PhysDiskNum); in _scsih_sas_pd_hide()
5874 _scsih_sas_pd_delete(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_pd_delete() argument
5879 _scsih_device_remove_by_handle(ioc, handle); in _scsih_sas_pd_delete()
5891 _scsih_sas_pd_add(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_pd_add() argument
5903 set_bit(handle, ioc->pd_handles); in _scsih_sas_pd_add()
5905 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_pd_add()
5906 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_sas_pd_add()
5907 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_pd_add()
5909 _scsih_ir_fastpath(ioc, handle, element->PhysDiskNum); in _scsih_sas_pd_add()
5913 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_sas_pd_add()
5916 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_pd_add()
5924 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_pd_add()
5929 if (!_scsih_get_sas_address(ioc, parent_handle, &sas_address)) in _scsih_sas_pd_add()
5930 mpt3sas_transport_update_links(ioc, sas_address, handle, in _scsih_sas_pd_add()
5933 _scsih_ir_fastpath(ioc, handle, element->PhysDiskNum); in _scsih_sas_pd_add()
5934 _scsih_add_device(ioc, handle, 0, 1); in _scsih_sas_pd_add()
5947 _scsih_sas_ir_config_change_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_config_change_event_debug() argument
5958 ioc->name, (le32_to_cpu(event_data->Flags) & in _scsih_sas_ir_config_change_event_debug()
6028 _scsih_sas_ir_config_change_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_config_change_event() argument
6039 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_ir_config_change_event()
6040 _scsih_sas_ir_config_change_event_debug(ioc, event_data); in _scsih_sas_ir_config_change_event()
6048 if (ioc->shost_recovery) { in _scsih_sas_ir_config_change_event()
6052 _scsih_ir_fastpath(ioc, in _scsih_sas_ir_config_change_event()
6064 _scsih_sas_volume_add(ioc, element); in _scsih_sas_ir_config_change_event()
6069 _scsih_sas_volume_delete(ioc, in _scsih_sas_ir_config_change_event()
6073 _scsih_sas_pd_hide(ioc, element); in _scsih_sas_ir_config_change_event()
6076 _scsih_sas_pd_expose(ioc, element); in _scsih_sas_ir_config_change_event()
6079 _scsih_sas_pd_add(ioc, element); in _scsih_sas_ir_config_change_event()
6082 _scsih_sas_pd_delete(ioc, element); in _scsih_sas_ir_config_change_event()
6097 _scsih_sas_ir_volume_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_volume_event() argument
6109 if (ioc->shost_recovery) in _scsih_sas_ir_volume_event()
6117 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_ir_volume_event()
6119 ioc->name, __func__, handle, in _scsih_sas_ir_volume_event()
6124 _scsih_sas_volume_delete(ioc, handle); in _scsih_sas_ir_volume_event()
6131 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_ir_volume_event()
6132 raid_device = _scsih_raid_device_find_by_handle(ioc, handle); in _scsih_sas_ir_volume_event()
6133 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_ir_volume_event()
6138 mpt3sas_config_get_volume_wwid(ioc, handle, &wwid); in _scsih_sas_ir_volume_event()
6141 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_sas_ir_volume_event()
6149 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_sas_ir_volume_event()
6154 raid_device->id = ioc->sas_id++; in _scsih_sas_ir_volume_event()
6158 _scsih_raid_device_add(ioc, raid_device); in _scsih_sas_ir_volume_event()
6159 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_sas_ir_volume_event()
6162 _scsih_raid_device_remove(ioc, raid_device); in _scsih_sas_ir_volume_event()
6180 _scsih_sas_ir_physical_disk_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_physical_disk_event() argument
6194 if (ioc->shost_recovery) in _scsih_sas_ir_physical_disk_event()
6203 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _scsih_sas_ir_physical_disk_event()
6205 ioc->name, __func__, handle, in _scsih_sas_ir_physical_disk_event()
6214 set_bit(handle, ioc->pd_handles); in _scsih_sas_ir_physical_disk_event()
6215 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_ir_physical_disk_event()
6216 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_sas_ir_physical_disk_event()
6217 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_ir_physical_disk_event()
6222 if ((mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_sas_ir_physical_disk_event()
6226 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_ir_physical_disk_event()
6234 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_ir_physical_disk_event()
6239 if (!_scsih_get_sas_address(ioc, parent_handle, &sas_address)) in _scsih_sas_ir_physical_disk_event()
6240 mpt3sas_transport_update_links(ioc, sas_address, handle, in _scsih_sas_ir_physical_disk_event()
6243 _scsih_add_device(ioc, handle, 0, 1); in _scsih_sas_ir_physical_disk_event()
6265 _scsih_sas_ir_operation_status_event_debug(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_operation_status_event_debug() argument
6293 ioc->name, reason_str, in _scsih_sas_ir_operation_status_event_debug()
6308 _scsih_sas_ir_operation_status_event(struct MPT3SAS_ADAPTER *ioc, in _scsih_sas_ir_operation_status_event() argument
6319 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_ir_operation_status_event()
6320 _scsih_sas_ir_operation_status_event_debug(ioc, in _scsih_sas_ir_operation_status_event()
6327 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_ir_operation_status_event()
6329 raid_device = _scsih_raid_device_find_by_handle(ioc, handle); in _scsih_sas_ir_operation_status_event()
6333 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_ir_operation_status_event()
6345 _scsih_prep_device_scan(struct MPT3SAS_ADAPTER *ioc) in _scsih_prep_device_scan() argument
6350 shost_for_each_device(sdev, ioc->shost) { in _scsih_prep_device_scan()
6370 _scsih_mark_responding_sas_device(struct MPT3SAS_ADAPTER *ioc, u64 sas_address, in _scsih_mark_responding_sas_device() argument
6378 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_mark_responding_sas_device()
6379 list_for_each_entry(sas_device, &ioc->sas_device_list, list) { in _scsih_mark_responding_sas_device()
6410 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_mark_responding_sas_device()
6423 _scsih_search_responding_sas_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_search_responding_sas_devices() argument
6431 pr_info(MPT3SAS_FMT "search for end-devices: start\n", ioc->name); in _scsih_search_responding_sas_devices()
6433 if (list_empty(&ioc->sas_device_list)) in _scsih_search_responding_sas_devices()
6437 while (!(mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_search_responding_sas_devices()
6448 _scsih_mark_responding_sas_device(ioc, in _scsih_search_responding_sas_devices()
6455 ioc->name); in _scsih_search_responding_sas_devices()
6470 _scsih_mark_responding_raid_device(struct MPT3SAS_ADAPTER *ioc, u64 wwid, in _scsih_mark_responding_raid_device() argument
6478 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
6479 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in _scsih_mark_responding_raid_device()
6488 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
6492 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
6494 spin_unlock_irqrestore(&ioc->raid_device_lock, in _scsih_mark_responding_raid_device()
6503 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
6507 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
6520 _scsih_search_responding_raid_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_search_responding_raid_devices() argument
6530 if (!ioc->ir_firmware) in _scsih_search_responding_raid_devices()
6534 ioc->name); in _scsih_search_responding_raid_devices()
6536 if (list_empty(&ioc->raid_device_list)) in _scsih_search_responding_raid_devices()
6540 while (!(mpt3sas_config_get_raid_volume_pg1(ioc, &mpi_reply, in _scsih_search_responding_raid_devices()
6548 if (mpt3sas_config_get_raid_volume_pg0(ioc, &mpi_reply, in _scsih_search_responding_raid_devices()
6556 _scsih_mark_responding_raid_device(ioc, in _scsih_search_responding_raid_devices()
6562 memset(ioc->pd_handles, 0, ioc->pd_handles_sz); in _scsih_search_responding_raid_devices()
6563 while (!(mpt3sas_config_get_phys_disk_pg0(ioc, &mpi_reply, in _scsih_search_responding_raid_devices()
6572 set_bit(handle, ioc->pd_handles); in _scsih_search_responding_raid_devices()
6576 ioc->name); in _scsih_search_responding_raid_devices()
6591 _scsih_mark_responding_expander(struct MPT3SAS_ADAPTER *ioc, u64 sas_address, in _scsih_mark_responding_expander() argument
6598 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_mark_responding_expander()
6599 list_for_each_entry(sas_expander, &ioc->sas_expander_list, list) { in _scsih_mark_responding_expander()
6615 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_mark_responding_expander()
6628 _scsih_search_responding_expanders(struct MPT3SAS_ADAPTER *ioc) in _scsih_search_responding_expanders() argument
6636 pr_info(MPT3SAS_FMT "search for expanders: start\n", ioc->name); in _scsih_search_responding_expanders()
6638 if (list_empty(&ioc->sas_expander_list)) in _scsih_search_responding_expanders()
6642 while (!(mpt3sas_config_get_expander_pg0(ioc, &mpi_reply, &expander_pg0, in _scsih_search_responding_expanders()
6655 _scsih_mark_responding_expander(ioc, sas_address, handle); in _scsih_search_responding_expanders()
6659 pr_info(MPT3SAS_FMT "search for expanders: complete\n", ioc->name); in _scsih_search_responding_expanders()
6669 _scsih_remove_unresponding_sas_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_remove_unresponding_sas_devices() argument
6678 ioc->name); in _scsih_remove_unresponding_sas_devices()
6682 ioc->name); in _scsih_remove_unresponding_sas_devices()
6684 &ioc->sas_device_list, list) { in _scsih_remove_unresponding_sas_devices()
6686 mpt3sas_device_remove_by_sas_address(ioc, in _scsih_remove_unresponding_sas_devices()
6693 if (ioc->ir_firmware) { in _scsih_remove_unresponding_sas_devices()
6695 ioc->name); in _scsih_remove_unresponding_sas_devices()
6697 &ioc->raid_device_list, list) { in _scsih_remove_unresponding_sas_devices()
6699 _scsih_sas_volume_delete(ioc, in _scsih_remove_unresponding_sas_devices()
6708 ioc->name); in _scsih_remove_unresponding_sas_devices()
6709 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_remove_unresponding_sas_devices()
6712 &ioc->sas_expander_list, list) { in _scsih_remove_unresponding_sas_devices()
6718 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_remove_unresponding_sas_devices()
6722 _scsih_expander_node_remove(ioc, sas_expander); in _scsih_remove_unresponding_sas_devices()
6726 ioc->name); in _scsih_remove_unresponding_sas_devices()
6729 _scsih_ublock_io_all_device(ioc); in _scsih_remove_unresponding_sas_devices()
6733 _scsih_refresh_expander_links(struct MPT3SAS_ADAPTER *ioc, in _scsih_refresh_expander_links() argument
6741 if ((mpt3sas_config_get_expander_pg1(ioc, &mpi_reply, in _scsih_refresh_expander_links()
6744 ioc->name, __FILE__, __LINE__, __func__); in _scsih_refresh_expander_links()
6748 mpt3sas_transport_update_links(ioc, sas_expander->sas_address, in _scsih_refresh_expander_links()
6761 _scsih_scan_for_devices_after_reset(struct MPT3SAS_ADAPTER *ioc) in _scsih_scan_for_devices_after_reset() argument
6780 pr_info(MPT3SAS_FMT "scan devices: start\n", ioc->name); in _scsih_scan_for_devices_after_reset()
6782 _scsih_sas_host_refresh(ioc); in _scsih_scan_for_devices_after_reset()
6784 pr_info(MPT3SAS_FMT "\tscan devices: expanders start\n", ioc->name); in _scsih_scan_for_devices_after_reset()
6788 while (!(mpt3sas_config_get_expander_pg0(ioc, &mpi_reply, &expander_pg0, in _scsih_scan_for_devices_after_reset()
6795 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
6800 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_scan_for_devices_after_reset()
6802 ioc, le64_to_cpu(expander_pg0.SASAddress)); in _scsih_scan_for_devices_after_reset()
6803 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_scan_for_devices_after_reset()
6805 _scsih_refresh_expander_links(ioc, expander_device, in _scsih_scan_for_devices_after_reset()
6809 "handle (0x%04x), sas_addr(0x%016llx)\n", ioc->name, in _scsih_scan_for_devices_after_reset()
6812 _scsih_expander_add(ioc, handle); in _scsih_scan_for_devices_after_reset()
6814 "handle (0x%04x), sas_addr(0x%016llx)\n", ioc->name, in _scsih_scan_for_devices_after_reset()
6821 ioc->name); in _scsih_scan_for_devices_after_reset()
6823 if (!ioc->ir_firmware) in _scsih_scan_for_devices_after_reset()
6826 pr_info(MPT3SAS_FMT "\tscan devices: phys disk start\n", ioc->name); in _scsih_scan_for_devices_after_reset()
6830 while (!(mpt3sas_config_get_phys_disk_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
6838 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
6844 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_scan_for_devices_after_reset()
6845 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_scan_for_devices_after_reset()
6846 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_scan_for_devices_after_reset()
6849 if (mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
6858 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
6863 if (!_scsih_get_sas_address(ioc, parent_handle, in _scsih_scan_for_devices_after_reset()
6867 ioc->name, handle, (unsigned long long) in _scsih_scan_for_devices_after_reset()
6869 mpt3sas_transport_update_links(ioc, sas_address, in _scsih_scan_for_devices_after_reset()
6872 set_bit(handle, ioc->pd_handles); in _scsih_scan_for_devices_after_reset()
6878 while (_scsih_add_device(ioc, handle, retry_count++, in _scsih_scan_for_devices_after_reset()
6884 ioc->name, handle, (unsigned long long) in _scsih_scan_for_devices_after_reset()
6890 ioc->name); in _scsih_scan_for_devices_after_reset()
6892 pr_info(MPT3SAS_FMT "\tscan devices: volumes start\n", ioc->name); in _scsih_scan_for_devices_after_reset()
6896 while (!(mpt3sas_config_get_raid_volume_pg1(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
6903 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
6908 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_scan_for_devices_after_reset()
6909 raid_device = _scsih_raid_device_find_by_wwid(ioc, in _scsih_scan_for_devices_after_reset()
6911 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_scan_for_devices_after_reset()
6914 if (mpt3sas_config_get_raid_volume_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
6923 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
6935 ioc->name, volume_pg1.DevHandle); in _scsih_scan_for_devices_after_reset()
6936 _scsih_sas_volume_add(ioc, &element); in _scsih_scan_for_devices_after_reset()
6939 ioc->name, volume_pg1.DevHandle); in _scsih_scan_for_devices_after_reset()
6944 ioc->name); in _scsih_scan_for_devices_after_reset()
6949 ioc->name); in _scsih_scan_for_devices_after_reset()
6953 while (!(mpt3sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
6961 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
6969 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_scan_for_devices_after_reset()
6970 sas_device = mpt3sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_scan_for_devices_after_reset()
6972 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_scan_for_devices_after_reset()
6976 if (!_scsih_get_sas_address(ioc, parent_handle, &sas_address)) { in _scsih_scan_for_devices_after_reset()
6978 "handle (0x%04x), sas_addr(0x%016llx)\n", ioc->name, in _scsih_scan_for_devices_after_reset()
6981 mpt3sas_transport_update_links(ioc, sas_address, handle, in _scsih_scan_for_devices_after_reset()
6988 while (_scsih_add_device(ioc, handle, retry_count++, in _scsih_scan_for_devices_after_reset()
6993 "handle (0x%04x), sas_addr(0x%016llx)\n", ioc->name, in _scsih_scan_for_devices_after_reset()
6999 ioc->name); in _scsih_scan_for_devices_after_reset()
7001 pr_info(MPT3SAS_FMT "scan devices: complete\n", ioc->name); in _scsih_scan_for_devices_after_reset()
7016 mpt3sas_scsih_reset_handler(struct MPT3SAS_ADAPTER *ioc, int reset_phase) in mpt3sas_scsih_reset_handler() argument
7020 dtmprintk(ioc, pr_info(MPT3SAS_FMT in mpt3sas_scsih_reset_handler()
7021 "%s: MPT3_IOC_PRE_RESET\n", ioc->name, __func__)); in mpt3sas_scsih_reset_handler()
7024 dtmprintk(ioc, pr_info(MPT3SAS_FMT in mpt3sas_scsih_reset_handler()
7025 "%s: MPT3_IOC_AFTER_RESET\n", ioc->name, __func__)); in mpt3sas_scsih_reset_handler()
7026 if (ioc->scsih_cmds.status & MPT3_CMD_PENDING) { in mpt3sas_scsih_reset_handler()
7027 ioc->scsih_cmds.status |= MPT3_CMD_RESET; in mpt3sas_scsih_reset_handler()
7028 mpt3sas_base_free_smid(ioc, ioc->scsih_cmds.smid); in mpt3sas_scsih_reset_handler()
7029 complete(&ioc->scsih_cmds.done); in mpt3sas_scsih_reset_handler()
7031 if (ioc->tm_cmds.status & MPT3_CMD_PENDING) { in mpt3sas_scsih_reset_handler()
7032 ioc->tm_cmds.status |= MPT3_CMD_RESET; in mpt3sas_scsih_reset_handler()
7033 mpt3sas_base_free_smid(ioc, ioc->tm_cmds.smid); in mpt3sas_scsih_reset_handler()
7034 complete(&ioc->tm_cmds.done); in mpt3sas_scsih_reset_handler()
7037 _scsih_fw_event_cleanup_queue(ioc); in mpt3sas_scsih_reset_handler()
7038 _scsih_flush_running_cmds(ioc); in mpt3sas_scsih_reset_handler()
7041 dtmprintk(ioc, pr_info(MPT3SAS_FMT in mpt3sas_scsih_reset_handler()
7042 "%s: MPT3_IOC_DONE_RESET\n", ioc->name, __func__)); in mpt3sas_scsih_reset_handler()
7043 if ((!ioc->is_driver_loading) && !(disable_discovery > 0 && in mpt3sas_scsih_reset_handler()
7044 !ioc->sas_hba.num_phys)) { in mpt3sas_scsih_reset_handler()
7045 _scsih_prep_device_scan(ioc); in mpt3sas_scsih_reset_handler()
7046 _scsih_search_responding_sas_devices(ioc); in mpt3sas_scsih_reset_handler()
7047 _scsih_search_responding_raid_devices(ioc); in mpt3sas_scsih_reset_handler()
7048 _scsih_search_responding_expanders(ioc); in mpt3sas_scsih_reset_handler()
7049 _scsih_error_recovery_delete_devices(ioc); in mpt3sas_scsih_reset_handler()
7064 _mpt3sas_fw_work(struct MPT3SAS_ADAPTER *ioc, struct fw_event_work *fw_event) in _mpt3sas_fw_work() argument
7067 if (ioc->remove_host || in _mpt3sas_fw_work()
7068 ioc->pci_error_recovery) { in _mpt3sas_fw_work()
7069 _scsih_fw_event_free(ioc, fw_event); in _mpt3sas_fw_work()
7075 mpt3sas_process_trigger_data(ioc, in _mpt3sas_fw_work()
7080 while (scsi_host_in_recovery(ioc->shost) || ioc->shost_recovery) in _mpt3sas_fw_work()
7082 _scsih_remove_unresponding_sas_devices(ioc); in _mpt3sas_fw_work()
7083 _scsih_scan_for_devices_after_reset(ioc); in _mpt3sas_fw_work()
7086 ioc->start_scan = 0; in _mpt3sas_fw_work()
7088 mpt3sas_base_update_missing_delay(ioc, missing_delay[0], in _mpt3sas_fw_work()
7090 dewtprintk(ioc, pr_info(MPT3SAS_FMT in _mpt3sas_fw_work()
7092 ioc->name)); in _mpt3sas_fw_work()
7095 _scsih_turn_on_pfa_led(ioc, fw_event->device_handle); in _mpt3sas_fw_work()
7098 _scsih_sas_topology_change_event(ioc, fw_event); in _mpt3sas_fw_work()
7101 _scsih_sas_device_status_change_event(ioc, fw_event); in _mpt3sas_fw_work()
7104 _scsih_sas_discovery_event(ioc, fw_event); in _mpt3sas_fw_work()
7107 _scsih_sas_broadcast_primitive_event(ioc, fw_event); in _mpt3sas_fw_work()
7110 _scsih_sas_enclosure_dev_status_change_event(ioc, in _mpt3sas_fw_work()
7114 _scsih_sas_ir_config_change_event(ioc, fw_event); in _mpt3sas_fw_work()
7117 _scsih_sas_ir_volume_event(ioc, fw_event); in _mpt3sas_fw_work()
7120 _scsih_sas_ir_physical_disk_event(ioc, fw_event); in _mpt3sas_fw_work()
7123 _scsih_sas_ir_operation_status_event(ioc, fw_event); in _mpt3sas_fw_work()
7126 _scsih_fw_event_free(ioc, fw_event); in _mpt3sas_fw_work()
7146 _mpt3sas_fw_work(fw_event->ioc, fw_event); in _firmware_event_work()
7163 mpt3sas_scsih_event_callback(struct MPT3SAS_ADAPTER *ioc, u8 msix_index, in mpt3sas_scsih_event_callback() argument
7172 if (ioc->remove_host || ioc->pci_error_recovery) in mpt3sas_scsih_event_callback()
7175 mpi_reply = mpt3sas_base_get_reply_virt_addr(ioc, reply); in mpt3sas_scsih_event_callback()
7179 ioc->name, __FILE__, __LINE__, __func__); in mpt3sas_scsih_event_callback()
7186 mpt3sas_trigger_event(ioc, event, 0); in mpt3sas_scsih_event_callback()
7200 if (ioc->broadcast_aen_busy) { in mpt3sas_scsih_event_callback()
7201 ioc->broadcast_aen_pending++; in mpt3sas_scsih_event_callback()
7204 ioc->broadcast_aen_busy = 1; in mpt3sas_scsih_event_callback()
7209 _scsih_check_topo_delete_events(ioc, in mpt3sas_scsih_event_callback()
7214 _scsih_check_ir_config_unhide_events(ioc, in mpt3sas_scsih_event_callback()
7219 _scsih_check_volume_delete_events(ioc, in mpt3sas_scsih_event_callback()
7232 _scsih_temp_threshold_events(ioc, in mpt3sas_scsih_event_callback()
7245 ioc->name, __FILE__, __LINE__, __func__); in mpt3sas_scsih_event_callback()
7250 fw_event->ioc = ioc; in mpt3sas_scsih_event_callback()
7254 _scsih_fw_event_add(ioc, fw_event); in mpt3sas_scsih_event_callback()
7300 _scsih_expander_node_remove(struct MPT3SAS_ADAPTER *ioc, in _scsih_expander_node_remove() argument
7308 if (ioc->shost_recovery) in _scsih_expander_node_remove()
7312 mpt3sas_device_remove_by_sas_address(ioc, in _scsih_expander_node_remove()
7318 mpt3sas_expander_remove(ioc, in _scsih_expander_node_remove()
7322 mpt3sas_transport_port_remove(ioc, sas_expander->sas_address, in _scsih_expander_node_remove()
7327 ioc->name, in _scsih_expander_node_remove()
7345 _scsih_ir_shutdown(struct MPT3SAS_ADAPTER *ioc) in _scsih_ir_shutdown() argument
7352 if (!ioc->ir_firmware) in _scsih_ir_shutdown()
7356 if (list_empty(&ioc->raid_device_list)) in _scsih_ir_shutdown()
7359 mutex_lock(&ioc->scsih_cmds.mutex); in _scsih_ir_shutdown()
7361 if (ioc->scsih_cmds.status != MPT3_CMD_NOT_USED) { in _scsih_ir_shutdown()
7363 ioc->name, __func__); in _scsih_ir_shutdown()
7366 ioc->scsih_cmds.status = MPT3_CMD_PENDING; in _scsih_ir_shutdown()
7368 smid = mpt3sas_base_get_smid(ioc, ioc->scsih_cb_idx); in _scsih_ir_shutdown()
7371 ioc->name, __func__); in _scsih_ir_shutdown()
7372 ioc->scsih_cmds.status = MPT3_CMD_NOT_USED; in _scsih_ir_shutdown()
7376 mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); in _scsih_ir_shutdown()
7377 ioc->scsih_cmds.smid = smid; in _scsih_ir_shutdown()
7383 pr_info(MPT3SAS_FMT "IR shutdown (sending)\n", ioc->name); in _scsih_ir_shutdown()
7384 init_completion(&ioc->scsih_cmds.done); in _scsih_ir_shutdown()
7385 mpt3sas_base_put_smid_default(ioc, smid); in _scsih_ir_shutdown()
7386 wait_for_completion_timeout(&ioc->scsih_cmds.done, 10*HZ); in _scsih_ir_shutdown()
7388 if (!(ioc->scsih_cmds.status & MPT3_CMD_COMPLETE)) { in _scsih_ir_shutdown()
7390 ioc->name, __func__); in _scsih_ir_shutdown()
7394 if (ioc->scsih_cmds.status & MPT3_CMD_REPLY_VALID) { in _scsih_ir_shutdown()
7395 mpi_reply = ioc->scsih_cmds.reply; in _scsih_ir_shutdown()
7398 ioc->name, le16_to_cpu(mpi_reply->IOCStatus), in _scsih_ir_shutdown()
7403 ioc->scsih_cmds.status = MPT3_CMD_NOT_USED; in _scsih_ir_shutdown()
7404 mutex_unlock(&ioc->scsih_cmds.mutex); in _scsih_ir_shutdown()
7417 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_remove() local
7424 ioc->remove_host = 1; in _scsih_remove()
7425 _scsih_fw_event_cleanup_queue(ioc); in _scsih_remove()
7427 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_remove()
7428 wq = ioc->firmware_event_thread; in _scsih_remove()
7429 ioc->firmware_event_thread = NULL; in _scsih_remove()
7430 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_remove()
7435 _scsih_ir_shutdown(ioc); in _scsih_remove()
7436 list_for_each_entry_safe(raid_device, next, &ioc->raid_device_list, in _scsih_remove()
7445 ioc->name, raid_device->handle, in _scsih_remove()
7447 _scsih_raid_device_remove(ioc, raid_device); in _scsih_remove()
7452 &ioc->sas_hba.sas_port_list, port_list) { in _scsih_remove()
7455 mpt3sas_device_remove_by_sas_address(ioc, in _scsih_remove()
7461 mpt3sas_expander_remove(ioc, in _scsih_remove()
7466 if (ioc->sas_hba.num_phys) { in _scsih_remove()
7467 kfree(ioc->sas_hba.phy); in _scsih_remove()
7468 ioc->sas_hba.phy = NULL; in _scsih_remove()
7469 ioc->sas_hba.num_phys = 0; in _scsih_remove()
7474 mpt3sas_base_detach(ioc); in _scsih_remove()
7475 list_del(&ioc->list); in _scsih_remove()
7489 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_shutdown() local
7493 ioc->remove_host = 1; in _scsih_shutdown()
7494 _scsih_fw_event_cleanup_queue(ioc); in _scsih_shutdown()
7496 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_shutdown()
7497 wq = ioc->firmware_event_thread; in _scsih_shutdown()
7498 ioc->firmware_event_thread = NULL; in _scsih_shutdown()
7499 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_shutdown()
7503 _scsih_ir_shutdown(ioc); in _scsih_shutdown()
7504 mpt3sas_base_detach(ioc); in _scsih_shutdown()
7517 _scsih_probe_boot_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_probe_boot_devices() argument
7530 if (!ioc->bios_pg3.BiosVersion) in _scsih_probe_boot_devices()
7535 if (ioc->req_boot_device.device) { in _scsih_probe_boot_devices()
7536 device = ioc->req_boot_device.device; in _scsih_probe_boot_devices()
7537 is_raid = ioc->req_boot_device.is_raid; in _scsih_probe_boot_devices()
7538 } else if (ioc->req_alt_boot_device.device) { in _scsih_probe_boot_devices()
7539 device = ioc->req_alt_boot_device.device; in _scsih_probe_boot_devices()
7540 is_raid = ioc->req_alt_boot_device.is_raid; in _scsih_probe_boot_devices()
7541 } else if (ioc->current_boot_device.device) { in _scsih_probe_boot_devices()
7542 device = ioc->current_boot_device.device; in _scsih_probe_boot_devices()
7543 is_raid = ioc->current_boot_device.is_raid; in _scsih_probe_boot_devices()
7551 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_probe_boot_devices()
7554 _scsih_raid_device_remove(ioc, raid_device); in _scsih_probe_boot_devices()
7556 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_probe_boot_devices()
7561 list_move_tail(&sas_device->list, &ioc->sas_device_list); in _scsih_probe_boot_devices()
7562 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_probe_boot_devices()
7564 if (!mpt3sas_transport_port_add(ioc, handle, in _scsih_probe_boot_devices()
7566 _scsih_sas_device_remove(ioc, sas_device); in _scsih_probe_boot_devices()
7568 if (!ioc->is_driver_loading) { in _scsih_probe_boot_devices()
7569 mpt3sas_transport_port_remove(ioc, in _scsih_probe_boot_devices()
7572 _scsih_sas_device_remove(ioc, sas_device); in _scsih_probe_boot_devices()
7585 _scsih_probe_raid(struct MPT3SAS_ADAPTER *ioc) in _scsih_probe_raid() argument
7591 &ioc->raid_device_list, list) { in _scsih_probe_raid()
7594 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_probe_raid()
7597 _scsih_raid_device_remove(ioc, raid_device); in _scsih_probe_raid()
7608 _scsih_probe_sas(struct MPT3SAS_ADAPTER *ioc) in _scsih_probe_sas() argument
7614 list_for_each_entry_safe(sas_device, next, &ioc->sas_device_init_list, in _scsih_probe_sas()
7617 if (!mpt3sas_transport_port_add(ioc, sas_device->handle, in _scsih_probe_sas()
7629 if (!ioc->is_driver_loading) { in _scsih_probe_sas()
7630 mpt3sas_transport_port_remove(ioc, in _scsih_probe_sas()
7639 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_probe_sas()
7640 list_move_tail(&sas_device->list, &ioc->sas_device_list); in _scsih_probe_sas()
7641 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_probe_sas()
7652 _scsih_probe_devices(struct MPT3SAS_ADAPTER *ioc) in _scsih_probe_devices() argument
7656 if (!(ioc->facts.ProtocolFlags & MPI2_IOCFACTS_PROTOCOL_SCSI_INITIATOR)) in _scsih_probe_devices()
7659 _scsih_probe_boot_devices(ioc); in _scsih_probe_devices()
7661 if (ioc->ir_firmware) { in _scsih_probe_devices()
7663 le16_to_cpu(ioc->ioc_pg8.IRVolumeMappingFlags) & in _scsih_probe_devices()
7667 _scsih_probe_raid(ioc); in _scsih_probe_devices()
7668 _scsih_probe_sas(ioc); in _scsih_probe_devices()
7670 _scsih_probe_sas(ioc); in _scsih_probe_devices()
7671 _scsih_probe_raid(ioc); in _scsih_probe_devices()
7674 _scsih_probe_sas(ioc); in _scsih_probe_devices()
7688 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_scan_start() local
7691 mpt3sas_enable_diag_buffer(ioc, diag_buffer_enable); in _scsih_scan_start()
7696 ioc->start_scan = 1; in _scsih_scan_start()
7697 rc = mpt3sas_port_enable(ioc); in _scsih_scan_start()
7700 pr_info(MPT3SAS_FMT "port enable: FAILED\n", ioc->name); in _scsih_scan_start()
7715 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_scan_finished() local
7718 ioc->is_driver_loading = 0; in _scsih_scan_finished()
7719 ioc->wait_for_discovery_to_complete = 0; in _scsih_scan_finished()
7724 ioc->base_cmds.status = MPT3_CMD_NOT_USED; in _scsih_scan_finished()
7727 ioc->name); in _scsih_scan_finished()
7728 ioc->is_driver_loading = 0; in _scsih_scan_finished()
7732 if (ioc->start_scan) in _scsih_scan_finished()
7735 if (ioc->start_scan_failed) { in _scsih_scan_finished()
7738 ioc->name, ioc->start_scan_failed); in _scsih_scan_finished()
7739 ioc->is_driver_loading = 0; in _scsih_scan_finished()
7740 ioc->wait_for_discovery_to_complete = 0; in _scsih_scan_finished()
7741 ioc->remove_host = 1; in _scsih_scan_finished()
7745 pr_info(MPT3SAS_FMT "port enable: SUCCESS\n", ioc->name); in _scsih_scan_finished()
7746 ioc->base_cmds.status = MPT3_CMD_NOT_USED; in _scsih_scan_finished()
7748 if (ioc->wait_for_discovery_to_complete) { in _scsih_scan_finished()
7749 ioc->wait_for_discovery_to_complete = 0; in _scsih_scan_finished()
7750 _scsih_probe_devices(ioc); in _scsih_scan_finished()
7752 mpt3sas_base_start_watchdog(ioc); in _scsih_scan_finished()
7753 ioc->is_driver_loading = 0; in _scsih_scan_finished()
7767 struct MPT3SAS_ADAPTER *ioc; in _scsih_probe() local
7777 ioc = shost_priv(shost); in _scsih_probe()
7778 memset(ioc, 0, sizeof(struct MPT3SAS_ADAPTER)); in _scsih_probe()
7779 INIT_LIST_HEAD(&ioc->list); in _scsih_probe()
7780 list_add_tail(&ioc->list, &mpt3sas_ioc_list); in _scsih_probe()
7781 ioc->shost = shost; in _scsih_probe()
7782 ioc->id = mpt_ids++; in _scsih_probe()
7783 sprintf(ioc->name, "%s%d", MPT3SAS_DRIVER_NAME, ioc->id); in _scsih_probe()
7784 ioc->pdev = pdev; in _scsih_probe()
7785 ioc->scsi_io_cb_idx = scsi_io_cb_idx; in _scsih_probe()
7786 ioc->tm_cb_idx = tm_cb_idx; in _scsih_probe()
7787 ioc->ctl_cb_idx = ctl_cb_idx; in _scsih_probe()
7788 ioc->base_cb_idx = base_cb_idx; in _scsih_probe()
7789 ioc->port_enable_cb_idx = port_enable_cb_idx; in _scsih_probe()
7790 ioc->transport_cb_idx = transport_cb_idx; in _scsih_probe()
7791 ioc->scsih_cb_idx = scsih_cb_idx; in _scsih_probe()
7792 ioc->config_cb_idx = config_cb_idx; in _scsih_probe()
7793 ioc->tm_tr_cb_idx = tm_tr_cb_idx; in _scsih_probe()
7794 ioc->tm_tr_volume_cb_idx = tm_tr_volume_cb_idx; in _scsih_probe()
7795 ioc->tm_sas_control_cb_idx = tm_sas_control_cb_idx; in _scsih_probe()
7796 ioc->logging_level = logging_level; in _scsih_probe()
7797 ioc->schedule_dead_ioc_flush_running_cmds = &_scsih_flush_running_cmds; in _scsih_probe()
7799 mutex_init(&ioc->reset_in_progress_mutex); in _scsih_probe()
7800 spin_lock_init(&ioc->ioc_reset_in_progress_lock); in _scsih_probe()
7801 spin_lock_init(&ioc->scsi_lookup_lock); in _scsih_probe()
7802 spin_lock_init(&ioc->sas_device_lock); in _scsih_probe()
7803 spin_lock_init(&ioc->sas_node_lock); in _scsih_probe()
7804 spin_lock_init(&ioc->fw_event_lock); in _scsih_probe()
7805 spin_lock_init(&ioc->raid_device_lock); in _scsih_probe()
7806 spin_lock_init(&ioc->diag_trigger_lock); in _scsih_probe()
7808 INIT_LIST_HEAD(&ioc->sas_device_list); in _scsih_probe()
7809 INIT_LIST_HEAD(&ioc->sas_device_init_list); in _scsih_probe()
7810 INIT_LIST_HEAD(&ioc->sas_expander_list); in _scsih_probe()
7811 INIT_LIST_HEAD(&ioc->fw_event_list); in _scsih_probe()
7812 INIT_LIST_HEAD(&ioc->raid_device_list); in _scsih_probe()
7813 INIT_LIST_HEAD(&ioc->sas_hba.sas_port_list); in _scsih_probe()
7814 INIT_LIST_HEAD(&ioc->delayed_tr_list); in _scsih_probe()
7815 INIT_LIST_HEAD(&ioc->delayed_tr_volume_list); in _scsih_probe()
7816 INIT_LIST_HEAD(&ioc->reply_queue_list); in _scsih_probe()
7822 shost->unique_id = ioc->id; in _scsih_probe()
7829 "value of 64.\n", ioc->name, max_sectors); in _scsih_probe()
7834 "default value of 32767.\n", ioc->name, in _scsih_probe()
7840 ioc->name, shost->max_sectors); in _scsih_probe()
7855 snprintf(ioc->firmware_event_name, sizeof(ioc->firmware_event_name), in _scsih_probe()
7856 "fw_event%d", ioc->id); in _scsih_probe()
7857 ioc->firmware_event_thread = create_singlethread_workqueue( in _scsih_probe()
7858 ioc->firmware_event_name); in _scsih_probe()
7859 if (!ioc->firmware_event_thread) { in _scsih_probe()
7861 ioc->name, __FILE__, __LINE__, __func__); in _scsih_probe()
7866 ioc->is_driver_loading = 1; in _scsih_probe()
7867 if ((mpt3sas_base_attach(ioc))) { in _scsih_probe()
7869 ioc->name, __FILE__, __LINE__, __func__); in _scsih_probe()
7876 ioc->name, __FILE__, __LINE__, __func__); in _scsih_probe()
7883 mpt3sas_base_detach(ioc); in _scsih_probe()
7885 destroy_workqueue(ioc->firmware_event_thread); in _scsih_probe()
7887 list_del(&ioc->list); in _scsih_probe()
7904 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_suspend() local
7907 mpt3sas_base_stop_watchdog(ioc); in _scsih_suspend()
7913 ioc->name, pdev, pci_name(pdev), device_state); in _scsih_suspend()
7916 mpt3sas_base_free_resources(ioc); in _scsih_suspend()
7931 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_resume() local
7937 ioc->name, pdev, pci_name(pdev), device_state); in _scsih_resume()
7942 ioc->pdev = pdev; in _scsih_resume()
7943 r = mpt3sas_base_map_resources(ioc); in _scsih_resume()
7947 mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP, SOFT_RESET); in _scsih_resume()
7949 mpt3sas_base_start_watchdog(ioc); in _scsih_resume()
7968 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_pci_error_detected() local
7971 ioc->name, state); in _scsih_pci_error_detected()
7978 ioc->pci_error_recovery = 1; in _scsih_pci_error_detected()
7979 scsi_block_requests(ioc->shost); in _scsih_pci_error_detected()
7980 mpt3sas_base_stop_watchdog(ioc); in _scsih_pci_error_detected()
7981 mpt3sas_base_free_resources(ioc); in _scsih_pci_error_detected()
7985 ioc->pci_error_recovery = 1; in _scsih_pci_error_detected()
7986 mpt3sas_base_stop_watchdog(ioc); in _scsih_pci_error_detected()
7987 _scsih_flush_running_cmds(ioc); in _scsih_pci_error_detected()
8005 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_pci_slot_reset() local
8009 ioc->name); in _scsih_pci_slot_reset()
8011 ioc->pci_error_recovery = 0; in _scsih_pci_slot_reset()
8012 ioc->pdev = pdev; in _scsih_pci_slot_reset()
8014 rc = mpt3sas_base_map_resources(ioc); in _scsih_pci_slot_reset()
8018 rc = mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP, in _scsih_pci_slot_reset()
8021 pr_warn(MPT3SAS_FMT "hard reset: %s\n", ioc->name, in _scsih_pci_slot_reset()
8042 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_pci_resume() local
8044 pr_info(MPT3SAS_FMT "PCI error: resume callback!!\n", ioc->name); in _scsih_pci_resume()
8047 mpt3sas_base_start_watchdog(ioc); in _scsih_pci_resume()
8048 scsi_unblock_requests(ioc->shost); in _scsih_pci_resume()
8059 struct MPT3SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_pci_mmio_enabled() local
8062 ioc->name); in _scsih_pci_mmio_enabled()