Revision 74e91155
b/hw/mac_nvram.c | ||
---|---|---|
26 | 26 |
#include "ppc_mac.h" |
27 | 27 |
|
28 | 28 |
struct MacIONVRAMState { |
29 |
target_phys_addr_t mem_base; |
|
30 |
target_phys_addr_t size; |
|
31 |
int mem_index; |
|
29 | 32 |
uint8_t data[0x2000]; |
30 | 33 |
}; |
31 | 34 |
|
... | ... | |
58 | 61 |
target_phys_addr_t addr, uint32_t value) |
59 | 62 |
{ |
60 | 63 |
MacIONVRAMState *s = opaque; |
64 |
|
|
65 |
addr -= s->mem_base; |
|
61 | 66 |
addr = (addr >> 4) & 0x1fff; |
62 | 67 |
s->data[addr] = value; |
63 | 68 |
// printf("macio_nvram_writeb %04x = %02x\n", addr, value); |
... | ... | |
68 | 73 |
MacIONVRAMState *s = opaque; |
69 | 74 |
uint32_t value; |
70 | 75 |
|
76 |
addr -= s->mem_base; |
|
71 | 77 |
addr = (addr >> 4) & 0x1fff; |
72 | 78 |
value = s->data[addr]; |
73 | 79 |
// printf("macio_nvram_readb %04x = %02x\n", addr, value); |
... | ... | |
87 | 93 |
&macio_nvram_readb, |
88 | 94 |
}; |
89 | 95 |
|
90 |
MacIONVRAMState *macio_nvram_init (int *mem_index) |
|
96 |
MacIONVRAMState *macio_nvram_init (int *mem_index, target_phys_addr_t size)
|
|
91 | 97 |
{ |
92 | 98 |
MacIONVRAMState *s; |
99 |
|
|
93 | 100 |
s = qemu_mallocz(sizeof(MacIONVRAMState)); |
94 | 101 |
if (!s) |
95 | 102 |
return NULL; |
96 |
*mem_index = cpu_register_io_memory(0, nvram_read, nvram_write, s); |
|
103 |
s->size = size; |
|
104 |
s->mem_index = cpu_register_io_memory(0, nvram_read, nvram_write, s); |
|
105 |
*mem_index = s->mem_index; |
|
97 | 106 |
|
98 | 107 |
return s; |
99 | 108 |
} |
100 | 109 |
|
110 |
void macio_nvram_map (void *opaque, target_phys_addr_t mem_base) |
|
111 |
{ |
|
112 |
MacIONVRAMState *s; |
|
113 |
|
|
114 |
s = opaque; |
|
115 |
s->mem_base = mem_base; |
|
116 |
cpu_register_physical_memory(mem_base, s->size, s->mem_index); |
|
117 |
} |
|
118 |
|
|
101 | 119 |
static uint8_t nvram_chksum (const uint8_t *buf, int n) |
102 | 120 |
{ |
103 | 121 |
int sum, i; |
b/hw/macio.c | ||
---|---|---|
31 | 31 |
int pic_mem_index; |
32 | 32 |
int dbdma_mem_index; |
33 | 33 |
int cuda_mem_index; |
34 |
int nvram_mem_index;
|
|
34 |
void *nvram;
|
|
35 | 35 |
int nb_ide; |
36 | 36 |
int ide_mem_index[4]; |
37 | 37 |
}; |
... | ... | |
68 | 68 |
macio_state->ide_mem_index[i]); |
69 | 69 |
} |
70 | 70 |
} |
71 |
if (macio_state->nvram_mem_index >= 0) { |
|
72 |
cpu_register_physical_memory(addr + 0x60000, 0x20000, |
|
73 |
macio_state->nvram_mem_index); |
|
74 |
} |
|
71 |
if (macio_state->nvram != NULL) |
|
72 |
macio_nvram_map(macio_state->nvram, addr + 0x60000); |
|
75 | 73 |
} |
76 | 74 |
|
77 | 75 |
void macio_init (PCIBus *bus, int device_id, int is_oldworld, int pic_mem_index, |
78 |
int dbdma_mem_index, int cuda_mem_index, int nvram_mem_index,
|
|
76 |
int dbdma_mem_index, int cuda_mem_index, void *nvram,
|
|
79 | 77 |
int nb_ide, int *ide_mem_index) |
80 | 78 |
{ |
81 | 79 |
PCIDevice *d; |
... | ... | |
90 | 88 |
macio_state->pic_mem_index = pic_mem_index; |
91 | 89 |
macio_state->dbdma_mem_index = dbdma_mem_index; |
92 | 90 |
macio_state->cuda_mem_index = cuda_mem_index; |
93 |
macio_state->nvram_mem_index = nvram_mem_index;
|
|
91 |
macio_state->nvram = nvram;
|
|
94 | 92 |
if (nb_ide > 4) |
95 | 93 |
nb_ide = 4; |
96 | 94 |
macio_state->nb_ide = nb_ide; |
b/hw/ppc_chrp.c | ||
---|---|---|
264 | 264 |
dbdma_init(&dbdma_mem_index); |
265 | 265 |
|
266 | 266 |
macio_init(pci_bus, 0x0022, 0, pic_mem_index, dbdma_mem_index, |
267 |
cuda_mem_index, -1, 2, ide_mem_index);
|
|
267 |
cuda_mem_index, NULL, 2, ide_mem_index);
|
|
268 | 268 |
|
269 | 269 |
if (usb_enabled) { |
270 | 270 |
usb_ohci_init_pci(pci_bus, 3, -1); |
... | ... | |
274 | 274 |
graphic_depth = 15; |
275 | 275 |
#if 0 /* XXX: this is ugly but needed for now, or OHW won't boot */ |
276 | 276 |
/* The NewWorld NVRAM is not located in the MacIO device */ |
277 |
nvr = macio_nvram_init(&nvram_mem_index); |
|
277 |
nvr = macio_nvram_init(&nvram_mem_index, 0x2000);
|
|
278 | 278 |
pmac_format_nvram_partition(nvr, 0x2000); |
279 |
cpu_register_physical_memory(0xFFF04000, 0x20000, nvram_mem_index);
|
|
279 |
macio_nvram_map(nvr, 0xFFF04000);
|
|
280 | 280 |
nvram.opaque = nvr; |
281 | 281 |
nvram.read_fn = &macio_nvram_read; |
282 | 282 |
nvram.write_fn = &macio_nvram_write; |
b/hw/ppc_mac.h | ||
---|---|---|
43 | 43 |
|
44 | 44 |
/* MacIO */ |
45 | 45 |
void macio_init (PCIBus *bus, int device_id, int is_oldworld, int pic_mem_index, |
46 |
int dbdma_mem_index, int cuda_mem_index, int nvram_mem_index,
|
|
46 |
int dbdma_mem_index, int cuda_mem_index, void *nvram,
|
|
47 | 47 |
int nb_ide, int *ide_mem_index); |
48 | 48 |
|
49 | 49 |
/* NewWorld PowerMac IDE */ |
... | ... | |
62 | 62 |
/* Mac NVRAM */ |
63 | 63 |
typedef struct MacIONVRAMState MacIONVRAMState; |
64 | 64 |
|
65 |
MacIONVRAMState *macio_nvram_init (int *mem_index); |
|
65 |
MacIONVRAMState *macio_nvram_init (int *mem_index, target_phys_addr_t size); |
|
66 |
void macio_nvram_map (void *opaque, target_phys_addr_t mem_base); |
|
66 | 67 |
void pmac_format_nvram_partition (MacIONVRAMState *nvr, int len); |
67 | 68 |
uint32_t macio_nvram_read (void *opaque, uint32_t addr); |
68 | 69 |
void macio_nvram_write (void *opaque, uint32_t addr, uint32_t val); |
b/hw/ppc_oldworld.c | ||
---|---|---|
271 | 271 |
adb_kbd_init(&adb_bus); |
272 | 272 |
adb_mouse_init(&adb_bus); |
273 | 273 |
|
274 |
nvr = macio_nvram_init(&nvram_mem_index); |
|
274 |
nvr = macio_nvram_init(&nvram_mem_index, 0x2000);
|
|
275 | 275 |
pmac_format_nvram_partition(nvr, 0x2000); |
276 | 276 |
|
277 | 277 |
dbdma_init(&dbdma_mem_index); |
278 | 278 |
|
279 | 279 |
macio_init(pci_bus, 0x0017, 1, pic_mem_index, dbdma_mem_index, |
280 |
cuda_mem_index, nvram_mem_index, 0, NULL);
|
|
280 |
cuda_mem_index, nvr, 0, NULL); |
|
281 | 281 |
|
282 | 282 |
if (usb_enabled) { |
283 | 283 |
usb_ohci_init_pci(pci_bus, 3, -1); |
Also available in: Unified diff