diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2008-12-01 12:19:36 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-12-05 09:35:46 -0500 |
commit | c91276592695e13d1b52eab572551017cbf96ee7 (patch) | |
tree | c5e0a6611c215ce38637c56c0ef0989fda04d120 /drivers | |
parent | 0f70f398460adb2d8aabb00e7e65f58247f219a3 (diff) |
p54: fix lm87 checksum endianness
This fixes the checksum calculation for lm87 firmwares
on big endian platforms, the device treats the data as
an array of 32-bit little endian values so the driver
needs to do that as well.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Acked-by: Christian Lamparter <chunkeey@web.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/p54/p54usb.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c index e9630b94925..2dd3cd41d0f 100644 --- a/drivers/net/wireless/p54/p54usb.c +++ b/drivers/net/wireless/p54/p54usb.c | |||
@@ -244,13 +244,13 @@ static void p54u_tx_3887(struct ieee80211_hw *dev, struct sk_buff *skb, | |||
244 | usb_submit_urb(data_urb, GFP_ATOMIC); | 244 | usb_submit_urb(data_urb, GFP_ATOMIC); |
245 | } | 245 | } |
246 | 246 | ||
247 | static __le32 p54u_lm87_chksum(const u32 *data, size_t length) | 247 | static __le32 p54u_lm87_chksum(const __le32 *data, size_t length) |
248 | { | 248 | { |
249 | u32 chk = 0; | 249 | u32 chk = 0; |
250 | 250 | ||
251 | length >>= 2; | 251 | length >>= 2; |
252 | while (length--) { | 252 | while (length--) { |
253 | chk ^= *data++; | 253 | chk ^= le32_to_cpu(*data++); |
254 | chk = (chk >> 5) ^ (chk << 3); | 254 | chk = (chk >> 5) ^ (chk << 3); |
255 | } | 255 | } |
256 | 256 | ||
@@ -270,7 +270,7 @@ static void p54u_tx_lm87(struct ieee80211_hw *dev, struct sk_buff *skb, | |||
270 | if (!data_urb) | 270 | if (!data_urb) |
271 | return; | 271 | return; |
272 | 272 | ||
273 | checksum = p54u_lm87_chksum((u32 *)skb->data, skb->len); | 273 | checksum = p54u_lm87_chksum((__le32 *)skb->data, skb->len); |
274 | hdr = (struct lm87_tx_hdr *)skb_push(skb, sizeof(*hdr)); | 274 | hdr = (struct lm87_tx_hdr *)skb_push(skb, sizeof(*hdr)); |
275 | hdr->chksum = checksum; | 275 | hdr->chksum = checksum; |
276 | hdr->device_addr = addr; | 276 | hdr->device_addr = addr; |