summaryrefslogtreecommitdiffstats
path: root/usr.sbin/config/config.y
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>2000-01-08 15:57:22 +0000
committerpeter <peter@FreeBSD.org>2000-01-08 15:57:22 +0000
commit4dc1a88de3c124d01cb486042b1fd6ba88f3abe8 (patch)
treeebf9dbc0011a3e7752a87c51eaba2001375e535e /usr.sbin/config/config.y
parent56c26012ce83d84970d82e62757ffefc7048ea0d (diff)
downloadFreeBSD-src-4dc1a88de3c124d01cb486042b1fd6ba88f3abe8.zip
FreeBSD-src-4dc1a88de3c124d01cb486042b1fd6ba88f3abe8.tar.gz
Apply the axe to some more cruft in config(8). In particular:
- redo the "at" configuration system so that it just syntax checks to make sure the device you're configuring something "at" appears to exist. Nuke a bunch of complexity that was responsible for creating "clones" of wildcard devices and some wierd stuff in a few places including the scbus config tables etc. - merge "controller" and "device" - there is no difference as far as the kernel is concernend, it's just something there to make life difficult for config file writers. "controller" is now an alias for "device". - emit full scsi config into the resource tables. We could trivially change cam to use that rather than it's own "special" table for wiring and static configuration. ATA could use this too for static wiring. - try and emulate some of the quirks of the old system where it made sense. Some were too strange though and I'd be very suprised if they were features and not outright bugs. nexus handling is still strange. One thing in particular is that some of the wierd entries in the newbus devtables is now gone as it was a quirk side effect of the wildcard/question-mark cloning above. GENERIC and LINT still build etc.
Diffstat (limited to 'usr.sbin/config/config.y')
-rw-r--r--usr.sbin/config/config.y120
1 files changed, 34 insertions, 86 deletions
diff --git a/usr.sbin/config/config.y b/usr.sbin/config/config.y
index 2217b59..bc894b4 100644
--- a/usr.sbin/config/config.y
+++ b/usr.sbin/config/config.y
@@ -103,11 +103,11 @@ char errbuf[80];
int maxusers;
int seen_scbus;
+int warned_controller;
#define ns(s) strdup(s)
-static struct device *connect __P((char *, int));
-static struct device *huhcon __P((char *));
+static int connect __P((char *, int));
static void yyerror __P((char *s));
@@ -320,7 +320,12 @@ Device_spec:
cur.d_type = DEVICE;
} |
CONTROLLER Dev_name Dev_info
- = { cur.d_type = CONTROLLER; } |
+ = {
+ if (warned_controller < 3)
+ warnx("line %d: Obsolete keyword 'controller' found - use 'device'", yyline);
+ warned_controller++;
+ cur.d_type = DEVICE;
+ } |
PSEUDO_DEVICE Init_dev Dev
= {
cur.d_name = $3;
@@ -337,9 +342,9 @@ Dev_name:
Init_dev Dev NUMBER
= {
cur.d_name = $2;
+ cur.d_unit = $3;
if (eq($2, "scbus"))
seen_scbus = 1;
- cur.d_unit = $3;
};
Init_dev:
@@ -355,15 +360,15 @@ Dev_info:
Con_info:
AT Dev NUMBER
= {
- if (eq(cur.d_name, "mba") || eq(cur.d_name, "uba")) {
- (void) snprintf(errbuf, sizeof(errbuf),
- "%s must be connected to a nexus", cur.d_name);
- yyerror(errbuf);
- }
- cur.d_conn = connect($2, $3);
+ connect($2, $3);
+ cur.d_conn = $2;
+ cur.d_connunit = $3;
} |
AT NEXUS NUMBER
- = { cur.d_conn = TO_NEXUS; };
+ = {
+ cur.d_conn = "nexus";
+ cur.d_connunit = 0;
+ };
Info_list:
Info_list Info
@@ -373,13 +378,7 @@ Info_list:
Info:
BUS NUMBER /* controller scbus1 at ahc0 bus 1 - twin channel */
- = {
- if (cur.d_conn != 0 && cur.d_conn->d_type == CONTROLLER)
- cur.d_slave = $2;
- else
- yyerror("can't specify a bus to something "
- "other than a controller");
- } |
+ = { cur.d_bus = $2; } |
TARGET NUMBER
= { cur.d_target = $2; } |
UNIT NUMBER
@@ -449,92 +448,41 @@ newdev(dp)
* find the pointer to connect to the given device and number.
* returns 0 if no such device and prints an error message
*/
-static struct device *
+static int
connect(dev, num)
register char *dev;
register int num;
{
register struct device *dp;
- if (num == QUES)
- return (huhcon(dev));
+ if (num == QUES) {
+ for (dp = dtab; dp != 0; dp = dp->d_next)
+ if (eq(dp->d_name, dev))
+ break;
+ if (dp == 0) {
+ (void) snprintf(errbuf, sizeof(errbuf),
+ "no %s's to wildcard", dev);
+ yyerror(errbuf);
+ return (0);
+ }
+ return (1);
+ }
for (dp = dtab; dp != 0; dp = dp->d_next) {
if ((num != dp->d_unit) || !eq(dev, dp->d_name))
continue;
- if (dp->d_type != CONTROLLER) {
+ if (dp->d_type != DEVICE) {
(void) snprintf(errbuf, sizeof(errbuf),
- "%s connected to non-controller", dev);
+ "%s connected to non-device", dev);
yyerror(errbuf);
return (0);
}
- return (dp);
+ return (1);
}
(void) snprintf(errbuf, sizeof(errbuf), "%s %d not defined", dev, num);
yyerror(errbuf);
return (0);
}
-/*
- * connect to an unspecific thing
- */
-static struct device *
-huhcon(dev)
- register char *dev;
-{
- register struct device *dp, *dcp;
- struct device rdev;
- int oldtype;
-
- /*
- * First make certain that there are some of these to wildcard on
- */
- for (dp = dtab; dp != 0; dp = dp->d_next)
- if (eq(dp->d_name, dev))
- break;
- if (dp == 0) {
- (void) snprintf(errbuf, sizeof(errbuf), "no %s's to wildcard",
- dev);
- yyerror(errbuf);
- return (0);
- }
- oldtype = dp->d_type;
- dcp = dp->d_conn;
- /*
- * Now see if there is already a wildcard entry for this device
- * (e.g. Search for a "uba ?")
- */
- for (; dp != 0; dp = dp->d_next)
- if (eq(dev, dp->d_name) && dp->d_unit == -1)
- break;
- /*
- * If there isn't, make one because everything needs to be connected
- * to something.
- */
- if (dp == 0) {
- dp = &rdev;
- init_dev(dp);
- dp->d_unit = QUES;
- dp->d_name = ns(dev);
- dp->d_type = oldtype;
- newdev(dp);
- dp = curp;
- /*
- * Connect it to the same thing that other similar things are
- * connected to, but make sure it is a wildcard unit
- * (e.g. up connected to sc ?, here we make connect sc? to a
- * uba?). If other things like this are on the NEXUS or
- * if they aren't connected to anything, then make the same
- * connection, else call ourself to connect to another
- * unspecific device.
- */
- if (dcp == TO_NEXUS || dcp == 0)
- dp->d_conn = dcp;
- else
- dp->d_conn = connect(dcp->d_name, QUES);
- }
- return (dp);
-}
-
void
init_dev(dp)
register struct device *dp;
@@ -546,7 +494,7 @@ init_dev(dp)
dp->d_conflicts = 0;
dp->d_disabled = 0;
dp->d_flags = 0;
- dp->d_slave = dp->d_lun = dp->d_target = dp->d_drive = dp->d_unit = \
+ dp->d_bus = dp->d_lun = dp->d_target = dp->d_drive = dp->d_unit = \
dp->d_count = UNKNOWN;
dp->d_port = (char *)0;
dp->d_portn = -1;
OpenPOWER on IntegriCloud