Commit 7fa9ae1aaab87bd197a34623a1c264dca51d6217
1 parent
b4ed08e0
Use ESCC for PowerMac serial
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6271 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
5 changed files
with
22 additions
and
11 deletions
Makefile.target
| ... | ... | @@ -646,7 +646,7 @@ OBJS+= ppc.o ide.o vga.o $(SOUND_HW) dma.o openpic.o |
| 646 | 646 | OBJS+= pckbd.o ps2.o serial.o i8259.o i8254.o fdc.o m48t59.o mc146818rtc.o |
| 647 | 647 | OBJS+= prep_pci.o ppc_prep.o |
| 648 | 648 | # Mac shared devices |
| 649 | -OBJS+= macio.o cuda.o adb.o mac_nvram.o mac_dbdma.o | |
| 649 | +OBJS+= macio.o cuda.o adb.o mac_nvram.o mac_dbdma.o escc.o | |
| 650 | 650 | # OldWorld PowerMac |
| 651 | 651 | OBJS+= heathrow_pic.o grackle_pci.o ppc_oldworld.o |
| 652 | 652 | # NewWorld PowerMac | ... | ... |
hw/macio.c
| ... | ... | @@ -25,6 +25,7 @@ |
| 25 | 25 | #include "hw.h" |
| 26 | 26 | #include "ppc_mac.h" |
| 27 | 27 | #include "pci.h" |
| 28 | +#include "escc.h" | |
| 28 | 29 | |
| 29 | 30 | typedef struct macio_state_t macio_state_t; |
| 30 | 31 | struct macio_state_t { |
| ... | ... | @@ -32,6 +33,7 @@ struct macio_state_t { |
| 32 | 33 | int pic_mem_index; |
| 33 | 34 | int dbdma_mem_index; |
| 34 | 35 | int cuda_mem_index; |
| 36 | + int escc_mem_index; | |
| 35 | 37 | void *nvram; |
| 36 | 38 | int nb_ide; |
| 37 | 39 | int ide_mem_index[4]; |
| ... | ... | @@ -59,6 +61,10 @@ static void macio_map (PCIDevice *pci_dev, int region_num, |
| 59 | 61 | cpu_register_physical_memory(addr + 0x08000, 0x1000, |
| 60 | 62 | macio_state->dbdma_mem_index); |
| 61 | 63 | } |
| 64 | + if (macio_state->escc_mem_index >= 0) { | |
| 65 | + cpu_register_physical_memory(addr + 0x13000, ESCC_SIZE << 4, | |
| 66 | + macio_state->escc_mem_index); | |
| 67 | + } | |
| 62 | 68 | if (macio_state->cuda_mem_index >= 0) { |
| 63 | 69 | cpu_register_physical_memory(addr + 0x16000, 0x2000, |
| 64 | 70 | macio_state->cuda_mem_index); |
| ... | ... | @@ -75,7 +81,7 @@ static void macio_map (PCIDevice *pci_dev, int region_num, |
| 75 | 81 | |
| 76 | 82 | void macio_init (PCIBus *bus, int device_id, int is_oldworld, int pic_mem_index, |
| 77 | 83 | int dbdma_mem_index, int cuda_mem_index, void *nvram, |
| 78 | - int nb_ide, int *ide_mem_index) | |
| 84 | + int nb_ide, int *ide_mem_index, int escc_mem_index) | |
| 79 | 85 | { |
| 80 | 86 | PCIDevice *d; |
| 81 | 87 | macio_state_t *macio_state; |
| ... | ... | @@ -89,6 +95,7 @@ void macio_init (PCIBus *bus, int device_id, int is_oldworld, int pic_mem_index, |
| 89 | 95 | macio_state->pic_mem_index = pic_mem_index; |
| 90 | 96 | macio_state->dbdma_mem_index = dbdma_mem_index; |
| 91 | 97 | macio_state->cuda_mem_index = cuda_mem_index; |
| 98 | + macio_state->escc_mem_index = escc_mem_index; | |
| 92 | 99 | macio_state->nvram = nvram; |
| 93 | 100 | if (nb_ide > 4) |
| 94 | 101 | nb_ide = 4; | ... | ... |
hw/ppc_chrp.c
| ... | ... | @@ -31,6 +31,7 @@ |
| 31 | 31 | #include "net.h" |
| 32 | 32 | #include "sysemu.h" |
| 33 | 33 | #include "boards.h" |
| 34 | +#include "escc.h" | |
| 34 | 35 | |
| 35 | 36 | #define MAX_IDE_BUS 2 |
| 36 | 37 | |
| ... | ... | @@ -80,7 +81,7 @@ static void ppc_core99_init (ram_addr_t ram_size, int vga_ram_size, |
| 80 | 81 | m48t59_t *m48t59; |
| 81 | 82 | int vga_bios_size, bios_size; |
| 82 | 83 | qemu_irq *dummy_irq; |
| 83 | - int pic_mem_index, dbdma_mem_index, cuda_mem_index; | |
| 84 | + int pic_mem_index, dbdma_mem_index, cuda_mem_index, escc_mem_index; | |
| 84 | 85 | int ide_mem_index[2]; |
| 85 | 86 | int ppc_boot_device; |
| 86 | 87 | int index; |
| ... | ... | @@ -262,8 +263,8 @@ static void ppc_core99_init (ram_addr_t ram_size, int vga_ram_size, |
| 262 | 263 | /* XXX: suppress that */ |
| 263 | 264 | dummy_irq = i8259_init(NULL); |
| 264 | 265 | |
| 265 | - /* XXX: use Mac Serial port */ | |
| 266 | - serial_init(0x3f8, dummy_irq[4], 115200, serial_hds[0]); | |
| 266 | + escc_mem_index = escc_init(0x80013000, dummy_irq[4], serial_hds[0], | |
| 267 | + serial_hds[1], ESCC_CLOCK, 4); | |
| 267 | 268 | for(i = 0; i < nb_nics; i++) { |
| 268 | 269 | if (!nd_table[i].model) |
| 269 | 270 | nd_table[i].model = "ne2k_pci"; |
| ... | ... | @@ -295,7 +296,7 @@ static void ppc_core99_init (ram_addr_t ram_size, int vga_ram_size, |
| 295 | 296 | dbdma_init(&dbdma_mem_index); |
| 296 | 297 | |
| 297 | 298 | macio_init(pci_bus, 0x0022, 0, pic_mem_index, dbdma_mem_index, |
| 298 | - cuda_mem_index, NULL, 2, ide_mem_index); | |
| 299 | + cuda_mem_index, NULL, 2, ide_mem_index, escc_mem_index); | |
| 299 | 300 | |
| 300 | 301 | if (usb_enabled) { |
| 301 | 302 | usb_ohci_init_pci(pci_bus, 3, -1); | ... | ... |
hw/ppc_mac.h
| ... | ... | @@ -37,6 +37,8 @@ |
| 37 | 37 | #define KERNEL_LOAD_ADDR 0x01000000 |
| 38 | 38 | #define INITRD_LOAD_ADDR 0x01800000 |
| 39 | 39 | |
| 40 | +#define ESCC_CLOCK 3686400 | |
| 41 | + | |
| 40 | 42 | /* DBDMA */ |
| 41 | 43 | void dbdma_init (int *dbdma_mem_index); |
| 42 | 44 | |
| ... | ... | @@ -46,7 +48,7 @@ void cuda_init (int *cuda_mem_index, qemu_irq irq); |
| 46 | 48 | /* MacIO */ |
| 47 | 49 | void macio_init (PCIBus *bus, int device_id, int is_oldworld, int pic_mem_index, |
| 48 | 50 | int dbdma_mem_index, int cuda_mem_index, void *nvram, |
| 49 | - int nb_ide, int *ide_mem_index); | |
| 51 | + int nb_ide, int *ide_mem_index, int escc_mem_index); | |
| 50 | 52 | |
| 51 | 53 | /* NewWorld PowerMac IDE */ |
| 52 | 54 | int pmac_ide_init (BlockDriverState **hd_table, qemu_irq irq); | ... | ... |
hw/ppc_oldworld.c
| ... | ... | @@ -33,6 +33,7 @@ |
| 33 | 33 | #include "pci.h" |
| 34 | 34 | #include "boards.h" |
| 35 | 35 | #include "fw_cfg.h" |
| 36 | +#include "escc.h" | |
| 36 | 37 | |
| 37 | 38 | #define MAX_IDE_BUS 2 |
| 38 | 39 | #define VGA_BIOS_SIZE 65536 |
| ... | ... | @@ -126,7 +127,7 @@ static void ppc_heathrow_init (ram_addr_t ram_size, int vga_ram_size, |
| 126 | 127 | int vga_bios_size, bios_size; |
| 127 | 128 | qemu_irq *dummy_irq; |
| 128 | 129 | int pic_mem_index, nvram_mem_index, dbdma_mem_index, cuda_mem_index; |
| 129 | - int ide_mem_index[2]; | |
| 130 | + int escc_mem_index, ide_mem_index[2]; | |
| 130 | 131 | int ppc_boot_device; |
| 131 | 132 | BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS]; |
| 132 | 133 | int index; |
| ... | ... | @@ -296,8 +297,8 @@ static void ppc_heathrow_init (ram_addr_t ram_size, int vga_ram_size, |
| 296 | 297 | /* XXX: suppress that */ |
| 297 | 298 | dummy_irq = i8259_init(NULL); |
| 298 | 299 | |
| 299 | - /* XXX: use Mac Serial port */ | |
| 300 | - serial_init(0x3f8, dummy_irq[4], 115200, serial_hds[0]); | |
| 300 | + escc_mem_index = escc_init(0x80013000, pic[0x10], serial_hds[0], | |
| 301 | + serial_hds[1], ESCC_CLOCK, 4); | |
| 301 | 302 | |
| 302 | 303 | for(i = 0; i < nb_nics; i++) { |
| 303 | 304 | if (!nd_table[i].model) |
| ... | ... | @@ -350,7 +351,7 @@ static void ppc_heathrow_init (ram_addr_t ram_size, int vga_ram_size, |
| 350 | 351 | dbdma_init(&dbdma_mem_index); |
| 351 | 352 | |
| 352 | 353 | macio_init(pci_bus, 0x0010, 1, pic_mem_index, dbdma_mem_index, |
| 353 | - cuda_mem_index, nvr, 2, ide_mem_index); | |
| 354 | + cuda_mem_index, nvr, 2, ide_mem_index, escc_mem_index); | |
| 354 | 355 | |
| 355 | 356 | if (usb_enabled) { |
| 356 | 357 | usb_ohci_init_pci(pci_bus, 3, -1); | ... | ... |