416 |
put_le16(p + 47, 0x8000 | MAX_MULT_SECTORS); |
put_le16(p + 47, 0x8000 | MAX_MULT_SECTORS); |
417 |
#endif |
#endif |
418 |
put_le16(p + 48, 1); /* dword I/O */ |
put_le16(p + 48, 1); /* dword I/O */ |
419 |
put_le16(p + 49, 1 << 9); /* LBA supported, no DMA */ |
put_le16(p + 49, 1 << 9 | 1 << 8); /* DMA and LBA supported */ |
420 |
put_le16(p + 51, 0x200); /* PIO transfer cycle */ |
put_le16(p + 51, 0x200); /* PIO transfer cycle */ |
421 |
put_le16(p + 52, 0x200); /* DMA transfer cycle */ |
put_le16(p + 52, 0x200); /* DMA transfer cycle */ |
422 |
put_le16(p + 53, 1); /* words 54-58 are valid */ |
put_le16(p + 53, 1 | 1 << 2); /* words 54-58,88 are valid */ |
423 |
put_le16(p + 54, s->cylinders); |
put_le16(p + 54, s->cylinders); |
424 |
put_le16(p + 55, s->heads); |
put_le16(p + 55, s->heads); |
425 |
put_le16(p + 56, s->sectors); |
put_le16(p + 56, s->sectors); |
437 |
put_le16(p + 85, (1 << 14)); |
put_le16(p + 85, (1 << 14)); |
438 |
put_le16(p + 86, 0); |
put_le16(p + 86, 0); |
439 |
put_le16(p + 87, (1 << 14)); |
put_le16(p + 87, (1 << 14)); |
440 |
|
put_le16(p + 88, 0x1f | (1 << 13)); |
441 |
|
put_le16(p + 93, 1 | (1 << 14) | 0x2000 | 0x4000); |
442 |
} |
} |
443 |
|
|
444 |
static void ide_atapi_identify(IDEState *s) |
static void ide_atapi_identify(IDEState *s) |
1562 |
case 0x82: /* write cache disable */ |
case 0x82: /* write cache disable */ |
1563 |
case 0xaa: /* read look-ahead enable */ |
case 0xaa: /* read look-ahead enable */ |
1564 |
case 0x55: /* read look-ahead disable */ |
case 0x55: /* read look-ahead disable */ |
1565 |
s->status = READY_STAT; |
s->status = READY_STAT | SEEK_STAT; |
1566 |
ide_set_irq(s); |
ide_set_irq(s); |
1567 |
break; |
break; |
1568 |
default: |
default: |