Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 174922
b: refs/heads/master
c: 606206c
h: refs/heads/master
v: v3
  • Loading branch information
Michal Nazarewicz authored and Greg Kroah-Hartman committed Dec 11, 2009
1 parent 3cb1e99 commit 934dbcb
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 21 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a41ae4180e5403a68469420806c318e1a0c32248
refs/heads/master: 606206c271722d613b99c737ce150f58f4485f41
31 changes: 11 additions & 20 deletions trunk/drivers/usb/gadget/f_mass_storage.c
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,7 @@ static const char fsg_string_interface[] = "Mass Storage";


#define FSG_NO_INTR_EP 1
#define FSG_BUFFHD_STATIC_BUFFER 1

#include "storage_common.c"

Expand Down Expand Up @@ -1894,9 +1895,8 @@ static int send_status(struct fsg_dev *fsg)
SK(sd), ASC(sd), ASCQ(sd), sdinfo);
}


/* Store and send the Bulk-only CSW */
csw = bh->buf;
csw = (void*)bh->buf;

csw->Signature = cpu_to_le32(USB_BULK_CS_SIG);
csw->Tag = fsg->tag;
Expand Down Expand Up @@ -2808,10 +2808,6 @@ static void /* __init_or_exit */ fsg_unbind(struct usb_gadget *gadget)
complete(&fsg->thread_notifier);
}

/* Free the data buffers */
for (i = 0; i < FSG_NUM_BUFFERS; ++i)
kfree(fsg->common->buffhds[i].buf);

/* Free the request and buffer for endpoint 0 */
if (req) {
kfree(req->buf);
Expand Down Expand Up @@ -2978,20 +2974,6 @@ static int __init fsg_bind(struct usb_gadget *gadget)
goto out;
req->complete = ep0_complete;

/* Allocate the data buffers */
for (i = 0; i < FSG_NUM_BUFFERS; ++i) {
struct fsg_buffhd *bh = &fsg->common->buffhds[i];

/* Allocate for the bulk-in endpoint. We assume that
* the buffer will also work with the bulk-out (and
* interrupt-in) endpoint. */
bh->buf = kmalloc(FSG_BUFLEN, GFP_KERNEL);
if (!bh->buf)
goto out;
bh->next = bh + 1;
}
fsg->common->buffhds[FSG_NUM_BUFFERS - 1].next = &fsg->common->buffhds[0];

/* This should reflect the actual gadget power source */
usb_gadget_set_selfpowered(gadget);

Expand Down Expand Up @@ -3087,6 +3069,8 @@ static struct usb_gadget_driver fsg_driver = {
static int __init fsg_alloc(void)
{
struct fsg_dev *fsg;
struct fsg_buffhd *bh;
unsigned i;

fsg = kzalloc(sizeof *fsg, GFP_KERNEL);
if (!fsg)
Expand All @@ -3098,6 +3082,13 @@ static int __init fsg_alloc(void)
return -ENOMEM;
}

bh = fsg->common->buffhds;
i = FSG_NUM_BUFFERS - 1;
do {
bh->next = bh + 1;
} while (++bh, --i);
bh->next = fsg->common->buffhds;

spin_lock_init(&fsg->lock);
init_rwsem(&fsg->common->filesem);
init_completion(&fsg->thread_notifier);
Expand Down
10 changes: 10 additions & 0 deletions trunk/drivers/usb/gadget/storage_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@
* When FSG_NO_OTG is defined fsg_otg_desc won't be defined.
*/

/*
* When FSG_BUFFHD_STATIC_BUFFER is defined when this file is included
* the fsg_buffhd structure's buf field will be an array of FSG_BUFLEN
* characters rather then a pointer to void.
*/


#include <asm/unaligned.h>

Expand Down Expand Up @@ -290,7 +296,11 @@ enum fsg_buffer_state {
};

struct fsg_buffhd {
#ifdef FSG_BUFFHD_STATIC_BUFFER
char buf[FSG_BUFLEN];
#else
void *buf;
#endif
enum fsg_buffer_state state;
struct fsg_buffhd *next;

Expand Down

0 comments on commit 934dbcb

Please sign in to comment.