]> Git Repo - qemu.git/blob - hw/ide/core.c
isa: Use realizefn for ISADevice
[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 #include <hw/hw.h>
26 #include <hw/i386/pc.h>
27 #include <hw/pci/pci.h>
28 #include <hw/isa/isa.h>
29 #include "qemu/error-report.h"
30 #include "qemu/timer.h"
31 #include "sysemu/sysemu.h"
32 #include "sysemu/dma.h"
33 #include "hw/block/block.h"
34 #include "sysemu/blockdev.h"
35
36 #include <hw/ide/internal.h>
37
38 /* These values were based on a Seagate ST3500418AS but have been modified
39    to make more sense in QEMU */
40 static const int smart_attributes[][12] = {
41     /* id,  flags, hflags, val, wrst, raw (6 bytes), threshold */
42     /* raw read error rate*/
43     { 0x01, 0x03, 0x00, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06},
44     /* spin up */
45     { 0x03, 0x03, 0x00, 0x64, 0x64, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
46     /* start stop count */
47     { 0x04, 0x02, 0x00, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14},
48     /* remapped sectors */
49     { 0x05, 0x03, 0x00, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24},
50     /* power on hours */
51     { 0x09, 0x03, 0x00, 0x64, 0x64, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
52     /* power cycle count */
53     { 0x0c, 0x03, 0x00, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
54     /* airflow-temperature-celsius */
55     { 190,  0x03, 0x00, 0x45, 0x45, 0x1f, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x32},
56 };
57
58 static int ide_handle_rw_error(IDEState *s, int error, int op);
59 static void ide_dummy_transfer_stop(IDEState *s);
60
61 static void padstr(char *str, const char *src, int len)
62 {
63     int i, v;
64     for(i = 0; i < len; i++) {
65         if (*src)
66             v = *src++;
67         else
68             v = ' ';
69         str[i^1] = v;
70     }
71 }
72
73 static void put_le16(uint16_t *p, unsigned int v)
74 {
75     *p = cpu_to_le16(v);
76 }
77
78 static void ide_identify(IDEState *s)
79 {
80     uint16_t *p;
81     unsigned int oldsize;
82     IDEDevice *dev = s->unit ? s->bus->slave : s->bus->master;
83
84     if (s->identify_set) {
85         memcpy(s->io_buffer, s->identify_data, sizeof(s->identify_data));
86         return;
87     }
88
89     memset(s->io_buffer, 0, 512);
90     p = (uint16_t *)s->io_buffer;
91     put_le16(p + 0, 0x0040);
92     put_le16(p + 1, s->cylinders);
93     put_le16(p + 3, s->heads);
94     put_le16(p + 4, 512 * s->sectors); /* XXX: retired, remove ? */
95     put_le16(p + 5, 512); /* XXX: retired, remove ? */
96     put_le16(p + 6, s->sectors);
97     padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
98     put_le16(p + 20, 3); /* XXX: retired, remove ? */
99     put_le16(p + 21, 512); /* cache size in sectors */
100     put_le16(p + 22, 4); /* ecc bytes */
101     padstr((char *)(p + 23), s->version, 8); /* firmware version */
102     padstr((char *)(p + 27), s->drive_model_str, 40); /* model */
103 #if MAX_MULT_SECTORS > 1
104     put_le16(p + 47, 0x8000 | MAX_MULT_SECTORS);
105 #endif
106     put_le16(p + 48, 1); /* dword I/O */
107     put_le16(p + 49, (1 << 11) | (1 << 9) | (1 << 8)); /* DMA and LBA supported */
108     put_le16(p + 51, 0x200); /* PIO transfer cycle */
109     put_le16(p + 52, 0x200); /* DMA transfer cycle */
110     put_le16(p + 53, 1 | (1 << 1) | (1 << 2)); /* words 54-58,64-70,88 are valid */
111     put_le16(p + 54, s->cylinders);
112     put_le16(p + 55, s->heads);
113     put_le16(p + 56, s->sectors);
114     oldsize = s->cylinders * s->heads * s->sectors;
115     put_le16(p + 57, oldsize);
116     put_le16(p + 58, oldsize >> 16);
117     if (s->mult_sectors)
118         put_le16(p + 59, 0x100 | s->mult_sectors);
119     put_le16(p + 60, s->nb_sectors);
120     put_le16(p + 61, s->nb_sectors >> 16);
121     put_le16(p + 62, 0x07); /* single word dma0-2 supported */
122     put_le16(p + 63, 0x07); /* mdma0-2 supported */
123     put_le16(p + 64, 0x03); /* pio3-4 supported */
124     put_le16(p + 65, 120);
125     put_le16(p + 66, 120);
126     put_le16(p + 67, 120);
127     put_le16(p + 68, 120);
128     if (dev && dev->conf.discard_granularity) {
129         put_le16(p + 69, (1 << 14)); /* determinate TRIM behavior */
130     }
131
132     if (s->ncq_queues) {
133         put_le16(p + 75, s->ncq_queues - 1);
134         /* NCQ supported */
135         put_le16(p + 76, (1 << 8));
136     }
137
138     put_le16(p + 80, 0xf0); /* ata3 -> ata6 supported */
139     put_le16(p + 81, 0x16); /* conforms to ata5 */
140     /* 14=NOP supported, 5=WCACHE supported, 0=SMART supported */
141     put_le16(p + 82, (1 << 14) | (1 << 5) | 1);
142     /* 13=flush_cache_ext,12=flush_cache,10=lba48 */
143     put_le16(p + 83, (1 << 14) | (1 << 13) | (1 <<12) | (1 << 10));
144     /* 14=set to 1, 8=has WWN, 1=SMART self test, 0=SMART error logging */
145     if (s->wwn) {
146         put_le16(p + 84, (1 << 14) | (1 << 8) | 0);
147     } else {
148         put_le16(p + 84, (1 << 14) | 0);
149     }
150     /* 14 = NOP supported, 5=WCACHE enabled, 0=SMART feature set enabled */
151     if (bdrv_enable_write_cache(s->bs))
152          put_le16(p + 85, (1 << 14) | (1 << 5) | 1);
153     else
154          put_le16(p + 85, (1 << 14) | 1);
155     /* 13=flush_cache_ext,12=flush_cache,10=lba48 */
156     put_le16(p + 86, (1 << 13) | (1 <<12) | (1 << 10));
157     /* 14=set to 1, 8=has WWN, 1=SMART self test, 0=SMART error logging */
158     if (s->wwn) {
159         put_le16(p + 87, (1 << 14) | (1 << 8) | 0);
160     } else {
161         put_le16(p + 87, (1 << 14) | 0);
162     }
163     put_le16(p + 88, 0x3f | (1 << 13)); /* udma5 set and supported */
164     put_le16(p + 93, 1 | (1 << 14) | 0x2000);
165     put_le16(p + 100, s->nb_sectors);
166     put_le16(p + 101, s->nb_sectors >> 16);
167     put_le16(p + 102, s->nb_sectors >> 32);
168     put_le16(p + 103, s->nb_sectors >> 48);
169
170     if (dev && dev->conf.physical_block_size)
171         put_le16(p + 106, 0x6000 | get_physical_block_exp(&dev->conf));
172     if (s->wwn) {
173         /* LE 16-bit words 111-108 contain 64-bit World Wide Name */
174         put_le16(p + 108, s->wwn >> 48);
175         put_le16(p + 109, s->wwn >> 32);
176         put_le16(p + 110, s->wwn >> 16);
177         put_le16(p + 111, s->wwn);
178     }
179     if (dev && dev->conf.discard_granularity) {
180         put_le16(p + 169, 1); /* TRIM support */
181     }
182
183     memcpy(s->identify_data, p, sizeof(s->identify_data));
184     s->identify_set = 1;
185 }
186
187 static void ide_atapi_identify(IDEState *s)
188 {
189     uint16_t *p;
190
191     if (s->identify_set) {
192         memcpy(s->io_buffer, s->identify_data, sizeof(s->identify_data));
193         return;
194     }
195
196     memset(s->io_buffer, 0, 512);
197     p = (uint16_t *)s->io_buffer;
198     /* Removable CDROM, 50us response, 12 byte packets */
199     put_le16(p + 0, (2 << 14) | (5 << 8) | (1 << 7) | (2 << 5) | (0 << 0));
200     padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
201     put_le16(p + 20, 3); /* buffer type */
202     put_le16(p + 21, 512); /* cache size in sectors */
203     put_le16(p + 22, 4); /* ecc bytes */
204     padstr((char *)(p + 23), s->version, 8); /* firmware version */
205     padstr((char *)(p + 27), s->drive_model_str, 40); /* model */
206     put_le16(p + 48, 1); /* dword I/O (XXX: should not be set on CDROM) */
207 #ifdef USE_DMA_CDROM
208     put_le16(p + 49, 1 << 9 | 1 << 8); /* DMA and LBA supported */
209     put_le16(p + 53, 7); /* words 64-70, 54-58, 88 valid */
210     put_le16(p + 62, 7);  /* single word dma0-2 supported */
211     put_le16(p + 63, 7);  /* mdma0-2 supported */
212 #else
213     put_le16(p + 49, 1 << 9); /* LBA supported, no DMA */
214     put_le16(p + 53, 3); /* words 64-70, 54-58 valid */
215     put_le16(p + 63, 0x103); /* DMA modes XXX: may be incorrect */
216 #endif
217     put_le16(p + 64, 3); /* pio3-4 supported */
218     put_le16(p + 65, 0xb4); /* minimum DMA multiword tx cycle time */
219     put_le16(p + 66, 0xb4); /* recommended DMA multiword tx cycle time */
220     put_le16(p + 67, 0x12c); /* minimum PIO cycle time without flow control */
221     put_le16(p + 68, 0xb4); /* minimum PIO cycle time with IORDY flow control */
222
223     put_le16(p + 71, 30); /* in ns */
224     put_le16(p + 72, 30); /* in ns */
225
226     if (s->ncq_queues) {
227         put_le16(p + 75, s->ncq_queues - 1);
228         /* NCQ supported */
229         put_le16(p + 76, (1 << 8));
230     }
231
232     put_le16(p + 80, 0x1e); /* support up to ATA/ATAPI-4 */
233 #ifdef USE_DMA_CDROM
234     put_le16(p + 88, 0x3f | (1 << 13)); /* udma5 set and supported */
235 #endif
236     memcpy(s->identify_data, p, sizeof(s->identify_data));
237     s->identify_set = 1;
238 }
239
240 static void ide_cfata_identify(IDEState *s)
241 {
242     uint16_t *p;
243     uint32_t cur_sec;
244
245     p = (uint16_t *) s->identify_data;
246     if (s->identify_set)
247         goto fill_buffer;
248
249     memset(p, 0, sizeof(s->identify_data));
250
251     cur_sec = s->cylinders * s->heads * s->sectors;
252
253     put_le16(p + 0, 0x848a);                    /* CF Storage Card signature */
254     put_le16(p + 1, s->cylinders);              /* Default cylinders */
255     put_le16(p + 3, s->heads);                  /* Default heads */
256     put_le16(p + 6, s->sectors);                /* Default sectors per track */
257     put_le16(p + 7, s->nb_sectors >> 16);       /* Sectors per card */
258     put_le16(p + 8, s->nb_sectors);             /* Sectors per card */
259     padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
260     put_le16(p + 22, 0x0004);                   /* ECC bytes */
261     padstr((char *) (p + 23), s->version, 8);   /* Firmware Revision */
262     padstr((char *) (p + 27), s->drive_model_str, 40);/* Model number */
263 #if MAX_MULT_SECTORS > 1
264     put_le16(p + 47, 0x8000 | MAX_MULT_SECTORS);
265 #else
266     put_le16(p + 47, 0x0000);
267 #endif
268     put_le16(p + 49, 0x0f00);                   /* Capabilities */
269     put_le16(p + 51, 0x0002);                   /* PIO cycle timing mode */
270     put_le16(p + 52, 0x0001);                   /* DMA cycle timing mode */
271     put_le16(p + 53, 0x0003);                   /* Translation params valid */
272     put_le16(p + 54, s->cylinders);             /* Current cylinders */
273     put_le16(p + 55, s->heads);                 /* Current heads */
274     put_le16(p + 56, s->sectors);               /* Current sectors */
275     put_le16(p + 57, cur_sec);                  /* Current capacity */
276     put_le16(p + 58, cur_sec >> 16);            /* Current capacity */
277     if (s->mult_sectors)                        /* Multiple sector setting */
278         put_le16(p + 59, 0x100 | s->mult_sectors);
279     put_le16(p + 60, s->nb_sectors);            /* Total LBA sectors */
280     put_le16(p + 61, s->nb_sectors >> 16);      /* Total LBA sectors */
281     put_le16(p + 63, 0x0203);                   /* Multiword DMA capability */
282     put_le16(p + 64, 0x0001);                   /* Flow Control PIO support */
283     put_le16(p + 65, 0x0096);                   /* Min. Multiword DMA cycle */
284     put_le16(p + 66, 0x0096);                   /* Rec. Multiword DMA cycle */
285     put_le16(p + 68, 0x00b4);                   /* Min. PIO cycle time */
286     put_le16(p + 82, 0x400c);                   /* Command Set supported */
287     put_le16(p + 83, 0x7068);                   /* Command Set supported */
288     put_le16(p + 84, 0x4000);                   /* Features supported */
289     put_le16(p + 85, 0x000c);                   /* Command Set enabled */
290     put_le16(p + 86, 0x7044);                   /* Command Set enabled */
291     put_le16(p + 87, 0x4000);                   /* Features enabled */
292     put_le16(p + 91, 0x4060);                   /* Current APM level */
293     put_le16(p + 129, 0x0002);                  /* Current features option */
294     put_le16(p + 130, 0x0005);                  /* Reassigned sectors */
295     put_le16(p + 131, 0x0001);                  /* Initial power mode */
296     put_le16(p + 132, 0x0000);                  /* User signature */
297     put_le16(p + 160, 0x8100);                  /* Power requirement */
298     put_le16(p + 161, 0x8001);                  /* CF command set */
299
300     s->identify_set = 1;
301
302 fill_buffer:
303     memcpy(s->io_buffer, p, sizeof(s->identify_data));
304 }
305
306 static void ide_set_signature(IDEState *s)
307 {
308     s->select &= 0xf0; /* clear head */
309     /* put signature */
310     s->nsector = 1;
311     s->sector = 1;
312     if (s->drive_kind == IDE_CD) {
313         s->lcyl = 0x14;
314         s->hcyl = 0xeb;
315     } else if (s->bs) {
316         s->lcyl = 0;
317         s->hcyl = 0;
318     } else {
319         s->lcyl = 0xff;
320         s->hcyl = 0xff;
321     }
322 }
323
324 typedef struct TrimAIOCB {
325     BlockDriverAIOCB common;
326     QEMUBH *bh;
327     int ret;
328     QEMUIOVector *qiov;
329     BlockDriverAIOCB *aiocb;
330     int i, j;
331 } TrimAIOCB;
332
333 static void trim_aio_cancel(BlockDriverAIOCB *acb)
334 {
335     TrimAIOCB *iocb = container_of(acb, TrimAIOCB, common);
336
337     /* Exit the loop in case bdrv_aio_cancel calls ide_issue_trim_cb again.  */
338     iocb->j = iocb->qiov->niov - 1;
339     iocb->i = (iocb->qiov->iov[iocb->j].iov_len / 8) - 1;
340
341     /* Tell ide_issue_trim_cb not to trigger the completion, too.  */
342     qemu_bh_delete(iocb->bh);
343     iocb->bh = NULL;
344
345     if (iocb->aiocb) {
346         bdrv_aio_cancel(iocb->aiocb);
347     }
348     qemu_aio_release(iocb);
349 }
350
351 static const AIOCBInfo trim_aiocb_info = {
352     .aiocb_size         = sizeof(TrimAIOCB),
353     .cancel             = trim_aio_cancel,
354 };
355
356 static void ide_trim_bh_cb(void *opaque)
357 {
358     TrimAIOCB *iocb = opaque;
359
360     iocb->common.cb(iocb->common.opaque, iocb->ret);
361
362     qemu_bh_delete(iocb->bh);
363     iocb->bh = NULL;
364     qemu_aio_release(iocb);
365 }
366
367 static void ide_issue_trim_cb(void *opaque, int ret)
368 {
369     TrimAIOCB *iocb = opaque;
370     if (ret >= 0) {
371         while (iocb->j < iocb->qiov->niov) {
372             int j = iocb->j;
373             while (++iocb->i < iocb->qiov->iov[j].iov_len / 8) {
374                 int i = iocb->i;
375                 uint64_t *buffer = iocb->qiov->iov[j].iov_base;
376
377                 /* 6-byte LBA + 2-byte range per entry */
378                 uint64_t entry = le64_to_cpu(buffer[i]);
379                 uint64_t sector = entry & 0x0000ffffffffffffULL;
380                 uint16_t count = entry >> 48;
381
382                 if (count == 0) {
383                     continue;
384                 }
385
386                 /* Got an entry! Submit and exit.  */
387                 iocb->aiocb = bdrv_aio_discard(iocb->common.bs, sector, count,
388                                                ide_issue_trim_cb, opaque);
389                 return;
390             }
391
392             iocb->j++;
393             iocb->i = -1;
394         }
395     } else {
396         iocb->ret = ret;
397     }
398
399     iocb->aiocb = NULL;
400     if (iocb->bh) {
401         qemu_bh_schedule(iocb->bh);
402     }
403 }
404
405 BlockDriverAIOCB *ide_issue_trim(BlockDriverState *bs,
406         int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
407         BlockDriverCompletionFunc *cb, void *opaque)
408 {
409     TrimAIOCB *iocb;
410
411     iocb = qemu_aio_get(&trim_aiocb_info, bs, cb, opaque);
412     iocb->bh = qemu_bh_new(ide_trim_bh_cb, iocb);
413     iocb->ret = 0;
414     iocb->qiov = qiov;
415     iocb->i = -1;
416     iocb->j = 0;
417     ide_issue_trim_cb(iocb, 0);
418     return &iocb->common;
419 }
420
421 static inline void ide_abort_command(IDEState *s)
422 {
423     s->status = READY_STAT | ERR_STAT;
424     s->error = ABRT_ERR;
425 }
426
427 /* prepare data transfer and tell what to do after */
428 void ide_transfer_start(IDEState *s, uint8_t *buf, int size,
429                         EndTransferFunc *end_transfer_func)
430 {
431     s->end_transfer_func = end_transfer_func;
432     s->data_ptr = buf;
433     s->data_end = buf + size;
434     if (!(s->status & ERR_STAT)) {
435         s->status |= DRQ_STAT;
436     }
437     s->bus->dma->ops->start_transfer(s->bus->dma);
438 }
439
440 void ide_transfer_stop(IDEState *s)
441 {
442     s->end_transfer_func = ide_transfer_stop;
443     s->data_ptr = s->io_buffer;
444     s->data_end = s->io_buffer;
445     s->status &= ~DRQ_STAT;
446 }
447
448 int64_t ide_get_sector(IDEState *s)
449 {
450     int64_t sector_num;
451     if (s->select & 0x40) {
452         /* lba */
453         if (!s->lba48) {
454             sector_num = ((s->select & 0x0f) << 24) | (s->hcyl << 16) |
455                 (s->lcyl << 8) | s->sector;
456         } else {
457             sector_num = ((int64_t)s->hob_hcyl << 40) |
458                 ((int64_t) s->hob_lcyl << 32) |
459                 ((int64_t) s->hob_sector << 24) |
460                 ((int64_t) s->hcyl << 16) |
461                 ((int64_t) s->lcyl << 8) | s->sector;
462         }
463     } else {
464         sector_num = ((s->hcyl << 8) | s->lcyl) * s->heads * s->sectors +
465             (s->select & 0x0f) * s->sectors + (s->sector - 1);
466     }
467     return sector_num;
468 }
469
470 void ide_set_sector(IDEState *s, int64_t sector_num)
471 {
472     unsigned int cyl, r;
473     if (s->select & 0x40) {
474         if (!s->lba48) {
475             s->select = (s->select & 0xf0) | (sector_num >> 24);
476             s->hcyl = (sector_num >> 16);
477             s->lcyl = (sector_num >> 8);
478             s->sector = (sector_num);
479         } else {
480             s->sector = sector_num;
481             s->lcyl = sector_num >> 8;
482             s->hcyl = sector_num >> 16;
483             s->hob_sector = sector_num >> 24;
484             s->hob_lcyl = sector_num >> 32;
485             s->hob_hcyl = sector_num >> 40;
486         }
487     } else {
488         cyl = sector_num / (s->heads * s->sectors);
489         r = sector_num % (s->heads * s->sectors);
490         s->hcyl = cyl >> 8;
491         s->lcyl = cyl;
492         s->select = (s->select & 0xf0) | ((r / s->sectors) & 0x0f);
493         s->sector = (r % s->sectors) + 1;
494     }
495 }
496
497 static void ide_rw_error(IDEState *s) {
498     ide_abort_command(s);
499     ide_set_irq(s->bus);
500 }
501
502 static void ide_sector_read_cb(void *opaque, int ret)
503 {
504     IDEState *s = opaque;
505     int n;
506
507     s->pio_aiocb = NULL;
508     s->status &= ~BUSY_STAT;
509
510     bdrv_acct_done(s->bs, &s->acct);
511     if (ret != 0) {
512         if (ide_handle_rw_error(s, -ret, BM_STATUS_PIO_RETRY |
513                                 BM_STATUS_RETRY_READ)) {
514             return;
515         }
516     }
517
518     n = s->nsector;
519     if (n > s->req_nb_sectors) {
520         n = s->req_nb_sectors;
521     }
522
523     /* Allow the guest to read the io_buffer */
524     ide_transfer_start(s, s->io_buffer, n * BDRV_SECTOR_SIZE, ide_sector_read);
525
526     ide_set_irq(s->bus);
527
528     ide_set_sector(s, ide_get_sector(s) + n);
529     s->nsector -= n;
530 }
531
532 void ide_sector_read(IDEState *s)
533 {
534     int64_t sector_num;
535     int n;
536
537     s->status = READY_STAT | SEEK_STAT;
538     s->error = 0; /* not needed by IDE spec, but needed by Windows */
539     sector_num = ide_get_sector(s);
540     n = s->nsector;
541
542     if (n == 0) {
543         ide_transfer_stop(s);
544         return;
545     }
546
547     s->status |= BUSY_STAT;
548
549     if (n > s->req_nb_sectors) {
550         n = s->req_nb_sectors;
551     }
552
553 #if defined(DEBUG_IDE)
554     printf("sector=%" PRId64 "\n", sector_num);
555 #endif
556
557     s->iov.iov_base = s->io_buffer;
558     s->iov.iov_len  = n * BDRV_SECTOR_SIZE;
559     qemu_iovec_init_external(&s->qiov, &s->iov, 1);
560
561     bdrv_acct_start(s->bs, &s->acct, n * BDRV_SECTOR_SIZE, BDRV_ACCT_READ);
562     s->pio_aiocb = bdrv_aio_readv(s->bs, sector_num, &s->qiov, n,
563                                   ide_sector_read_cb, s);
564 }
565
566 static void dma_buf_commit(IDEState *s)
567 {
568     qemu_sglist_destroy(&s->sg);
569 }
570
571 void ide_set_inactive(IDEState *s)
572 {
573     s->bus->dma->aiocb = NULL;
574     s->bus->dma->ops->set_inactive(s->bus->dma);
575 }
576
577 void ide_dma_error(IDEState *s)
578 {
579     ide_transfer_stop(s);
580     s->error = ABRT_ERR;
581     s->status = READY_STAT | ERR_STAT;
582     ide_set_inactive(s);
583     ide_set_irq(s->bus);
584 }
585
586 static int ide_handle_rw_error(IDEState *s, int error, int op)
587 {
588     bool is_read = (op & BM_STATUS_RETRY_READ) != 0;
589     BlockErrorAction action = bdrv_get_error_action(s->bs, is_read, error);
590
591     if (action == BDRV_ACTION_STOP) {
592         s->bus->dma->ops->set_unit(s->bus->dma, s->unit);
593         s->bus->error_status = op;
594     } else if (action == BDRV_ACTION_REPORT) {
595         if (op & BM_STATUS_DMA_RETRY) {
596             dma_buf_commit(s);
597             ide_dma_error(s);
598         } else {
599             ide_rw_error(s);
600         }
601     }
602     bdrv_error_action(s->bs, action, is_read, error);
603     return action != BDRV_ACTION_IGNORE;
604 }
605
606 void ide_dma_cb(void *opaque, int ret)
607 {
608     IDEState *s = opaque;
609     int n;
610     int64_t sector_num;
611     bool stay_active = false;
612
613     if (ret < 0) {
614         int op = BM_STATUS_DMA_RETRY;
615
616         if (s->dma_cmd == IDE_DMA_READ)
617             op |= BM_STATUS_RETRY_READ;
618         else if (s->dma_cmd == IDE_DMA_TRIM)
619             op |= BM_STATUS_RETRY_TRIM;
620
621         if (ide_handle_rw_error(s, -ret, op)) {
622             return;
623         }
624     }
625
626     n = s->io_buffer_size >> 9;
627     if (n > s->nsector) {
628         /* The PRDs were longer than needed for this request. Shorten them so
629          * we don't get a negative remainder. The Active bit must remain set
630          * after the request completes. */
631         n = s->nsector;
632         stay_active = true;
633     }
634
635     sector_num = ide_get_sector(s);
636     if (n > 0) {
637         dma_buf_commit(s);
638         sector_num += n;
639         ide_set_sector(s, sector_num);
640         s->nsector -= n;
641     }
642
643     /* end of transfer ? */
644     if (s->nsector == 0) {
645         s->status = READY_STAT | SEEK_STAT;
646         ide_set_irq(s->bus);
647         goto eot;
648     }
649
650     /* launch next transfer */
651     n = s->nsector;
652     s->io_buffer_index = 0;
653     s->io_buffer_size = n * 512;
654     if (s->bus->dma->ops->prepare_buf(s->bus->dma, ide_cmd_is_read(s)) == 0) {
655         /* The PRDs were too short. Reset the Active bit, but don't raise an
656          * interrupt. */
657         s->status = READY_STAT | SEEK_STAT;
658         goto eot;
659     }
660
661 #ifdef DEBUG_AIO
662     printf("ide_dma_cb: sector_num=%" PRId64 " n=%d, cmd_cmd=%d\n",
663            sector_num, n, s->dma_cmd);
664 #endif
665
666     switch (s->dma_cmd) {
667     case IDE_DMA_READ:
668         s->bus->dma->aiocb = dma_bdrv_read(s->bs, &s->sg, sector_num,
669                                            ide_dma_cb, s);
670         break;
671     case IDE_DMA_WRITE:
672         s->bus->dma->aiocb = dma_bdrv_write(s->bs, &s->sg, sector_num,
673                                             ide_dma_cb, s);
674         break;
675     case IDE_DMA_TRIM:
676         s->bus->dma->aiocb = dma_bdrv_io(s->bs, &s->sg, sector_num,
677                                          ide_issue_trim, ide_dma_cb, s,
678                                          DMA_DIRECTION_TO_DEVICE);
679         break;
680     }
681     return;
682
683 eot:
684     if (s->dma_cmd == IDE_DMA_READ || s->dma_cmd == IDE_DMA_WRITE) {
685         bdrv_acct_done(s->bs, &s->acct);
686     }
687     ide_set_inactive(s);
688     if (stay_active) {
689         s->bus->dma->ops->add_status(s->bus->dma, BM_STATUS_DMAING);
690     }
691 }
692
693 static void ide_sector_start_dma(IDEState *s, enum ide_dma_cmd dma_cmd)
694 {
695     s->status = READY_STAT | SEEK_STAT | DRQ_STAT | BUSY_STAT;
696     s->io_buffer_index = 0;
697     s->io_buffer_size = 0;
698     s->dma_cmd = dma_cmd;
699
700     switch (dma_cmd) {
701     case IDE_DMA_READ:
702         bdrv_acct_start(s->bs, &s->acct, s->nsector * BDRV_SECTOR_SIZE,
703                         BDRV_ACCT_READ);
704         break;
705     case IDE_DMA_WRITE:
706         bdrv_acct_start(s->bs, &s->acct, s->nsector * BDRV_SECTOR_SIZE,
707                         BDRV_ACCT_WRITE);
708         break;
709     default:
710         break;
711     }
712
713     s->bus->dma->ops->start_dma(s->bus->dma, s, ide_dma_cb);
714 }
715
716 static void ide_sector_write_timer_cb(void *opaque)
717 {
718     IDEState *s = opaque;
719     ide_set_irq(s->bus);
720 }
721
722 static void ide_sector_write_cb(void *opaque, int ret)
723 {
724     IDEState *s = opaque;
725     int n;
726
727     bdrv_acct_done(s->bs, &s->acct);
728
729     s->pio_aiocb = NULL;
730     s->status &= ~BUSY_STAT;
731
732     if (ret != 0) {
733         if (ide_handle_rw_error(s, -ret, BM_STATUS_PIO_RETRY)) {
734             return;
735         }
736     }
737
738     n = s->nsector;
739     if (n > s->req_nb_sectors) {
740         n = s->req_nb_sectors;
741     }
742     s->nsector -= n;
743     if (s->nsector == 0) {
744         /* no more sectors to write */
745         ide_transfer_stop(s);
746     } else {
747         int n1 = s->nsector;
748         if (n1 > s->req_nb_sectors) {
749             n1 = s->req_nb_sectors;
750         }
751         ide_transfer_start(s, s->io_buffer, n1 * BDRV_SECTOR_SIZE,
752                            ide_sector_write);
753     }
754     ide_set_sector(s, ide_get_sector(s) + n);
755
756     if (win2k_install_hack && ((++s->irq_count % 16) == 0)) {
757         /* It seems there is a bug in the Windows 2000 installer HDD
758            IDE driver which fills the disk with empty logs when the
759            IDE write IRQ comes too early. This hack tries to correct
760            that at the expense of slower write performances. Use this
761            option _only_ to install Windows 2000. You must disable it
762            for normal use. */
763         qemu_mod_timer(s->sector_write_timer,
764                        qemu_get_clock_ns(vm_clock) + (get_ticks_per_sec() / 1000));
765     } else {
766         ide_set_irq(s->bus);
767     }
768 }
769
770 void ide_sector_write(IDEState *s)
771 {
772     int64_t sector_num;
773     int n;
774
775     s->status = READY_STAT | SEEK_STAT | BUSY_STAT;
776     sector_num = ide_get_sector(s);
777 #if defined(DEBUG_IDE)
778     printf("sector=%" PRId64 "\n", sector_num);
779 #endif
780     n = s->nsector;
781     if (n > s->req_nb_sectors) {
782         n = s->req_nb_sectors;
783     }
784
785     s->iov.iov_base = s->io_buffer;
786     s->iov.iov_len  = n * BDRV_SECTOR_SIZE;
787     qemu_iovec_init_external(&s->qiov, &s->iov, 1);
788
789     bdrv_acct_start(s->bs, &s->acct, n * BDRV_SECTOR_SIZE, BDRV_ACCT_READ);
790     s->pio_aiocb = bdrv_aio_writev(s->bs, sector_num, &s->qiov, n,
791                                    ide_sector_write_cb, s);
792 }
793
794 static void ide_flush_cb(void *opaque, int ret)
795 {
796     IDEState *s = opaque;
797
798     if (ret < 0) {
799         /* XXX: What sector number to set here? */
800         if (ide_handle_rw_error(s, -ret, BM_STATUS_RETRY_FLUSH)) {
801             return;
802         }
803     }
804
805     bdrv_acct_done(s->bs, &s->acct);
806     s->status = READY_STAT | SEEK_STAT;
807     ide_set_irq(s->bus);
808 }
809
810 void ide_flush_cache(IDEState *s)
811 {
812     if (s->bs == NULL) {
813         ide_flush_cb(s, 0);
814         return;
815     }
816
817     bdrv_acct_start(s->bs, &s->acct, 0, BDRV_ACCT_FLUSH);
818     bdrv_aio_flush(s->bs, ide_flush_cb, s);
819 }
820
821 static void ide_cfata_metadata_inquiry(IDEState *s)
822 {
823     uint16_t *p;
824     uint32_t spd;
825
826     p = (uint16_t *) s->io_buffer;
827     memset(p, 0, 0x200);
828     spd = ((s->mdata_size - 1) >> 9) + 1;
829
830     put_le16(p + 0, 0x0001);                    /* Data format revision */
831     put_le16(p + 1, 0x0000);                    /* Media property: silicon */
832     put_le16(p + 2, s->media_changed);          /* Media status */
833     put_le16(p + 3, s->mdata_size & 0xffff);    /* Capacity in bytes (low) */
834     put_le16(p + 4, s->mdata_size >> 16);       /* Capacity in bytes (high) */
835     put_le16(p + 5, spd & 0xffff);              /* Sectors per device (low) */
836     put_le16(p + 6, spd >> 16);                 /* Sectors per device (high) */
837 }
838
839 static void ide_cfata_metadata_read(IDEState *s)
840 {
841     uint16_t *p;
842
843     if (((s->hcyl << 16) | s->lcyl) << 9 > s->mdata_size + 2) {
844         s->status = ERR_STAT;
845         s->error = ABRT_ERR;
846         return;
847     }
848
849     p = (uint16_t *) s->io_buffer;
850     memset(p, 0, 0x200);
851
852     put_le16(p + 0, s->media_changed);          /* Media status */
853     memcpy(p + 1, s->mdata_storage + (((s->hcyl << 16) | s->lcyl) << 9),
854                     MIN(MIN(s->mdata_size - (((s->hcyl << 16) | s->lcyl) << 9),
855                                     s->nsector << 9), 0x200 - 2));
856 }
857
858 static void ide_cfata_metadata_write(IDEState *s)
859 {
860     if (((s->hcyl << 16) | s->lcyl) << 9 > s->mdata_size + 2) {
861         s->status = ERR_STAT;
862         s->error = ABRT_ERR;
863         return;
864     }
865
866     s->media_changed = 0;
867
868     memcpy(s->mdata_storage + (((s->hcyl << 16) | s->lcyl) << 9),
869                     s->io_buffer + 2,
870                     MIN(MIN(s->mdata_size - (((s->hcyl << 16) | s->lcyl) << 9),
871                                     s->nsector << 9), 0x200 - 2));
872 }
873
874 /* called when the inserted state of the media has changed */
875 static void ide_cd_change_cb(void *opaque, bool load)
876 {
877     IDEState *s = opaque;
878     uint64_t nb_sectors;
879
880     s->tray_open = !load;
881     bdrv_get_geometry(s->bs, &nb_sectors);
882     s->nb_sectors = nb_sectors;
883
884     /*
885      * First indicate to the guest that a CD has been removed.  That's
886      * done on the next command the guest sends us.
887      *
888      * Then we set UNIT_ATTENTION, by which the guest will
889      * detect a new CD in the drive.  See ide_atapi_cmd() for details.
890      */
891     s->cdrom_changed = 1;
892     s->events.new_media = true;
893     s->events.eject_request = false;
894     ide_set_irq(s->bus);
895 }
896
897 static void ide_cd_eject_request_cb(void *opaque, bool force)
898 {
899     IDEState *s = opaque;
900
901     s->events.eject_request = true;
902     if (force) {
903         s->tray_locked = false;
904     }
905     ide_set_irq(s->bus);
906 }
907
908 static void ide_cmd_lba48_transform(IDEState *s, int lba48)
909 {
910     s->lba48 = lba48;
911
912     /* handle the 'magic' 0 nsector count conversion here. to avoid
913      * fiddling with the rest of the read logic, we just store the
914      * full sector count in ->nsector and ignore ->hob_nsector from now
915      */
916     if (!s->lba48) {
917         if (!s->nsector)
918             s->nsector = 256;
919     } else {
920         if (!s->nsector && !s->hob_nsector)
921             s->nsector = 65536;
922         else {
923             int lo = s->nsector;
924             int hi = s->hob_nsector;
925
926             s->nsector = (hi << 8) | lo;
927         }
928     }
929 }
930
931 static void ide_clear_hob(IDEBus *bus)
932 {
933     /* any write clears HOB high bit of device control register */
934     bus->ifs[0].select &= ~(1 << 7);
935     bus->ifs[1].select &= ~(1 << 7);
936 }
937
938 void ide_ioport_write(void *opaque, uint32_t addr, uint32_t val)
939 {
940     IDEBus *bus = opaque;
941
942 #ifdef DEBUG_IDE
943     printf("IDE: write addr=0x%x val=0x%02x\n", addr, val);
944 #endif
945
946     addr &= 7;
947
948     /* ignore writes to command block while busy with previous command */
949     if (addr != 7 && (idebus_active_if(bus)->status & (BUSY_STAT|DRQ_STAT)))
950         return;
951
952     switch(addr) {
953     case 0:
954         break;
955     case 1:
956         ide_clear_hob(bus);
957         /* NOTE: data is written to the two drives */
958         bus->ifs[0].hob_feature = bus->ifs[0].feature;
959         bus->ifs[1].hob_feature = bus->ifs[1].feature;
960         bus->ifs[0].feature = val;
961         bus->ifs[1].feature = val;
962         break;
963     case 2:
964         ide_clear_hob(bus);
965         bus->ifs[0].hob_nsector = bus->ifs[0].nsector;
966         bus->ifs[1].hob_nsector = bus->ifs[1].nsector;
967         bus->ifs[0].nsector = val;
968         bus->ifs[1].nsector = val;
969         break;
970     case 3:
971         ide_clear_hob(bus);
972         bus->ifs[0].hob_sector = bus->ifs[0].sector;
973         bus->ifs[1].hob_sector = bus->ifs[1].sector;
974         bus->ifs[0].sector = val;
975         bus->ifs[1].sector = val;
976         break;
977     case 4:
978         ide_clear_hob(bus);
979         bus->ifs[0].hob_lcyl = bus->ifs[0].lcyl;
980         bus->ifs[1].hob_lcyl = bus->ifs[1].lcyl;
981         bus->ifs[0].lcyl = val;
982         bus->ifs[1].lcyl = val;
983         break;
984     case 5:
985         ide_clear_hob(bus);
986         bus->ifs[0].hob_hcyl = bus->ifs[0].hcyl;
987         bus->ifs[1].hob_hcyl = bus->ifs[1].hcyl;
988         bus->ifs[0].hcyl = val;
989         bus->ifs[1].hcyl = val;
990         break;
991     case 6:
992         /* FIXME: HOB readback uses bit 7 */
993         bus->ifs[0].select = (val & ~0x10) | 0xa0;
994         bus->ifs[1].select = (val | 0x10) | 0xa0;
995         /* select drive */
996         bus->unit = (val >> 4) & 1;
997         break;
998     default:
999     case 7:
1000         /* command */
1001         ide_exec_cmd(bus, val);
1002         break;
1003     }
1004 }
1005
1006 #define HD_OK (1u << IDE_HD)
1007 #define CD_OK (1u << IDE_CD)
1008 #define CFA_OK (1u << IDE_CFATA)
1009 #define HD_CFA_OK (HD_OK | CFA_OK)
1010 #define ALL_OK (HD_OK | CD_OK | CFA_OK)
1011
1012 /* See ACS-2 T13/2015-D Table B.2 Command codes */
1013 static const uint8_t ide_cmd_table[0x100] = {
1014     /* NOP not implemented, mandatory for CD */
1015     [CFA_REQ_EXT_ERROR_CODE]            = CFA_OK,
1016     [WIN_DSM]                           = ALL_OK,
1017     [WIN_DEVICE_RESET]                  = CD_OK,
1018     [WIN_RECAL]                         = HD_CFA_OK,
1019     [WIN_READ]                          = ALL_OK,
1020     [WIN_READ_ONCE]                     = ALL_OK,
1021     [WIN_READ_EXT]                      = HD_CFA_OK,
1022     [WIN_READDMA_EXT]                   = HD_CFA_OK,
1023     [WIN_READ_NATIVE_MAX_EXT]           = HD_CFA_OK,
1024     [WIN_MULTREAD_EXT]                  = HD_CFA_OK,
1025     [WIN_WRITE]                         = HD_CFA_OK,
1026     [WIN_WRITE_ONCE]                    = HD_CFA_OK,
1027     [WIN_WRITE_EXT]                     = HD_CFA_OK,
1028     [WIN_WRITEDMA_EXT]                  = HD_CFA_OK,
1029     [CFA_WRITE_SECT_WO_ERASE]           = CFA_OK,
1030     [WIN_MULTWRITE_EXT]                 = HD_CFA_OK,
1031     [WIN_WRITE_VERIFY]                  = HD_CFA_OK,
1032     [WIN_VERIFY]                        = HD_CFA_OK,
1033     [WIN_VERIFY_ONCE]                   = HD_CFA_OK,
1034     [WIN_VERIFY_EXT]                    = HD_CFA_OK,
1035     [WIN_SEEK]                          = HD_CFA_OK,
1036     [CFA_TRANSLATE_SECTOR]              = CFA_OK,
1037     [WIN_DIAGNOSE]                      = ALL_OK,
1038     [WIN_SPECIFY]                       = HD_CFA_OK,
1039     [WIN_STANDBYNOW2]                   = ALL_OK,
1040     [WIN_IDLEIMMEDIATE2]                = ALL_OK,
1041     [WIN_STANDBY2]                      = ALL_OK,
1042     [WIN_SETIDLE2]                      = ALL_OK,
1043     [WIN_CHECKPOWERMODE2]               = ALL_OK,
1044     [WIN_SLEEPNOW2]                     = ALL_OK,
1045     [WIN_PACKETCMD]                     = CD_OK,
1046     [WIN_PIDENTIFY]                     = CD_OK,
1047     [WIN_SMART]                         = HD_CFA_OK,
1048     [CFA_ACCESS_METADATA_STORAGE]       = CFA_OK,
1049     [CFA_ERASE_SECTORS]                 = CFA_OK,
1050     [WIN_MULTREAD]                      = HD_CFA_OK,
1051     [WIN_MULTWRITE]                     = HD_CFA_OK,
1052     [WIN_SETMULT]                       = HD_CFA_OK,
1053     [WIN_READDMA]                       = HD_CFA_OK,
1054     [WIN_READDMA_ONCE]                  = HD_CFA_OK,
1055     [WIN_WRITEDMA]                      = HD_CFA_OK,
1056     [WIN_WRITEDMA_ONCE]                 = HD_CFA_OK,
1057     [CFA_WRITE_MULTI_WO_ERASE]          = CFA_OK,
1058     [WIN_STANDBYNOW1]                   = ALL_OK,
1059     [WIN_IDLEIMMEDIATE]                 = ALL_OK,
1060     [WIN_STANDBY]                       = ALL_OK,
1061     [WIN_SETIDLE1]                      = ALL_OK,
1062     [WIN_CHECKPOWERMODE1]               = ALL_OK,
1063     [WIN_SLEEPNOW1]                     = ALL_OK,
1064     [WIN_FLUSH_CACHE]                   = ALL_OK,
1065     [WIN_FLUSH_CACHE_EXT]               = HD_CFA_OK,
1066     [WIN_IDENTIFY]                      = ALL_OK,
1067     [WIN_SETFEATURES]                   = ALL_OK,
1068     [IBM_SENSE_CONDITION]               = CFA_OK,
1069     [CFA_WEAR_LEVEL]                    = HD_CFA_OK,
1070     [WIN_READ_NATIVE_MAX]               = ALL_OK,
1071 };
1072
1073 static bool ide_cmd_permitted(IDEState *s, uint32_t cmd)
1074 {
1075     return cmd < ARRAY_SIZE(ide_cmd_table)
1076         && (ide_cmd_table[cmd] & (1u << s->drive_kind));
1077 }
1078
1079 void ide_exec_cmd(IDEBus *bus, uint32_t val)
1080 {
1081     uint16_t *identify_data;
1082     IDEState *s;
1083     int n;
1084     int lba48 = 0;
1085
1086 #if defined(DEBUG_IDE)
1087     printf("ide: CMD=%02x\n", val);
1088 #endif
1089     s = idebus_active_if(bus);
1090     /* ignore commands to non existent slave */
1091     if (s != bus->ifs && !s->bs)
1092         return;
1093
1094     /* Only DEVICE RESET is allowed while BSY or/and DRQ are set */
1095     if ((s->status & (BUSY_STAT|DRQ_STAT)) && val != WIN_DEVICE_RESET)
1096         return;
1097
1098     if (!ide_cmd_permitted(s, val)) {
1099         goto abort_cmd;
1100     }
1101
1102     switch(val) {
1103     case WIN_DSM:
1104         switch (s->feature) {
1105         case DSM_TRIM:
1106             if (!s->bs) {
1107                 goto abort_cmd;
1108             }
1109             ide_sector_start_dma(s, IDE_DMA_TRIM);
1110             break;
1111         default:
1112             goto abort_cmd;
1113         }
1114         break;
1115     case WIN_IDENTIFY:
1116         if (s->bs && s->drive_kind != IDE_CD) {
1117             if (s->drive_kind != IDE_CFATA)
1118                 ide_identify(s);
1119             else
1120                 ide_cfata_identify(s);
1121             s->status = READY_STAT | SEEK_STAT;
1122             ide_transfer_start(s, s->io_buffer, 512, ide_transfer_stop);
1123         } else {
1124             if (s->drive_kind == IDE_CD) {
1125                 ide_set_signature(s);
1126             }
1127             ide_abort_command(s);
1128         }
1129         ide_set_irq(s->bus);
1130         break;
1131     case WIN_SPECIFY:
1132     case WIN_RECAL:
1133         s->error = 0;
1134         s->status = READY_STAT | SEEK_STAT;
1135         ide_set_irq(s->bus);
1136         break;
1137     case WIN_SETMULT:
1138         if (s->drive_kind == IDE_CFATA && s->nsector == 0) {
1139             /* Disable Read and Write Multiple */
1140             s->mult_sectors = 0;
1141             s->status = READY_STAT | SEEK_STAT;
1142         } else if ((s->nsector & 0xff) != 0 &&
1143             ((s->nsector & 0xff) > MAX_MULT_SECTORS ||
1144              (s->nsector & (s->nsector - 1)) != 0)) {
1145             ide_abort_command(s);
1146         } else {
1147             s->mult_sectors = s->nsector & 0xff;
1148             s->status = READY_STAT | SEEK_STAT;
1149         }
1150         ide_set_irq(s->bus);
1151         break;
1152
1153     case WIN_VERIFY_EXT:
1154         lba48 = 1;
1155         /* fall through */
1156     case WIN_VERIFY:
1157     case WIN_VERIFY_ONCE:
1158         /* do sector number check ? */
1159         ide_cmd_lba48_transform(s, lba48);
1160         s->status = READY_STAT | SEEK_STAT;
1161         ide_set_irq(s->bus);
1162         break;
1163
1164     case WIN_READ_EXT:
1165         lba48 = 1;
1166         /* fall through */
1167     case WIN_READ:
1168     case WIN_READ_ONCE:
1169         if (s->drive_kind == IDE_CD) {
1170             ide_set_signature(s); /* odd, but ATA4 8.27.5.2 requires it */
1171             goto abort_cmd;
1172         }
1173         if (!s->bs) {
1174             goto abort_cmd;
1175         }
1176         ide_cmd_lba48_transform(s, lba48);
1177         s->req_nb_sectors = 1;
1178         ide_sector_read(s);
1179         break;
1180
1181     case WIN_WRITE_EXT:
1182         lba48 = 1;
1183         /* fall through */
1184     case WIN_WRITE:
1185     case WIN_WRITE_ONCE:
1186     case CFA_WRITE_SECT_WO_ERASE:
1187     case WIN_WRITE_VERIFY:
1188         if (!s->bs) {
1189             goto abort_cmd;
1190         }
1191         ide_cmd_lba48_transform(s, lba48);
1192         s->error = 0;
1193         s->status = SEEK_STAT | READY_STAT;
1194         s->req_nb_sectors = 1;
1195         ide_transfer_start(s, s->io_buffer, 512, ide_sector_write);
1196         s->media_changed = 1;
1197         break;
1198
1199     case WIN_MULTREAD_EXT:
1200         lba48 = 1;
1201         /* fall through */
1202     case WIN_MULTREAD:
1203         if (!s->bs) {
1204             goto abort_cmd;
1205         }
1206         if (!s->mult_sectors) {
1207             goto abort_cmd;
1208         }
1209         ide_cmd_lba48_transform(s, lba48);
1210         s->req_nb_sectors = s->mult_sectors;
1211         ide_sector_read(s);
1212         break;
1213
1214     case WIN_MULTWRITE_EXT:
1215         lba48 = 1;
1216         /* fall through */
1217     case WIN_MULTWRITE:
1218     case CFA_WRITE_MULTI_WO_ERASE:
1219         if (!s->bs) {
1220             goto abort_cmd;
1221         }
1222         if (!s->mult_sectors) {
1223             goto abort_cmd;
1224         }
1225         ide_cmd_lba48_transform(s, lba48);
1226         s->error = 0;
1227         s->status = SEEK_STAT | READY_STAT;
1228         s->req_nb_sectors = s->mult_sectors;
1229         n = s->nsector;
1230         if (n > s->req_nb_sectors)
1231             n = s->req_nb_sectors;
1232         ide_transfer_start(s, s->io_buffer, 512 * n, ide_sector_write);
1233         s->media_changed = 1;
1234         break;
1235
1236     case WIN_READDMA_EXT:
1237         lba48 = 1;
1238         /* fall through */
1239     case WIN_READDMA:
1240     case WIN_READDMA_ONCE:
1241         if (!s->bs) {
1242             goto abort_cmd;
1243         }
1244         ide_cmd_lba48_transform(s, lba48);
1245         ide_sector_start_dma(s, IDE_DMA_READ);
1246         break;
1247
1248     case WIN_WRITEDMA_EXT:
1249         lba48 = 1;
1250         /* fall through */
1251     case WIN_WRITEDMA:
1252     case WIN_WRITEDMA_ONCE:
1253         if (!s->bs) {
1254             goto abort_cmd;
1255         }
1256         ide_cmd_lba48_transform(s, lba48);
1257         ide_sector_start_dma(s, IDE_DMA_WRITE);
1258         s->media_changed = 1;
1259         break;
1260
1261     case WIN_READ_NATIVE_MAX_EXT:
1262         lba48 = 1;
1263         /* fall through */
1264     case WIN_READ_NATIVE_MAX:
1265         /* Refuse if no sectors are addressable (e.g. medium not inserted) */
1266         if (s->nb_sectors == 0) {
1267             goto abort_cmd;
1268         }
1269         ide_cmd_lba48_transform(s, lba48);
1270         ide_set_sector(s, s->nb_sectors - 1);
1271         s->status = READY_STAT | SEEK_STAT;
1272         ide_set_irq(s->bus);
1273         break;
1274
1275     case WIN_CHECKPOWERMODE1:
1276     case WIN_CHECKPOWERMODE2:
1277         s->error = 0;
1278         s->nsector = 0xff; /* device active or idle */
1279         s->status = READY_STAT | SEEK_STAT;
1280         ide_set_irq(s->bus);
1281         break;
1282     case WIN_SETFEATURES:
1283         if (!s->bs)
1284             goto abort_cmd;
1285         /* XXX: valid for CDROM ? */
1286         switch(s->feature) {
1287         case 0x02: /* write cache enable */
1288             bdrv_set_enable_write_cache(s->bs, true);
1289             identify_data = (uint16_t *)s->identify_data;
1290             put_le16(identify_data + 85, (1 << 14) | (1 << 5) | 1);
1291             s->status = READY_STAT | SEEK_STAT;
1292             ide_set_irq(s->bus);
1293             break;
1294         case 0x82: /* write cache disable */
1295             bdrv_set_enable_write_cache(s->bs, false);
1296             identify_data = (uint16_t *)s->identify_data;
1297             put_le16(identify_data + 85, (1 << 14) | 1);
1298             ide_flush_cache(s);
1299             break;
1300         case 0xcc: /* reverting to power-on defaults enable */
1301         case 0x66: /* reverting to power-on defaults disable */
1302         case 0xaa: /* read look-ahead enable */
1303         case 0x55: /* read look-ahead disable */
1304         case 0x05: /* set advanced power management mode */
1305         case 0x85: /* disable advanced power management mode */
1306         case 0x69: /* NOP */
1307         case 0x67: /* NOP */
1308         case 0x96: /* NOP */
1309         case 0x9a: /* NOP */
1310         case 0x42: /* enable Automatic Acoustic Mode */
1311         case 0xc2: /* disable Automatic Acoustic Mode */
1312             s->status = READY_STAT | SEEK_STAT;
1313             ide_set_irq(s->bus);
1314             break;
1315         case 0x03: { /* set transfer mode */
1316                 uint8_t val = s->nsector & 0x07;
1317                 identify_data = (uint16_t *)s->identify_data;
1318
1319                 switch (s->nsector >> 3) {
1320                 case 0x00: /* pio default */
1321                 case 0x01: /* pio mode */
1322                         put_le16(identify_data + 62,0x07);
1323                         put_le16(identify_data + 63,0x07);
1324                         put_le16(identify_data + 88,0x3f);
1325                         break;
1326                 case 0x02: /* sigle word dma mode*/
1327                         put_le16(identify_data + 62,0x07 | (1 << (val + 8)));
1328                         put_le16(identify_data + 63,0x07);
1329                         put_le16(identify_data + 88,0x3f);
1330                         break;
1331                 case 0x04: /* mdma mode */
1332                         put_le16(identify_data + 62,0x07);
1333                         put_le16(identify_data + 63,0x07 | (1 << (val + 8)));
1334                         put_le16(identify_data + 88,0x3f);
1335                         break;
1336                 case 0x08: /* udma mode */
1337                         put_le16(identify_data + 62,0x07);
1338                         put_le16(identify_data + 63,0x07);
1339                         put_le16(identify_data + 88,0x3f | (1 << (val + 8)));
1340                         break;
1341                 default:
1342                         goto abort_cmd;
1343                 }
1344             s->status = READY_STAT | SEEK_STAT;
1345             ide_set_irq(s->bus);
1346             break;
1347         }
1348         default:
1349             goto abort_cmd;
1350         }
1351         break;
1352     case WIN_FLUSH_CACHE:
1353     case WIN_FLUSH_CACHE_EXT:
1354         ide_flush_cache(s);
1355         break;
1356     case WIN_STANDBY:
1357     case WIN_STANDBY2:
1358     case WIN_STANDBYNOW1:
1359     case WIN_STANDBYNOW2:
1360     case WIN_IDLEIMMEDIATE:
1361     case WIN_IDLEIMMEDIATE2:
1362     case WIN_SETIDLE1:
1363     case WIN_SETIDLE2:
1364     case WIN_SLEEPNOW1:
1365     case WIN_SLEEPNOW2:
1366         s->status = READY_STAT;
1367         ide_set_irq(s->bus);
1368         break;
1369     case WIN_SEEK:
1370         /* XXX: Check that seek is within bounds */
1371         s->status = READY_STAT | SEEK_STAT;
1372         ide_set_irq(s->bus);
1373         break;
1374         /* ATAPI commands */
1375     case WIN_PIDENTIFY:
1376         ide_atapi_identify(s);
1377         s->status = READY_STAT | SEEK_STAT;
1378         ide_transfer_start(s, s->io_buffer, 512, ide_transfer_stop);
1379         ide_set_irq(s->bus);
1380         break;
1381     case WIN_DIAGNOSE:
1382         ide_set_signature(s);
1383         if (s->drive_kind == IDE_CD)
1384             s->status = 0; /* ATAPI spec (v6) section 9.10 defines packet
1385                             * devices to return a clear status register
1386                             * with READY_STAT *not* set. */
1387         else
1388             s->status = READY_STAT | SEEK_STAT;
1389         s->error = 0x01; /* Device 0 passed, Device 1 passed or not
1390                           * present.
1391                           */
1392         ide_set_irq(s->bus);
1393         break;
1394     case WIN_DEVICE_RESET:
1395         ide_set_signature(s);
1396         s->status = 0x00; /* NOTE: READY is _not_ set */
1397         s->error = 0x01;
1398         break;
1399     case WIN_PACKETCMD:
1400         /* overlapping commands not supported */
1401         if (s->feature & 0x02)
1402             goto abort_cmd;
1403         s->status = READY_STAT | SEEK_STAT;
1404         s->atapi_dma = s->feature & 1;
1405         s->nsector = 1;
1406         ide_transfer_start(s, s->io_buffer, ATAPI_PACKET_SIZE,
1407                            ide_atapi_cmd);
1408         break;
1409     /* CF-ATA commands */
1410     case CFA_REQ_EXT_ERROR_CODE:
1411         s->error = 0x09;    /* miscellaneous error */
1412         s->status = READY_STAT | SEEK_STAT;
1413         ide_set_irq(s->bus);
1414         break;
1415     case CFA_ERASE_SECTORS:
1416     case CFA_WEAR_LEVEL:
1417 #if 0
1418     /* This one has the same ID as CFA_WEAR_LEVEL and is required for
1419        Windows 8 to work with AHCI */
1420     case WIN_SECURITY_FREEZE_LOCK:
1421 #endif
1422         if (val == CFA_WEAR_LEVEL)
1423             s->nsector = 0;
1424         if (val == CFA_ERASE_SECTORS)
1425             s->media_changed = 1;
1426         s->error = 0x00;
1427         s->status = READY_STAT | SEEK_STAT;
1428         ide_set_irq(s->bus);
1429         break;
1430     case CFA_TRANSLATE_SECTOR:
1431         s->error = 0x00;
1432         s->status = READY_STAT | SEEK_STAT;
1433         memset(s->io_buffer, 0, 0x200);
1434         s->io_buffer[0x00] = s->hcyl;                   /* Cyl MSB */
1435         s->io_buffer[0x01] = s->lcyl;                   /* Cyl LSB */
1436         s->io_buffer[0x02] = s->select;                 /* Head */
1437         s->io_buffer[0x03] = s->sector;                 /* Sector */
1438         s->io_buffer[0x04] = ide_get_sector(s) >> 16;   /* LBA MSB */
1439         s->io_buffer[0x05] = ide_get_sector(s) >> 8;    /* LBA */
1440         s->io_buffer[0x06] = ide_get_sector(s) >> 0;    /* LBA LSB */
1441         s->io_buffer[0x13] = 0x00;                              /* Erase flag */
1442         s->io_buffer[0x18] = 0x00;                              /* Hot count */
1443         s->io_buffer[0x19] = 0x00;                              /* Hot count */
1444         s->io_buffer[0x1a] = 0x01;                              /* Hot count */
1445         ide_transfer_start(s, s->io_buffer, 0x200, ide_transfer_stop);
1446         ide_set_irq(s->bus);
1447         break;
1448     case CFA_ACCESS_METADATA_STORAGE:
1449         switch (s->feature) {
1450         case 0x02:      /* Inquiry Metadata Storage */
1451             ide_cfata_metadata_inquiry(s);
1452             break;
1453         case 0x03:      /* Read Metadata Storage */
1454             ide_cfata_metadata_read(s);
1455             break;
1456         case 0x04:      /* Write Metadata Storage */
1457             ide_cfata_metadata_write(s);
1458             break;
1459         default:
1460             goto abort_cmd;
1461         }
1462         ide_transfer_start(s, s->io_buffer, 0x200, ide_transfer_stop);
1463         s->status = 0x00; /* NOTE: READY is _not_ set */
1464         ide_set_irq(s->bus);
1465         break;
1466     case IBM_SENSE_CONDITION:
1467         switch (s->feature) {
1468         case 0x01:  /* sense temperature in device */
1469             s->nsector = 0x50;      /* +20 C */
1470             break;
1471         default:
1472             goto abort_cmd;
1473         }
1474         s->status = READY_STAT | SEEK_STAT;
1475         ide_set_irq(s->bus);
1476         break;
1477
1478     case WIN_SMART:
1479         if (s->hcyl != 0xc2 || s->lcyl != 0x4f)
1480                 goto abort_cmd;
1481         if (!s->smart_enabled && s->feature != SMART_ENABLE)
1482                 goto abort_cmd;
1483         switch (s->feature) {
1484         case SMART_DISABLE:
1485                 s->smart_enabled = 0;
1486                 s->status = READY_STAT | SEEK_STAT;
1487                 ide_set_irq(s->bus);
1488                 break;
1489         case SMART_ENABLE:
1490                 s->smart_enabled = 1;
1491                 s->status = READY_STAT | SEEK_STAT;
1492                 ide_set_irq(s->bus);
1493                 break;
1494         case SMART_ATTR_AUTOSAVE:
1495                 switch (s->sector) {
1496                 case 0x00:
1497                 s->smart_autosave = 0;
1498                 break;
1499                 case 0xf1:
1500                 s->smart_autosave = 1;
1501                 break;
1502                 default:
1503                 goto abort_cmd;
1504                 }
1505                 s->status = READY_STAT | SEEK_STAT;
1506                 ide_set_irq(s->bus);
1507                 break;
1508         case SMART_STATUS:
1509                 if (!s->smart_errors) {
1510                 s->hcyl = 0xc2;
1511                 s->lcyl = 0x4f;
1512                 } else {
1513                 s->hcyl = 0x2c;
1514                 s->lcyl = 0xf4;
1515                 }
1516                 s->status = READY_STAT | SEEK_STAT;
1517                 ide_set_irq(s->bus);
1518                 break;
1519         case SMART_READ_THRESH:
1520                 memset(s->io_buffer, 0, 0x200);
1521                 s->io_buffer[0] = 0x01; /* smart struct version */
1522                 for (n = 0; n < ARRAY_SIZE(smart_attributes); n++) {
1523                 s->io_buffer[2+0+(n*12)] = smart_attributes[n][0];
1524                 s->io_buffer[2+1+(n*12)] = smart_attributes[n][11];
1525                 }
1526                 for (n=0; n<511; n++) /* checksum */
1527                 s->io_buffer[511] += s->io_buffer[n];
1528                 s->io_buffer[511] = 0x100 - s->io_buffer[511];
1529                 s->status = READY_STAT | SEEK_STAT;
1530                 ide_transfer_start(s, s->io_buffer, 0x200, ide_transfer_stop);
1531                 ide_set_irq(s->bus);
1532                 break;
1533         case SMART_READ_DATA:
1534                 memset(s->io_buffer, 0, 0x200);
1535                 s->io_buffer[0] = 0x01; /* smart struct version */
1536                 for (n = 0; n < ARRAY_SIZE(smart_attributes); n++) {
1537                     int i;
1538                     for(i = 0; i < 11; i++) {
1539                         s->io_buffer[2+i+(n*12)] = smart_attributes[n][i];
1540                     }
1541                 }
1542                 s->io_buffer[362] = 0x02 | (s->smart_autosave?0x80:0x00);
1543                 if (s->smart_selftest_count == 0) {
1544                 s->io_buffer[363] = 0;
1545                 } else {
1546                 s->io_buffer[363] =
1547                         s->smart_selftest_data[3 + 
1548                                            (s->smart_selftest_count - 1) *
1549                                            24];
1550                 }
1551                 s->io_buffer[364] = 0x20; 
1552                 s->io_buffer[365] = 0x01; 
1553                 /* offline data collection capacity: execute + self-test*/
1554                 s->io_buffer[367] = (1<<4 | 1<<3 | 1); 
1555                 s->io_buffer[368] = 0x03; /* smart capability (1) */
1556                 s->io_buffer[369] = 0x00; /* smart capability (2) */
1557                 s->io_buffer[370] = 0x01; /* error logging supported */
1558                 s->io_buffer[372] = 0x02; /* minutes for poll short test */
1559                 s->io_buffer[373] = 0x36; /* minutes for poll ext test */
1560                 s->io_buffer[374] = 0x01; /* minutes for poll conveyance */
1561
1562                 for (n=0; n<511; n++) 
1563                 s->io_buffer[511] += s->io_buffer[n];
1564                 s->io_buffer[511] = 0x100 - s->io_buffer[511];
1565                 s->status = READY_STAT | SEEK_STAT;
1566                 ide_transfer_start(s, s->io_buffer, 0x200, ide_transfer_stop);
1567                 ide_set_irq(s->bus);
1568                 break;
1569         case SMART_READ_LOG:
1570                 switch (s->sector) {
1571                 case 0x01: /* summary smart error log */
1572                 memset(s->io_buffer, 0, 0x200);
1573                 s->io_buffer[0] = 0x01;
1574                 s->io_buffer[1] = 0x00; /* no error entries */
1575                 s->io_buffer[452] = s->smart_errors & 0xff;
1576                 s->io_buffer[453] = (s->smart_errors & 0xff00) >> 8;
1577
1578                 for (n=0; n<511; n++)
1579                         s->io_buffer[511] += s->io_buffer[n];
1580                 s->io_buffer[511] = 0x100 - s->io_buffer[511];
1581                 break;
1582                 case 0x06: /* smart self test log */
1583                 memset(s->io_buffer, 0, 0x200);
1584                 s->io_buffer[0] = 0x01;
1585                 if (s->smart_selftest_count == 0) {
1586                         s->io_buffer[508] = 0;
1587                 } else {
1588                         s->io_buffer[508] = s->smart_selftest_count;
1589                         for (n=2; n<506; n++) 
1590                         s->io_buffer[n] = s->smart_selftest_data[n];
1591                 }
1592                 for (n=0; n<511; n++)
1593                         s->io_buffer[511] += s->io_buffer[n];
1594                 s->io_buffer[511] = 0x100 - s->io_buffer[511];
1595                 break;
1596                 default:
1597                 goto abort_cmd;
1598                 }
1599                 s->status = READY_STAT | SEEK_STAT;
1600                 ide_transfer_start(s, s->io_buffer, 0x200, ide_transfer_stop);
1601                 ide_set_irq(s->bus);
1602                 break;
1603         case SMART_EXECUTE_OFFLINE:
1604                 switch (s->sector) {
1605                 case 0: /* off-line routine */
1606                 case 1: /* short self test */
1607                 case 2: /* extended self test */
1608                 s->smart_selftest_count++;
1609                 if(s->smart_selftest_count > 21)
1610                         s->smart_selftest_count = 0;
1611                 n = 2 + (s->smart_selftest_count - 1) * 24;
1612                 s->smart_selftest_data[n] = s->sector;
1613                 s->smart_selftest_data[n+1] = 0x00; /* OK and finished */
1614                 s->smart_selftest_data[n+2] = 0x34; /* hour count lsb */
1615                 s->smart_selftest_data[n+3] = 0x12; /* hour count msb */
1616                 s->status = READY_STAT | SEEK_STAT;
1617                 ide_set_irq(s->bus);
1618                 break;
1619                 default:
1620                 goto abort_cmd;
1621                 }
1622                 break;
1623         default:
1624                 goto abort_cmd;
1625         }
1626         break;
1627     default:
1628         /* should not be reachable */
1629     abort_cmd:
1630         ide_abort_command(s);
1631         ide_set_irq(s->bus);
1632         break;
1633     }
1634 }
1635
1636 uint32_t ide_ioport_read(void *opaque, uint32_t addr1)
1637 {
1638     IDEBus *bus = opaque;
1639     IDEState *s = idebus_active_if(bus);
1640     uint32_t addr;
1641     int ret, hob;
1642
1643     addr = addr1 & 7;
1644     /* FIXME: HOB readback uses bit 7, but it's always set right now */
1645     //hob = s->select & (1 << 7);
1646     hob = 0;
1647     switch(addr) {
1648     case 0:
1649         ret = 0xff;
1650         break;
1651     case 1:
1652         if ((!bus->ifs[0].bs && !bus->ifs[1].bs) ||
1653             (s != bus->ifs && !s->bs))
1654             ret = 0;
1655         else if (!hob)
1656             ret = s->error;
1657         else
1658             ret = s->hob_feature;
1659         break;
1660     case 2:
1661         if (!bus->ifs[0].bs && !bus->ifs[1].bs)
1662             ret = 0;
1663         else if (!hob)
1664             ret = s->nsector & 0xff;
1665         else
1666             ret = s->hob_nsector;
1667         break;
1668     case 3:
1669         if (!bus->ifs[0].bs && !bus->ifs[1].bs)
1670             ret = 0;
1671         else if (!hob)
1672             ret = s->sector;
1673         else
1674             ret = s->hob_sector;
1675         break;
1676     case 4:
1677         if (!bus->ifs[0].bs && !bus->ifs[1].bs)
1678             ret = 0;
1679         else if (!hob)
1680             ret = s->lcyl;
1681         else
1682             ret = s->hob_lcyl;
1683         break;
1684     case 5:
1685         if (!bus->ifs[0].bs && !bus->ifs[1].bs)
1686             ret = 0;
1687         else if (!hob)
1688             ret = s->hcyl;
1689         else
1690             ret = s->hob_hcyl;
1691         break;
1692     case 6:
1693         if (!bus->ifs[0].bs && !bus->ifs[1].bs)
1694             ret = 0;
1695         else
1696             ret = s->select;
1697         break;
1698     default:
1699     case 7:
1700         if ((!bus->ifs[0].bs && !bus->ifs[1].bs) ||
1701             (s != bus->ifs && !s->bs))
1702             ret = 0;
1703         else
1704             ret = s->status;
1705         qemu_irq_lower(bus->irq);
1706         break;
1707     }
1708 #ifdef DEBUG_IDE
1709     printf("ide: read addr=0x%x val=%02x\n", addr1, ret);
1710 #endif
1711     return ret;
1712 }
1713
1714 uint32_t ide_status_read(void *opaque, uint32_t addr)
1715 {
1716     IDEBus *bus = opaque;
1717     IDEState *s = idebus_active_if(bus);
1718     int ret;
1719
1720     if ((!bus->ifs[0].bs && !bus->ifs[1].bs) ||
1721         (s != bus->ifs && !s->bs))
1722         ret = 0;
1723     else
1724         ret = s->status;
1725 #ifdef DEBUG_IDE
1726     printf("ide: read status addr=0x%x val=%02x\n", addr, ret);
1727 #endif
1728     return ret;
1729 }
1730
1731 void ide_cmd_write(void *opaque, uint32_t addr, uint32_t val)
1732 {
1733     IDEBus *bus = opaque;
1734     IDEState *s;
1735     int i;
1736
1737 #ifdef DEBUG_IDE
1738     printf("ide: write control addr=0x%x val=%02x\n", addr, val);
1739 #endif
1740     /* common for both drives */
1741     if (!(bus->cmd & IDE_CMD_RESET) &&
1742         (val & IDE_CMD_RESET)) {
1743         /* reset low to high */
1744         for(i = 0;i < 2; i++) {
1745             s = &bus->ifs[i];
1746             s->status = BUSY_STAT | SEEK_STAT;
1747             s->error = 0x01;
1748         }
1749     } else if ((bus->cmd & IDE_CMD_RESET) &&
1750                !(val & IDE_CMD_RESET)) {
1751         /* high to low */
1752         for(i = 0;i < 2; i++) {
1753             s = &bus->ifs[i];
1754             if (s->drive_kind == IDE_CD)
1755                 s->status = 0x00; /* NOTE: READY is _not_ set */
1756             else
1757                 s->status = READY_STAT | SEEK_STAT;
1758             ide_set_signature(s);
1759         }
1760     }
1761
1762     bus->cmd = val;
1763 }
1764
1765 /*
1766  * Returns true if the running PIO transfer is a PIO out (i.e. data is
1767  * transferred from the device to the guest), false if it's a PIO in
1768  */
1769 static bool ide_is_pio_out(IDEState *s)
1770 {
1771     if (s->end_transfer_func == ide_sector_write ||
1772         s->end_transfer_func == ide_atapi_cmd) {
1773         return false;
1774     } else if (s->end_transfer_func == ide_sector_read ||
1775                s->end_transfer_func == ide_transfer_stop ||
1776                s->end_transfer_func == ide_atapi_cmd_reply_end ||
1777                s->end_transfer_func == ide_dummy_transfer_stop) {
1778         return true;
1779     }
1780
1781     abort();
1782 }
1783
1784 void ide_data_writew(void *opaque, uint32_t addr, uint32_t val)
1785 {
1786     IDEBus *bus = opaque;
1787     IDEState *s = idebus_active_if(bus);
1788     uint8_t *p;
1789
1790     /* PIO data access allowed only when DRQ bit is set. The result of a write
1791      * during PIO out is indeterminate, just ignore it. */
1792     if (!(s->status & DRQ_STAT) || ide_is_pio_out(s)) {
1793         return;
1794     }
1795
1796     p = s->data_ptr;
1797     *(uint16_t *)p = le16_to_cpu(val);
1798     p += 2;
1799     s->data_ptr = p;
1800     if (p >= s->data_end)
1801         s->end_transfer_func(s);
1802 }
1803
1804 uint32_t ide_data_readw(void *opaque, uint32_t addr)
1805 {
1806     IDEBus *bus = opaque;
1807     IDEState *s = idebus_active_if(bus);
1808     uint8_t *p;
1809     int ret;
1810
1811     /* PIO data access allowed only when DRQ bit is set. The result of a read
1812      * during PIO in is indeterminate, return 0 and don't move forward. */
1813     if (!(s->status & DRQ_STAT) || !ide_is_pio_out(s)) {
1814         return 0;
1815     }
1816
1817     p = s->data_ptr;
1818     ret = cpu_to_le16(*(uint16_t *)p);
1819     p += 2;
1820     s->data_ptr = p;
1821     if (p >= s->data_end)
1822         s->end_transfer_func(s);
1823     return ret;
1824 }
1825
1826 void ide_data_writel(void *opaque, uint32_t addr, uint32_t val)
1827 {
1828     IDEBus *bus = opaque;
1829     IDEState *s = idebus_active_if(bus);
1830     uint8_t *p;
1831
1832     /* PIO data access allowed only when DRQ bit is set. The result of a write
1833      * during PIO out is indeterminate, just ignore it. */
1834     if (!(s->status & DRQ_STAT) || ide_is_pio_out(s)) {
1835         return;
1836     }
1837
1838     p = s->data_ptr;
1839     *(uint32_t *)p = le32_to_cpu(val);
1840     p += 4;
1841     s->data_ptr = p;
1842     if (p >= s->data_end)
1843         s->end_transfer_func(s);
1844 }
1845
1846 uint32_t ide_data_readl(void *opaque, uint32_t addr)
1847 {
1848     IDEBus *bus = opaque;
1849     IDEState *s = idebus_active_if(bus);
1850     uint8_t *p;
1851     int ret;
1852
1853     /* PIO data access allowed only when DRQ bit is set. The result of a read
1854      * during PIO in is indeterminate, return 0 and don't move forward. */
1855     if (!(s->status & DRQ_STAT) || !ide_is_pio_out(s)) {
1856         return 0;
1857     }
1858
1859     p = s->data_ptr;
1860     ret = cpu_to_le32(*(uint32_t *)p);
1861     p += 4;
1862     s->data_ptr = p;
1863     if (p >= s->data_end)
1864         s->end_transfer_func(s);
1865     return ret;
1866 }
1867
1868 static void ide_dummy_transfer_stop(IDEState *s)
1869 {
1870     s->data_ptr = s->io_buffer;
1871     s->data_end = s->io_buffer;
1872     s->io_buffer[0] = 0xff;
1873     s->io_buffer[1] = 0xff;
1874     s->io_buffer[2] = 0xff;
1875     s->io_buffer[3] = 0xff;
1876 }
1877
1878 static void ide_reset(IDEState *s)
1879 {
1880 #ifdef DEBUG_IDE
1881     printf("ide: reset\n");
1882 #endif
1883
1884     if (s->pio_aiocb) {
1885         bdrv_aio_cancel(s->pio_aiocb);
1886         s->pio_aiocb = NULL;
1887     }
1888
1889     if (s->drive_kind == IDE_CFATA)
1890         s->mult_sectors = 0;
1891     else
1892         s->mult_sectors = MAX_MULT_SECTORS;
1893     /* ide regs */
1894     s->feature = 0;
1895     s->error = 0;
1896     s->nsector = 0;
1897     s->sector = 0;
1898     s->lcyl = 0;
1899     s->hcyl = 0;
1900
1901     /* lba48 */
1902     s->hob_feature = 0;
1903     s->hob_sector = 0;
1904     s->hob_nsector = 0;
1905     s->hob_lcyl = 0;
1906     s->hob_hcyl = 0;
1907
1908     s->select = 0xa0;
1909     s->status = READY_STAT | SEEK_STAT;
1910
1911     s->lba48 = 0;
1912
1913     /* ATAPI specific */
1914     s->sense_key = 0;
1915     s->asc = 0;
1916     s->cdrom_changed = 0;
1917     s->packet_transfer_size = 0;
1918     s->elementary_transfer_size = 0;
1919     s->io_buffer_index = 0;
1920     s->cd_sector_size = 0;
1921     s->atapi_dma = 0;
1922     s->tray_locked = 0;
1923     s->tray_open = 0;
1924     /* ATA DMA state */
1925     s->io_buffer_size = 0;
1926     s->req_nb_sectors = 0;
1927
1928     ide_set_signature(s);
1929     /* init the transfer handler so that 0xffff is returned on data
1930        accesses */
1931     s->end_transfer_func = ide_dummy_transfer_stop;
1932     ide_dummy_transfer_stop(s);
1933     s->media_changed = 0;
1934 }
1935
1936 void ide_bus_reset(IDEBus *bus)
1937 {
1938     bus->unit = 0;
1939     bus->cmd = 0;
1940     ide_reset(&bus->ifs[0]);
1941     ide_reset(&bus->ifs[1]);
1942     ide_clear_hob(bus);
1943
1944     /* pending async DMA */
1945     if (bus->dma->aiocb) {
1946 #ifdef DEBUG_AIO
1947         printf("aio_cancel\n");
1948 #endif
1949         bdrv_aio_cancel(bus->dma->aiocb);
1950         bus->dma->aiocb = NULL;
1951     }
1952
1953     /* reset dma provider too */
1954     bus->dma->ops->reset(bus->dma);
1955 }
1956
1957 static bool ide_cd_is_tray_open(void *opaque)
1958 {
1959     return ((IDEState *)opaque)->tray_open;
1960 }
1961
1962 static bool ide_cd_is_medium_locked(void *opaque)
1963 {
1964     return ((IDEState *)opaque)->tray_locked;
1965 }
1966
1967 static const BlockDevOps ide_cd_block_ops = {
1968     .change_media_cb = ide_cd_change_cb,
1969     .eject_request_cb = ide_cd_eject_request_cb,
1970     .is_tray_open = ide_cd_is_tray_open,
1971     .is_medium_locked = ide_cd_is_medium_locked,
1972 };
1973
1974 int ide_init_drive(IDEState *s, BlockDriverState *bs, IDEDriveKind kind,
1975                    const char *version, const char *serial, const char *model,
1976                    uint64_t wwn,
1977                    uint32_t cylinders, uint32_t heads, uint32_t secs,
1978                    int chs_trans)
1979 {
1980     uint64_t nb_sectors;
1981
1982     s->bs = bs;
1983     s->drive_kind = kind;
1984
1985     bdrv_get_geometry(bs, &nb_sectors);
1986     s->cylinders = cylinders;
1987     s->heads = heads;
1988     s->sectors = secs;
1989     s->chs_trans = chs_trans;
1990     s->nb_sectors = nb_sectors;
1991     s->wwn = wwn;
1992     /* The SMART values should be preserved across power cycles
1993        but they aren't.  */
1994     s->smart_enabled = 1;
1995     s->smart_autosave = 1;
1996     s->smart_errors = 0;
1997     s->smart_selftest_count = 0;
1998     if (kind == IDE_CD) {
1999         bdrv_set_dev_ops(bs, &ide_cd_block_ops, s);
2000         bdrv_set_buffer_alignment(bs, 2048);
2001     } else {
2002         if (!bdrv_is_inserted(s->bs)) {
2003             error_report("Device needs media, but drive is empty");
2004             return -1;
2005         }
2006         if (bdrv_is_read_only(bs)) {
2007             error_report("Can't use a read-only drive");
2008             return -1;
2009         }
2010     }
2011     if (serial) {
2012         pstrcpy(s->drive_serial_str, sizeof(s->drive_serial_str), serial);
2013     } else {
2014         snprintf(s->drive_serial_str, sizeof(s->drive_serial_str),
2015                  "QM%05d", s->drive_serial);
2016     }
2017     if (model) {
2018         pstrcpy(s->drive_model_str, sizeof(s->drive_model_str), model);
2019     } else {
2020         switch (kind) {
2021         case IDE_CD:
2022             strcpy(s->drive_model_str, "QEMU DVD-ROM");
2023             break;
2024         case IDE_CFATA:
2025             strcpy(s->drive_model_str, "QEMU MICRODRIVE");
2026             break;
2027         default:
2028             strcpy(s->drive_model_str, "QEMU HARDDISK");
2029             break;
2030         }
2031     }
2032
2033     if (version) {
2034         pstrcpy(s->version, sizeof(s->version), version);
2035     } else {
2036         pstrcpy(s->version, sizeof(s->version), qemu_get_version());
2037     }
2038
2039     ide_reset(s);
2040     bdrv_iostatus_enable(bs);
2041     return 0;
2042 }
2043
2044 static void ide_init1(IDEBus *bus, int unit)
2045 {
2046     static int drive_serial = 1;
2047     IDEState *s = &bus->ifs[unit];
2048
2049     s->bus = bus;
2050     s->unit = unit;
2051     s->drive_serial = drive_serial++;
2052     /* we need at least 2k alignment for accessing CDROMs using O_DIRECT */
2053     s->io_buffer_total_len = IDE_DMA_BUF_SECTORS*512 + 4;
2054     s->io_buffer = qemu_memalign(2048, s->io_buffer_total_len);
2055     memset(s->io_buffer, 0, s->io_buffer_total_len);
2056
2057     s->smart_selftest_data = qemu_blockalign(s->bs, 512);
2058     memset(s->smart_selftest_data, 0, 512);
2059
2060     s->sector_write_timer = qemu_new_timer_ns(vm_clock,
2061                                            ide_sector_write_timer_cb, s);
2062 }
2063
2064 static void ide_nop_start(IDEDMA *dma, IDEState *s,
2065                           BlockDriverCompletionFunc *cb)
2066 {
2067 }
2068
2069 static int ide_nop(IDEDMA *dma)
2070 {
2071     return 0;
2072 }
2073
2074 static int ide_nop_int(IDEDMA *dma, int x)
2075 {
2076     return 0;
2077 }
2078
2079 static void ide_nop_restart(void *opaque, int x, RunState y)
2080 {
2081 }
2082
2083 static const IDEDMAOps ide_dma_nop_ops = {
2084     .start_dma      = ide_nop_start,
2085     .start_transfer = ide_nop,
2086     .prepare_buf    = ide_nop_int,
2087     .rw_buf         = ide_nop_int,
2088     .set_unit       = ide_nop_int,
2089     .add_status     = ide_nop_int,
2090     .set_inactive   = ide_nop,
2091     .restart_cb     = ide_nop_restart,
2092     .reset          = ide_nop,
2093 };
2094
2095 static IDEDMA ide_dma_nop = {
2096     .ops = &ide_dma_nop_ops,
2097     .aiocb = NULL,
2098 };
2099
2100 void ide_init2(IDEBus *bus, qemu_irq irq)
2101 {
2102     int i;
2103
2104     for(i = 0; i < 2; i++) {
2105         ide_init1(bus, i);
2106         ide_reset(&bus->ifs[i]);
2107     }
2108     bus->irq = irq;
2109     bus->dma = &ide_dma_nop;
2110 }
2111
2112 /* TODO convert users to qdev and remove */
2113 void ide_init2_with_non_qdev_drives(IDEBus *bus, DriveInfo *hd0,
2114                                     DriveInfo *hd1, qemu_irq irq)
2115 {
2116     int i, trans;
2117     DriveInfo *dinfo;
2118     uint32_t cyls, heads, secs;
2119
2120     for(i = 0; i < 2; i++) {
2121         dinfo = i == 0 ? hd0 : hd1;
2122         ide_init1(bus, i);
2123         if (dinfo) {
2124             cyls  = dinfo->cyls;
2125             heads = dinfo->heads;
2126             secs  = dinfo->secs;
2127             trans = dinfo->trans;
2128             if (!cyls && !heads && !secs) {
2129                 hd_geometry_guess(dinfo->bdrv, &cyls, &heads, &secs, &trans);
2130             } else if (trans == BIOS_ATA_TRANSLATION_AUTO) {
2131                 trans = hd_bios_chs_auto_trans(cyls, heads, secs);
2132             }
2133             if (cyls < 1 || cyls > 65535) {
2134                 error_report("cyls must be between 1 and 65535");
2135                 exit(1);
2136             }
2137             if (heads < 1 || heads > 16) {
2138                 error_report("heads must be between 1 and 16");
2139                 exit(1);
2140             }
2141             if (secs < 1 || secs > 255) {
2142                 error_report("secs must be between 1 and 255");
2143                 exit(1);
2144             }
2145             if (ide_init_drive(&bus->ifs[i], dinfo->bdrv,
2146                                dinfo->media_cd ? IDE_CD : IDE_HD,
2147                                NULL, dinfo->serial, NULL, 0,
2148                                cyls, heads, secs, trans) < 0) {
2149                 error_report("Can't set up IDE drive %s", dinfo->id);
2150                 exit(1);
2151             }
2152             bdrv_attach_dev_nofail(dinfo->bdrv, &bus->ifs[i]);
2153         } else {
2154             ide_reset(&bus->ifs[i]);
2155         }
2156     }
2157     bus->irq = irq;
2158     bus->dma = &ide_dma_nop;
2159 }
2160
2161 static const MemoryRegionPortio ide_portio_list[] = {
2162     { 0, 8, 1, .read = ide_ioport_read, .write = ide_ioport_write },
2163     { 0, 2, 2, .read = ide_data_readw, .write = ide_data_writew },
2164     { 0, 4, 4, .read = ide_data_readl, .write = ide_data_writel },
2165     PORTIO_END_OF_LIST(),
2166 };
2167
2168 static const MemoryRegionPortio ide_portio2_list[] = {
2169     { 0, 1, 1, .read = ide_status_read, .write = ide_cmd_write },
2170     PORTIO_END_OF_LIST(),
2171 };
2172
2173 void ide_init_ioport(IDEBus *bus, ISADevice *dev, int iobase, int iobase2)
2174 {
2175     /* ??? Assume only ISA and PCI configurations, and that the PCI-ISA
2176        bridge has been setup properly to always register with ISA.  */
2177     isa_register_portio_list(dev, iobase, ide_portio_list, bus, "ide");
2178
2179     if (iobase2) {
2180         isa_register_portio_list(dev, iobase2, ide_portio2_list, bus, "ide");
2181     }
2182 }
2183
2184 static bool is_identify_set(void *opaque, int version_id)
2185 {
2186     IDEState *s = opaque;
2187
2188     return s->identify_set != 0;
2189 }
2190
2191 static EndTransferFunc* transfer_end_table[] = {
2192         ide_sector_read,
2193         ide_sector_write,
2194         ide_transfer_stop,
2195         ide_atapi_cmd_reply_end,
2196         ide_atapi_cmd,
2197         ide_dummy_transfer_stop,
2198 };
2199
2200 static int transfer_end_table_idx(EndTransferFunc *fn)
2201 {
2202     int i;
2203
2204     for (i = 0; i < ARRAY_SIZE(transfer_end_table); i++)
2205         if (transfer_end_table[i] == fn)
2206             return i;
2207
2208     return -1;
2209 }
2210
2211 static int ide_drive_post_load(void *opaque, int version_id)
2212 {
2213     IDEState *s = opaque;
2214
2215     if (s->identify_set) {
2216         bdrv_set_enable_write_cache(s->bs, !!(s->identify_data[85] & (1 << 5)));
2217     }
2218     return 0;
2219 }
2220
2221 static int ide_drive_pio_post_load(void *opaque, int version_id)
2222 {
2223     IDEState *s = opaque;
2224
2225     if (s->end_transfer_fn_idx >= ARRAY_SIZE(transfer_end_table)) {
2226         return -EINVAL;
2227     }
2228     s->end_transfer_func = transfer_end_table[s->end_transfer_fn_idx];
2229     s->data_ptr = s->io_buffer + s->cur_io_buffer_offset;
2230     s->data_end = s->data_ptr + s->cur_io_buffer_len;
2231
2232     return 0;
2233 }
2234
2235 static void ide_drive_pio_pre_save(void *opaque)
2236 {
2237     IDEState *s = opaque;
2238     int idx;
2239
2240     s->cur_io_buffer_offset = s->data_ptr - s->io_buffer;
2241     s->cur_io_buffer_len = s->data_end - s->data_ptr;
2242
2243     idx = transfer_end_table_idx(s->end_transfer_func);
2244     if (idx == -1) {
2245         fprintf(stderr, "%s: invalid end_transfer_func for DRQ_STAT\n",
2246                         __func__);
2247         s->end_transfer_fn_idx = 2;
2248     } else {
2249         s->end_transfer_fn_idx = idx;
2250     }
2251 }
2252
2253 static bool ide_drive_pio_state_needed(void *opaque)
2254 {
2255     IDEState *s = opaque;
2256
2257     return ((s->status & DRQ_STAT) != 0)
2258         || (s->bus->error_status & BM_STATUS_PIO_RETRY);
2259 }
2260
2261 static bool ide_tray_state_needed(void *opaque)
2262 {
2263     IDEState *s = opaque;
2264
2265     return s->tray_open || s->tray_locked;
2266 }
2267
2268 static bool ide_atapi_gesn_needed(void *opaque)
2269 {
2270     IDEState *s = opaque;
2271
2272     return s->events.new_media || s->events.eject_request;
2273 }
2274
2275 static bool ide_error_needed(void *opaque)
2276 {
2277     IDEBus *bus = opaque;
2278
2279     return (bus->error_status != 0);
2280 }
2281
2282 /* Fields for GET_EVENT_STATUS_NOTIFICATION ATAPI command */
2283 static const VMStateDescription vmstate_ide_atapi_gesn_state = {
2284     .name ="ide_drive/atapi/gesn_state",
2285     .version_id = 1,
2286     .minimum_version_id = 1,
2287     .minimum_version_id_old = 1,
2288     .fields = (VMStateField []) {
2289         VMSTATE_BOOL(events.new_media, IDEState),
2290         VMSTATE_BOOL(events.eject_request, IDEState),
2291         VMSTATE_END_OF_LIST()
2292     }
2293 };
2294
2295 static const VMStateDescription vmstate_ide_tray_state = {
2296     .name = "ide_drive/tray_state",
2297     .version_id = 1,
2298     .minimum_version_id = 1,
2299     .minimum_version_id_old = 1,
2300     .fields = (VMStateField[]) {
2301         VMSTATE_BOOL(tray_open, IDEState),
2302         VMSTATE_BOOL(tray_locked, IDEState),
2303         VMSTATE_END_OF_LIST()
2304     }
2305 };
2306
2307 static const VMStateDescription vmstate_ide_drive_pio_state = {
2308     .name = "ide_drive/pio_state",
2309     .version_id = 1,
2310     .minimum_version_id = 1,
2311     .minimum_version_id_old = 1,
2312     .pre_save = ide_drive_pio_pre_save,
2313     .post_load = ide_drive_pio_post_load,
2314     .fields      = (VMStateField []) {
2315         VMSTATE_INT32(req_nb_sectors, IDEState),
2316         VMSTATE_VARRAY_INT32(io_buffer, IDEState, io_buffer_total_len, 1,
2317                              vmstate_info_uint8, uint8_t),
2318         VMSTATE_INT32(cur_io_buffer_offset, IDEState),
2319         VMSTATE_INT32(cur_io_buffer_len, IDEState),
2320         VMSTATE_UINT8(end_transfer_fn_idx, IDEState),
2321         VMSTATE_INT32(elementary_transfer_size, IDEState),
2322         VMSTATE_INT32(packet_transfer_size, IDEState),
2323         VMSTATE_END_OF_LIST()
2324     }
2325 };
2326
2327 const VMStateDescription vmstate_ide_drive = {
2328     .name = "ide_drive",
2329     .version_id = 3,
2330     .minimum_version_id = 0,
2331     .minimum_version_id_old = 0,
2332     .post_load = ide_drive_post_load,
2333     .fields      = (VMStateField []) {
2334         VMSTATE_INT32(mult_sectors, IDEState),
2335         VMSTATE_INT32(identify_set, IDEState),
2336         VMSTATE_BUFFER_TEST(identify_data, IDEState, is_identify_set),
2337         VMSTATE_UINT8(feature, IDEState),
2338         VMSTATE_UINT8(error, IDEState),
2339         VMSTATE_UINT32(nsector, IDEState),
2340         VMSTATE_UINT8(sector, IDEState),
2341         VMSTATE_UINT8(lcyl, IDEState),
2342         VMSTATE_UINT8(hcyl, IDEState),
2343         VMSTATE_UINT8(hob_feature, IDEState),
2344         VMSTATE_UINT8(hob_sector, IDEState),
2345         VMSTATE_UINT8(hob_nsector, IDEState),
2346         VMSTATE_UINT8(hob_lcyl, IDEState),
2347         VMSTATE_UINT8(hob_hcyl, IDEState),
2348         VMSTATE_UINT8(select, IDEState),
2349         VMSTATE_UINT8(status, IDEState),
2350         VMSTATE_UINT8(lba48, IDEState),
2351         VMSTATE_UINT8(sense_key, IDEState),
2352         VMSTATE_UINT8(asc, IDEState),
2353         VMSTATE_UINT8_V(cdrom_changed, IDEState, 3),
2354         VMSTATE_END_OF_LIST()
2355     },
2356     .subsections = (VMStateSubsection []) {
2357         {
2358             .vmsd = &vmstate_ide_drive_pio_state,
2359             .needed = ide_drive_pio_state_needed,
2360         }, {
2361             .vmsd = &vmstate_ide_tray_state,
2362             .needed = ide_tray_state_needed,
2363         }, {
2364             .vmsd = &vmstate_ide_atapi_gesn_state,
2365             .needed = ide_atapi_gesn_needed,
2366         }, {
2367             /* empty */
2368         }
2369     }
2370 };
2371
2372 static const VMStateDescription vmstate_ide_error_status = {
2373     .name ="ide_bus/error",
2374     .version_id = 1,
2375     .minimum_version_id = 1,
2376     .minimum_version_id_old = 1,
2377     .fields = (VMStateField []) {
2378         VMSTATE_INT32(error_status, IDEBus),
2379         VMSTATE_END_OF_LIST()
2380     }
2381 };
2382
2383 const VMStateDescription vmstate_ide_bus = {
2384     .name = "ide_bus",
2385     .version_id = 1,
2386     .minimum_version_id = 1,
2387     .minimum_version_id_old = 1,
2388     .fields      = (VMStateField []) {
2389         VMSTATE_UINT8(cmd, IDEBus),
2390         VMSTATE_UINT8(unit, IDEBus),
2391         VMSTATE_END_OF_LIST()
2392     },
2393     .subsections = (VMStateSubsection []) {
2394         {
2395             .vmsd = &vmstate_ide_error_status,
2396             .needed = ide_error_needed,
2397         }, {
2398             /* empty */
2399         }
2400     }
2401 };
2402
2403 void ide_drive_get(DriveInfo **hd, int max_bus)
2404 {
2405     int i;
2406
2407     if (drive_get_max_bus(IF_IDE) >= max_bus) {
2408         fprintf(stderr, "qemu: too many IDE bus: %d\n", max_bus);
2409         exit(1);
2410     }
2411
2412     for(i = 0; i < max_bus * MAX_IDE_DEVS; i++) {
2413         hd[i] = drive_get(IF_IDE, i / MAX_IDE_DEVS, i % MAX_IDE_DEVS);
2414     }
2415 }
This page took 0.15988 seconds and 4 git commands to generate.