📄 ata.h
字号:
#define kbm_ata_iddev_fs_smart 0x0001
#define k_ata_dev_cmdset_support_2 83
#define k_ata_dev_cmdset_enabled_2 86
#define kbm_ata_iddev_cmd_flush_cache_ext 0x2000
#define kbm_ata_iddev_cmd_flush_cache 0x1000
#define kbm_ata_iddev_fs_device_cfg_overlay 0x0800
#define kbm_ata_iddev_fs_48bit_address 0x0400
#define kbm_ata_iddev_fs_auto_acoustic_mgmt 0x0200
#define kbm_ata_iddev_cmd_set_max_security_ext 0x0100
#define kbm_ata_iddev_cfg_set_features_spinup_req_on_por 0x0040
#define kbm_ata_iddev_fs_powerup_in_standby 0x0020
#define kbm_ata_iddev_fs_removable_media_status_notify 0x0010
#define kbm_ata_iddev_fs_adv_power_mgmt 0x0008
#define kbm_ata_iddev_fs_cfa 0x0004
#define kbm_ata_iddev_cmd_rw_dma_queued 0x0002
#define kbm_ata_iddev_cmd_download_microcode 0x0001
#define k_ata_dev_cmdset_support_3 84
#define k_ata_dev_cmdset_enabled_3 87
#define kbm_ata_iddev_fs_smart_selftest 0x0002
#define kbm_ata_iddev_fs_smart_error_logging 0x0001
// ----------------------------------------------------------------------------
// ata identify device ultra dma mode support (word 88)
// ----------------------------------------------------------------------------
#define k_ata_iddev_udma_mode_support 88
#define kbm_ata_iddev_udma_mode_0_supported 0x0001
#define kbm_ata_iddev_udma_mode_1_supported 0x0002
#define kbm_ata_iddev_udma_mode_2_supported 0x0004
#define kbm_ata_iddev_udma_mode_3_supported 0x0008
#define kbm_ata_iddev_udma_mode_4_supported 0x0010
#define kbm_ata_iddev_udma_mode_5_supported 0x0020
#define kbm_ata_iddev_udma_mode_0_selected 0x0040
#define kbm_ata_iddev_udma_mode_1_selected 0x0080
#define kbm_ata_iddev_udma_mode_2_selected 0x0100
#define kbm_ata_iddev_udma_mode_3_selected 0x0200
#define kbm_ata_iddev_udma_mode_4_selected 0x0400
#define kbm_ata_iddev_udma_mode_5_selected 0x0800
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// ata identify packet device
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// ata identify device general config (word 0)
// ----------------------------------------------------------------------------
#define k_ata_idpktdev_general_config 0
#define kbm_msk_ata_idpktdev_general_config_drq_type 0x0060
#define kbm_ata_idpktdev_general_config_drq_poll 0x0000 // host polls for DRQ. Device does not interrupt
#define kbm_ata_idpktdev_general_config_drq_intrpt_10ms 0x0020 // device will interrupt and assert drq w/in 10 ms
#define kbm_ata_idpktdev_general_config_drq_intrpt_50us 0x0040 // device will interrupt and assert drq w/in 50 us
// ----------------------------------------------------------------------------
// ata identify device general config (word 0)
// ----------------------------------------------------------------------------
// Capabilities
#define kbm_ata_idpktdev_capabilities_dma 0x0100 // Capabilities - Device is capable of DMA transfers
#define kbm_ata_idpktdev_capabilities_lba 0x0200 // Capabilities - Device supports Logical Block Addressing - Mandatory for ATAPI devices
#define kbm_ata_idpktdev_capabilities_disable_iordy 0x0400 // Capabilities - Device supports disabling IORDY
#define kbm_ata_idpktdev_capabilities_support_iordy 0x0800 // Capabilities - Device supports use of IORDY bit
// ----------------------------------------------------------------------------
// ata identify device general config (word 0)
// ----------------------------------------------------------------------------
// DMA Mode
#define k_ata_idpktdev_mwdma_mode_support 63
#define kbm_ata_idpktdev_mwdma_mode_0_supported 0x0001
#define kbm_ata_idpktdev_mwdma_mode_1_supported 0x0002
#define kbm_ata_idpktdev_mwdma_mode_2_supported 0x0004
#define kbm_ata_idpktdev_mwdma_mode_0_selected 0x0100
#define kbm_ata_idpktdev_mwdma_mode_1_selected 0x0200
#define kbm_ata_idpktdev_mwdma_mode_2_selected 0x0400
// ----------------------------------------------------------------------------
// ata identify device general config (word 0)
// ----------------------------------------------------------------------------
#define k_ata_idpktdev_udma_mode_support 88
#define kbm_ata_idpktdev_udma_mode_0_supported 0x0001
#define kbm_ata_idpktdev_udma_mode_1_supported 0x0002
#define kbm_ata_idpktdev_udma_mode_2_supported 0x0004
#define kbm_ata_idpktdev_udma_mode_3_supported 0x0008
#define kbm_ata_idpktdev_udma_mode_4_supported 0x0010
#define kbm_ata_idpktdev_udma_mode_5_supported 0x0020
#define kbm_ata_idpktdev_udma_mode_0_selected 0x0040
#define kbm_ata_idpktdev_udma_mode_1_selected 0x0080
#define kbm_ata_idpktdev_udma_mode_2_selected 0x0100
#define kbm_ata_idpktdev_udma_mode_3_selected 0x0200
#define kbm_ata_idpktdev_udma_mode_4_selected 0x0400
#define kbm_ata_idpktdev_udma_mode_5_selected 0x0800
t_result ata_identify_device(uint8 cmd) reentrant;
// ------------------------------------------------------------------
// Set features functions
// ------------------------------------------------------------------
#define k_set_features_enable_write_cache 0x02
#define k_set_features_set_transfer_mode 0x03
#define k_set_features_enable_adv_power_mgmt 0x05
#define k_set_features_enable_powerup_standby 0x06
#define k_set_features_powerup_in_standby_set_dev_spinup 0x07
#define k_set_features_disable_media_status_notification 0x31
#define k_set_features_enable_release_intrpt 0x5d
#define k_set_features_enable_service_intrpt 0x5e
#define k_set_features_disable_revert_to_power_on_defaults 0x66
#define k_set_features_disable_write_cache 0x82
#define k_set_features_disable_adv_power_mgmt 0x85
#define k_set_features_disable_powerup_standby 0x86
#define k_set_features_enable_media_status_notification 0x95
#define k_set_features_enable_read_look_ahead_feature 0xaa
#define k_set_features_enable_reverting_to_power_on_defaults 0xcc
#define k_set_features_disable_release_intrpt 0xdd
#define k_set_features_disable_service_intrpt 0xde
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
extern t_result ata_set_features(uint8 feature, uint8 sc, uint8 sn, uint8 cyl_hi, uint8 cyl_lo) reentrant;
// -----------------------------------------------------------------------------
// set_features sub commands
// _ata_set_transfer_mode(transfer_mode, transfer_level)
// _ata_enable_adv_pwr_mgmt( t_bool )
// _ata_enable_pwrup_in_standby( t_bool )
// _ata_enable_media_sts_notify( t_bool )
// _ata_enable_release_irq( t_bool )
// _ata_enable_service_irq( t_bool )
// _ata_enable_revert_to_por_defaults( t_bool )
// _ata_enable_write_cache( t_bool )
// _ata_enable_rd_lookahead( t_bool )
// -----------------------------------------------------------------------------
#define kbm_sf_tm_pio_default 0x00
#define kbm_sf_tm_pio_flow_control 0x08
#define kbm_sf_tm_mwdma 0x20
#define kbm_sf_tm_udma 0x40
#define kbm_sf_tm_pio_disable_iordy 0x01
#define kbm_sf_tm_mode0 0x00
#define kbm_sf_tm_mode1 0x01
#define kbm_sf_tm_mode2 0x02
#define kbm_sf_tm_mode3 0x03
#define kbm_sf_tm_mode4 0x04
#define kbm_sf_tm_mode5 0x05
#define _ata_set_transfer_mode(transfer_mode, transfer_level) \
ata_set_features(k_set_features_set_transfer_mode, (transfer_mode)|transfer_level, 0, 0, 0 );
// -----------------------------------------------------------------------------
// ata state machine globals
extern xdata uint8 g_dma_mode_current;
// ata device capabilities & properties
// these are all relevant properties from ata identify device data.
//extern xdata uint32 g_total_sectors;
extern xdata uint16 g_ata_dev_cmdset_support_1;
extern xdata uint16 g_ata_dev_cmdset_support_2;
extern xdata uint16 g_ata_dev_cmdset_support_3;
extern xdata uint16 g_ata_dev_cmdset_enabled_1;
extern xdata uint16 g_ata_dev_cmdset_enabled_2;
extern xdata uint16 g_ata_dev_cmdset_enabled_3;
extern xdata uint16 g_ata_dev_num_log_cyl;
extern xdata uint16 g_ata_dev_num_log_hds;
extern xdata uint16 g_ata_dev_num_log_sec_per_trk;
extern xdata uint16 g_ata_dev_caps_1;
extern xdata uint16 g_ata_dev_caps_2;
#define k_sz_ata_dev_str_ser 20
extern xdata uint8 g_ata_dev_has_ser;
extern xdata uint8 g_ata_dev_str_ser_sz;
extern xdata uint8 g_ata_dev_str_ser[k_sz_ata_dev_str_ser]; // $$$ cds -> move to fmc.c
//------------------------------------------------------------------------------
// ata_reset is s function called by dfa_ata_reset_media
void ata_reset(void) reentrant;
void dfa_ata_reset_media(void) reentrant;
#undef _v_dfa_lun_reset_media
#define _v_dfa_lun_reset_media dfa_ata_reset_media
//------------------------------------------------------------------------------
void dfa_ata_initialize_media(void) reentrant;
#undef _v_dfa_lun_initialize_media
#define _v_dfa_lun_initialize_media dfa_ata_initialize_media
//------------------------------------------------------------------------------
void dfa_ata_identify_media(void) reentrant;
#undef _v_dfa_lun_identify_media
#define _v_dfa_lun_identify_media dfa_ata_identify_media
//------------------------------------------------------------------------------
void dfa_ata_read(void) reentrant;
#undef _v_dfa_lun_read
#define _v_dfa_lun_read dfa_ata_read
//------------------------------------------------------------------------------
void dfa_ata_write(void) reentrant;
#undef _v_dfa_lun_write
#define _v_dfa_lun_write dfa_ata_write
//------------------------------------------------------------------------------
void dfa_ata_verify(void) reentrant;
#undef _v_dfa_lun_verify
#define _v_dfa_lun_verify dfa_ata_verify
//------------------------------------------------------------------------------
// ata inherits from lun
#define _v_ata _v_lun
typedef uint8 t_ata_vtbl_ix;
typedef enum e_ata_vtbl_entry
{
k_ata_vtbl_sz = k_lun_vtbl_sz
};
extern code _vtbl_decl(ata);
#else
#error "warning: header included too many times!"
#endif // __ata_dot_h__
//---eof------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -