X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fgeekos%2Fmain.c;h=e1a465ba291d5b6733a8a80547f0bc1e878204a2;hb=c07f7f11e5d781b90f4d8876d12f3fc4e47309ad;hp=ab7dd1fa2258064da46141f30dd9aa32a6bd3e2f;hpb=a109eb919a162bd7de58d62020801bc2e633be50;p=palacios.releases.git diff --git a/palacios/src/geekos/main.c b/palacios/src/geekos/main.c index ab7dd1f..e1a465b 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.31 $ + * $Revision: 1.41 $ * * This is free software. You are permitted to use, * redistribute, and modify it as specified in the file "COPYING". @@ -34,11 +34,34 @@ #include #include +#include +#include +#include #define SPEAKER_PORT 0x61 +#define TEST_NE2K 0 + +#if TEST_NE2K +int Packet_Received(struct NE2K_Packet_Info* info, uchar_t *pkt) { + int i; + for(i = 0; i < info->size; i++) { + PrintBoth("%x ", *(pkt+i)); + if(i % 10 == 0) + PrintBoth("\n"); + } + Free(pkt); + return 0; +} +#endif + +void Spin() +{ + // hack - competing thread + while (1) {}; +} void Buzz(unsigned delay, unsigned num) @@ -171,16 +194,27 @@ int AllocateAndMapPagesForRange(uint_t start, uint_t length, pte_t template_pte) */ void Main(struct Boot_Info* bootInfo) { - struct Kernel_Thread * key_thread; - struct Kernel_Thread * spkr_thread; - ulong_t doIBuzz = 0; + + //Out_Byte(0x1234,5); + //Out_Byte(0x1234,5); Init_BSS(); Init_Screen(); - Init_Serial(); + + /* { + extern char BSS_START, BSS_END; + + SerialPrint("BSS 0x%x->0x%x\n", &BSS_START, &BSS_END); + + }*/ + + + // SerialPrint("Guest Mem Dump at 0x%x\n", 0x100000); + //SerialMemDump((unsigned char *)(0x100000), 261 * 1024); + Init_Mem(bootInfo); Init_CRC32(); Init_TSS(); @@ -191,6 +225,14 @@ void Main(struct Boot_Info* bootInfo) Init_Keyboard(); Init_VM(bootInfo); Init_Paging(); + + //Init_PCI(); + + Init_Stubs(); + +#if TEST_NE2K + Init_Ne2k(&Packet_Received); +#endif // Init_IDE(); @@ -198,7 +240,7 @@ void Main(struct Boot_Info* bootInfo) -#if 1 +#if 0 SerialPrint("Dumping VM kernel Code (first 128 bytes @ 0x%x)\n", 0x100000); SerialMemDump((unsigned char *)0x100000, 256); /* @@ -207,28 +249,56 @@ void Main(struct Boot_Info* bootInfo) */ #endif + +#if 1 + struct Kernel_Thread *spin_thread; + + spin_thread=Start_Kernel_Thread(Spin,0,PRIORITY_NORMAL,false); + +#endif + #if 0 - SerialPrint("Dumping BIOS code f0000-fffff\n\n"); - SerialMemDump((unsigned char *)0xf0000, 65536); + { + + struct Kernel_Thread * key_thread; + struct Kernel_Thread * spkr_thread; + + ulong_t doIBuzz = 0; + + 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 +#if TEST_NE2K + uchar_t src_addr[6] = { 0x52, 0x54, 0x00, 0x12, 0x34, 0x58 }; + uchar_t dest_addr[6] = { 0x52, 0x54, 0x00, 0x12, 0x34, 0x56 }; + + uint_t size = 64, i; + uchar_t *data = Malloc(size); + data = "This is a 64-byte string that will be used to test transmission."; + for(i = 0; i < 3; i++) { + NE2K_Send(src_addr, dest_addr, 0x01, data, size); + } #endif +#if !TEST_NE2K { - RunVMM(); + RunVMM(bootInfo); } +#endif - + SerialPrint("RunVMM returned, spinning\n"); + while (1) {} TODO("Write a Virtual Machine Monitor");