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