Revision c570fd16 hw/mips_r4k.c
b/hw/mips_r4k.c | ||
---|---|---|
11 | 11 |
|
12 | 12 |
#define BIOS_FILENAME "mips_bios.bin" |
13 | 13 |
//#define BIOS_FILENAME "system.bin" |
14 |
#define KERNEL_LOAD_ADDR 0x80010000
|
|
15 |
#define INITRD_LOAD_ADDR 0x80800000
|
|
14 |
#define KERNEL_LOAD_ADDR SIGN_EXTEND32(0x80010000)
|
|
15 |
#define INITRD_LOAD_ADDR SIGN_EXTEND32(0x80800000)
|
|
16 | 16 |
|
17 |
#define VIRT_TO_PHYS_ADDEND (-0x80000000LL)
|
|
17 |
#define VIRT_TO_PHYS_ADDEND (-SIGN_EXTEND32(0x80000000LL))
|
|
18 | 18 |
|
19 | 19 |
static const int ide_iobase[2] = { 0x1f0, 0x170 }; |
20 | 20 |
static const int ide_iobase2[2] = { 0x3f6, 0x376 }; |
... | ... | |
74 | 74 |
long kernel_size, initrd_size; |
75 | 75 |
|
76 | 76 |
kernel_size = load_elf(kernel_filename, VIRT_TO_PHYS_ADDEND, &entry); |
77 |
if (kernel_size >= 0) |
|
77 |
if (kernel_size >= 0) { |
|
78 |
if ((entry & ~0x7fffffffULL) == 0x80000000) |
|
79 |
entry = SIGN_EXTEND32(entry); |
|
78 | 80 |
env->PC = entry; |
79 |
else { |
|
81 |
} else {
|
|
80 | 82 |
kernel_size = load_image(kernel_filename, |
81 | 83 |
phys_ram_base + KERNEL_LOAD_ADDR + VIRT_TO_PHYS_ADDEND); |
82 | 84 |
if (kernel_size < 0) { |
... | ... | |
103 | 105 |
if (initrd_size > 0) { |
104 | 106 |
int ret; |
105 | 107 |
ret = sprintf(phys_ram_base + (16 << 20) - 256, |
106 |
"rd_start=0x%08x rd_size=%li ",
|
|
108 |
"rd_start=0x" TLSZ " rd_size=%li ",
|
|
107 | 109 |
INITRD_LOAD_ADDR, |
108 | 110 |
initrd_size); |
109 | 111 |
strcpy (phys_ram_base + (16 << 20) - 256 + ret, kernel_cmdline); |
Also available in: Unified diff