~jderose/ubuntu/raring/qemu/vde-again

« back to all changes in this revision

Viewing changes to hw/ide.c

  • Committer: Bazaar Package Importer
  • Author(s): Aurelien Jarno, Aurelien Jarno
  • Date: 2009-03-22 10:13:17 UTC
  • mfrom: (1.2.1 upstream) (6.1.1 sid)
  • Revision ID: james.westby@ubuntu.com-20090322101317-iigjtnu5qil35dtb
Tags: 0.10.1-1
[ Aurelien Jarno ]
* New upstream stable release:
  - patches/80_stable-branch.patch: remove.
* debian/control: 
  - Remove depends on proll.
  - Move depends on device-tree-compiler to build-depends.
  - Bump Standards-Version to 3.8.1 (no changes).
* patches/82_qemu-img_decimal.patch: new patch from upstream to make
  qemu-img accept sizes with decimal values (closes: bug#501400).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
 
 * QEMU IDE disk and CD-ROM Emulator
 
2
 * QEMU IDE disk and CD/DVD-ROM Emulator
3
3
 *
4
4
 * Copyright (c) 2003 Fabrice Bellard
5
5
 * Copyright (c) 2006 Openedhand Ltd.
28
28
#include "scsi-disk.h"
29
29
#include "pcmcia.h"
30
30
#include "block.h"
 
31
#include "block_int.h"
31
32
#include "qemu-timer.h"
32
33
#include "sysemu.h"
33
34
#include "ppc_mac.h"
 
35
#include "mac_dbdma.h"
 
36
#include "sh.h"
 
37
#include "dma.h"
34
38
 
35
39
/* debug IDE devices */
36
40
//#define DEBUG_IDE
202
206
/* set to 1 set disable mult support */
203
207
#define MAX_MULT_SECTORS 16
204
208
 
 
209
#define IDE_DMA_BUF_SECTORS 256
 
210
 
 
211
#if (IDE_DMA_BUF_SECTORS < MAX_MULT_SECTORS)
 
212
#error "IDE_DMA_BUF_SECTORS must be bigger or equal to MAX_MULT_SECTORS"
 
213
#endif
 
214
 
205
215
/* ATAPI defines */
206
216
 
207
217
#define ATAPI_PACKET_SIZE 12
284
294
 * of MODE_SENSE_POWER_PAGE */
285
295
#define GPMODE_CDROM_PAGE               0x0d
286
296
 
 
297
/*
 
298
 * Based on values from <linux/cdrom.h> but extending CD_MINS
 
299
 * to the maximum common size allowed by the Orange's Book ATIP
 
300
 *
 
301
 * 90 and 99 min CDs are also available but using them as the
 
302
 * upper limit reduces the effectiveness of the heuristic to
 
303
 * detect DVDs burned to less than 25% of their maximum capacity
 
304
 */
 
305
 
 
306
/* Some generally useful CD-ROM information */
 
307
#define CD_MINS                       80 /* max. minutes per CD */
 
308
#define CD_SECS                       60 /* seconds per minute */
 
309
#define CD_FRAMES                     75 /* frames per second */
 
310
#define CD_FRAMESIZE                2048 /* bytes per frame, "cooked" mode */
 
311
#define CD_MAX_BYTES       (CD_MINS * CD_SECS * CD_FRAMES * CD_FRAMESIZE)
 
312
#define CD_MAX_SECTORS     (CD_MAX_BYTES / 512)
 
313
 
 
314
/*
 
315
 * The MMC values are not IDE specific and might need to be moved
 
316
 * to a common header if they are also needed for the SCSI emulation
 
317
 */
 
318
 
 
319
/* Profile list from MMC-6 revision 1 table 91 */
 
320
#define MMC_PROFILE_NONE                0x0000
 
321
#define MMC_PROFILE_CD_ROM              0x0008
 
322
#define MMC_PROFILE_CD_R                0x0009
 
323
#define MMC_PROFILE_CD_RW               0x000A
 
324
#define MMC_PROFILE_DVD_ROM             0x0010
 
325
#define MMC_PROFILE_DVD_R_SR            0x0011
 
326
#define MMC_PROFILE_DVD_RAM             0x0012
 
327
#define MMC_PROFILE_DVD_RW_RO           0x0013
 
328
#define MMC_PROFILE_DVD_RW_SR           0x0014
 
329
#define MMC_PROFILE_DVD_R_DL_SR         0x0015
 
330
#define MMC_PROFILE_DVD_R_DL_JR         0x0016
 
331
#define MMC_PROFILE_DVD_RW_DL           0x0017
 
332
#define MMC_PROFILE_DVD_DDR             0x0018
 
333
#define MMC_PROFILE_DVD_PLUS_RW         0x001A
 
334
#define MMC_PROFILE_DVD_PLUS_R          0x001B
 
335
#define MMC_PROFILE_DVD_PLUS_RW_DL      0x002A
 
336
#define MMC_PROFILE_DVD_PLUS_R_DL       0x002B
 
337
#define MMC_PROFILE_BD_ROM              0x0040
 
338
#define MMC_PROFILE_BD_R_SRM            0x0041
 
339
#define MMC_PROFILE_BD_R_RRM            0x0042
 
340
#define MMC_PROFILE_BD_RE               0x0043
 
341
#define MMC_PROFILE_HDDVD_ROM           0x0050
 
342
#define MMC_PROFILE_HDDVD_R             0x0051
 
343
#define MMC_PROFILE_HDDVD_RAM           0x0052
 
344
#define MMC_PROFILE_HDDVD_RW            0x0053
 
345
#define MMC_PROFILE_HDDVD_R_DL          0x0058
 
346
#define MMC_PROFILE_HDDVD_RW_DL         0x005A
 
347
#define MMC_PROFILE_INVALID             0xFFFF
 
348
 
287
349
#define ATAPI_INT_REASON_CD             0x01 /* 0 = data transfer */
288
350
#define ATAPI_INT_REASON_IO             0x02 /* 1 = transfer to the host */
289
351
#define ATAPI_INT_REASON_REL            0x04
293
355
#define ASC_ILLEGAL_OPCODE                   0x20
294
356
#define ASC_LOGICAL_BLOCK_OOR                0x21
295
357
#define ASC_INV_FIELD_IN_CMD_PACKET          0x24
 
358
#define ASC_MEDIUM_MAY_HAVE_CHANGED          0x28
 
359
#define ASC_INCOMPATIBLE_FORMAT              0x30
296
360
#define ASC_MEDIUM_NOT_PRESENT               0x3a
297
361
#define ASC_SAVING_PARAMETERS_NOT_SUPPORTED  0x39
298
362
 
325
389
    PCIDevice *pci_dev;
326
390
    struct BMDMAState *bmdma;
327
391
    int drive_serial;
 
392
    char drive_serial_str[21];
328
393
    /* ide regs */
329
394
    uint8_t feature;
330
395
    uint8_t error;
360
425
    int atapi_dma; /* true if dma is requested for the packet cmd */
361
426
    /* ATA DMA state */
362
427
    int io_buffer_size;
 
428
    QEMUSGList sg;
363
429
    /* PIO transfer handling */
364
430
    int req_nb_sectors; /* number of sectors per interrupt */
365
431
    EndTransferFunc *end_transfer_func;
374
440
    uint32_t mdata_size;
375
441
    uint8_t *mdata_storage;
376
442
    int media_changed;
 
443
    /* for pmac */
 
444
    int is_read;
377
445
} IDEState;
378
446
 
 
447
/* XXX: DVDs that could fit on a CD will be reported as a CD */
 
448
static inline int media_present(IDEState *s)
 
449
{
 
450
    return (s->nb_sectors > 0);
 
451
}
 
452
 
 
453
static inline int media_is_dvd(IDEState *s)
 
454
{
 
455
    return (media_present(s) && s->nb_sectors > CD_MAX_SECTORS);
 
456
}
 
457
 
 
458
static inline int media_is_cd(IDEState *s)
 
459
{
 
460
    return (media_present(s) && s->nb_sectors <= CD_MAX_SECTORS);
 
461
}
 
462
 
379
463
#define BM_STATUS_DMAING 0x01
380
464
#define BM_STATUS_ERROR  0x02
381
465
#define BM_STATUS_INT    0x04
 
466
#define BM_STATUS_DMA_RETRY  0x08
 
467
#define BM_STATUS_PIO_RETRY  0x10
382
468
 
383
469
#define BM_CMD_START     0x01
384
470
#define BM_CMD_READ      0x08
410
496
    IDEState *ide_if;
411
497
    BlockDriverCompletionFunc *dma_cb;
412
498
    BlockDriverAIOCB *aiocb;
 
499
    int64_t sector_num;
 
500
    uint32_t nsector;
413
501
} BMDMAState;
414
502
 
415
503
typedef struct PCIIDEState {
420
508
} PCIIDEState;
421
509
 
422
510
static void ide_dma_start(IDEState *s, BlockDriverCompletionFunc *dma_cb);
 
511
static void ide_dma_restart(IDEState *s);
423
512
static void ide_atapi_cmd_read_dma_cb(void *opaque, int ret);
424
513
 
