Lines Matching refs:context

159 SDK_INLINE u32 CARDi_GetHashSectorIndex(const CARDRomHashContext *context, u32 offset)  in CARDi_GetHashSectorIndex()  argument
161 offset -= context->area_ntr.offset; in CARDi_GetHashSectorIndex()
162 if (offset >= context->area_ntr.length) in CARDi_GetHashSectorIndex()
164 offset += (context->area_ntr.offset - context->area_ltd.offset); in CARDi_GetHashSectorIndex()
165 if (offset < context->area_ltd.length) in CARDi_GetHashSectorIndex()
167 offset += context->area_ntr.length; in CARDi_GetHashSectorIndex()
174 return offset / context->bytes_per_sector; in CARDi_GetHashSectorIndex()
186 static void CARDi_StartLoading(CARDRomHashContext *context) in CARDi_StartLoading() argument
193 if (context->recent_load == NULL) in CARDi_StartLoading()
195 if (context->loading_block) in CARDi_StartLoading()
199 CARDRomHashBlock *block = context->loading_block; in CARDi_StartLoading()
203 context->recent_load = block; in CARDi_StartLoading()
206 … length = MATH_ROUNDUP(mod + CARD_ROM_HASH_SIZE * context->sectors_per_block, CARD_ROM_PAGE_SIZE); in CARDi_StartLoading()
208 else if (context->loading_sector) in CARDi_StartLoading()
210 CARDRomHashSector *sector = context->loading_sector; in CARDi_StartLoading()
211 context->recent_load = sector; in CARDi_StartLoading()
214 length = context->bytes_per_sector; in CARDi_StartLoading()
221 if ((*context->ReadAsync)(context->userdata, buffer, offset, length) == 0) in CARDi_StartLoading()
223 (void)(*context->ReadSync)(context->userdata, buffer, offset, length); in CARDi_StartLoading()
224 CARD_NotifyRomHashReadAsync(context); in CARDi_StartLoading()
238 void CARD_NotifyRomHashReadAsync(CARDRomHashContext *context) in CARD_NotifyRomHashReadAsync() argument
242 if (context->recent_load == context->loading_sector) in CARD_NotifyRomHashReadAsync()
244 CARDRomHashSector *sector = context->loading_sector; in CARD_NotifyRomHashReadAsync()
245 context->loading_sector = sector->next; in CARD_NotifyRomHashReadAsync()
246 sector->next = context->loaded_sector; in CARD_NotifyRomHashReadAsync()
247 context->loaded_sector = sector; in CARD_NotifyRomHashReadAsync()
251 CARDRomHashBlock *block = context->loading_block; in CARD_NotifyRomHashReadAsync()
252 context->loading_block = block->next; in CARD_NotifyRomHashReadAsync()
253 block->next = context->loaded_block; in CARD_NotifyRomHashReadAsync()
254 context->loaded_block = block; in CARD_NotifyRomHashReadAsync()
256 context->recent_load = NULL; in CARD_NotifyRomHashReadAsync()
259 OS_WakeupThreadDirect(context->loader); in CARD_NotifyRomHashReadAsync()
261 CARDi_StartLoading(context); in CARD_NotifyRomHashReadAsync()
275 static CARDRomHashBlock* CARDi_TouchRomHashBlock(CARDRomHashContext *context, u32 sector) in CARDi_TouchRomHashBlock() argument
279 u32 index = sector / context->sectors_per_block; in CARDi_TouchRomHashBlock()
281 CARDRomHashBlock **pp = &context->valid_block; in CARDi_TouchRomHashBlock()
290 block->next = context->valid_block; in CARDi_TouchRomHashBlock()
291 context->valid_block = block; in CARDi_TouchRomHashBlock()
302 for (pp = &context->loaded_block; *pp; pp = &(*pp)->next) in CARDi_TouchRomHashBlock()
313 for (pp = &context->loading_block; *pp; pp = &(*pp)->next) in CARDi_TouchRomHashBlock()
327 …loading->offset = context->sector_hash.offset + index * (CARD_ROM_HASH_SIZE * context->sectors_per… in CARDi_TouchRomHashBlock()
334 CARDi_StartLoading(context); in CARDi_TouchRomHashBlock()
354 static void* CARDi_TouchRomHashSector(CARDRomHashContext *context, u32 offset) in CARDi_TouchRomHashSector() argument
357 CARDRomHashSector **pp = &context->valid_sector; in CARDi_TouchRomHashSector()
359 u32 index = CARDi_GetHashSectorIndex(context, offset); in CARDi_TouchRomHashSector()
360 for (pp = &context->valid_sector; ; pp = &(*pp)->next) in CARDi_TouchRomHashSector()
368 sector->next = context->valid_sector; in CARDi_TouchRomHashSector()
369 context->valid_sector = sector; in CARDi_TouchRomHashSector()
380 for (pp = &context->loading_sector; *pp; pp = &(*pp)->next) in CARDi_TouchRomHashSector()
385 loading->offset = MATH_ROUNDDOWN(offset, context->bytes_per_sector); in CARDi_TouchRomHashSector()
388 (void)CARDi_TouchRomHashBlock(context, index); in CARDi_TouchRomHashSector()
390 CARDi_StartLoading(context); in CARDi_TouchRomHashSector()
414 void CARD_InitRomHashContext(CARDRomHashContext *context, const CARDRomHeaderTWL *header, in CARD_InitRomHashContext() argument
428 context->master_hash = (u8 *)cur; in CARD_InitRomHashContext()
430 context->images = (u8 *)cur; in CARD_InitRomHashContext()
432 context->hashes = (u8 *)cur; in CARD_InitRomHashContext()
434 context->sectors = (CARDRomHashSector *)cur; in CARD_InitRomHashContext()
435 cur += MATH_ROUNDUP(sizeof(*context->sectors) * CARD_ROM_HASH_SECTOR_MAX, 32); in CARD_InitRomHashContext()
436 context->blocks = (CARDRomHashBlock *)cur; in CARD_InitRomHashContext()
437 cur += MATH_ROUNDUP(sizeof(*context->blocks) * CARD_ROM_HASH_BLOCK_MAX, 32); in CARD_InitRomHashContext()
446 context->area_ntr = header->digest_area_ntr; in CARD_InitRomHashContext()
447 context->area_ltd = header->digest_area_ltd; in CARD_InitRomHashContext()
448 context->sector_hash = header->digest_tabel1; in CARD_InitRomHashContext()
449 context->block_hash = header->digest_tabel2; in CARD_InitRomHashContext()
450 context->bytes_per_sector = bytes_per_sector; in CARD_InitRomHashContext()
451 context->sectors_per_block = sectors_per_block; in CARD_InitRomHashContext()
452 context->block_max = CARD_ROM_HASH_BLOCK_MAX; in CARD_InitRomHashContext()
453 context->sector_max = CARD_ROM_HASH_SECTOR_MAX; in CARD_InitRomHashContext()
455 context->ReadSync = sync; in CARD_InitRomHashContext()
456 context->ReadAsync = async; in CARD_InitRomHashContext()
457 context->userdata = userdata; in CARD_InitRomHashContext()
476 …(void)(*context->ReadSync)(context->userdata, context->master_hash, context->block_hash.offset, co… in CARD_InitRomHashContext()
477 … CARDi_CompareHash(header->digest_tabel2_digest, context->master_hash, context->block_hash.length); in CARD_InitRomHashContext()
480 CARDRomHashSector *sectors = context->sectors; in CARD_InitRomHashContext()
483 for (i = 0; i < context->sector_max; ++i) in CARD_InitRomHashContext()
486 sectors[i].image = &context->images[i * context->bytes_per_sector]; in CARD_InitRomHashContext()
489 context->sectors[0].next = NULL; in CARD_InitRomHashContext()
490 context->valid_sector = &context->sectors[context->sector_max - 1]; in CARD_InitRomHashContext()
491 context->loading_sector = NULL; in CARD_InitRomHashContext()
492 context->loaded_sector = NULL; in CARD_InitRomHashContext()
496 CARDRomHashBlock *blocks = context->blocks; in CARD_InitRomHashContext()
499 for (i = 0; i < context->block_max; ++i) in CARD_InitRomHashContext()
503 blocks[i].hash_aligned = &context->hashes[i * unit]; in CARD_InitRomHashContext()
505 context->valid_block = &context->blocks[0]; in CARD_InitRomHashContext()
506 context->blocks[context->block_max - 1].next = NULL; in CARD_InitRomHashContext()
507 context->loading_block = NULL; in CARD_InitRomHashContext()
508 context->loaded_block = NULL; in CARD_InitRomHashContext()
525 static void CARDi_ReadRomHashImageDirect(CARDRomHashContext *context, void *buffer, u32 offset, u32… in CARDi_ReadRomHashImageDirect() argument
527 const u32 sectunit = context->bytes_per_sector; in CARDi_ReadRomHashImageDirect()
528 const u32 blckunit = context->sectors_per_block; in CARDi_ReadRomHashImageDirect()
531 u32 sector = CARDi_GetHashSectorIndex(context, position); in CARDi_ReadRomHashImageDirect()
535 …u32 available = (u32)(*context->ReadSync)(context->userdata, buffer, position, end - position); in CARDi_ReadRomHashImageDirect()
537 (void)CARDi_TouchRomHashBlock(context, sector); in CARDi_ReadRomHashImageDirect()
539 if (context->ReadAsync && (position + available < end)) in CARDi_ReadRomHashImageDirect()
541 …(void)(*context->ReadAsync)(context->userdata, NULL, position + available, end - (position + avail… in CARDi_ReadRomHashImageDirect()
546 CARDRomHashBlock *block = CARDi_TouchRomHashBlock(context, sector); in CARDi_ReadRomHashImageDirect()
551 if (block != context->valid_block) in CARDi_ReadRomHashImageDirect()
554 while (context->loading_block) in CARDi_ReadRomHashImageDirect()
558 if (block == context->loaded_block) in CARDi_ReadRomHashImageDirect()
560 context->loaded_block = block->next; in CARDi_ReadRomHashImageDirect()
563 CARDi_CompareHash(&context->master_hash[block->index * CARD_ROM_HASH_SIZE], in CARDi_ReadRomHashImageDirect()
565 block->next = context->valid_block; in CARDi_ReadRomHashImageDirect()
566 context->valid_block = block; in CARDi_ReadRomHashImageDirect()
592 static void CARDi_ReadRomHashImageCaching(CARDRomHashContext *context, void *buffer, u32 offset, u3… in CARDi_ReadRomHashImageCaching() argument
597 void *image = CARDi_TouchRomHashSector(context, offset); in CARDi_ReadRomHashImageCaching()
601 u32 max = context->bytes_per_sector; in CARDi_ReadRomHashImageCaching()
615 u32 hit = MATH_ROUNDDOWN(offset, context->bytes_per_sector); in CARDi_ReadRomHashImageCaching()
616 while (context->valid_sector && context->valid_block) in CARDi_ReadRomHashImageCaching()
618 hit += context->bytes_per_sector; in CARDi_ReadRomHashImageCaching()
623 (void)CARDi_TouchRomHashSector(context, hit); in CARDi_ReadRomHashImageCaching()
631 while ((context->loading_sector && !context->loaded_sector) || in CARDi_ReadRomHashImageCaching()
632 (context->loading_block && !context->loaded_block)) in CARDi_ReadRomHashImageCaching()
637 block = context->loaded_block; in CARDi_ReadRomHashImageCaching()
640 context->loaded_block = block->next; in CARDi_ReadRomHashImageCaching()
644 sector = context->loaded_sector; in CARDi_ReadRomHashImageCaching()
647 context->loaded_sector = sector->next; in CARDi_ReadRomHashImageCaching()
654 u32 len = CARD_ROM_HASH_SIZE * context->sectors_per_block; in CARDi_ReadRomHashImageCaching()
655 … CARDi_CompareHash(&context->master_hash[block->index * CARD_ROM_HASH_SIZE], block->hash, len); in CARDi_ReadRomHashImageCaching()
657 block->next = context->valid_block; in CARDi_ReadRomHashImageCaching()
658 context->valid_block = block; in CARDi_ReadRomHashImageCaching()
662 CARDRomHashBlock *block = CARDi_TouchRomHashBlock(context, sector->index); in CARDi_ReadRomHashImageCaching()
663 … u32 slot = sector->index - block->index * context->sectors_per_block; in CARDi_ReadRomHashImageCaching()
664 …ARDi_CompareHash(&block->hash[slot * CARD_ROM_HASH_SIZE], sector->image, context->bytes_per_sector… in CARDi_ReadRomHashImageCaching()
666 sector->next = context->valid_sector; in CARDi_ReadRomHashImageCaching()
667 context->valid_sector = sector; in CARDi_ReadRomHashImageCaching()
689 void CARD_ReadRomHashImage(CARDRomHashContext *context, void *buffer, u32 offset, u32 length) in CARD_ReadRomHashImage() argument
692 context->loader = OS_GetCurrentThread(); in CARD_ReadRomHashImage()
693 context->recent_load = NULL; in CARD_ReadRomHashImage()
696 if ((length >= context->bytes_per_sector * (CARD_ROM_HASH_SECTOR_MAX / 2)) in CARD_ReadRomHashImage()
705 const u32 sectmask = (u32)(context->bytes_per_sector - 1UL); in CARD_ReadRomHashImage()
706 const u32 headlen = (u32)((context->bytes_per_sector - offset) & sectmask); in CARD_ReadRomHashImage()
711 CARDi_ReadRomHashImageCaching(context, buffer, offset, headlen); in CARD_ReadRomHashImage()
719 CARDi_ReadRomHashImageDirect(context, buffer, offset, bodylen); in CARD_ReadRomHashImage()
726 CARDi_ReadRomHashImageCaching(context, buffer, offset, length); in CARD_ReadRomHashImage()