Import gnu-efi-3.0.14

This commit is contained in:
jmcneill 2021-09-30 18:50:09 +00:00
parent 12fb346530
commit 987b3ce558
63 changed files with 1800 additions and 181 deletions

View File

@ -62,12 +62,12 @@ OBJCOPY := $(prefix)$(CROSS_COMPILE)objcopy
# Host/target identification
OS := $(shell uname -s)
HOSTARCH ?= $(shell $(HOSTCC) -dumpmachine | cut -f1 -d- | sed -e s,i[3456789]86,ia32, -e 's,armv7.*,arm,' )
ARCH ?= $(shell $(HOSTCC) -dumpmachine | cut -f1 -d- | sed -e s,i[3456789]86,ia32, -e 's,armv7.*,arm,' )
HOSTARCH ?= $(shell $(HOSTCC) -dumpmachine | cut -f1 -d- | sed -e s,i[3456789]86,ia32, -e 's,armv[67].*,arm,' )
ARCH ?= $(shell $(HOSTCC) -dumpmachine | cut -f1 -d- | sed -e s,i[3456789]86,ia32, -e 's,armv[67].*,arm,' )
# Get ARCH from the compiler if cross compiling
ifneq ($(CROSS_COMPILE),)
override ARCH := $(shell $(CC) -dumpmachine | cut -f1 -d-| sed -e s,i[3456789]86,ia32, -e 's,armv7.*,arm,' )
override ARCH := $(shell $(CC) -dumpmachine | cut -f1 -d-| sed -e s,i[3456789]86,ia32, -e 's,armv[67].*,arm,' )
endif
# FreeBSD (and possibly others) reports amd64 instead of x86_64
@ -142,10 +142,12 @@ endif
ifneq ($(ARCH),aarch64)
ifneq ($(ARCH),arm)
ifneq ($(ARCH),mips64el)
ifneq ($(ARCH),riscv64)
export HAVE_EFI_OBJCOPY=y
endif
endif
endif
endif
ifneq ($(ARCH),arm)
export LIBGCC=$(shell $(CC) $(ARCH3264) -print-libgcc-file-name)

View File

@ -51,8 +51,14 @@
%.o: %.c
$(CC) $(INCDIR) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
%.S: %.c
%.s: %.c
$(CC) $(INCDIR) $(CFLAGS) $(CPPFLAGS) -S $< -o $@
%.E: %.c
%.i: %.c
$(CC) $(INCDIR) $(CFLAGS) $(CPPFLAGS) -E $< -o $@
%.o: %.S
$(CC) $(INCDIR) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
%.s: %.S
$(CC) $(INCDIR) $(CFLAGS) $(CPPFLAGS) -E $< -o $@

View File

@ -34,7 +34,7 @@
# SUCH DAMAGE.
#
VERSION = 3.0.8
VERSION = 3.0.14
MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
SRCDIR = $(dir $(MKFILE_PATH))

View File

@ -1,4 +1,4 @@
/* $NetBSD: bltgrid.c,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: bltgrid.c,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
#include <efi.h>
#include <efilib.h>
@ -48,7 +48,7 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
UINTN SizeOfInfo;
rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i, &SizeOfInfo,
&info);
if (EFI_ERROR(rc) && rc == EFI_NOT_STARTED) {
if (rc == EFI_NOT_STARTED) {
Print(L"gop->QueryMode() returned %r\n", rc);
Print(L"Trying to start GOP with SetMode().\n");
rc = uefi_call_wrapper(gop->SetMode, 2, gop,
@ -86,6 +86,7 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
info->HorizontalResolution,
info->VerticalResolution,
0);
FreePool(PixelBuffer);
return;
}
Print(L"Never found the active video mode?\n");

View File

@ -1,4 +1,4 @@
/* $NetBSD: lfbgrid.c,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: lfbgrid.c,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
#include <efi.h>
#include <efilib.h>
@ -53,7 +53,8 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
UINTN NumPixels;
UINT32 *PixelBuffer;
UINT32 CopySize, BufferSize;
#if defined(__x86_64__) || defined(__aarch64__)
#if defined(__x86_64__) || defined(__aarch64__) || \
(defined (__riscv) && __riscv_xlen == 64)
UINT64 FrameBufferAddr;
#elif defined(__i386__) || defined(__arm__)
UINT32 FrameBufferAddr;
@ -72,7 +73,7 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
UINTN SizeOfInfo;
rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i, &SizeOfInfo,
&info);
if (EFI_ERROR(rc) && rc == EFI_NOT_STARTED) {
if (rc == EFI_NOT_STARTED) {
Print(L"gop->QueryMode() returned %r\n", rc);
Print(L"Trying to start GOP with SetMode().\n");
rc = uefi_call_wrapper(gop->SetMode, 2, gop,
@ -116,7 +117,8 @@ draw_boxes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
Print(L"No linear framebuffer on this device.\n");
return;
}
#if defined(__x86_64__) || defined(__aarch64__)
#if defined(__x86_64__) || defined(__aarch64__) || \
(defined (__riscv) && __riscv_xlen == 64)
FrameBufferAddr = (UINT64)gop->Mode->FrameBufferBase;
#elif defined(__i386__) || defined(__arm__)
FrameBufferAddr = (UINT32)(UINT64)gop->Mode->FrameBufferBase;

View File

@ -1,4 +1,4 @@
/* $NetBSD: modelist.c,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: modelist.c,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
#include <efi.h>
#include <efilib.h>
@ -24,7 +24,7 @@ print_modes(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop)
UINTN SizeOfInfo;
rc = uefi_call_wrapper(gop->QueryMode, 4, gop, i, &SizeOfInfo,
&info);
if (EFI_ERROR(rc) && rc == EFI_NOT_STARTED) {
if (rc == EFI_NOT_STARTED) {
Print(L"gop->QueryMode() returned %r\n", rc);
Print(L"Trying to start GOP with SetMode().\n");
rc = uefi_call_wrapper(gop->SetMode, 2, gop,

View File

@ -1,8 +1,9 @@
/* $NetBSD: setjmp.c,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: setjmp.c,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
#include <efi.h>
#include <efilib.h>
#include <efisetjmp.h>
EFI_STATUS
efi_main(
@ -14,12 +15,12 @@ efi_main(
int rc;
InitializeLib(image_handle, systab);
rc = setjmp(&env);
rc = setjmp(env);
Print(L"setjmp() = %d\n", rc);
if (rc == 3) {
Print(L"3 worked\n");
longjmp(&env, 0);
longjmp(env, 0);
return 0;
}
@ -28,6 +29,6 @@ efi_main(
return 0;
}
longjmp(&env, 3);
longjmp(env, 3);
return 0;
}

View File

@ -54,7 +54,9 @@ TARGETS = crt0-efi-$(ARCH).o libgnuefi.a
all: $(TARGETS)
libgnuefi.a: $(patsubst %,libgnuefi.a(%),$(OBJS))
libgnuefi.a: $(OBJS)
$(AR) $(ARFLAGS) $@ $^
clean:
rm -f $(TARGETS) *~ *.o $(OBJS)

View File

@ -1,4 +1,4 @@
/* $NetBSD: crt0-efi-aarch64.S,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: crt0-efi-aarch64.S,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
/*
* crt0-efi-aarch64.S - PE/COFF header for AArch64 EFI applications
@ -36,7 +36,7 @@ coff_header:
.short 2 // nr_sections
.long 0 // TimeDateStamp
.long 0 // PointerToSymbolTable
.long 1 // NumberOfSymbols
.long 0 // NumberOfSymbols
.short section_table - optional_header // SizeOfOptionalHeader
.short 0x206 // Characteristics.
// IMAGE_FILE_DEBUG_STRIPPED |

View File

@ -1,4 +1,4 @@
/* $NetBSD: crt0-efi-arm.S,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: crt0-efi-arm.S,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
/*
* crt0-efi-arm.S - PE/COFF header for ARM EFI applications
@ -36,7 +36,7 @@ coff_header:
.short 2 // nr_sections
.long 0 // TimeDateStamp
.long 0 // PointerToSymbolTable
.long 1 // NumberOfSymbols
.long 0 // NumberOfSymbols
.short section_table - optional_header // SizeOfOptionalHeader
.short 0x306 // Characteristics.
// IMAGE_FILE_32BIT_MACHINE |

View File

@ -1,4 +1,4 @@
/* $NetBSD: crt0-efi-ia32.S,v 1.1.1.1 2014/04/01 16:16:08 jakllsch Exp $ */
/* $NetBSD: crt0-efi-ia32.S,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
/* crt0-efi-ia32.S - x86 EFI startup code.
Copyright (C) 1999 Hewlett-Packard Co.
@ -74,5 +74,6 @@ dummy: .long 0
#define IMAGE_REL_ABSOLUTE 0
.section .reloc
.long dummy // Page RVA
.long 10 // Block Size (2*4+2)
.long 12 // Block Size (2*4+2*2), must be aligned by 32 Bits
.word (IMAGE_REL_ABSOLUTE<<12) + 0 // reloc for dummy
.word (IMAGE_REL_ABSOLUTE<<12) + 0 // reloc for dummy

View File

@ -1,4 +1,4 @@
/* $NetBSD: crt0-efi-ia64.S,v 1.1.1.1 2014/04/01 16:16:08 jakllsch Exp $ */
/* $NetBSD: crt0-efi-ia64.S,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
/* crt0-efi-ia64.S - IA-64 EFI startup code.
Copyright (C) 1999 Hewlett-Packard Co.
@ -84,6 +84,6 @@ _start_plabel:
.section .reloc, "a"
data4 _start_plabel // Page RVA
data4 12 // Block Size (2*4+2*2)
data4 12 // Block Size (2*4+2*2), must be aligned by 32 Bits
data2 (IMAGE_REL_BASED_DIR64<<12) + 0 // reloc for plabel's entry point
data2 (IMAGE_REL_BASED_DIR64<<12) + 8 // reloc for plabel's global pointer

View File

@ -1,4 +1,4 @@
/* $NetBSD: crt0-efi-mips64el.S,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: crt0-efi-mips64el.S,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
/*
* crt0-efi-mips64el.S - PE/COFF header for MIPS64 EFI applications
@ -37,7 +37,7 @@ coff_header:
.short 2 // nr_sections
.long 0 // TimeDateStamp
.long 0 // PointerToSymbolTable
.long 1 // NumberOfSymbols
.long 0 // NumberOfSymbols
.short section_table - optional_header // SizeOfOptionalHeader
.short 0x206 // Characteristics.
// IMAGE_FILE_DEBUG_STRIPPED |

View File

@ -0,0 +1,138 @@
/* $NetBSD: crt0-efi-riscv64.S,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $ */
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Copright (C) 2014 Linaro Ltd. <ard.biesheuvel@linaro.org>
* Copright (C) 2018 Alexander Graf <agraf@suse.de>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice and this list of conditions, without modification.
* 2. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License as published by the Free Software Foundation;
* either version 2 of the License, or (at your option) any later version.
*/
#ifndef EFI_SUBSYSTEM
#define EFI_SUBSYSTEM 10
#endif
.section .text.head
/*
* Magic "MZ" signature for PE/COFF
*/
.globl ImageBase
ImageBase:
.ascii "MZ"
.skip 58 // 'MZ' + pad + offset == 64
.long pe_header - ImageBase // Offset to the PE header.
pe_header:
.ascii "PE"
.short 0
coff_header:
.short 0x5064 // riscv64
.short 2 // nr_sections
.long 0 // TimeDateStamp
.long 0 // PointerToSymbolTable
.long 0 // NumberOfSymbols
.short section_table - optional_header // SizeOfOptionalHeader
.short 0x206 // Characteristics.
// IMAGE_FILE_DEBUG_STRIPPED |
// IMAGE_FILE_EXECUTABLE_IMAGE |
// IMAGE_FILE_LINE_NUMS_STRIPPED
optional_header:
.short 0x20b // PE32+ format
.byte 0x02 // MajorLinkerVersion
.byte 0x14 // MinorLinkerVersion
.long _data - _start // SizeOfCode
.long _data_size // SizeOfInitializedData
.long 0 // SizeOfUninitializedData
.long _start - ImageBase // AddressOfEntryPoint
.long _start - ImageBase // BaseOfCode
extra_header_fields:
.quad 0 // ImageBase
.long 0x1000 // SectionAlignment
.long 0x200 // FileAlignment
.short 0 // MajorOperatingSystemVersion
.short 0 // MinorOperatingSystemVersion
.short 0 // MajorImageVersion
.short 0 // MinorImageVersion
.short 0 // MajorSubsystemVersion
.short 0 // MinorSubsystemVersion
.long 0 // Win32VersionValue
.long _edata - ImageBase // SizeOfImage
// Everything before the kernel image is considered part of the header
.long _start - ImageBase // SizeOfHeaders
.long 0 // CheckSum
.short EFI_SUBSYSTEM // Subsystem
.short 0 // DllCharacteristics
.quad 0 // SizeOfStackReserve
.quad 0 // SizeOfStackCommit
.quad 0 // SizeOfHeapReserve
.quad 0 // SizeOfHeapCommit
.long 0 // LoaderFlags
.long 0x6 // NumberOfRvaAndSizes
.quad 0 // ExportTable
.quad 0 // ImportTable
.quad 0 // ResourceTable
.quad 0 // ExceptionTable
.quad 0 // CertificationTable
.quad 0 // BaseRelocationTable
// Section table
section_table:
/*
* The EFI application loader requires a relocation section
* because EFI applications must be relocatable. This is a
* dummy section as far as we are concerned.
*/
.ascii ".reloc\0\0"
.long 0
.long 0
.long 0 // SizeOfRawData
.long 0 // PointerToRawData
.long 0 // PointerToRelocations
.long 0 // PointerToLineNumbers
.short 0 // NumberOfRelocations
.short 0 // NumberOfLineNumbers
.long 0x42100040 // Characteristics (section flags)
.ascii ".text\0\0\0"
.long _edata - _start // VirtualSize
.long _start - ImageBase // VirtualAddress
.long _edata - _start // SizeOfRawData
.long _start - ImageBase // PointerToRawData
.long 0 // PointerToRelocations (0 for executables)
.long 0 // PointerToLineNumbers (0 for executables)
.short 0 // NumberOfRelocations (0 for executables)
.short 0 // NumberOfLineNumbers (0 for executables)
.long 0xe0500020 // Characteristics (section flags)
.align 12
.globl _start
_start:
addi sp, sp, -24
sd a0, 0(sp)
sd a1, 8(sp)
sd ra, 16(sp)
lla a0, ImageBase
lla a1, _DYNAMIC
call _relocate
bne a0, zero, 0f
ld a1, 8(sp)
ld a0, 0(sp)
call efi_main
ld ra, 16(sp)
0: addi sp, sp, 24
ret

