summaryrefslogtreecommitdiffstats
path: root/sys/boot/ia64/efi
diff options
context:
space:
mode:
Diffstat (limited to 'sys/boot/ia64/efi')
-rw-r--r--sys/boot/ia64/efi/Makefile59
-rw-r--r--sys/boot/ia64/efi/conf.c82
-rw-r--r--sys/boot/ia64/efi/efimd.c264
-rw-r--r--sys/boot/ia64/efi/ldscript.ia6473
-rw-r--r--sys/boot/ia64/efi/main.c618
-rw-r--r--sys/boot/ia64/efi/start.S290
-rw-r--r--sys/boot/ia64/efi/version27
7 files changed, 0 insertions, 1413 deletions
diff --git a/sys/boot/ia64/efi/Makefile b/sys/boot/ia64/efi/Makefile
deleted file mode 100644
index fc11d6e..0000000
--- a/sys/boot/ia64/efi/Makefile
+++ /dev/null
@@ -1,59 +0,0 @@
-# $FreeBSD$
-
-MAN=
-
-.include <src.opts.mk>
-MK_SSP= no
-
-PROG= loader.sym
-INTERNALPROG=
-SRCS= conf.c efimd.c main.c pal.S start.S vers.c
-
-.PATH: ${.CURDIR}/../../../${MACHINE_CPUARCH}/${MACHINE_CPUARCH}
-
-CFLAGS+= -I${.CURDIR}/../common
-CFLAGS+= -I${.CURDIR}/../../common
-CFLAGS+= -I${.CURDIR}/../../efi/include
-CFLAGS+= -I${.CURDIR}/../../efi/include/${MACHINE_CPUARCH}
-CFLAGS+= -I${.CURDIR}/../../..
-CFLAGS+= -I${.CURDIR}/../../../../lib/libstand
-
-LDSCRIPT= ${.CURDIR}/ldscript.${MACHINE_CPUARCH}
-LDFLAGS= -Wl,-T${LDSCRIPT} -shared -symbolic
-
-${PROG}: ${LDSCRIPT}
-
-NEWVERSWHAT= "EFI boot" ${MACHINE_CPUARCH}
-
-vers.c: ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/version
- sh ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/version ${NEWVERSWHAT}
-
-OBJCOPY?= objcopy
-OBJDUMP?= objdump
-
-FILES= loader.efi
-FILESMODE_loader.efi= ${BINMODE}
-
-loader.efi: loader.sym
- if [ `${OBJDUMP} -t ${.ALLSRC} | fgrep '*UND*' | wc -l` != 0 ]; then \
- ${OBJDUMP} -t ${.ALLSRC} | fgrep '*UND*'; \
- rm ${.ALLSRC}; \
- exit 1; \
- fi
- ${OBJCOPY} -j .data -j .dynamic -j .dynstr -j .dynsym -j .hash \
- -j .rela.dyn -j .reloc -j .sdata -j .text \
- --target=efi-app-${MACHINE_CPUARCH} ${.ALLSRC} ${.TARGET}
-
-CLEANFILES= vers.c loader.efi
-
-LIBIA64= ${.OBJDIR}/../common/libia64.a
-LIBEFI= ${.OBJDIR}/../../efi/libefi/libefi.a
-.if ${MK_FORTH} != "no"
-LIBFICL= ${.OBJDIR}/../../ficl/libficl.a
-.endif
-
-DPADD= ${LIBIA64} ${LIBFICL} ${LIBEFI} ${LIBSTAND}
-LDADD= -Wl,--whole-archive ${LIBIA64} -Wl,--no-whole-archive \
- ${LIBFICL} ${LIBEFI} -lstand
-
-.include <bsd.prog.mk>
diff --git a/sys/boot/ia64/efi/conf.c b/sys/boot/ia64/efi/conf.c
deleted file mode 100644
index 0e0d129..0000000
--- a/sys/boot/ia64/efi/conf.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*-
- * Copyright (c) 1997
- * Matthias Drochner. All rights reserved.
- *
- * 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, this list of conditions and the following disclaimer.
- * 2. 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.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed for the NetBSD Project
- * by Matthias Drochner.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR BE LIABLE FOR ANY DIRECT, 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.
- *
- * $NetBSD: conf.c,v 1.2 1997/03/22 09:03:29 thorpej Exp $
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <stand.h>
-#include <efi.h>
-#include <efilib.h>
-
-/*
- * We could use linker sets for some or all of these, but
- * then we would have to control what ended up linked into
- * the bootstrap. So it's easier to conditionalise things
- * here.
- *
- * XXX rename these arrays to be consistent and less namespace-hostile
- */
-
-/* Exported for libstand */
-struct devsw *devsw[] = {
- &efipart_dev,
- &efinet_dev,
- NULL
-};
-
-struct fs_ops *file_system[] = {
- &dosfs_fsops,
- &ufs_fsops,
- &cd9660_fsops,
- &nfs_fsops,
- &gzipfs_fsops,
- NULL
-};
-
-struct netif_driver *netif_drivers[] = {
- &efinetif,
- NULL
-};
-
-/*
- * Consoles
- *
- * We don't prototype these in efiboot.h because they require
- * data structures from bootstrap.h as well.
- */
-extern struct console efi_console;
-
-struct console *consoles[] = {
- &efi_console,
- NULL
-};
diff --git a/sys/boot/ia64/efi/efimd.c b/sys/boot/ia64/efi/efimd.c
deleted file mode 100644
index 0b29e12..0000000
--- a/sys/boot/ia64/efi/efimd.c
+++ /dev/null
@@ -1,264 +0,0 @@
-/*-
- * Copyright (c) 2004, 2006 Marcel Moolenaar
- * All rights reserved.
- *
- * 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, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR BE LIABLE FOR ANY DIRECT, 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 <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <stand.h>
-
-#include <efi.h>
-#include <efilib.h>
-
-#include <libia64.h>
-
-#define EFI_INTEL_FPSWA \
- {0xc41b6531,0x97b9,0x11d3,{0x9a,0x29,0x00,0x90,0x27,0x3f,0xc1,0x4d}}
-
-static EFI_GUID fpswa_guid = EFI_INTEL_FPSWA;
-
-/* DIG64 Headless Console & Debug Port Table. */
-#define HCDP_TABLE_GUID \
- {0xf951938d,0x620b,0x42ef,{0x82,0x79,0xa8,0x4b,0x79,0x61,0x78,0x98}}
-
-static EFI_GUID hcdp_guid = HCDP_TABLE_GUID;
-
-static EFI_MEMORY_DESCRIPTOR *memmap;
-static UINTN memmapsz;
-static UINTN mapkey;
-static UINTN descsz;
-static UINT32 descver;
-
-#define IA64_EFI_CHUNK_SIZE (32 * 1048576)
-static vm_paddr_t ia64_efi_chunk;
-
-#define IA64_EFI_PGTBLSZ_MAX 1048576
-static vm_paddr_t ia64_efi_pgtbl;
-static vm_size_t ia64_efi_pgtblsz;
-
-/* Don't allocate memory below the boundary */
-#define IA64_EFI_ALLOC_BOUNDARY 1048576
-
-static int
-ia64_efi_memmap_update(void)
-{
- EFI_STATUS status;
-
- if (memmap != NULL) {
- free(memmap);
- memmap = NULL;
- }
-
- memmapsz = 0;
- BS->GetMemoryMap(&memmapsz, NULL, &mapkey, &descsz, &descver);
- if (memmapsz == 0)
- return (FALSE);
- memmap = malloc(memmapsz);
- if (memmap == NULL)
- return (FALSE);
-
- status = BS->GetMemoryMap(&memmapsz, memmap, &mapkey, &descsz,
- &descver);
- if (EFI_ERROR(status)) {
- free(memmap);
- memmap = NULL;
- return (FALSE);
- }
-
- return (TRUE);
-}
-
-/*
- * Returns 0 on failure. Successful allocations return an address
- * larger or equal to IA64_EFI_ALLOC_BOUNDARY.
- */
-static vm_paddr_t
-ia64_efi_alloc(vm_size_t sz)
-{
- EFI_PHYSICAL_ADDRESS pa;
- EFI_MEMORY_DESCRIPTOR *mm;
- uint8_t *mmiter, *mmiterend;
- vm_size_t memsz;
- UINTN npgs;
- EFI_STATUS status;
-
- /* We can't allocate less than a page */
- if (sz < EFI_PAGE_SIZE)
- return (0);
-
- /* The size must be a power of 2. */
- if (sz & (sz - 1))
- return (0);
-
- if (!ia64_efi_memmap_update())
- return (0);
-
- mmiter = (void *)memmap;
- mmiterend = mmiter + memmapsz;
- for (; mmiter < mmiterend; mmiter += descsz) {
- mm = (void *)mmiter;
- if (mm->Type != EfiConventionalMemory)
- continue;
- memsz = mm->NumberOfPages * EFI_PAGE_SIZE;
- if (mm->PhysicalStart + memsz <= IA64_EFI_ALLOC_BOUNDARY)
- continue;
- /*
- * XXX We really should make sure the memory is local to the
- * BSP.
- */
- pa = (mm->PhysicalStart < IA64_EFI_ALLOC_BOUNDARY) ?
- IA64_EFI_ALLOC_BOUNDARY : mm->PhysicalStart;
- pa = (pa + sz - 1) & ~(sz - 1);
- if (pa + sz > mm->PhysicalStart + memsz)
- continue;
-
- npgs = EFI_SIZE_TO_PAGES(sz);
- status = BS->AllocatePages(AllocateAddress, EfiLoaderData,
- npgs, &pa);
- if (!EFI_ERROR(status))
- return (pa);
- }
-
- printf("%s: unable to allocate %lx bytes\n", __func__, sz);
- return (0);
-}
-
-vm_paddr_t
-ia64_platform_alloc(vm_offset_t va, vm_size_t sz)
-{
- vm_paddr_t pa;
-
- if (va == 0) {
- /* Page table itself. */
- if (sz > IA64_EFI_PGTBLSZ_MAX)
- return (~0UL);
- if (ia64_efi_pgtbl == 0)
- ia64_efi_pgtbl = ia64_efi_alloc(IA64_EFI_PGTBLSZ_MAX);
- if (ia64_efi_pgtbl != 0)
- ia64_efi_pgtblsz = sz;
- return (ia64_efi_pgtbl);
- } else if (va < IA64_PBVM_BASE) {
- /* Should not happen. */
- return (~0UL);
- }
-
- /* Loader virtual memory page. */
- va -= IA64_PBVM_BASE;
-
- /* Allocate a big chunk that can be wired with a single PTE. */
- if (ia64_efi_chunk == 0)
- ia64_efi_chunk = ia64_efi_alloc(IA64_EFI_CHUNK_SIZE);
- if (va < IA64_EFI_CHUNK_SIZE)
- return (ia64_efi_chunk + va);
-
- /* Allocate a page at a time when we go beyond the chunk. */
- pa = ia64_efi_alloc(sz);
- return ((pa == 0) ? ~0UL : pa);
-}
-
-void
-ia64_platform_free(vm_offset_t va, vm_paddr_t pa, vm_size_t sz)
-{
-
- BS->FreePages(pa, sz >> EFI_PAGE_SHIFT);
-}
-
-int
-ia64_platform_bootinfo(struct bootinfo *bi, struct bootinfo **res)
-{
- VOID *fpswa;
- EFI_HANDLE handle;
- EFI_STATUS status;
- UINTN sz;
-
- bi->bi_systab = (uint64_t)ST;
- bi->bi_hcdp = (uint64_t)efi_get_table(&hcdp_guid);
-
- sz = sizeof(EFI_HANDLE);
- status = BS->LocateHandle(ByProtocol, &fpswa_guid, 0, &sz, &handle);
- if (status == 0)
- status = BS->HandleProtocol(handle, &fpswa_guid, &fpswa);
- bi->bi_fpswa = (status == 0) ? (uint64_t)fpswa : 0;
-
- if (!ia64_efi_memmap_update())
- return (ENOMEM);
-
- bi->bi_memmap = (uint64_t)memmap;
- bi->bi_memmap_size = memmapsz;
- bi->bi_memdesc_size = descsz;
- bi->bi_memdesc_version = descver;
-
- if (IS_LEGACY_KERNEL())
- *res = malloc(sizeof(**res));
-
- return (0);
-}
-
-int
-ia64_platform_enter(const char *kernel)
-{
- EFI_STATUS status;
-
- status = BS->ExitBootServices(IH, mapkey);
- if (EFI_ERROR(status)) {
- printf("%s: ExitBootServices() returned 0x%lx\n", __func__,
- (long)status);
- return (EINVAL);
- }
-
- return (0);
-}
-
-COMMAND_SET(pbvm, "pbvm", "show PBVM details", command_pbvm);
-
-static int
-command_pbvm(int argc, char *argv[])
-{
- uint64_t limit, pg, start;
- u_int idx;
-
- printf("Page table @ %p, size %x\n", ia64_pgtbl, ia64_pgtblsz);
-
- if (ia64_pgtbl == NULL)
- return (0);
-
- limit = ~0;
- start = ~0;
- idx = 0;
- while (ia64_pgtbl[idx] != 0) {
- pg = ia64_pgtbl[idx];
- if (pg != limit) {
- if (start != ~0)
- printf("%#lx-%#lx\n", start, limit);
- start = pg;
- }
- limit = pg + IA64_PBVM_PAGE_SIZE;
- idx++;
- }
- if (start != ~0)
- printf("%#lx-%#lx\n", start, limit);
-
- return (0);
-}
diff --git a/sys/boot/ia64/efi/ldscript.ia64 b/sys/boot/ia64/efi/ldscript.ia64
deleted file mode 100644
index 0d7901f..0000000
--- a/sys/boot/ia64/efi/ldscript.ia64
+++ /dev/null
@@ -1,73 +0,0 @@
-/* $FreeBSD$ */
-OUTPUT_FORMAT("elf64-ia64-freebsd", "elf64-ia64-freebsd", "elf64-ia64-freebsd")
-OUTPUT_ARCH(ia64)
-ENTRY(_start_plabel)
-SECTIONS
-{
- /* Read-only sections, merged into text segment: */
- . = 0;
- ImageBase = .;
- . = SIZEOF_HEADERS;
- . = ALIGN(4096);
- .text : {
- *(.text .stub .text.* .gnu.linkonce.t.*)
- /* .gnu.warning sections are handled specially by elf32.em. */
- *(.gnu.warning)
- *(.plt)
- } =0x00300000010070000002000001000400
- . = ALIGN(4096);
- __start_set_Xcommand_set = .;
- set_Xcommand_set : { *(set_Xcommand_set) }
- __stop_set_Xcommand_set = .;
- .data : {
- *(.rodata .rodata.* .gnu.linkonce.r.*)
- *(.rodata1)
- *(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
- *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)
- *(.opd)
- *(.data .data.* .gnu.linkonce.d.*)
- *(.data1)
- *(.plabel)
- *(.dynbss)
- *(.bss .bss.* .gnu.linkonce.b.*)
- *(COMMON)
- }
- .IA_64.unwind_info : { *(.IA_64.unwind_info* .gnu.linkonce.ia64unwi.*) }
- .IA_64.unwind : { *(.IA_64.unwind* .gnu.linkonce.ia64unw.*) }
- . = ALIGN(4096);
- __gp = .;
- .sdata : {
- *(.got.plt .got)
- *(.IA_64.pltoff)
- *(.sdata .sdata.* .gnu.linkonce.s.*)
- *(dynsbss)
- *(.sbss .sbss.* .gnu.linkonce.sb.*)
- *(.scommon)
- }
- . = ALIGN(4096);
- .dynamic : { *(.dynamic) }
- . = ALIGN(4096);
- .rela.dyn : {
- *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
- *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
- *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
- *(.rela.got)
- *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*)
- *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*)
- *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*)
- *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*)
- *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
- *(.rela.plt)
- *(.rela.IA_64.pltoff)
- *(.relaset_*)
- *(.rela.dyn .rela.dyn.*)
- }
- . = ALIGN(4096);
- .reloc : { *(.reloc) }
- . = ALIGN(4096);
- .hash : { *(.hash) }
- . = ALIGN(4096);
- .dynsym : { *(.dynsym) }
- . = ALIGN(4096);
- .dynstr : { *(.dynstr) }
-}
diff --git a/sys/boot/ia64/efi/main.c b/sys/boot/ia64/efi/main.c
deleted file mode 100644
index ec12b42..0000000
--- a/sys/boot/ia64/efi/main.c
+++ /dev/null
@@ -1,618 +0,0 @@
-/*-
- * Copyright (c) 1998 Michael Smith <msmith@freebsd.org>
- * Copyright (c) 1998,2000 Doug Rabson <dfr@freebsd.org>
- * All rights reserved.
- *
- * 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, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, 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 <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <stand.h>
-#include <string.h>
-#include <setjmp.h>
-#include <machine/sal.h>
-#include <machine/pal.h>
-#include <machine/pte.h>
-#include <machine/dig64.h>
-
-#include <efi.h>
-#include <efilib.h>
-
-#include <libia64.h>
-
-/* DIG64 Headless Console & Debug Port Table. */
-#define HCDP_TABLE_GUID \
- {0xf951938d,0x620b,0x42ef,{0x82,0x79,0xa8,0x4b,0x79,0x61,0x78,0x98}}
-
-extern char bootprog_name[];
-extern char bootprog_rev[];
-extern char bootprog_date[];
-extern char bootprog_maker[];
-
-struct arch_switch archsw; /* MI/MD interface boundary */
-
-extern u_int64_t ia64_pal_entry;
-
-EFI_GUID acpi = ACPI_TABLE_GUID;
-EFI_GUID acpi20 = ACPI_20_TABLE_GUID;
-EFI_GUID devid = DEVICE_PATH_PROTOCOL;
-EFI_GUID hcdp = HCDP_TABLE_GUID;
-EFI_GUID imgid = LOADED_IMAGE_PROTOCOL;
-EFI_GUID mps = MPS_TABLE_GUID;
-EFI_GUID netid = EFI_SIMPLE_NETWORK_PROTOCOL;
-EFI_GUID sal = SAL_SYSTEM_TABLE_GUID;
-EFI_GUID smbios = SMBIOS_TABLE_GUID;
-
-static void
-find_pal_proc(void)
-{
- int i;
- struct sal_system_table *saltab = 0;
- static int sizes[6] = {
- 48, 32, 16, 32, 16, 16
- };
- u_int8_t *p;
-
- saltab = efi_get_table(&sal);
- if (saltab == NULL) {
- printf("Can't find SAL System Table\n");
- return;
- }
-
- if (memcmp(saltab->sal_signature, "SST_", 4)) {
- printf("Bad signature for SAL System Table\n");
- return;
- }
-
- p = (u_int8_t *) (saltab + 1);
- for (i = 0; i < saltab->sal_entry_count; i++) {
- if (*p == 0) {
- struct sal_entrypoint_descriptor *dp;
- dp = (struct sal_entrypoint_descriptor *) p;
- ia64_pal_entry = dp->sale_pal_proc;
- return;
- }
- p += sizes[*p];
- }
-
- printf("Can't find PAL proc\n");
- return;
-}
-
-static int
-usc2cmp(CHAR16 *s1, CHAR16 *s2)
-{
-
- while (*s1 == *s2++) {
- if (*s1++ == 0)
- return (0);
- }
- return (*s1 - *(s2 - 1));
-}
-
-static char *
-get_dev_option(int argc, CHAR16 *argv[])
-{
- static char dev[32];
- CHAR16 *arg;
- char *devp;
- int i, j;
-
- devp = NULL;
- for (i = 0; i < argc; i++) {
- if (usc2cmp(argv[i], L"-dev") == 0 && i < argc - 1) {
- arg = argv[i + 1];
- j = 0;
- while (j < sizeof(dev) && *arg != 0)
- dev[j++] = *arg++;
- if (j == sizeof(dev))
- j--;
- dev[j] = '\0';
- devp = dev;
- break;
- }
- }
-
- return (devp);
-}
-
-EFI_STATUS
-main(int argc, CHAR16 *argv[])
-{
- struct devdesc currdev;
- EFI_LOADED_IMAGE *img;
- char *dev;
- int i;
-
- /*
- * XXX Chicken-and-egg problem; we want to have console output
- * early, but some console attributes may depend on reading from
- * eg. the boot device, which we can't do yet. We can use
- * printf() etc. once this is done.
- */
- cons_probe();
-
- printf("\n%s, Revision %s\n", bootprog_name, bootprog_rev);
-
- find_pal_proc();
-
- /*
- * March through the device switch probing for things.
- */
- for (i = 0; devsw[i] != NULL; i++)
- if (devsw[i]->dv_init != NULL)
- (devsw[i]->dv_init)();
-
- /*
- * Disable the watchdog timer. By default the boot manager sets
- * the timer to 5 minutes before invoking a boot option. If we
- * want to return to the boot manager, we have to disable the
- * watchdog timer and since we're an interactive program, we don't
- * want to wait until the user types "quit". The timer may have
- * fired by then. We don't care if this fails. It does not prevent
- * normal functioning in any way...
- */
- BS->SetWatchdogTimer(0, 0, 0, NULL);
-
- /* Get our loaded image protocol interface structure. */
- BS->HandleProtocol(IH, &imgid, (VOID**)&img);
-
- bzero(&currdev, sizeof(currdev));
- efi_handle_lookup(img->DeviceHandle, &currdev.d_dev, &currdev.d_unit);
- currdev.d_type = currdev.d_dev->dv_type;
-
- env_setenv("loaddev", EV_VOLATILE, ia64_fmtdev(&currdev), env_noset,
- env_nounset);
-
- dev = get_dev_option(argc, argv);
- if (dev == NULL)
- dev = ia64_fmtdev(&currdev);
-
- env_setenv("currdev", EV_VOLATILE, dev, ia64_setcurrdev, env_nounset);
-
- setenv("LINES", "24", 1); /* optional */
-
- archsw.arch_autoload = ia64_autoload;
- archsw.arch_copyin = ia64_copyin;
- archsw.arch_copyout = ia64_copyout;
- archsw.arch_getdev = ia64_getdev;
- archsw.arch_loadaddr = ia64_loadaddr;
- archsw.arch_loadseg = ia64_loadseg;
- archsw.arch_readin = ia64_readin;
-
- interact(); /* doesn't return */
-
- return (EFI_SUCCESS); /* keep compiler happy */
-}
-
-COMMAND_SET(quit, "quit", "exit the loader", command_quit);
-
-static int
-command_quit(int argc, char *argv[])
-{
- exit(0);
- /* NOTREACHED */
- return (CMD_OK);
-}
-
-COMMAND_SET(reboot, "reboot", "reboot the system", command_reboot);
-
-static int
-command_reboot(int argc, char *argv[])
-{
-
- RS->ResetSystem(EfiResetWarm, EFI_SUCCESS, 0, NULL);
- /* NOTREACHED */
- return (CMD_OK);
-}
-
-COMMAND_SET(memmap, "memmap", "print memory map", command_memmap);
-
-static int
-command_memmap(int argc, char *argv[])
-{
- UINTN sz;
- EFI_MEMORY_DESCRIPTOR *map, *p;
- UINTN key, dsz;
- UINT32 dver;
- EFI_STATUS status;
- int i, ndesc;
- static char *types[] = {
- "Reserved",
- "LoaderCode",
- "LoaderData",
- "BootServicesCode",
- "BootServicesData",
- "RuntimeServicesCode",
- "RuntimeServicesData",
- "ConventionalMemory",
- "UnusableMemory",
- "ACPIReclaimMemory",
- "ACPIMemoryNVS",
- "MemoryMappedIO",
- "MemoryMappedIOPortSpace",
- "PalCode"
- };
-
- sz = 0;
- status = BS->GetMemoryMap(&sz, 0, &key, &dsz, &dver);
- if (status != EFI_BUFFER_TOO_SMALL) {
- printf("Can't determine memory map size\n");
- return CMD_ERROR;
- }
- map = malloc(sz);
- status = BS->GetMemoryMap(&sz, map, &key, &dsz, &dver);
- if (EFI_ERROR(status)) {
- printf("Can't read memory map\n");
- return CMD_ERROR;
- }
-
- ndesc = sz / dsz;
- printf("%23s %12s %12s %8s %4s\n",
- "Type", "Physical", "Virtual", "#Pages", "Attr");
-
- for (i = 0, p = map; i < ndesc;
- i++, p = NextMemoryDescriptor(p, dsz)) {
- printf("%23s %012lx %012lx %08lx ",
- types[p->Type],
- p->PhysicalStart,
- p->VirtualStart,
- p->NumberOfPages);
- if (p->Attribute & EFI_MEMORY_UC)
- printf("UC ");
- if (p->Attribute & EFI_MEMORY_WC)
- printf("WC ");
- if (p->Attribute & EFI_MEMORY_WT)
- printf("WT ");
- if (p->Attribute & EFI_MEMORY_WB)
- printf("WB ");
- if (p->Attribute & EFI_MEMORY_UCE)
- printf("UCE ");
- if (p->Attribute & EFI_MEMORY_WP)
- printf("WP ");
- if (p->Attribute & EFI_MEMORY_RP)
- printf("RP ");
- if (p->Attribute & EFI_MEMORY_XP)
- printf("XP ");
- if (p->Attribute & EFI_MEMORY_RUNTIME)
- printf("RUNTIME");
- printf("\n");
- }
-
- return CMD_OK;
-}
-
-COMMAND_SET(configuration, "configuration",
- "print configuration tables", command_configuration);
-
-static const char *
-guid_to_string(EFI_GUID *guid)
-{
- static char buf[40];
-
- sprintf(buf, "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
- guid->Data1, guid->Data2, guid->Data3, guid->Data4[0],
- guid->Data4[1], guid->Data4[2], guid->Data4[3], guid->Data4[4],
- guid->Data4[5], guid->Data4[6], guid->Data4[7]);
- return (buf);
-}
-
-static int
-command_configuration(int argc, char *argv[])
-{
- int i;
-
- printf("NumberOfTableEntries=%ld\n", ST->NumberOfTableEntries);
- for (i = 0; i < ST->NumberOfTableEntries; i++) {
- EFI_GUID *guid;
-
- printf(" ");
- guid = &ST->ConfigurationTable[i].VendorGuid;
- if (!memcmp(guid, &mps, sizeof(EFI_GUID)))
- printf("MPS Table");
- else if (!memcmp(guid, &acpi, sizeof(EFI_GUID)))
- printf("ACPI Table");
- else if (!memcmp(guid, &acpi20, sizeof(EFI_GUID)))
- printf("ACPI 2.0 Table");
- else if (!memcmp(guid, &smbios, sizeof(EFI_GUID)))
- printf("SMBIOS Table");
- else if (!memcmp(guid, &sal, sizeof(EFI_GUID)))
- printf("SAL System Table");
- else if (!memcmp(guid, &hcdp, sizeof(EFI_GUID)))
- printf("DIG64 HCDP Table");
- else
- printf("Unknown Table (%s)", guid_to_string(guid));
- printf(" at %p\n", ST->ConfigurationTable[i].VendorTable);
- }
-
- return CMD_OK;
-}
-
-COMMAND_SET(sal, "sal", "print SAL System Table", command_sal);
-
-static int
-command_sal(int argc, char *argv[])
-{
- int i;
- struct sal_system_table *saltab = 0;
- static int sizes[6] = {
- 48, 32, 16, 32, 16, 16
- };
- u_int8_t *p;
-
- saltab = efi_get_table(&sal);
- if (saltab == NULL) {
- printf("Can't find SAL System Table\n");
- return CMD_ERROR;
- }
-
- if (memcmp(saltab->sal_signature, "SST_", 4)) {
- printf("Bad signature for SAL System Table\n");
- return CMD_ERROR;
- }
-
- printf("SAL Revision %x.%02x\n",
- saltab->sal_rev[1],
- saltab->sal_rev[0]);
- printf("SAL A Version %x.%02x\n",
- saltab->sal_a_version[1],
- saltab->sal_a_version[0]);
- printf("SAL B Version %x.%02x\n",
- saltab->sal_b_version[1],
- saltab->sal_b_version[0]);
-
- p = (u_int8_t *) (saltab + 1);
- for (i = 0; i < saltab->sal_entry_count; i++) {
- printf(" Desc %d", *p);
- if (*p == 0) {
- struct sal_entrypoint_descriptor *dp;
- dp = (struct sal_entrypoint_descriptor *) p;
- printf("\n");
- printf(" PAL Proc at 0x%lx\n",
- dp->sale_pal_proc);
- printf(" SAL Proc at 0x%lx\n",
- dp->sale_sal_proc);
- printf(" SAL GP at 0x%lx\n",
- dp->sale_sal_gp);
- } else if (*p == 1) {
- struct sal_memory_descriptor *dp;
- dp = (struct sal_memory_descriptor *) p;
- printf(" Type %d.%d, ",
- dp->sale_memory_type[0],
- dp->sale_memory_type[1]);
- printf("Address 0x%lx, ",
- dp->sale_physical_address);
- printf("Length 0x%x\n",
- dp->sale_length);
- } else if (*p == 5) {
- struct sal_ap_wakeup_descriptor *dp;
- dp = (struct sal_ap_wakeup_descriptor *) p;
- printf("\n");
- printf(" Mechanism %d\n", dp->sale_mechanism);
- printf(" Vector 0x%lx\n", dp->sale_vector);
- } else
- printf("\n");
-
- p += sizes[*p];
- }
-
- return CMD_OK;
-}
-
-int
-print_trs(int type)
-{
- struct ia64_pal_result res;
- int i, maxtr;
- struct {
- pt_entry_t pte;
- uint64_t itir;
- uint64_t ifa;
- struct ia64_rr rr;
- } buf;
- static const char *psnames[] = {
- "1B", "2B", "4B", "8B",
- "16B", "32B", "64B", "128B",
- "256B", "512B", "1K", "2K",
- "4K", "8K", "16K", "32K",
- "64K", "128K", "256K", "512K",
- "1M", "2M", "4M", "8M",
- "16M", "32M", "64M", "128M",
- "256M", "512M", "1G", "2G"
- };
- static const char *manames[] = {
- "WB", "bad", "bad", "bad",
- "UC", "UCE", "WC", "NaT",
- };
-
- res = ia64_call_pal_static(PAL_VM_SUMMARY, 0, 0, 0);
- if (res.pal_status != 0) {
- printf("Can't get VM summary\n");
- return CMD_ERROR;
- }
-
- if (type == 0)
- maxtr = (res.pal_result[0] >> 40) & 0xff;
- else
- maxtr = (res.pal_result[0] >> 32) & 0xff;
-
- printf("%d translation registers\n", maxtr);
-
- pager_open();
- pager_output("TR# RID Virtual Page Physical Page PgSz ED AR PL D A MA P KEY\n");
- for (i = 0; i <= maxtr; i++) {
- char lbuf[128];
-
- bzero(&buf, sizeof(buf));
- res = ia64_call_pal_stacked(PAL_VM_TR_READ, i, type,
- (u_int64_t) &buf);
- if (res.pal_status != 0)
- break;
-
- /* Only display valid translations */
- if ((buf.ifa & 1) == 0)
- continue;
-
- if (!(res.pal_result[0] & 1))
- buf.pte &= ~PTE_AR_MASK;
- if (!(res.pal_result[0] & 2))
- buf.pte &= ~PTE_PL_MASK;
- if (!(res.pal_result[0] & 4))
- buf.pte &= ~PTE_DIRTY;
- if (!(res.pal_result[0] & 8))
- buf.pte &= ~PTE_MA_MASK;
- sprintf(lbuf, "%03d %06x %013lx %013lx %4s %d %d %d %d %d "
- "%-3s %d %06x\n", i, buf.rr.rr_rid, buf.ifa >> 12,
- (buf.pte & PTE_PPN_MASK) >> 12,
- psnames[(buf.itir & ITIR_PS_MASK) >> 2],
- (buf.pte & PTE_ED) ? 1 : 0,
- (int)(buf.pte & PTE_AR_MASK) >> 9,
- (int)(buf.pte & PTE_PL_MASK) >> 7,
- (buf.pte & PTE_DIRTY) ? 1 : 0,
- (buf.pte & PTE_ACCESSED) ? 1 : 0,
- manames[(buf.pte & PTE_MA_MASK) >> 2],
- (buf.pte & PTE_PRESENT) ? 1 : 0,
- (int)((buf.itir & ITIR_KEY_MASK) >> 8));
- pager_output(lbuf);
- }
- pager_close();
-
- if (res.pal_status != 0) {
- printf("Error while getting TR contents\n");
- return CMD_ERROR;
- }
- return CMD_OK;
-}
-
-COMMAND_SET(itr, "itr", "print instruction TRs", command_itr);
-
-static int
-command_itr(int argc, char *argv[])
-{
- return print_trs(0);
-}
-
-COMMAND_SET(dtr, "dtr", "print data TRs", command_dtr);
-
-static int
-command_dtr(int argc, char *argv[])
-{
- return print_trs(1);
-}
-
-COMMAND_SET(hcdp, "hcdp", "Dump HCDP info", command_hcdp);
-
-static char *
-hcdp_string(char *s, u_int len)
-{
- static char buffer[256];
-
- memcpy(buffer, s, len);
- buffer[len] = 0;
- return (buffer);
-}
-
-static int
-command_hcdp(int argc, char *argv[])
-{
- struct dig64_hcdp_table *tbl;
- struct dig64_hcdp_entry *ent;
- struct dig64_gas *gas;
- int i;
-
- tbl = efi_get_table(&hcdp);
- if (tbl == NULL) {
- printf("No HCDP table present\n");
- return (CMD_OK);
- }
- if (memcmp(tbl->signature, HCDP_SIGNATURE, sizeof(tbl->signature))) {
- printf("HCDP table has invalid signature\n");
- return (CMD_OK);
- }
- if (tbl->length < sizeof(*tbl) - sizeof(*tbl->entry)) {
- printf("HCDP table too short\n");
- return (CMD_OK);
- }
- printf("HCDP table at 0x%016lx\n", (u_long)tbl);
- printf("Signature = %s\n", hcdp_string(tbl->signature, 4));
- printf("Length = %u\n", tbl->length);
- printf("Revision = %u\n", tbl->revision);
- printf("Checksum = %u\n", tbl->checksum);
- printf("OEM Id = %s\n", hcdp_string(tbl->oem_id, 6));
- printf("Table Id = %s\n", hcdp_string(tbl->oem_tbl_id, 8));
- printf("OEM rev = %u\n", tbl->oem_rev);
- printf("Creator Id = %s\n", hcdp_string(tbl->creator_id, 4));
- printf("Creator rev= %u\n", tbl->creator_rev);
- printf("Entries = %u\n", tbl->entries);
- for (i = 0; i < tbl->entries; i++) {
- ent = tbl->entry + i;
- printf("Entry #%d:\n", i + 1);
- printf(" Type = %u\n", ent->type);
- printf(" Databits = %u\n", ent->databits);
- printf(" Parity = %u\n", ent->parity);
- printf(" Stopbits = %u\n", ent->stopbits);
- printf(" PCI seg = %u\n", ent->pci_segment);
- printf(" PCI bus = %u\n", ent->pci_bus);
- printf(" PCI dev = %u\n", ent->pci_device);
- printf(" PCI func = %u\n", ent->pci_function);
- printf(" Interrupt = %u\n", ent->interrupt);
- printf(" PCI flag = %u\n", ent->pci_flag);
- printf(" Baudrate = %lu\n",
- ((u_long)ent->baud_high << 32) + (u_long)ent->baud_low);
- gas = &ent->address;
- printf(" Addr space= %u\n", gas->addr_space);
- printf(" Bit width = %u\n", gas->bit_width);
- printf(" Bit offset= %u\n", gas->bit_offset);
- printf(" Address = 0x%016lx\n",
- ((u_long)gas->addr_high << 32) + (u_long)gas->addr_low);
- printf(" PCI type = %u\n", ent->pci_devid);
- printf(" PCI vndr = %u\n", ent->pci_vendor);
- printf(" IRQ = %u\n", ent->irq);
- printf(" PClock = %u\n", ent->pclock);
- printf(" PCI iface = %u\n", ent->pci_interface);
- }
- printf("<EOT>\n");
- return (CMD_OK);
-}
-
-COMMAND_SET(about, "about", "about the loader", command_about);
-
-extern uint64_t _start_plabel[];
-
-static int
-command_about(int argc, char *argv[])
-{
- EFI_LOADED_IMAGE *img;
-
- printf("%s\n", bootprog_name);
- printf("revision %s\n", bootprog_rev);
- printf("built by %s\n", bootprog_maker);
- printf("built on %s\n", bootprog_date);
-
- printf("\n");
-
- BS->HandleProtocol(IH, &imgid, (VOID**)&img);
- printf("image loaded at %p\n", img->ImageBase);
- printf("entry at %#lx (%#lx)\n", _start_plabel[0], _start_plabel[1]);
-}
diff --git a/sys/boot/ia64/efi/start.S b/sys/boot/ia64/efi/start.S
deleted file mode 100644
index 9d28a96..0000000
--- a/sys/boot/ia64/efi/start.S
+++ /dev/null
@@ -1,290 +0,0 @@
-/*-
- * Copyright (c) 2001 Doug Rabson
- * All rights reserved.
- *
- * 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, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, 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.
- *
- * $FreeBSD$
- */
-
- .text
-
-#include <machine/asm.h>
-
-#define EFI_SUCCESS 0
-#define EFI_LOAD_ERROR 1
-#define EFI_BUFFER_TOO_SMALL 5
-
-#define DT_NULL 0 /* Terminating entry. */
-#define DT_PLTRELSZ 2 /* Total size in bytes of PLT relocations. */
-#define DT_SYMTAB 6 /* Address of symbol table. */
-#define DT_RELA 7 /* Address of ElfNN_Rela relocations. */
-#define DT_RELASZ 8 /* Total size of ElfNN_Rela relocations. */
-#define DT_RELAENT 9 /* Size of each ElfNN_Rela relocation entry. */
-#define DT_SYMENT 11 /* Size of each symbol table entry. */
-#define DT_JMPREL 23 /* Address of PLT relocations. */
-
-#define R_IA_64_NONE 0 /* None */
-#define R_IA_64_DIR64LSB 0x27 /* word64 LSB S + A */
-#define R_IA_64_FPTR64LSB 0x47 /* word64 LSB @fptr(S + A) */
-#define R_IA_64_REL32LSB 0x6d /* word32 LSB BD + A */
-#define R_IA_64_REL64LSB 0x6f /* word64 LSB BD + A */
-#define R_IA_64_IPLTLSB 0x81 /* function descriptor LSB speciaal */
-
-ENTRY(_start, 2)
- alloc loc0=ar.pfs,2,3,3,0
- mov loc1=rp
- movl loc2=@gprel(ImageBase)
- ;;
- add loc2=gp,loc2
- ;;
- mov out0=loc2
- mov out1=in1
- ;;
- br.call.sptk.few rp=_reloc // relocate image
-
- cmp.ne p6,p0=EFI_SUCCESS,r8 // did it work?
-(p6) br.cond.dpnt.few 9f
-
- mov out0=in0 // image_handle
- mov out1=in1 // system_table
- br.call.sptk.few rp=efi_main
-9:
- mov ar.pfs=loc0
- mov rp=loc1
- ;;
- br.ret.sptk.few rp
-END(_start)
-
- // PLABEL for PE32+
- .section .plabel, "a"
- .align 16
- .global _start_plabel
-_start_plabel:
- data16 @iplt(_start)
- .previous
-
- // A PE32+ relocation entry for the plabel
- .section .reloc, "a"
- data4 _start_plabel
- data4 12
- data2 (10 << 12) + 0
- data2 (10 << 12) + 8
- .previous
-
-// in0: image base
-// in1: system table
-//
-// XXX Assumes PLT relocations are of type Elf_Rela
-//
-// r2 = address of fptr_storage
-// r3 = address of fptr_storage_end
-// r4 = address of first free fptr
-//
-// r15 = r_offset
-// r16 = r_info -OR- d_tag
-// r17 = r_addend -OR- d_val (=d_ptr)
-// r18 = address of .rela dynamic section
-// r19 = size of .rela section
-// r20 = size of .rela element (Elf_Rela)
-// r21 = address of first PLT relocation
-// r22 = size of PLT relocations
-// r23 = relocation type
-// r24 = address of symbol
-// r28 = R_IA_64_IPLTLSB
-// f8 = address of symbol table
-// f9 = size of symtab element
-
-STATIC_ENTRY(_reloc, 2)
- alloc loc0=ar.pfs,2,2,0,0
- ;;
- mov loc1=rp
- movl r29=@gprel(_DYNAMIC) // find _DYNAMIC etc.
- ;;
- add r15=r29,gp
- movl r29=@gprel(fptr_storage)
- ;;
- add r2=r29,gp
- movl r29=@gprel(fptr_storage_end)
- ;;
- add r3=r29,gp
- mov r4=r2
- mov r19=0
- mov r22=0
- mov r20=24
- mov r28=R_IA_64_IPLTLSB
- ;;
-1:
- ld8 r16=[r15],8 // read r15->d_tag
- ;;
- ld8 r17=[r15],8 // and r15->d_val
- ;;
- cmp.eq p6,p0=DT_NULL,r16 // done?
-(p6) br.cond.dpnt.few 2f
- ;;
- cmp.eq p6,p0=DT_RELA,r16 // rela section?
- ;;
-(p6) add r18=r17,in0
- cmp.eq p6,p0=DT_RELASZ,r16 // rela section size?
- ;;
-(p6) mov r19=r17
- cmp.eq p6,p0=DT_RELAENT,r16 // rela entry size?
- ;;
-(p6) mov r20=r17
- cmp.eq p6,p0=DT_JMPREL,r16 // PLT relocs?
- ;;
-(p6) add r21=r17,in0
- cmp.eq p6,p0=DT_PLTRELSZ,r16 // PLT relocs size?
- ;;
-(p6) mov r22=r17
- cmp.eq p6,p0=DT_SYMTAB,r16 // symbol table?
- ;;
-(p6) add r29=r17,in0
- ;;
-(p6) setf.sig f8=r29
- cmp.eq p6,p0=DT_SYMENT,r16 // symbol entry size?
- ;;
-(p6) setf.sig f9=r17
- br.dptk 1b
-
-2:
- cmp.lt p6,p0=0,r19
-(p6) br.cond.dptk 3f
- ;;
- mov r19=r22
- mov r18=r21
- mov r21=0
- mov r22=0
- ;;
- cmp.lt p6,p0=0,r19
-(p6) br.cond.dptk 3f
- ;;
- mov r8=EFI_SUCCESS
- br.dptk 9f
-3:
- ld8 r29=[r18],8 // read r_offset
- ;;
- ld8 r16=[r18],8 // read r_info
- add r15=r29,in0 // relocate r_offset
- ;;
- ld8 r17=[r18],8 // read r_addend
- sub r19=r19,r20 // update relasz
- extr.u r23=r16,0,32 // ELF64_R_TYPE(r16)
- ;;
- cmp.eq p6,p0=R_IA_64_NONE,r23
-(p6) br.cond.dpnt.few 2b
- ;;
- cmp.eq p6,p0=R_IA_64_REL32LSB,r23
-(p6) br.cond.dptk.few 3f
- ;;
- cmp.eq p6,p0=R_IA_64_REL64LSB,r23
-(p6) br.cond.dptk.few 4f
- ;;
- extr.u r29=r16,32,32 // ELF64_R_SYM(r16)
- ;;
- setf.sig f10=r29 // so we can multiply
- ;;
- xma.lu f10=f10,f9,f8 // f10=symtab + r_sym*syment
- ;;
- getf.sig r29=f10
- ;;
- add r29=8,r29 // address of st_value
- ;;
- ld8 r29=[r29] // read symbol value
- ;;
- add r24=r29,in0 // relocate symbol value
- ;;
- cmp.eq p6,p0=R_IA_64_DIR64LSB,r23
-(p6) br.cond.dptk.few 5f
- ;;
- cmp.eq p6,p0=R_IA_64_FPTR64LSB,r23
-(p6) br.cond.dptk.few 6f
- ;;
- cmp.ne p6,p0=r28,r23 // IPLTLSB
-(p6) br.cond.dptk.few 2b
-
- // IPLTLSB
- add r29=r24,r17 // S + A
- ;;
- st8 [r15]=r29,8 // fdesc:FP
- ;;
- st8 [r15]=gp // fdesc:GP
- br.cond.sptk.few 2b
-
- // REL32LSB
-3:
- add r29=in0,r17
- ;;
- st4 [r15]=r29
- br.cond.sptk.few 2b
-
- // REL64LSB
-4:
- add r29=in0,r17 // BD + A
- ;;
- st8 [r15]=r29 // word64
- br.cond.sptk.few 2b
-
- // DIR64LSB
-5:
- add r29=r24,r17 // S + A
- ;;
- st8 [r15]=r29 // word64
- br.cond.sptk.few 2b
-
-6:
- mov r29=r2 // FPTR64LSB
- ;;
-7:
- cmp.geu p6,p0=r29,r4 // end of fptrs?
-(p6) br.cond.dpnt.few 8f // can't find existing fptr
- ld8 r17=[r29] // read function from fptr
- ;;
- cmp.eq p6,p0=r24,r17 // same function?
- ;;
-(p6) st8 [r15]=r29 // reuse fptr
-(p6) br.cond.sptk.few 2b // done
- add r29=16,r29 // next fptr
- br.sptk.few 7b
-8:
- mov r8=EFI_BUFFER_TOO_SMALL // failure return value
- cmp.geu p6,p0=r4,r3 // space left?
-(p6) br.cond.dpnt.few 9f // bail out
- st8 [r15]=r4 // install fptr
- ;;
- st8 [r4]=r24,8 // write fptr address
- ;;
- st8 [r4]=gp,8 // write fptr gp
- br.cond.sptk.few 2b
-
-9:
- mov ar.pfs=loc0
- mov rp=loc1
- ;;
- br.ret.sptk.few rp
-END(_reloc)
-
- .data
- .align 16
-fptr_storage:
- .space 1024*16 // XXX
-fptr_storage_end:
diff --git a/sys/boot/ia64/efi/version b/sys/boot/ia64/efi/version
deleted file mode 100644
index 4f4203a..0000000
--- a/sys/boot/ia64/efi/version
+++ /dev/null
@@ -1,27 +0,0 @@
-$FreeBSD$
-
-NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE. The format of this
-file is important. Make sure the current version number is on line 6.
-
-3.2: Various fixes to libstand, in particular dosfs.
-3.1: Add the about, reboot and pbvm commands.
- I-cache coherency is maintained.
-3.0: Add support for PBVM.
-2.2: Create direct mapping based on start address instead of mapping
- first 256M.
-2.1: Add support for "-dev <part>" argument parsing.
-2.0: Provide devices based on the block I/O protocol, rather than the
- simple file services protocol. Use the FreeBSD file system code
- on top of those devices to access files.
-1.2: Restructured. Has some user visible differences.
-1.1: Pass the HCDP table address to the kernel via bootinfo if one
- is present in the EFI system table.
-1.0: Don't map the I/O port range. We expect the kernel to do it. It
- was done in the loader as a debugging aid and not intended as a
- service/feature.
-0.3: Pass the physical address of the bootinfo block in register r8
- to the kernel. Continue to put it at the fixed address for now.
-0.2: Much improved version. Significant is the support for passing
- the FPSWA interface pointer to the kernel.
-0.1: Initial EFI version, germinated from the NetBSD i386
- standalone, but enormously modified.
OpenPOWER on IntegriCloud