%token CPU IDENT CONFIG ANY DEVICE UBA MBA NEXUS CSR DRIVE VECTOR OPTIONS
%token CONTROLLER PSEUDO_DEVICE FLAGS SEMICOLON TRACE
%token DISK SLAVE HZ TIMEZONE DST MAXUSERS
%token MASTER PRIORITY COMMA MINUS EQUALS AT
/* config.y 1.16 82/10/25 */
= { do_trace = !do_trace; } |
if (!strcmp($2, "vax")) {
} else if (!strcmp($2, "sun")) {
yyerror("Unknown machine type");
(struct cputype *)malloc(sizeof (struct cputype));
= { mkconf(temp_id, $3); free(temp_id); } |
= { yyerror("HZ specification obsolete; delete"); } |
= { timezone = 60 * $2; check_tz(); } |
= { timezone = 60 * $2; dst = 1; check_tz(); } |
= { timezone = $2; check_tz(); } |
= { timezone = $2; dst = 1; check_tz(); } |
= { timezone = -60 * $3; check_tz(); } |
TIMEZONE MINUS NUMBER DST
= { timezone = -60 * $3; dst = 1; check_tz(); } |
= { timezone = -$3; check_tz(); } |
TIMEZONE MINUS FPNUMBER DST
= { timezone = -$3; dst = 1; check_tz(); } |
struct opt *op = (struct opt *)malloc(sizeof (struct opt));
struct opt *op = (struct opt *)malloc(sizeof (struct opt));
= { $$ = val_id = ns($1); } |
= { char nb[16]; $$ = val_id = ns(sprintf(nb, "%d", $1)); };
= { $$ = temp_id = ns($1); }
DEVICE Dev_name Dev_info Int_spec
= { cur.d_type = DEVICE; } |
MASTER Dev_name Dev_info Int_spec
= { cur.d_type = MASTER; } |
DISK Dev_name Dev_info Int_spec
= { cur.d_dk = 1; cur.d_type = DEVICE; } |
CONTROLLER Dev_name Dev_info Int_spec
= { cur.d_type = CONTROLLER; } |
PSEUDO_DEVICE Init_dev Dev
cur.d_type = PSEUDO_DEVICE;
PSEUDO_DEVICE Init_dev Dev NUMBER
cur.d_type = PSEUDO_DEVICE;
if (eq(cur.d_name, "mba") || eq(cur.d_name, "uba"))
"%s must be connected to a nexus", cur.d_name));
cur.d_conn = connect($2, $3);
= { check_nexus(&cur, $3); cur.d_conn = TO_NEXUS; };
= { cur.d_drive = $2; } |
if (cur.d_conn != 0 && cur.d_conn != TO_NEXUS &&
cur.d_conn->d_type == MASTER)
yyerror("can't specify slave--not to master");
struct idlst *a = (struct idlst *)malloc(sizeof(struct idlst));
a->id = $1; a->id_next = 0; $$ = a;
struct idlst *a = (struct idlst *)malloc(sizeof(struct idlst));
a->id = $1; a->id_next = $2; $$ = a;
fprintf(stderr, "config: %s at line %d\n", s, yyline);
* return the passed string in a new space
cp = malloc((unsigned)(strlen(str)+1));
* add a device to the list of devices
register struct device *dp;
register struct device *np;
np = (struct device *) malloc(sizeof *np);
* note that a configuration should be made
register struct file_list *fl;
fl = (struct file_list *) malloc(sizeof *fl);
fl->f_needs = ns(sysname);
* find the pointer to connect to the given device and number.
* returns 0 if no such device and prints an error message
register struct device *dp;
for (dp = dtab; dp != 0; dp = dp->d_next) {
if ((num != dp->d_unit) || !eq(dev, dp->d_name))
if (dp->d_type != CONTROLLER && dp->d_type != MASTER) {
"%s connected to non-controller", dev));
yyerror(sprintf(errbuf, "%s %d not defined", dev, num));
* connect to an unspecific thing
register struct device *dp, *dcp;
* First make certain that there are some of these to wildcard on
for (dp = dtab; dp != 0; dp = dp->d_next)
yyerror(sprintf(errbuf, "no %s's to wildcard", dev));
* 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)
* If there isn't, make one because everything needs to be connected
* 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
if (dcp == TO_NEXUS || dcp == 0)
dp->d_conn = connect(dcp->d_name, QUES);
register struct device *dp;
dp->d_addr = dp->d_pri = dp->d_flags = dp->d_dk = 0;
dp->d_slave = dp->d_drive = dp->d_unit = UNKNOWN;
* make certain that this is a reasonable type of thing to connect to a nexus
register struct device *dev;
if (!eq(dev->d_name, "uba") && !eq(dev->d_name, "mba"))
yyerror("only uba's and mba's should be connected to the nexus");
yyerror("can't give specific nexus numbers");
if (!eq(dev->d_name, "mb"))
yyerror("only mb's should be connected to the nexus");
* Check the timezone to make certain it is sensible
if (abs(timezone) > 12 * 60)
yyerror("timezone is unreasonable");