X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fgeekos%2Fmain.c;h=de460418d934f0a2301d4a8bf8844261e283a1c4;hb=624a05de781c51ed5d34a6db2583f884918a9594;hp=e59be37e9062843a6f2bfd96d7fffcc7bf66d2e1;hpb=122a7d532b4bb6914ff291d53f6111f1e52613b7;p=palacios.git diff --git a/palacios/src/geekos/main.c b/palacios/src/geekos/main.c index e59be37..de46041 100644 --- a/palacios/src/geekos/main.c +++ b/palacios/src/geekos/main.c @@ -3,7 +3,7 @@ * Copyright (c) 2001,2003,2004 David H. Hovemeyer * Copyright (c) 2003, Jeffrey K. Hollingsworth * Copyright (c) 2004, Iulian Neamtiu - * $Revision: 1.20 $ + * $Revision: 1.35 $ * * This is free software. You are permitted to use, * redistribute, and modify it as specified in the file "COPYING". @@ -29,17 +29,20 @@ #include #include -#include -#include +#include +#include #include + + #define SPEAKER_PORT 0x61 + void Buzz(unsigned delay, unsigned num) { volatile int x; @@ -87,60 +90,6 @@ inline uchar_t MyIn_Byte(ushort_t port) -int IO_Read(ushort_t port, void * dst, uint_t length) { - uchar_t * iter = dst; - uint_t i; - - for (i = 0; i < length; i++) { - *iter = MyIn_Byte(port); - iter++; - } - - return 0; -} - - - -int IO_Write(ushort_t port, void * src, uint_t length) { - uchar_t * iter = src; - uint_t i; - - - for (i = 0; i < length; i++) { - MyOut_Byte(port, *iter); - iter++; - } - - return 0; -} - - -void BuzzVM() -{ - int x; - int j; - unsigned char init; - - - PrintBoth("Starting To Buzz\n"); - - init=MyIn_Byte(SPEAKER_PORT); - - while (1) { - MyOut_Byte(SPEAKER_PORT, init|0x2); - for (j=0;j<1000000;j++) { - x+=j; - } - MyOut_Byte(SPEAKER_PORT, init); - for (j=0;j<1000000;j++) { - x+=j; - } - } -} - - - - @@ -229,10 +178,12 @@ void Main(struct Boot_Info* bootInfo) ulong_t doIBuzz = 0; + Out_Byte(0x1234,5); + Out_Byte(0x1234,5); + Init_BSS(); Init_Screen(); - Init_Serial(); Init_Mem(bootInfo); Init_CRC32(); @@ -244,93 +195,39 @@ void Main(struct Boot_Info* bootInfo) Init_Keyboard(); Init_VM(bootInfo); Init_Paging(); + Init_Stubs(); // Init_IDE(); - Print("Done; stalling\n"); + // Print("Done; stalling\n"); -#if 1 +#if 0 SerialPrint("Dumping VM kernel Code (first 128 bytes @ 0x%x)\n", 0x100000); - SerialMemDump((unsigned char *)0xfe000, 4096); + SerialMemDump((unsigned char *)0x100000, 256); /* SerialPrint("Dumping kernel Code (first 512 bytes @ 0x%x)\n",KERNEL_START); SerialMemDump((unsigned char *)VM_KERNEL_START, 512); */ #endif +#if 1 + SerialPrint("Dumping BIOS code ffff0-fffff\n\n"); + SerialMemDump((unsigned char *)0x10fff0, 16); + /* + SerialPrint("Dumping kernel Code (first 512 bytes @ 0x%x)\n",KERNEL_START); + SerialMemDump((unsigned char *)VM_KERNEL_START, 512); + */ - while (1); - SerialPrintLevel(1000,"Launching Noisemaker and keyboard listener threads\n"); + SerialPrint("Noisemaker and keyboard listener threads\n"); key_thread = Start_Kernel_Thread(Keyboard_Listener, (ulong_t)&doIBuzz, PRIORITY_NORMAL, false); spkr_thread = Start_Kernel_Thread(Buzzer, (ulong_t)&doIBuzz, PRIORITY_NORMAL, false); +#endif { - struct vmm_os_hooks os_hooks; - struct vmm_ctrl_ops vmm_ops; - guest_info_t vm_info; - addr_t rsp; - addr_t rip; - - memset(&os_hooks, 0, sizeof(struct vmm_os_hooks)); - memset(&vmm_ops, 0, sizeof(struct vmm_ctrl_ops)); - memset(&vm_info, 0, sizeof(guest_info_t)); - - os_hooks.print_debug = &PrintBoth; - os_hooks.print_info = &Print; - os_hooks.print_trace = &SerialPrint; - os_hooks.allocate_pages = &Allocate_VMM_Pages; - os_hooks.free_page = &Free_VMM_Page; - os_hooks.malloc = &VMM_Malloc; - os_hooks.free = &VMM_Free; - - - // DumpGDT(); - Init_VMM(&os_hooks, &vmm_ops); - - - init_mem_layout(&(vm_info.mem_layout)); - init_mem_list(&(vm_info.mem_list)); - init_vmm_io_map(&(vm_info.io_map)); - - - add_mem_list_pages(&(vm_info.mem_list), vm_range_start, (vm_range_end - vm_range_start) / PAGE_SIZE); - // add_unmapped_mem_range(&(vm_info.mem_layout), 0, 256); - //add_shared_mem_range(&(vm_info.mem_layout), guest_kernel_start, (guest_kernel_end - guest_kernel_start) / PAGE_SIZE, guest_kernel_start); - //add_guest_mem_range(&(vm_info.mem_layout), guest_kernel_end, 20); - - if (0) { - - // add_shared_mem_range(&(vm_info.mem_layout), 0, 0x800000, 0x10000); - add_shared_mem_range(&(vm_info.mem_layout), 0, 0x1000000, 0); - - rip = (ulong_t)(void*)&BuzzVM; - // rip -= 0x10000; - // rip = (addr_t)(void*)&exit_test; - // rip -= 0x2000; - vm_info.rip = rip; - rsp = (addr_t)Alloc_Page(); - - vm_info.rsp = (rsp +4092 );// - 0x2000; - - - } else { - //add_shared_mem_range(&(vm_info.mem_layout), 0x0, 0x1000, 0x100000); - add_shared_mem_range(&(vm_info.mem_layout), 0x0, 0x100000, 0x0); - - - hook_io_port(&(vm_info.io_map), 0x61, &IO_Read, &IO_Write); - - vm_info.rip = 0xff00; - vm_info.rsp = 0x0; - } - - PrintBoth("Initializing Guest (eip=0x%.8x) (esp=0x%.8x)\n", (uint_t)vm_info.rip,(uint_t)vm_info.rsp); - (vmm_ops).init_guest(&vm_info); - PrintBoth("Starting Guest\n"); - (vmm_ops).start_guest(&vm_info); + RunVMM(bootInfo); }