xref: /linux/drivers/net/wireless/nxp/nxpwifi/11ax.h (revision 91ec2035134982b98fab0609a9fd8480e8217dc1)
1*73b01e57SJeff Chen /* SPDX-License-Identifier: GPL-2.0-only */
2*73b01e57SJeff Chen /*
3*73b01e57SJeff Chen  * nxpwifi: 802.11ax support
4*73b01e57SJeff Chen  *
5*73b01e57SJeff Chen  * Copyright 2011-2024 NXP
6*73b01e57SJeff Chen  */
7*73b01e57SJeff Chen 
8*73b01e57SJeff Chen #ifndef _NXPWIFI_11AX_H_
9*73b01e57SJeff Chen #define _NXPWIFI_11AX_H_
10*73b01e57SJeff Chen 
11*73b01e57SJeff Chen /* device support 2.4G 40MHZ */
12*73b01e57SJeff Chen #define AX_2G_40MHZ_SUPPORT BIT(1)
13*73b01e57SJeff Chen /* device support 2.4G 242 tone RUs */
14*73b01e57SJeff Chen #define AX_2G_20MHZ_SUPPORT BIT(5)
15*73b01e57SJeff Chen 
16*73b01e57SJeff Chen /* Get HE MCS map code for n spatial streams (0..3). */
17*73b01e57SJeff Chen static inline u16
nxpwifi_get_he_nss_mcs(__le16 mcs_map_set,int nss)18*73b01e57SJeff Chen nxpwifi_get_he_nss_mcs(__le16 mcs_map_set, int nss) {
19*73b01e57SJeff Chen 	return ((le16_to_cpu(mcs_map_set) >> (2 * (nss - 1))) & 0x3);
20*73b01e57SJeff Chen }
21*73b01e57SJeff Chen 
22*73b01e57SJeff Chen static inline void
nxpwifi_set_he_nss_mcs(__le16 * mcs_map_set,int nss,int value)23*73b01e57SJeff Chen nxpwifi_set_he_nss_mcs(__le16 *mcs_map_set, int nss, int value) {
24*73b01e57SJeff Chen 	u16 temp;
25*73b01e57SJeff Chen 
26*73b01e57SJeff Chen 	temp = le16_to_cpu(*mcs_map_set);
27*73b01e57SJeff Chen 	temp |= ((value & 0x3) << (2 * (nss - 1)));
28*73b01e57SJeff Chen 	*mcs_map_set = cpu_to_le16(temp);
29*73b01e57SJeff Chen }
30*73b01e57SJeff Chen 
31*73b01e57SJeff Chen bool nxpwifi_is_11ax_twt_supported(struct nxpwifi_private *priv,
32*73b01e57SJeff Chen 				   struct  nxpwifi_bssdescriptor *bss_desc);
33*73b01e57SJeff Chen 
34*73b01e57SJeff Chen void nxpwifi_update_11ax_cap(struct nxpwifi_adapter *adapter,
35*73b01e57SJeff Chen 			     struct hw_spec_extension *hw_he_cap);
36*73b01e57SJeff Chen 
37*73b01e57SJeff Chen bool nxpwifi_11ax_bandconfig_allowed(struct nxpwifi_private *priv,
38*73b01e57SJeff Chen 				     struct nxpwifi_bssdescriptor *bss_desc);
39*73b01e57SJeff Chen 
40*73b01e57SJeff Chen int nxpwifi_cmd_append_11ax_tlv(struct nxpwifi_private *priv,
41*73b01e57SJeff Chen 				struct nxpwifi_bssdescriptor *bss_desc,
42*73b01e57SJeff Chen 				u8 **buffer);
43*73b01e57SJeff Chen 
44*73b01e57SJeff Chen int nxpwifi_fill_he_cap_tlv(struct nxpwifi_private *priv,
45*73b01e57SJeff Chen 			    struct nxpwifi_ie_types_he_cap *he_cap,
46*73b01e57SJeff Chen 			    u16 bands);
47*73b01e57SJeff Chen int nxpwifi_cmd_11ax_cfg(struct nxpwifi_private *priv,
48*73b01e57SJeff Chen 			 struct host_cmd_ds_command *cmd, u16 cmd_action,
49*73b01e57SJeff Chen 			 struct nxpwifi_11ax_he_cfg *ax_cfg);
50*73b01e57SJeff Chen 
51*73b01e57SJeff Chen int nxpwifi_ret_11ax_cfg(struct nxpwifi_private *priv,
52*73b01e57SJeff Chen 			 struct host_cmd_ds_command *resp,
53*73b01e57SJeff Chen 			 struct nxpwifi_11ax_he_cfg *ax_cfg);
54*73b01e57SJeff Chen 
55*73b01e57SJeff Chen int nxpwifi_cmd_11ax_cmd(struct nxpwifi_private *priv,
56*73b01e57SJeff Chen 			 struct host_cmd_ds_command *cmd, u16 cmd_action,
57*73b01e57SJeff Chen 			 struct nxpwifi_11ax_cmd_cfg *ax_cmd);
58*73b01e57SJeff Chen 
59*73b01e57SJeff Chen int nxpwifi_ret_11ax_cmd(struct nxpwifi_private *priv,
60*73b01e57SJeff Chen 			 struct host_cmd_ds_command *resp,
61*73b01e57SJeff Chen 			 struct nxpwifi_11ax_cmd_cfg *ax_cmd);
62*73b01e57SJeff Chen 
63*73b01e57SJeff Chen int nxpwifi_cmd_twt_cfg(struct nxpwifi_private *priv,
64*73b01e57SJeff Chen 			struct host_cmd_ds_command *cmd, u16 cmd_action,
65*73b01e57SJeff Chen 			struct nxpwifi_twt_cfg *twt_cfg);
66*73b01e57SJeff Chen 
67*73b01e57SJeff Chen int nxpwifi_ret_twt_cfg(struct nxpwifi_private *priv,
68*73b01e57SJeff Chen 			struct host_cmd_ds_command *resp,
69*73b01e57SJeff Chen 			struct nxpwifi_twt_cfg *twt_cfg);
70*73b01e57SJeff Chen 
71*73b01e57SJeff Chen u8 nxpwifi_is_sta_11ax_twt_req_supported(struct nxpwifi_private *priv);
72*73b01e57SJeff Chen 
73*73b01e57SJeff Chen #endif /* _NXPWIFI_11AX_H_ */
74