mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-10 19:43:29 +00:00
ath5k: correct packet length in tx descriptors
Packet length calculation (which includes frame check sequence) should take into account whether we add a pad field or not. Extract the calculation into a helper and use it in both places. Changes to desc.c Changes-licensed-under: ISC Changes to ath5k.h, base.c Changes-licensed-under: 3-Clause-BSD Signed-off-by: Bob Copeland <me@bobcopeland.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
520eb82076
commit
fd6effcaf8
@ -1350,4 +1350,9 @@ static inline u32 ath5k_hw_bitswap(u32 val, unsigned int bits)
|
||||
return retval;
|
||||
}
|
||||
|
||||
static inline int ath5k_pad_size(int hdrlen)
|
||||
{
|
||||
return (hdrlen < 24) ? 0 : hdrlen & 3;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -1762,8 +1762,8 @@ accept:
|
||||
* not try to remove padding from short control frames that do
|
||||
* not have payload. */
|
||||
hdrlen = ieee80211_get_hdrlen_from_skb(skb);
|
||||
padsize = hdrlen & 3;
|
||||
if (padsize && hdrlen >= 24) {
|
||||
padsize = ath5k_pad_size(hdrlen);
|
||||
if (padsize) {
|
||||
memmove(skb->data + padsize, skb->data, hdrlen);
|
||||
skb_pull(skb, padsize);
|
||||
}
|
||||
@ -2638,8 +2638,8 @@ ath5k_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||
* if this is not the case we add the padding after the header
|
||||
*/
|
||||
hdrlen = ieee80211_get_hdrlen_from_skb(skb);
|
||||
padsize = hdrlen & 3;
|
||||
if (padsize && hdrlen >= 24) {
|
||||
padsize = ath5k_pad_size(hdrlen);
|
||||
if (padsize) {
|
||||
|
||||
if (skb_headroom(skb) < padsize) {
|
||||
ATH5K_ERR(sc, "tx hdrlen not %%4: %d not enough"
|
||||
|
@ -71,7 +71,7 @@ ath5k_hw_setup_2word_tx_desc(struct ath5k_hw *ah, struct ath5k_desc *desc,
|
||||
/* Verify and set frame length */
|
||||
|
||||
/* remove padding we might have added before */
|
||||
frame_len = pkt_len - (hdr_len & 3) + FCS_LEN;
|
||||
frame_len = pkt_len - ath5k_pad_size(hdr_len) + FCS_LEN;
|
||||
|
||||
if (frame_len & ~AR5K_2W_TX_DESC_CTL0_FRAME_LEN)
|
||||
return -EINVAL;
|
||||
@ -202,7 +202,7 @@ static int ath5k_hw_setup_4word_tx_desc(struct ath5k_hw *ah,
|
||||
/* Verify and set frame length */
|
||||
|
||||
/* remove padding we might have added before */
|
||||
frame_len = pkt_len - (hdr_len & 3) + FCS_LEN;
|
||||
frame_len = pkt_len - ath5k_pad_size(hdr_len) + FCS_LEN;
|
||||
|
||||
if (frame_len & ~AR5K_4W_TX_DESC_CTL0_FRAME_LEN)
|
||||
return -EINVAL;
|
||||
|
Loading…
x
Reference in New Issue
Block a user