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