Implement HlHalt() intrinsic routine and add basic definitions for kernel services
All checks were successful
ci/woodpecker/push/build Pipeline was successful
All checks were successful
ci/woodpecker/push/build Pipeline was successful
This commit is contained in:
parent
0572b208f1
commit
9f4db475bb
@ -22,6 +22,10 @@ XTAPI
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
HlCpuId(IN OUT PCPUID_REGISTERS Registers);
|
HlCpuId(IN OUT PCPUID_REGISTERS Registers);
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
VOID
|
||||||
|
HlHalt();
|
||||||
|
|
||||||
XTAPI
|
XTAPI
|
||||||
UCHAR
|
UCHAR
|
||||||
HlIoPortInByte(IN USHORT Port);
|
HlIoPortInByte(IN USHORT Port);
|
||||||
|
22
sdk/xtdk/amd64/ketypes.h
Normal file
22
sdk/xtdk/amd64/ketypes.h
Normal file
@ -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 <belliash@codingworkshop.eu.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#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 */
|
@ -22,6 +22,10 @@ XTAPI
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
HlCpuId(IN OUT PCPUID_REGISTERS Registers);
|
HlCpuId(IN OUT PCPUID_REGISTERS Registers);
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
VOID
|
||||||
|
HlHalt();
|
||||||
|
|
||||||
XTAPI
|
XTAPI
|
||||||
UCHAR
|
UCHAR
|
||||||
HlIoPortInByte(IN USHORT Port);
|
HlIoPortInByte(IN USHORT Port);
|
||||||
|
22
sdk/xtdk/i686/ketypes.h
Normal file
22
sdk/xtdk/i686/ketypes.h
Normal file
@ -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 <belliash@codingworkshop.eu.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#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 */
|
@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
/* Architecture-specific low level data types headers */
|
/* Architecture-specific low level data types headers */
|
||||||
#include ARCH_HEADER(hltypes.h)
|
#include ARCH_HEADER(hltypes.h)
|
||||||
|
#include ARCH_HEADER(ketypes.h)
|
||||||
#include ARCH_HEADER(mmtypes.h)
|
#include ARCH_HEADER(mmtypes.h)
|
||||||
|
|
||||||
/* XT routines */
|
/* XT routines */
|
||||||
|
@ -21,17 +21,11 @@
|
|||||||
#define _ARCH_I686 1
|
#define _ARCH_I686 1
|
||||||
#define _XT32 1
|
#define _XT32 1
|
||||||
#define EFI_ERROR_MASK 0x80000000
|
#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__)
|
#elif defined(__amd64__) || defined(__x86_64__)
|
||||||
#define _ARCH amd64
|
#define _ARCH amd64
|
||||||
#define _ARCH_AMD64 1
|
#define _ARCH_AMD64 1
|
||||||
#define _XT64 1
|
#define _XT64 1
|
||||||
#define EFI_ERROR_MASK 0x8000000000000000
|
#define EFI_ERROR_MASK 0x8000000000000000
|
||||||
#define XTOS_KERNEL_ADDRESS 0xFFFFF80800000000
|
|
||||||
#define XTOS_KERNEL_STACK_SIZE 8
|
|
||||||
#define XTOS_VIRTUAL_MEMORY_AREA 0xFFFFF80000000000
|
|
||||||
#else
|
#else
|
||||||
#error Unknown architecture
|
#error Unknown architecture
|
||||||
#endif
|
#endif
|
||||||
|
@ -91,7 +91,7 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings,
|
|||||||
|
|
||||||
/* Map the stack */
|
/* Map the stack */
|
||||||
BlGetStackPointer(&Stack);
|
BlGetStackPointer(&Stack);
|
||||||
Status = BlAddVirtualMemoryMapping(MemoryMappings, Stack, Stack, XTOS_KERNEL_STACK_SIZE,
|
Status = BlAddVirtualMemoryMapping(MemoryMappings, Stack, Stack, KERNEL_STACK_SIZE,
|
||||||
LoaderOsloaderStack);
|
LoaderOsloaderStack);
|
||||||
if(Status != STATUS_EFI_SUCCESS)
|
if(Status != STATUS_EFI_SUCCESS)
|
||||||
{
|
{
|
||||||
|
@ -101,7 +101,7 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings,
|
|||||||
BlDbgPrint(L"Physical Address Extension (PAE) available\n");
|
BlDbgPrint(L"Physical Address Extension (PAE) available\n");
|
||||||
|
|
||||||
/* Calculate physical address based on KSEG0 base */
|
/* 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 */
|
/* Iterate over all descriptors from memory map to find satisfying address for PDPT */
|
||||||
for(Index = 0; Index < DescriptorCount; Index++)
|
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 */
|
/* 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 */
|
/* Set base page frame number */
|
||||||
Address = 0x100000; // MEM_TOP_DOWN ?
|
Address = 0x100000; // MEM_TOP_DOWN ?
|
||||||
@ -191,7 +191,7 @@ BlEnablePaging(IN PLIST_ENTRY MemoryMappings,
|
|||||||
|
|
||||||
/* Map the stack */
|
/* Map the stack */
|
||||||
BlGetStackPointer(&Stack);
|
BlGetStackPointer(&Stack);
|
||||||
Status = BlAddVirtualMemoryMapping(MemoryMappings, Stack, Stack, XTOS_KERNEL_STACK_SIZE,
|
Status = BlAddVirtualMemoryMapping(MemoryMappings, Stack, Stack, KERNEL_STACK_SIZE,
|
||||||
LoaderOsloaderStack);
|
LoaderOsloaderStack);
|
||||||
if(Status != STATUS_EFI_SUCCESS)
|
if(Status != STATUS_EFI_SUCCESS)
|
||||||
{
|
{
|
||||||
|
@ -361,7 +361,7 @@ BlStartNewStack()
|
|||||||
|
|
||||||
/* Infinite bootloader loop */
|
/* Infinite bootloader loop */
|
||||||
BlEfiPrint(L"System halted!");
|
BlEfiPrint(L"System halted!");
|
||||||
for(;;);
|
HlHalt();
|
||||||
|
|
||||||
/* Return success */
|
/* Return success */
|
||||||
return STATUS_EFI_SUCCESS;
|
return STATUS_EFI_SUCCESS;
|
||||||
@ -437,12 +437,12 @@ BlStartXtLoader(IN EFI_HANDLE ImageHandle,
|
|||||||
BlEnumerateEfiBlockDevices();
|
BlEnumerateEfiBlockDevices();
|
||||||
|
|
||||||
/* Create new bootloader stack */
|
/* Create new bootloader stack */
|
||||||
BlCreateStack(&EfiLoaderStack, XTOS_KERNEL_STACK_SIZE, &BlStartNewStack);
|
BlCreateStack(&EfiLoaderStack, KERNEL_STACK_SIZE, &BlStartNewStack);
|
||||||
|
|
||||||
/* Infinite bootloader loop */
|
/* Infinite bootloader loop */
|
||||||
BlDbgPrint(L"ERROR: Unexpected exception occurred, probably did not create a new stack\n");
|
BlDbgPrint(L"ERROR: Unexpected exception occurred, probably did not create a new stack\n");
|
||||||
BlEfiPrint(L"System halted!");
|
BlEfiPrint(L"System halted!");
|
||||||
for(;;);
|
HlHalt();
|
||||||
|
|
||||||
/* Return success */
|
/* Return success */
|
||||||
return STATUS_EFI_SUCCESS;
|
return STATUS_EFI_SUCCESS;
|
||||||
|
@ -51,6 +51,16 @@ HlCpuId(IN OUT PCPUID_REGISTERS Registers)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
VOID
|
||||||
|
HlHalt()
|
||||||
|
{
|
||||||
|
while(TRUE)
|
||||||
|
{
|
||||||
|
asm volatile("hlt");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads the data from the specified I/O port.
|
* Reads the data from the specified I/O port.
|
||||||
*
|
*
|
||||||
|
@ -51,6 +51,16 @@ HlCpuId(IN OUT PCPUID_REGISTERS Registers)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XTAPI
|
||||||
|
VOID
|
||||||
|
HlHalt()
|
||||||
|
{
|
||||||
|
while(TRUE)
|
||||||
|
{
|
||||||
|
asm volatile("hlt");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads the data from the specified I/O port.
|
* Reads the data from the specified I/O port.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user