Browse Source

Merge /u/gmbr3/gnu-efi/ branch shim into master

https://sourceforge.net/p/gnu-efi/code/merge-requests/61/
b'Nigel Croxon 1 year ago
parent
commit
f5bb5112de
8 changed files with 56 additions and 12 deletions
  1. 1 1
      Make.defaults
  2. 1 1
      gnuefi/elf_arm_efi.lds
  3. 8 0
      inc/efiapi.h
  4. 4 3
      inc/efidef.h
  5. 3 3
      inc/efilib.h
  6. 35 0
      inc/efiprot.h
  7. 3 3
      lib/misc.c
  8. 1 1
      lib/str.c

+ 1 - 1
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

+ 1 - 1
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);

+ 8 - 0
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 {

+ 4 - 3
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

+ 3 - 3
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
     );
 

+ 35 - 0
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

+ 3 - 3
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
     )
 {

+ 1 - 1
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;
 }