|
@@ -851,6 +851,16 @@ struct ieee80211_channel_switch {
|
|
u8 count;
|
|
u8 count;
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+/**
|
|
|
|
+ * enum ieee80211_vif_flags - virtual interface flags
|
|
|
|
+ *
|
|
|
|
+ * @IEEE80211_VIF_BEACON_FILTER: the device performs beacon filtering
|
|
|
|
+ * on this virtual interface to avoid unnecessary CPU wakeups
|
|
|
|
+ */
|
|
|
|
+enum ieee80211_vif_flags {
|
|
|
|
+ IEEE80211_VIF_BEACON_FILTER = BIT(0),
|
|
|
|
+};
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* struct ieee80211_vif - per-interface data
|
|
* struct ieee80211_vif - per-interface data
|
|
*
|
|
*
|
|
@@ -863,6 +873,10 @@ struct ieee80211_channel_switch {
|
|
* @addr: address of this interface
|
|
* @addr: address of this interface
|
|
* @p2p: indicates whether this AP or STA interface is a p2p
|
|
* @p2p: indicates whether this AP or STA interface is a p2p
|
|
* interface, i.e. a GO or p2p-sta respectively
|
|
* interface, i.e. a GO or p2p-sta respectively
|
|
|
|
+ * @driver_flags: flags/capabilities the driver has for this interface,
|
|
|
|
+ * these need to be set (or cleared) when the interface is added
|
|
|
|
+ * or, if supported by the driver, the interface type is changed
|
|
|
|
+ * at runtime, mac80211 will never touch this field
|
|
* @drv_priv: data area for driver use, will always be aligned to
|
|
* @drv_priv: data area for driver use, will always be aligned to
|
|
* sizeof(void *).
|
|
* sizeof(void *).
|
|
*/
|
|
*/
|
|
@@ -871,6 +885,7 @@ struct ieee80211_vif {
|
|
struct ieee80211_bss_conf bss_conf;
|
|
struct ieee80211_bss_conf bss_conf;
|
|
u8 addr[ETH_ALEN];
|
|
u8 addr[ETH_ALEN];
|
|
bool p2p;
|
|
bool p2p;
|
|
|
|
+ u32 driver_flags;
|
|
/* must be last */
|
|
/* must be last */
|
|
u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
|
|
u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
|
|
};
|
|
};
|
|
@@ -1079,10 +1094,6 @@ enum sta_notify_cmd {
|
|
* @IEEE80211_HW_MFP_CAPABLE:
|
|
* @IEEE80211_HW_MFP_CAPABLE:
|
|
* Hardware supports management frame protection (MFP, IEEE 802.11w).
|
|
* Hardware supports management frame protection (MFP, IEEE 802.11w).
|
|
*
|
|
*
|
|
- * @IEEE80211_HW_BEACON_FILTER:
|
|
|
|
- * Hardware supports dropping of irrelevant beacon frames to
|
|
|
|
- * avoid waking up cpu.
|
|
|
|
- *
|
|
|
|
* @IEEE80211_HW_SUPPORTS_STATIC_SMPS:
|
|
* @IEEE80211_HW_SUPPORTS_STATIC_SMPS:
|
|
* Hardware supports static spatial multiplexing powersave,
|
|
* Hardware supports static spatial multiplexing powersave,
|
|
* ie. can turn off all but one chain even on HT connections
|
|
* ie. can turn off all but one chain even on HT connections
|
|
@@ -1150,7 +1161,7 @@ enum ieee80211_hw_flags {
|
|
IEEE80211_HW_PS_NULLFUNC_STACK = 1<<11,
|
|
IEEE80211_HW_PS_NULLFUNC_STACK = 1<<11,
|
|
IEEE80211_HW_SUPPORTS_DYNAMIC_PS = 1<<12,
|
|
IEEE80211_HW_SUPPORTS_DYNAMIC_PS = 1<<12,
|
|
IEEE80211_HW_MFP_CAPABLE = 1<<13,
|
|
IEEE80211_HW_MFP_CAPABLE = 1<<13,
|
|
- IEEE80211_HW_BEACON_FILTER = 1<<14,
|
|
|
|
|
|
+ /* reuse bit 14 */
|
|
IEEE80211_HW_SUPPORTS_STATIC_SMPS = 1<<15,
|
|
IEEE80211_HW_SUPPORTS_STATIC_SMPS = 1<<15,
|
|
IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS = 1<<16,
|
|
IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS = 1<<16,
|
|
IEEE80211_HW_SUPPORTS_UAPSD = 1<<17,
|
|
IEEE80211_HW_SUPPORTS_UAPSD = 1<<17,
|
|
@@ -1446,8 +1457,8 @@ void ieee80211_free_txskb(struct ieee80211_hw *hw, struct sk_buff *skb);
|
|
* way the host will only receive beacons where some relevant information
|
|
* way the host will only receive beacons where some relevant information
|
|
* (for example ERP protection or WMM settings) have changed.
|
|
* (for example ERP protection or WMM settings) have changed.
|
|
*
|
|
*
|
|
- * Beacon filter support is advertised with the %IEEE80211_HW_BEACON_FILTER
|
|
|
|
- * hardware capability. The driver needs to enable beacon filter support
|
|
|
|
|
|
+ * Beacon filter support is advertised with the %IEEE80211_VIF_BEACON_FILTER
|
|
|
|
+ * interface capability. The driver needs to enable beacon filter support
|
|
* whenever power save is enabled, that is %IEEE80211_CONF_PS is set. When
|
|
* whenever power save is enabled, that is %IEEE80211_CONF_PS is set. When
|
|
* power save is enabled, the stack will not check for beacon loss and the
|
|
* power save is enabled, the stack will not check for beacon loss and the
|
|
* driver needs to notify about loss of beacons with ieee80211_beacon_loss().
|
|
* driver needs to notify about loss of beacons with ieee80211_beacon_loss().
|
|
@@ -3316,7 +3327,7 @@ struct sk_buff *ieee80211_ap_probereq_get(struct ieee80211_hw *hw,
|
|
*
|
|
*
|
|
* @vif: &struct ieee80211_vif pointer from the add_interface callback.
|
|
* @vif: &struct ieee80211_vif pointer from the add_interface callback.
|
|
*
|
|
*
|
|
- * When beacon filtering is enabled with %IEEE80211_HW_BEACON_FILTER and
|
|
|
|
|
|
+ * When beacon filtering is enabled with %IEEE80211_VIF_BEACON_FILTER and
|
|
* %IEEE80211_CONF_PS is set, the driver needs to inform whenever the
|
|
* %IEEE80211_CONF_PS is set, the driver needs to inform whenever the
|
|
* hardware is not receiving beacons with this function.
|
|
* hardware is not receiving beacons with this function.
|
|
*/
|
|
*/
|
|
@@ -3327,7 +3338,7 @@ void ieee80211_beacon_loss(struct ieee80211_vif *vif);
|
|
*
|
|
*
|
|
* @vif: &struct ieee80211_vif pointer from the add_interface callback.
|
|
* @vif: &struct ieee80211_vif pointer from the add_interface callback.
|
|
*
|
|
*
|
|
- * When beacon filtering is enabled with %IEEE80211_HW_BEACON_FILTER, and
|
|
|
|
|
|
+ * When beacon filtering is enabled with %IEEE80211_VIF_BEACON_FILTER, and
|
|
* %IEEE80211_CONF_PS and %IEEE80211_HW_CONNECTION_MONITOR are set, the driver
|
|
* %IEEE80211_CONF_PS and %IEEE80211_HW_CONNECTION_MONITOR are set, the driver
|
|
* needs to inform if the connection to the AP has been lost.
|
|
* needs to inform if the connection to the AP has been lost.
|
|
*
|
|
*
|