From ad1293532804f63a9bd908daae2cea3dec03556c Mon Sep 17 00:00:00 2001 From: phx Date: Fri, 11 Sep 2009 12:00:12 +0000 Subject: [PATCH] Added support for RDB partitions. Moved MBR parition code out of ofdev.c into mbr.c. Tested on Pegasos2 (RDB and MBR) and RS6000. --- sys/arch/ofppc/stand/ofwboot/Makefile | 5 +- sys/arch/ofppc/stand/ofwboot/mbr.c | 113 ++++++++++++ sys/arch/ofppc/stand/ofwboot/mbr.h | 43 +++++ sys/arch/ofppc/stand/ofwboot/ofdev.c | 90 ++------- sys/arch/ofppc/stand/ofwboot/ofdev.h | 4 +- sys/arch/ofppc/stand/ofwboot/rdb.c | 253 ++++++++++++++++++++++++++ sys/arch/ofppc/stand/ofwboot/rdb.h | 39 ++++ sys/arch/ofppc/stand/ofwboot/version | 3 +- 8 files changed, 469 insertions(+), 81 deletions(-) create mode 100644 sys/arch/ofppc/stand/ofwboot/mbr.c create mode 100644 sys/arch/ofppc/stand/ofwboot/mbr.h create mode 100644 sys/arch/ofppc/stand/ofwboot/rdb.c create mode 100644 sys/arch/ofppc/stand/ofwboot/rdb.h diff --git a/sys/arch/ofppc/stand/ofwboot/Makefile b/sys/arch/ofppc/stand/ofwboot/Makefile index d99dc816bef1..9089e3cee725 100644 --- a/sys/arch/ofppc/stand/ofwboot/Makefile +++ b/sys/arch/ofppc/stand/ofwboot/Makefile @@ -1,9 +1,10 @@ -# $NetBSD: Makefile,v 1.24 2009/01/12 07:49:57 tsutsui Exp $ +# $NetBSD: Makefile,v 1.25 2009/09/11 12:00:12 phx Exp $ S!= cd ${.CURDIR}/../../../.. ; pwd PROG= ofwboot -SRCS= ofwstart.S Locore.c boot.c ofdev.c net.c netif_of.c vers.c +SRCS= ofwstart.S Locore.c boot.c ofdev.c net.c netif_of.c +SRCS+= mbr.c rdb.c vers.c CFLAGS+= -msoft-float -Wno-main -ffreestanding CFLAGS+= -Wall -Wmissing-prototypes -Wstrict-prototypes -Wpointer-arith #CPPFLAGS+= -g -DALLOC_TRACE -DDEBUG #-DOFW_DEBUG -DNETIF_DEBUG diff --git a/sys/arch/ofppc/stand/ofwboot/mbr.c b/sys/arch/ofppc/stand/ofwboot/mbr.c new file mode 100644 index 000000000000..44d75ef289aa --- /dev/null +++ b/sys/arch/ofppc/stand/ofwboot/mbr.c @@ -0,0 +1,113 @@ +/* $NetBSD: mbr.c,v 1.1 2009/09/11 12:00:12 phx Exp $ */ + +/* + * Copyright (C) 1995, 1996 Wolfgang Solfrank. + * Copyright (C) 1995, 1996 TooLs GmbH. + * 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 TooLs GmbH. + * 4. The name of TooLs GmbH may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``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 TOOLS GMBH 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 +#include + +#include +#include + +#include "mbr.h" + + +static u_long +get_long(const void *p) +{ + const unsigned char *cp = p; + + return cp[0] | (cp[1] << 8) | (cp[2] << 16) | (cp[3] << 24); +} + + +/* + * Find a valid MBR disklabel. + */ +int +search_mbr_label(struct of_dev *devp, u_long off, char *buf, + struct disklabel *lp, u_long off0) +{ + size_t read; + struct mbr_partition *p; + int i; + u_long poff; + static int recursion; + + if (strategy(devp, F_READ, off, DEV_BSIZE, buf, &read) + || read != DEV_BSIZE) + return ERDLAB; + + if (*(u_int16_t *)&buf[MBR_MAGIC_OFFSET] != sa_htole16(MBR_MAGIC)) + return ERDLAB; + + if (recursion++ <= 1) + off0 += off; + for (p = (struct mbr_partition *)(buf + MBR_PART_OFFSET), i = 0; + i < MBR_PART_COUNT; i++, p++) { + if (p->mbrp_type == MBR_PTYPE_NETBSD +#ifdef COMPAT_386BSD_MBRPART + || (p->mbrp_type == MBR_PTYPE_386BSD && + (printf("WARNING: old BSD partition ID!\n"), 1) + /* XXX XXX - libsa printf() is void */ ) +#endif + ) { + poff = get_long(&p->mbrp_start) + off0; + if (strategy(devp, F_READ, poff + LABELSECTOR, + DEV_BSIZE, buf, &read) == 0 + && read == DEV_BSIZE) { + if (!getdisklabel(buf, lp)) { + recursion--; + return 0; + } + } + if (strategy(devp, F_READ, off, DEV_BSIZE, buf, &read) + || read != DEV_BSIZE) { + recursion--; + return ERDLAB; + } + } else if (p->mbrp_type == MBR_PTYPE_EXT) { + poff = get_long(&p->mbrp_start); + if (!search_mbr_label(devp, poff, buf, lp, off0)) { + recursion--; + return 0; + } + if (strategy(devp, F_READ, off, DEV_BSIZE, buf, &read) + || read != DEV_BSIZE) { + recursion--; + return ERDLAB; + } + } + } + + recursion--; + return ERDLAB; +} diff --git a/sys/arch/ofppc/stand/ofwboot/mbr.h b/sys/arch/ofppc/stand/ofwboot/mbr.h new file mode 100644 index 000000000000..2e45c0442e47 --- /dev/null +++ b/sys/arch/ofppc/stand/ofwboot/mbr.h @@ -0,0 +1,43 @@ +/* $NetBSD: mbr.h,v 1.1 2009/09/11 12:00:12 phx Exp $ */ + +/* + * Copyright (C) 1995, 1996 Wolfgang Solfrank. + * Copyright (C) 1995, 1996 TooLs GmbH. + * 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 TooLs GmbH. + * 4. The name of TooLs GmbH may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``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 TOOLS GMBH 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. + */ + +#ifndef MBR_H_ +#define MBR_H_ + +#include +#include "ofdev.h" + +int search_mbr_label(struct of_dev *, u_long, char *, struct disklabel *, + u_long); + +#endif /* MBR_H_ */ diff --git a/sys/arch/ofppc/stand/ofwboot/ofdev.c b/sys/arch/ofppc/stand/ofwboot/ofdev.c index 23cf385c98db..bd38fbeb0416 100644 --- a/sys/arch/ofppc/stand/ofwboot/ofdev.c +++ b/sys/arch/ofppc/stand/ofwboot/ofdev.c @@ -1,4 +1,4 @@ -/* $NetBSD: ofdev.c,v 1.16 2009/01/12 07:49:57 tsutsui Exp $ */ +/* $NetBSD: ofdev.c,v 1.17 2009/09/11 12:00:12 phx Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -37,8 +37,6 @@ #include "ofdev.h" #include -#include -#include #include @@ -52,6 +50,8 @@ #include "net.h" #include "openfirm.h" +#include "mbr.h" +#include "rdb.h" extern char bootdev[]; @@ -120,7 +120,7 @@ filename(char *str, char *ppart) return 0; } -static int +int strategy(void *devdata, int rw, daddr_t blk, size_t size, void *buf, size_t *rsize) { @@ -186,76 +186,6 @@ static struct of_dev ofdev = { char opened_name[256]; int floppyboot; -static u_long -get_long(const void *p) -{ - const unsigned char *cp = p; - - return cp[0] | (cp[1] << 8) | (cp[2] << 16) | (cp[3] << 24); -} - -/* - * Find a valid disklabel. - */ -static int -search_label(struct of_dev *devp, u_long off, char *buf, struct disklabel *lp, - u_long off0) -{ - size_t read; - struct mbr_partition *p; - int i; - u_long poff; - static int recursion; - - if (strategy(devp, F_READ, off, DEV_BSIZE, buf, &read) - || read != DEV_BSIZE) - return ERDLAB; - - if (*(u_int16_t *)&buf[MBR_MAGIC_OFFSET] != sa_htole16(MBR_MAGIC)) - return ERDLAB; - - if (recursion++ <= 1) - off0 += off; - for (p = (struct mbr_partition *)(buf + MBR_PART_OFFSET), i = 0; - i < MBR_PART_COUNT; i++, p++) { - if (p->mbrp_type == MBR_PTYPE_NETBSD -#ifdef COMPAT_386BSD_MBRPART - || (p->mbrp_type == MBR_PTYPE_386BSD && - (printf("WARNING: old BSD partition ID!\n"), 1) - /* XXX XXX - libsa printf() is void */ ) -#endif - ) { - poff = get_long(&p->mbrp_start) + off0; - if (strategy(devp, F_READ, poff + LABELSECTOR, - DEV_BSIZE, buf, &read) == 0 - && read == DEV_BSIZE) { - if (!getdisklabel(buf, lp)) { - recursion--; - return 0; - } - } - if (strategy(devp, F_READ, off, DEV_BSIZE, buf, &read) - || read != DEV_BSIZE) { - recursion--; - return ERDLAB; - } - } else if (p->mbrp_type == MBR_PTYPE_EXT) { - poff = get_long(&p->mbrp_start); - if (!search_label(devp, poff, buf, lp, off0)) { - recursion--; - return 0; - } - if (strategy(devp, F_READ, off, DEV_BSIZE, buf, &read) - || read != DEV_BSIZE) { - recursion--; - return ERDLAB; - } - } - } - - recursion--; - return ERDLAB; -} int devopen(struct open_file *of, const char *name, char **file) @@ -263,11 +193,12 @@ devopen(struct open_file *of, const char *name, char **file) char *cp; char partition; char fname[256]; - char buf[DEV_BSIZE]; struct disklabel label; int handle, part; size_t read; int error = 0; + /* allow disk blocks up to 65536 bytes */ + char buf[DEV_BSIZE<<7]; if (ofdev.handle != -1) panic("devopen"); @@ -326,14 +257,19 @@ devopen(struct open_file *of, const char *name, char **file) ofdev.type = OFDEV_DISK; ofdev.bsize = DEV_BSIZE; - /* First try to find a disklabel without MBR partitions */ + /* First try to find a disklabel without MBR/RDB partitions */ if (strategy(&ofdev, F_READ, LABELSECTOR, DEV_BSIZE, buf, &read) != 0 || read != DEV_BSIZE || getdisklabel(buf, &label)) { /* Else try MBR partitions */ - error = search_label(&ofdev, 0, buf, &label, 0); + error = search_mbr_label(&ofdev, 0, buf, &label, 0); + if (error && error != ERDLAB) + goto bad; + + /* and finally try RDB partitions */ + error = search_rdb_label(&ofdev, buf, &label); if (error && error != ERDLAB) goto bad; } diff --git a/sys/arch/ofppc/stand/ofwboot/ofdev.h b/sys/arch/ofppc/stand/ofwboot/ofdev.h index 270d7412240a..e291103197a6 100644 --- a/sys/arch/ofppc/stand/ofwboot/ofdev.h +++ b/sys/arch/ofppc/stand/ofwboot/ofdev.h @@ -1,4 +1,4 @@ -/* $NetBSD: ofdev.h,v 1.2 2003/06/26 20:47:51 aymeric Exp $ */ +/* $NetBSD: ofdev.h,v 1.3 2009/09/11 12:00:12 phx Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -51,4 +51,6 @@ struct of_dev { extern char opened_name[]; extern int floppyboot; +int strategy(void *, int, daddr_t, size_t, void *, size_t *); + #endif diff --git a/sys/arch/ofppc/stand/ofwboot/rdb.c b/sys/arch/ofppc/stand/ofwboot/rdb.c new file mode 100644 index 000000000000..cc5806e434d0 --- /dev/null +++ b/sys/arch/ofppc/stand/ofwboot/rdb.c @@ -0,0 +1,253 @@ +/* $NetBSD: rdb.c,v 1.1 2009/09/11 12:00:12 phx Exp $ */ + +/*- + * Copyright (c) 2009 Frank Wille. + * All rights reserved. + * + * Written by Frank Wille for The NetBSD Project. + * + * 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 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. + */ + +#include +#include + +#include + +#include "rdb.h" + + +static u_long +rdbchksum(void *bdata) +{ + u_long *blp, cnt, val; + + blp = bdata; + cnt = blp[1]; + val = 0; + + while (cnt--) + val += *blp++; + return val; +} + + +static struct adostype +getadostype(u_long dostype) +{ + struct adostype adt; + u_long t3, b1; + + t3 = dostype & 0xffffff00; + b1 = dostype & 0x000000ff; + + adt.fstype = b1; + + switch (t3) { + case DOST_NBR: + adt.archtype = ADT_NETBSDROOT; + return adt; + case DOST_NBS: + adt.archtype = ADT_NETBSDSWAP; + return adt; + case DOST_NBU: + adt.archtype = ADT_NETBSDUSER; + return adt; + case DOST_AMIX: + adt.archtype = ADT_AMIX; + if (b1 == 2) + adt.fstype = FS_BSDFFS; + else + adt.fstype = FS_UNUSED; + return adt; + case DOST_XXXBSD: + if (b1 == 'S') { + dostype = DOST_NBS; + dostype |= FS_SWAP; + } else { + if (b1 == 'R') + dostype = DOST_NBR; + else + dostype = DOST_NBU; + dostype |= FS_BSDFFS; + } + return getadostype(dostype); + case DOST_EXT2: + adt.archtype = ADT_EXT2; + adt.fstype = FS_EX2FS; + return adt; + case DOST_RAID: + adt.archtype = ADT_RAID; + adt.fstype = FS_RAID; + return adt; + default: + adt.archtype = ADT_UNKNOWN; + adt.fstype = FS_UNUSED; + return adt; + } +} + + +/* + * Find a valid RDB disklabel. + */ +int +search_rdb_label(struct of_dev *devp, char *buf, struct disklabel *lp) +{ + struct adostype adt; + struct rdblock *rbp; + struct partblock *pbp; + struct disklabel *dlp; + struct partition *pp; + u_long blk; + size_t read; + int i; + + /* + * Scan the first RDB_MAXBLOCKS of a disk for an RDB block. + */ + rbp = (struct rdblock *)buf; + for (blk = 0; blk < RDB_MAXBLOCKS; blk++) { + if (strategy(devp, F_READ, blk, DEV_BSIZE, buf, &read) + || read != DEV_BSIZE) + return ERDLAB; + + /* check for valid RDB */ + if (rbp->id == RDBLOCK_ID && rdbchksum(rbp) == 0) + break; + + /* check for native NetBSD label */ + dlp = (struct disklabel *)(buf + LABELOFFSET); + if (dlp->d_magic == DISKMAGIC && dkcksum(dlp) == 0) { + *lp = *dlp; + return 0; + } + } + if (blk == RDB_MAXBLOCKS) + return ERDLAB; + + /* Found RDB, clear disklabel partitions before reading PART blocks. */ + lp->d_npartitions = RAW_PART + 1; + for (i = 0; i < MAXPARTITIONS; i++) { + lp->d_partitions[i].p_size = 0; + lp->d_partitions[i].p_offset = 0; + lp->d_partitions[i].p_fstype = 0; + } + + /* + * Construct a disklabel from RDB. + */ + lp->d_secsize = rbp->nbytes; + lp->d_nsectors = rbp->nsectors; + lp->d_ntracks = rbp->nheads; + /* be prepared that rbp->ncylinders may be a bogus value */ + if (rbp->highcyl == 0) + lp->d_ncylinders = rbp->ncylinders; + else + lp->d_ncylinders = rbp->highcyl + 1; + /* also don't trust rbp->secpercyl */ + lp->d_secpercyl = (rbp->secpercyl <= lp->d_nsectors * lp->d_ntracks) ? + rbp->secpercyl : lp->d_nsectors * lp->d_ntracks; + if (lp->d_secpercyl == 0) + lp->d_secpercyl = lp->d_nsectors * lp->d_ntracks; + + lp->d_secperunit = lp->d_secpercyl * lp->d_ncylinders; + lp->d_acylinders = rbp->ncylinders - (rbp->highcyl - rbp->lowcyl + 1); + lp->d_rpm = 3600; + lp->d_interleave = rbp->interleave; + lp->d_headswitch = lp->d_flags = lp->d_trackskew = lp->d_cylskew = 0; + lp->d_trkseek = 0; + + /* raw partition gets the entire disk */ + lp->d_partitions[RAW_PART].p_size = rbp->ncylinders * lp->d_secpercyl; + + /* + * Now scan for partition blocks. + */ + pbp = (struct partblock *)buf; + for (blk = rbp->partbhead; blk != RDBNULL; blk = pbp->next) { + if (strategy(devp, F_READ, blk * (lp->d_secsize / DEV_BSIZE), + lp->d_secsize, buf, &read) + || read != lp->d_secsize) + return ERDLAB; + + /* verify ID and checksum of PART block */ + if (pbp->id != PARTBLOCK_ID || rdbchksum(pbp)) + return ERDLAB; + + /* environment table in PART block needs at least 11 entries */ + if (pbp->e.tabsize < 11) + return ERDLAB; + + /* need a table size of 16 for a valid dostype */ + if (pbp->e.tabsize < 16) + pbp->e.dostype = 0; + adt = getadostype(pbp->e.dostype); + + /* determine partition index */ + switch (adt.archtype) { + case ADT_NETBSDROOT: + pp = &lp->d_partitions[0]; + if (pp->p_size) + continue; + break; + case ADT_NETBSDSWAP: + pp = &lp->d_partitions[1]; + if (pp->p_size) + continue; + break; + default: + pp = &lp->d_partitions[lp->d_npartitions++]; + break; + } + + /* sort partitions after RAW_PART by offset */ + while ((pp - lp->d_partitions) > RAW_PART + 1) { + daddr_t boff; + + boff = pbp->e.lowcyl * pbp->e.secpertrk + * pbp->e.numheads + * ((pbp->e.sizeblock << 2) / lp->d_secsize); + if (boff > (pp - 1)->p_offset) + break; + *pp = *(pp - 1); /* struct copy */ + pp--; + } + + /* get partition size, offset, fstype */ + pp->p_size = (pbp->e.highcyl - pbp->e.lowcyl + 1) + * pbp->e.secpertrk * pbp->e.numheads + * ((pbp->e.sizeblock << 2) / lp->d_secsize); + pp->p_offset = pbp->e.lowcyl * pbp->e.secpertrk + * pbp->e.numheads + * ((pbp->e.sizeblock << 2) / lp->d_secsize); + pp->p_fstype = adt.fstype; + } + + /* + * All partitions have been found. The disklabel is valid. + */ + lp->d_magic = lp->d_magic2 = DISKMAGIC; + lp->d_checksum = 0; + lp->d_checksum = dkcksum(lp); + return 0; +} diff --git a/sys/arch/ofppc/stand/ofwboot/rdb.h b/sys/arch/ofppc/stand/ofwboot/rdb.h new file mode 100644 index 000000000000..2bd9241a2121 --- /dev/null +++ b/sys/arch/ofppc/stand/ofwboot/rdb.h @@ -0,0 +1,39 @@ +/* $NetBSD: rdb.h,v 1.1 2009/09/11 12:00:12 phx Exp $ */ + +/*- + * Copyright (c) 2009 Frank Wille. + * All rights reserved. + * + * Written by Frank Wille for The NetBSD Project. + * + * 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 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. + */ + +#ifndef RDB_H_ +#define RDB_H_ + +#include +#include "ofdev.h" + +int search_rdb_label(struct of_dev *, char *, struct disklabel *); + +#endif /* RDB_H_ */ diff --git a/sys/arch/ofppc/stand/ofwboot/version b/sys/arch/ofppc/stand/ofwboot/version index bf85d1d333bf..7bbdf1f527c3 100644 --- a/sys/arch/ofppc/stand/ofwboot/version +++ b/sys/arch/ofppc/stand/ofwboot/version @@ -1,4 +1,4 @@ -$NetBSD: version,v 1.10 2008/02/13 20:11:38 garbled Exp $ +$NetBSD: version,v 1.11 2009/09/11 12:00:12 phx Exp $ 1.1: Boot program for OpenFirmware; initial revision 1.2: Boot program rearrangement @@ -10,3 +10,4 @@ $NetBSD: version,v 1.10 2008/02/13 20:11:38 garbled Exp $ 1.8: Support IBM RS/6000, switch to stock libsa alloc 1.9: Add support for auto-detection of 64bit CPUs 1.10: Change note to indicate real mode, add ldscript to support 7046 +1.11: Support for RDB partitions.