summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2014-05-05 10:40:15 -0600
committerLukasz Majewski <l.majewski@samsung.com>2014-05-08 10:38:29 +0200
commitabfe8afe88d6d8219602659f44981411e1daeb1d (patch)
tree4d7a2b9854e83f171026dda4b3f041f08acd092a /common
parent36ff05c4f968bf71713644413d64850e48b34145 (diff)
downloadu-boot-imx-abfe8afe88d6d8219602659f44981411e1daeb1d.zip
u-boot-imx-abfe8afe88d6d8219602659f44981411e1daeb1d.tar.gz
u-boot-imx-abfe8afe88d6d8219602659f44981411e1daeb1d.tar.bz2
ums: move IO support code to common location
There's nothing Samsung-/board-specfic about the implementation of ums_init(). Move the code into cmd_usb_mass_storage.c, so that it can be shared by any user of that command. Cc: Lukasz Majewski <l.majewski@samsung.com> Signed-off-by: Stephen Warren <swarren@nvidia.com> Acked-by: Przemyslaw Marczak <p.marczak@samsung.com>
Diffstat (limited to 'common')
-rw-r--r--common/cmd_usb_mass_storage.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/common/cmd_usb_mass_storage.c b/common/cmd_usb_mass_storage.c
index 31b7eb0..9888ed4 100644
--- a/common/cmd_usb_mass_storage.c
+++ b/common/cmd_usb_mass_storage.c
@@ -9,9 +9,55 @@
#include <common.h>
#include <command.h>
#include <g_dnl.h>
+#include <mmc.h>
+#include <part.h>
#include <usb.h>
#include <usb_mass_storage.h>
+static int ums_read_sector(struct ums *ums_dev,
+ ulong start, lbaint_t blkcnt, void *buf)
+{
+ block_dev_desc_t *block_dev = ums_dev->block_dev;
+ lbaint_t blkstart = start + ums_dev->start_sector;
+ int dev_num = block_dev->dev;
+
+ return block_dev->block_read(dev_num, blkstart, blkcnt, buf);
+}
+
+static int ums_write_sector(struct ums *ums_dev,
+ ulong start, lbaint_t blkcnt, const void *buf)
+{
+ block_dev_desc_t *block_dev = ums_dev->block_dev;
+ lbaint_t blkstart = start + ums_dev->start_sector;
+ int dev_num = block_dev->dev;
+
+ return block_dev->block_write(dev_num, blkstart, blkcnt, buf);
+}
+
+static struct ums ums_dev = {
+ .read_sector = ums_read_sector,
+ .write_sector = ums_write_sector,
+ .name = "UMS disk",
+};
+
+struct ums *ums_init(unsigned int dev_num)
+{
+ struct mmc *mmc = NULL;
+
+ mmc = find_mmc_device(dev_num);
+ if (!mmc || mmc_init(mmc))
+ return NULL;
+
+ ums_dev.block_dev = &mmc->block_dev;
+ ums_dev.start_sector = 0;
+ ums_dev.num_sectors = mmc->capacity / SECTOR_SIZE;
+
+ printf("UMS: disk start sector: %#x, count: %#x\n",
+ ums_dev.start_sector, ums_dev.num_sectors);
+
+ return &ums_dev;
+}
+
int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
int argc, char * const argv[])
{