diff options
Diffstat (limited to 'include/net/mac80211.h')
| -rw-r--r-- | include/net/mac80211.h | 64 | 
1 files changed, 54 insertions, 10 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 72eddd1b410..d49928ba5d0 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -166,6 +166,7 @@ struct ieee80211_low_level_stats {   *	that it is only ever disabled for station mode.   * @BSS_CHANGED_IDLE: Idle changed for this BSS/interface.   * @BSS_CHANGED_SSID: SSID changed for this BSS (AP mode) + * @BSS_CHANGED_AP_PROBE_RESP: Probe Response changed for this BSS (AP mode)   */  enum ieee80211_bss_change {  	BSS_CHANGED_ASSOC		= 1<<0, @@ -184,6 +185,7 @@ enum ieee80211_bss_change {  	BSS_CHANGED_QOS			= 1<<13,  	BSS_CHANGED_IDLE		= 1<<14,  	BSS_CHANGED_SSID		= 1<<15, +	BSS_CHANGED_AP_PROBE_RESP	= 1<<16,  	/* when adding here, make sure to change ieee80211_reconfig */  }; @@ -518,7 +520,7 @@ struct ieee80211_tx_rate {   * @flags: transmit info flags, defined above   * @band: the band to transmit on (use for checking for races)   * @antenna_sel_tx: antenna to use, 0 for automatic diversity - * @pad: padding, ignore + * @ack_frame_id: internal frame ID for TX status, used internally   * @control: union for control data   * @status: union for status data   * @driver_data: array of driver_data pointers @@ -535,8 +537,7 @@ struct ieee80211_tx_info {  	u8 antenna_sel_tx; -	/* 2 byte hole */ -	u8 pad[2]; +	u16 ack_frame_id;  	union {  		struct { @@ -901,6 +902,10 @@ static inline bool ieee80211_vif_is_mesh(struct ieee80211_vif *vif)   * @IEEE80211_KEY_FLAG_SW_MGMT: This flag should be set by the driver for a   *	CCMP key if it requires CCMP encryption of management frames (MFP) to   *	be done in software. + * @IEEE80211_KEY_FLAG_PUT_IV_SPACE: This flag should be set by the driver + *	for a CCMP key if space should be prepared for the IV, but the IV + *	itself should not be generated. Do not set together with + *	@IEEE80211_KEY_FLAG_GENERATE_IV on the same key.   */  enum ieee80211_key_flags {  	IEEE80211_KEY_FLAG_WMM_STA	= 1<<0, @@ -908,6 +913,7 @@ enum ieee80211_key_flags {  	IEEE80211_KEY_FLAG_GENERATE_MMIC= 1<<2,  	IEEE80211_KEY_FLAG_PAIRWISE	= 1<<3,  	IEEE80211_KEY_FLAG_SW_MGMT	= 1<<4, +	IEEE80211_KEY_FLAG_PUT_IV_SPACE = 1<<5,  };  /** @@ -1304,6 +1310,16 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw,  }  /** + * ieee80211_free_txskb - free TX skb + * @hw: the hardware + * @skb: the skb + * + * Free a transmit skb. Use this funtion when some failure + * to transmit happened and thus status cannot be reported. + */ +void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb); + +/**   * DOC: Hardware crypto acceleration   *   * mac80211 is capable of taking advantage of many hardware @@ -1423,7 +1439,7 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw,   * DOC: Beacon filter support   *   * Some hardware have beacon filter support to reduce host cpu wakeups - * which will reduce system power consumption. It usuallly works so that + * which will reduce system power consumption. It usually works so that   * the firmware creates a checksum of the beacon but omits all constantly   * changing elements (TSF, TIM etc). Whenever the checksum changes the   * beacon is forwarded to the host, otherwise it will be just dropped. That @@ -1744,11 +1760,21 @@ enum ieee80211_frame_release_type {   *	skb contains the buffer starting from the IEEE 802.11 header.   *	The low-level driver should send the frame out based on   *	configuration in the TX control data. This handler should, - *	preferably, never fail and stop queues appropriately, more - *	importantly, however, it must never fail for A-MPDU-queues. - *	This function should return NETDEV_TX_OK except in very - *	limited cases. - *	Must be implemented and atomic. + *	preferably, never fail and stop queues appropriately. + *	This must be implemented if @tx_frags is not. + *	Must be atomic. + * + * @tx_frags: Called to transmit multiple fragments of a single MSDU. + *	This handler must consume all fragments, sending out some of + *	them only is useless and it can't ask for some of them to be + *	queued again. If the frame is not fragmented the queue has a + *	single SKB only. To avoid issues with the networking stack + *	when TX status is reported the frames should be removed from + *	the skb queue. + *	If this is used, the tx_info @vif and @sta pointers will be + *	invalid -- you must not use them in that case. + *	This must be implemented if @tx isn't. + *	Must be atomic.   *   * @start: Called before the first netdevice attached to the hardware   *	is enabled. This should turn on the hardware and must turn on @@ -2085,6 +2111,8 @@ enum ieee80211_frame_release_type {   */  struct ieee80211_ops {  	void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); +	void (*tx_frags)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, +			 struct ieee80211_sta *sta, struct sk_buff_head *skbs);  	int (*start)(struct ieee80211_hw *hw);  	void (*stop)(struct ieee80211_hw *hw);  #ifdef CONFIG_PM @@ -2661,6 +2689,19 @@ static inline struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,  }  /** + * ieee80211_proberesp_get - retrieve a Probe Response template + * @hw: pointer obtained from ieee80211_alloc_hw(). + * @vif: &struct ieee80211_vif pointer from the add_interface callback. + * + * Creates a Probe Response template which can, for example, be uploaded to + * hardware. The destination address should be set by the caller. + * + * Can only be called in AP mode. + */ +struct sk_buff *ieee80211_proberesp_get(struct ieee80211_hw *hw, +					struct ieee80211_vif *vif); + +/**   * ieee80211_pspoll_get - retrieve a PS Poll template   * @hw: pointer obtained from ieee80211_alloc_hw().   * @vif: &struct ieee80211_vif pointer from the add_interface callback. @@ -3461,9 +3502,12 @@ void ieee80211_send_bar(struct ieee80211_vif *vif, u8 *ra, u16 tid, u16 ssn);   *   * @IEEE80211_RC_HT_CHANGED: The HT parameters of the operating channel have   *	changed, rate control algorithm can update its internal state if needed. + * @IEEE80211_RC_SMPS_CHANGED: The SMPS state of the station changed, the rate + *	control algorithm needs to adjust accordingly.   */  enum rate_control_changed { -	IEEE80211_RC_HT_CHANGED = BIT(0) +	IEEE80211_RC_HT_CHANGED		= BIT(0), +	IEEE80211_RC_SMPS_CHANGED	= BIT(1),  };  /**  |