1# There are a number of modifiers that are allowed to be used in some
2# of the different fields. They provide the following subsitutions:
3#
4# %n the "kernel number" of the device.
5#    For example, 'sda3' has a "kernel number" of '3'
6# %k the kernel name for the device
7# %M the kernel major number for the device
8# %m the kernel minor number for the device
9# %b the bus id for the device
10# %c the string returned by the PROGRAM
11# %s{filename} the content of a sysfs attribute
12# %% the '%' char itself
13#
14
15# workaround for devices which do not report media changes
16SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTR{removable}=="1", \
17	ENV{ID_MODEL}=="IOMEGA_ZIP*",	NAME="%k", OPTIONS+="all_partitions"
18SUBSYSTEMS=="ide", KERNEL=="hd[a-z]", ATTRS{media}=="floppy", \
19	OPTIONS+="all_partitions"
20
21# IDE devices
22SUBSYSTEMS=="ide", KERNEL=="hd[a-z]*", PROGRAM="ide-devfs.sh %k %b %n", \
23					ACTION=="add", \
24					NAME="%c{1}", SYMLINK+="%k %c{2}"
25
26# SCSI devices
27SUBSYSTEMS=="scsi", PROGRAM="scsi-devfs.sh %k %b %n", ACTION=="add", \
28					NAME="%c{1}", SYMLINK+="%k %c{2}"
29
30# RAID controllers
31KERNEL=="cciss!*|ida!*|rd!*", PROGRAM="raid-devfs.sh %k", ACTION=="add", \
32					NAME="%c{1}", SYMLINK+="%k"
33
34# other block devices
35KERNEL=="md[0-9]*",			NAME="md/%n",
36KERNEL=="loop[0-9]*",			NAME="loop/%n"
37KERNEL=="ram[0-9]*",			NAME="rd/%n"
38
39# USB devices
40SUBSYSTEMS=="usb", KERNEL=="auer[0-9]*",	NAME="usb/%k"
41SUBSYSTEMS=="usb", KERNEL=="cpad[0-9]*",	NAME="usb/%k"
42SUBSYSTEMS=="usb", KERNEL=="dabusb*",		NAME="usb/%k"
43SUBSYSTEMS=="usb", KERNEL=="hiddev*",		NAME="usb/%k"
44SUBSYSTEMS=="usb", KERNEL=="legousbtower*",	NAME="usb/%k"
45SUBSYSTEMS=="usb", KERNEL=="lp[0-9]*",		NAME="usb/%k"
46SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", \
47	ATTRS{product}=="Palm Handheld*|Handspring Visor|palmOne Handheld", \
48						SYMLINK+="pilot"
49
50# usbfs-like devices
51SUBSYSTEM=="usb_device",	PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev}; printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'", ACTION=="add", \
52				NAME="%c"
53
54# serial devices
55KERNEL=="ttyS[0-9]*",		NAME="tts/%n"
56KERNEL=="ttyUSB[0-9]*",		NAME="tts/USB%n"
57KERNEL=="rfcomm[0-9]*",		NAME="bluetooth/rfcomm/%n",
58KERNEL=="capi",			NAME="capi20", SYMLINK+="isdn/capi20"
59KERNEL=="capi[0-9]*",		NAME="capi/%n"
60
61# vc devices
62KERNEL=="tty[0-9]*",		NAME="vc/%n"
63KERNEL=="vcs",			NAME="vcc/0"
64KERNEL=="vcs[0-9]*",		NAME="vcc/%n"
65KERNEL=="vcsa",			NAME="vcc/a0"
66KERNEL=="vcsa[0-9]*",		NAME="vcc/a%n"
67
68# video devices
69KERNEL=="video[0-9]*",		NAME="v4l/%k"
70KERNEL=="radio[0-9]*",		NAME="v4l/%k"
71KERNEL=="vbi[0-9]*",		NAME="v4l/%k"
72KERNEL=="vtx[0-9]*",		NAME="v4l/%k"
73KERNEL=="dvb*",			PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter%%i/%%s $${K%%%%.*} $${K#*.}", ACTION=="add", \
74				NAME="%c"
75KERNEL=="fb[0-9]*",		NAME="fb/%n"
76KERNEL=="card[0-9]*",		NAME="dri/%k"
77
78# misc devices
79KERNEL=="apm_bios",		NAME="misc/%k",
80KERNEL=="agpgart",		NAME="misc/%k"
81KERNEL=="hw_random",		NAME="hwrng"
82KERNEL=="nvram",		NAME="misc/%k"
83KERNEL=="psaux",		NAME="misc/%k"
84KERNEL=="rtc",			NAME="misc/%k"
85KERNEL=="tun",			NAME="net/%k"
86KERNEL=="evtchn",		NAME="xen/%k"
87
88# printers and parallel devices
89KERNEL=="lp[0-9]*",		NAME="printers/%n"
90KERNEL=="parport[0-9]*",	NAME="parports/%n"
91
92KERNEL=="i2c-[0-9]*",		NAME="i2c/%n"
93KERNEL=="fd[0-9]*",		NAME="floppy/%n"
94
95KERNEL=="cdemu[0-9]*",		NAME="cdemu/%n"
96KERNEL=="pktcdvd[0-9]*",	NAME="pktcdvd/%n"
97KERNEL=="pktcdvd",		NAME="pktcdvd/control"
98
99KERNEL=="cpu[0-9]*",		NAME="cpu/%n/cpuid"
100KERNEL=="msr[0-9]*",		NAME="cpu/%n/msr"
101KERNEL=="microcode",		NAME="cpu/microcode"
102
103KERNEL=="umad*",		NAME="infiniband/%k"
104KERNEL=="issm*",		NAME="infiniband/%k"
105KERNEL=="uverbs*",		NAME="infiniband/%k"
106KERNEL=="ucm*",			NAME="infiniband/%k"
107
108# sound devices
109KERNEL=="controlC[0-9]*",	NAME="snd/%k"
110KERNEL=="hwC[D0-9]*",		NAME="snd/%k"
111KERNEL=="pcmC[D0-9cp]*",	NAME="snd/%k"
112KERNEL=="midiC[D0-9]*",		NAME="snd/%k"
113KERNEL=="timer",		NAME="snd/%k"
114KERNEL=="seq",			NAME="snd/%k"
115KERNEL=="audio*",		NAME="sound/%k"
116KERNEL=="dsp*",			NAME="sound/%k"
117KERNEL=="adsp*",		NAME="sound/%k"
118KERNEL=="midi*",		NAME="sound/%k"
119KERNEL=="mixer*",		NAME="sound/%k"
120KERNEL=="sequencer*",		NAME="sound/%k"
121KERNEL=="amidi*",		NAME="sound/%k"
122KERNEL=="dmmidi*",		NAME="sound/%k"
123KERNEL=="admmidi*",		NAME="sound/%k"
124
125# ieee1394 devices       
126KERNEL=="dv1394*",		NAME="dv1394/%n"
127KERNEL=="video1394*",		NAME="video1394/%n"
128
129# input devices
130KERNEL=="mice",			NAME="input/%k"
131KERNEL=="mouse[0-9]*",		NAME="input/%k"
132KERNEL=="event[0-9]*",		NAME="input/%k"
133KERNEL=="js[0-9]*",		NAME="input/%k"
134KERNEL=="ts[0-9]*",		NAME="input/%k"
135KERNEL=="uinput",		NAME="input/%k"
136
137# Zaptel
138KERNEL=="zapctl",		NAME="zap/ctl"
139KERNEL=="zaptimer",		NAME="zap/timer"
140KERNEL=="zapchannel",		NAME="zap/channel"
141KERNEL=="zappseudo",		NAME="zap/pseudo"
142KERNEL=="zap[0-9]*",		NAME="zap/%n"
143
144# AOE character devices
145SUBSYSTEM=="aoe", KERNEL=="discover",	NAME="etherd/%k"
146SUBSYSTEM=="aoe", KERNEL=="err",	NAME="etherd/%k"
147SUBSYSTEM=="aoe", KERNEL=="interfaces",	NAME="etherd/%k"
148SUBSYSTEM=="aoe", KERNEL=="revalidate",	NAME="etherd/%k"
149
150# device mapper creates its own device nodes, so ignore these
151KERNEL=="device-mapper",	NAME="mapper/control"
152
153