All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Arend van Spriel" <arend@broadcom.com>
To: "Michael Büsch" <m@bues.ch>
Cc: "Larry Finger" <Larry.Finger@lwfinger.net>,
	"John W Linville" <linville@tuxdriver.com>,
	"Michael Buesch" <mb@bu3sch.de>,
	"zajec5@gmail.com" <zajec5@gmail.com>,
	"b43-dev@lists.infradead.org" <b43-dev@lists.infradead.org>,
	"linux-wireless@vger.kernel.org" <linux-wireless@vger.kernel.org>
Subject: Re: [PATCH] ssb: Convert to use crc8 code in kernel library
Date: Sun, 9 Oct 2011 11:50:13 +0200	[thread overview]
Message-ID: <4E916E55.30101@broadcom.com> (raw)
In-Reply-To: <20111009005107.43a49372@milhouse>

On 10/09/2011 12:51 AM, Michael Büsch wrote:
> On Sat, 08 Oct 2011 17:28:42 -0500
> Larry Finger <Larry.Finger@lwfinger.net> wrote:
> 
>> The kernel now contains library routines to establish crc8 tables and
>> to calculate the appropriate sums. Use them for ssb.
> 
>> +static u8 srom_crc8_table[CRC8_TABLE_SIZE];
>> +
>> +/* Polynomial:   x^8 + x^7 + x^6 + x^4 + x^2 + 1   */
>> +#define SROM_CRC8_POLY	0xAB
>> +
>> +static inline void ltoh16_buf(u16 *buf, unsigned int size)
>>  {
>> +	size /= 2;
>> +	while (size--)
>> +		*(buf + size) = le16_to_cpu(*(__le16 *)(buf + size));
>> +}
>>  
>> -	return crc;
>> +static inline void htol16_buf(u16 *buf, unsigned int size)
>> +{
>> +	size /= 2;
>> +	while (size--)
>> +		*(__le16 *)(buf + size) = cpu_to_le16(*(buf + size));
>>  }
> 
>>  		return -ENOMEM;
>> +	crc8_populate_lsb(srom_crc8_table, SROM_CRC8_POLY);
>>  	bus->sprom_size = SSB_SPROMSIZE_WORDS_R123;
>>  	sprom_do_read(bus, buf);
>> +	/* convert to le */
>> +	htol16_buf(buf, 2 * bus->sprom_size);
> 
>>  		bus->sprom_size = SSB_SPROMSIZE_WORDS_R4;
>>  		sprom_do_read(bus, buf);
>> +		htol16_buf(buf, 2 * bus->sprom_size);
>>  		err = sprom_check_crc(buf, bus->sprom_size);
> 
>> +	/* restore endianess */
>> +	ltoh16_buf(buf, 2 * bus->sprom_size);
>>  	err = sprom_extract(bus, sprom, buf, bus->sprom_size);
> 
> This endianness stuff is _really_ ugly.

It may seem ugly, but is not new. Choosing a 8-bit crc to check a 16-bit
array is not very efficient considering host endianess. The endianess
was also dealt with in the old version:

-	for (word = 0; word < size - 1; word++) {
-		crc = ssb_crc8(crc, sprom[word] & 0x00FF);
-		crc = ssb_crc8(crc, (sprom[word] & 0xFF00) >> 8);
-	}

It is a bit easier on the eye. I guess the ugliness comes from the fact
that there are two calls to htol16_buf.

A better approach would be to read sprom as bytes and run the crc8 over
the byte array. When ok do ltoh16_buf once.

> Does this patch decrease the code size, at least? I'll almost doubt it.
> If it doesn't, why are we actually doing this?

Probably for the same reason why struct list_head and related functions
are used. Trying to use what is commonly available in the kernel.

> It doesn't even decrease the .data size. Worse, it converts a .const
> table to a .data table.

True. .code size became .data size, because of the flexibility that the
table is generated for a given polynomial. Every 'bility' comes with a
price and this seems not too pricy.

> Just my 2 cents.
> 

Gr. AvS


  parent reply	other threads:[~2011-10-09  9:50 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-10-08 22:28 [PATCH] ssb: Convert to use crc8 code in kernel library Larry Finger
2011-10-08 22:38 ` Joe Perches
2011-10-08 23:00   ` Larry Finger
2011-10-08 23:00     ` Larry Finger
2011-10-08 23:11     ` Joe Perches
2011-10-08 22:51 ` Michael Büsch
2011-10-08 22:51   ` Michael Büsch
2011-10-09  8:48   ` Rafał Miłecki
2011-10-09  8:48     ` Rafał Miłecki
2011-10-09 10:33     ` Arend van Spriel
2011-10-09 14:35     ` Larry Finger
2011-10-09 14:35       ` Larry Finger
2011-10-09  9:50   ` Arend van Spriel [this message]
2011-10-14 15:11 ` Pavel Roskin
2011-10-14 15:30   ` Arend van Spriel
2011-10-14 16:30   ` Larry Finger
2011-10-14 16:30     ` Larry Finger
2011-10-14 16:47     ` Michael Büsch
2011-10-14 16:47       ` Michael Büsch
2011-10-15  8:27     ` Arend van Spriel
2011-10-15 13:29       ` Larry Finger
2011-10-15 13:29         ` Larry Finger
2011-10-15 13:53         ` Michael Büsch
2011-10-15 13:53           ` Michael Büsch
2011-10-15 14:18           ` Larry Finger
2011-10-15 14:18             ` Larry Finger

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=4E916E55.30101@broadcom.com \
    --to=arend@broadcom.com \
    --cc=Larry.Finger@lwfinger.net \
    --cc=b43-dev@lists.infradead.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    --cc=m@bues.ch \
    --cc=mb@bu3sch.de \
    --cc=zajec5@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.