1*5113495bSYour Name /* 2*5113495bSYour Name * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. 3*5113495bSYour Name * 4*5113495bSYour Name * Permission to use, copy, modify, and/or distribute this software for any 5*5113495bSYour Name * purpose with or without fee is hereby granted, provided that the above 6*5113495bSYour Name * copyright notice and this permission notice appear in all copies. 7*5113495bSYour Name * 8*5113495bSYour Name * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9*5113495bSYour Name * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10*5113495bSYour Name * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11*5113495bSYour Name * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12*5113495bSYour Name * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13*5113495bSYour Name * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14*5113495bSYour Name * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15*5113495bSYour Name */ 16*5113495bSYour Name 17*5113495bSYour Name /** 18*5113495bSYour Name * DOC: wlan_qmi_public_struct.h 19*5113495bSYour Name * 20*5113495bSYour Name * Contains QMI public data structure definitions. 21*5113495bSYour Name */ 22*5113495bSYour Name 23*5113495bSYour Name #ifndef _WLAN_QMI_PUBLIC_STRUCT_H_ 24*5113495bSYour Name #define _WLAN_QMI_PUBLIC_STRUCT_H_ 25*5113495bSYour Name 26*5113495bSYour Name #include "qdf_status.h" 27*5113495bSYour Name #include <qdf_types.h> 28*5113495bSYour Name 29*5113495bSYour Name #ifdef QMI_WFDS 30*5113495bSYour Name #define QMI_WFDS_CE_MAX_SRNG 3 31*5113495bSYour Name #define QMI_WFDS_MEM_ARENA_MAX 8 32*5113495bSYour Name #define QMI_WFDS_PAGE_INFO_ARRAY_MAX_SIZE 255 33*5113495bSYour Name 34*5113495bSYour Name /** 35*5113495bSYour Name * enum wlan_qmi_wfds_srng_dir - SRNG direction 36*5113495bSYour Name * @QMI_WFDS_SRNG_SOURCE_RING: SRNG source ring 37*5113495bSYour Name * @QMI_WFDS_SRNG_DESTINATION_RING: SRNG destination ring 38*5113495bSYour Name */ 39*5113495bSYour Name enum wlan_qmi_wfds_srng_dir { 40*5113495bSYour Name QMI_WFDS_SRNG_SOURCE_RING = 0, 41*5113495bSYour Name QMI_WFDS_SRNG_DESTINATION_RING = 1, 42*5113495bSYour Name }; 43*5113495bSYour Name 44*5113495bSYour Name /** 45*5113495bSYour Name * struct wlan_qmi_wfds_srng_info - SRNG information 46*5113495bSYour Name * @ring_id: SRNG ring id 47*5113495bSYour Name * @dir: SRNG direction 48*5113495bSYour Name * @num_entries: number of entries in SRNG 49*5113495bSYour Name * @entry_size: size of SRNG descriptor 50*5113495bSYour Name * @ring_base_paddr: ring base physical address of SRNG 51*5113495bSYour Name * @hp_paddr: HP physical address of SRNG 52*5113495bSYour Name * @tp_paddr: TP physical address of SRNG 53*5113495bSYour Name */ 54*5113495bSYour Name struct wlan_qmi_wfds_srng_info { 55*5113495bSYour Name uint8_t ring_id; 56*5113495bSYour Name enum wlan_qmi_wfds_srng_dir dir; 57*5113495bSYour Name uint32_t num_entries; 58*5113495bSYour Name uint32_t entry_size; 59*5113495bSYour Name uint64_t ring_base_paddr; 60*5113495bSYour Name uint64_t hp_paddr; 61*5113495bSYour Name uint64_t tp_paddr; 62*5113495bSYour Name }; 63*5113495bSYour Name 64*5113495bSYour Name /** 65*5113495bSYour Name * enum wlan_qmi_wfds_pipe_dir - pipe direction 66*5113495bSYour Name * @QMI_WFDS_PIPEDIR_NONE: none pipe direction 67*5113495bSYour Name * @QMI_WFDS_PIPEDIR_IN: target to host pipe direction 68*5113495bSYour Name * @QMI_WFDS_PIPEDIR_OUT: host to target pipe direction 69*5113495bSYour Name */ 70*5113495bSYour Name enum wlan_qmi_wfds_pipe_dir { 71*5113495bSYour Name QMI_WFDS_PIPEDIR_NONE = 0, 72*5113495bSYour Name QMI_WFDS_PIPEDIR_IN = 1, 73*5113495bSYour Name QMI_WFDS_PIPEDIR_OUT = 2, 74*5113495bSYour Name }; 75*5113495bSYour Name 76*5113495bSYour Name /** 77*5113495bSYour Name * struct wlan_qmi_wfds_ce_info - CE information 78*5113495bSYour Name * @ce_id: CE id 79*5113495bSYour Name * @ce_dir: CE direction 80*5113495bSYour Name * @srng_info: SRNG information 81*5113495bSYour Name */ 82*5113495bSYour Name struct wlan_qmi_wfds_ce_info { 83*5113495bSYour Name uint8_t ce_id; 84*5113495bSYour Name enum wlan_qmi_wfds_pipe_dir ce_dir; 85*5113495bSYour Name struct wlan_qmi_wfds_srng_info srng_info; 86*5113495bSYour Name }; 87*5113495bSYour Name 88*5113495bSYour Name /** 89*5113495bSYour Name * struct wlan_qmi_wfds_config_req_msg - WFDS config request message 90*5113495bSYour Name * @ce_info_len: size of ce_info with valid entries 91*5113495bSYour Name * @ce_info: CE information array 92*5113495bSYour Name * @rx_refill_ring: refill SRNG information 93*5113495bSYour Name * @shadow_rdptr_mem_paddr: shadow read memory physical address 94*5113495bSYour Name * @shadow_rdptr_mem_size: shadow read memory size 95*5113495bSYour Name * @shadow_wrptr_mem_paddr: shadow write memory physical address 96*5113495bSYour Name * @shadow_wrptr_mem_size: shadow write memory size 97*5113495bSYour Name * @rx_pkt_tlv_len: rx packet tlvs length 98*5113495bSYour Name * @rx_rbm: return buffer manager for rx buffers 99*5113495bSYour Name * @pcie_bar_pa: PCIe BAR physical address 100*5113495bSYour Name * @pci_slot: PCIe slot 101*5113495bSYour Name * @lpass_ep_id: LPASS data message service endpoint id 102*5113495bSYour Name */ 103*5113495bSYour Name struct wlan_qmi_wfds_config_req_msg { 104*5113495bSYour Name uint32_t ce_info_len; 105*5113495bSYour Name struct wlan_qmi_wfds_ce_info ce_info[QMI_WFDS_CE_MAX_SRNG]; 106*5113495bSYour Name struct wlan_qmi_wfds_srng_info rx_refill_ring; 107*5113495bSYour Name uint64_t shadow_rdptr_mem_paddr; 108*5113495bSYour Name uint64_t shadow_rdptr_mem_size; 109*5113495bSYour Name uint64_t shadow_wrptr_mem_paddr; 110*5113495bSYour Name uint64_t shadow_wrptr_mem_size; 111*5113495bSYour Name uint32_t rx_pkt_tlv_len; 112*5113495bSYour Name uint32_t rx_rbm; 113*5113495bSYour Name uint64_t pcie_bar_pa; 114*5113495bSYour Name uint32_t pci_slot; 115*5113495bSYour Name uint32_t lpass_ep_id; 116*5113495bSYour Name }; 117*5113495bSYour Name 118*5113495bSYour Name /** 119*5113495bSYour Name * enum wlan_qmi_wfds_mem_arenas - Memory arenas 120*5113495bSYour Name * @QMI_WFDS_MEM_ARENA_TX_BUFFERS: tx buffers memory arena 121*5113495bSYour Name * @QMI_WFDS_MEM_ARENA_CE_TX_MSG_BUFFERS: ce tx message buffers memory arena 122*5113495bSYour Name * @QMI_WFDS_MEM_ARENA_CE_RX_MSG_BUFFERS: ce rx message buffers memory arena 123*5113495bSYour Name */ 124*5113495bSYour Name enum wlan_qmi_wfds_mem_arenas { 125*5113495bSYour Name QMI_WFDS_MEM_ARENA_TX_BUFFERS = 0, 126*5113495bSYour Name QMI_WFDS_MEM_ARENA_CE_TX_MSG_BUFFERS = 1, 127*5113495bSYour Name QMI_WFDS_MEM_ARENA_CE_RX_MSG_BUFFERS = 2, 128*5113495bSYour Name }; 129*5113495bSYour Name 130*5113495bSYour Name /** 131*5113495bSYour Name * struct wlan_qmi_wfds_mem_arena_info - Memory arena information 132*5113495bSYour Name * @entry_size: entry size 133*5113495bSYour Name * @num_entries: total number of entries required 134*5113495bSYour Name */ 135*5113495bSYour Name struct wlan_qmi_wfds_mem_arena_info { 136*5113495bSYour Name uint16_t entry_size; 137*5113495bSYour Name uint16_t num_entries; 138*5113495bSYour Name }; 139*5113495bSYour Name 140*5113495bSYour Name /** 141*5113495bSYour Name * struct wlan_qmi_wfds_mem_ind_msg - Memory indication message 142*5113495bSYour Name * @mem_arena_info_len: number of valid entries in mem_arena_info array 143*5113495bSYour Name * @mem_arena_info: memory arena information array 144*5113495bSYour Name */ 145*5113495bSYour Name struct wlan_qmi_wfds_mem_ind_msg { 146*5113495bSYour Name uint32_t mem_arena_info_len; 147*5113495bSYour Name struct wlan_qmi_wfds_mem_arena_info mem_arena_info[QMI_WFDS_MEM_ARENA_MAX]; 148*5113495bSYour Name }; 149*5113495bSYour Name 150*5113495bSYour Name /** 151*5113495bSYour Name * struct wlan_qmi_wfds_mem_arena_page_info - Memory arena 152*5113495bSYour Name * page information 153*5113495bSYour Name * @num_entries_per_page: number of entries per page 154*5113495bSYour Name * @page_dma_addr_len: number of valid entries in page_dma_addr array 155*5113495bSYour Name * @page_dma_addr: page dma address array 156*5113495bSYour Name */ 157*5113495bSYour Name struct wlan_qmi_wfds_mem_arena_page_info { 158*5113495bSYour Name uint16_t num_entries_per_page; 159*5113495bSYour Name uint32_t page_dma_addr_len; 160*5113495bSYour Name uint64_t page_dma_addr[QMI_WFDS_PAGE_INFO_ARRAY_MAX_SIZE]; 161*5113495bSYour Name }; 162*5113495bSYour Name 163*5113495bSYour Name /** 164*5113495bSYour Name * struct wlan_qmi_wfds_mem_req_msg - Memory request message 165*5113495bSYour Name * page information 166*5113495bSYour Name * @mem_arena_page_info_len: number of valid entries in 167*5113495bSYour Name * mem_arena_page_info array 168*5113495bSYour Name * @mem_arena_page_info: memory arena information 169*5113495bSYour Name */ 170*5113495bSYour Name struct wlan_qmi_wfds_mem_req_msg { 171*5113495bSYour Name uint32_t mem_arena_page_info_len; 172*5113495bSYour Name struct wlan_qmi_wfds_mem_arena_page_info mem_arena_page_info[QMI_WFDS_MEM_ARENA_MAX]; 173*5113495bSYour Name }; 174*5113495bSYour Name 175*5113495bSYour Name /** 176*5113495bSYour Name * struct wlan_qmi_wfds_ipcc_info - IPCC information 177*5113495bSYour Name * @ce_id: CE id 178*5113495bSYour Name * @ipcc_trig_addr: IPCC trigger address 179*5113495bSYour Name * @ipcc_trig_data: IPCC trigger data 180*5113495bSYour Name */ 181*5113495bSYour Name struct wlan_qmi_wfds_ipcc_info { 182*5113495bSYour Name uint8_t ce_id; 183*5113495bSYour Name uint64_t ipcc_trig_addr; 184*5113495bSYour Name uint32_t ipcc_trig_data; 185*5113495bSYour Name }; 186*5113495bSYour Name 187*5113495bSYour Name /** 188*5113495bSYour Name * struct wlan_qmi_wfds_ipcc_map_n_cfg_ind_msg - IPCC map and configure 189*5113495bSYour Name * indication message 190*5113495bSYour Name * @ipcc_ce_info_len: number of valid entries in ipcc_ce_info array 191*5113495bSYour Name * @ipcc_ce_info: IPCC information for CE 192*5113495bSYour Name */ 193*5113495bSYour Name struct wlan_qmi_wfds_ipcc_map_n_cfg_ind_msg { 194*5113495bSYour Name uint32_t ipcc_ce_info_len; 195*5113495bSYour Name struct wlan_qmi_wfds_ipcc_info ipcc_ce_info[QMI_WFDS_CE_MAX_SRNG]; 196*5113495bSYour Name }; 197*5113495bSYour Name 198*5113495bSYour Name /** 199*5113495bSYour Name * enum wlan_qmi_wfds_status - status 200*5113495bSYour Name * @QMI_WFDS_STATUS_SUCCESS: success status 201*5113495bSYour Name * @QMI_WFDS_STATUS_FAILURE: failure status 202*5113495bSYour Name */ 203*5113495bSYour Name enum wlan_qmi_wfds_status { 204*5113495bSYour Name QMI_WFDS_STATUS_SUCCESS = 0, 205*5113495bSYour Name QMI_WFDS_STATUS_FAILURE = 1, 206*5113495bSYour Name }; 207*5113495bSYour Name 208*5113495bSYour Name /** 209*5113495bSYour Name * struct wlan_qmi_wfds_ipcc_map_n_cfg_req_msg - IPCC map and configure 210*5113495bSYour Name * request message 211*5113495bSYour Name * @status: IPCC configuration status 212*5113495bSYour Name */ 213*5113495bSYour Name struct wlan_qmi_wfds_ipcc_map_n_cfg_req_msg { 214*5113495bSYour Name enum wlan_qmi_wfds_status status; 215*5113495bSYour Name }; 216*5113495bSYour Name #endif 217*5113495bSYour Name 218*5113495bSYour Name /** 219*5113495bSYour Name * struct wlan_qmi_psoc_callbacks - struct containing callbacks 220*5113495bSYour Name * to osif QMI APIs 221*5113495bSYour Name * @qmi_wfds_init: Callback to initialize WFDS QMI handle 222*5113495bSYour Name * @qmi_wfds_deinit: Callback to deinitialize WFDS QMI handle 223*5113495bSYour Name * @qmi_wfds_send_config_msg: Callback to send WFDS configuration message 224*5113495bSYour Name * @qmi_wfds_send_req_mem_msg: Callback to send WFDS request memory message 225*5113495bSYour Name * @qmi_wfds_send_ipcc_map_n_cfg_msg: Callback to send WFDS IPCC map and 226*5113495bSYour Name * configure message 227*5113495bSYour Name * @qmi_wfds_send_misc_req_msg: Callback to send WFDS misc request message 228*5113495bSYour Name */ 229*5113495bSYour Name struct wlan_qmi_psoc_callbacks { 230*5113495bSYour Name #ifdef QMI_WFDS 231*5113495bSYour Name QDF_STATUS (*qmi_wfds_init)(void); 232*5113495bSYour Name void (*qmi_wfds_deinit)(void); 233*5113495bSYour Name QDF_STATUS (*qmi_wfds_send_config_msg)( 234*5113495bSYour Name struct wlan_qmi_wfds_config_req_msg *src_info); 235*5113495bSYour Name QDF_STATUS (*qmi_wfds_send_req_mem_msg)( 236*5113495bSYour Name struct wlan_qmi_wfds_mem_req_msg *src_info); 237*5113495bSYour Name QDF_STATUS (*qmi_wfds_send_ipcc_map_n_cfg_msg)( 238*5113495bSYour Name struct wlan_qmi_wfds_ipcc_map_n_cfg_req_msg *src_info); 239*5113495bSYour Name QDF_STATUS (*qmi_wfds_send_misc_req_msg)(bool is_ssr); 240*5113495bSYour Name #endif 241*5113495bSYour Name }; 242*5113495bSYour Name #endif 243