2009-01-14 16:11:54

by Adrian Hunter

[permalink] [raw]
Subject: [PATCH] MMC: Add Extended CSD as a device attribute


Signed-off-by: Adrian Hunter <[email protected]>
---
drivers/mmc/core/mmc.c | 29 +++++++++++++++++++++++++++++
1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 3f5b089..29291de 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -259,6 +259,34 @@ MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name);
MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid);
MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial);

+static ssize_t mmc_ext_csd_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+ struct mmc_card *card = container_of(dev, struct mmc_card, dev);
+ ssize_t n = 0;
+ u8 *ext_csd;
+ int err, i;
+
+ ext_csd = kmalloc(512, GFP_KERNEL);
+ if (!ext_csd)
+ return 0;
+
+ mmc_claim_host(card->host);
+ err = mmc_send_ext_csd(card, ext_csd);
+ mmc_release_host(card->host);
+
+ if (!err) {
+ for (i = 511; i >= 0; i--)
+ n += sprintf(buf + n, "%02x", (unsigned)ext_csd[i]);
+ n += sprintf(buf + n, "\n");
+ }
+
+ kfree(ext_csd);
+
+ return n;
+}
+
+static DEVICE_ATTR(ext_csd, S_IRUGO, mmc_ext_csd_show, NULL);
+
static struct attribute *mmc_std_attrs[] = {
&dev_attr_cid.attr,
&dev_attr_csd.attr,
@@ -269,6 +297,7 @@ static struct attribute *mmc_std_attrs[] = {
&dev_attr_name.attr,
&dev_attr_oemid.attr,
&dev_attr_serial.attr,
+ &dev_attr_ext_csd.attr,
NULL,
};

--
1.5.4.3


2009-01-16 00:05:55

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] MMC: Add Extended CSD as a device attribute

On Wed, 14 Jan 2009 18:23:35 +0200
Adrian Hunter <[email protected]> wrote:
>
> Subject: [PATCH] MMC: Add Extended CSD as a device attribute

Why? There must be some *reason* for making this change. Presumably
that reason is obvious to yourself and Pierre, but what about the rest
of us?

>
> Signed-off-by: Adrian Hunter <[email protected]>

