[RFC][WORTH IT?][PATCH] bcma: make use of crc8 lib

Rafał Miłecki zajec5 at gmail.com
Wed Jun 15 14:29:58 EDT 2011


W dniu 15 czerwca 2011 14:09 użytkownik Arend van Spriel
<arend at broadcom.com> napisał:
> On 06/15/2011 01:53 PM, Rafał Miłecki wrote:
>>
>>  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;
>
> You could do (I think):
>
> crc8_populate_lsb(table, 0xAB);
> for (word = 0; word<  SSB_SPROMSIZE_WORDS_R4; word++) {
>        u16 val = cpu_to_le16(sprom[word]);
>        crc = crc8(table,&val, sizeof(u16), crc);
> }

Maybe not a perfect/optimal solution (crc8 focuses on tables, we do
double loop instead) but should work. Thanks for the tip.

-- 
Rafał



More information about the b43-dev mailing list