Remove target dependent code
authorblueswir1 <blueswir1@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 4 Nov 2007 11:59:15 +0000 (11:59 +0000)
committerblueswir1 <blueswir1@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 4 Nov 2007 11:59:15 +0000 (11:59 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3528 c046a42c-6fe2-441c-8c8c-71466251a162

hw/fdc.c
hw/sun4m.c
vl.h

index dcd1d46..c124fb7 100644 (file)
--- a/hw/fdc.c
+++ b/hw/fdc.c
@@ -395,6 +395,8 @@ struct fdctrl_t {
     uint8_t lock;
     /* Power down config (also with status regB access mode */
     uint8_t pwrd;
+    /* Sun4m quirks? */
+    int sun;
     /* Floppy drives */
     fdrive_t drives[2];
 };
@@ -405,12 +407,14 @@ static uint32_t fdctrl_read (void *opaque, uint32_t reg)
     uint32_t retval;
 
     switch (reg & 0x07) {
-#ifdef TARGET_SPARC
     case 0x00:
-       // Identify to Linux as S82078B
-       retval = fdctrl_read_statusB(fdctrl);
+        if (fdctrl->sun) {
+            // Identify to Linux as S82078B
+            retval = fdctrl_read_statusB(fdctrl);
+        } else {
+            retval = (uint32_t)(-1);
+        }
        break;
-#endif
     case 0x01:
        retval = fdctrl_read_statusB(fdctrl);
        break;
@@ -598,6 +602,7 @@ fdctrl_t *fdctrl_init (qemu_irq irq, int dma_chann, int mem_mapped,
     fdctrl->dma_chann = dma_chann;
     fdctrl->io_base = io_base;
     fdctrl->config = 0x60; /* Implicit seek, polling & FIFO enabled */
+    fdctrl->sun = 0;
     if (fdctrl->dma_chann != -1) {
         fdctrl->dma_en = 1;
         DMA_register_channel(dma_chann, &fdctrl_transfer_handler, fdctrl);
@@ -631,6 +636,17 @@ fdctrl_t *fdctrl_init (qemu_irq irq, int dma_chann, int mem_mapped,
     return fdctrl;
 }
 
+fdctrl_t *sun4m_fdctrl_init (qemu_irq irq, target_phys_addr_t io_base,
+                             BlockDriverState **fds)
+{
+    fdctrl_t *fdctrl;
+
+    fdctrl = fdctrl_init(irq, 0, 1, io_base, fds);
+    fdctrl->sun = 1;
+
+    return fdctrl;
+}
+
 /* XXX: may change if moved to bdrv */
 int fdctrl_get_drive_type(fdctrl_t *fdctrl, int drive_num)
 {
@@ -647,14 +663,12 @@ static void fdctrl_reset_irq (fdctrl_t *fdctrl)
 
 static void fdctrl_raise_irq (fdctrl_t *fdctrl, uint8_t status)
 {
-#ifdef TARGET_SPARC
     // Sparc mutation
-    if (!fdctrl->dma_en) {
+    if (fdctrl->sun && !fdctrl->dma_en) {
        fdctrl->state &= ~FD_CTRL_BUSY;
        fdctrl->int_status = status;
        return;
     }
-#endif
     if (~(fdctrl->state & FD_CTRL_INTR)) {
         qemu_set_irq(fdctrl->irq, 1);
         fdctrl->state |= FD_CTRL_INTR;
index b332802..01e0dee 100644 (file)
@@ -389,7 +389,8 @@ static void *sun4m_hw_init(const struct hwdef *hwdef, int RAM_size,
     // Slavio TTYB (base+0, Linux ttyS1) is the second Qemu serial device
     slavio_serial_init(hwdef->serial_base, slavio_irq[hwdef->ser_irq],
                        serial_hds[1], serial_hds[0]);
-    fdctrl_init(slavio_irq[hwdef->fd_irq], 0, 1, hwdef->fd_base, fd_table);
+
+    sun4m_fdctrl_init(slavio_irq[hwdef->fd_irq], hwdef->fd_base, fd_table);
 
     main_esp = esp_init(bs_table, hwdef->esp_base, espdma, *espdma_irq,
                         esp_reset);
diff --git a/vl.h b/vl.h
index 2ef8886..ad4d05f 100644 (file)
--- a/vl.h
+++ b/vl.h
@@ -1041,6 +1041,8 @@ typedef struct fdctrl_t fdctrl_t;
 fdctrl_t *fdctrl_init (qemu_irq irq, int dma_chann, int mem_mapped,
                        target_phys_addr_t io_base,
                        BlockDriverState **fds);
+fdctrl_t *sun4m_fdctrl_init (qemu_irq irq, target_phys_addr_t io_base,
+                             BlockDriverState **fds);
 int fdctrl_get_drive_type(fdctrl_t *fdctrl, int drive_num);
 
 /* eepro100.c */