diff options
| author | John W. Linville <linville@tuxdriver.com> | 2014-01-01 15:39:56 -0500 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2014-01-01 15:39:56 -0500 |
| commit | ad86c55bac643a745f480d26689d153ec0f38b04 (patch) | |
| tree | 8ae3e20d2f3619021393166fe1f50a8ca00c1c33 /include | |
| parent | 21eb218989523b7bee28900aaec9f9296b70fa27 (diff) | |
| parent | 39731b78b4afebb7501c05b68e2443a1b250b41c (diff) | |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
Diffstat (limited to 'include')
| -rw-r--r-- | include/net/cfg80211.h | 123 | ||||
| -rw-r--r-- | include/net/mac80211.h | 45 | ||||
| -rw-r--r-- | include/uapi/linux/nl80211.h | 65 |
3 files changed, 218 insertions, 15 deletions
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index e9abc7b536cd..80a10212b1b9 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
| @@ -747,6 +747,8 @@ enum station_parameters_apply_mask { | |||
| 747 | * @supported_channels_len: number of supported channels | 747 | * @supported_channels_len: number of supported channels |
| 748 | * @supported_oper_classes: supported oper classes in IEEE 802.11 format | 748 | * @supported_oper_classes: supported oper classes in IEEE 802.11 format |
| 749 | * @supported_oper_classes_len: number of supported operating classes | 749 | * @supported_oper_classes_len: number of supported operating classes |
| 750 | * @opmode_notif: operating mode field from Operating Mode Notification | ||
| 751 | * @opmode_notif_used: information if operating mode field is used | ||
| 750 | */ | 752 | */ |
| 751 | struct station_parameters { | 753 | struct station_parameters { |
| 752 | const u8 *supported_rates; | 754 | const u8 *supported_rates; |
| @@ -770,6 +772,8 @@ struct station_parameters { | |||
| 770 | u8 supported_channels_len; | 772 | u8 supported_channels_len; |
| 771 | const u8 *supported_oper_classes; | 773 | const u8 *supported_oper_classes; |
| 772 | u8 supported_oper_classes_len; | 774 | u8 supported_oper_classes_len; |
| 775 | u8 opmode_notif; | ||
| 776 | bool opmode_notif_used; | ||
| 773 | }; | 777 | }; |
| 774 | 778 | ||
| 775 | /** | 779 | /** |
| @@ -1762,7 +1766,8 @@ enum wiphy_params_flags { | |||
| 1762 | struct cfg80211_bitrate_mask { | 1766 | struct cfg80211_bitrate_mask { |
| 1763 | struct { | 1767 | struct { |
| 1764 | u32 legacy; | 1768 | u32 legacy; |
| 1765 | u8 mcs[IEEE80211_HT_MCS_MASK_LEN]; | 1769 | u8 ht_mcs[IEEE80211_HT_MCS_MASK_LEN]; |
| 1770 | u16 vht_mcs[NL80211_VHT_NSS_MAX]; | ||
| 1766 | } control[IEEE80211_NUM_BANDS]; | 1771 | } control[IEEE80211_NUM_BANDS]; |
| 1767 | }; | 1772 | }; |
| 1768 | /** | 1773 | /** |
| @@ -2676,6 +2681,34 @@ struct wiphy_coalesce_support { | |||
| 2676 | }; | 2681 | }; |
| 2677 | 2682 | ||
| 2678 | /** | 2683 | /** |
| 2684 | * enum wiphy_vendor_command_flags - validation flags for vendor commands | ||
| 2685 | * @WIPHY_VENDOR_CMD_NEED_WDEV: vendor command requires wdev | ||
| 2686 | * @WIPHY_VENDOR_CMD_NEED_NETDEV: vendor command requires netdev | ||
| 2687 | * @WIPHY_VENDOR_CMD_NEED_RUNNING: interface/wdev must be up & running | ||
| 2688 | * (must be combined with %_WDEV or %_NETDEV) | ||
| 2689 | */ | ||
| 2690 | enum wiphy_vendor_command_flags { | ||
| 2691 | WIPHY_VENDOR_CMD_NEED_WDEV = BIT(0), | ||
| 2692 | WIPHY_VENDOR_CMD_NEED_NETDEV = BIT(1), | ||
| 2693 | WIPHY_VENDOR_CMD_NEED_RUNNING = BIT(2), | ||
| 2694 | }; | ||
| 2695 | |||
| 2696 | /** | ||
| 2697 | * struct wiphy_vendor_command - vendor command definition | ||
| 2698 | * @info: vendor command identifying information, as used in nl80211 | ||
| 2699 | * @flags: flags, see &enum wiphy_vendor_command_flags | ||
| 2700 | * @doit: callback for the operation, note that wdev is %NULL if the | ||
| 2701 | * flags didn't ask for a wdev and non-%NULL otherwise; the data | ||
| 2702 | * pointer may be %NULL if userspace provided no data at all | ||
| 2703 | */ | ||
| 2704 | struct wiphy_vendor_command { | ||
| 2705 | struct nl80211_vendor_cmd_info info; | ||
| 2706 | u32 flags; | ||
| 2707 | int (*doit)(struct wiphy *wiphy, struct wireless_dev *wdev, | ||
| 2708 | const void *data, int data_len); | ||
| 2709 | }; | ||
| 2710 | |||
| 2711 | /** | ||
| 2679 | * struct wiphy - wireless hardware description | 2712 | * struct wiphy - wireless hardware description |
| 2680 | * @reg_notifier: the driver's regulatory notification callback, | 2713 | * @reg_notifier: the driver's regulatory notification callback, |
| 2681 | * note that if your driver uses wiphy_apply_custom_regulatory() | 2714 | * note that if your driver uses wiphy_apply_custom_regulatory() |
| @@ -2788,6 +2821,9 @@ struct wiphy_coalesce_support { | |||
| 2788 | * @extended_capabilities_mask: mask of the valid values | 2821 | * @extended_capabilities_mask: mask of the valid values |
| 2789 | * @extended_capabilities_len: length of the extended capabilities | 2822 | * @extended_capabilities_len: length of the extended capabilities |
| 2790 | * @coalesce: packet coalescing support information | 2823 | * @coalesce: packet coalescing support information |
| 2824 | * | ||
| 2825 | * @vendor_commands: array of vendor commands supported by the hardware | ||
| 2826 | * @n_vendor_commands: number of vendor commands | ||
| 2791 | */ | 2827 | */ |
| 2792 | struct wiphy { | 2828 | struct wiphy { |
| 2793 | /* assign these fields before you register the wiphy */ | 2829 | /* assign these fields before you register the wiphy */ |
| @@ -2899,6 +2935,9 @@ struct wiphy { | |||
| 2899 | 2935 | ||
| 2900 | const struct wiphy_coalesce_support *coalesce; | 2936 | const struct wiphy_coalesce_support *coalesce; |
| 2901 | 2937 | ||
| 2938 | const struct wiphy_vendor_command *vendor_commands; | ||
| 2939 | int n_vendor_commands; | ||
| 2940 | |||
| 2902 | char priv[0] __aligned(NETDEV_ALIGN); | 2941 | char priv[0] __aligned(NETDEV_ALIGN); |
| 2903 | }; | 2942 | }; |
| 2904 | 2943 | ||
| @@ -3843,6 +3882,75 @@ void wiphy_rfkill_start_polling(struct wiphy *wiphy); | |||
| 3843 | */ | 3882 | */ |
| 3844 | void wiphy_rfkill_stop_polling(struct wiphy *wiphy); | 3883 | void wiphy_rfkill_stop_polling(struct wiphy *wiphy); |
| 3845 | 3884 | ||
| 3885 | /** | ||
| 3886 | * DOC: Vendor commands | ||
| 3887 | * | ||
| 3888 | * Occasionally, there are special protocol or firmware features that | ||
| 3889 | * can't be implemented very openly. For this and similar cases, the | ||
| 3890 | * vendor command functionality allows implementing the features with | ||
| 3891 | * (typically closed-source) userspace and firmware, using nl80211 as | ||
| 3892 | * the configuration mechanism. | ||
| 3893 | * | ||
| 3894 | * A driver supporting vendor commands must register them as an array | ||
| 3895 | * in struct wiphy, with handlers for each one, each command has an | ||
| 3896 | * OUI and sub command ID to identify it. | ||
| 3897 | * | ||
| 3898 | * Note that this feature should not be (ab)used to implement protocol | ||
| 3899 | * features that could openly be shared across drivers. In particular, | ||
| 3900 | * it must never be required to use vendor commands to implement any | ||
| 3901 | * "normal" functionality that higher-level userspace like connection | ||
| 3902 | * managers etc. need. | ||
| 3903 | */ | ||
| 3904 | |||
| 3905 | struct sk_buff *__cfg80211_alloc_reply_skb(struct wiphy *wiphy, | ||
| 3906 | enum nl80211_commands cmd, | ||
| 3907 | enum nl80211_attrs attr, | ||
| 3908 | int approxlen); | ||
| 3909 | |||
| 3910 | /** | ||
| 3911 | * cfg80211_vendor_cmd_alloc_reply_skb - allocate vendor command reply | ||
| 3912 | * @wiphy: the wiphy | ||
| 3913 | * @approxlen: an upper bound of the length of the data that will | ||
| 3914 | * be put into the skb | ||
| 3915 | * | ||
| 3916 | * This function allocates and pre-fills an skb for a reply to | ||
| 3917 | * a vendor command. Since it is intended for a reply, calling | ||
| 3918 | * it outside of a vendor command's doit() operation is invalid. | ||
| 3919 | * | ||
| 3920 | * The returned skb is pre-filled with some identifying data in | ||
| 3921 | * a way that any data that is put into the skb (with skb_put(), | ||
| 3922 | * nla_put() or similar) will end up being within the | ||
| 3923 | * %NL80211_ATTR_VENDOR_DATA attribute, so all that needs to be done | ||
| 3924 | * with the skb is adding data for the corresponding userspace tool | ||
| 3925 | * which can then read that data out of the vendor data attribute. | ||
| 3926 | * You must not modify the skb in any other way. | ||
| 3927 | * | ||
| 3928 | * When done, call cfg80211_vendor_cmd_reply() with the skb and return | ||
| 3929 | * its error code as the result of the doit() operation. | ||
| 3930 | * | ||
| 3931 | * Return: An allocated and pre-filled skb. %NULL if any errors happen. | ||
| 3932 | */ | ||
| 3933 | static inline struct sk_buff * | ||
| 3934 | cfg80211_vendor_cmd_alloc_reply_skb(struct wiphy *wiphy, int approxlen) | ||
| 3935 | { | ||
| 3936 | return __cfg80211_alloc_reply_skb(wiphy, NL80211_CMD_VENDOR, | ||
| 3937 | NL80211_ATTR_VENDOR_DATA, approxlen); | ||
| 3938 | } | ||
| 3939 | |||
| 3940 | /** | ||
| 3941 | * cfg80211_vendor_cmd_reply - send the reply skb | ||
| 3942 | * @skb: The skb, must have been allocated with | ||
| 3943 | * cfg80211_vendor_cmd_alloc_reply_skb() | ||
| 3944 | * | ||
| 3945 | * Since calling this function will usually be the last thing | ||
| 3946 | * before returning from the vendor command doit() you should | ||
| 3947 | * return the error code. Note that this function consumes the | ||
| 3948 | * skb regardless of the return value. | ||
| 3949 | * | ||
| 3950 | * Return: An error code or 0 on success. | ||
| 3951 | */ | ||
| 3952 | int cfg80211_vendor_cmd_reply(struct sk_buff *skb); | ||
| 3953 | |||
| 3846 | #ifdef CONFIG_NL80211_TESTMODE | 3954 | #ifdef CONFIG_NL80211_TESTMODE |
| 3847 | /** | 3955 | /** |
| 3848 | * DOC: Test mode | 3956 | * DOC: Test mode |
| @@ -3878,8 +3986,12 @@ void wiphy_rfkill_stop_polling(struct wiphy *wiphy); | |||
| 3878 | * | 3986 | * |
| 3879 | * Return: An allocated and pre-filled skb. %NULL if any errors happen. | 3987 | * Return: An allocated and pre-filled skb. %NULL if any errors happen. |
| 3880 | */ | 3988 | */ |
| 3881 | struct sk_buff *cfg80211_testmode_alloc_reply_skb(struct wiphy *wiphy, | 3989 | static inline struct sk_buff * |
| 3882 | int approxlen); | 3990 | cfg80211_testmode_alloc_reply_skb(struct wiphy *wiphy, int approxlen) |
| 3991 | { | ||
| 3992 | return __cfg80211_alloc_reply_skb(wiphy, NL80211_CMD_TESTMODE, | ||
| 3993 | NL80211_ATTR_TESTDATA, approxlen); | ||
| 3994 | } | ||
| 3883 | 3995 | ||
| 3884 | /** | 3996 | /** |
| 3885 | * cfg80211_testmode_reply - send the reply skb | 3997 | * cfg80211_testmode_reply - send the reply skb |
| @@ -3893,7 +4005,10 @@ struct sk_buff *cfg80211_testmode_alloc_reply_skb(struct wiphy *wiphy, | |||
| 3893 | * | 4005 | * |
| 3894 | * Return: An error code or 0 on success. | 4006 | * Return: An error code or 0 on success. |
| 3895 | */ | 4007 | */ |
| 3896 | int cfg80211_testmode_reply(struct sk_buff *skb); | 4008 | static inline int cfg80211_testmode_reply(struct sk_buff *skb) |
| 4009 | { | ||
| 4010 | return cfg80211_vendor_cmd_reply(skb); | ||
| 4011 | } | ||
| 3897 | 4012 | ||
| 3898 | /** | 4013 | /** |
| 3899 | * cfg80211_testmode_alloc_event_skb - allocate testmode event | 4014 | * cfg80211_testmode_alloc_event_skb - allocate testmode event |
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 3cd408b326de..531785f5819e 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
| @@ -1163,6 +1163,19 @@ static inline bool ieee80211_vif_is_mesh(struct ieee80211_vif *vif) | |||
| 1163 | } | 1163 | } |
| 1164 | 1164 | ||
| 1165 | /** | 1165 | /** |
| 1166 | * wdev_to_ieee80211_vif - return a vif struct from a wdev | ||
| 1167 | * @wdev: the wdev to get the vif for | ||
| 1168 | * | ||
| 1169 | * This can be used by mac80211 drivers with direct cfg80211 APIs | ||
| 1170 | * (like the vendor commands) that get a wdev. | ||
| 1171 | * | ||
| 1172 | * Note that this function may return %NULL if the given wdev isn't | ||
| 1173 | * associated with a vif that the driver knows about (e.g. monitor | ||
| 1174 | * or AP_VLAN interfaces.) | ||
| 1175 | */ | ||
| 1176 | struct ieee80211_vif *wdev_to_ieee80211_vif(struct wireless_dev *wdev); | ||
| 1177 | |||
| 1178 | /** | ||
| 1166 | * enum ieee80211_key_flags - key flags | 1179 | * enum ieee80211_key_flags - key flags |
| 1167 | * | 1180 | * |
| 1168 | * These flags are used for communication about keys between the driver | 1181 | * These flags are used for communication about keys between the driver |
| @@ -1600,6 +1613,9 @@ enum ieee80211_hw_flags { | |||
| 1600 | * @extra_tx_headroom: headroom to reserve in each transmit skb | 1613 | * @extra_tx_headroom: headroom to reserve in each transmit skb |
| 1601 | * for use by the driver (e.g. for transmit headers.) | 1614 | * for use by the driver (e.g. for transmit headers.) |
| 1602 | * | 1615 | * |
| 1616 | * @extra_beacon_tailroom: tailroom to reserve in each beacon tx skb. | ||
| 1617 | * Can be used by drivers to add extra IEs. | ||
| 1618 | * | ||
| 1603 | * @channel_change_time: time (in microseconds) it takes to change channels. | 1619 | * @channel_change_time: time (in microseconds) it takes to change channels. |
| 1604 | * | 1620 | * |
| 1605 | * @max_signal: Maximum value for signal (rssi) in RX information, used | 1621 | * @max_signal: Maximum value for signal (rssi) in RX information, used |
| @@ -1682,6 +1698,7 @@ struct ieee80211_hw { | |||
| 1682 | void *priv; | 1698 | void *priv; |
| 1683 | u32 flags; | 1699 | u32 flags; |
| 1684 | unsigned int extra_tx_headroom; | 1700 | unsigned int extra_tx_headroom; |
| 1701 | unsigned int extra_beacon_tailroom; | ||
| 1685 | int channel_change_time; | 1702 | int channel_change_time; |
| 1686 | int vif_data_size; | 1703 | int vif_data_size; |
| 1687 | int sta_data_size; | 1704 | int sta_data_size; |
| @@ -2398,9 +2415,6 @@ enum ieee80211_roc_type { | |||
| 2398 | * See the section "Frame filtering" for more information. | 2415 | * See the section "Frame filtering" for more information. |
| 2399 | * This callback must be implemented and can sleep. | 2416 | * This callback must be implemented and can sleep. |
| 2400 | * | 2417 | * |
| 2401 | * @set_multicast_list: Configure the device's interface specific RX multicast | ||
| 2402 | * filter. This callback is optional. This callback must be atomic. | ||
| 2403 | * | ||
| 2404 | * @set_tim: Set TIM bit. mac80211 calls this function when a TIM bit | 2418 | * @set_tim: Set TIM bit. mac80211 calls this function when a TIM bit |
| 2405 | * must be set or cleared for a given STA. Must be atomic. | 2419 | * must be set or cleared for a given STA. Must be atomic. |
| 2406 | * | 2420 | * |
| @@ -2485,7 +2499,11 @@ enum ieee80211_roc_type { | |||
| 2485 | * AP, IBSS/WDS/mesh peer etc. This callback can sleep. | 2499 | * AP, IBSS/WDS/mesh peer etc. This callback can sleep. |
| 2486 | * | 2500 | * |
| 2487 | * @sta_remove: Notifies low level driver about removal of an associated | 2501 | * @sta_remove: Notifies low level driver about removal of an associated |
| 2488 | * station, AP, IBSS/WDS/mesh peer etc. This callback can sleep. | 2502 | * station, AP, IBSS/WDS/mesh peer etc. Note that after the callback |
| 2503 | * returns it isn't safe to use the pointer, not even RCU protected; | ||
| 2504 | * no RCU grace period is guaranteed between returning here and freeing | ||
| 2505 | * the station. See @sta_pre_rcu_remove if needed. | ||
| 2506 | * This callback can sleep. | ||
| 2489 | * | 2507 | * |
| 2490 | * @sta_add_debugfs: Drivers can use this callback to add debugfs files | 2508 | * @sta_add_debugfs: Drivers can use this callback to add debugfs files |
| 2491 | * when a station is added to mac80211's station list. This callback | 2509 | * when a station is added to mac80211's station list. This callback |
| @@ -2504,7 +2522,17 @@ enum ieee80211_roc_type { | |||
| 2504 | * station (which can be the AP, a client, IBSS/WDS/mesh peer etc.) | 2522 | * station (which can be the AP, a client, IBSS/WDS/mesh peer etc.) |
| 2505 | * This callback is mutually exclusive with @sta_add/@sta_remove. | 2523 | * This callback is mutually exclusive with @sta_add/@sta_remove. |
| 2506 | * It must not fail for down transitions but may fail for transitions | 2524 | * It must not fail for down transitions but may fail for transitions |
| 2507 | * up the list of states. | 2525 | * up the list of states. Also note that after the callback returns it |
| 2526 | * isn't safe to use the pointer, not even RCU protected - no RCU grace | ||
| 2527 | * period is guaranteed between returning here and freeing the station. | ||
| 2528 | * See @sta_pre_rcu_remove if needed. | ||
| 2529 | * The callback can sleep. | ||
| 2530 | * | ||
| 2531 | * @sta_pre_rcu_remove: Notify driver about station removal before RCU | ||
| 2532 | * synchronisation. This is useful if a driver needs to have station | ||
| 2533 | * pointers protected using RCU, it can then use this call to clear | ||
| 2534 | * the pointers instead of waiting for an RCU grace period to elapse | ||
| 2535 | * in @sta_state. | ||
| 2508 | * The callback can sleep. | 2536 | * The callback can sleep. |
| 2509 | * | 2537 | * |
| 2510 | * @sta_rc_update: Notifies the driver of changes to the bitrates that can be | 2538 | * @sta_rc_update: Notifies the driver of changes to the bitrates that can be |
| @@ -2764,10 +2792,6 @@ struct ieee80211_ops { | |||
| 2764 | unsigned int changed_flags, | 2792 | unsigned int changed_flags, |
| 2765 | unsigned int *total_flags, | 2793 | unsigned int *total_flags, |
| 2766 | u64 multicast); | 2794 | u64 multicast); |
| 2767 | void (*set_multicast_list)(struct ieee80211_hw *hw, | ||
| 2768 | struct ieee80211_vif *vif, bool allmulti, | ||
| 2769 | struct netdev_hw_addr_list *mc_list); | ||
| 2770 | |||
| 2771 | int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta, | 2795 | int (*set_tim)(struct ieee80211_hw *hw, struct ieee80211_sta *sta, |
| 2772 | bool set); | 2796 | bool set); |
| 2773 | int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd, | 2797 | int (*set_key)(struct ieee80211_hw *hw, enum set_key_cmd cmd, |
| @@ -2821,6 +2845,9 @@ struct ieee80211_ops { | |||
| 2821 | struct ieee80211_sta *sta, | 2845 | struct ieee80211_sta *sta, |
| 2822 | enum ieee80211_sta_state old_state, | 2846 | enum ieee80211_sta_state old_state, |
| 2823 | enum ieee80211_sta_state new_state); | 2847 | enum ieee80211_sta_state new_state); |
| 2848 | void (*sta_pre_rcu_remove)(struct ieee80211_hw *hw, | ||
| 2849 | struct ieee80211_vif *vif, | ||
| 2850 | struct ieee80211_sta *sta); | ||
| 2824 | void (*sta_rc_update)(struct ieee80211_hw *hw, | 2851 | void (*sta_rc_update)(struct ieee80211_hw *hw, |
| 2825 | struct ieee80211_vif *vif, | 2852 | struct ieee80211_vif *vif, |
| 2826 | struct ieee80211_sta *sta, | 2853 | struct ieee80211_sta *sta, |
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index 129b7b087148..e1307909ecf1 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h | |||
| @@ -693,6 +693,15 @@ | |||
| 693 | * other station that transmission must be blocked until the channel | 693 | * other station that transmission must be blocked until the channel |
| 694 | * switch is complete. | 694 | * switch is complete. |
| 695 | * | 695 | * |
| 696 | * @NL80211_CMD_VENDOR: Vendor-specified command/event. The command is specified | ||
| 697 | * by the %NL80211_ATTR_VENDOR_ID attribute and a sub-command in | ||
| 698 | * %NL80211_ATTR_VENDOR_SUBCMD. Parameter(s) can be transported in | ||
| 699 | * %NL80211_ATTR_VENDOR_DATA. | ||
| 700 | * For feature advertisement, the %NL80211_ATTR_VENDOR_DATA attribute is | ||
| 701 | * used in the wiphy data as a nested attribute containing descriptions | ||
| 702 | * (&struct nl80211_vendor_cmd_info) of the supported vendor commands. | ||
| 703 | * This may also be sent as an event with the same attributes. | ||
| 704 | * | ||
| 696 | * @NL80211_CMD_MAX: highest used command number | 705 | * @NL80211_CMD_MAX: highest used command number |
| 697 | * @__NL80211_CMD_AFTER_LAST: internal use | 706 | * @__NL80211_CMD_AFTER_LAST: internal use |
| 698 | */ | 707 | */ |
| @@ -860,6 +869,8 @@ enum nl80211_commands { | |||
| 860 | 869 | ||
| 861 | NL80211_CMD_CHANNEL_SWITCH, | 870 | NL80211_CMD_CHANNEL_SWITCH, |
| 862 | 871 | ||
| 872 | NL80211_CMD_VENDOR, | ||
| 873 | |||
| 863 | /* add new commands above here */ | 874 | /* add new commands above here */ |
| 864 | 875 | ||
| 865 | /* used to define NL80211_CMD_MAX below */ | 876 | /* used to define NL80211_CMD_MAX below */ |
| @@ -1520,6 +1531,16 @@ enum nl80211_commands { | |||
| 1520 | * @NL80211_ATTR_SUPPORT_10_MHZ: A flag indicating that the device supports | 1531 | * @NL80211_ATTR_SUPPORT_10_MHZ: A flag indicating that the device supports |
| 1521 | * 10 MHz channel bandwidth. | 1532 | * 10 MHz channel bandwidth. |
| 1522 | * | 1533 | * |
| 1534 | * @NL80211_ATTR_OPMODE_NOTIF: Operating mode field from Operating Mode | ||
| 1535 | * Notification Element based on association request when used with | ||
| 1536 | * %NL80211_CMD_NEW_STATION; u8 attribute. | ||
| 1537 | * | ||
| 1538 | * @NL80211_ATTR_VENDOR_ID: The vendor ID, either a 24-bit OUI or, if | ||
| 1539 | * %NL80211_VENDOR_ID_IS_LINUX is set, a special Linux ID (not used yet) | ||
| 1540 | * @NL80211_ATTR_VENDOR_SUBCMD: vendor sub-command | ||
| 1541 | * @NL80211_ATTR_VENDOR_DATA: data for the vendor command, if any; this | ||
| 1542 | * attribute is also used for vendor command feature advertisement | ||
| 1543 | * | ||
| 1523 | * @NL80211_ATTR_MAX: highest attribute number currently defined | 1544 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
| 1524 | * @__NL80211_ATTR_AFTER_LAST: internal use | 1545 | * @__NL80211_ATTR_AFTER_LAST: internal use |
| 1525 | */ | 1546 | */ |
| @@ -1839,6 +1860,12 @@ enum nl80211_attrs { | |||
| 1839 | NL80211_ATTR_SUPPORT_5_MHZ, | 1860 | NL80211_ATTR_SUPPORT_5_MHZ, |
| 1840 | NL80211_ATTR_SUPPORT_10_MHZ, | 1861 | NL80211_ATTR_SUPPORT_10_MHZ, |
| 1841 | 1862 | ||
| 1863 | NL80211_ATTR_OPMODE_NOTIF, | ||
| 1864 | |||
| 1865 | NL80211_ATTR_VENDOR_ID, | ||
| 1866 | NL80211_ATTR_VENDOR_SUBCMD, | ||
| 1867 | NL80211_ATTR_VENDOR_DATA, | ||
| 1868 | |||
| 1842 | /* add attributes here, update the policy in nl80211.c */ | 1869 | /* add attributes here, update the policy in nl80211.c */ |
| 1843 | 1870 | ||
| 1844 | __NL80211_ATTR_AFTER_LAST, | 1871 | __NL80211_ATTR_AFTER_LAST, |
| @@ -3083,21 +3110,35 @@ enum nl80211_key_attributes { | |||
| 3083 | * in an array of rates as defined in IEEE 802.11 7.3.2.2 (u8 values with | 3110 | * in an array of rates as defined in IEEE 802.11 7.3.2.2 (u8 values with |
| 3084 | * 1 = 500 kbps) but without the IE length restriction (at most | 3111 | * 1 = 500 kbps) but without the IE length restriction (at most |
| 3085 | * %NL80211_MAX_SUPP_RATES in a single array). | 3112 | * %NL80211_MAX_SUPP_RATES in a single array). |
| 3086 | * @NL80211_TXRATE_MCS: HT (MCS) rates allowed for TX rate selection | 3113 | * @NL80211_TXRATE_HT: HT (MCS) rates allowed for TX rate selection |
| 3087 | * in an array of MCS numbers. | 3114 | * in an array of MCS numbers. |
| 3115 | * @NL80211_TXRATE_VHT: VHT rates allowed for TX rate selection, | ||
| 3116 | * see &struct nl80211_txrate_vht | ||
| 3088 | * @__NL80211_TXRATE_AFTER_LAST: internal | 3117 | * @__NL80211_TXRATE_AFTER_LAST: internal |
| 3089 | * @NL80211_TXRATE_MAX: highest TX rate attribute | 3118 | * @NL80211_TXRATE_MAX: highest TX rate attribute |
| 3090 | */ | 3119 | */ |
| 3091 | enum nl80211_tx_rate_attributes { | 3120 | enum nl80211_tx_rate_attributes { |
| 3092 | __NL80211_TXRATE_INVALID, | 3121 | __NL80211_TXRATE_INVALID, |
| 3093 | NL80211_TXRATE_LEGACY, | 3122 | NL80211_TXRATE_LEGACY, |
| 3094 | NL80211_TXRATE_MCS, | 3123 | NL80211_TXRATE_HT, |
| 3124 | NL80211_TXRATE_VHT, | ||
| 3095 | 3125 | ||
| 3096 | /* keep last */ | 3126 | /* keep last */ |
| 3097 | __NL80211_TXRATE_AFTER_LAST, | 3127 | __NL80211_TXRATE_AFTER_LAST, |
| 3098 | NL80211_TXRATE_MAX = __NL80211_TXRATE_AFTER_LAST - 1 | 3128 | NL80211_TXRATE_MAX = __NL80211_TXRATE_AFTER_LAST - 1 |
| 3099 | }; | 3129 | }; |
| 3100 | 3130 | ||
| 3131 | #define NL80211_TXRATE_MCS NL80211_TXRATE_HT | ||
| 3132 | #define NL80211_VHT_NSS_MAX 8 | ||
| 3133 | |||
| 3134 | /** | ||
| 3135 | * struct nl80211_txrate_vht - VHT MCS/NSS txrate bitmap | ||
| 3136 | * @mcs: MCS bitmap table for each NSS (array index 0 for 1 stream, etc.) | ||
| 3137 | */ | ||
| 3138 | struct nl80211_txrate_vht { | ||
| 3139 | __u16 mcs[NL80211_VHT_NSS_MAX]; | ||
| 3140 | }; | ||
| 3141 | |||
| 3101 | /** | 3142 | /** |
| 3102 | * enum nl80211_band - Frequency band | 3143 | * enum nl80211_band - Frequency band |
| 3103 | * @NL80211_BAND_2GHZ: 2.4 GHz ISM band | 3144 | * @NL80211_BAND_2GHZ: 2.4 GHz ISM band |
| @@ -3959,4 +4000,24 @@ enum nl80211_rxmgmt_flags { | |||
| 3959 | NL80211_RXMGMT_FLAG_ANSWERED = 1 << 0, | 4000 | NL80211_RXMGMT_FLAG_ANSWERED = 1 << 0, |
| 3960 | }; | 4001 | }; |
| 3961 | 4002 | ||
| 4003 | /* | ||
| 4004 | * If this flag is unset, the lower 24 bits are an OUI, if set | ||
| 4005 | * a Linux nl80211 vendor ID is used (no such IDs are allocated | ||
| 4006 | * yet, so that's not valid so far) | ||
| 4007 | */ | ||
| 4008 | #define NL80211_VENDOR_ID_IS_LINUX 0x80000000 | ||
| 4009 | |||
| 4010 | /** | ||
| 4011 | * struct nl80211_vendor_cmd_info - vendor command data | ||
| 4012 | * @vendor_id: If the %NL80211_VENDOR_ID_IS_LINUX flag is clear, then the | ||
| 4013 | * value is a 24-bit OUI; if it is set then a separately allocated ID | ||
| 4014 | * may be used, but no such IDs are allocated yet. New IDs should be | ||
| 4015 | * added to this file when needed. | ||
| 4016 | * @subcmd: sub-command ID for the command | ||
| 4017 | */ | ||
| 4018 | struct nl80211_vendor_cmd_info { | ||
| 4019 | __u32 vendor_id; | ||
| 4020 | __u32 subcmd; | ||
| 4021 | }; | ||
| 4022 | |||
| 3962 | #endif /* __LINUX_NL80211_H */ | 4023 | #endif /* __LINUX_NL80211_H */ |
