1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright(c) 2007 - 2011 Realtek Corporation. */
3 
4 #define _RTW_MP_IOCTL_C_
5 
6 #include "../include/osdep_service.h"
7 #include "../include/drv_types.h"
8 #include "../include/mlme_osdep.h"
9 #include "../include/rtw_mp_ioctl.h"
10 
11 /*   rtl8188eu_oid_rtl_seg_81_85   section start **************** */
rtl8188eu_oid_rt_wireless_mode_hdl(struct oid_par_priv * poid_par_priv)12 int rtl8188eu_oid_rt_wireless_mode_hdl(struct oid_par_priv *poid_par_priv)
13 {
14 	int status = NDIS_STATUS_SUCCESS;
15 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
16 
17 	if (poid_par_priv->information_buf_len < sizeof(u8))
18 		return NDIS_STATUS_INVALID_LENGTH;
19 
20 	if (poid_par_priv->type_of_oid == SET_OID) {
21 		Adapter->registrypriv.wireless_mode = *(u8 *)poid_par_priv->information_buf;
22 	} else if (poid_par_priv->type_of_oid == QUERY_OID) {
23 		*(u8 *)poid_par_priv->information_buf = Adapter->registrypriv.wireless_mode;
24 		*poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
25 	} else {
26 		status = NDIS_STATUS_NOT_ACCEPTED;
27 	}
28 
29 	return status;
30 }
31 /*   rtl8188eu_oid_rtl_seg_81_87_80   section start **************** */
rtl8188eu_oid_rt_pro_write_bb_reg_hdl(struct oid_par_priv * poid_par_priv)32 int rtl8188eu_oid_rt_pro_write_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
33 {
34 	struct bb_reg_param *pbbreg;
35 	u16 offset;
36 	u32 value;
37 	int status = NDIS_STATUS_SUCCESS;
38 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
39 
40 	if (poid_par_priv->type_of_oid != SET_OID)
41 		return NDIS_STATUS_NOT_ACCEPTED;
42 
43 	if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param))
44 		return NDIS_STATUS_INVALID_LENGTH;
45 
46 	pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf);
47 
48 	offset = (u16)(pbbreg->offset) & 0xFFF; /* 0ffset :0x800~0xfff */
49 	if (offset < BB_REG_BASE_ADDR)
50 		offset |= BB_REG_BASE_ADDR;
51 
52 	value = pbbreg->value;
53 
54 	_irqlevel_changed_(&oldirql, LOWER);
55 	write_bbreg(Adapter, offset, 0xFFFFFFFF, value);
56 	_irqlevel_changed_(&oldirql, RAISE);
57 
58 	return status;
59 }
60 /*  */
rtl8188eu_oid_rt_pro_read_bb_reg_hdl(struct oid_par_priv * poid_par_priv)61 int rtl8188eu_oid_rt_pro_read_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
62 {
63 	struct bb_reg_param *pbbreg;
64 	u16 offset;
65 	u32 value;
66 	int status = NDIS_STATUS_SUCCESS;
67 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
68 
69 	if (poid_par_priv->type_of_oid != QUERY_OID)
70 		return NDIS_STATUS_NOT_ACCEPTED;
71 
72 	if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param))
73 		return NDIS_STATUS_INVALID_LENGTH;
74 
75 	pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf);
76 
77 	offset = (u16)(pbbreg->offset) & 0xFFF; /* 0ffset :0x800~0xfff */
78 	if (offset < BB_REG_BASE_ADDR)
79 		offset |= BB_REG_BASE_ADDR;
80 
81 	_irqlevel_changed_(&oldirql, LOWER);
82 	value = read_bbreg(Adapter, offset, 0xFFFFFFFF);
83 	_irqlevel_changed_(&oldirql, RAISE);
84 
85 	pbbreg->value = value;
86 	*poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
87 
88 	return status;
89 }
90 /*  */
rtl8188eu_oid_rt_pro_write_rf_reg_hdl(struct oid_par_priv * poid_par_priv)91 int rtl8188eu_oid_rt_pro_write_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
92 {
93 	struct rf_reg_param *pbbreg;
94 	u8 path;
95 	u8 offset;
96 	u32 value;
97 	int status = NDIS_STATUS_SUCCESS;
98 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
99 
100 	if (poid_par_priv->type_of_oid != SET_OID)
101 		return NDIS_STATUS_NOT_ACCEPTED;
102 
103 	if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param))
104 		return NDIS_STATUS_INVALID_LENGTH;
105 
106 	pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf);
107 
108 	if (pbbreg->path >= RF_PATH_MAX)
109 		return NDIS_STATUS_NOT_ACCEPTED;
110 	if (pbbreg->offset > 0xFF)
111 		return NDIS_STATUS_NOT_ACCEPTED;
112 	if (pbbreg->value > 0xFFFFF)
113 		return NDIS_STATUS_NOT_ACCEPTED;
114 
115 	path = (u8)pbbreg->path;
116 	offset = (u8)pbbreg->offset;
117 	value = pbbreg->value;
118 
119 	_irqlevel_changed_(&oldirql, LOWER);
120 	write_rfreg(Adapter, path, offset, value);
121 	_irqlevel_changed_(&oldirql, RAISE);
122 
123 	return status;
124 }
125 /*  */
rtl8188eu_oid_rt_pro_read_rf_reg_hdl(struct oid_par_priv * poid_par_priv)126 int rtl8188eu_oid_rt_pro_read_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
127 {
128 	struct rf_reg_param *pbbreg;
129 	u8 path;
130 	u8 offset;
131 	u32 value;
132 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
133 	int status = NDIS_STATUS_SUCCESS;
134 
135 	if (poid_par_priv->type_of_oid != QUERY_OID)
136 		return NDIS_STATUS_NOT_ACCEPTED;
137 
138 	if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param))
139 		return NDIS_STATUS_INVALID_LENGTH;
140 
141 	pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf);
142 
143 	if (pbbreg->path >= RF_PATH_MAX)
144 		return NDIS_STATUS_NOT_ACCEPTED;
145 	if (pbbreg->offset > 0xFF)
146 		return NDIS_STATUS_NOT_ACCEPTED;
147 
148 	path = (u8)pbbreg->path;
149 	offset = (u8)pbbreg->offset;
150 
151 	_irqlevel_changed_(&oldirql, LOWER);
152 	value = read_rfreg(Adapter, path, offset);
153 	_irqlevel_changed_(&oldirql, RAISE);
154 
155 	pbbreg->value = value;
156 
157 	*poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
158 
159 	return status;
160 }
161 /*   rtl8188eu_oid_rtl_seg_81_87_00   section end**************** */
162 /*  */
163 
164 /*   rtl8188eu_oid_rtl_seg_81_80_00   section start **************** */
165 /*  */
rtl8188eu_oid_rt_pro_set_data_rate_hdl(struct oid_par_priv * poid_par_priv)166 int rtl8188eu_oid_rt_pro_set_data_rate_hdl(struct oid_par_priv *poid_par_priv)
167 {
168 	u32		ratevalue;/* 4 */
169 	int status = NDIS_STATUS_SUCCESS;
170 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
171 
172 	if (poid_par_priv->type_of_oid != SET_OID)
173 		return NDIS_STATUS_NOT_ACCEPTED;
174 
175 	if (poid_par_priv->information_buf_len != sizeof(u32))
176 		return NDIS_STATUS_INVALID_LENGTH;
177 
178 	ratevalue = *((u32 *)poid_par_priv->information_buf);/* 4 */
179 	if (ratevalue >= MPT_RATE_LAST)
180 		return NDIS_STATUS_INVALID_DATA;
181 
182 	Adapter->mppriv.rateidx = ratevalue;
183 
184 	_irqlevel_changed_(&oldirql, LOWER);
185 	SetDataRate(Adapter);
186 	_irqlevel_changed_(&oldirql, RAISE);
187 
188 	return status;
189 }
190 /*  */
rtl8188eu_oid_rt_pro_start_test_hdl(struct oid_par_priv * poid_par_priv)191 int rtl8188eu_oid_rt_pro_start_test_hdl(struct oid_par_priv *poid_par_priv)
192 {
193 	u32		mode;
194 	int status = NDIS_STATUS_SUCCESS;
195 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
196 
197 	if (Adapter->registrypriv.mp_mode == 0)
198 		return NDIS_STATUS_NOT_ACCEPTED;
199 
200 	if (poid_par_priv->type_of_oid != SET_OID)
201 		return NDIS_STATUS_NOT_ACCEPTED;
202 
203 	_irqlevel_changed_(&oldirql, LOWER);
204 
205 	/* IQCalibrateBcut(Adapter); */
206 
207 	mode = *((u32 *)poid_par_priv->information_buf);
208 	Adapter->mppriv.mode = mode;/*  1 for loopback */
209 
210 	if (mp_start_test(Adapter) == _FAIL) {
211 		status = NDIS_STATUS_NOT_ACCEPTED;
212 		goto exit;
213 	}
214 
215 exit:
216 	_irqlevel_changed_(&oldirql, RAISE);
217 
218 	return status;
219 }
220 /*  */
rtl8188eu_oid_rt_pro_stop_test_hdl(struct oid_par_priv * poid_par_priv)221 int rtl8188eu_oid_rt_pro_stop_test_hdl(struct oid_par_priv *poid_par_priv)
222 {
223 	int status = NDIS_STATUS_SUCCESS;
224 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
225 
226 	if (poid_par_priv->type_of_oid != SET_OID)
227 		return NDIS_STATUS_NOT_ACCEPTED;
228 
229 	_irqlevel_changed_(&oldirql, LOWER);
230 	mp_stop_test(Adapter);
231 	_irqlevel_changed_(&oldirql, RAISE);
232 
233 	return status;
234 }
235 /*  */
rtl8188eu_oid_rt_pro_set_channel_direct_call_hdl(struct oid_par_priv * poid_par_priv)236 int rtl8188eu_oid_rt_pro_set_channel_direct_call_hdl(struct oid_par_priv *poid_par_priv)
237 {
238 	u32		Channel;
239 	int status = NDIS_STATUS_SUCCESS;
240 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
241 
242 	if (poid_par_priv->information_buf_len != sizeof(u32))
243 		return NDIS_STATUS_INVALID_LENGTH;
244 
245 	if (poid_par_priv->type_of_oid == QUERY_OID) {
246 		*((u32 *)poid_par_priv->information_buf) = Adapter->mppriv.channel;
247 		return NDIS_STATUS_SUCCESS;
248 	}
249 
250 	if (poid_par_priv->type_of_oid != SET_OID)
251 		return NDIS_STATUS_NOT_ACCEPTED;
252 
253 	Channel = *((u32 *)poid_par_priv->information_buf);
254 	if (Channel > 14)
255 		return NDIS_STATUS_NOT_ACCEPTED;
256 	Adapter->mppriv.channel = Channel;
257 
258 	_irqlevel_changed_(&oldirql, LOWER);
259 	SetChannel(Adapter);
260 	_irqlevel_changed_(&oldirql, RAISE);
261 
262 	return status;
263 }
264 /*  */
rtl8188eu_oid_rt_set_bandwidth_hdl(struct oid_par_priv * poid_par_priv)265 int rtl8188eu_oid_rt_set_bandwidth_hdl(struct oid_par_priv *poid_par_priv)
266 {
267 	u16		bandwidth;
268 	u16		channel_offset;
269 	int status = NDIS_STATUS_SUCCESS;
270 	struct adapter *padapter = (struct adapter *)(poid_par_priv->adapter_context);
271 
272 	if (poid_par_priv->type_of_oid != SET_OID)
273 		return NDIS_STATUS_NOT_ACCEPTED;
274 
275 	if (poid_par_priv->information_buf_len < sizeof(u32))
276 		return NDIS_STATUS_INVALID_LENGTH;
277 
278 	bandwidth = *((u32 *)poid_par_priv->information_buf);/* 4 */
279 	channel_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
280 
281 	if (bandwidth != HT_CHANNEL_WIDTH_40)
282 		bandwidth = HT_CHANNEL_WIDTH_20;
283 	padapter->mppriv.bandwidth = (u8)bandwidth;
284 	padapter->mppriv.prime_channel_offset = (u8)channel_offset;
285 
286 	_irqlevel_changed_(&oldirql, LOWER);
287 	SetBandwidth(padapter);
288 	_irqlevel_changed_(&oldirql, RAISE);
289 
290 	return status;
291 }
292 /*  */
rtl8188eu_oid_rt_pro_set_antenna_bb_hdl(struct oid_par_priv * poid_par_priv)293 int rtl8188eu_oid_rt_pro_set_antenna_bb_hdl(struct oid_par_priv *poid_par_priv)
294 {
295 	u32		antenna;
296 	int status = NDIS_STATUS_SUCCESS;
297 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
298 
299 	if (poid_par_priv->information_buf_len != sizeof(u32))
300 		return NDIS_STATUS_INVALID_LENGTH;
301 
302 	if (poid_par_priv->type_of_oid == SET_OID) {
303 		antenna = *(u32 *)poid_par_priv->information_buf;
304 
305 		Adapter->mppriv.antenna_tx = (u16)((antenna & 0xFFFF0000) >> 16);
306 		Adapter->mppriv.antenna_rx = (u16)(antenna & 0x0000FFFF);
307 
308 		_irqlevel_changed_(&oldirql, LOWER);
309 		SetAntenna(Adapter);
310 		_irqlevel_changed_(&oldirql, RAISE);
311 	} else {
312 		antenna = (Adapter->mppriv.antenna_tx << 16) | Adapter->mppriv.antenna_rx;
313 		*(u32 *)poid_par_priv->information_buf = antenna;
314 	}
315 
316 	return status;
317 }
318 
rtl8188eu_oid_rt_pro_set_tx_power_control_hdl(struct oid_par_priv * poid_par_priv)319 int rtl8188eu_oid_rt_pro_set_tx_power_control_hdl(struct oid_par_priv *poid_par_priv)
320 {
321 	u32		tx_pwr_idx;
322 	int status = NDIS_STATUS_SUCCESS;
323 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
324 
325 	if (poid_par_priv->type_of_oid != SET_OID)
326 		return NDIS_STATUS_NOT_ACCEPTED;
327 
328 	if (poid_par_priv->information_buf_len != sizeof(u32))
329 		return NDIS_STATUS_INVALID_LENGTH;
330 
331 	tx_pwr_idx = *((u32 *)poid_par_priv->information_buf);
332 	if (tx_pwr_idx > MAX_TX_PWR_INDEX_N_MODE)
333 		return NDIS_STATUS_NOT_ACCEPTED;
334 
335 	Adapter->mppriv.txpoweridx = (u8)tx_pwr_idx;
336 
337 	_irqlevel_changed_(&oldirql, LOWER);
338 	SetTxPower(Adapter);
339 	_irqlevel_changed_(&oldirql, RAISE);
340 
341 	return status;
342 }
343 
344 /*  */
345 /*   rtl8188eu_oid_rtl_seg_81_80_20   section start **************** */
346 /*  */
rtl8188eu_oid_rt_pro_query_tx_packet_sent_hdl(struct oid_par_priv * poid_par_priv)347 int rtl8188eu_oid_rt_pro_query_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv)
348 {
349 	int status = NDIS_STATUS_SUCCESS;
350 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
351 
352 	if (poid_par_priv->type_of_oid != QUERY_OID) {
353 		status = NDIS_STATUS_NOT_ACCEPTED;
354 		return status;
355 	}
356 
357 	if (poid_par_priv->information_buf_len == sizeof(u32)) {
358 		*(u32 *)poid_par_priv->information_buf =  Adapter->mppriv.tx_pktcount;
359 		*poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
360 	} else {
361 		status = NDIS_STATUS_INVALID_LENGTH;
362 	}
363 
364 	return status;
365 }
366 /*  */
rtl8188eu_oid_rt_pro_query_rx_packet_received_hdl(struct oid_par_priv * poid_par_priv)367 int rtl8188eu_oid_rt_pro_query_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
368 {
369 	int status = NDIS_STATUS_SUCCESS;
370 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
371 
372 	if (poid_par_priv->type_of_oid != QUERY_OID) {
373 		status = NDIS_STATUS_NOT_ACCEPTED;
374 		return status;
375 	}
376 	if (poid_par_priv->information_buf_len == sizeof(u32)) {
377 		*(u32 *)poid_par_priv->information_buf =  Adapter->mppriv.rx_pktcount;
378 		*poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
379 	} else {
380 		status = NDIS_STATUS_INVALID_LENGTH;
381 	}
382 
383 	return status;
384 }
385 /*  */
rtl8188eu_oid_rt_pro_query_rx_packet_crc32_error_hdl(struct oid_par_priv * poid_par_priv)386 int rtl8188eu_oid_rt_pro_query_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
387 {
388 	int status = NDIS_STATUS_SUCCESS;
389 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
390 
391 	if (poid_par_priv->type_of_oid != QUERY_OID) {
392 		status = NDIS_STATUS_NOT_ACCEPTED;
393 		return status;
394 	}
395 	if (poid_par_priv->information_buf_len == sizeof(u32)) {
396 		*(u32 *)poid_par_priv->information_buf =  Adapter->mppriv.rx_crcerrpktcount;
397 		*poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
398 	} else {
399 		status = NDIS_STATUS_INVALID_LENGTH;
400 	}
401 
402 	return status;
403 }
404 /*  */
405 
rtl8188eu_oid_rt_pro_reset_tx_packet_sent_hdl(struct oid_par_priv * poid_par_priv)406 int rtl8188eu_oid_rt_pro_reset_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv)
407 {
408 	int status = NDIS_STATUS_SUCCESS;
409 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
410 
411 	if (poid_par_priv->type_of_oid != SET_OID) {
412 		status = NDIS_STATUS_NOT_ACCEPTED;
413 		return status;
414 	}
415 
416 	Adapter->mppriv.tx_pktcount = 0;
417 
418 	return status;
419 }
420 /*  */
rtl8188eu_oid_rt_pro_reset_rx_packet_received_hdl(struct oid_par_priv * poid_par_priv)421 int rtl8188eu_oid_rt_pro_reset_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
422 {
423 	int status = NDIS_STATUS_SUCCESS;
424 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
425 
426 	if (poid_par_priv->type_of_oid != SET_OID) {
427 		status = NDIS_STATUS_NOT_ACCEPTED;
428 		return status;
429 	}
430 
431 	if (poid_par_priv->information_buf_len == sizeof(u32)) {
432 		Adapter->mppriv.rx_pktcount = 0;
433 		Adapter->mppriv.rx_crcerrpktcount = 0;
434 	} else {
435 		status = NDIS_STATUS_INVALID_LENGTH;
436 	}
437 
438 	return status;
439 }
440 /*  */
rtl8188eu_oid_rt_reset_phy_rx_packet_count_hdl(struct oid_par_priv * poid_par_priv)441 int rtl8188eu_oid_rt_reset_phy_rx_packet_count_hdl(struct oid_par_priv *poid_par_priv)
442 {
443 	int status = NDIS_STATUS_SUCCESS;
444 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
445 
446 	if (poid_par_priv->type_of_oid != SET_OID) {
447 		status = NDIS_STATUS_NOT_ACCEPTED;
448 		return status;
449 	}
450 
451 	_irqlevel_changed_(&oldirql, LOWER);
452 	ResetPhyRxPktCount(Adapter);
453 	_irqlevel_changed_(&oldirql, RAISE);
454 
455 	return status;
456 }
457 /*  */
rtl8188eu_oid_rt_get_phy_rx_packet_received_hdl(struct oid_par_priv * poid_par_priv)458 int rtl8188eu_oid_rt_get_phy_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
459 {
460 	int status = NDIS_STATUS_SUCCESS;
461 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
462 
463 	if (poid_par_priv->type_of_oid != QUERY_OID)
464 		return NDIS_STATUS_NOT_ACCEPTED;
465 
466 	if (poid_par_priv->information_buf_len != sizeof(u32))
467 		return NDIS_STATUS_INVALID_LENGTH;
468 
469 	_irqlevel_changed_(&oldirql, LOWER);
470 	*(u32 *)poid_par_priv->information_buf = GetPhyRxPktReceived(Adapter);
471 	_irqlevel_changed_(&oldirql, RAISE);
472 
473 	*poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
474 
475 	return status;
476 }
477 /*  */
rtl8188eu_oid_rt_get_phy_rx_packet_crc32_error_hdl(struct oid_par_priv * poid_par_priv)478 int rtl8188eu_oid_rt_get_phy_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
479 {
480 	int status = NDIS_STATUS_SUCCESS;
481 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
482 
483 	if (poid_par_priv->type_of_oid != QUERY_OID)
484 		return NDIS_STATUS_NOT_ACCEPTED;
485 
486 	if (poid_par_priv->information_buf_len != sizeof(u32))
487 		return NDIS_STATUS_INVALID_LENGTH;
488 
489 	_irqlevel_changed_(&oldirql, LOWER);
490 	*(u32 *)poid_par_priv->information_buf = GetPhyRxPktCRC32Error(Adapter);
491 	_irqlevel_changed_(&oldirql, RAISE);
492 
493 	*poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
494 
495 	return status;
496 }
497 /*   rtl8188eu_oid_rtl_seg_81_80_20   section end **************** */
rtl8188eu_oid_rt_pro_set_continuous_tx_hdl(struct oid_par_priv * poid_par_priv)498 int rtl8188eu_oid_rt_pro_set_continuous_tx_hdl(struct oid_par_priv *poid_par_priv)
499 {
500 	u32		bStartTest;
501 	int status = NDIS_STATUS_SUCCESS;
502 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
503 
504 	if (poid_par_priv->type_of_oid != SET_OID)
505 		return NDIS_STATUS_NOT_ACCEPTED;
506 
507 	bStartTest = *((u32 *)poid_par_priv->information_buf);
508 
509 	_irqlevel_changed_(&oldirql, LOWER);
510 	SetContinuousTx(Adapter, (u8)bStartTest);
511 	if (bStartTest) {
512 		struct mp_priv *pmp_priv = &Adapter->mppriv;
513 		if (pmp_priv->tx.stop == 0) {
514 			pmp_priv->tx.stop = 1;
515 			DBG_88E("%s: pkt tx is running...\n", __func__);
516 			msleep(5);
517 		}
518 		pmp_priv->tx.stop = 0;
519 		pmp_priv->tx.count = 1;
520 		SetPacketTx(Adapter);
521 	}
522 	_irqlevel_changed_(&oldirql, RAISE);
523 
524 	return status;
525 }
526 
rtl8188eu_oid_rt_pro_set_single_carrier_tx_hdl(struct oid_par_priv * poid_par_priv)527 int rtl8188eu_oid_rt_pro_set_single_carrier_tx_hdl(struct oid_par_priv *poid_par_priv)
528 {
529 	u32		bStartTest;
530 	int status = NDIS_STATUS_SUCCESS;
531 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
532 
533 	if (poid_par_priv->type_of_oid != SET_OID)
534 		return NDIS_STATUS_NOT_ACCEPTED;
535 
536 	bStartTest = *((u32 *)poid_par_priv->information_buf);
537 
538 	_irqlevel_changed_(&oldirql, LOWER);
539 	SetSingleCarrierTx(Adapter, (u8)bStartTest);
540 	if (bStartTest) {
541 		struct mp_priv *pmp_priv = &Adapter->mppriv;
542 		if (pmp_priv->tx.stop == 0) {
543 			pmp_priv->tx.stop = 1;
544 			DBG_88E("%s: pkt tx is running...\n", __func__);
545 			msleep(5);
546 		}
547 		pmp_priv->tx.stop = 0;
548 		pmp_priv->tx.count = 1;
549 		SetPacketTx(Adapter);
550 	}
551 	_irqlevel_changed_(&oldirql, RAISE);
552 
553 	return status;
554 }
555 
rtl8188eu_oid_rt_pro_set_carrier_suppression_tx_hdl(struct oid_par_priv * poid_par_priv)556 int rtl8188eu_oid_rt_pro_set_carrier_suppression_tx_hdl(struct oid_par_priv *poid_par_priv)
557 {
558 	u32		bStartTest;
559 	int status = NDIS_STATUS_SUCCESS;
560 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
561 
562 	if (poid_par_priv->type_of_oid != SET_OID)
563 		return NDIS_STATUS_NOT_ACCEPTED;
564 
565 	bStartTest = *((u32 *)poid_par_priv->information_buf);
566 
567 	_irqlevel_changed_(&oldirql, LOWER);
568 	SetCarrierSuppressionTx(Adapter, (u8)bStartTest);
569 	if (bStartTest) {
570 		struct mp_priv *pmp_priv = &Adapter->mppriv;
571 		if (pmp_priv->tx.stop == 0) {
572 			pmp_priv->tx.stop = 1;
573 			DBG_88E("%s: pkt tx is running...\n", __func__);
574 			msleep(5);
575 		}
576 		pmp_priv->tx.stop = 0;
577 		pmp_priv->tx.count = 1;
578 		SetPacketTx(Adapter);
579 	}
580 	_irqlevel_changed_(&oldirql, RAISE);
581 
582 	return status;
583 }
584 
rtl8188eu_oid_rt_pro_set_single_tone_tx_hdl(struct oid_par_priv * poid_par_priv)585 int rtl8188eu_oid_rt_pro_set_single_tone_tx_hdl(struct oid_par_priv *poid_par_priv)
586 {
587 	u32		bStartTest;
588 	int status = NDIS_STATUS_SUCCESS;
589 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
590 
591 	if (poid_par_priv->type_of_oid != SET_OID)
592 		return NDIS_STATUS_NOT_ACCEPTED;
593 
594 	bStartTest = *((u32 *)poid_par_priv->information_buf);
595 
596 	_irqlevel_changed_(&oldirql, LOWER);
597 	SetSingleToneTx(Adapter, (u8)bStartTest);
598 	_irqlevel_changed_(&oldirql, RAISE);
599 
600 	return status;
601 }
602 
rtl8188eu_oid_rt_pro_set_modulation_hdl(struct oid_par_priv * poid_par_priv)603 int rtl8188eu_oid_rt_pro_set_modulation_hdl(struct oid_par_priv *poid_par_priv)
604 {
605 	return 0;
606 }
607 
rtl8188eu_oid_rt_pro_trigger_gpio_hdl(struct oid_par_priv * poid_par_priv)608 int rtl8188eu_oid_rt_pro_trigger_gpio_hdl(struct oid_par_priv *poid_par_priv)
609 {
610 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
611 	int status = NDIS_STATUS_SUCCESS;
612 
613 	if (poid_par_priv->type_of_oid != SET_OID)
614 		return NDIS_STATUS_NOT_ACCEPTED;
615 
616 	_irqlevel_changed_(&oldirql, LOWER);
617 	rtw_hal_set_hwreg(Adapter, HW_VAR_TRIGGER_GPIO_0, NULL);
618 	_irqlevel_changed_(&oldirql, RAISE);
619 
620 	return status;
621 }
622 /*   rtl8188eu_oid_rtl_seg_81_80_00   section end **************** */
623 /*  */
rtl8188eu_oid_rt_pro8711_join_bss_hdl(struct oid_par_priv * poid_par_priv)624 int rtl8188eu_oid_rt_pro8711_join_bss_hdl(struct oid_par_priv *poid_par_priv)
625 {
626 	return 0;
627 }
628 /*  */
rtl8188eu_oid_rt_pro_read_register_hdl(struct oid_par_priv * poid_par_priv)629 int rtl8188eu_oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv)
630 {
631 	struct mp_rw_reg *RegRWStruct;
632 	u32		offset, width;
633 	int status = NDIS_STATUS_SUCCESS;
634 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
635 
636 	if (poid_par_priv->type_of_oid != QUERY_OID)
637 		return NDIS_STATUS_NOT_ACCEPTED;
638 
639 	RegRWStruct = (struct mp_rw_reg *)poid_par_priv->information_buf;
640 	offset = RegRWStruct->offset;
641 	width = RegRWStruct->width;
642 
643 	if (offset > 0xFFF)
644 		return NDIS_STATUS_NOT_ACCEPTED;
645 
646 	_irqlevel_changed_(&oldirql, LOWER);
647 
648 	switch (width) {
649 	case 1:
650 		RegRWStruct->value = rtw_read8(Adapter, offset);
651 		break;
652 	case 2:
653 		RegRWStruct->value = rtw_read16(Adapter, offset);
654 		break;
655 	default:
656 		width = 4;
657 		RegRWStruct->value = rtw_read32(Adapter, offset);
658 		break;
659 	}
660 
661 	_irqlevel_changed_(&oldirql, RAISE);
662 
663 	*poid_par_priv->bytes_rw = width;
664 
665 	return status;
666 }
667 /*  */
rtl8188eu_oid_rt_pro_write_register_hdl(struct oid_par_priv * poid_par_priv)668 int rtl8188eu_oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv)
669 {
670 	struct mp_rw_reg *RegRWStruct;
671 	u32 offset, value;
672 	int status = NDIS_STATUS_SUCCESS;
673 	struct adapter *padapter = (struct adapter *)(poid_par_priv->adapter_context);
674 
675 	if (poid_par_priv->type_of_oid != SET_OID)
676 		return NDIS_STATUS_NOT_ACCEPTED;
677 
678 	RegRWStruct = (struct mp_rw_reg *)poid_par_priv->information_buf;
679 	offset = RegRWStruct->offset;
680 	value = RegRWStruct->value;
681 
682 	if (offset > 0xFFF)
683 		return NDIS_STATUS_NOT_ACCEPTED;
684 
685 	_irqlevel_changed_(&oldirql, LOWER);
686 
687 	switch (RegRWStruct->width) {
688 	case 1:
689 		if (value > 0xFF) {
690 			status = NDIS_STATUS_NOT_ACCEPTED;
691 			break;
692 		}
693 		rtw_write8(padapter, offset, (u8)value);
694 		break;
695 	case 2:
696 		if (value > 0xFFFF) {
697 			status = NDIS_STATUS_NOT_ACCEPTED;
698 			break;
699 		}
700 		rtw_write16(padapter, offset, (u16)value);
701 		break;
702 	case 4:
703 		rtw_write32(padapter, offset, value);
704 		break;
705 	default:
706 		status = NDIS_STATUS_NOT_ACCEPTED;
707 		break;
708 	}
709 
710 	_irqlevel_changed_(&oldirql, RAISE);
711 
712 	return status;
713 }
714 /*  */
rtl8188eu_oid_rt_pro_burst_read_register_hdl(struct oid_par_priv * poid_par_priv)715 int rtl8188eu_oid_rt_pro_burst_read_register_hdl(struct oid_par_priv *poid_par_priv)
716 {
717 	return 0;
718 }
719 /*  */
rtl8188eu_oid_rt_pro_burst_write_register_hdl(struct oid_par_priv * poid_par_priv)720 int rtl8188eu_oid_rt_pro_burst_write_register_hdl(struct oid_par_priv *poid_par_priv)
721 {
722 	return 0;
723 }
724 /*  */
rtl8188eu_oid_rt_pro_write_txcmd_hdl(struct oid_par_priv * poid_par_priv)725 int rtl8188eu_oid_rt_pro_write_txcmd_hdl(struct oid_par_priv *poid_par_priv)
726 {
727 	return 0;
728 }
729 
730 /*  */
rtl8188eu_oid_rt_pro_read16_eeprom_hdl(struct oid_par_priv * poid_par_priv)731 int rtl8188eu_oid_rt_pro_read16_eeprom_hdl(struct oid_par_priv *poid_par_priv)
732 {
733 	return 0;
734 }
735 
736 /*  */
rtl8188eu_oid_rt_pro_write16_eeprom_hdl(struct oid_par_priv * poid_par_priv)737 int rtl8188eu_oid_rt_pro_write16_eeprom_hdl(struct oid_par_priv *poid_par_priv)
738 {
739 	return 0;
740 }
741 /*  */
rtl8188eu_oid_rt_pro8711_wi_poll_hdl(struct oid_par_priv * poid_par_priv)742 int rtl8188eu_oid_rt_pro8711_wi_poll_hdl(struct oid_par_priv *poid_par_priv)
743 {
744 	return 0;
745 }
746 /*  */
rtl8188eu_oid_rt_pro8711_pkt_loss_hdl(struct oid_par_priv * poid_par_priv)747 int rtl8188eu_oid_rt_pro8711_pkt_loss_hdl(struct oid_par_priv *poid_par_priv)
748 {
749 	return 0;
750 }
751 /*  */
rtl8188eu_oid_rt_rd_attrib_mem_hdl(struct oid_par_priv * poid_par_priv)752 int rtl8188eu_oid_rt_rd_attrib_mem_hdl(struct oid_par_priv *poid_par_priv)
753 {
754 	return 0;
755 }
756 /*  */
rtl8188eu_oid_rt_wr_attrib_mem_hdl(struct oid_par_priv * poid_par_priv)757 int rtl8188eu_oid_rt_wr_attrib_mem_hdl(struct oid_par_priv *poid_par_priv)
758 {
759 	return 0;
760 }
761 /*  */
rtl8188eu_oid_rt_pro_set_rf_intfs_hdl(struct oid_par_priv * poid_par_priv)762 int  rtl8188eu_oid_rt_pro_set_rf_intfs_hdl(struct oid_par_priv *poid_par_priv)
763 {
764 	return 0;
765 }
766 /*  */
rtl8188eu_oid_rt_poll_rx_status_hdl(struct oid_par_priv * poid_par_priv)767 int rtl8188eu_oid_rt_poll_rx_status_hdl(struct oid_par_priv *poid_par_priv)
768 {
769 	return 0;
770 }
771 /*  */
rtl8188eu_oid_rt_pro_cfg_debug_message_hdl(struct oid_par_priv * poid_par_priv)772 int rtl8188eu_oid_rt_pro_cfg_debug_message_hdl(struct oid_par_priv *poid_par_priv)
773 {
774 	return 0;
775 }
776 /*  */
rtl8188eu_oid_rt_pro_set_data_rate_ex_hdl(struct oid_par_priv * poid_par_priv)777 int rtl8188eu_oid_rt_pro_set_data_rate_ex_hdl(struct oid_par_priv *poid_par_priv)
778 {
779 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
780 
781 	int status = NDIS_STATUS_SUCCESS;
782 
783 	if (poid_par_priv->type_of_oid != SET_OID)
784 		return NDIS_STATUS_NOT_ACCEPTED;
785 
786 	_irqlevel_changed_(&oldirql, LOWER);
787 
788 	if (rtw_setdatarate_cmd(Adapter, poid_par_priv->information_buf) != _SUCCESS)
789 		status = NDIS_STATUS_NOT_ACCEPTED;
790 
791 	_irqlevel_changed_(&oldirql, RAISE);
792 
793 	return status;
794 }
795 /*  */
rtl8188eu_oid_rt_get_thermal_meter_hdl(struct oid_par_priv * poid_par_priv)796 int rtl8188eu_oid_rt_get_thermal_meter_hdl(struct oid_par_priv *poid_par_priv)
797 {
798 	int status = NDIS_STATUS_SUCCESS;
799 	u8 thermal = 0;
800 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
801 
802 	if (poid_par_priv->type_of_oid != QUERY_OID)
803 		return NDIS_STATUS_NOT_ACCEPTED;
804 
805 	if (poid_par_priv->information_buf_len < sizeof(u32))
806 		return NDIS_STATUS_INVALID_LENGTH;
807 
808 	_irqlevel_changed_(&oldirql, LOWER);
809 	GetThermalMeter(Adapter, &thermal);
810 	_irqlevel_changed_(&oldirql, RAISE);
811 
812 	*(u32 *)poid_par_priv->information_buf = (u32)thermal;
813 	*poid_par_priv->bytes_rw = sizeof(u32);
814 
815 	return status;
816 }
817 /*  */
rtl8188eu_oid_rt_pro_read_tssi_hdl(struct oid_par_priv * poid_par_priv)818 int rtl8188eu_oid_rt_pro_read_tssi_hdl(struct oid_par_priv *poid_par_priv)
819 {
820 	return 0;
821 }
822 /*  */
rtl8188eu_oid_rt_pro_set_power_tracking_hdl(struct oid_par_priv * poid_par_priv)823 int rtl8188eu_oid_rt_pro_set_power_tracking_hdl(struct oid_par_priv *poid_par_priv)
824 {
825 	int status = NDIS_STATUS_SUCCESS;
826 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
827 
828 	if (poid_par_priv->information_buf_len < sizeof(u8))
829 		return NDIS_STATUS_INVALID_LENGTH;
830 
831 	_irqlevel_changed_(&oldirql, LOWER);
832 	if (poid_par_priv->type_of_oid == SET_OID) {
833 		u8 enable;
834 
835 		enable = *(u8 *)poid_par_priv->information_buf;
836 
837 		SetPowerTracking(Adapter, enable);
838 	} else {
839 		GetPowerTracking(Adapter, (u8 *)poid_par_priv->information_buf);
840 	}
841 	_irqlevel_changed_(&oldirql, RAISE);
842 
843 	return status;
844 }
845 /*  */
rtl8188eu_oid_rt_pro_set_basic_rate_hdl(struct oid_par_priv * poid_par_priv)846 int rtl8188eu_oid_rt_pro_set_basic_rate_hdl(struct oid_par_priv *poid_par_priv)
847 {
848 	return 0;
849 }
850 /*  */
rtl8188eu_oid_rt_pro_qry_pwrstate_hdl(struct oid_par_priv * poid_par_priv)851 int rtl8188eu_oid_rt_pro_qry_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
852 {
853 	return 0;
854 }
855 /*  */
rtl8188eu_oid_rt_pro_set_pwrstate_hdl(struct oid_par_priv * poid_par_priv)856 int rtl8188eu_oid_rt_pro_set_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
857 {
858 	return 0;
859 }
860 /*  */
rtl8188eu_oid_rt_pro_h2c_set_rate_table_hdl(struct oid_par_priv * poid_par_priv)861 int rtl8188eu_oid_rt_pro_h2c_set_rate_table_hdl(struct oid_par_priv *poid_par_priv)
862 {
863 	return 0;
864 }
865 /*  */
rtl8188eu_oid_rt_pro_h2c_get_rate_table_hdl(struct oid_par_priv * poid_par_priv)866 int rtl8188eu_oid_rt_pro_h2c_get_rate_table_hdl(struct oid_par_priv *poid_par_priv)
867 {
868 	return 0;
869 }
870 
871 /*   rtl8188eu_oid_rtl_seg_87_12_00   section start **************** */
rtl8188eu_oid_rt_pro_encryption_ctrl_hdl(struct oid_par_priv * poid_par_priv)872 int rtl8188eu_oid_rt_pro_encryption_ctrl_hdl(struct oid_par_priv *poid_par_priv)
873 {
874 	return 0;
875 }
876 
rtl8188eu_oid_rt_pro_add_sta_info_hdl(struct oid_par_priv * poid_par_priv)877 int rtl8188eu_oid_rt_pro_add_sta_info_hdl(struct oid_par_priv *poid_par_priv)
878 {
879 	return 0;
880 }
881 
rtl8188eu_oid_rt_pro_dele_sta_info_hdl(struct oid_par_priv * poid_par_priv)882 int rtl8188eu_oid_rt_pro_dele_sta_info_hdl(struct oid_par_priv *poid_par_priv)
883 {
884 	return 0;
885 }
886 
rtl8188eu_oid_rt_pro_query_dr_variable_hdl(struct oid_par_priv * poid_par_priv)887 int rtl8188eu_oid_rt_pro_query_dr_variable_hdl(struct oid_par_priv *poid_par_priv)
888 {
889 	return 0;
890 }
891 
rtl8188eu_oid_rt_pro_rx_packet_type_hdl(struct oid_par_priv * poid_par_priv)892 int rtl8188eu_oid_rt_pro_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
893 {
894 	return NDIS_STATUS_SUCCESS;
895 }
896 /*  */
rtl8188eu_oid_rt_pro_read_efuse_hdl(struct oid_par_priv * poid_par_priv)897 int rtl8188eu_oid_rt_pro_read_efuse_hdl(struct oid_par_priv *poid_par_priv)
898 {
899 	struct efuse_access_struct *pefuse;
900 	u8 *data;
901 	u16 addr = 0, cnts = 0, max_available_size = 0;
902 	int status = NDIS_STATUS_SUCCESS;
903 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
904 
905 	if (poid_par_priv->type_of_oid != QUERY_OID)
906 		return NDIS_STATUS_NOT_ACCEPTED;
907 
908 	if (poid_par_priv->information_buf_len < sizeof(struct efuse_access_struct))
909 		return NDIS_STATUS_INVALID_LENGTH;
910 
911 	pefuse = (struct efuse_access_struct *)poid_par_priv->information_buf;
912 	addr = pefuse->start_addr;
913 	cnts = pefuse->cnts;
914 	data = pefuse->data;
915 
916 	EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false);
917 
918 	if ((addr + cnts) > max_available_size)
919 		return NDIS_STATUS_NOT_ACCEPTED;
920 
921 	_irqlevel_changed_(&oldirql, LOWER);
922 	if (rtw_efuse_access(Adapter, false, addr, cnts, data) == _FAIL)
923 		status = NDIS_STATUS_FAILURE;
924 	else
925 		*poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
926 	_irqlevel_changed_(&oldirql, RAISE);
927 
928 	return status;
929 }
930 /*  */
rtl8188eu_oid_rt_pro_write_efuse_hdl(struct oid_par_priv * poid_par_priv)931 int rtl8188eu_oid_rt_pro_write_efuse_hdl(struct oid_par_priv *poid_par_priv)
932 {
933 	struct efuse_access_struct *pefuse;
934 	u8 *data;
935 	u16 addr = 0, cnts = 0, max_available_size = 0;
936 	int status = NDIS_STATUS_SUCCESS;
937 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
938 
939 	if (poid_par_priv->type_of_oid != SET_OID)
940 		return NDIS_STATUS_NOT_ACCEPTED;
941 
942 	pefuse = (struct efuse_access_struct *)poid_par_priv->information_buf;
943 	addr = pefuse->start_addr;
944 	cnts = pefuse->cnts;
945 	data = pefuse->data;
946 
947 	EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false);
948 
949 	if ((addr + cnts) > max_available_size)
950 		return NDIS_STATUS_NOT_ACCEPTED;
951 
952 	_irqlevel_changed_(&oldirql, LOWER);
953 	if (rtw_efuse_access(Adapter, true, addr, cnts, data) == _FAIL)
954 		status = NDIS_STATUS_FAILURE;
955 	_irqlevel_changed_(&oldirql, RAISE);
956 
957 	return status;
958 }
959 /*  */
rtl8188eu_oid_rt_pro_rw_efuse_pgpkt_hdl(struct oid_par_priv * poid_par_priv)960 int rtl8188eu_oid_rt_pro_rw_efuse_pgpkt_hdl(struct oid_par_priv *poid_par_priv)
961 {
962 	struct pgpkt *ppgpkt;
963 	int status = NDIS_STATUS_SUCCESS;
964 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
965 
966 	*poid_par_priv->bytes_rw = 0;
967 
968 	if (poid_par_priv->information_buf_len < sizeof(struct pgpkt *))
969 		return NDIS_STATUS_INVALID_LENGTH;
970 
971 	ppgpkt = (struct pgpkt *)poid_par_priv->information_buf;
972 
973 	_irqlevel_changed_(&oldirql, LOWER);
974 
975 	if (poid_par_priv->type_of_oid == QUERY_OID) {
976 		Efuse_PowerSwitch(Adapter, false, true);
977 		if (Efuse_PgPacketRead(Adapter, ppgpkt->offset, ppgpkt->data, false))
978 			*poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
979 		else
980 			status = NDIS_STATUS_FAILURE;
981 		Efuse_PowerSwitch(Adapter, false, false);
982 	} else {
983 		Efuse_PowerSwitch(Adapter, true, true);
984 		if (Efuse_PgPacketWrite(Adapter, ppgpkt->offset, ppgpkt->word_en, ppgpkt->data, false))
985 			*poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
986 		else
987 			status = NDIS_STATUS_FAILURE;
988 		Efuse_PowerSwitch(Adapter, true, false);
989 	}
990 
991 	_irqlevel_changed_(&oldirql, RAISE);
992 
993 	return status;
994 }
995 /*  */
rtl8188eu_oid_rt_get_efuse_current_size_hdl(struct oid_par_priv * poid_par_priv)996 int rtl8188eu_oid_rt_get_efuse_current_size_hdl(struct oid_par_priv *poid_par_priv)
997 {
998 	u16 size;
999 	u8 ret;
1000 	int status = NDIS_STATUS_SUCCESS;
1001 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
1002 
1003 	if (poid_par_priv->type_of_oid != QUERY_OID)
1004 		return NDIS_STATUS_NOT_ACCEPTED;
1005 
1006 	if (poid_par_priv->information_buf_len < sizeof(u32))
1007 		return NDIS_STATUS_INVALID_LENGTH;
1008 
1009 	_irqlevel_changed_(&oldirql, LOWER);
1010 	ret = efuse_GetCurrentSize(Adapter, &size);
1011 	_irqlevel_changed_(&oldirql, RAISE);
1012 	if (ret == _SUCCESS) {
1013 		*(u32 *)poid_par_priv->information_buf = size;
1014 		*poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1015 	} else {
1016 		status = NDIS_STATUS_FAILURE;
1017 	}
1018 
1019 	return status;
1020 }
1021 /*  */
rtl8188eu_oid_rt_get_efuse_max_size_hdl(struct oid_par_priv * poid_par_priv)1022 int rtl8188eu_oid_rt_get_efuse_max_size_hdl(struct oid_par_priv *poid_par_priv)
1023 {
1024 	int status = NDIS_STATUS_SUCCESS;
1025 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
1026 
1027 	if (poid_par_priv->type_of_oid != QUERY_OID)
1028 		return NDIS_STATUS_NOT_ACCEPTED;
1029 
1030 	if (poid_par_priv->information_buf_len < sizeof(u32))
1031 		return NDIS_STATUS_INVALID_LENGTH;
1032 
1033 	*(u32 *)poid_par_priv->information_buf = efuse_GetMaxSize(Adapter);
1034 	*poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1035 
1036 	return status;
1037 }
1038 /*  */
rtl8188eu_oid_rt_pro_efuse_hdl(struct oid_par_priv * poid_par_priv)1039 int rtl8188eu_oid_rt_pro_efuse_hdl(struct oid_par_priv *poid_par_priv)
1040 {
1041 	int status;
1042 
1043 	if (poid_par_priv->type_of_oid == QUERY_OID)
1044 		status = rtl8188eu_oid_rt_pro_read_efuse_hdl(poid_par_priv);
1045 	else
1046 		status = rtl8188eu_oid_rt_pro_write_efuse_hdl(poid_par_priv);
1047 
1048 	return status;
1049 }
1050 /*  */
rtl8188eu_oid_rt_pro_efuse_map_hdl(struct oid_par_priv * poid_par_priv)1051 int rtl8188eu_oid_rt_pro_efuse_map_hdl(struct oid_par_priv *poid_par_priv)
1052 {
1053 	u8		*data;
1054 	int status = NDIS_STATUS_SUCCESS;
1055 	struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
1056 	u16	maplen = 0;
1057 
1058 	EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&maplen, false);
1059 
1060 	*poid_par_priv->bytes_rw = 0;
1061 
1062 	if (poid_par_priv->information_buf_len < maplen)
1063 		return NDIS_STATUS_INVALID_LENGTH;
1064 
1065 	data = (u8 *)poid_par_priv->information_buf;
1066 
1067 	_irqlevel_changed_(&oldirql, LOWER);
1068 
1069 	if (poid_par_priv->type_of_oid == QUERY_OID) {
1070 		if (rtw_efuse_map_read(Adapter, 0, maplen, data) == _SUCCESS)
1071 			*poid_par_priv->bytes_rw = maplen;
1072 		else
1073 			status = NDIS_STATUS_FAILURE;
1074 	} else {
1075 		/*  SET_OID */
1076 		if (rtw_efuse_map_write(Adapter, 0, maplen, data) == _SUCCESS)
1077 			*poid_par_priv->bytes_rw = maplen;
1078 		else
1079 			status = NDIS_STATUS_FAILURE;
1080 	}
1081 
1082 	_irqlevel_changed_(&oldirql, RAISE);
1083 
1084 	return status;
1085 }
1086 
rtl8188eu_oid_rt_set_crystal_cap_hdl(struct oid_par_priv * poid_par_priv)1087 int rtl8188eu_oid_rt_set_crystal_cap_hdl(struct oid_par_priv *poid_par_priv)
1088 {
1089 	int status = NDIS_STATUS_SUCCESS;
1090 	return status;
1091 }
1092 
rtl8188eu_oid_rt_set_rx_packet_type_hdl(struct oid_par_priv * poid_par_priv)1093 int rtl8188eu_oid_rt_set_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
1094 {
1095 	int status = NDIS_STATUS_SUCCESS;
1096 
1097 	if (poid_par_priv->type_of_oid != SET_OID)
1098 		return NDIS_STATUS_NOT_ACCEPTED;
1099 
1100 	if (poid_par_priv->information_buf_len < sizeof(u8))
1101 		return NDIS_STATUS_INVALID_LENGTH;
1102 
1103 	return status;
1104 }
1105 
rtl8188eu_oid_rt_pro_set_tx_agc_offset_hdl(struct oid_par_priv * poid_par_priv)1106 int rtl8188eu_oid_rt_pro_set_tx_agc_offset_hdl(struct oid_par_priv *poid_par_priv)
1107 {
1108 	return 0;
1109 }
1110 
rtl8188eu_oid_rt_pro_set_pkt_test_mode_hdl(struct oid_par_priv * poid_par_priv)1111 int rtl8188eu_oid_rt_pro_set_pkt_test_mode_hdl(struct oid_par_priv *poid_par_priv)
1112 {
1113 	return 0;
1114 }
1115 
rtl8188eu_mp_ioctl_xmit_packet_hdl(struct oid_par_priv * poid_par_priv)1116 int rtl8188eu_mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv)
1117 {
1118 	struct mp_xmit_parm *pparm;
1119 	struct adapter *padapter;
1120 	struct mp_priv *pmp_priv;
1121 	struct pkt_attrib *pattrib;
1122 
1123 	pparm = (struct mp_xmit_parm *)poid_par_priv->information_buf;
1124 	padapter = (struct adapter *)poid_par_priv->adapter_context;
1125 	pmp_priv = &padapter->mppriv;
1126 
1127 	if (poid_par_priv->type_of_oid == QUERY_OID) {
1128 		pparm->enable = !pmp_priv->tx.stop;
1129 		pparm->count = pmp_priv->tx.sended;
1130 	} else {
1131 		if (pparm->enable == 0) {
1132 			pmp_priv->tx.stop = 1;
1133 		} else if (pmp_priv->tx.stop == 1) {
1134 			pmp_priv->tx.stop = 0;
1135 			pmp_priv->tx.count = pparm->count;
1136 			pmp_priv->tx.payload = pparm->payload_type;
1137 			pattrib = &pmp_priv->tx.attrib;
1138 			pattrib->pktlen = pparm->length;
1139 			memcpy(pattrib->dst, pparm->da, ETH_ALEN);
1140 			SetPacketTx(padapter);
1141 		} else {
1142 			return NDIS_STATUS_FAILURE;
1143 		}
1144 	}
1145 
1146 	return NDIS_STATUS_SUCCESS;
1147 }
1148 
1149 /*  */
rtl8188eu_oid_rt_set_power_down_hdl(struct oid_par_priv * poid_par_priv)1150 int rtl8188eu_oid_rt_set_power_down_hdl(struct oid_par_priv *poid_par_priv)
1151 {
1152 	int status = NDIS_STATUS_SUCCESS;
1153 
1154 	if (poid_par_priv->type_of_oid != SET_OID) {
1155 		status = NDIS_STATUS_NOT_ACCEPTED;
1156 		return status;
1157 	}
1158 
1159 	_irqlevel_changed_(&oldirql, LOWER);
1160 
1161 	/* CALL  the power_down function */
1162 	_irqlevel_changed_(&oldirql, RAISE);
1163 
1164 	return status;
1165 }
1166 /*  */
rtl8188eu_oid_rt_get_power_mode_hdl(struct oid_par_priv * poid_par_priv)1167 int rtl8188eu_oid_rt_get_power_mode_hdl(struct oid_par_priv *poid_par_priv)
1168 {
1169 	return 0;
1170 }
1171