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,
126 * @ioc: Pointer to MPT_ADAPTER structure
132 mptscsih_getFreeChainBuffer(MPT_ADAPTER *ioc, int *retIndex)
139 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT "getFreeChainBuffer called\n",
140 ioc->name));
141 spin_lock_irqsave(&ioc->FreeQlock, flags);
142 if (!list_empty(&ioc->FreeChainQ)) {
145 chainBuf = list_entry(ioc->FreeChainQ.next, MPT_FRAME_HDR,
148 offset = (u8 *)chainBuf - (u8 *)ioc->ChainBuffer;
149 chain_idx = offset / ioc->req_sz;
151 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT
153 ioc->name, chainBuf, ioc->ChainBuffer, offset, chain_idx));
157 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT "getFreeChainBuffer failed\n",
158 ioc->name));
160 spin_unlock_irqrestore(&ioc->FreeQlock, flags);
170 * @ioc: Pointer to MPT_ADAPTER structure
177 mptscsih_AddSGE(MPT_ADAPTER *ioc, struct scsi_cmnd *SCpnt,
203 frm_sz = ioc->req_sz;
226 numSgeSlots = ((frm_sz - sgeOffset) / ioc->SGE_size);
245 ioc->add_sge(psge, sgflags | thisxfer, v2);
249 psge += ioc->SGE_size;
250 sgeOffset += ioc->SGE_size;
267 ioc->add_sge(psge, sgflags | thisxfer, v2);
268 sgeOffset += ioc->SGE_size;
277 ioc->add_chain((char *)chainSge, 0, sgeOffset,
278 ioc->ChainBufferDMA + chain_dma_off);
284 RequestNB = (((sgeOffset - 1) >> ioc->NBShiftFactor) + 1) & 0x03;
285 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT
286 "Single Buffer RequestNB=%x, sgeOffset=%d\n", ioc->name, RequestNB, sgeOffset));
287 ioc->RequestNB[req_idx] = RequestNB;
301 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT "SG: Chain Required! sg done %d\n",
302 ioc->name, sg_done));
311 u32 *ptmp = (u32 *) (psge - ioc->SGE_size);
325 sgeOffset += ioc->SGE_size;
326 ioc->add_chain((char *)chainSge, nextChain, sgeOffset,
327 ioc->ChainBufferDMA + chain_dma_off);
334 RequestNB = (((sgeOffset - 1) >> ioc->NBShiftFactor) + 1) & 0x03;
335 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Chain Buffer Needed, RequestNB=%x sgeOffset=%d\n", ioc->name, RequestNB, sgeOffset));
336 ioc->RequestNB[req_idx] = RequestNB;
345 if ((mptscsih_getFreeChainBuffer(ioc, &newIndex)) == FAILED) {
346 dfailprintk(ioc, printk(MYIOC_s_DEBUG_FMT
348 ioc->name, pReq->CDB[0], SCpnt));
356 ioc->ChainToChain[chain_idx] = newIndex;
358 ioc->ReqToChain[req_idx] = newIndex;
361 chain_dma_off = ioc->req_sz * chain_idx;
368 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT " Current buff @ %p (index 0x%x)",
369 ioc->name, psge, req_idx));
373 psge = (char *) (ioc->ChainBuffer + chain_dma_off);
377 dsgprintk(ioc, printk(MYIOC_s_DEBUG_FMT " Chain buff @ %p (index 0x%x)\n",
378 ioc->name, psge, chain_idx));
390 mptscsih_issue_sep_command(MPT_ADAPTER *ioc, VirtTarget *vtarget,
396 if (ioc->bus_type != SAS)
404 if ((mf = mpt_get_msg_frame(ioc->InternalCtx, ioc)) == NULL) {
405 dfailprintk(ioc, printk(MYIOC_s_WARN_FMT "%s: no msg frames!!\n",
406 ioc->name,__func__));
416 devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT
418 ioc->name, SlotStatus, SEPMsg->Bus, SEPMsg->TargetID));
419 mpt_put_msg_frame(ioc->DoneCtx, ioc, mf);
425 * @ioc: Pointer to MPT_ADAPTER structure
434 mptscsih_info_scsiio(MPT_ADAPTER *ioc, struct scsi_cmnd *sc, SCSIIOReply_t * pScsiReply)
538 ioc->name, pScsiReply->Bus, pScsiReply->TargetID, sc->device->lun);
540 "resid = %d\n", ioc->name, scsi_bufflen(sc), sc->underflow,
543 "sc->result = %08X\n", ioc->name, le16_to_cpu(pScsiReply->TaskTag),
548 ioc->name, desc, ioc_status, desc1, pScsiReply->SCSIStatus,
557 "[0x%02x,0x%02x,0x%02x]\n", ioc->name, skey, asc, ascq);
566 ioc->name, le32_to_cpu(pScsiReply->ResponseInfo));
574 * @ioc: Pointer to MPT_ADAPTER structure
586 mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
596 hd = shost_priv(ioc->sh);
609 sc = mptscsih_getclear_scsi_lookup(ioc, req_idx);
619 ioc->name);
621 mptscsih_freeChainBuffers(ioc, req_idx);
626 mptscsih_freeChainBuffers(ioc, req_idx);
630 if (ioc->bus_type == SAS) {
645 if((ioc->facts.MsgVersion >= MPI_VERSION_01_05) && pScsiReply){
646 dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT
648 ioc->name, mf, mr, sc, req_idx, pScsiReply->TaskTag));
650 dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT
652 ioc->name, mf, mr, sc, req_idx));
694 "FCP_ResponseInfo=%08xh\n", ioc->name,
718 if (ioc->bus_type != FC)
732 mptscsih_issue_sep_command(ioc, vtarget,
739 if ( ioc->bus_type == SAS ) {
771 } 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) {
869 dreplyprintk(ioc, printk(MYIOC_s_DEBUG_FMT
871 ioc->name, sc->underflow));
872 dreplyprintk(ioc, printk(MYIOC_s_DEBUG_FMT
873 " ActBytesXferd=%02xh\n", ioc->name, xfer_cnt));
901 if ((ioc->bus_type == SPI) &&
1003 if (sc->result && (ioc->debug_level & MPT_DEBUG_REPLY))
1004 mptscsih_info_scsiio(ioc, sc, pScsiReply);
1015 mptscsih_freeChainBuffers(ioc, req_idx);
1032 MPT_ADAPTER *ioc = hd->ioc;
1038 for (ii= 0; ii < ioc->req_depth; ii++) {
1039 sc = mptscsih_getclear_scsi_lookup(ioc, ii);
1042 mf = (SCSIIORequest_t *)MPT_INDEX_2_MFPTR(ioc, ii);
1047 mptscsih_freeChainBuffers(ioc, ii);
1048 mpt_free_msg_frame(ioc, (MPT_FRAME_HDR *)mf);
1054 dtmprintk(ioc, sdev_printk(KERN_INFO, sc->device, MYIOC_s_FMT
1056 "idx=%x\n", ioc->name, channel, id, sc, mf, ii));
1083 MPT_ADAPTER *ioc = hd->ioc;
1086 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
1087 for (ii = 0; ii < ioc->req_depth; ii++) {
1088 if ((sc = ioc->ScsiLookup[ii]) != NULL) {
1090 mf = (SCSIIORequest_t *)MPT_INDEX_2_MFPTR(ioc, ii);
1109 ioc->ScsiLookup[ii] = NULL;
1110 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
1111 mptscsih_freeChainBuffers(ioc, ii);
1112 mpt_free_msg_frame(ioc, (MPT_FRAME_HDR *)mf);
1116 dtmprintk(ioc, sdev_printk(KERN_INFO, sc->device,
1118 "fw_id %d, sc=%p, mf = %p, idx=%x\n", ioc->name,
1122 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
1125 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
1148 MPT_ADAPTER *ioc;
1156 ioc = hd->ioc;
1158 dprintk(ioc, printk(MYIOC_s_WARN_FMT "Device (%d:%d:%llu) reported QUEUE_FULL!\n",
1159 ioc->name, 0, sc->device->id, sc->device->lun));
1174 MPT_ADAPTER *ioc = pci_get_drvdata(pdev);
1175 struct Scsi_Host *host = ioc->sh;
1188 if (ioc->ScsiLookup != NULL) {
1189 sz1 = ioc->req_depth * sizeof(void *);
1190 kfree(ioc->ScsiLookup);
1191 ioc->ScsiLookup = NULL;
1194 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT
1196 ioc->name, sz1));
1203 ioc->sh = NULL;
1231 MPT_ADAPTER *ioc = pci_get_drvdata(pdev);
1233 scsi_block_requests(ioc->sh);
1248 MPT_ADAPTER *ioc = pci_get_drvdata(pdev);
1252 scsi_unblock_requests(ioc->sh);
1280 mpt_print_ioc_summary(h->ioc, h->info_kbuf, &size, 0, 0);
1289 MPT_ADAPTER *ioc = hd->ioc;
1291 seq_printf(m, "%s: %s, ", ioc->name, ioc->prod_name);
1292 seq_printf(m, "%s%08xh, ", MPT_FW_REV_MAGIC_ID_STRING, ioc->facts.FWVersion.Word);
1293 seq_printf(m, "Ports=%d, ", ioc->facts.NumberOfPorts);
1294 seq_printf(m, "MaxQ=%d\n", ioc->req_depth);
1326 MPT_ADAPTER *ioc;
1329 ioc = hd->ioc;
1331 dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "qcmd: SCpnt=%p\n",
1332 ioc->name, SCpnt));
1334 if (ioc->taskmgmt_quiesce_io)
1340 if ((mf = mpt_get_msg_frame(ioc->DoneCtx, ioc)) == NULL) {
1341 dprintk(ioc, printk(MYIOC_s_WARN_FMT "QueueCmd, no msg frames!!\n",
1342 ioc->name));
1358 scsidir = MPI_SCSIIO_CONTROL_READ; /* DATA IN (host<--ioc<--dev) */
1361 scsidir = MPI_SCSIIO_CONTROL_WRITE; /* DATA OUT (host-->ioc-->dev) */
1389 pScsiReq->MsgFlags = mpt_msg_flags(ioc);
1407 pScsiReq->SenseBufferLowAddr = cpu_to_le32(ioc->sense_buf_low_dma
1415 ioc->add_sge((char *)&pScsiReq->SGL,
1420 if (mptscsih_AddSGE(ioc, SCpnt, pScsiReq, my_idx) != SUCCESS)
1425 mptscsih_set_scsi_lookup(ioc, my_idx, SCpnt);
1427 mpt_put_msg_frame(ioc->DoneCtx, ioc, mf);
1428 dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Issued SCSI cmd (%p) mf=%p idx=%d\n",
1429 ioc->name, SCpnt, mf, my_idx));
1430 DBG_DUMP_REQUEST_FRAME(ioc, (u32 *)mf);
1434 mptscsih_freeChainBuffers(ioc, my_idx);
1435 mpt_free_msg_frame(ioc, mf);
1450 mptscsih_freeChainBuffers(MPT_ADAPTER *ioc, int req_idx)
1460 chain_idx = ioc->ReqToChain[req_idx];
1461 ioc->ReqToChain[req_idx] = MPT_HOST_NO_CHAIN;
1466 next = ioc->ChainToChain[chain_idx];
1471 ioc->ChainToChain[chain_idx] = MPT_HOST_NO_CHAIN;
1473 chain = (MPT_FRAME_HDR *) (ioc->ChainBuffer
1474 + (chain_idx * ioc->req_sz));
1476 spin_lock_irqsave(&ioc->FreeQlock, flags);
1477 list_add_tail(&chain->u.frame.linkage.list, &ioc->FreeChainQ);
1478 spin_unlock_irqrestore(&ioc->FreeQlock, flags);
1480 dmfprintk(ioc, printk(MYIOC_s_DEBUG_FMT "FreeChainBuffers (index %d)\n",
1481 ioc->name, chain_idx));
1521 MPT_ADAPTER *ioc = hd->ioc;
1527 ioc_raw_state = mpt_GetIocState(ioc, 0);
1532 ioc->name, type, ioc_raw_state);
1534 ioc->name, __func__);
1535 if (mpt_HardResetHandler(ioc, CAN_SLEEP) < 0)
1537 "FAILED!!\n", ioc->name);
1545 if (!((ioc->facts.IOCCapabilities & MPI_IOCFACTS_CAPABILITY_HIGH_PRI_Q)
1546 && (ioc->facts.MsgVersion >= MPI_VERSION_01_05)) &&
1551 ioc->name, type, ioc_raw_state);
1555 mutex_lock(&ioc->taskmgmt_cmds.mutex);
1556 if (mpt_set_taskmgmt_in_progress_flag(ioc) != 0) {
1564 if ((mf = mpt_get_msg_frame(ioc->TaskCtx, ioc)) == NULL) {
1565 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
1566 "TaskMgmt no msg frames!!\n", ioc->name));
1568 mpt_clear_taskmgmt_in_progress_flag(ioc);
1571 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "TaskMgmt request (mf=%p)\n",
1572 ioc->name, mf));
1595 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "TaskMgmt: ctx2abort (0x%08x) "
1596 "task_type = 0x%02X, timeout = %ld\n", ioc->name, ctx2abort,
1599 DBG_DUMP_TM_REQUEST_FRAME(ioc, (u32 *)pScsiTm);
1601 INITIALIZE_MGMT_STATUS(ioc->taskmgmt_cmds.status)
1603 if ((ioc->facts.IOCCapabilities & MPI_IOCFACTS_CAPABILITY_HIGH_PRI_Q) &&
1604 (ioc->facts.MsgVersion >= MPI_VERSION_01_05))
1605 mpt_put_msg_frame_hi_pri(ioc->TaskCtx, ioc, mf);
1607 retval = mpt_send_handshake_request(ioc->TaskCtx, ioc,
1610 dfailprintk(ioc, printk(MYIOC_s_ERR_FMT
1612 ioc->name, mf, retval));
1613 mpt_free_msg_frame(ioc, mf);
1614 mpt_clear_taskmgmt_in_progress_flag(ioc);
1619 wait_for_completion_timeout(&ioc->taskmgmt_cmds.done,
1621 if (!(ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_COMMAND_GOOD)) {
1623 dtmprintk(ioc, printk(MYIOC_s_ERR_FMT
1624 "TaskMgmt TIMED OUT!(mf=%p)\n", ioc->name, mf));
1625 mpt_clear_taskmgmt_in_progress_flag(ioc);
1626 if (ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_DID_IOCRESET)
1632 retval = mptscsih_taskmgmt_reply(ioc, type,
1633 (SCSITaskMgmtReply_t *) ioc->taskmgmt_cmds.reply);
1635 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
1637 ioc->name, jiffies_to_msecs(jiffies - time_count)/1000));
1641 CLEAR_MGMT_STATUS(ioc->taskmgmt_cmds.status)
1645 ioc->name, __func__, mpt_GetIocState(ioc, 0));
1646 retval = (ioc->bus_type == SAS) ?
1647 mpt_HardResetHandler(ioc, CAN_SLEEP) :
1648 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP);
1649 mpt_free_msg_frame(ioc, mf);
1653 mutex_unlock(&ioc->taskmgmt_cmds.mutex);
1659 mptscsih_get_tm_timeout(MPT_ADAPTER *ioc)
1661 switch (ioc->bus_type) {
1690 MPT_ADAPTER *ioc;
1702 ioc = hd->ioc;
1704 ioc->name, SCpnt);
1709 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
1711 ioc->name, SCpnt));
1721 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
1723 ioc->name, SCpnt));
1732 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
1734 ioc->name, SCpnt));
1742 if ((scpnt_idx = SCPNT_TO_LOOKUP_IDX(ioc, SCpnt)) < 0) {
1747 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT "task abort: "
1748 "Command not in the active list! (sc=%p)\n", ioc->name,
1754 if (ioc->timeouts < -1)
1755 ioc->timeouts++;
1758 mpt_halt_firmware(ioc);
1767 mf = MPT_INDEX_2_MFPTR(ioc, scpnt_idx);
1773 ctx2abort, mptscsih_get_tm_timeout(ioc));
1775 if (SCPNT_TO_LOOKUP_IDX(ioc, SCpnt) == scpnt_idx) {
1776 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
1778 ioc->name, SCpnt));
1781 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
1783 ioc->name, SCpnt));
1789 ioc->name, ((retval == SUCCESS) ? "SUCCESS" : "FAILED"), retval,
1810 MPT_ADAPTER *ioc;
1820 ioc = hd->ioc;
1822 ioc->name, SCpnt);
1842 mptscsih_get_tm_timeout(ioc));
1846 ioc->name, ((retval == 0) ? "SUCCESS" : "FAILED" ), SCpnt);
1870 MPT_ADAPTER *ioc;
1880 ioc = hd->ioc;
1882 ioc->name, SCpnt);
1885 if (ioc->timeouts < -1)
1886 ioc->timeouts++;
1894 mptscsih_get_tm_timeout(ioc));
1897 ioc->name, ((retval == 0) ? "SUCCESS" : "FAILED" ), SCpnt);
1919 MPT_ADAPTER *ioc;
1932 ioc = hd->ioc;
1934 ioc->name, SCpnt);
1939 retval = mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP);
1946 ioc->name, ((retval == 0) ? "SUCCESS" : "FAILED" ), SCpnt);
1952 mptscsih_taskmgmt_reply(MPT_ADAPTER *ioc, u8 type,
1959 if (!(ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_RF_VALID)) {
1964 DBG_DUMP_TM_REPLY_FRAME(ioc, (u32 *)pScsiTmReply);
1969 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
1972 "\tterm_cmnds = %d\n", ioc->name, pScsiTmReply->Bus,
1977 if (ioc->facts.MsgVersion >= MPI_VERSION_01_05 &&
1979 mptscsih_taskmgmt_response_code(ioc,
2004 mptscsih_taskmgmt_response_code(MPT_ADAPTER *ioc, u8 response_code)
2035 ioc->name, response_code, desc);
2042 * @ioc: Pointer to MPT_ADAPTER structure
2054 mptscsih_taskmgmt_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf,
2057 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2058 "TaskMgmt completed (mf=%p, mr=%p)\n", ioc->name, mf, mr));
2060 ioc->taskmgmt_cmds.status |= MPT_MGMT_STATUS_COMMAND_GOOD;
2065 ioc->taskmgmt_cmds.status |= MPT_MGMT_STATUS_RF_VALID;
2066 memcpy(ioc->taskmgmt_cmds.reply, mr,
2069 if (ioc->taskmgmt_cmds.status & MPT_MGMT_STATUS_PENDING) {
2070 mpt_clear_taskmgmt_in_progress_flag(ioc);
2071 ioc->taskmgmt_cmds.status &= ~MPT_MGMT_STATUS_PENDING;
2072 complete(&ioc->taskmgmt_cmds.done);
2073 if (ioc->bus_type == SAS)
2074 ioc->schedule_target_reset(ioc);
2124 mptscsih_is_phys_disk(MPT_ADAPTER *ioc, u8 channel, u8 id)
2132 if (!ioc->raid_data.pIocPg3)
2134 for (i = 0; i < ioc->raid_data.pIocPg3->NumPhysDisks; i++) {
2135 if ((id == ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskID) &&
2136 (channel == ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskBus)) {
2142 if (ioc->bus_type != SAS)
2148 for (i = 0; i < ioc->raid_data.pIocPg3->NumPhysDisks; i++) {
2149 num_paths = mpt_raid_phys_disk_get_num_paths(ioc,
2150 ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskNum);
2157 if ((mpt_raid_phys_disk_pg1(ioc,
2158 ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskNum,
2184 if (list_empty(&ioc->raid_data.inactive_list))
2187 mutex_lock(&ioc->raid_data.inactive_list_mutex);
2188 list_for_each_entry(component_info, &ioc->raid_data.inactive_list,
2194 mutex_unlock(&ioc->raid_data.inactive_list_mutex);
2202 mptscsih_raid_id_to_num(MPT_ADAPTER *ioc, u8 channel, u8 id)
2210 if (!ioc->raid_data.pIocPg3)
2212 for (i = 0; i < ioc->raid_data.pIocPg3->NumPhysDisks; i++) {
2213 if ((id == ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskID) &&
2214 (channel == ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskBus)) {
2215 rc = ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskNum;
2220 if (ioc->bus_type != SAS)
2226 for (i = 0; i < ioc->raid_data.pIocPg3->NumPhysDisks; i++) {
2227 num_paths = mpt_raid_phys_disk_get_num_paths(ioc,
2228 ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskNum);
2235 if ((mpt_raid_phys_disk_pg1(ioc,
2236 ioc->raid_data.pIocPg3->PhysDisk[i].PhysDiskNum,
2261 if (list_empty(&ioc->raid_data.inactive_list))
2264 mutex_lock(&ioc->raid_data.inactive_list_mutex);
2265 list_for_each_entry(component_info, &ioc->raid_data.inactive_list,
2271 mutex_unlock(&ioc->raid_data.inactive_list_mutex);
2319 MPT_ADAPTER *ioc = hd->ioc;
2324 if (ioc->bus_type == SPI) {
2333 max_depth = ioc->sh->can_queue;
2358 MPT_ADAPTER *ioc = hd->ioc;
2364 dsprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2366 ioc->name, sdev, sdev->channel, sdev->id, sdev->lun));
2367 if (ioc->bus_type == SPI)
2368 dsprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2370 ioc->name, sdev->sdtr, sdev->wdtr,
2375 dsprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2377 ioc->name, sdev->queue_depth, vtarget->tflags));
2379 if (ioc->bus_type == SPI)
2380 dsprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2382 ioc->name, vtarget->negoFlags, vtarget->maxOffset,
2386 dsprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2388 ioc->name,sdev->tagged_supported, sdev->simple_tags));
2411 MPT_ADAPTER *ioc = hd->ioc;
2424 sense_data = ((u8 *)ioc->sense_buf_pool + (req_index * MPT_SENSE_BUFFER_ALLOC));
2429 if ((ioc->events) && (ioc->eventTypes & (1 << MPI_EVENT_SCSI_DEVICE_STATUS_CHANGE))) {
2433 idx = ioc->eventContext % MPTCTL_EVENT_LOG_SIZE;
2434 ioc->events[idx].event = MPI_EVENT_SCSI_DEVICE_STATUS_CHANGE;
2435 ioc->events[idx].eventContext = ioc->eventContext;
2437 ioc->events[idx].data[0] = (pReq->LUN[1] << 24) |
2441 ioc->events[idx].data[1] = (sense_data[13] << 8) | sense_data[12];
2443 ioc->eventContext++;
2444 if (ioc->pcidev->vendor ==
2446 mptscsih_issue_sep_command(ioc,
2454 dprintk(ioc, printk(MYIOC_s_DEBUG_FMT "Hmmm... SenseData len=0! (?)\n",
2455 ioc->name));
2461 * @ioc: Pointer to MPT_ADAPTER structure
2467 mptscsih_get_scsi_lookup(MPT_ADAPTER *ioc, int i)
2472 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
2473 scmd = ioc->ScsiLookup[i];
2474 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
2482 * @ioc: Pointer to MPT_ADAPTER structure
2489 mptscsih_getclear_scsi_lookup(MPT_ADAPTER *ioc, int i)
2494 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
2495 scmd = ioc->ScsiLookup[i];
2496 ioc->ScsiLookup[i] = NULL;
2497 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
2505 * @ioc: Pointer to MPT_ADAPTER structure
2511 mptscsih_set_scsi_lookup(MPT_ADAPTER *ioc, int i, struct scsi_cmnd *scmd)
2515 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
2516 ioc->ScsiLookup[i] = scmd;
2517 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
2522 * @ioc: Pointer to MPT_ADAPTER structure
2526 SCPNT_TO_LOOKUP_IDX(MPT_ADAPTER *ioc, struct scsi_cmnd *sc)
2531 spin_lock_irqsave(&ioc->scsi_lookup_lock, flags);
2532 for (i = 0; i < ioc->req_depth; i++) {
2533 if (ioc->ScsiLookup[i] == sc) {
2540 spin_unlock_irqrestore(&ioc->scsi_lookup_lock, flags);
2546 mptscsih_ioc_reset(MPT_ADAPTER *ioc, int reset_phase)
2550 if (ioc->sh == NULL || shost_priv(ioc->sh) == NULL)
2553 hd = shost_priv(ioc->sh);
2556 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2557 "%s: MPT_IOC_SETUP_RESET\n", ioc->name, __func__));
2560 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2561 "%s: MPT_IOC_PRE_RESET\n", ioc->name, __func__));
2565 dtmprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2566 "%s: MPT_IOC_POST_RESET\n", ioc->name, __func__));
2567 if (ioc->internal_cmds.status & MPT_MGMT_STATUS_PENDING) {
2568 ioc->internal_cmds.status |=
2570 complete(&ioc->internal_cmds.done);
2581 mptscsih_event_process(MPT_ADAPTER *ioc, EventNotificationReply_t *pEvReply)
2585 devtverboseprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2587 ioc->name, event));
2591 (ioc->bus_type == SPI) && (ioc->soft_resets < -1))
2592 ioc->soft_resets++;
2607 * @ioc: Pointer to MPT_ADAPTER structure
2623 mptscsih_scandv_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req,
2633 ioc->internal_cmds.status |= MPT_MGMT_STATUS_COMMAND_GOOD;
2634 ioc->internal_cmds.completion_code = MPT_SCANDV_GOOD;
2640 ioc->internal_cmds.completion_code =
2641 mptscsih_get_completion_code(ioc, req, reply);
2642 ioc->internal_cmds.status |= MPT_MGMT_STATUS_RF_VALID;
2643 memcpy(ioc->internal_cmds.reply, reply,
2650 sense_data = ((u8 *)ioc->sense_buf_pool +
2654 memcpy(ioc->internal_cmds.sense, sense_data, sz);
2657 if (!(ioc->internal_cmds.status & MPT_MGMT_STATUS_PENDING))
2659 ioc->internal_cmds.status &= ~MPT_MGMT_STATUS_PENDING;
2660 complete(&ioc->internal_cmds.done);
2667 * @ioc: Pointer to MPT_ADAPTER structure
2673 mptscsih_get_completion_code(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req,
2686 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2688 "IOCLogInfo=%08xh\n", ioc->name, status, pReply->SCSIState,
2750 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2751 " completionCode set to %08xh\n", ioc->name, completion_code));
2785 MPT_ADAPTER *ioc = hd->ioc;
2791 spin_lock_irqsave(&ioc->taskmgmt_lock, flags);
2792 if (ioc->ioc_reset_in_progress) {
2793 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags);
2794 dfailprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2795 "%s: busy with host reset\n", ioc->name, __func__));
2798 spin_unlock_irqrestore(&ioc->taskmgmt_lock, flags);
2800 mutex_lock(&ioc->internal_cmds.mutex);
2900 if ((mf = mpt_get_msg_frame(ioc->InternalCtx, ioc)) == NULL) {
2901 dfailprintk(ioc, printk(MYIOC_s_WARN_FMT "%s: No msg frames!\n",
2902 ioc->name, __func__));
2930 pScsiReq->MsgFlags = mpt_msg_flags(ioc);
2942 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2943 "%s: Untagged! 0x%02x\n", ioc->name, __func__, cmd));
2950 pScsiReq->SenseBufferLowAddr = cpu_to_le32(ioc->sense_buf_low_dma
2953 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2955 ioc->name, __func__, cmd, io->channel, io->id, io->lun));
2958 ioc->add_sge((char *) &pScsiReq->SGL,
2961 ioc->add_sge((char *) &pScsiReq->SGL,
2964 INITIALIZE_MGMT_STATUS(ioc->internal_cmds.status)
2965 mpt_put_msg_frame(ioc->InternalCtx, ioc, mf);
2966 timeleft = wait_for_completion_timeout(&ioc->internal_cmds.done,
2968 if (!(ioc->internal_cmds.status & MPT_MGMT_STATUS_COMMAND_GOOD)) {
2970 dfailprintk(ioc, printk(MYIOC_s_DEBUG_FMT
2971 "%s: TIMED OUT for cmd=0x%02x\n", ioc->name, __func__,
2973 if (ioc->internal_cmds.status & MPT_MGMT_STATUS_DID_IOCRESET) {
2974 mpt_free_msg_frame(ioc, mf);
2981 ioc->name, __func__, mpt_GetIocState(ioc, 0),
2983 mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP);
2984 mpt_free_msg_frame(ioc, mf);
2989 ret = ioc->internal_cmds.completion_code;
2990 devtprintk(ioc, printk(MYIOC_s_DEBUG_FMT "%s: success, rc=0x%02x\n",
2991 ioc->name, __func__, ret));
2994 CLEAR_MGMT_STATUS(ioc->internal_cmds.status)
2995 mutex_unlock(&ioc->internal_cmds.mutex);
3047 MPT_ADAPTER *ioc = hd->ioc;
3050 (ioc->facts.FWVersion.Word & 0xFF000000) >> 24,
3051 (ioc->facts.FWVersion.Word & 0x00FF0000) >> 16,
3052 (ioc->facts.FWVersion.Word & 0x0000FF00) >> 8,
3053 ioc->facts.FWVersion.Word & 0x000000FF);
3063 MPT_ADAPTER *ioc = hd->ioc;
3066 (ioc->biosVersion & 0xFF000000) >> 24,
3067 (ioc->biosVersion & 0x00FF0000) >> 16,
3068 (ioc->biosVersion & 0x0000FF00) >> 8,
3069 ioc->biosVersion & 0x000000FF);
3079 MPT_ADAPTER *ioc = hd->ioc;
3081 return snprintf(buf, PAGE_SIZE, "%03x\n", ioc->facts.MsgVersion);
3092 MPT_ADAPTER *ioc = hd->ioc;
3094 return snprintf(buf, PAGE_SIZE, "%s\n", ioc->prod_name);
3106 MPT_ADAPTER *ioc = hd->ioc;
3109 ioc->nvdata_version_persistent);
3120 MPT_ADAPTER *ioc = hd->ioc;
3122 return snprintf(buf, PAGE_SIZE, "%02xh\n",ioc->nvdata_version_default);
3133 MPT_ADAPTER *ioc = hd->ioc;
3135 return snprintf(buf, PAGE_SIZE, "%s\n", ioc->board_name);
3145 MPT_ADAPTER *ioc = hd->ioc;
3147 return snprintf(buf, PAGE_SIZE, "%s\n", ioc->board_assembly);
3158 MPT_ADAPTER *ioc = hd->ioc;
3160 return snprintf(buf, PAGE_SIZE, "%s\n", ioc->board_tracer);
3171 MPT_ADAPTER *ioc = hd->ioc;
3173 return snprintf(buf, PAGE_SIZE, "%02d\n", ioc->io_missing_delay);
3184 MPT_ADAPTER *ioc = hd->ioc;
3186 return snprintf(buf, PAGE_SIZE, "%02d\n", ioc->device_missing_delay);
3197 MPT_ADAPTER *ioc = hd->ioc;
3199 return snprintf(buf, PAGE_SIZE, "%08xh\n", ioc->debug_level);
3207 MPT_ADAPTER *ioc = hd->ioc;
3213 ioc->debug_level = val;
3215 ioc->name, ioc->debug_level);