63#ifdef INITIATOR_DRIVER
71#include <dev/pms/RefTisa/tisa/sassata/sas/tgt/ttdxchg.h>
103 bit32 PagePhysAddrUpper;
104 bit32 PagePhysAddrLower;
105 bit32 prev_PagePhysAddrLower;
108 bit32 PageSizeInBytes;
112 bit32 maxSALocks = 0;
113 bit32 usecsPerTick = 0;
119 TI_DBG6((
"tdsaEsglInit: start\n"));
122 QueueConfig = &tdsaAllShared->QueueConfig;
149 SwConfig.fatalErrorInterrtuptEnable = 1;
151 SwConfig.reserved = 0;
154 SwConfig.
param3 = (
void *)&(tdsaAllShared->QueueConfig);
156 saGetRequirements(&agRoot, &SwConfig, &memRequirement, &usecsPerTick, &maxSALocks);
159 pEsglAllInfo->
physAddrUpper = tdsaAllShared->loResource.loLevelMem.mem[memRequirement.
count].physAddrUpper;
160 pEsglAllInfo->
physAddrLower = tdsaAllShared->loResource.loLevelMem.mem[memRequirement.
count].physAddrLower;
161 pEsglAllInfo->
virtPtr = tdsaAllShared->loResource.loLevelMem.mem[memRequirement.
count].virtPtr;
162 pEsglAllInfo->
NumEsglPages = tdsaAllShared->loResource.loLevelMem.mem[memRequirement.
count].numElements;
163 pEsglAllInfo->
EsglPageSize = tdsaAllShared->loResource.loLevelMem.mem[memRequirement.
count].singleElementLength;
167 TI_DBG6((
"tdsaEsglInit: pEsglPagePool %p\n", pEsglPagePool));
168 TI_DBG6((
"tdsaEsglInit: tdsaAllShared->loResource.loLevelMem.mem[18].singleElementLength %d\n", tdsaAllShared->loResource.loLevelMem.mem[18].singleElementLength));
175 PageVirtAddr = pEsglAllInfo->
virtPtr;
180 TI_DBG6((
"tdsaEsglInit: PageSizeInBytes 0x%x\n", PageSizeInBytes));
181 for (pageno = 0 ; pageno < pEsglAllInfo->
NumEsglPages ; pageno++)
183 pEsglPageInfo = &(pEsglPagePool->
EsglPages[pageno]);
184 OSSA_WRITE_LE_32(agRoot, pEsglPageInfo,
OSSA_OFFSET_OF(pEsglPageInfo, physAddressUpper), PagePhysAddrUpper);
185 OSSA_WRITE_LE_32(agRoot, pEsglPageInfo,
OSSA_OFFSET_OF(pEsglPageInfo, physAddressLower), PagePhysAddrLower);
186 pEsglPageInfo->
len = PageSizeInBytes;
188 pEsglPageInfo->
id = pageno+123;
192 TI_DBG6((
"tdsaEsglInit: index %d upper 0x%8x lower 0x%8x PageVirtAddr %p\n", pageno, PagePhysAddrUpper, PagePhysAddrLower, PageVirtAddr));
196 prev_PagePhysAddrLower = PagePhysAddrLower;
199 if (PagePhysAddrLower <= prev_PagePhysAddrLower)
225 PageVirtAddr = (
bit8 *)PageVirtAddr + PageSizeInBytes;
230#ifdef TD_INTERNAL_DEBUG
231 for (pageno = 0 ; pageno < pEsglAllInfo->
NumEsglPages ; pageno++)
233 TI_DBG6((
"tdsaEsglInit: index %d EsglPages %p\n", pageno, &pEsglPagePool->
EsglPages[pageno]));
279 bit32 numPagesRequired = ((numSgElements - 1) / numEntriesPerPage) + 1;
287 TI_DBG6((
"tdsaGetEsglPages: start\n"));
289 TI_DBG6((
"tdsaGetEsglPages: &(pEsglAllInfo->freelist) %p\n", &pEsglAllInfo->
freelist));
290 TI_DBG6((
"tdsaGetEsglPages: numSgElements %d numEntriesPerPage %d\n", numSgElements, numEntriesPerPage));
291 TI_DBG6((
"tdsaGetEsglPages: numPagesRequired %d NumFreeEsglPages %d\n", numPagesRequired, pEsglAllInfo->
NumFreeEsglPages));
296 TI_DBG1((
"tdsaGetEsglPages:don't have enough freepages. required %d free %d\n", numPagesRequired, pEsglAllInfo->
NumFreeEsglPages));
305#ifdef TD_INTERNAL_DEBUG
306 for (i=0; i < 2; i++)
316 TI_DBG6((
"tdsaGetEsglPages:page ID %d\n", page_to_fill->
id));
317 agEsgl = page_to_fill->
agEsgl;
321 for (j=0; j <numEntriesPerPage; j++)
324 TI_DBG6((
"tdsaGetEsglPages: len %d\n", pDesc->
len));
327 TI_DBG6((
"tdsaGetEsglPages: next lower %d next upper %d\n", agEsgl->nextPageLower, agEsgl->nextPageUpper));
332 for (i = 0 ; i < numPagesRequired; i++)
342 TI_DBG6((
"tdsaGetEsglPages:page ID %d\n", page_to_fill->
id));
344 agEsgl = page_to_fill->
agEsgl;
351 if (i == numPagesRequired - 1)
353 for (j=0; j < numSgElements; j++)
362 for (j=numSgElements; j < numEntriesPerPage; j++)
375 for (j=0; j <numEntriesPerPage - 1; j++)
385 numSgElements -= (numEntriesPerPage - 1);
435 TI_DBG6((
"tdsaFreeEsglPages: start\n"));
438 TI_DBG1((
"tdsaFreeEsglPages: tiRoot is NULL\n"));
442 if (EsglListHdr ==
agNULL)
444 TI_DBG1((
"tdsaFreeEsglPages: EsglListHdr is NULL\n"));
448 TI_DBG6((
"tdsaFreeEsglPages: EsglListHdr %p\n", EsglListHdr));
489 char *pLastUsedChar =
agNULL;
490 char globalStr[] =
"Global";
491 char SwParmsStr[] =
"ESGLParms";
495 TI_DBG6((
"tdsaGetEsglPagesInfo: start \n"));
503 buffLen =
sizeof(tmpBuffer);
523 NumEsglPages =
osti_strtoul(buffer, &pLastUsedChar, 10);
529 TI_DBG6((
"tdsaGetEsglPagesInfo: esgl page number %d\n",NumEsglPages));
531 *pNumPages = NumEsglPages;
#define DEFAULT_KEY_BUFFER_SIZE
U32 ostiGetTransportParam(tiRoot_t *ptiRoot, S08 *key, S08 *subkey1, S08 *subkey2, S08 *subkey3, S08 *subkey4, S08 *subkey5, S08 *valueName, S08 *buffer, U32 bufferLen, U32 *lenReceived)
#define osti_strtoul(nptr, endptr, base)
#define osti_memset(s, c, n)
The file defines the constants, data structure, and functions defined by LL API.
#define OSSA_OFFSET_OF(STRUCT_TYPE, FEILD)
The file defines the declaration of tSDK APIs.
GLOBAL void saGetRequirements(agsaRoot_t *agRoot, agsaSwConfig_t *swConfig, agsaMemoryRequirement_t *memoryRequirement, bit32 *usecsPerTick, bit32 *maxNumLocks)
Get the memory and lock requirement from LL layer.
The file defines the declaration of OS APIs.
the data structure describe SG list
data structure stores OS specific and LL specific context
data structure for SAS/SATA context at TD layer
data structure for ESGL pool information
tdsaEsglPagePool_t * EsglPagePool
data structure for ESLG page
data structure for ESLG page pool
tdsaEsglPageInfo_t EsglPages[1]
the root data structure for TD layer
tdsaContext_t tdsaAllShared
#define CLEAR_ESGL_EXTEND(val)
#define SET_ESGL_EXTEND(val)
#define HOST_EVENT_LOG_SIZE
#define TDLIST_OBJECT_BASE(baseType, fieldName, fieldPtr)
#define TDLIST_NOT_EMPTY(listHdr)
#define TDLIST_ENQUEUE_AT_TAIL(toAddHdr, listHdr)
#define TDLIST_INIT_ELEMENT(hdr)
#define TDLIST_DEQUEUE_FROM_HEAD(atHeadHdr, listHdr)
#define TDLIST_INIT_HDR(hdr)
void tdsaSingleThreadedEnter(tiRoot_t *ptiRoot, bit32 queueId)
void tdsaSingleThreadedLeave(tiRoot_t *ptiRoot, bit32 queueId)
osGLOBAL void tdsaGetSwConfigParams(tiRoot_t *tiRoot)
osGLOBAL void tdsaGetEsglPages(tiRoot_t *tiRoot, tdList_t *EsglListHdr, tiSgl_t *ptiSgl, tiSgl_t *virtSgl)
osGLOBAL void tdsaEsglInit(tiRoot_t *tiRoot)
osGLOBAL void tdsaGetEsglPagesInfo(tiRoot_t *tiRoot, bit32 *PageSize, bit32 *NumPages)
osGLOBAL void tdsaFreeEsglPages(tiRoot_t *tiRoot, tdList_t *EsglListHdr)