Merge git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
This commit is contained in:
@@ -341,8 +341,8 @@ struct vif_params {
|
||||
* @seq_len: length of @seq.
|
||||
*/
|
||||
struct key_params {
|
||||
u8 *key;
|
||||
u8 *seq;
|
||||
const u8 *key;
|
||||
const u8 *seq;
|
||||
int key_len;
|
||||
int seq_len;
|
||||
u32 cipher;
|
||||
@@ -458,7 +458,7 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy,
|
||||
*/
|
||||
int cfg80211_chandef_dfs_required(struct wiphy *wiphy,
|
||||
const struct cfg80211_chan_def *chandef,
|
||||
enum nl80211_iftype);
|
||||
enum nl80211_iftype iftype);
|
||||
|
||||
/**
|
||||
* ieee80211_chandef_rate_flags - returns rate flags for a channel
|
||||
@@ -694,8 +694,10 @@ struct cfg80211_ap_settings {
|
||||
*
|
||||
* @chandef: defines the channel to use after the switch
|
||||
* @beacon_csa: beacon data while performing the switch
|
||||
* @counter_offset_beacon: offset for the counter within the beacon (tail)
|
||||
* @counter_offset_presp: offset for the counter within the probe response
|
||||
* @counter_offsets_beacon: offsets of the counters within the beacon (tail)
|
||||
* @counter_offsets_presp: offsets of the counters within the probe response
|
||||
* @n_counter_offsets_beacon: number of csa counters the beacon (tail)
|
||||
* @n_counter_offsets_presp: number of csa counters in the probe response
|
||||
* @beacon_after: beacon data to be used on the new channel
|
||||
* @radar_required: whether radar detection is required on the new channel
|
||||
* @block_tx: whether transmissions should be blocked while changing
|
||||
@@ -704,7 +706,10 @@ struct cfg80211_ap_settings {
|
||||
struct cfg80211_csa_settings {
|
||||
struct cfg80211_chan_def chandef;
|
||||
struct cfg80211_beacon_data beacon_csa;
|
||||
u16 counter_offset_beacon, counter_offset_presp;
|
||||
const u16 *counter_offsets_beacon;
|
||||
const u16 *counter_offsets_presp;
|
||||
unsigned int n_counter_offsets_beacon;
|
||||
unsigned int n_counter_offsets_presp;
|
||||
struct cfg80211_beacon_data beacon_after;
|
||||
bool radar_required;
|
||||
bool block_tx;
|
||||
@@ -868,36 +873,38 @@ int cfg80211_check_station_change(struct wiphy *wiphy,
|
||||
* @STATION_INFO_NONPEER_PM: @nonpeer_pm filled
|
||||
* @STATION_INFO_CHAIN_SIGNAL: @chain_signal filled
|
||||
* @STATION_INFO_CHAIN_SIGNAL_AVG: @chain_signal_avg filled
|
||||
* @STATION_INFO_EXPECTED_THROUGHPUT: @expected_throughput filled
|
||||
*/
|
||||
enum station_info_flags {
|
||||
STATION_INFO_INACTIVE_TIME = 1<<0,
|
||||
STATION_INFO_RX_BYTES = 1<<1,
|
||||
STATION_INFO_TX_BYTES = 1<<2,
|
||||
STATION_INFO_LLID = 1<<3,
|
||||
STATION_INFO_PLID = 1<<4,
|
||||
STATION_INFO_PLINK_STATE = 1<<5,
|
||||
STATION_INFO_SIGNAL = 1<<6,
|
||||
STATION_INFO_TX_BITRATE = 1<<7,
|
||||
STATION_INFO_RX_PACKETS = 1<<8,
|
||||
STATION_INFO_TX_PACKETS = 1<<9,
|
||||
STATION_INFO_TX_RETRIES = 1<<10,
|
||||
STATION_INFO_TX_FAILED = 1<<11,
|
||||
STATION_INFO_RX_DROP_MISC = 1<<12,
|
||||
STATION_INFO_SIGNAL_AVG = 1<<13,
|
||||
STATION_INFO_RX_BITRATE = 1<<14,
|
||||
STATION_INFO_BSS_PARAM = 1<<15,
|
||||
STATION_INFO_CONNECTED_TIME = 1<<16,
|
||||
STATION_INFO_ASSOC_REQ_IES = 1<<17,
|
||||
STATION_INFO_STA_FLAGS = 1<<18,
|
||||
STATION_INFO_BEACON_LOSS_COUNT = 1<<19,
|
||||
STATION_INFO_T_OFFSET = 1<<20,
|
||||
STATION_INFO_LOCAL_PM = 1<<21,
|
||||
STATION_INFO_PEER_PM = 1<<22,
|
||||
STATION_INFO_NONPEER_PM = 1<<23,
|
||||
STATION_INFO_RX_BYTES64 = 1<<24,
|
||||
STATION_INFO_TX_BYTES64 = 1<<25,
|
||||
STATION_INFO_CHAIN_SIGNAL = 1<<26,
|
||||
STATION_INFO_CHAIN_SIGNAL_AVG = 1<<27,
|
||||
STATION_INFO_INACTIVE_TIME = BIT(0),
|
||||
STATION_INFO_RX_BYTES = BIT(1),
|
||||
STATION_INFO_TX_BYTES = BIT(2),
|
||||
STATION_INFO_LLID = BIT(3),
|
||||
STATION_INFO_PLID = BIT(4),
|
||||
STATION_INFO_PLINK_STATE = BIT(5),
|
||||
STATION_INFO_SIGNAL = BIT(6),
|
||||
STATION_INFO_TX_BITRATE = BIT(7),
|
||||
STATION_INFO_RX_PACKETS = BIT(8),
|
||||
STATION_INFO_TX_PACKETS = BIT(9),
|
||||
STATION_INFO_TX_RETRIES = BIT(10),
|
||||
STATION_INFO_TX_FAILED = BIT(11),
|
||||
STATION_INFO_RX_DROP_MISC = BIT(12),
|
||||
STATION_INFO_SIGNAL_AVG = BIT(13),
|
||||
STATION_INFO_RX_BITRATE = BIT(14),
|
||||
STATION_INFO_BSS_PARAM = BIT(15),
|
||||
STATION_INFO_CONNECTED_TIME = BIT(16),
|
||||
STATION_INFO_ASSOC_REQ_IES = BIT(17),
|
||||
STATION_INFO_STA_FLAGS = BIT(18),
|
||||
STATION_INFO_BEACON_LOSS_COUNT = BIT(19),
|
||||
STATION_INFO_T_OFFSET = BIT(20),
|
||||
STATION_INFO_LOCAL_PM = BIT(21),
|
||||
STATION_INFO_PEER_PM = BIT(22),
|
||||
STATION_INFO_NONPEER_PM = BIT(23),
|
||||
STATION_INFO_RX_BYTES64 = BIT(24),
|
||||
STATION_INFO_TX_BYTES64 = BIT(25),
|
||||
STATION_INFO_CHAIN_SIGNAL = BIT(26),
|
||||
STATION_INFO_CHAIN_SIGNAL_AVG = BIT(27),
|
||||
STATION_INFO_EXPECTED_THROUGHPUT = BIT(28),
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1019,6 +1026,8 @@ struct sta_bss_parameters {
|
||||
* @local_pm: local mesh STA power save mode
|
||||
* @peer_pm: peer mesh STA power save mode
|
||||
* @nonpeer_pm: non-peer mesh STA power save mode
|
||||
* @expected_throughput: expected throughput in kbps (including 802.11 headers)
|
||||
* towards this station.
|
||||
*/
|
||||
struct station_info {
|
||||
u32 filled;
|
||||
@@ -1057,12 +1066,27 @@ struct station_info {
|
||||
enum nl80211_mesh_power_mode peer_pm;
|
||||
enum nl80211_mesh_power_mode nonpeer_pm;
|
||||
|
||||
u32 expected_throughput;
|
||||
|
||||
/*
|
||||
* Note: Add a new enum station_info_flags value for each new field and
|
||||
* use it to check which fields are initialized.
|
||||
*/
|
||||
};
|
||||
|
||||
/**
|
||||
* cfg80211_get_station - retrieve information about a given station
|
||||
* @dev: the device where the station is supposed to be connected to
|
||||
* @mac_addr: the mac address of the station of interest
|
||||
* @sinfo: pointer to the structure to fill with the information
|
||||
*
|
||||
* Returns 0 on success and sinfo is filled with the available information
|
||||
* otherwise returns a negative error code and the content of sinfo has to be
|
||||
* considered undefined.
|
||||
*/
|
||||
int cfg80211_get_station(struct net_device *dev, const u8 *mac_addr,
|
||||
struct station_info *sinfo);
|
||||
|
||||
/**
|
||||
* enum monitor_flags - monitor flags
|
||||
*
|
||||
@@ -1164,7 +1188,7 @@ struct bss_parameters {
|
||||
int use_cts_prot;
|
||||
int use_short_preamble;
|
||||
int use_short_slot_time;
|
||||
u8 *basic_rates;
|
||||
const u8 *basic_rates;
|
||||
u8 basic_rates_len;
|
||||
int ap_isolate;
|
||||
int ht_opmode;
|
||||
@@ -1694,10 +1718,10 @@ struct cfg80211_disassoc_request {
|
||||
* @ht_capa_mask: The bits of ht_capa which are to be used.
|
||||
*/
|
||||
struct cfg80211_ibss_params {
|
||||
u8 *ssid;
|
||||
u8 *bssid;
|
||||
const u8 *ssid;
|
||||
const u8 *bssid;
|
||||
struct cfg80211_chan_def chandef;
|
||||
u8 *ie;
|
||||
const u8 *ie;
|
||||
u8 ssid_len, ie_len;
|
||||
u16 beacon_interval;
|
||||
u32 basic_rates;
|
||||
@@ -1806,8 +1830,8 @@ struct cfg80211_bitrate_mask {
|
||||
* @pmkid: The PMK material itself.
|
||||
*/
|
||||
struct cfg80211_pmksa {
|
||||
u8 *bssid;
|
||||
u8 *pmkid;
|
||||
const u8 *bssid;
|
||||
const u8 *pmkid;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1822,7 +1846,7 @@ struct cfg80211_pmksa {
|
||||
* memory, free @mask only!
|
||||
*/
|
||||
struct cfg80211_pkt_pattern {
|
||||
u8 *mask, *pattern;
|
||||
const u8 *mask, *pattern;
|
||||
int pattern_len;
|
||||
int pkt_offset;
|
||||
};
|
||||
@@ -1986,6 +2010,8 @@ struct cfg80211_update_ft_ies_params {
|
||||
* @len: buffer length
|
||||
* @no_cck: don't use cck rates for this frame
|
||||
* @dont_wait_for_ack: tells the low level not to wait for an ack
|
||||
* @n_csa_offsets: length of csa_offsets array
|
||||
* @csa_offsets: array of all the csa offsets in the frame
|
||||
*/
|
||||
struct cfg80211_mgmt_tx_params {
|
||||
struct ieee80211_channel *chan;
|
||||
@@ -1995,6 +2021,8 @@ struct cfg80211_mgmt_tx_params {
|
||||
size_t len;
|
||||
bool no_cck;
|
||||
bool dont_wait_for_ack;
|
||||
int n_csa_offsets;
|
||||
const u16 *csa_offsets;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -2336,28 +2364,29 @@ struct cfg80211_ops {
|
||||
|
||||
|
||||
int (*add_station)(struct wiphy *wiphy, struct net_device *dev,
|
||||
u8 *mac, struct station_parameters *params);
|
||||
const u8 *mac,
|
||||
struct station_parameters *params);
|
||||
int (*del_station)(struct wiphy *wiphy, struct net_device *dev,
|
||||
u8 *mac);
|
||||
const u8 *mac);
|
||||
int (*change_station)(struct wiphy *wiphy, struct net_device *dev,
|
||||
u8 *mac, struct station_parameters *params);
|
||||
const u8 *mac,
|
||||
struct station_parameters *params);
|
||||
int (*get_station)(struct wiphy *wiphy, struct net_device *dev,
|
||||
u8 *mac, struct station_info *sinfo);
|
||||
const u8 *mac, struct station_info *sinfo);
|
||||
int (*dump_station)(struct wiphy *wiphy, struct net_device *dev,
|
||||
int idx, u8 *mac, struct station_info *sinfo);
|
||||
int idx, u8 *mac, struct station_info *sinfo);
|
||||
|
||||
int (*add_mpath)(struct wiphy *wiphy, struct net_device *dev,
|
||||
u8 *dst, u8 *next_hop);
|
||||
const u8 *dst, const u8 *next_hop);
|
||||
int (*del_mpath)(struct wiphy *wiphy, struct net_device *dev,
|
||||
u8 *dst);
|
||||
const u8 *dst);
|
||||
int (*change_mpath)(struct wiphy *wiphy, struct net_device *dev,
|
||||
u8 *dst, u8 *next_hop);
|
||||
const u8 *dst, const u8 *next_hop);
|
||||
int (*get_mpath)(struct wiphy *wiphy, struct net_device *dev,
|
||||
u8 *dst, u8 *next_hop,
|
||||
struct mpath_info *pinfo);
|
||||
u8 *dst, u8 *next_hop, struct mpath_info *pinfo);
|
||||
int (*dump_mpath)(struct wiphy *wiphy, struct net_device *dev,
|
||||
int idx, u8 *dst, u8 *next_hop,
|
||||
struct mpath_info *pinfo);
|
||||
int idx, u8 *dst, u8 *next_hop,
|
||||
struct mpath_info *pinfo);
|
||||
int (*get_mesh_config)(struct wiphy *wiphy,
|
||||
struct net_device *dev,
|
||||
struct mesh_config *conf);
|
||||
@@ -2487,11 +2516,11 @@ struct cfg80211_ops {
|
||||
struct cfg80211_gtk_rekey_data *data);
|
||||
|
||||
int (*tdls_mgmt)(struct wiphy *wiphy, struct net_device *dev,
|
||||
u8 *peer, u8 action_code, u8 dialog_token,
|
||||
const u8 *peer, u8 action_code, u8 dialog_token,
|
||||
u16 status_code, u32 peer_capability,
|
||||
const u8 *buf, size_t len);
|
||||
int (*tdls_oper)(struct wiphy *wiphy, struct net_device *dev,
|
||||
u8 *peer, enum nl80211_tdls_operation oper);
|
||||
const u8 *peer, enum nl80211_tdls_operation oper);
|
||||
|
||||
int (*probe_client)(struct wiphy *wiphy, struct net_device *dev,
|
||||
const u8 *peer, u64 *cookie);
|
||||
@@ -2638,6 +2667,7 @@ struct ieee80211_iface_limit {
|
||||
* between infrastructure and AP types must match. This is required
|
||||
* only in special cases.
|
||||
* @radar_detect_widths: bitmap of channel widths supported for radar detection
|
||||
* @radar_detect_regions: bitmap of regions supported for radar detection
|
||||
*
|
||||
* With this structure the driver can describe which interface
|
||||
* combinations it supports concurrently.
|
||||
@@ -2695,6 +2725,7 @@ struct ieee80211_iface_combination {
|
||||
u8 n_limits;
|
||||
bool beacon_int_infra_match;
|
||||
u8 radar_detect_widths;
|
||||
u8 radar_detect_regions;
|
||||
};
|
||||
|
||||
struct ieee80211_txrx_stypes {
|
||||
@@ -2925,6 +2956,17 @@ struct wiphy_vendor_command {
|
||||
* (including P2P GO) or 0 to indicate no such limit is advertised. The
|
||||
* driver is allowed to advertise a theoretical limit that it can reach in
|
||||
* some cases, but may not always reach.
|
||||
*
|
||||
* @max_num_csa_counters: Number of supported csa_counters in beacons
|
||||
* and probe responses. This value should be set if the driver
|
||||
* wishes to limit the number of csa counters. Default (0) means
|
||||
* infinite.
|
||||
* @max_adj_channel_rssi_comp: max offset of between the channel on which the
|
||||
* frame was sent and the channel on which the frame was heard for which
|
||||
* the reported rssi is still valid. If a driver is able to compensate the
|
||||
* low rssi when a frame is heard on different channel, then it should set
|
||||
* this variable to the maximal offset for which it can compensate.
|
||||
* This value should be set in MHz.
|
||||
*/
|
||||
struct wiphy {
|
||||
/* assign these fields before you register the wiphy */
|
||||
@@ -3042,6 +3084,9 @@ struct wiphy {
|
||||
|
||||
u16 max_ap_assoc_sta;
|
||||
|
||||
u8 max_num_csa_counters;
|
||||
u8 max_adj_channel_rssi_comp;
|
||||
|
||||
char priv[0] __aligned(NETDEV_ALIGN);
|
||||
};
|
||||
|
||||
@@ -3270,7 +3315,7 @@ struct wireless_dev {
|
||||
struct cfg80211_ibss_params ibss;
|
||||
struct cfg80211_connect_params connect;
|
||||
struct cfg80211_cached_keys *keys;
|
||||
u8 *ie;
|
||||
const u8 *ie;
|
||||
size_t ie_len;
|
||||
u8 bssid[ETH_ALEN], prev_bssid[ETH_ALEN];
|
||||
u8 ssid[IEEE80211_MAX_SSID_LEN];
|
||||
@@ -3511,7 +3556,8 @@ int ieee80211_data_to_8023(struct sk_buff *skb, const u8 *addr,
|
||||
* Return: 0 on success, or a negative error code.
|
||||
*/
|
||||
int ieee80211_data_from_8023(struct sk_buff *skb, const u8 *addr,
|
||||
enum nl80211_iftype iftype, u8 *bssid, bool qos);
|
||||
enum nl80211_iftype iftype, const u8 *bssid,
|
||||
bool qos);
|
||||
|
||||
/**
|
||||
* ieee80211_amsdu_to_8023s - decode an IEEE 802.11n A-MSDU frame
|
||||
@@ -4312,7 +4358,7 @@ void cfg80211_roamed_bss(struct net_device *dev, struct cfg80211_bss *bss,
|
||||
* and not try to connect to any AP any more.
|
||||
*/
|
||||
void cfg80211_disconnected(struct net_device *dev, u16 reason,
|
||||
u8 *ie, size_t ie_len, gfp_t gfp);
|
||||
const u8 *ie, size_t ie_len, gfp_t gfp);
|
||||
|
||||
/**
|
||||
* cfg80211_ready_on_channel - notification of remain_on_channel start
|
||||
@@ -4768,6 +4814,35 @@ int cfg80211_iter_combinations(struct wiphy *wiphy,
|
||||
void *data),
|
||||
void *data);
|
||||
|
||||
/*
|
||||
* cfg80211_stop_iface - trigger interface disconnection
|
||||
*
|
||||
* @wiphy: the wiphy
|
||||
* @wdev: wireless device
|
||||
* @gfp: context flags
|
||||
*
|
||||
* Trigger interface to be stopped as if AP was stopped, IBSS/mesh left, STA
|
||||
* disconnected.
|
||||
*
|
||||
* Note: This doesn't need any locks and is asynchronous.
|
||||
*/
|
||||
void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev,
|
||||
gfp_t gfp);
|
||||
|
||||
/**
|
||||
* cfg80211_shutdown_all_interfaces - shut down all interfaces for a wiphy
|
||||
* @wiphy: the wiphy to shut down
|
||||
*
|
||||
* This function shuts down all interfaces belonging to this wiphy by
|
||||
* calling dev_close() (and treating non-netdev interfaces as needed).
|
||||
* It shouldn't really be used unless there are some fatal device errors
|
||||
* that really can't be recovered in any other way.
|
||||
*
|
||||
* Callers must hold the RTNL and be able to deal with callbacks into
|
||||
* the driver while the function is running.
|
||||
*/
|
||||
void cfg80211_shutdown_all_interfaces(struct wiphy *wiphy);
|
||||
|
||||
/* Logging, debugging and troubleshooting/diagnostic helpers. */
|
||||
|
||||
/* wiphy_printk helpers, similar to dev_printk */
|
||||
|
@@ -1113,7 +1113,9 @@ enum ieee80211_vif_flags {
|
||||
* @addr: address of this interface
|
||||
* @p2p: indicates whether this AP or STA interface is a p2p
|
||||
* interface, i.e. a GO or p2p-sta respectively
|
||||
* @csa_active: marks whether a channel switch is going on
|
||||
* @csa_active: marks whether a channel switch is going on. Internally it is
|
||||
* write-protected by sdata_lock and local->mtx so holding either is fine
|
||||
* for read access.
|
||||
* @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
|
||||
@@ -1374,6 +1376,7 @@ struct ieee80211_sta_rates {
|
||||
* the station moves to associated state.
|
||||
* @smps_mode: current SMPS mode (off, static or dynamic)
|
||||
* @rates: rate control selection table
|
||||
* @tdls: indicates whether the STA is a TDLS peer
|
||||
*/
|
||||
struct ieee80211_sta {
|
||||
u32 supp_rates[IEEE80211_NUM_BANDS];
|
||||
@@ -1388,6 +1391,7 @@ struct ieee80211_sta {
|
||||
enum ieee80211_sta_rx_bandwidth bandwidth;
|
||||
enum ieee80211_smps_mode smps_mode;
|
||||
struct ieee80211_sta_rates __rcu *rates;
|
||||
bool tdls;
|
||||
|
||||
/* must be last */
|
||||
u8 drv_priv[0] __aligned(sizeof(void *));
|
||||
@@ -2765,6 +2769,10 @@ enum ieee80211_roc_type {
|
||||
* information in bss_conf is set up and the beacon can be retrieved. A
|
||||
* channel context is bound before this is called.
|
||||
* @leave_ibss: Leave the IBSS again.
|
||||
*
|
||||
* @get_expected_throughput: extract the expected throughput towards the
|
||||
* specified station. The returned value is expressed in Kbps. It returns 0
|
||||
* if the RC algorithm does not have proper data to provide.
|
||||
*/
|
||||
struct ieee80211_ops {
|
||||
void (*tx)(struct ieee80211_hw *hw,
|
||||
@@ -2958,6 +2966,7 @@ struct ieee80211_ops {
|
||||
|
||||
int (*join_ibss)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
|
||||
void (*leave_ibss)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
|
||||
u32 (*get_expected_throughput)(struct ieee80211_sta *sta);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -3407,6 +3416,47 @@ void ieee80211_tx_status_irqsafe(struct ieee80211_hw *hw,
|
||||
*/
|
||||
void ieee80211_report_low_ack(struct ieee80211_sta *sta, u32 num_packets);
|
||||
|
||||
#define IEEE80211_MAX_CSA_COUNTERS_NUM 2
|
||||
|
||||
/**
|
||||
* struct ieee80211_mutable_offsets - mutable beacon offsets
|
||||
* @tim_offset: position of TIM element
|
||||
* @tim_length: size of TIM element
|
||||
* @csa_counter_offs: array of IEEE80211_MAX_CSA_COUNTERS_NUM offsets
|
||||
* to CSA counters. This array can contain zero values which
|
||||
* should be ignored.
|
||||
*/
|
||||
struct ieee80211_mutable_offsets {
|
||||
u16 tim_offset;
|
||||
u16 tim_length;
|
||||
|
||||
u16 csa_counter_offs[IEEE80211_MAX_CSA_COUNTERS_NUM];
|
||||
};
|
||||
|
||||
/**
|
||||
* ieee80211_beacon_get_template - beacon template generation function
|
||||
* @hw: pointer obtained from ieee80211_alloc_hw().
|
||||
* @vif: &struct ieee80211_vif pointer from the add_interface callback.
|
||||
* @offs: &struct ieee80211_mutable_offsets pointer to struct that will
|
||||
* receive the offsets that may be updated by the driver.
|
||||
*
|
||||
* If the driver implements beaconing modes, it must use this function to
|
||||
* obtain the beacon template.
|
||||
*
|
||||
* This function should be used if the beacon frames are generated by the
|
||||
* device, and then the driver must use the returned beacon as the template
|
||||
* The driver or the device are responsible to update the DTIM and, when
|
||||
* applicable, the CSA count.
|
||||
*
|
||||
* The driver is responsible for freeing the returned skb.
|
||||
*
|
||||
* Return: The beacon template. %NULL on error.
|
||||
*/
|
||||
struct sk_buff *
|
||||
ieee80211_beacon_get_template(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_mutable_offsets *offs);
|
||||
|
||||
/**
|
||||
* ieee80211_beacon_get_tim - beacon generation function
|
||||
* @hw: pointer obtained from ieee80211_alloc_hw().
|
||||
@@ -3418,16 +3468,12 @@ void ieee80211_report_low_ack(struct ieee80211_sta *sta, u32 num_packets);
|
||||
* Set to 0 if invalid (in non-AP modes).
|
||||
*
|
||||
* If the driver implements beaconing modes, it must use this function to
|
||||
* obtain the beacon frame/template.
|
||||
* obtain the beacon frame.
|
||||
*
|
||||
* If the beacon frames are generated by the host system (i.e., not in
|
||||
* hardware/firmware), the driver uses this function to get each beacon
|
||||
* frame from mac80211 -- it is responsible for calling this function
|
||||
* before the beacon is needed (e.g. based on hardware interrupt).
|
||||
*
|
||||
* If the beacon frames are generated by the device, then the driver
|
||||
* must use the returned beacon as the template and change the TIM IE
|
||||
* according to the current DTIM parameters/TIM bitmap.
|
||||
* frame from mac80211 -- it is responsible for calling this function exactly
|
||||
* once before the beacon is needed (e.g. based on hardware interrupt).
|
||||
*
|
||||
* The driver is responsible for freeing the returned skb.
|
||||
*
|
||||
@@ -3452,6 +3498,20 @@ static inline struct sk_buff *ieee80211_beacon_get(struct ieee80211_hw *hw,
|
||||
return ieee80211_beacon_get_tim(hw, vif, NULL, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* ieee80211_csa_update_counter - request mac80211 to decrement the csa counter
|
||||
* @vif: &struct ieee80211_vif pointer from the add_interface callback.
|
||||
*
|
||||
* The csa counter should be updated after each beacon transmission.
|
||||
* This function is called implicitly when
|
||||
* ieee80211_beacon_get/ieee80211_beacon_get_tim are called, however if the
|
||||
* beacon frames are generated by the device, the driver should call this
|
||||
* function after each beacon transmission to sync mac80211's csa counters.
|
||||
*
|
||||
* Return: new csa counter value
|
||||
*/
|
||||
u8 ieee80211_csa_update_counter(struct ieee80211_vif *vif);
|
||||
|
||||
/**
|
||||
* ieee80211_csa_finish - notify mac80211 about channel switch
|
||||
* @vif: &struct ieee80211_vif pointer from the add_interface callback.
|
||||
@@ -4480,6 +4540,8 @@ struct rate_control_ops {
|
||||
void (*add_sta_debugfs)(void *priv, void *priv_sta,
|
||||
struct dentry *dir);
|
||||
void (*remove_sta_debugfs)(void *priv, void *priv_sta);
|
||||
|
||||
u32 (*get_expected_throughput)(void *priv_sta);
|
||||
};
|
||||
|
||||
static inline int rate_supported(struct ieee80211_sta *sta,
|
||||
|
Reference in New Issue
Block a user