📄 lun.c
字号:
//
// Return:
//
// Notes:
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
t_bool lun_available(uint8 lun) reentrant
{
return (g_lun_tbl[lun]!=_vtbl(nil));
}
//+-----------------------------------------------------------------------------
// Name:
// media_set_active()
//
// Declaration:
// void media_set_active(uint8 media) reentrant
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
void lun_set_active(uint8 lun) reentrant
{
mcu_begin_critical_section() ;
if(g_active_lun != lun)
{
if (g_active_lun<k_max_phy_lun)
{
trace2(0, lun, 0, "paging data out: lun %d ( -> X-%04X )", g_active_lun, ((uint16)(&g_lun_data[g_active_lun])));
memcpy(&(g_lun_data[g_active_lun]), (uint8 *) &g_lun_data_sensep, k_lun_data_sz);
}
trace2(0, lun, 0, "paging data in: lun %d ( <- X-%04X )", lun, ((uint16)(&g_lun_data[lun]))) ;
memcpy((uint8 *) &g_lun_data_sensep, &(g_lun_data[lun]), k_lun_data_sz) ;
if( g_lun_tbl[lun]!=_vtbl(nil) )
{
trace2(0, lun, 0, "paging vtable in: lun %d ( <- X%04X )", lun, ((uint16)(g_lun_tbl[lun]))) ;
memcpy((uint8 *) &v_lun_process_idle, g_lun_tbl[lun], sizeof(t_thd_entry)*k_lun_vtbl_sz) ;
}
g_active_lun=lun;
}
trace1(0, lun, 0, "lun %d active", g_active_lun) ;
mcu_end_critical_section() ;
}
#pragma AREGS
#ifndef k_mcu_97242
#ifdef k_dbg_on
//+-----------------------------------------------------------------------------
// Name:
// lun_dump_sense
//
// Declaration:
// void lun_dump_sense(uint8 idx) reentrant
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
void lun_dump_sense(uint8 idx) reentrant
{
t_sense code *psense = _lun_data_rd(idx, sensep);
mcu_begin_critical_section() ;
trace3(0, lun, 99, "sense info: key:%02x asc:%02x ascq:%02x", psense->sense_key, psense->additional_sense_code, psense->asc_qualifier );
if (&sense_none == psense)
{
trace0(0, lun, 99, "sense_none");
}
/*
if (&sense_bad_lun == psense)
{
trace0(0, lun, 99, "sense_bad_lun");
}
*/
if (&sense_media_change == psense)
{
trace0(0, lun, 99, "sense_media_change");
}
if (&sense_no_media == psense)
{
trace0(0, lun, 99, "sense_no_media");
}
/*
if (&sense_becoming_ready == psense)
{
trace0(0, lun, 99, "sense_becoming_ready");
}
*/
if (&sense_read_error == psense)
{
trace0(0, lun, 99, "sense_read_error");
}
/*
if (&sense_fmt_failed == psense)
{
trace0(0, lun, 99, "sense_fmt_failed");
}
if (&sense_no_seek == psense)
{
trace0(0, lun, 99, "sense_no_seek");
}
*/
if (&sense_por == psense)
{
trace0(0, lun, 99, "sense_por");
}
if (&sense_illegal_request == psense)
{
trace0(0, lun, 99, "sense_illegal_request");
}
if (&sense_write_error == psense)
{
trace0(0, lun, 99, "sense_write_error");
}
/*
if (&sense_no_fmt == psense)
{
trace0(0, lun, 99, "sense_no_fmt");
}
*/
if (&sense_write_protect == psense)
{
trace0(0, lun, 99, "sense_write_protect");
}
/*
if (&sense_write_protect_hw == psense)
{
trace0(0, lun, 99, "sense_write_protect_hw");
}
if (&sense_write_protect_sw_lun == psense)
{
trace0(0, lun, 99, "sense_write_protect_sw_lun");
}
if (&sense_write_protect_assoc == psense)
{
trace0(0, lun, 99, "sense_write_protect_assoc");
}
if (&sense_write_protect_persist == psense)
{
trace0(0, lun, 99, "sense_write_protect_persist");
}
if (&sense_write_protect_perm == psense)
{
trace0(0, lun, 99, "sense_write_protect_perm");
}
*/
if (&sense_illegal_cmdpkt == psense)
{
trace0(0, lun, 99, "sense_illegal_cmdpkt");
}
/*
if (&sense_saving_not_support == psense)
{
trace0(0, lun, 99, "sense_saving_not_support");
}
*/
if (&sense_illegal_length == psense)
{
trace0(0, lun, 99, "sense_illegal_length");
}
if (&sense_illegal_address == psense)
{
trace0(0, lun, 99, "sense_illegal_address");
}
if (&sense_illegal_opcode == psense)
{
trace0(0, lun, 99, "sense_illegal_opcode");
}
mcu_end_critical_section() ;
}
#endif
#endif
//+-----------------------------------------------------------------------------
// Name:
// lun_process_idle
//
// Declaration:
// void lun_process_idle(void) reentrant
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
// This is a FUNCTION, NOT a DFA.
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
void lun_process_idle(void) reentrant
{
trace0(0, lun, 0, "lun_process_idle() - error: pure virtual function must be overridden");
}
//+-----------------------------------------------------------------------------
// Name:
// lun_enable_mux
//
// Declaration:
// void lun_enable_mux(void) reentrant
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
// This is a FUNCTION, NOT a DFA.
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
void lun_enable_mux(void) reentrant
{
trace0(0, lun, 0, "lun_enable_mux() - error: pure virtual function must be overridden");
}
//+-----------------------------------------------------------------------------
// Name:
// lun_reset_controller
//
// Declaration:
// void lun_reset_controller(void) reentrant
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
// This is a FUNCTION, NOT a DFA.
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
void lun_reset_controller(void) reentrant
{
trace0(0, lun, 0, "lun_reset_controller() - warning: pure virtual function should be overridden");
}
//+-----------------------------------------------------------------------------
// Name:
// lun_initialize_controller
//
// Declaration:
// void lun_initialize_controller(void) reentrant
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
// This is a FUNCTION, NOT a DFA.
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
void lun_initialize_controller(void) reentrant
{
trace0(0, lun, 0, "lun_initialize_controller() - warning: pure virtual function should be overridden");
}
//+-----------------------------------------------------------------------------
// Name:
// dfa_lun_reset_media
//
// Declaration:
// void dfa_lun_reset_media(void) reentrant
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
// - This is a dfa.
// - Should be overridden. Derived method should set callbacks, then call this.
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
void dfa_lun_reset_media(void) reentrant
{
trace0(0, lun, 0, "dfa_lun_reset_media() - error: pure virtual method must be overridden");
_thread_return_dfa(k_error);
}
//+-----------------------------------------------------------------------------
// Name:
// dfa_lun_initialize_media
//
// Declaration:
// void dfa_lun_initialize_media(void) reentrant
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
// - This is a dfa.
// - Should be overridden. Derived method should set callbacks, then call this.
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
void dfa_lun_initialize_media(void) reentrant
{
trace0(0, lun, 0, "dfa_lun_initialize_media() - error: pure virtual method must be overridden");
_thread_return_dfa(k_error);
}
//+-----------------------------------------------------------------------------
// Name:
// dfa_lun_identify_media
//
// Declaration:
// void dfa_lun_identify_media(void);
//
// Purpose:
//
// Arguments:
//
// Return:
//
// Notes:
// - This is a dfa.
// - Should be overridden. Derived method should set callbacks, then call this.
//
// Since:
// fmc-1.0
//------------------------------------------------------------------------------
void dfa_lun_identify_media(void) reentrant
{
trace0(0, lun, 0, "dfa_lun_identify_media() - error: pure virtual method must be overridden");
_thread_return_dfa(k_error);
}
//+-----------------------------------------------------------------------------
// Name:
// dfa_lun_test_unit_ready
//
// Declaration:
// void dfa_lun_test_unit_ready(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -