[BACK]Return to MAKEDEV.common CVS log [TXT][DIR] Up to [local] / src / etc

Annotation of src/etc/MAKEDEV.common, Revision 1.1

1.1     ! miod        1: vers(a, {-$OpenBSD$-})dnl
        !             2: divert(1)dnl
        !             3: dnl
        !             4: dnl Common device definitions.
        !             5: dnl
        !             6: dnl This file contains the MI device definitions (as well as some MD
        !             7: dnl definitions not cleaned up yet...)
        !             8: dnl
        !             9: dnl Diversions:  (upon termination, concatenated output queues)
        !            10: dnl
        !            11: dnl 0 - very top
        !            12: dnl 1 - descriptions of devices
        !            13: dnl 2 - init of script, function definitions, etc
        !            14: dnl 3 - beginning of global recursive R() function
        !            15: dnl 7 - body of MAKEDEV, device creations, etc
        !            16: dnl 9 - end
        !            17: dnl
        !            18: dnl Diversions 2, 3 and 7 are not filled when generating the manual page.
        !            19: dnl
        !            20: dnl HOW TO ADD A DEVICE:
        !            21: dnl
        !            22: dnl In this file, you must use at least two macros:
        !            23: dnl
        !            24: dnl  Use '__devitem(uniqueid, name-pattern, description)' to create an entry
        !            25: dnl  in the description at the top of the generated MAKEDEV file:
        !            26: dnl
        !            27: dnl    __devitem(sca, sca*, Sugar Generic device)dnl
        !            28: dnl    __devitem(cry, crypto, hardware crypto access driver)dnl
        !            29: dnl
        !            30: dnl  This is ultimately shown as:
        !            31: dnl
        !            32: dnl    #  sca*   Sugar Generic device
        !            33: dnl    #  crypto hardware crypto access driver
        !            34: dnl
        !            35: dnl  Use '_mkdev(uniqueid, shell-pattern, {-shell-script-})dnl' to create
        !            36: dnl  a shell script fragment used to 'create' the device (be sure to match
        !            37: dnl  the uniqueid from above):
        !            38: dnl
        !            39: dnl    _mkdev(sca, sca*, {-M sca$U c major_sca_c $U
        !            40: dnl           M rsca$U b major_sca_b Add($U, 128)-})dnl
        !            41: dnl    _mkdev(cry, crypto, {-M crypto c major_cry_c 0-})dnl
        !            42: dnl
        !            43: dnl  This is ultimately expanded into:
        !            44: dnl
        !            45: dnl    sca*)
        !            46: dnl           M sca$U c 24 $U
        !            47: dnl           M sca$U b 42 $(($U+128))
        !            48: dnl           ;;
        !            49: dnl
        !            50: dnl    crypto)
        !            51: dnl           M crypto c 47 0
        !            52: dnl           ;;
        !            53: dnl
        !            54: dnl In the MAKEDEV.md file, add a '_DEV(uniqueid, charmajor, blockmajor)'
        !            55: dnl entry:
        !            56: dnl
        !            57: dnl   _DEV(sca, 24, 42)
        !            58: dnl   _DEV(cry, 47)
        !            59: dnl
        !            60: dnl Final step is to use the 'target/twrget' macros to have the 'all)' target
        !            61: dnl generate one or more device(s).  Usage of 'target/twrget' is:
        !            62: dnl      target(target_name, device_name [, append_string ] .. )
        !            63: dnl      twrget(target_name, uniqueid, device_name, [, append_string ] .. )
        !            64: dnl
        !            65: dnl        target_name   a unique name that later is used as an argument to
        !            66: dnl                      'show_target()' (which expands all devices for a
        !            67: dnl                      given 'target_name').
        !            68: dnl        uniqueid      same as 'uniqueid' above
        !            69: dnl        device_name   string representing the device to be mknod'ed
        !            70: dnl        append_string for each append_string, `device_name' is prepended
        !            71: dnl
        !            72: dnl Note: 'target(a,b,c)' is equivalent to 'twrget(a,b,b,c)'
        !            73: dnl
        !            74: dnl
        !            75: dnl For a short example:
        !            76: dnl
        !            77: dnl   target(all, std)dnl
        !            78: dnl   target(all, sca, 0, 1, 2, 3)dnl
        !            79: dnl   twrget(all, cry, crypto)dnl
        !            80: dnl
        !            81: dnl would expand to:
        !            82: dnl
        !            83: dnl   all)
        !            84: dnl        R std sca0 sca1 sca2 sca3 crypto
        !            85: dnl        ;;
        !            86: dnl
        !            87: dnl presuming '_DEV(sca, ?, ?)' and '_DEV(std)' were in the MAKEDEV.md file.
        !            88: dnl
        !            89: dnl
        !            90: dnl Everything is 'automatically' added to 'MAKEDEV' based on whether or
        !            91: dnl not the '_DEV()' entry has a corresponding _mkdev() and __devitem()
        !            92: dnl entry in MAKEDEV.mi (this file).
        !            93: dnl
        !            94: dnl Note: be very wary of adding whitespace, carriage returns, or not
        !            95: dnl finishing a macro with ')dnl' .. otherwise, extra blank lines show up
        !            96: dnl in the output.
        !            97: dnl
        !            98: dnl TODO:
        !            99: dnl
        !           100: dnl make a 'disktgt' macro that automatically does:
        !           101: dnl disktgt(rd, {-rd-})
        !           102: dnl
        !           103: dnl    target(all,rd,0)
        !           104: dnl    target(ramd,rd,0)
        !           105: dnl    disk_q(rd)
        !           106: dnl    __devitem(rd, {-rd*-}, {-rd-})dnl
        !           107: dnl
        !           108: dnl  Note: not all disks are generated in 'all)'. (e.g. vax has a lot of
        !           109: dnl        disks that are not generated by 'all)')
        !           110: dnl
        !           111: target(all, mcd, 0)dnl
        !           112: twrget(all, fdesc, fd)dnl
        !           113: target(all, st, 0, 1)dnl
        !           114: target(all, std)dnl
        !           115: target(all, raid, 0, 1, 2, 3)dnl
        !           116: target(all, rz, 0, 1, 2, 3, 4)dnl
        !           117: target(all, hp, 0, 1, 2, 3)dnl
        !           118: target(all, ra, 0, 1, 2, 3)dnl
        !           119: target(all, rx, 0, 1)dnl
        !           120: target(all, wd, 0, 1, 2, 3)dnl
        !           121: target(all, xd, 0, 1, 2, 3)dnl
        !           122: target(all, systrace)dnl
        !           123: target(all, pctr)dnl
        !           124: target(all, pctr0)dnl
        !           125: target(all, pf)dnl
        !           126: twrget(all, cry, crypto)dnl
        !           127: target(all, apm)dnl
        !           128: twrget(all, tth, ttyh, 0, 1)dnl
        !           129: target(all, ttyA, 0, 1)dnl
        !           130: target(all, ttyB, 0, 1, 2, 3, 4, 5)dnl
        !           131: twrget(all, attyB, ttyB, 0, 1, 2, 3, 4)dnl
        !           132: target(all, tty0, 0, 1, 2, 3)dnl
        !           133: twrget(all, mac_tty0, tty0, 0, 1)dnl
        !           134: twrget(all, tzs, tty, a, b, c, d)dnl
        !           135: twrget(all, czs, cua, a, b, c, d)dnl
        !           136: target(all, ttyc, 0, 1, 2, 3, 4, 5, 6, 7)dnl
        !           137: twrget(all, com, tty0, 0, 1, 2, 3)dnl
        !           138: target(all, lkm)dnl
        !           139: twrget(all, mmcl, mmclock)dnl
        !           140: target(all, lpt, 0, 1, 2)dnl
        !           141: twrget(all, lpt, lpa, 0, 1, 2)dnl
        !           142: target(all, joy, 0, 1)dnl
        !           143: twrget(all, rnd, random)dnl
        !           144: target(all, uk, 0)dnl
        !           145: target(all, wt, 0)dnl
        !           146: target(all, wdt, 0)dnl
        !           147: twrget(all, au, audio, 0)dnl
        !           148: twrget(all, speak, speaker)dnl
        !           149: target(all, asc, 0)dnl
        !           150: target(all, music, 0)dnl
        !           151: target(all, radio, 0)dnl
        !           152: target(all, tuner, 0)dnl
        !           153: target(all, rmidi, 0, 1, 2, 3, 4, 5, 6, 7)dnl
        !           154: target(all, usbs)dnl
        !           155: target(all, adb)dnl
        !           156: target(all, iop, 0, 1)dnl
        !           157: target(all, pci)dnl
        !           158: twrget(all, wsmouse, wscons)dnl
        !           159: twrget(all, grf_mac, grf, 0, 1, 2, 3)dnl
        !           160: target(all, par, 0)dnl
        !           161: twrget(all, amouse, mouse, 0, 1)dnl
        !           162: twrget(all, akbd, kbd)dnl
        !           163: target(all, apci, 0)dnl
        !           164: target(all, ppi, 0)dnl
        !           165: target(all, view0, 0, 1, 2, 3, 4, 5)dnl
        !           166: target(all, local)dnl
        !           167: target(all, gpr, 0)dnl
        !           168: target(all, ptm)dnl
        !           169: dnl
        !           170: _mkdev(all, {-all-}, {-dnl
        !           171: show_target(all)dnl
        !           172: -})dnl
        !           173: dnl
        !           174: dnl XXX some arches use ramd, others ramdisk - needs to be fixed eventually
        !           175: __devitem(ramdisk, ramdisk, Ramdisk kernel devices)dnl
        !           176: dnl
        !           177: target(usb, usb, 0, 1)dnl
        !           178: target(usb, urio, 0)dnl
        !           179: twrget(usb, uscan, uscanner, 0)dnl
        !           180: target(usb, uhid, 0, 1, 2, 3)dnl
        !           181: target(usb, ulpt, 0, 1)dnl
        !           182: target(usb, ugen, 0, 1)dnl
        !           183: target(usb, ttyU, 0, 1)dnl
        !           184: dnl
        !           185: __devitem({-usbs-}, usbs, All USB devices)dnl
        !           186: _mkdev(usbs, usbs, {-dnl
        !           187: show_target({-usb-})dnl
        !           188: -})dnl
        !           189: __devtitle(tap, Tapes)dnl
        !           190: __devitem(wt, {-wt*    -}, Archive/Wangtek QIC-cartridge tape drives)dnl
        !           191: _mkdev(wt, wt*,
        !           192: {-name=wt
        !           193:        n=Mult($U, 8) m=Add($n, 4)
        !           194:        M $name$U       b major_wt_b $n 640 operator
        !           195:        M r$name$U      c major_wt_c $n 640 operator
        !           196:        M n$name$U      b major_wt_b $m 640 operator
        !           197:        M nr$name$U     c major_wt_c $m 640 operator-})dnl
        !           198: __devitem(tz, tz*, {-DEC TK50 cartridge tape drives-})dnl
        !           199: __devitem(st, {-st*-}, SCSI tape drives)dnl
        !           200: _mkdev(st, st*, {-n=Mult($U, 16)
        !           201:        for pre in " " n e en
        !           202:        do
        !           203:                M ${pre}st$U    b major_st_b $n 660 operator
        !           204:                M ${pre}rst$U   c major_st_c $n 660 operator
        !           205:                n=Add($n, 1)
        !           206:        done-})dnl
        !           207: __devitem(ct, ct*, HP300 HP-IB cartridge tape drives)dnl
        !           208: __devitem(mt, mt*, (Magnetic) 9-track reel tape drives)dnl
        !           209: __devitem(ht, ht*, MASSBUS TM03 and TU?? devices)dnl
        !           210: __devitem(tm, tm*, UNIBUS TM11 and TE10 emulations (e.g. Emulex TC-11))dnl
        !           211: __devitem(ts, ts*, UNIBUS TS11)dnl
        !           212: __devitem(ut, ut*, UNIBUS TU45 emulations (e.g. 9700))dnl
        !           213: __devtitle(dis, Disks)dnl
        !           214: dnl REMOVE __devitem(rz, rz*, SCSI disks)dnl
        !           215: __devitem(sd, {-sd*-}, {-SCSI disks, includes flopticals-})dnl
        !           216: __devitem(hd, {-hd*-}, HP300 HP-IB disks)dnl
        !           217: __devitem(cd, {-cd*-}, SCSI cdrom drives)dnl
        !           218: __devitem(acd, acd*, ATAPI cdrom drives)dnl
        !           219: _mkdev(cd, cd*, {-dodisk2 cd $U major_cd_b major_cd_c $U 0{--}ifstep(cd)-})dnl
        !           220: __devitem(mcd, mcd*, Mitsumi cdrom drives)dnl
        !           221: _mkdev(mcd, mcd*, {-dodisk2 mcd $U major_mcd_b major_mcd_c $U 0{--}ifstep(mcd)dnl
        !           222: -})dnl
        !           223: __devitem(ch, {-ch*-}, SCSI media changers)dnl
        !           224: _mcdev(ch, ch*, ch, {-major_ch_c-}, 660, operator)dnl
        !           225: __devitem(uk, uk*, SCSI unknown devices)dnl
        !           226: _mcdev(uk, uk*, uk, {-major_uk_c-}, 640, operator)dnl
        !           227: __devitem(ss, ss*, SCSI scanners)dnl
        !           228: _mkdev(ss, ss*, {-M ss$U c major_ss_c Mult($U,16) 640 operator
        !           229:        M nss$U c major_ss_c Add(Mult($U,16),1) 640 operator
        !           230:        M enss$U c major_ss_c Add(Mult($U,16),3) 640 operator
        !           231:        RMlist="$RMlist scan$U"
        !           232:        MKlist="$MKlist;umask 77;ln -s ss$U scan$U"-})dnl
        !           233: __devitem(ses, ses*, SES/SAF-TE SCSI devices)dnl
        !           234: _mkdev(ses, ses*, {-M ses$U c major_ses_c $U 640 operator-})dnl
        !           235: dnl XXX see ramdisk above
        !           236: __devitem(ramd, ramdisk, Ramdisk kernel devices)dnl
        !           237: _mkdev(ramd, ramdisk, {-dnl
        !           238: show_target(ramd)dnl
        !           239: -})dnl
        !           240: target(ramd, std)dnl
        !           241: target(ramd, random)dnl
        !           242: target(ramd, bpf, 0)dnl
        !           243: __devitem(rd, {-rd*-}, quote(rd)pseudo-disks)dnl
        !           244: _mkdev(rd, rd*, {-dodisk2 rd $U major_rd_b major_rd_c $U 0{--}ifstep(rd)-})dnl
        !           245: __devitem(xd, xd*, Xylogic 753/7053 disks)dnl
        !           246: __devitem(xy, xy*, {-  Xylogic 450/451 disks-})dnl
        !           247: __devitem(flo, {-fd*-}, {-Floppy disk drives (3 1/2"{-,-} 5 1/4")-})dnl
        !           248: _mkdev(flo, fd*,
        !           249: {-typnam=$U${i#fd[01]*}
        !           250:        case $typnam in
        !           251:        0|1)    typnum=0;; # no type specified, assume A
        !           252:        *A)     typnum=0; typnam=0;;
        !           253:        *B)     typnum=1;;
        !           254:        *C)     typnum=2;;
        !           255:        *D)     typnum=3;;
        !           256:        *E)     typnum=4;;
        !           257:        *F)     typnum=5;;
        !           258:        *G)     typnum=6;;
        !           259:        *H)     typnum=7;;
        !           260:        *)      echo bad type $typnam for $i; exit 1;;
        !           261:        esac
        !           262:        case $U in
        !           263:        0|1)    blk=major_flo_b; chr=major_flo_c;;
        !           264:        *)      echo bad unit $U for $i; exit 1;;
        !           265:        esac
        !           266:        nam=fd${typnam}
        !           267:        n=Add(Mult($U, 128), Mult($typnum, 16))
        !           268:        M ${nam}a       b $blk $n 640 operator
        !           269:        M ${nam}b       b $blk Add($n, 1) 640 operator
        !           270:        M ${nam}c       b $blk Add($n, 2) 640 operator
        !           271:        M r${nam}a      c $chr $n 640 operator
        !           272:        M r${nam}b      c $chr Add($n, 1) 640 operator
        !           273:        M r${nam}c      c $chr Add($n, 2) 640 operator-}, 664)dnl
        !           274: __devitem(iop, iop*, I2O controller devices)dnl
        !           275: _mcdev(iop, iop*, iop, {-major_iop_c-}, 660)dnl
        !           276: __devitem(wdt, wdt0, Watchdog timer)dnl
        !           277: _mcdev(wdt, wdt0, wdt, {-major_wdt_c-}, 440, operator)dnl
        !           278: __devitem(wd, {-wd*-}, {-quote(winchester)disk drives (ST506, IDE, ESDI, RLL, ...)-})dnl
        !           279: __devitem(ccd, ccd*, Concatenated disk devices)dnl
        !           280: __devitem(raid, raid*, RAIDframe disk devices)dnl
        !           281: __devitem(vnd, vnd*, quote(file)pseudo-disk devices)dnl
        !           282: _mkdev(vnd, vnd*, {-dodisk vnd $U major_vnd_b major_vnd_c $U 0{--}ifstep(vnd)
        !           283:        dodisk svnd $U major_vnd_b major_vnd_c $U 2048{--}ifstep(vnd)-})dnl
        !           284: __devitem(ra, ra*, {-MSCP disks-})dnl
        !           285: __devitem(hp, hp*, {-MASSBUSS disks-})dnl
        !           286: __devitem(hk, hk*, {-UNIBUS RK06 and RK07 disks-})dnl
        !           287: __devitem(up, up*, {-Other UNIBUS devices-})dnl
        !           288: __devitem(rb, rb*, {-730 IDC w/ RB80 and/or RB02-})dnl
        !           289: __devitem(rx, rx*, {-RX02 floppy disks-})dnl
        !           290: __devitem(rl, rl*, {-UNIBUS RL02-})dnl
        !           291: __devitem(hd, hd*, {-HDC9224 disks-})dnl
        !           292: dnl
        !           293: dnl For normal disk devices, add a disk_q entry; anything else define like
        !           294: dnl the rest (such as vnd above).
        !           295: dnl
        !           296: disk_q({-ccd-})dnl
        !           297: disk_q({-hd-})dnl
        !           298: disk_q({-hk-})dnl
        !           299: disk_q({-hp-})dnl
        !           300: disk_q({-ra-})dnl
        !           301: disk_q({-raid-})dnl
        !           302: disk_q({-rb-})dnl
        !           303: disk_q({-rl-})dnl
        !           304: disk_q({-rx-})dnl
        !           305: disk_q({-sd-})dnl
        !           306: disk_q({-xy-})dnl
        !           307: disk_q({-xd-})dnl
        !           308: disk_q({-up-})dnl
        !           309: disk_q({-wd-})dnl
        !           310: disk_q({-rz-})dnl
        !           311: _mkdev({-disks-}, {-undefine({-C_ase-})show_disks()undefine({-C_ase-})-},
        !           312: {-case $i in
        !           313: show_disks2()dnl
        !           314:        esac-})dnl
        !           315: __mkdev({-disks-}){--}dnl
        !           316: dnl
        !           317: __devtitle(cons, Console ports)dnl
        !           318: __devitem(wscons, ttyC0, Minimal wscons devices)dnl
        !           319: twrget(wscons, wscons, ttyC, cfg, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b)dnl
        !           320: target(wscons, wsmux)dnl
        !           321: target(wscons, wskbd, 0, 1, 2, 3)dnl
        !           322: target(wscons, wsmouse, 0, 1, 2, 3)dnl
        !           323: _mkdev({-wscons-}, {-wscons-}, {-dnl
        !           324: show_target(wscons)dnl
        !           325: -})dnl
        !           326: __devitem(wsdisp, ttyC-F*, wscons display devices)dnl
        !           327: _mkdev({-wsdisp-}, tty[C-F]*, {-U=${i##tty[C-F]}
        !           328:        case $i in
        !           329:        ttyC*) n=C m=expr(0*256);;
        !           330:        ttyD*) n=D m=expr(1*256);;
        !           331:        ttyE*) n=E m=expr(2*256);;
        !           332:        ttyF*) n=F m=expr(3*256);;
        !           333:        esac
        !           334:        case $U in
        !           335:        [0-9a-f]) M tty$n$U c major_wsdisp_c {-$(( 16#$U + $m ))-} 600;;
        !           336:        cfg) M tty${n}cfg c major_wsdisp_c Add(255,$m) 600;;
        !           337:        *) echo bad unit $U for $i; exit 1;;
        !           338:        esac-})dnl
        !           339: __devitem(wskbd, wskbd*, wscons keyboards)dnl
        !           340: _mkdev(wskbd, wskbd*, {-M wskbd$U c major_wskbd_c $U 600-})dnl
        !           341: __devitem(wsmux, wsmux, wscons keyboard/mouse mux devices)dnl
        !           342: _mkdev(wsmux, wsmux|wsmouse|wskbd, {-M wsmouse c major_wsmux_c 0 600
        !           343:        M wskbd c major_wsmux_c 1 600-})dnl
        !           344: __devitem(pcons, console, PROM console)dnl
        !           345: __devtitle(point, Pointing devices)dnl
        !           346: __devitem(wsmouse, wsmouse*, wscons mice)dnl
        !           347: _mkdev(wsmouse, wsmouse*, {-M wsmouse$U c major_wsmouse_c $U 600-})dnl
        !           348: __devtitle(pty, Pseudo terminals)dnl
        !           349: __devitem(ptm, ptm, pty master device)dnl
        !           350: _mkdev(ptm, ptm, {-M ptm c major_ptm_c 0 666-})dnl
        !           351: __devitem(tty, tty*, Set of 16 slave pseudo terminals)dnl
        !           352: __devitem(pty, pty*, Set of 16 master pseudo terminals)dnl
        !           353: _mkdev(pty, pty*, {-if [ $U -gt 15 ]; then
        !           354:                echo bad unit for pty in: $i
        !           355:                continue
        !           356:        fi
        !           357:        set -A tbl p q r s t u v w x y z P Q R S T
        !           358:        name=${tbl[$U]}
        !           359:        n=0
        !           360:        while [ $n -lt 16 ]
        !           361:        do
        !           362:                nam=$name$(hex $n)
        !           363:                off=Mult($U, 16)
        !           364:                M tty$nam c major_tty_c Add($off, $n)
        !           365:                M pty$nam c major_pty_c Add($off, $n)
        !           366:                n=Add($n, 1)
        !           367:        done-})dnl
        !           368: __devitem(dc, dc*, {-4 channel serial interface (keyboard{-,-} mouse{-,-}modem{-,-} printer)-})dnl
        !           369: __devtitle(prn, Printers)dnl
        !           370: __devitem(par, par*, On-board parallel port)dnl
        !           371: __devitem(lpt, lpt*, IEEE 1284 centronics printer)dnl
        !           372: _mkdev(lpt, lpt*|lpa*,
        !           373: {-case $i in
        !           374:        lpt*) n=lpt f=0;;
        !           375:        lpa*) n=lpa f=128;;
        !           376:        esac
        !           377:        M $n$U c major_lpt_c Add($U, $f) 600-})dnl
        !           378: __devitem(lpa, lpa*, Polled printer port)dnl
        !           379: __devitem(ppi, ppi*, HP-IB plotters)dnl
        !           380: __devtitle({-usb-}, USB devices)dnl
        !           381: __devitem({-usb-}, usb*, Bus control devices used by usbd for attach/detach)dnl
        !           382: _mkdev({-usb-}, usb*, {-[ "$i" = "usb" ] && u= || u=$U
        !           383:        M usb$u c major_usb_c $U 660-})dnl
        !           384: __devitem(uhid, uhid*, Generic HID devices)dnl
        !           385: _mcdev({-uhid-}, uhid*, {-uhid-}, {-major_uhid_c-}, 660)dnl
        !           386: __devitem(ulpt, ulpt*, Printer devices)dnl
        !           387: _mcdev({-ulpt-}, ulpt*, {-ulpt-}, {-major_ulpt_c-}, 660)dnl
        !           388: __devitem(ttyU, ttyU*, USB serial ports)dnl
        !           389: _mkdev({-ttyU-}, {-ttyU[0-9a-zA-Z]-}, {-U=${i#ttyU*}
        !           390:        o=$(alph2d $U)
        !           391:        M ttyU$U c major_ttyU_c $o 660 dialer uucp-})dnl
        !           392: __devitem(urio, urio*, Diamond Multimedia Rio 500)dnl
        !           393: _mcdev({-urio-}, urio*, {-urio-}, {-major_urio_c-}, 660)dnl
        !           394: __devitem(uscan, uscanner*, Scanners)dnl
        !           395: _mcdev({-uscan-}, uscanner*, {-uscanner-}, {-major_uscan_c-}, 660)dnl
        !           396: __devitem(ugen, ugen*, Generic USB devices)dnl
        !           397: _mkdev(ugen, ugen*, {-n=Mult($U, 16)
        !           398:        for j in 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
        !           399:        do
        !           400:                M ugen$U.$j c major_ugen_c Add($n, $j) 660
        !           401:        done-})dnl
        !           402: __devtitle(call, Call units)dnl
        !           403: __devtitle(term, Terminal ports)dnl
        !           404: __devitem(dca, dca*, HP200/300 single port serial interface)dnl
        !           405: __devitem(dcm, dcm*, HP200/300 4 port serial mux interface)dnl
        !           406: __devitem(apci, apci*, HP400 4 port serial mux interface)dnl
        !           407: __devitem({-com-}, {-tty[0-7][0-9a-f]-}, NS16x50 serial ports)dnl
        !           408: _mkdev(com, {-tty[0-7][0-9a-f]-}, {-U=${i#tty*}
        !           409:        o=$(h2d $U)
        !           410:        M tty$U c major_com_c $o 660 dialer uucp
        !           411:        M cua$U c major_com_c Add($o, 128) 660 dialer uucp-})dnl
        !           412: __devitem(ttyc, ttyc*, Cyclades serial ports)dnl
        !           413: __devitem(tzs, tty[a-z]*, Zilog 8530 Serial Port)dnl
        !           414: _mkdev(tzs, {-tty[a-z]-}, {-u=${i#tty*}
        !           415:        case $u in
        !           416:        a) n=0 ;;
        !           417:        b) n=1 ;;
        !           418:        c) n=4 ;;
        !           419:        d) n=5 ;;
        !           420:        *) echo unknown tty device $i ;;
        !           421:        esac
        !           422:        M tty$u c major_tzs_c $n 660 dialer uucp-})dnl
        !           423: __devitem(tth, ttyh*, Sab82532 serial devices)dnl
        !           424: _mkdev(tth, ttyh*, {-M ttyh$U c major_tth_c $U 660 dialer uucp-})dnl
        !           425: __devitem(czs, cua[a-z]*, Zilog 8530 Serial Port)dnl
        !           426: _mkdev(czs, cua[a-z], {-u=${i#cua*}
        !           427:        case $u in
        !           428:        a) n=0 ;;
        !           429:        b) n=1 ;;
        !           430:        c) n=4 ;;
        !           431:        d) n=5 ;;
        !           432:        *) echo unknown cua device $i ;;
        !           433:        esac
        !           434:        M cua$u c major_czs_c Add($n, 128) 660 dialer uucp-})dnl
        !           435: __devitem(tty0, tty00, Standard serial port)dnl
        !           436: __devitem(mac_tty0, tty00, Standard serial port)dnl
        !           437: __devitem(ttyz, tty[a-d], On-board zs serial ports)dnl
        !           438: __devitem(cuaz, cua[a-d], On-board zs serial ports)dnl
        !           439: __devitem(ttyB, ttyB?, DEC 3000 ZS8530 ("scc") serial ports)dnl
        !           440: __devitem(scc, scc*, 82530 serial interface)dnl
        !           441: __devtitle(spec, Special purpose devices)dnl
        !           442: __devitem(apm, apm, Power management device)dnl
        !           443: _mkdev(apm, apm*, {-M apm      c major_apm_c 0 644
        !           444:        M apmctl        c major_apm_c 8 644-})dnl
        !           445: __devitem(pctr, pctr*, PC Performance Tuning Register access device)dnl
        !           446: _mkdev(pctr, pctr, {-M pctr c major_pctr_c 0 644-})dnl
        !           447: __devitem(systrace, systrace*, System call tracing device)dnl
        !           448: _mkdev(systrace, systrace, {-M systrace c major_systrace_c 0 644-})dnl
        !           449: __devitem(au, audio*, Audio devices)dnl
        !           450: _mkdev(au, audio*, {-M sound$U c major_au_c $U
        !           451:        M mixer$U       c major_au_c Add($U, 16)
        !           452:        M audio$U       c major_au_c Add($U, 128)
        !           453:        M audioctl$U    c major_au_c Add($U, 192)
        !           454:        MKlist="$MKlist;[ -e audio ] || ln -s audio$U audio"
        !           455:        MKlist="$MKlist;[ -e mixer ] || ln -s mixer$U mixer"
        !           456:        MKlist="$MKlist;[ -e sound ] || ln -s sound$U sound"
        !           457:        MKlist="$MKlist;[ -e audioctl ] || ln -s audioctl$U audioctl"-})dnl
        !           458: __devitem(asc, asc*, ASC Audio device)dnl
        !           459: _mkdev(asc, asc*, {-M asc$U major_asc_c 0-})dnl
        !           460: __devitem(music, music*, MIDI devices)dnl
        !           461: _mkdev(music, music*, {-M music$U     c major_music_c $U
        !           462:        M sequencer$U c major_music_c Add($U, 128)
        !           463:        MKlist="$MKlist;[ -e music ] || ln -s music$U music"
        !           464:        MKlist="$MKlist;[ -e sequencer ] || ln -s sequencer$U sequencer"-})dnl
        !           465: __devitem(radio, radio*, FM tuner devices)dnl
        !           466: _mkdev(radio, radio*, {-M radio$U     c major_radio_c $U
        !           467:        MKlist="$MKlist;[ -e radio ] || ln -s radio$U radio"-})dnl
        !           468: __devitem(fdesc, fd, fd/* nodes for fdescfs)dnl
        !           469: _mkdev(fdesc, fd, {-RMlist="mkdir -p fd;$RMlist" n=0
        !           470:        while [ $n -lt 64 ];do M fd/$n c major_fdesc_c $n;n=Add($n, 1);done
        !           471:        MKlist="$MKlist;chmod 555 fd"-})dnl
        !           472: __devitem(grf_mac, grf*, Raw interface to the mac68k graphics devices)dnl
        !           473: __devitem(ite, ite*, Terminal emulator interface to HP300 graphics devices)dnl
        !           474: __devitem({-hil-}, {-hil-}, HP-HIL input devices)dnl
        !           475: __devitem(oppr, openprom)dnl
        !           476: _cdev(oppr, openprom, 70, 0)dnl
        !           477: __devitem(cry, crypto, Hardware crypto access driver)dnl
        !           478: _mkdev(cry, crypto, {-M crypto c major_cry_c-} 0)dnl
        !           479: __devitem(pf, pf*, Packet Filter)dnl
        !           480: _mkdev(pf, {-pf*-}, {-M pf c major_pf_c 0 600-})dnl
        !           481: __devitem(bpf, bpf*, Berkeley Packet Filter)dnl
        !           482: _mkdev(bpf, {-bpf*-}, {-M bpf$U c major_bpf_c $U 600-}, 600)dnl
        !           483: _mkdev(tun, {-tun*-}, {-M tun$U c major_tun_c $U 600-}, 600)dnl
        !           484: __devitem(speak, speaker, PC speaker)dnl
        !           485: _mkdev(speak, speaker, {-M speaker c major_speak_c 0 600-})dnl
        !           486: __devitem(lkm, lkm, Loadable kernel modules interface)dnl
        !           487: _cdev(lkm, lkm, {-major_lkm_c-}, 0, 640, _lkm)dnl
        !           488: __devitem(mmcl, mmclock, Memory mapped clock)dnl
        !           489: __devitem(tun, tun*, Network tunnel driver)dnl
        !           490: __devitem(rnd, *random, In-kernel random data source)dnl
        !           491: _mkdev(rnd, *random, {-n=0
        !           492:        for pre in " " s u p a
        !           493:        do
        !           494:                M ${pre}random c major_rnd_c $n 644
        !           495:                n=Add($n, 1)
        !           496:        done-}, 644)dnl
        !           497: __devitem(joy, joy*, Joystick driver)dnl
        !           498: _mcdev(joy, joy*, joy, {-major_joy_c-}, 666)dnl
        !           499: __devitem(mag, magma*, Magma multiport cards)dnl
        !           500: __devitem(bppmag, bppmag[mno], Magma parallel port)dnl
        !           501: __devitem(spif, spif*, quote(spif)multiport cards)dnl
        !           502: __devitem(bppsp, bpp[jkl], quote(spif)parallel port)dnl
        !           503: _mkdev(mag, magma*, {-case $U in
        !           504:        0)      offset=0  nam=m;;
        !           505:        1)      offset=16 nam=n;;
        !           506:        2)      offset=32 nam=o;;
        !           507:        *)      echo "bad unit for $i: $U"; exit 127;;
        !           508:        esac
        !           509:        offset=Mult($U, 64)
        !           510:        n=0
        !           511:        while [ $n -lt 16 ]
        !           512:        do
        !           513:                name=${nam}`hex $n`
        !           514:                M tty$name c major_mag_c Add($offset, $n) 660 dialer uucp
        !           515:                n=Add($n, 1)
        !           516:        done
        !           517:        M bpp${nam}0 c major_bppmag_c Add($offset, 0) 600
        !           518:        M bpp${nam}1 c major_bppmag_c Add($offset, 1) 600-})dnl
        !           519: _mkdev(spif, spif*, {-case $U in
        !           520:        0)      offset=0  nam=j;;
        !           521:        1)      offset=16 nam=k;;
        !           522:        2)      offset=32 nam=l;;
        !           523:        *)      echo "bad unit for $i: $U"; exit 127;;
        !           524:        esac
        !           525:        offset=Mult($U, 64)
        !           526:        n=0
        !           527:        while [ $n -lt 8 ]
        !           528:        do
        !           529:                name=${nam}`hex $n`
        !           530:                M tty$name c major_spif_c Add($offset, $n) 660 dialer uucp
        !           531:                n=Add($n, 1)
        !           532:        done
        !           533:        M bpp${nam}0 c major_bppsp_c Add($offset, 0) 600-})dnl
        !           534: __devitem(bpp, bpp*, Parallel port)dnl
        !           535: _mkdev(bpp, {-bpp*-}, {-M bpp$U c major_bpp_c $U 600-}, 600)dnl
        !           536: __devitem(xfs, xfs*, XFS filesystem node)dnl
        !           537: _mcdev(xfs, xfs*, xfs, {-major_xfs_c-}, 600)dnl
        !           538: __devitem(hil, hil, HP-HIL input devices)dnl
        !           539: __devitem(rmidi, rmidi*, Raw MIDI devices)dnl
        !           540: _mcdev(rmidi, rmidi*, rmidi, {-major_rmidi_c-}, 666)dnl
        !           541: __devtitle(plat, Platform-specific devices)dnl
        !           542: __devitem(bktr, bktr*, Video frame grabbers)dnl
        !           543: _mcdev(bktr, bktr*, bktr, {-major_bktr_c-}, 644)dnl
        !           544: __devitem(tuner, tuner*, Tuner devices)dnl
        !           545: _mkdev(tuner, tuner*, {-M tuner$U c major_bktr_c Add(Mult($U, 2), 16) 644-}, 644)dnl
        !           546: __devitem(pci, pci, PCI bus device)dnl
        !           547: _mkdev(pci, pci, {-M pci c major_pci_c 0 600-}, 600)dnl
        !           548: __devitem(adb, adb, Apple Desktop bus event interface)dnl
        !           549: _mkdev(adb, adb, {-M adb c major_adb_c 0-})dnl
        !           550: __devitem(pdc, pdc, PDC device)dnl
        !           551: __devitem(gpr, gpr*, GPR400 smartcard reader)dnl
        !           552: _mcdev(gpr, gpr*, gpr, {-major_gpr_c-})dnl
        !           553: _mkdev(local, local, {-test -s $T.local && sh $T.local-})dnl