# console
KERNEL=="pty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="666", OPTIONS="last_rule"
KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="666", OPTIONS="last_rule"
KERNEL=="vcs*",			GROUP="tty", MODE="620", OPTIONS="last_rule"
KERNEL=="vcsa*",		GROUP="tty", MODE="620", OPTIONS="last_rule"
KERNEL=="tty",			GROUP="tty", MODE="666", OPTIONS="last_rule"
KERNEL=="tty[0-9]*",		GROUP="tty", MODE="620", OPTIONS="last_rule"
KERNEL=="console",		MODE="600", OPTIONS="last_rule"
KERNEL=="ptmx",			GROUP="tty", MODE="666", OPTIONS="last_rule"

# serial devices
KERNEL=="tty[A-Z]*|pppox*|ircomm*|noz*", GROUP="uucp"
KERNEL=="hvc*|hvsi*",		GROUP="uucp"
KERNEL=="iseries/vtty*",	GROUP="uucp"
KERNEL=="mwave",		NAME="modems/%k", GROUP="uucp"
KERNEL=="ttyUSB*", ATTRS{product}=="[Pp]alm*Handheld*", SYMLINK+="pilot"
KERNEL=="ttyUSB*", ATTRS{product}=="[Hh]andspring*Treo*|[Hh]andspring*Visor*", SYMLINK+="pilot"

# video/graphics
SUBSYSTEM=="video4linux",	GROUP="video"
SUBSYSTEM=="graphics"		GROUP="video"
KERNEL=="vtx*|vbi*",		GROUP="video"
KERNEL=="winradio*",		GROUP="video"
KERNEL=="vttuner*",		GROUP="video"
KERNEL=="nvidia*|nvidiactl*",	GROUP="video"
KERNEL=="video0",		SYMLINK+="video"
KERNEL=="radio0",		SYMLINK+="radio"
KERNEL=="vbi0",			SYMLINK+="vbi"
KERNEL=="pmu",			GROUP="video"

