Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src For the simple cases, augment device-major with information ...



details:   https://anonhg.NetBSD.org/src/rev/28efc1cf4669
branches:  trunk
changeset: 754451:28efc1cf4669
user:      pooka <pooka%NetBSD.org@localhost>
date:      Fri Apr 30 20:47:17 2010 +0000

description:
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)

diffstat:

 sys/arch/i386/conf/majors.i386 |   6 +++---
 sys/conf/files                 |   4 ++--
 sys/conf/majors                |  38 +++++++++++++++++++-------------------
 sys/sys/conf.h                 |  14 +++++++++++++-
 usr.bin/config/defs.h          |   5 +++--
 usr.bin/config/gram.y          |  32 +++++++++++++++++++++++++++-----
 usr.bin/config/mkdevsw.c       |  32 +++++++++++++++++++++++++++++---
 usr.bin/config/scan.l          |   5 ++++-
 usr.bin/config/sem.c           |  16 ++++++++++------
 usr.bin/config/sem.h           |   5 +++--
 10 files changed, 113 insertions(+), 44 deletions(-)

diffs (truncated from 389 to 300 lines):

diff -r abade940cf41 -r 28efc1cf4669 sys/arch/i386/conf/majors.i386
--- a/sys/arch/i386/conf/majors.i386    Fri Apr 30 20:28:13 2010 +0000
+++ b/sys/arch/i386/conf/majors.i386    Fri Apr 30 20:47:17 2010 +0000
@@ -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
diff -r abade940cf41 -r 28efc1cf4669 sys/conf/files
--- a/sys/conf/files    Fri Apr 30 20:28:13 2010 +0000
+++ b/sys/conf/files    Fri Apr 30 20:47:17 2010 +0000
@@ -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
diff -r abade940cf41 -r 28efc1cf4669 sys/conf/majors
--- a/sys/conf/majors   Fri Apr 30 20:28:13 2010 +0000
+++ b/sys/conf/majors   Fri Apr 30 20:47:17 2010 +0000
@@ -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
diff -r abade940cf41 -r 28efc1cf4669 sys/sys/conf.h
--- a/sys/sys/conf.h    Fri Apr 30 20:28:13 2010 +0000
+++ b/sys/sys/conf.h    Fri Apr 30 20:47:17 2010 +0000
@@ -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);
diff -r abade940cf41 -r 28efc1cf4669 usr.bin/config/defs.h
--- a/usr.bin/config/defs.h     Fri Apr 30 20:28:13 2010 +0000
+++ b/usr.bin/config/defs.h     Fri Apr 30 20:47:17 2010 +0000
@@ -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 */
 };
 
 /*
diff -r abade940cf41 -r 28efc1cf4669 usr.bin/config/gram.y
--- a/usr.bin/config/gram.y     Fri Apr 30 20:28:13 2010 +0000
+++ b/usr.bin/config/gram.y     Fri Apr 30 20:47:17 2010 +0000
@@ -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; };
diff -r abade940cf41 -r 28efc1cf4669 usr.bin/config/mkdevsw.c
--- a/usr.bin/config/mkdevsw.c  Fri Apr 30 20:28:13 2010 +0000
+++ b/usr.bin/config/mkdevsw.c  Fri Apr 30 20:47:17 2010 +0000
@@ -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"
diff -r abade940cf41 -r 28efc1cf4669 usr.bin/config/scan.l
--- a/usr.bin/config/scan.l     Fri Apr 30 20:28:13 2010 +0000
+++ b/usr.bin/config/scan.l     Fri Apr 30 20:47:17 2010 +0000
@@ -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



Home | Main Index | Thread Index | Old Index