1 /******************************************************************************
3 * Copyright(c) 2016 Realtek Corporation.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * The full GNU General Public License is included in this distribution in the
15 * file called LICENSE.
17 * Contact Information:
18 * wlanfae <wlanfae@realtek.com>
19 * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
20 * Hsinchu 300, Taiwan.
22 * Larry Finger <Larry.Finger@lwfinger.net>
24 *****************************************************************************/
25 #include "halmac_88xx_cfg.h"
28 * halmac_init_pcie_cfg_88xx() - init PCIe
29 * @halmac_adapter : the adapter of halmac
30 * Author : KaiYuan Chang
31 * Return : enum halmac_ret_status
32 * More details of status code can be found in prototype document
34 enum halmac_ret_status
35 halmac_init_pcie_cfg_88xx(struct halmac_adapter *halmac_adapter)
37 void *driver_adapter = NULL;
39 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
40 return HALMAC_RET_ADAPTER_INVALID;
42 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
43 return HALMAC_RET_API_INVALID;
45 halmac_api_record_id_88xx(halmac_adapter, HALMAC_API_INIT_PCIE_CFG);
47 driver_adapter = halmac_adapter->driver_adapter;
49 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
50 "%s ==========>\n", __func__);
52 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
53 "%s <==========\n", __func__);
55 return HALMAC_RET_SUCCESS;
59 * halmac_deinit_pcie_cfg_88xx() - deinit PCIE
60 * @halmac_adapter : the adapter of halmac
61 * Author : KaiYuan Chang
62 * Return : enum halmac_ret_status
63 * More details of status code can be found in prototype document
65 enum halmac_ret_status
66 halmac_deinit_pcie_cfg_88xx(struct halmac_adapter *halmac_adapter)
68 void *driver_adapter = NULL;
70 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
71 return HALMAC_RET_ADAPTER_INVALID;
73 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
74 return HALMAC_RET_API_INVALID;
76 halmac_api_record_id_88xx(halmac_adapter, HALMAC_API_DEINIT_PCIE_CFG);
78 driver_adapter = halmac_adapter->driver_adapter;
80 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
81 "%s ==========>\n", __func__);
83 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
84 "%s <==========\n", __func__);
86 return HALMAC_RET_SUCCESS;
90 * halmac_cfg_rx_aggregation_88xx_pcie() - config rx aggregation
91 * @halmac_adapter : the adapter of halmac
93 * Author : KaiYuan Chang/Ivan Lin
94 * Return : enum halmac_ret_status
95 * More details of status code can be found in prototype document
97 enum halmac_ret_status
98 halmac_cfg_rx_aggregation_88xx_pcie(struct halmac_adapter *halmac_adapter,
99 struct halmac_rxagg_cfg *phalmac_rxagg_cfg)
101 void *driver_adapter = NULL;
103 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
104 return HALMAC_RET_ADAPTER_INVALID;
106 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
107 return HALMAC_RET_API_INVALID;
109 halmac_api_record_id_88xx(halmac_adapter,
110 HALMAC_API_CFG_RX_AGGREGATION);
112 driver_adapter = halmac_adapter->driver_adapter;
114 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
115 "%s ==========>\n", __func__);
117 HALMAC_RT_TRACE(driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
118 "%s <==========\n", __func__);
120 return HALMAC_RET_SUCCESS;
124 * halmac_reg_read_8_pcie_88xx() - read 1byte register
125 * @halmac_adapter : the adapter of halmac
126 * @halmac_offset : register offset
127 * Author : KaiYuan Chang/Ivan Lin
128 * Return : enum halmac_ret_status
129 * More details of status code can be found in prototype document
131 u8 halmac_reg_read_8_pcie_88xx(struct halmac_adapter *halmac_adapter,
134 void *driver_adapter = NULL;
135 struct halmac_api *halmac_api;
137 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
138 return HALMAC_RET_ADAPTER_INVALID;
140 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
141 return HALMAC_RET_API_INVALID;
143 driver_adapter = halmac_adapter->driver_adapter;
144 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
146 return PLATFORM_REG_READ_8(driver_adapter, halmac_offset);
150 * halmac_reg_write_8_pcie_88xx() - write 1byte register
151 * @halmac_adapter : the adapter of halmac
152 * @halmac_offset : register offset
153 * @halmac_data : register value
154 * Author : KaiYuan Chang/Ivan Lin
155 * Return : enum halmac_ret_status
156 * More details of status code can be found in prototype document
158 enum halmac_ret_status
159 halmac_reg_write_8_pcie_88xx(struct halmac_adapter *halmac_adapter,
160 u32 halmac_offset, u8 halmac_data)
162 void *driver_adapter = NULL;
163 struct halmac_api *halmac_api;
165 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
166 return HALMAC_RET_ADAPTER_INVALID;
168 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
169 return HALMAC_RET_API_INVALID;
171 driver_adapter = halmac_adapter->driver_adapter;
172 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
174 PLATFORM_REG_WRITE_8(driver_adapter, halmac_offset, halmac_data);
176 return HALMAC_RET_SUCCESS;
180 * halmac_reg_read_16_pcie_88xx() - read 2byte register
181 * @halmac_adapter : the adapter of halmac
182 * @halmac_offset : register offset
183 * Author : KaiYuan Chang/Ivan Lin
184 * Return : enum halmac_ret_status
185 * More details of status code can be found in prototype document
187 u16 halmac_reg_read_16_pcie_88xx(struct halmac_adapter *halmac_adapter,
190 void *driver_adapter = NULL;
191 struct halmac_api *halmac_api;
193 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
194 return HALMAC_RET_ADAPTER_INVALID;
196 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
197 return HALMAC_RET_API_INVALID;
199 driver_adapter = halmac_adapter->driver_adapter;
200 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
202 return PLATFORM_REG_READ_16(driver_adapter, halmac_offset);
206 * halmac_reg_write_16_pcie_88xx() - write 2byte register
207 * @halmac_adapter : the adapter of halmac
208 * @halmac_offset : register offset
209 * @halmac_data : register value
210 * Author : KaiYuan Chang/Ivan Lin
211 * Return : enum halmac_ret_status
212 * More details of status code can be found in prototype document
214 enum halmac_ret_status
215 halmac_reg_write_16_pcie_88xx(struct halmac_adapter *halmac_adapter,
216 u32 halmac_offset, u16 halmac_data)
218 void *driver_adapter = NULL;
219 struct halmac_api *halmac_api;
221 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
222 return HALMAC_RET_ADAPTER_INVALID;
224 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
225 return HALMAC_RET_API_INVALID;
227 driver_adapter = halmac_adapter->driver_adapter;
228 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
230 PLATFORM_REG_WRITE_16(driver_adapter, halmac_offset, halmac_data);
232 return HALMAC_RET_SUCCESS;
236 * halmac_reg_read_32_pcie_88xx() - read 4byte register
237 * @halmac_adapter : the adapter of halmac
238 * @halmac_offset : register offset
239 * Author : KaiYuan Chang/Ivan Lin
240 * Return : enum halmac_ret_status
241 * More details of status code can be found in prototype document
243 u32 halmac_reg_read_32_pcie_88xx(struct halmac_adapter *halmac_adapter,
246 void *driver_adapter = NULL;
247 struct halmac_api *halmac_api;
249 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
250 return HALMAC_RET_ADAPTER_INVALID;
252 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
253 return HALMAC_RET_API_INVALID;
255 driver_adapter = halmac_adapter->driver_adapter;
256 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
258 return PLATFORM_REG_READ_32(driver_adapter, halmac_offset);
262 * halmac_reg_write_32_pcie_88xx() - write 4byte register
263 * @halmac_adapter : the adapter of halmac
264 * @halmac_offset : register offset
265 * @halmac_data : register value
266 * Author : KaiYuan Chang/Ivan Lin
267 * Return : enum halmac_ret_status
268 * More details of status code can be found in prototype document
270 enum halmac_ret_status
271 halmac_reg_write_32_pcie_88xx(struct halmac_adapter *halmac_adapter,
272 u32 halmac_offset, u32 halmac_data)
274 void *driver_adapter = NULL;
275 struct halmac_api *halmac_api;
277 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
278 return HALMAC_RET_ADAPTER_INVALID;
280 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
281 return HALMAC_RET_API_INVALID;
283 driver_adapter = halmac_adapter->driver_adapter;
284 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
286 PLATFORM_REG_WRITE_32(driver_adapter, halmac_offset, halmac_data);
288 return HALMAC_RET_SUCCESS;
292 * halmac_cfg_tx_agg_align_pcie_88xx() -config sdio bus tx agg alignment
293 * @halmac_adapter : the adapter of halmac
294 * @enable : function enable(1)/disable(0)
295 * @align_size : sdio bus tx agg alignment size (2^n, n = 3~11)
297 * Return : enum halmac_ret_status
298 * More details of status code can be found in prototype document
300 enum halmac_ret_status halmac_cfg_tx_agg_align_pcie_not_support_88xx(
301 struct halmac_adapter *halmac_adapter, u8 enable, u16 align_size)
303 struct halmac_api *halmac_api;
304 void *driver_adapter = NULL;
306 if (halmac_adapter_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
307 return HALMAC_RET_ADAPTER_INVALID;
309 if (halmac_api_validate(halmac_adapter) != HALMAC_RET_SUCCESS)
310 return HALMAC_RET_API_INVALID;
312 halmac_api_record_id_88xx(halmac_adapter, HALMAC_API_CFG_TX_AGG_ALIGN);
314 driver_adapter = halmac_adapter->driver_adapter;
315 halmac_api = (struct halmac_api *)halmac_adapter->halmac_api;
318 driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
319 "%s ==========>\n", __func__);
322 driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
323 "%s not support\n", __func__);
325 driver_adapter, HALMAC_MSG_INIT, DBG_DMESG,
326 "%s <==========\n", __func__);
328 return HALMAC_RET_SUCCESS;