[BACK]Return to MAKEDEV.tmpl CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / etc

Annotation of src/etc/MAKEDEV.tmpl, Revision 1.108

1.1       jdolecek    1: #!/bin/sh -
1.108   ! hauke       2: #      $NetBSD: MAKEDEV.tmpl,v 1.107 2008/04/30 13:10:49 martin Exp $
1.1       jdolecek    3: #
1.104     apb         4: # Copyright (c) 2003,2007,2008 The NetBSD Foundation, Inc.
1.1       jdolecek    5: # All rights reserved.
                      6: #
                      7: # Redistribution and use in source and binary forms, with or without
                      8: # modification, are permitted provided that the following conditions
                      9: # are met:
                     10: # 1. Redistributions of source code must retain the above copyright
                     11: #    notice, this list of conditions and the following disclaimer.
                     12: # 2. Redistributions in binary form must reproduce the above copyright
                     13: #    notice, this list of conditions and the following disclaimer in the
                     14: #    documentation and/or other materials provided with the distribution.
                     15: #
                     16: # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
                     17: # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     18: # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
                     19: # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
                     20: # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     21: # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     22: # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     23: # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     24: # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     25: # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     26: # POSSIBILITY OF SUCH DAMAGE.
                     27: #
                     28: #
                     29: ###########################################################################
                     30: #
                     31: #   PLEASE RUN "cd ../share/man/man8 ; make makedevs"
                     32: #   AFTER CHANGING THIS FILE, AND COMMIT THE UPDATED MANPAGE!
                     33: #
                     34: ###########################################################################
                     35: #
1.19      jdolecek   36: # Device "make" file.  Valid special arguments:
1.1       jdolecek   37: #      all     makes all known devices, including local devices.
                     38: #              Tries to make the 'standard' number of each type.
                     39: #      init    A set of devices that is used for MFS /dev by init.
                     40: #              May be equal to "all".
                     41: #      floppy  devices to be put on install floppies
                     42: #      ramdisk devices to be put into INSTALL kernel ramdisks.
                     43: #      std     standard devices
                     44: #      local   configuration specific devices
1.19      jdolecek   45: #      wscons  make wscons devices
1.1       jdolecek   46: #      usbs    make USB devices
                     47: #      isdns   make ISDN devices
                     48: #
                     49: # Tapes:
                     50: #      st*     SCSI tapes
                     51: #      wt*     QIC-interfaced (e.g. not SCSI) 3M cartridge tape
                     52: #      ht*     MASSBUS TM03 and TU??
                     53: #      mt*     MSCP tapes (e.g. TU81, TK50)
                     54: #      tm*     UNIBUS TM11 and TE10 emulations (e.g. Emulex TC-11)
                     55: #      ts*     UNIBUS TS11
                     56: #      ut*     UNIBUS TU45 emulations (e.g. si 9700)
                     57: #      uu*     TU58 cassettes on DL11 controller
                     58: #
                     59: # Disks:
                     60: #      ccd*    concatenated disk devices
                     61: #      cd*     SCSI or ATAPI CD-ROM
                     62: #      cgd*    cryptographic disk devices
                     63: #      raid*   RAIDframe disk devices
                     64: #      sd*     SCSI disks
                     65: #      wd*     "winchester" disk drives (ST506,IDE,ESDI,RLL,...)
                     66: #      bmd*    Nereid bank memory disks
                     67: #      ed*     IBM PS/2 ESDI disk devices
                     68: #      fd*     "floppy" disk drives (3 1/2", 5 1/4")
1.11      hannken    69: #      fss*    Files system snapshot devices
1.1       jdolecek   70: #      gdrom*  Dreamcast "gigadisc" CD-ROM drive
                     71: #      hk*     UNIBUS RK06 and RK07
                     72: #      hp*     MASSBUS RM??
                     73: #      ld*     Logical disk devices (e.g., hardware RAID)
                     74: #      mcd*    Mitsumi CD-ROM
                     75: #      md*     memory pseudo-disk devices
                     76: #      ofdisk* OpenFirmware disk devices
                     77: #      ra*     MSCP disks (RA??, RD??)
                     78: #      rb*     730 IDC w/ RB80 and/or RB02
                     79: #      rd*     HDC9224 RD disks on VS2000
                     80: #      rl*     UNIBUS RL02
                     81: #      rx*     MSCP floppy disk (RX33/50/...)
                     82: #      up*     other UNIBUS devices (e.g. on Emulex SC-21V controller)
                     83: #      vnd*    "file" pseudo-disks
1.39      bouyer     84: #      xbd*    Xen virtual disks
1.1       jdolecek   85: #      xd*     Xylogic 753/7053 disks
                     86: #      xy*     Xylogic 450/451 disks
                     87: #
                     88: # Pointing devices:
                     89: #      wsmouse* wscons mouse events
                     90: #      lms*    Logitech bus mouse
                     91: #      mms*    Microsoft bus mouse
                     92: #      qms*    "quadrature mouse"
                     93: #      pms*    PS/2 mouse
                     94: #      mouse   mouse (provides events, for X11)
                     95: #
                     96: # Keyboard devices:
                     97: #      wskbd*  wscons keyboard events
                     98: #      kbd     raw keyboard (provides events, for X11)
                     99: #      kbdctl  keyboard control
                    100: #
                    101: # Terminals/Console ports:
                    102: #      tty[01]*        standard serial ports
                    103: #      tty0*   SB1250 ("sbscn") serial ports (sbmips)
                    104: #      ttyE*   wscons - Workstation console ("wscons") glass-tty emulators
                    105: #      ttyCZ?  Cyclades-Z multiport serial boards.  Each "unit"
                    106: #              makes 64 ports.
                    107: #      ttyCY?  Cyclom-Y multiport serial boards. Each "unit" makes
                    108: #              32 ports.
                    109: #      ttye*   ITE bitmapped consoles
                    110: #      ttyv0   pccons
                    111: #      ttyC?   NS16550 ("com") serial ports
                    112: #      ttyS*   SA1110 serial port (hpcarm)
                    113: #      ttyTX?  TX39 internal serial ports (hpcmips)
                    114: #      ttyB?   DEC 3000 ZS8530 ("scc") serial ports (alpha)
                    115: #      ttyA*   mfc serial ports (amiga)
                    116: #      ttyB*   msc serial ports (amiga)
                    117: #      ttyC*   com style serial ports (DraCo, HyperCom) (amiga)
                    118: #              On the DraCo, units 0 and 1 are the built-in "modem" and
                    119: #              "mouse" ports, if configured.
                    120: #      ttyA0   8530 Channel A (formerly ser02) (atari)
                    121: #      ttyA1   8530 Channel B (formerly mdm02) (atari)
                    122: #      ttyB0   UART on first 68901 (formerly mdm01) (atari)
                    123: #      ixpcom  IXP12x0 COM ports
1.34      joff      124: #      epcom   EP93xx COM ports
1.9       tsutsui   125: #      ttyM?   HP200/300 4 port serial mux interface (hp300)
1.6       jdolecek  126: #      ttya    "ttya" system console (luna68k)
1.1       jdolecek  127: #      ttyb    second system serial port (luna68k)
                    128: #      tty*    Onboard serial ports (mvme68k)
                    129: #              On the mvme147 these are: ttyZ1, ttyZ2 and ttyZ3.
                    130: #              On the mvme167, and '177: ttyC1, ttyC2 and ttyC3.
                    131: #              Note that tty[CZ]0 is grabbed by the console device
                    132: #              so is not created by default
                    133: #      dc*     PMAX 4 channel serial interface (kbd, mouse, modem, printer)
                    134: #      scc*    82530 serial interface (pmax)
                    135: #      ttyZ*   Zilog 8530 ("zstty") serial ports
                    136: #      tty[abcd]       Built-in serial ports (sparc)
                    137: #      tty*    Z88530 serial controllers (sparc64)
                    138: #      ttyh*   SAB82532 serial controllers (sparc64)
                    139: #      tty[a-j]        Built-in serial ports (sun2, sun3)
                    140: #      ttyC?   pccons (arc)
                    141: #      dz*     UNIBUS DZ11 and DZ32 (vax)
                    142: #      dh*     UNIBUS DH11 and emulations (e.g. Able DMAX, Emulex CS-11) (vax)
                    143: #      dmf*    UNIBUS DMF32 (vax)
                    144: #      dhu*    UNIBUS DHU11 (vax)
                    145: #      dmz*    UNIBUS DMZ32 (vax)
                    146: #      dl*     UNIBUS DL11 (vax)
1.39      bouyer    147: #      xencons Xen virtual console
1.1       jdolecek  148: #
                    149: # Terminal multiplexors:
                    150: #      dc*     4 channel serial interface (keyboard, mouse, modem, printer)
                    151: #      dh*     UNIBUS DH11 and emulations (e.g. Able DMAX, Emulex CS-11)
                    152: #      dhu*    UNIBUS DHU11
                    153: #      dl*     UNIBUS DL11
                    154: #      dmf*    UNIBUS DMF32
                    155: #      dmz*    UNIBUS DMZ32
                    156: #      dz*     UNIBUS DZ11 and DZ32
                    157: #      scc*    82530 serial interface
                    158: #
                    159: # Call units:
                    160: #      dn*     UNIBUS DN11 and emulations (e.g. Able Quadracall)
                    161: #
                    162: # Pseudo terminals:
1.24      christos  163: #      ptm     pty multiplexor device.
1.26      christos  164: #      pty*    set of 16 master and slave pseudo terminals
1.1       jdolecek  165: #      opty    first 16 ptys, to save inodes on install media
                    166: #      ipty    first 2 ptys, for install media use only
                    167: #
                    168: # Printers:
                    169: #      arcpp*  Archimedes parallel port
                    170: #      lpt*    stock lp
                    171: #      lpa*    interruptless lp
                    172: #      par*    Amiga motherboard parallel port
1.108   ! hauke     173: #      cpi*    Macintosh Nubus CSI parallel printer card
1.1       jdolecek  174: #
                    175: # USB devices:
                    176: #      usb*    USB control devices
                    177: #      uhid*   USB generic HID devices
                    178: #      ulpt*   USB printer devices
                    179: #      ugen*   USB generic devices
                    180: #      urio*   USB Diamond Rio 500 devices
                    181: #      uscanner*       USB scanners
                    182: #      ttyU*   USB modems
1.47      skrll     183: #      ttyY*   USB serial adapters
1.1       jdolecek  184: #
                    185: # ISDN devices:
                    186: #      isdn    communication between userland isdnd and kernel
                    187: #      isdnctl control device
                    188: #      isdnbchan* raw b-channel access
                    189: #      isdntel*        telephony device
                    190: #      isdnteld*       telephony dialout device
                    191: #      isdntrc*        trace device
                    192: #
                    193: # Video devices:
                    194: #      bwtwo*  monochromatic frame buffer
                    195: #      cgtwo*  8-bit color frame buffer
                    196: #      cgthree*        8-bit color frame buffer
                    197: #      cgfour* 8-bit color frame buffer
                    198: #      cgsix*  accelerated 8-bit color frame buffer
                    199: #      cgeight*        24-bit color frame buffer
1.6       jdolecek  200: #      etvme   Tseng et-compatible cards on VME (atari)
1.1       jdolecek  201: #      ik*     UNIBUS interface to Ikonas frame buffer
1.6       jdolecek  202: #      leo     Circad Leonardo VME-bus true color (atari)
1.1       jdolecek  203: #      ps*     UNIBUS interface to Picture System 2
                    204: #      qv*     QVSS (MicroVAX) display
                    205: #      tcx*    accelerated 8/24-bit color frame buffer
                    206: #
                    207: # Maple bus devices:
                    208: #      maple   Maple bus control devices
                    209: #      mlcd*   Maple bus LCD devices
                    210: #      mmem*   Maple bus storage devices
                    211: #
1.46      kiyohara  212: # IEEE1394 bus devices:
                    213: #      fw*     IEEE1394 bus generic node access devices
                    214: #      fwmem*  IEEE1394 bus physical memory of the remote node access devices
                    215: #
1.1       jdolecek  216: # Special purpose devices:
                    217: #      ad*     UNIBUS interface to Data Translation A/D converter
                    218: #      agp*    AGP GART devices
                    219: #      altq    ALTQ control interface
1.56      bouyer    220: #      amr*    AMI MegaRaid control device
1.1       jdolecek  221: #      apm     power management device
                    222: #      audio*  audio devices
1.10      isaki     223: #      bell*   OPM bell device (x68k)
1.1       jdolecek  224: #      bktr    Brooktree 848/849/878/879 based TV cards
1.32      christos  225: #      bpf     packet filter
1.62      plunky    226: #      bthub   Bluetooth Device Hub control interface
1.1       jdolecek  227: #      cfs*    Coda file system device
                    228: #      ch*     SCSI media changer
                    229: #      cir*    Consumer IR
                    230: #      clockctl clock control for non root users
1.87      ad        231: #      cpuctl  CPU control
1.1       jdolecek  232: #      crypto  hardware crypto access driver
                    233: #      dmoverio hardware-assisted data movers
                    234: #      dpt*    DPT/Adaptec EATA RAID management interface
                    235: #      dpti*   DPT/Adaptec I2O RAID management interface
1.6       jdolecek  236: #      fb*     PMAX generic framebuffer pseudo-device
1.1       jdolecek  237: #      fd      file descriptors
                    238: #      grf*    graphics frame buffer device
                    239: #      hil     HP300 HIL input devices
                    240: #      icp     ICP-Vortex/Intel RAID control interface
                    241: #      iic*    IIC bus device
1.69      ad        242: #      io      x86 IOPL access for COMPAT_10, COMPAT_FREEBSD
1.1       jdolecek  243: #      iop*    I2O IOP control interface
                    244: #      ipl     IP Filter
                    245: #      irframe* IrDA physical frame
                    246: #      ite*    terminal emulator interface to HP300 graphics devices
                    247: #      joy*    joystick device
                    248: #      kttcp   kernel ttcp helper device
                    249: #      lkm     loadable kernel modules interface
1.61      ad        250: #      lockstat kernel locking statistics
1.1       jdolecek  251: #      magma*  Magma multiport serial/parallel cards
                    252: #      midi*   MIDI
                    253: #      mlx*    Mylex DAC960 control interface
                    254: #      mly*    Mylex AcceleRAID/eXtremeRAID control interface
                    255: #      np*     UNIBUS Ethernet co-processor interface, for downloading.
                    256: #      nsmb*   SMB requester
                    257: #      openfirm OpenFirmware accessor
1.89      jmcneill  258: #      pad*    Pseudo-audio device driver
1.1       jdolecek  259: #      pci*    PCI bus access devices
1.31      peter     260: #      pf      PF packet filter
1.10      isaki     261: #      pow*    power management device (x68k)
1.90      pooka     262: #      putter  Pass-to-Userspace Transporter
1.1       jdolecek  263: #      px*     PixelStamp Xserver access
                    264: #      radio*  radio devices
1.8       jdolecek  265: #      random  Random number generator
1.6       jdolecek  266: #      rtc*    RealTimeClock
1.1       jdolecek  267: #      satlink* PlanetConnect satellite receiver driver
1.8       jdolecek  268: #      scsibus* SCSI busses
1.1       jdolecek  269: #      se*     SCSI Ethernet
                    270: #      ses*    SES/SAF-TE SCSI Devices
                    271: #      speaker PC speaker              (XXX - installed)
1.10      isaki     272: #      sram    battery backuped memory (x68k)
1.1       jdolecek  273: #      ss*     SCSI scanner
                    274: #      stic*   PixelStamp interface chip
                    275: #      sysmon  System Monitoring hardware
1.38      cube      276: #      tap*    virtual Ethernet device
1.1       jdolecek  277: #      tun*    network tunnel driver
1.66      manu      278: #      twa     3ware Apache control interface
1.1       jdolecek  279: #      twe     3ware Escalade control interface
                    280: #      uk*     unknown SCSI device
                    281: #      veriexec verified executable fingerprint loader
                    282: #      vmegen* generic VME access
                    283: #      view*   generic interface to graphic displays (Amiga)
                    284: #      wsfont* console font control
                    285: #      wsmux*  wscons event multiplexor
1.39      bouyer    286: #      xenevt  Xen event interface
1.1       jdolecek  287:
1.15      lukem     288:
1.79      apb       289: #
                    290: # Apart from a few lines right at the end, this file should consist
                    291: # entirely of function definitions.
                    292: #
                    293: # This file is used both as a standalone script (via "sh ./MAKEDEV all"
                    294: # or similar), and as a function library (via "MAKEDEV_AS_LIBRARY=1 .
                    295: # MAKEDEV" from MAKEDEV.local).
                    296: #
                    297:
                    298: usage()
                    299: {
                    300:        cat 1>&2 << _USAGE_
1.104     apb       301: Usage: ${0##*/} [-fMs] [-m mknod] [-p pax] [-t mtree] special [...]
1.79      apb       302:        Create listed special devices.  Options:
                    303:        -f              Force permissions to be updated on existing devices.
1.94      apb       304:        -M              Create memory file system.
1.79      apb       305:        -m mknod        Name of mknod(8) program.  [\$TOOL_MKNOD or mknod]
1.104     apb       306:        -p pax          Name of pax(1) program.  [\$TOOL_PAX or pax]
1.79      apb       307:        -s              Generate mtree(8) specfile instead of creating devices.
1.104     apb       308:        -t mtree        Name of mtree(8) program.  [\$TOOL_MTREE or mtree]
1.79      apb       309:
                    310: _USAGE_
                    311:        exit 1
                    312: }
                    313:
                    314: # zeropad width number
                    315: #      display number with a zero (`0') padding of width digits.
                    316: #
                    317: zeropad()
                    318: {
                    319:        case $(($1 - ${#2})) in
                    320:        5)      echo 00000$2;;
                    321:        4)      echo 0000$2;;
                    322:        3)      echo 000$2;;
                    323:        2)      echo 00$2;;
                    324:        1)      echo 0$2;;
                    325:        0)      echo $2;;
1.104     apb       326:        *)      die "bad padding" ;;
1.79      apb       327:        esac
                    328: }
                    329:
                    330: # hexprint number
                    331: #      display (base10) number as hexadecimal
                    332: #
                    333: hexprint()
                    334: {
1.81      dsl       335:        val="$(($1 + 0))"
                    336:        hex=
                    337:        set -- 0 1 2 3 4 5 6 7 8 9 a b c d e f
                    338:        while [ "$val" -gt 0 ]; do
                    339:                eval hex=\$$(($val % 16 + 1))\$hex
                    340:                val="$(($val / 16))"
                    341:        done
                    342:        echo "${hex:-0}"
1.79      apb       343: }
                    344:
1.92      apb       345: # linecount multiline_string
                    346: #      count the number of lines in the string
                    347: #
                    348: linecount()
                    349: {
                    350:        local IFS='
                    351: ' # just a newline, no other white space between the quotes
                    352:        set -- $1
                    353:        echo $#
                    354: }
                    355:
1.97      apb       356: # nooutput -12 cmd [args...]
                    357: #      run a command with stdout and/or stderr ignored.
1.105     apb       358: #      "nooutput -1 cmd" is like "cmd >/dev/null";
                    359: #      "nooutput -2 cmd" is like "{ cmd ; } 2>/dev/null";
                    360: #      "nooutput -12 cmd" is like "{ cmd ; } >/dev/null 2>&1";
                    361: #      except they should work even if /dev/null doesn't [yet] exist.
                    362: #
                    363: #      The "{...}" wrapper used in cases where stderr is redirected
                    364: #      serves to capture shell error messages such as "cmd: not found".
1.97      apb       365: #
                    366: nooutput()
                    367: {
                    368:        local flags="$1" ; shift
                    369:        local junk
                    370:        case "$flags" in
                    371:        "-1")   junk="$( "$@" )" ;;
1.105     apb       372:        "-2")   exec 4>&1 ; junk="$( { "$@" ; } 2>&1 1>&4 )" ; exec 4>&- ;;
                    373:        "-12")  junk="$( { "$@" ; } 2>&1 )" ;;
1.97      apb       374:        *)      warn "Incorrect use of nooutput" ;;
                    375:        esac
                    376: }
                    377:
1.96      apb       378: # check_pax path_to_pax
1.104     apb       379: #      Check whether pax exists and supports the command line options
                    380: #      and input format that we will want to use.
1.96      apb       381: #
                    382: check_pax()
                    383: {
                    384:        local pax="$1"
1.97      apb       385:        echo ". type=dir optional" | nooutput -12 "${pax}" -r -w -M -pe .
1.96      apb       386: }
                    387:
1.104     apb       388: # check_mtree path_to_mtree
                    389: #      Check whether mtree exists and supports the command line options
                    390: #      and input format that we will want to use.
                    391: #
                    392: check_mtree()
                    393: {
                    394:        local mtree="$1"
                    395:        echo ". type=dir optional" | nooutput -12 "${mtree}" -e -U
                    396: }
                    397:
1.96      apb       398: # setup args...
                    399: #      Parse command line arguments, exit on error.
                    400: #      Callers should shift $((OPTIND - 1)) afterwards.
                    401: #
1.79      apb       402: setup()
                    403: {
                    404:        PATH=/sbin:/usr/sbin:/bin:/usr/bin:/rescue
                    405:
1.104     apb       406:        : ${TOOL_MKNOD:=mknod}
                    407:        : ${TOOL_MTREE:=mtree}
                    408:        : ${TOOL_PAX:=pax}
1.82      apb       409:        do_create_mfs=false
1.79      apb       410:        do_force=false
1.94      apb       411:        do_mknod=false
1.82      apb       412:        do_pax=false
1.104     apb       413:        do_mtree=false
1.82      apb       414:        do_redirect=false
1.79      apb       415:        do_specfile=false
1.82      apb       416:        opts=
1.104     apb       417:        while getopts Mfm:p:st: ch; do
                    418:                # Note that $opts is only for options pased through to
                    419:                # MAKEDEV.local, not for all options.
1.79      apb       420:                case ${ch} in
1.84      dyoung    421:                M)
1.82      apb       422:                        # "-M" sets do_create_mfs;
1.94      apb       423:                        # "-M -M" is for use from init(8), and sets do_redirect
1.82      apb       424:                        do_redirect=$do_create_mfs
                    425:                        do_create_mfs=true
                    426:                        ;;
                    427:                f)      do_force=true
                    428:                        opts="${opts} -f"
                    429:                        ;;
                    430:                m)      TOOL_MKNOD=${OPTARG}
1.94      apb       431:                        do_mknod=true
1.82      apb       432:                        opts="${opts} -m ${OPTARG}"
                    433:                        ;;
                    434:                p)      TOOL_PAX="${OPTARG}"
1.96      apb       435:                        if check_pax "${TOOL_PAX}"; then
1.83      apb       436:                                do_pax=true
1.94      apb       437:                                # do not add this to $opts; we will later
                    438:                                # add "-s" instead.
1.83      apb       439:                        else
                    440:                                warn "Ignored -p option:" \
                    441:                                        "${TOOL_PAX} is missing or broken"
1.94      apb       442:                                do_mknod=true
1.83      apb       443:                        fi
1.82      apb       444:                        ;;
                    445:                s)      do_specfile=true
                    446:                        opts="${opts} -s"
                    447:                        ;;
1.104     apb       448:                t)      TOOL_MTREE="${OPTARG}"
                    449:                        if check_mtree "${TOOL_MTREE}"; then
                    450:                                do_mtree=true
                    451:                                # do not add this to $opts; we will later
                    452:                                # add "-s" instead.
                    453:                        else
                    454:                                warn "Ignored -t option:" \
                    455:                                        "${TOOL_MTREE} is missing or broken"
                    456:                                do_mknod=true
                    457:                        fi
                    458:                        ;;
1.79      apb       459:                *)      usage ;;
                    460:                esac
                    461:        done
                    462:
                    463:        shift $((${OPTIND} - 1))
                    464:        [ $# -gt 0 ] || usage
                    465:
                    466:        u_root="%uid_root%"
                    467:        u_uucp="%uid_uucp%"
                    468:        g_kmem="%gid_kmem%"
                    469:        g_ntpd="%gid_ntpd%"
                    470:        g_operator="%gid_operator%"
                    471:        g_wheel="%gid_wheel%"
                    472:        dialin=0
                    473:        dialout=524288
                    474:        callunit=262144
                    475:
                    476:        # only allow read&write for owner by default
                    477:        umask 077
                    478:
                    479:        # Check if we have fdesc mounted
                    480:        if [ -d fd ]; then
                    481:                case "$(df fd)" in
                    482:                *fdesc*)        nofdesc=false;;
                    483:                *)              nofdesc=true;;
                    484:                esac
                    485:        else
                    486:                nofdesc=true
                    487:        fi
                    488:
1.94      apb       489:        # do_force requires mknod
                    490:        if $do_force; then
1.104     apb       491:                if $do_mtree || $do_pax || $do_specfile; then
                    492:                        die "-f option works only with mknod"
1.94      apb       493:                fi
                    494:                do_mknod=true
                    495:        fi
                    496:
1.104     apb       497:        # If no explicit method was specified on the command line or
                    498:        # forced above, then use one of mtree, pax, or mknod, in that
                    499:        # order of preference.
                    500:        #
                    501:        # mtree is preferred because it's fast and designed for the
                    502:        # purpose.  However, it's unlikely to be available early in the
                    503:        # boot sequence, when init(8) may invoke MAKEDEV(8).
                    504:        #
                    505:        # pax is usually acceptable, and it's likely to be available
                    506:        # early in the boot sequence.  However, it's much slower than mtree.
                    507:        #
                    508:        # mknod is just very slow, because the shell has to fork for
                    509:        # each device node.
                    510:        #
                    511:        if ! ( $do_mtree || $do_pax || $do_mknod || $do_specfile ); then
                    512:                if check_mtree "${TOOL_MTREE}"; then
                    513:                        do_mtree=true
                    514:                elif check_pax "${TOOL_PAX}"; then
1.94      apb       515:                        do_pax=true
                    516:                else
                    517:                        do_mknod=true
                    518:                fi
                    519:        fi
                    520:
1.104     apb       521:        # Now we need exactly one node-creation method.
                    522:        case $(( $($do_mtree && echo 1 || echo 0) + \
                    523:                $($do_pax && echo 1 || echo 0) + \
1.94      apb       524:                $($do_mknod && echo 1 || echo 0) + \
                    525:                $($do_specfile && echo 1 || echo 0) ))
                    526:        in
                    527:        1)      : OK ;;
1.104     apb       528:        *)      die "-m, -p, -s, and -t options are mutually exclusive" ;;
1.94      apb       529:        esac
                    530:
                    531:        # If we are using mknod, then decide what options to pass it.
                    532:        if $do_mknod; then
                    533:                MKNOD="${TOOL_MKNOD:-mknod} -F netbsd"
                    534:                if $do_force; then
                    535:                        MKNOD="${MKNOD} -R"
                    536:                else
                    537:                        MKNOD="${MKNOD} -r"
                    538:                fi
                    539:        fi
                    540:
1.104     apb       541:        # do_mtree or do_pax internally implies do_specfile.
                    542:        # This happens after checking for mutually-exclusive options.
                    543:        if ($do_mtree || $do_pax) && ! $do_specfile; then
1.82      apb       544:                do_specfile=true
                    545:                opts="${opts} -s"
1.79      apb       546:        fi
                    547: }
                    548:
1.97      apb       549: # wrap_makedev makedev_name ...
                    550: #      Invoke a makedev-like function, with additional processing
                    551: #      as appropriate for use from the outer level.
                    552: #
                    553: wrap_makedev()
                    554: {
                    555:        if $do_specfile; then
1.104     apb       556:                # "." must appear as the first line of the specfile.
                    557:                # "optional" means do not create the directory itself.
1.97      apb       558:                echo ". type=dir optional"
                    559:        fi
                    560:        "$@"
                    561: }
                    562:
                    563: # makedev_main makedev_name args...
1.104     apb       564: #      Perform most of the work of the main program.  makedev_name
                    565: #      is typically "makedev", but may be the name of some other
                    566: #      makedev-like function (if we are invoked from MAKEDEV.local or
                    567: #      some other script).  The other args to this function are the
1.97      apb       568: #      command line args with which the MAKEDEV (or MAKEDEV.local)
                    569: #      script was invoked.
                    570: #
                    571: makedev_main()
                    572: {
                    573:        local makedev="$1" ; shift
                    574:
                    575:        # Parse command line args
                    576:        setup ${1+"$@"}
                    577:        shift $((${OPTIND}-1))
                    578:
                    579:        if $do_create_mfs; then
                    580:                # Count inodes and create mfs file system.
                    581:                # The makedev call merely updates $count_nodes.
                    582:                count_nodes=0
                    583:                $makedev ${1+"$@"}
                    584:                create_mfs_dev $count_nodes
                    585:                unset count_nodes
                    586:        fi
                    587:
1.104     apb       588:        # If using mtree or pax, then wrap_makedev should print an mtree
                    589:        # specification, which we postprocess to create the device nodes.
                    590:        # Otherwise, wrap_makedev should do all the work itself.
                    591:        if $do_mtree ; then
                    592:                wrap_makedev $makedev ${1+"$@"} \
                    593:                | nooutput -1 "${TOOL_MTREE}" -e -U
                    594:        elif $do_pax ; then
                    595:                wrap_makedev $makedev ${1+"$@"} \
                    596:                | (
                    597:                    # Run pax in an empty directory, so it pays
                    598:                    # attention only to the specfile, without being
                    599:                    # confused by the existing contents of the target
                    600:                    # directory.  Without this, pax would complain "file
                    601:                    # would overwrite itself" for already-existing
                    602:                    # device nodes.
                    603:                    tmpdir=./tmp.$$
                    604:                    mkdir "${tmpdir}" || die "can't create temporary directory"
                    605:                    cd "${tmpdir}" || die "can't cd to temporary directory"
                    606:                    "${TOOL_PAX}" -r -w -M -pe ..
                    607:                    status=$?
                    608:                    cd .. # back to where we started
                    609:                    rmdir "${tmpdir}"
                    610:                    exit $status
                    611:                )
1.97      apb       612:        else
                    613:                wrap_makedev $makedev ${1+"$@"}
                    614:        fi
                    615: }
                    616:
1.79      apb       617: #
                    618: # functions available to create nodes:
                    619: #
                    620: # mkdev name [b|c] major minor [mode{=600} [gid{=0} [uid{=0}]]]
                    621: #      create device node `name' with the appropriate permissions
                    622: #
                    623: # lndev src target
                    624: #      create a symlink from src to target
                    625: #
                    626: # makedir dir mode
                    627: #      create directory with appropriate mode
                    628: #
                    629:
                    630: mkdev()
                    631: {
                    632:        if [ -n "$count_nodes" ]; then
                    633:                count_nodes=$((count_nodes + 1))
                    634:                return
                    635:        fi
                    636:        if $do_specfile; then
                    637:                case $2 in
                    638:                b)      type=block ;;
                    639:                c)      type=char ;;
                    640:                esac
                    641:                echo "./$1 type=${type} device=netbsd,$3,$4 mode=${5:-600} gid=${6:-$g_wheel} uid=${7:-$u_root}"
                    642:        else
                    643:                ${MKNOD} -m ${5:-600} -g \#${6:-$g_wheel} -u \#${7:-$u_root} $1 $2 $3 $4
                    644:        fi
                    645: }
                    646:
                    647: lndev()
                    648: {
                    649:        if [ -n "$count_nodes" ]; then
                    650:                count_nodes=$((count_nodes + 1))
                    651:                return
                    652:        fi
                    653:        if $do_specfile; then
                    654:                echo "./$2 type=link link=$1 mode=0700 gid=$g_wheel uid=$u_root"
                    655:        else
                    656:                ln -f -s $1 $2
                    657:        fi
                    658: }
                    659:
                    660: makedir()
                    661: {
                    662:        if [ -n "$count_nodes" ]; then
                    663:                count_nodes=$((count_nodes + 1))
                    664:                return
                    665:        fi
                    666:        if $do_specfile; then
1.104     apb       667:                echo "./$1 type=dir mode=$2 gid=$g_wheel uid=$u_root"
1.79      apb       668:        else
1.97      apb       669:                nooutput -2 mkdir $1
1.79      apb       670:                chmod $2 $1
                    671:        fi
                    672: }
                    673:
                    674: warn()
                    675: {
                    676:        echo 1>&2 "$0: $*"
                    677: }
1.16      lukem     678:
1.104     apb       679: die()
                    680: {
                    681:        echo 1>&2 "$0: $*"
                    682:        exit 1
                    683: }
                    684:
1.15      lukem     685: # makedev special [...]
                    686: #      the main loop
                    687: #
1.1       jdolecek  688: makedev()
                    689: {
                    690:
                    691: for i
                    692: do
                    693:
                    694: case $i in
                    695:
                    696: %MD_DEVICES%
1.2       jdolecek  697:
                    698: all)
                    699:        makedev all_md
1.26      christos  700:        makedev std fd ptm pty0 pty1 pty2 pty3
1.2       jdolecek  701:        makedev ccd0 ccd1 ccd2 ccd3
                    702:        makedev cgd0 cgd1 cgd2 cgd3
1.11      hannken   703:        makedev fss0 fss1 fss2 fss3
1.2       jdolecek  704:        makedev md0 md1
                    705:        makedev raid0 raid1 raid2 raid3 raid4 raid5 raid6 raid7
                    706:        makedev vnd0 vnd1 vnd2 vnd3
1.32      christos  707:        makedev bpf
1.2       jdolecek  708:        makedev tun0 tun1 tun2 tun3
1.101     ad        709:        makedev ipl pf crypto random
1.87      ad        710:        makedev lkm lockstat clockctl cpuctl
1.28      bouyer    711:        makedev atabus0 atabus1 atabus2 atabus3
1.38      cube      712:        makedev tap tap0 tap1 tap2 tap3
1.49      hamajima  713:        makedev gpio gpio0 gpio1 gpio2 gpio3 gpio4 gpio5 gpio6 gpio7
1.89      jmcneill  714:        makedev pad pad0 pad1 pad2 pad3
1.62      plunky    715:        makedev bthub
1.88      gdt       716:        makedev cfs
1.90      pooka     717:        makedev putter
1.100     riz       718:        makedev drvctl
1.74      apb       719:        makedev local # do this last
1.2       jdolecek  720:        ;;
                    721:
                    722: init)
                    723:        # unless overridden by MD entry, this is equal to 'all'
                    724:        makedev all
                    725:        ;;
1.1       jdolecek  726:
                    727: %MI_DEVICES_BEGIN%
                    728: audio)
                    729:        makedev audio0 audio1 audio2 audio3
1.15      lukem     730:        lndev sound0 sound
                    731:        lndev audio0 audio
                    732:        lndev mixer0 mixer
                    733:        lndev audioctl0 audioctl
1.1       jdolecek  734:        ;;
                    735:
1.48      jmcneill  736: gpio)
1.49      hamajima  737:        makedev gpio0 gpio1 gpio2 gpio3 gpio4 gpio5 gpio6 gpio7
1.48      jmcneill  738:        lndev gpio0 gpio
                    739:        ;;
                    740:
1.89      jmcneill  741: pad)
                    742:        makedev pad0 pad1 pad2 pad3
                    743:        lndev pad0 pad
                    744:        ;;
                    745:
1.1       jdolecek  746: radio)
                    747:        makedev radio0 radio1
1.15      lukem     748:        lndev radio0 radio
1.1       jdolecek  749:        ;;
                    750:
                    751: ramdisk)
                    752:        makedev floppy md0
                    753:        ;;
                    754:
                    755: usbs)
                    756:        makedev usb usb0 usb1 usb2 usb3 usb4 usb5 usb6 usb7
                    757:        makedev uhid0 uhid1 uhid2 uhid3
                    758:        makedev ulpt0 ulpt1
                    759:        makedev ttyU0 ttyU1
1.47      skrll     760:        makedev ttyY0 ttyY1
1.1       jdolecek  761:        makedev urio0
                    762:        makedev uscanner0 uscanner1
1.52      scw       763:        makedev utoppy0 utoppy1
1.1       jdolecek  764:        makedev ugen0
                    765:        ;;
                    766:
                    767: isdns)
                    768:        makedev isdn isdnctl isdnbchan0 isdnbchan1 isdntel0 isdntel1 isdnteld0 isdnteld1 isdntrc0 isdntrc1
                    769:        ;;
                    770:
                    771: std)
1.104     apb       772:        mkdev           console c %cons_chr% 0  600
                    773:        mkdev           constty c %cons_chr% 1  600
1.15      lukem     774:        mkdev           drum    c %swap_chr% 0  640 $g_kmem
                    775:        mkdev           kmem    c %mem_chr% 1   640 $g_kmem
                    776:        mkdev           mem     c %mem_chr% 0   640 $g_kmem
                    777:        mkdev           null    c %mem_chr% 2   666
                    778:        mkdev           zero    c %mem_chr% 12  666
                    779:        mkdev           klog    c %log_chr% 0   600
1.104     apb       780:        mkdev           ksyms   c %ksyms_chr% 0 444
1.1       jdolecek  781:        if $nofdesc; then
1.15      lukem     782:                mkdev   tty     c %ctty_chr% 0          666
                    783:                mkdev   stdin   c %filedesc_chr% 0      666
                    784:                mkdev   stdout  c %filedesc_chr% 1      666
                    785:                mkdev   stderr  c %filedesc_chr% 2      666
1.1       jdolecek  786:        fi
                    787:        ;;
                    788:
1.42      augustss  789: usb)
                    790:        mkdev usb c %usb_chr% 255 444
                    791:        ;;
                    792:
1.1       jdolecek  793: usb*)
                    794:        unit=${i#usb}
1.42      augustss  795:        usb=usb$unit
                    796:        mkdev usb$unit c %usb_chr% $unit
1.1       jdolecek  797:        ;;
                    798:
                    799: uhid*)
                    800:        unit=${i#uhid}
1.15      lukem     801:        mkdev uhid$unit c %uhid_chr% $unit 666
1.1       jdolecek  802:        ;;
                    803:
                    804: ulpt*)
                    805:        unit=${i#ulpt}
1.15      lukem     806:        mkdev ulpt$unit c %ulpt_chr% $unit
                    807:        mkdev ulpn$unit c %ulpt_chr% $(($unit + 64))
1.1       jdolecek  808:        ;;
                    809:
                    810: urio*)
                    811:        unit=${i#urio}
1.15      lukem     812:        mkdev urio$unit c %urio_chr% $unit 666
1.1       jdolecek  813:        ;;
                    814:
                    815: uscanner*)
                    816:        unit=${i#uscanner}
1.15      lukem     817:        mkdev uscanner$unit c %uscanner_chr% $unit
1.1       jdolecek  818:        ;;
                    819:
1.52      scw       820: utoppy*)
                    821:        unit=${i#utoppy}
                    822:        mkdev utoppy$unit c %utoppy_chr% $unit
                    823:        ;;
                    824:
1.47      skrll     825: ttyY*)
                    826:        unit=${i#ttyY}
                    827:        mkdev ttyY$unit c %ucycom_chr% $(($unit + $dialin  )) "" "" $u_uucp
                    828:        mkdev dtyY$unit c %ucycom_chr% $(($unit + $dialout )) "" "" $u_uucp
                    829:        mkdev ctyY$unit c %ucycom_chr% $(($unit + $callunit)) "" "" $u_uucp
                    830:        ;;
                    831:
1.1       jdolecek  832: ttyU*)
                    833:        unit=${i#ttyU}
1.104     apb       834:        mkdev ttyU$unit c %ucom_chr% $(($unit + $dialin  )) "" "" $u_uucp
1.15      lukem     835:        mkdev dtyU$unit c %ucom_chr% $(($unit + $dialout )) "" "" $u_uucp
                    836:        mkdev ctyU$unit c %ucom_chr% $(($unit + $callunit)) "" "" $u_uucp
1.1       jdolecek  837:        ;;
                    838:
                    839: ugen*)
                    840:        unit=${i#ugen}
                    841:        for j in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
                    842:        do
1.15      lukem     843:                mkdev ugen$unit.$j c %ugen_chr% $(($unit * 16 + ${j#0}))
1.1       jdolecek  844:        done
                    845:        ;;
                    846:
                    847: wscons)
                    848:        makedev ttyE0 ttyE1 ttyE2 ttyE3 ttyE4 ttyE5 ttyE6 ttyE7
                    849:        makedev wsmouse0 wsmouse1 wsmouse2 wsmouse3
                    850:        makedev wskbd0 wskbd1 wskbd2 wskbd3
                    851:        makedev wsmux0 wsmux1 wsmux2 wsmux3
                    852:        makedev wsmouse wskbd
                    853:        makedev ttyEcfg ttyEstat
                    854:        makedev wsfont
                    855:        ;;
                    856:
                    857: wsmouse)
1.15      lukem     858:        mkdev wsmouse c %wsmux_chr% 0
1.1       jdolecek  859:        ;;
                    860:
                    861: wskbd)
1.15      lukem     862:        mkdev wskbd c %wsmux_chr% 1
1.1       jdolecek  863:        ;;
                    864:
                    865: wsmux*)
                    866:        unit=${i#wsmux}
1.15      lukem     867:        mkdev wsmux$unit    c %wsmux_chr% $unit
                    868:        mkdev wsmuxctl$unit c %wsmux_chr% $(($unit + 128)) 200
1.1       jdolecek  869:        ;;
                    870:
1.39      bouyer    871: xenevt)
                    872:        mkdev xenevt c %xenevt_chr% 0
                    873:        ;;
                    874:
1.54      bouyer    875: xsd_kva)
1.55      yamt      876:        mkdev xsd_kva c %xenevt_chr% 1
1.54      bouyer    877:        ;;
                    878:
1.39      bouyer    879: xencons)
                    880:        mkdev xencons c %xencons_chr% 0
                    881:        ;;
                    882:
1.1       jdolecek  883: ttyEstat)
1.15      lukem     884:        mkdev ttyEstat c %wsdisplay_chr% 254
1.1       jdolecek  885:        ;;
                    886:
                    887: ttyEcfg)
1.15      lukem     888:        mkdev ttyEcfg c %wsdisplay_chr% 255
1.1       jdolecek  889:        ;;
                    890:
                    891: ttyE*)
1.15      lukem     892:        unit=${i#ttyE}
                    893:        mkdev ttyE$unit c %wsdisplay_chr% $unit
1.1       jdolecek  894:        ;;
                    895:
                    896: wsmouse*)
                    897:        unit=${i#wsmouse}
1.15      lukem     898:        mkdev wsmouse$unit c %wsmouse_chr% $unit
1.1       jdolecek  899:        ;;
                    900:
                    901: wskbd*)
                    902:        unit=${i#wskbd}
1.15      lukem     903:        mkdev wskbd$unit c %wskbd_chr% $unit
1.1       jdolecek  904:        ;;
                    905:
                    906: fd)
                    907:        if $nofdesc; then
1.15      lukem     908:                makedir fd 755
1.1       jdolecek  909:                n=0
1.15      lukem     910:                while [ $n -lt 64 ]
                    911:                do
                    912:                        mkdev fd/$n c %filedesc_chr% $n 666
1.1       jdolecek  913:                        n=$(($n + 1))
                    914:                done
                    915:        fi
                    916:        ;;
                    917:
                    918: wt*)
                    919:        case $i in
                    920:        wt*) name=wt;  unit=${i#wt};    chr=%wt_chr%;   blk=%wt_blk%;;
                    921:        esac
                    922:        for sub in $unit $(($unit+8)) $(($unit+16))
                    923:        do
1.15      lukem     924:                mkdev $name$sub         b $blk $(($sub + 0)) 660 $g_operator
                    925:                mkdev n$name$sub        b $blk $(($sub + 4)) 660 $g_operator
                    926:                mkdev r$name$sub        c $chr $(($sub + 0)) 660 $g_operator
                    927:                mkdev nr$name$sub       c $chr $(($sub + 4)) 660 $g_operator
1.1       jdolecek  928:        done
                    929:        ;;
                    930:
                    931: md*)
1.4       jdolecek  932:        makedisk_minimal md ${i#md} %md_blk% %md_chr%
1.11      hannken   933:        ;;
                    934:
                    935: fss*)
1.15      lukem     936:        case $i in
                    937:        fss*) name=fss; unit=${i#fss};  blk=%fss_blk%;  chr=%fss_chr%
                    938:        esac
                    939:        mkdev $name$unit        b $blk $unit 660 $g_operator
                    940:        mkdev r$name$unit       c $chr $unit 660 $g_operator
1.1       jdolecek  941:        ;;
                    942:
                    943: ss*)
                    944:        case $i in
                    945:        ss*) name=ss;   unit=${i#ss};   chr=%ss_chr%;;
                    946:        esac
1.15      lukem     947:        mkdev $name$unit        c $chr $(($unit * 16 + 0)) 640 $g_operator
                    948:        mkdev n$name$unit       c $chr $(($unit * 16 + 1)) 640 $g_operator
                    949:        mkdev en$name$unit      c $chr $(($unit * 16 + 3)) 640 $g_operator
1.1       jdolecek  950:        ;;
                    951:
1.5       jdolecek  952: ccd*|cgd*|raid*|vnd*)
1.1       jdolecek  953:        case $i in
1.15      lukem     954:        ccd*)   name=ccd;       unit=${i#ccd};  blk=%ccd_blk%;  chr=%ccd_chr%;;
                    955:        cgd*)   name=cgd;       unit=${i#cgd};  blk=%cgd_blk%;  chr=%cgd_chr%;;
                    956:        raid*)  name=raid;      unit=${i#raid}; blk=%raid_blk%; chr=%raid_chr%;;
                    957:        vnd*)   name=vnd;       unit=${i#vnd};  blk=%vnd_blk%;  chr=%vnd_chr%;;
1.1       jdolecek  958:        esac
1.5       jdolecek  959:        %MKDISK% $name $unit $blk $chr
                    960:        ;;
                    961:
                    962: sd*)
                    963:        name=sd; unit=${i#sd};  blk=%sd_blk%;   chr=%sd_chr%
1.1       jdolecek  964:        %MKDISK% $name $unit $blk $chr
                    965:        ;;
                    966:
                    967: wd*)
                    968:        name=wd; unit=${i#wd}; blk=%wd_blk%; chr=%wd_chr%
                    969:        %MKDISK% $name $unit $blk $chr
                    970:        ;;
                    971:
                    972: fd*)
                    973:        name=fd; unit=${i#fd}; blk=%fd_blk%; chr=%fd_chr%
                    974:        %MKDISK% $name $unit $blk $chr
                    975:        ;;
                    976:
                    977: ld*)
                    978:        name=ld; unit=${i#ld}; blk=%ld_blk%; chr=%ld_chr%
                    979:        %MKDISK% $name $unit $blk $chr
                    980:        ;;
                    981:
1.86      martti    982: bio)
                    983:        mkdev bio c %bio_chr% 0
                    984:        ;;
                    985:
1.1       jdolecek  986: ed*)
                    987:        name=ed; unit=${i#ed}; blk=%ed_blk%; chr=%ed_chr%
                    988:        %MKDISK% $name $unit $blk $chr
                    989:        ;;
                    990:
                    991: ofdisk*)
                    992:        name=ofdisk; unit=${i#ofdisk}; blk=%ofdisk_blk%; chr=%ofdisk_chr%
                    993:        %MKDISK% $name $unit $blk $chr
                    994:        ;;
                    995:
1.39      bouyer    996: xbd*)
                    997:        name=xbd; unit=${i#xbd}; blk=%xbd_blk%; chr=%xbd_chr%
                    998:        %MKDISK% $name $unit $blk $chr
                    999:        ;;
                   1000:
1.59      christos 1001: dk*)
1.60      martin   1002:        name=dk; unit=${i#dk}; blk=%dk_blk%; chr=%dk_chr%
1.84      dyoung   1003:        minor=0
1.73      riz      1004:        while [ $minor -le ${i#dk} ]
1.59      christos 1005:        do
                   1006:                mkdev r$name$minor c $chr $minor 0640 $g_operator
                   1007:                mkdev $name$minor b $blk  $minor 0640 $g_operator
                   1008:                minor=$(($minor + 1))
                   1009:        done
                   1010:        ;;
1.84      dyoung   1011:
1.15      lukem    1012: ttyCY*)
1.25      christos 1013:        name=tyCY; chr=%cy_chr%; off=32
1.15      lukem    1014:        unit=${i#t${name}}
                   1015:        minor=$(($unit * $off))
                   1016:        eminor=$(($minor + $off))
                   1017:        while [ $minor -lt $eminor ]
                   1018:        do
1.50      dsl      1019:                nminor=000$minor
                   1020:                nminor=${nminor#${nminor%???}}
1.15      lukem    1021:                mkdev t$name$nminor c $chr $(($minor + $dialin )) "" "" $u_uucp
                   1022:                mkdev d$name$nminor c $chr $(($minor + $dialout)) "" "" $u_uucp
1.1       jdolecek 1023:                minor=$(($minor + 1))
                   1024:        done
                   1025:        ;;
                   1026:
1.15      lukem    1027: ttyCZ*)
1.25      christos 1028:        name=tyCZ; chr=%cz_chr%; off=64
1.15      lukem    1029:        unit=${i#t${name}}
                   1030:        minor=$(($unit * $off))
                   1031:        eminor=$(($minor + $off))
                   1032:        while [ $minor -lt $eminor ]
                   1033:        do
1.50      dsl      1034:                nminor=0000$minor
                   1035:                nminor=${nminor#${nminor%????}}
1.15      lukem    1036:                mkdev t$name$nminor c $chr $(($minor + $dialin )) "" "" $u_uucp
                   1037:                mkdev d$name$nminor c $chr $(($minor + $dialout)) "" "" $u_uucp
1.1       jdolecek 1038:                minor=$(($minor + 1))
                   1039:        done
                   1040:        ;;
                   1041:
1.15      lukem    1042:
1.4       jdolecek 1043: tty[0-9]|tty0[0-9])
                   1044:        # some archs have built-in zstty (major %zstty_chr%) instead
                   1045:        # of NS16550; create ttyZ* and hardlink as [dt]ty0*; this
                   1046:        # needs to be before com entry, for archs which have both
                   1047:        unit=${i#tty}
                   1048:        unit=$(($unit + 0))
                   1049:        makedev ttyZ${unit}
1.15      lukem    1050:        lndev ttyZ$unit tty0${unit}
                   1051:        lndev dtyZ$unit dty0${unit}
1.4       jdolecek 1052:        ;;
                   1053:
1.3       jdolecek 1054: tty0*|tty1*|tty[0-9])
1.15      lukem    1055:        unit=${i#tty}
1.50      dsl      1056:        ounit=00$unit
                   1057:        ounit=${ounit#${ounit%??}}
1.15      lukem    1058:        mkdev tty$ounit c %com_chr% $(($unit + $dialin )) "" "" $u_uucp
                   1059:        mkdev dty$ounit c %com_chr% $(($unit + $dialout)) "" "" $u_uucp
1.1       jdolecek 1060:        ;;
                   1061:
                   1062: ttyC*)
1.15      lukem    1063:                # some archs call com_chr ttyC traditionally
                   1064:        unit=${i#ttyC}; name=ttyC; dname=dtyC; chr=%com_chr%
                   1065:        mkdev  $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
                   1066:        mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
1.1       jdolecek 1067:        ;;
                   1068:
                   1069: ttyh*)
1.15      lukem    1070:        unit=${i#ttyh}; name=ttyh; dname=dtyh; chr=%sabtty_chr%
                   1071:        mkdev  $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
                   1072:        mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
                   1073:        ;;
                   1074:
                   1075: ttyTX*)
                   1076:        unit=${i#ttyTX}; name=ttyTX0; dname=dtyTX0; chr=%txcom_chr%
                   1077:        mkdev  $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
                   1078:        mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
1.1       jdolecek 1079:        ;;
                   1080:
                   1081: ttyZ*)
1.15      lukem    1082:        unit=${i#ttyZ}; name=ttyZ; dname=dtyZ; chr=%zstty_chr%
                   1083:        mkdev  $name$unit c $chr $(($unit + $dialin )) "" "" $u_uucp
                   1084:        mkdev $dname$unit c $chr $(($unit + $dialout)) "" "" $u_uucp
1.1       jdolecek 1085:        ;;
                   1086:
                   1087: opty)
                   1088:        for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
                   1089:        do
                   1090:                case $j in
                   1091:                [0-9])  jn=$j ;;
                   1092:                a)      jn=10 ;;
                   1093:                b)      jn=11 ;;
                   1094:                c)      jn=12 ;;
                   1095:                d)      jn=13 ;;
                   1096:                e)      jn=14 ;;
                   1097:                f)      jn=15 ;;
                   1098:                esac
1.15      lukem    1099:                mkdev ttyp$j c %pts_chr% $jn 666
                   1100:                mkdev ptyp$j c %ptc_chr% $jn 666
1.1       jdolecek 1101:        done
                   1102:        ;;
                   1103:
                   1104: pty*)
                   1105:        class=${i#pty}
1.26      christos 1106:        d1="p q r s t u v w x y z P Q R S T"
                   1107:        if [ "$class" -ge 64 ]
                   1108:        then
                   1109:                warn "$i: pty unit must be between 0 and 63"
1.1       jdolecek 1110:                continue
1.26      christos 1111:        elif [ "$class" -lt 16 ]
                   1112:        then
                   1113:                offset=0
                   1114:                mult=0
                   1115:                d2="0 1 2 3 4 5 6 7 8 9 a b c d e f"
                   1116:        else
                   1117:                class=$(($class - 16))
                   1118:                offset=256
                   1119:                mult=2
                   1120:                d2="g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
1.1       jdolecek 1121:        fi
1.26      christos 1122:        start=$(($class * 16))
                   1123:        set -- $d2
                   1124:        nt=$#
                   1125:        s1=$(($start / $nt))
                   1126:        set -- $d1
                   1127:        shift $s1
                   1128:        t1=$1
                   1129:        if [ "$t1" = v ]; then
1.16      lukem    1130:                warn "$i: pty unit conflicts with console ttyv0 device"
1.1       jdolecek 1131:                continue
                   1132:        fi
1.51      christos 1133:        s2=$(($start % ($nt - $s1 * $mult)))
1.26      christos 1134:        set -- $d2
                   1135:        shift $s2
                   1136:        t2=$1
                   1137:        unit=$(($start + $offset - $s1 * $mult))
                   1138:        end=$(($unit + 16))
                   1139:        while [ "$unit" -lt "$end" ]
                   1140:        do
                   1141:                mkdev tty$t1$t2 c %pts_chr% $unit 666
                   1142:                mkdev pty$t1$t2 c %ptc_chr% $unit 666
1.1       jdolecek 1143:                shift
1.26      christos 1144:                t2=$1
                   1145:                if [ -z "$t2" ]
                   1146:                then
                   1147:                        break
1.1       jdolecek 1148:                fi
                   1149:                unit=$(($unit + 1))
                   1150:        done
                   1151:        ;;
                   1152:
1.4       jdolecek 1153: stic*)
                   1154:        unit=${i#stic}
1.15      lukem    1155:        mkdev stic$unit c %stic_chr% $unit
1.4       jdolecek 1156:        ;;
                   1157:
1.1       jdolecek 1158: st*)
                   1159:        case $i in
                   1160:        st*) name=st;   unit=${i#st};   chr=%st_chr%;   blk=%st_blk%;;
                   1161:        esac
1.15      lukem    1162:        mkdev $name$unit        b $blk $(($unit * 16 + 0)) 660 $g_operator
                   1163:        mkdev n$name$unit       b $blk $(($unit * 16 + 1)) 660 $g_operator
                   1164:        mkdev e$name$unit       b $blk $(($unit * 16 + 2)) 660 $g_operator
                   1165:        mkdev en$name$unit      b $blk $(($unit * 16 + 3)) 660 $g_operator
                   1166:        mkdev r$name$unit       c $chr $(($unit * 16 + 0)) 660 $g_operator
                   1167:        mkdev nr$name$unit      c $chr $(($unit * 16 + 1)) 660 $g_operator
                   1168:        mkdev er$name$unit      c $chr $(($unit * 16 + 2)) 660 $g_operator
                   1169:        mkdev enr$name$unit     c $chr $(($unit * 16 + 3)) 660 $g_operator
1.1       jdolecek 1170:        ;;
                   1171:
                   1172: ses*|ch*|uk*)
                   1173:        case $i in
1.15      lukem    1174:        ch*)    name=ch;        unit=${i#ch};   chr=%ch_chr%;;
                   1175:        uk*)    name=uk;        unit=${i#uk};   chr=%uk_chr%;;
                   1176:        ses*)   name=ses;       unit=${i#ses};  chr=%ses_chr%;;
1.1       jdolecek 1177:        esac
1.15      lukem    1178:        mkdev $name$unit c $chr $unit 640 $g_operator
1.1       jdolecek 1179:        ;;
                   1180:
1.4       jdolecek 1181: cd*)
1.106     apb      1182:        makedisk_minimal cd ${i#cd} %cd_blk% %cd_chr%
1.4       jdolecek 1183:        ;;
                   1184:
                   1185: mcd*)
                   1186:        makedisk_minimal mcd ${i#mcd} %mcd_blk% %mcd_chr%
1.1       jdolecek 1187:        ;;
                   1188:
                   1189: gdrom*)
1.4       jdolecek 1190:        makedisk_minimal gdrom ${i#gdrom} %gdrom_blk% %gdrom_chr%
1.1       jdolecek 1191:        ;;
                   1192:
                   1193: lpt*|lpa*)
                   1194:        case $i in
1.104     apb      1195:        lpt*) name=lpt; unit=${i#lpt};  chr=%lpt_chr%;  flags=0;;
                   1196:        lpa*) name=lpa; unit=${i#lpa};  chr=%lpt_chr%;  flags=128;;
1.1       jdolecek 1197:        esac
1.15      lukem    1198:        mkdev $name$unit c $chr $(($unit + $flags))
1.21      jdolecek 1199:        mkdev lpt${unit}ctl c $chr $(($unit + 256))
1.1       jdolecek 1200:        ;;
                   1201:
1.32      christos 1202: bpf)
                   1203:        mkdev bpf       c %bpf_chr% 0
1.36      manu     1204:        lndev bpf bpf0
1.32      christos 1205:        ;;
                   1206:
1.62      plunky   1207: bthub)
                   1208:        mkdev bthub c %bthub_chr% 0
1.53      gdamore  1209:        ;;
                   1210:
1.40      jdolecek 1211: tun*)
                   1212:        unit=${i#tun}
                   1213:        mkdev tun$unit c %tun_chr% $unit
                   1214:        ;;
                   1215:
                   1216: joy*)
                   1217:        unit=${i#joy}
                   1218:        mkdev joy$unit c %joy_chr% $unit
1.1       jdolecek 1219:        ;;
                   1220:
                   1221: ipl)
1.15      lukem    1222:        mkdev ipl       c %ipl_chr% 0
                   1223:        mkdev ipnat     c %ipl_chr% 1
                   1224:        mkdev ipstate   c %ipl_chr% 2
                   1225:        mkdev ipauth    c %ipl_chr% 3
1.58      martti   1226:        mkdev ipsync    c %ipl_chr% 4
                   1227:        mkdev ipscan    c %ipl_chr% 5
                   1228:        mkdev iplookup  c %ipl_chr% 6
1.1       jdolecek 1229:        ;;
                   1230:
                   1231: pf)
1.15      lukem    1232:        mkdev pf c %pf_chr% 0
1.1       jdolecek 1233:        ;;
                   1234:
                   1235: crypto)
1.15      lukem    1236:        mkdev crypto c %crypto_chr% 0 666
1.1       jdolecek 1237:        ;;
                   1238:
1.72      dyoung   1239: cmos)
                   1240:        mkdev cmos c %cmos_chr% 0 644
                   1241:        ;;
                   1242:
1.1       jdolecek 1243: speaker)
1.15      lukem    1244:        mkdev speaker c %spkr_chr% 0
1.1       jdolecek 1245:        ;;
                   1246:
                   1247: lkm)
1.15      lukem    1248:        mkdev lkm c %lkm_chr% 0 640 $g_kmem
1.1       jdolecek 1249:        ;;
                   1250:
1.61      ad       1251: lockstat)
                   1252:        mkdev lockstat c %lockstat_chr% 0
                   1253:        ;;
                   1254:
1.87      ad       1255: cpuctl)
                   1256:        mkdev cpuctl c %cpuctl_chr% 0 666
                   1257:        ;;
                   1258:
1.1       jdolecek 1259: audio*)
                   1260:        unit=${i#audio}
                   1261:        audio=audio$unit
                   1262:        sound=sound$unit
                   1263:        mixer=mixer$unit
                   1264:        audioctl=audioctl$unit
1.15      lukem    1265:        : ${unit:-0}
1.104     apb      1266:        mkdev $sound    c %audio_chr% $(($unit + 0))    666
                   1267:        mkdev $audio    c %audio_chr% $(($unit + 128))  666
                   1268:        mkdev $mixer    c %audio_chr% $(($unit + 16))   666
1.15      lukem    1269:        mkdev $audioctl c %audio_chr% $(($unit + 192))  666
1.1       jdolecek 1270:        ;;
                   1271:
1.48      jmcneill 1272: gpio*)
                   1273:        unit=${i#gpio}
                   1274:        mkdev gpio$unit c %gpio_chr% $unit 644
                   1275:        ;;
                   1276:
1.1       jdolecek 1277: rmidi*)
                   1278:        unit=${i#rmidi}
1.15      lukem    1279:        mkdev rmidi$unit c %midi_chr% $unit 666
1.1       jdolecek 1280:        ;;
                   1281:
                   1282: music*)
                   1283:        unit=${i#music}
1.15      lukem    1284:        : ${unit:-0}
                   1285:        mkdev music$unit     c %sequencer_chr% $(($unit + 0))   666
1.104     apb      1286:        mkdev sequencer$unit c %sequencer_chr% $(($unit + 128)) 666
1.1       jdolecek 1287:        ;;
                   1288:
                   1289: radio*)
                   1290:        unit=${i#radio}
1.15      lukem    1291:        : ${unit:-0}
                   1292:        mkdev radio$unit c %radio_chr% $unit 666
                   1293:        ;;
                   1294:
1.56      bouyer   1295: amr*)
                   1296:        unit=${i#amr}
                   1297:        mkdev amr$unit c %amr_chr% $unit
                   1298:        ;;
                   1299:
1.15      lukem    1300: apm)
                   1301:        mkdev apm       c %apm_chr% 0 644
                   1302:        mkdev apmctl    c %apm_chr% 8 644
                   1303:        ;;
                   1304:
                   1305: apm)
                   1306:                # hpcmips uses `apmdev_chr' instead of `apm_chr'
                   1307:        mkdev apm       c %apmdev_chr% 0 644
                   1308:        mkdev apmctl    c %apmdev_chr% 8 644
1.4       jdolecek 1309:        ;;
                   1310:
1.1       jdolecek 1311: satlink*)
                   1312:        unit=${i#satlink}
1.15      lukem    1313:        mkdev satlink$unit c %satlink_chr% $unit 444
1.1       jdolecek 1314:        ;;
                   1315:
                   1316: random)
1.15      lukem    1317:        mkdev random    c %rnd_chr% 0 444
                   1318:        mkdev urandom   c %rnd_chr% 1 644
1.1       jdolecek 1319:        ;;
                   1320:
1.88      gdt      1321: cfs)
                   1322:        makedev cfs0
                   1323:        ;;
                   1324:
1.1       jdolecek 1325: cfs*)
                   1326:        unit=${i#cfs}
1.15      lukem    1327:        mkdev cfs$unit c %vcoda_chr% $unit
1.1       jdolecek 1328:        ;;
                   1329:
                   1330: sysmon)
1.15      lukem    1331:        mkdev sysmon    c %sysmon_chr% 0 644
                   1332:        mkdev watchdog  c %sysmon_chr% 1 644
                   1333:        mkdev power     c %sysmon_chr% 2 640
1.1       jdolecek 1334:        ;;
                   1335:
                   1336: scsibus*)
                   1337:        unit=${i#scsibus}
1.15      lukem    1338:        mkdev scsibus$unit c %scsibus_chr% $unit 644
1.1       jdolecek 1339:        ;;
                   1340:
                   1341: bktr)
                   1342:        makedev bktr0 bktr1
1.15      lukem    1343:        lndev   bktr0   bktr
                   1344:        lndev   tuner0  tuner
                   1345:        lndev   vbi0    vbi
1.1       jdolecek 1346:        ;;
                   1347:
                   1348: bktr*)
                   1349:        unit=${i#bktr}
1.15      lukem    1350:        mkdev bktr$unit         c %bktr_chr% $(($unit + 0))     444
                   1351:        mkdev tuner$unit        c %bktr_chr% $(($unit + 16))    444
                   1352:        mkdev vbi$unit          c %bktr_chr% $(($unit + 32))    444
1.1       jdolecek 1353:        ;;
                   1354:
1.69      ad       1355: io)
                   1356:        mkdev           io      c %mem_chr% 14  600
                   1357:        ;;
                   1358:
1.1       jdolecek 1359: iop*)
                   1360:        unit=${i#iop}
1.15      lukem    1361:        mkdev iop$unit c %iop_chr% $unit
1.1       jdolecek 1362:        ;;
                   1363:
                   1364: mlx*)
                   1365:        unit=${i#mlx}
1.15      lukem    1366:        mkdev mlx$unit c %mlx_chr% $unit
1.1       jdolecek 1367:        ;;
                   1368:
                   1369: mly*)
                   1370:        unit=${i#mly}
1.15      lukem    1371:        mkdev mly$unit c %mly_chr% $unit
1.1       jdolecek 1372:        ;;
                   1373:
1.66      manu     1374: twa*)
                   1375:        unit=${i#twa}
                   1376:        mkdev twa$unit c %twa_chr% $unit
                   1377:        ;;
                   1378:
1.1       jdolecek 1379: twe*)
                   1380:        unit=${i#twe}
1.15      lukem    1381:        mkdev twe$unit c %twe_chr% $unit
1.1       jdolecek 1382:        ;;
                   1383:
                   1384: icp*)
                   1385:        unit=${i#icp}
1.15      lukem    1386:        mkdev icp$unit c %icp_chr% $unit
1.1       jdolecek 1387:        ;;
                   1388:
                   1389: agp*)
                   1390:        unit=${i#agp}
1.15      lukem    1391:        mkdev agp$unit c %agp_chr% $unit 644
                   1392:        if [ "$unit" = "0" ]; then
                   1393:                lndev agp$unit agpgart
                   1394:        fi
1.1       jdolecek 1395:        ;;
                   1396:
                   1397: pci*)
                   1398:        unit=${i#pci}
1.15      lukem    1399:        mkdev pci$unit c %pci_chr% $unit 644
1.1       jdolecek 1400:        ;;
                   1401:
                   1402: dpti*)
                   1403:        unit=${i#dpti}
1.15      lukem    1404:        mkdev dpti$unit c %dpti_chr% $unit
1.1       jdolecek 1405:        ;;
                   1406:
                   1407: dpt*)
                   1408:        unit=${i#dpt}
1.15      lukem    1409:        mkdev dpt$unit c %dpt_chr% $unit
1.1       jdolecek 1410:        ;;
                   1411:
                   1412: altq)
1.15      lukem    1413:        makedir altq 755
1.1       jdolecek 1414:        unit=0
1.15      lukem    1415:        for dev in altq cbq wfq afm fifoq red rio localq hfsc cdnr blue priq
                   1416:        do
                   1417:                mkdev altq/$dev c %altq_chr% $unit 644
1.1       jdolecek 1418:                unit=$(($unit + 1))
                   1419:        done
                   1420:        ;;
                   1421:
                   1422: isdn)
1.15      lukem    1423:        mkdev isdn c %isdn_chr% 0
1.1       jdolecek 1424:        ;;
                   1425:
                   1426: isdnctl)
1.15      lukem    1427:        mkdev isdnctl c %isdnctl_chr% 0
1.1       jdolecek 1428:        ;;
                   1429:
                   1430: isdnbchan*)
                   1431:        unit=${i#isdnbchan}
1.15      lukem    1432:        mkdev isdnbchan$unit c %isdnbchan_chr% $unit
1.1       jdolecek 1433:        ;;
                   1434:
                   1435: isdnteld*)
                   1436:        unit=${i#isdnteld}
1.15      lukem    1437:        mkdev isdnteld$unit c %isdntel_chr% $(($unit + 64))
1.1       jdolecek 1438:        ;;
                   1439:
                   1440: isdntel*)
                   1441:        unit=${i#isdntel}
1.15      lukem    1442:        mkdev isdntel$unit c %isdntel_chr% $unit
1.1       jdolecek 1443:        ;;
                   1444:
                   1445: isdntrc*)
                   1446:        unit=${i#isdntrc}
1.15      lukem    1447:        mkdev isdntrc$unit c %isdntrc_chr% $unit
1.1       jdolecek 1448:        ;;
                   1449:
                   1450: vmegen)
                   1451:        makedev vmegen0 vmegen1 vmegen2 vmegen3
                   1452:        ;;
                   1453:
                   1454: vmegen*)
                   1455:        unit=${i#vmegen}
1.15      lukem    1456:        mkdev vmegen$unit c %vmegeneric_chr% $(($unit * 16 + 0))
1.1       jdolecek 1457:        ;;
                   1458:
                   1459: wsfont)
1.15      lukem    1460:        mkdev wsfont c %wsfont_chr% 0
1.1       jdolecek 1461:        ;;
                   1462:
                   1463: cir*)
                   1464:        unit=${i#cir}
1.15      lukem    1465:        mkdev cir$unit c %cir_chr% $unit 666
1.1       jdolecek 1466:        ;;
                   1467:
                   1468: irframe*)
                   1469:        unit=${i#irframe}
1.15      lukem    1470:        mkdev irframe$unit c %irframe_chr% $unit
1.1       jdolecek 1471:        ;;
                   1472:
                   1473: fcom*)
                   1474:        unit=${i#fcom}
1.15      lukem    1475:        mkdev fcom$unit c %fcom_chr% $unit "" "" $u_uucp
1.1       jdolecek 1476:        ;;
                   1477:
                   1478: openfirm)
1.15      lukem    1479:        mkdev openfirm c %openfirm_chr% 0 444
1.1       jdolecek 1480:        ;;
                   1481:
1.89      jmcneill 1482: pad*)
                   1483:        unit=${i#pad}
                   1484:        mkdev pad$unit c %pad_chr% $unit 444
                   1485:        ;;
                   1486:
1.1       jdolecek 1487: nvram)
1.15      lukem    1488:        mkdev nvram c %nvram_chr% 0 644
1.1       jdolecek 1489:        ;;
                   1490:
                   1491: rtc)
1.15      lukem    1492:        mkdev rtc c %rtc_chr% 0 644
1.1       jdolecek 1493:        ;;
                   1494:
                   1495: clockctl)
1.15      lukem    1496:        mkdev clockctl c %clockctl_chr% 0 660 $g_ntpd
1.1       jdolecek 1497:        ;;
                   1498:
                   1499: nsmb)
                   1500:        makedev nsmb0 nsmb1 nsmb2 nsmb3
                   1501:        ;;
                   1502:
                   1503: nsmb*)
                   1504:        unit=${i#nsmb}
1.15      lukem    1505:        mkdev nsmb$unit c %nsmb_chr% $unit 644
1.1       jdolecek 1506:        ;;
                   1507:
                   1508: kttcp)
1.15      lukem    1509:        mkdev kttcp c %kttcp_chr% 0
1.1       jdolecek 1510:        ;;
                   1511:
                   1512: dmoverio)
1.15      lukem    1513:        mkdev dmoverio c %dmoverio_chr% 0 644
1.1       jdolecek 1514:        ;;
                   1515:
                   1516: veriexec)
1.45      elad     1517:        mkdev veriexec c %veriexec_chr% 0 600
1.1       jdolecek 1518:        ;;
                   1519:
                   1520: ttyv*)
1.15      lukem    1521:        unit=${i#ttyv}
                   1522:        mkdev ttyv$unit c %pc_chr% $unit
1.1       jdolecek 1523:        ;;
                   1524:
1.15      lukem    1525: # arm, acorn32
1.4       jdolecek 1526: ttyv*)
1.15      lukem    1527:        unit=${i#ttyv}
                   1528:        mkdev ttyv$unit c %physcon_chr% $unit
1.4       jdolecek 1529:        ;;
                   1530:
1.1       jdolecek 1531: arcpp*)
1.15      lukem    1532:        unit=${i#arcpp}
                   1533:        mkdev arcpp$unit c %arcpp_chr% $unit
1.1       jdolecek 1534:        ;;
                   1535:
                   1536: par*)
1.15      lukem    1537:        unit=${i#par}
1.1       jdolecek 1538:        case $unit in
                   1539:        0)
1.15      lukem    1540:                mkdev par$unit c %par_chr% $unit
1.1       jdolecek 1541:                ;;
                   1542:        *)
1.16      lukem    1543:                warn "bad unit for par in: $i"
1.1       jdolecek 1544:                ;;
                   1545:        esac
                   1546:        ;;
                   1547:
1.108   ! hauke    1548: cpi*)
        !          1549:        unit=${i#cpi}
        !          1550:        mkdev cpi$unit c %cpi_chr% $unit
        !          1551:        ;;
        !          1552:
1.1       jdolecek 1553: ite*|ttye*)
1.4       jdolecek 1554:        case $i in
                   1555:        ite*)   unit=${i#ite};;
                   1556:        ttye*)  unit=${i#ttye};;
                   1557:        esac
1.104     apb      1558:        mkdev ttye$unit c %ite_chr% $unit
1.1       jdolecek 1559:        ;;
                   1560:
                   1561: pms*)
1.4       jdolecek 1562:        unit=${i#pms}
1.15      lukem    1563:        mkdev pms$unit c %opms_chr% $unit
1.1       jdolecek 1564:        ;;
                   1565:
                   1566: qms*)
                   1567:        unit=${i#qms}
1.15      lukem    1568:        mkdev qms$unit c %qms_chr% $unit
1.1       jdolecek 1569:        ;;
                   1570:
                   1571: lms*)
                   1572:        unit=${i#lms}
1.15      lukem    1573:        mkdev lms$unit c %lms_chr% $unit
1.1       jdolecek 1574:        ;;
                   1575:
                   1576: mms*)
                   1577:        unit=${i#mms}
1.15      lukem    1578:        mkdev mms$unit c %mms_chr% $unit
1.1       jdolecek 1579:        ;;
                   1580:
                   1581: mouse-*)
                   1582:        case $i in
1.15      lukem    1583:        mouse-pms*) name=pms ;;
                   1584:        mouse-qms*) name=qms ;;
1.1       jdolecek 1585:        esac
1.15      lukem    1586:        unit=${i#mouse-${name}}
                   1587:        lndev $name$unit mouse
1.1       jdolecek 1588:        ;;
                   1589:
                   1590: kbd)
1.15      lukem    1591:        mkdev kbd c %kbd_chr% 0
1.1       jdolecek 1592:        ;;
                   1593:
1.4       jdolecek 1594: kbdctl)
1.15      lukem    1595:        mkdev kbdctl c %kbd_chr% 1
1.4       jdolecek 1596:        ;;
                   1597:
                   1598: vidcconsole0)
1.15      lukem    1599:        mkdev vidcconsole0 c %vidcconsole_chr% 0 640
1.4       jdolecek 1600:        ;;
                   1601:
1.1       jdolecek 1602: view*)
1.15      lukem    1603:        unit=${i#view}
1.104     apb      1604:        mkdev view$unit c %view_chr% $unit 666
1.1       jdolecek 1605:        ;;
                   1606:
                   1607: mouse*)
1.15      lukem    1608:        unit=${i#mouse}
1.1       jdolecek 1609:        case $unit in
                   1610:        0|1)
1.15      lukem    1611:                mkdev mouse$unit c %ms_chr% $unit 666
                   1612:                if [ $unit = 0 ]; then
                   1613:                        lndev mouse$unit mouse
1.1       jdolecek 1614:                fi
                   1615:                ;;
                   1616:        *)
1.16      lukem    1617:                warn "bad unit for mouse in: $i"
1.1       jdolecek 1618:                ;;
                   1619:        esac
                   1620:        ;;
                   1621:
                   1622: panel)
1.15      lukem    1623:        mkdev panel0 c %panel_chr% 0 660
1.1       jdolecek 1624:        ;;
                   1625:
1.37      joff     1626: tslcd)
                   1627:        mkdev tslcd0 c %tslcd_chr% 0 660
                   1628:        ;;
                   1629:
1.1       jdolecek 1630: ipty)
1.15      lukem    1631:        mkdev ttyp0 c %pts_chr% 0 666
                   1632:        mkdev ttyp1 c %pts_chr% 1 666
                   1633:        mkdev ptyp0 c %ptc_chr% 0 666
                   1634:        mkdev ptyp1 c %ptc_chr% 1 666
1.1       jdolecek 1635:        ;;
                   1636:
1.24      christos 1637: ptm)
                   1638:        mkdev ptmx c %ptm_chr% 0 666
                   1639:        mkdev ptm c %ptm_chr% 1 666
                   1640:        ;;
                   1641:
1.1       jdolecek 1642: grf*)
                   1643:        unit=${i#grf}
1.15      lukem    1644:        mkdev grf$unit c %grf_chr% $unit 666
1.1       jdolecek 1645:        ;;
                   1646:
                   1647: etvme)
1.15      lukem    1648:        mkdev etvme c %et_chr% 0
1.1       jdolecek 1649:        ;;
                   1650:
                   1651: leo*)
                   1652:        unit=${i#leo}
1.15      lukem    1653:        mkdev leo$unit c %leo_chr% $unit
1.1       jdolecek 1654:        ;;
                   1655:
                   1656: scif*)
1.15      lukem    1657:        unit=${i#scif}
                   1658:        mkdev scif$unit c %scif_chr% $unit "" "" $u_uucp
1.1       jdolecek 1659:        ;;
                   1660:
                   1661: sci*)
1.15      lukem    1662:        unit=${i#sci}
                   1663:        mkdev sci$unit c %sci_chr% $unit "" "" $u_uucp
1.1       jdolecek 1664:        ;;
                   1665:
                   1666: maple*)
                   1667:        case $i in
                   1668:        mapleA*) name="mapleA"; unit=0;;
                   1669:        mapleB*) name="mapleB"; unit=1;;
                   1670:        mapleC*) name="mapleC"; unit=2;;
                   1671:        mapleD*) name="mapleD"; unit=3;;
                   1672:        esac
                   1673:        subunit=${i#$name}
1.15      lukem    1674:        mkdev $name$subunit c %maple_chr% $(($unit * 8 + 0$subunit))
1.1       jdolecek 1675:        ;;
                   1676:
                   1677: mmem*)
1.15      lukem    1678:        unit=${i#mmem}
1.1       jdolecek 1679:        for pt in 0     # 1 2 3 4 ... 255
                   1680:        do
1.15      lukem    1681: #              mkdev mmem${unit}.${pt}a  b %mmem_blk% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator
                   1682:                mkdev mmem${unit}.${pt}c  b %mmem_blk% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator
                   1683: #              mkdev rmmem${unit}.${pt}a c %mmem_chr% $(($unit * 4096 + $pt * 16 + 0)) 640 $g_operator
                   1684:                mkdev rmmem${unit}.${pt}c c %mmem_chr% $(($unit * 4096 + $pt * 16 + 2)) 640 $g_operator
1.1       jdolecek 1685:        done
                   1686:        ;;
                   1687:
                   1688: mlcd*)
1.15      lukem    1689:        unit=${i#mlcd}
1.1       jdolecek 1690:        for pt in 0     # 1 2 3 4 ... 255
                   1691:        do
1.15      lukem    1692:                mkdev mlcd${unit}.${pt} c %mlcd_chr% $(($unit * 256 + $pt)) 640 $g_operator
1.1       jdolecek 1693:        done
                   1694:        ;;
                   1695:
                   1696: ixpcom*)
                   1697:        unit=${i#ixpcom}
1.15      lukem    1698:        mkdev ixpcom$unit c %ixpcom_chr% $unit "" "" $u_uucp
1.1       jdolecek 1699:        ;;
                   1700:
1.34      joff     1701: epcom*)
                   1702:        unit=${i#epcom}
                   1703:        mkdev epcom$unit c %epcom_chr% $unit "" "" $u_uucp
                   1704:        ;;
                   1705:
1.1       jdolecek 1706: ucbsnd)
1.15      lukem    1707:        mkdev ucbsnd c %ucbsnd_chr% 0 666
1.1       jdolecek 1708:        ;;
                   1709:
                   1710: adb)
1.15      lukem    1711:        mkdev adb c %aed_chr% 0 666
1.1       jdolecek 1712:        ;;
                   1713:
                   1714: asc*)
                   1715:        unit=${i#asc}
1.15      lukem    1716:        mkdev asc$unit c %asc_chr% $unit 666
1.1       jdolecek 1717:        ;;
                   1718:
                   1719: bwtwo*)
                   1720:        unit=${i#bwtwo}
1.15      lukem    1721:        mkdev bwtwo$unit c %bwtwo_chr% $unit 666
1.1       jdolecek 1722:        ;;
                   1723:
                   1724: cgtwo*)
                   1725:        unit=${i#cgtwo}
1.15      lukem    1726:        mkdev cgtwo$unit c %cgtwo_chr% $unit 666
1.1       jdolecek 1727:        ;;
                   1728:
                   1729: cgthree*)
                   1730:        unit=${i#cgthree}
1.15      lukem    1731:        mkdev cgthree$unit c %cgthree_chr% $unit 666
1.1       jdolecek 1732:        ;;
                   1733:
                   1734: cgfour*)
                   1735:        unit=${i#cgfour}
1.15      lukem    1736:        mkdev cgfour$unit c %cgfour_chr% $unit 666
1.1       jdolecek 1737:        ;;
                   1738:
                   1739: cgsix*)
                   1740:        unit=${i#cgsix}
1.15      lukem    1741:        mkdev cgsix$unit c %cgsix_chr% $unit 666
1.1       jdolecek 1742:        ;;
                   1743:
                   1744: cgeight*)
                   1745:        unit=${i#cgeight}
1.15      lukem    1746:        mkdev cgeight$unit c %cgeight_chr% $unit 666
1.1       jdolecek 1747:        ;;
                   1748:
                   1749: tcx*)
                   1750:        unit=${i#tcx}
1.15      lukem    1751:        mkdev tcx$unit c %tcx_chr% $unit 666
1.1       jdolecek 1752:        ;;
                   1753:
                   1754: xd*|xy*)
                   1755:        case $i in
                   1756:        xd*)    name=xd; unit=${i#xd}; blk=%xd_blk%;    chr=%xd_chr%;;
                   1757:        xy*)    name=xy; unit=${i#xy}; blk=%xy_blk%;    chr=%xy_chr%;;
                   1758:        esac
                   1759:        %MKDISK% $name $unit $blk $chr
                   1760:        ;;
                   1761:
                   1762: magma*)
                   1763:        unit=${i#magma}
1.15      lukem    1764:        if [ 0$unit -gt 3 ]; then
1.16      lukem    1765:                warn "bad unit for $i: $unit"
1.1       jdolecek 1766:                break
                   1767:        fi
                   1768:        for j in 0 1 2 3 4 5 6 7 8 9 a b c d e f
                   1769:        do
                   1770:                case $j in
                   1771:                [0-9])  jn=$j ;;
                   1772:                a)      jn=10 ;;
                   1773:                b)      jn=11 ;;
                   1774:                c)      jn=12 ;;
                   1775:                d)      jn=13 ;;
                   1776:                e)      jn=14 ;;
                   1777:                f)      jn=15 ;;
                   1778:                esac
1.15      lukem    1779:                mkdev tty$unit$j c %mtty_chr% $(($unit * 64 + $jn))
1.1       jdolecek 1780:        done
1.15      lukem    1781:        mkdev bpp${unit}0 c %mbpp_chr% $(($unit * 64 + 0))
                   1782:        mkdev bpp${unit}1 c %mbpp_chr% $(($unit * 64 + 1))
1.1       jdolecek 1783:        ;;
                   1784:
                   1785: clcd*)
                   1786:        unit=${i#clcd}
1.15      lukem    1787:        if [ 0$unit -gt 7 ]; then
1.16      lukem    1788:                warn "bad unit for $i: $unit"
1.1       jdolecek 1789:                break
                   1790:        fi
                   1791:        for j in 0 1 2 3 4 5 6 7
                   1792:        do
1.15      lukem    1793:                mkdev ttyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialin)) "" "" $u_uucp
                   1794:                mkdev dtyA$unit$j c %clcd_chr% $(($unit * 8 + $j + $dialout)) "" "" $u_uucp
1.1       jdolecek 1795:        done
                   1796:        ;;
                   1797:
1.27      mrg      1798: spif*)
                   1799:        unit=${i#spif}
                   1800:        if [ 0$unit -gt 3 ]; then
                   1801:                warn "bad unit for $i: $unit"
                   1802:                break
                   1803:        fi
                   1804:        for j in 0 1 2 3 4 5 6 7; do
                   1805:                mkdev ttyS$unit$j c 102 $(($unit * 64 + $j)) "" "" $u_uucp
                   1806:        done
                   1807:        mkdev bppS${unit}0 c 103 $(($unit * 64 + 0))
                   1808:        mkdev bppS${unit}1 c 103 $(($unit * 64 + 1))
                   1809:        ;;
                   1810:
1.1       jdolecek 1811: bpp*)
                   1812:        unit=${i#bpp}
1.15      lukem    1813:        mkdev bpp$unit c %bpp_chr% $(($unit + 0))
1.1       jdolecek 1814:        ;;
                   1815:
                   1816: tctrl*)
                   1817:        unit=${i#tctrl}
1.15      lukem    1818:        mkdev tctrl$unit c %tctrl_chr% $unit 666
1.1       jdolecek 1819:        ;;
                   1820:
                   1821: bmd*)
1.15      lukem    1822:        unit=${i#bmd}
                   1823:        mkdev bmd${unit}a  b %bmd_blk% $(($unit * 8 + 0)) 640 $g_operator
                   1824:        mkdev bmd${unit}c  b %bmd_blk% $(($unit * 8 + 2)) 640 $g_operator
                   1825:        mkdev rbmd${unit}a c %bmd_chr% $(($unit * 8 + 0)) 640 $g_operator
                   1826:        mkdev rbmd${unit}c c %bmd_chr% $(($unit * 8 + 2)) 640 $g_operator
1.1       jdolecek 1827:        ;;
                   1828:
                   1829: sram)
1.15      lukem    1830:        mkdev sram c %sram_chr% 0 644
1.1       jdolecek 1831:        ;;
                   1832:
                   1833: pow*)
                   1834:        unit=${i#pow}
                   1835:        case $unit in
                   1836:        0|1)
1.15      lukem    1837:                mkdev pow${unit} c %pow_chr% ${unit} 644
                   1838:                if [ $unit = 0 ]; then
                   1839:                        lndev pow${unit} pow
1.1       jdolecek 1840:                fi
                   1841:                ;;
                   1842:        *)
1.16      lukem    1843:                warn "bad unit for pow in: $i"
1.1       jdolecek 1844:                ;;
                   1845:        esac
                   1846:        ;;
                   1847:
                   1848: ttyS*)
                   1849:        unit=${i#ttyS}
1.15      lukem    1850:        mkdev ttyS$unit c %sacom_chr% $(($unit + $dialin )) "" "" $u_uucp
                   1851:        mkdev dtyS$unit c %sacom_chr% $(($unit + $dialout)) "" "" $u_uucp
1.1       jdolecek 1852:        ;;
                   1853:
1.28      bouyer   1854: atabus*)
                   1855:        unit=${i#atabus}
                   1856:        mkdev atabus$unit c %atabus_chr% $unit 644
                   1857:        ;;
                   1858:
1.29      drochner 1859: drvctl)
                   1860:        mkdev drvctl c %drvctl_chr% 0 644
                   1861:        ;;
1.28      bouyer   1862:
1.103     dyoung   1863: isv)
                   1864:        mkdev isv c %isv_chr% 0 644
                   1865:        ;;
                   1866:
1.38      cube     1867: tap*)
                   1868:        unit=${i#tap}
                   1869:        case "$unit" in
                   1870:        [0-9]*)
                   1871:                mkdev tap${unit} c %tap_chr% ${unit} 600
                   1872:                ;;
                   1873:        *)
                   1874:                mkdev tap c %tap_chr% 0xfffff 600
                   1875:                ;;
                   1876:        esac
                   1877:        ;;
                   1878:
1.46      kiyohara 1879: fw*)
                   1880:        unit=${i#fw}
                   1881:        for j in 0 1 2 3
                   1882:        do
                   1883:                mkdev fw${unit}.${j} c %fw_chr% $((${unit} * 256 + ${j})) 660 ${g_operator}
                   1884:                mkdev fwmem${unit}.${j} c %fw_chr% $((65536 + ${unit} * 256 + ${j})) 660 ${g_operator}
                   1885:        done
                   1886:        ;;
                   1887:
1.90      pooka    1888: # create putter device and symlinks for all subsystems using it
                   1889: putter)
                   1890:        mkdev putter c %putter_chr% 0 600
1.91      pooka    1891:        mkdev pud c %putter_chr% 1 600
1.104     apb      1892:        lndev putter puffs
1.67      pooka    1893:        ;;
                   1894:
1.1       jdolecek 1895: midevend)
                   1896: %MI_DEVICES_END%
                   1897: local)
                   1898:        if [ -f "$0.local" ]; then
                   1899:                umask 0
1.85      dyoung   1900:                if [ -n "$count_nodes" ]; then
1.92      apb      1901:                        count_nodes=$((count_nodes + \
                   1902:                            $(linecount "$(sh "$0.local" $opts -s all)") ))
1.85      dyoung   1903:                else
                   1904:                        sh "$0.local" $opts all
                   1905:                fi
1.1       jdolecek 1906:                umask 077
1.74      apb      1907:        else
                   1908:                warn "missing $0.local"
1.1       jdolecek 1909:        fi
                   1910:        ;;
                   1911:
                   1912: *)
1.16      lukem    1913:        warn "$i: unknown device"
1.1       jdolecek 1914:        ;;
                   1915:
                   1916: esac
                   1917: done
                   1918:
                   1919: }
                   1920:
1.15      lukem    1921:
1.1       jdolecek 1922: # three variants of disk partitions - max 8, max 16, max 16 with highpartoffset
1.3       jdolecek 1923: # hack; only the one used by port is retained in final MAKEDEV script
1.1       jdolecek 1924: # routine is called as:
                   1925: # makedisk name unit blk chr
