Browse Source

usbutils use a heap buffer for bulk read rather than stack

Kano 12 years ago
parent
commit
4cb7cfb226
2 changed files with 10 additions and 3 deletions
  1. 1 3
      usbutils.c
  2. 9 0
      usbutils.h

+ 1 - 3
usbutils.c

@@ -2292,9 +2292,7 @@ int _usb_read(struct cgpu_info *cgpu, int ep, char *buf, size_t bufsiz, int *pro
 	bool first = true;
 	bool first = true;
 	char *search;
 	char *search;
 	int endlen;
 	int endlen;
-
-	// We add 4: 1 for null, 2 for FTDI status and 1 to round to 4 bytes
-	unsigned char usbbuf[USB_MAX_READ+4], *ptr;
+	unsigned char *ptr, *usbbuf = cgpu->usbinfo.bulkbuf;
 	size_t usbbufread;
 	size_t usbbufread;
 
 
 	DEVLOCK(cgpu, pstate);
 	DEVLOCK(cgpu, pstate);

+ 9 - 0
usbutils.h

@@ -184,6 +184,8 @@ struct cg_usb_device {
 
 
 #define USB_NOSTAT 0
 #define USB_NOSTAT 0
 
 
+#define USB_MAX_READ 8192
+
 struct cg_usb_info {
 struct cg_usb_info {
 	uint8_t bus_number;
 	uint8_t bus_number;
 	uint8_t device_address;
 	uint8_t device_address;
@@ -215,6 +217,13 @@ struct cg_usb_info {
 	double total_read_delay;
 	double total_read_delay;
 	uint64_t write_delay_count;
 	uint64_t write_delay_count;
 	double total_write_delay;
 	double total_write_delay;
+
+	/*
+	 * We add 4: 1 for null, 2 for FTDI status and 1 to round to 4 bytes
+	 * If a single device ever has multiple end points then it will need
+	 * multiple of these
+	 */
+	unsigned char bulkbuf[USB_MAX_READ+4];
 };
 };
 
 
 enum usb_cmds {
 enum usb_cmds {