/* ------------------------------------------------- * Tell the block base address of the specified address * Default value : generated based on scatter file * -------------------------------------------------*/ kal_uint32 custom_Block_Base(kal_uint32 nor_addr) { kal_uint32 blk_idx = 0; NOR_Flash_MTD_Data *mtdflash = (NOR_Flash_MTD_Data *)FlashDriveData.MTDData; blk_idx = BlockIndex((void *)mtdflash, nor_addr & (~((kal_uint32)mtdflash->BaseAddr))); return (kal_uint32)BlockAddress((void *)mtdflash, blk_idx); }
uint32 CachedReadAccessor::FindBlocks(uint32 segment_id, uint32 size, uint32 offset, CacheBlock** block_0, CacheBlock** block_1) { // 2 cases: // 1) request fits in a single block // 2) request straddles 2 blocks CacheBlockAddress address_0 = BlockAddress(segment_id, offset); *block_0 = GetCacheBlock(address_0); // Check if we straddle 2 blocks. uint32 next_block_offset = address_0.Offset() + block_size_; bool straddles_blocks = offset + size > next_block_offset; if (straddles_blocks) { // both blocks returned CacheBlockAddress address_1(segment_id, next_block_offset); *block_1 = GetCacheBlock(address_1); return 2; } else { // Only block_0 returned *block_1 = NULL; return 1; } }