From 741402f933bbc41eb0a51b10c7053718fca46a14 Mon Sep 17 00:00:00 2001 From: blueswir1 Date: Sun, 4 Nov 2007 11:59:15 +0000 Subject: [PATCH] Remove target dependent code git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3528 c046a42c-6fe2-441c-8c8c-71466251a162 --- hw/fdc.c | 28 +++++++++++++++++++++------- hw/sun4m.c | 3 ++- vl.h | 2 ++ 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/hw/fdc.c b/hw/fdc.c index dcd1d46b48..c124fb7025 100644 --- 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; diff --git a/hw/sun4m.c b/hw/sun4m.c index b3328021d3..01e0deead5 100644 --- a/hw/sun4m.c +++ b/hw/sun4m.c @@ -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 2ef8886a18..ad4d05f0b6 100644 --- 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 */