]>
Commit | Line | Data |
---|---|---|
c17d936e DB |
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 | |
bc0f23dc MF |
115 | |
116 | echo "test 21: control writes, unaligned" | |
117 | do_test -t 21 -c 100 -s 256 -v 1 | |
118 | ||
c17d936e DB |
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 | ||
bc0f23dc MF |
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 | ||
c17d936e DB |
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 | ||
bc0f23dc MF |
173 | COUNT=100 |
174 | echo "test 22: $COUNT transfers, non aligned" | |
175 | do_test -t 22 -g 8 -v 0 | |
176 | ||
c17d936e DB |
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 | ||
bc0f23dc MF |
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 | ||
c17d936e DB |
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 | ||
bc0f23dc MF |
226 | COUNT=100 |
227 | echo "test 23: $COUNT transfers, unaligned" | |
228 | do_test -t 23 -g 8 -v 0 | |
229 | ||
c17d936e DB |
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 |