iwlwifi: use generic mac80211 radiotap headers
PATCH 1/1 iwlwifi: use generic mac80211 radiotap headers
remove drivers own implementation of radiotap in favor of the generic one provided by mac80211.
also remove priv->add_radiotap because it is not used any more.
Signed-off-by Bruno Randolf <[email protected]>
---
drivers/net/wireless/iwlwifi/iwl-3945.c | 105 +-------------------- drivers/net/wireless/iwlwifi/iwl-3945.h | 1 drivers/net/wireless/iwlwifi/iwl-dev.h | 1 drivers/net/wireless/iwlwifi/iwl-rx.c | 133 ++++----------------------- drivers/net/wireless/iwlwifi/iwl4965-base.c | 2 5 files changed, 27 insertions(+), 215 deletions(-)
drivers/net/wireless/iwlwifi/iwl-3945.c +7 -98
@@ -514,100 +514,6 @@ static inline void iwl3945_dbg_report_frame(struct iwl3945_priv *priv, }#endif - -static void iwl3945_add_radiotap (struct iwl3945_priv *priv, -struct sk_buff *skb, -struct iwl3945_rx_frame_hdr *rx_hdr, -struct ieee80211_rx_status *stats) -{ -/* First cache any information we need before we overwrite -* the information provided in the skb from the hardware */ -s8 signal = stats->signal; -s8 noise =0 ; -int rate = stats->rate_idx; -u64 tsf = stats->mactime; -__le16 phy_flags_hw = rx_hdr->phy_flags, antenna; - -struct iwl3945_rt_rx_hdr { -struct ieee80211_radiotap_header rt_hdr; -__le64 rt_tsf;/* TSF */ -u8 rt_flags;/* radiotap packet flags */ -u8 rt_rate;/* rate in 500kb/s */ -__le16 rt_channelMHz;/* channel in MHz */ -__le16 rt_chbitmask;/* channel bitfield */ -s8 rt_dbmsignal;/* signal in dBm, kluged to signed */ -s8 rt_dbmnoise; -u8 rt_antenna;/* antenna number */ - } __attribute__ ((packed)) *iwl3945_rt; - -if (skb_headroom (skb) <sizeof (*iwl3945_rt)) { -if (net_ratelimit ()) -printk (KERN_ERR "not enough headroom [%d] for " -"radiotap head [%zd]\n" , -skb_headroom (skb),sizeof (*iwl3945_rt)); -return ; - } - -/* put radiotap header in front of 802.11 header and data */ - iwl3945_rt = (void *)skb_push (skb,sizeof (*iwl3945_rt)); - -/* initialise radiotap header */ - iwl3945_rt->rt_hdr.it_version =PKTHDR_RADIOTAP_VERSION ; - iwl3945_rt->rt_hdr.it_pad =0 ; - -/* total header + data */ -put_unaligned_le16 (sizeof (*iwl3945_rt), &iwl3945_rt->rt_hdr.it_len); - -/* Indicate all the fields we add to the radiotap header */ -put_unaligned_le32 ((1 <<IEEE80211_RADIOTAP_TSFT ) | - (1 <<IEEE80211_RADIOTAP_FLAGS ) | - (1 <<IEEE80211_RADIOTAP_RATE ) | - (1 <<IEEE80211_RADIOTAP_CHANNEL ) | - (1 <<IEEE80211_RADIOTAP_DBM_ANTSIGNAL ) | - (1 <<IEEE80211_RADIOTAP_DBM_ANTNOISE ) | - (1 <<IEEE80211_RADIOTAP_ANTENNA ), - &iwl3945_rt->rt_hdr.it_present); - -/* Zero the flags, we'll add to them as we go */ - iwl3945_rt->rt_flags =0 ; - -put_unaligned_le64 (tsf, &iwl3945_rt->rt_tsf); - - iwl3945_rt->rt_dbmsignal = signal; - iwl3945_rt->rt_dbmnoise = noise; - -/* Convert the channel frequency and set the flags */ -put_unaligned_le16 (stats->freq, &iwl3945_rt->rt_channelMHz); -if (!(phy_flags_hw &RX_RES_PHY_FLAGS_BAND_24_MSK )) -put_unaligned_le16 (IEEE80211_CHAN_OFDM |IEEE80211_CHAN_5GHZ , - &iwl3945_rt->rt_chbitmask); -else if (phy_flags_hw &RX_RES_PHY_FLAGS_MOD_CCK_MSK ) -put_unaligned_le16 (IEEE80211_CHAN_CCK |IEEE80211_CHAN_2GHZ , - &iwl3945_rt->rt_chbitmask); -else /* 802.11g */ -put_unaligned_le16 (IEEE80211_CHAN_OFDM |IEEE80211_CHAN_2GHZ , - &iwl3945_rt->rt_chbitmask); - -if (rate ==-1 ) - iwl3945_rt->rt_rate =0 ; -else { -if (stats->band ==IEEE80211_BAND_5GHZ ) - rate +=IWL_FIRST_OFDM_RATE ; - - iwl3945_rt->rt_rate = iwl3945_rates[rate].ieee; - } - -/* antenna number */ - antenna = phy_flags_hw &RX_RES_PHY_FLAGS_ANTENNA_MSK ; - iwl3945_rt->rt_antenna =le16_to_cpu (antenna) >>4 ; - -/* set the preamble flag if we have it */ -if (phy_flags_hw &RX_RES_PHY_FLAGS_SHORT_PREAMBLE_MSK ) - iwl3945_rt->rt_flags |=IEEE80211_RADIOTAP_F_SHORTPRE ; - - stats->flag |=RX_FLAG_RADIOTAP ; -} -static void iwl3945_handle_data_packet (struct iwl3945_priv *priv,int is_data,struct iwl3945_rx_mem_buffer *rxb,struct ieee80211_rx_status *stats)
@@ -641,9 +547,6 @@ static void iwl3945_handle_data_packet(struct iwl3945_priv *priv, int is_data,iwl3945_set_decrypted_flag (priv, rxb->skb,le32_to_cpu (rx_end->status), stats); -if (priv->add_radiotap) -iwl3945_add_radiotap (priv, rxb->skb, rx_hdr, stats); -#ifdef CONFIG_IWL3945_LEDS if (is_data) priv->rxtxpackets += len;
@@ -668,7 +571,6 @@ static void iwl3945_rx_reply_rx(struct iwl3945_priv *priv,u16 rx_stats_noise_diff =le16_to_cpu (rx_stats->noise_diff);u8 network_packet; - rx_status.antenna =0 ; rx_status.flag =0 ; rx_status.mactime =le64_to_cpu (rx_end->timestamp); rx_status.freq =
@@ -680,6 +582,13 @@ static void iwl3945_rx_reply_rx(struct iwl3945_priv *priv,if (rx_status.band ==IEEE80211_BAND_5GHZ ) rx_status.rate_idx -=IWL_FIRST_OFDM_RATE ; + rx_status.antenna =le16_to_cpu (rx_hdr->phy_flags & +RX_RES_PHY_FLAGS_ANTENNA_MSK ) >>4 ; + +/* set the preamble flag if appropriate */ +if (rx_hdr->phy_flags &RX_RES_PHY_FLAGS_SHORT_PREAMBLE_MSK ) + rx_status.flag |=RX_FLAG_SHORTPRE ; +if ((unlikely (rx_stats->phy_count >20 ))) {IWL_DEBUG_DROP ("dsp size out of range [0,20]: "
drivers/net/wireless/iwlwifi/iwl-3945.h +0 -1
@@ -718,7 +718,6 @@ struct iwl3945_priv {enum ieee80211_band band;int alloc_rxb_skb; -bool add_radiotap;void (*rx_handlers[REPLY_MAX ])(struct iwl3945_priv *priv,struct iwl3945_rx_mem_buffer *rxb);
drivers/net/wireless/iwlwifi/iwl-dev.h +0 -1
@@ -843,7 +843,6 @@ struct iwl_priv {enum ieee80211_band band;int alloc_rxb_skb; -bool add_radiotap;void (*rx_handlers[REPLY_MAX ])(struct iwl_priv *priv,struct iwl_rx_mem_buffer *rxb);
drivers/net/wireless/iwlwifi/iwl-rx.c +20 -113
157 lines not on this page · raw message
drivers/net/wireless/iwlwifi/iwl4965-base.c +0 -2
@@ -2750,8 +2750,6 @@ static int iwl4965_mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *comutex_lock (&priv->mutex);IWL_DEBUG_MAC80211 ("enter to channel %d\n" , conf->channel->hw_value); - priv->add_radiotap = !!(conf->flags &IEEE80211_CONF_RADIOTAP ); -if (conf->radio_enabled &&iwl_radio_kill_sw_enable_radio (priv)) {IWL_DEBUG_MAC80211 ("leave - RF-KILL - waiting for uCode\n" ); goto out;