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/port/mkdevc

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 #!/bin/rc
    2 
    3 awk -v 'objtype='$objtype -v 'pwd='`{pwd} '
    4 BEGIN{
    5         if(ARGC < 2)
    6                 exit
    7 }
    8 
    9 /^[ \t]*$/{
   10         next;
   11 }
   12 /^#/{
   13         next;
   14 }
   15 collect && /^[^ \t]/{
   16         collect = 0;
   17 }
   18 collect && section ~ "dev"{
   19         dev[ndev++] = $1;
   20         if($1 ~ "ad")
   21                 devad = 1;
   22         else if($1 ~ "sd")
   23                 devsd = 1;
   24         else if($1 ~ "uart")
   25                 devuart = 1;
   26         else if($1 ~ "vga")
   27                 devvga = 1;
   28         for(i = 2; i <= NF; i++){
   29                 if($i ~ "dma" && objtype ~ "(386|alpha|amd64)")
   30                         i8237dma++;
   31         }
   32 }
   33 collect && section ~ "ip"{
   34         ip[nip++] = $1;
   35 }
   36 collect && section ~ "link"{
   37         link[nlink++] = $1;
   38 }
   39 collect && section ~ "misc"{
   40         sub(/^[ \t]*/, "");
   41         misc[nmisc++] = $1;
   42         if($1 ~ "^arch.*")
   43                 arch[narch++] = $1;
   44         else if($1 ~ "^ad.*")
   45                 adifc[nadifc++] = $1;
   46         else if($1 ~ "^sd.*")
   47                 sdifc[nsdifc++] = $1;
   48         else if($1 ~ "^uart.*")
   49                 physuart[nphysuart++] = substr($1, 5, length($1)-4) "physuart";
   50         else if($1 ~ "^vga.*"){
   51                 if(NF == 1)
   52                         vgadev[nvgadev++] = $1;
   53                 else for(i = 2; i <= NF; i++){
   54                         if($i ~ "[+]cur")
   55                                 vgadev[nvgadev++] = $1;
   56                         if($i ~ "[+=]cur")
   57                                 vgacur[nvgacur++] = $1;
   58                 }
   59         }
   60 }
   61 
   62 collect && section ~ "port"{
   63         sub(/^[ \t]*/, "");
   64         port[nport++] = $0;
   65 }
   66 $0 ~ /^[^ \t]/{
   67         if($0 ~ "(bootdir|dev|ip|link|misc|port)"){
   68                 section = $0;
   69                 collect = 1;
   70         }
   71         next;
   72 }
   73 
   74 END{
   75         if(ARGC < 2)
   76                 exit "usage"
   77 
   78         printf "#include \"u.h\"\n";
   79         printf "#include \"../port/lib.h\"\n";
   80         printf "#include \"mem.h\"\n";
   81         printf "#include \"dat.h\"\n";
   82         printf "#include \"fns.h\"\n";
   83         printf "#include \"io.h\"\n";
   84         printf "#include \"../port/error.h\"\n\n";
   85 
   86         for(i = 0; i < ndev; i++)
   87                 printf "extern Dev %sdevtab;\n", dev[i];
   88         printf "Dev* devtab[]={\n";
   89         for(i = 0; i < ndev; i++)
   90                 printf "\t&%sdevtab,\n", dev[i];
   91         printf "\tnil,\n};\n\n";
   92 
   93         if(objtype ~ "(386|alpha|amd64)"){
   94                 alloc = "nil";
   95                 if(i8237dma){
   96                         printf "extern void _i8237alloc(void);\n";
   97                         alloc = "_i8237alloc";
   98                 }
   99                 printf "void (*i8237alloc)(void) = %s;\n", alloc;
  100                 printf "int i8237dma = %d;\n\n", i8237dma;
  101         }
  102 
  103         for(i = 0; i < nlink; i++)
  104                 printf "extern void %slink(void);\n", link[i];
  105 
  106         printf "void links(void){\n";
  107         print "\tbootlinks();\n";
  108         for(i = 0; i < nlink; i++)
  109                 printf "\t%slink();\n", link[i];
  110         printf "}\n\n";
  111 
  112         if(narch || objtype ~ "386"){
  113                 for(i = 0; i < narch; i++)
  114                         printf "extern PCArch %s;\n", arch[i];
  115                 printf "PCArch* knownarch[] = {\n";
  116                 for(i = 0; i < narch; i++)
  117                         printf "\t&%s,\n", arch[i];
  118                 printf "\tnil,\n};\n\n";
  119         }
  120 
  121         if(devad){
  122                 printf "#include \"../port/ad.h\"\n";
  123                 for(i = 0; i < nadifc; i++)
  124                         printf "extern ADifc %sifc;\n", adifc[i];
  125                 printf "ADifc* adifc[] = {\n";
  126                 for(i = 0; i < nadifc; i++)
  127                         printf "\t&%sifc,\n", adifc[i];
  128                 printf "\tnil,\n};\n\n";
  129         }
  130         if(devsd){
  131                 printf "#include \"../port/sd.h\"\n";
  132                 for(i = 0; i < nsdifc; i++)
  133                         printf "extern SDifc %sifc;\n", sdifc[i];
  134                 printf "SDifc* sdifc[] = {\n";
  135                 for(i = 0; i < nsdifc; i++)
  136                         printf "\t&%sifc,\n", sdifc[i];
  137                 printf "\tnil,\n};\n\n";
  138         }
  139 
  140         if(devuart){
  141                 for(i = 0; i < nphysuart; i++)
  142                         printf "extern PhysUart %s;\n", physuart[i];
  143                 printf "PhysUart* physuart[] = {\n";
  144                 for(i = 0; i < nphysuart; i++)
  145                         printf "\t&%s,\n", physuart[i];
  146                 printf "\tnil,\n};\n\n";
  147         }
  148 
  149         if(devvga){
  150                 printf "#define Image   IMAGE\n";
  151                 printf "#include <draw.h>\n";
  152                 printf "#include <memdraw.h>\n";
  153                 printf "#include <cursor.h>\n";
  154                 printf "#include \"screen.h\"\n";
  155 
  156                 for(i = 0; i < nvgadev; i++)
  157                         printf "extern VGAdev %sdev;\n", vgadev[i];
  158                 printf "VGAdev* vgadev[] = {\n";
  159                 for(i = 0; i < nvgadev; i++)
  160                         printf "\t&%sdev,\n", vgadev[i];
  161                 printf "\tnil,\n};\n\n";
  162 
  163                 for(i = 0; i < nvgacur; i++)
  164                         printf "extern VGAcur %scur;\n", vgacur[i];
  165                 printf "VGAcur* vgacur[] = {\n";
  166                 for(i = 0; i < nvgacur; i++)
  167                         printf "\t&%scur,\n", vgacur[i];
  168                 printf "\tnil,\n};\n\n";
  169         }
  170         
  171         if(nip){
  172                 printf "#include \"../ip/ip.h\"\n";
  173                 for(i = 0; i < nip; i++)
  174                         printf "extern void %sinit(Fs*);\n", ip[i];
  175                 printf "void (*ipprotoinit[])(Fs*) = {\n";
  176                 for(i = 0; i < nip; i++)
  177                         printf "\t%sinit,\n", ip[i];
  178                 printf "\tnil,\n};\n\n";
  179         }
  180 
  181         if(nport){
  182                 for(i = 0; i < nport; i++)
  183                         printf "%s\n", port[i];
  184                 printf "\n";
  185         }
  186 
  187         printf "char* conffile = \"%s/%s\";\n", pwd, ARGV[1];
  188         printf "ulong kerndate = KERNDATE;\n";
  189 
  190         exit
  191 }' $*

Cache object: c4ab20200f65fc42fedd9c7bcba2baac


[ 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.