View File

@ -1,4 +1,4 @@
/* $NetBSD: crt0-efi-x86_64.S,v 1.1.1.1 2014/04/01 16:16:08 jakllsch Exp $ */
/* $NetBSD: crt0-efi-x86_64.S,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
/* crt0-efi-x86_64.S - x86_64 EFI startup code.
Copyright (C) 1999 Hewlett-Packard Co.
@ -73,6 +73,7 @@ dummy: .long 0
.section .reloc, "a"
label1:
.long dummy-label1 // Page RVA
.long 10 // Block Size (2*4+2)
.long 12 // Block Size (2*4+2*2), must be aligned by 32 Bits
.word (IMAGE_REL_ABSOLUTE<<12) + 0 // reloc for dummy
.word (IMAGE_REL_ABSOLUTE<<12) + 0 // reloc for dummy

View File

@ -0,0 +1,79 @@
/* $NetBSD: elf_riscv64_efi.lds,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $ */
/* SPDX-License-Identifier: GPL-2.0+ */
OUTPUT_FORMAT("elf64-littleriscv", "elf64-littleriscv", "elf64-littleriscv")
OUTPUT_ARCH(riscv)
ENTRY(_start)
SECTIONS {
.text 0x0 :
{
_text = .;
*(.text.head)
*(.text)
*(.text.*)
*(.gnu.linkonce.t.*)
*(.srodata)
*(.rodata*)
. = ALIGN(16);
}
_etext = .;
_text_size = . - _text;
.dynamic :
{ *(.dynamic) }
.data :
ALIGN(4096)
{
_data = .;
*(.sdata)
*(.data)
*(.data1)
*(.data.*)
*(.got.plt)
*(.got)
/* the EFI loader doesn't seem to like a .bss section, so we stick
it all into .data: */
. = ALIGN(16);
_bss = .;
*(.sbss)
*(.scommon)
*(.dynbss)
*(.bss)
*(COMMON)
. = ALIGN(16);
_bss_end = .;
}
.rela.text :
{ *(.rela.text) *(.rela.text*) }
.rela.dyn :
{ *(.rela.dyn) }
.rela.plt :
{ *(.rela.plt) }
.rela.got :
{ *(.rela.got) }
.rela.data :
{ *(.rela.data) *(.rela.data*) }
. = ALIGN(512);
_edata = .;
_data_size = . - _data;
. = ALIGN(4096);
.dynsym :
{ *(.dynsym) }
. = ALIGN(4096);
.dynstr :
{ *(.dynstr) }
. = ALIGN(4096);
.note.gnu.build-id :
{ *(.note.gnu.build-id) }
/DISCARD/ :
{
*(.rel.reloc)
*(.eh_frame)
*(.note.GNU-stack)
}
.comment 0 :
{ *(.comment) }
}

View File

@ -0,0 +1,93 @@
/* $NetBSD: reloc_riscv64.c,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $ */
// SPDX-License-Identifier: GPL-2.0+
/* reloc_riscv.c - position independent ELF shared object relocator
Copyright (C) 2018 Alexander Graf <agraf@suse.de>
Copyright (C) 2014 Linaro Ltd. <ard.biesheuvel@linaro.org>
Copyright (C) 1999 Hewlett-Packard Co.
Contributed by David Mosberger <davidm@hpl.hp.com>.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials
provided with the distribution.
* Neither the name of Hewlett-Packard Co. nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
BE LIABLE FOR ANYDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
*/
#include <efi.h>
#include <elf.h>
#define Elf_Dyn Elf64_Dyn
#define Elf_Rela Elf64_Rela
#define ELF_R_TYPE ELF64_R_TYPE
EFI_STATUS EFIAPI _relocate(long ldbase, Elf_Dyn *dyn)
{
long relsz = 0, relent = 0;
Elf_Rela *rel = NULL;
unsigned long *addr;
int i;
for (i = 0; dyn[i].d_tag != DT_NULL; ++i) {
switch (dyn[i].d_tag) {
case DT_RELA:
rel = (Elf_Rela *)((unsigned long)dyn[i].d_un.d_ptr + ldbase);
break;
case DT_RELASZ:
relsz = dyn[i].d_un.d_val;
break;
case DT_RELAENT:
relent = dyn[i].d_un.d_val;
break;
default:
break;
}
}
if (!rel && relent == 0)
return EFI_SUCCESS;
if (!rel || relent == 0)
return EFI_LOAD_ERROR;
while (relsz > 0) {
/* apply the relocs */
switch (ELF_R_TYPE(rel->r_info)) {
case R_RISCV_RELATIVE:
addr = (unsigned long *)(ldbase + rel->r_offset);
*addr = ldbase + rel->r_addend;
break;
default:
/* Panic */
while (1) ;
}
rel = (Elf_Rela *)((char *)rel + relent);
relsz -= relent;
}
return EFI_SUCCESS;
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: efibind.h,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efibind.h,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
/*
* Copright (C) 2014 - 2015 Linaro Ltd.
@ -17,7 +17,7 @@
* either version 2 of the License, or (at your option) any later version.
*/
#if !defined(_MSC_VER) && (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L ))
#if !defined(_MSC_VER) && (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )) && !defined(__cplusplus)
// ANSI C 1999/2000 stdint.h integer width declarations
@ -29,6 +29,8 @@ typedef unsigned short uint16_t;
typedef short int16_t;
typedef unsigned char uint8_t;
typedef signed char int8_t; // unqualified 'char' is unsigned on ARM
typedef uint64_t uintptr_t;
typedef int64_t intptr_t;
#else
#include <stdint.h>

View File

@ -1,4 +1,4 @@
/* $NetBSD: efisetjmp_arch.h,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efisetjmp_arch.h,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef GNU_EFI_AARCH64_SETJMP_H
#define GNU_EFI_AARCH64_SETJMP_H
@ -30,6 +30,6 @@ typedef struct {
UINT64 D13;
UINT64 D14;
UINT64 D15;
} ALIGN(JMPBUF_ALIGN) jmp_buf;
} ALIGN(JMPBUF_ALIGN) jmp_buf[1];
#endif /* GNU_EFI_AARCH64_SETJMP_H */

View File

@ -1,4 +1,4 @@
/* $NetBSD: efibind.h,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efibind.h,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
/*
* Copright (C) 2014 - 2015 Linaro Ltd.
@ -17,7 +17,7 @@
* either version 2 of the License, or (at your option) any later version.
*/
#if !defined(_MSC_VER) && (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L ))
#if !defined(_MSC_VER) && (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )) && !defined(__cplusplus)
// ANSI C 1999/2000 stdint.h integer width declarations
@ -29,6 +29,8 @@ typedef unsigned short uint16_t;
typedef short int16_t;
typedef unsigned char uint8_t;
typedef signed char int8_t; // unqualified 'char' is unsigned on ARM
typedef uint32_t uintptr_t;
typedef int32_t intptr_t;
#else
#include <stdint.h>
@ -38,7 +40,7 @@ typedef signed char int8_t; // unqualified 'char' is unsigned on ARM
* This prevents GCC from emitting GOT based relocations, and use R_ARM_REL32
* relative relocations instead, which are more suitable for static binaries.
*/
#ifdef __GNUC__
#if defined(__GNUC__) && !__STDC_HOSTED__
#pragma GCC visibility push (hidden)
#endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: efisetjmp_arch.h,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efisetjmp_arch.h,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef GNU_EFI_ARM_SETJMP_H
#define GNU_EFI_ARM_SETJMP_H
@ -18,6 +18,6 @@ typedef struct {
UINT32 R12;
UINT32 R13;
UINT32 R14;
} ALIGN(JMPBUF_ALIGN) jmp_buf;
} ALIGN(JMPBUF_ALIGN) jmp_buf[1];
#endif /* GNU_EFI_ARM_SETJMP_H */

View File

