diff options
Diffstat (limited to 'include/linux/ieee80211.h')
-rw-r--r-- | include/linux/ieee80211.h | 155 |
1 files changed, 110 insertions, 45 deletions
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index f0859cc73861..7e24fe0cfbcd 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
@@ -151,6 +151,11 @@ | |||
151 | /* Mesh Control 802.11s */ | 151 | /* Mesh Control 802.11s */ |
152 | #define IEEE80211_QOS_CTL_MESH_CONTROL_PRESENT 0x0100 | 152 | #define IEEE80211_QOS_CTL_MESH_CONTROL_PRESENT 0x0100 |
153 | 153 | ||
154 | /* Mesh Power Save Level */ | ||
155 | #define IEEE80211_QOS_CTL_MESH_PS_LEVEL 0x0200 | ||
156 | /* Mesh Receiver Service Period Initiated */ | ||
157 | #define IEEE80211_QOS_CTL_RSPI 0x0400 | ||
158 | |||
154 | /* U-APSD queue for WMM IEs sent by AP */ | 159 | /* U-APSD queue for WMM IEs sent by AP */ |
155 | #define IEEE80211_WMM_IE_AP_QOSINFO_UAPSD (1<<7) | 160 | #define IEEE80211_WMM_IE_AP_QOSINFO_UAPSD (1<<7) |
156 | #define IEEE80211_WMM_IE_AP_QOSINFO_PARAM_SET_CNT_MASK 0x0f | 161 | #define IEEE80211_WMM_IE_AP_QOSINFO_PARAM_SET_CNT_MASK 0x0f |
@@ -180,7 +185,7 @@ struct ieee80211_hdr { | |||
180 | u8 addr3[6]; | 185 | u8 addr3[6]; |
181 | __le16 seq_ctrl; | 186 | __le16 seq_ctrl; |
182 | u8 addr4[6]; | 187 | u8 addr4[6]; |
183 | } __attribute__ ((packed)); | 188 | } __packed; |
184 | 189 | ||
185 | struct ieee80211_hdr_3addr { | 190 | struct ieee80211_hdr_3addr { |
186 | __le16 frame_control; | 191 | __le16 frame_control; |
@@ -189,7 +194,7 @@ struct ieee80211_hdr_3addr { | |||
189 | u8 addr2[6]; | 194 | u8 addr2[6]; |
190 | u8 addr3[6]; | 195 | u8 addr3[6]; |
191 | __le16 seq_ctrl; | 196 | __le16 seq_ctrl; |
192 | } __attribute__ ((packed)); | 197 | } __packed; |
193 | 198 | ||
194 | struct ieee80211_qos_hdr { | 199 | struct ieee80211_qos_hdr { |
195 | __le16 frame_control; | 200 | __le16 frame_control; |
@@ -199,7 +204,7 @@ struct ieee80211_qos_hdr { | |||
199 | u8 addr3[6]; | 204 | u8 addr3[6]; |
200 | __le16 seq_ctrl; | 205 | __le16 seq_ctrl; |
201 | __le16 qos_ctrl; | 206 | __le16 qos_ctrl; |
202 | } __attribute__ ((packed)); | 207 | } __packed; |
203 | 208 | ||
204 | /** | 209 | /** |
205 | * ieee80211_has_tods - check if IEEE80211_FCTL_TODS is set | 210 | * ieee80211_has_tods - check if IEEE80211_FCTL_TODS is set |
@@ -576,7 +581,7 @@ struct ieee80211s_hdr { | |||
576 | __le32 seqnum; | 581 | __le32 seqnum; |
577 | u8 eaddr1[6]; | 582 | u8 eaddr1[6]; |
578 | u8 eaddr2[6]; | 583 | u8 eaddr2[6]; |
579 | } __attribute__ ((packed)); | 584 | } __packed; |
580 | 585 | ||
581 | /* Mesh flags */ | 586 | /* Mesh flags */ |
582 | #define MESH_FLAGS_AE_A4 0x1 | 587 | #define MESH_FLAGS_AE_A4 0x1 |
@@ -614,7 +619,7 @@ struct ieee80211_quiet_ie { | |||
614 | u8 period; | 619 | u8 period; |
615 | __le16 duration; | 620 | __le16 duration; |
616 | __le16 offset; | 621 | __le16 offset; |
617 | } __attribute__ ((packed)); | 622 | } __packed; |
618 | 623 | ||
619 | /** | 624 | /** |
620 | * struct ieee80211_msrment_ie | 625 | * struct ieee80211_msrment_ie |
@@ -626,7 +631,7 @@ struct ieee80211_msrment_ie { | |||
626 | u8 mode; | 631 | u8 mode; |
627 | u8 type; | 632 | u8 type; |
628 | u8 request[0]; | 633 | u8 request[0]; |
629 | } __attribute__ ((packed)); | 634 | } __packed; |
630 | 635 | ||
631 | /** | 636 | /** |
632 | * struct ieee80211_channel_sw_ie | 637 | * struct ieee80211_channel_sw_ie |
@@ -637,7 +642,7 @@ struct ieee80211_channel_sw_ie { | |||
637 | u8 mode; | 642 | u8 mode; |
638 | u8 new_ch_num; | 643 | u8 new_ch_num; |
639 | u8 count; | 644 | u8 count; |
640 | } __attribute__ ((packed)); | 645 | } __packed; |
641 | 646 | ||
642 | /** | 647 | /** |
643 | * struct ieee80211_tim | 648 | * struct ieee80211_tim |
@@ -650,7 +655,7 @@ struct ieee80211_tim_ie { | |||
650 | u8 bitmap_ctrl; | 655 | u8 bitmap_ctrl; |
651 | /* variable size: 1 - 251 bytes */ | 656 | /* variable size: 1 - 251 bytes */ |
652 | u8 virtual_map[1]; | 657 | u8 virtual_map[1]; |
653 | } __attribute__ ((packed)); | 658 | } __packed; |
654 | 659 | ||
655 | /** | 660 | /** |
656 | * struct ieee80211_meshconf_ie | 661 | * struct ieee80211_meshconf_ie |
@@ -665,7 +670,7 @@ struct ieee80211_meshconf_ie { | |||
665 | u8 meshconf_auth; | 670 | u8 meshconf_auth; |
666 | u8 meshconf_form; | 671 | u8 meshconf_form; |
667 | u8 meshconf_cap; | 672 | u8 meshconf_cap; |
668 | } __attribute__ ((packed)); | 673 | } __packed; |
669 | 674 | ||
670 | /** | 675 | /** |
671 | * enum mesh_config_capab_flags - Mesh Configuration IE capability field flags | 676 | * enum mesh_config_capab_flags - Mesh Configuration IE capability field flags |
@@ -675,11 +680,14 @@ struct ieee80211_meshconf_ie { | |||
675 | * @IEEE80211_MESHCONF_CAPAB_FORWARDING: the STA forwards MSDUs | 680 | * @IEEE80211_MESHCONF_CAPAB_FORWARDING: the STA forwards MSDUs |
676 | * @IEEE80211_MESHCONF_CAPAB_TBTT_ADJUSTING: TBTT adjustment procedure | 681 | * @IEEE80211_MESHCONF_CAPAB_TBTT_ADJUSTING: TBTT adjustment procedure |
677 | * is ongoing | 682 | * is ongoing |
683 | * @IEEE80211_MESHCONF_CAPAB_POWER_SAVE_LEVEL: STA is in deep sleep mode or has | ||
684 | * neighbors in deep sleep mode | ||
678 | */ | 685 | */ |
679 | enum mesh_config_capab_flags { | 686 | enum mesh_config_capab_flags { |
680 | IEEE80211_MESHCONF_CAPAB_ACCEPT_PLINKS = 0x01, | 687 | IEEE80211_MESHCONF_CAPAB_ACCEPT_PLINKS = 0x01, |
681 | IEEE80211_MESHCONF_CAPAB_FORWARDING = 0x08, | 688 | IEEE80211_MESHCONF_CAPAB_FORWARDING = 0x08, |
682 | IEEE80211_MESHCONF_CAPAB_TBTT_ADJUSTING = 0x20, | 689 | IEEE80211_MESHCONF_CAPAB_TBTT_ADJUSTING = 0x20, |
690 | IEEE80211_MESHCONF_CAPAB_POWER_SAVE_LEVEL = 0x40, | ||
683 | }; | 691 | }; |
684 | 692 | ||
685 | /** | 693 | /** |
@@ -695,12 +703,41 @@ struct ieee80211_rann_ie { | |||
695 | __le32 rann_seq; | 703 | __le32 rann_seq; |
696 | __le32 rann_interval; | 704 | __le32 rann_interval; |
697 | __le32 rann_metric; | 705 | __le32 rann_metric; |
698 | } __attribute__ ((packed)); | 706 | } __packed; |
699 | 707 | ||
700 | enum ieee80211_rann_flags { | 708 | enum ieee80211_rann_flags { |
701 | RANN_FLAG_IS_GATE = 1 << 0, | 709 | RANN_FLAG_IS_GATE = 1 << 0, |
702 | }; | 710 | }; |
703 | 711 | ||
712 | enum ieee80211_ht_chanwidth_values { | ||
713 | IEEE80211_HT_CHANWIDTH_20MHZ = 0, | ||
714 | IEEE80211_HT_CHANWIDTH_ANY = 1, | ||
715 | }; | ||
716 | |||
717 | /** | ||
718 | * enum ieee80211_opmode_bits - VHT operating mode field bits | ||
719 | * @IEEE80211_OPMODE_NOTIF_CHANWIDTH_MASK: channel width mask | ||
720 | * @IEEE80211_OPMODE_NOTIF_CHANWIDTH_20MHZ: 20 MHz channel width | ||
721 | * @IEEE80211_OPMODE_NOTIF_CHANWIDTH_40MHZ: 40 MHz channel width | ||
722 | * @IEEE80211_OPMODE_NOTIF_CHANWIDTH_80MHZ: 80 MHz channel width | ||
723 | * @IEEE80211_OPMODE_NOTIF_CHANWIDTH_160MHZ: 160 MHz or 80+80 MHz channel width | ||
724 | * @IEEE80211_OPMODE_NOTIF_RX_NSS_MASK: number of spatial streams mask | ||
725 | * (the NSS value is the value of this field + 1) | ||
726 | * @IEEE80211_OPMODE_NOTIF_RX_NSS_SHIFT: number of spatial streams shift | ||
727 | * @IEEE80211_OPMODE_NOTIF_RX_NSS_TYPE_BF: indicates streams in SU-MIMO PPDU | ||
728 | * using a beamforming steering matrix | ||
729 | */ | ||
730 | enum ieee80211_vht_opmode_bits { | ||
731 | IEEE80211_OPMODE_NOTIF_CHANWIDTH_MASK = 3, | ||
732 | IEEE80211_OPMODE_NOTIF_CHANWIDTH_20MHZ = 0, | ||
733 | IEEE80211_OPMODE_NOTIF_CHANWIDTH_40MHZ = 1, | ||
734 | IEEE80211_OPMODE_NOTIF_CHANWIDTH_80MHZ = 2, | ||
735 | IEEE80211_OPMODE_NOTIF_CHANWIDTH_160MHZ = 3, | ||
736 | IEEE80211_OPMODE_NOTIF_RX_NSS_MASK = 0x70, | ||
737 | IEEE80211_OPMODE_NOTIF_RX_NSS_SHIFT = 4, | ||
738 | IEEE80211_OPMODE_NOTIF_RX_NSS_TYPE_BF = 0x80, | ||
739 | }; | ||
740 | |||
704 | #define WLAN_SA_QUERY_TR_ID_LEN 2 | 741 | #define WLAN_SA_QUERY_TR_ID_LEN 2 |
705 | 742 | ||
706 | struct ieee80211_mgmt { | 743 | struct ieee80211_mgmt { |
@@ -717,33 +754,33 @@ struct ieee80211_mgmt { | |||
717 | __le16 status_code; | 754 | __le16 status_code; |
718 | /* possibly followed by Challenge text */ | 755 | /* possibly followed by Challenge text */ |
719 | u8 variable[0]; | 756 | u8 variable[0]; |
720 | } __attribute__ ((packed)) auth; | 757 | } __packed auth; |
721 | struct { | 758 | struct { |
722 | __le16 reason_code; | 759 | __le16 reason_code; |
723 | } __attribute__ ((packed)) deauth; | 760 | } __packed deauth; |
724 | struct { | 761 | struct { |
725 | __le16 capab_info; | 762 | __le16 capab_info; |
726 | __le16 listen_interval; | 763 | __le16 listen_interval; |
727 | /* followed by SSID and Supported rates */ | 764 | /* followed by SSID and Supported rates */ |
728 | u8 variable[0]; | 765 | u8 variable[0]; |
729 | } __attribute__ ((packed)) assoc_req; | 766 | } __packed assoc_req; |
730 | struct { | 767 | struct { |
731 | __le16 capab_info; | 768 | __le16 capab_info; |
732 | __le16 status_code; | 769 | __le16 status_code; |
733 | __le16 aid; | 770 | __le16 aid; |
734 | /* followed by Supported rates */ | 771 | /* followed by Supported rates */ |
735 | u8 variable[0]; | 772 | u8 variable[0]; |
736 | } __attribute__ ((packed)) assoc_resp, reassoc_resp; | 773 | } __packed assoc_resp, reassoc_resp; |
737 | struct { | 774 | struct { |
738 | __le16 capab_info; | 775 | __le16 capab_info; |
739 | __le16 listen_interval; | 776 | __le16 listen_interval; |
740 | u8 current_ap[6]; | 777 | u8 current_ap[6]; |
741 | /* followed by SSID and Supported rates */ | 778 | /* followed by SSID and Supported rates */ |
742 | u8 variable[0]; | 779 | u8 variable[0]; |
743 | } __attribute__ ((packed)) reassoc_req; | 780 | } __packed reassoc_req; |
744 | struct { | 781 | struct { |
745 | __le16 reason_code; | 782 | __le16 reason_code; |
746 | } __attribute__ ((packed)) disassoc; | 783 | } __packed disassoc; |
747 | struct { | 784 | struct { |
748 | __le64 timestamp; | 785 | __le64 timestamp; |
749 | __le16 beacon_int; | 786 | __le16 beacon_int; |
@@ -751,11 +788,11 @@ struct ieee80211_mgmt { | |||
751 | /* followed by some of SSID, Supported rates, | 788 | /* followed by some of SSID, Supported rates, |
752 | * FH Params, DS Params, CF Params, IBSS Params, TIM */ | 789 | * FH Params, DS Params, CF Params, IBSS Params, TIM */ |
753 | u8 variable[0]; | 790 | u8 variable[0]; |
754 | } __attribute__ ((packed)) beacon; | 791 | } __packed beacon; |
755 | struct { | 792 | struct { |
756 | /* only variable items: SSID, Supported rates */ | 793 | /* only variable items: SSID, Supported rates */ |
757 | u8 variable[0]; | 794 | u8 variable[0]; |
758 | } __attribute__ ((packed)) probe_req; | 795 | } __packed probe_req; |
759 | struct { | 796 | struct { |
760 | __le64 timestamp; | 797 | __le64 timestamp; |
761 | __le16 beacon_int; | 798 | __le16 beacon_int; |
@@ -763,7 +800,7 @@ struct ieee80211_mgmt { | |||
763 | /* followed by some of SSID, Supported rates, | 800 | /* followed by some of SSID, Supported rates, |
764 | * FH Params, DS Params, CF Params, IBSS Params */ | 801 | * FH Params, DS Params, CF Params, IBSS Params */ |
765 | u8 variable[0]; | 802 | u8 variable[0]; |
766 | } __attribute__ ((packed)) probe_resp; | 803 | } __packed probe_resp; |
767 | struct { | 804 | struct { |
768 | u8 category; | 805 | u8 category; |
769 | union { | 806 | union { |
@@ -772,65 +809,73 @@ struct ieee80211_mgmt { | |||
772 | u8 dialog_token; | 809 | u8 dialog_token; |
773 | u8 status_code; | 810 | u8 status_code; |
774 | u8 variable[0]; | 811 | u8 variable[0]; |
775 | } __attribute__ ((packed)) wme_action; | 812 | } __packed wme_action; |
776 | struct{ | 813 | struct{ |
777 | u8 action_code; | 814 | u8 action_code; |
778 | u8 element_id; | 815 | u8 element_id; |
779 | u8 length; | 816 | u8 length; |
780 | struct ieee80211_channel_sw_ie sw_elem; | 817 | struct ieee80211_channel_sw_ie sw_elem; |
781 | } __attribute__((packed)) chan_switch; | 818 | } __packed chan_switch; |
782 | struct{ | 819 | struct{ |
783 | u8 action_code; | 820 | u8 action_code; |
784 | u8 dialog_token; | 821 | u8 dialog_token; |
785 | u8 element_id; | 822 | u8 element_id; |
786 | u8 length; | 823 | u8 length; |
787 | struct ieee80211_msrment_ie msr_elem; | 824 | struct ieee80211_msrment_ie msr_elem; |
788 | } __attribute__((packed)) measurement; | 825 | } __packed measurement; |
789 | struct{ | 826 | struct{ |
790 | u8 action_code; | 827 | u8 action_code; |
791 | u8 dialog_token; | 828 | u8 dialog_token; |
792 | __le16 capab; | 829 | __le16 capab; |
793 | __le16 timeout; | 830 | __le16 timeout; |
794 | __le16 start_seq_num; | 831 | __le16 start_seq_num; |
795 | } __attribute__((packed)) addba_req; | 832 | } __packed addba_req; |
796 | struct{ | 833 | struct{ |
797 | u8 action_code; | 834 | u8 action_code; |
798 | u8 dialog_token; | 835 | u8 dialog_token; |
799 | __le16 status; | 836 | __le16 status; |
800 | __le16 capab; | 837 | __le16 capab; |
801 | __le16 timeout; | 838 | __le16 timeout; |
802 | } __attribute__((packed)) addba_resp; | 839 | } __packed addba_resp; |
803 | struct{ | 840 | struct{ |
804 | u8 action_code; | 841 | u8 action_code; |
805 | __le16 params; | 842 | __le16 params; |
806 | __le16 reason_code; | 843 | __le16 reason_code; |
807 | } __attribute__((packed)) delba; | 844 | } __packed delba; |
808 | struct { | 845 | struct { |
809 | u8 action_code; | 846 | u8 action_code; |
810 | u8 variable[0]; | 847 | u8 variable[0]; |
811 | } __attribute__((packed)) self_prot; | 848 | } __packed self_prot; |
812 | struct{ | 849 | struct{ |
813 | u8 action_code; | 850 | u8 action_code; |
814 | u8 variable[0]; | 851 | u8 variable[0]; |
815 | } __attribute__((packed)) mesh_action; | 852 | } __packed mesh_action; |
816 | struct { | 853 | struct { |
817 | u8 action; | 854 | u8 action; |
818 | u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN]; | 855 | u8 trans_id[WLAN_SA_QUERY_TR_ID_LEN]; |
819 | } __attribute__ ((packed)) sa_query; | 856 | } __packed sa_query; |
820 | struct { | 857 | struct { |
821 | u8 action; | 858 | u8 action; |
822 | u8 smps_control; | 859 | u8 smps_control; |
823 | } __attribute__ ((packed)) ht_smps; | 860 | } __packed ht_smps; |
861 | struct { | ||
862 | u8 action_code; | ||
863 | u8 chanwidth; | ||
864 | } __packed ht_notify_cw; | ||
824 | struct { | 865 | struct { |
825 | u8 action_code; | 866 | u8 action_code; |
826 | u8 dialog_token; | 867 | u8 dialog_token; |
827 | __le16 capability; | 868 | __le16 capability; |
828 | u8 variable[0]; | 869 | u8 variable[0]; |
829 | } __packed tdls_discover_resp; | 870 | } __packed tdls_discover_resp; |
871 | struct { | ||
872 | u8 action_code; | ||
873 | u8 operating_mode; | ||
874 | } __packed vht_opmode_notif; | ||
830 | } u; | 875 | } u; |
831 | } __attribute__ ((packed)) action; | 876 | } __packed action; |
832 | } u; | 877 | } u; |
833 | } __attribute__ ((packed)); | 878 | } __packed; |
834 | 879 | ||
835 | /* Supported Rates value encodings in 802.11n-2009 7.3.2.2 */ | 880 | /* Supported Rates value encodings in 802.11n-2009 7.3.2.2 */ |
836 | #define BSS_MEMBERSHIP_SELECTOR_HT_PHY 127 | 881 | #define BSS_MEMBERSHIP_SELECTOR_HT_PHY 127 |
@@ -846,7 +891,7 @@ struct ieee80211_mmie { | |||
846 | __le16 key_id; | 891 | __le16 key_id; |
847 | u8 sequence_number[6]; | 892 | u8 sequence_number[6]; |
848 | u8 mic[8]; | 893 | u8 mic[8]; |
849 | } __attribute__ ((packed)); | 894 | } __packed; |
850 | 895 | ||
851 | struct ieee80211_vendor_ie { | 896 | struct ieee80211_vendor_ie { |
852 | u8 element_id; | 897 | u8 element_id; |
@@ -861,20 +906,20 @@ struct ieee80211_rts { | |||
861 | __le16 duration; | 906 | __le16 duration; |
862 | u8 ra[6]; | 907 | u8 ra[6]; |
863 | u8 ta[6]; | 908 | u8 ta[6]; |
864 | } __attribute__ ((packed)); | 909 | } __packed; |
865 | 910 | ||
866 | struct ieee80211_cts { | 911 | struct ieee80211_cts { |
867 | __le16 frame_control; | 912 | __le16 frame_control; |
868 | __le16 duration; | 913 | __le16 duration; |
869 | u8 ra[6]; | 914 | u8 ra[6]; |
870 | } __attribute__ ((packed)); | 915 | } __packed; |
871 | 916 | ||
872 | struct ieee80211_pspoll { | 917 | struct ieee80211_pspoll { |
873 | __le16 frame_control; | 918 | __le16 frame_control; |
874 | __le16 aid; | 919 | __le16 aid; |
875 | u8 bssid[6]; | 920 | u8 bssid[6]; |
876 | u8 ta[6]; | 921 | u8 ta[6]; |
877 | } __attribute__ ((packed)); | 922 | } __packed; |
878 | 923 | ||
879 | /* TDLS */ | 924 | /* TDLS */ |
880 | 925 | ||
@@ -967,7 +1012,7 @@ struct ieee80211_bar { | |||
967 | __u8 ta[6]; | 1012 | __u8 ta[6]; |
968 | __le16 control; | 1013 | __le16 control; |
969 | __le16 start_seq_num; | 1014 | __le16 start_seq_num; |
970 | } __attribute__((packed)); | 1015 | } __packed; |
971 | 1016 | ||
972 | /* 802.11 BAR control masks */ | 1017 | /* 802.11 BAR control masks */ |
973 | #define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL 0x0000 | 1018 | #define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL 0x0000 |
@@ -992,7 +1037,7 @@ struct ieee80211_mcs_info { | |||
992 | __le16 rx_highest; | 1037 | __le16 rx_highest; |
993 | u8 tx_params; | 1038 | u8 tx_params; |
994 | u8 reserved[3]; | 1039 | u8 reserved[3]; |
995 | } __attribute__((packed)); | 1040 | } __packed; |
996 | 1041 | ||
997 | /* 802.11n HT capability MSC set */ | 1042 | /* 802.11n HT capability MSC set */ |
998 | #define IEEE80211_HT_MCS_RX_HIGHEST_MASK 0x3ff | 1043 | #define IEEE80211_HT_MCS_RX_HIGHEST_MASK 0x3ff |
@@ -1031,7 +1076,7 @@ struct ieee80211_ht_cap { | |||
1031 | __le16 extended_ht_cap_info; | 1076 | __le16 extended_ht_cap_info; |
1032 | __le32 tx_BF_cap_info; | 1077 | __le32 tx_BF_cap_info; |
1033 | u8 antenna_selection_info; | 1078 | u8 antenna_selection_info; |
1034 | } __attribute__ ((packed)); | 1079 | } __packed; |
1035 | 1080 | ||
1036 | /* 802.11n HT capabilities masks (for cap_info) */ | 1081 | /* 802.11n HT capabilities masks (for cap_info) */ |
1037 | #define IEEE80211_HT_CAP_LDPC_CODING 0x0001 | 1082 | #define IEEE80211_HT_CAP_LDPC_CODING 0x0001 |
@@ -1102,7 +1147,7 @@ struct ieee80211_ht_operation { | |||
1102 | __le16 operation_mode; | 1147 | __le16 operation_mode; |
1103 | __le16 stbc_param; | 1148 | __le16 stbc_param; |
1104 | u8 basic_set[16]; | 1149 | u8 basic_set[16]; |
1105 | } __attribute__ ((packed)); | 1150 | } __packed; |
1106 | 1151 | ||
1107 | /* for ht_param */ | 1152 | /* for ht_param */ |
1108 | #define IEEE80211_HT_PARAM_CHA_SEC_OFFSET 0x03 | 1153 | #define IEEE80211_HT_PARAM_CHA_SEC_OFFSET 0x03 |
@@ -1256,6 +1301,7 @@ struct ieee80211_vht_operation { | |||
1256 | #define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 0x00000002 | 1301 | #define IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_11454 0x00000002 |
1257 | #define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ 0x00000004 | 1302 | #define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ 0x00000004 |
1258 | #define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ 0x00000008 | 1303 | #define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ 0x00000008 |
1304 | #define IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK 0x0000000C | ||
1259 | #define IEEE80211_VHT_CAP_RXLDPC 0x00000010 | 1305 | #define IEEE80211_VHT_CAP_RXLDPC 0x00000010 |
1260 | #define IEEE80211_VHT_CAP_SHORT_GI_80 0x00000020 | 1306 | #define IEEE80211_VHT_CAP_SHORT_GI_80 0x00000020 |
1261 | #define IEEE80211_VHT_CAP_SHORT_GI_160 0x00000040 | 1307 | #define IEEE80211_VHT_CAP_SHORT_GI_160 0x00000040 |
@@ -1311,16 +1357,21 @@ struct ieee80211_vht_operation { | |||
1311 | #define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8) | 1357 | #define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8) |
1312 | #define WLAN_CAPABILITY_QOS (1<<9) | 1358 | #define WLAN_CAPABILITY_QOS (1<<9) |
1313 | #define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10) | 1359 | #define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10) |
1360 | #define WLAN_CAPABILITY_APSD (1<<11) | ||
1361 | #define WLAN_CAPABILITY_RADIO_MEASURE (1<<12) | ||
1314 | #define WLAN_CAPABILITY_DSSS_OFDM (1<<13) | 1362 | #define WLAN_CAPABILITY_DSSS_OFDM (1<<13) |
1363 | #define WLAN_CAPABILITY_DEL_BACK (1<<14) | ||
1364 | #define WLAN_CAPABILITY_IMM_BACK (1<<15) | ||
1315 | 1365 | ||
1316 | /* DMG (60gHz) 802.11ad */ | 1366 | /* DMG (60gHz) 802.11ad */ |
1317 | /* type - bits 0..1 */ | 1367 | /* type - bits 0..1 */ |
1368 | #define WLAN_CAPABILITY_DMG_TYPE_MASK (3<<0) | ||
1318 | #define WLAN_CAPABILITY_DMG_TYPE_IBSS (1<<0) /* Tx by: STA */ | 1369 | #define WLAN_CAPABILITY_DMG_TYPE_IBSS (1<<0) /* Tx by: STA */ |
1319 | #define WLAN_CAPABILITY_DMG_TYPE_PBSS (2<<0) /* Tx by: PCP */ | 1370 | #define WLAN_CAPABILITY_DMG_TYPE_PBSS (2<<0) /* Tx by: PCP */ |
1320 | #define WLAN_CAPABILITY_DMG_TYPE_AP (3<<0) /* Tx by: AP */ | 1371 | #define WLAN_CAPABILITY_DMG_TYPE_AP (3<<0) /* Tx by: AP */ |
1321 | 1372 | ||
1322 | #define WLAN_CAPABILITY_DMG_CBAP_ONLY (1<<2) | 1373 | #define WLAN_CAPABILITY_DMG_CBAP_ONLY (1<<2) |
1323 | #define WLAN_CAPABILITY_DMG_CBAP_SOURCE (1<<3) | 1374 | #define WLAN_CAPABILITY_DMG_CBAP_SOURCE (1<<3) |
1324 | #define WLAN_CAPABILITY_DMG_PRIVACY (1<<4) | 1375 | #define WLAN_CAPABILITY_DMG_PRIVACY (1<<4) |
1325 | #define WLAN_CAPABILITY_DMG_ECPAC (1<<5) | 1376 | #define WLAN_CAPABILITY_DMG_ECPAC (1<<5) |
1326 | 1377 | ||
@@ -1576,6 +1627,7 @@ enum ieee80211_eid { | |||
1576 | 1627 | ||
1577 | WLAN_EID_VHT_CAPABILITY = 191, | 1628 | WLAN_EID_VHT_CAPABILITY = 191, |
1578 | WLAN_EID_VHT_OPERATION = 192, | 1629 | WLAN_EID_VHT_OPERATION = 192, |
1630 | WLAN_EID_OPMODE_NOTIF = 199, | ||
1579 | 1631 | ||
1580 | /* 802.11ad */ | 1632 | /* 802.11ad */ |
1581 | WLAN_EID_NON_TX_BSSID_CAP = 83, | 1633 | WLAN_EID_NON_TX_BSSID_CAP = 83, |
@@ -1630,6 +1682,7 @@ enum ieee80211_category { | |||
1630 | WLAN_CATEGORY_WMM = 17, | 1682 | WLAN_CATEGORY_WMM = 17, |
1631 | WLAN_CATEGORY_FST = 18, | 1683 | WLAN_CATEGORY_FST = 18, |
1632 | WLAN_CATEGORY_UNPROT_DMG = 20, | 1684 | WLAN_CATEGORY_UNPROT_DMG = 20, |
1685 | WLAN_CATEGORY_VHT = 21, | ||
1633 | WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126, | 1686 | WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126, |
1634 | WLAN_CATEGORY_VENDOR_SPECIFIC = 127, | 1687 | WLAN_CATEGORY_VENDOR_SPECIFIC = 127, |
1635 | }; | 1688 | }; |
@@ -1655,6 +1708,13 @@ enum ieee80211_ht_actioncode { | |||
1655 | WLAN_HT_ACTION_ASEL_IDX_FEEDBACK = 7, | 1708 | WLAN_HT_ACTION_ASEL_IDX_FEEDBACK = 7, |
1656 | }; | 1709 | }; |
1657 | 1710 | ||
1711 | /* VHT action codes */ | ||
1712 | enum ieee80211_vht_actioncode { | ||
1713 | WLAN_VHT_ACTION_COMPRESSED_BF = 0, | ||
1714 | WLAN_VHT_ACTION_GROUPID_MGMT = 1, | ||
1715 | WLAN_VHT_ACTION_OPMODE_NOTIF = 2, | ||
1716 | }; | ||
1717 | |||
1658 | /* Self Protected Action codes */ | 1718 | /* Self Protected Action codes */ |
1659 | enum ieee80211_self_protected_actioncode { | 1719 | enum ieee80211_self_protected_actioncode { |
1660 | WLAN_SP_RESERVED = 0, | 1720 | WLAN_SP_RESERVED = 0, |
@@ -1716,6 +1776,8 @@ enum ieee80211_tdls_actioncode { | |||
1716 | #define WLAN_EXT_CAPA5_TDLS_ENABLED BIT(5) | 1776 | #define WLAN_EXT_CAPA5_TDLS_ENABLED BIT(5) |
1717 | #define WLAN_EXT_CAPA5_TDLS_PROHIBITED BIT(6) | 1777 | #define WLAN_EXT_CAPA5_TDLS_PROHIBITED BIT(6) |
1718 | 1778 | ||
1779 | #define WLAN_EXT_CAPA8_OPMODE_NOTIF BIT(6) | ||
1780 | |||
1719 | /* TDLS specific payload type in the LLC/SNAP header */ | 1781 | /* TDLS specific payload type in the LLC/SNAP header */ |
1720 | #define WLAN_TDLS_SNAP_RFTYPE 0x2 | 1782 | #define WLAN_TDLS_SNAP_RFTYPE 0x2 |
1721 | 1783 | ||
@@ -1834,14 +1896,14 @@ struct ieee80211_country_ie_triplet { | |||
1834 | u8 first_channel; | 1896 | u8 first_channel; |
1835 | u8 num_channels; | 1897 | u8 num_channels; |
1836 | s8 max_power; | 1898 | s8 max_power; |
1837 | } __attribute__ ((packed)) chans; | 1899 | } __packed chans; |
1838 | struct { | 1900 | struct { |
1839 | u8 reg_extension_id; | 1901 | u8 reg_extension_id; |
1840 | u8 reg_class; | 1902 | u8 reg_class; |
1841 | u8 coverage_class; | 1903 | u8 coverage_class; |
1842 | } __attribute__ ((packed)) ext; | 1904 | } __packed ext; |
1843 | }; | 1905 | }; |
1844 | } __attribute__ ((packed)); | 1906 | } __packed; |
1845 | 1907 | ||
1846 | enum ieee80211_timeout_interval_type { | 1908 | enum ieee80211_timeout_interval_type { |
1847 | WLAN_TIMEOUT_REASSOC_DEADLINE = 1 /* 802.11r */, | 1909 | WLAN_TIMEOUT_REASSOC_DEADLINE = 1 /* 802.11r */, |
@@ -1884,7 +1946,10 @@ enum ieee80211_sa_query_action { | |||
1884 | /* AKM suite selectors */ | 1946 | /* AKM suite selectors */ |
1885 | #define WLAN_AKM_SUITE_8021X 0x000FAC01 | 1947 | #define WLAN_AKM_SUITE_8021X 0x000FAC01 |
1886 | #define WLAN_AKM_SUITE_PSK 0x000FAC02 | 1948 | #define WLAN_AKM_SUITE_PSK 0x000FAC02 |
1887 | #define WLAN_AKM_SUITE_SAE 0x000FAC08 | 1949 | #define WLAN_AKM_SUITE_8021X_SHA256 0x000FAC05 |
1950 | #define WLAN_AKM_SUITE_PSK_SHA256 0x000FAC06 | ||
1951 | #define WLAN_AKM_SUITE_TDLS 0x000FAC07 | ||
1952 | #define WLAN_AKM_SUITE_SAE 0x000FAC08 | ||
1888 | #define WLAN_AKM_SUITE_FT_OVER_SAE 0x000FAC09 | 1953 | #define WLAN_AKM_SUITE_FT_OVER_SAE 0x000FAC09 |
1889 | 1954 | ||
1890 | #define WLAN_MAX_KEY_LEN 32 | 1955 | #define WLAN_MAX_KEY_LEN 32 |
@@ -2089,7 +2154,7 @@ static inline unsigned long ieee80211_tu_to_usec(unsigned long tu) | |||
2089 | * @tim_len: length of the TIM IE | 2154 | * @tim_len: length of the TIM IE |
2090 | * @aid: the AID to look for | 2155 | * @aid: the AID to look for |
2091 | */ | 2156 | */ |
2092 | static inline bool ieee80211_check_tim(struct ieee80211_tim_ie *tim, | 2157 | static inline bool ieee80211_check_tim(const struct ieee80211_tim_ie *tim, |
2093 | u8 tim_len, u16 aid) | 2158 | u8 tim_len, u16 aid) |
2094 | { | 2159 | { |
2095 | u8 mask; | 2160 | u8 mask; |