📄 media.h
字号:
//
// Return:
//
// Notes:
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result media_is_phyblock_ok(void) reentrant ;
//+-----------------------------------------------------------------------------
// Name:
// media_is_phyblock_blank()
//
// Declaration:
// t_result media_is_phyblock_blank(void) reentrant
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result media_is_phyblock_blank(void) reentrant ;
//+-----------------------------------------------------------------------------
// Name:
// ms_media_is_phyblock_reserved()
//
// Declaration:
// t_result ms_media_is_phyblock_reserved() reentrant
//
// Purpose:
// tells mapper whether or not a block is reserved (i.e. boot area) or
// usable by mapper & user.
//
// Arguments:
//
// Return:
// k_true if physical zone/block can be a user-accessible block
// k_false if physical block should be ignored by the mapper for everything
//
// Notes:
// a reserved block is NOT a factory or user-marked bad block. it is a block reserved
// for storing private data or boot information. (i.e. boot blocks, boot area, etc.)
// blocks marked bad by the factory will be detected in a subsequent call
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result media_is_phyblock_reserved(void) reentrant;
//+-----------------------------------------------------------------------------
// Name:
// media_read_extra_data()
//
// Declaration:
// t_result media_read_extra_data(void) reentrant
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result media_read_extra_data(void) reentrant ;
//+-----------------------------------------------------------------------------
// Name:
// media_write_extra_data()
//
// Declaration:
// t_result media_write_extra_data(void) reentrant
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result media_write_extra_data(void) reentrant ;
//+-----------------------------------------------------------------------------
// Name:
// media_clear_extra_data()
//
// Declaration:
// t_result media_clear_extra_data(void) reentrant
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result media_clear_extra_data(void) reentrant ;
//+-----------------------------------------------------------------------------
// Name:
// media_resolve_conflict()
//
// Declaration:
// t_result sm_media_resolve_conflict(void) reentrant
//
// Purpose:
// provide common conflict resolution algorithm (checking for
// errors in the extra-data... if both phyblocks have a valid
// binding according to the extra data, then the derived
// method will be called to pick one.
//
// Arguments:
// - see Notes
//
// Return:
// k_success always
//
// Notes:
// when called,
// g_addr_rd_phy_blk contains one of the bindings,
// g_addr_wr_phy_blk contains the original mapping
//
// before returning, ensure:
// g_addr_rd_phy_blk should contain the correct mapping
// g_addr_wr_phy_blk should contain the block to be erased (or not used)
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_result media_resolve_conflict(void) reentrant ;
//+-----------------------------------------------------------------------------
// Name:
// media_erase_card()
//
// Declaration:
// t_result media_erase_card() reentrant
//
// Purpose:
// erase every physical block on a flash card except for the boot block
//
// Arguments:
// TBD
//
// Return:
// k_success always
//
// Notes:
// TBD
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
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
#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
//------------------------------------------------------------------------------
// 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 uint8 g_media_data[k_max_media][sizeof(t_media_data)] ;
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -