Commit eb823253 authored by Vasanthakumar Thiagarajan's avatar Vasanthakumar Thiagarajan Committed by John W. Linville

ath9k_hw: Compute pointer checksum over the link descriptor

Signed-off-by: default avatarVasanthakumar Thiagarajan <vasanth@atheros.com>
Signed-off-by: default avatarFelix Fietkau <nbd@openwrt.org>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 5088c2f1
...@@ -21,14 +21,33 @@ static void ar9003_hw_rx_enable(struct ath_hw *hw) ...@@ -21,14 +21,33 @@ static void ar9003_hw_rx_enable(struct ath_hw *hw)
REG_WRITE(hw, AR_CR, 0); REG_WRITE(hw, AR_CR, 0);
} }
static u16 ar9003_calc_ptr_chksum(struct ar9003_txc *ads)
{
int checksum;
checksum = ads->info + ads->link
+ ads->data0 + ads->ctl3
+ ads->data1 + ads->ctl5
+ ads->data2 + ads->ctl7
+ ads->data3 + ads->ctl9;
return ((checksum & 0xffff) + (checksum >> 16)) & AR_TxPtrChkSum;
}
static void ar9003_hw_set_desc_link(void *ds, u32 ds_link) static void ar9003_hw_set_desc_link(void *ds, u32 ds_link)
{ {
((struct ar9003_txc *) ds)->link = ds_link; struct ar9003_txc *ads = ds;
ads->link = ds_link;
ads->ctl10 &= ~AR_TxPtrChkSum;
ads->ctl10 |= ar9003_calc_ptr_chksum(ads);
} }
static void ar9003_hw_get_desc_link(void *ds, u32 **ds_link) static void ar9003_hw_get_desc_link(void *ds, u32 **ds_link)
{ {
*ds_link = &((struct ar9003_txc *) ds)->link; struct ar9003_txc *ads = ds;
*ds_link = &ads->link;
} }
static bool ar9003_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked) static bool ar9003_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked)
...@@ -168,19 +187,6 @@ static bool ar9003_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked) ...@@ -168,19 +187,6 @@ static bool ar9003_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked)
return true; return true;
} }
static u16 ar9003_calc_ptr_chksum(struct ar9003_txc *ads)
{
int checksum;
checksum = ads->info + ads->link
+ ads->data0 + ads->ctl3
+ ads->data1 + ads->ctl5
+ ads->data2 + ads->ctl7
+ ads->data3 + ads->ctl9;
return ((checksum & 0xffff) + (checksum >> 16)) & AR_TxPtrChkSum;
}
static void ar9003_hw_fill_txdesc(struct ath_hw *ah, void *ds, u32 seglen, static void ar9003_hw_fill_txdesc(struct ath_hw *ah, void *ds, u32 seglen,
bool is_firstseg, bool is_lastseg, bool is_firstseg, bool is_lastseg,
const void *ds0, dma_addr_t buf_addr, const void *ds0, dma_addr_t buf_addr,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment