Index: sys/boot/efi/Makefile =================================================================== --- sys/boot/efi/Makefile +++ sys/boot/efi/Makefile @@ -14,7 +14,8 @@ .if ${MACHINE_CPUARCH} == "aarch64" || \ ${MACHINE_CPUARCH} == "amd64" || \ - ${MACHINE_CPUARCH} == "arm" + ${MACHINE_CPUARCH} == "arm" || \ + ${MACHINE_CPUARCH} == "i386" SUBDIR+= libefi loader boot1 .endif Index: sys/boot/efi/loader/arch/i386/efimd.c =================================================================== --- sys/boot/efi/loader/arch/i386/efimd.c +++ sys/boot/efi/loader/arch/i386/efimd.c @@ -48,7 +48,10 @@ static UINTN mapkey; -uint64_t +int ldr_bootinfo(struct bootinfo *, uint64_t *); +int ldr_enter(const char *); + +static uint64_t ldr_alloc(vm_offset_t va) { Index: sys/boot/efi/loader/arch/i386/elf32_freebsd.c =================================================================== --- sys/boot/efi/loader/arch/i386/elf32_freebsd.c +++ sys/boot/efi/loader/arch/i386/elf32_freebsd.c @@ -35,12 +35,16 @@ #include #include +#include +#include + #include "bootstrap.h" #include "../libi386/libi386.h" #include "../btx/lib/btxv86.h" extern void __exec(caddr_t addr, ...); - +extern int bi_load(char *args, vm_offset_t *modulep, vm_offset_t *kernendp); +extern int ldr_enter(const char *kernel); static int elf32_exec(struct preloaded_file *amp); static int elf32_obj_exec(struct preloaded_file *amp); @@ -72,14 +76,14 @@ ehdr = (Elf_Ehdr *)&(md->md_data); efi_time_fini(); - err = bi_load(fp->f_args, &boothowto, &bootdev, &bootinfop, &modulep, &kernend); + err = bi_load(fp->f_args, &modulep, &kernend); if (err != 0) { efi_time_init(); return(err); } entry = ehdr->e_entry & 0xffffff; - printf("Start @ 0x%lx ...\n", entry); + printf("Start @ 0x%x ...\n", entry); ldr_enter(fp->f_name); Index: sys/boot/efi/loader/arch/i386/exec.c =================================================================== --- sys/boot/efi/loader/arch/i386/exec.c +++ sys/boot/efi/loader/arch/i386/exec.c @@ -36,6 +36,12 @@ uint32_t __base; struct __v86 __v86; +/* XXX - Needed for btxld to link the binary; do not remove. */ +static void +exit(int x) +{ +} + void __v86int() { Index: sys/boot/efi/loader/copy.c =================================================================== --- sys/boot/efi/loader/copy.c +++ sys/boot/efi/loader/copy.c @@ -40,8 +40,12 @@ #include "loader_efi.h" #ifndef EFI_STAGING_SIZE +#ifdef __i386__ +#define EFI_STAGING_SIZE 48 +#else #define EFI_STAGING_SIZE 64 #endif +#endif #define STAGE_PAGES EFI_SIZE_TO_PAGES((EFI_STAGING_SIZE) * 1024 * 1024) Index: sys/boot/ficl/loader.c =================================================================== --- sys/boot/ficl/loader.c +++ sys/boot/ficl/loader.c @@ -800,7 +800,7 @@ } -#ifdef __i386__ +#if 0 /* * pcibios-device-count (devid -- count) * @@ -1004,7 +1004,7 @@ dictAppendWord(dp, "pnphandlers",ficlPnphandlers, FW_DEFAULT); #endif #endif -#ifdef __i386__ +#if 0 dictAppendWord(dp, "pcibios-device-count", ficlPciBiosCountDevices, FW_DEFAULT); dictAppendWord(dp, "pcibios-read-config", ficlPciBiosReadConfig, FW_DEFAULT); dictAppendWord(dp, "pcibios-write-config", ficlPciBiosWriteConfig, FW_DEFAULT); Index: sys/boot/i386/libi386/libi386.h =================================================================== --- sys/boot/i386/libi386/libi386.h +++ sys/boot/i386/libi386/libi386.h @@ -103,6 +103,7 @@ extern uint32_t high_heap_size; /* extended memory region available */ extern vm_offset_t high_heap_base; /* for use as the heap */ +#if 0 void biospci_detect(void); int biospci_count_device_type(uint32_t devid); int biospci_find_devclass(uint32_t class, int index, uint32_t *locator); @@ -110,6 +111,7 @@ int biospci_write_config(uint32_t locator, int offset, int width, uint32_t val); int biospci_read_config(uint32_t locator, int offset, int width, uint32_t *val); uint32_t biospci_locator(int8_t bus, uint8_t device, uint8_t function); +#endif void biosacpi_detect(void);