The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/netiso/xebec/putdriver.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: putdriver.c,v 1.6 2001/11/13 01:10:52 lukem Exp $      */
    2 
    3 /*
    4  * This code is such a kludge that I don't want to put my name on it.
    5  * It was a ridiculously fast hack and needs rewriting.
    6  * However it does work...
    7  */
    8 
    9 /* The original idea was to put all the driver code
   10  * in one place so it would be easy to modify
   11  * but as hacks got thrown in it got worse and worse...
   12  * It's to the point where a user would be better off
   13  * writing his own driver and xebec should JUST produce
   14  * the tables.
   15  */
   16 
   17 #include <sys/cdefs.h>
   18 __KERNEL_RCSID(0, "$NetBSD: putdriver.c,v 1.6 2001/11/13 01:10:52 lukem Exp $");
   19 
   20 #include <stdio.h>
   21 #include "main.h"
   22 #include "debug.h"
   23 
   24 extern char protocol[];
   25 char Eventshiftstring[10];
   26 static char statename[] = {'_', 's', 't', 'a', 't', 'e', 0 };
   27 
   28 static char *strings[] = {
   29 
   30 #define PART1 { 0,3 }
   31 
   32         "\n#include \"",
   33         kerneldirname,
   34         protocol,
   35         "_states.h\"",
   36         (char *)0,
   37         (char *)0,
   38         (char *)0,
   39         (char *)0,
   40         (char *)0,
   41         (char *)0,
   42 
   43 #define PART12 { 10,12 }
   44         "\n\nstatic struct act_ent {\n",
   45         "\tint a_newstate;\n\tint a_action;\n",
   46         "} statetable[] = { {0,0},\n",
   47         (char *)0,
   48         (char *)0,
   49         (char *)0,
   50         (char *)0,
   51         (char *)0,
   52         (char *)0,
   53         (char *)0,
   54 
   55 #define PART2 { 20,20 }
   56         "};\n",
   57         (char *)0,
   58         (char *)0,
   59         (char *)0,
   60         (char *)0,
   61         (char *)0,
   62         (char *)0,
   63         (char *)0,
   64         (char *)0,
   65         (char *)0,
   66 
   67 #define PART3 { 30,41 }
   68         "\n",
   69         protocol,
   70         "_driver(p, e)\nregister ",
   71         protocol,
   72         PCBNAME,
   73         " *p;\nregister struct ",
   74         protocol,
   75         "_event *e;\n",
   76         "{\n",
   77                 "\tregister int index, error=0;\n",
   78                 "\tstruct act_ent *a;\n",
   79                 "\tstatic struct act_ent erroraction = {0,-1};\n",
   80         (char *)0,
   81         (char *)0,
   82         (char *)0,
   83         (char *)0,
   84         (char *)0,
   85         (char *)0,
   86         (char *)0,
   87         (char *)0,
   88 
   89 #define PART4 { 50,54 }
   90 
   91         "\textern int ",
   92         protocol,
   93         "_debug;\n\textern FILE *",
   94         protocol,
   95         "_astringfile;\n", 
   96         (char *)0,
   97         (char *)0,
   98         (char *)0,
   99         (char *)0,
  100         (char *)0,
  101 
  102 #define PART6 { 60, 65 }
  103         "\n\tindex = inx[1 + e->ev_number][p->",
  104                 protocol,
  105                 statename,
  106                 "];\n\tif(index<0) index=_Xebec_index(e, p);\n",
  107                 "\tif (index==0) {\n\t\ta = &erroraction;\n",
  108                 "\t} else\n\t\ta = &statetable[index];\n\n",
  109         (char *)0,
  110         (char *)0,
  111         (char *)0,
  112         (char *)0,
  113 
  114 #define PART7 {70, 77 }
  115         "\tif(",
  116         protocol,
  117         "_debug) fprintf(",
  118         protocol,
  119         "_astringfile, \"%15s <-- %15s [%15s] \\n\\t%s\\n\",\n",
  120         "\t\tsstring[a->a_newstate], sstring[p->",
  121         protocol,
  122         "_state], estring[e->ev_number], astring[a->a_action]);\n\n",
  123         (char *)0,
  124         (char *)0,
  125 
  126 #define PART8 { 80, 84 }
  127                 "\tif(a->a_action)\n",
  128                 "\t\terror = _Xebec_action( a->a_action, e, p );\n",
  129                 "\tif(error==0)\n\tp->",
  130                 protocol,
  131                 "_state = a->a_newstate;\n\treturn error;\n}\n",
  132         (char *)0,
  133         (char *)0,
  134         (char *)0,
  135         (char *)0,
  136         (char *)0,
  137 
  138 #define PART9 { 90, 99 }
  139         "\n_XEBEC_PG int _Xebec_action(a,e,p)\nint a;\nstruct ",
  140         protocol,
  141         "_event *e;\n",
  142         protocol, 
  143         PCBNAME,
  144         " *p;\n{\n",
  145         "switch(a) {\n",
  146         "case -1:  return ",
  147         protocol,
  148         "_protocol_error(e,p);\n",
  149         (char *)0,
  150 
  151 #define PART10 { 101, 105 }
  152         "\tif(",
  153         protocol,
  154         "_debug) fprintf(",
  155         protocol,
  156         "_astringfile, \"index 0x%5x\\n\", index);\n",
  157         (char *)0,
  158         (char *)0,
  159         (char *)0,
  160         (char *)0,
  161 
  162 #define PART5 { 110, 121 }
  163         "\n_XEBEC_PG int\n_Xebec_index( e,p )\n",
  164         "\tstruct ",
  165         protocol,
  166         "_event *e;\n\t", 
  167         protocol, 
  168         PCBNAME,
  169         " *p;\n{\nswitch( (e->ev_number<<",
  170         Eventshiftstring,
  171         ")+(p->",
  172         protocol, 
  173         statename,
  174         ") ) {\n", 
  175         (char *)0,
  176         (char *)0,
  177         (char *)0,
  178         (char *)0,
  179         (char *)0,
  180         (char *)0,
  181         (char *)0,
  182         (char *)0,
  183 
  184 #define PART11 {130, 137 }
  185         "\tIFTRACE(D_DRIVER)\n",
  186         "\t",
  187         protocol,
  188         "trace(DRIVERTRACE,",
  189         "\t\ta->a_newstate, p->",
  190         protocol,
  191         "_state, e->ev_number, a->a_action, 0);\n\n",
  192         "\tENDTRACE\n",
  193         (char *)0,
  194         (char *)0,
  195 
  196 #define PART13 {140, 147 }
  197         "\tif(",
  198         protocol,
  199         "_debug) fprintf(",
  200         protocol,
  201         "_astringfile, \"%15s <-- %15s [%15s] \\n\",\n",
  202         "\t\tsstring[a->a_newstate], sstring[p->",
  203         protocol,
  204         "_state], estring[e->ev_number]);\n\n",
  205         (char *)0,
  206         (char *)0,
  207 
  208 #define PART14 { 150,150 }
  209         "#define _XEBEC_PG static\n",
  210 
  211 #define PART15 { 151,151 }
  212         "#define _XEBEC_PG  \n",
  213 
  214 };
  215 
  216 static struct { int start; int finish; } parts[] = {
  217         { 0,0 },
  218         PART1,
  219         PART2,
  220         PART3,
  221         PART4,
  222         PART5,
  223         PART6,
  224         PART7,
  225         PART8,
  226         PART9,
  227         PART10,
  228         PART11,
  229         PART12,
  230         PART13,
  231         PART14,
  232         PART15,
  233 };
  234 
  235 void
  236 putdriver(f, x) 
  237         FILE *f;
  238         int x;
  239 {
  240         register int i; 
  241 
  242         for( i = parts[x].start; i<= parts[x].finish; i++)
  243                 fprintf(f, "%s", strings[i]);
  244         IFDEBUG(d)
  245                 fflush(f);
  246         ENDDEBUG
  247 }

Cache object: 4a654c15556c670035fddd5ddffc070d


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.