1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 #ifndef _DEV_ATA_ATAREG_H_
34 #define _DEV_ATA_ATAREG_H_
35
36
37
38
39
40
41
42 struct ataparams {
43
44 u_int16_t atap_config;
45 #define WDC_CFG_ATAPI_MASK 0xc000
46 #define WDC_CFG_ATAPI 0x8000
47 #define ATA_CFG_REMOVABLE 0x0080
48 #define ATA_CFG_FIXED 0x0040
49 #define ATAPI_CFG_TYPE_MASK 0x1f00
50 #define ATAPI_CFG_TYPE(x) (((x) & ATAPI_CFG_TYPE_MASK) >> 8)
51 #define ATAPI_CFG_TYPE_DIRECT 0x00
52 #define ATAPI_CFG_TYPE_SEQUENTIAL 0x01
53 #define ATAPI_CFG_TYPE_CDROM 0x05
54 #define ATAPI_CFG_TYPE_OPTICAL 0x07
55 #define ATAPI_CFG_TYPE_NODEVICE 0x1F
56 #define ATAPI_CFG_REMOV 0x0080
57 #define ATAPI_CFG_DRQ_MASK 0x0060
58 #define ATAPI_CFG_STD_DRQ 0x0000
59 #define ATAPI_CFG_IRQ_DRQ 0x0020
60 #define ATAPI_CFG_ACCEL_DRQ 0x0040
61 #define ATAPI_CFG_CMD_MASK 0x0003
62 #define ATAPI_CFG_CMD_12 0x0000
63 #define ATAPI_CFG_CMD_16 0x0001
64
65 u_int16_t atap_cylinders;
66 u_int16_t __reserved1;
67 u_int16_t atap_heads;
68 u_int16_t __retired1[2];
69 u_int16_t atap_sectors;
70 u_int16_t __retired2[3];
71
72 u_int8_t atap_serial[20];
73 u_int16_t __retired3[2];
74 u_int16_t __obsolete1;
75 u_int8_t atap_revision[8];
76 u_int8_t atap_model[40];
77 u_int16_t atap_multi;
78 u_int16_t __reserved2;
79 u_int16_t atap_capabilities1;
80 #define WDC_CAP_IORDY 0x0800
81 #define WDC_CAP_IORDY_DSBL 0x0400
82 #define WDC_CAP_LBA 0x0200
83 #define WDC_CAP_DMA 0x0100
84 #define ATA_CAP_STBY 0x2000
85 #define ATAPI_CAP_INTERL_DMA 0x8000
86 #define ATAPI_CAP_CMD_QUEUE 0x4000
87 #define ATAPI_CAP_OVERLP 0x2000
88 #define ATAPI_CAP_ATA_RST 0x1000
89 u_int16_t atap_capabilities2;
90 #if BYTE_ORDER == LITTLE_ENDIAN
91 u_int8_t __junk2;
92 u_int8_t atap_oldpiotiming;
93 u_int8_t __junk3;
94 u_int8_t atap_olddmatiming;
95 #else
96 u_int8_t atap_oldpiotiming;
97 u_int8_t __junk2;
98 u_int8_t atap_olddmatiming;
99 u_int8_t __junk3;
100 #endif
101 u_int16_t atap_extensions;
102 #define WDC_EXT_UDMA_MODES 0x0004
103 #define WDC_EXT_MODES 0x0002
104 #define WDC_EXT_GEOM 0x0001
105
106 u_int16_t atap_curcylinders;
107 u_int16_t atap_curheads;
108 u_int16_t atap_cursectors;
109 u_int16_t atap_curcapacity[2];
110 u_int16_t atap_curmulti;
111 #define WDC_MULTI_VALID 0x0100
112 #define WDC_MULTI_MASK 0x00ff
113 u_int16_t atap_capacity[2];
114 u_int16_t __retired4;
115 #if BYTE_ORDER == LITTLE_ENDIAN
116 u_int8_t atap_dmamode_supp;
117 u_int8_t atap_dmamode_act;
118 u_int8_t atap_piomode_supp;
119 u_int8_t __junk4;
120 #else
121 u_int8_t atap_dmamode_act;
122 u_int8_t atap_dmamode_supp;
123 u_int8_t __junk4;
124 u_int8_t atap_piomode_supp;
125 #endif
126 u_int16_t atap_dmatiming_mimi;
127 u_int16_t atap_dmatiming_recom;
128 u_int16_t atap_piotiming;
129 u_int16_t atap_piotiming_iordy;
130 u_int16_t __reserved3[2];
131
132 u_int16_t atap_pkt_br;
133 u_int16_t atap_pkt_bsyclr;
134 u_int16_t __reserved4[2];
135 u_int16_t atap_queuedepth;
136 #define WDC_QUEUE_DEPTH_MASK 0x1f
137 u_int16_t atap_sata_caps;
138 #define SATA_SIGNAL_GEN1 0x0002
139 #define SATA_SIGNAL_GEN2 0x0004
140 #define SATA_NATIVE_CMDQ 0x0100
141 #define SATA_HOST_PWR_MGMT 0x0200
142 u_int16_t atap_sata_reserved;
143 u_int16_t atap_sata_features_supp;
144 #define SATA_NONZERO_OFFSETS 0x0002
145 #define SATA_DMA_SETUP_AUTO 0x0004
146 #define SATA_DRIVE_PWR_MGMT 0x0008
147 u_int16_t atap_sata_features_en;
148 u_int16_t atap_ata_major;
149 #define WDC_VER_ATA1 0x0002
150 #define WDC_VER_ATA2 0x0004
151 #define WDC_VER_ATA3 0x0008
152 #define WDC_VER_ATA4 0x0010
153 #define WDC_VER_ATA5 0x0020
154 #define WDC_VER_ATA6 0x0040
155 #define WDC_VER_ATA7 0x0080
156 #define WDC_VER_ATA8 0x0100
157 #define WDC_VER_ATA9 0x0200
158 #define WDC_VER_ATA10 0x0400
159 #define WDC_VER_ATA11 0x0800
160 #define WDC_VER_ATA12 0x1000
161 #define WDC_VER_ATA13 0x2000
162 #define WDC_VER_ATA14 0x4000
163 u_int16_t atap_ata_minor;
164 u_int16_t atap_cmd_set1;
165 #define WDC_CMD1_NOP 0x4000
166 #define WDC_CMD1_RB 0x2000
167 #define WDC_CMD1_WB 0x1000
168 #define WDC_CMD1_HPA 0x0400
169 #define WDC_CMD1_DVRST 0x0200
170 #define WDC_CMD1_SRV 0x0100
171 #define WDC_CMD1_RLSE 0x0080
172 #define WDC_CMD1_AHEAD 0x0040
173 #define WDC_CMD1_CACHE 0x0020
174 #define WDC_CMD1_PKT 0x0010
175 #define WDC_CMD1_PM 0x0008
176 #define WDC_CMD1_REMOV 0x0004
177 #define WDC_CMD1_SEC 0x0002
178 #define WDC_CMD1_SMART 0x0001
179 u_int16_t atap_cmd_set2;
180 #define ATAPI_CMD2_FCE 0x2000
181 #define ATAPI_CMD2_FC 0x1000
182 #define ATAPI_CMD2_DCO 0x0800
183 #define ATAPI_CMD2_48AD 0x0400
184 #define ATAPI_CMD2_AAM 0x0200
185 #define ATAPI_CMD2_SM 0x0100
186 #define ATAPI_CMD2_SF 0x0040
187 #define ATAPI_CMD2_PUIS 0x0020
188 #define WDC_CMD2_RMSN 0x0010
189 #define ATA_CMD2_APM 0x0008
190 #define ATA_CMD2_CFA 0x0004
191 #define ATA_CMD2_RWQ 0x0002
192 #define WDC_CMD2_DM 0x0001
193 u_int16_t atap_cmd_ext;
194 #define ATAPI_CMDE_IIUF 0x2000
195 #define ATAPI_CMDE_MSER 0x0004
196 #define ATAPI_CMDE_TEST 0x0002
197 #define ATAPI_CMDE_SLOG 0x0001
198 u_int16_t atap_cmd1_en;
199
200 u_int16_t atap_cmd2_en;
201
202 u_int16_t atap_cmd_def;
203
204 #if BYTE_ORDER == LITTLE_ENDIAN
205 u_int8_t atap_udmamode_supp;
206 u_int8_t atap_udmamode_act;
207 #else
208 u_int8_t atap_udmamode_act;
209 u_int8_t atap_udmamode_supp;
210 #endif
211
212 u_int16_t atap_seu_time;
213 u_int16_t atap_eseu_time;
214 u_int16_t atap_apm_val;
215 u_int16_t atap_mpasswd_rev;
216 u_int16_t atap_hwreset_res;
217 #define ATA_HWRES_CBLID 0x2000
218 #define ATA_HWRES_D1_PDIAG 0x0800
219 #define ATA_HWRES_D1_CSEL 0x0400
220 #define ATA_HWRES_D1_JUMP 0x0200
221 #define ATA_HWRES_D0_SEL 0x0040
222 #define ATA_HWRES_D0_DASP 0x0020
223 #define ATA_HWRES_D0_PDIAG 0x0010
224 #define ATA_HWRES_D0_DIAG 0x0008
225 #define ATA_HWRES_D0_CSEL 0x0004
226 #define ATA_HWRES_D0_JUMP 0x0002
227 #if BYTE_ORDER == LITTLE_ENDIAN
228 u_int8_t atap_acoustic_val;
229 u_int8_t atap_acoustic_def;
230 #else
231 u_int8_t atap_acoustic_def;
232 u_int8_t atap_acoustic_val;
233 #endif
234 u_int16_t __reserved6[5];
235 u_int16_t atap_max_lba[4];
236 u_int16_t __reserved7[23];
237 u_int16_t atap_rmsn_supp;
238 #define WDC_RMSN_SUPP_MASK 0x0003
239 #define WDC_RMSN_SUPP 0x0001
240 u_int16_t atap_sec_st;
241 #define WDC_SEC_LEV_MAX 0x0100
242 #define WDC_SEC_ESE_SUPP 0x0020
243 #define WDC_SEC_EXP 0x0010
244 #define WDC_SEC_FROZEN 0x0008
245 #define WDC_SEC_LOCKED 0x0004
246 #define WDC_SEC_EN 0x0002
247 #define WDC_SEC_SUPP 0x0001
248 u_int16_t __reserved8[31];
249 u_int16_t atap_cfa_power;
250 #define ATAPI_CFA_MAX_MASK 0x0FFF
251 #define ATAPI_CFA_MODE1_DIS 0x1000
252 #define ATAPI_CFA_MODE1_REQ 0x2000
253 #define ATAPI_CFA_WORD160 0x8000
254 u_int16_t __reserved9[15];
255 u_int8_t atap_media_serial[60];
256 u_int16_t __reserved10[49];
257 #if BYTE_ORDER == LITTLE_ENDIAN
258 u_int8_t atap_signature;
259 u_int8_t atap_checksum;
260 #else
261 u_int8_t atap_checksum;
262 u_int8_t atap_signature;
263 #endif
264 };
265
266 #endif