Remove. This file was repocopied to ../ski.

This commit is contained in:
Marcel Moolenaar 2004-09-24 04:49:32 +00:00
parent 7295f657e2
commit 759e38dbbe
24 changed files with 0 additions and 2614 deletions

View File

@ -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>

View File

@ -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);
}

View File

@ -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));
}

View File

@ -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));
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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)

View File

@ -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;
}

View File

@ -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
};

View File

@ -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
};

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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>

View File

@ -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
};

View File

@ -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) }
}

View File

@ -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);
}

View File

@ -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

View File

@ -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

View File

@ -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.