www.pudn.com > efs.rar > fs_ftl_device.c
/***********************************************************************
* fs_ftl_device.c
*
* FTL device operation wrappers and counters.
* Copyright (C) 2006 QUALCOMM, Inc.
*
***********************************************************************/
/*===========================================================================
EDIT HISTORY FOR MODULE
This section contains comments describing changes made to the module.
Notice that changes are listed in reverse chronological order.
$Header: //depot/asic/MSMSHARED/services/efs/MSM_EFS.01.02/fs_ftl_device.c#1 $ $DateTime: 2006/10/12 21:20:47 $ $Author: davidb $
when who what, where, why
---------- --- ---------------------------------------------------------
2006-09-12 yg Create
===========================================================================*/
#include "comdef.h"
#include "fs_ftl_device.h"
#include "assert.h"
#include "flash.h"
#ifdef FEATURE_EFS_FTL
static uint32 ftl_read_color_counters[NUM_FTL_OP_CATEGORIES];
static uint32 ftl_write_color_counters[NUM_FTL_OP_CATEGORIES];
static uint32 ftl_copy_color_counters[NUM_FTL_OP_CATEGORIES];
static uint32 ftl_erase_color_counters[NUM_FTL_OP_CATEGORIES];
static uint32 ftl_read_sector_counters[NUM_FTL_OP_CATEGORIES];
static uint32 ftl_write_sector_counters[NUM_FTL_OP_CATEGORIES];
static uint32 ftl_copy_sector_counters[NUM_FTL_OP_CATEGORIES];
void
ftl_device_reset_counters (void)
{
int i;
for (i = 0; i < NUM_FTL_OP_CATEGORIES; ++i)
{
ftl_write_color_counters[i] = 0;
ftl_read_color_counters[i] = 0;
ftl_copy_color_counters[i] = 0;
ftl_erase_color_counters[i] = 0;
ftl_write_sector_counters[i] = 0;
ftl_read_sector_counters[i] = 0;
ftl_copy_sector_counters[i] = 0;
}
}
void
ftl_device_get_stats (ftl_dev_stat_type* op_stats,
fs_ftl_op_category category)
{
ASSERT (category < NUM_FTL_OP_CATEGORIES);
if (op_stats)
{
op_stats->ftl_write_op_count = ftl_write_color_counters[category];
op_stats->ftl_read_op_count = ftl_read_color_counters[category];
op_stats->ftl_copy_op_count = ftl_copy_color_counters[category];
op_stats->ftl_erase_op_count = ftl_erase_color_counters[category];
op_stats->ftl_write_sector_count = ftl_write_sector_counters[category];
op_stats->ftl_read_sector_count = ftl_read_sector_counters[category];
op_stats->ftl_copy_sector_count = ftl_copy_sector_counters[category];
}
}
int
ftl_device_write_counter (uint32 sector, uint32 count,
fs_ftl_op_category category)
{
ASSERT (category < NUM_FTL_OP_CATEGORIES);
(void) sector;
ftl_write_color_counters[category]++;
ftl_write_sector_counters[category] += count;
return ftl_write_color_counters[category];
}
int
ftl_device_read_counter (uint32 sector, uint32 count,
fs_ftl_op_category category)
{
ASSERT (category < NUM_FTL_OP_CATEGORIES);
(void) sector;
ftl_read_color_counters[category]++;
ftl_read_sector_counters[category] += count;
return ftl_read_color_counters[category];
}
uint32
ftl_dev_block_count (fs_device_t dev)
{
return dev->block_count (dev);
}
uint32
ftl_dev_block_size (fs_device_t dev)
{
return dev->block_size (dev);
}
uint32
ftl_dev_page_size (fs_device_t dev)
{
return dev->page_size (dev);
}
int
ftl_dev_bad_block_check (fs_device_t dev, block_id block)
{
return dev->bad_block_check (dev, block);
}
int
ftl_dev_mark_block_bad (fs_device_t dev, block_id block)
{
return dev->mark_block_bad (dev, block);
}
int
ftl_dev_write_page (fs_device_t dev, page_id page, void* data)
{
ftl_write_sector_counters[FTL_OP_FLASH]++;
ftl_write_color_counters[FTL_OP_FLASH]++;
return dev->write_page (dev, page, data);
}
int
ftl_dev_erase_block (fs_device_t dev, block_id block)
{
ftl_erase_color_counters[FTL_OP_FLASH]++;
return dev->erase_block (dev, block);
}
int
ftl_dev_read_page (fs_device_t dev, page_id page, void* data)
{
ftl_read_sector_counters[FTL_OP_FLASH]++;
ftl_read_color_counters[FTL_OP_FLASH]++;
return dev->read_page (dev, page, data);
}
int
ftl_dev_is_erased (fs_device_t dev, page_id page)
{
return dev->is_erased (dev, page);
}
int
ftl_dev_copy_page (fs_device_t dev, page_id src_page, page_id dst_page)
{
ftl_copy_sector_counters[FTL_OP_FLASH]++;
ftl_copy_color_counters[FTL_OP_FLASH]++;
return dev->copy_page (dev, src_page, dst_page);
}
int
ftl_dev_get_spare_corrected_bytes (fs_device_t dev)
{
return dev->get_spare_corrected_bytes (dev);
}
int
ftl_dev_write_page_and_udata (fs_device_t dev, page_id page, void* data,
void* spare_data, uint32 len)
{
ftl_write_sector_counters[FTL_OP_FLASH]++;
ftl_write_color_counters[FTL_OP_FLASH]++;
return dev->write_page_and_udata (dev, page, data, spare_data, len);
}
int
ftl_dev_read_spare_udata (fs_device_t dev, page_id page,
void* spare_ptr, uint32 len)
{
return dev->read_spare_udata (dev, page, spare_ptr, len);
}
#else
extern int __dont_complain_about_empty_file;
#endif /* FEATURE_EFS_FTL */