425
514
static void padstr(char *str, const char *src, int len)
454
543
{
455
544
    uint16_t *p;
456
545
    unsigned int oldsize;
457
 
    char buf[20];
458
546
 
459
547
    if (s->identify_set) {
460
548
        memcpy(s->io_buffer, s->identify_data, sizeof(s->identify_data));
469
557
    put_le16(p + 4, 512 * s->sectors); /* XXX: retired, remove ? */
470
558
    put_le16(p + 5, 512); /* XXX: retired, remove ? */
471
559
    put_le16(p + 6, s->sectors);
472
 
    snprintf(buf, sizeof(buf), "QM%05d", s->drive_serial);
473
 
    padstr((char *)(p + 10), buf, 20); /* serial number */
 
560
    padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
474
561
    put_le16(p + 20, 3); /* XXX: retired, remove ? */
475
562
    put_le16(p + 21, 512); /* cache size in sectors */
476
563
    put_le16(p + 22, 4); /* ecc bytes */
494
581
        put_le16(p + 59, 0x100 | s->mult_sectors);
495
582
    put_le16(p + 60, s->nb_sectors);
496
583
    put_le16(p + 61, s->nb_sectors >> 16);
 
584
    put_le16(p + 62, 0x07); /* single word dma0-2 supported */
497
585
    put_le16(p + 63, 0x07); /* mdma0-2 supported */
498
586
    put_le16(p + 65, 120);
499
587
    put_le16(p + 66, 120);
523
611
static void ide_atapi_identify(IDEState *s)
524
612
{
525
613
    uint16_t *p;
526
 
    char buf[20];
527
614
 
528
615
    if (s->identify_set) {
529
616
        memcpy(s->io_buffer, s->identify_data, sizeof(s->identify_data));
534
621
    p = (uint16_t *)s->io_buffer;
535
622
    /* Removable CDROM, 50us response, 12 byte packets */
536
623
    put_le16(p + 0, (2 << 14) | (5 << 8) | (1 << 7) | (2 << 5) | (0 << 0));
537
 
    snprintf(buf, sizeof(buf), "QM%05d", s->drive_serial);
538
 
    padstr((char *)(p + 10), buf, 20); /* serial number */
 
624
    padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
539
625
    put_le16(p + 20, 3); /* buffer type */
540
626
    put_le16(p + 21, 512); /* cache size in sectors */
541
627
    put_le16(p + 22, 4); /* ecc bytes */
542
628
    padstr((char *)(p + 23), QEMU_VERSION, 8); /* firmware version */
543
 
    padstr((char *)(p + 27), "QEMU CD-ROM", 40); /* model */
 
629
    padstr((char *)(p + 27), "QEMU DVD-ROM", 40); /* model */
544
630
    put_le16(p + 48, 1); /* dword I/O (XXX: should not be set on CDROM) */
545
631
#ifdef USE_DMA_CDROM
546
632
    put_le16(p + 49, 1 << 9 | 1 << 8); /* DMA and LBA supported */
547
633
    put_le16(p + 53, 7); /* words 64-70, 54-58, 88 valid */
 
634
    put_le16(p + 62, 7);  /* single word dma0-2 supported */
548
635
    put_le16(p + 63, 7);  /* mdma0-2 supported */
549
636
    put_le16(p + 64, 0x3f); /* PIO modes supported */
550
637
#else
573
660
{
574
661
    uint16_t *p;
575
662
    uint32_t cur_sec;
576
 
    char buf[20];
577
663
 
578
664
    p = (uint16_t *) s->identify_data;
579
665
    if (s->identify_set)
589
675
    put_le16(p + 6, s->sectors);                /* Default sectors per track */
590
676
    put_le16(p + 7, s->nb_sectors >> 16);       /* Sectors per card */
591
677
    put_le16(p + 8, s->nb_sectors);             /* Sectors per card */
592
 
    snprintf(buf, sizeof(buf), "QM%05d", s->drive_serial);
593
 
    padstr((char *)(p + 10), buf, 20);  /* Serial number in ASCII */
 
678
    padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
594
679
    put_le16(p + 22, 0x0004);                   /* ECC bytes */
595
680
    padstr((char *) (p + 23), QEMU_VERSION, 8); /* Firmware Revision */
596
681
    padstr((char *) (p + 27), "QEMU MICRODRIVE", 40);/* Model number */
661
746
    s->error = ABRT_ERR;
662
747
}
663
748
 
 
749
static inline void ide_dma_submit_check(IDEState *s,
 
750
          BlockDriverCompletionFunc *dma_cb, BMDMAState *bm)
 
751
{
 
752
    if (bm->aiocb)
 
753
        return;
 
754
    dma_cb(bm, -1);
 
755
}
 
756
 
664
757
static inline void ide_set_irq(IDEState *s)
665
758
{
666
759
    BMDMAState *bm = s->bmdma;
740
833
    }
741
834
}
742
835
 
 
836
static void ide_rw_error(IDEState *s) {
 
837
    ide_abort_command(s);
 
838
    ide_set_irq(s);
 
839
}
 
840
 
743
841
static void ide_sector_read(IDEState *s)
744
842
{
745
843
    int64_t sector_num;
754
852
        ide_transfer_stop(s);
755
853
    } else {
756
854
#if defined(DEBUG_IDE)
757
 
        printf("read sector=%Ld\n", sector_num);
 
855
        printf("read sector=%" PRId64 "\n", sector_num);
758
856
#endif
759
857
        if (n > s->req_nb_sectors)
760
858
            n = s->req_nb_sectors;
761
859
        ret = bdrv_read(s->bs, sector_num, s->io_buffer, n);
 
860
        if (ret != 0) {
 
861
            ide_rw_error(s);
 
862
            return;
 
863
        }
762
864
        ide_transfer_start(s, s->io_buffer, 512 * n, ide_sector_read);
763
865
        ide_set_irq(s);
764
866
        ide_set_sector(s, sector_num + n);
766
868
    }
767
869
}
768
870
 
 
871
 
 
872
/* return 0 if buffer completed */
 
873
static int dma_buf_prepare(BMDMAState *bm, int is_write)
 
874
{
 
875
    IDEState *s = bm->ide_if;
 
876
    struct {
 
877
        uint32_t addr;
 
878
        uint32_t size;
 
879
    } prd;
 
880
    int l, len;
 
881
 
 
882
    qemu_sglist_init(&s->sg, s->nsector / (TARGET_PAGE_SIZE/512) + 1);
 
883
    s->io_buffer_size = 0;
 
884
    for(;;) {
 
885
        if (bm->cur_prd_len == 0) {
 
886
            /* end of table (with a fail safe of one page) */
 
887
            if (bm->cur_prd_last ||
 
888
                (bm->cur_addr - bm->addr) >= 4096)
 
889
                return s->io_buffer_size != 0;
 
890
            cpu_physical_memory_read(bm->cur_addr, (uint8_t *)&prd, 8);
 
891
            bm->cur_addr += 8;
 
892
            prd.addr = le32_to_cpu(prd.addr);
 
893
            prd.size = le32_to_cpu(prd.size);
 
894
            len = prd.size & 0xfffe;
 
895
            if (len == 0)
 
896
                len = 0x10000;
 
897
            bm->cur_prd_len = len;
 
898
            bm->cur_prd_addr = prd.addr;
 
899
            bm->cur_prd_last = (prd.size & 0x80000000);
 
900
        }
 
901
        l = bm->cur_prd_len;
 
902
        if (l > 0) {
 
903
            qemu_sglist_add(&s->sg, bm->cur_prd_addr, l);
 
904
            bm->cur_prd_addr += l;
 
905
            bm->cur_prd_len -= l;
 
906
            s->io_buffer_size += l;
 
907
        }
 
908
    }
 
909
    return 1;
 
910
}
 
911
 
 
912
static void dma_buf_commit(IDEState *s, int is_write)
 
913
{
 
914
    qemu_sglist_destroy(&s->sg);
 
915
}
 
916
 
 
917
static void ide_dma_error(IDEState *s)
 
918
{
 
919
    ide_transfer_stop(s);
 
920
    s->error = ABRT_ERR;
 
921
    s->status = READY_STAT | ERR_STAT;
 
922
    ide_set_irq(s);
 
923
}
 
924
 
 
925
static int ide_handle_write_error(IDEState *s, int error, int op)
 
926
{
 
927
    BlockInterfaceErrorAction action = drive_get_onerror(s->bs);
 
928
 
 
929
    if (action == BLOCK_ERR_IGNORE)
 
930
        return 0;
 
931
 
 
932
    if ((error == ENOSPC && action == BLOCK_ERR_STOP_ENOSPC)
 
933
            || action == BLOCK_ERR_STOP_ANY) {
 
934
        s->bmdma->ide_if = s;
 
935
        s->bmdma->status |= op;
 
936
        vm_stop(0);
 
937
    } else {
 
938
        if (op == BM_STATUS_DMA_RETRY) {
 
939
            dma_buf_commit(s, 0);
 
940
            ide_dma_error(s);
 
941
        } else {
 
942
            ide_rw_error(s);
 
943
        }
 
944
    }
 
945
 
 
946
    return 1;
 
947
}
 
948
 
769
949
/* return 0 if buffer completed */
770
950
static int dma_buf_rw(BMDMAState *bm, int is_write)
771
951
{
814
994
    return 1;
815
995
}
816
996
 
817
 
/* XXX: handle errors */
818
997
static void ide_read_dma_cb(void *opaque, int ret)
819
998
{
820
999
    BMDMAState *bm = opaque;
822
1001
    int n;
823
1002
    int64_t sector_num;
824
1003
 
 
1004
    if (ret < 0) {
 
1005
        dma_buf_commit(s, 1);
 
1006
        ide_dma_error(s);
 
1007
        return;
 
1008
    }
 
1009
 
825
1010
    n = s->io_buffer_size >> 9;
826
1011
    sector_num = ide_get_sector(s);
827
1012
    if (n > 0) {
 
1013
        dma_buf_commit(s, 1);
828
1014
        sector_num += n;
829
1015
        ide_set_sector(s, sector_num);
830
1016
        s->nsector -= n;
831
 
        if (dma_buf_rw(bm, 1) == 0)
832
 
            goto eot;
833
1017
    }
834
1018
 
835
1019
    /* end of transfer ? */
847
1031
 
848
1032
    /* launch next transfer */
849
1033
    n = s->nsector;
850
 
    if (n > MAX_MULT_SECTORS)
851
 
        n = MAX_MULT_SECTORS;
852
1034
    s->io_buffer_index = 0;
853
1035
    s->io_buffer_size = n * 512;
 
1036
    if (dma_buf_prepare(bm, 1) == 0)
 
1037
        goto eot;
854
1038
#ifdef DEBUG_AIO
855
 
    printf("aio_read: sector_num=%lld n=%d\n", sector_num, n);
 
1039
    printf("aio_read: sector_num=%" PRId64 " n=%d\n", sector_num, n);
856
1040
#endif
857
 
    bm->aiocb = bdrv_aio_read(s->bs, sector_num, s->io_buffer, n,
858
 
                              ide_read_dma_cb, bm);
 
1041
    bm->aiocb = dma_bdrv_read(s->bs, &s->sg, sector_num, ide_read_dma_cb, bm);
 
1042
    ide_dma_submit_check(s, ide_read_dma_cb, bm);
859
1043
}
860
1044
 
861
1045
static void ide_sector_read_dma(IDEState *s)
863
1047
    s->status = READY_STAT | SEEK_STAT | DRQ_STAT | BUSY_STAT;
864
1048
    s->io_buffer_index = 0;
865
1049
    s->io_buffer_size = 0;
 
1050
    s->is_read = 1;
866
1051
    ide_dma_start(s, ide_read_dma_cb);
867
1052
}
868
1053
 
880
1065
    s->status = READY_STAT | SEEK_STAT;
881
1066
    sector_num = ide_get_sector(s);
882
1067
#if defined(DEBUG_IDE)
883
 
    printf("write sector=%Ld\n", sector_num);
 
1068
    printf("write sector=%" PRId64 "\n", sector_num);
884
1069
#endif
885
1070
    n = s->nsector;
886
1071
    if (n > s->req_nb_sectors)
887
1072
        n = s->req_nb_sectors;
888
1073
    ret = bdrv_write(s->bs, sector_num, s->io_buffer, n);
 
1074
 
 
1075
    if (ret != 0) {
 
1076
        if (ide_handle_write_error(s, -ret, BM_STATUS_PIO_RETRY))
 
1077
            return;
 
1078
    }
 
1079
 
889
1080
    s->nsector -= n;
890
1081
    if (s->nsector == 0) {
891
1082
        /* no more sectors to write */
915
1106
    }
916
1107
}
917
1108
 
918
 
/* XXX: handle errors */
 
1109
static void ide_dma_restart_cb(void *opaque, int running, int reason)
 
1110
{
 
1111
    BMDMAState *bm = opaque;
 
1112
    if (!running)
 
1113
        return;
 
1114
    if (bm->status & BM_STATUS_DMA_RETRY) {
 
1115
        bm->status &= ~BM_STATUS_DMA_RETRY;
 
1116
        ide_dma_restart(bm->ide_if);
 
1117
    } else if (bm->status & BM_STATUS_PIO_RETRY) {
 
1118
        bm->status &= ~BM_STATUS_PIO_RETRY;
 
1119
        ide_sector_write(bm->ide_if);
 
1120
    }
 
1121
}
 
1122
 
919
1123
static void ide_write_dma_cb(void *opaque, int ret)
920
1124
{
921
1125
    BMDMAState *bm = opaque;
923
1127
    int n;
924
1128
    int64_t sector_num;
925
1129
 
 
1130
    if (ret < 0) {
 
1131
        if (ide_handle_write_error(s, -ret,  BM_STATUS_DMA_RETRY))
 
1132
            return;
 
1133
    }
 
1134
 
926
1135
    n = s->io_buffer_size >> 9;
927
1136
    sector_num = ide_get_sector(s);
928
1137
    if (n > 0) {
 
1138
        dma_buf_commit(s, 0);
929
1139
        sector_num += n;
930
1140
        ide_set_sector(s, sector_num);
931
1141
        s->nsector -= n;
944
1154
        return;
945
1155
    }
946
1156
 
947
 
    /* launch next transfer */
948
1157
    n = s->nsector;
949
 
    if (n > MAX_MULT_SECTORS)
950
 
        n = MAX_MULT_SECTORS;
951
 
    s->io_buffer_index = 0;
952
1158
    s->io_buffer_size = n * 512;
953
 
 
954
 
    if (dma_buf_rw(bm, 0) == 0)
 
1159
    /* launch next transfer */
 
1160
    if (dma_buf_prepare(bm, 0) == 0)
955
1161
        goto eot;
956
1162
#ifdef DEBUG_AIO
957
 
    printf("aio_write: sector_num=%lld n=%d\n", sector_num, n);
 
1163
    printf("aio_write: sector_num=%" PRId64 " n=%d\n", sector_num, n);
958
1164
#endif
959
 
    bm->aiocb = bdrv_aio_write(s->bs, sector_num, s->io_buffer, n,
960
 
                               ide_write_dma_cb, bm);
 
1165
    bm->aiocb = dma_bdrv_write(s->bs, &s->sg, sector_num, ide_write_dma_cb, bm);
 
1166
    ide_dma_submit_check(s, ide_write_dma_cb, bm);
961
1167
}
962
1168
 
963
1169
static void ide_sector_write_dma(IDEState *s)
965
1171
    s->status = READY_STAT | SEEK_STAT | DRQ_STAT | BUSY_STAT;
966
1172
    s->io_buffer_index = 0;
967
1173
    s->io_buffer_size = 0;
 
1174
    s->is_read = 0;
968
1175
    ide_dma_start(s, ide_write_dma_cb);
969
1176
}
970
1177
 
971
1178
static void ide_atapi_cmd_ok(IDEState *s)
972
1179
{
973
1180
    s->error = 0;
974
 
    s->status = READY_STAT;
 
1181
    s->status = READY_STAT | SEEK_STAT;
975
1182
    s->nsector = (s->nsector & ~7) | ATAPI_INT_REASON_IO | ATAPI_INT_REASON_CD;
976
1183
    ide_set_irq(s);
977
1184
}
989
1196
    ide_set_irq(s);
990
1197
}
991
1198
 
 
1199
static void ide_atapi_cmd_check_status(IDEState *s)
 
