summaryrefslogtreecommitdiff
path: root/drivers/usb/gadget
diff options
context:
space:
mode:
authorPrzemyslaw Marczak <p.marczak@samsung.com>2013-10-23 14:30:42 +0200
committerMarek Vasut <marex@denx.de>2013-11-08 20:46:19 +0100
commit93c813b3ac4b23df891992f93252c59231dec388 (patch)
tree09845f95edb591abcf64f35ffcb57019e6cf25e1 /drivers/usb/gadget
parent2cee0408e5c6f5dbdfa89fb40168ba2ead3f61a6 (diff)
downloadu-boot-imx-93c813b3ac4b23df891992f93252c59231dec388.zip
u-boot-imx-93c813b3ac4b23df891992f93252c59231dec388.tar.gz
u-boot-imx-93c813b3ac4b23df891992f93252c59231dec388.tar.bz2
usb: ums: code refactoring to improve reusability on other boards.
This patch introduces some cleanups to ums code. Changes: ums common: - introduce UMS_START_SECTOR and UMS_NUM_SECTORS as defined in usb_mass_storage.h both default values as 0 if board config doesn't define them common cleanup changes: - change name of struct "ums_board_info" to "ums" - "ums_device" fields are moved to struct ums and "dev_num" is removed - change function name: board_ums_init to ums_init - remove "extern" prefixes from usb_mass_storage.h cmd_usb_mass_storage: - change error() to printf() if need to print info message - change return values to command_ret_t type at ums command code - add command usage string Changes v2: ums common: - always returns number of read/write sectors - coding style clean-up ums gadget: - calculate amount of read/write from device returned value. Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com> Cc: Marek Vasut <marek.vasut@gmail.com>
Diffstat (limited to 'drivers/usb/gadget')
-rw-r--r--drivers/usb/gadget/f_mass_storage.c43
-rw-r--r--drivers/usb/gadget/storage_common.c3
2 files changed, 23 insertions, 23 deletions
diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
index 6ecdea3..be6b418 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -441,7 +441,7 @@ static void set_bulk_out_req_length(struct fsg_common *common,
/*-------------------------------------------------------------------------*/
-struct ums_board_info *ums_info;
+struct ums *ums;
struct fsg_common *the_fsg_common;
static int fsg_set_halt(struct fsg_dev *fsg, struct usb_ep *ep)
@@ -757,14 +757,14 @@ static int do_read(struct fsg_common *common)
}
/* Perform the read */
- nread = 0;
- rc = ums_info->read_sector(&(ums_info->ums_dev),
- file_offset / SECTOR_SIZE,
- amount / SECTOR_SIZE,
- (char __user *)bh->buf);
- if (rc)
+ rc = ums->read_sector(ums,
+ file_offset / SECTOR_SIZE,
+ amount / SECTOR_SIZE,
+ (char __user *)bh->buf);
+ if (!rc)
return -EIO;
- nread = amount;
+
+ nread = rc * SECTOR_SIZE;
VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
(unsigned long long) file_offset,
@@ -931,13 +931,13 @@ static int do_write(struct fsg_common *common)
amount = bh->outreq->actual;
/* Perform the write */
- rc = ums_info->write_sector(&(ums_info->ums_dev),
+ rc = ums->write_sector(ums,
file_offset / SECTOR_SIZE,
amount / SECTOR_SIZE,
(char __user *)bh->buf);
- if (rc)
+ if (!rc)
return -EIO;
- nwritten = amount;
+ nwritten = rc * SECTOR_SIZE;
VLDBG(curlun, "file write %u @ %llu -> %d\n", amount,
(unsigned long long) file_offset,
@@ -959,6 +959,8 @@ static int do_write(struct fsg_common *common)
/* If an error occurred, report it and its position */
if (nwritten < amount) {
+ printf("nwritten:%d amount:%d\n", nwritten,
+ amount);
curlun->sense_data = SS_WRITE_ERROR;
curlun->info_valid = 1;
break;
@@ -1045,14 +1047,13 @@ static int do_verify(struct fsg_common *common)
}
/* Perform the read */
- nread = 0;
- rc = ums_info->read_sector(&(ums_info->ums_dev),
- file_offset / SECTOR_SIZE,
- amount / SECTOR_SIZE,
- (char __user *)bh->buf);
- if (rc)
+ rc = ums->read_sector(ums,
+ file_offset / SECTOR_SIZE,
+ amount / SECTOR_SIZE,
+ (char __user *)bh->buf);
+ if (!rc)
return -EIO;
- nread = amount;
+ nread = rc * SECTOR_SIZE;
VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
(unsigned long long) file_offset,
@@ -1100,7 +1101,7 @@ static int do_inquiry(struct fsg_common *common, struct fsg_buffhd *bh)
buf[4] = 31; /* Additional length */
/* No special options */
sprintf((char *) (buf + 8), "%-8s%-16s%04x", (char*) vendor_id ,
- ums_info->name, (u16) 0xffff);
+ ums->name, (u16) 0xffff);
return 36;
}
@@ -2753,9 +2754,9 @@ int fsg_add(struct usb_configuration *c)
return fsg_bind_config(c->cdev, c, fsg_common);
}
-int fsg_init(struct ums_board_info *ums)
+int fsg_init(struct ums *ums_dev)
{
- ums_info = ums;
+ ums = ums_dev;
return 0;
}
diff --git a/drivers/usb/gadget/storage_common.c b/drivers/usb/gadget/storage_common.c
index 866e7c7..c2c5424 100644
--- a/drivers/usb/gadget/storage_common.c
+++ b/drivers/usb/gadget/storage_common.c
@@ -275,7 +275,6 @@ struct rw_semaphore { int i; };
#define ETOOSMALL 525
#include <usb_mass_storage.h>
-extern struct ums_board_info *ums_info;
/*-------------------------------------------------------------------------*/
@@ -581,7 +580,7 @@ static int fsg_lun_open(struct fsg_lun *curlun, const char *filename)
/* R/W if we can, R/O if we must */
ro = curlun->initially_ro;
- ums_info->get_capacity(&(ums_info->ums_dev), &size);
+ ums->get_capacity(ums, &size);
if (size < 0) {
printf("unable to find file size: %s\n", filename);
rc = (int) size;