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
30 #include "block_int.h"
31 #include "qemu-timer.h"
35 #include <hw/ide/internal.h>
37 static int smart_attributes
[][5] = {
38 /* id, flags, val, wrst, thrsh */
39 { 0x01, 0x03, 0x64, 0x64, 0x06}, /* raw read */
40 { 0x03, 0x03, 0x64, 0x64, 0x46}, /* spin up */
41 { 0x04, 0x02, 0x64, 0x64, 0x14}, /* start stop count */
42 { 0x05, 0x03, 0x64, 0x64, 0x36}, /* remapped sectors */
43 { 0x00, 0x00, 0x00, 0x00, 0x00}
46 /* XXX: DVDs that could fit on a CD will be reported as a CD */
47 static inline int media_present(IDEState
*s
)
49 return (s
->nb_sectors
> 0);
52 static inline int media_is_dvd(IDEState
*s
)
54 return (media_present(s
) && s
->nb_sectors
> CD_MAX_SECTORS
);
57 static inline int media_is_cd(IDEState
*s
)
59 return (media_present(s
) && s
->nb_sectors
<= CD_MAX_SECTORS
);
62 static void ide_dma_start(IDEState
*s
, BlockDriverCompletionFunc
*dma_cb
);
63 static void ide_dma_restart(IDEState
*s
, int is_read
);
64 static void ide_atapi_cmd_read_dma_cb(void *opaque
, int ret
);
65 static int ide_handle_rw_error(IDEState
*s
, int error
, int op
);
67 static void padstr(char *str
, const char *src
, int len
)
70 for(i
= 0; i
< len
; i
++) {
79 static void padstr8(uint8_t *buf
, int buf_size
, const char *src
)
82 for(i
= 0; i
< buf_size
; i
++) {
90 static void put_le16(uint16_t *p
, unsigned int v
)
95 static void ide_identify(IDEState
*s
)
100 if (s
->identify_set
) {
101 memcpy(s
->io_buffer
, s
->identify_data
, sizeof(s
->identify_data
));
105 memset(s
->io_buffer
, 0, 512);
106 p
= (uint16_t *)s
->io_buffer
;
107 put_le16(p
+ 0, 0x0040);
108 put_le16(p
+ 1, s
->cylinders
);
109 put_le16(p
+ 3, s
->heads
);
110 put_le16(p
+ 4, 512 * s
->sectors
); /* XXX: retired, remove ? */
111 put_le16(p
+ 5, 512); /* XXX: retired, remove ? */
112 put_le16(p
+ 6, s
->sectors
);
113 padstr((char *)(p
+ 10), s
->drive_serial_str
, 20); /* serial number */
114 put_le16(p
+ 20, 3); /* XXX: retired, remove ? */
115 put_le16(p
+ 21, 512); /* cache size in sectors */
116 put_le16(p
+ 22, 4); /* ecc bytes */
117 padstr((char *)(p
+ 23), s
->version
, 8); /* firmware version */
118 padstr((char *)(p
+ 27), "QEMU HARDDISK", 40); /* model */
119 #if MAX_MULT_SECTORS > 1
120 put_le16(p
+ 47, 0x8000 | MAX_MULT_SECTORS
);
122 put_le16(p
+ 48, 1); /* dword I/O */
123 put_le16(p
+ 49, (1 << 11) | (1 << 9) | (1 << 8)); /* DMA and LBA supported */
124 put_le16(p
+ 51, 0x200); /* PIO transfer cycle */
125 put_le16(p
+ 52, 0x200); /* DMA transfer cycle */
126 put_le16(p
+ 53, 1 | (1 << 1) | (1 << 2)); /* words 54-58,64-70,88 are valid */
127 put_le16(p
+ 54, s
->cylinders
);
128 put_le16(p
+ 55, s
->heads
);
129 put_le16(p
+ 56, s
->sectors
);
130 oldsize
= s
->cylinders
* s
->heads
* s
->sectors
;
131 put_le16(p
+ 57, oldsize
);
132 put_le16(p
+ 58, oldsize
>> 16);
134 put_le16(p
+ 59, 0x100 | s
->mult_sectors
);
135 put_le16(p
+ 60, s
->nb_sectors
);
136 put_le16(p
+ 61, s
->nb_sectors
>> 16);
137 put_le16(p
+ 62, 0x07); /* single word dma0-2 supported */
138 put_le16(p
+ 63, 0x07); /* mdma0-2 supported */
139 put_le16(p
+ 65, 120);
140 put_le16(p
+ 66, 120);
141 put_le16(p
+ 67, 120);
142 put_le16(p
+ 68, 120);
143 put_le16(p
+ 80, 0xf0); /* ata3 -> ata6 supported */
144 put_le16(p
+ 81, 0x16); /* conforms to ata5 */
145 /* 14=NOP supported, 0=SMART supported */
146 put_le16(p
+ 82, (1 << 14) | 1);
147 /* 13=flush_cache_ext,12=flush_cache,10=lba48 */
148 put_le16(p
+ 83, (1 << 14) | (1 << 13) | (1 <<12) | (1 << 10));
149 /* 14=set to 1, 1=SMART self test, 0=SMART error logging */
150 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 << 14) | (1 << 13) | (1 <<12) | (1 << 10));
158 /* 14=set to 1, 1=smart self test, 0=smart error logging */
159 put_le16(p
+ 87, (1 << 14) | 0);
160 put_le16(p
+ 88, 0x3f | (1 << 13)); /* udma5 set and supported */
161 put_le16(p
+ 93, 1 | (1 << 14) | 0x2000);
162 put_le16(p
+ 100, s
->nb_sectors
);
163 put_le16(p
+ 101, s
->nb_sectors
>> 16);
164 put_le16(p
+ 102, s
->nb_sectors
>> 32);
165 put_le16(p
+ 103, s
->nb_sectors
>> 48);
166 if (s
->conf
&& s
->conf
->physical_block_size
)
167 put_le16(p
+ 106, 0x6000 | get_physical_block_exp(s
->conf
));
169 memcpy(s
->identify_data
, p
, sizeof(s
->identify_data
));
173 static void ide_atapi_identify(IDEState
*s
)
177 if (s
->identify_set
) {
178 memcpy(s
->io_buffer
, s
->identify_data
, sizeof(s
->identify_data
));
182 memset(s
->io_buffer
, 0, 512);
183 p
= (uint16_t *)s
->io_buffer
;
184 /* Removable CDROM, 50us response, 12 byte packets */
185 put_le16(p
+ 0, (2 << 14) | (5 << 8) | (1 << 7) | (2 << 5) | (0 << 0));
186 padstr((char *)(p
+ 10), s
->drive_serial_str
, 20); /* serial number */
187 put_le16(p
+ 20, 3); /* buffer type */
188 put_le16(p
+ 21, 512); /* cache size in sectors */
189 put_le16(p
+ 22, 4); /* ecc bytes */
190 padstr((char *)(p
+ 23), s
->version
, 8); /* firmware version */
191 padstr((char *)(p
+ 27), "QEMU DVD-ROM", 40); /* model */
192 put_le16(p
+ 48, 1); /* dword I/O (XXX: should not be set on CDROM) */
194 put_le16(p
+ 49, 1 << 9 | 1 << 8); /* DMA and LBA supported */
195 put_le16(p
+ 53, 7); /* words 64-70, 54-58, 88 valid */
196 put_le16(p
+ 62, 7); /* single word dma0-2 supported */
197 put_le16(p
+ 63, 7); /* mdma0-2 supported */
198 put_le16(p
+ 64, 0x3f); /* PIO modes supported */
200 put_le16(p
+ 49, 1 << 9); /* LBA supported, no DMA */
201 put_le16(p
+ 53, 3); /* words 64-70, 54-58 valid */
202 put_le16(p
+ 63, 0x103); /* DMA modes XXX: may be incorrect */
203 put_le16(p
+ 64, 1); /* PIO modes */
205 put_le16(p
+ 65, 0xb4); /* minimum DMA multiword tx cycle time */
206 put_le16(p
+ 66, 0xb4); /* recommended DMA multiword tx cycle time */
207 put_le16(p
+ 67, 0x12c); /* minimum PIO cycle time without flow control */
208 put_le16(p
+ 68, 0xb4); /* minimum PIO cycle time with IORDY flow control */
210 put_le16(p
+ 71, 30); /* in ns */
211 put_le16(p
+ 72, 30); /* in ns */
213 put_le16(p
+ 80, 0x1e); /* support up to ATA/ATAPI-4 */
215 put_le16(p
+ 88, 0x3f | (1 << 13)); /* udma5 set and supported */
217 memcpy(s
->identify_data
, p
, sizeof(s
->identify_data
));
221 static void ide_cfata_identify(IDEState
*s
)
226 p
= (uint16_t *) s
->identify_data
;
230 memset(p
, 0, sizeof(s
->identify_data
));
232 cur_sec
= s
->cylinders
* s
->heads
* s
->sectors
;
234 put_le16(p
+ 0, 0x848a); /* CF Storage Card signature */
235 put_le16(p
+ 1, s
->cylinders
); /* Default cylinders */
236 put_le16(p
+ 3, s
->heads
); /* Default heads */
237 put_le16(p
+ 6, s
->sectors
); /* Default sectors per track */
238 put_le16(p
+ 7, s
->nb_sectors
>> 16); /* Sectors per card */
239 put_le16(p
+ 8, s
->nb_sectors
); /* Sectors per card */
240 padstr((char *)(p
+ 10), s
->drive_serial_str
, 20); /* serial number */
241 put_le16(p
+ 22, 0x0004); /* ECC bytes */
242 padstr((char *) (p
+ 23), s
->version
, 8); /* Firmware Revision */
243 padstr((char *) (p
+ 27), "QEMU MICRODRIVE", 40);/* Model number */
244 #if MAX_MULT_SECTORS > 1
245 put_le16(p
+ 47, 0x8000 | MAX_MULT_SECTORS
);
247 put_le16(p
+ 47, 0x0000);
249 put_le16(p
+ 49, 0x0f00); /* Capabilities */
250 put_le16(p
+ 51, 0x0002); /* PIO cycle timing mode */
251 put_le16(p
+ 52, 0x0001); /* DMA cycle timing mode */
252 put_le16(p
+ 53, 0x0003); /* Translation params valid */
253 put_le16(p
+ 54, s
->cylinders
); /* Current cylinders */
254 put_le16(p
+ 55, s
->heads
); /* Current heads */
255 put_le16(p
+ 56, s
->sectors
); /* Current sectors */
256 put_le16(p
+ 57, cur_sec
); /* Current capacity */
257 put_le16(p
+ 58, cur_sec
>> 16); /* Current capacity */
258 if (s
->mult_sectors
) /* Multiple sector setting */
259 put_le16(p
+ 59, 0x100 | s
->mult_sectors
);
260 put_le16(p
+ 60, s
->nb_sectors
); /* Total LBA sectors */
261 put_le16(p
+ 61, s
->nb_sectors
>> 16); /* Total LBA sectors */
262 put_le16(p
+ 63, 0x0203); /* Multiword DMA capability */
263 put_le16(p
+ 64, 0x0001); /* Flow Control PIO support */
264 put_le16(p
+ 65, 0x0096); /* Min. Multiword DMA cycle */
265 put_le16(p
+ 66, 0x0096); /* Rec. Multiword DMA cycle */
266 put_le16(p
+ 68, 0x00b4); /* Min. PIO cycle time */
267 put_le16(p
+ 82, 0x400c); /* Command Set supported */
268 put_le16(p
+ 83, 0x7068); /* Command Set supported */
269 put_le16(p
+ 84, 0x4000); /* Features supported */
270 put_le16(p
+ 85, 0x000c); /* Command Set enabled */
271 put_le16(p
+ 86, 0x7044); /* Command Set enabled */
272 put_le16(p
+ 87, 0x4000); /* Features enabled */
273 put_le16(p
+ 91, 0x4060); /* Current APM level */
274 put_le16(p
+ 129, 0x0002); /* Current features option */
275 put_le16(p
+ 130, 0x0005); /* Reassigned sectors */
276 put_le16(p
+ 131, 0x0001); /* Initial power mode */
277 put_le16(p
+ 132, 0x0000); /* User signature */
278 put_le16(p
+ 160, 0x8100); /* Power requirement */
279 put_le16(p
+ 161, 0x8001); /* CF command set */
284 memcpy(s
->io_buffer
, p
, sizeof(s
->identify_data
));
287 static void ide_set_signature(IDEState
*s
)
289 s
->select
&= 0xf0; /* clear head */
305 static inline void ide_abort_command(IDEState
*s
)
307 s
->status
= READY_STAT
| ERR_STAT
;
311 static inline void ide_dma_submit_check(IDEState
*s
,
312 BlockDriverCompletionFunc
*dma_cb
, BMDMAState
*bm
)
319 /* prepare data transfer and tell what to do after */
320 static void ide_transfer_start(IDEState
*s
, uint8_t *buf
, int size
,
321 EndTransferFunc
*end_transfer_func
)
323 s
->end_transfer_func
= end_transfer_func
;
325 s
->data_end
= buf
+ size
;
326 if (!(s
->status
& ERR_STAT
))
327 s
->status
|= DRQ_STAT
;
330 static void ide_transfer_stop(IDEState
*s
)
332 s
->end_transfer_func
= ide_transfer_stop
;
333 s
->data_ptr
= s
->io_buffer
;
334 s
->data_end
= s
->io_buffer
;
335 s
->status
&= ~DRQ_STAT
;
338 int64_t ide_get_sector(IDEState
*s
)
341 if (s
->select
& 0x40) {
344 sector_num
= ((s
->select
& 0x0f) << 24) | (s
->hcyl
<< 16) |
345 (s
->lcyl
<< 8) | s
->sector
;
347 sector_num
= ((int64_t)s
->hob_hcyl
<< 40) |
348 ((int64_t) s
->hob_lcyl
<< 32) |
349 ((int64_t) s
->hob_sector
<< 24) |
350 ((int64_t) s
->hcyl
<< 16) |
351 ((int64_t) s
->lcyl
<< 8) | s
->sector
;
354 sector_num
= ((s
->hcyl
<< 8) | s
->lcyl
) * s
->heads
* s
->sectors
+
355 (s
->select
& 0x0f) * s
->sectors
+ (s
->sector
- 1);
360 void ide_set_sector(IDEState
*s
, int64_t sector_num
)
363 if (s
->select
& 0x40) {
365 s
->select
= (s
->select
& 0xf0) | (sector_num
>> 24);
366 s
->hcyl
= (sector_num
>> 16);
367 s
->lcyl
= (sector_num
>> 8);
368 s
->sector
= (sector_num
);
370 s
->sector
= sector_num
;
371 s
->lcyl
= sector_num
>> 8;
372 s
->hcyl
= sector_num
>> 16;
373 s
->hob_sector
= sector_num
>> 24;
374 s
->hob_lcyl
= sector_num
>> 32;
375 s
->hob_hcyl
= sector_num
>> 40;
378 cyl
= sector_num
/ (s
->heads
* s
->sectors
);
379 r
= sector_num
% (s
->heads
* s
->sectors
);
382 s
->select
= (s
->select
& 0xf0) | ((r
/ s
->sectors
) & 0x0f);
383 s
->sector
= (r
% s
->sectors
) + 1;
387 static void ide_rw_error(IDEState
*s
) {
388 ide_abort_command(s
);
392 static void ide_sector_read(IDEState
*s
)
397 s
->status
= READY_STAT
| SEEK_STAT
;
398 s
->error
= 0; /* not needed by IDE spec, but needed by Windows */
399 sector_num
= ide_get_sector(s
);
402 /* no more sector to read from disk */
403 ide_transfer_stop(s
);
405 #if defined(DEBUG_IDE)
406 printf("read sector=%" PRId64
"\n", sector_num
);
408 if (n
> s
->req_nb_sectors
)
409 n
= s
->req_nb_sectors
;
410 ret
= bdrv_read(s
->bs
, sector_num
, s
->io_buffer
, n
);
412 if (ide_handle_rw_error(s
, -ret
,
413 BM_STATUS_PIO_RETRY
| BM_STATUS_RETRY_READ
))
418 ide_transfer_start(s
, s
->io_buffer
, 512 * n
, ide_sector_read
);
420 ide_set_sector(s
, sector_num
+ n
);
426 /* return 0 if buffer completed */
427 static int dma_buf_prepare(BMDMAState
*bm
, int is_write
)
429 IDEState
*s
= bmdma_active_if(bm
);
436 qemu_sglist_init(&s
->sg
, s
->nsector
/ (PAGE_SIZE
/ 512) + 1);
437 s
->io_buffer_size
= 0;
439 if (bm
->cur_prd_len
== 0) {
440 /* end of table (with a fail safe of one page) */
441 if (bm
->cur_prd_last
||
442 (bm
->cur_addr
- bm
->addr
) >= PAGE_SIZE
)
443 return s
->io_buffer_size
!= 0;
444 cpu_physical_memory_read(bm
->cur_addr
, (uint8_t *)&prd
, 8);
446 prd
.addr
= le32_to_cpu(prd
.addr
);
447 prd
.size
= le32_to_cpu(prd
.size
);
448 len
= prd
.size
& 0xfffe;
451 bm
->cur_prd_len
= len
;
452 bm
->cur_prd_addr
= prd
.addr
;
453 bm
->cur_prd_last
= (prd
.size
& 0x80000000);
457 qemu_sglist_add(&s
->sg
, bm
->cur_prd_addr
, l
);
458 bm
->cur_prd_addr
+= l
;
459 bm
->cur_prd_len
-= l
;
460 s
->io_buffer_size
+= l
;
466 static void dma_buf_commit(IDEState
*s
, int is_write
)
468 qemu_sglist_destroy(&s
->sg
);
471 void ide_dma_error(IDEState
*s
)
473 ide_transfer_stop(s
);
475 s
->status
= READY_STAT
| ERR_STAT
;
479 static int ide_handle_rw_error(IDEState
*s
, int error
, int op
)
481 int is_read
= (op
& BM_STATUS_RETRY_READ
);
482 BlockInterfaceErrorAction action
= drive_get_on_error(s
->bs
, is_read
);
484 if (action
== BLOCK_ERR_IGNORE
) {
485 bdrv_mon_event(s
->bs
, BDRV_ACTION_IGNORE
, is_read
);
489 if ((error
== ENOSPC
&& action
== BLOCK_ERR_STOP_ENOSPC
)
490 || action
== BLOCK_ERR_STOP_ANY
) {
491 s
->bus
->bmdma
->unit
= s
->unit
;
492 s
->bus
->bmdma
->status
|= op
;
493 bdrv_mon_event(s
->bs
, BDRV_ACTION_STOP
, is_read
);
496 if (op
& BM_STATUS_DMA_RETRY
) {
497 dma_buf_commit(s
, 0);
502 bdrv_mon_event(s
->bs
, BDRV_ACTION_REPORT
, is_read
);
508 /* return 0 if buffer completed */
509 static int dma_buf_rw(BMDMAState
*bm
, int is_write
)
511 IDEState
*s
= bmdma_active_if(bm
);
519 l
= s
->io_buffer_size
- s
->io_buffer_index
;
522 if (bm
->cur_prd_len
== 0) {
523 /* end of table (with a fail safe of one page) */
524 if (bm
->cur_prd_last
||
525 (bm
->cur_addr
- bm
->addr
) >= PAGE_SIZE
)
527 cpu_physical_memory_read(bm
->cur_addr
, (uint8_t *)&prd
, 8);
529 prd
.addr
= le32_to_cpu(prd
.addr
);
530 prd
.size
= le32_to_cpu(prd
.size
);
531 len
= prd
.size
& 0xfffe;
534 bm
->cur_prd_len
= len
;
535 bm
->cur_prd_addr
= prd
.addr
;
536 bm
->cur_prd_last
= (prd
.size
& 0x80000000);
538 if (l
> bm
->cur_prd_len
)
542 cpu_physical_memory_write(bm
->cur_prd_addr
,
543 s
->io_buffer
+ s
->io_buffer_index
, l
);
545 cpu_physical_memory_read(bm
->cur_prd_addr
,
546 s
->io_buffer
+ s
->io_buffer_index
, l
);
548 bm
->cur_prd_addr
+= l
;
549 bm
->cur_prd_len
-= l
;
550 s
->io_buffer_index
+= l
;
556 static void ide_read_dma_cb(void *opaque
, int ret
)
558 BMDMAState
*bm
= opaque
;
559 IDEState
*s
= bmdma_active_if(bm
);
564 if (ide_handle_rw_error(s
, -ret
,
565 BM_STATUS_DMA_RETRY
| BM_STATUS_RETRY_READ
))
571 n
= s
->io_buffer_size
>> 9;
572 sector_num
= ide_get_sector(s
);
574 dma_buf_commit(s
, 1);
576 ide_set_sector(s
, sector_num
);
580 /* end of transfer ? */
581 if (s
->nsector
== 0) {
582 s
->status
= READY_STAT
| SEEK_STAT
;
585 bm
->status
&= ~BM_STATUS_DMAING
;
586 bm
->status
|= BM_STATUS_INT
;
593 /* launch next transfer */
595 s
->io_buffer_index
= 0;
596 s
->io_buffer_size
= n
* 512;
597 if (dma_buf_prepare(bm
, 1) == 0)
600 printf("aio_read: sector_num=%" PRId64
" n=%d\n", sector_num
, n
);
602 bm
->aiocb
= dma_bdrv_read(s
->bs
, &s
->sg
, sector_num
, ide_read_dma_cb
, bm
);
603 ide_dma_submit_check(s
, ide_read_dma_cb
, bm
);
606 static void ide_sector_read_dma(IDEState
*s
)
608 s
->status
= READY_STAT
| SEEK_STAT
| DRQ_STAT
| BUSY_STAT
;
609 s
->io_buffer_index
= 0;
610 s
->io_buffer_size
= 0;
612 ide_dma_start(s
, ide_read_dma_cb
);
615 static void ide_sector_write_timer_cb(void *opaque
)
617 IDEState
*s
= opaque
;
621 static void ide_sector_write(IDEState
*s
)
626 s
->status
= READY_STAT
| SEEK_STAT
;
627 sector_num
= ide_get_sector(s
);
628 #if defined(DEBUG_IDE)
629 printf("write sector=%" PRId64
"\n", sector_num
);
632 if (n
> s
->req_nb_sectors
)
633 n
= s
->req_nb_sectors
;
634 ret
= bdrv_write(s
->bs
, sector_num
, s
->io_buffer
, n
);
637 if (ide_handle_rw_error(s
, -ret
, BM_STATUS_PIO_RETRY
))
642 if (s
->nsector
== 0) {
643 /* no more sectors to write */
644 ide_transfer_stop(s
);
647 if (n1
> s
->req_nb_sectors
)
648 n1
= s
->req_nb_sectors
;
649 ide_transfer_start(s
, s
->io_buffer
, 512 * n1
, ide_sector_write
);
651 ide_set_sector(s
, sector_num
+ n
);
653 if (win2k_install_hack
&& ((++s
->irq_count
% 16) == 0)) {
654 /* It seems there is a bug in the Windows 2000 installer HDD
655 IDE driver which fills the disk with empty logs when the
656 IDE write IRQ comes too early. This hack tries to correct
657 that at the expense of slower write performances. Use this
658 option _only_ to install Windows 2000. You must disable it
660 qemu_mod_timer(s
->sector_write_timer
,
661 qemu_get_clock(vm_clock
) + (get_ticks_per_sec() / 1000));
667 static void ide_dma_restart_bh(void *opaque
)
669 BMDMAState
*bm
= opaque
;
672 qemu_bh_delete(bm
->bh
);
675 is_read
= !!(bm
->status
& BM_STATUS_RETRY_READ
);
677 if (bm
->status
& BM_STATUS_DMA_RETRY
) {
678 bm
->status
&= ~(BM_STATUS_DMA_RETRY
| BM_STATUS_RETRY_READ
);
679 ide_dma_restart(bmdma_active_if(bm
), is_read
);
680 } else if (bm
->status
& BM_STATUS_PIO_RETRY
) {
681 bm
->status
&= ~(BM_STATUS_PIO_RETRY
| BM_STATUS_RETRY_READ
);
683 ide_sector_read(bmdma_active_if(bm
));
685 ide_sector_write(bmdma_active_if(bm
));
690 void ide_dma_restart_cb(void *opaque
, int running
, int reason
)
692 BMDMAState
*bm
= opaque
;
698 bm
->bh
= qemu_bh_new(ide_dma_restart_bh
, bm
);
699 qemu_bh_schedule(bm
->bh
);
703 static void ide_write_dma_cb(void *opaque
, int ret
)
705 BMDMAState
*bm
= opaque
;
706 IDEState
*s
= bmdma_active_if(bm
);
711 if (ide_handle_rw_error(s
, -ret
, BM_STATUS_DMA_RETRY
))
715 n
= s
->io_buffer_size
>> 9;
716 sector_num
= ide_get_sector(s
);
718 dma_buf_commit(s
, 0);
720 ide_set_sector(s
, sector_num
);
724 /* end of transfer ? */
725 if (s
->nsector
== 0) {
726 s
->status
= READY_STAT
| SEEK_STAT
;
729 bm
->status
&= ~BM_STATUS_DMAING
;
730 bm
->status
|= BM_STATUS_INT
;
738 s
->io_buffer_size
= n
* 512;
739 /* launch next transfer */
740 if (dma_buf_prepare(bm
, 0) == 0)
743 printf("aio_write: sector_num=%" PRId64
" n=%d\n", sector_num
, n
);
745 bm
->aiocb
= dma_bdrv_write(s
->bs
, &s
->sg
, sector_num
, ide_write_dma_cb
, bm
);
746 ide_dma_submit_check(s
, ide_write_dma_cb
, bm
);
749 static void ide_sector_write_dma(IDEState
*s
)
751 s
->status
= READY_STAT
| SEEK_STAT
| DRQ_STAT
| BUSY_STAT
;
752 s
->io_buffer_index
= 0;
753 s
->io_buffer_size
= 0;
755 ide_dma_start(s
, ide_write_dma_cb
);
758 void ide_atapi_cmd_ok(IDEState
*s
)
761 s
->status
= READY_STAT
| SEEK_STAT
;
762 s
->nsector
= (s
->nsector
& ~7) | ATAPI_INT_REASON_IO
| ATAPI_INT_REASON_CD
;
766 void ide_atapi_cmd_error(IDEState
*s
, int sense_key
, int asc
)
768 #ifdef DEBUG_IDE_ATAPI
769 printf("atapi_cmd_error: sense=0x%x asc=0x%x\n", sense_key
, asc
);
771 s
->error
= sense_key
<< 4;
772 s
->status
= READY_STAT
| ERR_STAT
;
773 s
->nsector
= (s
->nsector
& ~7) | ATAPI_INT_REASON_IO
| ATAPI_INT_REASON_CD
;
774 s
->sense_key
= sense_key
;
779 static void ide_atapi_cmd_check_status(IDEState
*s
)
781 #ifdef DEBUG_IDE_ATAPI
782 printf("atapi_cmd_check_status\n");
784 s
->error
= MC_ERR
| (SENSE_UNIT_ATTENTION
<< 4);
785 s
->status
= ERR_STAT
;
790 static void ide_flush_cb(void *opaque
, int ret
)
792 IDEState
*s
= opaque
;
794 /* XXX: how do we signal I/O errors here? */
796 s
->status
= READY_STAT
| SEEK_STAT
;
800 static inline void cpu_to_ube16(uint8_t *buf
, int val
)
806 static inline void cpu_to_ube32(uint8_t *buf
, unsigned int val
)
814 static inline int ube16_to_cpu(const uint8_t *buf
)
816 return (buf
[0] << 8) | buf
[1];
819 static inline int ube32_to_cpu(const uint8_t *buf
)
821 return (buf
[0] << 24) | (buf
[1] << 16) | (buf
[2] << 8) | buf
[3];
824 static void lba_to_msf(uint8_t *buf
, int lba
)
827 buf
[0] = (lba
/ 75) / 60;
828 buf
[1] = (lba
/ 75) % 60;
832 static void cd_data_to_raw(uint8_t *buf
, int lba
)
836 memset(buf
+ 1, 0xff, 10);
840 lba_to_msf(buf
, lba
);
841 buf
[3] = 0x01; /* mode 1 data */
845 /* XXX: ECC not computed */
849 static int cd_read_sector(BlockDriverState
*bs
, int lba
, uint8_t *buf
,
854 switch(sector_size
) {
856 ret
= bdrv_read(bs
, (int64_t)lba
<< 2, buf
, 4);
859 ret
= bdrv_read(bs
, (int64_t)lba
<< 2, buf
+ 16, 4);
862 cd_data_to_raw(buf
, lba
);
871 void ide_atapi_io_error(IDEState
*s
, int ret
)
873 /* XXX: handle more errors */
874 if (ret
== -ENOMEDIUM
) {
875 ide_atapi_cmd_error(s
, SENSE_NOT_READY
,
876 ASC_MEDIUM_NOT_PRESENT
);
878 ide_atapi_cmd_error(s
, SENSE_ILLEGAL_REQUEST
,
879 ASC_LOGICAL_BLOCK_OOR
);
883 /* The whole ATAPI transfer logic is handled in this function */
884 static void ide_atapi_cmd_reply_end(IDEState
*s
)
886 int byte_count_limit
, size
, ret
;
887 #ifdef DEBUG_IDE_ATAPI
888 printf("reply: tx_size=%d elem_tx_size=%d index=%d\n",
889 s
->packet_transfer_size
,
890 s
->elementary_transfer_size
,
893 if (s
->packet_transfer_size
<= 0) {
894 /* end of transfer */
895 ide_transfer_stop(s
);
896 s
->status
= READY_STAT
| SEEK_STAT
;
897 s
->nsector
= (s
->nsector
& ~7) | ATAPI_INT_REASON_IO
| ATAPI_INT_REASON_CD
;
899 #ifdef DEBUG_IDE_ATAPI
900 printf("status=0x%x\n", s
->status
);
903 /* see if a new sector must be read */
904 if (s
->lba
!= -1 && s
->io_buffer_index
>= s
->cd_sector_size
) {
905 ret
= cd_read_sector(s
->bs
, s
->lba
, s
->io_buffer
, s
->cd_sector_size
);
907 ide_transfer_stop(s
);
908 ide_atapi_io_error(s
, ret
);
912 s
->io_buffer_index
= 0;
914 if (s
->elementary_transfer_size
> 0) {
915 /* there are some data left to transmit in this elementary
917 size
= s
->cd_sector_size
- s
->io_buffer_index
;
918 if (size
> s
->elementary_transfer_size
)
919 size
= s
->elementary_transfer_size
;
920 ide_transfer_start(s
, s
->io_buffer
+ s
->io_buffer_index
,
921 size
, ide_atapi_cmd_reply_end
);
922 s
->packet_transfer_size
-= size
;
923 s
->elementary_transfer_size
-= size
;
924 s
->io_buffer_index
+= size
;
926 /* a new transfer is needed */
927 s
->nsector
= (s
->nsector
& ~7) | ATAPI_INT_REASON_IO
;
928 byte_count_limit
= s
->lcyl
| (s
->hcyl
<< 8);
929 #ifdef DEBUG_IDE_ATAPI
930 printf("byte_count_limit=%d\n", byte_count_limit
);
932 if (byte_count_limit
== 0xffff)
934 size
= s
->packet_transfer_size
;
935 if (size
> byte_count_limit
) {
936 /* byte count limit must be even if this case */
937 if (byte_count_limit
& 1)
939 size
= byte_count_limit
;
943 s
->elementary_transfer_size
= size
;
944 /* we cannot transmit more than one sector at a time */
946 if (size
> (s
->cd_sector_size
- s
->io_buffer_index
))
947 size
= (s
->cd_sector_size
- s
->io_buffer_index
);
949 ide_transfer_start(s
, s
->io_buffer
+ s
->io_buffer_index
,
950 size
, ide_atapi_cmd_reply_end
);
951 s
->packet_transfer_size
-= size
;
952 s
->elementary_transfer_size
-= size
;
953 s
->io_buffer_index
+= size
;
955 #ifdef DEBUG_IDE_ATAPI
956 printf("status=0x%x\n", s
->status
);
962 /* send a reply of 'size' bytes in s->io_buffer to an ATAPI command */
963 static void ide_atapi_cmd_reply(IDEState
*s
, int size
, int max_size
)
967 s
->lba
= -1; /* no sector read */
968 s
->packet_transfer_size
= size
;
969 s
->io_buffer_size
= size
; /* dma: send the reply data as one chunk */
970 s
->elementary_transfer_size
= 0;
971 s
->io_buffer_index
= 0;
974 s
->status
= READY_STAT
| SEEK_STAT
| DRQ_STAT
;
975 ide_dma_start(s
, ide_atapi_cmd_read_dma_cb
);
977 s
->status
= READY_STAT
| SEEK_STAT
;
978 ide_atapi_cmd_reply_end(s
);
982 /* start a CD-CDROM read command */
983 static void ide_atapi_cmd_read_pio(IDEState
*s
, int lba
, int nb_sectors
,
987 s
->packet_transfer_size
= nb_sectors
* sector_size
;
988 s
->elementary_transfer_size
= 0;
989 s
->io_buffer_index
= sector_size
;
990 s
->cd_sector_size
= sector_size
;
992 s
->status
= READY_STAT
| SEEK_STAT
;
993 ide_atapi_cmd_reply_end(s
);
996 /* ATAPI DMA support */
998 /* XXX: handle read errors */
999 static void ide_atapi_cmd_read_dma_cb(void *opaque
, int ret
)
1001 BMDMAState
*bm
= opaque
;
1002 IDEState
*s
= bmdma_active_if(bm
);
1006 ide_atapi_io_error(s
, ret
);
1010 if (s
->io_buffer_size
> 0) {
1012 * For a cdrom read sector command (s->lba != -1),
1013 * adjust the lba for the next s->io_buffer_size chunk
1014 * and dma the current chunk.
1015 * For a command != read (s->lba == -1), just transfer
1019 if (s
->cd_sector_size
== 2352) {
1021 cd_data_to_raw(s
->io_buffer
, s
->lba
);
1023 n
= s
->io_buffer_size
>> 11;
1027 s
->packet_transfer_size
-= s
->io_buffer_size
;
1028 if (dma_buf_rw(bm
, 1) == 0)
1032 if (s
->packet_transfer_size
<= 0) {
1033 s
->status
= READY_STAT
| SEEK_STAT
;
1034 s
->nsector
= (s
->nsector
& ~7) | ATAPI_INT_REASON_IO
| ATAPI_INT_REASON_CD
;
1035 ide_set_irq(s
->bus
);
1037 bm
->status
&= ~BM_STATUS_DMAING
;
1038 bm
->status
|= BM_STATUS_INT
;
1045 s
->io_buffer_index
= 0;
1046 if (s
->cd_sector_size
== 2352) {
1048 s
->io_buffer_size
= s
->cd_sector_size
;
1051 n
= s
->packet_transfer_size
>> 11;
1052 if (n
> (IDE_DMA_BUF_SECTORS
/ 4))
1053 n
= (IDE_DMA_BUF_SECTORS
/ 4);
1054 s
->io_buffer_size
= n
* 2048;
1058 printf("aio_read_cd: lba=%u n=%d\n", s
->lba
, n
);
1060 bm
->iov
.iov_base
= (void *)(s
->io_buffer
+ data_offset
);
1061 bm
->iov
.iov_len
= n
* 4 * 512;
1062 qemu_iovec_init_external(&bm
->qiov
, &bm
->iov
, 1);
1063 bm
->aiocb
= bdrv_aio_readv(s
->bs
, (int64_t)s
->lba
<< 2, &bm
->qiov
,
1064 n
* 4, ide_atapi_cmd_read_dma_cb
, bm
);
1066 /* Note: media not present is the most likely case */
1067 ide_atapi_cmd_error(s
, SENSE_NOT_READY
,
1068 ASC_MEDIUM_NOT_PRESENT
);
1073 /* start a CD-CDROM read command with DMA */
1074 /* XXX: test if DMA is available */
1075 static void ide_atapi_cmd_read_dma(IDEState
*s
, int lba
, int nb_sectors
,
1079 s
->packet_transfer_size
= nb_sectors
* sector_size
;
1080 s
->io_buffer_index
= 0;
1081 s
->io_buffer_size
= 0;
1082 s
->cd_sector_size
= sector_size
;
1084 /* XXX: check if BUSY_STAT should be set */
1085 s
->status
= READY_STAT
| SEEK_STAT
| DRQ_STAT
| BUSY_STAT
;
1086 ide_dma_start(s
, ide_atapi_cmd_read_dma_cb
);
1089 static void ide_atapi_cmd_read(IDEState
*s
, int lba
, int nb_sectors
,
1092 #ifdef DEBUG_IDE_ATAPI
1093 printf("read %s: LBA=%d nb_sectors=%d\n", s
->atapi_dma
? "dma" : "pio",
1097 ide_atapi_cmd_read_dma(s
, lba
, nb_sectors
, sector_size
);
1099 ide_atapi_cmd_read_pio(s
, lba
, nb_sectors
, sector_size
);
1103 static inline uint8_t ide_atapi_set_profile(uint8_t *buf
, uint8_t *index
,
1106 uint8_t *buf_profile
= buf
+ 12; /* start of profiles */
1108 buf_profile
+= ((*index
) * 4); /* start of indexed profile */
1109 cpu_to_ube16 (buf_profile
, profile
);
1110 buf_profile
[2] = ((buf_profile
[0] == buf
[6]) && (buf_profile
[1] == buf
[7]));
1112 /* each profile adds 4 bytes to the response */
1114 buf
[11] += 4; /* Additional Length */
1119 static int ide_dvd_read_structure(IDEState
*s
, int format
,
1120 const uint8_t *packet
, uint8_t *buf
)
1123 case 0x0: /* Physical format information */
1125 int layer
= packet
[6];
1126 uint64_t total_sectors
;
1129 return -ASC_INV_FIELD_IN_CMD_PACKET
;
1131 bdrv_get_geometry(s
->bs
, &total_sectors
);
1132 total_sectors
>>= 2;
1133 if (total_sectors
== 0)
1134 return -ASC_MEDIUM_NOT_PRESENT
;
1136 buf
[4] = 1; /* DVD-ROM, part version 1 */
1137 buf
[5] = 0xf; /* 120mm disc, minimum rate unspecified */
1138 buf
[6] = 1; /* one layer, read-only (per MMC-2 spec) */
1139 buf
[7] = 0; /* default densities */
1141 /* FIXME: 0x30000 per spec? */
1142 cpu_to_ube32(buf
+ 8, 0); /* start sector */
1143 cpu_to_ube32(buf
+ 12, total_sectors
- 1); /* end sector */
1144 cpu_to_ube32(buf
+ 16, total_sectors
- 1); /* l0 end sector */
1146 /* Size of buffer, not including 2 byte size field */
1147 cpu_to_be16wu((uint16_t *)buf
, 2048 + 2);
1149 /* 2k data + 4 byte header */
1153 case 0x01: /* DVD copyright information */
1154 buf
[4] = 0; /* no copyright data */
1155 buf
[5] = 0; /* no region restrictions */
1157 /* Size of buffer, not including 2 byte size field */
1158 cpu_to_be16wu((uint16_t *)buf
, 4 + 2);
1160 /* 4 byte header + 4 byte data */
1163 case 0x03: /* BCA information - invalid field for no BCA info */
1164 return -ASC_INV_FIELD_IN_CMD_PACKET
;
1166 case 0x04: /* DVD disc manufacturing information */
1167 /* Size of buffer, not including 2 byte size field */
1168 cpu_to_be16wu((uint16_t *)buf
, 2048 + 2);
1170 /* 2k data + 4 byte header */
1175 * This lists all the command capabilities above. Add new ones
1176 * in order and update the length and buffer return values.
1179 buf
[4] = 0x00; /* Physical format */
1180 buf
[5] = 0x40; /* Not writable, is readable */
1181 cpu_to_be16wu((uint16_t *)(buf
+ 6), 2048 + 4);
1183 buf
[8] = 0x01; /* Copyright info */
1184 buf
[9] = 0x40; /* Not writable, is readable */
1185 cpu_to_be16wu((uint16_t *)(buf
+ 10), 4 + 4);
1187 buf
[12] = 0x03; /* BCA info */
1188 buf
[13] = 0x40; /* Not writable, is readable */
1189 cpu_to_be16wu((uint16_t *)(buf
+ 14), 188 + 4);
1191 buf
[16] = 0x04; /* Manufacturing info */
1192 buf
[17] = 0x40; /* Not writable, is readable */
1193 cpu_to_be16wu((uint16_t *)(buf
+ 18), 2048 + 4);
1195 /* Size of buffer, not including 2 byte size field */
1196 cpu_to_be16wu((uint16_t *)buf
, 16 + 2);
1198 /* data written + 4 byte header */
1201 default: /* TODO: formats beyond DVD-ROM requires */
1202 return -ASC_INV_FIELD_IN_CMD_PACKET
;
1206 static void ide_atapi_cmd(IDEState
*s
)
1208 const uint8_t *packet
;
1212 packet
= s
->io_buffer
;
1214 #ifdef DEBUG_IDE_ATAPI
1217 printf("ATAPI limit=0x%x packet:", s
->lcyl
| (s
->hcyl
<< 8));
1218 for(i
= 0; i
< ATAPI_PACKET_SIZE
; i
++) {
1219 printf(" %02x", packet
[i
]);
1224 /* If there's a UNIT_ATTENTION condition pending, only
1225 REQUEST_SENSE and INQUIRY commands are allowed to complete. */
1226 if (s
->sense_key
== SENSE_UNIT_ATTENTION
&&
1227 s
->io_buffer
[0] != GPCMD_REQUEST_SENSE
&&
1228 s
->io_buffer
[0] != GPCMD_INQUIRY
) {
1229 ide_atapi_cmd_check_status(s
);
1232 switch(s
->io_buffer
[0]) {
1233 case GPCMD_TEST_UNIT_READY
:
1234 if (bdrv_is_inserted(s
->bs
) && !s
->cdrom_changed
) {
1235 ide_atapi_cmd_ok(s
);
1237 s
->cdrom_changed
= 0;
1238 ide_atapi_cmd_error(s
, SENSE_NOT_READY
,
1239 ASC_MEDIUM_NOT_PRESENT
);
1242 case GPCMD_MODE_SENSE_6
:
1243 case GPCMD_MODE_SENSE_10
:
1246 if (packet
[0] == GPCMD_MODE_SENSE_10
)
1247 max_len
= ube16_to_cpu(packet
+ 7);
1249 max_len
= packet
[4];
1250 action
= packet
[2] >> 6;
1251 code
= packet
[2] & 0x3f;
1253 case 0: /* current values */
1255 case GPMODE_R_W_ERROR_PAGE
: /* error recovery */
1256 cpu_to_ube16(&buf
[0], 16 + 6);
1272 ide_atapi_cmd_reply(s
, 16, max_len
);
1274 case GPMODE_AUDIO_CTL_PAGE
:
1275 cpu_to_ube16(&buf
[0], 24 + 6);
1283 /* Fill with CDROM audio volume */
1289 ide_atapi_cmd_reply(s
, 24, max_len
);
1291 case GPMODE_CAPABILITIES_PAGE
:
1292 cpu_to_ube16(&buf
[0], 28 + 6);
1305 /* Claim PLAY_AUDIO capability (0x01) since some Linux
1306 code checks for this to automount media. */
1309 buf
[14] = (1 << 0) | (1 << 3) | (1 << 5);
1310 if (bdrv_is_locked(s
->bs
))
1313 cpu_to_ube16(&buf
[16], 706);
1316 cpu_to_ube16(&buf
[20], 512);
1317 cpu_to_ube16(&buf
[22], 706);
1322 ide_atapi_cmd_reply(s
, 28, max_len
);
1328 case 1: /* changeable values */
1330 case 2: /* default values */
1333 case 3: /* saved values */
1334 ide_atapi_cmd_error(s
, SENSE_ILLEGAL_REQUEST
,
1335 ASC_SAVING_PARAMETERS_NOT_SUPPORTED
);
1340 case GPCMD_REQUEST_SENSE
:
1341 max_len
= packet
[4];
1343 buf
[0] = 0x70 | (1 << 7);
1344 buf
[2] = s
->sense_key
;
1347 if (s
->sense_key
== SENSE_UNIT_ATTENTION
)
1348 s
->sense_key
= SENSE_NONE
;
1349 ide_atapi_cmd_reply(s
, 18, max_len
);
1351 case GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL
:
1352 if (bdrv_is_inserted(s
->bs
)) {
1353 bdrv_set_locked(s
->bs
, packet
[4] & 1);
1354 ide_atapi_cmd_ok(s
);
1356 ide_atapi_cmd_error(s
, SENSE_NOT_READY
,
1357 ASC_MEDIUM_NOT_PRESENT
);
1363 int nb_sectors
, lba
;
1365 if (packet
[0] == GPCMD_READ_10
)
1366 nb_sectors
= ube16_to_cpu(packet
+ 7);
1368 nb_sectors
= ube32_to_cpu(packet
+ 6);
1369 lba
= ube32_to_cpu(packet
+ 2);
1370 if (nb_sectors
== 0) {
1371 ide_atapi_cmd_ok(s
);
1374 ide_atapi_cmd_read(s
, lba
, nb_sectors
, 2048);
1379 int nb_sectors
, lba
, transfer_request
;
1381 nb_sectors
= (packet
[6] << 16) | (packet
[7] << 8) | packet
[8];
1382 lba
= ube32_to_cpu(packet
+ 2);
1383 if (nb_sectors
== 0) {
1384 ide_atapi_cmd_ok(s
);
1387 transfer_request
= packet
[9];
1388 switch(transfer_request
& 0xf8) {
1391 ide_atapi_cmd_ok(s
);
1395 ide_atapi_cmd_read(s
, lba
, nb_sectors
, 2048);
1399 ide_atapi_cmd_read(s
, lba
, nb_sectors
, 2352);
1402 ide_atapi_cmd_error(s
, SENSE_ILLEGAL_REQUEST
,
1403 ASC_INV_FIELD_IN_CMD_PACKET
);
1411 uint64_t total_sectors
;
1413 bdrv_get_geometry(s
->bs
, &total_sectors
);
1414 total_sectors
>>= 2;
1415 if (total_sectors
== 0) {
1416 ide_atapi_cmd_error(s
, SENSE_NOT_READY
,
1417 ASC_MEDIUM_NOT_PRESENT
);
1420 lba
= ube32_to_cpu(packet
+ 2);
1421 if (lba
>= total_sectors
) {
1422 ide_atapi_cmd_error(s
, SENSE_ILLEGAL_REQUEST
,
1423 ASC_LOGICAL_BLOCK_OOR
);
1426 ide_atapi_cmd_ok(s
);
1429 case GPCMD_START_STOP_UNIT
:
1431 int start
, eject
, err
= 0;
1432 start
= packet
[4] & 1;
1433 eject
= (packet
[4] >> 1) & 1;
1436 err
= bdrv_eject(s
->bs
, !start
);
1441 ide_atapi_cmd_ok(s
);
1444 ide_atapi_cmd_error(s
, SENSE_NOT_READY
,
1445 ASC_MEDIA_REMOVAL_PREVENTED
);
1448 ide_atapi_cmd_error(s
, SENSE_NOT_READY
,
1449 ASC_MEDIUM_NOT_PRESENT
);
1454 case GPCMD_MECHANISM_STATUS
:
1456 max_len
= ube16_to_cpu(packet
+ 8);
1457 cpu_to_ube16(buf
, 0);
1458 /* no current LBA */
1463 cpu_to_ube16(buf
+ 6, 0);
1464 ide_atapi_cmd_reply(s
, 8, max_len
);
1467 case GPCMD_READ_TOC_PMA_ATIP
:
1469 int format
, msf
, start_track
, len
;
1470 uint64_t total_sectors
;
1472 bdrv_get_geometry(s
->bs
, &total_sectors
);
1473 total_sectors
>>= 2;
1474 if (total_sectors
== 0) {
1475 ide_atapi_cmd_error(s
, SENSE_NOT_READY
,
1476 ASC_MEDIUM_NOT_PRESENT
);
1479 max_len
= ube16_to_cpu(packet
+ 7);
1480 format
= packet
[9] >> 6;
1481 msf
= (packet
[1] >> 1) & 1;
1482 start_track
= packet
[6];
1485 len
= cdrom_read_toc(total_sectors
, buf
, msf
, start_track
);
1488 ide_atapi_cmd_reply(s
, len
, max_len
);
1491 /* multi session : only a single session defined */
1496 ide_atapi_cmd_reply(s
, 12, max_len
);
1499 len
= cdrom_read_toc_raw(total_sectors
, buf
, msf
, start_track
);
1502 ide_atapi_cmd_reply(s
, len
, max_len
);
1506 ide_atapi_cmd_error(s
, SENSE_ILLEGAL_REQUEST
,
1507 ASC_INV_FIELD_IN_CMD_PACKET
);
1512 case GPCMD_READ_CDVD_CAPACITY
:
1514 uint64_t total_sectors
;
1516 bdrv_get_geometry(s
->bs
, &total_sectors
);
1517 total_sectors
>>= 2;
1518 if (total_sectors
== 0) {
1519 ide_atapi_cmd_error(s
, SENSE_NOT_READY
,
1520 ASC_MEDIUM_NOT_PRESENT
);
1523 /* NOTE: it is really the number of sectors minus 1 */
1524 cpu_to_ube32(buf
, total_sectors
- 1);
1525 cpu_to_ube32(buf
+ 4, 2048);
1526 ide_atapi_cmd_reply(s
, 8, 8);
1529 case GPCMD_READ_DVD_STRUCTURE
:
1531 int media
= packet
[1];
1532 int format
= packet
[7];
1535 max_len
= ube16_to_cpu(packet
+ 8);
1537 if (format
< 0xff) {
1538 if (media_is_cd(s
)) {
1539 ide_atapi_cmd_error(s
, SENSE_ILLEGAL_REQUEST
,
1540 ASC_INCOMPATIBLE_FORMAT
);
1542 } else if (!media_present(s
)) {
1543 ide_atapi_cmd_error(s
, SENSE_ILLEGAL_REQUEST
,
1544 ASC_INV_FIELD_IN_CMD_PACKET
);
1549 memset(buf
, 0, max_len
> IDE_DMA_BUF_SECTORS
* 512 + 4 ?
1550 IDE_DMA_BUF_SECTORS
* 512 + 4 : max_len
);
1556 ret
= ide_dvd_read_structure(s
, format
, packet
, buf
);
1559 ide_atapi_cmd_error(s
, SENSE_ILLEGAL_REQUEST
, -ret
);
1561 ide_atapi_cmd_reply(s
, ret
, max_len
);
1565 /* TODO: BD support, fall through for now */
1567 /* Generic disk structures */
1568 case 0x80: /* TODO: AACS volume identifier */
1569 case 0x81: /* TODO: AACS media serial number */
1570 case 0x82: /* TODO: AACS media identifier */
1571 case 0x83: /* TODO: AACS media key block */
1572 case 0x90: /* TODO: List of recognized format layers */
1573 case 0xc0: /* TODO: Write protection status */
1575 ide_atapi_cmd_error(s
, SENSE_ILLEGAL_REQUEST
,
1576 ASC_INV_FIELD_IN_CMD_PACKET
);
1581 case GPCMD_SET_SPEED
:
1582 ide_atapi_cmd_ok(s
);
1585 max_len
= packet
[4];
1586 buf
[0] = 0x05; /* CD-ROM */
1587 buf
[1] = 0x80; /* removable */
1588 buf
[2] = 0x00; /* ISO */
1589 buf
[3] = 0x21; /* ATAPI-2 (XXX: put ATAPI-4 ?) */
1590 buf
[4] = 31; /* additional length */
1591 buf
[5] = 0; /* reserved */
1592 buf
[6] = 0; /* reserved */
1593 buf
[7] = 0; /* reserved */
1594 padstr8(buf
+ 8, 8, "QEMU");
1595 padstr8(buf
+ 16, 16, "QEMU DVD-ROM");
1596 padstr8(buf
+ 32, 4, s
->version
);
1597 ide_atapi_cmd_reply(s
, 36, max_len
);
1599 case GPCMD_GET_CONFIGURATION
:
1604 /* only feature 0 is supported */
1605 if (packet
[2] != 0 || packet
[3] != 0) {
1606 ide_atapi_cmd_error(s
, SENSE_ILLEGAL_REQUEST
,
1607 ASC_INV_FIELD_IN_CMD_PACKET
);
1611 /* XXX: could result in alignment problems in some architectures */
1612 max_len
= ube16_to_cpu(packet
+ 7);
1615 * XXX: avoid overflow for io_buffer if max_len is bigger than
1616 * the size of that buffer (dimensioned to max number of
1617 * sectors to transfer at once)
1619 * Only a problem if the feature/profiles grow.
1621 if (max_len
> 512) /* XXX: assume 1 sector */
1624 memset(buf
, 0, max_len
);
1626 * the number of sectors from the media tells us which profile
1627 * to use as current. 0 means there is no media
1629 if (media_is_dvd(s
))
1630 cpu_to_ube16(buf
+ 6, MMC_PROFILE_DVD_ROM
);
1631 else if (media_is_cd(s
))
1632 cpu_to_ube16(buf
+ 6, MMC_PROFILE_CD_ROM
);
1634 buf
[10] = 0x02 | 0x01; /* persistent and current */
1635 len
= 12; /* headers: 8 + 4 */
1636 len
+= ide_atapi_set_profile(buf
, &index
, MMC_PROFILE_DVD_ROM
);
1637 len
+= ide_atapi_set_profile(buf
, &index
, MMC_PROFILE_CD_ROM
);
1638 cpu_to_ube32(buf
, len
- 4); /* data length */
1640 ide_atapi_cmd_reply(s
, len
, max_len
);
1644 ide_atapi_cmd_error(s
, SENSE_ILLEGAL_REQUEST
,
1645 ASC_ILLEGAL_OPCODE
);
1650 static void ide_cfata_metadata_inquiry(IDEState
*s
)
1655 p
= (uint16_t *) s
->io_buffer
;
1656 memset(p
, 0, 0x200);
1657 spd
= ((s
->mdata_size
- 1) >> 9) + 1;
1659 put_le16(p
+ 0, 0x0001); /* Data format revision */
1660 put_le16(p
+ 1, 0x0000); /* Media property: silicon */
1661 put_le16(p
+ 2, s
->media_changed
); /* Media status */
1662 put_le16(p
+ 3, s
->mdata_size
& 0xffff); /* Capacity in bytes (low) */
1663 put_le16(p
+ 4, s
->mdata_size
>> 16); /* Capacity in bytes (high) */
1664 put_le16(p
+ 5, spd
& 0xffff); /* Sectors per device (low) */
1665 put_le16(p
+ 6, spd
>> 16); /* Sectors per device (high) */
1668 static void ide_cfata_metadata_read(IDEState
*s
)
1672 if (((s
->hcyl
<< 16) | s
->lcyl
) << 9 > s
->mdata_size
+ 2) {
1673 s
->status
= ERR_STAT
;
1674 s
->error
= ABRT_ERR
;
1678 p
= (uint16_t *) s
->io_buffer
;
1679 memset(p
, 0, 0x200);
1681 put_le16(p
+ 0, s
->media_changed
); /* Media status */
1682 memcpy(p
+ 1, s
->mdata_storage
+ (((s
->hcyl
<< 16) | s
->lcyl
) << 9),
1683 MIN(MIN(s
->mdata_size
- (((s
->hcyl
<< 16) | s
->lcyl
) << 9),
1684 s
->nsector
<< 9), 0x200 - 2));
1687 static void ide_cfata_metadata_write(IDEState
*s
)
1689 if (((s
->hcyl
<< 16) | s
->lcyl
) << 9 > s
->mdata_size
+ 2) {
1690 s
->status
= ERR_STAT
;
1691 s
->error
= ABRT_ERR
;
1695 s
->media_changed
= 0;
1697 memcpy(s
->mdata_storage
+ (((s
->hcyl
<< 16) | s
->lcyl
) << 9),
1699 MIN(MIN(s
->mdata_size
- (((s
->hcyl
<< 16) | s
->lcyl
) << 9),
1700 s
->nsector
<< 9), 0x200 - 2));
1703 /* called when the inserted state of the media has changed */
1704 static void cdrom_change_cb(void *opaque
)
1706 IDEState
*s
= opaque
;
1707 uint64_t nb_sectors
;
1709 bdrv_get_geometry(s
->bs
, &nb_sectors
);
1710 s
->nb_sectors
= nb_sectors
;
1712 s
->sense_key
= SENSE_UNIT_ATTENTION
;
1713 s
->asc
= ASC_MEDIUM_MAY_HAVE_CHANGED
;
1714 s
->cdrom_changed
= 1;
1715 ide_set_irq(s
->bus
);
1718 static void ide_cmd_lba48_transform(IDEState
*s
, int lba48
)
1722 /* handle the 'magic' 0 nsector count conversion here. to avoid
1723 * fiddling with the rest of the read logic, we just store the
1724 * full sector count in ->nsector and ignore ->hob_nsector from now
1730 if (!s
->nsector
&& !s
->hob_nsector
)
1733 int lo
= s
->nsector
;
1734 int hi
= s
->hob_nsector
;
1736 s
->nsector
= (hi
<< 8) | lo
;
1741 static void ide_clear_hob(IDEBus
*bus
)
1743 /* any write clears HOB high bit of device control register */
1744 bus
->ifs
[0].select
&= ~(1 << 7);
1745 bus
->ifs
[1].select
&= ~(1 << 7);
1748 void ide_ioport_write(void *opaque
, uint32_t addr
, uint32_t val
)
1750 IDEBus
*bus
= opaque
;
1756 printf("IDE: write addr=0x%x val=0x%02x\n", addr
, val
);
1761 /* ignore writes to command block while busy with previous command */
1762 if (addr
!= 7 && (idebus_active_if(bus
)->status
& (BUSY_STAT
|DRQ_STAT
)))
1770 /* NOTE: data is written to the two drives */
1771 bus
->ifs
[0].hob_feature
= bus
->ifs
[0].feature
;
1772 bus
->ifs
[1].hob_feature
= bus
->ifs
[1].feature
;
1773 bus
->ifs
[0].feature
= val
;
1774 bus
->ifs
[1].feature
= val
;
1778 bus
->ifs
[0].hob_nsector
= bus
->ifs
[0].nsector
;
1779 bus
->ifs
[1].hob_nsector
= bus
->ifs
[1].nsector
;
1780 bus
->ifs
[0].nsector
= val
;
1781 bus
->ifs
[1].nsector
= val
;
1785 bus
->ifs
[0].hob_sector
= bus
->ifs
[0].sector
;
1786 bus
->ifs
[1].hob_sector
= bus
->ifs
[1].sector
;
1787 bus
->ifs
[0].sector
= val
;
1788 bus
->ifs
[1].sector
= val
;
1792 bus
->ifs
[0].hob_lcyl
= bus
->ifs
[0].lcyl
;
1793 bus
->ifs
[1].hob_lcyl
= bus
->ifs
[1].lcyl
;
1794 bus
->ifs
[0].lcyl
= val
;
1795 bus
->ifs
[1].lcyl
= val
;
1799 bus
->ifs
[0].hob_hcyl
= bus
->ifs
[0].hcyl
;
1800 bus
->ifs
[1].hob_hcyl
= bus
->ifs
[1].hcyl
;
1801 bus
->ifs
[0].hcyl
= val
;
1802 bus
->ifs
[1].hcyl
= val
;
1805 /* FIXME: HOB readback uses bit 7 */
1806 bus
->ifs
[0].select
= (val
& ~0x10) | 0xa0;
1807 bus
->ifs
[1].select
= (val
| 0x10) | 0xa0;
1809 bus
->unit
= (val
>> 4) & 1;
1814 #if defined(DEBUG_IDE)
1815 printf("ide: CMD=%02x\n", val
);
1817 s
= idebus_active_if(bus
);
1818 /* ignore commands to non existant slave */
1819 if (s
!= bus
->ifs
&& !s
->bs
)
1822 /* Only DEVICE RESET is allowed while BSY or/and DRQ are set */
1823 if ((s
->status
& (BUSY_STAT
|DRQ_STAT
)) && val
!= WIN_DEVICE_RESET
)
1828 if (s
->bs
&& !s
->is_cdrom
) {
1832 ide_cfata_identify(s
);
1833 s
->status
= READY_STAT
| SEEK_STAT
;
1834 ide_transfer_start(s
, s
->io_buffer
, 512, ide_transfer_stop
);
1837 ide_set_signature(s
);
1839 ide_abort_command(s
);
1841 ide_set_irq(s
->bus
);
1846 s
->status
= READY_STAT
| SEEK_STAT
;
1847 ide_set_irq(s
->bus
);
1850 if (s
->is_cf
&& s
->nsector
== 0) {
1851 /* Disable Read and Write Multiple */
1852 s
->mult_sectors
= 0;
1853 s
->status
= READY_STAT
| SEEK_STAT
;
1854 } else if ((s
->nsector
& 0xff) != 0 &&
1855 ((s
->nsector
& 0xff) > MAX_MULT_SECTORS
||
1856 (s
->nsector
& (s
->nsector
- 1)) != 0)) {
1857 ide_abort_command(s
);
1859 s
->mult_sectors
= s
->nsector
& 0xff;
1860 s
->status
= READY_STAT
| SEEK_STAT
;
1862 ide_set_irq(s
->bus
);
1864 case WIN_VERIFY_EXT
:
1867 case WIN_VERIFY_ONCE
:
1868 /* do sector number check ? */
1869 ide_cmd_lba48_transform(s
, lba48
);
1870 s
->status
= READY_STAT
| SEEK_STAT
;
1871 ide_set_irq(s
->bus
);
1879 ide_cmd_lba48_transform(s
, lba48
);
1880 s
->req_nb_sectors
= 1;
1886 case WIN_WRITE_ONCE
:
1887 case CFA_WRITE_SECT_WO_ERASE
:
1888 case WIN_WRITE_VERIFY
:
1889 ide_cmd_lba48_transform(s
, lba48
);
1891 s
->status
= SEEK_STAT
| READY_STAT
;
1892 s
->req_nb_sectors
= 1;
1893 ide_transfer_start(s
, s
->io_buffer
, 512, ide_sector_write
);
1894 s
->media_changed
= 1;
1896 case WIN_MULTREAD_EXT
:
1899 if (!s
->mult_sectors
)
1901 ide_cmd_lba48_transform(s
, lba48
);
1902 s
->req_nb_sectors
= s
->mult_sectors
;
1905 case WIN_MULTWRITE_EXT
:
1908 case CFA_WRITE_MULTI_WO_ERASE
:
1909 if (!s
->mult_sectors
)
1911 ide_cmd_lba48_transform(s
, lba48
);
1913 s
->status
= SEEK_STAT
| READY_STAT
;
1914 s
->req_nb_sectors
= s
->mult_sectors
;
1916 if (n
> s
->req_nb_sectors
)
1917 n
= s
->req_nb_sectors
;
1918 ide_transfer_start(s
, s
->io_buffer
, 512 * n
, ide_sector_write
);
1919 s
->media_changed
= 1;
1921 case WIN_READDMA_EXT
:
1924 case WIN_READDMA_ONCE
:
1927 ide_cmd_lba48_transform(s
, lba48
);
1928 ide_sector_read_dma(s
);
1930 case WIN_WRITEDMA_EXT
:
1933 case WIN_WRITEDMA_ONCE
:
1936 ide_cmd_lba48_transform(s
, lba48
);
1937 ide_sector_write_dma(s
);
1938 s
->media_changed
= 1;
1940 case WIN_READ_NATIVE_MAX_EXT
:
1942 case WIN_READ_NATIVE_MAX
:
1943 ide_cmd_lba48_transform(s
, lba48
);
1944 ide_set_sector(s
, s
->nb_sectors
- 1);
1945 s
->status
= READY_STAT
| SEEK_STAT
;
1946 ide_set_irq(s
->bus
);
1948 case WIN_CHECKPOWERMODE1
:
1949 case WIN_CHECKPOWERMODE2
:
1950 s
->nsector
= 0xff; /* device active or idle */
1951 s
->status
= READY_STAT
| SEEK_STAT
;
1952 ide_set_irq(s
->bus
);
1954 case WIN_SETFEATURES
:
1957 /* XXX: valid for CDROM ? */
1958 switch(s
->feature
) {
1959 case 0xcc: /* reverting to power-on defaults enable */
1960 case 0x66: /* reverting to power-on defaults disable */
1961 case 0x02: /* write cache enable */
1962 case 0x82: /* write cache disable */
1963 case 0xaa: /* read look-ahead enable */
1964 case 0x55: /* read look-ahead disable */
1965 case 0x05: /* set advanced power management mode */
1966 case 0x85: /* disable advanced power management mode */
1967 case 0x69: /* NOP */
1968 case 0x67: /* NOP */
1969 case 0x96: /* NOP */
1970 case 0x9a: /* NOP */
1971 case 0x42: /* enable Automatic Acoustic Mode */
1972 case 0xc2: /* disable Automatic Acoustic Mode */
1973 s
->status
= READY_STAT
| SEEK_STAT
;
1974 ide_set_irq(s
->bus
);
1976 case 0x03: { /* set transfer mode */
1977 uint8_t val
= s
->nsector
& 0x07;
1978 uint16_t *identify_data
= (uint16_t *)s
->identify_data
;
1980 switch (s
->nsector
>> 3) {
1981 case 0x00: /* pio default */
1982 case 0x01: /* pio mode */
1983 put_le16(identify_data
+ 62,0x07);
1984 put_le16(identify_data
+ 63,0x07);
1985 put_le16(identify_data
+ 88,0x3f);
1987 case 0x02: /* sigle word dma mode*/
1988 put_le16(identify_data
+ 62,0x07 | (1 << (val
+ 8)));
1989 put_le16(identify_data
+ 63,0x07);
1990 put_le16(identify_data
+ 88,0x3f);
1992 case 0x04: /* mdma mode */
1993 put_le16(identify_data
+ 62,0x07);
1994 put_le16(identify_data
+ 63,0x07 | (1 << (val
+ 8)));
1995 put_le16(identify_data
+ 88,0x3f);
1997 case 0x08: /* udma mode */
1998 put_le16(identify_data
+ 62,0x07);
1999 put_le16(identify_data
+ 63,0x07);
2000 put_le16(identify_data
+ 88,0x3f | (1 << (val
+ 8)));
2005 s
->status
= READY_STAT
| SEEK_STAT
;
2006 ide_set_irq(s
->bus
);
2013 case WIN_FLUSH_CACHE
:
2014 case WIN_FLUSH_CACHE_EXT
:
2016 bdrv_aio_flush(s
->bs
, ide_flush_cb
, s
);
2022 case WIN_STANDBYNOW1
:
2023 case WIN_STANDBYNOW2
:
2024 case WIN_IDLEIMMEDIATE
:
2025 case CFA_IDLEIMMEDIATE
:
2030 s
->status
= READY_STAT
;
2031 ide_set_irq(s
->bus
);
2036 /* XXX: Check that seek is within bounds */
2037 s
->status
= READY_STAT
| SEEK_STAT
;
2038 ide_set_irq(s
->bus
);
2040 /* ATAPI commands */
2043 ide_atapi_identify(s
);
2044 s
->status
= READY_STAT
| SEEK_STAT
;
2045 ide_transfer_start(s
, s
->io_buffer
, 512, ide_transfer_stop
);
2047 ide_abort_command(s
);
2049 ide_set_irq(s
->bus
);
2052 ide_set_signature(s
);
2054 s
->status
= 0; /* ATAPI spec (v6) section 9.10 defines packet
2055 * devices to return a clear status register
2056 * with READY_STAT *not* set. */
2058 s
->status
= READY_STAT
| SEEK_STAT
;
2059 s
->error
= 0x01; /* Device 0 passed, Device 1 passed or not
2062 ide_set_irq(s
->bus
);
2067 ide_set_signature(s
);
2068 s
->status
= 0x00; /* NOTE: READY is _not_ set */
2074 /* overlapping commands not supported */
2075 if (s
->feature
& 0x02)
2077 s
->status
= READY_STAT
| SEEK_STAT
;
2078 s
->atapi_dma
= s
->feature
& 1;
2080 ide_transfer_start(s
, s
->io_buffer
, ATAPI_PACKET_SIZE
,
2083 /* CF-ATA commands */
2084 case CFA_REQ_EXT_ERROR_CODE
:
2087 s
->error
= 0x09; /* miscellaneous error */
2088 s
->status
= READY_STAT
| SEEK_STAT
;
2089 ide_set_irq(s
->bus
);
2091 case CFA_ERASE_SECTORS
:
2092 case CFA_WEAR_LEVEL
:
2095 if (val
== CFA_WEAR_LEVEL
)
2097 if (val
== CFA_ERASE_SECTORS
)
2098 s
->media_changed
= 1;
2100 s
->status
= READY_STAT
| SEEK_STAT
;
2101 ide_set_irq(s
->bus
);
2103 case CFA_TRANSLATE_SECTOR
:
2107 s
->status
= READY_STAT
| SEEK_STAT
;
2108 memset(s
->io_buffer
, 0, 0x200);
2109 s
->io_buffer
[0x00] = s
->hcyl
; /* Cyl MSB */
2110 s
->io_buffer
[0x01] = s
->lcyl
; /* Cyl LSB */
2111 s
->io_buffer
[0x02] = s
->select
; /* Head */
2112 s
->io_buffer
[0x03] = s
->sector
; /* Sector */
2113 s
->io_buffer
[0x04] = ide_get_sector(s
) >> 16; /* LBA MSB */
2114 s
->io_buffer
[0x05] = ide_get_sector(s
) >> 8; /* LBA */
2115 s
->io_buffer
[0x06] = ide_get_sector(s
) >> 0; /* LBA LSB */
2116 s
->io_buffer
[0x13] = 0x00; /* Erase flag */
2117 s
->io_buffer
[0x18] = 0x00; /* Hot count */
2118 s
->io_buffer
[0x19] = 0x00; /* Hot count */
2119 s
->io_buffer
[0x1a] = 0x01; /* Hot count */
2120 ide_transfer_start(s
, s
->io_buffer
, 0x200, ide_transfer_stop
);
2121 ide_set_irq(s
->bus
);
2123 case CFA_ACCESS_METADATA_STORAGE
:
2126 switch (s
->feature
) {
2127 case 0x02: /* Inquiry Metadata Storage */
2128 ide_cfata_metadata_inquiry(s
);
2130 case 0x03: /* Read Metadata Storage */
2131 ide_cfata_metadata_read(s
);
2133 case 0x04: /* Write Metadata Storage */
2134 ide_cfata_metadata_write(s
);
2139 ide_transfer_start(s
, s
->io_buffer
, 0x200, ide_transfer_stop
);
2140 s
->status
= 0x00; /* NOTE: READY is _not_ set */
2141 ide_set_irq(s
->bus
);
2143 case IBM_SENSE_CONDITION
:
2146 switch (s
->feature
) {
2147 case 0x01: /* sense temperature in device */
2148 s
->nsector
= 0x50; /* +20 C */
2153 s
->status
= READY_STAT
| SEEK_STAT
;
2154 ide_set_irq(s
->bus
);
2160 if (s
->hcyl
!= 0xc2 || s
->lcyl
!= 0x4f)
2162 if (!s
->smart_enabled
&& s
->feature
!= SMART_ENABLE
)
2164 switch (s
->feature
) {
2166 s
->smart_enabled
= 0;
2167 s
->status
= READY_STAT
| SEEK_STAT
;
2168 ide_set_irq(s
->bus
);
2171 s
->smart_enabled
= 1;
2172 s
->status
= READY_STAT
| SEEK_STAT
;
2173 ide_set_irq(s
->bus
);
2175 case SMART_ATTR_AUTOSAVE
:
2176 switch (s
->sector
) {
2178 s
->smart_autosave
= 0;
2181 s
->smart_autosave
= 1;
2186 s
->status
= READY_STAT
| SEEK_STAT
;
2187 ide_set_irq(s
->bus
);
2190 if (!s
->smart_errors
) {
2197 s
->status
= READY_STAT
| SEEK_STAT
;
2198 ide_set_irq(s
->bus
);
2200 case SMART_READ_THRESH
:
2201 memset(s
->io_buffer
, 0, 0x200);
2202 s
->io_buffer
[0] = 0x01; /* smart struct version */
2203 for (n
=0; n
<30; n
++) {
2204 if (smart_attributes
[n
][0] == 0)
2206 s
->io_buffer
[2+0+(n
*12)] = smart_attributes
[n
][0];
2207 s
->io_buffer
[2+1+(n
*12)] = smart_attributes
[n
][4];
2209 for (n
=0; n
<511; n
++) /* checksum */
2210 s
->io_buffer
[511] += s
->io_buffer
[n
];
2211 s
->io_buffer
[511] = 0x100 - s
->io_buffer
[511];
2212 s
->status
= READY_STAT
| SEEK_STAT
;
2213 ide_transfer_start(s
, s
->io_buffer
, 0x200, ide_transfer_stop
);
2214 ide_set_irq(s
->bus
);
2216 case SMART_READ_DATA
:
2217 memset(s
->io_buffer
, 0, 0x200);
2218 s
->io_buffer
[0] = 0x01; /* smart struct version */
2219 for (n
=0; n
<30; n
++) {
2220 if (smart_attributes
[n
][0] == 0)
2222 s
->io_buffer
[2+0+(n
*12)] = smart_attributes
[n
][0];
2223 s
->io_buffer
[2+1+(n
*12)] = smart_attributes
[n
][1];
2224 s
->io_buffer
[2+3+(n
*12)] = smart_attributes
[n
][2];
2225 s
->io_buffer
[2+4+(n
*12)] = smart_attributes
[n
][3];
2227 s
->io_buffer
[362] = 0x02 | (s
->smart_autosave
?0x80:0x00);
2228 if (s
->smart_selftest_count
== 0) {
2229 s
->io_buffer
[363] = 0;
2232 s
->smart_selftest_data
[3 +
2233 (s
->smart_selftest_count
- 1) *
2236 s
->io_buffer
[364] = 0x20;
2237 s
->io_buffer
[365] = 0x01;
2238 /* offline data collection capacity: execute + self-test*/
2239 s
->io_buffer
[367] = (1<<4 | 1<<3 | 1);
2240 s
->io_buffer
[368] = 0x03; /* smart capability (1) */
2241 s
->io_buffer
[369] = 0x00; /* smart capability (2) */
2242 s
->io_buffer
[370] = 0x01; /* error logging supported */
2243 s
->io_buffer
[372] = 0x02; /* minutes for poll short test */
2244 s
->io_buffer
[373] = 0x36; /* minutes for poll ext test */
2245 s
->io_buffer
[374] = 0x01; /* minutes for poll conveyance */
2247 for (n
=0; n
<511; n
++)
2248 s
->io_buffer
[511] += s
->io_buffer
[n
];
2249 s
->io_buffer
[511] = 0x100 - s
->io_buffer
[511];
2250 s
->status
= READY_STAT
| SEEK_STAT
;
2251 ide_transfer_start(s
, s
->io_buffer
, 0x200, ide_transfer_stop
);
2252 ide_set_irq(s
->bus
);
2254 case SMART_READ_LOG
:
2255 switch (s
->sector
) {
2256 case 0x01: /* summary smart error log */
2257 memset(s
->io_buffer
, 0, 0x200);
2258 s
->io_buffer
[0] = 0x01;
2259 s
->io_buffer
[1] = 0x00; /* no error entries */
2260 s
->io_buffer
[452] = s
->smart_errors
& 0xff;
2261 s
->io_buffer
[453] = (s
->smart_errors
& 0xff00) >> 8;
2263 for (n
=0; n
<511; n
++)
2264 s
->io_buffer
[511] += s
->io_buffer
[n
];
2265 s
->io_buffer
[511] = 0x100 - s
->io_buffer
[511];
2267 case 0x06: /* smart self test log */
2268 memset(s
->io_buffer
, 0, 0x200);
2269 s
->io_buffer
[0] = 0x01;
2270 if (s
->smart_selftest_count
== 0) {
2271 s
->io_buffer
[508] = 0;
2273 s
->io_buffer
[508] = s
->smart_selftest_count
;
2274 for (n
=2; n
<506; n
++)
2275 s
->io_buffer
[n
] = s
->smart_selftest_data
[n
];
2277 for (n
=0; n
<511; n
++)
2278 s
->io_buffer
[511] += s
->io_buffer
[n
];
2279 s
->io_buffer
[511] = 0x100 - s
->io_buffer
[511];
2284 s
->status
= READY_STAT
| SEEK_STAT
;
2285 ide_transfer_start(s
, s
->io_buffer
, 0x200, ide_transfer_stop
);
2286 ide_set_irq(s
->bus
);
2288 case SMART_EXECUTE_OFFLINE
:
2289 switch (s
->sector
) {
2290 case 0: /* off-line routine */
2291 case 1: /* short self test */
2292 case 2: /* extended self test */
2293 s
->smart_selftest_count
++;
2294 if(s
->smart_selftest_count
> 21)
2295 s
->smart_selftest_count
= 0;
2296 n
= 2 + (s
->smart_selftest_count
- 1) * 24;
2297 s
->smart_selftest_data
[n
] = s
->sector
;
2298 s
->smart_selftest_data
[n
+1] = 0x00; /* OK and finished */
2299 s
->smart_selftest_data
[n
+2] = 0x34; /* hour count lsb */
2300 s
->smart_selftest_data
[n
+3] = 0x12; /* hour count msb */
2301 s
->status
= READY_STAT
| SEEK_STAT
;
2302 ide_set_irq(s
->bus
);
2314 ide_abort_command(s
);
2315 ide_set_irq(s
->bus
);
2321 uint32_t ide_ioport_read(void *opaque
, uint32_t addr1
)
2323 IDEBus
*bus
= opaque
;
2324 IDEState
*s
= idebus_active_if(bus
);
2329 /* FIXME: HOB readback uses bit 7, but it's always set right now */
2330 //hob = s->select & (1 << 7);
2337 if ((!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
) ||
2338 (s
!= bus
->ifs
&& !s
->bs
))
2343 ret
= s
->hob_feature
;
2346 if (!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
)
2349 ret
= s
->nsector
& 0xff;
2351 ret
= s
->hob_nsector
;
2354 if (!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
)
2359 ret
= s
->hob_sector
;
2362 if (!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
)
2370 if (!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
)
2378 if (!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
)
2385 if ((!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
) ||
2386 (s
!= bus
->ifs
&& !s
->bs
))
2390 qemu_irq_lower(bus
->irq
);
2394 printf("ide: read addr=0x%x val=%02x\n", addr1
, ret
);
2399 uint32_t ide_status_read(void *opaque
, uint32_t addr
)
2401 IDEBus
*bus
= opaque
;
2402 IDEState
*s
= idebus_active_if(bus
);
2405 if ((!bus
->ifs
[0].bs
&& !bus
->ifs
[1].bs
) ||
2406 (s
!= bus
->ifs
&& !s
->bs
))
2411 printf("ide: read status addr=0x%x val=%02x\n", addr
, ret
);
2416 void ide_cmd_write(void *opaque
, uint32_t addr
, uint32_t val
)
2418 IDEBus
*bus
= opaque
;
2423 printf("ide: write control addr=0x%x val=%02x\n", addr
, val
);
2425 /* common for both drives */
2426 if (!(bus
->cmd
& IDE_CMD_RESET
) &&
2427 (val
& IDE_CMD_RESET
)) {
2428 /* reset low to high */
2429 for(i
= 0;i
< 2; i
++) {
2431 s
->status
= BUSY_STAT
| SEEK_STAT
;
2434 } else if ((bus
->cmd
& IDE_CMD_RESET
) &&
2435 !(val
& IDE_CMD_RESET
)) {
2437 for(i
= 0;i
< 2; i
++) {
2440 s
->status
= 0x00; /* NOTE: READY is _not_ set */
2442 s
->status
= READY_STAT
| SEEK_STAT
;
2443 ide_set_signature(s
);
2450 void ide_data_writew(void *opaque
, uint32_t addr
, uint32_t val
)
2452 IDEBus
*bus
= opaque
;
2453 IDEState
*s
= idebus_active_if(bus
);
2456 /* PIO data access allowed only when DRQ bit is set */
2457 if (!(s
->status
& DRQ_STAT
))
2461 *(uint16_t *)p
= le16_to_cpu(val
);
2464 if (p
>= s
->data_end
)
2465 s
->end_transfer_func(s
);
2468 uint32_t ide_data_readw(void *opaque
, uint32_t addr
)
2470 IDEBus
*bus
= opaque
;
2471 IDEState
*s
= idebus_active_if(bus
);
2475 /* PIO data access allowed only when DRQ bit is set */
2476 if (!(s
->status
& DRQ_STAT
))
2480 ret
= cpu_to_le16(*(uint16_t *)p
);
2483 if (p
>= s
->data_end
)
2484 s
->end_transfer_func(s
);
2488 void ide_data_writel(void *opaque
, uint32_t addr
, uint32_t val
)
2490 IDEBus
*bus
= opaque
;
2491 IDEState
*s
= idebus_active_if(bus
);
2494 /* PIO data access allowed only when DRQ bit is set */
2495 if (!(s
->status
& DRQ_STAT
))
2499 *(uint32_t *)p
= le32_to_cpu(val
);
2502 if (p
>= s
->data_end
)
2503 s
->end_transfer_func(s
);
2506 uint32_t ide_data_readl(void *opaque
, uint32_t addr
)
2508 IDEBus
*bus
= opaque
;
2509 IDEState
*s
= idebus_active_if(bus
);
2513 /* PIO data access allowed only when DRQ bit is set */
2514 if (!(s
->status
& DRQ_STAT
))
2518 ret
= cpu_to_le32(*(uint32_t *)p
);
2521 if (p
>= s
->data_end
)
2522 s
->end_transfer_func(s
);
2526 static void ide_dummy_transfer_stop(IDEState
*s
)
2528 s
->data_ptr
= s
->io_buffer
;
2529 s
->data_end
= s
->io_buffer
;
2530 s
->io_buffer
[0] = 0xff;
2531 s
->io_buffer
[1] = 0xff;
2532 s
->io_buffer
[2] = 0xff;
2533 s
->io_buffer
[3] = 0xff;
2536 static void ide_reset(IDEState
*s
)
2539 printf("ide: reset\n");
2542 s
->mult_sectors
= 0;
2544 s
->mult_sectors
= MAX_MULT_SECTORS
;
2561 s
->status
= READY_STAT
| SEEK_STAT
;
2565 /* ATAPI specific */
2568 s
->cdrom_changed
= 0;
2569 s
->packet_transfer_size
= 0;
2570 s
->elementary_transfer_size
= 0;
2571 s
->io_buffer_index
= 0;
2572 s
->cd_sector_size
= 0;
2575 s
->io_buffer_size
= 0;
2576 s
->req_nb_sectors
= 0;
2578 ide_set_signature(s
);
2579 /* init the transfer handler so that 0xffff is returned on data
2581 s
->end_transfer_func
= ide_dummy_transfer_stop
;
2582 ide_dummy_transfer_stop(s
);
2583 s
->media_changed
= 0;
2586 void ide_bus_reset(IDEBus
*bus
)
2590 ide_reset(&bus
->ifs
[0]);
2591 ide_reset(&bus
->ifs
[1]);
2595 void ide_init_drive(IDEState
*s
, DriveInfo
*dinfo
, BlockConf
*conf
,
2596 const char *version
)
2598 int cylinders
, heads
, secs
;
2599 uint64_t nb_sectors
;
2601 if (dinfo
&& dinfo
->bdrv
) {
2602 s
->bs
= dinfo
->bdrv
;
2603 bdrv_get_geometry(s
->bs
, &nb_sectors
);
2604 bdrv_guess_geometry(s
->bs
, &cylinders
, &heads
, &secs
);
2605 s
->cylinders
= cylinders
;
2608 s
->nb_sectors
= nb_sectors
;
2609 /* The SMART values should be preserved across power cycles
2611 s
->smart_enabled
= 1;
2612 s
->smart_autosave
= 1;
2613 s
->smart_errors
= 0;
2614 s
->smart_selftest_count
= 0;
2615 if (bdrv_get_type_hint(s
->bs
) == BDRV_TYPE_CDROM
) {
2617 bdrv_set_change_cb(s
->bs
, cdrom_change_cb
, s
);
2619 strncpy(s
->drive_serial_str
, drive_get_serial(s
->bs
),
2620 sizeof(s
->drive_serial_str
));
2625 if (strlen(s
->drive_serial_str
) == 0)
2626 snprintf(s
->drive_serial_str
, sizeof(s
->drive_serial_str
),
2627 "QM%05d", s
->drive_serial
);
2629 pstrcpy(s
->version
, sizeof(s
->version
), version
);
2631 pstrcpy(s
->version
, sizeof(s
->version
), QEMU_VERSION
);
2636 void ide_init2(IDEBus
*bus
, DriveInfo
*hd0
, DriveInfo
*hd1
,
2640 static int drive_serial
= 1;
2643 for(i
= 0; i
< 2; i
++) {
2647 s
->drive_serial
= drive_serial
++;
2648 s
->io_buffer
= qemu_blockalign(s
->bs
, IDE_DMA_BUF_SECTORS
*512 + 4);
2649 s
->io_buffer_total_len
= IDE_DMA_BUF_SECTORS
*512 + 4;
2650 s
->smart_selftest_data
= qemu_blockalign(s
->bs
, 512);
2651 s
->sector_write_timer
= qemu_new_timer(vm_clock
,
2652 ide_sector_write_timer_cb
, s
);
2654 ide_init_drive(s
, hd0
, NULL
, NULL
);
2656 ide_init_drive(s
, hd1
, NULL
, NULL
);
2661 void ide_init_ioport(IDEBus
*bus
, int iobase
, int iobase2
)
2663 register_ioport_write(iobase
, 8, 1, ide_ioport_write
, bus
);
2664 register_ioport_read(iobase
, 8, 1, ide_ioport_read
, bus
);
2666 register_ioport_read(iobase2
, 1, 1, ide_status_read
, bus
);
2667 register_ioport_write(iobase2
, 1, 1, ide_cmd_write
, bus
);
2671 register_ioport_write(iobase
, 2, 2, ide_data_writew
, bus
);
2672 register_ioport_read(iobase
, 2, 2, ide_data_readw
, bus
);
2673 register_ioport_write(iobase
, 4, 4, ide_data_writel
, bus
);
2674 register_ioport_read(iobase
, 4, 4, ide_data_readl
, bus
);
2677 static bool is_identify_set(void *opaque
, int version_id
)
2679 IDEState
*s
= opaque
;
2681 return s
->identify_set
!= 0;
2684 static EndTransferFunc
* transfer_end_table
[] = {
2688 ide_atapi_cmd_reply_end
,
2692 static int transfer_end_table_idx(EndTransferFunc
*fn
)
2696 for (i
= 0; i
< ARRAY_SIZE(transfer_end_table
); i
++)
2697 if (transfer_end_table
[i
] == fn
)
2703 static int ide_drive_post_load(void *opaque
, int version_id
)
2705 IDEState
*s
= opaque
;
2707 if (version_id
< 3) {
2708 if (s
->sense_key
== SENSE_UNIT_ATTENTION
&&
2709 s
->asc
== ASC_MEDIUM_MAY_HAVE_CHANGED
) {
2710 s
->cdrom_changed
= 1;
2714 if (s
->cur_io_buffer_len
) {
2715 s
->end_transfer_func
= transfer_end_table
[s
->end_transfer_fn_idx
];
2716 s
->data_ptr
= s
->io_buffer
+ s
->cur_io_buffer_offset
;
2717 s
->data_end
= s
->data_ptr
+ s
->cur_io_buffer_len
;
2723 static void ide_drive_pre_save(void *opaque
)
2725 IDEState
*s
= opaque
;
2728 s
->cur_io_buffer_len
= 0;
2730 if (!(s
->status
& DRQ_STAT
))
2733 s
->cur_io_buffer_offset
= s
->data_ptr
- s
->io_buffer
;
2734 s
->cur_io_buffer_len
= s
->data_end
- s
->data_ptr
;
2736 idx
= transfer_end_table_idx(s
->end_transfer_func
);
2738 fprintf(stderr
, "%s: invalid end_transfer_func for DRQ_STAT\n",
2740 s
->end_transfer_fn_idx
= 2;
2742 s
->end_transfer_fn_idx
= idx
;
2746 const VMStateDescription vmstate_ide_drive
= {
2747 .name
= "ide_drive",
2749 .minimum_version_id
= 0,
2750 .minimum_version_id_old
= 0,
2751 .pre_save
= ide_drive_pre_save
,
2752 .post_load
= ide_drive_post_load
,
2753 .fields
= (VMStateField
[]) {
2754 VMSTATE_INT32(mult_sectors
, IDEState
),
2755 VMSTATE_INT32(identify_set
, IDEState
),
2756 VMSTATE_BUFFER_TEST(identify_data
, IDEState
, is_identify_set
),
2757 VMSTATE_UINT8(feature
, IDEState
),
2758 VMSTATE_UINT8(error
, IDEState
),
2759 VMSTATE_UINT32(nsector
, IDEState
),
2760 VMSTATE_UINT8(sector
, IDEState
),
2761 VMSTATE_UINT8(lcyl
, IDEState
),
2762 VMSTATE_UINT8(hcyl
, IDEState
),
2763 VMSTATE_UINT8(hob_feature
, IDEState
),
2764 VMSTATE_UINT8(hob_sector
, IDEState
),
2765 VMSTATE_UINT8(hob_nsector
, IDEState
),
2766 VMSTATE_UINT8(hob_lcyl
, IDEState
),
2767 VMSTATE_UINT8(hob_hcyl
, IDEState
),
2768 VMSTATE_UINT8(select
, IDEState
),
2769 VMSTATE_UINT8(status
, IDEState
),
2770 VMSTATE_UINT8(lba48
, IDEState
),
2771 VMSTATE_UINT8(sense_key
, IDEState
),
2772 VMSTATE_UINT8(asc
, IDEState
),
2773 VMSTATE_UINT8_V(cdrom_changed
, IDEState
, 3),
2774 VMSTATE_INT32_V(req_nb_sectors
, IDEState
, 4),
2775 VMSTATE_VARRAY_INT32(io_buffer
, IDEState
, io_buffer_total_len
, 4,
2776 vmstate_info_uint8
, uint8_t),
2777 VMSTATE_INT32_V(cur_io_buffer_offset
, IDEState
, 4),
2778 VMSTATE_INT32_V(cur_io_buffer_len
, IDEState
, 4),
2779 VMSTATE_UINT8_V(end_transfer_fn_idx
, IDEState
, 4),
2780 VMSTATE_INT32_V(elementary_transfer_size
, IDEState
, 4),
2781 VMSTATE_INT32_V(packet_transfer_size
, IDEState
, 4),
2782 VMSTATE_END_OF_LIST()
2786 const VMStateDescription vmstate_ide_bus
= {
2789 .minimum_version_id
= 1,
2790 .minimum_version_id_old
= 1,
2791 .fields
= (VMStateField
[]) {
2792 VMSTATE_UINT8(cmd
, IDEBus
),
2793 VMSTATE_UINT8(unit
, IDEBus
),
2794 VMSTATE_END_OF_LIST()
2798 /***********************************************************/
2799 /* PCI IDE definitions */
2801 static void ide_dma_start(IDEState
*s
, BlockDriverCompletionFunc
*dma_cb
)
2803 BMDMAState
*bm
= s
->bus
->bmdma
;
2807 bm
->dma_cb
= dma_cb
;
2808 bm
->cur_prd_last
= 0;
2809 bm
->cur_prd_addr
= 0;
2810 bm
->cur_prd_len
= 0;
2811 bm
->sector_num
= ide_get_sector(s
);
2812 bm
->nsector
= s
->nsector
;
2813 if (bm
->status
& BM_STATUS_DMAING
) {
2818 static void ide_dma_restart(IDEState
*s
, int is_read
)
2820 BMDMAState
*bm
= s
->bus
->bmdma
;
2821 ide_set_sector(s
, bm
->sector_num
);
2822 s
->io_buffer_index
= 0;
2823 s
->io_buffer_size
= 0;
2824 s
->nsector
= bm
->nsector
;
2825 bm
->cur_addr
= bm
->addr
;
2828 bm
->dma_cb
= ide_read_dma_cb
;
2830 bm
->dma_cb
= ide_write_dma_cb
;
2833 ide_dma_start(s
, bm
->dma_cb
);
2836 void ide_dma_cancel(BMDMAState
*bm
)
2838 if (bm
->status
& BM_STATUS_DMAING
) {
2839 bm
->status
&= ~BM_STATUS_DMAING
;
2840 /* cancel DMA request */
2845 printf("aio_cancel\n");
2847 bdrv_aio_cancel(bm
->aiocb
);
2853 void ide_dma_reset(BMDMAState
*bm
)
2856 printf("ide: dma_reset\n");
2863 bm
->cur_prd_last
= 0;
2864 bm
->cur_prd_addr
= 0;
2865 bm
->cur_prd_len
= 0;