media.h
来自「U盘控制器USB97C223的固件代码,对2kPAGE NAND FLASH 有」· C头文件 代码 · 共 986 行 · 第 1/3 页
H
986 行
t_result media_erase_card() reentrant ;
//+-----------------------------------------------------------------------------
// Name:
// media_set_read_addr()
//
// Declaration:
// t_result media_erase_card() reentrant
// media_set_read_addr
// Purpose:
// set media-specific address from internal zone/rd_phy_blk/sector addres
//
// Arguments:
// TBD
//
// Return:
// k_success always
//
// Notes:
// TBD
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result media_set_read_addr() reentrant ;
//+-----------------------------------------------------------------------------
// Name:
// media_set_write_addr()
//
// Declaration:
// t_result media_set_write_addr() reentrant
//
// Purpose:
// set media-specific address from internal zone/wr_phy_blk/sector addres
//
// Arguments:
// TBD
//
// Return:
// k_success always
//
// Notes:
// TBD
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result media_set_write_addr() reentrant ;
//+-----------------------------------------------------------------------------
// Name:
// media_set_erase_addr()
//
// Declaration:
// t_result media_set_erase_addr() reentrant
//
// Purpose:
// set media-specific address from internal zone/wr_phy_blk
//
// Arguments:
// TBD
//
// Return:
// k_success always
//
// Notes:
// The block to be erased should be in g_addr_wr_phy_blk before this
// function is called
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result media_set_erase_addr() reentrant ;
//+-----------------------------------------------------------------------------
// Name:
// media_set_erase_addr()
//
// Declaration:
// t_result media_set_erase_addr() reentrant
//
// Purpose:
// set media-specific address from internal zone/wr_phy_blk
//
// Arguments:
// TBD
//
// Return:
// k_success always
//
// Notes:
// The block to be erased should be in g_addr_wr_phy_blk before this
// function is called
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result media_set_erase_addr() reentrant ;
//+-----------------------------------------------------------------------------
// Name:
// media_block_has_bad_data()
//
// Declaration:
// t_result media_block_has_bad_data() reentrant
//
// Purpose:
// scan blocks to find out whether or not a block contains a page that has
// a bad data flag. This is used for smart media controller who must detect
// data-gone-bad flag which can't do so at run-time
//
// Arguments:
//
// Return:
// k_true if a page between 0 and g_addr_rd_page contains extra data with
// 'failed' status
//
// k_false if all pages have good data status
//
// Notes:
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result media_block_has_bad_data() reentrant ;
//------------------------------------------------------------------------------
// virtual media methods
#if 1
#define _v_media_erase_block &__media_pure_virtual
#define _v_media_read_sector &__media_pure_virtual
#define _v_media_write_sector &__media_pure_virtual
#define _v_media_copy_sector &__media_pure_virtual
#define _v_media_read_cis &__media_pure_virtual
#define _v_media_phy2log &__media_pure_virtual
#define _v_media_bind_log2phy &__media_pure_virtual
#define _v_media_set_phyblock_failed &__media_pure_virtual
#define _v_media_is_phyblock_reserved &media_is_phyblock_reserved
#define _v_media_is_phyblock_ok &__media_pure_virtual
#define _v_media_is_phyblock_blank &__media_pure_virtual
#define _v_media_read_extra_data &__media_pure_virtual
#define _v_media_write_extra_data &__media_pure_virtual
#define _v_media_clear_extra_data &media_clear_extra_data
#define _v_media_resolve_conflict &media_resolve_conflict
#define _v_media_set_read_addr &__media_pure_virtual
#define _v_media_set_write_addr &__media_pure_virtual
#define _v_media_set_erase_addr &__media_pure_virtual
#define _v_media_block_has_bad_data &media_block_has_bad_data
#else
#define _v_media_erase_block &media_erase_block
#define _v_media_read_sector &media_read_sector
#define _v_media_write_sector &media_write_sector
#define _v_media_copy_sector &media_copy_sector
#define _v_media_read_cis &media_read_cis
#define _v_media_phy2log &media_phy2log
#define _v_media_bind_log2phy &media_bind_log2phy
#define _v_media_set_phyblock_failed &media_set_phyblock_failed
#define _v_media_is_phyblock_reserved &media_is_phyblock_reserved
#define _v_media_is_phyblock_ok &media_is_phyblock_ok
#define _v_media_is_phyblock_blank &media_is_phyblock_blank
#define _v_media_read_extra_data &media_read_extra_data
#define _v_media_write_extra_data &media_write_extra_data
#define _v_media_clear_extra_data &media_clear_extra_data
#define _v_media_resolve_conflict &media_resolve_conflict
#define _v_media_set_read_addr &media_set_read_addr
#define _v_media_set_write_addr &media_set_write_addr
#define _v_media_set_erase_addr &media_set_erase_addr
#define _v_media_block_has_bad_data &media_block_has_bad_data
#endif
//------------------------------------------------------------------------------
// virtual method table
#define _v_media \
(t_thd_entry) _v_media_erase_block, \
(t_thd_entry) _v_media_read_sector, \
(t_thd_entry) _v_media_write_sector, \
(t_thd_entry) _v_media_copy_sector,\
(t_thd_entry) _v_media_read_cis, \
(t_thd_entry) _v_media_phy2log, \
(t_thd_entry) _v_media_bind_log2phy, \
(t_thd_entry) _v_media_set_phyblock_failed, \
(t_thd_entry) _v_media_is_phyblock_reserved,\
(t_thd_entry) _v_media_is_phyblock_ok,\
(t_thd_entry) _v_media_is_phyblock_blank,\
(t_thd_entry) _v_media_read_extra_data,\
(t_thd_entry) _v_media_write_extra_data,\
(t_thd_entry) _v_media_clear_extra_data,\
(t_thd_entry) _v_media_resolve_conflict,\
(t_thd_entry) _v_media_set_read_addr,\
(t_thd_entry) _v_media_set_write_addr,\
(t_thd_entry) _v_media_set_erase_addr,\
(t_thd_entry) _v_media_block_has_bad_data,
//------------------------------------------------------------------------------
// virtual methods and non-virtual methods
extern code _vtbl_decl(media) ;
//------------------------------------------------------------------------------
// indicies into the virtual methos table
typedef uint8 t_media_vtbl_ix ;
typedef enum e_media_vtbl_entry
{
k_ix_media_erase_block=0,
k_ix_media_read_sector,
k_ix_media_write_sector,
k_ix_media_copy_sector,
k_ix_media_read_cis,
k_ix_media_phy2log,
k_ix_media_bind_log2phy,
k_ix_media_set_phyblock_failed,
k_ix_media_is_phyblock_reserved,
k_ix_media_is_phyblock_ok,
k_ix_media_is_phyblock_blank,
k_ix_media_read_extra_data,
k_ix_media_write_extra_data,
k_ix_media_clear_extra_data,
k_ix_media_resolve_conflict,
k_ix_media_set_read_addr,
k_ix_media_set_write_addr,
k_ix_media_set_erase_addr,
k_ix_media_block_has_bad_data,
k_media_vtbl_sz
} ;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
#define _media_erase_block() (*v_media_erase_block)()
#define _media_read_sector() (*v_media_read_sector)()
#define _media_write_sector() (*v_media_write_sector)()
#define _media_copy_sector() (*v_media_copy_sector)()
#define _media_read_cis() (*v_media_read_cis)()
#define _media_phy2log() (*v_media_phy2log)()
#define _media_bind_log2phy() (*v_media_bind_log2phy)()
#define _media_set_phyblock_failed() (*v_media_set_phyblock_failed)()
#define _media_is_phyblock_reserved()(*v_media_is_phyblock_reserved)()
#define _media_is_phyblock_ok() (*v_media_is_phyblock_ok)()
#define _media_is_phyblock_blank() (*v_media_is_phyblock_blank)()
#define _media_read_extra_data() (*v_media_read_extra_data)()
#define _media_write_extra_data() (*v_media_write_extra_data)()
#define _media_clear_extra_data() (*v_media_clear_extra_data)()
#define _media_resolve_conflict() (*v_media_resolve_conflict)()
#define _media_set_read_addr() (*v_media_set_read_addr)()
#define _media_set_write_addr() (*v_media_set_write_addr)()
#define _media_set_erase_addr() (*v_media_set_erase_addr)()
#define _media_block_has_bad_data() (*v_media_block_has_bad_data)()
extern xdata t_media_entry v_media_erase_block;
extern xdata t_media_entry v_media_read_sector;
extern xdata t_media_entry v_media_write_sector;
extern xdata t_media_entry v_media_copy_sector;
extern xdata t_media_entry v_media_read_cis;
extern xdata t_media_entry v_media_phy2log;
extern xdata t_media_entry v_media_bind_log2phy;
extern xdata t_media_entry v_media_set_phyblock_failed;
extern xdata t_media_entry v_media_is_phyblock_reserved;
extern xdata t_media_entry v_media_is_phyblock_ok;
extern xdata t_media_entry v_media_is_phyblock_blank;
extern xdata t_media_entry v_media_read_extra_data;
extern xdata t_media_entry v_media_write_extra_data;
extern xdata t_media_entry v_media_clear_extra_data;
extern xdata t_media_entry v_media_resolve_conflict;
extern xdata t_media_entry v_media_set_read_addr;
extern xdata t_media_entry v_media_set_write_addr;
extern xdata t_media_entry v_media_set_erase_addr;
extern xdata t_media_entry v_media_block_has_bad_data;
//+-----------------------------------------------------------------------------
// Name:
// media_dfa_report_media_geometry()
//
// Declaration:
// void media_dfa_report_media_geometry(void) reentrant ;
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
void media_dfa_erase() reentrant;
//+-----------------------------------------------------------------------------
// Name:
// media_dfa_report_media_geometry()
//
// Declaration:
// void media_dfa_report_media_geometry(void) reentrant ;
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
void media_dfa_report_media_geometry(void) reentrant;
//------------------------------------------------------------------------------
// exported globals
extern xdata uint8 g_active_media;
extern xdata t_media_data g_media_data[k_max_media] ;
extern code t_thd_entry* g_media_tbl[k_max_media] ;
#else
#error "warning: header included too many times!"
#endif // __lun_dot_h__
//---eof------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?