public inbox for linux-mmc@vger.kernel.org
 help / color / mirror / Atom feed
From: Don Mullis <don.mullis@gmail.com>
To: linux-mmc@vger.kernel.org
Subject: [PATCH 2.6.31-rc5 1/3] mmc: Unify and generalize UNSTUFF_BITS macro
Date: Thu, 05 Nov 2009 18:49:04 -0800	[thread overview]
Message-ID: <4AF38EA0.4080604@gmail.com> (raw)

Unify duplicated implementations of UNSTUFF_BITS() into a shared .h file.
Recode UNSTUFF_BITS() as an invocation of a new more general macro
UNSTUFF_BITS_ARRAY() that works on arrays of any multiple of 32 bits.

Signed-off-by: don.mullis@gmail.com
---
  drivers/mmc/core/core.h |   21 +++++++++++++++++++++
  drivers/mmc/core/mmc.c  |   14 --------------
  drivers/mmc/core/sd.c   |   14 --------------
  3 files changed, 21 insertions(+), 28 deletions(-)

Index: linux-2.6/drivers/mmc/core/sd.c
===================================================================
--- linux-2.6.orig/drivers/mmc/core/sd.c	2009-11-02 13:02:23.000000000 -0800
+++ linux-2.6/drivers/mmc/core/sd.c	2009-11-02 15:10:28.000000000 -0800
@@ -41,20 +41,6 @@ static const unsigned int tacc_mant[] =
  	35,	40,	45,	50,	55,	60,	70,	80,
  };

-#define UNSTUFF_BITS(resp,start,size)					\
-	({								\
-		const int __size = size;				\
-		const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1;	\
-		const int __off = 3 - ((start) / 32);			\
-		const int __shft = (start) & 31;			\
-		u32 __res;						\
-									\
-		__res = resp[__off] >> __shft;				\
-		if (__size + __shft > 32)				\
-			__res |= resp[__off-1] << ((32 - __shft) % 32);	\
-		__res & __mask;						\
-	})
-
  /*
   * Given the decoded CSD structure, decode the raw CID to our CID structure.
   */
Index: linux-2.6/drivers/mmc/core/core.h
===================================================================
--- linux-2.6.orig/drivers/mmc/core/core.h	2009-11-02 13:02:23.000000000 -0800
+++ linux-2.6/drivers/mmc/core/core.h	2009-11-02 15:12:01.000000000 -0800
@@ -13,6 +13,27 @@

  #include <linux/delay.h>

+#define UNSTUFF_BITS_ARRAY(u32_array, start, size)			\
+	({								\
+		const int __size = size;				\
+		const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1;	\
+		const int __off = (sizeof(u32_array)/4-1) - ((start) / 32); \
+		const int __shft = (start) & 31;			\
+		u32 __res;						\
+									\
+		__res = (u32_array)[__off] >> __shft;			\
+		if (__size + __shft > 32)				\
+			__res |= (u32_array)[__off-1]			\
+				<< ((32 - __shft) % 32); 		\
+		__res & __mask;						\
+	})
+
+/*
+ * Specific to 128-bit arrays, e.g. raw_cid[] and raw_csd[].
+ */
+#define UNSTUFF_BITS(resp, start, size)	\
+	UNSTUFF_BITS_ARRAY(*(u32(*)[4])resp, start, size)
+
  #define MMC_CMD_RETRIES        3

  struct mmc_bus_ops {
Index: linux-2.6/drivers/mmc/core/mmc.c
===================================================================
--- linux-2.6.orig/drivers/mmc/core/mmc.c	2009-11-02 13:02:23.000000000 -0800
+++ linux-2.6/drivers/mmc/core/mmc.c	2009-11-02 13:02:23.000000000 -0800
@@ -39,20 +39,6 @@ static const unsigned int tacc_mant[] =
  	35,	40,	45,	50,	55,	60,	70,	80,
  };

-#define UNSTUFF_BITS(resp,start,size)					\
-	({								\
-		const int __size = size;				\
-		const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1;	\
-		const int __off = 3 - ((start) / 32);			\
-		const int __shft = (start) & 31;			\
-		u32 __res;						\
-									\
-		__res = resp[__off] >> __shft;				\
-		if (__size + __shft > 32)				\
-			__res |= resp[__off-1] << ((32 - __shft) % 32);	\
-		__res & __mask;						\
-	})
-
  /*
   * Given the decoded CSD structure, decode the raw CID to our CID structure.
   */





             reply	other threads:[~2009-11-06  2:49 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-06  2:49 Don Mullis [this message]
2009-11-06  3:01 ` [PATCH 2.6.31-rc5 2/3] mmc: Clean up mmc_decode_scr() implementation Don Mullis
2009-11-06  3:03 ` [PATCH 2.6.31-rc5 3/3] mmc: Add SD_STATUS register dump to debugfs Don Mullis
2009-11-06  3:17 ` [PATCH 2.6.31-rc5 1/3] mmc: Unify and generalize UNSTUFF_BITS macro Don Mullis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4AF38EA0.4080604@gmail.com \
    --to=don.mullis@gmail.com \
    --cc=linux-mmc@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox