diff options
Diffstat (limited to 'include/net/mac80211.h')
-rw-r--r-- | include/net/mac80211.h | 51 |
1 files changed, 33 insertions, 18 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 2c10eac637d8..3754ea405c88 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -219,7 +219,7 @@ struct ieee80211_bss_conf { | |||
219 | * | 219 | * |
220 | * These flags are used with the @flags member of &ieee80211_tx_info. | 220 | * These flags are used with the @flags member of &ieee80211_tx_info. |
221 | * | 221 | * |
222 | * @IEEE80211_TX_CTL_REQ_TX_STATUS: request TX status callback for this frame. | 222 | * @IEEE80211_TX_CTL_REQ_TX_STATUS: require TX status callback for this frame. |
223 | * @IEEE80211_TX_CTL_ASSIGN_SEQ: The driver has to assign a sequence | 223 | * @IEEE80211_TX_CTL_ASSIGN_SEQ: The driver has to assign a sequence |
224 | * number to this frame, taking care of not overwriting the fragment | 224 | * number to this frame, taking care of not overwriting the fragment |
225 | * number and increasing the sequence number only when the | 225 | * number and increasing the sequence number only when the |
@@ -390,10 +390,12 @@ struct ieee80211_tx_rate { | |||
390 | * @control: union for control data | 390 | * @control: union for control data |
391 | * @status: union for status data | 391 | * @status: union for status data |
392 | * @driver_data: array of driver_data pointers | 392 | * @driver_data: array of driver_data pointers |
393 | * @ampdu_ack_len: number of aggregated frames. | 393 | * @ampdu_ack_len: number of acked aggregated frames. |
394 | * relevant only if IEEE80211_TX_STATUS_AMPDU was set. | 394 | * relevant only if IEEE80211_TX_STATUS_AMPDU was set. |
395 | * @ampdu_ack_map: block ack bit map for the aggregation. | 395 | * @ampdu_ack_map: block ack bit map for the aggregation. |
396 | * relevant only if IEEE80211_TX_STATUS_AMPDU was set. | 396 | * relevant only if IEEE80211_TX_STATUS_AMPDU was set. |
397 | * @ampdu_len: number of aggregated frames. | ||
398 | * relevant only if IEEE80211_TX_STATUS_AMPDU was set. | ||
397 | * @ack_signal: signal strength of the ACK frame | 399 | * @ack_signal: signal strength of the ACK frame |
398 | */ | 400 | */ |
399 | struct ieee80211_tx_info { | 401 | struct ieee80211_tx_info { |
@@ -428,7 +430,8 @@ struct ieee80211_tx_info { | |||
428 | u8 ampdu_ack_len; | 430 | u8 ampdu_ack_len; |
429 | u64 ampdu_ack_map; | 431 | u64 ampdu_ack_map; |
430 | int ack_signal; | 432 | int ack_signal; |
431 | /* 8 bytes free */ | 433 | u8 ampdu_len; |
434 | /* 7 bytes free */ | ||
432 | } status; | 435 | } status; |
433 | struct { | 436 | struct { |
434 | struct ieee80211_tx_rate driver_rates[ | 437 | struct ieee80211_tx_rate driver_rates[ |
@@ -852,6 +855,19 @@ enum ieee80211_tkip_key_type { | |||
852 | * any particular flags. There are some exceptions to this rule, | 855 | * any particular flags. There are some exceptions to this rule, |
853 | * however, so you are advised to review these flags carefully. | 856 | * however, so you are advised to review these flags carefully. |
854 | * | 857 | * |
858 | * @IEEE80211_HW_HAS_RATE_CONTROL: | ||
859 | * The hardware or firmware includes rate control, and cannot be | ||
860 | * controlled by the stack. As such, no rate control algorithm | ||
861 | * should be instantiated, and the TX rate reported to userspace | ||
862 | * will be taken from the TX status instead of the rate control | ||
863 | * algorithm. | ||
864 | * Note that this requires that the driver implement a number of | ||
865 | * callbacks so it has the correct information, it needs to have | ||
866 | * the @set_rts_threshold callback and must look at the BSS config | ||
867 | * @use_cts_prot for G/N protection, @use_short_slot for slot | ||
868 | * timing in 2.4 GHz and @use_short_preamble for preambles for | ||
869 | * CCK frames. | ||
870 | * | ||
855 | * @IEEE80211_HW_RX_INCLUDES_FCS: | 871 | * @IEEE80211_HW_RX_INCLUDES_FCS: |
856 | * Indicates that received frames passed to the stack include | 872 | * Indicates that received frames passed to the stack include |
857 | * the FCS at the end. | 873 | * the FCS at the end. |
@@ -910,6 +926,7 @@ enum ieee80211_tkip_key_type { | |||
910 | * avoid waking up cpu. | 926 | * avoid waking up cpu. |
911 | */ | 927 | */ |
912 | enum ieee80211_hw_flags { | 928 | enum ieee80211_hw_flags { |
929 | IEEE80211_HW_HAS_RATE_CONTROL = 1<<0, | ||
913 | IEEE80211_HW_RX_INCLUDES_FCS = 1<<1, | 930 | IEEE80211_HW_RX_INCLUDES_FCS = 1<<1, |
914 | IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING = 1<<2, | 931 | IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING = 1<<2, |
915 | IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE = 1<<3, | 932 | IEEE80211_HW_2GHZ_SHORT_SLOT_INCAPABLE = 1<<3, |
@@ -1505,6 +1522,7 @@ struct ieee80211_ops { | |||
1505 | void (*reset_tsf)(struct ieee80211_hw *hw); | 1522 | void (*reset_tsf)(struct ieee80211_hw *hw); |
1506 | int (*tx_last_beacon)(struct ieee80211_hw *hw); | 1523 | int (*tx_last_beacon)(struct ieee80211_hw *hw); |
1507 | int (*ampdu_action)(struct ieee80211_hw *hw, | 1524 | int (*ampdu_action)(struct ieee80211_hw *hw, |
1525 | struct ieee80211_vif *vif, | ||
1508 | enum ieee80211_ampdu_mlme_action action, | 1526 | enum ieee80211_ampdu_mlme_action action, |
1509 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); | 1527 | struct ieee80211_sta *sta, u16 tid, u16 *ssn); |
1510 | 1528 | ||
@@ -2026,8 +2044,7 @@ void ieee80211_queue_delayed_work(struct ieee80211_hw *hw, | |||
2026 | 2044 | ||
2027 | /** | 2045 | /** |
2028 | * ieee80211_start_tx_ba_session - Start a tx Block Ack session. | 2046 | * ieee80211_start_tx_ba_session - Start a tx Block Ack session. |
2029 | * @hw: pointer as obtained from ieee80211_alloc_hw(). | 2047 | * @sta: the station for which to start a BA session |
2030 | * @ra: receiver address of the BA session recipient | ||
2031 | * @tid: the TID to BA on. | 2048 | * @tid: the TID to BA on. |
2032 | * | 2049 | * |
2033 | * Return: success if addBA request was sent, failure otherwise | 2050 | * Return: success if addBA request was sent, failure otherwise |
@@ -2036,22 +2053,22 @@ void ieee80211_queue_delayed_work(struct ieee80211_hw *hw, | |||
2036 | * the need to start aggregation on a certain RA/TID, the session level | 2053 | * the need to start aggregation on a certain RA/TID, the session level |
2037 | * will be managed by the mac80211. | 2054 | * will be managed by the mac80211. |
2038 | */ | 2055 | */ |
2039 | int ieee80211_start_tx_ba_session(struct ieee80211_hw *hw, u8 *ra, u16 tid); | 2056 | int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid); |
2040 | 2057 | ||
2041 | /** | 2058 | /** |
2042 | * ieee80211_start_tx_ba_cb - low level driver ready to aggregate. | 2059 | * ieee80211_start_tx_ba_cb - low level driver ready to aggregate. |
2043 | * @hw: pointer as obtained from ieee80211_alloc_hw(). | 2060 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf |
2044 | * @ra: receiver address of the BA session recipient. | 2061 | * @ra: receiver address of the BA session recipient. |
2045 | * @tid: the TID to BA on. | 2062 | * @tid: the TID to BA on. |
2046 | * | 2063 | * |
2047 | * This function must be called by low level driver once it has | 2064 | * This function must be called by low level driver once it has |
2048 | * finished with preparations for the BA session. | 2065 | * finished with preparations for the BA session. |
2049 | */ | 2066 | */ |
2050 | void ieee80211_start_tx_ba_cb(struct ieee80211_hw *hw, u8 *ra, u16 tid); | 2067 | void ieee80211_start_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u16 tid); |
2051 | 2068 | ||
2052 | /** | 2069 | /** |
2053 | * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate. | 2070 | * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate. |
2054 | * @hw: pointer as obtained from ieee80211_alloc_hw(). | 2071 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf |
2055 | * @ra: receiver address of the BA session recipient. | 2072 | * @ra: receiver address of the BA session recipient. |
2056 | * @tid: the TID to BA on. | 2073 | * @tid: the TID to BA on. |
2057 | * | 2074 | * |
@@ -2059,13 +2076,12 @@ void ieee80211_start_tx_ba_cb(struct ieee80211_hw *hw, u8 *ra, u16 tid); | |||
2059 | * finished with preparations for the BA session. | 2076 | * finished with preparations for the BA session. |
2060 | * This version of the function is IRQ-safe. | 2077 | * This version of the function is IRQ-safe. |
2061 | */ | 2078 | */ |
2062 | void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_hw *hw, const u8 *ra, | 2079 | void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra, |
2063 | u16 tid); | 2080 | u16 tid); |
2064 | 2081 | ||
2065 | /** | 2082 | /** |
2066 | * ieee80211_stop_tx_ba_session - Stop a Block Ack session. | 2083 | * ieee80211_stop_tx_ba_session - Stop a Block Ack session. |
2067 | * @hw: pointer as obtained from ieee80211_alloc_hw(). | 2084 | * @sta: the station whose BA session to stop |
2068 | * @ra: receiver address of the BA session recipient | ||
2069 | * @tid: the TID to stop BA. | 2085 | * @tid: the TID to stop BA. |
2070 | * @initiator: if indicates initiator DELBA frame will be sent. | 2086 | * @initiator: if indicates initiator DELBA frame will be sent. |
2071 | * | 2087 | * |
@@ -2075,24 +2091,23 @@ void ieee80211_start_tx_ba_cb_irqsafe(struct ieee80211_hw *hw, const u8 *ra, | |||
2075 | * the need to stop aggregation on a certain RA/TID, the session level | 2091 | * the need to stop aggregation on a certain RA/TID, the session level |
2076 | * will be managed by the mac80211. | 2092 | * will be managed by the mac80211. |
2077 | */ | 2093 | */ |
2078 | int ieee80211_stop_tx_ba_session(struct ieee80211_hw *hw, | 2094 | int ieee80211_stop_tx_ba_session(struct ieee80211_sta *sta, u16 tid, |
2079 | u8 *ra, u16 tid, | ||
2080 | enum ieee80211_back_parties initiator); | 2095 | enum ieee80211_back_parties initiator); |
2081 | 2096 | ||
2082 | /** | 2097 | /** |
2083 | * ieee80211_stop_tx_ba_cb - low level driver ready to stop aggregate. | 2098 | * ieee80211_stop_tx_ba_cb - low level driver ready to stop aggregate. |
2084 | * @hw: pointer as obtained from ieee80211_alloc_hw(). | 2099 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf |
2085 | * @ra: receiver address of the BA session recipient. | 2100 | * @ra: receiver address of the BA session recipient. |
2086 | * @tid: the desired TID to BA on. | 2101 | * @tid: the desired TID to BA on. |
2087 | * | 2102 | * |
2088 | * This function must be called by low level driver once it has | 2103 | * This function must be called by low level driver once it has |
2089 | * finished with preparations for the BA session tear down. | 2104 | * finished with preparations for the BA session tear down. |
2090 | */ | 2105 | */ |
2091 | void ieee80211_stop_tx_ba_cb(struct ieee80211_hw *hw, u8 *ra, u8 tid); | 2106 | void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid); |
2092 | 2107 | ||
2093 | /** | 2108 | /** |
2094 | * ieee80211_stop_tx_ba_cb_irqsafe - low level driver ready to stop aggregate. | 2109 | * ieee80211_stop_tx_ba_cb_irqsafe - low level driver ready to stop aggregate. |
2095 | * @hw: pointer as obtained from ieee80211_alloc_hw(). | 2110 | * @vif: &struct ieee80211_vif pointer from &struct ieee80211_if_init_conf |
2096 | * @ra: receiver address of the BA session recipient. | 2111 | * @ra: receiver address of the BA session recipient. |
2097 | * @tid: the desired TID to BA on. | 2112 | * @tid: the desired TID to BA on. |
2098 | * | 2113 | * |
@@ -2100,7 +2115,7 @@ void ieee80211_stop_tx_ba_cb(struct ieee80211_hw *hw, u8 *ra, u8 tid); | |||
2100 | * finished with preparations for the BA session tear down. | 2115 | * finished with preparations for the BA session tear down. |
2101 | * This version of the function is IRQ-safe. | 2116 | * This version of the function is IRQ-safe. |
2102 | */ | 2117 | */ |
2103 | void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_hw *hw, const u8 *ra, | 2118 | void ieee80211_stop_tx_ba_cb_irqsafe(struct ieee80211_vif *vif, const u8 *ra, |
2104 | u16 tid); | 2119 | u16 tid); |
2105 | 2120 | ||
2106 | /** | 2121 | /** |