The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/tools/usb/hcd-tests.sh

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    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

Cache object: f335d95da00a998655dfe80268f43ef3


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.