diff --git a/Make.defaults b/Make.defaults index 74ac8ed..30ba06d 100755 --- a/Make.defaults +++ b/Make.defaults @@ -172,7 +172,7 @@ ifeq ($(ARCH),arm) CFLAGS += -marm endif -ifeq ($(ARCH),aarch64) +ifneq (,$(filter $(ARCH),aarch64 arm)) LDFLAGS += -z common-page-size=4096 LDFLAGS += -z max-page-size=4096 endif diff --git a/gnuefi/elf_arm_efi.lds b/gnuefi/elf_arm_efi.lds index cae55ea..ec09eb0 100644 --- a/gnuefi/elf_arm_efi.lds +++ b/gnuefi/elf_arm_efi.lds @@ -27,7 +27,7 @@ SECTIONS } =0 _reloc_vsize = _evreloc - _reloc; _reloc_size = _ereloc - _reloc; - . = ALIGN(4096); + . = ALIGN(65536); _data = .; .dynamic : { *(.dynamic) } . = ALIGN(4096); diff --git a/inc/efiapi.h b/inc/efiapi.h index 01a0938..1f2f479 100644 --- a/inc/efiapi.h +++ b/inc/efiapi.h @@ -229,6 +229,7 @@ VOID #define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS 0x00000010 #define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020 #define EFI_VARIABLE_APPEND_WRITE 0x00000040 +#define EFI_VARIABLE_ENHANCED_AUTHENTICATED_ACCESS 0x00000080 // Variable size limitation #define EFI_MAXIMUM_VARIABLE_SIZE 1024 @@ -771,6 +772,8 @@ typedef struct _EFI_TABLE_HEADER { // #define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552 +#define EFI_1_10_RUNTIME_SERVICES_REVISION ((1<<16) | (10)) +#define EFI_2_00_RUNTIME_SERVICES_REVISION ((2<<16) | (0)) #define EFI_RUNTIME_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) typedef struct { @@ -818,6 +821,8 @@ typedef struct { // #define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42 +#define EFI_1_10_BOOT_SERVICES_REVISION ((1<<16) | (10)) +#define EFI_2_00_BOOT_SERVICES_REVISION ((2<<16) | (0)) #define EFI_BOOT_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) typedef struct _EFI_BOOT_SERVICES { @@ -960,6 +965,9 @@ typedef struct _EFI_CONFIGURATION_TABLE { #define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249 +#define EFI_1_02_SYSTEM_TABLE_REVISION ((1<<16) | (02)) +#define EFI_1_10_SYSTEM_TABLE_REVISION ((1<<16) | (10)) +#define EFI_2_00_SYSTEM_TABLE_REVISION ((2<<16) | (0)) #define EFI_SYSTEM_TABLE_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) typedef struct _EFI_SYSTEM_TABLE { diff --git a/inc/efidef.h b/inc/efidef.h index 5953b69..3f3bedf 100644 --- a/inc/efidef.h +++ b/inc/efidef.h @@ -190,12 +190,13 @@ typedef enum { #define EFI_MEMORY_WC 0x0000000000000002 #define EFI_MEMORY_WT 0x0000000000000004 #define EFI_MEMORY_WB 0x0000000000000008 -#define EFI_MEMORY_UCE 0x0000000000000010 - -// physical memory protection on range +#define EFI_MEMORY_UCE 0x0000000000000010 #define EFI_MEMORY_WP 0x0000000000001000 + +// physical memory protection on range #define EFI_MEMORY_RP 0x0000000000002000 #define EFI_MEMORY_XP 0x0000000000004000 +#define EFI_MEMORY_RO 0x0000000000020000 // range requires a runtime mapping #define EFI_MEMORY_RUNTIME 0x8000000000000000 diff --git a/inc/efilib.h b/inc/efilib.h index a42453a..f35d2ed 100644 --- a/inc/efilib.h +++ b/inc/efilib.h @@ -287,17 +287,17 @@ ZeroMem ( IN UINTN Size ); -VOID +VOID EFIAPI SetMem ( IN VOID *Buffer, IN UINTN Size, IN UINT8 Value ); -VOID +VOID EFIAPI CopyMem ( IN VOID *Dest, - IN CONST VOID *Src, + IN VOID *Src, IN UINTN len ); diff --git a/inc/efiprot.h b/inc/efiprot.h index 3e4d60b..c4457de 100644 --- a/inc/efiprot.h +++ b/inc/efiprot.h @@ -1428,4 +1428,39 @@ typedef struct _EFI_EBC_PROTOCOL { EFI_EBC_GET_VERSION GetVersion; } EFI_EBC_PROTOCOL; +INTERFACE_DECL(_EFI_MEMORY_ATTRIBUTE_PROTOCOL); + +typedef +EFI_STATUS +(EFIAPI *EFI_GET_MEMORY_ATTRIBUTES)( + IN struct _EFI_MEMORY_ATTRIBUTE_PROTOCOL *This, + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + OUT UINT64 *Attributes + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_SET_MEMORY_ATTRIBUTES)( + IN struct _EFI_MEMORY_ATTRIBUTE_PROTOCOL *This, + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN UINT64 Attributes + ); + +typedef +EFI_STATUS +(EFIAPI *EFI_CLEAR_MEMORY_ATTRIBUTES)( + IN struct _EFI_MEMORY_ATTRIBUTE_PROTOCOL *This, + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN UINT64 Attributes + ); + +typedef struct _EFI_MEMORY_ATTRIBUTE_PROTOCOL { + EFI_GET_MEMORY_ATTRIBUTES GetMemoryAttributes; + EFI_SET_MEMORY_ATTRIBUTES SetMemoryAttributes; + EFI_CLEAR_MEMORY_ATTRIBUTES ClearMemoryAttributes; +} EFI_MEMORY_ATTRIBUTE_PROTOCOL; + #endif diff --git a/lib/misc.c b/lib/misc.c index 78d61fc..1d2e241 100644 --- a/lib/misc.c +++ b/lib/misc.c @@ -98,7 +98,7 @@ ZeroMem ( RtZeroMem (Buffer, Size); } -VOID +VOID EFIAPI SetMem ( IN VOID *Buffer, IN UINTN Size, @@ -108,10 +108,10 @@ SetMem ( RtSetMem (Buffer, Size, Value); } -VOID +VOID EFIAPI CopyMem ( IN VOID *Dest, - IN CONST VOID *Src, + IN VOID *Src, IN UINTN len ) { diff --git a/lib/str.c b/lib/str.c index b9b156b..a2f8750 100644 --- a/lib/str.c +++ b/lib/str.c @@ -205,7 +205,7 @@ StrDuplicate ( Size = StrSize(Src); Dest = AllocatePool (Size); if (Dest) { - CopyMem (Dest, Src, Size); + CopyMem (Dest, (void *)Src, Size); } return Dest; }