W dniu 15 czerwca 2011 14:09 użytkownik Arend van Spriel <[email protected]> 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ł _______________________________________________ b43-dev mailing list [email protected] http://lists.infradead.org/mailman/listinfo/b43-dev
