| 1 | /* TODO: spec citations per structure */ |
| 2 | |
| 3 | #include <drivers/ata.h> |
| 4 | #include <drivers/verifier.h> |
| 5 | |
| 6 | #define DV_STRUCT ata_identify |
| 7 | dv_size(0x1FE); |
| 8 | dv_align(1); |
| 9 | dv_field(uint16_t, config, 0x00); |
| 10 | dv_field(uint16_t, cylinders, 0x02); |
| 11 | dv_field(uint16_t, reserved1, 0x04); |
| 12 | dv_field(uint16_t, heads, 0x06); |
| 13 | dv_field(uint16_t[2], vendor1, 0x08); |
| 14 | dv_field(uint16_t, sectors_per_track, 0x0C); |
| 15 | dv_field(uint16_t[3], vendor2, 0x0E); |
| 16 | dv_field(uint16_t[10], serial_number, 0x14); |
| 17 | dv_field(uint16_t[2], vendor3, 0x28); |
| 18 | dv_field(uint16_t, obsolete1, 0x2C); |
| 19 | dv_field(uint16_t[4], firmware_revision, 0x2E); |
| 20 | dv_field(uint16_t[20], model_number, 0x36); |
| 21 | dv_field(uint16_t, max_rw_multiple, 0x5E); |
| 22 | dv_field(uint16_t, reserved2, 0x60); |
| 23 | dv_field(uint16_t[2], capabilities, 0x62); |
| 24 | dv_field(uint16_t[2], obsolete2, 0x66); |
| 25 | dv_field(uint16_t, field_validity, 0x6A); |
| 26 | dv_field(uint16_t, current_cylinders, 0x6C); |
| 27 | dv_field(uint16_t, current_heads, 0x6E); |
| 28 | dv_field(uint16_t, current_sectors, 0x70); |
| 29 | dv_field(uint16_t, current_capacity_lo, 0x72); |
| 30 | dv_field(uint16_t, current_capacity_hi, 0x74); |
| 31 | dv_field(uint16_t, rw_multiple, 0x76); |
| 32 | dv_field(uint32_t, lba28_capacity, 0x78); |
| 33 | dv_field(uint16_t, dma_supported, 0x7C); |
| 34 | dv_field(uint16_t, advanced_pio_modes, 0x7E); |
| 35 | dv_field(uint16_t, min_dma_cycle_time, 0x80); |
| 36 | dv_field(uint16_t, recommended_dma_cycle_time, 0x82); |
| 37 | dv_field(uint16_t, min_pio_cycle_time, 0x84); |
| 38 | dv_field(uint16_t, min_pio_cycle_time_iordy, 0x86); |
| 39 | dv_field(uint16_t, additional_supported, 0x88); |
| 40 | dv_field(uint16_t[5], reserved3, 0x8A); |
| 41 | dv_field(uint16_t, queue_depth, 0x94); |
| 42 | dv_field(uint16_t, sata_capabilities, 0x96); |
| 43 | dv_field(uint16_t, sata_additional, 0x98); |
| 44 | dv_field(uint16_t, sata_features_supported, 0x9A); |
| 45 | dv_field(uint16_t, sata_features_enabled, 0x9C); |
| 46 | dv_field(uint16_t, major_version, 0x9E); |
| 47 | dv_field(uint16_t, minor_version, 0xA0); |
| 48 | dv_field(uint16_t[3], command_set_supported, 0xA2); |
| 49 | dv_field(uint16_t[3], command_set_enabled, 0xA8); |
| 50 | dv_field(uint16_t, features_supported_extension, 0xAE); |
| 51 | dv_field(uint16_t, security_erase_time, 0xB0); |
| 52 | dv_field(uint16_t, enhanced_security_erase_time, 0xB2); |
| 53 | dv_field(uint16_t, current_advanced_power_mgmt, 0xB4); |
| 54 | dv_field(uint16_t, master_password_revision, 0xB6); |
| 55 | dv_field(uint16_t, hardware_reset_result, 0xB8); |
| 56 | dv_field(uint16_t, acoustic_management, 0xBA); |
| 57 | dv_field(uint16_t, stream_min_req_size, 0xBC); |
| 58 | dv_field(uint16_t, stream_transfer_time_dma, 0xBE); |
| 59 | dv_field(uint16_t, stream_access_latency, 0xC0); |
| 60 | dv_field(uint32_t, streaming_performance_gran, 0xC2); |
| 61 | dv_field(uint64_t, lba48_sector_count, 0xC6); |
| 62 | dv_field(uint16_t, streaming_transfer_time, 0xCE); |
| 63 | dv_field(uint16_t, dsm_cap, 0xD0); |
| 64 | dv_field(uint16_t, phys_log_sector_size, 0xD2); |
| 65 | dv_field(uint16_t, inter_seek_delay, 0xD4); |
| 66 | dv_field(uint16_t[4], world_wide_name, 0xD6); |
| 67 | dv_field(uint16_t[144], reserved4, 0xDE); |
| 68 | #undef DV_STRUCT |
| 69 | |