2 * QEMU IDE disk and CD/DVD-ROM Emulator
4 * Copyright (c) 2003 Fabrice Bellard
5 * Copyright (c) 2006 Openedhand Ltd.
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:
14 * The above copyright notice and this permission notice shall be included in
15 * all copies or substantial portions of the Software.
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
29 #include "qemu-error.h"
30 #include "qemu-timer.h"
35 #include <hw/ide/internal.h>
37 #define IDE_PAGE_SIZE 4096
39 static const int smart_attributes[][5] = {
40 /* id, flags, val, wrst, thrsh */
41 { 0x01, 0x03, 0x64, 0x64, 0x06}, /* raw read */
42 { 0x03, 0x03, 0x64, 0x64, 0x46}, /* spin up */
43 { 0x04, 0x02, 0x64, 0x64, 0x14}, /* start stop count */
44 { 0x05, 0x03, 0x64, 0x64, 0x36}, /* remapped sectors */
45 { 0x00, 0x00, 0x00, 0x00, 0x00}
48 /* XXX: DVDs that could fit on a CD will be reported as a CD */
49 static inline int media_present(IDEState *s)
51 return (s->nb_sectors > 0);
54 static inline int media_is_dvd(IDEState *s)
56 return (media_present(s) && s->nb_sectors > CD_MAX_SECTORS);
59 static inline int media_is_cd(IDEState *s)
61 return (media_present(s) && s->nb_sectors <= CD_MAX_SECTORS);
64 static void ide_dma_start(IDEState *s, BlockDriverCompletionFunc *dma_cb);
65 static void ide_dma_restart(IDEState *s, int is_read);
66 static void ide_atapi_cmd_read_dma_cb(void *opaque, int ret);
67 static int ide_handle_rw_error(IDEState *s, int error, int op);
68 static void ide_flush_cache(IDEState *s);
70 static void padstr(char *str, const char *src, int len)
73 for(i = 0; i < len; i++) {
82 static void padstr8(uint8_t *buf, int buf_size, const char *src)
85 for(i = 0; i < buf_size; i++) {
93 static void put_le16(uint16_t *p, unsigned int v)
98 static void ide_identify(IDEState *s)
101 unsigned int oldsize;
104 if (s->identify_set) {
105 memcpy(s->io_buffer, s->identify_data, sizeof(s->identify_data));
109 memset(s->io_buffer, 0, 512);
110 p = (uint16_t *)s->io_buffer;
111 put_le16(p + 0, 0x0040);
112 put_le16(p + 1, s->cylinders);
113 put_le16(p + 3, s->heads);
114 put_le16(p + 4, 512 * s->sectors); /* XXX: retired, remove ? */
115 put_le16(p + 5, 512); /* XXX: retired, remove ? */
116 put_le16(p + 6, s->sectors);
117 padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
118 put_le16(p + 20, 3); /* XXX: retired, remove ? */
119 put_le16(p + 21, 512); /* cache size in sectors */
120 put_le16(p + 22, 4); /* ecc bytes */
121 padstr((char *)(p + 23), s->version, 8); /* firmware version */
122 padstr((char *)(p + 27), "QEMU HARDDISK", 40); /* model */
123 #if MAX_MULT_SECTORS > 1
124 put_le16(p + 47, 0x8000 | MAX_MULT_SECTORS);
126 put_le16(p + 48, 1); /* dword I/O */
127 put_le16(p + 49, (1 << 11) | (1 << 9) | (1 << 8)); /* DMA and LBA supported */
128 put_le16(p + 51, 0x200); /* PIO transfer cycle */
129 put_le16(p + 52, 0x200); /* DMA transfer cycle */
130 put_le16(p + 53, 1 | (1 << 1) | (1 << 2)); /* words 54-58,64-70,88 are valid */
131 put_le16(p + 54, s->cylinders);
132 put_le16(p + 55, s->heads);
133 put_le16(p + 56, s->sectors);
134 oldsize = s->cylinders * s->heads * s->sectors;
135 put_le16(p + 57, oldsize);
136 put_le16(p + 58, oldsize >> 16);
138 put_le16(p + 59, 0x100 | s->mult_sectors);
139 put_le16(p + 60, s->nb_sectors);
140 put_le16(p + 61, s->nb_sectors >> 16);
141 put_le16(p + 62, 0x07); /* single word dma0-2 supported */
142 put_le16(p + 63, 0x07); /* mdma0-2 supported */
143 put_le16(p + 64, 0x03); /* pio3-4 supported */
144 put_le16(p + 65, 120);
145 put_le16(p + 66, 120);
146 put_le16(p + 67, 120);
147 put_le16(p + 68, 120);
148 put_le16(p + 80, 0xf0); /* ata3 -> ata6 supported */
149 put_le16(p + 81, 0x16); /* conforms to ata5 */
150 /* 14=NOP supported, 5=WCACHE supported, 0=SMART supported */
151 put_le16(p + 82, (1 << 14) | (1 << 5) | 1);
152 /* 13=flush_cache_ext,12=flush_cache,10=lba48 */
153 put_le16(p + 83, (1 << 14) | (1 << 13) | (1 <<12) | (1 << 10));
154 /* 14=set to 1, 1=SMART self test, 0=SMART error logging */
155 put_le16(p + 84, (1 << 14) | 0);
156 /* 14 = NOP supported, 5=WCACHE enabled, 0=SMART feature set enabled */
157 if (bdrv_enable_write_cache(s->bs))
158 put_le16(p + 85, (1 << 14) | (1 << 5) | 1);
160 put_le16(p + 85, (1 << 14) | 1);
161 /* 13=flush_cache_ext,12=flush_cache,10=lba48 */
162 put_le16(p + 86, (1 << 14) | (1 << 13) | (1 <<12) | (1 << 10));
163 /* 14=set to 1, 1=smart self test, 0=smart error logging */
164 put_le16(p + 87, (1 << 14) | 0);
165 put_le16(p + 88, 0x3f | (1 << 13)); /* udma5 set and supported */
166 put_le16(p + 93, 1 | (1 << 14) | 0x2000);
167 put_le16(p + 100, s->nb_sectors);
168 put_le16(p + 101, s->nb_sectors >> 16);
169 put_le16(p + 102, s->nb_sectors >> 32);
170 put_le16(p + 103, s->nb_sectors >> 48);
171 dev = s->unit ? s->bus->slave : s->bus->master;
172 if (dev && dev->conf.physical_block_size)
173 put_le16(p + 106, 0x6000 | get_physical_block_exp(&dev->conf));
175 memcpy(s->identify_data, p, sizeof(s->identify_data));
179 static void ide_atapi_identify(IDEState *s)
183 if (s->identify_set) {
184 memcpy(s->io_buffer, s->identify_data, sizeof(s->identify_data));
188 memset(s->io_buffer, 0, 512);
189 p = (uint16_t *)s->io_buffer;
190 /* Removable CDROM, 50us response, 12 byte packets */
191 put_le16(p + 0, (2 << 14) | (5 << 8) | (1 << 7) | (2 << 5) | (0 << 0));
192 padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
193 put_le16(p + 20, 3); /* buffer type */
194 put_le16(p + 21, 512); /* cache size in sectors */
195 put_le16(p + 22, 4); /* ecc bytes */
196 padstr((char *)(p + 23), s->version, 8); /* firmware version */
197 padstr((char *)(p + 27), "QEMU DVD-ROM", 40); /* model */
198 put_le16(p + 48, 1); /* dword I/O (XXX: should not be set on CDROM) */
200 put_le16(p + 49, 1 << 9 | 1 << 8); /* DMA and LBA supported */
201 put_le16(p + 53, 7); /* words 64-70, 54-58, 88 valid */
202 put_le16(p + 62, 7); /* single word dma0-2 supported */
203 put_le16(p + 63, 7); /* mdma0-2 supported */
205 put_le16(p + 49, 1 << 9); /* LBA supported, no DMA */
206 put_le16(p + 53, 3); /* words 64-70, 54-58 valid */
207 put_le16(p + 63, 0x103); /* DMA modes XXX: may be incorrect */
209 put_le16(p + 64, 3); /* pio3-4 supported */
210 put_le16(p + 65, 0xb4); /* minimum DMA multiword tx cycle time */
211 put_le16(p + 66, 0xb4); /* recommended DMA multiword tx cycle time */
212 put_le16(p + 67, 0x12c); /* minimum PIO cycle time without flow control */
213 put_le16(p + 68, 0xb4); /* minimum PIO cycle time with IORDY flow control */
215 put_le16(p + 71, 30); /* in ns */
216 put_le16(p + 72, 30); /* in ns */
218 put_le16(p + 80, 0x1e); /* support up to ATA/ATAPI-4 */
220 put_le16(p + 88, 0x3f | (1 << 13)); /* udma5 set and supported */
222 memcpy(s->identify_data, p, sizeof(s->identify_data));
226 static void ide_cfata_identify(IDEState *s)
231 p = (uint16_t *) s->identify_data;
235 memset(p, 0, sizeof(s->identify_data));
237 cur_sec = s->cylinders * s->heads * s->sectors;
239 put_le16(p + 0, 0x848a); /* CF Storage Card signature */
240 put_le16(p + 1, s->cylinders); /* Default cylinders */
241 put_le16(p + 3, s->heads); /* Default heads */
242 put_le16(p + 6, s->sectors); /* Default sectors per track */
243 put_le16(p + 7, s->nb_sectors >> 16); /* Sectors per card */
244 put_le16(p + 8, s->nb_sectors); /* Sectors per card */
245 padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
246 put_le16(p + 22, 0x0004); /* ECC bytes */
247 padstr((char *) (p + 23), s->version, 8); /* Firmware Revision */
248 padstr((char *) (p + 27), "QEMU MICRODRIVE", 40);/* Model number */
249 #if MAX_MULT_SECTORS > 1
250 put_le16(p + 47, 0x8000 | MAX_MULT_SECTORS);
252 put_le16(p + 47, 0x0000);
254 put_le16(p + 49, 0x0f00); /* Capabilities */
255 put_le16(p + 51, 0x0002); /* PIO cycle timing mode */
256 put_le16(p + 52, 0x0001); /* DMA cycle timing mode */
257 put_le16(p + 53, 0x0003); /* Translation params valid */
258 put_le16(p + 54, s->cylinders); /* Current cylinders */
259 put_le16(p + 55, s->heads); /* Current heads */
260 put_le16(p + 56, s->sectors); /* Current sectors */
261 put_le16(p + 57, cur_sec); /* Current capacity */
262 put_le16(p + 58, cur_sec >> 16); /* Current capacity */
263 if (s->mult_sectors) /* Multiple sector setting */
264 put_le16(p + 59, 0x100 | s->mult_sectors);
265 put_le16(p + 60, s->nb_sectors); /* Total LBA sectors */
266 put_le16(p + 61, s->nb_sectors >> 16); /* Total LBA sectors */
267 put_le16(p + 63, 0x0203); /* Multiword DMA capability */
268 put_le16(p + 64, 0x0001); /* Flow Control PIO support */
269 put_le16(p + 65, 0x0096); /* Min. Multiword DMA cycle */
270 put_le16(p + 66, 0x0096); /* Rec. Multiword DMA cycle */
271 put_le16(p + 68, 0x00b4); /* Min. PIO cycle time */
272 put_le16(p + 82, 0x400c); /* Command Set supported */
273 put_le16(p + 83, 0x7068); /* Command Set supported */
274 put_le16(p + 84, 0x4000); /* Features supported */
275 put_le16(p + 85, 0x000c); /* Command Set enabled */
276 put_le16(p + 86, 0x7044); /* Command Set enabled */
277 put_le16(p + 87, 0x4000); /* Features enabled */
278 put_le16(p + 91, 0x4060); /* Current APM level */
279 put_le16(p + 129, 0x0002); /* Current features option */
280 put_le16(p + 130, 0x0005); /* Reassigned sectors */
281 put_le16(p + 131, 0x0001); /* Initial power mode */
282 put_le16(p + 132, 0x0000); /* User signature */
283 put_le16(p + 160, 0x8100); /* Power requirement */
284 put_le16(p + 161, 0x8001); /* CF command set */
289 memcpy(s->io_buffer, p, sizeof(s->identify_data));
292 static void ide_set_signature(IDEState *s)
294 s->select &= 0xf0; /* clear head */
298 if (s->drive_kind == IDE_CD) {
310 static inline void ide_abort_command(IDEState *s)
312 s->status = READY_STAT | ERR_STAT;
316 static inline void ide_dma_submit_check(IDEState *s,
317 BlockDriverCompletionFunc *dma_cb, BMDMAState *bm)
324 /* prepare data transfer and tell what to do after */
325 static void ide_transfer_start(IDEState *s, uint8_t *buf, int size,
326 EndTransferFunc *end_transfer_func)
328 s->end_transfer_func = end_transfer_func;
330 s->data_end = buf + size;
331 if (!(s->status & ERR_STAT))
332 s->status |= DRQ_STAT;
335 static void ide_transfer_stop(IDEState *s)
337 s->end_transfer_func = ide_transfer_stop;
338 s->data_ptr = s->io_buffer;
339 s->data_end = s->io_buffer;
340 s->status &= ~DRQ_STAT;
343 int64_t ide_get_sector(IDEState *s)
346 if (s->select & 0x40) {
349 sector_num = ((s->select & 0x0f) << 24) | (s->hcyl << 16) |
350 (s->lcyl << 8) | s->sector;
352 sector_num = ((int64_t)s->hob_hcyl << 40) |
353 ((int64_t) s->hob_lcyl << 32) |
354 ((int64_t) s->hob_sector << 24) |
355 ((int64_t) s->hcyl << 16) |
356 ((int64_t) s->lcyl << 8) | s->sector;
359 sector_num = ((s->hcyl << 8) | s->lcyl) * s->heads * s->sectors +
360 (s->select & 0x0f) * s->sectors + (s->sector - 1);
365 void ide_set_sector(IDEState *s, int64_t sector_num)
368 if (s->select & 0x40) {
370 s->select = (s->select & 0xf0) | (sector_num >> 24);
371 s->hcyl = (sector_num >> 16);
372 s->lcyl = (sector_num >> 8);
373 s->sector = (sector_num);
375 s->sector = sector_num;
376 s->lcyl = sector_num >> 8;
377 s->hcyl = sector_num >> 16;
378 s->hob_sector = sector_num >> 24;
379 s->hob_lcyl = sector_num >> 32;
380 s->hob_hcyl = sector_num >> 40;
383 cyl = sector_num / (s->heads * s->sectors);
384 r = sector_num % (s->heads * s->sectors);
387 s->select = (s->select & 0xf0) | ((r / s->sectors) & 0x0f);
388 s->sector = (r % s->sectors) + 1;
392 static void ide_rw_error(IDEState *s) {
393 ide_abort_command(s);
397 static void ide_sector_read(IDEState *s)
402 s->status = READY_STAT | SEEK_STAT;
403 s->error = 0; /* not needed by IDE spec, but needed by Windows */
404 sector_num = ide_get_sector(s);
407 /* no more sector to read from disk */
408 ide_transfer_stop(s);
410 #if defined(DEBUG_IDE)
411 printf("read sector=%" PRId64 "\n", sector_num);
413 if (n > s->req_nb_sectors)
414 n = s->req_nb_sectors;
415 ret = bdrv_read(s->bs, sector_num, s->io_buffer, n);
417 if (ide_handle_rw_error(s, -ret,
418 BM_STATUS_PIO_RETRY | BM_STATUS_RETRY_READ))
423 ide_transfer_start(s, s->io_buffer, 512 * n, ide_sector_read);
425 ide_set_sector(s, sector_num + n);
431 /* return 0 if buffer completed */
432 static int dma_buf_prepare(BMDMAState *bm, int is_write)
434 IDEState *s = bmdma_active_if(bm);
441 qemu_sglist_init(&s->sg, s->nsector / (IDE_PAGE_SIZE / 512) + 1);
442 s->io_buffer_size = 0;
444 if (bm->cur_prd_len == 0) {
445 /* end of table (with a fail safe of one page) */
446 if (bm->cur_prd_last ||
447 (bm->cur_addr - bm->addr) >= IDE_PAGE_SIZE)
448 return s->io_buffer_size != 0;
449 cpu_physical_memory_read(bm->cur_addr, (uint8_t *)&prd, 8);
451 prd.addr = le32_to_cpu(prd.addr);
452 prd.size = le32_to_cpu(prd.size);
453 len = prd.size & 0xfffe;
456 bm->cur_prd_len = len;
457 bm->cur_prd_addr = prd.addr;
458 bm->cur_prd_last = (prd.size & 0x80000000);
462 qemu_sglist_add(&s->sg, bm->cur_prd_addr, l);
463 bm->cur_prd_addr += l;
464 bm->cur_prd_len -= l;
465 s->io_buffer_size += l;
471 static void dma_buf_commit(IDEState *s, int is_write)
473 qemu_sglist_destroy(&s->sg);
476 static void ide_dma_set_inactive(BMDMAState *bm)
478 bm->status &= ~BM_STATUS_DMAING;
484 void ide_dma_error(IDEState *s)
486 ide_transfer_stop(s);
488 s->status = READY_STAT | ERR_STAT;
489 ide_dma_set_inactive(s->bus->bmdma);
490 s->bus->bmdma->status |= BM_STATUS_INT;
494 static int ide_handle_rw_error(IDEState *s, int error, int op)
496 int is_read = (op & BM_STATUS_RETRY_READ);
497 BlockErrorAction action = bdrv_get_on_error(s->bs, is_read);
499 if (action == BLOCK_ERR_IGNORE) {
500 bdrv_mon_event(s->bs, BDRV_ACTION_IGNORE, is_read);
504 if ((error == ENOSPC && action == BLOCK_ERR_STOP_ENOSPC)
505 || action == BLOCK_ERR_STOP_ANY) {
506 s->bus->bmdma->unit = s->unit;
507 s->bus->bmdma->status |= op;
508 bdrv_mon_event(s->bs, BDRV_ACTION_STOP, is_read);
511 if (op & BM_STATUS_DMA_RETRY) {
512 dma_buf_commit(s, 0);
517 bdrv_mon_event(s->bs, BDRV_ACTION_REPORT, is_read);
523 /* return 0 if buffer completed */
524 static int dma_buf_rw(BMDMAState *bm, int is_write)
526 IDEState *s = bmdma_active_if(bm);
534 l = s->io_buffer_size - s->io_buffer_index;
537 if (bm->cur_prd_len == 0) {
538 /* end of table (with a fail safe of one page) */
539 if (bm->cur_prd_last ||
540 (bm->cur_addr - bm->addr) >= IDE_PAGE_SIZE)
542 cpu_physical_memory_read(bm->cur_addr, (uint8_t *)&prd, 8);
544 prd.addr = le32_to_cpu(prd.addr);
545 prd.size = le32_to_cpu(prd.size);
546 len = prd.size & 0xfffe;
549 bm->cur_prd_len = len;
550 bm->cur_prd_addr = prd.addr;
551 bm->cur_prd_last = (prd.size & 0x80000000);
553 if (l > bm->cur_prd_len)
557 cpu_physical_memory_write(bm->cur_prd_addr,
558 s->io_buffer + s->io_buffer_index, l);
560 cpu_physical_memory_read(bm->cur_prd_addr,
561 s->io_buffer + s->io_buffer_index, l);
563 bm->cur_prd_addr += l;
564 bm->cur_prd_len -= l;
565 s->io_buffer_index += l;
571 static void ide_read_dma_cb(void *opaque, int ret)
573 BMDMAState *bm = opaque;
574 IDEState *s = bmdma_active_if(bm);
579 if (ide_handle_rw_error(s, -ret,
580 BM_STATUS_DMA_RETRY | BM_STATUS_RETRY_READ))
586 n = s->io_buffer_size >> 9;
587 sector_num = ide_get_sector(s);
589 dma_buf_commit(s, 1);
591 ide_set_sector(s, sector_num);
595 /* end of transfer ? */
596 if (s->nsector == 0) {
597 s->status = READY_STAT | SEEK_STAT;
600 bm->status |= BM_STATUS_INT;
601 ide_dma_set_inactive(bm);
605 /* launch next transfer */
607 s->io_buffer_index = 0;
608 s->io_buffer_size = n * 512;
609 if (dma_buf_prepare(bm, 1) == 0)
612 printf("aio_read: sector_num=%" PRId64 " n=%d\n", sector_num, n);
614 bm->aiocb = dma_bdrv_read(s->bs, &s->sg, sector_num, ide_read_dma_cb, bm);
615 ide_dma_submit_check(s, ide_read_dma_cb, bm);
618 static void ide_sector_read_dma(IDEState *s)
620 s->status = READY_STAT | SEEK_STAT | DRQ_STAT | BUSY_STAT;
621 s->io_buffer_index = 0;
622 s->io_buffer_size = 0;
624 ide_dma_start(s, ide_read_dma_cb);
627 static void ide_sector_write_timer_cb(void *opaque)
629 IDEState *s = opaque;
633 static void ide_sector_write(IDEState *s)
638 s->status = READY_STAT | SEEK_STAT;
639 sector_num = ide_get_sector(s);
640 #if defined(DEBUG_IDE)
641 printf("write sector=%" PRId64 "\n", sector_num);
644 if (n > s->req_nb_sectors)
645 n = s->req_nb_sectors;
646 ret = bdrv_write(s->bs, sector_num, s->io_buffer, n);
649 if (ide_handle_rw_error(s, -ret, BM_STATUS_PIO_RETRY))
654 if (s->nsector == 0) {
655 /* no more sectors to write */
656 ide_transfer_stop(s);
659 if (n1 > s->req_nb_sectors)
660 n1 = s->req_nb_sectors;
661 ide_transfer_start(s, s->io_buffer, 512 * n1, ide_sector_write);
663 ide_set_sector(s, sector_num + n);
665 if (win2k_install_hack && ((++s->irq_count % 16) == 0)) {
666 /* It seems there is a bug in the Windows 2000 installer HDD
667 IDE driver which fills the disk with empty logs when the
668 IDE write IRQ comes too early. This hack tries to correct
669 that at the expense of slower write performances. Use this
670 option _only_ to install Windows 2000. You must disable it
672 qemu_mod_timer(s->sector_write_timer,
673 qemu_get_clock(vm_clock) + (get_ticks_per_sec() / 1000));
679 static void ide_dma_restart_bh(void *opaque)
681 BMDMAState *bm = opaque;
684 qemu_bh_delete(bm->bh);
687 is_read = !!(bm->status & BM_STATUS_RETRY_READ);
689 if (bm->status & BM_STATUS_DMA_RETRY) {
690 bm->status &= ~(BM_STATUS_DMA_RETRY | BM_STATUS_RETRY_READ);
691 ide_dma_restart(bmdma_active_if(bm), is_read);
692 } else if (bm->status & BM_STATUS_PIO_RETRY) {
693 bm->status &= ~(BM_STATUS_PIO_RETRY | BM_STATUS_RETRY_READ);
695 ide_sector_read(bmdma_active_if(bm));
697 ide_sector_write(bmdma_active_if(bm));
699 } else if (bm->status & BM_STATUS_RETRY_FLUSH) {
700 ide_flush_cache(bmdma_active_if(bm));
704 void ide_dma_restart_cb(void *opaque, int running, int reason)
706 BMDMAState *bm = opaque;
712 bm->bh = qemu_bh_new(ide_dma_restart_bh, bm);
713 qemu_bh_schedule(bm->bh);
717 static void ide_write_dma_cb(void *opaque, int ret)
719 BMDMAState *bm = opaque;
720 IDEState *s = bmdma_active_if(bm);
725 if (ide_handle_rw_error(s, -ret, BM_STATUS_DMA_RETRY))
729 n = s->io_buffer_size >> 9;
730 sector_num = ide_get_sector(s);
732 dma_buf_commit(s, 0);
734 ide_set_sector(s, sector_num);
738 /* end of transfer ? */
739 if (s->nsector == 0) {
740 s->status = READY_STAT | SEEK_STAT;
743 bm->status |= BM_STATUS_INT;
744 ide_dma_set_inactive(bm);
749 s->io_buffer_size = n * 512;
750 /* launch next transfer */
751 if (dma_buf_prepare(bm, 0) == 0)
754 printf("aio_write: sector_num=%" PRId64 " n=%d\n", sector_num, n);
756 bm->aiocb = dma_bdrv_write(s->bs, &s->sg, sector_num, ide_write_dma_cb, bm);
757 ide_dma_submit_check(s, ide_write_dma_cb, bm);
760 static void ide_sector_write_dma(IDEState *s)
762 s->status = READY_STAT | SEEK_STAT | DRQ_STAT | BUSY_STAT;
763 s->io_buffer_index = 0;
764 s->io_buffer_size = 0;
766 ide_dma_start(s, ide_write_dma_cb);
769 void ide_atapi_cmd_ok(IDEState *s)
772 s->status = READY_STAT | SEEK_STAT;
773 s->nsector = (s->nsector & ~7) | ATAPI_INT_REASON_IO | ATAPI_INT_REASON_CD;
777 void ide_atapi_cmd_error(IDEState *s, int sense_key, int asc)
779 #ifdef DEBUG_IDE_ATAPI
780 printf("atapi_cmd_error: sense=0x%x asc=0x%x\n", sense_key, asc);
782 s->error = sense_key << 4;
783 s->status = READY_STAT | ERR_STAT;
784 s->nsector = (s->nsector & ~7) | ATAPI_INT_REASON_IO | ATAPI_INT_REASON_CD;
785 s->sense_key = sense_key;
790 static void ide_atapi_cmd_check_status(IDEState *s)
792 #ifdef DEBUG_IDE_ATAPI
793 printf("atapi_cmd_check_status\n");
795 s->error = MC_ERR | (SENSE_UNIT_ATTENTION << 4);
796 s->status = ERR_STAT;
801 static void ide_flush_cb(void *opaque, int ret)
803 IDEState *s = opaque;
806 /* XXX: What sector number to set here? */
807 if (ide_handle_rw_error(s, -ret, BM_STATUS_RETRY_FLUSH)) {
812 s->status = READY_STAT | SEEK_STAT;
816 static void ide_flush_cache(IDEState *s)
818 BlockDriverAIOCB *acb;
825 acb = bdrv_aio_flush(s->bs, ide_flush_cb, s);
827 ide_flush_cb(s, -EIO);
831 static inline void cpu_to_ube16(uint8_t *buf, int val)
837 static inline void cpu_to_ube32(uint8_t *buf, unsigned int val)
845 static inline int ube16_to_cpu(const uint8_t *buf)
847 return (buf[0] << 8) | buf[1];
850 static inline int ube32_to_cpu(const uint8_t *buf)
852 return (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
855 static void lba_to_msf(uint8_t *buf, int lba)
858 buf[0] = (lba / 75) / 60;
859 buf[1] = (lba / 75) % 60;
863 static void cd_data_to_raw(uint8_t *buf, int lba)
867 memset(buf + 1, 0xff, 10);
871 lba_to_msf(buf, lba);
872 buf[3] = 0x01; /* mode 1 data */
876 /* XXX: ECC not computed */
880 static int cd_read_sector(BlockDriverState *bs, int lba, uint8_t *buf,
885 switch(sector_size) {
887 ret = bdrv_read(bs, (int64_t)lba << 2, buf, 4);
890 ret = bdrv_read(bs, (int64_t)lba << 2, buf + 16, 4);
893 cd_data_to_raw(buf, lba);
902 void ide_atapi_io_error(IDEState *s, int ret)
904 /* XXX: handle more errors */
905 if (ret == -ENOMEDIUM) {
906 ide_atapi_cmd_error(s, SENSE_NOT_READY,
907 ASC_MEDIUM_NOT_PRESENT);
909 ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST,
910 ASC_LOGICAL_BLOCK_OOR);
914 /* The whole ATAPI transfer logic is handled in this function */
915 static void ide_atapi_cmd_reply_end(IDEState *s)
917 int byte_count_limit, size, ret;
918 #ifdef DEBUG_IDE_ATAPI
919 printf("reply: tx_size=%d elem_tx_size=%d index=%d\n",
920 s->packet_transfer_size,
921 s->elementary_transfer_size,
924 if (s->packet_transfer_size <= 0) {
925 /* end of transfer */
926 ide_transfer_stop(s);
927 s->status = READY_STAT | SEEK_STAT;
928 s->nsector = (s->nsector & ~7) | ATAPI_INT_REASON_IO | ATAPI_INT_REASON_CD;
930 #ifdef DEBUG_IDE_ATAPI
931 printf("status=0x%x\n", s->status);
934 /* see if a new sector must be read */
935 if (s->lba != -1 && s->io_buffer_index >= s->cd_sector_size) {
936 ret = cd_read_sector(s->bs, s->lba, s->io_buffer, s->cd_sector_size);
938 ide_transfer_stop(s);
939 ide_atapi_io_error(s, ret);
943 s->io_buffer_index = 0;
945 if (s->elementary_transfer_size > 0) {
946 /* there are some data left to transmit in this elementary
948 size = s->cd_sector_size - s->io_buffer_index;
949 if (size > s->elementary_transfer_size)
950 size = s->elementary_transfer_size;
951 ide_transfer_start(s, s->io_buffer + s->io_buffer_index,
952 size, ide_atapi_cmd_reply_end);
953 s->packet_transfer_size -= size;
954 s->elementary_transfer_size -= size;
955 s->io_buffer_index += size;
957 /* a new transfer is needed */
958 s->nsector = (s->nsector & ~7) | ATAPI_INT_REASON_IO;
959 byte_count_limit = s->lcyl | (s->hcyl << 8);
960 #ifdef DEBUG_IDE_ATAPI
961 printf("byte_count_limit=%d\n", byte_count_limit);
963 if (byte_count_limit == 0xffff)
965 size = s->packet_transfer_size;
966 if (size > byte_count_limit) {
967 /* byte count limit must be even if this case */
968 if (byte_count_limit & 1)
970 size = byte_count_limit;
974 s->elementary_transfer_size = size;
975 /* we cannot transmit more than one sector at a time */
977 if (size > (s->cd_sector_size - s->io_buffer_index))
978 size = (s->cd_sector_size - s->io_buffer_index);
980 ide_transfer_start(s, s->io_buffer + s->io_buffer_index,
981 size, ide_atapi_cmd_reply_end);
982 s->packet_transfer_size -= size;
983 s->elementary_transfer_size -= size;
984 s->io_buffer_index += size;
986 #ifdef DEBUG_IDE_ATAPI
987 printf("status=0x%x\n", s->status);
993 /* send a reply of 'size' bytes in s->io_buffer to an ATAPI command */
994 static void ide_atapi_cmd_reply(IDEState *s, int size, int max_size)
998 s->lba = -1; /* no sector read */
999 s->packet_transfer_size = size;
1000 s->io_buffer_size = size; /* dma: send the reply data as one chunk */
1001 s->elementary_transfer_size = 0;
1002 s->io_buffer_index = 0;
1005 s->status = READY_STAT | SEEK_STAT | DRQ_STAT;
1006 ide_dma_start(s, ide_atapi_cmd_read_dma_cb);
1008 s->status = READY_STAT | SEEK_STAT;
1009 ide_atapi_cmd_reply_end(s);
1013 /* start a CD-CDROM read command */
1014 static void ide_atapi_cmd_read_pio(IDEState *s, int lba, int nb_sectors,
1018 s->packet_transfer_size = nb_sectors * sector_size;
1019 s->elementary_transfer_size = 0;
1020 s->io_buffer_index = sector_size;
1021 s->cd_sector_size = sector_size;
1023 s->status = READY_STAT | SEEK_STAT;
1024 ide_atapi_cmd_reply_end(s);
1027 /* ATAPI DMA support */
1029 /* XXX: handle read errors */
1030 static void ide_atapi_cmd_read_dma_cb(void *opaque, int ret)
1032 BMDMAState *bm = opaque;
1033 IDEState *s = bmdma_active_if(bm);
1037 ide_atapi_io_error(s, ret);
1041 if (s->io_buffer_size > 0) {
1043 * For a cdrom read sector command (s->lba != -1),
1044 * adjust the lba for the next s->io_buffer_size chunk
1045 * and dma the current chunk.
1046 * For a command != read (s->lba == -1), just transfer
1050 if (s->cd_sector_size == 2352) {
1052 cd_data_to_raw(s->io_buffer, s->lba);
1054 n = s->io_buffer_size >> 11;
1058 s->packet_transfer_size -= s->io_buffer_size;
1059 if (dma_buf_rw(bm, 1) == 0)
1063 if (s->packet_transfer_size <= 0) {
1064 s->status = READY_STAT | SEEK_STAT;
1065 s->nsector = (s->nsector & ~7) | ATAPI_INT_REASON_IO | ATAPI_INT_REASON_CD;
1066 ide_set_irq(s->bus);
1068 bm->status |= BM_STATUS_INT;
1069 ide_dma_set_inactive(bm);
1073 s->io_buffer_index = 0;
1074 if (s->cd_sector_size == 2352) {
1076 s->io_buffer_size = s->cd_sector_size;
1079 n = s->packet_transfer_size >> 11;
1080 if (n > (IDE_DMA_BUF_SECTORS / 4))
1081 n = (IDE_DMA_BUF_SECTORS / 4);
1082 s->io_buffer_size = n * 2048;
1086 printf("aio_read_cd: lba=%u n=%d\n", s->lba, n);
1088 bm->iov.iov_base = (void *)(s->io_buffer + data_offset);
1089 bm->iov.iov_len = n * 4 * 512;
1090 qemu_iovec_init_external(&bm->qiov, &bm->iov, 1);
1091 bm->aiocb = bdrv_aio_readv(s->bs, (int64_t)s->lba << 2, &bm->qiov,
1092 n * 4, ide_atapi_cmd_read_dma_cb, bm);
1094 /* Note: media not present is the most likely case */
1095 ide_atapi_cmd_error(s, SENSE_NOT_READY,
1096 ASC_MEDIUM_NOT_PRESENT);
1101 /* start a CD-CDROM read command with DMA */
1102 /* XXX: test if DMA is available */
1103 static void ide_atapi_cmd_read_dma(IDEState *s, int lba, int nb_sectors,
1107 s->packet_transfer_size = nb_sectors * sector_size;
1108 s->io_buffer_index = 0;
1109 s->io_buffer_size = 0;
1110 s->cd_sector_size = sector_size;
1112 /* XXX: check if BUSY_STAT should be set */
1113 s->status = READY_STAT | SEEK_STAT | DRQ_STAT | BUSY_STAT;
1114 ide_dma_start(s, ide_atapi_cmd_read_dma_cb);
1117 static void ide_atapi_cmd_read(IDEState *s, int lba, int nb_sectors,
1120 #ifdef DEBUG_IDE_ATAPI
1121 printf("read %s: LBA=%d nb_sectors=%d\n", s->atapi_dma ? "dma" : "pio",
1125 ide_atapi_cmd_read_dma(s, lba, nb_sectors, sector_size);
1127 ide_atapi_cmd_read_pio(s, lba, nb_sectors, sector_size);
1131 static inline uint8_t ide_atapi_set_profile(uint8_t *buf, uint8_t *index,
1134 uint8_t *buf_profile = buf + 12; /* start of profiles */
1136 buf_profile += ((*index) * 4); /* start of indexed profile */
1137 cpu_to_ube16 (buf_profile, profile);
1138 buf_profile[2] = ((buf_profile[0] == buf[6]) && (buf_profile[1] == buf[7]));
1140 /* each profile adds 4 bytes to the response */
1142 buf[11] += 4; /* Additional Length */
1147 static int ide_dvd_read_structure(IDEState *s, int format,
1148 const uint8_t *packet, uint8_t *buf)
1151 case 0x0: /* Physical format information */
1153 int layer = packet[6];
1154 uint64_t total_sectors;
1157 return -ASC_INV_FIELD_IN_CMD_PACKET;
1159 bdrv_get_geometry(s->bs, &total_sectors);
1160 total_sectors >>= 2;
1161 if (total_sectors == 0)
1162 return -ASC_MEDIUM_NOT_PRESENT;
1164 buf[4] = 1; /* DVD-ROM, part version 1 */
1165 buf[5] = 0xf; /* 120mm disc, minimum rate unspecified */
1166 buf[6] = 1; /* one layer, read-only (per MMC-2 spec) */
1167 buf[7] = 0; /* default densities */
1169 /* FIXME: 0x30000 per spec? */
1170 cpu_to_ube32(buf + 8, 0); /* start sector */
1171 cpu_to_ube32(buf + 12, total_sectors - 1); /* end sector */
1172 cpu_to_ube32(buf + 16, total_sectors - 1); /* l0 end sector */
1174 /* Size of buffer, not including 2 byte size field */
1175 cpu_to_be16wu((uint16_t *)buf, 2048 + 2);
1177 /* 2k data + 4 byte header */
1181 case 0x01: /* DVD copyright information */
1182 buf[4] = 0; /* no copyright data */
1183 buf[5] = 0; /* no region restrictions */
1185 /* Size of buffer, not including 2 byte size field */
1186 cpu_to_be16wu((uint16_t *)buf, 4 + 2);
1188 /* 4 byte header + 4 byte data */
1191 case 0x03: /* BCA information - invalid field for no BCA info */
1192 return -ASC_INV_FIELD_IN_CMD_PACKET;
1194 case 0x04: /* DVD disc manufacturing information */
1195 /* Size of buffer, not including 2 byte size field */
1196 cpu_to_be16wu((uint16_t *)buf, 2048 + 2);
1198 /* 2k data + 4 byte header */
1203 * This lists all the command capabilities above. Add new ones
1204 * in order and update the length and buffer return values.
1207 buf[4] = 0x00; /* Physical format */
1208 buf[5] = 0x40; /* Not writable, is readable */
1209 cpu_to_be16wu((uint16_t *)(buf + 6), 2048 + 4);
1211 buf[8] = 0x01; /* Copyright info */
1212 buf[9] = 0x40; /* Not writable, is readable */
1213 cpu_to_be16wu((uint16_t *)(buf + 10), 4 + 4);
1215 buf[12] = 0x03; /* BCA info */
1216 buf[13] = 0x40; /* Not writable, is readable */
1217 cpu_to_be16wu((uint16_t *)(buf + 14), 188 + 4);
1219 buf[16] = 0x04; /* Manufacturing info */
1220 buf[17] = 0x40; /* Not writable, is readable */
1221 cpu_to_be16wu((uint16_t *)(buf + 18), 2048 + 4);
1223 /* Size of buffer, not including 2 byte size field */
1224 cpu_to_be16wu((uint16_t *)buf, 16 + 2);
1226 /* data written + 4 byte header */
1229 default: /* TODO: formats beyond DVD-ROM requires */
1230 return -ASC_INV_FIELD_IN_CMD_PACKET;
1234 static void ide_atapi_cmd(IDEState *s)
1236 const uint8_t *packet;
1240 packet = s->io_buffer;
1242 #ifdef DEBUG_IDE_ATAPI
1245 printf("ATAPI limit=0x%x packet:", s->lcyl | (s->hcyl << 8));
1246 for(i = 0; i < ATAPI_PACKET_SIZE; i++) {
1247 printf(" %02x", packet[i]);
1252 /* If there's a UNIT_ATTENTION condition pending, only
1253 REQUEST_SENSE and INQUIRY commands are allowed to complete. */
1254 if (s->sense_key == SENSE_UNIT_ATTENTION &&
1255 s->io_buffer[0] != GPCMD_REQUEST_SENSE &&
1256 s->io_buffer[0] != GPCMD_INQUIRY) {
1257 ide_atapi_cmd_check_status(s);
1260 switch(s->io_buffer[0]) {
1261 case GPCMD_TEST_UNIT_READY:
1262 if (bdrv_is_inserted(s->bs) && !s->cdrom_changed) {
1263 ide_atapi_cmd_ok(s);
1265 s->cdrom_changed = 0;
1266 ide_atapi_cmd_error(s, SENSE_NOT_READY,
1267 ASC_MEDIUM_NOT_PRESENT);
1270 case GPCMD_MODE_SENSE_6:
1271 case GPCMD_MODE_SENSE_10:
1274 if (packet[0] == GPCMD_MODE_SENSE_10)
1275 max_len = ube16_to_cpu(packet + 7);
1277 max_len = packet[4];
1278 action = packet[2] >> 6;
1279 code = packet[2] & 0x3f;
1281 case 0: /* current values */
1283 case GPMODE_R_W_ERROR_PAGE: /* error recovery */
1284 cpu_to_ube16(&buf[0], 16 + 6);
1300 ide_atapi_cmd_reply(s, 16, max_len);
1302 case GPMODE_AUDIO_CTL_PAGE:
1303 cpu_to_ube16(&buf[0], 24 + 6);
1311 /* Fill with CDROM audio volume */
1317 ide_atapi_cmd_reply(s, 24, max_len);
1319 case GPMODE_CAPABILITIES_PAGE:
1320 cpu_to_ube16(&buf[0], 28 + 6);
1333 /* Claim PLAY_AUDIO capability (0x01) since some Linux
1334 code checks for this to automount media. */
1337 buf[14] = (1 << 0) | (1 << 3) | (1 << 5);
1338 if (bdrv_is_locked(s->bs))
1341 cpu_to_ube16(&buf[16], 706);
1344 cpu_to_ube16(&buf[20], 512);
1345 cpu_to_ube16(&buf[22], 706);
1350 ide_atapi_cmd_reply(s, 28, max_len);
1356 case 1: /* changeable values */
1358 case 2: /* default values */
1361 case 3: /* saved values */
1362 ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST,
1363 ASC_SAVING_PARAMETERS_NOT_SUPPORTED);
1368 case GPCMD_REQUEST_SENSE:
1369 max_len = packet[4];
1371 buf[0] = 0x70 | (1 << 7);
1372 buf[2] = s->sense_key;
1375 if (s->sense_key == SENSE_UNIT_ATTENTION)
1376 s->sense_key = SENSE_NONE;
1377 ide_atapi_cmd_reply(s, 18, max_len);
1379 case GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL:
1380 if (bdrv_is_inserted(s->bs)) {
1381 bdrv_set_locked(s->bs, packet[4] & 1);
1382 ide_atapi_cmd_ok(s);
1384 ide_atapi_cmd_error(s, SENSE_NOT_READY,
1385 ASC_MEDIUM_NOT_PRESENT);
1391 int nb_sectors, lba;
1393 if (packet[0] == GPCMD_READ_10)
1394 nb_sectors = ube16_to_cpu(packet + 7);
1396 nb_sectors = ube32_to_cpu(packet + 6);
1397 lba = ube32_to_cpu(packet + 2);
1398 if (nb_sectors == 0) {
1399 ide_atapi_cmd_ok(s);
1402 ide_atapi_cmd_read(s, lba, nb_sectors, 2048);
1407 int nb_sectors, lba, transfer_request;
1409 nb_sectors = (packet[6] << 16) | (packet[7] << 8) | packet[8];
1410 lba = ube32_to_cpu(packet + 2);
1411 if (nb_sectors == 0) {
1412 ide_atapi_cmd_ok(s);
1415 transfer_request = packet[9];
1416 switch(transfer_request & 0xf8) {
1419 ide_atapi_cmd_ok(s);
1423 ide_atapi_cmd_read(s, lba, nb_sectors, 2048);
1427 ide_atapi_cmd_read(s, lba, nb_sectors, 2352);
1430 ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST,
1431 ASC_INV_FIELD_IN_CMD_PACKET);
1439 uint64_t total_sectors;
1441 bdrv_get_geometry(s->bs, &total_sectors);
1442 total_sectors >>= 2;
1443 if (total_sectors == 0) {
1444 ide_atapi_cmd_error(s, SENSE_NOT_READY,
1445 ASC_MEDIUM_NOT_PRESENT);
1448 lba = ube32_to_cpu(packet + 2);
1449 if (lba >= total_sectors) {
1450 ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST,
1451 ASC_LOGICAL_BLOCK_OOR);
1454 ide_atapi_cmd_ok(s);
1457 case GPCMD_START_STOP_UNIT:
1459 int start, eject, err = 0;
1460 start = packet[4] & 1;
1461 eject = (packet[4] >> 1) & 1;
1464 err = bdrv_eject(s->bs, !start);
1469 ide_atapi_cmd_ok(s);
1472 ide_atapi_cmd_error(s, SENSE_NOT_READY,
1473 ASC_MEDIA_REMOVAL_PREVENTED);
1476 ide_atapi_cmd_error(s, SENSE_NOT_READY,
1477 ASC_MEDIUM_NOT_PRESENT);
1482 case GPCMD_MECHANISM_STATUS:
1484 max_len = ube16_to_cpu(packet + 8);
1485 cpu_to_ube16(buf, 0);
1486 /* no current LBA */
1491 cpu_to_ube16(buf + 6, 0);
1492 ide_atapi_cmd_reply(s, 8, max_len);
1495 case GPCMD_READ_TOC_PMA_ATIP:
1497 int format, msf, start_track, len;
1498 uint64_t total_sectors;
1500 bdrv_get_geometry(s->bs, &total_sectors);
1501 total_sectors >>= 2;
1502 if (total_sectors == 0) {
1503 ide_atapi_cmd_error(s, SENSE_NOT_READY,
1504 ASC_MEDIUM_NOT_PRESENT);
1507 max_len = ube16_to_cpu(packet + 7);
1508 format = packet[9] >> 6;
1509 msf = (packet[1] >> 1) & 1;
1510 start_track = packet[6];
1513 len = cdrom_read_toc(total_sectors, buf, msf, start_track);
1516 ide_atapi_cmd_reply(s, len, max_len);
1519 /* multi session : only a single session defined */
1524 ide_atapi_cmd_reply(s, 12, max_len);
1527 len = cdrom_read_toc_raw(total_sectors, buf, msf, start_track);
1530 ide_atapi_cmd_reply(s, len, max_len);
1534 ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST,
1535 ASC_INV_FIELD_IN_CMD_PACKET);
1540 case GPCMD_READ_CDVD_CAPACITY:
1542 uint64_t total_sectors;
1544 bdrv_get_geometry(s->bs, &total_sectors);
1545 total_sectors >>= 2;
1546 if (total_sectors == 0) {
1547 ide_atapi_cmd_error(s, SENSE_NOT_READY,
1548 ASC_MEDIUM_NOT_PRESENT);
1551 /* NOTE: it is really the number of sectors minus 1 */
1552 cpu_to_ube32(buf, total_sectors - 1);
1553 cpu_to_ube32(buf + 4, 2048);
1554 ide_atapi_cmd_reply(s, 8, 8);
1557 case GPCMD_READ_DVD_STRUCTURE:
1559 int media = packet[1];
1560 int format = packet[7];
1563 max_len = ube16_to_cpu(packet + 8);
1565 if (format < 0xff) {
1566 if (media_is_cd(s)) {
1567 ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST,
1568 ASC_INCOMPATIBLE_FORMAT);
1570 } else if (!media_present(s)) {
1571 ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST,
1572 ASC_INV_FIELD_IN_CMD_PACKET);
1577 memset(buf, 0, max_len > IDE_DMA_BUF_SECTORS * 512 + 4 ?
1578 IDE_DMA_BUF_SECTORS * 512 + 4 : max_len);
1584 ret = ide_dvd_read_structure(s, format, packet, buf);
1587 ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST, -ret);
1589 ide_atapi_cmd_reply(s, ret, max_len);
1593 /* TODO: BD support, fall through for now */
1595 /* Generic disk structures */
1596 case 0x80: /* TODO: AACS volume identifier */
1597 case 0x81: /* TODO: AACS media serial number */
1598 case 0x82: /* TODO: AACS media identifier */
1599 case 0x83: /* TODO: AACS media key block */
1600 case 0x90: /* TODO: List of recognized format layers */
1601 case 0xc0: /* TODO: Write protection status */
1603 ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST,
1604 ASC_INV_FIELD_IN_CMD_PACKET);
1609 case GPCMD_SET_SPEED:
1610 ide_atapi_cmd_ok(s);
1613 max_len = packet[4];
1614 buf[0] = 0x05; /* CD-ROM */
1615 buf[1] = 0x80; /* removable */
1616 buf[2] = 0x00; /* ISO */
1617 buf[3] = 0x21; /* ATAPI-2 (XXX: put ATAPI-4 ?) */
1618 buf[4] = 31; /* additional length */
1619 buf[5] = 0; /* reserved */
1620 buf[6] = 0; /* reserved */
1621 buf[7] = 0; /* reserved */
1622 padstr8(buf + 8, 8, "QEMU");
1623 padstr8(buf + 16, 16, "QEMU DVD-ROM");
1624 padstr8(buf + 32, 4, s->version);
1625 ide_atapi_cmd_reply(s, 36, max_len);
1627 case GPCMD_GET_CONFIGURATION:
1632 /* only feature 0 is supported */
1633 if (packet[2] != 0 || packet[3] != 0) {
1634 ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST,
1635 ASC_INV_FIELD_IN_CMD_PACKET);
1639 /* XXX: could result in alignment problems in some architectures */
1640 max_len = ube16_to_cpu(packet + 7);
1643 * XXX: avoid overflow for io_buffer if max_len is bigger than
1644 * the size of that buffer (dimensioned to max number of
1645 * sectors to transfer at once)
1647 * Only a problem if the feature/profiles grow.
1649 if (max_len > 512) /* XXX: assume 1 sector */
1652 memset(buf, 0, max_len);
1654 * the number of sectors from the media tells us which profile
1655 * to use as current. 0 means there is no media
1657 if (media_is_dvd(s))
1658 cpu_to_ube16(buf + 6, MMC_PROFILE_DVD_ROM);
1659 else if (media_is_cd(s))
1660 cpu_to_ube16(buf + 6, MMC_PROFILE_CD_ROM);
1662 buf[10] = 0x02 | 0x01; /* persistent and current */
1663 len = 12; /* headers: 8 + 4 */
1664 len += ide_atapi_set_profile(buf, &index, MMC_PROFILE_DVD_ROM);
1665 len += ide_atapi_set_profile(buf, &index, MMC_PROFILE_CD_ROM);
1666 cpu_to_ube32(buf, len - 4); /* data length */
1668 ide_atapi_cmd_reply(s, len, max_len);
1671 case GPCMD_GET_EVENT_STATUS_NOTIFICATION:
1672 max_len = ube16_to_cpu(packet + 7);
1674 if (packet[1] & 0x01) { /* polling */
1675 /* We don't support any event class (yet). */
1676 cpu_to_ube16(buf, 0x00); /* No event descriptor returned */
1677 buf[2] = 0x80; /* No Event Available (NEA) */
1678 buf[3] = 0x00; /* Empty supported event classes */
1679 ide_atapi_cmd_reply(s, 4, max_len);
1680 } else { /* asynchronous mode */
1681 /* Only polling is supported, asynchronous mode is not. */
1682 ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST,
1683 ASC_INV_FIELD_IN_CMD_PACKET);
1687 ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST,
1688 ASC_ILLEGAL_OPCODE);
1693 static void ide_cfata_metadata_inquiry(IDEState *s)
1698 p = (uint16_t *) s->io_buffer;
1699 memset(p, 0, 0x200);
1700 spd = ((s->mdata_size - 1) >> 9) + 1;
1702 put_le16(p + 0, 0x0001); /* Data format revision */
1703 put_le16(p + 1, 0x0000); /* Media property: silicon */
1704 put_le16(p + 2, s->media_changed); /* Media status */
1705 put_le16(p + 3, s->mdata_size & 0xffff); /* Capacity in bytes (low) */
1706 put_le16(p + 4, s->mdata_size >> 16); /* Capacity in bytes (high) */
1707 put_le16(p + 5, spd & 0xffff); /* Sectors per device (low) */
1708 put_le16(p + 6, spd >> 16); /* Sectors per device (high) */
1711 static void ide_cfata_metadata_read(IDEState *s)
1715 if (((s->hcyl << 16) | s->lcyl) << 9 > s->mdata_size + 2) {
1716 s->status = ERR_STAT;
1717 s->error = ABRT_ERR;
1721 p = (uint16_t *) s->io_buffer;
1722 memset(p, 0, 0x200);
1724 put_le16(p + 0, s->media_changed); /* Media status */
1725 memcpy(p + 1, s->mdata_storage + (((s->hcyl << 16) | s->lcyl) << 9),
1726 MIN(MIN(s->mdata_size - (((s->hcyl << 16) | s->lcyl) << 9),
1727 s->nsector << 9), 0x200 - 2));
1730 static void ide_cfata_metadata_write(IDEState *s)
1732 if (((s->hcyl << 16) | s->lcyl) << 9 > s->mdata_size + 2) {
1733 s->status = ERR_STAT;
1734 s->error = ABRT_ERR;
1738 s->media_changed = 0;
1740 memcpy(s->mdata_storage + (((s->hcyl << 16) | s->lcyl) << 9),
1742 MIN(MIN(s->mdata_size - (((s->hcyl << 16) | s->lcyl) << 9),
1743 s->nsector << 9), 0x200 - 2));
1746 /* called when the inserted state of the media has changed */
1747 static void cdrom_change_cb(void *opaque)
1749 IDEState *s = opaque;
1750 uint64_t nb_sectors;
1752 bdrv_get_geometry(s->bs, &nb_sectors);
1753 s->nb_sectors = nb_sectors;
1755 s->sense_key = SENSE_UNIT_ATTENTION;
1756 s->asc = ASC_MEDIUM_MAY_HAVE_CHANGED;
1757 s->cdrom_changed = 1;
1758 ide_set_irq(s->bus);
1761 static void ide_cmd_lba48_transform(IDEState *s, int lba48)
1765 /* handle the 'magic' 0 nsector count conversion here. to avoid
1766 * fiddling with the rest of the read logic, we just store the
1767 * full sector count in ->nsector and ignore ->hob_nsector from now
1773 if (!s->nsector && !s->hob_nsector)
1776 int lo = s->nsector;
1777 int hi = s->hob_nsector;
1779 s->nsector = (hi << 8) | lo;
1784 static void ide_clear_hob(IDEBus *bus)
1786 /* any write clears HOB high bit of device control register */
1787 bus->ifs[0].select &= ~(1 << 7);
1788 bus->ifs[1].select &= ~(1 << 7);
1791 void ide_ioport_write(void *opaque, uint32_t addr, uint32_t val)
1793 IDEBus *bus = opaque;
1799 printf("IDE: write addr=0x%x val=0x%02x\n", addr, val);
1804 /* ignore writes to command block while busy with previous command */
1805 if (addr != 7 && (idebus_active_if(bus)->status & (BUSY_STAT|DRQ_STAT)))
1813 /* NOTE: data is written to the two drives */
1814 bus->ifs[0].hob_feature = bus->ifs[0].feature;
1815 bus->ifs[1].hob_feature = bus->ifs[1].feature;
1816 bus->ifs[0].feature = val;
1817 bus->ifs[1].feature = val;
1821 bus->ifs[0].hob_nsector = bus->ifs[0].nsector;
1822 bus->ifs[1].hob_nsector = bus->ifs[1].nsector;
1823 bus->ifs[0].nsector = val;
1824 bus->ifs[1].nsector = val;
1828 bus->ifs[0].hob_sector = bus->ifs[0].sector;
1829 bus->ifs[1].hob_sector = bus->ifs[1].sector;
1830 bus->ifs[0].sector = val;
1831 bus->ifs[1].sector = val;
1835 bus->ifs[0].hob_lcyl = bus->ifs[0].lcyl;
1836 bus->ifs[1].hob_lcyl = bus->ifs[1].lcyl;
1837 bus->ifs[0].lcyl = val;
1838 bus->ifs[1].lcyl = val;
1842 bus->ifs[0].hob_hcyl = bus->ifs[0].hcyl;
1843 bus->ifs[1].hob_hcyl = bus->ifs[1].hcyl;
1844 bus->ifs[0].hcyl = val;
1845 bus->ifs[1].hcyl = val;
1848 /* FIXME: HOB readback uses bit 7 */
1849 bus->ifs[0].select = (val & ~0x10) | 0xa0;
1850 bus->ifs[1].select = (val | 0x10) | 0xa0;
1852 bus->unit = (val >> 4) & 1;
1857 #if defined(DEBUG_IDE)
1858 printf("ide: CMD=%02x\n", val);
1860 s = idebus_active_if(bus);
1861 /* ignore commands to non existant slave */
1862 if (s != bus->ifs && !s->bs)
1865 /* Only DEVICE RESET is allowed while BSY or/and DRQ are set */
1866 if ((s->status & (BUSY_STAT|DRQ_STAT)) && val != WIN_DEVICE_RESET)
1871 if (s->bs && s->drive_kind != IDE_CD) {
1872 if (s->drive_kind != IDE_CFATA)
1875 ide_cfata_identify(s);
1876 s->status = READY_STAT | SEEK_STAT;
1877 ide_transfer_start(s, s->io_buffer, 512, ide_transfer_stop);
1879 if (s->drive_kind == IDE_CD) {
1880 ide_set_signature(s);
1882 ide_abort_command(s);
1884 ide_set_irq(s->bus);
1889 s->status = READY_STAT | SEEK_STAT;
1890 ide_set_irq(s->bus);
1893 if (s->drive_kind == IDE_CFATA && s->nsector == 0) {
1894 /* Disable Read and Write Multiple */
1895 s->mult_sectors = 0;
1896 s->status = READY_STAT | SEEK_STAT;
1897 } else if ((s->nsector & 0xff) != 0 &&
1898 ((s->nsector & 0xff) > MAX_MULT_SECTORS ||
1899 (s->nsector & (s->nsector - 1)) != 0)) {
1900 ide_abort_command(s);
1902 s->mult_sectors = s->nsector & 0xff;
1903 s->status = READY_STAT | SEEK_STAT;
1905 ide_set_irq(s->bus);
1907 case WIN_VERIFY_EXT:
1910 case WIN_VERIFY_ONCE:
1911 /* do sector number check ? */
1912 ide_cmd_lba48_transform(s, lba48);
1913 s->status = READY_STAT | SEEK_STAT;
1914 ide_set_irq(s->bus);
1922 ide_cmd_lba48_transform(s, lba48);
1923 s->req_nb_sectors = 1;
1929 case WIN_WRITE_ONCE:
1930 case CFA_WRITE_SECT_WO_ERASE:
1931 case WIN_WRITE_VERIFY:
1932 ide_cmd_lba48_transform(s, lba48);
1934 s->status = SEEK_STAT | READY_STAT;
1935 s->req_nb_sectors = 1;
1936 ide_transfer_start(s, s->io_buffer, 512, ide_sector_write);
1937 s->media_changed = 1;
1939 case WIN_MULTREAD_EXT:
1942 if (!s->mult_sectors)
1944 ide_cmd_lba48_transform(s, lba48);
1945 s->req_nb_sectors = s->mult_sectors;
1948 case WIN_MULTWRITE_EXT:
1951 case CFA_WRITE_MULTI_WO_ERASE:
1952 if (!s->mult_sectors)
1954 ide_cmd_lba48_transform(s, lba48);
1956 s->status = SEEK_STAT | READY_STAT;
1957 s->req_nb_sectors = s->mult_sectors;
1959 if (n > s->req_nb_sectors)
1960 n = s->req_nb_sectors;
1961 ide_transfer_start(s, s->io_buffer, 512 * n, ide_sector_write);
1962 s->media_changed = 1;
1964 case WIN_READDMA_EXT:
1967 case WIN_READDMA_ONCE:
1970 ide_cmd_lba48_transform(s, lba48);
1971 ide_sector_read_dma(s);
1973 case WIN_WRITEDMA_EXT:
1976 case WIN_WRITEDMA_ONCE:
1979 ide_cmd_lba48_transform(s, lba48);
1980 ide_sector_write_dma(s);
1981 s->media_changed = 1;
1983 case WIN_READ_NATIVE_MAX_EXT:
1985 case WIN_READ_NATIVE_MAX:
1986 ide_cmd_lba48_transform(s, lba48);
1987 ide_set_sector(s, s->nb_sectors - 1);
1988 s->status = READY_STAT | SEEK_STAT;
1989 ide_set_irq(s->bus);
1991 case WIN_CHECKPOWERMODE1:
1992 case WIN_CHECKPOWERMODE2:
1993 s->nsector = 0xff; /* device active or idle */
1994 s->status = READY_STAT | SEEK_STAT;
1995 ide_set_irq(s->bus);
1997 case WIN_SETFEATURES:
2000 /* XXX: valid for CDROM ? */
2001 switch(s->feature) {
2002 case 0xcc: /* reverting to power-on defaults enable */
2003 case 0x66: /* reverting to power-on defaults disable */
2004 case 0x02: /* write cache enable */
2005 case 0x82: /* write cache disable */
2006 case 0xaa: /* read look-ahead enable */
2007 case 0x55: /* read look-ahead disable */
2008 case 0x05: /* set advanced power management mode */
2009 case 0x85: /* disable advanced power management mode */
2010 case 0x69: /* NOP */
2011 case 0x67: /* NOP */
2012 case 0x96: /* NOP */
2013 case 0x9a: /* NOP */
2014 case 0x42: /* enable Automatic Acoustic Mode */
2015 case 0xc2: /* disable Automatic Acoustic Mode */
2016 s->status = READY_STAT | SEEK_STAT;
2017 ide_set_irq(s->bus);
2019 case 0x03: { /* set transfer mode */
2020 uint8_t val = s->nsector & 0x07;
2021 uint16_t *identify_data = (uint16_t *)s->identify_data;
2023 switch (s->nsector >> 3) {
2024 case 0x00: /* pio default */
2025 case 0x01: /* pio mode */
2026 put_le16(identify_data + 62,0x07);
2027 put_le16(identify_data + 63,0x07);
2028 put_le16(identify_data + 88,0x3f);
2030 case 0x02: /* sigle word dma mode*/
2031 put_le16(identify_data + 62,0x07 | (1 << (val + 8)));
2032 put_le16(identify_data + 63,0x07);
2033 put_le16(identify_data + 88,0x3f);
2035 case 0x04: /* mdma mode */
2036 put_le16(identify_data + 62,0x07);
2037 put_le16(identify_data + 63,0x07 | (1 << (val + 8)));
2038 put_le16(identify_data + 88,0x3f);
2040 case 0x08: /* udma mode */
2041 put_le16(identify_data + 62,0x07);
2042 put_le16(identify_data + 63,0x07);
2043 put_le16(identify_data + 88,0x3f | (1 << (val + 8)));
2048 s->status = READY_STAT | SEEK_STAT;
2049 ide_set_irq(s->bus);
2056 case WIN_FLUSH_CACHE:
2057 case WIN_FLUSH_CACHE_EXT:
2062 case WIN_STANDBYNOW1:
2063 case WIN_STANDBYNOW2:
2064 case WIN_IDLEIMMEDIATE:
2065 case CFA_IDLEIMMEDIATE:
2070 s->status = READY_STAT;
2071 ide_set_irq(s->bus);
2074 if(s->drive_kind == IDE_CD)
2076 /* XXX: Check that seek is within bounds */
2077 s->status = READY_STAT | SEEK_STAT;
2078 ide_set_irq(s->bus);
2080 /* ATAPI commands */
2082 if (s->drive_kind == IDE_CD) {
2083 ide_atapi_identify(s);
2084 s->status = READY_STAT | SEEK_STAT;
2085 ide_transfer_start(s, s->io_buffer, 512, ide_transfer_stop);
2087 ide_abort_command(s);
2089 ide_set_irq(s->bus);
2092 ide_set_signature(s);
2093 if (s->drive_kind == IDE_CD)
2094 s->status = 0; /* ATAPI spec (v6) section 9.10 defines packet
2095 * devices to return a clear status register
2096 * with READY_STAT *not* set. */
2098 s->status = READY_STAT | SEEK_STAT;
2099 s->error = 0x01; /* Device 0 passed, Device 1 passed or not
2102 ide_set_irq(s->bus);
2105 if (s->drive_kind != IDE_CD)
2107 ide_set_signature(s);
2108 s->status = 0x00; /* NOTE: READY is _not_ set */
2112 if (s->drive_kind != IDE_CD)
2114 /* overlapping commands not supported */
2115 if (s->feature & 0x02)
2117 s->status = READY_STAT | SEEK_STAT;
2118 s->atapi_dma = s->feature & 1;
2120 ide_transfer_start(s, s->io_buffer, ATAPI_PACKET_SIZE,
2123 /* CF-ATA commands */
2124 case CFA_REQ_EXT_ERROR_CODE:
2125 if (s->drive_kind != IDE_CFATA)
2127 s->error = 0x09; /* miscellaneous error */
2128 s->status = READY_STAT | SEEK_STAT;
2129 ide_set_irq(s->bus);
2131 case CFA_ERASE_SECTORS:
2132 case CFA_WEAR_LEVEL:
2133 if (s->drive_kind != IDE_CFATA)
2135 if (val == CFA_WEAR_LEVEL)
2137 if (val == CFA_ERASE_SECTORS)
2138 s->media_changed = 1;
2140 s->status = READY_STAT | SEEK_STAT;
2141 ide_set_irq(s->bus);
2143 case CFA_TRANSLATE_SECTOR:
2144 if (s->drive_kind != IDE_CFATA)
2147 s->status = READY_STAT | SEEK_STAT;
2148 memset(s->io_buffer, 0, 0x200);
2149 s->io_buffer[0x00] = s->hcyl; /* Cyl MSB */
2150 s->io_buffer[0x01] = s->lcyl; /* Cyl LSB */
2151 s->io_buffer[0x02] = s->select; /* Head */
2152 s->io_buffer[0x03] = s->sector; /* Sector */
2153 s->io_buffer[0x04] = ide_get_sector(s) >> 16; /* LBA MSB */
2154 s->io_buffer[0x05] = ide_get_sector(s) >> 8; /* LBA */
2155 s->io_buffer[0x06] = ide_get_sector(s) >> 0; /* LBA LSB */
2156 s->io_buffer[0x13] = 0x00; /* Erase flag */
2157 s->io_buffer[0x18] = 0x00; /* Hot count */
2158 s->io_buffer[0x19] = 0x00; /* Hot count */
2159 s->io_buffer[0x1a] = 0x01; /* Hot count */
2160 ide_transfer_start(s, s->io_buffer, 0x200, ide_transfer_stop);
2161 ide_set_irq(s->bus);
2163 case CFA_ACCESS_METADATA_STORAGE:
2164 if (s->drive_kind != IDE_CFATA)
2166 switch (s->feature) {
2167 case 0x02: /* Inquiry Metadata Storage */
2168 ide_cfata_metadata_inquiry(s);
2170 case 0x03: /* Read Metadata Storage */
2171 ide_cfata_metadata_read(s);
2173 case 0x04: /* Write Metadata Storage */
2174 ide_cfata_metadata_write(s);
2179 ide_transfer_start(s, s->io_buffer, 0x200, ide_transfer_stop);
2180 s->status = 0x00; /* NOTE: READY is _not_ set */
2181 ide_set_irq(s->bus);
2183 case IBM_SENSE_CONDITION:
2184 if (s->drive_kind != IDE_CFATA)
2186 switch (s->feature) {
2187 case 0x01: /* sense temperature in device */
2188 s->nsector = 0x50; /* +20 C */
2193 s->status = READY_STAT | SEEK_STAT;
2194 ide_set_irq(s->bus);
2198 if (s->drive_kind == IDE_CD)
2200 if (s->hcyl != 0xc2 || s->lcyl != 0x4f)
2202 if (!s->smart_enabled && s->feature != SMART_ENABLE)
2204 switch (s->feature) {
2206 s->smart_enabled = 0;
2207 s->status = READY_STAT | SEEK_STAT;
2208 ide_set_irq(s->bus);
2211 s->smart_enabled = 1;
2212 s->status = READY_STAT | SEEK_STAT;
2213 ide_set_irq(s->bus);
2215 case SMART_ATTR_AUTOSAVE:
2216 switch (s->sector) {
2218 s->smart_autosave = 0;
2221 s->smart_autosave = 1;
2226 s->status = READY_STAT | SEEK_STAT;
2227 ide_set_irq(s->bus);
2230 if (!s->smart_errors) {
2237 s->status = READY_STAT | SEEK_STAT;
2238 ide_set_irq(s->bus);
2240 case SMART_READ_THRESH:
2241 memset(s->io_buffer, 0, 0x200);
2242 s->io_buffer[0] = 0x01; /* smart struct version */
2243 for (n=0; n<30; n++) {
2244 if (smart_attributes[n][0] == 0)
2246 s->io_buffer[2+0+(n*12)] = smart_attributes[n][0];
2247 s->io_buffer[2+1+(n*12)] = smart_attributes[n][4];
2249 for (n=0; n<511; n++) /* checksum */
2250 s->io_buffer[511] += s->io_buffer[n];
2251 s->io_buffer[511] = 0x100 - s->io_buffer[511];
2252 s->status = READY_STAT | SEEK_STAT;
2253 ide_transfer_start(s, s->io_buffer, 0x200, ide_transfer_stop);
2254 ide_set_irq(s->bus);
2256 case SMART_READ_DATA:
2257 memset(s->io_buffer, 0, 0x200);
2258 s->io_buffer[0] = 0x01; /* smart struct version */
2259 for (n=0; n<30; n++) {
2260 if (smart_attributes[n][0] == 0)
2262 s->io_buffer[2+0+(n*12)] = smart_attributes[n][0];
2263 s->io_buffer[2+1+(n*12)] = smart_attributes[n][1];
2264 s->io_buffer[2+3+(n*12)] = smart_attributes[n][2];
2265 s->io_buffer[2+4+(n*12)] = smart_attributes[n][3];
2267 s->io_buffer[362] = 0x02 | (s->smart_autosave?0x80:0x00);
2268 if (s->smart_selftest_count == 0) {
2269 s->io_buffer[363] = 0;
2272 s->smart_selftest_data[3 +
2273 (s->smart_selftest_count - 1) *
2276 s->io_buffer[364] = 0x20;
2277 s->io_buffer[365] = 0x01;
2278 /* offline data collection capacity: execute + self-test*/
2279 s->io_buffer[367] = (1<<4 | 1<<3 | 1);
2280 s->io_buffer[368] = 0x03; /* smart capability (1) */
2281 s->io_buffer[369] = 0x00; /* smart capability (2) */
2282 s->io_buffer[370] = 0x01; /* error logging supported */
2283 s->io_buffer[372] = 0x02; /* minutes for poll short test */
2284 s->io_buffer[373] = 0x36; /* minutes for poll ext test */
2285 s->io_buffer[374] = 0x01; /* minutes for poll conveyance */
2287 for (n=0; n<511; n++)
2288 s->io_buffer[511] += s->io_buffer[n];
2289 s->io_buffer[511] = 0x100 - s->io_buffer[511];
2290 s->status = READY_STAT | SEEK_STAT;
2291 ide_transfer_start(s, s->io_buffer, 0x200, ide_transfer_stop);
2292 ide_set_irq(s->bus);
2294 case SMART_READ_LOG:
2295 switch (s->sector) {
2296 case 0x01: /* summary smart error log */
2297 memset(s->io_buffer, 0, 0x200);
2298 s->io_buffer[0] = 0x01;
2299 s->io_buffer[1] = 0x00; /* no error entries */
2300 s->io_buffer[452] = s->smart_errors & 0xff;
2301 s->io_buffer[453] = (s->smart_errors & 0xff00) >> 8;
2303 for (n=0; n<511; n++)
2304 s->io_buffer[511] += s->io_buffer[n];
2305 s->io_buffer[511] = 0x100 - s->io_buffer[511];
2307 case 0x06: /* smart self test log */
2308 memset(s->io_buffer, 0, 0x200);
2309 s->io_buffer[0] = 0x01;
2310 if (s->smart_selftest_count == 0) {
2311 s->io_buffer[508] = 0;
2313 s->io_buffer[508] = s->smart_selftest_count;
2314 for (n=2; n<506; n++)
2315 s->io_buffer[n] = s->smart_selftest_data[n];
2317 for (n=0; n<511; n++)
2318 s->io_buffer[511] += s->io_buffer[n];
2319 s->io_buffer[511] = 0x100 - s->io_buffer[511];
2324 s->status = READY_STAT | SEEK_STAT;
2325 ide_transfer_start(s, s->io_buffer, 0x200, ide_transfer_stop);
2326 ide_set_irq(s->bus);
2328 case SMART_EXECUTE_OFFLINE:
2329 switch (s->sector) {
2330 case 0: /* off-line routine */
2331 case 1: /* short self test */
2332 case 2: /* extended self test */
2333 s->smart_selftest_count++;
2334 if(s->smart_selftest_count > 21)
2335 s->smart_selftest_count = 0;
2336 n = 2 + (s->smart_selftest_count - 1) * 24;
2337 s->smart_selftest_data[n] = s->sector;
2338 s->smart_selftest_data[n+1] = 0x00; /* OK and finished */
2339 s->smart_selftest_data[n+2] = 0x34; /* hour count lsb */
2340 s->smart_selftest_data[n+3] = 0x12; /* hour count msb */
2341 s->status = READY_STAT | SEEK_STAT;
2342 ide_set_irq(s->bus);
2354 ide_abort_command(s);
2355 ide_set_irq(s->bus);
2361 uint32_t ide_ioport_read(void *opaque, uint32_t addr1)
2363 IDEBus *bus = opaque;
2364 IDEState *s = idebus_active_if(bus);
2369 /* FIXME: HOB readback uses bit 7, but it's always set right now */
2370 //hob = s->select & (1 << 7);
2377 if ((!bus->ifs[0].bs && !bus->ifs[1].bs) ||
2378 (s != bus->ifs && !s->bs))
2383 ret = s->hob_feature;
2386 if (!bus->ifs[0].bs && !bus->ifs[1].bs)
2389 ret = s->nsector & 0xff;
2391 ret = s->hob_nsector;
2394 if (!bus->ifs[0].bs && !bus->ifs[1].bs)
2399 ret = s->hob_sector;
2402 if (!bus->ifs[0].bs && !bus->ifs[1].bs)
2410 if (!bus->ifs[0].bs && !bus->ifs[1].bs)
2418 if (!bus->ifs[0].bs && !bus->ifs[1].bs)
2425 if ((!bus->ifs[0].bs && !bus->ifs[1].bs) ||
2426 (s != bus->ifs && !s->bs))
2430 qemu_irq_lower(bus->irq);
2434 printf("ide: read addr=0x%x val=%02x\n", addr1, ret);
2439 uint32_t ide_status_read(void *opaque, uint32_t addr)
2441 IDEBus *bus = opaque;
2442 IDEState *s = idebus_active_if(bus);
2445 if ((!bus->ifs[0].bs && !bus->ifs[1].bs) ||
2446 (s != bus->ifs && !s->bs))
2451 printf("ide: read status addr=0x%x val=%02x\n", addr, ret);
2456 void ide_cmd_write(void *opaque, uint32_t addr, uint32_t val)
2458 IDEBus *bus = opaque;
2463 printf("ide: write control addr=0x%x val=%02x\n", addr, val);
2465 /* common for both drives */
2466 if (!(bus->cmd & IDE_CMD_RESET) &&
2467 (val & IDE_CMD_RESET)) {
2468 /* reset low to high */
2469 for(i = 0;i < 2; i++) {
2471 s->status = BUSY_STAT | SEEK_STAT;
2474 } else if ((bus->cmd & IDE_CMD_RESET) &&
2475 !(val & IDE_CMD_RESET)) {
2477 for(i = 0;i < 2; i++) {
2479 if (s->drive_kind == IDE_CD)
2480 s->status = 0x00; /* NOTE: READY is _not_ set */
2482 s->status = READY_STAT | SEEK_STAT;
2483 ide_set_signature(s);
2490 void ide_data_writew(void *opaque, uint32_t addr, uint32_t val)
2492 IDEBus *bus = opaque;
2493 IDEState *s = idebus_active_if(bus);
2496 /* PIO data access allowed only when DRQ bit is set */
2497 if (!(s->status & DRQ_STAT))
2501 *(uint16_t *)p = le16_to_cpu(val);
2504 if (p >= s->data_end)
2505 s->end_transfer_func(s);
2508 uint32_t ide_data_readw(void *opaque, uint32_t addr)
2510 IDEBus *bus = opaque;
2511 IDEState *s = idebus_active_if(bus);
2515 /* PIO data access allowed only when DRQ bit is set */
2516 if (!(s->status & DRQ_STAT))
2520 ret = cpu_to_le16(*(uint16_t *)p);
2523 if (p >= s->data_end)
2524 s->end_transfer_func(s);
2528 void ide_data_writel(void *opaque, uint32_t addr, uint32_t val)
2530 IDEBus *bus = opaque;
2531 IDEState *s = idebus_active_if(bus);
2534 /* PIO data access allowed only when DRQ bit is set */
2535 if (!(s->status & DRQ_STAT))
2539 *(uint32_t *)p = le32_to_cpu(val);
2542 if (p >= s->data_end)
2543 s->end_transfer_func(s);
2546 uint32_t ide_data_readl(void *opaque, uint32_t addr)
2548 IDEBus *bus = opaque;
2549 IDEState *s = idebus_active_if(bus);
2553 /* PIO data access allowed only when DRQ bit is set */
2554 if (!(s->status & DRQ_STAT))
2558 ret = cpu_to_le32(*(uint32_t *)p);
2561 if (p >= s->data_end)
2562 s->end_transfer_func(s);
2566 static void ide_dummy_transfer_stop(IDEState *s)
2568 s->data_ptr = s->io_buffer;
2569 s->data_end = s->io_buffer;
2570 s->io_buffer[0] = 0xff;
2571 s->io_buffer[1] = 0xff;
2572 s->io_buffer[2] = 0xff;
2573 s->io_buffer[3] = 0xff;
2576 static void ide_reset(IDEState *s)
2579 printf("ide: reset\n");
2581 if (s->drive_kind == IDE_CFATA)
2582 s->mult_sectors = 0;
2584 s->mult_sectors = MAX_MULT_SECTORS;
2601 s->status = READY_STAT | SEEK_STAT;
2605 /* ATAPI specific */
2608 s->cdrom_changed = 0;
2609 s->packet_transfer_size = 0;
2610 s->elementary_transfer_size = 0;
2611 s->io_buffer_index = 0;
2612 s->cd_sector_size = 0;
2615 s->io_buffer_size = 0;
2616 s->req_nb_sectors = 0;
2618 ide_set_signature(s);
2619 /* init the transfer handler so that 0xffff is returned on data
2621 s->end_transfer_func = ide_dummy_transfer_stop;
2622 ide_dummy_transfer_stop(s);
2623 s->media_changed = 0;
2626 void ide_bus_reset(IDEBus *bus)
2630 ide_reset(&bus->ifs[0]);
2631 ide_reset(&bus->ifs[1]);
2635 int ide_init_drive(IDEState *s, BlockDriverState *bs,
2636 const char *version, const char *serial)
2638 int cylinders, heads, secs;
2639 uint64_t nb_sectors;
2642 bdrv_get_geometry(bs, &nb_sectors);
2643 bdrv_guess_geometry(bs, &cylinders, &heads, &secs);
2644 if (cylinders < 1 || cylinders > 16383) {
2645 error_report("cyls must be between 1 and 16383");
2648 if (heads < 1 || heads > 16) {
2649 error_report("heads must be between 1 and 16");
2652 if (secs < 1 || secs > 63) {
2653 error_report("secs must be between 1 and 63");
2656 s->cylinders = cylinders;
2659 s->nb_sectors = nb_sectors;
2660 /* The SMART values should be preserved across power cycles
2662 s->smart_enabled = 1;
2663 s->smart_autosave = 1;
2664 s->smart_errors = 0;
2665 s->smart_selftest_count = 0;
2666 if (bdrv_get_type_hint(bs) == BDRV_TYPE_CDROM) {
2667 s->drive_kind = IDE_CD;
2668 bdrv_set_change_cb(bs, cdrom_change_cb, s);
2669 bs->buffer_alignment = 2048;
2671 if (!bdrv_is_inserted(s->bs)) {
2672 error_report("Device needs media, but drive is empty");
2675 if (bdrv_is_read_only(bs)) {
2676 error_report("Can't use a read-only drive");
2681 strncpy(s->drive_serial_str, serial, sizeof(s->drive_serial_str));
2683 snprintf(s->drive_serial_str, sizeof(s->drive_serial_str),
2684 "QM%05d", s->drive_serial);
2687 pstrcpy(s->version, sizeof(s->version), version);
2689 pstrcpy(s->version, sizeof(s->version), QEMU_VERSION);
2692 bdrv_set_removable(bs, s->drive_kind == IDE_CD);
2696 static void ide_init1(IDEBus *bus, int unit)
2698 static int drive_serial = 1;
2699 IDEState *s = &bus->ifs[unit];
2703 s->drive_serial = drive_serial++;
2704 /* we need at least 2k alignment for accessing CDROMs using O_DIRECT */
2705 s->io_buffer = qemu_memalign(2048, IDE_DMA_BUF_SECTORS*512 + 4);
2706 s->io_buffer_total_len = IDE_DMA_BUF_SECTORS*512 + 4;
2707 s->smart_selftest_data = qemu_blockalign(s->bs, 512);
2708 s->sector_write_timer = qemu_new_timer(vm_clock,
2709 ide_sector_write_timer_cb, s);
2712 void ide_init2(IDEBus *bus, qemu_irq irq)
2716 for(i = 0; i < 2; i++) {
2718 ide_reset(&bus->ifs[i]);
2723 /* TODO convert users to qdev and remove */
2724 void ide_init2_with_non_qdev_drives(IDEBus *bus, DriveInfo *hd0,
2725 DriveInfo *hd1, qemu_irq irq)
2730 for(i = 0; i < 2; i++) {
2731 dinfo = i == 0 ? hd0 : hd1;
2734 if (ide_init_drive(&bus->ifs[i], dinfo->bdrv, NULL,
2735 *dinfo->serial ? dinfo->serial : NULL) < 0) {
2736 error_report("Can't set up IDE drive %s", dinfo->id);
2740 ide_reset(&bus->ifs[i]);
2746 void ide_init_ioport(IDEBus *bus, int iobase, int iobase2)
2748 register_ioport_write(iobase, 8, 1, ide_ioport_write, bus);
2749 register_ioport_read(iobase, 8, 1, ide_ioport_read, bus);
2751 register_ioport_read(iobase2, 1, 1, ide_status_read, bus);
2752 register_ioport_write(iobase2, 1, 1, ide_cmd_write, bus);
2756 register_ioport_write(iobase, 2, 2, ide_data_writew, bus);
2757 register_ioport_read(iobase, 2, 2, ide_data_readw, bus);
2758 register_ioport_write(iobase, 4, 4, ide_data_writel, bus);
2759 register_ioport_read(iobase, 4, 4, ide_data_readl, bus);
2762 static bool is_identify_set(void *opaque, int version_id)
2764 IDEState *s = opaque;
2766 return s->identify_set != 0;
2769 static EndTransferFunc* transfer_end_table[] = {
2773 ide_atapi_cmd_reply_end,
2775 ide_dummy_transfer_stop,
2778 static int transfer_end_table_idx(EndTransferFunc *fn)
2782 for (i = 0; i < ARRAY_SIZE(transfer_end_table); i++)
2783 if (transfer_end_table[i] == fn)
2789 static int ide_drive_post_load(void *opaque, int version_id)
2791 IDEState *s = opaque;
2793 if (version_id < 3) {
2794 if (s->sense_key == SENSE_UNIT_ATTENTION &&
2795 s->asc == ASC_MEDIUM_MAY_HAVE_CHANGED) {
2796 s->cdrom_changed = 1;
2802 static int ide_drive_pio_post_load(void *opaque, int version_id)
2804 IDEState *s = opaque;
2806 if (s->end_transfer_fn_idx > ARRAY_SIZE(transfer_end_table)) {
2809 s->end_transfer_func = transfer_end_table[s->end_transfer_fn_idx];
2810 s->data_ptr = s->io_buffer + s->cur_io_buffer_offset;
2811 s->data_end = s->data_ptr + s->cur_io_buffer_len;
2816 static void ide_drive_pio_pre_save(void *opaque)
2818 IDEState *s = opaque;
2821 s->cur_io_buffer_offset = s->data_ptr - s->io_buffer;
2822 s->cur_io_buffer_len = s->data_end - s->data_ptr;
2824 idx = transfer_end_table_idx(s->end_transfer_func);
2826 fprintf(stderr, "%s: invalid end_transfer_func for DRQ_STAT\n",
2828 s->end_transfer_fn_idx = 2;
2830 s->end_transfer_fn_idx = idx;
2834 static bool ide_drive_pio_state_needed(void *opaque)
2836 IDEState *s = opaque;
2838 return (s->status & DRQ_STAT) != 0;
2841 const VMStateDescription vmstate_ide_drive_pio_state = {
2842 .name = "ide_drive/pio_state",
2844 .minimum_version_id = 1,
2845 .minimum_version_id_old = 1,
2846 .pre_save = ide_drive_pio_pre_save,
2847 .post_load = ide_drive_pio_post_load,
2848 .fields = (VMStateField []) {
2849 VMSTATE_INT32(req_nb_sectors, IDEState),
2850 VMSTATE_VARRAY_INT32(io_buffer, IDEState, io_buffer_total_len, 1,
2851 vmstate_info_uint8, uint8_t),
2852 VMSTATE_INT32(cur_io_buffer_offset, IDEState),
2853 VMSTATE_INT32(cur_io_buffer_len, IDEState),
2854 VMSTATE_UINT8(end_transfer_fn_idx, IDEState),
2855 VMSTATE_INT32(elementary_transfer_size, IDEState),
2856 VMSTATE_INT32(packet_transfer_size, IDEState),
2857 VMSTATE_END_OF_LIST()
2861 const VMStateDescription vmstate_ide_drive = {
2862 .name = "ide_drive",
2864 .minimum_version_id = 0,
2865 .minimum_version_id_old = 0,
2866 .post_load = ide_drive_post_load,
2867 .fields = (VMStateField []) {
2868 VMSTATE_INT32(mult_sectors, IDEState),
2869 VMSTATE_INT32(identify_set, IDEState),
2870 VMSTATE_BUFFER_TEST(identify_data, IDEState, is_identify_set),
2871 VMSTATE_UINT8(feature, IDEState),
2872 VMSTATE_UINT8(error, IDEState),
2873 VMSTATE_UINT32(nsector, IDEState),
2874 VMSTATE_UINT8(sector, IDEState),
2875 VMSTATE_UINT8(lcyl, IDEState),
2876 VMSTATE_UINT8(hcyl, IDEState),
2877 VMSTATE_UINT8(hob_feature, IDEState),
2878 VMSTATE_UINT8(hob_sector, IDEState),
2879 VMSTATE_UINT8(hob_nsector, IDEState),
2880 VMSTATE_UINT8(hob_lcyl, IDEState),
2881 VMSTATE_UINT8(hob_hcyl, IDEState),
2882 VMSTATE_UINT8(select, IDEState),
2883 VMSTATE_UINT8(status, IDEState),
2884 VMSTATE_UINT8(lba48, IDEState),
2885 VMSTATE_UINT8(sense_key, IDEState),
2886 VMSTATE_UINT8(asc, IDEState),
2887 VMSTATE_UINT8_V(cdrom_changed, IDEState, 3),
2888 VMSTATE_END_OF_LIST()
2890 .subsections = (VMStateSubsection []) {
2892 .vmsd = &vmstate_ide_drive_pio_state,
2893 .needed = ide_drive_pio_state_needed,
2900 const VMStateDescription vmstate_ide_bus = {
2903 .minimum_version_id = 1,
2904 .minimum_version_id_old = 1,
2905 .fields = (VMStateField []) {
2906 VMSTATE_UINT8(cmd, IDEBus),
2907 VMSTATE_UINT8(unit, IDEBus),
2908 VMSTATE_END_OF_LIST()
2912 /***********************************************************/
2913 /* PCI IDE definitions */
2915 static void ide_dma_start(IDEState *s, BlockDriverCompletionFunc *dma_cb)
2917 BMDMAState *bm = s->bus->bmdma;
2921 bm->dma_cb = dma_cb;
2922 bm->cur_prd_last = 0;
2923 bm->cur_prd_addr = 0;
2924 bm->cur_prd_len = 0;
2925 bm->sector_num = ide_get_sector(s);
2926 bm->nsector = s->nsector;
2927 if (bm->status & BM_STATUS_DMAING) {
2932 static void ide_dma_restart(IDEState *s, int is_read)
2934 BMDMAState *bm = s->bus->bmdma;
2935 ide_set_sector(s, bm->sector_num);
2936 s->io_buffer_index = 0;
2937 s->io_buffer_size = 0;
2938 s->nsector = bm->nsector;
2939 bm->cur_addr = bm->addr;
2942 bm->dma_cb = ide_read_dma_cb;
2944 bm->dma_cb = ide_write_dma_cb;
2947 ide_dma_start(s, bm->dma_cb);
2950 void ide_dma_cancel(BMDMAState *bm)
2952 if (bm->status & BM_STATUS_DMAING) {
2955 printf("aio_cancel\n");
2957 bdrv_aio_cancel(bm->aiocb);
2960 /* cancel DMA request */
2961 ide_dma_set_inactive(bm);
2965 void ide_dma_reset(BMDMAState *bm)
2968 printf("ide: dma_reset\n");
2975 bm->cur_prd_last = 0;
2976 bm->cur_prd_addr = 0;
2977 bm->cur_prd_len = 0;