1200
{
 
1201
#ifdef DEBUG_IDE_ATAPI
 
1202
    printf("atapi_cmd_check_status\n");
 
1203
#endif
 
1204
    s->error = MC_ERR | (SENSE_UNIT_ATTENTION << 4);
 
1205
    s->status = ERR_STAT;
 
1206
    s->nsector = 0;
 
1207
    ide_set_irq(s);
 
1208
}
 
1209
 
992
1210
static inline void cpu_to_ube16(uint8_t *buf, int val)
993
1211
{
994
1212
    buf[0] = val >> 8;
1085
1303
    if (s->packet_transfer_size <= 0) {
1086
1304
        /* end of transfer */
1087
1305
        ide_transfer_stop(s);
1088
 
        s->status = READY_STAT;
 
1306
        s->status = READY_STAT | SEEK_STAT;
1089
1307
        s->nsector = (s->nsector & ~7) | ATAPI_INT_REASON_IO | ATAPI_INT_REASON_CD;
1090
1308
        ide_set_irq(s);
1091
1309
#ifdef DEBUG_IDE_ATAPI
1163
1381
    s->io_buffer_index = 0;
1164
1382
 
1165
1383
    if (s->atapi_dma) {
1166
 
        s->status = READY_STAT | DRQ_STAT;
 
1384
        s->status = READY_STAT | SEEK_STAT | DRQ_STAT;
1167
1385
        ide_dma_start(s, ide_atapi_cmd_read_dma_cb);
1168
1386
    } else {
1169
 
        s->status = READY_STAT;
 
1387
        s->status = READY_STAT | SEEK_STAT;
1170
1388
        ide_atapi_cmd_reply_end(s);
1171
1389
    }
1172
1390
}
1181
1399
    s->io_buffer_index = sector_size;
1182
1400
    s->cd_sector_size = sector_size;
1183
1401
 
1184
 
    s->status = READY_STAT;
 
1402
    s->status = READY_STAT | SEEK_STAT;
1185
1403
    ide_atapi_cmd_reply_end(s);
1186
1404
}
1187
1405
 
1222
1440
    }
1223
1441
 
1224
1442
    if (s->packet_transfer_size <= 0) {
1225
 
        s->status = READY_STAT;
 
1443
        s->status = READY_STAT | SEEK_STAT;
1226
1444
        s->nsector = (s->nsector & ~7) | ATAPI_INT_REASON_IO | ATAPI_INT_REASON_CD;
1227
1445
        ide_set_irq(s);
1228
1446
    eot:
1241
1459
        data_offset = 16;
1242
1460
    } else {
1243
1461
        n = s->packet_transfer_size >> 11;
1244
 
        if (n > (MAX_MULT_SECTORS / 4))
1245
 
            n = (MAX_MULT_SECTORS / 4);
 
1462
        if (n > (IDE_DMA_BUF_SECTORS / 4))
 
1463
            n = (IDE_DMA_BUF_SECTORS / 4);
1246
1464
        s->io_buffer_size = n * 2048;
1247
1465
        data_offset = 0;
1248
1466
    }
1272
1490
    s->cd_sector_size = sector_size;
1273
1491
 
1274
1492
    /* XXX: check if BUSY_STAT should be set */
1275
 
    s->status = READY_STAT | DRQ_STAT | BUSY_STAT;
 
1493
    s->status = READY_STAT | SEEK_STAT | DRQ_STAT | BUSY_STAT;
1276
1494
    ide_dma_start(s, ide_atapi_cmd_read_dma_cb);
1277
1495
}
1278
1496
 
1290
1508
    }
1291
1509
}
1292
1510
 
 
1511
static inline uint8_t ide_atapi_set_profile(uint8_t *buf, uint8_t *index,
 
1512
                                            uint16_t profile)
 
1513
{
 
1514
    uint8_t *buf_profile = buf + 12; /* start of profiles */
 
1515
 
 
1516
    buf_profile += ((*index) * 4); /* start of indexed profile */
 
1517
    cpu_to_ube16 (buf_profile, profile);
 
1518
    buf_profile[2] = ((buf_profile[0] == buf[6]) && (buf_profile[1] == buf[7]));
 
1519
 
 
1520
    /* each profile adds 4 bytes to the response */
 
1521
    (*index)++;
 
1522
    buf[11] += 4; /* Additional Length */
 
1523
 
 
1524
    return 4;
 
1525
}
 
1526
 
 
1527
static int ide_dvd_read_structure(IDEState *s, int format,
 
1528
                                  const uint8_t *packet, uint8_t *buf)
 
1529
{
 
1530
    switch (format) {
 
1531
        case 0x0: /* Physical format information */
 
1532
            {
 
1533
                int layer = packet[6];
 
1534
                uint64_t total_sectors;
 
1535
 
 
1536
                if (layer != 0)
 
1537
                    return -ASC_INV_FIELD_IN_CMD_PACKET;
 
1538
 
 
1539
                bdrv_get_geometry(s->bs, &total_sectors);
 
1540
                total_sectors >>= 2;
 
1541
                if (total_sectors == 0)
 
1542
                    return -ASC_MEDIUM_NOT_PRESENT;
 
1543
 
 
1544
                buf[4] = 1;   /* DVD-ROM, part version 1 */
 
1545
                buf[5] = 0xf; /* 120mm disc, minimum rate unspecified */
 
1546
                buf[6] = 1;   /* one layer, read-only (per MMC-2 spec) */
 
1547
                buf[7] = 0;   /* default densities */
 
1548
 
 
1549
                /* FIXME: 0x30000 per spec? */
 
1550
                cpu_to_ube32(buf + 8, 0); /* start sector */
 
1551
                cpu_to_ube32(buf + 12, total_sectors - 1); /* end sector */
 
1552
                cpu_to_ube32(buf + 16, total_sectors - 1); /* l0 end sector */
 
1553
 
 
1554
                /* Size of buffer, not including 2 byte size field */
 
1555
                cpu_to_be16wu((uint16_t *)buf, 2048 + 2);
 
1556
 
 
1557
                /* 2k data + 4 byte header */
 
1558
                return (2048 + 4);
 
1559
            }
 
1560
 
 
1561
        case 0x01: /* DVD copyright information */
 
1562
            buf[4] = 0; /* no copyright data */
 
1563
            buf[5] = 0; /* no region restrictions */
 
1564
 
 
1565
            /* Size of buffer, not including 2 byte size field */
 
1566
            cpu_to_be16wu((uint16_t *)buf, 4 + 2);
 
1567
 
 
1568
            /* 4 byte header + 4 byte data */
 
1569
            return (4 + 4);
 
1570
 
 
1571
        case 0x03: /* BCA information - invalid field for no BCA info */
 
1572
            return -ASC_INV_FIELD_IN_CMD_PACKET;
 
1573
 
 
1574
        case 0x04: /* DVD disc manufacturing information */
 
1575
            /* Size of buffer, not including 2 byte size field */
 
1576
            cpu_to_be16wu((uint16_t *)buf, 2048 + 2);
 
1577
 
 
1578
            /* 2k data + 4 byte header */
 
1579
            return (2048 + 4);
 
1580
 
 
1581
        case 0xff:
 
1582
            /*
 
1583
             * This lists all the command capabilities above.  Add new ones
 
1584
             * in order and update the length and buffer return values.
 
1585
             */
 
1586
 
 
1587
            buf[4] = 0x00; /* Physical format */
 
1588
            buf[5] = 0x40; /* Not writable, is readable */
 
1589
            cpu_to_be16wu((uint16_t *)(buf + 6), 2048 + 4);
 
1590
 
 
1591
            buf[8] = 0x01; /* Copyright info */
 
1592
            buf[9] = 0x40; /* Not writable, is readable */
 
1593
            cpu_to_be16wu((uint16_t *)(buf + 10), 4 + 4);
 
1594
 
 
1595
            buf[12] = 0x03; /* BCA info */
 
1596
            buf[13] = 0x40; /* Not writable, is readable */
 
1597
            cpu_to_be16wu((uint16_t *)(buf + 14), 188 + 4);
 
1598
 
 
1599
            buf[16] = 0x04; /* Manufacturing info */
 
1600
            buf[17] = 0x40; /* Not writable, is readable */
 
1601
            cpu_to_be16wu((uint16_t *)(buf + 18), 2048 + 4);
 
1602
 
 
1603
            /* Size of buffer, not including 2 byte size field */
 
1604
            cpu_to_be16wu((uint16_t *)buf, 16 + 2);
 
1605
 
 
1606
            /* data written + 4 byte header */
 
1607
            return (16 + 4);
 
1608
 
 
1609
        default: /* TODO: formats beyond DVD-ROM requires */
 
1610
            return -ASC_INV_FIELD_IN_CMD_PACKET;
 
1611
    }
 
1612
}
 
1613
 
1293
1614
static void ide_atapi_cmd(IDEState *s)
1294
1615
{
1295
1616
    const uint8_t *packet;
1308
1629
        printf("\n");
1309
1630
    }
1310
1631
#endif
 
1632
    /* If there's a UNIT_ATTENTION condition pending, only
 
1633
       REQUEST_SENSE and INQUIRY commands are allowed to complete. */
 
1634
    if (s->sense_key == SENSE_UNIT_ATTENTION &&
 
1635
        s->io_buffer[0] != GPCMD_REQUEST_SENSE &&
 
1636
        s->io_buffer[0] != GPCMD_INQUIRY) {
 
1637
        ide_atapi_cmd_check_status(s);
 
1638
        return;
 
1639
    }
