blob: 2887ea9bbe8b1ba77a154509dedaa6f59736fee4 [file] [log] [blame]
Yuanyuan Liud9f7a362016-01-22 14:27:12 -08001/*
Nirav Shahfb79af82018-03-12 18:10:33 +05302 * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
Yuanyuan Liud9f7a362016-01-22 14:27:12 -08003 *
Yuanyuan Liud9f7a362016-01-22 14:27:12 -08004 * Permission to use, copy, modify, and/or distribute this software for
5 * any purpose with or without fee is hereby granted, provided that the
6 * above copyright notice and this permission notice appear in all
7 * copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16 * PERFORMANCE OF THIS SOFTWARE.
17 */
18
Yuanyuan Liud9f7a362016-01-22 14:27:12 -080019#ifndef __PLD_PCIE_H__
20#define __PLD_PCIE_H__
21
Yuanyuan Liu16a55622016-09-14 16:15:59 -070022#ifdef CONFIG_PLD_PCIE_CNSS
Yue Mae6a7a322016-08-31 11:09:23 -070023#include <net/cnss2.h>
24#endif
Yuanyuan Liuf7aea122016-05-25 16:39:40 -070025#include "pld_internal.h"
Yuanyuan Liud9f7a362016-01-22 14:27:12 -080026
Nirav Shahfb79af82018-03-12 18:10:33 +053027#ifndef HIF_PCI
Yuanyuan Liud9f7a362016-01-22 14:27:12 -080028static inline int pld_pcie_register_driver(void)
29{
30 return 0;
31}
32
33static inline void pld_pcie_unregister_driver(void)
34{
Yuanyuan Liud9f7a362016-01-22 14:27:12 -080035}
36
Yue Ma85761e62017-10-30 11:13:45 -070037static inline int pld_pcie_get_ce_id(struct device *dev, int irq)
Yuanyuan Liud9f7a362016-01-22 14:27:12 -080038{
39 return 0;
40}
41#else
42int pld_pcie_register_driver(void);
43void pld_pcie_unregister_driver(void);
Yue Ma85761e62017-10-30 11:13:45 -070044int pld_pcie_get_ce_id(struct device *dev, int irq);
Yuanyuan Liud9f7a362016-01-22 14:27:12 -080045#endif
46
Yue Ma08047522016-11-08 18:53:26 -080047#ifndef CONFIG_PLD_PCIE_CNSS
48static inline int pld_pcie_wlan_enable(struct device *dev,
49 struct pld_wlan_enable_cfg *config,
50 enum pld_driver_mode mode,
51 const char *host_version)
52{
53 return 0;
54}
Yue Ma85761e62017-10-30 11:13:45 -070055
Yue Ma08047522016-11-08 18:53:26 -080056static inline int pld_pcie_wlan_disable(struct device *dev,
57 enum pld_driver_mode mode)
58{
59 return 0;
60}
61#else
62int pld_pcie_wlan_enable(struct device *dev, struct pld_wlan_enable_cfg *config,
63 enum pld_driver_mode mode, const char *host_version);
64int pld_pcie_wlan_disable(struct device *dev, enum pld_driver_mode mode);
65#endif
66
Nirav Shah74be3842018-06-26 19:17:25 +053067#if defined(CONFIG_PLD_PCIE_CNSS)
Yuanyuan Liu81982b92017-04-13 14:25:19 -070068static inline int pld_pcie_set_fw_log_mode(struct device *dev, u8 fw_log_mode)
69{
70 return cnss_set_fw_log_mode(dev, fw_log_mode);
71}
Yue Ma85761e62017-10-30 11:13:45 -070072
73static inline void pld_pcie_intr_notify_q6(struct device *dev)
Yuanyuan Liu81982b92017-04-13 14:25:19 -070074{
75}
76#else
77static inline int pld_pcie_set_fw_log_mode(struct device *dev, u8 fw_log_mode)
78{
79 return 0;
80}
Yue Ma85761e62017-10-30 11:13:45 -070081
82static inline void pld_pcie_intr_notify_q6(struct device *dev)
Yuanyuan Liu81982b92017-04-13 14:25:19 -070083{
84}
Yuanyuan Liud9f7a362016-01-22 14:27:12 -080085#endif
86
Yuanyuan Liu11f526a2016-05-18 10:22:07 -070087#if (!defined(CONFIG_PLD_PCIE_CNSS)) || (!defined(CONFIG_CNSS_SECURE_FW))
Yue Ma85761e62017-10-30 11:13:45 -070088static inline int pld_pcie_get_sha_hash(struct device *dev, const u8 *data,
Yuanyuan Liu59f81e02016-05-19 16:17:38 -070089 u32 data_len, u8 *hash_idx, u8 *out)
Yuanyuan Liud9f7a362016-01-22 14:27:12 -080090{
91 return 0;
92}
Yue Ma85761e62017-10-30 11:13:45 -070093
94static inline void *pld_pcie_get_fw_ptr(struct device *dev)
Yuanyuan Liud9f7a362016-01-22 14:27:12 -080095{
96 return NULL;
97}
Yuanyuan Liu59f81e02016-05-19 16:17:38 -070098#else
Yue Ma85761e62017-10-30 11:13:45 -070099static inline int pld_pcie_get_sha_hash(struct device *dev, const u8 *data,
Yuanyuan Liu16a55622016-09-14 16:15:59 -0700100 u32 data_len, u8 *hash_idx, u8 *out)
101{
102 return cnss_get_sha_hash(data, data_len, hash_idx, out);
103}
Yue Ma85761e62017-10-30 11:13:45 -0700104
105static inline void *pld_pcie_get_fw_ptr(struct device *dev)
Yuanyuan Liu16a55622016-09-14 16:15:59 -0700106{
107 return cnss_get_fw_ptr();
108}
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800109#endif
110
Yuanyuan Liu11f526a2016-05-18 10:22:07 -0700111#if (!defined(CONFIG_PLD_PCIE_CNSS)) || (!defined(CONFIG_PCI_MSM))
Yue Ma85761e62017-10-30 11:13:45 -0700112static inline int pld_pcie_wlan_pm_control(struct device *dev, bool vote)
Yuanyuan Liu466ccb72016-04-21 15:13:22 -0700113{
114 return 0;
115}
Yuanyuan Liu59f81e02016-05-19 16:17:38 -0700116#else
Yue Ma85761e62017-10-30 11:13:45 -0700117static inline int pld_pcie_wlan_pm_control(struct device *dev, bool vote)
118{
119 return cnss_wlan_pm_control(dev, vote);
120}
Yue Ma85761e62017-10-30 11:13:45 -0700121#endif
Yuanyuan Liu466ccb72016-04-21 15:13:22 -0700122
Yuanyuan Liu11f526a2016-05-18 10:22:07 -0700123#ifndef CONFIG_PLD_PCIE_CNSS
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800124static inline int
Yue Ma85761e62017-10-30 11:13:45 -0700125pld_pcie_get_fw_files_for_target(struct device *dev,
126 struct pld_fw_files *pfw_files,
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800127 u32 target_type, u32 target_version)
128{
Yuanyuan Liu6a313dc2016-05-10 14:19:10 -0700129 pld_get_default_fw_files(pfw_files);
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800130 return 0;
131}
Yue Ma85761e62017-10-30 11:13:45 -0700132
Yuanyuan Liu10fc3d32017-01-12 15:32:06 -0800133static inline void pld_pcie_link_down(struct device *dev)
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800134{
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800135}
Yue Ma85761e62017-10-30 11:13:45 -0700136
Yue Ma6dbbb182017-04-26 17:06:05 -0700137static inline int pld_pcie_athdiag_read(struct device *dev, uint32_t offset,
138 uint32_t memtype, uint32_t datalen,
139 uint8_t *output)
140{
141 return 0;
142}
Yue Ma85761e62017-10-30 11:13:45 -0700143
Yue Ma6dbbb182017-04-26 17:06:05 -0700144static inline int pld_pcie_athdiag_write(struct device *dev, uint32_t offset,
145 uint32_t memtype, uint32_t datalen,
146 uint8_t *input)
147{
148 return 0;
149}
Yue Ma85761e62017-10-30 11:13:45 -0700150
151static inline void
152pld_pcie_schedule_recovery_work(struct device *dev,
153 enum pld_recovery_reason reason)
Yuanyuan Liu0e0aa932016-05-12 10:17:58 -0700154{
Yuanyuan Liu0e0aa932016-05-12 10:17:58 -0700155}
Yue Ma85761e62017-10-30 11:13:45 -0700156
157static inline void *pld_pcie_get_virt_ramdump_mem(struct device *dev,
158 unsigned long *size)
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800159{
160 return NULL;
161}
Yue Ma85761e62017-10-30 11:13:45 -0700162
163static inline void pld_pcie_device_crashed(struct device *dev)
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800164{
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800165}
Yue Ma85761e62017-10-30 11:13:45 -0700166
Yuanyuan Liu10fc3d32017-01-12 15:32:06 -0800167static inline void pld_pcie_device_self_recovery(struct device *dev,
168 enum pld_recovery_reason reason)
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800169{
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800170}
Yue Ma85761e62017-10-30 11:13:45 -0700171
172static inline void pld_pcie_request_pm_qos(struct device *dev, u32 qos_val)
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800173{
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800174}
Yue Ma85761e62017-10-30 11:13:45 -0700175
176static inline void pld_pcie_remove_pm_qos(struct device *dev)
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800177{
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800178}
Yue Ma85761e62017-10-30 11:13:45 -0700179
180static inline int pld_pcie_request_bus_bandwidth(struct device *dev,
181 int bandwidth)
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800182{
183 return 0;
184}
Yue Ma85761e62017-10-30 11:13:45 -0700185
186static inline int pld_pcie_get_platform_cap(struct device *dev,
187 struct pld_platform_cap *cap)
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800188{
189 return 0;
190}
Yue Ma85761e62017-10-30 11:13:45 -0700191
Yue Macd243862016-11-04 19:21:16 -0700192static inline int pld_pcie_get_soc_info(struct device *dev,
193 struct pld_soc_info *info)
194{
195 return 0;
196}
Yue Ma85761e62017-10-30 11:13:45 -0700197
Yue Ma5ff417c2017-10-30 11:13:12 -0700198static inline int pld_pcie_auto_suspend(struct device *dev)
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800199{
200 return 0;
201}
Yue Ma85761e62017-10-30 11:13:45 -0700202
203static inline int pld_pcie_auto_resume(struct device *dev)
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800204{
205 return 0;
206}
Yue Ma85761e62017-10-30 11:13:45 -0700207
208static inline void pld_pcie_lock_pm_sem(struct device *dev)
Yuanyuan Liu44c44772016-04-11 11:11:27 -0700209{
Yuanyuan Liu44c44772016-04-11 11:11:27 -0700210}
Yue Ma85761e62017-10-30 11:13:45 -0700211
212static inline void pld_pcie_release_pm_sem(struct device *dev)
Yuanyuan Liu44c44772016-04-11 11:11:27 -0700213{
Yuanyuan Liu44c44772016-04-11 11:11:27 -0700214}
Yue Ma85761e62017-10-30 11:13:45 -0700215
Arun Khandavalli1496fcb2016-07-25 16:53:00 +0530216static inline int pld_pcie_power_on(struct device *dev)
217{
218 return 0;
219}
Yue Ma85761e62017-10-30 11:13:45 -0700220
Arun Khandavalli1496fcb2016-07-25 16:53:00 +0530221static inline int pld_pcie_power_off(struct device *dev)
222{
223 return 0;
224}
Yue Ma85761e62017-10-30 11:13:45 -0700225
Yue Ma63d360a2017-06-20 17:00:35 -0700226static inline int pld_pcie_force_assert_target(struct device *dev)
227{
228 return -EINVAL;
229}
Yue Ma85761e62017-10-30 11:13:45 -0700230
Yue Mafd418ea2016-11-21 16:47:13 -0800231static inline int pld_pcie_get_user_msi_assignment(struct device *dev,
232 char *user_name,
233 int *num_vectors,
234 uint32_t *user_base_data,
235 uint32_t *base_vector)
236{
237 return 0;
238}
Yue Ma85761e62017-10-30 11:13:45 -0700239
Yue Mafd418ea2016-11-21 16:47:13 -0800240static inline int pld_pcie_get_msi_irq(struct device *dev, unsigned int vector)
241{
242 return 0;
243}
Yue Ma85761e62017-10-30 11:13:45 -0700244
Yue Mafd418ea2016-11-21 16:47:13 -0800245static inline void pld_pcie_get_msi_address(struct device *dev,
246 uint32_t *msi_addr_low,
247 uint32_t *msi_addr_high)
248{
249 return;
250}
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800251#else
Yue Ma85761e62017-10-30 11:13:45 -0700252int pld_pcie_get_fw_files_for_target(struct device *dev,
253 struct pld_fw_files *pfw_files,
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800254 u32 target_type, u32 target_version);
Yue Ma85761e62017-10-30 11:13:45 -0700255int pld_pcie_get_platform_cap(struct device *dev, struct pld_platform_cap *cap);
Yue Macd243862016-11-04 19:21:16 -0700256int pld_pcie_get_soc_info(struct device *dev, struct pld_soc_info *info);
Yuanyuan Liu10fc3d32017-01-12 15:32:06 -0800257void pld_pcie_schedule_recovery_work(struct device *dev,
258 enum pld_recovery_reason reason);
259void pld_pcie_device_self_recovery(struct device *dev,
260 enum pld_recovery_reason reason);
Komal Seelam355b1472016-09-02 14:36:21 +0530261
Yuanyuan Liu10fc3d32017-01-12 15:32:06 -0800262static inline void pld_pcie_link_down(struct device *dev)
Yuanyuan Liu16a55622016-09-14 16:15:59 -0700263{
Yuanyuan Liu10fc3d32017-01-12 15:32:06 -0800264 cnss_pci_link_down(dev);
Yuanyuan Liu16a55622016-09-14 16:15:59 -0700265}
Yue Ma85761e62017-10-30 11:13:45 -0700266
Yue Ma6dbbb182017-04-26 17:06:05 -0700267static inline int pld_pcie_athdiag_read(struct device *dev, uint32_t offset,
268 uint32_t memtype, uint32_t datalen,
269 uint8_t *output)
270{
271 return cnss_athdiag_read(dev, offset, memtype, datalen, output);
272}
Yue Ma85761e62017-10-30 11:13:45 -0700273
Yue Ma6dbbb182017-04-26 17:06:05 -0700274static inline int pld_pcie_athdiag_write(struct device *dev, uint32_t offset,
275 uint32_t memtype, uint32_t datalen,
276 uint8_t *input)
277{
278 return cnss_athdiag_write(dev, offset, memtype, datalen, input);
279}
Yue Ma85761e62017-10-30 11:13:45 -0700280
Yue Ma85761e62017-10-30 11:13:45 -0700281static inline void *pld_pcie_get_virt_ramdump_mem(struct device *dev,
282 unsigned long *size)
283{
284 return cnss_get_virt_ramdump_mem(dev, size);
285}
286
287static inline void pld_pcie_device_crashed(struct device *dev)
288{
289 cnss_device_crashed(dev);
290}
291
292static inline void pld_pcie_request_pm_qos(struct device *dev, u32 qos_val)
293{
294 cnss_request_pm_qos(dev, qos_val);
295}
296
297static inline void pld_pcie_remove_pm_qos(struct device *dev)
298{
299 cnss_remove_pm_qos(dev);
300}
301
302static inline int pld_pcie_request_bus_bandwidth(struct device *dev,
303 int bandwidth)
304{
305 return cnss_request_bus_bandwidth(dev, bandwidth);
306}
307
308static inline int pld_pcie_auto_suspend(struct device *dev)
309{
310 return cnss_auto_suspend(dev);
311}
312
313static inline int pld_pcie_auto_resume(struct device *dev)
314{
315 return cnss_auto_resume(dev);
316}
317
318static inline void pld_pcie_lock_pm_sem(struct device *dev)
319{
320 cnss_lock_pm_sem(dev);
321}
322
323static inline void pld_pcie_release_pm_sem(struct device *dev)
324{
325 cnss_release_pm_sem(dev);
326}
Yue Ma85761e62017-10-30 11:13:45 -0700327
Yuanyuan Liu16a55622016-09-14 16:15:59 -0700328static inline int pld_pcie_power_on(struct device *dev)
329{
330 return cnss_power_up(dev);
331}
Yue Ma85761e62017-10-30 11:13:45 -0700332
Yuanyuan Liu16a55622016-09-14 16:15:59 -0700333static inline int pld_pcie_power_off(struct device *dev)
334{
335 return cnss_power_down(dev);
336}
Yue Ma85761e62017-10-30 11:13:45 -0700337
Yue Ma63d360a2017-06-20 17:00:35 -0700338static inline int pld_pcie_force_assert_target(struct device *dev)
339{
340 return cnss_force_fw_assert(dev);
341}
Yue Ma85761e62017-10-30 11:13:45 -0700342
Yue Mafd418ea2016-11-21 16:47:13 -0800343static inline int pld_pcie_get_user_msi_assignment(struct device *dev,
344 char *user_name,
345 int *num_vectors,
346 uint32_t *user_base_data,
347 uint32_t *base_vector)
348{
349 return cnss_get_user_msi_assignment(dev, user_name, num_vectors,
350 user_base_data, base_vector);
351}
Yue Ma85761e62017-10-30 11:13:45 -0700352
Yue Mafd418ea2016-11-21 16:47:13 -0800353static inline int pld_pcie_get_msi_irq(struct device *dev, unsigned int vector)
354{
355 return cnss_get_msi_irq(dev, vector);
356}
Yue Ma85761e62017-10-30 11:13:45 -0700357
Yue Mafd418ea2016-11-21 16:47:13 -0800358static inline void pld_pcie_get_msi_address(struct device *dev,
359 uint32_t *msi_addr_low,
360 uint32_t *msi_addr_high)
361{
362 cnss_get_msi_address(dev, msi_addr_low, msi_addr_high);
363}
Komal Seelam355b1472016-09-02 14:36:21 +0530364#endif
Yuanyuan Liud9f7a362016-01-22 14:27:12 -0800365#endif