ath9k: add duration field to ath_tx_status
authorLorenzo Bianconi <lorenzo.bianconi83@gmail.com>
Tue, 16 Sep 2014 00:13:08 +0000 (02:13 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 16 Sep 2014 20:15:51 +0000 (16:15 -0400)
Add duration field to ath_tx_status in order to report frame duration for each
entry in multi-retry chain. These fields will be used in ACK timeout estimation
algorithm (dynack)

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/ar9002_mac.c
drivers/net/wireless/ath/ath9k/ar9003_mac.c
drivers/net/wireless/ath/ath9k/mac.h

index 59af9f9712da852e0ebf4e05747b35da7373dbeb..669cb374720854a1fffedea0dc84a5bac45c8184 100644 (file)
@@ -381,6 +381,13 @@ static int ar9002_hw_proc_txdesc(struct ath_hw *ah, void *ds,
        ts->evm1 = ads->AR_TxEVM1;
        ts->evm2 = ads->AR_TxEVM2;
 
+       status = ACCESS_ONCE(ads->ds_ctl4);
+       ts->duration[0] = MS(status, AR_PacketDur0);
+       ts->duration[1] = MS(status, AR_PacketDur1);
+       status = ACCESS_ONCE(ads->ds_ctl5);
+       ts->duration[2] = MS(status, AR_PacketDur2);
+       ts->duration[3] = MS(status, AR_PacketDur3);
+
        return 0;
 }
 
index 71e38e85aa99801546e8e64332bbce3458edd604..e5f7c11fa144c3c8fed1cfff63cff93ab46994c6 100644 (file)
@@ -355,9 +355,11 @@ static int ar9003_hw_proc_txdesc(struct ath_hw *ah, void *ds,
                                 struct ath_tx_status *ts)
 {
        struct ar9003_txs *ads;
+       struct ar9003_txc *adc;
        u32 status;
 
        ads = &ah->ts_ring[ah->ts_tail];
+       adc = (struct ar9003_txc *)ads;
 
        status = ACCESS_ONCE(ads->status8);
        if ((status & AR_TxDone) == 0)
@@ -426,6 +428,13 @@ static int ar9003_hw_proc_txdesc(struct ath_hw *ah, void *ds,
        ts->ts_rssi_ext1 = MS(status, AR_TxRSSIAnt11);
        ts->ts_rssi_ext2 = MS(status, AR_TxRSSIAnt12);
 
+       status = ACCESS_ONCE(adc->ctl15);
+       ts->duration[0] = MS(status, AR_PacketDur0);
+       ts->duration[1] = MS(status, AR_PacketDur1);
+       status = ACCESS_ONCE(adc->ctl16);
+       ts->duration[2] = MS(status, AR_PacketDur2);
+       ts->duration[3] = MS(status, AR_PacketDur3);
+
        memset(ads, 0, sizeof(*ads));
 
        return 0;
index 6c56cafa5ca491fb284adad4fb156af9caa322b4..cd05a779107373dd122819a3629b755d6d494d8e 100644 (file)
@@ -121,6 +121,7 @@ struct ath_tx_status {
        u32 evm0;
        u32 evm1;
        u32 evm2;
+       u32 duration[4];
 };
 
 struct ath_rx_status {