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