summaryrefslogtreecommitdiffstats
path: root/usr.sbin/config
diff options
context:
space:
mode:
authorrgrimes <rgrimes@FreeBSD.org>1994-05-26 13:24:02 +0000
committerrgrimes <rgrimes@FreeBSD.org>1994-05-26 13:24:02 +0000
commitc8f1a26f8dda7f5350f6d52f5bbc4f5ec1a46cc4 (patch)
tree091be2a230c62c316ca02cf1016e73b206c14d25 /usr.sbin/config
parent28839c379536620b072ba59884f5eed06d72e94d (diff)
downloadFreeBSD-src-c8f1a26f8dda7f5350f6d52f5bbc4f5ec1a46cc4.zip
FreeBSD-src-c8f1a26f8dda7f5350f6d52f5bbc4f5ec1a46cc4.tar.gz
Upgrade config to be compatible with our i386 port, pull in 95% of the
changes that have been made in FreeBSD 1.x, except for possibly the nfs diskless support this is a completed config.
Diffstat (limited to 'usr.sbin/config')
-rw-r--r--usr.sbin/config/Makefile2
-rw-r--r--usr.sbin/config/config.844
-rw-r--r--usr.sbin/config/config.h2
-rw-r--r--usr.sbin/config/config.y10
-rw-r--r--usr.sbin/config/main.c1
-rw-r--r--usr.sbin/config/mkglue.c72
-rw-r--r--usr.sbin/config/mkioconf.c178
-rw-r--r--usr.sbin/config/mkmakefile.c24
-rw-r--r--usr.sbin/config/mkswapconf.c21
9 files changed, 205 insertions, 149 deletions
diff --git a/usr.sbin/config/Makefile b/usr.sbin/config/Makefile
index d21a5c3..6ef4311 100644
--- a/usr.sbin/config/Makefile
+++ b/usr.sbin/config/Makefile
@@ -4,7 +4,7 @@ PROG= config
CFLAGS+=-I. -I${.CURDIR}
SRCS= config.c main.c lang.c mkioconf.c mkmakefile.c mkglue.c mkheaders.c \
mkswapconf.c
-MAN8= config.0
+MAN8= config.8
DPADD= ${LIBL}
LDADD= -ll
CLEANFILES+=y.tab.h lang.c config.c y.tab.c
diff --git a/usr.sbin/config/config.8 b/usr.sbin/config/config.8
index aef26a2..0e4bae2 100644
--- a/usr.sbin/config/config.8
+++ b/usr.sbin/config/config.8
@@ -39,17 +39,17 @@
.Nd build system configuration files
.Sh SYNOPSIS
.Nm config
-.Op Fl p
-.Ar system_name
+.Op Fl gp
+.Ar SYSTEM_NAME
.Sh DESCRIPTION
.Pp
This is the old version of the
.Nm config
program.
It understands the old autoconfiguration scheme
-used on the HP300, DECstation, and derivative platforms.
+used on the HP300, i386, DECstation, and derivative platforms.
The new version of config is used with the
-SPARC and i386 platforms.
+SPARC platform.
Only the version of
.Nm config
applicable to the architecture that you are running
@@ -73,6 +73,12 @@ section below)
Available option and operand:
.Pp
.Bl -tag -width SYSTEM_NAME
+.It Fl g
+If the
+.Fl g
+option is supplied,
+.Nm config
+will configure a system for debugging.
.It Fl p
If the
.Fl p
@@ -92,24 +98,22 @@ and other system parameters for one system configuration.
should be run from the
.Pa conf
subdirectory of the system source (usually
-.Pa /sys/conf ) .
+.Pa /sys/ARCH/conf ) .
.Nm Config
assumes the directory
-.Pa ../SYSTEM_NAME
+.Pa ../../compile/SYSTEM_NAME
exists and places all output files there.
The output of
.Nm config
consists of a number of files; for the
-.Tn VAX ,
+.Tn i386 ,
they are:
.Pa ioconf.c ,
a description
of what I/O devices are attached to the system;
-.Pa ubglue.s ,
+.Pa vector.h ,
a set of interrupt service routines for devices
-attached to the
-.Tn UNIBUS ;
-.Pa ubvec.s ,
+attached to the bus plus
offsets into a structure used for counting per-device interrupts;
.Pa Makefile ,
used by
@@ -140,20 +144,20 @@ should be run again.
Attempts to compile a system that had configuration errors
are likely to fail.
.Sh FILES
-.Bl -tag -width /sys/conf/Makefile.vax -compact
-.It Pa /sys/conf/Makefile.vax
-generic makefile for the
-.Tn VAX
+.Bl -tag -width /sys/i386/conf/Makefile.i386 -compact
.It Pa /sys/conf/files
list of common files system is built from
-.It Pa /sys/conf/files.vax
+.It Pa /sys/i386/conf/Makefile.i386
+generic makefile for the
+.Tn i386
+.It Pa /sys/i386/conf/files.i386
list of
-.Tn VAX
+.Tn i386
specific files
-.It Pa /sys/conf/devices.vax
+.It Pa /sys/i386/conf/devices.i386
name to major device mapping file for the
-.Tn VAX
-.It Pa /sys/conf/files. Ns Em ERNIE
+.Tn i386
+.It Pa /sys/i386/conf/files. Ns Em ERNIE
list of files specific to
.Em ERNIE
system
diff --git a/usr.sbin/config/config.h b/usr.sbin/config/config.h
index 6cd4d7f..012a249 100644
--- a/usr.sbin/config/config.h
+++ b/usr.sbin/config/config.h
@@ -203,10 +203,10 @@ struct file_list *ftab, *conf_list, **confp, *comp_list, **compp;
int zone, hadtz;
int dst;
-int hz;
int profiling;
int debugging;
int maxusers;
+u_int loadaddress;
#define eq(a,b) (!strcmp(a,b))
diff --git a/usr.sbin/config/config.y b/usr.sbin/config/config.y
index 6784d9e..69b29b3 100644
--- a/usr.sbin/config/config.y
+++ b/usr.sbin/config/config.y
@@ -191,7 +191,7 @@ Config_spec:
System_spec
|
HZ NUMBER
- = { hz = $2; }|
+ = { yyerror("HZ specification obsolete; delete"); } |
TIMEZONE NUMBER
= { zone = 60 * $2; check_tz(); } |
TIMEZONE NUMBER DST NUMBER
@@ -235,12 +235,18 @@ System_parameter_list:
;
System_parameter:
- swap_spec
+ addr_spec
+ | swap_spec
| root_spec
| dump_spec
| arg_spec
;
+addr_spec:
+ AT NUMBER
+ = { loadaddress = $2; };
+ ;
+
swap_spec:
SWAP optional_on swap_device_list
;
diff --git a/usr.sbin/config/main.c b/usr.sbin/config/main.c
index 37030f0..372e17d 100644
--- a/usr.sbin/config/main.c
+++ b/usr.sbin/config/main.c
@@ -101,6 +101,7 @@ usage: fputs("usage: config [-gp] sysname\n", stderr);
exit(2);
}
+ loadaddress = -1;
dtab = NULL;
confp = &conf_list;
compp = &comp_list;
diff --git a/usr.sbin/config/mkglue.c b/usr.sbin/config/mkglue.c
index e738515..f941e5f 100644
--- a/usr.sbin/config/mkglue.c
+++ b/usr.sbin/config/mkglue.c
@@ -338,31 +338,24 @@ vector() {
register struct device *dp, *mp;
int count;
- fp = fopen(path("vector.s"), "w");
+ fp = fopen(path("vector.h"), "w");
if (fp == 0) {
- perror(path("vector.s"));
+ perror(path("vector.h"));
exit(1);
}
- fprintf(fp,"\
+ fprintf(fp, "\
/*\n\
* AT/386\n\
- * Interrupt vector routines\n\
+ * Macros for interrupt vector routines\n\
* Generated by config program\n\
- */ \n\
-\n\
-#include \"i386/isa/isa.h\"\n\
-#include \"i386/isa/icu.h\"\n\
-\n\
-#define VEC(name) .align 4; .globl _V/**/name; _V/**/name:\n\n");
+ */\n\
+\n");
- fprintf(fp,"\
- .globl _hardclock\n\
-VEC(clk)\n\
- INTR1(0, _highmask, 0)\n\
- call _hardclock \n\
- INTREXIT1\n\n\n");
+ fprintf(fp, "\
+#define BUILD_VECTORS \\\n\
+ BUILD_VECTOR(clk, 0,0,0, _high_imask, _clkintr,1,1, al);\\\n");
- count=0;
+ count=1;
for (dp = dtab; dp != 0; dp = dp->d_next) {
mp = dp->d_conn;
if (mp != 0 && /* mp != (struct device *)-1 &&*/
@@ -372,29 +365,36 @@ VEC(clk)\n\
for (id = dp->d_vec; id; id = id->id_next) {
for (id2 = dp->d_vec; id2; id2 = id2->id_next) {
if (id2 == id) {
- if(dp->d_irq == -1) continue;
- fprintf(fp,"\t.globl _%s, _%s%dmask\n\t.data\n",
- id->id, dp->d_name, dp->d_unit);
- fprintf(fp,"_%s%dmask:\t.long 0\n\t.text\n",
- dp->d_name, dp->d_unit);
- fprintf(fp,"VEC(%s%d)\n\tINTR%d(%d, ",
- dp->d_name, dp->d_unit,
- dp->d_irq / 8 + 1, dp->d_unit);
- if(eq(dp->d_mask,"null"))
- fprintf(fp,"_%s%dmask, ",
- dp->d_name, dp->d_unit);
- else
- fprintf(fp,"_%smask, ",
- dp->d_mask);
- fprintf(fp,"%d)\n\tcall\t_%s\n\tINTREXIT%d\n\n\n",
- ++count, id->id, (dp->d_irq > 7)?2:1);
- break;
+ build_vector(fp, dp, id, count);
+ count++;
+ if (!strcmp(id->id, id2->id))
+ break;
}
- if (!strcmp(id->id, id2->id))
- break;
}
}
}
}
+ fprintf(fp, "\n\n#define NR_REAL_INT_HANDLERS %d\n", count);
(void) fclose(fp);
}
+
+build_vector(fp, dp, id, offset)
+ register FILE *fp;
+ register struct device *dp;
+ struct idlst *id;
+ int offset;
+{
+ fprintf(fp, "\tBUILD_%sVECTOR(%s%d, %d,%d,%d",
+ strcmp(dp->d_name, "sio") == 0 ? "FAST_" : "",
+ dp->d_name, dp->d_unit, dp->d_unit, dp->d_irq, offset);
+ if (eq(dp->d_mask, "null"))
+ fprintf(fp, ", _%s%d_imask,", dp->d_name, dp->d_unit);
+ else
+ fprintf(fp, ", _%s_imask, ", dp->d_mask);
+ fprintf(fp, " _%s,%d,1", id->id, 1 + dp->d_irq / 8);
+ if (dp->d_irq < 8)
+ fprintf(fp, ", al");
+ else
+ fprintf(fp, "_AND_2, ah");
+ fprintf(fp, ");\\\n");
+}
diff --git a/usr.sbin/config/mkioconf.c b/usr.sbin/config/mkioconf.c
index 394ca7e..5a0e89b 100644
--- a/usr.sbin/config/mkioconf.c
+++ b/usr.sbin/config/mkioconf.c
@@ -599,6 +599,7 @@ hpbadslave(mp, dp)
#endif
#if MACHINE_I386
+char *shandler();
char *sirq();
i386_ioconf()
@@ -619,14 +620,14 @@ i386_ioconf()
fprintf(fp, "#include \"machine/pte.h\"\n");
fprintf(fp, "#include \"sys/param.h\"\n");
fprintf(fp, "#include \"sys/buf.h\"\n");
- fprintf(fp, "#include \"sys/map.h\"\n");
fprintf(fp, "\n");
- fprintf(fp, "#define V(s) __CONCAT(V,s)\n");
+ fprintf(fp, "#define V(s)\t__CONCAT(V,s)\n");
fprintf(fp, "#define C (caddr_t)\n\n");
/*
* First print the isa initialization structures
*/
if (seen_isa) {
+ int seen_wdc = 0, seen_fdc = 0;
fprintf(fp, "/*\n");
fprintf(fp, " * ISA devices\n");
@@ -640,88 +641,107 @@ i386_ioconf()
if (mp == 0 || mp == TO_NEXUS ||
!eq(mp->d_name, "isa"))
continue;
- fprintf(fp,
-"extern struct isa_driver %sdriver; extern V(%s%d)();\n",
- dp->d_name, dp->d_name, dp->d_unit);
- }
- fprintf(fp, "\nstruct isa_device isa_devtab_bio[] = {\n");
- fprintf(fp, "\
-/* driver iobase irq drq maddr msiz intr unit */\n");
- for (dp = dtab; dp != 0; dp = dp->d_next) {
- mp = dp->d_conn;
- if (dp->d_unit == QUES || mp == 0 ||
- mp == TO_NEXUS || !eq(mp->d_name, "isa"))
- continue;
- if (!eq(dp->d_mask, "bio")) continue;
- if (dp->d_port)
- fprintf(fp, "{ &%sdriver, %8.8s,", dp->d_name, dp->d_port);
- else
- fprintf(fp, "{ &%sdriver, 0x%03x,", dp->d_name, dp->d_portn);
- fprintf(fp, " %5.5s, %2d, C 0x%05X, %5d, V(%s%d), %2d },\n",
- sirq(dp->d_irq), dp->d_drq, dp->d_maddr,
- dp->d_msize, dp->d_name, dp->d_unit, dp->d_unit);
+ fprintf(fp, "extern struct isa_driver %3.3sdriver;",
+ dp->d_name);
+ if(eq(dp->d_name, "wdc")) seen_wdc++;
+ if(eq(dp->d_name, "fdc")) seen_fdc++;
+ if (dp->d_irq == 2)
+ {
+ fprintf(stderr, "remapped irq 2 to irq 9, please update your config file\n");
+ dp->d_irq = 9;
+ }
+ if (dp->d_irq != -1)
+ fprintf(fp, " extern void %s();", shandler(dp));
+ fprintf(fp, "\n");
}
- fprintf(fp, "0\n};\n");
+ isa_devtab(fp, "bio");
+ if(seen_wdc)
+ isa_biotab(fp, "wdc");
+ if(seen_fdc)
+ isa_biotab(fp, "fdc");
+ isa_devtab(fp, "tty");
+ isa_devtab(fp, "net");
+ isa_devtab(fp, "null");
+ }
+ /* XXX David did this differently!!! */
+ /* pseudo_ioconf(fp); */
+ (void) fclose(fp);
+}
- fprintf(fp, "struct isa_device isa_devtab_tty[] = {\n");
- fprintf(fp, "\
-/* driver iobase irq drq maddr msiz intr unit */\n");
- for (dp = dtab; dp != 0; dp = dp->d_next) {
- mp = dp->d_conn;
- if (dp->d_unit == QUES || mp == 0 ||
- mp == TO_NEXUS || !eq(mp->d_name, "isa"))
- continue;
- if (!eq(dp->d_mask, "tty")) continue;
- if (dp->d_port)
- fprintf(fp, "{ &%sdriver, %8.8s,", dp->d_name, dp->d_port);
- else
- fprintf(fp, "{ &%sdriver, 0x%03x,", dp->d_name, dp->d_portn);
- fprintf(fp, " %5.5s, %2d, C 0x%05X, %5d, V(%s%d), %2d },\n",
- sirq(dp->d_irq), dp->d_drq, dp->d_maddr,
- dp->d_msize, dp->d_name, dp->d_unit, dp->d_unit);
- }
- fprintf(fp, "0\n};\n\n");
+isa_biotab(fp, table)
+ FILE *fp;
+ char *table;
+{
+ register struct device *dp, *mp;
- fprintf(fp, "struct isa_device isa_devtab_net[] = {\n");
- fprintf(fp, "\
-/* driver iobase irq drq maddr msiz intr unit */\n");
- for (dp = dtab; dp != 0; dp = dp->d_next) {
- mp = dp->d_conn;
- if (dp->d_unit == QUES || mp == 0 ||
- mp == TO_NEXUS || !eq(mp->d_name, "isa"))
- continue;
- if (!eq(dp->d_mask, "net")) continue;
- if (dp->d_port)
- fprintf(fp, "{ &%sdriver, %8.8s,", dp->d_name, dp->d_port);
- else
- fprintf(fp, "{ &%sdriver, 0x%03x,", dp->d_name, dp->d_portn);
- fprintf(fp, " %5.5s, %2d, C 0x%05X, %5d, V(%s%d), %2d },\n",
- sirq(dp->d_irq), dp->d_drq, dp->d_maddr,
- dp->d_msize, dp->d_name, dp->d_unit, dp->d_unit);
- }
- fprintf(fp, "0\n};\n\n");
+ fprintf(fp, "\n\nstruct isa_device isa_biotab_%s[] = {\n", table);
+ fprintf(fp, "\
+/* driver iobase irq drq maddr msiz intr unit flags drive*/\n");
+ for (dp = dtab; dp != 0; dp = dp->d_next) {
+ mp = dp->d_conn;
+ if (dp->d_unit == QUES || mp == 0 ||
+ mp == TO_NEXUS || !eq(mp->d_name, table))
+ continue;
+ fprintf(fp, "{ &%3.3sdriver, %8.8s,",
+ mp->d_name, mp->d_port);
+ fprintf(fp, "%6.6s, %2d, C 0x%05X, %5d, %8.8s, %2d, 0x%04X, %2d },\n",
+ sirq(mp->d_irq), mp->d_drq, mp->d_maddr,
+ mp->d_msize, shandler(mp), dp->d_unit,
+ dp->d_flags, dp->d_drive);
+ }
+ fprintf(fp, "0\n};\n");
+}
- fprintf(fp, "struct isa_device isa_devtab_null[] = {\n");
- fprintf(fp, "\
-/* driver iobase irq drq maddr msiz intr unit */\n");
- for (dp = dtab; dp != 0; dp = dp->d_next) {
- mp = dp->d_conn;
- if (dp->d_unit == QUES || mp == 0 ||
- mp == TO_NEXUS || !eq(mp->d_name, "isa"))
- continue;
- if (!eq(dp->d_mask, "null")) continue;
- if (dp->d_port)
- fprintf(fp, "{ &%sdriver, %8.8s,", dp->d_name, dp->d_port);
- else
- fprintf(fp, "{ &%sdriver, 0x%03x,", dp->d_name, dp->d_portn);
- fprintf(fp, " %5.5s, %2d, C 0x%05X, %5d, V(%s%d), %2d },\n",
- sirq(dp->d_irq), dp->d_drq, dp->d_maddr,
- dp->d_msize, dp->d_name, dp->d_unit, dp->d_unit);
- }
- fprintf(fp, "0\n};\n\n");
+/*
+ * Generized routine for isa bus device table, instead of repeating
+ * all this 4 times, call this with the table argument.
+ *
+ * 4/26/93 rgrimes
+ */
+isa_devtab(fp, table)
+ FILE *fp;
+ char *table;
+{
+ register struct device *dp, *mp;
+
+ fprintf(fp, "\n\nstruct isa_device isa_devtab_%s[] = {\n", table);
+ fprintf(fp, "\
+/* driver iobase irq drq maddr msiz intr unit flags */\n");
+ for (dp = dtab; dp != 0; dp = dp->d_next) {
+ mp = dp->d_conn;
+ if (dp->d_unit == QUES || mp == 0 ||
+ mp == TO_NEXUS || !eq(mp->d_name, "isa"))
+ continue;
+ if (strcmp(dp->d_mask, table)) continue;
+ if (dp->d_port)
+ fprintf(fp, "{ &%3.3sdriver, %8.8s,",
+ dp->d_name, dp->d_port);
+ else
+ fprintf(fp, "{ &%3.3sdriver, 0x%04x,",
+ dp->d_name, dp->d_portn);
+ fprintf(fp, "%6.6s, %2d, C 0x%05X, %5d, %8.8s, %2d, 0x%04X },\n",
+ sirq(dp->d_irq), dp->d_drq, dp->d_maddr,
+ dp->d_msize, shandler(dp), dp->d_unit,
+ dp->d_flags);
}
- pseudo_ioconf(fp);
- (void) fclose(fp);
+ fprintf(fp, "0\n};\n");
+}
+
+/*
+ * XXX - there should be a general function to print devtabs instead of these
+ * little pieces of it.
+ */
+
+char *
+shandler(dp)
+ register struct device *dp;
+{
+ static char buf[32 + 20];
+
+ if (dp->d_irq == -1)
+ return ("NULL");
+ sprintf(buf, "V(%.32s%d)", dp->d_name, dp->d_unit);
+ return (buf);
}
char *
diff --git a/usr.sbin/config/mkmakefile.c b/usr.sbin/config/mkmakefile.c
index fed803d..366ec23 100644
--- a/usr.sbin/config/mkmakefile.c
+++ b/usr.sbin/config/mkmakefile.c
@@ -153,6 +153,7 @@ makefile()
perror(path("Makefile"));
exit(1);
}
+ fprintf(ofp, "KERN_IDENT=%s\n", raise(ident));
fprintf(ofp, "IDENT=-D%s", raise(ident));
if (profiling)
fprintf(ofp, " -DGPROF");
@@ -185,11 +186,11 @@ makefile()
maxusers = up->u_min;
} else if (maxusers > up->u_max)
printf("warning: maxusers > %d (%d)\n", up->u_max, maxusers);
- fprintf(ofp, "PARAM=-DTIMEZONE=%d -DDST=%d -DMAXUSERS=%d",
+ fprintf(ofp, "PARAM=-DTIMEZONE=%d -DDST=%d -DMAXUSERS=%d\n",
zone, dst, maxusers);
- if (hz > 0)
- fprintf(ofp, " -DHZ=%d", hz);
- fprintf(ofp, "\n");
+ if (loadaddress != -1) {
+ fprintf(ofp, "LOAD_ADDRESS=%X\n", loadaddress);
+ }
for (op = mkopt; op; op = op->op_next)
fprintf(ofp, "%s=%s\n", op->op_name, op->op_value);
if (debugging)
@@ -241,6 +242,10 @@ openit:
perror(fname);
exit(1);
}
+ if(ident == NULL) {
+ printf("no ident line specified\n");
+ exit(1);
+ }
next:
/*
* filename [ standard | optional ] [ config-dependent ]
@@ -266,6 +271,15 @@ next:
}
if (wd == 0)
goto next;
+ /*************************************************\
+ * If it's a comment ignore to the end of the line *
+ \*************************************************/
+ if(wd[0] == '#')
+ {
+ while( ((wd = get_word(fp)) != (char *)EOF) && wd)
+ ;
+ goto next;
+ }
this = ns(wd);
next_word(fp, wd);
if (wd == 0) {
@@ -584,7 +598,7 @@ do_systemspec(f, fl, first)
fprintf(f, "%s: ${SYSTEM_DEP} swap%s.o", fl->f_needs, fl->f_fn);
if (first)
- fprintf(f, " newvers");
+ fprintf(f, " vers.o");
fprintf(f, "\n\t${SYSTEM_LD_HEAD}\n");
fprintf(f, "\t${SYSTEM_LD} swap%s.o\n", fl->f_fn);
fprintf(f, "\t${SYSTEM_LD_TAIL}\n\n");
diff --git a/usr.sbin/config/mkswapconf.c b/usr.sbin/config/mkswapconf.c
index e499973..3cbef69 100644
--- a/usr.sbin/config/mkswapconf.c
+++ b/usr.sbin/config/mkswapconf.c
@@ -193,6 +193,7 @@ devtoname(dev)
initdevtable()
{
+ char linebuf[256];
char buf[BUFSIZ];
int maj;
register struct devdescription **dp = &devtable;
@@ -204,11 +205,21 @@ initdevtable()
fprintf(stderr, "config: can't open %s\n", buf);
exit(1);
}
- while (fscanf(fp, "%s\t%d\n", buf, &maj) == 2) {
- *dp = (struct devdescription *)malloc(sizeof (**dp));
- (*dp)->dev_name = ns(buf);
- (*dp)->dev_major = maj;
- dp = &(*dp)->dev_next;
+ while(fgets(linebuf,256,fp)) {
+ /*******************************\
+ * Allow a comment *
+ \*******************************/
+ if(linebuf[0] == '#') continue;
+
+ if (sscanf(linebuf, "%s\t%d\n", buf, &maj) == 2) {
+ *dp = (struct devdescription *)malloc(sizeof (**dp));
+ (*dp)->dev_name = ns(buf);
+ (*dp)->dev_major = maj;
+ dp = &(*dp)->dev_next;
+ } else {
+ fprintf(stderr,"illegal line in devices file\n");
+ break;
+ }
}
*dp = 0;
fclose(fp);
OpenPOWER on IntegriCloud