Skip to content

Commit

Permalink
p54: fix lm87 checksum endianness
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Johannes Berg authored and John W. Linville committed Dec 5, 2008
1 parent 0f70f39 commit c912765
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions drivers/net/wireless/p54/p54usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -244,13 +244,13 @@ static void p54u_tx_3887(struct ieee80211_hw *dev, struct sk_buff *skb,
usb_submit_urb(data_urb, GFP_ATOMIC);
}

static __le32 p54u_lm87_chksum(const u32 *data, size_t length)
static __le32 p54u_lm87_chksum(const __le32 *data, size_t length)
{
u32 chk = 0;

length >>= 2;
while (length--) {
chk ^= *data++;
chk ^= le32_to_cpu(*data++);
chk = (chk >> 5) ^ (chk << 3);
}

Expand All @@ -270,7 +270,7 @@ static void p54u_tx_lm87(struct ieee80211_hw *dev, struct sk_buff *skb,
if (!data_urb)
return;

checksum = p54u_lm87_chksum((u32 *)skb->data, skb->len);
checksum = p54u_lm87_chksum((__le32 *)skb->data, skb->len);
hdr = (struct lm87_tx_hdr *)skb_push(skb, sizeof(*hdr));
hdr->chksum = checksum;
hdr->device_addr = addr;
Expand Down

0 comments on commit c912765

Please sign in to comment.