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 */ | ... | ... |