public inbox for linux-mmc@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2.6.31-rc5 1/3] mmc: Unify and generalize UNSTUFF_BITS macro
@ 2009-11-06  2:49 Don Mullis
  2009-11-06  3:01 ` [PATCH 2.6.31-rc5 2/3] mmc: Clean up mmc_decode_scr() implementation Don Mullis
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Don Mullis @ 2009-11-06  2:49 UTC (permalink / raw)
  To: linux-mmc

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.
   */





^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-11-06  3:17 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-06  2:49 [PATCH 2.6.31-rc5 1/3] mmc: Unify and generalize UNSTUFF_BITS macro Don Mullis
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox