@@ -622,20 +622,24 @@ static int iwl_calc_sig_qual(int rssi_dbm, int noise_dbm)
622
622
return sig_qual ;
623
623
}
624
624
625
- #ifdef CONFIG_IWLWIFI_DEBUG
625
+ /* Calc max signal level (dBm) among 3 possible receivers */
626
+ static inline int iwl_calc_rssi (struct iwl_priv * priv ,
627
+ struct iwl_rx_phy_res * rx_resp )
628
+ {
629
+ return priv -> cfg -> ops -> utils -> calc_rssi (priv , rx_resp );
630
+ }
626
631
632
+ #ifdef CONFIG_IWLWIFI_DEBUG
627
633
/**
628
634
* iwl_dbg_report_frame - dump frame to syslog during debug sessions
629
635
*
630
636
* You may hack this function to show different aspects of received frames,
631
637
* including selective frame dumps.
632
- * group100 parameter selects whether to show 1 out of 100 good frames.
633
- *
634
- * TODO: This was originally written for 3945, need to audit for
635
- * proper operation with 4965.
638
+ * group100 parameter selects whether to show 1 out of 100 good data frames.
639
+ * All beacon and probe response frames are printed.
636
640
*/
637
641
static void iwl_dbg_report_frame (struct iwl_priv * priv ,
638
- struct iwl_rx_packet * pkt ,
642
+ struct iwl_rx_phy_res * phy_res , u16 length ,
639
643
struct ieee80211_hdr * header , int group100 )
640
644
{
641
645
u32 to_us ;
@@ -647,20 +651,9 @@ static void iwl_dbg_report_frame(struct iwl_priv *priv,
647
651
u16 seq_ctl ;
648
652
u16 channel ;
649
653
u16 phy_flags ;
650
- int rate_sym ;
651
- u16 length ;
652
- u16 status ;
653
- u16 bcn_tmr ;
654
+ u32 rate_n_flags ;
654
655
u32 tsf_low ;
655
- u64 tsf ;
656
- u8 rssi ;
657
- u8 agc ;
658
- u16 sig_avg ;
659
- u16 noise_diff ;
660
- struct iwl4965_rx_frame_stats * rx_stats = IWL_RX_STATS (pkt );
661
- struct iwl4965_rx_frame_hdr * rx_hdr = IWL_RX_HDR (pkt );
662
- struct iwl4965_rx_frame_end * rx_end = IWL_RX_END (pkt );
663
- u8 * data = IWL_RX_DATA (pkt );
656
+ int rssi ;
664
657
665
658
if (likely (!(priv -> debug_level & IWL_DL_RX )))
666
659
return ;
@@ -670,22 +663,13 @@ static void iwl_dbg_report_frame(struct iwl_priv *priv,
670
663
seq_ctl = le16_to_cpu (header -> seq_ctrl );
671
664
672
665
/* metadata */
673
- channel = le16_to_cpu (rx_hdr -> channel );
674
- phy_flags = le16_to_cpu (rx_hdr -> phy_flags );
675
- rate_sym = rx_hdr -> rate ;
676
- length = le16_to_cpu (rx_hdr -> len );
677
-
678
- /* end-of-frame status and timestamp */
679
- status = le32_to_cpu (rx_end -> status );
680
- bcn_tmr = le32_to_cpu (rx_end -> beacon_timestamp );
681
- tsf_low = le64_to_cpu (rx_end -> timestamp ) & 0x0ffffffff ;
682
- tsf = le64_to_cpu (rx_end -> timestamp );
666
+ channel = le16_to_cpu (phy_res -> channel );
667
+ phy_flags = le16_to_cpu (phy_res -> phy_flags );
668
+ rate_n_flags = le32_to_cpu (phy_res -> rate_n_flags );
683
669
684
670
/* signal statistics */
685
- rssi = rx_stats -> rssi ;
686
- agc = rx_stats -> agc ;
687
- sig_avg = le16_to_cpu (rx_stats -> sig_avg );
688
- noise_diff = le16_to_cpu (rx_stats -> noise_diff );
671
+ rssi = iwl_calc_rssi (priv , phy_res );
672
+ tsf_low = le64_to_cpu (phy_res -> timestamp ) & 0x0ffffffff ;
689
673
690
674
to_us = !compare_ether_addr (header -> addr1 , priv -> mac_addr );
691
675
@@ -739,11 +723,13 @@ static void iwl_dbg_report_frame(struct iwl_priv *priv,
739
723
else
740
724
title = "Frame" ;
741
725
742
- rate_idx = iwl_hwrate_to_plcp_idx (rate_sym );
743
- if (unlikely (rate_idx == -1 ))
726
+ rate_idx = iwl_hwrate_to_plcp_idx (rate_n_flags );
727
+ if (unlikely (( rate_idx < 0 ) || ( rate_idx >= IWL_RATE_COUNT ))) {
744
728
bitrate = 0 ;
745
- else
729
+ WARN_ON_ONCE (1 );
730
+ } else {
746
731
bitrate = iwl_rates [rate_idx ].ieee / 2 ;
732
+ }
747
733
748
734
/* print frame summary.
749
735
* MAC addresses show just the last byte (for brevity),
@@ -755,23 +741,22 @@ static void iwl_dbg_report_frame(struct iwl_priv *priv,
755
741
length , rssi , channel , bitrate );
756
742
else {
757
743
/* src/dst addresses assume managed mode */
758
- IWL_DEBUG_RX ("%s: 0x%04x, dst=0x%02x, "
759
- "src=0x%02x , rssi=%u , tim=%lu usec, "
744
+ IWL_DEBUG_RX ("%s: 0x%04x, dst=0x%02x, src=0x%02x, "
745
+ "len=%u , rssi=%d , tim=%lu usec, "
760
746
"phy=0x%02x, chnl=%d\n" ,
761
747
title , le16_to_cpu (fc ), header -> addr1 [5 ],
762
- header -> addr3 [5 ], rssi ,
748
+ header -> addr3 [5 ], length , rssi ,
763
749
tsf_low - priv -> scan_start_tsf ,
764
750
phy_flags , channel );
765
751
}
766
752
}
767
753
if (print_dump )
768
- iwl_print_hex_dump (priv , IWL_DL_RX , data , length );
754
+ iwl_print_hex_dump (priv , IWL_DL_RX , header , length );
769
755
}
770
756
#else
771
- static inline void iwl_dbg_report_frame (struct iwl_priv * priv ,
772
- struct iwl_rx_packet * pkt ,
773
- struct ieee80211_hdr * header ,
774
- int group100 )
757
+ static void iwl_dbg_report_frame (struct iwl_priv * priv ,
758
+ struct iwl_rx_phy_res * phy_res , u16 length ,
759
+ struct ieee80211_hdr * header , int group100 )
775
760
{
776
761
}
777
762
#endif
@@ -966,14 +951,6 @@ static void iwl_pass_packet_to_mac80211(struct iwl_priv *priv,
966
951
rxb -> skb = NULL ;
967
952
}
968
953
969
- /* Calc max signal level (dBm) among 3 possible receivers */
970
- static inline int iwl_calc_rssi (struct iwl_priv * priv ,
971
- struct iwl_rx_phy_res * rx_resp )
972
- {
973
- return priv -> cfg -> ops -> utils -> calc_rssi (priv , rx_resp );
974
- }
975
-
976
-
977
954
/* This is necessary only for a number of statistics, see the caller. */
978
955
static int iwl_is_network_packet (struct iwl_priv * priv ,
979
956
struct ieee80211_hdr * header )
@@ -1096,8 +1073,8 @@ void iwl_rx_reply_rx(struct iwl_priv *priv,
1096
1073
priv -> last_rx_noise = IWL_NOISE_MEAS_NOT_AVAILABLE ;
1097
1074
1098
1075
/* Set "1" to report good data frames in groups of 100 */
1099
- /* FIXME: need to optimize the call: */
1100
- iwl_dbg_report_frame (priv , pkt , header , 1 );
1076
+ if ( unlikely ( priv -> debug_level & IWL_DL_RX ))
1077
+ iwl_dbg_report_frame (priv , rx_start , len , header , 1 );
1101
1078
1102
1079
IWL_DEBUG_STATS_LIMIT ("Rssi %d, noise %d, qual %d, TSF %llu\n" ,
1103
1080
rx_status .signal , rx_status .noise , rx_status .signal ,
0 commit comments