2 * Copyright (C) 2013 Samsung Electronics
3 * Lukasz Majewski <l.majewski@samsung.com>
5 * SPDX-License-Identifier: GPL-2.0+
9 #include <usb_mass_storage.h>
13 static int ums_read_sector(struct ums *ums_dev,
14 ulong start, lbaint_t blkcnt, void *buf)
16 block_dev_desc_t *block_dev = ums_dev->block_dev;
17 lbaint_t blkstart = start + ums_dev->start_sector;
18 int dev_num = block_dev->dev;
20 return block_dev->block_read(dev_num, blkstart, blkcnt, buf);
23 static int ums_write_sector(struct ums *ums_dev,
24 ulong start, lbaint_t blkcnt, const void *buf)
26 block_dev_desc_t *block_dev = ums_dev->block_dev;
27 lbaint_t blkstart = start + ums_dev->start_sector;
28 int dev_num = block_dev->dev;
30 return block_dev->block_write(dev_num, blkstart, blkcnt, buf);
33 static struct ums ums_dev = {
34 .read_sector = ums_read_sector,
35 .write_sector = ums_write_sector,
39 static struct ums *ums_disk_init(struct mmc *mmc)
41 ums_dev.block_dev = &mmc->block_dev;
42 ums_dev.start_sector = 0;
43 ums_dev.num_sectors = mmc->capacity / SECTOR_SIZE;
45 printf("UMS: disk start sector: %#x, count: %#x\n",
46 ums_dev.start_sector, ums_dev.num_sectors);
51 struct ums *ums_init(unsigned int dev_num)
53 struct mmc *mmc = find_mmc_device(dev_num);
55 if (!mmc || mmc_init(mmc))
57 return ums_disk_init(mmc);