diff options
| author | tsubai <tsubai@NetBSD.org> | 1999-08-03 07:08:36 +0000 |
|---|---|---|
| committer | tsubai <tsubai@NetBSD.org> | 1999-08-03 07:08:36 +0000 |
| commit | 4eb4de3592a61d1028bb486ca0e8a5270fec486b (patch) | |
| tree | c7df4d48b349a0a27fff5b0b6f59d923d1deeb0c /sys | |
| parent | 9eb133fc08bdaa414b327cf14c8b271447b386e7 (diff) | |
Make ``boot kernelname'' work on OF-3.x too.
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/arch/macppc/stand/ofwboot/boot.c | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/sys/arch/macppc/stand/ofwboot/boot.c b/sys/arch/macppc/stand/ofwboot/boot.c index 0f8fadf68f4..b7d954a06c9 100644 --- a/sys/arch/macppc/stand/ofwboot/boot.c +++ b/sys/arch/macppc/stand/ofwboot/boot.c @@ -1,4 +1,4 @@ -/* $NetBSD: boot.c,v 1.6 1999/04/29 03:16:21 tsubai Exp $ */ +/* $NetBSD: boot.c,v 1.7 1999/08/03 07:08:36 tsubai Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -100,17 +100,28 @@ char bootfile[128]; int boothowto; int debug; +static ofw_version = 0; + static void prom2boot(dev) char *dev; { char *cp; - for (cp = dev; *cp != '\0'; cp++) + cp = dev + strlen(dev) - 1; + for (; *cp; cp--) { if (*cp == ':') { - *cp = '\0'; - return; + if (ofw_version < 3) { + /* sd@0:0 -> sd@0 */ + *cp = 0; + break; + } else { + /* disk@0:5,boot -> disk@0:0 */ + strcpy(cp, ":0"); + break; + } } + } } static void @@ -196,7 +207,7 @@ main() { extern char bootprog_name[], bootprog_rev[], bootprog_maker[], bootprog_date[]; - int chosen, options; + int chosen, options, openprom; char bootline[512]; /* Should check size? */ char *cp; u_long marks[MARK_MAX]; @@ -208,6 +219,24 @@ main() printf(">> (%s, %s)\n", bootprog_maker, bootprog_date); /* + * Figure out what version of Open Firmware... + */ + if ((openprom = OF_finddevice("/openprom")) != -1) { + char model[32]; + + bzero(model, sizeof model); + OF_getprop(openprom, "model", model, sizeof model); + for (cp = model; *cp; cp++) + if (*cp >= '0' && *cp <= '9') { + ofw_version = *cp - '0'; + break; + } +#if 0 + printf(">> Open Firmware version %d.x\n", ofw_version); +#endif + } + + /* * Get the boot arguments from Openfirmware */ if ((chosen = OF_finddevice("/chosen")) == -1 || |
