ath9k & ath9k_htc: move ath_rx_stats to cmn
and use it. This move need changes in both drivers. Signed-off-by: Oleksij Rempel <linux@rempel-privat.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
9d83cd5cd2
commit
b5a0c86a56
@ -86,3 +86,36 @@ void ath9k_cmn_debug_base_eeprom(struct dentry *debugfs_phy,
|
|||||||
&fops_base_eeprom);
|
&fops_base_eeprom);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ath9k_cmn_debug_base_eeprom);
|
EXPORT_SYMBOL(ath9k_cmn_debug_base_eeprom);
|
||||||
|
|
||||||
|
void ath9k_cmn_debug_stat_rx(struct ath_rx_stats *rxstats,
|
||||||
|
struct ath_rx_status *rs)
|
||||||
|
{
|
||||||
|
#define RX_PHY_ERR_INC(c) rxstats->phy_err_stats[c]++
|
||||||
|
#define RX_CMN_STAT_INC(c) (rxstats->c++)
|
||||||
|
|
||||||
|
RX_CMN_STAT_INC(rx_pkts_all);
|
||||||
|
rxstats->rx_bytes_all += rs->rs_datalen;
|
||||||
|
|
||||||
|
if (rs->rs_status & ATH9K_RXERR_CRC)
|
||||||
|
RX_CMN_STAT_INC(crc_err);
|
||||||
|
if (rs->rs_status & ATH9K_RXERR_DECRYPT)
|
||||||
|
RX_CMN_STAT_INC(decrypt_crc_err);
|
||||||
|
if (rs->rs_status & ATH9K_RXERR_MIC)
|
||||||
|
RX_CMN_STAT_INC(mic_err);
|
||||||
|
if (rs->rs_status & ATH9K_RX_DELIM_CRC_PRE)
|
||||||
|
RX_CMN_STAT_INC(pre_delim_crc_err);
|
||||||
|
if (rs->rs_status & ATH9K_RX_DELIM_CRC_POST)
|
||||||
|
RX_CMN_STAT_INC(post_delim_crc_err);
|
||||||
|
if (rs->rs_status & ATH9K_RX_DECRYPT_BUSY)
|
||||||
|
RX_CMN_STAT_INC(decrypt_busy_err);
|
||||||
|
|
||||||
|
if (rs->rs_status & ATH9K_RXERR_PHY) {
|
||||||
|
RX_CMN_STAT_INC(phy_err);
|
||||||
|
if (rs->rs_phyerr < ATH9K_PHYERR_MAX)
|
||||||
|
RX_PHY_ERR_INC(rs->rs_phyerr);
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef RX_CMN_STAT_INC
|
||||||
|
#undef RX_PHY_ERR_INC
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(ath9k_cmn_debug_stat_rx);
|
||||||
|
@ -14,7 +14,55 @@
|
|||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct ath_rx_stats - RX Statistics
|
||||||
|
* @rx_pkts_all: No. of total frames received, including ones that
|
||||||
|
may have had errors.
|
||||||
|
* @rx_bytes_all: No. of total bytes received, including ones that
|
||||||
|
may have had errors.
|
||||||
|
* @crc_err: No. of frames with incorrect CRC value
|
||||||
|
* @decrypt_crc_err: No. of frames whose CRC check failed after
|
||||||
|
decryption process completed
|
||||||
|
* @phy_err: No. of frames whose reception failed because the PHY
|
||||||
|
encountered an error
|
||||||
|
* @mic_err: No. of frames with incorrect TKIP MIC verification failure
|
||||||
|
* @pre_delim_crc_err: Pre-Frame delimiter CRC error detections
|
||||||
|
* @post_delim_crc_err: Post-Frame delimiter CRC error detections
|
||||||
|
* @decrypt_busy_err: Decryption interruptions counter
|
||||||
|
* @phy_err_stats: Individual PHY error statistics
|
||||||
|
* @rx_len_err: No. of frames discarded due to bad length.
|
||||||
|
* @rx_oom_err: No. of frames dropped due to OOM issues.
|
||||||
|
* @rx_rate_err: No. of frames dropped due to rate errors.
|
||||||
|
* @rx_too_many_frags_err: Frames dropped due to too-many-frags received.
|
||||||
|
* @rx_beacons: No. of beacons received.
|
||||||
|
* @rx_frags: No. of rx-fragements received.
|
||||||
|
* @rx_spectral: No of spectral packets received.
|
||||||
|
*/
|
||||||
|
struct ath_rx_stats {
|
||||||
|
u32 rx_pkts_all;
|
||||||
|
u32 rx_bytes_all;
|
||||||
|
u32 crc_err;
|
||||||
|
u32 decrypt_crc_err;
|
||||||
|
u32 phy_err;
|
||||||
|
u32 mic_err;
|
||||||
|
u32 pre_delim_crc_err;
|
||||||
|
u32 post_delim_crc_err;
|
||||||
|
u32 decrypt_busy_err;
|
||||||
|
u32 phy_err_stats[ATH9K_PHYERR_MAX];
|
||||||
|
u32 rx_len_err;
|
||||||
|
u32 rx_oom_err;
|
||||||
|
u32 rx_rate_err;
|
||||||
|
u32 rx_too_many_frags_err;
|
||||||
|
u32 rx_beacons;
|
||||||
|
u32 rx_frags;
|
||||||
|
u32 rx_spectral;
|
||||||
|
};
|
||||||
|
|
||||||
void ath9k_cmn_debug_modal_eeprom(struct dentry *debugfs_phy,
|
void ath9k_cmn_debug_modal_eeprom(struct dentry *debugfs_phy,
|
||||||
struct ath_hw *ah);
|
struct ath_hw *ah);
|
||||||
void ath9k_cmn_debug_base_eeprom(struct dentry *debugfs_phy,
|
void ath9k_cmn_debug_base_eeprom(struct dentry *debugfs_phy,
|
||||||
struct ath_hw *ah);
|
struct ath_hw *ah);
|
||||||
|
void ath9k_cmn_debug_stat_rx(struct ath_rx_stats *rxstats,
|
||||||
|
struct ath_rx_status *rs);
|
||||||
|
@ -998,31 +998,7 @@ static ssize_t read_file_recv(struct file *file, char __user *user_buf,
|
|||||||
|
|
||||||
void ath_debug_stat_rx(struct ath_softc *sc, struct ath_rx_status *rs)
|
void ath_debug_stat_rx(struct ath_softc *sc, struct ath_rx_status *rs)
|
||||||
{
|
{
|
||||||
#define RX_PHY_ERR_INC(c) sc->debug.stats.rxstats.phy_err_stats[c]++
|
ath9k_cmn_debug_stat_rx(&sc->debug.stats.rxstats, rs);
|
||||||
|
|
||||||
RX_STAT_INC(rx_pkts_all);
|
|
||||||
sc->debug.stats.rxstats.rx_bytes_all += rs->rs_datalen;
|
|
||||||
|
|
||||||
if (rs->rs_status & ATH9K_RXERR_CRC)
|
|
||||||
RX_STAT_INC(crc_err);
|
|
||||||
if (rs->rs_status & ATH9K_RXERR_DECRYPT)
|
|
||||||
RX_STAT_INC(decrypt_crc_err);
|
|
||||||
if (rs->rs_status & ATH9K_RXERR_MIC)
|
|
||||||
RX_STAT_INC(mic_err);
|
|
||||||
if (rs->rs_status & ATH9K_RX_DELIM_CRC_PRE)
|
|
||||||
RX_STAT_INC(pre_delim_crc_err);
|
|
||||||
if (rs->rs_status & ATH9K_RX_DELIM_CRC_POST)
|
|
||||||
RX_STAT_INC(post_delim_crc_err);
|
|
||||||
if (rs->rs_status & ATH9K_RX_DECRYPT_BUSY)
|
|
||||||
RX_STAT_INC(decrypt_busy_err);
|
|
||||||
|
|
||||||
if (rs->rs_status & ATH9K_RXERR_PHY) {
|
|
||||||
RX_STAT_INC(phy_err);
|
|
||||||
if (rs->rs_phyerr < ATH9K_PHYERR_MAX)
|
|
||||||
RX_PHY_ERR_INC(rs->rs_phyerr);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef RX_PHY_ERR_INC
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct file_operations fops_recv = {
|
static const struct file_operations fops_recv = {
|
||||||
|
@ -221,50 +221,6 @@ struct ath_rx_rate_stats {
|
|||||||
} cck_stats[4];
|
} cck_stats[4];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* struct ath_rx_stats - RX Statistics
|
|
||||||
* @rx_pkts_all: No. of total frames received, including ones that
|
|
||||||
may have had errors.
|
|
||||||
* @rx_bytes_all: No. of total bytes received, including ones that
|
|
||||||
may have had errors.
|
|
||||||
* @crc_err: No. of frames with incorrect CRC value
|
|
||||||
* @decrypt_crc_err: No. of frames whose CRC check failed after
|
|
||||||
decryption process completed
|
|
||||||
* @phy_err: No. of frames whose reception failed because the PHY
|
|
||||||
encountered an error
|
|
||||||
* @mic_err: No. of frames with incorrect TKIP MIC verification failure
|
|
||||||
* @pre_delim_crc_err: Pre-Frame delimiter CRC error detections
|
|
||||||
* @post_delim_crc_err: Post-Frame delimiter CRC error detections
|
|
||||||
* @decrypt_busy_err: Decryption interruptions counter
|
|
||||||
* @phy_err_stats: Individual PHY error statistics
|
|
||||||
* @rx_len_err: No. of frames discarded due to bad length.
|
|
||||||
* @rx_oom_err: No. of frames dropped due to OOM issues.
|
|
||||||
* @rx_rate_err: No. of frames dropped due to rate errors.
|
|
||||||
* @rx_too_many_frags_err: Frames dropped due to too-many-frags received.
|
|
||||||
* @rx_beacons: No. of beacons received.
|
|
||||||
* @rx_frags: No. of rx-fragements received.
|
|
||||||
* @rx_spectral: No of spectral packets received.
|
|
||||||
*/
|
|
||||||
struct ath_rx_stats {
|
|
||||||
u32 rx_pkts_all;
|
|
||||||
u32 rx_bytes_all;
|
|
||||||
u32 crc_err;
|
|
||||||
u32 decrypt_crc_err;
|
|
||||||
u32 phy_err;
|
|
||||||
u32 mic_err;
|
|
||||||
u32 pre_delim_crc_err;
|
|
||||||
u32 post_delim_crc_err;
|
|
||||||
u32 decrypt_busy_err;
|
|
||||||
u32 phy_err_stats[ATH9K_PHYERR_MAX];
|
|
||||||
u32 rx_len_err;
|
|
||||||
u32 rx_oom_err;
|
|
||||||
u32 rx_rate_err;
|
|
||||||
u32 rx_too_many_frags_err;
|
|
||||||
u32 rx_beacons;
|
|
||||||
u32 rx_frags;
|
|
||||||
u32 rx_spectral;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define ANT_MAIN 0
|
#define ANT_MAIN 0
|
||||||
#define ANT_ALT 1
|
#define ANT_ALT 1
|
||||||
|
|
||||||
|
@ -325,14 +325,14 @@ static inline struct ath9k_htc_tx_ctl *HTC_SKB_CB(struct sk_buff *skb)
|
|||||||
|
|
||||||
#define TX_STAT_INC(c) (hif_dev->htc_handle->drv_priv->debug.tx_stats.c++)
|
#define TX_STAT_INC(c) (hif_dev->htc_handle->drv_priv->debug.tx_stats.c++)
|
||||||
#define TX_STAT_ADD(c, a) (hif_dev->htc_handle->drv_priv->debug.tx_stats.c += a)
|
#define TX_STAT_ADD(c, a) (hif_dev->htc_handle->drv_priv->debug.tx_stats.c += a)
|
||||||
#define RX_STAT_INC(c) (hif_dev->htc_handle->drv_priv->debug.rx_stats.c++)
|
#define RX_STAT_INC(c) (hif_dev->htc_handle->drv_priv->debug.skbrx_stats.c++)
|
||||||
#define RX_STAT_ADD(c, a) (hif_dev->htc_handle->drv_priv->debug.rx_stats.c += a)
|
#define RX_STAT_ADD(c, a) (hif_dev->htc_handle->drv_priv->debug.skbrx_stats.c += a)
|
||||||
#define CAB_STAT_INC priv->debug.tx_stats.cab_queued++
|
#define CAB_STAT_INC priv->debug.tx_stats.cab_queued++
|
||||||
|
|
||||||
#define TX_QSTAT_INC(q) (priv->debug.tx_stats.queue_stats[q]++)
|
#define TX_QSTAT_INC(q) (priv->debug.tx_stats.queue_stats[q]++)
|
||||||
|
|
||||||
void ath9k_htc_err_stat_rx(struct ath9k_htc_priv *priv,
|
void ath9k_htc_err_stat_rx(struct ath9k_htc_priv *priv,
|
||||||
struct ath_htc_rx_status *rxs);
|
struct ath_rx_status *rs);
|
||||||
|
|
||||||
struct ath_tx_stats {
|
struct ath_tx_stats {
|
||||||
u32 buf_queued;
|
u32 buf_queued;
|
||||||
@ -345,25 +345,18 @@ struct ath_tx_stats {
|
|||||||
u32 queue_stats[IEEE80211_NUM_ACS];
|
u32 queue_stats[IEEE80211_NUM_ACS];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ath_rx_stats {
|
struct ath_skbrx_stats {
|
||||||
u32 skb_allocated;
|
u32 skb_allocated;
|
||||||
u32 skb_completed;
|
u32 skb_completed;
|
||||||
u32 skb_completed_bytes;
|
u32 skb_completed_bytes;
|
||||||
u32 skb_dropped;
|
u32 skb_dropped;
|
||||||
u32 err_crc;
|
|
||||||
u32 err_decrypt_crc;
|
|
||||||
u32 err_mic;
|
|
||||||
u32 err_pre_delim;
|
|
||||||
u32 err_post_delim;
|
|
||||||
u32 err_decrypt_busy;
|
|
||||||
u32 err_phy;
|
|
||||||
u32 err_phy_stats[ATH9K_PHYERR_MAX];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ath9k_debug {
|
struct ath9k_debug {
|
||||||
struct dentry *debugfs_phy;
|
struct dentry *debugfs_phy;
|
||||||
struct ath_tx_stats tx_stats;
|
struct ath_tx_stats tx_stats;
|
||||||
struct ath_rx_stats rx_stats;
|
struct ath_rx_stats rx_stats;
|
||||||
|
struct ath_skbrx_stats skbrx_stats;
|
||||||
};
|
};
|
||||||
|
|
||||||
void ath9k_htc_get_et_strings(struct ieee80211_hw *hw,
|
void ath9k_htc_get_et_strings(struct ieee80211_hw *hw,
|
||||||
|
@ -243,30 +243,9 @@ static const struct file_operations fops_xmit = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void ath9k_htc_err_stat_rx(struct ath9k_htc_priv *priv,
|
void ath9k_htc_err_stat_rx(struct ath9k_htc_priv *priv,
|
||||||
struct ath_htc_rx_status *rxs)
|
struct ath_rx_status *rs)
|
||||||
{
|
{
|
||||||
#define RX_PHY_ERR_INC(c) priv->debug.rx_stats.err_phy_stats[c]++
|
ath9k_cmn_debug_stat_rx(&priv->debug.rx_stats, rs);
|
||||||
|
|
||||||
if (rxs->rs_status & ATH9K_RXERR_CRC)
|
|
||||||
priv->debug.rx_stats.err_crc++;
|
|
||||||
if (rxs->rs_status & ATH9K_RXERR_DECRYPT)
|
|
||||||
priv->debug.rx_stats.err_decrypt_crc++;
|
|
||||||
if (rxs->rs_status & ATH9K_RXERR_MIC)
|
|
||||||
priv->debug.rx_stats.err_mic++;
|
|
||||||
if (rxs->rs_status & ATH9K_RX_DELIM_CRC_PRE)
|
|
||||||
priv->debug.rx_stats.err_pre_delim++;
|
|
||||||
if (rxs->rs_status & ATH9K_RX_DELIM_CRC_POST)
|
|
||||||
priv->debug.rx_stats.err_post_delim++;
|
|
||||||
if (rxs->rs_status & ATH9K_RX_DECRYPT_BUSY)
|
|
||||||
priv->debug.rx_stats.err_decrypt_busy++;
|
|
||||||
|
|
||||||
if (rxs->rs_status & ATH9K_RXERR_PHY) {
|
|
||||||
priv->debug.rx_stats.err_phy++;
|
|
||||||
if (rxs->rs_phyerr < ATH9K_PHYERR_MAX)
|
|
||||||
RX_PHY_ERR_INC(rxs->rs_phyerr);
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef RX_PHY_ERR_INC
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t read_file_recv(struct file *file, char __user *user_buf,
|
static ssize_t read_file_recv(struct file *file, char __user *user_buf,
|
||||||
@ -274,7 +253,7 @@ static ssize_t read_file_recv(struct file *file, char __user *user_buf,
|
|||||||
{
|
{
|
||||||
#define PHY_ERR(s, p) \
|
#define PHY_ERR(s, p) \
|
||||||
len += scnprintf(buf + len, size - len, "%20s : %10u\n", s, \
|
len += scnprintf(buf + len, size - len, "%20s : %10u\n", s, \
|
||||||
priv->debug.rx_stats.err_phy_stats[p]);
|
priv->debug.rx_stats.phy_err_stats[p]);
|
||||||
|
|
||||||
struct ath9k_htc_priv *priv = file->private_data;
|
struct ath9k_htc_priv *priv = file->private_data;
|
||||||
char *buf;
|
char *buf;
|
||||||
@ -287,36 +266,13 @@ static ssize_t read_file_recv(struct file *file, char __user *user_buf,
|
|||||||
|
|
||||||
len += scnprintf(buf + len, size - len,
|
len += scnprintf(buf + len, size - len,
|
||||||
"%20s : %10u\n", "SKBs allocated",
|
"%20s : %10u\n", "SKBs allocated",
|
||||||
priv->debug.rx_stats.skb_allocated);
|
priv->debug.skbrx_stats.skb_allocated);
|
||||||
len += scnprintf(buf + len, size - len,
|
len += scnprintf(buf + len, size - len,
|
||||||
"%20s : %10u\n", "SKBs completed",
|
"%20s : %10u\n", "SKBs completed",
|
||||||
priv->debug.rx_stats.skb_completed);
|
priv->debug.skbrx_stats.skb_completed);
|
||||||
len += scnprintf(buf + len, size - len,
|
len += scnprintf(buf + len, size - len,
|
||||||
"%20s : %10u\n", "SKBs Dropped",
|
"%20s : %10u\n", "SKBs Dropped",
|
||||||
priv->debug.rx_stats.skb_dropped);
|
priv->debug.skbrx_stats.skb_dropped);
|
||||||
|
|
||||||
len += scnprintf(buf + len, size - len,
|
|
||||||
"%20s : %10u\n", "CRC ERR",
|
|
||||||
priv->debug.rx_stats.err_crc);
|
|
||||||
len += scnprintf(buf + len, size - len,
|
|
||||||
"%20s : %10u\n", "DECRYPT CRC ERR",
|
|
||||||
priv->debug.rx_stats.err_decrypt_crc);
|
|
||||||
len += scnprintf(buf + len, size - len,
|
|
||||||
"%20s : %10u\n", "MIC ERR",
|
|
||||||
priv->debug.rx_stats.err_mic);
|
|
||||||
len += scnprintf(buf + len, size - len,
|
|
||||||
"%20s : %10u\n", "PRE-DELIM CRC ERR",
|
|
||||||
priv->debug.rx_stats.err_pre_delim);
|
|
||||||
len += scnprintf(buf + len, size - len,
|
|
||||||
"%20s : %10u\n", "POST-DELIM CRC ERR",
|
|
||||||
priv->debug.rx_stats.err_post_delim);
|
|
||||||
len += scnprintf(buf + len, size - len,
|
|
||||||
"%20s : %10u\n", "DECRYPT BUSY ERR",
|
|
||||||
priv->debug.rx_stats.err_decrypt_busy);
|
|
||||||
len += scnprintf(buf + len, size - len,
|
|
||||||
"%20s : %10u\n", "TOTAL PHY ERR",
|
|
||||||
priv->debug.rx_stats.err_phy);
|
|
||||||
|
|
||||||
|
|
||||||
PHY_ERR("UNDERRUN", ATH9K_PHYERR_UNDERRUN);
|
PHY_ERR("UNDERRUN", ATH9K_PHYERR_UNDERRUN);
|
||||||
PHY_ERR("TIMING", ATH9K_PHYERR_TIMING);
|
PHY_ERR("TIMING", ATH9K_PHYERR_TIMING);
|
||||||
@ -530,6 +486,8 @@ int ath9k_htc_get_et_sset_count(struct ieee80211_hw *hw,
|
|||||||
|
|
||||||
#define STXBASE priv->debug.tx_stats
|
#define STXBASE priv->debug.tx_stats
|
||||||
#define SRXBASE priv->debug.rx_stats
|
#define SRXBASE priv->debug.rx_stats
|
||||||
|
#define SKBTXBASE priv->debug.tx_stats
|
||||||
|
#define SKBRXBASE priv->debug.skbrx_stats
|
||||||
#define ASTXQ(a) \
|
#define ASTXQ(a) \
|
||||||
data[i++] = STXBASE.a[IEEE80211_AC_BE]; \
|
data[i++] = STXBASE.a[IEEE80211_AC_BE]; \
|
||||||
data[i++] = STXBASE.a[IEEE80211_AC_BK]; \
|
data[i++] = STXBASE.a[IEEE80211_AC_BK]; \
|
||||||
@ -543,24 +501,24 @@ void ath9k_htc_get_et_stats(struct ieee80211_hw *hw,
|
|||||||
struct ath9k_htc_priv *priv = hw->priv;
|
struct ath9k_htc_priv *priv = hw->priv;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
data[i++] = STXBASE.skb_success;
|
data[i++] = SKBTXBASE.skb_success;
|
||||||
data[i++] = STXBASE.skb_success_bytes;
|
data[i++] = SKBTXBASE.skb_success_bytes;
|
||||||
data[i++] = SRXBASE.skb_completed;
|
data[i++] = SKBRXBASE.skb_completed;
|
||||||
data[i++] = SRXBASE.skb_completed_bytes;
|
data[i++] = SKBRXBASE.skb_completed_bytes;
|
||||||
|
|
||||||
ASTXQ(queue_stats);
|
ASTXQ(queue_stats);
|
||||||
|
|
||||||
data[i++] = SRXBASE.err_crc;
|
data[i++] = SRXBASE.crc_err;
|
||||||
data[i++] = SRXBASE.err_decrypt_crc;
|
data[i++] = SRXBASE.decrypt_crc_err;
|
||||||
data[i++] = SRXBASE.err_phy;
|
data[i++] = SRXBASE.phy_err;
|
||||||
data[i++] = SRXBASE.err_mic;
|
data[i++] = SRXBASE.mic_err;
|
||||||
data[i++] = SRXBASE.err_pre_delim;
|
data[i++] = SRXBASE.pre_delim_crc_err;
|
||||||
data[i++] = SRXBASE.err_post_delim;
|
data[i++] = SRXBASE.post_delim_crc_err;
|
||||||
data[i++] = SRXBASE.err_decrypt_busy;
|
data[i++] = SRXBASE.decrypt_busy_err;
|
||||||
|
|
||||||
data[i++] = SRXBASE.err_phy_stats[ATH9K_PHYERR_RADAR];
|
data[i++] = SRXBASE.phy_err_stats[ATH9K_PHYERR_RADAR];
|
||||||
data[i++] = SRXBASE.err_phy_stats[ATH9K_PHYERR_OFDM_TIMING];
|
data[i++] = SRXBASE.phy_err_stats[ATH9K_PHYERR_OFDM_TIMING];
|
||||||
data[i++] = SRXBASE.err_phy_stats[ATH9K_PHYERR_CCK_TIMING];
|
data[i++] = SRXBASE.phy_err_stats[ATH9K_PHYERR_CCK_TIMING];
|
||||||
|
|
||||||
WARN_ON(i != ATH9K_HTC_SSTATS_LEN);
|
WARN_ON(i != ATH9K_HTC_SSTATS_LEN);
|
||||||
}
|
}
|
||||||
|
@ -996,8 +996,6 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,
|
|||||||
goto rx_next;
|
goto rx_next;
|
||||||
}
|
}
|
||||||
|
|
||||||
ath9k_htc_err_stat_rx(priv, rxstatus);
|
|
||||||
|
|
||||||
/* Get the RX status information */
|
/* Get the RX status information */
|
||||||
|
|
||||||
memset(rx_status, 0, sizeof(struct ieee80211_rx_status));
|
memset(rx_status, 0, sizeof(struct ieee80211_rx_status));
|
||||||
@ -1005,6 +1003,7 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,
|
|||||||
/* Copy everything from ath_htc_rx_status (HTC_RX_FRAME_HEADER).
|
/* Copy everything from ath_htc_rx_status (HTC_RX_FRAME_HEADER).
|
||||||
* After this, we can drop this part of skb. */
|
* After this, we can drop this part of skb. */
|
||||||
rx_status_htc_to_ath(&rx_stats, rxstatus);
|
rx_status_htc_to_ath(&rx_stats, rxstatus);
|
||||||
|
ath9k_htc_err_stat_rx(priv, &rx_stats);
|
||||||
rx_status->mactime = be64_to_cpu(rxstatus->rs_tstamp);
|
rx_status->mactime = be64_to_cpu(rxstatus->rs_tstamp);
|
||||||
skb_pull(skb, HTC_RX_FRAME_HEADER_SIZE);
|
skb_pull(skb, HTC_RX_FRAME_HEADER_SIZE);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user