On Wed, May 24, 2017 at 11:14:43AM +0200, Mark Kettenis wrote: > We're going to need some EFI/UEFI support code in the kernel, i.e. to > parse the EFI memory map and to call runtime services to get/set the > RTC. I don't think we want to use the full set of headers that we use > for the bootloaders. Instead I propose we add a header that just > defines the few bits we need. The diff below adds <machine/efi.h> for > this purpose. Not sure that is optimal, since we'll probably need > this header file on amd64, armv7 and i386 as well at some point. But > I don't think we want to add <sys/efi.h>. Maybe this could be > <dev/acpi/efi.h> as UEFI and ACPI are closely related? >
That sounds like a good idea. ok mlarkin > > Index: arch/arm64/include/efi.h > =================================================================== > RCS file: arch/arm64/include/efi.h > diff -N arch/arm64/include/efi.h > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ arch/arm64/include/efi.h 24 May 2017 09:06:12 -0000 > @@ -0,0 +1,60 @@ > +/* $OpenBSD$ */ > + > +/* Public Domain */ > + > +#ifndef _MACHINE_EFI_H_ > +#define _MACHINE_EFI_H_ > + > +typedef uint8_t UINT8; > +typedef uint32_t UINT32; > +typedef uint64_t UINT64; > +typedef uint64_t EFI_PHYSICAL_ADDRESS; > +typedef uint64_t EFI_VIRTUAL_ADDRESS; > + > +typedef enum { > + EfiReservedMemoryType, > + EfiLoaderCode, > + EfiLoaderData, > + EfiBootServicesCode, > + EfiBootServicesData, > + EfiRuntimeServicesCode, > + EfiRuntimeServicesData, > + EfiConventionalMemory, > + EfiUnusableMemory, > + EfiACPIReclaimMemory, > + EfiACPIMemoryNVS, > + EfiMemoryMappedIO, > + EfiMemoryMappedIOPortSpace, > + EfiPalCode, > + EfiPersistentMemory, > + EfiMaxMemoryType > +} EFI_MEMORY_TYPE; > + > +#define EFI_MEMORY_UC 0x0000000000000001 > +#define EFI_MEMORY_WC 0x0000000000000002 > +#define EFI_MEMORY_WT 0x0000000000000004 > +#define EFI_MEMORY_WB 0x0000000000000008 > +#define EFI_MEMORY_UCE 0x0000000000000010 > +#define EFI_MEMORY_WP 0x0000000000001000 > +#define EFI_MEMORY_RP 0x0000000000002000 > +#define EFI_MEMORY_XP 0x0000000000004000 > +#define EFI_MEMORY_NV 0x0000000000008000 > +#define EFI_MEMORY_MORE_RELIABLE 0x0000000000010000 > +#define EFI_MEMORY_RO 0x0000000000020000 > +#define EFI_MEMORY_RUNTIME 0x8000000000000000 > + > +#define EFI_MEMORY_DESCRIPTOR_VERSION 1 > + > +typedef struct { > + UINT32 Type; > + UINT32 Pad; > + EFI_PHYSICAL_ADDRESS PhysicalStart; > + EFI_VIRTUAL_ADDRESS VirtualStart; > + UINT64 NumberOfPages; > + UINT64 Attribute; > +} EFI_MEMORY_DESCRIPTOR; > + > +#define NextMemoryDescriptor(Ptr, Size) \ > + ((EFI_MEMORY_DESCRIPTOR *)(((UINT8 *)Ptr) + Size)) > + > +#endif /* _MACHINE_EFI_H_ */ >