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