shithub: riscv

ref: 807af1d8473b115a34c40f47a1167365995ebdf5
dir: /sys/src/9/boot/nusbrc/

View raw version
#!/bin/rc
if(! bind -a '#u' /dev)
	exit

mkdir -p -m 700 '#σc/usb'
mkdir -p -m 700 '#σc/usbnet'

if(! nusb/usbd)
	exit

@{
	rfork ne
	fn attach {
		switch($2$3){
		case 0b957720 0b95772a 0db0a877 13b10018 15577720 20013c05 07d13c05 05ac1402
			nusb/ether -t a88772 $etherargs $1 &
		case 0b951780 14eaab11 17370039 0411006e 050d5055
			nusb/ether -t a88178 $etherargs $1 &
		case 2001abc1
			nusb/ether -t aue $etherargs $1 &
		case 0bda8150
			nusb/ether -t url $etherargs $1 &
		case 18d14ee3 0bb40003
			nusb/ether -t rndis $etherargs $1 &
		case *
			switch($4){
			case *03
				nusb/kb $1 &
			case *02
				# CDC ethernet
				nusb/ether $etherargs $1 &
			case *08
				@{
					rfork ne
					nusb/disk $1
					cd '#σ/usb'
					for(dev in sdU^$1.*) if(test -d $dev) {
						diskparts $dev
						for(part in $dev/dos* $dev/9fat) if(test -r $part) {
							mkdir -m 0700 '#σc/'^$dev || exit
							{dossrv -s -f $part &} <[0=1] |
								echo 0 >'#σc/'^$dev/dos
							exit
						}
					}
				} &
			case *
				if(~ $2 0424)
					nusb/ether -t smsc $etherargs $1 &
			}
		}
	}
	fn detach {
		rm -rf '#σc/usb/'^$1.* '#σc/sdU'^$1.* '#σc/usbnet/'^$1.*
	}
	rc < '#σ/usb/usbevent' &
}

bind -a '#σ/usb' /dev
bind -a '#σ/usbnet' /net