Revision 03875444 hw/pc.c
b/hw/pc.c | ||
---|---|---|
188 | 188 |
} |
189 | 189 |
|
190 | 190 |
/* hd_table must contain 4 block drivers */ |
191 |
static void cmos_init(ram_addr_t ram_size, ram_addr_t above_4g_mem_size, |
|
192 |
const char *boot_device, BlockDriverState **hd_table) |
|
191 |
static void cmos_init(int ram_size, const char *boot_device, BlockDriverState **hd_table) |
|
193 | 192 |
{ |
194 | 193 |
RTCState *s = rtc_state; |
195 | 194 |
int nbds, bds[3] = { 0, }; |
... | ... | |
212 | 211 |
rtc_set_memory(s, 0x30, val); |
213 | 212 |
rtc_set_memory(s, 0x31, val >> 8); |
214 | 213 |
|
215 |
if (above_4g_mem_size) { |
|
216 |
rtc_set_memory(s, 0x5b, (unsigned int)above_4g_mem_size >> 16); |
|
217 |
rtc_set_memory(s, 0x5c, (unsigned int)above_4g_mem_size >> 24); |
|
218 |
rtc_set_memory(s, 0x5d, (uint64_t)above_4g_mem_size >> 32); |
|
219 |
} |
|
220 |
|
|
221 | 214 |
if (ram_size > (16 * 1024 * 1024)) |
222 | 215 |
val = (ram_size / 65536) - ((16 * 1024 * 1024) / 65536); |
223 | 216 |
else |
... | ... | |
683 | 676 |
} |
684 | 677 |
|
685 | 678 |
/* PC hardware initialisation */ |
686 |
static void pc_init1(ram_addr_t ram_size, int vga_ram_size,
|
|
679 |
static void pc_init1(int ram_size, int vga_ram_size,
|
|
687 | 680 |
const char *boot_device, DisplayState *ds, |
688 | 681 |
const char *kernel_filename, const char *kernel_cmdline, |
689 | 682 |
const char *initrd_filename, |
... | ... | |
692 | 685 |
char buf[1024]; |
693 | 686 |
int ret, linux_boot, i; |
694 | 687 |
ram_addr_t ram_addr, vga_ram_addr, bios_offset, vga_bios_offset; |
695 |
ram_addr_t below_4g_mem_size, above_4g_mem_size = 0; |
|
696 | 688 |
int bios_size, isa_bios_size, vga_bios_size; |
697 | 689 |
PCIBus *pci_bus; |
698 | 690 |
int piix3_devfn = -1; |
... | ... | |
704 | 696 |
BlockDriverState *hd[MAX_IDE_BUS * MAX_IDE_DEVS]; |
705 | 697 |
BlockDriverState *fd[MAX_FD]; |
706 | 698 |
|
707 |
if (ram_size >= 0xe0000000 ) { |
|
708 |
above_4g_mem_size = ram_size - 0xe0000000; |
|
709 |
below_4g_mem_size = 0xe0000000; |
|
710 |
} else { |
|
711 |
below_4g_mem_size = ram_size; |
|
712 |
} |
|
713 |
|
|
714 | 699 |
linux_boot = (kernel_filename != NULL); |
715 | 700 |
|
716 | 701 |
/* init CPUs */ |
... | ... | |
745 | 730 |
|
746 | 731 |
/* allocate RAM */ |
747 | 732 |
ram_addr = qemu_ram_alloc(ram_size); |
748 |
cpu_register_physical_memory(0, below_4g_mem_size, ram_addr); |
|
749 |
|
|
750 |
/* above 4giga memory allocation */ |
|
751 |
if (above_4g_mem_size > 0) { |
|
752 |
cpu_register_physical_memory(0x100000000ULL, above_4g_mem_size, |
|
753 |
ram_addr + below_4g_mem_size); |
|
754 |
} |
|
733 |
cpu_register_physical_memory(0, ram_size, ram_addr); |
|
755 | 734 |
|
756 | 735 |
/* allocate VGA RAM */ |
757 | 736 |
vga_ram_addr = qemu_ram_alloc(vga_ram_size); |
... | ... | |
971 | 950 |
} |
972 | 951 |
floppy_controller = fdctrl_init(i8259[6], 2, 0, 0x3f0, fd); |
973 | 952 |
|
974 |
cmos_init(below_4g_mem_size, above_4g_mem_size, boot_device, hd);
|
|
953 |
cmos_init(ram_size, boot_device, hd);
|
|
975 | 954 |
|
976 | 955 |
if (pci_enabled && usb_enabled) { |
977 | 956 |
usb_uhci_piix3_init(pci_bus, piix3_devfn + 2); |
... | ... | |
1011 | 990 |
} |
1012 | 991 |
} |
1013 | 992 |
|
1014 |
static void pc_init_pci(ram_addr_t ram_size, int vga_ram_size,
|
|
993 |
static void pc_init_pci(int ram_size, int vga_ram_size,
|
|
1015 | 994 |
const char *boot_device, DisplayState *ds, |
1016 | 995 |
const char *kernel_filename, |
1017 | 996 |
const char *kernel_cmdline, |
... | ... | |
1023 | 1002 |
initrd_filename, 1, cpu_model); |
1024 | 1003 |
} |
1025 | 1004 |
|
1026 |
static void pc_init_isa(ram_addr_t ram_size, int vga_ram_size,
|
|
1005 |
static void pc_init_isa(int ram_size, int vga_ram_size,
|
|
1027 | 1006 |
const char *boot_device, DisplayState *ds, |
1028 | 1007 |
const char *kernel_filename, |
1029 | 1008 |
const char *kernel_cmdline, |
Also available in: Unified diff