Commit 93c813b3ac4b23df891992f93252c59231dec388

Authored by Przemyslaw Marczak
Committed by Marek Vasut
1 parent 2cee0408e5

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>

Showing 5 changed files with 73 additions and 84 deletions Side-by-side Diff

board/samsung/trats/trats.c
... ... @@ -774,64 +774,55 @@
774 774 }
775 775  
776 776 #ifdef CONFIG_USB_GADGET_MASS_STORAGE
777   -static int ums_read_sector(struct ums_device *ums_dev,
  777 +static int ums_read_sector(struct ums *ums_dev,
778 778 ulong start, lbaint_t blkcnt, void *buf)
779 779 {
780   - if (ums_dev->mmc->block_dev.block_read(ums_dev->dev_num,
781   - start + ums_dev->offset, blkcnt, buf) != blkcnt)
782   - return -1;
  780 + block_dev_desc_t *block_dev = &ums_dev->mmc->block_dev;
  781 + lbaint_t blkstart = start + ums_dev->offset;
  782 + int dev_num = block_dev->dev;
783 783  
784   - return 0;
  784 + return block_dev->block_read(dev_num, blkstart, blkcnt, buf);
785 785 }
786 786  
787   -static int ums_write_sector(struct ums_device *ums_dev,
  787 +static int ums_write_sector(struct ums *ums_dev,
788 788 ulong start, lbaint_t blkcnt, const void *buf)
789 789 {
790   - if (ums_dev->mmc->block_dev.block_write(ums_dev->dev_num,
791   - start + ums_dev->offset, blkcnt, buf) != blkcnt)
792   - return -1;
  790 + block_dev_desc_t *block_dev = &ums_dev->mmc->block_dev;
  791 + lbaint_t blkstart = start + ums_dev->offset;
  792 + int dev_num = block_dev->dev;
793 793  
794   - return 0;
  794 + return block_dev->block_write(dev_num, blkstart, blkcnt, buf);
795 795 }
796 796  
797   -static void ums_get_capacity(struct ums_device *ums_dev,
798   - long long int *capacity)
  797 +static void ums_get_capacity(struct ums *ums_dev, long long int *capacity)
799 798 {
800 799 long long int tmp_capacity;
801 800  
802   - tmp_capacity = (long long int) ((ums_dev->offset + ums_dev->part_size)
803   - * SECTOR_SIZE);
  801 + tmp_capacity = (long long int)((ums_dev->offset + ums_dev->part_size)
  802 + * SECTOR_SIZE);
804 803 *capacity = ums_dev->mmc->capacity - tmp_capacity;
805 804 }
806 805  
807   -static struct ums_board_info ums_board = {
  806 +static struct ums ums_dev = {
808 807 .read_sector = ums_read_sector,
809 808 .write_sector = ums_write_sector,
810 809 .get_capacity = ums_get_capacity,
811   - .name = "TRATS UMS disk",
812   - .ums_dev = {
813   - .mmc = NULL,
814   - .dev_num = 0,
815   - .offset = 0,
816   - .part_size = 0.
817   - },
  810 + .name = "UMS disk",
  811 + .offset = UMS_START_SECTOR,
  812 + .part_size = UMS_NUM_SECTORS,
818 813 };
819 814  
820   -struct ums_board_info *board_ums_init(unsigned int dev_num, unsigned int offset,
821   - unsigned int part_size)
  815 +struct ums *ums_init(unsigned int dev_num)
822 816 {
823   - struct mmc *mmc;
  817 + struct mmc *mmc = NULL;
824 818  
825 819 mmc = find_mmc_device(dev_num);
826 820 if (!mmc)
827 821 return NULL;
828 822  
829   - ums_board.ums_dev.mmc = mmc;
830   - ums_board.ums_dev.dev_num = dev_num;
831   - ums_board.ums_dev.offset = offset;
832   - ums_board.ums_dev.part_size = part_size;
  823 + ums_dev.mmc = mmc;
833 824  
834   - return &ums_board;
  825 + return &ums_dev;
835 826 }
836 827 #endif
common/cmd_usb_mass_storage.c
... ... @@ -22,28 +22,26 @@
22 22  
23 23 unsigned int dev_num = (unsigned int)(simple_strtoul(mmc_devstring,
24 24 NULL, 0));
25   - if (dev_num) {
26   - error("Set eMMC device to 0! - e.g. ums 0");
27   - goto fail;
28   - }
  25 + if (dev_num)
  26 + return CMD_RET_USAGE;
29 27  
30 28 unsigned int controller_index = (unsigned int)(simple_strtoul(
31 29 usb_controller, NULL, 0));
32 30 if (board_usb_init(controller_index, USB_INIT_DEVICE)) {
33 31 error("Couldn't init USB controller.");
34   - goto fail;
  32 + return CMD_RET_FAILURE;
35 33 }
36 34  
37   - struct ums_board_info *ums_info = board_ums_init(dev_num, 0, 0);
38   - if (!ums_info) {
39   - error("MMC: %d -> NOT available", dev_num);
40   - goto fail;
  35 + struct ums *ums = ums_init(dev_num);
  36 + if (!ums) {
  37 + printf("MMC: %u no such device\n", dev_num);
  38 + return CMD_RET_FAILURE;
41 39 }
42 40  
43   - int rc = fsg_init(ums_info);
  41 + int rc = fsg_init(ums);
44 42 if (rc) {
45 43 error("fsg_init failed");
46   - goto fail;
  44 + return CMD_RET_FAILURE;
47 45 }
48 46  
49 47 g_dnl_register("ums");
50 48  
... ... @@ -62,14 +60,11 @@
62 60 }
63 61 exit:
64 62 g_dnl_unregister();
65   - return 0;
66   -
67   -fail:
68   - return -1;
  63 + return CMD_RET_SUCCESS;
69 64 }
70 65  
71 66 U_BOOT_CMD(ums, CONFIG_SYS_MAXARGS, 1, do_usb_mass_storage,
72 67 "Use the UMS [User Mass Storage]",
73   - "<USB_controller> <mmc_dev>"
  68 + "ums <USB_controller> <mmc_dev> e.g. ums 0 0"
74 69 );
drivers/usb/gadget/f_mass_storage.c
... ... @@ -441,7 +441,7 @@
441 441  
442 442 /*-------------------------------------------------------------------------*/
443 443  
444   -struct ums_board_info *ums_info;
  444 +struct ums *ums;
445 445 struct fsg_common *the_fsg_common;
446 446  
447 447 static int fsg_set_halt(struct fsg_dev *fsg, struct usb_ep *ep)
448 448  
449 449  
... ... @@ -757,15 +757,15 @@
757 757 }
758 758  
759 759 /* Perform the read */
760   - nread = 0;
761   - rc = ums_info->read_sector(&(ums_info->ums_dev),
762   - file_offset / SECTOR_SIZE,
763   - amount / SECTOR_SIZE,
764   - (char __user *)bh->buf);
765   - if (rc)
  760 + rc = ums->read_sector(ums,
  761 + file_offset / SECTOR_SIZE,
  762 + amount / SECTOR_SIZE,
  763 + (char __user *)bh->buf);
  764 + if (!rc)
766 765 return -EIO;
767   - nread = amount;
768 766  
  767 + nread = rc * SECTOR_SIZE;
  768 +
769 769 VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
770 770 (unsigned long long) file_offset,
771 771 (int) nread);
772 772  
773 773  
... ... @@ -931,13 +931,13 @@
931 931 amount = bh->outreq->actual;
932 932  
933 933 /* Perform the write */
934   - rc = ums_info->write_sector(&(ums_info->ums_dev),
  934 + rc = ums->write_sector(ums,
935 935 file_offset / SECTOR_SIZE,
936 936 amount / SECTOR_SIZE,
937 937 (char __user *)bh->buf);
938   - if (rc)
  938 + if (!rc)
939 939 return -EIO;
940   - nwritten = amount;
  940 + nwritten = rc * SECTOR_SIZE;
941 941  
942 942 VLDBG(curlun, "file write %u @ %llu -> %d\n", amount,
943 943 (unsigned long long) file_offset,
... ... @@ -959,6 +959,8 @@
959 959  
960 960 /* If an error occurred, report it and its position */
961 961 if (nwritten < amount) {
  962 + printf("nwritten:%d amount:%d\n", nwritten,
  963 + amount);
962 964 curlun->sense_data = SS_WRITE_ERROR;
963 965 curlun->info_valid = 1;
964 966 break;
965 967  
... ... @@ -1045,14 +1047,13 @@
1045 1047 }
1046 1048  
1047 1049 /* Perform the read */
1048   - nread = 0;
1049   - rc = ums_info->read_sector(&(ums_info->ums_dev),
1050   - file_offset / SECTOR_SIZE,
1051   - amount / SECTOR_SIZE,
1052   - (char __user *)bh->buf);
1053   - if (rc)
  1050 + rc = ums->read_sector(ums,
  1051 + file_offset / SECTOR_SIZE,
  1052 + amount / SECTOR_SIZE,
  1053 + (char __user *)bh->buf);
  1054 + if (!rc)
1054 1055 return -EIO;
1055   - nread = amount;
  1056 + nread = rc * SECTOR_SIZE;
1056 1057  
1057 1058 VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
1058 1059 (unsigned long long) file_offset,
... ... @@ -1100,7 +1101,7 @@
1100 1101 buf[4] = 31; /* Additional length */
1101 1102 /* No special options */
1102 1103 sprintf((char *) (buf + 8), "%-8s%-16s%04x", (char*) vendor_id ,
1103   - ums_info->name, (u16) 0xffff);
  1104 + ums->name, (u16) 0xffff);
1104 1105  
1105 1106 return 36;
1106 1107 }
1107 1108  
... ... @@ -2753,9 +2754,9 @@
2753 2754 return fsg_bind_config(c->cdev, c, fsg_common);
2754 2755 }
2755 2756  
2756   -int fsg_init(struct ums_board_info *ums)
  2757 +int fsg_init(struct ums *ums_dev)
