Commit 741402f933bbc41eb0a51b10c7053718fca46a14
1 parent
b854bc19
Remove target dependent code
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3528 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
25 additions
and
8 deletions
hw/fdc.c
... | ... | @@ -395,6 +395,8 @@ struct fdctrl_t { |
395 | 395 | uint8_t lock; |
396 | 396 | /* Power down config (also with status regB access mode */ |
397 | 397 | uint8_t pwrd; |
398 | + /* Sun4m quirks? */ | |
399 | + int sun; | |
398 | 400 | /* Floppy drives */ |
399 | 401 | fdrive_t drives[2]; |
400 | 402 | }; |
... | ... | @@ -405,12 +407,14 @@ static uint32_t fdctrl_read (void *opaque, uint32_t reg) |
405 | 407 | uint32_t retval; |
406 | 408 | |
407 | 409 | switch (reg & 0x07) { |
408 | -#ifdef TARGET_SPARC | |
409 | 410 | case 0x00: |
410 | - // Identify to Linux as S82078B | |
411 | - retval = fdctrl_read_statusB(fdctrl); | |
411 | + if (fdctrl->sun) { | |
412 | + // Identify to Linux as S82078B | |
413 | + retval = fdctrl_read_statusB(fdctrl); | |
414 | + } else { | |
415 | + retval = (uint32_t)(-1); | |
416 | + } | |
412 | 417 | break; |
413 | -#endif | |
414 | 418 | case 0x01: |
415 | 419 | retval = fdctrl_read_statusB(fdctrl); |
416 | 420 | break; |
... | ... | @@ -598,6 +602,7 @@ fdctrl_t *fdctrl_init (qemu_irq irq, int dma_chann, int mem_mapped, |
598 | 602 | fdctrl->dma_chann = dma_chann; |
599 | 603 | fdctrl->io_base = io_base; |
600 | 604 | fdctrl->config = 0x60; /* Implicit seek, polling & FIFO enabled */ |
605 | + fdctrl->sun = 0; | |
601 | 606 | if (fdctrl->dma_chann != -1) { |
602 | 607 | fdctrl->dma_en = 1; |
603 | 608 | 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, |
631 | 636 | return fdctrl; |
632 | 637 | } |
633 | 638 | |
639 | +fdctrl_t *sun4m_fdctrl_init (qemu_irq irq, target_phys_addr_t io_base, | |
640 | + BlockDriverState **fds) | |
641 | +{ | |
642 | + fdctrl_t *fdctrl; | |
643 | + | |
644 | + fdctrl = fdctrl_init(irq, 0, 1, io_base, fds); | |
645 | + fdctrl->sun = 1; | |
646 | + | |
647 | + return fdctrl; | |
648 | +} | |
649 | + | |
634 | 650 | /* XXX: may change if moved to bdrv */ |
635 | 651 | int fdctrl_get_drive_type(fdctrl_t *fdctrl, int drive_num) |
636 | 652 | { |
... | ... | @@ -647,14 +663,12 @@ static void fdctrl_reset_irq (fdctrl_t *fdctrl) |
647 | 663 | |
648 | 664 | static void fdctrl_raise_irq (fdctrl_t *fdctrl, uint8_t status) |
649 | 665 | { |
650 | -#ifdef TARGET_SPARC | |
651 | 666 | // Sparc mutation |
652 | - if (!fdctrl->dma_en) { | |
667 | + if (fdctrl->sun && !fdctrl->dma_en) { | |
653 | 668 | fdctrl->state &= ~FD_CTRL_BUSY; |
654 | 669 | fdctrl->int_status = status; |
655 | 670 | return; |
656 | 671 | } |
657 | -#endif | |
658 | 672 | if (~(fdctrl->state & FD_CTRL_INTR)) { |
659 | 673 | qemu_set_irq(fdctrl->irq, 1); |
660 | 674 | fdctrl->state |= FD_CTRL_INTR; | ... | ... |
hw/sun4m.c
... | ... | @@ -389,7 +389,8 @@ static void *sun4m_hw_init(const struct hwdef *hwdef, int RAM_size, |
389 | 389 | // Slavio TTYB (base+0, Linux ttyS1) is the second Qemu serial device |
390 | 390 | slavio_serial_init(hwdef->serial_base, slavio_irq[hwdef->ser_irq], |
391 | 391 | serial_hds[1], serial_hds[0]); |
392 | - fdctrl_init(slavio_irq[hwdef->fd_irq], 0, 1, hwdef->fd_base, fd_table); | |
392 | + | |
393 | + sun4m_fdctrl_init(slavio_irq[hwdef->fd_irq], hwdef->fd_base, fd_table); | |
393 | 394 | |
394 | 395 | main_esp = esp_init(bs_table, hwdef->esp_base, espdma, *espdma_irq, |
395 | 396 | esp_reset); | ... | ... |
vl.h
... | ... | @@ -1041,6 +1041,8 @@ typedef struct fdctrl_t fdctrl_t; |
1041 | 1041 | fdctrl_t *fdctrl_init (qemu_irq irq, int dma_chann, int mem_mapped, |
1042 | 1042 | target_phys_addr_t io_base, |
1043 | 1043 | BlockDriverState **fds); |
1044 | +fdctrl_t *sun4m_fdctrl_init (qemu_irq irq, target_phys_addr_t io_base, | |
1045 | + BlockDriverState **fds); | |
1044 | 1046 | int fdctrl_get_drive_type(fdctrl_t *fdctrl, int drive_num); |
1045 | 1047 | |
1046 | 1048 | /* eepro100.c */ | ... | ... |