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