diff options
author | Frank Gevaerts <frank@gevaerts.be> | 2009-04-18 20:40:50 +0000 |
---|---|---|
committer | Frank Gevaerts <frank@gevaerts.be> | 2009-04-18 20:40:50 +0000 |
commit | 3314f389baf54e74e3c52c069f8e829a701b2b94 (patch) | |
tree | 7407217cc1f7456999c653f610c44a9fab1bb6e1 /firmware/usbstack/usb_core.c | |
parent | 2c0da9d15205b425276d769b4d5f1275bd6ea954 (diff) | |
download | rockbox-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.c | 10 |
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; | |||
168 | static int usb_core_num_interfaces; | 168 | static int usb_core_num_interfaces; |
169 | 169 | ||
170 | typedef void (*completion_handler_t)(int ep,int dir, int status, int length); | 170 | typedef void (*completion_handler_t)(int ep,int dir, int status, int length); |
171 | typedef bool (*control_handler_t)(struct usb_ctrlrequest* req); | 171 | typedef bool (*control_handler_t)(struct usb_ctrlrequest* req, unsigned char *dest); |
172 | 172 | ||
173 | static struct | 173 | static 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); |