📄 protocol.h
字号:
typedef struct s_medium_types_supported_page
{
uint8 page_code;
uint8 page_length;
uint8 reserved_1;
uint8 reserved_2;
uint8 medium_type_1;
uint8 medium_type_2;
uint8 medium_type_3;
uint8 medium_type_4;
} t_str_medium_types_supported_page;
typedef uint8 t_buf_medium_types_page[k_sz_mode_page_medium_types];
extern code t_buf_medium_types_page mode_page_medium_types;
//------------------------------------------------------------------------------
// notch and partition page (0x0c)
#define k_mode_page_notch_page_length 0x16
#define k_sz_mode_page_notch (k_mode_page_notch_page_length + 2)
#define kbm_opt_2_nd 0x80
#define kbm_opt_2_lpn 0x40
typedef struct s_notch_page
{
uint8 page_code;
uint8 page_length;
uint8 opt_2;
uint8 reserved;
uint16 max_notches;
uint16 active_notch;
uint16 starting_boundry;
uint16 ending_boundry;
uint16 pages_notched;
} t_str_notch_page;
typedef uint8 t_buf_notch_page[k_sz_mode_page_notch];
extern code t_buf_notch_page mode_page_notch;
//------------------------------------------------------------------------------
// power condition 0d page (0x0d or 0x1a)
#define k_mode_page_power_condition_page_length 0x0a
#define k_sz_mode_page_power_condition (k_mode_page_power_condition_page_length+2)
#define kbm_mode_page_power_condition_opt3_idle 0x02
#define kbm_mode_page_power_condition_opt3_standby 0x01
typedef struct s_power_condition_page
{
uint8 page_code;
uint8 page_length;
uint8 reserved;
uint8 opt_3;
uint32 idle_condition_timer;
uint32 standby_condition_timer;
} t_str_power_condition_page;
typedef uint8 t_buf_power_condition[k_sz_mode_page_power_condition];
extern code t_buf_power_condition mode_page_power_condition;
//------------------------------------------------------------------------------
// xor control mode page (0x10)
#define k_mode_page_xor_control_page_length 0x16
#define kbm_mode_page_xor_control_opt2_xordis 0x02
typedef struct s_xor_control_page
{
uint8 page_code;
uint8 page_length;
uint8 opt_2;
uint8 reserved;
uint32 maximum_xor_write_size;
uint32 reserved2;
uint32 max_regenerate_size;
uint32 max_rebuild_read_size;
uint16 reserved3;
uint16 rebuild_delay;
} t_str_xor_control_page;
#define k_sz_mode_page_xor_control (k_mode_page_xor_control_page_length+2)
typedef uint8 t_buf_xor_control_page[k_sz_mode_page_xor_control];
extern code t_buf_xor_control_page mode_page_xor_control;
// ----------------------------------------------------------------------
// informational exceptions control page (0x1c)
// ----------------------------------------------------------------------
#define k_mode_page_info_excpt_ctl_page_length 0x0a
#define kbm_mode_page_info_excpt_ctl_opt2_perf 0x80 // performance bit
#define kbm_mode_page_info_excpt_ctl_opt2_dexcpt 0x08
#define kbm_mode_page_info_excpt_ctl_opt2_test 0x04
#define kbm_mode_page_info_excpt_ctl_opt2_logerr 0x01
#define k_mode_page_info_excpt_ctl_mrie_none 0x00 // no reporting
#define k_mode_page_info_excpt_ctl_aer 0x01 // asynch event reporting
#define k_mode_page_info_excpt_ctl_gua 0x02 // generate unit attention
#define k_mode_page_info_excpt_ctl_cgre 0x03 // conditionally generate recovered err
#define k_mode_page_info_excpt_ctl_ugre 0x04 // unconditionally generate recovered err
#define k_mode_page_info_excpt_ctl_nosense 0x05 // generate no sense
#define k_mode_page_info_excpt_ctl_onrequest 0x06 // only report info exception on request
typedef struct s_info_excpt_control_page
{
uint8 page_code;
uint8 page_length;
uint8 opt_2;
uint8 mrie;
uint32 interval_timer;
uint32 report_count;
} t_str_info_excpt_control_page;
#define k_sz_mode_page_info_excpt_ctl (k_mode_page_info_excpt_ctl_page_length+2)
typedef uint8 t_buf_info_excpt_ctl[k_sz_mode_page_info_excpt_ctl];
extern code t_buf_info_excpt_ctl mode_page_info_excpt_ctl;
extern code uint8 mode_page_all[];
#define k_sz_mode_page_all \
sizeof(mode_page_rw_err) + \
sizeof(mode_page_dct_rct) + \
sizeof(mode_page_format_device) + \
sizeof(mode_page_rigid_disk) + \
sizeof(mode_page_verify_error_recovery) + \
sizeof(mode_page_caching) + \
sizeof(mode_page_control) + \
sizeof(mode_page_medium_types) + \
sizeof(mode_page_notch) + \
sizeof(mode_page_power_condition) + \
sizeof(mode_page_info_excpt_ctl)
//------------------------------------------------------------------------------
// Request Sense
typedef struct s_sense
{
uint8 error_code;
uint8 reserved;
uint8 sense_key;
uint8 vendor_specific0[4];
uint8 additional_length;
uint8 vendor_specific1[4];
uint8 additional_sense_code;
uint8 asc_qualifier;
uint8 field_replacable_unit_code;
uint8 sense_key_specific[3];
} t_sense;
extern code t_sense sense_none;
extern code t_sense sense_bad_lun;
extern code t_sense sense_media_change;
extern code t_sense sense_no_media;
extern code t_sense sense_read_error;
extern code t_sense sense_fmt_failed;
extern code t_sense sense_no_seek;
extern code t_sense sense_por;
extern code t_sense sense_illegal_request;
extern code t_sense sense_write_error;
extern code t_sense sense_no_fmt;
extern code t_sense sense_write_protect;
extern code t_sense sense_write_protect_hw;
extern code t_sense sense_write_protect_sw_lun;
extern code t_sense sense_write_protect_assoc;
extern code t_sense sense_write_protect_persist;
extern code t_sense sense_write_protect_perm;
extern code t_sense sense_illegal_cmdpkt;
extern code t_sense sense_saving_not_support;
extern code t_sense sense_illegal_length;
extern code t_sense sense_illegal_address;
extern code t_sense sense_illegal_opcode;
extern code t_sense sense_becoming_ready;
//------------------------------------------------------------------------------
// Start Stop Unit
#define kbm_scsi_ssu_msk_immed 0x01 // 0 => return on completion, 1 => return after cbw validation
#define kbm_scsi_ssu_msk_pc 0xf0 // power conditions
#define k_scsi_ssu_pc_nc 0x00 // no change in pc
#define k_scsi_ssu_pc_active 0x10 // place device in active power condition
#define k_scsi_ssu_pc_idle 0x20 // place device in idle power condition
#define k_scsi_ssu_pc_standby 0x30 // place device in standby power condition
#define k_scsi_ssu_pc_sleep 0x50 // place device in sleep power condition
#define k_scsi_ssu_pc_dev_ctl 0x70 // leave control of power condition to device
#define k_scsi_ssu_pc_idle_cdm_0 0xa0 // force idle timer (chronal displacement monitor) to 0
#define k_scsi_ssu_pc_standby_cdm_0 0xb0 // force standby time to 0
#define kbm_scsi_ssu_msk_action 0x03 // load-or-eject / start-stop action
#define kbm_scsi_ssu_action_stop 0x00 // stop device only (do not unload)
#define kbm_scsi_ssu_action_start 0x01 // start device only (do not load media)
#define kbm_scsi_ssu_action_unload 0x02 // eject (or unload) media
#define kbm_scsi_ssu_action_load 0x03 // load media
typedef struct s_param_start_stop_unit
{
uint8 opts;
uint8 reserved1 ;
uint8 reserved2 ;
uint8 pc_action ;
uint8 control;
} t_param_start_stop_unit;
//------------------------------------------------------------------------------
// union of all that is atapi
typedef struct s_atapi_cb
{
uint8 opcode;
union u_atapi_parameters
{
t_param_rw rw;
t_param_verify verify;
#if 0
t_param_req_sense req_sense;
t_param_inquiry inquiry;
t_param_mode_sense mode_sense;
t_param_mode_select mode_select;
t_param_rd_cap rd_cap;
t_param_rd_fmt_cap rd_fmt_cap;
#endif
uint8 bytes[15];
} param;
} t_atapi_cb;
// union of all that is scsi
typedef struct s_scsi_cb
{
uint8 opcode;
union u_scsi_params
{
t_param_rw rw ;
t_param_verify verify ;
t_param_start_stop_unit start_stop_unit ;
t_param_read_format_capacity read_format_capacity ;
#if 0
t_param_mode_sense6 mode_sense6 ;
t_param_mode_sense10 mode_sense10 ;
#endif
uint8 bytes[15];
} param ;
} t_scsi_cb ;
//------------------------------------------------------------------------------
// globally accessible flags and variables
//extern uint16 g_intr_cnt; // count ata intr vs. ide INTR detections
extern bit g_use_dma;
extern bit g_disable_iordy;
// ata device characteristics
extern xdata uint8 g_dev_max_dma_mode; // represents max DMA mode supported by the device
//------------------------------------------------------------------------------
// fatal exception handling
void dev_exception(uint16 err) reentrant;
#define k_err_none (0)
#define k_err_unreachable_code (1)
#define k_err_unexpected_synchronizer (2)
//---eof------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -