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