It would take only 30 seconds to write a changelog for this patch :(

> drivers/mmc/core/mmc.c | 29 +++++++++++++++++++++++++++++
> 1 files changed, 29 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
> index 3f5b089..29291de 100644
> --- a/drivers/mmc/core/mmc.c
> +++ b/drivers/mmc/core/mmc.c
> @@ -259,6 +259,34 @@ MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name);
> MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid);
> MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial);
>
> +static ssize_t mmc_ext_csd_show(struct device *dev, struct device_attribute *attr, char *buf)
> +{
> + struct mmc_card *card = container_of(dev, struct mmc_card, dev);
> + ssize_t n = 0;
> + u8 *ext_csd;
> + int err, i;
> +
> + ext_csd = kmalloc(512, GFP_KERNEL);
> + if (!ext_csd)
> + return 0;
> +
> + mmc_claim_host(card->host);
> + err = mmc_send_ext_csd(card, ext_csd);
> + mmc_release_host(card->host);
> +
> + if (!err) {
> + for (i = 511; i >= 0; i--)
> + n += sprintf(buf + n, "%02x", (unsigned)ext_csd[i]);

The cast isn't actually needed.

> + n += sprintf(buf + n, "\n");
> + }
> +
> + kfree(ext_csd);
> +
> + return n;
> +}
> +
> +static DEVICE_ATTR(ext_csd, S_IRUGO, mmc_ext_csd_show, NULL);
> +
> static struct attribute *mmc_std_attrs[] = {
> &dev_attr_cid.attr,
> &dev_attr_csd.attr,
> @@ -269,6 +297,7 @@ static struct attribute *mmc_std_attrs[] = {
> &dev_attr_name.attr,
> &dev_attr_oemid.attr,
> &dev_attr_serial.attr,
> + &dev_attr_ext_csd.attr,
> NULL,
> };

2009-01-16 10:30:10

by Adrian Hunter

[permalink] [raw]
Subject: Re: [PATCH] MMC: Add Extended CSD as a device attribute

From: Adrian Hunter <[email protected]>
Date: Wed, 14 Jan 2009 17:45:53 +0200
Subject: [PATCH] MMC: Add Extended CSD as a device attribute

Extended CSD is a MMC card register. The Card Identification
(CID) register and the Card-Specific Data (CSD) register are
already device attributes. As increasingly interesting
fields are being added to Extended CSD, it seems reasonable to
add it too. Note that SD cards do not have an Extended CSD
register, so it is MMC only.

Signed-off-by: Adrian Hunter <[email protected]>
---
drivers/mmc/core/mmc.c | 29 +++++++++++++++++++++++++++++
1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index 3f5b089..4eadba6 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -259,6 +259,34 @@ MMC_DEV_ATTR(name, "%s\n", card->cid.prod_name);
MMC_DEV_ATTR(oemid, "0x%04x\n", card->cid.oemid);
MMC_DEV_ATTR(serial, "0x%08x\n", card->cid.serial);

+static ssize_t mmc_ext_csd_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+ struct mmc_card *card = container_of(dev, struct mmc_card, dev);
+ ssize_t n = 0;
+ u8 *ext_csd;
+ int err, i;
+
+ ext_csd = kmalloc(512, GFP_KERNEL);
+ if (!ext_csd)
+ return 0;
+
+ mmc_claim_host(card->host);
+ err = mmc_send_ext_csd(card, ext_csd);
+ mmc_release_host(card->host);
+
+ if (!err) {
+ for (i = 511; i >= 0; i--)
+ n += sprintf(buf + n, "%02x", ext_csd[i]);
+ n += sprintf(buf + n, "\n");
+ }
+
+ kfree(ext_csd);
+
+ return n;
+}
+
+static DEVICE_ATTR(ext_csd, S_IRUGO, mmc_ext_csd_show, NULL);
+
static struct attribute *mmc_std_attrs[] = {
&dev_attr_cid.attr,
&dev_attr_csd.attr,
@@ -269,6 +297,7 @@ static struct attribute *mmc_std_attrs[] = {
&dev_attr_name.attr,
&dev_attr_oemid.attr,
&dev_attr_serial.attr,
+ &dev_attr_ext_csd.attr,
NULL,
};

--
1.5.4.3

2009-01-25 00:00:40

by Pierre Ossman

[permalink] [raw]
Subject: Re: [PATCH] MMC: Add Extended CSD as a device attribute

On Fri, 16 Jan 2009 12:41:50 +0200
Adrian Hunter <[email protected]> wrote:

> From: Adrian Hunter <[email protected]>
> Date: Wed, 14 Jan 2009 17:45:53 +0200
> Subject: [PATCH] MMC: Add Extended CSD as a device attribute
>
> Extended CSD is a MMC card register. The Card Identification
> (CID) register and the Card-Specific Data (CSD) register are
> already device attributes. As increasingly interesting
> fields are being added to Extended CSD, it seems reasonable to
> add it too. Note that SD cards do not have an Extended CSD
> register, so it is MMC only.
>
> Signed-off-by: Adrian Hunter <[email protected]>
> ---

Well, this might be interesting for debugging, but I don't see anything
of general interest for user space in there. What's your use case?

Rgds
--
-- Pierre Ossman

Linux kernel, MMC maintainer http://www.kernel.org
rdesktop, core developer http://www.rdesktop.org

WARNING: This correspondence is being monitored by the
Swedish government. Make sure your server uses encryption
for SMTP traffic and consider using PGP for end-to-end
encryption.

2009-01-26 09:04:45

by Adrian Hunter

[permalink] [raw]
Subject: Re: [PATCH] MMC: Add Extended CSD as a device attribute

Pierre Ossman wrote:
> On Fri, 16 Jan 2009 12:41:50 +0200
> Adrian Hunter <[email protected]> wrote:
>
>> From: Adrian Hunter <[email protected]>
>> Date: Wed, 14 Jan 2009 17:45:53 +0200
>> Subject: [PATCH] MMC: Add Extended CSD as a device attribute
>>
>> Extended CSD is a MMC card register. The Card Identification
>> (CID) register and the Card-Specific Data (CSD) register are
>> already device attributes. As increasingly interesting
>> fields are being added to Extended CSD, it seems reasonable to
>> add it too. Note that SD cards do not have an Extended CSD
>> register, so it is MMC only.
>>
>> Signed-off-by: Adrian Hunter <[email protected]>
>> ---
>
> Well, this might be interesting for debugging, but I don't see anything
> of general interest for user space in there. What's your use case?

Yes it is mainly just debugging. It was done as a device attribute for
consistency with the other card registers CID and CSD.

Would you prefer #ifdef CONFIG_MMC_DEBUG or debugfs?