Lines Matching refs:ioc
127 static int mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen);
129 struct buflist **blp, dma_addr_t *sglbuf_dma, MPT_ADAPTER *ioc);
131 struct buflist *buflist, MPT_ADAPTER *ioc);
136 static int mptctl_ioc_reset(MPT_ADAPTER *ioc, int reset_phase);
141 static int mptctl_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply);
179 mptctl_syscall_down(MPT_ADAPTER *ioc, int nonblock) in mptctl_syscall_down() argument
184 if (!mutex_trylock(&ioc->ioctl_cmds.mutex)) in mptctl_syscall_down()
187 if (mutex_lock_interruptible(&ioc->ioctl_cmds.mutex)) in mptctl_syscall_down()
201 mptctl_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply) in mptctl_reply() argument
210 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "completing mpi function " in mptctl_reply()
211 "(0x%02X), req=%p, reply=%p\n", ioc->name, req->u.hdr.Function, in mptctl_reply()
218 if (ioc->ioctl_cmds.msg_context != req->u.hdr.MsgContext) in mptctl_reply()
221 ioc->ioctl_cmds.status |= MPT_MGMT_STATUS_COMMAND_GOOD; in mptctl_reply()
226 ioc->ioctl_cmds.status |= MPT_MGMT_STATUS_RF_VALID; in mptctl_reply()
227 sz = min(ioc->reply_sz, 4*reply->u.reply.MsgLength); in mptctl_reply()
228 memcpy(ioc->ioctl_cmds.reply, reply, sz); in mptctl_reply()
231 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptctl_reply()
232 "iocstatus (0x%04X), loginfo (0x%08X)\n", ioc->name, in mptctl_reply()
241 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptctl_reply()
243 "tag = (0x%04x), transfer_count (0x%08x)\n", ioc->name, in mptctl_reply()
254 sense_data = ((u8 *)ioc->sense_buf_pool + in mptctl_reply()
256 memcpy(ioc->ioctl_cmds.sense, sense_data, sz); in mptctl_reply()
257 ioc->ioctl_cmds.status |= MPT_MGMT_STATUS_SENSE_VALID; in mptctl_reply()
264 if (ioc->ioctl_cmds.status & MPT_MGMT_STATUS_PENDING) { in mptctl_reply()
266 mpt_clear_taskmgmt_in_progress_flag(ioc); in mptctl_reply()
267 ioc->ioctl_cmds.status &= ~MPT_MGMT_STATUS_PENDING; in mptctl_reply()
268 complete(&ioc->ioctl_cmds.done); in mptctl_reply()
269 if (ioc->bus_type == SAS) in mptctl_reply()
270 ioc->schedule_target_reset(ioc); in mptctl_reply()
272 ioc->ioctl_cmds.status &= ~MPT_MGMT_STATUS_PENDING; in mptctl_reply()
273 complete(&ioc->ioctl_cmds.done); in mptctl_reply()
286 mptctl_taskmgmt_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr) in mptctl_taskmgmt_reply() argument
291 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptctl_taskmgmt_reply()
293 ioc->name, mf, mr)); in mptctl_taskmgmt_reply()
295 ioc->taskmgmt_cmds.status |= MPT_MGMT_STATUS_COMMAND_GOOD; in mptctl_taskmgmt_reply()
300 ioc->taskmgmt_cmds.status |= MPT_MGMT_STATUS_RF_VALID; in mptctl_taskmgmt_reply()
301 memcpy(ioc->taskmgmt_cmds.reply, mr, in mptctl_taskmgmt_reply()
304 if (ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_PENDING) { in mptctl_taskmgmt_reply()
305 mpt_clear_taskmgmt_in_progress_flag(ioc); in mptctl_taskmgmt_reply()
306 ioc->taskmgmt_cmds.status &= ~MPT_MGMT_STATUS_PENDING; in mptctl_taskmgmt_reply()
307 complete(&ioc->taskmgmt_cmds.done); in mptctl_taskmgmt_reply()
308 if (ioc->bus_type == SAS) in mptctl_taskmgmt_reply()
309 ioc->schedule_target_reset(ioc); in mptctl_taskmgmt_reply()
316 mptctl_do_taskmgmt(MPT_ADAPTER *ioc, u8 tm_type, u8 bus_id, u8 target_id) in mptctl_do_taskmgmt() argument
328 mutex_lock(&ioc->taskmgmt_cmds.mutex); in mptctl_do_taskmgmt()
329 if (mpt_set_taskmgmt_in_progress_flag(ioc) != 0) { in mptctl_do_taskmgmt()
330 mutex_unlock(&ioc->taskmgmt_cmds.mutex); in mptctl_do_taskmgmt()
336 mf = mpt_get_msg_frame(mptctl_taskmgmt_id, ioc); in mptctl_do_taskmgmt()
338 dtmprintk(ioc, in mptctl_do_taskmgmt()
340 ioc->name)); in mptctl_do_taskmgmt()
341 mpt_clear_taskmgmt_in_progress_flag(ioc); in mptctl_do_taskmgmt()
346 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "TaskMgmt request (mf=%p)\n", in mptctl_do_taskmgmt()
347 ioc->name, mf)); in mptctl_do_taskmgmt()
354 (ioc->bus_type == FC)) in mptctl_do_taskmgmt()
368 switch (ioc->bus_type) { in mptctl_do_taskmgmt()
381 dtmprintk(ioc, in mptctl_do_taskmgmt()
383 ioc->name, tm_type, timeout)); in mptctl_do_taskmgmt()
385 INITIALIZE_MGMT_STATUS(ioc->taskmgmt_cmds.status) in mptctl_do_taskmgmt()
387 if ((ioc->facts.IOCCapabilities & MPI_IOCFACTS_CAPABILITY_HIGH_PRI_Q) && in mptctl_do_taskmgmt()
388 (ioc->facts.MsgVersion >= MPI_VERSION_01_05)) in mptctl_do_taskmgmt()
389 mpt_put_msg_frame_hi_pri(mptctl_taskmgmt_id, ioc, mf); in mptctl_do_taskmgmt()
391 retval = mpt_send_handshake_request(mptctl_taskmgmt_id, ioc, in mptctl_do_taskmgmt()
394 dfailprintk(ioc, in mptctl_do_taskmgmt()
397 " (ioc %p, mf %p, rc=%d) \n", ioc->name, in mptctl_do_taskmgmt()
398 ioc, mf, retval)); in mptctl_do_taskmgmt()
399 mpt_free_msg_frame(ioc, mf); in mptctl_do_taskmgmt()
400 mpt_clear_taskmgmt_in_progress_flag(ioc); in mptctl_do_taskmgmt()
406 ii = wait_for_completion_timeout(&ioc->taskmgmt_cmds.done, timeout*HZ); in mptctl_do_taskmgmt()
408 if (!(ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_COMMAND_GOOD)) { in mptctl_do_taskmgmt()
409 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptctl_do_taskmgmt()
410 "TaskMgmt failed\n", ioc->name)); in mptctl_do_taskmgmt()
411 mpt_free_msg_frame(ioc, mf); in mptctl_do_taskmgmt()
412 mpt_clear_taskmgmt_in_progress_flag(ioc); in mptctl_do_taskmgmt()
413 if (ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_DID_IOCRESET) in mptctl_do_taskmgmt()
420 if (!(ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_RF_VALID)) { in mptctl_do_taskmgmt()
421 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptctl_do_taskmgmt()
422 "TaskMgmt failed\n", ioc->name)); in mptctl_do_taskmgmt()
427 pScsiTmReply = (SCSITaskMgmtReply_t *) ioc->taskmgmt_cmds.reply; in mptctl_do_taskmgmt()
428 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptctl_do_taskmgmt()
431 "term_cmnds=%d\n", ioc->name, pScsiTmReply->Bus, in mptctl_do_taskmgmt()
445 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptctl_do_taskmgmt()
446 "TaskMgmt failed\n", ioc->name)); in mptctl_do_taskmgmt()
451 mutex_unlock(&ioc->taskmgmt_cmds.mutex); in mptctl_do_taskmgmt()
452 CLEAR_MGMT_STATUS(ioc->taskmgmt_cmds.status) in mptctl_do_taskmgmt()
463 mptctl_timeout_expired(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf) in mptctl_timeout_expired() argument
470 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT ": %s\n", in mptctl_timeout_expired()
471 ioc->name, __func__)); in mptctl_timeout_expired()
474 mpt_halt_firmware(ioc); in mptctl_timeout_expired()
476 spin_lock_irqsave(&ioc->taskmgmt_lock, flags); in mptctl_timeout_expired()
477 if (ioc->ioc_reset_in_progress) { in mptctl_timeout_expired()
478 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptctl_timeout_expired()
479 CLEAR_MGMT_PENDING_STATUS(ioc->ioctl_cmds.status) in mptctl_timeout_expired()
480 mpt_free_msg_frame(ioc, mf); in mptctl_timeout_expired()
483 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptctl_timeout_expired()
486 CLEAR_MGMT_PENDING_STATUS(ioc->ioctl_cmds.status) in mptctl_timeout_expired()
488 if (ioc->bus_type == SAS) { in mptctl_timeout_expired()
490 ret_val = mptctl_do_taskmgmt(ioc, in mptctl_timeout_expired()
494 ret_val = mptctl_do_taskmgmt(ioc, in mptctl_timeout_expired()
502 ret_val = mptctl_do_taskmgmt(ioc, in mptctl_timeout_expired()
509 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Calling Reset! \n", in mptctl_timeout_expired()
510 ioc->name)); in mptctl_timeout_expired()
511 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP); in mptctl_timeout_expired()
512 mpt_free_msg_frame(ioc, mf); in mptctl_timeout_expired()
524 mptctl_ioc_reset(MPT_ADAPTER *ioc, int reset_phase) in mptctl_ioc_reset() argument
528 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptctl_ioc_reset()
529 "%s: MPT_IOC_SETUP_RESET\n", ioc->name, __func__)); in mptctl_ioc_reset()
532 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptctl_ioc_reset()
533 "%s: MPT_IOC_PRE_RESET\n", ioc->name, __func__)); in mptctl_ioc_reset()
536 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptctl_ioc_reset()
537 "%s: MPT_IOC_POST_RESET\n", ioc->name, __func__)); in mptctl_ioc_reset()
538 if (ioc->ioctl_cmds.status & MPT_MGMT_STATUS_PENDING) { in mptctl_ioc_reset()
539 ioc->ioctl_cmds.status |= MPT_MGMT_STATUS_DID_IOCRESET; in mptctl_ioc_reset()
540 complete(&ioc->ioctl_cmds.done); in mptctl_ioc_reset()
553 mptctl_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply) in mptctl_event_process() argument
559 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s() called\n", in mptctl_event_process()
560 ioc->name, __func__)); in mptctl_event_process()
569 ioc->aen_event_read_flag=1; in mptctl_event_process()
570 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Raised SIGIO to application\n", in mptctl_event_process()
571 ioc->name)); in mptctl_event_process()
572 devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptctl_event_process()
573 "Raised SIGIO to application\n", ioc->name)); in mptctl_event_process()
582 if(ioc->aen_event_read_flag) in mptctl_event_process()
588 if (ioc->events && (ioc->eventTypes & ( 1 << event))) { in mptctl_event_process()
589 ioc->aen_event_read_flag=1; in mptctl_event_process()
590 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptctl_event_process()
591 "Raised SIGIO to application\n", ioc->name)); in mptctl_event_process()
592 devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptctl_event_process()
593 "Raised SIGIO to application\n", ioc->name)); in mptctl_event_process()
602 MPT_ADAPTER *ioc; in mptctl_fasync() local
606 list_for_each_entry(ioc, &ioc_list, list) in mptctl_fasync()
607 ioc->aen_event_read_flag=0; in mptctl_fasync()
787 mptctl_do_fw_download(int ioc, char __user *ufwbuf, size_t fwlen) in mptctl_do_fw_download() argument
811 if (mpt_verify_adapter(ioc, &iocp) < 0) { in mptctl_do_fw_download()
813 ioc); in mptctl_do_fw_download()
830 iocp->name, ioc)); in mptctl_do_fw_download()
1026 struct buflist **blp, dma_addr_t *sglbuf_dma, MPT_ADAPTER *ioc) in kbuf_alloc_2_sgl() argument
1063 sglbuf = pci_alloc_consistent(ioc->pcidev, MAX_SGL_BYTES, sglbuf_dma); in kbuf_alloc_2_sgl()
1080 sg_spill = ((ioc->req_sz - sge_offset)/ioc->SGE_size) - 1; in kbuf_alloc_2_sgl()
1084 buflist[buflist_ent].kptr = pci_alloc_consistent(ioc->pcidev, in kbuf_alloc_2_sgl()
1091 "not enough memory! :-(\n", ioc->name); in kbuf_alloc_2_sgl()
1093 ioc->name, numfrags); in kbuf_alloc_2_sgl()
1102 dma_addr = pci_map_single(ioc->pcidev, in kbuf_alloc_2_sgl()
1118 "-SG: No can do - " "Chain required! :-(\n", ioc->name); in kbuf_alloc_2_sgl()
1119 printk(MYIOC_s_WARN_FMT "(freeing %d frags)\n", ioc->name, numfrags); in kbuf_alloc_2_sgl()
1127 "too many SG frags! :-(\n", ioc->name); in kbuf_alloc_2_sgl()
1129 ioc->name, numfrags); in kbuf_alloc_2_sgl()
1140 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "-SG: kbuf_alloc_2_sgl() - " in kbuf_alloc_2_sgl()
1141 "%d SG frags generated!\n", ioc->name, numfrags)); in kbuf_alloc_2_sgl()
1143 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "-SG: kbuf_alloc_2_sgl() - " in kbuf_alloc_2_sgl()
1144 "last (big) alloc_sz=%d\n", ioc->name, alloc_sz)); in kbuf_alloc_2_sgl()
1162 pci_free_consistent(ioc->pcidev, len, kptr, dma_addr); in kbuf_alloc_2_sgl()
1164 pci_free_consistent(ioc->pcidev, MAX_SGL_BYTES, sglbuf, *sglbuf_dma); in kbuf_alloc_2_sgl()
1175 kfree_sgl(MptSge_t *sgl, dma_addr_t sgl_dma, struct buflist *buflist, MPT_ADAPTER *ioc) in kfree_sgl() argument
1201 pci_unmap_single(ioc->pcidev, dma_addr, len, dir); in kfree_sgl()
1202 pci_free_consistent(ioc->pcidev, len, kptr, dma_addr); in kfree_sgl()
1219 pci_unmap_single(ioc->pcidev, dma_addr, len, dir); in kfree_sgl()
1220 pci_free_consistent(ioc->pcidev, len, kptr, dma_addr); in kfree_sgl()
1224 pci_free_consistent(ioc->pcidev, MAX_SGL_BYTES, sgl, sgl_dma); in kfree_sgl()
1226 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "-SG: Free'd 1 SGL buf + %d kbufs!\n", in kfree_sgl()
1227 ioc->name, n)); in kfree_sgl()
1245 MPT_ADAPTER *ioc; in mptctl_getiocinfo() local
1275 if (((iocnum = mpt_verify_adapter(karg->hdr.iocnum, &ioc)) < 0) || in mptctl_getiocinfo()
1276 (ioc == NULL)) { in mptctl_getiocinfo()
1287 ioc->name, __FILE__, __LINE__); in mptctl_getiocinfo()
1292 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_getiocinfo called.\n", in mptctl_getiocinfo()
1293 ioc->name)); in mptctl_getiocinfo()
1298 if (ioc->bus_type == SAS) in mptctl_getiocinfo()
1300 else if (ioc->bus_type == FC) in mptctl_getiocinfo()
1312 pdev = (struct pci_dev *) ioc->pcidev; in mptctl_getiocinfo()
1337 if (ioc->sh) { in mptctl_getiocinfo()
1338 shost_for_each_device(sdev, ioc->sh) { in mptctl_getiocinfo()
1351 karg->FWVersion = ioc->facts.FWVersion.Word; in mptctl_getiocinfo()
1352 karg->BIOSVersion = ioc->biosVersion; in mptctl_getiocinfo()
1360 karg->hostId = ioc->pfacts[port].PortSCSIID; in mptctl_getiocinfo()
1368 ioc->name, __FILE__, __LINE__, uarg); in mptctl_getiocinfo()
1392 MPT_ADAPTER *ioc; in mptctl_gettargetinfo() local
1411 if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || in mptctl_gettargetinfo()
1412 (ioc == NULL)) { in mptctl_gettargetinfo()
1418 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_gettargetinfo called.\n", in mptctl_gettargetinfo()
1419 ioc->name)); in mptctl_gettargetinfo()
1430 ioc->name, __FILE__, __LINE__); in mptctl_gettargetinfo()
1451 ioc->name, __FILE__, __LINE__); in mptctl_gettargetinfo()
1458 if (ioc->sh){ in mptctl_gettargetinfo()
1459 shost_for_each_device(sdev, ioc->sh) { in mptctl_gettargetinfo()
1484 ioc->name, __FILE__, __LINE__, uarg); in mptctl_gettargetinfo()
1494 ioc->name, __FILE__, __LINE__, pdata); in mptctl_gettargetinfo()
1517 MPT_ADAPTER *ioc; in mptctl_readtest() local
1527 if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || in mptctl_readtest()
1528 (ioc == NULL)) { in mptctl_readtest()
1534 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_readtest called.\n", in mptctl_readtest()
1535 ioc->name)); in mptctl_readtest()
1541 karg.chip_type = ioc->mfcnt; in mptctl_readtest()
1543 karg.chip_type = ioc->pcidev->device; in mptctl_readtest()
1545 strncpy (karg.name, ioc->name, MPT_MAX_NAME); in mptctl_readtest()
1547 strncpy (karg.product, ioc->prod_name, MPT_PRODUCT_LENGTH); in mptctl_readtest()
1555 ioc->name, __FILE__, __LINE__, uarg); in mptctl_readtest()
1578 MPT_ADAPTER *ioc; in mptctl_eventquery() local
1588 if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || in mptctl_eventquery()
1589 (ioc == NULL)) { in mptctl_eventquery()
1595 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_eventquery called.\n", in mptctl_eventquery()
1596 ioc->name)); in mptctl_eventquery()
1598 karg.eventTypes = ioc->eventTypes; in mptctl_eventquery()
1605 ioc->name, __FILE__, __LINE__, uarg); in mptctl_eventquery()
1617 MPT_ADAPTER *ioc; in mptctl_eventenable() local
1627 if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || in mptctl_eventenable()
1628 (ioc == NULL)) { in mptctl_eventenable()
1634 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_eventenable called.\n", in mptctl_eventenable()
1635 ioc->name)); in mptctl_eventenable()
1636 if (ioc->events == NULL) { in mptctl_eventenable()
1640 ioc->events = kzalloc(sz, GFP_KERNEL); in mptctl_eventenable()
1641 if (!ioc->events) { in mptctl_eventenable()
1644 ioc->name); in mptctl_eventenable()
1647 ioc->alloc_total += sz; in mptctl_eventenable()
1649 ioc->eventContext = 0; in mptctl_eventenable()
1654 ioc->eventTypes = karg.eventTypes; in mptctl_eventenable()
1665 MPT_ADAPTER *ioc; in mptctl_eventreport() local
1676 if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || in mptctl_eventreport()
1677 (ioc == NULL)) { in mptctl_eventreport()
1682 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_eventreport called.\n", in mptctl_eventreport()
1683 ioc->name)); in mptctl_eventreport()
1694 if ((max < 1) || !ioc->events) in mptctl_eventreport()
1698 ioc->aen_event_read_flag=0; in mptctl_eventreport()
1703 if (copy_to_user(uarg->eventData, ioc->events, numBytes)) { in mptctl_eventreport()
1706 ioc->name, __FILE__, __LINE__, ioc->events); in mptctl_eventreport()
1719 MPT_ADAPTER *ioc; in mptctl_replace_fw() local
1730 if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || in mptctl_replace_fw()
1731 (ioc == NULL)) { in mptctl_replace_fw()
1737 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_replace_fw called.\n", in mptctl_replace_fw()
1738 ioc->name)); in mptctl_replace_fw()
1741 if (ioc->cached_fw == NULL) in mptctl_replace_fw()
1744 mpt_free_fw_memory(ioc); in mptctl_replace_fw()
1750 mpt_alloc_fw_memory(ioc, newFwSize); in mptctl_replace_fw()
1751 if (ioc->cached_fw == NULL) in mptctl_replace_fw()
1756 if (copy_from_user(ioc->cached_fw, uarg->newImage, newFwSize)) { in mptctl_replace_fw()
1759 "@ %p\n", ioc->name, __FILE__, __LINE__, uarg); in mptctl_replace_fw()
1760 mpt_free_fw_memory(ioc); in mptctl_replace_fw()
1766 ioc->facts.FWImageSize = newFwSize; in mptctl_replace_fw()
1787 MPT_ADAPTER *ioc; in mptctl_mpt_command() local
1799 if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || in mptctl_mpt_command()
1800 (ioc == NULL)) { in mptctl_mpt_command()
1826 MPT_ADAPTER *ioc; in mptctl_do_mpt_command() local
1850 if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || in mptctl_do_mpt_command()
1851 (ioc == NULL)) { in mptctl_do_mpt_command()
1857 spin_lock_irqsave(&ioc->taskmgmt_lock, flags); in mptctl_do_mpt_command()
1858 if (ioc->ioc_reset_in_progress) { in mptctl_do_mpt_command()
1859 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptctl_do_mpt_command()
1864 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags); in mptctl_do_mpt_command()
1872 karg.dataSgeOffset > ioc->req_sz / 4) in mptctl_do_mpt_command()
1879 sz += ioc->SGE_size; in mptctl_do_mpt_command()
1881 sz += ioc->SGE_size; in mptctl_do_mpt_command()
1883 if (sz > ioc->req_sz) { in mptctl_do_mpt_command()
1886 ioc->name, __FILE__, __LINE__, sz, ioc->req_sz); in mptctl_do_mpt_command()
1892 if ((mf = mpt_get_msg_frame(mptctl_id, ioc)) == NULL) in mptctl_do_mpt_command()
1906 ioc->name, __FILE__, __LINE__, mfPtr); in mptctl_do_mpt_command()
1917 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "sending mpi function (0x%02X), req=%p\n", in mptctl_do_mpt_command()
1918 ioc->name, hdr->Function, mf)); in mptctl_do_mpt_command()
1930 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "\ttype=0x%02x ext_type=0x%02x " in mptctl_do_mpt_command()
1931 "number=0x%02x action=0x%02x\n", ioc->name, in mptctl_do_mpt_command()
1950 if (ioc->sh) { in mptctl_do_mpt_command()
1957 id = (ioc->devices_per_bus == 0) ? 256 : ioc->devices_per_bus; in mptctl_do_mpt_command()
1961 ioc->name, __FILE__, __LINE__); in mptctl_do_mpt_command()
1966 if (pScsiReq->Bus >= ioc->number_of_buses) { in mptctl_do_mpt_command()
1969 ioc->name, __FILE__, __LINE__); in mptctl_do_mpt_command()
1975 pScsiReq->MsgFlags |= mpt_msg_flags(ioc); in mptctl_do_mpt_command()
1990 cpu_to_le32(ioc->sense_buf_low_dma in mptctl_do_mpt_command()
1993 shost_for_each_device(sdev, ioc->sh) { in mptctl_do_mpt_command()
2024 ioc->name, __FILE__, __LINE__); in mptctl_do_mpt_command()
2040 if (!ioc->sh) { in mptctl_do_mpt_command()
2043 ioc->name, __FILE__, __LINE__); in mptctl_do_mpt_command()
2055 if (ioc->sh) { in mptctl_do_mpt_command()
2062 pScsiReq->MsgFlags |= mpt_msg_flags(ioc); in mptctl_do_mpt_command()
2077 cpu_to_le32(ioc->sense_buf_low_dma in mptctl_do_mpt_command()
2100 ioc->name, __FILE__, __LINE__); in mptctl_do_mpt_command()
2110 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT in mptctl_do_mpt_command()
2113 ioc->name, pScsiTm->TaskType, le32_to_cpu in mptctl_do_mpt_command()
2128 high_addr = cpu_to_le32((u32)((u64)ioc->req_frames_dma >> 32)); in mptctl_do_mpt_command()
2129 sense_high= cpu_to_le32((u32)((u64)ioc->sense_buf_pool_dma >> 32)); in mptctl_do_mpt_command()
2135 if ((pInit->Flags != 0) || (pInit->MaxDevices != ioc->facts.MaxDevices) || in mptctl_do_mpt_command()
2136 (pInit->MaxBuses != ioc->facts.MaxBuses) || in mptctl_do_mpt_command()
2137 (pInit->ReplyFrameSize != cpu_to_le16(ioc->reply_sz)) || in mptctl_do_mpt_command()
2142 ioc->name, __FILE__, __LINE__); in mptctl_do_mpt_command()
2175 ioc->name, __FILE__, __LINE__, hdr->Function); in mptctl_do_mpt_command()
2209 ioc->pcidev, bufOut.len, &dma_addr_out); in mptctl_do_mpt_command()
2218 ioc->add_sge(psge, flagsLength, dma_addr_out); in mptctl_do_mpt_command()
2219 psge += ioc->SGE_size; in mptctl_do_mpt_command()
2230 ioc->name, __FILE__, __LINE__,karg.dataOutBufPtr); in mptctl_do_mpt_command()
2242 bufIn.kptr = pci_alloc_consistent(ioc->pcidev, in mptctl_do_mpt_command()
2252 ioc->add_sge(psge, flagsLength, dma_addr_in); in mptctl_do_mpt_command()
2258 ioc->add_sge(psge, flagsLength, (dma_addr_t) -1); in mptctl_do_mpt_command()
2261 SET_MGMT_MSG_CONTEXT(ioc->ioctl_cmds.msg_context, hdr->MsgContext); in mptctl_do_mpt_command()
2262 INITIALIZE_MGMT_STATUS(ioc->ioctl_cmds.status) in mptctl_do_mpt_command()
2265 mutex_lock(&ioc->taskmgmt_cmds.mutex); in mptctl_do_mpt_command()
2266 if (mpt_set_taskmgmt_in_progress_flag(ioc) != 0) { in mptctl_do_mpt_command()
2267 mutex_unlock(&ioc->taskmgmt_cmds.mutex); in mptctl_do_mpt_command()
2271 DBG_DUMP_TM_REQUEST_FRAME(ioc, (u32 *)mf); in mptctl_do_mpt_command()
2273 if ((ioc->facts.IOCCapabilities & MPI_IOCFACTS_CAPABILITY_HIGH_PRI_Q) && in mptctl_do_mpt_command()
2274 (ioc->facts.MsgVersion >= MPI_VERSION_01_05)) in mptctl_do_mpt_command()
2275 mpt_put_msg_frame_hi_pri(mptctl_id, ioc, mf); in mptctl_do_mpt_command()
2277 rc =mpt_send_handshake_request(mptctl_id, ioc, in mptctl_do_mpt_command()
2280 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT in mptctl_do_mpt_command()
2282 ioc->name, ioc, mf)); in mptctl_do_mpt_command()
2283 mpt_clear_taskmgmt_in_progress_flag(ioc); in mptctl_do_mpt_command()
2285 mutex_unlock(&ioc->taskmgmt_cmds.mutex); in mptctl_do_mpt_command()
2291 mpt_put_msg_frame(mptctl_id, ioc, mf); in mptctl_do_mpt_command()
2296 timeleft = wait_for_completion_timeout(&ioc->ioctl_cmds.done, in mptctl_do_mpt_command()
2298 if (!(ioc->ioctl_cmds.status & MPT_MGMT_STATUS_COMMAND_GOOD)) { in mptctl_do_mpt_command()
2300 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT "%s: TIMED OUT!\n", in mptctl_do_mpt_command()
2301 ioc->name, __func__)); in mptctl_do_mpt_command()
2302 if (ioc->ioctl_cmds.status & MPT_MGMT_STATUS_DID_IOCRESET) { in mptctl_do_mpt_command()
2304 mutex_unlock(&ioc->taskmgmt_cmds.mutex); in mptctl_do_mpt_command()
2311 ioc->name, mpt_GetIocState(ioc, 0), function); in mptctl_do_mpt_command()
2313 mutex_unlock(&ioc->taskmgmt_cmds.mutex); in mptctl_do_mpt_command()
2314 mptctl_timeout_expired(ioc, mf); in mptctl_do_mpt_command()
2322 mutex_unlock(&ioc->taskmgmt_cmds.mutex); in mptctl_do_mpt_command()
2330 if (ioc->ioctl_cmds.status & MPT_MGMT_STATUS_RF_VALID) { in mptctl_do_mpt_command()
2331 if (karg.maxReplyBytes < ioc->reply_sz) { in mptctl_do_mpt_command()
2333 4*ioc->ioctl_cmds.reply[2]); in mptctl_do_mpt_command()
2335 sz = min(ioc->reply_sz, 4*ioc->ioctl_cmds.reply[2]); in mptctl_do_mpt_command()
2339 ioc->ioctl_cmds.reply, sz)){ in mptctl_do_mpt_command()
2343 ioc->name, __FILE__, __LINE__, karg.replyFrameBufPtr); in mptctl_do_mpt_command()
2352 if (ioc->ioctl_cmds.status & MPT_MGMT_STATUS_SENSE_VALID) { in mptctl_do_mpt_command()
2356 ioc->ioctl_cmds.sense, sz)) { in mptctl_do_mpt_command()
2359 ioc->name, __FILE__, __LINE__, in mptctl_do_mpt_command()
2370 if ((ioc->ioctl_cmds.status & MPT_MGMT_STATUS_COMMAND_GOOD) && in mptctl_do_mpt_command()
2377 ioc->name, __FILE__, __LINE__, in mptctl_do_mpt_command()
2385 CLEAR_MGMT_STATUS(ioc->ioctl_cmds.status) in mptctl_do_mpt_command()
2386 SET_MGMT_MSG_CONTEXT(ioc->ioctl_cmds.msg_context, 0); in mptctl_do_mpt_command()
2391 pci_free_consistent(ioc->pcidev, in mptctl_do_mpt_command()
2396 pci_free_consistent(ioc->pcidev, in mptctl_do_mpt_command()
2404 mpt_free_msg_frame(ioc, mf); in mptctl_do_mpt_command()
2424 MPT_ADAPTER *ioc; in mptctl_hp_hostinfo() local
2455 if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || in mptctl_hp_hostinfo()
2456 (ioc == NULL)) { in mptctl_hp_hostinfo()
2461 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT ": mptctl_hp_hostinfo called.\n", in mptctl_hp_hostinfo()
2462 ioc->name)); in mptctl_hp_hostinfo()
2467 pdev = (struct pci_dev *) ioc->pcidev; in mptctl_hp_hostinfo()
2479 if (ioc->sh != NULL) in mptctl_hp_hostinfo()
2480 karg.host_no = ioc->sh->host_no; in mptctl_hp_hostinfo()
2486 karg.fw_version[0] = ioc->facts.FWVersion.Struct.Major >= 10 ? in mptctl_hp_hostinfo()
2487 ((ioc->facts.FWVersion.Struct.Major / 10) + '0') : '0'; in mptctl_hp_hostinfo()
2488 karg.fw_version[1] = (ioc->facts.FWVersion.Struct.Major % 10 ) + '0'; in mptctl_hp_hostinfo()
2490 karg.fw_version[3] = ioc->facts.FWVersion.Struct.Minor >= 10 ? in mptctl_hp_hostinfo()
2491 ((ioc->facts.FWVersion.Struct.Minor / 10) + '0') : '0'; in mptctl_hp_hostinfo()
2492 karg.fw_version[4] = (ioc->facts.FWVersion.Struct.Minor % 10 ) + '0'; in mptctl_hp_hostinfo()
2494 karg.fw_version[6] = ioc->facts.FWVersion.Struct.Unit >= 10 ? in mptctl_hp_hostinfo()
2495 ((ioc->facts.FWVersion.Struct.Unit / 10) + '0') : '0'; in mptctl_hp_hostinfo()
2496 karg.fw_version[7] = (ioc->facts.FWVersion.Struct.Unit % 10 ) + '0'; in mptctl_hp_hostinfo()
2498 karg.fw_version[9] = ioc->facts.FWVersion.Struct.Dev >= 10 ? in mptctl_hp_hostinfo()
2499 ((ioc->facts.FWVersion.Struct.Dev / 10) + '0') : '0'; in mptctl_hp_hostinfo()
2500 karg.fw_version[10] = (ioc->facts.FWVersion.Struct.Dev % 10 ) + '0'; in mptctl_hp_hostinfo()
2517 if (mpt_config(ioc, &cfg) == 0) { in mptctl_hp_hostinfo()
2522 pbuf = pci_alloc_consistent(ioc->pcidev, hdr.PageLength * 4, &buf_dma); in mptctl_hp_hostinfo()
2525 if (mpt_config(ioc, &cfg) == 0) { in mptctl_hp_hostinfo()
2532 pci_free_consistent(ioc->pcidev, hdr.PageLength * 4, pbuf, buf_dma); in mptctl_hp_hostinfo()
2537 rc = mpt_GetIocState(ioc, 1); in mptctl_hp_hostinfo()
2556 if ((ioc->bus_type == SAS) || (ioc->bus_type == FC)) in mptctl_hp_hostinfo()
2564 if (ioc->sh != NULL) { in mptctl_hp_hostinfo()
2565 MPT_SCSI_HOST *hd = shost_priv(ioc->sh); in mptctl_hp_hostinfo()
2568 karg.hard_resets = ioc->hard_resets; in mptctl_hp_hostinfo()
2569 karg.soft_resets = ioc->soft_resets; in mptctl_hp_hostinfo()
2570 karg.timeouts = ioc->timeouts; in mptctl_hp_hostinfo()
2577 if ((mf = mpt_get_msg_frame(mptctl_id, ioc)) == NULL) { in mptctl_hp_hostinfo()
2578 dfailprintk(ioc, printk(MYIOC_s_WARN_FMT in mptctl_hp_hostinfo()
2579 "%s, no msg frames!!\n", ioc->name, __func__)); in mptctl_hp_hostinfo()
2597 pbuf = pci_alloc_consistent(ioc->pcidev, 4, &buf_dma); in mptctl_hp_hostinfo()
2600 ioc->add_sge((char *)&IstwiRWRequest->SGL, in mptctl_hp_hostinfo()
2604 SET_MGMT_MSG_CONTEXT(ioc->ioctl_cmds.msg_context, in mptctl_hp_hostinfo()
2606 INITIALIZE_MGMT_STATUS(ioc->ioctl_cmds.status) in mptctl_hp_hostinfo()
2607 mpt_put_msg_frame(mptctl_id, ioc, mf); in mptctl_hp_hostinfo()
2610 timeleft = wait_for_completion_timeout(&ioc->ioctl_cmds.done, in mptctl_hp_hostinfo()
2612 if (!(ioc->ioctl_cmds.status & MPT_MGMT_STATUS_COMMAND_GOOD)) { in mptctl_hp_hostinfo()
2614 printk(MYIOC_s_WARN_FMT "%s: failed\n", ioc->name, __func__); in mptctl_hp_hostinfo()
2615 if (ioc->ioctl_cmds.status & MPT_MGMT_STATUS_DID_IOCRESET) { in mptctl_hp_hostinfo()
2616 mpt_free_msg_frame(ioc, mf); in mptctl_hp_hostinfo()
2622 ioc->name, mpt_GetIocState(ioc, 0)); in mptctl_hp_hostinfo()
2623 mptctl_timeout_expired(ioc, mf); in mptctl_hp_hostinfo()
2638 if (ioc->ioctl_cmds.status & MPT_MGMT_STATUS_RF_VALID) in mptctl_hp_hostinfo()
2642 CLEAR_MGMT_STATUS(ioc->ioctl_cmds.status) in mptctl_hp_hostinfo()
2643 SET_MGMT_MSG_CONTEXT(ioc->ioctl_cmds.msg_context, 0); in mptctl_hp_hostinfo()
2646 pci_free_consistent(ioc->pcidev, 4, pbuf, buf_dma); in mptctl_hp_hostinfo()
2653 ioc->name, __FILE__, __LINE__, uarg); in mptctl_hp_hostinfo()
2678 MPT_ADAPTER *ioc; in mptctl_hp_targetinfo() local
2695 if (((iocnum = mpt_verify_adapter(karg.hdr.iocnum, &ioc)) < 0) || in mptctl_hp_targetinfo()
2696 (ioc == NULL)) { in mptctl_hp_targetinfo()
2701 dctlprintk(ioc, printk(MYIOC_s_DEBUG_FMT "mptctl_hp_targetinfo called.\n", in mptctl_hp_targetinfo()
2702 ioc->name)); in mptctl_hp_targetinfo()
2706 if ((ioc->bus_type == SAS) || (ioc->bus_type == FC)) in mptctl_hp_targetinfo()
2709 if ((ioc->spi_data.sdp0length == 0) || (ioc->sh == NULL)) in mptctl_hp_targetinfo()
2712 if (ioc->sh->host_no != karg.hdr.host) in mptctl_hp_targetinfo()
2717 data_sz = ioc->spi_data.sdp0length * 4; in mptctl_hp_targetinfo()
2718 pg0_alloc = (SCSIDevicePage0_t *) pci_alloc_consistent(ioc->pcidev, data_sz, &page_dma); in mptctl_hp_targetinfo()
2720 hdr.PageVersion = ioc->spi_data.sdp0version; in mptctl_hp_targetinfo()
2733 if ((rc = mpt_config(ioc, &cfg)) == 0) { in mptctl_hp_targetinfo()
2756 pci_free_consistent(ioc->pcidev, data_sz, (u8 *) pg0_alloc, page_dma); in mptctl_hp_targetinfo()
2778 if ((mpt_config(ioc, &cfg) == 0) && (cfg.cfghdr.hdr->PageLength > 0)) { in mptctl_hp_targetinfo()
2783 ioc->pcidev, data_sz, &page_dma); in mptctl_hp_targetinfo()
2787 if ((rc = mpt_config(ioc, &cfg)) == 0) { in mptctl_hp_targetinfo()
2792 pci_free_consistent(ioc->pcidev, data_sz, (u8 *) pg3_alloc, page_dma); in mptctl_hp_targetinfo()
2795 hd = shost_priv(ioc->sh); in mptctl_hp_targetinfo()
2804 ioc->name, __FILE__, __LINE__, uarg); in mptctl_hp_targetinfo()
2974 MPT_ADAPTER *ioc = pci_get_drvdata(pdev); in mptctl_probe() local
2976 mutex_init(&ioc->ioctl_cmds.mutex); in mptctl_probe()
2977 init_completion(&ioc->ioctl_cmds.done); in mptctl_probe()