1311
1640
    switch(s->io_buffer[0]) {
1312
1641
    case GPCMD_TEST_UNIT_READY:
1313
1642
        if (bdrv_is_inserted(s->bs)) {
1363
1692
                    buf[10] = 0x00;
1364
1693
                    buf[11] = 0x00;
1365
1694
 
1366
 
                    buf[12] = 0x70;
 
1695
                    /* Claim PLAY_AUDIO capability (0x01) since some Linux
 
1696
                       code checks for this to automount media. */
 
1697
                    buf[12] = 0x71;
1367
1698
                    buf[13] = 3 << 5;
1368
1699
                    buf[14] = (1 << 0) | (1 << 3) | (1 << 5);
1369
1700
                    if (bdrv_is_locked(s->bs))
1403
1734
        buf[2] = s->sense_key;
1404
1735
        buf[7] = 10;
1405
1736
        buf[12] = s->asc;
 
1737
        if (s->sense_key == SENSE_UNIT_ATTENTION)
 
1738
            s->sense_key = SENSE_NONE;
1406
1739
        ide_atapi_cmd_reply(s, 18, max_len);
1407
1740
        break;
1408
1741
    case GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL:
1577
1910
    case GPCMD_READ_DVD_STRUCTURE:
1578
1911
        {
1579
1912
            int media = packet[1];
1580
 
            int layer = packet[6];
1581
 
            int format = packet[2];
1582
 
            uint64_t total_sectors;
1583
 
 
1584
 
            if (media != 0 || layer != 0)
1585
 
            {
1586
 
                ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST,
1587
 
                                    ASC_INV_FIELD_IN_CMD_PACKET);
 
1913
            int format = packet[7];
 
1914
            int ret;
 
1915
 
 
1916
            max_len = ube16_to_cpu(packet + 8);
 
1917
 
 
1918
            if (format < 0xff) {
 
1919
                if (media_is_cd(s)) {
 
1920
                    ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST,
 
1921
                                        ASC_INCOMPATIBLE_FORMAT);
 
1922
                    break;
 
1923
                } else if (!media_present(s)) {
 
1924
                    ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST,
 
1925
                                        ASC_INV_FIELD_IN_CMD_PACKET);
 
1926
                    break;
 
1927
                }
1588
1928
            }
1589
1929
 
 
1930
            memset(buf, 0, max_len > IDE_DMA_BUF_SECTORS * 512 + 4 ?
 
1931
                   IDE_DMA_BUF_SECTORS * 512 + 4 : max_len);
 
1932
 
1590
1933
            switch (format) {
1591
 
                case 0:
1592
 
                    bdrv_get_geometry(s->bs, &total_sectors);
1593
 
                    total_sectors >>= 2;
1594
 
                    if (total_sectors == 0) {
1595
 
                        ide_atapi_cmd_error(s, SENSE_NOT_READY,
1596
 
                                            ASC_MEDIUM_NOT_PRESENT);
 
1934
                case 0x00 ... 0x7f:
 
1935
                case 0xff:
 
1936
                    if (media == 0) {
 
1937
                        ret = ide_dvd_read_structure(s, format, packet, buf);
 
1938
 
 
1939
                        if (ret < 0)
 
1940
                            ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST, -ret);
 
1941
                        else
 
1942
                            ide_atapi_cmd_reply(s, ret, max_len);
 
1943
 
1597
1944
                        break;
1598
1945
                    }
1599
 
 
1600
 
                    memset(buf, 0, 2052);
1601
 
 
1602
 
                    buf[4] = 1;   // DVD-ROM, part version 1
1603
 
                    buf[5] = 0xf; // 120mm disc, maximum rate unspecified
1604
 
                    buf[6] = 0;   // one layer, embossed data
1605
 
                    buf[7] = 0;
1606
 
 
1607
 
                    cpu_to_ube32(buf + 8, 0);
1608
 
                    cpu_to_ube32(buf + 12, total_sectors - 1);
1609
 
                    cpu_to_ube32(buf + 16, total_sectors - 1);
1610
 
 
1611
 
                    cpu_to_be16wu((uint16_t *)buf, 2048 + 4);
1612
 
 
1613
 
                    ide_atapi_cmd_reply(s, 2048 + 3, 2048 + 4);
1614
 
                    break;
1615
 
 
 
1946
                    /* TODO: BD support, fall through for now */
 
1947
 
 
1948
                /* Generic disk structures */
 
1949
                case 0x80: /* TODO: AACS volume identifier */
 
1950
                case 0x81: /* TODO: AACS media serial number */
 
1951
                case 0x82: /* TODO: AACS media identifier */
 
1952
                case 0x83: /* TODO: AACS media key block */
 
1953
                case 0x90: /* TODO: List of recognized format layers */
 
1954
                case 0xc0: /* TODO: Write protection status */
1616
1955
                default:
1617
1956
                    ide_atapi_cmd_error(s, SENSE_ILLEGAL_REQUEST,
1618
1957
                                        ASC_INV_FIELD_IN_CMD_PACKET);
1634
1973
        buf[6] = 0; /* reserved */
1635
1974
        buf[7] = 0; /* reserved */
1636
1975
        padstr8(buf + 8, 8, "QEMU");
1637
 
        padstr8(buf + 16, 16, "QEMU CD-ROM");
 
1976
        padstr8(buf + 16, 16, "QEMU DVD-ROM");
1638
1977
        padstr8(buf + 32, 4, QEMU_VERSION);
1639
1978
        ide_atapi_cmd_reply(s, 36, max_len);
1640
1979
        break;
1641
1980
    case GPCMD_GET_CONFIGURATION:
1642
1981
        {
1643
 
            uint64_t total_sectors;
 
1982
            uint32_t len;
 
1983
            uint8_t index = 0;
1644
1984
 
1645
1985
            /* only feature 0 is supported */
1646
1986
            if (packet[2] != 0 || packet[3] != 0) {
1648
1988
                                    ASC_INV_FIELD_IN_CMD_PACKET);
1649
1989
                break;
1650
1990
            }
1651
 
            memset(buf, 0, 32);
1652
 
            bdrv_get_geometry(s->bs, &total_sectors);
1653
 
            buf[3] = 16;
1654
 
            buf[7] = total_sectors <= 1433600 ? 0x08 : 0x10; /* current profile */
1655
 
            buf[10] = 0x10 | 0x1;
1656
 
            buf[11] = 0x08; /* size of profile list */
1657
 
            buf[13] = 0x10; /* DVD-ROM profile */
1658
 
            buf[14] = buf[7] == 0x10; /* (in)active */
1659
 
            buf[17] = 0x08; /* CD-ROM profile */
1660
 
            buf[18] = buf[7] == 0x08; /* (in)active */
1661
 
            ide_atapi_cmd_reply(s, 32, 32);
 
1991
 
 
1992
            /* XXX: could result in alignment problems in some architectures */
 
1993
            max_len = ube16_to_cpu(packet + 7);
 
1994
 
 
1995
            /*
 
1996
             * XXX: avoid overflow for io_buffer if max_len is bigger than
 
1997
             *      the size of that buffer (dimensioned to max number of
 
1998
             *      sectors to transfer at once)
 
1999
             *
 
2000
             *      Only a problem if the feature/profiles grow.
 
2001
             */
 
2002
            if (max_len > 512) /* XXX: assume 1 sector */
 
2003
                max_len = 512;
 
2004
 
 
2005
            memset(buf, 0, max_len);
 
2006
            /* 
 
2007
             * the number of sectors from the media tells us which profile
 
2008
             * to use as current.  0 means there is no media
 
2009
             */
 
2010
            if (media_is_dvd(s))
 
2011
                cpu_to_ube16(buf + 6, MMC_PROFILE_DVD_ROM);
 
2012
            else if (media_is_cd(s))
 
2013
                cpu_to_ube16(buf + 6, MMC_PROFILE_CD_ROM);
 
2014
 
 
2015
            buf[10] = 0x02 | 0x01; /* persistent and current */
 
2016
            len = 12; /* headers: 8 + 4 */
 
2017
            len += ide_atapi_set_profile(buf, &index, MMC_PROFILE_DVD_ROM);
 
2018
            len += ide_atapi_set_profile(buf, &index, MMC_PROFILE_CD_ROM);
 
2019
            cpu_to_ube32(buf, len - 4); /* data length */
 
2020
 
 
2021
            ide_atapi_cmd_reply(s, len, max_len);
1662
2022
            break;
1663
2023
        }
1664
2024
    default:
1727
2087
    IDEState *s = opaque;
1728
2088
    uint64_t nb_sectors;
1729
2089
 
1730
 
    /* XXX: send interrupt too */
1731
2090
    bdrv_get_geometry(s->bs, &nb_sectors);
1732
2091
    s->nb_sectors = nb_sectors;
 
2092
 
 
2093
    s->sense_key = SENSE_UNIT_ATTENTION;
 
2094
    s->asc = ASC_MEDIUM_MAY_HAVE_CHANGED;
 
2095
 
 
2096
    ide_set_irq(s);
1733
2097
}
1734
2098
 
1735
2099
static void ide_cmd_lba48_transform(IDEState *s, int lba48)
1774
2138
#endif
1775
2139
 
1776
2140
    addr &= 7;
 
2141
 
 
2142
    /* ignore writes to command block while busy with previous command */
 
2143
    if (addr != 7 && (ide_if->cur_drive->status & (BUSY_STAT|DRQ_STAT)))
 
2144
        return;
 
2145
 
