xref: /wlan-driver/qca-wifi-host-cmn/hif/src/ce/ce_main.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2015-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name #ifndef __CE_H__
21*5113495bSYour Name #define __CE_H__
22*5113495bSYour Name 
23*5113495bSYour Name #include "qdf_atomic.h"
24*5113495bSYour Name #include "qdf_lock.h"
25*5113495bSYour Name #include "hif_main.h"
26*5113495bSYour Name #include "qdf_util.h"
27*5113495bSYour Name #include "hif_exec.h"
28*5113495bSYour Name 
29*5113495bSYour Name #ifndef DATA_CE_SW_INDEX_NO_INLINE_UPDATE
30*5113495bSYour Name #define DATA_CE_UPDATE_SWINDEX(x, scn, addr)				\
31*5113495bSYour Name 		(x = CE_SRC_RING_READ_IDX_GET_FROM_DDR(scn, addr))
32*5113495bSYour Name #else
33*5113495bSYour Name #define DATA_CE_UPDATE_SWINDEX(x, scn, addr)
34*5113495bSYour Name #endif
35*5113495bSYour Name 
36*5113495bSYour Name /*
37*5113495bSYour Name  * Number of times to check for any pending tx/rx completion on
38*5113495bSYour Name  * a copy engine, this count should be big enough. Once we hit
39*5113495bSYour Name  * this threshold we'll not check for any Tx/Rx completion in same
40*5113495bSYour Name  * interrupt handling. Note that this threshold is only used for
41*5113495bSYour Name  * Rx interrupt processing, this can be used tor Tx as well if we
42*5113495bSYour Name  * suspect any infinite loop in checking for pending Tx completion.
43*5113495bSYour Name  */
44*5113495bSYour Name #define CE_TXRX_COMP_CHECK_THRESHOLD 20
45*5113495bSYour Name 
46*5113495bSYour Name #define CE_HTT_T2H_MSG 1
47*5113495bSYour Name #define CE_HTT_H2T_MSG 4
48*5113495bSYour Name 
49*5113495bSYour Name #define CE_OFFSET		0x00000400
50*5113495bSYour Name #define CE_USEFUL_SIZE		0x00000058
51*5113495bSYour Name #define CE_ALL_BITMAP  0xFFFF
52*5113495bSYour Name 
53*5113495bSYour Name #define HIF_REQUESTED_EVENTS 20
54*5113495bSYour Name /*
55*5113495bSYour Name  * enum ce_id_type - Copy engine ID
56*5113495bSYour Name  */
57*5113495bSYour Name enum ce_id_type {
58*5113495bSYour Name 	CE_ID_0,
59*5113495bSYour Name 	CE_ID_1,
60*5113495bSYour Name 	CE_ID_2,
61*5113495bSYour Name 	CE_ID_3,
62*5113495bSYour Name 	CE_ID_4,
63*5113495bSYour Name 	CE_ID_5,
64*5113495bSYour Name 	CE_ID_6,
65*5113495bSYour Name 	CE_ID_7,
66*5113495bSYour Name 	CE_ID_8,
67*5113495bSYour Name 	CE_ID_9,
68*5113495bSYour Name 	CE_ID_10,
69*5113495bSYour Name 	CE_ID_11,
70*5113495bSYour Name #ifdef QCA_WIFI_QCN9224
71*5113495bSYour Name 	CE_ID_12,
72*5113495bSYour Name 	CE_ID_13,
73*5113495bSYour Name 	CE_ID_14,
74*5113495bSYour Name 	CE_ID_15,
75*5113495bSYour Name #endif
76*5113495bSYour Name 	CE_ID_MAX
77*5113495bSYour Name };
78*5113495bSYour Name 
79*5113495bSYour Name #ifdef CE_TASKLET_DEBUG_ENABLE
80*5113495bSYour Name /**
81*5113495bSYour Name  * enum ce_buckets - CE tasklet time buckets
82*5113495bSYour Name  * @CE_BUCKET_500_US: tasklet bucket to store 0-0.5ms
83*5113495bSYour Name  * @CE_BUCKET_1_MS: tasklet bucket to store 0.5-1ms
84*5113495bSYour Name  * @CE_BUCKET_2_MS: tasklet bucket to store 1-2ms
85*5113495bSYour Name  * @CE_BUCKET_5_MS: tasklet bucket to store 2-5ms
86*5113495bSYour Name  * @CE_BUCKET_10_MS: tasklet bucket to store 5-10ms
87*5113495bSYour Name  * @CE_BUCKET_BEYOND: tasklet bucket to store > 10ms
88*5113495bSYour Name  * @CE_BUCKET_MAX: enum max value
89*5113495bSYour Name  */
90*5113495bSYour Name enum ce_buckets {
91*5113495bSYour Name 	CE_BUCKET_500_US,
92*5113495bSYour Name 	CE_BUCKET_1_MS,
93*5113495bSYour Name 	CE_BUCKET_2_MS,
94*5113495bSYour Name 	CE_BUCKET_5_MS,
95*5113495bSYour Name 	CE_BUCKET_10_MS,
96*5113495bSYour Name 	CE_BUCKET_BEYOND,
97*5113495bSYour Name 	CE_BUCKET_MAX,
98*5113495bSYour Name };
99*5113495bSYour Name #endif
100*5113495bSYour Name 
101*5113495bSYour Name enum ce_target_type {
102*5113495bSYour Name 	CE_SVC_LEGACY,
103*5113495bSYour Name 	CE_SVC_SRNG,
104*5113495bSYour Name 	CE_MAX_TARGET_TYPE
105*5113495bSYour Name };
106*5113495bSYour Name 
107*5113495bSYour Name enum ol_ath_hif_pkt_ecodes {
108*5113495bSYour Name 	HIF_PIPE_NO_RESOURCE = 0
109*5113495bSYour Name };
110*5113495bSYour Name 
111*5113495bSYour Name struct HIF_CE_state;
112*5113495bSYour Name 
113*5113495bSYour Name /* Per-pipe state. */
114*5113495bSYour Name struct HIF_CE_pipe_info {
115*5113495bSYour Name 	/* Handle of underlying Copy Engine */
116*5113495bSYour Name 	struct CE_handle *ce_hdl;
117*5113495bSYour Name 
118*5113495bSYour Name 	/* Our pipe number; facilitates use of pipe_info ptrs. */
119*5113495bSYour Name 	uint8_t pipe_num;
120*5113495bSYour Name 
121*5113495bSYour Name 	/* Convenience back pointer to HIF_CE_state. */
122*5113495bSYour Name 	struct HIF_CE_state *HIF_CE_state;
123*5113495bSYour Name 
124*5113495bSYour Name 	/* Instantaneous number of receive buffers that should be posted */
125*5113495bSYour Name 	atomic_t recv_bufs_needed;
126*5113495bSYour Name 	qdf_size_t buf_sz;
127*5113495bSYour Name 	qdf_spinlock_t recv_bufs_needed_lock;
128*5113495bSYour Name 
129*5113495bSYour Name 	qdf_spinlock_t completion_freeq_lock;
130*5113495bSYour Name 	/* Limit the number of outstanding send requests. */
131*5113495bSYour Name 	int num_sends_allowed;
132*5113495bSYour Name 
133*5113495bSYour Name 	/* adding three counts for debugging ring buffer errors */
134*5113495bSYour Name 	uint32_t nbuf_alloc_err_count;
135*5113495bSYour Name 	uint32_t nbuf_dma_err_count;
136*5113495bSYour Name 	uint32_t nbuf_ce_enqueue_err_count;
137*5113495bSYour Name 	struct hif_msg_callbacks pipe_callbacks;
138*5113495bSYour Name };
139*5113495bSYour Name 
140*5113495bSYour Name /**
141*5113495bSYour Name  * struct ce_tasklet_entry
142*5113495bSYour Name  *
143*5113495bSYour Name  * @intr_tq: intr_tq
144*5113495bSYour Name  * @ce_id: ce_id
145*5113495bSYour Name  * @inited: inited
146*5113495bSYour Name  * @hi_tasklet_ce:
147*5113495bSYour Name  * @hif_ce_state: hif_ce_state
148*5113495bSYour Name  */
149*5113495bSYour Name struct ce_tasklet_entry {
150*5113495bSYour Name 	struct tasklet_struct intr_tq;
151*5113495bSYour Name 	enum ce_id_type ce_id;
152*5113495bSYour Name 	bool inited;
153*5113495bSYour Name 	bool hi_tasklet_ce;
154*5113495bSYour Name 	void *hif_ce_state;
155*5113495bSYour Name };
156*5113495bSYour Name 
hif_dummy_grp_done(struct hif_exec_context * grp_entry,int work_done)157*5113495bSYour Name static inline bool hif_dummy_grp_done(struct hif_exec_context *grp_entry, int
158*5113495bSYour Name 				      work_done)
159*5113495bSYour Name {
160*5113495bSYour Name 	return true;
161*5113495bSYour Name }
162*5113495bSYour Name 
163*5113495bSYour Name extern struct hif_execution_ops tasklet_sched_ops;
164*5113495bSYour Name extern struct hif_execution_ops napi_sched_ops;
165*5113495bSYour Name 
166*5113495bSYour Name /**
167*5113495bSYour Name  * struct ce_stats
168*5113495bSYour Name  *
169*5113495bSYour Name  * @ce_per_cpu: Stats of the CEs running per CPU
170*5113495bSYour Name  * @record_index: Current index to store in time record
171*5113495bSYour Name  * @tasklet_sched_entry_ts: Timestamp when tasklet is scheduled
172*5113495bSYour Name  * @tasklet_exec_entry_ts: Timestamp when tasklet is started execuiton
173*5113495bSYour Name  * @tasklet_exec_time_record: Last N number of tasklets execution time
174*5113495bSYour Name  * @tasklet_sched_time_record: Last N number of tasklets scheduled time
175*5113495bSYour Name  * @ce_tasklet_exec_bucket: Tasklet execution time buckets
176*5113495bSYour Name  * @ce_tasklet_sched_bucket: Tasklet time in queue buckets
177*5113495bSYour Name  * @ce_tasklet_exec_last_update: Latest timestamp when bucket is updated
178*5113495bSYour Name  * @ce_tasklet_sched_last_update: Latest timestamp when bucket is updated
179*5113495bSYour Name  * @ce_ring_full_count:
180*5113495bSYour Name  * @ce_manual_tasklet_schedule_count:
181*5113495bSYour Name  * @ce_last_manual_tasklet_schedule_ts:
182*5113495bSYour Name  */
183*5113495bSYour Name struct ce_stats {
184*5113495bSYour Name 	uint32_t ce_per_cpu[CE_COUNT_MAX][QDF_MAX_AVAILABLE_CPU];
185*5113495bSYour Name #ifdef CE_TASKLET_DEBUG_ENABLE
186*5113495bSYour Name 	uint32_t record_index[CE_COUNT_MAX];
187*5113495bSYour Name 	uint64_t tasklet_sched_entry_ts[CE_COUNT_MAX];
188*5113495bSYour Name 	uint64_t tasklet_exec_entry_ts[CE_COUNT_MAX];
189*5113495bSYour Name 	uint64_t tasklet_exec_time_record[CE_COUNT_MAX][HIF_REQUESTED_EVENTS];
190*5113495bSYour Name 	uint64_t tasklet_sched_time_record[CE_COUNT_MAX][HIF_REQUESTED_EVENTS];
191*5113495bSYour Name 	uint64_t ce_tasklet_exec_bucket[CE_COUNT_MAX][CE_BUCKET_MAX];
192*5113495bSYour Name 	uint64_t ce_tasklet_sched_bucket[CE_COUNT_MAX][CE_BUCKET_MAX];
193*5113495bSYour Name 	uint64_t ce_tasklet_exec_last_update[CE_COUNT_MAX][CE_BUCKET_MAX];
194*5113495bSYour Name 	uint64_t ce_tasklet_sched_last_update[CE_COUNT_MAX][CE_BUCKET_MAX];
195*5113495bSYour Name #ifdef CE_TASKLET_SCHEDULE_ON_FULL
196*5113495bSYour Name 	uint32_t ce_ring_full_count[CE_COUNT_MAX];
197*5113495bSYour Name 	uint32_t ce_manual_tasklet_schedule_count[CE_COUNT_MAX];
198*5113495bSYour Name 	uint64_t ce_last_manual_tasklet_schedule_ts[CE_COUNT_MAX];
199*5113495bSYour Name #endif
200*5113495bSYour Name #endif
201*5113495bSYour Name };
202*5113495bSYour Name 
203*5113495bSYour Name struct HIF_CE_state {
204*5113495bSYour Name 	struct hif_softc ol_sc;
205*5113495bSYour Name 	bool started;
206*5113495bSYour Name 	struct ce_tasklet_entry tasklets[CE_COUNT_MAX];
207*5113495bSYour Name 	struct hif_exec_context *hif_ext_group[HIF_MAX_GROUP];
208*5113495bSYour Name 	uint32_t hif_num_extgroup;
209*5113495bSYour Name 	qdf_spinlock_t keep_awake_lock;
210*5113495bSYour Name 	qdf_spinlock_t irq_reg_lock;
211*5113495bSYour Name 	unsigned int keep_awake_count;
212*5113495bSYour Name 	bool verified_awake;
213*5113495bSYour Name 	bool fake_sleep;
214*5113495bSYour Name 	qdf_timer_t sleep_timer;
215*5113495bSYour Name 	bool sleep_timer_init;
216*5113495bSYour Name 	qdf_time_t sleep_ticks;
217*5113495bSYour Name 	uint32_t ce_register_irq_done;
218*5113495bSYour Name 
219*5113495bSYour Name 	struct CE_pipe_config *target_ce_config;
220*5113495bSYour Name 	struct CE_attr *host_ce_config;
221*5113495bSYour Name 	uint32_t target_ce_config_sz;
222*5113495bSYour Name 	/* Per-pipe state. */
223*5113495bSYour Name 	struct HIF_CE_pipe_info pipe_info[CE_COUNT_MAX];
224*5113495bSYour Name 	/* to be activated after BMI_DONE */
225*5113495bSYour Name 	struct hif_msg_callbacks msg_callbacks_pending;
226*5113495bSYour Name 	/* current msg callbacks in use */
227*5113495bSYour Name 	struct hif_msg_callbacks msg_callbacks_current;
228*5113495bSYour Name 
229*5113495bSYour Name 	/* Target address used to signal a pending firmware event */
230*5113495bSYour Name 	uint32_t fw_indicator_address;
231*5113495bSYour Name 
232*5113495bSYour Name 	/* Copy Engine used for Diagnostic Accesses */
233*5113495bSYour Name 	struct CE_handle *ce_diag;
234*5113495bSYour Name 	struct ce_stats stats;
235*5113495bSYour Name 	struct ce_ops *ce_services;
236*5113495bSYour Name 	struct service_to_pipe *tgt_svc_map;
237*5113495bSYour Name 	int sz_tgt_svc_map;
238*5113495bSYour Name };
239*5113495bSYour Name 
240*5113495bSYour Name /*
241*5113495bSYour Name  * HIA Map Definition
242*5113495bSYour Name  */
243*5113495bSYour Name struct host_interest_area_t {
244*5113495bSYour Name 	uint32_t hi_interconnect_state;
245*5113495bSYour Name 	uint32_t hi_early_alloc;
246*5113495bSYour Name 	uint32_t hi_option_flag2;
247*5113495bSYour Name 	uint32_t hi_board_data;
248*5113495bSYour Name 	uint32_t hi_board_data_initialized;
249*5113495bSYour Name 	uint32_t hi_failure_state;
250*5113495bSYour Name 	uint32_t hi_rddi_msi_num;
251*5113495bSYour Name 	uint32_t hi_pcie_perst_couple_en;
252*5113495bSYour Name 	uint32_t hi_sw_protocol_version;
253*5113495bSYour Name };
254*5113495bSYour Name 
255*5113495bSYour Name struct shadow_reg_cfg {
256*5113495bSYour Name 	uint16_t ce_id;
257*5113495bSYour Name 	uint16_t reg_offset;
258*5113495bSYour Name };
259*5113495bSYour Name 
260*5113495bSYour Name struct shadow_reg_v2_cfg {
261*5113495bSYour Name 	uint32_t reg_value;
262*5113495bSYour Name };
263*5113495bSYour Name 
264*5113495bSYour Name #ifdef CONFIG_BYPASS_QMI
265*5113495bSYour Name 
266*5113495bSYour Name #define FW_SHARED_MEM (2 * 1024 * 1024)
267*5113495bSYour Name 
268*5113495bSYour Name #ifdef QCN7605_SUPPORT
269*5113495bSYour Name struct msi_cfg {
270*5113495bSYour Name 	u16 ce_id;
271*5113495bSYour Name 	u16 msi_vector;
272*5113495bSYour Name } qdf_packed;
273*5113495bSYour Name 
274*5113495bSYour Name struct ce_info {
275*5113495bSYour Name 	u32 rri_over_ddr_low_paddr;
276*5113495bSYour Name 	u32 rri_over_ddr_high_paddr;
277*5113495bSYour Name 	struct msi_cfg cfg[CE_COUNT_MAX];
278*5113495bSYour Name } qdf_packed;
279*5113495bSYour Name #endif
280*5113495bSYour Name #endif
281*5113495bSYour Name 
282*5113495bSYour Name /**
283*5113495bSYour Name  * struct ce_index
284*5113495bSYour Name  *
285*5113495bSYour Name  * @id: CE id
286*5113495bSYour Name  * @u: union of legacy_info and srng_info
287*5113495bSYour Name  * @sw_index: sw index
288*5113495bSYour Name  * @write_index: write index
289*5113495bSYour Name  * @hp: ring head pointer
290*5113495bSYour Name  * @tp: ring tail pointer
291*5113495bSYour Name  * @status_hp: status ring head pointer
292*5113495bSYour Name  * @status_tp: status ring tail pointer
293*5113495bSYour Name  */
294*5113495bSYour Name struct ce_index {
295*5113495bSYour Name 	uint8_t id;
296*5113495bSYour Name 	union {
297*5113495bSYour Name 		struct {
298*5113495bSYour Name 			uint16_t sw_index;
299*5113495bSYour Name 			uint16_t write_index;
300*5113495bSYour Name 		} legacy_info;
301*5113495bSYour Name 		struct {
302*5113495bSYour Name 			uint16_t hp;
303*5113495bSYour Name 			uint16_t tp;
304*5113495bSYour Name 			uint16_t status_hp;
305*5113495bSYour Name 			uint16_t status_tp;
306*5113495bSYour Name 		} srng_info;
307*5113495bSYour Name 	} u;
308*5113495bSYour Name } qdf_packed;
309*5113495bSYour Name 
310*5113495bSYour Name /**
311*5113495bSYour Name  * struct hang_event_info
312*5113495bSYour Name  *
313*5113495bSYour Name  * @tlv_header: tlv header
314*5113495bSYour Name  * @active_tasklet_count: active tasklet count
315*5113495bSYour Name  * @active_grp_tasklet_cnt: active grp tasklet count
316*5113495bSYour Name  * @ce_count:
317*5113495bSYour Name  * @ce_info: CE info
318*5113495bSYour Name  */
319*5113495bSYour Name struct hang_event_info {
320*5113495bSYour Name 	uint16_t tlv_header;
321*5113495bSYour Name 	uint8_t active_tasklet_count;
322*5113495bSYour Name 	uint8_t active_grp_tasklet_cnt;
323*5113495bSYour Name 	uint8_t ce_count;
324*5113495bSYour Name 	struct ce_index ce_info[CE_COUNT_MAX];
325*5113495bSYour Name } qdf_packed;
326*5113495bSYour Name 
327*5113495bSYour Name void hif_ce_stop(struct hif_softc *scn);
328*5113495bSYour Name int hif_dump_ce_registers(struct hif_softc *scn);
329*5113495bSYour Name void
330*5113495bSYour Name hif_ce_dump_target_memory(struct hif_softc *scn, void *ramdump_base,
331*5113495bSYour Name 			  uint32_t address, uint32_t size);
332*5113495bSYour Name 
333*5113495bSYour Name #ifdef IPA_OFFLOAD
334*5113495bSYour Name void hif_ce_ipa_get_ce_resource(struct hif_softc *scn,
335*5113495bSYour Name 			     qdf_shared_mem_t **ce_sr,
336*5113495bSYour Name 			     uint32_t *ce_sr_ring_size,
337*5113495bSYour Name 			     qdf_dma_addr_t *ce_reg_paddr);
338*5113495bSYour Name #else
339*5113495bSYour Name static inline
hif_ce_ipa_get_ce_resource(struct hif_softc * scn,qdf_shared_mem_t ** ce_sr,uint32_t * ce_sr_ring_size,qdf_dma_addr_t * ce_reg_paddr)340*5113495bSYour Name void hif_ce_ipa_get_ce_resource(struct hif_softc *scn,
341*5113495bSYour Name 			     qdf_shared_mem_t **ce_sr,
342*5113495bSYour Name 			     uint32_t *ce_sr_ring_size,
343*5113495bSYour Name 			     qdf_dma_addr_t *ce_reg_paddr)
344*5113495bSYour Name {
345*5113495bSYour Name }
346*5113495bSYour Name 
347*5113495bSYour Name #endif
348*5113495bSYour Name int hif_wlan_enable(struct hif_softc *scn);
349*5113495bSYour Name void ce_enable_polling(void *cestate);
350*5113495bSYour Name void ce_disable_polling(void *cestate);
351*5113495bSYour Name void hif_wlan_disable(struct hif_softc *scn);
352*5113495bSYour Name void hif_get_target_ce_config(struct hif_softc *scn,
353*5113495bSYour Name 		struct CE_pipe_config **target_ce_config_ret,
354*5113495bSYour Name 		uint32_t *target_ce_config_sz_ret,
355*5113495bSYour Name 		struct service_to_pipe **target_service_to_ce_map_ret,
356*5113495bSYour Name 		uint32_t *target_service_to_ce_map_sz_ret,
357*5113495bSYour Name 		struct shadow_reg_cfg **target_shadow_reg_cfg_v1_ret,
358*5113495bSYour Name 		uint32_t *shadow_cfg_v1_sz_ret);
359*5113495bSYour Name 
360*5113495bSYour Name #ifdef WLAN_FEATURE_EPPING
361*5113495bSYour Name void hif_ce_prepare_epping_config(struct hif_softc *scn,
362*5113495bSYour Name 				  struct HIF_CE_state *hif_state);
363*5113495bSYour Name void hif_select_epping_service_to_pipe_map(struct service_to_pipe
364*5113495bSYour Name 					   **tgt_svc_map_to_use,
365*5113495bSYour Name 					   uint32_t *sz_tgt_svc_map_to_use);
366*5113495bSYour Name 
367*5113495bSYour Name #else
368*5113495bSYour Name static inline
hif_ce_prepare_epping_config(struct hif_softc * scn,struct HIF_CE_state * hif_state)369*5113495bSYour Name void hif_ce_prepare_epping_config(struct hif_softc *scn,
370*5113495bSYour Name 				  struct HIF_CE_state *hif_state)
371*5113495bSYour Name { }
372*5113495bSYour Name static inline
hif_select_epping_service_to_pipe_map(struct service_to_pipe ** tgt_svc_map_to_use,uint32_t * sz_tgt_svc_map_to_use)373*5113495bSYour Name void hif_select_epping_service_to_pipe_map(struct service_to_pipe
374*5113495bSYour Name 					   **tgt_svc_map_to_use,
375*5113495bSYour Name 					   uint32_t *sz_tgt_svc_map_to_use)
376*5113495bSYour Name { }
377*5113495bSYour Name #endif
378*5113495bSYour Name 
379*5113495bSYour Name void ce_service_register_module(enum ce_target_type target_type,
380*5113495bSYour Name 				struct ce_ops* (*ce_attach)(void));
381*5113495bSYour Name 
382*5113495bSYour Name #ifdef CONFIG_SHADOW_V3
383*5113495bSYour Name void hif_get_shadow_reg_config_v3(struct hif_softc *scn,
384*5113495bSYour Name 				  struct pld_shadow_reg_v3_cfg **shadow_config,
385*5113495bSYour Name 				  int *num_shadow_registers_configured);
386*5113495bSYour Name void hif_preare_shadow_register_cfg_v3(struct hif_softc *scn);
387*5113495bSYour Name #endif
388*5113495bSYour Name #endif /* __CE_H__ */
389