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

📄 ata.h

📁 u盘MCU端源代码,开发U盘的可以参考.
💻 H
📖 第 1 页 / 共 3 页
字号:
#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 + -