]> git.proxmox.com Git - mirror_qemu.git/blob - hw/ide/core.c
hw/ide/piix: properly initialize the BMIBA register
[mirror_qemu.git] / hw / ide / core.c
1 /*
2 * QEMU IDE disk and CD/DVD-ROM Emulator
3 *
4 * Copyright (c) 2003 Fabrice Bellard
5 * Copyright (c) 2006 Openedhand Ltd.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in
15 * all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 * THE SOFTWARE.
24 */
25
26 #include "qemu/osdep.h"
27 #include "hw/irq.h"
28 #include "hw/isa/isa.h"
29 #include "migration/vmstate.h"
30 #include "qemu/error-report.h"
31 #include "qemu/main-loop.h"
32 #include "qemu/timer.h"
33 #include "qemu/hw-version.h"
34 #include "qemu/memalign.h"
35 #include "sysemu/sysemu.h"
36 #include "sysemu/blockdev.h"
37 #include "sysemu/dma.h"
38 #include "hw/block/block.h"
39 #include "sysemu/block-backend.h"
40 #include "qapi/error.h"
41 #include "qemu/cutils.h"
42 #include "sysemu/replay.h"
43 #include "sysemu/runstate.h"
44 #include "hw/ide/internal.h"
45 #include "trace.h"
46
47 /* These values were based on a Seagate ST3500418AS but have been modified
48 to make more sense in QEMU */
49 static const int smart_attributes[][12] = {
50 /* id, flags, hflags, val, wrst, raw (6 bytes), threshold */
51 /* raw read error rate*/
52 { 0x01, 0x03, 0x00, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06},
53 /* spin up */
54 { 0x03, 0x03, 0x00, 0x64, 0x64, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
55 /* start stop count */
56 { 0x04, 0x02, 0x00, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14},
57 /* remapped sectors */
58 { 0x05, 0x03, 0x00, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24},
59 /* power on hours */
60 { 0x09, 0x03, 0x00, 0x64, 0x64, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
61 /* power cycle count */
62 { 0x0c, 0x03, 0x00, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
63 /* airflow-temperature-celsius */
64 { 190, 0x03, 0x00, 0x45, 0x45, 0x1f, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x32},
65 };
66
67 const char *IDE_DMA_CMD_lookup[IDE_DMA__COUNT] = {
68 [IDE_DMA_READ] = "DMA READ",
69 [IDE_DMA_WRITE] = "DMA WRITE",
70 [IDE_DMA_TRIM] = "DMA TRIM",
71 [IDE_DMA_ATAPI] = "DMA ATAPI"
72 };
73
74 static const char *IDE_DMA_CMD_str(enum ide_dma_cmd enval)
75 {
76 if ((unsigned)enval < IDE_DMA__COUNT) {
77 return IDE_DMA_CMD_lookup[enval];
78 }
79 return "DMA UNKNOWN CMD";
80 }
81
82 static void ide_dummy_transfer_stop(IDEState *s);
83
84 static void padstr(char *str, const char *src, int len)
85 {
86 int i, v;
87 for(i = 0; i < len; i++) {
88 if (*src)
89 v = *src++;
90 else
91 v = ' ';
92 str[i^1] = v;
93 }
94 }
95
96 static void put_le16(uint16_t *p, unsigned int v)
97 {
98 *p = cpu_to_le16(v);
99 }
100
101 static void ide_identify_size(IDEState *s)
102 {
103 uint16_t *p = (uint16_t *)s->identify_data;
104 int64_t nb_sectors_lba28 = s->nb_sectors;
105 if (nb_sectors_lba28 >= 1 << 28) {
106 nb_sectors_lba28 = (1 << 28) - 1;
107 }
108 put_le16(p + 60, nb_sectors_lba28);
109 put_le16(p + 61, nb_sectors_lba28 >> 16);
110 put_le16(p + 100, s->nb_sectors);
111 put_le16(p + 101, s->nb_sectors >> 16);
112 put_le16(p + 102, s->nb_sectors >> 32);
113 put_le16(p + 103, s->nb_sectors >> 48);
114 }
115
116 static void ide_identify(IDEState *s)
117 {
118 uint16_t *p;
119 unsigned int oldsize;
120 IDEDevice *dev = s->unit ? s->bus->slave : s->bus->master;
121
122 p = (uint16_t *)s->identify_data;
123 if (s->identify_set) {
124 goto fill_buffer;
125 }
126 memset(p, 0, sizeof(s->identify_data));
127
128 put_le16(p + 0, 0x0040);
129 put_le16(p + 1, s->cylinders);
130 put_le16(p + 3, s->heads);
131 put_le16(p + 4, 512 * s->sectors); /* XXX: retired, remove ? */
132 put_le16(p + 5, 512); /* XXX: retired, remove ? */
133 put_le16(p + 6, s->sectors);
134 padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
135 put_le16(p + 20, 3); /* XXX: retired, remove ? */
136 put_le16(p + 21, 512); /* cache size in sectors */
137 put_le16(p + 22, 4); /* ecc bytes */
138 padstr((char *)(p + 23), s->version, 8); /* firmware version */
139 padstr((char *)(p + 27), s->drive_model_str, 40); /* model */
140 #if MAX_MULT_SECTORS > 1
141 put_le16(p + 47, 0x8000 | MAX_MULT_SECTORS);
142 #endif
143 put_le16(p + 48, 1); /* dword I/O */
144 put_le16(p + 49, (1 << 11) | (1 << 9) | (1 << 8)); /* DMA and LBA supported */
145 put_le16(p + 51, 0x200); /* PIO transfer cycle */
146 put_le16(p + 52, 0x200); /* DMA transfer cycle */
147 put_le16(p + 53, 1 | (1 << 1) | (1 << 2)); /* words 54-58,64-70,88 are valid */
148 put_le16(p + 54, s->cylinders);
149 put_le16(p + 55, s->heads);
150 put_le16(p + 56, s->sectors);
151 oldsize = s->cylinders * s->heads * s->sectors;
152 put_le16(p + 57, oldsize);
153 put_le16(p + 58, oldsize >> 16);
154 if (s->mult_sectors)
155 put_le16(p + 59, 0x100 | s->mult_sectors);
156 /* *(p + 60) := nb_sectors -- see ide_identify_size */
157 /* *(p + 61) := nb_sectors >> 16 -- see ide_identify_size */
158 put_le16(p + 62, 0x07); /* single word dma0-2 supported */
159 put_le16(p + 63, 0x07); /* mdma0-2 supported */
160 put_le16(p + 64, 0x03); /* pio3-4 supported */
161 put_le16(p + 65, 120);
162 put_le16(p + 66, 120);
163 put_le16(p + 67, 120);
164 put_le16(p + 68, 120);
165 if (dev && dev->conf.discard_granularity) {
166 put_le16(p + 69, (1 << 14)); /* determinate TRIM behavior */
167 }
168
169 if (s->ncq_queues) {
170 put_le16(p + 75, s->ncq_queues - 1);
171 /* NCQ supported */
172 put_le16(p + 76, (1 << 8));
173 }
174
175 put_le16(p + 80, 0xf0); /* ata3 -> ata6 supported */
176 put_le16(p + 81, 0x16); /* conforms to ata5 */
177 /* 14=NOP supported, 5=WCACHE supported, 0=SMART supported */
178 put_le16(p + 82, (1 << 14) | (1 << 5) | 1);
179 /* 13=flush_cache_ext,12=flush_cache,10=lba48 */
180 put_le16(p + 83, (1 << 14) | (1 << 13) | (1 <<12) | (1 << 10));
181 /* 14=set to 1, 8=has WWN, 1=SMART self test, 0=SMART error logging */
182 if (s->wwn) {
183 put_le16(p + 84, (1 << 14) | (1 << 8) | 0);
184 } else {
185 put_le16(p + 84, (1 << 14) | 0);
186 }
187 /* 14 = NOP supported, 5=WCACHE enabled, 0=SMART feature set enabled */
188 if (blk_enable_write_cache(s->blk)) {
189 put_le16(p + 85, (1 << 14) | (1 << 5) | 1);
190 } else {
191 put_le16(p + 85, (1 << 14) | 1);
192 }
193 /* 13=flush_cache_ext,12=flush_cache,10=lba48 */
194 put_le16(p + 86, (1 << 13) | (1 <<12) | (1 << 10));
195 /* 14=set to 1, 8=has WWN, 1=SMART self test, 0=SMART error logging */
196 if (s->wwn) {
197 put_le16(p + 87, (1 << 14) | (1 << 8) | 0);
198 } else {
199 put_le16(p + 87, (1 << 14) | 0);
200 }
201 put_le16(p + 88, 0x3f | (1 << 13)); /* udma5 set and supported */
202 put_le16(p + 93, 1 | (1 << 14) | 0x2000);
203 /* *(p + 100) := nb_sectors -- see ide_identify_size */
204 /* *(p + 101) := nb_sectors >> 16 -- see ide_identify_size */
205 /* *(p + 102) := nb_sectors >> 32 -- see ide_identify_size */
206 /* *(p + 103) := nb_sectors >> 48 -- see ide_identify_size */
207
208 if (dev && dev->conf.physical_block_size)
209 put_le16(p + 106, 0x6000 | get_physical_block_exp(&dev->conf));
210 if (s->wwn) {
211 /* LE 16-bit words 111-108 contain 64-bit World Wide Name */
212 put_le16(p + 108, s->wwn >> 48);
213 put_le16(p + 109, s->wwn >> 32);
214 put_le16(p + 110, s->wwn >> 16);
215 put_le16(p + 111, s->wwn);
216 }
217 if (dev && dev->conf.discard_granularity) {
218 put_le16(p + 169, 1); /* TRIM support */
219 }
220 if (dev) {
221 put_le16(p + 217, dev->rotation_rate); /* Nominal media rotation rate */
222 }
223
224 ide_identify_size(s);
225 s->identify_set = 1;
226
227 fill_buffer:
228 memcpy(s->io_buffer, p, sizeof(s->identify_data));
229 }
230
231 static void ide_atapi_identify(IDEState *s)
232 {
233 uint16_t *p;
234
235 p = (uint16_t *)s->identify_data;
236 if (s->identify_set) {
237 goto fill_buffer;
238 }
239 memset(p, 0, sizeof(s->identify_data));
240
241 /* Removable CDROM, 50us response, 12 byte packets */
242 put_le16(p + 0, (2 << 14) | (5 << 8) | (1 << 7) | (2 << 5) | (0 << 0));
243 padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
244 put_le16(p + 20, 3); /* buffer type */
245 put_le16(p + 21, 512); /* cache size in sectors */
246 put_le16(p + 22, 4); /* ecc bytes */
247 padstr((char *)(p + 23), s->version, 8); /* firmware version */
248 padstr((char *)(p + 27), s->drive_model_str, 40); /* model */
249 put_le16(p + 48, 1); /* dword I/O (XXX: should not be set on CDROM) */
250 #ifdef USE_DMA_CDROM
251 put_le16(p + 49, 1 << 9 | 1 << 8); /* DMA and LBA supported */
252 put_le16(p + 53, 7); /* words 64-70, 54-58, 88 valid */
253 put_le16(p + 62, 7); /* single word dma0-2 supported */
254 put_le16(p + 63, 7); /* mdma0-2 supported */
255 #else
256 put_le16(p + 49, 1 << 9); /* LBA supported, no DMA */
257 put_le16(p + 53, 3); /* words 64-70, 54-58 valid */
258 put_le16(p + 63, 0x103); /* DMA modes XXX: may be incorrect */
259 #endif
260 put_le16(p + 64, 3); /* pio3-4 supported */
261 put_le16(p + 65, 0xb4); /* minimum DMA multiword tx cycle time */
262 put_le16(p + 66, 0xb4); /* recommended DMA multiword tx cycle time */
263 put_le16(p + 67, 0x12c); /* minimum PIO cycle time without flow control */
264 put_le16(p + 68, 0xb4); /* minimum PIO cycle time with IORDY flow control */
265
266 put_le16(p + 71, 30); /* in ns */
267 put_le16(p + 72, 30); /* in ns */
268
269 if (s->ncq_queues) {
270 put_le16(p + 75, s->ncq_queues - 1);
271 /* NCQ supported */
272 put_le16(p + 76, (1 << 8));
273 }
274
275 put_le16(p + 80, 0x1e); /* support up to ATA/ATAPI-4 */
276 if (s->wwn) {
277 put_le16(p + 84, (1 << 8)); /* supports WWN for words 108-111 */
278 put_le16(p + 87, (1 << 8)); /* WWN enabled */
279 }
280
281 #ifdef USE_DMA_CDROM
282 put_le16(p + 88, 0x3f | (1 << 13)); /* udma5 set and supported */
283 #endif
284
285 if (s->wwn) {
286 /* LE 16-bit words 111-108 contain 64-bit World Wide Name */
287 put_le16(p + 108, s->wwn >> 48);
288 put_le16(p + 109, s->wwn >> 32);
289 put_le16(p + 110, s->wwn >> 16);
290 put_le16(p + 111, s->wwn);
291 }
292
293 s->identify_set = 1;
294
295 fill_buffer:
296 memcpy(s->io_buffer, p, sizeof(s->identify_data));
297 }
298
299 static void ide_cfata_identify_size(IDEState *s)
300 {
301 uint16_t *p = (uint16_t *)s->identify_data;
302 put_le16(p + 7, s->nb_sectors >> 16); /* Sectors per card */
303 put_le16(p + 8, s->nb_sectors); /* Sectors per card */
304 put_le16(p + 60, s->nb_sectors); /* Total LBA sectors */
305 put_le16(p + 61, s->nb_sectors >> 16); /* Total LBA sectors */
306 }
307
308 static void ide_cfata_identify(IDEState *s)
309 {
310 uint16_t *p;
311 uint32_t cur_sec;
312
313 p = (uint16_t *)s->identify_data;
314 if (s->identify_set) {
315 goto fill_buffer;
316 }
317 memset(p, 0, sizeof(s->identify_data));
318
319 cur_sec = s->cylinders * s->heads * s->sectors;
320
321 put_le16(p + 0, 0x848a); /* CF Storage Card signature */
322 put_le16(p + 1, s->cylinders); /* Default cylinders */
323 put_le16(p + 3, s->heads); /* Default heads */
324 put_le16(p + 6, s->sectors); /* Default sectors per track */
325 /* *(p + 7) := nb_sectors >> 16 -- see ide_cfata_identify_size */
326 /* *(p + 8) := nb_sectors -- see ide_cfata_identify_size */
327 padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
328 put_le16(p + 22, 0x0004); /* ECC bytes */
329 padstr((char *) (p + 23), s->version, 8); /* Firmware Revision */
330 padstr((char *) (p + 27), s->drive_model_str, 40);/* Model number */
331 #if MAX_MULT_SECTORS > 1
332 put_le16(p + 47, 0x8000 | MAX_MULT_SECTORS);
333 #else
334 put_le16(p + 47, 0x0000);
335 #endif
336 put_le16(p + 49, 0x0f00); /* Capabilities */
337 put_le16(p + 51, 0x0002); /* PIO cycle timing mode */
338 put_le16(p + 52, 0x0001); /* DMA cycle timing mode */
339 put_le16(p + 53, 0x0003); /* Translation params valid */
340 put_le16(p + 54, s->cylinders); /* Current cylinders */
341 put_le16(p + 55, s->heads); /* Current heads */
342 put_le16(p + 56, s->sectors); /* Current sectors */
343 put_le16(p + 57, cur_sec); /* Current capacity */
344 put_le16(p + 58, cur_sec >> 16); /* Current capacity */
345 if (s->mult_sectors) /* Multiple sector setting */
346 put_le16(p + 59, 0x100 | s->mult_sectors);
347 /* *(p + 60) := nb_sectors -- see ide_cfata_identify_size */
348 /* *(p + 61) := nb_sectors >> 16 -- see ide_cfata_identify_size */
349 put_le16(p + 63, 0x0203); /* Multiword DMA capability */
350 put_le16(p + 64, 0x0001); /* Flow Control PIO support */
351 put_le16(p + 65, 0x0096); /* Min. Multiword DMA cycle */
352 put_le16(p + 66, 0x0096); /* Rec. Multiword DMA cycle */
353 put_le16(p + 68, 0x00b4); /* Min. PIO cycle time */
354 put_le16(p + 82, 0x400c); /* Command Set supported */
355 put_le16(p + 83, 0x7068); /* Command Set supported */
356 put_le16(p + 84, 0x4000); /* Features supported */
357 put_le16(p + 85, 0x000c); /* Command Set enabled */
358 put_le16(p + 86, 0x7044); /* Command Set enabled */
359 put_le16(p + 87, 0x4000); /* Features enabled */
360 put_le16(p + 91, 0x4060); /* Current APM level */
361 put_le16(p + 129, 0x0002); /* Current features option */
362 put_le16(p + 130, 0x0005); /* Reassigned sectors */
363 put_le16(p + 131, 0x0001); /* Initial power mode */
364 put_le16(p + 132, 0x0000); /* User signature */
365 put_le16(p + 160, 0x8100); /* Power requirement */
366 put_le16(p + 161, 0x8001); /* CF command set */
367
368 ide_cfata_identify_size(s);
369 s->identify_set = 1;
370
371 fill_buffer:
372 memcpy(s->io_buffer, p, sizeof(s->identify_data));
373 }
374
375 static void ide_set_signature(IDEState *s)
376 {
377 s->select &= ~(ATA_DEV_HS); /* clear head */
378 /* put signature */
379 s->nsector = 1;
380 s->sector = 1;
381 if (s->drive_kind == IDE_CD) {
382 s->lcyl = 0x14;
383 s->hcyl = 0xeb;
384 } else if (s->blk) {
385 s->lcyl = 0;
386 s->hcyl = 0;
387 } else {
388 s->lcyl = 0xff;
389 s->hcyl = 0xff;
390 }
391 }
392
393 static bool ide_sect_range_ok(IDEState *s,
394 uint64_t sector, uint64_t nb_sectors)
395 {
396 uint64_t total_sectors;
397
398 blk_get_geometry(s->blk, &total_sectors);
399 if (sector > total_sectors || nb_sectors > total_sectors - sector) {
400 return false;
401 }
402 return true;
403 }
404
405 typedef struct TrimAIOCB {
406 BlockAIOCB common;
407 IDEState *s;
408 QEMUBH *bh;
409 int ret;
410 QEMUIOVector *qiov;
411 BlockAIOCB *aiocb;
412 int i, j;
413 } TrimAIOCB;
414
415 static void trim_aio_cancel(BlockAIOCB *acb)
416 {
417 TrimAIOCB *iocb = container_of(acb, TrimAIOCB, common);
418
419 /* Exit the loop so ide_issue_trim_cb will not continue */
420 iocb->j = iocb->qiov->niov - 1;
421 iocb->i = (iocb->qiov->iov[iocb->j].iov_len / 8) - 1;
422
423 iocb->ret = -ECANCELED;
424
425 if (iocb->aiocb) {
426 blk_aio_cancel_async(iocb->aiocb);
427 iocb->aiocb = NULL;
428 }
429 }
430
431 static const AIOCBInfo trim_aiocb_info = {
432 .aiocb_size = sizeof(TrimAIOCB),
433 .cancel_async = trim_aio_cancel,
434 };
435
436 static void ide_trim_bh_cb(void *opaque)
437 {
438 TrimAIOCB *iocb = opaque;
439 BlockBackend *blk = iocb->s->blk;
440
441 iocb->common.cb(iocb->common.opaque, iocb->ret);
442
443 qemu_bh_delete(iocb->bh);
444 iocb->bh = NULL;
445 qemu_aio_unref(iocb);
446
447 /* Paired with an increment in ide_issue_trim() */
448 blk_dec_in_flight(blk);
449 }
450
451 static void ide_issue_trim_cb(void *opaque, int ret)
452 {
453 TrimAIOCB *iocb = opaque;
454 IDEState *s = iocb->s;
455
456 if (iocb->i >= 0) {
457 if (ret >= 0) {
458 block_acct_done(blk_get_stats(s->blk), &s->acct);
459 } else {
460 block_acct_failed(blk_get_stats(s->blk), &s->acct);
461 }
462 }
463
464 if (ret >= 0) {
465 while (iocb->j < iocb->qiov->niov) {
466 int j = iocb->j;
467 while (++iocb->i < iocb->qiov->iov[j].iov_len / 8) {
468 int i = iocb->i;
469 uint64_t *buffer = iocb->qiov->iov[j].iov_base;
470
471 /* 6-byte LBA + 2-byte range per entry */
472 uint64_t entry = le64_to_cpu(buffer[i]);
473 uint64_t sector = entry & 0x0000ffffffffffffULL;
474 uint16_t count = entry >> 48;
475
476 if (count == 0) {
477 continue;
478 }
479
480 if (!ide_sect_range_ok(s, sector, count)) {
481 block_acct_invalid(blk_get_stats(s->blk), BLOCK_ACCT_UNMAP);
482 iocb->ret = -EINVAL;
483 goto done;
484 }
485
486 block_acct_start(blk_get_stats(s->blk), &s->acct,
487 count << BDRV_SECTOR_BITS, BLOCK_ACCT_UNMAP);
488
489 /* Got an entry! Submit and exit. */
490 iocb->aiocb = blk_aio_pdiscard(s->blk,
491 sector << BDRV_SECTOR_BITS,
492 count << BDRV_SECTOR_BITS,
493 ide_issue_trim_cb, opaque);
494 return;
495 }
496
497 iocb->j++;
498 iocb->i = -1;
499 }
500 } else {
501 iocb->ret = ret;
502 }
503
504 done:
505 iocb->aiocb = NULL;
506 if (iocb->bh) {
507 replay_bh_schedule_event(iocb->bh);
508 }
509 }
510
511 BlockAIOCB *ide_issue_trim(
512 int64_t offset, QEMUIOVector *qiov,
513 BlockCompletionFunc *cb, void *cb_opaque, void *opaque)
514 {
515 IDEState *s = opaque;
516 IDEDevice *dev = s->unit ? s->bus->slave : s->bus->master;
517 TrimAIOCB *iocb;
518
519 /* Paired with a decrement in ide_trim_bh_cb() */
520 blk_inc_in_flight(s->blk);
521
522 iocb = blk_aio_get(&trim_aiocb_info, s->blk, cb, cb_opaque);
523 iocb->s = s;
524 iocb->bh = qemu_bh_new_guarded(ide_trim_bh_cb, iocb,
525 &DEVICE(dev)->mem_reentrancy_guard);
526 iocb->ret = 0;
527 iocb->qiov = qiov;
528 iocb->i = -1;
529 iocb->j = 0;
530 ide_issue_trim_cb(iocb, 0);
531 return &iocb->common;
532 }
533
534 void ide_abort_command(IDEState *s)
535 {
536 ide_transfer_stop(s);
537 s->status = READY_STAT | ERR_STAT;
538 s->error = ABRT_ERR;
539 }
540
541 static void ide_set_retry(IDEState *s)
542 {
543 s->bus->retry_unit = s->unit;
544 s->bus->retry_sector_num = ide_get_sector(s);
545 s->bus->retry_nsector = s->nsector;
546 }
547
548 static void ide_clear_retry(IDEState *s)
549 {
550 s->bus->retry_unit = -1;
551 s->bus->retry_sector_num = 0;
552 s->bus->retry_nsector = 0;
553 }
554
555 /* prepare data transfer and tell what to do after */
556 bool ide_transfer_start_norecurse(IDEState *s, uint8_t *buf, int size,
557 EndTransferFunc *end_transfer_func)
558 {
559 s->data_ptr = buf;
560 s->data_end = buf + size;
561 ide_set_retry(s);
562 if (!(s->status & ERR_STAT)) {
563 s->status |= DRQ_STAT;
564 }
565 if (!s->bus->dma->ops->pio_transfer) {
566 s->end_transfer_func = end_transfer_func;
567 return false;
568 }
569 s->bus->dma->ops->pio_transfer(s->bus->dma);
570 return true;
571 }
572
573 void ide_transfer_start(IDEState *s, uint8_t *buf, int size,
574 EndTransferFunc *end_transfer_func)
575 {
576 if (ide_transfer_start_norecurse(s, buf, size, end_transfer_func)) {
577 end_transfer_func(s);
578 }
579 }
580
581 static void ide_cmd_done(IDEState *s)
582 {
583 if (s->bus->dma->ops->cmd_done) {
584 s->bus->dma->ops->cmd_done(s->bus->dma);
585 }
586 }
587
588 static void ide_transfer_halt(IDEState *s)
589 {
590 s->end_transfer_func = ide_transfer_stop;
591 s->data_ptr = s->io_buffer;
592 s->data_end = s->io_buffer;
593 s->status &= ~DRQ_STAT;
594 }
595
596 void ide_transfer_stop(IDEState *s)
597 {
598 ide_transfer_halt(s);
599 ide_cmd_done(s);
600 }
601
602 int64_t ide_get_sector(IDEState *s)
603 {
604 int64_t sector_num;
605 if (s->select & (ATA_DEV_LBA)) {
606 if (s->lba48) {
607 sector_num = ((int64_t)s->hob_hcyl << 40) |
608 ((int64_t) s->hob_lcyl << 32) |
609 ((int64_t) s->hob_sector << 24) |
610 ((int64_t) s->hcyl << 16) |
611 ((int64_t) s->lcyl << 8) | s->sector;
612 } else {
613 /* LBA28 */
614 sector_num = ((s->select & (ATA_DEV_LBA_MSB)) << 24) |
615 (s->hcyl << 16) | (s->lcyl << 8) | s->sector;
616 }
617 } else {
618 /* CHS */
619 sector_num = ((s->hcyl << 8) | s->lcyl) * s->heads * s->sectors +
620 (s->select & (ATA_DEV_HS)) * s->sectors + (s->sector - 1);
621 }
622
623 return sector_num;
624 }
625
626 void ide_set_sector(IDEState *s, int64_t sector_num)
627 {
628 unsigned int cyl, r;
629 if (s->select & (ATA_DEV_LBA)) {
630 if (s->lba48) {
631 s->sector = sector_num;
632 s->lcyl = sector_num >> 8;
633 s->hcyl = sector_num >> 16;
634 s->hob_sector = sector_num >> 24;
635 s->hob_lcyl = sector_num >> 32;
636 s->hob_hcyl = sector_num >> 40;
637 } else {
638 /* LBA28 */
639 s->select = (s->select & ~(ATA_DEV_LBA_MSB)) |
640 ((sector_num >> 24) & (ATA_DEV_LBA_MSB));
641 s->hcyl = (sector_num >> 16);
642 s->lcyl = (sector_num >> 8);
643 s->sector = (sector_num);
644 }
645 } else {
646 /* CHS */
647 cyl = sector_num / (s->heads * s->sectors);
648 r = sector_num % (s->heads * s->sectors);
649 s->hcyl = cyl >> 8;
650 s->lcyl = cyl;
651 s->select = (s->select & ~(ATA_DEV_HS)) |
652 ((r / s->sectors) & (ATA_DEV_HS));
653 s->sector = (r % s->sectors) + 1;
654 }
655 }
656
657 static void ide_rw_error(IDEState *s) {
658 ide_abort_command(s);
659 ide_bus_set_irq(s->bus);
660 }
661
662 static void ide_buffered_readv_cb(void *opaque, int ret)
663 {
664 IDEBufferedRequest *req = opaque;
665 if (!req->orphaned) {
666 if (!ret) {
667 assert(req->qiov.size == req->original_qiov->size);
668 qemu_iovec_from_buf(req->original_qiov, 0,
669 req->qiov.local_iov.iov_base,
670 req->original_qiov->size);
671 }
672 req->original_cb(req->original_opaque, ret);
673 }
674 QLIST_REMOVE(req, list);
675 qemu_vfree(qemu_iovec_buf(&req->qiov));
676 g_free(req);
677 }
678
679 #define MAX_BUFFERED_REQS 16
680
681 BlockAIOCB *ide_buffered_readv(IDEState *s, int64_t sector_num,
682 QEMUIOVector *iov, int nb_sectors,
683 BlockCompletionFunc *cb, void *opaque)
684 {
685 BlockAIOCB *aioreq;
686 IDEBufferedRequest *req;
687 int c = 0;
688
689 QLIST_FOREACH(req, &s->buffered_requests, list) {
690 c++;
691 }
692 if (c > MAX_BUFFERED_REQS) {
693 return blk_abort_aio_request(s->blk, cb, opaque, -EIO);
694 }
695
696 req = g_new0(IDEBufferedRequest, 1);
697 req->original_qiov = iov;
698 req->original_cb = cb;
699 req->original_opaque = opaque;
700 qemu_iovec_init_buf(&req->qiov, blk_blockalign(s->blk, iov->size),
701 iov->size);
702
703 aioreq = blk_aio_preadv(s->blk, sector_num << BDRV_SECTOR_BITS,
704 &req->qiov, 0, ide_buffered_readv_cb, req);
705
706 QLIST_INSERT_HEAD(&s->buffered_requests, req, list);
707 return aioreq;
708 }
709
710 /**
711 * Cancel all pending DMA requests.
712 * Any buffered DMA requests are instantly canceled,
713 * but any pending unbuffered DMA requests must be waited on.
714 */
715 void ide_cancel_dma_sync(IDEState *s)
716 {
717 IDEBufferedRequest *req;
718
719 /* First invoke the callbacks of all buffered requests
720 * and flag those requests as orphaned. Ideally there
721 * are no unbuffered (Scatter Gather DMA Requests or
722 * write requests) pending and we can avoid to drain. */
723 QLIST_FOREACH(req, &s->buffered_requests, list) {
724 if (!req->orphaned) {
725 trace_ide_cancel_dma_sync_buffered(req->original_cb, req);
726 req->original_cb(req->original_opaque, -ECANCELED);
727 }
728 req->orphaned = true;
729 }
730
731 /*
732 * We can't cancel Scatter Gather DMA in the middle of the
733 * operation or a partial (not full) DMA transfer would reach
734 * the storage so we wait for completion instead (we behave
735 * like if the DMA was completed by the time the guest trying
736 * to cancel dma with bmdma_cmd_writeb with BM_CMD_START not
737 * set).
738 *
739 * In the future we'll be able to safely cancel the I/O if the
740 * whole DMA operation will be submitted to disk with a single
741 * aio operation with preadv/pwritev.
742 */
743 if (s->bus->dma->aiocb) {
744 trace_ide_cancel_dma_sync_remaining();
745 blk_drain(s->blk);
746 assert(s->bus->dma->aiocb == NULL);
747 }
748 }
749
750 static void ide_sector_read(IDEState *s);
751
752 static void ide_sector_read_cb(void *opaque, int ret)
753 {
754 IDEState *s = opaque;
755 int n;
756
757 s->pio_aiocb = NULL;
758 s->status &= ~BUSY_STAT;
759
760 if (ret != 0) {
761 if (ide_handle_rw_error(s, -ret, IDE_RETRY_PIO |
762 IDE_RETRY_READ)) {
763 return;
764 }
765 }
766
767 block_acct_done(blk_get_stats(s->blk), &s->acct);
768
769 n = s->nsector;
770 if (n > s->req_nb_sectors) {
771 n = s->req_nb_sectors;
772 }
773
774 ide_set_sector(s, ide_get_sector(s) + n);
775 s->nsector -= n;
776 /* Allow the guest to read the io_buffer */
777 ide_transfer_start(s, s->io_buffer, n * BDRV_SECTOR_SIZE, ide_sector_read);
778 ide_bus_set_irq(s->bus);
779 }
780
781 static void ide_sector_read(IDEState *s)
782 {
783 int64_t sector_num;
784 int n;
785
786 s->status = READY_STAT | SEEK_STAT;
787 s->error = 0; /* not needed by IDE spec, but needed by Windows */
788 sector_num = ide_get_sector(s);
789 n = s->nsector;
790
791 if (n == 0) {
792 ide_transfer_stop(s);
793 return;
794 }
795
796 s->status |= BUSY_STAT;
797
798 if (n > s->req_nb_sectors) {
799 n = s->req_nb_sectors;
800 }
801
802 trace_ide_sector_read(sector_num, n);
803
804 if (!ide_sect_range_ok(s, sector_num, n)) {
805 ide_rw_error(s);
806 block_acct_invalid(blk_get_stats(s->blk), BLOCK_ACCT_READ);
807 return;
808 }
809
810 qemu_iovec_init_buf(&s->qiov, s->io_buffer, n * BDRV_SECTOR_SIZE);
811
812 block_acct_start(blk_get_stats(s->blk), &s->acct,
813 n * BDRV_SECTOR_SIZE, BLOCK_ACCT_READ);
814 s->pio_aiocb = ide_buffered_readv(s, sector_num, &s->qiov, n,
815 ide_sector_read_cb, s);
816 }
817
818 void dma_buf_commit(IDEState *s, uint32_t tx_bytes)
819 {
820 if (s->bus->dma->ops->commit_buf) {
821 s->bus->dma->ops->commit_buf(s->bus->dma, tx_bytes);
822 }
823 s->io_buffer_offset += tx_bytes;
824 qemu_sglist_destroy(&s->sg);
825 }
826
827 void ide_set_inactive(IDEState *s, bool more)
828 {
829 s->bus->dma->aiocb = NULL;
830 ide_clear_retry(s);
831 if (s->bus->dma->ops->set_inactive) {
832 s->bus->dma->ops->set_inactive(s->bus->dma, more);
833 }
834 ide_cmd_done(s);
835 }
836
837 void ide_dma_error(IDEState *s)
838 {
839 dma_buf_commit(s, 0);
840 ide_abort_command(s);
841 ide_set_inactive(s, false);
842 ide_bus_set_irq(s->bus);
843 }
844
845 int ide_handle_rw_error(IDEState *s, int error, int op)
846 {
847 bool is_read = (op & IDE_RETRY_READ) != 0;
848 BlockErrorAction action = blk_get_error_action(s->blk, is_read, error);
849
850 if (action == BLOCK_ERROR_ACTION_STOP) {
851 assert(s->bus->retry_unit == s->unit);
852 s->bus->error_status = op;
853 } else if (action == BLOCK_ERROR_ACTION_REPORT) {
854 block_acct_failed(blk_get_stats(s->blk), &s->acct);
855 if (IS_IDE_RETRY_DMA(op)) {
856 ide_dma_error(s);
857 } else if (IS_IDE_RETRY_ATAPI(op)) {
858 ide_atapi_io_error(s, -error);
859 } else {
860 ide_rw_error(s);
861 }
862 }
863 blk_error_action(s->blk, action, is_read, error);
864 return action != BLOCK_ERROR_ACTION_IGNORE;
865 }
866
867 static void ide_dma_cb(void *opaque, int ret)
868 {
869 IDEState *s = opaque;
870 int n;
871 int64_t sector_num;
872 uint64_t offset;
873 bool stay_active = false;
874 int32_t prep_size = 0;
875
876 if (ret == -EINVAL) {
877 ide_dma_error(s);
878 return;
879 }
880
881 if (ret < 0) {
882 if (ide_handle_rw_error(s, -ret, ide_dma_cmd_to_retry(s->dma_cmd))) {
883 s->bus->dma->aiocb = NULL;
884 dma_buf_commit(s, 0);
885 return;
886 }
887 }
888
889 if (s->io_buffer_size > s->nsector * 512) {
890 /*
891 * The PRDs were longer than needed for this request.
892 * The Active bit must remain set after the request completes.
893 */
894 n = s->nsector;
895 stay_active = true;
896 } else {
897 n = s->io_buffer_size >> 9;
898 }
899
900 sector_num = ide_get_sector(s);
901 if (n > 0) {
902 assert(n * 512 == s->sg.size);
903 dma_buf_commit(s, s->sg.size);
904 sector_num += n;
905 ide_set_sector(s, sector_num);
906 s->nsector -= n;
907 }
908
909 /* end of transfer ? */
910 if (s->nsector == 0) {
911 s->status = READY_STAT | SEEK_STAT;
912 ide_bus_set_irq(s->bus);
913 goto eot;
914 }
915
916 /* launch next transfer */
917 n = s->nsector;
918 s->io_buffer_index = 0;
919 s->io_buffer_size = n * 512;
920 prep_size = s->bus->dma->ops->prepare_buf(s->bus->dma, s->io_buffer_size);
921 /* prepare_buf() must succeed and respect the limit */
922 assert(prep_size >= 0 && prep_size <= n * 512);
923
924 /*
925 * Now prep_size stores the number of bytes in the sglist, and
926 * s->io_buffer_size stores the number of bytes described by the PRDs.
927 */
928
929 if (prep_size < n * 512) {
930 /*
931 * The PRDs are too short for this request. Error condition!
932 * Reset the Active bit and don't raise the interrupt.
933 */
934 s->status = READY_STAT | SEEK_STAT;
935 dma_buf_commit(s, 0);
936 goto eot;
937 }
938
939 trace_ide_dma_cb(s, sector_num, n, IDE_DMA_CMD_str(s->dma_cmd));
940
941 if ((s->dma_cmd == IDE_DMA_READ || s->dma_cmd == IDE_DMA_WRITE) &&
942 !ide_sect_range_ok(s, sector_num, n)) {
943 ide_dma_error(s);
944 block_acct_invalid(blk_get_stats(s->blk), s->acct.type);
945 return;
946 }
947
948 offset = sector_num << BDRV_SECTOR_BITS;
949 switch (s->dma_cmd) {
950 case IDE_DMA_READ:
951 s->bus->dma->aiocb = dma_blk_read(s->blk, &s->sg, offset,
952 BDRV_SECTOR_SIZE, ide_dma_cb, s);
953 break;
954 case IDE_DMA_WRITE:
955 s->bus->dma->aiocb = dma_blk_write(s->blk, &s->sg, offset,
956 BDRV_SECTOR_SIZE, ide_dma_cb, s);
957 break;
958 case IDE_DMA_TRIM:
959 s->bus->dma->aiocb = dma_blk_io(blk_get_aio_context(s->blk),
960 &s->sg, offset, BDRV_SECTOR_SIZE,
961 ide_issue_trim, s, ide_dma_cb, s,
962 DMA_DIRECTION_TO_DEVICE);
963 break;
964 default:
965 abort();
966 }
967 return;
968
969 eot:
970 if (s->dma_cmd == IDE_DMA_READ || s->dma_cmd == IDE_DMA_WRITE) {
971 block_acct_done(blk_get_stats(s->blk), &s->acct);
972 }
973 ide_set_inactive(s, stay_active);
974 }
975
976 static void ide_sector_start_dma(IDEState *s, enum ide_dma_cmd dma_cmd)
977 {
978 s->status = READY_STAT | SEEK_STAT | DRQ_STAT;
979 s->io_buffer_size = 0;
980 s->dma_cmd = dma_cmd;
981
982 switch (dma_cmd) {
983 case IDE_DMA_READ:
984 block_acct_start(blk_get_stats(s->blk), &s->acct,
985 s->nsector * BDRV_SECTOR_SIZE, BLOCK_ACCT_READ);
986 break;
987 case IDE_DMA_WRITE:
988 block_acct_start(blk_get_stats(s->blk), &s->acct,
989 s->nsector * BDRV_SECTOR_SIZE, BLOCK_ACCT_WRITE);
990 break;
991 default:
992 break;
993 }
994
995 ide_start_dma(s, ide_dma_cb);
996 }
997
998 void ide_start_dma(IDEState *s, BlockCompletionFunc *cb)
999 {
1000 s->io_buffer_index = 0;
1001 ide_set_retry(s);
1002 if (s->bus->dma->ops->start_dma) {
1003 s->bus->dma->ops->start_dma(s->bus->dma, s, cb);
1004 }
1005 }
1006
1007 static void ide_sector_write(IDEState *s);
1008
1009 static void ide_sector_write_timer_cb(void *opaque)
1010 {
1011 IDEState *s = opaque;
1012 ide_bus_set_irq(s->bus);
1013 }
1014
1015 static void ide_sector_write_cb(void *opaque, int ret)
1016 {
1017 IDEState *s = opaque;
1018 int n;
1019
1020 s->pio_aiocb = NULL;
1021 s->status &= ~BUSY_STAT;
1022
1023 if (ret != 0) {
1024 if (ide_handle_rw_error(s, -ret, IDE_RETRY_PIO)) {
1025 return;
1026 }
1027 }
1028
1029 block_acct_done(blk_get_stats(s->blk), &s->acct);
1030
1031 n = s->nsector;
1032 if (n > s->req_nb_sectors) {
1033 n = s->req_nb_sectors;
1034 }
1035 s->nsector -= n;
1036
1037 ide_set_sector(s, ide_get_sector(s) + n);
1038 if (s->nsector == 0) {
1039 /* no more sectors to write */
1040 ide_transfer_stop(s);
1041 } else {
1042 int n1 = s->nsector;
1043 if (n1 > s->req_nb_sectors) {
1044 n1 = s->req_nb_sectors;
1045 }
1046 ide_transfer_start(s, s->io_buffer, n1 * BDRV_SECTOR_SIZE,
1047 ide_sector_write);
1048 }
1049
1050 if (win2k_install_hack && ((++s->irq_count % 16) == 0)) {
1051 /* It seems there is a bug in the Windows 2000 installer HDD
1052 IDE driver which fills the disk with empty logs when the
1053 IDE write IRQ comes too early. This hack tries to correct
1054 that at the expense of slower write performances. Use this
1055 option _only_ to install Windows 2000. You must disable it
1056 for normal use. */
1057 timer_mod(s->sector_write_timer, qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) +
1058 (NANOSECONDS_PER_SECOND / 1000));
1059 } else {
1060 ide_bus_set_irq(s->bus);
1061 }
1062 }
1063
1064 static void ide_sector_write(IDEState *s)
1065 {
1066 int64_t sector_num;
1067 int n;
1068
1069 s->status = READY_STAT | SEEK_STAT | BUSY_STAT;
1070 sector_num = ide_get_sector(s);
1071
1072 n = s->nsector;
1073 if (n > s->req_nb_sectors) {
1074 n = s->req_nb_sectors;
1075 }
1076
1077 trace_ide_sector_write(sector_num, n);
1078
1079 if (!ide_sect_range_ok(s, sector_num, n)) {
1080 ide_rw_error(s);
1081 block_acct_invalid(blk_get_stats(s->blk), BLOCK_ACCT_WRITE);
1082 return;
1083 }
1084
1085 qemu_iovec_init_buf(&s->qiov, s->io_buffer, n * BDRV_SECTOR_SIZE);
1086
1087 block_acct_start(blk_get_stats(s->blk), &s->acct,
1088 n * BDRV_SECTOR_SIZE, BLOCK_ACCT_WRITE);
1089 s->pio_aiocb = blk_aio_pwritev(s->blk, sector_num << BDRV_SECTOR_BITS,
1090 &s->qiov, 0, ide_sector_write_cb, s);
1091 }
1092
1093 static void ide_flush_cb(void *opaque, int ret)
1094 {
1095 IDEState *s = opaque;
1096
1097 s->pio_aiocb = NULL;
1098
1099 if (ret < 0) {
1100 /* XXX: What sector number to set here? */
1101 if (ide_handle_rw_error(s, -ret, IDE_RETRY_FLUSH)) {
1102 return;
1103 }
1104 }
1105
1106 if (s->blk) {
1107 block_acct_done(blk_get_stats(s->blk), &s->acct);
1108 }
1109 s->status = READY_STAT | SEEK_STAT;
1110 ide_cmd_done(s);
1111 ide_bus_set_irq(s->bus);
1112 }
1113
1114 static void ide_flush_cache(IDEState *s)
1115 {
1116 if (s->blk == NULL) {
1117 ide_flush_cb(s, 0);
1118 return;
1119 }
1120
1121 s->status |= BUSY_STAT;
1122 ide_set_retry(s);
1123 block_acct_start(blk_get_stats(s->blk), &s->acct, 0, BLOCK_ACCT_FLUSH);
1124 s->pio_aiocb = blk_aio_flush(s->blk, ide_flush_cb, s);
1125 }
1126
1127 static void ide_cfata_metadata_inquiry(IDEState *s)
1128 {
1129 uint16_t *p;
1130 uint32_t spd;
1131
1132 p = (uint16_t *) s->io_buffer;
1133 memset(p, 0, 0x200);
1134 spd = ((s->mdata_size - 1) >> 9) + 1;
1135
1136 put_le16(p + 0, 0x0001); /* Data format revision */
1137 put_le16(p + 1, 0x0000); /* Media property: silicon */
1138 put_le16(p + 2, s->media_changed); /* Media status */
1139 put_le16(p + 3, s->mdata_size & 0xffff); /* Capacity in bytes (low) */
1140 put_le16(p + 4, s->mdata_size >> 16); /* Capacity in bytes (high) */
1141 put_le16(p + 5, spd & 0xffff); /* Sectors per device (low) */
1142 put_le16(p + 6, spd >> 16); /* Sectors per device (high) */
1143 }
1144
1145 static void ide_cfata_metadata_read(IDEState *s)
1146 {
1147 uint16_t *p;
1148
1149 if (((s->hcyl << 16) | s->lcyl) << 9 > s->mdata_size + 2) {
1150 s->status = ERR_STAT;
1151 s->error = ABRT_ERR;
1152 return;
1153 }
1154
1155 p = (uint16_t *) s->io_buffer;
1156 memset(p, 0, 0x200);
1157
1158 put_le16(p + 0, s->media_changed); /* Media status */
1159 memcpy(p + 1, s->mdata_storage + (((s->hcyl << 16) | s->lcyl) << 9),
1160 MIN(MIN(s->mdata_size - (((s->hcyl << 16) | s->lcyl) << 9),
1161 s->nsector << 9), 0x200 - 2));
1162 }
1163
1164 static void ide_cfata_metadata_write(IDEState *s)
1165 {
1166 if (((s->hcyl << 16) | s->lcyl) << 9 > s->mdata_size + 2) {
1167 s->status = ERR_STAT;
1168 s->error = ABRT_ERR;
1169 return;
1170 }
1171
1172 s->media_changed = 0;
1173
1174 memcpy(s->mdata_storage + (((s->hcyl << 16) | s->lcyl) << 9),
1175 s->io_buffer + 2,
1176 MIN(MIN(s->mdata_size - (((s->hcyl << 16) | s->lcyl) << 9),
1177 s->nsector << 9), 0x200 - 2));
1178 }
1179
1180 /* called when the inserted state of the media has changed */
1181 static void ide_cd_change_cb(void *opaque, bool load, Error **errp)
1182 {
1183 IDEState *s = opaque;
1184 uint64_t nb_sectors;
1185
1186 s->tray_open = !load;
1187 blk_get_geometry(s->blk, &nb_sectors);
1188 s->nb_sectors = nb_sectors;
1189
1190 /*
1191 * First indicate to the guest that a CD has been removed. That's
1192 * done on the next command the guest sends us.
1193 *
1194 * Then we set UNIT_ATTENTION, by which the guest will
1195 * detect a new CD in the drive. See ide_atapi_cmd() for details.
1196 */
1197 s->cdrom_changed = 1;
1198 s->events.new_media = true;
1199 s->events.eject_request = false;
1200 ide_bus_set_irq(s->bus);
1201 }
1202
1203 static void ide_cd_eject_request_cb(void *opaque, bool force)
1204 {
1205 IDEState *s = opaque;
1206
1207 s->events.eject_request = true;
1208 if (force) {
1209 s->tray_locked = false;
1210 }
1211 ide_bus_set_irq(s->bus);
1212 }
1213
1214 static void ide_cmd_lba48_transform(IDEState *s, int lba48)
1215 {
1216 s->lba48 = lba48;
1217
1218 /* handle the 'magic' 0 nsector count conversion here. to avoid
1219 * fiddling with the rest of the read logic, we just store the
1220 * full sector count in ->nsector and ignore ->hob_nsector from now
1221 */
1222 if (!s->lba48) {
1223 if (!s->nsector)
1224 s->nsector = 256;
1225 } else {
1226 if (!s->nsector && !s->hob_nsector)
1227 s->nsector = 65536;
1228 else {
1229 int lo = s->nsector;
1230 int hi = s->hob_nsector;
1231
1232 s->nsector = (hi << 8) | lo;
1233 }
1234 }
1235 }
1236
1237 static void ide_clear_hob(IDEBus *bus)
1238 {
1239 /* any write clears HOB high bit of device control register */
1240 bus->cmd &= ~(IDE_CTRL_HOB);
1241 }
1242
1243 /* IOport [W]rite [R]egisters */
1244 enum ATA_IOPORT_WR {
1245 ATA_IOPORT_WR_DATA = 0,
1246 ATA_IOPORT_WR_FEATURES = 1,
1247 ATA_IOPORT_WR_SECTOR_COUNT = 2,
1248 ATA_IOPORT_WR_SECTOR_NUMBER = 3,
1249 ATA_IOPORT_WR_CYLINDER_LOW = 4,
1250 ATA_IOPORT_WR_CYLINDER_HIGH = 5,
1251 ATA_IOPORT_WR_DEVICE_HEAD = 6,
1252 ATA_IOPORT_WR_COMMAND = 7,
1253 ATA_IOPORT_WR_NUM_REGISTERS,
1254 };
1255
1256 const char *ATA_IOPORT_WR_lookup[ATA_IOPORT_WR_NUM_REGISTERS] = {
1257 [ATA_IOPORT_WR_DATA] = "Data",
1258 [ATA_IOPORT_WR_FEATURES] = "Features",
1259 [ATA_IOPORT_WR_SECTOR_COUNT] = "Sector Count",
1260 [ATA_IOPORT_WR_SECTOR_NUMBER] = "Sector Number",
1261 [ATA_IOPORT_WR_CYLINDER_LOW] = "Cylinder Low",
1262 [ATA_IOPORT_WR_CYLINDER_HIGH] = "Cylinder High",
1263 [ATA_IOPORT_WR_DEVICE_HEAD] = "Device/Head",
1264 [ATA_IOPORT_WR_COMMAND] = "Command"
1265 };
1266
1267 void ide_ioport_write(void *opaque, uint32_t addr, uint32_t val)
1268 {
1269 IDEBus *bus = opaque;
1270 IDEState *s = ide_bus_active_if(bus);
1271 int reg_num = addr & 7;
1272
1273 trace_ide_ioport_write(addr, ATA_IOPORT_WR_lookup[reg_num], val, bus, s);
1274
1275 /* ignore writes to command block while busy with previous command */
1276 if (reg_num != 7 && (s->status & (BUSY_STAT|DRQ_STAT))) {
1277 return;
1278 }
1279
1280 /* NOTE: Device0 and Device1 both receive incoming register writes.
1281 * (They're on the same bus! They have to!) */
1282
1283 switch (reg_num) {
1284 case 0:
1285 break;
1286 case ATA_IOPORT_WR_FEATURES:
1287 ide_clear_hob(bus);
1288 bus->ifs[0].hob_feature = bus->ifs[0].feature;
1289 bus->ifs[1].hob_feature = bus->ifs[1].feature;
1290 bus->ifs[0].feature = val;
1291 bus->ifs[1].feature = val;
1292 break;
1293 case ATA_IOPORT_WR_SECTOR_COUNT:
1294 ide_clear_hob(bus);
1295 bus->ifs[0].hob_nsector = bus->ifs[0].nsector;
1296 bus->ifs[1].hob_nsector = bus->ifs[1].nsector;
1297 bus->ifs[0].nsector = val;
1298 bus->ifs[1].nsector = val;
1299 break;
1300 case ATA_IOPORT_WR_SECTOR_NUMBER:
1301 ide_clear_hob(bus);
1302 bus->ifs[0].hob_sector = bus->ifs[0].sector;
1303 bus->ifs[1].hob_sector = bus->ifs[1].sector;
1304 bus->ifs[0].sector = val;
1305 bus->ifs[1].sector = val;
1306 break;
1307 case ATA_IOPORT_WR_CYLINDER_LOW:
1308 ide_clear_hob(bus);
1309 bus->ifs[0].hob_lcyl = bus->ifs[0].lcyl;
1310 bus->ifs[1].hob_lcyl = bus->ifs[1].lcyl;
1311 bus->ifs[0].lcyl = val;
1312 bus->ifs[1].lcyl = val;
1313 break;
1314 case ATA_IOPORT_WR_CYLINDER_HIGH:
1315 ide_clear_hob(bus);
1316 bus->ifs[0].hob_hcyl = bus->ifs[0].hcyl;
1317 bus->ifs[1].hob_hcyl = bus->ifs[1].hcyl;
1318 bus->ifs[0].hcyl = val;
1319 bus->ifs[1].hcyl = val;
1320 break;
1321 case ATA_IOPORT_WR_DEVICE_HEAD:
1322 ide_clear_hob(bus);
1323 bus->ifs[0].select = val | (ATA_DEV_ALWAYS_ON);
1324 bus->ifs[1].select = val | (ATA_DEV_ALWAYS_ON);
1325 /* select drive */
1326 bus->unit = (val & (ATA_DEV_SELECT)) ? 1 : 0;
1327 break;
1328 default:
1329 case ATA_IOPORT_WR_COMMAND:
1330 ide_clear_hob(bus);
1331 qemu_irq_lower(bus->irq);
1332 ide_bus_exec_cmd(bus, val);
1333 break;
1334 }
1335 }
1336
1337 static void ide_reset(IDEState *s)
1338 {
1339 trace_ide_reset(s);
1340
1341 if (s->pio_aiocb) {
1342 blk_aio_cancel(s->pio_aiocb);
1343 s->pio_aiocb = NULL;
1344 }
1345
1346 if (s->reset_reverts) {
1347 s->reset_reverts = false;
1348 s->heads = s->drive_heads;
1349 s->sectors = s->drive_sectors;
1350 }
1351 if (s->drive_kind == IDE_CFATA)
1352 s->mult_sectors = 0;
1353 else
1354 s->mult_sectors = MAX_MULT_SECTORS;
1355 /* ide regs */
1356 s->feature = 0;
1357 s->error = 0;
1358 s->nsector = 0;
1359 s->sector = 0;
1360 s->lcyl = 0;
1361 s->hcyl = 0;
1362
1363 /* lba48 */
1364 s->hob_feature = 0;
1365 s->hob_sector = 0;
1366 s->hob_nsector = 0;
1367 s->hob_lcyl = 0;
1368 s->hob_hcyl = 0;
1369
1370 s->select = (ATA_DEV_ALWAYS_ON);
1371 s->status = READY_STAT | SEEK_STAT;
1372
1373 s->lba48 = 0;
1374
1375 /* ATAPI specific */
1376 s->sense_key = 0;
1377 s->asc = 0;
1378 s->cdrom_changed = 0;
1379 s->packet_transfer_size = 0;
1380 s->elementary_transfer_size = 0;
1381 s->io_buffer_index = 0;
1382 s->cd_sector_size = 0;
1383 s->atapi_dma = 0;
1384 s->tray_locked = 0;
1385 s->tray_open = 0;
1386 /* ATA DMA state */
1387 s->io_buffer_size = 0;
1388 s->req_nb_sectors = 0;
1389
1390 ide_set_signature(s);
1391 /* init the transfer handler so that 0xffff is returned on data
1392 accesses */
1393 s->end_transfer_func = ide_dummy_transfer_stop;
1394 ide_dummy_transfer_stop(s);
1395 s->media_changed = 0;
1396 }
1397
1398 static bool cmd_nop(IDEState *s, uint8_t cmd)
1399 {
1400 return true;
1401 }
1402
1403 static bool cmd_device_reset(IDEState *s, uint8_t cmd)
1404 {
1405 /* Halt PIO (in the DRQ phase), then DMA */
1406 ide_transfer_halt(s);
1407 ide_cancel_dma_sync(s);
1408
1409 /* Reset any PIO commands, reset signature, etc */
1410 ide_reset(s);
1411
1412 /* RESET: ATA8-ACS3 7.10.4 "Normal Outputs";
1413 * ATA8-ACS3 Table 184 "Device Signatures for Normal Output" */
1414 s->status = 0x00;
1415
1416 /* Do not overwrite status register */
1417 return false;
1418 }
1419
1420 static bool cmd_data_set_management(IDEState *s, uint8_t cmd)
1421 {
1422 switch (s->feature) {
1423 case DSM_TRIM:
1424 if (s->blk) {
1425 ide_sector_start_dma(s, IDE_DMA_TRIM);
1426 return false;
1427 }
1428 break;
1429 }
1430
1431 ide_abort_command(s);
1432 return true;
1433 }
1434
1435 static bool cmd_identify(IDEState *s, uint8_t cmd)
1436 {
1437 if (s->blk && s->drive_kind != IDE_CD) {
1438 if (s->drive_kind != IDE_CFATA) {
1439 ide_identify(s);
1440 } else {
1441 ide_cfata_identify(s);
1442 }
1443 s->status = READY_STAT | SEEK_STAT;
1444 ide_transfer_start(s, s->io_buffer, 512, ide_transfer_stop);
1445 ide_bus_set_irq(s->bus);
1446 return false;
1447 } else {
1448 if (s->drive_kind == IDE_CD) {
1449 ide_set_signature(s);
1450 }
1451 ide_abort_command(s);
1452 }
1453
1454 return true;
1455 }
1456
1457 static bool cmd_verify(IDEState *s, uint8_t cmd)
1458 {
1459 bool lba48 = (cmd == WIN_VERIFY_EXT);
1460
1461 /* do sector number check ? */
1462 ide_cmd_lba48_transform(s, lba48);
1463
1464 return true;
1465 }
1466
1467 static bool cmd_set_multiple_mode(IDEState *s, uint8_t cmd)
1468 {
1469 if (s->drive_kind == IDE_CFATA && s->nsector == 0) {
1470 /* Disable Read and Write Multiple */
1471 s->mult_sectors = 0;
1472 } else if ((s->nsector & 0xff) != 0 &&
1473 ((s->nsector & 0xff) > MAX_MULT_SECTORS ||
1474 (s->nsector & (s->nsector - 1)) != 0)) {
1475 ide_abort_command(s);
1476 } else {
1477 s->mult_sectors = s->nsector & 0xff;
1478 }
1479
1480 return true;
1481 }
1482
1483 static bool cmd_read_multiple(IDEState *s, uint8_t cmd)
1484 {
1485 bool lba48 = (cmd == WIN_MULTREAD_EXT);
1486
1487 if (!s->blk || !s->mult_sectors) {
1488 ide_abort_command(s);
1489 return true;
1490 }
1491
1492 ide_cmd_lba48_transform(s, lba48);
1493 s->req_nb_sectors = s->mult_sectors;
1494 ide_sector_read(s);
1495 return false;
1496 }
1497
1498 static bool cmd_write_multiple(IDEState *s, uint8_t cmd)
1499 {
1500 bool lba48 = (cmd == WIN_MULTWRITE_EXT);
1501 int n;
1502
1503 if (!s->blk || !s->mult_sectors) {
1504 ide_abort_command(s);
1505 return true;
1506 }
1507
1508 ide_cmd_lba48_transform(s, lba48);
1509
1510 s->req_nb_sectors = s->mult_sectors;
1511 n = MIN(s->nsector, s->req_nb_sectors);
1512
1513 s->status = SEEK_STAT | READY_STAT;
1514 ide_transfer_start(s, s->io_buffer, 512 * n, ide_sector_write);
1515
1516 s->media_changed = 1;
1517
1518 return false;
1519 }
1520
1521 static bool cmd_read_pio(IDEState *s, uint8_t cmd)
1522 {
1523 bool lba48 = (cmd == WIN_READ_EXT);
1524
1525 if (s->drive_kind == IDE_CD) {
1526 ide_set_signature(s); /* odd, but ATA4 8.27.5.2 requires it */
1527 ide_abort_command(s);
1528 return true;
1529 }
1530
1531 if (!s->blk) {
1532 ide_abort_command(s);
1533 return true;
1534 }
1535
1536 ide_cmd_lba48_transform(s, lba48);
1537 s->req_nb_sectors = 1;
1538 ide_sector_read(s);
1539
1540 return false;
1541 }
1542
1543 static bool cmd_write_pio(IDEState *s, uint8_t cmd)
1544 {
1545 bool lba48 = (cmd == WIN_WRITE_EXT);
1546
1547 if (!s->blk) {
1548 ide_abort_command(s);
1549 return true;
1550 }
1551
1552 ide_cmd_lba48_transform(s, lba48);
1553
1554 s->req_nb_sectors = 1;
1555 s->status = SEEK_STAT | READY_STAT;
1556 ide_transfer_start(s, s->io_buffer, 512, ide_sector_write);
1557
1558 s->media_changed = 1;
1559
1560 return false;
1561 }
1562
1563 static bool cmd_read_dma(IDEState *s, uint8_t cmd)
1564 {
1565 bool lba48 = (cmd == WIN_READDMA_EXT);
1566
1567 if (!s->blk) {
1568 ide_abort_command(s);
1569 return true;
1570 }
1571
1572 ide_cmd_lba48_transform(s, lba48);
1573 ide_sector_start_dma(s, IDE_DMA_READ);
1574
1575 return false;
1576 }
1577
1578 static bool cmd_write_dma(IDEState *s, uint8_t cmd)
1579 {
1580 bool lba48 = (cmd == WIN_WRITEDMA_EXT);
1581
1582 if (!s->blk) {
1583 ide_abort_command(s);
1584 return true;
1585 }
1586
1587 ide_cmd_lba48_transform(s, lba48);
1588 ide_sector_start_dma(s, IDE_DMA_WRITE);
1589
1590 s->media_changed = 1;
1591
1592 return false;
1593 }
1594
1595 static bool cmd_flush_cache(IDEState *s, uint8_t cmd)
1596 {
1597 ide_flush_cache(s);
1598 return false;
1599 }
1600
1601 static bool cmd_seek(IDEState *s, uint8_t cmd)
1602 {
1603 /* XXX: Check that seek is within bounds */
1604 return true;
1605 }
1606
1607 static bool cmd_read_native_max(IDEState *s, uint8_t cmd)
1608 {
1609 bool lba48 = (cmd == WIN_READ_NATIVE_MAX_EXT);
1610
1611 /* Refuse if no sectors are addressable (e.g. medium not inserted) */
1612 if (s->nb_sectors == 0) {
1613 ide_abort_command(s);
1614 return true;
1615 }
1616
1617 ide_cmd_lba48_transform(s, lba48);
1618 ide_set_sector(s, s->nb_sectors - 1);
1619
1620 return true;
1621 }
1622
1623 static bool cmd_check_power_mode(IDEState *s, uint8_t cmd)
1624 {
1625 s->nsector = 0xff; /* device active or idle */
1626 return true;
1627 }
1628
1629 /* INITIALIZE DEVICE PARAMETERS */
1630 static bool cmd_specify(IDEState *s, uint8_t cmd)
1631 {
1632 if (s->blk && s->drive_kind != IDE_CD) {
1633 s->heads = (s->select & (ATA_DEV_HS)) + 1;
1634 s->sectors = s->nsector;
1635 ide_bus_set_irq(s->bus);
1636 } else {
1637 ide_abort_command(s);
1638 }
1639
1640 return true;
1641 }
1642
1643 static bool cmd_set_features(IDEState *s, uint8_t cmd)
1644 {
1645 uint16_t *identify_data;
1646
1647 if (!s->blk) {
1648 ide_abort_command(s);
1649 return true;
1650 }
1651
1652 /* XXX: valid for CDROM ? */
1653 switch (s->feature) {
1654 case 0x01: /* 8-bit I/O enable (CompactFlash) */
1655 case 0x81: /* 8-bit I/O disable (CompactFlash) */
1656 if (s->drive_kind != IDE_CFATA) {
1657 goto abort_cmd;
1658 }
1659 s->io8 = !(s->feature & 0x80);
1660 return true;
1661 case 0x02: /* write cache enable */
1662 blk_set_enable_write_cache(s->blk, true);
1663 identify_data = (uint16_t *)s->identify_data;
1664 put_le16(identify_data + 85, (1 << 14) | (1 << 5) | 1);
1665 return true;
1666 case 0x82: /* write cache disable */
1667 blk_set_enable_write_cache(s->blk, false);
1668 identify_data = (uint16_t *)s->identify_data;
1669 put_le16(identify_data + 85, (1 << 14) | 1);
1670 ide_flush_cache(s);
1671 return false;
1672 case 0xcc: /* reverting to power-on defaults enable */
1673 s->reset_reverts = true;
1674 return true;
1675 case 0x66: /* reverting to power-on defaults disable */
1676 s->reset_reverts = false;
1677 return true;
1678 case 0xaa: /* read look-ahead enable */
1679 case 0x55: /* read look-ahead disable */
1680 case 0x05: /* set advanced power management mode */
1681 case 0x85: /* disable advanced power management mode */
1682 case 0x69: /* NOP */
1683 case 0x67: /* NOP */
1684 case 0x96: /* NOP */
1685 case 0x9a: /* NOP */
1686 case 0x42: /* enable Automatic Acoustic Mode */
1687 case 0xc2: /* disable Automatic Acoustic Mode */
1688 return true;
1689 case 0x03: /* set transfer mode */
1690 {
1691 uint8_t val = s->nsector & 0x07;
1692 identify_data = (uint16_t *)s->identify_data;
1693
1694 switch (s->nsector >> 3) {
1695 case 0x00: /* pio default */
1696 case 0x01: /* pio mode */
1697 put_le16(identify_data + 62, 0x07);
1698 put_le16(identify_data + 63, 0x07);
1699 put_le16(identify_data + 88, 0x3f);
1700 break;
1701 case 0x02: /* sigle word dma mode*/
1702 put_le16(identify_data + 62, 0x07 | (1 << (val + 8)));
1703 put_le16(identify_data + 63, 0x07);
1704 put_le16(identify_data + 88, 0x3f);
1705 break;
1706 case 0x04: /* mdma mode */
1707 put_le16(identify_data + 62, 0x07);
1708 put_le16(identify_data + 63, 0x07 | (1 << (val + 8)));
1709 put_le16(identify_data + 88, 0x3f);
1710 break;
1711 case 0x08: /* udma mode */
1712 put_le16(identify_data + 62, 0x07);
1713 put_le16(identify_data + 63, 0x07);
1714 put_le16(identify_data + 88, 0x3f | (1 << (val + 8)));
1715 break;
1716 default:
1717 goto abort_cmd;
1718 }
1719 return true;
1720 }
1721 }
1722
1723 abort_cmd:
1724 ide_abort_command(s);
1725 return true;
1726 }
1727
1728
1729 /*** ATAPI commands ***/
1730
1731 static bool cmd_identify_packet(IDEState *s, uint8_t cmd)
1732 {
1733 ide_atapi_identify(s);
1734 s->status = READY_STAT | SEEK_STAT;
1735 ide_transfer_start(s, s->io_buffer, 512, ide_transfer_stop);
1736 ide_bus_set_irq(s->bus);
1737 return false;
1738 }
1739
1740 /* EXECUTE DEVICE DIAGNOSTIC */
1741 static bool cmd_exec_dev_diagnostic(IDEState *s, uint8_t cmd)
1742 {
1743 /*
1744 * Clear the device register per the ATA (v6) specification,
1745 * because ide_set_signature does not clear LBA or drive bits.
1746 */
1747 s->select = (ATA_DEV_ALWAYS_ON);
1748 ide_set_signature(s);
1749
1750 if (s->drive_kind == IDE_CD) {
1751 s->status = 0; /* ATAPI spec (v6) section 9.10 defines packet
1752 * devices to return a clear status register
1753 * with READY_STAT *not* set. */
1754 s->error = 0x01;
1755 } else {
1756 s->status = READY_STAT | SEEK_STAT;
1757 /* The bits of the error register are not as usual for this command!
1758 * They are part of the regular output (this is why ERR_STAT isn't set)
1759 * Device 0 passed, Device 1 passed or not present. */
1760 s->error = 0x01;
1761 ide_bus_set_irq(s->bus);
1762 }
1763
1764 return false;
1765 }
1766
1767 static bool cmd_packet(IDEState *s, uint8_t cmd)
1768 {
1769 /* overlapping commands not supported */
1770 if (s->feature & 0x02) {
1771 ide_abort_command(s);
1772 return true;
1773 }
1774
1775 s->status = READY_STAT | SEEK_STAT;
1776 s->atapi_dma = s->feature & 1;
1777 if (s->atapi_dma) {
1778 s->dma_cmd = IDE_DMA_ATAPI;
1779 }
1780 s->nsector = 1;
1781 ide_transfer_start(s, s->io_buffer, ATAPI_PACKET_SIZE,
1782 ide_atapi_cmd);
1783 return false;
1784 }
1785
1786
1787 /*** CF-ATA commands ***/
1788
1789 static bool cmd_cfa_req_ext_error_code(IDEState *s, uint8_t cmd)
1790 {
1791 s->error = 0x09; /* miscellaneous error */
1792 s->status = READY_STAT | SEEK_STAT;
1793 ide_bus_set_irq(s->bus);
1794
1795 return false;
1796 }
1797
1798 static bool cmd_cfa_erase_sectors(IDEState *s, uint8_t cmd)
1799 {
1800 /* WIN_SECURITY_FREEZE_LOCK has the same ID as CFA_WEAR_LEVEL and is
1801 * required for Windows 8 to work with AHCI */
1802
1803 if (cmd == CFA_WEAR_LEVEL) {
1804 s->nsector = 0;
1805 }
1806
1807 if (cmd == CFA_ERASE_SECTORS) {
1808 s->media_changed = 1;
1809 }
1810
1811 return true;
1812 }
1813
1814 static bool cmd_cfa_translate_sector(IDEState *s, uint8_t cmd)
1815 {
1816 s->status = READY_STAT | SEEK_STAT;
1817
1818 memset(s->io_buffer, 0, 0x200);
1819 s->io_buffer[0x00] = s->hcyl; /* Cyl MSB */
1820 s->io_buffer[0x01] = s->lcyl; /* Cyl LSB */
1821 s->io_buffer[0x02] = s->select; /* Head */
1822 s->io_buffer[0x03] = s->sector; /* Sector */
1823 s->io_buffer[0x04] = ide_get_sector(s) >> 16; /* LBA MSB */
1824 s->io_buffer[0x05] = ide_get_sector(s) >> 8; /* LBA */
1825 s->io_buffer[0x06] = ide_get_sector(s) >> 0; /* LBA LSB */
1826 s->io_buffer[0x13] = 0x00; /* Erase flag */
1827 s->io_buffer[0x18] = 0x00; /* Hot count */
1828 s->io_buffer[0x19] = 0x00; /* Hot count */
1829 s->io_buffer[0x1a] = 0x01; /* Hot count */
1830
1831 ide_transfer_start(s, s->io_buffer, 0x200, ide_transfer_stop);
1832 ide_bus_set_irq(s->bus);
1833
1834 return false;
1835 }
1836
1837 static bool cmd_cfa_access_metadata_storage(IDEState *s, uint8_t cmd)
1838 {
1839 switch (s->feature) {
1840 case 0x02: /* Inquiry Metadata Storage */
1841 ide_cfata_metadata_inquiry(s);
1842 break;
1843 case 0x03: /* Read Metadata Storage */
1844 ide_cfata_metadata_read(s);
1845 break;
1846 case 0x04: /* Write Metadata Storage */
1847 ide_cfata_metadata_write(s);
1848 break;
1849 default:
1850 ide_abort_command(s);
1851 return true;
1852 }
1853
1854 ide_transfer_start(s, s->io_buffer, 0x200, ide_transfer_stop);
1855 s->status = 0x00; /* NOTE: READY is _not_ set */
1856 ide_bus_set_irq(s->bus);
1857
1858 return false;
1859 }
1860
1861 static bool cmd_ibm_sense_condition(IDEState *s, uint8_t cmd)
1862 {
1863 switch (s->feature) {
1864 case 0x01: /* sense temperature in device */
1865 s->nsector = 0x50; /* +20 C */
1866 break;
1867 default:
1868 ide_abort_command(s);
1869 return true;
1870 }
1871
1872 return true;
1873 }
1874
1875
1876 /*** SMART commands ***/
1877
1878 static bool cmd_smart(IDEState *s, uint8_t cmd)
1879 {
1880 int n;
1881
1882 if (s->hcyl != 0xc2 || s->lcyl != 0x4f) {
1883 goto abort_cmd;
1884 }
1885
1886 if (!s->smart_enabled && s->feature != SMART_ENABLE) {
1887 goto abort_cmd;
1888 }
1889
1890 switch (s->feature) {
1891 case SMART_DISABLE:
1892 s->smart_enabled = 0;
1893 return true;
1894
1895 case SMART_ENABLE:
1896 s->smart_enabled = 1;
1897 return true;
1898
1899 case SMART_ATTR_AUTOSAVE:
1900 switch (s->sector) {
1901 case 0x00:
1902 s->smart_autosave = 0;
1903 break;
1904 case 0xf1:
1905 s->smart_autosave = 1;
1906 break;
1907 default:
1908 goto abort_cmd;
1909 }
1910 return true;
1911
1912 case SMART_STATUS:
1913 if (!s->smart_errors) {
1914 s->hcyl = 0xc2;
1915 s->lcyl = 0x4f;
1916 } else {
1917 s->hcyl = 0x2c;
1918 s->lcyl = 0xf4;
1919 }
1920 return true;
1921
1922 case SMART_READ_THRESH:
1923 memset(s->io_buffer, 0, 0x200);
1924 s->io_buffer[0] = 0x01; /* smart struct version */
1925
1926 for (n = 0; n < ARRAY_SIZE(smart_attributes); n++) {
1927 s->io_buffer[2 + 0 + (n * 12)] = smart_attributes[n][0];
1928 s->io_buffer[2 + 1 + (n * 12)] = smart_attributes[n][11];
1929 }
1930
1931 /* checksum */
1932 for (n = 0; n < 511; n++) {
1933 s->io_buffer[511] += s->io_buffer[n];
1934 }
1935 s->io_buffer[511] = 0x100 - s->io_buffer[511];
1936
1937 s->status = READY_STAT | SEEK_STAT;
1938 ide_transfer_start(s, s->io_buffer, 0x200, ide_transfer_stop);
1939 ide_bus_set_irq(s->bus);
1940 return false;
1941
1942 case SMART_READ_DATA:
1943 memset(s->io_buffer, 0, 0x200);
1944 s->io_buffer[0] = 0x01; /* smart struct version */
1945
1946 for (n = 0; n < ARRAY_SIZE(smart_attributes); n++) {
1947 int i;
1948 for (i = 0; i < 11; i++) {
1949 s->io_buffer[2 + i + (n * 12)] = smart_attributes[n][i];
1950 }
1951 }
1952
1953 s->io_buffer[362] = 0x02 | (s->smart_autosave ? 0x80 : 0x00);
1954 if (s->smart_selftest_count == 0) {
1955 s->io_buffer[363] = 0;
1956 } else {
1957 s->io_buffer[363] =
1958 s->smart_selftest_data[3 +
1959 (s->smart_selftest_count - 1) *
1960 24];
1961 }
1962 s->io_buffer[364] = 0x20;
1963 s->io_buffer[365] = 0x01;
1964 /* offline data collection capacity: execute + self-test*/
1965 s->io_buffer[367] = (1 << 4 | 1 << 3 | 1);
1966 s->io_buffer[368] = 0x03; /* smart capability (1) */
1967 s->io_buffer[369] = 0x00; /* smart capability (2) */
1968 s->io_buffer[370] = 0x01; /* error logging supported */
1969 s->io_buffer[372] = 0x02; /* minutes for poll short test */
1970 s->io_buffer[373] = 0x36; /* minutes for poll ext test */
1971 s->io_buffer[374] = 0x01; /* minutes for poll conveyance */
1972
1973 for (n = 0; n < 511; n++) {
1974 s->io_buffer[511] += s->io_buffer[n];
1975 }
1976 s->io_buffer[511] = 0x100 - s->io_buffer[511];
1977
1978 s->status = READY_STAT | SEEK_STAT;
1979 ide_transfer_start(s, s->io_buffer, 0x200, ide_transfer_stop);
1980 ide_bus_set_irq(s->bus);
1981 return false;
1982
1983 case SMART_READ_LOG:
1984 switch (s->sector) {
1985 case 0x01: /* summary smart error log */
1986 memset(s->io_buffer, 0, 0x200);
1987 s->io_buffer[0] = 0x01;
1988 s->io_buffer[1] = 0x00; /* no error entries */
1989 s->io_buffer[452] = s->smart_errors & 0xff;
1990 s->io_buffer[453] = (s->smart_errors & 0xff00) >> 8;
1991
1992 for (n = 0; n < 511; n++) {
1993 s->io_buffer[511] += s->io_buffer[n];
1994 }
1995 s->io_buffer[511] = 0x100 - s->io_buffer[511];
1996 break;
1997 case 0x06: /* smart self test log */
1998 memset(s->io_buffer, 0, 0x200);
1999 s->io_buffer[0] = 0x01;
2000 if (s->smart_selftest_count == 0) {
2001 s->io_buffer[508] = 0;
2002 } else {
2003 s->io_buffer[508] = s->smart_selftest_count;
2004 for (n = 2; n < 506; n++) {
2005 s->io_buffer[n] = s->smart_selftest_data[n];
2006 }
2007 }
2008
2009 for (n = 0; n < 511; n++) {
2010 s->io_buffer[511] += s->io_buffer[n];
2011 }
2012 s->io_buffer[511] = 0x100 - s->io_buffer[511];
2013 break;
2014 default:
2015 goto abort_cmd;
2016 }
2017 s->status = READY_STAT | SEEK_STAT;
2018 ide_transfer_start(s, s->io_buffer, 0x200, ide_transfer_stop);
2019 ide_bus_set_irq(s->bus);
2020 return false;
2021
2022 case SMART_EXECUTE_OFFLINE:
2023 switch (s->sector) {
2024 case 0: /* off-line routine */
2025 case 1: /* short self test */
2026 case 2: /* extended self test */
2027 s->smart_selftest_count++;
2028 if (s->smart_selftest_count > 21) {
2029 s->smart_selftest_count = 1;
2030 }
2031 n = 2 + (s->smart_selftest_count - 1) * 24;
2032 s->smart_selftest_data[n] = s->sector;
2033 s->smart_selftest_data[n + 1] = 0x00; /* OK and finished */
2034 s->smart_selftest_data[n + 2] = 0x34; /* hour count lsb */
2035 s->smart_selftest_data[n + 3] = 0x12; /* hour count msb */
2036 break;
2037 default:
2038 goto abort_cmd;
2039 }
2040 return true;
2041 }
2042
2043 abort_cmd:
2044 ide_abort_command(s);
2045 return true;
2046 }
2047
2048 #define HD_OK (1u << IDE_HD)
2049 #define CD_OK (1u << IDE_CD)
2050 #define CFA_OK (1u << IDE_CFATA)
2051 #define HD_CFA_OK (HD_OK | CFA_OK)
2052 #define ALL_OK (HD_OK | CD_OK | CFA_OK)
2053
2054 /* Set the Disk Seek Completed status bit during completion */
2055 #define SET_DSC (1u << 8)
2056
2057 /* See ACS-2 T13/2015-D Table B.2 Command codes */
2058 static const struct {
2059 /* Returns true if the completion code should be run */
2060 bool (*handler)(IDEState *s, uint8_t cmd);
2061 int flags;
2062 } ide_cmd_table[0x100] = {
2063 /* NOP not implemented, mandatory for CD */
2064 [CFA_REQ_EXT_ERROR_CODE] = { cmd_cfa_req_ext_error_code, CFA_OK },
2065 [WIN_DSM] = { cmd_data_set_management, HD_CFA_OK },
2066 [WIN_DEVICE_RESET] = { cmd_device_reset, CD_OK },
2067 [WIN_RECAL] = { cmd_nop, HD_CFA_OK | SET_DSC},
2068 [WIN_READ] = { cmd_read_pio, ALL_OK },
2069 [WIN_READ_ONCE] = { cmd_read_pio, HD_CFA_OK },
2070 [WIN_READ_EXT] = { cmd_read_pio, HD_CFA_OK },
2071 [WIN_READDMA_EXT] = { cmd_read_dma, HD_CFA_OK },
2072 [WIN_READ_NATIVE_MAX_EXT] = { cmd_read_native_max, HD_CFA_OK | SET_DSC },
2073 [WIN_MULTREAD_EXT] = { cmd_read_multiple, HD_CFA_OK },
2074 [WIN_WRITE] = { cmd_write_pio, HD_CFA_OK },
2075 [WIN_WRITE_ONCE] = { cmd_write_pio, HD_CFA_OK },
2076 [WIN_WRITE_EXT] = { cmd_write_pio, HD_CFA_OK },
2077 [WIN_WRITEDMA_EXT] = { cmd_write_dma, HD_CFA_OK },
2078 [CFA_WRITE_SECT_WO_ERASE] = { cmd_write_pio, CFA_OK },
2079 [WIN_MULTWRITE_EXT] = { cmd_write_multiple, HD_CFA_OK },
2080 [WIN_WRITE_VERIFY] = { cmd_write_pio, HD_CFA_OK },
2081 [WIN_VERIFY] = { cmd_verify, HD_CFA_OK | SET_DSC },
2082 [WIN_VERIFY_ONCE] = { cmd_verify, HD_CFA_OK | SET_DSC },
2083 [WIN_VERIFY_EXT] = { cmd_verify, HD_CFA_OK | SET_DSC },
2084 [WIN_SEEK] = { cmd_seek, HD_CFA_OK | SET_DSC },
2085 [CFA_TRANSLATE_SECTOR] = { cmd_cfa_translate_sector, CFA_OK },
2086 [WIN_DIAGNOSE] = { cmd_exec_dev_diagnostic, ALL_OK },
2087 [WIN_SPECIFY] = { cmd_specify, HD_CFA_OK | SET_DSC },
2088 [WIN_STANDBYNOW2] = { cmd_nop, HD_CFA_OK },
2089 [WIN_IDLEIMMEDIATE2] = { cmd_nop, HD_CFA_OK },
2090 [WIN_STANDBY2] = { cmd_nop, HD_CFA_OK },
2091 [WIN_SETIDLE2] = { cmd_nop, HD_CFA_OK },
2092 [WIN_CHECKPOWERMODE2] = { cmd_check_power_mode, HD_CFA_OK | SET_DSC },
2093 [WIN_SLEEPNOW2] = { cmd_nop, HD_CFA_OK },
2094 [WIN_PACKETCMD] = { cmd_packet, CD_OK },
2095 [WIN_PIDENTIFY] = { cmd_identify_packet, CD_OK },
2096 [WIN_SMART] = { cmd_smart, HD_CFA_OK | SET_DSC },
2097 [CFA_ACCESS_METADATA_STORAGE] = { cmd_cfa_access_metadata_storage, CFA_OK },
2098 [CFA_ERASE_SECTORS] = { cmd_cfa_erase_sectors, CFA_OK | SET_DSC },
2099 [WIN_MULTREAD] = { cmd_read_multiple, HD_CFA_OK },
2100 [WIN_MULTWRITE] = { cmd_write_multiple, HD_CFA_OK },
2101 [WIN_SETMULT] = { cmd_set_multiple_mode, HD_CFA_OK | SET_DSC },
2102 [WIN_READDMA] = { cmd_read_dma, HD_CFA_OK },
2103 [WIN_READDMA_ONCE] = { cmd_read_dma, HD_CFA_OK },
2104 [WIN_WRITEDMA] = { cmd_write_dma, HD_CFA_OK },
2105 [WIN_WRITEDMA_ONCE] = { cmd_write_dma, HD_CFA_OK },
2106 [CFA_WRITE_MULTI_WO_ERASE] = { cmd_write_multiple, CFA_OK },
2107 [WIN_STANDBYNOW1] = { cmd_nop, HD_CFA_OK },
2108 [WIN_IDLEIMMEDIATE] = { cmd_nop, HD_CFA_OK },
2109 [WIN_STANDBY] = { cmd_nop, HD_CFA_OK },
2110 [WIN_SETIDLE1] = { cmd_nop, HD_CFA_OK },
2111 [WIN_CHECKPOWERMODE1] = { cmd_check_power_mode, HD_CFA_OK | SET_DSC },
2112 [WIN_SLEEPNOW1] = { cmd_nop, HD_CFA_OK },
2113 [WIN_FLUSH_CACHE] = { cmd_flush_cache, ALL_OK },
2114 [WIN_FLUSH_CACHE_EXT] = { cmd_flush_cache, HD_CFA_OK },
2115 [WIN_IDENTIFY] = { cmd_identify, ALL_OK },
2116 [WIN_SETFEATURES] = { cmd_set_features, ALL_OK | SET_DSC },
2117 [IBM_SENSE_CONDITION] = { cmd_ibm_sense_condition, CFA_OK | SET_DSC },
2118 [CFA_WEAR_LEVEL] = { cmd_cfa_erase_sectors, HD_CFA_OK | SET_DSC },
2119 [WIN_READ_NATIVE_MAX] = { cmd_read_native_max, HD_CFA_OK | SET_DSC },
2120 };
2121
2122 static bool ide_cmd_permitted(IDEState *s, uint32_t cmd)
2123 {
2124 return cmd < ARRAY_SIZE(ide_cmd_table)
2125 && (ide_cmd_table[cmd].flags & (1u << s->drive_kind));
2126 }
2127
2128 void ide_bus_exec_cmd(IDEBus *bus, uint32_t val)
2129 {
2130 IDEState *s;
2131 bool complete;
2132
2133 s = ide_bus_active_if(bus);
2134 trace_ide_bus_exec_cmd(bus, s, val);
2135
2136 /* ignore commands to non existent slave */
2137 if (s != bus->ifs && !s->blk) {
2138 return;
2139 }
2140
2141 /* Only RESET is allowed while BSY and/or DRQ are set,
2142 * and only to ATAPI devices. */
2143 if (s->status & (BUSY_STAT|DRQ_STAT)) {
2144 if (val != WIN_DEVICE_RESET || s->drive_kind != IDE_CD) {
2145 return;
2146 }
2147 }
2148
2149 if (!ide_cmd_permitted(s, val)) {
2150 ide_abort_command(s);
2151 ide_bus_set_irq(s->bus);
2152 return;
2153 }
2154
2155 s->status = READY_STAT | BUSY_STAT;
2156 s->error = 0;
2157 s->io_buffer_offset = 0;
2158
2159 complete = ide_cmd_table[val].handler(s, val);
2160 if (complete) {
2161 s->status &= ~BUSY_STAT;
2162 assert(!!s->error == !!(s->status & ERR_STAT));
2163
2164 if ((ide_cmd_table[val].flags & SET_DSC) && !s->error) {
2165 s->status |= SEEK_STAT;
2166 }
2167
2168 ide_cmd_done(s);
2169 ide_bus_set_irq(s->bus);
2170 }
2171 }
2172
2173 /* IOport [R]ead [R]egisters */
2174 enum ATA_IOPORT_RR {
2175 ATA_IOPORT_RR_DATA = 0,
2176 ATA_IOPORT_RR_ERROR = 1,
2177 ATA_IOPORT_RR_SECTOR_COUNT = 2,
2178 ATA_IOPORT_RR_SECTOR_NUMBER = 3,
2179 ATA_IOPORT_RR_CYLINDER_LOW = 4,
2180 ATA_IOPORT_RR_CYLINDER_HIGH = 5,
2181 ATA_IOPORT_RR_DEVICE_HEAD = 6,
2182 ATA_IOPORT_RR_STATUS = 7,
2183 ATA_IOPORT_RR_NUM_REGISTERS,
2184 };
2185
2186 const char *ATA_IOPORT_RR_lookup[ATA_IOPORT_RR_NUM_REGISTERS] = {
2187 [ATA_IOPORT_RR_DATA] = "Data",
2188 [ATA_IOPORT_RR_ERROR] = "Error",
2189 [ATA_IOPORT_RR_SECTOR_COUNT] = "Sector Count",
2190 [ATA_IOPORT_RR_SECTOR_NUMBER] = "Sector Number",
2191 [ATA_IOPORT_RR_CYLINDER_LOW] = "Cylinder Low",
2192 [ATA_IOPORT_RR_CYLINDER_HIGH] = "Cylinder High",
2193 [ATA_IOPORT_RR_DEVICE_HEAD] = "Device/Head",
2194 [ATA_IOPORT_RR_STATUS] = "Status"
2195 };
2196
2197 uint32_t ide_ioport_read(void *opaque, uint32_t addr)
2198 {
2199 IDEBus *bus = opaque;
2200 IDEState *s = ide_bus_active_if(bus);
2201 uint32_t reg_num;
2202 int ret, hob;
2203
2204 reg_num = addr & 7;
2205 hob = bus->cmd & (IDE_CTRL_HOB);
2206 switch (reg_num) {
2207 case ATA_IOPORT_RR_DATA:
2208 /*
2209 * The pre-GRUB Solaris x86 bootloader relies upon inb
2210 * consuming a word from the drive's sector buffer.
2211 */
2212 ret = ide_data_readw(bus, addr) & 0xff;
2213 break;
2214 case ATA_IOPORT_RR_ERROR:
2215 if ((!bus->ifs[0].blk && !bus->ifs[1].blk) ||
2216 (s != bus->ifs && !s->blk)) {
2217 ret = 0;
2218 } else if (!hob) {
2219 ret = s->error;
2220 } else {
2221 ret = s->hob_feature;
2222 }
2223 break;
2224 case ATA_IOPORT_RR_SECTOR_COUNT:
2225 if (!bus->ifs[0].blk && !bus->ifs[1].blk) {
2226 ret = 0;
2227 } else if (!hob) {
2228 ret = s->nsector & 0xff;
2229 } else {
2230 ret = s->hob_nsector;
2231 }
2232 break;
2233 case ATA_IOPORT_RR_SECTOR_NUMBER:
2234 if (!bus->ifs[0].blk && !bus->ifs[1].blk) {
2235 ret = 0;
2236 } else if (!hob) {
2237 ret = s->sector;
2238 } else {
2239 ret = s->hob_sector;
2240 }
2241 break;
2242 case ATA_IOPORT_RR_CYLINDER_LOW:
2243 if (!bus->ifs[0].blk && !bus->ifs[1].blk) {
2244 ret = 0;
2245 } else if (!hob) {
2246 ret = s->lcyl;
2247 } else {
2248 ret = s->hob_lcyl;
2249 }
2250 break;
2251 case ATA_IOPORT_RR_CYLINDER_HIGH:
2252 if (!bus->ifs[0].blk && !bus->ifs[1].blk) {
2253 ret = 0;
2254 } else if (!hob) {
2255 ret = s->hcyl;
2256 } else {
2257 ret = s->hob_hcyl;
2258 }
2259 break;
2260 case ATA_IOPORT_RR_DEVICE_HEAD:
2261 if (!bus->ifs[0].blk && !bus->ifs[1].blk) {
2262 ret = 0;
2263 } else {
2264 ret = s->select;
2265 }
2266 break;
2267 default:
2268 case ATA_IOPORT_RR_STATUS:
2269 if ((!bus->ifs[0].blk && !bus->ifs[1].blk) ||
2270 (s != bus->ifs && !s->blk)) {
2271 ret = 0;
2272 } else {
2273 ret = s->status;
2274 }
2275 qemu_irq_lower(bus->irq);
2276 break;
2277 }
2278
2279 trace_ide_ioport_read(addr, ATA_IOPORT_RR_lookup[reg_num], ret, bus, s);
2280 return ret;
2281 }
2282
2283 uint32_t ide_status_read(void *opaque, uint32_t addr)
2284 {
2285 IDEBus *bus = opaque;
2286 IDEState *s = ide_bus_active_if(bus);
2287 int ret;
2288
2289 if ((!bus->ifs[0].blk && !bus->ifs[1].blk) ||
2290 (s != bus->ifs && !s->blk)) {
2291 ret = 0;
2292 } else {
2293 ret = s->status;
2294 }
2295
2296 trace_ide_status_read(addr, ret, bus, s);
2297 return ret;
2298 }
2299
2300 static void ide_perform_srst(IDEState *s)
2301 {
2302 s->status |= BUSY_STAT;
2303
2304 /* Halt PIO (Via register state); PIO BH remains scheduled. */
2305 ide_transfer_halt(s);
2306
2307 /* Cancel DMA -- may drain block device and invoke callbacks */
2308 ide_cancel_dma_sync(s);
2309
2310 /* Cancel PIO callback, reset registers/signature, etc */
2311 ide_reset(s);
2312
2313 /* perform diagnostic */
2314 cmd_exec_dev_diagnostic(s, WIN_DIAGNOSE);
2315 }
2316
2317 static void ide_bus_perform_srst(void *opaque)
2318 {
2319 IDEBus *bus = opaque;
2320 IDEState *s;
2321 int i;
2322
2323 for (i = 0; i < 2; i++) {
2324 s = &bus->ifs[i];
2325 ide_perform_srst(s);
2326 }
2327
2328 bus->cmd &= ~IDE_CTRL_RESET;
2329 }
2330
2331 void ide_ctrl_write(void *opaque, uint32_t addr, uint32_t val)
2332 {
2333 IDEBus *bus = opaque;
2334 IDEState *s;
2335 int i;
2336
2337 trace_ide_ctrl_write(addr, val, bus);
2338
2339 /* Device0 and Device1 each have their own control register,
2340 * but QEMU models it as just one register in the controller. */
2341 if (!(bus->cmd & IDE_CTRL_RESET) && (val & IDE_CTRL_RESET)) {
2342 for (i = 0; i < 2; i++) {
2343 s = &bus->ifs[i];
2344 s->status |= BUSY_STAT;
2345 }
2346 replay_bh_schedule_oneshot_event(qemu_get_aio_context(),
2347 ide_bus_perform_srst, bus);
2348 }
2349
2350 bus->cmd = val;
2351 }
2352
2353 /*
2354 * Returns true if the running PIO transfer is a PIO out (i.e. data is
2355 * transferred from the device to the guest), false if it's a PIO in
2356 */
2357 static bool ide_is_pio_out(IDEState *s)
2358 {
2359 if (s->end_transfer_func == ide_sector_write ||
2360 s->end_transfer_func == ide_atapi_cmd) {
2361 return false;
2362 } else if (s->end_transfer_func == ide_sector_read ||
2363 s->end_transfer_func == ide_transfer_stop ||
2364 s->end_transfer_func == ide_atapi_cmd_reply_end ||
2365 s->end_transfer_func == ide_dummy_transfer_stop) {
2366 return true;
2367 }
2368
2369 abort();
2370 }
2371
2372 void ide_data_writew(void *opaque, uint32_t addr, uint32_t val)
2373 {
2374 IDEBus *bus = opaque;
2375 IDEState *s = ide_bus_active_if(bus);
2376 uint8_t *p;
2377
2378 trace_ide_data_writew(addr, val, bus, s);
2379
2380 /* PIO data access allowed only when DRQ bit is set. The result of a write
2381 * during PIO out is indeterminate, just ignore it. */
2382 if (!(s->status & DRQ_STAT) || ide_is_pio_out(s)) {
2383 return;
2384 }
2385
2386 p = s->data_ptr;
2387 if (s->io8) {
2388 if (p + 1 > s->data_end) {
2389 return;
2390 }
2391
2392 *p++ = val;
2393 } else {
2394 if (p + 2 > s->data_end) {
2395 return;
2396 }
2397
2398 *(uint16_t *)p = le16_to_cpu(val);
2399 p += 2;
2400 }
2401 s->data_ptr = p;
2402 if (p >= s->data_end) {
2403 s->status &= ~DRQ_STAT;
2404 s->end_transfer_func(s);
2405 }
2406 }
2407
2408 uint32_t ide_data_readw(void *opaque, uint32_t addr)
2409 {
2410 IDEBus *bus = opaque;
2411 IDEState *s = ide_bus_active_if(bus);
2412 uint8_t *p;
2413 int ret;
2414
2415 /* PIO data access allowed only when DRQ bit is set. The result of a read
2416 * during PIO in is indeterminate, return 0 and don't move forward. */
2417 if (!(s->status & DRQ_STAT) || !ide_is_pio_out(s)) {
2418 return 0;
2419 }
2420
2421 p = s->data_ptr;
2422 if (s->io8) {
2423 if (p + 1 > s->data_end) {
2424 return 0;
2425 }
2426
2427 ret = *p++;
2428 } else {
2429 if (p + 2 > s->data_end) {
2430 return 0;
2431 }
2432
2433 ret = cpu_to_le16(*(uint16_t *)p);
2434 p += 2;
2435 }
2436 s->data_ptr = p;
2437 if (p >= s->data_end) {
2438 s->status &= ~DRQ_STAT;
2439 s->end_transfer_func(s);
2440 }
2441
2442 trace_ide_data_readw(addr, ret, bus, s);
2443 return ret;
2444 }
2445
2446 void ide_data_writel(void *opaque, uint32_t addr, uint32_t val)
2447 {
2448 IDEBus *bus = opaque;
2449 IDEState *s = ide_bus_active_if(bus);
2450 uint8_t *p;
2451
2452 trace_ide_data_writel(addr, val, bus, s);
2453
2454 /* PIO data access allowed only when DRQ bit is set. The result of a write
2455 * during PIO out is indeterminate, just ignore it. */
2456 if (!(s->status & DRQ_STAT) || ide_is_pio_out(s)) {
2457 return;
2458 }
2459
2460 p = s->data_ptr;
2461 if (p + 4 > s->data_end) {
2462 return;
2463 }
2464
2465 *(uint32_t *)p = le32_to_cpu(val);
2466 p += 4;
2467 s->data_ptr = p;
2468 if (p >= s->data_end) {
2469 s->status &= ~DRQ_STAT;
2470 s->end_transfer_func(s);
2471 }
2472 }
2473
2474 uint32_t ide_data_readl(void *opaque, uint32_t addr)
2475 {
2476 IDEBus *bus = opaque;
2477 IDEState *s = ide_bus_active_if(bus);
2478 uint8_t *p;
2479 int ret;
2480
2481 /* PIO data access allowed only when DRQ bit is set. The result of a read
2482 * during PIO in is indeterminate, return 0 and don't move forward. */
2483 if (!(s->status & DRQ_STAT) || !ide_is_pio_out(s)) {
2484 ret = 0;
2485 goto out;
2486 }
2487
2488 p = s->data_ptr;
2489 if (p + 4 > s->data_end) {
2490 return 0;
2491 }
2492
2493 ret = cpu_to_le32(*(uint32_t *)p);
2494 p += 4;
2495 s->data_ptr = p;
2496 if (p >= s->data_end) {
2497 s->status &= ~DRQ_STAT;
2498 s->end_transfer_func(s);
2499 }
2500
2501 out:
2502 trace_ide_data_readl(addr, ret, bus, s);
2503 return ret;
2504 }
2505
2506 static void ide_dummy_transfer_stop(IDEState *s)
2507 {
2508 s->data_ptr = s->io_buffer;
2509 s->data_end = s->io_buffer;
2510 s->io_buffer[0] = 0xff;
2511 s->io_buffer[1] = 0xff;
2512 s->io_buffer[2] = 0xff;
2513 s->io_buffer[3] = 0xff;
2514 }
2515
2516 void ide_bus_reset(IDEBus *bus)
2517 {
2518 bus->unit = 0;
2519 bus->cmd = 0;
2520 ide_reset(&bus->ifs[0]);
2521 ide_reset(&bus->ifs[1]);
2522 ide_clear_hob(bus);
2523
2524 /* pending async DMA */
2525 if (bus->dma->aiocb) {
2526 trace_ide_bus_reset_aio();
2527 blk_aio_cancel(bus->dma->aiocb);
2528 bus->dma->aiocb = NULL;
2529 }
2530
2531 /* reset dma provider too */
2532 if (bus->dma->ops->reset) {
2533 bus->dma->ops->reset(bus->dma);
2534 }
2535 }
2536
2537 static bool ide_cd_is_tray_open(void *opaque)
2538 {
2539 return ((IDEState *)opaque)->tray_open;
2540 }
2541
2542 static bool ide_cd_is_medium_locked(void *opaque)
2543 {
2544 return ((IDEState *)opaque)->tray_locked;
2545 }
2546
2547 static void ide_resize_cb(void *opaque)
2548 {
2549 IDEState *s = opaque;
2550 uint64_t nb_sectors;
2551
2552 if (!s->identify_set) {
2553 return;
2554 }
2555
2556 blk_get_geometry(s->blk, &nb_sectors);
2557 s->nb_sectors = nb_sectors;
2558
2559 /* Update the identify data buffer. */
2560 if (s->drive_kind == IDE_CFATA) {
2561 ide_cfata_identify_size(s);
2562 } else {
2563 /* IDE_CD uses a different set of callbacks entirely. */
2564 assert(s->drive_kind != IDE_CD);
2565 ide_identify_size(s);
2566 }
2567 }
2568
2569 static const BlockDevOps ide_cd_block_ops = {
2570 .change_media_cb = ide_cd_change_cb,
2571 .eject_request_cb = ide_cd_eject_request_cb,
2572 .is_tray_open = ide_cd_is_tray_open,
2573 .is_medium_locked = ide_cd_is_medium_locked,
2574 };
2575
2576 static const BlockDevOps ide_hd_block_ops = {
2577 .resize_cb = ide_resize_cb,
2578 };
2579
2580 int ide_init_drive(IDEState *s, BlockBackend *blk, IDEDriveKind kind,
2581 const char *version, const char *serial, const char *model,
2582 uint64_t wwn,
2583 uint32_t cylinders, uint32_t heads, uint32_t secs,
2584 int chs_trans, Error **errp)
2585 {
2586 uint64_t nb_sectors;
2587
2588 s->blk = blk;
2589 s->drive_kind = kind;
2590
2591 blk_get_geometry(blk, &nb_sectors);
2592 s->cylinders = cylinders;
2593 s->heads = s->drive_heads = heads;
2594 s->sectors = s->drive_sectors = secs;
2595 s->chs_trans = chs_trans;
2596 s->nb_sectors = nb_sectors;
2597 s->wwn = wwn;
2598 /* The SMART values should be preserved across power cycles
2599 but they aren't. */
2600 s->smart_enabled = 1;
2601 s->smart_autosave = 1;
2602 s->smart_errors = 0;
2603 s->smart_selftest_count = 0;
2604 if (kind == IDE_CD) {
2605 blk_set_dev_ops(blk, &ide_cd_block_ops, s);
2606 } else {
2607 if (!blk_is_inserted(s->blk)) {
2608 error_setg(errp, "Device needs media, but drive is empty");
2609 return -1;
2610 }
2611 if (!blk_is_writable(blk)) {
2612 error_setg(errp, "Can't use a read-only drive");
2613 return -1;
2614 }
2615 blk_set_dev_ops(blk, &ide_hd_block_ops, s);
2616 }
2617 if (serial) {
2618 pstrcpy(s->drive_serial_str, sizeof(s->drive_serial_str), serial);
2619 } else {
2620 snprintf(s->drive_serial_str, sizeof(s->drive_serial_str),
2621 "QM%05d", s->drive_serial);
2622 }
2623 if (model) {
2624 pstrcpy(s->drive_model_str, sizeof(s->drive_model_str), model);
2625 } else {
2626 switch (kind) {
2627 case IDE_CD:
2628 strcpy(s->drive_model_str, "QEMU DVD-ROM");
2629 break;
2630 case IDE_CFATA:
2631 strcpy(s->drive_model_str, "QEMU MICRODRIVE");
2632 break;
2633 default:
2634 strcpy(s->drive_model_str, "QEMU HARDDISK");
2635 break;
2636 }
2637 }
2638
2639 if (version) {
2640 pstrcpy(s->version, sizeof(s->version), version);
2641 } else {
2642 pstrcpy(s->version, sizeof(s->version), qemu_hw_version());
2643 }
2644
2645 ide_reset(s);
2646 blk_iostatus_enable(blk);
2647 return 0;
2648 }
2649
2650 static void ide_init1(IDEBus *bus, int unit)
2651 {
2652 static int drive_serial = 1;
2653 IDEState *s = &bus->ifs[unit];
2654
2655 s->bus = bus;
2656 s->unit = unit;
2657 s->drive_serial = drive_serial++;
2658 /* we need at least 2k alignment for accessing CDROMs using O_DIRECT */
2659 s->io_buffer_total_len = IDE_DMA_BUF_SECTORS*512 + 4;
2660 s->io_buffer = qemu_memalign(2048, s->io_buffer_total_len);
2661 memset(s->io_buffer, 0, s->io_buffer_total_len);
2662
2663 s->smart_selftest_data = blk_blockalign(s->blk, 512);
2664 memset(s->smart_selftest_data, 0, 512);
2665
2666 s->sector_write_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
2667 ide_sector_write_timer_cb, s);
2668 }
2669
2670 static int ide_nop_int(const IDEDMA *dma, bool is_write)
2671 {
2672 return 0;
2673 }
2674
2675 static void ide_nop(const IDEDMA *dma)
2676 {
2677 }
2678
2679 static int32_t ide_nop_int32(const IDEDMA *dma, int32_t l)
2680 {
2681 return 0;
2682 }
2683
2684 static const IDEDMAOps ide_dma_nop_ops = {
2685 .prepare_buf = ide_nop_int32,
2686 .restart_dma = ide_nop,
2687 .rw_buf = ide_nop_int,
2688 };
2689
2690 static void ide_restart_dma(IDEState *s, enum ide_dma_cmd dma_cmd)
2691 {
2692 s->unit = s->bus->retry_unit;
2693 ide_set_sector(s, s->bus->retry_sector_num);
2694 s->nsector = s->bus->retry_nsector;
2695 s->bus->dma->ops->restart_dma(s->bus->dma);
2696 s->io_buffer_size = 0;
2697 s->dma_cmd = dma_cmd;
2698 ide_start_dma(s, ide_dma_cb);
2699 }
2700
2701 static void ide_restart_bh(void *opaque)
2702 {
2703 IDEBus *bus = opaque;
2704 IDEState *s;
2705 bool is_read;
2706 int error_status;
2707
2708 qemu_bh_delete(bus->bh);
2709 bus->bh = NULL;
2710
2711 error_status = bus->error_status;
2712 if (bus->error_status == 0) {
2713 return;
2714 }
2715
2716 s = ide_bus_active_if(bus);
2717 is_read = (bus->error_status & IDE_RETRY_READ) != 0;
2718
2719 /* The error status must be cleared before resubmitting the request: The
2720 * request may fail again, and this case can only be distinguished if the
2721 * called function can set a new error status. */
2722 bus->error_status = 0;
2723
2724 /* The HBA has generically asked to be kicked on retry */
2725 if (error_status & IDE_RETRY_HBA) {
2726 if (s->bus->dma->ops->restart) {
2727 s->bus->dma->ops->restart(s->bus->dma);
2728 }
2729 } else if (IS_IDE_RETRY_DMA(error_status)) {
2730 if (error_status & IDE_RETRY_TRIM) {
2731 ide_restart_dma(s, IDE_DMA_TRIM);
2732 } else {
2733 ide_restart_dma(s, is_read ? IDE_DMA_READ : IDE_DMA_WRITE);
2734 }
2735 } else if (IS_IDE_RETRY_PIO(error_status)) {
2736 if (is_read) {
2737 ide_sector_read(s);
2738 } else {
2739 ide_sector_write(s);
2740 }
2741 } else if (error_status & IDE_RETRY_FLUSH) {
2742 ide_flush_cache(s);
2743 } else if (IS_IDE_RETRY_ATAPI(error_status)) {
2744 assert(s->end_transfer_func == ide_atapi_cmd);
2745 ide_atapi_dma_restart(s);
2746 } else {
2747 abort();
2748 }
2749 }
2750
2751 static void ide_restart_cb(void *opaque, bool running, RunState state)
2752 {
2753 IDEBus *bus = opaque;
2754
2755 if (!running)
2756 return;
2757
2758 if (!bus->bh) {
2759 bus->bh = qemu_bh_new(ide_restart_bh, bus);
2760 qemu_bh_schedule(bus->bh);
2761 }
2762 }
2763
2764 void ide_bus_register_restart_cb(IDEBus *bus)
2765 {
2766 if (bus->dma->ops->restart_dma) {
2767 bus->vmstate = qemu_add_vm_change_state_handler(ide_restart_cb, bus);
2768 }
2769 }
2770
2771 static IDEDMA ide_dma_nop = {
2772 .ops = &ide_dma_nop_ops,
2773 .aiocb = NULL,
2774 };
2775
2776 void ide_bus_init_output_irq(IDEBus *bus, qemu_irq irq_out)
2777 {
2778 int i;
2779
2780 for(i = 0; i < 2; i++) {
2781 ide_init1(bus, i);
2782 ide_reset(&bus->ifs[i]);
2783 }
2784 bus->irq = irq_out;
2785 bus->dma = &ide_dma_nop;
2786 }
2787
2788 void ide_bus_set_irq(IDEBus *bus)
2789 {
2790 if (!(bus->cmd & IDE_CTRL_DISABLE_IRQ)) {
2791 qemu_irq_raise(bus->irq);
2792 }
2793 }
2794
2795 void ide_exit(IDEState *s)
2796 {
2797 timer_free(s->sector_write_timer);
2798 qemu_vfree(s->smart_selftest_data);
2799 qemu_vfree(s->io_buffer);
2800 }
2801
2802 static bool is_identify_set(void *opaque, int version_id)
2803 {
2804 IDEState *s = opaque;
2805
2806 return s->identify_set != 0;
2807 }
2808
2809 static EndTransferFunc* transfer_end_table[] = {
2810 ide_sector_read,
2811 ide_sector_write,
2812 ide_transfer_stop,
2813 ide_atapi_cmd_reply_end,
2814 ide_atapi_cmd,
2815 ide_dummy_transfer_stop,
2816 };
2817
2818 static int transfer_end_table_idx(EndTransferFunc *fn)
2819 {
2820 int i;
2821
2822 for (i = 0; i < ARRAY_SIZE(transfer_end_table); i++)
2823 if (transfer_end_table[i] == fn)
2824 return i;
2825
2826 return -1;
2827 }
2828
2829 static int ide_drive_post_load(void *opaque, int version_id)
2830 {
2831 IDEState *s = opaque;
2832
2833 if (s->blk && s->identify_set) {
2834 blk_set_enable_write_cache(s->blk, !!(s->identify_data[85] & (1 << 5)));
2835 }
2836 return 0;
2837 }
2838
2839 static int ide_drive_pio_post_load(void *opaque, int version_id)
2840 {
2841 IDEState *s = opaque;
2842
2843 if (s->end_transfer_fn_idx >= ARRAY_SIZE(transfer_end_table)) {
2844 return -EINVAL;
2845 }
2846 s->end_transfer_func = transfer_end_table[s->end_transfer_fn_idx];
2847 s->data_ptr = s->io_buffer + s->cur_io_buffer_offset;
2848 s->data_end = s->data_ptr + s->cur_io_buffer_len;
2849 s->atapi_dma = s->feature & 1; /* as per cmd_packet */
2850
2851 return 0;
2852 }
2853
2854 static int ide_drive_pio_pre_save(void *opaque)
2855 {
2856 IDEState *s = opaque;
2857 int idx;
2858
2859 s->cur_io_buffer_offset = s->data_ptr - s->io_buffer;
2860 s->cur_io_buffer_len = s->data_end - s->data_ptr;
2861
2862 idx = transfer_end_table_idx(s->end_transfer_func);
2863 if (idx == -1) {
2864 fprintf(stderr, "%s: invalid end_transfer_func for DRQ_STAT\n",
2865 __func__);
2866 s->end_transfer_fn_idx = 2;
2867 } else {
2868 s->end_transfer_fn_idx = idx;
2869 }
2870
2871 return 0;
2872 }
2873
2874 static bool ide_drive_pio_state_needed(void *opaque)
2875 {
2876 IDEState *s = opaque;
2877
2878 return ((s->status & DRQ_STAT) != 0)
2879 || (s->bus->error_status & IDE_RETRY_PIO);
2880 }
2881
2882 static bool ide_tray_state_needed(void *opaque)
2883 {
2884 IDEState *s = opaque;
2885
2886 return s->tray_open || s->tray_locked;
2887 }
2888
2889 static bool ide_atapi_gesn_needed(void *opaque)
2890 {
2891 IDEState *s = opaque;
2892
2893 return s->events.new_media || s->events.eject_request;
2894 }
2895
2896 static bool ide_error_needed(void *opaque)
2897 {
2898 IDEBus *bus = opaque;
2899
2900 return (bus->error_status != 0);
2901 }
2902
2903 /* Fields for GET_EVENT_STATUS_NOTIFICATION ATAPI command */
2904 static const VMStateDescription vmstate_ide_atapi_gesn_state = {
2905 .name ="ide_drive/atapi/gesn_state",
2906 .version_id = 1,
2907 .minimum_version_id = 1,
2908 .needed = ide_atapi_gesn_needed,
2909 .fields = (VMStateField[]) {
2910 VMSTATE_BOOL(events.new_media, IDEState),
2911 VMSTATE_BOOL(events.eject_request, IDEState),
2912 VMSTATE_END_OF_LIST()
2913 }
2914 };
2915
2916 static const VMStateDescription vmstate_ide_tray_state = {
2917 .name = "ide_drive/tray_state",
2918 .version_id = 1,
2919 .minimum_version_id = 1,
2920 .needed = ide_tray_state_needed,
2921 .fields = (VMStateField[]) {
2922 VMSTATE_BOOL(tray_open, IDEState),
2923 VMSTATE_BOOL(tray_locked, IDEState),
2924 VMSTATE_END_OF_LIST()
2925 }
2926 };
2927
2928 static const VMStateDescription vmstate_ide_drive_pio_state = {
2929 .name = "ide_drive/pio_state",
2930 .version_id = 1,
2931 .minimum_version_id = 1,
2932 .pre_save = ide_drive_pio_pre_save,
2933 .post_load = ide_drive_pio_post_load,
2934 .needed = ide_drive_pio_state_needed,
2935 .fields = (VMStateField[]) {
2936 VMSTATE_INT32(req_nb_sectors, IDEState),
2937 VMSTATE_VARRAY_INT32(io_buffer, IDEState, io_buffer_total_len, 1,
2938 vmstate_info_uint8, uint8_t),
2939 VMSTATE_INT32(cur_io_buffer_offset, IDEState),
2940 VMSTATE_INT32(cur_io_buffer_len, IDEState),
2941 VMSTATE_UINT8(end_transfer_fn_idx, IDEState),
2942 VMSTATE_INT32(elementary_transfer_size, IDEState),
2943 VMSTATE_INT32(packet_transfer_size, IDEState),
2944 VMSTATE_END_OF_LIST()
2945 }
2946 };
2947
2948 const VMStateDescription vmstate_ide_drive = {
2949 .name = "ide_drive",
2950 .version_id = 3,
2951 .minimum_version_id = 0,
2952 .post_load = ide_drive_post_load,
2953 .fields = (VMStateField[]) {
2954 VMSTATE_INT32(mult_sectors, IDEState),
2955 VMSTATE_INT32(identify_set, IDEState),
2956 VMSTATE_BUFFER_TEST(identify_data, IDEState, is_identify_set),
2957 VMSTATE_UINT8(feature, IDEState),
2958 VMSTATE_UINT8(error, IDEState),
2959 VMSTATE_UINT32(nsector, IDEState),
2960 VMSTATE_UINT8(sector, IDEState),
2961 VMSTATE_UINT8(lcyl, IDEState),
2962 VMSTATE_UINT8(hcyl, IDEState),
2963 VMSTATE_UINT8(hob_feature, IDEState),
2964 VMSTATE_UINT8(hob_sector, IDEState),
2965 VMSTATE_UINT8(hob_nsector, IDEState),
2966 VMSTATE_UINT8(hob_lcyl, IDEState),
2967 VMSTATE_UINT8(hob_hcyl, IDEState),
2968 VMSTATE_UINT8(select, IDEState),
2969 VMSTATE_UINT8(status, IDEState),
2970 VMSTATE_UINT8(lba48, IDEState),
2971 VMSTATE_UINT8(sense_key, IDEState),
2972 VMSTATE_UINT8(asc, IDEState),
2973 VMSTATE_UINT8_V(cdrom_changed, IDEState, 3),
2974 VMSTATE_END_OF_LIST()
2975 },
2976 .subsections = (const VMStateDescription*[]) {
2977 &vmstate_ide_drive_pio_state,
2978 &vmstate_ide_tray_state,
2979 &vmstate_ide_atapi_gesn_state,
2980 NULL
2981 }
2982 };
2983
2984 static const VMStateDescription vmstate_ide_error_status = {
2985 .name ="ide_bus/error",
2986 .version_id = 2,
2987 .minimum_version_id = 1,
2988 .needed = ide_error_needed,
2989 .fields = (VMStateField[]) {
2990 VMSTATE_INT32(error_status, IDEBus),
2991 VMSTATE_INT64_V(retry_sector_num, IDEBus, 2),
2992 VMSTATE_UINT32_V(retry_nsector, IDEBus, 2),
2993 VMSTATE_UINT8_V(retry_unit, IDEBus, 2),
2994 VMSTATE_END_OF_LIST()
2995 }
2996 };
2997
2998 const VMStateDescription vmstate_ide_bus = {
2999 .name = "ide_bus",
3000 .version_id = 1,
3001 .minimum_version_id = 1,
3002 .fields = (VMStateField[]) {
3003 VMSTATE_UINT8(cmd, IDEBus),
3004 VMSTATE_UINT8(unit, IDEBus),
3005 VMSTATE_END_OF_LIST()
3006 },
3007 .subsections = (const VMStateDescription*[]) {
3008 &vmstate_ide_error_status,
3009 NULL
3010 }
3011 };
3012
3013 void ide_drive_get(DriveInfo **hd, int n)
3014 {
3015 int i;
3016
3017 for (i = 0; i < n; i++) {
3018 hd[i] = drive_get_by_index(IF_IDE, i);
3019 }
3020 }