33#ifdef SA_ENABLE_TRACE_FUNCTIONS
37#define siTraceFileID 'N'
84 SA_DBG4((
"saSMPStart: start\n"));
100 SA_DBG1((
"saSMPStart : saRoot is NULL!!\n"));
113 SA_DBG1((
"saSMPStart, Device has been removed. agDevHandle=%p\n", agDevHandle));
120 pPort = pDevice->
pPort;
135 SA_DBG1((
"saSMPStart, using saRoot->freeReservedRequests\n"));
140 SA_DBG1((
"saSMPStart, No request from free list Not using saRoot->freeReservedRequests\n"));
166 pRequest->
pPort = pPort;
172 agIORequest->
sdkData = pRequest;
178#ifdef SA_LL_IBQ_PROTECT
189#ifdef SA_LL_IBQ_PROTECT
199 SA_DBG1((
"saSMPStart, error when get free IOMB\n"));
207#ifdef SA_LL_IBQ_PROTECT
217 SA_DBG1((
"saSMPStart, no more IOMB\n"));
227#if defined(SALLSDK_DEBUG)
253 SA_DBG2((
"saSMPStart: flag 0x%08X\n",pSMPFrame->
flag));
260 switch ( agRequestType )
264 bit32 IR_IP_OV_res_phyId_DPdLen_res = 0;
282 IR_IP_OV_res_phyId_DPdLen_res = 1;
286#ifdef SA_LL_IBQ_PROTECT
296 SA_DBG1((
"saSMPStart, outFrameLen > 32 bytes error.\n"));
309 SA_DBG4((
"saSMPStart: DIRECT Request SMP\n"));
311 IR_IP_OV_res_phyId_DPdLen_res = (
DIRECT_MODE << 1) | IR_IP_OV_res_phyId_DPdLen_res;
320 SA_DBG4((
"saSMPStart: payload.SMPCmd[%d] %x\n", i, payload.
SMPCmd[i]));
325 SA_DBG4((
"saSMPStart: INDIRECT Request SMP\n"));
327 IR_IP_OV_res_phyId_DPdLen_res = (
INDIRECT_MODE << 1) | IR_IP_OV_res_phyId_DPdLen_res;
330 IR_IP_OV_res_phyId_DPdLen_res = IR_IP_OV_res_phyId_DPdLen_res & 0xff00ffff;
338 OSSA_WRITE_LE_32(agRoot, &payload,
OSSA_OFFSET_OF(
agsaSMPCmd_t, IR_IP_OV_res_phyId_DPdLen_res), IR_IP_OV_res_phyId_DPdLen_res);
350 payload_ptr = (
bit8 *)&payload;
353 #ifdef SA_LL_IBQ_PROTECT
361 SA_DBG1((
"saSMPStart: SPC unknown agRequestType %x\n",agRequestType));
368 saRoot->LLCounters.IOCounter.numSMPStarted++;
375 switch ( agRequestType )
379 bit32 IR_IP_OV_res_phyId_DPdLen_res = 0;
396 SA_DBG2((
"saSMPStart:V DIRECT Request SMP\n"));
398 IR_IP_OV_res_phyId_DPdLen_res = (
DIRECT_MODE << 1) | IR_IP_OV_res_phyId_DPdLen_res;
425 SA_DBG2((
"saSMPStart:V smpFrameFlagIndirectResponse smpFrameFlagIndirectPayload SMP\n"));
428 IR_IP_OV_res_phyId_DPdLen_res = 3;
442 SA_DBG2((
"saSMPStart:V smpFrameFlagIndirectPayload SMP\n"));
444 IR_IP_OV_res_phyId_DPdLen_res = 2;
456 SA_DBG2((
"saSMPStart:V smpFrameFlagIndirectResponse SMP\n"));
458 IR_IP_OV_res_phyId_DPdLen_res = 1;
475 IR_IP_OV_res_phyId_DPdLen_res |= (pSMPFrame->
flag & 3);
481 payload_ptr = (
bit8 *)&vpayload;
484#ifdef SA_LL_IBQ_PROTECT
491 SA_DBG1((
"saSMPStart: SPCv unknown agRequestType %x\n",agRequestType));
543 SA_DBG3((
"saSMPAbort: Aborting request %p\n", agIORequest));
550 if (
agNULL == pRequestABT)
553 SA_DBG1((
"saSMPAbort: pRequestABT AGSA_RC_FAILURE\n"));
559 pDevice = pRequestABT->
pDevice;
564 SA_DBG1((
"saSMPAbort: pDevice AGSA_RC_FAILURE\n"));
579 SA_DBG1((
"saSMPAbort:ABORT_ALL pDevice AGSA_RC_FAILURE\n"));
587 SA_DBG1((
"saSMPAbort:flag AGSA_RC_FAILURE\n"));
605 SA_DBG1((
"saSMPAbort, using saRoot->freeReservedRequests\n"));
610 SA_DBG1((
"saSMPAbort, No request from free list Not using saRoot->freeReservedRequests\n"));
640 agIORequest->
sdkData = pRequest;
651 if (
agNULL == pRequestABT)
663 SA_DBG1((
"saSMPAbort: saving pRequest (%p) for later use\n", pRequest));
672 SA_DBG1((
"saSMPAbort, agNULL == pRequestABT\n"));
703 SA_DBG1((
"saSMPAbort: saving pRequest (%p) for later use\n", pRequest));
712 SA_DBG1((
"saSMPAbort, sending IOMB failed\n" ));
717 saRoot->LLCounters.IOCounter.numSMPAborted++;
GLOBAL FORCEINLINE bit32 mpiMsgFreeGet(mpiICQueue_t *circularQ, bit16 messageSize, void **messagePtr)
Retrieves a free message buffer from an inbound queue.
#define smTraceFuncEnter(L, I)
#define smTraceFuncExit(L, S, I)
#define SA_RESERVED_REQUEST_COUNT
void(* ossaSMPCompletedCB_t)(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, bit32 agIOInfoLen, agsaFrameHandle_t agFrameHandle)
Callback definition for.
#define smpFrameFlagIndirectResponse
#define OSSA_OFFSET_OF(STRUCT_TYPE, FEILD)
#define AGSA_MAX_SMPPAYLOAD_VIA_SFO
void(* ossaGenericAbortCB_t)(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 flag, bit32 status)
Callback definition for abort SMP SSP SATA callback.
void(* ossaSSPCompletedCB_t)(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 agIOStatus, bit32 agIOInfoLen, void *agParam, bit16 sspTag, bit32 agOtherInfo)
Callback definition for.
#define AGSA_MAX_INBOUND_Q
#define AGSA_SMP_INIT_REQ
#define smpFrameFlagIndirectPayload
#define LL_IOREQ_LOCKEQ_LOCK
#define LL_IOREQ_IBQ0_LOCK
This file defines global types.
#define saLlistIOAdd(pList, pLink)
#define saLlistIORemove(pList, pLink)
#define saLlistIOGetHead(pList)
#define saLlistIOGetCount(pList)
GLOBAL bit32 mpiBuildCmd(agsaRoot_t *agRoot, bit32 *payload, mpiMsgCategory_t category, bit16 opcode, bit16 size, bit32 queueNum)
Build a IOMB command and send to SPC.
GLOBAL bit32 mpiSMPCmd(agsaRoot_t *agRoot, void *pIomb, bit16 opcode, agsaSMPCmd_t *payload, bit8 inq, bit8 outq)
SPC MPI SMP Request Command.
#define OPC_INB_SMP_ABORT
#define OPC_INB_SMP_REQUEST
GLOBAL FORCEINLINE void ossaSingleThreadedEnter(agsaRoot_t *agRoot, bit32 syncLockId)
ossaSingleThreadedEnter
GLOBAL FORCEINLINE void ossaSingleThreadedLeave(agsaRoot_t *agRoot, bit32 syncLockId)
ossaSingleThreadedLeave
GLOBAL FORCEINLINE void * si_memcpy(void *dst, void *src, bit32 count)
memcopy
GLOBAL bit32 smIS_SPC(agsaRoot_t *agRoot)
GLOBAL FORCEINLINE void * si_memset(void *s, int c, bit32 n)
memset
GLOBAL bit32 saSMPAbort(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 queueNum, agsaDevHandle_t *agDevHandle, bit32 flag, void *abortParam, ossaGenericAbortCB_t agCB)
Abort SMP request.
GLOBAL bit32 saSMPStart(agsaRoot_t *agRoot, agsaIORequest_t *agIORequest, bit32 queueNum, agsaDevHandle_t *agDevHandle, bit32 agRequestType, agsaSASRequestBody_t *agRequestBody, ossaSMPCompletedCB_t agCB)
Start SMP request.
data structure stores OS specific and LL specific context
Circular Queue descriptor.
union data structure specifies a request