Compare commits
No commits in common. "master" and "master" have entirely different histories.
@ -44,7 +44,7 @@ set(CMAKE_TOOLCHAIN_FILE "sdk/cmake/toolchain.cmake")
|
|||||||
project(EXECTOS)
|
project(EXECTOS)
|
||||||
|
|
||||||
# Load all the CMake SDK
|
# Load all the CMake SDK
|
||||||
include(sdk/cmake/baseaddress/${ARCH}.cmake)
|
include(sdk/cmake/baseaddress.cmake)
|
||||||
include(sdk/cmake/emulation.cmake)
|
include(sdk/cmake/emulation.cmake)
|
||||||
include(sdk/cmake/functions.cmake)
|
include(sdk/cmake/functions.cmake)
|
||||||
include(sdk/cmake/version.cmake)
|
include(sdk/cmake/version.cmake)
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
# Set base addresses for all modules
|
# Set base addresses for all modules
|
||||||
|
set(BASEADDRESS_XTLDR 0x00010000)
|
||||||
set(BASEADDRESS_XTOSKRNL 0x00400000)
|
set(BASEADDRESS_XTOSKRNL 0x00400000)
|
@ -1,2 +0,0 @@
|
|||||||
# Set base addresses for all modules
|
|
||||||
set(BASEADDRESS_XTOSKRNL 0x0000000140000000)
|
|
@ -27,22 +27,22 @@ add_custom_target(bochsvm
|
|||||||
|
|
||||||
# This target starts up a QEMU+OVMF virtual machine using KVM accelerator
|
# This target starts up a QEMU+OVMF virtual machine using KVM accelerator
|
||||||
add_custom_target(testkvm
|
add_custom_target(testkvm
|
||||||
DEPENDS install
|
DEPENDS diskimg
|
||||||
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-KVM" -machine type=q35,kernel_irqchip=on,accel=kvm,mem-merge=off,vmport=off -enable-kvm -cpu host,-hypervisor,+topoext
|
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-KVM" -machine type=q35,kernel_irqchip=on,accel=kvm,mem-merge=off,vmport=off -enable-kvm -cpu host,-hypervisor,+topoext
|
||||||
-smp 2,sockets=1,cores=1,threads=2 -m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
|
-smp 2,sockets=1,cores=1,threads=2 -m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
|
||||||
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_code_${ARCH}.fd,if=pflash,format=raw,unit=0,readonly=on
|
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_code_${ARCH}.fd,if=pflash,format=raw,unit=0,readonly=on
|
||||||
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_vars_${ARCH}.fd,if=pflash,format=raw,unit=1
|
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_vars_${ARCH}.fd,if=pflash,format=raw,unit=1
|
||||||
-hda fat:rw:${EXECTOS_BINARY_DIR}/output/binaries
|
-hda ${EXECTOS_BINARY_DIR}/output/disk.img
|
||||||
-boot menu=on -d int -M smm=off -no-reboot -no-shutdown -serial stdio
|
-boot menu=on -d int -M smm=off -no-reboot -no-shutdown -serial stdio
|
||||||
VERBATIM USES_TERMINAL)
|
VERBATIM USES_TERMINAL)
|
||||||
|
|
||||||
# This target starts up a QEMU+OVMF virtual machine using TCG accelerator
|
# This target starts up a QEMU+OVMF virtual machine using TCG accelerator
|
||||||
add_custom_target(testtcg
|
add_custom_target(testtcg
|
||||||
DEPENDS install
|
DEPENDS diskimg
|
||||||
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-TCG" -machine type=q35,accel=tcg -cpu max,-hypervisor
|
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-TCG" -machine type=q35,accel=tcg -cpu max,-hypervisor
|
||||||
-smp 2,sockets=1,cores=1,threads=2 -m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
|
-smp 2,sockets=1,cores=1,threads=2 -m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
|
||||||
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_code_${ARCH}.fd,if=pflash,format=raw,unit=0,readonly=on
|
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_code_${ARCH}.fd,if=pflash,format=raw,unit=0,readonly=on
|
||||||
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_vars_${ARCH}.fd,if=pflash,format=raw,unit=1
|
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_vars_${ARCH}.fd,if=pflash,format=raw,unit=1
|
||||||
-hda fat:rw:${EXECTOS_BINARY_DIR}/output/binaries
|
-hda ${EXECTOS_BINARY_DIR}/output/disk.img
|
||||||
-boot menu=on -d int -M smm=off -no-reboot -no-shutdown -serial stdio
|
-boot menu=on -d int -M smm=off -no-reboot -no-shutdown -serial stdio
|
||||||
VERBATIM USES_TERMINAL)
|
VERBATIM USES_TERMINAL)
|
||||||
|
@ -11,10 +11,11 @@ endif()
|
|||||||
|
|
||||||
# Set build optimisation
|
# Set build optimisation
|
||||||
if(BUILD_TYPE STREQUAL "DEBUG")
|
if(BUILD_TYPE STREQUAL "DEBUG")
|
||||||
add_compiler_ccxxflags("/GS- /Zi /Ob0 /Od")
|
add_compiler_ccxxflags("/Zi")
|
||||||
|
add_compiler_ccxxflags("-Ob0 -Od")
|
||||||
add_linker_flags("/DEBUG /INCREMENTAL /OPT:NOREF /OPT:NOICF /PDBSOURCEPATH:build")
|
add_linker_flags("/DEBUG /INCREMENTAL /OPT:NOREF /OPT:NOICF /PDBSOURCEPATH:build")
|
||||||
else()
|
else()
|
||||||
add_compiler_ccxxflags("/GS- /Ob2 /Ot /Ox /Oy")
|
add_compiler_ccxxflags("-Ob2 -Oy")
|
||||||
add_linker_flags("/INCREMENTAL:NO /OPT:REF /OPT:ICF")
|
add_linker_flags("/INCREMENTAL:NO /OPT:REF /OPT:ICF")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -43,23 +43,19 @@
|
|||||||
#define APIC_DF_CLUSTER 0x0FFFFFFF
|
#define APIC_DF_CLUSTER 0x0FFFFFFF
|
||||||
|
|
||||||
/* APIC delivery modes */
|
/* APIC delivery modes */
|
||||||
#define APIC_DM_FIXED 0x00000000
|
#define APIC_DM_FIXED 0
|
||||||
#define APIC_DM_LOWPRIO 0x00000100
|
#define APIC_DM_LOWPRIO 1
|
||||||
#define APIC_DM_SMI 0x00000200
|
#define APIC_DM_SMI 2
|
||||||
#define APIC_DM_REMOTE 0x00000300
|
#define APIC_DM_REMOTE 3
|
||||||
#define APIC_DM_NMI 0x00000400
|
#define APIC_DM_NMI 4
|
||||||
#define APIC_DM_INIT 0x00000500
|
#define APIC_DM_INIT 5
|
||||||
#define APIC_DM_STARTUP 0x00000600
|
#define APIC_DM_STARTUP 6
|
||||||
#define APIC_DM_EXTINT 0x00000700
|
#define APIC_DM_EXTINT 7
|
||||||
|
|
||||||
/* APIC trigger modes */
|
/* APIC trigger modes */
|
||||||
#define APIC_TGM_EDGE 0
|
#define APIC_TGM_EDGE 0
|
||||||
#define APIC_TGM_LEVEL 1
|
#define APIC_TGM_LEVEL 1
|
||||||
|
|
||||||
/* APIC LDR (Logical Destination Register) shifts */
|
|
||||||
#define APIC_X2APIC_LDR_SHIFT 16
|
|
||||||
#define APIC_XAPIC_LDR_SHIFT 24
|
|
||||||
|
|
||||||
/* Maximum number of I/O APICs */
|
/* Maximum number of I/O APICs */
|
||||||
#define APIC_MAX_IOAPICS 64
|
#define APIC_MAX_IOAPICS 64
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ typedef EFI_STATUS (*PBL_INVOKE_BOOT_PROTOCOL)(IN PWCHAR ShortName, IN PLIST_ENT
|
|||||||
typedef EFI_STATUS (*PBL_LOCATE_PROTOCOL_HANDLES)(OUT PEFI_HANDLE *Handles, OUT PUINT_PTR Count, IN PEFI_GUID ProtocolGuid);
|
typedef EFI_STATUS (*PBL_LOCATE_PROTOCOL_HANDLES)(OUT PEFI_HANDLE *Handles, OUT PUINT_PTR Count, IN PEFI_GUID ProtocolGuid);
|
||||||
typedef EFI_STATUS (*PBL_LOAD_EFI_IMAGE)(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath, IN PVOID ImageData, IN SIZE_T ImageSize, OUT PEFI_HANDLE ImageHandle);
|
typedef EFI_STATUS (*PBL_LOAD_EFI_IMAGE)(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath, IN PVOID ImageData, IN SIZE_T ImageSize, OUT PEFI_HANDLE ImageHandle);
|
||||||
typedef EFI_STATUS (*PBL_MAP_EFI_MEMORY)(IN OUT PXTBL_PAGE_MAPPING PageMap, IN OUT PVOID *MemoryMapAddress, IN PBL_GET_MEMTYPE_ROUTINE GetMemoryTypeRoutine);
|
typedef EFI_STATUS (*PBL_MAP_EFI_MEMORY)(IN OUT PXTBL_PAGE_MAPPING PageMap, IN OUT PVOID *MemoryMapAddress, IN PBL_GET_MEMTYPE_ROUTINE GetMemoryTypeRoutine);
|
||||||
typedef EFI_STATUS (*PBL_MAP_PAGE)(IN PXTBL_PAGE_MAPPING PageMap, IN ULONG_PTR VirtualAddress, IN ULONG_PTR PhysicalAddress, IN ULONG NumberOfPages);
|
typedef EFI_STATUS (*PBL_MAP_PAGE)(IN PXTBL_PAGE_MAPPING PageMap, IN UINT_PTR VirtualAddress, IN UINT_PTR PhysicalAddress, IN UINT NumberOfPages);
|
||||||
typedef EFI_STATUS (*PBL_MAP_VIRTUAL_MEMORY)(IN OUT PXTBL_PAGE_MAPPING PageMap, IN PVOID VirtualAddress, IN PVOID PhysicalAddress, IN ULONGLONG NumberOfPages, IN LOADER_MEMORY_TYPE MemoryType);
|
typedef EFI_STATUS (*PBL_MAP_VIRTUAL_MEMORY)(IN OUT PXTBL_PAGE_MAPPING PageMap, IN PVOID VirtualAddress, IN PVOID PhysicalAddress, IN ULONGLONG NumberOfPages, IN LOADER_MEMORY_TYPE MemoryType);
|
||||||
typedef EFI_STATUS (*PBL_OPEN_VOLUME)(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath, OUT PEFI_HANDLE DiskHandle, OUT PEFI_FILE_HANDLE *FsHandle);
|
typedef EFI_STATUS (*PBL_OPEN_VOLUME)(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath, OUT PEFI_HANDLE DiskHandle, OUT PEFI_FILE_HANDLE *FsHandle);
|
||||||
typedef EFI_STATUS (*PBL_OPEN_PROTOCOL)(OUT PEFI_HANDLE Handle, OUT PVOID *ProtocolHandler, IN PEFI_GUID ProtocolGuid);
|
typedef EFI_STATUS (*PBL_OPEN_PROTOCOL)(OUT PEFI_HANDLE Handle, OUT PVOID *ProtocolHandler, IN PEFI_GUID ProtocolGuid);
|
||||||
|
@ -187,7 +187,7 @@ typedef struct _GENERIC_ADDRESS
|
|||||||
UCHAR BitOffset;
|
UCHAR BitOffset;
|
||||||
UCHAR Reserved;
|
UCHAR Reserved;
|
||||||
PHYSICAL_ADDRESS Address;
|
PHYSICAL_ADDRESS Address;
|
||||||
} PACKED GENERIC_ADDRESS, *PGENERIC_ADDRESS;
|
} GENERIC_ADDRESS, *PGENERIC_ADDRESS;
|
||||||
|
|
||||||
/* Each ACPI table description header structure */
|
/* Each ACPI table description header structure */
|
||||||
typedef struct _ACPI_DESCRIPTION_HEADER
|
typedef struct _ACPI_DESCRIPTION_HEADER
|
||||||
@ -201,14 +201,14 @@ typedef struct _ACPI_DESCRIPTION_HEADER
|
|||||||
ULONG OemRevision;
|
ULONG OemRevision;
|
||||||
UCHAR CreatorID[4];
|
UCHAR CreatorID[4];
|
||||||
ULONG CreatorRev;
|
ULONG CreatorRev;
|
||||||
} PACKED ACPI_DESCRIPTION_HEADER, *PACPI_DESCRIPTION_HEADER;
|
} ACPI_DESCRIPTION_HEADER, *PACPI_DESCRIPTION_HEADER;
|
||||||
|
|
||||||
/* Each ACPI subtable description header structure */
|
/* Each ACPI subtable description header structure */
|
||||||
typedef struct _ACPI_SUBTABLE_HEADER
|
typedef struct _ACPI_SUBTABLE_HEADER
|
||||||
{
|
{
|
||||||
UCHAR Type;
|
UCHAR Type;
|
||||||
UCHAR Length;
|
UCHAR Length;
|
||||||
} PACKED ACPI_SUBTABLE_HEADER, *PACPI_SUBTABLE_HEADER;
|
} ACPI_SUBTABLE_HEADER, *PACPI_SUBTABLE_HEADER;
|
||||||
|
|
||||||
/* ACPI cache list structure */
|
/* ACPI cache list structure */
|
||||||
typedef struct _ACPI_CACHE_LIST
|
typedef struct _ACPI_CACHE_LIST
|
||||||
@ -229,14 +229,14 @@ typedef struct _ACPI_RSDP
|
|||||||
ULONGLONG XsdtAddress;
|
ULONGLONG XsdtAddress;
|
||||||
UCHAR XChecksum;
|
UCHAR XChecksum;
|
||||||
UCHAR Reserved[3];
|
UCHAR Reserved[3];
|
||||||
} PACKED ACPI_RSDP, *PACPI_RSDP;
|
} ACPI_RSDP, *PACPI_RSDP;
|
||||||
|
|
||||||
/* ACPI Root System Description Table (RSDT) structure */
|
/* ACPI Root System Description Table (RSDT) structure */
|
||||||
typedef struct _ACPI_RSDT
|
typedef struct _ACPI_RSDT
|
||||||
{
|
{
|
||||||
ACPI_DESCRIPTION_HEADER Header;
|
ACPI_DESCRIPTION_HEADER Header;
|
||||||
ULONG Tables[];
|
ULONG Tables[];
|
||||||
} PACKED ACPI_RSDT, *PACPI_RSDT;
|
} ACPI_RSDT, *PACPI_RSDT;
|
||||||
|
|
||||||
/* ACPI eXtended Root System Description Table (XSDT) structure */
|
/* ACPI eXtended Root System Description Table (XSDT) structure */
|
||||||
typedef struct _ACPI_XSDT
|
typedef struct _ACPI_XSDT
|
||||||
@ -303,7 +303,7 @@ typedef struct _ACPI_FADT
|
|||||||
GENERIC_ADDRESS XGp1Blk;
|
GENERIC_ADDRESS XGp1Blk;
|
||||||
GENERIC_ADDRESS SleepControlReg;
|
GENERIC_ADDRESS SleepControlReg;
|
||||||
GENERIC_ADDRESS SleepStatusReg;
|
GENERIC_ADDRESS SleepStatusReg;
|
||||||
} PACKED ACPI_FADT, *PACPI_FADT;
|
} ACPI_FADT, *PACPI_FADT;
|
||||||
|
|
||||||
/* ACPI Multiple APIC Description Table (MADT) structure */
|
/* ACPI Multiple APIC Description Table (MADT) structure */
|
||||||
typedef struct _ACPI_MADT
|
typedef struct _ACPI_MADT
|
||||||
@ -312,26 +312,26 @@ typedef struct _ACPI_MADT
|
|||||||
ULONG LocalApicAddress;
|
ULONG LocalApicAddress;
|
||||||
ULONG Flags;
|
ULONG Flags;
|
||||||
ULONG ApicTables[];
|
ULONG ApicTables[];
|
||||||
} PACKED ACPI_MADT, *PACPI_MADT;
|
} ACPI_MADT, *PACPI_MADT;
|
||||||
|
|
||||||
/* ACPI Local APIC MADT subtable structure */
|
/* ACPI Local APIC MADT subtable structure */
|
||||||
typedef struct _ACPI_MADT_LOCAL_APIC
|
typedef struct _ACPI_MADT_LOCAL_APIC
|
||||||
{
|
{
|
||||||
ACPI_SUBTABLE_HEADER Header;
|
ACPI_SUBTABLE_HEADER Header;
|
||||||
UCHAR AcpiId;
|
UCHAR ProcessorId;
|
||||||
UCHAR ApicId;
|
UCHAR Id;
|
||||||
ULONG Flags;
|
ULONG LapicFlags;
|
||||||
} PACKED ACPI_MADT_LOCAL_APIC, *PACPI_MADT_LOCAL_APIC;
|
} ACPI_MADT_LOCAL_APIC, *PACPI_MADT_LOCAL_APIC;
|
||||||
|
|
||||||
/* ACPI Local X2APIC MADT subtable structure */
|
/* ACPI Local X2APIC MADT subtable structure */
|
||||||
typedef struct _ACPI_MADT_LOCAL_X2APIC
|
typedef struct _ACPI_MADT_LOCAL_X2APIC
|
||||||
{
|
{
|
||||||
ACPI_SUBTABLE_HEADER Header;
|
ACPI_SUBTABLE_HEADER Header;
|
||||||
USHORT Reserved;
|
USHORT Reserved;
|
||||||
ULONG ApicId;
|
ULONG Id;
|
||||||
ULONG Flags;
|
ULONG LapicFlags;
|
||||||
ULONG AcpiId;
|
ULONG ProcessorId;
|
||||||
} PACKED ACPI_MADT_LOCAL_X2APIC, *PACPI_MADT_LOCAL_X2APIC;
|
} ACPI_MADT_LOCAL_X2APIC, *PACPI_MADT_LOCAL_X2APIC;
|
||||||
|
|
||||||
/* ACPI System Information structure */
|
/* ACPI System Information structure */
|
||||||
typedef struct _ACPI_SYSTEM_INFO
|
typedef struct _ACPI_SYSTEM_INFO
|
||||||
@ -342,12 +342,12 @@ typedef struct _ACPI_SYSTEM_INFO
|
|||||||
ULONG IoApicCount;
|
ULONG IoApicCount;
|
||||||
ULONG IntiCount;
|
ULONG IntiCount;
|
||||||
ULONG LintiCount;
|
ULONG LintiCount;
|
||||||
BOOLEAN ImcrPresent;
|
ULONG ImcrPresent;
|
||||||
ULONG ApicBase;
|
ULONG ApicBase;
|
||||||
PPROCESSOR_IDENTITY CpuInfo;
|
PPROCESSOR_IDENTITY CpuInfo;
|
||||||
ULONG IoApicPhysicalBase[APIC_MAX_IOAPICS];
|
ULONG IoApicPhysicalBase[APIC_MAX_IOAPICS];
|
||||||
ULONG IoApicVirtualBase[APIC_MAX_IOAPICS];
|
PULONG IoApicVirtualBase[APIC_MAX_IOAPICS];
|
||||||
ULONG IoApicVectorBase[APIC_MAX_IOAPICS];
|
ULONG IoApicIntiBase[APIC_MAX_IOAPICS];
|
||||||
} ACPI_SYSTEM_INFO, *PACPI_SYSTEM_INFO;
|
} ACPI_SYSTEM_INFO, *PACPI_SYSTEM_INFO;
|
||||||
|
|
||||||
/* ACPI Timer information structure */
|
/* ACPI Timer information structure */
|
||||||
@ -393,9 +393,9 @@ typedef struct _HAL_FRAMEBUFFER_DATA
|
|||||||
/* Processor identity structure */
|
/* Processor identity structure */
|
||||||
typedef struct _PROCESSOR_IDENTITY
|
typedef struct _PROCESSOR_IDENTITY
|
||||||
{
|
{
|
||||||
ULONG AcpiId;
|
UCHAR Id;
|
||||||
ULONG ApicId;
|
UCHAR CpuId;
|
||||||
USHORT CpuNumber;
|
UCHAR CpuNumber;
|
||||||
BOOLEAN Bsp;
|
BOOLEAN Bsp;
|
||||||
BOOLEAN Started;
|
BOOLEAN Started;
|
||||||
} PROCESSOR_IDENTITY, *PPROCESSOR_IDENTITY;
|
} PROCESSOR_IDENTITY, *PPROCESSOR_IDENTITY;
|
||||||
|
@ -48,23 +48,19 @@
|
|||||||
#define APIC_DF_CLUSTER 0x0FFFFFFF
|
#define APIC_DF_CLUSTER 0x0FFFFFFF
|
||||||
|
|
||||||
/* APIC delivery modes */
|
/* APIC delivery modes */
|
||||||
#define APIC_DM_FIXED 0x00000000
|
#define APIC_DM_FIXED 0
|
||||||
#define APIC_DM_LOWPRIO 0x00000100
|
#define APIC_DM_LOWPRIO 1
|
||||||
#define APIC_DM_SMI 0x00000200
|
#define APIC_DM_SMI 2
|
||||||
#define APIC_DM_REMOTE 0x00000300
|
#define APIC_DM_REMOTE 3
|
||||||
#define APIC_DM_NMI 0x00000400
|
#define APIC_DM_NMI 4
|
||||||
#define APIC_DM_INIT 0x00000500
|
#define APIC_DM_INIT 5
|
||||||
#define APIC_DM_STARTUP 0x00000600
|
#define APIC_DM_STARTUP 6
|
||||||
#define APIC_DM_EXTINT 0x00000700
|
#define APIC_DM_EXTINT 7
|
||||||
|
|
||||||
/* APIC trigger modes */
|
/* APIC trigger modes */
|
||||||
#define APIC_TGM_EDGE 0
|
#define APIC_TGM_EDGE 0
|
||||||
#define APIC_TGM_LEVEL 1
|
#define APIC_TGM_LEVEL 1
|
||||||
|
|
||||||
/* APIC LDR (Logical Destination Register) shifts */
|
|
||||||
#define APIC_X2APIC_LDR_SHIFT 16
|
|
||||||
#define APIC_XAPIC_LDR_SHIFT 24
|
|
||||||
|
|
||||||
/* Maximum number of I/O APICs */
|
/* Maximum number of I/O APICs */
|
||||||
#define APIC_MAX_IOAPICS 64
|
#define APIC_MAX_IOAPICS 64
|
||||||
|
|
||||||
|
@ -95,8 +95,7 @@
|
|||||||
#define SIGNATURE32(A, B, C, D) (SIGNATURE16(A, B) | (SIGNATURE16(C, D) << 16))
|
#define SIGNATURE32(A, B, C, D) (SIGNATURE16(A, B) | (SIGNATURE16(C, D) << 16))
|
||||||
#define SIGNATURE64(A, B, C, D, E, F, G, H) (SIGNATURE32(A, B, C, D) | ((UINT64)(SIGNATURE32(E, F, G, H)) << 32))
|
#define SIGNATURE64(A, B, C, D, E, F, G, H) (SIGNATURE32(A, B, C, D) | ((UINT64)(SIGNATURE32(E, F, G, H)) << 32))
|
||||||
|
|
||||||
/* XT size <-> pages conversion macro */
|
/* XT size to pages conversion macro */
|
||||||
#define PAGES_TO_SIZE(Pages) ((Pages) << MM_PAGE_SHIFT)
|
|
||||||
#define SIZE_TO_PAGES(Size) (((Size) >> MM_PAGE_SHIFT) + (((Size) & (MM_PAGE_MASK)) ? 1 : 0))
|
#define SIZE_TO_PAGES(Size) (((Size) >> MM_PAGE_SHIFT) + (((Size) & (MM_PAGE_MASK)) ? 1 : 0))
|
||||||
|
|
||||||
/* Macros for concatenating strings */
|
/* Macros for concatenating strings */
|
||||||
|
@ -49,5 +49,6 @@ set_install_target(xtldr efi/boot)
|
|||||||
|
|
||||||
# Set loader entrypoint and subsystem
|
# Set loader entrypoint and subsystem
|
||||||
set_entrypoint(xtldr "BlStartXtLoader")
|
set_entrypoint(xtldr "BlStartXtLoader")
|
||||||
|
set_imagebase(xtldr ${BASEADDRESS_XTLDR})
|
||||||
set_linker_map(xtldr TRUE)
|
set_linker_map(xtldr TRUE)
|
||||||
set_subsystem(xtldr efi_application)
|
set_subsystem(xtldr efi_application)
|
||||||
|
@ -149,9 +149,9 @@ BlBuildPageMap(IN PXTBL_PAGE_MAPPING PageMap,
|
|||||||
XTCDECL
|
XTCDECL
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
BlMapPage(IN PXTBL_PAGE_MAPPING PageMap,
|
BlMapPage(IN PXTBL_PAGE_MAPPING PageMap,
|
||||||
IN ULONG_PTR VirtualAddress,
|
IN UINT_PTR VirtualAddress,
|
||||||
IN ULONG_PTR PhysicalAddress,
|
IN UINT_PTR PhysicalAddress,
|
||||||
IN ULONG NumberOfPages)
|
IN UINT NumberOfPages)
|
||||||
{
|
{
|
||||||
SIZE_T Pml1Entry, Pml2Entry, Pml3Entry, Pml4Entry, Pml5Entry;
|
SIZE_T Pml1Entry, Pml2Entry, Pml3Entry, Pml4Entry, Pml5Entry;
|
||||||
PHARDWARE_PTE Pml1, Pml2, Pml3, Pml4, Pml5;
|
PHARDWARE_PTE Pml1, Pml2, Pml3, Pml4, Pml5;
|
||||||
|
@ -169,9 +169,9 @@ BlBuildPageMap(IN PXTBL_PAGE_MAPPING PageMap,
|
|||||||
XTCDECL
|
XTCDECL
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
BlMapPage(IN PXTBL_PAGE_MAPPING PageMap,
|
BlMapPage(IN PXTBL_PAGE_MAPPING PageMap,
|
||||||
IN ULONG_PTR VirtualAddress,
|
IN UINT_PTR VirtualAddress,
|
||||||
IN ULONG_PTR PhysicalAddress,
|
IN UINT_PTR PhysicalAddress,
|
||||||
IN ULONG NumberOfPages)
|
IN UINT NumberOfPages)
|
||||||
{
|
{
|
||||||
SIZE_T Pml1Entry, Pml2Entry, Pml3Entry;
|
SIZE_T Pml1Entry, Pml2Entry, Pml3Entry;
|
||||||
PHARDWARE_PTE Pml1, Pml2, Pml3;
|
PHARDWARE_PTE Pml1, Pml2, Pml3;
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
/* XTLDR routines forward references */
|
/* XTLDR routines forward references */
|
||||||
XTCDECL
|
XTCDECL
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
BlAllocateMemoryPages(IN ULONGLONG NumberOfPages,
|
BlAllocateMemoryPages(IN ULONGLONG Pages,
|
||||||
OUT PEFI_PHYSICAL_ADDRESS Memory);
|
OUT PEFI_PHYSICAL_ADDRESS Memory);
|
||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
@ -121,7 +121,7 @@ BlFindVolumeDevicePath(IN PEFI_DEVICE_PATH_PROTOCOL FsHandle,
|
|||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
BlFreeMemoryPages(IN ULONGLONG NumberOfPages,
|
BlFreeMemoryPages(IN ULONGLONG Pages,
|
||||||
IN EFI_PHYSICAL_ADDRESS Memory);
|
IN EFI_PHYSICAL_ADDRESS Memory);
|
||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
@ -249,9 +249,9 @@ BlMapEfiMemory(IN OUT PXTBL_PAGE_MAPPING PageMap,
|
|||||||
XTCDECL
|
XTCDECL
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
BlMapPage(IN PXTBL_PAGE_MAPPING PageMap,
|
BlMapPage(IN PXTBL_PAGE_MAPPING PageMap,
|
||||||
IN ULONG_PTR VirtualAddress,
|
IN UINT_PTR VirtualAddress,
|
||||||
IN ULONG_PTR PhysicalAddress,
|
IN UINT_PTR PhysicalAddress,
|
||||||
IN ULONG NumberOfPages);
|
IN UINT NumberOfPages);
|
||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
/**
|
/**
|
||||||
* This routine allocates one or more 4KB pages.
|
* This routine allocates one or more 4KB pages.
|
||||||
*
|
*
|
||||||
* @param NumberOfPages
|
* @param Pages
|
||||||
* The number of contiguous 4KB pages to allocate.
|
* The number of contiguous 4KB pages to allocate.
|
||||||
*
|
*
|
||||||
* @param Memory
|
* @param Memory
|
||||||
@ -24,10 +24,10 @@
|
|||||||
*/
|
*/
|
||||||
XTCDECL
|
XTCDECL
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
BlAllocateMemoryPages(IN ULONGLONG NumberOfPages,
|
BlAllocateMemoryPages(IN ULONGLONG Pages,
|
||||||
OUT PEFI_PHYSICAL_ADDRESS Memory)
|
OUT PEFI_PHYSICAL_ADDRESS Memory)
|
||||||
{
|
{
|
||||||
return EfiSystemTable->BootServices->AllocatePages(AllocateAnyPages, EfiLoaderData, NumberOfPages, Memory);
|
return EfiSystemTable->BootServices->AllocatePages(AllocateAnyPages, EfiLoaderData, Pages, Memory);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -55,7 +55,7 @@ BlAllocateMemoryPool(IN UINT_PTR Size,
|
|||||||
/**
|
/**
|
||||||
* This routine frees memory pages.
|
* This routine frees memory pages.
|
||||||
*
|
*
|
||||||
* @param NumberOfPages
|
* @param Pages
|
||||||
* The number of contiguous 4 KB pages to free.
|
* The number of contiguous 4 KB pages to free.
|
||||||
*
|
*
|
||||||
* @param Memory
|
* @param Memory
|
||||||
@ -67,10 +67,10 @@ BlAllocateMemoryPool(IN UINT_PTR Size,
|
|||||||
*/
|
*/
|
||||||
XTCDECL
|
XTCDECL
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
BlFreeMemoryPages(IN ULONGLONG NumberOfPages,
|
BlFreeMemoryPages(IN ULONGLONG Pages,
|
||||||
IN EFI_PHYSICAL_ADDRESS Memory)
|
IN EFI_PHYSICAL_ADDRESS Memory)
|
||||||
{
|
{
|
||||||
return EfiSystemTable->BootServices->FreePages(Memory, NumberOfPages);
|
return EfiSystemTable->BootServices->FreePages(Memory, Pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -9,7 +9,7 @@ This is a list of them:
|
|||||||
|
|
||||||
* Ar - Architecture library
|
* Ar - Architecture library
|
||||||
* Ex - Kernel Executive
|
* Ex - Kernel Executive
|
||||||
* Hl - Hardware Layer
|
* Hl - Hardware Abstraction Layer (HAL)
|
||||||
* Ke - Core kernel library
|
* Ke - Core kernel library
|
||||||
* Mm - Memory manager
|
* Mm - Memory manager
|
||||||
* Po - Plug&Play and Power Manager
|
* Po - Plug&Play and Power Manager
|
||||||
@ -26,10 +26,10 @@ The kernel executive supplies heap management, including support for allocating
|
|||||||
pools, as well as synchronization primitives like push locks and fast mutexes, interlocked memory access, and worker
|
pools, as well as synchronization primitives like push locks and fast mutexes, interlocked memory access, and worker
|
||||||
threads.
|
threads.
|
||||||
|
|
||||||
### HL: Hardware Layer
|
### HL: Hardware Abstraction Layer
|
||||||
Hardware Layer, is a layer between the physical hardware of the computer and the rest of the operating system. It was
|
Hardware Abstraction Layer (HAL), is a layer between the physical hardware of the computer and the rest of the operating
|
||||||
designed to hide differences in hardware and therefore it provides a consistent platform on which the system and
|
system. It was designed to hide differences in hardware and therefore it provides a consistent platform on which
|
||||||
applications may run.
|
the system and applications may run.
|
||||||
|
|
||||||
### KE: Kernel Library
|
### KE: Kernel Library
|
||||||
The kernel implements its core functionality that everything else in the system depends upon. This includes basic
|
The kernel implements its core functionality that everything else in the system depends upon. This includes basic
|
||||||
|
@ -265,112 +265,15 @@ XTAPI
|
|||||||
XTSTATUS
|
XTSTATUS
|
||||||
HlpInitializeAcpiSystemInformation(VOID)
|
HlpInitializeAcpiSystemInformation(VOID)
|
||||||
{
|
{
|
||||||
PACPI_MADT_LOCAL_X2APIC LocalX2Apic;
|
PUCHAR MadtTable;
|
||||||
PACPI_MADT_LOCAL_APIC LocalApic;
|
|
||||||
ULONG_PTR MadtTable;
|
|
||||||
PACPI_MADT Madt;
|
|
||||||
XTSTATUS Status;
|
|
||||||
USHORT CpuCount;
|
|
||||||
|
|
||||||
/* Allocate memory for ACPI system information structure */
|
|
||||||
Status = HlpInitializeAcpiSystemStructure();
|
|
||||||
if(Status != STATUS_SUCCESS)
|
|
||||||
{
|
|
||||||
/* Failed to allocate memory, return error */
|
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get Multiple APIC Description Table (MADT) */
|
|
||||||
Status = HlGetAcpiTable(ACPI_MADT_SIGNATURE, (PACPI_DESCRIPTION_HEADER*)&Madt);
|
|
||||||
if(Status != STATUS_SUCCESS)
|
|
||||||
{
|
|
||||||
/* Failed to get MADT, return error */
|
|
||||||
return STATUS_NOT_FOUND;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set APIC table traverse pointer and initialize number of CPUs */
|
|
||||||
MadtTable = (ULONG_PTR)Madt->ApicTables;
|
|
||||||
CpuCount = 0;
|
|
||||||
|
|
||||||
/* Traverse all MADT tables to get system information */
|
|
||||||
while(MadtTable <= ((ULONG_PTR)Madt + Madt->Header.Length))
|
|
||||||
{
|
|
||||||
/* Check if this is a local APIC subtable */
|
|
||||||
if((((PACPI_SUBTABLE_HEADER)MadtTable)->Type == ACPI_MADT_TYPE_LOCAL_APIC) &&
|
|
||||||
(((PACPI_SUBTABLE_HEADER)MadtTable)->Length == sizeof(ACPI_MADT_LOCAL_APIC)))
|
|
||||||
{
|
|
||||||
/* Get local APIC subtable */
|
|
||||||
LocalApic = (PACPI_MADT_LOCAL_APIC)MadtTable;
|
|
||||||
|
|
||||||
/* Make sure, this CPU can be enabled */
|
|
||||||
if(LocalApic->Flags & ACPI_MADT_PLAOC_ENABLED)
|
|
||||||
{
|
|
||||||
/* Store CPU number, APIC ID and CPU ID */
|
|
||||||
HlpSystemInfo.CpuInfo[CpuCount].AcpiId = LocalApic->AcpiId;
|
|
||||||
HlpSystemInfo.CpuInfo[CpuCount].ApicId = LocalApic->ApicId;
|
|
||||||
HlpSystemInfo.CpuInfo[CpuCount].CpuNumber = CpuCount;
|
|
||||||
|
|
||||||
/* Increment number of CPUs */
|
|
||||||
CpuCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Go to the next MADT table */
|
|
||||||
MadtTable += ((PACPI_SUBTABLE_HEADER)MadtTable)->Length;
|
|
||||||
}
|
|
||||||
else if((((PACPI_SUBTABLE_HEADER)MadtTable)->Type == ACPI_MADT_TYPE_LOCAL_X2APIC) &&
|
|
||||||
(((PACPI_SUBTABLE_HEADER)MadtTable)->Length == sizeof(ACPI_MADT_LOCAL_X2APIC)))
|
|
||||||
{
|
|
||||||
/* Get local X2APIC subtable */
|
|
||||||
LocalX2Apic = (PACPI_MADT_LOCAL_X2APIC)MadtTable;
|
|
||||||
|
|
||||||
/* Make sure, this CPU can be enabled */
|
|
||||||
if(LocalX2Apic->Flags & ACPI_MADT_PLAOC_ENABLED)
|
|
||||||
{
|
|
||||||
/* Store CPU number, APIC ID and CPU ID */
|
|
||||||
HlpSystemInfo.CpuInfo[CpuCount].AcpiId = LocalX2Apic->AcpiId;
|
|
||||||
HlpSystemInfo.CpuInfo[CpuCount].ApicId = LocalX2Apic->ApicId;
|
|
||||||
HlpSystemInfo.CpuInfo[CpuCount].CpuNumber = CpuCount;
|
|
||||||
|
|
||||||
/* Increment number of CPUs */
|
|
||||||
CpuCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Go to the next MADT table */
|
|
||||||
MadtTable += ((PACPI_SUBTABLE_HEADER)MadtTable)->Length;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Any other MADT table, try to go to the next one byte-by-byte */
|
|
||||||
MadtTable += 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Store number of CPUs */
|
|
||||||
HlpSystemInfo.CpuCount = CpuCount;
|
|
||||||
|
|
||||||
/* Return success */
|
|
||||||
return STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initializes ACPI System Information data structure based on the size of available ACPI data.
|
|
||||||
*
|
|
||||||
* @return This routine returns a status code.
|
|
||||||
*
|
|
||||||
* @since XT 1.0
|
|
||||||
*/
|
|
||||||
XTAPI
|
|
||||||
XTSTATUS
|
|
||||||
HlpInitializeAcpiSystemStructure(VOID)
|
|
||||||
{
|
|
||||||
PHYSICAL_ADDRESS PhysicalAddress;
|
|
||||||
PFN_NUMBER PageCount;
|
|
||||||
ULONG_PTR MadtTable;
|
|
||||||
PACPI_MADT Madt;
|
PACPI_MADT Madt;
|
||||||
XTSTATUS Status;
|
XTSTATUS Status;
|
||||||
ULONG CpuCount;
|
ULONG CpuCount;
|
||||||
|
|
||||||
/* Get Multiple APIC Description Table (MADT) */
|
/* Zero the ACPI system information structure */
|
||||||
|
RtlZeroMemory(&HlpAcpiSystemInfo, sizeof(ACPI_SYSTEM_INFO));
|
||||||
|
|
||||||
|
/* Get Multi-APIC Description Table (MADT) */
|
||||||
Status = HlGetAcpiTable(ACPI_MADT_SIGNATURE, (PACPI_DESCRIPTION_HEADER*)&Madt);
|
Status = HlGetAcpiTable(ACPI_MADT_SIGNATURE, (PACPI_DESCRIPTION_HEADER*)&Madt);
|
||||||
if(Status != STATUS_SUCCESS)
|
if(Status != STATUS_SUCCESS)
|
||||||
{
|
{
|
||||||
@ -379,38 +282,38 @@ HlpInitializeAcpiSystemStructure(VOID)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Set APIC table traverse pointer and initialize number of CPUs */
|
/* Set APIC table traverse pointer and initialize number of CPUs */
|
||||||
MadtTable = (ULONG_PTR)Madt->ApicTables;
|
MadtTable = (PUCHAR)Madt->ApicTables;
|
||||||
CpuCount = 0;
|
CpuCount = 0;
|
||||||
|
|
||||||
/* Traverse all MADT tables to get number of processors */
|
/* Traverse all MADT tables to get number of processors */
|
||||||
while(MadtTable <= ((ULONG_PTR)Madt + Madt->Header.Length))
|
while(MadtTable <= ((PUCHAR)Madt + Madt->Header.Length))
|
||||||
{
|
{
|
||||||
/* Check if this is a local APIC subtable */
|
/* Check if this is a local APIC subtable */
|
||||||
if((((PACPI_SUBTABLE_HEADER)MadtTable)->Type == ACPI_MADT_TYPE_LOCAL_APIC) &&
|
if((((PACPI_MADT_LOCAL_APIC)MadtTable)->Header.Type == ACPI_MADT_TYPE_LOCAL_APIC) &&
|
||||||
(((PACPI_SUBTABLE_HEADER)MadtTable)->Length == sizeof(ACPI_MADT_LOCAL_APIC)))
|
(((PACPI_MADT_LOCAL_APIC)MadtTable)->Header.Length == sizeof(ACPI_MADT_LOCAL_APIC)))
|
||||||
{
|
{
|
||||||
/* Make sure, this CPU can be enabled */
|
/* Make sure, this CPU can be enabled */
|
||||||
if(((PACPI_MADT_LOCAL_APIC)MadtTable)->Flags & ACPI_MADT_PLAOC_ENABLED)
|
if(((PACPI_MADT_LOCAL_APIC)MadtTable)->LapicFlags & ACPI_MADT_PLAOC_ENABLED)
|
||||||
{
|
{
|
||||||
/* Increment number of CPUs */
|
/* Increment number of CPUs */
|
||||||
CpuCount++;
|
CpuCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Go to the next MADT table */
|
/* Go to the next MADT table */
|
||||||
MadtTable += ((PACPI_SUBTABLE_HEADER)MadtTable)->Length;
|
MadtTable += ((PACPI_MADT_LOCAL_APIC)MadtTable)->Header.Length;
|
||||||
}
|
}
|
||||||
else if((((PACPI_SUBTABLE_HEADER)MadtTable)->Type == ACPI_MADT_TYPE_LOCAL_X2APIC) &&
|
else if((((PACPI_MADT_LOCAL_X2APIC)MadtTable)->Header.Type == ACPI_MADT_TYPE_LOCAL_X2APIC) &&
|
||||||
(((PACPI_SUBTABLE_HEADER)MadtTable)->Length == sizeof(ACPI_MADT_LOCAL_X2APIC)))
|
(((PACPI_MADT_LOCAL_X2APIC)MadtTable)->Header.Length == sizeof(ACPI_MADT_LOCAL_X2APIC)))
|
||||||
{
|
{
|
||||||
/* Make sure, this CPU can be enabled */
|
/* Make sure, this CPU can be enabled */
|
||||||
if(((PACPI_MADT_LOCAL_X2APIC)MadtTable)->Flags & ACPI_MADT_PLAOC_ENABLED)
|
if(((PACPI_MADT_LOCAL_X2APIC)MadtTable)->LapicFlags & ACPI_MADT_PLAOC_ENABLED)
|
||||||
{
|
{
|
||||||
/* Increment number of CPUs */
|
/* Increment number of CPUs */
|
||||||
CpuCount++;
|
CpuCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Go to the next MADT table */
|
/* Go to the next MADT table */
|
||||||
MadtTable += ((PACPI_SUBTABLE_HEADER)MadtTable)->Length;
|
MadtTable += ((PACPI_MADT_LOCAL_X2APIC)MadtTable)->Header.Length;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -419,31 +322,6 @@ HlpInitializeAcpiSystemStructure(VOID)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Zero the ACPI system information structure */
|
|
||||||
RtlZeroMemory(&HlpSystemInfo, sizeof(ACPI_SYSTEM_INFO));
|
|
||||||
|
|
||||||
/* Calculate number of pages needed to store CPU information */
|
|
||||||
PageCount = SIZE_TO_PAGES(CpuCount * sizeof(PROCESSOR_IDENTITY));
|
|
||||||
|
|
||||||
/* Allocate memory for CPU information */
|
|
||||||
Status = MmAllocateHardwareMemory(PageCount, TRUE, &PhysicalAddress);
|
|
||||||
if(Status != STATUS_SUCCESS)
|
|
||||||
{
|
|
||||||
/* Failed to allocate memory, return error */
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Map physical address to the virtual memory area */
|
|
||||||
Status = MmMapHardwareMemory(PhysicalAddress, PageCount, TRUE, (PVOID *)&HlpSystemInfo.CpuInfo);
|
|
||||||
if(Status != STATUS_SUCCESS)
|
|
||||||
{
|
|
||||||
/* Failed to map memory, return error */
|
|
||||||
return Status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Zero the CPU information structure */
|
|
||||||
RtlZeroMemory(HlpSystemInfo.CpuInfo, PAGES_TO_SIZE(PageCount));
|
|
||||||
|
|
||||||
/* Return success */
|
/* Return success */
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -507,13 +385,9 @@ XTSTATUS
|
|||||||
HlpQueryAcpiCache(IN ULONG Signature,
|
HlpQueryAcpiCache(IN ULONG Signature,
|
||||||
OUT PACPI_DESCRIPTION_HEADER *AcpiTable)
|
OUT PACPI_DESCRIPTION_HEADER *AcpiTable)
|
||||||
{
|
{
|
||||||
PACPI_DESCRIPTION_HEADER TableHeader;
|
|
||||||
PACPI_CACHE_LIST AcpiCache;
|
PACPI_CACHE_LIST AcpiCache;
|
||||||
PLIST_ENTRY ListEntry;
|
PLIST_ENTRY ListEntry;
|
||||||
|
|
||||||
/* Initialize variables */
|
|
||||||
TableHeader = NULL;
|
|
||||||
|
|
||||||
/* Iterate through ACPI tables cache list */
|
/* Iterate through ACPI tables cache list */
|
||||||
ListEntry = HlpAcpiCacheList.Flink;
|
ListEntry = HlpAcpiCacheList.Flink;
|
||||||
while(ListEntry != &HlpAcpiCacheList)
|
while(ListEntry != &HlpAcpiCacheList)
|
||||||
@ -525,7 +399,7 @@ HlpQueryAcpiCache(IN ULONG Signature,
|
|||||||
if(AcpiCache->Header.Signature == Signature)
|
if(AcpiCache->Header.Signature == Signature)
|
||||||
{
|
{
|
||||||
/* ACPI table found in cache, return it */
|
/* ACPI table found in cache, return it */
|
||||||
TableHeader = &AcpiCache->Header;
|
*AcpiTable = &AcpiCache->Header;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -534,14 +408,13 @@ HlpQueryAcpiCache(IN ULONG Signature,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check if the requested ACPI table was found in the cache */
|
/* Check if the requested ACPI table was found in the cache */
|
||||||
if(TableHeader == NULL)
|
if(*AcpiTable == NULL)
|
||||||
{
|
{
|
||||||
/* ACPI table not found in cache, return error */
|
/* ACPI table not found in cache, return error */
|
||||||
return STATUS_NOT_FOUND;
|
return STATUS_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return table header and status code */
|
/* Return success */
|
||||||
*AcpiTable = TableHeader;
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -579,9 +452,6 @@ HlpQueryAcpiTables(IN ULONG Signature,
|
|||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ensure that table header is not set before attempting to find ACPI table */
|
|
||||||
TableHeader = NULL;
|
|
||||||
|
|
||||||
/* Check if DSDT or FACS table requested */
|
/* Check if DSDT or FACS table requested */
|
||||||
if(Signature == ACPI_DSDT_SIGNATURE || Signature == ACPI_FACS_SIGNATURE)
|
if(Signature == ACPI_DSDT_SIGNATURE || Signature == ACPI_FACS_SIGNATURE)
|
||||||
{
|
{
|
||||||
|
@ -15,6 +15,9 @@ LIST_ENTRY HlpAcpiCacheList;
|
|||||||
/* ACPI Root System Description Pointer (RSDP) */
|
/* ACPI Root System Description Pointer (RSDP) */
|
||||||
PACPI_RSDP HlpAcpiRsdp;
|
PACPI_RSDP HlpAcpiRsdp;
|
||||||
|
|
||||||
|
/* ACPI system information */
|
||||||
|
ACPI_SYSTEM_INFO HlpAcpiSystemInfo;
|
||||||
|
|
||||||
/* ACPI timer information */
|
/* ACPI timer information */
|
||||||
ACPI_TIMER_INFO HlpAcpiTimerInfo;
|
ACPI_TIMER_INFO HlpAcpiTimerInfo;
|
||||||
|
|
||||||
@ -26,6 +29,3 @@ APIC_MODE HlpApicMode;
|
|||||||
|
|
||||||
/* FrameBuffer information */
|
/* FrameBuffer information */
|
||||||
HAL_FRAMEBUFFER_DATA HlpFrameBufferData;
|
HAL_FRAMEBUFFER_DATA HlpFrameBufferData;
|
||||||
|
|
||||||
/* System information */
|
|
||||||
ACPI_SYSTEM_INFO HlpSystemInfo;
|
|
||||||
|
@ -35,7 +35,7 @@ HlClearApicErrors(VOID)
|
|||||||
* @since XT 1.0
|
* @since XT 1.0
|
||||||
*/
|
*/
|
||||||
XTFASTCALL
|
XTFASTCALL
|
||||||
ULONGLONG
|
ULONG
|
||||||
HlReadApicRegister(IN APIC_REGISTER Register)
|
HlReadApicRegister(IN APIC_REGISTER Register)
|
||||||
{
|
{
|
||||||
if(HlpApicMode == APIC_MODE_X2APIC)
|
if(HlpApicMode == APIC_MODE_X2APIC)
|
||||||
@ -81,7 +81,7 @@ HlSendEoi(VOID)
|
|||||||
XTFASTCALL
|
XTFASTCALL
|
||||||
VOID
|
VOID
|
||||||
HlWriteApicRegister(IN APIC_REGISTER Register,
|
HlWriteApicRegister(IN APIC_REGISTER Register,
|
||||||
IN ULONGLONG Value)
|
IN ULONG Value)
|
||||||
{
|
{
|
||||||
if(HlpApicMode == APIC_MODE_X2APIC)
|
if(HlpApicMode == APIC_MODE_X2APIC)
|
||||||
{
|
{
|
||||||
@ -133,26 +133,6 @@ HlpCheckX2ApicSupport(VOID)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the local APIC ID of the current processor.
|
|
||||||
*
|
|
||||||
* @return This routine returns the current processor's local APIC ID.
|
|
||||||
*
|
|
||||||
* @since XT 1.0
|
|
||||||
*/
|
|
||||||
XTAPI
|
|
||||||
ULONG
|
|
||||||
HlpGetCpuApicId(VOID)
|
|
||||||
{
|
|
||||||
ULONG ApicId;
|
|
||||||
|
|
||||||
/* Read APIC ID register */
|
|
||||||
ApicId = HlReadApicRegister(APIC_ID);
|
|
||||||
|
|
||||||
/* Return logical CPU ID depending on current APIC mode */
|
|
||||||
return (HlpApicMode == APIC_MODE_COMPAT) ? ((ApicId & 0xFFFFFFFF) >> APIC_XAPIC_LDR_SHIFT) : ApicId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows an APIC spurious interrupts to end up.
|
* Allows an APIC spurious interrupts to end up.
|
||||||
*
|
*
|
||||||
@ -391,35 +371,3 @@ HlpInitializePic(VOID)
|
|||||||
/* Initialize legacy PIC */
|
/* Initialize legacy PIC */
|
||||||
HlpInitializeLegacyPic();
|
HlpInitializeLegacyPic();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends an IPI (Inter-Processor Interrupt) to the specified CPU.
|
|
||||||
*
|
|
||||||
* @param ApicId
|
|
||||||
* Supplies a CPU APIC ID to send an IPI to.
|
|
||||||
*
|
|
||||||
* @param Vector
|
|
||||||
* Supplies the IPI vector to send.
|
|
||||||
*
|
|
||||||
* @return This routine does not return any value.
|
|
||||||
*
|
|
||||||
* @since XT 1.0
|
|
||||||
*/
|
|
||||||
XTAPI
|
|
||||||
VOID
|
|
||||||
HlpSendIpi(ULONG ApicId,
|
|
||||||
ULONG Vector)
|
|
||||||
{
|
|
||||||
/* Check current APIC mode */
|
|
||||||
if(HlpApicMode == APIC_MODE_X2APIC)
|
|
||||||
{
|
|
||||||
/* Send IPI using x2APIC mode */
|
|
||||||
HlWriteApicRegister(APIC_ICR0, ((ULONGLONG)ApicId << 32) | Vector);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Send IPI using xAPIC compatibility mode */
|
|
||||||
HlWriteApicRegister(APIC_ICR1, ApicId << 24);
|
|
||||||
HlWriteApicRegister(APIC_ICR0, Vector);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -18,7 +18,7 @@ VOID
|
|||||||
HlClearApicErrors(VOID);
|
HlClearApicErrors(VOID);
|
||||||
|
|
||||||
XTFASTCALL
|
XTFASTCALL
|
||||||
ULONGLONG
|
ULONG
|
||||||
HlReadApicRegister(IN APIC_REGISTER Register);
|
HlReadApicRegister(IN APIC_REGISTER Register);
|
||||||
|
|
||||||
XTAPI
|
XTAPI
|
||||||
@ -28,16 +28,12 @@ HlSendEoi(VOID);
|
|||||||
XTFASTCALL
|
XTFASTCALL
|
||||||
VOID
|
VOID
|
||||||
HlWriteApicRegister(IN APIC_REGISTER Register,
|
HlWriteApicRegister(IN APIC_REGISTER Register,
|
||||||
IN ULONGLONG Value);
|
IN ULONG Value);
|
||||||
|
|
||||||
XTAPI
|
XTAPI
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
HlpCheckX2ApicSupport(VOID);
|
HlpCheckX2ApicSupport(VOID);
|
||||||
|
|
||||||
XTAPI
|
|
||||||
ULONG
|
|
||||||
HlpGetCpuApicId(VOID);
|
|
||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
VOID
|
VOID
|
||||||
HlpHandleApicSpuriousService(VOID);
|
HlpHandleApicSpuriousService(VOID);
|
||||||
@ -58,11 +54,6 @@ XTAPI
|
|||||||
VOID
|
VOID
|
||||||
HlpInitializePic();
|
HlpInitializePic();
|
||||||
|
|
||||||
XTAPI
|
|
||||||
VOID
|
|
||||||
HlpSendIpi(ULONG ApicId,
|
|
||||||
ULONG Vector);
|
|
||||||
|
|
||||||
XTFASTCALL
|
XTFASTCALL
|
||||||
KRUNLEVEL
|
KRUNLEVEL
|
||||||
HlpTransformApicTprToRunLevel(IN UCHAR Tpr);
|
HlpTransformApicTprToRunLevel(IN UCHAR Tpr);
|
||||||
|
@ -18,6 +18,9 @@ EXTERN LIST_ENTRY HlpAcpiCacheList;
|
|||||||
/* ACPI Root System Description Pointer (RSDP) */
|
/* ACPI Root System Description Pointer (RSDP) */
|
||||||
EXTERN PACPI_RSDP HlpAcpiRsdp;
|
EXTERN PACPI_RSDP HlpAcpiRsdp;
|
||||||
|
|
||||||
|
/* ACPI system information */
|
||||||
|
EXTERN ACPI_SYSTEM_INFO HlpAcpiSystemInfo;
|
||||||
|
|
||||||
/* ACPI timer information */
|
/* ACPI timer information */
|
||||||
EXTERN ACPI_TIMER_INFO HlpAcpiTimerInfo;
|
EXTERN ACPI_TIMER_INFO HlpAcpiTimerInfo;
|
||||||
|
|
||||||
@ -30,9 +33,6 @@ EXTERN APIC_MODE HlpApicMode;
|
|||||||
/* FrameBuffer information */
|
/* FrameBuffer information */
|
||||||
EXTERN HAL_FRAMEBUFFER_DATA HlpFrameBufferData;
|
EXTERN HAL_FRAMEBUFFER_DATA HlpFrameBufferData;
|
||||||
|
|
||||||
/* System information */
|
|
||||||
EXTERN ACPI_SYSTEM_INFO HlpSystemInfo;
|
|
||||||
|
|
||||||
/* Pointer to boot loader provided DbgPrint() routine */
|
/* Pointer to boot loader provided DbgPrint() routine */
|
||||||
EXTERN VOID (*KeDbgPrint)(IN PWCHAR Format, IN ...);
|
EXTERN VOID (*KeDbgPrint)(IN PWCHAR Format, IN ...);
|
||||||
|
|
||||||
|
@ -102,10 +102,6 @@ XTAPI
|
|||||||
XTSTATUS
|
XTSTATUS
|
||||||
HlpInitializeAcpiSystemInformation(VOID);
|
HlpInitializeAcpiSystemInformation(VOID);
|
||||||
|
|
||||||
XTAPI
|
|
||||||
XTSTATUS
|
|
||||||
HlpInitializeAcpiSystemStructure(VOID);
|
|
||||||
|
|
||||||
XTAPI
|
XTAPI
|
||||||
XTSTATUS
|
XTSTATUS
|
||||||
HlpInitializeAcpiTimer(VOID);
|
HlpInitializeAcpiTimer(VOID);
|
||||||
|
@ -18,7 +18,7 @@ VOID
|
|||||||
HlClearApicErrors(VOID);
|
HlClearApicErrors(VOID);
|
||||||
|
|
||||||
XTFASTCALL
|
XTFASTCALL
|
||||||
ULONGLONG
|
ULONG
|
||||||
HlReadApicRegister(IN APIC_REGISTER Register);
|
HlReadApicRegister(IN APIC_REGISTER Register);
|
||||||
|
|
||||||
XTAPI
|
XTAPI
|
||||||
@ -28,16 +28,12 @@ HlSendEoi(VOID);
|
|||||||
XTFASTCALL
|
XTFASTCALL
|
||||||
VOID
|
VOID
|
||||||
HlWriteApicRegister(IN APIC_REGISTER Register,
|
HlWriteApicRegister(IN APIC_REGISTER Register,
|
||||||
IN ULONGLONG Value);
|
IN ULONG Value);
|
||||||
|
|
||||||
XTAPI
|
XTAPI
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
HlpCheckX2ApicSupport(VOID);
|
HlpCheckX2ApicSupport(VOID);
|
||||||
|
|
||||||
XTAPI
|
|
||||||
ULONG
|
|
||||||
HlpGetCpuApicId(VOID);
|
|
||||||
|
|
||||||
XTCDECL
|
XTCDECL
|
||||||
VOID
|
VOID
|
||||||
HlpHandleApicSpuriousService(VOID);
|
HlpHandleApicSpuriousService(VOID);
|
||||||
@ -58,11 +54,6 @@ XTAPI
|
|||||||
VOID
|
VOID
|
||||||
HlpInitializePic(VOID);
|
HlpInitializePic(VOID);
|
||||||
|
|
||||||
XTAPI
|
|
||||||
VOID
|
|
||||||
HlpSendIpi(ULONG ApicId,
|
|
||||||
ULONG Vector);
|
|
||||||
|
|
||||||
XTFASTCALL
|
XTFASTCALL
|
||||||
KRUNLEVEL
|
KRUNLEVEL
|
||||||
HlpTransformApicTprToRunLevel(IN UCHAR Tpr);
|
HlpTransformApicTprToRunLevel(IN UCHAR Tpr);
|
||||||
|
@ -17,7 +17,7 @@ XTAPI
|
|||||||
XTSTATUS
|
XTSTATUS
|
||||||
MmAllocateHardwareMemory(IN PFN_NUMBER PageCount,
|
MmAllocateHardwareMemory(IN PFN_NUMBER PageCount,
|
||||||
IN BOOLEAN Aligned,
|
IN BOOLEAN Aligned,
|
||||||
OUT PPHYSICAL_ADDRESS Buffer);
|
OUT PULONG_PTR Buffer);
|
||||||
|
|
||||||
XTAPI
|
XTAPI
|
||||||
XTSTATUS
|
XTSTATUS
|
||||||
|
@ -29,7 +29,7 @@ XTAPI
|
|||||||
XTSTATUS
|
XTSTATUS
|
||||||
MmAllocateHardwareMemory(IN PFN_NUMBER PageCount,
|
MmAllocateHardwareMemory(IN PFN_NUMBER PageCount,
|
||||||
IN BOOLEAN Aligned,
|
IN BOOLEAN Aligned,
|
||||||
OUT PPHYSICAL_ADDRESS Buffer)
|
OUT PULONG_PTR Buffer)
|
||||||
{
|
{
|
||||||
PLOADER_MEMORY_DESCRIPTOR Descriptor, ExtraDescriptor, HardwareDescriptor;
|
PLOADER_MEMORY_DESCRIPTOR Descriptor, ExtraDescriptor, HardwareDescriptor;
|
||||||
PFN_NUMBER Alignment, MaxPage;
|
PFN_NUMBER Alignment, MaxPage;
|
||||||
@ -37,7 +37,7 @@ MmAllocateHardwareMemory(IN PFN_NUMBER PageCount,
|
|||||||
PLIST_ENTRY ListEntry;
|
PLIST_ENTRY ListEntry;
|
||||||
|
|
||||||
/* Assume failure */
|
/* Assume failure */
|
||||||
(*Buffer).QuadPart = 0;
|
*Buffer = 0;
|
||||||
|
|
||||||
/* Calculate maximum page address */
|
/* Calculate maximum page address */
|
||||||
MaxPage = MM_MAXIMUM_PHYSICAL_ADDRESS >> MM_PAGE_SHIFT;
|
MaxPage = MM_MAXIMUM_PHYSICAL_ADDRESS >> MM_PAGE_SHIFT;
|
||||||
@ -135,7 +135,7 @@ MmAllocateHardwareMemory(IN PFN_NUMBER PageCount,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Return physical address */
|
/* Return physical address */
|
||||||
(*Buffer).QuadPart = PhysicalAddress;
|
*Buffer = PhysicalAddress;
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user