Changeset ff16da5f in mainline for uspace/drv/bus/usb/usbdiag


Ignore:
Timestamp:
2017-12-21T14:37:30Z (8 years ago)
Author:
Petr Mánek <petr.manek@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
119a794
Parents:
74c0de0
git-author:
Petr Mánek <petr.manek@…> (2017-12-21 14:37:23)
git-committer:
Petr Mánek <petr.manek@…> (2017-12-21 14:37:30)
Message:

usbdiag: added isochronous test

Location:
uspace/drv/bus/usb/usbdiag
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/usbdiag/device.c

    r74c0de0 rff16da5f  
    5353        }
    5454
     55TRANSLATE_FUNC(usb_diag_stress_intr_out)
     56TRANSLATE_FUNC(usb_diag_stress_intr_in)
    5557TRANSLATE_FUNC(usb_diag_stress_bulk_out)
    5658TRANSLATE_FUNC(usb_diag_stress_bulk_in)
    57 TRANSLATE_FUNC(usb_diag_stress_intr_out)
    58 TRANSLATE_FUNC(usb_diag_stress_intr_in)
     59TRANSLATE_FUNC(usb_diag_stress_isoch_out)
     60TRANSLATE_FUNC(usb_diag_stress_isoch_in)
    5961
    6062static usbdiag_iface_t diag_interface = {
     63        .stress_intr_out = TRANSLATE_FUNC_NAME(usb_diag_stress_intr_out),
     64        .stress_intr_in = TRANSLATE_FUNC_NAME(usb_diag_stress_intr_in),
    6165        .stress_bulk_out = TRANSLATE_FUNC_NAME(usb_diag_stress_bulk_out),
    6266        .stress_bulk_in = TRANSLATE_FUNC_NAME(usb_diag_stress_bulk_in),
    63         .stress_intr_out = TRANSLATE_FUNC_NAME(usb_diag_stress_intr_out),
    64         .stress_intr_in = TRANSLATE_FUNC_NAME(usb_diag_stress_intr_in)
     67        .stress_isoch_out = TRANSLATE_FUNC_NAME(usb_diag_stress_isoch_out),
     68        .stress_isoch_in = TRANSLATE_FUNC_NAME(usb_diag_stress_isoch_in)
    6569};
    6670
  • uspace/drv/bus/usb/usbdiag/tests.c

    r74c0de0 rff16da5f  
    178178}
    179179
     180int usb_diag_stress_isoch_out(usb_diag_dev_t *dev, int cycles, size_t size)
     181{
     182        if (!dev)
     183                return EBADMEM;
     184
     185        char *buffer = (char *) malloc(size);
     186        if (!buffer)
     187                return ENOMEM;
     188
     189        memset(buffer, 42, size);
     190
     191        // TODO: Are we sure that no other test is running on this endpoint?
     192
     193        usb_log_info("Performing isochronous out stress test on device %s.", ddf_fun_get_name(dev->fun));
     194        int rc = EOK;
     195        for (int i = 0; i < cycles; ++i) {
     196                // Write buffer to device.
     197                if ((rc = usb_pipe_write(dev->isoch_out, buffer, size))) {
     198                        usb_log_error("Isochronous OUT write failed. %s\n", str_error(rc));
     199                        break;
     200                }
     201        }
     202
     203        free(buffer);
     204        return rc;
     205}
     206
     207int usb_diag_stress_isoch_in(usb_diag_dev_t *dev, int cycles, size_t size)
     208{
     209        if (!dev)
     210                return EBADMEM;
     211
     212        char *buffer = (char *) malloc(size);
     213        if (!buffer)
     214                return ENOMEM;
     215
     216        // TODO: Are we sure that no other test is running on this endpoint?
     217
     218        usb_log_info("Performing isochronous in stress test on device %s.", ddf_fun_get_name(dev->fun));
     219        int rc = EOK;
     220        for (int i = 0; i < cycles; ++i) {
     221                // Read device's response.
     222                size_t remaining = size;
     223                size_t transferred;
     224
     225                while (remaining > 0) {
     226                        if ((rc = usb_pipe_read(dev->isoch_in, buffer + size - remaining, remaining, &transferred))) {
     227                                usb_log_error("Isochronous IN read failed. %s\n", str_error(rc));
     228                                break;
     229                        }
     230
     231                        if (transferred > remaining) {
     232                                usb_log_error("Isochronous IN read more than expected.\n");
     233                                rc = EINVAL;
     234                                break;
     235                        }
     236
     237                        remaining -= transferred;
     238                }
     239
     240                if (rc)
     241                        break;
     242        }
     243
     244        free(buffer);
     245        return rc;
     246}
     247
    180248/**
    181249 * @}
  • uspace/drv/bus/usb/usbdiag/tests.h

    r74c0de0 rff16da5f  
    4343int usb_diag_stress_bulk_out(usb_diag_dev_t *, int, size_t);
    4444int usb_diag_stress_bulk_in(usb_diag_dev_t *, int, size_t);
     45int usb_diag_stress_isoch_out(usb_diag_dev_t *, int, size_t);
     46int usb_diag_stress_isoch_in(usb_diag_dev_t *, int, size_t);
    4547
    4648#endif /* USB_DIAG_TESTS_H_ */
Note: See TracChangeset for help on using the changeset viewer.