Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6
This commit is contained in:
@@ -1578,7 +1578,7 @@ unsigned int ieee80211_hdrlen(__le16 fc);
|
||||
* @addr: the device MAC address
|
||||
* @iftype: the virtual interface type
|
||||
*/
|
||||
int ieee80211_data_to_8023(struct sk_buff *skb, u8 *addr,
|
||||
int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr,
|
||||
enum nl80211_iftype iftype);
|
||||
|
||||
/**
|
||||
@@ -1589,9 +1589,27 @@ int ieee80211_data_to_8023(struct sk_buff *skb, u8 *addr,
|
||||
* @bssid: the network bssid (used only for iftype STATION and ADHOC)
|
||||
* @qos: build 802.11 QoS data frame
|
||||
*/
|
||||
int ieee80211_data_from_8023(struct sk_buff *skb, u8 *addr,
|
||||
int ieee80211_data_from_8023(struct sk_buff *skb, const u8 *addr,
|
||||
enum nl80211_iftype iftype, u8 *bssid, bool qos);
|
||||
|
||||
/**
|
||||
* ieee80211_amsdu_to_8023s - decode an IEEE 802.11n A-MSDU frame
|
||||
*
|
||||
* Decode an IEEE 802.11n A-MSDU frame and convert it to a list of
|
||||
* 802.3 frames. The @list will be empty if the decode fails. The
|
||||
* @skb is consumed after the function returns.
|
||||
*
|
||||
* @skb: The input IEEE 802.11n A-MSDU frame.
|
||||
* @list: The output list of 802.3 frames. It must be allocated and
|
||||
* initialized by by the caller.
|
||||
* @addr: The device MAC address.
|
||||
* @iftype: The device interface type.
|
||||
* @extra_headroom: The hardware extra headroom for SKBs in the @list.
|
||||
*/
|
||||
void ieee80211_amsdu_to_8023s(struct sk_buff *skb, struct sk_buff_head *list,
|
||||
const u8 *addr, enum nl80211_iftype iftype,
|
||||
const unsigned int extra_headroom);
|
||||
|
||||
/**
|
||||
* cfg80211_classify8021d - determine the 802.1p/1d tag for a data frame
|
||||
* @skb: the data frame
|
||||
|
||||
@@ -597,8 +597,10 @@ enum ieee80211_conf_flags {
|
||||
* @IEEE80211_CONF_CHANGE_CHANNEL: the channel/channel_type changed
|
||||
* @IEEE80211_CONF_CHANGE_RETRY_LIMITS: retry limits changed
|
||||
* @IEEE80211_CONF_CHANGE_IDLE: Idle flag changed
|
||||
* @IEEE80211_CONF_CHANGE_SMPS: Spatial multiplexing powersave mode changed
|
||||
*/
|
||||
enum ieee80211_conf_changed {
|
||||
IEEE80211_CONF_CHANGE_SMPS = BIT(1),
|
||||
IEEE80211_CONF_CHANGE_LISTEN_INTERVAL = BIT(2),
|
||||
IEEE80211_CONF_CHANGE_MONITOR = BIT(3),
|
||||
IEEE80211_CONF_CHANGE_PS = BIT(4),
|
||||
@@ -608,6 +610,21 @@ enum ieee80211_conf_changed {
|
||||
IEEE80211_CONF_CHANGE_IDLE = BIT(8),
|
||||
};
|
||||
|
||||
/**
|
||||
* enum ieee80211_smps_mode - spatial multiplexing power save mode
|
||||
*
|
||||
* @
|
||||
*/
|
||||
enum ieee80211_smps_mode {
|
||||
IEEE80211_SMPS_AUTOMATIC,
|
||||
IEEE80211_SMPS_OFF,
|
||||
IEEE80211_SMPS_STATIC,
|
||||
IEEE80211_SMPS_DYNAMIC,
|
||||
|
||||
/* keep last */
|
||||
IEEE80211_SMPS_NUM_MODES,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct ieee80211_conf - configuration of the device
|
||||
*
|
||||
@@ -636,6 +653,10 @@ enum ieee80211_conf_changed {
|
||||
* @short_frame_max_tx_count: Maximum number of transmissions for a "short"
|
||||
* frame, called "dot11ShortRetryLimit" in 802.11, but actually means the
|
||||
* number of transmissions not the number of retries
|
||||
*
|
||||
* @smps_mode: spatial multiplexing powersave mode; note that
|
||||
* %IEEE80211_SMPS_STATIC is used when the device is not
|
||||
* configured for an HT channel
|
||||
*/
|
||||
struct ieee80211_conf {
|
||||
u32 flags;
|
||||
@@ -648,6 +669,7 @@ struct ieee80211_conf {
|
||||
|
||||
struct ieee80211_channel *channel;
|
||||
enum nl80211_channel_type channel_type;
|
||||
enum ieee80211_smps_mode smps_mode;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -659,12 +681,14 @@ struct ieee80211_conf {
|
||||
* @type: type of this virtual interface
|
||||
* @bss_conf: BSS configuration for this interface, either our own
|
||||
* or the BSS we're associated to
|
||||
* @addr: address of this interface
|
||||
* @drv_priv: data area for driver use, will always be aligned to
|
||||
* sizeof(void *).
|
||||
*/
|
||||
struct ieee80211_vif {
|
||||
enum nl80211_iftype type;
|
||||
struct ieee80211_bss_conf bss_conf;
|
||||
u8 addr[ETH_ALEN];
|
||||
/* must be last */
|
||||
u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
|
||||
};
|
||||
@@ -928,6 +952,16 @@ enum ieee80211_tkip_key_type {
|
||||
* @IEEE80211_HW_BEACON_FILTER:
|
||||
* Hardware supports dropping of irrelevant beacon frames to
|
||||
* avoid waking up cpu.
|
||||
*
|
||||
* @IEEE80211_HW_SUPPORTS_STATIC_SMPS:
|
||||
* Hardware supports static spatial multiplexing powersave,
|
||||
* ie. can turn off all but one chain even on HT connections
|
||||
* that should be using more chains.
|
||||
*
|
||||
* @IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS:
|
||||
* Hardware supports dynamic spatial multiplexing powersave,
|
||||
* ie. can turn off all but one chain and then wake the rest
|
||||
* up as required after, for example, rts/cts handshake.
|
||||
*/
|
||||
enum ieee80211_hw_flags {
|
||||
IEEE80211_HW_HAS_RATE_CONTROL = 1<<0,
|
||||
@@ -945,6 +979,8 @@ enum ieee80211_hw_flags {
|
||||
IEEE80211_HW_SUPPORTS_DYNAMIC_PS = 1<<12,
|
||||
IEEE80211_HW_MFP_CAPABLE = 1<<13,
|
||||
IEEE80211_HW_BEACON_FILTER = 1<<14,
|
||||
IEEE80211_HW_SUPPORTS_STATIC_SMPS = 1<<15,
|
||||
IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS = 1<<16,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1212,6 +1248,31 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw,
|
||||
* signal strength threshold checking.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Spatial multiplexing power save
|
||||
*
|
||||
* SMPS (Spatial multiplexing power save) is a mechanism to conserve
|
||||
* power in an 802.11n implementation. For details on the mechanism
|
||||
* and rationale, please refer to 802.11 (as amended by 802.11n-2009)
|
||||
* "11.2.3 SM power save".
|
||||
*
|
||||
* The mac80211 implementation is capable of sending action frames
|
||||
* to update the AP about the station's SMPS mode, and will instruct
|
||||
* the driver to enter the specific mode. It will also announce the
|
||||
* requested SMPS mode during the association handshake. Hardware
|
||||
* support for this feature is required, and can be indicated by
|
||||
* hardware flags.
|
||||
*
|
||||
* The default mode will be "automatic", which nl80211/cfg80211
|
||||
* defines to be dynamic SMPS in (regular) powersave, and SMPS
|
||||
* turned off otherwise.
|
||||
*
|
||||
* To support this feature, the driver must set the appropriate
|
||||
* hardware support flags, and handle the SMPS flag to the config()
|
||||
* operation. It will then with this mechanism be instructed to
|
||||
* enter the requested SMPS mode while associated to an HT AP.
|
||||
*/
|
||||
|
||||
/**
|
||||
* DOC: Frame filtering
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user