63#ifdef AGTIAPI_EVENT_LOG
66 ptiDevHandle, eventType, eventStatus);
70 AGTIAPI_PRINTK(
"ostiInitiatorEvent: eventType 0x%x eventStatus 0x%x\n", eventType, eventStatus);
92#ifndef HOTPLUG_SUPPORT
114 AGTIAPI_PRINTK(
"tiIntrEventTypeDiscovery - portal %p, status 0x%x\n",
120 ptiPortalContext->
osData, eventStatus);
123#ifndef HOTPLUG_SUPPORT
148 if (eventStatus ==
tiTMOK)
151 AGTIAPI_PRINTK(
"tiIntrEventTypeTaskManagement: pTMccb %p flag %x \n",
159 AGTIAPI_PRINTK(
"tiIntrEventTypeTaskManagement: IO to be aborted locally %p flag %x \n",
160 ccbIO, ccbIO->
flags);
166 AGTIAPI_PRINTK(
"tiIntrEventTypeTaskManagement: Local Abort failed\n");
175 AGTIAPI_PRINTK(
"tiIntrEventTypeTaskManagement: TM failed because IO has been completed! pTMccb %p flag %x \n",
180 AGTIAPI_PRINTK(
"tiIntrEventTypeTaskManagement: TM failed! pTMccb %p flag %x \n",
198 AGTIAPI_PRINTK(
"tiIntrEventTypeLocalAbort: taskTag pccb %p flag %x \n",
205 AGTIAPI_PRINTK(
"tiIntrEventTypeLocalAbort: TM resource unavailable!\n");
224 AGTIAPI_PRINTK(
"tiIntrEventTypeLocalAbort: TM_TARGET_RESET request success ccb %p, pTMccb %p\n",
230 AGTIAPI_PRINTK(
"tiIntrEventTypeLocalAbort: TM_TARGET_RESET request failed ccb %p, pTMccb %p\n",
244 AGTIAPI_PRINTK(
"tiIntrEventTypeLocalAbort: Abort Failed pccb %p\n", pccb);
283 AGTIAPI_IO(
"ostiInitiatorIOCompleted: start\n" );
299 "check condition without sense data!\n" );
303 union ccb *ccb = pccb->
ccb;
304 struct ccb_scsiio *csio = &ccb->csio;
312 csio->sense_resid = 0;
315 pccb->
senseLen - csio->sense_resid );
316 bzero(&csio->sense_data,
sizeof(csio->sense_data));
317 AGTIAPI_PRINTK(
"ostiInitiatorIOCompleted: check condition copying\n");
322 (
bit8 *)&csio->sense_data, sense_len );
327 AGTIAPI_PRINTK(
"ostiInitiatorIOCompleted - aborted ccb %p, flag %x\n",
347 AG_CARD_LOCAL_LOCK(&
pCard->doneLock), pccb);
352#ifdef HIALEAH_ENCRYPTION
366 unsigned char *sas_addr
375 bit8 sas_addr_hi[4], sas_addr_lo[4];
380 sas_addr_hi[i] = sas_addr[3-i];
385 sas_addr_lo[i] = sas_addr[7-i];
394 *(
bit32*)sas_addr_hi,
395 *(
bit32*)sas_addr_lo,
397 if(devHandle !=
NULL)
442 union ccb *ccb = pccb->
ccb;
443 struct ccb_smpio *csmpio = &ccb->smpio;
444 memcpy(csmpio->smp_response, tiFrameHandle, tiSMPInfoLen);
445 csmpio->smp_response_len = tiSMPInfoLen;
446 agtiapi_hexdump(
"ostiInitiatorSMPCompleted: Response Payload in CAM", (
bit8 *)csmpio->smp_response, csmpio->smp_response_len);
450 AG_CARD_LOCAL_LOCK(&
pCard->doneSMPLock), pccb);
467 static int callNum = 0;
473 if ((callNum % CMDS_PER_IO_DUP) != 0)
494 AG_CARD_LOCAL_LOCK(&
pCard->doneLock), pccb);
517 mtx_lock( &
pCard->STLock[queueId] );
537 mtx_unlock( &
pCard->STLock[queueId] );
572#ifdef AGTIAPI_LOCAL_LOCK
573#define OSTI_SPIN_LOCK(lock) spin_lock(lock)
574#define OSTI_SPIN_UNLOCK(lock) spin_unlock(lock)
576#define OSTI_SPIN_LOCK(lock)
577#define OSTI_SPIN_UNLOCK(lock)
587 BUG_ON((io != 0 && io != 1) || (layer != 0 && layer != 1 && layer != 2));
590 unsigned long long cycles = get_cycles();
592 OSTI_SPIN_LOCK(&
pCard->latLock);
593 BUG_ON(
pCard->callLevel[io] >=
sizeof(
pCard->layer[0]) /
594 sizeof(
pCard->layer[0][0]));
595 if (
pCard->callLevel[io] > 0)
597 unsigned int prev_layer =
pCard->layer[io][
pCard->callLevel[io] - 1];
599 pCard->totalCycles[io][prev_layer] += cycles -
600 pCard->enterCycles[io][prev_layer];
602 pCard->enterCycles[io][layer] = cycles;
603 pCard->layer[io][
pCard->callLevel[io]] = layer;
604 pCard->callLevel[io]++;
605 OSTI_SPIN_UNLOCK(&
pCard->latLock);
615 BUG_ON((io != 0 && io != 1) || (layer != 0 && layer != 1 && layer != 2));
618 unsigned long long cycles = get_cycles();
620 OSTI_SPIN_LOCK(&
pCard->latLock);
621 pCard->callLevel[io]--;
623 BUG_ON(
pCard->callLevel[io] < 0);
624 BUG_ON(
pCard->layer[io][
pCard->callLevel[io]] != layer);
626 pCard->totalCycles[io][layer] += cycles -
pCard->enterCycles[io][layer];
627 if (
pCard->callLevel[io] > 0)
630 OSTI_SPIN_UNLOCK(&
pCard->latLock);
673 sbit32 volatile *Destination,
685 sbit32 volatile *Destination,
740 sbit32 volatile *Destination,
750 sbit32 volatile *Destination,
770 AGTIAPI_PRINTK(
"ostiSetDeviceQueueDepth stub only: root%p, req%p, qdeep%d\n",
772 pDevice->qdepth = QueueDepth;
787 AGTIAPI_PRINTK(
"ostiGetSenseKeyCount stub only: rt%p, fcl%d, kyCt%p, ln%d\n",
788 root, fIsClear, SenseKeyCount, length );
794 void *ScsiStatusCount,
798 AGTIAPI_PRINTK(
"ostiGetSCSIStatusCount: stub only rt%p, fcl%d, kyCt%p, ln%d\n",
799 root, fIsClear, ScsiStatusCount, length );
813 void **tiRequestBody,
824 printf(
"ostiNumOfLUNIOCTLreq - GetCCB ERROR\n");
#define SCSI_CHECK_CONDITION
STATIC void agtiapi_FreeTMCCB(struct agtiapi_softc *pmcsc, pccb_t pccb)
STATIC U32 agtiapi_GetDevHandle(struct agtiapi_softc *pCard, ag_portal_info_t *pPortalInfo, U32 eType, U32 eStatus)
STATIC void agtiapi_QueueCCB(struct agtiapi_softc *pmcsc, pccb_t *phead, pccb_t *ptail, ccb_t *pccb)
STATIC pccb_t agtiapi_GetCCB(struct agtiapi_softc *pmcsc)
STATIC void agtiapi_CheckIOTimeout(void *data)
STATIC void agtiapi_Done(struct agtiapi_softc *pmcsc, ccb_t *pccb)
void agtiapi_hexdump(const char *ptitle, bit8 *pbuf, int len)
#define MIN(a, b)
MIN macro.
#define AGTIAPI_DISC_DONE
#define PORTAL_STATUS(pPortalData)
#define AGTIAPI_DISC_COMPLETE
#define AGTIAPI_IO(format, a...)
#define TIROOT_TO_CARD(ptiRoot)
#define AGTIAPI_INIT_TIME
#define AGTIAPI_PRINTK(format, a...)
#define AGTIAPI_PORT_LINK_UP
#define PORTAL_CONTEXT_TO_PORTALDATA(pPortalContext)
struct agtiapi_softc * pCard
U32 ostiChipReadBit32Ext(tiRoot_t *ptiRoot, U32 busBaseNumber, U32 chipOffset)
void ostiSingleThreadedLeave(tiRoot_t *ptiRoot, U32 queueId)
void ostiInitiatorEvent(tiRoot_t *ptiRoot, tiPortalContext_t *ptiPortalContext, tiDeviceHandle_t *ptiDevHandle, tiIntrEventType_t eventType, U32 eventStatus, void *parm)
osGLOBAL bit32 ostiSetDeviceQueueDepth(tiRoot_t *tiRoot, tiIORequest_t *tiIORequest, bit32 QueueDepth)
osGLOBAL FORCEINLINE sbit32 ostiInterlockedAnd(tiRoot_t *root, sbit32 volatile *Destination, sbit32 Value)
osGLOBAL void ostiGetSCSIStatusCount(tiRoot_t *root, bit32 fIsClear, void *ScsiStatusCount, bit32 length)
void ostiInitiatorSMPCompleted(tiRoot_t *ptiRoot, tiIORequest_t *ptiSMPRequest, tiSMPStatus_t smpStatus, bit32 tiSMPInfoLen, void *tiFrameHandle, bit32 context)
osGLOBAL FORCEINLINE sbit32 ostiInterlockedDecrement(tiRoot_t *root, sbit32 volatile *Addend)
osGLOBAL bit32 ostiNumOfLUNIOCTLreq(tiRoot_t *root, void *param1, void *param2, void **tiRequestBody, tiIORequest_t **tiIORequest)
osGLOBAL tiDeviceHandle_t * ostiMapToDevHandle(tiRoot_t *root, bit8 pathId, bit8 targetId, bit8 LUN)
osGLOBAL void ostiPCI_TRIGGER(tiRoot_t *tiRoot)
osGLOBAL FORCEINLINE sbit32 ostiInterlockedOr(tiRoot_t *root, sbit32 volatile *Destination, sbit32 Value)
osGLOBAL FORCEINLINE sbit32 ostiInterlockedExchange(tiRoot_t *root, sbit32 volatile *Target, sbit32 Value)
osGLOBAL tiDeviceHandle_t * ostiGetDevHandleFromSasAddr(tiRoot_t *root, unsigned char *sas_addr)
void ostiInitiatorIOCompleted(tiRoot_t *ptiRoot, tiIORequest_t *ptiIORequest, tiIOStatus_t IOStatus, U32 statusDetail, tiSenseData_t *pSenseData, U32 context)
osGLOBAL FORCEINLINE bit8 ostiBitScanForward(tiRoot_t *root, bit32 *Index, bit32 Mask)
void ostiSingleThreadedEnter(tiRoot_t *ptiRoot, U32 queueId)
osGLOBAL void ostiGetSenseKeyCount(tiRoot_t *root, bit32 fIsClear, void *SenseKeyCount, bit32 length)
osGLOBAL FORCEINLINE sbit32 ostiInterlockedIncrement(tiRoot_t *root, sbit32 volatile *Addend)
osGLOBAL FORCEINLINE void ostidisableEncryption(tiRoot_t *root)
#define OSTI_OUT_ENTER(root)
#define OSTI_OUT_LEAVE(root)
struct agtiapi_softc * pmcsc
tiSuperScsiInitiatorRequest_t tiSuperScsiRequest
tiDeviceHandle_t * devHandle
tdIORequestBody_t tdIOReqBody
tiIORequest_t tiIORequest
tiDeviceHandle_t * pDevHandle
ag_portal_info_t portalInfo
tiPortalContext_t tiPortalContext
ag_portal_data_t * pPortalData
osGLOBAL tiDeviceHandle_t * tiINIGetExpDeviceHandleBySasAddress(tiRoot_t *tiRoot, tiPortalContext_t *tiPortalContext, bit32 sas_addr_hi, bit32 sas_addr_lo, bit32 maxDevs)
osGLOBAL bit32 tiINITaskManagement(tiRoot_t *tiRoot, tiDeviceHandle_t *tiDeviceHandle, bit32 task, tiLUN_t *lun, tiIORequest_t *taskTag, tiIORequest_t *currentTaskTag)
osGLOBAL bit32 tiINIIOAbort(tiRoot_t *tiRoot, tiIORequest_t *taskTag)
@ tiIntrEventTypeLocalAbort
@ tiIntrEventTypeTransportRecovery
@ tiIntrEventTypeDeviceChange
@ tiIntrEventTypeCnxError
@ tiIntrEventTypeDiscovery
@ tiIntrEventTypeTaskManagement
#define IOCTL_CALL_SUCCESS
#define AG_TARGET_WARM_RESET