diff options
author | John W. Linville <linville@tuxdriver.com> | 2010-08-25 14:51:42 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-08-25 14:51:42 -0400 |
commit | e569aa78ba01f7f66e016a4d57310fd041524d17 (patch) | |
tree | eaedc03d42ee2bf6200fc07b080a99bad103def3 /include/net | |
parent | 4562487a00445eab96311365ba15c41dc4d043cd (diff) | |
parent | 268bae0b6879f238ba57f5f801958d1254e136f7 (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.h | 179 | ||||
-rw-r--r-- | include/net/mac80211.h | 60 |
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 */ |
571 | struct wiphy; | 623 | struct wiphy; |
572 | 624 | ||
573 | /* from net/ieee80211.h */ | 625 | /** |
574 | struct 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 | ||
1311 | struct 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 | */ |
1290 | struct wiphy { | 1370 | struct 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 | */ |
1718 | unsigned int ieee80211_hdrlen(__le16 fc); | 1803 | unsigned 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 | */ |
1778 | const u8 *cfg80211_find_ie(u8 eid, const u8 *ies, int len); | 1871 | const 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, | |||
2181 | void cfg80211_ibss_joined(struct net_device *dev, const u8 *bssid, gfp_t gfp); | 2276 | void 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 | */ |
2390 | bool cfg80211_rx_action(struct net_device *dev, int freq, const u8 *buf, | 2511 | bool 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 | */ |
2406 | void cfg80211_action_tx_status(struct net_device *dev, u64 cookie, | 2527 | void 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 | */ |
153 | enum ieee80211_bss_change { | 154 | enum 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 | */ |
227 | struct ieee80211_bss_conf { | 232 | struct 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 | */ | ||
792 | enum 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 | */ |
848 | struct ieee80211_key_conf { | 840 | struct 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 | */ |
1106 | struct ieee80211_hw { | 1102 | struct 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 | */ |
1691 | struct ieee80211_ops { | 1690 | struct 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 | */ |
1898 | void ieee80211_restart_hw(struct ieee80211_hw *hw); | 1898 | void 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 | */ | ||
1906 | void 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 | */ | ||
1914 | void 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 | */ |
2519 | void ieee80211_chswitch_done(struct ieee80211_vif *vif, bool success); | 2535 | void 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 | */ | ||
2546 | void 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 | /** |