Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/bebox/stand/boot Change format of path for device. ...
details: https://anonhg.NetBSD.org/src/rev/5774f646c3dc
branches: trunk
changeset: 758025:5774f646c3dc
user: kiyohara <kiyohara%NetBSD.org@localhost>
date: Thu Oct 14 06:39:52 2010 +0000
description:
Change format of path for device. A current form strangely feels dissatisfied.
This new format looks like the format of BootROM of BeBox.
diffstat:
sys/arch/bebox/stand/boot/boot.c | 9 +-
sys/arch/bebox/stand/boot/conf.c | 18 +-
sys/arch/bebox/stand/boot/devopen.c | 197 ++++++++++++++++++-----------------
sys/arch/bebox/stand/boot/fd.c | 7 +-
4 files changed, 119 insertions(+), 112 deletions(-)
diffs (truncated from 330 to 300 lines):
diff -r 3e4b645f65ca -r 5774f646c3dc sys/arch/bebox/stand/boot/boot.c
--- a/sys/arch/bebox/stand/boot/boot.c Thu Oct 14 06:23:27 2010 +0000
+++ b/sys/arch/bebox/stand/boot/boot.c Thu Oct 14 06:39:52 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: boot.c,v 1.20 2010/10/14 06:17:57 kiyohara Exp $ */
+/* $NetBSD: boot.c,v 1.21 2010/10/14 06:39:52 kiyohara Exp $ */
/*
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -42,10 +42,9 @@
#include "boot.h"
char *names[] = {
- "in()",
- "fd(0,1,0)netbsd", "fd(0,1,0)netbsd.gz",
- "fd(0,1,0)netbsd.old", "fd(0,1,0)netbsd.old.gz",
- "fd(0,1,0)onetbsd", "fd(0,1,0)onetbsd.gz"
+ "/dev/disk/floppy:netbsd", "/dev/disk/floppy:netbsd.gz",
+ "/dev/disk/floppy:onetbsd", "/dev/disk/floppy:onetbsd.gz"
+ "in",
};
#define NUMNAMES (sizeof (names) / sizeof (names[0]))
diff -r 3e4b645f65ca -r 5774f646c3dc sys/arch/bebox/stand/boot/conf.c
--- a/sys/arch/bebox/stand/boot/conf.c Thu Oct 14 06:23:27 2010 +0000
+++ b/sys/arch/bebox/stand/boot/conf.c Thu Oct 14 06:39:52 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: conf.c,v 1.6 2005/12/11 12:17:04 christos Exp $ */
+/* $NetBSD: conf.c,v 1.7 2010/10/14 06:39:52 kiyohara Exp $ */
/*
* Copyright (c) 1982, 1986, 1990, 1993
@@ -34,17 +34,19 @@
#include <sys/param.h>
#include <lib/libsa/stand.h>
-int fdstrategy(void *, int, daddr_t, size_t, void *, size_t *);
-int fdopen(struct open_file *, ...);
-int fdclose(struct open_file *);
+extern int fdstrategy(void *, int, daddr_t, size_t, void *, size_t *);
+extern int fdopen(struct open_file *, ...);
+extern int fdclose(struct open_file *);
-int instrategy(void *, int, daddr_t, size_t, void *, size_t *);
-int inopen(struct open_file *, ...);
-int inclose(struct open_file *);
+extern int instrategy(void *, int, daddr_t, size_t, void *, size_t *);
+extern int inopen(struct open_file *, ...);
+extern int inclose(struct open_file *);
struct devsw devsw[] = {
{ "fd", fdstrategy, fdopen, fdclose, noioctl },
- { "in", instrategy, inopen, inclose, noioctl },
+
+ { NULL, NULL, NULL, NULL, NULL },
};
+struct devsw pseudo_devsw = { "in", instrategy, inopen, inclose, noioctl };
int ndevs = sizeof(devsw) / sizeof(devsw[0]);
diff -r 3e4b645f65ca -r 5774f646c3dc sys/arch/bebox/stand/boot/devopen.c
--- a/sys/arch/bebox/stand/boot/devopen.c Thu Oct 14 06:23:27 2010 +0000
+++ b/sys/arch/bebox/stand/boot/devopen.c Thu Oct 14 06:39:52 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: devopen.c,v 1.9 2008/05/26 16:28:39 kiyohara Exp $ */
+/* $NetBSD: devopen.c,v 1.10 2010/10/14 06:39:52 kiyohara Exp $ */
/*-
* Copyright (c) 1993 John Brezak
@@ -33,125 +33,132 @@
#include <sys/param.h>
#include <sys/reboot.h>
-#define ispart(c) ((c) >= 'a' && (c) <= 'h')
-
-static int atoi(char *);
-static int devlookup(char *);
static int devparse(const char *, int *, int *, int *, int *, int *, char **);
-static int
-atoi(char *cp)
-{
- int val = 0;
-
- while (isdigit(*cp))
- val = val * 10 + (*cp++ - '0');
- return val;
-}
-
-static int
-devlookup(char *d)
-{
- struct devsw *dp = devsw;
- int i;
-
- for (i = 0; i < ndevs; i++, dp++)
- if (dp->dv_name && strcmp(dp->dv_name, d) == 0)
- return i;
-
- printf("No such device - Configured devices are:\n");
- for (dp = devsw, i = 0; i < ndevs; i++, dp++)
- if (dp->dv_name)
- printf(" %s", dp->dv_name);
- printf("\n");
- return -1;
-}
-
/*
- * Parse a device spec in one of two forms.
- * dev(ctlr, unit, part)file
+ * Parse a device spec.
+ * i.e.
+ * /dev/disk/floppy
+ * /dev/disk/ide/0/master/0
+ * /dev/disk/ide/0/slave/0
+ * /dev/disk/scsi/0/0/0
+ * /dev/disk/scsi/0/3/0
*/
static int
-devparse(const char *fname, int *dev, int *adapt, int *ctlr, int *unit,
+devparse(const char *fname, int *dev, int *ctlr, int *unit, int *lunit,
int *part, char **file)
{
- int argc, flag;
- char *s, *args[3];
- extern char nametmp[];
+ int i;
+ char devdir[] = "/dev/disk/";
+ char floppy[] = "floppy";
+ char ide[] = "ide";
+ char scsi[] = "scsi";
+ char *p;
+
+ if (strncmp(fname, devdir, strlen(devdir)) != 0)
+ return EINVAL;
+ p = __UNCONST(fname) + strlen(devdir);
- /* get device name and make lower case */
- strcpy(nametmp, (char *)fname);
- for (s = nametmp; *s && *s != '('; s++)
- if (isupper(*s)) *s = tolower(*s);
-
- if (*s == '(') {
- /* lookup device and get index */
- *s = NULL;
- if ((*dev = devlookup(nametmp)) < 0)
- goto baddev;
+ if (strncmp(p, floppy, strlen(floppy)) == 0) {
+ p += strlen(floppy);
+ for (i = 0; devsw[i].dv_name != NULL; i++)
+ if (strcmp(devsw[i].dv_name, "fd") == 0) {
+ *dev = i;
+ *ctlr = 0;
+ *unit = 1;
+ *lunit = 0;
+ break;
+ }
+ } else if (strncmp(p, ide, strlen(ide)) == 0) {
+ char master[] = "master";
+ char slave[] = "slave";
- /* tokenize device ident */
- for (++s, flag = 0, argc = 0; *s && *s != ')'; s++) {
- if (*s != ',') {
- if (!flag) {
- flag++;
- args[argc++] = s;
- }
- } else {
- if (flag) {
- *s = NULL;
- flag = 0;
- }
+ p += strlen(ide);
+ if (*p++ != '/' ||
+ !isdigit(*p++) ||
+ *p++ != '/')
+ return EINVAL;
+ *ctlr = *(p - 2) - '0';
+ if (strncmp(p, master, strlen(master)) == 0) {
+ *unit = 0;
+ p += strlen(master);
+ } else if (strncmp(p, slave, strlen(slave)) == 0) {
+ *unit = 1;
+ p += strlen(slave);
+ } else
+ return EINVAL;
+ if (*p++ != '/' ||
+ !isdigit(*p++) ||
+ *p++ != '_' ||
+ !isdigit(*p++))
+ return EINVAL;
+ *lunit = *(p - 3) - '0';
+ *part = *(p - 1) - '0';
+ for (i = 0; devsw[i].dv_name != NULL; i++)
+ if (strcmp(devsw[i].dv_name, "wd") == 0) {
+ *dev = i;
+ break;
}
- }
- if (*s == ')')
- *s = NULL;
+ if (devsw[i].dv_name == NULL)
+ return EINVAL;
+ } else if (strncmp(p, scsi, strlen(scsi)) == 0) {
+ p += strlen(scsi);
+ if (*p++ != '/' ||
+ !isdigit(*p++) ||
+ *p++ != '/' ||
+ !isdigit(*p++) ||
+ *p++ != '/' ||
+ !isdigit(*p++) ||
+ *p++ != '_' ||
+ !isdigit(*p++))
+ return EINVAL;
+ *ctlr = *(p - 7) - '0';
+ *unit = *(p - 5) - '0';
+ *lunit = *(p - 3) - '0';
+ *part = *(p - 1) - '0';
+ for (i = 0; devsw[i].dv_name != NULL; i++)
+ if (strcmp(devsw[i].dv_name, "sd") == 0) {
+ *dev = i;
+ break;
+ }
+ if (devsw[i].dv_name == NULL)
+ return EINVAL;
+ }
- switch (argc) {
- case 3:
- *part = atoi(args[2]);
- /* FALLTHROUGH */
- case 2:
- *unit = atoi(args[1]);
- /* FALLTHROUGH */
- case 1:
- *ctlr = atoi(args[0]);
- break;
- }
- *file = ++s;
- } else {
- /* no device present */
- *file = (char *)fname;
- }
+ if (*p++ != ':')
+ return EINVAL;
+ *file = p;
return 0;
-
-baddev:
- return EINVAL;
}
int
devopen(struct open_file *f, const char *fname, char **file)
{
int error;
- int dev = 0, ctlr = 0, unit = 0, part = 0;
- int adapt = 0;
+ int dev = 0, ctlr = 0, unit = 0, lunit = 0, part = 0;
struct devsw *dp = &devsw[0];
+ extern struct devsw pseudo_devsw;
- if ((error =
- devparse(fname, &dev, &adapt, &ctlr, &unit, &part, file)) != 0)
- return error;
-
- dp = &devsw[dev];
- if (!dp->dv_open)
- return ENODEV;
+ **file = '\0';
+ error = devparse(fname, &dev, &ctlr, &unit, &lunit, &part, file);
+ if (error == 0) {
+ dp = &devsw[dev];
+ if (!dp->dv_open)
+ return ENODEV;
+ } else {
+ if (strcmp(fname, "in") == 0)
+ /* special case: kernel in memory */
+ dp = &pseudo_devsw;
+ else
+ return error;
+ }
f->f_dev = dp;
- if ((error = (*dp->dv_open)(f, ctlr, unit, part)) == 0)
+ if ((error = (*dp->dv_open)(f, ctlr, unit, lunit, part)) == 0)
return 0;
- printf("%s(%d,%d,%d): %s\n", devsw[dev].dv_name,
- ctlr, unit, part, strerror(error));
+ printf("%s %s\n", fname, strerror(error));
return error;
}
diff -r 3e4b645f65ca -r 5774f646c3dc sys/arch/bebox/stand/boot/fd.c
--- a/sys/arch/bebox/stand/boot/fd.c Thu Oct 14 06:23:27 2010 +0000
+++ b/sys/arch/bebox/stand/boot/fd.c Thu Oct 14 06:39:52 2010 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: fd.c,v 1.9 2009/03/18 10:22:27 cegger Exp $ */
Home |
Main Index |
Thread Index |
Old Index