diff options
author | Don Fry <donald.h.fry@intel.com> | 2011-07-08 11:46:29 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-07-11 15:02:10 -0400 |
commit | 5c3d29fc0d083e674c09407f1bc78e9dbf4ae8a5 (patch) | |
tree | aacef653a991d96398cbbfce5524375b17dac611 /drivers/net/wireless/iwlwifi/iwl-rx.c | |
parent | 4e308119771573f949203f9f4732bcbfb9628279 (diff) |
iwlagn: remove iwlagn_hcmd_utils structure and call directly
Not needed since the driver split. Move single use routines to
calling location and keep static where possible.
Signed-off-by: Don Fry <donald.h.fry@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-rx.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-rx.c | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c index 1690b49bb136..f3f3efe38ce2 100644 --- a/drivers/net/wireless/iwlwifi/iwl-rx.c +++ b/drivers/net/wireless/iwlwifi/iwl-rx.c | |||
@@ -902,6 +902,47 @@ static u32 iwl_translate_rx_status(struct iwl_priv *priv, u32 decrypt_in) | |||
902 | return decrypt_out; | 902 | return decrypt_out; |
903 | } | 903 | } |
904 | 904 | ||
905 | /* Calc max signal level (dBm) among 3 possible receivers */ | ||
906 | static int iwlagn_calc_rssi(struct iwl_priv *priv, | ||
907 | struct iwl_rx_phy_res *rx_resp) | ||
908 | { | ||
909 | /* data from PHY/DSP regarding signal strength, etc., | ||
910 | * contents are always there, not configurable by host | ||
911 | */ | ||
912 | struct iwlagn_non_cfg_phy *ncphy = | ||
913 | (struct iwlagn_non_cfg_phy *)rx_resp->non_cfg_phy_buf; | ||
914 | u32 val, rssi_a, rssi_b, rssi_c, max_rssi; | ||
915 | u8 agc; | ||
916 | |||
917 | val = le32_to_cpu(ncphy->non_cfg_phy[IWLAGN_RX_RES_AGC_IDX]); | ||
918 | agc = (val & IWLAGN_OFDM_AGC_MSK) >> IWLAGN_OFDM_AGC_BIT_POS; | ||
919 | |||
920 | /* Find max rssi among 3 possible receivers. | ||
921 | * These values are measured by the digital signal processor (DSP). | ||
922 | * They should stay fairly constant even as the signal strength varies, | ||
923 | * if the radio's automatic gain control (AGC) is working right. | ||
924 | * AGC value (see below) will provide the "interesting" info. | ||
925 | */ | ||
926 | val = le32_to_cpu(ncphy->non_cfg_phy[IWLAGN_RX_RES_RSSI_AB_IDX]); | ||
927 | rssi_a = (val & IWLAGN_OFDM_RSSI_INBAND_A_BITMSK) >> | ||
928 | IWLAGN_OFDM_RSSI_A_BIT_POS; | ||
929 | rssi_b = (val & IWLAGN_OFDM_RSSI_INBAND_B_BITMSK) >> | ||
930 | IWLAGN_OFDM_RSSI_B_BIT_POS; | ||
931 | val = le32_to_cpu(ncphy->non_cfg_phy[IWLAGN_RX_RES_RSSI_C_IDX]); | ||
932 | rssi_c = (val & IWLAGN_OFDM_RSSI_INBAND_C_BITMSK) >> | ||
933 | IWLAGN_OFDM_RSSI_C_BIT_POS; | ||
934 | |||
935 | max_rssi = max_t(u32, rssi_a, rssi_b); | ||
936 | max_rssi = max_t(u32, max_rssi, rssi_c); | ||
937 | |||
938 | IWL_DEBUG_STATS(priv, "Rssi In A %d B %d C %d Max %d AGC dB %d\n", | ||
939 | rssi_a, rssi_b, rssi_c, max_rssi, agc); | ||
940 | |||
941 | /* dBm = max_rssi dB - agc dB - constant. | ||
942 | * Higher AGC (higher radio gain) means lower signal. */ | ||
943 | return max_rssi - agc - IWLAGN_RSSI_OFFSET; | ||
944 | } | ||
945 | |||
905 | /* Called for REPLY_RX (legacy ABG frames), or | 946 | /* Called for REPLY_RX (legacy ABG frames), or |
906 | * REPLY_RX_MPDU_CMD (HT high-throughput N frames). */ | 947 | * REPLY_RX_MPDU_CMD (HT high-throughput N frames). */ |
907 | static void iwl_rx_reply_rx(struct iwl_priv *priv, | 948 | static void iwl_rx_reply_rx(struct iwl_priv *priv, |
@@ -983,7 +1024,7 @@ static void iwl_rx_reply_rx(struct iwl_priv *priv, | |||
983 | priv->ucode_beacon_time = le32_to_cpu(phy_res->beacon_time_stamp); | 1024 | priv->ucode_beacon_time = le32_to_cpu(phy_res->beacon_time_stamp); |
984 | 1025 | ||
985 | /* Find max signal strength (dBm) among 3 antenna/receiver chains */ | 1026 | /* Find max signal strength (dBm) among 3 antenna/receiver chains */ |
986 | rx_status.signal = priv->cfg->ops->utils->calc_rssi(priv, phy_res); | 1027 | rx_status.signal = iwlagn_calc_rssi(priv, phy_res); |
987 | 1028 | ||
988 | iwl_dbg_log_rx_data_frame(priv, len, header); | 1029 | iwl_dbg_log_rx_data_frame(priv, len, header); |
989 | IWL_DEBUG_STATS_LIMIT(priv, "Rssi %d, TSF %llu\n", | 1030 | IWL_DEBUG_STATS_LIMIT(priv, "Rssi %d, TSF %llu\n", |