Remove. This file was repocopied to ../ski.
This commit is contained in:
parent
7295f657e2
commit
759e38dbbe
@ -1,22 +0,0 @@
|
||||
# $FreeBSD$
|
||||
|
||||
LIB= ski
|
||||
INTERNALLIB= true
|
||||
|
||||
SRCS= skiconsole.c time.c copy.c devicename.c module.c exit.c
|
||||
SRCS+= delay.c skifs.c elf_freebsd.c bootinfo.c ssc.c
|
||||
SRCS+= acpi_stub.c efi_stub.c pal_stub.S sal_stub.c
|
||||
|
||||
CFLAGS+= -I${.CURDIR}/../../../../lib/libstand
|
||||
CFLAGS+= -I${.CURDIR}/../../efi/include
|
||||
CFLAGS+= -I${.CURDIR}/../../efi/include/${MACHINE_ARCH}
|
||||
|
||||
# Pick up the bootstrap header for some interface items
|
||||
CFLAGS+= -I${.CURDIR}/../../common -I${.CURDIR}/../../..
|
||||
|
||||
.if defined(BOOT_DISK_DEBUG)
|
||||
# Make the disk code more talkative
|
||||
CFLAGS+= -DDISK_DEBUG
|
||||
.endif
|
||||
|
||||
.include <bsd.lib.mk>
|
@ -1,182 +0,0 @@
|
||||
/*
|
||||
* 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$");
|
||||
|
||||
#include <contrib/dev/acpica/acpi.h>
|
||||
|
||||
#define APIC_IO_SAPIC 6
|
||||
#define APIC_LOCAL_SAPIC 7
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
typedef struct /* LOCAL SAPIC */
|
||||
{
|
||||
APIC_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 */
|
||||
{
|
||||
APIC_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 {
|
||||
MULTIPLE_APIC_TABLE Header;
|
||||
MADT_LOCAL_SAPIC cpu0;
|
||||
MADT_LOCAL_SAPIC cpu1;
|
||||
MADT_LOCAL_SAPIC cpu2;
|
||||
MADT_LOCAL_SAPIC cpu3;
|
||||
MADT_IO_SAPIC sapic;
|
||||
} apic = {
|
||||
/* Header. */
|
||||
{
|
||||
APIC_SIG, /* Signature. */
|
||||
sizeof(apic), /* 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. */
|
||||
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 = {
|
||||
{
|
||||
XSDT_SIG, /* 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. */
|
||||
},
|
||||
NULL /* XXX APIC table address. */
|
||||
};
|
||||
|
||||
RSDP_DESCRIPTOR acpi_root = {
|
||||
RSDP_SIG,
|
||||
0, /* XXX checksum. */
|
||||
"FBSD",
|
||||
2, /* ACPI Rev 2.0. */
|
||||
NULL,
|
||||
sizeof(xsdt), /* XSDT length. */
|
||||
NULL, /* 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);
|
||||
|
||||
xsdt.apic_tbl = (UINT32)&apic;
|
||||
cksum(&xsdt, sizeof(xsdt), &xsdt.Header.Checksum);
|
||||
}
|
@ -1,316 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1998 Michael Smith <msmith@freebsd.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <stand.h>
|
||||
#include <string.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/reboot.h>
|
||||
#include <sys/linker.h>
|
||||
#include <machine/elf.h>
|
||||
#include <machine/bootinfo.h>
|
||||
|
||||
#include "bootstrap.h"
|
||||
|
||||
/*
|
||||
* Return a 'boothowto' value corresponding to the kernel arguments in
|
||||
* (kargs) and any relevant environment variables.
|
||||
*/
|
||||
static struct
|
||||
{
|
||||
const char *ev;
|
||||
int mask;
|
||||
} howto_names[] = {
|
||||
{"boot_askname", RB_ASKNAME},
|
||||
{"boot_cdrom", RB_CDROM},
|
||||
{"boot_userconfig", RB_CONFIG},
|
||||
{"boot_ddb", RB_KDB},
|
||||
{"boot_gdb", RB_GDB},
|
||||
{"boot_single", RB_SINGLE},
|
||||
{"boot_verbose", RB_VERBOSE},
|
||||
{"boot_multicons", RB_MULTIPLE},
|
||||
{"boot_serial", RB_SERIAL},
|
||||
{NULL, 0}
|
||||
};
|
||||
|
||||
extern char *ski_fmtdev(void *vdev);
|
||||
extern int ski_init_stubs(struct bootinfo *);
|
||||
|
||||
int
|
||||
bi_getboothowto(char *kargs)
|
||||
{
|
||||
char *cp;
|
||||
int howto;
|
||||
int active;
|
||||
int i;
|
||||
|
||||
/* Parse kargs */
|
||||
howto = 0;
|
||||
if (kargs != NULL) {
|
||||
cp = kargs;
|
||||
active = 0;
|
||||
while (*cp != 0) {
|
||||
if (!active && (*cp == '-')) {
|
||||
active = 1;
|
||||
} else if (active)
|
||||
switch (*cp) {
|
||||
case 'a':
|
||||
howto |= RB_ASKNAME;
|
||||
break;
|
||||
case 'c':
|
||||
howto |= RB_CONFIG;
|
||||
break;
|
||||
case 'C':
|
||||
howto |= RB_CDROM;
|
||||
break;
|
||||
case 'd':
|
||||
howto |= RB_KDB;
|
||||
break;
|
||||
case 'm':
|
||||
howto |= RB_MUTE;
|
||||
break;
|
||||
case 'g':
|
||||
howto |= RB_GDB;
|
||||
break;
|
||||
case 'h':
|
||||
howto |= RB_SERIAL;
|
||||
break;
|
||||
case 'r':
|
||||
howto |= RB_DFLTROOT;
|
||||
break;
|
||||
case 's':
|
||||
howto |= RB_SINGLE;
|
||||
break;
|
||||
case 'v':
|
||||
howto |= RB_VERBOSE;
|
||||
break;
|
||||
default:
|
||||
active = 0;
|
||||
break;
|
||||
}
|
||||
cp++;
|
||||
}
|
||||
}
|
||||
/* get equivalents from the environment */
|
||||
for (i = 0; howto_names[i].ev != NULL; i++)
|
||||
if (getenv(howto_names[i].ev) != NULL)
|
||||
howto |= howto_names[i].mask;
|
||||
if (!strcmp(getenv("console"), "comconsole"))
|
||||
howto |= RB_SERIAL;
|
||||
if (!strcmp(getenv("console"), "nullconsole"))
|
||||
howto |= RB_MUTE;
|
||||
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 addr)
|
||||
{
|
||||
struct env_var *ep;
|
||||
|
||||
/* traverse the environment */
|
||||
for (ep = environ; ep != NULL; ep = ep->ev_next) {
|
||||
ski_copyin(ep->ev_name, addr, strlen(ep->ev_name));
|
||||
addr += strlen(ep->ev_name);
|
||||
ski_copyin("=", addr, 1);
|
||||
addr++;
|
||||
if (ep->ev_value != NULL) {
|
||||
ski_copyin(ep->ev_value, addr, strlen(ep->ev_value));
|
||||
addr += strlen(ep->ev_value);
|
||||
}
|
||||
ski_copyin("", addr, 1);
|
||||
addr++;
|
||||
}
|
||||
ski_copyin("", addr, 1);
|
||||
addr++;
|
||||
return(addr);
|
||||
}
|
||||
|
||||
/*
|
||||
* 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); \
|
||||
ski_copyin(&x, a, sizeof(x)); \
|
||||
a += sizeof(x); \
|
||||
}
|
||||
|
||||
#define MOD_STR(t, a, s) { \
|
||||
COPY32(t, a); \
|
||||
COPY32(strlen(s) + 1, a); \
|
||||
ski_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); \
|
||||
ski_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); \
|
||||
ski_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) {
|
||||
|
||||
MOD_NAME(addr, fp->f_name); /* this field must come first */
|
||||
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 an alpha kernel.
|
||||
*
|
||||
* - The kernel environment is copied into kernel space.
|
||||
* - Module metadata are formatted and placed in kernel space.
|
||||
*/
|
||||
int
|
||||
bi_load(struct bootinfo *bi, struct preloaded_file *fp, char *args)
|
||||
{
|
||||
char *rootdevname;
|
||||
struct ski_devdesc *rootdev;
|
||||
struct preloaded_file *xp;
|
||||
vm_offset_t addr, bootinfo_addr;
|
||||
char *kernelname;
|
||||
vm_offset_t ssym, esym;
|
||||
struct file_metadata *md;
|
||||
|
||||
/*
|
||||
* Version 1 bootinfo.
|
||||
*/
|
||||
bi->bi_magic = BOOTINFO_MAGIC;
|
||||
bi->bi_version = 1;
|
||||
|
||||
/*
|
||||
* Calculate boothowto.
|
||||
*/
|
||||
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");
|
||||
ski_getdev((void **)(&rootdev), rootdevname, NULL);
|
||||
if (rootdev == NULL) { /* bad $rootdev/$currdev */
|
||||
printf("can't determine root device\n");
|
||||
return(EINVAL);
|
||||
}
|
||||
|
||||
/* Try reading the /etc/fstab file to select the root device */
|
||||
getrootmount(ski_fmtdev((void *)rootdev));
|
||||
free(rootdev);
|
||||
|
||||
ssym = esym = 0;
|
||||
if ((md = file_findmetadata(fp, MODINFOMD_SSYM)) != NULL)
|
||||
ssym = *((vm_offset_t *)&(md->md_data));
|
||||
if ((md = file_findmetadata(fp, MODINFOMD_ESYM)) != NULL)
|
||||
esym = *((vm_offset_t *)&(md->md_data));
|
||||
if (ssym == 0 || esym == 0)
|
||||
ssym = esym = 0; /* sanity */
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/* pad to a page boundary */
|
||||
addr = (addr + PAGE_MASK) & ~PAGE_MASK;
|
||||
|
||||
/* copy our environment */
|
||||
bi->bi_envp = addr;
|
||||
addr = bi_copyenv(addr);
|
||||
|
||||
/* pad to a page boundary */
|
||||
addr = (addr + PAGE_MASK) & ~PAGE_MASK;
|
||||
|
||||
/* copy module list and metadata */
|
||||
bi->bi_modulep = addr;
|
||||
addr = bi_copymodules(addr);
|
||||
|
||||
/* all done copying stuff in, save end of loaded object space */
|
||||
bi->bi_kernend = addr;
|
||||
|
||||
return (ski_init_stubs(bi));
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1998 Michael Smith <msmith@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$");
|
||||
|
||||
/*
|
||||
* MD primitives supporting placement of module data
|
||||
*
|
||||
* XXX should check load address/size against memory top.
|
||||
*/
|
||||
#include <stand.h>
|
||||
|
||||
#include <machine/ia64_cpu.h>
|
||||
#include <machine/vmparam.h>
|
||||
|
||||
int
|
||||
ski_copyin(void *src, vm_offset_t dest, size_t len)
|
||||
{
|
||||
bcopy(src, (void*) IA64_RR_MASK(dest), len);
|
||||
return (len);
|
||||
}
|
||||
|
||||
int
|
||||
ski_copyout(vm_offset_t src, void *dest, size_t len)
|
||||
{
|
||||
bcopy((void*) IA64_RR_MASK(src), dest, len);
|
||||
return (len);
|
||||
}
|
||||
|
||||
int
|
||||
ski_readin(int fd, vm_offset_t dest, size_t len)
|
||||
{
|
||||
return (read(fd, (void*) IA64_RR_MASK(dest), len));
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2001 Doug Rabson
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
void
|
||||
delay(int usecs)
|
||||
{
|
||||
return;
|
||||
}
|
@ -1,238 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1998 Michael Smith <msmith@freebsd.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <stand.h>
|
||||
#include <string.h>
|
||||
#include <sys/disklabel.h>
|
||||
#include "bootstrap.h"
|
||||
#include "libski.h"
|
||||
|
||||
static int ski_parsedev(struct ski_devdesc **dev, const char *devspec, const char **path);
|
||||
|
||||
/*
|
||||
* 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
|
||||
ski_getdev(void **vdev, const char *devspec, const char **path)
|
||||
{
|
||||
struct ski_devdesc **dev = (struct ski_devdesc **)vdev;
|
||||
int rv;
|
||||
|
||||
/*
|
||||
* If it looks like this is just a path and no
|
||||
* device, go with the current device.
|
||||
*/
|
||||
if ((devspec == NULL) ||
|
||||
(devspec[0] == '/') ||
|
||||
(strchr(devspec, ':') == NULL)) {
|
||||
|
||||
if (((rv = ski_parsedev(dev, getenv("currdev"), NULL)) == 0) &&
|
||||
(path != NULL))
|
||||
*path = devspec;
|
||||
return(rv);
|
||||
}
|
||||
|
||||
/*
|
||||
* Try to parse the device name off the beginning of the devspec
|
||||
*/
|
||||
return(ski_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:
|
||||
*
|
||||
* disk<unit>[s<slice>][<partition>]:
|
||||
*
|
||||
*/
|
||||
static int
|
||||
ski_parsedev(struct ski_devdesc **dev, const char *devspec, const char **path)
|
||||
{
|
||||
struct ski_devdesc *idev;
|
||||
struct devsw *dv;
|
||||
int i, unit, slice, partition, err;
|
||||
char *cp;
|
||||
const char *np;
|
||||
|
||||
/* minimum length check */
|
||||
if (strlen(devspec) < 2)
|
||||
return(EINVAL);
|
||||
|
||||
/* look for a device that matches */
|
||||
for (i = 0, dv = NULL; devsw[i] != NULL; i++) {
|
||||
if (!strncmp(devspec, devsw[i]->dv_name, strlen(devsw[i]->dv_name))) {
|
||||
dv = devsw[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (dv == NULL)
|
||||
return(ENOENT);
|
||||
idev = malloc(sizeof(struct ski_devdesc));
|
||||
err = 0;
|
||||
np = (devspec + strlen(dv->dv_name));
|
||||
|
||||
switch(dv->dv_type) {
|
||||
case DEVT_NONE: /* XXX what to do here? Do we care? */
|
||||
break;
|
||||
|
||||
case DEVT_DISK:
|
||||
unit = -1;
|
||||
slice = -1;
|
||||
partition = -1;
|
||||
if (*np && (*np != ':')) {
|
||||
unit = strtol(np, &cp, 10); /* next comes the unit number */
|
||||
if (cp == np) {
|
||||
err = EUNIT;
|
||||
goto fail;
|
||||
}
|
||||
if (*cp == 's') { /* got a slice number */
|
||||
np = cp + 1;
|
||||
slice = strtol(np, &cp, 10);
|
||||
if (cp == np) {
|
||||
err = ESLICE;
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
if (*cp && (*cp != ':')) {
|
||||
partition = *cp - 'a'; /* get a partition number */
|
||||
if ((partition < 0) || (partition >= MAXPARTITIONS)) {
|
||||
err = EPART;
|
||||
goto fail;
|
||||
}
|
||||
cp++;
|
||||
}
|
||||
}
|
||||
if (*cp && (*cp != ':')) {
|
||||
err = EINVAL;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
idev->d_kind.skidisk.unit = unit;
|
||||
idev->d_kind.skidisk.slice = slice;
|
||||
idev->d_kind.skidisk.partition = partition;
|
||||
|
||||
if (path != NULL)
|
||||
*path = (*cp == 0) ? cp : cp + 1;
|
||||
break;
|
||||
|
||||
case DEVT_NET:
|
||||
unit = 0;
|
||||
|
||||
if (*np && (*np != ':')) {
|
||||
unit = strtol(np, &cp, 0); /* get unit number if present */
|
||||
if (cp == np) {
|
||||
err = EUNIT;
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
if (*cp && (*cp != ':')) {
|
||||
err = EINVAL;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
idev->d_kind.netif.unit = unit;
|
||||
if (path != NULL)
|
||||
*path = (*cp == 0) ? cp : cp + 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
err = EINVAL;
|
||||
goto fail;
|
||||
}
|
||||
idev->d_dev = dv;
|
||||
idev->d_type = dv->dv_type;
|
||||
if (dev == NULL) {
|
||||
free(idev);
|
||||
} else {
|
||||
*dev = idev;
|
||||
}
|
||||
return(0);
|
||||
|
||||
fail:
|
||||
free(idev);
|
||||
return(err);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
ski_fmtdev(void *vdev)
|
||||
{
|
||||
struct ski_devdesc *dev = (struct ski_devdesc *)vdev;
|
||||
static char buf[128]; /* XXX device length constant? */
|
||||
char *cp;
|
||||
|
||||
switch(dev->d_type) {
|
||||
case DEVT_NONE:
|
||||
strcpy(buf, "(no device)");
|
||||
break;
|
||||
|
||||
case DEVT_DISK:
|
||||
cp = buf;
|
||||
cp += sprintf(cp, "%s%d", dev->d_dev->dv_name, dev->d_kind.skidisk.unit);
|
||||
if (dev->d_kind.skidisk.slice > 0)
|
||||
cp += sprintf(cp, "s%d", dev->d_kind.skidisk.slice);
|
||||
if (dev->d_kind.skidisk.partition >= 0)
|
||||
cp += sprintf(cp, "%c", dev->d_kind.skidisk.partition + 'a');
|
||||
strcat(cp, ":");
|
||||
break;
|
||||
|
||||
case DEVT_NET:
|
||||
sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_kind.netif.unit);
|
||||
break;
|
||||
}
|
||||
return(buf);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Set currdev to suit the value being supplied in (value)
|
||||
*/
|
||||
int
|
||||
ski_setcurrdev(struct env_var *ev, int flags, void *value)
|
||||
{
|
||||
struct ski_devdesc *ncurr;
|
||||
int rv;
|
||||
|
||||
if ((rv = ski_parsedev(&ncurr, value, NULL)) != 0)
|
||||
return(rv);
|
||||
free(ncurr);
|
||||
env_setenv(ev->ev_name, flags | EV_NOHOOK, value, NULL, NULL);
|
||||
return(0);
|
||||
}
|
||||
|
@ -1,268 +0,0 @@
|
||||
/*
|
||||
* 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$");
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <machine/bootinfo.h>
|
||||
#include <efi.h>
|
||||
#include <stand.h>
|
||||
#include "libski.h"
|
||||
|
||||
extern void acpi_root;
|
||||
extern void sal_systab;
|
||||
|
||||
extern void acpi_stub_init(void);
|
||||
extern void sal_stub_init(void);
|
||||
|
||||
EFI_CONFIGURATION_TABLE efi_cfgtab[] = {
|
||||
{ ACPI_20_TABLE_GUID, &acpi_root },
|
||||
{ SAL_SYSTEM_TABLE_GUID, &sal_systab }
|
||||
};
|
||||
|
||||
|
||||
static EFI_STATUS GetTime(EFI_TIME *, EFI_TIME_CAPABILITIES *);
|
||||
static EFI_STATUS SetTime(EFI_TIME *);
|
||||
static EFI_STATUS GetWakeupTime(BOOLEAN *, BOOLEAN *, EFI_TIME *);
|
||||
static EFI_STATUS SetWakeupTime(BOOLEAN, EFI_TIME *);
|
||||
|
||||
static EFI_STATUS SetVirtualAddressMap(UINTN, UINTN, UINT32,
|
||||
EFI_MEMORY_DESCRIPTOR*);
|
||||
static EFI_STATUS ConvertPointer(UINTN, VOID **);
|
||||
|
||||
static EFI_STATUS GetVariable(CHAR16 *, EFI_GUID *, UINT32 *, UINTN *, VOID *);
|
||||
static EFI_STATUS GetNextVariableName(UINTN *, CHAR16 *, EFI_GUID *);
|
||||
static EFI_STATUS SetVariable(CHAR16 *, EFI_GUID *, UINT32, UINTN, VOID *);
|
||||
|
||||
static EFI_STATUS GetNextHighMonotonicCount(UINT32 *);
|
||||
static EFI_STATUS ResetSystem(EFI_RESET_TYPE, EFI_STATUS, UINTN, CHAR16 *);
|
||||
|
||||
EFI_RUNTIME_SERVICES efi_rttab = {
|
||||
/* Header. */
|
||||
{ EFI_RUNTIME_SERVICES_SIGNATURE,
|
||||
EFI_RUNTIME_SERVICES_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
|
||||
};
|
||||
|
||||
EFI_SYSTEM_TABLE efi_systab = {
|
||||
/* Header. */
|
||||
{ EFI_SYSTEM_TABLE_SIGNATURE,
|
||||
EFI_SYSTEM_TABLE_REVISION,
|
||||
0, /* XXX HeaderSize */
|
||||
0, /* XXX CRC32 */
|
||||
},
|
||||
|
||||
/* Firmware info. */
|
||||
L"FreeBSD", 0,
|
||||
|
||||
/* Console stuff. */
|
||||
NULL, NULL,
|
||||
NULL, NULL,
|
||||
NULL, NULL,
|
||||
|
||||
/* Services (runtime first). */
|
||||
&efi_rttab,
|
||||
NULL,
|
||||
|
||||
/* Configuration tables. */
|
||||
sizeof(efi_cfgtab)/sizeof(EFI_CONFIGURATION_TABLE),
|
||||
efi_cfgtab
|
||||
};
|
||||
|
||||
static EFI_STATUS
|
||||
unsupported(const char *func)
|
||||
{
|
||||
printf("EFI: %s not supported\n", func);
|
||||
return (EFI_UNSUPPORTED);
|
||||
}
|
||||
|
||||
static EFI_STATUS
|
||||
GetTime(EFI_TIME *time, EFI_TIME_CAPABILITIES *caps)
|
||||
{
|
||||
UINT32 comps[8];
|
||||
|
||||
ssc((UINT64)comps, 0, 0, 0, SSC_GET_RTC);
|
||||
time->Year = comps[0] + 1900;
|
||||
time->Month = comps[1] + 1;
|
||||
time->Day = comps[2];
|
||||
time->Hour = comps[3];
|
||||
time->Minute = comps[4];
|
||||
time->Second = comps[5];
|
||||
time->Pad1 = time->Pad2 = 0;
|
||||
time->Nanosecond = 0;
|
||||
time->TimeZone = 0;
|
||||
time->Daylight = 0;
|
||||
return (EFI_SUCCESS);
|
||||
}
|
||||
|
||||
static EFI_STATUS
|
||||
SetTime(EFI_TIME *time)
|
||||
{
|
||||
return (EFI_SUCCESS);
|
||||
}
|
||||
|
||||
static EFI_STATUS
|
||||
GetWakeupTime(BOOLEAN *enabled, BOOLEAN *pending, EFI_TIME *time)
|
||||
{
|
||||
return (unsupported(__func__));
|
||||
}
|
||||
|
||||
static EFI_STATUS
|
||||
SetWakeupTime(BOOLEAN enable, EFI_TIME *time)
|
||||
{
|
||||
return (unsupported(__func__));
|
||||
}
|
||||
|
||||
static void
|
||||
Reloc(void *addr, UINT64 delta)
|
||||
{
|
||||
UINT64 **fpp = addr;
|
||||
|
||||
*fpp[0] += delta;
|
||||
*fpp[1] += delta;
|
||||
*fpp += delta >> 3;
|
||||
}
|
||||
|
||||
static EFI_STATUS
|
||||
SetVirtualAddressMap(UINTN mapsz, UINTN descsz, UINT32 version,
|
||||
EFI_MEMORY_DESCRIPTOR *memmap)
|
||||
{
|
||||
UINT64 delta;
|
||||
|
||||
delta = memmap->VirtualStart - memmap->PhysicalStart;
|
||||
Reloc(&efi_rttab.GetTime, delta);
|
||||
Reloc(&efi_rttab.SetTime, delta);
|
||||
return (EFI_SUCCESS); /* Hah... */
|
||||
}
|
||||
|
||||
static EFI_STATUS
|
||||
ConvertPointer(UINTN debug, VOID **addr)
|
||||
{
|
||||
return (unsupported(__func__));
|
||||
}
|
||||
|
||||
static EFI_STATUS
|
||||
GetVariable(CHAR16 *name, EFI_GUID *vendor, UINT32 *attrs, UINTN *datasz,
|
||||
VOID *data)
|
||||
{
|
||||
return (unsupported(__func__));
|
||||
}
|
||||
|
||||
static EFI_STATUS
|
||||
GetNextVariableName(UINTN *namesz, CHAR16 *name, EFI_GUID *vendor)
|
||||
{
|
||||
return (unsupported(__func__));
|
||||
}
|
||||
|
||||
static EFI_STATUS
|
||||
SetVariable(CHAR16 *name, EFI_GUID *vendor, UINT32 attrs, UINTN datasz,
|
||||
VOID *data)
|
||||
{
|
||||
return (unsupported(__func__));
|
||||
}
|
||||
|
||||
static EFI_STATUS
|
||||
GetNextHighMonotonicCount(UINT32 *high)
|
||||
{
|
||||
static UINT32 counter = 0;
|
||||
|
||||
*high = counter++;
|
||||
return (EFI_SUCCESS);
|
||||
}
|
||||
|
||||
static EFI_STATUS
|
||||
ResetSystem(EFI_RESET_TYPE type, EFI_STATUS status, UINTN datasz,
|
||||
CHAR16 *data)
|
||||
{
|
||||
return (unsupported(__func__));
|
||||
}
|
||||
|
||||
int
|
||||
ski_init_stubs(struct bootinfo *bi)
|
||||
{
|
||||
EFI_MEMORY_DESCRIPTOR *memp;
|
||||
|
||||
/* Describe the SKI memory map. */
|
||||
bi->bi_memmap = (u_int64_t)(bi + 1);
|
||||
bi->bi_memmap_size = 4 * sizeof(EFI_MEMORY_DESCRIPTOR);
|
||||
bi->bi_memdesc_size = sizeof(EFI_MEMORY_DESCRIPTOR);
|
||||
bi->bi_memdesc_version = 1;
|
||||
|
||||
memp = (EFI_MEMORY_DESCRIPTOR *)bi->bi_memmap;
|
||||
|
||||
memp[0].Type = EfiPalCode;
|
||||
memp[0].PhysicalStart = 0x100000;
|
||||
memp[0].VirtualStart = 0;
|
||||
memp[0].NumberOfPages = (4L*1024*1024)>>12;
|
||||
memp[0].Attribute = EFI_MEMORY_WB | EFI_MEMORY_RUNTIME;
|
||||
|
||||
memp[1].Type = EfiConventionalMemory;
|
||||
memp[1].PhysicalStart = 5L*1024*1024;
|
||||
memp[1].VirtualStart = 0;
|
||||
memp[1].NumberOfPages = (128L*1024*1024)>>12;
|
||||
memp[1].Attribute = EFI_MEMORY_WB;
|
||||
|
||||
memp[2].Type = EfiConventionalMemory;
|
||||
memp[2].PhysicalStart = 4L*1024*1024*1024;
|
||||
memp[2].VirtualStart = 0;
|
||||
memp[2].NumberOfPages = (64L*1024*1024)>>12;
|
||||
memp[2].Attribute = EFI_MEMORY_WB;
|
||||
|
||||
memp[3].Type = EfiMemoryMappedIOPortSpace;
|
||||
memp[3].PhysicalStart = 0xffffc000000;
|
||||
memp[3].VirtualStart = 0;
|
||||
memp[3].NumberOfPages = (64L*1024*1024)>>12;
|
||||
memp[3].Attribute = EFI_MEMORY_UC;
|
||||
|
||||
bi->bi_systab = (u_int64_t)&efi_systab;
|
||||
|
||||
sal_stub_init();
|
||||
acpi_stub_init();
|
||||
|
||||
return (0);
|
||||
}
|
@ -1,202 +0,0 @@
|
||||
/* $NetBSD: loadfile.c,v 1.10 1998/06/25 06:45:46 ross Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1997 The NetBSD Foundation, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to The NetBSD Foundation
|
||||
* by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
|
||||
* NASA Ames Research Center.
|
||||
*
|
||||
* 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 the NetBSD
|
||||
* Foundation, Inc. and its contributors.
|
||||
* 4. Neither the name of The NetBSD Foundation nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Ralph Campbell.
|
||||
*
|
||||
* 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.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
*
|
||||
* @(#)boot.c 8.1 (Berkeley) 6/10/93
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <stand.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/linker.h>
|
||||
#include <machine/elf.h>
|
||||
#include <machine/bootinfo.h>
|
||||
#include <machine/ia64_cpu.h>
|
||||
#include <machine/vmparam.h>
|
||||
|
||||
#include "bootstrap.h"
|
||||
#include "libski.h"
|
||||
|
||||
#define _KERNEL
|
||||
|
||||
static int elf64_exec(struct preloaded_file *amp);
|
||||
|
||||
struct file_format ia64_elf = { elf64_loadfile, elf64_exec };
|
||||
|
||||
#define PTE_MA_WB 0
|
||||
#define PTE_MA_UC 4
|
||||
#define PTE_MA_UCE 5
|
||||
#define PTE_MA_WC 6
|
||||
#define PTE_MA_NATPAGE 7
|
||||
|
||||
#define PTE_PL_KERN 0
|
||||
#define PTE_PL_USER 3
|
||||
|
||||
#define PTE_AR_R 0
|
||||
#define PTE_AR_RX 1
|
||||
#define PTE_AR_RW 2
|
||||
#define PTE_AR_RWX 3
|
||||
#define PTE_AR_R_RW 4
|
||||
#define PTE_AR_RX_RWX 5
|
||||
#define PTE_AR_RWX_RW 6
|
||||
#define PTE_AR_X_RX 7
|
||||
|
||||
/*
|
||||
* A short-format VHPT entry. Also matches the TLB insertion format.
|
||||
*/
|
||||
struct ia64_pte {
|
||||
u_int64_t pte_p :1; /* bits 0..0 */
|
||||
u_int64_t pte_rv1 :1; /* bits 1..1 */
|
||||
u_int64_t pte_ma :3; /* bits 2..4 */
|
||||
u_int64_t pte_a :1; /* bits 5..5 */
|
||||
u_int64_t pte_d :1; /* bits 6..6 */
|
||||
u_int64_t pte_pl :2; /* bits 7..8 */
|
||||
u_int64_t pte_ar :3; /* bits 9..11 */
|
||||
u_int64_t pte_ppn :38; /* bits 12..49 */
|
||||
u_int64_t pte_rv2 :2; /* bits 50..51 */
|
||||
u_int64_t pte_ed :1; /* bits 52..52 */
|
||||
u_int64_t pte_ig :11; /* bits 53..63 */
|
||||
};
|
||||
|
||||
static struct bootinfo bootinfo;
|
||||
|
||||
void
|
||||
enter_kernel(const char* filename, u_int64_t start, struct bootinfo *bi)
|
||||
{
|
||||
printf("Entering %s at 0x%lx...\n", filename, start);
|
||||
|
||||
while (*filename == '/')
|
||||
filename++;
|
||||
ssc(0, (u_int64_t) filename, 0, 0, SSC_LOAD_SYMBOLS);
|
||||
|
||||
__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 r8=%0" :: "r" (bi));
|
||||
__asm __volatile("rfi;;");
|
||||
}
|
||||
|
||||
static int
|
||||
elf64_exec(struct preloaded_file *fp)
|
||||
{
|
||||
struct file_metadata *md;
|
||||
Elf_Ehdr *hdr;
|
||||
struct ia64_pte pte;
|
||||
struct bootinfo *bi;
|
||||
|
||||
if ((md = file_findmetadata(fp, MODINFOMD_ELFHDR)) == NULL)
|
||||
return(EFTYPE); /* XXX actually EFUCKUP */
|
||||
hdr = (Elf_Ehdr *)&(md->md_data);
|
||||
|
||||
/*
|
||||
* Ugly hack, similar to linux. Dump the bootinfo into a
|
||||
* special page reserved in the link map.
|
||||
*/
|
||||
bi = &bootinfo;
|
||||
bzero(bi, sizeof(struct bootinfo));
|
||||
bi_load(bi, fp);
|
||||
|
||||
/*
|
||||
* 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));
|
||||
|
||||
bzero(&pte, sizeof(pte));
|
||||
pte.pte_p = 1;
|
||||
pte.pte_ma = PTE_MA_WB;
|
||||
pte.pte_a = 1;
|
||||
pte.pte_d = 1;
|
||||
pte.pte_pl = PTE_PL_KERN;
|
||||
pte.pte_ar = PTE_AR_RWX;
|
||||
pte.pte_ppn = 0;
|
||||
|
||||
__asm __volatile("mov cr.ifa=%0" :: "r"(IA64_RR_BASE(7)));
|
||||
__asm __volatile("mov cr.itir=%0" :: "r"(28 << 2));
|
||||
__asm __volatile("srlz.i;;");
|
||||
__asm __volatile("itr.i itr[%0]=%1;;"
|
||||
:: "r"(0), "r"(*(u_int64_t*)&pte));
|
||||
__asm __volatile("srlz.i;;");
|
||||
__asm __volatile("itr.d dtr[%0]=%1;;"
|
||||
:: "r"(0), "r"(*(u_int64_t*)&pte));
|
||||
__asm __volatile("srlz.i;;");
|
||||
|
||||
enter_kernel(fp->f_name, hdr->e_entry, bi);
|
||||
}
|
@ -1,42 +0,0 @@
|
||||
/*-
|
||||
* 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$");
|
||||
|
||||
#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);
|
||||
}
|
@ -1,96 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2001 Doug Rabson
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
/*
|
||||
* SKI fully-qualified device descriptor
|
||||
*/
|
||||
struct ski_devdesc {
|
||||
struct devsw *d_dev;
|
||||
int d_type;
|
||||
#define DEVT_NONE 0
|
||||
#define DEVT_DISK 1
|
||||
#define DEVT_NET 2
|
||||
union {
|
||||
struct {
|
||||
int unit;
|
||||
int slice;
|
||||
int partition;
|
||||
} skidisk;
|
||||
struct {
|
||||
int unit; /* XXX net layer lives over these? */
|
||||
} netif;
|
||||
} d_kind;
|
||||
};
|
||||
|
||||
extern int ski_getdev(void **vdev, const char *devspec, const char **path);
|
||||
extern char *ski_fmtdev(void *vdev);
|
||||
extern int ski_setcurrdev(struct env_var *ev, int flags, void *value);
|
||||
|
||||
#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 ssize_t ski_copyin(const void *src, vm_offset_t dest, size_t len);
|
||||
extern ssize_t ski_copyout(const vm_offset_t src, void *dest, size_t len);
|
||||
extern ssize_t ski_readin(int fd, vm_offset_t dest, size_t len);
|
||||
|
||||
extern int ski_boot(void);
|
||||
extern int ski_autoload(void);
|
||||
|
||||
struct bootinfo;
|
||||
struct preloaded_file;
|
||||
extern int bi_load(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);
|
@ -1,40 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1998 Michael Smith <msmith@freebsd.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <stand.h>
|
||||
|
||||
/*
|
||||
* Use voodoo to load modules required by current hardware.
|
||||
*/
|
||||
int
|
||||
ski_autoload(void)
|
||||
{
|
||||
/* XXX use PnP to locate stuff here */
|
||||
return (0);
|
||||
}
|
@ -1,74 +0,0 @@
|
||||
/*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
#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)
|
@ -1,118 +0,0 @@
|
||||
/*
|
||||
* 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$");
|
||||
|
||||
#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;
|
||||
}
|
@ -1,96 +0,0 @@
|
||||
/*-
|
||||
* 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$");
|
||||
|
||||
#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
|
||||
};
|
@ -1,193 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2001 Doug Rabson
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/time.h>
|
||||
#include <stddef.h>
|
||||
#include <stand.h>
|
||||
#include <stdarg.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
|
||||
};
|
@ -1,53 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2001 Doug Rabson
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#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;
|
||||
}
|
@ -1,174 +0,0 @@
|
||||
/*
|
||||
* 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$");
|
||||
|
||||
#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);
|
||||
}
|
@ -1,47 +0,0 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.PATH: ${.CURDIR}/../common
|
||||
|
||||
PROG= skiload
|
||||
NOMAN=
|
||||
NEWVERSWHAT= "ia64 SKI boot" ${MACHINE_ARCH}
|
||||
BINDIR?= /boot
|
||||
STRIP= # We must not strip skiload at install time.
|
||||
|
||||
SRCS= conf.c main.c start.S vers.c
|
||||
|
||||
.if !defined(NOFORTH)
|
||||
# Enable BootForth
|
||||
BOOT_FORTH= yes
|
||||
CFLAGS+= -DBOOT_FORTH
|
||||
CFLAGS+= -I${.CURDIR}/../../ficl -I${.CURDIR}/../../ficl/${MACHINE_ARCH}
|
||||
LIBFICL= ${.OBJDIR}/../../ficl/libficl.a
|
||||
.endif
|
||||
|
||||
LIBSKI= ${.OBJDIR}/../libski/libski.a
|
||||
|
||||
# Always add MI sources
|
||||
.PATH: ${.CURDIR}/../../common
|
||||
.include "${.CURDIR}/../../common/Makefile.inc"
|
||||
|
||||
CFLAGS+= -I${.CURDIR}/../../common
|
||||
CFLAGS+= -I${.CURDIR}/../libski
|
||||
CFLAGS+= -DLOADER
|
||||
|
||||
LDFLAGS= -Wl,-T${.CURDIR}/ldscript.ia64
|
||||
|
||||
CLEANFILES= vers.c ${PROG}.help
|
||||
|
||||
vers.c: ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/version
|
||||
sh ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/version ${NEWVERSWHAT}
|
||||
|
||||
${PROG}.help: help.common
|
||||
cat ${.ALLSRC} | awk -f ${.CURDIR}/../../common/merge_help.awk \
|
||||
> ${.TARGET}
|
||||
|
||||
FILES= ${PROG}.help
|
||||
|
||||
DPADD= ${LIBFICL} ${LIBSKI} ${LIBSTAND}
|
||||
LDADD= ${LIBFICL} ${LIBSKI} -lstand
|
||||
|
||||
.include <bsd.prog.mk>
|
@ -1,86 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1997
|
||||
* Matthias Drochner. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed for the NetBSD Project
|
||||
* by Matthias Drochner.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $NetBSD: conf.c,v 1.2 1997/03/22 09:03:29 thorpej Exp $
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <stand.h>
|
||||
|
||||
#include "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
|
||||
};
|
||||
|
||||
/* Exported for ia64 only */
|
||||
/*
|
||||
* Sort formats so that those that can detect based on arguments
|
||||
* rather than reading the file go first.
|
||||
*/
|
||||
extern struct file_format ia64_elf;
|
||||
|
||||
struct file_format *file_formats[] = {
|
||||
&ia64_elf,
|
||||
NULL
|
||||
};
|
||||
|
||||
/*
|
||||
* Consoles
|
||||
*
|
||||
* We don't prototype these in libalpha.h because they require
|
||||
* data structures from bootstrap.h as well.
|
||||
*/
|
||||
extern struct console ski_console;
|
||||
|
||||
struct console *consoles[] = {
|
||||
&ski_console,
|
||||
NULL
|
||||
};
|
@ -1,61 +0,0 @@
|
||||
/* $FreeBSD$ */
|
||||
OUTPUT_FORMAT("elf64-ia64-little", "elf64-ia64-little", "elf64-ia64-little")
|
||||
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
|
||||
.data : {
|
||||
*(.rodata .rodata.* .gnu.linkonce.r.*)
|
||||
*(.rodata1)
|
||||
*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
|
||||
*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)
|
||||
*(.opd)
|
||||
*(.IA_64.unwind_info* .gnu.linkonce.ia64unwi.*)
|
||||
*(.IA_64.unwind* .gnu.linkonce.ia64unw.*)
|
||||
__start_set_Xcommand_set = .;
|
||||
*(set_Xcommand_set)
|
||||
__stop_set_Xcommand_set = .;
|
||||
*(.data .data.* .gnu.linkonce.d.*)
|
||||
*(.data1)
|
||||
*(.plabel)
|
||||
*(.dynbss)
|
||||
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
}
|
||||
__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) }
|
||||
}
|
@ -1,128 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1998 Michael Smith <msmith@freebsd.org>
|
||||
* Copyright (c) 1998,2000 Doug Rabson <dfr@freebsd.org>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <stand.h>
|
||||
#include <string.h>
|
||||
#include <setjmp.h>
|
||||
#include <machine/fpu.h>
|
||||
|
||||
#include "bootstrap.h"
|
||||
#include "libski.h"
|
||||
|
||||
extern char bootprog_name[];
|
||||
extern char bootprog_rev[];
|
||||
extern char bootprog_date[];
|
||||
extern char bootprog_maker[];
|
||||
|
||||
struct ski_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();
|
||||
|
||||
/*
|
||||
* Initialise the block cache
|
||||
*/
|
||||
bcache_init(32, 512); /* 16k XXX tune this */
|
||||
|
||||
/*
|
||||
* 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_kind.skidisk.unit = 0;
|
||||
/* XXX should be able to detect this, default to autoprobe */
|
||||
currdev.d_kind.skidisk.slice = -1;
|
||||
/* default to 'a' */
|
||||
currdev.d_kind.skidisk.partition = 0;
|
||||
|
||||
#if 0
|
||||
/* Create arc-specific variables */
|
||||
bootfile = GetEnvironmentVariable(ARCENV_BOOTFILE);
|
||||
if (bootfile)
|
||||
setenv("bootfile", bootfile, 1);
|
||||
#endif
|
||||
|
||||
env_setenv("currdev", EV_VOLATILE, ski_fmtdev(&currdev),
|
||||
ski_setcurrdev, env_nounset);
|
||||
env_setenv("loaddev", EV_VOLATILE, ski_fmtdev(&currdev), env_noset,
|
||||
env_nounset);
|
||||
|
||||
setenv("LINES", "24", 1); /* optional */
|
||||
|
||||
archsw.arch_autoload = ski_autoload;
|
||||
archsw.arch_getdev = ski_getdev;
|
||||
archsw.arch_copyin = ski_copyin;
|
||||
archsw.arch_copyout = ski_copyout;
|
||||
archsw.arch_readin = ski_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);
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
# $FreeBSD$
|
||||
iar
|
||||
fr
|
||||
pa
|
||||
b enter_kernel
|
||||
c
|
||||
b printf
|
||||
c
|
||||
b rp
|
||||
c
|
||||
b ssc
|
||||
c
|
||||
b rp
|
||||
c
|
||||
bD
|
||||
s 11
|
@ -1,62 +0,0 @@
|
||||
/*
|
||||
* 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$
|
||||
*/
|
||||
|
||||
#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
|
@ -1,8 +0,0 @@
|
||||
$FreeBSD$
|
||||
|
||||
NOTE ANY CHANGES YOU MAKE TO THE BOOTBLOCKS HERE. The format of this
|
||||
file is important. Make sure the current version number is on line 6.
|
||||
|
||||
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.
|
Loading…
Reference in New Issue
Block a user