summaryrefslogtreecommitdiffstats
path: root/usr.sbin
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
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')
-rw-r--r--usr.sbin/config/config.89
-rw-r--r--usr.sbin/config/config.h8
-rw-r--r--usr.sbin/config/config.y120
-rw-r--r--usr.sbin/config/mkheaders.c29
-rw-r--r--usr.sbin/config/mkioconf.c105
5 files changed, 78 insertions, 193 deletions
diff --git a/usr.sbin/config/config.8 b/usr.sbin/config/config.8
index 85da1a6..918e878 100644
--- a/usr.sbin/config/config.8
+++ b/usr.sbin/config/config.8
@@ -127,20 +127,13 @@ they are:
.Pa ioconf.c ,
a description
of what I/O devices are attached to the system;
-.Pa vector.h ,
-definitions of
-macros related to counting interrupts;
.Pa Makefile ,
used by
.Xr make 1
in building the system;
header files,
definitions of
-the number of various devices that will be compiled into the system;
-so-called swap configuration files,
-definitions for
-the disk areas to be used for the root file system
-and system dumps.
+the number of various devices that will be compiled into the system.
.Pp
After running
.Nm config ,
diff --git a/usr.sbin/config/config.h b/usr.sbin/config/config.h
index 3e0c8a2..762e787 100644
--- a/usr.sbin/config/config.h
+++ b/usr.sbin/config/config.h
@@ -73,14 +73,15 @@ struct file_list {
#define BEFORE_DEPEND 8
struct device {
- int d_type; /* CONTROLLER, DEVICE, bus adaptor */
- struct device *d_conn; /* what it is connected to */
+ int d_type; /* DEVICE, bus adaptor */
+ char *d_conn; /* what it is connected to */
+ int d_connunit; /* unit of connection */
char *d_name; /* name of device (e.g. rk11) */
int d_unit; /* unit number */
int d_drive; /* drive number */
int d_target; /* target number */
int d_lun; /* unit number */
- int d_slave; /* slave number */
+ int d_bus; /* controller bus number */
int d_count; /* pseudo-device count */
#define QUES -1 /* -1 means '?' */
#define UNKNOWN -2 /* -2 means not set yet */
@@ -95,7 +96,6 @@ struct device {
int d_irq; /* interrupt request */
struct device *d_next; /* Next one in list */
};
-#define TO_NEXUS (struct device *)-1
struct config {
char *s_sysname;
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;
diff --git a/usr.sbin/config/mkheaders.c b/usr.sbin/config/mkheaders.c
index 636cce7..8bbcfbf 100644
--- a/usr.sbin/config/mkheaders.c
+++ b/usr.sbin/config/mkheaders.c
@@ -69,22 +69,11 @@ headers()
if (!(dp->d_type & DEVDONE))
printf("Warning: pseudo-device \"%s\" is unknown\n",
dp->d_name);
- else
- dp->d_type &= TYPEMASK;
}
if ((dp->d_type & TYPEMASK) == DEVICE) {
if (!(dp->d_type & DEVDONE))
printf("Warning: device \"%s\" is unknown\n",
dp->d_name);
- else
- dp->d_type &= TYPEMASK;
- }
- if ((dp->d_type & TYPEMASK) == CONTROLLER) {
- if (!(dp->d_type & DEVDONE))
- printf("Warning: controller \"%s\" is unknown\n",
- dp->d_name);
- else
- dp->d_type &= TYPEMASK;
}
}
}
@@ -98,23 +87,24 @@ do_count(dev, hname, search)
register char *dev, *hname;
int search;
{
- register struct device *dp, *mp;
+ register struct device *dp;
register int count, hicount;
+ char *mp;
/*
* After this loop, "count" will be the actual number of units,
* and "hicount" will be the highest unit declared. do_header()
* must use this higher of these values.
*/
- for (hicount = count = 0, dp = dtab; dp != 0; dp = dp->d_next) {
+ for (dp = dtab; dp != 0; dp = dp->d_next) {
if (eq(dp->d_name, dev)) {
if ((dp->d_type & TYPEMASK) == PSEUDO_DEVICE)
dp->d_type |= DEVDONE;
else if ((dp->d_type & TYPEMASK) == DEVICE)
dp->d_type |= DEVDONE;
- else if ((dp->d_type & TYPEMASK) == CONTROLLER)
- dp->d_type |= DEVDONE;
}
+ }
+ for (hicount = count = 0, dp = dtab; dp != 0; dp = dp->d_next) {
if (dp->d_unit != -1 && eq(dp->d_name, dev)) {
if ((dp->d_type & TYPEMASK) == PSEUDO_DEVICE) {
count =
@@ -131,9 +121,12 @@ do_count(dev, hname, search)
hicount = dp->d_unit + 1;
if (search) {
mp = dp->d_conn;
- if (mp != 0 && mp != TO_NEXUS &&
- mp->d_conn != 0 && mp->d_conn != TO_NEXUS) {
- do_count(mp->d_name, hname, 0);
+ if (mp != 0 && dp->d_connunit < 0)
+ mp = 0;
+ if (mp != 0 && eq(mp, "nexus"))
+ mp = 0;
+ if (mp != 0) {
+ do_count(mp, hname, 0);
search = 0;
}
}
diff --git a/usr.sbin/config/mkioconf.c b/usr.sbin/config/mkioconf.c
index db08c43..320fd3a 100644
--- a/usr.sbin/config/mkioconf.c
+++ b/usr.sbin/config/mkioconf.c
@@ -47,8 +47,6 @@ static const char rcsid[] =
/*
* build the ioconf.c file
*/
-static char *qu __P((int));
-static char *wnum __P((int));
static void scbus_devtab __P((FILE *));
static char *
@@ -56,9 +54,6 @@ devstr(struct device *dp)
{
static char buf[100];
- if (dp == TO_NEXUS)
- return "nexus0";
-
if (dp->d_unit >= 0) {
snprintf(buf, sizeof(buf), "%s%d", dp->d_name, dp->d_unit);
return buf;
@@ -70,11 +65,15 @@ static void
write_device_resources(FILE *fp, struct device *dp)
{
int count = 0;
+ char buf[80];
fprintf(fp, "struct config_resource %s_resources[] = {\n", devstr(dp));
if (dp->d_conn) {
- fprintf(fp, "\t{ \"at\",\tRES_STRING,\t{ (long)\"%s\" }},\n",
- devstr(dp->d_conn));
+ if (dp->d_connunit >= 0)
+ snprintf(buf, sizeof(buf), "%s%d", dp->d_conn, dp->d_connunit);
+ else
+ snprintf(buf, sizeof(buf), "%s", dp->d_conn);
+ fprintf(fp, "\t{ \"at\",\tRES_STRING,\t{ (long)\"%s\" }},\n", buf);
count++;
}
if (dp->d_drive != -2) {
@@ -89,6 +88,10 @@ write_device_resources(FILE *fp, struct device *dp)
fprintf(fp, "\t{ \"lun\",\tRES_INT,\t{ %d }},\n", dp->d_lun);
count++;
}
+ if (dp->d_bus != -2) {
+ fprintf(fp, "\t{ \"bus\",\tRES_INT,\t{ %d }},\n", dp->d_bus);
+ count++;
+ }
if (dp->d_flags) {
fprintf(fp, "\t{ \"flags\",\tRES_INT,\t{ 0x%x }},\n", dp->d_flags);
count++;
@@ -135,7 +138,7 @@ write_all_device_resources(FILE *fp)
struct device *dp;
for (dp = dtab; dp != 0; dp = dp->d_next) {
- if (dp->d_type != CONTROLLER && dp->d_type != DEVICE)
+ if (dp->d_type != DEVICE)
continue;
write_device_resources(fp, dp);
}
@@ -153,7 +156,7 @@ write_devtab(FILE *fp)
fprintf(fp, "struct config_device config_devtab[] = {\n");
for (dp = dtab; dp != 0; dp = dp->d_next) {
char* n = devstr(dp);
- if (dp->d_type != CONTROLLER && dp->d_type != DEVICE)
+ if (dp->d_type != DEVICE)
continue;
fprintf(fp, "\t{ \"%s\",\t%d,\t%s_count,\t%s_resources },\n",
dp->d_name, dp->d_unit, n, n);
@@ -204,6 +207,8 @@ newbus_ioconf()
static char *
id(int unit)
{
+ static char buf[32];
+
char *s;
switch(unit)
{
@@ -216,21 +221,13 @@ id(int unit)
break;
default:
- s = qu(unit);
+ (void) snprintf(buf, sizeof(buf), "%d", unit);
+ s = buf;
}
return s;
}
-static void
-id_put(fp, unit, s)
- FILE *fp;
- int unit;
- char *s;
-{
- fprintf(fp, "%s%s", id(unit), s);
-}
-
/* XXX: dufault@hda.com: wiped out mkioconf.c locally:
* All that nice "conflicting SCSI ID checking" is now
* lost and should be put back in.
@@ -239,7 +236,7 @@ static void
scbus_devtab(fp)
FILE *fp;
{
- register struct device *dp, *mp;
+ register struct device *dp;
fprintf(fp, "\n");
fprintf(fp, "/*\n");
@@ -251,20 +248,14 @@ scbus_devtab(fp)
fprintf(fp, "struct cam_sim_config cam_sinit[] = {\n");
fprintf(fp, "/* pathid, sim name, sim unit, sim bus */\n");
- /* XXX: Why do we always get an entry such as:
- * { '?', "ncr", '?', '?' },
- */
-
for (dp = dtab; dp; dp = dp->d_next) {
- mp = dp->d_conn;
- if (dp->d_type != CONTROLLER || mp == TO_NEXUS || mp == 0 ||
- !eq(dp->d_name, "scbus")) {
+ if (dp->d_type != DEVICE || dp->d_conn == 0 ||
+ !eq(dp->d_name, "scbus"))
continue;
- }
fprintf(fp, "{ %s, ", id(dp->d_unit));
- fprintf(fp, "\"%s\", ", mp->d_name);
- fprintf(fp, "%s, ", id(mp->d_unit));
- fprintf(fp, "%s },\n", id(dp->d_slave));
+ fprintf(fp, "\"%s\", ", dp->d_conn);
+ fprintf(fp, "%s, ", id(dp->d_connunit));
+ fprintf(fp, "%s },\n", id(dp->d_bus));
}
fprintf(fp, "{ 0, 0, 0, 0 }\n");
fprintf(fp, "};\n");
@@ -275,58 +266,18 @@ scbus_devtab(fp)
fprintf(fp,
"/* periph name, periph unit, pathid, target, LUN, flags */\n");
for (dp = dtab; dp; dp = dp->d_next) {
- if (dp->d_type == CONTROLLER || dp->d_type == PSEUDO_DEVICE ||
- dp->d_conn == TO_NEXUS)
- continue;
-
- mp = dp->d_conn;
- if (mp == 0 || !eq(mp->d_name, "scbus")) {
+ if (dp->d_type != DEVICE || dp->d_conn == 0 ||
+ !eq(dp->d_conn, "scbus"))
continue;
- }
-
- if (mp->d_conn == 0 &&
- (dp->d_target != UNKNOWN && dp->d_target != QUES)) {
- fprintf(stderr,
- "Warning: %s%s is configured at ",
- dp->d_name, wnum(dp->d_unit));
-
- fprintf(stderr,
- "%s%s which is not fixed at a single adapter.\n",
- mp->d_name, wnum(mp->d_unit));
- }
fprintf(fp, "{ ");
fprintf(fp, "\"%s\", ", dp->d_name);
- id_put(fp, dp->d_unit, ", ");
- id_put(fp, mp->d_unit, ", ");
- id_put(fp, dp->d_target, ", ");
- id_put(fp, dp->d_lun, ", ");
+ fprintf(fp, "%d, ", dp->d_unit);
+ fprintf(fp, "%d, ", dp->d_connunit);
+ fprintf(fp, "%d, ", dp->d_target);
+ fprintf(fp, "%d, ", dp->d_lun);
fprintf(fp, " 0x%x },\n", dp->d_flags);
}
fprintf(fp, "{ 0, 0, 0, 0, 0, 0 }\n");
fprintf(fp, "};\n");
}
-
-static char *
-qu(num)
- int num;
-{
-
- if (num == QUES)
- return ("'?'");
- if (num == UNKNOWN)
- return (" -1");
- (void) snprintf(errbuf, sizeof(errbuf), "%3d", num);
- return (errbuf);
-}
-
-static char *
-wnum(num)
- int num;
-{
-
- if (num == QUES || num == UNKNOWN)
- return ("?");
- (void) snprintf(errbuf, sizeof(errbuf), "%d", num);
- return (errbuf);
-}
OpenPOWER on IntegriCloud