[Midnightbsd-cvs] src [10188] trunk/sys/boot/ia64: add ia64
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Fri Jun 1 19:26:01 EDT 2018
Revision: 10188
http://svnweb.midnightbsd.org/src/?rev=10188
Author: laffer1
Date: 2018-06-01 19:26:00 -0400 (Fri, 01 Jun 2018)
Log Message:
-----------
add ia64
Added Paths:
-----------
trunk/sys/boot/ia64/
trunk/sys/boot/ia64/Makefile
trunk/sys/boot/ia64/Makefile.inc
trunk/sys/boot/ia64/common/
trunk/sys/boot/ia64/common/Makefile
trunk/sys/boot/ia64/common/autoload.c
trunk/sys/boot/ia64/common/bootinfo.c
trunk/sys/boot/ia64/common/copy.c
trunk/sys/boot/ia64/common/devicename.c
trunk/sys/boot/ia64/common/exec.c
trunk/sys/boot/ia64/common/icache.c
trunk/sys/boot/ia64/common/libia64.h
trunk/sys/boot/ia64/efi/
trunk/sys/boot/ia64/efi/Makefile
trunk/sys/boot/ia64/efi/conf.c
trunk/sys/boot/ia64/efi/efimd.c
trunk/sys/boot/ia64/efi/ldscript.ia64
trunk/sys/boot/ia64/efi/main.c
trunk/sys/boot/ia64/efi/start.S
trunk/sys/boot/ia64/efi/version
trunk/sys/boot/ia64/ski/
trunk/sys/boot/ia64/ski/Makefile
trunk/sys/boot/ia64/ski/acpi_stub.c
trunk/sys/boot/ia64/ski/conf.c
trunk/sys/boot/ia64/ski/delay.c
trunk/sys/boot/ia64/ski/efi_stub.c
trunk/sys/boot/ia64/ski/exit.c
trunk/sys/boot/ia64/ski/ldscript.ia64
trunk/sys/boot/ia64/ski/libski.h
trunk/sys/boot/ia64/ski/main.c
trunk/sys/boot/ia64/ski/pal_stub.S
trunk/sys/boot/ia64/ski/sal_stub.c
trunk/sys/boot/ia64/ski/skiconsole.c
trunk/sys/boot/ia64/ski/skifs.c
trunk/sys/boot/ia64/ski/skiload.cmd
trunk/sys/boot/ia64/ski/skimd.c
trunk/sys/boot/ia64/ski/ssc.c
trunk/sys/boot/ia64/ski/start.S
trunk/sys/boot/ia64/ski/time.c
trunk/sys/boot/ia64/ski/version
Added: trunk/sys/boot/ia64/Makefile
===================================================================
--- trunk/sys/boot/ia64/Makefile (rev 0)
+++ trunk/sys/boot/ia64/Makefile 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,11 @@
+# $MidnightBSD$
+# $FreeBSD: stable/10/sys/boot/ia64/Makefile 239377 2012-08-18 23:17:42Z marcel $
+
+SUBDIR= common efi
+
+# In the ski sub-directory, one can build a loader for use under Ski.
+# Ski is an Itanium simulator, originally developed by HP. It's not
+# supported anymore in FreeBSD, but left for reference and education.
+# SUBDIR += ski
+
+.include <bsd.subdir.mk>
Property changes on: trunk/sys/boot/ia64/Makefile
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/Makefile.inc
===================================================================
--- trunk/sys/boot/ia64/Makefile.inc (rev 0)
+++ trunk/sys/boot/ia64/Makefile.inc 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,10 @@
+# $MidnightBSD$
+# $FreeBSD: stable/10/sys/boot/ia64/Makefile.inc 180012 2008-06-25 21:33:28Z ru $
+
+BINDIR?= /boot
+
+# Options used when building standalone components
+CFLAGS+= -ffreestanding -fshort-wchar -Wformat
+LDFLAGS+= -nostdlib
+
+.include "../Makefile.inc"
Property changes on: trunk/sys/boot/ia64/Makefile.inc
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/common/Makefile
===================================================================
--- trunk/sys/boot/ia64/common/Makefile (rev 0)
+++ trunk/sys/boot/ia64/common/Makefile 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,48 @@
+# $MidnightBSD$
+# $FreeBSD: stable/10/sys/boot/ia64/common/Makefile 242688 2012-11-07 02:14:03Z dteske $
+
+.include <bsd.own.mk>
+MK_SSP= no
+
+LIB= ia64
+INTERNALLIB=
+
+SRCS= autoload.c bootinfo.c copy.c devicename.c exec.c icache.c
+
+CFLAGS+= -I${.CURDIR}/../../efi/include
+CFLAGS+= -I${.CURDIR}/../../efi/include/${MACHINE_CPUARCH}
+CFLAGS+= -I${.CURDIR}/../../..
+CFLAGS+= -I${.CURDIR}/../../../../lib/libstand
+
+.if ${MK_FORTH} != "no"
+BOOT_FORTH= yes
+CFLAGS+= -DBOOT_FORTH
+CFLAGS+= -I${.CURDIR}/../../ficl
+CFLAGS+= -I${.CURDIR}/../../ficl/${MACHINE_CPUARCH}
+.endif
+
+.PATH: ${.CURDIR}/../../common
+.include "${.CURDIR}/../../common/Makefile.inc"
+
+CFLAGS+= -I${.CURDIR}/../../common
+
+FILES+= loader.help
+CLEANFILES+= loader.help
+loader.help: help.common
+ cat ${.ALLSRC} | awk -f ${.CURDIR}/../../common/merge_help.awk \
+ > ${.TARGET}
+
+.PATH: ${.CURDIR}/../../forth
+FILES+= loader.4th support.4th loader.conf
+FILES+= screen.4th frames.4th
+FILES+= beastie.4th brand.4th check-password.4th color.4th delay.4th
+FILES+= menu.4th menu-commands.4th menusets.4th shortcuts.4th version.4th
+.if !exists(${DESTDIR}/boot/loader.rc)
+FILES+= loader.rc
+.endif
+.if !exists(${DESTDIR}/boot/menu.rc)
+FILES+= menu.rc
+.endif
+FILESDIR_loader.conf= /boot/defaults
+
+.include <bsd.lib.mk>
Property changes on: trunk/sys/boot/ia64/common/Makefile
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/common/autoload.c
===================================================================
--- trunk/sys/boot/ia64/common/autoload.c (rev 0)
+++ trunk/sys/boot/ia64/common/autoload.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,36 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 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: stable/10/sys/boot/ia64/common/autoload.c 164010 2006-11-05 22:03:04Z marcel $");
+
+int
+ia64_autoload(void)
+{
+
+ return (0);
+}
Property changes on: trunk/sys/boot/ia64/common/autoload.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/common/bootinfo.c
===================================================================
--- trunk/sys/boot/ia64/common/bootinfo.c (rev 0)
+++ trunk/sys/boot/ia64/common/bootinfo.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,297 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 1998 Michael Smith <msmith at freebsd.org>
+ * Copyright (c) 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 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: stable/10/sys/boot/ia64/common/bootinfo.c 271132 2014-09-04 20:47:14Z emaste $");
+
+#include <stand.h>
+#include <string.h>
+#include <sys/param.h>
+#include <sys/reboot.h>
+#include <sys/linker.h>
+#include <sys/boot.h>
+
+#include <efi.h>
+#include <efilib.h>
+
+#include "libia64.h"
+
+static const char howto_switches[] = "aCdrgDmphsv";
+static int howto_masks[] = {
+ RB_ASKNAME, RB_CDROM, RB_KDB, RB_DFLTROOT, RB_GDB, RB_MULTIPLE,
+ RB_MUTE, RB_PAUSE, RB_SERIAL, RB_SINGLE, RB_VERBOSE
+};
+
+int
+bi_getboothowto(char *kargs)
+{
+ const char *sw;
+ char *opts;
+ int howto, i;
+
+ howto = 0;
+
+ /* Get the boot options from the environment first. */
+ for (i = 0; howto_names[i].ev != NULL; i++) {
+ if (getenv(howto_names[i].ev) != NULL)
+ howto |= howto_names[i].mask;
+ }
+
+ /* Parse kargs */
+ if (kargs == NULL)
+ return (howto);
+
+ opts = strchr(kargs, '-');
+ while (opts != NULL) {
+ while (*(++opts) != '\0') {
+ sw = strchr(howto_switches, *opts);
+ if (sw == NULL)
+ break;
+ howto |= howto_masks[sw - howto_switches];
+ }
+ opts = strchr(opts, '-');
+ }
+
+ return (howto);
+}
+
+/*
+ * Copy the environment into the load area starting at (addr).
+ * Each variable is formatted as <name>=<value>, with a single nul
+ * separating each variable, and a double nul terminating the environment.
+ */
+vm_offset_t
+bi_copyenv(vm_offset_t start)
+{
+ struct env_var *ep;
+ vm_offset_t addr, last;
+ size_t len;
+
+ addr = last = start;
+
+ /* Traverse the environment. */
+ for (ep = environ; ep != NULL; ep = ep->ev_next) {
+ len = strlen(ep->ev_name);
+ if (ia64_copyin(ep->ev_name, addr, len) != len)
+ break;
+ addr += len;
+ if (ia64_copyin("=", addr, 1) != 1)
+ break;
+ addr++;
+ if (ep->ev_value != NULL) {
+ len = strlen(ep->ev_value);
+ if (ia64_copyin(ep->ev_value, addr, len) != len)
+ break;
+ addr += len;
+ }
+ if (ia64_copyin("", addr, 1) != 1)
+ break;
+ last = ++addr;
+ }
+
+ if (ia64_copyin("", last++, 1) != 1)
+ last = start;
+ return(last);
+}
+
+/*
+ * Copy module-related data into the load area, where it can be
+ * used as a directory for loaded modules.
+ *
+ * Module data is presented in a self-describing format. Each datum
+ * is preceded by a 32-bit identifier and a 32-bit size field.
+ *
+ * Currently, the following data are saved:
+ *
+ * MOD_NAME (variable) module name (string)
+ * MOD_TYPE (variable) module type (string)
+ * MOD_ARGS (variable) module parameters (string)
+ * MOD_ADDR sizeof(vm_offset_t) module load address
+ * MOD_SIZE sizeof(size_t) module size
+ * MOD_METADATA (variable) type-specific metadata
+ */
+#define COPY32(v, a) { \
+ u_int32_t x = (v); \
+ ia64_copyin(&x, a, sizeof(x)); \
+ a += sizeof(x); \
+}
+
+#define MOD_STR(t, a, s) { \
+ COPY32(t, a); \
+ COPY32(strlen(s) + 1, a); \
+ ia64_copyin(s, a, strlen(s) + 1); \
+ a += roundup(strlen(s) + 1, sizeof(u_int64_t));\
+}
+
+#define MOD_NAME(a, s) MOD_STR(MODINFO_NAME, a, s)
+#define MOD_TYPE(a, s) MOD_STR(MODINFO_TYPE, a, s)
+#define MOD_ARGS(a, s) MOD_STR(MODINFO_ARGS, a, s)
+
+#define MOD_VAR(t, a, s) { \
+ COPY32(t, a); \
+ COPY32(sizeof(s), a); \
+ ia64_copyin(&s, a, sizeof(s)); \
+ a += roundup(sizeof(s), sizeof(u_int64_t)); \
+}
+
+#define MOD_ADDR(a, s) MOD_VAR(MODINFO_ADDR, a, s)
+#define MOD_SIZE(a, s) MOD_VAR(MODINFO_SIZE, a, s)
+
+#define MOD_METADATA(a, mm) { \
+ COPY32(MODINFO_METADATA | mm->md_type, a); \
+ COPY32(mm->md_size, a); \
+ ia64_copyin(mm->md_data, a, mm->md_size); \
+ a += roundup(mm->md_size, sizeof(u_int64_t));\
+}
+
+#define MOD_END(a) { \
+ COPY32(MODINFO_END, a); \
+ COPY32(0, a); \
+}
+
+vm_offset_t
+bi_copymodules(vm_offset_t addr)
+{
+ struct preloaded_file *fp;
+ struct file_metadata *md;
+
+ /* Start with the first module on the list, should be the kernel. */
+ for (fp = file_findfile(NULL, NULL); fp != NULL; fp = fp->f_next) {
+ /* The name field must come first. */
+ MOD_NAME(addr, fp->f_name);
+ MOD_TYPE(addr, fp->f_type);
+ if (fp->f_args)
+ MOD_ARGS(addr, fp->f_args);
+ MOD_ADDR(addr, fp->f_addr);
+ MOD_SIZE(addr, fp->f_size);
+ for (md = fp->f_metadata; md != NULL; md = md->md_next) {
+ if (!(md->md_type & MODINFOMD_NOCOPY))
+ MOD_METADATA(addr, md);
+ }
+ }
+ MOD_END(addr);
+ return(addr);
+}
+
+/*
+ * Load the information expected by the kernel.
+ *
+ * - The kernel environment is copied into kernel space.
+ * - Module metadata are formatted and placed in kernel space.
+ */
+int
+ia64_bootinfo(struct preloaded_file *fp, struct bootinfo **res)
+{
+ struct bootinfo bi;
+ struct preloaded_file *xp;
+ struct file_metadata *md;
+ struct devdesc *rootdev;
+ char *rootdevname;
+ vm_offset_t addr, ssym, esym;
+ int error;
+
+ *res = NULL;
+ bzero(&bi, sizeof(struct bootinfo));
+ bi.bi_magic = BOOTINFO_MAGIC;
+ bi.bi_version = 1;
+ bi.bi_boothowto = bi_getboothowto(fp->f_args);
+
+ /*
+ * Allow the environment variable 'rootdev' to override the supplied
+ * device. This should perhaps go to MI code and/or have $rootdev
+ * tested/set by MI code before launching the kernel.
+ */
+ rootdevname = getenv("rootdev");
+ ia64_getdev((void**)&rootdev, rootdevname, NULL);
+ if (rootdev != NULL) {
+ /* Try reading /etc/fstab to select the root device. */
+ getrootmount(ia64_fmtdev(rootdev));
+ free(rootdev);
+ }
+
+ md = file_findmetadata(fp, MODINFOMD_SSYM);
+ ssym = (md != NULL) ? *((vm_offset_t *)&(md->md_data)) : 0;
+ md = file_findmetadata(fp, MODINFOMD_ESYM);
+ esym = (md != NULL) ? *((vm_offset_t *)&(md->md_data)) : 0;
+ if (ssym != 0 && esym != 0) {
+ bi.bi_symtab = ssym;
+ bi.bi_esymtab = esym;
+ }
+
+ /* Find the last module in the chain. */
+ addr = 0;
+ for (xp = file_findfile(NULL, NULL); xp != NULL; xp = xp->f_next) {
+ if (addr < (xp->f_addr + xp->f_size))
+ addr = xp->f_addr + xp->f_size;
+ }
+
+ addr = (addr + 15) & ~15;
+
+ /* Copy module list and metadata. */
+ bi.bi_modulep = addr;
+ addr = bi_copymodules(addr);
+ if (addr <= bi.bi_modulep) {
+ addr = bi.bi_modulep;
+ bi.bi_modulep = 0;
+ }
+
+ addr = (addr + 15) & ~15;
+
+ /* Copy our environment. */
+ bi.bi_envp = addr;
+ addr = bi_copyenv(addr);
+ if (addr <= bi.bi_envp) {
+ addr = bi.bi_envp;
+ bi.bi_envp = 0;
+ }
+
+ addr = (addr + 15) & ~15;
+ bi.bi_kernend = addr;
+
+ error = ia64_platform_bootinfo(&bi, res);
+ if (error)
+ return (error);
+
+ if (IS_LEGACY_KERNEL()) {
+ if (*res == NULL)
+ return (EDOOFUS);
+
+ bcopy(&bi, *res, sizeof(bi));
+ return (0);
+ }
+
+ bi.bi_pbvm_pgtbl = (uintptr_t)ia64_pgtbl;
+ bi.bi_pbvm_pgtblsz = ia64_pgtblsz;
+ ia64_copyin((void *)bi.bi_memmap, addr, bi.bi_memmap_size);
+ bi.bi_memmap = addr;
+ addr = (addr + bi.bi_memmap_size + 15) & ~15;
+ bi.bi_kernend = addr + sizeof(bi);
+ ia64_copyin(&bi, addr, sizeof(bi));
+ *res = (void *)addr;
+ return (0);
+}
Property changes on: trunk/sys/boot/ia64/common/bootinfo.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/common/copy.c
===================================================================
--- trunk/sys/boot/ia64/common/copy.c (rev 0)
+++ trunk/sys/boot/ia64/common/copy.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,218 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 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: stable/10/sys/boot/ia64/common/copy.c 221269 2011-04-30 20:16:49Z marcel $");
+
+#include <stand.h>
+#include <machine/param.h>
+#include <machine/pte.h>
+
+#include "libia64.h"
+
+u_int ia64_legacy_kernel;
+
+uint64_t *ia64_pgtbl;
+uint32_t ia64_pgtblsz;
+
+static int
+pgtbl_extend(u_int idx)
+{
+ vm_paddr_t pa;
+ uint64_t *pgtbl;
+ uint32_t pgtblsz;
+ u_int pot;
+
+ pgtblsz = (idx + 1) << 3;
+
+ /* The minimum size is 4KB. */
+ if (pgtblsz < 4096)
+ pgtblsz = 4096;
+
+ /* Find the next higher power of 2. */
+ pgtblsz--;
+ for (pot = 1; pot < 32; pot <<= 1)
+ pgtblsz = pgtblsz | (pgtblsz >> pot);
+ pgtblsz++;
+
+ /* The maximum size is 1MB. */
+ if (pgtblsz > 1048576)
+ return (ENOMEM);
+
+ /* Make sure the size is a valid (mappable) page size. */
+ if (pgtblsz == 32*1024 || pgtblsz == 128*1024 || pgtblsz == 512*1024)
+ pgtblsz <<= 1;
+
+ /* Allocate naturally aligned memory. */
+ pa = ia64_platform_alloc(0, pgtblsz);
+ if (pa == ~0UL)
+ return (ENOMEM);
+ pgtbl = (void *)pa;
+
+ /* Initialize new page table. */
+ if (ia64_pgtbl != NULL && ia64_pgtbl != pgtbl)
+ bcopy(ia64_pgtbl, pgtbl, ia64_pgtblsz);
+ bzero(pgtbl + (ia64_pgtblsz >> 3), pgtblsz - ia64_pgtblsz);
+
+ if (ia64_pgtbl != NULL && ia64_pgtbl != pgtbl)
+ ia64_platform_free(0, (uintptr_t)ia64_pgtbl, ia64_pgtblsz);
+
+ ia64_pgtbl = pgtbl;
+ ia64_pgtblsz = pgtblsz;
+ return (0);
+}
+
+void *
+ia64_va2pa(vm_offset_t va, size_t *len)
+{
+ uint64_t pa, pte;
+ u_int idx, ofs;
+ int error;
+
+ /* Backward compatibility. */
+ if (va >= IA64_RR_BASE(7)) {
+ ia64_legacy_kernel = 1;
+ pa = IA64_RR_MASK(va);
+ return ((void *)pa);
+ }
+
+ if (va < IA64_PBVM_BASE) {
+ error = EINVAL;
+ goto fail;
+ }
+
+ ia64_legacy_kernel = 0;
+
+ idx = (va - IA64_PBVM_BASE) >> IA64_PBVM_PAGE_SHIFT;
+ if (idx >= (ia64_pgtblsz >> 3)) {
+ error = pgtbl_extend(idx);
+ if (error)
+ goto fail;
+ }
+
+ ofs = va & IA64_PBVM_PAGE_MASK;
+ pte = ia64_pgtbl[idx];
+ if ((pte & PTE_PRESENT) == 0) {
+ pa = ia64_platform_alloc(va - ofs, IA64_PBVM_PAGE_SIZE);
+ if (pa == ~0UL) {
+ error = ENOMEM;
+ goto fail;
+ }
+ pte = PTE_AR_RWX | PTE_DIRTY | PTE_ACCESSED | PTE_PRESENT;
+ pte |= (pa & PTE_PPN_MASK);
+ ia64_pgtbl[idx] = pte;
+ }
+ pa = (pte & PTE_PPN_MASK) + ofs;
+
+ /* We can not cross page boundaries (in general). */
+ if (*len + ofs > IA64_PBVM_PAGE_SIZE)
+ *len = IA64_PBVM_PAGE_SIZE - ofs;
+
+ return ((void *)pa);
+
+ fail:
+ *len = 0;
+ return (NULL);
+}
+
+ssize_t
+ia64_copyin(const void *src, vm_offset_t va, size_t len)
+{
+ void *pa;
+ ssize_t res;
+ size_t sz;
+
+ res = 0;
+ while (len > 0) {
+ sz = len;
+ pa = ia64_va2pa(va, &sz);
+ if (sz == 0)
+ break;
+ bcopy(src, pa, sz);
+ len -= sz;
+ res += sz;
+ va += sz;
+ }
+ return (res);
+}
+
+ssize_t
+ia64_copyout(vm_offset_t va, void *dst, size_t len)
+{
+ void *pa;
+ ssize_t res;
+ size_t sz;
+
+ res = 0;
+ while (len > 0) {
+ sz = len;
+ pa = ia64_va2pa(va, &sz);
+ if (sz == 0)
+ break;
+ bcopy(pa, dst, sz);
+ len -= sz;
+ res += sz;
+ va += sz;
+ }
+ return (res);
+}
+
+uint64_t
+ia64_loadaddr(u_int type, void *data, uint64_t addr)
+{
+ uint64_t align;
+
+ /*
+ * Align ELF objects at PBVM page boundaries. Align all other
+ * objects at cache line boundaries for good measure.
+ */
+ align = (type == LOAD_ELF) ? IA64_PBVM_PAGE_SIZE : CACHE_LINE_SIZE;
+ return ((addr + align - 1) & ~(align - 1));
+}
+
+ssize_t
+ia64_readin(int fd, vm_offset_t va, size_t len)
+{
+ void *pa;
+ ssize_t res, s;
+ size_t sz;
+
+ res = 0;
+ while (len > 0) {
+ sz = len;
+ pa = ia64_va2pa(va, &sz);
+ if (sz == 0)
+ break;
+ s = read(fd, pa, sz);
+ if (s <= 0)
+ break;
+ len -= s;
+ res += s;
+ va += s;
+ }
+ return (res);
+}
Property changes on: trunk/sys/boot/ia64/common/copy.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/common/devicename.c
===================================================================
--- trunk/sys/boot/ia64/common/devicename.c (rev 0)
+++ trunk/sys/boot/ia64/common/devicename.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,170 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 1998 Michael Smith <msmith at freebsd.org>
+ * Copyright (c) 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 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: stable/10/sys/boot/ia64/common/devicename.c 164010 2006-11-05 22:03:04Z marcel $");
+
+#include <stand.h>
+#include <string.h>
+#include <sys/disklabel.h>
+#include "bootstrap.h"
+
+#include <efi.h>
+#include <efilib.h>
+
+static int ia64_parsedev(struct devdesc **, const char *, const char **);
+
+/*
+ * Point (dev) at an allocated device specifier for the device matching the
+ * path in (devspec). If it contains an explicit device specification,
+ * use that. If not, use the default device.
+ */
+int
+ia64_getdev(void **vdev, const char *devspec, const char **path)
+{
+ struct devdesc **dev = (struct devdesc **)vdev;
+ int rv;
+
+ /*
+ * If it looks like this is just a path and no device, then
+ * use the current device instead.
+ */
+ if (devspec == NULL || *devspec == '/' || !strchr(devspec, ':')) {
+ rv = ia64_parsedev(dev, getenv("currdev"), NULL);
+ if (rv == 0 && path != NULL)
+ *path = devspec;
+ return (rv);
+ }
+
+ /* Parse the device name off the beginning of the devspec. */
+ return (ia64_parsedev(dev, devspec, path));
+}
+
+/*
+ * Point (dev) at an allocated device specifier matching the string version
+ * at the beginning of (devspec). Return a pointer to the remaining
+ * text in (path).
+ *
+ * In all cases, the beginning of (devspec) is compared to the names
+ * of known devices in the device switch, and then any following text
+ * is parsed according to the rules applied to the device type.
+ *
+ * For disk-type devices, the syntax is:
+ *
+ * fs<unit>:
+ */
+static int
+ia64_parsedev(struct devdesc **dev, const char *devspec, const char **path)
+{
+ struct devdesc *idev;
+ struct devsw *dv;
+ char *cp;
+ const char *np;
+ int i, err;
+
+ /* minimum length check */
+ if (strlen(devspec) < 2)
+ return (EINVAL);
+
+ /* look for a device that matches */
+ for (i = 0; devsw[i] != NULL; i++) {
+ dv = devsw[i];
+ if (!strncmp(devspec, dv->dv_name, strlen(dv->dv_name)))
+ break;
+ }
+ if (devsw[i] == NULL)
+ return (ENOENT);
+
+ idev = malloc(sizeof(struct devdesc));
+ if (idev == NULL)
+ return (ENOMEM);
+
+ idev->d_dev = dv;
+ idev->d_type = dv->dv_type;
+ idev->d_unit = -1;
+
+ err = 0;
+ np = devspec + strlen(dv->dv_name);
+ if (*np != '\0' && *np != ':') {
+ idev->d_unit = strtol(np, &cp, 0);
+ if (cp == np) {
+ idev->d_unit = -1;
+ free(idev);
+ return (EUNIT);
+ }
+ }
+ if (*cp != '\0' && *cp != ':') {
+ free(idev);
+ return (EINVAL);
+ }
+
+ if (path != NULL)
+ *path = (*cp == 0) ? cp : cp + 1;
+ if (dev != NULL)
+ *dev = idev;
+ else
+ free(idev);
+ return (0);
+}
+
+char *
+ia64_fmtdev(void *vdev)
+{
+ struct devdesc *dev = (struct devdesc *)vdev;
+ static char buf[32]; /* XXX device length constant? */
+
+ switch(dev->d_type) {
+ case DEVT_NONE:
+ strcpy(buf, "(no device)");
+ break;
+
+ default:
+ sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_unit);
+ break;
+ }
+
+ return(buf);
+}
+
+/*
+ * Set currdev to suit the value being supplied in (value)
+ */
+int
+ia64_setcurrdev(struct env_var *ev, int flags, const void *value)
+{
+ struct devdesc *ncurr;
+ int rv;
+
+ rv = ia64_parsedev(&ncurr, value, NULL);
+ if (rv != 0)
+ return(rv);
+
+ free(ncurr);
+ env_setenv(ev->ev_name, flags | EV_NOHOOK, value, NULL, NULL);
+ return (0);
+}
Property changes on: trunk/sys/boot/ia64/common/devicename.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/common/exec.c
===================================================================
--- trunk/sys/boot/ia64/common/exec.c (rev 0)
+++ trunk/sys/boot/ia64/common/exec.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,269 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 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: stable/10/sys/boot/ia64/common/exec.c 227629 2011-11-17 15:51:03Z marcel $");
+
+#include <stand.h>
+#include <string.h>
+
+#include <sys/param.h>
+#include <sys/linker.h>
+#include <machine/elf.h>
+#include <machine/ia64_cpu.h>
+#include <machine/pte.h>
+
+#include <efi.h>
+#include <efilib.h>
+
+#include "libia64.h"
+
+static u_int itr_idx = 0;
+static u_int dtr_idx = 0;
+
+static vm_offset_t ia64_text_start;
+static size_t ia64_text_size;
+
+static vm_offset_t ia64_data_start;
+static size_t ia64_data_size;
+
+static int elf64_exec(struct preloaded_file *amp);
+static int elf64_obj_exec(struct preloaded_file *amp);
+
+static struct file_format ia64_elf = {
+ elf64_loadfile,
+ elf64_exec
+};
+static struct file_format ia64_elf_obj = {
+ elf64_obj_loadfile,
+ elf64_obj_exec
+};
+
+struct file_format *file_formats[] = {
+ &ia64_elf,
+ &ia64_elf_obj,
+ NULL
+};
+
+static u_int
+sz2shft(vm_offset_t ofs, vm_size_t sz)
+{
+ vm_size_t s;
+ u_int shft;
+
+ shft = 12; /* Start with 4K */
+ s = 1 << shft;
+ while (s <= sz) {
+ shft++;
+ s <<= 1;
+ }
+ do {
+ shft--;
+ s >>= 1;
+ } while (ofs & (s - 1));
+
+ return (shft);
+}
+
+/*
+ * Entered with psr.ic and psr.i both zero.
+ */
+static void
+enter_kernel(uint64_t start, struct bootinfo *bi)
+{
+
+ __asm __volatile("srlz.i;;");
+ __asm __volatile("mov cr.ipsr=%0"
+ :: "r"(IA64_PSR_IC
+ | IA64_PSR_DT
+ | IA64_PSR_RT
+ | IA64_PSR_IT
+ | IA64_PSR_BN));
+ __asm __volatile("mov cr.iip=%0" :: "r"(start));
+ __asm __volatile("mov cr.ifs=r0;;");
+ __asm __volatile("mov ar.rsc=0;; flushrs;;");
+ __asm __volatile("mov r8=%0" :: "r" (bi));
+ __asm __volatile("rfi;;");
+
+ /* NOTREACHED */
+}
+
+static u_int
+mmu_wire(vm_offset_t va, vm_paddr_t pa, u_int pgshft, u_int acc)
+{
+ pt_entry_t pte;
+
+ /* Round up to the smallest possible page size. */
+ if (pgshft < 12)
+ pgshft = 12;
+ /* Truncate to the largest possible page size (256MB). */
+ if (pgshft > 28)
+ pgshft = 28;
+ /* Round down to a valid (mappable) page size. */
+ if (pgshft > 14 && (pgshft & 1) != 0)
+ pgshft--;
+
+ pte = PTE_PRESENT | PTE_MA_WB | PTE_ACCESSED | PTE_DIRTY |
+ PTE_PL_KERN | (acc & PTE_AR_MASK) | (pa & PTE_PPN_MASK);
+
+ __asm __volatile("mov cr.ifa=%0" :: "r"(va));
+ __asm __volatile("mov cr.itir=%0" :: "r"(pgshft << 2));
+ __asm __volatile("srlz.d;;");
+
+ __asm __volatile("ptr.d %0,%1" :: "r"(va), "r"(pgshft << 2));
+ __asm __volatile("srlz.d;;");
+ __asm __volatile("itr.d dtr[%0]=%1" :: "r"(dtr_idx), "r"(pte));
+ __asm __volatile("srlz.d;;");
+ dtr_idx++;
+
+ if (acc == PTE_AR_RWX || acc == PTE_AR_RX) {
+ __asm __volatile("ptr.i %0,%1;;" :: "r"(va), "r"(pgshft << 2));
+ __asm __volatile("srlz.i;;");
+ __asm __volatile("itr.i itr[%0]=%1;;" :: "r"(itr_idx), "r"(pte));
+ __asm __volatile("srlz.i;;");
+ itr_idx++;
+ }
+
+ return (pgshft);
+}
+
+static void
+mmu_setup_legacy(uint64_t entry)
+{
+
+ /*
+ * Region 6 is direct mapped UC and region 7 is direct mapped
+ * WC. The details of this is controlled by the Alt {I,D}TLB
+ * handlers. Here we just make sure that they have the largest
+ * possible page size to minimise TLB usage.
+ */
+ ia64_set_rr(IA64_RR_BASE(6), (6 << 8) | (28 << 2));
+ ia64_set_rr(IA64_RR_BASE(7), (7 << 8) | (28 << 2));
+ __asm __volatile("srlz.i;;");
+
+ mmu_wire(entry, IA64_RR_MASK(entry), 28, PTE_AR_RWX);
+}
+
+static void
+mmu_setup_paged(struct bootinfo *bi)
+{
+ void *pa;
+ size_t sz;
+ u_int shft;
+
+ ia64_set_rr(IA64_RR_BASE(IA64_PBVM_RR),
+ (IA64_PBVM_RR << 8) | (IA64_PBVM_PAGE_SHIFT << 2));
+ __asm __volatile("srlz.i;;");
+
+ /* Wire the PBVM page table. */
+ mmu_wire(IA64_PBVM_PGTBL, (uintptr_t)ia64_pgtbl,
+ sz2shft(IA64_PBVM_PGTBL, ia64_pgtblsz), PTE_AR_RW);
+
+ /* Wire as much of the text segment as we can. */
+ sz = ia64_text_size; /* XXX */
+ pa = ia64_va2pa(ia64_text_start, &ia64_text_size);
+ ia64_text_size = sz; /* XXX */
+ shft = sz2shft(ia64_text_start, ia64_text_size);
+ shft = mmu_wire(ia64_text_start, (uintptr_t)pa, shft, PTE_AR_RWX);
+ ia64_copyin(&shft, (uintptr_t)&bi->bi_text_mapped, 4);
+
+ /* Wire as much of the data segment as well. */
+ sz = ia64_data_size; /* XXX */
+ pa = ia64_va2pa(ia64_data_start, &ia64_data_size);
+ ia64_data_size = sz; /* XXX */
+ shft = sz2shft(ia64_data_start, ia64_data_size);
+ shft = mmu_wire(ia64_data_start, (uintptr_t)pa, shft, PTE_AR_RW);
+ ia64_copyin(&shft, (uintptr_t)&bi->bi_data_mapped, 4);
+
+ /* Update the bootinfo with the number of TRs used. */
+ ia64_copyin(&itr_idx, (uintptr_t)&bi->bi_itr_used, 4);
+ ia64_copyin(&dtr_idx, (uintptr_t)&bi->bi_dtr_used, 4);
+}
+
+static int
+elf64_exec(struct preloaded_file *fp)
+{
+ struct bootinfo *bi;
+ struct file_metadata *md;
+ Elf_Ehdr *hdr;
+ int error;
+
+ md = file_findmetadata(fp, MODINFOMD_ELFHDR);
+ if (md == NULL)
+ return (EINVAL);
+
+ error = ia64_bootinfo(fp, &bi);
+ if (error)
+ return (error);
+
+ hdr = (Elf_Ehdr *)&(md->md_data);
+ printf("Entering %s at 0x%lx...\n", fp->f_name, hdr->e_entry);
+
+ error = ia64_platform_enter(fp->f_name);
+ if (error)
+ return (error);
+
+ __asm __volatile("rsm psr.ic|psr.i;;");
+ __asm __volatile("srlz.i;;");
+
+ if (IS_LEGACY_KERNEL())
+ mmu_setup_legacy(hdr->e_entry);
+ else
+ mmu_setup_paged(bi);
+
+ enter_kernel(hdr->e_entry, bi);
+ /* NOTREACHED */
+ return (EDOOFUS);
+}
+
+static int
+elf64_obj_exec(struct preloaded_file *fp)
+{
+
+ printf("%s called for preloaded file %p (=%s):\n", __func__, fp,
+ fp->f_name);
+ return (ENOSYS);
+}
+
+void
+ia64_loadseg(Elf_Ehdr *eh, Elf_Phdr *ph, uint64_t delta)
+{
+
+ if (eh->e_type != ET_EXEC)
+ return;
+
+ if (ph->p_flags & PF_X) {
+ ia64_text_start = ph->p_vaddr + delta;
+ ia64_text_size = ph->p_memsz;
+
+ ia64_sync_icache(ia64_text_start, ia64_text_size);
+ } else {
+ ia64_data_start = ph->p_vaddr + delta;
+ ia64_data_size = ph->p_memsz;
+ }
+}
+
Property changes on: trunk/sys/boot/ia64/common/exec.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/common/icache.c
===================================================================
--- trunk/sys/boot/ia64/common/icache.c (rev 0)
+++ trunk/sys/boot/ia64/common/icache.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,52 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2011 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: stable/10/sys/boot/ia64/common/icache.c 222798 2011-06-07 00:39:15Z marcel $");
+
+#include <stand.h>
+#include <machine/ia64_cpu.h>
+
+#include "libia64.h"
+
+void
+ia64_sync_icache(vm_offset_t va, size_t sz)
+{
+ uintptr_t pa;
+ size_t cnt, max;
+
+ while (sz > 0) {
+ max = sz;
+ pa = (uintptr_t)ia64_va2pa(va, &max);
+ for (cnt = 0; cnt < max; cnt += 32)
+ ia64_fc_i(pa + cnt);
+ ia64_sync_i();
+ va += max;
+ sz -= max;
+ }
+ ia64_srlz_i();
+}
Property changes on: trunk/sys/boot/ia64/common/icache.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/common/libia64.h
===================================================================
--- trunk/sys/boot/ia64/common/libia64.h (rev 0)
+++ trunk/sys/boot/ia64/common/libia64.h 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,76 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 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.
+ *
+ * $FreeBSD: stable/10/sys/boot/ia64/common/libia64.h 222798 2011-06-07 00:39:15Z marcel $
+ */
+
+#ifndef _LIBIA64_H_
+#define _LIBIA64_H_
+
+#include <bootstrap.h>
+#include <ia64/include/bootinfo.h>
+#include <machine/vmparam.h>
+
+#define IS_LEGACY_KERNEL() (ia64_legacy_kernel)
+
+/*
+ * Portability functions provided by the loader
+ * implementation specific to the platform.
+ */
+vm_paddr_t ia64_platform_alloc(vm_offset_t, vm_size_t);
+void ia64_platform_free(vm_offset_t, vm_paddr_t, vm_size_t);
+int ia64_platform_bootinfo(struct bootinfo *, struct bootinfo **);
+int ia64_platform_enter(const char *);
+
+/*
+ * Functions and variables provided by the ia64 common code
+ * and shared by all loader implementations.
+ */
+extern u_int ia64_legacy_kernel;
+
+extern uint64_t *ia64_pgtbl;
+extern uint32_t ia64_pgtblsz;
+
+int ia64_autoload(void);
+int ia64_bootinfo(struct preloaded_file *, struct bootinfo **);
+uint64_t ia64_loadaddr(u_int, void *, uint64_t);
+#ifdef __elfN
+void ia64_loadseg(Elf_Ehdr *, Elf_Phdr *, uint64_t);
+#else
+void ia64_loadseg(void *, void *, uint64_t);
+#endif
+
+ssize_t ia64_copyin(const void *, vm_offset_t, size_t);
+ssize_t ia64_copyout(vm_offset_t, void *, size_t);
+void ia64_sync_icache(vm_offset_t, size_t);
+ssize_t ia64_readin(int, vm_offset_t, size_t);
+void *ia64_va2pa(vm_offset_t, size_t *);
+
+char *ia64_fmtdev(struct devdesc *);
+int ia64_getdev(void **, const char *, const char **);
+int ia64_setcurrdev(struct env_var *, int, const void *);
+
+#endif /* !_LIBIA64_H_ */
Property changes on: trunk/sys/boot/ia64/common/libia64.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/efi/Makefile
===================================================================
--- trunk/sys/boot/ia64/efi/Makefile (rev 0)
+++ trunk/sys/boot/ia64/efi/Makefile 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,59 @@
+# $MidnightBSD$
+# $FreeBSD: stable/10/sys/boot/ia64/efi/Makefile 294460 2016-01-20 21:22:06Z emaste $
+
+MAN=
+
+.include <bsd.own.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*'; \
+ 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>
Property changes on: trunk/sys/boot/ia64/efi/Makefile
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/efi/conf.c
===================================================================
--- trunk/sys/boot/ia64/efi/conf.c (rev 0)
+++ trunk/sys/boot/ia64/efi/conf.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,83 @@
+/* $MidnightBSD$ */
+/*-
+ * 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: stable/10/sys/boot/ia64/efi/conf.c 219691 2011-03-16 03:53:18Z marcel $");
+
+#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
+};
Property changes on: trunk/sys/boot/ia64/efi/conf.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/efi/efimd.c
===================================================================
--- trunk/sys/boot/ia64/efi/efimd.c (rev 0)
+++ trunk/sys/boot/ia64/efi/efimd.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,265 @@
+/* $MidnightBSD$ */
+/*-
+ * 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: stable/10/sys/boot/ia64/efi/efimd.c 222799 2011-06-07 00:59:31Z marcel $");
+
+#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);
+}
Property changes on: trunk/sys/boot/ia64/efi/efimd.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/efi/ldscript.ia64
===================================================================
--- trunk/sys/boot/ia64/efi/ldscript.ia64 (rev 0)
+++ trunk/sys/boot/ia64/efi/ldscript.ia64 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,73 @@
+/* $FreeBSD: stable/10/sys/boot/ia64/efi/ldscript.ia64 218822 2011-02-18 20:54:12Z dim $ */
+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) }
+}
Property changes on: trunk/sys/boot/ia64/efi/ldscript.ia64
___________________________________________________________________
Added: mnbsd:nokeywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: trunk/sys/boot/ia64/efi/main.c
===================================================================
--- trunk/sys/boot/ia64/efi/main.c (rev 0)
+++ trunk/sys/boot/ia64/efi/main.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,620 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 1998 Michael Smith <msmith at freebsd.org>
+ * Copyright (c) 1998,2000 Doug Rabson <dfr at 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: stable/10/sys/boot/ia64/efi/main.c 295538 2016-02-11 17:56:09Z smh $");
+
+#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, NULL);
+ 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]);
+}
Property changes on: trunk/sys/boot/ia64/efi/main.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/efi/start.S
===================================================================
--- trunk/sys/boot/ia64/efi/start.S (rev 0)
+++ trunk/sys/boot/ia64/efi/start.S 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,291 @@
+/* $MidnightBSD$ */
+/*-
+ * 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: stable/10/sys/boot/ia64/efi/start.S 154527 2006-01-18 18:49:25Z marcel $
+ */
+
+ .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:
Property changes on: trunk/sys/boot/ia64/efi/start.S
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/efi/version
===================================================================
--- trunk/sys/boot/ia64/efi/version (rev 0)
+++ trunk/sys/boot/ia64/efi/version 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,26 @@
+$FreeBSD: stable/10/sys/boot/ia64/efi/version 222799 2011-06-07 00:59:31Z marcel $
+
+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.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.
Property changes on: trunk/sys/boot/ia64/efi/version
___________________________________________________________________
Added: mnbsd:nokeywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/Makefile
===================================================================
--- trunk/sys/boot/ia64/ski/Makefile (rev 0)
+++ trunk/sys/boot/ia64/ski/Makefile 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,40 @@
+# $MidnightBSD$
+# $FreeBSD: stable/10/sys/boot/ia64/ski/Makefile 276486 2014-12-31 23:25:37Z ngie $
+
+MAN=
+
+.include <bsd.own.mk>
+MK_SSP= no
+
+PROG= skiload
+STRIP= # We must not strip skiload at install time.
+
+SRCS= acpi_stub.c conf.c delay.c efi_stub.c exit.c main.c \
+ pal_stub.S sal_stub.c skiconsole.c skifs.c skimd.c \
+ ssc.c start.S time.c vers.c
+
+CFLAGS+= -I${.CURDIR}/../common
+CFLAGS+= -I${.CURDIR}/../../common
+CFLAGS+= -I${.CURDIR}/../../..
+CFLAGS+= -I${.CURDIR}/../../../../lib/libstand
+
+LDSCRIPT= ${.CURDIR}/ldscript.${MACHINE_CPUARCH}
+LDFLAGS= -Wl,-T${LDSCRIPT}
+
+NEWVERSWHAT= "SKI boot" ${MACHINE_CPUARCH}
+
+vers.c: ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/version
+ sh ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/version ${NEWVERSWHAT}
+
+CLEANFILES= vers.c
+
+LIBIA64= ${.OBJDIR}/../common/libia64.a
+.if ${MK_FORTH} != "no"
+LIBFICL= ${.OBJDIR}/../../ficl/libficl.a
+.endif
+
+DPADD= ${LIBIA64} ${LIBFICL} ${LIBSTAND}
+LDADD= -Wl,--whole-archive ${LIBIA64} -Wl,--no-whole-archive \
+ ${LIBFICL} -lstand
+
+.include <bsd.prog.mk>
Property changes on: trunk/sys/boot/ia64/ski/Makefile
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/acpi_stub.c
===================================================================
--- trunk/sys/boot/ia64/ski/acpi_stub.c (rev 0)
+++ trunk/sys/boot/ia64/ski/acpi_stub.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,184 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2003 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: stable/10/sys/boot/ia64/ski/acpi_stub.c 193530 2009-06-05 18:44:36Z jkim $");
+
+#include <contrib/dev/acpica/include/acpi.h>
+
+#define APIC_IO_SAPIC 6
+#define APIC_LOCAL_SAPIC 7
+
+#pragma pack(1)
+
+typedef struct /* LOCAL SAPIC */
+{
+ ACPI_SUBTABLE_HEADER Header;
+ UINT8 ProcessorId; /* ACPI processor id */
+ UINT8 LocalSapicId; /* Processor local SAPIC id */
+ UINT8 LocalSapicEid; /* Processor local SAPIC eid */
+ UINT8 Reserved[3];
+ UINT32 ProcessorEnabled: 1;
+ UINT32 FlagsReserved: 31;
+} LOCAL_SAPIC;
+
+typedef struct /* IO SAPIC */
+{
+ ACPI_SUBTABLE_HEADER Header;
+ UINT8 IoSapicId; /* I/O SAPIC ID */
+ UINT8 Reserved; /* reserved - must be zero */
+ UINT32 Vector; /* interrupt base */
+ UINT64 IoSapicAddress; /* SAPIC's physical address */
+} IO_SAPIC;
+
+/*
+ */
+
+struct {
+ ACPI_TABLE_MADT MADT;
+ ACPI_MADT_LOCAL_SAPIC cpu0;
+ ACPI_MADT_LOCAL_SAPIC cpu1;
+ ACPI_MADT_LOCAL_SAPIC cpu2;
+ ACPI_MADT_LOCAL_SAPIC cpu3;
+ ACPI_MADT_IO_SAPIC sapic;
+} apic = {
+ /* Header. */
+ {
+ ACPI_SIG_MADT, /* Signature. */
+ sizeof(apic), /* Length of table. */
+ 0, /* ACPI minor revision. */
+ 0, /* Checksum. */
+ "FBSD", /* OEM Id. */
+ "SKI", /* OEM table Id. */
+ 0, /* OEM revision. */
+ "FBSD", /* ASL compiler Id. */
+ 0, /* ASL revision. */
+ 0xfee00000,
+ },
+ /* cpu0. */
+ {
+ APIC_LOCAL_SAPIC, /* Type. */
+ sizeof(apic.cpu0), /* Length. */
+ 0, /* ACPI processor id */
+ 0, /* Processor local SAPIC id */
+ 0, /* Processor local SAPIC eid */
+ { 0, 0, 0 },
+ 1, /* FL: Enabled. */
+ },
+ /* cpu1. */
+ {
+ APIC_LOCAL_SAPIC, /* Type. */
+ sizeof(apic.cpu1), /* Length. */
+ 1, /* ACPI processor id */
+ 0, /* Processor local SAPIC id */
+ 1, /* Processor local SAPIC eid */
+ { 0, 0, 0 },
+ 1, /* FL: Enabled. */
+ },
+ /* cpu2. */
+ {
+ APIC_LOCAL_SAPIC, /* Type. */
+ sizeof(apic.cpu2), /* Length. */
+ 2, /* ACPI processor id */
+ 1, /* Processor local SAPIC id */
+ 0, /* Processor local SAPIC eid */
+ { 0, 0, 0 },
+ 0, /* FL: Enabled. */
+ },
+ /* cpu3. */
+ {
+ APIC_LOCAL_SAPIC, /* Type. */
+ sizeof(apic.cpu3), /* Length. */
+ 3, /* ACPI processor id */
+ 1, /* Processor local SAPIC id */
+ 1, /* Processor local SAPIC eid */
+ { 0, 0, 0 },
+ 0, /* FL: Enabled. */
+ },
+ /* sapic. */
+ {
+ APIC_IO_SAPIC, /* Type. */
+ sizeof(apic.sapic), /* Length. */
+ 4, /* IO SAPIC id. */
+ 0,
+ 16, /* Interrupt base. */
+ 0xfec00000 /* IO SAPIC address. */
+ }
+};
+
+struct {
+ ACPI_TABLE_HEADER Header;
+ UINT64 apic_tbl;
+} xsdt = {
+ {
+ ACPI_SIG_XSDT, /* Signature. */
+ sizeof(xsdt), /* Length of table. */
+ 0, /* ACPI minor revision. */
+ 0, /* XXX checksum. */
+ "FBSD", /* OEM Id. */
+ "SKI", /* OEM table Id. */
+ 0, /* OEM revision. */
+ "FBSD", /* ASL compiler Id. */
+ 0 /* ASL revision. */
+ },
+ 0UL /* XXX APIC table address. */
+};
+
+ACPI_TABLE_RSDP acpi_root = {
+ ACPI_SIG_RSDP,
+ 0, /* XXX checksum. */
+ "FBSD",
+ 2, /* ACPI Rev 2.0. */
+ 0UL,
+ sizeof(xsdt), /* XSDT length. */
+ 0UL, /* XXX PA of XSDT. */
+ 0, /* XXX Extended checksum. */
+};
+
+static void
+cksum(void *addr, int sz, UINT8 *sum)
+{
+ UINT8 *p, s;
+
+ p = addr;
+ s = 0;
+ while (sz--)
+ s += *p++;
+ *sum = -s;
+}
+
+void
+acpi_stub_init(void)
+{
+ acpi_root.XsdtPhysicalAddress = (UINT64)&xsdt;
+ cksum(&acpi_root, 20, &acpi_root.Checksum);
+ cksum(&acpi_root, sizeof(acpi_root), &acpi_root.ExtendedChecksum);
+
+ cksum(&apic, sizeof(apic), &apic.MADT.Header.Checksum);
+ xsdt.apic_tbl = (UINT32)&apic;
+ cksum(&xsdt, sizeof(xsdt), &xsdt.Header.Checksum);
+}
Property changes on: trunk/sys/boot/ia64/ski/acpi_stub.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/conf.c
===================================================================
--- trunk/sys/boot/ia64/ski/conf.c (rev 0)
+++ trunk/sys/boot/ia64/ski/conf.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,75 @@
+/* $MidnightBSD$ */
+/*-
+ * 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: stable/10/sys/boot/ia64/ski/conf.c 219691 2011-03-16 03:53:18Z marcel $");
+
+#include <stand.h>
+
+#include "libski.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[] = {
+ &skifs_dev,
+ NULL
+};
+
+struct fs_ops *file_system[] = {
+ &ski_fsops,
+ &ufs_fsops,
+ &gzipfs_fsops,
+ NULL
+};
+
+/*
+ * Consoles
+ *
+ * We don't prototype these in libski.h because they require
+ * data structures from bootstrap.h as well.
+ */
+extern struct console ski_console;
+
+struct console *consoles[] = {
+ &ski_console,
+ NULL
+};
Property changes on: trunk/sys/boot/ia64/ski/conf.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/delay.c
===================================================================
--- trunk/sys/boot/ia64/ski/delay.c (rev 0)
+++ trunk/sys/boot/ia64/ski/delay.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,35 @@
+/* $MidnightBSD$ */
+/*-
+ * 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/boot/ia64/ski/delay.c 135696 2004-09-24 03:53:50Z marcel $");
+
+void
+delay(int usecs)
+{
+ return;
+}
Property changes on: trunk/sys/boot/ia64/ski/delay.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/efi_stub.c
===================================================================
--- trunk/sys/boot/ia64/ski/efi_stub.c (rev 0)
+++ trunk/sys/boot/ia64/ski/efi_stub.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,260 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2003,2004 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: stable/10/sys/boot/ia64/ski/efi_stub.c 220313 2011-04-03 23:49:20Z marcel $");
+
+#include <sys/types.h>
+#include <machine/bootinfo.h>
+#include <machine/efi.h>
+#include <stand.h>
+#include "libski.h"
+
+extern void acpi_root;
+extern void sal_systab;
+
+struct efi_cfgtbl efi_cfgtab[] = {
+ { EFI_TABLE_ACPI20, (intptr_t)&acpi_root },
+ { EFI_TABLE_SAL, (intptr_t)&sal_systab }
+};
+
+static efi_status GetTime(struct efi_tm *, struct efi_tmcap *);
+static efi_status SetTime(struct efi_tm *);
+static efi_status GetWakeupTime(uint8_t *, uint8_t *, struct efi_tm *);
+static efi_status SetWakeupTime(uint8_t, struct efi_tm *);
+
+static efi_status SetVirtualAddressMap(u_long, u_long, uint32_t,
+ struct efi_md*);
+static efi_status ConvertPointer(u_long, void **);
+
+static efi_status GetVariable(efi_char *, struct uuid *, uint32_t *, u_long *,
+ void *);
+static efi_status GetNextVariableName(u_long *, efi_char *, struct uuid *);
+static efi_status SetVariable(efi_char *, struct uuid *, uint32_t, u_long,
+ void *);
+
+static efi_status GetNextHighMonotonicCount(uint32_t *);
+static efi_status ResetSystem(enum efi_reset, efi_status, u_long, efi_char *);
+
+struct efi_rt efi_rttab = {
+ /* Header. */
+ { 0, /* XXX Signature */
+ 0, /* XXX Revision */
+ 0, /* XXX HeaderSize */
+ 0, /* XXX CRC32 */
+ },
+
+ /* Time services */
+ GetTime,
+ SetTime,
+ GetWakeupTime,
+ SetWakeupTime,
+
+ /* Virtual memory services */
+ SetVirtualAddressMap,
+ ConvertPointer,
+
+ /* Variable services */
+ GetVariable,
+ GetNextVariableName,
+ SetVariable,
+
+ /* Misc */
+ GetNextHighMonotonicCount,
+ ResetSystem
+};
+
+struct efi_systbl efi_systab = {
+ /* Header. */
+ { EFI_SYSTBL_SIG,
+ 0, /* XXX Revision */
+ 0, /* XXX HeaderSize */
+ 0, /* XXX CRC32 */
+ },
+
+ /* Firmware info. */
+ L"FreeBSD", 0, 0,
+
+ /* Console stuff. */
+ NULL, NULL,
+ NULL, NULL,
+ NULL, NULL,
+
+ /* Services (runtime first). */
+ (intptr_t)&efi_rttab,
+ NULL,
+
+ /* Configuration tables. */
+ sizeof(efi_cfgtab)/sizeof(struct efi_cfgtbl),
+ (intptr_t)efi_cfgtab
+};
+
+static efi_status
+unsupported(const char *func)
+{
+ printf("EFI: %s not supported\n", func);
+ return ((1UL << 63) + 3);
+}
+
+static efi_status
+GetTime(struct efi_tm *time, struct efi_tmcap *caps)
+{
+ uint32_t comps[8];
+
+ ssc((uint64_t)comps, 0, 0, 0, SSC_GET_RTC);
+ time->tm_year = comps[0] + 1900;
+ time->tm_mon = comps[1] + 1;
+ time->tm_mday = comps[2];
+ time->tm_hour = comps[3];
+ time->tm_min = comps[4];
+ time->tm_sec = comps[5];
+ time->__pad1 = time->__pad2 = 0;
+ time->tm_nsec = 0;
+ time->tm_tz = 0;
+ time->tm_dst = 0;
+ return (0);
+}
+
+static efi_status
+SetTime(struct efi_tm *time)
+{
+ return (0);
+}
+
+static efi_status
+GetWakeupTime(uint8_t *enabled, uint8_t *pending, struct efi_tm *time)
+{
+ return (unsupported(__func__));
+}
+
+static efi_status
+SetWakeupTime(uint8_t enable, struct efi_tm *time)
+{
+ return (unsupported(__func__));
+}
+
+static void
+Reloc(void *addr, uint64_t delta)
+{
+ uint64_t **fpp = addr;
+
+ *fpp[0] += delta;
+ *fpp[1] += delta;
+ *fpp += delta >> 3;
+}
+
+static efi_status
+SetVirtualAddressMap(u_long mapsz, u_long descsz, uint32_t version,
+ struct efi_md *memmap)
+{
+ uint64_t delta;
+
+ delta = (uintptr_t)memmap->md_virt - memmap->md_phys;
+ Reloc(&efi_rttab.rt_gettime, delta);
+ Reloc(&efi_rttab.rt_settime, delta);
+ return (0); /* Hah... */
+}
+
+static efi_status
+ConvertPointer(u_long debug, void **addr)
+{
+ return (unsupported(__func__));
+}
+
+static efi_status
+GetVariable(efi_char *name, struct uuid *vendor, uint32_t *attrs,
+ u_long *datasz, void *data)
+{
+ return (unsupported(__func__));
+}
+
+static efi_status
+GetNextVariableName(u_long *namesz, efi_char *name, struct uuid *vendor)
+{
+ return (unsupported(__func__));
+}
+
+static efi_status
+SetVariable(efi_char *name, struct uuid *vendor, uint32_t attrs, u_long datasz,
+ void *data)
+{
+ return (unsupported(__func__));
+}
+
+static efi_status
+GetNextHighMonotonicCount(uint32_t *high)
+{
+ static uint32_t counter = 0;
+
+ *high = counter++;
+ return (0);
+}
+
+static efi_status
+ResetSystem(enum efi_reset type, efi_status status, u_long datasz,
+ efi_char *data)
+{
+ return (unsupported(__func__));
+}
+
+void
+efi_stub_init(struct bootinfo *bi)
+{
+ static struct efi_md memmap[4];
+
+ /* Describe the SKI memory map. */
+ bi->bi_memmap = (uintptr_t)(void *)memmap;
+ bi->bi_memmap_size = sizeof(memmap);
+ bi->bi_memdesc_size = sizeof(struct efi_md);
+ bi->bi_memdesc_version = 1;
+
+ memmap[0].md_type = EFI_MD_TYPE_PALCODE;
+ memmap[0].md_phys = 0x100000;
+ memmap[0].md_virt = NULL;
+ memmap[0].md_pages = (1L*1024*1024)>>12;
+ memmap[0].md_attr = EFI_MD_ATTR_WB | EFI_MD_ATTR_RT;
+
+ memmap[1].md_type = EFI_MD_TYPE_FREE;
+ memmap[1].md_phys = 4L*1024*1024;
+ memmap[1].md_virt = NULL;
+ memmap[1].md_pages = (128L*1024*1024)>>12;
+ memmap[1].md_attr = EFI_MD_ATTR_WB;
+
+ memmap[2].md_type = EFI_MD_TYPE_FREE;
+ memmap[2].md_phys = 4L*1024*1024*1024;
+ memmap[2].md_virt = NULL;
+ memmap[2].md_pages = (64L*1024*1024)>>12;
+ memmap[2].md_attr = EFI_MD_ATTR_WB;
+
+ memmap[3].md_type = EFI_MD_TYPE_IOPORT;
+ memmap[3].md_phys = 0xffffc000000;
+ memmap[3].md_virt = NULL;
+ memmap[3].md_pages = (64L*1024*1024)>>12;
+ memmap[3].md_attr = EFI_MD_ATTR_UC;
+
+ bi->bi_systab = (u_int64_t)&efi_systab;
+}
Property changes on: trunk/sys/boot/ia64/ski/efi_stub.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/exit.c
===================================================================
--- trunk/sys/boot/ia64/ski/exit.c (rev 0)
+++ trunk/sys/boot/ia64/ski/exit.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,43 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2000 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/boot/ia64/ski/exit.c 135696 2004-09-24 03:53:50Z marcel $");
+
+#include <sys/param.h>
+#include <sys/time.h>
+#include <stddef.h>
+#include <stand.h>
+#include <stdarg.h>
+
+#include "libski.h"
+
+void
+exit(int code)
+{
+ ssc(code, 0, 0, 0, SSC_EXIT);
+}
Property changes on: trunk/sys/boot/ia64/ski/exit.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/ldscript.ia64
===================================================================
--- trunk/sys/boot/ia64/ski/ldscript.ia64 (rev 0)
+++ trunk/sys/boot/ia64/ski/ldscript.ia64 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,61 @@
+/* $FreeBSD: stable/10/sys/boot/ia64/ski/ldscript.ia64 218822 2011-02-18 20:54:12Z dim $ */
+OUTPUT_FORMAT("elf64-ia64-freebsd", "elf64-ia64-freebsd", "elf64-ia64-freebsd")
+OUTPUT_ARCH(ia64)
+ENTRY(_start)
+SECTIONS
+{
+ /* Read-only sections, merged into text segment: */
+ . = 0x100000;
+ .text : {
+ *(.text .stub .text.* .gnu.linkonce.t.*)
+ /* .gnu.warning sections are handled specially by elf32.em. */
+ *(.gnu.warning)
+ *(.plt)
+ } =0x00300000010070000002000001000400
+ __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.*) }
+ __gp = .;
+ .sdata : {
+ *(.got.plt .got)
+ *(.IA_64.pltoff)
+ *(.sdata .sdata.* .gnu.linkonce.s.*)
+ *(dynsbss)
+ *(.sbss .sbss.* .gnu.linkonce.sb.*)
+ *(.scommon)
+ }
+ .dynamic : { *(.dynamic) }
+ .rela : {
+ *(.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.*)
+ }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+}
Property changes on: trunk/sys/boot/ia64/ski/ldscript.ia64
___________________________________________________________________
Added: mnbsd:nokeywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/libski.h
===================================================================
--- trunk/sys/boot/ia64/ski/libski.h (rev 0)
+++ trunk/sys/boot/ia64/ski/libski.h 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,66 @@
+/* $MidnightBSD$ */
+/*-
+ * 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: stable/10/sys/boot/ia64/ski/libski.h 219691 2011-03-16 03:53:18Z marcel $
+ */
+
+#define MAXDEV 31 /* maximum number of distinct devices */
+
+typedef unsigned long physaddr_t;
+
+/* exported devices XXX rename? */
+extern struct devsw skifs_dev;
+extern struct devsw ski_disk;
+extern struct netif_driver ski_net;
+
+/* Wrapper over SKI filesystems. */
+extern struct fs_ops ski_fsops;
+
+/* this is in startup code */
+extern void delay(int);
+extern void reboot(void);
+
+extern int ski_boot(void);
+
+struct bootinfo;
+struct preloaded_file;
+
+#define SSC_CONSOLE_INIT 20
+#define SSC_GETCHAR 21
+#define SSC_PUTCHAR 31
+#define SSC_OPEN 50
+#define SSC_CLOSE 51
+#define SSC_READ 52
+#define SSC_WRITE 53
+#define SSC_GET_COMPLETION 54
+#define SSC_WAIT_COMPLETION 55
+#define SSC_GET_RTC 65
+#define SSC_EXIT 66
+#define SSC_LOAD_SYMBOLS 69
+#define SSC_SAL_SET_VECTORS 120
+
+u_int64_t ssc(u_int64_t in0, u_int64_t in1, u_int64_t in2, u_int64_t in3,
+ int which);
Property changes on: trunk/sys/boot/ia64/ski/libski.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/main.c
===================================================================
--- trunk/sys/boot/ia64/ski/main.c (rev 0)
+++ trunk/sys/boot/ia64/ski/main.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,122 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 1998 Michael Smith <msmith at freebsd.org>
+ * Copyright (c) 1998,2000 Doug Rabson <dfr at 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: stable/10/sys/boot/ia64/ski/main.c 220313 2011-04-03 23:49:20Z marcel $");
+
+#include <stand.h>
+#include <string.h>
+#include <setjmp.h>
+#include <machine/fpu.h>
+
+#include <libia64.h>
+#include "libski.h"
+
+extern char bootprog_name[];
+extern char bootprog_rev[];
+extern char bootprog_date[];
+extern char bootprog_maker[];
+
+struct devdesc currdev; /* our current device */
+struct arch_switch archsw; /* MI/MD interface boundary */
+
+void
+ski_main(void)
+{
+ static char malloc[512*1024];
+ int i;
+
+ /*
+ * initialise the heap as early as possible. Once this is done,
+ * alloc() is usable. The stack is buried inside us, so this is
+ * safe.
+ */
+ setheap((void *)malloc, (void *)(malloc + 512*1024));
+
+ /*
+ * 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();
+
+ /*
+ * 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)();
+
+ printf("\n");
+ printf("%s, Revision %s\n", bootprog_name, bootprog_rev);
+ printf("(%s, %s)\n", bootprog_maker, bootprog_date);
+#if 0
+ printf("Memory: %ld k\n", memsize() / 1024);
+#endif
+
+ /* XXX presumes that biosdisk is first in devsw */
+ currdev.d_dev = devsw[0];
+ currdev.d_type = currdev.d_dev->dv_type;
+ currdev.d_unit = 0;
+
+#if 0
+ /* Create arc-specific variables */
+ bootfile = GetEnvironmentVariable(ARCENV_BOOTFILE);
+ if (bootfile)
+ setenv("bootfile", bootfile, 1);
+#endif
+
+ env_setenv("currdev", EV_VOLATILE, ia64_fmtdev(&currdev),
+ ia64_setcurrdev, env_nounset);
+ env_setenv("loaddev", EV_VOLATILE, ia64_fmtdev(&currdev), env_noset,
+ 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 */
+
+ exit(0);
+}
+
+COMMAND_SET(quit, "quit", "exit the loader", command_quit);
+
+static int
+command_quit(int argc, char *argv[])
+{
+ exit(0);
+ return (CMD_OK);
+}
Property changes on: trunk/sys/boot/ia64/ski/main.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/pal_stub.S
===================================================================
--- trunk/sys/boot/ia64/ski/pal_stub.S (rev 0)
+++ trunk/sys/boot/ia64/ski/pal_stub.S 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,75 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2003 Marcel Moolenaar
+ * 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: stable/10/sys/boot/ia64/ski/pal_stub.S 139738 2005-01-05 22:16:58Z imp $
+ */
+
+#include <machine/asm.h>
+
+ .text
+ENTRY(PalProc, 0)
+ cmp.eq p6,p0=6,r28 // PAL_PTCE_INFO
+(p6) br.cond.dptk pal_ptce_info
+ ;;
+ cmp.eq p6,p0=8,r28 // PAL_VM_SUMMARY
+(p6) br.cond.dptk pal_vm_summary
+ ;;
+ cmp.eq p6,p0=14,r28 // PAL_FREQ_RATIOS
+(p6) br.cond.dptk pal_freq_ratios
+ ;;
+ cmp.eq p6,p0=29,r28 // PAL_HALT_LIGHT
+(p6) br.cond.dptk pal_halt_light
+ ;;
+ mov r15=66 // EXIT
+ break.i 0x80000 // SSC
+ ;;
+pal_ptce_info:
+ mov r8=0
+ mov r9=0 // base
+ movl r10=0x0000000100000001 // loop counts (outer|inner)
+ mov r11=0x0000000000000000 // loop strides (outer|inner)
+ br.sptk b0
+pal_vm_summary:
+ mov r8=0
+ movl r9=(8<<40)|(8<<32) // VM info 1
+ mov r10=(18<<8)|(41<<0) // VM info 2
+ mov r11=0
+ br.sptk b0
+pal_freq_ratios:
+ mov r8=0
+ movl r9=0x0000000B00000002 // processor ratio 11/2
+ movl r10=0x0000000100000001 // bus ratio 1/1
+ movl r11=0x0000000B00000002 // ITC ratio 11/2
+ br.sptk b0
+pal_halt_light:
+ mov r8=0
+ mov r9=0
+ mov r10=0
+ mov r11=0
+ br.sptk b0
+END(PalProc)
Property changes on: trunk/sys/boot/ia64/ski/pal_stub.S
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/sal_stub.c
===================================================================
--- trunk/sys/boot/ia64/ski/sal_stub.c (rev 0)
+++ trunk/sys/boot/ia64/ski/sal_stub.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,119 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2003 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: stable/10/sys/boot/ia64/ski/sal_stub.c 139738 2005-01-05 22:16:58Z imp $");
+
+#include <sys/types.h>
+#include <machine/md_var.h>
+#include <machine/sal.h>
+#include <stand.h>
+#include "libski.h"
+
+extern void PalProc(void);
+static sal_entry_t SalProc;
+
+struct {
+ struct sal_system_table header;
+ struct sal_entrypoint_descriptor entry;
+ struct sal_ap_wakeup_descriptor wakeup;
+} sal_systab = {
+ /* Header. */
+ {
+ SAL_SIGNATURE,
+ sizeof(sal_systab),
+ { 00, 03 }, /* Revision 3.0. */
+ 2, /* Number of decsriptors. */
+ 0, /* XXX checksum. */
+ { 0 },
+ { 00, 00 }, /* XXX SAL_A version. */
+ { 00, 00 }, /* XXX SAL_B version. */
+ "FreeBSD",
+ "Ski loader",
+ { 0 }
+ },
+ /* Entrypoint. */
+ {
+ 0, /* Type=entrypoint descr. */
+ { 0 },
+ 0, /* XXX PalProc. */
+ 0, /* XXX SalProc. */
+ 0, /* XXX SalProc GP. */
+ { 0 }
+ },
+ /* AP wakeup. */
+ {
+ 5, /* Type=AP wakeup descr. */
+ 0, /* External interrupt. */
+ { 0 },
+ 255 /* Wakeup vector. */
+ }
+};
+
+static inline void
+puts(const char *s)
+{
+ s = (const char *)((7UL << 61) | (u_long)s);
+ while (*s)
+ ski_cons_putchar(*s++);
+}
+
+static struct ia64_sal_result
+SalProc(u_int64_t a1, u_int64_t a2, u_int64_t a3, u_int64_t a4, u_int64_t a5,
+ u_int64_t a6, u_int64_t a7, u_int64_t a8)
+{
+ struct ia64_sal_result res;
+
+ res.sal_status = -3;
+ res.sal_result[0] = 0;
+ res.sal_result[1] = 0;
+ res.sal_result[2] = 0;
+
+ if (a1 == SAL_FREQ_BASE) {
+ res.sal_status = 0;
+ res.sal_result[0] = 133338184;
+ } else if (a1 == SAL_SET_VECTORS) {
+ /* XXX unofficial SSC function. */
+ ssc(a2, a3, a4, a5, SSC_SAL_SET_VECTORS);
+ } else if (a1 != SAL_GET_STATE_INFO_SIZE) {
+ puts("SAL: unimplemented function called\n");
+ }
+
+ return (res);
+}
+
+void
+sal_stub_init(void)
+{
+ struct ia64_fdesc *fd;
+
+ fd = (void*)PalProc;
+ sal_systab.entry.sale_pal_proc = fd->func;
+ fd = (void*)SalProc;
+ sal_systab.entry.sale_sal_proc = fd->func;
+ sal_systab.entry.sale_sal_gp = fd->gp;
+}
Property changes on: trunk/sys/boot/ia64/ski/sal_stub.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/skiconsole.c
===================================================================
--- trunk/sys/boot/ia64/ski/skiconsole.c (rev 0)
+++ trunk/sys/boot/ia64/ski/skiconsole.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,97 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2000 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/boot/ia64/ski/skiconsole.c 135696 2004-09-24 03:53:50Z marcel $");
+
+#include <stand.h>
+
+#include "bootstrap.h"
+#include "libski.h"
+
+static void
+ski_cons_probe(struct console *cp)
+{
+ cp->c_flags |= C_PRESENTIN | C_PRESENTOUT;
+}
+
+static int
+ski_cons_init(int arg)
+{
+ ssc(0, 0, 0, 0, SSC_CONSOLE_INIT);
+ return 0;
+}
+
+void
+ski_cons_putchar(int c)
+{
+ ssc(c, 0, 0, 0, SSC_PUTCHAR);
+}
+
+static int pollchar = -1;
+
+int
+ski_cons_getchar()
+{
+ int c;
+
+ if (pollchar > 0) {
+ c = pollchar;
+ pollchar = -1;
+ return c;
+ }
+
+ do {
+ c = ssc(0, 0, 0, 0, SSC_GETCHAR);
+ } while (c == 0);
+
+ return c;
+}
+
+int
+ski_cons_poll()
+{
+ int c;
+ if (pollchar > 0)
+ return 1;
+ c = ssc(0, 0, 0, 0, SSC_GETCHAR);
+ if (!c)
+ return 0;
+ pollchar = c;
+ return 1;
+}
+
+struct console ski_console = {
+ "ski",
+ "ia64 SKI console",
+ 0,
+ ski_cons_probe,
+ ski_cons_init,
+ ski_cons_putchar,
+ ski_cons_getchar,
+ ski_cons_poll
+};
Property changes on: trunk/sys/boot/ia64/ski/skiconsole.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/skifs.c
===================================================================
--- trunk/sys/boot/ia64/ski/skifs.c (rev 0)
+++ trunk/sys/boot/ia64/ski/skifs.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,195 @@
+/* $MidnightBSD$ */
+/*-
+ * 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/boot/ia64/ski/skifs.c 164010 2006-11-05 22:03:04Z marcel $");
+
+#include <sys/param.h>
+#include <sys/time.h>
+#include <stddef.h>
+#include <stand.h>
+#include <stdarg.h>
+
+#include <bootstrap.h>
+#include "libski.h"
+
+struct disk_req {
+ unsigned long addr;
+ unsigned len;
+};
+
+struct disk_stat {
+ int fd;
+ unsigned count;
+};
+
+static int
+skifs_open(const char *path, struct open_file *f)
+{
+ int fd;
+
+ /*
+ * Skip leading '/' so that our pretend filesystem starts in
+ * the current working directory.
+ */
+ while (*path == '/')
+ path++;
+
+ fd = ssc((u_int64_t) path, 1, 0, 0, SSC_OPEN);
+ if (fd > 0) {
+ f->f_fsdata = (void*)(u_int64_t) fd;
+ return 0;
+ }
+ return ENOENT;
+}
+
+static int
+skifs_close(struct open_file *f)
+{
+ ssc((u_int64_t) f->f_fsdata, 0, 0, 0, SSC_CLOSE);
+ return 0;
+}
+
+static int
+skifs_read(struct open_file *f, void *buf, size_t size, size_t *resid)
+{
+ struct disk_req req;
+ struct disk_stat stat;
+
+ req.len = size;
+ req.addr = (u_int64_t) buf;
+ ssc((u_int64_t) f->f_fsdata, 1, (u_int64_t) &req, f->f_offset, SSC_READ);
+ stat.fd = (u_int64_t) f->f_fsdata;
+ ssc((u_int64_t)&stat, 0, 0, 0, SSC_WAIT_COMPLETION);
+
+ *resid = size - stat.count;
+ f->f_offset += stat.count;
+ return 0;
+}
+
+static off_t
+skifs_seek(struct open_file *f, off_t offset, int where)
+{
+ u_int64_t base;
+
+ switch (where) {
+ case SEEK_SET:
+ base = 0;
+ break;
+
+ case SEEK_CUR:
+ base = f->f_offset;
+ break;
+
+ case SEEK_END:
+ printf("can't find end of file in SKI\n");
+ base = f->f_offset;
+ break;
+ }
+
+ f->f_offset = base + offset;
+ return base;
+}
+
+static int
+skifs_stat(struct open_file *f, struct stat *sb)
+{
+ bzero(sb, sizeof(*sb));
+ sb->st_mode = S_IFREG | S_IRUSR;
+ return 0;
+}
+
+static int
+skifs_readdir(struct open_file *f, struct dirent *d)
+{
+ return ENOENT;
+}
+
+struct fs_ops ski_fsops = {
+ "fs",
+ skifs_open,
+ skifs_close,
+ skifs_read,
+ null_write,
+ skifs_seek,
+ skifs_stat,
+ skifs_readdir
+};
+
+static int
+skifs_dev_init(void)
+{
+ return 0;
+}
+
+/*
+ * Print information about disks
+ */
+static void
+skifs_dev_print(int verbose)
+{
+}
+
+/*
+ * Attempt to open the disk described by (dev) for use by (f).
+ *
+ * Note that the philosophy here is "give them exactly what
+ * they ask for". This is necessary because being too "smart"
+ * about what the user might want leads to complications.
+ * (eg. given no slice or partition value, with a disk that is
+ * sliced - are they after the first BSD slice, or the DOS
+ * slice before it?)
+ */
+static int
+skifs_dev_open(struct open_file *f, ...)
+{
+ return 0;
+}
+
+static int
+skifs_dev_close(struct open_file *f)
+{
+
+ return 0;
+}
+
+static int
+skifs_dev_strategy(void *devdata, int rw, daddr_t dblk, size_t size, char *buf, size_t *rsize)
+{
+ return 0;
+}
+
+struct devsw skifs_dev = {
+ "fs",
+ DEVT_DISK,
+ skifs_dev_init,
+ skifs_dev_strategy,
+ skifs_dev_open,
+ skifs_dev_close,
+ noioctl,
+ skifs_dev_print
+};
Property changes on: trunk/sys/boot/ia64/ski/skifs.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/skiload.cmd
===================================================================
--- trunk/sys/boot/ia64/ski/skiload.cmd (rev 0)
+++ trunk/sys/boot/ia64/ski/skiload.cmd 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,16 @@
+# $FreeBSD: stable/10/sys/boot/ia64/ski/skiload.cmd 135695 2004-09-24 03:51:06Z marcel $
+iar
+fr
+pa
+b enter_kernel
+c
+b printf
+c
+b rp
+c
+b ssc
+c
+b rp
+c
+bD
+s 11
Property changes on: trunk/sys/boot/ia64/ski/skiload.cmd
___________________________________________________________________
Added: mnbsd:nokeywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/skimd.c
===================================================================
--- trunk/sys/boot/ia64/ski/skimd.c (rev 0)
+++ trunk/sys/boot/ia64/ski/skimd.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,83 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 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: stable/10/sys/boot/ia64/ski/skimd.c 220283 2011-04-03 03:26:12Z marcel $");
+
+#include <stand.h>
+
+#include <libia64.h>
+
+#include "libski.h"
+
+extern void acpi_stub_init(void);
+extern void efi_stub_init(struct bootinfo *);
+extern void sal_stub_init(void);
+
+vm_paddr_t
+ia64_platform_alloc(vm_offset_t va, vm_size_t sz __unused)
+{
+ vm_paddr_t pa;
+
+ if (va == 0)
+ pa = 2 * 1024 * 1024;
+ else
+ pa = (va - IA64_PBVM_BASE) + (32 * 1024 * 1024);
+
+ return (pa);
+}
+
+void
+ia64_platform_free(vm_offset_t va __unused, vm_paddr_t pa __unused,
+ vm_size_t sz __unused)
+{
+}
+
+int
+ia64_platform_bootinfo(struct bootinfo *bi, struct bootinfo **res)
+{
+ static struct bootinfo bootinfo;
+
+ efi_stub_init(bi);
+ sal_stub_init();
+ acpi_stub_init();
+
+ if (IS_LEGACY_KERNEL())
+ *res = &bootinfo;
+
+ return (0);
+}
+
+int
+ia64_platform_enter(const char *kernel)
+{
+
+ while (*kernel == '/')
+ kernel++;
+ ssc(0, (uint64_t)kernel, 0, 0, SSC_LOAD_SYMBOLS);
+ return (0);
+}
Property changes on: trunk/sys/boot/ia64/ski/skimd.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/ssc.c
===================================================================
--- trunk/sys/boot/ia64/ski/ssc.c (rev 0)
+++ trunk/sys/boot/ia64/ski/ssc.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,54 @@
+/* $MidnightBSD$ */
+/*-
+ * 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/boot/ia64/ski/ssc.c 135696 2004-09-24 03:53:50Z marcel $");
+
+#include <stand.h>
+#include "libski.h"
+
+/*
+ * Ugh... Work around a bug in the Linux version of ski for SSC_GET_RTC. The
+ * PSR.dt register is not preserved properly and causes further memory
+ * references to be done without translation. All we need to do is preserve
+ * PSR.dt across the SSC call. We do this by saving and restoring psr.l
+ * completely.
+ */
+u_int64_t
+ssc(u_int64_t in0, u_int64_t in1, u_int64_t in2, u_int64_t in3, int which)
+{
+ register u_int64_t psr;
+ register u_int64_t ret0 __asm("r8");
+
+ __asm __volatile("mov %0=psr;;" : "=r"(psr));
+ __asm __volatile("mov r15=%1\n\t"
+ "break 0x80000;;"
+ : "=r"(ret0)
+ : "r"(which), "r"(in0), "r"(in1), "r"(in2), "r"(in3));
+ __asm __volatile("mov psr.l=%0;; srlz.d" :: "r"(psr));
+ return ret0;
+}
Property changes on: trunk/sys/boot/ia64/ski/ssc.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/start.S
===================================================================
--- trunk/sys/boot/ia64/ski/start.S (rev 0)
+++ trunk/sys/boot/ia64/ski/start.S 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,63 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2003 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.
+ *
+ * $FreeBSD: stable/10/sys/boot/ia64/ski/start.S 139738 2005-01-05 22:16:58Z imp $
+ */
+
+#define STACKSIZE 16384
+#define FPSR_DEFAULT 0x0009804c0270033f
+
+ .text
+ .global _start
+ .proc _start
+_start:
+{ .mlx
+ mov ar.rsc=0
+ movl gp=__gp
+ ;;
+}
+{ .mlx
+ add r2=@gprel(stack),gp
+ movl r14=FPSR_DEFAULT
+ ;;
+}
+{ .mib
+ mov ar.bspstore=r2
+ add r12=STACKSIZE-16,r2
+ bsw.1
+ ;;
+}
+{ .mmb
+ mov ar.rsc=3
+ mov ar.fpsr=r14
+ br.sptk ski_main
+ ;;
+}
+ .endp _start
+
+ .data
+ .align 16
+stack: .skip STACKSIZE
Property changes on: trunk/sys/boot/ia64/ski/start.S
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/time.c
===================================================================
--- trunk/sys/boot/ia64/ski/time.c (rev 0)
+++ trunk/sys/boot/ia64/ski/time.c 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,175 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 1999, 2000
+ * Intel Corporation.
+ * 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 by Intel Corporation and
+ * its contributors.
+ *
+ * 4. Neither the name of Intel Corporation or its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION 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 INTEL CORPORATION 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: stable/10/sys/boot/ia64/ski/time.c 139738 2005-01-05 22:16:58Z imp $");
+
+#include <time.h>
+#include <sys/time.h>
+#include <stand.h>
+
+#include "libski.h"
+
+/*
+// Accurate only for the past couple of centuries;
+// that will probably do.
+//
+// (#defines From FreeBSD 3.2 lib/libc/stdtime/tzfile.h)
+*/
+
+#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))
+#define SECSPERHOUR ( 60*60 )
+#define SECSPERDAY (24 * SECSPERHOUR)
+
+struct ssc_time {
+ int Year;
+ int Month;
+ int Day;
+ int Hour;
+ int Minute;
+ int Second;
+ int Msec;
+ int Wday;
+};
+
+time_t
+EfiTimeToUnixTime(struct ssc_time *ETime)
+{
+ /*
+ // These arrays give the cumulative number of days up to the first of the
+ // month number used as the index (1 -> 12) for regular and leap years.
+ // The value at index 13 is for the whole year.
+ */
+ static time_t CumulativeDays[2][14] = {
+ {0,
+ 0,
+ 31,
+ 31 + 28,
+ 31 + 28 + 31,
+ 31 + 28 + 31 + 30,
+ 31 + 28 + 31 + 30 + 31,
+ 31 + 28 + 31 + 30 + 31 + 30,
+ 31 + 28 + 31 + 30 + 31 + 30 + 31,
+ 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31,
+ 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30,
+ 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31,
+ 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30,
+ 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 },
+ {0,
+ 0,
+ 31,
+ 31 + 29,
+ 31 + 29 + 31,
+ 31 + 29 + 31 + 30,
+ 31 + 29 + 31 + 30 + 31,
+ 31 + 29 + 31 + 30 + 31 + 30,
+ 31 + 29 + 31 + 30 + 31 + 30 + 31,
+ 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31,
+ 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30,
+ 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31,
+ 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30,
+ 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 }};
+
+ time_t UTime;
+ int Year;
+
+ ETime->Year += 1900;
+
+ /*
+ // Do a santity check
+ */
+ if ( ETime->Year < 1998 || ETime->Year > 2099 ||
+ ETime->Month == 0 || ETime->Month > 12 ||
+ ETime->Day == 0 || ETime->Month > 31 ||
+ ETime->Hour > 23 ||
+ ETime->Minute > 59 ||
+ ETime->Second > 59 ) {
+ return (0);
+ }
+
+ /*
+ // Years
+ */
+ UTime = 0;
+ for (Year = 1970; Year != ETime->Year; ++Year) {
+ UTime += (CumulativeDays[isleap(Year)][13] * SECSPERDAY);
+ }
+
+ /*
+ // UTime should now be set to 00:00:00 on Jan 1 of the file's year.
+ //
+ // Months
+ */
+ UTime += (CumulativeDays[isleap(ETime->Year)][ETime->Month] * SECSPERDAY);
+
+ /*
+ // UTime should now be set to 00:00:00 on the first of the file's month and year
+ //
+ // Days -- Don't count the file's day
+ */
+ UTime += (((ETime->Day > 0) ? ETime->Day-1:0) * SECSPERDAY);
+
+ /*
+ // Hours
+ */
+ UTime += (ETime->Hour * SECSPERHOUR);
+
+ /*
+ // Minutes
+ */
+ UTime += (ETime->Minute * 60);
+
+ /*
+ // Seconds
+ */
+ UTime += ETime->Second;
+
+ return UTime;
+}
+
+time_t
+time(time_t *tloc)
+{
+ struct ssc_time time;
+
+ ssc((u_int64_t) &time, 0, 0, 0, SSC_GET_RTC);
+
+ return *tloc = EfiTimeToUnixTime(&time);
+}
Property changes on: trunk/sys/boot/ia64/ski/time.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/boot/ia64/ski/version
===================================================================
--- trunk/sys/boot/ia64/ski/version (rev 0)
+++ trunk/sys/boot/ia64/ski/version 2018-06-01 23:26:00 UTC (rev 10188)
@@ -0,0 +1,12 @@
+$FreeBSD: stable/10/sys/boot/ia64/ski/version 219691 2011-03-16 03:53:18Z marcel $
+
+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.
+
+2.0: Add support for PBVM.
+1.2: Restructured. Has some user visible differences. Due to code
+ sharing, has been given the same version number as the EFI
+ loader.
+0.2: Pass the address of the bootinfo block to the kernel in register
+ r8. Keep it at the hardwired address for now.
+0.1: Initial SKI version.
Property changes on: trunk/sys/boot/ia64/ski/version
___________________________________________________________________
Added: mnbsd:nokeywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
More information about the Midnightbsd-cvs
mailing list