This source file includes following definitions.
- ath10k_pci_priv
1
2
3
4
5
6
7 #ifndef _PCI_H_
8 #define _PCI_H_
9
10 #include <linux/interrupt.h>
11 #include <linux/mutex.h>
12
13 #include "hw.h"
14 #include "ce.h"
15 #include "ahb.h"
16
17
18
19
20
21 #define DIAG_TRANSFER_LIMIT 2048
22
23 struct bmi_xfer {
24 bool tx_done;
25 bool rx_done;
26 bool wait_for_resp;
27 u32 resp_len;
28 };
29
30
31
32
33
34
35
36
37
38
39
40
41 struct pcie_state {
42
43
44 u32 pipe_cfg_addr;
45
46
47
48 u32 svc_to_pipe_map;
49
50
51 u32 msi_requested;
52
53
54 u32 msi_granted;
55
56
57 u32 msi_addr;
58
59
60 u32 msi_data;
61
62
63
64
65
66
67 u32 msi_fw_intr_data;
68
69
70 u32 power_mgmt_method;
71
72
73 u32 config_flags;
74 };
75
76
77 #define PCIE_CONFIG_FLAG_ENABLE_L1 0x0000001
78
79
80 struct ath10k_pci_pipe {
81
82 struct ath10k_ce_pipe *ce_hdl;
83
84
85 u8 pipe_num;
86
87
88 struct ath10k *hif_ce_state;
89
90 size_t buf_sz;
91
92
93 spinlock_t pipe_lock;
94 };
95
96 struct ath10k_pci_supp_chip {
97 u32 dev_id;
98 u32 rev_id;
99 };
100
101 enum ath10k_pci_irq_mode {
102 ATH10K_PCI_IRQ_AUTO = 0,
103 ATH10K_PCI_IRQ_LEGACY = 1,
104 ATH10K_PCI_IRQ_MSI = 2,
105 };
106
107 struct ath10k_pci {
108 struct pci_dev *pdev;
109 struct device *dev;
110 struct ath10k *ar;
111 void __iomem *mem;
112 size_t mem_len;
113
114
115 enum ath10k_pci_irq_mode oper_irq_mode;
116
117 struct ath10k_pci_pipe pipe_info[CE_COUNT_MAX];
118
119
120 struct ath10k_ce_pipe *ce_diag;
121
122 struct mutex ce_diag_mutex;
123
124 struct work_struct dump_work;
125
126 struct ath10k_ce ce;
127 struct timer_list rx_post_retry;
128
129
130
131
132
133 u16 link_ctl;
134
135
136 spinlock_t ps_lock;
137
138
139
140
141
142
143
144 unsigned long ps_wake_refcount;
145
146
147
148
149
150
151
152
153
154 struct timer_list ps_timer;
155
156
157
158
159
160
161
162 bool ps_awake;
163
164
165
166
167
168 bool pci_ps;
169
170
171 int (*pci_soft_reset)(struct ath10k *ar);
172
173
174 int (*pci_hard_reset)(struct ath10k *ar);
175
176
177
178
179 u32 (*targ_cpu_to_ce_addr)(struct ath10k *ar, u32 addr);
180
181
182
183
184
185 struct ath10k_ahb ahb[0];
186 };
187
188 static inline struct ath10k_pci *ath10k_pci_priv(struct ath10k *ar)
189 {
190 return (struct ath10k_pci *)ar->drv_priv;
191 }
192
193 #define ATH10K_PCI_RX_POST_RETRY_MS 50
194 #define ATH_PCI_RESET_WAIT_MAX 10
195 #define PCIE_WAKE_TIMEOUT 30000
196 #define PCIE_WAKE_LATE_US 10000
197
198 #define BAR_NUM 0
199
200 #define CDC_WAR_MAGIC_STR 0xceef0000
201 #define CDC_WAR_DATA_CE 4
202
203
204 #define DIAG_ACCESS_CE_TIMEOUT_US 10000
205 #define DIAG_ACCESS_CE_WAIT_US 50
206
207 void ath10k_pci_write32(struct ath10k *ar, u32 offset, u32 value);
208 void ath10k_pci_soc_write32(struct ath10k *ar, u32 addr, u32 val);
209 void ath10k_pci_reg_write32(struct ath10k *ar, u32 addr, u32 val);
210
211 u32 ath10k_pci_read32(struct ath10k *ar, u32 offset);
212 u32 ath10k_pci_soc_read32(struct ath10k *ar, u32 addr);
213 u32 ath10k_pci_reg_read32(struct ath10k *ar, u32 addr);
214
215 int ath10k_pci_hif_tx_sg(struct ath10k *ar, u8 pipe_id,
216 struct ath10k_hif_sg_item *items, int n_items);
217 int ath10k_pci_hif_diag_read(struct ath10k *ar, u32 address, void *buf,
218 size_t buf_len);
219 int ath10k_pci_diag_write_mem(struct ath10k *ar, u32 address,
220 const void *data, int nbytes);
221 int ath10k_pci_hif_exchange_bmi_msg(struct ath10k *ar, void *req, u32 req_len,
222 void *resp, u32 *resp_len);
223 int ath10k_pci_hif_map_service_to_pipe(struct ath10k *ar, u16 service_id,
224 u8 *ul_pipe, u8 *dl_pipe);
225 void ath10k_pci_hif_get_default_pipe(struct ath10k *ar, u8 *ul_pipe,
226 u8 *dl_pipe);
227 void ath10k_pci_hif_send_complete_check(struct ath10k *ar, u8 pipe,
228 int force);
229 u16 ath10k_pci_hif_get_free_queue_number(struct ath10k *ar, u8 pipe);
230 void ath10k_pci_hif_power_down(struct ath10k *ar);
231 int ath10k_pci_alloc_pipes(struct ath10k *ar);
232 void ath10k_pci_free_pipes(struct ath10k *ar);
233 void ath10k_pci_free_pipes(struct ath10k *ar);
234 void ath10k_pci_rx_replenish_retry(struct timer_list *t);
235 void ath10k_pci_ce_deinit(struct ath10k *ar);
236 void ath10k_pci_init_napi(struct ath10k *ar);
237 int ath10k_pci_init_pipes(struct ath10k *ar);
238 int ath10k_pci_init_config(struct ath10k *ar);
239 void ath10k_pci_rx_post(struct ath10k *ar);
240 void ath10k_pci_flush(struct ath10k *ar);
241 void ath10k_pci_enable_legacy_irq(struct ath10k *ar);
242 bool ath10k_pci_irq_pending(struct ath10k *ar);
243 void ath10k_pci_disable_and_clear_legacy_irq(struct ath10k *ar);
244 void ath10k_pci_irq_msi_fw_mask(struct ath10k *ar);
245 int ath10k_pci_wait_for_target_init(struct ath10k *ar);
246 int ath10k_pci_setup_resource(struct ath10k *ar);
247 void ath10k_pci_release_resource(struct ath10k *ar);
248
249
250
251
252
253 #define ATH10K_PCI_SLEEP_GRACE_PERIOD_MSEC 60
254
255 #endif