Module Name: src Committed By: pooka Date: Fri Apr 30 20:47:18 UTC 2010
Modified Files: src/sys/arch/i386/conf: majors.i386 src/sys/conf: files majors src/sys/sys: conf.h src/usr.bin/config: defs.h gram.y mkdevsw.c scan.l sem.c sem.h Log Message: For the simple cases, augment device-major with information on how a driver expects /dev/node -> minor mappings to go and include that information in devsw_conv. (no, I didn't plow through all the MD majors files) To generate a diff of this commit: cvs rdiff -u -r1.39 -r1.40 src/sys/arch/i386/conf/majors.i386 cvs rdiff -u -r1.988 -r1.989 src/sys/conf/files cvs rdiff -u -r1.50 -r1.51 src/sys/conf/majors cvs rdiff -u -r1.136 -r1.137 src/sys/sys/conf.h cvs rdiff -u -r1.34 -r1.35 src/usr.bin/config/defs.h src/usr.bin/config/sem.c cvs rdiff -u -r1.23 -r1.24 src/usr.bin/config/gram.y cvs rdiff -u -r1.8 -r1.9 src/usr.bin/config/mkdevsw.c cvs rdiff -u -r1.15 -r1.16 src/usr.bin/config/scan.l cvs rdiff -u -r1.6 -r1.7 src/usr.bin/config/sem.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/i386/conf/majors.i386 diff -u src/sys/arch/i386/conf/majors.i386:1.39 src/sys/arch/i386/conf/majors.i386:1.40 --- src/sys/arch/i386/conf/majors.i386:1.39 Sat Mar 6 23:45:39 2010 +++ src/sys/arch/i386/conf/majors.i386 Fri Apr 30 20:47:17 2010 @@ -1,4 +1,4 @@ -# $NetBSD: majors.i386,v 1.39 2010/03/06 23:45:39 plunky Exp $ +# $NetBSD: majors.i386,v 1.40 2010/04/30 20:47:17 pooka Exp $ # # Device majors for i386 # @@ -6,7 +6,7 @@ device-major cons char 0 device-major ctty char 1 device-major mem char 2 -device-major wd char 3 block 0 wd +device-major wd char 3 block 0 wd vector=8:8 device-major swap char 4 block 1 vmswap device-major pts char 5 pty device-major ptc char 6 pty @@ -26,7 +26,7 @@ device-major uk char 20 uk device-major apm char 21 apm device-major filedesc char 22 -device-major bpf char 23 bpfilter +device-major bpf char 23 bpfilter vector=8,linkzero device-major md char 24 block 17 md device-major joy char 26 joy Index: src/sys/conf/files diff -u src/sys/conf/files:1.988 src/sys/conf/files:1.989 --- src/sys/conf/files:1.988 Fri Apr 16 13:44:49 2010 +++ src/sys/conf/files Fri Apr 30 20:47:17 2010 @@ -1,7 +1,7 @@ -# $NetBSD: files,v 1.988 2010/04/16 13:44:49 pooka Exp $ +# $NetBSD: files,v 1.989 2010/04/30 20:47:17 pooka Exp $ # @(#)files.newconf 7.5 (Berkeley) 5/10/93 -version 20090313 +version 20100430 # # device classes Index: src/sys/conf/majors diff -u src/sys/conf/majors:1.50 src/sys/conf/majors:1.51 --- src/sys/conf/majors:1.50 Fri Apr 30 20:28:13 2010 +++ src/sys/conf/majors Fri Apr 30 20:47:17 2010 @@ -1,4 +1,4 @@ -# $NetBSD: majors,v 1.50 2010/04/30 20:28:13 pooka Exp $ +# $NetBSD: majors,v 1.51 2010/04/30 20:47:17 pooka Exp $ # # Device majors for Machine-Independent drivers. # @@ -9,37 +9,37 @@ # # Majors 160-255 are used for the MI drivers. -device-major crypto char 160 crypto -device-major pf char 161 pf +device-major crypto char 160 crypto single +device-major pf char 161 pf single #obsolete vinum char 162 vinum -device-major fss char 163 block 163 fss +device-major fss char 163 block 163 fss vector=4 device-major pps char 164 pps device-major ptm char 165 pty -device-major atabus char 166 atabus -device-major drvctl char 167 drvctl +device-major atabus char 166 atabus vector=4 +device-major drvctl char 167 drvctl single device-major dk char 168 block 168 -device-major tap char 169 tap +device-major tap char 169 tap vector=4 device-major veriexec char 170 veriexec device-major fw char 171 ieee1394if device-major ucycom char 172 ucycom -device-major gpio char 173 gpio -device-major utoppy char 174 utoppy -device-major bthub char 175 bthub -device-major amr char 176 amr -device-major lockstat char 177 lockstat +device-major gpio char 173 gpio vector=8,linkzero +device-major utoppy char 174 utoppy vector=2 +device-major bthub char 175 bthub single +device-major amr char 176 amr vector=1 +device-major lockstat char 177 lockstat single device-major putter char 178 putter -device-major srt char 179 srt +device-major srt char 179 srt device-major drm char 180 drmbase -device-major bio char 181 bio -device-major altmem char 182 block 182 altmem +device-major bio char 181 bio single +device-major altmem char 182 block 182 altmem device-major twa char 187 twa -device-major cpuctl char 188 -device-major pad char 189 pad +device-major cpuctl char 188 single +device-major pad char 189 pad vector=4,linkzero device-major zfs char 190 block 190 zfs device-major tprof char 191 tprof device-major isv char 192 isv -device-major video char 193 video +device-major video char 193 video vector=4 device-major dm char 194 block 169 dm -device-major hdaudio char 195 hdaudio +device-major hdaudio char 195 hdaudio vector=4 device-major uhso char 196 uhso device-major rumpblk char 197 block 197 rumpblk Index: src/sys/sys/conf.h diff -u src/sys/sys/conf.h:1.136 src/sys/sys/conf.h:1.137 --- src/sys/sys/conf.h:1.136 Thu Apr 29 12:32:48 2010 +++ src/sys/sys/conf.h Fri Apr 30 20:47:17 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: conf.h,v 1.136 2010/04/29 12:32:48 pooka Exp $ */ +/* $NetBSD: conf.h,v 1.137 2010/04/30 20:47:17 pooka Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -228,10 +228,22 @@ #endif #define DEV_ZERO 12 /* minor device 12 is '\0'/rathole */ +enum devnode_class { + DEVNODE_DONTBOTHER, + DEVNODE_SINGLE, + DEVNODE_VECTOR +}; +#define DEVNODE_FLAG_LINKZERO 0x01 /* create name -> name0 link */ + struct devsw_conv { const char *d_name; devmajor_t d_bmajor; devmajor_t d_cmajor; + + /* information about /dev nodes related to the device */ + enum devnode_class d_class; + int d_flags; + int d_vectdim[2]; }; void devsw_init(void); Index: src/usr.bin/config/defs.h diff -u src/usr.bin/config/defs.h:1.34 src/usr.bin/config/defs.h:1.35 --- src/usr.bin/config/defs.h:1.34 Mon Mar 22 14:40:54 2010 +++ src/usr.bin/config/defs.h Fri Apr 30 20:47:18 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: defs.h,v 1.34 2010/03/22 14:40:54 pooka Exp $ */ +/* $NetBSD: defs.h,v 1.35 2010/04/30 20:47:18 pooka Exp $ */ /* * Copyright (c) 1992, 1993 @@ -104,7 +104,7 @@ * The next two lines define the current version of the config(1) binary, * and the minimum version of the configuration files it supports. */ -#define CONFIG_VERSION 20090313 +#define CONFIG_VERSION 20100430 #define CONFIG_MINVERSION 0 /* @@ -371,6 +371,7 @@ devmajor_t dm_cmajor; /* character major */ devmajor_t dm_bmajor; /* block major */ struct nvlist *dm_opts; /* options */ + struct nvlist *dm_devnodes; /* information on /dev nodes */ }; /* Index: src/usr.bin/config/sem.c diff -u src/usr.bin/config/sem.c:1.34 src/usr.bin/config/sem.c:1.35 --- src/usr.bin/config/sem.c:1.34 Mon Mar 8 10:19:15 2010 +++ src/usr.bin/config/sem.c Fri Apr 30 20:47:18 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: sem.c,v 1.34 2010/03/08 10:19:15 pooka Exp $ */ +/* $NetBSD: sem.c,v 1.35 2010/04/30 20:47:18 pooka Exp $ */ /* * Copyright (c) 1992, 1993 @@ -1492,24 +1492,27 @@ void adddevm(const char *name, devmajor_t cmajor, devmajor_t bmajor, - struct nvlist *nv) + struct nvlist *nv_opts, struct nvlist *nv_nodes) { struct devm *dm; if (cmajor != NODEVMAJOR && (cmajor < 0 || cmajor >= 4096)) { cfgerror("character major %d is invalid", cmajor); - nvfreel(nv); + nvfreel(nv_opts); + nvfreel(nv_nodes); return; } if (bmajor != NODEVMAJOR && (bmajor < 0 || bmajor >= 4096)) { cfgerror("block major %d is invalid", bmajor); - nvfreel(nv); + nvfreel(nv_opts); + nvfreel(nv_nodes); return; } if (cmajor == NODEVMAJOR && bmajor == NODEVMAJOR) { cfgerror("both character/block majors are not specified"); - nvfreel(nv); + nvfreel(nv_opts); + nvfreel(nv_nodes); return; } @@ -1519,7 +1522,8 @@ dm->dm_name = name; dm->dm_cmajor = cmajor; dm->dm_bmajor = bmajor; - dm->dm_opts = nv; + dm->dm_opts = nv_opts; + dm->dm_devnodes = nv_nodes; TAILQ_INSERT_TAIL(&alldevms, dm, dm_next); Index: src/usr.bin/config/gram.y diff -u src/usr.bin/config/gram.y:1.23 src/usr.bin/config/gram.y:1.24 --- src/usr.bin/config/gram.y:1.23 Mon Mar 8 11:12:32 2010 +++ src/usr.bin/config/gram.y Fri Apr 30 20:47:18 2010 @@ -1,5 +1,5 @@ %{ -/* $NetBSD: gram.y,v 1.23 2010/03/08 11:12:32 pooka Exp $ */ +/* $NetBSD: gram.y,v 1.24 2010/04/30 20:47:18 pooka Exp $ */ /* * Copyright (c) 1992, 1993 @@ -73,6 +73,7 @@ #define new_px(p, x) new0(NULL, NULL, p, 0, x) #define new_sx(s, x) new0(NULL, s, NULL, 0, x) #define new_nsx(n,s,x) new0(n, s, NULL, 0, x) +#define new_i(i) new0(NULL, NULL, NULL, i, NULL) #define fx_atom(s) new0(s, NULL, NULL, FX_ATOM, NULL) #define fx_not(e) new0(NULL, NULL, NULL, FX_NOT, e) @@ -108,14 +109,15 @@ %token ENDFILE %token XFILE FILE_SYSTEM FLAGS %token IDENT IOCONF +%token LINKZERO %token XMACHINE MAJOR MAKEOPTIONS MAXUSERS MAXPARTITIONS MINOR %token NEEDS_COUNT NEEDS_FLAG NO %token XOBJECT OBSOLETE ON OPTIONS %token PACKAGE PLUSEQ PREFIX PSEUDO_DEVICE PSEUDO_ROOT %token ROOT -%token SOURCE +%token SINGLE SOURCE %token TYPE -%token VERSION +%token VECTOR VERSION %token WITH %token <num> NUMBER %token <str> PATHNAME QSTRING WORD EMPTYSTRING @@ -156,6 +158,7 @@ %type <list> subarches_opt subarches %type <str> filename stringvalue locname mkvarname %type <val> device_major_block device_major_char +%type <list> devnodes devnodetype devnodeflags devnode_dims %% @@ -208,8 +211,8 @@ XOBJECT filename fopts oflgs { addobject($2, $3, $4); }; device_major: - DEVICE_MAJOR WORD device_major_char device_major_block fopts - { adddevm($2, $3, $4, $5); }; + DEVICE_MAJOR WORD device_major_char device_major_block fopts devnodes + { adddevm($2, $3, $4, $5, $6); }; device_major_block: BLOCK NUMBER { $$ = $2.val; } | @@ -242,6 +245,25 @@ NEEDS_COUNT { $$ = FI_NEEDSCOUNT; } | NEEDS_FLAG { $$ = FI_NEEDSFLAG; }; +devnodes: + devnodetype ',' devnodeflags { $$ = nvcat($1, $3); } | + devnodetype { $$ = $1; } | + /* empty */ { $$ = new_s("DEVNODE_DONTBOTHER"); }; + +devnodetype: + SINGLE { $$ = new_s("DEVNODE_SINGLE"); } | + VECTOR '=' devnode_dims { $$ = nvcat(new_s("DEVNODE_VECTOR"), $3); }; + +devnode_dims: + NUMBER ':' NUMBER { struct nvlist *__nv1, *__nv2; + __nv1 = new_i($1.val); + __nv2 = new_i($3.val); + $$ = nvcat(__nv1, __nv2); } | + NUMBER { $$ = new_i($1.val); } + +devnodeflags: + LINKZERO { $$ = new_s("DEVNODE_FLAG_LINKZERO");}; + oflgs: oflgs oflag { $$ = $1 | $2; } | /* empty */ { $$ = 0; }; Index: src/usr.bin/config/mkdevsw.c diff -u src/usr.bin/config/mkdevsw.c:1.8 src/usr.bin/config/mkdevsw.c:1.9 --- src/usr.bin/config/mkdevsw.c:1.8 Thu Apr 15 12:35:57 2010 +++ src/usr.bin/config/mkdevsw.c Fri Apr 30 20:47:18 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: mkdevsw.c,v 1.8 2010/04/15 12:35:57 pooka Exp $ */ +/* $NetBSD: mkdevsw.c,v 1.9 2010/04/30 20:47:18 pooka Exp $ */ /* * Copyright (c) 2002 The NetBSD Foundation, Inc. @@ -162,8 +162,34 @@ fputs("\n/* device conversion table */\n" "struct devsw_conv devsw_conv0[] = {\n", fp); TAILQ_FOREACH(dm, &alldevms, dm_next) { - fprintf(fp, "\t{ \"%s\", %d, %d },\n", dm->dm_name, - dm->dm_bmajor, dm->dm_cmajor); + struct nvlist *nv; + const char *d_class, *d_flags = "0"; + int d_vec[2] = { 0, 0 }; + int i = 0; + + /* + * "parse" info. currently the rules are simple: + * 1) first entry defines class + * 2) next ones without n_str are d_vectdim + * 3) next one with n_str is d_flags + * 4) EOL + */ + nv = dm->dm_devnodes; + d_class = nv->nv_str; + while ((nv = nv->nv_next) != NULL) { + if (i > 2) + panic("invalid devnode definition"); + if (nv->nv_str) { + d_flags = nv->nv_str; + break; + } + d_vec[i++] = nv->nv_num; + } + + fprintf(fp, "\t{ \"%s\", %d, %d, %s, %s, { %d, %d }},\n", + dm->dm_name, dm->dm_bmajor, dm->dm_cmajor, + d_class, d_flags, d_vec[0], d_vec[1]); + } fputs("};\n\n" "struct devsw_conv *devsw_conv = devsw_conv0;\n" Index: src/usr.bin/config/scan.l diff -u src/usr.bin/config/scan.l:1.15 src/usr.bin/config/scan.l:1.16 --- src/usr.bin/config/scan.l:1.15 Mon Mar 8 10:19:14 2010 +++ src/usr.bin/config/scan.l Fri Apr 30 20:47:18 2010 @@ -1,5 +1,5 @@ %{ -/* $NetBSD: scan.l,v 1.15 2010/03/08 10:19:14 pooka Exp $ */ +/* $NetBSD: scan.l,v 1.16 2010/04/30 20:47:18 pooka Exp $ */ /* * Copyright (c) 1992, 1993 @@ -146,6 +146,7 @@ flags return FLAGS; ident return IDENT; ioconf return IOCONF; +linkzero return LINKZERO; machine return XMACHINE; major return MAJOR; makeoptions return MAKEOPTIONS; @@ -163,8 +164,10 @@ pseudo-device return PSEUDO_DEVICE; pseudo-root return PSEUDO_ROOT; root return ROOT; +single return SINGLE; source return SOURCE; type return TYPE; +vector return VECTOR; version return VERSION; with return WITH; Index: src/usr.bin/config/sem.h diff -u src/usr.bin/config/sem.h:1.6 src/usr.bin/config/sem.h:1.7 --- src/usr.bin/config/sem.h:1.6 Mon Mar 8 10:19:15 2010 +++ src/usr.bin/config/sem.h Fri Apr 30 20:47:18 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: sem.h,v 1.6 2010/03/08 10:19:15 pooka Exp $ */ +/* $NetBSD: sem.h,v 1.7 2010/04/30 20:47:18 pooka Exp $ */ /* * Copyright (c) 1992, 1993 @@ -67,7 +67,8 @@ void addpseudo(const char *, int); void delpseudo(const char *); void addpseudoroot(const char *); -void adddevm(const char *, int, int, struct nvlist *); +void adddevm(const char *, int, int, + struct nvlist *, struct nvlist *); int fixdevis(void); const char *ref(const char *); const char *starref(const char *);