summaryrefslogtreecommitdiffstats
path: root/sys/boot/ofw
diff options
context:
space:
mode:
authorrobert <robert@FreeBSD.org>2002-02-15 13:09:34 +0000
committerrobert <robert@FreeBSD.org>2002-02-15 13:09:34 +0000
commit36d50641135031eaf53eb95ca7fc19869125b759 (patch)
treef478496459bf80a2cd11712e85a4cd9febd7be2f /sys/boot/ofw
parenta1db61378b4bc83561c670dac6f578240cac39fa (diff)
downloadFreeBSD-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.c35
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
OpenPOWER on IntegriCloud