MAKEDEV.common revision 1.100
1vers(a, {-$OpenBSD: MAKEDEV.common,v 1.100 2018/08/19 11:42:33 anton Exp $-})dnl 2dnl 3dnl Copyright (c) 2001-2006 Todd T. Fries <todd@OpenBSD.org> 4dnl 5dnl Permission to use, copy, modify, and distribute this software for any 6dnl purpose with or without fee is hereby granted, provided that the above 7dnl copyright notice and this permission notice appear in all copies. 8dnl 9dnl THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10dnl WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11dnl MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12dnl ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13dnl WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14dnl ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15dnl OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16dnl 17dnl Common device definitions. 18dnl 19dnl This file contains the MI device definitions (as well as some MD 20dnl definitions not cleaned up yet...) 21dnl 22dnl Diversions: (upon termination, concatenated output queues) 23dnl 24dnl 0 - very top 25dnl 1 - descriptions of devices 26dnl 2 - init of script, function definitions, etc 27dnl 3 - beginning of global recursive R() function 28dnl 7 - body of MAKEDEV, device creations, etc 29dnl 9 - end 30dnl 31dnl Diversions 2, 3 and 7 are not filled when generating the manual page. 32dnl 33dnl HOW TO ADD A DEVICE: 34dnl 35dnl In this file, you must use at least two macros: 36dnl 37dnl Use '__devitem(uniqueid, name-pattern, description)' to create an entry 38dnl in the description at the top of the generated MAKEDEV file: 39dnl 40dnl __devitem(sca, sca*, Sugar Generic device)dnl 41dnl __devitem(cry, crypto, hardware crypto access driver)dnl 42dnl 43dnl This is ultimately shown as: 44dnl 45dnl # sca* Sugar Generic device 46dnl # crypto hardware crypto access driver 47dnl 48dnl Use '_mkdev(uniqueid, shell-pattern, {-shell-script-})dnl' to create 49dnl a shell script fragment used to 'create' the device (be sure to match 50dnl the uniqueid from above): 51dnl 52dnl _mkdev(sca, sca*, {-M sca$U c major_sca_c $U 53dnl M rsca$U b major_sca_b Add($U, 128)-})dnl 54dnl _mkdev(cry, crypto, {-M crypto c major_cry_c 0-})dnl 55dnl 56dnl This is ultimately expanded into: 57dnl 58dnl sca*) 59dnl M sca$U c 24 $U 60dnl M sca$U b 42 $(($U+128)) 61dnl ;; 62dnl 63dnl crypto) 64dnl M crypto c 47 0 65dnl ;; 66dnl 67dnl In the MAKEDEV.md file, add a '_DEV(uniqueid, charmajor, blockmajor)' 68dnl entry: 69dnl 70dnl _DEV(sca, 24, 42) 71dnl _DEV(cry, 47) 72dnl 73dnl Final step is to use the 'target/twrget' macros to have the 'all)' target 74dnl generate one or more device(s). Usage of 'target/twrget' is: 75dnl target(target_name, device_name [, append_string ] .. ) 76dnl twrget(target_name, uniqueid, device_name, [, append_string ] .. ) 77dnl 78dnl target_name a unique name that later is used as an argument to 79dnl 'show_target()' (which expands all devices for a 80dnl given 'target_name'). 81dnl uniqueid same as 'uniqueid' above 82dnl device_name string representing the device to be mknod'ed 83dnl append_string for each append_string, `device_name' is prepended 84dnl 85dnl Note: 'target(a,b,c)' is equivalent to 'twrget(a,b,b,c)' 86dnl 87dnl 88dnl For a short example: 89dnl 90dnl target(all, std)dnl 91dnl target(all, sca, 0, 1, 2, 3)dnl 92dnl twrget(all, cry, crypto)dnl 93dnl 94dnl would expand to: 95dnl 96dnl all) 97dnl R std sca0 sca1 sca2 sca3 crypto 98dnl ;; 99dnl 100dnl presuming '_DEV(sca, ?, ?)' and '_DEV(std)' were in the MAKEDEV.md file. 101dnl 102dnl 103dnl Everything is 'automatically' added to 'MAKEDEV' based on whether or 104dnl not the '_DEV()' entry has a corresponding _mkdev() and __devitem() 105dnl entry in MAKEDEV.mi (this file). 106dnl 107dnl Note: be very wary of adding whitespace, carriage returns, or not 108dnl finishing a macro with ')dnl' .. otherwise, extra blank lines show up 109dnl in the output. 110dnl 111dnl TODO: 112dnl 113dnl make a 'disktgt' macro that automatically does: 114dnl disktgt(rd, {-rd-}) 115dnl 116dnl target(all,rd,0) 117dnl target(ramd,rd,0) 118dnl disk_q(rd) 119dnl __devitem(rd, {-rd*-}, {-rd-})dnl 120dnl 121dnl Note: not all devices are generated in 'all)' below. MAKEDEV.md contains 122dnl its own extra list. 123dnl 124divert(1)dnl 125twrget(all, fdesc, fd)dnl 126target(all, st, 0, 1)dnl 127target(all, std)dnl 128target(all, ra, 0, 1, 2, 3)dnl 129target(all, rx, 0, 1)dnl 130target(all, wd, 0, 1, 2, 3)dnl 131target(all, xd, 0, 1, 2, 3)dnl 132target(all, pctr)dnl 133target(all, pctr0)dnl 134target(all, pf)dnl 135target(all, apm)dnl 136target(all, acpi)dnl 137twrget(all, tth, ttyh, 0, 1)dnl 138target(all, ttyA, 0, 1)dnl 139twrget(all, mac_tty0, tty0, 0, 1)dnl 140twrget(all, tzs, tty, a, b, c, d)dnl 141twrget(all, czs, cua, a, b, c, d)dnl 142target(all, ttyc, 0, 1, 2, 3, 4, 5, 6, 7)dnl 143twrget(all, com, tty0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b)dnl 144twrget(all, mmcl, mmclock)dnl 145target(all, lpt, 0, 1, 2)dnl 146twrget(all, lpt, lpa, 0, 1, 2)dnl 147target(all, joy, 0, 1)dnl 148twrget(all, rnd, random)dnl 149target(all, uk, 0)dnl 150twrget(all, vi, video, 0, 1)dnl 151twrget(all, speak, speaker)dnl 152target(all, asc, 0)dnl 153target(all, radio, 0)dnl 154target(all, tuner, 0)dnl 155target(all, rmidi, 0, 1, 2, 3, 4, 5, 6, 7)dnl 156target(all, uall)dnl 157target(all, pci, 0, 1, 2, 3)dnl 158twrget(all, wsmouse, wscons)dnl 159target(all, par, 0)dnl 160target(all, apci, 0)dnl 161target(all, local)dnl 162target(all, gpr, 0)dnl 163target(all, ptm)dnl 164target(all, hotplug)dnl 165target(all, pppx)dnl 166target(all, fuse)dnl 167target(all, vmm)dnl 168target(all, pvbus, 0, 1)dnl 169target(all, bpf)dnl 170target(all, kcov)dnl 171dnl 172_mkdev(all, {-all-}, {-dnl 173show_target(all)dnl 174-})dnl 175dnl 176dnl XXX some arches use ramd, others ramdisk - needs to be fixed eventually 177__devitem(ramdisk, ramdisk, Ramdisk kernel devices,nothing)dnl 178dnl 179target(usb, usb, 0, 1, 2, 3, 4, 5, 6, 7)dnl 180target(usb, uhid, 0, 1, 2, 3)dnl 181target(usb, ulpt, 0, 1)dnl 182target(usb, ugen, 0, 1, 2, 3, 4, 5, 6, 7)dnl 183target(usb, ttyU, 0, 1, 2, 3)dnl 184dnl 185__devitem({-uall-}, uall, All USB devices,usb)dnl 186_mkdev(uall, uall, {-dnl 187show_target({-usb-})dnl 188-})dnl 189__devtitle(tap, Tapes)dnl 190__devitem(st, {-st*-}, SCSI tape drives)dnl 191_mkdev(st, st*, {-n=Mult($U, 16) 192 for pre in " " n e en 193 do 194 M ${pre}rst$U c major_st_c $n 660 operator 195 n=Add($n, 1) 196 done-})dnl 197__devtitle(dis, Disks)dnl 198__devitem(sd, {-sd*-}, {-SCSI disks{-,-} including flopticals-})dnl 199__devitem(cd, {-cd*-}, ATAPI and SCSI CD-ROM drives)dnl 200_mkdev(cd, cd*, {-dodisk2 cd $U major_cd_b major_cd_c $U 0{--}ifstep(cd)-})dnl 201__devitem(fuse, fuse, Userland Filesystem, fuse 4)dnl 202_mcdev(fuse, fuse, fuse, {-major_fuse_c-}, 600)dnl 203__devitem(ch, {-ch*-}, SCSI media changers)dnl 204_mcdev(ch, ch*, ch, {-major_ch_c-}, 660, operator)dnl 205__devitem(uk, uk*, Unknown SCSI devices)dnl 206_mcdev(uk, uk*, uk, {-major_uk_c-}, 640, operator)dnl 207dnl XXX see ramdisk above 208__devitem(ramd, ramdisk, Ramdisk kernel devices,nothing)dnl 209dnl 210_mkdev(ramd, ramdisk, {-dnl 211show_target(ramd)dnl 212-})dnl 213dnl 214target(ramd, std)dnl 215target(ramd, bpf)dnl 216twrget(ramd, com, tty0, 0, 1)dnl 217target(ramd, sd, 0, 1, 2, 3, 4)dnl 218target(ramd, wd, 0, 1, 2, 3, 4)dnl 219target(ramd, st, 0, 1)dnl 220target(ramd, cd, 0, 1)dnl 221target(ramd, rd, 0)dnl 222dnl 223__devitem(rd, {-rd*-}, quote(rd)pseudo-disks)dnl 224_mkdev(rd, rd*, {-dodisk2 rd $U major_rd_b major_rd_c $U 0{--}ifstep(rd)-})dnl 225__devitem(xd, xd*, Xylogic 753/7053 disks)dnl 226__devitem(xy, xy*, {- Xylogic 450/451 disks-})dnl 227__devitem(flo, {-fd*-}, {-Floppy disk drives (3 1/2"{-,-} 5 1/4")-},fd)dnl 228_mkdev(flo, fd*, 229{-typnam=$U${i#fd[01]*} 230 case $typnam in 231 0|1) typnum=0;; # no type specified, assume A 232 *A) typnum=0; typnam=0;; 233 *B) typnum=1;; 234 *C) typnum=2;; 235 *D) typnum=3;; 236 *E) typnum=4;; 237 *F) typnum=5;; 238 *G) typnum=6;; 239 *H) typnum=7;; 240 *) echo bad type $typnam for $i; exit 1;; 241 esac 242 case $U in 243 0|1) blk=major_flo_b; chr=major_flo_c;; 244 *) echo bad unit $U for $i; exit 1;; 245 esac 246 nam=fd${typnam} 247 n=Add(Mult($U, 128), Mult($typnum, 16)) 248 M ${nam}a b $blk $n 640 operator 249 M ${nam}b b $blk Add($n, 1) 640 operator 250 M ${nam}c b $blk Add($n, 2) 640 operator 251 M ${nam}i b $blk Add($n, 8) 640 operator 252 M r${nam}a c $chr $n 640 operator 253 M r${nam}b c $chr Add($n, 1) 640 operator 254 M r${nam}c c $chr Add($n, 2) 640 operator 255 M r${nam}i c $chr Add($n, 8) 640 operator-}, 664)dnl 256__devitem(wd, {-wd*-}, {-quote(winchester)disk drives (ST506{-,-} IDE{-,-} ESDI{-,-} RLL{-,-} ...)-})dnl 257__devitem(vnd, vnd*, quote(file)pseudo-disk devices)dnl 258_mkdev(vnd, vnd*, {-dodisk vnd $U major_vnd_b major_vnd_c $U 0{--}ifstep(vnd)-})dnl 259__devitem(ra, ra*, {-MSCP disks-})dnl 260__devitem(rx, rx*, {-RX02 floppy disks-})dnl 261dnl 262dnl For normal disk devices, add a disk_q entry; anything else define like 263dnl the rest (such as vnd above). 264dnl 265disk_q({-hd-})dnl 266disk_q({-ra-})dnl 267disk_q({-rx-})dnl 268disk_q({-sd-})dnl 269disk_q({-xy-})dnl 270disk_q({-xd-})dnl 271disk_q({-wd-})dnl 272_mkdev({-disks-}, {-undefine({-C_ase-})show_disks()undefine({-C_ase-})-}, 273{-case $i in 274show_disks2()dnl 275 esac-})dnl 276__mkdev({-disks-}){--}dnl 277dnl 278__devtitle(cons, Console ports)dnl 279__devitem(wscons, wscons, Minimal wscons devices)dnl 280twrget(wscons, wscons, ttyC, cfg, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b)dnl 281target(wscons, wsmux)dnl 282target(wscons, wskbd, 0, 1, 2, 3)dnl 283target(wscons, wsmouse, 0, 1, 2, 3)dnl 284_mkdev({-wscons-}, {-wscons-}, {-dnl 285show_target(wscons)dnl 286-})dnl 287__devitem(wsdisp, ttyC-J*, wscons display devices,wsdisplay)dnl 288_mkdev({-wsdisp-}, tty[C-J]*, {-U=${i##tty[C-J]} 289 case $i in 290 ttyC*) n=C m=expr(0*256);; 291 ttyD*) n=D m=expr(1*256);; 292 ttyE*) n=E m=expr(2*256);; 293 ttyF*) n=F m=expr(3*256);; 294 ttyG*) n=G m=expr(4*256);; 295 ttyH*) n=H m=expr(5*256);; 296 ttyI*) n=I m=expr(6*256);; 297 ttyJ*) n=J m=expr(7*256);; 298 esac 299 case $U in 300 [0-9a-f]) M tty$n$U c major_wsdisp_c Add(16#$U, $m) 600;; 301 cfg) M tty${n}cfg c major_wsdisp_c Add(255,$m) 600;; 302 *) echo bad unit $U for $i; exit 1;; 303 esac-})dnl 304__devitem(wskbd, wskbd*, wscons keyboards)dnl 305dnl XXX wskbd[0-9]* instead of wskbd* in case this appears before 306dnl XXX ``wsmux|wsmouse|wskbd'' in the final MAKEDEV. 307_mkdev(wskbd, wskbd[0-9]*, {-M wskbd$U c major_wskbd_c $U 600-})dnl 308__devitem(wsmux, wsmux, wscons keyboard/mouse mux devices)dnl 309_mkdev(wsmux, wsmux|wsmouse|wskbd, {-M wsmouse c major_wsmux_c 0 600 310 M wskbd c major_wsmux_c 1 600-})dnl 311__devitem(pcons, console, PROM console)dnl 312__devtitle(point, Pointing devices)dnl 313__devitem(wsmouse, wsmouse*, wscons mice)dnl 314dnl XXX wsmouse[0-9]* instead of wsmouse* in case this appears before 315dnl XXX ``wsmux|wsmouse|wskbd'' in the final MAKEDEV. 316_mkdev(wsmouse, wsmouse[0-9]*, {-M wsmouse$U c major_wsmouse_c $U 600-})dnl 317__devtitle(pty, Pseudo terminals)dnl 318__devitem(ptm, ptm, pty master device)dnl 319_mkdev(ptm, ptm, {-M ptm c major_ptm_c 0 666-})dnl 320__devitem(tty, tty*, Set of 62 slave pseudo terminals)dnl 321__devitem(pty, pty*, Set of 62 master pseudo terminals)dnl 322_mkdev(pty, pty*, {-if [ $U -gt 15 ]; then 323 echo bad unit for pty in: $i 324 continue 325 fi 326 set -A letters p q r s t u v w x y z P Q R S T 327 set -A suffixes 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q \ 328 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 \ 329 Y Z 330 331 name=${letters[$U]} 332 n=0 333 while [ $n -lt 62 ] 334 do 335 nam=$name${suffixes[$n]} 336 off=Mult($U, 62) 337 M tty$nam c major_tty_c Add($off, $n) 338 M pty$nam c major_pty_c Add($off, $n) 339 n=Add($n, 1) 340 done-})dnl 341__devitem(dc, dc*, {-4 channel serial interface (keyboard{-,-} mouse{-,-}modem{-,-} printer)-})dnl 342__devitem(drm, drm*, {-Direct Rendering Manager-})dnl 343_mcdev({-drm-}, drm*, {-drm-}, {-major_drm_c-}, 600)dnl 344__devtitle(prn, Printers)dnl 345__devitem(lpt, lpt*, IEEE 1284 centronics printer)dnl 346_mkdev(lpt, lpt*|lpa*, 347{-case $i in 348 lpt*) n=lpt f=0;; 349 lpa*) n=lpa f=128;; 350 esac 351 M $n$U c major_lpt_c Add($U, $f) 600-})dnl 352__devitem(lpa, lpa*, Polled printer port,lpt)dnl 353__devtitle({-usb-}, USB devices)dnl 354__devitem({-usb-}, usb*, Bus control devices used by usbd for attach/detach)dnl 355_mkdev({-usb-}, usb*, {-[ "$i" = "usb" ] && u= || u=$U 356 M usb$u c major_usb_c $U 660-})dnl 357__devitem(uhid, uhid*, Generic HID devices)dnl 358_mcdev({-uhid-}, uhid*, {-uhid-}, {-major_uhid_c-}, 660)dnl 359__devitem(ulpt, ulpt*, Printer devices)dnl 360_mcdev({-ulpt-}, ulpt*, {-ulpt-}, {-major_ulpt_c-}, 660)dnl 361__devitem(ttyU, ttyU*, USB serial ports,ucom)dnl 362_mkdev({-ttyU-}, {-ttyU[0-9a-zA-Z]-}, {-U=${i#ttyU*} 363 o=$(alph2d $U) 364 M ttyU$U c major_ttyU_c $o 660 dialer root 365 M cuaU$U c major_ttyU_c Add($o, 128) 660 dialer root-})dnl 366__devitem(ugen, ugen*, Generic USB devices)dnl 367_mkdev(ugen, ugen*, {-n=Mult($U, 16) 368 for j in 0{0,1,2,3,4,5,6,7,8,9} 1{0,1,2,3,4,5} 369 do 370 M ugen$U.$j c major_ugen_c Add($n, 10#$j) 660 371 done-})dnl 372__devtitle(call, Call units)dnl 373__devtitle(term, Terminal ports)dnl 374__devitem(dca, dca*, HP200/300 single port serial interface)dnl 375__devitem(dcm, dcm*, HP200/300 4 port serial mux interface)dnl 376__devitem(apci, apci*, HP400 4 port serial mux interface)dnl 377__devitem({-com-}, {-tty[0-7][0-9a-f]-}, NS16x50 serial ports)dnl 378_mkdev(com, {-tty[0-7][0-9a-f]-}, {-U=${i#tty*} 379 o=$(h2d $U) 380 M tty$U c major_com_c $o 660 dialer root 381 M cua$U c major_com_c Add($o, 128) 660 dialer root-})dnl 382__devitem(ttyc, ttyc*, Cyclades serial ports,cy)dnl 383__devitem(ttyVI, ttyVI*, Virtio serial ports,viocon)dnl 384_mkdev(ttyVI, ttyVI*, {-M ttyVI$U c major_ttyVI_c $U 660 dialer root-})dnl 385__devitem(tzs, tty[a-z]*, Zilog 8530 Serial Port,zs)dnl 386_mkdev(tzs, {-tty[a-z]-}, {-u=${i#tty*} 387 case $u in 388 a) n=0 ;; 389 b) n=1 ;; 390 c) n=4 ;; 391 d) n=5 ;; 392 *) echo unknown tty device $i ;; 393 esac 394 M tty$u c major_tzs_c $n 660 dialer root-})dnl 395__devitem(tth, ttyh*, Sab82532 serial devices,sab)dnl 396_mkdev(tth, ttyh*, {-M ttyh$U c major_tth_c $U 660 dialer root-})dnl 397__devitem(czs, cua[a-z]*, Zilog 8530 Serial Port,zs)dnl 398_mkdev(czs, cua[a-z], {-u=${i#cua*} 399 case $u in 400 a) n=0 ;; 401 b) n=1 ;; 402 c) n=4 ;; 403 d) n=5 ;; 404 *) echo unknown cua device $i ;; 405 esac 406 M cua$u c major_czs_c Add($n, 128) 660 dialer root-})dnl 407__devitem(tty0, tty00, Standard serial port,com)dnl 408__devitem(mac_tty0, tty00, Standard serial port,zsc)dnl 409__devitem(ttyz, tty[a-d], On-board zs serial ports,zs)dnl 410__devitem(cuaz, cua[a-d], On-board zs serial ports,zs)dnl 411__devitem(ttyB, ttyB*, DEC 3000 serial ports,zs)dnl 412__devtitle(spec, Special purpose devices)dnl 413_mkdev(apm, apm*, {-M apm c major_apm_c 0 644 414 M apmctl c major_apm_c 8 644-})dnl 415_mkdev(acpi, acpi*, {-M acpi c major_acpi_c 0 644-})dnl 416__devitem(pctr, pctr*, PC Performance Tuning Register access device)dnl 417_mkdev(pctr, pctr, {-M pctr c major_pctr_c 0 644-})dnl 418__devitem(au, audio*, Audio devices,audio)dnl 419_mkdev(au, audio*, {-M audio$U c major_au_c $U 420 M mixer$U c major_au_c Add($U, 16) 421 M audioctl$U c major_au_c Add($U, 192) 422 MKlist[${#MKlist[*]}]=";[ -e mixer ] || ln -s mixer$U mixer"-})dnl 423__devitem(vi, video*, Video V4L2 devices,video)dnl 424_mkdev(vi, video*, {-M video$U c major_vi_c $U 600 425 MKlist[${#MKlist[*]}]=";[ -e video ] || ln -s video$U video"-})dnl 426__devitem(asc, asc*, ASC Audio device)dnl 427_mkdev(asc, asc*, {-M asc$U major_asc_c 0-})dnl 428__devitem(bio, bio, {-ioctl tunnel pseudo-device-})dnl 429_mkdev(bio, bio, {-M bio c major_bio_c 0 600-})dnl 430__devitem(radio, radio*, FM tuner devices)dnl 431_mkdev(radio, radio*, {-M radio$U c major_radio_c $U 432 MKlist[${#MKlist[*]}]=";[ -e radio ] || ln -s radio$U radio"-})dnl 433__devitem(fdesc, fd, fd/* nodes, fd)dnl 434_mkdev(fdesc, fd, {-RMlist[${#RMlist[*]}]=";mkdir -p fd;rm -f" n=0 435 while [ $n -lt 64 ];do M fd/$n c major_fdesc_c $n;n=Add($n, 1);done 436 MKlist[${#MKlist[*]}]=";chmod 555 fd"-})dnl 437__devitem(oppr, openprom,PROM settings,openprom)dnl 438_cdev(oppr, openprom, 70, 0)dnl 439__devitem(pf, pf*, Packet Filter)dnl 440_mkdev(pf, {-pf*-}, {-M pf c major_pf_c 0 600-})dnl 441__devitem(bpf, bpf, Berkeley Packet Filter)dnl 442_mkdev(bpf, bpf, {-M bpf c major_bpf_c 0 600 443 M bpf0 c major_bpf_c 0 600-})dnl 444_mkdev(tun, {-tun*-}, {-M tun$U c major_tun_c $U 600-}, 600)dnl 445_mkdev(tap, {-tap*-}, {-M tap$U c major_tap_c $U 600-}, 600)dnl 446_mkdev(switch, {-switch*-}, {-M switch$U c major_switch_c $U 600-}, 600)dnl 447__devitem(speak, speaker, PC speaker,spkr)dnl 448_mkdev(speak, speaker, {-M speaker c major_speak_c 0 600-})dnl 449__devitem(tun, tun*, Network tunnel driver)dnl 450__devitem(tap, tap*, Ethernet tunnel driver)dnl 451__devitem(switch, switch*, Switch driver)dnl 452__devitem(rnd, *random, In-kernel random data source,random)dnl 453_mkdev(rnd, *random, {-M urandom c major_rnd_c 0 644 454 RMlist[${#RMlist[*]}]=random 455 MKlist[${#MKlist[*]}]=";ln -s urandom random"-})dnl 456__devitem(joy, joy*, Joystick driver)dnl 457_mcdev(joy, joy*, joy, {-major_joy_c-}, 666)dnl 458__devitem(mag, magma*, Magma multiport cards,magma)dnl 459__devitem(bppmag, bppmag[mno], Magma parallel port,magma)dnl 460__devitem(spif, spif*, quote(spif)multiport cards)dnl 461__devitem(bppsp, bpp[jkl], quote(spif)parallel port,spif)dnl 462_mkdev(mag, magma*, {-case $U in 463 0) offset=0 nam=m;; 464 1) offset=16 nam=n;; 465 2) offset=32 nam=o;; 466 *) echo "bad unit for $i: $U"; exit 127;; 467 esac 468 offset=Mult($U, 64) 469 n=0 470 while [ $n -lt 16 ] 471 do 472 name=${nam}`hex $n` 473 M tty$name c major_mag_c Add($offset, $n) 660 dialer root 474 n=Add($n, 1) 475 done 476 M bpp${nam}0 c major_bppmag_c Add($offset, 0) 600 477 M bpp${nam}1 c major_bppmag_c Add($offset, 1) 600-})dnl 478_mkdev(spif, spif*, {-case $U in 479 0) offset=0 nam=j;; 480 1) offset=16 nam=k;; 481 2) offset=32 nam=l;; 482 *) echo "bad unit for $i: $U"; exit 127;; 483 esac 484 offset=Mult($U, 64) 485 n=0 486 while [ $n -lt 8 ] 487 do 488 name=${nam}`hex $n` 489 M tty$name c major_spif_c Add($offset, $n) 660 dialer root 490 n=Add($n, 1) 491 done 492 M bpp${nam}0 c major_bppsp_c Add($offset, 0) 600-})dnl 493__devitem(bpp, bpp*, Parallel port)dnl 494_mkdev(bpp, {-bpp*-}, {-M bpp$U c major_bpp_c $U 600-}, 600)dnl 495__devitem(vscsi, vscsi*, Virtual SCSI controller, vscsi 4)dnl 496_mcdev(vscsi, vscsi*, vscsi, {-major_vscsi_c-}, 600)dnl 497__devitem(rmidi, rmidi*, Raw MIDI devices,midi)dnl 498_mcdev(rmidi, rmidi*, rmidi, {-major_rmidi_c-}, 666)dnl 499__devitem(diskmap, diskmap, Disk mapper, diskmap)dnl 500_mkdev(diskmap, diskmap, {-M diskmap c major_diskmap_c 0 640 operator-})dnl 501__devitem(pppx, pppx*, PPP Multiplexer, pppx 4)dnl 502_mcdev(pppx, pppx*, pppx, {-major_pppx_c-}, 600)dnl 503__devtitle(plat, Platform-specific devices)dnl 504__devitem(bktr, bktr*, Video frame grabbers)dnl 505_mcdev(bktr, bktr*, bktr, {-major_bktr_c-}, 644)dnl 506__devitem(tuner, tuner*, Tuner devices, bktr)dnl 507_mkdev(tuner, tuner*, {-M tuner$U c major_bktr_c Add(Mult($U, 2), 16) 644-}, 644)dnl 508__devitem(pci, pci*, PCI bus devices)dnl 509_mkdev(pci, pci*, {-M pci$U c major_pci_c $U 600 510 MKlist[${#MKlist[*]}]=";[ -h pci ] || ln -sf pci0 pci"-})dnl 511__devitem(pdc, pdc, PDC device)dnl 512__devitem(gpr, gpr*, GPR400 smartcard reader)dnl 513_mcdev(gpr, gpr*, gpr, {-major_gpr_c-})dnl 514__devitem(hotplug, hotplug, devices hot plugging)dnl 515_mkdev(hotplug, hotplug, {-M hotplug c major_hotplug_c $U 400-})dnl 516__devitem(ipmi, ipmi*, IPMI BMC access)dnl 517_mkdev(ipmi, ipmi*, {-M ipmi$U c major_ipmi_c $U 600-})dnl 518__devitem(gpio, gpio*, General Purpose Input/Output)dnl 519_mcdev(gpio, gpio*, gpio, {-major_gpio_c-}, 600)dnl 520__devitem(vmm, vmm, Virtual Machine Monitor)dnl 521_mkdev(vmm, vmm, {-M vmm c major_vmm_c 0 600-})dnl 522__devitem(pvbus, pvbus*, paravirtual device tree root)dnl 523_mkdev(pvbus, {-pvbus*-}, {-M pvbus$U c major_pvbus_c $U 640-}, 640)dnl 524_mkdev(local, local, {-test -s $T.local && sh $T.local-})dnl 525__devitem(kcov, kcov, Kernel code coverage tracing)dnl 526_mkdev(kcov, kcov, {-M kcov c major_kcov_c 0 600-})dnl 527