summaryrefslogtreecommitdiff
path: root/firmware/target/arm/as3525/usb-drv-as3525v2.c
diff options
context:
space:
mode:
authorBertrik Sikken <bertrik@sikken.nl>2011-11-26 23:55:49 +0000
committerBertrik Sikken <bertrik@sikken.nl>2011-11-26 23:55:49 +0000
commitebde2ea3082040e4a8e43c7354942ee90e61eb2d (patch)
treeb592d662dfe2f68725d352977ccd2a14bdda7ae3 /firmware/target/arm/as3525/usb-drv-as3525v2.c
parentfc81af98ee6798814fbd896e4ff44f0cd4eb3d6f (diff)
downloadrockbox-ebde2ea3082040e4a8e43c7354942ee90e61eb2d.tar.gz
rockbox-ebde2ea3082040e4a8e43c7354942ee90e61eb2d.zip
Sansa AMSv2: potential USB fix from FS#11664 by funman:
* make sure that the buffer for struct usb_ctrlrequest can fit a full 64-byte packet * align struct usb_ctrlrequest to a cacheline (32-byte alignment) git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31063 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/as3525/usb-drv-as3525v2.c')
-rw-r--r--firmware/target/arm/as3525/usb-drv-as3525v2.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/firmware/target/arm/as3525/usb-drv-as3525v2.c b/firmware/target/arm/as3525/usb-drv-as3525v2.c
index 35b50d21cf..3d4f1579c5 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525v2.c
+++ b/firmware/target/arm/as3525/usb-drv-as3525v2.c
@@ -87,8 +87,23 @@ enum ep0state
87/* endpoints[ep_num][DIR_IN/DIR_OUT] */ 87/* endpoints[ep_num][DIR_IN/DIR_OUT] */
88static struct usb_endpoint endpoints[USB_NUM_ENDPOINTS][2]; 88static struct usb_endpoint endpoints[USB_NUM_ENDPOINTS][2];
89/* setup packet for EP0 */ 89/* setup packet for EP0 */
90static struct usb_ctrlrequest _ep0_setup_pkt __attribute__((aligned(32))); 90
91static struct usb_ctrlrequest *ep0_setup_pkt = AS3525_UNCACHED_ADDR(&_ep0_setup_pkt); 91/* USB control requests may be up to 64 bytes in size.
92 Even though we never use anything more than the 8 header bytes,
93 we are required to accept request packets of up to 64 bytes size.
94 Provide buffer space for these additional payload bytes so that
95 e.g. write descriptor requests (which are rejected by us, but the
96 payload is transferred anyway) do not cause memory corruption.
97 Fixes FS#12310. -- Michael Sparmann (theseven) */
98static struct
99{
100 union {
101 struct usb_ctrlrequest header; /* 8 bytes */
102 unsigned char payload[64];
103 };
104} _ep0_setup_pkt USB_DEVBSS_ATTR __attribute__((aligned(32)));
105
106static struct usb_ctrlrequest *ep0_setup_pkt = AS3525_UNCACHED_ADDR(&_ep0_setup_pkt.header);
92 107
93/* state of EP0 */ 108/* state of EP0 */
94static enum ep0state ep0_state; 109static enum ep0state ep0_state;