# dvb
SUBSYSTEM=="dvb", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter%%i/%%s $${K%%%%.*} $${K#*.}'", NAME="%c", GROUP="video"

# input devices
KERNEL=="mouse*|mice",		NAME="input/%k", MODE="0640"
KERNEL=="event*",		NAME="input/%k", MODE="0640"
KERNEL=="js*",			NAME="input/%k", MODE="0644"
KERNEL=="ts*",			NAME="input/%k", MODE="0600"
KERNEL=="uinput",		NAME="input/%k", MODE="0600"
KERNEL=="lirc0",		SYMLINK+="lirc"

# printer
SUBSYSTEM=="usb",		KERNEL=="lp*", NAME="usb/%k", SYMLINK+="usb%k", GROUP="lp"
SUBSYSTEM=="printer",		KERNEL=="lp*", GROUP="lp"
KERNEL=="irlpt*",		GROUP="lp"

# cpu devices
KERNEL=="cpu[0-9]*",		NAME="cpu/%n/cpuid"
KERNEL=="msr[0-9]*",		NAME="cpu/%n/msr"
KERNEL=="microcode",		NAME="cpu/microcode", MODE="0600"

# IEEE1394 devices
KERNEL=="raw1394*",		GROUP="video"
KERNEL=="dv1394*",		SYMLINK+="dv1394/%n", GROUP="video"
KERNEL=="video1394*",		SYMLINK+="video1394/%n", GROUP="video"

KERNEL=="hw_random",		NAME="hwrng", SYMLINK+="%k"
KERNEL=="rioctl",		NAME="specialix_rioctl", SYMLINK+="%k"
KERNEL=="sxctl",		NAME="specialix_sxctl", SYMLINK+="%k"

# network
KERNEL=="tun",			NAME="net/%k", MODE="0666"

# misc devices
KERNEL=="mem|kmem",		GROUP="kmem", MODE="640"
KERNEL=="port",			GROUP="kmem", MODE="640"
KERNEL=="nvram",		GROUP="kmem", MODE="600"
KERNEL=="null",			MODE="666"
KERNEL=="zero",			MODE="666"
KERNEL=="full",			MODE="622"
KERNEL=="random",		MODE="666"
KERNEL=="urandom",		MODE="644"
KERNEL=="rtc",			MODE="600"
KERNEL=="sonypi",		MODE="0666"
KERNEL=="agpgart",		MODE="0600", GROUP="video"
KERNEL=="djs*",			MODE="644"
KERNEL=="sgi_*",		MODE="666"
KERNEL=="rrom*",		MODE="400"
KERNEL=="rflash*",		MODE="400"
KERNEL=="usbscanner*",		MODE="644"
KERNEL=="3270/ttycons*",	MODE="600"
KERNEL=="3270/tub*",		MODE="666"
KERNEL=="3270/tubcons*",	MODE="600"
KERNEL=="ica",			MODE="666"
KERNEL=="z90crypt",		MODE="666"
KERNEL=="mmtimer",		MODE="644"
KERNEL=="auer[0-9]*"		NAME="usb/%k"

# packet writing interface
KERNEL=="pktcdvd",		NAME="pktcdvd/control"
KERNEL=="pktcdvd[0-9]*",	NAME="pktcdvd/%k"

# additional floppy devices (no sysfs entries)
KERNEL=="nvram", ACTION=="add", RUN+="load_floppy_module.sh"
KERNEL=="fd[0-9]*", ACTION=="add", ATTRS{cmos}=="?*", RUN+="create_floppy_devices -c -t $attr{cmos} -m %M -M 0640 -G disk $root/%k"

# block devices
SUBSYSTEM=="block", GROUP="disk", MODE="0640"

# sd:		0 TYPE_DISK, 7 TYPE_MOD, 14 TYPE_RBC
# sr:		4 TYPE_WORM, 5 TYPE_ROM
# st/osst:	1 TYPE_TAPE
SUBSYSTEM=="scsi", ACTION=="add", ATTR{type}=="0|7|14", ATTR{timeout}="60"
SUBSYSTEM=="scsi", ACTION=="add", ATTR{type}=="1", ATTR{timeout}="900"
SUBSYSTEM=="scsi_device", ACTION=="add", ATTRS{type}=="0|7|14", RUN+="/sbin/modprobe sd_mod"
SUBSYSTEM=="scsi_device", ACTION=="add", ATTRS{type}=="1", ATTR{vendor}=="On[sS]tream", RUN+="/sbin/modprobe osst"
SUBSYSTEM=="scsi_device", ACTION=="add", ATTRS{type}=="1", RUN+="/sbin/modprobe st"
SUBSYSTEM=="scsi_device", ACTION=="add", ATTRS{type}=="[45]", RUN+="/sbin/modprobe sr_mod"
SUBSYSTEM=="scsi_device", ACTION=="add", RUN+="/sbin/modprobe sg"
KERNEL=="hd*", SUBSYSTEMS=="ide", ATTRS{media}=="floppy", OPTIONS+="all_partitions"
SUBSYSTEM=="ide", ACTION=="add", ATTR{media}=="tape", RUN+="/sbin/modprobe ide-scsi"
SUBSYSTEM=="mmc", ACTION=="add", RUN+="/sbin/modprobe mmc_block"

# misc storage devices (non-block)
KERNEL=="sg*",			GROUP="disk", MODE="640"
KERNEL=="st*|nst*",		GROUP="disk"
KERNEL=="qft*|nqft*|zqft*|nzqft*|rawqft*|nrawqft", GROUP="disk"
KERNEL=="ht*|nht*",		GROUP="disk"
KERNEL=="pf*",			GROUP="disk"
KERNEL=="sch*",			GROUP="disk"
KERNEL=="pt*|npt*",		GROUP="disk"
KERNEL=="pg*",			GROUP="disk"
KERNEL=="evms/block_device*",	GROUP="disk"
KERNEL=="rawctl*",		NAME="raw/%k", GROUP="disk"
SUBSYSTEM=="raw", KERNEL=="raw[0-9]*", NAME="raw/%k", GROUP="disk"
KERNEL=="osst*|nosst*",		NAME="%k", GROUP="disk"
KERNEL=="iseries/vt*",		NAME="%k", GROUP="disk"
KERNEL=="iseries/nvt*",		NAME="%k", GROUP="disk"
KERNEL=="iseries/ibmsis*",	NAME="%k", GROUP="disk"

# libusb device access
SUBSYSTEM=="usb_device", ACTION=="add", PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev}; printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'", NAME="%c", MODE="0644"

# kernel firmware loader
SUBSYSTEM=="firmware", ACTION=="add", RUN+="firmware.sh"