Lines Matching refs:ioc
112 static inline void mptsas_set_rphy(MPT_ADAPTER *ioc,
115 (MPT_ADAPTER *ioc, u64 sas_address);
116 static int mptsas_sas_device_pg0(MPT_ADAPTER *ioc,
118 static int mptsas_sas_enclosure_pg0(MPT_ADAPTER *ioc,
120 static int mptsas_add_end_device(MPT_ADAPTER *ioc,
122 static void mptsas_del_end_device(MPT_ADAPTER *ioc,
126 (MPT_ADAPTER *ioc, u64 sas_address);
127 static void mptsas_expander_delete(MPT_ADAPTER *ioc,
130 static void mptsas_not_responding_devices(MPT_ADAPTER *ioc);
131 static void mptsas_scan_sas_topology(MPT_ADAPTER *ioc);
134 static void mptsas_volume_delete(MPT_ADAPTER *ioc, u8 id);
135 void mptsas_schedule_target_reset(void *ioc);
137 static void mptsas_print_phy_data(MPT_ADAPTER *ioc, in mptsas_print_phy_data() argument
140 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_print_phy_data()
141 "---- IO UNIT PAGE 0 ------------\n", ioc->name)); in mptsas_print_phy_data()
142 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Handle=0x%X\n", in mptsas_print_phy_data()
143 ioc->name, le16_to_cpu(phy_data->AttachedDeviceHandle))); in mptsas_print_phy_data()
144 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Controller Handle=0x%X\n", in mptsas_print_phy_data()
145 ioc->name, le16_to_cpu(phy_data->ControllerDevHandle))); in mptsas_print_phy_data()
146 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Port=0x%X\n", in mptsas_print_phy_data()
147 ioc->name, phy_data->Port)); in mptsas_print_phy_data()
148 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Port Flags=0x%X\n", in mptsas_print_phy_data()
149 ioc->name, phy_data->PortFlags)); in mptsas_print_phy_data()
150 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "PHY Flags=0x%X\n", in mptsas_print_phy_data()
151 ioc->name, phy_data->PhyFlags)); in mptsas_print_phy_data()
152 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Negotiated Link Rate=0x%X\n", in mptsas_print_phy_data()
153 ioc->name, phy_data->NegotiatedLinkRate)); in mptsas_print_phy_data()
154 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_print_phy_data()
155 "Controller PHY Device Info=0x%X\n", ioc->name, in mptsas_print_phy_data()
157 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "DiscoveryStatus=0x%X\n\n", in mptsas_print_phy_data()
158 ioc->name, le32_to_cpu(phy_data->DiscoveryStatus))); in mptsas_print_phy_data()
161 static void mptsas_print_phy_pg0(MPT_ADAPTER *ioc, SasPhyPage0_t *pg0) in mptsas_print_phy_pg0() argument
167 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_print_phy_pg0()
168 "---- SAS PHY PAGE 0 ------------\n", ioc->name)); in mptsas_print_phy_pg0()
169 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_print_phy_pg0()
170 "Attached Device Handle=0x%X\n", ioc->name, in mptsas_print_phy_pg0()
172 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "SAS Address=0x%llX\n", in mptsas_print_phy_pg0()
173 ioc->name, (unsigned long long)le64_to_cpu(sas_address))); in mptsas_print_phy_pg0()
174 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_print_phy_pg0()
175 "Attached PHY Identifier=0x%X\n", ioc->name, in mptsas_print_phy_pg0()
177 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Attached Device Info=0x%X\n", in mptsas_print_phy_pg0()
178 ioc->name, le32_to_cpu(pg0->AttachedDeviceInfo))); in mptsas_print_phy_pg0()
179 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Programmed Link Rate=0x%X\n", in mptsas_print_phy_pg0()
180 ioc->name, pg0->ProgrammedLinkRate)); in mptsas_print_phy_pg0()
181 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Change Count=0x%X\n", in mptsas_print_phy_pg0()
182 ioc->name, pg0->ChangeCount)); in mptsas_print_phy_pg0()
183 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "PHY Info=0x%X\n\n", in mptsas_print_phy_pg0()
184 ioc->name, le32_to_cpu(pg0->PhyInfo))); in mptsas_print_phy_pg0()
187 static void mptsas_print_phy_pg1(MPT_ADAPTER *ioc, SasPhyPage1_t *pg1) in mptsas_print_phy_pg1() argument
189 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_print_phy_pg1()
190 "---- SAS PHY PAGE 1 ------------\n", ioc->name)); in mptsas_print_phy_pg1()
191 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Invalid Dword Count=0x%x\n", in mptsas_print_phy_pg1()
192 ioc->name, pg1->InvalidDwordCount)); in mptsas_print_phy_pg1()
193 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_print_phy_pg1()
194 "Running Disparity Error Count=0x%x\n", ioc->name, in mptsas_print_phy_pg1()
196 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_print_phy_pg1()
197 "Loss Dword Synch Count=0x%x\n", ioc->name, in mptsas_print_phy_pg1()
199 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_print_phy_pg1()
200 "PHY Reset Problem Count=0x%x\n\n", ioc->name, in mptsas_print_phy_pg1()
204 static void mptsas_print_device_pg0(MPT_ADAPTER *ioc, SasDevicePage0_t *pg0) in mptsas_print_device_pg0() argument
210 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_print_device_pg0()
211 "---- SAS DEVICE PAGE 0 ---------\n", ioc->name)); in mptsas_print_device_pg0()
212 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Handle=0x%X\n", in mptsas_print_device_pg0()
213 ioc->name, le16_to_cpu(pg0->DevHandle))); in mptsas_print_device_pg0()
214 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Parent Handle=0x%X\n", in mptsas_print_device_pg0()
215 ioc->name, le16_to_cpu(pg0->ParentDevHandle))); in mptsas_print_device_pg0()
216 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Enclosure Handle=0x%X\n", in mptsas_print_device_pg0()
217 ioc->name, le16_to_cpu(pg0->EnclosureHandle))); in mptsas_print_device_pg0()
218 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Slot=0x%X\n", in mptsas_print_device_pg0()
219 ioc->name, le16_to_cpu(pg0->Slot))); in mptsas_print_device_pg0()
220 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "SAS Address=0x%llX\n", in mptsas_print_device_pg0()
221 ioc->name, (unsigned long long)le64_to_cpu(sas_address))); in mptsas_print_device_pg0()
222 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Target ID=0x%X\n", in mptsas_print_device_pg0()
223 ioc->name, pg0->TargetID)); in mptsas_print_device_pg0()
224 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Bus=0x%X\n", in mptsas_print_device_pg0()
225 ioc->name, pg0->Bus)); in mptsas_print_device_pg0()
226 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Parent Phy Num=0x%X\n", in mptsas_print_device_pg0()
227 ioc->name, pg0->PhyNum)); in mptsas_print_device_pg0()
228 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Access Status=0x%X\n", in mptsas_print_device_pg0()
229 ioc->name, le16_to_cpu(pg0->AccessStatus))); in mptsas_print_device_pg0()
230 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Device Info=0x%X\n", in mptsas_print_device_pg0()
231 ioc->name, le32_to_cpu(pg0->DeviceInfo))); in mptsas_print_device_pg0()
232 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Flags=0x%X\n", in mptsas_print_device_pg0()
233 ioc->name, le16_to_cpu(pg0->Flags))); in mptsas_print_device_pg0()
234 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Physical Port=0x%X\n\n", in mptsas_print_device_pg0()
235 ioc->name, pg0->PhysicalPort)); in mptsas_print_device_pg0()
238 static void mptsas_print_expander_pg1(MPT_ADAPTER *ioc, SasExpanderPage1_t *pg1) in mptsas_print_expander_pg1() argument
240 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_print_expander_pg1()
241 "---- SAS EXPANDER PAGE 1 ------------\n", ioc->name)); in mptsas_print_expander_pg1()
242 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Physical Port=0x%X\n", in mptsas_print_expander_pg1()
243 ioc->name, pg1->PhysicalPort)); in mptsas_print_expander_pg1()
244 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "PHY Identifier=0x%X\n", in mptsas_print_expander_pg1()
245 ioc->name, pg1->PhyIdentifier)); in mptsas_print_expander_pg1()
246 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Negotiated Link Rate=0x%X\n", in mptsas_print_expander_pg1()
247 ioc->name, pg1->NegotiatedLinkRate)); in mptsas_print_expander_pg1()
248 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Programmed Link Rate=0x%X\n", in mptsas_print_expander_pg1()
249 ioc->name, pg1->ProgrammedLinkRate)); in mptsas_print_expander_pg1()
250 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Hardware Link Rate=0x%X\n", in mptsas_print_expander_pg1()
251 ioc->name, pg1->HwLinkRate)); in mptsas_print_expander_pg1()
252 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Owner Device Handle=0x%X\n", in mptsas_print_expander_pg1()
253 ioc->name, le16_to_cpu(pg1->OwnerDevHandle))); in mptsas_print_expander_pg1()
254 dsasprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_print_expander_pg1()
255 "Attached Device Handle=0x%X\n\n", ioc->name, in mptsas_print_expander_pg1()
261 mptsas_fw_event_off(MPT_ADAPTER *ioc) in mptsas_fw_event_off() argument
265 spin_lock_irqsave(&ioc->fw_event_lock, flags); in mptsas_fw_event_off()
266 ioc->fw_events_off = 1; in mptsas_fw_event_off()
267 ioc->sas_discovery_quiesce_io = 0; in mptsas_fw_event_off()
268 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in mptsas_fw_event_off()
274 mptsas_fw_event_on(MPT_ADAPTER *ioc) in mptsas_fw_event_on() argument
278 spin_lock_irqsave(&ioc->fw_event_lock, flags); in mptsas_fw_event_on()
279 ioc->fw_events_off = 0; in mptsas_fw_event_on()
280 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in mptsas_fw_event_on()
285 mptsas_add_fw_event(MPT_ADAPTER *ioc, struct fw_event_work *fw_event, in mptsas_add_fw_event() argument
290 spin_lock_irqsave(&ioc->fw_event_lock, flags); in mptsas_add_fw_event()
291 list_add_tail(&fw_event->list, &ioc->fw_event_list); in mptsas_add_fw_event()
293 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: add (fw_event=0x%p)" in mptsas_add_fw_event()
294 "on cpuid %d\n", ioc->name, __func__, in mptsas_add_fw_event()
296 queue_delayed_work_on(smp_processor_id(), ioc->fw_event_q, in mptsas_add_fw_event()
298 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in mptsas_add_fw_event()
303 mptsas_requeue_fw_event(MPT_ADAPTER *ioc, struct fw_event_work *fw_event, in mptsas_requeue_fw_event() argument
307 spin_lock_irqsave(&ioc->fw_event_lock, flags); in mptsas_requeue_fw_event()
308 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: reschedule task " in mptsas_requeue_fw_event()
309 "(fw_event=0x%p)on cpuid %d\n", ioc->name, __func__, in mptsas_requeue_fw_event()
312 queue_delayed_work_on(smp_processor_id(), ioc->fw_event_q, in mptsas_requeue_fw_event()
314 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in mptsas_requeue_fw_event()
319 mptsas_free_fw_event(MPT_ADAPTER *ioc, struct fw_event_work *fw_event) in mptsas_free_fw_event() argument
323 spin_lock_irqsave(&ioc->fw_event_lock, flags); in mptsas_free_fw_event()
324 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: kfree (fw_event=0x%p)\n", in mptsas_free_fw_event()
325 ioc->name, __func__, fw_event)); in mptsas_free_fw_event()
328 spin_unlock_irqrestore(&ioc->fw_event_lock, flags); in mptsas_free_fw_event()
334 mptsas_cleanup_fw_event_q(MPT_ADAPTER *ioc) in mptsas_cleanup_fw_event_q() argument
338 MPT_SCSI_HOST *hd = shost_priv(ioc->sh); in mptsas_cleanup_fw_event_q()
344 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_cleanup_fw_event_q()
346 ioc->name, __func__, in mptsas_cleanup_fw_event_q()
353 if (list_empty(&ioc->fw_event_list) || in mptsas_cleanup_fw_event_q()
354 !ioc->fw_event_q || in_interrupt()) in mptsas_cleanup_fw_event_q()
357 list_for_each_entry_safe(fw_event, next, &ioc->fw_event_list, list) { in mptsas_cleanup_fw_event_q()
359 mptsas_free_fw_event(ioc, fw_event); in mptsas_cleanup_fw_event_q()
367 return ((MPT_SCSI_HOST *)shost->hostdata)->ioc; in phy_to_ioc()
373 return ((MPT_SCSI_HOST *)shost->hostdata)->ioc; in rphy_to_ioc()
382 mptsas_find_portinfo_by_handle(MPT_ADAPTER *ioc, u16 handle) in mptsas_find_portinfo_by_handle() argument
387 list_for_each_entry(port_info, &ioc->sas_topology, list) in mptsas_find_portinfo_by_handle()
406 mptsas_find_portinfo_by_sas_address(MPT_ADAPTER *ioc, u64 sas_address) in mptsas_find_portinfo_by_sas_address() argument
411 if (sas_address >= ioc->hba_port_sas_addr && in mptsas_find_portinfo_by_sas_address()
412 sas_address < (ioc->hba_port_sas_addr + in mptsas_find_portinfo_by_sas_address()
413 ioc->hba_port_num_phy)) in mptsas_find_portinfo_by_sas_address()
414 return ioc->hba_port_info; in mptsas_find_portinfo_by_sas_address()
416 mutex_lock(&ioc->sas_topology_mutex); in mptsas_find_portinfo_by_sas_address()
417 list_for_each_entry(port_info, &ioc->sas_topology, list) in mptsas_find_portinfo_by_sas_address()
425 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_find_portinfo_by_sas_address()
451 mptsas_port_delete(MPT_ADAPTER *ioc, struct mptsas_portinfo_details * port_details) in mptsas_port_delete() argument
463 dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: [%p]: num_phys=%02d " in mptsas_port_delete()
464 "bitmask=0x%016llX\n", ioc->name, __func__, port_details, in mptsas_port_delete()
472 mptsas_set_rphy(ioc, phy_info, NULL); in mptsas_port_delete()
488 mptsas_set_rphy(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, struct sas_rphy *rphy) in mptsas_set_rphy() argument
492 dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT "sas_rphy_add: rphy=%p\n", in mptsas_set_rphy()
493 ioc->name, rphy)); in mptsas_set_rphy()
497 dsaswideprintk(ioc, dev_printk(KERN_DEBUG, in mptsas_set_rphy()
498 &rphy->dev, MYIOC_s_FMT "add:", ioc->name)); in mptsas_set_rphy()
499 dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT "rphy=%p release=%p\n", in mptsas_set_rphy()
500 ioc->name, rphy, rphy->dev.release)); in mptsas_set_rphy()
514 mptsas_set_port(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, struct sas_port *port) in mptsas_set_port() argument
520 dsaswideprintk(ioc, dev_printk(KERN_DEBUG, in mptsas_set_port()
521 &port->dev, MYIOC_s_FMT "add:", ioc->name)); in mptsas_set_port()
522 dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT "port=%p release=%p\n", in mptsas_set_port()
523 ioc->name, port, port->dev.release)); in mptsas_set_port()
554 mptsas_add_device_component(MPT_ADAPTER *ioc, u8 channel, u8 id, in mptsas_add_device_component() argument
565 mutex_lock(&ioc->sas_device_info_mutex); in mptsas_add_device_component()
566 list_for_each_entry_safe(sas_info, next, &ioc->sas_device_info_list, in mptsas_add_device_component()
592 list_add_tail(&sas_info->list, &ioc->sas_device_info_list); in mptsas_add_device_component()
597 shost_for_each_device(sdev, ioc->sh) { in mptsas_add_device_component()
607 mutex_unlock(&ioc->sas_device_info_mutex); in mptsas_add_device_component()
619 mptsas_add_device_component_by_fw(MPT_ADAPTER *ioc, u8 channel, u8 id) in mptsas_add_device_component_by_fw() argument
625 rc = mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_add_device_component_by_fw()
633 mptsas_sas_enclosure_pg0(ioc, &enclosure_info, in mptsas_add_device_component_by_fw()
638 mptsas_add_device_component(ioc, sas_device.channel, in mptsas_add_device_component_by_fw()
651 mptsas_add_device_component_starget_ir(MPT_ADAPTER *ioc, in mptsas_add_device_component_starget_ir() argument
671 if (mpt_config(ioc, &cfg) != 0) in mptsas_add_device_component_starget_ir()
677 buffer = pci_alloc_consistent(ioc->pcidev, hdr.PageLength * 4, in mptsas_add_device_component_starget_ir()
686 if (mpt_config(ioc, &cfg) != 0) in mptsas_add_device_component_starget_ir()
697 if (mpt_raid_phys_disk_pg0(ioc, in mptsas_add_device_component_starget_ir()
701 mptsas_add_device_component_by_fw(ioc, phys_disk.PhysDiskBus, in mptsas_add_device_component_starget_ir()
704 mutex_lock(&ioc->sas_device_info_mutex); in mptsas_add_device_component_starget_ir()
705 list_for_each_entry(sas_info, &ioc->sas_device_info_list, in mptsas_add_device_component_starget_ir()
714 mutex_unlock(&ioc->sas_device_info_mutex); in mptsas_add_device_component_starget_ir()
721 mutex_lock(&ioc->sas_device_info_mutex); in mptsas_add_device_component_starget_ir()
722 list_for_each_entry_safe(sas_info, next, &ioc->sas_device_info_list, in mptsas_add_device_component_starget_ir()
738 list_add_tail(&sas_info->list, &ioc->sas_device_info_list); in mptsas_add_device_component_starget_ir()
740 mutex_unlock(&ioc->sas_device_info_mutex); in mptsas_add_device_component_starget_ir()
744 pci_free_consistent(ioc->pcidev, hdr.PageLength * 4, buffer, in mptsas_add_device_component_starget_ir()
755 mptsas_add_device_component_starget(MPT_ADAPTER *ioc, in mptsas_add_device_component_starget() argument
765 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_add_device_component_starget()
771 mptsas_sas_enclosure_pg0(ioc, &enclosure_info, in mptsas_add_device_component_starget()
776 mptsas_add_device_component(ioc, phy_info->attached.channel, in mptsas_add_device_component_starget()
790 mptsas_del_device_component_by_os(MPT_ADAPTER *ioc, u8 channel, u8 id) in mptsas_del_device_component_by_os() argument
797 list_for_each_entry_safe(sas_info, next, &ioc->sas_device_info_list, in mptsas_del_device_component_by_os()
810 mptsas_del_device_components(MPT_ADAPTER *ioc) in mptsas_del_device_components() argument
814 mutex_lock(&ioc->sas_device_info_mutex); in mptsas_del_device_components()
815 list_for_each_entry_safe(sas_info, next, &ioc->sas_device_info_list, in mptsas_del_device_components()
820 mutex_unlock(&ioc->sas_device_info_mutex); in mptsas_del_device_components()
831 mptsas_setup_wide_ports(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info) in mptsas_setup_wide_ports() argument
838 mutex_lock(&ioc->sas_topology_mutex); in mptsas_setup_wide_ports()
853 dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_setup_wide_ports()
855 ioc->name, __func__, port_details, i)); in mptsas_setup_wide_ports()
860 devtprintk(ioc, dev_printk(KERN_DEBUG, in mptsas_setup_wide_ports()
862 "delete phy %d, phy-obj (0x%p)\n", ioc->name, in mptsas_setup_wide_ports()
875 dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT "phy_id=%d sas_address=0x%018llX\n", in mptsas_setup_wide_ports()
876 ioc->name, i, (unsigned long long)sas_address)); in mptsas_setup_wide_ports()
894 dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT "\t\tForming port\n\t\t" in mptsas_setup_wide_ports()
896 ioc->name, i, (unsigned long long)sas_address)); in mptsas_setup_wide_ports()
911 dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_setup_wide_ports()
913 ioc->name, j, (unsigned long long) in mptsas_setup_wide_ports()
945 dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_setup_wide_ports()
947 "bitmask=0x%016llX\n", ioc->name, __func__, in mptsas_setup_wide_ports()
950 dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT "\t\tport = %p rphy=%p\n", in mptsas_setup_wide_ports()
951 ioc->name, port_details->port, port_details->rphy)); in mptsas_setup_wide_ports()
953 dsaswideprintk(ioc, printk("\n")); in mptsas_setup_wide_ports()
954 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_setup_wide_ports()
966 mptsas_find_vtarget(MPT_ADAPTER *ioc, u8 channel, u8 id) in mptsas_find_vtarget() argument
972 shost_for_each_device(sdev, ioc->sh) { in mptsas_find_vtarget()
989 mptsas_queue_device_delete(MPT_ADAPTER *ioc, in mptsas_queue_device_delete() argument
999 ioc->name, __func__, __LINE__); in mptsas_queue_device_delete()
1005 fw_event->ioc = ioc; in mptsas_queue_device_delete()
1006 mptsas_add_fw_event(ioc, fw_event, msecs_to_jiffies(1)); in mptsas_queue_device_delete()
1010 mptsas_queue_rescan(MPT_ADAPTER *ioc) in mptsas_queue_rescan() argument
1017 ioc->name, __func__, __LINE__); in mptsas_queue_rescan()
1021 fw_event->ioc = ioc; in mptsas_queue_rescan()
1022 mptsas_add_fw_event(ioc, fw_event, msecs_to_jiffies(1)); in mptsas_queue_rescan()
1040 mptsas_target_reset(MPT_ADAPTER *ioc, u8 channel, u8 id) in mptsas_target_reset() argument
1044 if (mpt_set_taskmgmt_in_progress_flag(ioc) != 0) in mptsas_target_reset()
1048 mf = mpt_get_msg_frame(mptsasDeviceResetCtx, ioc); in mptsas_target_reset()
1050 dfailprintk(ioc, printk(MYIOC_s_WARN_FMT in mptsas_target_reset()
1051 "%s, no msg frames @%d!!\n", ioc->name, in mptsas_target_reset()
1056 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "TaskMgmt request (mf=%p)\n", in mptsas_target_reset()
1057 ioc->name, mf)); in mptsas_target_reset()
1069 DBG_DUMP_TM_REQUEST_FRAME(ioc, (u32 *)mf); in mptsas_target_reset()
1071 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_target_reset()
1073 ioc->name, MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET, channel, id)); in mptsas_target_reset()
1075 mpt_put_msg_frame_hi_pri(mptsasDeviceResetCtx, ioc, mf); in mptsas_target_reset()
1081 mpt_clear_taskmgmt_in_progress_flag(ioc); in mptsas_target_reset()
1110 mptsas_target_reset_queue(MPT_ADAPTER *ioc, in mptsas_target_reset_queue() argument
1113 MPT_SCSI_HOST *hd = shost_priv(ioc->sh); in mptsas_target_reset_queue()
1121 vtarget = mptsas_find_vtarget(ioc, channel, id); in mptsas_target_reset_queue()
1130 dfailprintk(ioc, printk(MYIOC_s_WARN_FMT in mptsas_target_reset_queue()
1132 ioc->name, __func__, __LINE__)); in mptsas_target_reset_queue()
1142 if (mptsas_target_reset(ioc, channel, id)) { in mptsas_target_reset_queue()
1159 MPT_ADAPTER *ioc = (MPT_ADAPTER *)(iocp); in mptsas_schedule_target_reset() local
1160 MPT_SCSI_HOST *hd = shost_priv(ioc->sh); in mptsas_schedule_target_reset()
1179 if (mptsas_target_reset(ioc, channel, id)) in mptsas_schedule_target_reset()
1194 mptsas_taskmgmt_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr) in mptsas_taskmgmt_complete() argument
1196 MPT_SCSI_HOST *hd = shost_priv(ioc->sh); in mptsas_taskmgmt_complete()
1202 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "TaskMgmt completed: " in mptsas_taskmgmt_complete()
1203 "(mf = %p, mr = %p)\n", ioc->name, mf, mr)); in mptsas_taskmgmt_complete()
1209 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_taskmgmt_complete()
1213 "term_cmnds = %d\n", ioc->name, in mptsas_taskmgmt_complete()
1222 mptscsih_taskmgmt_response_code(ioc, in mptsas_taskmgmt_complete()
1228 ioc->taskmgmt_cmds.status |= MPT_MGMT_STATUS_COMMAND_GOOD; in mptsas_taskmgmt_complete()
1229 ioc->taskmgmt_cmds.status |= MPT_MGMT_STATUS_RF_VALID; in mptsas_taskmgmt_complete()
1230 memcpy(ioc->taskmgmt_cmds.reply, mr, in mptsas_taskmgmt_complete()
1232 if (ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_PENDING) { in mptsas_taskmgmt_complete()
1233 ioc->taskmgmt_cmds.status &= ~MPT_MGMT_STATUS_PENDING; in mptsas_taskmgmt_complete()
1234 complete(&ioc->taskmgmt_cmds.done); in mptsas_taskmgmt_complete()
1240 mpt_clear_taskmgmt_in_progress_flag(ioc); in mptsas_taskmgmt_complete()
1248 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_taskmgmt_complete()
1250 ioc->name, jiffies_to_msecs(jiffies - in mptsas_taskmgmt_complete()
1261 if (mptsas_target_reset(ioc, channel, id)) in mptsas_taskmgmt_complete()
1270 if (!ioc->fw_events_off) in mptsas_taskmgmt_complete()
1271 mptsas_queue_device_delete(ioc, in mptsas_taskmgmt_complete()
1275 ioc->schedule_target_reset(ioc); in mptsas_taskmgmt_complete()
1288 mptsas_ioc_reset(MPT_ADAPTER *ioc, int reset_phase) in mptsas_ioc_reset() argument
1293 rc = mptscsih_ioc_reset(ioc, reset_phase); in mptsas_ioc_reset()
1294 if ((ioc->bus_type != SAS) || (!rc)) in mptsas_ioc_reset()
1297 hd = shost_priv(ioc->sh); in mptsas_ioc_reset()
1298 if (!hd->ioc) in mptsas_ioc_reset()
1303 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_ioc_reset()
1304 "%s: MPT_IOC_SETUP_RESET\n", ioc->name, __func__)); in mptsas_ioc_reset()
1305 mptsas_fw_event_off(ioc); in mptsas_ioc_reset()
1308 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_ioc_reset()
1309 "%s: MPT_IOC_PRE_RESET\n", ioc->name, __func__)); in mptsas_ioc_reset()
1312 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_ioc_reset()
1313 "%s: MPT_IOC_POST_RESET\n", ioc->name, __func__)); in mptsas_ioc_reset()
1314 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_PENDING) { in mptsas_ioc_reset()
1315 ioc->sas_mgmt.status |= MPT_MGMT_STATUS_DID_IOCRESET; in mptsas_ioc_reset()
1316 complete(&ioc->sas_mgmt.done); in mptsas_ioc_reset()
1318 mptsas_cleanup_fw_event_q(ioc); in mptsas_ioc_reset()
1319 mptsas_queue_rescan(ioc); in mptsas_ioc_reset()
1344 mptsas_sas_enclosure_pg0(MPT_ADAPTER *ioc, struct mptsas_enclosure *enclosure, in mptsas_sas_enclosure_pg0() argument
1367 error = mpt_config(ioc, &cfg); in mptsas_sas_enclosure_pg0()
1375 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_enclosure_pg0()
1385 error = mpt_config(ioc, &cfg); in mptsas_sas_enclosure_pg0()
1402 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_enclosure_pg0()
1417 mptsas_add_end_device(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info) in mptsas_add_end_device() argument
1426 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_add_end_device()
1427 "%s: exit at line=%d\n", ioc->name, in mptsas_add_end_device()
1435 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_add_end_device()
1436 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_add_end_device()
1443 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_add_end_device()
1444 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_add_end_device()
1460 " phy %d, sas_addr 0x%llx\n", ioc->name, ds, in mptsas_add_end_device()
1468 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_add_end_device()
1469 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_add_end_device()
1476 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_add_end_device()
1477 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_add_end_device()
1482 mptsas_set_rphy(ioc, phy_info, rphy); in mptsas_add_end_device()
1493 mptsas_del_end_device(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info) in mptsas_del_end_device() argument
1511 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_del_end_device()
1512 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_del_end_device()
1518 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_del_end_device()
1519 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_del_end_device()
1542 "sas_addr 0x%llx\n", ioc->name, ds, phy_info->attached.channel, in mptsas_del_end_device()
1548 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_del_end_device()
1549 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_del_end_device()
1563 ioc->name, phy_info_parent->phy_id, in mptsas_del_end_device()
1569 "delete port %d, sas_addr (0x%llx)\n", ioc->name, in mptsas_del_end_device()
1572 mptsas_set_port(ioc, phy_info, NULL); in mptsas_del_end_device()
1573 mptsas_port_delete(ioc, phy_info->port_details); in mptsas_del_end_device()
1577 mptsas_refreshing_device_handles(MPT_ADAPTER *ioc, in mptsas_refreshing_device_handles() argument
1584 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_refreshing_device_handles()
1591 mutex_lock(&ioc->sas_topology_mutex); in mptsas_refreshing_device_handles()
1606 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_refreshing_device_handles()
1622 MPT_ADAPTER *ioc = fw_event->ioc; in mptsas_firmware_event_work() local
1626 if (ioc->in_rescan) { in mptsas_firmware_event_work()
1627 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_firmware_event_work()
1629 ioc->name, __func__)); in mptsas_firmware_event_work()
1632 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: rescan after " in mptsas_firmware_event_work()
1633 "reset\n", ioc->name, __func__)); in mptsas_firmware_event_work()
1634 ioc->in_rescan = 1; in mptsas_firmware_event_work()
1635 mptsas_not_responding_devices(ioc); in mptsas_firmware_event_work()
1636 mptsas_scan_sas_topology(ioc); in mptsas_firmware_event_work()
1637 ioc->in_rescan = 0; in mptsas_firmware_event_work()
1638 mptsas_free_fw_event(ioc, fw_event); in mptsas_firmware_event_work()
1639 mptsas_fw_event_on(ioc); in mptsas_firmware_event_work()
1644 if (ioc->fw_events_off) { in mptsas_firmware_event_work()
1645 mptsas_free_fw_event(ioc, fw_event); in mptsas_firmware_event_work()
1649 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: fw_event=(0x%p), " in mptsas_firmware_event_work()
1650 "event = (0x%02x)\n", ioc->name, __func__, fw_event, in mptsas_firmware_event_work()
1664 mptbase_sas_persist_operation(ioc, in mptsas_firmware_event_work()
1666 mptsas_free_fw_event(ioc, fw_event); in mptsas_firmware_event_work()
1690 MPT_ADAPTER *ioc = hd->ioc; in mptsas_slave_configure() local
1703 mptsas_add_device_component_starget_ir(ioc, scsi_target(sdev)); in mptsas_slave_configure()
1709 mptsas_add_device_component_starget(ioc, scsi_target(sdev)); in mptsas_slave_configure()
1725 MPT_ADAPTER *ioc = hd->ioc; in mptsas_target_alloc() local
1732 vtarget->ioc_id = ioc->id; in mptsas_target_alloc()
1741 if (!ioc->raid_data.pIocPg2) { in mptsas_target_alloc()
1745 for (i = 0; i < ioc->raid_data.pIocPg2->NumActiveVolumes; i++) { in mptsas_target_alloc()
1746 if (id == ioc->raid_data.pIocPg2-> in mptsas_target_alloc()
1748 channel = ioc->raid_data.pIocPg2-> in mptsas_target_alloc()
1757 mutex_lock(&ioc->sas_topology_mutex); in mptsas_target_alloc()
1758 list_for_each_entry(p, &ioc->sas_topology, list) { in mptsas_target_alloc()
1770 if (mptscsih_is_phys_disk(ioc, channel, id)) { in mptsas_target_alloc()
1771 id = mptscsih_raid_id_to_num(ioc, in mptsas_target_alloc()
1777 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_target_alloc()
1781 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_target_alloc()
1801 MPT_ADAPTER *ioc = hd->ioc; in mptsas_target_destroy() local
1809 mptsas_del_device_component_by_os(ioc, starget->channel, in mptsas_target_destroy()
1817 list_for_each_entry(p, &ioc->sas_topology, list) { in mptsas_target_destroy()
1825 "sas_addr 0x%llx\n", ioc->name, in mptsas_target_destroy()
1852 MPT_ADAPTER *ioc = hd->ioc; in mptsas_slave_alloc() local
1857 ioc->name, sizeof(VirtDevice)); in mptsas_slave_alloc()
1867 mutex_lock(&ioc->sas_topology_mutex); in mptsas_slave_alloc()
1868 list_for_each_entry(p, &ioc->sas_topology, list) { in mptsas_slave_alloc()
1877 if (mptscsih_is_phys_disk(ioc, in mptsas_slave_alloc()
1881 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_slave_alloc()
1885 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_slave_alloc()
1900 MPT_ADAPTER *ioc; in mptsas_qcmd() local
1910 ioc = hd->ioc; in mptsas_qcmd()
1912 if (ioc->sas_discovery_quiesce_io) in mptsas_qcmd()
1915 if (ioc->debug_level & MPT_DEBUG_SCSI) in mptsas_qcmd()
1931 MPT_ADAPTER *ioc; in mptsas_eh_timed_out() local
1942 ioc = hd->ioc; in mptsas_eh_timed_out()
1943 if (ioc->bus_type != SAS) { in mptsas_eh_timed_out()
1952 if (ioc->ioc_reset_in_progress) { in mptsas_eh_timed_out()
1953 dtmprintk(ioc, printk(MYIOC_s_WARN_FMT ": %s: ioc is in reset," in mptsas_eh_timed_out()
1955 ioc->name, __func__, sc)); in mptsas_eh_timed_out()
1961 dtmprintk(ioc, printk(MYIOC_s_WARN_FMT ": %s: target removed " in mptsas_eh_timed_out()
1963 ioc->name, __func__, sc)); in mptsas_eh_timed_out()
2002 MPT_ADAPTER *ioc = phy_to_ioc(phy); in mptsas_get_linkerrors() local
2028 error = mpt_config(ioc, &cfg); in mptsas_get_linkerrors()
2034 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_get_linkerrors()
2042 error = mpt_config(ioc, &cfg); in mptsas_get_linkerrors()
2046 mptsas_print_phy_pg1(ioc, buffer); in mptsas_get_linkerrors()
2057 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_get_linkerrors()
2062 static int mptsas_mgmt_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, in mptsas_mgmt_done() argument
2065 ioc->sas_mgmt.status |= MPT_MGMT_STATUS_COMMAND_GOOD; in mptsas_mgmt_done()
2067 ioc->sas_mgmt.status |= MPT_MGMT_STATUS_RF_VALID; in mptsas_mgmt_done()
2068 memcpy(ioc->sas_mgmt.reply, reply, in mptsas_mgmt_done()
2069 min(ioc->reply_sz, 4 * reply->u.reply.MsgLength)); in mptsas_mgmt_done()
2072 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_PENDING) { in mptsas_mgmt_done()
2073 ioc->sas_mgmt.status &= ~MPT_MGMT_STATUS_PENDING; in mptsas_mgmt_done()
2074 complete(&ioc->sas_mgmt.done); in mptsas_mgmt_done()
2082 MPT_ADAPTER *ioc = phy_to_ioc(phy); in mptsas_phy_reset() local
2098 if (mutex_lock_interruptible(&ioc->sas_mgmt.mutex)) in mptsas_phy_reset()
2101 mf = mpt_get_msg_frame(mptsasMgmtCtx, ioc); in mptsas_phy_reset()
2116 INITIALIZE_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_phy_reset()
2117 mpt_put_msg_frame(mptsasMgmtCtx, ioc, mf); in mptsas_phy_reset()
2119 timeleft = wait_for_completion_timeout(&ioc->sas_mgmt.done, in mptsas_phy_reset()
2121 if (!(ioc->sas_mgmt.status & MPT_MGMT_STATUS_COMMAND_GOOD)) { in mptsas_phy_reset()
2123 mpt_free_msg_frame(ioc, mf); in mptsas_phy_reset()
2124 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_DID_IOCRESET) in mptsas_phy_reset()
2127 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP); in mptsas_phy_reset()
2132 if ((ioc->sas_mgmt.status & in mptsas_phy_reset()
2139 reply = (SasIoUnitControlReply_t *)ioc->sas_mgmt.reply; in mptsas_phy_reset()
2142 ioc->name, __func__, reply->IOCStatus, reply->IOCLogInfo); in mptsas_phy_reset()
2150 CLEAR_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_phy_reset()
2151 mutex_unlock(&ioc->sas_mgmt.mutex); in mptsas_phy_reset()
2159 MPT_ADAPTER *ioc = rphy_to_ioc(rphy); in mptsas_get_enclosure_identifier() local
2165 mutex_lock(&ioc->sas_topology_mutex); in mptsas_get_enclosure_identifier()
2166 list_for_each_entry(p, &ioc->sas_topology, list) { in mptsas_get_enclosure_identifier()
2176 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_get_enclosure_identifier()
2180 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_get_enclosure_identifier()
2182 error = mptsas_sas_enclosure_pg0(ioc, &enclosure_info, in mptsas_get_enclosure_identifier()
2193 MPT_ADAPTER *ioc = rphy_to_ioc(rphy); in mptsas_get_bay_identifier() local
2197 mutex_lock(&ioc->sas_topology_mutex); in mptsas_get_bay_identifier()
2198 list_for_each_entry(p, &ioc->sas_topology, list) { in mptsas_get_bay_identifier()
2209 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_get_bay_identifier()
2216 MPT_ADAPTER *ioc = ((MPT_SCSI_HOST *) shost->hostdata)->ioc; in mptsas_smp_handler() local
2230 ioc->name, __func__); in mptsas_smp_handler()
2238 ioc->name, __func__, blk_rq_bytes(req), blk_rq_bytes(rsp)); in mptsas_smp_handler()
2242 ret = mutex_lock_interruptible(&ioc->sas_mgmt.mutex); in mptsas_smp_handler()
2246 mf = mpt_get_msg_frame(mptsasMgmtCtx, ioc); in mptsas_smp_handler()
2263 mutex_lock(&ioc->sas_topology_mutex); in mptsas_smp_handler()
2264 port_info = ioc->hba_port_info; in mptsas_smp_handler()
2268 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_smp_handler()
2283 dma_addr_out = pci_map_single(ioc->pcidev, bio_data(req->bio), in mptsas_smp_handler()
2287 ioc->add_sge(psge, flagsLength, dma_addr_out); in mptsas_smp_handler()
2288 psge += ioc->SGE_size; in mptsas_smp_handler()
2298 dma_addr_in = pci_map_single(ioc->pcidev, bio_data(rsp->bio), in mptsas_smp_handler()
2302 ioc->add_sge(psge, flagsLength, dma_addr_in); in mptsas_smp_handler()
2304 INITIALIZE_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_smp_handler()
2305 mpt_put_msg_frame(mptsasMgmtCtx, ioc, mf); in mptsas_smp_handler()
2307 timeleft = wait_for_completion_timeout(&ioc->sas_mgmt.done, 10 * HZ); in mptsas_smp_handler()
2308 if (!(ioc->sas_mgmt.status & MPT_MGMT_STATUS_COMMAND_GOOD)) { in mptsas_smp_handler()
2310 mpt_free_msg_frame(ioc, mf); in mptsas_smp_handler()
2312 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_DID_IOCRESET) in mptsas_smp_handler()
2315 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP); in mptsas_smp_handler()
2320 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_RF_VALID) { in mptsas_smp_handler()
2323 smprep = (SmpPassthroughReply_t *)ioc->sas_mgmt.reply; in mptsas_smp_handler()
2331 ioc->name, __func__); in mptsas_smp_handler()
2336 pci_unmap_single(ioc->pcidev, dma_addr_out, blk_rq_bytes(req), in mptsas_smp_handler()
2339 pci_unmap_single(ioc->pcidev, dma_addr_in, blk_rq_bytes(rsp), in mptsas_smp_handler()
2343 mpt_free_msg_frame(ioc, mf); in mptsas_smp_handler()
2345 CLEAR_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_smp_handler()
2346 mutex_unlock(&ioc->sas_mgmt.mutex); in mptsas_smp_handler()
2362 mptsas_sas_io_unit_pg0(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info) in mptsas_sas_io_unit_pg0() argument
2385 error = mpt_config(ioc, &cfg); in mptsas_sas_io_unit_pg0()
2393 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_io_unit_pg0()
2403 error = mpt_config(ioc, &cfg); in mptsas_sas_io_unit_pg0()
2415 ioc->nvdata_version_persistent = in mptsas_sas_io_unit_pg0()
2417 ioc->nvdata_version_default = in mptsas_sas_io_unit_pg0()
2421 mptsas_print_phy_data(ioc, &buffer->PhyData[i]); in mptsas_sas_io_unit_pg0()
2433 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_io_unit_pg0()
2440 mptsas_sas_io_unit_pg1(MPT_ADAPTER *ioc) in mptsas_sas_io_unit_pg1() argument
2460 error = mpt_config(ioc, &cfg); in mptsas_sas_io_unit_pg1()
2468 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_io_unit_pg1()
2478 error = mpt_config(ioc, &cfg); in mptsas_sas_io_unit_pg1()
2482 ioc->io_missing_delay = in mptsas_sas_io_unit_pg1()
2485 ioc->device_missing_delay = (device_missing_delay & MPI_SAS_IOUNIT1_REPORT_MISSING_UNIT_16) ? in mptsas_sas_io_unit_pg1()
2490 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_io_unit_pg1()
2497 mptsas_sas_phy_pg0(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, in mptsas_sas_phy_pg0() argument
2523 error = mpt_config(ioc, &cfg); in mptsas_sas_phy_pg0()
2532 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_phy_pg0()
2542 error = mpt_config(ioc, &cfg); in mptsas_sas_phy_pg0()
2546 mptsas_print_phy_pg0(ioc, buffer); in mptsas_sas_phy_pg0()
2554 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_phy_pg0()
2561 mptsas_sas_device_pg0(MPT_ADAPTER *ioc, struct mptsas_devinfo *device_info, in mptsas_sas_device_pg0() argument
2587 error = mpt_config(ioc, &cfg); in mptsas_sas_device_pg0()
2595 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_device_pg0()
2605 error = mpt_config(ioc, &cfg); in mptsas_sas_device_pg0()
2615 mptsas_print_device_pg0(ioc, buffer); in mptsas_sas_device_pg0()
2635 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_device_pg0()
2642 mptsas_sas_expander_pg0(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info, in mptsas_sas_expander_pg0() argument
2669 error = mpt_config(ioc, &cfg); in mptsas_sas_expander_pg0()
2678 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_expander_pg0()
2688 error = mpt_config(ioc, &cfg); in mptsas_sas_expander_pg0()
2718 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_expander_pg0()
2725 mptsas_sas_expander_pg1(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, in mptsas_sas_expander_pg1() argument
2749 error = mpt_config(ioc, &cfg); in mptsas_sas_expander_pg1()
2758 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_expander_pg1()
2768 error = mpt_config(ioc, &cfg); in mptsas_sas_expander_pg1()
2779 mptsas_print_expander_pg1(ioc, buffer); in mptsas_sas_expander_pg1()
2791 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_expander_pg1()
2835 mptsas_exp_repmanufacture_info(MPT_ADAPTER *ioc, in mptsas_exp_repmanufacture_info() argument
2852 spin_lock_irqsave(&ioc->taskmgmt_lock, flags); in mptsas_exp_repmanufacture_info()
2853 if (ioc->ioc_reset_in_progress) { in mptsas_exp_repmanufacture_info()
2854 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptsas_exp_repmanufacture_info()
2856 __func__, ioc->name); in mptsas_exp_repmanufacture_info()
2859 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptsas_exp_repmanufacture_info()
2861 ret = mutex_lock_interruptible(&ioc->sas_mgmt.mutex); in mptsas_exp_repmanufacture_info()
2865 mf = mpt_get_msg_frame(mptsasMgmtCtx, ioc); in mptsas_exp_repmanufacture_info()
2876 data_out = pci_alloc_consistent(ioc->pcidev, sz, &data_out_dma); in mptsas_exp_repmanufacture_info()
2905 ioc->add_sge(psge, flagsLength, data_out_dma); in mptsas_exp_repmanufacture_info()
2906 psge += ioc->SGE_size; in mptsas_exp_repmanufacture_info()
2914 ioc->add_sge(psge, flagsLength, data_out_dma + in mptsas_exp_repmanufacture_info()
2917 INITIALIZE_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_exp_repmanufacture_info()
2918 mpt_put_msg_frame(mptsasMgmtCtx, ioc, mf); in mptsas_exp_repmanufacture_info()
2920 timeleft = wait_for_completion_timeout(&ioc->sas_mgmt.done, 10 * HZ); in mptsas_exp_repmanufacture_info()
2921 if (!(ioc->sas_mgmt.status & MPT_MGMT_STATUS_COMMAND_GOOD)) { in mptsas_exp_repmanufacture_info()
2923 mpt_free_msg_frame(ioc, mf); in mptsas_exp_repmanufacture_info()
2925 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_DID_IOCRESET) in mptsas_exp_repmanufacture_info()
2928 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP); in mptsas_exp_repmanufacture_info()
2934 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_RF_VALID) { in mptsas_exp_repmanufacture_info()
2937 smprep = (SmpPassthroughReply_t *)ioc->sas_mgmt.reply; in mptsas_exp_repmanufacture_info()
2962 ioc->name, __func__); in mptsas_exp_repmanufacture_info()
2967 pci_free_consistent(ioc->pcidev, sz, data_out, data_out_dma); in mptsas_exp_repmanufacture_info()
2970 mpt_free_msg_frame(ioc, mf); in mptsas_exp_repmanufacture_info()
2972 CLEAR_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_exp_repmanufacture_info()
2973 mutex_unlock(&ioc->sas_mgmt.mutex); in mptsas_exp_repmanufacture_info()
3040 MPT_ADAPTER *ioc; in mptsas_probe_one_phy() local
3161 ioc = phy_to_ioc(phy_info->phy); in mptsas_probe_one_phy()
3173 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_probe_one_phy()
3174 "%s: exit at line=%d\n", ioc->name, in mptsas_probe_one_phy()
3178 mptsas_set_port(ioc, phy_info, port); in mptsas_probe_one_phy()
3179 devtprintk(ioc, dev_printk(KERN_DEBUG, &port->dev, in mptsas_probe_one_phy()
3181 ioc->name, port->port_identifier, in mptsas_probe_one_phy()
3185 dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_probe_one_phy()
3187 ioc->name, phy_info->phy_id)); in mptsas_probe_one_phy()
3190 devtprintk(ioc, dev_printk(KERN_DEBUG, &phy_info->phy->dev, in mptsas_probe_one_phy()
3191 MYIOC_s_FMT "add phy %d, phy-obj (0x%p)\n", ioc->name, in mptsas_probe_one_phy()
3216 port_info = ioc->hba_port_info; in mptsas_probe_one_phy()
3247 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_probe_one_phy()
3248 "%s: exit at line=%d\n", ioc->name, in mptsas_probe_one_phy()
3256 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_probe_one_phy()
3257 "%s: exit at line=%d\n", ioc->name, in mptsas_probe_one_phy()
3262 mptsas_set_rphy(ioc, phy_info, rphy); in mptsas_probe_one_phy()
3265 mptsas_exp_repmanufacture_info(ioc, in mptsas_probe_one_phy()
3272 vtarget = mptsas_find_vtarget(ioc, in mptsas_probe_one_phy()
3285 mptsas_probe_hba_phys(MPT_ADAPTER *ioc) in mptsas_probe_hba_phys() argument
3294 error = mptsas_sas_io_unit_pg0(ioc, hba); in mptsas_probe_hba_phys()
3298 mptsas_sas_io_unit_pg1(ioc); in mptsas_probe_hba_phys()
3299 mutex_lock(&ioc->sas_topology_mutex); in mptsas_probe_hba_phys()
3300 port_info = ioc->hba_port_info; in mptsas_probe_hba_phys()
3302 ioc->hba_port_info = port_info = hba; in mptsas_probe_hba_phys()
3303 ioc->hba_port_num_phy = port_info->num_phys; in mptsas_probe_hba_phys()
3304 list_add_tail(&port_info->list, &ioc->sas_topology); in mptsas_probe_hba_phys()
3318 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_probe_hba_phys()
3320 ioc->num_ports = port_info->num_phys; in mptsas_probe_hba_phys()
3323 mptsas_sas_phy_pg0(ioc, &port_info->phy_info[i], in mptsas_probe_hba_phys()
3328 mptsas_sas_device_pg0(ioc, &port_info->phy_info[i].identify, in mptsas_probe_hba_phys()
3332 if (!ioc->hba_port_sas_addr) in mptsas_probe_hba_phys()
3333 ioc->hba_port_sas_addr = in mptsas_probe_hba_phys()
3338 mptsas_sas_device_pg0(ioc, in mptsas_probe_hba_phys()
3345 mptsas_setup_wide_ports(ioc, port_info); in mptsas_probe_hba_phys()
3347 for (i = 0; i < port_info->num_phys; i++, ioc->sas_index++) in mptsas_probe_hba_phys()
3348 mptsas_probe_one_phy(&ioc->sh->shost_gendev, in mptsas_probe_hba_phys()
3349 &port_info->phy_info[i], ioc->sas_index, 1); in mptsas_probe_hba_phys()
3360 mptsas_expander_refresh(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info) in mptsas_expander_refresh() argument
3372 mptsas_sas_expander_pg1(ioc, &port_info->phy_info[i], in mptsas_expander_refresh()
3376 mptsas_sas_device_pg0(ioc, in mptsas_expander_refresh()
3385 mptsas_sas_device_pg0(ioc, in mptsas_expander_refresh()
3395 mutex_lock(&ioc->sas_topology_mutex); in mptsas_expander_refresh()
3396 parent = mptsas_find_portinfo_by_handle(ioc, in mptsas_expander_refresh()
3399 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_expander_refresh()
3409 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_expander_refresh()
3411 mptsas_setup_wide_ports(ioc, port_info); in mptsas_expander_refresh()
3412 for (i = 0; i < port_info->num_phys; i++, ioc->sas_index++) in mptsas_expander_refresh()
3414 ioc->sas_index, 0); in mptsas_expander_refresh()
3418 mptsas_expander_event_add(MPT_ADAPTER *ioc, in mptsas_expander_event_add() argument
3445 mutex_lock(&ioc->sas_topology_mutex); in mptsas_expander_event_add()
3446 list_add_tail(&port_info->list, &ioc->sas_topology); in mptsas_expander_event_add()
3447 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_expander_event_add()
3450 "sas_addr (0x%llx)\n", ioc->name, port_info->num_phys, in mptsas_expander_event_add()
3453 mptsas_expander_refresh(ioc, port_info); in mptsas_expander_event_add()
3463 mptsas_delete_expander_siblings(MPT_ADAPTER *ioc, struct mptsas_portinfo in mptsas_delete_expander_siblings() argument
3477 mptsas_del_end_device(ioc, phy_info); in mptsas_delete_expander_siblings()
3489 port_info = mptsas_find_portinfo_by_sas_address(ioc, in mptsas_delete_expander_siblings()
3499 mptsas_expander_delete(ioc, port_info, 1); in mptsas_delete_expander_siblings()
3513 static void mptsas_expander_delete(MPT_ADAPTER *ioc, in mptsas_expander_delete() argument
3529 mptsas_sas_expander_pg0(ioc, &buffer, in mptsas_expander_delete()
3547 parent = mptsas_find_portinfo_by_handle(ioc, in mptsas_expander_delete()
3549 mptsas_delete_expander_siblings(ioc, parent, port_info); in mptsas_expander_delete()
3570 MYIOC_s_FMT "delete phy %d, phy-obj (0x%p)\n", ioc->name, in mptsas_expander_delete()
3577 ioc->name, port->port_identifier, in mptsas_expander_delete()
3580 mptsas_port_delete(ioc, port_details); in mptsas_expander_delete()
3585 "sas_addr (0x%llx)\n", ioc->name, port_info->num_phys, in mptsas_expander_delete()
3609 MPT_ADAPTER *ioc; in mptsas_send_expander_event() local
3615 ioc = fw_event->ioc; in mptsas_send_expander_event()
3620 port_info = mptsas_find_portinfo_by_sas_address(ioc, sas_address); in mptsas_send_expander_event()
3633 mptsas_expander_refresh(ioc, port_info); in mptsas_send_expander_event()
3635 mptsas_expander_event_add(ioc, expander_data); in mptsas_send_expander_event()
3638 mptsas_expander_delete(ioc, port_info, 0); in mptsas_send_expander_event()
3640 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_expander_event()
3651 mptsas_expander_add(MPT_ADAPTER *ioc, u16 handle) in mptsas_expander_add() argument
3656 if ((mptsas_sas_expander_pg0(ioc, &buffer, in mptsas_expander_add()
3663 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_expander_add()
3664 "%s: exit at line=%d\n", ioc->name, in mptsas_expander_add()
3672 mutex_lock(&ioc->sas_topology_mutex); in mptsas_expander_add()
3673 list_add_tail(&port_info->list, &ioc->sas_topology); in mptsas_expander_add()
3674 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_expander_add()
3676 "sas_addr (0x%llx)\n", ioc->name, port_info->num_phys, in mptsas_expander_add()
3678 mptsas_expander_refresh(ioc, port_info); in mptsas_expander_add()
3685 MPT_ADAPTER *ioc; in mptsas_send_link_status_event() local
3693 ioc = fw_event->ioc; in mptsas_send_link_status_event()
3701 port_info = mptsas_find_portinfo_by_sas_address(ioc, sas_address); in mptsas_send_link_status_event()
3713 if (ioc->old_sas_discovery_protocal) { in mptsas_send_link_status_event()
3714 port_info = mptsas_expander_add(ioc, in mptsas_send_link_status_event()
3722 if (port_info == ioc->hba_port_info) in mptsas_send_link_status_event()
3723 mptsas_probe_hba_phys(ioc); in mptsas_send_link_status_event()
3725 mptsas_expander_refresh(ioc, port_info); in mptsas_send_link_status_event()
3737 if (ioc->device_missing_delay && in mptsas_send_link_status_event()
3744 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_send_link_status_event()
3746 ioc->name, phy_info->attached.id, in mptsas_send_link_status_event()
3749 shost_for_each_device(sdev, ioc->sh) { in mptsas_send_link_status_event()
3761 devtprintk(ioc, in mptsas_send_link_status_event()
3764 "%d\n", ioc->name, in mptsas_send_link_status_event()
3772 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_link_status_event()
3776 mptsas_not_responding_devices(MPT_ADAPTER *ioc) in mptsas_not_responding_devices() argument
3788 mpt_findImVolumes(ioc); in mptsas_not_responding_devices()
3790 spin_lock_irqsave(&ioc->taskmgmt_lock, flags); in mptsas_not_responding_devices()
3791 if (ioc->ioc_reset_in_progress) { in mptsas_not_responding_devices()
3792 dfailprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_not_responding_devices()
3793 "%s: exiting due to a parallel reset \n", ioc->name, in mptsas_not_responding_devices()
3795 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptsas_not_responding_devices()
3798 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptsas_not_responding_devices()
3801 mutex_lock(&ioc->sas_device_info_mutex); in mptsas_not_responding_devices()
3803 list_for_each_entry(sas_info, &ioc->sas_device_info_list, list) { in mptsas_not_responding_devices()
3810 retval = mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_not_responding_devices()
3819 spin_lock_irqsave(&ioc->taskmgmt_lock, flags); in mptsas_not_responding_devices()
3820 if (ioc->ioc_reset_in_progress) { in mptsas_not_responding_devices()
3821 dfailprintk(ioc, in mptsas_not_responding_devices()
3824 ioc->name, __func__)); in mptsas_not_responding_devices()
3826 (&ioc->taskmgmt_lock, flags); in mptsas_not_responding_devices()
3827 mutex_unlock(&ioc-> in mptsas_not_responding_devices()
3831 spin_unlock_irqrestore(&ioc->taskmgmt_lock, in mptsas_not_responding_devices()
3840 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_not_responding_devices()
3843 ioc->name, __func__, in mptsas_not_responding_devices()
3849 vtarget = mptsas_find_vtarget(ioc, in mptsas_not_responding_devices()
3855 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_not_responding_devices()
3858 mptsas_del_end_device(ioc, phy_info); in mptsas_not_responding_devices()
3861 mptsas_volume_delete(ioc, sas_info->fw.id); in mptsas_not_responding_devices()
3863 mutex_unlock(&ioc->sas_device_info_mutex); in mptsas_not_responding_devices()
3866 mutex_lock(&ioc->sas_topology_mutex); in mptsas_not_responding_devices()
3868 list_for_each_entry(port_info, &ioc->sas_topology, list) { in mptsas_not_responding_devices()
3875 while (!mptsas_sas_expander_pg0(ioc, &buffer, in mptsas_not_responding_devices()
3889 mptsas_expander_delete(ioc, port_info, 0); in mptsas_not_responding_devices()
3893 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_not_responding_devices()
3902 mptsas_probe_expanders(MPT_ADAPTER *ioc) in mptsas_probe_expanders() argument
3909 while (!mptsas_sas_expander_pg0(ioc, &buffer, in mptsas_probe_expanders()
3914 port_info = mptsas_find_portinfo_by_sas_address(ioc, in mptsas_probe_expanders()
3924 mptsas_expander_refresh(ioc, port_info); in mptsas_probe_expanders()
3931 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_probe_expanders()
3932 "%s: exit at line=%d\n", ioc->name, in mptsas_probe_expanders()
3940 mutex_lock(&ioc->sas_topology_mutex); in mptsas_probe_expanders()
3941 list_add_tail(&port_info->list, &ioc->sas_topology); in mptsas_probe_expanders()
3942 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_probe_expanders()
3944 "sas_addr (0x%llx)\n", ioc->name, port_info->num_phys, in mptsas_probe_expanders()
3946 mptsas_expander_refresh(ioc, port_info); in mptsas_probe_expanders()
3951 mptsas_probe_devices(MPT_ADAPTER *ioc) in mptsas_probe_devices() argument
3958 while (!(mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_probe_devices()
3976 phy_info = mptsas_refreshing_device_handles(ioc, &sas_device); in mptsas_probe_devices()
3983 mptsas_add_end_device(ioc, phy_info); in mptsas_probe_devices()
3994 mptsas_scan_sas_topology(MPT_ADAPTER *ioc) in mptsas_scan_sas_topology() argument
3999 mptsas_probe_hba_phys(ioc); in mptsas_scan_sas_topology()
4000 mptsas_probe_expanders(ioc); in mptsas_scan_sas_topology()
4001 mptsas_probe_devices(ioc); in mptsas_scan_sas_topology()
4006 if (!ioc->ir_firmware || !ioc->raid_data.pIocPg2 || in mptsas_scan_sas_topology()
4007 !ioc->raid_data.pIocPg2->NumActiveVolumes) in mptsas_scan_sas_topology()
4009 for (i = 0; i < ioc->raid_data.pIocPg2->NumActiveVolumes; i++) { in mptsas_scan_sas_topology()
4010 sdev = scsi_device_lookup(ioc->sh, MPTSAS_RAID_CHANNEL, in mptsas_scan_sas_topology()
4011 ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID, 0); in mptsas_scan_sas_topology()
4017 "id %d\n", ioc->name, MPTSAS_RAID_CHANNEL, in mptsas_scan_sas_topology()
4018 ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID); in mptsas_scan_sas_topology()
4019 scsi_add_device(ioc->sh, MPTSAS_RAID_CHANNEL, in mptsas_scan_sas_topology()
4020 ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID, 0); in mptsas_scan_sas_topology()
4028 MPT_ADAPTER *ioc; in mptsas_handle_queue_full_event() local
4039 ioc = fw_event->ioc; in mptsas_handle_queue_full_event()
4046 mutex_lock(&ioc->sas_device_info_mutex); in mptsas_handle_queue_full_event()
4047 if (mptscsih_is_phys_disk(ioc, fw_channel, fw_id)) { in mptsas_handle_queue_full_event()
4048 list_for_each_entry(sas_info, &ioc->sas_device_info_list, in mptsas_handle_queue_full_event()
4062 list_for_each_entry(sas_info, &ioc->sas_device_info_list, in mptsas_handle_queue_full_event()
4079 mutex_unlock(&ioc->sas_device_info_mutex); in mptsas_handle_queue_full_event()
4082 shost_for_each_device(sdev, ioc->sh) { in mptsas_handle_queue_full_event()
4109 mptsas_free_fw_event(ioc, fw_event); in mptsas_handle_queue_full_event()
4114 mptsas_find_phyinfo_by_sas_address(MPT_ADAPTER *ioc, u64 sas_address) in mptsas_find_phyinfo_by_sas_address() argument
4120 mutex_lock(&ioc->sas_topology_mutex); in mptsas_find_phyinfo_by_sas_address()
4121 list_for_each_entry(port_info, &ioc->sas_topology, list) { in mptsas_find_phyinfo_by_sas_address()
4133 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_find_phyinfo_by_sas_address()
4146 mptsas_find_phyinfo_by_phys_disk_num(MPT_ADAPTER *ioc, u8 phys_disk_num, in mptsas_find_phyinfo_by_phys_disk_num() argument
4157 if (!ioc->raid_data.pIocPg3) in mptsas_find_phyinfo_by_phys_disk_num()
4160 num_paths = mpt_raid_phys_disk_get_num_paths(ioc, phys_disk_num); in mptsas_find_phyinfo_by_phys_disk_num()
4167 mpt_raid_phys_disk_pg1(ioc, phys_disk_num, phys_disk); in mptsas_find_phyinfo_by_phys_disk_num()
4176 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_find_phyinfo_by_phys_disk_num()
4191 mutex_lock(&ioc->sas_topology_mutex); in mptsas_find_phyinfo_by_phys_disk_num()
4192 list_for_each_entry(port_info, &ioc->sas_topology, list) { in mptsas_find_phyinfo_by_phys_disk_num()
4207 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_find_phyinfo_by_phys_disk_num()
4228 mptsas_adding_inactive_raid_components(MPT_ADAPTER *ioc, u8 channel, u8 id) in mptsas_adding_inactive_raid_components() argument
4247 if (mpt_config(ioc, &cfg) != 0) in mptsas_adding_inactive_raid_components()
4253 buffer = pci_alloc_consistent(ioc->pcidev, hdr.PageLength * 4, in mptsas_adding_inactive_raid_components()
4262 if (mpt_config(ioc, &cfg) != 0) in mptsas_adding_inactive_raid_components()
4274 if (mpt_raid_phys_disk_pg0(ioc, in mptsas_adding_inactive_raid_components()
4278 if (mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_adding_inactive_raid_components()
4293 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_adding_inactive_raid_components()
4295 mptsas_add_end_device(ioc, phy_info); in mptsas_adding_inactive_raid_components()
4300 pci_free_consistent(ioc->pcidev, hdr.PageLength * 4, buffer, in mptsas_adding_inactive_raid_components()
4307 mptsas_hotplug_work(MPT_ADAPTER *ioc, struct fw_event_work *fw_event, in mptsas_hotplug_work() argument
4321 if (!ioc->raid_data.pIocPg2) in mptsas_hotplug_work()
4324 for (i = 0; i < ioc->raid_data.pIocPg2->NumActiveVolumes; i++) { in mptsas_hotplug_work()
4325 if (ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID == in mptsas_hotplug_work()
4329 "volume_id\n", ioc->name); in mptsas_hotplug_work()
4330 mptsas_free_fw_event(ioc, fw_event); in mptsas_hotplug_work()
4334 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4338 mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_hotplug_work()
4354 phy_info = mptsas_refreshing_device_handles(ioc, &sas_device); in mptsas_hotplug_work()
4358 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_hotplug_work()
4360 "parent handle of device %x\n", ioc->name, in mptsas_hotplug_work()
4362 port_info = mptsas_find_portinfo_by_handle(ioc, in mptsas_hotplug_work()
4365 if (port_info == ioc->hba_port_info) in mptsas_hotplug_work()
4366 mptsas_probe_hba_phys(ioc); in mptsas_hotplug_work()
4368 mptsas_expander_refresh(ioc, port_info); in mptsas_hotplug_work()
4370 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4372 ioc->name, __func__, __LINE__)); in mptsas_hotplug_work()
4376 (ioc, &sas_device); in mptsas_hotplug_work()
4380 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4382 ioc->name, __func__, __LINE__)); in mptsas_hotplug_work()
4389 mptsas_add_end_device(ioc, phy_info); in mptsas_hotplug_work()
4393 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_hotplug_work()
4395 mptsas_del_end_device(ioc, phy_info); in mptsas_hotplug_work()
4400 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4403 ioc, hot_plug_info->phys_disk_num, in mptsas_hotplug_work()
4406 mptsas_del_end_device(ioc, phy_info); in mptsas_hotplug_work()
4411 if (mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_hotplug_work()
4415 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4416 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4429 ioc, sas_device.sas_address); in mptsas_hotplug_work()
4432 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4433 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4440 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4441 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4448 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4449 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4454 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4458 ioc->name, hot_plug_info->channel, hot_plug_info->id, in mptsas_hotplug_work()
4470 if (mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_hotplug_work()
4474 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4476 ioc->name, __func__, in mptsas_hotplug_work()
4488 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_hotplug_work()
4491 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4492 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4499 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4500 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4507 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4508 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4514 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4515 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4520 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4524 ioc->name, hot_plug_info->channel, hot_plug_info->id, in mptsas_hotplug_work()
4532 mptsas_add_device_component_by_fw(ioc, in mptsas_hotplug_work()
4538 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4540 "id %d\n", ioc->name, MPTSAS_RAID_CHANNEL, in mptsas_hotplug_work()
4542 scsi_add_device(ioc->sh, MPTSAS_RAID_CHANNEL, in mptsas_hotplug_work()
4548 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4550 "id %d\n", ioc->name, MPTSAS_RAID_CHANNEL, in mptsas_hotplug_work()
4558 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4559 mptsas_adding_inactive_raid_components(ioc, in mptsas_hotplug_work()
4567 mptsas_free_fw_event(ioc, fw_event); in mptsas_hotplug_work()
4573 MPT_ADAPTER *ioc; in mptsas_send_sas_event() local
4579 ioc = fw_event->ioc; in mptsas_send_sas_event()
4588 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_sas_event()
4594 mptbase_sas_persist_operation(ioc, in mptsas_send_sas_event()
4596 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_sas_event()
4617 mptsas_hotplug_work(ioc, fw_event, &hot_plug_info); in mptsas_send_sas_event()
4621 mptbase_sas_persist_operation(ioc, in mptsas_send_sas_event()
4623 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_sas_event()
4631 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_sas_event()
4639 MPT_ADAPTER *ioc; in mptsas_send_raid_event() local
4648 ioc = fw_event->ioc; in mptsas_send_raid_event()
4662 sdev = scsi_device_lookup(ioc->sh, MPTSAS_RAID_CHANNEL, in mptsas_send_raid_event()
4669 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Entering %s: " in mptsas_send_raid_event()
4670 "ReasonCode=%02x\n", ioc->name, __func__, in mptsas_send_raid_event()
4684 mpt_raid_phys_disk_pg0(ioc, in mptsas_send_raid_event()
4747 mptsas_hotplug_work(ioc, fw_event, &hot_plug_info); in mptsas_send_raid_event()
4749 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_raid_event()
4766 mptsas_issue_tm(MPT_ADAPTER *ioc, u8 type, u8 channel, u8 id, u64 lun, in mptsas_issue_tm() argument
4775 mf = mpt_get_msg_frame(mptsasDeviceResetCtx, ioc); in mptsas_issue_tm()
4778 dtmprintk(ioc, printk(MYIOC_s_WARN_FMT "TaskMgmt request: no " in mptsas_issue_tm()
4779 "msg frames!!\n", ioc->name)); in mptsas_issue_tm()
4783 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "TaskMgmt request: mr = %p, " in mptsas_issue_tm()
4785 "fw_id = %d, lun = %lld,\n\t task_context = 0x%x\n", ioc->name, mf, in mptsas_issue_tm()
4802 INITIALIZE_MGMT_STATUS(ioc->taskmgmt_cmds.status) in mptsas_issue_tm()
4803 CLEAR_MGMT_STATUS(ioc->internal_cmds.status) in mptsas_issue_tm()
4805 mpt_put_msg_frame_hi_pri(mptsasDeviceResetCtx, ioc, mf); in mptsas_issue_tm()
4808 timeleft = wait_for_completion_timeout(&ioc->taskmgmt_cmds.done, in mptsas_issue_tm()
4810 if (!(ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_COMMAND_GOOD)) { in mptsas_issue_tm()
4812 dtmprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_issue_tm()
4813 "TaskMgmt request: TIMED OUT!(mr=%p)\n", ioc->name, mf)); in mptsas_issue_tm()
4814 mpt_free_msg_frame(ioc, mf); in mptsas_issue_tm()
4815 if (ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_DID_IOCRESET) in mptsas_issue_tm()
4821 if (!(ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_RF_VALID)) { in mptsas_issue_tm()
4823 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_issue_tm()
4824 "TaskMgmt request: failed with no reply\n", ioc->name)); in mptsas_issue_tm()
4829 CLEAR_MGMT_STATUS(ioc->taskmgmt_cmds.status) in mptsas_issue_tm()
4842 MPT_ADAPTER *ioc = fw_event->ioc; in mptsas_broadcast_primative_work() local
4855 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_broadcast_primative_work()
4856 "%s - enter\n", ioc->name, __func__)); in mptsas_broadcast_primative_work()
4858 mutex_lock(&ioc->taskmgmt_cmds.mutex); in mptsas_broadcast_primative_work()
4859 if (mpt_set_taskmgmt_in_progress_flag(ioc) != 0) { in mptsas_broadcast_primative_work()
4860 mutex_unlock(&ioc->taskmgmt_cmds.mutex); in mptsas_broadcast_primative_work()
4861 mptsas_requeue_fw_event(ioc, fw_event, 1000); in mptsas_broadcast_primative_work()
4868 mpt_findImVolumes(ioc); in mptsas_broadcast_primative_work()
4869 pScsiTmReply = (SCSITaskMgmtReply_t *) ioc->taskmgmt_cmds.reply; in mptsas_broadcast_primative_work()
4871 for (ii = 0; ii < ioc->req_depth; ii++) { in mptsas_broadcast_primative_work()
4872 if (ioc->fw_events_off) in mptsas_broadcast_primative_work()
4874 sc = mptscsih_get_scsi_lookup(ioc, ii); in mptsas_broadcast_primative_work()
4877 mf = MPT_INDEX_2_MFPTR(ioc, ii); in mptsas_broadcast_primative_work()
4891 if (mptsas_issue_tm(ioc, MPI_SCSITASKMGMT_TASKTYPE_QUERY_TASK, in mptsas_broadcast_primative_work()
4903 if (mptsas_issue_tm(ioc, in mptsas_broadcast_primative_work()
4912 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_broadcast_primative_work()
4914 ioc->name, __func__, query_count, termination_count)); in mptsas_broadcast_primative_work()
4916 ioc->broadcast_aen_busy = 0; in mptsas_broadcast_primative_work()
4917 mpt_clear_taskmgmt_in_progress_flag(ioc); in mptsas_broadcast_primative_work()
4918 mutex_unlock(&ioc->taskmgmt_cmds.mutex); in mptsas_broadcast_primative_work()
4923 ioc->name, __func__, mpt_GetIocState(ioc, 0)); in mptsas_broadcast_primative_work()
4924 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP); in mptsas_broadcast_primative_work()
4926 mptsas_free_fw_event(ioc, fw_event); in mptsas_broadcast_primative_work()
4940 MPT_ADAPTER *ioc; in mptsas_send_ir2_event() local
4946 ioc = fw_event->ioc; in mptsas_send_ir2_event()
4950 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Entering %s: " in mptsas_send_ir2_event()
4951 "ReasonCode=%02x\n", ioc->name, __func__, reasonCode)); in mptsas_send_ir2_event()
4966 mpt_raid_phys_disk_pg0(ioc, in mptsas_send_ir2_event()
4972 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_ir2_event()
4975 mptsas_hotplug_work(ioc, fw_event, &hot_plug_info); in mptsas_send_ir2_event()
4979 mptsas_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *reply) in mptsas_event_process() argument
4986 if (ioc->bus_type != SAS) in mptsas_event_process()
4990 if (ioc->fw_events_off) in mptsas_event_process()
5002 if (ioc->broadcast_aen_busy) in mptsas_event_process()
5004 ioc->broadcast_aen_busy = 1; in mptsas_event_process()
5016 mptsas_target_reset_queue(ioc, sas_event_data); in mptsas_event_process()
5021 ioc->device_missing_delay && in mptsas_event_process()
5029 vtarget = mptsas_find_vtarget(ioc, channel, id); in mptsas_event_process()
5031 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_event_process()
5034 "fw_id %d fw_channel %d\n", ioc->name, in mptsas_event_process()
5038 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_event_process()
5040 ioc->name)); in mptsas_event_process()
5042 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_event_process()
5044 ioc->name)); in mptsas_event_process()
5059 if (ioc->old_sas_discovery_protocal) in mptsas_event_process()
5064 ioc->device_missing_delay) in mptsas_event_process()
5065 delay = HZ * ioc->device_missing_delay; in mptsas_event_process()
5075 ioc->sas_discovery_quiesce_io = discovery_status ? 1 : 0; in mptsas_event_process()
5076 if (ioc->old_sas_discovery_protocal && !discovery_status) in mptsas_event_process()
5077 mptsas_queue_rescan(ioc); in mptsas_event_process()
5094 printk(MYIOC_s_WARN_FMT "%s: failed at (line=%d)\n", ioc->name, in mptsas_event_process()
5100 fw_event->ioc = ioc; in mptsas_event_process()
5101 mptsas_add_fw_event(ioc, fw_event, delay); in mptsas_event_process()
5107 static void mptsas_volume_delete(MPT_ADAPTER *ioc, u8 id) in mptsas_volume_delete() argument
5112 sdev = scsi_device_lookup(ioc->sh, MPTSAS_RAID_CHANNEL, id, 0); in mptsas_volume_delete()
5115 if (!ioc->raid_data.pIocPg2) in mptsas_volume_delete()
5117 if (!ioc->raid_data.pIocPg2->NumActiveVolumes) in mptsas_volume_delete()
5119 for (i = 0; i < ioc->raid_data.pIocPg2->NumActiveVolumes; i++) in mptsas_volume_delete()
5120 if (ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID == id) in mptsas_volume_delete()
5124 "id %d\n", ioc->name, MPTSAS_RAID_CHANNEL, id); in mptsas_volume_delete()
5135 MPT_ADAPTER *ioc; in mptsas_probe() local
5148 ioc = pci_get_drvdata(pdev); in mptsas_probe()
5149 mptsas_fw_event_off(ioc); in mptsas_probe()
5150 ioc->DoneCtx = mptsasDoneCtx; in mptsas_probe()
5151 ioc->TaskCtx = mptsasTaskCtx; in mptsas_probe()
5152 ioc->InternalCtx = mptsasInternalCtx; in mptsas_probe()
5153 ioc->schedule_target_reset = &mptsas_schedule_target_reset; in mptsas_probe()
5154 ioc->schedule_dead_ioc_flush_running_cmds = in mptsas_probe()
5158 if (ioc->last_state != MPI_IOC_STATE_OPERATIONAL) { in mptsas_probe()
5161 ioc->name); in mptsas_probe()
5166 if (!ioc->active) { in mptsas_probe()
5168 ioc->name); in mptsas_probe()
5176 for (ii = 0; ii < ioc->facts.NumberOfPorts; ii++) { in mptsas_probe()
5177 if (ioc->pfacts[ii].ProtocolFlags & in mptsas_probe()
5185 "is NOT enabled!\n", ioc->name, ioc); in mptsas_probe()
5193 ioc->name); in mptsas_probe()
5198 spin_lock_irqsave(&ioc->FreeQlock, flags); in mptsas_probe()
5202 ioc->sh = sh; in mptsas_probe()
5210 sh->can_queue = min_t(int, ioc->req_depth - 10, sh->can_queue); in mptsas_probe()
5217 sh->unique_id = ioc->id; in mptsas_probe()
5219 INIT_LIST_HEAD(&ioc->sas_topology); in mptsas_probe()
5220 mutex_init(&ioc->sas_topology_mutex); in mptsas_probe()
5221 mutex_init(&ioc->sas_discovery_mutex); in mptsas_probe()
5222 mutex_init(&ioc->sas_mgmt.mutex); in mptsas_probe()
5223 init_completion(&ioc->sas_mgmt.done); in mptsas_probe()
5234 scale = ioc->req_sz/ioc->SGE_size; in mptsas_probe()
5235 if (ioc->sg_addr_size == sizeof(u64)) { in mptsas_probe()
5237 (ioc->facts.MaxChainDepth-1) + scale + in mptsas_probe()
5238 (ioc->req_sz - 60) / ioc->SGE_size; in mptsas_probe()
5241 (ioc->facts.MaxChainDepth-1) + scale + in mptsas_probe()
5242 (ioc->req_sz - 64) / ioc->SGE_size; in mptsas_probe()
5247 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_probe()
5249 ioc->name, numSGE, sh->sg_tablesize)); in mptsas_probe()
5258 "Range from 64 to 8192\n", ioc->name, in mptsas_probe()
5262 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_probe()
5264 ioc->name, mpt_loadtime_max_sectors, sh->max_sectors)); in mptsas_probe()
5269 hd->ioc = ioc; in mptsas_probe()
5274 ioc->ScsiLookup = kcalloc(ioc->req_depth, sizeof(void *), GFP_ATOMIC); in mptsas_probe()
5275 if (!ioc->ScsiLookup) { in mptsas_probe()
5277 spin_unlock_irqrestore(&ioc->FreeQlock, flags); in mptsas_probe()
5280 spin_lock_init(&ioc->scsi_lookup_lock); in mptsas_probe()
5282 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ScsiLookup @ %p\n", in mptsas_probe()
5283 ioc->name, ioc->ScsiLookup)); in mptsas_probe()
5285 ioc->sas_data.ptClear = mpt_pt_clear; in mptsas_probe()
5289 INIT_LIST_HEAD(&ioc->sas_device_info_list); in mptsas_probe()
5290 mutex_init(&ioc->sas_device_info_mutex); in mptsas_probe()
5292 spin_unlock_irqrestore(&ioc->FreeQlock, flags); in mptsas_probe()
5294 if (ioc->sas_data.ptClear==1) { in mptsas_probe()
5296 ioc, MPI_SAS_OP_CLEAR_ALL_PERSISTENT); in mptsas_probe()
5299 error = scsi_add_host(sh, &ioc->pcidev->dev); in mptsas_probe()
5301 dprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_probe()
5302 "scsi_add_host failed\n", ioc->name)); in mptsas_probe()
5307 if ((ioc->facts.HeaderVersion >> 8) < 0xE) in mptsas_probe()
5308 ioc->old_sas_discovery_protocal = 1; in mptsas_probe()
5309 mptsas_scan_sas_topology(ioc); in mptsas_probe()
5310 mptsas_fw_event_on(ioc); in mptsas_probe()
5322 MPT_ADAPTER *ioc = pci_get_drvdata(pdev); in mptsas_shutdown() local
5324 mptsas_fw_event_off(ioc); in mptsas_shutdown()
5325 mptsas_cleanup_fw_event_q(ioc); in mptsas_shutdown()
5330 MPT_ADAPTER *ioc = pci_get_drvdata(pdev); in mptsas_remove() local
5334 if (!ioc->sh) { in mptsas_remove()
5335 printk(MYIOC_s_INFO_FMT "IOC is in Target mode\n", ioc->name); in mptsas_remove()
5342 mptsas_del_device_components(ioc); in mptsas_remove()
5344 ioc->sas_discovery_ignore_events = 1; in mptsas_remove()
5345 sas_remove_host(ioc->sh); in mptsas_remove()
5347 mutex_lock(&ioc->sas_topology_mutex); in mptsas_remove()
5348 list_for_each_entry_safe(p, n, &ioc->sas_topology, list) { in mptsas_remove()
5351 mptsas_port_delete(ioc, p->phy_info[i].port_details); in mptsas_remove()
5356 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_remove()
5357 ioc->hba_port_info = NULL; in mptsas_remove()