From: "Rafał Miłecki" <zajec5@gmail.com>
To: linux-wireless@vger.kernel.org
Cc: "John W. Linville" <linville@tuxdriver.com>,
b43-dev@lists.infradead.org, "Rafał Miłecki" <zajec5@gmail.com>,
"Arend van Spriel" <arend@broadcom.com>
Subject: [RFC][WORTH IT?][PATCH] bcma: make use of crc8 lib
Date: Wed, 15 Jun 2011 13:53:34 +0200 [thread overview]
Message-ID: <1308138814-12235-1-git-send-email-zajec5@gmail.com> (raw)
Cc: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Rafa? Mi?ecki <zajec5@gmail.com>
---
We implement crc8 function in bcma, while there is nice lib for this.
The problem is we need to calculate crc8 for SPROM which consists of
u16 entries. So this requires us to do proper convertion to avoid
endianess problems.
Do you think it is worth it? Should we do additional convertion just to
allow using standard library?
Or maybe we should just limit our changes to using crc8_populate_lsb
for generating look up table?
---
drivers/bcma/Kconfig | 1 +
drivers/bcma/sprom.c | 62 ++++++++++---------------------------
drivers/net/wireless/b43/Kconfig | 2 +-
3 files changed, 19 insertions(+), 46 deletions(-)
diff --git a/drivers/bcma/Kconfig b/drivers/bcma/Kconfig
index 83e9adf..4e28fed 100644
--- a/drivers/bcma/Kconfig
+++ b/drivers/bcma/Kconfig
@@ -9,6 +9,7 @@ menu "Broadcom specific AMBA"
config BCMA
tristate "BCMA support"
depends on BCMA_POSSIBLE
+ select CRC8
help
Bus driver for Broadcom specific Advanced Microcontroller Bus
Architecture.
diff --git a/drivers/bcma/sprom.c b/drivers/bcma/sprom.c
index ffbb0e3..0ad6f01 100644
--- a/drivers/bcma/sprom.c
+++ b/drivers/bcma/sprom.c
@@ -9,6 +9,7 @@
#include <linux/bcma/bcma.h>
#include <linux/bcma/bcma_regs.h>
+#include <linux/crc8.h>
#include <linux/pci.h>
#include <linux/io.h>
#include <linux/dma-mapping.h>
@@ -32,56 +33,27 @@ static void bcma_sprom_read(struct bcma_bus *bus, u16 *sprom)
* Validation.
**************************************************/
-static inline u8 bcma_crc8(u8 crc, u8 data)
-{
- /* Polynomial: x^8 + x^7 + x^6 + x^4 + x^2 + 1 */
- static const u8 t[] = {
- 0x00, 0xF7, 0xB9, 0x4E, 0x25, 0xD2, 0x9C, 0x6B,
- 0x4A, 0xBD, 0xF3, 0x04, 0x6F, 0x98, 0xD6, 0x21,
- 0x94, 0x63, 0x2D, 0xDA, 0xB1, 0x46, 0x08, 0xFF,
- 0xDE, 0x29, 0x67, 0x90, 0xFB, 0x0C, 0x42, 0xB5,
- 0x7F, 0x88, 0xC6, 0x31, 0x5A, 0xAD, 0xE3, 0x14,
- 0x35, 0xC2, 0x8C, 0x7B, 0x10, 0xE7, 0xA9, 0x5E,
- 0xEB, 0x1C, 0x52, 0xA5, 0xCE, 0x39, 0x77, 0x80,
- 0xA1, 0x56, 0x18, 0xEF, 0x84, 0x73, 0x3D, 0xCA,
- 0xFE, 0x09, 0x47, 0xB0, 0xDB, 0x2C, 0x62, 0x95,
- 0xB4, 0x43, 0x0D, 0xFA, 0x91, 0x66, 0x28, 0xDF,
- 0x6A, 0x9D, 0xD3, 0x24, 0x4F, 0xB8, 0xF6, 0x01,
- 0x20, 0xD7, 0x99, 0x6E, 0x05, 0xF2, 0xBC, 0x4B,
- 0x81, 0x76, 0x38, 0xCF, 0xA4, 0x53, 0x1D, 0xEA,
- 0xCB, 0x3C, 0x72, 0x85, 0xEE, 0x19, 0x57, 0xA0,
- 0x15, 0xE2, 0xAC, 0x5B, 0x30, 0xC7, 0x89, 0x7E,
- 0x5F, 0xA8, 0xE6, 0x11, 0x7A, 0x8D, 0xC3, 0x34,
- 0xAB, 0x5C, 0x12, 0xE5, 0x8E, 0x79, 0x37, 0xC0,
- 0xE1, 0x16, 0x58, 0xAF, 0xC4, 0x33, 0x7D, 0x8A,
- 0x3F, 0xC8, 0x86, 0x71, 0x1A, 0xED, 0xA3, 0x54,
- 0x75, 0x82, 0xCC, 0x3B, 0x50, 0xA7, 0xE9, 0x1E,
- 0xD4, 0x23, 0x6D, 0x9A, 0xF1, 0x06, 0x48, 0xBF,
- 0x9E, 0x69, 0x27, 0xD0, 0xBB, 0x4C, 0x02, 0xF5,
- 0x40, 0xB7, 0xF9, 0x0E, 0x65, 0x92, 0xDC, 0x2B,
- 0x0A, 0xFD, 0xB3, 0x44, 0x2F, 0xD8, 0x96, 0x61,
- 0x55, 0xA2, 0xEC, 0x1B, 0x70, 0x87, 0xC9, 0x3E,
- 0x1F, 0xE8, 0xA6, 0x51, 0x3A, 0xCD, 0x83, 0x74,
- 0xC1, 0x36, 0x78, 0x8F, 0xE4, 0x13, 0x5D, 0xAA,
- 0x8B, 0x7C, 0x32, 0xC5, 0xAE, 0x59, 0x17, 0xE0,
- 0x2A, 0xDD, 0x93, 0x64, 0x0F, 0xF8, 0xB6, 0x41,
- 0x60, 0x97, 0xD9, 0x2E, 0x45, 0xB2, 0xFC, 0x0B,
- 0xBE, 0x49, 0x07, 0xF0, 0x9B, 0x6C, 0x22, 0xD5,
- 0xF4, 0x03, 0x4D, 0xBA, 0xD1, 0x26, 0x68, 0x9F,
- };
- return t[crc ^ data];
-}
-
static u8 bcma_sprom_crc(const u16 *sprom)
{
- int word;
- u8 crc = 0xFF;
+ u8 crc;
+ u8 sprom2[SSB_SPROMSIZE_WORDS_R4 * 2 - 1];
+ u8 table[CRC8_TABLE_SIZE];
+ u16 word;
+ /* u16 to u8 */
for (word = 0; word < SSB_SPROMSIZE_WORDS_R4 - 1; word++) {
- crc = bcma_crc8(crc, sprom[word] & 0x00FF);
- crc = bcma_crc8(crc, (sprom[word] & 0xFF00) >> 8);
+ sprom2[word * 2] = sprom[word] & 0x00FF;
+ sprom2[(word * 2) + 1] = (sprom[word] & 0xFF00) >> 8;
}
- crc = bcma_crc8(crc, sprom[SSB_SPROMSIZE_WORDS_R4 - 1] & 0x00FF);
+ /* 127th byte */
+ sprom2[(SSB_SPROMSIZE_WORDS_R4 * 2) - 2] =
+ sprom[SSB_SPROMSIZE_WORDS_R4 - 1] & 0x00FF;
+
+ /* Prepare table, 0xAB is x^8 + x^7 + x^6 + x^4 + x^2 + 1 */
+ crc8_populate_lsb(table, 0xAB);
+
+ /* Calculate */
+ crc = crc8(table, sprom2, (SSB_SPROMSIZE_WORDS_R4 * 2) - 1, 0xFF);
crc ^= 0xFF;
return crc;
--
1.7.3.4
next reply other threads:[~2011-06-15 11:53 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-15 11:53 Rafał Miłecki [this message]
[not found] ` <4DF8A0EF.5030702@broadcom.com>
2011-06-15 18:29 ` [RFC][WORTH IT?][PATCH] bcma: make use of crc8 lib Rafał Miłecki
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=1308138814-12235-1-git-send-email-zajec5@gmail.com \
--to=zajec5@gmail.com \
--cc=arend@broadcom.com \
--cc=b43-dev@lists.infradead.org \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
/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