xref: /wlan-driver/qcacld-3.0/core/sme/inc/sme_inside.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021, 2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name #if !defined(__SMEINSIDE_H)
21*5113495bSYour Name #define __SMEINSIDE_H
22*5113495bSYour Name 
23*5113495bSYour Name /**
24*5113495bSYour Name  * \file  sme_inside.h
25*5113495bSYour Name  *
26*5113495bSYour Name  * \brief prototype for SME structures and APIs used insside SME
27*5113495bSYour Name  */
28*5113495bSYour Name 
29*5113495bSYour Name /*--------------------------------------------------------------------------
30*5113495bSYour Name   Include Files
31*5113495bSYour Name   ------------------------------------------------------------------------*/
32*5113495bSYour Name #include "qdf_status.h"
33*5113495bSYour Name #include "qdf_lock.h"
34*5113495bSYour Name #include "qdf_trace.h"
35*5113495bSYour Name #include "qdf_mem.h"
36*5113495bSYour Name #include "qdf_types.h"
37*5113495bSYour Name #include "sir_api.h"
38*5113495bSYour Name #include "csr_internal.h"
39*5113495bSYour Name #include "sme_qos_api.h"
40*5113495bSYour Name #include "sme_qos_internal.h"
41*5113495bSYour Name 
42*5113495bSYour Name #include "sme_rrm_api.h"
43*5113495bSYour Name #include "wlan_serialization_legacy_api.h"
44*5113495bSYour Name ePhyChanBondState csr_convert_cb_ini_value_to_phy_cb_state(uint32_t cbIniValue);
45*5113495bSYour Name 
46*5113495bSYour Name /*--------------------------------------------------------------------------
47*5113495bSYour Name   Type declarations
48*5113495bSYour Name   ------------------------------------------------------------------------*/
49*5113495bSYour Name /*
50*5113495bSYour Name  * In case MAX num of STA are connected to SAP, switching off SAP causes
51*5113495bSYour Name  * two SME cmd to be enqueued for each STA. Keeping SME total cmds as following
52*5113495bSYour Name  * to make sure we have space for these cmds + some additional cmds.
53*5113495bSYour Name  */
54*5113495bSYour Name #define SME_TOTAL_COMMAND                (HAL_NUM_STA * 3)
55*5113495bSYour Name 
56*5113495bSYour Name typedef struct sGenericQosCmd {
57*5113495bSYour Name 	struct sme_qos_wmmtspecinfo tspecInfo;
58*5113495bSYour Name 	enum qca_wlan_ac_type ac;
59*5113495bSYour Name 	uint8_t tspec_mask;
60*5113495bSYour Name } tGenericQosCmd;
61*5113495bSYour Name 
62*5113495bSYour Name /**
63*5113495bSYour Name  * struct s_nss_update_cmd - Format of nss update request
64*5113495bSYour Name  * @new_nss: new nss value
65*5113495bSYour Name  * @ch_width: new channel width - optional
66*5113495bSYour Name  * @session_id: Session ID
67*5113495bSYour Name  * @set_hw_mode_cb: HDD nss update callback
68*5113495bSYour Name  * @context: Adapter context
69*5113495bSYour Name  * @next_action: Action to be taken after nss update
70*5113495bSYour Name  * @reason: reason for nss update
71*5113495bSYour Name  * @original_vdev_id: original request hwmode change vdev id
72*5113495bSYour Name  * @request_id: request id for connection manager
73*5113495bSYour Name  */
74*5113495bSYour Name struct s_nss_update_cmd {
75*5113495bSYour Name 	uint32_t new_nss;
76*5113495bSYour Name 	uint32_t ch_width;
77*5113495bSYour Name 	uint32_t session_id;
78*5113495bSYour Name 	void *nss_update_cb;
79*5113495bSYour Name 	void *context;
80*5113495bSYour Name 	uint8_t next_action;
81*5113495bSYour Name 	enum policy_mgr_conn_update_reason reason;
82*5113495bSYour Name 	uint32_t original_vdev_id;
83*5113495bSYour Name 	uint32_t request_id;
84*5113495bSYour Name };
85*5113495bSYour Name 
86*5113495bSYour Name /**
87*5113495bSYour Name  * struct sir_sap_ch_width_update_cmd - Format of ch_width update request
88*5113495bSYour Name  * @ch_width: new channel width
89*5113495bSYour Name  * @vdev_id: vdev ID
90*5113495bSYour Name  * @reason: reason for ch_width update
91*5113495bSYour Name  * @conc_vdev_id: Concurrent connection vdev_id that is causing ch_width update
92*5113495bSYour Name  * @request_id: request id for connection manager
93*5113495bSYour Name  */
94*5113495bSYour Name struct sir_sap_ch_width_update_cmd {
95*5113495bSYour Name 	uint32_t ch_width;
96*5113495bSYour Name 	uint32_t vdev_id;
97*5113495bSYour Name 	enum policy_mgr_conn_update_reason reason;
98*5113495bSYour Name 	uint32_t conc_vdev_id;
99*5113495bSYour Name 	uint32_t request_id;
100*5113495bSYour Name };
101*5113495bSYour Name 
102*5113495bSYour Name typedef struct tagSmeCmd {
103*5113495bSYour Name 	tListElem Link;
104*5113495bSYour Name 	eSmeCommandType command;
105*5113495bSYour Name 	uint32_t cmd_id;
106*5113495bSYour Name 	uint32_t vdev_id;
107*5113495bSYour Name 	union {
108*5113495bSYour Name 		struct roam_cmd roamCmd;
109*5113495bSYour Name 		struct wmstatus_changecmd wmStatusChangeCmd;
110*5113495bSYour Name 		tGenericQosCmd qosCmd;
111*5113495bSYour Name 		struct policy_mgr_hw_mode set_hw_mode_cmd;
112*5113495bSYour Name 		struct s_nss_update_cmd nss_update_cmd;
113*5113495bSYour Name 		struct policy_mgr_dual_mac_config set_dual_mac_cmd;
114*5113495bSYour Name 		struct sir_antenna_mode_param set_antenna_mode_cmd;
115*5113495bSYour Name 		struct sir_sap_ch_width_update_cmd bw_update_cmd;
116*5113495bSYour Name 	} u;
117*5113495bSYour Name } tSmeCmd;
118*5113495bSYour Name 
119*5113495bSYour Name /*--------------------------------------------------------------------------
120*5113495bSYour Name   Internal to SME
121*5113495bSYour Name   ------------------------------------------------------------------------*/
122*5113495bSYour Name /**
123*5113495bSYour Name  * csr_get_cmd_type() - to convert sme command type to serialization cmd type
124*5113495bSYour Name  * @sme_cmd: sme command pointer
125*5113495bSYour Name  *
126*5113495bSYour Name  * This API will convert SME command type to serialization command type which
127*5113495bSYour Name  * new serialization module understands
128*5113495bSYour Name  *
129*5113495bSYour Name  * Return: serialization cmd type based on sme command type
130*5113495bSYour Name  */
131*5113495bSYour Name enum wlan_serialization_cmd_type csr_get_cmd_type(tSmeCmd *sme_cmd);
132*5113495bSYour Name /**
133*5113495bSYour Name  * csr_set_serialization_params_to_cmd() - take sme params and create new
134*5113495bSYour Name  *						serialization command
135*5113495bSYour Name  * @mac_ctx: pointer to mac context
136*5113495bSYour Name  * @sme_cmd: sme command pointer
137*5113495bSYour Name  * @cmd: serialization command pointer
138*5113495bSYour Name  * @high_priority: if command is high priority
139*5113495bSYour Name  *
140*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS or QDF_STATUS_E_FAILURE
141*5113495bSYour Name  */
142*5113495bSYour Name QDF_STATUS csr_set_serialization_params_to_cmd(struct mac_context *mac_ctx,
143*5113495bSYour Name 		tSmeCmd *sme_cmd, struct wlan_serialization_command *cmd,
144*5113495bSYour Name 		uint8_t high_priority);
145*5113495bSYour Name tSmeCmd *sme_get_command_buffer(struct mac_context *mac);
146*5113495bSYour Name void sme_release_command(struct mac_context *mac, tSmeCmd *pCmd);
147*5113495bSYour Name bool qos_process_command(struct mac_context *mac, tSmeCmd *pCommand);
148*5113495bSYour Name void qos_release_command(struct mac_context *mac, tSmeCmd *pCommand);
149*5113495bSYour Name QDF_STATUS csr_roam_process_command(struct mac_context *mac, tSmeCmd *pCommand);
150*5113495bSYour Name 
151*5113495bSYour Name /**
152*5113495bSYour Name  * csr_roam_wm_status_change_complete() - Remove WM status change command
153*5113495bSYour Name  *                                        from SME active command list
154*5113495bSYour Name  * @mac_ctx: global mac context
155*5113495bSYour Name  * @session_id: session id
156*5113495bSYour Name  *
157*5113495bSYour Name  * This API removes WM status change command from SME active command list
158*5113495bSYour Name  * if present.
159*5113495bSYour Name  *
160*5113495bSYour Name  * Return: void
161*5113495bSYour Name  */
162*5113495bSYour Name void csr_roam_wm_status_change_complete(struct mac_context *mac_ctx,
163*5113495bSYour Name 					uint8_t session_id);
164*5113495bSYour Name void csr_roam_process_wm_status_change_command(struct mac_context *mac,
165*5113495bSYour Name 		tSmeCmd *pCommand);
166*5113495bSYour Name 
167*5113495bSYour Name void csr_reinit_roam_cmd(struct mac_context *mac, tSmeCmd *pCommand);
168*5113495bSYour Name void csr_reinit_wm_status_change_cmd(struct mac_context *mac,
169*5113495bSYour Name 				     tSmeCmd *pCommand);
170*5113495bSYour Name 
171*5113495bSYour Name QDF_STATUS sme_acquire_global_lock(struct sme_context *sme);
172*5113495bSYour Name QDF_STATUS sme_release_global_lock(struct sme_context *sme);
173*5113495bSYour Name 
174*5113495bSYour Name ePhyChanBondState csr_convert_cb_ini_value_to_phy_cb_state(uint32_t cbIniValue);
175*5113495bSYour Name void csr_process_set_dual_mac_config(struct mac_context *mac, tSmeCmd *command);
176*5113495bSYour Name void csr_process_set_antenna_mode(struct mac_context *mac, tSmeCmd *command);
177*5113495bSYour Name void csr_process_set_hw_mode(struct mac_context *mac, tSmeCmd *command);
178*5113495bSYour Name void csr_process_nss_update_req(struct mac_context *mac, tSmeCmd *command);
179*5113495bSYour Name void csr_process_sap_ch_width_update(struct mac_context *mac, tSmeCmd *command);
180*5113495bSYour Name #endif /* #if !defined( __SMEINSIDE_H ) */
181