@ -1,4 +1,4 @@
/* $NetBSD: efi.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efi.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
@ -40,13 +40,31 @@ Revision History
#define EFI_FIRMWARE_MINOR_REVISION 33
#define EFI_FIRMWARE_REVISION ((EFI_FIRMWARE_MAJOR_REVISION <<16) | (EFI_FIRMWARE_MINOR_REVISION))
#include "efibind.h"
#if defined(_M_X64) || defined(__x86_64__) || defined(__amd64__)
#include "x86_64/efibind.h"
#elif defined(_M_IX86) || defined(__i386__)
#include "ia32/efibind.h"
#elif defined(_M_IA64) || defined(__ia64__)
#include "ia64/efibind.h"
#elif defined (_M_ARM64) || defined(__aarch64__)
#include "aarch64/efibind.h"
#elif defined (_M_ARM) || defined(__arm__)
#include "arm/efibind.h"
#elif defined (_M_MIPS64) || defined(__mips64__)
#include "mips64el/efibind.h"
#elif defined (__riscv) && __riscv_xlen == 64
#include "riscv64/efibind.h"
#else
#error Usupported architecture
#endif
#include "eficompiler.h"
#include "efidef.h"
#include "efidevp.h"
#include "efipciio.h"
#include "efiprot.h"
#include "eficon.h"
#include "eficonex.h"
#include "efiser.h"
#include "efi_nii.h"
#include "efipxebc.h"
@ -59,6 +77,6 @@ Revision History
#include "efiudp.h"
#include "efitcp.h"
#include "efipoint.h"
#include "efisetjmp.h"
#include "efishell.h"
#endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: efiapi.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efiapi.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef _EFI_API_H
#define _EFI_API_H
@ -344,6 +344,18 @@ EFI_STATUS
#define EFI_IMAGE_MACHINE_AARCH64 0xAA64
#endif
#if !defined(EFI_IMAGE_MACHINE_RISCV32)
#define EFI_IMAGE_MACHINE_RISCV32 0x5032
#endif
#if !defined(EFI_IMAGE_MACHINE_RISCV64)
#define EFI_IMAGE_MACHINE_RISCV64 0x5064
#endif
#if !defined(EFI_IMAGE_MACHINE_RISCV128)
#define EFI_IMAGE_MACHINE_RISCV128 0x5128
#endif
// Image Entry prototype
typedef
@ -578,7 +590,7 @@ EFI_STATUS
IN EFI_TPL NotifyTpl,
IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL,
IN const VOID *NotifyContext OPTIONAL,
IN const EFI_GUID EventGroup OPTIONAL,
IN const EFI_GUID *EventGroup OPTIONAL,
OUT EFI_EVENT *Event
);
@ -925,6 +937,8 @@ typedef struct _EFI_BOOT_SERVICES {
#define SAL_SYSTEM_TABLE_GUID \
{ 0xeb9d2d32, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
#define EFI_DTB_TABLE_GUID \
{ 0xb1b621d5, 0xf19c, 0x41a5, {0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0} }
typedef struct _EFI_CONFIGURATION_TABLE {
EFI_GUID VendorGuid;

View File

@ -0,0 +1,113 @@
/* $NetBSD: eficonex.h,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef _EFI_CONEX_H
#define _EFI_CONEX_H
/*++
Copyright (c) 2020 Kagurazaka Kotori <kagurazakakotori@gmail.com>
Module Name:
eficonex.h
Abstract:
EFI console extension protocols
--*/
//
// Simple Text Input Ex Protocol
//
#define EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID \
{ 0xdd9e7534, 0x7762, 0x4698, {0x8c, 0x14, 0xf5, 0x85, 0x17, 0xa6, 0x25, 0xaa} }
INTERFACE_DECL(_EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL);
typedef UINT8 EFI_KEY_TOGGLE_STATE;
typedef struct EFI_KEY_STATE {
UINT32 KeyShiftState;
EFI_KEY_TOGGLE_STATE KeyToggleState;
} EFI_KEY_STATE;
typedef struct {
EFI_INPUT_KEY Key;
EFI_KEY_STATE KeyState;
} EFI_KEY_DATA;
// Shift states
#define EFI_SHIFT_STATE_VALID 0x80000000
#define EFI_RIGHT_SHIFT_PRESSED 0x00000001
#define EFI_LEFT_SHIFT_PRESSED 0x00000002
#define EFI_RIGHT_CONTROL_PRESSED 0x00000004
#define EFI_LEFT_CONTROL_PRESSED 0x00000008
#define EFI_RIGHT_ALT_PRESSED 0x00000010
#define EFI_LEFT_ALT_PRESSED 0x00000020
#define EFI_RIGHT_LOGO_PRESSED 0x00000040
#define EFI_LEFT_LOGO_PRESSED 0x00000080
#define EFI_MENU_KEY_PRESSED 0x00000100
#define EFI_SYS_REQ_PRESSED 0x00000200
// Toggle states
#define EFI_TOGGLE_STATE_VALID 0x80
#define EFI_KEY_STATE_EXPOSED 0x40
#define EFI_SCROLL_LOCK_ACTIVE 0x01
#define EFI_NUM_LOCK_ACTIVE 0x02
#define EFI_CAPS_LOCK_ACTIVE 0x04
typedef
EFI_STATUS
(EFIAPI *EFI_INPUT_RESET_EX) (
IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
);
typedef
EFI_STATUS
(EFIAPI *EFI_INPUT_READ_KEY_EX) (
IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
OUT EFI_KEY_DATA *KeyData
);
typedef
EFI_STATUS
(EFIAPI *EFI_SET_STATE) (
IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
IN EFI_KEY_TOGGLE_STATE *KeyToggleState
);
typedef
EFI_STATUS
(EFIAPI *EFI_KEY_NOTIFY_FUNCTION) (
IN EFI_KEY_DATA *KeyData
);
typedef
EFI_STATUS
(EFIAPI *EFI_REGISTER_KEYSTROKE_NOTIFY) (
IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
IN EFI_KEY_DATA *KeyData,
IN EFI_KEY_NOTIFY_FUNCTION KeyNotificationFunction,
OUT VOID **NotifyHandle
);
typedef
EFI_STATUS
(EFIAPI *EFI_UNREGISTER_KEYSTROKE_NOTIFY) (
IN struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *This,
IN VOID *NotificationHandle
);
typedef struct _EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL{
EFI_INPUT_RESET_EX Reset;
EFI_INPUT_READ_KEY_EX ReadKeyStrokeEx;
EFI_EVENT WaitForKeyEx;
EFI_SET_STATE SetState;
EFI_REGISTER_KEYSTROKE_NOTIFY RegisterKeyNotify;
EFI_UNREGISTER_KEYSTROKE_NOTIFY UnregisterKeyNotify;
} EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL;
#endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: efidevp.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efidevp.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef _DEVPATH_H
#define _DEVPATH_H
@ -327,11 +327,11 @@ typedef struct _VLAN_DEVICE_PATH {
#define MSG_INFINIBAND_DP 0x09
typedef struct _INFINIBAND_DEVICE_PATH {
EFI_DEVICE_PATH_PROTOCOL Header;
UINT32 ResourceFlags ;
UINT64 PortGid ;
UINT64 ServiceId ;
UINT64 TargetPortId ;
UINT64 DeviceId ;
UINT32 ResourceFlags;
UINT8 PortGid[16];
UINT64 ServiceId;
UINT64 TargetPortId;
UINT64 DeviceId;
} INFINIBAND_DEVICE_PATH;
#define MSG_UART_DP 0x0e
@ -581,4 +581,72 @@ typedef struct {
EFI_DEVICE_PATH_FROM_TEXT_PATH ConvertTextToDevicePath;
} EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL;
#define EFI_DEVICE_PATH_UTILITIES_PROTOCOL_GUID \
{ 0x379be4e, 0xd706, 0x437d, {0xb0, 0x37, 0xed, 0xb8, 0x2f, 0xb7, 0x72, 0xa4} }
typedef
UINTN
(EFIAPI *EFI_DEVICE_PATH_UTILS_GET_DEVICE_PATH_SIZE) (
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath
);
typedef
EFI_DEVICE_PATH_PROTOCOL*
(EFIAPI *EFI_DEVICE_PATH_UTILS_DUP_DEVICE_PATH) (
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath
);
typedef
EFI_DEVICE_PATH_PROTOCOL*
(EFIAPI *EFI_DEVICE_PATH_UTILS_APPEND_PATH) (
IN CONST EFI_DEVICE_PATH_PROTOCOL *Src1,
IN CONST EFI_DEVICE_PATH_PROTOCOL *Src2
);
typedef
EFI_DEVICE_PATH_PROTOCOL*
(EFIAPI *EFI_DEVICE_PATH_UTILS_APPEND_NODE) (
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
IN CONST EFI_DEVICE_PATH_PROTOCOL *DeviceNode
);
typedef
EFI_DEVICE_PATH_PROTOCOL*
(EFIAPI *EFI_DEVICE_PATH_UTILS_APPEND_INSTANCE) (
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePathInstance
);
typedef
EFI_DEVICE_PATH_PROTOCOL*
(EFIAPI *EFI_DEVICE_PATH_UTILS_GET_NEXT_INSTANCE) (
IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePathInstance,
OUT UINTN *DevicePathInstanceSize OPTIONAL
);
typedef
EFI_DEVICE_PATH_PROTOCOL*
(EFIAPI *EFI_DEVICE_PATH_UTILS_CREATE_NODE) (
IN UINT8 NodeType,
IN UINT8 NodeSubType,
IN UINT16 NodeLength
);
typedef
BOOLEAN
(EFIAPI *EFI_DEVICE_PATH_UTILS_IS_MULTI_INSTANCE) (
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath
);
typedef struct _EFI_DEVICE_PATH_UTILITIES_PROTOCOL {
EFI_DEVICE_PATH_UTILS_GET_DEVICE_PATH_SIZE GetDevicePathSize;
EFI_DEVICE_PATH_UTILS_DUP_DEVICE_PATH DuplicateDevicePath;
EFI_DEVICE_PATH_UTILS_APPEND_PATH AppendDevicePath;
EFI_DEVICE_PATH_UTILS_APPEND_NODE AppendDeviceNode;
EFI_DEVICE_PATH_UTILS_APPEND_INSTANCE AppendDevicePathInstance;
EFI_DEVICE_PATH_UTILS_GET_NEXT_INSTANCE GetNextDevicePathInstance;
EFI_DEVICE_PATH_UTILS_IS_MULTI_INSTANCE IsDevicePathMultiInstance;
EFI_DEVICE_PATH_UTILS_CREATE_NODE CreateDeviceNode;
} EFI_DEVICE_PATH_UTILITIES_PROTOCOL;
#endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: efierr.h,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $ */
/* $NetBSD: efierr.h,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef _EFI_ERR_H
#define _EFI_ERR_H
@ -61,6 +61,7 @@ Revision History
#define EFI_COMPROMISED_DATA EFIERR(33)
#define EFI_WARN_UNKOWN_GLYPH EFIWARN(1)
#define EFI_WARN_UNKNOWN_GLYPH EFIWARN(1)
#define EFI_WARN_DELETE_FAILURE EFIWARN(2)
#define EFI_WARN_WRITE_FAILURE EFIWARN(3)
#define EFI_WARN_BUFFER_TOO_SMALL EFIWARN(4)

View File

@ -1,4 +1,4 @@
/* $NetBSD: efilib.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efilib.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef _EFILIB_INCLUDE_
#define _EFILIB_INCLUDE_
@ -23,7 +23,21 @@ Revision History
#include "efidebug.h"
#include "efipart.h"
#include "efilibplat.h"
#if defined(_M_X64) || defined(__x86_64__) || defined(__amd64__)
#include "x86_64/efilibplat.h"
#elif defined(_M_IX86) || defined(__i386__)
#include "ia32/efilibplat.h"
#elif defined(_M_IA64) || defined(__ia64__)
#include "ia64/efilibplat.h"
#elif defined (_M_ARM64) || defined(__aarch64__)
#include "aarch64/efilibplat.h"
#elif defined (_M_ARM) || defined(__arm__)
#include "arm/efilibplat.h"
#elif defined (_M_MIPS64) || defined(__mips64__)
#include "mips64el/efilibplat.h"
#elif defined (__riscv) && __riscv_xlen == 64
#include "riscv64/efilibplat.h"
#endif
#include "efilink.h"
#include "efirtlib.h"
#include "efistdarg.h"
@ -47,6 +61,8 @@ extern EFI_GUID gEfiDevicePathToTextProtocolGuid;
#define DevicePathToTextProtocol gEfiDevicePathToTextProtocolGuid
extern EFI_GUID gEfiDevicePathFromTextProtocolGuid;
#define DevicePathFromTextProtocol gEfiDevicePathFromTextProtocolGuid
extern EFI_GUID gEfiDevicePathUtilitiesProtocolGuid;
#define DevicePathUtilitiesProtocol gEfiDevicePathUtilitiesProtocolGuid
extern EFI_GUID gEfiLoadedImageProtocolGuid;
#define LoadedImageProtocol gEfiLoadedImageProtocolGuid
extern EFI_GUID gEfiSimpleTextInProtocolGuid;
@ -139,7 +155,9 @@ extern EFI_GUID EfiPartTypeLegacyMbrGuid;
extern EFI_GUID MpsTableGuid;
extern EFI_GUID AcpiTableGuid;
extern EFI_GUID SMBIOSTableGuid;
extern EFI_GUID SMBIOS3TableGuid;
extern EFI_GUID SalSystemTableGuid;
extern EFI_GUID EfiDtbTableGuid;
extern EFI_GUID SimplePointerProtocol;
extern EFI_GUID AbsolutePointerProtocol;
@ -147,6 +165,12 @@ extern EFI_GUID AbsolutePointerProtocol;
extern EFI_GUID gEfiDebugImageInfoTableGuid;
extern EFI_GUID gEfiDebugSupportProtocolGuid;
extern EFI_GUID SimpleTextInputExProtocol;
extern EFI_GUID ShellProtocolGuid;
extern EFI_GUID ShellParametersProtocolGuid;
extern EFI_GUID ShellDynamicCommandProtocolGuid;
//
// EFI Variable strings
//
@ -514,7 +538,7 @@ VPrint (
);
UINTN
SPrint (
UnicodeSPrint (
OUT CHAR16 *Str,
IN UINTN StrSize,
IN CONST CHAR16 *fmt,
@ -522,7 +546,7 @@ SPrint (
);
UINTN
VSPrint (
UnicodeVSPrint (
OUT CHAR16 *Str,
IN UINTN StrSize,
IN CONST CHAR16 *fmt,
@ -579,11 +603,26 @@ IPrintAt (
);
UINTN
APrint (
AsciiPrint (
IN CONST CHAR8 *fmt,
...
);
UINTN
AsciiVSPrint(
OUT CHAR8 *Str,
IN UINTN StrSize,
IN CONST CHAR8 *fmt,
va_list args
);
//
// For compatibility with previous gnu-efi versions
//
#define SPrint UnicodeSPrint
#define VSPrint UnicodeVSPrint
#define APrint AsciiPrint
VOID
ValueToHex (
IN CHAR16 *Buffer,
@ -1016,6 +1055,11 @@ WritePciConfig (
IN UINTN Data
);
VOID
Pause (
VOID
);
extern EFI_DEVICE_IO_INTERFACE *GlobalIoFncs;
#define outp(_Port, _DataByte) (UINT8)WritePort(GlobalIoFncs, IO_UINT8, (UINTN)_Port, (UINTN)_DataByte)
@ -1032,7 +1076,6 @@ extern EFI_DEVICE_IO_INTERFACE *GlobalIoFncs;
#define writepci32(_Addr, _DataByte) (UINT32)WritePciConfig(GlobalIoFncs, IO_UINT32, (UINTN)_Addr, (UINTN)_DataByte)
#define readpci32(_Addr) (UINT32)ReadPciConfig(GlobalIoFncs, IO_UINT32, (UINTN)_Addr)
#define Pause() WaitForSingleEvent (ST->ConIn->WaitForKey, 0)
#define Port80(_PostCode) GlobalIoFncs->Io.Write (GlobalIoFncs, IO_UINT16, (UINT64)0x80, 1, &(_PostCode))
#endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: efilink.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efilink.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef _EFI_LINK_H
#define _EFI_LINK_H
@ -30,7 +30,7 @@ Revision History
typedef struct _LIST_ENTRY {
struct _LIST_ENTRY *Flink;
struct _LIST_ENTRY *Blink;
} LIST_ENTRY;
} LIST_ENTRY, EFI_LIST_ENTRY;
#endif
@ -154,6 +154,11 @@ typedef struct _LIST_ENTRY {
#define _CR(Record, TYPE, Field) \
((TYPE *) ( (CHAR8 *)(Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))
//
// EDK2 uses BASE_CR for the above
//
#define BASE_CR _CR
#if EFI_DEBUG
#define CR(Record, TYPE, Field, Sig) \
_CR(Record, TYPE, Field)->Signature != Sig ? \

View File

@ -1,4 +1,4 @@
/* $NetBSD: efiprot.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efiprot.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef _EFI_PROT_H
#define _EFI_PROT_H
@ -519,14 +519,20 @@ typedef struct {
#define SIZE_OF_EFI_FILE_SYSTEM_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_INFO,VolumeLabel)
#define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID \
#define EFI_FILE_SYSTEM_VOLUME_LABEL_ID \
{ 0xDB47D7D3,0xFE81, 0x11d3, {0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
typedef struct {
CHAR16 VolumeLabel[1];
} EFI_FILE_SYSTEM_VOLUME_LABEL_INFO;
} EFI_FILE_SYSTEM_VOLUME_LABEL;
#define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL_INFO,VolumeLabel)
#define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL,VolumeLabel)
//
// For compatibility with older versions of gnu-efi
//
#define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID EFI_FILE_SYSTEM_VOLUME_LABEL_ID
#define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FILE_SYSTEM_VOLUME_LABEL
//
// Load file protocol
@ -1245,7 +1251,8 @@ typedef struct {
typedef EFI_LOADED_IMAGE_PROTOCOL EFI_LOADED_IMAGE;
#define EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID \
{0xbc62157e, 0x3e33, 0x4fec, {0x99, 0x20, 0x2d, 0x3b, 0x36, 0xd7, 0x50, 0xdf} }
/*
* Random Number Generator Protocol

View File

@ -1,4 +1,4 @@
/* $NetBSD: efirtlib.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efirtlib.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef _EFI_RT_LIB_INCLUDE_
#define _EFI_RT_LIB_INCLUDE_
@ -22,7 +22,21 @@ Revision History
#include "efidebug.h"
#include "efipart.h"
#include "efilibplat.h"
#if defined(_M_X64) || defined(__x86_64__) || defined(__amd64__)
#include "x86_64/efilibplat.h"
#elif defined(_M_IX86) || defined(__i386__)
#include "ia32/efilibplat.h"
#elif defined(_M_IA64) || defined(__ia64__)
#include "ia64/efilibplat.h"
#elif defined (_M_ARM64) || defined(__aarch64__)
#include "aarch64/efilibplat.h"
#elif defined (_M_ARM) || defined(__arm__)
#include "arm/efilibplat.h"
#elif defined (_M_MIPS64) || defined(__mips64__)
#include "mips64el/efilibplat.h"
#elif defined (__riscv) && __riscv_xlen == 64
#include "riscv64/efilibplat.h"
#endif
VOID

View File

@ -1,4 +1,4 @@
/* $NetBSD: efisetjmp.h,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efisetjmp.h,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef GNU_EFI_SETJMP_H
#define GNU_EFI_SETJMP_H
@ -6,7 +6,7 @@
#include "eficompiler.h"
#include "efisetjmp_arch.h"
extern UINTN setjmp(jmp_buf *env) __attribute__((returns_twice));
extern VOID longjmp(jmp_buf *env, UINTN value) __attribute__((noreturn));
extern UINTN setjmp(jmp_buf env) __attribute__((returns_twice));
extern VOID longjmp(jmp_buf env, UINTN value) __attribute__((noreturn));
#endif /* GNU_EFI_SETJMP_H */

View File

@ -0,0 +1,451 @@
/* $NetBSD: efishell.h,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $ */
/**
EFI Shell protocol as defined in the UEFI Shell Specification 2.2.
(C) Copyright 2014 Hewlett-Packard Development Company, L.P.<BR>
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
This file is based on MdePkg/Include/Protocol/Shell.h from EDK2
Ported to gnu-efi by Jiaqing Zhao <jiaqing.zhao@intel.com>
**/
#ifndef _EFI_SHELL_H
#define _EFI_SHELL_H
#include "efilink.h"
#define EFI_SHELL_PROTOCOL_GUID \
{ 0x6302d008, 0x7f9b, 0x4f30, { 0x87, 0xac, 0x60, 0xc9, 0xfe, 0xf5, 0xda, 0x4e } }
INTERFACE_DECL(_EFI_SHELL_PROTOCOL);
typedef enum {
SHELL_SUCCESS = 0,
SHELL_LOAD_ERROR = 1,
SHELL_INVALID_PARAMETER = 2,
SHELL_UNSUPPORTED = 3,
SHELL_BAD_BUFFER_SIZE = 4,
SHELL_BUFFER_TOO_SMALL = 5,
SHELL_NOT_READY = 6,
SHELL_DEVICE_ERROR = 7,
SHELL_WRITE_PROTECTED = 8,
SHELL_OUT_OF_RESOURCES = 9,
SHELL_VOLUME_CORRUPTED = 10,
SHELL_VOLUME_FULL = 11,
SHELL_NO_MEDIA = 12,
SHELL_MEDIA_CHANGED = 13,
SHELL_NOT_FOUND = 14,
SHELL_ACCESS_DENIED = 15,
SHELL_TIMEOUT = 18,
SHELL_NOT_STARTED = 19,
SHELL_ALREADY_STARTED = 20,
SHELL_ABORTED = 21,
SHELL_INCOMPATIBLE_VERSION = 25,
SHELL_SECURITY_VIOLATION = 26,
SHELL_NOT_EQUAL = 27
} SHELL_STATUS;
typedef VOID *SHELL_FILE_HANDLE;
typedef struct {
EFI_LIST_ENTRY Link;
EFI_STATUS Status;
CONST CHAR16 *FullName;
CONST CHAR16 *FileName;
SHELL_FILE_HANDLE Handle;
EFI_FILE_INFO *Info;
} EFI_SHELL_FILE_INFO;
typedef
BOOLEAN
(EFIAPI *EFI_SHELL_BATCH_IS_ACTIVE) (
VOID
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_CLOSE_FILE) (
IN SHELL_FILE_HANDLE FileHandle
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_CREATE_FILE) (
IN CONST CHAR16 *FileName,
IN UINT64 FileAttribs,
OUT SHELL_FILE_HANDLE *FileHandle
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_DELETE_FILE) (
IN SHELL_FILE_HANDLE FileHandle
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_DELETE_FILE_BY_NAME) (
IN CONST CHAR16 *FileName
);
typedef
VOID
(EFIAPI *EFI_SHELL_DISABLE_PAGE_BREAK) (
VOID
);
typedef
VOID
(EFIAPI *EFI_SHELL_ENABLE_PAGE_BREAK) (
VOID
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_EXECUTE) (
IN EFI_HANDLE *ParentImageHandle,
IN CHAR16 *CommandLine OPTIONAL,
IN CHAR16 **Environment OPTIONAL,
OUT EFI_STATUS *StatusCode OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_FIND_FILES) (
IN CONST CHAR16 *FilePattern,
OUT EFI_SHELL_FILE_INFO **FileList
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_FIND_FILES_IN_DIR) (
IN SHELL_FILE_HANDLE FileDirHandle,
OUT EFI_SHELL_FILE_INFO **FileList
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_FLUSH_FILE) (
IN SHELL_FILE_HANDLE FileHandle
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_FREE_FILE_LIST) (
IN EFI_SHELL_FILE_INFO **FileList
);
typedef
CONST CHAR16 *
(EFIAPI *EFI_SHELL_GET_ALIAS) (
IN CONST CHAR16 *Alias,
OUT BOOLEAN *Volatile OPTIONAL
);
typedef
CONST CHAR16 *
(EFIAPI *EFI_SHELL_GET_CUR_DIR) (
IN CONST CHAR16 *FileSystemMapping OPTIONAL
);
typedef UINT32 EFI_SHELL_DEVICE_NAME_FLAGS;
#define EFI_DEVICE_NAME_USE_COMPONENT_NAME 0x00000001
#define EFI_DEVICE_NAME_USE_DEVICE_PATH 0x00000002
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_GET_DEVICE_NAME) (
IN EFI_HANDLE DeviceHandle,
IN EFI_SHELL_DEVICE_NAME_FLAGS Flags,
IN CHAR8 *Language,
OUT CHAR16 **BestDeviceName
);
typedef
CONST EFI_DEVICE_PATH_PROTOCOL *
(EFIAPI *EFI_SHELL_GET_DEVICE_PATH_FROM_MAP) (
IN CONST CHAR16 *Mapping
);
typedef
EFI_DEVICE_PATH_PROTOCOL *
(EFIAPI *EFI_SHELL_GET_DEVICE_PATH_FROM_FILE_PATH) (
IN CONST CHAR16 *Path
);
typedef
CONST CHAR16 *
(EFIAPI *EFI_SHELL_GET_ENV) (
IN CONST CHAR16 *Name
);
typedef
CONST CHAR16 *
(EFIAPI *EFI_SHELL_GET_ENV_EX) (
IN CONST CHAR16 *Name,
OUT UINT32 *Attributes OPTIONAL
);
typedef
EFI_FILE_INFO *
(EFIAPI *EFI_SHELL_GET_FILE_INFO) (
IN SHELL_FILE_HANDLE FileHandle
);
typedef
CHAR16 *
(EFIAPI *EFI_SHELL_GET_FILE_PATH_FROM_DEVICE_PATH) (
IN CONST EFI_DEVICE_PATH_PROTOCOL *Path
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_GET_FILE_POSITION) (
IN SHELL_FILE_HANDLE FileHandle,
OUT UINT64 *Position
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_GET_FILE_SIZE) (
IN SHELL_FILE_HANDLE FileHandle,
OUT UINT64 *Size
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_GET_GUID_FROM_NAME) (
IN CONST CHAR16 *GuidName,
OUT EFI_GUID *Guid
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_GET_GUID_NAME)(
IN CONST EFI_GUID *Guid,
OUT CONST CHAR16 **GuidName
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_GET_HELP_TEXT) (
IN CONST CHAR16 *Command,
IN CONST CHAR16 *Sections,
OUT CHAR16 **HelpText
);
typedef
CONST CHAR16 *
(EFIAPI *EFI_SHELL_GET_MAP_FROM_DEVICE_PATH) (
IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
);
typedef
BOOLEAN
(EFIAPI *EFI_SHELL_GET_PAGE_BREAK) (
VOID
);
typedef
BOOLEAN
(EFIAPI *EFI_SHELL_IS_ROOT_SHELL) (
VOID
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_OPEN_FILE_BY_NAME) (
IN CONST CHAR16 *FileName,
OUT SHELL_FILE_HANDLE *FileHandle,
IN UINT64 OpenMode
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_OPEN_FILE_LIST) (
IN CHAR16 *Path,
IN UINT64 OpenMode,
IN OUT EFI_SHELL_FILE_INFO **FileList
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_OPEN_ROOT) (
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
OUT SHELL_FILE_HANDLE *FileHandle
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_OPEN_ROOT_BY_HANDLE) (
IN EFI_HANDLE DeviceHandle,
OUT SHELL_FILE_HANDLE *FileHandle
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_READ_FILE) (
IN SHELL_FILE_HANDLE FileHandle,
IN OUT UINTN *ReadSize,
IN OUT VOID *Buffer
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_REGISTER_GUID_NAME) (
IN CONST EFI_GUID *Guid,
IN CONST CHAR16 *GuidName
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_REMOVE_DUP_IN_FILE_LIST) (
IN EFI_SHELL_FILE_INFO **FileList
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_SET_ALIAS) (
IN CONST CHAR16 *Command,
IN CONST CHAR16 *Alias,
IN BOOLEAN Replace,
IN BOOLEAN Volatile
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_SET_CUR_DIR) (
IN CONST CHAR16 *FileSystem OPTIONAL,
IN CONST CHAR16 *Dir
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_SET_ENV) (
IN CONST CHAR16 *Name,
IN CONST CHAR16 *Value,
IN BOOLEAN Volatile
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_SET_FILE_INFO) (
IN SHELL_FILE_HANDLE FileHandle,
IN CONST EFI_FILE_INFO *FileInfo
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_SET_FILE_POSITION) (
IN SHELL_FILE_HANDLE FileHandle,
IN UINT64 Position
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_SET_MAP) (
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
IN CONST CHAR16 *Mapping
);
typedef
EFI_STATUS
(EFIAPI *EFI_SHELL_WRITE_FILE) (
IN SHELL_FILE_HANDLE FileHandle,
IN OUT UINTN *BufferSize,
IN VOID *Buffer
);
typedef struct _EFI_SHELL_PROTOCOL {
EFI_SHELL_EXECUTE Execute;
EFI_SHELL_GET_ENV GetEnv;
EFI_SHELL_SET_ENV SetEnv;
EFI_SHELL_GET_ALIAS GetAlias;
EFI_SHELL_SET_ALIAS SetAlias;
EFI_SHELL_GET_HELP_TEXT GetHelpText;
EFI_SHELL_GET_DEVICE_PATH_FROM_MAP GetDevicePathFromMap;
EFI_SHELL_GET_MAP_FROM_DEVICE_PATH GetMapFromDevicePath;
EFI_SHELL_GET_DEVICE_PATH_FROM_FILE_PATH GetDevicePathFromFilePath;
EFI_SHELL_GET_FILE_PATH_FROM_DEVICE_PATH GetFilePathFromDevicePath;
EFI_SHELL_SET_MAP SetMap;
EFI_SHELL_GET_CUR_DIR GetCurDir;
EFI_SHELL_SET_CUR_DIR SetCurDir;
EFI_SHELL_OPEN_FILE_LIST OpenFileList;
EFI_SHELL_FREE_FILE_LIST FreeFileList;
EFI_SHELL_REMOVE_DUP_IN_FILE_LIST RemoveDupInFileList;
EFI_SHELL_BATCH_IS_ACTIVE BatchIsActive;
EFI_SHELL_IS_ROOT_SHELL IsRootShell;
EFI_SHELL_ENABLE_PAGE_BREAK EnablePageBreak;
EFI_SHELL_DISABLE_PAGE_BREAK DisablePageBreak;
EFI_SHELL_GET_PAGE_BREAK GetPageBreak;
EFI_SHELL_GET_DEVICE_NAME GetDeviceName;
EFI_SHELL_GET_FILE_INFO GetFileInfo;
EFI_SHELL_SET_FILE_INFO SetFileInfo;
EFI_SHELL_OPEN_FILE_BY_NAME OpenFileByName;
EFI_SHELL_CLOSE_FILE CloseFile;
EFI_SHELL_CREATE_FILE CreateFile;
EFI_SHELL_READ_FILE ReadFile;
EFI_SHELL_WRITE_FILE WriteFile;
EFI_SHELL_DELETE_FILE DeleteFile;
EFI_SHELL_DELETE_FILE_BY_NAME DeleteFileByName;
EFI_SHELL_GET_FILE_POSITION GetFilePosition;
EFI_SHELL_SET_FILE_POSITION SetFilePosition;
EFI_SHELL_FLUSH_FILE FlushFile;
EFI_SHELL_FIND_FILES FindFiles;
EFI_SHELL_FIND_FILES_IN_DIR FindFilesInDir;
EFI_SHELL_GET_FILE_SIZE GetFileSize;
EFI_SHELL_OPEN_ROOT OpenRoot;
EFI_SHELL_OPEN_ROOT_BY_HANDLE OpenRootByHandle;
EFI_EVENT ExecutionBreak;
UINT32 MajorVersion;
UINT32 MinorVersion;
// Added for Shell 2.1
EFI_SHELL_REGISTER_GUID_NAME RegisterGuidName;
EFI_SHELL_GET_GUID_NAME GetGuidName;
EFI_SHELL_GET_GUID_FROM_NAME GetGuidFromName;
EFI_SHELL_GET_ENV_EX GetEnvEx;
} EFI_SHELL_PROTOCOL;
#define EFI_SHELL_PARAMETERS_PROTOCOL_GUID \
{ 0x752f3136, 0x4e16, 0x4fdc, { 0xa2, 0x2a, 0xe5, 0xf4, 0x68, 0x12, 0xf4, 0xca } }
INTERFACE_DECL(_EFI_SHELL_PARAMETERS_PROTOCOL);
typedef struct _EFI_SHELL_PARAMETERS_PROTOCOL {
CHAR16 **Argv;
UINTN Argc;
SHELL_FILE_HANDLE StdIn;
SHELL_FILE_HANDLE StdOut;
SHELL_FILE_HANDLE StdErr;
} EFI_SHELL_PARAMETERS_PROTOCOL;
#define EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL_GUID \
{ 0x3c7200e9, 0x005f, 0x4ea4, { 0x87, 0xde, 0xa3, 0xdf, 0xac, 0x8a, 0x27, 0xc3 } }
INTERFACE_DECL(_EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL);
typedef
SHELL_STATUS
(EFIAPI *SHELL_COMMAND_HANDLER)(
IN struct _EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
IN EFI_SYSTEM_TABLE *SystemTable,
IN EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,
IN EFI_SHELL_PROTOCOL *Shell
);
typedef
CHAR16*
(EFIAPI *SHELL_COMMAND_GETHELP)(
IN struct _EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
IN CONST CHAR8 *Language
);
typedef struct _EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL {
CONST CHAR16 *CommandName;
SHELL_COMMAND_HANDLER Handler;
SHELL_COMMAND_GETHELP GetHelp;
} EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL;
#endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: efistdarg.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efistdarg.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef _EFISTDARG_H_
#define _EFISTDARG_H_
@ -21,7 +21,7 @@ Revision History
--*/
#ifndef GNU_EFI_USE_EXTERNAL_STDARG
#if !defined(GNU_EFI_USE_EXTERNAL_STDARG) && !defined(_MSC_VER)
typedef __builtin_va_list va_list;
# define va_start(v,l) __builtin_va_start(v,l)

View File

@ -1,4 +1,4 @@
/* $NetBSD: efibind.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efibind.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
@ -27,7 +27,7 @@ Revision History
// Basic int types of various widths
//
#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )
#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L ) && !defined(__cplusplus)
// No ANSI C 1999/2000 stdint.h integer width declarations
@ -77,6 +77,8 @@ Revision History
typedef unsigned char uint8_t;
typedef char int8_t;
#endif
typedef uint32_t uintptr_t;
typedef int32_t intptr_t;
#elif defined(__GNUC__)
#include <stdint.h>
#endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: efisetjmp_arch.h,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efisetjmp_arch.h,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef GNU_EFI_IA32_SETJMP_H
#define GNU_EFI_IA32_SETJMP_H
@ -12,6 +12,6 @@ typedef struct {
UINT32 Ebp;
UINT32 Esp;
UINT32 Eip;
} ALIGN(JMPBUF_ALIGN) jmp_buf;
} ALIGN(JMPBUF_ALIGN) jmp_buf[1];
#endif /* GNU_EFI_IA32_SETJMP_H */

View File

@ -1,4 +1,4 @@
/* $NetBSD: efibind.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efibind.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
@ -26,7 +26,7 @@ Revision History
// Basic int types of various widths
//
#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )
#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L ) && !defined(__cplusplus)
// No ANSI C 1999/2000 stdint.h integer width declarations
@ -64,6 +64,8 @@ Revision History
typedef unsigned char uint8_t;
typedef char int8_t;
#endif
typedef uint64_t uintptr_t;
typedef int64_t intptr_t;
#elif defined(__GNUC__)
#include <stdint.h>
#endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: efisetjmp_arch.h,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efisetjmp_arch.h,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef GNU_EFI_IA64_SETJMP_H
#define GNU_EFI_IA64_SETJMP_H
@ -44,6 +44,6 @@ typedef struct {
UINT64 Predicates;
UINT64 LoopCount;
UINT64 FPSR;
} ALIGN(JMPBUF_ALIGN) jmp_buf;
} ALIGN(JMPBUF_ALIGN) jmp_buf[1];
#endif /* GNU_EFI_IA64_SETJMP_H */

