Lines Matching refs:ioc
162 static int mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply);
163 static int mpt_handshake_req_reply_wait(MPT_ADAPTER *ioc, int reqBytes,
166 static int mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag);
167 static void mpt_detect_bound_ports(MPT_ADAPTER *ioc, struct pci_dev *pdev);
168 static void mpt_adapter_disable(MPT_ADAPTER *ioc);
169 static void mpt_adapter_dispose(MPT_ADAPTER *ioc);
171 static void MptDisplayIocCapabilities(MPT_ADAPTER *ioc);
172 static int MakeIocReady(MPT_ADAPTER *ioc, int force, int sleepFlag);
173 static int GetIocFacts(MPT_ADAPTER *ioc, int sleepFlag, int reason);
174 static int GetPortFacts(MPT_ADAPTER *ioc, int portnum, int sleepFlag);
175 static int SendIocInit(MPT_ADAPTER *ioc, int sleepFlag);
176 static int SendPortEnable(MPT_ADAPTER *ioc, int portnum, int sleepFlag);
177 static int mpt_do_upload(MPT_ADAPTER *ioc, int sleepFlag);
178 static int mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag);
179 static int mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag);
180 static int KickStart(MPT_ADAPTER *ioc, int ignore, int sleepFlag);
181 static int SendIocReset(MPT_ADAPTER *ioc, u8 reset_type, int sleepFlag);
182 static int PrimeIocFifos(MPT_ADAPTER *ioc);
183 static int WaitForDoorbellAck(MPT_ADAPTER *ioc, int howlong, int sleepFlag);
184 static int WaitForDoorbellInt(MPT_ADAPTER *ioc, int howlong, int sleepFlag);
185 static int WaitForDoorbellReply(MPT_ADAPTER *ioc, int howlong, int sleepFlag);
186 static int GetLanConfigPages(MPT_ADAPTER *ioc);
187 static int GetIoUnitPage2(MPT_ADAPTER *ioc);
188 int mptbase_sas_persist_operation(MPT_ADAPTER *ioc, u8 persist_opcode);
189 static int mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum);
190 static int mpt_readScsiDevicePageHeaders(MPT_ADAPTER *ioc, int portnum);
191 static void mpt_read_ioc_pg_1(MPT_ADAPTER *ioc);
192 static void mpt_read_ioc_pg_4(MPT_ADAPTER *ioc);
194 static void mpt_get_manufacturing_pg_0(MPT_ADAPTER *ioc);
195 static int SendEventNotification(MPT_ADAPTER *ioc, u8 EvSwitch);
196 static int SendEventAck(MPT_ADAPTER *ioc, EventNotificationReply_t *evnp);
197 static int mpt_host_page_access_control(MPT_ADAPTER *ioc, u8 access_control_value, int sleepFlag);
198 static int mpt_host_page_alloc(MPT_ADAPTER *ioc, pIOCInit_t ioc_init);
208 static void mpt_get_fw_exp_ver(char *buf, MPT_ADAPTER *ioc);
211 static int ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *evReply, int *evHan…
212 static void mpt_iocstatus_info(MPT_ADAPTER *ioc, u32 ioc_status, MPT_FRAME_HDR *mf);
213 static void mpt_fc_log_info(MPT_ADAPTER *ioc, u32 log_info);
214 static void mpt_spi_log_info(MPT_ADAPTER *ioc, u32 log_info);
215 static void mpt_sas_log_info(MPT_ADAPTER *ioc, u32 log_info);
216 static int mpt_read_ioc_pg_3(MPT_ADAPTER *ioc);
217 static void mpt_inactive_raid_list_free(MPT_ADAPTER *ioc);
252 MPT_ADAPTER *ioc; in mpt_set_debug_level() local
257 list_for_each_entry(ioc, &ioc_list, list) in mpt_set_debug_level()
258 ioc->debug_level = mpt_debug_level; in mpt_set_debug_level()
287 MPT_ADAPTER *ioc = in mpt_fault_reset_work() local
293 if (ioc->diagPending || !ioc->active) in mpt_fault_reset_work()
296 ioc_raw_state = mpt_GetIocState(ioc, 0); in mpt_fault_reset_work()
299 ioc->name, ioc_raw_state & MPI_DOORBELL_DATA_MASK); in mpt_fault_reset_work()
301 ioc->name, __func__); in mpt_fault_reset_work()
302 rc = mpt_HardResetHandler(ioc, CAN_SLEEP); in mpt_fault_reset_work()
303 printk(MYIOC_s_WARN_FMT "%s: HardReset: %s\n", ioc->name, in mpt_fault_reset_work()
305 ioc_raw_state = mpt_GetIocState(ioc, 0); in mpt_fault_reset_work()
308 "reset (%04xh)\n", ioc->name, ioc_raw_state & in mpt_fault_reset_work()
316 if (ioc->alt_ioc) in mpt_fault_reset_work()
317 ioc = ioc->alt_ioc; in mpt_fault_reset_work()
320 spin_lock_irqsave(&ioc->fault_reset_work_lock, flags); in mpt_fault_reset_work()
321 if (ioc->reset_work_q) in mpt_fault_reset_work()
322 queue_delayed_work(ioc->reset_work_q, &ioc->fault_reset_work, in mpt_fault_reset_work()
324 spin_unlock_irqrestore(&ioc->fault_reset_work_lock, flags); in mpt_fault_reset_work()
332 mpt_turbo_reply(MPT_ADAPTER *ioc, u32 pa) in mpt_turbo_reply() argument
339 dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Got TURBO reply req_idx=%08x\n", in mpt_turbo_reply()
340 ioc->name, pa)); in mpt_turbo_reply()
346 mf = MPT_INDEX_2_MFPTR(ioc, req_idx); in mpt_turbo_reply()
361 mf = MPT_INDEX_2_MFPTR(ioc, req_idx); in mpt_turbo_reply()
362 mpt_free_msg_frame(ioc, mf); in mpt_turbo_reply()
382 __func__, ioc->name, cb_idx); in mpt_turbo_reply()
386 if (MptCallbacks[cb_idx](ioc, mf, mr)) in mpt_turbo_reply()
387 mpt_free_msg_frame(ioc, mf); in mpt_turbo_reply()
393 mpt_reply(MPT_ADAPTER *ioc, u32 pa) in mpt_reply() argument
415 mr = (MPT_FRAME_HDR *)((u8 *)ioc->reply_frames + in mpt_reply()
416 (reply_dma_low - ioc->reply_frames_low_dma)); in mpt_reply()
420 mf = MPT_INDEX_2_MFPTR(ioc, req_idx); in mpt_reply()
422 …dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Got non-TURBO reply=%p req_idx=%x cb_idx=%x Function=%x\n… in mpt_reply()
423 ioc->name, mr, req_idx, cb_idx, mr->u.hdr.Function)); in mpt_reply()
424 DBG_DUMP_REPLY_FRAME(ioc, (u32 *)mr); in mpt_reply()
431 if (ioc->bus_type == FC) in mpt_reply()
432 mpt_fc_log_info(ioc, log_info); in mpt_reply()
433 else if (ioc->bus_type == SPI) in mpt_reply()
434 mpt_spi_log_info(ioc, log_info); in mpt_reply()
435 else if (ioc->bus_type == SAS) in mpt_reply()
436 mpt_sas_log_info(ioc, log_info); in mpt_reply()
440 mpt_iocstatus_info(ioc, (u32)ioc_stat, mf); in mpt_reply()
446 __func__, ioc->name, cb_idx); in mpt_reply()
451 freeme = MptCallbacks[cb_idx](ioc, mf, mr); in mpt_reply()
455 CHIPREG_WRITE32(&ioc->chip->ReplyFifo, pa); in mpt_reply()
458 mpt_free_msg_frame(ioc, mf); in mpt_reply()
482 MPT_ADAPTER *ioc = bus_id; in mpt_interrupt() local
483 u32 pa = CHIPREG_READ32_dmasync(&ioc->chip->ReplyFifo); in mpt_interrupt()
493 mpt_reply(ioc, pa); in mpt_interrupt()
495 mpt_turbo_reply(ioc, pa); in mpt_interrupt()
496 pa = CHIPREG_READ32_dmasync(&ioc->chip->ReplyFifo); in mpt_interrupt()
517 mpt_base_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *reply) in mpt_base_reply() argument
522 dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mpt_base_reply() called\n", ioc->name)); in mpt_base_reply()
524 if ((ioc->debug_level & MPT_DEBUG_MSG_FRAME) && in mpt_base_reply()
526 dmfprintk(ioc, printk(MYIOC_s_INFO_FMT ": Original request frame (@%p) header\n", in mpt_base_reply()
527 ioc->name, mf)); in mpt_base_reply()
528 DBG_DUMP_REQUEST_FRAME_HDR(ioc, (u32 *)mf); in mpt_base_reply()
533 dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mpt_base_reply, Function=%02Xh\n", in mpt_base_reply()
534 ioc->name, func)); in mpt_base_reply()
541 results = ProcessEventNotification(ioc, pEvReply, &evHandlers); in mpt_base_reply()
544 devtverboseprintk(ioc, printk(MYIOC_s_WARN_FMT "Called %d event handlers, sum results = %d\n", in mpt_base_reply()
545 ioc->name, evHandlers, results)); in mpt_base_reply()
555 …devtverboseprintk(ioc, printk(MYIOC_s_WARN_FMT "EVENT_NOTIFICATION reply %p returns Request frame\… in mpt_base_reply()
556 ioc->name, pEvReply)); in mpt_base_reply()
564 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mpt_base_reply, EventAck reply received\n", in mpt_base_reply()
565 ioc->name)); in mpt_base_reply()
570 dcprintk(ioc, printk(MYIOC_s_DEBUG_FMT "config_complete (mf=%p,mr=%p)\n", in mpt_base_reply()
571 ioc->name, mf, reply)); in mpt_base_reply()
573 pCfg = * ((CONFIGPARMS **)((u8 *) mf + ioc->req_sz - sizeof(void *))); in mpt_base_reply()
579 spin_lock_irqsave(&ioc->FreeQlock, flags); in mpt_base_reply()
581 spin_unlock_irqrestore(&ioc->FreeQlock, flags); in mpt_base_reply()
593 dcprintk(ioc, printk(MYIOC_s_NOTE_FMT " IOCStatus=%04xh, IOCLogInfo=%08xh\n", in mpt_base_reply()
594 ioc->name, status, le32_to_cpu(pReply->IOCLogInfo))); in mpt_base_reply()
624 memcpy(ioc->persist_reply_frame, reply, in mpt_base_reply()
627 del_timer(&ioc->persist_timer); in mpt_base_reply()
628 ioc->persist_wait_done = 1; in mpt_base_reply()
632 ioc->name, func); in mpt_base_reply()
792 MPT_ADAPTER *ioc; in mpt_device_driver_register() local
801 list_for_each_entry(ioc, &ioc_list, list) { in mpt_device_driver_register()
802 id = ioc->pcidev->driver ? in mpt_device_driver_register()
803 ioc->pcidev->driver->id_table : NULL; in mpt_device_driver_register()
805 dd_cbfunc->probe(ioc->pcidev, id); in mpt_device_driver_register()
820 MPT_ADAPTER *ioc; in mpt_device_driver_deregister() local
827 list_for_each_entry(ioc, &ioc_list, list) { in mpt_device_driver_deregister()
829 dd_cbfunc->remove(ioc->pcidev); in mpt_device_driver_deregister()
849 mpt_get_msg_frame(u8 cb_idx, MPT_ADAPTER *ioc) in mpt_get_msg_frame() argument
858 if (!ioc->active) in mpt_get_msg_frame()
860 "returning NULL!\n", ioc->name); in mpt_get_msg_frame()
864 if (!ioc->active) in mpt_get_msg_frame()
867 spin_lock_irqsave(&ioc->FreeQlock, flags); in mpt_get_msg_frame()
868 if (!list_empty(&ioc->FreeQ)) { in mpt_get_msg_frame()
871 mf = list_entry(ioc->FreeQ.next, MPT_FRAME_HDR, in mpt_get_msg_frame()
876 req_offset = (u8 *)mf - (u8 *)ioc->req_frames; in mpt_get_msg_frame()
878 req_idx = req_offset / ioc->req_sz; in mpt_get_msg_frame()
882 ioc->RequestNB[req_idx] = ioc->NB_for_64_byte_frame; in mpt_get_msg_frame()
884 ioc->mfcnt++; in mpt_get_msg_frame()
889 spin_unlock_irqrestore(&ioc->FreeQlock, flags); in mpt_get_msg_frame()
894 "Count 0x%x Max 0x%x\n", ioc->name, ioc->mfcnt, in mpt_get_msg_frame()
895 ioc->req_depth); in mpt_get_msg_frame()
898 printk(MYIOC_s_INFO_FMT "MF Count 0x%x Max 0x%x \n", ioc->name, in mpt_get_msg_frame()
899 ioc->mfcnt, ioc->req_depth); in mpt_get_msg_frame()
902 dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mpt_get_msg_frame(%d,%d), got mf=%p\n", in mpt_get_msg_frame()
903 ioc->name, cb_idx, ioc->id, mf)); in mpt_get_msg_frame()
918 mpt_put_msg_frame(u8 cb_idx, MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf) in mpt_put_msg_frame() argument
926 req_offset = (u8 *)mf - (u8 *)ioc->req_frames; in mpt_put_msg_frame()
928 req_idx = req_offset / ioc->req_sz; in mpt_put_msg_frame()
932 DBG_DUMP_PUT_MSG_FRAME(ioc, (u32 *)mf); in mpt_put_msg_frame()
934 mf_dma_addr = (ioc->req_frames_low_dma + req_offset) | ioc->RequestNB[req_idx]; in mpt_put_msg_frame()
935 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mf_dma_addr=%x req_idx=%d " in mpt_put_msg_frame()
936 "RequestNB=%x\n", ioc->name, mf_dma_addr, req_idx, in mpt_put_msg_frame()
937 ioc->RequestNB[req_idx])); in mpt_put_msg_frame()
938 CHIPREG_WRITE32(&ioc->chip->RequestFifo, mf_dma_addr); in mpt_put_msg_frame()
954 mpt_put_msg_frame_hi_pri(u8 cb_idx, MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf) in mpt_put_msg_frame_hi_pri() argument
962 req_offset = (u8 *)mf - (u8 *)ioc->req_frames; in mpt_put_msg_frame_hi_pri()
963 req_idx = req_offset / ioc->req_sz; in mpt_put_msg_frame_hi_pri()
967 DBG_DUMP_PUT_MSG_FRAME(ioc, (u32 *)mf); in mpt_put_msg_frame_hi_pri()
969 mf_dma_addr = (ioc->req_frames_low_dma + req_offset); in mpt_put_msg_frame_hi_pri()
970 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mf_dma_addr=%x req_idx=%d\n", in mpt_put_msg_frame_hi_pri()
971 ioc->name, mf_dma_addr, req_idx)); in mpt_put_msg_frame_hi_pri()
972 CHIPREG_WRITE32(&ioc->chip->RequestHiPriFifo, mf_dma_addr); in mpt_put_msg_frame_hi_pri()
985 mpt_free_msg_frame(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf) in mpt_free_msg_frame() argument
990 spin_lock_irqsave(&ioc->FreeQlock, flags); in mpt_free_msg_frame()
992 list_add_tail(&mf->u.frame.linkage.list, &ioc->FreeQ); in mpt_free_msg_frame()
994 ioc->mfcnt--; in mpt_free_msg_frame()
996 spin_unlock_irqrestore(&ioc->FreeQlock, flags); in mpt_free_msg_frame()
1046 mpt_send_handshake_request(u8 cb_idx, MPT_ADAPTER *ioc, int reqBytes, u32 *req, int sleepFlag) in mpt_send_handshake_request() argument
1062 ii = MFPTR_2_MPT_INDEX(ioc,(MPT_FRAME_HDR*)req); in mpt_send_handshake_request()
1063 if (reqBytes >= 12 && ii >= 0 && ii < ioc->req_depth) { in mpt_send_handshake_request()
1070 CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); in mpt_send_handshake_request()
1072 CHIPREG_WRITE32(&ioc->chip->Doorbell, in mpt_send_handshake_request()
1077 if ((ii = WaitForDoorbellInt(ioc, 5, sleepFlag)) < 0) { in mpt_send_handshake_request()
1082 if (!(CHIPREG_READ32(&ioc->chip->Doorbell) & MPI_DOORBELL_ACTIVE)) in mpt_send_handshake_request()
1085 dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mpt_send_handshake_request start, WaitCnt=%d\n", in mpt_send_handshake_request()
1086 ioc->name, ii)); in mpt_send_handshake_request()
1088 CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); in mpt_send_handshake_request()
1090 if ((r = WaitForDoorbellAck(ioc, 5, sleepFlag)) < 0) { in mpt_send_handshake_request()
1103 CHIPREG_WRITE32(&ioc->chip->Doorbell, word); in mpt_send_handshake_request()
1104 if ((r = WaitForDoorbellAck(ioc, 5, sleepFlag)) < 0) { in mpt_send_handshake_request()
1110 if (r >= 0 && WaitForDoorbellInt(ioc, 10, sleepFlag) >= 0) in mpt_send_handshake_request()
1116 CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); in mpt_send_handshake_request()
1141 mpt_host_page_access_control(MPT_ADAPTER *ioc, u8 access_control_value, int sleepFlag) in mpt_host_page_access_control() argument
1146 if (CHIPREG_READ32(&ioc->chip->Doorbell) in mpt_host_page_access_control()
1150 CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); in mpt_host_page_access_control()
1152 CHIPREG_WRITE32(&ioc->chip->Doorbell, in mpt_host_page_access_control()
1158 if ((r = WaitForDoorbellAck(ioc, 5, sleepFlag)) < 0) { in mpt_host_page_access_control()
1174 mpt_host_page_alloc(MPT_ADAPTER *ioc, pIOCInit_t ioc_init) in mpt_host_page_alloc() argument
1180 if(!ioc->HostPageBuffer) { in mpt_host_page_alloc()
1183 le32_to_cpu(ioc->facts.HostPageBufferSGE.FlagsLength) & 0xFFFFFF; in mpt_host_page_alloc()
1191 if((ioc->HostPageBuffer = pci_alloc_consistent( in mpt_host_page_alloc()
1192 ioc->pcidev, in mpt_host_page_alloc()
1194 &ioc->HostPageBuffer_dma)) != NULL) { in mpt_host_page_alloc()
1196 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_host_page_alloc()
1198 ioc->name, ioc->HostPageBuffer, in mpt_host_page_alloc()
1199 (u32)ioc->HostPageBuffer_dma, in mpt_host_page_alloc()
1201 ioc->alloc_total += host_page_buffer_sz; in mpt_host_page_alloc()
1202 ioc->HostPageBuffer_sz = host_page_buffer_sz; in mpt_host_page_alloc()
1210 if(!ioc->HostPageBuffer) { in mpt_host_page_alloc()
1213 ioc->name); in mpt_host_page_alloc()
1227 flags_length |= ioc->HostPageBuffer_sz; in mpt_host_page_alloc()
1228 mpt_add_sge(psge, flags_length, ioc->HostPageBuffer_dma); in mpt_host_page_alloc()
1229 ioc->facts.HostPageBufferSGE = ioc_init->HostPageBufferSGE; in mpt_host_page_alloc()
1249 MPT_ADAPTER *ioc; in mpt_verify_adapter() local
1251 list_for_each_entry(ioc,&ioc_list,list) { in mpt_verify_adapter()
1252 if (ioc->id == iocid) { in mpt_verify_adapter()
1253 *iocpp =ioc; in mpt_verify_adapter()
1510 mpt_mapresources(MPT_ADAPTER *ioc) in mpt_mapresources() argument
1522 pdev = ioc->pcidev; in mpt_mapresources()
1523 ioc->bars = pci_select_bars(pdev, IORESOURCE_MEM); in mpt_mapresources()
1526 "failed\n", ioc->name); in mpt_mapresources()
1529 if (pci_request_selected_regions(pdev, ioc->bars, "mpt")) { in mpt_mapresources()
1531 "MEM failed\n", ioc->name); in mpt_mapresources()
1539 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT in mpt_mapresources()
1541 ioc->name)); in mpt_mapresources()
1544 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT in mpt_mapresources()
1546 ioc->name)); in mpt_mapresources()
1549 ioc->name, pci_name(pdev)); in mpt_mapresources()
1550 pci_release_selected_regions(pdev, ioc->bars); in mpt_mapresources()
1571 ioc->mem_size = msize; in mpt_mapresources()
1579 " memory!\n", ioc->name); in mpt_mapresources()
1582 ioc->memmap = mem; in mpt_mapresources()
1583 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "mem = %p, mem_phys = %lx\n", in mpt_mapresources()
1584 ioc->name, mem, mem_phys)); in mpt_mapresources()
1586 ioc->mem_phys = mem_phys; in mpt_mapresources()
1587 ioc->chip = (SYSIF_REGS __iomem *)mem; in mpt_mapresources()
1590 ioc->pio_mem_phys = port; in mpt_mapresources()
1591 ioc->pio_chip = (SYSIF_REGS __iomem *)port; in mpt_mapresources()
1617 MPT_ADAPTER *ioc; in mpt_attach() local
1627 ioc = kzalloc(sizeof(MPT_ADAPTER), GFP_ATOMIC); in mpt_attach()
1628 if (ioc == NULL) { in mpt_attach()
1633 ioc->id = mpt_ids++; in mpt_attach()
1634 sprintf(ioc->name, "ioc%d", ioc->id); in mpt_attach()
1641 ioc->debug_level = mpt_debug_level; in mpt_attach()
1645 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT ": mpt_adapter_install\n", ioc->name)); in mpt_attach()
1647 ioc->pcidev = pdev; in mpt_attach()
1648 if (mpt_mapresources(ioc)) { in mpt_attach()
1649 kfree(ioc); in mpt_attach()
1653 ioc->alloc_total = sizeof(MPT_ADAPTER); in mpt_attach()
1654 ioc->req_sz = MPT_DEFAULT_FRAME_SIZE; /* avoid div by zero! */ in mpt_attach()
1655 ioc->reply_sz = MPT_REPLY_FRAME_SIZE; in mpt_attach()
1657 ioc->pcidev = pdev; in mpt_attach()
1658 ioc->diagPending = 0; in mpt_attach()
1659 spin_lock_init(&ioc->diagLock); in mpt_attach()
1660 spin_lock_init(&ioc->initializing_hba_lock); in mpt_attach()
1664 ioc->eventTypes = 0; /* None */ in mpt_attach()
1665 ioc->eventContext = 0; in mpt_attach()
1666 ioc->eventLogSize = 0; in mpt_attach()
1667 ioc->events = NULL; in mpt_attach()
1670 ioc->mfcnt = 0; in mpt_attach()
1673 ioc->cached_fw = NULL; in mpt_attach()
1677 memset(&ioc->spi_data, 0, sizeof(SpiCfgData)); in mpt_attach()
1681 INIT_LIST_HEAD(&ioc->configQ); in mpt_attach()
1685 INIT_LIST_HEAD(&ioc->fc_rports); in mpt_attach()
1688 INIT_LIST_HEAD(&ioc->list); in mpt_attach()
1692 INIT_DELAYED_WORK(&ioc->fault_reset_work, mpt_fault_reset_work); in mpt_attach()
1693 spin_lock_init(&ioc->fault_reset_work_lock); in mpt_attach()
1695 snprintf(ioc->reset_work_q_name, sizeof(ioc->reset_work_q_name), in mpt_attach()
1696 "mpt_poll_%d", ioc->id); in mpt_attach()
1697 ioc->reset_work_q = in mpt_attach()
1698 create_singlethread_workqueue(ioc->reset_work_q_name); in mpt_attach()
1699 if (!ioc->reset_work_q) { in mpt_attach()
1701 ioc->name); in mpt_attach()
1702 pci_release_selected_regions(pdev, ioc->bars); in mpt_attach()
1703 kfree(ioc); in mpt_attach()
1707 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "facts @ %p, pfacts[0] @ %p\n", in mpt_attach()
1708 ioc->name, &ioc->facts, &ioc->pfacts[0])); in mpt_attach()
1711 mpt_get_product_name(pdev->vendor, pdev->device, revision, ioc->prod_name); in mpt_attach()
1717 ioc->errata_flag_1064 = 1; in mpt_attach()
1722 ioc->bus_type = FC; in mpt_attach()
1740 ioc->bus_type = FC; in mpt_attach()
1750 ioc->bus_type = FC; in mpt_attach()
1764 ioc->bus_type = SPI; in mpt_attach()
1769 ioc->errata_flag_1064 = 1; in mpt_attach()
1774 ioc->bus_type = SAS; in mpt_attach()
1778 switch (ioc->bus_type) { in mpt_attach()
1781 ioc->msi_enable = mpt_msi_enable_sas; in mpt_attach()
1785 ioc->msi_enable = mpt_msi_enable_spi; in mpt_attach()
1789 ioc->msi_enable = mpt_msi_enable_fc; in mpt_attach()
1793 ioc->msi_enable = 0; in mpt_attach()
1796 if (ioc->errata_flag_1064) in mpt_attach()
1799 spin_lock_init(&ioc->FreeQlock); in mpt_attach()
1802 CHIPREG_WRITE32(&ioc->chip->IntMask, 0xFFFFFFFF); in mpt_attach()
1803 ioc->active = 0; in mpt_attach()
1804 CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); in mpt_attach()
1807 pci_set_drvdata(ioc->pcidev, ioc); in mpt_attach()
1810 list_add_tail(&ioc->list, &ioc_list); in mpt_attach()
1814 mpt_detect_bound_ports(ioc, pdev); in mpt_attach()
1816 if ((r = mpt_do_ioc_recovery(ioc, MPT_HOSTEVENT_IOC_BRINGUP, in mpt_attach()
1819 ioc->name, r); in mpt_attach()
1821 list_del(&ioc->list); in mpt_attach()
1822 if (ioc->alt_ioc) in mpt_attach()
1823 ioc->alt_ioc->alt_ioc = NULL; in mpt_attach()
1824 iounmap(ioc->memmap); in mpt_attach()
1826 pci_release_selected_regions(pdev, ioc->bars); in mpt_attach()
1828 destroy_workqueue(ioc->reset_work_q); in mpt_attach()
1829 ioc->reset_work_q = NULL; in mpt_attach()
1831 kfree(ioc); in mpt_attach()
1848 dent = proc_mkdir(ioc->name, mpt_proc_root_dir); in mpt_attach()
1853 ent->data = ioc; in mpt_attach()
1858 ent->data = ioc; in mpt_attach()
1863 if (!ioc->alt_ioc) in mpt_attach()
1864 queue_delayed_work(ioc->reset_work_q, &ioc->fault_reset_work, in mpt_attach()
1879 MPT_ADAPTER *ioc = pci_get_drvdata(pdev); in mpt_detach() local
1888 spin_lock_irqsave(&ioc->fault_reset_work_lock, flags); in mpt_detach()
1889 wq = ioc->reset_work_q; in mpt_detach()
1890 ioc->reset_work_q = NULL; in mpt_detach()
1891 spin_unlock_irqrestore(&ioc->fault_reset_work_lock, flags); in mpt_detach()
1892 cancel_delayed_work(&ioc->fault_reset_work); in mpt_detach()
1896 sprintf(pname, MPT_PROCFS_MPTBASEDIR "/%s/summary", ioc->name); in mpt_detach()
1898 sprintf(pname, MPT_PROCFS_MPTBASEDIR "/%s/info", ioc->name); in mpt_detach()
1900 sprintf(pname, MPT_PROCFS_MPTBASEDIR "/%s", ioc->name); in mpt_detach()
1912 CHIPREG_WRITE32(&ioc->chip->IntMask, 0xFFFFFFFF); in mpt_detach()
1914 ioc->active = 0; in mpt_detach()
1918 CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); in mpt_detach()
1920 CHIPREG_READ32(&ioc->chip->IntStatus); in mpt_detach()
1922 mpt_adapter_dispose(ioc); in mpt_detach()
1941 MPT_ADAPTER *ioc = pci_get_drvdata(pdev); in mpt_suspend() local
1945 "operating state [D%d]\n", ioc->name, pdev, pci_name(pdev), in mpt_suspend()
1949 if(SendIocReset(ioc, MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET, CAN_SLEEP)) { in mpt_suspend()
1951 "pci-suspend: IOC msg unit reset failed!\n", ioc->name); in mpt_suspend()
1955 CHIPREG_WRITE32(&ioc->chip->IntMask, 0xFFFFFFFF); in mpt_suspend()
1956 ioc->active = 0; in mpt_suspend()
1959 CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); in mpt_suspend()
1961 free_irq(ioc->pci_irq, ioc); in mpt_suspend()
1962 if (ioc->msi_enable) in mpt_suspend()
1963 pci_disable_msi(ioc->pcidev); in mpt_suspend()
1964 ioc->pci_irq = -1; in mpt_suspend()
1967 pci_release_selected_regions(pdev, ioc->bars); in mpt_suspend()
1980 MPT_ADAPTER *ioc = pci_get_drvdata(pdev); in mpt_resume() local
1986 "operating state [D%d]\n", ioc->name, pdev, pci_name(pdev), in mpt_resume()
1992 ioc->pcidev = pdev; in mpt_resume()
1993 err = mpt_mapresources(ioc); in mpt_resume()
1998 ioc->name, (mpt_GetIocState(ioc, 1) >> MPI_IOC_STATE_SHIFT), in mpt_resume()
1999 CHIPREG_READ32(&ioc->chip->Doorbell)); in mpt_resume()
2008 if (ioc->bus_type == SAS && (pdev->device == in mpt_resume()
2011 if (KickStart(ioc, 1, CAN_SLEEP) < 0) { in mpt_resume()
2013 ioc->name); in mpt_resume()
2019 printk(MYIOC_s_INFO_FMT "Sending mpt_do_ioc_recovery\n", ioc->name); in mpt_resume()
2020 recovery_state = mpt_do_ioc_recovery(ioc, MPT_HOSTEVENT_IOC_BRINGUP, in mpt_resume()
2024 "error:[%x]\n", ioc->name, recovery_state); in mpt_resume()
2027 "pci-resume: success\n", ioc->name); in mpt_resume()
2035 mpt_signal_reset(u8 index, MPT_ADAPTER *ioc, int reset_phase) in mpt_signal_reset() argument
2038 ioc->bus_type != SPI) || in mpt_signal_reset()
2040 ioc->bus_type != FC) || in mpt_signal_reset()
2042 ioc->bus_type != SAS)) in mpt_signal_reset()
2046 return (MptResetHandlers[index])(ioc, reset_phase); in mpt_signal_reset()
2072 mpt_do_ioc_recovery(MPT_ADAPTER *ioc, u32 reason, int sleepFlag) in mpt_do_ioc_recovery() argument
2086 printk(MYIOC_s_INFO_FMT "Initiating %s\n", ioc->name, in mpt_do_ioc_recovery()
2090 CHIPREG_WRITE32(&ioc->chip->IntMask, 0xFFFFFFFF); in mpt_do_ioc_recovery()
2091 ioc->active = 0; in mpt_do_ioc_recovery()
2093 if (ioc->alt_ioc) { in mpt_do_ioc_recovery()
2094 if (ioc->alt_ioc->active) in mpt_do_ioc_recovery()
2098 CHIPREG_WRITE32(&ioc->alt_ioc->chip->IntMask, 0xFFFFFFFF); in mpt_do_ioc_recovery()
2099 ioc->alt_ioc->active = 0; in mpt_do_ioc_recovery()
2106 if ((hard_reset_done = MakeIocReady(ioc, hard, sleepFlag)) < 0) { in mpt_do_ioc_recovery()
2109 ioc->name); in mpt_do_ioc_recovery()
2111 if (reset_alt_ioc_active && ioc->alt_ioc) { in mpt_do_ioc_recovery()
2113 dprintk(ioc, printk(MYIOC_s_INFO_FMT in mpt_do_ioc_recovery()
2114 "alt_ioc reply irq re-enabled\n", ioc->alt_ioc->name)); in mpt_do_ioc_recovery()
2115 CHIPREG_WRITE32(&ioc->alt_ioc->chip->IntMask, MPI_HIM_DIM); in mpt_do_ioc_recovery()
2116 ioc->alt_ioc->active = 1; in mpt_do_ioc_recovery()
2120 printk(MYIOC_s_WARN_FMT "NOT READY!\n", ioc->name); in mpt_do_ioc_recovery()
2128 if (hard_reset_done && reset_alt_ioc_active && ioc->alt_ioc) { in mpt_do_ioc_recovery()
2129 if ((rc = MakeIocReady(ioc->alt_ioc, 0, sleepFlag)) == 0) in mpt_do_ioc_recovery()
2132 printk(MYIOC_s_WARN_FMT "alt_ioc not ready!\n", ioc->alt_ioc->name); in mpt_do_ioc_recovery()
2137 if ((rc = GetIocFacts(ioc, sleepFlag, reason)) == 0) in mpt_do_ioc_recovery()
2143 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_do_ioc_recovery()
2144 "Retry IocFacts failed rc=%x\n", ioc->name, rc)); in mpt_do_ioc_recovery()
2147 MptDisplayIocCapabilities(ioc); in mpt_do_ioc_recovery()
2151 if ((rc = GetIocFacts(ioc->alt_ioc, sleepFlag, reason)) != 0) { in mpt_do_ioc_recovery()
2152 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_do_ioc_recovery()
2153 "Initial Alt IocFacts failed rc=%x\n", ioc->name, rc)); in mpt_do_ioc_recovery()
2156 rc = GetIocFacts(ioc->alt_ioc, sleepFlag, reason); in mpt_do_ioc_recovery()
2159 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_do_ioc_recovery()
2160 "Retry Alt IocFacts failed rc=%x\n", ioc->name, rc)); in mpt_do_ioc_recovery()
2164 MptDisplayIocCapabilities(ioc->alt_ioc); in mpt_do_ioc_recovery()
2169 (ioc->facts.Flags & MPI_IOCFACTS_FLAGS_FW_DOWNLOAD_BOOT)) { in mpt_do_ioc_recovery()
2170 pci_release_selected_regions(ioc->pcidev, ioc->bars); in mpt_do_ioc_recovery()
2171 ioc->bars = pci_select_bars(ioc->pcidev, IORESOURCE_MEM | in mpt_do_ioc_recovery()
2173 if (pci_enable_device(ioc->pcidev)) in mpt_do_ioc_recovery()
2175 if (pci_request_selected_regions(ioc->pcidev, ioc->bars, in mpt_do_ioc_recovery()
2186 ioc->pci_irq = -1; in mpt_do_ioc_recovery()
2187 if (ioc->pcidev->irq) { in mpt_do_ioc_recovery()
2188 if (ioc->msi_enable && !pci_enable_msi(ioc->pcidev)) in mpt_do_ioc_recovery()
2190 ioc->name); in mpt_do_ioc_recovery()
2192 ioc->msi_enable = 0; in mpt_do_ioc_recovery()
2193 rc = request_irq(ioc->pcidev->irq, mpt_interrupt, in mpt_do_ioc_recovery()
2194 IRQF_SHARED, ioc->name, ioc); in mpt_do_ioc_recovery()
2197 "interrupt %d!\n", ioc->name, ioc->pcidev->irq); in mpt_do_ioc_recovery()
2198 if (ioc->msi_enable) in mpt_do_ioc_recovery()
2199 pci_disable_msi(ioc->pcidev); in mpt_do_ioc_recovery()
2203 ioc->pci_irq = ioc->pcidev->irq; in mpt_do_ioc_recovery()
2204 pci_set_master(ioc->pcidev); /* ?? */ in mpt_do_ioc_recovery()
2205 dprintk(ioc, printk(MYIOC_s_INFO_FMT "installed at interrupt " in mpt_do_ioc_recovery()
2206 "%d\n", ioc->name, ioc->pcidev->irq)); in mpt_do_ioc_recovery()
2215 if ((ret == 0) && ((rc = PrimeIocFifos(ioc)) != 0)) in mpt_do_ioc_recovery()
2221 if ((ret == 0) && ((rc = SendIocInit(ioc, sleepFlag)) != 0)) in mpt_do_ioc_recovery()
2224 if (alt_ioc_ready && ((rc = PrimeIocFifos(ioc->alt_ioc)) != 0)) { in mpt_do_ioc_recovery()
2226 ioc->alt_ioc->name, rc); in mpt_do_ioc_recovery()
2232 if ((rc = SendIocInit(ioc->alt_ioc, sleepFlag)) != 0) { in mpt_do_ioc_recovery()
2236 ioc->alt_ioc->name, rc); in mpt_do_ioc_recovery()
2241 if (ioc->upload_fw) { in mpt_do_ioc_recovery()
2242 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_do_ioc_recovery()
2243 "firmware upload required!\n", ioc->name)); in mpt_do_ioc_recovery()
2248 rc = mpt_do_upload(ioc, sleepFlag); in mpt_do_ioc_recovery()
2250 if (ioc->alt_ioc && ioc->alt_ioc->cached_fw) { in mpt_do_ioc_recovery()
2258 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_do_ioc_recovery()
2260 ioc->name, ioc->alt_ioc->name, ioc->alt_ioc->cached_fw)); in mpt_do_ioc_recovery()
2261 ioc->cached_fw = NULL; in mpt_do_ioc_recovery()
2265 "firmware upload failure!\n", ioc->name); in mpt_do_ioc_recovery()
2274 CHIPREG_WRITE32(&ioc->chip->IntMask, MPI_HIM_DIM); in mpt_do_ioc_recovery()
2275 ioc->active = 1; in mpt_do_ioc_recovery()
2278 if (reset_alt_ioc_active && ioc->alt_ioc) { in mpt_do_ioc_recovery()
2280 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT "alt_ioc reply irq re-enabled\n", in mpt_do_ioc_recovery()
2281 ioc->alt_ioc->name)); in mpt_do_ioc_recovery()
2282 CHIPREG_WRITE32(&ioc->alt_ioc->chip->IntMask, MPI_HIM_DIM); in mpt_do_ioc_recovery()
2283 ioc->alt_ioc->active = 1; in mpt_do_ioc_recovery()
2289 if ((ret == 0) && (!ioc->facts.EventState)) in mpt_do_ioc_recovery()
2290 (void) SendEventNotification(ioc, 1); /* 1=Enable EventNotification */ in mpt_do_ioc_recovery()
2292 if (ioc->alt_ioc && alt_ioc_ready && !ioc->alt_ioc->facts.EventState) in mpt_do_ioc_recovery()
2293 (void) SendEventNotification(ioc->alt_ioc, 1); /* 1=Enable EventNotification */ in mpt_do_ioc_recovery()
2306 mutex_init(&ioc->raid_data.inactive_list_mutex); in mpt_do_ioc_recovery()
2307 INIT_LIST_HEAD(&ioc->raid_data.inactive_list); in mpt_do_ioc_recovery()
2309 if (ioc->bus_type == SAS) { in mpt_do_ioc_recovery()
2312 if(ioc->facts.IOCExceptions & in mpt_do_ioc_recovery()
2314 ret = mptbase_sas_persist_operation(ioc, in mpt_do_ioc_recovery()
2322 mpt_findImVolumes(ioc); in mpt_do_ioc_recovery()
2324 } else if (ioc->bus_type == FC) { in mpt_do_ioc_recovery()
2325 if ((ioc->pfacts[0].ProtocolFlags & MPI_PORTFACTS_PROTOCOL_LAN) && in mpt_do_ioc_recovery()
2326 (ioc->lan_cnfg_page0.Header.PageLength == 0)) { in mpt_do_ioc_recovery()
2331 (void) GetLanConfigPages(ioc); in mpt_do_ioc_recovery()
2332 a = (u8*)&ioc->lan_cnfg_page1.HardwareAddressLow; in mpt_do_ioc_recovery()
2333 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_do_ioc_recovery()
2335 ioc->name, a[5], a[4], a[3], a[2], a[1], a[0])); in mpt_do_ioc_recovery()
2341 mpt_GetScsiPortSettings(ioc, 0); in mpt_do_ioc_recovery()
2345 mpt_readScsiDevicePageHeaders(ioc, 0); in mpt_do_ioc_recovery()
2349 if (ioc->facts.MsgVersion >= MPI_VERSION_01_02) in mpt_do_ioc_recovery()
2350 mpt_findImVolumes(ioc); in mpt_do_ioc_recovery()
2354 mpt_read_ioc_pg_1(ioc); in mpt_do_ioc_recovery()
2356 mpt_read_ioc_pg_4(ioc); in mpt_do_ioc_recovery()
2359 GetIoUnitPage2(ioc); in mpt_do_ioc_recovery()
2360 mpt_get_manufacturing_pg_0(ioc); in mpt_do_ioc_recovery()
2373 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_do_ioc_recovery()
2375 ioc->name, cb_idx)); in mpt_do_ioc_recovery()
2376 rc += mpt_signal_reset(cb_idx, ioc, MPT_IOC_POST_RESET); in mpt_do_ioc_recovery()
2381 drsprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_do_ioc_recovery()
2383 ioc->alt_ioc->name, cb_idx)); in mpt_do_ioc_recovery()
2384 rc += mpt_signal_reset(cb_idx, ioc->alt_ioc, MPT_IOC_POST_RESET); in mpt_do_ioc_recovery()
2393 free_irq(ioc->pci_irq, ioc); in mpt_do_ioc_recovery()
2394 if (ioc->msi_enable) in mpt_do_ioc_recovery()
2395 pci_disable_msi(ioc->pcidev); in mpt_do_ioc_recovery()
2414 mpt_detect_bound_ports(MPT_ADAPTER *ioc, struct pci_dev *pdev) in mpt_detect_bound_ports() argument
2421 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "PCI device %s devfn=%x/%x," in mpt_detect_bound_ports()
2423 ioc->name, pci_name(pdev), pdev->bus->number, in mpt_detect_bound_ports()
2437 if (ioc->alt_ioc != NULL) { in mpt_detect_bound_ports()
2439 ioc->name, ioc->alt_ioc->name); in mpt_detect_bound_ports()
2446 dprintk(ioc, printk(MYIOC_s_INFO_FMT "FOUND! binding to %s\n", in mpt_detect_bound_ports()
2447 ioc->name, ioc_srch->name)); in mpt_detect_bound_ports()
2448 ioc_srch->alt_ioc = ioc; in mpt_detect_bound_ports()
2449 ioc->alt_ioc = ioc_srch; in mpt_detect_bound_ports()
2461 mpt_adapter_disable(MPT_ADAPTER *ioc) in mpt_adapter_disable() argument
2466 if (ioc->cached_fw != NULL) { in mpt_adapter_disable()
2467 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: Pushing FW onto " in mpt_adapter_disable()
2468 "adapter\n", __func__, ioc->name)); in mpt_adapter_disable()
2469 if ((ret = mpt_downloadboot(ioc, (MpiFwHeader_t *) in mpt_adapter_disable()
2470 ioc->cached_fw, CAN_SLEEP)) < 0) { in mpt_adapter_disable()
2473 ioc->name, ret); in mpt_adapter_disable()
2478 CHIPREG_WRITE32(&ioc->chip->IntMask, 0xFFFFFFFF); in mpt_adapter_disable()
2479 ioc->active = 0; in mpt_adapter_disable()
2481 CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); in mpt_adapter_disable()
2483 if (ioc->alloc != NULL) { in mpt_adapter_disable()
2484 sz = ioc->alloc_sz; in mpt_adapter_disable()
2485 dexitprintk(ioc, printk(MYIOC_s_INFO_FMT "free @ %p, sz=%d bytes\n", in mpt_adapter_disable()
2486 ioc->name, ioc->alloc, ioc->alloc_sz)); in mpt_adapter_disable()
2487 pci_free_consistent(ioc->pcidev, sz, in mpt_adapter_disable()
2488 ioc->alloc, ioc->alloc_dma); in mpt_adapter_disable()
2489 ioc->reply_frames = NULL; in mpt_adapter_disable()
2490 ioc->req_frames = NULL; in mpt_adapter_disable()
2491 ioc->alloc = NULL; in mpt_adapter_disable()
2492 ioc->alloc_total -= sz; in mpt_adapter_disable()
2495 if (ioc->sense_buf_pool != NULL) { in mpt_adapter_disable()
2496 sz = (ioc->req_depth * MPT_SENSE_BUFFER_ALLOC); in mpt_adapter_disable()
2497 pci_free_consistent(ioc->pcidev, sz, in mpt_adapter_disable()
2498 ioc->sense_buf_pool, ioc->sense_buf_pool_dma); in mpt_adapter_disable()
2499 ioc->sense_buf_pool = NULL; in mpt_adapter_disable()
2500 ioc->alloc_total -= sz; in mpt_adapter_disable()
2503 if (ioc->events != NULL){ in mpt_adapter_disable()
2505 kfree(ioc->events); in mpt_adapter_disable()
2506 ioc->events = NULL; in mpt_adapter_disable()
2507 ioc->alloc_total -= sz; in mpt_adapter_disable()
2510 mpt_free_fw_memory(ioc); in mpt_adapter_disable()
2512 kfree(ioc->spi_data.nvram); in mpt_adapter_disable()
2513 mpt_inactive_raid_list_free(ioc); in mpt_adapter_disable()
2514 kfree(ioc->raid_data.pIocPg2); in mpt_adapter_disable()
2515 kfree(ioc->raid_data.pIocPg3); in mpt_adapter_disable()
2516 ioc->spi_data.nvram = NULL; in mpt_adapter_disable()
2517 ioc->raid_data.pIocPg3 = NULL; in mpt_adapter_disable()
2519 if (ioc->spi_data.pIocPg4 != NULL) { in mpt_adapter_disable()
2520 sz = ioc->spi_data.IocPg4Sz; in mpt_adapter_disable()
2521 pci_free_consistent(ioc->pcidev, sz, in mpt_adapter_disable()
2522 ioc->spi_data.pIocPg4, in mpt_adapter_disable()
2523 ioc->spi_data.IocPg4_dma); in mpt_adapter_disable()
2524 ioc->spi_data.pIocPg4 = NULL; in mpt_adapter_disable()
2525 ioc->alloc_total -= sz; in mpt_adapter_disable()
2528 if (ioc->ReqToChain != NULL) { in mpt_adapter_disable()
2529 kfree(ioc->ReqToChain); in mpt_adapter_disable()
2530 kfree(ioc->RequestNB); in mpt_adapter_disable()
2531 ioc->ReqToChain = NULL; in mpt_adapter_disable()
2534 kfree(ioc->ChainToChain); in mpt_adapter_disable()
2535 ioc->ChainToChain = NULL; in mpt_adapter_disable()
2537 if (ioc->HostPageBuffer != NULL) { in mpt_adapter_disable()
2538 if((ret = mpt_host_page_access_control(ioc, in mpt_adapter_disable()
2542 ioc->name, ret); in mpt_adapter_disable()
2544 dexitprintk(ioc, printk(MYIOC_s_INFO_FMT "HostPageBuffer free @ %p, sz=%d bytes\n", in mpt_adapter_disable()
2545 ioc->name, ioc->HostPageBuffer, ioc->HostPageBuffer_sz)); in mpt_adapter_disable()
2546 pci_free_consistent(ioc->pcidev, ioc->HostPageBuffer_sz, in mpt_adapter_disable()
2547 ioc->HostPageBuffer, ioc->HostPageBuffer_dma); in mpt_adapter_disable()
2548 ioc->HostPageBuffer = NULL; in mpt_adapter_disable()
2549 ioc->HostPageBuffer_sz = 0; in mpt_adapter_disable()
2550 ioc->alloc_total -= ioc->HostPageBuffer_sz; in mpt_adapter_disable()
2563 mpt_adapter_dispose(MPT_ADAPTER *ioc) in mpt_adapter_dispose() argument
2567 if (ioc == NULL) in mpt_adapter_dispose()
2570 sz_first = ioc->alloc_total; in mpt_adapter_dispose()
2572 mpt_adapter_disable(ioc); in mpt_adapter_dispose()
2574 if (ioc->pci_irq != -1) { in mpt_adapter_dispose()
2575 free_irq(ioc->pci_irq, ioc); in mpt_adapter_dispose()
2576 if (ioc->msi_enable) in mpt_adapter_dispose()
2577 pci_disable_msi(ioc->pcidev); in mpt_adapter_dispose()
2578 ioc->pci_irq = -1; in mpt_adapter_dispose()
2581 if (ioc->memmap != NULL) { in mpt_adapter_dispose()
2582 iounmap(ioc->memmap); in mpt_adapter_dispose()
2583 ioc->memmap = NULL; in mpt_adapter_dispose()
2586 pci_disable_device(ioc->pcidev); in mpt_adapter_dispose()
2587 pci_release_selected_regions(ioc->pcidev, ioc->bars); in mpt_adapter_dispose()
2590 if (ioc->mtrr_reg > 0) { in mpt_adapter_dispose()
2591 mtrr_del(ioc->mtrr_reg, 0, 0); in mpt_adapter_dispose()
2592 dprintk(ioc, printk(MYIOC_s_INFO_FMT "MTRR region de-registered\n", ioc->name)); in mpt_adapter_dispose()
2597 list_del(&ioc->list); in mpt_adapter_dispose()
2599 sz_last = ioc->alloc_total; in mpt_adapter_dispose()
2600 dprintk(ioc, printk(MYIOC_s_INFO_FMT "free'd %d of %d bytes\n", in mpt_adapter_dispose()
2601 ioc->name, sz_first-sz_last+(int)sizeof(*ioc), sz_first)); in mpt_adapter_dispose()
2603 if (ioc->alt_ioc) in mpt_adapter_dispose()
2604 ioc->alt_ioc->alt_ioc = NULL; in mpt_adapter_dispose()
2606 kfree(ioc); in mpt_adapter_dispose()
2615 MptDisplayIocCapabilities(MPT_ADAPTER *ioc) in MptDisplayIocCapabilities() argument
2619 printk(KERN_INFO "%s: ", ioc->name); in MptDisplayIocCapabilities()
2620 if (ioc->prod_name) in MptDisplayIocCapabilities()
2621 printk("%s: ", ioc->prod_name); in MptDisplayIocCapabilities()
2624 if (ioc->pfacts[0].ProtocolFlags & MPI_PORTFACTS_PROTOCOL_INITIATOR) { in MptDisplayIocCapabilities()
2629 if (ioc->pfacts[0].ProtocolFlags & MPI_PORTFACTS_PROTOCOL_TARGET) { in MptDisplayIocCapabilities()
2634 if (ioc->pfacts[0].ProtocolFlags & MPI_PORTFACTS_PROTOCOL_LAN) { in MptDisplayIocCapabilities()
2643 if (ioc->pfacts[0].ProtocolFlags & MPI_PORTFACTS_PROTOCOL_TARGET) { in MptDisplayIocCapabilities()
2668 MakeIocReady(MPT_ADAPTER *ioc, int force, int sleepFlag) in MakeIocReady() argument
2679 ioc_state = mpt_GetIocState(ioc, 0); in MakeIocReady()
2680 dhsprintk(ioc, printk(MYIOC_s_INFO_FMT "MakeIocReady [raw] state=%08x\n", ioc->name, ioc_state)); in MakeIocReady()
2689 ioc->name); in MakeIocReady()
2702 ioc->name); in MakeIocReady()
2704 ioc->name, ioc_state & MPI_DOORBELL_DATA_MASK); in MakeIocReady()
2711 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "IOC operational unexpected\n", in MakeIocReady()
2712 ioc->name)); in MakeIocReady()
2720 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT in MakeIocReady()
2722 ioc->name, whoinit, statefault, force)); in MakeIocReady()
2727 if ((r = SendIocReset(ioc, MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET, sleepFlag)) == 0) in MakeIocReady()
2734 hard_reset_done = KickStart(ioc, statefault||force, sleepFlag); in MakeIocReady()
2744 while ((ioc_state = mpt_GetIocState(ioc, 1)) != MPI_IOC_STATE_READY) { in MakeIocReady()
2750 if ((r = SendIocReset(ioc, MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET, sleepFlag)) != 0) { in MakeIocReady()
2751 printk(MYIOC_s_ERR_FMT "IOC msg unit reset failed!\n", ioc->name); in MakeIocReady()
2759 if ((r = SendIocReset(ioc, MPI_FUNCTION_IO_UNIT_RESET, sleepFlag)) != 0) { in MakeIocReady()
2760 printk(MYIOC_s_ERR_FMT "IO unit reset failed!\n", ioc->name); in MakeIocReady()
2768 ioc->name, (int)((ii+5)/HZ)); in MakeIocReady()
2782 ioc->name, in MakeIocReady()
2799 mpt_GetIocState(MPT_ADAPTER *ioc, int cooked) in mpt_GetIocState() argument
2804 s = CHIPREG_READ32(&ioc->chip->Doorbell); in mpt_GetIocState()
2808 ioc->last_state = sc; in mpt_GetIocState()
2823 GetIocFacts(MPT_ADAPTER *ioc, int sleepFlag, int reason) in GetIocFacts() argument
2835 if (ioc->last_state == MPI_IOC_STATE_RESET) { in GetIocFacts()
2837 ioc->name, ioc->last_state ); in GetIocFacts()
2841 facts = &ioc->facts; in GetIocFacts()
2854 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT in GetIocFacts()
2856 ioc->name, req_sz, reply_sz)); in GetIocFacts()
2861 r = mpt_handshake_req_reply_wait(ioc, req_sz, (u32*)&get_facts, in GetIocFacts()
2879 if (ioc->FirstWhoInit == WHOINIT_UNKNOWN) in GetIocFacts()
2880 ioc->FirstWhoInit = facts->WhoInit; in GetIocFacts()
2911 if ((ioc->facts.ProductID & MPI_FW_HEADER_PID_PROD_MASK) in GetIocFacts()
2913 ioc->ir_firmware = 1; in GetIocFacts()
2943 ioc->name); in GetIocFacts()
2949 ioc->NB_for_64_byte_frame = vv; in GetIocFacts()
2955 ioc->NBShiftFactor = shiftFactor; in GetIocFacts()
2956 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT in GetIocFacts()
2958 ioc->name, vv, shiftFactor, r)); in GetIocFacts()
2965 ioc->req_sz = min(MPT_DEFAULT_FRAME_SIZE, facts->RequestFrameSize * 4); in GetIocFacts()
2966 ioc->req_depth = min_t(int, MPT_MAX_REQ_DEPTH, facts->GlobalCredits); in GetIocFacts()
2967 ioc->reply_sz = MPT_REPLY_FRAME_SIZE; in GetIocFacts()
2968 ioc->reply_depth = min_t(int, MPT_DEFAULT_REPLY_DEPTH, facts->ReplyQueueDepth); in GetIocFacts()
2970 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "reply_sz=%3d, reply_depth=%4d\n", in GetIocFacts()
2971 ioc->name, ioc->reply_sz, ioc->reply_depth)); in GetIocFacts()
2972 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "req_sz =%3d, req_depth =%4d\n", in GetIocFacts()
2973 ioc->name, ioc->req_sz, ioc->req_depth)); in GetIocFacts()
2976 if ( (r = GetPortFacts(ioc, 0, sleepFlag)) != 0 ) in GetIocFacts()
2982 ioc->name, facts->MsgLength, (offsetof(IOCFactsReply_t, in GetIocFacts()
3000 GetPortFacts(MPT_ADAPTER *ioc, int portnum, int sleepFlag) in GetPortFacts() argument
3010 if (ioc->last_state == MPI_IOC_STATE_RESET) { in GetPortFacts()
3012 ioc->name, ioc->last_state ); in GetPortFacts()
3016 pfacts = &ioc->pfacts[portnum]; in GetPortFacts()
3030 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending get PortFacts(%d) request\n", in GetPortFacts()
3031 ioc->name, portnum)); in GetPortFacts()
3036 ii = mpt_handshake_req_reply_wait(ioc, req_sz, (u32*)&get_pfacts, in GetPortFacts()
3054 max_id = (ioc->bus_type == SAS) ? pfacts->PortSCSIID : in GetPortFacts()
3056 ioc->devices_per_bus = (max_id > 255) ? 256 : max_id; in GetPortFacts()
3057 ioc->number_of_buses = (ioc->devices_per_bus < 256) ? 1 : max_id/256; in GetPortFacts()
3065 ioc->devices_per_bus = 1; in GetPortFacts()
3066 ioc->number_of_buses = (max_id > 255) ? 255 : max_id; in GetPortFacts()
3083 SendIocInit(MPT_ADAPTER *ioc, int sleepFlag) in SendIocInit() argument
3102 if (ioc->facts.Flags & MPI_IOCFACTS_FLAGS_FW_DOWNLOAD_BOOT) in SendIocInit()
3103 ioc->upload_fw = 1; in SendIocInit()
3105 ioc->upload_fw = 0; in SendIocInit()
3106 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "upload_fw %d facts.Flags=%x\n", in SendIocInit()
3107 ioc->name, ioc->upload_fw, ioc->facts.Flags)); in SendIocInit()
3109 ioc_init.MaxDevices = (U8)ioc->devices_per_bus; in SendIocInit()
3110 ioc_init.MaxBuses = (U8)ioc->number_of_buses; in SendIocInit()
3111 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "facts.MsgVersion=%x\n", in SendIocInit()
3112 ioc->name, ioc->facts.MsgVersion)); in SendIocInit()
3113 if (ioc->facts.MsgVersion >= MPI_VERSION_01_05) { in SendIocInit()
3118 if (ioc->facts.Flags & MPI_IOCFACTS_FLAGS_HOST_PAGE_BUFFER_PERSISTENT) { in SendIocInit()
3119 ioc_init.HostPageBufferSGE = ioc->facts.HostPageBufferSGE; in SendIocInit()
3120 } else if(mpt_host_page_alloc(ioc, &ioc_init)) in SendIocInit()
3123 ioc_init.ReplyFrameSize = cpu_to_le16(ioc->reply_sz); /* in BYTES */ in SendIocInit()
3129 ioc_init.HostMfaHighAddr = cpu_to_le32((u32)((u64)ioc->alloc_dma >> 32)); in SendIocInit()
3130 ioc_init.SenseBufferHighAddr = cpu_to_le32((u32)((u64)ioc->sense_buf_pool_dma >> 32)); in SendIocInit()
3137 ioc->facts.CurrentHostMfaHighAddr = ioc_init.HostMfaHighAddr; in SendIocInit()
3138 ioc->facts.CurrentSenseBufferHighAddr = ioc_init.SenseBufferHighAddr; in SendIocInit()
3139 ioc->facts.MaxDevices = ioc_init.MaxDevices; in SendIocInit()
3140 ioc->facts.MaxBuses = ioc_init.MaxBuses; in SendIocInit()
3142 dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending IOCInit (req @ %p)\n", in SendIocInit()
3143 ioc->name, &ioc_init)); in SendIocInit()
3145 r = mpt_handshake_req_reply_wait(ioc, sizeof(IOCInit_t), (u32*)&ioc_init, in SendIocInit()
3148 printk(MYIOC_s_ERR_FMT "Sending IOCInit failed(%d)!\n",ioc->name, r); in SendIocInit()
3156 dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending PortEnable (req @ %p)\n", in SendIocInit()
3157 ioc->name, &ioc_init)); in SendIocInit()
3159 if ((r = SendPortEnable(ioc, 0, sleepFlag)) != 0) { in SendIocInit()
3160 printk(MYIOC_s_ERR_FMT "Sending PortEnable failed(%d)!\n",ioc->name, r); in SendIocInit()
3170 state = mpt_GetIocState(ioc, 1); in SendIocInit()
3180 ioc->name, (int)((count+5)/HZ)); in SendIocInit()
3184 state = mpt_GetIocState(ioc, 1); in SendIocInit()
3187 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Wait IOC_OPERATIONAL state (cnt=%d)\n", in SendIocInit()
3188 ioc->name, count)); in SendIocInit()
3190 ioc->aen_event_read_flag=0; in SendIocInit()
3206 SendPortEnable(MPT_ADAPTER *ioc, int portnum, int sleepFlag) in SendPortEnable() argument
3227 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending Port(%d)Enable (req @ %p)\n", in SendPortEnable()
3228 ioc->name, portnum, &port_enable)); in SendPortEnable()
3232 if (ioc->ir_firmware || ioc->bus_type == SAS) { in SendPortEnable()
3233 rc = mpt_handshake_req_reply_wait(ioc, req_sz, in SendPortEnable()
3237 rc = mpt_handshake_req_reply_wait(ioc, req_sz, in SendPortEnable()
3255 mpt_alloc_fw_memory(MPT_ADAPTER *ioc, int size) in mpt_alloc_fw_memory() argument
3259 if (ioc->cached_fw) { in mpt_alloc_fw_memory()
3263 else if (ioc->alt_ioc && ioc->alt_ioc->cached_fw) { in mpt_alloc_fw_memory()
3264 ioc->cached_fw = ioc->alt_ioc->cached_fw; /* use alt_ioc's memory */ in mpt_alloc_fw_memory()
3265 ioc->cached_fw_dma = ioc->alt_ioc->cached_fw_dma; in mpt_alloc_fw_memory()
3269 ioc->cached_fw = pci_alloc_consistent(ioc->pcidev, size, &ioc->cached_fw_dma); in mpt_alloc_fw_memory()
3270 if (!ioc->cached_fw) { in mpt_alloc_fw_memory()
3272 ioc->name); in mpt_alloc_fw_memory()
3275 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "FW Image @ %p[%p], sz=%d[%x] bytes\n", in mpt_alloc_fw_memory()
3276 ioc->name, ioc->cached_fw, (void *)(ulong)ioc->cached_fw_dma, size, size)); in mpt_alloc_fw_memory()
3277 ioc->alloc_total += size; in mpt_alloc_fw_memory()
3292 mpt_free_fw_memory(MPT_ADAPTER *ioc) in mpt_free_fw_memory() argument
3296 if (!ioc->cached_fw) in mpt_free_fw_memory()
3299 sz = ioc->facts.FWImageSize; in mpt_free_fw_memory()
3300 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "free_fw_memory: FW Image @ %p[%p], sz=%d[%x] bytes\n", in mpt_free_fw_memory()
3301 ioc->name, ioc->cached_fw, (void *)(ulong)ioc->cached_fw_dma, sz, sz)); in mpt_free_fw_memory()
3302 pci_free_consistent(ioc->pcidev, sz, ioc->cached_fw, ioc->cached_fw_dma); in mpt_free_fw_memory()
3303 ioc->alloc_total -= sz; in mpt_free_fw_memory()
3304 ioc->cached_fw = NULL; in mpt_free_fw_memory()
3322 mpt_do_upload(MPT_ADAPTER *ioc, int sleepFlag) in mpt_do_upload() argument
3335 if ((sz = ioc->facts.FWImageSize) == 0) in mpt_do_upload()
3338 if (mpt_alloc_fw_memory(ioc, ioc->facts.FWImageSize) != 0) in mpt_do_upload()
3341 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT ": FW Image @ %p[%p], sz=%d[%x] bytes\n", in mpt_do_upload()
3342 ioc->name, ioc->cached_fw, (void *)(ulong)ioc->cached_fw_dma, sz, sz)); in mpt_do_upload()
3344 prequest = (sleepFlag == NO_SLEEP) ? kzalloc(ioc->req_sz, GFP_ATOMIC) : in mpt_do_upload()
3345 kzalloc(ioc->req_sz, GFP_KERNEL); in mpt_do_upload()
3347 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "fw upload failed " in mpt_do_upload()
3348 "while allocating memory \n", ioc->name)); in mpt_do_upload()
3349 mpt_free_fw_memory(ioc); in mpt_do_upload()
3370 mpt_add_sge((char *)ptcsge, flagsLength, ioc->cached_fw_dma); in mpt_do_upload()
3373 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT ": Sending FW Upload (req @ %p) sgeoffset=%d \n", in mpt_do_upload()
3374 ioc->name, prequest, sgeoffset)); in mpt_do_upload()
3375 DBG_DUMP_FW_REQUEST_FRAME(ioc, (u32 *)prequest); in mpt_do_upload()
3377 ii = mpt_handshake_req_reply_wait(ioc, sgeoffset, (u32*)prequest, in mpt_do_upload()
3380 dinitprintk(ioc, printk(MYIOC_s_INFO_FMT ": FW Upload completed rc=%x \n", ioc->name, ii)); in mpt_do_upload()
3395 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT ": do_upload cmdStatus=%d \n", in mpt_do_upload()
3396 ioc->name, cmdStatus)); in mpt_do_upload()
3401 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT ": fw upload failed, freeing image \n", in mpt_do_upload()
3402 ioc->name)); in mpt_do_upload()
3403 mpt_free_fw_memory(ioc); in mpt_do_upload()
3425 mpt_downloadboot(MPT_ADAPTER *ioc, MpiFwHeader_t *pFwHeader, int sleepFlag) in mpt_downloadboot() argument
3437 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "downloadboot: fw size 0x%x (%d), FW Ptr %p\n", in mpt_downloadboot()
3438 ioc->name, pFwHeader->ImageSize, pFwHeader->ImageSize, pFwHeader)); in mpt_downloadboot()
3440 CHIPREG_WRITE32(&ioc->chip->WriteSequence, 0xFF); in mpt_downloadboot()
3441 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_1ST_KEY_VALUE); in mpt_downloadboot()
3442 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_2ND_KEY_VALUE); in mpt_downloadboot()
3443 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_3RD_KEY_VALUE); in mpt_downloadboot()
3444 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_4TH_KEY_VALUE); in mpt_downloadboot()
3445 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_5TH_KEY_VALUE); in mpt_downloadboot()
3447 CHIPREG_WRITE32(&ioc->chip->Diagnostic, (MPI_DIAG_PREVENT_IOC_BOOT | MPI_DIAG_DISABLE_ARM)); in mpt_downloadboot()
3456 diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic); in mpt_downloadboot()
3457 CHIPREG_WRITE32(&ioc->chip->Diagnostic, diag0val | MPI_DIAG_RESET_ADAPTER); in mpt_downloadboot()
3460 diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic); in mpt_downloadboot()
3462 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "RESET_ADAPTER cleared, count=%d\n", in mpt_downloadboot()
3463 ioc->name, count)); in mpt_downloadboot()
3475 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "downloadboot failed! " in mpt_downloadboot()
3477 ioc->name, diag0val)); in mpt_downloadboot()
3481 CHIPREG_WRITE32(&ioc->chip->WriteSequence, 0xFF); in mpt_downloadboot()
3482 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_1ST_KEY_VALUE); in mpt_downloadboot()
3483 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_2ND_KEY_VALUE); in mpt_downloadboot()
3484 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_3RD_KEY_VALUE); in mpt_downloadboot()
3485 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_4TH_KEY_VALUE); in mpt_downloadboot()
3486 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_5TH_KEY_VALUE); in mpt_downloadboot()
3489 CHIPREG_WRITE32(&ioc->chip->Diagnostic, (MPI_DIAG_RW_ENABLE | MPI_DIAG_DISABLE_ARM)); in mpt_downloadboot()
3497 if (ioc->errata_flag_1064) in mpt_downloadboot()
3498 pci_enable_io_access(ioc->pcidev); in mpt_downloadboot()
3500 CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwAddress, pFwHeader->LoadStartAddress); in mpt_downloadboot()
3501 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "LoadStart addr written 0x%x \n", in mpt_downloadboot()
3502 ioc->name, pFwHeader->LoadStartAddress)); in mpt_downloadboot()
3504 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Write FW Image: 0x%x bytes @ %p\n", in mpt_downloadboot()
3505 ioc->name, fwSize*4, ptrFw)); in mpt_downloadboot()
3507 CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwData, *ptrFw++); in mpt_downloadboot()
3519 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Write Ext Image: 0x%x (%d) bytes @ %p load_addr=%x\n", in mpt_downloadboot()
3520 ioc->name, fwSize*4, fwSize*4, ptrFw, load_addr)); in mpt_downloadboot()
3521 CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwAddress, load_addr); in mpt_downloadboot()
3524 CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwData, *ptrFw++); in mpt_downloadboot()
3530 …ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Write IopResetVector Addr=%x! \n", ioc->name, pFwHeader-… in mpt_downloadboot()
3531 CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwAddress, pFwHeader->IopResetRegAddr); in mpt_downloadboot()
3534 …ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Write IopResetVector Value=%x! \n", ioc->name, pFwHeader-… in mpt_downloadboot()
3535 CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwData, pFwHeader->IopResetVectorValue); in mpt_downloadboot()
3540 if (ioc->bus_type == SPI) { in mpt_downloadboot()
3545 CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwAddress, 0x3F000000); in mpt_downloadboot()
3546 diagRwData = CHIPREG_PIO_READ32(&ioc->pio_chip->DiagRwData); in mpt_downloadboot()
3548 CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwAddress, 0x3F000000); in mpt_downloadboot()
3549 CHIPREG_PIO_WRITE32(&ioc->pio_chip->DiagRwData, diagRwData); in mpt_downloadboot()
3552 diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic); in mpt_downloadboot()
3553 CHIPREG_WRITE32(&ioc->chip->Diagnostic, diag0val | in mpt_downloadboot()
3564 if (ioc->errata_flag_1064) in mpt_downloadboot()
3565 pci_disable_io_access(ioc->pcidev); in mpt_downloadboot()
3567 diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic); in mpt_downloadboot()
3568 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "downloadboot diag0val=%x, " in mpt_downloadboot()
3570 ioc->name, diag0val)); in mpt_downloadboot()
3572 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "downloadboot now diag0val=%x\n", in mpt_downloadboot()
3573 ioc->name, diag0val)); in mpt_downloadboot()
3574 CHIPREG_WRITE32(&ioc->chip->Diagnostic, diag0val); in mpt_downloadboot()
3577 CHIPREG_WRITE32(&ioc->chip->WriteSequence, 0xFF); in mpt_downloadboot()
3579 if (ioc->bus_type == SAS) { in mpt_downloadboot()
3580 ioc_state = mpt_GetIocState(ioc, 0); in mpt_downloadboot()
3581 if ( (GetIocFacts(ioc, sleepFlag, in mpt_downloadboot()
3583 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "GetIocFacts failed: IocState=%x\n", in mpt_downloadboot()
3584 ioc->name, ioc_state)); in mpt_downloadboot()
3590 if ((ioc_state = mpt_GetIocState(ioc, 0)) & MPI_IOC_STATE_READY) { in mpt_downloadboot()
3591 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_downloadboot()
3593 ioc->name, count, ioc_state)); in mpt_downloadboot()
3594 if (ioc->bus_type == SAS) { in mpt_downloadboot()
3597 if ((SendIocInit(ioc, sleepFlag)) != 0) { in mpt_downloadboot()
3598 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_downloadboot()
3600 ioc->name)); in mpt_downloadboot()
3603 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_downloadboot()
3605 ioc->name)); in mpt_downloadboot()
3614 ddlprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_downloadboot()
3615 "downloadboot failed! IocState=%x\n",ioc->name, ioc_state)); in mpt_downloadboot()
3646 KickStart(MPT_ADAPTER *ioc, int force, int sleepFlag) in KickStart() argument
3652 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "KickStarting!\n", ioc->name)); in KickStart()
3653 if (ioc->bus_type == SPI) { in KickStart()
3657 SendIocReset(ioc, MPI_FUNCTION_IOC_MESSAGE_UNIT_RESET, sleepFlag); in KickStart()
3666 hard_reset_done = mpt_diag_reset(ioc, force, sleepFlag); in KickStart()
3670 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Diagnostic reset successful!\n", in KickStart()
3671 ioc->name)); in KickStart()
3675 ioc_state = mpt_GetIocState(ioc, 1); in KickStart()
3677 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "KickStart successful! (cnt=%d)\n", in KickStart()
3678 ioc->name, cnt)); in KickStart()
3688 dinitprintk(ioc, printk(MYIOC_s_ERR_FMT "Failed to come READY after reset! IocState=%x\n", in KickStart()
3689 ioc->name, mpt_GetIocState(ioc, 0))); in KickStart()
3713 mpt_diag_reset(MPT_ADAPTER *ioc, int ignore, int sleepFlag) in mpt_diag_reset() argument
3723 CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); in mpt_diag_reset()
3725 if (ioc->pcidev->device == MPI_MANUFACTPAGE_DEVID_SAS1078) { in mpt_diag_reset()
3726 drsprintk(ioc, printk(MYIOC_s_WARN_FMT "%s: Doorbell=%p; 1078 reset " in mpt_diag_reset()
3727 "address=%p\n", ioc->name, __func__, in mpt_diag_reset()
3728 &ioc->chip->Doorbell, &ioc->chip->Reset_1078)); in mpt_diag_reset()
3729 CHIPREG_WRITE32(&ioc->chip->Reset_1078, 0x07); in mpt_diag_reset()
3736 doorbell = CHIPREG_READ32(&ioc->chip->Doorbell); in mpt_diag_reset()
3739 drsprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_diag_reset()
3742 ioc->name, doorbell, count)); in mpt_diag_reset()
3757 diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic); in mpt_diag_reset()
3759 if (ioc->debug_level & MPT_DEBUG) { in mpt_diag_reset()
3760 if (ioc->alt_ioc) in mpt_diag_reset()
3761 diag1val = CHIPREG_READ32(&ioc->alt_ioc->chip->Diagnostic); in mpt_diag_reset()
3762 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "DbG1: diag0=%08x, diag1=%08x\n", in mpt_diag_reset()
3763 ioc->name, diag0val, diag1val)); in mpt_diag_reset()
3774 CHIPREG_WRITE32(&ioc->chip->WriteSequence, 0xFF); in mpt_diag_reset()
3775 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_1ST_KEY_VALUE); in mpt_diag_reset()
3776 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_2ND_KEY_VALUE); in mpt_diag_reset()
3777 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_3RD_KEY_VALUE); in mpt_diag_reset()
3778 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_4TH_KEY_VALUE); in mpt_diag_reset()
3779 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_5TH_KEY_VALUE); in mpt_diag_reset()
3791 ioc->name, diag0val); in mpt_diag_reset()
3796 diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic); in mpt_diag_reset()
3798 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Wrote magic DiagWriteEn sequence (%x)\n", in mpt_diag_reset()
3799 ioc->name, diag0val)); in mpt_diag_reset()
3802 if (ioc->debug_level & MPT_DEBUG) { in mpt_diag_reset()
3803 if (ioc->alt_ioc) in mpt_diag_reset()
3804 diag1val = CHIPREG_READ32(&ioc->alt_ioc->chip->Diagnostic); in mpt_diag_reset()
3805 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "DbG2: diag0=%08x, diag1=%08x\n", in mpt_diag_reset()
3806 ioc->name, diag0val, diag1val)); in mpt_diag_reset()
3812 CHIPREG_WRITE32(&ioc->chip->Diagnostic, diag0val | MPI_DIAG_DISABLE_ARM); in mpt_diag_reset()
3819 CHIPREG_WRITE32(&ioc->chip->Diagnostic, diag0val | MPI_DIAG_RESET_ADAPTER); in mpt_diag_reset()
3821 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Diagnostic reset performed\n", in mpt_diag_reset()
3822 ioc->name)); in mpt_diag_reset()
3836 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_diag_reset()
3838 ioc->name, cb_idx)); in mpt_diag_reset()
3839 r += mpt_signal_reset(cb_idx, ioc, MPT_IOC_PRE_RESET); in mpt_diag_reset()
3840 if (ioc->alt_ioc) { in mpt_diag_reset()
3841 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_diag_reset()
3843 ioc->name, ioc->alt_ioc->name, cb_idx)); in mpt_diag_reset()
3844 r += mpt_signal_reset(cb_idx, ioc->alt_ioc, MPT_IOC_PRE_RESET); in mpt_diag_reset()
3851 if (ioc->cached_fw) in mpt_diag_reset()
3852 cached_fw = (MpiFwHeader_t *)ioc->cached_fw; in mpt_diag_reset()
3853 else if (ioc->alt_ioc && ioc->alt_ioc->cached_fw) in mpt_diag_reset()
3854 cached_fw = (MpiFwHeader_t *)ioc->alt_ioc->cached_fw; in mpt_diag_reset()
3863 diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic); in mpt_diag_reset()
3868 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "cached_fw: diag0val=%x count=%d\n", in mpt_diag_reset()
3869 ioc->name, diag0val, count)); in mpt_diag_reset()
3877 if ((count = mpt_downloadboot(ioc, cached_fw, sleepFlag)) < 0) { in mpt_diag_reset()
3879 "firmware downloadboot failure (%d)!\n", ioc->name, count); in mpt_diag_reset()
3890 doorbell = CHIPREG_READ32(&ioc->chip->Doorbell); in mpt_diag_reset()
3907 diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic); in mpt_diag_reset()
3908 if (ioc->debug_level & MPT_DEBUG) { in mpt_diag_reset()
3909 if (ioc->alt_ioc) in mpt_diag_reset()
3910 diag1val = CHIPREG_READ32(&ioc->alt_ioc->chip->Diagnostic); in mpt_diag_reset()
3911 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "DbG3: diag0=%08x, diag1=%08x\n", in mpt_diag_reset()
3912 ioc->name, diag0val, diag1val)); in mpt_diag_reset()
3918 diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic); in mpt_diag_reset()
3924 CHIPREG_WRITE32(&ioc->chip->WriteSequence, 0xFF); in mpt_diag_reset()
3925 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_1ST_KEY_VALUE); in mpt_diag_reset()
3926 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_2ND_KEY_VALUE); in mpt_diag_reset()
3927 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_3RD_KEY_VALUE); in mpt_diag_reset()
3928 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_4TH_KEY_VALUE); in mpt_diag_reset()
3929 CHIPREG_WRITE32(&ioc->chip->WriteSequence, MPI_WRSEQ_5TH_KEY_VALUE); in mpt_diag_reset()
3941 ioc->name, diag0val); in mpt_diag_reset()
3944 diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic); in mpt_diag_reset()
3947 CHIPREG_WRITE32(&ioc->chip->Diagnostic, diag0val); in mpt_diag_reset()
3948 diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic); in mpt_diag_reset()
3951 ioc->name); in mpt_diag_reset()
3956 CHIPREG_WRITE32(&ioc->chip->WriteSequence, 0xFFFFFFFF); in mpt_diag_reset()
3960 diag0val = CHIPREG_READ32(&ioc->chip->Diagnostic); in mpt_diag_reset()
3963 ioc->name, diag0val); in mpt_diag_reset()
3967 if (ioc->debug_level & MPT_DEBUG) { in mpt_diag_reset()
3968 if (ioc->alt_ioc) in mpt_diag_reset()
3969 diag1val = CHIPREG_READ32(&ioc->alt_ioc->chip->Diagnostic); in mpt_diag_reset()
3970 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "DbG4: diag0=%08x, diag1=%08x\n", in mpt_diag_reset()
3971 ioc->name, diag0val, diag1val)); in mpt_diag_reset()
3977 ioc->facts.EventState = 0; in mpt_diag_reset()
3979 if (ioc->alt_ioc) in mpt_diag_reset()
3980 ioc->alt_ioc->facts.EventState = 0; in mpt_diag_reset()
3998 SendIocReset(MPT_ADAPTER *ioc, u8 reset_type, int sleepFlag) in SendIocReset() argument
4004 drsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending IOC reset(0x%02x)!\n", in SendIocReset()
4005 ioc->name, reset_type)); in SendIocReset()
4006 CHIPREG_WRITE32(&ioc->chip->Doorbell, reset_type<<MPI_DOORBELL_FUNCTION_SHIFT); in SendIocReset()
4007 if ((r = WaitForDoorbellAck(ioc, 5, sleepFlag)) < 0) in SendIocReset()
4015 while ((state = mpt_GetIocState(ioc, 1)) != MPI_IOC_STATE_READY) { in SendIocReset()
4023 ioc->name, (int)((count+5)/HZ)); in SendIocReset()
4038 if (ioc->facts.Function) in SendIocReset()
4039 ioc->facts.EventState = 0; in SendIocReset()
4053 initChainBuffers(MPT_ADAPTER *ioc) in initChainBuffers() argument
4062 if (ioc->ReqToChain == NULL) { in initChainBuffers()
4063 sz = ioc->req_depth * sizeof(int); in initChainBuffers()
4068 ioc->ReqToChain = (int *) mem; in initChainBuffers()
4069 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ReqToChain alloc @ %p, sz=%d bytes\n", in initChainBuffers()
4070 ioc->name, mem, sz)); in initChainBuffers()
4075 ioc->RequestNB = (int *) mem; in initChainBuffers()
4076 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "RequestNB alloc @ %p, sz=%d bytes\n", in initChainBuffers()
4077 ioc->name, mem, sz)); in initChainBuffers()
4079 for (ii = 0; ii < ioc->req_depth; ii++) { in initChainBuffers()
4080 ioc->ReqToChain[ii] = MPT_HOST_NO_CHAIN; in initChainBuffers()
4093 scale = ioc->req_sz/(sizeof(dma_addr_t) + sizeof(u32)); in initChainBuffers()
4095 num_sge = scale + (ioc->req_sz - 60) / (sizeof(dma_addr_t) + sizeof(u32)); in initChainBuffers()
4097 num_sge = 1+ scale + (ioc->req_sz - 64) / (sizeof(dma_addr_t) + sizeof(u32)); in initChainBuffers()
4100 numSGE = (scale - 1) * (ioc->facts.MaxChainDepth-1) + scale + in initChainBuffers()
4101 (ioc->req_sz - 60) / (sizeof(dma_addr_t) + sizeof(u32)); in initChainBuffers()
4103 numSGE = 1 + (scale - 1) * (ioc->facts.MaxChainDepth-1) + scale + in initChainBuffers()
4104 (ioc->req_sz - 64) / (sizeof(dma_addr_t) + sizeof(u32)); in initChainBuffers()
4106 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "num_sge=%d numSGE=%d\n", in initChainBuffers()
4107 ioc->name, num_sge, numSGE)); in initChainBuffers()
4119 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Now numSGE=%d num_sge=%d num_chain=%d\n", in initChainBuffers()
4120 ioc->name, numSGE, num_sge, num_chain)); in initChainBuffers()
4122 if (ioc->bus_type == SPI) in initChainBuffers()
4127 ioc->num_chain = num_chain; in initChainBuffers()
4130 if (ioc->ChainToChain == NULL) { in initChainBuffers()
4135 ioc->ChainToChain = (int *) mem; in initChainBuffers()
4136 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ChainToChain alloc @ %p, sz=%d bytes\n", in initChainBuffers()
4137 ioc->name, mem, sz)); in initChainBuffers()
4139 mem = (u8 *) ioc->ChainToChain; in initChainBuffers()
4157 PrimeIocFifos(MPT_ADAPTER *ioc) in PrimeIocFifos() argument
4167 if (ioc->reply_frames == NULL) { in PrimeIocFifos()
4168 if ( (num_chain = initChainBuffers(ioc)) < 0) in PrimeIocFifos()
4171 total_size = reply_sz = (ioc->reply_sz * ioc->reply_depth); in PrimeIocFifos()
4172 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ReplyBuffer sz=%d bytes, ReplyDepth=%d\n", in PrimeIocFifos()
4173 ioc->name, ioc->reply_sz, ioc->reply_depth)); in PrimeIocFifos()
4174 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ReplyBuffer sz=%d[%x] bytes\n", in PrimeIocFifos()
4175 ioc->name, reply_sz, reply_sz)); in PrimeIocFifos()
4177 sz = (ioc->req_sz * ioc->req_depth); in PrimeIocFifos()
4178 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "RequestBuffer sz=%d bytes, RequestDepth=%d\n", in PrimeIocFifos()
4179 ioc->name, ioc->req_sz, ioc->req_depth)); in PrimeIocFifos()
4180 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "RequestBuffer sz=%d[%x] bytes\n", in PrimeIocFifos()
4181 ioc->name, sz, sz)); in PrimeIocFifos()
4184 sz = num_chain * ioc->req_sz; /* chain buffer pool size */ in PrimeIocFifos()
4185 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ChainBuffer sz=%d bytes, ChainDepth=%d\n", in PrimeIocFifos()
4186 ioc->name, ioc->req_sz, num_chain)); in PrimeIocFifos()
4187 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ChainBuffer sz=%d[%x] bytes num_chain=%d\n", in PrimeIocFifos()
4188 ioc->name, sz, sz, num_chain)); in PrimeIocFifos()
4191 mem = pci_alloc_consistent(ioc->pcidev, total_size, &alloc_dma); in PrimeIocFifos()
4194 ioc->name); in PrimeIocFifos()
4198 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Total alloc @ %p[%p], sz=%d[%x] bytes\n", in PrimeIocFifos()
4199 ioc->name, mem, (void *)(ulong)alloc_dma, total_size, total_size)); in PrimeIocFifos()
4202 ioc->alloc_total += total_size; in PrimeIocFifos()
4203 ioc->alloc = mem; in PrimeIocFifos()
4204 ioc->alloc_dma = alloc_dma; in PrimeIocFifos()
4205 ioc->alloc_sz = total_size; in PrimeIocFifos()
4206 ioc->reply_frames = (MPT_FRAME_HDR *) mem; in PrimeIocFifos()
4207 ioc->reply_frames_low_dma = (u32) (alloc_dma & 0xFFFFFFFF); in PrimeIocFifos()
4209 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ReplyBuffers @ %p[%p]\n", in PrimeIocFifos()
4210 ioc->name, ioc->reply_frames, (void *)(ulong)alloc_dma)); in PrimeIocFifos()
4217 ioc->req_frames = (MPT_FRAME_HDR *) mem; in PrimeIocFifos()
4218 ioc->req_frames_dma = alloc_dma; in PrimeIocFifos()
4220 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "RequestBuffers @ %p[%p]\n", in PrimeIocFifos()
4221 ioc->name, mem, (void *)(ulong)alloc_dma)); in PrimeIocFifos()
4223 ioc->req_frames_low_dma = (u32) (alloc_dma & 0xFFFFFFFF); in PrimeIocFifos()
4231 ioc->mtrr_reg = mtrr_add(ioc->req_frames_dma, in PrimeIocFifos()
4234 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "MTRR region registered (base:size=%08x:%x)\n", in PrimeIocFifos()
4235 ioc->name, ioc->req_frames_dma, sz)); in PrimeIocFifos()
4238 for (i = 0; i < ioc->req_depth; i++) { in PrimeIocFifos()
4239 alloc_dma += ioc->req_sz; in PrimeIocFifos()
4240 mem += ioc->req_sz; in PrimeIocFifos()
4243 ioc->ChainBuffer = mem; in PrimeIocFifos()
4244 ioc->ChainBufferDMA = alloc_dma; in PrimeIocFifos()
4246 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ChainBuffers @ %p(%p)\n", in PrimeIocFifos()
4247 ioc->name, ioc->ChainBuffer, (void *)(ulong)ioc->ChainBufferDMA)); in PrimeIocFifos()
4252 INIT_LIST_HEAD(&ioc->FreeChainQ); in PrimeIocFifos()
4256 mem = (u8 *)ioc->ChainBuffer; in PrimeIocFifos()
4259 list_add_tail(&mf->u.frame.linkage.list, &ioc->FreeChainQ); in PrimeIocFifos()
4260 mem += ioc->req_sz; in PrimeIocFifos()
4265 alloc_dma = ioc->req_frames_dma; in PrimeIocFifos()
4266 mem = (u8 *) ioc->req_frames; in PrimeIocFifos()
4268 spin_lock_irqsave(&ioc->FreeQlock, flags); in PrimeIocFifos()
4269 INIT_LIST_HEAD(&ioc->FreeQ); in PrimeIocFifos()
4270 for (i = 0; i < ioc->req_depth; i++) { in PrimeIocFifos()
4274 list_add_tail(&mf->u.frame.linkage.list, &ioc->FreeQ); in PrimeIocFifos()
4276 mem += ioc->req_sz; in PrimeIocFifos()
4278 spin_unlock_irqrestore(&ioc->FreeQlock, flags); in PrimeIocFifos()
4280 sz = (ioc->req_depth * MPT_SENSE_BUFFER_ALLOC); in PrimeIocFifos()
4281 ioc->sense_buf_pool = in PrimeIocFifos()
4282 pci_alloc_consistent(ioc->pcidev, sz, &ioc->sense_buf_pool_dma); in PrimeIocFifos()
4283 if (ioc->sense_buf_pool == NULL) { in PrimeIocFifos()
4285 ioc->name); in PrimeIocFifos()
4289 ioc->sense_buf_low_dma = (u32) (ioc->sense_buf_pool_dma & 0xFFFFFFFF); in PrimeIocFifos()
4290 ioc->alloc_total += sz; in PrimeIocFifos()
4291 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "SenseBuffers @ %p[%p]\n", in PrimeIocFifos()
4292 ioc->name, ioc->sense_buf_pool, (void *)(ulong)ioc->sense_buf_pool_dma)); in PrimeIocFifos()
4298 alloc_dma = ioc->alloc_dma; in PrimeIocFifos()
4299 dinitprintk(ioc, printk(MYIOC_s_DEBUG_FMT "ReplyBuffers @ %p[%p]\n", in PrimeIocFifos()
4300 ioc->name, ioc->reply_frames, (void *)(ulong)alloc_dma)); in PrimeIocFifos()
4302 for (i = 0; i < ioc->reply_depth; i++) { in PrimeIocFifos()
4304 CHIPREG_WRITE32(&ioc->chip->ReplyFifo, alloc_dma); in PrimeIocFifos()
4305 alloc_dma += ioc->reply_sz; in PrimeIocFifos()
4311 if (ioc->alloc != NULL) { in PrimeIocFifos()
4312 sz = ioc->alloc_sz; in PrimeIocFifos()
4313 pci_free_consistent(ioc->pcidev, in PrimeIocFifos()
4315 ioc->alloc, ioc->alloc_dma); in PrimeIocFifos()
4316 ioc->reply_frames = NULL; in PrimeIocFifos()
4317 ioc->req_frames = NULL; in PrimeIocFifos()
4318 ioc->alloc_total -= sz; in PrimeIocFifos()
4320 if (ioc->sense_buf_pool != NULL) { in PrimeIocFifos()
4321 sz = (ioc->req_depth * MPT_SENSE_BUFFER_ALLOC); in PrimeIocFifos()
4322 pci_free_consistent(ioc->pcidev, in PrimeIocFifos()
4324 ioc->sense_buf_pool, ioc->sense_buf_pool_dma); in PrimeIocFifos()
4325 ioc->sense_buf_pool = NULL; in PrimeIocFifos()
4350 mpt_handshake_req_reply_wait(MPT_ADAPTER *ioc, int reqBytes, u32 *req, in mpt_handshake_req_reply_wait() argument
4360 ioc->hs_reply_idx = 0; in mpt_handshake_req_reply_wait()
4361 mptReply = (MPIDefaultReply_t *) ioc->hs_reply; in mpt_handshake_req_reply_wait()
4369 CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); in mpt_handshake_req_reply_wait()
4370 CHIPREG_WRITE32(&ioc->chip->Doorbell, in mpt_handshake_req_reply_wait()
4377 if ((t = WaitForDoorbellInt(ioc, 5, sleepFlag)) < 0) in mpt_handshake_req_reply_wait()
4380 dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "HandShake request start reqBytes=%d, WaitCnt=%d%s\n", in mpt_handshake_req_reply_wait()
4381 ioc->name, reqBytes, t, failcnt ? " - MISSING DOORBELL HANDSHAKE!" : "")); in mpt_handshake_req_reply_wait()
4384 if (!(CHIPREG_READ32(&ioc->chip->Doorbell) & MPI_DOORBELL_ACTIVE)) in mpt_handshake_req_reply_wait()
4392 CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); in mpt_handshake_req_reply_wait()
4393 if (!failcnt && (t = WaitForDoorbellAck(ioc, 5, sleepFlag)) < 0) in mpt_handshake_req_reply_wait()
4410 CHIPREG_WRITE32(&ioc->chip->Doorbell, word); in mpt_handshake_req_reply_wait()
4411 if ((t = WaitForDoorbellAck(ioc, 5, sleepFlag)) < 0) in mpt_handshake_req_reply_wait()
4415 …dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Handshake request frame (@%p) header\n", ioc->name, req)); in mpt_handshake_req_reply_wait()
4416 DBG_DUMP_REQUEST_FRAME_HDR(ioc, (u32 *)req); in mpt_handshake_req_reply_wait()
4418 dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "HandShake request post done, WaitCnt=%d%s\n", in mpt_handshake_req_reply_wait()
4419 ioc->name, t, failcnt ? " - MISSING DOORBELL ACK!" : "")); in mpt_handshake_req_reply_wait()
4424 if (!failcnt && (t = WaitForDoorbellReply(ioc, maxwait, sleepFlag)) < 0) in mpt_handshake_req_reply_wait()
4427 dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "HandShake reply count=%d%s\n", in mpt_handshake_req_reply_wait()
4428 ioc->name, t, failcnt ? " - MISSING DOORBELL REPLY!" : "")); in mpt_handshake_req_reply_wait()
4434 u16reply[ii] = ioc->hs_reply[ii]; in mpt_handshake_req_reply_wait()
4456 WaitForDoorbellAck(MPT_ADAPTER *ioc, int howlong, int sleepFlag) in WaitForDoorbellAck() argument
4467 intstat = CHIPREG_READ32(&ioc->chip->IntStatus); in WaitForDoorbellAck()
4475 intstat = CHIPREG_READ32(&ioc->chip->IntStatus); in WaitForDoorbellAck()
4483 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "WaitForDoorbell ACK (count=%d)\n", in WaitForDoorbellAck()
4484 ioc->name, count)); in WaitForDoorbellAck()
4489 ioc->name, count, intstat); in WaitForDoorbellAck()
4506 WaitForDoorbellInt(MPT_ADAPTER *ioc, int howlong, int sleepFlag) in WaitForDoorbellInt() argument
4515 intstat = CHIPREG_READ32(&ioc->chip->IntStatus); in WaitForDoorbellInt()
4523 intstat = CHIPREG_READ32(&ioc->chip->IntStatus); in WaitForDoorbellInt()
4532 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "WaitForDoorbell INT (cnt=%d) howlong=%d\n", in WaitForDoorbellInt()
4533 ioc->name, count, howlong)); in WaitForDoorbellInt()
4538 ioc->name, count, intstat); in WaitForDoorbellInt()
4556 WaitForDoorbellReply(MPT_ADAPTER *ioc, int howlong, int sleepFlag) in WaitForDoorbellReply() argument
4561 u16 *hs_reply = ioc->hs_reply; in WaitForDoorbellReply()
4562 volatile MPIDefaultReply_t *mptReply = (MPIDefaultReply_t *) ioc->hs_reply; in WaitForDoorbellReply()
4571 if ((t = WaitForDoorbellInt(ioc, howlong, sleepFlag)) < 0) { in WaitForDoorbellReply()
4574 hs_reply[u16cnt++] = le16_to_cpu(CHIPREG_READ32(&ioc->chip->Doorbell) & 0x0000FFFF); in WaitForDoorbellReply()
4575 CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); in WaitForDoorbellReply()
4576 if ((t = WaitForDoorbellInt(ioc, 5, sleepFlag)) < 0) in WaitForDoorbellReply()
4579 hs_reply[u16cnt++] = le16_to_cpu(CHIPREG_READ32(&ioc->chip->Doorbell) & 0x0000FFFF); in WaitForDoorbellReply()
4580 CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); in WaitForDoorbellReply()
4584 dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "WaitCnt=%d First handshake reply word=%08x%s\n", in WaitForDoorbellReply()
4585 ioc->name, t, le32_to_cpu(*(u32 *)hs_reply), in WaitForDoorbellReply()
4593 if ((t = WaitForDoorbellInt(ioc, 5, sleepFlag)) < 0) in WaitForDoorbellReply()
4595 hword = le16_to_cpu(CHIPREG_READ32(&ioc->chip->Doorbell) & 0x0000FFFF); in WaitForDoorbellReply()
4597 if (u16cnt < ARRAY_SIZE(ioc->hs_reply)) in WaitForDoorbellReply()
4599 CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); in WaitForDoorbellReply()
4602 if (!failcnt && (t = WaitForDoorbellInt(ioc, 5, sleepFlag)) < 0) in WaitForDoorbellReply()
4604 CHIPREG_WRITE32(&ioc->chip->IntStatus, 0); in WaitForDoorbellReply()
4608 ioc->name); in WaitForDoorbellReply()
4620 dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Got Handshake reply:\n", ioc->name)); in WaitForDoorbellReply()
4621 DBG_DUMP_REPLY_FRAME(ioc, (u32 *)mptReply); in WaitForDoorbellReply()
4623 dhsprintk(ioc, printk(MYIOC_s_DEBUG_FMT "WaitForDoorbell REPLY WaitCnt=%d (sz=%d)\n", in WaitForDoorbellReply()
4624 ioc->name, t, u16cnt/2)); in WaitForDoorbellReply()
4640 GetLanConfigPages(MPT_ADAPTER *ioc) in GetLanConfigPages() argument
4664 if ((rc = mpt_config(ioc, &cfg)) != 0) in GetLanConfigPages()
4669 ppage0_alloc = (LANPage0_t *) pci_alloc_consistent(ioc->pcidev, data_sz, &page0_dma); in GetLanConfigPages()
4676 if ((rc = mpt_config(ioc, &cfg)) == 0) { in GetLanConfigPages()
4679 memcpy(&ioc->lan_cnfg_page0, ppage0_alloc, copy_sz); in GetLanConfigPages()
4683 pci_free_consistent(ioc->pcidev, data_sz, (u8 *) ppage0_alloc, page0_dma); in GetLanConfigPages()
4707 if ((rc = mpt_config(ioc, &cfg)) != 0) in GetLanConfigPages()
4715 ppage1_alloc = (LANPage1_t *) pci_alloc_consistent(ioc->pcidev, data_sz, &page1_dma); in GetLanConfigPages()
4721 if ((rc = mpt_config(ioc, &cfg)) == 0) { in GetLanConfigPages()
4724 memcpy(&ioc->lan_cnfg_page1, ppage1_alloc, copy_sz); in GetLanConfigPages()
4727 pci_free_consistent(ioc->pcidev, data_sz, (u8 *) ppage1_alloc, page1_dma); in GetLanConfigPages()
4756 mptbase_sas_persist_operation(MPT_ADAPTER *ioc, u8 persist_opcode) in mptbase_sas_persist_operation() argument
4780 if ((mf = mpt_get_msg_frame(mpt_base_index, ioc)) == NULL) { in mptbase_sas_persist_operation()
4792 init_timer(&ioc->persist_timer); in mptbase_sas_persist_operation()
4793 ioc->persist_timer.data = (unsigned long) ioc; in mptbase_sas_persist_operation()
4794 ioc->persist_timer.function = mpt_timer_expired; in mptbase_sas_persist_operation()
4795 ioc->persist_timer.expires = jiffies + HZ*10 /* 10 sec */; in mptbase_sas_persist_operation()
4796 ioc->persist_wait_done=0; in mptbase_sas_persist_operation()
4797 add_timer(&ioc->persist_timer); in mptbase_sas_persist_operation()
4798 mpt_put_msg_frame(mpt_base_index, ioc, mf); in mptbase_sas_persist_operation()
4799 wait_event(mpt_waitq, ioc->persist_wait_done); in mptbase_sas_persist_operation()
4802 (SasIoUnitControlReply_t *)ioc->persist_reply_frame; in mptbase_sas_persist_operation()
4818 mptbase_raid_process_event_data(MPT_ADAPTER *ioc, in mptbase_raid_process_event_data() argument
4843 ioc->name, disk, volume); in mptbase_raid_process_event_data()
4846 ioc->name, volume); in mptbase_raid_process_event_data()
4852 ioc->name); in mptbase_raid_process_event_data()
4858 ioc->name); in mptbase_raid_process_event_data()
4863 ioc->name); in mptbase_raid_process_event_data()
4868 ioc->name, in mptbase_raid_process_event_data()
4886 ioc->name, disk); in mptbase_raid_process_event_data()
4891 ioc->name); in mptbase_raid_process_event_data()
4896 ioc->name); in mptbase_raid_process_event_data()
4901 ioc->name); in mptbase_raid_process_event_data()
4906 ioc->name, in mptbase_raid_process_event_data()
4932 ioc->name, disk); in mptbase_raid_process_event_data()
4937 ioc->name, pRaidEventData->ASC, pRaidEventData->ASCQ); in mptbase_raid_process_event_data()
4942 ioc->name, disk); in mptbase_raid_process_event_data()
4959 GetIoUnitPage2(MPT_ADAPTER *ioc) in GetIoUnitPage2() argument
4980 if ((rc = mpt_config(ioc, &cfg)) != 0) in GetIoUnitPage2()
4989 ppage_alloc = (IOUnitPage2_t *) pci_alloc_consistent(ioc->pcidev, data_sz, &page_dma); in GetIoUnitPage2()
4996 if ((rc = mpt_config(ioc, &cfg)) == 0) in GetIoUnitPage2()
4997 ioc->biosVersion = le32_to_cpu(ppage_alloc->BiosVersion); in GetIoUnitPage2()
4999 pci_free_consistent(ioc->pcidev, data_sz, (u8 *) ppage_alloc, page_dma); in GetIoUnitPage2()
5027 mpt_GetScsiPortSettings(MPT_ADAPTER *ioc, int portnum) in mpt_GetScsiPortSettings() argument
5038 if (!ioc->spi_data.nvram) { in mpt_GetScsiPortSettings()
5046 ioc->spi_data.nvram = (int *) mem; in mpt_GetScsiPortSettings()
5048 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "SCSI device NVRAM settings @ %p, sz=%d\n", in mpt_GetScsiPortSettings()
5049 ioc->name, ioc->spi_data.nvram, sz)); in mpt_GetScsiPortSettings()
5055 ioc->spi_data.nvram[ii] = MPT_HOST_NVRAM_INVALID; in mpt_GetScsiPortSettings()
5070 if (mpt_config(ioc, &cfg) != 0) in mpt_GetScsiPortSettings()
5074 pbuf = pci_alloc_consistent(ioc->pcidev, header.PageLength * 4, &buf_dma); in mpt_GetScsiPortSettings()
5078 if (mpt_config(ioc, &cfg) != 0) { in mpt_GetScsiPortSettings()
5079 ioc->spi_data.maxBusWidth = MPT_NARROW; in mpt_GetScsiPortSettings()
5080 ioc->spi_data.maxSyncOffset = 0; in mpt_GetScsiPortSettings()
5081 ioc->spi_data.minSyncFactor = MPT_ASYNC; in mpt_GetScsiPortSettings()
5082 ioc->spi_data.busType = MPT_HOST_BUS_UNKNOWN; in mpt_GetScsiPortSettings()
5084 ddvprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_GetScsiPortSettings()
5086 ioc->name, ioc->spi_data.minSyncFactor)); in mpt_GetScsiPortSettings()
5095 ioc->spi_data.noQas |= MPT_TARGET_NO_NEGO_QAS; in mpt_GetScsiPortSettings()
5096 ddvprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_GetScsiPortSettings()
5098 ioc->name, pPP0->Capabilities)); in mpt_GetScsiPortSettings()
5100 ioc->spi_data.maxBusWidth = pPP0->Capabilities & MPI_SCSIPORTPAGE0_CAP_WIDE ? 1 : 0; in mpt_GetScsiPortSettings()
5103 ioc->spi_data.maxSyncOffset = (u8) (data >> 16); in mpt_GetScsiPortSettings()
5105 ioc->spi_data.minSyncFactor = (u8) (data >> 8); in mpt_GetScsiPortSettings()
5106 ddvprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_GetScsiPortSettings()
5108 ioc->name, ioc->spi_data.minSyncFactor)); in mpt_GetScsiPortSettings()
5110 ioc->spi_data.maxSyncOffset = 0; in mpt_GetScsiPortSettings()
5111 ioc->spi_data.minSyncFactor = MPT_ASYNC; in mpt_GetScsiPortSettings()
5114 ioc->spi_data.busType = pPP0->PhysicalInterface & MPI_SCSIPORTPAGE0_PHY_SIGNAL_TYPE_MASK; in mpt_GetScsiPortSettings()
5118 if ((ioc->spi_data.busType == MPI_SCSIPORTPAGE0_PHY_SIGNAL_HVD) || in mpt_GetScsiPortSettings()
5119 (ioc->spi_data.busType == MPI_SCSIPORTPAGE0_PHY_SIGNAL_SE)) { in mpt_GetScsiPortSettings()
5121 if (ioc->spi_data.minSyncFactor < MPT_ULTRA) { in mpt_GetScsiPortSettings()
5122 ioc->spi_data.minSyncFactor = MPT_ULTRA; in mpt_GetScsiPortSettings()
5123 ddvprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_GetScsiPortSettings()
5125 ioc->name, ioc->spi_data.minSyncFactor)); in mpt_GetScsiPortSettings()
5130 pci_free_consistent(ioc->pcidev, header.PageLength * 4, pbuf, buf_dma); in mpt_GetScsiPortSettings()
5146 if (mpt_config(ioc, &cfg) != 0) in mpt_GetScsiPortSettings()
5152 pbuf = pci_alloc_consistent(ioc->pcidev, header.PageLength * 4, &buf_dma); in mpt_GetScsiPortSettings()
5156 if (mpt_config(ioc, &cfg) != 0) { in mpt_GetScsiPortSettings()
5160 } else if (ioc->pcidev->vendor == PCI_VENDOR_ID_ATTO) { in mpt_GetScsiPortSettings()
5190 ioc->spi_data.nvram[ii] = data; in mpt_GetScsiPortSettings()
5199 ioc->spi_data.bus_reset = in mpt_GetScsiPortSettings()
5208 ioc->spi_data.PortFlags = data; in mpt_GetScsiPortSettings()
5213 ioc->spi_data.nvram[ii] = data; in mpt_GetScsiPortSettings()
5217 pci_free_consistent(ioc->pcidev, header.PageLength * 4, pbuf, buf_dma); in mpt_GetScsiPortSettings()
5239 mpt_readScsiDevicePageHeaders(MPT_ADAPTER *ioc, int portnum) in mpt_readScsiDevicePageHeaders() argument
5256 if (mpt_config(ioc, &cfg) != 0) in mpt_readScsiDevicePageHeaders()
5259 ioc->spi_data.sdp1version = cfg.cfghdr.hdr->PageVersion; in mpt_readScsiDevicePageHeaders()
5260 ioc->spi_data.sdp1length = cfg.cfghdr.hdr->PageLength; in mpt_readScsiDevicePageHeaders()
5266 if (mpt_config(ioc, &cfg) != 0) in mpt_readScsiDevicePageHeaders()
5269 ioc->spi_data.sdp0version = cfg.cfghdr.hdr->PageVersion; in mpt_readScsiDevicePageHeaders()
5270 ioc->spi_data.sdp0length = cfg.cfghdr.hdr->PageLength; in mpt_readScsiDevicePageHeaders()
5272 dcprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Headers: 0: version %d length %d\n", in mpt_readScsiDevicePageHeaders()
5273 ioc->name, ioc->spi_data.sdp0version, ioc->spi_data.sdp0length)); in mpt_readScsiDevicePageHeaders()
5275 dcprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Headers: 1: version %d length %d\n", in mpt_readScsiDevicePageHeaders()
5276 ioc->name, ioc->spi_data.sdp1version, ioc->spi_data.sdp1length)); in mpt_readScsiDevicePageHeaders()
5285 mpt_inactive_raid_list_free(MPT_ADAPTER *ioc) in mpt_inactive_raid_list_free() argument
5289 if (list_empty(&ioc->raid_data.inactive_list)) in mpt_inactive_raid_list_free()
5292 mutex_lock(&ioc->raid_data.inactive_list_mutex); in mpt_inactive_raid_list_free()
5294 &ioc->raid_data.inactive_list, list) { in mpt_inactive_raid_list_free()
5298 mutex_unlock(&ioc->raid_data.inactive_list_mutex); in mpt_inactive_raid_list_free()
5309 mpt_inactive_raid_volumes(MPT_ADAPTER *ioc, u8 channel, u8 id) in mpt_inactive_raid_volumes() argument
5327 if (mpt_config(ioc, &cfg) != 0) in mpt_inactive_raid_volumes()
5333 buffer = pci_alloc_consistent(ioc->pcidev, hdr.PageLength * 4, in mpt_inactive_raid_volumes()
5342 if (mpt_config(ioc, &cfg) != 0) in mpt_inactive_raid_volumes()
5357 mutex_lock(&ioc->raid_data.inactive_list_mutex); in mpt_inactive_raid_volumes()
5359 if(mpt_raid_phys_disk_pg0(ioc, in mpt_inactive_raid_volumes()
5375 &ioc->raid_data.inactive_list); in mpt_inactive_raid_volumes()
5377 mutex_unlock(&ioc->raid_data.inactive_list_mutex); in mpt_inactive_raid_volumes()
5381 pci_free_consistent(ioc->pcidev, hdr.PageLength * 4, buffer, in mpt_inactive_raid_volumes()
5397 mpt_raid_phys_disk_pg0(MPT_ADAPTER *ioc, u8 phys_disk_num, pRaidPhysDiskPage0_t phys_disk) in mpt_raid_phys_disk_pg0() argument
5413 if (mpt_config(ioc, &cfg) != 0) { in mpt_raid_phys_disk_pg0()
5423 buffer = pci_alloc_consistent(ioc->pcidev, hdr.PageLength * 4, in mpt_raid_phys_disk_pg0()
5435 if (mpt_config(ioc, &cfg) != 0) { in mpt_raid_phys_disk_pg0()
5447 pci_free_consistent(ioc->pcidev, hdr.PageLength * 4, buffer, in mpt_raid_phys_disk_pg0()
5463 mpt_findImVolumes(MPT_ADAPTER *ioc) in mpt_findImVolumes() argument
5474 if (!ioc->ir_firmware) in mpt_findImVolumes()
5479 kfree(ioc->raid_data.pIocPg2); in mpt_findImVolumes()
5480 ioc->raid_data.pIocPg2 = NULL; in mpt_findImVolumes()
5481 mpt_inactive_raid_list_free(ioc); in mpt_findImVolumes()
5495 if (mpt_config(ioc, &cfg) != 0) in mpt_findImVolumes()
5502 pIoc2 = pci_alloc_consistent(ioc->pcidev, iocpage2sz, &ioc2_dma); in mpt_findImVolumes()
5508 if (mpt_config(ioc, &cfg) != 0) in mpt_findImVolumes()
5516 ioc->raid_data.pIocPg2 = (IOCPage2_t *) mem; in mpt_findImVolumes()
5518 mpt_read_ioc_pg_3(ioc); in mpt_findImVolumes()
5521 mpt_inactive_raid_volumes(ioc, in mpt_findImVolumes()
5526 pci_free_consistent(ioc->pcidev, iocpage2sz, pIoc2, ioc2_dma); in mpt_findImVolumes()
5532 mpt_read_ioc_pg_3(MPT_ADAPTER *ioc) in mpt_read_ioc_pg_3() argument
5543 kfree(ioc->raid_data.pIocPg3); in mpt_read_ioc_pg_3()
5544 ioc->raid_data.pIocPg3 = NULL; in mpt_read_ioc_pg_3()
5559 if (mpt_config(ioc, &cfg) != 0) in mpt_read_ioc_pg_3()
5568 pIoc3 = pci_alloc_consistent(ioc->pcidev, iocpage3sz, &ioc3_dma); in mpt_read_ioc_pg_3()
5577 if (mpt_config(ioc, &cfg) == 0) { in mpt_read_ioc_pg_3()
5581 ioc->raid_data.pIocPg3 = (IOCPage3_t *) mem; in mpt_read_ioc_pg_3()
5585 pci_free_consistent(ioc->pcidev, iocpage3sz, pIoc3, ioc3_dma); in mpt_read_ioc_pg_3()
5591 mpt_read_ioc_pg_4(MPT_ADAPTER *ioc) in mpt_read_ioc_pg_4() argument
5611 if (mpt_config(ioc, &cfg) != 0) in mpt_read_ioc_pg_4()
5617 if ( (pIoc4 = ioc->spi_data.pIocPg4) == NULL ) { in mpt_read_ioc_pg_4()
5619 pIoc4 = pci_alloc_consistent(ioc->pcidev, iocpage4sz, &ioc4_dma); in mpt_read_ioc_pg_4()
5622 ioc->alloc_total += iocpage4sz; in mpt_read_ioc_pg_4()
5624 ioc4_dma = ioc->spi_data.IocPg4_dma; in mpt_read_ioc_pg_4()
5625 iocpage4sz = ioc->spi_data.IocPg4Sz; in mpt_read_ioc_pg_4()
5632 if (mpt_config(ioc, &cfg) == 0) { in mpt_read_ioc_pg_4()
5633 ioc->spi_data.pIocPg4 = (IOCPage4_t *) pIoc4; in mpt_read_ioc_pg_4()
5634 ioc->spi_data.IocPg4_dma = ioc4_dma; in mpt_read_ioc_pg_4()
5635 ioc->spi_data.IocPg4Sz = iocpage4sz; in mpt_read_ioc_pg_4()
5637 pci_free_consistent(ioc->pcidev, iocpage4sz, pIoc4, ioc4_dma); in mpt_read_ioc_pg_4()
5638 ioc->spi_data.pIocPg4 = NULL; in mpt_read_ioc_pg_4()
5639 ioc->alloc_total -= iocpage4sz; in mpt_read_ioc_pg_4()
5644 mpt_read_ioc_pg_1(MPT_ADAPTER *ioc) in mpt_read_ioc_pg_1() argument
5665 if (mpt_config(ioc, &cfg) != 0) in mpt_read_ioc_pg_1()
5674 pIoc1 = pci_alloc_consistent(ioc->pcidev, iocpage1sz, &ioc1_dma); in mpt_read_ioc_pg_1()
5682 if (mpt_config(ioc, &cfg) == 0) { in mpt_read_ioc_pg_1()
5688 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Coalescing Enabled Timeout = %d\n", in mpt_read_ioc_pg_1()
5689 ioc->name, tmp)); in mpt_read_ioc_pg_1()
5698 if (mpt_config(ioc, &cfg) == 0) { in mpt_read_ioc_pg_1()
5699 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Reset Current Coalescing Timeout to = %d\n", in mpt_read_ioc_pg_1()
5700 ioc->name, MPT_COALESCING_TIMEOUT)); in mpt_read_ioc_pg_1()
5703 if (mpt_config(ioc, &cfg) == 0) { in mpt_read_ioc_pg_1()
5704 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_read_ioc_pg_1()
5706 ioc->name, MPT_COALESCING_TIMEOUT)); in mpt_read_ioc_pg_1()
5708 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_read_ioc_pg_1()
5710 ioc->name)); in mpt_read_ioc_pg_1()
5714 dprintk(ioc, printk(MYIOC_s_WARN_FMT in mpt_read_ioc_pg_1()
5716 ioc->name)); in mpt_read_ioc_pg_1()
5721 dprintk(ioc, printk(MYIOC_s_WARN_FMT "Coalescing Disabled\n", ioc->name)); in mpt_read_ioc_pg_1()
5725 pci_free_consistent(ioc->pcidev, iocpage1sz, pIoc1, ioc1_dma); in mpt_read_ioc_pg_1()
5731 mpt_get_manufacturing_pg_0(MPT_ADAPTER *ioc) in mpt_get_manufacturing_pg_0() argument
5747 if (mpt_config(ioc, &cfg) != 0) in mpt_get_manufacturing_pg_0()
5754 pbuf = pci_alloc_consistent(ioc->pcidev, hdr.PageLength * 4, &buf_dma); in mpt_get_manufacturing_pg_0()
5760 if (mpt_config(ioc, &cfg) != 0) in mpt_get_manufacturing_pg_0()
5763 memcpy(ioc->board_name, pbuf->BoardName, sizeof(ioc->board_name)); in mpt_get_manufacturing_pg_0()
5764 memcpy(ioc->board_assembly, pbuf->BoardAssembly, sizeof(ioc->board_assembly)); in mpt_get_manufacturing_pg_0()
5765 memcpy(ioc->board_tracer, pbuf->BoardTracerNumber, sizeof(ioc->board_tracer)); in mpt_get_manufacturing_pg_0()
5770 pci_free_consistent(ioc->pcidev, hdr.PageLength * 4, pbuf, buf_dma); in mpt_get_manufacturing_pg_0()
5780 SendEventNotification(MPT_ADAPTER *ioc, u8 EvSwitch) in SendEventNotification() argument
5784 evnp = (EventNotification_t *) mpt_get_msg_frame(mpt_base_index, ioc); in SendEventNotification()
5786 devtverboseprintk(ioc, printk(MYIOC_s_WARN_FMT "Unable to allocate event request frame!\n", in SendEventNotification()
5787 ioc->name)); in SendEventNotification()
5792 …devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending EventNotification (%d) request %p\n", ioc… in SendEventNotification()
5799 mpt_put_msg_frame(mpt_base_index, ioc, (MPT_FRAME_HDR *)evnp); in SendEventNotification()
5811 SendEventAck(MPT_ADAPTER *ioc, EventNotificationReply_t *evnp) in SendEventAck() argument
5815 if ((pAck = (EventAck_t *) mpt_get_msg_frame(mpt_base_index, ioc)) == NULL) { in SendEventAck()
5816 dfailprintk(ioc, printk(MYIOC_s_WARN_FMT "%s, no msg frames!!\n", in SendEventAck()
5817 ioc->name,__func__)); in SendEventAck()
5821 devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending EventAck\n", ioc->name)); in SendEventAck()
5831 mpt_put_msg_frame(mpt_base_index, ioc, (MPT_FRAME_HDR *)pAck); in SendEventAck()
5851 mpt_config(MPT_ADAPTER *ioc, CONFIGPARMS *pCfg) in mpt_config() argument
5866 dcprintk(ioc, printk(MYIOC_s_WARN_FMT "Config request not allowed in ISR context!\n", in mpt_config()
5867 ioc->name)); in mpt_config()
5873 if ((mf = mpt_get_msg_frame(mpt_base_index, ioc)) == NULL) { in mpt_config()
5874 dcprintk(ioc, printk(MYIOC_s_WARN_FMT "mpt_config: no msg frames!\n", in mpt_config()
5875 ioc->name)); in mpt_config()
5919 dcprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending Config request type %d, page %d and action %d\n", in mpt_config()
5920 ioc->name, pReq->ExtPageType, pReq->Header.PageNumber, pReq->Action)); in mpt_config()
5925 dcprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Sending Config request type %d, page %d and action %d\n", in mpt_config()
5926 ioc->name, pReq->Header.PageType, pReq->Header.PageNumber, pReq->Action)); in mpt_config()
5933 *((void **) (((u8 *) mf) + (ioc->req_sz - sizeof(void *)))) = (void *) pCfg; in mpt_config()
5938 pCfg->timer.data = (unsigned long) ioc; in mpt_config()
5949 spin_lock_irqsave(&ioc->FreeQlock, flags); in mpt_config()
5950 list_add_tail(&pCfg->linkage, &ioc->configQ); in mpt_config()
5951 spin_unlock_irqrestore(&ioc->FreeQlock, flags); in mpt_config()
5954 mpt_put_msg_frame(mpt_base_index, ioc, mf); in mpt_config()
5973 MPT_ADAPTER *ioc = (MPT_ADAPTER *) data; in mpt_timer_expired() local
5975 dcprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mpt_timer_expired! \n", ioc->name)); in mpt_timer_expired()
5978 if (mpt_HardResetHandler(ioc, NO_SLEEP) < 0) in mpt_timer_expired()
5979 printk(MYIOC_s_WARN_FMT "Firmware Reload FAILED!\n", ioc->name); in mpt_timer_expired()
5985 dcprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mpt_timer_expired complete!\n", ioc->name)); in mpt_timer_expired()
5999 mpt_ioc_reset(MPT_ADAPTER *ioc, int reset_phase) in mpt_ioc_reset() argument
6004 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mpt_ioc_reset()
6006 ioc->name, reset_phase==MPT_IOC_SETUP_RESET ? "setup" : ( in mpt_ioc_reset()
6016 spin_lock_irqsave(&ioc->FreeQlock, flags); in mpt_ioc_reset()
6017 list_for_each_entry(pCfg, &ioc->configQ, linkage) in mpt_ioc_reset()
6019 spin_unlock_irqrestore(&ioc->FreeQlock, flags); in mpt_ioc_reset()
6027 spin_lock_irqsave(&ioc->FreeQlock, flags); in mpt_ioc_reset()
6028 list_for_each_entry_safe(pCfg, pNext, &ioc->configQ, linkage) { in mpt_ioc_reset()
6035 spin_unlock_irqrestore(&ioc->FreeQlock, flags); in mpt_ioc_reset()
6103 MPT_ADAPTER *ioc; in procmpt_summary_read() local
6110 ioc = data; in procmpt_summary_read()
6111 mpt_print_ioc_summary(ioc, out, &more, 0, 1); in procmpt_summary_read()
6115 list_for_each_entry(ioc, &ioc_list, list) { in procmpt_summary_read()
6118 mpt_print_ioc_summary(ioc, out, &more, 0, 1); in procmpt_summary_read()
6202 MPT_ADAPTER *ioc = data; in procmpt_iocinfo_read() local
6208 mpt_get_fw_exp_ver(expVer, ioc); in procmpt_iocinfo_read()
6210 len = sprintf(buf, "%s:", ioc->name); in procmpt_iocinfo_read()
6211 if (ioc->facts.Flags & MPI_IOCFACTS_FLAGS_FW_DOWNLOAD_BOOT) in procmpt_iocinfo_read()
6217 ioc->facts.ProductID, in procmpt_iocinfo_read()
6218 ioc->prod_name); in procmpt_iocinfo_read()
6219 len += sprintf(buf+len, " FWVersion = 0x%08x%s", ioc->facts.FWVersion.Word, expVer); in procmpt_iocinfo_read()
6220 if (ioc->facts.FWImageSize) in procmpt_iocinfo_read()
6221 len += sprintf(buf+len, " (fw_size=%d)", ioc->facts.FWImageSize); in procmpt_iocinfo_read()
6222 len += sprintf(buf+len, "\n MsgVersion = 0x%04x\n", ioc->facts.MsgVersion); in procmpt_iocinfo_read()
6223 len += sprintf(buf+len, " FirstWhoInit = 0x%02x\n", ioc->FirstWhoInit); in procmpt_iocinfo_read()
6224 len += sprintf(buf+len, " EventState = 0x%02x\n", ioc->facts.EventState); in procmpt_iocinfo_read()
6227 ioc->facts.CurrentHostMfaHighAddr); in procmpt_iocinfo_read()
6229 ioc->facts.CurrentSenseBufferHighAddr); in procmpt_iocinfo_read()
6231 len += sprintf(buf+len, " MaxChainDepth = 0x%02x frames\n", ioc->facts.MaxChainDepth); in procmpt_iocinfo_read()
6232 len += sprintf(buf+len, " MinBlockSize = 0x%02x bytes\n", 4*ioc->facts.BlockSize); in procmpt_iocinfo_read()
6235 (void *)ioc->req_frames, (void *)(ulong)ioc->req_frames_dma); in procmpt_iocinfo_read()
6239 sz = (ioc->req_sz * ioc->req_depth) + 128; in procmpt_iocinfo_read()
6242 ioc->req_sz, ioc->req_depth, ioc->req_sz*ioc->req_depth, sz); in procmpt_iocinfo_read()
6244 4*ioc->facts.RequestFrameSize, in procmpt_iocinfo_read()
6245 ioc->facts.GlobalCredits); in procmpt_iocinfo_read()
6248 (void *)ioc->alloc, (void *)(ulong)ioc->alloc_dma); in procmpt_iocinfo_read()
6249 sz = (ioc->reply_sz * ioc->reply_depth) + 128; in procmpt_iocinfo_read()
6251 ioc->reply_sz, ioc->reply_depth, ioc->reply_sz*ioc->reply_depth, sz); in procmpt_iocinfo_read()
6253 ioc->facts.CurReplyFrameSize, in procmpt_iocinfo_read()
6254 ioc->facts.ReplyQueueDepth); in procmpt_iocinfo_read()
6257 (ioc->facts.MaxDevices==0) ? 255 : ioc->facts.MaxDevices); in procmpt_iocinfo_read()
6258 len += sprintf(buf+len, " MaxBuses = %d\n", ioc->facts.MaxBuses); in procmpt_iocinfo_read()
6261 for (p=0; p < ioc->facts.NumberOfPorts; p++) { in procmpt_iocinfo_read()
6264 ioc->facts.NumberOfPorts); in procmpt_iocinfo_read()
6265 if (ioc->bus_type == FC) { in procmpt_iocinfo_read()
6266 if (ioc->pfacts[p].ProtocolFlags & MPI_PORTFACTS_PROTOCOL_LAN) { in procmpt_iocinfo_read()
6267 u8 *a = (u8*)&ioc->lan_cnfg_page1.HardwareAddressLow; in procmpt_iocinfo_read()
6272 ioc->fc_port_page0[p].WWNN.High, in procmpt_iocinfo_read()
6273 ioc->fc_port_page0[p].WWNN.Low, in procmpt_iocinfo_read()
6274 ioc->fc_port_page0[p].WWPN.High, in procmpt_iocinfo_read()
6275 ioc->fc_port_page0[p].WWPN.Low); in procmpt_iocinfo_read()
6286 mpt_get_fw_exp_ver(char *buf, MPT_ADAPTER *ioc) in mpt_get_fw_exp_ver() argument
6289 if ((ioc->facts.FWVersion.Word >> 24) == 0x0E) { in mpt_get_fw_exp_ver()
6291 (ioc->facts.FWVersion.Word >> 16) & 0x00FF, /* Month */ in mpt_get_fw_exp_ver()
6292 (ioc->facts.FWVersion.Word >> 8) & 0x1F); /* Day */ in mpt_get_fw_exp_ver()
6295 if ((ioc->facts.FWVersion.Word >> 8) & 0x80) in mpt_get_fw_exp_ver()
6313 mpt_print_ioc_summary(MPT_ADAPTER *ioc, char *buffer, int *size, int len, int showlan) in mpt_print_ioc_summary() argument
6318 mpt_get_fw_exp_ver(expVer, ioc); in mpt_print_ioc_summary()
6324 ioc->name, in mpt_print_ioc_summary()
6325 ioc->prod_name, in mpt_print_ioc_summary()
6327 ioc->facts.FWVersion.Word, in mpt_print_ioc_summary()
6329 ioc->facts.NumberOfPorts, in mpt_print_ioc_summary()
6330 ioc->req_depth); in mpt_print_ioc_summary()
6332 if (showlan && (ioc->pfacts[0].ProtocolFlags & MPI_PORTFACTS_PROTOCOL_LAN)) { in mpt_print_ioc_summary()
6333 u8 *a = (u8*)&ioc->lan_cnfg_page1.HardwareAddressLow; in mpt_print_ioc_summary()
6338 y += sprintf(buffer+len+y, ", IRQ=%d", ioc->pci_irq); in mpt_print_ioc_summary()
6340 if (!ioc->active) in mpt_print_ioc_summary()
6356 mpt_halt_firmware(MPT_ADAPTER *ioc) in mpt_halt_firmware() argument
6360 ioc_raw_state = mpt_GetIocState(ioc, 0); in mpt_halt_firmware()
6364 ioc->name, ioc_raw_state & MPI_DOORBELL_DATA_MASK); in mpt_halt_firmware()
6365 panic("%s: IOC Fault (%04xh)!!!\n", ioc->name, in mpt_halt_firmware()
6368 CHIPREG_WRITE32(&ioc->chip->Doorbell, 0xC0FFEE00); in mpt_halt_firmware()
6370 ioc->name); in mpt_halt_firmware()
6397 mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag) in mpt_HardResetHandler() argument
6402 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "HardResetHandler Entered!\n", ioc->name)); in mpt_HardResetHandler()
6404 printk(MYIOC_s_INFO_FMT "HardResetHandler Entered!\n", ioc->name); in mpt_HardResetHandler()
6405 printk("MF count 0x%x !\n", ioc->mfcnt); in mpt_HardResetHandler()
6408 mpt_halt_firmware(ioc); in mpt_HardResetHandler()
6413 spin_lock_irqsave(&ioc->diagLock, flags); in mpt_HardResetHandler()
6414 if ((ioc->diagPending) || (ioc->alt_ioc && ioc->alt_ioc->diagPending)){ in mpt_HardResetHandler()
6415 spin_unlock_irqrestore(&ioc->diagLock, flags); in mpt_HardResetHandler()
6418 ioc->diagPending = 1; in mpt_HardResetHandler()
6420 spin_unlock_irqrestore(&ioc->diagLock, flags); in mpt_HardResetHandler()
6436 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Calling IOC reset_setup handler #%d\n", in mpt_HardResetHandler()
6437 ioc->name, cb_idx)); in mpt_HardResetHandler()
6438 r += mpt_signal_reset(cb_idx, ioc, MPT_IOC_SETUP_RESET); in mpt_HardResetHandler()
6439 if (ioc->alt_ioc) { in mpt_HardResetHandler()
6440 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Calling alt-%s setup reset handler #%d\n", in mpt_HardResetHandler()
6441 ioc->name, ioc->alt_ioc->name, cb_idx)); in mpt_HardResetHandler()
6442 r += mpt_signal_reset(cb_idx, ioc->alt_ioc, MPT_IOC_SETUP_RESET); in mpt_HardResetHandler()
6448 if ((rc = mpt_do_ioc_recovery(ioc, MPT_HOSTEVENT_IOC_RECOVER, sleepFlag)) != 0) { in mpt_HardResetHandler()
6449 printk(MYIOC_s_WARN_FMT "Cannot recover rc = %d!\n", ioc->name, rc); in mpt_HardResetHandler()
6451 ioc->reload_fw = 0; in mpt_HardResetHandler()
6452 if (ioc->alt_ioc) in mpt_HardResetHandler()
6453 ioc->alt_ioc->reload_fw = 0; in mpt_HardResetHandler()
6455 spin_lock_irqsave(&ioc->diagLock, flags); in mpt_HardResetHandler()
6456 ioc->diagPending = 0; in mpt_HardResetHandler()
6457 if (ioc->alt_ioc) in mpt_HardResetHandler()
6458 ioc->alt_ioc->diagPending = 0; in mpt_HardResetHandler()
6459 spin_unlock_irqrestore(&ioc->diagLock, flags); in mpt_HardResetHandler()
6461 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "HardResetHandler rc = %d!\n", ioc->name, rc)); in mpt_HardResetHandler()
6840 ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *pEventReply, int *evHandlers) in ProcessEventNotification() argument
6863 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "MPT event:(%02Xh) : %s\n", in ProcessEventNotification()
6864 ioc->name, in ProcessEventNotification()
6869 devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT in ProcessEventNotification()
6870 ": Event data:\n", ioc->name)); in ProcessEventNotification()
6872 devtverboseprintk(ioc, printk(" %08x", in ProcessEventNotification()
6874 devtverboseprintk(ioc, printk("\n")); in ProcessEventNotification()
6888 if (ioc->facts.Function) { in ProcessEventNotification()
6889 ioc->facts.EventState = evState; in ProcessEventNotification()
6894 mptbase_raid_process_event_data(ioc, in ProcessEventNotification()
6905 if (ioc->events && (ioc->eventTypes & ( 1 << event))) { in ProcessEventNotification()
6908 idx = ioc->eventContext % MPTCTL_EVENT_LOG_SIZE; in ProcessEventNotification()
6910 ioc->events[idx].event = event; in ProcessEventNotification()
6911 ioc->events[idx].eventContext = ioc->eventContext; in ProcessEventNotification()
6915 ioc->events[idx].data[ii] = le32_to_cpu(pEventReply->Data[ii]); in ProcessEventNotification()
6917 ioc->events[idx].data[ii] = 0; in ProcessEventNotification()
6920 ioc->eventContext++; in ProcessEventNotification()
6929 devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Routing Event to event handler #%d\n", in ProcessEventNotification()
6930 ioc->name, cb_idx)); in ProcessEventNotification()
6931 r += (*(MptEvHandlers[cb_idx]))(ioc, pEventReply); in ProcessEventNotification()
6941 devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT in ProcessEventNotification()
6942 "EventAck required\n",ioc->name)); in ProcessEventNotification()
6943 if ((ii = SendEventAck(ioc, pEventReply)) != 0) { in ProcessEventNotification()
6944 devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT "SendEventAck returned %d\n", in ProcessEventNotification()
6945 ioc->name, ii)); in ProcessEventNotification()
6962 mpt_fc_log_info(MPT_ADAPTER *ioc, u32 log_info) in mpt_fc_log_info() argument
6994 ioc->name, log_info, desc, (log_info & 0xFFFFFF)); in mpt_fc_log_info()
7006 mpt_spi_log_info(MPT_ADAPTER *ioc, u32 log_info) in mpt_spi_log_info() argument
7014 if (ioc->reload_fw == 0) in mpt_spi_log_info()
7015 ioc->reload_fw++; in mpt_spi_log_info()
7064 printk(MYIOC_s_INFO_FMT "LogInfo(0x%08x): F/W: %s\n", ioc->name, log_info, desc); in mpt_spi_log_info()
7219 mpt_sas_log_info(MPT_ADAPTER *ioc, u32 log_info) in mpt_sas_log_info() argument
7274 ioc->name, log_info, originator_desc, code_desc, in mpt_sas_log_info()
7280 ioc->name, log_info, originator_desc, code_desc, in mpt_sas_log_info()
7286 ioc->name, log_info, originator_desc, in mpt_sas_log_info()
7300 mpt_iocstatus_info_config(MPT_ADAPTER *ioc, u32 ioc_status, MPT_FRAME_HDR *mf) in mpt_iocstatus_info_config() argument
7365 dreplyprintk(ioc, printk(MYIOC_s_DEBUG_FMT "IOCStatus(0x%04X): %s: %s\n", in mpt_iocstatus_info_config()
7366 ioc->name, ioc_status, desc, extend_desc)); in mpt_iocstatus_info_config()
7378 mpt_iocstatus_info(MPT_ADAPTER *ioc, u32 ioc_status, MPT_FRAME_HDR *mf) in mpt_iocstatus_info() argument
7431 mpt_iocstatus_info_config(ioc, status, mf); in mpt_iocstatus_info()
7592 dreplyprintk(ioc, printk(MYIOC_s_DEBUG_FMT "IOCStatus(0x%04X): %s\n", in mpt_iocstatus_info()
7593 ioc->name, status, desc)); in mpt_iocstatus_info()