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()
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__); in mptsas_smp_handler()
2237 ioc->name, __func__, blk_rq_bytes(req), blk_rq_bytes(rsp)); in mptsas_smp_handler()
2241 ret = mutex_lock_interruptible(&ioc->sas_mgmt.mutex); in mptsas_smp_handler()
2245 mf = mpt_get_msg_frame(mptsasMgmtCtx, ioc); in mptsas_smp_handler()
2262 mutex_lock(&ioc->sas_topology_mutex); in mptsas_smp_handler()
2263 port_info = ioc->hba_port_info; in mptsas_smp_handler()
2267 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_smp_handler()
2282 dma_addr_out = pci_map_single(ioc->pcidev, bio_data(req->bio), in mptsas_smp_handler()
2286 ioc->add_sge(psge, flagsLength, dma_addr_out); in mptsas_smp_handler()
2287 psge += ioc->SGE_size; in mptsas_smp_handler()
2297 dma_addr_in = pci_map_single(ioc->pcidev, bio_data(rsp->bio), in mptsas_smp_handler()
2301 ioc->add_sge(psge, flagsLength, dma_addr_in); in mptsas_smp_handler()
2303 INITIALIZE_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_smp_handler()
2304 mpt_put_msg_frame(mptsasMgmtCtx, ioc, mf); in mptsas_smp_handler()
2306 timeleft = wait_for_completion_timeout(&ioc->sas_mgmt.done, 10 * HZ); in mptsas_smp_handler()
2307 if (!(ioc->sas_mgmt.status & MPT_MGMT_STATUS_COMMAND_GOOD)) { in mptsas_smp_handler()
2309 mpt_free_msg_frame(ioc, mf); in mptsas_smp_handler()
2311 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_DID_IOCRESET) in mptsas_smp_handler()
2314 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP); in mptsas_smp_handler()
2319 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_RF_VALID) { in mptsas_smp_handler()
2322 smprep = (SmpPassthroughReply_t *)ioc->sas_mgmt.reply; in mptsas_smp_handler()
2330 ioc->name, __func__); in mptsas_smp_handler()
2335 pci_unmap_single(ioc->pcidev, dma_addr_out, blk_rq_bytes(req), in mptsas_smp_handler()
2338 pci_unmap_single(ioc->pcidev, dma_addr_in, blk_rq_bytes(rsp), in mptsas_smp_handler()
2342 mpt_free_msg_frame(ioc, mf); in mptsas_smp_handler()
2344 CLEAR_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_smp_handler()
2345 mutex_unlock(&ioc->sas_mgmt.mutex); in mptsas_smp_handler()
2361 mptsas_sas_io_unit_pg0(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info) in mptsas_sas_io_unit_pg0() argument
2384 error = mpt_config(ioc, &cfg); in mptsas_sas_io_unit_pg0()
2392 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_io_unit_pg0()
2402 error = mpt_config(ioc, &cfg); in mptsas_sas_io_unit_pg0()
2414 ioc->nvdata_version_persistent = in mptsas_sas_io_unit_pg0()
2416 ioc->nvdata_version_default = in mptsas_sas_io_unit_pg0()
2420 mptsas_print_phy_data(ioc, &buffer->PhyData[i]); in mptsas_sas_io_unit_pg0()
2432 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_io_unit_pg0()
2439 mptsas_sas_io_unit_pg1(MPT_ADAPTER *ioc) in mptsas_sas_io_unit_pg1() argument
2459 error = mpt_config(ioc, &cfg); in mptsas_sas_io_unit_pg1()
2467 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_io_unit_pg1()
2477 error = mpt_config(ioc, &cfg); in mptsas_sas_io_unit_pg1()
2481 ioc->io_missing_delay = in mptsas_sas_io_unit_pg1()
2484 ioc->device_missing_delay = (device_missing_delay & MPI_SAS_IOUNIT1_REPORT_MISSING_UNIT_16) ? in mptsas_sas_io_unit_pg1()
2489 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_io_unit_pg1()
2496 mptsas_sas_phy_pg0(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, in mptsas_sas_phy_pg0() argument
2522 error = mpt_config(ioc, &cfg); in mptsas_sas_phy_pg0()
2531 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_phy_pg0()
2541 error = mpt_config(ioc, &cfg); in mptsas_sas_phy_pg0()
2545 mptsas_print_phy_pg0(ioc, buffer); in mptsas_sas_phy_pg0()
2553 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_phy_pg0()
2560 mptsas_sas_device_pg0(MPT_ADAPTER *ioc, struct mptsas_devinfo *device_info, in mptsas_sas_device_pg0() argument
2586 error = mpt_config(ioc, &cfg); in mptsas_sas_device_pg0()
2594 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_device_pg0()
2604 error = mpt_config(ioc, &cfg); in mptsas_sas_device_pg0()
2614 mptsas_print_device_pg0(ioc, buffer); in mptsas_sas_device_pg0()
2634 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_device_pg0()
2641 mptsas_sas_expander_pg0(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info, in mptsas_sas_expander_pg0() argument
2668 error = mpt_config(ioc, &cfg); in mptsas_sas_expander_pg0()
2677 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_expander_pg0()
2687 error = mpt_config(ioc, &cfg); in mptsas_sas_expander_pg0()
2717 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_expander_pg0()
2724 mptsas_sas_expander_pg1(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info, in mptsas_sas_expander_pg1() argument
2748 error = mpt_config(ioc, &cfg); in mptsas_sas_expander_pg1()
2757 buffer = pci_alloc_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_expander_pg1()
2767 error = mpt_config(ioc, &cfg); in mptsas_sas_expander_pg1()
2778 mptsas_print_expander_pg1(ioc, buffer); in mptsas_sas_expander_pg1()
2790 pci_free_consistent(ioc->pcidev, hdr.ExtPageLength * 4, in mptsas_sas_expander_pg1()
2834 mptsas_exp_repmanufacture_info(MPT_ADAPTER *ioc, in mptsas_exp_repmanufacture_info() argument
2851 spin_lock_irqsave(&ioc->taskmgmt_lock, flags); in mptsas_exp_repmanufacture_info()
2852 if (ioc->ioc_reset_in_progress) { in mptsas_exp_repmanufacture_info()
2853 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptsas_exp_repmanufacture_info()
2855 __func__, ioc->name); in mptsas_exp_repmanufacture_info()
2858 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptsas_exp_repmanufacture_info()
2860 ret = mutex_lock_interruptible(&ioc->sas_mgmt.mutex); in mptsas_exp_repmanufacture_info()
2864 mf = mpt_get_msg_frame(mptsasMgmtCtx, ioc); in mptsas_exp_repmanufacture_info()
2875 data_out = pci_alloc_consistent(ioc->pcidev, sz, &data_out_dma); in mptsas_exp_repmanufacture_info()
2904 ioc->add_sge(psge, flagsLength, data_out_dma); in mptsas_exp_repmanufacture_info()
2905 psge += ioc->SGE_size; in mptsas_exp_repmanufacture_info()
2913 ioc->add_sge(psge, flagsLength, data_out_dma + in mptsas_exp_repmanufacture_info()
2916 INITIALIZE_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_exp_repmanufacture_info()
2917 mpt_put_msg_frame(mptsasMgmtCtx, ioc, mf); in mptsas_exp_repmanufacture_info()
2919 timeleft = wait_for_completion_timeout(&ioc->sas_mgmt.done, 10 * HZ); in mptsas_exp_repmanufacture_info()
2920 if (!(ioc->sas_mgmt.status & MPT_MGMT_STATUS_COMMAND_GOOD)) { in mptsas_exp_repmanufacture_info()
2922 mpt_free_msg_frame(ioc, mf); in mptsas_exp_repmanufacture_info()
2924 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_DID_IOCRESET) in mptsas_exp_repmanufacture_info()
2927 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP); in mptsas_exp_repmanufacture_info()
2933 if (ioc->sas_mgmt.status & MPT_MGMT_STATUS_RF_VALID) { in mptsas_exp_repmanufacture_info()
2936 smprep = (SmpPassthroughReply_t *)ioc->sas_mgmt.reply; in mptsas_exp_repmanufacture_info()
2961 ioc->name, __func__); in mptsas_exp_repmanufacture_info()
2966 pci_free_consistent(ioc->pcidev, sz, data_out, data_out_dma); in mptsas_exp_repmanufacture_info()
2969 mpt_free_msg_frame(ioc, mf); in mptsas_exp_repmanufacture_info()
2971 CLEAR_MGMT_STATUS(ioc->sas_mgmt.status) in mptsas_exp_repmanufacture_info()
2972 mutex_unlock(&ioc->sas_mgmt.mutex); in mptsas_exp_repmanufacture_info()
3039 MPT_ADAPTER *ioc; in mptsas_probe_one_phy() local
3160 ioc = phy_to_ioc(phy_info->phy); in mptsas_probe_one_phy()
3172 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_probe_one_phy()
3173 "%s: exit at line=%d\n", ioc->name, in mptsas_probe_one_phy()
3177 mptsas_set_port(ioc, phy_info, port); in mptsas_probe_one_phy()
3178 devtprintk(ioc, dev_printk(KERN_DEBUG, &port->dev, in mptsas_probe_one_phy()
3180 ioc->name, port->port_identifier, in mptsas_probe_one_phy()
3184 dsaswideprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_probe_one_phy()
3186 ioc->name, phy_info->phy_id)); in mptsas_probe_one_phy()
3189 devtprintk(ioc, dev_printk(KERN_DEBUG, &phy_info->phy->dev, in mptsas_probe_one_phy()
3190 MYIOC_s_FMT "add phy %d, phy-obj (0x%p)\n", ioc->name, in mptsas_probe_one_phy()
3215 port_info = ioc->hba_port_info; in mptsas_probe_one_phy()
3246 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_probe_one_phy()
3247 "%s: exit at line=%d\n", ioc->name, in mptsas_probe_one_phy()
3255 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_probe_one_phy()
3256 "%s: exit at line=%d\n", ioc->name, in mptsas_probe_one_phy()
3261 mptsas_set_rphy(ioc, phy_info, rphy); in mptsas_probe_one_phy()
3264 mptsas_exp_repmanufacture_info(ioc, in mptsas_probe_one_phy()
3271 vtarget = mptsas_find_vtarget(ioc, in mptsas_probe_one_phy()
3284 mptsas_probe_hba_phys(MPT_ADAPTER *ioc) in mptsas_probe_hba_phys() argument
3293 error = mptsas_sas_io_unit_pg0(ioc, hba); in mptsas_probe_hba_phys()
3297 mptsas_sas_io_unit_pg1(ioc); in mptsas_probe_hba_phys()
3298 mutex_lock(&ioc->sas_topology_mutex); in mptsas_probe_hba_phys()
3299 port_info = ioc->hba_port_info; in mptsas_probe_hba_phys()
3301 ioc->hba_port_info = port_info = hba; in mptsas_probe_hba_phys()
3302 ioc->hba_port_num_phy = port_info->num_phys; in mptsas_probe_hba_phys()
3303 list_add_tail(&port_info->list, &ioc->sas_topology); in mptsas_probe_hba_phys()
3317 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_probe_hba_phys()
3319 ioc->num_ports = port_info->num_phys; in mptsas_probe_hba_phys()
3322 mptsas_sas_phy_pg0(ioc, &port_info->phy_info[i], in mptsas_probe_hba_phys()
3327 mptsas_sas_device_pg0(ioc, &port_info->phy_info[i].identify, in mptsas_probe_hba_phys()
3331 if (!ioc->hba_port_sas_addr) in mptsas_probe_hba_phys()
3332 ioc->hba_port_sas_addr = in mptsas_probe_hba_phys()
3337 mptsas_sas_device_pg0(ioc, in mptsas_probe_hba_phys()
3344 mptsas_setup_wide_ports(ioc, port_info); in mptsas_probe_hba_phys()
3346 for (i = 0; i < port_info->num_phys; i++, ioc->sas_index++) in mptsas_probe_hba_phys()
3347 mptsas_probe_one_phy(&ioc->sh->shost_gendev, in mptsas_probe_hba_phys()
3348 &port_info->phy_info[i], ioc->sas_index, 1); in mptsas_probe_hba_phys()
3359 mptsas_expander_refresh(MPT_ADAPTER *ioc, struct mptsas_portinfo *port_info) in mptsas_expander_refresh() argument
3371 mptsas_sas_expander_pg1(ioc, &port_info->phy_info[i], in mptsas_expander_refresh()
3375 mptsas_sas_device_pg0(ioc, in mptsas_expander_refresh()
3384 mptsas_sas_device_pg0(ioc, in mptsas_expander_refresh()
3394 mutex_lock(&ioc->sas_topology_mutex); in mptsas_expander_refresh()
3395 parent = mptsas_find_portinfo_by_handle(ioc, in mptsas_expander_refresh()
3398 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_expander_refresh()
3408 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_expander_refresh()
3410 mptsas_setup_wide_ports(ioc, port_info); in mptsas_expander_refresh()
3411 for (i = 0; i < port_info->num_phys; i++, ioc->sas_index++) in mptsas_expander_refresh()
3413 ioc->sas_index, 0); in mptsas_expander_refresh()
3417 mptsas_expander_event_add(MPT_ADAPTER *ioc, in mptsas_expander_event_add() argument
3444 mutex_lock(&ioc->sas_topology_mutex); in mptsas_expander_event_add()
3445 list_add_tail(&port_info->list, &ioc->sas_topology); in mptsas_expander_event_add()
3446 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_expander_event_add()
3449 "sas_addr (0x%llx)\n", ioc->name, port_info->num_phys, in mptsas_expander_event_add()
3452 mptsas_expander_refresh(ioc, port_info); in mptsas_expander_event_add()
3462 mptsas_delete_expander_siblings(MPT_ADAPTER *ioc, struct mptsas_portinfo in mptsas_delete_expander_siblings() argument
3476 mptsas_del_end_device(ioc, phy_info); in mptsas_delete_expander_siblings()
3488 port_info = mptsas_find_portinfo_by_sas_address(ioc, in mptsas_delete_expander_siblings()
3498 mptsas_expander_delete(ioc, port_info, 1); in mptsas_delete_expander_siblings()
3512 static void mptsas_expander_delete(MPT_ADAPTER *ioc, in mptsas_expander_delete() argument
3528 mptsas_sas_expander_pg0(ioc, &buffer, in mptsas_expander_delete()
3546 parent = mptsas_find_portinfo_by_handle(ioc, in mptsas_expander_delete()
3548 mptsas_delete_expander_siblings(ioc, parent, port_info); in mptsas_expander_delete()
3569 MYIOC_s_FMT "delete phy %d, phy-obj (0x%p)\n", ioc->name, in mptsas_expander_delete()
3576 ioc->name, port->port_identifier, in mptsas_expander_delete()
3579 mptsas_port_delete(ioc, port_details); in mptsas_expander_delete()
3584 "sas_addr (0x%llx)\n", ioc->name, port_info->num_phys, in mptsas_expander_delete()
3608 MPT_ADAPTER *ioc; in mptsas_send_expander_event() local
3614 ioc = fw_event->ioc; in mptsas_send_expander_event()
3619 port_info = mptsas_find_portinfo_by_sas_address(ioc, sas_address); in mptsas_send_expander_event()
3632 mptsas_expander_refresh(ioc, port_info); in mptsas_send_expander_event()
3634 mptsas_expander_event_add(ioc, expander_data); in mptsas_send_expander_event()
3637 mptsas_expander_delete(ioc, port_info, 0); in mptsas_send_expander_event()
3639 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_expander_event()
3650 mptsas_expander_add(MPT_ADAPTER *ioc, u16 handle) in mptsas_expander_add() argument
3655 if ((mptsas_sas_expander_pg0(ioc, &buffer, in mptsas_expander_add()
3662 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_expander_add()
3663 "%s: exit at line=%d\n", ioc->name, in mptsas_expander_add()
3671 mutex_lock(&ioc->sas_topology_mutex); in mptsas_expander_add()
3672 list_add_tail(&port_info->list, &ioc->sas_topology); in mptsas_expander_add()
3673 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_expander_add()
3675 "sas_addr (0x%llx)\n", ioc->name, port_info->num_phys, in mptsas_expander_add()
3677 mptsas_expander_refresh(ioc, port_info); in mptsas_expander_add()
3684 MPT_ADAPTER *ioc; in mptsas_send_link_status_event() local
3692 ioc = fw_event->ioc; in mptsas_send_link_status_event()
3700 port_info = mptsas_find_portinfo_by_sas_address(ioc, sas_address); in mptsas_send_link_status_event()
3712 if (ioc->old_sas_discovery_protocal) { in mptsas_send_link_status_event()
3713 port_info = mptsas_expander_add(ioc, in mptsas_send_link_status_event()
3721 if (port_info == ioc->hba_port_info) in mptsas_send_link_status_event()
3722 mptsas_probe_hba_phys(ioc); in mptsas_send_link_status_event()
3724 mptsas_expander_refresh(ioc, port_info); in mptsas_send_link_status_event()
3736 if (ioc->device_missing_delay && in mptsas_send_link_status_event()
3743 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_send_link_status_event()
3745 ioc->name, phy_info->attached.id, in mptsas_send_link_status_event()
3748 shost_for_each_device(sdev, ioc->sh) { in mptsas_send_link_status_event()
3760 devtprintk(ioc, in mptsas_send_link_status_event()
3763 "%d\n", ioc->name, in mptsas_send_link_status_event()
3771 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_link_status_event()
3775 mptsas_not_responding_devices(MPT_ADAPTER *ioc) in mptsas_not_responding_devices() argument
3787 mpt_findImVolumes(ioc); in mptsas_not_responding_devices()
3789 spin_lock_irqsave(&ioc->taskmgmt_lock, flags); in mptsas_not_responding_devices()
3790 if (ioc->ioc_reset_in_progress) { in mptsas_not_responding_devices()
3791 dfailprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_not_responding_devices()
3792 "%s: exiting due to a parallel reset \n", ioc->name, in mptsas_not_responding_devices()
3794 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptsas_not_responding_devices()
3797 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptsas_not_responding_devices()
3800 mutex_lock(&ioc->sas_device_info_mutex); in mptsas_not_responding_devices()
3802 list_for_each_entry(sas_info, &ioc->sas_device_info_list, list) { in mptsas_not_responding_devices()
3809 retval = mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_not_responding_devices()
3818 spin_lock_irqsave(&ioc->taskmgmt_lock, flags); in mptsas_not_responding_devices()
3819 if (ioc->ioc_reset_in_progress) { in mptsas_not_responding_devices()
3820 dfailprintk(ioc, in mptsas_not_responding_devices()
3823 ioc->name, __func__)); in mptsas_not_responding_devices()
3825 (&ioc->taskmgmt_lock, flags); in mptsas_not_responding_devices()
3826 mutex_unlock(&ioc-> in mptsas_not_responding_devices()
3830 spin_unlock_irqrestore(&ioc->taskmgmt_lock, in mptsas_not_responding_devices()
3839 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_not_responding_devices()
3842 ioc->name, __func__, in mptsas_not_responding_devices()
3848 vtarget = mptsas_find_vtarget(ioc, in mptsas_not_responding_devices()
3854 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_not_responding_devices()
3857 mptsas_del_end_device(ioc, phy_info); in mptsas_not_responding_devices()
3860 mptsas_volume_delete(ioc, sas_info->fw.id); in mptsas_not_responding_devices()
3862 mutex_unlock(&ioc->sas_device_info_mutex); in mptsas_not_responding_devices()
3865 mutex_lock(&ioc->sas_topology_mutex); in mptsas_not_responding_devices()
3867 list_for_each_entry(port_info, &ioc->sas_topology, list) { in mptsas_not_responding_devices()
3874 while (!mptsas_sas_expander_pg0(ioc, &buffer, in mptsas_not_responding_devices()
3888 mptsas_expander_delete(ioc, port_info, 0); in mptsas_not_responding_devices()
3892 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_not_responding_devices()
3901 mptsas_probe_expanders(MPT_ADAPTER *ioc) in mptsas_probe_expanders() argument
3908 while (!mptsas_sas_expander_pg0(ioc, &buffer, in mptsas_probe_expanders()
3913 port_info = mptsas_find_portinfo_by_sas_address(ioc, in mptsas_probe_expanders()
3923 mptsas_expander_refresh(ioc, port_info); in mptsas_probe_expanders()
3930 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_probe_expanders()
3931 "%s: exit at line=%d\n", ioc->name, in mptsas_probe_expanders()
3939 mutex_lock(&ioc->sas_topology_mutex); in mptsas_probe_expanders()
3940 list_add_tail(&port_info->list, &ioc->sas_topology); in mptsas_probe_expanders()
3941 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_probe_expanders()
3943 "sas_addr (0x%llx)\n", ioc->name, port_info->num_phys, in mptsas_probe_expanders()
3945 mptsas_expander_refresh(ioc, port_info); in mptsas_probe_expanders()
3950 mptsas_probe_devices(MPT_ADAPTER *ioc) in mptsas_probe_devices() argument
3957 while (!(mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_probe_devices()
3975 phy_info = mptsas_refreshing_device_handles(ioc, &sas_device); in mptsas_probe_devices()
3982 mptsas_add_end_device(ioc, phy_info); in mptsas_probe_devices()
3993 mptsas_scan_sas_topology(MPT_ADAPTER *ioc) in mptsas_scan_sas_topology() argument
3998 mptsas_probe_hba_phys(ioc); in mptsas_scan_sas_topology()
3999 mptsas_probe_expanders(ioc); in mptsas_scan_sas_topology()
4000 mptsas_probe_devices(ioc); in mptsas_scan_sas_topology()
4005 if (!ioc->ir_firmware || !ioc->raid_data.pIocPg2 || in mptsas_scan_sas_topology()
4006 !ioc->raid_data.pIocPg2->NumActiveVolumes) in mptsas_scan_sas_topology()
4008 for (i = 0; i < ioc->raid_data.pIocPg2->NumActiveVolumes; i++) { in mptsas_scan_sas_topology()
4009 sdev = scsi_device_lookup(ioc->sh, MPTSAS_RAID_CHANNEL, in mptsas_scan_sas_topology()
4010 ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID, 0); in mptsas_scan_sas_topology()
4016 "id %d\n", ioc->name, MPTSAS_RAID_CHANNEL, in mptsas_scan_sas_topology()
4017 ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID); in mptsas_scan_sas_topology()
4018 scsi_add_device(ioc->sh, MPTSAS_RAID_CHANNEL, in mptsas_scan_sas_topology()
4019 ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID, 0); in mptsas_scan_sas_topology()
4027 MPT_ADAPTER *ioc; in mptsas_handle_queue_full_event() local
4038 ioc = fw_event->ioc; in mptsas_handle_queue_full_event()
4045 mutex_lock(&ioc->sas_device_info_mutex); in mptsas_handle_queue_full_event()
4046 if (mptscsih_is_phys_disk(ioc, fw_channel, fw_id)) { in mptsas_handle_queue_full_event()
4047 list_for_each_entry(sas_info, &ioc->sas_device_info_list, in mptsas_handle_queue_full_event()
4061 list_for_each_entry(sas_info, &ioc->sas_device_info_list, in mptsas_handle_queue_full_event()
4078 mutex_unlock(&ioc->sas_device_info_mutex); in mptsas_handle_queue_full_event()
4081 shost_for_each_device(sdev, ioc->sh) { in mptsas_handle_queue_full_event()
4108 mptsas_free_fw_event(ioc, fw_event); in mptsas_handle_queue_full_event()
4113 mptsas_find_phyinfo_by_sas_address(MPT_ADAPTER *ioc, u64 sas_address) in mptsas_find_phyinfo_by_sas_address() argument
4119 mutex_lock(&ioc->sas_topology_mutex); in mptsas_find_phyinfo_by_sas_address()
4120 list_for_each_entry(port_info, &ioc->sas_topology, list) { in mptsas_find_phyinfo_by_sas_address()
4132 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_find_phyinfo_by_sas_address()
4145 mptsas_find_phyinfo_by_phys_disk_num(MPT_ADAPTER *ioc, u8 phys_disk_num, in mptsas_find_phyinfo_by_phys_disk_num() argument
4156 if (!ioc->raid_data.pIocPg3) in mptsas_find_phyinfo_by_phys_disk_num()
4159 num_paths = mpt_raid_phys_disk_get_num_paths(ioc, phys_disk_num); in mptsas_find_phyinfo_by_phys_disk_num()
4166 mpt_raid_phys_disk_pg1(ioc, phys_disk_num, phys_disk); in mptsas_find_phyinfo_by_phys_disk_num()
4175 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_find_phyinfo_by_phys_disk_num()
4190 mutex_lock(&ioc->sas_topology_mutex); in mptsas_find_phyinfo_by_phys_disk_num()
4191 list_for_each_entry(port_info, &ioc->sas_topology, list) { in mptsas_find_phyinfo_by_phys_disk_num()
4206 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_find_phyinfo_by_phys_disk_num()
4227 mptsas_adding_inactive_raid_components(MPT_ADAPTER *ioc, u8 channel, u8 id) in mptsas_adding_inactive_raid_components() argument
4246 if (mpt_config(ioc, &cfg) != 0) in mptsas_adding_inactive_raid_components()
4252 buffer = pci_alloc_consistent(ioc->pcidev, hdr.PageLength * 4, in mptsas_adding_inactive_raid_components()
4261 if (mpt_config(ioc, &cfg) != 0) in mptsas_adding_inactive_raid_components()
4273 if (mpt_raid_phys_disk_pg0(ioc, in mptsas_adding_inactive_raid_components()
4277 if (mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_adding_inactive_raid_components()
4292 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_adding_inactive_raid_components()
4294 mptsas_add_end_device(ioc, phy_info); in mptsas_adding_inactive_raid_components()
4299 pci_free_consistent(ioc->pcidev, hdr.PageLength * 4, buffer, in mptsas_adding_inactive_raid_components()
4306 mptsas_hotplug_work(MPT_ADAPTER *ioc, struct fw_event_work *fw_event, in mptsas_hotplug_work() argument
4320 if (!ioc->raid_data.pIocPg2) in mptsas_hotplug_work()
4323 for (i = 0; i < ioc->raid_data.pIocPg2->NumActiveVolumes; i++) { in mptsas_hotplug_work()
4324 if (ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID == in mptsas_hotplug_work()
4328 "volume_id\n", ioc->name); in mptsas_hotplug_work()
4329 mptsas_free_fw_event(ioc, fw_event); in mptsas_hotplug_work()
4333 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4337 mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_hotplug_work()
4353 phy_info = mptsas_refreshing_device_handles(ioc, &sas_device); in mptsas_hotplug_work()
4357 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_hotplug_work()
4359 "parent handle of device %x\n", ioc->name, in mptsas_hotplug_work()
4361 port_info = mptsas_find_portinfo_by_handle(ioc, in mptsas_hotplug_work()
4364 if (port_info == ioc->hba_port_info) in mptsas_hotplug_work()
4365 mptsas_probe_hba_phys(ioc); in mptsas_hotplug_work()
4367 mptsas_expander_refresh(ioc, port_info); in mptsas_hotplug_work()
4369 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4371 ioc->name, __func__, __LINE__)); in mptsas_hotplug_work()
4375 (ioc, &sas_device); in mptsas_hotplug_work()
4379 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4381 ioc->name, __func__, __LINE__)); in mptsas_hotplug_work()
4388 mptsas_add_end_device(ioc, phy_info); in mptsas_hotplug_work()
4392 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_hotplug_work()
4394 mptsas_del_end_device(ioc, phy_info); in mptsas_hotplug_work()
4399 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4402 ioc, hot_plug_info->phys_disk_num, in mptsas_hotplug_work()
4405 mptsas_del_end_device(ioc, phy_info); in mptsas_hotplug_work()
4410 if (mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_hotplug_work()
4414 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4415 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4428 ioc, sas_device.sas_address); in mptsas_hotplug_work()
4431 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4432 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4439 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4440 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4447 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4448 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4453 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4457 ioc->name, hot_plug_info->channel, hot_plug_info->id, in mptsas_hotplug_work()
4469 if (mptsas_sas_device_pg0(ioc, &sas_device, in mptsas_hotplug_work()
4473 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4475 ioc->name, __func__, in mptsas_hotplug_work()
4487 phy_info = mptsas_find_phyinfo_by_sas_address(ioc, in mptsas_hotplug_work()
4490 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4491 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4498 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4499 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4506 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4507 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4513 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_hotplug_work()
4514 "%s: fw_id=%d exit at line=%d\n", ioc->name, in mptsas_hotplug_work()
4519 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4523 ioc->name, hot_plug_info->channel, hot_plug_info->id, in mptsas_hotplug_work()
4531 mptsas_add_device_component_by_fw(ioc, in mptsas_hotplug_work()
4537 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4539 "id %d\n", ioc->name, MPTSAS_RAID_CHANNEL, in mptsas_hotplug_work()
4541 scsi_add_device(ioc->sh, MPTSAS_RAID_CHANNEL, in mptsas_hotplug_work()
4547 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4549 "id %d\n", ioc->name, MPTSAS_RAID_CHANNEL, in mptsas_hotplug_work()
4557 mpt_findImVolumes(ioc); in mptsas_hotplug_work()
4558 mptsas_adding_inactive_raid_components(ioc, in mptsas_hotplug_work()
4566 mptsas_free_fw_event(ioc, fw_event); in mptsas_hotplug_work()
4572 MPT_ADAPTER *ioc; in mptsas_send_sas_event() local
4578 ioc = fw_event->ioc; in mptsas_send_sas_event()
4587 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_sas_event()
4593 mptbase_sas_persist_operation(ioc, in mptsas_send_sas_event()
4595 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_sas_event()
4616 mptsas_hotplug_work(ioc, fw_event, &hot_plug_info); in mptsas_send_sas_event()
4620 mptbase_sas_persist_operation(ioc, in mptsas_send_sas_event()
4622 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_sas_event()
4630 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_sas_event()
4638 MPT_ADAPTER *ioc; in mptsas_send_raid_event() local
4647 ioc = fw_event->ioc; in mptsas_send_raid_event()
4661 sdev = scsi_device_lookup(ioc->sh, MPTSAS_RAID_CHANNEL, in mptsas_send_raid_event()
4668 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Entering %s: " in mptsas_send_raid_event()
4669 "ReasonCode=%02x\n", ioc->name, __func__, in mptsas_send_raid_event()
4683 mpt_raid_phys_disk_pg0(ioc, in mptsas_send_raid_event()
4746 mptsas_hotplug_work(ioc, fw_event, &hot_plug_info); in mptsas_send_raid_event()
4748 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_raid_event()
4765 mptsas_issue_tm(MPT_ADAPTER *ioc, u8 type, u8 channel, u8 id, u64 lun, in mptsas_issue_tm() argument
4774 mf = mpt_get_msg_frame(mptsasDeviceResetCtx, ioc); in mptsas_issue_tm()
4777 dtmprintk(ioc, printk(MYIOC_s_WARN_FMT "TaskMgmt request: no " in mptsas_issue_tm()
4778 "msg frames!!\n", ioc->name)); in mptsas_issue_tm()
4782 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "TaskMgmt request: mr = %p, " in mptsas_issue_tm()
4784 "fw_id = %d, lun = %lld,\n\t task_context = 0x%x\n", ioc->name, mf, in mptsas_issue_tm()
4801 INITIALIZE_MGMT_STATUS(ioc->taskmgmt_cmds.status) in mptsas_issue_tm()
4802 CLEAR_MGMT_STATUS(ioc->internal_cmds.status) in mptsas_issue_tm()
4804 mpt_put_msg_frame_hi_pri(mptsasDeviceResetCtx, ioc, mf); in mptsas_issue_tm()
4807 timeleft = wait_for_completion_timeout(&ioc->taskmgmt_cmds.done, in mptsas_issue_tm()
4809 if (!(ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_COMMAND_GOOD)) { in mptsas_issue_tm()
4811 dtmprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_issue_tm()
4812 "TaskMgmt request: TIMED OUT!(mr=%p)\n", ioc->name, mf)); in mptsas_issue_tm()
4813 mpt_free_msg_frame(ioc, mf); in mptsas_issue_tm()
4814 if (ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_DID_IOCRESET) in mptsas_issue_tm()
4820 if (!(ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_RF_VALID)) { in mptsas_issue_tm()
4822 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_issue_tm()
4823 "TaskMgmt request: failed with no reply\n", ioc->name)); in mptsas_issue_tm()
4828 CLEAR_MGMT_STATUS(ioc->taskmgmt_cmds.status) in mptsas_issue_tm()
4841 MPT_ADAPTER *ioc = fw_event->ioc; in mptsas_broadcast_primative_work() local
4854 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_broadcast_primative_work()
4855 "%s - enter\n", ioc->name, __func__)); in mptsas_broadcast_primative_work()
4857 mutex_lock(&ioc->taskmgmt_cmds.mutex); in mptsas_broadcast_primative_work()
4858 if (mpt_set_taskmgmt_in_progress_flag(ioc) != 0) { in mptsas_broadcast_primative_work()
4859 mutex_unlock(&ioc->taskmgmt_cmds.mutex); in mptsas_broadcast_primative_work()
4860 mptsas_requeue_fw_event(ioc, fw_event, 1000); in mptsas_broadcast_primative_work()
4867 mpt_findImVolumes(ioc); in mptsas_broadcast_primative_work()
4868 pScsiTmReply = (SCSITaskMgmtReply_t *) ioc->taskmgmt_cmds.reply; in mptsas_broadcast_primative_work()
4870 for (ii = 0; ii < ioc->req_depth; ii++) { in mptsas_broadcast_primative_work()
4871 if (ioc->fw_events_off) in mptsas_broadcast_primative_work()
4873 sc = mptscsih_get_scsi_lookup(ioc, ii); in mptsas_broadcast_primative_work()
4876 mf = MPT_INDEX_2_MFPTR(ioc, ii); in mptsas_broadcast_primative_work()
4890 if (mptsas_issue_tm(ioc, MPI_SCSITASKMGMT_TASKTYPE_QUERY_TASK, in mptsas_broadcast_primative_work()
4902 if (mptsas_issue_tm(ioc, in mptsas_broadcast_primative_work()
4911 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_broadcast_primative_work()
4913 ioc->name, __func__, query_count, termination_count)); in mptsas_broadcast_primative_work()
4915 ioc->broadcast_aen_busy = 0; in mptsas_broadcast_primative_work()
4916 mpt_clear_taskmgmt_in_progress_flag(ioc); in mptsas_broadcast_primative_work()
4917 mutex_unlock(&ioc->taskmgmt_cmds.mutex); in mptsas_broadcast_primative_work()
4922 ioc->name, __func__, mpt_GetIocState(ioc, 0)); in mptsas_broadcast_primative_work()
4923 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP); in mptsas_broadcast_primative_work()
4925 mptsas_free_fw_event(ioc, fw_event); in mptsas_broadcast_primative_work()
4939 MPT_ADAPTER *ioc; in mptsas_send_ir2_event() local
4945 ioc = fw_event->ioc; in mptsas_send_ir2_event()
4949 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Entering %s: " in mptsas_send_ir2_event()
4950 "ReasonCode=%02x\n", ioc->name, __func__, reasonCode)); in mptsas_send_ir2_event()
4965 mpt_raid_phys_disk_pg0(ioc, in mptsas_send_ir2_event()
4971 mptsas_free_fw_event(ioc, fw_event); in mptsas_send_ir2_event()
4974 mptsas_hotplug_work(ioc, fw_event, &hot_plug_info); in mptsas_send_ir2_event()
4978 mptsas_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *reply) in mptsas_event_process() argument
4985 if (ioc->bus_type != SAS) in mptsas_event_process()
4989 if (ioc->fw_events_off) in mptsas_event_process()
5001 if (ioc->broadcast_aen_busy) in mptsas_event_process()
5003 ioc->broadcast_aen_busy = 1; in mptsas_event_process()
5015 mptsas_target_reset_queue(ioc, sas_event_data); in mptsas_event_process()
5020 ioc->device_missing_delay && in mptsas_event_process()
5028 vtarget = mptsas_find_vtarget(ioc, channel, id); in mptsas_event_process()
5030 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_event_process()
5033 "fw_id %d fw_channel %d\n", ioc->name, in mptsas_event_process()
5037 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_event_process()
5039 ioc->name)); in mptsas_event_process()
5041 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_event_process()
5043 ioc->name)); in mptsas_event_process()
5058 if (ioc->old_sas_discovery_protocal) in mptsas_event_process()
5063 ioc->device_missing_delay) in mptsas_event_process()
5064 delay = HZ * ioc->device_missing_delay; in mptsas_event_process()
5074 ioc->sas_discovery_quiesce_io = discovery_status ? 1 : 0; in mptsas_event_process()
5075 if (ioc->old_sas_discovery_protocal && !discovery_status) in mptsas_event_process()
5076 mptsas_queue_rescan(ioc); in mptsas_event_process()
5093 printk(MYIOC_s_WARN_FMT "%s: failed at (line=%d)\n", ioc->name, in mptsas_event_process()
5099 fw_event->ioc = ioc; in mptsas_event_process()
5100 mptsas_add_fw_event(ioc, fw_event, delay); in mptsas_event_process()
5106 static void mptsas_volume_delete(MPT_ADAPTER *ioc, u8 id) in mptsas_volume_delete() argument
5111 sdev = scsi_device_lookup(ioc->sh, MPTSAS_RAID_CHANNEL, id, 0); in mptsas_volume_delete()
5114 if (!ioc->raid_data.pIocPg2) in mptsas_volume_delete()
5116 if (!ioc->raid_data.pIocPg2->NumActiveVolumes) in mptsas_volume_delete()
5118 for (i = 0; i < ioc->raid_data.pIocPg2->NumActiveVolumes; i++) in mptsas_volume_delete()
5119 if (ioc->raid_data.pIocPg2->RaidVolume[i].VolumeID == id) in mptsas_volume_delete()
5123 "id %d\n", ioc->name, MPTSAS_RAID_CHANNEL, id); in mptsas_volume_delete()
5134 MPT_ADAPTER *ioc; in mptsas_probe() local
5147 ioc = pci_get_drvdata(pdev); in mptsas_probe()
5148 mptsas_fw_event_off(ioc); in mptsas_probe()
5149 ioc->DoneCtx = mptsasDoneCtx; in mptsas_probe()
5150 ioc->TaskCtx = mptsasTaskCtx; in mptsas_probe()
5151 ioc->InternalCtx = mptsasInternalCtx; in mptsas_probe()
5152 ioc->schedule_target_reset = &mptsas_schedule_target_reset; in mptsas_probe()
5153 ioc->schedule_dead_ioc_flush_running_cmds = in mptsas_probe()
5157 if (ioc->last_state != MPI_IOC_STATE_OPERATIONAL) { in mptsas_probe()
5160 ioc->name); in mptsas_probe()
5165 if (!ioc->active) { in mptsas_probe()
5167 ioc->name); in mptsas_probe()
5175 for (ii = 0; ii < ioc->facts.NumberOfPorts; ii++) { in mptsas_probe()
5176 if (ioc->pfacts[ii].ProtocolFlags & in mptsas_probe()
5184 "is NOT enabled!\n", ioc->name, ioc); in mptsas_probe()
5192 ioc->name); in mptsas_probe()
5197 spin_lock_irqsave(&ioc->FreeQlock, flags); in mptsas_probe()
5201 ioc->sh = sh; in mptsas_probe()
5209 sh->can_queue = min_t(int, ioc->req_depth - 10, sh->can_queue); in mptsas_probe()
5216 sh->unique_id = ioc->id; in mptsas_probe()
5218 INIT_LIST_HEAD(&ioc->sas_topology); in mptsas_probe()
5219 mutex_init(&ioc->sas_topology_mutex); in mptsas_probe()
5220 mutex_init(&ioc->sas_discovery_mutex); in mptsas_probe()
5221 mutex_init(&ioc->sas_mgmt.mutex); in mptsas_probe()
5222 init_completion(&ioc->sas_mgmt.done); in mptsas_probe()
5233 scale = ioc->req_sz/ioc->SGE_size; in mptsas_probe()
5234 if (ioc->sg_addr_size == sizeof(u64)) { in mptsas_probe()
5236 (ioc->facts.MaxChainDepth-1) + scale + in mptsas_probe()
5237 (ioc->req_sz - 60) / ioc->SGE_size; in mptsas_probe()
5240 (ioc->facts.MaxChainDepth-1) + scale + in mptsas_probe()
5241 (ioc->req_sz - 64) / ioc->SGE_size; in mptsas_probe()
5246 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_probe()
5248 ioc->name, numSGE, sh->sg_tablesize)); in mptsas_probe()
5257 "Range from 64 to 8192\n", ioc->name, in mptsas_probe()
5261 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptsas_probe()
5263 ioc->name, mpt_loadtime_max_sectors, sh->max_sectors)); in mptsas_probe()
5268 hd->ioc = ioc; in mptsas_probe()
5273 ioc->ScsiLookup = kcalloc(ioc->req_depth, sizeof(void *), GFP_ATOMIC); in mptsas_probe()
5274 if (!ioc->ScsiLookup) { in mptsas_probe()
5276 spin_unlock_irqrestore(&ioc->FreeQlock, flags); in mptsas_probe()
5279 spin_lock_init(&ioc->scsi_lookup_lock); in mptsas_probe()
5281 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ScsiLookup @ %p\n", in mptsas_probe()
5282 ioc->name, ioc->ScsiLookup)); in mptsas_probe()
5284 ioc->sas_data.ptClear = mpt_pt_clear; in mptsas_probe()
5288 INIT_LIST_HEAD(&ioc->sas_device_info_list); in mptsas_probe()
5289 mutex_init(&ioc->sas_device_info_mutex); in mptsas_probe()
5291 spin_unlock_irqrestore(&ioc->FreeQlock, flags); in mptsas_probe()
5293 if (ioc->sas_data.ptClear==1) { in mptsas_probe()
5295 ioc, MPI_SAS_OP_CLEAR_ALL_PERSISTENT); in mptsas_probe()
5298 error = scsi_add_host(sh, &ioc->pcidev->dev); in mptsas_probe()
5300 dprintk(ioc, printk(MYIOC_s_ERR_FMT in mptsas_probe()
5301 "scsi_add_host failed\n", ioc->name)); in mptsas_probe()
5306 if ((ioc->facts.HeaderVersion >> 8) < 0xE) in mptsas_probe()
5307 ioc->old_sas_discovery_protocal = 1; in mptsas_probe()
5308 mptsas_scan_sas_topology(ioc); in mptsas_probe()
5309 mptsas_fw_event_on(ioc); in mptsas_probe()
5321 MPT_ADAPTER *ioc = pci_get_drvdata(pdev); in mptsas_shutdown() local
5323 mptsas_fw_event_off(ioc); in mptsas_shutdown()
5324 mptsas_cleanup_fw_event_q(ioc); in mptsas_shutdown()
5329 MPT_ADAPTER *ioc = pci_get_drvdata(pdev); in mptsas_remove() local
5333 if (!ioc->sh) { in mptsas_remove()
5334 printk(MYIOC_s_INFO_FMT "IOC is in Target mode\n", ioc->name); in mptsas_remove()
5341 mptsas_del_device_components(ioc); in mptsas_remove()
5343 ioc->sas_discovery_ignore_events = 1; in mptsas_remove()
5344 sas_remove_host(ioc->sh); in mptsas_remove()
5346 mutex_lock(&ioc->sas_topology_mutex); in mptsas_remove()
5347 list_for_each_entry_safe(p, n, &ioc->sas_topology, list) { in mptsas_remove()
5350 mptsas_port_delete(ioc, p->phy_info[i].port_details); in mptsas_remove()
5355 mutex_unlock(&ioc->sas_topology_mutex); in mptsas_remove()
5356 ioc->hba_port_info = NULL; in mptsas_remove()