[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