Index: branches/meklort/i386/libsaio/platform.c =================================================================== --- branches/meklort/i386/libsaio/platform.c (revision 549) +++ branches/meklort/i386/libsaio/platform.c (revision 550) @@ -35,14 +35,7 @@ static bool done = false; if (done) return; - bool useAutodetection = true; - getBoolForKey(kUseMemDetect, &useAutodetection, &bootInfo->bootConfig); - - - if (useAutodetection) { - execute_hook("ScanMemory", NULL, NULL, NULL, NULL); - //getc(); - } + execute_hook("ScanMemory", NULL, NULL, NULL, NULL); done = true; } Index: branches/meklort/i386/boot2/boot.c =================================================================== --- branches/meklort/i386/boot2/boot.c (revision 549) +++ branches/meklort/i386/boot2/boot.c (revision 550) @@ -200,7 +200,7 @@ finalizeBootStruct(); execute_hook("Kernel Start", (void*)kernelEntry, (void*)bootArgs, NULL, NULL); // Notify modules that the kernel is about to be started - + // Jump to kernel's entry point. There's no going back now. startprog( kernelEntry, bootArgs ); Index: branches/meklort/i386/modules/Memory/spd.c =================================================================== --- branches/meklort/i386/modules/Memory/spd.c (revision 549) +++ branches/meklort/i386/modules/Memory/spd.c (revision 550) @@ -24,7 +24,7 @@ #define DBG(x...) #endif -static const char *spd_memory_types[] = +const char *spd_memory_types[] = { "RAM", /* 00h Undefined */ "FPM", /* 01h FPM */ @@ -41,7 +41,7 @@ }; #define UNKNOWN_MEM_TYPE 2 -static uint8_t spd_mem_to_smbios[] = +uint8_t spd_mem_to_smbios[] = { UNKNOWN_MEM_TYPE, /* 00h Undefined */ UNKNOWN_MEM_TYPE, /* 01h FPM */ @@ -202,9 +202,9 @@ #define SLST(a) ((uint8_t)(spd[a] & 0x0f)) /** Get DDR3 or DDR2 serial number, 0 most of the times, always return a valid ptr */ +char asciiSerial[16]; const char *getDDRSerial(const char* spd) { - static char asciiSerial[16]; if (spd[SPD_MEMORY_TYPE]==SPD_MEMORY_TYPE_SDRAM_DDR3) // DDR3 { @@ -219,9 +219,9 @@ } /** Get DDR3 or DDR2 Part Number, always return a valid ptr */ +char asciiPartNo[32]; const char * getDDRPartNum(char* spd, uint32_t base, int slot) { - static char asciiPartNo[32]; int i, start=0, index = 0; if (spd[SPD_MEMORY_TYPE]==SPD_MEMORY_TYPE_SDRAM_DDR3) { @@ -349,7 +349,7 @@ } // for } -static struct smbus_controllers_t smbus_controllers[] = { +struct smbus_controllers_t smbus_controllers[] = { {0x8086, 0x269B, "ESB2", read_smb_intel }, {0x8086, 0x25A4, "6300ESB", read_smb_intel }, Index: branches/meklort/i386/modules/Memory/Memory.c =================================================================== --- branches/meklort/i386/modules/Memory/Memory.c (revision 549) +++ branches/meklort/i386/modules/Memory/Memory.c (revision 550) @@ -10,7 +10,8 @@ #include "platform.h" #include "dram_controllers.h" #include "spd.h" -#include "mem.h" +#include "boot.h" +#include "bootstruct.h" #include "modules.h" pci_dt_t * dram_controller_dev = NULL; @@ -38,10 +39,20 @@ void Memory_hook(void* arg1, void* arg2, void* arg3, void* arg4) { - if (dram_controller_dev!=NULL) { - scan_dram_controller(dram_controller_dev); // Rek: pci dev ram controller direct and fully informative scan ... - } - scan_memory(Platform); // unfortunately still necesary for some comp where spd cant read correct speed - scan_spd(Platform); - + + + bool useAutodetection = true; + getBoolForKey(kUseMemDetect, &useAutodetection, &bootInfo->bootConfig); + + + if (useAutodetection) { + + if (dram_controller_dev!=NULL) { + scan_dram_controller(dram_controller_dev); // Rek: pci dev ram controller direct and fully informative scan ... + } + scan_memory(Platform); // unfortunately still necesary for some comp where spd cant read correct speed + scan_spd(Platform); + //getc(); + } + } \ No newline at end of file Index: branches/meklort/i386/modules/Memory/dram_controllers.c =================================================================== --- branches/meklort/i386/modules/Memory/dram_controllers.c (revision 549) +++ branches/meklort/i386/modules/Memory/dram_controllers.c (revision 550) @@ -45,11 +45,11 @@ } int nhm_bus = 0x3F; +long possible_nhm_bus[] = {0xFF, 0x7F, 0x3F}; // Setup Nehalem Integrated Memory Controller static void setup_nhm(pci_dt_t *dram_dev) { - static long possible_nhm_bus[] = {0xFF, 0x7F, 0x3F}; unsigned long did, vid; int i; @@ -485,7 +485,7 @@ Platform->RAM.Channels = SMB_MEM_CHANNEL_DUAL; } -static struct mem_controller_t dram_controllers[] = { +struct mem_controller_t dram_controllers[] = { // Default unknown chipset { 0, 0, "", NULL, NULL, NULL }, @@ -525,7 +525,7 @@ }; -static const char *memory_channel_types[] = +const char *memory_channel_types[] = { "Unknown", "Single", "Dual", "Triple" }; Index: branches/meklort/i386/modules/GraphicsEnabler/GraphicsEnabler.c =================================================================== --- branches/meklort/i386/modules/GraphicsEnabler/GraphicsEnabler.c (revision 549) +++ branches/meklort/i386/modules/GraphicsEnabler/GraphicsEnabler.c (revision 550) @@ -23,35 +23,36 @@ } -void GraphicsEnabler_hook(void* arg1, void* arg2, void* arg3, void* arg4) -{ - pci_dt_t* current = arg1; - +void GraphicsEnabler_hook(pci_dt_t* current, void* arg2, void* arg3, void* arg4) +{ if(current->class_id != PCI_CLASS_DISPLAY_VGA) return; - + char *devicepath = get_pci_dev_path(current); bool do_gfx_devprop = false; getBoolForKey(kGraphicsEnabler, &do_gfx_devprop, &bootInfo->bootConfig); - + if (do_gfx_devprop) + { switch (current->vendor_id) - { - case PCI_VENDOR_ID_ATI: - verbose("ATI VGA Controller [%04x:%04x] :: %s \n", - current->vendor_id, current->device_id, devicepath); - setup_ati_devprop(current); - break; - - case PCI_VENDOR_ID_INTEL: - /* message to be removed once support for these cards is added */ - verbose("Intel VGA Controller [%04x:%04x] :: %s (currently NOT SUPPORTED)\n", - current->vendor_id, current->device_id, devicepath); - break; - - case PCI_VENDOR_ID_NVIDIA: - setup_nvidia_devprop(current); - break; + { + case PCI_VENDOR_ID_ATI: + verbose("ATI VGA Controller [%04x:%04x] :: %s \n", + current->vendor_id, current->device_id, devicepath); + setup_ati_devprop(current); + break; + + case PCI_VENDOR_ID_INTEL: + //message to be removed once support for these cards is added + verbose("Intel VGA Controller [%04x:%04x] :: %s (currently NOT SUPPORTED)\n", + current->vendor_id, current->device_id, devicepath); + break; + + case PCI_VENDOR_ID_NVIDIA: + setup_nvidia_devprop(current); + break; + } } + } Index: branches/meklort/i386/modules/GraphicsEnabler/nvidia.c =================================================================== --- branches/meklort/i386/modules/GraphicsEnabler/nvidia.c (revision 549) +++ branches/meklort/i386/modules/GraphicsEnabler/nvidia.c (revision 550) @@ -57,7 +57,7 @@ #include "nvidia.h" #ifndef DEBUG_NVIDIA -#define DEBUG_NVIDIA 0 +#define DEBUG_NVIDIA 1 #endif #if DEBUG_NVIDIA @@ -85,7 +85,7 @@ const char *nvidia_name_1[] = { "@1,name", "NVDA,Display-B" }; const char *nvidia_slot_name[] = { "AAPL,slot-name", "Slot-1" }; -static uint8_t default_NVCAP[]= { +uint8_t default_NVCAP[]= { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00 @@ -93,7 +93,7 @@ #define NVCAP_LEN ( sizeof(default_NVCAP) / sizeof(uint8_t) ) -static struct nv_chipsets_t NVKnownChipsets[] = { +struct nv_chipsets_t NVKnownChipsets[] = { { 0x00000000, "Unknown" }, { 0x10DE0040, "GeForce 6800 Ultra" }, { 0x10DE0041, "GeForce 6800" }, Index: branches/meklort/i386/modules/GraphicsEnabler/ati.c =================================================================== --- branches/meklort/i386/modules/GraphicsEnabler/ati.c (revision 549) +++ branches/meklort/i386/modules/GraphicsEnabler/ati.c (revision 550) @@ -19,8 +19,8 @@ /* * Alternatively you can choose to comply with APSL */ - - + + #include "libsaio.h" #include "boot.h" #include "bootstruct.h" @@ -111,7 +111,7 @@ }; // Known cards as of 2008/08/26 -static struct ati_chipsets_t ATIKnownChipsets[] = { +struct ati_chipsets_t ATIKnownChipsets[] = { { 0x00000000, "Unknown" } , { 0x10029589, "ATI Radeon 2600 Series"} , { 0x10029588, "ATI Radeon 2600 Series"} , @@ -156,8 +156,8 @@ { 0x1002945A, "ATI Radeon 4800 Mobility Series"} , { 0x1002945B, "ATI Radeon 4800 Mobility Series"} , { 0x1002944B, "ATI Radeon 4800 Mobility Series"} , - { 0x10029490, "ATI Radeon 4670 Series"} , - { 0x10029498, "ATI Radeon 4650 Series"} , + { 0x10029490, "ATI Radeon 4670 Series"} , + { 0x10029498, "ATI Radeon 4650 Series"} , { 0x10029490, "ATI Radeon 4600 Series"} , { 0x10029498, "ATI Radeon 4600 Series"} , { 0x1002949E, "ATI Radeon 4600 Series"} , @@ -169,15 +169,15 @@ { 0x10029552, "ATI Radeon 4300 Mobility Series"} , { 0x10029553, "ATI Radeon 4500 Mobility Series"} , { 0x1002954F, "ATI Radeon 4300 Series"} , - { 0x100294B3, "ATI Radeon 4770 Series"} , - { 0x100294B5, "ATI Radeon 4770 Series"} , - { 0x100268B8, "ATI Radeon 5700 Series"} , - { 0x100268BE, "ATI Radeon 5700 Series"} , - { 0x10026898, "ATI Radeon 5800 Series"} , - { 0x10026899, "ATI Radeon 5800 Series"} + { 0x100294B3, "ATI Radeon 4770 Series"} , + { 0x100294B5, "ATI Radeon 4770 Series"} , + { 0x100268B8, "ATI Radeon 5700 Series"} , + { 0x100268BE, "ATI Radeon 5700 Series"} , + { 0x10026898, "ATI Radeon 5800 Series"} , + { 0x10026899, "ATI Radeon 5800 Series"} }; -static struct ati_chipsets_t ATIKnownFramebuffers[] = { +struct ati_chipsets_t ATIKnownFramebuffers[] = { { 0x00000000, "Megalodon" }, { 0x10029589, "Lamna"} , { 0x10029588, "Lamna"} , @@ -222,33 +222,33 @@ { 0x1002945A, "Motmot"} , { 0x1002945B, "Motmot"} , { 0x1002944B, "Motmot"} , - { 0x10029490, "Peregrine"} , - { 0x10029498, "Peregrine"} , - { 0x1002949E, "Peregrine"} , - { 0x10029480, "Peregrine"} , - { 0x10029488, "Peregrine"} , - { 0x10029540, "Peregrine"} , - { 0x10029541, "Peregrine"} , - { 0x1002954E, "Peregrine"} , - { 0x10029552, "Peregrine"} , - { 0x10029553, "Peregrine"} , - { 0x1002954F, "Peregrine"} , - { 0x100294B3, "Peregrine"}, - { 0x100294B5, "Peregrine"}, - { 0x100268B8, "Motmot"}, - { 0x100268BE, "Motmot"}, - { 0x10026898, "Motmot"}, - { 0x10026899, "Motmot"} + { 0x10029490, "Peregrine"} , + { 0x10029498, "Peregrine"} , + { 0x1002949E, "Peregrine"} , + { 0x10029480, "Peregrine"} , + { 0x10029488, "Peregrine"} , + { 0x10029540, "Peregrine"} , + { 0x10029541, "Peregrine"} , + { 0x1002954E, "Peregrine"} , + { 0x10029552, "Peregrine"} , + { 0x10029553, "Peregrine"} , + { 0x1002954F, "Peregrine"} , + { 0x100294B3, "Peregrine"}, + { 0x100294B5, "Peregrine"}, + { 0x100268B8, "Motmot"}, + { 0x100268BE, "Motmot"}, + { 0x10026898, "Motmot"}, + { 0x10026899, "Motmot"} }; static uint32_t accessROM(pci_dt_t *ati_dev, unsigned int mode) { uint32_t bar[7]; volatile uint32_t *regs; - + bar[2] = pci_config_read32(ati_dev->dev.addr, 0x18 ); regs = (uint32_t *) (bar[2] & ~0x0f); - + if (mode) { if (mode != 1) { return 0xe00002c7; @@ -295,7 +295,7 @@ uint32_t *BIOSBase; uint32_t counter; volatile uint32_t *regs; - + bar[2] = pci_config_read32(ati_dev->dev.addr, 0x18 ); regs = (volatile uint32_t *) (bar[2] & ~0x0f); accessROM(ati_dev, 0); @@ -303,7 +303,7 @@ REG32R(0xac); REG32W(0xa8, 0); REG32R(0xac); - + BIOSBase = malloc(0x10000); REG32W(0xa8, 0); BIOSBase[0] = REG32R(0xac); @@ -314,7 +314,7 @@ counter +=4; } while (counter != 0x10000); accessROM((pci_dt_t *)regs, 1); - + if (*(uint16_t *)BIOSBase != 0xAA55) { printf("Wrong BIOS signature: %04x\n", *(uint16_t *)BIOSBase); return 0; @@ -330,7 +330,7 @@ uint32_t bar[7]; uint32_t size; volatile uint32_t *regs; - + bar[2] = pci_config_read32(ati_dev->dev.addr, 0x18 ); regs = (uint32_t *) (bar[2] & ~0x0f); if (ati_dev->device_id < 0x9400) { @@ -348,33 +348,33 @@ static bool radeon_card_posted(pci_dt_t *ati_dev) { // if devid matches biosimage(from legacy) devid - posted card, fails with X2/crossfire cards. -/* char *biosimage = 0xC0000; - - if ((uint8_t)biosimage[0] == 0x55 && (uint8_t)biosimage[1] == 0xaa) - { - struct pci_rom_pci_header_t *rom_pci_header; - rom_pci_header = (struct pci_rom_pci_header_t*)(biosimage + (uint8_t)biosimage[24] + (uint8_t)biosimage[25]*256); - - if (rom_pci_header->signature == 0x52494350) - { - if (rom_pci_header->device == ati_dev->device_id) - { - return true; - printf("Card was POSTed\n"); - } - } - } - return false; - printf("Card was not POSTed\n"); - */ + /* char *biosimage = 0xC0000; + + if ((uint8_t)biosimage[0] == 0x55 && (uint8_t)biosimage[1] == 0xaa) + { + struct pci_rom_pci_header_t *rom_pci_header; + rom_pci_header = (struct pci_rom_pci_header_t*)(biosimage + (uint8_t)biosimage[24] + (uint8_t)biosimage[25]*256); + + if (rom_pci_header->signature == 0x52494350) + { + if (rom_pci_header->device == ati_dev->device_id) + { + return true; + printf("Card was POSTed\n"); + } + } + } + return false; + printf("Card was not POSTed\n"); + */ //fails yet uint32_t bar[7]; uint32_t val; volatile uint32_t *regs; - + bar[2] = pci_config_read32(ati_dev->dev.addr, 0x18); regs = (uint32_t *) (bar[2] & ~0x0f); - + val = REG32R(AVIVO_D1CRTC_CONTROL) | REG32R(AVIVO_D2CRTC_CONTROL); if (val & AVIVO_CRTC_EN) { return true; @@ -387,7 +387,7 @@ { int fd; int size; - + if ((fd = open_bvdev("bt(0,0)", filename, 0)) < 0) { return 0; } @@ -404,7 +404,7 @@ static char *get_ati_model(uint32_t id) { int i; - + for (i=0; i< (sizeof(ATIKnownChipsets) / sizeof(ATIKnownChipsets[0])); i++) { if (ATIKnownChipsets[i].device == id) { return ATIKnownChipsets[i].name; @@ -416,7 +416,7 @@ static char *get_ati_fb(uint32_t id) { int i; - + for (i=0; i< (sizeof(ATIKnownFramebuffers) / sizeof(ATIKnownFramebuffers[0])); i++) { if (ATIKnownFramebuffers[i].device == id) { return ATIKnownFramebuffers[i].name; @@ -429,7 +429,7 @@ { int i; uint8_t *config_space; - + if (!device || !ati_dev) { return 0; } @@ -448,30 +448,30 @@ if(!device) return 0; -// if(!DP_ADD_TEMP_VAL(device, ati_compatible_0)) -// return 0; -// if(!DP_ADD_TEMP_VAL(device, ati_compatible_1)) -// return 0; + // if(!DP_ADD_TEMP_VAL(device, ati_compatible_0)) + // return 0; + // if(!DP_ADD_TEMP_VAL(device, ati_compatible_1)) + // return 0; if(!DP_ADD_TEMP_VAL(device, ati_device_type_0)) return 0; if(!DP_ADD_TEMP_VAL(device, ati_device_type_1)) return 0; -// if(!DP_ADD_TEMP_VAL(device, ati_device_type)) -// return 0; -// if(!DP_ADD_TEMP_VAL(device, ati_name_0)) -// return 0; -// if(!DP_ADD_TEMP_VAL(device, ati_name_1)) -// return 0; -// if(!DP_ADD_TEMP_VAL(device, ati_name)) -// return 0; + // if(!DP_ADD_TEMP_VAL(device, ati_device_type)) + // return 0; + // if(!DP_ADD_TEMP_VAL(device, ati_name_0)) + // return 0; + // if(!DP_ADD_TEMP_VAL(device, ati_name_1)) + // return 0; + // if(!DP_ADD_TEMP_VAL(device, ati_name)) + // return 0; if(!DP_ADD_TEMP_VAL(device, ati_efidisplay_0)) return 0; if(!DP_ADD_TEMP_VAL(device, ati_display_type_0)) return 0; if(!DP_ADD_TEMP_VAL(device, ati_display_type_1)) return 0; -// if(!DP_ADD_TEMP_VAL(device, ati_slot_name)) -// return 0; + // if(!DP_ADD_TEMP_VAL(device, ati_slot_name)) + // return 0; if(!DP_ADD_TEMP_VAL(device, ati_card_no)) return 0; if(!DP_ADD_TEMP_VAL(device, ati_copyright)) @@ -535,7 +535,7 @@ { if(!device) return 0; - + if(!DP_ADD_TEMP_VAL_DATA(device, ati_platform_info)) return 0; if(!DP_ADD_TEMP_VAL(device, ati_device_type_0)) @@ -544,8 +544,8 @@ return 0; if(!DP_ADD_TEMP_VAL(device, ati_efidisplay_0_n4)) return 0; -// if(!DP_ADD_TEMP_VAL(device, ati_slot_name_n4)) -// return 0; + // if(!DP_ADD_TEMP_VAL(device, ati_slot_name_n4)) + // return 0; if(!DP_ADD_TEMP_VAL(device, ati_card_no)) return 0; if(!DP_ADD_TEMP_VAL(device, ati_copyright)) @@ -634,9 +634,9 @@ uint8_t cmd; bool doit; bool toFree; - + devicepath = get_pci_dev_path(ati_dev); - + cmd = pci_config_read8(ati_dev->dev.addr, 4); verbose("old pci command - %x\n", cmd); if (cmd == 0) { @@ -644,7 +644,7 @@ cmd = pci_config_read8(ati_dev->dev.addr, 4); verbose("new pci command - %x\n", cmd); } - + model = get_ati_model((ati_dev->vendor_id << 16) | ati_dev->device_id); framebuffer = get_ati_fb((ati_dev->vendor_id << 16) | ati_dev->device_id); if (!string) { @@ -656,7 +656,7 @@ getc(); return false; } - + /* FIXME: for primary graphics card only */ if (radeon_card_posted(ati_dev)) { boot_display = 1; @@ -665,11 +665,11 @@ } verbose("boot display - %x\n", boot_display); devprop_add_value(device, "@0,AAPL,boot-display", (uint8_t*)&boot_display, 4); - + if((framebuffer[0] == 'M' && framebuffer[1] == 'o' && framebuffer[2] == 't') || - (framebuffer[0] == 'S' && framebuffer[1] == 'h' && framebuffer[2] == 'r') || - (framebuffer[0] == 'P' && framebuffer[1] == 'e' && framebuffer[2] == 'r')) //faster than strcmp ;) - devprop_add_ati_template_4xxx(device); + (framebuffer[0] == 'S' && framebuffer[1] == 'h' && framebuffer[2] == 'r') || + (framebuffer[0] == 'P' && framebuffer[1] == 'e' && framebuffer[2] == 'r')) //faster than strcmp ;) + devprop_add_ati_template_4xxx(device); else { devprop_add_ati_template(device); vram_size = getvramsizekb(ati_dev) * 1024; @@ -687,30 +687,30 @@ } devprop_add_value(device, "model", (uint8_t*)model, (strlen(model) + 1)); devprop_add_value(device, "ATY,DeviceID", (uint8_t*)&ati_dev->device_id, 2); - + //fb setup sprintf(tmp, "Slot-%x",devices_number); devprop_add_value(device, "AAPL,slot-name", (uint8_t*)tmp, strlen(tmp) + 1); devices_number++; - + sprintf(tmp, ati_compatible_0[1], framebuffer); devprop_add_value(device, (char *) ati_compatible_0[0], (uint8_t *)tmp, strlen(tmp) + 1); - + sprintf(tmp, ati_compatible_1[1], framebuffer); devprop_add_value(device, (char *) ati_compatible_1[0], (uint8_t *)tmp, strlen(tmp) + 1); - + sprintf(tmp, ati_device_type[1], framebuffer); devprop_add_value(device, (char *) ati_device_type[0], (uint8_t *)tmp, strlen(tmp) + 1); - + sprintf(tmp, ati_name[1], framebuffer); devprop_add_value(device, (char *) ati_name[0], (uint8_t *)tmp, strlen(tmp) + 1); - + sprintf(tmp, ati_name_0[1], framebuffer); devprop_add_value(device, (char *) ati_name_0[0], (uint8_t *)tmp, strlen(tmp) + 1); - + sprintf(tmp, ati_name_1[1], framebuffer); devprop_add_value(device, (char *) ati_name_1[0], (uint8_t *)tmp, strlen(tmp) + 1); - + sprintf(tmp, "/Extra/%04x_%04x.rom", (uint16_t)ati_dev->vendor_id, (uint16_t)ati_dev->device_id); if (getBoolForKey(kUseAtiROM, &doit, &bootInfo->bootConfig) && doit) { verbose("looking for ati video bios file %s\n", tmp); @@ -744,14 +744,14 @@ } else { toFree = true; } - + if (bios[0] == 0x55 && bios[1] == 0xaa) { printf("Found bios image\n"); bios_size = bios[2] * 512; - + struct pci_rom_pci_header_t *rom_pci_header; rom_pci_header = (struct pci_rom_pci_header_t*)(bios + bios[24] + bios[25]*256); - + if (rom_pci_header->signature == 0x52494350) { if (rom_pci_header->device != ati_dev->device_id) { verbose("Bios image (%x) doesnt match card (%x), ignoring\n", rom_pci_header->device, ati_dev->device_id); @@ -775,6 +775,6 @@ stringdata = malloc(sizeof(uint8_t) * string->length); memcpy(stringdata, (uint8_t*)devprop_generate_string(string), string->length); stringlength = string->length; - + return true; } Index: branches/meklort/i386/modules/HelloWorld/HelloWorld.c =================================================================== --- branches/meklort/i386/modules/HelloWorld/HelloWorld.c (revision 549) +++ branches/meklort/i386/modules/HelloWorld/HelloWorld.c (revision 550) @@ -17,5 +17,7 @@ { //printf("Hooking 'ExecKernel'\n"); register_hook_callback("ExecKernel", &helloWorld); + register_hook_callback("Kernel Start", &helloWorld); + }