Changeset 1787e527 in mainline for uspace/srv/bd/ata_bd/ata_bd.h
- Timestamp:
- 2009-11-16T21:22:54Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5ebdf94
- Parents:
- fcbd1be (diff), 9c70ed6 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/ata_bd/ata_bd.h
rfcbd1be r1787e527 38 38 #include <sys/types.h> 39 39 #include <fibril_sync.h> 40 #include <string.h> 40 41 41 42 enum { … … 115 116 116 117 enum drive_head_bits { 117 DHR_DRV = 0x10 118 DHR_LBA = 0x40, /**< Use LBA addressing mode */ 119 DHR_DRV = 0x10 /**< Select device 1 */ 118 120 }; 119 121 … … 130 132 131 133 enum ata_command { 132 CMD_IDENTIFY_DRIVE = 0xEC,133 134 CMD_READ_SECTORS = 0x20, 134 CMD_WRITE_SECTORS = 0x30 135 CMD_READ_SECTORS_EXT = 0x24, 136 CMD_WRITE_SECTORS = 0x30, 137 CMD_WRITE_SECTORS_EXT = 0x34, 138 CMD_IDENTIFY_DRIVE = 0xEC 135 139 }; 136 140 … … 142 146 }; 143 147 148 /** Data returned from @c identify command. */ 149 typedef struct { 150 uint16_t gen_conf; 151 uint16_t cylinders; 152 uint16_t _res2; 153 uint16_t heads; 154 uint16_t _vs4; 155 uint16_t _vs5; 156 uint16_t sectors; 157 uint16_t _vs7; 158 uint16_t _vs8; 159 uint16_t _vs9; 160 161 uint16_t serial_number[10]; 162 uint16_t _vs20; 163 uint16_t _vs21; 164 uint16_t vs_bytes; 165 uint16_t firmware_rev[4]; 166 uint16_t model_name[20]; 167 168 uint16_t max_rw_multiple; 169 uint16_t _res48; 170 uint16_t caps; 171 uint16_t _res50; 172 uint16_t pio_timing; 173 uint16_t dma_timing; 174 175 uint16_t validity; 176 uint16_t cur_cyl; 177 uint16_t cur_heads; 178 uint16_t cur_sectors; 179 uint16_t cur_capacity0; 180 uint16_t cur_capacity1; 181 uint16_t mss; 182 uint16_t total_lba28_0; 183 uint16_t total_lba28_1; 184 uint16_t sw_dma; 185 uint16_t mw_dma; 186 uint16_t pio_modes; 187 uint16_t min_mw_dma_cycle; 188 uint16_t rec_mw_dma_cycle; 189 uint16_t min_raw_pio_cycle; 190 uint16_t min_iordy_pio_cycle; 191 192 uint16_t _res69; 193 uint16_t _res70; 194 uint16_t _res71; 195 uint16_t _res72; 196 uint16_t _res73; 197 uint16_t _res74; 198 199 uint16_t queue_depth; 200 uint16_t _res76[1 + 79 - 76]; 201 uint16_t version_maj; 202 uint16_t version_min; 203 uint16_t cmd_set0; 204 uint16_t cmd_set1; 205 uint16_t csf_sup_ext; 206 uint16_t csf_enabled0; 207 uint16_t csf_enabled1; 208 uint16_t csf_default; 209 uint16_t udma; 210 211 uint16_t _res89[1 + 99 - 89]; 212 213 /* Total number of blocks in LBA-48 addressing */ 214 uint16_t total_lba48_0; 215 uint16_t total_lba48_1; 216 uint16_t total_lba48_2; 217 uint16_t total_lba48_3; 218 219 /* Note: more fields are defined in ATA/ATAPI-7 */ 220 uint16_t _res104[1 + 127 - 104]; 221 uint16_t _vs128[1 + 159 - 128]; 222 uint16_t _res160[1 + 255 - 160]; 223 } identify_data_t; 224 225 enum ata_caps { 226 cap_iordy = 0x0800, 227 cap_iordy_cbd = 0x0400, 228 cap_lba = 0x0200, 229 cap_dma = 0x0100 230 }; 231 232 /** Bits of @c identify_data_t.cmd_set1 */ 233 enum ata_cs1 { 234 cs1_addr48 = 0x0400 /**< 48-bit address feature set */ 235 }; 236 237 /** Block addressing mode. */ 238 enum addr_mode { 239 am_chs, /**< CHS block addressing */ 240 am_lba28, /**< LBA-28 block addressing */ 241 am_lba48 /**< LBA-48 block addressing */ 242 }; 243 244 /** Block coordinates */ 245 typedef struct { 246 /** Addressing mode used */ 247 enum addr_mode amode; 248 249 union { 250 /** CHS coordinates */ 251 struct { 252 uint8_t sector; 253 uint8_t cyl_lo; 254 uint8_t cyl_hi; 255 }; 256 /** LBA coordinates */ 257 struct { 258 uint8_t c0; 259 uint8_t c1; 260 uint8_t c2; 261 uint8_t c3; 262 uint8_t c4; 263 uint8_t c5; 264 }; 265 }; 266 267 /** Lower 4 bits for device/head register */ 268 uint8_t h; 269 } block_coord_t; 270 144 271 typedef struct { 145 272 bool present; 146 unsigned heads; 147 unsigned cylinders; 148 unsigned sectors; 273 enum addr_mode amode; 274 275 /* 276 * Geometry. Only valid if operating in CHS mode. 277 */ 278 struct { 279 unsigned heads; 280 unsigned cylinders; 281 unsigned sectors; 282 } geom; 283 149 284 uint64_t blocks; 285 286 char model[STR_BOUNDS(40) + 1]; 150 287 151 288 fibril_mutex_t lock;
Note:
See TracChangeset
for help on using the changeset viewer.