summaryrefslogtreecommitdiffstats
path: root/usr.sbin/config/config.y
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/config/config.y')
-rw-r--r--usr.sbin/config/config.y251
1 files changed, 21 insertions, 230 deletions
diff --git a/usr.sbin/config/config.y b/usr.sbin/config/config.y
index 018be5b..0de3e91 100644
--- a/usr.sbin/config/config.y
+++ b/usr.sbin/config/config.y
@@ -4,48 +4,25 @@
struct file_list *file;
}
-%token ANY
%token ARCH
-%token AT
-%token BUS
%token COMMA
%token CONFIG
-%token CONFLICTS
-%token CONTROLLER
%token CPU
%token DEVICE
-%token DISABLE
-%token DISK
-%token DRIVE
-%token DRQ
%token EQUALS
-%token FLAGS
+%token HINTS
%token IDENT
-%token IOMEM
-%token IOSIZ
-%token IRQ
%token MAXUSERS
-%token MINUS
-%token NEXUS
%token OPTIONS
%token MAKEOPTIONS
-%token PORT
-%token PSEUDO_DEVICE
%token SEMICOLON
-%token TAPE
-%token TARGET
-%token TTY
-%token UNIT
-%token VECTOR
%token <str> ID
%token <val> NUMBER
-%token <val> FPNUMBER
%type <str> Save_id
%type <str> Opt_value
%type <str> Dev
-%type <str> device_name
%{
@@ -97,6 +74,7 @@ static struct device *curp = 0;
struct device *dtab;
char *ident;
+char *hints;
int yyline;
struct file_list *ftab;
char errbuf[80];
@@ -104,8 +82,7 @@ int maxusers;
#define ns(s) strdup(s)
-static int connect __P((char *, int));
-static void yyerror __P((char *s));
+static void yyerror(char *s);
%}
@@ -163,7 +140,9 @@ Config_spec:
System_spec
|
MAXUSERS NUMBER
- = { maxusers = $2; };
+ = { maxusers = $2; } |
+ HINTS ID
+ = { hints = $2; };
System_spec:
CONFIG System_id System_parameter_list
@@ -190,41 +169,6 @@ System_parameter_list:
| ID
;
-device_name:
- Save_id
- = { $$ = $1; }
- | Save_id NUMBER
- = {
- char buf[80];
-
- (void) snprintf(buf, sizeof(buf), "%s%d", $1, $2);
- $$ = ns(buf); free($1);
- }
- | Save_id NUMBER ID
- = {
- char buf[80];
-
- (void) snprintf(buf, sizeof(buf), "%s%d%s", $1, $2, $3);
- $$ = ns(buf); free($1);
- }
- | Save_id NUMBER ID NUMBER
- = {
- char buf[80];
-
- (void) snprintf(buf, sizeof(buf), "%s%d%s%d",
- $1, $2, $3, $4);
- $$ = ns(buf); free($1);
- }
- | Save_id NUMBER ID NUMBER ID
- = {
- char buf[80];
-
- (void) snprintf(buf, sizeof(buf), "%s%d%s%d%s",
- $1, $2, $3, $4, $5);
- $$ = ns(buf); free($1);
- }
- ;
-
Opt_list:
Opt_list COMMA Option
|
@@ -304,111 +248,25 @@ Dev:
;
Device_spec:
- DEVICE Dev_spec
- = { cur.d_type = DEVICE; } |
- DISK Dev_spec
- = {
- warnx("line %d: Obsolete keyword 'disk' found - use 'device'", yyline);
- cur.d_type = DEVICE;
- } |
- TAPE Dev_spec
+ DEVICE Dev
= {
- warnx("line %d: Obsolete keyword 'tape' found - use 'device'", yyline);
cur.d_type = DEVICE;
- } |
- CONTROLLER Dev_spec
- = {
- warnx("line %d: Obsolete keyword 'controller' found - use 'device'", yyline);
- cur.d_type = DEVICE;
- } |
- PSEUDO_DEVICE Init_dev Dev
- = {
- cur.d_name = $3;
- cur.d_type = PSEUDO_DEVICE;
- } |
- PSEUDO_DEVICE Init_dev Dev NUMBER
- = {
- cur.d_name = $3;
- cur.d_type = PSEUDO_DEVICE;
- cur.d_count = $4;
- } ;
-
-Dev_spec:
- Init_dev Dev
- = {
cur.d_name = $2;
- cur.d_unit = UNKNOWN;
+ cur.d_count = UNKNOWN;
} |
- Init_dev Dev NUMBER Dev_info
+ DEVICE Dev NUMBER
= {
+ cur.d_type = DEVICE;
cur.d_name = $2;
- cur.d_unit = $3;
- };
-
-Init_dev:
- /* lambda */
- = { init_dev(&cur); };
-
-Dev_info:
- Con_info Info_list
- |
- /* lambda */
- ;
-
-Con_info:
- AT Dev NUMBER
- = {
- connect($2, $3);
- cur.d_conn = $2;
- cur.d_connunit = $3;
- } |
- AT NEXUS NUMBER
- = {
- cur.d_conn = "nexus";
- cur.d_connunit = 0;
- };
-
-Info_list:
- Info_list Info
- |
- /* lambda */
- ;
-
-Info:
- BUS NUMBER /* device scbus1 at ahc0 bus 1 - twin channel */
- = { cur.d_bus = $2; } |
- TARGET NUMBER
- = { cur.d_target = $2; } |
- UNIT NUMBER
- = { cur.d_lun = $2; } |
- DRIVE NUMBER
- = { cur.d_drive = $2; } |
- IRQ NUMBER
- = { cur.d_irq = $2; } |
- DRQ NUMBER
- = { cur.d_drq = $2; } |
- IOMEM NUMBER
- = { cur.d_maddr = $2; } |
- IOSIZ NUMBER
- = { cur.d_msize = $2; } |
- PORT device_name
- = { cur.d_port = $2; } |
- PORT NUMBER
- = { cur.d_portn = $2; } |
- FLAGS NUMBER
- = { cur.d_flags = $2; } |
- DISABLE
- = { cur.d_disabled = 1; } |
- CONFLICTS
- = {
- warnx("line %d: Obsolete keyword 'conflicts' found", yyline);
- };
+ cur.d_count = $3;
+ if (cur.d_count == 0)
+ warnx("line %d: devices with zero units are not likely to be correct", yyline);
+ } ;
%%
static void
-yyerror(s)
- char *s;
+yyerror(char *s)
{
warnx("line %d: %s", yyline + 1, s);
@@ -418,23 +276,16 @@ yyerror(s)
* add a device to the list of devices
*/
static void
-newdev(dp)
- register struct device *dp;
+newdev(struct device *dp)
{
- register struct device *np, *xp;
-
- if (dp->d_unit >= 0) {
- for (xp = dtab; xp != 0; xp = xp->d_next) {
- if ((xp->d_unit == dp->d_unit) &&
- eq(xp->d_name, dp->d_name)) {
- warnx("line %d: already seen device %s%d",
- yyline, xp->d_name, xp->d_unit);
- }
- }
- }
+ struct device *np;
+
np = (struct device *) malloc(sizeof *np);
memset(np, 0, sizeof(*np));
*np = *dp;
+ np->d_name = dp->d_name;
+ np->d_type = dp->d_type;
+ np->d_count = dp->d_count;
np->d_next = 0;
if (curp == 0)
dtab = np;
@@ -442,63 +293,3 @@ newdev(dp)
curp->d_next = np;
curp = np;
}
-
-
-/*
- * find the pointer to connect to the given device and number.
- * returns 0 if no such device and prints an error message
- */
-static int
-connect(dev, num)
- register char *dev;
- register int num;
-{
- register struct device *dp;
-
- 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 != DEVICE) {
- (void) snprintf(errbuf, sizeof(errbuf),
- "%s connected to non-device", dev);
- yyerror(errbuf);
- return (0);
- }
- return (1);
- }
- (void) snprintf(errbuf, sizeof(errbuf), "%s %d not defined", dev, num);
- yyerror(errbuf);
- return (0);
-}
-
-void
-init_dev(dp)
- register struct device *dp;
-{
-
- dp->d_name = "OHNO!!!";
- dp->d_type = DEVICE;
- dp->d_conn = 0;
- dp->d_disabled = 0;
- dp->d_flags = 0;
- 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;
- dp->d_irq = -1;
- dp->d_drq = -1;
- dp->d_maddr = 0;
- dp->d_msize = 0;
-}
OpenPOWER on IntegriCloud