svn commit: r305943 - head/sys/boot/efi/loader/arch/amd64

Konstantin Belousov kib at FreeBSD.org
Sun Sep 18 17:41:17 UTC 2016


Author: kib
Date: Sun Sep 18 17:41:16 2016
New Revision: 305943
URL: https://svnweb.freebsd.org/changeset/base/305943

Log:
  Utilize pmap.h names for constants and types used to construct EFI
  trampoline page table.  Also do some style cleanup.
  
  Reviewed by:	imp
  Sponsored by:	The FreeBSD Foundation
  MFC after:	1 week
  Differential revision:	https://reviews.freebsd.org/D7934

Modified:
  head/sys/boot/efi/loader/arch/amd64/elf64_freebsd.c

Modified: head/sys/boot/efi/loader/arch/amd64/elf64_freebsd.c
==============================================================================
--- head/sys/boot/efi/loader/arch/amd64/elf64_freebsd.c	Sun Sep 18 17:38:02 2016	(r305942)
+++ head/sys/boot/efi/loader/arch/amd64/elf64_freebsd.c	Sun Sep 18 17:41:16 2016	(r305943)
@@ -35,6 +35,8 @@ __FBSDID("$FreeBSD$");
 #include <string.h>
 #include <machine/elf.h>
 #include <stand.h>
+#include <vm/vm.h>
+#include <vm/pmap.h>
 
 #include <efi.h>
 #include <efilib.h>
@@ -57,8 +59,14 @@ extern int bi_load(char *args, vm_offset
 static int	elf64_exec(struct preloaded_file *amp);
 static int	elf64_obj_exec(struct preloaded_file *amp);
 
-static struct file_format amd64_elf = { elf64_loadfile, elf64_exec };
-static struct file_format amd64_elf_obj = { elf64_obj_loadfile, elf64_obj_exec };
+static struct file_format amd64_elf = {
+	.l_load = elf64_loadfile,
+	.l_exec = elf64_exec,
+};
+static struct file_format amd64_elf_obj = {
+	.l_load = elf64_obj_loadfile,
+	.l_exec = elf64_obj_exec,
+};
 
 struct file_format *file_formats[] = {
 	&amd64_elf,
@@ -66,21 +74,12 @@ struct file_format *file_formats[] = {
 	NULL
 };
 
-#define PG_V    0x001
-#define PG_RW   0x002
-#define PG_U    0x004
-#define PG_PS   0x080
-
-typedef u_int64_t p4_entry_t;
-typedef u_int64_t p3_entry_t;
-typedef u_int64_t p2_entry_t;
-static p4_entry_t *PT4;
-static p3_entry_t *PT3;
-static p2_entry_t *PT2;
+static pml4_entry_t *PT4;
+static pdp_entry_t *PT3;
+static pd_entry_t *PT2;
 
 static void (*trampoline)(uint64_t stack, void *copy_finish, uint64_t kernend,
-			  uint64_t modulep, p4_entry_t *pagetable,
-			  uint64_t entry);
+    uint64_t modulep, pml4_entry_t *pagetable, uint64_t entry);
 
 extern uintptr_t amd64_tramp;
 extern uint32_t amd64_tramp_size;
@@ -157,7 +156,7 @@ elf64_exec(struct preloaded_file *fp)
 	bcopy((void *)&amd64_tramp, (void *)trampcode, amd64_tramp_size);
 	trampoline = (void *)trampcode;
 
-	PT4 = (p4_entry_t *)0x0000000040000000;
+	PT4 = (pml4_entry_t *)0x0000000040000000;
 	err = BS->AllocatePages(AllocateMaxAddress, EfiLoaderData, 3,
 	    (EFI_PHYSICAL_ADDRESS *)&PT4);
 	bzero(PT4, 3 * EFI_PAGE_SIZE);
@@ -172,11 +171,11 @@ elf64_exec(struct preloaded_file *fp)
 	 */
 	for (i = 0; i < 512; i++) {
 		/* Each slot of the L4 pages points to the same L3 page. */
-		PT4[i] = (p4_entry_t)PT3;
+		PT4[i] = (pml4_entry_t)PT3;
 		PT4[i] |= PG_V | PG_RW | PG_U;
 
 		/* Each slot of the L3 pages points to the same L2 page. */
-		PT3[i] = (p3_entry_t)PT2;
+		PT3[i] = (pdp_entry_t)PT2;
 		PT3[i] |= PG_V | PG_RW | PG_U;
 
 		/* The L2 page slots are mapped with 2MB pages for 1GB. */
@@ -204,5 +203,6 @@ elf64_exec(struct preloaded_file *fp)
 static int
 elf64_obj_exec(struct preloaded_file *fp)
 {
+
 	return (EFTYPE);
 }


More information about the svn-src-all mailing list