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()
1178 if (mptsas_target_reset(ioc, channel, id)) in mptsas_schedule_target_reset()
1193 mptsas_taskmgmt_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr) in mptsas_taskmgmt_complete() argument
1195 MPT_SCSI_HOST *hd = shost_priv(ioc->sh); in mptsas_taskmgmt_complete()
1201 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "TaskMgmt completed: " in mptsas_taskmgmt_complete()
1202 "(mf = %p, mr = %p)\n", ioc->name, mf, mr)); in mptsas_taskmgmt_complete()
1208 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_taskmgmt_complete()
1212 "term_cmnds = %d\n", ioc->name, in mptsas_taskmgmt_complete()
1221 mptscsih_taskmgmt_response_code(ioc, in mptsas_taskmgmt_complete()
1227 ioc->taskmgmt_cmds.status |= MPT_MGMT_STATUS_COMMAND_GOOD; in mptsas_taskmgmt_complete()
1228 ioc->taskmgmt_cmds.status |= MPT_MGMT_STATUS_RF_VALID; in mptsas_taskmgmt_complete()
1229 memcpy(ioc->taskmgmt_cmds.reply, mr, in mptsas_taskmgmt_complete()
1231 if (ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_PENDING) { in mptsas_taskmgmt_complete()
1232 ioc->taskmgmt_cmds.status &= ~MPT_MGMT_STATUS_PENDING; in mptsas_taskmgmt_complete()
1233 complete(&ioc->taskmgmt_cmds.done); in mptsas_taskmgmt_complete()
1239 mpt_clear_taskmgmt_in_progress_flag(ioc); in mptsas_taskmgmt_complete()
1247 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_taskmgmt_complete()
1249 ioc->name, jiffies_to_msecs(jiffies - in mptsas_taskmgmt_complete()
1260 if (mptsas_target_reset(ioc, channel, id)) in mptsas_taskmgmt_complete()
1269 if (!ioc->fw_events_off) in mptsas_taskmgmt_complete()
1270 mptsas_queue_device_delete(ioc, in mptsas_taskmgmt_complete()
1274 ioc->schedule_target_reset(ioc); in mptsas_taskmgmt_complete()
1287 mptsas_ioc_reset(MPT_ADAPTER *ioc, int reset_phase) in mptsas_ioc_reset() argument
1292 rc = mptscsih_ioc_reset(ioc, reset_phase); in mptsas_ioc_reset()
1293 if ((ioc->bus_type != SAS) || (!rc)) in mptsas_ioc_reset()
1296 hd = shost_priv(ioc->sh); in mptsas_ioc_reset()
1297 if (!hd->ioc) in mptsas_ioc_reset()
1302 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_ioc_reset()
1303 "%s: MPT_IOC_SETUP_RESET\n", ioc->name, __func__)); in mptsas_ioc_reset()
1304 mptsas_fw_event_off(ioc); in mptsas_ioc_reset()
1307 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_ioc_reset()
1308 "%s: MPT_IOC_PRE_RESET\n", ioc->name, __func__)); in mptsas_ioc_reset()
1311 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_ioc_reset()
1312 "%s: MPT_IOC_POST_RESET\n", ioc->name, __func__)); in mptsas_ioc_reset()
1313 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_PENDING) { in mptsas_ioc_reset()
1314 ioc->sas_mgmt.status |= MPT_MGMT_STATUS_DID_IOCRESET; in mptsas_ioc_reset()
1315 complete(&ioc->sas_mgmt.done); in mptsas_ioc_reset()
1317 mptsas_cleanup_fw_event_q(ioc); in mptsas_ioc_reset()
1318 mptsas_queue_rescan(ioc); in mptsas_ioc_reset()
1343 mptsas_sas_enclosure_pg0(MPT_ADAPTER *ioc, struct mptsas_enclosure *enclosure, in mptsas_sas_enclosure_pg0() argument
1366 error = mpt_config(ioc, &cfg); in mptsas_sas_enclosure_pg0()
1374 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_enclosure_pg0()
1384 error = mpt_config(ioc, &cfg); in mptsas_sas_enclosure_pg0()
1401 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_enclosure_pg0()
1416 mptsas_add_end_device(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info) in mptsas_add_end_device() argument
1425 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_add_end_device()
1426 "%s: exit at line=%d\n", ioc->name, in mptsas_add_end_device()
1434 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_add_end_device()
1435 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_add_end_device()
1442 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_add_end_device()
1443 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_add_end_device()
1459 " phy %d, sas_addr 0x%llx\n", ioc->name, ds, in mptsas_add_end_device()
1467 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_add_end_device()
1468 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_add_end_device()
1475 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_add_end_device()
1476 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_add_end_device()
1481 mptsas_set_rphy(ioc, phy_info, rphy); in mptsas_add_end_device()
1492 mptsas_del_end_device(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info) in mptsas_del_end_device() argument
1510 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_del_end_device()
1511 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_del_end_device()
1517 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_del_end_device()
1518 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_del_end_device()
1541 "sas_addr 0x%llx\n", ioc->name, ds, phy_info->attached.channel, in mptsas_del_end_device()
1547 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_del_end_device()
1548 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_del_end_device()
1562 ioc->name, phy_info_parent->phy_id, in mptsas_del_end_device()
1568 "delete port %d, sas_addr (0x%llx)\n", ioc->name, in mptsas_del_end_device()
1571 mptsas_set_port(ioc, phy_info, NULL); in mptsas_del_end_device()
1572 mptsas_port_delete(ioc, phy_info->port_details); in mptsas_del_end_device()
1576 mptsas_refreshing_device_handles(MPT_ADAPTER *ioc, in mptsas_refreshing_device_handles() argument
1583 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_refreshing_device_handles()
1590 mutex_lock(&ioc->sas_topology_mutex); in mptsas_refreshing_device_handles()
1605 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_refreshing_device_handles()
1621 MPT_ADAPTER *ioc = fw_event->ioc; in mptsas_firmware_event_work() local
1625 if (ioc->in_rescan) { in mptsas_firmware_event_work()
1626 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_firmware_event_work()
1628 ioc->name, __func__)); in mptsas_firmware_event_work()
1631 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: rescan after " in mptsas_firmware_event_work()
1632 "reset\n", ioc->name, __func__)); in mptsas_firmware_event_work()
1633 ioc->in_rescan = 1; in mptsas_firmware_event_work()
1634 mptsas_not_responding_devices(ioc); in mptsas_firmware_event_work()
1635 mptsas_scan_sas_topology(ioc); in mptsas_firmware_event_work()
1636 ioc->in_rescan = 0; in mptsas_firmware_event_work()
1637 mptsas_free_fw_event(ioc, fw_event); in mptsas_firmware_event_work()
1638 mptsas_fw_event_on(ioc); in mptsas_firmware_event_work()
1643 if (ioc->fw_events_off) { in mptsas_firmware_event_work()
1644 mptsas_free_fw_event(ioc, fw_event); in mptsas_firmware_event_work()
1648 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: fw_event=(0x%p), " in mptsas_firmware_event_work()
1649 "event = (0x%02x)\n", ioc->name, __func__, fw_event, in mptsas_firmware_event_work()
1663 mptbase_sas_persist_operation(ioc, in mptsas_firmware_event_work()
1665 mptsas_free_fw_event(ioc, fw_event); in mptsas_firmware_event_work()
1689 MPT_ADAPTER *ioc = hd->ioc; in mptsas_slave_configure() local
1702 mptsas_add_device_component_starget_ir(ioc, scsi_target(sdev)); in mptsas_slave_configure()
1708 mptsas_add_device_component_starget(ioc, scsi_target(sdev)); in mptsas_slave_configure()
1724 MPT_ADAPTER *ioc = hd->ioc; in mptsas_target_alloc() local
1731 vtarget->ioc_id = ioc->id; in mptsas_target_alloc()
1740 if (!ioc->raid_data.pIocPg2) { in mptsas_target_alloc()
1744 for (i = 0; i < ioc->raid_data.pIocPg2->NumActiveVolumes; i++) { in mptsas_target_alloc()
1745 if (id == ioc->raid_data.pIocPg2-> in mptsas_target_alloc()
1747 channel = ioc->raid_data.pIocPg2-> in mptsas_target_alloc()
1756 mutex_lock(&ioc->sas_topology_mutex); in mptsas_target_alloc()
1757 list_for_each_entry(p, &ioc->sas_topology, list) { in mptsas_target_alloc()
1769 if (mptscsih_is_phys_disk(ioc, channel, id)) { in mptsas_target_alloc()
1770 id = mptscsih_raid_id_to_num(ioc, in mptsas_target_alloc()
1776 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_target_alloc()
1780 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_target_alloc()
1800 MPT_ADAPTER *ioc = hd->ioc; in mptsas_target_destroy() local
1808 mptsas_del_device_component_by_os(ioc, starget->channel, in mptsas_target_destroy()
1816 list_for_each_entry(p, &ioc->sas_topology, list) { in mptsas_target_destroy()
1824 "sas_addr 0x%llx\n", ioc->name, in mptsas_target_destroy()
1851 MPT_ADAPTER *ioc = hd->ioc; in mptsas_slave_alloc() local
1856 ioc->name, sizeof(VirtDevice)); in mptsas_slave_alloc()
1866 mutex_lock(&ioc->sas_topology_mutex); in mptsas_slave_alloc()
1867 list_for_each_entry(p, &ioc->sas_topology, list) { in mptsas_slave_alloc()
1876 if (mptscsih_is_phys_disk(ioc, in mptsas_slave_alloc()
1880 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_slave_alloc()
1884 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_slave_alloc()
1899 MPT_ADAPTER *ioc; in mptsas_qcmd() local
1909 ioc = hd->ioc; in mptsas_qcmd()
1911 if (ioc->sas_discovery_quiesce_io) in mptsas_qcmd()
1914 if (ioc->debug_level & MPT_DEBUG_SCSI) in mptsas_qcmd()
1930 MPT_ADAPTER *ioc; in mptsas_eh_timed_out() local
1941 ioc = hd->ioc; in mptsas_eh_timed_out()
1942 if (ioc->bus_type != SAS) { in mptsas_eh_timed_out()
1951 if (ioc->ioc_reset_in_progress) { in mptsas_eh_timed_out()
1952 dtmprintk(ioc, printk(MYIOC_s_WARN_FMT ": %s: ioc is in reset," in mptsas_eh_timed_out()
1954 ioc->name, __func__, sc)); in mptsas_eh_timed_out()
1960 dtmprintk(ioc, printk(MYIOC_s_WARN_FMT ": %s: target removed " in mptsas_eh_timed_out()
1962 ioc->name, __func__, sc)); in mptsas_eh_timed_out()
2001 MPT_ADAPTER *ioc = phy_to_ioc(phy); in mptsas_get_linkerrors() local
2027 error = mpt_config(ioc, &cfg); in mptsas_get_linkerrors()
2033 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_get_linkerrors()
2041 error = mpt_config(ioc, &cfg); in mptsas_get_linkerrors()
2045 mptsas_print_phy_pg1(ioc, buffer); in mptsas_get_linkerrors()
2056 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_get_linkerrors()
2061 static int mptsas_mgmt_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, in mptsas_mgmt_done() argument
2064 ioc->sas_mgmt.status |= MPT_MGMT_STATUS_COMMAND_GOOD; in mptsas_mgmt_done()
2066 ioc->sas_mgmt.status |= MPT_MGMT_STATUS_RF_VALID; in mptsas_mgmt_done()
2067 memcpy(ioc->sas_mgmt.reply, reply, in mptsas_mgmt_done()
2068 min(ioc->reply_sz, 4 * reply->u.reply.MsgLength)); in mptsas_mgmt_done()
2071 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_PENDING) { in mptsas_mgmt_done()
2072 ioc->sas_mgmt.status &= ~MPT_MGMT_STATUS_PENDING; in mptsas_mgmt_done()
2073 complete(&ioc->sas_mgmt.done); in mptsas_mgmt_done()
2081 MPT_ADAPTER *ioc = phy_to_ioc(phy); in mptsas_phy_reset() local
2097 if (mutex_lock_interruptible(&ioc->sas_mgmt.mutex)) in mptsas_phy_reset()
2100 mf = mpt_get_msg_frame(mptsasMgmtCtx, ioc); in mptsas_phy_reset()
2115 INITIALIZE_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_phy_reset()
2116 mpt_put_msg_frame(mptsasMgmtCtx, ioc, mf); in mptsas_phy_reset()
2118 timeleft = wait_for_completion_timeout(&ioc->sas_mgmt.done, in mptsas_phy_reset()
2120 if (!(ioc->sas_mgmt.status & MPT_MGMT_STATUS_COMMAND_GOOD)) { in mptsas_phy_reset()
2122 mpt_free_msg_frame(ioc, mf); in mptsas_phy_reset()
2123 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_DID_IOCRESET) in mptsas_phy_reset()
2126 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP); in mptsas_phy_reset()
2131 if ((ioc->sas_mgmt.status & in mptsas_phy_reset()
2138 reply = (SasIoUnitControlReply_t *)ioc->sas_mgmt.reply; in mptsas_phy_reset()
2141 ioc->name, __func__, reply->IOCStatus, reply->IOCLogInfo); in mptsas_phy_reset()
2149 CLEAR_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_phy_reset()
2150 mutex_unlock(&ioc->sas_mgmt.mutex); in mptsas_phy_reset()
2158 MPT_ADAPTER *ioc = rphy_to_ioc(rphy); in mptsas_get_enclosure_identifier() local
2164 mutex_lock(&ioc->sas_topology_mutex); in mptsas_get_enclosure_identifier()
2165 list_for_each_entry(p, &ioc->sas_topology, list) { in mptsas_get_enclosure_identifier()
2175 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_get_enclosure_identifier()
2179 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_get_enclosure_identifier()
2181 error = mptsas_sas_enclosure_pg0(ioc, &enclosure_info, in mptsas_get_enclosure_identifier()
2192 MPT_ADAPTER *ioc = rphy_to_ioc(rphy); in mptsas_get_bay_identifier() local
2196 mutex_lock(&ioc->sas_topology_mutex); in mptsas_get_bay_identifier()
2197 list_for_each_entry(p, &ioc->sas_topology, list) { in mptsas_get_bay_identifier()
2208 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_get_bay_identifier()
2215 MPT_ADAPTER *ioc = ((MPT_SCSI_HOST *) shost->hostdata)->ioc; in mptsas_smp_handler() local
2229 ioc->name, __func__, job->request_payload.payload_len, in mptsas_smp_handler()
2234 ret = mutex_lock_interruptible(&ioc->sas_mgmt.mutex); in mptsas_smp_handler()
2238 mf = mpt_get_msg_frame(mptsasMgmtCtx, ioc); in mptsas_smp_handler()
2256 mutex_lock(&ioc->sas_topology_mutex); in mptsas_smp_handler()
2257 port_info = ioc->hba_port_info; in mptsas_smp_handler()
2261 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_smp_handler()
2275 if (!dma_map_sg(&ioc->pcidev->dev, job->request_payload.sg_list, in mptsas_smp_handler()
2280 ioc->add_sge(psge, flagsLength, in mptsas_smp_handler()
2282 psge += ioc->SGE_size; in mptsas_smp_handler()
2292 if (!dma_map_sg(&ioc->pcidev->dev, job->reply_payload.sg_list, in mptsas_smp_handler()
2296 ioc->add_sge(psge, flagsLength, in mptsas_smp_handler()
2299 INITIALIZE_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_smp_handler()
2300 mpt_put_msg_frame(mptsasMgmtCtx, ioc, mf); in mptsas_smp_handler()
2302 timeleft = wait_for_completion_timeout(&ioc->sas_mgmt.done, 10 * HZ); in mptsas_smp_handler()
2303 if (!(ioc->sas_mgmt.status & MPT_MGMT_STATUS_COMMAND_GOOD)) { in mptsas_smp_handler()
2305 mpt_free_msg_frame(ioc, mf); in mptsas_smp_handler()
2307 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_DID_IOCRESET) in mptsas_smp_handler()
2310 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP); in mptsas_smp_handler()
2315 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_RF_VALID) { in mptsas_smp_handler()
2318 smprep = (SmpPassthroughReply_t *)ioc->sas_mgmt.reply; in mptsas_smp_handler()
2325 ioc->name, __func__); in mptsas_smp_handler()
2330 dma_unmap_sg(&ioc->pcidev->dev, job->reply_payload.sg_list, 1, in mptsas_smp_handler()
2333 dma_unmap_sg(&ioc->pcidev->dev, job->request_payload.sg_list, 1, in mptsas_smp_handler()
2337 mpt_free_msg_frame(ioc, mf); in mptsas_smp_handler()
2339 CLEAR_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_smp_handler()
2340 mutex_unlock(&ioc->sas_mgmt.mutex); in mptsas_smp_handler()
2356 mptsas_sas_io_unit_pg0(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info) in mptsas_sas_io_unit_pg0() argument
2379 error = mpt_config(ioc, &cfg); in mptsas_sas_io_unit_pg0()
2387 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_io_unit_pg0()
2397 error = mpt_config(ioc, &cfg); in mptsas_sas_io_unit_pg0()
2409 ioc->nvdata_version_persistent = in mptsas_sas_io_unit_pg0()
2411 ioc->nvdata_version_default = in mptsas_sas_io_unit_pg0()
2415 mptsas_print_phy_data(ioc, &buffer->PhyData[i]); in mptsas_sas_io_unit_pg0()
2427 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_io_unit_pg0()
2434 mptsas_sas_io_unit_pg1(MPT_ADAPTER *ioc) in mptsas_sas_io_unit_pg1() argument
2454 error = mpt_config(ioc, &cfg); in mptsas_sas_io_unit_pg1()
2462 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_io_unit_pg1()
2472 error = mpt_config(ioc, &cfg); in mptsas_sas_io_unit_pg1()
2476 ioc->io_missing_delay = in mptsas_sas_io_unit_pg1()
2479 ioc->device_missing_delay = (device_missing_delay & MPI_SAS_IOUNIT1_REPORT_MISSING_UNIT_16) ? in mptsas_sas_io_unit_pg1()
2484 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_io_unit_pg1()
2491 mptsas_sas_phy_pg0(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, in mptsas_sas_phy_pg0() argument
2517 error = mpt_config(ioc, &cfg); in mptsas_sas_phy_pg0()
2526 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_phy_pg0()
2536 error = mpt_config(ioc, &cfg); in mptsas_sas_phy_pg0()
2540 mptsas_print_phy_pg0(ioc, buffer); in mptsas_sas_phy_pg0()
2548 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_phy_pg0()
2555 mptsas_sas_device_pg0(MPT_ADAPTER *ioc, struct mptsas_devinfo *device_info, in mptsas_sas_device_pg0() argument
2581 error = mpt_config(ioc, &cfg); in mptsas_sas_device_pg0()
2589 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_device_pg0()
2599 error = mpt_config(ioc, &cfg); in mptsas_sas_device_pg0()
2609 mptsas_print_device_pg0(ioc, buffer); in mptsas_sas_device_pg0()
2629 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_device_pg0()
2636 mptsas_sas_expander_pg0(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info, in mptsas_sas_expander_pg0() argument
2663 error = mpt_config(ioc, &cfg); in mptsas_sas_expander_pg0()
2672 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_expander_pg0()
2682 error = mpt_config(ioc, &cfg); in mptsas_sas_expander_pg0()
2712 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_expander_pg0()
2719 mptsas_sas_expander_pg1(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, in mptsas_sas_expander_pg1() argument
2743 error = mpt_config(ioc, &cfg); in mptsas_sas_expander_pg1()
2752 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_expander_pg1()
2762 error = mpt_config(ioc, &cfg); in mptsas_sas_expander_pg1()
2773 mptsas_print_expander_pg1(ioc, buffer); in mptsas_sas_expander_pg1()
2785 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_expander_pg1()
2829 mptsas_exp_repmanufacture_info(MPT_ADAPTER *ioc, in mptsas_exp_repmanufacture_info() argument
2846 spin_lock_irqsave(&ioc->taskmgmt_lock, flags); in mptsas_exp_repmanufacture_info()
2847 if (ioc->ioc_reset_in_progress) { in mptsas_exp_repmanufacture_info()
2848 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptsas_exp_repmanufacture_info()
2850 __func__, ioc->name); in mptsas_exp_repmanufacture_info()
2853 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptsas_exp_repmanufacture_info()
2855 ret = mutex_lock_interruptible(&ioc->sas_mgmt.mutex); in mptsas_exp_repmanufacture_info()
2859 mf = mpt_get_msg_frame(mptsasMgmtCtx, ioc); in mptsas_exp_repmanufacture_info()
2870 data_out = pci_alloc_consistent(ioc->pcidev, sz, &data_out_dma); in mptsas_exp_repmanufacture_info()
2899 ioc->add_sge(psge, flagsLength, data_out_dma); in mptsas_exp_repmanufacture_info()
2900 psge += ioc->SGE_size; in mptsas_exp_repmanufacture_info()
2908 ioc->add_sge(psge, flagsLength, data_out_dma + in mptsas_exp_repmanufacture_info()
2911 INITIALIZE_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_exp_repmanufacture_info()
2912 mpt_put_msg_frame(mptsasMgmtCtx, ioc, mf); in mptsas_exp_repmanufacture_info()
2914 timeleft = wait_for_completion_timeout(&ioc->sas_mgmt.done, 10 * HZ); in mptsas_exp_repmanufacture_info()
2915 if (!(ioc->sas_mgmt.status & MPT_MGMT_STATUS_COMMAND_GOOD)) { in mptsas_exp_repmanufacture_info()
2917 mpt_free_msg_frame(ioc, mf); in mptsas_exp_repmanufacture_info()
2919 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_DID_IOCRESET) in mptsas_exp_repmanufacture_info()
2922 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP); in mptsas_exp_repmanufacture_info()
2928 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_RF_VALID) { in mptsas_exp_repmanufacture_info()
2931 smprep = (SmpPassthroughReply_t *)ioc->sas_mgmt.reply; in mptsas_exp_repmanufacture_info()
2956 ioc->name, __func__); in mptsas_exp_repmanufacture_info()
2961 pci_free_consistent(ioc->pcidev, sz, data_out, data_out_dma); in mptsas_exp_repmanufacture_info()
2964 mpt_free_msg_frame(ioc, mf); in mptsas_exp_repmanufacture_info()
2966 CLEAR_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_exp_repmanufacture_info()
2967 mutex_unlock(&ioc->sas_mgmt.mutex); in mptsas_exp_repmanufacture_info()
3034 MPT_ADAPTER *ioc; in mptsas_probe_one_phy() local
3155 ioc = phy_to_ioc(phy_info->phy); in mptsas_probe_one_phy()
3167 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_probe_one_phy()
3168 "%s: exit at line=%d\n", ioc->name, in mptsas_probe_one_phy()
3172 mptsas_set_port(ioc, phy_info, port); in mptsas_probe_one_phy()
3173 devtprintk(ioc, dev_printk(KERN_DEBUG, &port->dev, in mptsas_probe_one_phy()
3175 ioc->name, port->port_identifier, in mptsas_probe_one_phy()
3179 dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_probe_one_phy()
3181 ioc->name, phy_info->phy_id)); in mptsas_probe_one_phy()
3184 devtprintk(ioc, dev_printk(KERN_DEBUG, &phy_info->phy->dev, in mptsas_probe_one_phy()
3185 MYIOC_s_FMT "add phy %d, phy-obj (0x%p)\n", ioc->name, in mptsas_probe_one_phy()
3210 port_info = ioc->hba_port_info; in mptsas_probe_one_phy()
3241 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_probe_one_phy()
3242 "%s: exit at line=%d\n", ioc->name, in mptsas_probe_one_phy()
3250 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_probe_one_phy()
3251 "%s: exit at line=%d\n", ioc->name, in mptsas_probe_one_phy()
3256 mptsas_set_rphy(ioc, phy_info, rphy); in mptsas_probe_one_phy()
3259 mptsas_exp_repmanufacture_info(ioc, in mptsas_probe_one_phy()
3266 vtarget = mptsas_find_vtarget(ioc, in mptsas_probe_one_phy()
3279 mptsas_probe_hba_phys(MPT_ADAPTER *ioc) in mptsas_probe_hba_phys() argument
3288 error = mptsas_sas_io_unit_pg0(ioc, hba); in mptsas_probe_hba_phys()
3292 mptsas_sas_io_unit_pg1(ioc); in mptsas_probe_hba_phys()
3293 mutex_lock(&ioc->sas_topology_mutex); in mptsas_probe_hba_phys()
3294 port_info = ioc->hba_port_info; in mptsas_probe_hba_phys()
3296 ioc->hba_port_info = port_info = hba; in mptsas_probe_hba_phys()
3297 ioc->hba_port_num_phy = port_info->num_phys; in mptsas_probe_hba_phys()
3298 list_add_tail(&port_info->list, &ioc->sas_topology); in mptsas_probe_hba_phys()
3312 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_probe_hba_phys()
3314 ioc->num_ports = port_info->num_phys; in mptsas_probe_hba_phys()
3317 mptsas_sas_phy_pg0(ioc, &port_info->phy_info[i], in mptsas_probe_hba_phys()
3322 mptsas_sas_device_pg0(ioc, &port_info->phy_info[i].identify, in mptsas_probe_hba_phys()
3326 if (!ioc->hba_port_sas_addr) in mptsas_probe_hba_phys()
3327 ioc->hba_port_sas_addr = in mptsas_probe_hba_phys()
3332 mptsas_sas_device_pg0(ioc, in mptsas_probe_hba_phys()
3339 mptsas_setup_wide_ports(ioc, port_info); in mptsas_probe_hba_phys()
3341 for (i = 0; i < port_info->num_phys; i++, ioc->sas_index++) in mptsas_probe_hba_phys()
3342 mptsas_probe_one_phy(&ioc->sh->shost_gendev, in mptsas_probe_hba_phys()
3343 &port_info->phy_info[i], ioc->sas_index, 1); in mptsas_probe_hba_phys()
3354 mptsas_expander_refresh(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info) in mptsas_expander_refresh() argument
3366 mptsas_sas_expander_pg1(ioc, &port_info->phy_info[i], in mptsas_expander_refresh()
3370 mptsas_sas_device_pg0(ioc, in mptsas_expander_refresh()
3379 mptsas_sas_device_pg0(ioc, in mptsas_expander_refresh()
3389 mutex_lock(&ioc->sas_topology_mutex); in mptsas_expander_refresh()
3390 parent = mptsas_find_portinfo_by_handle(ioc, in mptsas_expander_refresh()
3393 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_expander_refresh()
3403 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_expander_refresh()
3405 mptsas_setup_wide_ports(ioc, port_info); in mptsas_expander_refresh()
3406 for (i = 0; i < port_info->num_phys; i++, ioc->sas_index++) in mptsas_expander_refresh()
3408 ioc->sas_index, 0); in mptsas_expander_refresh()
3412 mptsas_expander_event_add(MPT_ADAPTER *ioc, in mptsas_expander_event_add() argument
3439 mutex_lock(&ioc->sas_topology_mutex); in mptsas_expander_event_add()
3440 list_add_tail(&port_info->list, &ioc->sas_topology); in mptsas_expander_event_add()
3441 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_expander_event_add()
3444 "sas_addr (0x%llx)\n", ioc->name, port_info->num_phys, in mptsas_expander_event_add()
3447 mptsas_expander_refresh(ioc, port_info); in mptsas_expander_event_add()
3457 mptsas_delete_expander_siblings(MPT_ADAPTER *ioc, struct mptsas_portinfo in mptsas_delete_expander_siblings() argument
3471 mptsas_del_end_device(ioc, phy_info); in mptsas_delete_expander_siblings()
3483 port_info = mptsas_find_portinfo_by_sas_address(ioc, in mptsas_delete_expander_siblings()
3493 mptsas_expander_delete(ioc, port_info, 1); in mptsas_delete_expander_siblings()
3507 static void mptsas_expander_delete(MPT_ADAPTER *ioc, in mptsas_expander_delete() argument
3523 mptsas_sas_expander_pg0(ioc, &buffer, in mptsas_expander_delete()
3541 parent = mptsas_find_portinfo_by_handle(ioc, in mptsas_expander_delete()
3543 mptsas_delete_expander_siblings(ioc, parent, port_info); in mptsas_expander_delete()
3564 MYIOC_s_FMT "delete phy %d, phy-obj (0x%p)\n", ioc->name, in mptsas_expander_delete()
3571 ioc->name, port->port_identifier, in mptsas_expander_delete()
3574 mptsas_port_delete(ioc, port_details); in mptsas_expander_delete()
3579 "sas_addr (0x%llx)\n", ioc->name, port_info->num_phys, in mptsas_expander_delete()
3603 MPT_ADAPTER *ioc; in mptsas_send_expander_event() local
3609 ioc = fw_event->ioc; in mptsas_send_expander_event()
3614 port_info = mptsas_find_portinfo_by_sas_address(ioc, sas_address); in mptsas_send_expander_event()
3627 mptsas_expander_refresh(ioc, port_info); in mptsas_send_expander_event()
3629 mptsas_expander_event_add(ioc, expander_data); in mptsas_send_expander_event()
3632 mptsas_expander_delete(ioc, port_info, 0); in mptsas_send_expander_event()
3634 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_expander_event()
3645 mptsas_expander_add(MPT_ADAPTER *ioc, u16 handle) in mptsas_expander_add() argument
3650 if ((mptsas_sas_expander_pg0(ioc, &buffer, in mptsas_expander_add()
3657 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_expander_add()
3658 "%s: exit at line=%d\n", ioc->name, in mptsas_expander_add()
3666 mutex_lock(&ioc->sas_topology_mutex); in mptsas_expander_add()
3667 list_add_tail(&port_info->list, &ioc->sas_topology); in mptsas_expander_add()
3668 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_expander_add()
3670 "sas_addr (0x%llx)\n", ioc->name, port_info->num_phys, in mptsas_expander_add()
3672 mptsas_expander_refresh(ioc, port_info); in mptsas_expander_add()
3679 MPT_ADAPTER *ioc; in mptsas_send_link_status_event() local
3687 ioc = fw_event->ioc; in mptsas_send_link_status_event()
3695 port_info = mptsas_find_portinfo_by_sas_address(ioc, sas_address); in mptsas_send_link_status_event()
3707 if (ioc->old_sas_discovery_protocal) { in mptsas_send_link_status_event()
3708 port_info = mptsas_expander_add(ioc, in mptsas_send_link_status_event()
3716 if (port_info == ioc->hba_port_info) in mptsas_send_link_status_event()
3717 mptsas_probe_hba_phys(ioc); in mptsas_send_link_status_event()
3719 mptsas_expander_refresh(ioc, port_info); in mptsas_send_link_status_event()
3731 if (ioc->device_missing_delay && in mptsas_send_link_status_event()
3738 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_send_link_status_event()
3740 ioc->name, phy_info->attached.id, in mptsas_send_link_status_event()
3743 shost_for_each_device(sdev, ioc->sh) { in mptsas_send_link_status_event()
3755 devtprintk(ioc, in mptsas_send_link_status_event()
3758 "%d\n", ioc->name, in mptsas_send_link_status_event()
3766 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_link_status_event()
3770 mptsas_not_responding_devices(MPT_ADAPTER *ioc) in mptsas_not_responding_devices() argument
3782 mpt_findImVolumes(ioc); in mptsas_not_responding_devices()
3784 spin_lock_irqsave(&ioc->taskmgmt_lock, flags); in mptsas_not_responding_devices()
3785 if (ioc->ioc_reset_in_progress) { in mptsas_not_responding_devices()
3786 dfailprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_not_responding_devices()
3787 "%s: exiting due to a parallel reset \n", ioc->name, in mptsas_not_responding_devices()
3789 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptsas_not_responding_devices()
3792 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptsas_not_responding_devices()
3795 mutex_lock(&ioc->sas_device_info_mutex); in mptsas_not_responding_devices()
3797 list_for_each_entry(sas_info, &ioc->sas_device_info_list, list) { in mptsas_not_responding_devices()
3804 retval = mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_not_responding_devices()
3813 spin_lock_irqsave(&ioc->taskmgmt_lock, flags); in mptsas_not_responding_devices()
3814 if (ioc->ioc_reset_in_progress) { in mptsas_not_responding_devices()
3815 dfailprintk(ioc, in mptsas_not_responding_devices()
3818 ioc->name, __func__)); in mptsas_not_responding_devices()
3820 (&ioc->taskmgmt_lock, flags); in mptsas_not_responding_devices()
3821 mutex_unlock(&ioc-> in mptsas_not_responding_devices()
3825 spin_unlock_irqrestore(&ioc->taskmgmt_lock, in mptsas_not_responding_devices()
3834 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_not_responding_devices()
3837 ioc->name, __func__, in mptsas_not_responding_devices()
3843 vtarget = mptsas_find_vtarget(ioc, in mptsas_not_responding_devices()
3849 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_not_responding_devices()
3852 mptsas_del_end_device(ioc, phy_info); in mptsas_not_responding_devices()
3855 mptsas_volume_delete(ioc, sas_info->fw.id); in mptsas_not_responding_devices()
3857 mutex_unlock(&ioc->sas_device_info_mutex); in mptsas_not_responding_devices()
3860 mutex_lock(&ioc->sas_topology_mutex); in mptsas_not_responding_devices()
3862 list_for_each_entry(port_info, &ioc->sas_topology, list) { in mptsas_not_responding_devices()
3869 while (!mptsas_sas_expander_pg0(ioc, &buffer, in mptsas_not_responding_devices()
3883 mptsas_expander_delete(ioc, port_info, 0); in mptsas_not_responding_devices()
3887 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_not_responding_devices()
3896 mptsas_probe_expanders(MPT_ADAPTER *ioc) in mptsas_probe_expanders() argument
3903 while (!mptsas_sas_expander_pg0(ioc, &buffer, in mptsas_probe_expanders()
3908 port_info = mptsas_find_portinfo_by_sas_address(ioc, in mptsas_probe_expanders()
3918 mptsas_expander_refresh(ioc, port_info); in mptsas_probe_expanders()
3925 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_probe_expanders()
3926 "%s: exit at line=%d\n", ioc->name, in mptsas_probe_expanders()
3934 mutex_lock(&ioc->sas_topology_mutex); in mptsas_probe_expanders()
3935 list_add_tail(&port_info->list, &ioc->sas_topology); in mptsas_probe_expanders()
3936 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_probe_expanders()
3938 "sas_addr (0x%llx)\n", ioc->name, port_info->num_phys, in mptsas_probe_expanders()
3940 mptsas_expander_refresh(ioc, port_info); in mptsas_probe_expanders()
3945 mptsas_probe_devices(MPT_ADAPTER *ioc) in mptsas_probe_devices() argument
3952 while (!(mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_probe_devices()
3970 phy_info = mptsas_refreshing_device_handles(ioc, &sas_device); in mptsas_probe_devices()
3977 mptsas_add_end_device(ioc, phy_info); in mptsas_probe_devices()
3988 mptsas_scan_sas_topology(MPT_ADAPTER *ioc) in mptsas_scan_sas_topology() argument
3993 mptsas_probe_hba_phys(ioc); in mptsas_scan_sas_topology()
3994 mptsas_probe_expanders(ioc); in mptsas_scan_sas_topology()
3995 mptsas_probe_devices(ioc); in mptsas_scan_sas_topology()
4000 if (!ioc->ir_firmware || !ioc->raid_data.pIocPg2 || in mptsas_scan_sas_topology()
4001 !ioc->raid_data.pIocPg2->NumActiveVolumes) in mptsas_scan_sas_topology()
4003 for (i = 0; i < ioc->raid_data.pIocPg2->NumActiveVolumes; i++) { in mptsas_scan_sas_topology()
4004 sdev = scsi_device_lookup(ioc->sh, MPTSAS_RAID_CHANNEL, in mptsas_scan_sas_topology()
4005 ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID, 0); in mptsas_scan_sas_topology()
4011 "id %d\n", ioc->name, MPTSAS_RAID_CHANNEL, in mptsas_scan_sas_topology()
4012 ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID); in mptsas_scan_sas_topology()
4013 scsi_add_device(ioc->sh, MPTSAS_RAID_CHANNEL, in mptsas_scan_sas_topology()
4014 ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID, 0); in mptsas_scan_sas_topology()
4022 MPT_ADAPTER *ioc; in mptsas_handle_queue_full_event() local
4033 ioc = fw_event->ioc; in mptsas_handle_queue_full_event()
4040 mutex_lock(&ioc->sas_device_info_mutex); in mptsas_handle_queue_full_event()
4041 if (mptscsih_is_phys_disk(ioc, fw_channel, fw_id)) { in mptsas_handle_queue_full_event()
4042 list_for_each_entry(sas_info, &ioc->sas_device_info_list, in mptsas_handle_queue_full_event()
4056 list_for_each_entry(sas_info, &ioc->sas_device_info_list, in mptsas_handle_queue_full_event()
4073 mutex_unlock(&ioc->sas_device_info_mutex); in mptsas_handle_queue_full_event()
4076 shost_for_each_device(sdev, ioc->sh) { in mptsas_handle_queue_full_event()
4103 mptsas_free_fw_event(ioc, fw_event); in mptsas_handle_queue_full_event()
4108 mptsas_find_phyinfo_by_sas_address(MPT_ADAPTER *ioc, u64 sas_address) in mptsas_find_phyinfo_by_sas_address() argument
4114 mutex_lock(&ioc->sas_topology_mutex); in mptsas_find_phyinfo_by_sas_address()
4115 list_for_each_entry(port_info, &ioc->sas_topology, list) { in mptsas_find_phyinfo_by_sas_address()
4127 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_find_phyinfo_by_sas_address()
4140 mptsas_find_phyinfo_by_phys_disk_num(MPT_ADAPTER *ioc, u8 phys_disk_num, in mptsas_find_phyinfo_by_phys_disk_num() argument
4151 if (!ioc->raid_data.pIocPg3) in mptsas_find_phyinfo_by_phys_disk_num()
4154 num_paths = mpt_raid_phys_disk_get_num_paths(ioc, phys_disk_num); in mptsas_find_phyinfo_by_phys_disk_num()
4161 mpt_raid_phys_disk_pg1(ioc, phys_disk_num, phys_disk); in mptsas_find_phyinfo_by_phys_disk_num()
4170 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_find_phyinfo_by_phys_disk_num()
4185 mutex_lock(&ioc->sas_topology_mutex); in mptsas_find_phyinfo_by_phys_disk_num()
4186 list_for_each_entry(port_info, &ioc->sas_topology, list) { in mptsas_find_phyinfo_by_phys_disk_num()
4201 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_find_phyinfo_by_phys_disk_num()
4222 mptsas_adding_inactive_raid_components(MPT_ADAPTER *ioc, u8 channel, u8 id) in mptsas_adding_inactive_raid_components() argument
4241 if (mpt_config(ioc, &cfg) != 0) in mptsas_adding_inactive_raid_components()
4247 buffer = pci_alloc_consistent(ioc->pcidev, hdr.PageLength * 4, in mptsas_adding_inactive_raid_components()
4256 if (mpt_config(ioc, &cfg) != 0) in mptsas_adding_inactive_raid_components()
4268 if (mpt_raid_phys_disk_pg0(ioc, in mptsas_adding_inactive_raid_components()
4272 if (mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_adding_inactive_raid_components()
4287 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_adding_inactive_raid_components()
4289 mptsas_add_end_device(ioc, phy_info); in mptsas_adding_inactive_raid_components()
4294 pci_free_consistent(ioc->pcidev, hdr.PageLength * 4, buffer, in mptsas_adding_inactive_raid_components()
4301 mptsas_hotplug_work(MPT_ADAPTER *ioc, struct fw_event_work *fw_event, in mptsas_hotplug_work() argument
4315 if (!ioc->raid_data.pIocPg2) in mptsas_hotplug_work()
4318 for (i = 0; i < ioc->raid_data.pIocPg2->NumActiveVolumes; i++) { in mptsas_hotplug_work()
4319 if (ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID == in mptsas_hotplug_work()
4323 "volume_id\n", ioc->name); in mptsas_hotplug_work()
4324 mptsas_free_fw_event(ioc, fw_event); in mptsas_hotplug_work()
4328 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4333 mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_hotplug_work()
4349 phy_info = mptsas_refreshing_device_handles(ioc, &sas_device); in mptsas_hotplug_work()
4352 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_hotplug_work()
4354 "parent handle of device %x\n", ioc->name, in mptsas_hotplug_work()
4356 port_info = mptsas_find_portinfo_by_handle(ioc, in mptsas_hotplug_work()
4359 if (port_info == ioc->hba_port_info) in mptsas_hotplug_work()
4360 mptsas_probe_hba_phys(ioc); in mptsas_hotplug_work()
4362 mptsas_expander_refresh(ioc, port_info); in mptsas_hotplug_work()
4364 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4366 ioc->name, __func__, __LINE__)); in mptsas_hotplug_work()
4370 (ioc, &sas_device); in mptsas_hotplug_work()
4374 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4376 ioc->name, __func__, __LINE__)); in mptsas_hotplug_work()
4383 mptsas_add_end_device(ioc, phy_info); in mptsas_hotplug_work()
4387 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_hotplug_work()
4389 mptsas_del_end_device(ioc, phy_info); in mptsas_hotplug_work()
4394 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4397 ioc, hot_plug_info->phys_disk_num, in mptsas_hotplug_work()
4400 mptsas_del_end_device(ioc, phy_info); in mptsas_hotplug_work()
4405 if (mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_hotplug_work()
4409 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4410 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4423 ioc, sas_device.sas_address); in mptsas_hotplug_work()
4426 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4427 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4434 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4435 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4442 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4443 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4448 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4452 ioc->name, hot_plug_info->channel, hot_plug_info->id, in mptsas_hotplug_work()
4464 if (mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_hotplug_work()
4468 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4470 ioc->name, __func__, in mptsas_hotplug_work()
4482 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_hotplug_work()
4485 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4486 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4493 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4494 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4501 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4502 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4508 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4509 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4514 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4518 ioc->name, hot_plug_info->channel, hot_plug_info->id, in mptsas_hotplug_work()
4526 mptsas_add_device_component_by_fw(ioc, in mptsas_hotplug_work()
4532 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4534 "id %d\n", ioc->name, MPTSAS_RAID_CHANNEL, in mptsas_hotplug_work()
4536 scsi_add_device(ioc->sh, MPTSAS_RAID_CHANNEL, in mptsas_hotplug_work()
4542 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4544 "id %d\n", ioc->name, MPTSAS_RAID_CHANNEL, in mptsas_hotplug_work()
4552 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4553 mptsas_adding_inactive_raid_components(ioc, in mptsas_hotplug_work()
4561 mptsas_free_fw_event(ioc, fw_event); in mptsas_hotplug_work()
4567 MPT_ADAPTER *ioc; in mptsas_send_sas_event() local
4573 ioc = fw_event->ioc; in mptsas_send_sas_event()
4582 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_sas_event()
4588 mptbase_sas_persist_operation(ioc, in mptsas_send_sas_event()
4590 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_sas_event()
4611 mptsas_hotplug_work(ioc, fw_event, &hot_plug_info); in mptsas_send_sas_event()
4615 mptbase_sas_persist_operation(ioc, in mptsas_send_sas_event()
4617 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_sas_event()
4625 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_sas_event()
4633 MPT_ADAPTER *ioc; in mptsas_send_raid_event() local
4642 ioc = fw_event->ioc; in mptsas_send_raid_event()
4656 sdev = scsi_device_lookup(ioc->sh, MPTSAS_RAID_CHANNEL, in mptsas_send_raid_event()
4663 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Entering %s: " in mptsas_send_raid_event()
4664 "ReasonCode=%02x\n", ioc->name, __func__, in mptsas_send_raid_event()
4678 mpt_raid_phys_disk_pg0(ioc, in mptsas_send_raid_event()
4741 mptsas_hotplug_work(ioc, fw_event, &hot_plug_info); in mptsas_send_raid_event()
4743 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_raid_event()
4760 mptsas_issue_tm(MPT_ADAPTER *ioc, u8 type, u8 channel, u8 id, u64 lun, in mptsas_issue_tm() argument
4769 mf = mpt_get_msg_frame(mptsasDeviceResetCtx, ioc); in mptsas_issue_tm()
4772 dtmprintk(ioc, printk(MYIOC_s_WARN_FMT "TaskMgmt request: no " in mptsas_issue_tm()
4773 "msg frames!!\n", ioc->name)); in mptsas_issue_tm()
4777 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "TaskMgmt request: mr = %p, " in mptsas_issue_tm()
4779 "fw_id = %d, lun = %lld,\n\t task_context = 0x%x\n", ioc->name, mf, in mptsas_issue_tm()
4796 INITIALIZE_MGMT_STATUS(ioc->taskmgmt_cmds.status) in mptsas_issue_tm()
4797 CLEAR_MGMT_STATUS(ioc->internal_cmds.status) in mptsas_issue_tm()
4799 mpt_put_msg_frame_hi_pri(mptsasDeviceResetCtx, ioc, mf); in mptsas_issue_tm()
4802 timeleft = wait_for_completion_timeout(&ioc->taskmgmt_cmds.done, in mptsas_issue_tm()
4804 if (!(ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_COMMAND_GOOD)) { in mptsas_issue_tm()
4806 dtmprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_issue_tm()
4807 "TaskMgmt request: TIMED OUT!(mr=%p)\n", ioc->name, mf)); in mptsas_issue_tm()
4808 mpt_free_msg_frame(ioc, mf); in mptsas_issue_tm()
4809 if (ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_DID_IOCRESET) in mptsas_issue_tm()
4815 if (!(ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_RF_VALID)) { in mptsas_issue_tm()
4817 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_issue_tm()
4818 "TaskMgmt request: failed with no reply\n", ioc->name)); in mptsas_issue_tm()
4823 CLEAR_MGMT_STATUS(ioc->taskmgmt_cmds.status) in mptsas_issue_tm()
4836 MPT_ADAPTER *ioc = fw_event->ioc; in mptsas_broadcast_primitive_work() local
4849 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_broadcast_primitive_work()
4850 "%s - enter\n", ioc->name, __func__)); in mptsas_broadcast_primitive_work()
4852 mutex_lock(&ioc->taskmgmt_cmds.mutex); in mptsas_broadcast_primitive_work()
4853 if (mpt_set_taskmgmt_in_progress_flag(ioc) != 0) { in mptsas_broadcast_primitive_work()
4854 mutex_unlock(&ioc->taskmgmt_cmds.mutex); in mptsas_broadcast_primitive_work()
4855 mptsas_requeue_fw_event(ioc, fw_event, 1000); in mptsas_broadcast_primitive_work()
4862 mpt_findImVolumes(ioc); in mptsas_broadcast_primitive_work()
4863 pScsiTmReply = (SCSITaskMgmtReply_t *) ioc->taskmgmt_cmds.reply; in mptsas_broadcast_primitive_work()
4865 for (ii = 0; ii < ioc->req_depth; ii++) { in mptsas_broadcast_primitive_work()
4866 if (ioc->fw_events_off) in mptsas_broadcast_primitive_work()
4868 sc = mptscsih_get_scsi_lookup(ioc, ii); in mptsas_broadcast_primitive_work()
4871 mf = MPT_INDEX_2_MFPTR(ioc, ii); in mptsas_broadcast_primitive_work()
4885 if (mptsas_issue_tm(ioc, MPI_SCSITASKMGMT_TASKTYPE_QUERY_TASK, in mptsas_broadcast_primitive_work()
4897 if (mptsas_issue_tm(ioc, in mptsas_broadcast_primitive_work()
4906 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_broadcast_primitive_work()
4908 ioc->name, __func__, query_count, termination_count)); in mptsas_broadcast_primitive_work()
4910 ioc->broadcast_aen_busy = 0; in mptsas_broadcast_primitive_work()
4911 mpt_clear_taskmgmt_in_progress_flag(ioc); in mptsas_broadcast_primitive_work()
4912 mutex_unlock(&ioc->taskmgmt_cmds.mutex); in mptsas_broadcast_primitive_work()
4917 ioc->name, __func__, mpt_GetIocState(ioc, 0)); in mptsas_broadcast_primitive_work()
4918 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP); in mptsas_broadcast_primitive_work()
4920 mptsas_free_fw_event(ioc, fw_event); in mptsas_broadcast_primitive_work()
4934 MPT_ADAPTER *ioc; in mptsas_send_ir2_event() local
4940 ioc = fw_event->ioc; in mptsas_send_ir2_event()
4944 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Entering %s: " in mptsas_send_ir2_event()
4945 "ReasonCode=%02x\n", ioc->name, __func__, reasonCode)); in mptsas_send_ir2_event()
4960 mpt_raid_phys_disk_pg0(ioc, in mptsas_send_ir2_event()
4966 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_ir2_event()
4969 mptsas_hotplug_work(ioc, fw_event, &hot_plug_info); in mptsas_send_ir2_event()
4973 mptsas_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *reply) in mptsas_event_process() argument
4980 if (ioc->bus_type != SAS) in mptsas_event_process()
4984 if (ioc->fw_events_off) in mptsas_event_process()
4996 if (ioc->broadcast_aen_busy) in mptsas_event_process()
4998 ioc->broadcast_aen_busy = 1; in mptsas_event_process()
5010 mptsas_target_reset_queue(ioc, sas_event_data); in mptsas_event_process()
5015 ioc->device_missing_delay && in mptsas_event_process()
5023 vtarget = mptsas_find_vtarget(ioc, channel, id); in mptsas_event_process()
5025 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_event_process()
5028 "fw_id %d fw_channel %d\n", ioc->name, in mptsas_event_process()
5032 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_event_process()
5034 ioc->name)); in mptsas_event_process()
5036 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_event_process()
5038 ioc->name)); in mptsas_event_process()
5053 if (ioc->old_sas_discovery_protocal) in mptsas_event_process()
5058 ioc->device_missing_delay) in mptsas_event_process()
5059 delay = HZ * ioc->device_missing_delay; in mptsas_event_process()
5069 ioc->sas_discovery_quiesce_io = discovery_status ? 1 : 0; in mptsas_event_process()
5070 if (ioc->old_sas_discovery_protocal && !discovery_status) in mptsas_event_process()
5071 mptsas_queue_rescan(ioc); in mptsas_event_process()
5088 printk(MYIOC_s_WARN_FMT "%s: failed at (line=%d)\n", ioc->name, in mptsas_event_process()
5094 fw_event->ioc = ioc; in mptsas_event_process()
5095 mptsas_add_fw_event(ioc, fw_event, delay); in mptsas_event_process()
5101 static void mptsas_volume_delete(MPT_ADAPTER *ioc, u8 id) in mptsas_volume_delete() argument
5106 sdev = scsi_device_lookup(ioc->sh, MPTSAS_RAID_CHANNEL, id, 0); in mptsas_volume_delete()
5109 if (!ioc->raid_data.pIocPg2) in mptsas_volume_delete()
5111 if (!ioc->raid_data.pIocPg2->NumActiveVolumes) in mptsas_volume_delete()
5113 for (i = 0; i < ioc->raid_data.pIocPg2->NumActiveVolumes; i++) in mptsas_volume_delete()
5114 if (ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID == id) in mptsas_volume_delete()
5118 "id %d\n", ioc->name, MPTSAS_RAID_CHANNEL, id); in mptsas_volume_delete()
5129 MPT_ADAPTER *ioc; in mptsas_probe() local
5142 ioc = pci_get_drvdata(pdev); in mptsas_probe()
5143 mptsas_fw_event_off(ioc); in mptsas_probe()
5144 ioc->DoneCtx = mptsasDoneCtx; in mptsas_probe()
5145 ioc->TaskCtx = mptsasTaskCtx; in mptsas_probe()
5146 ioc->InternalCtx = mptsasInternalCtx; in mptsas_probe()
5147 ioc->schedule_target_reset = &mptsas_schedule_target_reset; in mptsas_probe()
5148 ioc->schedule_dead_ioc_flush_running_cmds = in mptsas_probe()
5152 if (ioc->last_state != MPI_IOC_STATE_OPERATIONAL) { in mptsas_probe()
5155 ioc->name); in mptsas_probe()
5160 if (!ioc->active) { in mptsas_probe()
5162 ioc->name); in mptsas_probe()
5170 for (ii = 0; ii < ioc->facts.NumberOfPorts; ii++) { in mptsas_probe()
5171 if (ioc->pfacts[ii].ProtocolFlags & in mptsas_probe()
5179 "is NOT enabled!\n", ioc->name, ioc); in mptsas_probe()
5187 ioc->name); in mptsas_probe()
5192 spin_lock_irqsave(&ioc->FreeQlock, flags); in mptsas_probe()
5196 ioc->sh = sh; in mptsas_probe()
5204 sh->can_queue = min_t(int, ioc->req_depth - 10, sh->can_queue); in mptsas_probe()
5211 sh->unique_id = ioc->id; in mptsas_probe()
5213 INIT_LIST_HEAD(&ioc->sas_topology); in mptsas_probe()
5214 mutex_init(&ioc->sas_topology_mutex); in mptsas_probe()
5215 mutex_init(&ioc->sas_discovery_mutex); in mptsas_probe()
5216 mutex_init(&ioc->sas_mgmt.mutex); in mptsas_probe()
5217 init_completion(&ioc->sas_mgmt.done); in mptsas_probe()
5228 scale = ioc->req_sz/ioc->SGE_size; in mptsas_probe()
5229 if (ioc->sg_addr_size == sizeof(u64)) { in mptsas_probe()
5231 (ioc->facts.MaxChainDepth-1) + scale + in mptsas_probe()
5232 (ioc->req_sz - 60) / ioc->SGE_size; in mptsas_probe()
5235 (ioc->facts.MaxChainDepth-1) + scale + in mptsas_probe()
5236 (ioc->req_sz - 64) / ioc->SGE_size; in mptsas_probe()
5241 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_probe()
5243 ioc->name, numSGE, sh->sg_tablesize)); in mptsas_probe()
5252 "Range from 64 to 8192\n", ioc->name, in mptsas_probe()
5256 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_probe()
5258 ioc->name, mpt_loadtime_max_sectors, sh->max_sectors)); in mptsas_probe()
5263 hd->ioc = ioc; in mptsas_probe()
5268 ioc->ScsiLookup = kcalloc(ioc->req_depth, sizeof(void *), GFP_ATOMIC); in mptsas_probe()
5269 if (!ioc->ScsiLookup) { in mptsas_probe()
5271 spin_unlock_irqrestore(&ioc->FreeQlock, flags); in mptsas_probe()
5274 spin_lock_init(&ioc->scsi_lookup_lock); in mptsas_probe()
5276 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ScsiLookup @ %p\n", in mptsas_probe()
5277 ioc->name, ioc->ScsiLookup)); in mptsas_probe()
5279 ioc->sas_data.ptClear = mpt_pt_clear; in mptsas_probe()
5283 INIT_LIST_HEAD(&ioc->sas_device_info_list); in mptsas_probe()
5284 mutex_init(&ioc->sas_device_info_mutex); in mptsas_probe()
5286 spin_unlock_irqrestore(&ioc->FreeQlock, flags); in mptsas_probe()
5288 if (ioc->sas_data.ptClear==1) { in mptsas_probe()
5290 ioc, MPI_SAS_OP_CLEAR_ALL_PERSISTENT); in mptsas_probe()
5293 error = scsi_add_host(sh, &ioc->pcidev->dev); in mptsas_probe()
5295 dprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_probe()
5296 "scsi_add_host failed\n", ioc->name)); in mptsas_probe()
5301 if ((ioc->facts.HeaderVersion >> 8) < 0xE) in mptsas_probe()
5302 ioc->old_sas_discovery_protocal = 1; in mptsas_probe()
5303 mptsas_scan_sas_topology(ioc); in mptsas_probe()
5304 mptsas_fw_event_on(ioc); in mptsas_probe()
5316 MPT_ADAPTER *ioc = pci_get_drvdata(pdev); in mptsas_shutdown() local
5318 mptsas_fw_event_off(ioc); in mptsas_shutdown()
5319 mptsas_cleanup_fw_event_q(ioc); in mptsas_shutdown()
5324 MPT_ADAPTER *ioc = pci_get_drvdata(pdev); in mptsas_remove() local
5328 if (!ioc->sh) { in mptsas_remove()
5329 printk(MYIOC_s_INFO_FMT "IOC is in Target mode\n", ioc->name); in mptsas_remove()
5336 mptsas_del_device_components(ioc); in mptsas_remove()
5338 ioc->sas_discovery_ignore_events = 1; in mptsas_remove()
5339 sas_remove_host(ioc->sh); in mptsas_remove()
5341 mutex_lock(&ioc->sas_topology_mutex); in mptsas_remove()
5342 list_for_each_entry_safe(p, n, &ioc->sas_topology, list) { in mptsas_remove()
5345 mptsas_port_delete(ioc, p->phy_info[i].port_details); in mptsas_remove()
5350 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_remove()
5351 ioc->hba_port_info = NULL; in mptsas_remove()