plan9fox/sys/src/9/boot/nusbrc
cinap_lenrek 7e3b2cdb55 usbd: intoruce /env/usbbusy
to solve the usb device enumeration race on boot, usbd creates /env/usbbusy
on startup and once all devices have been enumerated and readers have consumed
all the events, we remove the file so nusbrc/bootrc can continue. this makes
sure all the usb devices that where plugged in on boot are made available.
2015-11-22 03:17:15 +01:00

70 lines
1.5 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 {
id=$1
if(~ $#* 5 && ! test -e /env/nousbhname)
id=$1:$5
switch($2$3){
case 0b957720 0b95772a 0db0a877 13b10018 15577720 20013c05 07d13c05 05ac1402
nusb/ether -t a88772 $etherargs $id
case 0b951780 14eaab11 17370039 0411006e 050d5055
nusb/ether -t a88178 $etherargs $id
case 2001abc1
nusb/ether -t aue $etherargs $id
case 0bda8150
nusb/ether -t url $etherargs $id
case 18d14ee3 0bb40003
nusb/ether -t rndis $etherargs $id
case *
switch($4){
case *03
nusb/kb $id
case *02
# CDC ethernet
nusb/ether $etherargs $id
case *08
if(nusb/disk $id) @{
rfork ne
cd '#σ/usb'
devs=sdU^($1 $5)
for(dev in $devs $devs.*) if(test -d $dev) {
diskparts $dev
for(part in $dev/dos* $dev/9fat* $dev/data) if(test -r $part && ~ `{fstype $part} dos) {
mkdir -m 0700 '#σc/'^$dev || exit
{dossrv -s -f $part &} <[0=1] |
echo 0 >'#σc/'^$dev/dos
exit
}
}
}
case *
# Raspberry Pi ethernet will always appear as /net/etherU0
if(~ $2 0424)
nusb/ether -t smsc $etherargs $1:0
}
}
}
fn detach {
devs='#σc/sdU'^($1 $5)
rm -rf '#σc/usb/'^$1.* '#σc/usbnet/'^$1.* $devs $devs.*
}
rc < '#σ/usb/usbevent' &
}
# usbd removes this file once all devices have been enumerated
while(test -e /env/usbbusy)
sleep 1
bind -a '#σ/usb' /dev
bind -a '#σ/usbnet' /net