📄 ata.h
字号:
#define k_ata_command_packet 0xa0
#define k_ata_command_read_buffer 0xe4
#define k_ata_command_read_dma 0xc8
#define k_ata_command_read_dma_ext 0x25
#define k_ata_command_read_dma_queued 0xc7
#define k_ata_command_read_dma_queued_ext 0x26
#define k_ata_command_read_multiple 0xc4
#define k_ata_command_read_multiple_ext 0x29
#define k_ata_command_read_native_max_address 0xf8
#define k_ata_command_read_native_max_address_ext 0x27
#define k_ata_command_read_sectors 0x20
#define k_ata_command_read_sectors_ext 0x24
#define k_ata_command_read_verify_sectors 0x40
#define k_ata_command_read_verify_sectors_ext 0x42
#define k_ata_command_security_disable_password 0xf6
#define k_ata_command_security_erase_prepare 0xf3
#define k_ata_command_security_erase_unit 0xf4
#define k_ata_command_security_freeze 0xf5
#define k_ata_command_security_set_password 0xf1
#define k_ata_command_security_unlock 0xf2
#define k_ata_command_seek 0x70
#define k_ata_command_service 0xa2
#define k_ata_command_set_features 0xeF
#define k_ata_command_set_max_address 0xf9
#define k_ata_command_set_max_address_ext 0x37
#define k_ata_command_set_multiple_mode 0xc6
#define k_ata_command_sleep 0xe6
#define k_ata_command_smart_command 0xb0
#define k_ata_command_standby 0xe2
#define k_ata_command_standby_immediate 0xe0
#define k_ata_command_write_buffer 0xe8
#define k_ata_command_write_dma 0xcA
#define k_ata_command_write_dma_ext 0x35
#define k_ata_command_write_dma_queued 0xcc
#define k_ata_command_write_dma_queued_ext 0x36
#define k_ata_command_write_multiple 0xc5
#define k_ata_command_write_multiple_ext 0x39
#define k_ata_command_write_sectors 0x30
#define k_ata_command_write_sectors_ext 0x34
//------------------------------------------------------------------------------
// legacy nemae from the 201 code to facilitate code reuse
#define x_msb_ata x_cf_msb_ata
#define x_lsb_ata x_cf_lsb_ata
//------------------------------------------------------------------------------
// some quick macros to aid readability
#define _ata_is_media_removable() (_lun_data(media) & kbm_lun_media_removable)
#define _ata_is_media_present() (_lun_data(media) & kbm_lun_media_present)
//------------------------------------------------------------------------------
// read/write access to ata registers
uint8 ata_register_rd(t_ata_register_ref) reentrant;
void ata_register_wr(t_ata_register_ref, uint8) reentrant;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void ata_detect_media(void) reentrant;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void ata_idle_immediate(void) reentrant;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void ata_standby_immediate(void) reentrant;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
void ata_sleep(void) reentrant;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
t_result ata_wait_status_with_timeout(uint8 mask, uint8 val, uint16 ticks, uint8 *statusp) reentrant;
t_result ata_wait_irq_with_timeout(uint16 ticks) reentrant;
// ----------------------------------------------------------------------------
// ata identify device general config (word 0)
// ----------------------------------------------------------------------------
#define k_ata_iddev_general_config 0
#define kbm_ata_iddev_gc_removable 0x0080
#define kbm_ata_iddev_gc_fixed 0x0040
// ----------------------------------------------------------------------------
#define k_ata_iddev_num_log_cyl 1
// ----------------------------------------------------------------------------
// ata identify device specific configuration (word 2)
// ----------------------------------------------------------------------------
#define k_ata_iddev_specific_config 2
#define k_ata_iddev_sc_sf_spinup_incomplete 0x37c8
#define k_ata_iddev_sc_sf_spinup_complete 0x738C
#define k_ata_iddev_sc_no_sf_spinup_incomplete 0x8c73
#define k_ata_iddev_sc_no_sf_spinup_complete 0xc837
// ----------------------------------------------------------------------------
// ata identify device number of logical heads word
// ----------------------------------------------------------------------------
#define k_ata_iddev_num_log_hds 3
// ----------------------------------------------------------------------------
// ata identify device number of logical sectors per logical track
// ----------------------------------------------------------------------------
#define k_ata_iddev_num_log_sec_per_log_track 6
// ----------------------------------------------------------------------------
// ata identify device serial number (words 10-19)
// ----------------------------------------------------------------------------
#define k_ata_iddev_serial_start 10
#define k_ata_iddev_serial_length 20 // asci chars... not words!
// ----------------------------------------------------------------------------
// burst size for read/write multiple
// ----------------------------------------------------------------------------
#define k_ata_iddev_multi_burst_size 47
// ----------------------------------------------------------------------------
// ata identify device capabilities (word 49, 50)
// ----------------------------------------------------------------------------
#define k_ata_iddev_caps_l 49
#define k_ata_iddev_caps_h 50
#define kbm_ata_iddev_caps_timer_values_per_spec 0x2000
#define kbm_ata_iddev_caps_support_iordy 0x0800
#define kbm_ata_iddev_caps_disable_iordy 0x0400
#define kbm_ata_iddev_caps_support_lba 0x0200
#define kbm_ata_iddev_caps_support_dma 0x0100
// dev_caps_50
#define kbm_ata_iddev_caps_min_standby_timer 0x0001
// ----------------------------------------------------------------------------
// PIO Data Transfer Cycle Timing Mode for device (obsolete in ATA-6)
// ----------------------------------------------------------------------------
#define k_ata_iddev_pio_mode 51
#define k_ata_iddev_pio_mode_0 0x0000
#define k_ata_iddev_pio_mode_1 0x0100
#define k_ata_iddev_pio_mode_2 0x0200
#define k_ata_iddev_pio_mode_3 0x0300
#define k_ata_iddev_pio_mode_4 0x0400
// ----------------------------------------------------------------------------
// valid fields flags (word 53)
// ----------------------------------------------------------------------------
#define k_ata_iddev_valid_fields 53
#define kbm_ata_iddev_valid_fields_cur_log_chs_cap 0x0001
#define kbm_ata_iddev_valid_fields_pio_mwdma_timing 0x0002
#define kbm_ata_iddev_valid_fields_udma_modes 0x0004
// ----------------------------------------------------------------------------
// current num logical cylinders (word 54)
// ----------------------------------------------------------------------------
#define k_ata_iddev_cur_log_cyl 54
// ----------------------------------------------------------------------------
// num logical heads (word 55)
// ----------------------------------------------------------------------------
#define k_ata_iddev_cur_log_hds 55
// ----------------------------------------------------------------------------
// num logical sectors per track (word 56)
// ----------------------------------------------------------------------------
#define k_ata_iddev_cur_log_sec_per_trk 56
// ----------------------------------------------------------------------------
// currect sector capacity (word 57-58)
// ----------------------------------------------------------------------------
#define k_ata_iddev_cur_sector_cap_l 57
#define k_ata_iddev_cur_sector_cap_h 58
// ----------------------------------------------------------------------------
// multiple sector setting (word 59)
// ----------------------------------------------------------------------------
#define k_ata_iddev_multiple_sector_settings 59
#define kbm_ata_iddev_multiple_sector_setting_valid 0x0100
// ----------------------------------------------------------------------------
// total user addressable sectors (lba only) (word 60-61)
// ----------------------------------------------------------------------------
#define k_ata_iddev_total_user_addressable_sectors_l 60
#define k_ata_iddev_total_user_addressable_sectors_h 61
// ----------------------------------------------------------------------------
// ata identify device multiword dma modes supported (word 63)
// ----------------------------------------------------------------------------
#define k_ata_iddev_mwdma_mode_support 63
#define kbm_ata_iddev_mwdma_mode_0_supported 0x0001
#define kbm_ata_iddev_mwdma_mode_1_supported 0x0002
#define kbm_ata_iddev_mwdma_mode_2_supported 0x0004
#define kbm_ata_iddev_mwdma_mode_0_selected 0x0100
#define kbm_ata_iddev_mwdma_mode_1_selected 0x0200
#define kbm_ata_iddev_mwdma_mode_2_selected 0x0400
// ----------------------------------------------------------------------------
// ata pio and mwdma cycle times
// ----------------------------------------------------------------------------
#define k_ata_iddev_pio_mode_support 64
#define k_ata_iddev_min_mwdma_cycles 65
#define k_ata_iddev_mfr_recommened_mwdma_cycles 66
#define k_ata_iddev_min_pio_xfer_cycle_no_flow 67
#define k_ata_iddev_min_pio_xfer_cycle_flow 68
// ----------------------------------------------------------------------------
// command/feature set support (word 82-84)
// command/feature set enabled (word 85-87)
// ----------------------------------------------------------------------------
#define k_ata_dev_cmdset_support_1 82
#define k_ata_dev_cmdset_enabled_1 85
#define kbm_ata_iddev_cmd_nop 0x4000
#define kbm_ata_iddev_cmd_read_buffer 0x2000
#define kbm_ata_iddev_cmd_write_buffer 0x1000
#define kbm_ata_iddev_host_protected_area 0x0400
#define kbm_ata_iddev_cmd_device_reset 0x0200
#define kbm_ata_iddev_service_intrpt 0x0100
#define kbm_ata_iddev_release_intrpt 0x0080
#define kbm_ata_iddev_cmd_look_ahead 0x0040
#define kbm_ata_iddev_cmd_write_cache 0x0020
#define kbm_ata_iddev_fs_packet 0x0010
#define kbm_ata_iddev_fs_power_mgmt 0x0008
#define kbm_ata_iddev_fs_removable_media 0x0004
#define kbm_ata_iddev_fs_security_mode 0x0002
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -