/* * 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; }
/* * 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; }
/* * 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); } }
/* * 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); } }
/* * 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); } }