1777
2146
    switch(addr) {
1778
2147
    case 0:
1779
2148
        break;
1833
2202
        if (s != ide_if && !s->bs)
1834
2203
            break;
1835
2204
 
 
2205
        /* Only DEVICE RESET is allowed while BSY or/and DRQ are set */
 
2206
        if ((s->status & (BUSY_STAT|DRQ_STAT)) && val != WIN_DEVICE_RESET)
 
2207
            break;
 
2208
 
1836
2209
        switch(val) {
1837
2210
        case WIN_IDENTIFY:
1838
2211
            if (s->bs && !s->is_cdrom) {
1860
2233
            if (s->is_cf && s->nsector == 0) {
1861
2234
                /* Disable Read and Write Multiple */
1862
2235
                s->mult_sectors = 0;
1863
 
                s->status = READY_STAT;
 
2236
                s->status = READY_STAT | SEEK_STAT;
1864
2237
            } else if ((s->nsector & 0xff) != 0 &&
1865
2238
                ((s->nsector & 0xff) > MAX_MULT_SECTORS ||
1866
2239
                 (s->nsector & (s->nsector - 1)) != 0)) {
1867
2240
                ide_abort_command(s);
1868
2241
            } else {
1869
2242
                s->mult_sectors = s->nsector & 0xff;
1870
 
                s->status = READY_STAT;
 
2243
                s->status = READY_STAT | SEEK_STAT;
1871
2244
            }
1872
2245
            ide_set_irq(s);
1873
2246
            break;
1877
2250
        case WIN_VERIFY_ONCE:
1878
2251
            /* do sector number check ? */
1879
2252
            ide_cmd_lba48_transform(s, lba48);
1880
 
            s->status = READY_STAT;
 
2253
            s->status = READY_STAT | SEEK_STAT;
1881
2254
            ide_set_irq(s);
1882
2255
            break;
1883
2256
        case WIN_READ_EXT:
1952
2325
        case WIN_READ_NATIVE_MAX:
1953
2326
            ide_cmd_lba48_transform(s, lba48);
1954
2327
            ide_set_sector(s, s->nb_sectors - 1);
1955
 
            s->status = READY_STAT;
 
2328
            s->status = READY_STAT | SEEK_STAT;
1956
2329
            ide_set_irq(s);
1957
2330
            break;
1958
2331
        case WIN_CHECKPOWERMODE1:
1959
2332
        case WIN_CHECKPOWERMODE2:
1960
2333
            s->nsector = 0xff; /* device active or idle */
1961
 
            s->status = READY_STAT;
 
2334
            s->status = READY_STAT | SEEK_STAT;
1962
2335
            ide_set_irq(s);
1963
2336
            break;
1964
2337
        case WIN_SETFEATURES:
1989
2362
                switch (s->nsector >> 3) {
1990
2363
                    case 0x00: /* pio default */
1991
2364
                    case 0x01: /* pio mode */
 
2365
                        put_le16(s->identify_data + 62,0x07);
 
2366
                        put_le16(s->identify_data + 63,0x07);
 
2367
                        put_le16(s->identify_data + 88,0x3f);
 
2368
                        break;
 
2369
                    case 0x02: /* sigle word dma mode*/
 
2370
                        put_le16(s->identify_data + 62,0x07 | (1 << (val + 8)));
1992
2371
                        put_le16(s->identify_data + 63,0x07);
1993
2372
                        put_le16(s->identify_data + 88,0x3f);
1994
2373
                        break;
1995
2374
                    case 0x04: /* mdma mode */
 
2375
                        put_le16(s->identify_data + 62,0x07);
1996
2376
                        put_le16(s->identify_data + 63,0x07 | (1 << (val + 8)));
1997
2377
                        put_le16(s->identify_data + 88,0x3f);
1998
2378
                        break;
1999
2379
                    case 0x08: /* udma mode */
 
2380
                        put_le16(s->identify_data + 62,0x07);
2000
2381
                        put_le16(s->identify_data + 63,0x07);
2001
2382
                        put_le16(s->identify_data + 88,0x3f | (1 << (val + 8)));
2002
2383
                        break;
2015
2396
        case WIN_FLUSH_CACHE_EXT:
2016
2397
            if (s->bs)
2017
2398
                bdrv_flush(s->bs);
2018
 
            s->status = READY_STAT;
 
2399
            s->status = READY_STAT | SEEK_STAT;
2019
2400
            ide_set_irq(s);
2020
2401
            break;
2021
2402
        case WIN_STANDBY:
2031
2412
            s->status = READY_STAT;
2032
2413
            ide_set_irq(s);
2033
2414
            break;
 
2415
        case WIN_SEEK:
 
2416
            if(s->is_cdrom)
 
2417
                goto abort_cmd;
 
2418
            /* XXX: Check that seek is within bounds */
 
2419
            s->status = READY_STAT | SEEK_STAT;
 
2420
            ide_set_irq(s);
 
2421
            break;
2034
2422
            /* ATAPI commands */
2035
2423
        case WIN_PIDENTIFY:
2036
2424
            if (s->is_cdrom) {
2044
2432
            break;
2045
2433
        case WIN_DIAGNOSE:
2046
2434
            ide_set_signature(s);
2047
 
            s->status = 0x00; /* NOTE: READY is _not_ set */
2048
 
            s->error = 0x01;
 
2435
            if (s->is_cdrom)
 
2436
                s->status = 0; /* ATAPI spec (v6) section 9.10 defines packet
 
2437
                                * devices to return a clear status register
 
2438
                                * with READY_STAT *not* set. */
 
2439
            else
 
2440
                s->status = READY_STAT | SEEK_STAT;
 
2441
            s->error = 0x01; /* Device 0 passed, Device 1 passed or not
 
2442
                              * present. 
 
2443
                              */
2049
2444
            ide_set_irq(s);
2050
2445
            break;
2051
2446
        case WIN_SRST:
2061
2456
            /* overlapping commands not supported */
2062
2457
            if (s->feature & 0x02)
2063
2458
                goto abort_cmd;
2064
 
            s->status = READY_STAT;
 
2459
            s->status = READY_STAT | SEEK_STAT;
2065
2460
            s->atapi_dma = s->feature & 1;
2066
2461
            s->nsector = 1;
2067
2462
            ide_transfer_start(s, s->io_buffer, ATAPI_PACKET_SIZE,
2072
2467
            if (!s->is_cf)
2073
2468
                goto abort_cmd;
2074
2469
            s->error = 0x09;    /* miscellaneous error */
2075
 
            s->status = READY_STAT;
 
2470
            s->status = READY_STAT | SEEK_STAT;
2076
2471
            ide_set_irq(s);
2077
2472
            break;
2078
2473
        case CFA_ERASE_SECTORS:
2084
2479
            if (val == CFA_ERASE_SECTORS)
2085
2480
                s->media_changed = 1;
2086
2481
            s->error = 0x00;
2087
 
            s->status = READY_STAT;
 
2482
            s->status = READY_STAT | SEEK_STAT;
2088
2483
            ide_set_irq(s);
2089
2484
            break;
2090
2485
        case CFA_TRANSLATE_SECTOR:
2091
2486
            if (!s->is_cf)
2092
2487
                goto abort_cmd;
2093
2488
            s->error = 0x00;
2094
 
            s->status = READY_STAT;
 
2489
            s->status = READY_STAT | SEEK_STAT;
2095
2490
            memset(s->io_buffer, 0, 0x200);
2096
2491
            s->io_buffer[0x00] = s->hcyl;                       /* Cyl MSB */
2097
2492
            s->io_buffer[0x01] = s->lcyl;                       /* Cyl LSB */
2137
2532
            default:
2138
2533
                goto abort_cmd;
2139
2534
            }
2140
 
            s->status = READY_STAT;
 
2535
            s->status = READY_STAT | SEEK_STAT;
2141
2536
            ide_set_irq(s);
2142
2537
            break;
2143
2538
        default:
2165
2560
        ret = 0xff;
2166
2561
        break;
2167
2562
    case 1:
2168
 
        if (!ide_if[0].bs && !ide_if[1].bs)
 
2563
        if ((!ide_if[0].bs && !ide_if[1].bs) ||
 
2564
            (s != ide_if && !s->bs))
2169
2565
            ret = 0;
2170
2566
        else if (!hob)
2171
2567
            ret = s->error;
2283
2679
    IDEState *s = ((IDEState *)opaque)->cur_drive;
2284
2680
    uint8_t *p;
2285
2681
 
 
2682
    /* PIO data access allowed only when DRQ bit is set */
 
2683
    if (!(s->status & DRQ_STAT))
 
2684
        return;
 
2685
 
2286
2686
    p = s->data_ptr;
2287
2687
    *(uint16_t *)p = le16_to_cpu(val);
2288
2688
    p += 2;
2296
2696
    IDEState *s = ((IDEState *)opaque)->cur_drive;
2297
2697
    uint8_t *p;
2298
2698
    int ret;
 
2699
 
 
2700
    /* PIO data access allowed only when DRQ bit is set */
 
2701
    if (!(s->status & DRQ_STAT))
 
2702
        return 0;
 
2703
 
2299
2704
    p = s->data_ptr;
2300
2705
    ret = cpu_to_le16(*(uint16_t *)p);
2301
2706
    p += 2;
2310
2715
    IDEState *s = ((IDEState *)opaque)->cur_drive;
2311
2716
    uint8_t *p;
2312
2717
 
 
2718
    /* PIO data access allowed only when DRQ bit is set */
 
2719
    if (!(s->status & DRQ_STAT))
 
2720
        return;
 
2721
 
2313
2722
    p = s->data_ptr;
2314
2723
    *(uint32_t *)p = le32_to_cpu(val);
2315
2724
    p += 4;
2324
2733
    uint8_t *p;
2325
2734
    int ret;
2326
2735
 
 
2736
    /* PIO data access allowed only when DRQ bit is set */
 
2737
    if (!(s->status & DRQ_STAT))
 
2738
        return 0;
 
2739
 
2327
2740
    p = s->data_ptr;
2328
2741
    ret = cpu_to_le32(*(uint32_t *)p);
2329
2742
    p += 4;
2351
2764
        s->mult_sectors = MAX_MULT_SECTORS;
2352
2765
    s->cur_drive = s;
2353
2766
    s->select = 0xa0;
2354
 
    s->status = READY_STAT;
 
2767
    s->status = READY_STAT | SEEK_STAT;
2355
2768
    ide_set_signature(s);
2356
2769
    /* init the transfer handler so that 0xffff is returned on data
2357
2770
       accesses */
2360
2773
    s->media_changed = 0;
2361
2774
}
2362
2775
 
2363
 
struct partition {
2364
 
        uint8_t boot_ind;               /* 0x80 - active */
2365
 
        uint8_t head;           /* starting head */
2366
 
        uint8_t sector;         /* starting sector */
2367
 
        uint8_t cyl;            /* starting cylinder */
2368
 
        uint8_t sys_ind;                /* What partition type */
2369
 
        uint8_t end_head;               /* end head */
2370
 
        uint8_t end_sector;     /* end sector */
2371
 
        uint8_t end_cyl;                /* end cylinder */
2372
 
        uint32_t start_sect;    /* starting sector counting from 0 */
2373
 
        uint32_t nr_sects;              /* nr of sectors in partition */
2374
 
} __attribute__((packed));
2375
 
 
2376
 
/* try to guess the disk logical geometry from the MSDOS partition table. Return 0 if OK, -1 if could not guess */
2377
 
static int guess_disk_lchs(IDEState *s,
2378
 
                           int *pcylinders, int *pheads, int *psectors)
2379
 
{
2380
 
    uint8_t *buf;
2381
 
    int ret, i, heads, sectors, cylinders;
2382
 
    struct partition *p;
2383
 
    uint32_t nr_sects;
2384
 
 
2385
 
    buf = qemu_memalign(512, 512);
2386
 
    if (buf == NULL)
2387
 
        return -1;
2388
 
    ret = bdrv_read(s->bs, 0, buf, 1);
2389
 
    if (ret < 0) {
2390
 
        qemu_free(buf);
2391
 
        return -1;
2392
 
    }
2393
 
    /* test msdos magic */
2394
 
    if (buf[510] != 0x55 || buf[511] != 0xaa) {
2395
 
        qemu_free(buf);
2396
 
        return -1;
2397
 
    }
2398
 
    for(i = 0; i < 4; i++) {
2399
 
        p = ((struct partition *)(buf + 0x1be)) + i;
2400
 
        nr_sects = le32_to_cpu(p->nr_sects);
2401
 
        if (nr_sects && p->end_head) {
2402
 
            /* We make the assumption that the partition terminates on
2403
 
               a cylinder boundary */
2404
 
            heads = p->end_head + 1;
2405
 
            sectors = p->end_sector & 63;
2406
 
            if (sectors == 0)
2407
 
                continue;
2408
 
            cylinders = s->nb_sectors / (heads * sectors);
2409
 
            if (cylinders < 1 || cylinders > 16383)
2410
 
                continue;
2411
 
            *pheads = heads;
2412
 
            *psectors = sectors;
2413
 
            *pcylinders = cylinders;
2414
 
#if 0
2415
 
            printf("guessed geometry: LCHS=%d %d %d\n",
2416
 
                   cylinders, heads, sectors);
2417
 
#endif
2418
 
            qemu_free(buf);
2419
 
            return 0;
2420
 
        }
2421
 
    }
2422
 
    qemu_free(buf);
2423
 
    return -1;
2424
 
}
2425
 
 
2426
2776
static void ide_init2(IDEState *ide_state,
2427
2777
                      BlockDriverState *hd0, BlockDriverState *hd1,
2428
2778
                      qemu_irq irq)
2429
2779
{
2430
2780
    IDEState *s;
2431
2781
    static int drive_serial = 1;
2432
 
    int i, cylinders, heads, secs, translation, lba_detected = 0;
 
2782
    int i, cylinders, heads, secs;
2433
2783
    uint64_t nb_sectors;
2434
2784
 
2435
2785
    for(i = 0; i < 2; i++) {
2436
2786
        s = ide_state + i;
2437
 
        s->io_buffer = qemu_memalign(512, MAX_MULT_SECTORS*512 + 4);
 
2787
        s->io_buffer = qemu_memalign(512, IDE_DMA_BUF_SECTORS*512 + 4);
2438
2788
        if (i == 0)
2439
2789
            s->bs = hd0;
2440
2790
        else
2441
2791
            s->bs = hd1;
2442
2792
        if (s->bs) {
2443
2793
            bdrv_get_geometry(s->bs, &nb_sectors);
 
2794
            bdrv_guess_geometry(s->bs, &cylinders, &heads, &secs);
 
2795
            s->cylinders = cylinders;
 
2796
            s->heads = heads;
 
2797
            s->sectors = secs;
2444
2798
            s->nb_sectors = nb_sectors;
2445
 
            /* if a geometry hint is available, use it */
2446
 
            bdrv_get_geometry_hint(s->bs, &cylinders, &heads, &secs);
2447
 
            translation = bdrv_get_translation_hint(s->bs);
2448
 
            if (cylinders != 0) {
2449
 
                s->cylinders = cylinders;
2450
 
                s->heads = heads;
2451
 
                s->sectors = secs;
2452
 
            } else {
2453
 
                if (guess_disk_lchs(s, &cylinders, &heads, &secs) == 0) {
2454
 
                    if (heads > 16) {
2455
 
                        /* if heads > 16, it means that a BIOS LBA
2456
 
                           translation was active, so the default
2457
 
                           hardware geometry is OK */
2458
 
                        lba_detected = 1;
2459
 
                        goto default_geometry;
2460
 
                    } else {
2461
 
                        s->cylinders = cylinders;
2462
 
                        s->heads = heads;
2463
 
                        s->sectors = secs;
2464
 
                        /* disable any translation to be in sync with
2465
 
                           the logical geometry */
2466
 
                        if (translation == BIOS_ATA_TRANSLATION_AUTO) {
2467
 
                            bdrv_set_translation_hint(s->bs,
2468
 
                                                      BIOS_ATA_TRANSLATION_NONE);
2469
 
                        }
2470
 
                    }
2471
 
                } else {
2472
 
                default_geometry:
2473
 
                    /* if no geometry, use a standard physical disk geometry */
2474
 
                    cylinders = nb_sectors / (16 * 63);
2475
 
                    if (cylinders > 16383)
2476
 
                        cylinders = 16383;
2477
 
                    else if (cylinders < 2)
2478
 
                        cylinders = 2;
2479
 
                    s->cylinders = cylinders;
2480
 
                    s->heads = 16;
2481
 
                    s->sectors = 63;
2482
 
                    if ((lba_detected == 1) && (translation == BIOS_ATA_TRANSLATION_AUTO)) {
2483
 
                      if ((s->cylinders * s->heads) <= 131072) {
2484
 
                        bdrv_set_translation_hint(s->bs,
2485
 
                                                  BIOS_ATA_TRANSLATION_LARGE);
2486
 
                      } else {
2487
 
                        bdrv_set_translation_hint(s->bs,
2488
 
                                                  BIOS_ATA_TRANSLATION_LBA);
2489
 
                      }
2490
 
                    }
2491
 
                }
2492
 
                bdrv_set_geometry_hint(s->bs, s->cylinders, s->heads, s->sectors);
2493
 
            }
 
2799
 
2494
2800
            if (bdrv_get_type_hint(s->bs) == BDRV_TYPE_CDROM) {
2495
2801
                s->is_cdrom = 1;
2496
2802
                bdrv_set_change_cb(s->bs, cdrom_change_cb, s);
2497
2803
            }
2498
2804
        }
2499
2805
        s->drive_serial = drive_serial++;
 
2806
        strncpy(s->drive_serial_str, drive_get_serial(s->bs),
 
2807
                sizeof(s->drive_serial_str));
 
2808
        if (strlen(s->drive_serial_str) == 0)
 
2809
            snprintf(s->drive_serial_str, sizeof(s->drive_serial_str),
 
2810
                    "QM%05d", s->drive_serial);
2500
2811
        s->irq = irq;
2501
2812
        s->sector_write_timer = qemu_new_timer(vm_clock,
2502
2813
                                               ide_sector_write_timer_cb, s);
2585
2896
    IDEState *ide_state;
2586
2897
 
2587
2898
    ide_state = qemu_mallocz(sizeof(IDEState) * 2);
2588
 
    if (!ide_state)
2589
 
        return;
2590
2899
 
2591
2900
    ide_init2(ide_state, hd0, hd1, irq);
2592
2901
    ide_init_ioport(ide_state, iobase, iobase2);
2631
2940
    bm->cur_prd_last = 0;
2632
2941
    bm->cur_prd_addr = 0;
2633
2942
    bm->cur_prd_len = 0;
 
2943
    bm->sector_num = ide_get_sector(s);
 
2944
    bm->nsector = s->nsector;
2634
2945
    if (bm->status & BM_STATUS_DMAING) {
2635
2946
        bm->dma_cb(bm, 0);
2636
2947
    }
2637
2948
}
2638
2949
 
 
2950
static void ide_dma_restart(IDEState *s)
 
2951
{
 
2952
    BMDMAState *bm = s->bmdma;
 
2953
    ide_set_sector(s, bm->sector_num);
 
2954
    s->io_buffer_index = 0;
 
2955
    s->io_buffer_size = 0;
 
2956
    s->nsector = bm->nsector;
 
2957
    bm->cur_addr = bm->addr;
 
2958
    bm->dma_cb = ide_write_dma_cb;
 
2959
    ide_dma_start(s, bm->dma_cb);
 
2960
}
 
2961
 
 
2962
static void ide_dma_cancel(BMDMAState *bm)
 
2963
{
 
2964
    if (bm->status & BM_STATUS_DMAING) {
 
2965
        bm->status &= ~BM_STATUS_DMAING;
 
2966
        /* cancel DMA request */
 
2967
        bm->ide_if = NULL;
 
2968
        bm->dma_cb = NULL;
 
2969
        if (bm->aiocb) {
 
2970
#ifdef DEBUG_AIO
 
2971
            printf("aio_cancel\n");
 
2972
#endif
 
2973
            bdrv_aio_cancel(bm->aiocb);
 
2974
            bm->aiocb = NULL;
 
2975
        }
 
2976
    }
 
2977
}
 
2978
 
2639
2979
static void bmdma_cmd_writeb(void *opaque, uint32_t addr, uint32_t val)
2640
2980
{
2641
2981
    BMDMAState *bm = opaque;
2644
2984
#endif
2645
2985
    if (!(val & BM_CMD_START)) {
2646
2986
        /* XXX: do it better */
2647
 
        if (bm->status & BM_STATUS_DMAING) {
2648
 
            bm->status &= ~BM_STATUS_DMAING;
2649
 
            /* cancel DMA request */
2650
 
            bm->ide_if = NULL;
2651
 
            bm->dma_cb = NULL;
2652
 
            if (bm->aiocb) {
2653
 
#ifdef DEBUG_AIO
2654
 
                printf("aio_cancel\n");
2655
 
#endif
2656
 
                bdrv_aio_cancel(bm->aiocb);
2657
 
                bm->aiocb = NULL;
2658
 
            }
2659
 
        }
 
2987
        ide_dma_cancel(bm);
2660
2988
        bm->cmd = val & 0x09;
2661
2989
    } else {
2662
2990
        if (!(bm->status & BM_STATUS_DMAING)) {
2742
3070
    }
2743
3071
}
2744
3072
 
 
3073
static uint32_t bmdma_addr_readb(void *opaque, uint32_t addr)
 
3074
{
 
3075
    BMDMAState *bm = opaque;
 
3076
    uint32_t val;
 
3077
    val = (bm->addr >> ((addr & 3) * 8)) & 0xff;
 
3078
#ifdef DEBUG_IDE
 
3079
    printf("%s: 0x%08x\n", __func__, val);
 
3080
#endif
 
3081
    return val;
 
3082
}
 
3083
 
 
3084
static void bmdma_addr_writeb(void *opaque, uint32_t addr, uint32_t val)
 
3085
{
 
3086
    BMDMAState *bm = opaque;
 
3087
    int shift = (addr & 3) * 8;
 
3088
#ifdef DEBUG_IDE
 
3089
    printf("%s: 0x%08x\n", __func__, val);
 
3090
#endif
 
3091
    bm->addr &= ~(0xFF << shift);
 
3092
    bm->addr |= ((val & 0xFF) << shift) & ~3;
 
3093
    bm->cur_addr = bm->addr;
 
3094
}
 
3095
 
 
3096
static uint32_t bmdma_addr_readw(void *opaque, uint32_t addr)
 
3097
{
 
3098
    BMDMAState *bm = opaque;
 
3099
    uint32_t val;
 
3100
    val = (bm->addr >> ((addr & 3) * 8)) & 0xffff;
 
3101
#ifdef DEBUG_IDE
 
3102
    printf("%s: 0x%08x\n", __func__, val);
 
3103
#endif
 
3104
    return val;
 
3105
}
 
3106
 
 
3107
static void bmdma_addr_writew(void *opaque, uint32_t addr, uint32_t val)
 
3108
{
 
3109
    BMDMAState *bm = opaque;
 
3110
    int shift = (addr & 3) * 8;
 
3111
#ifdef DEBUG_IDE
 
3112
    printf("%s: 0x%08x\n", __func__, val);
 
3113
#endif
 
3114
    bm->addr &= ~(0xFFFF << shift);
 
3115
    bm->addr |= ((val & 0xFFFF) << shift) & ~3;
 
3116
    bm->cur_addr = bm->addr;
 
3117
}
 
3118
 
2745
3119
static uint32_t bmdma_addr_readl(void *opaque, uint32_t addr)
2746
3120
{
2747
3121
    BMDMAState *bm = opaque;
2774
3148
        d->ide_if[2 * i].bmdma = bm;
2775
3149
        d->ide_if[2 * i + 1].bmdma = bm;
2776
3150
        bm->pci_dev = (PCIIDEState *)pci_dev;
 
3151
        qemu_add_vm_change_state_handler(ide_dma_restart_cb, bm);
2777
3152
 
2778
3153
        register_ioport_write(addr, 1, 1, bmdma_cmd_writeb, bm);
2779
3154
 
2780
3155
        register_ioport_write(addr + 1, 3, 1, bmdma_writeb, bm);
2781
3156
        register_ioport_read(addr, 4, 1, bmdma_readb, bm);
2782
3157
 
 
3158
        register_ioport_write(addr + 4, 4, 1, bmdma_addr_writeb, bm);
 
3159
        register_ioport_read(addr + 4, 4, 1, bmdma_addr_readb, bm);
 
3160
        register_ioport_write(addr + 4, 4, 2, bmdma_addr_writew, bm);
 
3161
        register_ioport_read(addr + 4, 4, 2, bmdma_addr_readw, bm);
2783
3162
        register_ioport_write(addr + 4, 4, 4, bmdma_addr_writel, bm);
2784
3163
        register_ioport_read(addr + 4, 4, 4, bmdma_addr_readl, bm);
2785
3164
        addr += 8;
2786
3165
    }
2787
3166
}
2788
3167
 
 
3168
static void pci_ide_save(QEMUFile* f, void *opaque)
 
3169
{
 
3170
    PCIIDEState *d = opaque;
 
3171
    int i;
 
3172
 
 
3173
    pci_device_save(&d->dev, f);
 
3174
 
 
3175
    for(i = 0; i < 2; i++) {
 
3176
        BMDMAState *bm = &d->bmdma[i];
 
3177
        uint8_t ifidx;
 
3178
        qemu_put_8s(f, &bm->cmd);
 
3179
        qemu_put_8s(f, &bm->status);
 
3180
        qemu_put_be32s(f, &bm->addr);
 
3181
        qemu_put_sbe64s(f, &bm->sector_num);
 
3182
        qemu_put_be32s(f, &bm->nsector);
 
3183
        ifidx = bm->ide_if ? bm->ide_if - d->ide_if : 0;
 
3184
        qemu_put_8s(f, &ifidx);
 
3185
        /* XXX: if a transfer is pending, we do not save it yet */
 
3186
    }
 
3187
 
 
3188
    /* per IDE interface data */
 
3189
    for(i = 0; i < 2; i++) {
 
3190
        IDEState *s = &d->ide_if[i * 2];
 
3191
        uint8_t drive1_selected;
 
3192
        qemu_put_8s(f, &s->cmd);
 
3193
        drive1_selected = (s->cur_drive != s);
 
3194
        qemu_put_8s(f, &drive1_selected);
 
3195
    }
 
3196
 
 
3197
    /* per IDE drive data */
 
3198
    for(i = 0; i < 4; i++) {
 
3199
        ide_save(f, &d->ide_if[i]);
 
3200
    }
 
3201
}
 
3202
 
 
3203
static int pci_ide_load(QEMUFile* f, void *opaque, int version_id)
 
3204
{
 
3205
    PCIIDEState *d = opaque;
 
3206
    int ret, i;
 
3207
 
 
3208
    if (version_id != 2)
 
3209
        return -EINVAL;
 
3210
    ret = pci_device_load(&d->dev, f);
 
3211
    if (ret < 0)
 
3212
        return ret;
 
3213
 
 
3214
    for(i = 0; i < 2; i++) {
 
3215
        BMDMAState *bm = &d->bmdma[i];
 
3216
        uint8_t ifidx;
 
3217
        qemu_get_8s(f, &bm->cmd);
 
3218
        qemu_get_8s(f, &bm->status);
 
3219
        qemu_get_be32s(f, &bm->addr);
 
3220
        qemu_get_sbe64s(f, &bm->sector_num);
 
3221
        qemu_get_be32s(f, &bm->nsector);
 
3222
        qemu_get_8s(f, &ifidx);
 
3223
        bm->ide_if = &d->ide_if[ifidx];
 
3224
        /* XXX: if a transfer is pending, we do not save it yet */
 
3225
    }
 
3226
 
 
3227
    /* per IDE interface data */
 
3228
    for(i = 0; i < 2; i++) {
 
3229
        IDEState *s = &d->ide_if[i * 2];
 
3230
        uint8_t drive1_selected;
 
3231
        qemu_get_8s(f, &s->cmd);
 
3232
        qemu_get_8s(f, &drive1_selected);
 
3233
        s->cur_drive = &d->ide_if[i * 2 + (drive1_selected != 0)];
 
3234
    }
 
3235
 
 
3236
    /* per IDE drive data */
 
3237
    for(i = 0; i < 4; i++) {
 
3238
        ide_load(f, &d->ide_if[i]);
 
3239
    }
 
3240
    return 0;
 
3241
}
 
3242
 
2789
3243
/* XXX: call it also when the MRDMODE is changed from the PCI config
2790
3244
   registers */
2791
3245
static void cmd646_update_irq(PCIIDEState *d)
2812
3266
    cmd646_update_irq(d);
2813
3267
}
2814
3268
 
 
3269
static void cmd646_reset(void *opaque)
 
3270
{
 
3271
    PCIIDEState *d = opaque;
 
3272
    unsigned int i;
 
3273
 
 
3274
    for (i = 0; i < 2; i++)
 
3275
        ide_dma_cancel(&d->bmdma[i]);
 
3276
}
 
3277
 
2815
3278
/* CMD646 PCI IDE controller */
2816
3279
void pci_cmd646_ide_init(PCIBus *bus, BlockDriverState **hd_table,
2817
3280
                         int secondary_ide_enabled)
2827
3290
                                           NULL, NULL);
2828
3291
    d->type = IDE_TYPE_CMD646;
2829
3292
    pci_conf = d->dev.config;
2830
 
    pci_conf[0x00] = 0x95; // CMD646
2831
 
    pci_conf[0x01] = 0x10;
2832
 
    pci_conf[0x02] = 0x46;
2833
 
    pci_conf[0x03] = 0x06;
 
3293
    pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_CMD);
 
3294
    pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_CMD_646);
2834
3295
 
2835
3296
    pci_conf[0x08] = 0x07; // IDE controller revision
2836
3297
    pci_conf[0x09] = 0x8f;
2837
3298
 
2838
 
    pci_conf[0x0a] = 0x01; // class_sub = PCI_IDE
2839
 
    pci_conf[0x0b] = 0x01; // class_base = PCI_mass_storage
 
3299
    pci_config_set_class(pci_conf, PCI_CLASS_STORAGE_IDE);
2840
3300
    pci_conf[0x0e] = 0x00; // header_type
2841
3301
 
 
3302
    pci_conf[0x51] = 0x04; // enable IDE0
2842
3303
    if (secondary_ide_enabled) {
2843
3304
        /* XXX: if not enabled, really disable the seconday IDE controller */
2844
 
        pci_conf[0x51] = 0x80; /* enable IDE1 */
 
3305
        pci_conf[0x51] |= 0x08; /* enable IDE1 */
2845
3306
    }
2846
3307
 
2847
3308
    pci_register_io_region((PCIDevice *)d, 0, 0x8,
2863
3324
    irq = qemu_allocate_irqs(cmd646_set_irq, d, 2);
2864
3325
    ide_init2(&d->ide_if[0], hd_table[0], hd_table[1], irq[0]);
2865
3326
    ide_init2(&d->ide_if[2], hd_table[2], hd_table[3], irq[1]);
2866
 
}
2867
 
 
2868
 
static void pci_ide_save(QEMUFile* f, void *opaque)
2869
 
{
2870
 
    PCIIDEState *d = opaque;
2871
 
    int i;
2872
 
 
2873
 
    pci_device_save(&d->dev, f);
2874
 
 
2875
 
    for(i = 0; i < 2; i++) {
2876
 
        BMDMAState *bm = &d->bmdma[i];
2877
 
        qemu_put_8s(f, &bm->cmd);
2878
 
        qemu_put_8s(f, &bm->status);
2879
 
        qemu_put_be32s(f, &bm->addr);
2880
 
        /* XXX: if a transfer is pending, we do not save it yet */
2881
 
    }
2882
 
 
2883
 
    /* per IDE interface data */
2884
 
    for(i = 0; i < 2; i++) {
2885
 
        IDEState *s = &d->ide_if[i * 2];
2886
 
        uint8_t drive1_selected;
2887
 
        qemu_put_8s(f, &s->cmd);
2888
 
        drive1_selected = (s->cur_drive != s);
2889
 
        qemu_put_8s(f, &drive1_selected);
2890
 
    }
2891
 
 
2892
 
    /* per IDE drive data */
2893
 
    for(i = 0; i < 4; i++) {
2894
 
        ide_save(f, &d->ide_if[i]);
2895
 
    }
2896
 
}
2897
 
 
2898
 
static int pci_ide_load(QEMUFile* f, void *opaque, int version_id)
2899
 
{
2900
 
    PCIIDEState *d = opaque;
2901
 
    int ret, i;
2902
 
 
2903
 
    if (version_id != 1)
2904
 
        return -EINVAL;
2905
 
    ret = pci_device_load(&d->dev, f);
2906
 
    if (ret < 0)
2907
 
        return ret;
2908
 
 
2909
 
    for(i = 0; i < 2; i++) {
2910
 
        BMDMAState *bm = &d->bmdma[i];
2911
 
        qemu_get_8s(f, &bm->cmd);
2912
 
        qemu_get_8s(f, &bm->status);
2913
 
        qemu_get_be32s(f, &bm->addr);
2914
 
        /* XXX: if a transfer is pending, we do not save it yet */
2915
 
    }
2916
 
 
2917
 
    /* per IDE interface data */
2918
 
    for(i = 0; i < 2; i++) {
2919
 
        IDEState *s = &d->ide_if[i * 2];
2920
 
        uint8_t drive1_selected;
2921
 
        qemu_get_8s(f, &s->cmd);
2922
 
        qemu_get_8s(f, &drive1_selected);
2923
 
        s->cur_drive = &d->ide_if[i * 2 + (drive1_selected != 0)];
2924
 
    }
2925
 
 
2926
 
    /* per IDE drive data */
2927
 
    for(i = 0; i < 4; i++) {
2928
 
        ide_load(f, &d->ide_if[i]);
2929
 
    }
2930
 
    return 0;
2931
 
}
2932
 
 
2933
 
static void piix3_reset(PCIIDEState *d)
2934
 
{
 
3327
 
 
3328
    register_savevm("ide", 0, 2, pci_ide_save, pci_ide_load, d);
 
3329
    qemu_register_reset(cmd646_reset, d);
 
3330
    cmd646_reset(d);
 
3331
}
 
3332
 
 
3333
static void piix3_reset(void *opaque)
 
3334
{
 
3335
    PCIIDEState *d = opaque;
2935
3336
    uint8_t *pci_conf = d->dev.config;
 
3337
    int i;
 
3338
 
 
3339
    for (i = 0; i < 2; i++)
 
3340
        ide_dma_cancel(&d->bmdma[i]);
2936
3341
 
2937
3342
    pci_conf[0x04] = 0x00;
2938
3343
    pci_conf[0x05] = 0x00;
2948
3353
{
2949
3354
    PCIIDEState *d;
2950
3355
    uint8_t *pci_conf;
 
3356
    int i;
2951
3357
 
2952
3358
    /* register a function 1 of PIIX3 */
2953
3359
    d = (PCIIDEState *)pci_register_device(bus, "PIIX3 IDE",
2957
3363
    d->type = IDE_TYPE_PIIX3;
2958
3364
 
2959
3365
    pci_conf = d->dev.config;
2960
 
    pci_conf[0x00] = 0x86; // Intel
2961
 
    pci_conf[0x01] = 0x80;
2962
 
    pci_conf[0x02] = 0x10;
2963
 
    pci_conf[0x03] = 0x70;
 
3366
    pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL);
 
3367
    pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_INTEL_82371SB_1);
2964
3368
    pci_conf[0x09] = 0x80; // legacy ATA mode
2965
 
    pci_conf[0x0a] = 0x01; // class_sub = PCI_IDE
2966
 
    pci_conf[0x0b] = 0x01; // class_base = PCI_mass_storage
 
3369
    pci_config_set_class(pci_conf, PCI_CLASS_STORAGE_IDE);
2967
3370
    pci_conf[0x0e] = 0x00; // header_type
2968
3371
 
 
3372
    qemu_register_reset(piix3_reset, d);
2969
3373
    piix3_reset(d);
2970
3374
 
2971
3375
    pci_register_io_region((PCIDevice *)d, 4, 0x10,
2976
3380
    ide_init_ioport(&d->ide_if[0], 0x1f0, 0x3f6);
2977
3381
    ide_init_ioport(&d->ide_if[2], 0x170, 0x376);
2978
3382
 
2979
 
    register_savevm("ide", 0, 1, pci_ide_save, pci_ide_load, d);
 
3383
    for (i = 0; i < 4; i++)
 
3384
        if (hd_table[i])
 
3385
            hd_table[i]->private = &d->dev;
 
3386
 
 
3387
    register_savevm("ide", 0, 2, pci_ide_save, pci_ide_load, d);
2980
3388
}
2981
3389
 
2982
3390
/* hd_table must contain 4 block drivers */
2995
3403
    d->type = IDE_TYPE_PIIX4;
2996
3404
 
2997
3405
    pci_conf = d->dev.config;
2998
 
    pci_conf[0x00] = 0x86; // Intel
2999
 
    pci_conf[0x01] = 0x80;
3000
 
    pci_conf[0x02] = 0x11;
3001
 
    pci_conf[0x03] = 0x71;
 
3406
    pci_config_set_vendor_id(pci_conf, PCI_VENDOR_ID_INTEL);
 
3407
    pci_config_set_device_id(pci_conf, PCI_DEVICE_ID_INTEL_82371AB);
3002
3408
    pci_conf[0x09] = 0x80; // legacy ATA mode
3003
 
    pci_conf[0x0a] = 0x01; // class_sub = PCI_IDE
3004
 
    pci_conf[0x0b] = 0x01; // class_base = PCI_mass_storage
 
3409
    pci_config_set_class(pci_conf, PCI_CLASS_STORAGE_IDE);
3005
3410
    pci_conf[0x0e] = 0x00; // header_type
3006
3411
 
 
3412
    qemu_register_reset(piix3_reset, d);
3007
3413
    piix3_reset(d);
3008
3414
 
3009
3415
    pci_register_io_region((PCIDevice *)d, 4, 0x10,
3014
3420
    ide_init_ioport(&d->ide_if[0], 0x1f0, 0x3f6);
3015
3421
    ide_init_ioport(&d->ide_if[2], 0x170, 0x376);
3016
3422
 
3017
 
    register_savevm("ide", 0, 1, pci_ide_save, pci_ide_load, d);
 
3423
    register_savevm("ide", 0, 2, pci_ide_save, pci_ide_load, d);
3018
3424
}
3019
3425
 
 
3426
#if defined(TARGET_PPC)
3020
3427
/***********************************************************/
3021
3428
/* MacIO based PowerPC IDE */
3022
3429
 
 
3430
typedef struct MACIOIDEState {
 
3431
    IDEState ide_if[2];
 
3432
    BlockDriverAIOCB *aiocb;
 
3433
} MACIOIDEState;
 
3434
 
 
3435
static void pmac_ide_atapi_transfer_cb(void *opaque, int ret)
 
3436
{
 
3437
    DBDMA_io *io = opaque;
 
3438
    MACIOIDEState *m = io->opaque;
 
3439
    IDEState *s = m->ide_if->cur_drive;
 
3440
 
 
3441
    if (ret < 0) {
 
3442
        m->aiocb = NULL;
 
3443
        qemu_sglist_destroy(&s->sg);
 
3444
        ide_atapi_io_error(s, ret);
 
3445
        io->dma_end(opaque);
 
3446
        return;
 
3447
    }
 
3448
 
 
3449
    if (s->io_buffer_size > 0) {
 
3450
        m->aiocb = NULL;
 
3451
        qemu_sglist_destroy(&s->sg);
 
3452
 
 
3453
        s->packet_transfer_size -= s->io_buffer_size;
 
3454
 
 
3455
        s->io_buffer_index += s->io_buffer_size;
 
3456
        s->lba += s->io_buffer_index >> 11;
 
3457
        s->io_buffer_index &= 0x7ff;
 
3458
    }
 
3459
 
 
3460
    if (s->packet_transfer_size <= 0)
 
3461
        ide_atapi_cmd_ok(s);
 
3462
 
 
3463
    if (io->len == 0) {
 
3464
        io->dma_end(opaque);
 
3465
        return;
 
3466
    }
 
3467
 
 
3468
    /* launch next transfer */
 
3469
 
 
3470
    s->io_buffer_size = io->len;
 
3471
 
 
3472
    qemu_sglist_init(&s->sg, io->len / TARGET_PAGE_SIZE + 1);
 
3473
    qemu_sglist_add(&s->sg, io->addr, io->len);
 
3474
    io->addr += io->len;
 
3475
    io->len = 0;
 
3476
 
 
3477
    m->aiocb = dma_bdrv_read(s->bs, &s->sg,
 
3478
                             (int64_t)(s->lba << 2) + (s->io_buffer_index >> 9),
 
3479
                             pmac_ide_atapi_transfer_cb, io);
 
3480
    if (!m->aiocb) {
 
3481
        qemu_sglist_destroy(&s->sg);
 
3482
        /* Note: media not present is the most likely case */
 
3483
        ide_atapi_cmd_error(s, SENSE_NOT_READY,
 
3484
                            ASC_MEDIUM_NOT_PRESENT);
 
3485
        io->dma_end(opaque);
 
3486
        return;
 
3487
    }
 
3488
}
 
3489
 
 
3490
static void pmac_ide_transfer_cb(void *opaque, int ret)
 
3491
{
 
3492
    DBDMA_io *io = opaque;
 
3493
    MACIOIDEState *m = io->opaque;
 
3494
    IDEState *s = m->ide_if->cur_drive;
 
3495
    int n;
 
3496
    int64_t sector_num;
 
3497
 
 
3498
    if (ret < 0) {
 
3499
        m->aiocb = NULL;
 
3500
        qemu_sglist_destroy(&s->sg);
 
3501
        ide_dma_error(s);
 
3502
        io->dma_end(io);
 
3503
        return;
 
3504
    }
 
3505
 
 
3506
    sector_num = ide_get_sector(s);
 
3507
    if (s->io_buffer_size > 0) {
 
3508
        m->aiocb = NULL;
 
3509
        qemu_sglist_destroy(&s->sg);
 
3510
        n = (s->io_buffer_size + 0x1ff) >> 9;
 
3511
        sector_num += n;
 
3512
        ide_set_sector(s, sector_num);
 
3513
        s->nsector -= n;
 
3514
    }
 
3515
 
 
3516
    /* end of transfer ? */
 
3517
    if (s->nsector == 0) {
 
3518
        s->status = READY_STAT | SEEK_STAT;
 
3519
        ide_set_irq(s);
 
3520
    }
 
3521
 
 
3522
    /* end of DMA ? */
 
3523
 
 
3524
    if (io->len == 0) {
 
3525
        io->dma_end(io);
 
3526
        return;
 
3527
    }
 
3528
 
 
3529
    /* launch next transfer */
 
3530
 
 
3531
    s->io_buffer_index = 0;
 
3532
    s->io_buffer_size = io->len;
 
3533
 
 
3534
    qemu_sglist_init(&s->sg, io->len / TARGET_PAGE_SIZE + 1);
 
3535
    qemu_sglist_add(&s->sg, io->addr, io->len);
 
3536
    io->addr += io->len;
 
3537
    io->len = 0;
 
3538
 
 
3539
    if (s->is_read)
 
3540
        m->aiocb = dma_bdrv_read(s->bs, &s->sg, sector_num,
 
3541
                                 pmac_ide_transfer_cb, io);
 
3542
    else
 
3543
        m->aiocb = dma_bdrv_write(s->bs, &s->sg, sector_num,
 
3544
                                  pmac_ide_transfer_cb, io);
 
3545
    if (!m->aiocb)
 
3546
        pmac_ide_transfer_cb(io, -1);
 
3547
}
 
3548
 
 
3549
static void pmac_ide_transfer(DBDMA_io *io)
 
3550
{
 
3551
    MACIOIDEState *m = io->opaque;
 
3552
    IDEState *s = m->ide_if->cur_drive;
 
3553
 
 
3554
    s->io_buffer_size = 0;
 
3555
    if (s->is_cdrom) {
 
3556
        pmac_ide_atapi_transfer_cb(io, 0);
 
3557
        return;
 
3558
    }
 
3559
 
 
3560
    pmac_ide_transfer_cb(io, 0);
 
3561
}
 
3562
 
 
3563
static void pmac_ide_flush(DBDMA_io *io)
 
3564
{
 
3565
    MACIOIDEState *m = io->opaque;
 
3566
 
 
3567
    if (m->aiocb)
 
3568
        qemu_aio_flush();
 
3569
}
 
3570
 
3023
3571
/* PowerMac IDE memory IO */
3024
3572
static void pmac_ide_writeb (void *opaque,
3025
3573
                             target_phys_addr_t addr, uint32_t val)
3026
3574
{
 
3575
    MACIOIDEState *d = opaque;
 
3576
 
3027
3577
    addr = (addr & 0xFFF) >> 4;
3028
3578
    switch (addr) {
3029
3579
    case 1 ... 7:
3030
 
        ide_ioport_write(opaque, addr, val);
 
3580
        ide_ioport_write(d->ide_if, addr, val);
3031
3581
        break;
3032
3582
    case 8:
3033
3583
    case 22:
3034
 
        ide_cmd_write(opaque, 0, val);
 
3584
        ide_cmd_write(d->ide_if, 0, val);
3035
3585
        break;
3036
3586
    default:
3037
3587
        break;
3041
3591
static uint32_t pmac_ide_readb (void *opaque,target_phys_addr_t addr)
3042
3592
{
3043
3593
    uint8_t retval;
 
3594
    MACIOIDEState *d = opaque;
3044
3595
 
3045
3596
    addr = (addr & 0xFFF) >> 4;
3046
3597
    switch (addr) {
3047
3598
    case 1 ... 7:
3048
 
        retval = ide_ioport_read(opaque, addr);
 
3599
        retval = ide_ioport_read(d->ide_if, addr);
3049
3600
        break;
3050
3601
    case 8:
3051
3602
    case 22:
3052
 
        retval = ide_status_read(opaque, 0);
 
3603
        retval = ide_status_read(d->ide_if, 0);
3053
3604
        break;
3054
3605
    default:
3055
3606
        retval = 0xFF;
3061
3612
static void pmac_ide_writew (void *opaque,
3062
3613
                             target_phys_addr_t addr, uint32_t val)
3063
3614
{
 
3615
    MACIOIDEState *d = opaque;
 
3616
 
3064
3617
    addr = (addr & 0xFFF) >> 4;
3065
3618
#ifdef TARGET_WORDS_BIGENDIAN
3066
3619
    val = bswap16(val);
3067
3620
#endif
3068
3621
    if (addr == 0) {
3069
 
        ide_data_writew(opaque, 0, val);
 
3622
        ide_data_writew(d->ide_if, 0, val);
3070
3623
    }
3071
3624
}
3072
3625
 
3073
3626
static uint32_t pmac_ide_readw (void *opaque,target_phys_addr_t addr)
3074
3627
{
3075
3628
    uint16_t retval;
 
3629
    MACIOIDEState *d = opaque;
3076
3630
 
3077
3631
    addr = (addr & 0xFFF) >> 4;
3078
3632
    if (addr == 0) {
3079
 
        retval = ide_data_readw(opaque, 0);
 
3633
        retval = ide_data_readw(d->ide_if, 0);
3080
3634
    } else {
3081
3635
        retval = 0xFFFF;
3082
3636
    }
3089
3643
static void pmac_ide_writel (void *opaque,
3090
3644
                             target_phys_addr_t addr, uint32_t val)
3091
3645
{
 
3646
    MACIOIDEState *d = opaque;
 
3647
 
3092
3648
    addr = (addr & 0xFFF) >> 4;
3093
3649
#ifdef TARGET_WORDS_BIGENDIAN
3094
3650
    val = bswap32(val);
3095
3651
#endif
3096
3652
    if (addr == 0) {
3097
 
        ide_data_writel(opaque, 0, val);
 
3653
        ide_data_writel(d->ide_if, 0, val);
3098
3654
    }
3099
3655
}
3100
3656
 
3101
3657
static uint32_t pmac_ide_readl (void *opaque,target_phys_addr_t addr)
3102
3658
{
3103
3659
    uint32_t retval;
 
3660
    MACIOIDEState *d = opaque;
3104
3661
 
3105
3662
    addr = (addr & 0xFFF) >> 4;
3106
3663
    if (addr == 0) {
3107
 
        retval = ide_data_readl(opaque, 0);
 
3664
        retval = ide_data_readl(d->ide_if, 0);
3108
3665
    } else {
3109
3666
        retval = 0xFFFFFFFF;
3110
3667
    }
3126
3683
    pmac_ide_readl,
3127
3684
};
3128
3685
 
 
3686
static void pmac_ide_save(QEMUFile *f, void *opaque)
 
3687
{
 
3688
    MACIOIDEState *d = opaque;
 
3689
    IDEState *s = d->ide_if;
 
3690
    uint8_t drive1_selected;
 
3691
    unsigned int i;
 
3692
 
 
3693
    /* per IDE interface data */
 
3694
    qemu_put_8s(f, &s->cmd);
 
3695
    drive1_selected = (s->cur_drive != s);
 
3696
    qemu_put_8s(f, &drive1_selected);
 
3697
 
 
3698
    /* per IDE drive data */
 
3699
    for(i = 0; i < 2; i++) {
 
3700
        ide_save(f, &s[i]);
 
3701
    }
 
3702
}
 
3703
 
 
3704
static int pmac_ide_load(QEMUFile *f, void *opaque, int version_id)
 
3705
{
 
3706
    MACIOIDEState *d = opaque;
 
3707
    IDEState *s = d->ide_if;
 
3708
    uint8_t drive1_selected;
 
3709
    unsigned int i;
 
3710
 
 
3711
    if (version_id != 1)
 
3712
        return -EINVAL;
 
3713
 
 
3714
    /* per IDE interface data */
 
3715
    qemu_get_8s(f, &s->cmd);
 
3716
    qemu_get_8s(f, &drive1_selected);
 
3717
    s->cur_drive = &s[(drive1_selected != 0)];
 
3718
 
 
3719
    /* per IDE drive data */
 
3720
    for(i = 0; i < 2; i++) {
 
3721
        ide_load(f, &s[i]);
 
3722
    }
 
3723
    return 0;
 
3724
}
 
3725
 
 
3726
static void pmac_ide_reset(void *opaque)
 
3727
{
 
3728
    MACIOIDEState *d = opaque;
 
3729
    IDEState *s = d->ide_if;
 
3730
 
 
3731
    ide_reset(&s[0]);
 
3732
    ide_reset(&s[1]);
 
3733
}
 
3734
 
3129
3735
/* hd_table must contain 4 block drivers */
3130
3736
/* PowerMac uses memory mapped registers, not I/O. Return the memory
3131
3737
   I/O index to access the ide. */
3132
 
int pmac_ide_init (BlockDriverState **hd_table, qemu_irq irq)
 
3738
int pmac_ide_init (BlockDriverState **hd_table, qemu_irq irq,
 
3739
                   void *dbdma, int channel, qemu_irq dma_irq)
3133
3740
{
3134
 
    IDEState *ide_if;
 
3741
    MACIOIDEState *d;
3135
3742
    int pmac_ide_memory;
3136
3743
 
3137
 
    ide_if = qemu_mallocz(sizeof(IDEState) * 2);
3138
 
    ide_init2(&ide_if[0], hd_table[0], hd_table[1], irq);
 
3744
    d = qemu_mallocz(sizeof(MACIOIDEState));
 
3745
    ide_init2(d->ide_if, hd_table[0], hd_table[1], irq);
 
3746
 
 
3747
    if (dbdma)
 
3748
        DBDMA_register_channel(dbdma, channel, dma_irq, pmac_ide_transfer, pmac_ide_flush, d);
3139
3749
 
3140
3750
    pmac_ide_memory = cpu_register_io_memory(0, pmac_ide_read,
3141
 
                                             pmac_ide_write, &ide_if[0]);
 
3751
                                             pmac_ide_write, d);
 
3752
    register_savevm("ide", 0, 1, pmac_ide_save, pmac_ide_load, d);
 
3753
    qemu_register_reset(pmac_ide_reset, d);
 
3754
    pmac_ide_reset(d);
 
3755
 
3142
3756
    return pmac_ide_memory;
3143
3757
}
 
3758
#endif /* TARGET_PPC */
 
3759
 
 
3760
/***********************************************************/
 
3761
/* MMIO based ide port
 
3762
 * This emulates IDE device connected directly to the CPU bus without
 
3763
 * dedicated ide controller, which is often seen on embedded boards.
 
3764
 */
 
3765
 
 
3766
typedef struct {
 
3767
    void *dev;
 
3768
    int shift;
 
3769
} MMIOState;
 
3770
 
 
3771
static uint32_t mmio_ide_read (void *opaque, target_phys_addr_t addr)
 
3772
{
 
3773
    MMIOState *s = (MMIOState*)opaque;
 
3774
    IDEState *ide = (IDEState*)s->dev;
 
3775
    addr >>= s->shift;
 
3776
    if (addr & 7)
 
3777
        return ide_ioport_read(ide, addr);
 
3778
    else
 
3779
        return ide_data_readw(ide, 0);
 
3780
}
 
3781
 
 
3782
static void mmio_ide_write (void *opaque, target_phys_addr_t addr,
 
3783
        uint32_t val)
 
3784
{
 
3785
    MMIOState *s = (MMIOState*)opaque;
 
3786
    IDEState *ide = (IDEState*)s->dev;
 
3787
    addr >>= s->shift;
 
3788
    if (addr & 7)
 
3789
        ide_ioport_write(ide, addr, val);
 
3790
    else
 
3791
        ide_data_writew(ide, 0, val);
 
3792
}
 
3793
 
 
3794
static CPUReadMemoryFunc *mmio_ide_reads[] = {
 
3795
    mmio_ide_read,
 
3796
    mmio_ide_read,
 
3797
    mmio_ide_read,
 
3798
};
 
3799
 
 
3800
static CPUWriteMemoryFunc *mmio_ide_writes[] = {
 
3801
    mmio_ide_write,
 
3802
    mmio_ide_write,
 
3803
    mmio_ide_write,
 
3804
};
 
3805
 
 
3806
static uint32_t mmio_ide_status_read (void *opaque, target_phys_addr_t addr)
 
3807
{
 
3808
    MMIOState *s= (MMIOState*)opaque;
 
3809
    IDEState *ide = (IDEState*)s->dev;
 
3810
    return ide_status_read(ide, 0);
 
3811
}
 
3812
 
 
3813
static void mmio_ide_cmd_write (void *opaque, target_phys_addr_t addr,
 
3814
        uint32_t val)
 
3815
{
 
3816
    MMIOState *s = (MMIOState*)opaque;
 
3817
    IDEState *ide = (IDEState*)s->dev;
 
3818
    ide_cmd_write(ide, 0, val);
 
3819
}
 
3820
 
 
3821
static CPUReadMemoryFunc *mmio_ide_status[] = {
 
3822
    mmio_ide_status_read,
 
3823
    mmio_ide_status_read,
 
3824
    mmio_ide_status_read,
 
3825
};
 
3826
 
 
3827
static CPUWriteMemoryFunc *mmio_ide_cmd[] = {
 
3828
    mmio_ide_cmd_write,
 
3829
    mmio_ide_cmd_write,
 
3830
    mmio_ide_cmd_write,
 
3831
};
 
3832
 
 
3833
void mmio_ide_init (target_phys_addr_t membase, target_phys_addr_t membase2,
 
3834
                    qemu_irq irq, int shift,
 
3835
                    BlockDriverState *hd0, BlockDriverState *hd1)
 
3836
{
 
3837
    MMIOState *s = qemu_mallocz(sizeof(MMIOState));
 
3838
    IDEState *ide = qemu_mallocz(sizeof(IDEState) * 2);
 
3839
    int mem1, mem2;
 
3840
 
 
3841
    ide_init2(ide, hd0, hd1, irq);
 
3842
 
 
3843
    s->dev = ide;
 
3844
    s->shift = shift;
 
3845
 
 
3846
    mem1 = cpu_register_io_memory(0, mmio_ide_reads, mmio_ide_writes, s);
 
3847
    mem2 = cpu_register_io_memory(0, mmio_ide_status, mmio_ide_cmd, s);
 
3848
    cpu_register_physical_memory(membase, 16 << shift, mem1);
 
3849
    cpu_register_physical_memory(membase2, 2 << shift, mem2);
 
3850
}
3144
3851
 
3145
3852
/***********************************************************/
3146
3853
/* CF-ATA Microdrive */
3453
4160
    return 0;
3454
4161
}
3455
4162
 
3456
 
static int md_iid = 0;
3457
 
 
3458
4163
static const uint8_t dscm1xxxx_cis[0x14a] = {
3459
4164
    [0x000] = CISTPL_DEVICE,    /* 5V Device Information */
3460
4165
    [0x002] = 0x03,             /* Tuple length = 4 bytes */
3681
4386
    md->ide->mdata_size = METADATA_SIZE;
3682
4387
    md->ide->mdata_storage = (uint8_t *) qemu_mallocz(METADATA_SIZE);
3683
4388
 
3684
 
    register_savevm("microdrive", md_iid ++, 0, md_save, md_load, md);
 
4389
    register_savevm("microdrive", -1, 0, md_save, md_load, md);
3685
4390
 
3686
4391
    return &md->card;
3687
4392
}