• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6/drivers/message/fusion/

Lines Matching defs:ioc

84 struct scsi_cmnd	*mptscsih_get_scsi_lookup(MPT_ADAPTER *ioc, int i);
85 static struct scsi_cmnd * mptscsih_getclear_scsi_lookup(MPT_ADAPTER *ioc, int i);
86 static void mptscsih_set_scsi_lookup(MPT_ADAPTER *ioc, int i, struct scsi_cmnd *scmd);
87 static int SCPNT_TO_LOOKUP_IDX(MPT_ADAPTER *ioc, struct scsi_cmnd *scmd);
88 int mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *r);
90 int mptscsih_taskmgmt_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *r);
92 static int mptscsih_AddSGE(MPT_ADAPTER *ioc, struct scsi_cmnd *SCpnt,
94 static void mptscsih_freeChainBuffers(MPT_ADAPTER *ioc, int req_idx);
100 int mptscsih_ioc_reset(MPT_ADAPTER *ioc, int post_reset);
101 int mptscsih_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply);
104 mptscsih_taskmgmt_response_code(MPT_ADAPTER *ioc, u8 response_code);
105 static int mptscsih_get_completion_code(MPT_ADAPTER *ioc,
107 int mptscsih_scandv_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *r);
112 mptscsih_taskmgmt_reply(MPT_ADAPTER *ioc, u8 type,
128 * @ioc: Pointer to MPT_ADAPTER structure
134 mptscsih_getFreeChainBuffer(MPT_ADAPTER *ioc, int *retIndex)
141 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT "getFreeChainBuffer called\n",
142 ioc->name));
143 spin_lock_irqsave(&ioc->FreeQlock, flags);
144 if (!list_empty(&ioc->FreeChainQ)) {
147 chainBuf = list_entry(ioc->FreeChainQ.next, MPT_FRAME_HDR,
150 offset = (u8 *)chainBuf - (u8 *)ioc->ChainBuffer;
151 chain_idx = offset / ioc->req_sz;
153 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT
155 ioc->name, chainBuf, ioc->ChainBuffer, offset, chain_idx));
159 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT "getFreeChainBuffer failed\n",
160 ioc->name));
162 spin_unlock_irqrestore(&ioc->FreeQlock, flags);
172 * @ioc: Pointer to MPT_ADAPTER structure
179 mptscsih_AddSGE(MPT_ADAPTER *ioc, struct scsi_cmnd *SCpnt,
205 frm_sz = ioc->req_sz;
228 numSgeSlots = ((frm_sz - sgeOffset) / ioc->SGE_size);
247 ioc->add_sge(psge, sgflags | thisxfer, v2);
251 psge += ioc->SGE_size;
252 sgeOffset += ioc->SGE_size;
269 ioc->add_sge(psge, sgflags | thisxfer, v2);
270 sgeOffset += ioc->SGE_size;
279 ioc->add_chain((char *)chainSge, 0, sgeOffset,
280 ioc->ChainBufferDMA + chain_dma_off);
286 RequestNB = (((sgeOffset - 1) >> ioc->NBShiftFactor) + 1) & 0x03;
287 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT
288 "Single Buffer RequestNB=%x, sgeOffset=%d\n", ioc->name, RequestNB, sgeOffset));
289 ioc->RequestNB[req_idx] = RequestNB;
303 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT "SG: Chain Required! sg done %d\n",
304 ioc->name, sg_done));
313 u32 *ptmp = (u32 *) (psge - ioc->SGE_size);
327 sgeOffset += ioc->SGE_size;
328 ioc->add_chain((char *)chainSge, nextChain, sgeOffset,
329 ioc->ChainBufferDMA + chain_dma_off);
336 RequestNB = (((sgeOffset - 1) >> ioc->NBShiftFactor) + 1) & 0x03;
337 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Chain Buffer Needed, RequestNB=%x sgeOffset=%d\n", ioc->name, RequestNB, sgeOffset));
338 ioc->RequestNB[req_idx] = RequestNB;
347 if ((mptscsih_getFreeChainBuffer(ioc, &newIndex)) == FAILED) {
348 dfailprintk(ioc, printk(MYIOC_s_DEBUG_FMT
350 ioc->name, pReq->CDB[0], SCpnt));
358 ioc->ChainToChain[chain_idx] = newIndex;
360 ioc->ReqToChain[req_idx] = newIndex;
363 chain_dma_off = ioc->req_sz * chain_idx;
370 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT " Current buff @ %p (index 0x%x)",
371 ioc->name, psge, req_idx));
375 psge = (char *) (ioc->ChainBuffer + chain_dma_off);
379 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT " Chain buff @ %p (index 0x%x)\n",
380 ioc->name, psge, chain_idx));
392 mptscsih_issue_sep_command(MPT_ADAPTER *ioc, VirtTarget *vtarget,
398 if (ioc->bus_type != SAS)
406 if ((mf = mpt_get_msg_frame(ioc->InternalCtx, ioc)) == NULL) {
407 dfailprintk(ioc, printk(MYIOC_s_WARN_FMT "%s: no msg frames!!\n",
408 ioc->name,__func__));
418 devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT
420 ioc->name, SlotStatus, SEPMsg->Bus, SEPMsg->TargetID));
421 mpt_put_msg_frame(ioc->DoneCtx, ioc, mf);
427 * @ioc: Pointer to MPT_ADAPTER structure
436 mptscsih_info_scsiio(MPT_ADAPTER *ioc, struct scsi_cmnd *sc, SCSIIOReply_t * pScsiReply)
540 ioc->name, pScsiReply->Bus, pScsiReply->TargetID, sc->device->lun);
542 "resid = %d\n", ioc->name, scsi_bufflen(sc), sc->underflow,
545 "sc->result = %08X\n", ioc->name, le16_to_cpu(pScsiReply->TaskTag),
550 ioc->name, desc, ioc_status, desc1, pScsiReply->SCSIStatus,
559 "[0x%02x,0x%02x,0x%02x]\n", ioc->name, skey, asc, ascq);
568 ioc->name, le32_to_cpu(pScsiReply->ResponseInfo));
576 * @ioc: Pointer to MPT_ADAPTER structure
588 mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
598 hd = shost_priv(ioc->sh);
611 sc = mptscsih_getclear_scsi_lookup(ioc, req_idx);
621 ioc->name);
623 mptscsih_freeChainBuffers(ioc, req_idx);
628 mptscsih_freeChainBuffers(ioc, req_idx);
632 if (ioc->bus_type == SAS) {
647 if((ioc->facts.MsgVersion >= MPI_VERSION_01_05) && pScsiReply){
648 dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT
650 ioc->name, mf, mr, sc, req_idx, pScsiReply->TaskTag));
652 dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT
654 ioc->name, mf, mr, sc, req_idx));
696 "FCP_ResponseInfo=%08xh\n", ioc->name,
720 if (ioc->bus_type != FC)
734 mptscsih_issue_sep_command(ioc, vtarget,
741 if ( ioc->bus_type == SAS ) {
773 } else if (ioc->bus_type == FC) {
797 if (ioc->bus_type == FC)
809 dreplyprintk(ioc, printk(MYIOC_s_DEBUG_FMT
811 ioc->name, sc->result, sc->device->channel, sc->device->id));
829 if (ioc->bus_type == SPI) {
868 dreplyprintk(ioc, printk(MYIOC_s_DEBUG_FMT
870 ioc->name, sc->underflow));
871 dreplyprintk(ioc, printk(MYIOC_s_DEBUG_FMT
872 " ActBytesXferd=%02xh\n", ioc->name, xfer_cnt));
899 if ((ioc->bus_type == SPI) &&
1001 if (sc->result && (ioc->debug_level & MPT_DEBUG_REPLY))
1002 mptscsih_info_scsiio(ioc, sc, pScsiReply);
1013 mptscsih_freeChainBuffers(ioc, req_idx);
1030 MPT_ADAPTER *ioc = hd->ioc;
1036 for (ii= 0; ii < ioc->req_depth; ii++) {
1037 sc = mptscsih_getclear_scsi_lookup(ioc, ii);
1040 mf = (SCSIIORequest_t *)MPT_INDEX_2_MFPTR(ioc, ii);
1045 mptscsih_freeChainBuffers(ioc, ii);
1046 mpt_free_msg_frame(ioc, (MPT_FRAME_HDR *)mf);
1052 dtmprintk(ioc, sdev_printk(KERN_INFO, sc->device, MYIOC_s_FMT
1054 "idx=%x\n", ioc->name, channel, id, sc, mf, ii));
1080 MPT_ADAPTER *ioc = hd->ioc;
1083 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
1084 for (ii = 0; ii < ioc->req_depth; ii++) {
1085 if ((sc = ioc->ScsiLookup[ii]) != NULL) {
1087 mf = (SCSIIORequest_t *)MPT_INDEX_2_MFPTR(ioc, ii);
1106 ioc->ScsiLookup[ii] = NULL;
1107 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
1108 mptscsih_freeChainBuffers(ioc, ii);
1109 mpt_free_msg_frame(ioc, (MPT_FRAME_HDR *)mf);
1113 dtmprintk(ioc, sdev_printk(KERN_INFO, sc->device,
1115 "fw_id %d, sc=%p, mf = %p, idx=%x\n", ioc->name,
1119 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
1122 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
1145 MPT_ADAPTER *ioc;
1153 ioc = hd->ioc;
1155 dprintk(ioc, printk(MYIOC_s_WARN_FMT "Device (%d:%d:%d) reported QUEUE_FULL!\n",
1156 ioc->name, 0, sc->device->id, sc->device->lun));
1171 MPT_ADAPTER *ioc = pci_get_drvdata(pdev);
1172 struct Scsi_Host *host = ioc->sh;
1185 if (ioc->ScsiLookup != NULL) {
1186 sz1 = ioc->req_depth * sizeof(void *);
1187 kfree(ioc->ScsiLookup);
1188 ioc->ScsiLookup = NULL;
1191 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT
1193 ioc->name, sz1));
1199 ioc->sh = NULL;
1227 MPT_ADAPTER *ioc = pci_get_drvdata(pdev);
1229 scsi_block_requests(ioc->sh);
1244 MPT_ADAPTER *ioc = pci_get_drvdata(pdev);
1248 scsi_unblock_requests(ioc->sh);
1277 mpt_print_ioc_summary(h->ioc, h->info_kbuf, &size, 0, 0);
1329 mptscsih_host_info(MPT_ADAPTER *ioc, char *pbuf, off_t offset, int len)
1338 mptscsih_copy_info(&info, "%s: %s, ", ioc->name, ioc->prod_name);
1339 mptscsih_copy_info(&info, "%s%08xh, ", MPT_FW_REV_MAGIC_ID_STRING, ioc->facts.FWVersion.Word);
1340 mptscsih_copy_info(&info, "Ports=%d, ", ioc->facts.NumberOfPorts);
1341 mptscsih_copy_info(&info, "MaxQ=%d\n", ioc->req_depth);
1364 MPT_ADAPTER *ioc = hd->ioc;
1375 size = mptscsih_host_info(ioc, buffer, offset, length);
1409 MPT_ADAPTER *ioc;
1412 ioc = hd->ioc;
1415 dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "qcmd: SCpnt=%p, done()=%p\n",
1416 ioc->name, SCpnt, done));
1418 if (ioc->taskmgmt_quiesce_io) {
1419 dtmprintk(ioc, printk(MYIOC_s_WARN_FMT "qcmd: SCpnt=%p timeout + 60HZ\n",
1420 ioc->name, SCpnt));
1427 if ((mf = mpt_get_msg_frame(ioc->DoneCtx, ioc)) == NULL) {
1428 dprintk(ioc, printk(MYIOC_s_WARN_FMT "QueueCmd, no msg frames!!\n",
1429 ioc->name));
1445 scsidir = MPI_SCSIIO_CONTROL_READ; /* DATA IN (host<--ioc<--dev) */
1448 scsidir = MPI_SCSIIO_CONTROL_WRITE; /* DATA OUT (host-->ioc-->dev) */
1482 pScsiReq->MsgFlags = mpt_msg_flags(ioc);
1500 pScsiReq->SenseBufferLowAddr = cpu_to_le32(ioc->sense_buf_low_dma
1508 ioc->add_sge((char *)&pScsiReq->SGL,
1513 if (mptscsih_AddSGE(ioc, SCpnt, pScsiReq, my_idx) != SUCCESS)
1518 mptscsih_set_scsi_lookup(ioc, my_idx, SCpnt);
1520 mpt_put_msg_frame(ioc->DoneCtx, ioc, mf);
1521 dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Issued SCSI cmd (%p) mf=%p idx=%d\n",
1522 ioc->name, SCpnt, mf, my_idx));
1523 DBG_DUMP_REQUEST_FRAME(ioc, (u32 *)mf);
1527 mptscsih_freeChainBuffers(ioc, my_idx);
1528 mpt_free_msg_frame(ioc, mf);
1543 mptscsih_freeChainBuffers(MPT_ADAPTER *ioc, int req_idx)
1553 chain_idx = ioc->ReqToChain[req_idx];
1554 ioc->ReqToChain[req_idx] = MPT_HOST_NO_CHAIN;
1559 next = ioc->ChainToChain[chain_idx];
1564 ioc->ChainToChain[chain_idx] = MPT_HOST_NO_CHAIN;
1566 chain = (MPT_FRAME_HDR *) (ioc->ChainBuffer
1567 + (chain_idx * ioc->req_sz));
1569 spin_lock_irqsave(&ioc->FreeQlock, flags);
1570 list_add_tail(&chain->u.frame.linkage.list, &ioc->FreeChainQ);
1571 spin_unlock_irqrestore(&ioc->FreeQlock, flags);
1573 dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "FreeChainBuffers (index %d)\n",
1574 ioc->name, chain_idx));
1614 MPT_ADAPTER *ioc = hd->ioc;
1621 ioc_raw_state = mpt_GetIocState(ioc, 0);
1626 ioc->name, type, ioc_raw_state);
1628 ioc->name, __func__);
1629 if (mpt_HardResetHandler(ioc, CAN_SLEEP) < 0)
1631 "FAILED!!\n", ioc->name);
1639 ioc->name, type, ioc_raw_state);
1643 mutex_lock(&ioc->taskmgmt_cmds.mutex);
1644 if (mpt_set_taskmgmt_in_progress_flag(ioc) != 0) {
1652 if ((mf = mpt_get_msg_frame(ioc->TaskCtx, ioc)) == NULL) {
1653 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
1654 "TaskMgmt no msg frames!!\n", ioc->name));
1656 mpt_clear_taskmgmt_in_progress_flag(ioc);
1659 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "TaskMgmt request (mf=%p)\n",
1660 ioc->name, mf));
1683 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "TaskMgmt: ctx2abort (0x%08x) "
1684 "task_type = 0x%02X, timeout = %ld\n", ioc->name, ctx2abort,
1687 DBG_DUMP_TM_REQUEST_FRAME(ioc, (u32 *)pScsiTm);
1689 INITIALIZE_MGMT_STATUS(ioc->taskmgmt_cmds.status)
1691 if ((ioc->facts.IOCCapabilities & MPI_IOCFACTS_CAPABILITY_HIGH_PRI_Q) &&
1692 (ioc->facts.MsgVersion >= MPI_VERSION_01_05))
1693 mpt_put_msg_frame_hi_pri(ioc->TaskCtx, ioc, mf);
1695 retval = mpt_send_handshake_request(ioc->TaskCtx, ioc,
1698 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
1700 ioc->name, mf, retval));
1701 mpt_free_msg_frame(ioc, mf);
1702 mpt_clear_taskmgmt_in_progress_flag(ioc);
1707 timeleft = wait_for_completion_timeout(&ioc->taskmgmt_cmds.done,
1709 if (!(ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_COMMAND_GOOD)) {
1711 dtmprintk(ioc, printk(MYIOC_s_ERR_FMT
1712 "TaskMgmt TIMED OUT!(mf=%p)\n", ioc->name, mf));
1713 mpt_clear_taskmgmt_in_progress_flag(ioc);
1714 if (ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_DID_IOCRESET)
1720 retval = mptscsih_taskmgmt_reply(ioc, type,
1721 (SCSITaskMgmtReply_t *) ioc->taskmgmt_cmds.reply);
1723 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
1725 ioc->name, jiffies_to_msecs(jiffies - time_count)/1000));
1729 CLEAR_MGMT_STATUS(ioc->taskmgmt_cmds.status)
1733 ioc->name, __func__, mpt_GetIocState(ioc, 0));
1734 retval = mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP);
1735 mpt_free_msg_frame(ioc, mf);
1739 mutex_unlock(&ioc->taskmgmt_cmds.mutex);
1745 mptscsih_get_tm_timeout(MPT_ADAPTER *ioc)
1747 switch (ioc->bus_type) {
1777 MPT_ADAPTER *ioc;
1789 ioc = hd->ioc;
1791 ioc->name, SCpnt);
1796 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
1798 ioc->name, SCpnt));
1808 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
1810 ioc->name, SCpnt));
1819 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
1821 ioc->name, SCpnt));
1829 if ((scpnt_idx = SCPNT_TO_LOOKUP_IDX(ioc, SCpnt)) < 0) {
1834 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "task abort: "
1835 "Command not in the active list! (sc=%p)\n", ioc->name,
1841 if (ioc->timeouts < -1)
1842 ioc->timeouts++;
1845 mpt_halt_firmware(ioc);
1854 mf = MPT_INDEX_2_MFPTR(ioc, scpnt_idx);
1860 ctx2abort, mptscsih_get_tm_timeout(ioc));
1862 if (SCPNT_TO_LOOKUP_IDX(ioc, SCpnt) == scpnt_idx &&
1864 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
1866 ioc->name, SCpnt));
1869 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
1871 ioc->name, SCpnt));
1877 ioc->name, ((retval == SUCCESS) ? "SUCCESS" : "FAILED"), SCpnt);
1897 MPT_ADAPTER *ioc;
1907 ioc = hd->ioc;
1909 ioc->name, SCpnt);
1929 mptscsih_get_tm_timeout(ioc));
1933 ioc->name, ((retval == 0) ? "SUCCESS" : "FAILED" ), SCpnt);
1957 MPT_ADAPTER *ioc;
1967 ioc = hd->ioc;
1969 ioc->name, SCpnt);
1972 if (ioc->timeouts < -1)
1973 ioc->timeouts++;
1981 mptscsih_get_tm_timeout(ioc));
1984 ioc->name, ((retval == 0) ? "SUCCESS" : "FAILED" ), SCpnt);
2006 MPT_ADAPTER *ioc;
2019 ioc = hd->ioc;
2021 ioc->name, SCpnt);
2026 retval = mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP);
2033 ioc->name, ((retval == 0) ? "SUCCESS" : "FAILED" ), SCpnt);
2039 mptscsih_taskmgmt_reply(MPT_ADAPTER *ioc, u8 type,
2046 if (!(ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_RF_VALID)) {
2051 DBG_DUMP_TM_REPLY_FRAME(ioc, (u32 *)pScsiTmReply);
2056 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2059 "\tterm_cmnds = %d\n", ioc->name, pScsiTmReply->Bus,
2064 if (ioc->facts.MsgVersion >= MPI_VERSION_01_05 &&
2066 mptscsih_taskmgmt_response_code(ioc,
2091 mptscsih_taskmgmt_response_code(MPT_ADAPTER *ioc, u8 response_code)
2122 ioc->name, response_code, desc);
2129 * @ioc: Pointer to MPT_ADAPTER structure
2141 mptscsih_taskmgmt_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf,
2144 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2145 "TaskMgmt completed (mf=%p, mr=%p)\n", ioc->name, mf, mr));
2147 ioc->taskmgmt_cmds.status |= MPT_MGMT_STATUS_COMMAND_GOOD;
2152 ioc->taskmgmt_cmds.status |= MPT_MGMT_STATUS_RF_VALID;
2153 memcpy(ioc->taskmgmt_cmds.reply, mr,
2156 if (ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_PENDING) {
2157 mpt_clear_taskmgmt_in_progress_flag(ioc);
2158 ioc->taskmgmt_cmds.status &= ~MPT_MGMT_STATUS_PENDING;
2159 complete(&ioc->taskmgmt_cmds.done);
2160 if (ioc->bus_type == SAS)
2161 ioc->schedule_target_reset(ioc);
2211 mptscsih_is_phys_disk(MPT_ADAPTER *ioc, u8 channel, u8 id)
2219 if (!ioc->raid_data.pIocPg3)
2221 for (i = 0; i < ioc->raid_data.pIocPg3->NumPhysDisks; i++) {
2222 if ((id == ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskID) &&
2223 (channel == ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskBus)) {
2229 if (ioc->bus_type != SAS)
2235 for (i = 0; i < ioc->raid_data.pIocPg3->NumPhysDisks; i++) {
2236 num_paths = mpt_raid_phys_disk_get_num_paths(ioc,
2237 ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskNum);
2244 if ((mpt_raid_phys_disk_pg1(ioc,
2245 ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskNum,
2271 if (list_empty(&ioc->raid_data.inactive_list))
2274 mutex_lock(&ioc->raid_data.inactive_list_mutex);
2275 list_for_each_entry(component_info, &ioc->raid_data.inactive_list,
2281 mutex_unlock(&ioc->raid_data.inactive_list_mutex);
2289 mptscsih_raid_id_to_num(MPT_ADAPTER *ioc, u8 channel, u8 id)
2297 if (!ioc->raid_data.pIocPg3)
2299 for (i = 0; i < ioc->raid_data.pIocPg3->NumPhysDisks; i++) {
2300 if ((id == ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskID) &&
2301 (channel == ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskBus)) {
2302 rc = ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskNum;
2307 if (ioc->bus_type != SAS)
2313 for (i = 0; i < ioc->raid_data.pIocPg3->NumPhysDisks; i++) {
2314 num_paths = mpt_raid_phys_disk_get_num_paths(ioc,
2315 ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskNum);
2322 if ((mpt_raid_phys_disk_pg1(ioc,
2323 ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskNum,
2348 if (list_empty(&ioc->raid_data.inactive_list))
2351 mutex_lock(&ioc->raid_data.inactive_list_mutex);
2352 list_for_each_entry(component_info, &ioc->raid_data.inactive_list,
2358 mutex_unlock(&ioc->raid_data.inactive_list_mutex);
2408 MPT_ADAPTER *ioc = hd->ioc;
2416 if (ioc->bus_type == SPI) {
2425 max_depth = ioc->sh->can_queue;
2455 MPT_ADAPTER *ioc = hd->ioc;
2461 dsprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2463 ioc->name, sdev, sdev->channel, sdev->id, sdev->lun));
2464 if (ioc->bus_type == SPI)
2465 dsprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2467 ioc->name, sdev->sdtr, sdev->wdtr,
2472 dsprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2474 ioc->name, sdev->queue_depth, vtarget->tflags));
2476 if (ioc->bus_type == SPI)
2477 dsprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2479 ioc->name, vtarget->negoFlags, vtarget->maxOffset,
2484 dsprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2486 ioc->name,sdev->tagged_supported, sdev->simple_tags,
2510 MPT_ADAPTER *ioc = hd->ioc;
2523 sense_data = ((u8 *)ioc->sense_buf_pool + (req_index * MPT_SENSE_BUFFER_ALLOC));
2528 if ((ioc->events) && (ioc->eventTypes & (1 << MPI_EVENT_SCSI_DEVICE_STATUS_CHANGE))) {
2532 idx = ioc->eventContext % MPTCTL_EVENT_LOG_SIZE;
2533 ioc->events[idx].event = MPI_EVENT_SCSI_DEVICE_STATUS_CHANGE;
2534 ioc->events[idx].eventContext = ioc->eventContext;
2536 ioc->events[idx].data[0] = (pReq->LUN[1] << 24) |
2540 ioc->events[idx].data[1] = (sense_data[13] << 8) | sense_data[12];
2542 ioc->eventContext++;
2543 if (ioc->pcidev->vendor ==
2545 mptscsih_issue_sep_command(ioc,
2553 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Hmmm... SenseData len=0! (?)\n",
2554 ioc->name));
2560 * @ioc: Pointer to MPT_ADAPTER structure
2566 mptscsih_get_scsi_lookup(MPT_ADAPTER *ioc, int i)
2571 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
2572 scmd = ioc->ScsiLookup[i];
2573 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
2581 * @ioc: Pointer to MPT_ADAPTER structure
2588 mptscsih_getclear_scsi_lookup(MPT_ADAPTER *ioc, int i)
2593 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
2594 scmd = ioc->ScsiLookup[i];
2595 ioc->ScsiLookup[i] = NULL;
2596 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
2604 * @ioc: Pointer to MPT_ADAPTER structure
2610 mptscsih_set_scsi_lookup(MPT_ADAPTER *ioc, int i, struct scsi_cmnd *scmd)
2614 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
2615 ioc->ScsiLookup[i] = scmd;
2616 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
2621 * @ioc: Pointer to MPT_ADAPTER structure
2625 SCPNT_TO_LOOKUP_IDX(MPT_ADAPTER *ioc, struct scsi_cmnd *sc)
2630 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
2631 for (i = 0; i < ioc->req_depth; i++) {
2632 if (ioc->ScsiLookup[i] == sc) {
2639 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
2645 mptscsih_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
2649 if (ioc->sh == NULL || shost_priv(ioc->sh) == NULL)
2652 hd = shost_priv(ioc->sh);
2655 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2656 "%s: MPT_IOC_SETUP_RESET\n", ioc->name, __func__));
2659 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2660 "%s: MPT_IOC_PRE_RESET\n", ioc->name, __func__));
2664 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2665 "%s: MPT_IOC_POST_RESET\n", ioc->name, __func__));
2666 if (ioc->internal_cmds.status & MPT_MGMT_STATUS_PENDING) {
2667 ioc->internal_cmds.status |=
2669 complete(&ioc->internal_cmds.done);
2680 mptscsih_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply)
2684 devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2686 ioc->name, event));
2690 (ioc->bus_type == SPI) && (ioc->soft_resets < -1))
2691 ioc->soft_resets++;
2706 * @ioc: Pointer to MPT_ADAPTER structure
2722 mptscsih_scandv_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req,
2732 ioc->internal_cmds.status |= MPT_MGMT_STATUS_COMMAND_GOOD;
2733 ioc->internal_cmds.completion_code = MPT_SCANDV_GOOD;
2739 ioc->internal_cmds.completion_code =
2740 mptscsih_get_completion_code(ioc, req, reply);
2741 ioc->internal_cmds.status |= MPT_MGMT_STATUS_RF_VALID;
2742 memcpy(ioc->internal_cmds.reply, reply,
2749 sense_data = ((u8 *)ioc->sense_buf_pool +
2753 memcpy(ioc->internal_cmds.sense, sense_data, sz);
2756 if (!(ioc->internal_cmds.status & MPT_MGMT_STATUS_PENDING))
2758 ioc->internal_cmds.status &= ~MPT_MGMT_STATUS_PENDING;
2759 complete(&ioc->internal_cmds.done);
2766 * @ioc: Pointer to MPT_ADAPTER structure
2772 mptscsih_get_completion_code(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req,
2785 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2787 "IOCLogInfo=%08xh\n", ioc->name, status, pReply->SCSIState,
2849 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2850 " completionCode set to %08xh\n", ioc->name, completion_code));
2884 MPT_ADAPTER *ioc = hd->ioc;
2890 spin_lock_irqsave(&ioc->taskmgmt_lock, flags);
2891 if (ioc->ioc_reset_in_progress) {
2892 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags);
2893 dfailprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2894 "%s: busy with host reset\n", ioc->name, __func__));
2897 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags);
2899 mutex_lock(&ioc->internal_cmds.mutex);
2999 if ((mf = mpt_get_msg_frame(ioc->InternalCtx, ioc)) == NULL) {
3000 dfailprintk(ioc, printk(MYIOC_s_WARN_FMT "%s: No msg frames!\n",
3001 ioc->name, __func__));
3029 pScsiReq->MsgFlags = mpt_msg_flags(ioc);
3041 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT
3042 "%s: Untagged! 0x%02x\n", ioc->name, __func__, cmd));
3049 pScsiReq->SenseBufferLowAddr = cpu_to_le32(ioc->sense_buf_low_dma
3052 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT
3054 ioc->name, __func__, cmd, io->channel, io->id, io->lun));
3057 ioc->add_sge((char *) &pScsiReq->SGL,
3060 ioc->add_sge((char *) &pScsiReq->SGL,
3063 INITIALIZE_MGMT_STATUS(ioc->internal_cmds.status)
3064 mpt_put_msg_frame(ioc->InternalCtx, ioc, mf);
3065 timeleft = wait_for_completion_timeout(&ioc->internal_cmds.done,
3067 if (!(ioc->internal_cmds.status & MPT_MGMT_STATUS_COMMAND_GOOD)) {
3069 dfailprintk(ioc, printk(MYIOC_s_DEBUG_FMT
3070 "%s: TIMED OUT for cmd=0x%02x\n", ioc->name, __func__,
3072 if (ioc->internal_cmds.status & MPT_MGMT_STATUS_DID_IOCRESET) {
3073 mpt_free_msg_frame(ioc, mf);
3080 ioc->name, __func__, mpt_GetIocState(ioc, 0),
3082 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP);
3083 mpt_free_msg_frame(ioc, mf);
3088 ret = ioc->internal_cmds.completion_code;
3089 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: success, rc=0x%02x\n",
3090 ioc->name, __func__, ret));
3093 CLEAR_MGMT_STATUS(ioc->internal_cmds.status)
3094 mutex_unlock(&ioc->internal_cmds.mutex);
3146 MPT_ADAPTER *ioc = hd->ioc;
3149 (ioc->facts.FWVersion.Word & 0xFF000000) >> 24,
3150 (ioc->facts.FWVersion.Word & 0x00FF0000) >> 16,
3151 (ioc->facts.FWVersion.Word & 0x0000FF00) >> 8,
3152 ioc->facts.FWVersion.Word & 0x000000FF);
3162 MPT_ADAPTER *ioc = hd->ioc;
3165 (ioc->biosVersion & 0xFF000000) >> 24,
3166 (ioc->biosVersion & 0x00FF0000) >> 16,
3167 (ioc->biosVersion & 0x0000FF00) >> 8,
3168 ioc->biosVersion & 0x000000FF);
3178 MPT_ADAPTER *ioc = hd->ioc;
3180 return snprintf(buf, PAGE_SIZE, "%03x\n", ioc->facts.MsgVersion);
3191 MPT_ADAPTER *ioc = hd->ioc;
3193 return snprintf(buf, PAGE_SIZE, "%s\n", ioc->prod_name);
3205 MPT_ADAPTER *ioc = hd->ioc;
3208 ioc->nvdata_version_persistent);
3219 MPT_ADAPTER *ioc = hd->ioc;
3221 return snprintf(buf, PAGE_SIZE, "%02xh\n",ioc->nvdata_version_default);
3232 MPT_ADAPTER *ioc = hd->ioc;
3234 return snprintf(buf, PAGE_SIZE, "%s\n", ioc->board_name);
3244 MPT_ADAPTER *ioc = hd->ioc;
3246 return snprintf(buf, PAGE_SIZE, "%s\n", ioc->board_assembly);
3257 MPT_ADAPTER *ioc = hd->ioc;
3259 return snprintf(buf, PAGE_SIZE, "%s\n", ioc->board_tracer);
3270 MPT_ADAPTER *ioc = hd->ioc;
3272 return snprintf(buf, PAGE_SIZE, "%02d\n", ioc->io_missing_delay);
3283 MPT_ADAPTER *ioc = hd->ioc;
3285 return snprintf(buf, PAGE_SIZE, "%02d\n", ioc->device_missing_delay);
3296 MPT_ADAPTER *ioc = hd->ioc;
3298 return snprintf(buf, PAGE_SIZE, "%08xh\n", ioc->debug_level);
3306 MPT_ADAPTER *ioc = hd->ioc;
3312 ioc->debug_level = val;
3314 ioc->name, ioc->debug_level);