Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/tools/usb/hcd-tests.sh
10818 views
1
#!/bin/sh
2
#
3
# test types can be passed on the command line:
4
#
5
# - control: any device can do this
6
# - out, in: out needs 'bulk sink' firmware, in needs 'bulk src'
7
# - iso-out, iso-in: out needs 'iso sink' firmware, in needs 'iso src'
8
# - halt: needs bulk sink+src, tests halt set/clear from host
9
# - unlink: needs bulk sink and/or src, test HCD unlink processing
10
# - loop: needs firmware that will buffer N transfers
11
#
12
# run it for hours, days, weeks.
13
#
14
15
#
16
# this default provides a steady test load for a bulk device
17
#
18
TYPES='control out in'
19
#TYPES='control out in halt'
20
21
#
22
# to test HCD code
23
#
24
# - include unlink tests
25
# - add some ${RANDOM}ness
26
# - connect several devices concurrently (same HC)
27
# - keep HC's IRQ lines busy with unrelated traffic (IDE, net, ...)
28
# - add other concurrent system loads
29
#
30
31
declare -i COUNT BUFLEN
32
33
COUNT=50000
34
BUFLEN=2048
35
36
# NOTE: the 'in' and 'out' cases are usually bulk, but can be
37
# set up to use interrupt transfers by 'usbtest' module options
38
39
40
if [ "$DEVICE" = "" ]; then
41
echo "testing ALL recognized usbtest devices"
42
echo ""
43
TEST_ARGS="-a"
44
else
45
TEST_ARGS=""
46
fi
47
48
do_test ()
49
{
50
if ! ./testusb $TEST_ARGS -s $BUFLEN -c $COUNT $* 2>/dev/null
51
then
52
echo "FAIL"
53
exit 1
54
fi
55
}
56
57
ARGS="$*"
58
59
if [ "$ARGS" = "" ];
60
then
61
ARGS="$TYPES"
62
fi
63
64
# FIXME use /sys/bus/usb/device/$THIS/bConfigurationValue to
65
# check and change configs
66
67
CONFIG=''
68
69
check_config ()
70
{
71
if [ "$CONFIG" = "" ]; then
72
CONFIG=$1
73
echo "assuming $CONFIG configuration"
74
return
75
fi
76
if [ "$CONFIG" = $1 ]; then
77
return
78
fi
79
80
echo "** device must be in $1 config, but it's $CONFIG instead"
81
exit 1
82
}
83
84
85
echo "TESTING: $ARGS"
86
87
while : true
88
do
89
echo $(date)
90
91
for TYPE in $ARGS
92
do
93
# restore defaults
94
COUNT=5000
95
BUFLEN=2048
96
97
# FIXME automatically multiply COUNT by 10 when
98
# /sys/bus/usb/device/$THIS/speed == "480"
99
100
# COUNT=50000
101
102
case $TYPE in
103
control)
104
# any device, in any configuration, can use this.
105
echo '** Control test cases:'
106
107
echo "test 9: ch9 postconfig"
108
do_test -t 9 -c 5000
109
echo "test 10: control queueing"
110
do_test -t 10 -c 5000
111
112
# this relies on some vendor-specific commands
113
echo "test 14: control writes"
114
do_test -t 14 -c 15000 -s 256 -v 1
115
116
echo "test 21: control writes, unaligned"
117
do_test -t 21 -c 100 -s 256 -v 1
118
119
;;
120
121
out)
122
check_config sink-src
123
echo '** Host Write (OUT) test cases:'
124
125
echo "test 1: $COUNT transfers, same size"
126
do_test -t 1
127
echo "test 3: $COUNT transfers, variable/short size"
128
do_test -t 3 -v 421
129
130
COUNT=100
131
echo "test 17: $COUNT transfers, unaligned DMA map by core"
132
do_test -t 17
133
134
echo "test 19: $COUNT transfers, unaligned DMA map by usb_alloc_coherent"
135
do_test -t 19
136
137
COUNT=2000
138
echo "test 5: $COUNT scatterlists, same size entries"
139
do_test -t 5
140
141
# try to trigger short OUT processing bugs
142
echo "test 7a: $COUNT scatterlists, variable size/short entries"
143
do_test -t 7 -v 579
144
BUFLEN=4096
145
echo "test 7b: $COUNT scatterlists, variable size/bigger entries"
146
do_test -t 7 -v 41
147
BUFLEN=64
148
echo "test 7c: $COUNT scatterlists, variable size/micro entries"
149
do_test -t 7 -v 63
150
;;
151
152
iso-out)
153
check_config sink-src
154
echo '** Host ISOCHRONOUS Write (OUT) test cases:'
155
156
# at peak iso transfer rates:
157
# - usb 2.0 high bandwidth, this is one frame.
158
# - usb 1.1, it's twenty-four frames.
159
BUFLEN=24500
160
161
COUNT=1000
162
163
# COUNT=10000
164
165
echo "test 15: $COUNT transfers, same size"
166
# do_test -t 15 -g 3 -v 0
167
BUFLEN=32768
168
do_test -t 15 -g 8 -v 0
169
170
# FIXME it'd make sense to have an iso OUT test issuing
171
# short writes on more packets than the last one
172
173
COUNT=100
174
echo "test 22: $COUNT transfers, non aligned"
175
do_test -t 22 -g 8 -v 0
176
177
;;
178
179
in)
180
check_config sink-src
181
echo '** Host Read (IN) test cases:'
182
183
# NOTE: these "variable size" reads are just multiples
184
# of 512 bytes, no EOVERFLOW testing is done yet
185
186
echo "test 2: $COUNT transfers, same size"
187
do_test -t 2
188
echo "test 4: $COUNT transfers, variable size"
189
do_test -t 4
190
191
COUNT=100
192
echo "test 18: $COUNT transfers, unaligned DMA map by core"
193
do_test -t 18
194
195
echo "test 20: $COUNT transfers, unaligned DMA map by usb_alloc_coherent"
196
do_test -t 20
197
198
COUNT=2000
199
echo "test 6: $COUNT scatterlists, same size entries"
200
do_test -t 6
201
echo "test 8: $COUNT scatterlists, variable size entries"
202
do_test -t 8
203
;;
204
205
iso-in)
206
check_config sink-src
207
echo '** Host ISOCHRONOUS Read (IN) test cases:'
208
209
# at peak iso transfer rates:
210
# - usb 2.0 high bandwidth, this is one frame.
211
# - usb 1.1, it's twenty-four frames.
212
BUFLEN=24500
213
214
COUNT=1000
215
216
# COUNT=10000
217
218
echo "test 16: $COUNT transfers, same size"
219
# do_test -t 16 -g 3 -v 0
220
BUFLEN=32768
221
do_test -t 16 -g 8 -v 0
222
223
# FIXME since iso expects faults, it'd make sense
224
# to have an iso IN test issuing short reads ...
225
226
COUNT=100
227
echo "test 23: $COUNT transfers, unaligned"
228
do_test -t 23 -g 8 -v 0
229
230
;;
231
232
halt)
233
# NOTE: sometimes hardware doesn't cooperate well with halting
234
# endpoints from the host side. so long as mass-storage class
235
# firmware can halt them from the device, don't worry much if
236
# you can't make this test work on your device.
237
COUNT=2000
238
echo "test 13: $COUNT halt set/clear"
239
do_test -t 13
240
;;
241
242
unlink)
243
COUNT=2000
244
echo "test 11: $COUNT read unlinks"
245
do_test -t 11
246
247
echo "test 12: $COUNT write unlinks"
248
do_test -t 12
249
;;
250
251
loop)
252
# defaults need too much buffering for ez-usb devices
253
BUFLEN=2048
254
COUNT=32
255
256
# modprobe g_zero qlen=$COUNT buflen=$BUFLEN loopdefault
257
check_config loopback
258
259
# FIXME someone needs to write and merge a version of this
260
261
echo "write $COUNT buffers of $BUFLEN bytes, read them back"
262
263
echo "write $COUNT variable size buffers, read them back"
264
265
;;
266
267
*)
268
echo "Don't understand test type $TYPE"
269
exit 1;
270
esac
271
echo ''
272
done
273
done
274
275
# vim: sw=4
276
277