示例#1
0
/*
 * Function: mmc get capacity
 * Arg     : None
 * Return  : Returns the density of the emmc card
 * Flow    : Get the density from card
 */
uint64_t mmc_get_device_capacity()
{
	struct mmc_card *card;

	card = get_mmc_card();

	return card->capacity;
}
示例#2
0
/*
 * Function: mmc get psn
 * Arg     : None
 * Return  : Returns the product serial number
 * Flow    : Get the PSN from card
 */
uint32_t mmc_get_psn(void)
{
	struct mmc_card *card;

	card = get_mmc_card();

	return card->cid.psn;
}
static ssize_t
mmc_protect_show(struct device *dev, struct device_attribute *attr, char *buffer)
{
  struct mmc_card *card;
  card = get_mmc_card();
  if (!card) {
    return 0;
  }
  return print_write_protect_status(card, buffer);
}
static ssize_t
mmc_protect_clear(struct device *dev, struct device_attribute *attr,
                  const char *buf, size_t count)
{
  char *device_path;
  struct block_device *target = NULL;
  u32 start;
  u32 size;
  bool device_holding = false;
  struct mmc_card *card;

  card = get_mmc_card();
  if (!card) {
    return count;
  }

  device_path = kmalloc(PATH_MAX + count, GFP_KERNEL);
  if (!device_path) {
    return -ENOMEM;
  }

  snprintf(device_path, PATH_MAX, "/dev/block/%s", buf);
  target = lookup_bdev(device_path);
  if (!target) {
    kfree(device_path);
    return count;
  }

  if (!target->bd_part) {
    if (blkdev_get(target, FMODE_READ | FMODE_NDELAY, 0)) {
      kfree(device_path);
      return count;
    }
    device_holding = true;
  }

  start = (u32)target->bd_part->start_sect;
  size = (u32)target->bd_part->nr_sects;

  clear_write_protect(card, start, size);
  if (device_holding) {
    blkdev_put(target, FMODE_READ | FMODE_NDELAY);
  }
  kfree(device_path);

  return count;
}
示例#5
0
/*
 * Function: mmc get blocksize
 * Arg     : None
 * Return  : Returns the block size of the storage
 * Flow    : Get the block size form the card
 */
uint32_t mmc_get_device_blocksize()
{
	if (target_mmc_device())
	{
		struct mmc_card *card;

		card = get_mmc_card();

		return card->block_size;
	}
	else
	{
		void *dev;

		dev = target_mmc_device();

		return ufs_get_page_size((struct ufs_dev *)dev);
	}
}
示例#6
0
/*
 * Function: mmc get capacity
 * Arg     : None
 * Return  : Returns the density of the emmc card
 * Flow    : Get the density from card
 */
uint64_t mmc_get_device_capacity()
{
	if (target_mmc_device())
	{
		struct mmc_card *card;

		card = get_mmc_card();

		return card->capacity;
	}
	else
	{
		void *dev;

		dev = target_mmc_device();

		return ufs_get_dev_capacity((struct ufs_dev *)dev);
	}
}
示例#7
0
/*
 * Function: mmc get psn
 * Arg     : None
 * Return  : Returns the product serial number
 * Flow    : Get the PSN from card
 */
uint32_t mmc_get_psn(void)
{
	if (target_mmc_device())
	{
		struct mmc_card *card;

		card = get_mmc_card();

		return card->cid.psn;
	}
	else
	{
		void *dev;

		dev = target_mmc_device();

		return ufs_get_serial_num((struct ufs_dev *)dev);
	}
}