diff options
author | Bruno Randolf <br1@einfach.org> | 2008-05-08 13:15:40 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-05-14 16:29:49 -0400 |
commit | 566bfe5a8bcde13188a356f77666f8115813cf31 (patch) | |
tree | 785412c505e9efbd0fac477d71c8ca6945ffce04 /include/net | |
parent | fac371d9f09f461dfe9fbbceb2a38e2e12164dda (diff) |
mac80211: use hardware flags for signal/noise units
trying to clean up the signal/noise code. the previous code in mac80211 had
confusing names for the related variables, did not have much definition of
what units of signal and noise were provided and used implicit mechanisms from
the wireless extensions.
this patch introduces hardware capability flags to let the hardware specify
clearly if it can provide signal and noise level values and which units it can
provide. this also anticipates possible new units like RCPI in the future.
for signal:
IEEE80211_HW_SIGNAL_UNSPEC - unspecified, unknown, hw specific
IEEE80211_HW_SIGNAL_DB - dB difference to unspecified reference point
IEEE80211_HW_SIGNAL_DBM - dBm, difference to 1mW
for noise we currently only have dBm:
IEEE80211_HW_NOISE_DBM - dBm, difference to 1mW
if IEEE80211_HW_SIGNAL_UNSPEC or IEEE80211_HW_SIGNAL_DB is used the driver has
to provide the maximum value (max_signal) it reports in order for applications
to make sense of the signal values.
i tried my best to find out for each driver what it can provide and update it
but i'm not sure (?) for some of them and used the more conservative guess in
doubt. this can be fixed easily after this patch has been merged by changing
the hardware flags of the driver.
DRIVER SIGNAL MAX NOISE QUAL
-----------------------------------------------------------------
adm8211 unspec(?) 100 n/a missing
at76_usb unspec(?) (?) unused missing
ath5k dBm dBm percent rssi
b43legacy dBm dBm percent jssi(?)
b43 dBm dBm percent jssi(?)
iwl-3945 dBm dBm percent snr+more
iwl-4965 dBm dBm percent snr+more
p54 unspec 127 n/a missing
rt2x00 dBm n/a percent rssi+tx/rx frame success
rt2400 dBm n/a
rt2500pci dBm n/a
rt2500usb dBm n/a
rt61pci dBm n/a
rt73usb dBm n/a
rtl8180 unspec(?) 65 n/a (?)
rtl8187 unspec(?) 65 (?) noise(?)
zd1211 dB(?) 100 n/a percent
drivers/net/wireless/ath5k/base.c: Changes-licensed-under: 3-Clause-BSD
Signed-off-by: Bruno Randolf <br1@einfach.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/mac80211.h | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 75a34609eed7..909956c97c44 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -336,13 +336,16 @@ enum mac80211_rx_flags { | |||
336 | * The low-level driver should provide this information (the subset | 336 | * The low-level driver should provide this information (the subset |
337 | * supported by hardware) to the 802.11 code with each received | 337 | * supported by hardware) to the 802.11 code with each received |
338 | * frame. | 338 | * frame. |
339 | * | ||
339 | * @mactime: value in microseconds of the 64-bit Time Synchronization Function | 340 | * @mactime: value in microseconds of the 64-bit Time Synchronization Function |
340 | * (TSF) timer when the first data symbol (MPDU) arrived at the hardware. | 341 | * (TSF) timer when the first data symbol (MPDU) arrived at the hardware. |
341 | * @band: the active band when this frame was received | 342 | * @band: the active band when this frame was received |
342 | * @freq: frequency the radio was tuned to when receiving this frame, in MHz | 343 | * @freq: frequency the radio was tuned to when receiving this frame, in MHz |
343 | * @ssi: signal strength when receiving this frame | 344 | * @signal: signal strength when receiving this frame, either in dBm, in dB or |
344 | * @signal: used as 'qual' in statistics reporting | 345 | * unspecified depending on the hardware capabilities flags |
345 | * @noise: PHY noise when receiving this frame | 346 | * @IEEE80211_HW_SIGNAL_* |
347 | * @noise: noise when receiving this frame, in dBm. | ||
348 | * @qual: overall signal quality indication, in percent (0-100). | ||
346 | * @antenna: antenna used | 349 | * @antenna: antenna used |
347 | * @rate_idx: index of data rate into band's supported rates | 350 | * @rate_idx: index of data rate into band's supported rates |
348 | * @flag: %RX_FLAG_* | 351 | * @flag: %RX_FLAG_* |
@@ -351,9 +354,9 @@ struct ieee80211_rx_status { | |||
351 | u64 mactime; | 354 | u64 mactime; |
352 | enum ieee80211_band band; | 355 | enum ieee80211_band band; |
353 | int freq; | 356 | int freq; |
354 | int ssi; | ||
355 | int signal; | 357 | int signal; |
356 | int noise; | 358 | int noise; |
359 | int qual; | ||
357 | int antenna; | 360 | int antenna; |
358 | int rate_idx; | 361 | int rate_idx; |
359 | int flag; | 362 | int flag; |
@@ -392,7 +395,8 @@ enum ieee80211_tx_status_flags { | |||
392 | * relevant only if IEEE80211_TX_STATUS_AMPDU was set. | 395 | * relevant only if IEEE80211_TX_STATUS_AMPDU was set. |
393 | * @ampdu_ack_map: block ack bit map for the aggregation. | 396 | * @ampdu_ack_map: block ack bit map for the aggregation. |
394 | * relevant only if IEEE80211_TX_STATUS_AMPDU was set. | 397 | * relevant only if IEEE80211_TX_STATUS_AMPDU was set. |
395 | * @ack_signal: signal strength of the ACK frame | 398 | * @ack_signal: signal strength of the ACK frame either in dBm, dB or unspec |
399 | * depending on hardware capabilites flags @IEEE80211_HW_SIGNAL_* | ||
396 | */ | 400 | */ |
397 | struct ieee80211_tx_status { | 401 | struct ieee80211_tx_status { |
398 | struct ieee80211_tx_control control; | 402 | struct ieee80211_tx_control control; |
@@ -703,6 +707,25 @@ enum ieee80211_tkip_key_type { | |||
703 | * @IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE: | 707 | * @IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE: |
704 | * Hardware is not capable of receiving frames with short preamble on | 708 | * Hardware is not capable of receiving frames with short preamble on |
705 | * the 2.4 GHz band. | 709 | * the 2.4 GHz band. |
710 | * | ||
711 | * @IEEE80211_HW_SIGNAL_UNSPEC: | ||
712 | * Hardware can provide signal values but we don't know its units. We | ||
713 | * expect values between 0 and @max_signal. | ||
714 | * If possible please provide dB or dBm instead. | ||
715 | * | ||
716 | * @IEEE80211_HW_SIGNAL_DB: | ||
717 | * Hardware gives signal values in dB, decibel difference from an | ||
718 | * arbitrary, fixed reference. We expect values between 0 and @max_signal. | ||
719 | * If possible please provide dBm instead. | ||
720 | * | ||
721 | * @IEEE80211_HW_SIGNAL_DBM: | ||
722 | * Hardware gives signal values in dBm, decibel difference from | ||
723 | * one milliwatt. This is the preferred method since it is standardized | ||
724 | * between different devices. @max_signal does not need to be set. | ||
725 | * | ||
726 | * @IEEE80211_HW_NOISE_DBM: | ||
727 | * Hardware can provide noise (radio interference) values in units dBm, | ||
728 | * decibel difference from one milliwatt. | ||
706 | */ | 729 | */ |
707 | enum ieee80211_hw_flags { | 730 | enum ieee80211_hw_flags { |
708 | IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE = 1<<0, | 731 | IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE = 1<<0, |
@@ -710,6 +733,10 @@ enum ieee80211_hw_flags { | |||
710 | IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING = 1<<2, | 733 | IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING = 1<<2, |
711 | IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE = 1<<3, | 734 | IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE = 1<<3, |
712 | IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4, | 735 | IEEE80211_HW_2GHZ_SHORT_PREAMBLE_INCAPABLE = 1<<4, |
736 | IEEE80211_HW_SIGNAL_UNSPEC = 1<<5, | ||
737 | IEEE80211_HW_SIGNAL_DB = 1<<6, | ||
738 | IEEE80211_HW_SIGNAL_DBM = 1<<7, | ||
739 | IEEE80211_HW_NOISE_DBM = 1<<8, | ||
713 | }; | 740 | }; |
714 | 741 | ||
715 | /** | 742 | /** |
@@ -740,12 +767,8 @@ enum ieee80211_hw_flags { | |||
740 | * | 767 | * |
741 | * @channel_change_time: time (in microseconds) it takes to change channels. | 768 | * @channel_change_time: time (in microseconds) it takes to change channels. |
742 | * | 769 | * |
743 | * @max_rssi: Maximum value for ssi in RX information, use | 770 | * @max_signal: Maximum value for signal (rssi) in RX information, used |
744 | * negative numbers for dBm and 0 to indicate no support. | 771 | * only when @IEEE80211_HW_SIGNAL_UNSPEC or @IEEE80211_HW_SIGNAL_DB |
745 | * | ||
746 | * @max_signal: like @max_rssi, but for the signal value. | ||
747 | * | ||
748 | * @max_noise: like @max_rssi, but for the noise value. | ||
749 | * | 772 | * |
750 | * @queues: number of available hardware transmit queues for | 773 | * @queues: number of available hardware transmit queues for |
751 | * data packets. WMM/QoS requires at least four, these | 774 | * data packets. WMM/QoS requires at least four, these |
@@ -775,9 +798,7 @@ struct ieee80211_hw { | |||
775 | int channel_change_time; | 798 | int channel_change_time; |
776 | int vif_data_size; | 799 | int vif_data_size; |
777 | u16 queues, ampdu_queues; | 800 | u16 queues, ampdu_queues; |
778 | s8 max_rssi; | ||
779 | s8 max_signal; | 801 | s8 max_signal; |
780 | s8 max_noise; | ||
781 | }; | 802 | }; |
782 | 803 | ||
783 | /** | 804 | /** |