Linux Audio

Check our new training course

Loading...
v3.15
  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#
 18TYPES='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
 31declare -i COUNT BUFLEN
 32
 33COUNT=50000
 34BUFLEN=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
 40if [ "$DEVICE" = "" ]; then
 41	echo "testing ALL recognized usbtest devices"
 42	echo ""
 43	TEST_ARGS="-a"
 44else
 45	TEST_ARGS=""
 46fi
 47
 48do_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
 57ARGS="$*"
 58
 59if [ "$ARGS" = "" ];
 60then
 61    ARGS="$TYPES"
 62fi
 63
 64# FIXME use /sys/bus/usb/device/$THIS/bConfigurationValue to
 65# check and change configs
 66
 67CONFIG=''
 68
 69check_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
 85echo "TESTING:  $ARGS"
 86
 87while : true
 88do
 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
273done
274
275# vim: sw=4
v6.2
  1#!/bin/sh
  2# SPDX-License-Identifier: GPL-2.0
  3#
  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
116
117	    echo "test 21: control writes, unaligned"
118	    do_test -t 21 -c 100 -s 256 -v 1
119
120	    ;;
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
131	    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
138	    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
174	    COUNT=100
175	    echo "test 22: $COUNT transfers, non aligned"
176	    do_test -t 22 -g 8 -v 0
177
178	    ;;
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
192	    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
199	    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
227	    COUNT=100
228	    echo "test 23: $COUNT transfers, unaligned"
229	    do_test -t 23 -g 8 -v 0
230
231	    ;;
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