diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/nl80211.h | 30 | ||||
| -rw-r--r-- | include/net/cfg80211.h | 40 | ||||
| -rw-r--r-- | include/net/ieee80211_radiotap.h | 11 | ||||
| -rw-r--r-- | include/net/mac80211.h | 87 |
4 files changed, 143 insertions, 25 deletions
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index 2f3878806403..458416279347 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
| @@ -565,6 +565,14 @@ | |||
| 565 | * %NL80211_ATTR_IFINDEX is now on %NL80211_ATTR_WIPHY_FREQ with | 565 | * %NL80211_ATTR_IFINDEX is now on %NL80211_ATTR_WIPHY_FREQ with |
| 566 | * %NL80211_ATTR_WIPHY_CHANNEL_TYPE. | 566 | * %NL80211_ATTR_WIPHY_CHANNEL_TYPE. |
| 567 | * | 567 | * |
| 568 | * @NL80211_CMD_START_P2P_DEVICE: Start the given P2P Device, identified by | ||
| 569 | * its %NL80211_ATTR_WDEV identifier. It must have been created with | ||
| 570 | * %NL80211_CMD_NEW_INTERFACE previously. After it has been started, the | ||
| 571 | * P2P Device can be used for P2P operations, e.g. remain-on-channel and | ||
| 572 | * public action frame TX. | ||
| 573 | * @NL80211_CMD_STOP_P2P_DEVICE: Stop the given P2P Device, identified by | ||
| 574 | * its %NL80211_ATTR_WDEV identifier. | ||
| 575 | * | ||
| 568 | * @NL80211_CMD_MAX: highest used command number | 576 | * @NL80211_CMD_MAX: highest used command number |
| 569 | * @__NL80211_CMD_AFTER_LAST: internal use | 577 | * @__NL80211_CMD_AFTER_LAST: internal use |
| 570 | */ | 578 | */ |
| @@ -708,6 +716,9 @@ enum nl80211_commands { | |||
| 708 | 716 | ||
| 709 | NL80211_CMD_CH_SWITCH_NOTIFY, | 717 | NL80211_CMD_CH_SWITCH_NOTIFY, |
| 710 | 718 | ||
| 719 | NL80211_CMD_START_P2P_DEVICE, | ||
| 720 | NL80211_CMD_STOP_P2P_DEVICE, | ||
| 721 | |||
| 711 | /* add new commands above here */ | 722 | /* add new commands above here */ |
| 712 | 723 | ||
| 713 | /* used to define NL80211_CMD_MAX below */ | 724 | /* used to define NL80211_CMD_MAX below */ |
| @@ -1575,6 +1586,10 @@ enum nl80211_attrs { | |||
| 1575 | * @NL80211_IFTYPE_MESH_POINT: mesh point | 1586 | * @NL80211_IFTYPE_MESH_POINT: mesh point |
| 1576 | * @NL80211_IFTYPE_P2P_CLIENT: P2P client | 1587 | * @NL80211_IFTYPE_P2P_CLIENT: P2P client |
| 1577 | * @NL80211_IFTYPE_P2P_GO: P2P group owner | 1588 | * @NL80211_IFTYPE_P2P_GO: P2P group owner |
| 1589 | * @NL80211_IFTYPE_P2P_DEVICE: P2P device interface type, this is not a netdev | ||
| 1590 | * and therefore can't be created in the normal ways, use the | ||
| 1591 | * %NL80211_CMD_START_P2P_DEVICE and %NL80211_CMD_STOP_P2P_DEVICE | ||
| 1592 | * commands to create and destroy one | ||
| 1578 | * @NL80211_IFTYPE_MAX: highest interface type number currently defined | 1593 | * @NL80211_IFTYPE_MAX: highest interface type number currently defined |
| 1579 | * @NUM_NL80211_IFTYPES: number of defined interface types | 1594 | * @NUM_NL80211_IFTYPES: number of defined interface types |
| 1580 | * | 1595 | * |
| @@ -1593,6 +1608,7 @@ enum nl80211_iftype { | |||
| 1593 | NL80211_IFTYPE_MESH_POINT, | 1608 | NL80211_IFTYPE_MESH_POINT, |
| 1594 | NL80211_IFTYPE_P2P_CLIENT, | 1609 | NL80211_IFTYPE_P2P_CLIENT, |
| 1595 | NL80211_IFTYPE_P2P_GO, | 1610 | NL80211_IFTYPE_P2P_GO, |
| 1611 | NL80211_IFTYPE_P2P_DEVICE, | ||
| 1596 | 1612 | ||
| 1597 | /* keep last */ | 1613 | /* keep last */ |
| 1598 | NUM_NL80211_IFTYPES, | 1614 | NUM_NL80211_IFTYPES, |
| @@ -2994,12 +3010,18 @@ enum nl80211_ap_sme_features { | |||
| 2994 | * @NL80211_FEATURE_CELL_BASE_REG_HINTS: This driver has been tested | 3010 | * @NL80211_FEATURE_CELL_BASE_REG_HINTS: This driver has been tested |
| 2995 | * to work properly to suppport receiving regulatory hints from | 3011 | * to work properly to suppport receiving regulatory hints from |
| 2996 | * cellular base stations. | 3012 | * cellular base stations. |
| 3013 | * @NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL: If this is set, an active | ||
| 3014 | * P2P Device (%NL80211_IFTYPE_P2P_DEVICE) requires its own channel | ||
| 3015 | * in the interface combinations, even when it's only used for scan | ||
| 3016 | * and remain-on-channel. This could be due to, for example, the | ||
| 3017 | * remain-on-channel implementation requiring a channel context. | ||
| 2997 | */ | 3018 | */ |
| 2998 | enum nl80211_feature_flags { | 3019 | enum nl80211_feature_flags { |
| 2999 | NL80211_FEATURE_SK_TX_STATUS = 1 << 0, | 3020 | NL80211_FEATURE_SK_TX_STATUS = 1 << 0, |
| 3000 | NL80211_FEATURE_HT_IBSS = 1 << 1, | 3021 | NL80211_FEATURE_HT_IBSS = 1 << 1, |
| 3001 | NL80211_FEATURE_INACTIVITY_TIMER = 1 << 2, | 3022 | NL80211_FEATURE_INACTIVITY_TIMER = 1 << 2, |
| 3002 | NL80211_FEATURE_CELL_BASE_REG_HINTS = 1 << 3, | 3023 | NL80211_FEATURE_CELL_BASE_REG_HINTS = 1 << 3, |
| 3024 | NL80211_FEATURE_P2P_DEVICE_NEEDS_CHANNEL = 1 << 4, | ||
| 3003 | }; | 3025 | }; |
| 3004 | 3026 | ||
| 3005 | /** | 3027 | /** |
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 493fa0c79005..4c518f1f1aca 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
| @@ -1437,7 +1437,8 @@ struct cfg80211_gtk_rekey_data { | |||
| 1437 | * @add_virtual_intf: create a new virtual interface with the given name, | 1437 | * @add_virtual_intf: create a new virtual interface with the given name, |
| 1438 | * must set the struct wireless_dev's iftype. Beware: You must create | 1438 | * must set the struct wireless_dev's iftype. Beware: You must create |
| 1439 | * the new netdev in the wiphy's network namespace! Returns the struct | 1439 | * the new netdev in the wiphy's network namespace! Returns the struct |
| 1440 | * wireless_dev, or an ERR_PTR. | 1440 | * wireless_dev, or an ERR_PTR. For P2P device wdevs, the driver must |
| 1441 | * also set the address member in the wdev. | ||
| 1441 | * | 1442 | * |
| 1442 | * @del_virtual_intf: remove the virtual interface | 1443 | * @del_virtual_intf: remove the virtual interface |
| 1443 | * | 1444 | * |
| @@ -1616,6 +1617,9 @@ struct cfg80211_gtk_rekey_data { | |||
| 1616 | * @get_channel: Get the current operating channel for the virtual interface. | 1617 | * @get_channel: Get the current operating channel for the virtual interface. |
| 1617 | * For monitor interfaces, it should return %NULL unless there's a single | 1618 | * For monitor interfaces, it should return %NULL unless there's a single |
| 1618 | * current monitoring channel. | 1619 | * current monitoring channel. |
| 1620 | * | ||
| 1621 | * @start_p2p_device: Start the given P2P device. | ||
| 1622 | * @stop_p2p_device: Stop the given P2P device. | ||
| 1619 | */ | 1623 | */ |
| 1620 | struct cfg80211_ops { | 1624 | struct cfg80211_ops { |
| 1621 | int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); | 1625 | int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow); |
| @@ -1832,6 +1836,11 @@ struct cfg80211_ops { | |||
| 1832 | (*get_channel)(struct wiphy *wiphy, | 1836 | (*get_channel)(struct wiphy *wiphy, |
| 1833 | struct wireless_dev *wdev, | 1837 | struct wireless_dev *wdev, |
| 1834 | enum nl80211_channel_type *type); | 1838 | enum nl80211_channel_type *type); |
| 1839 | |||
| 1840 | int (*start_p2p_device)(struct wiphy *wiphy, | ||
| 1841 | struct wireless_dev *wdev); | ||
| 1842 | void (*stop_p2p_device)(struct wiphy *wiphy, | ||
| 1843 | struct wireless_dev *wdev); | ||
| 1835 | }; | 1844 | }; |
| 1836 | 1845 | ||
| 1837 | /* | 1846 | /* |
| @@ -2395,6 +2404,8 @@ struct cfg80211_cached_keys; | |||
| 2395 | * @cleanup_work: work struct used for cleanup that can't be done directly | 2404 | * @cleanup_work: work struct used for cleanup that can't be done directly |
| 2396 | * @beacon_interval: beacon interval used on this device for transmitting | 2405 | * @beacon_interval: beacon interval used on this device for transmitting |
| 2397 | * beacons, 0 when not valid | 2406 | * beacons, 0 when not valid |
| 2407 | * @address: The address for this device, valid only if @netdev is %NULL | ||
| 2408 | * @p2p_started: true if this is a P2P Device that has been started | ||
| 2398 | */ | 2409 | */ |
| 2399 | struct wireless_dev { | 2410 | struct wireless_dev { |
| 2400 | struct wiphy *wiphy; | 2411 | struct wiphy *wiphy; |
| @@ -2413,7 +2424,9 @@ struct wireless_dev { | |||
| 2413 | 2424 | ||
| 2414 | struct work_struct cleanup_work; | 2425 | struct work_struct cleanup_work; |
| 2415 | 2426 | ||
| 2416 | bool use_4addr; | 2427 | bool use_4addr, p2p_started; |
| 2428 | |||
| 2429 | u8 address[ETH_ALEN] __aligned(sizeof(u16)); | ||
| 2417 | 2430 | ||
| 2418 | /* currently used for IBSS and SME - might be rearranged later */ | 2431 | /* currently used for IBSS and SME - might be rearranged later */ |
| 2419 | u8 ssid[IEEE80211_MAX_SSID_LEN]; | 2432 | u8 ssid[IEEE80211_MAX_SSID_LEN]; |
| @@ -2461,6 +2474,13 @@ struct wireless_dev { | |||
| 2461 | #endif | 2474 | #endif |
| 2462 | }; | 2475 | }; |
| 2463 | 2476 | ||
| 2477 | static inline u8 *wdev_address(struct wireless_dev *wdev) | ||
| 2478 | { | ||
| 2479 | if (wdev->netdev) | ||
| 2480 | return wdev->netdev->dev_addr; | ||
| 2481 | return wdev->address; | ||
| 2482 | } | ||
| 2483 | |||
| 2464 | /** | 2484 | /** |
| 2465 | * wdev_priv - return wiphy priv from wireless_dev | 2485 | * wdev_priv - return wiphy priv from wireless_dev |
| 2466 | * | 2486 | * |
| @@ -3528,6 +3548,22 @@ void cfg80211_ch_switch_notify(struct net_device *dev, int freq, | |||
| 3528 | */ | 3548 | */ |
| 3529 | u32 cfg80211_calculate_bitrate(struct rate_info *rate); | 3549 | u32 cfg80211_calculate_bitrate(struct rate_info *rate); |
| 3530 | 3550 | ||
| 3551 | /** | ||
| 3552 | * cfg80211_unregister_wdev - remove the given wdev | ||
| 3553 | * @wdev: struct wireless_dev to remove | ||
| 3554 | * | ||
| 3555 | * Call this function only for wdevs that have no netdev assigned, | ||
| 3556 | * e.g. P2P Devices. It removes the device from the list so that | ||
| 3557 | * it can no longer be used. It is necessary to call this function | ||
| 3558 | * even when cfg80211 requests the removal of the interface by | ||
| 3559 | * calling the del_virtual_intf() callback. The function must also | ||
| 3560 | * be called when the driver wishes to unregister the wdev, e.g. | ||
| 3561 | * when the device is unbound from the driver. | ||
| 3562 | * | ||
| 3563 | * Requires the RTNL to be held. | ||
| 3564 | */ | ||
| 3565 | void cfg80211_unregister_wdev(struct wireless_dev *wdev); | ||
| 3566 | |||
| 3531 | /* Logging, debugging and troubleshooting/diagnostic helpers. */ | 3567 | /* Logging, debugging and troubleshooting/diagnostic helpers. */ |
| 3532 | 3568 | ||
| 3533 | /* wiphy_printk helpers, similar to dev_printk */ | 3569 | /* wiphy_printk helpers, similar to dev_printk */ |
diff --git a/include/net/ieee80211_radiotap.h b/include/net/ieee80211_radiotap.h index 71392545d0a1..7f0df133d119 100644 --- a/include/net/ieee80211_radiotap.h +++ b/include/net/ieee80211_radiotap.h | |||
| @@ -183,6 +183,9 @@ struct ieee80211_radiotap_header { | |||
| 183 | * Contains a bitmap of known fields/flags, the flags, and | 183 | * Contains a bitmap of known fields/flags, the flags, and |
| 184 | * the MCS index. | 184 | * the MCS index. |
| 185 | * | 185 | * |
| 186 | * IEEE80211_RADIOTAP_AMPDU_STATUS u32, u16, u8, u8 unitless | ||
| 187 | * | ||
| 188 | * Contains the AMPDU information for the subframe. | ||
| 186 | */ | 189 | */ |
| 187 | enum ieee80211_radiotap_type { | 190 | enum ieee80211_radiotap_type { |
| 188 | IEEE80211_RADIOTAP_TSFT = 0, | 191 | IEEE80211_RADIOTAP_TSFT = 0, |
| @@ -205,6 +208,7 @@ enum ieee80211_radiotap_type { | |||
| 205 | IEEE80211_RADIOTAP_DATA_RETRIES = 17, | 208 | IEEE80211_RADIOTAP_DATA_RETRIES = 17, |
| 206 | 209 | ||
| 207 | IEEE80211_RADIOTAP_MCS = 19, | 210 | IEEE80211_RADIOTAP_MCS = 19, |
| 211 | IEEE80211_RADIOTAP_AMPDU_STATUS = 20, | ||
| 208 | 212 | ||
| 209 | /* valid in every it_present bitmap, even vendor namespaces */ | 213 | /* valid in every it_present bitmap, even vendor namespaces */ |
| 210 | IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE = 29, | 214 | IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE = 29, |
| @@ -270,6 +274,13 @@ enum ieee80211_radiotap_type { | |||
| 270 | #define IEEE80211_RADIOTAP_MCS_FMT_GF 0x08 | 274 | #define IEEE80211_RADIOTAP_MCS_FMT_GF 0x08 |
| 271 | #define IEEE80211_RADIOTAP_MCS_FEC_LDPC 0x10 | 275 | #define IEEE80211_RADIOTAP_MCS_FEC_LDPC 0x10 |
| 272 | 276 | ||
| 277 | /* For IEEE80211_RADIOTAP_AMPDU_STATUS */ | ||
| 278 | #define IEEE80211_RADIOTAP_AMPDU_REPORT_ZEROLEN 0x0001 | ||
| 279 | #define IEEE80211_RADIOTAP_AMPDU_IS_ZEROLEN 0x0002 | ||
| 280 | #define IEEE80211_RADIOTAP_AMPDU_LAST_KNOWN 0x0004 | ||
| 281 | #define IEEE80211_RADIOTAP_AMPDU_IS_LAST 0x0008 | ||
| 282 | #define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_ERR 0x0010 | ||
| 283 | #define IEEE80211_RADIOTAP_AMPDU_DELIM_CRC_KNOWN 0x0020 | ||
| 273 | 284 | ||
| 274 | /* helpers */ | 285 | /* helpers */ |
| 275 | static inline int ieee80211_get_radiotap_len(unsigned char *data) | 286 | static inline int ieee80211_get_radiotap_len(unsigned char *data) |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index bb86aa6f98dd..71f8262fc1df 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
| @@ -171,6 +171,7 @@ struct ieee80211_low_level_stats { | |||
| 171 | * @BSS_CHANGED_IDLE: Idle changed for this BSS/interface. | 171 | * @BSS_CHANGED_IDLE: Idle changed for this BSS/interface. |
| 172 | * @BSS_CHANGED_SSID: SSID changed for this BSS (AP mode) | 172 | * @BSS_CHANGED_SSID: SSID changed for this BSS (AP mode) |
| 173 | * @BSS_CHANGED_AP_PROBE_RESP: Probe Response changed for this BSS (AP mode) | 173 | * @BSS_CHANGED_AP_PROBE_RESP: Probe Response changed for this BSS (AP mode) |
| 174 | * @BSS_CHANGED_PS: PS changed for this BSS (STA mode) | ||
| 174 | */ | 175 | */ |
| 175 | enum ieee80211_bss_change { | 176 | enum ieee80211_bss_change { |
| 176 | BSS_CHANGED_ASSOC = 1<<0, | 177 | BSS_CHANGED_ASSOC = 1<<0, |
| @@ -190,6 +191,7 @@ enum ieee80211_bss_change { | |||
| 190 | BSS_CHANGED_IDLE = 1<<14, | 191 | BSS_CHANGED_IDLE = 1<<14, |
| 191 | BSS_CHANGED_SSID = 1<<15, | 192 | BSS_CHANGED_SSID = 1<<15, |
| 192 | BSS_CHANGED_AP_PROBE_RESP = 1<<16, | 193 | BSS_CHANGED_AP_PROBE_RESP = 1<<16, |
| 194 | BSS_CHANGED_PS = 1<<17, | ||
| 193 | 195 | ||
| 194 | /* when adding here, make sure to change ieee80211_reconfig */ | 196 | /* when adding here, make sure to change ieee80211_reconfig */ |
| 195 | }; | 197 | }; |
| @@ -266,6 +268,8 @@ enum ieee80211_rssi_event { | |||
| 266 | * @idle: This interface is idle. There's also a global idle flag in the | 268 | * @idle: This interface is idle. There's also a global idle flag in the |
| 267 | * hardware config which may be more appropriate depending on what | 269 | * hardware config which may be more appropriate depending on what |
| 268 | * your driver/device needs to do. | 270 | * your driver/device needs to do. |
| 271 | * @ps: power-save mode (STA only). This flag is NOT affected by | ||
| 272 | * offchannel/dynamic_ps operations. | ||
| 269 | * @ssid: The SSID of the current vif. Only valid in AP-mode. | 273 | * @ssid: The SSID of the current vif. Only valid in AP-mode. |
| 270 | * @ssid_len: Length of SSID given in @ssid. | 274 | * @ssid_len: Length of SSID given in @ssid. |
| 271 | * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode. | 275 | * @hidden_ssid: The SSID of the current vif is hidden. Only valid in AP-mode. |
| @@ -296,6 +300,7 @@ struct ieee80211_bss_conf { | |||
| 296 | bool arp_filter_enabled; | 300 | bool arp_filter_enabled; |
| 297 | bool qos; | 301 | bool qos; |
| 298 | bool idle; | 302 | bool idle; |
| 303 | bool ps; | ||
| 299 | u8 ssid[IEEE80211_MAX_SSID_LEN]; | 304 | u8 ssid[IEEE80211_MAX_SSID_LEN]; |
| 300 | size_t ssid_len; | 305 | size_t ssid_len; |
| 301 | bool hidden_ssid; | 306 | bool hidden_ssid; |
| @@ -522,9 +527,6 @@ struct ieee80211_tx_rate { | |||
| 522 | * (2) driver internal use (if applicable) | 527 | * (2) driver internal use (if applicable) |
| 523 | * (3) TX status information - driver tells mac80211 what happened | 528 | * (3) TX status information - driver tells mac80211 what happened |
| 524 | * | 529 | * |
| 525 | * The TX control's sta pointer is only valid during the ->tx call, | ||
| 526 | * it may be NULL. | ||
| 527 | * | ||
| 528 | * @flags: transmit info flags, defined above | 530 | * @flags: transmit info flags, defined above |
| 529 | * @band: the band to transmit on (use for checking for races) | 531 | * @band: the band to transmit on (use for checking for races) |
| 530 | * @hw_queue: HW queue to put the frame on, skb_get_queue_mapping() gives the AC | 532 | * @hw_queue: HW queue to put the frame on, skb_get_queue_mapping() gives the AC |
| @@ -555,6 +557,7 @@ struct ieee80211_tx_info { | |||
| 555 | struct ieee80211_tx_rate rates[ | 557 | struct ieee80211_tx_rate rates[ |
| 556 | IEEE80211_TX_MAX_RATES]; | 558 | IEEE80211_TX_MAX_RATES]; |
| 557 | s8 rts_cts_rate_idx; | 559 | s8 rts_cts_rate_idx; |
| 560 | /* 3 bytes free */ | ||
| 558 | }; | 561 | }; |
| 559 | /* only needed before rate control */ | 562 | /* only needed before rate control */ |
| 560 | unsigned long jiffies; | 563 | unsigned long jiffies; |
| @@ -562,7 +565,7 @@ struct ieee80211_tx_info { | |||
| 562 | /* NB: vif can be NULL for injected frames */ | 565 | /* NB: vif can be NULL for injected frames */ |
| 563 | struct ieee80211_vif *vif; | 566 | struct ieee80211_vif *vif; |
| 564 | struct ieee80211_key_conf *hw_key; | 567 | struct ieee80211_key_conf *hw_key; |
| 565 | struct ieee80211_sta *sta; | 568 | /* 8 bytes free */ |
| 566 | } control; | 569 | } control; |
| 567 | struct { | 570 | struct { |
| 568 | struct ieee80211_tx_rate rates[IEEE80211_TX_MAX_RATES]; | 571 | struct ieee80211_tx_rate rates[IEEE80211_TX_MAX_RATES]; |
| @@ -673,21 +676,41 @@ ieee80211_tx_info_clear_status(struct ieee80211_tx_info *info) | |||
| 673 | * @RX_FLAG_HT_GF: This frame was received in a HT-greenfield transmission, if | 676 | * @RX_FLAG_HT_GF: This frame was received in a HT-greenfield transmission, if |
| 674 | * the driver fills this value it should add %IEEE80211_RADIOTAP_MCS_HAVE_FMT | 677 | * the driver fills this value it should add %IEEE80211_RADIOTAP_MCS_HAVE_FMT |
| 675 | * to hw.radiotap_mcs_details to advertise that fact | 678 | * to hw.radiotap_mcs_details to advertise that fact |
| 679 | * @RX_FLAG_AMPDU_DETAILS: A-MPDU details are known, in particular the reference | ||
| 680 | * number (@ampdu_reference) must be populated and be a distinct number for | ||
| 681 | * each A-MPDU | ||
| 682 | * @RX_FLAG_AMPDU_REPORT_ZEROLEN: driver reports 0-length subframes | ||
| 683 | * @RX_FLAG_AMPDU_IS_ZEROLEN: This is a zero-length subframe, for | ||
| 684 | * monitoring purposes only | ||
| 685 | * @RX_FLAG_AMPDU_LAST_KNOWN: last subframe is known, should be set on all | ||
| 686 | * subframes of a single A-MPDU | ||
| 687 | * @RX_FLAG_AMPDU_IS_LAST: this subframe is the last subframe of the A-MPDU | ||
| 688 | * @RX_FLAG_AMPDU_DELIM_CRC_ERROR: A delimiter CRC error has been detected | ||
| 689 | * on this subframe | ||
| 690 | * @RX_FLAG_AMPDU_DELIM_CRC_KNOWN: The delimiter CRC field is known (the CRC | ||
| 691 | * is stored in the @ampdu_delimiter_crc field) | ||
| 676 | */ | 692 | */ |
| 677 | enum mac80211_rx_flags { | 693 | enum mac80211_rx_flags { |
| 678 | RX_FLAG_MMIC_ERROR = 1<<0, | 694 | RX_FLAG_MMIC_ERROR = BIT(0), |
| 679 | RX_FLAG_DECRYPTED = 1<<1, | 695 | RX_FLAG_DECRYPTED = BIT(1), |
| 680 | RX_FLAG_MMIC_STRIPPED = 1<<3, | 696 | RX_FLAG_MMIC_STRIPPED = BIT(3), |
| 681 | RX_FLAG_IV_STRIPPED = 1<<4, | 697 | RX_FLAG_IV_STRIPPED = BIT(4), |
| 682 | RX_FLAG_FAILED_FCS_CRC = 1<<5, | 698 | RX_FLAG_FAILED_FCS_CRC = BIT(5), |
| 683 | RX_FLAG_FAILED_PLCP_CRC = 1<<6, | 699 | RX_FLAG_FAILED_PLCP_CRC = BIT(6), |
| 684 | RX_FLAG_MACTIME_MPDU = 1<<7, | 700 | RX_FLAG_MACTIME_MPDU = BIT(7), |
| 685 | RX_FLAG_SHORTPRE = 1<<8, | 701 | RX_FLAG_SHORTPRE = BIT(8), |
| 686 | RX_FLAG_HT = 1<<9, | 702 | RX_FLAG_HT = BIT(9), |
| 687 | RX_FLAG_40MHZ = 1<<10, | 703 | RX_FLAG_40MHZ = BIT(10), |
| 688 | RX_FLAG_SHORT_GI = 1<<11, | 704 | RX_FLAG_SHORT_GI = BIT(11), |
| 689 | RX_FLAG_NO_SIGNAL_VAL = 1<<12, | 705 | RX_FLAG_NO_SIGNAL_VAL = BIT(12), |
| 690 | RX_FLAG_HT_GF = 1<<13, | 706 | RX_FLAG_HT_GF = BIT(13), |
| 707 | RX_FLAG_AMPDU_DETAILS = BIT(14), | ||
| 708 | RX_FLAG_AMPDU_REPORT_ZEROLEN = BIT(15), | ||
| 709 | RX_FLAG_AMPDU_IS_ZEROLEN = BIT(16), | ||
| 710 | RX_FLAG_AMPDU_LAST_KNOWN = BIT(17), | ||
| 711 | RX_FLAG_AMPDU_IS_LAST = BIT(18), | ||
| 712 | RX_FLAG_AMPDU_DELIM_CRC_ERROR = BIT(19), | ||
| 713 | RX_FLAG_AMPDU_DELIM_CRC_KNOWN = BIT(20), | ||
| 691 | }; | 714 | }; |
| 692 | 715 | ||
| 693 | /** | 716 | /** |
| @@ -711,17 +734,22 @@ enum mac80211_rx_flags { | |||
| 711 | * HT rates are use (RX_FLAG_HT) | 734 | * HT rates are use (RX_FLAG_HT) |
| 712 | * @flag: %RX_FLAG_* | 735 | * @flag: %RX_FLAG_* |
| 713 | * @rx_flags: internal RX flags for mac80211 | 736 | * @rx_flags: internal RX flags for mac80211 |
| 737 | * @ampdu_reference: A-MPDU reference number, must be a different value for | ||
| 738 | * each A-MPDU but the same for each subframe within one A-MPDU | ||
| 739 | * @ampdu_delimiter_crc: A-MPDU delimiter CRC | ||
| 714 | */ | 740 | */ |
| 715 | struct ieee80211_rx_status { | 741 | struct ieee80211_rx_status { |
| 716 | u64 mactime; | 742 | u64 mactime; |
| 717 | u32 device_timestamp; | 743 | u32 device_timestamp; |
| 718 | u16 flag; | 744 | u32 ampdu_reference; |
| 745 | u32 flag; | ||
| 719 | u16 freq; | 746 | u16 freq; |
| 720 | u8 rate_idx; | 747 | u8 rate_idx; |
| 721 | u8 rx_flags; | 748 | u8 rx_flags; |
| 722 | u8 band; | 749 | u8 band; |
| 723 | u8 antenna; | 750 | u8 antenna; |
| 724 | s8 signal; | 751 | s8 signal; |
| 752 | u8 ampdu_delimiter_crc; | ||
| 725 | }; | 753 | }; |
| 726 | 754 | ||
| 727 | /** | 755 | /** |
| @@ -1074,6 +1102,16 @@ enum sta_notify_cmd { | |||
| 1074 | }; | 1102 | }; |
| 1075 | 1103 | ||
| 1076 | /** | 1104 | /** |
| 1105 | * struct ieee80211_tx_control - TX control data | ||
| 1106 | * | ||
| 1107 | * @sta: station table entry, this sta pointer may be NULL and | ||
| 1108 | * it is not allowed to copy the pointer, due to RCU. | ||
| 1109 | */ | ||
| 1110 | struct ieee80211_tx_control { | ||
| 1111 | struct ieee80211_sta *sta; | ||
| 1112 | }; | ||
| 1113 | |||
| 1114 | /** | ||
| 1077 | * enum ieee80211_hw_flags - hardware flags | 1115 | * enum ieee80211_hw_flags - hardware flags |
| 1078 | * | 1116 | * |
| 1079 | * These flags are used to indicate hardware capabilities to | 1117 | * These flags are used to indicate hardware capabilities to |
| @@ -1203,6 +1241,10 @@ enum sta_notify_cmd { | |||
| 1203 | * queue mapping in order to use different queues (not just one per AC) | 1241 | * queue mapping in order to use different queues (not just one per AC) |
| 1204 | * for different virtual interfaces. See the doc section on HW queue | 1242 | * for different virtual interfaces. See the doc section on HW queue |
| 1205 | * control for more details. | 1243 | * control for more details. |
| 1244 | * | ||
| 1245 | * @IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF: Use the P2P Device address for any | ||
| 1246 | * P2P Interface. This will be honoured even if more than one interface | ||
| 1247 | * is supported. | ||
| 1206 | */ | 1248 | */ |
| 1207 | enum ieee80211_hw_flags { | 1249 | enum ieee80211_hw_flags { |
| 1208 | IEEE80211_HW_HAS_RATE_CONTROL = 1<<0, | 1250 | IEEE80211_HW_HAS_RATE_CONTROL = 1<<0, |
| @@ -1230,6 +1272,7 @@ enum ieee80211_hw_flags { | |||
| 1230 | IEEE80211_HW_AP_LINK_PS = 1<<22, | 1272 | IEEE80211_HW_AP_LINK_PS = 1<<22, |
| 1231 | IEEE80211_HW_TX_AMPDU_SETUP_IN_HW = 1<<23, | 1273 | IEEE80211_HW_TX_AMPDU_SETUP_IN_HW = 1<<23, |
| 1232 | IEEE80211_HW_SCAN_WHILE_IDLE = 1<<24, | 1274 | IEEE80211_HW_SCAN_WHILE_IDLE = 1<<24, |
| 1275 | IEEE80211_HW_P2P_DEV_ADDR_FOR_INTF = 1<<25, | ||
| 1233 | }; | 1276 | }; |
| 1234 | 1277 | ||
| 1235 | /** | 1278 | /** |
| @@ -1884,10 +1927,14 @@ enum ieee80211_frame_release_type { | |||
| 1884 | * @IEEE80211_RC_BW_CHANGED: The bandwidth that can be used to transmit | 1927 | * @IEEE80211_RC_BW_CHANGED: The bandwidth that can be used to transmit |
| 1885 | * to this station changed. | 1928 | * to this station changed. |
| 1886 | * @IEEE80211_RC_SMPS_CHANGED: The SMPS state of the station changed. | 1929 | * @IEEE80211_RC_SMPS_CHANGED: The SMPS state of the station changed. |
| 1930 | * @IEEE80211_RC_SUPP_RATES_CHANGED: The supported rate set of this peer | ||
| 1931 | * changed (in IBSS mode) due to discovering more information about | ||
| 1932 | * the peer. | ||
| 1887 | */ | 1933 | */ |
| 1888 | enum ieee80211_rate_control_changed { | 1934 | enum ieee80211_rate_control_changed { |
| 1889 | IEEE80211_RC_BW_CHANGED = BIT(0), | 1935 | IEEE80211_RC_BW_CHANGED = BIT(0), |
| 1890 | IEEE80211_RC_SMPS_CHANGED = BIT(1), | 1936 | IEEE80211_RC_SMPS_CHANGED = BIT(1), |
| 1937 | IEEE80211_RC_SUPP_RATES_CHANGED = BIT(2), | ||
| 1891 | }; | 1938 | }; |
| 1892 | 1939 | ||
| 1893 | /** | 1940 | /** |
| @@ -2264,7 +2311,9 @@ enum ieee80211_rate_control_changed { | |||
| 2264 | * The callback is optional and can (should!) sleep. | 2311 | * The callback is optional and can (should!) sleep. |
| 2265 | */ | 2312 | */ |
| 2266 | struct ieee80211_ops { | 2313 | struct ieee80211_ops { |
| 2267 | void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); | 2314 | void (*tx)(struct ieee80211_hw *hw, |
| 2315 | struct ieee80211_tx_control *control, | ||
| 2316 | struct sk_buff *skb); | ||
| 2268 | int (*start)(struct ieee80211_hw *hw); | 2317 | int (*start)(struct ieee80211_hw *hw); |
| 2269 | void (*stop)(struct ieee80211_hw *hw); | 2318 | void (*stop)(struct ieee80211_hw *hw); |
| 2270 | #ifdef CONFIG_PM | 2319 | #ifdef CONFIG_PM |
