1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved. 3*5113495bSYour Name * Copyright (c) 2022-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 #ifndef _TARGET_IF_CFR_H_ 21*5113495bSYour Name #define _TARGET_IF_CFR_H_ 22*5113495bSYour Name 23*5113495bSYour Name #include <wlan_objmgr_cmn.h> 24*5113495bSYour Name #include <wlan_objmgr_psoc_obj.h> 25*5113495bSYour Name #include <wlan_objmgr_pdev_obj.h> 26*5113495bSYour Name #include <wlan_objmgr_vdev_obj.h> 27*5113495bSYour Name #include <wlan_objmgr_peer_obj.h> 28*5113495bSYour Name 29*5113495bSYour Name #include "wmi_unified_cfr_api.h" 30*5113495bSYour Name #include "wmi_unified_param.h" 31*5113495bSYour Name #include "wmi_unified_cfr_param.h" 32*5113495bSYour Name #define PEER_CFR_CAPTURE_ENABLE 1 33*5113495bSYour Name #define PEER_CFR_CAPTURE_DISABLE 0 34*5113495bSYour Name 35*5113495bSYour Name #define PEER_CFR_CAPTURE_EVT_STATUS_MASK 0x80000000 36*5113495bSYour Name #define PEER_CFR_CAPTURE_EVT_PS_STATUS_MASK 0x40000000 37*5113495bSYour Name #define CFR_TX_EVT_STATUS_MASK 0x00000003 38*5113495bSYour Name 39*5113495bSYour Name /* Status codes used by correlate and relay function */ 40*5113495bSYour Name #define STATUS_STREAM_AND_RELEASE 0 41*5113495bSYour Name #define STATUS_HOLD 1 42*5113495bSYour Name #define STATUS_ERROR -1 43*5113495bSYour Name 44*5113495bSYour Name /* Module IDs using corrlation function */ 45*5113495bSYour Name #define CORRELATE_DBR_MODULE_ID 0 46*5113495bSYour Name /* 47*5113495bSYour Name * HKV2 - Tx completion event for one-shot capture 48*5113495bSYour Name * Cypress - Tx completion event for one-shot capture (or) RXTLV event for RCC 49*5113495bSYour Name */ 50*5113495bSYour Name #define CORRELATE_TX_EV_MODULE_ID 1 51*5113495bSYour Name 52*5113495bSYour Name #define get_u16_lsb(value) (uint16_t)(value) 53*5113495bSYour Name #define get_u16_msb(value) (uint16_t)(((uint32_t)value) >> 16) 54*5113495bSYour Name #define get_gain_db(value) ((value) & 0xFF) 55*5113495bSYour Name #define get_gain_table_idx(value) (((value) >> 8) & 0x3) 56*5113495bSYour Name 57*5113495bSYour Name #define INVALID_PHASE_DELTA 0xFFFF 58*5113495bSYour Name 59*5113495bSYour Name /** 60*5113495bSYour Name * target_if_cfr_init_pdev() - Inits cfr pdev and registers necessary handlers. 61*5113495bSYour Name * @psoc: pointer to psoc object 62*5113495bSYour Name * @pdev: pointer to pdev object 63*5113495bSYour Name * 64*5113495bSYour Name * Return: Registration status for necessary handlers 65*5113495bSYour Name */ 66*5113495bSYour Name QDF_STATUS 67*5113495bSYour Name target_if_cfr_init_pdev(struct wlan_objmgr_psoc *psoc, 68*5113495bSYour Name struct wlan_objmgr_pdev *pdev); 69*5113495bSYour Name 70*5113495bSYour Name /** 71*5113495bSYour Name * target_if_cfr_deinit_pdev() - De-inits corresponding pdev and handlers. 72*5113495bSYour Name * @psoc: pointer to psoc object 73*5113495bSYour Name * @pdev: pointer to pdev object 74*5113495bSYour Name * 75*5113495bSYour Name * Return: De-registration status for necessary handlers 76*5113495bSYour Name */ 77*5113495bSYour Name QDF_STATUS 78*5113495bSYour Name target_if_cfr_deinit_pdev(struct wlan_objmgr_psoc *psoc, 79*5113495bSYour Name struct wlan_objmgr_pdev *pdev); 80*5113495bSYour Name 81*5113495bSYour Name /** 82*5113495bSYour Name * target_if_cfr_tx_ops_register() - Registers tx ops for cfr module 83*5113495bSYour Name * @tx_ops: pointer to tx_ops structure. 84*5113495bSYour Name */ 85*5113495bSYour Name void target_if_cfr_tx_ops_register(struct wlan_lmac_if_tx_ops *tx_ops); 86*5113495bSYour Name 87*5113495bSYour Name /** 88*5113495bSYour Name * target_if_cfr_enable_cfr_timer() - Enables cfr timer 89*5113495bSYour Name * @pdev: pointer to pdev object 90*5113495bSYour Name * @cfr_timer: Amount of time this timer has to run 91*5113495bSYour Name * 92*5113495bSYour Name * Return: status of timer 93*5113495bSYour Name */ 94*5113495bSYour Name int target_if_cfr_enable_cfr_timer(struct wlan_objmgr_pdev *pdev, 95*5113495bSYour Name uint32_t cfr_timer); 96*5113495bSYour Name 97*5113495bSYour Name /** 98*5113495bSYour Name * target_if_cfr_periodic_peer_cfr_enable() - Function to set params 99*5113495bSYour Name * for cfr config 100*5113495bSYour Name * @pdev: pointer to pdev object 101*5113495bSYour Name * @param_value: value of param being set 102*5113495bSYour Name * 103*5113495bSYour Name * Return: success/failure of setting param 104*5113495bSYour Name */ 105*5113495bSYour Name int target_if_cfr_periodic_peer_cfr_enable(struct wlan_objmgr_pdev *pdev, 106*5113495bSYour Name uint32_t param_value); 107*5113495bSYour Name 108*5113495bSYour Name /** 109*5113495bSYour Name * target_if_cfr_start_capture() - Function to start cfr capture for a peer 110*5113495bSYour Name * @pdev: pointer to pdev object 111*5113495bSYour Name * @peer: pointer to peer object 112*5113495bSYour Name * @cfr_params: capture parameters for this peer 113*5113495bSYour Name * 114*5113495bSYour Name * Return: success/failure status of start capture 115*5113495bSYour Name */ 116*5113495bSYour Name int target_if_cfr_start_capture(struct wlan_objmgr_pdev *pdev, 117*5113495bSYour Name struct wlan_objmgr_peer *peer, 118*5113495bSYour Name struct cfr_capture_params *cfr_params); 119*5113495bSYour Name 120*5113495bSYour Name /** 121*5113495bSYour Name * target_if_cfr_stop_capture() - Function to stop cfr capture for a peer 122*5113495bSYour Name * @pdev: pointer to pdev object 123*5113495bSYour Name * @peer: pointer to peer object 124*5113495bSYour Name * 125*5113495bSYour Name * Return: success/failure status of stop capture 126*5113495bSYour Name */ 127*5113495bSYour Name int target_if_cfr_stop_capture(struct wlan_objmgr_pdev *pdev, 128*5113495bSYour Name struct wlan_objmgr_peer *peer); 129*5113495bSYour Name 130*5113495bSYour Name /** 131*5113495bSYour Name * target_if_cfr_get_target_type() - Function to get target type 132*5113495bSYour Name * @psoc: pointer to psoc object 133*5113495bSYour Name * 134*5113495bSYour Name * Return: target type of target 135*5113495bSYour Name */ 136*5113495bSYour Name int target_if_cfr_get_target_type(struct wlan_objmgr_psoc *psoc); 137*5113495bSYour Name 138*5113495bSYour Name /** 139*5113495bSYour Name * target_if_cfr_set_cfr_support() - Function to set cfr support 140*5113495bSYour Name * @psoc: pointer to psoc object 141*5113495bSYour Name * @value: value to be set 142*5113495bSYour Name */ 143*5113495bSYour Name void target_if_cfr_set_cfr_support(struct wlan_objmgr_psoc *psoc, 144*5113495bSYour Name uint8_t value); 145*5113495bSYour Name 146*5113495bSYour Name /** 147*5113495bSYour Name * target_if_cfr_set_capture_count_support() - Function to set capture count 148*5113495bSYour Name * support. 149*5113495bSYour Name * @psoc: pointer to psoc object 150*5113495bSYour Name * @value: value to be set 151*5113495bSYour Name * 152*5113495bSYour Name * Return: success/failure 153*5113495bSYour Name */ 154*5113495bSYour Name QDF_STATUS 155*5113495bSYour Name target_if_cfr_set_capture_count_support(struct wlan_objmgr_psoc *psoc, 156*5113495bSYour Name uint8_t value); 157*5113495bSYour Name 158*5113495bSYour Name /** 159*5113495bSYour Name * target_if_cfr_set_mo_marking_support() - Function to set MO marking support 160*5113495bSYour Name * @psoc: pointer to psoc object 161*5113495bSYour Name * @value: value to be set 162*5113495bSYour Name * 163*5113495bSYour Name * Return: success/failure 164*5113495bSYour Name */ 165*5113495bSYour Name QDF_STATUS 166*5113495bSYour Name target_if_cfr_set_mo_marking_support(struct wlan_objmgr_psoc *psoc, 167*5113495bSYour Name uint8_t value); 168*5113495bSYour Name 169*5113495bSYour Name /** 170*5113495bSYour Name * target_if_cfr_set_aoa_for_rcc_support() - Function to set AoA for RCC 171*5113495bSYour Name * @psoc: pointer to psoc object 172*5113495bSYour Name * @value: value to be set 173*5113495bSYour Name * 174*5113495bSYour Name * Return: success/failure 175*5113495bSYour Name */ 176*5113495bSYour Name QDF_STATUS 177*5113495bSYour Name target_if_cfr_set_aoa_for_rcc_support(struct wlan_objmgr_psoc *psoc, 178*5113495bSYour Name uint8_t value); 179*5113495bSYour Name 180*5113495bSYour Name /** 181*5113495bSYour Name * target_if_cfr_info_send() - Function to send cfr info to upper layers 182*5113495bSYour Name * @pdev: pointer to pdev object 183*5113495bSYour Name * @head: pointer to cfr info head 184*5113495bSYour Name * @hlen: head len 185*5113495bSYour Name * @data: pointer to cfr info data 186*5113495bSYour Name * @dlen: data len 187*5113495bSYour Name * @tail: pointer to cfr info tail 188*5113495bSYour Name * @tlen: tail len 189*5113495bSYour Name */ 190*5113495bSYour Name void target_if_cfr_info_send(struct wlan_objmgr_pdev *pdev, void *head, 191*5113495bSYour Name size_t hlen, void *data, size_t dlen, void *tail, 192*5113495bSYour Name size_t tlen); 193*5113495bSYour Name 194*5113495bSYour Name /** 195*5113495bSYour Name * target_if_cfr_fill_header() - Function to fill cfr header cmn section 196*5113495bSYour Name * @hdr: pointer to the csi_cfr_header 197*5113495bSYour Name * @is_wifi_2_0: flag to indicate legacy and non legacy radio 198*5113495bSYour Name * @target_type: target type of the radio 199*5113495bSYour Name * @is_rcc: flag to denote fill header request from periodic cfr/rcc 200*5113495bSYour Name */ 201*5113495bSYour Name void target_if_cfr_fill_header(struct csi_cfr_header *hdr, 202*5113495bSYour Name bool is_wifi_2_0, 203*5113495bSYour Name uint32_t target_type, 204*5113495bSYour Name bool is_rcc); 205*5113495bSYour Name #endif 206