diff --git a/sdk/xtdk/amd64/hlfuncs.h b/sdk/xtdk/amd64/hlfuncs.h index e7594d1..4e2ba3e 100644 --- a/sdk/xtdk/amd64/hlfuncs.h +++ b/sdk/xtdk/amd64/hlfuncs.h @@ -22,6 +22,10 @@ XTAPI BOOLEAN HlCpuId(IN OUT PCPUID_REGISTERS Registers); +XTAPI +VOID +HlHalt(); + XTAPI UCHAR HlIoPortInByte(IN USHORT Port); diff --git a/sdk/xtdk/amd64/ketypes.h b/sdk/xtdk/amd64/ketypes.h new file mode 100644 index 0000000..c7391e3 --- /dev/null +++ b/sdk/xtdk/amd64/ketypes.h @@ -0,0 +1,22 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: sdk/xtdk/amd64/ketypes.h + * DESCRIPTION: Kernel services related structures definitions specific to AMD64 architecture + * DEVELOPERS: Rafal Kupiec + */ + +#ifndef __XTDK_AMD64_KETYPES_H +#define __XTDK_AMD64_KETYPES_H + + +/* Static Kernel-Mode Address start */ +#define KSEG0_BASE 0xFFFFF80000000000 + +/* XTOS Kernel address base */ +#define KERNEL_ADDRESS_BASE 0x0000000800000000 + +/* XTOS Kernel stack size */ +#define KERNEL_STACK_SIZE 8 + +#endif /* __XTDK_AMD64_KETYPES_H */ diff --git a/sdk/xtdk/i686/hlfuncs.h b/sdk/xtdk/i686/hlfuncs.h index 35597af..10fbce6 100644 --- a/sdk/xtdk/i686/hlfuncs.h +++ b/sdk/xtdk/i686/hlfuncs.h @@ -22,6 +22,10 @@ XTAPI BOOLEAN HlCpuId(IN OUT PCPUID_REGISTERS Registers); +XTAPI +VOID +HlHalt(); + XTAPI UCHAR HlIoPortInByte(IN USHORT Port); diff --git a/sdk/xtdk/i686/ketypes.h b/sdk/xtdk/i686/ketypes.h new file mode 100644 index 0000000..62c5862 --- /dev/null +++ b/sdk/xtdk/i686/ketypes.h @@ -0,0 +1,22 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: sdk/xtdk/i686/ketypes.h + * DESCRIPTION: Kernel services related structures definitions specific to i686 architecture + * DEVELOPERS: Rafal Kupiec + */ + +#ifndef __XTDK_I686_KETYPES_H +#define __XTDK_I686_KETYPES_H + + +/* Static Kernel-Mode address start */ +#define KSEG0_BASE 0x80000000 + +/* XTOS Kernel address base */ +#define KERNEL_ADDRESS_BASE 0x01800000 + +/* XTOS Kernel stack size */ +#define KERNEL_STACK_SIZE 8 + +#endif /* __XTDK_I686_KETYPES_H */ diff --git a/sdk/xtdk/xtkmapi.h b/sdk/xtdk/xtkmapi.h index 741692f..f9b3c68 100644 --- a/sdk/xtdk/xtkmapi.h +++ b/sdk/xtdk/xtkmapi.h @@ -31,6 +31,7 @@ /* Architecture-specific low level data types headers */ #include ARCH_HEADER(hltypes.h) +#include ARCH_HEADER(ketypes.h) #include ARCH_HEADER(mmtypes.h) /* XT routines */ diff --git a/sdk/xtdk/xttarget.h b/sdk/xtdk/xttarget.h index fedc8d9..b686c43 100644 --- a/sdk/xtdk/xttarget.h +++ b/sdk/xtdk/xttarget.h @@ -21,17 +21,11 @@ #define _ARCH_I686 1 #define _XT32 1 #define EFI_ERROR_MASK 0x80000000 - #define XTOS_KERNEL_ADDRESS 0x81800000 - #define XTOS_KERNEL_STACK_SIZE 8 - #define XTOS_VIRTUAL_MEMORY_AREA 0x80000000 #elif defined(__amd64__) || defined(__x86_64__) #define _ARCH amd64 #define _ARCH_AMD64 1 #define _XT64 1 #define EFI_ERROR_MASK 0x8000000000000000 - #define XTOS_KERNEL_ADDRESS 0xFFFFF80800000000 - #define XTOS_KERNEL_STACK_SIZE 8 - #define XTOS_VIRTUAL_MEMORY_AREA 0xFFFFF80000000000 #else #error Unknown architecture #endif diff --git a/xtldr/amd64/memory.c b/xtldr/amd64/memory.c index 8281e85..7525a56 100644 --- a/xtldr/amd64/memory.c +++ b/xtldr/amd64/memory.c @@ -91,7 +91,7 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings, /* Map the stack */ BlGetStackPointer(&Stack); - Status = BlAddVirtualMemoryMapping(MemoryMappings, Stack, Stack, XTOS_KERNEL_STACK_SIZE, + Status = BlAddVirtualMemoryMapping(MemoryMappings, Stack, Stack, KERNEL_STACK_SIZE, LoaderOsloaderStack); if(Status != STATUS_EFI_SUCCESS) { diff --git a/xtldr/i686/memory.c b/xtldr/i686/memory.c index 85d9794..70fd329 100644 --- a/xtldr/i686/memory.c +++ b/xtldr/i686/memory.c @@ -101,7 +101,7 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings, BlDbgPrint(L"Physical Address Extension (PAE) available\n"); /* Calculate physical address based on KSEG0 base */ - PhysicalAddress = (UINT_PTR)VirtualAddress - XTOS_VIRTUAL_MEMORY_AREA; + PhysicalAddress = (UINT_PTR)VirtualAddress - KSEG0_BASE; /* Iterate over all descriptors from memory map to find satisfying address for PDPT */ for(Index = 0; Index < DescriptorCount; Index++) @@ -142,7 +142,7 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings, } /* Set virtual address based on new PDPT address mapped to KSEG0 base */ - VirtualAddress = (void*)(UINT_PTR)(PDPTAddress + EFI_PAGE_SIZE + XTOS_VIRTUAL_MEMORY_AREA); + VirtualAddress = (void*)(UINT_PTR)(PDPTAddress + EFI_PAGE_SIZE + KSEG0_BASE); /* Set base page frame number */ Address = 0x100000; // MEM_TOP_DOWN ? @@ -191,7 +191,7 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings, /* Map the stack */ BlGetStackPointer(&Stack); - Status = BlAddVirtualMemoryMapping(MemoryMappings, Stack, Stack, XTOS_KERNEL_STACK_SIZE, + Status = BlAddVirtualMemoryMapping(MemoryMappings, Stack, Stack, KERNEL_STACK_SIZE, LoaderOsloaderStack); if(Status != STATUS_EFI_SUCCESS) { diff --git a/xtldr/xtldr.c b/xtldr/xtldr.c index ecccd2f..9a4c323 100644 --- a/xtldr/xtldr.c +++ b/xtldr/xtldr.c @@ -361,7 +361,7 @@ BlStartNewStack() /* Infinite bootloader loop */ BlEfiPrint(L"System halted!"); - for(;;); + HlHalt(); /* Return success */ return STATUS_EFI_SUCCESS; @@ -437,12 +437,12 @@ BlStartXtLoader(IN EFI_HANDLE ImageHandle, BlEnumerateEfiBlockDevices(); /* Create new bootloader stack */ - BlCreateStack(&EfiLoaderStack, XTOS_KERNEL_STACK_SIZE, &BlStartNewStack); + BlCreateStack(&EfiLoaderStack, KERNEL_STACK_SIZE, &BlStartNewStack); /* Infinite bootloader loop */ BlDbgPrint(L"ERROR: Unexpected exception occurred, probably did not create a new stack\n"); BlEfiPrint(L"System halted!"); - for(;;); + HlHalt(); /* Return success */ return STATUS_EFI_SUCCESS; diff --git a/xtoskrnl/hl/amd64/cpufunc.c b/xtoskrnl/hl/amd64/cpufunc.c index 267d0d1..6b02519 100644 --- a/xtoskrnl/hl/amd64/cpufunc.c +++ b/xtoskrnl/hl/amd64/cpufunc.c @@ -51,6 +51,16 @@ HlCpuId(IN OUT PCPUID_REGISTERS Registers) return TRUE; } +XTAPI +VOID +HlHalt() +{ + while(TRUE) + { + asm volatile("hlt"); + } +} + /** * Reads the data from the specified I/O port. * diff --git a/xtoskrnl/hl/i686/cpufunc.c b/xtoskrnl/hl/i686/cpufunc.c index ee4626a..f0ae399 100644 --- a/xtoskrnl/hl/i686/cpufunc.c +++ b/xtoskrnl/hl/i686/cpufunc.c @@ -51,6 +51,16 @@ HlCpuId(IN OUT PCPUID_REGISTERS Registers) return TRUE; } +XTAPI +VOID +HlHalt() +{ + while(TRUE) + { + asm volatile("hlt"); + } +} + /** * Reads the data from the specified I/O port. *