1.15      lukem    1926: makedisk_p8()
                   1927: {
1.1       jdolecek 1928:        name="$1"; unit="$2"; blk="$3"; chr="$4"
                   1929:
1.15      lukem    1930:        mkdev ${name}${unit}a   b $blk $(($unit * 8 + 0))       640 $g_operator
                   1931:        mkdev ${name}${unit}b   b $blk $(($unit * 8 + 1))       640 $g_operator
                   1932:        mkdev ${name}${unit}c   b $blk $(($unit * 8 + 2))       640 $g_operator
                   1933:        mkdev ${name}${unit}d   b $blk $(($unit * 8 + 3))       640 $g_operator
                   1934:        mkdev ${name}${unit}e   b $blk $(($unit * 8 + 4))       640 $g_operator
                   1935:        mkdev ${name}${unit}f   b $blk $(($unit * 8 + 5))       640 $g_operator
                   1936:        mkdev ${name}${unit}g   b $blk $(($unit * 8 + 6))       640 $g_operator
                   1937:        mkdev ${name}${unit}h   b $blk $(($unit * 8 + 7))       640 $g_operator
                   1938:        mkdev r${name}${unit}a  c $chr $(($unit * 8 + 0))       640 $g_operator
                   1939:        mkdev r${name}${unit}b  c $chr $(($unit * 8 + 1))       640 $g_operator
                   1940:        mkdev r${name}${unit}c  c $chr $(($unit * 8 + 2))       640 $g_operator
                   1941:        mkdev r${name}${unit}d  c $chr $(($unit * 8 + 3))       640 $g_operator
                   1942:        mkdev r${name}${unit}e  c $chr $(($unit * 8 + 4))       640 $g_operator
                   1943:        mkdev r${name}${unit}f  c $chr $(($unit * 8 + 5))       640 $g_operator
                   1944:        mkdev r${name}${unit}g  c $chr $(($unit * 8 + 6))       640 $g_operator
                   1945:        mkdev r${name}${unit}h  c $chr $(($unit * 8 + 7))       640 $g_operator
1.1       jdolecek 1946: }
1.15      lukem    1947:
                   1948: makedisk_p16()
                   1949: {
1.1       jdolecek 1950:        name="$1"; unit="$2"; blk="$3"; chr="$4"
                   1951:
1.15      lukem    1952:        mkdev ${name}${unit}a   b $blk $(($unit * 16 + 0))      640 $g_operator
                   1953:        mkdev ${name}${unit}b   b $blk $(($unit * 16 + 1))      640 $g_operator
                   1954:        mkdev ${name}${unit}c   b $blk $(($unit * 16 + 2))      640 $g_operator
                   1955:        mkdev ${name}${unit}d   b $blk $(($unit * 16 + 3))      640 $g_operator
                   1956:        mkdev ${name}${unit}e   b $blk $(($unit * 16 + 4))      640 $g_operator
                   1957:        mkdev ${name}${unit}f   b $blk $(($unit * 16 + 5))      640 $g_operator
                   1958:        mkdev ${name}${unit}g   b $blk $(($unit * 16 + 6))      640 $g_operator
                   1959:        mkdev ${name}${unit}h   b $blk $(($unit * 16 + 7))      640 $g_operator
                   1960:        mkdev ${name}${unit}i   b $blk $(($unit * 16 + 8))      640 $g_operator
                   1961:        mkdev ${name}${unit}j   b $blk $(($unit * 16 + 9))      640 $g_operator
                   1962:        mkdev ${name}${unit}k   b $blk $(($unit * 16 + 10))     640 $g_operator
                   1963:        mkdev ${name}${unit}l   b $blk $(($unit * 16 + 11))     640 $g_operator
                   1964:        mkdev ${name}${unit}m   b $blk $(($unit * 16 + 12))     640 $g_operator
                   1965:        mkdev ${name}${unit}n   b $blk $(($unit * 16 + 13))     640 $g_operator
                   1966:        mkdev ${name}${unit}o   b $blk $(($unit * 16 + 14))     640 $g_operator
                   1967:        mkdev ${name}${unit}p   b $blk $(($unit * 16 + 15))     640 $g_operator
                   1968:        mkdev r${name}${unit}a  c $chr $(($unit * 16 + 0))      640 $g_operator
                   1969:        mkdev r${name}${unit}b  c $chr $(($unit * 16 + 1))      640 $g_operator
                   1970:        mkdev r${name}${unit}c  c $chr $(($unit * 16 + 2))      640 $g_operator
                   1971:        mkdev r${name}${unit}d  c $chr $(($unit * 16 + 3))      640 $g_operator
                   1972:        mkdev r${name}${unit}e  c $chr $(($unit * 16 + 4))      640 $g_operator
                   1973:        mkdev r${name}${unit}f  c $chr $(($unit * 16 + 5))      640 $g_operator
                   1974:        mkdev r${name}${unit}g  c $chr $(($unit * 16 + 6))      640 $g_operator
                   1975:        mkdev r${name}${unit}h  c $chr $(($unit * 16 + 7))      640 $g_operator
                   1976:        mkdev r${name}${unit}i  c $chr $(($unit * 16 + 8))      640 $g_operator
                   1977:        mkdev r${name}${unit}j  c $chr $(($unit * 16 + 9))      640 $g_operator
                   1978:        mkdev r${name}${unit}k  c $chr $(($unit * 16 + 10))     640 $g_operator
                   1979:        mkdev r${name}${unit}l  c $chr $(($unit * 16 + 11))     640 $g_operator
                   1980:        mkdev r${name}${unit}m  c $chr $(($unit * 16 + 12))     640 $g_operator
                   1981:        mkdev r${name}${unit}n  c $chr $(($unit * 16 + 13))     640 $g_operator
                   1982:        mkdev r${name}${unit}o  c $chr $(($unit * 16 + 14))     640 $g_operator
                   1983:        mkdev r${name}${unit}p  c $chr $(($unit * 16 + 15))     640 $g_operator
1.1       jdolecek 1984: }
1.15      lukem    1985:
                   1986: makedisk_p16high()
                   1987: {
                   1988:        ho=524280       # offset for partition 9 to 16
1.1       jdolecek 1989:        name="$1"; unit="$2"; blk="$3"; chr="$4"
                   1990:
1.15      lukem    1991:        mkdev ${name}${unit}a   b $blk $(($unit * 8 + 0))       640 $g_operator
                   1992:        mkdev ${name}${unit}b   b $blk $(($unit * 8 + 1))       640 $g_operator
                   1993:        mkdev ${name}${unit}c   b $blk $(($unit * 8 + 2))       640 $g_operator
                   1994:        mkdev ${name}${unit}d   b $blk $(($unit * 8 + 3))       640 $g_operator
                   1995:        mkdev ${name}${unit}e   b $blk $(($unit * 8 + 4))       640 $g_operator
                   1996:        mkdev ${name}${unit}f   b $blk $(($unit * 8 + 5))       640 $g_operator
                   1997:        mkdev ${name}${unit}g   b $blk $(($unit * 8 + 6))       640 $g_operator
                   1998:        mkdev ${name}${unit}h   b $blk $(($unit * 8 + 7))       640 $g_operator
1.104     apb      1999:        mkdev ${name}${unit}i   b $blk $(($unit * 8 + $ho + 8)) 640 $g_operator
                   2000:        mkdev ${name}${unit}j   b $blk $(($unit * 8 + $ho + 9)) 640 $g_operator
1.15      lukem    2001:        mkdev ${name}${unit}k   b $blk $(($unit * 8 + $ho + 10)) 640 $g_operator
                   2002:        mkdev ${name}${unit}l   b $blk $(($unit * 8 + $ho + 11)) 640 $g_operator
                   2003:        mkdev ${name}${unit}m   b $blk $(($unit * 8 + $ho + 12)) 640 $g_operator
                   2004:        mkdev ${name}${unit}n   b $blk $(($unit * 8 + $ho + 13)) 640 $g_operator
                   2005:        mkdev ${name}${unit}o   b $blk $(($unit * 8 + $ho + 14)) 640 $g_operator
                   2006:        mkdev ${name}${unit}p   b $blk $(($unit * 8 + $ho + 15)) 640 $g_operator
                   2007:        mkdev r${name}${unit}a  c $chr $(($unit * 8 + 0))       640 $g_operator
                   2008:        mkdev r${name}${unit}b  c $chr $(($unit * 8 + 1))       640 $g_operator
                   2009:        mkdev r${name}${unit}c  c $chr $(($unit * 8 + 2))       640 $g_operator
                   2010:        mkdev r${name}${unit}d  c $chr $(($unit * 8 + 3))       640 $g_operator
                   2011:        mkdev r${name}${unit}e  c $chr $(($unit * 8 + 4))       640 $g_operator
                   2012:        mkdev r${name}${unit}f  c $chr $(($unit * 8 + 5))       640 $g_operator
                   2013:        mkdev r${name}${unit}g  c $chr $(($unit * 8 + 6))       640 $g_operator
                   2014:        mkdev r${name}${unit}h  c $chr $(($unit * 8 + 7))       640 $g_operator
1.104     apb      2015:        mkdev r${name}${unit}i  c $chr $(($unit * 8 + $ho + 8)) 640 $g_operator
                   2016:        mkdev r${name}${unit}j  c $chr $(($unit * 8 + $ho + 9)) 640 $g_operator
1.15      lukem    2017:        mkdev r${name}${unit}k  c $chr $(($unit * 8 + $ho + 10)) 640 $g_operator
                   2018:        mkdev r${name}${unit}l  c $chr $(($unit * 8 + $ho + 11)) 640 $g_operator
                   2019:        mkdev r${name}${unit}m  c $chr $(($unit * 8 + $ho + 12)) 640 $g_operator
                   2020:        mkdev r${name}${unit}n  c $chr $(($unit * 8 + $ho + 13)) 640 $g_operator
                   2021:        mkdev r${name}${unit}o  c $chr $(($unit * 8 + $ho + 14)) 640 $g_operator
                   2022:        mkdev r${name}${unit}p  c $chr $(($unit * 8 + $ho + 15)) 640 $g_operator
1.4       jdolecek 2023: }
                   2024:
                   2025: # make only the very few basic disk device nodes - 'a' partition
                   2026: # and raw partition
1.15      lukem    2027: makedisk_minimal()
                   2028: {
1.4       jdolecek 2029:        name=$1; unit=$2; blk=$3; chr=$4
                   2030:        doff=%DISKMINOROFFSET%
1.15      lukem    2031:        ro=%RAWDISK_OFF%
                   2032:        rn=%RAWDISK_NAME%
1.4       jdolecek 2033:
1.15      lukem    2034:        mkdev ${name}${unit}a   b $blk $(($unit * $doff + 0))   640 $g_operator
1.104     apb      2035:        mkdev ${name}${unit}$rn b $blk $(($unit * $doff + $ro)) 640 $g_operator
1.15      lukem    2036:        mkdev r${name}${unit}a  c $chr $(($unit * $doff + 0))   640 $g_operator
                   2037:        mkdev r${name}${unit}$rn c $chr $(($unit * $doff + $ro)) 640 $g_operator
1.1       jdolecek 2038: }
                   2039:
1.98      apb      2040: # create_mfs_dev nodes
1.104     apb      2041: #      Create a memory file system for a given number of device nodes,
                   2042: #      and mount it.  Attempts to use mount_tmpfs, or falls back to
                   2043: #      mount_mfs.
1.98      apb      2044: #
1.104     apb      2045: #      If do_redirect, then also redirect output to the console.
1.98      apb      2046: #
1.77      dsl      2047: create_mfs_dev()
                   2048: {
1.98      apb      2049:        ndevnodes=${1-1200}
                   2050:        dev_mountpoint=${PWD:-/dev}
                   2051:
                   2052:        # Number of inodes is the specified number of device nodes, plus
                   2053:        # a margin to allow for extra device nodes created later.
                   2054:        ninode=$((ndevnodes * 11 / 10))
                   2055:        # Add 2 reserved inodes (needed for both mfs and tmpfs), and round
                   2056:        # up to a multiple of 32 (needed for mfs, not needed for tmpfs).
                   2057:        ninode=$(( (ninode + 2 + 31) / 32 * 32 ))
                   2058:        # This file system size calculation is exact for mount_mfs(8)
                   2059:        # with 512-byte sectors; it's larger than necessary
                   2060:        # for mount_tmpfs(8).  40960 bytes (80 blocks) is the minimum size
                   2061:        # allowed by mount_mfs.
                   2062:        fs_bytes=$((8192 + 2 * 8192 + 4096 + ninode*(128+18) + 8192))
                   2063:        [ "$fs_bytes" -lt 40960 ] && fs_bytes=40960
                   2064:        fs_blocks=$((fs_bytes/512))
                   2065:
                   2066:        # Try tmpfs; if that fails try mfs.
1.99      apb      2067:        if mount_tmpfs -s $fs_bytes -n $ninode -m 0755 \
1.98      apb      2068:                -o union tmpfs "$dev_mountpoint"
                   2069:        then
                   2070:            fstype=tmpfs
1.99      apb      2071:        elif mount_mfs -b 4096 -f 512 -s $fs_blocks -n $ninode -p 0755 \
1.98      apb      2072:                -o union swap "$dev_mountpoint"
                   2073:        then
                   2074:            fstype=mfs
                   2075:        else
1.104     apb      2076:            die "Failed to create memory file system"
1.98      apb      2077:        fi
1.84      dyoung   2078:
1.98      apb      2079:        # Our current directory was in the lower file system; change it to
                   2080:        # the newly mounted upper file system.
                   2081:        cd "$dev_mountpoint"
1.84      dyoung   2082:
1.82      apb      2083:        if $do_redirect; then
                   2084:                # Redirect stdout and stderr to console
                   2085:                mknod -m 600 -g 0 -u 0 temp_console c 0 0
                   2086:                exec >temp_console 2>&1
                   2087:                rm temp_console
                   2088:        fi
1.98      apb      2089:
                   2090:        echo "Created $fstype $dev_mountpoint" \
                   2091:                "($fs_blocks blocks, $ninode inodes)"
1.84      dyoung   2092: }
1.77      dsl      2093:
1.74      apb      2094: #
1.79      apb      2095: # MAIN: If MAKEDEV_AS_LIBRARY is set, then we are being used as a
1.93      apb      2096: # function library, so just return.  Otherwise, do all the real work.
1.74      apb      2097: #
1.79      apb      2098: [ -n "${MAKEDEV_AS_LIBRARY}" ] && return
1.97      apb      2099: makedev_main makedev ${1+"$@"}

CVSweb <webmaster@jp.NetBSD.org>