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); | ... | ... |