⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 media.h

📁 <B>SMSC USB2.0 Flash硬盘驱动源码</B>
💻 H
📖 第 1 页 / 共 2 页
字号:
//
// 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 + -