X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fgeekos%2Fmain.c;h=de460418d934f0a2301d4a8bf8844261e283a1c4;hb=624a05de781c51ed5d34a6db2583f884918a9594;hp=575aa70ea1998e8815d952544ca2670e9292775a;hpb=8cb3daaded0d8c80be801aa74493006b5a06999f;p=palacios.git diff --git a/palacios/src/geekos/main.c b/palacios/src/geekos/main.c index 575aa70..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.25 $ + * $Revision: 1.35 $ * * This is free software. You are permitted to use, * redistribute, and modify it as specified in the file "COPYING". @@ -29,18 +29,20 @@ #include #include -#include +#include #include - #include + + #define SPEAKER_PORT 0x61 + void Buzz(unsigned delay, unsigned num) { volatile int x; @@ -88,66 +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; - -#if 0 - __asm__ __volatile__ ( - "popf" - ); - -#endif - - 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; - } - } -} - - - - @@ -236,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(); @@ -251,6 +195,7 @@ void Main(struct Boot_Info* bootInfo) Init_Keyboard(); Init_VM(bootInfo); Init_Paging(); + Init_Stubs(); // Init_IDE(); @@ -260,101 +205,29 @@ void Main(struct Boot_Info* bootInfo) #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 0 - SerialPrint("Dumping BIOS code f0000-fffff\n\n"); - SerialMemDump((unsigned char *)0xf0000, 65536); +#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); */ -#endif -#if 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; - struct guest_info 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(struct guest_info)); - - 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; - os_hooks.vaddr_to_paddr = &Identity; - os_hooks.paddr_to_vaddr = &Identity; - - - // DumpGDT(); - Init_VMM(&os_hooks, &vmm_ops); - - init_shadow_map(&(vm_info.mem_map)); - init_shadow_page_state(&(vm_info.shdw_pg_state)); - vm_info.page_mode = SHADOW_PAGING; - - vm_info.cpu_mode = REAL; - - init_vmm_io_map(&(vm_info.io_map)); - - - 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); - - shadow_region_t *ent = Malloc(sizeof(shadow_region_t));; - init_shadow_region_physical(ent,0,0x100000,GUEST_REGION_PHYSICAL_MEMORY, - 0x100000, HOST_REGION_PHYSICAL_MEMORY); - add_shadow_region(&(vm_info.mem_map),ent); - - hook_io_port(&(vm_info.io_map), 0x61, &IO_Read, &IO_Write); - /* - vm_info.cr0 = 0; - vm_info.cs.base=0xf000; - vm_info.cs.limit=0xffff; - */ - vm_info.rip = 0xfff0; - 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); }