~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to tools/usb/hcd-tests.sh

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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