Lines Matching refs:ioc

71 static void _scsih_expander_node_remove(struct MPT2SAS_ADAPTER *ioc,
75 static u8 _scsih_check_for_pending_tm(struct MPT2SAS_ADAPTER *ioc, u16 smid);
173 struct MPT2SAS_ADAPTER *ioc; member
290 struct MPT2SAS_ADAPTER *ioc; in _scsih_set_debug_level() local
296 list_for_each_entry(ioc, &mpt2sas_ioc_list, list) in _scsih_set_debug_level()
297 ioc->logging_level = logging_level; in _scsih_set_debug_level()
401 _scsih_get_sas_address(struct MPT2SAS_ADAPTER *ioc, u16 handle, in _scsih_get_sas_address() argument
409 if (handle <= ioc->sas_hba.num_phys) { in _scsih_get_sas_address()
410 *sas_address = ioc->sas_hba.sas_address; in _scsih_get_sas_address()
414 if ((mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_get_sas_address()
416 printk(MPT2SAS_ERR_FMT "failure at %s:%d/%s()!\n", ioc->name, in _scsih_get_sas_address()
432 "failure at %s:%d/%s()!\n", ioc->name, handle, ioc_status, in _scsih_get_sas_address()
451 _scsih_determine_boot_device(struct MPT2SAS_ADAPTER *ioc, in _scsih_determine_boot_device() argument
462 if (!ioc->is_driver_loading) in _scsih_determine_boot_device()
466 if (!ioc->bios_pg3.BiosVersion) in _scsih_determine_boot_device()
483 if (!ioc->req_boot_device.device) { in _scsih_determine_boot_device()
486 (ioc->bios_pg2.ReqBootDeviceForm & in _scsih_determine_boot_device()
488 &ioc->bios_pg2.RequestedBootDevice)) { in _scsih_determine_boot_device()
489 dinitprintk(ioc, printk(MPT2SAS_INFO_FMT in _scsih_determine_boot_device()
491 ioc->name, __func__, in _scsih_determine_boot_device()
493 ioc->req_boot_device.device = device; in _scsih_determine_boot_device()
494 ioc->req_boot_device.is_raid = is_raid; in _scsih_determine_boot_device()
498 if (!ioc->req_alt_boot_device.device) { in _scsih_determine_boot_device()
501 (ioc->bios_pg2.ReqAltBootDeviceForm & in _scsih_determine_boot_device()
503 &ioc->bios_pg2.RequestedAltBootDevice)) { in _scsih_determine_boot_device()
504 dinitprintk(ioc, printk(MPT2SAS_INFO_FMT in _scsih_determine_boot_device()
506 ioc->name, __func__, in _scsih_determine_boot_device()
508 ioc->req_alt_boot_device.device = device; in _scsih_determine_boot_device()
509 ioc->req_alt_boot_device.is_raid = is_raid; in _scsih_determine_boot_device()
513 if (!ioc->current_boot_device.device) { in _scsih_determine_boot_device()
516 (ioc->bios_pg2.CurrentBootDeviceForm & in _scsih_determine_boot_device()
518 &ioc->bios_pg2.CurrentBootDevice)) { in _scsih_determine_boot_device()
519 dinitprintk(ioc, printk(MPT2SAS_INFO_FMT in _scsih_determine_boot_device()
521 ioc->name, __func__, in _scsih_determine_boot_device()
523 ioc->current_boot_device.device = device; in _scsih_determine_boot_device()
524 ioc->current_boot_device.is_raid = is_raid; in _scsih_determine_boot_device()
539 mpt2sas_scsih_sas_device_find_by_sas_address(struct MPT2SAS_ADAPTER *ioc, in mpt2sas_scsih_sas_device_find_by_sas_address() argument
544 list_for_each_entry(sas_device, &ioc->sas_device_list, list) in mpt2sas_scsih_sas_device_find_by_sas_address()
548 list_for_each_entry(sas_device, &ioc->sas_device_init_list, list) in mpt2sas_scsih_sas_device_find_by_sas_address()
565 _scsih_sas_device_find_by_handle(struct MPT2SAS_ADAPTER *ioc, u16 handle) in _scsih_sas_device_find_by_handle() argument
569 list_for_each_entry(sas_device, &ioc->sas_device_list, list) in _scsih_sas_device_find_by_handle()
573 list_for_each_entry(sas_device, &ioc->sas_device_init_list, list) in _scsih_sas_device_find_by_handle()
589 _scsih_sas_device_remove(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_device_remove() argument
597 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_remove()
600 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_remove()
613 _scsih_sas_device_add(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_device_add() argument
618 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: handle" in _scsih_sas_device_add()
619 "(0x%04x), sas_addr(0x%016llx)\n", ioc->name, __func__, in _scsih_sas_device_add()
622 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_add()
623 list_add_tail(&sas_device->list, &ioc->sas_device_list); in _scsih_sas_device_add()
624 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_add()
626 if (!mpt2sas_transport_port_add(ioc, sas_device->handle, in _scsih_sas_device_add()
628 _scsih_sas_device_remove(ioc, sas_device); in _scsih_sas_device_add()
634 if (!ioc->is_driver_loading) { in _scsih_sas_device_add()
635 mpt2sas_transport_port_remove(ioc, in _scsih_sas_device_add()
638 _scsih_sas_device_remove(ioc, sas_device); in _scsih_sas_device_add()
652 _scsih_sas_device_init_add(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_device_init_add() argument
657 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: handle" in _scsih_sas_device_init_add()
658 "(0x%04x), sas_addr(0x%016llx)\n", ioc->name, __func__, in _scsih_sas_device_init_add()
661 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_init_add()
662 list_add_tail(&sas_device->list, &ioc->sas_device_init_list); in _scsih_sas_device_init_add()
663 _scsih_determine_boot_device(ioc, sas_device, 0); in _scsih_sas_device_init_add()
664 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_init_add()
678 _scsih_raid_device_find_by_id(struct MPT2SAS_ADAPTER *ioc, int id, int channel) in _scsih_raid_device_find_by_id() argument
683 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in _scsih_raid_device_find_by_id()
704 _scsih_raid_device_find_by_handle(struct MPT2SAS_ADAPTER *ioc, u16 handle) in _scsih_raid_device_find_by_handle() argument
709 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in _scsih_raid_device_find_by_handle()
730 _scsih_raid_device_find_by_wwid(struct MPT2SAS_ADAPTER *ioc, u64 wwid) in _scsih_raid_device_find_by_wwid() argument
735 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in _scsih_raid_device_find_by_wwid()
754 _scsih_raid_device_add(struct MPT2SAS_ADAPTER *ioc, in _scsih_raid_device_add() argument
759 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: handle" in _scsih_raid_device_add()
760 "(0x%04x), wwid(0x%016llx)\n", ioc->name, __func__, in _scsih_raid_device_add()
763 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_raid_device_add()
764 list_add_tail(&raid_device->list, &ioc->raid_device_list); in _scsih_raid_device_add()
765 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_raid_device_add()
775 _scsih_raid_device_remove(struct MPT2SAS_ADAPTER *ioc, in _scsih_raid_device_remove() argument
780 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_raid_device_remove()
783 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_raid_device_remove()
796 mpt2sas_scsih_expander_find_by_handle(struct MPT2SAS_ADAPTER *ioc, u16 handle) in mpt2sas_scsih_expander_find_by_handle() argument
801 list_for_each_entry(sas_expander, &ioc->sas_expander_list, list) { in mpt2sas_scsih_expander_find_by_handle()
821 mpt2sas_scsih_expander_find_by_sas_address(struct MPT2SAS_ADAPTER *ioc, in mpt2sas_scsih_expander_find_by_sas_address() argument
827 list_for_each_entry(sas_expander, &ioc->sas_expander_list, list) { in mpt2sas_scsih_expander_find_by_sas_address()
848 _scsih_expander_node_add(struct MPT2SAS_ADAPTER *ioc, in _scsih_expander_node_add() argument
853 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_expander_node_add()
854 list_add_tail(&sas_expander->list, &ioc->sas_expander_list); in _scsih_expander_node_add()
855 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_expander_node_add()
885 _scsih_scsi_lookup_get(struct MPT2SAS_ADAPTER *ioc, u16 smid) in _scsih_scsi_lookup_get() argument
887 return ioc->scsi_lookup[smid - 1].scmd; in _scsih_scsi_lookup_get()
899 _scsih_scsi_lookup_get_clear(struct MPT2SAS_ADAPTER *ioc, u16 smid) in _scsih_scsi_lookup_get_clear() argument
904 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_get_clear()
905 scmd = ioc->scsi_lookup[smid - 1].scmd; in _scsih_scsi_lookup_get_clear()
906 ioc->scsi_lookup[smid - 1].scmd = NULL; in _scsih_scsi_lookup_get_clear()
907 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_get_clear()
923 _scsih_scsi_lookup_find_by_scmd(struct MPT2SAS_ADAPTER *ioc, struct scsi_cmnd in _scsih_scsi_lookup_find_by_scmd() argument
930 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_scmd()
932 for (i = 0; i < ioc->scsiio_depth; i++) { in _scsih_scsi_lookup_find_by_scmd()
933 if (ioc->scsi_lookup[i].scmd == scmd) { in _scsih_scsi_lookup_find_by_scmd()
934 smid = ioc->scsi_lookup[i].smid; in _scsih_scsi_lookup_find_by_scmd()
939 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_scmd()
954 _scsih_scsi_lookup_find_by_target(struct MPT2SAS_ADAPTER *ioc, int id, in _scsih_scsi_lookup_find_by_target() argument
961 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_target()
963 for (i = 0 ; i < ioc->scsiio_depth; i++) { in _scsih_scsi_lookup_find_by_target()
964 if (ioc->scsi_lookup[i].scmd && in _scsih_scsi_lookup_find_by_target()
965 (ioc->scsi_lookup[i].scmd->device->id == id && in _scsih_scsi_lookup_find_by_target()
966 ioc->scsi_lookup[i].scmd->device->channel == channel)) { in _scsih_scsi_lookup_find_by_target()
972 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_target()
988 _scsih_scsi_lookup_find_by_lun(struct MPT2SAS_ADAPTER *ioc, int id, in _scsih_scsi_lookup_find_by_lun() argument
995 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_lun()
997 for (i = 0 ; i < ioc->scsiio_depth; i++) { in _scsih_scsi_lookup_find_by_lun()
998 if (ioc->scsi_lookup[i].scmd && in _scsih_scsi_lookup_find_by_lun()
999 (ioc->scsi_lookup[i].scmd->device->id == id && in _scsih_scsi_lookup_find_by_lun()
1000 ioc->scsi_lookup[i].scmd->device->channel == channel && in _scsih_scsi_lookup_find_by_lun()
1001 ioc->scsi_lookup[i].scmd->device->lun == lun)) { in _scsih_scsi_lookup_find_by_lun()
1007 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_scsi_lookup_find_by_lun()
1019 _scsih_get_chain_buffer_tracker(struct MPT2SAS_ADAPTER *ioc, u16 smid) in _scsih_get_chain_buffer_tracker() argument
1024 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_get_chain_buffer_tracker()
1025 if (list_empty(&ioc->free_chain_list)) { in _scsih_get_chain_buffer_tracker()
1026 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_get_chain_buffer_tracker()
1027 dfailprintk(ioc, printk(MPT2SAS_WARN_FMT "chain buffers not " in _scsih_get_chain_buffer_tracker()
1028 "available\n", ioc->name)); in _scsih_get_chain_buffer_tracker()
1031 chain_req = list_entry(ioc->free_chain_list.next, in _scsih_get_chain_buffer_tracker()
1035 &ioc->scsi_lookup[smid - 1].chain_list); in _scsih_get_chain_buffer_tracker()
1036 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_get_chain_buffer_tracker()
1053 _scsih_build_scatter_gather(struct MPT2SAS_ADAPTER *ioc, in _scsih_build_scatter_gather() argument
1070 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid); in _scsih_build_scatter_gather()
1092 sges_in_segment = ioc->max_sges_in_main_message; in _scsih_build_scatter_gather()
1097 (sges_in_segment * ioc->sge_size))/4; in _scsih_build_scatter_gather()
1102 ioc->base_add_sg_single(sg_local, in _scsih_build_scatter_gather()
1106 ioc->base_add_sg_single(sg_local, sgl_flags | in _scsih_build_scatter_gather()
1109 sg_local += ioc->sge_size; in _scsih_build_scatter_gather()
1116 chain_req = _scsih_get_chain_buffer_tracker(ioc, smid); in _scsih_build_scatter_gather()
1123 ioc->max_sges_in_chain_message) ? sges_left : in _scsih_build_scatter_gather()
1124 ioc->max_sges_in_chain_message; in _scsih_build_scatter_gather()
1126 0 : (sges_in_segment * ioc->sge_size)/4; in _scsih_build_scatter_gather()
1127 chain_length = sges_in_segment * ioc->sge_size; in _scsih_build_scatter_gather()
1131 chain_length += ioc->sge_size; in _scsih_build_scatter_gather()
1133 ioc->base_add_sg_single(sg_local, chain_flags | chain_offset | in _scsih_build_scatter_gather()
1142 ioc->base_add_sg_single(sg_local, in _scsih_build_scatter_gather()
1147 ioc->base_add_sg_single(sg_local, sgl_flags | in _scsih_build_scatter_gather()
1151 sg_local += ioc->sge_size; in _scsih_build_scatter_gather()
1156 chain_req = _scsih_get_chain_buffer_tracker(ioc, smid); in _scsih_build_scatter_gather()
1169 ioc->base_add_sg_single(sg_local, sgl_flags_end_buffer | in _scsih_build_scatter_gather()
1172 ioc->base_add_sg_single(sg_local, sgl_flags | in _scsih_build_scatter_gather()
1175 sg_local += ioc->sge_size; in _scsih_build_scatter_gather()
1194 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_change_queue_depth() local
1211 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_change_queue_depth()
1212 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_change_queue_depth()
1217 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_change_queue_depth()
1238 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_target_alloc() local
1256 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_target_alloc()
1257 raid_device = _scsih_raid_device_find_by_id(ioc, starget->id, in _scsih_target_alloc()
1263 if (ioc->is_warpdrive) in _scsih_target_alloc()
1267 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_target_alloc()
1272 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_target_alloc()
1274 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_target_alloc()
1283 if (test_bit(sas_device->handle, ioc->pd_handles)) in _scsih_target_alloc()
1287 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_target_alloc()
1302 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_target_destroy() local
1314 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_target_destroy()
1315 raid_device = _scsih_raid_device_find_by_id(ioc, starget->id, in _scsih_target_destroy()
1321 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_target_destroy()
1325 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_target_destroy()
1327 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_target_destroy()
1334 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_target_destroy()
1352 struct MPT2SAS_ADAPTER *ioc; in _scsih_slave_alloc() local
1377 ioc = shost_priv(shost); in _scsih_slave_alloc()
1379 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_slave_alloc()
1380 raid_device = _scsih_raid_device_find_by_id(ioc, in _scsih_slave_alloc()
1384 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_slave_alloc()
1388 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_slave_alloc()
1389 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_slave_alloc()
1397 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_slave_alloc()
1415 struct MPT2SAS_ADAPTER *ioc; in _scsih_slave_destroy() local
1427 ioc = shost_priv(shost); in _scsih_slave_destroy()
1430 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_slave_destroy()
1431 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_slave_destroy()
1435 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_slave_destroy()
1449 _scsih_display_sata_capabilities(struct MPT2SAS_ADAPTER *ioc, in _scsih_display_sata_capabilities() argument
1458 if ((mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_display_sata_capabilities()
1461 ioc->name, __FILE__, __LINE__, __func__); in _scsih_display_sata_capabilities()
1469 ioc->name, __FILE__, __LINE__, __func__); in _scsih_display_sata_capabilities()
1496 struct MPT2SAS_ADAPTER *ioc = shost_priv(sdev->host); in _scsih_is_raid() local
1498 if (ioc->is_warpdrive) in _scsih_is_raid()
1511 struct MPT2SAS_ADAPTER *ioc = shost_priv(sdev->host); in _scsih_get_resync() local
1522 if (ioc->is_warpdrive) in _scsih_get_resync()
1525 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_get_resync()
1526 raid_device = _scsih_raid_device_find_by_id(ioc, sdev->id, in _scsih_get_resync()
1532 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_get_resync()
1537 if (mpt2sas_config_get_raid_volume_pg0(ioc, &mpi_reply, &vol_pg0, in _scsih_get_resync()
1541 ioc->name, __FILE__, __LINE__, __func__); in _scsih_get_resync()
1563 struct MPT2SAS_ADAPTER *ioc = shost_priv(sdev->host); in _scsih_get_state() local
1572 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_get_state()
1573 raid_device = _scsih_raid_device_find_by_id(ioc, sdev->id, in _scsih_get_state()
1577 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_get_state()
1582 if (mpt2sas_config_get_raid_volume_pg0(ioc, &mpi_reply, &vol_pg0, in _scsih_get_state()
1586 ioc->name, __FILE__, __LINE__, __func__); in _scsih_get_state()
1649 _scsih_get_volume_capabilities(struct MPT2SAS_ADAPTER *ioc, in _scsih_get_volume_capabilities() argument
1659 if ((mpt2sas_config_get_number_pds(ioc, raid_device->handle, in _scsih_get_volume_capabilities()
1661 dfailprintk(ioc, printk(MPT2SAS_WARN_FMT in _scsih_get_volume_capabilities()
1662 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, __LINE__, in _scsih_get_volume_capabilities()
1672 dfailprintk(ioc, printk(MPT2SAS_WARN_FMT in _scsih_get_volume_capabilities()
1673 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, __LINE__, in _scsih_get_volume_capabilities()
1678 if ((mpt2sas_config_get_raid_volume_pg0(ioc, &mpi_reply, vol_pg0, in _scsih_get_volume_capabilities()
1680 dfailprintk(ioc, printk(MPT2SAS_WARN_FMT in _scsih_get_volume_capabilities()
1681 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, __LINE__, in _scsih_get_volume_capabilities()
1692 if (!(mpt2sas_config_get_phys_disk_pg0(ioc, &mpi_reply, in _scsih_get_volume_capabilities()
1695 if (!(mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_get_volume_capabilities()
1711 _scsih_disable_ddio(struct MPT2SAS_ADAPTER *ioc) in _scsih_disable_ddio() argument
1721 while (!(mpt2sas_config_get_raid_volume_pg1(ioc, &mpi_reply, in _scsih_disable_ddio()
1728 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_disable_ddio()
1729 raid_device = _scsih_raid_device_find_by_handle(ioc, handle); in _scsih_disable_ddio()
1732 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_disable_ddio()
1743 _scsih_get_num_volumes(struct MPT2SAS_ADAPTER *ioc) in _scsih_get_num_volumes() argument
1752 while (!(mpt2sas_config_get_raid_volume_pg1(ioc, &mpi_reply, in _scsih_get_num_volumes()
1771 _scsih_init_warpdrive_properties(struct MPT2SAS_ADAPTER *ioc, in _scsih_init_warpdrive_properties() argument
1783 if (!ioc->is_warpdrive) in _scsih_init_warpdrive_properties()
1786 if (ioc->mfg_pg10_hide_flag == MFG_PAGE10_EXPOSE_ALL_DISKS) { in _scsih_init_warpdrive_properties()
1788 "globally as drives are exposed\n", ioc->name); in _scsih_init_warpdrive_properties()
1791 if (_scsih_get_num_volumes(ioc) > 1) { in _scsih_init_warpdrive_properties()
1792 _scsih_disable_ddio(ioc); in _scsih_init_warpdrive_properties()
1794 "globally as number of drives > 1\n", ioc->name); in _scsih_init_warpdrive_properties()
1797 if ((mpt2sas_config_get_number_pds(ioc, raid_device->handle, in _scsih_init_warpdrive_properties()
1800 "Failure in computing number of drives\n", ioc->name); in _scsih_init_warpdrive_properties()
1809 "Memory allocation failure for RVPG0\n", ioc->name); in _scsih_init_warpdrive_properties()
1813 if ((mpt2sas_config_get_raid_volume_pg0(ioc, &mpi_reply, vol_pg0, in _scsih_init_warpdrive_properties()
1816 "Failure in retrieving RVPG0\n", ioc->name); in _scsih_init_warpdrive_properties()
1828 "max_mem_allowed=%d\n", ioc->name, raid_device->handle, in _scsih_init_warpdrive_properties()
1834 if (mpt2sas_config_get_phys_disk_pg0(ioc, &mpi_reply, in _scsih_init_warpdrive_properties()
1842 ioc->name, raid_device->handle, in _scsih_init_warpdrive_properties()
1852 ioc->name, raid_device->handle, in _scsih_init_warpdrive_properties()
1868 "s_sz=%uK, blk_size=%u\n", ioc->name, in _scsih_init_warpdrive_properties()
1881 ioc->name, raid_device->handle, in _scsih_init_warpdrive_properties()
1892 ioc->name, raid_device->handle, in _scsih_init_warpdrive_properties()
1900 " with handle(0x%04x)\n", ioc->name, raid_device->handle); in _scsih_init_warpdrive_properties()
1931 _scsih_enable_tlr(struct MPT2SAS_ADAPTER *ioc, struct scsi_device *sdev) in _scsih_enable_tlr() argument
1937 if (!(ioc->facts.IOCCapabilities & MPI2_IOCFACTS_CAPABILITY_TLR)) in _scsih_enable_tlr()
1958 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_slave_configure() local
1981 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_slave_configure()
1982 raid_device = _scsih_raid_device_find_by_handle(ioc, handle); in _scsih_slave_configure()
1983 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_slave_configure()
1985 dfailprintk(ioc, printk(MPT2SAS_WARN_FMT in _scsih_slave_configure()
1986 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, in _scsih_slave_configure()
1991 if (_scsih_get_volume_capabilities(ioc, raid_device)) { in _scsih_slave_configure()
1992 dfailprintk(ioc, printk(MPT2SAS_WARN_FMT in _scsih_slave_configure()
1993 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, in _scsih_slave_configure()
2000 _scsih_init_warpdrive_properties(ioc, raid_device); in _scsih_slave_configure()
2026 if (ioc->manu_pg10.OEMIdentifier && in _scsih_slave_configure()
2027 (le32_to_cpu(ioc->manu_pg10.GenericFlags0) & in _scsih_slave_configure()
2049 if (!ioc->hide_ir_msg) in _scsih_slave_configure()
2057 if (!ioc->is_warpdrive) in _scsih_slave_configure()
2064 if (mpt2sas_config_get_volume_handle(ioc, handle, in _scsih_slave_configure()
2066 dfailprintk(ioc, printk(MPT2SAS_WARN_FMT in _scsih_slave_configure()
2067 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_slave_configure()
2071 if (volume_handle && mpt2sas_config_get_volume_wwid(ioc, in _scsih_slave_configure()
2073 dfailprintk(ioc, printk(MPT2SAS_WARN_FMT in _scsih_slave_configure()
2074 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_slave_configure()
2080 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_slave_configure()
2081 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_slave_configure()
2084 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_slave_configure()
2085 dfailprintk(ioc, printk(MPT2SAS_WARN_FMT in _scsih_slave_configure()
2086 "failure at %s:%d/%s()!\n", ioc->name, __FILE__, in _scsih_slave_configure()
2115 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_slave_configure()
2117 _scsih_display_sata_capabilities(ioc, handle, sdev); in _scsih_slave_configure()
2124 _scsih_enable_tlr(ioc, sdev); in _scsih_slave_configure()
2185 _scsih_response_code(struct MPT2SAS_ADAPTER *ioc, u8 response_code) in _scsih_response_code() argument
2219 ioc->name, response_code, desc); in _scsih_response_code()
2236 _scsih_tm_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply) in _scsih_tm_done() argument
2240 if (ioc->tm_cmds.status == MPT2_CMD_NOT_USED) in _scsih_tm_done()
2242 if (ioc->tm_cmds.smid != smid) in _scsih_tm_done()
2244 mpt2sas_base_flush_reply_queues(ioc); in _scsih_tm_done()
2245 ioc->tm_cmds.status |= MPT2_CMD_COMPLETE; in _scsih_tm_done()
2246 mpi_reply = mpt2sas_base_get_reply_virt_addr(ioc, reply); in _scsih_tm_done()
2248 memcpy(ioc->tm_cmds.reply, mpi_reply, mpi_reply->MsgLength*4); in _scsih_tm_done()
2249 ioc->tm_cmds.status |= MPT2_CMD_REPLY_VALID; in _scsih_tm_done()
2251 ioc->tm_cmds.status &= ~MPT2_CMD_PENDING; in _scsih_tm_done()
2252 complete(&ioc->tm_cmds.done); in _scsih_tm_done()
2264 mpt2sas_scsih_set_tm_flag(struct MPT2SAS_ADAPTER *ioc, u16 handle) in mpt2sas_scsih_set_tm_flag() argument
2270 shost_for_each_device(sdev, ioc->shost) { in mpt2sas_scsih_set_tm_flag()
2279 ioc->ignore_loginfos = 1; in mpt2sas_scsih_set_tm_flag()
2292 mpt2sas_scsih_clear_tm_flag(struct MPT2SAS_ADAPTER *ioc, u16 handle) in mpt2sas_scsih_clear_tm_flag() argument
2298 shost_for_each_device(sdev, ioc->shost) { in mpt2sas_scsih_clear_tm_flag()
2307 ioc->ignore_loginfos = 0; in mpt2sas_scsih_clear_tm_flag()
2333 mpt2sas_scsih_issue_tm(struct MPT2SAS_ADAPTER *ioc, u16 handle, uint channel, in mpt2sas_scsih_issue_tm() argument
2346 mutex_lock(&ioc->tm_cmds.mutex); in mpt2sas_scsih_issue_tm()
2347 if (ioc->tm_cmds.status != MPT2_CMD_NOT_USED) { in mpt2sas_scsih_issue_tm()
2349 __func__, ioc->name); in mpt2sas_scsih_issue_tm()
2354 if (ioc->shost_recovery || ioc->remove_host || in mpt2sas_scsih_issue_tm()
2355 ioc->pci_error_recovery) { in mpt2sas_scsih_issue_tm()
2357 __func__, ioc->name); in mpt2sas_scsih_issue_tm()
2362 ioc_state = mpt2sas_base_get_iocstate(ioc, 0); in mpt2sas_scsih_issue_tm()
2364 dhsprintk(ioc, printk(MPT2SAS_INFO_FMT "unexpected doorbell " in mpt2sas_scsih_issue_tm()
2365 "active!\n", ioc->name)); in mpt2sas_scsih_issue_tm()
2366 rc = mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP, in mpt2sas_scsih_issue_tm()
2373 mpt2sas_base_fault_info(ioc, ioc_state & in mpt2sas_scsih_issue_tm()
2375 rc = mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP, in mpt2sas_scsih_issue_tm()
2381 smid = mpt2sas_base_get_smid_hpr(ioc, ioc->tm_cb_idx); in mpt2sas_scsih_issue_tm()
2384 ioc->name, __func__); in mpt2sas_scsih_issue_tm()
2390 scsi_lookup = &ioc->scsi_lookup[smid_task - 1]; in mpt2sas_scsih_issue_tm()
2392 dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "sending tm: handle(0x%04x)," in mpt2sas_scsih_issue_tm()
2393 " task_type(0x%02x), smid(%d)\n", ioc->name, handle, type, in mpt2sas_scsih_issue_tm()
2395 ioc->tm_cmds.status = MPT2_CMD_PENDING; in mpt2sas_scsih_issue_tm()
2396 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid); in mpt2sas_scsih_issue_tm()
2397 ioc->tm_cmds.smid = smid; in mpt2sas_scsih_issue_tm()
2399 memset(ioc->tm_cmds.reply, 0, sizeof(Mpi2SCSITaskManagementReply_t)); in mpt2sas_scsih_issue_tm()
2405 mpt2sas_scsih_set_tm_flag(ioc, handle); in mpt2sas_scsih_issue_tm()
2406 init_completion(&ioc->tm_cmds.done); in mpt2sas_scsih_issue_tm()
2407 mpt2sas_base_put_smid_hi_priority(ioc, smid); in mpt2sas_scsih_issue_tm()
2408 timeleft = wait_for_completion_timeout(&ioc->tm_cmds.done, timeout*HZ); in mpt2sas_scsih_issue_tm()
2409 if (!(ioc->tm_cmds.status & MPT2_CMD_COMPLETE)) { in mpt2sas_scsih_issue_tm()
2411 ioc->name, __func__); in mpt2sas_scsih_issue_tm()
2414 if (!(ioc->tm_cmds.status & MPT2_CMD_RESET)) { in mpt2sas_scsih_issue_tm()
2415 rc = mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP, in mpt2sas_scsih_issue_tm()
2418 ioc->tm_cmds.status = MPT2_CMD_NOT_USED; in mpt2sas_scsih_issue_tm()
2419 mpt2sas_scsih_clear_tm_flag(ioc, handle); in mpt2sas_scsih_issue_tm()
2424 if (ioc->tm_cmds.status & MPT2_CMD_REPLY_VALID) { in mpt2sas_scsih_issue_tm()
2425 mpi_reply = ioc->tm_cmds.reply; in mpt2sas_scsih_issue_tm()
2426 dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "complete tm: " in mpt2sas_scsih_issue_tm()
2428 ioc->name, le16_to_cpu(mpi_reply->IOCStatus), in mpt2sas_scsih_issue_tm()
2431 if (ioc->logging_level & MPT_DEBUG_TM) { in mpt2sas_scsih_issue_tm()
2432 _scsih_response_code(ioc, mpi_reply->ResponseCode); in mpt2sas_scsih_issue_tm()
2448 if (_scsih_scsi_lookup_find_by_target(ioc, id, channel)) in mpt2sas_scsih_issue_tm()
2456 if (_scsih_scsi_lookup_find_by_lun(ioc, id, lun, channel)) in mpt2sas_scsih_issue_tm()
2469 mpt2sas_scsih_clear_tm_flag(ioc, handle); in mpt2sas_scsih_issue_tm()
2470 ioc->tm_cmds.status = MPT2_CMD_NOT_USED; in mpt2sas_scsih_issue_tm()
2472 mutex_unlock(&ioc->tm_cmds.mutex); in mpt2sas_scsih_issue_tm()
2478 mutex_unlock(&ioc->tm_cmds.mutex); in mpt2sas_scsih_issue_tm()
2490 _scsih_tm_display_info(struct MPT2SAS_ADAPTER *ioc, struct scsi_cmnd *scmd) in _scsih_tm_display_info() argument
2500 if (ioc->hide_ir_msg) in _scsih_tm_display_info()
2511 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_tm_display_info()
2512 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_tm_display_info()
2533 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_tm_display_info()
2546 struct MPT2SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in _scsih_abort() local
2554 _scsih_tm_display_info(ioc, scmd); in _scsih_abort()
2567 smid = _scsih_scsi_lookup_find_by_scmd(ioc, scmd); in _scsih_abort()
2583 mpt2sas_halt_firmware(ioc); in _scsih_abort()
2586 r = mpt2sas_scsih_issue_tm(ioc, handle, scmd->device->channel, in _scsih_abort()
2605 struct MPT2SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in _scsih_dev_reset() local
2616 _scsih_tm_display_info(ioc, scmd); in _scsih_dev_reset()
2632 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_dev_reset()
2633 sas_device = _scsih_sas_device_find_by_handle(ioc, in _scsih_dev_reset()
2637 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_dev_reset()
2647 r = mpt2sas_scsih_issue_tm(ioc, handle, scmd->device->channel, in _scsih_dev_reset()
2666 struct MPT2SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in _scsih_target_reset() local
2676 _scsih_tm_display_info(ioc, scmd); in _scsih_target_reset()
2692 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_target_reset()
2693 sas_device = _scsih_sas_device_find_by_handle(ioc, in _scsih_target_reset()
2697 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_target_reset()
2707 r = mpt2sas_scsih_issue_tm(ioc, handle, scmd->device->channel, in _scsih_target_reset()
2726 struct MPT2SAS_ADAPTER *ioc = shost_priv(scmd->device->host); in _scsih_host_reset() local
2730 ioc->name, scmd); in _scsih_host_reset()
2733 if (ioc->is_driver_loading) { in _scsih_host_reset()
2735 ioc->name); in _scsih_host_reset()
2740 retval = mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP, in _scsih_host_reset()
2746 ioc->name, ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd); in _scsih_host_reset()
2763 _scsih_fw_event_add(struct MPT2SAS_ADAPTER *ioc, struct fw_event_work *fw_event) in _scsih_fw_event_add() argument
2767 if (ioc->firmware_event_thread == NULL) in _scsih_fw_event_add()
2770 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_fw_event_add()
2771 list_add_tail(&fw_event->list, &ioc->fw_event_list); in _scsih_fw_event_add()
2773 queue_delayed_work(ioc->firmware_event_thread, in _scsih_fw_event_add()
2775 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_fw_event_add()
2789 _scsih_fw_event_free(struct MPT2SAS_ADAPTER *ioc, struct fw_event_work in _scsih_fw_event_free() argument
2794 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_fw_event_free()
2797 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_fw_event_free()
2808 _scsih_error_recovery_delete_devices(struct MPT2SAS_ADAPTER *ioc) in _scsih_error_recovery_delete_devices() argument
2812 if (ioc->is_driver_loading) in _scsih_error_recovery_delete_devices()
2820 fw_event->ioc = ioc; in _scsih_error_recovery_delete_devices()
2821 _scsih_fw_event_add(ioc, fw_event); in _scsih_error_recovery_delete_devices()
2831 mpt2sas_port_enable_complete(struct MPT2SAS_ADAPTER *ioc) in mpt2sas_port_enable_complete() argument
2839 fw_event->ioc = ioc; in mpt2sas_port_enable_complete()
2840 _scsih_fw_event_add(ioc, fw_event); in mpt2sas_port_enable_complete()
2853 _scsih_fw_event_cleanup_queue(struct MPT2SAS_ADAPTER *ioc) in _scsih_fw_event_cleanup_queue() argument
2857 if (list_empty(&ioc->fw_event_list) || in _scsih_fw_event_cleanup_queue()
2858 !ioc->firmware_event_thread || in_interrupt()) in _scsih_fw_event_cleanup_queue()
2861 list_for_each_entry_safe(fw_event, next, &ioc->fw_event_list, list) { in _scsih_fw_event_cleanup_queue()
2863 _scsih_fw_event_free(ioc, fw_event); in _scsih_fw_event_cleanup_queue()
2876 _scsih_ublock_io_all_device(struct MPT2SAS_ADAPTER *ioc) in _scsih_ublock_io_all_device() argument
2881 shost_for_each_device(sdev, ioc->shost) { in _scsih_ublock_io_all_device()
2888 dewtprintk(ioc, sdev_printk(KERN_INFO, sdev, "device_running, " in _scsih_ublock_io_all_device()
2902 _scsih_ublock_io_device(struct MPT2SAS_ADAPTER *ioc, u64 sas_address) in _scsih_ublock_io_device() argument
2907 shost_for_each_device(sdev, ioc->shost) { in _scsih_ublock_io_device()
2915 dewtprintk(ioc, sdev_printk(KERN_INFO, sdev, in _scsih_ublock_io_device()
2917 "sas address(0x%016llx)\n", ioc->name, in _scsih_ublock_io_device()
2933 _scsih_block_io_all_device(struct MPT2SAS_ADAPTER *ioc) in _scsih_block_io_all_device() argument
2938 shost_for_each_device(sdev, ioc->shost) { in _scsih_block_io_all_device()
2945 dewtprintk(ioc, sdev_printk(KERN_INFO, sdev, "device_blocked, " in _scsih_block_io_all_device()
2961 _scsih_block_io_device(struct MPT2SAS_ADAPTER *ioc, u16 handle) in _scsih_block_io_device() argument
2966 shost_for_each_device(sdev, ioc->shost) { in _scsih_block_io_device()
2973 dewtprintk(ioc, sdev_printk(KERN_INFO, sdev, in _scsih_block_io_device()
2975 "handle(0x%04x)\n", ioc->name, handle)); in _scsih_block_io_device()
2992 _scsih_block_io_to_children_attached_to_ex(struct MPT2SAS_ADAPTER *ioc, in _scsih_block_io_to_children_attached_to_ex() argument
3007 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_block_io_to_children_attached_to_ex()
3009 mpt2sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_block_io_to_children_attached_to_ex()
3013 ioc->blocking_handles); in _scsih_block_io_to_children_attached_to_ex()
3014 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_block_io_to_children_attached_to_ex()
3027 ioc, mpt2sas_port->remote_identify.sas_address); in _scsih_block_io_to_children_attached_to_ex()
3028 _scsih_block_io_to_children_attached_to_ex(ioc, in _scsih_block_io_to_children_attached_to_ex()
3043 _scsih_block_io_to_children_attached_directly(struct MPT2SAS_ADAPTER *ioc, in _scsih_block_io_to_children_attached_directly() argument
3059 _scsih_block_io_device(ioc, handle); in _scsih_block_io_to_children_attached_directly()
3079 _scsih_tm_tr_send(struct MPT2SAS_ADAPTER *ioc, u16 handle) in _scsih_tm_tr_send() argument
3090 if (ioc->remove_host) { in _scsih_tm_tr_send()
3091 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: host has been " in _scsih_tm_tr_send()
3092 "removed: handle(0x%04x)\n", __func__, ioc->name, handle)); in _scsih_tm_tr_send()
3094 } else if (ioc->pci_error_recovery) { in _scsih_tm_tr_send()
3095 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: host in pci " in _scsih_tm_tr_send()
3096 "error recovery: handle(0x%04x)\n", __func__, ioc->name, in _scsih_tm_tr_send()
3100 ioc_state = mpt2sas_base_get_iocstate(ioc, 1); in _scsih_tm_tr_send()
3102 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: host is not " in _scsih_tm_tr_send()
3103 "operational: handle(0x%04x)\n", __func__, ioc->name, in _scsih_tm_tr_send()
3109 if (test_bit(handle, ioc->pd_handles)) in _scsih_tm_tr_send()
3112 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_tm_tr_send()
3113 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_tm_tr_send()
3120 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_tm_tr_send()
3123 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "setting delete flag: " in _scsih_tm_tr_send()
3124 "handle(0x%04x), sas_addr(0x%016llx)\n", ioc->name, handle, in _scsih_tm_tr_send()
3126 _scsih_ublock_io_device(ioc, sas_address); in _scsih_tm_tr_send()
3130 smid = mpt2sas_base_get_smid_hpr(ioc, ioc->tm_tr_cb_idx); in _scsih_tm_tr_send()
3137 list_add_tail(&delayed_tr->list, &ioc->delayed_tr_list); in _scsih_tm_tr_send()
3138 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT in _scsih_tm_tr_send()
3140 ioc->name, handle)); in _scsih_tm_tr_send()
3144 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "tr_send:handle(0x%04x), " in _scsih_tm_tr_send()
3145 "(open), smid(%d), cb(%d)\n", ioc->name, handle, smid, in _scsih_tm_tr_send()
3146 ioc->tm_tr_cb_idx)); in _scsih_tm_tr_send()
3147 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid); in _scsih_tm_tr_send()
3152 mpt2sas_base_put_smid_hi_priority(ioc, smid); in _scsih_tm_tr_send()
3173 _scsih_sas_control_complete(struct MPT2SAS_ADAPTER *ioc, u16 smid, in _scsih_sas_control_complete() argument
3177 mpt2sas_base_get_reply_virt_addr(ioc, reply); in _scsih_sas_control_complete()
3179 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT in _scsih_sas_control_complete()
3182 ioc->name, le16_to_cpu(mpi_reply->DevHandle), smid, in _scsih_sas_control_complete()
3187 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_control_complete()
3203 _scsih_tm_tr_volume_send(struct MPT2SAS_ADAPTER *ioc, u16 handle) in _scsih_tm_tr_volume_send() argument
3209 if (ioc->shost_recovery || ioc->remove_host || in _scsih_tm_tr_volume_send()
3210 ioc->pci_error_recovery) { in _scsih_tm_tr_volume_send()
3211 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: host reset in " in _scsih_tm_tr_volume_send()
3212 "progress!\n", __func__, ioc->name)); in _scsih_tm_tr_volume_send()
3216 smid = mpt2sas_base_get_smid_hpr(ioc, ioc->tm_tr_volume_cb_idx); in _scsih_tm_tr_volume_send()
3223 list_add_tail(&delayed_tr->list, &ioc->delayed_tr_volume_list); in _scsih_tm_tr_volume_send()
3224 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT in _scsih_tm_tr_volume_send()
3226 ioc->name, handle)); in _scsih_tm_tr_volume_send()
3230 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "tr_send:handle(0x%04x), " in _scsih_tm_tr_volume_send()
3231 "(open), smid(%d), cb(%d)\n", ioc->name, handle, smid, in _scsih_tm_tr_volume_send()
3232 ioc->tm_tr_volume_cb_idx)); in _scsih_tm_tr_volume_send()
3233 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid); in _scsih_tm_tr_volume_send()
3238 mpt2sas_base_put_smid_hi_priority(ioc, smid); in _scsih_tm_tr_volume_send()
3253 _scsih_tm_volume_tr_complete(struct MPT2SAS_ADAPTER *ioc, u16 smid, in _scsih_tm_volume_tr_complete() argument
3259 mpt2sas_base_get_reply_virt_addr(ioc, reply); in _scsih_tm_volume_tr_complete()
3261 if (ioc->shost_recovery || ioc->remove_host || in _scsih_tm_volume_tr_complete()
3262 ioc->pci_error_recovery) { in _scsih_tm_volume_tr_complete()
3263 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: host reset in " in _scsih_tm_volume_tr_complete()
3264 "progress!\n", __func__, ioc->name)); in _scsih_tm_volume_tr_complete()
3269 ioc->name, __FILE__, __LINE__, __func__); in _scsih_tm_volume_tr_complete()
3272 mpi_request_tm = mpt2sas_base_get_msg_frame(ioc, smid); in _scsih_tm_volume_tr_complete()
3275 dewtprintk(ioc, printk("spurious interrupt: " in _scsih_tm_volume_tr_complete()
3281 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT in _scsih_tm_volume_tr_complete()
3283 "loginfo(0x%08x), completed(%d)\n", ioc->name, in _scsih_tm_volume_tr_complete()
3288 return _scsih_check_for_pending_tm(ioc, smid); in _scsih_tm_volume_tr_complete()
3308 _scsih_tm_tr_complete(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index, in _scsih_tm_tr_complete() argument
3314 mpt2sas_base_get_reply_virt_addr(ioc, reply); in _scsih_tm_tr_complete()
3319 if (ioc->remove_host) { in _scsih_tm_tr_complete()
3320 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: host has been " in _scsih_tm_tr_complete()
3321 "removed\n", __func__, ioc->name)); in _scsih_tm_tr_complete()
3323 } else if (ioc->pci_error_recovery) { in _scsih_tm_tr_complete()
3324 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: host in pci " in _scsih_tm_tr_complete()
3325 "error recovery\n", __func__, ioc->name)); in _scsih_tm_tr_complete()
3328 ioc_state = mpt2sas_base_get_iocstate(ioc, 1); in _scsih_tm_tr_complete()
3330 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: host is not " in _scsih_tm_tr_complete()
3331 "operational\n", __func__, ioc->name)); in _scsih_tm_tr_complete()
3336 ioc->name, __FILE__, __LINE__, __func__); in _scsih_tm_tr_complete()
3339 mpi_request_tm = mpt2sas_base_get_msg_frame(ioc, smid); in _scsih_tm_tr_complete()
3342 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "spurious interrupt: " in _scsih_tm_tr_complete()
3343 "handle(0x%04x:0x%04x), smid(%d)!!!\n", ioc->name, handle, in _scsih_tm_tr_complete()
3348 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT in _scsih_tm_tr_complete()
3350 "loginfo(0x%08x), completed(%d)\n", ioc->name, in _scsih_tm_tr_complete()
3355 smid_sas_ctrl = mpt2sas_base_get_smid(ioc, ioc->tm_sas_control_cb_idx); in _scsih_tm_tr_complete()
3358 ioc->name, __func__); in _scsih_tm_tr_complete()
3362 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "sc_send:handle(0x%04x), " in _scsih_tm_tr_complete()
3363 "(open), smid(%d), cb(%d)\n", ioc->name, handle, smid_sas_ctrl, in _scsih_tm_tr_complete()
3364 ioc->tm_sas_control_cb_idx)); in _scsih_tm_tr_complete()
3365 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid_sas_ctrl); in _scsih_tm_tr_complete()
3370 mpt2sas_base_put_smid_default(ioc, smid_sas_ctrl); in _scsih_tm_tr_complete()
3372 return _scsih_check_for_pending_tm(ioc, smid); in _scsih_tm_tr_complete()
3387 _scsih_check_for_pending_tm(struct MPT2SAS_ADAPTER *ioc, u16 smid) in _scsih_check_for_pending_tm() argument
3391 if (!list_empty(&ioc->delayed_tr_volume_list)) { in _scsih_check_for_pending_tm()
3392 delayed_tr = list_entry(ioc->delayed_tr_volume_list.next, in _scsih_check_for_pending_tm()
3394 mpt2sas_base_free_smid(ioc, smid); in _scsih_check_for_pending_tm()
3395 _scsih_tm_tr_volume_send(ioc, delayed_tr->handle); in _scsih_check_for_pending_tm()
3401 if (!list_empty(&ioc->delayed_tr_list)) { in _scsih_check_for_pending_tm()
3402 delayed_tr = list_entry(ioc->delayed_tr_list.next, in _scsih_check_for_pending_tm()
3404 mpt2sas_base_free_smid(ioc, smid); in _scsih_check_for_pending_tm()
3405 _scsih_tm_tr_send(ioc, delayed_tr->handle); in _scsih_check_for_pending_tm()
3428 _scsih_check_topo_delete_events(struct MPT2SAS_ADAPTER *ioc, in _scsih_check_topo_delete_events() argument
3446 _scsih_tm_tr_send(ioc, handle); in _scsih_check_topo_delete_events()
3450 if (expander_handle < ioc->sas_hba.num_phys) { in _scsih_check_topo_delete_events()
3451 _scsih_block_io_to_children_attached_directly(ioc, event_data); in _scsih_check_topo_delete_events()
3457 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_check_topo_delete_events()
3458 sas_expander = mpt2sas_scsih_expander_find_by_handle(ioc, in _scsih_check_topo_delete_events()
3460 _scsih_block_io_to_children_attached_to_ex(ioc, sas_expander); in _scsih_check_topo_delete_events()
3461 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_check_topo_delete_events()
3463 handle = find_first_bit(ioc->blocking_handles, in _scsih_check_topo_delete_events()
3464 ioc->facts.MaxDevHandle); in _scsih_check_topo_delete_events()
3465 if (handle < ioc->facts.MaxDevHandle) in _scsih_check_topo_delete_events()
3466 _scsih_block_io_device(ioc, handle); in _scsih_check_topo_delete_events()
3467 } while (test_and_clear_bit(handle, ioc->blocking_handles)); in _scsih_check_topo_delete_events()
3469 _scsih_block_io_to_children_attached_directly(ioc, event_data); in _scsih_check_topo_delete_events()
3475 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_check_topo_delete_events()
3476 list_for_each_entry(fw_event, &ioc->fw_event_list, list) { in _scsih_check_topo_delete_events()
3488 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT in _scsih_check_topo_delete_events()
3489 "setting ignoring flag\n", ioc->name)); in _scsih_check_topo_delete_events()
3494 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_check_topo_delete_events()
3506 _scsih_set_volume_delete_flag(struct MPT2SAS_ADAPTER *ioc, u16 handle) in _scsih_set_volume_delete_flag() argument
3512 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_set_volume_delete_flag()
3513 raid_device = _scsih_raid_device_find_by_handle(ioc, handle); in _scsih_set_volume_delete_flag()
3519 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT in _scsih_set_volume_delete_flag()
3521 "wwid(0x%016llx)\n", ioc->name, handle, in _scsih_set_volume_delete_flag()
3524 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_set_volume_delete_flag()
3563 _scsih_check_ir_config_unhide_events(struct MPT2SAS_ADAPTER *ioc, in _scsih_check_ir_config_unhide_events() argument
3574 if (ioc->is_warpdrive) in _scsih_check_ir_config_unhide_events()
3585 _scsih_set_volume_delete_flag(ioc, volume_handle); in _scsih_check_ir_config_unhide_events()
3603 _scsih_tm_tr_volume_send(ioc, a); in _scsih_check_ir_config_unhide_events()
3605 _scsih_tm_tr_volume_send(ioc, b); in _scsih_check_ir_config_unhide_events()
3614 clear_bit(handle, ioc->pd_handles); in _scsih_check_ir_config_unhide_events()
3616 _scsih_tm_tr_send(ioc, handle); in _scsih_check_ir_config_unhide_events()
3622 list_add_tail(&delayed_tr->list, &ioc->delayed_tr_list); in _scsih_check_ir_config_unhide_events()
3623 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT in _scsih_check_ir_config_unhide_events()
3624 "DELAYED:tr:handle(0x%04x), (open)\n", ioc->name, in _scsih_check_ir_config_unhide_events()
3627 _scsih_tm_tr_send(ioc, handle); in _scsih_check_ir_config_unhide_events()
3645 _scsih_check_volume_delete_events(struct MPT2SAS_ADAPTER *ioc, in _scsih_check_volume_delete_events() argument
3655 _scsih_set_volume_delete_flag(ioc, in _scsih_check_volume_delete_events()
3668 _scsih_temp_threshold_events(struct MPT2SAS_ADAPTER *ioc, in _scsih_temp_threshold_events() argument
3671 if (ioc->temp_sensors_count >= event_data->SensorNum) { in _scsih_temp_threshold_events()
3673 " exceeded for Sensor: %d !!!\n", ioc->name, in _scsih_temp_threshold_events()
3680 ioc->name, event_data->CurrentTemperature); in _scsih_temp_threshold_events()
3694 _scsih_flush_running_cmds(struct MPT2SAS_ADAPTER *ioc) in _scsih_flush_running_cmds() argument
3700 for (smid = 1; smid <= ioc->scsiio_depth; smid++) { in _scsih_flush_running_cmds()
3701 scmd = _scsih_scsi_lookup_get_clear(ioc, smid); in _scsih_flush_running_cmds()
3705 mpt2sas_base_free_smid(ioc, smid); in _scsih_flush_running_cmds()
3707 if (ioc->pci_error_recovery) in _scsih_flush_running_cmds()
3713 dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "completing %d cmds\n", in _scsih_flush_running_cmds()
3714 ioc->name, count)); in _scsih_flush_running_cmds()
3810 _scsih_scsi_direct_io_get(struct MPT2SAS_ADAPTER *ioc, u16 smid) in _scsih_scsi_direct_io_get() argument
3812 return ioc->scsi_lookup[smid - 1].direct_io; in _scsih_scsi_direct_io_get()
3824 _scsih_scsi_direct_io_set(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 direct_io) in _scsih_scsi_direct_io_set() argument
3826 ioc->scsi_lookup[smid - 1].direct_io = direct_io; in _scsih_scsi_direct_io_set()
3841 _scsih_setup_direct_io(struct MPT2SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, in _scsih_setup_direct_io() argument
3884 _scsih_scsi_direct_io_set(ioc, smid, 1); in _scsih_setup_direct_io()
3901 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_qcmd() local
3916 if (ioc->pci_error_recovery || ioc->remove_host) { in _scsih_qcmd()
3931 if (ioc->shost_recovery || ioc->ioc_link_reset_in_progress) in _scsih_qcmd()
3956 if (!ioc->is_warpdrive && !_scsih_is_raid(&scmd->device->sdev_gendev) && in _scsih_qcmd()
3960 smid = mpt2sas_base_get_smid_scsiio(ioc, ioc->scsi_io_cb_idx, scmd); in _scsih_qcmd()
3963 ioc->name, __func__); in _scsih_qcmd()
3966 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid); in _scsih_qcmd()
3985 mpt2sas_base_get_sense_buffer_dma(ioc, smid); in _scsih_qcmd()
3996 mpt2sas_base_build_zero_len_sge(ioc, &mpi_request->SGL); in _scsih_qcmd()
3998 if (_scsih_build_scatter_gather(ioc, scmd, smid)) { in _scsih_qcmd()
3999 mpt2sas_base_free_smid(ioc, smid); in _scsih_qcmd()
4006 _scsih_setup_direct_io(ioc, scmd, raid_device, mpi_request, in _scsih_qcmd()
4010 mpt2sas_base_put_smid_scsi_io(ioc, smid, in _scsih_qcmd()
4013 mpt2sas_base_put_smid_default(ioc, smid); in _scsih_qcmd()
4057 _scsih_scsi_ioc_info(struct MPT2SAS_ADAPTER *ioc, struct scsi_cmnd *scmd, in _scsih_scsi_ioc_info() argument
4068 char *desc_scsi_state = ioc->tmp_string; in _scsih_scsi_ioc_info()
4079 if (ioc->hide_ir_msg) in _scsih_scsi_ioc_info()
4200 printk(MPT2SAS_WARN_FMT "\t%s wwid(0x%016llx)\n", ioc->name, in _scsih_scsi_ioc_info()
4203 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_scsi_ioc_info()
4204 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_scsi_ioc_info()
4208 "phy(%d)\n", ioc->name, sas_device->sas_address, in _scsih_scsi_ioc_info()
4212 ioc->name, sas_device->enclosure_logical_id, in _scsih_scsi_ioc_info()
4215 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_scsi_ioc_info()
4219 "smid(%d)\n", ioc->name, le16_to_cpu(mpi_reply->DevHandle), in _scsih_scsi_ioc_info()
4222 "resid(%d)\n", ioc->name, scsi_bufflen(scmd), scmd->underflow, in _scsih_scsi_ioc_info()
4225 "sc->result(0x%08x)\n", ioc->name, le16_to_cpu(mpi_reply->TaskTag), in _scsih_scsi_ioc_info()
4228 "scsi_state(%s)(0x%02x)\n", ioc->name, desc_scsi_status, in _scsih_scsi_ioc_info()
4235 "[0x%02x,0x%02x,0x%02x], count(%d)\n", ioc->name, data.skey, in _scsih_scsi_ioc_info()
4242 _scsih_response_code(ioc, response_bytes[0]); in _scsih_scsi_ioc_info()
4256 _scsih_turn_on_pfa_led(struct MPT2SAS_ADAPTER *ioc, u16 handle) in _scsih_turn_on_pfa_led() argument
4262 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_turn_on_pfa_led()
4273 if ((mpt2sas_base_scsi_enclosure_processor(ioc, &mpi_reply, in _scsih_turn_on_pfa_led()
4275 printk(MPT2SAS_ERR_FMT "failure at %s:%d/%s()!\n", ioc->name, in _scsih_turn_on_pfa_led()
4283 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT in _scsih_turn_on_pfa_led()
4285 ioc->name, le16_to_cpu(mpi_reply.IOCStatus), in _scsih_turn_on_pfa_led()
4300 _scsih_turn_off_pfa_led(struct MPT2SAS_ADAPTER *ioc, in _scsih_turn_off_pfa_led() argument
4314 if ((mpt2sas_base_scsi_enclosure_processor(ioc, &mpi_reply, in _scsih_turn_off_pfa_led()
4316 printk(MPT2SAS_ERR_FMT "failure at %s:%d/%s()!\n", ioc->name, in _scsih_turn_off_pfa_led()
4322 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "enclosure_processor: " in _scsih_turn_off_pfa_led()
4323 "ioc_status (0x%04x), loginfo(0x%08x)\n", ioc->name, in _scsih_turn_off_pfa_led()
4339 _scsih_send_event_to_turn_on_pfa_led(struct MPT2SAS_ADAPTER *ioc, u16 handle) in _scsih_send_event_to_turn_on_pfa_led() argument
4348 fw_event->ioc = ioc; in _scsih_send_event_to_turn_on_pfa_led()
4349 _scsih_fw_event_add(ioc, fw_event); in _scsih_send_event_to_turn_on_pfa_led()
4361 _scsih_smart_predicted_fault(struct MPT2SAS_ADAPTER *ioc, u16 handle) in _scsih_smart_predicted_fault() argument
4372 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_smart_predicted_fault()
4373 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_smart_predicted_fault()
4375 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_smart_predicted_fault()
4383 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_smart_predicted_fault()
4387 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_smart_predicted_fault()
4389 if (ioc->pdev->subsystem_vendor == PCI_VENDOR_ID_IBM) in _scsih_smart_predicted_fault()
4390 _scsih_send_event_to_turn_on_pfa_led(ioc, handle); in _scsih_smart_predicted_fault()
4398 ioc->name, __FILE__, __LINE__, __func__); in _scsih_smart_predicted_fault()
4414 mpt2sas_ctl_add_to_event_log(ioc, event_reply); in _scsih_smart_predicted_fault()
4431 _scsih_io_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply) in _scsih_io_done() argument
4445 mpi_reply = mpt2sas_base_get_reply_virt_addr(ioc, reply); in _scsih_io_done()
4446 scmd = _scsih_scsi_lookup_get_clear(ioc, smid); in _scsih_io_done()
4450 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid); in _scsih_io_done()
4468 if (_scsih_scsi_direct_io_get(ioc, smid) && in _scsih_io_done()
4471 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_io_done()
4472 ioc->scsi_lookup[smid - 1].scmd = scmd; in _scsih_io_done()
4473 _scsih_scsi_direct_io_set(ioc, smid, 0); in _scsih_io_done()
4474 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_io_done()
4478 mpt2sas_base_put_smid_scsi_io(ioc, smid, in _scsih_io_done()
4494 if (!ioc->is_warpdrive && !_scsih_is_raid(&scmd->device->sdev_gendev) && in _scsih_io_done()
4520 const void *sense_data = mpt2sas_base_get_sense_buffer(ioc, in _scsih_io_done()
4528 _scsih_smart_predicted_fault(ioc, in _scsih_io_done()
4627 if (scmd->result && (ioc->logging_level & MPT_DEBUG_REPLY)) in _scsih_io_done()
4628 _scsih_scsi_ioc_info(ioc , scmd, mpi_reply, smid); in _scsih_io_done()
4649 _scsih_sas_host_refresh(struct MPT2SAS_ADAPTER *ioc) in _scsih_sas_host_refresh() argument
4659 dtmprintk(ioc, printk(MPT2SAS_INFO_FMT in _scsih_sas_host_refresh()
4661 ioc->name, (unsigned long long)ioc->sas_hba.sas_address)); in _scsih_sas_host_refresh()
4663 sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys in _scsih_sas_host_refresh()
4668 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_refresh()
4672 if ((mpt2sas_config_get_sas_iounit_pg0(ioc, &mpi_reply, in _scsih_sas_host_refresh()
4678 for (i = 0; i < ioc->sas_hba.num_phys ; i++) { in _scsih_sas_host_refresh()
4681 ioc->sas_hba.handle = le16_to_cpu(sas_iounit_pg0-> in _scsih_sas_host_refresh()
4683 ioc->sas_hba.phy[i].handle = ioc->sas_hba.handle; in _scsih_sas_host_refresh()
4688 mpt2sas_transport_update_links(ioc, ioc->sas_hba.sas_address, in _scsih_sas_host_refresh()
4704 _scsih_sas_host_add(struct MPT2SAS_ADAPTER *ioc) in _scsih_sas_host_add() argument
4717 mpt2sas_config_get_number_hba_phys(ioc, &ioc->sas_hba.num_phys); in _scsih_sas_host_add()
4718 if (!ioc->sas_hba.num_phys) { in _scsih_sas_host_add()
4720 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4725 sz = offsetof(Mpi2SasIOUnitPage0_t, PhyData) + (ioc->sas_hba.num_phys * in _scsih_sas_host_add()
4730 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4733 if ((mpt2sas_config_get_sas_iounit_pg0(ioc, &mpi_reply, in _scsih_sas_host_add()
4736 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4743 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4748 sz = offsetof(Mpi2SasIOUnitPage1_t, PhyData) + (ioc->sas_hba.num_phys * in _scsih_sas_host_add()
4753 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4756 if ((mpt2sas_config_get_sas_iounit_pg1(ioc, &mpi_reply, in _scsih_sas_host_add()
4759 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4766 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4770 ioc->io_missing_delay = in _scsih_sas_host_add()
4775 ioc->device_missing_delay = (device_missing_delay & in _scsih_sas_host_add()
4778 ioc->device_missing_delay = device_missing_delay & in _scsih_sas_host_add()
4781 ioc->sas_hba.parent_dev = &ioc->shost->shost_gendev; in _scsih_sas_host_add()
4782 ioc->sas_hba.phy = kcalloc(ioc->sas_hba.num_phys, in _scsih_sas_host_add()
4784 if (!ioc->sas_hba.phy) { in _scsih_sas_host_add()
4786 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4789 for (i = 0; i < ioc->sas_hba.num_phys ; i++) { in _scsih_sas_host_add()
4790 if ((mpt2sas_config_get_phy_pg0(ioc, &mpi_reply, &phy_pg0, in _scsih_sas_host_add()
4793 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4800 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4805 ioc->sas_hba.handle = le16_to_cpu(sas_iounit_pg0-> in _scsih_sas_host_add()
4807 ioc->sas_hba.phy[i].handle = ioc->sas_hba.handle; in _scsih_sas_host_add()
4808 ioc->sas_hba.phy[i].phy_id = i; in _scsih_sas_host_add()
4809 mpt2sas_transport_add_host_phy(ioc, &ioc->sas_hba.phy[i], in _scsih_sas_host_add()
4810 phy_pg0, ioc->sas_hba.parent_dev); in _scsih_sas_host_add()
4812 if ((mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_sas_host_add()
4813 MPI2_SAS_DEVICE_PGAD_FORM_HANDLE, ioc->sas_hba.handle))) { in _scsih_sas_host_add()
4815 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_host_add()
4818 ioc->sas_hba.enclosure_handle = in _scsih_sas_host_add()
4820 ioc->sas_hba.sas_address = le64_to_cpu(sas_device_pg0.SASAddress); in _scsih_sas_host_add()
4822 "sas_addr(0x%016llx), phys(%d)\n", ioc->name, ioc->sas_hba.handle, in _scsih_sas_host_add()
4823 (unsigned long long) ioc->sas_hba.sas_address, in _scsih_sas_host_add()
4824 ioc->sas_hba.num_phys) ; in _scsih_sas_host_add()
4826 if (ioc->sas_hba.enclosure_handle) { in _scsih_sas_host_add()
4827 if (!(mpt2sas_config_get_enclosure_pg0(ioc, &mpi_reply, in _scsih_sas_host_add()
4830 ioc->sas_hba.enclosure_handle))) { in _scsih_sas_host_add()
4831 ioc->sas_hba.enclosure_logical_id = in _scsih_sas_host_add()
4851 _scsih_expander_add(struct MPT2SAS_ADAPTER *ioc, u16 handle) in _scsih_expander_add() argument
4869 if (ioc->shost_recovery || ioc->pci_error_recovery) in _scsih_expander_add()
4872 if ((mpt2sas_config_get_expander_pg0(ioc, &mpi_reply, &expander_pg0, in _scsih_expander_add()
4875 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4883 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4889 if (_scsih_get_sas_address(ioc, parent_handle, &sas_address_parent) in _scsih_expander_add()
4892 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4895 if (sas_address_parent != ioc->sas_hba.sas_address) { in _scsih_expander_add()
4896 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_expander_add()
4897 sas_expander = mpt2sas_scsih_expander_find_by_sas_address(ioc, in _scsih_expander_add()
4899 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_expander_add()
4901 rc = _scsih_expander_add(ioc, parent_handle); in _scsih_expander_add()
4907 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_expander_add()
4909 sas_expander = mpt2sas_scsih_expander_find_by_sas_address(ioc, in _scsih_expander_add()
4911 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_expander_add()
4920 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4930 " parent(0x%04x), sas_addr(0x%016llx), phys(%d)\n", ioc->name, in _scsih_expander_add()
4940 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4946 mpt2sas_port = mpt2sas_transport_port_add(ioc, handle, in _scsih_expander_add()
4950 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4957 if ((mpt2sas_config_get_expander_pg1(ioc, &mpi_reply, in _scsih_expander_add()
4960 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4967 if ((mpt2sas_transport_add_expander_phy(ioc, in _scsih_expander_add()
4971 ioc->name, __FILE__, __LINE__, __func__); in _scsih_expander_add()
4978 if (!(mpt2sas_config_get_enclosure_pg0(ioc, &mpi_reply, in _scsih_expander_add()
4986 _scsih_expander_node_add(ioc, sas_expander); in _scsih_expander_add()
4992 mpt2sas_transport_port_remove(ioc, sas_expander->sas_address, in _scsih_expander_add()
5012 _scsih_done(struct MPT2SAS_ADAPTER *ioc, u16 smid, u8 msix_index, u32 reply) in _scsih_done() argument
5016 mpi_reply = mpt2sas_base_get_reply_virt_addr(ioc, reply); in _scsih_done()
5017 if (ioc->scsih_cmds.status == MPT2_CMD_NOT_USED) in _scsih_done()
5019 if (ioc->scsih_cmds.smid != smid) in _scsih_done()
5021 ioc->scsih_cmds.status |= MPT2_CMD_COMPLETE; in _scsih_done()
5023 memcpy(ioc->scsih_cmds.reply, mpi_reply, in _scsih_done()
5025 ioc->scsih_cmds.status |= MPT2_CMD_REPLY_VALID; in _scsih_done()
5027 ioc->scsih_cmds.status &= ~MPT2_CMD_PENDING; in _scsih_done()
5028 complete(&ioc->scsih_cmds.done); in _scsih_done()
5040 mpt2sas_expander_remove(struct MPT2SAS_ADAPTER *ioc, u64 sas_address) in mpt2sas_expander_remove() argument
5045 if (ioc->shost_recovery) in mpt2sas_expander_remove()
5048 spin_lock_irqsave(&ioc->sas_node_lock, flags); in mpt2sas_expander_remove()
5049 sas_expander = mpt2sas_scsih_expander_find_by_sas_address(ioc, in mpt2sas_expander_remove()
5053 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in mpt2sas_expander_remove()
5055 _scsih_expander_node_remove(ioc, sas_expander); in mpt2sas_expander_remove()
5068 _scsih_check_access_status(struct MPT2SAS_ADAPTER *ioc, u64 sas_address, in _scsih_check_access_status() argument
5117 "handle(0x%04x)\n", ioc->name, desc, in _scsih_check_access_status()
5123 _scsih_check_device(struct MPT2SAS_ADAPTER *ioc, u16 handle) in _scsih_check_device() argument
5136 if ((mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_check_device()
5149 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_check_device()
5151 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_check_device()
5156 "handle(0x%04x), no sas_device!!!\n", ioc->name, handle); in _scsih_check_device()
5157 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_check_device()
5174 "handle(0x%04x), flags!!!\n", ioc->name, handle); in _scsih_check_device()
5175 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_check_device()
5180 if (_scsih_check_access_status(ioc, sas_address, handle, in _scsih_check_device()
5182 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_check_device()
5185 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_check_device()
5186 _scsih_ublock_io_device(ioc, sas_address); in _scsih_check_device()
5202 _scsih_add_device(struct MPT2SAS_ADAPTER *ioc, u16 handle, u8 phy_num, u8 is_pd) in _scsih_add_device() argument
5213 if ((mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_add_device()
5216 ioc->name, __FILE__, __LINE__, __func__); in _scsih_add_device()
5224 ioc->name, __FILE__, __LINE__, __func__); in _scsih_add_device()
5234 ioc->name, __FILE__, __LINE__, __func__); in _scsih_add_device()
5236 ioc->name, le16_to_cpu(sas_device_pg0.Flags)); in _scsih_add_device()
5241 if (_scsih_check_access_status(ioc, sas_address, handle, in _scsih_add_device()
5249 ioc->name, __FILE__, __LINE__, __func__); in _scsih_add_device()
5254 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_add_device()
5255 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_add_device()
5257 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_add_device()
5266 ioc->name, __FILE__, __LINE__, __func__); in _scsih_add_device()
5271 if (_scsih_get_sas_address(ioc, le16_to_cpu in _scsih_add_device()
5275 ioc->name, __FILE__, __LINE__, __func__); in _scsih_add_device()
5286 ioc, &mpi_reply, &enclosure_pg0, MPI2_SAS_ENCLOS_PGAD_FORM_HANDLE, in _scsih_add_device()
5294 if (ioc->wait_for_discovery_to_complete) in _scsih_add_device()
5295 _scsih_sas_device_init_add(ioc, sas_device); in _scsih_add_device()
5297 _scsih_sas_device_add(ioc, sas_device); in _scsih_add_device()
5310 _scsih_remove_device(struct MPT2SAS_ADAPTER *ioc, in _scsih_remove_device() argument
5315 if ((ioc->pdev->subsystem_vendor == PCI_VENDOR_ID_IBM) && in _scsih_remove_device()
5317 _scsih_turn_off_pfa_led(ioc, sas_device); in _scsih_remove_device()
5321 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: enter: " in _scsih_remove_device()
5322 "handle(0x%04x), sas_addr(0x%016llx)\n", ioc->name, __func__, in _scsih_remove_device()
5329 _scsih_ublock_io_device(ioc, sas_device->sas_address); in _scsih_remove_device()
5334 if (!ioc->hide_drives) in _scsih_remove_device()
5335 mpt2sas_transport_port_remove(ioc, in _scsih_remove_device()
5340 "(0x%016llx)\n", ioc->name, sas_device->handle, in _scsih_remove_device()
5343 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: exit: " in _scsih_remove_device()
5344 "handle(0x%04x), sas_addr(0x%016llx)\n", ioc->name, __func__, in _scsih_remove_device()
5357 _scsih_device_remove_by_handle(struct MPT2SAS_ADAPTER *ioc, u16 handle) in _scsih_device_remove_by_handle() argument
5362 if (ioc->shost_recovery) in _scsih_device_remove_by_handle()
5365 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_device_remove_by_handle()
5366 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_device_remove_by_handle()
5369 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_device_remove_by_handle()
5371 _scsih_remove_device(ioc, sas_device); in _scsih_device_remove_by_handle()
5382 mpt2sas_device_remove_by_sas_address(struct MPT2SAS_ADAPTER *ioc, in mpt2sas_device_remove_by_sas_address() argument
5388 if (ioc->shost_recovery) in mpt2sas_device_remove_by_sas_address()
5391 spin_lock_irqsave(&ioc->sas_device_lock, flags); in mpt2sas_device_remove_by_sas_address()
5392 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc, in mpt2sas_device_remove_by_sas_address()
5396 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in mpt2sas_device_remove_by_sas_address()
5398 _scsih_remove_device(ioc, sas_device); in mpt2sas_device_remove_by_sas_address()
5408 _scsih_sas_topology_change_event_debug(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_topology_change_event_debug() argument
5437 ioc->name, status_str); in _scsih_sas_topology_change_event_debug()
5488 _scsih_sas_topology_change_event(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_topology_change_event() argument
5504 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_topology_change_event()
5505 _scsih_sas_topology_change_event_debug(ioc, event_data); in _scsih_sas_topology_change_event()
5508 if (ioc->remove_host || ioc->pci_error_recovery) in _scsih_sas_topology_change_event()
5511 if (!ioc->sas_hba.num_phys) in _scsih_sas_topology_change_event()
5512 _scsih_sas_host_add(ioc); in _scsih_sas_topology_change_event()
5514 _scsih_sas_host_refresh(ioc); in _scsih_sas_topology_change_event()
5517 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "ignoring expander " in _scsih_sas_topology_change_event()
5518 "event\n", ioc->name)); in _scsih_sas_topology_change_event()
5526 if (_scsih_expander_add(ioc, parent_handle) != 0) in _scsih_sas_topology_change_event()
5529 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_sas_topology_change_event()
5530 sas_expander = mpt2sas_scsih_expander_find_by_handle(ioc, in _scsih_sas_topology_change_event()
5535 } else if (parent_handle < ioc->sas_hba.num_phys) { in _scsih_sas_topology_change_event()
5536 sas_address = ioc->sas_hba.sas_address; in _scsih_sas_topology_change_event()
5537 max_phys = ioc->sas_hba.num_phys; in _scsih_sas_topology_change_event()
5539 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_sas_topology_change_event()
5542 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_sas_topology_change_event()
5547 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "ignoring " in _scsih_sas_topology_change_event()
5548 "expander event\n", ioc->name)); in _scsih_sas_topology_change_event()
5551 if (ioc->shost_recovery || ioc->remove_host || in _scsih_sas_topology_change_event()
5552 ioc->pci_error_recovery) in _scsih_sas_topology_change_event()
5571 if (ioc->shost_recovery) in _scsih_sas_topology_change_event()
5577 mpt2sas_transport_update_links(ioc, sas_address, in _scsih_sas_topology_change_event()
5583 _scsih_check_device(ioc, handle); in _scsih_sas_topology_change_event()
5587 if (ioc->shost_recovery) in _scsih_sas_topology_change_event()
5590 mpt2sas_transport_update_links(ioc, sas_address, in _scsih_sas_topology_change_event()
5593 _scsih_add_device(ioc, handle, phy_number, 0); in _scsih_sas_topology_change_event()
5597 _scsih_device_remove_by_handle(ioc, handle); in _scsih_sas_topology_change_event()
5605 mpt2sas_expander_remove(ioc, sas_address); in _scsih_sas_topology_change_event()
5618 _scsih_sas_device_status_change_event_debug(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_device_status_change_event_debug() argument
5669 ioc->name, reason_str, le16_to_cpu(event_data->DevHandle), in _scsih_sas_device_status_change_event_debug()
5673 printk(MPT2SAS_INFO_FMT ", ASC(0x%x), ASCQ(0x%x)\n", ioc->name, in _scsih_sas_device_status_change_event_debug()
5688 _scsih_sas_device_status_change_event(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_device_status_change_event() argument
5700 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_device_status_change_event()
5701 _scsih_sas_device_status_change_event_debug(ioc, in _scsih_sas_device_status_change_event()
5708 if ((ioc->facts.HeaderVersion >> 8) < 0xC) in _scsih_sas_device_status_change_event()
5717 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_device_status_change_event()
5719 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_sas_device_status_change_event()
5723 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_status_change_event()
5729 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_status_change_event()
5738 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_device_status_change_event()
5751 _scsih_sas_enclosure_dev_status_change_event_debug(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_enclosure_dev_status_change_event_debug() argument
5770 " number slots(%d)\n", ioc->name, reason_str, in _scsih_sas_enclosure_dev_status_change_event_debug()
5786 _scsih_sas_enclosure_dev_status_change_event(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_enclosure_dev_status_change_event() argument
5790 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_enclosure_dev_status_change_event()
5791 _scsih_sas_enclosure_dev_status_change_event_debug(ioc, in _scsih_sas_enclosure_dev_status_change_event()
5806 _scsih_sas_broadcast_primitive_event(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_broadcast_primitive_event() argument
5826 mutex_lock(&ioc->tm_cmds.mutex); in _scsih_sas_broadcast_primitive_event()
5829 ioc->name, __func__, event_data->PhyNum, in _scsih_sas_broadcast_primitive_event()
5832 _scsih_block_io_all_device(ioc); in _scsih_sas_broadcast_primitive_event()
5834 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5835 mpi_reply = ioc->tm_cmds.reply; in _scsih_sas_broadcast_primitive_event()
5840 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: giving up\n", in _scsih_sas_broadcast_primitive_event()
5841 ioc->name, __func__)); in _scsih_sas_broadcast_primitive_event()
5844 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: %d retry\n", in _scsih_sas_broadcast_primitive_event()
5845 ioc->name, __func__, max_retries - 1)); in _scsih_sas_broadcast_primitive_event()
5849 for (smid = 1; smid <= ioc->scsiio_depth; smid++) { in _scsih_sas_broadcast_primitive_event()
5850 if (ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
5852 scmd = _scsih_scsi_lookup_get(ioc, smid); in _scsih_sas_broadcast_primitive_event()
5872 if (ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
5875 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5876 r = mpt2sas_scsih_issue_tm(ioc, handle, 0, 0, lun, in _scsih_sas_broadcast_primitive_event()
5883 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5892 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5901 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5907 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT in _scsih_sas_broadcast_primitive_event()
5908 "%s: ABORT_TASK: giving up\n", ioc->name, in _scsih_sas_broadcast_primitive_event()
5910 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5914 if (ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
5917 r = mpt2sas_scsih_issue_tm(ioc, handle, sdev->channel, sdev->id, in _scsih_sas_broadcast_primitive_event()
5934 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5937 if (ioc->broadcast_aen_pending) { in _scsih_sas_broadcast_primitive_event()
5938 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: loop back due to" in _scsih_sas_broadcast_primitive_event()
5939 " pending AEN\n", ioc->name, __func__)); in _scsih_sas_broadcast_primitive_event()
5940 ioc->broadcast_aen_pending = 0; in _scsih_sas_broadcast_primitive_event()
5945 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags); in _scsih_sas_broadcast_primitive_event()
5948 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT in _scsih_sas_broadcast_primitive_event()
5950 ioc->name, __func__, query_count, termination_count)); in _scsih_sas_broadcast_primitive_event()
5952 ioc->broadcast_aen_busy = 0; in _scsih_sas_broadcast_primitive_event()
5953 if (!ioc->shost_recovery) in _scsih_sas_broadcast_primitive_event()
5954 _scsih_ublock_io_all_device(ioc); in _scsih_sas_broadcast_primitive_event()
5955 mutex_unlock(&ioc->tm_cmds.mutex); in _scsih_sas_broadcast_primitive_event()
5967 _scsih_sas_discovery_event(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_discovery_event() argument
5975 if (ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) { in _scsih_sas_discovery_event()
5976 printk(MPT2SAS_INFO_FMT "discovery event: (%s)", ioc->name, in _scsih_sas_discovery_event()
5987 !ioc->sas_hba.num_phys) { in _scsih_sas_discovery_event()
5988 if (disable_discovery > 0 && ioc->shost_recovery) { in _scsih_sas_discovery_event()
5990 while (ioc->shost_recovery) in _scsih_sas_discovery_event()
5993 _scsih_sas_host_add(ioc); in _scsih_sas_discovery_event()
6023 _scsih_sas_volume_add(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_volume_add() argument
6032 mpt2sas_config_get_volume_wwid(ioc, handle, &wwid); in _scsih_sas_volume_add()
6035 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_sas_volume_add()
6040 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
6041 raid_device = _scsih_raid_device_find_by_wwid(ioc, wwid); in _scsih_sas_volume_add()
6042 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
6050 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_sas_volume_add()
6055 raid_device->id = ioc->sas_id++; in _scsih_sas_volume_add()
6059 _scsih_raid_device_add(ioc, raid_device); in _scsih_sas_volume_add()
6060 if (!ioc->wait_for_discovery_to_complete) { in _scsih_sas_volume_add()
6061 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_sas_volume_add()
6064 _scsih_raid_device_remove(ioc, raid_device); in _scsih_sas_volume_add()
6066 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
6067 _scsih_determine_boot_device(ioc, raid_device, 1); in _scsih_sas_volume_add()
6068 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_volume_add()
6081 _scsih_sas_volume_delete(struct MPT2SAS_ADAPTER *ioc, u16 handle) in _scsih_sas_volume_delete() argument
6088 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_volume_delete()
6089 raid_device = _scsih_raid_device_find_by_handle(ioc, handle); in _scsih_sas_volume_delete()
6097 "(0x%016llx)\n", ioc->name, raid_device->handle, in _scsih_sas_volume_delete()
6102 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_volume_delete()
6116 _scsih_sas_pd_expose(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_pd_expose() argument
6125 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_pd_expose()
6126 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_sas_pd_expose()
6130 clear_bit(handle, ioc->pd_handles); in _scsih_sas_pd_expose()
6138 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_pd_expose()
6156 _scsih_sas_pd_hide(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_pd_hide() argument
6167 mpt2sas_config_get_volume_handle(ioc, handle, &volume_handle); in _scsih_sas_pd_hide()
6169 mpt2sas_config_get_volume_wwid(ioc, volume_handle, in _scsih_sas_pd_hide()
6172 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_pd_hide()
6173 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_sas_pd_hide()
6175 set_bit(handle, ioc->pd_handles); in _scsih_sas_pd_hide()
6185 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_pd_hide()
6203 _scsih_sas_pd_delete(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_pd_delete() argument
6208 _scsih_device_remove_by_handle(ioc, handle); in _scsih_sas_pd_delete()
6220 _scsih_sas_pd_add(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_pd_add() argument
6232 set_bit(handle, ioc->pd_handles); in _scsih_sas_pd_add()
6234 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_pd_add()
6235 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_sas_pd_add()
6236 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_pd_add()
6240 if ((mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, &sas_device_pg0, in _scsih_sas_pd_add()
6243 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_pd_add()
6251 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_pd_add()
6256 if (!_scsih_get_sas_address(ioc, parent_handle, &sas_address)) in _scsih_sas_pd_add()
6257 mpt2sas_transport_update_links(ioc, sas_address, handle, in _scsih_sas_pd_add()
6260 _scsih_add_device(ioc, handle, 0, 1); in _scsih_sas_pd_add()
6273 _scsih_sas_ir_config_change_event_debug(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_ir_config_change_event_debug() argument
6284 ioc->name, (le32_to_cpu(event_data->Flags) & in _scsih_sas_ir_config_change_event_debug()
6354 _scsih_sas_ir_config_change_event(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_ir_config_change_event() argument
6365 if ((ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_ir_config_change_event()
6366 && !ioc->hide_ir_msg) in _scsih_sas_ir_config_change_event()
6367 _scsih_sas_ir_config_change_event_debug(ioc, event_data); in _scsih_sas_ir_config_change_event()
6371 if (ioc->shost_recovery) in _scsih_sas_ir_config_change_event()
6384 _scsih_sas_volume_add(ioc, element); in _scsih_sas_ir_config_change_event()
6389 _scsih_sas_volume_delete(ioc, in _scsih_sas_ir_config_change_event()
6393 if (!ioc->is_warpdrive) in _scsih_sas_ir_config_change_event()
6394 _scsih_sas_pd_hide(ioc, element); in _scsih_sas_ir_config_change_event()
6397 if (!ioc->is_warpdrive) in _scsih_sas_ir_config_change_event()
6398 _scsih_sas_pd_expose(ioc, element); in _scsih_sas_ir_config_change_event()
6401 if (!ioc->is_warpdrive) in _scsih_sas_ir_config_change_event()
6402 _scsih_sas_pd_add(ioc, element); in _scsih_sas_ir_config_change_event()
6405 if (!ioc->is_warpdrive) in _scsih_sas_ir_config_change_event()
6406 _scsih_sas_pd_delete(ioc, element); in _scsih_sas_ir_config_change_event()
6421 _scsih_sas_ir_volume_event(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_ir_volume_event() argument
6434 if (ioc->shost_recovery) in _scsih_sas_ir_volume_event()
6442 if (!ioc->hide_ir_msg) in _scsih_sas_ir_volume_event()
6443 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: handle(0x%04x), " in _scsih_sas_ir_volume_event()
6444 "old(0x%08x), new(0x%08x)\n", ioc->name, __func__, handle, in _scsih_sas_ir_volume_event()
6450 _scsih_sas_volume_delete(ioc, handle); in _scsih_sas_ir_volume_event()
6457 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_ir_volume_event()
6458 raid_device = _scsih_raid_device_find_by_handle(ioc, handle); in _scsih_sas_ir_volume_event()
6459 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_ir_volume_event()
6464 mpt2sas_config_get_volume_wwid(ioc, handle, &wwid); in _scsih_sas_ir_volume_event()
6467 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_sas_ir_volume_event()
6475 "failure at %s:%d/%s()!\n", ioc->name, in _scsih_sas_ir_volume_event()
6480 raid_device->id = ioc->sas_id++; in _scsih_sas_ir_volume_event()
6484 _scsih_raid_device_add(ioc, raid_device); in _scsih_sas_ir_volume_event()
6485 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_sas_ir_volume_event()
6488 _scsih_raid_device_remove(ioc, raid_device); in _scsih_sas_ir_volume_event()
6506 _scsih_sas_ir_physical_disk_event(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_ir_physical_disk_event() argument
6521 if (ioc->shost_recovery) in _scsih_sas_ir_physical_disk_event()
6530 if (!ioc->hide_ir_msg) in _scsih_sas_ir_physical_disk_event()
6531 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: handle(0x%04x), " in _scsih_sas_ir_physical_disk_event()
6532 "old(0x%08x), new(0x%08x)\n", ioc->name, __func__, handle, in _scsih_sas_ir_physical_disk_event()
6542 if (!ioc->is_warpdrive) in _scsih_sas_ir_physical_disk_event()
6543 set_bit(handle, ioc->pd_handles); in _scsih_sas_ir_physical_disk_event()
6545 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_sas_ir_physical_disk_event()
6546 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_sas_ir_physical_disk_event()
6547 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_sas_ir_physical_disk_event()
6552 if ((mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_sas_ir_physical_disk_event()
6556 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_ir_physical_disk_event()
6564 ioc->name, __FILE__, __LINE__, __func__); in _scsih_sas_ir_physical_disk_event()
6569 if (!_scsih_get_sas_address(ioc, parent_handle, &sas_address)) in _scsih_sas_ir_physical_disk_event()
6570 mpt2sas_transport_update_links(ioc, sas_address, handle, in _scsih_sas_ir_physical_disk_event()
6573 _scsih_add_device(ioc, handle, 0, 1); in _scsih_sas_ir_physical_disk_event()
6595 _scsih_sas_ir_operation_status_event_debug(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_ir_operation_status_event_debug() argument
6623 ioc->name, reason_str, in _scsih_sas_ir_operation_status_event_debug()
6638 _scsih_sas_ir_operation_status_event(struct MPT2SAS_ADAPTER *ioc, in _scsih_sas_ir_operation_status_event() argument
6649 if ((ioc->logging_level & MPT_DEBUG_EVENT_WORK_TASK) in _scsih_sas_ir_operation_status_event()
6650 && !ioc->hide_ir_msg) in _scsih_sas_ir_operation_status_event()
6651 _scsih_sas_ir_operation_status_event_debug(ioc, in _scsih_sas_ir_operation_status_event()
6658 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_sas_ir_operation_status_event()
6660 raid_device = _scsih_raid_device_find_by_handle(ioc, handle); in _scsih_sas_ir_operation_status_event()
6664 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_sas_ir_operation_status_event()
6676 _scsih_prep_device_scan(struct MPT2SAS_ADAPTER *ioc) in _scsih_prep_device_scan() argument
6681 shost_for_each_device(sdev, ioc->shost) { in _scsih_prep_device_scan()
6701 _scsih_mark_responding_sas_device(struct MPT2SAS_ADAPTER *ioc, u64 sas_address, in _scsih_mark_responding_sas_device() argument
6709 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_mark_responding_sas_device()
6710 list_for_each_entry(sas_device, &ioc->sas_device_list, list) { in _scsih_mark_responding_sas_device()
6741 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_mark_responding_sas_device()
6754 _scsih_search_responding_sas_devices(struct MPT2SAS_ADAPTER *ioc) in _scsih_search_responding_sas_devices() argument
6764 printk(MPT2SAS_INFO_FMT "search for end-devices: start\n", ioc->name); in _scsih_search_responding_sas_devices()
6766 if (list_empty(&ioc->sas_device_list)) in _scsih_search_responding_sas_devices()
6770 while (!(mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_search_responding_sas_devices()
6783 _scsih_mark_responding_sas_device(ioc, sas_address, slot, in _scsih_search_responding_sas_devices()
6788 ioc->name); in _scsih_search_responding_sas_devices()
6803 _scsih_mark_responding_raid_device(struct MPT2SAS_ADAPTER *ioc, u64 wwid, in _scsih_mark_responding_raid_device() argument
6811 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
6812 list_for_each_entry(raid_device, &ioc->raid_device_list, list) { in _scsih_mark_responding_raid_device()
6821 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
6830 _scsih_init_warpdrive_properties(ioc, raid_device); in _scsih_mark_responding_raid_device()
6831 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
6833 spin_unlock_irqrestore(&ioc->raid_device_lock, in _scsih_mark_responding_raid_device()
6842 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
6847 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_mark_responding_raid_device()
6860 _scsih_search_responding_raid_devices(struct MPT2SAS_ADAPTER *ioc) in _scsih_search_responding_raid_devices() argument
6870 if (!ioc->ir_firmware) in _scsih_search_responding_raid_devices()
6874 ioc->name); in _scsih_search_responding_raid_devices()
6876 if (list_empty(&ioc->raid_device_list)) in _scsih_search_responding_raid_devices()
6880 while (!(mpt2sas_config_get_raid_volume_pg1(ioc, &mpi_reply, in _scsih_search_responding_raid_devices()
6888 if (mpt2sas_config_get_raid_volume_pg0(ioc, &mpi_reply, in _scsih_search_responding_raid_devices()
6896 _scsih_mark_responding_raid_device(ioc, in _scsih_search_responding_raid_devices()
6901 if (!ioc->is_warpdrive) { in _scsih_search_responding_raid_devices()
6903 memset(ioc->pd_handles, 0, ioc->pd_handles_sz); in _scsih_search_responding_raid_devices()
6904 while (!(mpt2sas_config_get_phys_disk_pg0(ioc, &mpi_reply, in _scsih_search_responding_raid_devices()
6913 set_bit(handle, ioc->pd_handles); in _scsih_search_responding_raid_devices()
6918 "complete\n", ioc->name); in _scsih_search_responding_raid_devices()
6933 _scsih_mark_responding_expander(struct MPT2SAS_ADAPTER *ioc, u64 sas_address, in _scsih_mark_responding_expander() argument
6940 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_mark_responding_expander()
6941 list_for_each_entry(sas_expander, &ioc->sas_expander_list, list) { in _scsih_mark_responding_expander()
6957 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_mark_responding_expander()
6970 _scsih_search_responding_expanders(struct MPT2SAS_ADAPTER *ioc) in _scsih_search_responding_expanders() argument
6978 printk(MPT2SAS_INFO_FMT "search for expanders: start\n", ioc->name); in _scsih_search_responding_expanders()
6980 if (list_empty(&ioc->sas_expander_list)) in _scsih_search_responding_expanders()
6984 while (!(mpt2sas_config_get_expander_pg0(ioc, &mpi_reply, &expander_pg0, in _scsih_search_responding_expanders()
6997 _scsih_mark_responding_expander(ioc, sas_address, handle); in _scsih_search_responding_expanders()
7001 printk(MPT2SAS_INFO_FMT "search for expanders: complete\n", ioc->name); in _scsih_search_responding_expanders()
7011 _scsih_remove_unresponding_sas_devices(struct MPT2SAS_ADAPTER *ioc) in _scsih_remove_unresponding_sas_devices() argument
7020 ioc->name); in _scsih_remove_unresponding_sas_devices()
7024 ioc->name); in _scsih_remove_unresponding_sas_devices()
7026 &ioc->sas_device_list, list) { in _scsih_remove_unresponding_sas_devices()
7028 mpt2sas_device_remove_by_sas_address(ioc, in _scsih_remove_unresponding_sas_devices()
7035 if (ioc->ir_firmware) { in _scsih_remove_unresponding_sas_devices()
7037 "volumes\n", ioc->name); in _scsih_remove_unresponding_sas_devices()
7039 &ioc->raid_device_list, list) { in _scsih_remove_unresponding_sas_devices()
7041 _scsih_sas_volume_delete(ioc, in _scsih_remove_unresponding_sas_devices()
7049 ioc->name); in _scsih_remove_unresponding_sas_devices()
7050 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_remove_unresponding_sas_devices()
7053 &ioc->sas_expander_list, list) { in _scsih_remove_unresponding_sas_devices()
7059 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_remove_unresponding_sas_devices()
7063 _scsih_expander_node_remove(ioc, sas_expander); in _scsih_remove_unresponding_sas_devices()
7066 ioc->name); in _scsih_remove_unresponding_sas_devices()
7068 _scsih_ublock_io_all_device(ioc); in _scsih_remove_unresponding_sas_devices()
7072 _scsih_refresh_expander_links(struct MPT2SAS_ADAPTER *ioc, in _scsih_refresh_expander_links() argument
7080 if ((mpt2sas_config_get_expander_pg1(ioc, &mpi_reply, in _scsih_refresh_expander_links()
7083 ioc->name, __FILE__, __LINE__, __func__); in _scsih_refresh_expander_links()
7087 mpt2sas_transport_update_links(ioc, sas_expander->sas_address, in _scsih_refresh_expander_links()
7100 _scsih_scan_for_devices_after_reset(struct MPT2SAS_ADAPTER *ioc) in _scsih_scan_for_devices_after_reset() argument
7119 printk(MPT2SAS_INFO_FMT "scan devices: start\n", ioc->name); in _scsih_scan_for_devices_after_reset()
7121 _scsih_sas_host_refresh(ioc); in _scsih_scan_for_devices_after_reset()
7124 ioc->name); in _scsih_scan_for_devices_after_reset()
7127 while (!(mpt2sas_config_get_expander_pg0(ioc, &mpi_reply, &expander_pg0, in _scsih_scan_for_devices_after_reset()
7134 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
7139 spin_lock_irqsave(&ioc->sas_node_lock, flags); in _scsih_scan_for_devices_after_reset()
7141 ioc, le64_to_cpu(expander_pg0.SASAddress)); in _scsih_scan_for_devices_after_reset()
7142 spin_unlock_irqrestore(&ioc->sas_node_lock, flags); in _scsih_scan_for_devices_after_reset()
7144 _scsih_refresh_expander_links(ioc, expander_device, in _scsih_scan_for_devices_after_reset()
7149 ioc->name, handle, (unsigned long long) in _scsih_scan_for_devices_after_reset()
7151 _scsih_expander_add(ioc, handle); in _scsih_scan_for_devices_after_reset()
7154 ioc->name, handle, (unsigned long long) in _scsih_scan_for_devices_after_reset()
7160 ioc->name); in _scsih_scan_for_devices_after_reset()
7162 if (!ioc->ir_firmware) in _scsih_scan_for_devices_after_reset()
7165 printk(MPT2SAS_INFO_FMT "\tscan devices phys disk start\n", ioc->name); in _scsih_scan_for_devices_after_reset()
7168 while (!(mpt2sas_config_get_phys_disk_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
7176 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
7182 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_scan_for_devices_after_reset()
7183 sas_device = _scsih_sas_device_find_by_handle(ioc, handle); in _scsih_scan_for_devices_after_reset()
7184 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_scan_for_devices_after_reset()
7187 if (mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
7196 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
7201 if (!_scsih_get_sas_address(ioc, parent_handle, in _scsih_scan_for_devices_after_reset()
7205 ioc->name, handle, (unsigned long long) in _scsih_scan_for_devices_after_reset()
7207 mpt2sas_transport_update_links(ioc, sas_address, in _scsih_scan_for_devices_after_reset()
7210 set_bit(handle, ioc->pd_handles); in _scsih_scan_for_devices_after_reset()
7216 while (_scsih_add_device(ioc, handle, retry_count++, in _scsih_scan_for_devices_after_reset()
7222 ioc->name, handle, (unsigned long long) in _scsih_scan_for_devices_after_reset()
7228 ioc->name); in _scsih_scan_for_devices_after_reset()
7230 printk(MPT2SAS_INFO_FMT "\tscan devices: volumes start\n", ioc->name); in _scsih_scan_for_devices_after_reset()
7233 while (!(mpt2sas_config_get_raid_volume_pg1(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
7240 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
7245 spin_lock_irqsave(&ioc->raid_device_lock, flags); in _scsih_scan_for_devices_after_reset()
7246 raid_device = _scsih_raid_device_find_by_wwid(ioc, in _scsih_scan_for_devices_after_reset()
7248 spin_unlock_irqrestore(&ioc->raid_device_lock, flags); in _scsih_scan_for_devices_after_reset()
7251 if (mpt2sas_config_get_raid_volume_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
7260 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
7271 " handle (0x%04x)\n", ioc->name, in _scsih_scan_for_devices_after_reset()
7273 _scsih_sas_volume_add(ioc, &element); in _scsih_scan_for_devices_after_reset()
7275 " handle (0x%04x)\n", ioc->name, in _scsih_scan_for_devices_after_reset()
7281 ioc->name); in _scsih_scan_for_devices_after_reset()
7286 ioc->name); in _scsih_scan_for_devices_after_reset()
7289 while (!(mpt2sas_config_get_sas_device_pg0(ioc, &mpi_reply, in _scsih_scan_for_devices_after_reset()
7297 ioc->name, ioc_status, in _scsih_scan_for_devices_after_reset()
7305 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_scan_for_devices_after_reset()
7306 sas_device = mpt2sas_scsih_sas_device_find_by_sas_address(ioc, in _scsih_scan_for_devices_after_reset()
7308 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_scan_for_devices_after_reset()
7312 if (!_scsih_get_sas_address(ioc, parent_handle, &sas_address)) { in _scsih_scan_for_devices_after_reset()
7315 ioc->name, handle, (unsigned long long) in _scsih_scan_for_devices_after_reset()
7317 mpt2sas_transport_update_links(ioc, sas_address, handle, in _scsih_scan_for_devices_after_reset()
7324 while (_scsih_add_device(ioc, handle, retry_count++, in _scsih_scan_for_devices_after_reset()
7330 ioc->name, handle, (unsigned long long) in _scsih_scan_for_devices_after_reset()
7336 ioc->name); in _scsih_scan_for_devices_after_reset()
7338 printk(MPT2SAS_INFO_FMT "scan devices: complete\n", ioc->name); in _scsih_scan_for_devices_after_reset()
7355 mpt2sas_scsih_reset_handler(struct MPT2SAS_ADAPTER *ioc, int reset_phase) in mpt2sas_scsih_reset_handler() argument
7359 dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: " in mpt2sas_scsih_reset_handler()
7360 "MPT2_IOC_PRE_RESET\n", ioc->name, __func__)); in mpt2sas_scsih_reset_handler()
7363 dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: " in mpt2sas_scsih_reset_handler()
7364 "MPT2_IOC_AFTER_RESET\n", ioc->name, __func__)); in mpt2sas_scsih_reset_handler()
7365 if (ioc->scsih_cmds.status & MPT2_CMD_PENDING) { in mpt2sas_scsih_reset_handler()
7366 ioc->scsih_cmds.status |= MPT2_CMD_RESET; in mpt2sas_scsih_reset_handler()
7367 mpt2sas_base_free_smid(ioc, ioc->scsih_cmds.smid); in mpt2sas_scsih_reset_handler()
7368 complete(&ioc->scsih_cmds.done); in mpt2sas_scsih_reset_handler()
7370 if (ioc->tm_cmds.status & MPT2_CMD_PENDING) { in mpt2sas_scsih_reset_handler()
7371 ioc->tm_cmds.status |= MPT2_CMD_RESET; in mpt2sas_scsih_reset_handler()
7372 mpt2sas_base_free_smid(ioc, ioc->tm_cmds.smid); in mpt2sas_scsih_reset_handler()
7373 complete(&ioc->tm_cmds.done); in mpt2sas_scsih_reset_handler()
7375 _scsih_fw_event_cleanup_queue(ioc); in mpt2sas_scsih_reset_handler()
7376 _scsih_flush_running_cmds(ioc); in mpt2sas_scsih_reset_handler()
7379 dtmprintk(ioc, printk(MPT2SAS_INFO_FMT "%s: " in mpt2sas_scsih_reset_handler()
7380 "MPT2_IOC_DONE_RESET\n", ioc->name, __func__)); in mpt2sas_scsih_reset_handler()
7381 _scsih_sas_host_refresh(ioc); in mpt2sas_scsih_reset_handler()
7382 _scsih_prep_device_scan(ioc); in mpt2sas_scsih_reset_handler()
7383 _scsih_search_responding_sas_devices(ioc); in mpt2sas_scsih_reset_handler()
7384 _scsih_search_responding_raid_devices(ioc); in mpt2sas_scsih_reset_handler()
7385 _scsih_search_responding_expanders(ioc); in mpt2sas_scsih_reset_handler()
7386 if ((!ioc->is_driver_loading) && !(disable_discovery > 0 && in mpt2sas_scsih_reset_handler()
7387 !ioc->sas_hba.num_phys)) { in mpt2sas_scsih_reset_handler()
7388 _scsih_prep_device_scan(ioc); in mpt2sas_scsih_reset_handler()
7389 _scsih_search_responding_sas_devices(ioc); in mpt2sas_scsih_reset_handler()
7390 _scsih_search_responding_raid_devices(ioc); in mpt2sas_scsih_reset_handler()
7391 _scsih_search_responding_expanders(ioc); in mpt2sas_scsih_reset_handler()
7392 _scsih_error_recovery_delete_devices(ioc); in mpt2sas_scsih_reset_handler()
7411 struct MPT2SAS_ADAPTER *ioc = fw_event->ioc; in _firmware_event_work() local
7414 if (ioc->remove_host || in _firmware_event_work()
7415 ioc->pci_error_recovery) { in _firmware_event_work()
7416 _scsih_fw_event_free(ioc, fw_event); in _firmware_event_work()
7422 while (scsi_host_in_recovery(ioc->shost) || ioc->shost_recovery) in _firmware_event_work()
7424 _scsih_remove_unresponding_sas_devices(ioc); in _firmware_event_work()
7425 _scsih_scan_for_devices_after_reset(ioc); in _firmware_event_work()
7428 ioc->start_scan = 0; in _firmware_event_work()
7431 mpt2sas_base_update_missing_delay(ioc, missing_delay[0], in _firmware_event_work()
7434 dewtprintk(ioc, printk(MPT2SAS_INFO_FMT "port enable: complete " in _firmware_event_work()
7435 "from worker thread\n", ioc->name)); in _firmware_event_work()
7438 _scsih_turn_on_pfa_led(ioc, fw_event->device_handle); in _firmware_event_work()
7441 _scsih_sas_topology_change_event(ioc, fw_event); in _firmware_event_work()
7444 _scsih_sas_device_status_change_event(ioc, in _firmware_event_work()
7448 _scsih_sas_discovery_event(ioc, in _firmware_event_work()
7452 _scsih_sas_broadcast_primitive_event(ioc, in _firmware_event_work()
7456 _scsih_sas_enclosure_dev_status_change_event(ioc, in _firmware_event_work()
7460 _scsih_sas_ir_config_change_event(ioc, fw_event); in _firmware_event_work()
7463 _scsih_sas_ir_volume_event(ioc, fw_event); in _firmware_event_work()
7466 _scsih_sas_ir_physical_disk_event(ioc, fw_event); in _firmware_event_work()
7469 _scsih_sas_ir_operation_status_event(ioc, fw_event); in _firmware_event_work()
7472 _scsih_fw_event_free(ioc, fw_event); in _firmware_event_work()
7488 mpt2sas_scsih_event_callback(struct MPT2SAS_ADAPTER *ioc, u8 msix_index, in mpt2sas_scsih_event_callback() argument
7497 if (ioc->remove_host || ioc->pci_error_recovery) in mpt2sas_scsih_event_callback()
7500 mpi_reply = mpt2sas_base_get_reply_virt_addr(ioc, reply); in mpt2sas_scsih_event_callback()
7504 ioc->name, __FILE__, __LINE__, __func__); in mpt2sas_scsih_event_callback()
7522 if (ioc->broadcast_aen_busy) { in mpt2sas_scsih_event_callback()
7523 ioc->broadcast_aen_pending++; in mpt2sas_scsih_event_callback()
7526 ioc->broadcast_aen_busy = 1; in mpt2sas_scsih_event_callback()
7531 _scsih_check_topo_delete_events(ioc, in mpt2sas_scsih_event_callback()
7536 _scsih_check_ir_config_unhide_events(ioc, in mpt2sas_scsih_event_callback()
7541 _scsih_check_volume_delete_events(ioc, in mpt2sas_scsih_event_callback()
7550 if (!ioc->is_warpdrive) in mpt2sas_scsih_event_callback()
7566 "additional details.\n", ioc->name); in mpt2sas_scsih_event_callback()
7572 "for additional details.\n", ioc->name); in mpt2sas_scsih_event_callback()
7579 "for additional details.\n", ioc->name); in mpt2sas_scsih_event_callback()
7586 ioc->name); in mpt2sas_scsih_event_callback()
7600 _scsih_temp_threshold_events(ioc, in mpt2sas_scsih_event_callback()
7613 ioc->name, __FILE__, __LINE__, __func__); in mpt2sas_scsih_event_callback()
7618 fw_event->ioc = ioc; in mpt2sas_scsih_event_callback()
7622 _scsih_fw_event_add(ioc, fw_event); in mpt2sas_scsih_event_callback()
7668 _scsih_expander_node_remove(struct MPT2SAS_ADAPTER *ioc, in _scsih_expander_node_remove() argument
7676 if (ioc->shost_recovery) in _scsih_expander_node_remove()
7680 mpt2sas_device_remove_by_sas_address(ioc, in _scsih_expander_node_remove()
7686 mpt2sas_expander_remove(ioc, in _scsih_expander_node_remove()
7690 mpt2sas_transport_port_remove(ioc, sas_expander->sas_address, in _scsih_expander_node_remove()
7694 "(0x%04x), sas_addr(0x%016llx)\n", ioc->name, in _scsih_expander_node_remove()
7712 _scsih_ir_shutdown(struct MPT2SAS_ADAPTER *ioc) in _scsih_ir_shutdown() argument
7719 if (!ioc->ir_firmware) in _scsih_ir_shutdown()
7722 mutex_lock(&ioc->scsih_cmds.mutex); in _scsih_ir_shutdown()
7724 if (ioc->scsih_cmds.status != MPT2_CMD_NOT_USED) { in _scsih_ir_shutdown()
7726 ioc->name, __func__); in _scsih_ir_shutdown()
7729 ioc->scsih_cmds.status = MPT2_CMD_PENDING; in _scsih_ir_shutdown()
7731 smid = mpt2sas_base_get_smid(ioc, ioc->scsih_cb_idx); in _scsih_ir_shutdown()
7734 ioc->name, __func__); in _scsih_ir_shutdown()
7735 ioc->scsih_cmds.status = MPT2_CMD_NOT_USED; in _scsih_ir_shutdown()
7739 mpi_request = mpt2sas_base_get_msg_frame(ioc, smid); in _scsih_ir_shutdown()
7740 ioc->scsih_cmds.smid = smid; in _scsih_ir_shutdown()
7746 if (!ioc->hide_ir_msg) in _scsih_ir_shutdown()
7747 printk(MPT2SAS_INFO_FMT "IR shutdown (sending)\n", ioc->name); in _scsih_ir_shutdown()
7748 init_completion(&ioc->scsih_cmds.done); in _scsih_ir_shutdown()
7749 mpt2sas_base_put_smid_default(ioc, smid); in _scsih_ir_shutdown()
7750 wait_for_completion_timeout(&ioc->scsih_cmds.done, 10*HZ); in _scsih_ir_shutdown()
7752 if (!(ioc->scsih_cmds.status & MPT2_CMD_COMPLETE)) { in _scsih_ir_shutdown()
7754 ioc->name, __func__); in _scsih_ir_shutdown()
7758 if (ioc->scsih_cmds.status & MPT2_CMD_REPLY_VALID) { in _scsih_ir_shutdown()
7759 mpi_reply = ioc->scsih_cmds.reply; in _scsih_ir_shutdown()
7761 if (!ioc->hide_ir_msg) in _scsih_ir_shutdown()
7764 ioc->name, le16_to_cpu(mpi_reply->IOCStatus), in _scsih_ir_shutdown()
7769 ioc->scsih_cmds.status = MPT2_CMD_NOT_USED; in _scsih_ir_shutdown()
7770 mutex_unlock(&ioc->scsih_cmds.mutex); in _scsih_ir_shutdown()
7783 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_shutdown() local
7787 ioc->remove_host = 1; in _scsih_shutdown()
7788 _scsih_fw_event_cleanup_queue(ioc); in _scsih_shutdown()
7790 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_shutdown()
7791 wq = ioc->firmware_event_thread; in _scsih_shutdown()
7792 ioc->firmware_event_thread = NULL; in _scsih_shutdown()
7793 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_shutdown()
7797 _scsih_ir_shutdown(ioc); in _scsih_shutdown()
7798 mpt2sas_base_detach(ioc); in _scsih_shutdown()
7812 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_remove() local
7819 ioc->remove_host = 1; in _scsih_remove()
7820 _scsih_fw_event_cleanup_queue(ioc); in _scsih_remove()
7822 spin_lock_irqsave(&ioc->fw_event_lock, flags); in _scsih_remove()
7823 wq = ioc->firmware_event_thread; in _scsih_remove()
7824 ioc->firmware_event_thread = NULL; in _scsih_remove()
7825 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in _scsih_remove()
7830 _scsih_ir_shutdown(ioc); in _scsih_remove()
7831 list_for_each_entry_safe(raid_device, next, &ioc->raid_device_list, in _scsih_remove()
7840 "(0x%016llx)\n", ioc->name, raid_device->handle, in _scsih_remove()
7842 _scsih_raid_device_remove(ioc, raid_device); in _scsih_remove()
7847 &ioc->sas_hba.sas_port_list, port_list) { in _scsih_remove()
7850 mpt2sas_device_remove_by_sas_address(ioc, in _scsih_remove()
7856 mpt2sas_expander_remove(ioc, in _scsih_remove()
7861 if (ioc->sas_hba.num_phys) { in _scsih_remove()
7862 kfree(ioc->sas_hba.phy); in _scsih_remove()
7863 ioc->sas_hba.phy = NULL; in _scsih_remove()
7864 ioc->sas_hba.num_phys = 0; in _scsih_remove()
7869 mpt2sas_base_detach(ioc); in _scsih_remove()
7870 list_del(&ioc->list); in _scsih_remove()
7883 _scsih_probe_boot_devices(struct MPT2SAS_ADAPTER *ioc) in _scsih_probe_boot_devices() argument
7896 if (!ioc->bios_pg3.BiosVersion) in _scsih_probe_boot_devices()
7901 if (ioc->req_boot_device.device) { in _scsih_probe_boot_devices()
7902 device = ioc->req_boot_device.device; in _scsih_probe_boot_devices()
7903 is_raid = ioc->req_boot_device.is_raid; in _scsih_probe_boot_devices()
7904 } else if (ioc->req_alt_boot_device.device) { in _scsih_probe_boot_devices()
7905 device = ioc->req_alt_boot_device.device; in _scsih_probe_boot_devices()
7906 is_raid = ioc->req_alt_boot_device.is_raid; in _scsih_probe_boot_devices()
7907 } else if (ioc->current_boot_device.device) { in _scsih_probe_boot_devices()
7908 device = ioc->current_boot_device.device; in _scsih_probe_boot_devices()
7909 is_raid = ioc->current_boot_device.is_raid; in _scsih_probe_boot_devices()
7917 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_probe_boot_devices()
7920 _scsih_raid_device_remove(ioc, raid_device); in _scsih_probe_boot_devices()
7922 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_probe_boot_devices()
7927 list_move_tail(&sas_device->list, &ioc->sas_device_list); in _scsih_probe_boot_devices()
7928 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_probe_boot_devices()
7930 if (ioc->hide_drives) in _scsih_probe_boot_devices()
7932 if (!mpt2sas_transport_port_add(ioc, sas_device->handle, in _scsih_probe_boot_devices()
7934 _scsih_sas_device_remove(ioc, sas_device); in _scsih_probe_boot_devices()
7936 if (!ioc->is_driver_loading) { in _scsih_probe_boot_devices()
7937 mpt2sas_transport_port_remove(ioc, in _scsih_probe_boot_devices()
7940 _scsih_sas_device_remove(ioc, sas_device); in _scsih_probe_boot_devices()
7953 _scsih_probe_raid(struct MPT2SAS_ADAPTER *ioc) in _scsih_probe_raid() argument
7959 &ioc->raid_device_list, list) { in _scsih_probe_raid()
7962 rc = scsi_add_device(ioc->shost, RAID_CHANNEL, in _scsih_probe_raid()
7965 _scsih_raid_device_remove(ioc, raid_device); in _scsih_probe_raid()
7976 _scsih_probe_sas(struct MPT2SAS_ADAPTER *ioc) in _scsih_probe_sas() argument
7982 list_for_each_entry_safe(sas_device, next, &ioc->sas_device_init_list, in _scsih_probe_sas()
7985 if (ioc->hide_drives) in _scsih_probe_sas()
7988 if (!mpt2sas_transport_port_add(ioc, sas_device->handle, in _scsih_probe_sas()
7994 if (!ioc->is_driver_loading) { in _scsih_probe_sas()
7995 mpt2sas_transport_port_remove(ioc, in _scsih_probe_sas()
8003 spin_lock_irqsave(&ioc->sas_device_lock, flags); in _scsih_probe_sas()
8004 list_move_tail(&sas_device->list, &ioc->sas_device_list); in _scsih_probe_sas()
8005 spin_unlock_irqrestore(&ioc->sas_device_lock, flags); in _scsih_probe_sas()
8016 _scsih_probe_devices(struct MPT2SAS_ADAPTER *ioc) in _scsih_probe_devices() argument
8020 if (!(ioc->facts.ProtocolFlags & MPI2_IOCFACTS_PROTOCOL_SCSI_INITIATOR)) in _scsih_probe_devices()
8023 _scsih_probe_boot_devices(ioc); in _scsih_probe_devices()
8025 if (ioc->ir_firmware) { in _scsih_probe_devices()
8027 le16_to_cpu(ioc->ioc_pg8.IRVolumeMappingFlags) & in _scsih_probe_devices()
8031 _scsih_probe_raid(ioc); in _scsih_probe_devices()
8032 _scsih_probe_sas(ioc); in _scsih_probe_devices()
8034 _scsih_probe_sas(ioc); in _scsih_probe_devices()
8035 _scsih_probe_raid(ioc); in _scsih_probe_devices()
8038 _scsih_probe_sas(ioc); in _scsih_probe_devices()
8053 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_scan_start() local
8057 mpt2sas_enable_diag_buffer(ioc, diag_buffer_enable); in _scsih_scan_start()
8062 ioc->start_scan = 1; in _scsih_scan_start()
8063 rc = mpt2sas_port_enable(ioc); in _scsih_scan_start()
8066 printk(MPT2SAS_INFO_FMT "port enable: FAILED\n", ioc->name); in _scsih_scan_start()
8081 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_scan_finished() local
8084 ioc->is_driver_loading = 0; in _scsih_scan_finished()
8085 ioc->wait_for_discovery_to_complete = 0; in _scsih_scan_finished()
8090 ioc->base_cmds.status = MPT2_CMD_NOT_USED; in _scsih_scan_finished()
8092 "(timeout=300s)\n", ioc->name); in _scsih_scan_finished()
8093 ioc->is_driver_loading = 0; in _scsih_scan_finished()
8097 if (ioc->start_scan) in _scsih_scan_finished()
8100 if (ioc->start_scan_failed) { in _scsih_scan_finished()
8102 "(ioc_status=0x%08x)\n", ioc->name, ioc->start_scan_failed); in _scsih_scan_finished()
8103 ioc->is_driver_loading = 0; in _scsih_scan_finished()
8104 ioc->wait_for_discovery_to_complete = 0; in _scsih_scan_finished()
8105 ioc->remove_host = 1; in _scsih_scan_finished()
8109 printk(MPT2SAS_INFO_FMT "port enable: SUCCESS\n", ioc->name); in _scsih_scan_finished()
8110 ioc->base_cmds.status = MPT2_CMD_NOT_USED; in _scsih_scan_finished()
8112 if (ioc->wait_for_discovery_to_complete) { in _scsih_scan_finished()
8113 ioc->wait_for_discovery_to_complete = 0; in _scsih_scan_finished()
8114 _scsih_probe_devices(ioc); in _scsih_scan_finished()
8116 mpt2sas_base_start_watchdog(ioc); in _scsih_scan_finished()
8117 ioc->is_driver_loading = 0; in _scsih_scan_finished()
8132 struct MPT2SAS_ADAPTER *ioc; in _scsih_probe() local
8142 ioc = shost_priv(shost); in _scsih_probe()
8143 memset(ioc, 0, sizeof(struct MPT2SAS_ADAPTER)); in _scsih_probe()
8144 INIT_LIST_HEAD(&ioc->list); in _scsih_probe()
8145 list_add_tail(&ioc->list, &mpt2sas_ioc_list); in _scsih_probe()
8146 ioc->shost = shost; in _scsih_probe()
8147 ioc->id = mpt_ids++; in _scsih_probe()
8148 sprintf(ioc->name, "%s%d", MPT2SAS_DRIVER_NAME, ioc->id); in _scsih_probe()
8149 ioc->pdev = pdev; in _scsih_probe()
8151 ioc->is_warpdrive = 1; in _scsih_probe()
8152 ioc->hide_ir_msg = 1; in _scsih_probe()
8154 ioc->mfg_pg10_hide_flag = MFG_PAGE10_EXPOSE_ALL_DISKS; in _scsih_probe()
8155 ioc->scsi_io_cb_idx = scsi_io_cb_idx; in _scsih_probe()
8156 ioc->tm_cb_idx = tm_cb_idx; in _scsih_probe()
8157 ioc->ctl_cb_idx = ctl_cb_idx; in _scsih_probe()
8158 ioc->base_cb_idx = base_cb_idx; in _scsih_probe()
8159 ioc->port_enable_cb_idx = port_enable_cb_idx; in _scsih_probe()
8160 ioc->transport_cb_idx = transport_cb_idx; in _scsih_probe()
8161 ioc->scsih_cb_idx = scsih_cb_idx; in _scsih_probe()
8162 ioc->config_cb_idx = config_cb_idx; in _scsih_probe()
8163 ioc->tm_tr_cb_idx = tm_tr_cb_idx; in _scsih_probe()
8164 ioc->tm_tr_volume_cb_idx = tm_tr_volume_cb_idx; in _scsih_probe()
8165 ioc->tm_sas_control_cb_idx = tm_sas_control_cb_idx; in _scsih_probe()
8166 ioc->logging_level = logging_level; in _scsih_probe()
8167 ioc->schedule_dead_ioc_flush_running_cmds = &_scsih_flush_running_cmds; in _scsih_probe()
8169 mutex_init(&ioc->reset_in_progress_mutex); in _scsih_probe()
8170 spin_lock_init(&ioc->ioc_reset_in_progress_lock); in _scsih_probe()
8171 spin_lock_init(&ioc->scsi_lookup_lock); in _scsih_probe()
8172 spin_lock_init(&ioc->sas_device_lock); in _scsih_probe()
8173 spin_lock_init(&ioc->sas_node_lock); in _scsih_probe()
8174 spin_lock_init(&ioc->fw_event_lock); in _scsih_probe()
8175 spin_lock_init(&ioc->raid_device_lock); in _scsih_probe()
8177 INIT_LIST_HEAD(&ioc->sas_device_list); in _scsih_probe()
8178 INIT_LIST_HEAD(&ioc->sas_device_init_list); in _scsih_probe()
8179 INIT_LIST_HEAD(&ioc->sas_expander_list); in _scsih_probe()
8180 INIT_LIST_HEAD(&ioc->fw_event_list); in _scsih_probe()
8181 INIT_LIST_HEAD(&ioc->raid_device_list); in _scsih_probe()
8182 INIT_LIST_HEAD(&ioc->sas_hba.sas_port_list); in _scsih_probe()
8183 INIT_LIST_HEAD(&ioc->delayed_tr_list); in _scsih_probe()
8184 INIT_LIST_HEAD(&ioc->delayed_tr_volume_list); in _scsih_probe()
8185 INIT_LIST_HEAD(&ioc->reply_queue_list); in _scsih_probe()
8191 shost->unique_id = ioc->id; in _scsih_probe()
8198 "value of 64.\n", ioc->name, max_sectors); in _scsih_probe()
8203 "default value of 32767.\n", ioc->name, in _scsih_probe()
8208 "set to %d\n", ioc->name, shost->max_sectors); in _scsih_probe()
8223 snprintf(ioc->firmware_event_name, sizeof(ioc->firmware_event_name), in _scsih_probe()
8224 "fw_event%d", ioc->id); in _scsih_probe()
8225 ioc->firmware_event_thread = create_singlethread_workqueue( in _scsih_probe()
8226 ioc->firmware_event_name); in _scsih_probe()
8227 if (!ioc->firmware_event_thread) { in _scsih_probe()
8229 ioc->name, __FILE__, __LINE__, __func__); in _scsih_probe()
8234 ioc->is_driver_loading = 1; in _scsih_probe()
8235 if ((mpt2sas_base_attach(ioc))) { in _scsih_probe()
8237 ioc->name, __FILE__, __LINE__, __func__); in _scsih_probe()
8242 if (ioc->is_warpdrive) { in _scsih_probe()
8243 if (ioc->mfg_pg10_hide_flag == MFG_PAGE10_EXPOSE_ALL_DISKS) in _scsih_probe()
8244 ioc->hide_drives = 0; in _scsih_probe()
8245 else if (ioc->mfg_pg10_hide_flag == MFG_PAGE10_HIDE_ALL_DISKS) in _scsih_probe()
8246 ioc->hide_drives = 1; in _scsih_probe()
8248 if (_scsih_get_num_volumes(ioc)) in _scsih_probe()
8249 ioc->hide_drives = 1; in _scsih_probe()
8251 ioc->hide_drives = 0; in _scsih_probe()
8254 ioc->hide_drives = 0; in _scsih_probe()
8259 ioc->name, __FILE__, __LINE__, __func__); in _scsih_probe()
8268 mpt2sas_base_detach(ioc); in _scsih_probe()
8270 destroy_workqueue(ioc->firmware_event_thread); in _scsih_probe()
8272 list_del(&ioc->list); in _scsih_probe()
8289 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_suspend() local
8292 mpt2sas_base_stop_watchdog(ioc); in _scsih_suspend()
8294 _scsih_ir_shutdown(ioc); in _scsih_suspend()
8297 "operating state [D%d]\n", ioc->name, pdev, in _scsih_suspend()
8300 mpt2sas_base_free_resources(ioc); in _scsih_suspend()
8316 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_resume() local
8321 "operating state [D%d]\n", ioc->name, pdev, in _scsih_resume()
8327 ioc->pdev = pdev; in _scsih_resume()
8328 r = mpt2sas_base_map_resources(ioc); in _scsih_resume()
8332 mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP, SOFT_RESET); in _scsih_resume()
8334 mpt2sas_base_start_watchdog(ioc); in _scsih_resume()
8353 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_pci_error_detected() local
8356 ioc->name, state); in _scsih_pci_error_detected()
8363 ioc->pci_error_recovery = 1; in _scsih_pci_error_detected()
8364 scsi_block_requests(ioc->shost); in _scsih_pci_error_detected()
8365 mpt2sas_base_stop_watchdog(ioc); in _scsih_pci_error_detected()
8366 mpt2sas_base_free_resources(ioc); in _scsih_pci_error_detected()
8370 ioc->pci_error_recovery = 1; in _scsih_pci_error_detected()
8371 mpt2sas_base_stop_watchdog(ioc); in _scsih_pci_error_detected()
8372 _scsih_flush_running_cmds(ioc); in _scsih_pci_error_detected()
8390 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_pci_slot_reset() local
8394 ioc->name); in _scsih_pci_slot_reset()
8396 ioc->pci_error_recovery = 0; in _scsih_pci_slot_reset()
8397 ioc->pdev = pdev; in _scsih_pci_slot_reset()
8399 rc = mpt2sas_base_map_resources(ioc); in _scsih_pci_slot_reset()
8404 rc = mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP, in _scsih_pci_slot_reset()
8407 printk(MPT2SAS_WARN_FMT "hard reset: %s\n", ioc->name, in _scsih_pci_slot_reset()
8428 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_pci_resume() local
8430 printk(MPT2SAS_INFO_FMT "PCI error: resume callback!!\n", ioc->name); in _scsih_pci_resume()
8433 mpt2sas_base_start_watchdog(ioc); in _scsih_pci_resume()
8434 scsi_unblock_requests(ioc->shost); in _scsih_pci_resume()
8445 struct MPT2SAS_ADAPTER *ioc = shost_priv(shost); in _scsih_pci_mmio_enabled() local
8448 ioc->name); in _scsih_pci_mmio_enabled()