Revision b9e17a34 hw/ppc_oldworld.c
b/hw/ppc_oldworld.c | ||
---|---|---|
59 | 59 |
return (addr & 0x0fffffff) + KERNEL_LOAD_ADDR; |
60 | 60 |
} |
61 | 61 |
|
62 |
static target_phys_addr_t round_page(target_phys_addr_t addr) |
|
63 |
{ |
|
64 |
return (addr + TARGET_PAGE_SIZE - 1) & TARGET_PAGE_MASK; |
|
65 |
} |
|
66 |
|
|
62 | 67 |
static void ppc_heathrow_init (ram_addr_t ram_size, |
63 | 68 |
const char *boot_device, |
64 | 69 |
const char *kernel_filename, |
... | ... | |
71 | 76 |
qemu_irq *pic, **heathrow_irqs; |
72 | 77 |
int linux_boot, i; |
73 | 78 |
ram_addr_t ram_offset, bios_offset; |
74 |
uint32_t kernel_base, initrd_base; |
|
79 |
uint32_t kernel_base, initrd_base, cmdline_base = 0;
|
|
75 | 80 |
int32_t kernel_size, initrd_size; |
76 | 81 |
PCIBus *pci_bus; |
77 | 82 |
MacIONVRAMState *nvr; |
... | ... | |
157 | 162 |
} |
158 | 163 |
/* load initrd */ |
159 | 164 |
if (initrd_filename) { |
160 |
initrd_base = INITRD_LOAD_ADDR;
|
|
165 |
initrd_base = round_page(kernel_base + kernel_size + KERNEL_GAP);
|
|
161 | 166 |
initrd_size = load_image_targphys(initrd_filename, initrd_base, |
162 | 167 |
ram_size - initrd_base); |
163 | 168 |
if (initrd_size < 0) { |
... | ... | |
165 | 170 |
initrd_filename); |
166 | 171 |
exit(1); |
167 | 172 |
} |
173 |
cmdline_base = round_page(initrd_base + initrd_size); |
|
168 | 174 |
} else { |
169 | 175 |
initrd_base = 0; |
170 | 176 |
initrd_size = 0; |
177 |
cmdline_base = round_page(kernel_base + kernel_size + KERNEL_GAP); |
|
171 | 178 |
} |
172 | 179 |
ppc_boot_device = 'm'; |
173 | 180 |
} else { |
... | ... | |
278 | 285 |
fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_ADDR, kernel_base); |
279 | 286 |
fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_SIZE, kernel_size); |
280 | 287 |
if (kernel_cmdline) { |
281 |
fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_CMDLINE, CMDLINE_ADDR);
|
|
282 |
pstrcpy_targphys("cmdline", CMDLINE_ADDR, TARGET_PAGE_SIZE, kernel_cmdline);
|
|
288 |
fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_CMDLINE, cmdline_base);
|
|
289 |
pstrcpy_targphys("cmdline", cmdline_base, TARGET_PAGE_SIZE, kernel_cmdline);
|
|
283 | 290 |
} else { |
284 | 291 |
fw_cfg_add_i32(fw_cfg, FW_CFG_KERNEL_CMDLINE, 0); |
285 | 292 |
} |
Also available in: Unified diff