summaryrefslogtreecommitdiff
path: root/firmware/usbstack/usb_core.c
diff options
context:
space:
mode:
authorFrank Gevaerts <frank@gevaerts.be>2009-04-18 20:40:50 +0000
committerFrank Gevaerts <frank@gevaerts.be>2009-04-18 20:40:50 +0000
commit3314f389baf54e74e3c52c069f8e829a701b2b94 (patch)
tree7407217cc1f7456999c653f610c44a9fab1bb6e1 /firmware/usbstack/usb_core.c
parent2c0da9d15205b425276d769b4d5f1275bd6ea954 (diff)
downloadrockbox-3314f389baf54e74e3c52c069f8e829a701b2b94.tar.gz
rockbox-3314f389baf54e74e3c52c069f8e829a701b2b94.zip
Allow class drivers to reuse the core data buffer for control transfers. This doesn't make much difference right now, but it should keep HID memory usage lower (once HID is ready) (FS#10146 by Tomer Shalev)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20735 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/usbstack/usb_core.c')
-rw-r--r--firmware/usbstack/usb_core.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/firmware/usbstack/usb_core.c b/firmware/usbstack/usb_core.c
index 737ac1ac0c..3f67407c72 100644
--- a/firmware/usbstack/usb_core.c
+++ b/firmware/usbstack/usb_core.c
@@ -168,7 +168,7 @@ static enum { DEFAULT, ADDRESS, CONFIGURED } usb_state;
168static int usb_core_num_interfaces; 168static int usb_core_num_interfaces;
169 169
170typedef void (*completion_handler_t)(int ep,int dir, int status, int length); 170typedef void (*completion_handler_t)(int ep,int dir, int status, int length);
171typedef bool (*control_handler_t)(struct usb_ctrlrequest* req); 171typedef bool (*control_handler_t)(struct usb_ctrlrequest* req, unsigned char *dest);
172 172
173static struct 173static struct
174{ 174{
@@ -695,7 +695,7 @@ static void usb_core_control_request_handler(struct usb_ctrlrequest* req)
695 drivers[i].first_interface <= (req->wIndex) && 695 drivers[i].first_interface <= (req->wIndex) &&
696 drivers[i].last_interface > (req->wIndex)) 696 drivers[i].last_interface > (req->wIndex))
697 { 697 {
698 handled = drivers[i].control_request(req); 698 handled = drivers[i].control_request(req, response_data);
699 } 699 }
700 } 700 }
701 if(!handled) { 701 if(!handled) {
@@ -735,8 +735,10 @@ static void usb_core_control_request_handler(struct usb_ctrlrequest* req)
735 break; 735 break;
736 default: { 736 default: {
737 bool handled=false; 737 bool handled=false;
738 if(ep_data[req->wIndex & 0xf].control_handler[0] != NULL) 738 if(ep_data[req->wIndex & 0xf].control_handler[0] != NULL) {
739 handled = ep_data[req->wIndex & 0xf].control_handler[0](req); 739 handled = ep_data[req->wIndex & 0xf].control_handler[0](req,
740 response_data);
741 }
740 if(!handled) { 742 if(!handled) {
741 /* nope. flag error */ 743 /* nope. flag error */
742 logf("usb bad req %d", req->bRequest); 744 logf("usb bad req %d", req->bRequest);