123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345 |
- #pragma once
- #include "../../common/glib.h"
- #define PORT_DISK0_DATA 0x1f0
- #define PORT_DISK0_ERR_STATUS 0x1f1
- #define PORT_DISK0_SECTOR_CNT 0x1f2
- #define PORT_DISK0_LBA_7_0 0x1f3
- #define PORT_DISK0_LBA_15_8 0x1f4
- #define PORT_DISK0_LBA_23_16 0x1f5
- #define PORT_DISK0_LBA_DEVICE_CONFIGURE_REG 0x1f6
- #define PORT_DISK0_CONTROLLER_STATUS_CMD 0x1f7
- #define PORT_DISK0_STATUS_CTRL_REG 0x3f6
- #define PORT_DISK1_DATA 0x170
- #define PORT_DISK1_ERR_STATUS 0x171
- #define PORT_DISK1_SECTOR_CNT 0x172
- #define PORT_DISK1_LBA_7_0 0x173
- #define PORT_DISK1_LBA_15_8 0x174
- #define PORT_DISK1_LBA_23_16 0x175
- #define PORT_DISK1_DEVICE_CONFIGURE_REG 0x176
- #define PORT_DISK1_CONTROLLER_STATUS_CMD 0x177
- #define PORT_DISK1_STATUS_CTRL_REG 0x376
- #define DISK_STATUS_BUSY (1 << 7)
- #define DISK_STATUS_READY (1 << 6)
- #define DISK_STATUS_SEEK (1 << 4)
- #define DISK_STATUS_DATA_REQ (1 << 3)
- #define DISK_STATUS_DATA_ERROR (1 << 0)
- struct ata_identify_device_data
- {
-
- unsigned short General_Config;
-
- unsigned short Obsolete0;
-
- unsigned short Specific_Coinfig;
-
- unsigned short Obsolete1;
-
- unsigned short Retired0[2];
-
- unsigned short Obsolete2;
-
- unsigned short CompactFlash[2];
-
- unsigned short Retired1;
-
- unsigned short Serial_Number[10];
-
- unsigned short Retired2[2];
-
- unsigned short Obsolete3;
-
- unsigned short Firmware_Version[4];
-
- unsigned short Model_Number[20];
-
-
-
- unsigned short Max_logical_transferred_per_DRQ;
-
- unsigned short Trusted_Computing_feature_set_options;
-
- unsigned short Capabilities0;
-
- unsigned short Capabilities1;
-
- unsigned short Obsolete4[2];
-
-
-
-
- unsigned short Report_88_70to64_valid;
-
- unsigned short Obsolete5[5];
-
-
-
- unsigned short Mul_Sec_Setting_Valid;
-
- unsigned short Addressable_Logical_Sectors_for_28[2];
-
- unsigned short Obsolete6;
-
-
-
-
- unsigned short MultWord_DMA_Select;
-
-
- unsigned short PIO_mode_supported;
-
- unsigned short Min_MulWord_DMA_cycle_time_per_word;
-
- unsigned short Manufacture_Recommend_MulWord_DMA_cycle_time;
-
- unsigned short Min_PIO_cycle_time_Flow_Control;
-
- unsigned short Min_PIO_cycle_time_IOREDY_Flow_Control;
-
- unsigned short Reserved1[2];
-
- unsigned short Reserved2[4];
-
- unsigned short Queue_depth;
-
- unsigned short SATA_Capabilities;
-
- unsigned short Reserved3;
-
- unsigned short SATA_features_Supported;
-
- unsigned short SATA_features_enabled;
-
- unsigned short Major_Version;
-
- unsigned short Minor_Version;
-
- unsigned short Cmd_feature_sets_supported0;
-
- unsigned short Cmd_feature_sets_supported1;
-
- unsigned short Cmd_feature_sets_supported2;
-
- unsigned short Cmd_feature_sets_supported3;
-
- unsigned short Cmd_feature_sets_supported4;
-
- unsigned short Cmd_feature_sets_supported5;
-
-
-
-
- unsigned short Ultra_DMA_modes;
-
- unsigned short Time_required_Erase_CMD;
-
- unsigned short Time_required_Enhanced_CMD;
-
- unsigned short Current_APM_level_Value;
-
- unsigned short Master_Password_Identifier;
-
- unsigned short HardWare_Reset_Result;
-
-
-
- unsigned short Current_AAM_value;
-
- unsigned short Stream_Min_Request_Size;
-
- unsigned short Streaming_Transger_time_DMA;
-
- unsigned short Streaming_Access_Latency_DMA_PIO;
-
- unsigned short Streaming_Performance_Granularity[2];
-
- unsigned short Total_user_LBA_for_48_Address_Feature_set[4];
-
- unsigned short Streaming_Transfer_Time_PIO;
-
- unsigned short Reserved4;
-
- unsigned short Physical_Logical_Sector_Size;
-
- unsigned short Inter_seek_delay;
-
- unsigned short World_wide_name[4];
-
- unsigned short Reserved5[4];
-
- unsigned short Reserved6;
-
- unsigned short Words_per_Logical_Sector[2];
-
- unsigned short CMD_feature_Supported;
-
- unsigned short CMD_feature_Supported_enabled;
-
- unsigned short Reserved7[6];
-
- unsigned short Obsolete7;
-
- unsigned short Security_Status;
-
- unsigned short Vendor_Specific[31];
-
- unsigned short CFA_Power_mode;
-
- unsigned short Reserved8[7];
-
- unsigned short Dev_from_Factor;
-
- unsigned short Reserved9[7];
-
- unsigned short Current_Media_Serial_Number[30];
-
- unsigned short SCT_Cmd_Transport;
-
- unsigned short Reserved10[2];
-
- unsigned short Alignment_Logical_blocks_within_a_physical_block;
-
- unsigned short Write_Read_Verify_Sector_Count_Mode_3[2];
-
- unsigned short Write_Read_Verify_Sector_Count_Mode_2[2];
-
- unsigned short NV_Cache_Capabilities;
-
- unsigned short NV_Cache_Size[2];
-
- unsigned short Nominal_media_rotation_rate;
-
- unsigned short Reserved11;
-
- unsigned short NV_Cache_Options;
-
- unsigned short Write_Read_Verify_feature_set_current_mode;
-
- unsigned short Reserved12;
-
-
- unsigned short Transport_Major_Version_Number;
-
- unsigned short Transport_Minor_Version_Number;
-
- unsigned short Reserved13[10];
-
- unsigned short Mini_blocks_per_CMD;
-
- unsigned short Max_blocks_per_CMD;
-
- unsigned short Reserved14[19];
-
-
-
- unsigned short Integrity_word;
- } __attribute__((packed));
- void ata_init();
|