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 /* These values were based on a Seagate ST3500418AS but have been modified
38 to make more sense in QEMU */
39 static const int smart_attributes
[][12] = {
40 /* id, flags, hflags, val, wrst, raw (6 bytes), threshold */
41 /* raw read error rate*/
42 { 0x01, 0x03, 0x00, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06},
44 { 0x03, 0x03, 0x00, 0x64, 0x64, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
45 /* start stop count */
46 { 0x04, 0x02, 0x00, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14},
47 /* remapped sectors */
48 { 0x05, 0x03, 0x00, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24},
50 { 0x09, 0x03, 0x00, 0x64, 0x64, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
51 /* power cycle count */
52 { 0x0c, 0x03, 0x00, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
53 /* airflow-temperature-celsius */
54 { 190, 0x03, 0x00, 0x45, 0x45, 0x1f, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x32},
56 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
59 static int ide_handle_rw_error(IDEState
*s
, int error
, int op
);
60 static void ide_dummy_transfer_stop(IDEState
*s
);
62 static void padstr(char *str
, const char *src
, int len
)
65 for(i
= 0; i
< len
; i
++) {
74 static void put_le16(uint16_t *p
, unsigned int v
)
79 static void ide_identify(IDEState
*s
)
83 IDEDevice
*dev
= s
->unit
? s
->bus
->slave
: s
->bus
->master
;
85 if (s
->identify_set
) {
86 memcpy(s
->io_buffer
, s
->identify_data
, sizeof(s
->identify_data
));
90 memset(s
->io_buffer
, 0, 512);
91 p
= (uint16_t *)s
->io_buffer
;
92 put_le16(p
+ 0, 0x0040);
93 put_le16(p
+ 1, s
->cylinders
);
94 put_le16(p
+ 3, s
->heads
);
95 put_le16(p
+ 4, 512 * s
->sectors
); /* XXX: retired, remove ? */
96 put_le16(p
+ 5, 512); /* XXX: retired, remove ? */
97 put_le16(p
+ 6, s
->sectors
);
98 padstr((char *)(p
+ 10), s
->drive_serial_str
, 20); /* serial number */
99 put_le16(p
+ 20, 3); /* XXX: retired, remove ? */
100 put_le16(p
+ 21, 512); /* cache size in sectors */
101 put_le16(p
+ 22, 4); /* ecc bytes */
102 padstr((char *)(p
+ 23), s
->version
, 8); /* firmware version */
103 padstr((char *)(p
+ 27), s
->drive_model_str
, 40); /* model */
104 #if MAX_MULT_SECTORS > 1
105 put_le16(p
+ 47, 0x8000 | MAX_MULT_SECTORS
);
107 put_le16(p
+ 48, 1); /* dword I/O */
108 put_le16(p
+ 49, (1 << 11) | (1 << 9) | (1 << 8)); /* DMA and LBA supported */
109 put_le16(p
+ 51, 0x200); /* PIO transfer cycle */
110 put_le16(p
+ 52, 0x200); /* DMA transfer cycle */
111 put_le16(p
+ 53, 1 | (1 << 1) | (1 << 2)); /* words 54-58,64-70,88 are valid */
112 put_le16(p
+ 54, s
->cylinders
);
113 put_le16(p
+ 55, s
->heads
);
114 put_le16(p
+ 56, s
->sectors
);
115 oldsize
= s
->cylinders
* s
->heads
* s
->sectors
;
116 put_le16(p
+ 57, oldsize
);
117 put_le16(p
+ 58, oldsize
>> 16);
119 put_le16(p
+ 59, 0x100 | s
->mult_sectors
);
120 put_le16(p
+ 60, s
->nb_sectors
);
121 put_le16(p
+ 61, s
->nb_sectors
>> 16);
122 put_le16(p
+ 62, 0x07); /* single word dma0-2 supported */
123 put_le16(p
+ 63, 0x07); /* mdma0-2 supported */
124 put_le16(p
+ 64, 0x03); /* pio3-4 supported */
125 put_le16(p
+ 65, 120);
126 put_le16(p
+ 66, 120);
127 put_le16(p
+ 67, 120);
128 put_le16(p
+ 68, 120);
129 if (dev
&& dev
->conf
.discard_granularity
) {
130 put_le16(p
+ 69, (1 << 14)); /* determinate TRIM behavior */
134 put_le16(p
+ 75, s
->ncq_queues
- 1);
136 put_le16(p
+ 76, (1 << 8));
139 put_le16(p
+ 80, 0xf0); /* ata3 -> ata6 supported */
140 put_le16(p
+ 81, 0x16); /* conforms to ata5 */
141 /* 14=NOP supported, 5=WCACHE supported, 0=SMART supported */
142 put_le16(p
+ 82, (1 << 14) | (1 << 5) | 1);
143 /* 13=flush_cache_ext,12=flush_cache,10=lba48 */
144 put_le16(p
+ 83, (1 << 14) | (1 << 13) | (1 <<12) | (1 << 10));
145 /* 14=set to 1, 8=has WWN, 1=SMART self test, 0=SMART error logging */
147 put_le16(p
+ 84, (1 << 14) | (1 << 8) | 0);
149 put_le16(p
+ 84, (1 << 14) | 0);
151 /* 14 = NOP supported, 5=WCACHE enabled, 0=SMART feature set enabled */
152 if (bdrv_enable_write_cache(s
->bs
))
153 put_le16(p
+ 85, (1 << 14) | (1 << 5) | 1);
155 put_le16(p
+ 85, (1 << 14) | 1);
156 /* 13=flush_cache_ext,12=flush_cache,10=lba48 */
157 put_le16(p
+ 86, (1 << 13) | (1 <<12) | (1 << 10));
158 /* 14=set to 1, 8=has WWN, 1=SMART self test, 0=SMART error logging */
160 put_le16(p
+ 87, (1 << 14) | (1 << 8) | 0);
162 put_le16(p
+ 87, (1 << 14) | 0);
164 put_le16(p
+ 88, 0x3f | (1 << 13)); /* udma5 set and supported */
165 put_le16(p
+ 93, 1 | (1 << 14) | 0x2000);
166 put_le16(p
+ 100, s
->nb_sectors
);
167 put_le16(p
+ 101, s
->nb_sectors
>> 16);
168 put_le16(p
+ 102, s
->nb_sectors
>> 32);
169 put_le16(p
+ 103, s
->nb_sectors
>> 48);
171 if (dev
&& dev
->conf
.physical_block_size
)
172 put_le16(p
+ 106, 0x6000 | get_physical_block_exp(&dev
->conf
));
174 /* LE 16-bit words 111-108 contain 64-bit World Wide Name */
175 put_le16(p
+ 108, s
->wwn
>> 48);
176 put_le16(p
+ 109, s
->wwn
>> 32);
177 put_le16(p
+ 110, s
->wwn
>> 16);
178 put_le16(p
+ 111, s
->wwn
);
180 if (dev
&& dev
->conf
.discard_granularity
) {
181 put_le16(p
+ 169, 1); /* TRIM support */
184 memcpy(s
->identify_data
, p
, sizeof(s
->identify_data
));
188 static void ide_atapi_identify(IDEState
*s
)
192 if (s
->identify_set
) {
193 memcpy(s
->io_buffer
, s
->identify_data
, sizeof(s
->identify_data
));
197 memset(s
->io_buffer
, 0, 512);
198 p
= (uint16_t *)s
->io_buffer
;
199 /* Removable CDROM, 50us response, 12 byte packets */
200 put_le16(p
+ 0, (2 << 14) | (5 << 8) | (1 << 7) | (2 << 5) | (0 << 0));
201 padstr((char *)(p
+ 10), s
->drive_serial_str
, 20); /* serial number */
202 put_le16(p
+ 20, 3); /* buffer type */
203 put_le16(p
+ 21, 512); /* cache size in sectors */
204 put_le16(p
+ 22, 4); /* ecc bytes */
205 padstr((char *)(p
+ 23), s
->version
, 8); /* firmware version */
206 padstr((char *)(p
+ 27), s
->drive_model_str
, 40); /* model */
207 put_le16(p
+ 48, 1); /* dword I/O (XXX: should not be set on CDROM) */
209 put_le16(p
+ 49, 1 << 9 | 1 << 8); /* DMA and LBA supported */
210 put_le16(p
+ 53, 7); /* words 64-70, 54-58, 88 valid */
211 put_le16(p
+ 62, 7); /* single word dma0-2 supported */
212 put_le16(p
+ 63, 7); /* mdma0-2 supported */
214 put_le16(p
+ 49, 1 << 9); /* LBA supported, no DMA */
215 put_le16(p
+ 53, 3); /* words 64-70, 54-58 valid */
216 put_le16(p
+ 63, 0x103); /* DMA modes XXX: may be incorrect */
218 put_le16(p
+ 64, 3); /* pio3-4 supported */
219 put_le16(p
+ 65, 0xb4); /* minimum DMA multiword tx cycle time */
220 put_le16(p
+ 66, 0xb4); /* recommended DMA multiword tx cycle time */
221 put_le16(p
+ 67, 0x12c); /* minimum PIO cycle time without flow control */
222 put_le16(p
+ 68, 0xb4); /* minimum PIO cycle time with IORDY flow control */
224 put_le16(p
+ 71, 30); /* in ns */
225 put_le16(p
+ 72, 30); /* in ns */
228 put_le16(p
+ 75, s
->ncq_queues
- 1);
230 put_le16(p
+ 76, (1 << 8));
233 put_le16(p
+ 80, 0x1e); /* support up to ATA/ATAPI-4 */
235 put_le16(p
+ 88, 0x3f | (1 << 13)); /* udma5 set and supported */
237 memcpy(s
->identify_data
, p
, sizeof(s
->identify_data
));
241 static void ide_cfata_identify(IDEState
*s
)
246 p
= (uint16_t *) s
->identify_data
;
250 memset(p
, 0, sizeof(s
->identify_data
));
252 cur_sec
= s
->cylinders
* s
->heads
* s
->sectors
;
254 put_le16(p
+ 0, 0x848a); /* CF Storage Card signature */
255 put_le16(p
+ 1, s
->cylinders
); /* Default cylinders */
256 put_le16(p
+ 3, s
->heads
); /* Default heads */
257 put_le16(p
+ 6, s
->sectors
); /* Default sectors per track */
258 put_le16(p
+ 7, s
->nb_sectors
>> 16); /* Sectors per card */
259 put_le16(p
+ 8, s
->nb_sectors
); /* Sectors per card */
260 padstr((char *)(p
+ 10), s
->drive_serial_str
, 20); /* serial number */
261 put_le16(p
+ 22, 0x0004); /* ECC bytes */
262 padstr((char *) (p
+ 23), s
->version
, 8); /* Firmware Revision */
263 padstr((char *) (p
+ 27), s
->drive_model_str
, 40);/* Model number */
264 #if MAX_MULT_SECTORS > 1
265 put_le16(p
+ 47, 0x8000 | MAX_MULT_SECTORS
);
267 put_le16(p
+ 47, 0x0000);
269 put_le16(p
+ 49, 0x0f00); /* Capabilities */
270 put_le16(p
+ 51, 0x0002); /* PIO cycle timing mode */
271 put_le16(p
+ 52, 0x0001); /* DMA cycle timing mode */
272 put_le16(p
+ 53, 0x0003); /* Translation params valid */
273 put_le16(p
+ 54, s
->cylinders
); /* Current cylinders */
274 put_le16(p
+ 55, s
->heads
); /* Current heads */
275 put_le16(p
+ 56, s
->sectors
); /* Current sectors */
276 put_le16(p
+ 57, cur_sec
); /* Current capacity */
277 put_le16(p
+ 58, cur_sec
>> 16); /* Current capacity */
278 if (s
->mult_sectors
) /* Multiple sector setting */
279 put_le16(p
+ 59, 0x100 | s
->mult_sectors
);
280 put_le16(p
+ 60, s
->nb_sectors
); /* Total LBA sectors */
281 put_le16(p
+ 61, s
->nb_sectors
>> 16); /* Total LBA sectors */
282 put_le16(p
+ 63, 0x0203); /* Multiword DMA capability */
283 put_le16(p
+ 64, 0x0001); /* Flow Control PIO support */
284 put_le16(p
+ 65, 0x0096); /* Min. Multiword DMA cycle */
285 put_le16(p
+ 66, 0x0096); /* Rec. Multiword DMA cycle */
286 put_le16(p
+ 68, 0x00b4); /* Min. PIO cycle time */
287 put_le16(p
+ 82, 0x400c); /* Command Set supported */
288 put_le16(p
+ 83, 0x7068); /* Command Set supported */
289 put_le16(p
+ 84, 0x4000); /* Features supported */
290 put_le16(p
+ 85, 0x000c); /* Command Set enabled */
291 put_le16(p
+ 86, 0x7044); /* Command Set enabled */
292 put_le16(p
+ 87, 0x4000); /* Features enabled */
293 put_le16(p
+ 91, 0x4060); /* Current APM level */
294 put_le16(p
+ 129, 0x0002); /* Current features option */
295 put_le16(p
+ 130, 0x0005); /* Reassigned sectors */
296 put_le16(p
+ 131, 0x0001); /* Initial power mode */
297 put_le16(p
+ 132, 0x0000); /* User signature */
298 put_le16(p
+ 160, 0x8100); /* Power requirement */
299 put_le16(p
+ 161, 0x8001); /* CF command set */
304 memcpy(s
->io_buffer
, p
, sizeof(s
->identify_data
));
307 static void ide_set_signature(IDEState
*s
)
309 s
->select
&= 0xf0; /* clear head */
313 if (s
->drive_kind
== IDE_CD
) {
325 typedef struct TrimAIOCB
{
326 BlockDriverAIOCB common
;
331 static void trim_aio_cancel(BlockDriverAIOCB
*acb
)
333 TrimAIOCB
*iocb
= container_of(acb
, TrimAIOCB
, common
);
335 qemu_bh_delete(iocb
->bh
);
337 qemu_aio_release(iocb
);
340 static AIOPool trim_aio_pool
= {
341 .aiocb_size
= sizeof(TrimAIOCB
),
342 .cancel
= trim_aio_cancel
,
345 static void ide_trim_bh_cb(void *opaque
)
347 TrimAIOCB
*iocb
= opaque
;
349 iocb
->common
.cb(iocb
->common
.opaque
, iocb
->ret
);
351 qemu_bh_delete(iocb
->bh
);
354 qemu_aio_release(iocb
);
357 BlockDriverAIOCB
*ide_issue_trim(BlockDriverState
*bs
,
358 int64_t sector_num
, QEMUIOVector
*qiov
, int nb_sectors
,
359 BlockDriverCompletionFunc
*cb
, void *opaque
)
364 iocb
= qemu_aio_get(&trim_aio_pool
, bs
, cb
, opaque
);
365 iocb
->bh
= qemu_bh_new(ide_trim_bh_cb
, iocb
);
368 for (j
= 0; j
< qiov
->niov
; j
++) {
369 uint64_t *buffer
= qiov
->iov
[j
].iov_base
;
371 for (i
= 0; i
< qiov
->iov
[j
].iov_len
/ 8; i
++) {
372 /* 6-byte LBA + 2-byte range per entry */
373 uint64_t entry
= le64_to_cpu(buffer
[i
]);
374 uint64_t sector
= entry
& 0x0000ffffffffffffULL
;
375 uint16_t count
= entry
>> 48;
381 ret
= bdrv_discard(bs
, sector
, count
);
388 qemu_bh_schedule(iocb
->bh
);
390 return &iocb
->common
;
393 static inline void ide_abort_command(IDEState
*s
)
395 s
->status
= READY_STAT
| ERR_STAT
;
399 /* prepare data transfer and tell what to do after */
400 void ide_transfer_start(IDEState
*s
, uint8_t *buf
, int size
,
401 EndTransferFunc
*end_transfer_func
)
403 s
->end_transfer_func
= end_transfer_func
;
405 s
->data_end
= buf
+ size
;
406 if (!(s
->status
& ERR_STAT
)) {
407 s
->status
|= DRQ_STAT
;
409 s
->bus
->dma
->ops
->start_transfer(s
->bus
->dma
);
412 void ide_transfer_stop(IDEState
*s
)
414 s
->end_transfer_func
= ide_transfer_stop
;
415 s
->data_ptr
= s
->io_buffer
;
416 s
->data_end
= s
->io_buffer
;
417 s
->status
&= ~DRQ_STAT
;
420 int64_t ide_get_sector(IDEState
*s
)
423 if (s
->select
& 0x40) {
426 sector_num
= ((s
->select
& 0x0f) << 24) | (s
->hcyl
<< 16) |
427 (s
->lcyl
<< 8) | s
->sector
;
429 sector_num
= ((int64_t)s
->hob_hcyl
<< 40) |
430 ((int64_t) s
->hob_lcyl
<< 32) |
431 ((int64_t) s
->hob_sector
<< 24) |
432 ((int64_t) s
->hcyl
<< 16) |
433 ((int64_t) s
->lcyl
<< 8) | s
->sector
;
436 sector_num
= ((s
->hcyl
<< 8) | s
->lcyl
) * s
->heads
* s
->sectors
+
437 (s
->select
& 0x0f) * s
->sectors
+ (s
->sector
- 1);
442 void ide_set_sector(IDEState
*s
, int64_t sector_num
)
445 if (s
->select
& 0x40) {
447 s
->select
= (s
->select
& 0xf0) | (sector_num
>> 24);
448 s
->hcyl
= (sector_num
>> 16);
449 s
->lcyl
= (sector_num
>> 8);
450 s
->sector
= (sector_num
);
452 s
->sector
= sector_num
;
453 s
->lcyl
= sector_num
>> 8;
454 s
->hcyl
= sector_num
>> 16;
455 s
->hob_sector
= sector_num
>> 24;
456 s
->hob_lcyl
= sector_num
>> 32;
457 s
->hob_hcyl
= sector_num
>> 40;
460 cyl
= sector_num
/ (s
->heads
* s
->sectors
);
461 r
= sector_num
% (s
->heads
* s
->sectors
);
464 s
->select
= (s
->select
& 0xf0) | ((r
/ s
->sectors
) & 0x0f);
465 s
->sector
= (r
% s
->sectors
) + 1;
469 static void ide_rw_error(IDEState
*s
) {
470 ide_abort_command(s
);
474 void ide_sector_read(IDEState
*s
)
479 s
->status
= READY_STAT
| SEEK_STAT
;
480 s
->error
= 0; /* not needed by IDE spec, but needed by Windows */
481 sector_num
= ide_get_sector(s
);
484 /* no more sector to read from disk */
485 ide_transfer_stop(s
);
487 #if defined(DEBUG_IDE)
488 printf("read sector=%" PRId64
"\n", sector_num
);
490 if (n
> s
->req_nb_sectors
)
491 n
= s
->req_nb_sectors
;
493 bdrv_acct_start(s
->bs
, &s
->acct
, n
* BDRV_SECTOR_SIZE
, BDRV_ACCT_READ
);
494 ret
= bdrv_read(s
->bs
, sector_num
, s
->io_buffer
, n
);
495 bdrv_acct_done(s
->bs
, &s
->acct
);
497 if (ide_handle_rw_error(s
, -ret
,
498 BM_STATUS_PIO_RETRY
| BM_STATUS_RETRY_READ
))
503 ide_transfer_start(s
, s
->io_buffer
, 512 * n
, ide_sector_read
);
505 ide_set_sector(s
, sector_num
+ n
);
510 static void dma_buf_commit(IDEState
*s
)
512 qemu_sglist_destroy(&s
->sg
);
515 void ide_set_inactive(IDEState
*s
)
517 s
->bus
->dma
->aiocb
= NULL
;
518 s
->bus
->dma
->ops
->set_inactive(s
->bus
->dma
);
521 void ide_dma_error(IDEState
*s
)
523 ide_transfer_stop(s
);
525 s
->status
= READY_STAT
| ERR_STAT
;
530 static int ide_handle_rw_error(IDEState
*s
, int error
, int op
)
532 int is_read
= (op
& BM_STATUS_RETRY_READ
);
533 BlockErrorAction action
= bdrv_get_on_error(s
->bs
, is_read
);
535 if (action
== BLOCK_ERR_IGNORE
) {
536 bdrv_emit_qmp_error_event(s
->bs
, BDRV_ACTION_IGNORE
, is_read
);
540 if ((error
== ENOSPC
&& action
== BLOCK_ERR_STOP_ENOSPC
)
541 || action
== BLOCK_ERR_STOP_ANY
) {
542 s
->bus
->dma
->ops
->set_unit(s
->bus
->dma
, s
->unit
);
543 s
->bus
->error_status
= op
;
544 bdrv_emit_qmp_error_event(s
->bs
, BDRV_ACTION_STOP
, is_read
);
545 vm_stop(RUN_STATE_IO_ERROR
);
546 bdrv_iostatus_set_err(s
->bs
, error
);
548 if (op
& BM_STATUS_DMA_RETRY
) {
554 bdrv_emit_qmp_error_event(s
->bs
, BDRV_ACTION_REPORT
, is_read
);
560 void ide_dma_cb(void *opaque
, int ret
)
562 IDEState
*s
= opaque
;
567 int op
= BM_STATUS_DMA_RETRY
;
569 if (s
->dma_cmd
== IDE_DMA_READ
)
570 op
|= BM_STATUS_RETRY_READ
;
571 else if (s
->dma_cmd
== IDE_DMA_TRIM
)
572 op
|= BM_STATUS_RETRY_TRIM
;
574 if (ide_handle_rw_error(s
, -ret
, op
)) {
579 n
= s
->io_buffer_size
>> 9;
580 sector_num
= ide_get_sector(s
);
584 ide_set_sector(s
, sector_num
);
588 /* end of transfer ? */
589 if (s
->nsector
== 0) {
590 s
->status
= READY_STAT
| SEEK_STAT
;
595 /* launch next transfer */
597 s
->io_buffer_index
= 0;
598 s
->io_buffer_size
= n
* 512;
599 if (s
->bus
->dma
->ops
->prepare_buf(s
->bus
->dma
, ide_cmd_is_read(s
)) == 0) {
600 /* The PRDs were too short. Reset the Active bit, but don't raise an
606 printf("ide_dma_cb: sector_num=%" PRId64
" n=%d, cmd_cmd=%d\n",
607 sector_num
, n
, s
->dma_cmd
);
610 switch (s
->dma_cmd
) {
612 s
->bus
->dma
->aiocb
= dma_bdrv_read(s
->bs
, &s
->sg
, sector_num
,
616 s
->bus
->dma
->aiocb
= dma_bdrv_write(s
->bs
, &s
->sg
, sector_num
,
620 s
->bus
->dma
->aiocb
= dma_bdrv_io(s
->bs
, &s
->sg
, sector_num
,
621 ide_issue_trim
, ide_dma_cb
, s
, true);
627 if (s
->dma_cmd
== IDE_DMA_READ
|| s
->dma_cmd
== IDE_DMA_WRITE
) {
628 bdrv_acct_done(s
->bs
, &s
->acct
);
633 static void ide_sector_start_dma(IDEState
*s
, enum ide_dma_cmd dma_cmd
)
635 s
->status
= READY_STAT
| SEEK_STAT
| DRQ_STAT
| BUSY_STAT
;
636 s
->io_buffer_index
= 0;
637 s
->io_buffer_size
= 0;
638 s
->dma_cmd
= dma_cmd
;
642 bdrv_acct_start(s
->bs
, &s
->acct
, s
->nsector
* BDRV_SECTOR_SIZE
,
646 bdrv_acct_start(s
->bs
, &s
->acct
, s
->nsector
* BDRV_SECTOR_SIZE
,
653 s
->bus
->dma
->ops
->start_dma(s
->bus
->dma
, s
, ide_dma_cb
);
656 static void ide_sector_write_timer_cb(void *opaque
)
658 IDEState
*s
= opaque
;
662 void ide_sector_write(IDEState
*s
)
667 s
->status
= READY_STAT
| SEEK_STAT
;
668 sector_num
= ide_get_sector(s
);
669 #if defined(DEBUG_IDE)
670 printf("write sector=%" PRId64
"\n", sector_num
);
673 if (n
> s
->req_nb_sectors
)
674 n
= s
->req_nb_sectors
;
676 bdrv_acct_start(s
->bs
, &s
->acct
, n
* BDRV_SECTOR_SIZE
, BDRV_ACCT_READ
);
677 ret
= bdrv_write(s
->bs
, sector_num
, s
->io_buffer
, n
);
678 bdrv_acct_done(s
->bs
, &s
->acct
);
681 if (ide_handle_rw_error(s
, -ret
, BM_STATUS_PIO_RETRY
))
686 if (s
->nsector
== 0) {
687 /* no more sectors to write */
688 ide_transfer_stop(s
);
691 if (n1
> s
->req_nb_sectors
)
692 n1
= s
->req_nb_sectors
;
693 ide_transfer_start(s
, s
->io_buffer
, 512 * n1
, ide_sector_write
);
695 ide_set_sector(s
, sector_num
+ n
);
697 if (win2k_install_hack
&& ((++s
->irq_count
% 16) == 0)) {
698 /* It seems there is a bug in the Windows 2000 installer HDD
699 IDE driver which fills the disk with empty logs when the
700 IDE write IRQ comes too early. This hack tries to correct
701 that at the expense of slower write performances. Use this
702 option _only_ to install Windows 2000. You must disable it
704 qemu_mod_timer(s
->sector_write_timer
,
705 qemu_get_clock_ns(vm_clock
) + (get_ticks_per_sec() / 1000));
711 static void ide_flush_cb(void *opaque
, int ret
)
713 IDEState
*s
= opaque
;
716 /* XXX: What sector number to set here? */
717 if (ide_handle_rw_error(s
, -ret
, BM_STATUS_RETRY_FLUSH
)) {
722 bdrv_acct_done(s
->bs
, &s
->acct
);
723 s
->status
= READY_STAT
| SEEK_STAT
;
727 void ide_flush_cache(IDEState
*s
)
734 bdrv_acct_start(s
->bs
, &s
->acct
, 0, BDRV_ACCT_FLUSH
);
735 bdrv_aio_flush(s
->bs
, ide_flush_cb
, s
);
738 static void ide_cfata_metadata_inquiry(IDEState
*s
)
743 p
= (uint16_t *) s
->io_buffer
;
745 spd
= ((s
->mdata_size
- 1) >> 9) + 1;
747 put_le16(p
+ 0, 0x0001); /* Data format revision */
748 put_le16(p
+ 1, 0x0000); /* Media property: silicon */
749 put_le16(p
+ 2, s
->media_changed
); /* Media status */
750 put_le16(p
+ 3, s
->mdata_size
& 0xffff); /* Capacity in bytes (low) */
751 put_le16(p
+ 4, s
->mdata_size
>> 16); /* Capacity in bytes (high) */
752 put_le16(p
+ 5, spd
& 0xffff); /* Sectors per device (low) */
753 put_le16(p
+ 6, spd
>> 16); /* Sectors per device (high) */
756 static void ide_cfata_metadata_read(IDEState
*s
)
760 if (((s
->hcyl
<< 16) | s
->lcyl
) << 9 > s
->mdata_size
+ 2) {
761 s
->status
= ERR_STAT
;
766 p
= (uint16_t *) s
->io_buffer
;
769 put_le16(p
+ 0, s
->media_changed
); /* Media status */
770 memcpy(p
+ 1, s
->mdata_storage
+ (((s
->hcyl
<< 16) | s
->lcyl
) << 9),
771 MIN(MIN(s
->mdata_size
- (((s
->hcyl
<< 16) | s
->lcyl
) << 9),
772 s
->nsector
<< 9), 0x200 - 2));
775 static void ide_cfata_metadata_write(IDEState
*s
)
777 if (((s
->hcyl
<< 16) | s
->lcyl
) << 9 > s
->mdata_size
+ 2) {
778 s
->status
= ERR_STAT
;
783 s
->media_changed
= 0;
785 memcpy(s
->mdata_storage
+ (((s
->hcyl
<< 16) | s
->lcyl
) << 9),
787 MIN(MIN(s
->mdata_size
- (((s
->hcyl
<< 16) | s
->lcyl
) << 9),
788 s
->nsector
<< 9), 0x200 - 2));
791 /* called when the inserted state of the media has changed */
792 static void ide_cd_change_cb(void *opaque
, bool load
)
794 IDEState
*s
= opaque
;
797 s
->tray_open
= !load
;
798 bdrv_get_geometry(s
->bs
, &nb_sectors
);
799 s
->nb_sectors
= nb_sectors
;
802 * First indicate to the guest that a CD has been removed. That's
803 * done on the next command the guest sends us.
805 * Then we set UNIT_ATTENTION, by which the guest will
806 * detect a new CD in the drive. See ide_atapi_cmd() for details.
808 s
->cdrom_changed
= 1;
809 s
->events
.new_media
= true;
810 s
->events
.eject_request
= false;
814 static void ide_cd_eject_request_cb(void *opaque
, bool force
)
816 IDEState
*s
= opaque
;
818 s
->events
.eject_request
= true;
820 s
->tray_locked
= false;
825 static void ide_cmd_lba48_transform(IDEState
*s
, int lba48
)
829 /* handle the 'magic' 0 nsector count conversion here. to avoid
830 * fiddling with the rest of the read logic, we just store the
831 * full sector count in ->nsector and ignore ->hob_nsector from now
837 if (!s
->nsector
&& !s
->hob_nsector
)
841 int hi
= s
->hob_nsector
;
843 s
->nsector
= (hi
<< 8) | lo
;
848 static void ide_clear_hob(IDEBus
*bus
)
850 /* any write clears HOB high bit of device control register */
851 bus
->ifs
[0].select
&= ~(1 << 7);
852 bus
->ifs
[1].select
&= ~(1 << 7);
855 void ide_ioport_write(void *opaque
, uint32_t addr
, uint32_t val
)
857 IDEBus
*bus
= opaque
;
860 printf("IDE: write addr=0x%x val=0x%02x\n", addr
, val
);
865 /* ignore writes to command block while busy with previous command */
866 if (addr
!= 7 && (idebus_active_if(bus
)->status
& (BUSY_STAT
|DRQ_STAT
)))
874 /* NOTE: data is written to the two drives */
875 bus
->ifs
[0].hob_feature
= bus
->ifs
[0].feature
;
876 bus
->ifs
[1].hob_feature
= bus
->ifs
[1].feature
;
877 bus
->ifs
[0].feature
= val
;
878 bus
->ifs
[1].feature
= val
;
882 bus
->ifs
[0].hob_nsector
= bus
->ifs
[0].nsector
;
883 bus
->ifs
[1].hob_nsector
= bus
->ifs
[1].nsector
;
884 bus
->ifs
[0].nsector
= val
;
885 bus
->ifs
[1].nsector
= val
;
889 bus
->ifs
[0].hob_sector
= bus
->ifs
[0].sector
;
890 bus
->ifs
[1].hob_sector
= bus
->ifs
[1].sector
;
891 bus
->ifs
[0].sector
= val
;
892 bus
->ifs
[1].sector
= val
;
896 bus
->ifs
[0].hob_lcyl
= bus
->ifs
[0].lcyl
;
897 bus
->ifs
[1].hob_lcyl
= bus
->ifs
[1].lcyl
;
898 bus
->ifs
[0].lcyl
= val
;
899 bus
->ifs
[1].lcyl
= val
;
903 bus
->ifs
[0].hob_hcyl
= bus
->ifs
[0].hcyl
;
904 bus
->ifs
[1].hob_hcyl
= bus
->ifs
[1].hcyl
;
905 bus
->ifs
[0].hcyl
= val
;
906 bus
->ifs
[1].hcyl
= val
;
909 /* FIXME: HOB readback uses bit 7 */
910 bus
->ifs
[0].select
= (val
& ~0x10) | 0xa0;
911 bus
->ifs
[1].select
= (val
| 0x10) | 0xa0;
913 bus
->unit
= (val
>> 4) & 1;
918 ide_exec_cmd(bus
, val
);
923 #define HD_OK (1u << IDE_HD)
924 #define CD_OK (1u << IDE_CD)
925 #define CFA_OK (1u << IDE_CFATA)
926 #define HD_CFA_OK (HD_OK | CFA_OK)
927 #define ALL_OK (HD_OK | CD_OK | CFA_OK)
929 /* See ACS-2 T13/2015-D Table B.2 Command codes */
930 static const uint8_t ide_cmd_table
[0x100] = {
931 /* NOP not implemented, mandatory for CD */
932 [CFA_REQ_EXT_ERROR_CODE
] = CFA_OK
,
934 [WIN_DEVICE_RESET
] = CD_OK
,
935 [WIN_RECAL
] = HD_CFA_OK
,
937 [WIN_READ_ONCE
] = ALL_OK
,
938 [WIN_READ_EXT
] = HD_CFA_OK
,
939 [WIN_READDMA_EXT
] = HD_CFA_OK
,
940 [WIN_READ_NATIVE_MAX_EXT
] = HD_CFA_OK
,
941 [WIN_MULTREAD_EXT
] = HD_CFA_OK
,
942 [WIN_WRITE
] = HD_CFA_OK
,
943 [WIN_WRITE_ONCE
] = HD_CFA_OK
,
944 [WIN_WRITE_EXT
] = HD_CFA_OK
,
945 [WIN_WRITEDMA_EXT
] = HD_CFA_OK
,
946 [CFA_WRITE_SECT_WO_ERASE
] = CFA_OK
,
947 [WIN_MULTWRITE_EXT
] = HD_CFA_OK
,
948 [WIN_WRITE_VERIFY
] = HD_CFA_OK
,
949 [WIN_VERIFY
] = HD_CFA_OK
,
950 [WIN_VERIFY_ONCE
] = HD_CFA_OK
,
951 [WIN_VERIFY_EXT
] = HD_CFA_OK
,
952 [WIN_SEEK
] = HD_CFA_OK
,
953 [CFA_TRANSLATE_SECTOR
] = CFA_OK
,
954 [WIN_DIAGNOSE
] = ALL_OK
,
955 [WIN_SPECIFY
] = HD_CFA_OK
,
956 [WIN_STANDBYNOW2
] = ALL_OK
,
957 [WIN_IDLEIMMEDIATE2
] = ALL_OK
,
958 [WIN_STANDBY2
] = ALL_OK
,
959 [WIN_SETIDLE2
] = ALL_OK
,
960 [WIN_CHECKPOWERMODE2
] = ALL_OK
,
961 [WIN_SLEEPNOW2
] = ALL_OK
,
962 [WIN_PACKETCMD
] = CD_OK
,
963 [WIN_PIDENTIFY
] = CD_OK
,
964 [WIN_SMART
] = HD_CFA_OK
,
965 [CFA_ACCESS_METADATA_STORAGE
] = CFA_OK
,
966 [CFA_ERASE_SECTORS
] = CFA_OK
,
967 [WIN_MULTREAD
] = HD_CFA_OK
,
968 [WIN_MULTWRITE
] = HD_CFA_OK
,
969 [WIN_SETMULT
] = HD_CFA_OK
,
970 [WIN_READDMA
] = HD_CFA_OK
,
971 [WIN_READDMA_ONCE
] = HD_CFA_OK
,
972 [WIN_WRITEDMA
] = HD_CFA_OK
,
973 [WIN_WRITEDMA_ONCE
] = HD_CFA_OK
,
974 [CFA_WRITE_MULTI_WO_ERASE
] = CFA_OK
,
975 [WIN_STANDBYNOW1
] = ALL_OK
,
976 [WIN_IDLEIMMEDIATE
] = ALL_OK
,
977 [WIN_STANDBY
] = ALL_OK
,
978 [WIN_SETIDLE1
] = ALL_OK
,
979 [WIN_CHECKPOWERMODE1
] = ALL_OK
,
980 [WIN_SLEEPNOW1
] = ALL_OK
,
981 [WIN_FLUSH_CACHE
] = ALL_OK
,
982 [WIN_FLUSH_CACHE_EXT
] = HD_CFA_OK
,
983 [WIN_IDENTIFY
] = ALL_OK
,
984 [WIN_SETFEATURES
] = ALL_OK
,
985 [IBM_SENSE_CONDITION
] = CFA_OK
,
986 [CFA_WEAR_LEVEL
] = CFA_OK
,
987 [WIN_READ_NATIVE_MAX
] = ALL_OK
,
990 static bool ide_cmd_permitted(IDEState
*s
, uint32_t cmd
)
992 return cmd
< ARRAY_SIZE(ide_cmd_table
)
993 && (ide_cmd_table
[cmd
] & (1u << s
->drive_kind
));
996 void ide_exec_cmd(IDEBus
*bus
, uint32_t val
)
1002 #if defined(DEBUG_IDE)
1003 printf("ide: CMD=%02x\n", val
);
1005 s
= idebus_active_if(bus
);
1006 /* ignore commands to non existent slave */
1007 if (s
!= bus
->ifs
&& !s
->bs
)
1010 /* Only DEVICE RESET is allowed while BSY or/and DRQ are set */
1011 if ((s
->status
& (BUSY_STAT
|DRQ_STAT
)) && val
!= WIN_DEVICE_RESET
)
1014 if (!ide_cmd_permitted(s
, val
)) {
1020 switch (s
->feature
) {
1025 ide_sector_start_dma(s
, IDE_DMA_TRIM
);
1032 if (s
->bs
&& s
->drive_kind
!= IDE_CD
) {
1033 if (s
->drive_kind
!= IDE_CFATA
)
1036 ide_cfata_identify(s
);
1037 s
->status
= READY_STAT
| SEEK_STAT
;
1038 ide_transfer_start(s
, s
->io_buffer
, 512, ide_transfer_stop
);
1040 if (s
->drive_kind
== IDE_CD
) {
1041 ide_set_signature(s
);
1043 ide_abort_command(s
);
1045 ide_set_irq(s
->bus
);
1050 s
->status
= READY_STAT
| SEEK_STAT
;
1051 ide_set_irq(s
->bus
);
1054 if (s
->drive_kind
== IDE_CFATA
&& s
->nsector
== 0) {
1055 /* Disable Read and Write Multiple */
1056 s
->mult_sectors
= 0;
1057 s
->status
= READY_STAT
| SEEK_STAT
;
1058 } else if ((s
->nsector
& 0xff) != 0 &&
1059 ((s
->nsector
& 0xff) > MAX_MULT_SECTORS
||
1060 (s
->nsector
& (s
->nsector
- 1)) != 0)) {
1061 ide_abort_command(s
);
1063 s
->mult_sectors
= s
->nsector
& 0xff;
1064 s
->status
= READY_STAT
| SEEK_STAT
;
1066 ide_set_irq(s
->bus
);
1068 case WIN_VERIFY_EXT
:
1071 case WIN_VERIFY_ONCE
:
1072 /* do sector number check ? */
1073 ide_cmd_lba48_transform(s
, lba48
);
1074 s
->status
= READY_STAT
| SEEK_STAT
;
1075 ide_set_irq(s
->bus
);
1081 if (s
->drive_kind
== IDE_CD
) {
1082 ide_set_signature(s
); /* odd, but ATA4 8.27.5.2 requires it */
1088 ide_cmd_lba48_transform(s
, lba48
);
1089 s
->req_nb_sectors
= 1;
1095 case WIN_WRITE_ONCE
:
1096 case CFA_WRITE_SECT_WO_ERASE
:
1097 case WIN_WRITE_VERIFY
:
1101 ide_cmd_lba48_transform(s
, lba48
);
1103 s
->status
= SEEK_STAT
| READY_STAT
;
1104 s
->req_nb_sectors
= 1;
1105 ide_transfer_start(s
, s
->io_buffer
, 512, ide_sector_write
);
1106 s
->media_changed
= 1;
1108 case WIN_MULTREAD_EXT
:
1114 if (!s
->mult_sectors
) {
1117 ide_cmd_lba48_transform(s
, lba48
);
1118 s
->req_nb_sectors
= s
->mult_sectors
;
1121 case WIN_MULTWRITE_EXT
:
1124 case CFA_WRITE_MULTI_WO_ERASE
:
1128 if (!s
->mult_sectors
) {
1131 ide_cmd_lba48_transform(s
, lba48
);
1133 s
->status
= SEEK_STAT
| READY_STAT
;
1134 s
->req_nb_sectors
= s
->mult_sectors
;
1136 if (n
> s
->req_nb_sectors
)
1137 n
= s
->req_nb_sectors
;
1138 ide_transfer_start(s
, s
->io_buffer
, 512 * n
, ide_sector_write
);
1139 s
->media_changed
= 1;
1141 case WIN_READDMA_EXT
:
1144 case WIN_READDMA_ONCE
:
1148 ide_cmd_lba48_transform(s
, lba48
);
1149 ide_sector_start_dma(s
, IDE_DMA_READ
);
1151 case WIN_WRITEDMA_EXT
:
1154 case WIN_WRITEDMA_ONCE
:
1158 ide_cmd_lba48_transform(s
, lba48
);
1159 ide_sector_start_dma(s
, IDE_DMA_WRITE
);
1160 s
->media_changed
= 1;
1162 case WIN_READ_NATIVE_MAX_EXT
:
1164 case WIN_READ_NATIVE_MAX
:
1165 ide_cmd_lba48_transform(s
, lba48
);
1166 ide_set_sector(s
, s
->nb_sectors
- 1);
1167 s
->status
= READY_STAT
| SEEK_STAT
;
1168 ide_set_irq(s
->bus
);
1170 case WIN_CHECKPOWERMODE1
:
1171 case WIN_CHECKPOWERMODE2
:
1173 s
->nsector
= 0xff; /* device active or idle */
1174 s
->status
= READY_STAT
| SEEK_STAT
;
1175 ide_set_irq(s
->bus
);
1177 case WIN_SETFEATURES
:
1180 /* XXX: valid for CDROM ? */
1181 switch(s
->feature
) {
1182 case 0xcc: /* reverting to power-on defaults enable */
1183 case 0x66: /* reverting to power-on defaults disable */
1184 case 0x02: /* write cache enable */
1185 case 0x82: /* write cache disable */
1186 case 0xaa: /* read look-ahead enable */
1187 case 0x55: /* read look-ahead disable */
1188 case 0x05: /* set advanced power management mode */
1189 case 0x85: /* disable advanced power management mode */
1190 case 0x69: /* NOP */
1191 case 0x67: /* NOP */
1192 case 0x96: /* NOP */
1193 case 0x9a: /* NOP */
1194 case 0x42: /* enable Automatic Acoustic Mode */
1195 case 0xc2: /* disable Automatic Acoustic Mode */
1196 s
->status
= READY_STAT
| SEEK_STAT
;
1197 ide_set_irq(s
->bus
);
1199 case 0x03: { /* set transfer mode */
1200 uint8_t val
= s
->nsector
& 0x07;
1201 uint16_t *identify_data
= (uint16_t *)s
->identify_data
;
1203 switch (s
->nsector
>> 3) {
1204 case 0x00: /* pio default */
1205 case 0x01: /* pio mode */
1206 put_le16(identify_data
+ 62,0x07);
1207 put_le16(identify_data
+ 63,0x07);
1208 put_le16(identify_data
+ 88,0x3f);
1210 case 0x02: /* sigle word dma mode*/
1211 put_le16(identify_data
+ 62,0x07 | (1 << (val
+ 8)));
1212 put_le16(identify_data
+ 63,0x07);
1213 put_le16(identify_data
+ 88,0x3f);
1215 case 0x04: /* mdma mode */
1216 put_le16(identify_data
+ 62,0x07);
1217 put_le16(identify_data
+ 63,0x07 | (1 << (val
+ 8)));
1218 put_le16(identify_data
+ 88,0x3f);
1220 case 0x08: /* udma mode */
1221 put_le16(identify_data
+ 62,0x07);
1222 put_le16(identify_data
+ 63,0x07);
1223 put_le16(identify_data
+ 88,0x3f | (1 << (val
+ 8)));
1228 s
->status
= READY_STAT
| SEEK_STAT
;
1229 ide_set_irq(s
->bus
);
1236 case WIN_FLUSH_CACHE
:
1237 case WIN_FLUSH_CACHE_EXT
:
1242 case WIN_STANDBYNOW1
:
1243 case WIN_STANDBYNOW2
:
1244 case WIN_IDLEIMMEDIATE
:
1245 case WIN_IDLEIMMEDIATE2
:
1250 s
->status
= READY_STAT
;
1251 ide_set_irq(s
->bus
);
1254 /* XXX: Check that seek is within bounds */
1255 s
->status
= READY_STAT
| SEEK_STAT
;
1256 ide_set_irq(s
->bus
);
1258 /* ATAPI commands */
1260 ide_atapi_identify(s
);
1261 s
->status
= READY_STAT
| SEEK_STAT
;
1262 ide_transfer_start(s
, s
->io_buffer
, 512, ide_transfer_stop
);
1263 ide_set_irq(s
->bus
);
1266 ide_set_signature(s
);
1267 if (s
->drive_kind
== IDE_CD
)
1268 s
->status
= 0; /* ATAPI spec (v6) section 9.10 defines packet
1269 * devices to return a clear status register
1270 * with READY_STAT *not* set. */
1272 s
->status
= READY_STAT
| SEEK_STAT
;
1273 s
->error
= 0x01; /* Device 0 passed, Device 1 passed or not
1276 ide_set_irq(s
->bus
);
1278 case WIN_DEVICE_RESET
:
1279 ide_set_signature(s
);
1280 s
->status
= 0x00; /* NOTE: READY is _not_ set */
1284 /* overlapping commands not supported */
1285 if (s
->feature
& 0x02)
1287 s
->status
= READY_STAT
| SEEK_STAT
;
1288 s
->atapi_dma
= s
->feature
& 1;
1290 ide_transfer_start(s
, s
->io_buffer
, ATAPI_PACKET_SIZE
,
1293 /* CF-ATA commands */
1294 case CFA_REQ_EXT_ERROR_CODE
:
1295 s
->error
= 0x09; /* miscellaneous error */
1296 s
->status
= READY_STAT
| SEEK_STAT
;
1297 ide_set_irq(s
->bus
);
1299 case CFA_ERASE_SECTORS
:
1300 case CFA_WEAR_LEVEL
:
1301 if (val
== CFA_WEAR_LEVEL
)
1303 if (val
== CFA_ERASE_SECTORS
)
1304 s
->media_changed
= 1;
1306 s
->status
= READY_STAT
| SEEK_STAT
;
1307 ide_set_irq(s
->bus
);
1309 case CFA_TRANSLATE_SECTOR
:
1311 s
->status
= READY_STAT
| SEEK_STAT
;
1312 memset(s
->io_buffer
, 0, 0x200);
1313 s
->io_buffer
[0x00] = s
->hcyl
; /* Cyl MSB */
1314 s
->io_buffer
[0x01] = s
->lcyl
; /* Cyl LSB */
1315 s
->io_buffer
[0x02] = s
->select
; /* Head */
1316 s
->io_buffer
[0x03] = s
->sector
; /* Sector */
1317 s
->io_buffer
[0x04] = ide_get_sector(s
) >> 16; /* LBA MSB */
1318 s
->io_buffer
[0x05] = ide_get_sector(s
) >> 8; /* LBA */
1319 s
->io_buffer
[0x06] = ide_get_sector(s
) >> 0; /* LBA LSB */
1320 s
->io_buffer
[0x13] = 0x00; /* Erase flag */
1321 s
->io_buffer
[0x18] = 0x00; /* Hot count */
1322 s
->io_buffer
[0x19] = 0x00; /* Hot count */
1323 s
->io_buffer
[0x1a] = 0x01; /* Hot count */
1324 ide_transfer_start(s
, s
->io_buffer
, 0x200, ide_transfer_stop
);
1325 ide_set_irq(s
->bus
);
1327 case CFA_ACCESS_METADATA_STORAGE
:
1328 switch (s
->feature
) {
1329 case 0x02: /* Inquiry Metadata Storage */
1330 ide_cfata_metadata_inquiry(s
);
1332 case 0x03: /* Read Metadata Storage */
1333 ide_cfata_metadata_read(s
);
1335 case 0x04: /* Write Metadata Storage */
1336 ide_cfata_metadata_write(s
);
1341 ide_transfer_start(s
, s
->io_buffer
, 0x200, ide_transfer_stop
);
1342 s
->status
= 0x00; /* NOTE: READY is _not_ set */
1343 ide_set_irq(s
->bus
);
1345 case IBM_SENSE_CONDITION
:
1346 switch (s
->feature
) {
1347 case 0x01: /* sense temperature in device */
1348 s
->nsector
= 0x50; /* +20 C */
1353 s
->status
= READY_STAT
| SEEK_STAT
;
1354 ide_set_irq(s
->bus
);
1358 if (s
->hcyl
!= 0xc2 || s
->lcyl
!= 0x4f)
1360 if (!s
->smart_enabled
&& s
->feature
!= SMART_ENABLE
)
1362 switch (s
->feature
) {
1364 s
->smart_enabled
= 0;
1365 s
->status
= READY_STAT
| SEEK_STAT
;
1366 ide_set_irq(s
->bus
);
1369 s
->smart_enabled
= 1;
1370 s
->status
= READY_STAT
| SEEK_STAT
;
1371 ide_set_irq(s
->bus
);
1373 case SMART_ATTR_AUTOSAVE
:
1374 switch (s
->sector
) {
1376 s
->smart_autosave
= 0;
1379 s
->smart_autosave
= 1;
1384 s
->status
= READY_STAT
| SEEK_STAT
;
1385 ide_set_irq(s
->bus
);
1388 if (!s
->smart_errors
) {
1395 s
->status
= READY_STAT
| SEEK_STAT
;
1396 ide_set_irq(s
->bus
);
1398 case SMART_READ_THRESH
:
1399 memset(s
->io_buffer
, 0, 0x200);
1400 s
->io_buffer
[0] = 0x01; /* smart struct version */
1401 for (n
=0; n
<30; n
++) {
1402 if (smart_attributes
[n
][0] == 0)
1404 s
->io_buffer
[2+0+(n
*12)] = smart_attributes
[n
][0];
1405 s
->io_buffer
[2+1+(n
*12)] = smart_attributes
[n
][11];
1407 for (n
=0; n
<511; n
++) /* checksum */
1408 s
->io_buffer
[511] += s
->io_buffer
[n
];
1409 s
->io_buffer
[511] = 0x100 - s
->io_buffer
[511];
1410 s
->status
= READY_STAT
| SEEK_STAT
;
1411 ide_transfer_start(s
, s
->io_buffer
, 0x200, ide_transfer_stop
);
1412 ide_set_irq(s
->bus
);
1414 case SMART_READ_DATA
:
1415 memset(s
->io_buffer
, 0, 0x200);
1416 s
->io_buffer
[0] = 0x01; /* smart struct version */
1417 for (n
=0; n
<30; n
++) {
1418 if (smart_attributes
[n
][0] == 0) {
1422 for(i
= 0; i
< 11; i
++) {
1423 s
->io_buffer
[2+i
+(n
*12)] = smart_attributes
[n
][i
];
1426 s
->io_buffer
[362] = 0x02 | (s
->smart_autosave
?0x80:0x00);
1427 if (s
->smart_selftest_count
== 0) {
1428 s
->io_buffer
[363] = 0;
1431 s
->smart_selftest_data
[3 +
1432 (s
->smart_selftest_count
- 1) *
1435 s
->io_buffer
[364] = 0x20;
1436 s
->io_buffer
[365] = 0x01;
1437 /* offline data collection capacity: execute + self-test*/
1438 s
->io_buffer
[367] = (1<<4 | 1<<3 | 1);
1439 s
->io_buffer
[368] = 0x03; /* smart capability (1) */
1440 s
->io_buffer
[369] = 0x00; /* smart capability (2) */
1441 s
->io_buffer
[370] = 0x01; /* error logging supported */
1442 s
->io_buffer
[372] = 0x02; /* minutes for poll short test */
1443 s
->io_buffer
[373] = 0x36; /* minutes for poll ext test */
1444 s
->io_buffer
[374] = 0x01; /* minutes for poll conveyance */
1446 for (n
=0; n
<511; n
++)
1447 s
->io_buffer
[511] += s
->io_buffer
[n
];
1448 s
->io_buffer
[511] = 0x100 - s
->io_buffer
[511];
1449 s
->status
= READY_STAT
| SEEK_STAT
;
1450 ide_transfer_start(s
, s
->io_buffer
, 0x200, ide_transfer_stop
);
1451 ide_set_irq(s
->bus
);
1453 case SMART_READ_LOG
:
1454 switch (s
->sector
) {
1455 case 0x01: /* summary smart error log */
1456 memset(s
->io_buffer
, 0, 0x200);
1457 s
->io_buffer
[0] = 0x01;
1458 s
->io_buffer
[1] = 0x00; /* no error entries */
1459 s
->io_buffer
[452] = s
->smart_errors
& 0xff;
1460 s
->io_buffer
[453] = (s
->smart_errors
& 0xff00) >> 8;
1462 for (n
=0; n
<511; n
++)
1463 s
->io_buffer
[511] += s
->io_buffer
[n
];
1464 s
->io_buffer
[511] = 0x100 - s
->io_buffer
[511];
1466 case 0x06: /* smart self test log */
1467 memset(s
->io_buffer
, 0, 0x200);
1468 s
->io_buffer
[0] = 0x01;
1469 if (s
->smart_selftest_count
== 0) {
1470 s
->io_buffer
[508] = 0;
1472 s
->io_buffer
[508] = s
->smart_selftest_count
;
1473 for (n
=2; n
<506; n
++)
1474 s
->io_buffer
[n
] = s
->smart_selftest_data
[n
];
1476 for (n
=0; n
<511; n
++)
1477 s
->io_buffer
[511] += s
->io_buffer
[n
];
1478 s
->io_buffer
[511] = 0x100 - s
->io_buffer
[511];
1483 s
->status
= READY_STAT
| SEEK_STAT
;
1484 ide_transfer_start(s
, s
->io_buffer
, 0x200, ide_transfer_stop
);
1485 ide_set_irq(s
->bus
);
1487 case SMART_EXECUTE_OFFLINE
:
1488 switch (s
->sector
) {
1489 case 0: /* off-line routine */
1490 case 1: /* short self test */
1491 case 2: /* extended self test */
1492 s
->smart_selftest_count
++;
1493 if(s
->smart_selftest_count
> 21)
1494 s
->smart_selftest_count
= 0;
1495 n
= 2 + (s
->smart_selftest_count
- 1) * 24;
1496 s
->smart_selftest_data
[n
] = s
->sector
;
1497 s
->smart_selftest_data
[n
+1] = 0x00; /* OK and finished */
1498 s
->smart_selftest_data
[n
+2] = 0x34; /* hour count lsb */
1499 s
->smart_selftest_data
[n
+3] = 0x12; /* hour count msb */
1500 s
->status
= READY_STAT
| SEEK_STAT
;
1501 ide_set_irq(s
->bus
);
1512 /* should not be reachable */
1514 ide_abort_command(s
);
1515 ide_set_irq(s
->bus
);
1520 uint32_t ide_ioport_read(void *opaque
, uint32_t addr1
)
1522 IDEBus
*bus
= opaque
;
1523 IDEState
*s
= idebus_active_if(bus
);
1528 /* FIXME: HOB readback uses bit 7, but it's always set right now */
1529 //hob = s->select & (1 << 7);
1536 if ((!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
) ||
1537 (s
!= bus
->ifs
&& !s
->bs
))
1542 ret
= s
->hob_feature
;
1545 if (!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
)
1548 ret
= s
->nsector
& 0xff;
1550 ret
= s
->hob_nsector
;
1553 if (!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
)
1558 ret
= s
->hob_sector
;
1561 if (!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
)
1569 if (!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
)
1577 if (!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
)
1584 if ((!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
) ||
1585 (s
!= bus
->ifs
&& !s
->bs
))
1589 qemu_irq_lower(bus
->irq
);
1593 printf("ide: read addr=0x%x val=%02x\n", addr1
, ret
);
1598 uint32_t ide_status_read(void *opaque
, uint32_t addr
)
1600 IDEBus
*bus
= opaque
;
1601 IDEState
*s
= idebus_active_if(bus
);
1604 if ((!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
) ||
1605 (s
!= bus
->ifs
&& !s
->bs
))
1610 printf("ide: read status addr=0x%x val=%02x\n", addr
, ret
);
1615 void ide_cmd_write(void *opaque
, uint32_t addr
, uint32_t val
)
1617 IDEBus
*bus
= opaque
;
1622 printf("ide: write control addr=0x%x val=%02x\n", addr
, val
);
1624 /* common for both drives */
1625 if (!(bus
->cmd
& IDE_CMD_RESET
) &&
1626 (val
& IDE_CMD_RESET
)) {
1627 /* reset low to high */
1628 for(i
= 0;i
< 2; i
++) {
1630 s
->status
= BUSY_STAT
| SEEK_STAT
;
1633 } else if ((bus
->cmd
& IDE_CMD_RESET
) &&
1634 !(val
& IDE_CMD_RESET
)) {
1636 for(i
= 0;i
< 2; i
++) {
1638 if (s
->drive_kind
== IDE_CD
)
1639 s
->status
= 0x00; /* NOTE: READY is _not_ set */
1641 s
->status
= READY_STAT
| SEEK_STAT
;
1642 ide_set_signature(s
);
1650 * Returns true if the running PIO transfer is a PIO out (i.e. data is
1651 * transferred from the device to the guest), false if it's a PIO in
1653 static bool ide_is_pio_out(IDEState
*s
)
1655 if (s
->end_transfer_func
== ide_sector_write
||
1656 s
->end_transfer_func
== ide_atapi_cmd
) {
1658 } else if (s
->end_transfer_func
== ide_sector_read
||
1659 s
->end_transfer_func
== ide_transfer_stop
||
1660 s
->end_transfer_func
== ide_atapi_cmd_reply_end
||
1661 s
->end_transfer_func
== ide_dummy_transfer_stop
) {
1668 void ide_data_writew(void *opaque
, uint32_t addr
, uint32_t val
)
1670 IDEBus
*bus
= opaque
;
1671 IDEState
*s
= idebus_active_if(bus
);
1674 /* PIO data access allowed only when DRQ bit is set. The result of a write
1675 * during PIO out is indeterminate, just ignore it. */
1676 if (!(s
->status
& DRQ_STAT
) || ide_is_pio_out(s
)) {
1681 *(uint16_t *)p
= le16_to_cpu(val
);
1684 if (p
>= s
->data_end
)
1685 s
->end_transfer_func(s
);
1688 uint32_t ide_data_readw(void *opaque
, uint32_t addr
)
1690 IDEBus
*bus
= opaque
;
1691 IDEState
*s
= idebus_active_if(bus
);
1695 /* PIO data access allowed only when DRQ bit is set. The result of a read
1696 * during PIO in is indeterminate, return 0 and don't move forward. */
1697 if (!(s
->status
& DRQ_STAT
) || !ide_is_pio_out(s
)) {
1702 ret
= cpu_to_le16(*(uint16_t *)p
);
1705 if (p
>= s
->data_end
)
1706 s
->end_transfer_func(s
);
1710 void ide_data_writel(void *opaque
, uint32_t addr
, uint32_t val
)
1712 IDEBus
*bus
= opaque
;
1713 IDEState
*s
= idebus_active_if(bus
);
1716 /* PIO data access allowed only when DRQ bit is set. The result of a write
1717 * during PIO out is indeterminate, just ignore it. */
1718 if (!(s
->status
& DRQ_STAT
) || ide_is_pio_out(s
)) {
1723 *(uint32_t *)p
= le32_to_cpu(val
);
1726 if (p
>= s
->data_end
)
1727 s
->end_transfer_func(s
);
1730 uint32_t ide_data_readl(void *opaque
, uint32_t addr
)
1732 IDEBus
*bus
= opaque
;
1733 IDEState
*s
= idebus_active_if(bus
);
1737 /* PIO data access allowed only when DRQ bit is set. The result of a read
1738 * during PIO in is indeterminate, return 0 and don't move forward. */
1739 if (!(s
->status
& DRQ_STAT
) || !ide_is_pio_out(s
)) {
1744 ret
= cpu_to_le32(*(uint32_t *)p
);
1747 if (p
>= s
->data_end
)
1748 s
->end_transfer_func(s
);
1752 static void ide_dummy_transfer_stop(IDEState
*s
)
1754 s
->data_ptr
= s
->io_buffer
;
1755 s
->data_end
= s
->io_buffer
;
1756 s
->io_buffer
[0] = 0xff;
1757 s
->io_buffer
[1] = 0xff;
1758 s
->io_buffer
[2] = 0xff;
1759 s
->io_buffer
[3] = 0xff;
1762 static void ide_reset(IDEState
*s
)
1765 printf("ide: reset\n");
1767 if (s
->drive_kind
== IDE_CFATA
)
1768 s
->mult_sectors
= 0;
1770 s
->mult_sectors
= MAX_MULT_SECTORS
;
1787 s
->status
= READY_STAT
| SEEK_STAT
;
1791 /* ATAPI specific */
1794 s
->cdrom_changed
= 0;
1795 s
->packet_transfer_size
= 0;
1796 s
->elementary_transfer_size
= 0;
1797 s
->io_buffer_index
= 0;
1798 s
->cd_sector_size
= 0;
1801 s
->io_buffer_size
= 0;
1802 s
->req_nb_sectors
= 0;
1804 ide_set_signature(s
);
1805 /* init the transfer handler so that 0xffff is returned on data
1807 s
->end_transfer_func
= ide_dummy_transfer_stop
;
1808 ide_dummy_transfer_stop(s
);
1809 s
->media_changed
= 0;
1812 void ide_bus_reset(IDEBus
*bus
)
1816 ide_reset(&bus
->ifs
[0]);
1817 ide_reset(&bus
->ifs
[1]);
1820 /* pending async DMA */
1821 if (bus
->dma
->aiocb
) {
1823 printf("aio_cancel\n");
1825 bdrv_aio_cancel(bus
->dma
->aiocb
);
1826 bus
->dma
->aiocb
= NULL
;
1829 /* reset dma provider too */
1830 bus
->dma
->ops
->reset(bus
->dma
);
1833 static bool ide_cd_is_tray_open(void *opaque
)
1835 return ((IDEState
*)opaque
)->tray_open
;
1838 static bool ide_cd_is_medium_locked(void *opaque
)
1840 return ((IDEState
*)opaque
)->tray_locked
;
1843 static const BlockDevOps ide_cd_block_ops
= {
1844 .change_media_cb
= ide_cd_change_cb
,
1845 .eject_request_cb
= ide_cd_eject_request_cb
,
1846 .is_tray_open
= ide_cd_is_tray_open
,
1847 .is_medium_locked
= ide_cd_is_medium_locked
,
1850 int ide_init_drive(IDEState
*s
, BlockDriverState
*bs
, IDEDriveKind kind
,
1851 const char *version
, const char *serial
, const char *model
,
1854 int cylinders
, heads
, secs
;
1855 uint64_t nb_sectors
;
1858 s
->drive_kind
= kind
;
1860 bdrv_get_geometry(bs
, &nb_sectors
);
1861 bdrv_guess_geometry(bs
, &cylinders
, &heads
, &secs
);
1862 if (cylinders
< 1 || cylinders
> 16383) {
1863 error_report("cyls must be between 1 and 16383");
1866 if (heads
< 1 || heads
> 16) {
1867 error_report("heads must be between 1 and 16");
1870 if (secs
< 1 || secs
> 63) {
1871 error_report("secs must be between 1 and 63");
1874 s
->cylinders
= cylinders
;
1877 s
->nb_sectors
= nb_sectors
;
1879 /* The SMART values should be preserved across power cycles
1881 s
->smart_enabled
= 1;
1882 s
->smart_autosave
= 1;
1883 s
->smart_errors
= 0;
1884 s
->smart_selftest_count
= 0;
1885 if (kind
== IDE_CD
) {
1886 bdrv_set_dev_ops(bs
, &ide_cd_block_ops
, s
);
1887 bdrv_set_buffer_alignment(bs
, 2048);
1889 if (!bdrv_is_inserted(s
->bs
)) {
1890 error_report("Device needs media, but drive is empty");
1893 if (bdrv_is_read_only(bs
)) {
1894 error_report("Can't use a read-only drive");
1899 pstrcpy(s
->drive_serial_str
, sizeof(s
->drive_serial_str
), serial
);
1901 snprintf(s
->drive_serial_str
, sizeof(s
->drive_serial_str
),
1902 "QM%05d", s
->drive_serial
);
1905 pstrcpy(s
->drive_model_str
, sizeof(s
->drive_model_str
), model
);
1909 strcpy(s
->drive_model_str
, "QEMU DVD-ROM");
1912 strcpy(s
->drive_model_str
, "QEMU MICRODRIVE");
1915 strcpy(s
->drive_model_str
, "QEMU HARDDISK");
1921 pstrcpy(s
->version
, sizeof(s
->version
), version
);
1923 pstrcpy(s
->version
, sizeof(s
->version
), QEMU_VERSION
);
1927 bdrv_iostatus_enable(bs
);
1931 static void ide_init1(IDEBus
*bus
, int unit
)
1933 static int drive_serial
= 1;
1934 IDEState
*s
= &bus
->ifs
[unit
];
1938 s
->drive_serial
= drive_serial
++;
1939 /* we need at least 2k alignment for accessing CDROMs using O_DIRECT */
1940 s
->io_buffer_total_len
= IDE_DMA_BUF_SECTORS
*512 + 4;
1941 s
->io_buffer
= qemu_memalign(2048, s
->io_buffer_total_len
);
1942 memset(s
->io_buffer
, 0, s
->io_buffer_total_len
);
1944 s
->smart_selftest_data
= qemu_blockalign(s
->bs
, 512);
1945 memset(s
->smart_selftest_data
, 0, 512);
1947 s
->sector_write_timer
= qemu_new_timer_ns(vm_clock
,
1948 ide_sector_write_timer_cb
, s
);
1951 static void ide_nop_start(IDEDMA
*dma
, IDEState
*s
,
1952 BlockDriverCompletionFunc
*cb
)
1956 static int ide_nop(IDEDMA
*dma
)
1961 static int ide_nop_int(IDEDMA
*dma
, int x
)
1966 static void ide_nop_restart(void *opaque
, int x
, RunState y
)
1970 static const IDEDMAOps ide_dma_nop_ops
= {
1971 .start_dma
= ide_nop_start
,
1972 .start_transfer
= ide_nop
,
1973 .prepare_buf
= ide_nop_int
,
1974 .rw_buf
= ide_nop_int
,
1975 .set_unit
= ide_nop_int
,
1976 .add_status
= ide_nop_int
,
1977 .set_inactive
= ide_nop
,
1978 .restart_cb
= ide_nop_restart
,
1982 static IDEDMA ide_dma_nop
= {
1983 .ops
= &ide_dma_nop_ops
,
1987 void ide_init2(IDEBus
*bus
, qemu_irq irq
)
1991 for(i
= 0; i
< 2; i
++) {
1993 ide_reset(&bus
->ifs
[i
]);
1996 bus
->dma
= &ide_dma_nop
;
1999 /* TODO convert users to qdev and remove */
2000 void ide_init2_with_non_qdev_drives(IDEBus
*bus
, DriveInfo
*hd0
,
2001 DriveInfo
*hd1
, qemu_irq irq
)
2006 for(i
= 0; i
< 2; i
++) {
2007 dinfo
= i
== 0 ? hd0
: hd1
;
2010 if (ide_init_drive(&bus
->ifs
[i
], dinfo
->bdrv
,
2011 dinfo
->media_cd
? IDE_CD
: IDE_HD
, NULL
,
2012 *dinfo
->serial
? dinfo
->serial
: NULL
,
2014 error_report("Can't set up IDE drive %s", dinfo
->id
);
2017 bdrv_attach_dev_nofail(dinfo
->bdrv
, &bus
->ifs
[i
]);
2019 ide_reset(&bus
->ifs
[i
]);
2023 bus
->dma
= &ide_dma_nop
;
2026 static const MemoryRegionPortio ide_portio_list
[] = {
2027 { 0, 8, 1, .read
= ide_ioport_read
, .write
= ide_ioport_write
},
2028 { 0, 2, 2, .read
= ide_data_readw
, .write
= ide_data_writew
},
2029 { 0, 4, 4, .read
= ide_data_readl
, .write
= ide_data_writel
},
2030 PORTIO_END_OF_LIST(),
2033 static const MemoryRegionPortio ide_portio2_list
[] = {
2034 { 0, 1, 1, .read
= ide_status_read
, .write
= ide_cmd_write
},
2035 PORTIO_END_OF_LIST(),
2038 void ide_init_ioport(IDEBus
*bus
, ISADevice
*dev
, int iobase
, int iobase2
)
2040 /* ??? Assume only ISA and PCI configurations, and that the PCI-ISA
2041 bridge has been setup properly to always register with ISA. */
2042 isa_register_portio_list(dev
, iobase
, ide_portio_list
, bus
, "ide");
2045 isa_register_portio_list(dev
, iobase2
, ide_portio2_list
, bus
, "ide");
2049 static bool is_identify_set(void *opaque
, int version_id
)
2051 IDEState
*s
= opaque
;
2053 return s
->identify_set
!= 0;
2056 static EndTransferFunc
* transfer_end_table
[] = {
2060 ide_atapi_cmd_reply_end
,
2062 ide_dummy_transfer_stop
,
2065 static int transfer_end_table_idx(EndTransferFunc
*fn
)
2069 for (i
= 0; i
< ARRAY_SIZE(transfer_end_table
); i
++)
2070 if (transfer_end_table
[i
] == fn
)
2076 static int ide_drive_post_load(void *opaque
, int version_id
)
2078 IDEState
*s
= opaque
;
2080 if (version_id
< 3) {
2081 if (s
->sense_key
== UNIT_ATTENTION
&&
2082 s
->asc
== ASC_MEDIUM_MAY_HAVE_CHANGED
) {
2083 s
->cdrom_changed
= 1;
2089 static int ide_drive_pio_post_load(void *opaque
, int version_id
)
2091 IDEState
*s
= opaque
;
2093 if (s
->end_transfer_fn_idx
>= ARRAY_SIZE(transfer_end_table
)) {
2096 s
->end_transfer_func
= transfer_end_table
[s
->end_transfer_fn_idx
];
2097 s
->data_ptr
= s
->io_buffer
+ s
->cur_io_buffer_offset
;
2098 s
->data_end
= s
->data_ptr
+ s
->cur_io_buffer_len
;
2103 static void ide_drive_pio_pre_save(void *opaque
)
2105 IDEState
*s
= opaque
;
2108 s
->cur_io_buffer_offset
= s
->data_ptr
- s
->io_buffer
;
2109 s
->cur_io_buffer_len
= s
->data_end
- s
->data_ptr
;
2111 idx
= transfer_end_table_idx(s
->end_transfer_func
);
2113 fprintf(stderr
, "%s: invalid end_transfer_func for DRQ_STAT\n",
2115 s
->end_transfer_fn_idx
= 2;
2117 s
->end_transfer_fn_idx
= idx
;
2121 static bool ide_drive_pio_state_needed(void *opaque
)
2123 IDEState
*s
= opaque
;
2125 return ((s
->status
& DRQ_STAT
) != 0)
2126 || (s
->bus
->error_status
& BM_STATUS_PIO_RETRY
);
2129 static bool ide_tray_state_needed(void *opaque
)
2131 IDEState
*s
= opaque
;
2133 return s
->tray_open
|| s
->tray_locked
;
2136 static bool ide_atapi_gesn_needed(void *opaque
)
2138 IDEState
*s
= opaque
;
2140 return s
->events
.new_media
|| s
->events
.eject_request
;
2143 static bool ide_error_needed(void *opaque
)
2145 IDEBus
*bus
= opaque
;
2147 return (bus
->error_status
!= 0);
2150 /* Fields for GET_EVENT_STATUS_NOTIFICATION ATAPI command */
2151 static const VMStateDescription vmstate_ide_atapi_gesn_state
= {
2152 .name
="ide_drive/atapi/gesn_state",
2154 .minimum_version_id
= 1,
2155 .minimum_version_id_old
= 1,
2156 .fields
= (VMStateField
[]) {
2157 VMSTATE_BOOL(events
.new_media
, IDEState
),
2158 VMSTATE_BOOL(events
.eject_request
, IDEState
),
2159 VMSTATE_END_OF_LIST()
2163 static const VMStateDescription vmstate_ide_tray_state
= {
2164 .name
= "ide_drive/tray_state",
2166 .minimum_version_id
= 1,
2167 .minimum_version_id_old
= 1,
2168 .fields
= (VMStateField
[]) {
2169 VMSTATE_BOOL(tray_open
, IDEState
),
2170 VMSTATE_BOOL(tray_locked
, IDEState
),
2171 VMSTATE_END_OF_LIST()
2175 static const VMStateDescription vmstate_ide_drive_pio_state
= {
2176 .name
= "ide_drive/pio_state",
2178 .minimum_version_id
= 1,
2179 .minimum_version_id_old
= 1,
2180 .pre_save
= ide_drive_pio_pre_save
,
2181 .post_load
= ide_drive_pio_post_load
,
2182 .fields
= (VMStateField
[]) {
2183 VMSTATE_INT32(req_nb_sectors
, IDEState
),
2184 VMSTATE_VARRAY_INT32(io_buffer
, IDEState
, io_buffer_total_len
, 1,
2185 vmstate_info_uint8
, uint8_t),
2186 VMSTATE_INT32(cur_io_buffer_offset
, IDEState
),
2187 VMSTATE_INT32(cur_io_buffer_len
, IDEState
),
2188 VMSTATE_UINT8(end_transfer_fn_idx
, IDEState
),
2189 VMSTATE_INT32(elementary_transfer_size
, IDEState
),
2190 VMSTATE_INT32(packet_transfer_size
, IDEState
),
2191 VMSTATE_END_OF_LIST()
2195 const VMStateDescription vmstate_ide_drive
= {
2196 .name
= "ide_drive",
2198 .minimum_version_id
= 0,
2199 .minimum_version_id_old
= 0,
2200 .post_load
= ide_drive_post_load
,
2201 .fields
= (VMStateField
[]) {
2202 VMSTATE_INT32(mult_sectors
, IDEState
),
2203 VMSTATE_INT32(identify_set
, IDEState
),
2204 VMSTATE_BUFFER_TEST(identify_data
, IDEState
, is_identify_set
),
2205 VMSTATE_UINT8(feature
, IDEState
),
2206 VMSTATE_UINT8(error
, IDEState
),
2207 VMSTATE_UINT32(nsector
, IDEState
),
2208 VMSTATE_UINT8(sector
, IDEState
),
2209 VMSTATE_UINT8(lcyl
, IDEState
),
2210 VMSTATE_UINT8(hcyl
, IDEState
),
2211 VMSTATE_UINT8(hob_feature
, IDEState
),
2212 VMSTATE_UINT8(hob_sector
, IDEState
),
2213 VMSTATE_UINT8(hob_nsector
, IDEState
),
2214 VMSTATE_UINT8(hob_lcyl
, IDEState
),
2215 VMSTATE_UINT8(hob_hcyl
, IDEState
),
2216 VMSTATE_UINT8(select
, IDEState
),
2217 VMSTATE_UINT8(status
, IDEState
),
2218 VMSTATE_UINT8(lba48
, IDEState
),
2219 VMSTATE_UINT8(sense_key
, IDEState
),
2220 VMSTATE_UINT8(asc
, IDEState
),
2221 VMSTATE_UINT8_V(cdrom_changed
, IDEState
, 3),
2222 VMSTATE_END_OF_LIST()
2224 .subsections
= (VMStateSubsection
[]) {
2226 .vmsd
= &vmstate_ide_drive_pio_state
,
2227 .needed
= ide_drive_pio_state_needed
,
2229 .vmsd
= &vmstate_ide_tray_state
,
2230 .needed
= ide_tray_state_needed
,
2232 .vmsd
= &vmstate_ide_atapi_gesn_state
,
2233 .needed
= ide_atapi_gesn_needed
,
2240 static const VMStateDescription vmstate_ide_error_status
= {
2241 .name
="ide_bus/error",
2243 .minimum_version_id
= 1,
2244 .minimum_version_id_old
= 1,
2245 .fields
= (VMStateField
[]) {
2246 VMSTATE_INT32(error_status
, IDEBus
),
2247 VMSTATE_END_OF_LIST()
2251 const VMStateDescription vmstate_ide_bus
= {
2254 .minimum_version_id
= 1,
2255 .minimum_version_id_old
= 1,
2256 .fields
= (VMStateField
[]) {
2257 VMSTATE_UINT8(cmd
, IDEBus
),
2258 VMSTATE_UINT8(unit
, IDEBus
),
2259 VMSTATE_END_OF_LIST()
2261 .subsections
= (VMStateSubsection
[]) {
2263 .vmsd
= &vmstate_ide_error_status
,
2264 .needed
= ide_error_needed
,
2271 void ide_drive_get(DriveInfo
**hd
, int max_bus
)
2275 if (drive_get_max_bus(IF_IDE
) >= max_bus
) {
2276 fprintf(stderr
, "qemu: too many IDE bus: %d\n", max_bus
);
2280 for(i
= 0; i
< max_bus
* MAX_IDE_DEVS
; i
++) {
2281 hd
[i
] = drive_get(IF_IDE
, i
/ MAX_IDE_DEVS
, i
% MAX_IDE_DEVS
);