94
sys/external/bsd/gnu-efi/dist/inc/lib.h vendored Normal file
View File

@ -0,0 +1,94 @@
/* $NetBSD: lib.h,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
Copyright (c) 1998 Intel Corporation
Module Name:
lib.h
Abstract:
EFI library header files
Revision History
--*/
#ifdef __GNUC__
#pragma GCC visibility push(hidden)
#endif
#include "efi.h"
#include "efilib.h"
#include "efirtlib.h"
//
// Include non architectural protocols
//
#include "protocol/efivar.h"
#include "protocol/legacyboot.h"
#include "protocol/intload.h"
#include "protocol/vgaclass.h"
#include "protocol/eficonsplit.h"
#include "protocol/adapterdebug.h"
#include "protocol/intload.h"
#include "efigpt.h"
#include "libsmbios.h"
//
// Prototypes
//
VOID
InitializeGuid (
VOID
);
INTN EFIAPI
LibStubStriCmp (
IN EFI_UNICODE_COLLATION_INTERFACE *This,
IN CHAR16 *S1,
IN CHAR16 *S2
);
BOOLEAN EFIAPI
LibStubMetaiMatch (
IN EFI_UNICODE_COLLATION_INTERFACE *This,
IN CHAR16 *String,
IN CHAR16 *Pattern
);
VOID EFIAPI
LibStubStrLwrUpr (
IN EFI_UNICODE_COLLATION_INTERFACE *This,
IN CHAR16 *Str
);
BOOLEAN
LibMatchDevicePaths (
IN EFI_DEVICE_PATH *Multi,
IN EFI_DEVICE_PATH *Single
);
EFI_DEVICE_PATH *
LibDuplicateDevicePathInstance (
IN EFI_DEVICE_PATH *DevPath
);
//
// Globals
//
extern BOOLEAN LibInitialized;
extern BOOLEAN LibFwInstance;
extern EFI_HANDLE LibImageHandle;
extern SIMPLE_TEXT_OUTPUT_INTERFACE *LibRuntimeDebugOut;
extern EFI_UNICODE_COLLATION_INTERFACE *UnicodeInterface;
extern EFI_UNICODE_COLLATION_INTERFACE LibStubUnicodeInterface;
extern EFI_RAISE_TPL LibRuntimeRaiseTPL;
extern EFI_RESTORE_TPL LibRuntimeRestoreTPL;

