From owner-p4-projects@FreeBSD.ORG Tue Mar 26 09:25:12 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 162E1DDF; Tue, 26 Mar 2013 09:25:12 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id A2039DDD for ; Tue, 26 Mar 2013 09:25:11 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:1900:2254:2068::682:0]) by mx1.freebsd.org (Postfix) with ESMTP id 84977A84 for ; Tue, 26 Mar 2013 09:25:11 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.6/8.14.6) with ESMTP id r2Q9PBqj028269 for ; Tue, 26 Mar 2013 09:25:11 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.6/8.14.6/Submit) id r2Q9PAhe028266 for perforce@freebsd.org; Tue, 26 Mar 2013 09:25:10 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Tue, 26 Mar 2013 09:25:10 GMT Message-Id: <201303260925.r2Q9PAhe028266@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 227083 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Mar 2013 09:25:12 -0000 http://p4web.freebsd.org/@@227083?ac=10 Change 227083 by rwatson@rwatson_zenith_cl_cam_ac_uk on 2013/03/26 09:24:36 Re-port FreeBSD's boot2 to MIPS / BERI based on i386 rather than arm. We don't have the space constraints that caused an axe to be taken to the arm version, meaning that we can leave room for features such as partition tables, directory listings, etc. This still involves copying boot2.c, but trying to create a machine- independent boot2 is a project for another day. Not yet tested, but does link. Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/altera_jtag_uart.c#2 edit .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/boot2.c#4 edit .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/cons.h#2 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/altera_jtag_uart.c#2 (text+ko) ==== @@ -160,22 +160,31 @@ } int -getc(int seconds) +keyhit(int seconds) { register_t stoptime; stoptime = cp0_count_get() + seconds * 100000000; while (cp0_count_get() < stoptime) { - if (uart_readable()) { - buffer_valid = 0; - return (buffer_data); - } + if (uart_readable()) + return (1); + } + return (0); +} + +int +getc(int seconds) +{ + + if (keyhit(seconds)) { + buffer_valid = 0; + return (buffer_data); } return (0); } void -putchar(int ch) +putc(int ch) { uart_data_write(ch); ==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/boot2.c#4 (text+ko) ==== @@ -27,8 +27,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * Copyright (c) 2008 John Hay - * Copyright (c) 2006 Warner Losh * Copyright (c) 1998 Robert Nordier * All rights reserved. * @@ -44,14 +42,16 @@ */ #include -__FBSDID("$FreeBSD: head/sys/boot/arm/at91/boot2/boot2.c 235988 2012-05-25 09:36:39Z gleb $"); +__FBSDID("$FreeBSD: head/sys/boot/i386/boot2/boot2.c 241301 2012-10-06 20:08:29Z avg $"); #include #include #include #include +#include #include +#include #include #include @@ -59,8 +59,10 @@ #include "cons.h" #include "drv.h" -//#include "lib.h" -//#include "board.h" +#define IO_KEYBOARD 1 +#define IO_SERIAL 2 + +#define SECOND 18 /* Circa that many ticks in a second. */ #define RBX_ASKNAME 0x0 /* -a */ #define RBX_SINGLE 0x1 /* -s */ @@ -68,363 +70,628 @@ /* 0x3 is reserved for log2(RB_HALT). */ /* 0x4 is reserved for log2(RB_INITNAME). */ #define RBX_DFLTROOT 0x5 /* -r */ -/* #define RBX_KDB 0x6 -d */ +#define RBX_KDB 0x6 /* -d */ /* 0x7 is reserved for log2(RB_RDONLY). */ /* 0x8 is reserved for log2(RB_DUMP). */ /* 0x9 is reserved for log2(RB_MINIROOT). */ #define RBX_CONFIG 0xa /* -c */ #define RBX_VERBOSE 0xb /* -v */ -/* #define RBX_SERIAL 0xc -h */ -/* #define RBX_CDROM 0xd -C */ +#define RBX_SERIAL 0xc /* -h */ +#define RBX_CDROM 0xd /* -C */ /* 0xe is reserved for log2(RB_POWEROFF). */ #define RBX_GDB 0xf /* -g */ -/* #define RBX_MUTE 0x10 -m */ +#define RBX_MUTE 0x10 /* -m */ /* 0x11 is reserved for log2(RB_SELFTEST). */ /* 0x12 is reserved for boot programs. */ /* 0x13 is reserved for boot programs. */ -/* #define RBX_PAUSE 0x14 -p */ -/* #define RBX_QUIET 0x15 -q */ +#define RBX_PAUSE 0x14 /* -p */ +#define RBX_QUIET 0x15 /* -q */ #define RBX_NOINTR 0x1c /* -n */ /* 0x1d is reserved for log2(RB_MULTIPLE) and is just misnamed here. */ -/* #define RBX_DUAL 0x1d -D */ +#define RBX_DUAL 0x1d /* -D */ /* 0x1f is reserved for log2(RB_BOOTINFO). */ -/* pass: -a, -s, -r, -v, -g */ +/* pass: -a, -s, -r, -d, -c, -v, -h, -C, -g, -m, -p, -D */ #define RBX_MASK (OPT_SET(RBX_ASKNAME) | OPT_SET(RBX_SINGLE) | \ - OPT_SET(RBX_DFLTROOT) | \ - OPT_SET(RBX_VERBOSE) | \ - OPT_SET(RBX_GDB)) + OPT_SET(RBX_DFLTROOT) | OPT_SET(RBX_KDB ) | \ + OPT_SET(RBX_CONFIG) | OPT_SET(RBX_VERBOSE) | \ + OPT_SET(RBX_SERIAL) | OPT_SET(RBX_CDROM) | \ + OPT_SET(RBX_GDB ) | OPT_SET(RBX_MUTE) | \ + OPT_SET(RBX_PAUSE) | OPT_SET(RBX_DUAL)) #define PATH_DOTCONFIG "/boot.config" #define PATH_CONFIG "/boot/config" +#define PATH_BOOT3 "/boot/loader" #define PATH_KERNEL "/boot/kernel/kernel" -extern uint32_t _end; +#define ARGS 0x900 +#define NOPT 14 +#define NDEV 3 +#define MEM_BASE 0x12 +#define MEM_EXT 0x15 + +#define DRV_HARD 0x80 +#define DRV_MASK 0x7f -#define NOPT 6 +#define TYPE_AD 0 +#define TYPE_DA 1 +#define TYPE_MAXHARD TYPE_DA +#define TYPE_FD 2 #define OPT_SET(opt) (1 << (opt)) #define OPT_CHECK(opt) ((opts) & OPT_SET(opt)) -static const char optstr[NOPT] = "agnrsv"; +extern uint32_t _end; + +static const char optstr[NOPT] = "DhaCcdgmnpqrsv"; /* Also 'P', 'S' */ static const unsigned char flags[NOPT] = { - RBX_ASKNAME, - RBX_GDB, - RBX_NOINTR, - RBX_DFLTROOT, - RBX_SINGLE, - RBX_VERBOSE + RBX_DUAL, + RBX_SERIAL, + RBX_ASKNAME, + RBX_CDROM, + RBX_CONFIG, + RBX_KDB, + RBX_GDB, + RBX_MUTE, + RBX_NOINTR, + RBX_PAUSE, + RBX_QUIET, + RBX_DFLTROOT, + RBX_SINGLE, + RBX_VERBOSE }; -unsigned board_id; /* board type to pass to kernel, if set by board_* code */ -unsigned dsk_start; -static char cmd[512]; -static char kname[1024]; +static const char *const dev_nm[NDEV] = {"ad", "da", "fd"}; +static const unsigned char dev_maj[NDEV] = {30, 4, 2}; + +static struct dmadat __dmadat; + +static struct dsk { + unsigned drive; + unsigned type; + unsigned unit; + uint8_t slice; + uint8_t part; + unsigned start; + int init; +} dsk; +static char cmd[512], cmddup[512], knamebuf[1024]; +static const char *kname; static uint32_t opts; -static uint8_t dsk_meta; +#if 0 +static int comspeed = SIOSPD; +static struct bootinfo bootinfo; +#endif +static uint8_t ioctrl = IO_KEYBOARD; +void exit(int); static void load(void); static int parse(void); static int dskread(void *, unsigned, unsigned); -#ifdef FIXUP_BOOT_DRV -static void fixup_boot_drv(caddr_t, int, int, int); +static void printf(const char *,...); +static void putchar(int); +#if 0 +static int drvread(void *, unsigned, unsigned); +static int keyhit(unsigned); +#endif +static int xputc(int); +static int xgetc(int); +#if 0 +static inline int getc(int); +#endif + +#if 0 +void memcpy(void *, const void *, int); #endif +void +memcpy(void *dst, const void *src, int len) +{ + const char *s = src; + char *d = dst; + + while (len--) + *d++ = *s++; +} -#include "util.c" +static inline int +strcmp(const char *s1, const char *s2) +{ + for (; *s1 == *s2 && *s1; s1++, s2++); + return (unsigned char)*s1 - (unsigned char)*s2; +} + #define UFS_SMALL_CGBASE #include "ufsread.c" -static struct dmadat __dmadat; - -#ifdef DEBUG -#define DPRINTF(fmt, ...) printf(fmt, __VA_ARGS__) -#else -#define DPRINTF(fmt, ...) -#endif - static inline int xfsread(ufs_ino_t inode, void *buf, size_t nbyte) { - if ((size_t)fsread(inode, buf, nbyte) != nbyte) - return -1; - return 0; + if ((size_t)fsread(inode, buf, nbyte) != nbyte) { + printf("Invalid %s\n", "format"); + return -1; + } + return 0; } static inline void -getstr(int c) +getstr(void) { - char *s; + char *s; + int c; - s = cmd; - if (c == 0) - c = getc(10000); - for (;;) { - switch (c) { - case 0: - break; - case '\177': - case '\b': - if (s > cmd) { - s--; - printf("\b \b"); - } - break; - case '\n': - case '\r': - *s = 0; - return; - default: - if (s - cmd < sizeof(cmd) - 1) - *s++ = c; - putchar(c); - } - c = getc(10000); + s = cmd; + for (;;) { + switch (c = xgetc(0)) { + case 0: + break; + case '\177': + case '\b': + if (s > cmd) { + s--; + printf("\b \b"); + } + break; + case '\n': + case '\r': + *s = 0; + return; + default: + if (s - cmd < sizeof(cmd) - 1) + *s++ = c; + putchar(c); } + } } int main(void) { - int autoboot, c = 0; - ufs_ino_t ino; + uint8_t autoboot; + ufs_ino_t ino; + size_t nbyte; + + dmadat = &__dmadat; +#if 0 + /* XXXRW: more here. */ + v86.ctl = V86_FLAGS; + v86.efl = PSL_RESERVED_DEFAULT | PSL_I; + dsk.drive = *(uint8_t *)PTOV(ARGS); + dsk.type = dsk.drive & DRV_HARD ? TYPE_AD : TYPE_FD; + dsk.unit = dsk.drive & DRV_MASK; + dsk.slice = *(uint8_t *)PTOV(ARGS + 1) + 1; + bootinfo.bi_version = BOOTINFO_VERSION; + bootinfo.bi_size = sizeof(bootinfo); +#endif + + /* Process configuration file */ + + autoboot = 1; - dmadat = &__dmadat; - //board_init(); + if ((ino = lookup(PATH_CONFIG)) || + (ino = lookup(PATH_DOTCONFIG))) { + nbyte = fsread(ino, cmd, sizeof(cmd) - 1); + cmd[nbyte] = '\0'; + } - autoboot = 1; + if (*cmd) { + memcpy(cmddup, cmd, sizeof(cmd)); + if (parse()) + autoboot = 0; + if (!OPT_CHECK(RBX_QUIET)) + printf("%s: %s", PATH_CONFIG, cmddup); + /* Do not process this command twice */ + *cmd = 0; + } - /* Process configuration file */ - if ((ino = lookup(PATH_CONFIG)) || - (ino = lookup(PATH_DOTCONFIG))) - fsread(ino, cmd, sizeof(cmd)); + /* + * Try to exec stage 3 boot loader. If interrupted by a keypress, + * or in case of failure, try to load a kernel directly instead. + */ - if (*cmd) { - if (parse()) - autoboot = 0; - printf("%s: %s\n", PATH_CONFIG, cmd); - /* Do not process this command twice */ - *cmd = 0; + if (!kname) { + kname = PATH_BOOT3; + if (autoboot && !keyhit(3*SECOND)) { + load(); + kname = PATH_KERNEL; } + } + + /* Present the user with the boot2 prompt. */ - if (*kname == '\0') - strcpy(kname, PATH_KERNEL); + for (;;) { + if (!autoboot || !OPT_CHECK(RBX_QUIET)) + printf("\nFreeBSD/x86 boot\n" + "Default: %u:%s(%u,%c)%s\n" + "boot: ", + dsk.drive & DRV_MASK, dev_nm[dsk.type], dsk.unit, + 'a' + dsk.part, kname); +#if 0 + if (ioctrl & IO_SERIAL) + sio_flush(); +#endif + if (!autoboot || keyhit(3*SECOND)) + getstr(); + else if (!autoboot || !OPT_CHECK(RBX_QUIET)) + putchar('\n'); + autoboot = 0; + if (parse()) + putchar('\a'); + else + load(); + } +} - /* Present the user with the boot2 prompt. */ - for (;;) { - printf("\nDefault: %s\nboot: ", kname); - if (!autoboot || - (OPT_CHECK(RBX_NOINTR) == 0 && (c = getc(2)) != 0)) - getstr(c); - printf("\n"); - autoboot = 0; - c = 0; - if (parse()) - putchar('\a'); - else - load(); - } +/* XXX - Needed for btxld to link the boot2 binary; do not remove. */ +void +exit(int x) +{ } static void load(void) { + union { Elf64_Ehdr eh; - static Elf64_Phdr ep[2]; - caddr_t p; - ufs_ino_t ino; - uint64_t addr; - int i, j; -#ifdef FIXUP_BOOT_DRV - caddr_t staddr; - int klen; + } hdr; + static Elf64_Phdr ep[2]; +#if 0 + static Elf64_Shdr es[2]; +#endif + caddr_t p; + ufs_ino_t ino; + uint64_t addr; + int i, j; + + if (!(ino = lookup(kname))) { + if (!ls) + printf("No %s\n", kname); + return; + } + if (xfsread(ino, &hdr, sizeof(hdr))) + return; - staddr = (caddr_t)0xffffffff; - klen = 0; -#endif - if (!(ino = lookup(kname))) { - if (!ls) - printf("No %s\n", kname); + if (IS_ELF(hdr.eh)) { + fs_off = hdr.eh.e_phoff; + for (j = i = 0; i < hdr.eh.e_phnum && j < 2; i++) { + if (xfsread(ino, ep + j, sizeof(ep[0]))) return; + if (ep[j].p_type == PT_LOAD) + j++; } - if (xfsread(ino, &eh, sizeof(eh))) + for (i = 0; i < 2; i++) { + p = (caddr_t)ep[i].p_paddr; + fs_off = ep[i].p_offset; + if (xfsread(ino, p, ep[i].p_filesz)) return; - if (!IS_ELF(eh)) { - printf("Invalid %s\n", "format"); + } + p += roundup2(ep[1].p_memsz, PAGE_SIZE); +#if 0 + bootinfo.bi_symtab = VTOP(p); + if (hdr.eh.e_shnum == hdr.eh.e_shstrndx + 3) { + fs_off = hdr.eh.e_shoff + sizeof(es[0]) * + (hdr.eh.e_shstrndx + 1); + if (xfsread(ino, &es, sizeof(es))) return; + for (i = 0; i < 2; i++) { + *(Elf32_Word *)p = es[i].sh_size; + p += sizeof(es[i].sh_size); + fs_off = es[i].sh_offset; + if (xfsread(ino, p, es[i].sh_size)) + return; + p += es[i].sh_size; + } } - fs_off = eh.e_phoff; - for (j = i = 0; i < eh.e_phnum && j < 2; i++) { - if (xfsread(ino, ep + j, sizeof(ep[0]))) - return; - if (ep[j].p_type == PT_LOAD) - j++; - } - for (i = 0; i < 2; i++) { - p = (caddr_t)ep[i].p_paddr; - fs_off = ep[i].p_offset; -#ifdef FIXUP_BOOT_DRV - if (staddr == (caddr_t)0xffffffff) - staddr = p; - klen += ep[i].p_filesz; +#endif + addr = hdr.eh.e_entry; +#if 0 + bootinfo.bi_esymtab = VTOP(p); #endif - if (xfsread(ino, p, ep[i].p_filesz)) - return; - } - addr = eh.e_entry; -#ifdef FIXUP_BOOT_DRV - fixup_boot_drv(staddr, klen, bootslice, bootpart); + } else { + printf("Invalid %s\n", "format"); + return; + } + +#if 0 + bootinfo.bi_kernelname = VTOP(kname); + bootinfo.bi_bios_dev = dsk.drive; + __exec((caddr_t)addr, RB_BOOTINFO | (opts & RBX_MASK), + MAKEBOOTDEV(dev_maj[dsk.type], dsk.slice, dsk.unit, dsk.part), + 0, 0, 0, VTOP(&bootinfo)); #endif - ((void(*)(int, int, int, int))addr)(opts & RBX_MASK, board_id, 0, 0); + ((void(*)(int, int, int, int))addr)(opts & RBX_MASK, /* board_id */ 0, 0, + 0); } static int parse() { - char *arg = cmd; - char *ep, *p; - int c, i; + char *arg = cmd; + char *ep, *p, *q; +#if 0 + const char *cp; +#endif + unsigned int drv; +#if 0 + int c, i, j; +#else + int c, i; +#endif - while ((c = *arg++)) { - if (c == ' ' || c == '\t' || c == '\n') - continue; - for (p = arg; *p && *p != '\n' && *p != ' ' && *p != '\t'; p++); - ep = p; - if (*p) - *p++ = 0; - if (c == '-') { - while ((c = *arg++)) { - for (i = 0; c != optstr[i]; i++) - if (i == NOPT - 1) - return -1; - opts ^= OPT_SET(flags[i]); - } - } else { - arg--; - if ((i = ep - arg)) { - if ((size_t)i >= sizeof(kname)) - return -1; - memcpy(kname, arg, i + 1); - } + while ((c = *arg++)) { + if (c == ' ' || c == '\t' || c == '\n') + continue; + for (p = arg; *p && *p != '\n' && *p != ' ' && *p != '\t'; p++); + ep = p; + if (*p) + *p++ = 0; + if (c == '-') { + while ((c = *arg++)) { +#if 0 + if (c == 'P') { + if (*(uint8_t *)PTOV(0x496) & 0x10) { + cp = "yes"; + } else { + opts |= OPT_SET(RBX_DUAL) | OPT_SET(RBX_SERIAL); + cp = "no"; + } + printf("Keyboard: %s\n", cp); + continue; + } else if (c == 'S') { + j = 0; + while ((unsigned int)(i = *arg++ - '0') <= 9) + j = j * 10 + i; + if (j > 0 && i == -'0') { + comspeed = j; + break; + } + /* Fall through to error below ('S' not in optstr[]). */ + } +#endif + for (i = 0; c != optstr[i]; i++) + if (i == NOPT - 1) + return -1; + opts ^= OPT_SET(flags[i]); + } + ioctrl = OPT_CHECK(RBX_DUAL) ? (IO_SERIAL|IO_KEYBOARD) : + OPT_CHECK(RBX_SERIAL) ? IO_SERIAL : IO_KEYBOARD; +#if 0 + if (ioctrl & IO_SERIAL) { + if (sio_init(115200 / comspeed) != 0) + ioctrl &= ~IO_SERIAL; + } +#endif + } else { + for (q = arg--; *q && *q != '('; q++); + if (*q) { + drv = -1; + if (arg[1] == ':') { + drv = *arg - '0'; + if (drv > 9) + return (-1); + arg += 2; + } + if (q - arg != 2) + return -1; + for (i = 0; arg[0] != dev_nm[i][0] || + arg[1] != dev_nm[i][1]; i++) + if (i == NDEV - 1) + return -1; + dsk.type = i; + arg += 3; + dsk.unit = *arg - '0'; + if (arg[1] != ',' || dsk.unit > 9) + return -1; + arg += 2; + dsk.slice = WHOLE_DISK_SLICE; + if (arg[1] == ',') { + dsk.slice = *arg - '0' + 1; + if (dsk.slice > NDOSPART + 1) + return -1; + arg += 2; } - arg = p; + if (arg[1] != ')') + return -1; + dsk.part = *arg - 'a'; + if (dsk.part > 7) + return (-1); + arg += 2; + if (drv == -1) + drv = dsk.unit; + dsk.drive = (dsk.type <= TYPE_MAXHARD + ? DRV_HARD : 0) + drv; + dsk_meta = 0; + } + if ((i = ep - arg)) { + if ((size_t)i >= sizeof(knamebuf)) + return -1; + memcpy(knamebuf, arg, i + 1); + kname = knamebuf; + } } - return 0; + arg = p; + } + return 0; } static int dskread(void *buf, unsigned lba, unsigned nblk) { -#if 0 - struct dos_partition *dp; - struct disklabel *d; - char *sec; - int i; + struct dos_partition *dp; + struct disklabel *d; + char *sec; + unsigned i; + uint8_t sl; - if (!dsk_meta) { - sec = dmadat->secbuf; - dsk_start = 0; - if (drvread(sec, DOSBBSECTOR, 1)) - return -1; - dp = (void *)(sec + DOSPARTOFF); - for (i = 0; i < NDOSPART; i++) { - if (dp[i].dp_typ == DOSPTYP_386BSD) - break; + if (!dsk_meta) { + sec = dmadat->secbuf; + dsk.start = 0; + if (drvread(sec, DOSBBSECTOR, 1)) + return -1; + dp = (void *)(sec + DOSPARTOFF); + sl = dsk.slice; + if (sl < BASE_SLICE) { + for (i = 0; i < NDOSPART; i++) + if (dp[i].dp_typ == DOSPTYP_386BSD && + (dp[i].dp_flag & 0x80 || sl < BASE_SLICE)) { + sl = BASE_SLICE + i; + if (dp[i].dp_flag & 0x80 || + dsk.slice == COMPATIBILITY_SLICE) + break; } - if (i == NDOSPART) - return -1; - /* - * Although dp_start is aligned within the disk - * partition structure, DOSPARTOFF is 446, which is - * only word (2) aligned, not longword (4) aligned. - * Cope by using memcpy to fetch the start of this - * partition. - */ - memcpy(&dsk_start, &dp[1].dp_start, 4); - if (drvread(sec, dsk_start + LABELSECTOR, 1)) - return -1; - d = (void *)(sec + LABELOFFSET); - if (d->d_magic != DISKMAGIC || d->d_magic2 != DISKMAGIC) { - printf("Invalid %s\n", "label"); - return -1; - } - if (!d->d_partitions[0].p_size) { - printf("Invalid %s\n", "partition"); - return -1; - } - dsk_start += d->d_partitions[0].p_offset; - dsk_start -= d->d_partitions[RAW_PART].p_offset; - dsk_meta++; + if (dsk.slice == WHOLE_DISK_SLICE) + dsk.slice = sl; + } + if (sl != WHOLE_DISK_SLICE) { + if (sl != COMPATIBILITY_SLICE) + dp += sl - BASE_SLICE; + if (dp->dp_typ != DOSPTYP_386BSD) { + printf("Invalid %s\n", "slice"); + return -1; + } + dsk.start = le32toh(dp->dp_start); + } + if (drvread(sec, dsk.start + LABELSECTOR, 1)) + return -1; + d = (void *)(sec + LABELOFFSET); + if (le32toh(d->d_magic) != DISKMAGIC || + le32toh(d->d_magic2) != DISKMAGIC) { + if (dsk.part != RAW_PART) { + printf("Invalid %s\n", "label"); + return -1; + } + } else { + if (!dsk.init) { + if (le16toh(d->d_type) == DTYPE_SCSI) + dsk.type = TYPE_DA; + dsk.init++; + } + if (dsk.part >= le16toh(d->d_npartitions) || + !(le32toh(d->d_partitions[dsk.part].p_size))) { + printf("Invalid %s\n", "partition"); + return -1; + } + dsk.start += le32toh(d->d_partitions[dsk.part].p_offset); + dsk.start -= le32toh(d->d_partitions[RAW_PART].p_offset); } -#endif - return drvread(buf, dsk_start + lba, nblk); + } + return drvread(buf, dsk.start + lba, nblk); } -#ifdef FIXUP_BOOT_DRV -/* - * fixup_boot_drv() will try to find the ROOTDEVNAME spec in the kernel - * and change it to what was specified on the comandline or /boot.conf - * file or to what was encountered on the disk. It will try to handle 3 - * different disk layouts, raw (dangerously dedicated), slice only and - * slice + partition. It will look for the following strings in the - * kernel, but if it is one of the first three, the string in the kernel - * must use the correct form to match the actual disk layout: - * - ufs:ad0a - * - ufs:ad0s1 - * - ufs:ad0s1a - * - ufs:ROOTDEVNAME - * In the case of the first three strings, only the "a" at the end and - * the "1" after the "s" will be modified, if they exist. The string - * length will not be changed. In the case of the last string, the - * whole string will be built up and nul, '\0' terminated. - */ static void -fixup_boot_drv(caddr_t addr, int klen, int bs, int bp) +printf(const char *fmt,...) { - const u_int8_t op[] = "ufs:ROOTDEVNAME"; - const u_int8_t op2[] = "ufs:ad0"; - u_int8_t *p, *ps; + va_list ap; + static char buf[10]; + char *s; + unsigned u; + int c; - DPRINTF("fixup_boot_drv: 0x%x, %d, slice %d, partition %d\n", - (int)addr, klen, bs, bp); - if (bs > 4) - return; - if (bp > 7) - return; - ps = memmem(addr, klen, op, sizeof(op)); - if (ps != NULL) { - p = ps + 4; /* past ufs: */ - DPRINTF("Found it at 0x%x\n", (int)ps); - p[0] = 'a'; p[1] = 'd'; p[2] = '0'; /* ad0 */ - p += 3; - if (bs > 0) { - /* append slice */ - *p++ = 's'; - *p++ = bs + '0'; - } - if (disk_layout != DL_SLICE) { - /* append partition */ - *p++ = bp + 'a'; - } - *p = '\0'; - } else { - ps = memmem(addr, klen, op2, sizeof(op2) - 1); - if (ps != NULL) { - p = ps + sizeof(op2) - 1; - DPRINTF("Found it at 0x%x\n", (int)ps); - if (*p == 's') { - /* fix slice */ - p++; - *p++ = bs + '0'; - } - if (*p == 'a') - *p = bp + 'a'; - } + va_start(ap, fmt); + while ((c = *fmt++)) { + if (c == '%') { + c = *fmt++; + switch (c) { + case 'c': + putchar(va_arg(ap, int)); + continue; + case 's': + for (s = va_arg(ap, char *); *s; s++) + putchar(*s); + continue; + case 'u': + u = va_arg(ap, unsigned); + s = buf; + do + *s++ = '0' + u % 10U; + while (u /= 10U); + while (--s >= buf) + putchar(*s); + continue; + } } - if (ps == NULL) { - printf("Could not locate \"%s\" to fix kernel boot device, " - "check ROOTDEVNAME is set\n", op); - return; - } - DPRINTF("Changed boot device to %s\n", ps); + putchar(c); + } + va_end(ap); + return; +} + +static void +putchar(int c) +{ + if (c == '\n') + xputc('\r'); + xputc(c); +} + +#if 0 +static int +drvread(void *buf, unsigned lba, unsigned nblk) +{ + static unsigned c = 0x2d5c7c2f; + + if (!OPT_CHECK(RBX_QUIET)) + printf("%c\b", c = c << 8 | c >> 24); + v86.ctl = V86_ADDR | V86_CALLF | V86_FLAGS; + v86.addr = XREADORG; /* call to xread in boot1 */ + v86.es = VTOPSEG(buf); + v86.eax = lba; + v86.ebx = VTOPOFF(buf); + v86.ecx = lba >> 16; + v86.edx = nblk << 8 | dsk.drive; + v86int(); + v86.ctl = V86_FLAGS; + if (V86_CY(v86.efl)) { + printf("error %u lba %u\n", v86.eax >> 8 & 0xff, lba); + return -1; + } + return 0; +} + +static int +keyhit(unsigned ticks) +{ + uint32_t t0, t1; + + if (OPT_CHECK(RBX_NOINTR)) + return 0; + t0 = 0; + for (;;) { + if (xgetc(1)) + return 1; + t1 = *(uint32_t *)PTOV(0x46c); + if (!t0) + t0 = t1; + if ((uint32_t)(t1 - t0) >= ticks) + return 0; + } +} +#endif + +static int +xputc(int c) +{ + if (ioctrl & IO_KEYBOARD) + putc(c); +#if 0 + if (ioctrl & IO_SERIAL) + sio_putc(c); +#endif + return c; } + +static int +xgetc(int fn) +{ + if (OPT_CHECK(RBX_NOINTR)) + return 0; + for (;;) { + if (ioctrl & IO_KEYBOARD && getc(1)) + return fn ? 1 : getc(0); +#if 0 + if (ioctrl & IO_SERIAL && sio_ischar()) + return fn ? 1 : sio_getc(); #endif + if (fn) + return 0; + } +} ==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/cons.h#2 (text+ko) ==== @@ -32,6 +32,7 @@ #define _CONS_H_ int getc(int); >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Tue Mar 26 09:27:14 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id C4562FD8; Tue, 26 Mar 2013 09:27:13 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 85279FD6 for ; Tue, 26 Mar 2013 09:27:13 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:1900:2254:2068::682:0]) by mx1.freebsd.org (Postfix) with ESMTP id 75030AAC for ; Tue, 26 Mar 2013 09:27:13 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.6/8.14.6) with ESMTP id r2Q9RDU8028365 for ; Tue, 26 Mar 2013 09:27:13 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.6/8.14.6/Submit) id r2Q9RDhD028362 for perforce@freebsd.org; Tue, 26 Mar 2013 09:27:13 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Tue, 26 Mar 2013 09:27:13 GMT Message-Id: <201303260927.r2Q9RDhD028362@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 227084 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Mar 2013 09:27:14 -0000 http://p4web.freebsd.org/@@227084?ac=10 Change 227084 by rwatson@rwatson_zenith_cl_cam_ac_uk on 2013/03/26 09:26:57 Fix typo in linker-script comment. Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/linker.cfg#2 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/linker.cfg#2 (text+ko) ==== @@ -51,7 +51,7 @@ __cheri_flash_base__ + __cheri_flash_bootfs_base__; /* - * Locate where boot2 will self-relocate to as its first step. + * Location where boot2 will self-relocate to as its first step. */ __boot2_base__ = 0x4000; __boot2_base_vaddr__ = __mips64_xkphys_cached__ + __boot2_base__; From owner-p4-projects@FreeBSD.ORG Tue Mar 26 16:24:49 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 8870AB22; Tue, 26 Mar 2013 16:24:49 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 446F7B20 for ; Tue, 26 Mar 2013 16:24:49 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:1900:2254:2068::682:0]) by mx1.freebsd.org (Postfix) with ESMTP id 33EAF993 for ; Tue, 26 Mar 2013 16:24:49 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.6/8.14.6) with ESMTP id r2QGOm7Q072860 for ; Tue, 26 Mar 2013 16:24:48 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.6/8.14.6/Submit) id r2QGOm6c072857 for perforce@freebsd.org; Tue, 26 Mar 2013 16:24:48 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Tue, 26 Mar 2013 16:24:48 GMT Message-Id: <201303261624.r2QGOm6c072857@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 227087 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 Mar 2013 16:24:49 -0000 http://p4web.freebsd.org/@@227087?ac=10 Change 227087 by rwatson@rwatson_zenith_cl_cam_ac_uk on 2013/03/26 16:24:29 FreeBSD/mips rather than FreeBSD/x86 boot2. For now, don't do partition tables -- we just stick a UFS file system straight in flash or on the SD card. We may want them back in the future, however. Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/boot2.c#5 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/boot2.c#5 (text+ko) ==== @@ -300,7 +300,7 @@ for (;;) { if (!autoboot || !OPT_CHECK(RBX_QUIET)) - printf("\nFreeBSD/x86 boot\n" + printf("\nFreeBSD/mips boot\n" "Default: %u:%s(%u,%c)%s\n" "boot: ", dsk.drive & DRV_MASK, dev_nm[dsk.type], dsk.unit, @@ -516,6 +516,11 @@ static int dskread(void *buf, unsigned lba, unsigned nblk) { +#if 0 + /* + * XXXRW: For now, assume no partition table around the file system; it's + * just in raw flash. + */ struct dos_partition *dp; struct disklabel *d; char *sec; @@ -575,6 +580,9 @@ } } return drvread(buf, dsk.start + lba, nblk); +#else + return drvread(buf, lba, nblk); +#endif } static void From owner-p4-projects@FreeBSD.ORG Wed Mar 27 13:46:14 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 11922529; Wed, 27 Mar 2013 13:46:14 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id C5E92527 for ; Wed, 27 Mar 2013 13:46:13 +0000 (UTC) (envelope-from prw35@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:1900:2254:2068::682:0]) by mx1.freebsd.org (Postfix) with ESMTP id B773CE4E for ; Wed, 27 Mar 2013 13:46:13 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.6/8.14.6) with ESMTP id r2RDkDYP011998 for ; Wed, 27 Mar 2013 13:46:13 GMT (envelope-from prw35@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.6/8.14.6/Submit) id r2RDkDrt011995 for perforce@freebsd.org; Wed, 27 Mar 2013 13:46:13 GMT (envelope-from prw35@FreeBSD.org) Date: Wed, 27 Mar 2013 13:46:13 GMT Message-Id: <201303271346.r2RDkDrt011995@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to prw35@FreeBSD.org using -f From: Philip Withnall Subject: PERFORCE change 227154 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 27 Mar 2013 13:46:14 -0000 http://p4web.freebsd.org/@@227154?ac=10 Change 227154 by prw35@pwithnall_zenith on 2013/03/27 13:45:42 Add the missing size_classes.sh to jemalloc As stated in the comment at the top of size_classes.h, this is needed to generate that file. It appears to be present in other versions of jemalloc[1] and is listed in FreeBSD's Xlist file, but never seems to have been committed to SVN/P4. [1]: e.g.: http://dxr.mozilla.org/mozilla-central/memory/jemalloc/src/include/jemalloc/internal/size_classes.sh Affected files ... .. //depot/projects/ctsrd/cheribsd/src/contrib/jemalloc/include/jemalloc/internal/size_classes.sh#1 add Differences ... From owner-p4-projects@FreeBSD.ORG Wed Mar 27 16:05:47 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id A39715D5; Wed, 27 Mar 2013 16:05:47 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 3EF045D3 for ; Wed, 27 Mar 2013 16:05:47 +0000 (UTC) (envelope-from prw35@FreeBSD.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:1900:2254:2068::682:0]) by mx1.freebsd.org (Postfix) with ESMTP id 168A5A11 for ; Wed, 27 Mar 2013 16:05:47 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.6/8.14.6) with ESMTP id r2RG5kBY028082 for ; Wed, 27 Mar 2013 16:05:46 GMT (envelope-from prw35@FreeBSD.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.6/8.14.6/Submit) id r2RG5k2N028079 for perforce@freebsd.org; Wed, 27 Mar 2013 16:05:46 GMT (envelope-from prw35@FreeBSD.org) Date: Wed, 27 Mar 2013 16:05:46 GMT Message-Id: <201303271605.r2RG5k2N028079@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to prw35@FreeBSD.org using -f From: Philip Withnall Subject: PERFORCE change 227158 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 27 Mar 2013 16:05:47 -0000 http://p4web.freebsd.org/@@227158?ac=10 Change 227158 by prw35@pwithnall_zenith on 2013/03/27 16:04:56 Revert @227154: Delete size_classes.sh I missed the part of the build system which documented how several files from upstream jemalloc are intentionally not included in the FreeBSD tree since they're not normally needed when building. See: FREEBSD-upgrade. Affected files ... .. //depot/projects/ctsrd/cheribsd/src/contrib/jemalloc/include/jemalloc/internal/size_classes.sh#2 delete Differences ... From owner-p4-projects@FreeBSD.ORG Wed Mar 27 20:30:35 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9267ECC1; Wed, 27 Mar 2013 20:30:35 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 23819CBF for ; Wed, 27 Mar 2013 20:30:35 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:1900:2254:2068::682:0]) by mx1.freebsd.org (Postfix) with ESMTP id 1398FE47 for ; Wed, 27 Mar 2013 20:30:35 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.6/8.14.6) with ESMTP id r2RKUYQw057888 for ; Wed, 27 Mar 2013 20:30:34 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.6/8.14.6/Submit) id r2RKUYgv057885 for perforce@freebsd.org; Wed, 27 Mar 2013 20:30:34 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Wed, 27 Mar 2013 20:30:34 GMT Message-Id: <201303272030.r2RKUYgv057885@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 227162 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 27 Mar 2013 20:30:35 -0000 http://p4web.freebsd.org/@@227162?ac=10 Change 227162 by rwatson@rwatson_zenith_cl_cam_ac_uk on 2013/03/27 20:29:53 Make the top-end of the BERI-specific code in boot2 look more like the top-end of i386-specific code, so that we get more compatible semantics for serial input. This appears to work and I can now list (and possibly load) kernels driven by keyboard input in simulation. Next stop, hardware. Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/altera_jtag_uart.c#3 edit .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/boot2.c#6 edit .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/cons.h#3 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/altera_jtag_uart.c#3 (text+ko) ==== @@ -164,23 +164,21 @@ { register_t stoptime; - stoptime = cp0_count_get() + seconds * 100000000; - while (cp0_count_get() < stoptime) { + stoptime = cp0_count_get() + seconds * 100000000; /* 100 MHz. */ + do { if (uart_readable()) return (1); - } + } while (cp0_count_get() < stoptime); return (0); } int -getc(int seconds) +getc(void) { - if (keyhit(seconds)) { - buffer_valid = 0; - return (buffer_data); - } - return (0); + while (!(uart_readable())); + buffer_valid = 0; + return (buffer_data); } void ==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/boot2.c#6 (text+ko) ==== @@ -62,7 +62,7 @@ #define IO_KEYBOARD 1 #define IO_SERIAL 2 -#define SECOND 18 /* Circa that many ticks in a second. */ +#define SECOND 1 /* Circa that many ticks in a second. */ #define RBX_ASKNAME 0x0 /* -a */ #define RBX_SINGLE 0x1 /* -s */ @@ -170,15 +170,8 @@ static int dskread(void *, unsigned, unsigned); static void printf(const char *,...); static void putchar(int); -#if 0 -static int drvread(void *, unsigned, unsigned); -static int keyhit(unsigned); -#endif static int xputc(int); static int xgetc(int); -#if 0 -static inline int getc(int); -#endif #if 0 void memcpy(void *, const void *, int); @@ -631,51 +624,7 @@ xputc(c); } -#if 0 static int -drvread(void *buf, unsigned lba, unsigned nblk) -{ - static unsigned c = 0x2d5c7c2f; - - if (!OPT_CHECK(RBX_QUIET)) - printf("%c\b", c = c << 8 | c >> 24); - v86.ctl = V86_ADDR | V86_CALLF | V86_FLAGS; - v86.addr = XREADORG; /* call to xread in boot1 */ - v86.es = VTOPSEG(buf); - v86.eax = lba; - v86.ebx = VTOPOFF(buf); - v86.ecx = lba >> 16; - v86.edx = nblk << 8 | dsk.drive; - v86int(); - v86.ctl = V86_FLAGS; - if (V86_CY(v86.efl)) { - printf("error %u lba %u\n", v86.eax >> 8 & 0xff, lba); - return -1; - } - return 0; -} - -static int -keyhit(unsigned ticks) -{ - uint32_t t0, t1; - - if (OPT_CHECK(RBX_NOINTR)) - return 0; - t0 = 0; - for (;;) { - if (xgetc(1)) - return 1; - t1 = *(uint32_t *)PTOV(0x46c); - if (!t0) - t0 = t1; - if ((uint32_t)(t1 - t0) >= ticks) - return 0; - } -} -#endif - -static int xputc(int c) { if (ioctrl & IO_KEYBOARD) @@ -693,8 +642,8 @@ if (OPT_CHECK(RBX_NOINTR)) return 0; for (;;) { - if (ioctrl & IO_KEYBOARD && getc(1)) - return fn ? 1 : getc(0); + if (ioctrl & IO_KEYBOARD && keyhit(0)) + return fn ? 1 : getc(); #if 0 if (ioctrl & IO_SERIAL && sio_ischar()) return fn ? 1 : sio_getc(); ==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/cons.h#3 (text+ko) ==== @@ -31,7 +31,7 @@ #ifndef _CONS_H_ #define _CONS_H_ -int getc(int); +int getc(void); int keyhit(int); void putc(int); From owner-p4-projects@FreeBSD.ORG Thu Mar 28 11:18:45 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9B334280; Thu, 28 Mar 2013 11:18:45 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 5BC1A27E for ; Thu, 28 Mar 2013 11:18:45 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:1900:2254:2068::682:0]) by mx1.freebsd.org (Postfix) with ESMTP id 4B5EEE5A for ; Thu, 28 Mar 2013 11:18:45 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.6/8.14.6) with ESMTP id r2SBIjlV053989 for ; Thu, 28 Mar 2013 11:18:45 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.6/8.14.6/Submit) id r2SBIiEM053986 for perforce@freebsd.org; Thu, 28 Mar 2013 11:18:44 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Thu, 28 Mar 2013 11:18:44 GMT Message-Id: <201303281118.r2SBIiEM053986@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 227175 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Mar 2013 11:18:45 -0000 http://p4web.freebsd.org/@@227175?ac=10 Change 227175 by rwatson@rwatson_zenith_cl_cam_ac_uk on 2013/03/28 11:17:45 Makefile target for objdump output for boot2, useful when debugging with a simulator. Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/Makefile#4 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/Makefile#4 (text+ko) ==== @@ -35,4 +35,7 @@ boot2.img: boot2 objcopy -S -O binary boot2 boot2.img +boot2.dump: boot2 + objdump -dS boot2 > boot2.dump + .include From owner-p4-projects@FreeBSD.ORG Fri Mar 29 13:07:58 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4AC8E44D; Fri, 29 Mar 2013 13:07:58 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id A83B144B for ; Fri, 29 Mar 2013 13:07:57 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:1900:2254:2068::682:0]) by mx1.freebsd.org (Postfix) with ESMTP id 9799A1E4 for ; Fri, 29 Mar 2013 13:07:57 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.6/8.14.6) with ESMTP id r2TD7vES021849 for ; Fri, 29 Mar 2013 13:07:57 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.6/8.14.6/Submit) id r2TD7vpx021846 for perforce@freebsd.org; Fri, 29 Mar 2013 13:07:57 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Fri, 29 Mar 2013 13:07:57 GMT Message-Id: <201303291307.r2TD7vpx021846@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 227209 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Mar 2013 13:07:58 -0000 http://p4web.freebsd.org/@@227209?ac=10 Change 227209 by rwatson@rwatson_zenith_cl_cam_ac_uk on 2013/03/29 13:07:30 Make sure linker.cfg can be found in different build modes for BERI boot2. Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/Makefile#5 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/Makefile#5 (text+ko) ==== @@ -24,10 +24,10 @@ -fno-pic -mno-abicalls \ -g -LDFLAGS= -nostdlib \ - -static \ - -N \ - -T linker.cfg \ +LDFLAGS= -nostdlib \ + -static \ + -N \ + -T ${.CURDIR}/linker.cfg \ -G0 boot2: linker.cfg From owner-p4-projects@FreeBSD.ORG Fri Mar 29 13:53:49 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D771B648; Fri, 29 Mar 2013 13:53:48 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 9838A646 for ; Fri, 29 Mar 2013 13:53:48 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:1900:2254:2068::682:0]) by mx1.freebsd.org (Postfix) with ESMTP id 6EA806F0 for ; Fri, 29 Mar 2013 13:53:48 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.6/8.14.6) with ESMTP id r2TDrmZv027314 for ; Fri, 29 Mar 2013 13:53:48 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.6/8.14.6/Submit) id r2TDrmoT027311 for perforce@freebsd.org; Fri, 29 Mar 2013 13:53:48 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Fri, 29 Mar 2013 13:53:48 GMT Message-Id: <201303291353.r2TDrmoT027311@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 227213 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Mar 2013 13:53:49 -0000 http://p4web.freebsd.org/@@227213?ac=10 Change 227213 by rwatson@rwatson_zenith_cl_cam_ac_uk on 2013/03/29 13:53:30 Relocate driver-related BERI boot2 source files to a common directory so that they can be reused by the BERI loader. Rename start.s to start.S for consistency (and because the preprocessor may come in handy in the future). Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/Makefile#6 edit .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/altera_jtag_uart.c#4 delete .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/boot2.c#7 edit .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/cons.h#4 delete .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/drv.h#2 delete .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/flash.c#2 delete .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/start.S#1 branch .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/start.s#2 delete .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/common/altera_jtag_uart.c#1 branch .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/common/cons.h#1 branch .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/common/drv.h#1 branch .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/common/flash.c#1 branch Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/Makefile#6 (text+ko) ==== @@ -5,7 +5,7 @@ INSTALLFLAGS= -b FILES= ${PROG} -SRCS= start.s \ +SRCS= start.S \ boot2.c \ altera_jtag_uart.c \ flash.c @@ -30,6 +30,9 @@ -T ${.CURDIR}/linker.cfg \ -G0 +.PATH: ${.CURDIR}/../common +CFLAGS+= -I${.CURDIR}/../common + boot2: linker.cfg boot2.img: boot2 ==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/boot2.c#7 (text+ko) ==== @@ -56,8 +56,8 @@ #include -#include "cons.h" -#include "drv.h" +#include +#include #define IO_KEYBOARD 1 #define IO_SERIAL 2 From owner-p4-projects@FreeBSD.ORG Fri Mar 29 15:34:40 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B1B25899; Fri, 29 Mar 2013 15:34:40 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 71B9F897 for ; Fri, 29 Mar 2013 15:34:40 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:1900:2254:2068::682:0]) by mx1.freebsd.org (Postfix) with ESMTP id 60F1CB47 for ; Fri, 29 Mar 2013 15:34:40 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.6/8.14.6) with ESMTP id r2TFYdNl038423 for ; Fri, 29 Mar 2013 15:34:39 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.6/8.14.6/Submit) id r2TFYdGT038420 for perforce@freebsd.org; Fri, 29 Mar 2013 15:34:39 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Fri, 29 Mar 2013 15:34:39 GMT Message-Id: <201303291534.r2TFYdGT038420@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 227220 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Mar 2013 15:34:40 -0000 http://p4web.freebsd.org/@@227220?ac=10 Change 227220 by rwatson@rwatson_zenith_cl_cam_ac_uk on 2013/03/29 15:33:53 Define cp0_timer_get() as a static inline in mips.h, to be used across BERI boot2 and loader. Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/boot2/mips.h#2 delete .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/common/altera_jtag_uart.c#2 edit .. //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/common/mips.h#1 add Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/boot/mips/beri/common/altera_jtag_uart.c#2 (text+ko) ==== @@ -150,15 +150,6 @@ return (0); } -static inline register_t -cp0_count_get(void) -{ - register_t count; - - __asm__ __volatile__ ("dmfc0 %0, $9" : "=r" (count)); - return (count); -} - int keyhit(int seconds) { From owner-p4-projects@FreeBSD.ORG Fri Mar 29 16:40:54 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id EAC2A585; Fri, 29 Mar 2013 16:40:53 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id A7FA9583 for ; Fri, 29 Mar 2013 16:40:53 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:1900:2254:2068::682:0]) by mx1.freebsd.org (Postfix) with ESMTP id 9671BF05 for ; Fri, 29 Mar 2013 16:40:53 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.6/8.14.6) with ESMTP id r2TGerQW045591 for ; Fri, 29 Mar 2013 16:40:53 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.6/8.14.6/Submit) id r2TGerh9045588 for perforce@freebsd.org; Fri, 29 Mar 2013 16:40:53 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Fri, 29 Mar 2013 16:40:53 GMT Message-Id: <201303291640.r2TGerh9045588@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 227226 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Mar 2013 16:40:54 -0000 http://p4web.freebsd.org/@@227226?ac=10 Change 227226 by rwatson@rwatson_zenith_cl_cam_ac_uk on 2013/03/29 16:40:14 Modify libstand's setjmp/longjmp to use wrapper macros so that they are 64-bit MIPS-happy, rather than just 32-bit MIPS happy. For now, and just in the FreeBSD/beri branch, ifdef out FP register manipulation, as we don't have a floating-point coprocessor. Affected files ... .. //depot/projects/ctsrd/beribsd/src/lib/libstand/mips/_setjmp.S#3 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/lib/libstand/mips/_setjmp.S#3 (text+ko) ==== @@ -60,32 +60,35 @@ LEAF(_setjmp) .set noreorder li v0, 0xACEDBADE # sigcontext magic number - sw ra, (2 * 4)(a0) # sc_pc = return address - sw v0, (3 * 4)(a0) # saved in sc_regs[0] - sw s0, ((S0 + 3) * 4)(a0) - sw s1, ((S1 + 3) * 4)(a0) - sw s2, ((S2 + 3) * 4)(a0) - sw s3, ((S3 + 3) * 4)(a0) - sw s4, ((S4 + 3) * 4)(a0) - sw s5, ((S5 + 3) * 4)(a0) - sw s6, ((S6 + 3) * 4)(a0) - sw s7, ((S7 + 3) * 4)(a0) - sw sp, ((SP + 3) * 4)(a0) - sw s8, ((S8 + 3) * 4)(a0) + REG_S ra, (2 * SZREG)(a0) # sc_pc = return address + REG_S v0, (3 * SZREG)(a0) # saved in sc_regs[0] + REG_S s0, ((S0 + 3) * SZREG)(a0) + REG_S s1, ((S1 + 3) * SZREG)(a0) + REG_S s2, ((S2 + 3) * SZREG)(a0) + REG_S s3, ((S3 + 3) * SZREG)(a0) + REG_S s4, ((S4 + 3) * SZREG)(a0) + REG_S s5, ((S5 + 3) * SZREG)(a0) + REG_S s6, ((S6 + 3) * SZREG)(a0) + REG_S s7, ((S7 + 3) * SZREG)(a0) + REG_S sp, ((SP + 3) * SZREG)(a0) + REG_S s8, ((S8 + 3) * SZREG)(a0) +/* XXXRW: Don't try to save/restore FP in libstand. */ +#if 0 cfc1 v0, $31 # too bad cant check if FP used - swc1 $f20, ((20 + 38) * 4)(a0) - swc1 $f21, ((21 + 38) * 4)(a0) - swc1 $f22, ((22 + 38) * 4)(a0) - swc1 $f23, ((23 + 38) * 4)(a0) - swc1 $f24, ((24 + 38) * 4)(a0) - swc1 $f25, ((25 + 38) * 4)(a0) - swc1 $f26, ((26 + 38) * 4)(a0) - swc1 $f27, ((27 + 38) * 4)(a0) - swc1 $f28, ((28 + 38) * 4)(a0) - swc1 $f29, ((29 + 38) * 4)(a0) - swc1 $f30, ((30 + 38) * 4)(a0) - swc1 $f31, ((31 + 38) * 4)(a0) - sw v0, ((32 + 38) * 4)(a0) + FP_S $f20, ((20 + 38) * SZREG)(a0) + FP_S $f21, ((21 + 38) * SZREG)(a0) + FP_S $f22, ((22 + 38) * SZREG)(a0) + FP_S $f23, ((23 + 38) * SZREG)(a0) + FP_S $f24, ((24 + 38) * SZREG)(a0) + FP_S $f25, ((25 + 38) * SZREG)(a0) + FP_S $f26, ((26 + 38) * SZREG)(a0) + FP_S $f27, ((27 + 38) * SZREG)(a0) + FP_S $f28, ((28 + 38) * SZREG)(a0) + FP_S $f29, ((29 + 38) * SZREG)(a0) + FP_S $f30, ((30 + 38) * SZREG)(a0) + FP_S $f31, ((31 + 38) * SZREG)(a0) +#endif + REG_S v0, ((32 + 38) * SZREG)(a0) j ra move v0, zero END(_setjmp) @@ -96,38 +99,41 @@ .cprestore 16 #endif .set noreorder - lw v0, (3 * 4)(a0) # get magic number - lw ra, (2 * 4)(a0) + REG_L v0, (3 * SZREG)(a0) # get magic number + REG_L ra, (2 * SZREG)(a0) bne v0, 0xACEDBADE, botch # jump if error addu sp, sp, 32 # does not matter, sanity - lw s0, ((S0 + 3) * 4)(a0) - lw s1, ((S1 + 3) * 4)(a0) - lw s2, ((S2 + 3) * 4)(a0) - lw s3, ((S3 + 3) * 4)(a0) - lw s4, ((S4 + 3) * 4)(a0) - lw s5, ((S5 + 3) * 4)(a0) - lw s6, ((S6 + 3) * 4)(a0) - lw s7, ((S7 + 3) * 4)(a0) - lw v0, ((32 + 38) * 4)(a0) # get fpu status - lw sp, ((SP + 3) * 4)(a0) - lw s8, ((S8 + 3) * 4)(a0) + REG_L s0, ((S0 + 3) * SZREG)(a0) + REG_L s1, ((S1 + 3) * SZREG)(a0) + REG_L s2, ((S2 + 3) * SZREG)(a0) + REG_L s3, ((S3 + 3) * SZREG)(a0) + REG_L s4, ((S4 + 3) * SZREG)(a0) + REG_L s5, ((S5 + 3) * SZREG)(a0) + REG_L s6, ((S6 + 3) * SZREG)(a0) + REG_L s7, ((S7 + 3) * SZREG)(a0) + REG_L v0, ((32 + 38) * SZREG)(a0) # get fpu status + REG_L sp, ((SP + 3) * SZREG)(a0) + REG_L s8, ((S8 + 3) * SZREG)(a0) +/* XXXRW: Don't try to save/restore FP in libstand. */ +#if 0 /* Octeon does not have an FPU */ #if !defined(_MIPS_ARCH_OCTEON) ctc1 v0, $31 - lwc1 $f20, ((20 + 38) * 4)(a0) - lwc1 $f21, ((21 + 38) * 4)(a0) - lwc1 $f22, ((22 + 38) * 4)(a0) - lwc1 $f23, ((23 + 38) * 4)(a0) - lwc1 $f24, ((24 + 38) * 4)(a0) - lwc1 $f25, ((25 + 38) * 4)(a0) - lwc1 $f26, ((26 + 38) * 4)(a0) - lwc1 $f27, ((27 + 38) * 4)(a0) - lwc1 $f28, ((28 + 38) * 4)(a0) - lwc1 $f29, ((29 + 38) * 4)(a0) - lwc1 $f30, ((30 + 38) * 4)(a0) - lwc1 $f31, ((31 + 38) * 4)(a0) + FP_L $f20, ((20 + 38) * SZREG)(a0) + FP_L $f21, ((21 + 38) * SZREG)(a0) + FP_L $f22, ((22 + 38) * SZREG)(a0) + FP_L $f23, ((23 + 38) * SZREG)(a0) + FP_L $f24, ((24 + 38) * SZREG)(a0) + FP_L $f25, ((25 + 38) * SZREG)(a0) + FP_L $f26, ((26 + 38) * SZREG)(a0) + FP_L $f27, ((27 + 38) * SZREG)(a0) + FP_L $f28, ((28 + 38) * SZREG)(a0) + FP_L $f29, ((29 + 38) * SZREG)(a0) + FP_L $f30, ((30 + 38) * SZREG)(a0) + FP_L $f31, ((31 + 38) * SZREG)(a0) #endif /* _MIPS_ARCH_OCTEON */ +#endif j ra move v0, a1 From owner-p4-projects@FreeBSD.ORG Sat Mar 30 20:59:51 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 080F1689; Sat, 30 Mar 2013 20:59:51 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 83558687 for ; Sat, 30 Mar 2013 20:59:50 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:1900:2254:2068::682:0]) by mx1.freebsd.org (Postfix) with ESMTP id 66254C29 for ; Sat, 30 Mar 2013 20:59:50 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.6/8.14.6) with ESMTP id r2UKxni9026036 for ; Sat, 30 Mar 2013 20:59:49 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.6/8.14.6/Submit) id r2UKxnBU026033 for perforce@freebsd.org; Sat, 30 Mar 2013 20:59:49 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Sat, 30 Mar 2013 20:59:49 GMT Message-Id: <201303302059.r2UKxnBU026033@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 227250 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 30 Mar 2013 20:59:51 -0000 http://p4web.freebsd.org/@@227250?ac=10 Change 227250 by rwatson@rwatson_zenith_cl_cam_ac_uk on 2013/03/30 20:59:20 Cleanup of MIPS bootinfo.h -- make it 64-bit friendly, remove unused definitions, especially those possible copied and pasted from the FreeBSD 6.2 x86 interface to loader (and now long-since garbage-collected). Add fields such as a DTB pointer for use with FDT, boot options, and a physical memory size field to be used in systems without FDT. Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/mips/include/bootinfo.h#3 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/mips/include/bootinfo.h#3 (text+ko) ==== @@ -1,4 +1,5 @@ /*- + * Copyright (c) 2013 Robert N. M. Watson * Copyright (C) 1994 by Rodney W. Grimes, Milwaukie, Oregon 97222 * All rights reserved. * @@ -36,33 +37,15 @@ #define _MACHINE_BOOTINFO_H_ /* Only change the version number if you break compatibility. */ -#define BOOTINFO_VERSION 1 +#define BOOTINFO_VERSION 2 -#define N_BIOS_GEOM 8 - #define MIPS_BOOTINFO_MAGIC 0xCDEACDEA -/* Extended OLV bootinfo struct. The data area includes a list of named - OIDs and associated data values. The format is: - - NUL-terminated dotted-string name - 2 byte length, in big-endian order - LENGTH bytes of data - [...] - - The two magic fields are used to guard against other bootloaders that - may place other sorts of data here. */ - -struct bootinfo_ext { -#define BOOTINFO_EXT_MAGIC1 0x55aa00ff - unsigned int magic1; - unsigned char *data; - unsigned int size; -#define BOOTINFO_EXT_MAGIC2 0x32719187 - unsigned int magic2; -}; - -#define BOOTINFO_EXT_MAX_SIZE 16384 +#if defined(__mips_n32) || defined(__mips_n64) +typedef uint64_t bi_ptr_t; +#else +typedef uint32_t bi_ptr_t; +#endif /* * A zero bootinfo field often means that there is no info available. @@ -70,73 +53,28 @@ * normal value. */ struct bootinfo { - u_int32_t bi_version; - u_int32_t bi_kernelname; /* represents a char * */ - u_int32_t bi_nfs_diskless; /* struct nfs_diskless * */ - /* End of fields that are always present. */ -#define bi_endcommon bi_n_bios_used - u_int32_t bi_n_bios_used; - u_int32_t bi_bios_geom[N_BIOS_GEOM]; - u_int32_t bi_size; - u_int8_t bi_memsizes_valid; - u_int8_t bi_bios_dev; /* bootdev BIOS unit number */ - u_int8_t bi_pad[2]; - u_int32_t bi_basemem; - u_int32_t bi_extmem; - u_int32_t bi_symtab; /* struct symtab * */ - u_int32_t bi_esymtab; /* struct symtab * */ - /* Items below only from advanced bootloader */ - u_int32_t bi_kernend; /* end of kernel space */ - u_int32_t bi_envp; /* environment */ - u_int32_t bi_modulep; /* preloaded modules */ + /* bootinfo meta-data. */ + uint32_t bi_version; + uint32_t bi_size; + uint32_t bi_bootopts; + uint32_t _bi_pad0; + + /* bootinfo contents. */ + bi_ptr_t bi_kernelname; /* Pointer to name. */ + bi_ptr_t bi_nfs_diskless;/* Pointer to NFS data. */ + bi_ptr_t bi_dtb; /* Pointer to dtb. */ + bi_ptr_t bi_physmem; /* Physical memory size in bytes. */ + + /* Kernel bits. */ + bi_ptr_t bi_symtab; /* Symbol table... */ + bi_ptr_t bi_esymtab; /* ... */ + bi_ptr_t bi_kernend; /* End of kernel address space. */ + bi_ptr_t bi_envp; /* Kernel environment. */ + bi_ptr_t bi_modulep; /* Preloaded modules. */ }; #ifdef _KERNEL extern struct bootinfo bootinfo; #endif -/* - * Constants for converting boot-style device number to type, - * adaptor (uba, mba, etc), unit number and partition number. - * Type (== major device number) is in the low byte - * for backward compatibility. Except for that of the "magic - * number", each mask applies to the shifted value. - * Format: - * (4) (4) (4) (4) (8) (8) - * -------------------------------- - * |MA | AD| CT| UN| PART | TYPE | - * -------------------------------- - */ -#define B_ADAPTORSHIFT 24 -#define B_ADAPTORMASK 0x0f -#define B_ADAPTOR(val) (((val) >> B_ADAPTORSHIFT) & B_ADAPTORMASK) -#define B_CONTROLLERSHIFT 20 -#define B_CONTROLLERMASK 0xf -#define B_CONTROLLER(val) (((val)>>B_CONTROLLERSHIFT) & B_CONTROLLERMASK) -#define B_SLICESHIFT 20 -#define B_SLICEMASK 0xff -#define B_SLICE(val) (((val)>>B_SLICESHIFT) & B_SLICEMASK) -#define B_UNITSHIFT 16 -#define B_UNITMASK 0xf -#define B_UNIT(val) (((val) >> B_UNITSHIFT) & B_UNITMASK) -#define B_PARTITIONSHIFT 8 -#define B_PARTITIONMASK 0xff -#define B_PARTITION(val) (((val) >> B_PARTITIONSHIFT) & B_PARTITIONMASK) -#define B_TYPESHIFT 0 -#define B_TYPEMASK 0xff -#define B_TYPE(val) (((val) >> B_TYPESHIFT) & B_TYPEMASK) - -#define B_MAGICMASK 0xf0000000 -#define B_DEVMAGIC 0xa0000000 - -#define MAKEBOOTDEV(type, adaptor, controller, unit, partition) \ - (((type) << B_TYPESHIFT) | ((adaptor) << B_ADAPTORSHIFT) | \ - ((controller) << B_CONTROLLERSHIFT) | ((unit) << B_UNITSHIFT) | \ - ((partition) << B_PARTITIONSHIFT) | B_DEVMAGIC) - -#define BASE_SLICE 2 -#define COMPATIBILITY_SLICE 0 -#define MAX_SLICES 32 -#define WHOLE_DISK_SLICE 1 - #endif /* !_MACHINE_BOOTINFO_H_ */