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