diff options
-rw-r--r-- | src/main.c | 8 | ||||
-rw-r--r-- | src/usb.c | 7 |
2 files changed, 12 insertions, 3 deletions
@@ -87,6 +87,7 @@ static void set_platform_info(nv3p_platform_info_t *info); static uint32_t get_op_mode(void); static nv3p_platform_info_t *g_platform_info = NULL; +extern uint32_t usb_timeout; enum cmdline_opts { OPT_BCT, @@ -105,6 +106,7 @@ enum cmdline_opts { OPT_SIGNED_MSGS_FILE, OPT_SOC, OPT_DOWNLOAD_SIGNED_MSGS, + OPT_USB_TIMEOUT, OPT_END, }; @@ -155,6 +157,8 @@ static void usage(char *progname) fprintf(stderr, "\t\tSpecify Tegra SoC chip model number, ie, 124.\n"); fprintf(stderr, "\t--download-signed-msgs\n"); fprintf(stderr, "\t\tDownload signed messages\n"); + fprintf(stderr, "\t--usb-timeout=<timeout_ms>\n"); + fprintf(stderr, "\t\tSpecify usb transfer timeout value in ms, 0 for unlimited timeout\n"); fprintf(stderr, "\n"); } @@ -259,6 +263,7 @@ int main(int argc, char **argv) [OPT_SIGNED_MSGS_FILE] = {"signed-msgs-file", 1, 0, 0}, [OPT_SOC] = {"soc", 1, 0, 0}, [OPT_DOWNLOAD_SIGNED_MSGS] = {"download-signed-msgs", 0, 0, 0}, + [OPT_USB_TIMEOUT] = {"usb-timeout", 1, 0, 0}, [OPT_END] = {0, 0, 0, 0} }; // parse command line args @@ -316,6 +321,9 @@ int main(int argc, char **argv) case OPT_DOWNLOAD_SIGNED_MSGS: download_signed_msgs = true; break; + case OPT_USB_TIMEOUT: + usb_timeout = strtoul(optarg, NULL, 0); + break; case OPT_HELP: default: usage(argv[0]); @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, NVIDIA CORPORATION + * Copyright (c) 2011-2016, NVIDIA CORPORATION * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -39,6 +39,7 @@ #define USB_XFER_MAX 4096 +uint32_t usb_timeout = USB_TIMEOUT; // // returns 1 if the specified usb device matches the vendor id // @@ -307,7 +308,7 @@ int usb_write(usb_device_t *usb, uint8_t *buf, int len) while (len) { chunk_size = MIN(len, USB_XFER_MAX); ret = libusb_bulk_transfer(usb->handle, usb->endpt_out, buf, - chunk_size, &actual_chunk, USB_TIMEOUT); + chunk_size, &actual_chunk, usb_timeout); if (ret != LIBUSB_SUCCESS) { dprintf("libusb write failure: %d: %s\n", ret, libusb_error_name(ret)); return EIO; @@ -334,7 +335,7 @@ int usb_read(usb_device_t *usb, uint8_t *buf, int len, int *actual_len) while (len) { chunk_size = MIN(len, USB_XFER_MAX); ret = libusb_bulk_transfer(usb->handle, usb->endpt_in, buf, - chunk_size, &actual_chunk, USB_TIMEOUT); + chunk_size, &actual_chunk, usb_timeout); if (ret != LIBUSB_SUCCESS) { dprintf("libusb read failure: %d: %s\n", ret, libusb_error_name(ret)); return EIO; |