xref: /wlan-driver/qcacld-3.0/core/pld/inc/pld_common.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2024 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 __PLD_COMMON_H__
21*5113495bSYour Name #define __PLD_COMMON_H__
22*5113495bSYour Name 
23*5113495bSYour Name #include <linux/device.h>
24*5113495bSYour Name #include <linux/interrupt.h>
25*5113495bSYour Name #include <linux/pm.h>
26*5113495bSYour Name #include <osapi_linux.h>
27*5113495bSYour Name 
28*5113495bSYour Name #ifdef CONFIG_CNSS_OUT_OF_TREE
29*5113495bSYour Name #include "cnss2.h"
30*5113495bSYour Name #else
31*5113495bSYour Name #include <net/cnss2.h>
32*5113495bSYour Name #endif
33*5113495bSYour Name 
34*5113495bSYour Name #ifdef CNSS_UTILS
35*5113495bSYour Name #ifdef CONFIG_CNSS_OUT_OF_TREE
36*5113495bSYour Name #include "cnss_utils.h"
37*5113495bSYour Name #else
38*5113495bSYour Name #include <net/cnss_utils.h>
39*5113495bSYour Name #endif
40*5113495bSYour Name #endif
41*5113495bSYour Name 
42*5113495bSYour Name #define PLD_IMAGE_FILE               "athwlan.bin"
43*5113495bSYour Name #define PLD_UTF_FIRMWARE_FILE        "utf.bin"
44*5113495bSYour Name #define PLD_BOARD_DATA_FILE          "fakeboar.bin"
45*5113495bSYour Name #define PLD_OTP_FILE                 "otp.bin"
46*5113495bSYour Name #define PLD_SETUP_FILE               "athsetup.bin"
47*5113495bSYour Name #define PLD_EPPING_FILE              "epping.bin"
48*5113495bSYour Name #define PLD_EVICTED_FILE             ""
49*5113495bSYour Name #define PLD_MHI_STATE_L0	1
50*5113495bSYour Name 
51*5113495bSYour Name #define TOTAL_DUMP_SIZE         0x00200000
52*5113495bSYour Name 
53*5113495bSYour Name #ifdef CNSS_MEM_PRE_ALLOC
54*5113495bSYour Name #ifdef CONFIG_CNSS_OUT_OF_TREE
55*5113495bSYour Name #include "cnss_prealloc.h"
56*5113495bSYour Name #else
57*5113495bSYour Name #include <net/cnss_prealloc.h>
58*5113495bSYour Name #endif
59*5113495bSYour Name #endif
60*5113495bSYour Name 
61*5113495bSYour Name #define PLD_LIMIT_LOG_FOR_SEC 6
62*5113495bSYour Name /**
63*5113495bSYour Name  * __PLD_TRACE_RATE_LIMITED() - rate limited version of PLD_TRACE
64*5113495bSYour Name  * @params: parameters to pass through to PLD_TRACE
65*5113495bSYour Name  *
66*5113495bSYour Name  * This API prevents logging a message more than once in PLD_LIMIT_LOG_FOR_SEC
67*5113495bSYour Name  * seconds. This means any subsequent calls to this API from the same location
68*5113495bSYour Name  * within PLD_LIMIT_LOG_FOR_SEC seconds will be dropped.
69*5113495bSYour Name  *
70*5113495bSYour Name  * Return: None
71*5113495bSYour Name  */
72*5113495bSYour Name #define __PLD_TRACE_RATE_LIMITED(params...)\
73*5113495bSYour Name 	do {\
74*5113495bSYour Name 		static ulong __last_ticks;\
75*5113495bSYour Name 		ulong __ticks = jiffies;\
76*5113495bSYour Name 		if (time_after(__ticks,\
77*5113495bSYour Name 			       __last_ticks + (HZ * PLD_LIMIT_LOG_FOR_SEC))) {\
78*5113495bSYour Name 			pr_err(params);\
79*5113495bSYour Name 			__last_ticks = __ticks;\
80*5113495bSYour Name 		} \
81*5113495bSYour Name 	} while (0)
82*5113495bSYour Name 
83*5113495bSYour Name #define pld_err_rl(params...) __PLD_TRACE_RATE_LIMITED(params)
84*5113495bSYour Name 
85*5113495bSYour Name /**
86*5113495bSYour Name  * enum pld_bus_type - bus type
87*5113495bSYour Name  * @PLD_BUS_TYPE_NONE: invalid bus type, only return in error cases
88*5113495bSYour Name  * @PLD_BUS_TYPE_PCIE: PCIE bus
89*5113495bSYour Name  * @PLD_BUS_TYPE_SNOC: SNOC bus
90*5113495bSYour Name  * @PLD_BUS_TYPE_SDIO: SDIO bus
91*5113495bSYour Name  * @PLD_BUS_TYPE_USB : USB bus
92*5113495bSYour Name  * @PLD_BUS_TYPE_SNOC_FW_SIM : SNOC FW SIM bus
93*5113495bSYour Name  * @PLD_BUS_TYPE_PCIE_FW_SIM : PCIE FW SIM bus
94*5113495bSYour Name  * @PLD_BUS_TYPE_IPCI : IPCI bus
95*5113495bSYour Name  * @PLD_BUS_TYPE_IPCI_FW_SIM : IPCI FW SIM bus
96*5113495bSYour Name  */
97*5113495bSYour Name enum pld_bus_type {
98*5113495bSYour Name 	PLD_BUS_TYPE_NONE = -1,
99*5113495bSYour Name 	PLD_BUS_TYPE_PCIE = 0,
100*5113495bSYour Name 	PLD_BUS_TYPE_SNOC,
101*5113495bSYour Name 	PLD_BUS_TYPE_SDIO,
102*5113495bSYour Name 	PLD_BUS_TYPE_USB,
103*5113495bSYour Name 	PLD_BUS_TYPE_SNOC_FW_SIM,
104*5113495bSYour Name 	PLD_BUS_TYPE_PCIE_FW_SIM,
105*5113495bSYour Name 	PLD_BUS_TYPE_IPCI,
106*5113495bSYour Name 	PLD_BUS_TYPE_IPCI_FW_SIM,
107*5113495bSYour Name };
108*5113495bSYour Name 
109*5113495bSYour Name #define PLD_MAX_FIRMWARE_SIZE (1 * 1024 * 1024)
110*5113495bSYour Name 
111*5113495bSYour Name /**
112*5113495bSYour Name  * enum pld_bus_width_type - bus bandwidth
113*5113495bSYour Name  * @PLD_BUS_WIDTH_NONE: don't vote for bus bandwidth
114*5113495bSYour Name  * @PLD_BUS_WIDTH_IDLE: vote for idle bandwidth
115*5113495bSYour Name  * @PLD_BUS_WIDTH_LOW: vote for low bus bandwidth
116*5113495bSYour Name  * @PLD_BUS_WIDTH_MEDIUM: vote for medium bus bandwidth
117*5113495bSYour Name  * @PLD_BUS_WIDTH_HIGH: vote for high bus bandwidth
118*5113495bSYour Name  * @PLD_BUS_WIDTH_MID_HIGH: vote for mid high bus bandwidth
119*5113495bSYour Name  * @PLD_BUS_WIDTH_VERY_HIGH: vote for very high bus bandwidth
120*5113495bSYour Name  * @PLD_BUS_WIDTH_ULTRA_HIGH: vote for ultra high bus bandwidth
121*5113495bSYour Name  * @PLD_BUS_WIDTH_LOW_LATENCY: vote for low latency bus bandwidth
122*5113495bSYour Name  * @PLD_BUS_WIDTH_MAX:
123*5113495bSYour Name  */
124*5113495bSYour Name enum pld_bus_width_type {
125*5113495bSYour Name 	PLD_BUS_WIDTH_NONE,
126*5113495bSYour Name 	PLD_BUS_WIDTH_IDLE,
127*5113495bSYour Name 	PLD_BUS_WIDTH_LOW,
128*5113495bSYour Name 	PLD_BUS_WIDTH_MEDIUM,
129*5113495bSYour Name 	PLD_BUS_WIDTH_HIGH,
130*5113495bSYour Name 	PLD_BUS_WIDTH_VERY_HIGH,
131*5113495bSYour Name 	PLD_BUS_WIDTH_ULTRA_HIGH,
132*5113495bSYour Name 	PLD_BUS_WIDTH_MAX,
133*5113495bSYour Name 	PLD_BUS_WIDTH_LOW_LATENCY,
134*5113495bSYour Name 	PLD_BUS_WIDTH_MID_HIGH,
135*5113495bSYour Name };
136*5113495bSYour Name 
137*5113495bSYour Name #define PLD_MAX_FILE_NAME NAME_MAX
138*5113495bSYour Name 
139*5113495bSYour Name /**
140*5113495bSYour Name  * struct pld_fw_files - WLAN FW file names
141*5113495bSYour Name  * @image_file: WLAN FW image file
142*5113495bSYour Name  * @board_data: WLAN FW board data file
143*5113495bSYour Name  * @otp_data: WLAN FW OTP file
144*5113495bSYour Name  * @utf_file: WLAN FW UTF file
145*5113495bSYour Name  * @utf_board_data: WLAN FW UTF board data file
146*5113495bSYour Name  * @epping_file: WLAN FW EPPING mode file
147*5113495bSYour Name  * @evicted_data: WLAN FW evicted file
148*5113495bSYour Name  * @setup_file: WLAN FW setup file
149*5113495bSYour Name  * @ibss_image_file: WLAN FW IBSS mode file
150*5113495bSYour Name  *
151*5113495bSYour Name  * pld_fw_files is used to store WLAN FW file names
152*5113495bSYour Name  */
153*5113495bSYour Name struct pld_fw_files {
154*5113495bSYour Name 	char image_file[PLD_MAX_FILE_NAME];
155*5113495bSYour Name 	char board_data[PLD_MAX_FILE_NAME];
156*5113495bSYour Name 	char otp_data[PLD_MAX_FILE_NAME];
157*5113495bSYour Name 	char utf_file[PLD_MAX_FILE_NAME];
158*5113495bSYour Name 	char utf_board_data[PLD_MAX_FILE_NAME];
159*5113495bSYour Name 	char epping_file[PLD_MAX_FILE_NAME];
160*5113495bSYour Name 	char evicted_data[PLD_MAX_FILE_NAME];
161*5113495bSYour Name 	char setup_file[PLD_MAX_FILE_NAME];
162*5113495bSYour Name 	char ibss_image_file[PLD_MAX_FILE_NAME];
163*5113495bSYour Name };
164*5113495bSYour Name 
165*5113495bSYour Name /**
166*5113495bSYour Name  * enum pld_platform_cap_flag - platform capability flag
167*5113495bSYour Name  * @PLD_HAS_EXTERNAL_SWREG: has external regulator
168*5113495bSYour Name  * @PLD_HAS_UART_ACCESS: has UART access
169*5113495bSYour Name  * @PLD_HAS_DRV_SUPPORT: has PCIe DRV support
170*5113495bSYour Name  */
171*5113495bSYour Name enum pld_platform_cap_flag {
172*5113495bSYour Name 	PLD_HAS_EXTERNAL_SWREG = 0x01,
173*5113495bSYour Name 	PLD_HAS_UART_ACCESS = 0x02,
174*5113495bSYour Name 	PLD_HAS_DRV_SUPPORT = 0x04,
175*5113495bSYour Name };
176*5113495bSYour Name 
177*5113495bSYour Name /**
178*5113495bSYour Name  * enum pld_wfc_mode - WFC Mode
179*5113495bSYour Name  * @PLD_WFC_MODE_OFF: WFC Inactive
180*5113495bSYour Name  * @PLD_WFC_MODE_ON: WFC Active
181*5113495bSYour Name  */
182*5113495bSYour Name enum pld_wfc_mode {
183*5113495bSYour Name 	PLD_WFC_MODE_OFF,
184*5113495bSYour Name 	PLD_WFC_MODE_ON,
185*5113495bSYour Name };
186*5113495bSYour Name 
187*5113495bSYour Name /**
188*5113495bSYour Name  * struct pld_platform_cap - platform capabilities
189*5113495bSYour Name  * @cap_flag: capabilities flag
190*5113495bSYour Name  *
191*5113495bSYour Name  * pld_platform_cap provides platform capabilities which are
192*5113495bSYour Name  * extracted from DTS.
193*5113495bSYour Name  */
194*5113495bSYour Name struct pld_platform_cap {
195*5113495bSYour Name 	u32 cap_flag;
196*5113495bSYour Name };
197*5113495bSYour Name 
198*5113495bSYour Name /**
199*5113495bSYour Name  * enum pld_uevent - PLD uevent event types
200*5113495bSYour Name  * @PLD_FW_DOWN: firmware is down
201*5113495bSYour Name  * @PLD_FW_CRASHED: firmware has crashed
202*5113495bSYour Name  * @PLD_FW_RECOVERY_START: firmware is starting recovery
203*5113495bSYour Name  * @PLD_FW_HANG_EVENT: firmware update hang event
204*5113495bSYour Name  * @PLD_BUS_EVENT: update bus/link event
205*5113495bSYour Name  * @PLD_SMMU_FAULT: SMMU fault
206*5113495bSYour Name  * @PLD_SYS_REBOOT: system is rebooting
207*5113495bSYour Name  */
208*5113495bSYour Name enum pld_uevent {
209*5113495bSYour Name 	PLD_FW_DOWN,
210*5113495bSYour Name 	PLD_FW_CRASHED,
211*5113495bSYour Name 	PLD_FW_RECOVERY_START,
212*5113495bSYour Name 	PLD_FW_HANG_EVENT,
213*5113495bSYour Name 	PLD_BUS_EVENT,
214*5113495bSYour Name 	PLD_SMMU_FAULT,
215*5113495bSYour Name 	PLD_SYS_REBOOT,
216*5113495bSYour Name };
217*5113495bSYour Name 
218*5113495bSYour Name /**
219*5113495bSYour Name  * enum pld_bus_event - PLD bus event types
220*5113495bSYour Name  * @PLD_BUS_EVENT_PCIE_LINK_DOWN: PCIe link is down
221*5113495bSYour Name  * @PLD_BUS_EVENT_INVALID: invalid event type
222*5113495bSYour Name  */
223*5113495bSYour Name 
224*5113495bSYour Name enum pld_bus_event {
225*5113495bSYour Name 	PLD_BUS_EVENT_PCIE_LINK_DOWN = 0,
226*5113495bSYour Name 
227*5113495bSYour Name 	PLD_BUS_EVENT_INVALID = 0xFFFF,
228*5113495bSYour Name };
229*5113495bSYour Name 
230*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))
231*5113495bSYour Name /**
232*5113495bSYour Name  * enum pld_device_config - Get PLD device config
233*5113495bSYour Name  * @PLD_IPA_DISABLED: IPA is disabled
234*5113495bSYour Name  */
235*5113495bSYour Name enum pld_device_config {
236*5113495bSYour Name 	PLD_IPA_DISABLED,
237*5113495bSYour Name };
238*5113495bSYour Name #endif
239*5113495bSYour Name 
240*5113495bSYour Name /**
241*5113495bSYour Name  * struct pld_uevent_data - uevent status received from platform driver
242*5113495bSYour Name  * @uevent: uevent type
243*5113495bSYour Name  * @fw_down: FW down info
244*5113495bSYour Name  * @hang_data: FW hang data
245*5113495bSYour Name  * @bus_data: bus related data
246*5113495bSYour Name  */
247*5113495bSYour Name struct pld_uevent_data {
248*5113495bSYour Name 	enum pld_uevent uevent;
249*5113495bSYour Name 	union {
250*5113495bSYour Name 		struct {
251*5113495bSYour Name 			bool crashed;
252*5113495bSYour Name 		} fw_down;
253*5113495bSYour Name 		struct {
254*5113495bSYour Name 			void *hang_event_data;
255*5113495bSYour Name 			u16 hang_event_data_len;
256*5113495bSYour Name 		} hang_data;
257*5113495bSYour Name 		struct {
258*5113495bSYour Name 			enum pld_bus_event etype;
259*5113495bSYour Name 			void *event_data;
260*5113495bSYour Name 		} bus_data;
261*5113495bSYour Name 	};
262*5113495bSYour Name };
263*5113495bSYour Name 
264*5113495bSYour Name /**
265*5113495bSYour Name  * struct pld_ce_tgt_pipe_cfg - copy engine target pipe configuration
266*5113495bSYour Name  * @pipe_num: pipe number
267*5113495bSYour Name  * @pipe_dir: pipe direction
268*5113495bSYour Name  * @nentries: number of entries
269*5113495bSYour Name  * @nbytes_max: max number of bytes
270*5113495bSYour Name  * @flags: flags
271*5113495bSYour Name  * @reserved: reserved
272*5113495bSYour Name  *
273*5113495bSYour Name  * pld_ce_tgt_pipe_cfg is used to store copy engine target pipe
274*5113495bSYour Name  * configuration.
275*5113495bSYour Name  */
276*5113495bSYour Name struct pld_ce_tgt_pipe_cfg {
277*5113495bSYour Name 	u32 pipe_num;
278*5113495bSYour Name 	u32 pipe_dir;
279*5113495bSYour Name 	u32 nentries;
280*5113495bSYour Name 	u32 nbytes_max;
281*5113495bSYour Name 	u32 flags;
282*5113495bSYour Name 	u32 reserved;
283*5113495bSYour Name };
284*5113495bSYour Name 
285*5113495bSYour Name /**
286*5113495bSYour Name  * struct pld_ce_svc_pipe_cfg - copy engine service pipe configuration
287*5113495bSYour Name  * @service_id: service ID
288*5113495bSYour Name  * @pipe_dir: pipe direction
289*5113495bSYour Name  * @pipe_num: pipe number
290*5113495bSYour Name  *
291*5113495bSYour Name  * pld_ce_svc_pipe_cfg is used to store copy engine service pipe
292*5113495bSYour Name  * configuration.
293*5113495bSYour Name  */
294*5113495bSYour Name struct pld_ce_svc_pipe_cfg {
295*5113495bSYour Name 	u32 service_id;
296*5113495bSYour Name 	u32 pipe_dir;
297*5113495bSYour Name 	u32 pipe_num;
298*5113495bSYour Name };
299*5113495bSYour Name 
300*5113495bSYour Name /**
301*5113495bSYour Name  * struct pld_shadow_reg_cfg - shadow register configuration
302*5113495bSYour Name  * @ce_id: copy engine ID
303*5113495bSYour Name  * @reg_offset: register offset
304*5113495bSYour Name  *
305*5113495bSYour Name  * pld_shadow_reg_cfg is used to store shadow register configuration.
306*5113495bSYour Name  */
307*5113495bSYour Name struct pld_shadow_reg_cfg {
308*5113495bSYour Name 	u16 ce_id;
309*5113495bSYour Name 	u16 reg_offset;
310*5113495bSYour Name };
311*5113495bSYour Name 
312*5113495bSYour Name /**
313*5113495bSYour Name  * struct pld_shadow_reg_v2_cfg - shadow register version 2 configuration
314*5113495bSYour Name  * @addr: shadow register physical address
315*5113495bSYour Name  *
316*5113495bSYour Name  * pld_shadow_reg_v2_cfg is used to store shadow register version 2
317*5113495bSYour Name  * configuration.
318*5113495bSYour Name  */
319*5113495bSYour Name struct pld_shadow_reg_v2_cfg {
320*5113495bSYour Name 	u32 addr;
321*5113495bSYour Name };
322*5113495bSYour Name 
323*5113495bSYour Name #ifdef CONFIG_SHADOW_V3
324*5113495bSYour Name struct pld_shadow_reg_v3_cfg {
325*5113495bSYour Name 	u32 addr;
326*5113495bSYour Name };
327*5113495bSYour Name #endif
328*5113495bSYour Name 
329*5113495bSYour Name /**
330*5113495bSYour Name  * struct pld_rri_over_ddr_cfg - rri_over_ddr configuration
331*5113495bSYour Name  * @base_addr_low: lower 32bit
332*5113495bSYour Name  * @base_addr_high: higher 32bit
333*5113495bSYour Name  *
334*5113495bSYour Name  * pld_rri_over_ddr_cfg_s is used in Genoa to pass rri_over_ddr configuration
335*5113495bSYour Name  * to firmware to update ring/write index in host DDR.
336*5113495bSYour Name  */
337*5113495bSYour Name struct pld_rri_over_ddr_cfg {
338*5113495bSYour Name 	u32 base_addr_low;
339*5113495bSYour Name 	u32 base_addr_high;
340*5113495bSYour Name };
341*5113495bSYour Name 
342*5113495bSYour Name /**
343*5113495bSYour Name  * struct pld_wlan_enable_cfg - WLAN FW configuration
344*5113495bSYour Name  * @num_ce_tgt_cfg: number of CE target configuration
345*5113495bSYour Name  * @ce_tgt_cfg: CE target configuration
346*5113495bSYour Name  * @num_ce_svc_pipe_cfg: number of CE service configuration
347*5113495bSYour Name  * @ce_svc_cfg: CE service configuration
348*5113495bSYour Name  * @num_shadow_reg_cfg: number of shadow register configuration
349*5113495bSYour Name  * @shadow_reg_cfg: shadow register configuration
350*5113495bSYour Name  * @num_shadow_reg_v2_cfg: number of shadow register version 2 configuration
351*5113495bSYour Name  * @shadow_reg_v2_cfg: shadow register version 2 configuration
352*5113495bSYour Name  * @rri_over_ddr_cfg_valid: valid flag for rri_over_ddr config
353*5113495bSYour Name  * @rri_over_ddr_cfg: rri over ddr config
354*5113495bSYour Name  * @num_shadow_reg_v3_cfg: number of shadow register version 3 configuration
355*5113495bSYour Name  * @shadow_reg_v3_cfg: shadow register version 3 configuration
356*5113495bSYour Name  *
357*5113495bSYour Name  * pld_wlan_enable_cfg stores WLAN FW configurations. It will be
358*5113495bSYour Name  * passed to WLAN FW when WLAN host driver calls wlan_enable.
359*5113495bSYour Name  */
360*5113495bSYour Name struct pld_wlan_enable_cfg {
361*5113495bSYour Name 	u32 num_ce_tgt_cfg;
362*5113495bSYour Name 	struct pld_ce_tgt_pipe_cfg *ce_tgt_cfg;
363*5113495bSYour Name 	u32 num_ce_svc_pipe_cfg;
364*5113495bSYour Name 	struct pld_ce_svc_pipe_cfg *ce_svc_cfg;
365*5113495bSYour Name 	u32 num_shadow_reg_cfg;
366*5113495bSYour Name 	struct pld_shadow_reg_cfg *shadow_reg_cfg;
367*5113495bSYour Name 	u32 num_shadow_reg_v2_cfg;
368*5113495bSYour Name 	struct pld_shadow_reg_v2_cfg *shadow_reg_v2_cfg;
369*5113495bSYour Name 	bool rri_over_ddr_cfg_valid;
370*5113495bSYour Name 	struct pld_rri_over_ddr_cfg rri_over_ddr_cfg;
371*5113495bSYour Name #ifdef CONFIG_SHADOW_V3
372*5113495bSYour Name 	u32 num_shadow_reg_v3_cfg;
373*5113495bSYour Name 	struct pld_shadow_reg_v3_cfg *shadow_reg_v3_cfg;
374*5113495bSYour Name #endif
375*5113495bSYour Name };
376*5113495bSYour Name 
377*5113495bSYour Name /**
378*5113495bSYour Name  * enum pld_driver_mode - WLAN host driver mode
379*5113495bSYour Name  * @PLD_MISSION: mission mode
380*5113495bSYour Name  * @PLD_FTM: FTM mode
381*5113495bSYour Name  * @PLD_EPPING: EPPING mode
382*5113495bSYour Name  * @PLD_WALTEST: WAL test mode, FW standalone test mode
383*5113495bSYour Name  * @PLD_OFF: OFF mode
384*5113495bSYour Name  * @PLD_COLDBOOT_CALIBRATION: Cold Boot Calibration Mode
385*5113495bSYour Name  * @PLD_FTM_COLDBOOT_CALIBRATION: Cold Boot Calibration for FTM Mode
386*5113495bSYour Name  */
387*5113495bSYour Name enum pld_driver_mode {
388*5113495bSYour Name 	PLD_MISSION,
389*5113495bSYour Name 	PLD_FTM,
390*5113495bSYour Name 	PLD_EPPING,
391*5113495bSYour Name 	PLD_WALTEST,
392*5113495bSYour Name 	PLD_OFF,
393*5113495bSYour Name 	PLD_COLDBOOT_CALIBRATION = 7,
394*5113495bSYour Name 	PLD_FTM_COLDBOOT_CALIBRATION = 10
395*5113495bSYour Name };
396*5113495bSYour Name 
397*5113495bSYour Name /**
398*5113495bSYour Name  * struct pld_device_version - WLAN device version info
399*5113495bSYour Name  * @family_number: family number of WLAN SOC HW
400*5113495bSYour Name  * @device_number: device number of WLAN SOC HW
401*5113495bSYour Name  * @major_version: major version of WLAN SOC HW
402*5113495bSYour Name  * @minor_version: minor version of WLAN SOC HW
403*5113495bSYour Name  *
404*5113495bSYour Name  * pld_device_version is used to store WLAN device version info
405*5113495bSYour Name  */
406*5113495bSYour Name 
407*5113495bSYour Name struct pld_device_version {
408*5113495bSYour Name 	u32 family_number;
409*5113495bSYour Name 	u32 device_number;
410*5113495bSYour Name 	u32 major_version;
411*5113495bSYour Name 	u32 minor_version;
412*5113495bSYour Name };
413*5113495bSYour Name 
414*5113495bSYour Name /**
415*5113495bSYour Name  * struct pld_dev_mem_info - WLAN device memory info
416*5113495bSYour Name  * @start: start address of the memory block
417*5113495bSYour Name  * @size: size of the memory block
418*5113495bSYour Name  *
419*5113495bSYour Name  * pld_dev_mem_info is used to store WLAN device memory info
420*5113495bSYour Name  */
421*5113495bSYour Name struct pld_dev_mem_info {
422*5113495bSYour Name 	u64 start;
423*5113495bSYour Name 	u64 size;
424*5113495bSYour Name };
425*5113495bSYour Name 
426*5113495bSYour Name /**
427*5113495bSYour Name  * enum pld_wlan_hw_nss_info - WLAN HW nss info
428*5113495bSYour Name  * @PLD_WLAN_HW_CAP_NSS_UNSPECIFIED: nss info not specified
429*5113495bSYour Name  * @PLD_WLAN_HW_CAP_NSS_1x1: supported nss link 1x1
430*5113495bSYour Name  * @PLD_WLAN_HW_CAP_NSS_2x2: supported nss link 2x2
431*5113495bSYour Name  */
432*5113495bSYour Name enum pld_wlan_hw_nss_info {
433*5113495bSYour Name 	PLD_WLAN_HW_CAP_NSS_UNSPECIFIED,
434*5113495bSYour Name 	PLD_WLAN_HW_CAP_NSS_1x1,
435*5113495bSYour Name 	PLD_WLAN_HW_CAP_NSS_2x2
436*5113495bSYour Name };
437*5113495bSYour Name 
438*5113495bSYour Name /**
439*5113495bSYour Name  * enum pld_wlan_hw_channel_bw_info - WLAN HW channel bw info
440*5113495bSYour Name  * @PLD_WLAN_HW_CHANNEL_BW_UNSPECIFIED: bw info not specified
441*5113495bSYour Name  * @PLD_WLAN_HW_CHANNEL_BW_80MHZ: supported bw 80MHZ
442*5113495bSYour Name  * @PLD_WLAN_HW_CHANNEL_BW_160MHZ: supported bw 160MHZ
443*5113495bSYour Name  */
444*5113495bSYour Name enum pld_wlan_hw_channel_bw_info  {
445*5113495bSYour Name 	PLD_WLAN_HW_CHANNEL_BW_UNSPECIFIED,
446*5113495bSYour Name 	PLD_WLAN_HW_CHANNEL_BW_80MHZ,
447*5113495bSYour Name 	PLD_WLAN_HW_CHANNEL_BW_160MHZ
448*5113495bSYour Name };
449*5113495bSYour Name 
450*5113495bSYour Name /**
451*5113495bSYour Name  * enum pld_wlan_hw_qam_info - WLAN HW qam info
452*5113495bSYour Name  * @PLD_WLAN_HW_QAM_UNSPECIFIED: QAM info not specified
453*5113495bSYour Name  * @PLD_WLAN_HW_QAM_1K: 1K QAM supported
454*5113495bSYour Name  * @PLD_WLAN_HW_QAM_4K: 4K QAM supported
455*5113495bSYour Name  */
456*5113495bSYour Name enum pld_wlan_hw_qam_info  {
457*5113495bSYour Name 	PLD_WLAN_HW_QAM_UNSPECIFIED,
458*5113495bSYour Name 	PLD_WLAN_HW_QAM_1K,
459*5113495bSYour Name 	PLD_WLAN_HW_QAM_4K
460*5113495bSYour Name };
461*5113495bSYour Name 
462*5113495bSYour Name /**
463*5113495bSYour Name  * struct pld_wlan_hw_cap_info - WLAN HW cap info
464*5113495bSYour Name  * @nss: nss info
465*5113495bSYour Name  * @bw: bw info
466*5113495bSYour Name  * @qam: qam info
467*5113495bSYour Name  */
468*5113495bSYour Name struct pld_wlan_hw_cap_info {
469*5113495bSYour Name 	enum pld_wlan_hw_nss_info nss;
470*5113495bSYour Name 	enum pld_wlan_hw_channel_bw_info bw;
471*5113495bSYour Name 	enum pld_wlan_hw_qam_info qam;
472*5113495bSYour Name };
473*5113495bSYour Name 
474*5113495bSYour Name #define PLD_MAX_TIMESTAMP_LEN 32
475*5113495bSYour Name #define PLD_WLFW_MAX_BUILD_ID_LEN 128
476*5113495bSYour Name #define PLD_MAX_DEV_MEM_NUM 4
477*5113495bSYour Name 
478*5113495bSYour Name /**
479*5113495bSYour Name  * struct pld_soc_info - SOC information
480*5113495bSYour Name  * @v_addr: virtual address of preallocated memory
481*5113495bSYour Name  * @p_addr: physical address of preallcoated memory
482*5113495bSYour Name  * @chip_id: chip ID
483*5113495bSYour Name  * @chip_family: chip family
484*5113495bSYour Name  * @board_id: board ID
485*5113495bSYour Name  * @soc_id: SOC ID
486*5113495bSYour Name  * @fw_version: FW version
487*5113495bSYour Name  * @fw_build_timestamp: FW build timestamp
488*5113495bSYour Name  * @device_version: WLAN device version info
489*5113495bSYour Name  * @dev_mem_info: WLAN device memory info
490*5113495bSYour Name  * @fw_build_id: Firmware build identifier
491*5113495bSYour Name  * @hw_cap_info: WLAN HW capabilities info
492*5113495bSYour Name  *
493*5113495bSYour Name  * pld_soc_info is used to store WLAN SOC information.
494*5113495bSYour Name  */
495*5113495bSYour Name struct pld_soc_info {
496*5113495bSYour Name 	void __iomem *v_addr;
497*5113495bSYour Name 	phys_addr_t p_addr;
498*5113495bSYour Name 	u32 chip_id;
499*5113495bSYour Name 	u32 chip_family;
500*5113495bSYour Name 	u32 board_id;
501*5113495bSYour Name 	u32 soc_id;
502*5113495bSYour Name 	u32 fw_version;
503*5113495bSYour Name 	char fw_build_timestamp[PLD_MAX_TIMESTAMP_LEN + 1];
504*5113495bSYour Name 	struct pld_device_version device_version;
505*5113495bSYour Name 	struct pld_dev_mem_info dev_mem_info[PLD_MAX_DEV_MEM_NUM];
506*5113495bSYour Name 	char fw_build_id[PLD_WLFW_MAX_BUILD_ID_LEN + 1];
507*5113495bSYour Name 	struct pld_wlan_hw_cap_info hw_cap_info;
508*5113495bSYour Name };
509*5113495bSYour Name 
510*5113495bSYour Name /**
511*5113495bSYour Name  * enum pld_recovery_reason - WLAN host driver recovery reason
512*5113495bSYour Name  * @PLD_REASON_DEFAULT: default
513*5113495bSYour Name  * @PLD_REASON_LINK_DOWN: PCIe link down
514*5113495bSYour Name  */
515*5113495bSYour Name enum pld_recovery_reason {
516*5113495bSYour Name 	PLD_REASON_DEFAULT,
517*5113495bSYour Name 	PLD_REASON_LINK_DOWN
518*5113495bSYour Name };
519*5113495bSYour Name 
520*5113495bSYour Name #ifdef FEATURE_WLAN_TIME_SYNC_FTM
521*5113495bSYour Name /**
522*5113495bSYour Name  * enum pld_wlan_time_sync_trigger_type - WLAN time sync trigger type
523*5113495bSYour Name  * @PLD_TRIGGER_POSITIVE_EDGE: Positive edge trigger
524*5113495bSYour Name  * @PLD_TRIGGER_NEGATIVE_EDGE: Negative edge trigger
525*5113495bSYour Name  */
526*5113495bSYour Name enum pld_wlan_time_sync_trigger_type {
527*5113495bSYour Name 	PLD_TRIGGER_POSITIVE_EDGE,
528*5113495bSYour Name 	PLD_TRIGGER_NEGATIVE_EDGE
529*5113495bSYour Name };
530*5113495bSYour Name #endif /* FEATURE_WLAN_TIME_SYNC_FTM */
531*5113495bSYour Name 
532*5113495bSYour Name /* MAX channel avoid ranges supported in PLD */
533*5113495bSYour Name #define PLD_CH_AVOID_MAX_RANGE   4
534*5113495bSYour Name 
535*5113495bSYour Name /**
536*5113495bSYour Name  * struct pld_ch_avoid_freq_type
537*5113495bSYour Name  * @start_freq: start freq (MHz)
538*5113495bSYour Name  * @end_freq: end freq (Mhz)
539*5113495bSYour Name  */
540*5113495bSYour Name struct pld_ch_avoid_freq_type {
541*5113495bSYour Name 	uint32_t start_freq;
542*5113495bSYour Name 	uint32_t end_freq;
543*5113495bSYour Name };
544*5113495bSYour Name 
545*5113495bSYour Name /**
546*5113495bSYour Name  * struct pld_ch_avoid_ind_type
547*5113495bSYour Name  * @ch_avoid_range_cnt: count
548*5113495bSYour Name  * @avoid_freq_range: avoid freq range array
549*5113495bSYour Name  */
550*5113495bSYour Name struct pld_ch_avoid_ind_type {
551*5113495bSYour Name 	uint32_t ch_avoid_range_cnt;
552*5113495bSYour Name 	struct pld_ch_avoid_freq_type
553*5113495bSYour Name 		avoid_freq_range[PLD_CH_AVOID_MAX_RANGE];
554*5113495bSYour Name };
555*5113495bSYour Name 
556*5113495bSYour Name /**
557*5113495bSYour Name  * struct pld_driver_ops - driver callback functions
558*5113495bSYour Name  * @probe: required operation, will be called when device is detected
559*5113495bSYour Name  * @remove: required operation, will be called when device is removed
560*5113495bSYour Name  * @idle_shutdown: required operation, will be called when device is doing
561*5113495bSYour Name  *                 idle shutdown after interface inactivity timer has fired
562*5113495bSYour Name  * @idle_restart: required operation, will be called when device is doing
563*5113495bSYour Name  *                idle restart after idle shutdown
564*5113495bSYour Name  * @shutdown: optional operation, will be called during SSR
565*5113495bSYour Name  * @reinit: optional operation, will be called during SSR
566*5113495bSYour Name  * @crash_shutdown: optional operation, will be called when a crash is
567*5113495bSYour Name  *                  detected
568*5113495bSYour Name  * @suspend: required operation, will be called for power management
569*5113495bSYour Name  *           is enabled
570*5113495bSYour Name  * @resume: required operation, will be called for power management
571*5113495bSYour Name  *          is enabled
572*5113495bSYour Name  * @reset_resume: required operation, will be called for power management
573*5113495bSYour Name  *                is enabled
574*5113495bSYour Name  * @modem_status: optional operation, will be called when platform driver
575*5113495bSYour Name  *                sending modem power status to WLAN FW
576*5113495bSYour Name  * @uevent: optional operation, will be called when platform driver
577*5113495bSYour Name  *                 updating driver status
578*5113495bSYour Name  * @collect_driver_dump: optional operation, will be called during SSR to
579*5113495bSYour Name  *                       collect driver memory dump
580*5113495bSYour Name  * @runtime_suspend: optional operation, prepare the device for a condition
581*5113495bSYour Name  *                   in which it won't be able to communicate with the CPU(s)
582*5113495bSYour Name  *                   and RAM due to power management.
583*5113495bSYour Name  * @runtime_resume: optional operation, put the device into the fully
584*5113495bSYour Name  *                  active state in response to a wakeup event generated by
585*5113495bSYour Name  *                  hardware or at the request of software.
586*5113495bSYour Name  * @suspend_noirq: optional operation, complete the actions started by suspend()
587*5113495bSYour Name  * @resume_noirq: optional operation, prepare for the execution of resume()
588*5113495bSYour Name  * @set_curr_therm_cdev_state: optional operation, will be called when there is
589*5113495bSYour Name  *                        change in the thermal level triggered by the thermal
590*5113495bSYour Name  *                        subsystem thus requiring mitigation actions. This will
591*5113495bSYour Name  *                        be called every time there is a change in the state
592*5113495bSYour Name  *                        and after driver load.
593*5113495bSYour Name  */
594*5113495bSYour Name struct pld_driver_ops {
595*5113495bSYour Name 	int (*probe)(struct device *dev,
596*5113495bSYour Name 		     enum pld_bus_type bus_type,
597*5113495bSYour Name 		     void *bdev, void *id);
598*5113495bSYour Name 	void (*remove)(struct device *dev,
599*5113495bSYour Name 		       enum pld_bus_type bus_type);
600*5113495bSYour Name 	int (*idle_shutdown)(struct device *dev,
601*5113495bSYour Name 			      enum pld_bus_type bus_type);
602*5113495bSYour Name 	int (*idle_restart)(struct device *dev,
603*5113495bSYour Name 			     enum pld_bus_type bus_type);
604*5113495bSYour Name 	void (*shutdown)(struct device *dev,
605*5113495bSYour Name 			 enum pld_bus_type bus_type);
606*5113495bSYour Name 	int (*reinit)(struct device *dev,
607*5113495bSYour Name 		      enum pld_bus_type bus_type,
608*5113495bSYour Name 		      void *bdev, void *id);
609*5113495bSYour Name 	void (*crash_shutdown)(struct device *dev,
610*5113495bSYour Name 			       enum pld_bus_type bus_type);
611*5113495bSYour Name 	int (*suspend)(struct device *dev,
612*5113495bSYour Name 		       enum pld_bus_type bus_type,
613*5113495bSYour Name 		       pm_message_t state);
614*5113495bSYour Name 	int (*resume)(struct device *dev,
615*5113495bSYour Name 		      enum pld_bus_type bus_type);
616*5113495bSYour Name 	int (*reset_resume)(struct device *dev,
617*5113495bSYour Name 		      enum pld_bus_type bus_type);
618*5113495bSYour Name 	void (*modem_status)(struct device *dev,
619*5113495bSYour Name 			     enum pld_bus_type bus_type,
620*5113495bSYour Name 			     int state);
621*5113495bSYour Name 	void (*uevent)(struct device *dev, struct pld_uevent_data *uevent);
622*5113495bSYour Name #ifdef WLAN_FEATURE_SSR_DRIVER_DUMP
623*5113495bSYour Name 	int (*collect_driver_dump)(struct device *dev,
624*5113495bSYour Name 				   enum pld_bus_type bus_type,
625*5113495bSYour Name 				   struct cnss_ssr_driver_dump_entry
626*5113495bSYour Name 				   *input_array,
627*5113495bSYour Name 				   size_t *num_entries_loaded);
628*5113495bSYour Name #endif
629*5113495bSYour Name 	int (*runtime_suspend)(struct device *dev,
630*5113495bSYour Name 			       enum pld_bus_type bus_type);
631*5113495bSYour Name 	int (*runtime_resume)(struct device *dev,
632*5113495bSYour Name 			      enum pld_bus_type bus_type);
633*5113495bSYour Name 	int (*suspend_noirq)(struct device *dev,
634*5113495bSYour Name 			     enum pld_bus_type bus_type);
635*5113495bSYour Name 	int (*resume_noirq)(struct device *dev,
636*5113495bSYour Name 			    enum pld_bus_type bus_type);
637*5113495bSYour Name 	int (*set_curr_therm_cdev_state)(struct device *dev,
638*5113495bSYour Name 					 unsigned long state,
639*5113495bSYour Name 					 int mon_id);
640*5113495bSYour Name };
641*5113495bSYour Name 
642*5113495bSYour Name /**
643*5113495bSYour Name  * pld_init() - Initialize PLD module
644*5113495bSYour Name  *
645*5113495bSYour Name  * Return: 0 for success
646*5113495bSYour Name  *         Non zero failure code for errors
647*5113495bSYour Name  */
648*5113495bSYour Name int pld_init(void);
649*5113495bSYour Name 
650*5113495bSYour Name /**
651*5113495bSYour Name  * pld_deinit() - Uninitialize PLD module
652*5113495bSYour Name  *
653*5113495bSYour Name  * Return: void
654*5113495bSYour Name  */
655*5113495bSYour Name void pld_deinit(void);
656*5113495bSYour Name 
657*5113495bSYour Name /**
658*5113495bSYour Name  * pld_set_mode() - set driver mode in PLD module
659*5113495bSYour Name  * @mode: driver mode
660*5113495bSYour Name  *
661*5113495bSYour Name  * Return: 0 for success
662*5113495bSYour Name  *         Non zero failure code for errors
663*5113495bSYour Name  */
664*5113495bSYour Name int pld_set_mode(u8 mode);
665*5113495bSYour Name 
666*5113495bSYour Name /**
667*5113495bSYour Name  * pld_register_driver() - Register driver to kernel
668*5113495bSYour Name  * @ops: Callback functions that will be registered to kernel
669*5113495bSYour Name  *
670*5113495bSYour Name  * This function should be called when other modules want to
671*5113495bSYour Name  * register platform driver callback functions to kernel. The
672*5113495bSYour Name  * probe() is expected to be called after registration if the
673*5113495bSYour Name  * device is online.
674*5113495bSYour Name  *
675*5113495bSYour Name  * Return: 0 for success
676*5113495bSYour Name  *         Non zero failure code for errors
677*5113495bSYour Name  */
678*5113495bSYour Name int pld_register_driver(struct pld_driver_ops *ops);
679*5113495bSYour Name 
680*5113495bSYour Name /**
681*5113495bSYour Name  * pld_unregister_driver() - Unregister driver to kernel
682*5113495bSYour Name  *
683*5113495bSYour Name  * This function should be called when other modules want to
684*5113495bSYour Name  * unregister callback functions from kernel. The remove() is
685*5113495bSYour Name  * expected to be called after registration.
686*5113495bSYour Name  *
687*5113495bSYour Name  * Return: void
688*5113495bSYour Name  */
689*5113495bSYour Name void pld_unregister_driver(void);
690*5113495bSYour Name 
691*5113495bSYour Name /**
692*5113495bSYour Name  * pld_wlan_enable() - Enable WLAN
693*5113495bSYour Name  * @dev: device
694*5113495bSYour Name  * @config: WLAN configuration data
695*5113495bSYour Name  * @mode: WLAN mode
696*5113495bSYour Name  *
697*5113495bSYour Name  * This function enables WLAN FW. It passed WLAN configuration data,
698*5113495bSYour Name  * WLAN mode and host software version to FW.
699*5113495bSYour Name  *
700*5113495bSYour Name  * Return: 0 for success
701*5113495bSYour Name  *         Non zero failure code for errors
702*5113495bSYour Name  */
703*5113495bSYour Name int pld_wlan_enable(struct device *dev, struct pld_wlan_enable_cfg *config,
704*5113495bSYour Name 		    enum pld_driver_mode mode);
705*5113495bSYour Name 
706*5113495bSYour Name /**
707*5113495bSYour Name  * pld_wlan_disable() - Disable WLAN
708*5113495bSYour Name  * @dev: device
709*5113495bSYour Name  * @mode: WLAN mode
710*5113495bSYour Name  *
711*5113495bSYour Name  * This function disables WLAN FW. It passes WLAN mode to FW.
712*5113495bSYour Name  *
713*5113495bSYour Name  * Return: 0 for success
714*5113495bSYour Name  *         Non zero failure code for errors
715*5113495bSYour Name  */
716*5113495bSYour Name int pld_wlan_disable(struct device *dev, enum pld_driver_mode mode);
717*5113495bSYour Name 
718*5113495bSYour Name /**
719*5113495bSYour Name  * pld_set_fw_log_mode() - Set FW debug log mode
720*5113495bSYour Name  * @dev: device
721*5113495bSYour Name  * @fw_log_mode: 0 for No log, 1 for WMI, 2 for DIAG
722*5113495bSYour Name  *
723*5113495bSYour Name  * Switch Fw debug log mode between DIAG logging and WMI logging.
724*5113495bSYour Name  *
725*5113495bSYour Name  * Return: 0 for success
726*5113495bSYour Name  *         Non zero failure code for errors
727*5113495bSYour Name  */
728*5113495bSYour Name int pld_set_fw_log_mode(struct device *dev, u8 fw_log_mode);
729*5113495bSYour Name 
730*5113495bSYour Name /**
731*5113495bSYour Name  * pld_get_default_fw_files() - Get default FW file names
732*5113495bSYour Name  * @pfw_files: buffer for FW file names
733*5113495bSYour Name  *
734*5113495bSYour Name  * Return default FW file names to the buffer.
735*5113495bSYour Name  *
736*5113495bSYour Name  * Return: void
737*5113495bSYour Name  */
738*5113495bSYour Name void pld_get_default_fw_files(struct pld_fw_files *pfw_files);
739*5113495bSYour Name 
740*5113495bSYour Name /**
741*5113495bSYour Name  * pld_get_fw_files_for_target() - Get FW file names
742*5113495bSYour Name  * @dev: device
743*5113495bSYour Name  * @pfw_files: buffer for FW file names
744*5113495bSYour Name  * @target_type: target type
745*5113495bSYour Name  * @target_version: target version
746*5113495bSYour Name  *
747*5113495bSYour Name  * Return target specific FW file names to the buffer.
748*5113495bSYour Name  *
749*5113495bSYour Name  * Return: 0 for success
750*5113495bSYour Name  *         Non zero failure code for errors
751*5113495bSYour Name  */
752*5113495bSYour Name int pld_get_fw_files_for_target(struct device *dev,
753*5113495bSYour Name 				struct pld_fw_files *pfw_files,
754*5113495bSYour Name 				u32 target_type, u32 target_version);
755*5113495bSYour Name 
756*5113495bSYour Name /**
757*5113495bSYour Name  * pld_prevent_l1() - Prevent PCIe enter L1 state
758*5113495bSYour Name  * @dev: device
759*5113495bSYour Name  *
760*5113495bSYour Name  * Prevent PCIe enter L1 and L1ss states
761*5113495bSYour Name  *
762*5113495bSYour Name  * Return: 0 for success
763*5113495bSYour Name  *         Non zero failure code for errors
764*5113495bSYour Name  */
765*5113495bSYour Name int pld_prevent_l1(struct device *dev);
766*5113495bSYour Name 
767*5113495bSYour Name /**
768*5113495bSYour Name  * pld_allow_l1() - Allow PCIe enter L1 state
769*5113495bSYour Name  * @dev: device
770*5113495bSYour Name  *
771*5113495bSYour Name  * Allow PCIe enter L1 and L1ss states
772*5113495bSYour Name  *
773*5113495bSYour Name  * Return: void
774*5113495bSYour Name  */
775*5113495bSYour Name void pld_allow_l1(struct device *dev);
776*5113495bSYour Name 
777*5113495bSYour Name /**
778*5113495bSYour Name  * pld_set_pcie_gen_speed() - Set PCIE gen speed
779*5113495bSYour Name  * @dev: device
780*5113495bSYour Name  * @pcie_gen_speed: Required PCIE gen speed
781*5113495bSYour Name  *
782*5113495bSYour Name  * Send required PCIE Gen speed to platform driver
783*5113495bSYour Name  *
784*5113495bSYour Name  * Return: 0 for success. Negative error codes.
785*5113495bSYour Name  */
786*5113495bSYour Name int pld_set_pcie_gen_speed(struct device *dev, u8 pcie_gen_speed);
787*5113495bSYour Name 
788*5113495bSYour Name /**
789*5113495bSYour Name  * pld_is_pci_link_down() - Notification for pci link down event
790*5113495bSYour Name  * @dev: device
791*5113495bSYour Name  *
792*5113495bSYour Name  * Notify platform that pci link is down.
793*5113495bSYour Name  *
794*5113495bSYour Name  * Return: void
795*5113495bSYour Name  */
796*5113495bSYour Name void pld_is_pci_link_down(struct device *dev);
797*5113495bSYour Name 
798*5113495bSYour Name /**
799*5113495bSYour Name  * pld_get_bus_reg_dump() - Get bus reg dump
800*5113495bSYour Name  * @dev: device
801*5113495bSYour Name  * @buf: buffer for hang data
802*5113495bSYour Name  * @len: len of hang data
803*5113495bSYour Name  *
804*5113495bSYour Name  * Get pci reg dump for hang data.
805*5113495bSYour Name  *
806*5113495bSYour Name  * Return: void
807*5113495bSYour Name  */
808*5113495bSYour Name void pld_get_bus_reg_dump(struct device *dev, uint8_t *buf, uint32_t len);
809*5113495bSYour Name 
810*5113495bSYour Name int pld_shadow_control(struct device *dev, bool enable);
811*5113495bSYour Name 
812*5113495bSYour Name /**
813*5113495bSYour Name  * pld_schedule_recovery_work() - Schedule recovery work
814*5113495bSYour Name  * @dev: device
815*5113495bSYour Name  * @reason: recovery reason
816*5113495bSYour Name  *
817*5113495bSYour Name  * Schedule a system self recovery work.
818*5113495bSYour Name  *
819*5113495bSYour Name  * Return: void
820*5113495bSYour Name  */
821*5113495bSYour Name void pld_schedule_recovery_work(struct device *dev,
822*5113495bSYour Name 				enum pld_recovery_reason reason);
823*5113495bSYour Name 
824*5113495bSYour Name /**
825*5113495bSYour Name  * pld_wlan_hw_enable() - Enable WLAN HW
826*5113495bSYour Name  *
827*5113495bSYour Name  * This function enables WLAN HW. If WLAN is secured disabled at boot all wlan
828*5113495bSYour Name  * boot time activities are deferred. This is used to run deferred activities
829*5113495bSYour Name  * after wlan is enabled.
830*5113495bSYour Name  *
831*5113495bSYour Name  * Return: 0 for success
832*5113495bSYour Name  *         Non zero failure code for errors
833*5113495bSYour Name  */
834*5113495bSYour Name int pld_wlan_hw_enable(void);
835*5113495bSYour Name 
836*5113495bSYour Name #ifdef FEATURE_WLAN_TIME_SYNC_FTM
837*5113495bSYour Name /**
838*5113495bSYour Name  * pld_get_audio_wlan_timestamp() - Get audio timestamp
839*5113495bSYour Name  * @dev: device pointer
840*5113495bSYour Name  * @type: trigger type
841*5113495bSYour Name  * @ts: audio timestamp
842*5113495bSYour Name  *
843*5113495bSYour Name  * This API can be used to get audio timestamp.
844*5113495bSYour Name  *
845*5113495bSYour Name  * Return: 0 if trigger to get audio timestamp is successful
846*5113495bSYour Name  *         Non zero failure code for errors
847*5113495bSYour Name  */
848*5113495bSYour Name int pld_get_audio_wlan_timestamp(struct device *dev,
849*5113495bSYour Name 				 enum pld_wlan_time_sync_trigger_type type,
850*5113495bSYour Name 				 uint64_t *ts);
851*5113495bSYour Name #endif /* FEATURE_WLAN_TIME_SYNC_FTM */
852*5113495bSYour Name 
853*5113495bSYour Name #ifdef CNSS_UTILS
854*5113495bSYour Name #ifdef CNSS_UTILS_VENDOR_UNSAFE_CHAN_API_SUPPORT
855*5113495bSYour Name /**
856*5113495bSYour Name  * pld_get_wlan_unsafe_channel_sap() - Get vendor unsafe ch freq ranges
857*5113495bSYour Name  * @dev: device
858*5113495bSYour Name  * @ch_avoid_ranges: unsafe freq channel ranges
859*5113495bSYour Name  *
860*5113495bSYour Name  * Get vendor specific unsafe channel frequency ranges
861*5113495bSYour Name  *
862*5113495bSYour Name  * Return: 0 for success
863*5113495bSYour Name  *         Non zero failure code for errors
864*5113495bSYour Name  */
865*5113495bSYour Name int pld_get_wlan_unsafe_channel_sap(
866*5113495bSYour Name 	struct device *dev, struct pld_ch_avoid_ind_type *ch_avoid_ranges);
867*5113495bSYour Name #else
868*5113495bSYour Name static inline
pld_get_wlan_unsafe_channel_sap(struct device * dev,struct pld_ch_avoid_ind_type * ch_avoid_ranges)869*5113495bSYour Name int pld_get_wlan_unsafe_channel_sap(
870*5113495bSYour Name 	struct device *dev, struct pld_ch_avoid_ind_type *ch_avoid_ranges)
871*5113495bSYour Name {
872*5113495bSYour Name 	return 0;
873*5113495bSYour Name }
874*5113495bSYour Name #endif
875*5113495bSYour Name 
876*5113495bSYour Name /**
877*5113495bSYour Name  * pld_set_wlan_unsafe_channel() - Set unsafe channel
878*5113495bSYour Name  * @dev: device
879*5113495bSYour Name  * @unsafe_ch_list: unsafe channel list
880*5113495bSYour Name  * @ch_count: number of channel
881*5113495bSYour Name  *
882*5113495bSYour Name  * Return: 0 for success
883*5113495bSYour Name  *         Non zero failure code for errors
884*5113495bSYour Name  */
pld_set_wlan_unsafe_channel(struct device * dev,u16 * unsafe_ch_list,u16 ch_count)885*5113495bSYour Name static inline int pld_set_wlan_unsafe_channel(struct device *dev,
886*5113495bSYour Name 					      u16 *unsafe_ch_list,
887*5113495bSYour Name 					      u16 ch_count)
888*5113495bSYour Name {
889*5113495bSYour Name 	return cnss_utils_set_wlan_unsafe_channel(dev, unsafe_ch_list,
890*5113495bSYour Name 						  ch_count);
891*5113495bSYour Name }
892*5113495bSYour Name /**
893*5113495bSYour Name  * pld_get_wlan_unsafe_channel() - Get unsafe channel
894*5113495bSYour Name  * @dev: device
895*5113495bSYour Name  * @unsafe_ch_list: buffer to unsafe channel list
896*5113495bSYour Name  * @ch_count: number of channel
897*5113495bSYour Name  * @buf_len: buffer length
898*5113495bSYour Name  *
899*5113495bSYour Name  * Return WLAN unsafe channel to the buffer.
900*5113495bSYour Name  *
901*5113495bSYour Name  * Return: 0 for success
902*5113495bSYour Name  *         Non zero failure code for errors
903*5113495bSYour Name  */
pld_get_wlan_unsafe_channel(struct device * dev,u16 * unsafe_ch_list,u16 * ch_count,u16 buf_len)904*5113495bSYour Name static inline int pld_get_wlan_unsafe_channel(struct device *dev,
905*5113495bSYour Name 					      u16 *unsafe_ch_list,
906*5113495bSYour Name 					      u16 *ch_count, u16 buf_len)
907*5113495bSYour Name {
908*5113495bSYour Name 	return cnss_utils_get_wlan_unsafe_channel(dev, unsafe_ch_list,
909*5113495bSYour Name 						  ch_count, buf_len);
910*5113495bSYour Name }
911*5113495bSYour Name /**
912*5113495bSYour Name  * pld_wlan_set_dfs_nol() - Set DFS info
913*5113495bSYour Name  * @dev: device
914*5113495bSYour Name  * @info: DFS info
915*5113495bSYour Name  * @info_len: info length
916*5113495bSYour Name  *
917*5113495bSYour Name  * Return: 0 for success
918*5113495bSYour Name  *         Non zero failure code for errors
919*5113495bSYour Name  */
pld_wlan_set_dfs_nol(struct device * dev,void * info,u16 info_len)920*5113495bSYour Name static inline int pld_wlan_set_dfs_nol(struct device *dev, void *info,
921*5113495bSYour Name 				       u16 info_len)
922*5113495bSYour Name {
923*5113495bSYour Name 	return cnss_utils_wlan_set_dfs_nol(dev, info, info_len);
924*5113495bSYour Name }
925*5113495bSYour Name /**
926*5113495bSYour Name  * pld_wlan_get_dfs_nol() - Get DFS info
927*5113495bSYour Name  * @dev: device
928*5113495bSYour Name  * @info: buffer to DFS info
929*5113495bSYour Name  * @info_len: info length
930*5113495bSYour Name  *
931*5113495bSYour Name  * Return DFS info to the buffer.
932*5113495bSYour Name  *
933*5113495bSYour Name  * Return: 0 for success
934*5113495bSYour Name  *         Non zero failure code for errors
935*5113495bSYour Name  */
pld_wlan_get_dfs_nol(struct device * dev,void * info,u16 info_len)936*5113495bSYour Name static inline int pld_wlan_get_dfs_nol(struct device *dev,
937*5113495bSYour Name 				       void *info, u16 info_len)
938*5113495bSYour Name {
939*5113495bSYour Name 	return cnss_utils_wlan_get_dfs_nol(dev, info, info_len);
940*5113495bSYour Name }
941*5113495bSYour Name /**
942*5113495bSYour Name  * pld_get_wlan_mac_address() - API to query MAC address from Platform
943*5113495bSYour Name  * Driver
944*5113495bSYour Name  * @dev: Device Structure
945*5113495bSYour Name  * @num: Pointer to number of MAC address supported
946*5113495bSYour Name  *
947*5113495bSYour Name  * Platform Driver can have MAC address stored. This API needs to be used
948*5113495bSYour Name  * to get those MAC address
949*5113495bSYour Name  *
950*5113495bSYour Name  * Return: Pointer to the list of MAC address
951*5113495bSYour Name  */
pld_get_wlan_mac_address(struct device * dev,uint32_t * num)952*5113495bSYour Name static inline uint8_t *pld_get_wlan_mac_address(struct device *dev,
953*5113495bSYour Name 						uint32_t *num)
954*5113495bSYour Name {
955*5113495bSYour Name 	return cnss_utils_get_wlan_mac_address(dev, num);
956*5113495bSYour Name }
957*5113495bSYour Name 
958*5113495bSYour Name /**
959*5113495bSYour Name  * pld_get_wlan_derived_mac_address() - API to query derived MAC address
960*5113495bSYour Name  * from platform Driver
961*5113495bSYour Name  * @dev: Device Structure
962*5113495bSYour Name  * @num: Pointer to number of MAC address supported
963*5113495bSYour Name  *
964*5113495bSYour Name  * Platform Driver can have MAC address stored. This API needs to be used
965*5113495bSYour Name  * to get those MAC address
966*5113495bSYour Name  *
967*5113495bSYour Name  * Return: Pointer to the list of MAC address
968*5113495bSYour Name  */
pld_get_wlan_derived_mac_address(struct device * dev,uint32_t * num)969*5113495bSYour Name static inline uint8_t *pld_get_wlan_derived_mac_address(struct device *dev,
970*5113495bSYour Name 							uint32_t *num)
971*5113495bSYour Name {
972*5113495bSYour Name 	return cnss_utils_get_wlan_derived_mac_address(dev, num);
973*5113495bSYour Name }
974*5113495bSYour Name 
975*5113495bSYour Name /**
976*5113495bSYour Name  * pld_increment_driver_load_cnt() - Maintain driver load count
977*5113495bSYour Name  * @dev: device
978*5113495bSYour Name  *
979*5113495bSYour Name  * This function maintain a count which get increase whenever wiphy
980*5113495bSYour Name  * is registered
981*5113495bSYour Name  *
982*5113495bSYour Name  * Return: void
983*5113495bSYour Name  */
pld_increment_driver_load_cnt(struct device * dev)984*5113495bSYour Name static inline void pld_increment_driver_load_cnt(struct device *dev)
985*5113495bSYour Name {
986*5113495bSYour Name 	cnss_utils_increment_driver_load_cnt(dev);
987*5113495bSYour Name }
988*5113495bSYour Name /**
989*5113495bSYour Name  * pld_get_driver_load_cnt() - get driver load count
990*5113495bSYour Name  * @dev: device
991*5113495bSYour Name  *
992*5113495bSYour Name  * This function provide total wiphy registration count from starting
993*5113495bSYour Name  *
994*5113495bSYour Name  * Return: driver load count
995*5113495bSYour Name  */
pld_get_driver_load_cnt(struct device * dev)996*5113495bSYour Name static inline int pld_get_driver_load_cnt(struct device *dev)
997*5113495bSYour Name {
998*5113495bSYour Name 	return cnss_utils_get_driver_load_cnt(dev);
999*5113495bSYour Name }
1000*5113495bSYour Name #else
pld_get_wlan_unsafe_channel_sap(struct device * dev,struct pld_ch_avoid_ind_type * ch_avoid_ranges)1001*5113495bSYour Name static inline int pld_get_wlan_unsafe_channel_sap(
1002*5113495bSYour Name 	struct device *dev, struct pld_ch_avoid_ind_type *ch_avoid_ranges)
1003*5113495bSYour Name {
1004*5113495bSYour Name 	return 0;
1005*5113495bSYour Name }
1006*5113495bSYour Name 
pld_set_wlan_unsafe_channel(struct device * dev,u16 * unsafe_ch_list,u16 ch_count)1007*5113495bSYour Name static inline int pld_set_wlan_unsafe_channel(struct device *dev,
1008*5113495bSYour Name 					      u16 *unsafe_ch_list,
1009*5113495bSYour Name 					      u16 ch_count)
1010*5113495bSYour Name {
1011*5113495bSYour Name 	return 0;
1012*5113495bSYour Name }
pld_get_wlan_unsafe_channel(struct device * dev,u16 * unsafe_ch_list,u16 * ch_count,u16 buf_len)1013*5113495bSYour Name static inline int pld_get_wlan_unsafe_channel(struct device *dev,
1014*5113495bSYour Name 					      u16 *unsafe_ch_list,
1015*5113495bSYour Name 					      u16 *ch_count, u16 buf_len)
1016*5113495bSYour Name {
1017*5113495bSYour Name 	*ch_count = 0;
1018*5113495bSYour Name 
1019*5113495bSYour Name 	return 0;
1020*5113495bSYour Name }
pld_wlan_set_dfs_nol(struct device * dev,void * info,u16 info_len)1021*5113495bSYour Name static inline int pld_wlan_set_dfs_nol(struct device *dev,
1022*5113495bSYour Name 				       void *info, u16 info_len)
1023*5113495bSYour Name {
1024*5113495bSYour Name 	return -EINVAL;
1025*5113495bSYour Name }
pld_wlan_get_dfs_nol(struct device * dev,void * info,u16 info_len)1026*5113495bSYour Name static inline int pld_wlan_get_dfs_nol(struct device *dev,
1027*5113495bSYour Name 				       void *info, u16 info_len)
1028*5113495bSYour Name {
1029*5113495bSYour Name 	return -EINVAL;
1030*5113495bSYour Name }
pld_get_wlan_mac_address(struct device * dev,uint32_t * num)1031*5113495bSYour Name static inline uint8_t *pld_get_wlan_mac_address(struct device *dev,
1032*5113495bSYour Name 						uint32_t *num)
1033*5113495bSYour Name {
1034*5113495bSYour Name 	*num = 0;
1035*5113495bSYour Name 	return NULL;
1036*5113495bSYour Name }
1037*5113495bSYour Name 
pld_get_wlan_derived_mac_address(struct device * dev,uint32_t * num)1038*5113495bSYour Name static inline uint8_t *pld_get_wlan_derived_mac_address(struct device *dev,
1039*5113495bSYour Name 							uint32_t *num)
1040*5113495bSYour Name {
1041*5113495bSYour Name 	*num = 0;
1042*5113495bSYour Name 	return NULL;
1043*5113495bSYour Name }
1044*5113495bSYour Name 
pld_increment_driver_load_cnt(struct device * dev)1045*5113495bSYour Name static inline void pld_increment_driver_load_cnt(struct device *dev) {}
pld_get_driver_load_cnt(struct device * dev)1046*5113495bSYour Name static inline int pld_get_driver_load_cnt(struct device *dev)
1047*5113495bSYour Name {
1048*5113495bSYour Name 	return -EINVAL;
1049*5113495bSYour Name }
1050*5113495bSYour Name #endif
1051*5113495bSYour Name 
1052*5113495bSYour Name /**
1053*5113495bSYour Name  * pld_wlan_pm_control() - WLAN PM control on PCIE
1054*5113495bSYour Name  * @dev: device
1055*5113495bSYour Name  * @vote: 0 for enable PCIE PC, 1 for disable PCIE PC
1056*5113495bSYour Name  *
1057*5113495bSYour Name  * This is for PCIE power collapse control during suspend/resume.
1058*5113495bSYour Name  * When PCIE power collapse is disabled, WLAN FW can access memory
1059*5113495bSYour Name  * through PCIE when system is suspended.
1060*5113495bSYour Name  *
1061*5113495bSYour Name  * Return: 0 for success
1062*5113495bSYour Name  *         Non zero failure code for errors
1063*5113495bSYour Name  */
1064*5113495bSYour Name int pld_wlan_pm_control(struct device *dev, bool vote);
1065*5113495bSYour Name 
1066*5113495bSYour Name /**
1067*5113495bSYour Name  * pld_get_virt_ramdump_mem() - Get virtual ramdump memory
1068*5113495bSYour Name  * @dev: device
1069*5113495bSYour Name  * @size: buffer to virtual memory size
1070*5113495bSYour Name  *
1071*5113495bSYour Name  * Return: virtual ramdump memory address
1072*5113495bSYour Name  */
1073*5113495bSYour Name void *pld_get_virt_ramdump_mem(struct device *dev, unsigned long *size);
1074*5113495bSYour Name 
1075*5113495bSYour Name /**
1076*5113495bSYour Name  * pld_release_virt_ramdump_mem() - Release virtual ramdump memory
1077*5113495bSYour Name  * @dev: device
1078*5113495bSYour Name  * @address: buffer to virtual memory address
1079*5113495bSYour Name  *
1080*5113495bSYour Name  * Return: void
1081*5113495bSYour Name  */
1082*5113495bSYour Name void pld_release_virt_ramdump_mem(struct device *dev, void *address);
1083*5113495bSYour Name 
1084*5113495bSYour Name /**
1085*5113495bSYour Name  * pld_device_crashed() - Notification for device crash event
1086*5113495bSYour Name  * @dev: device
1087*5113495bSYour Name  *
1088*5113495bSYour Name  * Notify subsystem a device crashed event. A subsystem restart
1089*5113495bSYour Name  * is expected to happen after calling this function.
1090*5113495bSYour Name  *
1091*5113495bSYour Name  * Return: void
1092*5113495bSYour Name  */
1093*5113495bSYour Name void pld_device_crashed(struct device *dev);
1094*5113495bSYour Name 
1095*5113495bSYour Name /**
1096*5113495bSYour Name  * pld_device_self_recovery() - Device self recovery
1097*5113495bSYour Name  * @dev: device
1098*5113495bSYour Name  * @reason: recovery reason
1099*5113495bSYour Name  *
1100*5113495bSYour Name  * Return: void
1101*5113495bSYour Name  */
1102*5113495bSYour Name void pld_device_self_recovery(struct device *dev,
1103*5113495bSYour Name 			      enum pld_recovery_reason reason);
1104*5113495bSYour Name 
1105*5113495bSYour Name /**
1106*5113495bSYour Name  * pld_intr_notify_q6() - Notify Q6 FW interrupts
1107*5113495bSYour Name  * @dev: device
1108*5113495bSYour Name  *
1109*5113495bSYour Name  * Notify Q6 that a FW interrupt is triggered.
1110*5113495bSYour Name  *
1111*5113495bSYour Name  * Return: void
1112*5113495bSYour Name  */
1113*5113495bSYour Name void pld_intr_notify_q6(struct device *dev);
1114*5113495bSYour Name 
1115*5113495bSYour Name /**
1116*5113495bSYour Name  * pld_request_pm_qos() - Request system PM
1117*5113495bSYour Name  * @dev: device
1118*5113495bSYour Name  * @qos_val: request value
1119*5113495bSYour Name  *
1120*5113495bSYour Name  * It votes for the value of aggregate QoS expectations.
1121*5113495bSYour Name  *
1122*5113495bSYour Name  * Return: void
1123*5113495bSYour Name  */
1124*5113495bSYour Name void pld_request_pm_qos(struct device *dev, u32 qos_val);
1125*5113495bSYour Name 
1126*5113495bSYour Name /**
1127*5113495bSYour Name  * pld_remove_pm_qos() - Remove system PM
1128*5113495bSYour Name  * @dev: device
1129*5113495bSYour Name  *
1130*5113495bSYour Name  * Remove the vote request for Qos expectations.
1131*5113495bSYour Name  *
1132*5113495bSYour Name  * Return: void
1133*5113495bSYour Name  */
1134*5113495bSYour Name void pld_remove_pm_qos(struct device *dev);
1135*5113495bSYour Name 
1136*5113495bSYour Name /**
1137*5113495bSYour Name  * pld_request_bus_bandwidth() - Request bus bandwidth
1138*5113495bSYour Name  * @dev: device
1139*5113495bSYour Name  * @bandwidth: bus bandwidth
1140*5113495bSYour Name  *
1141*5113495bSYour Name  * Votes for HIGH/MEDIUM/LOW bus bandwidth.
1142*5113495bSYour Name  *
1143*5113495bSYour Name  * Return: 0 for success
1144*5113495bSYour Name  *         Non zero failure code for errors
1145*5113495bSYour Name  */
1146*5113495bSYour Name int pld_request_bus_bandwidth(struct device *dev, int bandwidth);
1147*5113495bSYour Name 
1148*5113495bSYour Name /**
1149*5113495bSYour Name  * pld_get_platform_cap() - Get platform capabilities
1150*5113495bSYour Name  * @dev: device
1151*5113495bSYour Name  * @cap: buffer to the capabilities
1152*5113495bSYour Name  *
1153*5113495bSYour Name  * Return capabilities to the buffer.
1154*5113495bSYour Name  *
1155*5113495bSYour Name  * Return: 0 for success
1156*5113495bSYour Name  *         Non zero failure code for errors
1157*5113495bSYour Name  */
1158*5113495bSYour Name int pld_get_platform_cap(struct device *dev, struct pld_platform_cap *cap);
1159*5113495bSYour Name 
1160*5113495bSYour Name /**
1161*5113495bSYour Name  * pld_get_sha_hash() - Get sha hash number
1162*5113495bSYour Name  * @dev: device
1163*5113495bSYour Name  * @data: input data
1164*5113495bSYour Name  * @data_len: data length
1165*5113495bSYour Name  * @hash_idx: hash index
1166*5113495bSYour Name  * @out:  output buffer
1167*5113495bSYour Name  *
1168*5113495bSYour Name  * Return computed hash to the out buffer.
1169*5113495bSYour Name  *
1170*5113495bSYour Name  * Return: 0 for success
1171*5113495bSYour Name  *         Non zero failure code for errors
1172*5113495bSYour Name  */
1173*5113495bSYour Name int pld_get_sha_hash(struct device *dev, const u8 *data,
1174*5113495bSYour Name 		     u32 data_len, u8 *hash_idx, u8 *out);
1175*5113495bSYour Name 
1176*5113495bSYour Name /**
1177*5113495bSYour Name  * pld_get_fw_ptr() - Get secure FW memory address
1178*5113495bSYour Name  * @dev: device
1179*5113495bSYour Name  *
1180*5113495bSYour Name  * Return: secure memory address
1181*5113495bSYour Name  */
1182*5113495bSYour Name void *pld_get_fw_ptr(struct device *dev);
1183*5113495bSYour Name 
1184*5113495bSYour Name /**
1185*5113495bSYour Name  * pld_auto_suspend() - Auto suspend
1186*5113495bSYour Name  * @dev: device
1187*5113495bSYour Name  *
1188*5113495bSYour Name  * Return: 0 for success
1189*5113495bSYour Name  *         Non zero failure code for errors
1190*5113495bSYour Name  */
1191*5113495bSYour Name int pld_auto_suspend(struct device *dev);
1192*5113495bSYour Name 
1193*5113495bSYour Name /**
1194*5113495bSYour Name  * pld_auto_resume() - Auto resume
1195*5113495bSYour Name  * @dev: device
1196*5113495bSYour Name  *
1197*5113495bSYour Name  * Return: 0 for success
1198*5113495bSYour Name  *         Non zero failure code for errors
1199*5113495bSYour Name  */
1200*5113495bSYour Name int pld_auto_resume(struct device *dev);
1201*5113495bSYour Name 
1202*5113495bSYour Name /**
1203*5113495bSYour Name  * pld_force_wake_request() - Request vote to assert WAKE register
1204*5113495bSYour Name  * @dev: device
1205*5113495bSYour Name  *
1206*5113495bSYour Name  * Return: 0 for success
1207*5113495bSYour Name  *         Non zero failure code for errors
1208*5113495bSYour Name  */
1209*5113495bSYour Name int pld_force_wake_request(struct device *dev);
1210*5113495bSYour Name 
1211*5113495bSYour Name /**
1212*5113495bSYour Name  * pld_is_direct_link_supported() - Get whether direct_link is supported
1213*5113495bSYour Name  *                                  by FW or not
1214*5113495bSYour Name  * @dev: device
1215*5113495bSYour Name  *
1216*5113495bSYour Name  * Return: true if supported
1217*5113495bSYour Name  *         false on failure or if not supported
1218*5113495bSYour Name  */
1219*5113495bSYour Name bool pld_is_direct_link_supported(struct device *dev);
1220*5113495bSYour Name 
1221*5113495bSYour Name /**
1222*5113495bSYour Name  * pld_force_wake_request_sync() - Request to awake MHI synchronously
1223*5113495bSYour Name  * @dev: device
1224*5113495bSYour Name  * @timeout_us: timeout in micro-sec request to wake
1225*5113495bSYour Name  *
1226*5113495bSYour Name  * Return: 0 for success
1227*5113495bSYour Name  *         Non zero failure code for errors
1228*5113495bSYour Name  */
1229*5113495bSYour Name int pld_force_wake_request_sync(struct device *dev, int timeout_us);
1230*5113495bSYour Name 
1231*5113495bSYour Name /**
1232*5113495bSYour Name  * pld_exit_power_save() - Send EXIT_POWER_SAVE QMI to FW
1233*5113495bSYour Name  * @dev: device
1234*5113495bSYour Name  *
1235*5113495bSYour Name  * Return: 0 for success
1236*5113495bSYour Name  *         Non zero failure code for errors
1237*5113495bSYour Name  */
1238*5113495bSYour Name int pld_exit_power_save(struct device *dev);
1239*5113495bSYour Name 
1240*5113495bSYour Name /**
1241*5113495bSYour Name  * pld_is_device_awake() - Check if it's ready to access MMIO registers
1242*5113495bSYour Name  * @dev: device
1243*5113495bSYour Name  *
1244*5113495bSYour Name  * Return: True for device awake
1245*5113495bSYour Name  *         False for device not awake
1246*5113495bSYour Name  *         Negative failure code for errors
1247*5113495bSYour Name  */
1248*5113495bSYour Name int pld_is_device_awake(struct device *dev);
1249*5113495bSYour Name 
1250*5113495bSYour Name /**
1251*5113495bSYour Name  * pld_force_wake_release() - Release vote to assert WAKE register
1252*5113495bSYour Name  * @dev: device
1253*5113495bSYour Name  *
1254*5113495bSYour Name  * Return: 0 for success
1255*5113495bSYour Name  *         Non zero failure code for errors
1256*5113495bSYour Name  */
1257*5113495bSYour Name int pld_force_wake_release(struct device *dev);
1258*5113495bSYour Name 
1259*5113495bSYour Name /**
1260*5113495bSYour Name  * pld_ce_request_irq() - Register IRQ for CE
1261*5113495bSYour Name  * @dev: device
1262*5113495bSYour Name  * @ce_id: CE number
1263*5113495bSYour Name  * @handler: IRQ callback function
1264*5113495bSYour Name  * @flags: IRQ flags
1265*5113495bSYour Name  * @name: IRQ name
1266*5113495bSYour Name  * @ctx: IRQ context
1267*5113495bSYour Name  *
1268*5113495bSYour Name  * Return: 0 for success
1269*5113495bSYour Name  *         Non zero failure code for errors
1270*5113495bSYour Name  */
1271*5113495bSYour Name int pld_ce_request_irq(struct device *dev, unsigned int ce_id,
1272*5113495bSYour Name 		       irqreturn_t (*handler)(int, void *),
1273*5113495bSYour Name 		       unsigned long flags, const char *name, void *ctx);
1274*5113495bSYour Name 
1275*5113495bSYour Name /**
1276*5113495bSYour Name  * pld_ce_free_irq() - Free IRQ for CE
1277*5113495bSYour Name  * @dev: device
1278*5113495bSYour Name  * @ce_id: CE number
1279*5113495bSYour Name  * @ctx: IRQ context
1280*5113495bSYour Name  *
1281*5113495bSYour Name  * Return: 0 for success
1282*5113495bSYour Name  *         Non zero failure code for errors
1283*5113495bSYour Name  */
1284*5113495bSYour Name int pld_ce_free_irq(struct device *dev, unsigned int ce_id, void *ctx);
1285*5113495bSYour Name 
1286*5113495bSYour Name /**
1287*5113495bSYour Name  * pld_enable_irq() - Enable IRQ for CE
1288*5113495bSYour Name  * @dev: device
1289*5113495bSYour Name  * @ce_id: CE number
1290*5113495bSYour Name  *
1291*5113495bSYour Name  * Return: void
1292*5113495bSYour Name  */
1293*5113495bSYour Name void pld_enable_irq(struct device *dev, unsigned int ce_id);
1294*5113495bSYour Name 
1295*5113495bSYour Name /**
1296*5113495bSYour Name  * pld_disable_irq() - Disable IRQ for CE
1297*5113495bSYour Name  * @dev: device
1298*5113495bSYour Name  * @ce_id: CE number
1299*5113495bSYour Name  *
1300*5113495bSYour Name  * Return: void
1301*5113495bSYour Name  */
1302*5113495bSYour Name void pld_disable_irq(struct device *dev, unsigned int ce_id);
1303*5113495bSYour Name 
1304*5113495bSYour Name /**
1305*5113495bSYour Name  * pld_get_soc_info() - Get SOC information
1306*5113495bSYour Name  * @dev: device
1307*5113495bSYour Name  * @info: buffer to SOC information
1308*5113495bSYour Name  *
1309*5113495bSYour Name  * Return SOC info to the buffer.
1310*5113495bSYour Name  *
1311*5113495bSYour Name  * Return: 0 for success
1312*5113495bSYour Name  *         Non zero failure code for errors
1313*5113495bSYour Name  */
1314*5113495bSYour Name int pld_get_soc_info(struct device *dev, struct pld_soc_info *info);
1315*5113495bSYour Name 
1316*5113495bSYour Name /**
1317*5113495bSYour Name  * pld_get_mhi_state() - Get MHI state Info
1318*5113495bSYour Name  * @dev: device
1319*5113495bSYour Name  *
1320*5113495bSYour Name  * MHI state can be determined by reading this address.
1321*5113495bSYour Name  *
1322*5113495bSYour Name  * Return: MHI state
1323*5113495bSYour Name  */
1324*5113495bSYour Name int pld_get_mhi_state(struct device *dev);
1325*5113495bSYour Name 
1326*5113495bSYour Name /**
1327*5113495bSYour Name  * pld_is_pci_ep_awake() - Check if PCI EP is L0 state
1328*5113495bSYour Name  * @dev: device
1329*5113495bSYour Name  *
1330*5113495bSYour Name  * Return: True for PCI EP awake
1331*5113495bSYour Name  *         False for PCI EP not awake
1332*5113495bSYour Name  *         Negative failure code for errors
1333*5113495bSYour Name  */
1334*5113495bSYour Name int pld_is_pci_ep_awake(struct device *dev);
1335*5113495bSYour Name 
1336*5113495bSYour Name /**
1337*5113495bSYour Name  * pld_get_ce_id() - Get CE number for the provided IRQ
1338*5113495bSYour Name  * @dev: device
1339*5113495bSYour Name  * @irq: IRQ number
1340*5113495bSYour Name  *
1341*5113495bSYour Name  * Return: CE number
1342*5113495bSYour Name  */
1343*5113495bSYour Name int pld_get_ce_id(struct device *dev, int irq);
1344*5113495bSYour Name 
1345*5113495bSYour Name /**
1346*5113495bSYour Name  * pld_get_irq() - Get IRQ number for given CE ID
1347*5113495bSYour Name  * @dev: device
1348*5113495bSYour Name  * @ce_id: CE ID
1349*5113495bSYour Name  *
1350*5113495bSYour Name  * Return: IRQ number
1351*5113495bSYour Name  */
1352*5113495bSYour Name int pld_get_irq(struct device *dev, int ce_id);
1353*5113495bSYour Name 
1354*5113495bSYour Name /**
1355*5113495bSYour Name  * pld_lock_reg_window() - Lock register window spinlock
1356*5113495bSYour Name  * @dev: device pointer
1357*5113495bSYour Name  * @flags: variable pointer to save CPU states
1358*5113495bSYour Name  *
1359*5113495bSYour Name  * It uses spinlock_bh so avoid calling in top half context.
1360*5113495bSYour Name  *
1361*5113495bSYour Name  * Return: void
1362*5113495bSYour Name  */
1363*5113495bSYour Name void pld_lock_reg_window(struct device *dev, unsigned long *flags);
1364*5113495bSYour Name 
1365*5113495bSYour Name /**
1366*5113495bSYour Name  * pld_unlock_reg_window() - Unlock register window spinlock
1367*5113495bSYour Name  * @dev: device pointer
1368*5113495bSYour Name  * @flags: variable pointer to save CPU states
1369*5113495bSYour Name  *
1370*5113495bSYour Name  * It uses spinlock_bh so avoid calling in top half context.
1371*5113495bSYour Name  *
1372*5113495bSYour Name  * Return: void
1373*5113495bSYour Name  */
1374*5113495bSYour Name void pld_unlock_reg_window(struct device *dev, unsigned long *flags);
1375*5113495bSYour Name 
1376*5113495bSYour Name /**
1377*5113495bSYour Name  * pld_get_pci_slot() - Get PCI slot of attached device
1378*5113495bSYour Name  * @dev: device
1379*5113495bSYour Name  *
1380*5113495bSYour Name  * Return: pci slot
1381*5113495bSYour Name  */
1382*5113495bSYour Name int pld_get_pci_slot(struct device *dev);
1383*5113495bSYour Name 
1384*5113495bSYour Name /**
1385*5113495bSYour Name  * pld_power_on() - Power on WLAN hardware
1386*5113495bSYour Name  * @dev: device
1387*5113495bSYour Name  *
1388*5113495bSYour Name  * Return: 0 for success
1389*5113495bSYour Name  *         Non zero failure code for errors
1390*5113495bSYour Name  */
1391*5113495bSYour Name int pld_power_on(struct device *dev);
1392*5113495bSYour Name 
1393*5113495bSYour Name /**
1394*5113495bSYour Name  * pld_power_off() - Power off WLAN hardware
1395*5113495bSYour Name  * @dev: device
1396*5113495bSYour Name  *
1397*5113495bSYour Name  * Return: 0 for success
1398*5113495bSYour Name  *         Non zero failure code for errors
1399*5113495bSYour Name  */
1400*5113495bSYour Name int pld_power_off(struct device *dev);
1401*5113495bSYour Name 
1402*5113495bSYour Name /**
1403*5113495bSYour Name  * pld_athdiag_read() - Read data from WLAN FW
1404*5113495bSYour Name  * @dev: device
1405*5113495bSYour Name  * @offset: address offset
1406*5113495bSYour Name  * @memtype: memory type
1407*5113495bSYour Name  * @datalen: data length
1408*5113495bSYour Name  * @output: output buffer
1409*5113495bSYour Name  *
1410*5113495bSYour Name  * Return: 0 for success
1411*5113495bSYour Name  *         Non zero failure code for errors
1412*5113495bSYour Name  */
1413*5113495bSYour Name int pld_athdiag_read(struct device *dev, uint32_t offset, uint32_t memtype,
1414*5113495bSYour Name 		     uint32_t datalen, uint8_t *output);
1415*5113495bSYour Name 
1416*5113495bSYour Name /**
1417*5113495bSYour Name  * pld_athdiag_write() - Write data to WLAN FW
1418*5113495bSYour Name  * @dev: device
1419*5113495bSYour Name  * @offset: address offset
1420*5113495bSYour Name  * @memtype: memory type
1421*5113495bSYour Name  * @datalen: data length
1422*5113495bSYour Name  * @input: input buffer
1423*5113495bSYour Name  *
1424*5113495bSYour Name  * Return: 0 for success
1425*5113495bSYour Name  *         Non zero failure code for errors
1426*5113495bSYour Name  */
1427*5113495bSYour Name int pld_athdiag_write(struct device *dev, uint32_t offset, uint32_t memtype,
1428*5113495bSYour Name 		      uint32_t datalen, uint8_t *input);
1429*5113495bSYour Name 
1430*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))
1431*5113495bSYour Name /**
1432*5113495bSYour Name  * pld_smmu_get_domain() - Get SMMU domain
1433*5113495bSYour Name  * @dev: device
1434*5113495bSYour Name  *
1435*5113495bSYour Name  * Return: Pointer to the domain
1436*5113495bSYour Name  */
1437*5113495bSYour Name void *pld_smmu_get_domain(struct device *dev);
1438*5113495bSYour Name #else
1439*5113495bSYour Name /**
1440*5113495bSYour Name  * pld_smmu_get_mapping() - Get SMMU mapping context
1441*5113495bSYour Name  * @dev: device
1442*5113495bSYour Name  *
1443*5113495bSYour Name  * Return: Pointer to the mapping context
1444*5113495bSYour Name  */
1445*5113495bSYour Name void *pld_smmu_get_mapping(struct device *dev);
1446*5113495bSYour Name #endif
1447*5113495bSYour Name 
1448*5113495bSYour Name /**
1449*5113495bSYour Name  * pld_smmu_map() - Map SMMU
1450*5113495bSYour Name  * @dev: device
1451*5113495bSYour Name  * @paddr: physical address that needs to map to
1452*5113495bSYour Name  * @iova_addr: IOVA address
1453*5113495bSYour Name  * @size: size to be mapped
1454*5113495bSYour Name  *
1455*5113495bSYour Name  * Return: 0 for success
1456*5113495bSYour Name  *         Non zero failure code for errors
1457*5113495bSYour Name  */
1458*5113495bSYour Name int pld_smmu_map(struct device *dev, phys_addr_t paddr,
1459*5113495bSYour Name 		 uint32_t *iova_addr, size_t size);
1460*5113495bSYour Name 
1461*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0))
1462*5113495bSYour Name struct kobject *pld_get_wifi_kobj(struct device *dev);
1463*5113495bSYour Name #else
pld_get_wifi_kobj(struct device * dev)1464*5113495bSYour Name static inline struct kobject *pld_get_wifi_kobj(struct device *dev)
1465*5113495bSYour Name {
1466*5113495bSYour Name 	return NULL;
1467*5113495bSYour Name }
1468*5113495bSYour Name #endif
1469*5113495bSYour Name 
1470*5113495bSYour Name /**
1471*5113495bSYour Name  * pld_smmu_unmap() - Unmap SMMU
1472*5113495bSYour Name  * @dev: device
1473*5113495bSYour Name  * @iova_addr: IOVA address to be unmapped
1474*5113495bSYour Name  * @size: size to be unmapped
1475*5113495bSYour Name  *
1476*5113495bSYour Name  * Return: 0 for success
1477*5113495bSYour Name  *         Non zero failure code for errors
1478*5113495bSYour Name  */
1479*5113495bSYour Name #ifdef CONFIG_SMMU_S1_UNMAP
1480*5113495bSYour Name int pld_smmu_unmap(struct device *dev,
1481*5113495bSYour Name 		   uint32_t iova_addr, size_t size);
1482*5113495bSYour Name #else
pld_smmu_unmap(struct device * dev,uint32_t iova_addr,size_t size)1483*5113495bSYour Name static inline int pld_smmu_unmap(struct device *dev,
1484*5113495bSYour Name 				 uint32_t iova_addr, size_t size)
1485*5113495bSYour Name {
1486*5113495bSYour Name 	return 0;
1487*5113495bSYour Name }
1488*5113495bSYour Name #endif
1489*5113495bSYour Name 
1490*5113495bSYour Name /**
1491*5113495bSYour Name  * pld_get_user_msi_assignment() - Get MSI assignment information
1492*5113495bSYour Name  * @dev: device structure
1493*5113495bSYour Name  * @user_name: name of the user who requests the MSI assignment
1494*5113495bSYour Name  * @num_vectors: number of the MSI vectors assigned for the user
1495*5113495bSYour Name  * @user_base_data: MSI base data assigned for the user, this equals to
1496*5113495bSYour Name  *                  endpoint base data from config space plus base vector
1497*5113495bSYour Name  * @base_vector: base MSI vector (offset) number assigned for the user
1498*5113495bSYour Name  *
1499*5113495bSYour Name  * Return: 0 for success
1500*5113495bSYour Name  *         Negative failure code for errors
1501*5113495bSYour Name  */
1502*5113495bSYour Name int pld_get_user_msi_assignment(struct device *dev, char *user_name,
1503*5113495bSYour Name 				int *num_vectors, uint32_t *user_base_data,
1504*5113495bSYour Name 				uint32_t *base_vector);
1505*5113495bSYour Name 
1506*5113495bSYour Name /**
1507*5113495bSYour Name  * pld_get_msi_irq() - Get MSI IRQ number used for request_irq()
1508*5113495bSYour Name  * @dev: device structure
1509*5113495bSYour Name  * @vector: MSI vector (offset) number
1510*5113495bSYour Name  *
1511*5113495bSYour Name  * Return: Positive IRQ number for success
1512*5113495bSYour Name  *         Negative failure code for errors
1513*5113495bSYour Name  */
1514*5113495bSYour Name int pld_get_msi_irq(struct device *dev, unsigned int vector);
1515*5113495bSYour Name 
1516*5113495bSYour Name /**
1517*5113495bSYour Name  * pld_get_msi_address() - Get the MSI address
1518*5113495bSYour Name  * @dev: device structure
1519*5113495bSYour Name  * @msi_addr_low: lower 32-bit of the address
1520*5113495bSYour Name  * @msi_addr_high: higher 32-bit of the address
1521*5113495bSYour Name  *
1522*5113495bSYour Name  * Return: Void
1523*5113495bSYour Name  */
1524*5113495bSYour Name void pld_get_msi_address(struct device *dev, uint32_t *msi_addr_low,
1525*5113495bSYour Name 			 uint32_t *msi_addr_high);
1526*5113495bSYour Name 
1527*5113495bSYour Name /**
1528*5113495bSYour Name  * pld_is_drv_connected() - Check if DRV subsystem is connected
1529*5113495bSYour Name  * @dev: device structure
1530*5113495bSYour Name  *
1531*5113495bSYour Name  *  Return: 1 DRV is connected
1532*5113495bSYour Name  *          0 DRV is not connected
1533*5113495bSYour Name  *          Non zero failure code for errors
1534*5113495bSYour Name  */
1535*5113495bSYour Name int pld_is_drv_connected(struct device *dev);
1536*5113495bSYour Name 
1537*5113495bSYour Name /**
1538*5113495bSYour Name  * pld_socinfo_get_serial_number() - Get SOC serial number
1539*5113495bSYour Name  * @dev: device
1540*5113495bSYour Name  *
1541*5113495bSYour Name  * Return: SOC serial number
1542*5113495bSYour Name  */
1543*5113495bSYour Name unsigned int pld_socinfo_get_serial_number(struct device *dev);
1544*5113495bSYour Name 
1545*5113495bSYour Name /**
1546*5113495bSYour Name  * pld_is_qmi_disable() - Check QMI support is present or not
1547*5113495bSYour Name  * @dev: device
1548*5113495bSYour Name  *
1549*5113495bSYour Name  *  Return: 1 QMI is not supported
1550*5113495bSYour Name  *          0 QMI is supported
1551*5113495bSYour Name  *          Non zero failure code for errors
1552*5113495bSYour Name  */
1553*5113495bSYour Name int pld_is_qmi_disable(struct device *dev);
1554*5113495bSYour Name 
1555*5113495bSYour Name /**
1556*5113495bSYour Name  * pld_is_fw_down() - Check WLAN fw is down or not
1557*5113495bSYour Name  *
1558*5113495bSYour Name  * @dev: device
1559*5113495bSYour Name  *
1560*5113495bSYour Name  * This API will be called to check if WLAN FW is down or not.
1561*5113495bSYour Name  *
1562*5113495bSYour Name  *  Return: 0 FW is not down
1563*5113495bSYour Name  *          Otherwise FW is down
1564*5113495bSYour Name  *          Always return 0 for unsupported bus type
1565*5113495bSYour Name  */
1566*5113495bSYour Name int pld_is_fw_down(struct device *dev);
1567*5113495bSYour Name 
1568*5113495bSYour Name /**
1569*5113495bSYour Name  * pld_force_assert_target() - Send a force assert request to FW.
1570*5113495bSYour Name  * @dev: device pointer
1571*5113495bSYour Name  *
1572*5113495bSYour Name  * This can use various sideband requests available at platform driver to
1573*5113495bSYour Name  * initiate a FW assert.
1574*5113495bSYour Name  *
1575*5113495bSYour Name  * Context: Any context
1576*5113495bSYour Name  * Return:
1577*5113495bSYour Name  * 0 - force assert of FW is triggered successfully.
1578*5113495bSYour Name  * -EOPNOTSUPP - force assert is not supported.
1579*5113495bSYour Name  * Other non-zero codes - other failures or errors
1580*5113495bSYour Name  */
1581*5113495bSYour Name int pld_force_assert_target(struct device *dev);
1582*5113495bSYour Name 
1583*5113495bSYour Name /**
1584*5113495bSYour Name  * pld_force_collect_target_dump() - Collect FW dump after asserting FW.
1585*5113495bSYour Name  * @dev: device pointer
1586*5113495bSYour Name  *
1587*5113495bSYour Name  * This API will send force assert request to FW and wait till FW dump has
1588*5113495bSYour Name  * been collected.
1589*5113495bSYour Name  *
1590*5113495bSYour Name  * Context: Process context only since this is a blocking call.
1591*5113495bSYour Name  * Return:
1592*5113495bSYour Name  * 0 - FW dump is collected successfully.
1593*5113495bSYour Name  * -EOPNOTSUPP - forcing assert and collecting FW dump is not supported.
1594*5113495bSYour Name  * -ETIMEDOUT - FW dump collection is timed out for any reason.
1595*5113495bSYour Name  * Other non-zero codes - other failures or errors
1596*5113495bSYour Name  */
1597*5113495bSYour Name int pld_force_collect_target_dump(struct device *dev);
1598*5113495bSYour Name 
1599*5113495bSYour Name /**
1600*5113495bSYour Name  * pld_qmi_send_get() - Indicate certain data to be sent over QMI
1601*5113495bSYour Name  * @dev: device pointer
1602*5113495bSYour Name  *
1603*5113495bSYour Name  * This API can be used to indicate certain data to be sent over QMI.
1604*5113495bSYour Name  * pld_qmi_send() is expected to be called later.
1605*5113495bSYour Name  *
1606*5113495bSYour Name  * Return: 0 for success
1607*5113495bSYour Name  *         Non zero failure code for errors
1608*5113495bSYour Name  */
1609*5113495bSYour Name int pld_qmi_send_get(struct device *dev);
1610*5113495bSYour Name 
1611*5113495bSYour Name /**
1612*5113495bSYour Name  * pld_qmi_send_put() - Indicate response sent over QMI has been processed
1613*5113495bSYour Name  * @dev: device pointer
1614*5113495bSYour Name  *
1615*5113495bSYour Name  * This API can be used to indicate response of the data sent over QMI has
1616*5113495bSYour Name  * been processed.
1617*5113495bSYour Name  *
1618*5113495bSYour Name  * Return: 0 for success
1619*5113495bSYour Name  *         Non zero failure code for errors
1620*5113495bSYour Name  */
1621*5113495bSYour Name int pld_qmi_send_put(struct device *dev);
1622*5113495bSYour Name 
1623*5113495bSYour Name /**
1624*5113495bSYour Name  * pld_qmi_send() - Send data request over QMI
1625*5113495bSYour Name  * @dev: device pointer
1626*5113495bSYour Name  * @type: type of the send data operation
1627*5113495bSYour Name  * @cmd: buffer pointer of send data request command
1628*5113495bSYour Name  * @cmd_len: size of the command buffer
1629*5113495bSYour Name  * @cb_ctx: context pointer if any to pass back in callback
1630*5113495bSYour Name  * @cb: callback pointer to pass response back
1631*5113495bSYour Name  *
1632*5113495bSYour Name  * This API can be used to send data request over QMI.
1633*5113495bSYour Name  *
1634*5113495bSYour Name  * Return: 0 if data request sends successfully
1635*5113495bSYour Name  *         Non zero failure code for errors
1636*5113495bSYour Name  */
1637*5113495bSYour Name int pld_qmi_send(struct device *dev, int type, void *cmd,
1638*5113495bSYour Name 		 int cmd_len, void *cb_ctx,
1639*5113495bSYour Name 		 int (*cb)(void *ctx, void *event, int event_len));
1640*5113495bSYour Name 
1641*5113495bSYour Name /**
1642*5113495bSYour Name  * pld_qmi_indication() - Send data request over QMI
1643*5113495bSYour Name  * @dev: device pointer
1644*5113495bSYour Name  * @cb_ctx: context pointer if any to pass back in callback
1645*5113495bSYour Name  * @cb: callback pointer to pass response back
1646*5113495bSYour Name  *
1647*5113495bSYour Name  * This API can be used to register for QMI events.
1648*5113495bSYour Name  *
1649*5113495bSYour Name  * Return: 0 if registration is successful
1650*5113495bSYour Name  *         Non zero failure code for errors
1651*5113495bSYour Name  */
1652*5113495bSYour Name int pld_qmi_indication(struct device *dev, void *cb_ctx,
1653*5113495bSYour Name 		       int (*cb)(void *ctx, uint16_t type,
1654*5113495bSYour Name 				 void *event, int event_len));
1655*5113495bSYour Name 
1656*5113495bSYour Name /**
1657*5113495bSYour Name  * pld_is_fw_dump_skipped() - get fw dump skipped status.
1658*5113495bSYour Name  * @dev: device
1659*5113495bSYour Name  *
1660*5113495bSYour Name  * The subsys ssr status help the driver to decide whether to skip
1661*5113495bSYour Name  * the FW memory dump when FW assert.
1662*5113495bSYour Name  * For SDIO case, the memory dump progress takes 1 minutes to
1663*5113495bSYour Name  * complete, which is not acceptable in SSR enabled.
1664*5113495bSYour Name  *
1665*5113495bSYour Name  * Return: true if need to skip FW dump.
1666*5113495bSYour Name  */
1667*5113495bSYour Name bool pld_is_fw_dump_skipped(struct device *dev);
1668*5113495bSYour Name 
1669*5113495bSYour Name /**
1670*5113495bSYour Name  * pld_is_low_power_mode() - Check WLAN fw is in low power
1671*5113495bSYour Name  * @dev: device
1672*5113495bSYour Name  *
1673*5113495bSYour Name  * This API will be called to check if WLAN FW is in low power or not.
1674*5113495bSYour Name  * Low power means either Deep Sleep or Hibernate state.
1675*5113495bSYour Name  *
1676*5113495bSYour Name  * Return: 0 FW is not in low power mode
1677*5113495bSYour Name  *         Otherwise FW is low power mode
1678*5113495bSYour Name  *         Always return 0 for unsupported bus type
1679*5113495bSYour Name  */
1680*5113495bSYour Name #ifdef CONFIG_ENABLE_LOW_POWER_MODE
1681*5113495bSYour Name int pld_is_low_power_mode(struct device *dev);
1682*5113495bSYour Name #else
pld_is_low_power_mode(struct device * dev)1683*5113495bSYour Name static inline int pld_is_low_power_mode(struct device *dev)
1684*5113495bSYour Name {
1685*5113495bSYour Name 	return 0;
1686*5113495bSYour Name }
1687*5113495bSYour Name #endif
1688*5113495bSYour Name 
1689*5113495bSYour Name /**
1690*5113495bSYour Name  * pld_is_pdr() - Check WLAN PD is Restarted
1691*5113495bSYour Name  * @dev: device
1692*5113495bSYour Name  *
1693*5113495bSYour Name  * Help the driver decide whether FW down is due to
1694*5113495bSYour Name  * WLAN PD Restart.
1695*5113495bSYour Name  *
1696*5113495bSYour Name  * Return: 1 WLAN PD is Restarted
1697*5113495bSYour Name  *         0 WLAN PD is not Restarted
1698*5113495bSYour Name  */
1699*5113495bSYour Name int pld_is_pdr(struct device *dev);
1700*5113495bSYour Name 
1701*5113495bSYour Name /**
1702*5113495bSYour Name  * pld_is_fw_rejuvenate() - Check WLAN fw is rejuvenating
1703*5113495bSYour Name  * @dev: device
1704*5113495bSYour Name  *
1705*5113495bSYour Name  * Help the driver decide whether FW down is due to
1706*5113495bSYour Name  * SSR or FW rejuvenate.
1707*5113495bSYour Name  *
1708*5113495bSYour Name  * Return: 1 FW is rejuvenating
1709*5113495bSYour Name  *         0 FW is not rejuvenating
1710*5113495bSYour Name  */
1711*5113495bSYour Name int pld_is_fw_rejuvenate(struct device *dev);
1712*5113495bSYour Name 
1713*5113495bSYour Name /**
1714*5113495bSYour Name  * pld_have_platform_driver_support() - check if platform driver support
1715*5113495bSYour Name  * @dev: device
1716*5113495bSYour Name  *
1717*5113495bSYour Name  * Return: true if platform driver support.
1718*5113495bSYour Name  */
1719*5113495bSYour Name bool pld_have_platform_driver_support(struct device *dev);
1720*5113495bSYour Name 
1721*5113495bSYour Name /**
1722*5113495bSYour Name  * pld_idle_shutdown - request idle shutdown callback from platform driver
1723*5113495bSYour Name  * @dev: pointer to struct dev
1724*5113495bSYour Name  * @shutdown_cb: pointer to hdd psoc idle shutdown callback handler
1725*5113495bSYour Name  *
1726*5113495bSYour Name  * Return: 0 for success and non-zero negative error code for failure
1727*5113495bSYour Name  */
1728*5113495bSYour Name int pld_idle_shutdown(struct device *dev,
1729*5113495bSYour Name 		      int (*shutdown_cb)(struct device *dev));
1730*5113495bSYour Name 
1731*5113495bSYour Name /**
1732*5113495bSYour Name  * pld_idle_restart - request idle restart callback from platform driver
1733*5113495bSYour Name  * @dev: pointer to struct dev
1734*5113495bSYour Name  * @restart_cb: pointer to hdd psoc idle restart callback handler
1735*5113495bSYour Name  *
1736*5113495bSYour Name  * Return: 0 for success and non-zero negative error code for failure
1737*5113495bSYour Name  */
1738*5113495bSYour Name int pld_idle_restart(struct device *dev,
1739*5113495bSYour Name 		     int (*restart_cb)(struct device *dev));
1740*5113495bSYour Name 
1741*5113495bSYour Name /**
1742*5113495bSYour Name  * pld_srng_devm_request_irq() - Register IRQ for SRNG
1743*5113495bSYour Name  * @dev: device
1744*5113495bSYour Name  * @irq: IRQ number
1745*5113495bSYour Name  * @handler: IRQ callback function
1746*5113495bSYour Name  * @irqflags: IRQ flags
1747*5113495bSYour Name  * @name: IRQ name
1748*5113495bSYour Name  * @ctx: IRQ context
1749*5113495bSYour Name  *
1750*5113495bSYour Name  * Return: 0 for success
1751*5113495bSYour Name  *         Non zero failure code for errors
1752*5113495bSYour Name  */
1753*5113495bSYour Name int pld_srng_devm_request_irq(struct device *dev, int irq,
1754*5113495bSYour Name 			      irq_handler_t handler,
1755*5113495bSYour Name 			      unsigned long irqflags,
1756*5113495bSYour Name 			      const char *name,
1757*5113495bSYour Name 			      void *ctx);
1758*5113495bSYour Name 
1759*5113495bSYour Name /**
1760*5113495bSYour Name  * pld_srng_request_irq() - Register IRQ for SRNG
1761*5113495bSYour Name  * @dev: device
1762*5113495bSYour Name  * @irq: IRQ number
1763*5113495bSYour Name  * @handler: IRQ callback function
1764*5113495bSYour Name  * @irqflags: IRQ flags
1765*5113495bSYour Name  * @name: IRQ name
1766*5113495bSYour Name  * @ctx: IRQ context
1767*5113495bSYour Name  *
1768*5113495bSYour Name  * Return: 0 for success
1769*5113495bSYour Name  *         Non zero failure code for errors
1770*5113495bSYour Name  */
1771*5113495bSYour Name int pld_srng_request_irq(struct device *dev, int irq, irq_handler_t handler,
1772*5113495bSYour Name 			 unsigned long irqflags,
1773*5113495bSYour Name 			 const char *name,
1774*5113495bSYour Name 			 void *ctx);
1775*5113495bSYour Name 
1776*5113495bSYour Name /**
1777*5113495bSYour Name  * pld_srng_free_irq() - Free IRQ for SRNG
1778*5113495bSYour Name  * @dev: device
1779*5113495bSYour Name  * @irq: IRQ number
1780*5113495bSYour Name  * @ctx: IRQ context
1781*5113495bSYour Name  *
1782*5113495bSYour Name  * Return: 0 for success
1783*5113495bSYour Name  *         Non zero failure code for errors
1784*5113495bSYour Name  */
1785*5113495bSYour Name int pld_srng_free_irq(struct device *dev, int irq, void *ctx);
1786*5113495bSYour Name 
1787*5113495bSYour Name /**
1788*5113495bSYour Name  * pld_srng_enable_irq() - Enable IRQ for SRNG
1789*5113495bSYour Name  * @dev: device
1790*5113495bSYour Name  * @irq: IRQ number
1791*5113495bSYour Name  *
1792*5113495bSYour Name  * Return: void
1793*5113495bSYour Name  */
1794*5113495bSYour Name void pld_srng_enable_irq(struct device *dev, int irq);
1795*5113495bSYour Name 
1796*5113495bSYour Name /**
1797*5113495bSYour Name  * pld_srng_disable_irq() - Disable IRQ for SRNG
1798*5113495bSYour Name  * @dev: device
1799*5113495bSYour Name  * @irq: IRQ number
1800*5113495bSYour Name  *
1801*5113495bSYour Name  * Return: void
1802*5113495bSYour Name  */
1803*5113495bSYour Name void pld_srng_disable_irq(struct device *dev, int irq);
1804*5113495bSYour Name 
1805*5113495bSYour Name /**
1806*5113495bSYour Name  * pld_srng_disable_irq_sync() - Synchronouus disable IRQ for SRNG
1807*5113495bSYour Name  * @dev: device
1808*5113495bSYour Name  * @irq: IRQ number
1809*5113495bSYour Name  *
1810*5113495bSYour Name  * Return: void
1811*5113495bSYour Name  */
1812*5113495bSYour Name void pld_srng_disable_irq_sync(struct device *dev, int irq);
1813*5113495bSYour Name 
1814*5113495bSYour Name /**
1815*5113495bSYour Name  * pld_pci_read_config_word() - Read PCI config
1816*5113495bSYour Name  * @pdev: pci device
1817*5113495bSYour Name  * @offset: Config space offset
1818*5113495bSYour Name  * @val : Value
1819*5113495bSYour Name  *
1820*5113495bSYour Name  * Return: 0 for success
1821*5113495bSYour Name  *         Non zero failure code for errors
1822*5113495bSYour Name  */
1823*5113495bSYour Name int pld_pci_read_config_word(struct pci_dev *pdev, int offset, uint16_t *val);
1824*5113495bSYour Name 
1825*5113495bSYour Name /**
1826*5113495bSYour Name  * pld_pci_write_config_word() - Write PCI config
1827*5113495bSYour Name  * @pdev: pci device
1828*5113495bSYour Name  * @offset: Config space offset
1829*5113495bSYour Name  * @val : Value
1830*5113495bSYour Name  *
1831*5113495bSYour Name  * Return: 0 for success
1832*5113495bSYour Name  *         Non zero failure code for errors
1833*5113495bSYour Name  */
1834*5113495bSYour Name int pld_pci_write_config_word(struct pci_dev *pdev, int offset, uint16_t val);
1835*5113495bSYour Name 
1836*5113495bSYour Name /**
1837*5113495bSYour Name  * pld_pci_read_config_dword() - Read PCI config
1838*5113495bSYour Name  * @pdev: pci device
1839*5113495bSYour Name  * @offset: Config space offset
1840*5113495bSYour Name  * @val : Value
1841*5113495bSYour Name  *
1842*5113495bSYour Name  * Return: 0 for success
1843*5113495bSYour Name  *         Non zero failure code for errors
1844*5113495bSYour Name  */
1845*5113495bSYour Name int pld_pci_read_config_dword(struct pci_dev *pdev, int offset, uint32_t *val);
1846*5113495bSYour Name 
1847*5113495bSYour Name /**
1848*5113495bSYour Name  * pld_pci_write_config_dword() - Write PCI config
1849*5113495bSYour Name  * @pdev: pci device
1850*5113495bSYour Name  * @offset: Config space offset
1851*5113495bSYour Name  * @val : Value
1852*5113495bSYour Name  *
1853*5113495bSYour Name  * Return: 0 for success
1854*5113495bSYour Name  *         Non zero failure code for errors
1855*5113495bSYour Name  */
1856*5113495bSYour Name int pld_pci_write_config_dword(struct pci_dev *pdev, int offset, uint32_t val);
1857*5113495bSYour Name 
1858*5113495bSYour Name /**
1859*5113495bSYour Name  * pld_thermal_register() - Register the thermal device with the thermal system
1860*5113495bSYour Name  * @dev: The device structure
1861*5113495bSYour Name  * @state: The max state to be configured on registration
1862*5113495bSYour Name  * @mon_id: Thermal cooling device ID
1863*5113495bSYour Name  *
1864*5113495bSYour Name  * Return: Error code on error
1865*5113495bSYour Name  */
1866*5113495bSYour Name int pld_thermal_register(struct device *dev, unsigned long state, int mon_id);
1867*5113495bSYour Name 
1868*5113495bSYour Name /**
1869*5113495bSYour Name  * pld_thermal_unregister() - Unregister the device with the thermal system
1870*5113495bSYour Name  * @dev: The device structure
1871*5113495bSYour Name  * @mon_id: Thermal cooling device ID
1872*5113495bSYour Name  *
1873*5113495bSYour Name  * Return: None
1874*5113495bSYour Name  */
1875*5113495bSYour Name void pld_thermal_unregister(struct device *dev, int mon_id);
1876*5113495bSYour Name 
1877*5113495bSYour Name /**
1878*5113495bSYour Name  * pld_set_wfc_mode() - Sent WFC mode to FW via platform driver
1879*5113495bSYour Name  * @dev: The device structure
1880*5113495bSYour Name  * @wfc_mode: WFC Modes (0 => Inactive, 1 => Active)
1881*5113495bSYour Name  *
1882*5113495bSYour Name  * Return: Error code on error
1883*5113495bSYour Name  */
1884*5113495bSYour Name int pld_set_wfc_mode(struct device *dev, enum pld_wfc_mode wfc_mode);
1885*5113495bSYour Name 
1886*5113495bSYour Name /**
1887*5113495bSYour Name  * pld_bus_width_type_to_str() - Helper function to convert PLD bandwidth level
1888*5113495bSYour Name  *				 to string
1889*5113495bSYour Name  * @level: PLD bus width level
1890*5113495bSYour Name  *
1891*5113495bSYour Name  * Return: String corresponding to input "level"
1892*5113495bSYour Name  */
1893*5113495bSYour Name const char *pld_bus_width_type_to_str(enum pld_bus_width_type level);
1894*5113495bSYour Name 
1895*5113495bSYour Name /**
1896*5113495bSYour Name  * pld_get_thermal_state() - Get the current thermal state from the PLD
1897*5113495bSYour Name  * @dev: The device structure
1898*5113495bSYour Name  * @thermal_state: param to store the current thermal state
1899*5113495bSYour Name  * @mon_id: Thermal cooling device ID
1900*5113495bSYour Name  *
1901*5113495bSYour Name  * Return: Non-zero code for error; zero for success
1902*5113495bSYour Name  */
1903*5113495bSYour Name int pld_get_thermal_state(struct device *dev, unsigned long *thermal_state,
1904*5113495bSYour Name 			  int mon_id);
1905*5113495bSYour Name 
1906*5113495bSYour Name /**
1907*5113495bSYour Name  * pld_set_tsf_sync_period() - Set TSF sync period
1908*5113495bSYour Name  * @dev: device
1909*5113495bSYour Name  * @val: TSF sync time value
1910*5113495bSYour Name  *
1911*5113495bSYour Name  * Return: void
1912*5113495bSYour Name  */
1913*5113495bSYour Name void pld_set_tsf_sync_period(struct device *dev, u32 val);
1914*5113495bSYour Name 
1915*5113495bSYour Name /**
1916*5113495bSYour Name  * pld_reset_tsf_sync_period() - Reset TSF sync period
1917*5113495bSYour Name  * @dev: device
1918*5113495bSYour Name  *
1919*5113495bSYour Name  * Return: void
1920*5113495bSYour Name  */
1921*5113495bSYour Name void pld_reset_tsf_sync_period(struct device *dev);
1922*5113495bSYour Name 
1923*5113495bSYour Name #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))
1924*5113495bSYour Name /**
1925*5113495bSYour Name  * pld_is_ipa_offload_disabled() - Check if IPA offload is enabled or not
1926*5113495bSYour Name  * @dev: The device structure
1927*5113495bSYour Name  *
1928*5113495bSYour Name  * Return: Non-zero code for IPA offload disable; zero for IPA offload enable
1929*5113495bSYour Name  */
1930*5113495bSYour Name int pld_is_ipa_offload_disabled(struct device *dev);
1931*5113495bSYour Name #else
1932*5113495bSYour Name static inline
pld_is_ipa_offload_disabled(struct device * dev)1933*5113495bSYour Name int pld_is_ipa_offload_disabled(struct device *dev)
1934*5113495bSYour Name {
1935*5113495bSYour Name 	return 0;
1936*5113495bSYour Name }
1937*5113495bSYour Name #endif
1938*5113495bSYour Name 
1939*5113495bSYour Name #if defined(CNSS_MEM_PRE_ALLOC) && defined(FEATURE_SKB_PRE_ALLOC)
1940*5113495bSYour Name 
1941*5113495bSYour Name /**
1942*5113495bSYour Name  * pld_nbuf_pre_alloc() - get allocated nbuf from platform driver.
1943*5113495bSYour Name  * @size: Netbuf requested size
1944*5113495bSYour Name  *
1945*5113495bSYour Name  * Return: nbuf or NULL if no memory
1946*5113495bSYour Name  */
pld_nbuf_pre_alloc(size_t size)1947*5113495bSYour Name static inline struct sk_buff *pld_nbuf_pre_alloc(size_t size)
1948*5113495bSYour Name {
1949*5113495bSYour Name 	struct sk_buff *skb = NULL;
1950*5113495bSYour Name 
1951*5113495bSYour Name 	if (size >= WCNSS_PRE_SKB_ALLOC_GET_THRESHOLD)
1952*5113495bSYour Name 		skb = wcnss_skb_prealloc_get(size);
1953*5113495bSYour Name 
1954*5113495bSYour Name 	return skb;
1955*5113495bSYour Name }
1956*5113495bSYour Name 
1957*5113495bSYour Name /**
1958*5113495bSYour Name  * pld_nbuf_pre_alloc_free() - free the nbuf allocated in platform driver.
1959*5113495bSYour Name  * @skb: Pointer to network buffer
1960*5113495bSYour Name  *
1961*5113495bSYour Name  * Return: TRUE if the nbuf is freed
1962*5113495bSYour Name  */
pld_nbuf_pre_alloc_free(struct sk_buff * skb)1963*5113495bSYour Name static inline int pld_nbuf_pre_alloc_free(struct sk_buff *skb)
1964*5113495bSYour Name {
1965*5113495bSYour Name 	return wcnss_skb_prealloc_put(skb);
1966*5113495bSYour Name }
1967*5113495bSYour Name #else
pld_nbuf_pre_alloc(size_t size)1968*5113495bSYour Name static inline struct sk_buff *pld_nbuf_pre_alloc(size_t size)
1969*5113495bSYour Name {
1970*5113495bSYour Name 	return NULL;
1971*5113495bSYour Name }
pld_nbuf_pre_alloc_free(struct sk_buff * skb)1972*5113495bSYour Name static inline int pld_nbuf_pre_alloc_free(struct sk_buff *skb)
1973*5113495bSYour Name {
1974*5113495bSYour Name 	return 0;
1975*5113495bSYour Name }
1976*5113495bSYour Name #endif
1977*5113495bSYour Name 
1978*5113495bSYour Name #ifdef CONFIG_AFC_SUPPORT
1979*5113495bSYour Name /**
1980*5113495bSYour Name  * pld_send_buffer_to_afcmem() - Send afc data to afc memory
1981*5113495bSYour Name  * @dev: The device structure
1982*5113495bSYour Name  * @afcdb: Pointer to afc data buffer
1983*5113495bSYour Name  * @len: Length of afc data
1984*5113495bSYour Name  * @slotid: Slot id of afc memory
1985*5113495bSYour Name  *
1986*5113495bSYour Name  * Return: Non-zero code for error; zero for success
1987*5113495bSYour Name  */
1988*5113495bSYour Name int pld_send_buffer_to_afcmem(struct device *dev, const uint8_t *afcdb,
1989*5113495bSYour Name 			      uint32_t len, uint8_t slotid);
1990*5113495bSYour Name 
1991*5113495bSYour Name /**
1992*5113495bSYour Name  * pld_reset_afcmem() - Reset afc data in afc memory
1993*5113495bSYour Name  * @dev: The device structure
1994*5113495bSYour Name  * @slotid: Slot id of afc memory
1995*5113495bSYour Name  *
1996*5113495bSYour Name  * Return: Non-zero code for error; zero for success
1997*5113495bSYour Name  */
1998*5113495bSYour Name int pld_reset_afcmem(struct device *dev, uint8_t slotid);
1999*5113495bSYour Name #else
2000*5113495bSYour Name static inline
pld_send_buffer_to_afcmem(struct device * dev,const uint8_t * afcdb,uint32_t len,uint8_t slotid)2001*5113495bSYour Name int pld_send_buffer_to_afcmem(struct device *dev, const uint8_t *afcdb,
2002*5113495bSYour Name 			      uint32_t len, uint8_t slotid)
2003*5113495bSYour Name {
2004*5113495bSYour Name 	return -EINVAL;
2005*5113495bSYour Name }
2006*5113495bSYour Name 
2007*5113495bSYour Name static inline
pld_reset_afcmem(struct device * dev,uint8_t slotid)2008*5113495bSYour Name int pld_reset_afcmem(struct device *dev, uint8_t slotid)
2009*5113495bSYour Name {
2010*5113495bSYour Name 	return -EINVAL;
2011*5113495bSYour Name }
2012*5113495bSYour Name #endif
2013*5113495bSYour Name 
2014*5113495bSYour Name /**
2015*5113495bSYour Name  * pld_get_bus_type() - Bus type of the device
2016*5113495bSYour Name  * @dev: device
2017*5113495bSYour Name  *
2018*5113495bSYour Name  * Return: PLD bus type
2019*5113495bSYour Name  */
2020*5113495bSYour Name enum pld_bus_type pld_get_bus_type(struct device *dev);
2021*5113495bSYour Name 
pfrm_devm_request_irq(struct device * dev,unsigned int ce_id,irqreturn_t (* handler)(int,void *),unsigned long flags,const char * name,void * ctx)2022*5113495bSYour Name static inline int pfrm_devm_request_irq(struct device *dev, unsigned int ce_id,
2023*5113495bSYour Name 					irqreturn_t (*handler)(int, void *),
2024*5113495bSYour Name 					unsigned long flags, const char *name,
2025*5113495bSYour Name 					void *ctx)
2026*5113495bSYour Name {
2027*5113495bSYour Name 	return pld_srng_devm_request_irq(dev, ce_id, handler, flags, name, ctx);
2028*5113495bSYour Name }
2029*5113495bSYour Name 
pfrm_request_irq(struct device * dev,unsigned int ce_id,irqreturn_t (* handler)(int,void *),unsigned long flags,const char * name,void * ctx)2030*5113495bSYour Name static inline int pfrm_request_irq(struct device *dev, unsigned int ce_id,
2031*5113495bSYour Name 				   irqreturn_t (*handler)(int, void *),
2032*5113495bSYour Name 				   unsigned long flags, const char *name,
2033*5113495bSYour Name 				   void *ctx)
2034*5113495bSYour Name {
2035*5113495bSYour Name 	return pld_srng_request_irq(dev, ce_id, handler, flags, name, ctx);
2036*5113495bSYour Name }
2037*5113495bSYour Name 
pfrm_free_irq(struct device * dev,int irq,void * ctx)2038*5113495bSYour Name static inline int pfrm_free_irq(struct device *dev, int irq, void *ctx)
2039*5113495bSYour Name {
2040*5113495bSYour Name 	return pld_srng_free_irq(dev, irq, ctx);
2041*5113495bSYour Name }
2042*5113495bSYour Name 
pfrm_enable_irq(struct device * dev,int irq)2043*5113495bSYour Name static inline void pfrm_enable_irq(struct device *dev, int irq)
2044*5113495bSYour Name {
2045*5113495bSYour Name 	pld_srng_enable_irq(dev, irq);
2046*5113495bSYour Name }
2047*5113495bSYour Name 
pfrm_disable_irq_nosync(struct device * dev,int irq)2048*5113495bSYour Name static inline void pfrm_disable_irq_nosync(struct device *dev, int irq)
2049*5113495bSYour Name {
2050*5113495bSYour Name 	pld_srng_disable_irq(dev, irq);
2051*5113495bSYour Name }
2052*5113495bSYour Name 
pfrm_disable_irq(struct device * dev,int irq)2053*5113495bSYour Name static inline void pfrm_disable_irq(struct device *dev, int irq)
2054*5113495bSYour Name {
2055*5113495bSYour Name 	pld_srng_disable_irq_sync(dev, irq);
2056*5113495bSYour Name }
2057*5113495bSYour Name 
pfrm_read_config_word(struct pci_dev * pdev,int offset,uint16_t * val)2058*5113495bSYour Name static inline int pfrm_read_config_word(struct pci_dev *pdev, int offset,
2059*5113495bSYour Name 					uint16_t *val)
2060*5113495bSYour Name {
2061*5113495bSYour Name 	return pld_pci_read_config_word(pdev, offset, val);
2062*5113495bSYour Name }
2063*5113495bSYour Name 
pfrm_write_config_word(struct pci_dev * pdev,int offset,uint16_t val)2064*5113495bSYour Name static inline int pfrm_write_config_word(struct pci_dev *pdev, int offset,
2065*5113495bSYour Name 					 uint16_t val)
2066*5113495bSYour Name {
2067*5113495bSYour Name 	return pld_pci_write_config_word(pdev, offset, val);
2068*5113495bSYour Name }
2069*5113495bSYour Name 
pfrm_read_config_dword(struct pci_dev * pdev,int offset,uint32_t * val)2070*5113495bSYour Name static inline int pfrm_read_config_dword(struct pci_dev *pdev, int offset,
2071*5113495bSYour Name 					 uint32_t *val)
2072*5113495bSYour Name {
2073*5113495bSYour Name 	return pld_pci_read_config_dword(pdev, offset, val);
2074*5113495bSYour Name }
2075*5113495bSYour Name 
pfrm_write_config_dword(struct pci_dev * pdev,int offset,uint32_t val)2076*5113495bSYour Name static inline int pfrm_write_config_dword(struct pci_dev *pdev, int offset,
2077*5113495bSYour Name 					  uint32_t val)
2078*5113495bSYour Name {
2079*5113495bSYour Name 	return pld_pci_write_config_dword(pdev, offset, val);
2080*5113495bSYour Name }
2081*5113495bSYour Name 
pld_get_enable_intx(struct device * dev)2082*5113495bSYour Name static inline bool pld_get_enable_intx(struct device *dev)
2083*5113495bSYour Name {
2084*5113495bSYour Name 	return false;
2085*5113495bSYour Name }
2086*5113495bSYour Name 
2087*5113495bSYour Name /**
2088*5113495bSYour Name  * pld_is_one_msi()- whether one MSI is used or not
2089*5113495bSYour Name  * @dev: device structure
2090*5113495bSYour Name  *
2091*5113495bSYour Name  * Return: true if it is one MSI
2092*5113495bSYour Name  */
2093*5113495bSYour Name bool pld_is_one_msi(struct device *dev);
2094*5113495bSYour Name 
2095*5113495bSYour Name #ifdef FEATURE_DIRECT_LINK
2096*5113495bSYour Name /**
2097*5113495bSYour Name  * pld_audio_smmu_map()- Map memory region into Audio SMMU CB
2098*5113495bSYour Name  * @dev: pointer to device structure
2099*5113495bSYour Name  * @paddr: physical address
2100*5113495bSYour Name  * @iova: DMA address
2101*5113495bSYour Name  * @size: memory region size
2102*5113495bSYour Name  *
2103*5113495bSYour Name  * Return: 0 on success else failure code
2104*5113495bSYour Name  */
2105*5113495bSYour Name int pld_audio_smmu_map(struct device *dev, phys_addr_t paddr, dma_addr_t iova,
2106*5113495bSYour Name 		       size_t size);
2107*5113495bSYour Name 
2108*5113495bSYour Name /**
2109*5113495bSYour Name  * pld_audio_smmu_unmap()- Remove memory region mapping from Audio SMMU CB
2110*5113495bSYour Name  * @dev: pointer to device structure
2111*5113495bSYour Name  * @iova: DMA address
2112*5113495bSYour Name  * @size: memory region size
2113*5113495bSYour Name  *
2114*5113495bSYour Name  * Return: None
2115*5113495bSYour Name  */
2116*5113495bSYour Name void pld_audio_smmu_unmap(struct device *dev, dma_addr_t iova, size_t size);
2117*5113495bSYour Name #else
2118*5113495bSYour Name static inline
pld_audio_smmu_map(struct device * dev,phys_addr_t paddr,dma_addr_t iova,size_t size)2119*5113495bSYour Name int pld_audio_smmu_map(struct device *dev, phys_addr_t paddr, dma_addr_t iova,
2120*5113495bSYour Name 		       size_t size)
2121*5113495bSYour Name {
2122*5113495bSYour Name 	return 0;
2123*5113495bSYour Name }
2124*5113495bSYour Name 
2125*5113495bSYour Name static inline
pld_audio_smmu_unmap(struct device * dev,dma_addr_t iova,size_t size)2126*5113495bSYour Name void pld_audio_smmu_unmap(struct device *dev, dma_addr_t iova, size_t size)
2127*5113495bSYour Name {
2128*5113495bSYour Name }
2129*5113495bSYour Name #endif
2130*5113495bSYour Name #endif
2131