2757 2758 {
2758   - ums_info = ums;
  2759 + ums = ums_dev;
2759 2760  
2760 2761 return 0;
2761 2762 }
drivers/usb/gadget/storage_common.c
... ... @@ -275,7 +275,6 @@
275 275 #define ETOOSMALL 525
276 276  
277 277 #include <usb_mass_storage.h>
278   -extern struct ums_board_info *ums_info;
279 278  
280 279 /*-------------------------------------------------------------------------*/
281 280  
... ... @@ -581,7 +580,7 @@
581 580 /* R/W if we can, R/O if we must */
582 581 ro = curlun->initially_ro;
583 582  
584   - ums_info->get_capacity(&(ums_info->ums_dev), &size);
  583 + ums->get_capacity(ums, &size);
585 584 if (size < 0) {
586 585 printf("unable to find file size: %s\n", filename);
587 586 rc = (int) size;
include/usb_mass_storage.h
... ... @@ -9,32 +9,35 @@
9 9 #define __USB_MASS_STORAGE_H__
10 10  
11 11 #define SECTOR_SIZE 0x200
12   -
13 12 #include <mmc.h>
14 13 #include <linux/usb/composite.h>
15 14  
16   -struct ums_device {
17   - struct mmc *mmc;
18   - int dev_num;
19   - int offset;
20   - int part_size;
21   -};
  15 +#ifndef UMS_START_SECTOR
  16 +#define UMS_START_SECTOR 0
  17 +#endif
22 18  
23   -struct ums_board_info {
24   - int (*read_sector)(struct ums_device *ums_dev,
  19 +#ifndef UMS_NUM_SECTORS
  20 +#define UMS_NUM_SECTORS 0
  21 +#endif
  22 +
  23 +struct ums {
  24 + int (*read_sector)(struct ums *ums_dev,
25 25 ulong start, lbaint_t blkcnt, void *buf);
26   - int (*write_sector)(struct ums_device *ums_dev,
  26 + int (*write_sector)(struct ums *ums_dev,
27 27 ulong start, lbaint_t blkcnt, const void *buf);
28   - void (*get_capacity)(struct ums_device *ums_dev,
  28 + void (*get_capacity)(struct ums *ums_dev,
29 29 long long int *capacity);
30 30 const char *name;
31   - struct ums_device ums_dev;
  31 + struct mmc *mmc;
  32 + int offset;
  33 + int part_size;
32 34 };
33 35  
34   -int fsg_init(struct ums_board_info *);
  36 +extern struct ums *ums;
  37 +
  38 +int fsg_init(struct ums *);
35 39 void fsg_cleanup(void);
36   -struct ums_board_info *board_ums_init(unsigned int, unsigned int,
37   - unsigned int);
  40 +struct ums *ums_init(unsigned int);
38 41 int fsg_main_thread(void *);
39 42  
40 43 #ifdef CONFIG_USB_GADGET_MASS_STORAGE