Revision 409dbce5 hw/mips_r4k.c
b/hw/mips_r4k.c | ||
---|---|---|
21 | 21 |
#include "loader.h" |
22 | 22 |
#include "elf.h" |
23 | 23 |
|
24 |
#define PHYS_TO_VIRT(x) ((x) | ~(target_ulong)0x7fffffff) |
|
25 |
|
|
26 |
#define VIRT_TO_PHYS_ADDEND (-((int64_t)(int32_t)0x80000000)) |
|
27 |
|
|
28 | 24 |
#define MAX_IDE_BUS 2 |
29 | 25 |
|
30 | 26 |
static const int ide_iobase[2] = { 0x1f0, 0x170 }; |
... | ... | |
77 | 73 |
|
78 | 74 |
static int64_t load_kernel(void) |
79 | 75 |
{ |
80 |
int64_t entry, kernel_low, kernel_high;
|
|
76 |
int64_t entry, kernel_high; |
|
81 | 77 |
long kernel_size, initrd_size, params_size; |
82 | 78 |
ram_addr_t initrd_offset; |
83 | 79 |
uint32_t *params_buf; |
... | ... | |
88 | 84 |
#else |
89 | 85 |
big_endian = 0; |
90 | 86 |
#endif |
91 |
kernel_size = load_elf(loaderparams.kernel_filename, VIRT_TO_PHYS_ADDEND, |
|
92 |
(uint64_t *)&entry, (uint64_t *)&kernel_low, |
|
93 |
(uint64_t *)&kernel_high, big_endian, ELF_MACHINE, 1); |
|
87 |
kernel_size = load_elf(loaderparams.kernel_filename, cpu_mips_kseg0_to_phys, |
|
88 |
NULL, (uint64_t *)&entry, NULL, |
|
89 |
(uint64_t *)&kernel_high, big_endian, |
|
90 |
ELF_MACHINE, 1); |
|
94 | 91 |
if (kernel_size >= 0) { |
95 | 92 |
if ((entry & ~0x7fffffffULL) == 0x80000000) |
96 | 93 |
entry = (int32_t)entry; |
... | ... | |
132 | 129 |
params_buf[1] = tswap32(0x12345678); |
133 | 130 |
|
134 | 131 |
if (initrd_size > 0) { |
135 |
snprintf((char *)params_buf + 8, 256, "rd_start=0x" TARGET_FMT_lx " rd_size=%li %s",
|
|
136 |
PHYS_TO_VIRT((uint32_t)initrd_offset),
|
|
132 |
snprintf((char *)params_buf + 8, 256, "rd_start=0x%" PRIx64 " rd_size=%li %s",
|
|
133 |
cpu_mips_phys_to_kseg0(NULL, initrd_offset),
|
|
137 | 134 |
initrd_size, loaderparams.kernel_cmdline); |
138 | 135 |
} else { |
139 | 136 |
snprintf((char *)params_buf + 8, 256, "%s", loaderparams.kernel_cmdline); |
Also available in: Unified diff