blob: 5f2a4d40759d225e659aa11cacec756b439923e5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#!/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 10046344
nusb/ether -t rndis $etherargs $id
case 12092301 # keyboardio model 01 (IAD)
nusb/kb $id
# prevent attachment to nusb/kb for:
case 054c0268 # sony dualshock 3 (ps3) controller
case *
switch($4){
case *03
nusb/kb $id
case ff0202
nusb/ether -t rndis $etherargs $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){
if(~ $3 7800)
nusb/ether -t lan78xx $etherargs $1:0
if not
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
|