1 /******************************************************************************
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
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 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
19 ******************************************************************************/
20 #define _RTW_MP_IOCTL_C_
22 #include <drv_types.h>
23 #include <rtw_mp_ioctl.h>
24 #include "../hal/phydm/phydm_precomp.h"
26 /* **************** oid_rtl_seg_81_85 section start **************** */
27 NDIS_STATUS oid_rt_wireless_mode_hdl(struct oid_par_priv *poid_par_priv)
29 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
30 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
33 if (poid_par_priv->information_buf_len < sizeof(u8))
34 return NDIS_STATUS_INVALID_LENGTH;
36 if (poid_par_priv->type_of_oid == SET_OID)
37 Adapter->registrypriv.wireless_mode = *(u8 *)poid_par_priv->information_buf;
38 else if (poid_par_priv->type_of_oid == QUERY_OID) {
39 *(u8 *)poid_par_priv->information_buf = Adapter->registrypriv.wireless_mode;
40 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
42 status = NDIS_STATUS_NOT_ACCEPTED;
47 /* **************** oid_rtl_seg_81_87_80 section start **************** */
48 NDIS_STATUS oid_rt_pro_write_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
53 struct bb_reg_param *pbbreg;
56 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
57 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
61 if (poid_par_priv->type_of_oid != SET_OID)
62 return NDIS_STATUS_NOT_ACCEPTED;
64 if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param))
65 return NDIS_STATUS_INVALID_LENGTH;
67 pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf);
69 offset = (u16)(pbbreg->offset) & 0xFFF; /* 0ffset :0x800~0xfff */
70 if (offset < BB_REG_BASE_ADDR)
71 offset |= BB_REG_BASE_ADDR;
73 value = pbbreg->value;
76 _irqlevel_changed_(&oldirql, LOWER);
77 write_bbreg(Adapter, offset, 0xFFFFFFFF, value);
78 _irqlevel_changed_(&oldirql, RAISE);
83 /* ------------------------------------------------------------------------------ */
84 NDIS_STATUS oid_rt_pro_read_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
89 struct bb_reg_param *pbbreg;
92 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
93 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
97 if (poid_par_priv->type_of_oid != QUERY_OID)
98 return NDIS_STATUS_NOT_ACCEPTED;
100 if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param))
101 return NDIS_STATUS_INVALID_LENGTH;
103 pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf);
105 offset = (u16)(pbbreg->offset) & 0xFFF; /* 0ffset :0x800~0xfff */
106 if (offset < BB_REG_BASE_ADDR)
107 offset |= BB_REG_BASE_ADDR;
109 _irqlevel_changed_(&oldirql, LOWER);
110 value = read_bbreg(Adapter, offset, 0xFFFFFFFF);
111 _irqlevel_changed_(&oldirql, RAISE);
113 pbbreg->value = value;
114 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
119 /* ------------------------------------------------------------------------------ */
120 NDIS_STATUS oid_rt_pro_write_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
122 #ifdef PLATFORM_OS_XP
125 struct rf_reg_param *pbbreg;
129 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
130 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
134 if (poid_par_priv->type_of_oid != SET_OID)
135 return NDIS_STATUS_NOT_ACCEPTED;
137 if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param))
138 return NDIS_STATUS_INVALID_LENGTH;
140 pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf);
142 if (pbbreg->path >= MAX_RF_PATH_NUMS)
143 return NDIS_STATUS_NOT_ACCEPTED;
144 if (pbbreg->offset > 0xFF)
145 return NDIS_STATUS_NOT_ACCEPTED;
146 if (pbbreg->value > 0xFFFFF)
147 return NDIS_STATUS_NOT_ACCEPTED;
149 path = (u8)pbbreg->path;
150 offset = (u8)pbbreg->offset;
151 value = pbbreg->value;
154 _irqlevel_changed_(&oldirql, LOWER);
155 write_rfreg(Adapter, path, offset, value);
156 _irqlevel_changed_(&oldirql, RAISE);
161 /* ------------------------------------------------------------------------------ */
162 NDIS_STATUS oid_rt_pro_read_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
164 #ifdef PLATFORM_OS_XP
167 struct rf_reg_param *pbbreg;
171 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
172 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
176 if (poid_par_priv->type_of_oid != QUERY_OID)
177 return NDIS_STATUS_NOT_ACCEPTED;
179 if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param))
180 return NDIS_STATUS_INVALID_LENGTH;
182 pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf);
184 if (pbbreg->path >= MAX_RF_PATH_NUMS)
185 return NDIS_STATUS_NOT_ACCEPTED;
186 if (pbbreg->offset > 0xFF)
187 return NDIS_STATUS_NOT_ACCEPTED;
189 path = (u8)pbbreg->path;
190 offset = (u8)pbbreg->offset;
192 _irqlevel_changed_(&oldirql, LOWER);
193 value = read_rfreg(Adapter, path, offset);
194 _irqlevel_changed_(&oldirql, RAISE);
196 pbbreg->value = value;
198 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
204 /* **************** oid_rtl_seg_81_87_00 section end****************
205 * ------------------------------------------------------------------------------ */
207 /* **************** oid_rtl_seg_81_80_00 section start ****************
208 * ------------------------------------------------------------------------------ */
209 NDIS_STATUS oid_rt_pro_set_data_rate_hdl(struct oid_par_priv *poid_par_priv)
211 #ifdef PLATFORM_OS_XP
214 u32 ratevalue;/* 4 */
215 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
216 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
220 if (poid_par_priv->type_of_oid != SET_OID)
221 return NDIS_STATUS_NOT_ACCEPTED;
223 if (poid_par_priv->information_buf_len != sizeof(u32))
224 return NDIS_STATUS_INVALID_LENGTH;
226 ratevalue = *((u32 *)poid_par_priv->information_buf); /* 4 */
227 if (ratevalue >= MPT_RATE_LAST)
228 return NDIS_STATUS_INVALID_DATA;
230 Adapter->mppriv.rateidx = ratevalue;
232 _irqlevel_changed_(&oldirql, LOWER);
233 SetDataRate(Adapter);
234 _irqlevel_changed_(&oldirql, RAISE);
239 /* ------------------------------------------------------------------------------ */
240 NDIS_STATUS oid_rt_pro_start_test_hdl(struct oid_par_priv *poid_par_priv)
242 #ifdef PLATFORM_OS_XP
246 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
247 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
251 if (Adapter->registrypriv.mp_mode == 0)
252 return NDIS_STATUS_NOT_ACCEPTED;
254 if (poid_par_priv->type_of_oid != SET_OID)
255 return NDIS_STATUS_NOT_ACCEPTED;
257 _irqlevel_changed_(&oldirql, LOWER);
259 /* IQCalibrateBcut(Adapter); */
261 mode = *((u32 *)poid_par_priv->information_buf);
262 Adapter->mppriv.mode = mode;/* 1 for loopback */
264 if (mp_start_test(Adapter) == _FAIL) {
265 status = NDIS_STATUS_NOT_ACCEPTED;
270 _irqlevel_changed_(&oldirql, RAISE);
276 /* ------------------------------------------------------------------------------ */
277 NDIS_STATUS oid_rt_pro_stop_test_hdl(struct oid_par_priv *poid_par_priv)
279 #ifdef PLATFORM_OS_XP
282 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
283 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
287 if (poid_par_priv->type_of_oid != SET_OID)
288 return NDIS_STATUS_NOT_ACCEPTED;
290 _irqlevel_changed_(&oldirql, LOWER);
291 mp_stop_test(Adapter);
292 _irqlevel_changed_(&oldirql, RAISE);
298 /* ------------------------------------------------------------------------------ */
299 NDIS_STATUS oid_rt_pro_set_channel_direct_call_hdl(struct oid_par_priv *poid_par_priv)
301 #ifdef PLATFORM_OS_XP
305 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
306 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
310 if (poid_par_priv->information_buf_len != sizeof(u32))
311 return NDIS_STATUS_INVALID_LENGTH;
313 if (poid_par_priv->type_of_oid == QUERY_OID) {
314 *((u32 *)poid_par_priv->information_buf) = Adapter->mppriv.channel;
315 return NDIS_STATUS_SUCCESS;
318 if (poid_par_priv->type_of_oid != SET_OID)
319 return NDIS_STATUS_NOT_ACCEPTED;
321 Channel = *((u32 *)poid_par_priv->information_buf);
323 return NDIS_STATUS_NOT_ACCEPTED;
324 Adapter->mppriv.channel = Channel;
326 _irqlevel_changed_(&oldirql, LOWER);
328 _irqlevel_changed_(&oldirql, RAISE);
333 /* ------------------------------------------------------------------------------ */
334 NDIS_STATUS oid_rt_set_bandwidth_hdl(struct oid_par_priv *poid_par_priv)
336 #ifdef PLATFORM_OS_XP
341 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
342 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
346 if (poid_par_priv->type_of_oid != SET_OID)
347 return NDIS_STATUS_NOT_ACCEPTED;
349 if (poid_par_priv->information_buf_len < sizeof(u32))
350 return NDIS_STATUS_INVALID_LENGTH;
352 bandwidth = *((u32 *)poid_par_priv->information_buf); /* 4 */
353 channel_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
355 if (bandwidth != CHANNEL_WIDTH_40)
356 bandwidth = CHANNEL_WIDTH_20;
357 padapter->mppriv.bandwidth = (u8)bandwidth;
358 padapter->mppriv.prime_channel_offset = (u8)channel_offset;
360 _irqlevel_changed_(&oldirql, LOWER);
361 SetBandwidth(padapter);
362 _irqlevel_changed_(&oldirql, RAISE);
368 /* ------------------------------------------------------------------------------ */
369 NDIS_STATUS oid_rt_pro_set_antenna_bb_hdl(struct oid_par_priv *poid_par_priv)
371 #ifdef PLATFORM_OS_XP
375 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
376 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
380 if (poid_par_priv->information_buf_len != sizeof(u32))
381 return NDIS_STATUS_INVALID_LENGTH;
383 if (poid_par_priv->type_of_oid == SET_OID) {
384 antenna = *(u32 *)poid_par_priv->information_buf;
386 Adapter->mppriv.antenna_tx = (u16)((antenna & 0xFFFF0000) >> 16);
387 Adapter->mppriv.antenna_rx = (u16)(antenna & 0x0000FFFF);
389 _irqlevel_changed_(&oldirql, LOWER);
391 _irqlevel_changed_(&oldirql, RAISE);
393 antenna = (Adapter->mppriv.antenna_tx << 16) | Adapter->mppriv.antenna_rx;
394 *(u32 *)poid_par_priv->information_buf = antenna;
401 NDIS_STATUS oid_rt_pro_set_tx_power_control_hdl(struct oid_par_priv *poid_par_priv)
403 #ifdef PLATFORM_OS_XP
407 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
408 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
412 if (poid_par_priv->type_of_oid != SET_OID)
413 return NDIS_STATUS_NOT_ACCEPTED;
415 if (poid_par_priv->information_buf_len != sizeof(u32))
416 return NDIS_STATUS_INVALID_LENGTH;
418 tx_pwr_idx = *((u32 *)poid_par_priv->information_buf);
419 if (tx_pwr_idx > MAX_TX_PWR_INDEX_N_MODE)
420 return NDIS_STATUS_NOT_ACCEPTED;
422 Adapter->mppriv.txpoweridx = (u8)tx_pwr_idx;
425 _irqlevel_changed_(&oldirql, LOWER);
427 _irqlevel_changed_(&oldirql, RAISE);
433 /* ------------------------------------------------------------------------------
434 * **************** oid_rtl_seg_81_80_20 section start ****************
435 * ------------------------------------------------------------------------------ */
436 NDIS_STATUS oid_rt_pro_query_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv)
438 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
439 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
442 if (poid_par_priv->type_of_oid != QUERY_OID) {
443 status = NDIS_STATUS_NOT_ACCEPTED;
447 if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
448 *(ULONG *)poid_par_priv->information_buf = Adapter->mppriv.tx_pktcount;
449 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
451 status = NDIS_STATUS_INVALID_LENGTH;
456 /* ------------------------------------------------------------------------------ */
457 NDIS_STATUS oid_rt_pro_query_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
459 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
460 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
463 if (poid_par_priv->type_of_oid != QUERY_OID) {
464 status = NDIS_STATUS_NOT_ACCEPTED;
467 if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
468 *(ULONG *)poid_par_priv->information_buf = Adapter->mppriv.rx_pktcount;
469 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
471 status = NDIS_STATUS_INVALID_LENGTH;
476 /* ------------------------------------------------------------------------------ */
477 NDIS_STATUS oid_rt_pro_query_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
479 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
480 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
483 if (poid_par_priv->type_of_oid != QUERY_OID) {
484 status = NDIS_STATUS_NOT_ACCEPTED;
487 if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
488 *(ULONG *)poid_par_priv->information_buf = Adapter->mppriv.rx_crcerrpktcount;
489 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
491 status = NDIS_STATUS_INVALID_LENGTH;
496 /* ------------------------------------------------------------------------------ */
498 NDIS_STATUS oid_rt_pro_reset_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv)
500 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
501 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
504 if (poid_par_priv->type_of_oid != SET_OID) {
505 status = NDIS_STATUS_NOT_ACCEPTED;
509 Adapter->mppriv.tx_pktcount = 0;
514 /* ------------------------------------------------------------------------------ */
515 NDIS_STATUS oid_rt_pro_reset_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
517 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
518 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
521 if (poid_par_priv->type_of_oid != SET_OID) {
522 status = NDIS_STATUS_NOT_ACCEPTED;
526 if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
527 Adapter->mppriv.rx_pktcount = 0;
528 Adapter->mppriv.rx_crcerrpktcount = 0;
530 status = NDIS_STATUS_INVALID_LENGTH;
535 /* ------------------------------------------------------------------------------ */
536 NDIS_STATUS oid_rt_reset_phy_rx_packet_count_hdl(struct oid_par_priv *poid_par_priv)
538 #ifdef PLATFORM_OS_XP
541 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
542 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
545 if (poid_par_priv->type_of_oid != SET_OID) {
546 status = NDIS_STATUS_NOT_ACCEPTED;
550 _irqlevel_changed_(&oldirql, LOWER);
551 ResetPhyRxPktCount(Adapter);
552 _irqlevel_changed_(&oldirql, RAISE);
557 /* ------------------------------------------------------------------------------ */
558 NDIS_STATUS oid_rt_get_phy_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
560 #ifdef PLATFORM_OS_XP
563 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
564 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
568 if (poid_par_priv->type_of_oid != QUERY_OID)
569 return NDIS_STATUS_NOT_ACCEPTED;
571 if (poid_par_priv->information_buf_len != sizeof(ULONG))
572 return NDIS_STATUS_INVALID_LENGTH;
574 _irqlevel_changed_(&oldirql, LOWER);
575 *(ULONG *)poid_par_priv->information_buf = GetPhyRxPktReceived(Adapter);
576 _irqlevel_changed_(&oldirql, RAISE);
578 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
584 /* ------------------------------------------------------------------------------ */
585 NDIS_STATUS oid_rt_get_phy_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
587 #ifdef PLATFORM_OS_XP
590 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
591 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
595 if (poid_par_priv->type_of_oid != QUERY_OID)
596 return NDIS_STATUS_NOT_ACCEPTED;
599 if (poid_par_priv->information_buf_len != sizeof(ULONG))
600 return NDIS_STATUS_INVALID_LENGTH;
602 _irqlevel_changed_(&oldirql, LOWER);
603 *(ULONG *)poid_par_priv->information_buf = GetPhyRxPktCRC32Error(Adapter);
604 _irqlevel_changed_(&oldirql, RAISE);
606 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
612 /* **************** oid_rtl_seg_81_80_20 section end **************** */
613 NDIS_STATUS oid_rt_pro_set_continuous_tx_hdl(struct oid_par_priv *poid_par_priv)
615 #ifdef PLATFORM_OS_XP
619 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
620 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
624 if (poid_par_priv->type_of_oid != SET_OID)
625 return NDIS_STATUS_NOT_ACCEPTED;
627 bStartTest = *((u32 *)poid_par_priv->information_buf);
629 _irqlevel_changed_(&oldirql, LOWER);
630 SetContinuousTx(Adapter, (u8)bStartTest);
632 struct mp_priv *pmp_priv = &Adapter->mppriv;
633 if (pmp_priv->tx.stop == 0) {
634 pmp_priv->tx.stop = 1;
635 RTW_INFO("%s: pkt tx is running...\n", __func__);
638 pmp_priv->tx.stop = 0;
639 pmp_priv->tx.count = 1;
640 SetPacketTx(Adapter);
642 _irqlevel_changed_(&oldirql, RAISE);
648 NDIS_STATUS oid_rt_pro_set_single_carrier_tx_hdl(struct oid_par_priv *poid_par_priv)
650 #ifdef PLATFORM_OS_XP
654 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
655 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
659 if (poid_par_priv->type_of_oid != SET_OID)
660 return NDIS_STATUS_NOT_ACCEPTED;
662 bStartTest = *((u32 *)poid_par_priv->information_buf);
664 _irqlevel_changed_(&oldirql, LOWER);
665 SetSingleCarrierTx(Adapter, (u8)bStartTest);
667 struct mp_priv *pmp_priv = &Adapter->mppriv;
668 if (pmp_priv->tx.stop == 0) {
669 pmp_priv->tx.stop = 1;
670 RTW_INFO("%s: pkt tx is running...\n", __func__);
673 pmp_priv->tx.stop = 0;
674 pmp_priv->tx.count = 1;
675 SetPacketTx(Adapter);
677 _irqlevel_changed_(&oldirql, RAISE);
683 NDIS_STATUS oid_rt_pro_set_carrier_suppression_tx_hdl(struct oid_par_priv *poid_par_priv)
685 #ifdef PLATFORM_OS_XP
689 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
690 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
694 if (poid_par_priv->type_of_oid != SET_OID)
695 return NDIS_STATUS_NOT_ACCEPTED;
697 bStartTest = *((u32 *)poid_par_priv->information_buf);
699 _irqlevel_changed_(&oldirql, LOWER);
700 SetCarrierSuppressionTx(Adapter, (u8)bStartTest);
702 struct mp_priv *pmp_priv = &Adapter->mppriv;
703 if (pmp_priv->tx.stop == 0) {
704 pmp_priv->tx.stop = 1;
705 RTW_INFO("%s: pkt tx is running...\n", __func__);
708 pmp_priv->tx.stop = 0;
709 pmp_priv->tx.count = 1;
710 SetPacketTx(Adapter);
712 _irqlevel_changed_(&oldirql, RAISE);
718 NDIS_STATUS oid_rt_pro_set_single_tone_tx_hdl(struct oid_par_priv *poid_par_priv)
720 #ifdef PLATFORM_OS_XP
724 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
725 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
729 if (poid_par_priv->type_of_oid != SET_OID)
730 return NDIS_STATUS_NOT_ACCEPTED;
732 bStartTest = *((u32 *)poid_par_priv->information_buf);
734 _irqlevel_changed_(&oldirql, LOWER);
735 SetSingleToneTx(Adapter, (u8)bStartTest);
736 _irqlevel_changed_(&oldirql, RAISE);
742 NDIS_STATUS oid_rt_pro_set_modulation_hdl(struct oid_par_priv *poid_par_priv)
747 NDIS_STATUS oid_rt_pro_trigger_gpio_hdl(struct oid_par_priv *poid_par_priv)
749 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
751 #ifdef PLATFORM_OS_XP
754 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
756 if (poid_par_priv->type_of_oid != SET_OID)
757 return NDIS_STATUS_NOT_ACCEPTED;
759 _irqlevel_changed_(&oldirql, LOWER);
760 rtw_hal_set_hwreg(Adapter, HW_VAR_TRIGGER_GPIO_0, 0);
761 _irqlevel_changed_(&oldirql, RAISE);
766 /* **************** oid_rtl_seg_81_80_00 section end ****************
767 * ------------------------------------------------------------------------------ */
768 NDIS_STATUS oid_rt_pro8711_join_bss_hdl(struct oid_par_priv *poid_par_priv)
772 /* ------------------------------------------------------------------------------ */
773 NDIS_STATUS oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv)
775 #ifdef PLATFORM_OS_XP
780 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
781 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
785 if (poid_par_priv->type_of_oid != QUERY_OID)
786 return NDIS_STATUS_NOT_ACCEPTED;
788 RegRWStruct = (pRW_Reg)poid_par_priv->information_buf;
789 offset = RegRWStruct->offset;
790 width = RegRWStruct->width;
793 return NDIS_STATUS_NOT_ACCEPTED;
795 _irqlevel_changed_(&oldirql, LOWER);
799 RegRWStruct->value = rtw_read8(Adapter, offset);
802 RegRWStruct->value = rtw_read16(Adapter, offset);
806 RegRWStruct->value = rtw_read32(Adapter, offset);
810 _irqlevel_changed_(&oldirql, RAISE);
812 *poid_par_priv->bytes_rw = width;
817 /* ------------------------------------------------------------------------------ */
818 NDIS_STATUS oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv)
820 #ifdef PLATFORM_OS_XP
824 u32 offset, width, value;
825 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
826 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
830 if (poid_par_priv->type_of_oid != SET_OID)
831 return NDIS_STATUS_NOT_ACCEPTED;
833 RegRWStruct = (pRW_Reg)poid_par_priv->information_buf;
834 offset = RegRWStruct->offset;
835 width = RegRWStruct->width;
836 value = RegRWStruct->value;
839 return NDIS_STATUS_NOT_ACCEPTED;
841 _irqlevel_changed_(&oldirql, LOWER);
843 switch (RegRWStruct->width) {
846 status = NDIS_STATUS_NOT_ACCEPTED;
849 rtw_write8(padapter, offset, (u8)value);
852 if (value > 0xFFFF) {
853 status = NDIS_STATUS_NOT_ACCEPTED;
856 rtw_write16(padapter, offset, (u16)value);
859 rtw_write32(padapter, offset, value);
862 status = NDIS_STATUS_NOT_ACCEPTED;
866 _irqlevel_changed_(&oldirql, RAISE);
872 /* ------------------------------------------------------------------------------ */
873 NDIS_STATUS oid_rt_pro_burst_read_register_hdl(struct oid_par_priv *poid_par_priv)
877 /* ------------------------------------------------------------------------------ */
878 NDIS_STATUS oid_rt_pro_burst_write_register_hdl(struct oid_par_priv *poid_par_priv)
882 /* ------------------------------------------------------------------------------ */
883 NDIS_STATUS oid_rt_pro_write_txcmd_hdl(struct oid_par_priv *poid_par_priv)
888 /* ------------------------------------------------------------------------------ */
889 NDIS_STATUS oid_rt_pro_read16_eeprom_hdl(struct oid_par_priv *poid_par_priv)
894 /* ------------------------------------------------------------------------------ */
895 NDIS_STATUS oid_rt_pro_write16_eeprom_hdl(struct oid_par_priv *poid_par_priv)
899 /* ------------------------------------------------------------------------------ */
900 NDIS_STATUS oid_rt_pro8711_wi_poll_hdl(struct oid_par_priv *poid_par_priv)
904 /* ------------------------------------------------------------------------------ */
905 NDIS_STATUS oid_rt_pro8711_pkt_loss_hdl(struct oid_par_priv *poid_par_priv)
909 /* ------------------------------------------------------------------------------ */
910 NDIS_STATUS oid_rt_rd_attrib_mem_hdl(struct oid_par_priv *poid_par_priv)
914 /* ------------------------------------------------------------------------------ */
915 NDIS_STATUS oid_rt_wr_attrib_mem_hdl(struct oid_par_priv *poid_par_priv)
919 /* ------------------------------------------------------------------------------ */
920 NDIS_STATUS oid_rt_pro_set_rf_intfs_hdl(struct oid_par_priv *poid_par_priv)
924 /* ------------------------------------------------------------------------------ */
925 NDIS_STATUS oid_rt_poll_rx_status_hdl(struct oid_par_priv *poid_par_priv)
929 /* ------------------------------------------------------------------------------ */
930 NDIS_STATUS oid_rt_pro_cfg_debug_message_hdl(struct oid_par_priv *poid_par_priv)
934 /* ------------------------------------------------------------------------------ */
935 NDIS_STATUS oid_rt_pro_set_data_rate_ex_hdl(struct oid_par_priv *poid_par_priv)
937 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
939 #ifdef PLATFORM_OS_XP
942 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
946 if (poid_par_priv->type_of_oid != SET_OID)
947 return NDIS_STATUS_NOT_ACCEPTED;
949 _irqlevel_changed_(&oldirql, LOWER);
951 if (rtw_setdatarate_cmd(Adapter, poid_par_priv->information_buf) != _SUCCESS)
952 status = NDIS_STATUS_NOT_ACCEPTED;
954 _irqlevel_changed_(&oldirql, RAISE);
959 /* ----------------------------------------------------------------------------- */
960 NDIS_STATUS oid_rt_get_thermal_meter_hdl(struct oid_par_priv *poid_par_priv)
962 #ifdef PLATFORM_OS_XP
965 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
967 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
971 if (poid_par_priv->type_of_oid != QUERY_OID)
972 return NDIS_STATUS_NOT_ACCEPTED;
974 if (poid_par_priv->information_buf_len < sizeof(u32))
975 return NDIS_STATUS_INVALID_LENGTH;
977 _irqlevel_changed_(&oldirql, LOWER);
978 GetThermalMeter(Adapter, &thermal);
979 _irqlevel_changed_(&oldirql, RAISE);
981 *(u32 *)poid_par_priv->information_buf = (u32)thermal;
982 *poid_par_priv->bytes_rw = sizeof(u32);
987 /* ----------------------------------------------------------------------------- */
988 NDIS_STATUS oid_rt_pro_read_tssi_hdl(struct oid_par_priv *poid_par_priv)
992 /* ------------------------------------------------------------------------------ */
993 NDIS_STATUS oid_rt_pro_set_power_tracking_hdl(struct oid_par_priv *poid_par_priv)
995 #ifdef PLATFORM_OS_XP
998 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
999 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1001 if (poid_par_priv->information_buf_len < sizeof(u8))
1002 return NDIS_STATUS_INVALID_LENGTH;
1004 _irqlevel_changed_(&oldirql, LOWER);
1005 if (poid_par_priv->type_of_oid == SET_OID) {
1008 enable = *(u8 *)poid_par_priv->information_buf;
1010 SetPowerTracking(Adapter, enable);
1012 GetPowerTracking(Adapter, (u8 *)poid_par_priv->information_buf);
1013 _irqlevel_changed_(&oldirql, RAISE);
1018 /* ----------------------------------------------------------------------------- */
1019 NDIS_STATUS oid_rt_pro_set_basic_rate_hdl(struct oid_par_priv *poid_par_priv)
1023 /* ------------------------------------------------------------------------------ */
1024 NDIS_STATUS oid_rt_pro_qry_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
1028 /* ------------------------------------------------------------------------------ */
1029 NDIS_STATUS oid_rt_pro_set_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
1033 /* ------------------------------------------------------------------------------ */
1034 NDIS_STATUS oid_rt_pro_h2c_get_rate_table_hdl(struct oid_par_priv *poid_par_priv)
1039 /* **************** oid_rtl_seg_87_12_00 section start **************** */
1040 NDIS_STATUS oid_rt_pro_encryption_ctrl_hdl(struct oid_par_priv *poid_par_priv)
1044 /* ------------------------------------------------------------------------------ */
1045 NDIS_STATUS oid_rt_pro_add_sta_info_hdl(struct oid_par_priv *poid_par_priv)
1049 /* ------------------------------------------------------------------------------ */
1050 NDIS_STATUS oid_rt_pro_dele_sta_info_hdl(struct oid_par_priv *poid_par_priv)
1055 NDIS_STATUS oid_rt_pro_query_dr_variable_hdl(struct oid_par_priv *poid_par_priv)
1059 /* ------------------------------------------------------------------------------ */
1060 NDIS_STATUS oid_rt_pro_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
1062 return NDIS_STATUS_SUCCESS;
1064 /* ------------------------------------------------------------------------------ */
1065 NDIS_STATUS oid_rt_pro_read_efuse_hdl(struct oid_par_priv *poid_par_priv)
1067 PEFUSE_ACCESS_STRUCT pefuse;
1069 u16 addr = 0, cnts = 0, max_available_size = 0;
1070 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1071 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1074 if (poid_par_priv->type_of_oid != QUERY_OID)
1075 return NDIS_STATUS_NOT_ACCEPTED;
1077 if (poid_par_priv->information_buf_len < sizeof(EFUSE_ACCESS_STRUCT))
1078 return NDIS_STATUS_INVALID_LENGTH;
1080 pefuse = (PEFUSE_ACCESS_STRUCT)poid_par_priv->information_buf;
1081 addr = pefuse->start_addr;
1082 cnts = pefuse->cnts;
1083 data = pefuse->data;
1086 EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, _FALSE);
1088 if ((addr + cnts) > max_available_size) {
1089 return NDIS_STATUS_NOT_ACCEPTED;
1092 _irqlevel_changed_(&oldirql, LOWER);
1093 if (rtw_efuse_access(Adapter, _FALSE, addr, cnts, data) == _FAIL) {
1094 status = NDIS_STATUS_FAILURE;
1096 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1097 _irqlevel_changed_(&oldirql, RAISE);
1102 /* ------------------------------------------------------------------------------ */
1103 NDIS_STATUS oid_rt_pro_write_efuse_hdl(struct oid_par_priv *poid_par_priv)
1105 #ifdef PLATFORM_OS_XP
1108 PEFUSE_ACCESS_STRUCT pefuse;
1110 u16 addr = 0, cnts = 0, max_available_size = 0;
1111 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1112 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1116 if (poid_par_priv->type_of_oid != SET_OID)
1117 return NDIS_STATUS_NOT_ACCEPTED;
1119 pefuse = (PEFUSE_ACCESS_STRUCT)poid_par_priv->information_buf;
1120 addr = pefuse->start_addr;
1121 cnts = pefuse->cnts;
1122 data = pefuse->data;
1125 EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, _FALSE);
1127 if ((addr + cnts) > max_available_size) {
1128 return NDIS_STATUS_NOT_ACCEPTED;
1131 _irqlevel_changed_(&oldirql, LOWER);
1132 if (rtw_efuse_access(Adapter, _TRUE, addr, cnts, data) == _FAIL)
1133 status = NDIS_STATUS_FAILURE;
1134 _irqlevel_changed_(&oldirql, RAISE);
1139 /* ------------------------------------------------------------------------------ */
1140 NDIS_STATUS oid_rt_pro_rw_efuse_pgpkt_hdl(struct oid_par_priv *poid_par_priv)
1142 #ifdef PLATFORM_OS_XP
1145 PPGPKT_STRUCT ppgpkt;
1146 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1147 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1151 *poid_par_priv->bytes_rw = 0;
1153 if (poid_par_priv->information_buf_len < sizeof(PGPKT_STRUCT))
1154 return NDIS_STATUS_INVALID_LENGTH;
1156 ppgpkt = (PPGPKT_STRUCT)poid_par_priv->information_buf;
1158 _irqlevel_changed_(&oldirql, LOWER);
1160 if (poid_par_priv->type_of_oid == QUERY_OID) {
1162 Efuse_PowerSwitch(Adapter, _FALSE, _TRUE);
1163 if (Efuse_PgPacketRead(Adapter, ppgpkt->offset, ppgpkt->data, _FALSE) == _TRUE)
1164 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1166 status = NDIS_STATUS_FAILURE;
1167 Efuse_PowerSwitch(Adapter, _FALSE, _FALSE);
1170 Efuse_PowerSwitch(Adapter, _TRUE, _TRUE);
1171 if (Efuse_PgPacketWrite(Adapter, ppgpkt->offset, ppgpkt->word_en, ppgpkt->data, _FALSE) == _TRUE)
1172 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1174 status = NDIS_STATUS_FAILURE;
1175 Efuse_PowerSwitch(Adapter, _TRUE, _FALSE);
1178 _irqlevel_changed_(&oldirql, RAISE);
1184 /* ------------------------------------------------------------------------------ */
1185 NDIS_STATUS oid_rt_get_efuse_current_size_hdl(struct oid_par_priv *poid_par_priv)
1187 #ifdef PLATFORM_OS_XP
1192 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1193 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1196 if (poid_par_priv->type_of_oid != QUERY_OID)
1197 return NDIS_STATUS_NOT_ACCEPTED;
1199 if (poid_par_priv->information_buf_len < sizeof(u32))
1200 return NDIS_STATUS_INVALID_LENGTH;
1202 _irqlevel_changed_(&oldirql, LOWER);
1203 ret = efuse_GetCurrentSize(Adapter, &size);
1204 _irqlevel_changed_(&oldirql, RAISE);
1205 if (ret == _SUCCESS) {
1206 *(u32 *)poid_par_priv->information_buf = size;
1207 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1209 status = NDIS_STATUS_FAILURE;
1214 /* ------------------------------------------------------------------------------ */
1215 NDIS_STATUS oid_rt_get_efuse_max_size_hdl(struct oid_par_priv *poid_par_priv)
1217 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1218 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1221 if (poid_par_priv->type_of_oid != QUERY_OID)
1222 return NDIS_STATUS_NOT_ACCEPTED;
1224 if (poid_par_priv->information_buf_len < sizeof(u32))
1225 return NDIS_STATUS_INVALID_LENGTH;
1227 *(u32 *)poid_par_priv->information_buf = efuse_GetMaxSize(Adapter);
1228 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1234 /* ------------------------------------------------------------------------------ */
1235 NDIS_STATUS oid_rt_pro_efuse_hdl(struct oid_par_priv *poid_par_priv)
1241 if (poid_par_priv->type_of_oid == QUERY_OID)
1242 status = oid_rt_pro_read_efuse_hdl(poid_par_priv);
1244 status = oid_rt_pro_write_efuse_hdl(poid_par_priv);
1250 /* ------------------------------------------------------------------------------ */
1251 NDIS_STATUS oid_rt_pro_efuse_map_hdl(struct oid_par_priv *poid_par_priv)
1253 #ifdef PLATFORM_OS_XP
1257 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1258 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1263 EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&mapLen, _FALSE);
1265 *poid_par_priv->bytes_rw = 0;
1267 if (poid_par_priv->information_buf_len < mapLen)
1268 return NDIS_STATUS_INVALID_LENGTH;
1270 data = (u8 *)poid_par_priv->information_buf;
1272 _irqlevel_changed_(&oldirql, LOWER);
1274 if (poid_par_priv->type_of_oid == QUERY_OID) {
1276 if (rtw_efuse_map_read(Adapter, 0, mapLen, data) == _SUCCESS)
1277 *poid_par_priv->bytes_rw = mapLen;
1279 status = NDIS_STATUS_FAILURE;
1284 if (rtw_efuse_map_write(Adapter, 0, mapLen, data) == _SUCCESS)
1285 *poid_par_priv->bytes_rw = mapLen;
1287 status = NDIS_STATUS_FAILURE;
1291 _irqlevel_changed_(&oldirql, RAISE);
1298 NDIS_STATUS oid_rt_set_crystal_cap_hdl(struct oid_par_priv *poid_par_priv)
1300 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1304 NDIS_STATUS oid_rt_set_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
1307 /* u32 rcr_val32; */
1308 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1309 /* PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); */
1313 if (poid_par_priv->type_of_oid != SET_OID)
1314 return NDIS_STATUS_NOT_ACCEPTED;
1316 if (poid_par_priv->information_buf_len < sizeof(u8))
1317 return NDIS_STATUS_INVALID_LENGTH;
1319 rx_pkt_type = *((u8 *)poid_par_priv->information_buf); /* 4 */
1324 NDIS_STATUS oid_rt_pro_set_tx_agc_offset_hdl(struct oid_par_priv *poid_par_priv)
1329 NDIS_STATUS oid_rt_pro_set_pkt_test_mode_hdl(struct oid_par_priv *poid_par_priv)
1334 unsigned int mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv)
1336 PMP_XMIT_PARM pparm;
1338 struct mp_priv *pmp_priv;
1339 struct pkt_attrib *pattrib;
1342 pparm = (PMP_XMIT_PARM)poid_par_priv->information_buf;
1343 padapter = (PADAPTER)poid_par_priv->adapter_context;
1344 pmp_priv = &padapter->mppriv;
1346 if (poid_par_priv->type_of_oid == QUERY_OID) {
1347 pparm->enable = !pmp_priv->tx.stop;
1348 pparm->count = pmp_priv->tx.sended;
1350 if (pparm->enable == 0)
1351 pmp_priv->tx.stop = 1;
1352 else if (pmp_priv->tx.stop == 1) {
1353 pmp_priv->tx.stop = 0;
1354 pmp_priv->tx.count = pparm->count;
1355 pmp_priv->tx.payload = pparm->payload_type;
1356 pattrib = &pmp_priv->tx.attrib;
1357 pattrib->pktlen = pparm->length;
1358 _rtw_memcpy(pattrib->dst, pparm->da, ETH_ALEN);
1359 SetPacketTx(padapter);
1361 return NDIS_STATUS_FAILURE;
1364 return NDIS_STATUS_SUCCESS;
1367 /* ------------------------------------------------------------------------------ */
1368 NDIS_STATUS oid_rt_set_power_down_hdl(struct oid_par_priv *poid_par_priv)
1370 #ifdef PLATFORM_OS_XP
1374 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1375 #ifdef PLATFORM_LINUX
1376 #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
1377 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
1382 if (poid_par_priv->type_of_oid != SET_OID) {
1383 status = NDIS_STATUS_NOT_ACCEPTED;
1388 _irqlevel_changed_(&oldirql, LOWER);
1390 bpwrup = *(u8 *)poid_par_priv->information_buf;
1391 /* CALL the power_down function */
1392 #ifdef PLATFORM_LINUX
1393 #if defined(CONFIG_RTL8712) /* Linux MP insmod unknown symbol */
1394 dev_power_down(padapter, bpwrup);
1397 _irqlevel_changed_(&oldirql, RAISE);
1399 /* DEBUG_ERR(("\n <=== Query OID_RT_PRO_READ_REGISTER. */
1400 /* Add:0x%08x Width:%d Value:0x%08x\n",RegRWStruct->offset,RegRWStruct->width,RegRWStruct->value)); */
1405 /* ------------------------------------------------------------------------------ */
1406 NDIS_STATUS oid_rt_get_power_mode_hdl(struct oid_par_priv *poid_par_priv)