From 9008db4a285b14880d213a258d233da458dae8e3 Mon Sep 17 00:00:00 2001 From: qhuang8 Date: Tue, 3 Feb 2009 00:48:56 +0000 Subject: Clean up DxeIpl: 1. Remove the assembly by using IoLib & BaseLib in MdePkg 2. Refine code to pass CYGWIN GCC tool chain build git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7404 6f19259b-4bc3-4df7-8a09-765794883524 --- DuetPkg/DxeIpl/DxeInit.c | 2 +- DuetPkg/DxeIpl/DxeIpl.h | 1 + DuetPkg/DxeIpl/DxeIpl.inf | 9 +- DuetPkg/DxeIpl/HobGeneration.c | 246 ++++++++++++++++++++++------------ DuetPkg/DxeIpl/HobGeneration.h | 2 +- DuetPkg/DxeIpl/Ia32/CpuIoAccess.asm | 62 --------- DuetPkg/DxeIpl/Ia32/CpuIoAccessGnu.c | 27 ---- DuetPkg/DxeIpl/Ia32/EnterDxeCore.asm | 64 --------- DuetPkg/DxeIpl/Ia32/EnterDxeCore.c | 31 +++++ DuetPkg/DxeIpl/Ia32/EnterDxeCoreGnu.c | 16 --- DuetPkg/DxeIpl/SerialStatusCode.c | 27 +--- DuetPkg/DxeIpl/X64/CpuIoAccess.asm | 52 ------- DuetPkg/DxeIpl/X64/EnterDxeCore.asm | 45 ------- DuetPkg/DxeIpl/X64/EnterDxeCore.c | 32 +++++ 14 files changed, 232 insertions(+), 384 deletions(-) delete mode 100644 DuetPkg/DxeIpl/Ia32/CpuIoAccess.asm delete mode 100644 DuetPkg/DxeIpl/Ia32/CpuIoAccessGnu.c delete mode 100644 DuetPkg/DxeIpl/Ia32/EnterDxeCore.asm create mode 100644 DuetPkg/DxeIpl/Ia32/EnterDxeCore.c delete mode 100644 DuetPkg/DxeIpl/Ia32/EnterDxeCoreGnu.c delete mode 100644 DuetPkg/DxeIpl/X64/CpuIoAccess.asm delete mode 100644 DuetPkg/DxeIpl/X64/EnterDxeCore.asm create mode 100644 DuetPkg/DxeIpl/X64/EnterDxeCore.c (limited to 'DuetPkg/DxeIpl') diff --git a/DuetPkg/DxeIpl/DxeInit.c b/DuetPkg/DxeIpl/DxeInit.c index 078ba1a1e0..dff64b4856 100644 --- a/DuetPkg/DxeIpl/DxeInit.c +++ b/DuetPkg/DxeIpl/DxeInit.c @@ -305,7 +305,7 @@ Returns: PrintString(" WELCOME TO EFI WORLD!\n"); EnterDxeMain (StackTop, Handoff->DxeCoreEntryPoint, gHob, PageTableBase); - + PrintString("Fail to enter DXE main!\n"); // // Should never get here diff --git a/DuetPkg/DxeIpl/DxeIpl.h b/DuetPkg/DxeIpl/DxeIpl.h index 4c93071dfe..c8c67948a2 100644 --- a/DuetPkg/DxeIpl/DxeIpl.h +++ b/DuetPkg/DxeIpl/DxeIpl.h @@ -27,6 +27,7 @@ #include #include #include +#include #include #include diff --git a/DuetPkg/DxeIpl/DxeIpl.inf b/DuetPkg/DxeIpl/DxeIpl.inf index 68251a5f86..6a2ba5de15 100644 --- a/DuetPkg/DxeIpl/DxeIpl.inf +++ b/DuetPkg/DxeIpl/DxeIpl.inf @@ -37,6 +37,7 @@ BaseMemoryLib PrintLib ReportStatusCodeLib + IoLib [Sources.common] DxeIpl.h @@ -53,18 +54,14 @@ Debug.h [Sources.x64] - X64/CpuIoAccess.asm - X64/EnterDxeCore.asm + X64/EnterDxeCore.c X64/Paging.c X64/VirtualMemory.h [Sources.Ia32] - Ia32/CpuIoAccess.asm - Ia32/EnterDxeCore.asm + Ia32/EnterDxeCore.c Ia32/Paging.c Ia32/VirtualMemory.h - Ia32/CpuIoAccessGnu.c | GCC - Ia32/EnterDxeCoreGnu.c | GCC #[BuildOptions.common] #MSFT:*_*_IA32_DLINK_FLAGS = /out:"$(BIN_DIR)\SecMain.exe" /base:0x10000000 /pdb:"$(BIN_DIR)\SecMain.pdb" /LIBPATH:"$(VCINSTALLDIR)\Lib" /LIBPATH:"$(VCINSTALLDIR)\PlatformSdk\Lib" /NOLOGO /SUBSYSTEM:CONSOLE /NODEFAULTLIB /IGNORE:4086 /MAP /OPT:REF /DEBUG /MACHINE:I386 /LTCG Kernel32.lib MSVCRTD.lib Gdi32.lib User32.lib Winmm.lib diff --git a/DuetPkg/DxeIpl/HobGeneration.c b/DuetPkg/DxeIpl/HobGeneration.c index 0158ea7884..fcb2516254 100644 --- a/DuetPkg/DxeIpl/HobGeneration.c +++ b/DuetPkg/DxeIpl/HobGeneration.c @@ -24,7 +24,7 @@ Revision History: #include "Debug.h" #define EFI_DXE_FILE_GUID \ - { 0xb1644c1a, 0xc16a, 0x4c5b, 0x88, 0xde, 0xea, 0xfb, 0xa9, 0x7e, 0x74, 0xd8 } + { 0xb1644c1a, 0xc16a, 0x4c5b, {0x88, 0xde, 0xea, 0xfb, 0xa9, 0x7e, 0x74, 0xd8 }} #define CPUID_EXTENDED_ADD_SIZE 0x80000008 @@ -92,7 +92,7 @@ HOB_TEMPLATE gHobTemplate = { 0x0, // EFI_PHYSICAL_ADDRESS MemoryBaseAddress; 0x0, // UINT64 MemoryLength; EfiBootServicesData, // EFI_MEMORY_TYPE MemoryType; - 0, 0, 0, 0 // Reserved Reserved[4]; + {0, 0, 0, 0} // Reserved Reserved[4]; } }, { // MemoryAllocation for HOB's & Images @@ -191,10 +191,14 @@ HOB_TEMPLATE gHobTemplate = { 0x0 // EFI_PHYSICAL_ADDRESS of EntryPoint; }, { // Memory Map Hints to reduce fragmentation in the memory map - EFI_HOB_TYPE_GUID_EXTENSION, // Hob type - sizeof (MEMORY_TYPE_INFORMATION_HOB), // Hob size - 0, // reserved - EFI_MEMORY_TYPE_INFORMATION_GUID, + { + { + EFI_HOB_TYPE_GUID_EXTENSION, // Hob type + sizeof (MEMORY_TYPE_INFORMATION_HOB), // Hob size + 0, // reserved + }, + EFI_MEMORY_TYPE_INFORMATION_GUID + }, { { EfiACPIReclaimMemory, @@ -239,31 +243,47 @@ HOB_TEMPLATE gHobTemplate = { } }, { // Pointer to ACPI Table - EFI_HOB_TYPE_GUID_EXTENSION, // Hob type - sizeof (TABLE_HOB), // Hob size - 0, // reserved - EFI_ACPI_TABLE_GUID, + { + { + EFI_HOB_TYPE_GUID_EXTENSION, // Hob type + sizeof (TABLE_HOB), // Hob size + 0 // reserved + }, + EFI_ACPI_TABLE_GUID + }, 0 }, { // Pointer to ACPI20 Table - EFI_HOB_TYPE_GUID_EXTENSION, // Hob type - sizeof (TABLE_HOB), // Hob size - 0, // reserved - EFI_ACPI_20_TABLE_GUID, + { + { + EFI_HOB_TYPE_GUID_EXTENSION, // Hob type + sizeof (TABLE_HOB), // Hob size + 0 // reserved + }, + EFI_ACPI_20_TABLE_GUID + }, 0 }, { // Pointer to SMBIOS Table - EFI_HOB_TYPE_GUID_EXTENSION, // Hob type - sizeof (TABLE_HOB), // Hob size - 0, // reserved - EFI_SMBIOS_TABLE_GUID, + { + { + EFI_HOB_TYPE_GUID_EXTENSION, // Hob type + sizeof (TABLE_HOB), // Hob size + 0 // reserved + }, + EFI_SMBIOS_TABLE_GUID + }, 0 }, { // Pointer to MPS Table - EFI_HOB_TYPE_GUID_EXTENSION, // Hob type - sizeof (TABLE_HOB), // Hob size - 0, // reserved - EFI_MPS_TABLE_GUID, + { + { + EFI_HOB_TYPE_GUID_EXTENSION, // Hob type + sizeof (TABLE_HOB), // Hob size + 0, // reserved + }, + EFI_MPS_TABLE_GUID + }, 0 }, /** @@ -304,25 +324,37 @@ HOB_TEMPLATE gHobTemplate = { }, **/ { // Pointer to ReportStatusCode - EFI_HOB_TYPE_GUID_EXTENSION, // Hob type - sizeof (PROTOCOL_HOB), // Hob size - 0, // reserved - EFI_STATUS_CODE_RUNTIME_PROTOCOL_GUID, + { + { + EFI_HOB_TYPE_GUID_EXTENSION, // Hob type + sizeof (PROTOCOL_HOB), // Hob size + 0 // reserved + }, + EFI_STATUS_CODE_RUNTIME_PROTOCOL_GUID + }, NULL }, { // EFILDR Memory Descriptor - EFI_HOB_TYPE_GUID_EXTENSION, // Hob type - sizeof (MEMORY_DESC_HOB), // Hob size - 0, // reserved - EFI_LDR_MEMORY_DESCRIPTOR_GUID, + { + { + EFI_HOB_TYPE_GUID_EXTENSION, // Hob type + sizeof (MEMORY_DESC_HOB), // Hob size + 0 // reserved + }, + EFI_LDR_MEMORY_DESCRIPTOR_GUID + }, 0, NULL }, { // Pci Express Base Address Hob - EFI_HOB_TYPE_GUID_EXTENSION, // Hob type - sizeof (PCI_EXPRESS_BASE_HOB), // Hob size - 0, // reserved - EFI_PCI_EXPRESS_BASE_ADDRESS_GUID, + { + { + EFI_HOB_TYPE_GUID_EXTENSION, // Hob type + sizeof (PCI_EXPRESS_BASE_HOB), // Hob size + 0 // reserved + }, + EFI_PCI_EXPRESS_BASE_ADDRESS_GUID + }, { 0, 0, @@ -330,12 +362,18 @@ HOB_TEMPLATE gHobTemplate = { } }, { // Acpi Description Hob - EFI_HOB_TYPE_GUID_EXTENSION, // Hob type - sizeof (ACPI_DESCRIPTION_HOB), // Hob size - 0, // reserved - EFI_ACPI_DESCRIPTION_GUID, { - 0, + { + EFI_HOB_TYPE_GUID_EXTENSION, // Hob type + sizeof (ACPI_DESCRIPTION_HOB), // Hob size + 0 // reserved + }, + EFI_ACPI_DESCRIPTION_GUID + }, + { + { + 0, + }, } }, { // NV Storage FV Resource @@ -356,21 +394,27 @@ HOB_TEMPLATE gHobTemplate = { NV_STORAGE_FVB_SIZE // ResourceLength }, { // FVB holding NV Storage - EFI_HOB_TYPE_GUID_EXTENSION, // Hob type - sizeof (FVB_HOB), - 0, - EFI_FLASH_MAP_HOB_GUID, { - 0, 0, 0, // Reserved[3] + { + EFI_HOB_TYPE_GUID_EXTENSION, // Hob type + sizeof (FVB_HOB), + 0 + }, + EFI_FLASH_MAP_HOB_GUID + }, + { + {0, 0, 0}, // Reserved[3] EFI_FLASH_AREA_GUID_DEFINED, // AreaType EFI_SYSTEM_NV_DATA_HOB_GUID, // AreaTypeGuid 1, { - EFI_FLASH_AREA_FV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes - 0, // SubAreaData.Reserved - 0, // SubAreaData.Base (Fixed later) - NV_STORAGE_FVB_SIZE, // SubAreaData.Length - EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem + { + EFI_FLASH_AREA_FV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes + 0, // SubAreaData.Reserved + 0, // SubAreaData.Base (Fixed later) + NV_STORAGE_FVB_SIZE, // SubAreaData.Length + EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem + } }, 0, // VolumeSignature (Fixed later) NV_STORAGE_FILE_PATH, // Mapped file without padding @@ -381,21 +425,27 @@ HOB_TEMPLATE gHobTemplate = { } }, { // NV Storage Hob - EFI_HOB_TYPE_GUID_EXTENSION, // Hob type - sizeof (FVB_HOB), // Hob size - 0, // reserved - EFI_FLASH_MAP_HOB_GUID, { - 0, 0, 0, // Reserved[3] + { + EFI_HOB_TYPE_GUID_EXTENSION, // Hob type + sizeof (FVB_HOB), // Hob size + 0 // reserved + }, + EFI_FLASH_MAP_HOB_GUID + }, + { + {0, 0, 0}, // Reserved[3] EFI_FLASH_AREA_EFI_VARIABLES, // AreaType { 0 }, // AreaTypeGuid 1, { - EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes - 0, // SubAreaData.Reserved - 0, // SubAreaData.Base (Fixed later) - NV_STORAGE_SIZE, // SubAreaData.Length - EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem + { + EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes + 0, // SubAreaData.Reserved + 0, // SubAreaData.Base (Fixed later) + NV_STORAGE_SIZE, // SubAreaData.Length + EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem + } }, 0, NV_STORAGE_FILE_PATH, @@ -404,21 +454,27 @@ HOB_TEMPLATE gHobTemplate = { } }, { // FVB holding FTW spaces including Working & Spare space - EFI_HOB_TYPE_GUID_EXTENSION, // Hob type - sizeof (FVB_HOB), - 0, - EFI_FLASH_MAP_HOB_GUID, { - 0, 0, 0, // Reserved[3] + { + EFI_HOB_TYPE_GUID_EXTENSION, // Hob type + sizeof (FVB_HOB), + 0 + }, + EFI_FLASH_MAP_HOB_GUID + }, + { + {0, 0, 0}, // Reserved[3] EFI_FLASH_AREA_GUID_DEFINED, // AreaType EFI_SYSTEM_NV_DATA_HOB_GUID, // AreaTypeGuid 1, { - EFI_FLASH_AREA_FV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes - 0, // SubAreaData.Reserved - 0, // SubAreaData.Base (Fixed later) - NV_FTW_FVB_SIZE, // SubAreaData.Length - EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem + { + EFI_FLASH_AREA_FV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes + 0, // SubAreaData.Reserved + 0, // SubAreaData.Base (Fixed later) + NV_FTW_FVB_SIZE, // SubAreaData.Length + EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem + } }, 0, L"", // Empty String indicates using memory @@ -427,21 +483,27 @@ HOB_TEMPLATE gHobTemplate = { } }, { // NV Ftw working Hob - EFI_HOB_TYPE_GUID_EXTENSION, // Hob type - sizeof (FVB_HOB), // Hob size - 0, // reserved - EFI_FLASH_MAP_HOB_GUID, { - 0, 0, 0, // Reserved[3] + { + EFI_HOB_TYPE_GUID_EXTENSION, // Hob type + sizeof (FVB_HOB), // Hob size + 0 // reserved + }, + EFI_FLASH_MAP_HOB_GUID + }, + { + {0, 0, 0}, // Reserved[3] EFI_FLASH_AREA_FTW_STATE, // AreaType { 0 }, // AreaTypeGuid 1, { - EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes - 0, // SubAreaData.Reserved - 0, // SubAreaData.Base (Fixed later) - NV_FTW_WORKING_SIZE, // SubAreaData.Length - EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem + { + EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes + 0, // SubAreaData.Reserved + 0, // SubAreaData.Base (Fixed later) + NV_FTW_WORKING_SIZE, // SubAreaData.Length + EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem + } }, 0, // VolumeSignature L"", @@ -450,21 +512,27 @@ HOB_TEMPLATE gHobTemplate = { } }, { // NV Ftw spare Hob - EFI_HOB_TYPE_GUID_EXTENSION, // Hob type - sizeof (FVB_HOB), // Hob size - 0, // reserved - EFI_FLASH_MAP_HOB_GUID, { - 0, 0, 0, // Reserved[3] + { + EFI_HOB_TYPE_GUID_EXTENSION, // Hob type + sizeof (FVB_HOB), // Hob size + 0 // reserved + }, + EFI_FLASH_MAP_HOB_GUID + }, + { + {0, 0, 0}, // Reserved[3] EFI_FLASH_AREA_FTW_BACKUP, // AreaType { 0 }, // AreaTypeGuid 1, { - EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes - 0, // SubAreaData.Reserved - 0, // SubAreaData.Base (Fixed later) - NV_FTW_SPARE_SIZE, // SubAreaData.Length - EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem + { + EFI_FLASH_AREA_SUBFV | EFI_FLASH_AREA_MEMMAPPED_FV, // SubAreaData.Attributes + 0, // SubAreaData.Reserved + 0, // SubAreaData.Base (Fixed later) + NV_FTW_SPARE_SIZE, // SubAreaData.Length + EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID // SubAreaData.FileSystem + } }, 0, L"", diff --git a/DuetPkg/DxeIpl/HobGeneration.h b/DuetPkg/DxeIpl/HobGeneration.h index e6fb9f0057..61d2e9966f 100644 --- a/DuetPkg/DxeIpl/HobGeneration.h +++ b/DuetPkg/DxeIpl/HobGeneration.h @@ -32,7 +32,7 @@ Revision History: #define NV_STORAGE_STATE 0x19000 #define EFI_LDR_MEMORY_DESCRIPTOR_GUID \ - { 0x7701d7e5, 0x7d1d, 0x4432, 0xa4, 0x68, 0x67, 0x3d, 0xab, 0x8a, 0xde, 0x60 } + { 0x7701d7e5, 0x7d1d, 0x4432, {0xa4, 0x68, 0x67, 0x3d, 0xab, 0x8a, 0xde, 0x60}} #pragma pack(1) diff --git a/DuetPkg/DxeIpl/Ia32/CpuIoAccess.asm b/DuetPkg/DxeIpl/Ia32/CpuIoAccess.asm deleted file mode 100644 index 00a80ef75b..0000000000 --- a/DuetPkg/DxeIpl/Ia32/CpuIoAccess.asm +++ /dev/null @@ -1,62 +0,0 @@ - title CpuIoAccess.asm -;------------------------------------------------------------------------------ -; -; Copyright (c) 2006, Intel Corporation -; All rights reserved. This program and the accompanying materials -; are licensed and made available under the terms and conditions of the BSD License -; which accompanies this distribution. The full text of the license may be found at -; http://opensource.org/licenses/bsd-license.php -; -; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -; -; Module Name: -; CpuIoAccess.asm -; -; Abstract: -; CPU IO Abstraction -; -;------------------------------------------------------------------------------ - - .686 - .MODEL FLAT,C - .CODE - - -UINT8 TYPEDEF BYTE -UINT16 TYPEDEF WORD -UINT32 TYPEDEF DWORD -UINT64 TYPEDEF QWORD -UINTN TYPEDEF UINT32 - - - -;------------------------------------------------------------------------------ -; UINT8 -; CpuIoRead8 ( -; IN UINT16 Port -; ) -;------------------------------------------------------------------------------ -CpuIoRead8 PROC PUBLIC Port:UINT16 - mov dx, Port - in al, dx - ret -CpuIoRead8 ENDP - - -;------------------------------------------------------------------------------ -; VOID -; CpuIoWrite8 ( -; IN UINT16 Port, -; IN UINT32 Data -; ) -;------------------------------------------------------------------------------ -CpuIoWrite8 PROC PUBLIC Port:UINT16, Data:UINT32 - mov eax, Data - mov dx, Port - out dx, al - ret -CpuIoWrite8 ENDP - - -END \ No newline at end of file diff --git a/DuetPkg/DxeIpl/Ia32/CpuIoAccessGnu.c b/DuetPkg/DxeIpl/Ia32/CpuIoAccessGnu.c deleted file mode 100644 index 8e9ee2a073..0000000000 --- a/DuetPkg/DxeIpl/Ia32/CpuIoAccessGnu.c +++ /dev/null @@ -1,27 +0,0 @@ -UINT8 -EFIAPI -CpuIoRead8 ( - IN UINT16 Port - ) -{ - UINT8 Data; - asm ( "inb %1, %0" - : "=a"(Data) - : "d"(Port) - ); - return Data; -} - -VOID -EFIAPI -CpuIoWrite8 ( - IN UINT16 Port, - IN UINT32 Data - ) -{ - asm ( "outb %1, %0" - : /* No outputs */ - : "d"(Port) - , "a"((UINT8)Data) - ); -} \ No newline at end of file diff --git a/DuetPkg/DxeIpl/Ia32/EnterDxeCore.asm b/DuetPkg/DxeIpl/Ia32/EnterDxeCore.asm deleted file mode 100644 index 0689a824c3..0000000000 --- a/DuetPkg/DxeIpl/Ia32/EnterDxeCore.asm +++ /dev/null @@ -1,64 +0,0 @@ - TITLE EnterDxeCore.asm: Assembly code for the entering DxeCore -;------------------------------------------------------------------------------ -;* -;* Copyright 2006, Intel Corporation -;* All rights reserved. This program and the accompanying materials -;* are licensed and made available under the terms and conditions of the BSD License -;* which accompanies this distribution. The full text of the license may be found at -;* http://opensource.org/licenses/bsd-license.php -;* -;* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -;* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -;* -;* EnterDxeCore.asm -;* -;* Abstract: -;* -;------------------------------------------------------------------------------ - -.686p -.model flat - -.code -.stack -.MMX -.XMM - -; -; VOID -; EnterDxeMain ( -; IN VOID *StackTop, -; IN VOID *DxeCoreEntryPoint, -; IN VOID *Hob, -; IN VOID *PageTable -; ) -; -EnterDxeMain PROC C \ - StackTop:DWORD, \ - DxeCoreEntryPoint:DWORD, \ - Hob:DWORD, \ - PageTable:DWORD - - mov eax, PageTable -; mov cr3, eax ; load page table -; mov eax, cr4 -; bts eax, 4 ; enable CR4.PSE -; mov cr4, eax -; mov eax, cr0 -; bts eax, 31 ; enable CR0.PG -; mov cr0, eax - mov ecx, DxeCoreEntryPoint - mov eax, StackTop - mov esp, eax - mov edx, Hob - push edx - push 0 - jmp ecx - -; should never get here - jmp $ - ret - -EnterDxeMain ENDP - -END diff --git a/DuetPkg/DxeIpl/Ia32/EnterDxeCore.c b/DuetPkg/DxeIpl/Ia32/EnterDxeCore.c new file mode 100644 index 0000000000..b8449140e7 --- /dev/null +++ b/DuetPkg/DxeIpl/Ia32/EnterDxeCore.c @@ -0,0 +1,31 @@ +/** @file + IA32 specific code to enter DxeCore + +Copyright (c) 2006 - 2007, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include "DxeIpl.h" + +VOID +EnterDxeMain ( + IN VOID *StackTop, + IN VOID *DxeCoreEntryPoint, + IN VOID *Hob, + IN VOID *PageTable + ) +{ + SwitchStack ( + (SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint, + Hob, + NULL, + StackTop + ); +} diff --git a/DuetPkg/DxeIpl/Ia32/EnterDxeCoreGnu.c b/DuetPkg/DxeIpl/Ia32/EnterDxeCoreGnu.c deleted file mode 100644 index c502f8411b..0000000000 --- a/DuetPkg/DxeIpl/Ia32/EnterDxeCoreGnu.c +++ /dev/null @@ -1,16 +0,0 @@ -VOID -EnterDxeMain ( - IN VOID *StackTop, - IN VOID *DxeCoreEntryPoint, - IN VOID *Hob, - IN VOID *PageTable - ) -{ - __asm__ ( "movl %0, %%esp \n\t" - "pushl %2 \n\t" - "pushl $0 \n\t" - "movl %1, %%ecx \n\t" - "jmp %%ecx" - ::"q"(StackTop), "q"(DxeCoreEntryPoint), "q"(Hob) - ); -} \ No newline at end of file diff --git a/DuetPkg/DxeIpl/SerialStatusCode.c b/DuetPkg/DxeIpl/SerialStatusCode.c index 4c5badf8f5..77b26690f8 100644 --- a/DuetPkg/DxeIpl/SerialStatusCode.c +++ b/DuetPkg/DxeIpl/SerialStatusCode.c @@ -542,21 +542,6 @@ STATUS_CODE_LOOKUP_TABLE mOperationToken[] = { }; -// -// Private function declarations -// -UINT8 -CpuIoRead8 ( - UINT16 Port - ); - -VOID -CpuIoWrite8 ( - UINT16 Port, - UINT32 Data - ); - - EFI_STATUS MatchString ( IN STATUS_CODE_LOOKUP_TABLE *Table, @@ -648,10 +633,10 @@ Returns: // Wait for the serail port to be ready. // do { - Data = CpuIoRead8 ((UINT16) (gComBase + LSR_OFFSET)); + Data = IoRead8 (gComBase + LSR_OFFSET); } while ((Data & LSR_TXRDY) == 0); - CpuIoWrite8 (gComBase, Character); + IoWrite8 (gComBase, Character); } VOID @@ -865,19 +850,19 @@ Returns: // Set communications format // OutputData = (UINT8)((DLAB << 7) | ((gBreakSet << 6) | ((gParity << 3) | ((gStop << 2) | Data)))); - CpuIoWrite8 ((UINT16) (gComBase + LCR_OFFSET), OutputData); + IoWrite8 (gComBase + LCR_OFFSET, OutputData); // // Configure baud rate // - CpuIoWrite8 ((UINT16) (gComBase + BAUD_HIGH_OFFSET), (UINT8)(Divisor >> 8)); - CpuIoWrite8 ((UINT16) (gComBase + BAUD_LOW_OFFSET), (UINT8)(Divisor & 0xff)); + IoWrite8 (gComBase + BAUD_HIGH_OFFSET, (UINT8)(Divisor >> 8)); + IoWrite8 (gComBase + BAUD_LOW_OFFSET, (UINT8)(Divisor & 0xff)); // // Switch back to bank 0 // OutputData = (UINT8)((~DLAB<<7)|((gBreakSet<<6)|((gParity<<3)|((gStop<<2)| Data)))); - CpuIoWrite8 ((UINT16) (gComBase + LCR_OFFSET), OutputData); + IoWrite8 (gComBase + LCR_OFFSET, OutputData); *ReportStatusCode = SerialReportStatusCode; } diff --git a/DuetPkg/DxeIpl/X64/CpuIoAccess.asm b/DuetPkg/DxeIpl/X64/CpuIoAccess.asm deleted file mode 100644 index f1515e8c84..0000000000 --- a/DuetPkg/DxeIpl/X64/CpuIoAccess.asm +++ /dev/null @@ -1,52 +0,0 @@ - title CpuIoAccess.asm -;------------------------------------------------------------------------------ -; -; Copyright (c) 2006 - 2007, Intel Corporation -; All rights reserved. This program and the accompanying materials -; are licensed and made available under the terms and conditions of the BSD License -; which accompanies this distribution. The full text of the license may be found at -; http://opensource.org/licenses/bsd-license.php -; -; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -; -; Module Name: -; CpuIoAccess.asm -; -; Abstract: -; CPU IO Abstraction -; -;------------------------------------------------------------------------------ - - -.code - -;------------------------------------------------------------------------------ -; UINT8 -; CpuIoRead8 ( -; UINT16 Port // rcx -; ) -;------------------------------------------------------------------------------ -CpuIoRead8 PROC PUBLIC - xor eax, eax - mov dx, cx - in al, dx - ret -CpuIoRead8 ENDP - -;------------------------------------------------------------------------------ -; VOID -; CpuIoWrite8 ( -; UINT16 Port, // rcx -; UINT32 Data // rdx -; ) -;------------------------------------------------------------------------------ -CpuIoWrite8 PROC PUBLIC - mov eax, edx - mov dx, cx - out dx, al - ret -CpuIoWrite8 ENDP - - -END diff --git a/DuetPkg/DxeIpl/X64/EnterDxeCore.asm b/DuetPkg/DxeIpl/X64/EnterDxeCore.asm deleted file mode 100644 index a1eada3905..0000000000 --- a/DuetPkg/DxeIpl/X64/EnterDxeCore.asm +++ /dev/null @@ -1,45 +0,0 @@ - TITLE EnterDxeCore.asm: Assembly code for the entering DxeCore -;------------------------------------------------------------------------------ -;* -;* Copyright 2006, Intel Corporation -;* All rights reserved. This program and the accompanying materials -;* are licensed and made available under the terms and conditions of the BSD License -;* which accompanies this distribution. The full text of the license may be found at -;* http://opensource.org/licenses/bsd-license.php -;* -;* THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -;* WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -;* -;* EnterDxeCore.asm -;* -;* Abstract: -;* -;------------------------------------------------------------------------------ - -.code - -; -; VOID -; EnterDxeMain ( -; IN VOID *StackTop, // rcx -; IN VOID *DxeCoreEntryPoint, // rdx -; IN VOID *Hob, // r8 -; IN VOID *PageTable // r9 -; ) -; -EnterDxeMain PROC - - mov cr3, r9 - sub rcx, 32 - mov rsp, rcx - mov rcx, r8 - push 0 - jmp rdx - -; should never get here - jmp $ - ret - -EnterDxeMain ENDP - -END diff --git a/DuetPkg/DxeIpl/X64/EnterDxeCore.c b/DuetPkg/DxeIpl/X64/EnterDxeCore.c new file mode 100644 index 0000000000..0443041f24 --- /dev/null +++ b/DuetPkg/DxeIpl/X64/EnterDxeCore.c @@ -0,0 +1,32 @@ +/** @file + x64 specific code to enter DxeCore + +Copyright (c) 2006 - 2007, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include "DxeIpl.h" + +VOID +EnterDxeMain ( + IN VOID *StackTop, + IN VOID *DxeCoreEntryPoint, + IN VOID *Hob, + IN VOID *PageTable + ) +{ + AsmWriteCr3 ((UINTN) PageTable); + SwitchStack ( + (SWITCH_STACK_ENTRY_POINT)(UINTN)DxeCoreEntryPoint, + Hob, + NULL, + StackTop + ); +} -- cgit v1.2.3