diff options
author | robert <robert@FreeBSD.org> | 2002-02-15 13:09:34 +0000 |
---|---|---|
committer | robert <robert@FreeBSD.org> | 2002-02-15 13:09:34 +0000 |
commit | 36d50641135031eaf53eb95ca7fc19869125b759 (patch) | |
tree | f478496459bf80a2cd11712e85a4cd9febd7be2f /sys/boot/ofw | |
parent | a1db61378b4bc83561c670dac6f578240cac39fa (diff) | |
download | FreeBSD-src-36d50641135031eaf53eb95ca7fc19869125b759.zip FreeBSD-src-36d50641135031eaf53eb95ca7fc19869125b759.tar.gz |
- Do not include a NetBSD header as it is not needed anymore.
- Remove two constants that were needed in conjuction with the
NetBSD disklabel header. Use the FreeBSD equivalents.
To boot from NetBSD/sparc64 partitions, define LABELOFFSET to
be 128.
- Do not use the complete open firmware path to filter out cdrom drives.
No path containing "cdrom" is detected as a disk now.
- Simplify some code.
Diffstat (limited to 'sys/boot/ofw')
-rw-r--r-- | sys/boot/ofw/libofw/ofw_disk.c | 35 |
1 files changed, 11 insertions, 24 deletions
diff --git a/sys/boot/ofw/libofw/ofw_disk.c b/sys/boot/ofw/libofw/ofw_disk.c index f8b9159..90a698c 100644 --- a/sys/boot/ofw/libofw/ofw_disk.c +++ b/sys/boot/ofw/libofw/ofw_disk.c @@ -42,8 +42,6 @@ #include "libofw.h" #define DISKSECSZ 512 -#define DISKLABELSEC 0 -#define DISKLABELOFF 128 static int ofwd_init(void); static int ofwd_strategy(void *devdata, int flag, daddr_t dblk, @@ -77,21 +75,18 @@ ofwd_init(void) int ret; char devpath[255]; ihandle_t instance; + int i; - printf("ofwd_init: searching for block devices\n"); ofw_devsearch_init(); while ((ret = ofw_devsearch("block", devpath)) != 0) { devpath[sizeof devpath - 1] = 0; - printf("ofwd_init: devpath=%s\n", devpath); - if (ret == -1) { - printf("ofwd_init: ret=%d\n", ret); + if (ret == -1) return (1); - } #ifdef DEBUG printf("devpath=\"%s\" ret=%d\n", devpath, ret); #endif - if (strcmp(devpath, "/pci@1f,0/pci@1,1/ide@3/cdrom") == 0) + if (strstr(devpath, "cdrom") != 0) continue; instance = OF_open(devpath); @@ -101,6 +96,7 @@ ofwd_init(void) printf("disk%d is %s\n", nofwdinfo, ofwdinfo[nofwdinfo].ofwd_path); nofwdinfo++; OF_close(instance); + break; } if (nofwdinfo > MAXDEV) { @@ -109,7 +105,6 @@ ofwd_init(void) } } - printf("ofwd_init: return (0)\n"); return (0); } @@ -164,31 +159,23 @@ ofwd_open(struct open_file *f, ...) return 0; } -/* XXX This is a NetBSD header! */ -#include "disklabel.h" int readdisklabel(struct ofw_devdesc *dp) { char buf[DISKSECSZ]; - struct partition *p; struct disklabel *lp; size_t size; int i; dp->d_kind.ofwdisk.partoff = 0; + dp->d_dev->dv_strategy(dp, 0, LABELSECTOR, sizeof(buf), buf, &size); + i = dp->d_kind.ofwdisk.partition; + if (i >= MAXPARTITIONS) + return 1; - dp->d_dev->dv_strategy(dp, 0, DISKLABELSEC, sizeof(buf), buf, &size); - - lp = (struct disklabel *)(buf + DISKLABELOFF); - p = lp->d_partitions; - for (i = 0; i < MAXPARTITIONS; i++) { - if (i == dp->d_kind.ofwdisk.partition) { - dp->d_kind.ofwdisk.partoff = p->p_offset; - return 0; - } - p++; - } - return 1; + lp = (struct disklabel *)(buf + LABELOFFSET); + dp->d_kind.ofwdisk.partoff = lp->d_partitions[i].p_offset; + return 0; } static int |