63 static BOOLEAN GetDiiMsgInfoContig(
P_DataCarousel pDC,
const U8BIT *pDiiMsg );
64 static BOOLEAN dcFindModuleInDiiMsgContig(
const MemPtr pDiiMsg, U32BIT dataLength,
65 U16BIT moduleId, MemPtr *pModuleInfoDescStart );
66 static BOOLEAN dcGetModuleInfoContig(
const MemPtr pModuleInfoDescStart,
68 static void dcGetFirstModuleDescContig(
const MemPtr mpDiiMsg, MemPtr *mpModuleInfoDescStart );
69 static void dcGetNextModuleDescContig(
const MemPtr mpCurrModuleDescStart, MemPtr *mpNextModuleDescStart );
73 #define dcFindModuleInDiiMsgSeq dcFindModuleInDiiMsgContig
74 #define dcGetModuleInfoSeq dcGetModuleInfoContig
79 static BOOLEAN dcFindModuleInDiiMsgSeq(
const MemPtr mpDiiMsg, U32BIT dataLength,
80 U16BIT moduleId, MemPtr *mpModuleInfoDescStart );
81 static BOOLEAN dcGetModuleInfoSeq(
const MemPtr mpModuleInfoDescStart,
S_ModuleInfo *pModuleInfo );
130 err = LLCreate( idp, pDC, DC_MODULE_LIST, &pDC->llcDcModules );
131 dsmDP4((
"%x pDiiSf=%x\n", err, pDC->pDiiSf));
135 DSC_CmMemRelease( idp, pDC );
136 *ppDataCarousel = NULL;
140 err = LLCreate( idp, pDC, MODULE_ACQUIRE_LIST, &pDC->llcModuleAcquires );
143 LLDestroy( idp, &(pDC->llcDcModules));
144 DSC_CmMemRelease( idp, pDC );
145 *ppDataCarousel = NULL;
149 DSC_RootCrslAddDataCarousel( pRC, pDC );
150 *ppDataCarousel = pDC;
155 DEBUG_CHK( err == CLDSM_OK, dsmDP1((
"ERROR: DSC_DataCrslCreate: %u\n", err)));
156 dsmDP3((
"exit DSC_DataCrslCreate -> rtn: %u\n", err));
170 dsmAssert((pDC->llData[OC_DII_ACQUIRE_LIST].pLLCtrl == NULL));
173 LLRemove( pDC, OC_DATA_CAROUSEL_LIST );
176 dsmAssert((pDC->llcLoadRequests == NULL));
178 dsmAssert((pDC->pDiiSf == NULL));
180 dsmAssert((pDC->llcDcModules != NULL));
182 dsmAssert((pDC->llcModuleAcquires != NULL));
188 listCount = LLCount( pDC->llcDcModules );
189 dsmAssert((listCount == 0));
193 LLDestroy( idp, &(pDC->llcDcModules));
194 LLDestroy( idp, &(pDC->llcModuleAcquires));
196 if (pDC->hDiiMsgData)
198 DSC_CmMemRelease( idp, pDC->hDiiMsgData );
199 pDC->hDiiMsgData = NULL;
202 DSC_CmMemRelease( idp, pDC );
204 dsmDP3((
"exit DSC_DataCrslDestroy\n"));
241 pModule = LLTail( pDC->llcDcModules );
244 while (pModule != NULL)
246 pPrev = LLPrev( pModule, DC_MODULE_LIST );
252 if ((pDC->diiRequestCount != 0) || (pDC->diiMonitorCount != 0))
254 LLRemove( pDC, OC_DII_ACQUIRE_LIST );
255 if (pDC->pDiiSf != NULL)
257 DBGLOG(DD_SF,
"pDiiSf=%x", pDC->pDiiSf)
258 DSC_SectionFilterStop( idp, &pDC->pDiiSf );
262 DSC_DataCrslDestroy( idp, pDC );
264 dsmDP3(("exit DSC_DataCrslDelete\n"));
273 if (LLInsertHead( pRC->llcDiiAcquires, pDC ))
275 target.kind = SFK_DII;
276 target.id = pDC->dataCarouselId;
277 target.associationTag = pDC->tap.associationTag;
278 target.serviceId = (target.associationTag == INVALID_ASSOCIATION_TAG) ?
279 DSC_RootCrslGetPid(pRC) : DSC_RootCrslGetServiceId(pRC);
281 dsmDP3((
"INFO: Load Data Carousel (DII) Id: %u\n", (pDC->dataCarouselId >> 1)));
283 err = DSC_SectionFilterStart( idp, &target, sfPriority, &pDC->pDiiSf );
284 if (err == CLDSM_ERR_SI_QUERY_FAILED)
286 DBGLOG((DD_SF|DD_DC),
" Treating query failure as OK")
292 dsmAssert((pDC->pDiiSf));
294 err = DSC_SsectionFilterUpdatePriority( idp, pDC->pDiiSf, sfPriority, FALSE );
298 ERRPRINT(
" err=%d", err)
299 LLRemove( pDC, OC_DII_ACQUIRE_LIST );
301 else if (sfPriority == SF_PRIORITY_HIGH)
303 pDC->diiRequestCount++;
304 DBGLOG((DD_SF|DD_DC),
"HIGH priority cnt %d sf %p",pDC->diiRequestCount,pDC->pDiiSf)
308 pDC->diiMonitorCount++;
309 DBGLOG((DD_SF|DD_DC),
"LOW priority cnt %d sf %p",pDC->diiMonitorCount,pDC->pDiiSf)
318 E_SFPriority sfPriority;
320 if (pDC->pDiiSf != NULL)
322 target = pDC->pDiiSf->target;
323 sfPriority = pDC->pDiiSf->filter.priority;
324 DSC_SectionFilterStop( idp, &pDC->pDiiSf );
329 target.kind = SFK_DII;
330 target.id = pDC->dataCarouselId;
331 target.associationTag = pDC->tap.associationTag;
332 target.serviceId = (target.associationTag == INVALID_ASSOCIATION_TAG) ?
333 DSC_RootCrslGetPid(pRC) : DSC_RootCrslGetServiceId(pRC);
335 sfPriority = (pDC->diiRequestCount)? SF_PRIORITY_HIGH : SF_PRIORITY_LOW;
337 err = DSC_SectionFilterStart( idp, &target, sfPriority, &pDC->pDiiSf );
338 DBGLOG((DD_SF|DD_DC),
" err=%d pDC->pDiiSf=%x", err, pDC->pDiiSf)
344 if (sfPriority == SF_PRIORITY_HIGH)
346 if (pDC->diiRequestCount > 0)
347 pDC->diiRequestCount--;
351 if (pDC->diiMonitorCount > 0)
352 pDC->diiMonitorCount--;
354 if ((pDC->diiRequestCount == 0) && (pDC->diiMonitorCount == 0))
356 LLRemove( pDC, OC_DII_ACQUIRE_LIST );
357 if (pDC->pDiiSf != NULL)
359 DBGLOG(DD_SF,
"pDiiSf=%x", pDC->pDiiSf)
360 DSC_SectionFilterStop( idp, &pDC->pDiiSf );
379 listId = LListId( pDcList );
387 if (pDcFromList->dataCarouselId == searchDcId)
392 pDcFromList = LLNext( pDcFromList, listId );
394 dsmDP3((
"exit DSC_DataCrslListFindById: %p\n", pDcFromList));
400 return DSC_RootCrslGetServiceId( LLParent(pDC, OC_DATA_CAROUSEL_LIST));
405 return DSC_RootCrslGetPid( LLParent(pDC, OC_DATA_CAROUSEL_LIST));
410 return LLHead( pDC->llcDcModules );
417 pModule = LLHead( pDC->llcDcModules );
418 while ( pModule != NULL )
420 if (pModule->moduleInfo.moduleId == moduleId)
422 dsmAssert((pModule->status == MS_CACHED));
423 dsmAssert((pModule->hModuleData != NULL));
428 pModule = LLNext( pModule, DC_MODULE_LIST );
439 dsmAssert((pModule->status == MS_INITIAL));
440 if (pDC->hDiiMsgData != NULL)
442 MEMPTR_SEQ_OPEN( MEM_CONTEXT, pDC->hDiiMsgData, 0, pDC->diiMsgDataLen, FALSE, mpDiiMsg );
443 MEMPTR_OPEN( mpDiiMsg, mpStart );
445 pModule->moduleInfo.crslMagic = DSC_RootCrslMagic(LLParent(pDC, OC_DATA_CAROUSEL_LIST));
447 if ( dcFindModuleInDiiMsgSeq( mpDiiMsg, pDC->diiMsgDataLen, pModule->moduleInfo.moduleId, &mpStart ) &&
448 dcGetModuleInfoSeq( mpStart, &pModule->moduleInfo ) )
451 err = DSC_DataCrslAcquireStart( idp, pDC, SF_PRIORITY_LOW );
454 pModule->moduleInfo.blockSize = pDC->diiInfo.blockSize;
455 pModule->status = MS_PENDING_DDB;
462 MEMPTR_CLOSE( mpStart );
463 MEMPTR_SEQ_CLOSE( MEM_CONTEXT, pDC->hDiiMsgData, mpDiiMsg );
467 DBGLOG(DD_DC,
" ModuleId %u not found in STORED DII", pModule->moduleInfo.moduleId)
480 MEMPTR_CLOSE( mpStart );
481 MEMPTR_SEQ_CLOSE( MEM_CONTEXT, pDC->hDiiMsgData, mpDiiMsg );
482 DSC_CmMemRelease( idp, pDC->hDiiMsgData );
483 pDC->hDiiMsgData = NULL;
484 pDC->diiMsgDataLen = 0;
485 pDC->transIdver = INVALID_TRANSIDVER;
487 err = DSC_DataCrslAcquireStart( idp, pDC, SF_PRIORITY_HIGH );
490 pModule->status = MS_PENDING_INFO;
501 err = DSC_DataCrslAcquireStart( idp, pDC, SF_PRIORITY_HIGH );
504 pModule->status = MS_PENDING_INFO;
564 MEMPTR_SEQ_OPEN( MEM_CONTEXT, pDC->hDiiMsgData, 0,
565 diiMsgDataLen, FALSE, mpDiiMsgData );
566 MEMPTR_WRITE( pDiiMsg, mpDiiMsgData, diiMsgDataLen );
567 MEMPTR_SEQ_CLOSE( MEM_CONTEXT, pDC->hDiiMsgData, mpDiiMsgData );
568 pDC->diiMsgDataLen = diiMsgDataLen;
570 if (DSC_RootCrslMagic(LLParent(pDC, OC_DATA_CAROUSEL_LIST)) == UC_MAGIC)
572 if (pDC->diiCrc != diiCrc || transIdver != pDC->transIdver)
574 if (pDC->diiCrc != 0)
578 AbortSsuDownload( idp, pDC );
580 err = FetchSsuModules( idp, pDC );
585 err = UpdateDiiModules( idp, pDC );
586 if (!err && idp->setup.turboCaching && !idp->cacheFull)
588 err = FetchDiiModules( idp, pDC );
591 pDC->transIdver = transIdver;
592 pDC->diiCrc = diiCrc;
625 LLRemove( pModule, MODULE_LOADED_LIST );
628 err = DSC_ModuleCreate( idp, pModule->moduleInfo.moduleId, &pNewModule );
632 pNewModule->moduleInfo = *pModuleInfo;
633 pNewModule->status = MS_PENDING_DDB;
637 LLReplaceAll( pModule, pNewModule, NUM_LISTS_MODULE );
646 pModule->status = MS_EXPIRED;
647 LLInsertHead( idp->llcExpiredModules, pModule );
651 DSC_ModuleResetState( idp, pModule, MS_PENDING_INFO );
652 pModule->moduleInfo = *pModuleInfo;
653 pModule->status = MS_PENDING_DDB;
655 if (DSC_DataCrslFirstModule(pDC) == pModule &&
656 DSC_RootCrslSrgObjectReset(LLParent(pDC, OC_DATA_CAROUSEL_LIST)) == CLDSM_OK)
678 E_DscError err = CLDSM_OK;
680 dsmAssert((idp != NULL));
681 dsmAssert((pDC != NULL));
682 dsmAssert((pModuleInfo != NULL));
683 dsmAssert((pModule != NULL));
685 if (pModule->status == MS_PENDING_INFO)
687 pModule->moduleInfo = *pModuleInfo;
688 pModule->status = MS_PENDING_DDB;
695 err = DSC_DataCrslAcquireStart( idp, pDC, SF_PRIORITY_LOW );
696 dsmAssert((err == CLDSM_OK));
697 DSC_DataCrslAcquireStop( idp, pDC, SF_PRIORITY_HIGH );
711 dsmAssert((pModule->status != MS_INITIAL));
712 dsmAssert((pModule->status != MS_EXPIRED));
714 if (pModule->moduleInfo.version != pModuleInfo->version ||
715 pModule->moduleInfo.moduleSize != pModuleInfo->moduleSize)
717 dsmDP4((
"Module Id: %u version %u,%u status=%x",
718 pModule->moduleInfo.moduleId, pModule->moduleInfo.version, pModuleInfo->version, pModule->status));
720 switch (pModule->status)
725 dsmDP4((
"(acquiring)\n"));
728 DSC_ModuleResetState( idp, pModule, MS_PENDING_INFO );
729 pModule->moduleInfo = *pModuleInfo;
730 pModule->status = MS_PENDING_DDB;
735 dsmDP4((
"(acquiring)\n"));
745 if (idp->setup.turboCaching == TRUE)
749 err = UpdateCachedModuleVersion( idp, pDC, pModule, pModuleInfo );
760 dsmDP1((
"ERROR: Illegal module status = %u\n", pModule->status));
763 err = CLDSM_ERR_INTERNAL;
796 dsmAssert((pDC->llcDcModules != NULL));
798 moduleInfo.crslMagic = DSC_RootCrslMagic(LLParent(pDC, OC_DATA_CAROUSEL_LIST));
801 pModule = LLHead( pDC->llcDcModules );
804 while (pModule != NULL)
810 pNextModule = LLNext( pModule, DC_MODULE_LIST );
812 dsmAssert((pModule->status != MS_INITIAL));
813 dsmAssert((pModule->status != MS_EXPIRED));
815 moduleInfo.blockSize = pDC->diiInfo.blockSize;
816 moduleInfo.associationTag = pDC->tap.associationTag;
819 if (dcFindModuleInDiiMsgContig( pDC->hDiiMsgData, pDC->diiMsgDataLen,
820 pModule->moduleInfo.moduleId, &pModuleDescStart ) &&
821 dcGetModuleInfoContig( pModuleDescStart, &moduleInfo ))
824 newErr = UpdateDiiModule( idp, pDC, &moduleInfo, pModule );
827 err = handleInLoopError( idp, err, newErr );
832 dsmDP3((
"INFO: Module Id: %u not found or not valid in RECEIVED DII\n", pModule->moduleInfo.moduleId));
835 pModule = pNextModule;
851 E_DscError err = CLDSM_OK;
853 DBGLOG(DD_DC,
" Id: %u", pModuleInfo->moduleId)
854 dsmAssert((idp != NULL));
855 dsmAssert((pDC != NULL));
856 dsmAssert((pModuleInfo != NULL));
858 dsmAssert((idp->cacheFull == FALSE));
861 err = DSC_ModuleCreate( idp, pModuleInfo->moduleId, &pModule );
864 LLInsertTail( pDC->llcDcModules, pModule );
865 pModule->moduleInfo = *pModuleInfo;
866 pModule->status = MS_PENDING_DDB;
869 err = DSC_DataCrslAcquireStart( idp, pDC, SF_PRIORITY_LOW );
902 dsmAssert((pDC->llcDcModules != NULL));
903 dsmAssert((pDC->diiInfo.numberOfModules != 0));
908 numModules = pDC->diiInfo.numberOfModules;
910 dcGetFirstModuleDescContig( pDC->hDiiMsgData, &pModuleDescStart );
913 moduleInfo.blockSize = pDC->diiInfo.blockSize;
914 moduleInfo.crslMagic = OC_MAGIC;
918 if (dcGetModuleInfoContig( pModuleDescStart, &moduleInfo ))
921 if (DSC_ModuleListFindById( pDC->llcDcModules, moduleInfo.moduleId ) == NULL)
923 newErr = FetchModule( idp, pDC, &moduleInfo );
926 err = handleInLoopError( idp, err, newErr );
931 dcGetNextModuleDescContig( pModuleDescStart, &pModuleDescStart );
940 pModule = LLTail( pDC->llcDcModules );
941 while (pModule != NULL)
943 pPrev = LLPrev( pModule, DC_MODULE_LIST );
944 if (pModule->pLoadRqst == pLoadRqst)
955 E_UCLoadStatus status;
956 switch (pLoadRqst->status)
960 pDC = LLParent((
P_Module)pLoadRqst->target, DC_MODULE_LIST);
961 status = SSU_LOAD_ABORTED;
964 case LRS_STALLED_MODULE:
967 status = SSU_LOAD_STARTING;
973 status = SSU_LOAD_COMPLETE;
974 dsmAssert((pLoadRqst->remaining == 0));
975 if (!idp->setup.multipleSsuDownloads)
977 StartNextSsuDownload( idp, pDC );
979 pLoadRqst->target = NULL;
983 case LRS_ABORTED_LOAD_ERROR:
986 status = SSU_LOAD_ABORTED;
987 pLoadRqst->target = NULL;
988 DeleteModulesOnLoadRqst( idp, pDC, pLoadRqst );
991 if (idp->setup.ssuFuncs.status)
994 sr.ur = pLoadRqst->usrRef;
995 idp->setup.ssuFuncs.status( (H_DsmCarousel)LLParent(pDC, OC_DATA_CAROUSEL_LIST), status,
996 sr, pLoadRqst->remaining );
998 DSC_DataCrslCheckSsuStatus( idp, pDC );
1020 dsmAssert((pDC->llcDcModules != NULL));
1021 dsmAssert((pDC->diiInfo.numberOfModules != 0));
1022 dsmAssert((DSC_RootCrslMagic(LLParent(pDC, OC_DATA_CAROUSEL_LIST)) == UC_MAGIC));
1023 dsmAssert((LLHead(pDC->llcDcModules) == NULL));
1025 dsmAssert((LLHead(pDC->llcLoadRequests) != NULL));
1027 LLCtrlBlockInit( &llcModules, DC_MODULE_LIST, pDC );
1028 pLoadRqst = LLHead(pDC->llcLoadRequests);
1029 if (pLoadRqst == NULL)
1031 err = CLDSM_ERR_INTERNAL;
1039 numModules = pDC->diiInfo.numberOfModules;
1042 dcGetFirstModuleDescContig( pDC->hDiiMsgData, &pModuleDescStart );
1044 memset( &moduleInfo, 0,
sizeof(S_ModuleInfo) );
1045 moduleInfo.blockSize = pDC->diiInfo.blockSize;
1046 moduleInfo.crslMagic = UC_MAGIC;
1047 moduleInfo.associationTag = pDC->tap.associationTag;
1049 while (numModules--)
1051 if (dcGetModuleInfoContig( pModuleDescStart, &moduleInfo ))
1054 dsmAssert((DSC_ModuleListFindById(pDC->llcDcModules, moduleInfo.moduleId) == NULL));
1055 err = DSC_ModuleCreate( idp, moduleInfo.moduleId, &pModule );
1058 pModule = LLRemoveTail(&llcModules);
1059 while (pModule != NULL)
1061 DSC_ModuleDestroy( idp, pModule );
1062 pModule = LLRemoveTail(&llcModules);
1066 LLInsertTail( &llcModules, pModule );
1067 pModule->moduleInfo = moduleInfo;
1068 moduleInfo.u.ssup.offset += moduleInfo.originalSize;
1070 dcGetNextModuleDescContig( pModuleDescStart, &pModuleDescStart );
1072 pLoadRqst->remaining = moduleInfo.u.ssup.offset;
1076 pModule = LLHead(&llcModules);
1077 while (pModule != NULL && !err)
1079 switch ( pModule->moduleInfo.u.ssup.positionType )
1083 LLRemove( pModule, DC_MODULE_LIST );
1084 LLInsertTail( pDC->llcDcModules, pModule );
1085 err = DSC_LoadRsqtCreate( idp,
sizeof(
S_RootLoadRqst), TT_SSU_MODULE, pModule,
1086 LoadFinalise, &pLoadRqst );
1089 LLInsertTail( pDC->llcLoadRequests, pLoadRqst );
1090 pModule->moduleInfo.u.ssup.offset = 0;
1091 pModule->pLoadRqst = pLoadRqst;
1092 pLoadRqst->remaining = pModule->moduleInfo.originalSize;
1094 pModule = LLHead(&llcModules);
1099 LLRemove( pModule, DC_MODULE_LIST );
1100 LLInsertTail( pDC->llcDcModules, pModule );
1101 err = DSC_LoadRsqtCreate( idp,
sizeof(
S_RootLoadRqst), TT_SSU_MODULE, pModule,
1102 LoadFinalise, &pLoadRqst );
1105 LLInsertTail( pDC->llcLoadRequests, pLoadRqst );
1106 pModule->moduleInfo.u.ssup.offset = 0;
1107 pModule->pLoadRqst = pLoadRqst;
1108 moduleInfo.u.ssup.offset = pModule->moduleInfo.originalSize;
1109 pModule = DSC_ModuleListFindById(&llcModules, pModule->moduleInfo.u.ssup.nextModuleId);
1110 while (pModule != NULL && (pModule->moduleInfo.u.ssup.positionType & PTYP_INTER))
1112 LLRemove( pModule, DC_MODULE_LIST );
1113 LLInsertTail( pDC->llcDcModules, pModule );
1114 pModule->pLoadRqst = pLoadRqst;
1115 pModule->moduleInfo.u.ssup.offset = moduleInfo.u.ssup.offset;
1116 moduleInfo.u.ssup.offset += pModule->moduleInfo.originalSize;
1117 if (pModule->moduleInfo.u.ssup.positionType == PTYP_LAST)
1121 pModule = DSC_ModuleListFindById(&llcModules, pModule->moduleInfo.u.ssup.nextModuleId);
1123 if (pModule == NULL || pModule->moduleInfo.u.ssup.positionType != PTYP_LAST)
1125 ERRLOG(DD_DC,
"Invalid end of module link %p",pModule)
1126 err = CLDSM_ERR_END_OF_DATA;
1130 pLoadRqst->remaining = moduleInfo.u.ssup.offset;
1133 pModule = LLHead(&llcModules);
1138 ERRLOG(DD_DC,
"Unknown position type %d",pModule->moduleInfo.u.ssup.positionType)
1139 err = CLDSM_ERR_END_OF_DATA;
1145 pModule = LLNext(pModule,DC_MODULE_LIST);
1149 if (LLCount(&llcModules))
1151 ERRLOG(DD_DC,
"unassigned modules %d",LLCount(&llcModules))
1154 err = CLDSM_ERR_END_OF_DATA;
1159 pModule = LLRemoveTail(&llcModules);
1160 while (pModule != NULL)
1162 DSC_ModuleDestroy( idp, pModule );
1163 pModule = LLRemoveTail(&llcModules);
1165 pModule = LLRemoveTail(pDC->llcDcModules);
1166 while (pModule != NULL)
1168 DSC_ModuleDestroy( idp, pModule );
1169 pModule = LLRemoveTail(pDC->llcDcModules);
1171 while (LLCount(pDC->llcLoadRequests) > 1)
1173 DSC_LoadRsqtDestroy(idp, LLRemoveTail(pDC->llcLoadRequests));
1178 DSC_LoadRsqtNotify( idp, LLHead(pDC->llcLoadRequests), LRS_STALLED_MODULE );
1179 DSC_DataCrslAcquireStop( idp, pDC, SF_PRIORITY_HIGH );
1180 err = StartNextSsuDownload( idp, pDC );
1181 DSC_DataCrslCheckSsuStatus( idp, pDC );
1192 chptr = pModule->moduleInfo.u.ssup.mpName;
1195 chptr += pModule->moduleInfo.u.ssup.nameLen;
1199 usrRef = idp->setup.ssuFuncs.startModule(pModule->moduleInfo.u.ssup.moduleType,
1200 pModule->moduleInfo.u.ssup.mpName);
1210 E_DscError err = CLDSM_OK;
1213 pLoadRqst = LLHead(pDC->llcLoadRequests);
1214 if (pLoadRqst != NULL)
1216 dsmAssert((pLoadRqst->targetKind == TT_SSU_GROUP));
1217 pLoadRqst = LLNext(pLoadRqst,MODULE_LOAD_REQUEST_LIST);
1219 while (pLoadRqst != NULL)
1221 dsmAssert((pLoadRqst->targetKind == TT_SSU_MODULE));
1222 if (pLoadRqst->target != NULL && pLoadRqst->usrRef == NULL)
1224 pModule = (
P_Module)pLoadRqst->target;
1225 pLoadRqst->usrRef = SsuStartModule( idp, pModule );
1226 if (pLoadRqst->usrRef == NULL)
1229 pLoadRqst = LLPrev(pLR,MODULE_LOAD_REQUEST_LIST);
1230 LLRemove( pLR, MODULE_LOAD_REQUEST_LIST );
1233 pLR->status = LRS_ABORTED_PATH_ERROR;
1234 DeleteModulesOnLoadRqst( idp, pDC, pLR );
1235 DSC_LoadRsqtDestroy( idp, pLR );
1239 pLoadRqst->target = pDC;
1240 DSC_LoadRsqtNotify( idp, pLoadRqst, LRS_STALLED_MODULE );
1241 if (!idp->setup.ssuFuncs.wantModuleData)
1243 while (pModule->pLoadRqst == pLoadRqst)
1245 dsmAssert((pModule->status == MS_INITIAL));
1246 DSC_DataCrslAcquireStart( idp, pDC, SF_PRIORITY_LOW );
1249 pModule->status = MS_PENDING_DDB;
1251 pModule = LLNext(pModule,DC_MODULE_LIST);
1253 if (!idp->setup.multipleSsuDownloads)
1260 while (pModule != NULL && pModule->pLoadRqst == pLoadRqst)
1262 dsmAssert((pModule->status == MS_INITIAL));
1263 if (idp->setup.ssuFuncs.wantModuleData(pLoadRqst->usrRef, MAKE_MODULE_REF(pDC->dataCarouselId, pModule->moduleInfo.moduleId),
1264 pModule->moduleInfo.u.ssup.offset, pModule->moduleInfo.originalSize, pModule->moduleInfo.u.ssup.moduleCrc))
1266 DSC_DataCrslAcquireStart( idp, pDC, SF_PRIORITY_LOW );
1269 pModule->status = MS_PENDING_DDB;
1274 pModule->pLoadRqst = NULL;
1275 pLoadRqst->remaining -= pModule->moduleInfo.originalSize;
1277 pModule = LLNext(pModule,DC_MODULE_LIST);
1279 if (!pLoadRqst->remaining)
1282 pLoadRqst = LLPrev(pLR,MODULE_LOAD_REQUEST_LIST);
1283 DSC_LoadRsqtFinalNotify( idp, pLR, LRS_LOADED );
1285 else if (!idp->setup.multipleSsuDownloads)
1292 pLoadRqst = LLNext(pLoadRqst,MODULE_LOAD_REQUEST_LIST);
1301 pLoadRqst = LLHead(pDC->llcLoadRequests);
1302 ASSERT(pLoadRqst != NULL)
1303 if (pLoadRqst != NULL && pLoadRqst->status == LRS_STALLED_MODULE)
1305 while (LLCount(pDC->llcLoadRequests) > 1)
1307 pLR = LLTail(pDC->llcLoadRequests);
1316 pLoadRqst = LLHead(pDC->llcLoadRequests);
1317 if (pLoadRqst != NULL && pLoadRqst->status != LRS_LOADED)
1319 dsmAssert((pLoadRqst->targetKind == TT_SSU_GROUP));
1320 pLoadRqst = LLNext(pLoadRqst,MODULE_LOAD_REQUEST_LIST);
1321 while (pLoadRqst != NULL && pLoadRqst->target == NULL)
1323 dsmAssert((pLoadRqst->targetKind == TT_SSU_MODULE));
1324 pLoadRqst = LLNext(pLoadRqst,MODULE_LOAD_REQUEST_LIST);
1326 if (pLoadRqst == NULL)
1328 pLoadRqst = LLHead(pDC->llcLoadRequests);
1329 dsmAssert((pLoadRqst->finalise != LoadFinalise));
1330 DSC_LoadRsqtFinalNotify( idp, pLoadRqst, LRS_LOADED );
1331 if (!LLCount(pDC->llcLoadRequests))
1333 LLDestroy( idp, &pDC->llcLoadRequests );
1343 static BOOLEAN GetDiiMsgInfoContig(
P_DataCarousel pDC,
const U8BIT *pDiiMsg )
1345 U8BIT *pDiiMsgInfo = (U8BIT *) pDiiMsg;
1349 dsmAssert((pDiiMsg != NULL));
1350 dsmAssert((pDC != NULL));
1355 SET_POS_REL( pDiiMsgInfo, 4 );
1363 READ_UINT16( pDiiMsgInfo, pDC->diiInfo.blockSize );
1364 if ( pDC->diiInfo.blockSize > MAX_DDB_BLOCKSIZE )
1366 dsmDP2((
"DATA ERROR: DII Info DDB Blocksize (> %u) = %u\n", MAX_DDB_BLOCKSIZE, pDC->diiInfo.blockSize));
1372 SET_POS_REL( pDiiMsgInfo, 10 );
1375 READ_UINT16( pDiiMsgInfo, compatLen );
1382 dsmDP3((
"DATA: DII Info compatibilityDescriptorLength (!= 0) = %u\n", compatLen));
1383 valid = DSC_RootCrslCheckCompatibility(
1384 (
P_RootCarousel)LLParent(pDC, OC_DATA_CAROUSEL_LIST), pDiiMsgInfo, compatLen );
1385 SET_POS_REL( pDiiMsgInfo, compatLen );
1387 READ_UINT16( pDiiMsgInfo, pDC->diiInfo.numberOfModules );
1388 DBG2(DD_DC,
"No of modules = %u", pDC->diiInfo.numberOfModules)
1393 static BOOLEAN dcFindModuleInDiiMsgContig(
1394 const MemPtr mpDiiMsg, U32BIT dataLength, U16BIT moduleId,
1395 MemPtr *mpModuleInfoDescStart )
1399 dsmDP3((
"dcFindModuleInDiiMsgContig()\n"));
1403 dsmDP3((
"exit dcFindModuleInDiiMsgContig -> rtn: %u\n", found));
1407 static BOOLEAN dcGetModuleInfoContig(
1408 const MemPtr mpModuleInfoDescStart, S_ModuleInfo *pModuleInfo )
1412 dsmDP3((
"dcGetModuleInfoContig()\n"));
1416 dsmDP3((
"exit dcGetModuleInfoContig -> rtn: %u\n", valid));
1420 static void dcGetFirstModuleDescContig(
1421 const MemPtr mpDiiMsg,
1422 MemPtr *mpModuleInfoDescStart )
1424 MemPtr mpModuleInfoDesc;
1428 dsmDP3((
"dcGetFirstModuleDescContig()\n"));
1430 dsmAssert((mpDiiMsg != NULL));
1431 dsmAssert((mpModuleInfoDescStart != NULL));
1435 MEMPTR_OPEN( mpDiiMsg, mpModuleInfoDesc );
1440 SET_POS_REL( mpModuleInfoDesc, 6 );
1443 SET_POS_REL( mpModuleInfoDesc, 10 );
1446 READ_UINT16( mpModuleInfoDesc, compatLen );
1449 SET_POS_REL( mpModuleInfoDesc, compatLen );
1453 SET_POS_REL( mpModuleInfoDesc, 2 );
1457 GET_POS( mpModuleInfoDesc, currPos );
1458 SET_POS_ABS( *mpModuleInfoDescStart, currPos );
1460 MEMPTR_CLOSE( mpModuleInfoDesc );
1462 dsmDP3((
"exit dcGetFirstModuleDescContig\n"));
1465 static void dcGetNextModuleDescContig(
1466 const MemPtr mpCurrModuleDescStart,
1467 MemPtr *mpNextModuleDescStart )
1469 MemPtr mpModuleInfoDesc;
1471 U8BIT moduleInfoLength;
1473 dsmDP3((
"dcGetNextModuleDescContig()\n"));
1475 dsmAssert((mpCurrModuleDescStart != NULL));
1476 dsmAssert((mpNextModuleDescStart != NULL));
1479 MEMPTR_OPEN( mpCurrModuleDescStart, mpModuleInfoDesc );
1484 SET_POS_REL( mpModuleInfoDesc, 2 );
1487 SET_POS_REL( mpModuleInfoDesc, 5 );
1490 READ_UINT8( mpModuleInfoDesc, moduleInfoLength );
1493 SET_POS_REL( mpModuleInfoDesc, (S32BIT)moduleInfoLength );
1497 GET_POS( mpModuleInfoDesc, currPos );
1498 SET_POS_ABS( *mpNextModuleDescStart, currPos );
1500 MEMPTR_CLOSE( mpModuleInfoDesc );
1502 dsmDP3((
"exit dcGetNextModuleDescContig\n"));
1505 #ifndef MEM_CONTIGUOUS
1511 static BOOLEAN dcFindModuleInDiiMsgSeq(
1512 const MemPtr mpDiiMsg, U32BIT dataLength, U16BIT moduleId,
1513 MemPtr *mpModuleInfoDescStart )
1517 dsmDP3((
"dcFindModuleInDiiMsgSeq()\n"));
1521 dsmDP3((
"exit dcFindModuleInDiiMsgSeq -> rtn: %u\n", found));
1525 static BOOLEAN dcGetModuleInfoSeq(
1526 const MemPtr mpModuleInfoDescStart, S_ModuleInfo *pModuleInfo )
1530 dsmDP3((
"dcGetModuleInfoSeq()\n"));
1534 dsmDP3((
"exit dcGetModuleInfoSeq -> rtn: %u\n", valid));
Header to the dataCarousel module - functions/methods for creating/destroying and managing attributes...
Header defining RootCarousel module - common code betweeen Update Carousel and Object Carousel...
General include file for clDsm library internal definitions.
void DSC_LoadRsqtAbort(P_DsmCoreInst idp, P_RootLoadRqst pLoadRqst)
Force abort (on error) any type of load request Finalise the load request (notify client) and destroy...
Defines memory access utils to work with contiguous memory.
Header to the sectionTimer module.
Common source code to find module info descriptor in DII. To be included by functions processing data...
Header to the cacheMgr module.
void DSC_ModuleDelete(P_DsmCoreInst idp, P_Module pModule)
Destroy the module and destroy parent DC if now empty.
void DSC_ModuleDeleteDcTidyUp(P_DsmCoreInst idp, P_Module pModule)
Delete module and destroy parent DC if now empty.
Header to the sectionFilter module.
E_DscError DSC_ModuleAcquireStart(P_DsmCoreInst idp, P_Module pModule, E_SFPriority sfPriority)
Start aquisition of module.
Header to the 'module' module - Functions/methods for creating/destroying and managing attributes of ...
Defines memory access utils to work with managed (MemMgr) memory.
eader to the clDsmUtils module.
Common source code to extract module info from module info descriptor in DII. To be included by funct...