mirror of
https://github.com/adulau/aha.git
synced 2025-01-04 07:03:38 +00:00
iwlwifi: Add TX/RX statistcs to driver
This patch supports collecting of TX and RX statistics in the driver. Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
c79dd5b5bc
commit
19758bef09
3 changed files with 24 additions and 1 deletions
|
@ -3337,6 +3337,14 @@ static void iwl4965_add_radiotap(struct iwl_priv *priv,
|
||||||
stats->flag |= RX_FLAG_RADIOTAP;
|
stats->flag |= RX_FLAG_RADIOTAP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void iwl_update_rx_stats(struct iwl_priv *priv, u16 fc, u16 len)
|
||||||
|
{
|
||||||
|
/* 0 - mgmt, 1 - cnt, 2 - data */
|
||||||
|
int idx = (fc & IEEE80211_FCTL_FTYPE) >> 2;
|
||||||
|
priv->rx_stats[idx].cnt++;
|
||||||
|
priv->rx_stats[idx].bytes += len;
|
||||||
|
}
|
||||||
|
|
||||||
static void iwl4965_handle_data_packet(struct iwl_priv *priv, int is_data,
|
static void iwl4965_handle_data_packet(struct iwl_priv *priv, int is_data,
|
||||||
int include_phy,
|
int include_phy,
|
||||||
struct iwl4965_rx_mem_buffer *rxb,
|
struct iwl4965_rx_mem_buffer *rxb,
|
||||||
|
@ -3406,6 +3414,7 @@ static void iwl4965_handle_data_packet(struct iwl_priv *priv, int is_data,
|
||||||
if (priv->add_radiotap)
|
if (priv->add_radiotap)
|
||||||
iwl4965_add_radiotap(priv, rxb->skb, rx_start, stats, ampdu_status);
|
iwl4965_add_radiotap(priv, rxb->skb, rx_start, stats, ampdu_status);
|
||||||
|
|
||||||
|
iwl_update_rx_stats(priv, le16_to_cpu(hdr->frame_control), len);
|
||||||
ieee80211_rx_irqsafe(priv->hw, rxb->skb, stats);
|
ieee80211_rx_irqsafe(priv->hw, rxb->skb, stats);
|
||||||
priv->alloc_rxb_skb--;
|
priv->alloc_rxb_skb--;
|
||||||
rxb->skb = NULL;
|
rxb->skb = NULL;
|
||||||
|
|
|
@ -1107,6 +1107,12 @@ struct iwl_priv {
|
||||||
int last_rx_rssi; /* From Rx packet statisitics */
|
int last_rx_rssi; /* From Rx packet statisitics */
|
||||||
int last_rx_noise; /* From beacon statistics */
|
int last_rx_noise; /* From beacon statistics */
|
||||||
|
|
||||||
|
/* counts mgmt, ctl, and data packets */
|
||||||
|
struct traffic_stats {
|
||||||
|
u32 cnt;
|
||||||
|
u64 bytes;
|
||||||
|
} tx_stats[3], rx_stats[3];
|
||||||
|
|
||||||
struct iwl4965_power_mgr power_data;
|
struct iwl4965_power_mgr power_data;
|
||||||
|
|
||||||
struct iwl4965_notif_statistics statistics;
|
struct iwl4965_notif_statistics statistics;
|
||||||
|
|
|
@ -2529,7 +2529,13 @@ static void iwl4965_build_tx_cmd_basic(struct iwl_priv *priv,
|
||||||
cmd->cmd.tx.tx_flags = tx_flags;
|
cmd->cmd.tx.tx_flags = tx_flags;
|
||||||
cmd->cmd.tx.next_frame_len = 0;
|
cmd->cmd.tx.next_frame_len = 0;
|
||||||
}
|
}
|
||||||
|
static void iwl_update_tx_stats(struct iwl_priv *priv, u16 fc, u16 len)
|
||||||
|
{
|
||||||
|
/* 0 - mgmt, 1 - cnt, 2 - data */
|
||||||
|
int idx = (fc & IEEE80211_FCTL_FTYPE) >> 2;
|
||||||
|
priv->tx_stats[idx].cnt++;
|
||||||
|
priv->tx_stats[idx].bytes += len;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* iwl4965_get_sta_id - Find station's index within station table
|
* iwl4965_get_sta_id - Find station's index within station table
|
||||||
*
|
*
|
||||||
|
@ -2776,6 +2782,8 @@ static int iwl4965_tx_skb(struct iwl_priv *priv,
|
||||||
/* set is_hcca to 0; it probably will never be implemented */
|
/* set is_hcca to 0; it probably will never be implemented */
|
||||||
iwl4965_hw_build_tx_cmd_rate(priv, out_cmd, ctl, hdr, sta_id, 0);
|
iwl4965_hw_build_tx_cmd_rate(priv, out_cmd, ctl, hdr, sta_id, 0);
|
||||||
|
|
||||||
|
iwl_update_tx_stats(priv, fc, len);
|
||||||
|
|
||||||
scratch_phys = txcmd_phys + sizeof(struct iwl4965_cmd_header) +
|
scratch_phys = txcmd_phys + sizeof(struct iwl4965_cmd_header) +
|
||||||
offsetof(struct iwl4965_tx_cmd, scratch);
|
offsetof(struct iwl4965_tx_cmd, scratch);
|
||||||
out_cmd->cmd.tx.dram_lsb_ptr = cpu_to_le32(scratch_phys);
|
out_cmd->cmd.tx.dram_lsb_ptr = cpu_to_le32(scratch_phys);
|
||||||
|
|
Loading…
Reference in a new issue