View File

@ -1,4 +1,4 @@
/* $NetBSD: libsmbios.h,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $ */
/* $NetBSD: libsmbios.h,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef _LIB_SMBIOS_H
#define _LIB_SMBIOS_H
@ -39,6 +39,19 @@ typedef struct {
UINT8 SmbiosBcdRevision;
} SMBIOS_STRUCTURE_TABLE;
typedef struct {
UINT8 AnchorString[5];
UINT8 EntryPointStructureChecksum;
UINT8 EntryPointLength;
UINT8 MajorVersion;
UINT8 MinorVersion;
UINT8 DocRev;
UINT8 EntryPointRevision;
UINT8 Reserved;
UINT32 TableMaximumSize;
UINT64 TableAddress;
} SMBIOS3_STRUCTURE_TABLE;
//
// Please note that SMBIOS structures can be odd byte aligned since the
// unformated section of each record is a set of arbitrary size strings.
@ -129,6 +142,4 @@ typedef union {
} SMBIOS_STRUCTURE_POINTER;
#pragma pack()
#endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: efibind.h,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efibind.h,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
/*
* Copright (C) 2014 - 2015 Linaro Ltd.
@ -19,7 +19,7 @@
* either version 2 of the License, or (at your option) any later version.
*/
#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )
#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L ) && !defined(__cplusplus)
// ANSI C 1999/2000 stdint.h integer width declarations
@ -31,6 +31,8 @@ typedef unsigned short uint16_t;
typedef short int16_t;
typedef unsigned char uint8_t;
typedef signed char int8_t; // unqualified 'char' is unsigned on ARM
typedef uint64_t uintptr_t;
typedef int64_t intptr_t;
#else
#include <stdint.h>

View File

@ -1,4 +1,4 @@
/* $NetBSD: efisetjmp_arch.h,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efisetjmp_arch.h,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef GNU_EFI_MIPS64EL_SETJMP_H
#define GNU_EFI_MIPS64EL_SETJMP_H
@ -31,6 +31,6 @@ typedef struct {
UINT64 F30;
UINT64 F31;
#endif
} ALIGN(JMPBUF_ALIGN) jmp_buf;
} ALIGN(JMPBUF_ALIGN) jmp_buf[1];
#endif /* GNU_EFI_MIPS64EL_SETJMP_H */

View File

@ -0,0 +1,133 @@
/* $NetBSD: efibind.h,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $ */
/*
* Copright (C) 2014 - 2015 Linaro Ltd.
* Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice and this list of conditions, without modification.
* 2. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* Alternatively, this software may be distributed under the terms of the
* GNU General Public License as published by the Free Software Foundation;
* either version 2 of the License, or (at your option) any later version.
*/
#include <stdint.h>
//
// Basic EFI types of various widths
//
typedef uint64_t UINT64;
typedef int64_t INT64;
typedef uint32_t UINT32;
typedef int32_t INT32;
typedef uint16_t UINT16;
typedef int16_t INT16;
typedef uint8_t UINT8;
typedef int8_t INT8;
#ifndef __WCHAR_TYPE__
#define __WCHAR_TYPE__ short
#endif
typedef __WCHAR_TYPE__ WCHAR;
#ifndef BOOLEAN
typedef uint8_t BOOLEAN;
#endif
#undef VOID
#define VOID void
typedef int64_t INTN;
typedef uint64_t UINTN;
#define EFI_ERROR_MASK 0x8000000000000000
#define EFIERR(a) (EFI_ERROR_MASK | a)
#define EFIERR_OEM(a) (0xc000000000000000 | a)
#define BAD_POINTER 0xFBFBFBFBFBFBFBFB
#define MAX_ADDRESS 0xFFFFFFFFFFFFFFFF
#define BREAKPOINT() while(1);
//
// Pointers must be aligned to these address to function
//
#define MIN_ALIGNMENT_SIZE 8
#define ALIGN_VARIABLE(Value, Adjustment) \
(UINTN)Adjustment = 0; \
if((UINTN)Value % MIN_ALIGNMENT_SIZE) \
(UINTN)Adjustment = MIN_ALIGNMENT_SIZE - ((UINTN)Value % MIN_ALIGNMENT_SIZE); \
Value = (UINTN)Value + (UINTN)Adjustment
//
// Define macros to build data structure signatures from characters.
//
#define EFI_SIGNATURE_16(A,B) ((A) | (B<<8))
#define EFI_SIGNATURE_32(A,B,C,D) (EFI_SIGNATURE_16(A,B) | (EFI_SIGNATURE_16(C,D) << 16))
#define EFI_SIGNATURE_64(A,B,C,D,E,F,G,H) (EFI_SIGNATURE_32(A,B,C,D) | ((UINT64)(EFI_SIGNATURE_32(E,F,G,H)) << 32))
//
// EFIAPI - prototype calling convention for EFI function pointers
// BOOTSERVICE - prototype for implementation of a boot service interface
// RUNTIMESERVICE - prototype for implementation of a runtime service interface
// RUNTIMEFUNCTION - prototype for implementation of a runtime function that is not a service
// RUNTIME_CODE - pragma macro for declaring runtime code
//
#ifndef EFIAPI // Forces EFI calling conventions reguardless of compiler options
#define EFIAPI // Substitute expresion to force C calling convention
#endif
#define BOOTSERVICE
#define RUNTIMESERVICE
#define RUNTIMEFUNCTION
#define RUNTIME_CODE(a) alloc_text("rtcode", a)
#define BEGIN_RUNTIME_DATA() data_seg("rtdata")
#define END_RUNTIME_DATA() data_seg("")
#define VOLATILE volatile
#define MEMORY_FENCE __sync_synchronize
//
// When build similiar to FW, then link everything together as
// one big module. For the MSVC toolchain, we simply tell the
// linker what our driver init function is using /ENTRY.
//
#if defined(_MSC_EXTENSIONS)
#define EFI_DRIVER_ENTRY_POINT(InitFunction) \
__pragma(comment(linker, "/ENTRY:" # InitFunction))
#else
#define EFI_DRIVER_ENTRY_POINT(InitFunction) \
UINTN \
InitializeDriver ( \
VOID *ImageHandle, \
VOID *SystemTable \
) \
{ \
return InitFunction(ImageHandle, \
SystemTable); \
} \
\
EFI_STATUS efi_main( \
EFI_HANDLE image, \
EFI_SYSTEM_TABLE *systab \
) __attribute__((weak, \
alias ("InitializeDriver")));
#endif
#define LOAD_INTERNAL_DRIVER(_if, type, name, entry) \
(_if)->LoadInternal(type, name, entry)
//
// Some compilers don't support the forward reference construct:
// typedef struct XXXXX
//
// The following macro provide a workaround for such cases.
#define INTERFACE_DECL(x) struct x
#define uefi_call_wrapper(func, va_num, ...) func(__VA_ARGS__)
#define EFI_FUNCTION

View File

@ -0,0 +1,9 @@
/* $NetBSD: efilibplat.h,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $ */
/* SPDX-License-Identifier: GPL-2.0+ */
VOID
InitializeLibPlatform (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
);

View File

@ -0,0 +1,40 @@
/* $NetBSD: efisetjmp_arch.h,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef GNU_EFI_RISCV64_SETJMP_H
#define GNU_EFI_RISCV64_SETJMP_H
#define JMPBUF_ALIGN 8
typedef struct {
/* GP regs */
UINT64 s0;
UINT64 s1;
UINT64 s2;
UINT64 s3;
UINT64 s4;
UINT64 s5;
UINT64 s6;
UINT64 s7;
UINT64 s8;
UINT64 s9;
UINT64 s10;
UINT64 s11;
UINT64 sp;
UINT64 ra;
/* FP regs */
UINT64 fs0;
UINT64 fs1;
UINT64 fs2;
UINT64 fs3;
UINT64 fs4;
UINT64 fs5;
UINT64 fs6;
UINT64 fs7;
UINT64 fs8;
UINT64 fs9;
UINT64 fs10;
UINT64 fs11;
} ALIGN(JMPBUF_ALIGN) jmp_buf[1];
#endif /* GNU_EFI_RISCV64_SETJMP_H */

View File

@ -1,4 +1,4 @@
/* $NetBSD: efibind.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efibind.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
@ -24,7 +24,9 @@ Revision History
#pragma pack()
#endif
#if defined(GNU_EFI_USE_MS_ABI)
#if defined(_MSC_VER)
#define HAVE_USE_MS_ABI 1
#elif defined(GNU_EFI_USE_MS_ABI)
#if (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)))||(defined(__clang__) && (__clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 2)))
#define HAVE_USE_MS_ABI 1
#else
@ -36,7 +38,7 @@ Revision History
// Basic int types of various widths
//
#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )
#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L ) && !defined(__cplusplus)
// No ANSI C 1999/2000 stdint.h integer width declarations
@ -86,7 +88,9 @@ Revision History
typedef unsigned char uint8_t;
typedef char int8_t;
#endif
#elif defined(__GNUC__)
typedef uint64_t uintptr_t;
typedef int64_t intptr_t;
#else
#include <stdint.h>
#endif

View File

@ -1,4 +1,4 @@
/* $NetBSD: efisetjmp_arch.h,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efisetjmp_arch.h,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
#ifndef GNU_EFI_X86_64_SETJMP_H
#define GNU_EFI_X86_64_SETJMP_H
@ -19,6 +19,6 @@ typedef struct {
UINT64 Rip;
UINT64 MxCsr;
UINT8 XmmBuffer[160]; // XMM6 - XMM15
} ALIGN(JMPBUF_ALIGN) jmp_buf;
} ALIGN(JMPBUF_ALIGN) jmp_buf[1];
#endif /* GNU_EFI_X86_64_SETJMP_H */

View File

@ -45,7 +45,7 @@ TOPDIR = $(SRCDIR)/..
CDIR = $(TOPDIR)/..
FILES = boxdraw smbios console crc data debug dpath \
error event exit guid hand hw init lock \
misc print sread str cmdline \
misc pause print sread str cmdline\
runtime/rtlock runtime/efirtlib runtime/rtstr runtime/vm runtime/rtdata \
$(ARCH)/initplat $(ARCH)/math $(ARCH)/setjmp
@ -64,7 +64,7 @@ endif
OBJS = $(FILES:%=%.o)
SUBDIRS = ia32 x86_64 ia64 aarch64 arm mips64el runtime
SUBDIRS = ia32 x86_64 ia64 aarch64 arm mips64el riscv64 runtime
LIBDIRINSTALL = $(INSTALLROOT)$(LIBDIR)

View File

@ -1,10 +1,10 @@
/* $NetBSD: cmdline.c,v 1.1.1.1 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: cmdline.c,v 1.1.1.2 2021/09/30 18:50:09 jmcneill Exp $ */
#include "lib.h"
#include "efiprot.h"
#include "efishell.h"
#include "efishellintf.h"
#include "efishellparm.h"
#ifndef MAX_ARGV_CONTENTS_SIZE
# define MAX_CMDLINE_SIZE 1024
@ -79,8 +79,6 @@ INTN GetShellArgcArgv(EFI_HANDLE ImageHandle, CHAR16 **Argv[])
// Code inspired from EDK2's
// ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.c (BSD)
EFI_STATUS Status;
static const EFI_GUID EfiShellParametersProtocolGuid
= EFI_SHELL_PARAMETERS_PROTOCOL_GUID;
static const EFI_GUID ShellInterfaceProtocolGuid
= SHELL_INTERFACE_PROTOCOL_GUID;
EFI_SHELL_PARAMETERS_PROTOCOL *EfiShellParametersProtocol = NULL;
@ -88,7 +86,7 @@ INTN GetShellArgcArgv(EFI_HANDLE ImageHandle, CHAR16 **Argv[])
Status = uefi_call_wrapper(BS->OpenProtocol, 6,
ImageHandle,
(EFI_GUID*)&EfiShellParametersProtocolGuid,
(EFI_GUID*)&ShellParametersProtocolGuid,
(VOID **)&EfiShellParametersProtocol,
ImageHandle,
NULL,

View File

@ -1,4 +1,4 @@
/* $NetBSD: data.c,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: data.c,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
@ -97,6 +97,7 @@ EFI_GUID NullGuid = { 0,0,0,{0,0,0,0,0,0,0,0} };
EFI_GUID gEfiDevicePathProtocolGuid = EFI_DEVICE_PATH_PROTOCOL_GUID;
EFI_GUID gEfiDevicePathToTextProtocolGuid = EFI_DEVICE_PATH_TO_TEXT_PROTOCOL_GUID;
EFI_GUID gEfiDevicePathFromTextProtocolGuid = EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL_GUID;
EFI_GUID gEfiDevicePathUtilitiesProtocolGuid = EFI_DEVICE_PATH_UTILITIES_PROTOCOL_GUID;
EFI_GUID gEfiLoadedImageProtocolGuid = EFI_LOADED_IMAGE_PROTOCOL_GUID;
EFI_GUID gEfiSimpleTextInProtocolGuid = EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID;
EFI_GUID gEfiSimpleTextOutProtocolGuid = EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID;
@ -131,7 +132,7 @@ EFI_GUID gEfiEbcProtocolGuid = EFI_EBC_PROTOCOL_GUID;
EFI_GUID gEfiFileInfoGuid = EFI_FILE_INFO_ID;
EFI_GUID gEfiFileSystemInfoGuid = EFI_FILE_SYSTEM_INFO_ID;
EFI_GUID gEfiFileSystemVolumeLabelInfoIdGuid = EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID;
EFI_GUID gEfiFileSystemVolumeLabelInfoIdGuid = EFI_FILE_SYSTEM_VOLUME_LABEL_ID;
//
// Reference implementation public protocol IDs
@ -180,7 +181,9 @@ EFI_GUID UnknownDevice = UNKNOWN_DEVICE_GUID;
EFI_GUID MpsTableGuid = MPS_TABLE_GUID;
EFI_GUID AcpiTableGuid = ACPI_TABLE_GUID;
EFI_GUID SMBIOSTableGuid = SMBIOS_TABLE_GUID;
EFI_GUID SMBIOS3TableGuid = SMBIOS3_TABLE_GUID;
EFI_GUID SalSystemTableGuid = SAL_SYSTEM_TABLE_GUID;
EFI_GUID EfiDtbTableGuid = EFI_DTB_TABLE_GUID;
//
// Network protocol GUIDs
@ -203,3 +206,15 @@ EFI_GUID AbsolutePointerProtocol = EFI_ABSOLUTE_POINTER_PROTOCOL_GUID;
//
EFI_GUID gEfiDebugImageInfoTableGuid = EFI_DEBUG_IMAGE_INFO_TABLE_GUID;
EFI_GUID gEfiDebugSupportProtocolGuid = EFI_DEBUG_SUPPORT_PROTOCOL_GUID;
//
// Console extension protocol GUIDs
//
EFI_GUID SimpleTextInputExProtocol = EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID;
//
// Shell protocol GUIDs
//
EFI_GUID ShellProtocolGuid = EFI_SHELL_PROTOCOL_GUID;
EFI_GUID ShellParametersProtocolGuid = EFI_SHELL_PARAMETERS_PROTOCOL_GUID;
EFI_GUID ShellDynamicCommandProtocolGuid = EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL_GUID;

View File

@ -1,4 +1,4 @@
/* $NetBSD: dpath.c,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: dpath.c,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
@ -661,7 +661,8 @@ _DevPath1394 (
F1394_DEVICE_PATH *F1394;
F1394 = DevPath;
CatPrint(Str, L"1394(%g)", &F1394->Guid);
// Guid has format of IEEE-EUI64
CatPrint(Str, L"I1394(%016lx)", F1394->Guid);
}
@ -865,9 +866,9 @@ _DevPathInfiniBand (
INFINIBAND_DEVICE_PATH *InfiniBand;
InfiniBand = DevPath;
CatPrint( Str , L"Infiniband(0x%x,%g,0x%lx,0x%lx,0x%lx)" ,
InfiniBand-> ResourceFlags , InfiniBand-> PortGid , InfiniBand-> ServiceId ,
InfiniBand-> TargetPortId , InfiniBand-> DeviceId ) ;
CatPrint(Str, L"Infiniband(0x%x,%g,0x%lx,0x%lx,0x%lx)",
InfiniBand->ResourceFlags, InfiniBand->PortGid, InfiniBand->ServiceId,
InfiniBand->TargetPortId, InfiniBand->DeviceId);
}
static VOID
@ -891,17 +892,19 @@ _DevPathUart (
}
if (Uart->BaudRate == 0) {
CatPrint(Str, L"Uart(DEFAULT %c",Uart->BaudRate,Parity);
CatPrint(Str, L"Uart(DEFAULT,");
} else {
CatPrint(Str, L"Uart(%d %c",Uart->BaudRate,Parity);
CatPrint(Str, L"Uart(%ld,", Uart->BaudRate);
}
if (Uart->DataBits == 0) {
CatPrint(Str, L"D");
CatPrint(Str, L"DEFAULT,");
} else {
CatPrint(Str, L"%d",Uart->DataBits);
CatPrint(Str, L"%d,", Uart->DataBits);
}
CatPrint(Str, L"%c,", Parity);
switch (Uart->StopBits) {
case 0 : CatPrint(Str, L"D)"); break;
case 1 : CatPrint(Str, L"1)"); break;
@ -935,21 +938,20 @@ _DevPathHardDrive (
Hd = DevPath;
switch (Hd->SignatureType) {
case SIGNATURE_TYPE_MBR:
CatPrint(Str, L"HD(Part%d,Sig%08X)",
CatPrint(Str, L"HD(%d,MBR,0x%08x)",
Hd->PartitionNumber,
*((UINT32 *)(&(Hd->Signature[0])))
);
break;
case SIGNATURE_TYPE_GUID:
CatPrint(Str, L"HD(Part%d,Sig%g)",
CatPrint(Str, L"HD(%d,GPT,%g)",
Hd->PartitionNumber,
(EFI_GUID *) &(Hd->Signature[0])
);
break;
default:
CatPrint(Str, L"HD(Part%d,MBRType=%02x,SigType=%02x)",
CatPrint(Str, L"HD(%d,%d,0)",
Hd->PartitionNumber,
Hd->MBRType,
Hd->SignatureType
);
break;

View File

@ -1,4 +1,4 @@
/* $NetBSD: error.c,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: error.c,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
@ -58,7 +58,7 @@ struct {
{ EFI_COMPROMISED_DATA, L"Compromised Data"},
// warnings
{ EFI_WARN_UNKOWN_GLYPH, L"Warning Unknown Glyph"},
{ EFI_WARN_UNKNOWN_GLYPH, L"Warning Unknown Glyph"},
{ EFI_WARN_DELETE_FAILURE, L"Warning Delete Failure"},
{ EFI_WARN_WRITE_FAILURE, L"Warning Write Failure"},
{ EFI_WARN_BUFFER_TOO_SMALL, L"Warning Buffer Too Small"},
@ -81,5 +81,5 @@ StatusToString (
}
}
SPrint (Buffer, 0, L"%X", Status);
UnicodeSPrint (Buffer, 0, L"%X", Status);
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: guid.c,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: guid.c,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
@ -156,7 +156,7 @@ GuidToString (
for (Index=0; KnownGuids[Index].Guid; Index++) {
if (CompareGuid(Guid, KnownGuids[Index].Guid) == 0) {
SPrint (Buffer, 0, KnownGuids[Index].GuidName);
UnicodeSPrint (Buffer, 0, KnownGuids[Index].GuidName);
return ;
}
}
@ -165,7 +165,7 @@ GuidToString (
// Else dump it
//
SPrint (Buffer, 0, L"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
UnicodeSPrint (Buffer, 0, L"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
Guid->Data1,
Guid->Data2,
Guid->Data3,

View File

@ -1,4 +1,4 @@
/* $NetBSD: hand.c,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: hand.c,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
@ -490,6 +490,7 @@ LibInstallProtocolInterfaces (
Index += 1;
}
va_end (args);
//
// If there was an error, remove all the interfaces that were
@ -508,6 +509,7 @@ LibInstallProtocolInterfaces (
}
*Handle = OldHandle;
va_end (args);
}
//
@ -554,6 +556,7 @@ LibUninstallProtocolInterfaces (
DEBUG((D_ERROR, "LibUninstallProtocolInterfaces: failed %g, %r\n", Protocol, Handle));
}
}
va_end (args);
}
@ -609,6 +612,7 @@ LibReinstallProtocolInterfaces (
Index += 1;
}
va_end (args);
//
// If there was an error, undo all the interfaces that were
@ -627,6 +631,7 @@ LibReinstallProtocolInterfaces (
Index -= 1;
}
va_end (args);
}
//

View File

@ -1,4 +1,4 @@
/* $NetBSD: misc.c,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: misc.c,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
@ -248,7 +248,7 @@ LibGetVariableAndSize (
OUT UINTN *VarSize
)
{
EFI_STATUS Status;
EFI_STATUS Status = EFI_SUCCESS;
VOID *Buffer;
UINTN BufferSize;
@ -388,6 +388,8 @@ LibInsertToTailOfBootOrder (
VarSize += sizeof(UINT16);
NewBootOptionArray = AllocatePool (VarSize);
if (!NewBootOptionArray)
return EFI_OUT_OF_RESOURCES;
for (Index = 0; Index < ((VarSize/sizeof(UINT16)) - 1); Index++) {
NewBootOptionArray[Index] = BootOptionArray[Index];
@ -405,9 +407,7 @@ LibInsertToTailOfBootOrder (
VarSize, (VOID*) NewBootOptionArray
);
if (NewBootOptionArray) {
FreePool (NewBootOptionArray);
}
if (BootOptionArray) {
FreePool (BootOptionArray);
}

View File

@ -0,0 +1,17 @@
/* $NetBSD: pause.c,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $ */
#include "lib.h"
VOID
Pause(
VOID
)
// Pause until any key is pressed
{
EFI_INPUT_KEY Key;
EFI_STATUS Status EFI_UNUSED;
WaitForSingleEvent(ST->ConIn->WaitForKey, 0);
Status = uefi_call_wrapper(ST->ConIn->ReadKeyStroke, 2, ST->ConIn, &Key);
ASSERT(!EFI_ERROR(Status));
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: print.c,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: print.c,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
@ -317,7 +317,7 @@ _SPrint (
IN VOID *Context,
IN CHAR16 *Buffer
)
// Append string worker for SPrint, PoolPrint and CatPrint
// Append string worker for UnicodeSPrint, PoolPrint and CatPrint
{
UINTN len;
POOL_PRINT *spc;
@ -407,7 +407,7 @@ _PoolCatPrint (
IN OUT POOL_PRINT *spc,
IN INTN (EFIAPI *Output)(VOID *context, CHAR16 *str)
)
// Dispath function for SPrint, PoolPrint, and CatPrint
// Dispatch function for UnicodeSPrint, PoolPrint, and CatPrint
{
PRINT_STATE ps;
@ -423,7 +423,7 @@ _PoolCatPrint (
UINTN
VSPrint (
UnicodeVSPrint (
OUT CHAR16 *Str,
IN UINTN StrSize,
IN CONST CHAR16 *fmt,
@ -465,7 +465,7 @@ Returns:
}
UINTN
SPrint (
UnicodeSPrint (
OUT CHAR16 *Str,
IN UINTN StrSize,
IN CONST CHAR16 *fmt,
@ -496,7 +496,7 @@ Returns:
UINTN len;
va_start (args, fmt);
len = VSPrint(Str, StrSize, fmt, args);
len = UnicodeVSPrint(Str, StrSize, fmt, args);
va_end (args);
return len;
@ -812,7 +812,7 @@ _IPrint (
UINTN
APrint (
AsciiPrint (
IN CONST CHAR8 *fmt,
...
)
@ -844,6 +844,64 @@ Returns:
}
UINTN
AsciiVSPrint (
OUT CHAR8 *Str,
IN UINTN StrSize,
IN CONST CHAR8 *fmt,
va_list args
)
/*++
Routine Description:
Prints a formatted ascii string to a buffer using a va_list
Arguments:
Str - Output buffer to print the formatted string into
StrSize - Size of Str. String is truncated to this size.
A size of 0 means there is no limit
fmt - The format string
args - va_list
Returns:
String length returned in buffer
--*/
// Use UnicodeVSPrint() and convert back to ASCII
{
CHAR16 *UnicodeStr, *UnicodeFmt;
UINTN i, Len;
UnicodeStr = AllocatePool(StrSize * sizeof(CHAR16));
if (!UnicodeStr)
return 0;
UnicodeFmt = PoolPrint(L"%a", fmt);
if (!UnicodeFmt) {
FreePool(UnicodeStr);
return 0;
}
Len = UnicodeVSPrint(UnicodeStr, StrSize, UnicodeFmt, args);
FreePool(UnicodeFmt);
// The strings are ASCII so just do a plain Unicode conversion
for (i = 0; i < Len; i++)
Str[i] = (CHAR8)UnicodeStr[i];
Str[Len] = 0;
FreePool(UnicodeStr);
return Len;
}
STATIC
VOID
PFLUSH (
@ -1321,7 +1379,7 @@ ValueToString (
*(p1++) = (CHAR8)r + '0';
}
c = (Comma ? ca[(p1 - str) % 3] : 999) + 1;
c = (UINTN) (Comma ? ca[(p1 - str) % 3] : 999) + 1;
while (p1 != str) {
c -= 1;
@ -1411,7 +1469,7 @@ TimeToString (
Year = Time->Year % 100;
// bugbug: for now just print it any old way
SPrint (Buffer, 0, L"%02d/%02d/%02d %02d:%02d%c",
UnicodeSPrint (Buffer, 0, L"%02d/%02d/%02d %02d:%02d%c",
Time->Month,
Time->Day,
Year,

View File

@ -0,0 +1,13 @@
/* $NetBSD: initplat.c,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $ */
// SPDX-License-Identifier: GPL-2.0+
#include "lib.h"
VOID
InitializeLibPlatform (
IN EFI_HANDLE ImageHandle EFI_UNUSED,
IN EFI_SYSTEM_TABLE *SystemTable EFI_UNUSED
)
{
}

View File

@ -0,0 +1,64 @@
/* $NetBSD: math.c,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $ */
// SPDX-License-Identifier: BSD-2-Clause-Patent
/*
* This code is based on EDK II MdePkg/Library/BaseLib/Math64.c
* Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.
*/
#include "lib.h"
/**
* LShiftU64() - left shift
*/
UINT64
LShiftU64 (
IN UINT64 Operand,
IN UINTN Count
)
{
return Operand << Count;
}
/**
* RShiftU64() - right shift
*/
UINT64
RShiftU64 (
IN UINT64 Operand,
IN UINTN Count
)
{
return Operand >> Count;
}
/**
* MultU64x32() - multiply
*/
UINT64
MultU64x32 (
IN UINT64 Multiplicand,
IN UINTN Multiplier
)
{
return Multiplicand * Multiplier;
}
/**
* DivU64x32() - divide
*/
UINT64
DivU64x32 (
IN UINT64 Dividend,
IN UINTN Divisor,
OUT UINTN *Remainder OPTIONAL
)
{
ASSERT(Divisor != 0);
if (Remainder) {
*Remainder = Dividend % Divisor;
}
return Dividend / Divisor;
}

View File

@ -0,0 +1,71 @@
/* $NetBSD: setjmp.S,v 1.1.1.1 2021/09/30 18:50:09 jmcneill Exp $ */
// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright Heinrich Schuchardt <xypron.glpk@gmx.de>
*/
.text
.p2align 3
#define GREG_LIST \
REG_ONE(s0, 0); \
REG_ONE(s1, 8); \
REG_ONE(s2, 16); \
REG_ONE(s3, 24); \
REG_ONE(s4, 32); \
REG_ONE(s5, 40); \
REG_ONE(s6, 48); \
REG_ONE(s7, 56); \
REG_ONE(s8, 64); \
REG_ONE(s9, 72); \
REG_ONE(s10, 80); \
REG_ONE(s11, 88); \
REG_ONE(sp, 96); \
REG_ONE(ra, 104);
#define FREG_LIST \
FREG_ONE(fs0, 112); \
FREG_ONE(fs1, 120); \
FREG_ONE(fs2, 128); \
FREG_ONE(fs3, 136); \
FREG_ONE(fs4, 144); \
FREG_ONE(fs5, 152); \
FREG_ONE(fs6, 160); \
FREG_ONE(fs7, 168); \
FREG_ONE(fs8, 176); \
FREG_ONE(fs9, 184); \
FREG_ONE(fs10, 192); \
FREG_ONE(fs11, 200);
#define REG_ONE(R, P) sd R, P(a0)
#define FREG_ONE(R, P) fsd R, P(a0)
.globl setjmp
.type setjmp, @function
setjmp:
GREG_LIST
#ifndef __riscv_float_abi_soft
FREG_LIST
#endif
li a0, 0
ret
#undef REG_ONE
#undef FREG_ONE
#define REG_ONE(R, P) ld R, P(a0)
#define FREG_ONE(R, P) fld R, P(a0)
.globl longjmp
.type longjmp, @function
longjmp:
GREG_LIST
#ifndef __riscv_float_abi_soft
FREG_LIST
#endif
seqz a0, a1
add a0, a0, a1
ret

View File

@ -1,4 +1,4 @@
/* $NetBSD: efirtlib.c,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: efirtlib.c,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
@ -70,11 +70,21 @@ RtCopyMem (
IN UINTN len
)
{
CHAR8 *d;
CONST CHAR8 *s = Src;
d = Dest;
while (len--) {
*(d++) = *(s++);
CHAR8 *d = (CHAR8*)Dest;
CHAR8 *s = (CHAR8*)Src;
if (d == NULL || s == NULL || s == d)
return;
// If the beginning of the destination range overlaps with the end of
// the source range, make sure to start the copy from the end so that
// we don't end up overwriting source data that we need for the copy.
if ((d > s) && (d < s + len)) {
for (d += len, s += len; len--; )
*--d = *--s;
} else {
while (len--)
*d++ = *s++;
}
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: rtstr.c,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: rtstr.c,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
@ -20,7 +20,7 @@ Revision History
#include "lib.h"
#ifndef __GNUC__
#pragma RUNTIME_CODE(RtAcquireLock)
#pragma RUNTIME_CODE(RtStrCmp)
#endif
INTN
RUNTIMEFUNCTION
@ -73,12 +73,12 @@ RtStrnCpy (
{
UINTN Size = RtStrnLen(Src, Len);
if (Size != Len)
RtSetMem(Dest + Len, '\0', (Len - Size) * sizeof(CHAR16));
RtSetMem(Dest + Size, (Len - Size) * sizeof(CHAR16), '\0');
RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
}
#ifndef __GNUC__
#pragma RUNTIME_CODE(RtStrCpy)
#pragma RUNTIME_CODE(RtStpCpy)
#endif
CHAR16 *
RUNTIMEFUNCTION
@ -96,7 +96,7 @@ RtStpCpy (
}
#ifndef __GNUC__
#pragma RUNTIME_CODE(RtStrnCpy)
#pragma RUNTIME_CODE(RtStpnCpy)
#endif
CHAR16 *
RUNTIMEFUNCTION
@ -109,7 +109,7 @@ RtStpnCpy (
{
UINTN Size = RtStrnLen(Src, Len);
if (Size != Len)
RtSetMem(Dest + Len, '\0', (Len - Size) * sizeof(CHAR16));
RtSetMem(Dest + Size, (Len - Size) * sizeof(CHAR16), '\0');
RtCopyMem(Dest, Src, Size * sizeof(CHAR16));
return Dest + Size;
}
@ -124,11 +124,11 @@ RtStrCat (
IN CONST CHAR16 *Src
)
{
RtStrCpy(Dest+StrLen(Dest), Src);
RtStrCpy(Dest+RtStrLen(Dest), Src);
}
#ifndef __GNUC__
#pragma RUNTIME_CODE(RtStrCat)
#pragma RUNTIME_CODE(RtStrnCat)
#endif
VOID
RUNTIMEFUNCTION
@ -138,7 +138,12 @@ RtStrnCat (
IN UINTN Len
)
{
RtStrnCpy(Dest+StrLen(Dest), Src, Len);
UINTN DestSize, Size;
DestSize = RtStrLen(Dest);
Size = RtStrnLen(Src, Len);
RtCopyMem(Dest + DestSize, Src, Size * sizeof(CHAR16));
Dest[DestSize + Size] = '\0';
}
#ifndef __GNUC__
@ -166,7 +171,7 @@ RtStrnLen (
IN CONST CHAR16 *s1,
IN UINTN Len
)
// copy strings
// string length
{
UINTN i;
for (i = 0; *s1 && i < Len; i++)

View File

@ -1,4 +1,4 @@
/* $NetBSD: smbios.c,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: smbios.c,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
@ -46,7 +46,7 @@ LibGetSmbiosSystemGuidAndSerialNumber (
}
Smbios.Hdr = (SMBIOS_HEADER *)SmbiosTable->TableAddress;
SmbiosEnd.Raw = (UINT8 *)(SmbiosTable->TableAddress + SmbiosTable->TableLength);
SmbiosEnd.Raw = (UINT8 *)((UINTN)SmbiosTable->TableAddress + SmbiosTable->TableLength);
for (Index = 0; Index < SmbiosTable->TableLength ; Index++) {
if (Smbios.Hdr->Type == 1) {
if (Smbios.Hdr->Length < 0x19) {

View File

@ -1,4 +1,4 @@
/* $NetBSD: str.c,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
/* $NetBSD: str.c,v 1.1.1.3 2021/09/30 18:50:09 jmcneill Exp $ */
/*++
@ -276,7 +276,7 @@ xtoi (
CHAR16 c;
// skip preceeding white space
while (*str && *str == ' ') {
while (*str == ' ') {
str += 1;
}
@ -288,7 +288,7 @@ xtoi (
}
if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F')) {
u = (u << 4) | (c - (c >= 'A' ? 'A'-10 : '0'));
u = (u << 4) | ((UINTN)c - (c >= 'A' ? 'A'-10 : '0'));
} else {
break;
}
@ -307,7 +307,7 @@ Atoi (
CHAR16 c;
// skip preceeding white space
while (*str && *str == ' ') {
while (*str == ' ') {
str += 1;
}