[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200515014143.12984-3-digetx@gmail.com>
Date: Fri, 15 May 2020 04:41:39 +0300
From: Dmitry Osipenko <digetx@...il.com>
To: Jens Axboe <axboe@...nel.dk>,
Thierry Reding <thierry.reding@...il.com>,
Jonathan Hunter <jonathanh@...dia.com>,
Michał Mirosław <mirq-linux@...e.qmqm.pl>,
David Heidelberg <david@...t.cz>,
Peter Geis <pgwipeout@...il.com>,
Stephen Warren <swarren@...dotorg.org>,
Nicolas Chauvet <kwizart@...il.com>,
Ulf Hansson <ulf.hansson@...aro.org>,
Adrian Hunter <adrian.hunter@...el.com>,
Billy Laws <blaws05@...il.com>,
Nils Östlund <nils@...tan.com>,
Christoph Hellwig <hch@...radead.org>,
Ard Biesheuvel <ard.biesheuvel@...aro.org>,
Davidlohr Bueso <dave@...olabs.net>
Cc: linux-tegra@...r.kernel.org, linux-block@...r.kernel.org,
Andrey Danin <danindrey@...l.ru>,
Gilles Grandou <gilles@...ndou.net>,
Ryan Grachek <ryan@...ted.us>, linux-mmc@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-efi <linux-efi@...r.kernel.org>
Subject: [PATCH v4 2/6] mmc: block: Add mmc_bdev_to_card() helper
NVIDIA Tegra Partition Table takes into account MMC card's BOOT_SIZE_MULT
parameter, and thus, the partition parser needs to retrieve that EXT_CSD
value from the block device. There are also some other parts of struct
mmc_card that are needed for the partition parser in order to calculate
the eMMC offset and verify different things. This patch introduces new
helper which takes block device for the input argument and returns the
corresponding MMC card.
Signed-off-by: Dmitry Osipenko <digetx@...il.com>
---
drivers/mmc/core/block.c | 15 +++++++++++++++
include/linux/mmc/blkdev.h | 13 +++++++++++++
2 files changed, 28 insertions(+)
create mode 100644 include/linux/mmc/blkdev.h
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
index c5367e2c8487..99298e888381 100644
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
@@ -40,6 +40,7 @@
#include <linux/debugfs.h>
#include <linux/mmc/ioctl.h>
+#include <linux/mmc/blkdev.h>
#include <linux/mmc/card.h>
#include <linux/mmc/host.h>
#include <linux/mmc/mmc.h>
@@ -305,6 +306,20 @@ static ssize_t force_ro_store(struct device *dev, struct device_attribute *attr,
return ret;
}
+struct mmc_card *mmc_bdev_to_card(struct block_device *bdev)
+{
+ struct mmc_blk_data *md;
+
+ if (bdev->bd_disk->major != MMC_BLOCK_MAJOR)
+ return NULL;
+
+ md = mmc_blk_get(bdev->bd_disk);
+ if (!md)
+ return NULL;
+
+ return md->queue.card;
+}
+
static int mmc_blk_open(struct block_device *bdev, fmode_t mode)
{
struct mmc_blk_data *md = mmc_blk_get(bdev->bd_disk);
diff --git a/include/linux/mmc/blkdev.h b/include/linux/mmc/blkdev.h
new file mode 100644
index 000000000000..67608c58de70
--- /dev/null
+++ b/include/linux/mmc/blkdev.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * linux/include/linux/mmc/blkdev.h
+ */
+#ifndef LINUX_MMC_BLOCK_DEVICE_H
+#define LINUX_MMC_BLOCK_DEVICE_H
+
+struct block_device;
+struct mmc_card;
+
+struct mmc_card *mmc_bdev_to_card(struct block_device *bdev);
+
+#endif /* LINUX_MMC_BLOCK_DEVICE_H */
--
2.26.0
Powered by blists - more mailing lists