Esempio n. 1
0
/* -------------------------------------------------
 * 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;
  }
}