aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2010-08-25 14:51:42 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-08-25 14:51:42 -0400
commite569aa78ba01f7f66e016a4d57310fd041524d17 (patch)
treeeaedc03d42ee2bf6200fc07b080a99bad103def3 /include/net
parent4562487a00445eab96311365ba15c41dc4d043cd (diff)
parent268bae0b6879f238ba57f5f801958d1254e136f7 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6 into for-davem
Conflicts: drivers/net/wireless/libertas/if_sdio.c
Diffstat (limited to 'include/net')
-rw-r--r--include/net/cfg80211.h179
-rw-r--r--include/net/mac80211.h60
2 files changed, 194 insertions, 45 deletions
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 2fd06c60ffbb..f2740537b5d6 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -25,6 +25,43 @@
25#include <linux/wireless.h> 25#include <linux/wireless.h>
26 26
27 27
28/**
29 * DOC: Introduction
30 *
31 * cfg80211 is the configuration API for 802.11 devices in Linux. It bridges
32 * userspace and drivers, and offers some utility functionality associated
33 * with 802.11. cfg80211 must, directly or indirectly via mac80211, be used
34 * by all modern wireless drivers in Linux, so that they offer a consistent
35 * API through nl80211. For backward compatibility, cfg80211 also offers
36 * wireless extensions to userspace, but hides them from drivers completely.
37 *
38 * Additionally, cfg80211 contains code to help enforce regulatory spectrum
39 * use restrictions.
40 */
41
42
43/**
44 * DOC: Device registration
45 *
46 * In order for a driver to use cfg80211, it must register the hardware device
47 * with cfg80211. This happens through a number of hardware capability structs
48 * described below.
49 *
50 * The fundamental structure for each device is the 'wiphy', of which each
51 * instance describes a physical wireless device connected to the system. Each
52 * such wiphy can have zero, one, or many virtual interfaces associated with
53 * it, which need to be identified as such by pointing the network interface's
54 * @ieee80211_ptr pointer to a &struct wireless_dev which further describes
55 * the wireless part of the interface, normally this struct is embedded in the
56 * network interface's private data area. Drivers can optionally allow creating
57 * or destroying virtual interfaces on the fly, but without at least one or the
58 * ability to create some the wireless device isn't useful.
59 *
60 * Each wiphy structure contains device capability information, and also has
61 * a pointer to the various operations the driver offers. The definitions and
62 * structures here describe these capabilities in detail.
63 */
64
28/* 65/*
29 * wireless hardware capability structures 66 * wireless hardware capability structures
30 */ 67 */
@@ -205,6 +242,21 @@ struct ieee80211_supported_band {
205 */ 242 */
206 243
207/** 244/**
245 * DOC: Actions and configuration
246 *
247 * Each wireless device and each virtual interface offer a set of configuration
248 * operations and other actions that are invoked by userspace. Each of these
249 * actions is described in the operations structure, and the parameters these
250 * operations use are described separately.
251 *
252 * Additionally, some operations are asynchronous and expect to get status
253 * information via some functions that drivers need to call.
254 *
255 * Scanning and BSS list handling with its associated functionality is described
256 * in a separate chapter.
257 */
258
259/**
208 * struct vif_params - describes virtual interface parameters 260 * struct vif_params - describes virtual interface parameters
209 * @mesh_id: mesh ID to use 261 * @mesh_id: mesh ID to use
210 * @mesh_id_len: length of the mesh ID 262 * @mesh_id_len: length of the mesh ID
@@ -570,8 +622,28 @@ struct ieee80211_txq_params {
570/* from net/wireless.h */ 622/* from net/wireless.h */
571struct wiphy; 623struct wiphy;
572 624
573/* from net/ieee80211.h */ 625/**
574struct ieee80211_channel; 626 * DOC: Scanning and BSS list handling
627 *
628 * The scanning process itself is fairly simple, but cfg80211 offers quite
629 * a bit of helper functionality. To start a scan, the scan operation will
630 * be invoked with a scan definition. This scan definition contains the
631 * channels to scan, and the SSIDs to send probe requests for (including the
632 * wildcard, if desired). A passive scan is indicated by having no SSIDs to
633 * probe. Additionally, a scan request may contain extra information elements
634 * that should be added to the probe request. The IEs are guaranteed to be
635 * well-formed, and will not exceed the maximum length the driver advertised
636 * in the wiphy structure.
637 *
638 * When scanning finds a BSS, cfg80211 needs to be notified of that, because
639 * it is responsible for maintaining the BSS list; the driver should not
640 * maintain a list itself. For this notification, various functions exist.
641 *
642 * Since drivers do not maintain a BSS list, there are also a number of
643 * functions to search for a BSS and obtain information about it from the
644 * BSS structure cfg80211 maintains. The BSS list is also made available
645 * to userspace.
646 */
575 647
576/** 648/**
577 * struct cfg80211_ssid - SSID description 649 * struct cfg80211_ssid - SSID description
@@ -1020,7 +1092,7 @@ struct cfg80211_pmksa {
1020 * @cancel_remain_on_channel: Cancel an on-going remain-on-channel operation. 1092 * @cancel_remain_on_channel: Cancel an on-going remain-on-channel operation.
1021 * This allows the operation to be terminated prior to timeout based on 1093 * This allows the operation to be terminated prior to timeout based on
1022 * the duration value. 1094 * the duration value.
1023 * @action: Transmit an action frame 1095 * @mgmt_tx: Transmit a management frame
1024 * 1096 *
1025 * @testmode_cmd: run a test mode command 1097 * @testmode_cmd: run a test mode command
1026 * 1098 *
@@ -1172,7 +1244,7 @@ struct cfg80211_ops {
1172 struct net_device *dev, 1244 struct net_device *dev,
1173 u64 cookie); 1245 u64 cookie);
1174 1246
1175 int (*action)(struct wiphy *wiphy, struct net_device *dev, 1247 int (*mgmt_tx)(struct wiphy *wiphy, struct net_device *dev,
1176 struct ieee80211_channel *chan, 1248 struct ieee80211_channel *chan,
1177 enum nl80211_channel_type channel_type, 1249 enum nl80211_channel_type channel_type,
1178 bool channel_type_valid, 1250 bool channel_type_valid,
@@ -1236,6 +1308,10 @@ struct mac_address {
1236 u8 addr[ETH_ALEN]; 1308 u8 addr[ETH_ALEN];
1237}; 1309};
1238 1310
1311struct ieee80211_txrx_stypes {
1312 u16 tx, rx;
1313};
1314
1239/** 1315/**
1240 * struct wiphy - wireless hardware description 1316 * struct wiphy - wireless hardware description
1241 * @reg_notifier: the driver's regulatory notification callback 1317 * @reg_notifier: the driver's regulatory notification callback
@@ -1286,6 +1362,10 @@ struct mac_address {
1286 * @privid: a pointer that drivers can use to identify if an arbitrary 1362 * @privid: a pointer that drivers can use to identify if an arbitrary
1287 * wiphy is theirs, e.g. in global notifiers 1363 * wiphy is theirs, e.g. in global notifiers
1288 * @bands: information about bands/channels supported by this device 1364 * @bands: information about bands/channels supported by this device
1365 *
1366 * @mgmt_stypes: bitmasks of frame subtypes that can be subscribed to or
1367 * transmitted through nl80211, points to an array indexed by interface
1368 * type
1289 */ 1369 */
1290struct wiphy { 1370struct wiphy {
1291 /* assign these fields before you register the wiphy */ 1371 /* assign these fields before you register the wiphy */
@@ -1294,9 +1374,12 @@ struct wiphy {
1294 u8 perm_addr[ETH_ALEN]; 1374 u8 perm_addr[ETH_ALEN];
1295 u8 addr_mask[ETH_ALEN]; 1375 u8 addr_mask[ETH_ALEN];
1296 1376
1297 u16 n_addresses;
1298 struct mac_address *addresses; 1377 struct mac_address *addresses;
1299 1378
1379 const struct ieee80211_txrx_stypes *mgmt_stypes;
1380
1381 u16 n_addresses;
1382
1300 /* Supported interface modes, OR together BIT(NL80211_IFTYPE_...) */ 1383 /* Supported interface modes, OR together BIT(NL80211_IFTYPE_...) */
1301 u16 interface_modes; 1384 u16 interface_modes;
1302 1385
@@ -1492,8 +1575,8 @@ struct cfg80211_cached_keys;
1492 * set by driver (if supported) on add_interface BEFORE registering the 1575 * set by driver (if supported) on add_interface BEFORE registering the
1493 * netdev and may otherwise be used by driver read-only, will be update 1576 * netdev and may otherwise be used by driver read-only, will be update
1494 * by cfg80211 on change_interface 1577 * by cfg80211 on change_interface
1495 * @action_registrations: list of registrations for action frames 1578 * @mgmt_registrations: list of registrations for management frames
1496 * @action_registrations_lock: lock for the list 1579 * @mgmt_registrations_lock: lock for the list
1497 * @mtx: mutex used to lock data in this struct 1580 * @mtx: mutex used to lock data in this struct
1498 * @cleanup_work: work struct used for cleanup that can't be done directly 1581 * @cleanup_work: work struct used for cleanup that can't be done directly
1499 */ 1582 */
@@ -1505,8 +1588,8 @@ struct wireless_dev {
1505 struct list_head list; 1588 struct list_head list;
1506 struct net_device *netdev; 1589 struct net_device *netdev;
1507 1590
1508 struct list_head action_registrations; 1591 struct list_head mgmt_registrations;
1509 spinlock_t action_registrations_lock; 1592 spinlock_t mgmt_registrations_lock;
1510 1593
1511 struct mutex mtx; 1594 struct mutex mtx;
1512 1595
@@ -1563,8 +1646,10 @@ static inline void *wdev_priv(struct wireless_dev *wdev)
1563 return wiphy_priv(wdev->wiphy); 1646 return wiphy_priv(wdev->wiphy);
1564} 1647}
1565 1648
1566/* 1649/**
1567 * Utility functions 1650 * DOC: Utility functions
1651 *
1652 * cfg80211 offers a number of utility functions that can be useful.
1568 */ 1653 */
1569 1654
1570/** 1655/**
@@ -1715,7 +1800,15 @@ unsigned int ieee80211_get_hdrlen_from_skb(const struct sk_buff *skb);
1715 * ieee80211_hdrlen - get header length in bytes from frame control 1800 * ieee80211_hdrlen - get header length in bytes from frame control
1716 * @fc: frame control field in little-endian format 1801 * @fc: frame control field in little-endian format
1717 */ 1802 */
1718unsigned int ieee80211_hdrlen(__le16 fc); 1803unsigned int __attribute_const__ ieee80211_hdrlen(__le16 fc);
1804
1805/**
1806 * DOC: Data path helpers
1807 *
1808 * In addition to generic utilities, cfg80211 also offers
1809 * functions that help implement the data path for devices
1810 * that do not do the 802.11/802.3 conversion on the device.
1811 */
1719 1812
1720/** 1813/**
1721 * ieee80211_data_to_8023 - convert an 802.11 data frame to 802.3 1814 * ieee80211_data_to_8023 - convert an 802.11 data frame to 802.3
@@ -1777,8 +1870,10 @@ unsigned int cfg80211_classify8021d(struct sk_buff *skb);
1777 */ 1870 */
1778const u8 *cfg80211_find_ie(u8 eid, const u8 *ies, int len); 1871const u8 *cfg80211_find_ie(u8 eid, const u8 *ies, int len);
1779 1872
1780/* 1873/**
1781 * Regulatory helper functions for wiphys 1874 * DOC: Regulatory enforcement infrastructure
1875 *
1876 * TODO
1782 */ 1877 */
1783 1878
1784/** 1879/**
@@ -2181,6 +2276,20 @@ void cfg80211_michael_mic_failure(struct net_device *dev, const u8 *addr,
2181void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, gfp_t gfp); 2276void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, gfp_t gfp);
2182 2277
2183/** 2278/**
2279 * DOC: RFkill integration
2280 *
2281 * RFkill integration in cfg80211 is almost invisible to drivers,
2282 * as cfg80211 automatically registers an rfkill instance for each
2283 * wireless device it knows about. Soft kill is also translated
2284 * into disconnecting and turning all interfaces off, drivers are
2285 * expected to turn off the device when all interfaces are down.
2286 *
2287 * However, devices may have a hard RFkill line, in which case they
2288 * also need to interact with the rfkill subsystem, via cfg80211.
2289 * They can do this with a few helper functions documented here.
2290 */
2291
2292/**
2184 * wiphy_rfkill_set_hw_state - notify cfg80211 about hw block state 2293 * wiphy_rfkill_set_hw_state - notify cfg80211 about hw block state
2185 * @wiphy: the wiphy 2294 * @wiphy: the wiphy
2186 * @blocked: block status 2295 * @blocked: block status
@@ -2201,6 +2310,17 @@ void wiphy_rfkill_stop_polling(struct wiphy *wiphy);
2201 2310
2202#ifdef CONFIG_NL80211_TESTMODE 2311#ifdef CONFIG_NL80211_TESTMODE
2203/** 2312/**
2313 * DOC: Test mode
2314 *
2315 * Test mode is a set of utility functions to allow drivers to
2316 * interact with driver-specific tools to aid, for instance,
2317 * factory programming.
2318 *
2319 * This chapter describes how drivers interact with it, for more
2320 * information see the nl80211 book's chapter on it.
2321 */
2322
2323/**
2204 * cfg80211_testmode_alloc_reply_skb - allocate testmode reply 2324 * cfg80211_testmode_alloc_reply_skb - allocate testmode reply
2205 * @wiphy: the wiphy 2325 * @wiphy: the wiphy
2206 * @approxlen: an upper bound of the length of the data that will 2326 * @approxlen: an upper bound of the length of the data that will
@@ -2373,38 +2493,39 @@ void cfg80211_new_sta(struct net_device *dev, const u8 *mac_addr,
2373 struct station_info *sinfo, gfp_t gfp); 2493 struct station_info *sinfo, gfp_t gfp);
2374 2494
2375/** 2495/**
2376 * cfg80211_rx_action - notification of received, unprocessed Action frame 2496 * cfg80211_rx_mgmt - notification of received, unprocessed management frame
2377 * @dev: network device 2497 * @dev: network device
2378 * @freq: Frequency on which the frame was received in MHz 2498 * @freq: Frequency on which the frame was received in MHz
2379 * @buf: Action frame (header + body) 2499 * @buf: Management frame (header + body)
2380 * @len: length of the frame data 2500 * @len: length of the frame data
2381 * @gfp: context flags 2501 * @gfp: context flags
2382 * Returns %true if a user space application is responsible for rejecting the 2502 *
2383 * unrecognized Action frame; %false if no such application is registered 2503 * Returns %true if a user space application has registered for this frame.
2384 * (i.e., the driver is responsible for rejecting the unrecognized Action 2504 * For action frames, that makes it responsible for rejecting unrecognized
2385 * frame) 2505 * action frames; %false otherwise, in which case for action frames the
2506 * driver is responsible for rejecting the frame.
2386 * 2507 *
2387 * This function is called whenever an Action frame is received for a station 2508 * This function is called whenever an Action frame is received for a station
2388 * mode interface, but is not processed in kernel. 2509 * mode interface, but is not processed in kernel.
2389 */ 2510 */
2390bool cfg80211_rx_action(struct net_device *dev, int freq, const u8 *buf, 2511bool cfg80211_rx_mgmt(struct net_device *dev, int freq, const u8 *buf,
2391 size_t len, gfp_t gfp); 2512 size_t len, gfp_t gfp);
2392 2513
2393/** 2514/**
2394 * cfg80211_action_tx_status - notification of TX status for Action frame 2515 * cfg80211_mgmt_tx_status - notification of TX status for management frame
2395 * @dev: network device 2516 * @dev: network device
2396 * @cookie: Cookie returned by cfg80211_ops::action() 2517 * @cookie: Cookie returned by cfg80211_ops::mgmt_tx()
2397 * @buf: Action frame (header + body) 2518 * @buf: Management frame (header + body)
2398 * @len: length of the frame data 2519 * @len: length of the frame data
2399 * @ack: Whether frame was acknowledged 2520 * @ack: Whether frame was acknowledged
2400 * @gfp: context flags 2521 * @gfp: context flags
2401 * 2522 *
2402 * This function is called whenever an Action frame was requested to be 2523 * This function is called whenever a management frame was requested to be
2403 * transmitted with cfg80211_ops::action() to report the TX status of the 2524 * transmitted with cfg80211_ops::mgmt_tx() to report the TX status of the
2404 * transmission attempt. 2525 * transmission attempt.
2405 */ 2526 */
2406void cfg80211_action_tx_status(struct net_device *dev, u64 cookie, 2527void cfg80211_mgmt_tx_status(struct net_device *dev, u64 cookie,
2407 const u8 *buf, size_t len, bool ack, gfp_t gfp); 2528 const u8 *buf, size_t len, bool ack, gfp_t gfp);
2408 2529
2409 2530
2410/** 2531/**
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index b0787a1dea90..2a1811366076 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -149,6 +149,7 @@ struct ieee80211_low_level_stats {
149 * @BSS_CHANGED_ARP_FILTER: Hardware ARP filter address list or state changed. 149 * @BSS_CHANGED_ARP_FILTER: Hardware ARP filter address list or state changed.
150 * @BSS_CHANGED_QOS: QoS for this association was enabled/disabled. Note 150 * @BSS_CHANGED_QOS: QoS for this association was enabled/disabled. Note
151 * that it is only ever disabled for station mode. 151 * that it is only ever disabled for station mode.
152 * @BSS_CHANGED_IDLE: Idle changed for this BSS/interface.
152 */ 153 */
153enum ieee80211_bss_change { 154enum ieee80211_bss_change {
154 BSS_CHANGED_ASSOC = 1<<0, 155 BSS_CHANGED_ASSOC = 1<<0,
@@ -165,6 +166,7 @@ enum ieee80211_bss_change {
165 BSS_CHANGED_IBSS = 1<<11, 166 BSS_CHANGED_IBSS = 1<<11,
166 BSS_CHANGED_ARP_FILTER = 1<<12, 167 BSS_CHANGED_ARP_FILTER = 1<<12,
167 BSS_CHANGED_QOS = 1<<13, 168 BSS_CHANGED_QOS = 1<<13,
169 BSS_CHANGED_IDLE = 1<<14,
168 170
169 /* when adding here, make sure to change ieee80211_reconfig */ 171 /* when adding here, make sure to change ieee80211_reconfig */
170}; 172};
@@ -223,6 +225,9 @@ enum ieee80211_bss_change {
223 * hardware must not perform any ARP filtering. Note, that the filter will 225 * hardware must not perform any ARP filtering. Note, that the filter will
224 * be enabled also in promiscuous mode. 226 * be enabled also in promiscuous mode.
225 * @qos: This is a QoS-enabled BSS. 227 * @qos: This is a QoS-enabled BSS.
228 * @idle: This interface is idle. There's also a global idle flag in the
229 * hardware config which may be more appropriate depending on what
230 * your driver/device needs to do.
226 */ 231 */
227struct ieee80211_bss_conf { 232struct ieee80211_bss_conf {
228 const u8 *bssid; 233 const u8 *bssid;
@@ -247,6 +252,7 @@ struct ieee80211_bss_conf {
247 u8 arp_addr_cnt; 252 u8 arp_addr_cnt;
248 bool arp_filter_enabled; 253 bool arp_filter_enabled;
249 bool qos; 254 bool qos;
255 bool idle;
250}; 256};
251 257
252/** 258/**
@@ -783,20 +789,6 @@ static inline bool ieee80211_vif_is_mesh(struct ieee80211_vif *vif)
783} 789}
784 790
785/** 791/**
786 * enum ieee80211_key_alg - key algorithm
787 * @ALG_WEP: WEP40 or WEP104
788 * @ALG_TKIP: TKIP
789 * @ALG_CCMP: CCMP (AES)
790 * @ALG_AES_CMAC: AES-128-CMAC
791 */
792enum ieee80211_key_alg {
793 ALG_WEP,
794 ALG_TKIP,
795 ALG_CCMP,
796 ALG_AES_CMAC,
797};
798
799/**
800 * enum ieee80211_key_flags - key flags 792 * enum ieee80211_key_flags - key flags
801 * 793 *
802 * These flags are used for communication about keys between the driver 794 * These flags are used for communication about keys between the driver
@@ -833,7 +825,7 @@ enum ieee80211_key_flags {
833 * @hw_key_idx: To be set by the driver, this is the key index the driver 825 * @hw_key_idx: To be set by the driver, this is the key index the driver
834 * wants to be given when a frame is transmitted and needs to be 826 * wants to be given when a frame is transmitted and needs to be
835 * encrypted in hardware. 827 * encrypted in hardware.
836 * @alg: The key algorithm. 828 * @cipher: The key's cipher suite selector.
837 * @flags: key flags, see &enum ieee80211_key_flags. 829 * @flags: key flags, see &enum ieee80211_key_flags.
838 * @keyidx: the key index (0-3) 830 * @keyidx: the key index (0-3)
839 * @keylen: key material length 831 * @keylen: key material length
@@ -846,7 +838,7 @@ enum ieee80211_key_flags {
846 * @iv_len: The IV length for this key type 838 * @iv_len: The IV length for this key type
847 */ 839 */
848struct ieee80211_key_conf { 840struct ieee80211_key_conf {
849 enum ieee80211_key_alg alg; 841 u32 cipher;
850 u8 icv_len; 842 u8 icv_len;
851 u8 iv_len; 843 u8 iv_len;
852 u8 hw_key_idx; 844 u8 hw_key_idx;
@@ -1102,6 +1094,10 @@ enum ieee80211_hw_flags {
1102 * 1094 *
1103 * @max_rates: maximum number of alternate rate retry stages 1095 * @max_rates: maximum number of alternate rate retry stages
1104 * @max_rate_tries: maximum number of tries for each stage 1096 * @max_rate_tries: maximum number of tries for each stage
1097 *
1098 * @napi_weight: weight used for NAPI polling. You must specify an
1099 * appropriate value here if a napi_poll operation is provided
1100 * by your driver.
1105 */ 1101 */
1106struct ieee80211_hw { 1102struct ieee80211_hw {
1107 struct ieee80211_conf conf; 1103 struct ieee80211_conf conf;
@@ -1113,6 +1109,7 @@ struct ieee80211_hw {
1113 int channel_change_time; 1109 int channel_change_time;
1114 int vif_data_size; 1110 int vif_data_size;
1115 int sta_data_size; 1111 int sta_data_size;
1112 int napi_weight;
1116 u16 queues; 1113 u16 queues;
1117 u16 max_listen_interval; 1114 u16 max_listen_interval;
1118 s8 max_signal; 1115 s8 max_signal;
@@ -1687,6 +1684,8 @@ enum ieee80211_ampdu_mlme_action {
1687 * switch operation for CSAs received from the AP may implement this 1684 * switch operation for CSAs received from the AP may implement this
1688 * callback. They must then call ieee80211_chswitch_done() to indicate 1685 * callback. They must then call ieee80211_chswitch_done() to indicate
1689 * completion of the channel switch. 1686 * completion of the channel switch.
1687 *
1688 * @napi_poll: Poll Rx queue for incoming data frames.
1690 */ 1689 */
1691struct ieee80211_ops { 1690struct ieee80211_ops {
1692 int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); 1691 int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb);
@@ -1752,6 +1751,7 @@ struct ieee80211_ops {
1752 void (*flush)(struct ieee80211_hw *hw, bool drop); 1751 void (*flush)(struct ieee80211_hw *hw, bool drop);
1753 void (*channel_switch)(struct ieee80211_hw *hw, 1752 void (*channel_switch)(struct ieee80211_hw *hw,
1754 struct ieee80211_channel_switch *ch_switch); 1753 struct ieee80211_channel_switch *ch_switch);
1754 int (*napi_poll)(struct ieee80211_hw *hw, int budget);
1755}; 1755};
1756 1756
1757/** 1757/**
@@ -1897,6 +1897,22 @@ void ieee80211_free_hw(struct ieee80211_hw *hw);
1897 */ 1897 */
1898void ieee80211_restart_hw(struct ieee80211_hw *hw); 1898void ieee80211_restart_hw(struct ieee80211_hw *hw);
1899 1899
1900/** ieee80211_napi_schedule - schedule NAPI poll
1901 *
1902 * Use this function to schedule NAPI polling on a device.
1903 *
1904 * @hw: the hardware to start polling
1905 */
1906void ieee80211_napi_schedule(struct ieee80211_hw *hw);
1907
1908/** ieee80211_napi_complete - complete NAPI polling
1909 *
1910 * Use this function to finish NAPI polling on a device.
1911 *
1912 * @hw: the hardware to stop polling
1913 */
1914void ieee80211_napi_complete(struct ieee80211_hw *hw);
1915
1900/** 1916/**
1901 * ieee80211_rx - receive frame 1917 * ieee80211_rx - receive frame
1902 * 1918 *
@@ -2518,6 +2534,18 @@ void ieee80211_cqm_rssi_notify(struct ieee80211_vif *vif,
2518 */ 2534 */
2519void ieee80211_chswitch_done(struct ieee80211_vif *vif, bool success); 2535void ieee80211_chswitch_done(struct ieee80211_vif *vif, bool success);
2520 2536
2537/**
2538 * ieee80211_request_smps - request SM PS transition
2539 * @vif: &struct ieee80211_vif pointer from the add_interface callback.
2540 * @smps_mode: new SM PS mode
2541 *
2542 * This allows the driver to request an SM PS transition in managed
2543 * mode. This is useful when the driver has more information than
2544 * the stack about possible interference, for example by bluetooth.
2545 */
2546void ieee80211_request_smps(struct ieee80211_vif *vif,
2547 enum ieee80211_smps_mode smps_mode);
2548
2521/* Rate control API */ 2549/* Rate control API */
2522 2550
2523/** 2551/**