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_ */
>