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