1 // SPDX-License-Identifier: GPL-2.0
2 /******************************************************************************
3 *
4 * Copyright(c) 2016 Realtek Corporation.
5 *
6 * Contact Information:
7 * wlanfae <wlanfae@realtek.com>
8 * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
9 * Hsinchu 300, Taiwan.
10 *
11 * Larry Finger <Larry.Finger@lwfinger.net>
12 *
13 *****************************************************************************/
14 #include "halmac_88xx_cfg.h"
15
16 /**
17 * halmac_init_pcie_cfg_88xx() - init PCIe
18 * @halmac_adapter : the adapter of halmac
19 * Author : KaiYuan Chang
20 * Return : enum halmac_ret_status
21 * More details of status code can be found in prototype document
22 */
23 enum halmac_ret_status
halmac_init_pcie_cfg_88xx(struct halmac_adapter * halmac_adapter)24 halmac_init_pcie_cfg_88xx(struct halmac_adapter *halmac_adapter)
25 {
26 void *driver_adapter = NULL;
27
28 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
29 return HALMAC_RET_ADAPTER_INVALID;
30
31 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
32 return HALMAC_RET_API_INVALID;
33
34 halmac_api_record_id_88xx(halmac_adapter, HALMAC_API_INIT_PCIE_CFG);
35
36 driver_adapter = halmac_adapter->driver_adapter;
37
38 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
39 "%s ==========>\n", __func__);
40
41 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
42 "%s <==========\n", __func__);
43
44 return HALMAC_RET_SUCCESS;
45 }
46
47 /**
48 * halmac_deinit_pcie_cfg_88xx() - deinit PCIE
49 * @halmac_adapter : the adapter of halmac
50 * Author : KaiYuan Chang
51 * Return : enum halmac_ret_status
52 * More details of status code can be found in prototype document
53 */
54 enum halmac_ret_status
halmac_deinit_pcie_cfg_88xx(struct halmac_adapter * halmac_adapter)55 halmac_deinit_pcie_cfg_88xx(struct halmac_adapter *halmac_adapter)
56 {
57 void *driver_adapter = NULL;
58
59 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
60 return HALMAC_RET_ADAPTER_INVALID;
61
62 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
63 return HALMAC_RET_API_INVALID;
64
65 halmac_api_record_id_88xx(halmac_adapter, HALMAC_API_DEINIT_PCIE_CFG);
66
67 driver_adapter = halmac_adapter->driver_adapter;
68
69 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
70 "%s ==========>\n", __func__);
71
72 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
73 "%s <==========\n", __func__);
74
75 return HALMAC_RET_SUCCESS;
76 }
77
78 /**
79 * halmac_cfg_rx_aggregation_88xx_pcie() - config rx aggregation
80 * @halmac_adapter : the adapter of halmac
81 * @halmac_rx_agg_mode
82 * Author : KaiYuan Chang/Ivan Lin
83 * Return : enum halmac_ret_status
84 * More details of status code can be found in prototype document
85 */
86 enum halmac_ret_status
halmac_cfg_rx_aggregation_88xx_pcie(struct halmac_adapter * halmac_adapter,struct halmac_rxagg_cfg * phalmac_rxagg_cfg)87 halmac_cfg_rx_aggregation_88xx_pcie(struct halmac_adapter *halmac_adapter,
88 struct halmac_rxagg_cfg *phalmac_rxagg_cfg)
89 {
90 void *driver_adapter = NULL;
91
92 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
93 return HALMAC_RET_ADAPTER_INVALID;
94
95 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
96 return HALMAC_RET_API_INVALID;
97
98 halmac_api_record_id_88xx(halmac_adapter,
99 HALMAC_API_CFG_RX_AGGREGATION);
100
101 driver_adapter = halmac_adapter->driver_adapter;
102
103 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
104 "%s ==========>\n", __func__);
105
106 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
107 "%s <==========\n", __func__);
108
109 return HALMAC_RET_SUCCESS;
110 }
111
112 /**
113 * halmac_reg_read_8_pcie_88xx() - read 1byte register
114 * @halmac_adapter : the adapter of halmac
115 * @halmac_offset : register offset
116 * Author : KaiYuan Chang/Ivan Lin
117 * Return : enum halmac_ret_status
118 * More details of status code can be found in prototype document
119 */
halmac_reg_read_8_pcie_88xx(struct halmac_adapter * halmac_adapter,u32 halmac_offset)120 u8 halmac_reg_read_8_pcie_88xx(struct halmac_adapter *halmac_adapter,
121 u32 halmac_offset)
122 {
123 void *driver_adapter = NULL;
124 struct halmac_api *halmac_api;
125
126 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
127 return HALMAC_RET_ADAPTER_INVALID;
128
129 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
130 return HALMAC_RET_API_INVALID;
131
132 driver_adapter = halmac_adapter->driver_adapter;
133 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
134
135 return PLATFORM_REG_READ_8(driver_adapter, halmac_offset);
136 }
137
138 /**
139 * halmac_reg_write_8_pcie_88xx() - write 1byte register
140 * @halmac_adapter : the adapter of halmac
141 * @halmac_offset : register offset
142 * @halmac_data : register value
143 * Author : KaiYuan Chang/Ivan Lin
144 * Return : enum halmac_ret_status
145 * More details of status code can be found in prototype document
146 */
147 enum halmac_ret_status
halmac_reg_write_8_pcie_88xx(struct halmac_adapter * halmac_adapter,u32 halmac_offset,u8 halmac_data)148 halmac_reg_write_8_pcie_88xx(struct halmac_adapter *halmac_adapter,
149 u32 halmac_offset, u8 halmac_data)
150 {
151 void *driver_adapter = NULL;
152 struct halmac_api *halmac_api;
153
154 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
155 return HALMAC_RET_ADAPTER_INVALID;
156
157 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
158 return HALMAC_RET_API_INVALID;
159
160 driver_adapter = halmac_adapter->driver_adapter;
161 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
162
163 PLATFORM_REG_WRITE_8(driver_adapter, halmac_offset, halmac_data);
164
165 return HALMAC_RET_SUCCESS;
166 }
167
168 /**
169 * halmac_reg_read_16_pcie_88xx() - read 2byte register
170 * @halmac_adapter : the adapter of halmac
171 * @halmac_offset : register offset
172 * Author : KaiYuan Chang/Ivan Lin
173 * Return : enum halmac_ret_status
174 * More details of status code can be found in prototype document
175 */
halmac_reg_read_16_pcie_88xx(struct halmac_adapter * halmac_adapter,u32 halmac_offset)176 u16 halmac_reg_read_16_pcie_88xx(struct halmac_adapter *halmac_adapter,
177 u32 halmac_offset)
178 {
179 void *driver_adapter = NULL;
180 struct halmac_api *halmac_api;
181
182 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
183 return HALMAC_RET_ADAPTER_INVALID;
184
185 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
186 return HALMAC_RET_API_INVALID;
187
188 driver_adapter = halmac_adapter->driver_adapter;
189 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
190
191 return PLATFORM_REG_READ_16(driver_adapter, halmac_offset);
192 }
193
194 /**
195 * halmac_reg_write_16_pcie_88xx() - write 2byte register
196 * @halmac_adapter : the adapter of halmac
197 * @halmac_offset : register offset
198 * @halmac_data : register value
199 * Author : KaiYuan Chang/Ivan Lin
200 * Return : enum halmac_ret_status
201 * More details of status code can be found in prototype document
202 */
203 enum halmac_ret_status
halmac_reg_write_16_pcie_88xx(struct halmac_adapter * halmac_adapter,u32 halmac_offset,u16 halmac_data)204 halmac_reg_write_16_pcie_88xx(struct halmac_adapter *halmac_adapter,
205 u32 halmac_offset, u16 halmac_data)
206 {
207 void *driver_adapter = NULL;
208 struct halmac_api *halmac_api;
209
210 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
211 return HALMAC_RET_ADAPTER_INVALID;
212
213 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
214 return HALMAC_RET_API_INVALID;
215
216 driver_adapter = halmac_adapter->driver_adapter;
217 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
218
219 PLATFORM_REG_WRITE_16(driver_adapter, halmac_offset, halmac_data);
220
221 return HALMAC_RET_SUCCESS;
222 }
223
224 /**
225 * halmac_reg_read_32_pcie_88xx() - read 4byte register
226 * @halmac_adapter : the adapter of halmac
227 * @halmac_offset : register offset
228 * Author : KaiYuan Chang/Ivan Lin
229 * Return : enum halmac_ret_status
230 * More details of status code can be found in prototype document
231 */
halmac_reg_read_32_pcie_88xx(struct halmac_adapter * halmac_adapter,u32 halmac_offset)232 u32 halmac_reg_read_32_pcie_88xx(struct halmac_adapter *halmac_adapter,
233 u32 halmac_offset)
234 {
235 void *driver_adapter = NULL;
236 struct halmac_api *halmac_api;
237
238 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
239 return HALMAC_RET_ADAPTER_INVALID;
240
241 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
242 return HALMAC_RET_API_INVALID;
243
244 driver_adapter = halmac_adapter->driver_adapter;
245 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
246
247 return PLATFORM_REG_READ_32(driver_adapter, halmac_offset);
248 }
249
250 /**
251 * halmac_reg_write_32_pcie_88xx() - write 4byte register
252 * @halmac_adapter : the adapter of halmac
253 * @halmac_offset : register offset
254 * @halmac_data : register value
255 * Author : KaiYuan Chang/Ivan Lin
256 * Return : enum halmac_ret_status
257 * More details of status code can be found in prototype document
258 */
259 enum halmac_ret_status
halmac_reg_write_32_pcie_88xx(struct halmac_adapter * halmac_adapter,u32 halmac_offset,u32 halmac_data)260 halmac_reg_write_32_pcie_88xx(struct halmac_adapter *halmac_adapter,
261 u32 halmac_offset, u32 halmac_data)
262 {
263 void *driver_adapter = NULL;
264 struct halmac_api *halmac_api;
265
266 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
267 return HALMAC_RET_ADAPTER_INVALID;
268
269 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
270 return HALMAC_RET_API_INVALID;
271
272 driver_adapter = halmac_adapter->driver_adapter;
273 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
274
275 PLATFORM_REG_WRITE_32(driver_adapter, halmac_offset, halmac_data);
276
277 return HALMAC_RET_SUCCESS;
278 }
279
280 /**
281 * halmac_cfg_tx_agg_align_pcie_88xx() -config sdio bus tx agg alignment
282 * @halmac_adapter : the adapter of halmac
283 * @enable : function enable(1)/disable(0)
284 * @align_size : sdio bus tx agg alignment size (2^n, n = 3~11)
285 * Author : Soar Tu
286 * Return : enum halmac_ret_status
287 * More details of status code can be found in prototype document
288 */
halmac_cfg_tx_agg_align_pcie_not_support_88xx(struct halmac_adapter * halmac_adapter,u8 enable,u16 align_size)289 enum halmac_ret_status halmac_cfg_tx_agg_align_pcie_not_support_88xx(
290 struct halmac_adapter *halmac_adapter, u8 enable, u16 align_size)
291 {
292 struct halmac_api *halmac_api;
293 void *driver_adapter = NULL;
294
295 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
296 return HALMAC_RET_ADAPTER_INVALID;
297
298 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
299 return HALMAC_RET_API_INVALID;
300
301 halmac_api_record_id_88xx(halmac_adapter, HALMAC_API_CFG_TX_AGG_ALIGN);
302
303 driver_adapter = halmac_adapter->driver_adapter;
304 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
305
306 HALMAC_RT_TRACE(
307 driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
308 "%s ==========>\n", __func__);
309
310 HALMAC_RT_TRACE(
311 driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
312 "%s not support\n", __func__);
313 HALMAC_RT_TRACE(
314 driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
315 "%s <==========\n", __func__);
316
317 return HALMAC_RET_SUCCESS;
318 }
319