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/OUTSRC/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);
34 if (poid_par_priv->information_buf_len < sizeof(u8))
35 return NDIS_STATUS_INVALID_LENGTH;
37 if (poid_par_priv->type_of_oid == SET_OID) {
38 Adapter->registrypriv.wireless_mode = *(u8*)poid_par_priv->information_buf;
39 } else if (poid_par_priv->type_of_oid == QUERY_OID) {
40 *(u8*)poid_par_priv->information_buf = Adapter->registrypriv.wireless_mode;
41 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
42 RT_TRACE(_module_mp_, _drv_info_, ("-query Wireless Mode=%d\n", Adapter->registrypriv.wireless_mode));
44 status = NDIS_STATUS_NOT_ACCEPTED;
51 //**************** oid_rtl_seg_81_87_80 section start ****************
52 NDIS_STATUS oid_rt_pro_write_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
57 struct bb_reg_param *pbbreg;
60 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
61 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
65 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_write_bb_reg_hdl\n"));
67 if (poid_par_priv->type_of_oid != SET_OID)
68 return NDIS_STATUS_NOT_ACCEPTED;
70 if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param))
71 return NDIS_STATUS_INVALID_LENGTH;
73 pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf);
75 offset = (u16)(pbbreg->offset) & 0xFFF; //0ffset :0x800~0xfff
76 if (offset < BB_REG_BASE_ADDR) offset |= BB_REG_BASE_ADDR;
78 value = pbbreg->value;
80 RT_TRACE(_module_mp_, _drv_notice_,
81 ("oid_rt_pro_write_bb_reg_hdl: offset=0x%03X value=0x%08X\n",
84 _irqlevel_changed_(&oldirql, LOWER);
85 write_bbreg(Adapter, offset, 0xFFFFFFFF, value);
86 _irqlevel_changed_(&oldirql, RAISE);
92 //------------------------------------------------------------------------------
93 NDIS_STATUS oid_rt_pro_read_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
98 struct bb_reg_param *pbbreg;
101 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
102 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
106 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_read_bb_reg_hdl\n"));
108 if (poid_par_priv->type_of_oid != QUERY_OID)
109 return NDIS_STATUS_NOT_ACCEPTED;
111 if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param))
112 return NDIS_STATUS_INVALID_LENGTH;
114 pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf);
116 offset = (u16)(pbbreg->offset) & 0xFFF; //0ffset :0x800~0xfff
117 if (offset < BB_REG_BASE_ADDR) offset |= BB_REG_BASE_ADDR;
119 _irqlevel_changed_(&oldirql, LOWER);
120 value = read_bbreg(Adapter, offset, 0xFFFFFFFF);
121 _irqlevel_changed_(&oldirql, RAISE);
123 pbbreg->value = value;
124 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
126 RT_TRACE(_module_mp_, _drv_notice_,
127 ("-oid_rt_pro_read_bb_reg_hdl: offset=0x%03X value:0x%08X\n",
133 //------------------------------------------------------------------------------
134 NDIS_STATUS oid_rt_pro_write_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
136 #ifdef PLATFORM_OS_XP
139 struct rf_reg_param *pbbreg;
143 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
144 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
148 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_write_rf_reg_hdl\n"));
150 if (poid_par_priv->type_of_oid != SET_OID)
151 return NDIS_STATUS_NOT_ACCEPTED;
153 if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param))
154 return NDIS_STATUS_INVALID_LENGTH;
156 pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf);
158 if (pbbreg->path >= MAX_RF_PATH_NUMS)
159 return NDIS_STATUS_NOT_ACCEPTED;
160 if (pbbreg->offset > 0xFF)
161 return NDIS_STATUS_NOT_ACCEPTED;
162 if (pbbreg->value > 0xFFFFF)
163 return NDIS_STATUS_NOT_ACCEPTED;
165 path = (u8)pbbreg->path;
166 offset = (u8)pbbreg->offset;
167 value = pbbreg->value;
169 RT_TRACE(_module_mp_, _drv_notice_,
170 ("oid_rt_pro_write_rf_reg_hdl: path=%d offset=0x%02X value=0x%05X\n",
171 path, offset, value));
173 _irqlevel_changed_(&oldirql, LOWER);
174 write_rfreg(Adapter, path, offset, value);
175 _irqlevel_changed_(&oldirql, RAISE);
181 //------------------------------------------------------------------------------
182 NDIS_STATUS oid_rt_pro_read_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
184 #ifdef PLATFORM_OS_XP
187 struct rf_reg_param *pbbreg;
191 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
192 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
196 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_read_rf_reg_hdl\n"));
198 if (poid_par_priv->type_of_oid != QUERY_OID)
199 return NDIS_STATUS_NOT_ACCEPTED;
201 if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param))
202 return NDIS_STATUS_INVALID_LENGTH;
204 pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf);
206 if (pbbreg->path >= MAX_RF_PATH_NUMS)
207 return NDIS_STATUS_NOT_ACCEPTED;
208 if (pbbreg->offset > 0xFF)
209 return NDIS_STATUS_NOT_ACCEPTED;
211 path = (u8)pbbreg->path;
212 offset = (u8)pbbreg->offset;
214 _irqlevel_changed_(&oldirql, LOWER);
215 value = read_rfreg(Adapter, path, offset);
216 _irqlevel_changed_(&oldirql, RAISE);
218 pbbreg->value = value;
220 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
222 RT_TRACE(_module_mp_, _drv_notice_,
223 ("-oid_rt_pro_read_rf_reg_hdl: path=%d offset=0x%02X value=0x%05X\n",
224 path, offset, value));
230 //**************** oid_rtl_seg_81_87_00 section end****************
231 //------------------------------------------------------------------------------
233 //**************** oid_rtl_seg_81_80_00 section start ****************
234 //------------------------------------------------------------------------------
235 NDIS_STATUS oid_rt_pro_set_data_rate_hdl(struct oid_par_priv *poid_par_priv)
237 #ifdef PLATFORM_OS_XP
241 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
242 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
246 RT_TRACE(_module_mp_, _drv_notice_,
247 ("+oid_rt_pro_set_data_rate_hdl\n"));
249 if (poid_par_priv->type_of_oid != SET_OID)
250 return NDIS_STATUS_NOT_ACCEPTED;
252 if (poid_par_priv->information_buf_len != sizeof(u32))
253 return NDIS_STATUS_INVALID_LENGTH;
255 ratevalue = *((u32*)poid_par_priv->information_buf);//4
256 RT_TRACE(_module_mp_, _drv_notice_,
257 ("oid_rt_pro_set_data_rate_hdl: data rate idx=%d\n", ratevalue));
258 if (ratevalue >= MPT_RATE_LAST)
259 return NDIS_STATUS_INVALID_DATA;
261 Adapter->mppriv.rateidx = ratevalue;
263 _irqlevel_changed_(&oldirql, LOWER);
264 SetDataRate(Adapter);
265 _irqlevel_changed_(&oldirql, RAISE);
271 //------------------------------------------------------------------------------
272 NDIS_STATUS oid_rt_pro_start_test_hdl(struct oid_par_priv *poid_par_priv)
274 #ifdef PLATFORM_OS_XP
278 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
279 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
283 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_start_test_hdl\n"));
285 if (Adapter->registrypriv.mp_mode == 0)
286 return NDIS_STATUS_NOT_ACCEPTED;
288 if (poid_par_priv->type_of_oid != SET_OID)
289 return NDIS_STATUS_NOT_ACCEPTED;
291 _irqlevel_changed_(&oldirql, LOWER);
293 //IQCalibrateBcut(Adapter);
295 mode = *((u32*)poid_par_priv->information_buf);
296 Adapter->mppriv.mode = mode;// 1 for loopback
298 if (mp_start_test(Adapter) == _FAIL) {
299 status = NDIS_STATUS_NOT_ACCEPTED;
304 _irqlevel_changed_(&oldirql, RAISE);
306 RT_TRACE(_module_mp_, _drv_notice_, ("-oid_rt_pro_start_test_hdl: mp_mode=%d\n", Adapter->mppriv.mode));
312 //------------------------------------------------------------------------------
313 NDIS_STATUS oid_rt_pro_stop_test_hdl(struct oid_par_priv *poid_par_priv)
315 #ifdef PLATFORM_OS_XP
318 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
319 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
323 RT_TRACE(_module_mp_, _drv_notice_, ("+Set OID_RT_PRO_STOP_TEST\n"));
325 if (poid_par_priv->type_of_oid != SET_OID)
326 return NDIS_STATUS_NOT_ACCEPTED;
328 _irqlevel_changed_(&oldirql, LOWER);
329 mp_stop_test(Adapter);
330 _irqlevel_changed_(&oldirql, RAISE);
332 RT_TRACE(_module_mp_, _drv_notice_, ("-Set OID_RT_PRO_STOP_TEST\n"));
338 //------------------------------------------------------------------------------
339 NDIS_STATUS oid_rt_pro_set_channel_direct_call_hdl(struct oid_par_priv *poid_par_priv)
341 #ifdef PLATFORM_OS_XP
345 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
346 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
350 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_set_channel_direct_call_hdl\n"));
352 if (poid_par_priv->information_buf_len != sizeof(u32))
353 return NDIS_STATUS_INVALID_LENGTH;
355 if (poid_par_priv->type_of_oid == QUERY_OID) {
356 *((u32*)poid_par_priv->information_buf) = Adapter->mppriv.channel;
357 return NDIS_STATUS_SUCCESS;
360 if (poid_par_priv->type_of_oid != SET_OID)
361 return NDIS_STATUS_NOT_ACCEPTED;
363 Channel = *((u32*)poid_par_priv->information_buf);
364 RT_TRACE(_module_mp_, _drv_notice_, ("oid_rt_pro_set_channel_direct_call_hdl: Channel=%d\n", Channel));
366 return NDIS_STATUS_NOT_ACCEPTED;
367 Adapter->mppriv.channel = Channel;
369 _irqlevel_changed_(&oldirql, LOWER);
371 _irqlevel_changed_(&oldirql, RAISE);
377 //------------------------------------------------------------------------------
378 NDIS_STATUS oid_rt_set_bandwidth_hdl(struct oid_par_priv *poid_par_priv)
380 #ifdef PLATFORM_OS_XP
385 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
386 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
390 RT_TRACE(_module_mp_, _drv_info_,
391 ("+oid_rt_set_bandwidth_hdl\n"));
393 if (poid_par_priv->type_of_oid != SET_OID)
394 return NDIS_STATUS_NOT_ACCEPTED;
396 if (poid_par_priv->information_buf_len < sizeof(u32))
397 return NDIS_STATUS_INVALID_LENGTH;
399 bandwidth = *((u32*)poid_par_priv->information_buf);//4
400 channel_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
402 if (bandwidth != CHANNEL_WIDTH_40)
403 bandwidth = CHANNEL_WIDTH_20;
404 padapter->mppriv.bandwidth = (u8)bandwidth;
405 padapter->mppriv.prime_channel_offset = (u8)channel_offset;
407 _irqlevel_changed_(&oldirql, LOWER);
408 SetBandwidth(padapter);
409 _irqlevel_changed_(&oldirql, RAISE);
411 RT_TRACE(_module_mp_, _drv_notice_,
412 ("-oid_rt_set_bandwidth_hdl: bandwidth=%d channel_offset=%d\n",
413 bandwidth, channel_offset));
419 //------------------------------------------------------------------------------
420 NDIS_STATUS oid_rt_pro_set_antenna_bb_hdl(struct oid_par_priv *poid_par_priv)
422 #ifdef PLATFORM_OS_XP
426 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
427 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
431 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_set_antenna_bb_hdl\n"));
433 if (poid_par_priv->information_buf_len != sizeof(u32))
434 return NDIS_STATUS_INVALID_LENGTH;
436 if (poid_par_priv->type_of_oid == SET_OID)
438 antenna = *(u32*)poid_par_priv->information_buf;
440 Adapter->mppriv.antenna_tx = (u16)((antenna & 0xFFFF0000) >> 16);
441 Adapter->mppriv.antenna_rx = (u16)(antenna & 0x0000FFFF);
442 RT_TRACE(_module_mp_, _drv_notice_,
443 ("oid_rt_pro_set_antenna_bb_hdl: tx_ant=0x%04x rx_ant=0x%04x\n",
444 Adapter->mppriv.antenna_tx, Adapter->mppriv.antenna_rx));
446 _irqlevel_changed_(&oldirql, LOWER);
448 _irqlevel_changed_(&oldirql, RAISE);
450 antenna = (Adapter->mppriv.antenna_tx << 16)|Adapter->mppriv.antenna_rx;
451 *(u32*)poid_par_priv->information_buf = antenna;
459 NDIS_STATUS oid_rt_pro_set_tx_power_control_hdl(struct oid_par_priv *poid_par_priv)
461 #ifdef PLATFORM_OS_XP
465 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
466 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
470 RT_TRACE(_module_mp_, _drv_info_, ("+oid_rt_pro_set_tx_power_control_hdl\n"));
472 if (poid_par_priv->type_of_oid != SET_OID)
473 return NDIS_STATUS_NOT_ACCEPTED;
475 if (poid_par_priv->information_buf_len != sizeof(u32))
476 return NDIS_STATUS_INVALID_LENGTH;
478 tx_pwr_idx = *((u32*)poid_par_priv->information_buf);
479 if (tx_pwr_idx > MAX_TX_PWR_INDEX_N_MODE)
480 return NDIS_STATUS_NOT_ACCEPTED;
482 Adapter->mppriv.txpoweridx = (u8)tx_pwr_idx;
484 RT_TRACE(_module_mp_, _drv_notice_,
485 ("oid_rt_pro_set_tx_power_control_hdl: idx=0x%2x\n",
486 Adapter->mppriv.txpoweridx));
488 _irqlevel_changed_(&oldirql, LOWER);
490 _irqlevel_changed_(&oldirql, RAISE);
497 //------------------------------------------------------------------------------
498 //**************** oid_rtl_seg_81_80_20 section start ****************
499 //------------------------------------------------------------------------------
500 NDIS_STATUS oid_rt_pro_query_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv)
502 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
503 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
507 if (poid_par_priv->type_of_oid !=QUERY_OID) {
508 status = NDIS_STATUS_NOT_ACCEPTED;
512 if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
513 *(ULONG*)poid_par_priv->information_buf = Adapter->mppriv.tx_pktcount;
514 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
516 status = NDIS_STATUS_INVALID_LENGTH;
523 //------------------------------------------------------------------------------
524 NDIS_STATUS oid_rt_pro_query_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
526 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
527 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
531 if (poid_par_priv->type_of_oid != QUERY_OID) {
532 status = NDIS_STATUS_NOT_ACCEPTED;
535 RT_TRACE(_module_mp_, _drv_alert_, ("===> oid_rt_pro_query_rx_packet_received_hdl.\n"));
536 if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
537 *(ULONG*)poid_par_priv->information_buf = Adapter->mppriv.rx_pktcount;
538 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
539 RT_TRACE(_module_mp_, _drv_alert_, ("recv_ok:%d \n",Adapter->mppriv.rx_pktcount));
541 status = NDIS_STATUS_INVALID_LENGTH;
548 //------------------------------------------------------------------------------
549 NDIS_STATUS oid_rt_pro_query_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
551 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
552 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
556 if (poid_par_priv->type_of_oid != QUERY_OID) {
557 status = NDIS_STATUS_NOT_ACCEPTED;
560 RT_TRACE(_module_mp_, _drv_alert_, ("===> oid_rt_pro_query_rx_packet_crc32_error_hdl.\n"));
561 if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
562 *(ULONG*)poid_par_priv->information_buf = Adapter->mppriv.rx_crcerrpktcount;
563 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
564 RT_TRACE(_module_mp_, _drv_alert_, ("recv_err:%d \n",Adapter->mppriv.rx_crcerrpktcount));
566 status = NDIS_STATUS_INVALID_LENGTH;
573 //------------------------------------------------------------------------------
575 NDIS_STATUS oid_rt_pro_reset_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv)
577 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
578 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
582 if (poid_par_priv->type_of_oid != SET_OID) {
583 status = NDIS_STATUS_NOT_ACCEPTED;
587 RT_TRACE(_module_mp_, _drv_alert_, ("===> oid_rt_pro_reset_tx_packet_sent_hdl.\n"));
588 Adapter->mppriv.tx_pktcount = 0;
594 //------------------------------------------------------------------------------
595 NDIS_STATUS oid_rt_pro_reset_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
597 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
598 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
602 if (poid_par_priv->type_of_oid != SET_OID)
604 status = NDIS_STATUS_NOT_ACCEPTED;
608 if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
609 Adapter->mppriv.rx_pktcount = 0;
610 Adapter->mppriv.rx_crcerrpktcount = 0;
612 status = NDIS_STATUS_INVALID_LENGTH;
619 //------------------------------------------------------------------------------
620 NDIS_STATUS oid_rt_reset_phy_rx_packet_count_hdl(struct oid_par_priv *poid_par_priv)
622 #ifdef PLATFORM_OS_XP
625 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
626 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
630 if (poid_par_priv->type_of_oid != SET_OID) {
631 status = NDIS_STATUS_NOT_ACCEPTED;
635 _irqlevel_changed_(&oldirql, LOWER);
636 ResetPhyRxPktCount(Adapter);
637 _irqlevel_changed_(&oldirql, RAISE);
643 //------------------------------------------------------------------------------
644 NDIS_STATUS oid_rt_get_phy_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
646 #ifdef PLATFORM_OS_XP
649 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
650 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
654 RT_TRACE(_module_mp_, _drv_info_, ("+oid_rt_get_phy_rx_packet_received_hdl\n"));
656 if (poid_par_priv->type_of_oid != QUERY_OID)
657 return NDIS_STATUS_NOT_ACCEPTED;
659 if (poid_par_priv->information_buf_len != sizeof(ULONG))
660 return NDIS_STATUS_INVALID_LENGTH;
662 _irqlevel_changed_(&oldirql, LOWER);
663 *(ULONG*)poid_par_priv->information_buf = GetPhyRxPktReceived(Adapter);
664 _irqlevel_changed_(&oldirql, RAISE);
666 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
668 RT_TRACE(_module_mp_, _drv_notice_, ("-oid_rt_get_phy_rx_packet_received_hdl: recv_ok=%d\n", *(ULONG*)poid_par_priv->information_buf));
674 //------------------------------------------------------------------------------
675 NDIS_STATUS oid_rt_get_phy_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
677 #ifdef PLATFORM_OS_XP
680 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
681 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
685 RT_TRACE(_module_mp_, _drv_info_, ("+oid_rt_get_phy_rx_packet_crc32_error_hdl\n"));
687 if (poid_par_priv->type_of_oid != QUERY_OID)
688 return NDIS_STATUS_NOT_ACCEPTED;
691 if (poid_par_priv->information_buf_len != sizeof(ULONG))
692 return NDIS_STATUS_INVALID_LENGTH;
694 _irqlevel_changed_(&oldirql, LOWER);
695 *(ULONG*)poid_par_priv->information_buf = GetPhyRxPktCRC32Error(Adapter);
696 _irqlevel_changed_(&oldirql, RAISE);
698 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
700 RT_TRACE(_module_mp_, _drv_info_, ("-oid_rt_get_phy_rx_packet_crc32_error_hdl: recv_err=%d\n", *(ULONG*)poid_par_priv->information_buf));
706 //**************** oid_rtl_seg_81_80_20 section end ****************
707 NDIS_STATUS oid_rt_pro_set_continuous_tx_hdl(struct oid_par_priv *poid_par_priv)
709 #ifdef PLATFORM_OS_XP
713 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
714 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
718 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_set_continuous_tx_hdl\n"));
720 if (poid_par_priv->type_of_oid != SET_OID)
721 return NDIS_STATUS_NOT_ACCEPTED;
723 bStartTest = *((u32*)poid_par_priv->information_buf);
725 _irqlevel_changed_(&oldirql, LOWER);
726 SetContinuousTx(Adapter,(u8)bStartTest);
728 struct mp_priv *pmp_priv = &Adapter->mppriv;
729 if (pmp_priv->tx.stop == 0) {
730 pmp_priv->tx.stop = 1;
731 DBG_871X("%s: pkt tx is running...\n", __func__);
734 pmp_priv->tx.stop = 0;
735 pmp_priv->tx.count = 1;
736 SetPacketTx(Adapter);
738 _irqlevel_changed_(&oldirql, RAISE);
745 NDIS_STATUS oid_rt_pro_set_single_carrier_tx_hdl(struct oid_par_priv *poid_par_priv)
747 #ifdef PLATFORM_OS_XP
751 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
752 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
756 RT_TRACE(_module_mp_, _drv_alert_, ("+oid_rt_pro_set_single_carrier_tx_hdl\n"));
758 if (poid_par_priv->type_of_oid != SET_OID)
759 return NDIS_STATUS_NOT_ACCEPTED;
761 bStartTest = *((u32*)poid_par_priv->information_buf);
763 _irqlevel_changed_(&oldirql, LOWER);
764 SetSingleCarrierTx(Adapter, (u8)bStartTest);
766 struct mp_priv *pmp_priv = &Adapter->mppriv;
767 if (pmp_priv->tx.stop == 0) {
768 pmp_priv->tx.stop = 1;
769 DBG_871X("%s: pkt tx is running...\n", __func__);
772 pmp_priv->tx.stop = 0;
773 pmp_priv->tx.count = 1;
774 SetPacketTx(Adapter);
776 _irqlevel_changed_(&oldirql, RAISE);
783 NDIS_STATUS oid_rt_pro_set_carrier_suppression_tx_hdl(struct oid_par_priv *poid_par_priv)
785 #ifdef PLATFORM_OS_XP
789 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
790 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
794 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_set_carrier_suppression_tx_hdl\n"));
796 if (poid_par_priv->type_of_oid != SET_OID)
797 return NDIS_STATUS_NOT_ACCEPTED;
799 bStartTest = *((u32*)poid_par_priv->information_buf);
801 _irqlevel_changed_(&oldirql, LOWER);
802 SetCarrierSuppressionTx(Adapter, (u8)bStartTest);
804 struct mp_priv *pmp_priv = &Adapter->mppriv;
805 if (pmp_priv->tx.stop == 0) {
806 pmp_priv->tx.stop = 1;
807 DBG_871X("%s: pkt tx is running...\n", __func__);
810 pmp_priv->tx.stop = 0;
811 pmp_priv->tx.count = 1;
812 SetPacketTx(Adapter);
814 _irqlevel_changed_(&oldirql, RAISE);
821 NDIS_STATUS oid_rt_pro_set_single_tone_tx_hdl(struct oid_par_priv *poid_par_priv)
823 #ifdef PLATFORM_OS_XP
827 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
828 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
832 RT_TRACE(_module_mp_, _drv_alert_, ("+oid_rt_pro_set_single_tone_tx_hdl\n"));
834 if (poid_par_priv->type_of_oid != SET_OID)
835 return NDIS_STATUS_NOT_ACCEPTED;
837 bStartTest = *((u32*)poid_par_priv->information_buf);
839 _irqlevel_changed_(&oldirql, LOWER);
840 SetSingleToneTx(Adapter,(u8)bStartTest);
841 _irqlevel_changed_(&oldirql, RAISE);
848 NDIS_STATUS oid_rt_pro_set_modulation_hdl(struct oid_par_priv* poid_par_priv)
853 NDIS_STATUS oid_rt_pro_trigger_gpio_hdl(struct oid_par_priv *poid_par_priv)
855 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
857 #ifdef PLATFORM_OS_XP
860 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
863 if (poid_par_priv->type_of_oid != SET_OID)
864 return NDIS_STATUS_NOT_ACCEPTED;
866 _irqlevel_changed_(&oldirql, LOWER);
867 rtw_hal_set_hwreg(Adapter, HW_VAR_TRIGGER_GPIO_0, 0);
868 _irqlevel_changed_(&oldirql, RAISE);
874 //**************** oid_rtl_seg_81_80_00 section end ****************
875 //------------------------------------------------------------------------------
876 NDIS_STATUS oid_rt_pro8711_join_bss_hdl(struct oid_par_priv *poid_par_priv)
879 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
881 #ifdef PLATFORM_OS_XP
884 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
886 PNDIS_802_11_SSID pssid;
890 if (poid_par_priv->type_of_oid != SET_OID)
891 return NDIS_STATUS_NOT_ACCEPTED;
893 *poid_par_priv->bytes_needed = (u32)sizeof(NDIS_802_11_SSID);
894 *poid_par_priv->bytes_rw = 0;
895 if (poid_par_priv->information_buf_len < *poid_par_priv->bytes_needed)
896 return NDIS_STATUS_INVALID_LENGTH;
898 pssid = (PNDIS_802_11_SSID)poid_par_priv->information_buf;
900 _irqlevel_changed_(&oldirql, LOWER);
902 if (mp_start_joinbss(Adapter, pssid) == _FAIL)
903 status = NDIS_STATUS_NOT_ACCEPTED;
905 _irqlevel_changed_(&oldirql, RAISE);
907 *poid_par_priv->bytes_rw = sizeof(NDIS_802_11_SSID);
916 //------------------------------------------------------------------------------
917 NDIS_STATUS oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv)
919 #ifdef PLATFORM_OS_XP
924 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
925 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
929 RT_TRACE(_module_mp_, _drv_info_,
930 ("+oid_rt_pro_read_register_hdl\n"));
932 if (poid_par_priv->type_of_oid != QUERY_OID)
933 return NDIS_STATUS_NOT_ACCEPTED;
935 RegRWStruct = (pRW_Reg)poid_par_priv->information_buf;
936 offset = RegRWStruct->offset;
937 width = RegRWStruct->width;
940 return NDIS_STATUS_NOT_ACCEPTED;
942 _irqlevel_changed_(&oldirql, LOWER);
946 RegRWStruct->value = rtw_read8(Adapter, offset);
949 RegRWStruct->value = rtw_read16(Adapter, offset);
953 RegRWStruct->value = rtw_read32(Adapter, offset);
956 RT_TRACE(_module_mp_, _drv_notice_,
957 ("oid_rt_pro_read_register_hdl: offset:0x%04X value:0x%X\n",
958 offset, RegRWStruct->value));
960 _irqlevel_changed_(&oldirql, RAISE);
962 *poid_par_priv->bytes_rw = width;
968 //------------------------------------------------------------------------------
969 NDIS_STATUS oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv)
971 #ifdef PLATFORM_OS_XP
975 u32 offset, width, value;
976 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
977 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
981 RT_TRACE(_module_mp_, _drv_info_,
982 ("+oid_rt_pro_write_register_hdl\n"));
984 if (poid_par_priv->type_of_oid != SET_OID)
985 return NDIS_STATUS_NOT_ACCEPTED;
987 RegRWStruct = (pRW_Reg)poid_par_priv->information_buf;
988 offset = RegRWStruct->offset;
989 width = RegRWStruct->width;
990 value = RegRWStruct->value;
993 return NDIS_STATUS_NOT_ACCEPTED;
995 _irqlevel_changed_(&oldirql, LOWER);
997 switch (RegRWStruct->width)
1001 status = NDIS_STATUS_NOT_ACCEPTED;
1004 rtw_write8(padapter, offset, (u8)value);
1007 if (value > 0xFFFF) {
1008 status = NDIS_STATUS_NOT_ACCEPTED;
1011 rtw_write16(padapter, offset, (u16)value);
1014 rtw_write32(padapter, offset, value);
1017 status = NDIS_STATUS_NOT_ACCEPTED;
1021 _irqlevel_changed_(&oldirql, RAISE);
1023 RT_TRACE(_module_mp_, _drv_info_,
1024 ("-oid_rt_pro_write_register_hdl: offset=0x%08X width=%d value=0x%X\n",
1025 offset, width, value));
1031 //------------------------------------------------------------------------------
1032 NDIS_STATUS oid_rt_pro_burst_read_register_hdl(struct oid_par_priv *poid_par_priv)
1035 #ifdef PLATFORM_OS_XP
1038 pBurst_RW_Reg pBstRwReg;
1039 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1040 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
1044 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_burst_read_register_hdl\n"));
1046 if (poid_par_priv->type_of_oid != QUERY_OID)
1047 return NDIS_STATUS_NOT_ACCEPTED;
1049 pBstRwReg = (pBurst_RW_Reg)poid_par_priv->information_buf;
1051 _irqlevel_changed_(&oldirql, LOWER);
1052 rtw_read_mem(padapter, pBstRwReg->offset, (u32)pBstRwReg->len, pBstRwReg->Data);
1053 _irqlevel_changed_(&oldirql, RAISE);
1055 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1057 RT_TRACE(_module_mp_, _drv_info_, ("-oid_rt_pro_burst_read_register_hdl\n"));
1066 //------------------------------------------------------------------------------
1067 NDIS_STATUS oid_rt_pro_burst_write_register_hdl(struct oid_par_priv *poid_par_priv)
1070 #ifdef PLATFORM_OS_XP
1073 pBurst_RW_Reg pBstRwReg;
1074 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1075 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
1079 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_burst_write_register_hdl\n"));
1081 if (poid_par_priv->type_of_oid != SET_OID)
1082 return NDIS_STATUS_NOT_ACCEPTED;
1084 pBstRwReg = (pBurst_RW_Reg)poid_par_priv->information_buf;
1086 _irqlevel_changed_(&oldirql, LOWER);
1087 rtw_write_mem(padapter, pBstRwReg->offset, (u32)pBstRwReg->len, pBstRwReg->Data);
1088 _irqlevel_changed_(&oldirql, RAISE);
1090 RT_TRACE(_module_mp_, _drv_info_, ("-oid_rt_pro_burst_write_register_hdl\n"));
1099 //------------------------------------------------------------------------------
1100 NDIS_STATUS oid_rt_pro_write_txcmd_hdl(struct oid_par_priv *poid_par_priv)
1103 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1105 PADAPTER Adapter = (PADAPTER)( poid_par_priv->adapter_context);
1107 #ifdef PLATFORM_OS_XP
1111 TX_CMD_Desc *TxCmd_Info;
1115 if (poid_par_priv->type_of_oid != SET_OID)
1116 return NDIS_STATUS_NOT_ACCEPTED;
1118 RT_TRACE(_module_mp_, _drv_info_, ("+Set OID_RT_PRO_WRITE_TXCMD\n"));
1120 TxCmd_Info=(TX_CMD_Desc*)poid_par_priv->information_buf;
1122 RT_TRACE(_module_mp_, _drv_info_, ("WRITE_TXCMD:Addr=%.8X\n", TxCmd_Info->offset));
1123 RT_TRACE(_module_mp_, _drv_info_, ("WRITE_TXCMD:1.)%.8X\n", (ULONG)TxCmd_Info->TxCMD.value[0]));
1124 RT_TRACE(_module_mp_, _drv_info_, ("WRITE_TXCMD:2.)%.8X\n", (ULONG)TxCmd_Info->TxCMD.value[1]));
1125 RT_TRACE(_module_mp_, _drv_info_, (("WRITE_TXCMD:3.)%.8X\n", (ULONG)TxCmd_Info->TxCMD.value[2]));
1126 RT_TRACE(_module_mp_, _drv_info_, ("WRITE_TXCMD:4.)%.8X\n", (ULONG)TxCmd_Info->TxCMD.value[3]));
1128 _irqlevel_changed_(&oldirql, LOWER);
1130 rtw_write32(Adapter, TxCmd_Info->offset + 0, (unsigned int)TxCmd_Info->TxCMD.value[0]);
1131 rtw_write32(Adapter, TxCmd_Info->offset + 4, (unsigned int)TxCmd_Info->TxCMD.value[1]);
1133 _irqlevel_changed_(&oldirql, RAISE);
1135 RT_TRACE(_module_mp_, _drv_notice_,
1136 ("-Set OID_RT_PRO_WRITE_TXCMD: status=0x%08X\n", status));
1146 //------------------------------------------------------------------------------
1147 NDIS_STATUS oid_rt_pro_read16_eeprom_hdl(struct oid_par_priv *poid_par_priv)
1150 #ifdef PLATFORM_OS_XP
1153 pEEPROM_RWParam pEEPROM;
1154 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1155 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
1159 RT_TRACE(_module_mp_, _drv_info_, ("+Query OID_RT_PRO_READ16_EEPROM\n"));
1161 if (poid_par_priv->type_of_oid != QUERY_OID)
1162 return NDIS_STATUS_NOT_ACCEPTED;
1164 pEEPROM = (pEEPROM_RWParam)poid_par_priv->information_buf;
1166 _irqlevel_changed_(&oldirql, LOWER);
1167 pEEPROM->value = eeprom_read16(padapter, (u16)(pEEPROM->offset >> 1));
1168 _irqlevel_changed_(&oldirql, RAISE);
1170 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1172 RT_TRACE(_module_mp_, _drv_notice_,
1173 ("-Query OID_RT_PRO_READ16_EEPROM: offset=0x%x value=0x%x\n",
1174 pEEPROM->offset, pEEPROM->value));
1184 //------------------------------------------------------------------------------
1185 NDIS_STATUS oid_rt_pro_write16_eeprom_hdl (struct oid_par_priv *poid_par_priv)
1188 #ifdef PLATFORM_OS_XP
1191 pEEPROM_RWParam pEEPROM;
1192 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1193 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
1197 RT_TRACE(_module_mp_, _drv_notice_, ("+Set OID_RT_PRO_WRITE16_EEPROM\n"));
1199 if (poid_par_priv->type_of_oid != SET_OID)
1200 return NDIS_STATUS_NOT_ACCEPTED;
1202 pEEPROM = (pEEPROM_RWParam)poid_par_priv->information_buf;
1204 _irqlevel_changed_(&oldirql, LOWER);
1205 eeprom_write16(padapter, (u16)(pEEPROM->offset >> 1), pEEPROM->value);
1206 _irqlevel_changed_(&oldirql, RAISE);
1208 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1217 //------------------------------------------------------------------------------
1218 NDIS_STATUS oid_rt_pro8711_wi_poll_hdl(struct oid_par_priv *poid_par_priv)
1221 PADAPTER Adapter = (PADAPTER)( poid_par_priv->adapter_context);
1223 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1225 struct mp_wiparam *pwi_param;
1229 if (poid_par_priv->type_of_oid != QUERY_OID)
1230 return NDIS_STATUS_NOT_ACCEPTED;
1232 if (poid_par_priv->information_buf_len < sizeof(struct mp_wiparam))
1233 return NDIS_STATUS_INVALID_LENGTH;
1235 if (Adapter->mppriv.workparam.bcompleted == _FALSE)
1236 return NDIS_STATUS_NOT_ACCEPTED;
1238 pwi_param = (struct mp_wiparam *)poid_par_priv->information_buf;
1240 _rtw_memcpy(pwi_param, &Adapter->mppriv.workparam, sizeof(struct mp_wiparam));
1241 Adapter->mppriv.act_in_progress = _FALSE;
1242 // RT_TRACE(_module_mp_, _drv_info_, ("rf:%x\n", pwiparam->IoValue));
1243 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1252 //------------------------------------------------------------------------------
1253 NDIS_STATUS oid_rt_pro8711_pkt_loss_hdl(struct oid_par_priv *poid_par_priv)
1256 PADAPTER Adapter = (PADAPTER)( poid_par_priv->adapter_context);
1258 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1262 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro8711_pkt_loss_hdl\n"));
1264 if (poid_par_priv->type_of_oid != QUERY_OID)
1265 return NDIS_STATUS_NOT_ACCEPTED;
1267 if (poid_par_priv->information_buf_len < sizeof(uint)*2) {
1268 RT_TRACE(_module_mp_, _drv_err_, ("-oid_rt_pro8711_pkt_loss_hdl: buf_len=%d\n", (int)poid_par_priv->information_buf_len));
1269 return NDIS_STATUS_INVALID_LENGTH;
1272 if (*(uint*)poid_par_priv->information_buf == 1)//init==1
1273 Adapter->mppriv.rx_pktloss = 0;
1275 *((uint*)poid_par_priv->information_buf+1) = Adapter->mppriv.rx_pktloss;
1276 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1285 //------------------------------------------------------------------------------
1286 NDIS_STATUS oid_rt_rd_attrib_mem_hdl(struct oid_par_priv *poid_par_priv)
1289 PADAPTER Adapter = (PADAPTER)( poid_par_priv->adapter_context);
1290 struct io_queue *pio_queue = (struct io_queue *)Adapter->pio_queue;
1291 struct intf_hdl *pintfhdl = &pio_queue->intf;
1293 #ifdef PLATFORM_OS_XP
1296 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1298 #ifdef CONFIG_SDIO_HCI
1299 void (*_attrib_read)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
1304 RT_TRACE(_module_mp_, _drv_notice_, ("+Query OID_RT_RD_ATTRIB_MEM\n"));
1306 if (poid_par_priv->type_of_oid != QUERY_OID)
1307 return NDIS_STATUS_NOT_ACCEPTED;
1309 #ifdef CONFIG_SDIO_HCI
1310 _irqlevel_changed_(&oldirql, LOWER);
1312 u32 *plmem = (u32*)poid_par_priv->information_buf+2;
1313 _attrib_read = pintfhdl->io_ops._attrib_read;
1314 _attrib_read(pintfhdl, *((u32*)poid_par_priv->information_buf),
1315 *((u32*)poid_par_priv->information_buf+1), (u8*)plmem);
1316 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1318 _irqlevel_changed_(&oldirql, RAISE);
1328 //------------------------------------------------------------------------------
1329 NDIS_STATUS oid_rt_wr_attrib_mem_hdl (struct oid_par_priv *poid_par_priv)
1332 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1333 struct io_queue *pio_queue = (struct io_queue *)Adapter->pio_queue;
1334 struct intf_hdl *pintfhdl = &pio_queue->intf;
1336 #ifdef PLATFORM_OS_XP
1339 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1341 #ifdef CONFIG_SDIO_HCI
1342 void (*_attrib_write)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
1347 if (poid_par_priv->type_of_oid != SET_OID)
1348 return NDIS_STATUS_NOT_ACCEPTED;
1350 #ifdef CONFIG_SDIO_HCI
1351 _irqlevel_changed_(&oldirql, LOWER);
1353 u32 *plmem = (u32*)poid_par_priv->information_buf + 2;
1354 _attrib_write = pintfhdl->io_ops._attrib_write;
1355 _attrib_write(pintfhdl, *(u32*)poid_par_priv->information_buf,
1356 *((u32*)poid_par_priv->information_buf+1), (u8*)plmem);
1358 _irqlevel_changed_(&oldirql, RAISE);
1368 //------------------------------------------------------------------------------
1369 NDIS_STATUS oid_rt_pro_set_rf_intfs_hdl(struct oid_par_priv *poid_par_priv)
1372 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1374 #ifdef PLATFORM_OS_XP
1377 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1381 RT_TRACE(_module_mp_, _drv_notice_, ("+OID_RT_PRO_SET_RF_INTFS\n"));
1383 if (poid_par_priv->type_of_oid != SET_OID)
1384 return NDIS_STATUS_NOT_ACCEPTED;
1386 _irqlevel_changed_(&oldirql, LOWER);
1388 if (rtw_setrfintfs_cmd(Adapter, *(unsigned char*)poid_par_priv->information_buf) == _FAIL)
1389 status = NDIS_STATUS_NOT_ACCEPTED;
1391 _irqlevel_changed_(&oldirql, RAISE);
1400 //------------------------------------------------------------------------------
1401 NDIS_STATUS oid_rt_poll_rx_status_hdl(struct oid_par_priv *poid_par_priv)
1404 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1406 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1410 if (poid_par_priv->type_of_oid != QUERY_OID)
1411 return NDIS_STATUS_NOT_ACCEPTED;
1413 _rtw_memcpy(poid_par_priv->information_buf, (unsigned char*)&Adapter->mppriv.rxstat, sizeof(struct recv_stat));
1414 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1423 //------------------------------------------------------------------------------
1424 NDIS_STATUS oid_rt_pro_cfg_debug_message_hdl(struct oid_par_priv *poid_par_priv)
1427 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1429 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1431 PCFG_DBG_MSG_STRUCT pdbg_msg;
1435 // RT_TRACE(0xffffffffff,_drv_alert_,("===> oid_rt_pro_cfg_debug_message_hdl.\n"));
1437 #if 0//#ifdef CONFIG_DEBUG_RTL871X
1439 pdbg_msg = (PCFG_DBG_MSG_STRUCT)(poid_par_priv->information_buf);
1441 if (poid_par_priv->type_of_oid == SET_OID) {
1442 RT_TRACE(0xffffffffff, _drv_alert_,
1443 ("===>Set level :0x%08x, H32:0x%08x L32:0x%08x\n",
1444 pdbg_msg->DebugLevel, pdbg_msg->DebugComponent_H32, pdbg_msg->DebugComponent_L32));
1446 GlobalDebugLevel = pdbg_msg->DebugLevel;
1447 GlobalDebugComponents = (pdbg_msg->DebugComponent_H32 << 32) | pdbg_msg->DebugComponent_L32;
1448 RT_TRACE(0xffffffffff, _drv_alert_,
1449 ("===> Set level :0x%08x, component:0x%016x\n",
1450 GlobalDebugLevel, (u32)GlobalDebugComponents));
1452 pdbg_msg->DebugLevel = GlobalDebugLevel;
1453 pdbg_msg->DebugComponent_H32 = (u32)(GlobalDebugComponents >> 32);
1454 pdbg_msg->DebugComponent_L32 = (u32)GlobalDebugComponents;
1455 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1457 RT_TRACE(0xffffffffff, _drv_alert_,
1458 ("===>Query level:0x%08x H32:0x%08x L32:0x%08x\n",
1459 (u32)pdbg_msg->DebugLevel, (u32)pdbg_msg->DebugComponent_H32, (u32)pdbg_msg->DebugComponent_L32));
1471 //------------------------------------------------------------------------------
1472 NDIS_STATUS oid_rt_pro_set_data_rate_ex_hdl(struct oid_par_priv *poid_par_priv)
1474 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1476 #ifdef PLATFORM_OS_XP
1479 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1483 RT_TRACE(_module_mp_, _drv_notice_, ("+OID_RT_PRO_SET_DATA_RATE_EX\n"));
1485 if (poid_par_priv->type_of_oid != SET_OID)
1486 return NDIS_STATUS_NOT_ACCEPTED;
1488 _irqlevel_changed_(&oldirql, LOWER);
1490 if (rtw_setdatarate_cmd(Adapter, poid_par_priv->information_buf) !=_SUCCESS)
1491 status = NDIS_STATUS_NOT_ACCEPTED;
1493 _irqlevel_changed_(&oldirql, RAISE);
1499 //-----------------------------------------------------------------------------
1500 NDIS_STATUS oid_rt_get_thermal_meter_hdl(struct oid_par_priv *poid_par_priv)
1502 #ifdef PLATFORM_OS_XP
1505 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1507 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1511 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_get_thermal_meter_hdl\n"));
1513 if (poid_par_priv->type_of_oid != QUERY_OID)
1514 return NDIS_STATUS_NOT_ACCEPTED;
1516 if (poid_par_priv->information_buf_len < sizeof(u32))
1517 return NDIS_STATUS_INVALID_LENGTH;
1519 _irqlevel_changed_(&oldirql, LOWER);
1520 GetThermalMeter(Adapter, &thermal);
1521 _irqlevel_changed_(&oldirql, RAISE);
1523 *(u32*)poid_par_priv->information_buf = (u32)thermal;
1524 *poid_par_priv->bytes_rw = sizeof(u32);
1530 //-----------------------------------------------------------------------------
1531 NDIS_STATUS oid_rt_pro_read_tssi_hdl(struct oid_par_priv *poid_par_priv)
1534 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1536 #ifdef PLATFORM_OS_XP
1539 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1543 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_read_tssi_hdl\n"));
1545 if (poid_par_priv->type_of_oid != SET_OID)
1546 return NDIS_STATUS_NOT_ACCEPTED;
1548 if (Adapter->mppriv.act_in_progress == _TRUE)
1549 return NDIS_STATUS_NOT_ACCEPTED;
1551 if (poid_par_priv->information_buf_len < sizeof(u8))
1552 return NDIS_STATUS_INVALID_LENGTH;
1555 Adapter->mppriv.act_in_progress = _TRUE;
1556 Adapter->mppriv.workparam.bcompleted = _FALSE;
1557 Adapter->mppriv.workparam.act_type = MPT_READ_TSSI;
1558 Adapter->mppriv.workparam.io_offset = 0;
1559 Adapter->mppriv.workparam.io_value = 0xFFFFFFFF;
1561 _irqlevel_changed_(&oldirql, LOWER);
1563 if (!rtw_gettssi_cmd(Adapter,0, (u8*)&Adapter->mppriv.workparam.io_value))
1564 status = NDIS_STATUS_NOT_ACCEPTED;
1566 _irqlevel_changed_(&oldirql, RAISE);
1575 //------------------------------------------------------------------------------
1576 NDIS_STATUS oid_rt_pro_set_power_tracking_hdl(struct oid_par_priv *poid_par_priv)
1578 #ifdef PLATFORM_OS_XP
1581 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1582 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1587 // if (poid_par_priv->type_of_oid != SET_OID)
1588 // return NDIS_STATUS_NOT_ACCEPTED;
1590 if (poid_par_priv->information_buf_len < sizeof(u8))
1591 return NDIS_STATUS_INVALID_LENGTH;
1593 _irqlevel_changed_(&oldirql, LOWER);
1594 if (poid_par_priv->type_of_oid == SET_OID) {
1597 enable = *(u8*)poid_par_priv->information_buf;
1598 RT_TRACE(_module_mp_, _drv_notice_,
1599 ("+oid_rt_pro_set_power_tracking_hdl: enable=%d\n", enable));
1601 SetPowerTracking(Adapter, enable);
1603 GetPowerTracking(Adapter, (u8*)poid_par_priv->information_buf);
1605 _irqlevel_changed_(&oldirql, RAISE);
1611 //-----------------------------------------------------------------------------
1612 NDIS_STATUS oid_rt_pro_set_basic_rate_hdl(struct oid_par_priv *poid_par_priv)
1615 #ifdef PLATFORM_OS_XP
1619 u8 datarates[NumRates];
1621 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1622 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
1626 RT_TRACE(_module_mp_, _drv_info_, ("+OID_RT_PRO_SET_BASIC_RATE\n"));
1628 if (poid_par_priv->type_of_oid != SET_OID)
1629 return NDIS_STATUS_NOT_ACCEPTED;
1631 ratevalue = *((u32*)poid_par_priv->information_buf);
1633 for (i = 0; i < NumRates; i++) {
1634 if (ratevalue == mpdatarate[i])
1635 datarates[i] = mpdatarate[i];
1637 datarates[i] = 0xff;
1638 RT_TRACE(_module_rtl871x_ioctl_c_, _drv_info_, ("basicrate_inx=%d\n", datarates[i]));
1641 _irqlevel_changed_(&oldirql, LOWER);
1643 if (rtw_setbasicrate_cmd(padapter, datarates) != _SUCCESS)
1644 status = NDIS_STATUS_NOT_ACCEPTED;
1646 _irqlevel_changed_(&oldirql, RAISE);
1648 RT_TRACE(_module_mp_, _drv_notice_,
1649 ("-OID_RT_PRO_SET_BASIC_RATE: status=0x%08X\n", status));
1658 //------------------------------------------------------------------------------
1659 NDIS_STATUS oid_rt_pro_qry_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
1662 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1664 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1668 if (poid_par_priv->type_of_oid != QUERY_OID)
1669 return NDIS_STATUS_NOT_ACCEPTED;
1671 if (poid_par_priv->information_buf_len < 8)
1672 return NDIS_STATUS_INVALID_LENGTH;
1674 *poid_par_priv->bytes_rw = 8;
1675 _rtw_memcpy(poid_par_priv->information_buf, &(adapter_to_pwrctl(Adapter)->pwr_mode), 8);
1676 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1678 RT_TRACE(_module_mp_, _drv_notice_,
1679 ("-oid_rt_pro_qry_pwrstate_hdl: pwr_mode=%d smart_ps=%d\n",
1680 adapter_to_pwrctl(Adapter)->pwr_mode, adapter_to_pwrctl(Adapter)->smart_ps));
1689 //------------------------------------------------------------------------------
1690 NDIS_STATUS oid_rt_pro_set_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
1693 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1695 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1697 uint pwr_mode, smart_ps;
1701 RT_TRACE(_module_mp_, _drv_notice_, ("+Set OID_RT_PRO_SET_PWRSTATE\n"));
1703 if (poid_par_priv->type_of_oid != SET_OID)
1704 return NDIS_STATUS_NOT_ACCEPTED;
1706 *poid_par_priv->bytes_rw = 0;
1707 *poid_par_priv->bytes_needed = 8;
1709 if (poid_par_priv->information_buf_len < 8)
1710 return NDIS_STATUS_INVALID_LENGTH;
1712 pwr_mode = *(uint *)(poid_par_priv->information_buf);
1713 smart_ps = *(uint *)((int)poid_par_priv->information_buf + 4);
1715 *poid_par_priv->bytes_rw = 8;
1724 //------------------------------------------------------------------------------
1725 NDIS_STATUS oid_rt_pro_h2c_set_rate_table_hdl(struct oid_par_priv *poid_par_priv)
1728 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1730 #ifdef PLATFORM_OS_XP
1733 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1735 struct setratable_parm *prate_table;
1740 if (poid_par_priv->type_of_oid != SET_OID)
1741 return NDIS_STATUS_NOT_ACCEPTED;
1743 *poid_par_priv->bytes_needed = sizeof(struct setratable_parm);
1744 if (poid_par_priv->information_buf_len < sizeof(struct setratable_parm))
1745 return NDIS_STATUS_INVALID_LENGTH;
1747 prate_table = (struct setratable_parm*)poid_par_priv->information_buf;
1749 _irqlevel_changed_(&oldirql, LOWER);
1750 res = rtw_setrttbl_cmd(Adapter, prate_table);
1751 _irqlevel_changed_(&oldirql, RAISE);
1754 status = NDIS_STATUS_FAILURE;
1763 //------------------------------------------------------------------------------
1764 NDIS_STATUS oid_rt_pro_h2c_get_rate_table_hdl(struct oid_par_priv *poid_par_priv)
1767 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1769 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1773 if (poid_par_priv->type_of_oid != QUERY_OID)
1774 return NDIS_STATUS_NOT_ACCEPTED;
1777 struct mp_wi_cntx *pmp_wi_cntx=&(Adapter->mppriv.wi_cntx);
1779 DEBUG_INFO(("===> Set OID_RT_PRO_H2C_GET_RATE_TABLE.\n"));
1781 if(pmp_wi_cntx->bmp_wi_progress ==_TRUE){
1782 DEBUG_ERR(("\n mp workitem is progressing, not allow to set another workitem right now!!!\n"));
1783 Status = NDIS_STATUS_NOT_ACCEPTED;
1787 pmp_wi_cntx->bmp_wi_progress=_TRUE;
1788 pmp_wi_cntx->param.bcompleted=_FALSE;
1789 pmp_wi_cntx->param.act_type=MPT_GET_RATE_TABLE;
1790 pmp_wi_cntx->param.io_offset=0x0;
1791 pmp_wi_cntx->param.bytes_cnt=sizeof(struct getratable_rsp);
1792 pmp_wi_cntx->param.io_value=0xffffffff;
1794 res=rtw_getrttbl_cmd(Adapter,(struct getratable_rsp *)pmp_wi_cntx->param.data);
1795 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1798 Status = NDIS_STATUS_NOT_ACCEPTED;
1801 DEBUG_INFO(("\n <=== Set OID_RT_PRO_H2C_GET_RATE_TABLE.\n"));
1812 //**************** oid_rtl_seg_87_12_00 section start ****************
1813 NDIS_STATUS oid_rt_pro_encryption_ctrl_hdl(struct oid_par_priv *poid_par_priv)
1816 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1817 struct security_priv *psecuritypriv = &Adapter->securitypriv;
1819 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1821 ENCRY_CTRL_STATE encry_mode;
1824 *poid_par_priv->bytes_needed = sizeof(u8);
1825 if (poid_par_priv->information_buf_len < *poid_par_priv->bytes_needed)
1826 return NDIS_STATUS_INVALID_LENGTH;
1828 if (poid_par_priv->type_of_oid == SET_OID)
1830 encry_mode = *((u8*)poid_par_priv->information_buf);
1835 Adapter->registrypriv.software_decrypt=_FALSE;
1836 Adapter->registrypriv.software_encrypt=_FALSE;
1838 psecuritypriv->sw_decrypt = _FALSE;
1839 psecuritypriv->sw_encrypt = _FALSE;
1844 Adapter->registrypriv.software_decrypt=_TRUE;
1845 Adapter->registrypriv.software_encrypt=_TRUE;
1847 psecuritypriv->sw_decrypt = _TRUE;
1848 psecuritypriv->sw_encrypt = _TRUE;
1851 case HW_ENCRY_SW_DECRY:
1853 Adapter->registrypriv.software_decrypt=_TRUE;
1854 Adapter->registrypriv.software_encrypt=_FALSE;
1856 psecuritypriv->sw_decrypt = _TRUE;
1857 psecuritypriv->sw_encrypt = _FALSE;
1860 case SW_ENCRY_HW_DECRY:
1862 Adapter->registrypriv.software_decrypt=_FALSE;
1863 Adapter->registrypriv.software_encrypt=_TRUE;
1865 psecuritypriv->sw_decrypt = _FALSE;
1866 psecuritypriv->sw_encrypt = _TRUE;
1871 RT_TRACE(_module_rtl871x_ioctl_c_, _drv_notice_,
1872 ("-oid_rt_pro_encryption_ctrl_hdl: SET encry_mode=0x%x sw_encrypt=0x%x sw_decrypt=0x%x\n",
1873 encry_mode, psecuritypriv->sw_encrypt, psecuritypriv->sw_decrypt));
1877 if (Adapter->registrypriv.software_encrypt == _FALSE) {
1878 if (Adapter->registrypriv.software_decrypt == _FALSE)
1879 encry_mode = HW_CONTROL;
1881 encry_mode = HW_ENCRY_SW_DECRY;
1884 if (Adapter->registrypriv.software_decrypt == _FALSE)
1885 encry_mode = SW_ENCRY_HW_DECRY;
1887 encry_mode = SW_CONTROL;
1891 if ((psecuritypriv->sw_encrypt == _FALSE) && (psecuritypriv->sw_decrypt == _FALSE))
1892 encry_mode = HW_CONTROL;
1893 else if ((psecuritypriv->sw_encrypt == _FALSE) && (psecuritypriv->sw_decrypt == _TRUE))
1894 encry_mode = HW_ENCRY_SW_DECRY;
1895 else if ((psecuritypriv->sw_encrypt == _TRUE) && (psecuritypriv->sw_decrypt == _FALSE))
1896 encry_mode = SW_ENCRY_HW_DECRY;
1897 else if ((psecuritypriv->sw_encrypt == _TRUE) && (psecuritypriv->sw_decrypt == _TRUE))
1898 encry_mode = SW_CONTROL;
1902 *(u8*)poid_par_priv->information_buf = encry_mode;
1903 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1905 RT_TRACE(_module_mp_, _drv_notice_,
1906 ("-oid_rt_pro_encryption_ctrl_hdl: QUERY encry_mode=0x%x\n",
1915 //------------------------------------------------------------------------------
1916 NDIS_STATUS oid_rt_pro_add_sta_info_hdl(struct oid_par_priv *poid_par_priv)
1919 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1921 #ifdef PLATFORM_OS_XP
1924 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1926 struct sta_info *psta = NULL;
1930 if (poid_par_priv->type_of_oid != SET_OID)
1931 return NDIS_STATUS_NOT_ACCEPTED;
1933 *poid_par_priv->bytes_needed = ETH_ALEN;
1934 if (poid_par_priv->information_buf_len < *poid_par_priv->bytes_needed)
1935 return NDIS_STATUS_INVALID_LENGTH;
1937 macaddr = (UCHAR *) poid_par_priv->information_buf ;
1939 RT_TRACE(_module_rtl871x_ioctl_c_,_drv_notice_,
1940 ("OID_RT_PRO_ADD_STA_INFO: addr="MAC_FMT"\n", MAC_ARG(macaddr) ));
1942 _irqlevel_changed_(&oldirql, LOWER);
1944 psta = rtw_get_stainfo(&Adapter->stapriv, macaddr);
1946 if (psta == NULL) { // the sta have been in sta_info_queue => do nothing
1947 psta = rtw_alloc_stainfo(&Adapter->stapriv, macaddr);
1950 RT_TRACE(_module_rtl871x_ioctl_c_,_drv_err_,("Can't alloc sta_info when OID_RT_PRO_ADD_STA_INFO\n"));
1951 status = NDIS_STATUS_FAILURE;
1953 } else { //(between drv has received this event before and fw have not yet to set key to CAM_ENTRY)
1954 RT_TRACE(_module_rtl871x_ioctl_c_, _drv_err_,
1955 ("Error: OID_RT_PRO_ADD_STA_INFO: sta has been in sta_hash_queue \n"));
1958 _irqlevel_changed_(&oldirql, RAISE);
1965 //------------------------------------------------------------------------------
1966 NDIS_STATUS oid_rt_pro_dele_sta_info_hdl(struct oid_par_priv *poid_par_priv)
1969 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1971 #ifdef PLATFORM_OS_XP
1974 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1976 struct sta_info *psta = NULL;
1980 if (poid_par_priv->type_of_oid != SET_OID)
1981 return NDIS_STATUS_NOT_ACCEPTED;
1983 *poid_par_priv->bytes_needed = ETH_ALEN;
1984 if (poid_par_priv->information_buf_len < *poid_par_priv->bytes_needed)
1985 return NDIS_STATUS_INVALID_LENGTH;
1987 macaddr = (UCHAR *) poid_par_priv->information_buf ;
1988 RT_TRACE(_module_rtl871x_ioctl_c_,_drv_notice_,
1989 ("+OID_RT_PRO_ADD_STA_INFO: addr="MAC_FMT"\n", MAC_ARG(macaddr) ));
1991 psta = rtw_get_stainfo(&Adapter->stapriv, macaddr);
1993 //_enter_critical(&(Adapter->stapriv.sta_hash_lock), &irqL);
1994 rtw_free_stainfo(Adapter, psta);
1995 //_exit_critical(&(Adapter->stapriv.sta_hash_lock), &irqL);
2003 //------------------------------------------------------------------------------
2005 static u32 mp_query_drv_var(_adapter *padapter, u8 offset, u32 var)
2007 #ifdef CONFIG_SDIO_HCI
2011 tmp_blk_num = rtw_read16(padapter, SDIO_RX0_RDYBLK_NUM);
2012 RT_TRACE(_module_mp_, _drv_err_, ("Query Information, mp_query_drv_var SDIO_RX0_RDYBLK_NUM=0x%x dvobj.rxblknum=0x%x\n", tmp_blk_num, adapter_to_dvobj(padapter)->rxblknum));
2013 if (adapter_to_dvobj(padapter)->rxblknum != tmp_blk_num) {
2014 RT_TRACE(_module_mp_,_drv_err_, ("Query Information, mp_query_drv_var call recv rx\n"));
2015 // sd_recv_rxfifo(padapter);
2020 if(offset <=100){ //For setting data rate and query data rate
2021 if(offset==100){ //For query data rate
2022 RT_TRACE(_module_mp_, _drv_emerg_, ("\n mp_query_drv_var: offset(%d): query rate=0x%.2x \n",offset,padapter->registrypriv.tx_rate));
2023 var=padapter->registrypriv.tx_rate;
2026 else if(offset<0x1d){ //For setting data rate
2027 padapter->registrypriv.tx_rate=offset;
2028 var=padapter->registrypriv.tx_rate;
2029 padapter->registrypriv.use_rate=_TRUE;
2030 RT_TRACE(_module_mp_, _drv_emerg_, ("\n mp_query_drv_var: offset(%d): set rate=0x%.2x \n",offset,padapter->registrypriv.tx_rate));
2032 else{ //not use the data rate
2033 padapter->registrypriv.use_rate=_FALSE;
2034 RT_TRACE(_module_mp_, _drv_emerg_, ("\n mp_query_drv_var: offset(%d) out of rate range\n",offset));
2037 else if (offset<=110){ //for setting debug level
2038 RT_TRACE(_module_mp_, _drv_emerg_, (" mp_query_drv_var: offset(%d) for set debug level\n",offset));
2039 if(offset==110){ //For query data rate
2040 RT_TRACE(_module_mp_, _drv_emerg_, (" mp_query_drv_var: offset(%d): query dbg level=0x%.2x \n",offset,padapter->registrypriv.dbg_level));
2041 padapter->registrypriv.dbg_level=GlobalDebugLevel;
2042 var=padapter->registrypriv.dbg_level;
2044 else if(offset<110 && offset>100){
2045 RT_TRACE(_module_mp_, _drv_emerg_, (" mp_query_drv_var: offset(%d): set dbg level=0x%.2x \n",offset,offset-100));
2046 padapter->registrypriv.dbg_level=GlobalDebugLevel=offset-100;
2047 var=padapter->registrypriv.dbg_level;
2048 RT_TRACE(_module_mp_, _drv_emerg_, (" mp_query_drv_var(_drv_emerg_): offset(%d): set dbg level=0x%.2x \n",offset,GlobalDebugLevel));
2049 RT_TRACE(_module_mp_, _drv_alert_, (" mp_query_drv_var(_drv_alert_): offset(%d): set dbg level=0x%.2x \n",offset,GlobalDebugLevel));
2050 RT_TRACE(_module_mp_, _drv_crit_, (" mp_query_drv_var(_drv_crit_): offset(%d): set dbg level=0x%.2x \n",offset,GlobalDebugLevel));
2051 RT_TRACE(_module_mp_, _drv_err_, (" mp_query_drv_var(_drv_err_): offset(%d): set dbg level=0x%.2x \n",offset,GlobalDebugLevel));
2052 RT_TRACE(_module_mp_, _drv_warning_, (" mp_query_drv_var(_drv_warning_): offset(%d): set dbg level=0x%.2x \n",offset,GlobalDebugLevel));
2053 RT_TRACE(_module_mp_, _drv_notice_, (" mp_query_drv_var(_drv_notice_): offset(%d): set dbg level=0x%.2x \n",offset,GlobalDebugLevel));
2054 RT_TRACE(_module_mp_, _drv_info_, (" mp_query_drv_var(_drv_info_): offset(%d): set dbg level=0x%.2x \n",offset,GlobalDebugLevel));
2055 RT_TRACE(_module_mp_, _drv_debug_, (" mp_query_drv_var(_drv_debug_): offset(%d): set dbg level=0x%.2x \n",offset,GlobalDebugLevel));
2059 else if(offset >110 &&offset <116){
2061 RT_TRACE(_module_mp_, _drv_emerg_, (" mp_query_drv_var(_drv_emerg_): offset(%d): query TRX access type: [tx_block_mode=%x,rx_block_mode=%x]\n",\
2062 offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
2067 adapter_to_dvobj(padapter)->tx_block_mode=1;
2068 adapter_to_dvobj(padapter)->rx_block_mode=1;
2069 RT_TRACE(_module_mp_, _drv_emerg_, \
2070 (" mp_query_drv_var(_drv_emerg_): offset(%d): SET TRX access type:(TX block/RX block) [tx_block_mode=%x,rx_block_mode=%x]\n",\
2071 offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
2074 adapter_to_dvobj(padapter)->tx_block_mode=1;
2075 adapter_to_dvobj(padapter)->rx_block_mode=0;
2076 RT_TRACE(_module_mp_, _drv_emerg_, \
2077 (" mp_query_drv_var(_drv_emerg_): offset(%d): SET TRX access type:(TX block/RX byte) [tx_block_mode=%x,rx_block_mode=%x]\n",\
2078 offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
2081 adapter_to_dvobj(padapter)->tx_block_mode=0;
2082 adapter_to_dvobj(padapter)->rx_block_mode=1;
2083 RT_TRACE(_module_mp_, _drv_emerg_, \
2084 (" mp_query_drv_var(_drv_emerg_): offset(%d): SET TRX access type:(TX byte/RX block) [tx_block_mode=%x,rx_block_mode=%x]\n",\
2085 offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
2088 adapter_to_dvobj(padapter)->tx_block_mode=0;
2089 adapter_to_dvobj(padapter)->rx_block_mode=0;
2090 RT_TRACE(_module_mp_, _drv_emerg_, \
2091 (" mp_query_drv_var(_drv_emerg_): offset(%d): SET TRX access type:(TX byte/RX byte) [tx_block_mode=%x,rx_block_mode=%x]\n",\
2092 offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
2102 else if(offset>=127){
2106 chg_idx=offset-0x80;
2107 tmp_dbg_comp=BIT(chg_idx);
2108 prnt_dbg_comp=padapter->registrypriv.dbg_component= GlobalDebugComponents;
2109 RT_TRACE(_module_mp_, _drv_emerg_, (" 1: mp_query_drv_var: offset(%d;0x%x):for dbg conpoment prnt_dbg_comp=0x%.16x GlobalDebugComponents=0x%.16x padapter->registrypriv.dbg_component=0x%.16x\n",offset,offset,prnt_dbg_comp,GlobalDebugComponents,padapter->registrypriv.dbg_component));
2111 // prnt_dbg_comp=padapter->registrypriv.dbg_component= GlobalDebugComponents;
2112 var=(u32)(padapter->registrypriv.dbg_component);
2113 RT_TRACE(0xffffffff, _drv_emerg_, ("2: mp_query_drv_var: offset(%d;0x%x):for query dbg conpoment=0x%x(l) 0x%x(h) GlobalDebugComponents=0x%x(l) 0x%x(h) \n",offset,offset,padapter->registrypriv.dbg_component,prnt_dbg_comp));
2114 prnt_dbg_comp=GlobalDebugComponents;
2115 RT_TRACE(0xffffffff, _drv_emerg_, ("2-1: mp_query_drv_var: offset(%d;0x%x):for query dbg conpoment=0x%x(l) 0x%x(h) GlobalDebugComponents=0x%x(l) 0x%x(h)\n",offset,offset,padapter->registrypriv.dbg_component,prnt_dbg_comp));
2116 prnt_dbg_comp=GlobalDebugComponents=padapter->registrypriv.dbg_component;
2117 RT_TRACE(0xffffffff, _drv_emerg_, ("2-2: mp_query_drv_var: offset(%d;0x%x):for query dbg conpoment=0x%x(l) 0x%x(h) GlobalDebugComponents=0x%x(l) 0x%x(h)\n",offset,offset,padapter->registrypriv.dbg_component,prnt_dbg_comp));
2121 RT_TRACE(0xffffffff, _drv_emerg_, ("3: mp_query_drv_var: offset(%d;0x%x):for query dbg conpoment=0x%x(l) 0x%x(h) GlobalDebugComponents=0x%x(l) 0x%x(h) chg_idx=%d\n",offset,offset,padapter->registrypriv.dbg_component,prnt_dbg_comp,chg_idx));
2122 prnt_dbg_comp=GlobalDebugComponents;
2123 RT_TRACE(0xffffffff, _drv_emerg_,("3-1: mp_query_drv_var: offset(%d;0x%x):for query dbg conpoment=0x%x(l) 0x%x(h) GlobalDebugComponents=0x%x(l) 0x%x(h) chg_idx=%d\n",offset,offset,padapter->registrypriv.dbg_component,prnt_dbg_comp,chg_idx));// ("3-1: mp_query_drv_var: offset(%d;0x%x):before set dbg conpoment=0x%x chg_idx=%d or0x%x BIT(chg_idx[%d]=0x%x)\n",offset,offset,prnt_dbg_comp,chg_idx,chg_idx,(chg_idx),tmp_dbg_comp)
2124 prnt_dbg_comp=GlobalDebugComponents=padapter->registrypriv.dbg_component;
2125 RT_TRACE(0xffffffff, _drv_emerg_, ("3-2: mp_query_drv_var: offset(%d;0x%x):for query dbg conpoment=0x%x(l) 0x%x(h) GlobalDebugComponents=0x%x(l) 0x%x(h)\n",offset,offset,padapter->registrypriv.dbg_component,prnt_dbg_comp));
2127 if(GlobalDebugComponents&tmp_dbg_comp){
2128 //this bit is already set, now clear it
2129 GlobalDebugComponents=GlobalDebugComponents&(~tmp_dbg_comp);
2132 //this bit is not set, now set it.
2133 GlobalDebugComponents =GlobalDebugComponents|tmp_dbg_comp;
2135 RT_TRACE(0xffffffff, _drv_emerg_, ("4: mp_query_drv_var: offset(%d;0x%x):before set dbg conpoment tmp_dbg_comp=0x%x GlobalDebugComponents=0x%x(l) 0x%x(h)",offset,offset,tmp_dbg_comp,prnt_dbg_comp));
2136 prnt_dbg_comp=GlobalDebugComponents;
2137 RT_TRACE(0xffffffff, _drv_emerg_, ("4-1: mp_query_drv_var: offset(%d;0x%x):before set dbg conpoment tmp_dbg_comp=0x%x GlobalDebugComponents=0x%x(l) 0x%x(h)",offset,offset,tmp_dbg_comp,prnt_dbg_comp));
2139 RT_TRACE(_module_rtl871x_xmit_c_, _drv_emerg_, ("0: mp_query_drv_var(_module_rtl871x_xmit_c_:0): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,prnt_dbg_comp));
2140 RT_TRACE(_module_xmit_osdep_c_, _drv_emerg_, ("1: mp_query_drv_var(_module_xmit_osdep_c_:1): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2141 RT_TRACE(_module_rtl871x_recv_c_, _drv_emerg_, ("2: mp_query_drv_var(_module_rtl871x_recv_c_:2): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2142 RT_TRACE(_module_recv_osdep_c_, _drv_emerg_, ("3: mp_query_drv_var(_module_recv_osdep_c_:3): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2143 RT_TRACE(_module_rtl871x_mlme_c_, _drv_emerg_, ("4: mp_query_drv_var(_module_rtl871x_mlme_c_:4): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2144 RT_TRACE(_module_mlme_osdep_c_, _drv_emerg_, (" 5:mp_query_drv_var(_module_mlme_osdep_c_:5): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2145 RT_TRACE(_module_rtl871x_sta_mgt_c_, _drv_emerg_, ("6: mp_query_drv_var(_module_rtl871x_sta_mgt_c_:6): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2146 RT_TRACE(_module_rtl871x_cmd_c_, _drv_emerg_, ("7: mp_query_drv_var(_module_rtl871x_cmd_c_:7): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2147 RT_TRACE(_module_cmd_osdep_c_, _drv_emerg_, ("8: mp_query_drv_var(_module_cmd_osdep_c_:8): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2148 RT_TRACE(_module_rtl871x_io_c_, _drv_emerg_, ("9: mp_query_drv_var(_module_rtl871x_io_c_:9): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2149 RT_TRACE(_module_io_osdep_c_, _drv_emerg_, ("10: mp_query_drv_var(_module_io_osdep_c_:10): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2150 RT_TRACE(_module_os_intfs_c_, _drv_emerg_, ("11: mp_query_drv_var(_module_os_intfs_c_:11): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2151 RT_TRACE(_module_rtl871x_security_c_, _drv_emerg_, ("12: mp_query_drv_var(_module_rtl871x_security_c_:12): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2152 RT_TRACE(_module_rtl871x_eeprom_c_, _drv_emerg_, ("13: mp_query_drv_var(_module_rtl871x_eeprom_c_:13): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2153 RT_TRACE(_module_hal_init_c_, _drv_emerg_, ("14: mp_query_drv_var(_module_hal_init_c_:14): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2154 RT_TRACE(_module_hci_hal_init_c_, _drv_emerg_, ("15: mp_query_drv_var(_module_hci_hal_init_c_:15): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2155 RT_TRACE(_module_rtl871x_ioctl_c_, _drv_emerg_, ("16: mp_query_drv_var(_module_rtl871x_ioctl_c_:16): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2156 RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_emerg_, ("17: mp_query_drv_var(_module_rtl871x_ioctl_set_c_:17): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2157 RT_TRACE(_module_rtl871x_ioctl_query_c_, _drv_emerg_, ("18: mp_query_drv_var(_module_rtl871x_ioctl_query_c_:18): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2158 RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_emerg_, ("19: mp_query_drv_var(_module_rtl871x_pwrctrl_c_:19): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2159 RT_TRACE(_module_hci_intfs_c_, _drv_emerg_, ("20: mp_query_drv_var(_module_hci_intfs_c_:20): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2160 RT_TRACE(_module_hci_ops_c_, _drv_emerg_, ("21: mp_query_drv_var(_module_hci_ops_c_:21): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2161 RT_TRACE(_module_osdep_service_c_, _drv_emerg_, ("22: mp_query_drv_var(_module_osdep_service_c_:22): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2162 RT_TRACE(_module_mp_, _drv_emerg_, ("23: mp_query_drv_var(_module_mp_:23): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2163 RT_TRACE(_module_hci_ops_os_c_, _drv_emerg_, ("24: mp_query_drv_var(_module_hci_ops_os_c_:24): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2164 var=(u32)(GlobalDebugComponents);
2165 //GlobalDebugComponents=padapter->registrypriv.dbg_component;
2166 RT_TRACE(0xffffffff, _drv_emerg_, (" ==mp_query_drv_var(_module_mp_): offset(%d;0x%x):before set dbg conpoment=0x%x(l) 0x%x(h)\n",offset,offset,GlobalDebugComponents));
2171 RT_TRACE(_module_mp_, _drv_emerg_, ("\n mp_query_drv_var: offset(%d) >110\n",offset));
2180 NDIS_STATUS oid_rt_pro_query_dr_variable_hdl(struct oid_par_priv *poid_par_priv)
2183 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2185 #ifdef PLATFORM_OS_XP
2188 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2190 DR_VARIABLE_STRUCT *pdrv_var;
2193 if (poid_par_priv->type_of_oid != QUERY_OID)
2194 return NDIS_STATUS_NOT_ACCEPTED;
2196 *poid_par_priv->bytes_needed = sizeof(DR_VARIABLE_STRUCT);
2197 if (poid_par_priv->information_buf_len < *poid_par_priv->bytes_needed)
2198 return NDIS_STATUS_INVALID_LENGTH;
2200 RT_TRACE(_module_mp_, _drv_notice_, ("+Query Information, OID_RT_PRO_QUERY_DR_VARIABLE\n"));
2202 pdrv_var = (struct _DR_VARIABLE_STRUCT_ *)poid_par_priv->information_buf;
2204 _irqlevel_changed_(&oldirql, LOWER);
2205 pdrv_var->variable = mp_query_drv_var(Adapter, pdrv_var->offset, pdrv_var->variable);
2206 _irqlevel_changed_(&oldirql, RAISE);
2208 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2210 RT_TRACE(_module_mp_, _drv_notice_,
2211 ("-oid_rt_pro_query_dr_variable_hdl: offset=0x%x valule=0x%x\n",
2212 pdrv_var->offset, pdrv_var->variable));
2219 //------------------------------------------------------------------------------
2220 NDIS_STATUS oid_rt_pro_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
2223 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2225 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2227 RT_TRACE(_module_mp_, _drv_err_, ("oid_rt_pro_rx_packet_type_hdl...................\n"));
2229 if (poid_par_priv->information_buf_len < sizeof (UCHAR)) {
2230 status = NDIS_STATUS_INVALID_LENGTH;
2231 *poid_par_priv->bytes_needed = sizeof(UCHAR);
2235 if (poid_par_priv->type_of_oid == SET_OID) {
2236 Adapter->mppriv.rx_with_status = *(UCHAR *) poid_par_priv->information_buf;
2237 RT_TRACE(_module_rtl871x_ioctl_c_,_drv_err_, ("Query Information, OID_RT_PRO_RX_PACKET_TYPE:%d \n",\
2238 Adapter->mppriv.rx_with_status));
2240 //*(u32 *)&Adapter->eeprompriv.mac_addr[0]=rtw_read32(Adapter, 0x10250050);
2241 //*(u16 *)&Adapter->eeprompriv.mac_addr[4]=rtw_read16(Adapter, 0x10250054);
2242 RT_TRACE(_module_rtl871x_ioctl_c_,_drv_err_,("MAC addr=0x%x:0x%x:0x%x:0x%x:0x%x:0x%x \n",
2243 Adapter->eeprompriv.mac_addr[0],Adapter->eeprompriv.mac_addr[1],Adapter->eeprompriv.mac_addr[2],\
2244 Adapter->eeprompriv.mac_addr[3],Adapter->eeprompriv.mac_addr[4],Adapter->eeprompriv.mac_addr[5]));
2248 *(UCHAR *) poid_par_priv->information_buf = Adapter->mppriv.rx_with_status;
2249 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2251 RT_TRACE(_module_rtl871x_ioctl_c_,_drv_err_, ("Query Information, OID_RT_PRO_RX_PACKET_TYPE:%d \n", \
2252 Adapter->mppriv.rx_with_status));
2254 //*(u32 *)&Adapter->eeprompriv.mac_addr[0]=rtw_read32(Adapter, 0x10250050);
2255 //*(u16 *)&Adapter->eeprompriv.mac_addr[4]=rtw_read16(Adapter, 0x10250054);
2256 RT_TRACE(_module_rtl871x_ioctl_c_,_drv_err_,("MAC addr=0x%x:0x%x:0x%x:0x%x:0x%x:0x%x \n",
2257 Adapter->eeprompriv.mac_addr[0],Adapter->eeprompriv.mac_addr[1],Adapter->eeprompriv.mac_addr[2],\
2258 Adapter->eeprompriv.mac_addr[3],Adapter->eeprompriv.mac_addr[4],Adapter->eeprompriv.mac_addr[5]));
2262 return NDIS_STATUS_SUCCESS;
2264 //------------------------------------------------------------------------------
2265 NDIS_STATUS oid_rt_pro_read_efuse_hdl(struct oid_par_priv *poid_par_priv)
2267 #ifdef PLATFORM_OS_XP
2270 PEFUSE_ACCESS_STRUCT pefuse;
2272 u16 addr = 0, cnts = 0, max_available_size = 0;
2273 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2274 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2278 if (poid_par_priv->type_of_oid != QUERY_OID)
2279 return NDIS_STATUS_NOT_ACCEPTED;
2281 if (poid_par_priv->information_buf_len < sizeof(EFUSE_ACCESS_STRUCT))
2282 return NDIS_STATUS_INVALID_LENGTH;
2284 pefuse = (PEFUSE_ACCESS_STRUCT)poid_par_priv->information_buf;
2285 addr = pefuse->start_addr;
2286 cnts = pefuse->cnts;
2287 data = pefuse->data;
2289 RT_TRACE(_module_mp_, _drv_notice_,
2290 ("+oid_rt_pro_read_efuse_hd: buf_len=%d addr=%d cnts=%d\n",
2291 poid_par_priv->information_buf_len, addr, cnts));
2293 EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
2295 if ((addr + cnts) > max_available_size) {
2296 RT_TRACE(_module_mp_, _drv_err_, ("!oid_rt_pro_read_efuse_hdl: parameter error!\n"));
2297 return NDIS_STATUS_NOT_ACCEPTED;
2300 _irqlevel_changed_(&oldirql, LOWER);
2301 if (rtw_efuse_access(Adapter, _FALSE, addr, cnts, data) == _FAIL) {
2302 RT_TRACE(_module_mp_, _drv_err_, ("!oid_rt_pro_read_efuse_hdl: rtw_efuse_access FAIL!\n"));
2303 status = NDIS_STATUS_FAILURE;
2305 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2306 _irqlevel_changed_(&oldirql, RAISE);
2312 //------------------------------------------------------------------------------
2313 NDIS_STATUS oid_rt_pro_write_efuse_hdl(struct oid_par_priv *poid_par_priv)
2315 #ifdef PLATFORM_OS_XP
2318 PEFUSE_ACCESS_STRUCT pefuse;
2320 u16 addr = 0, cnts = 0, max_available_size = 0;
2321 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2322 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2327 if (poid_par_priv->type_of_oid != SET_OID)
2328 return NDIS_STATUS_NOT_ACCEPTED;
2330 pefuse = (PEFUSE_ACCESS_STRUCT)poid_par_priv->information_buf;
2331 addr = pefuse->start_addr;
2332 cnts = pefuse->cnts;
2333 data = pefuse->data;
2335 RT_TRACE(_module_mp_, _drv_notice_,
2336 ("+oid_rt_pro_write_efuse_hdl: buf_len=%d addr=0x%04x cnts=%d\n",
2337 poid_par_priv->information_buf_len, addr, cnts));
2339 EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
2341 if ((addr + cnts) > max_available_size) {
2342 RT_TRACE(_module_mp_, _drv_err_, ("!oid_rt_pro_write_efuse_hdl: parameter error"));
2343 return NDIS_STATUS_NOT_ACCEPTED;
2346 _irqlevel_changed_(&oldirql, LOWER);
2347 if (rtw_efuse_access(Adapter, _TRUE, addr, cnts, data) == _FAIL)
2348 status = NDIS_STATUS_FAILURE;
2349 _irqlevel_changed_(&oldirql, RAISE);
2355 //------------------------------------------------------------------------------
2356 NDIS_STATUS oid_rt_pro_rw_efuse_pgpkt_hdl(struct oid_par_priv *poid_par_priv)
2358 #ifdef PLATFORM_OS_XP
2361 PPGPKT_STRUCT ppgpkt;
2362 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2363 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2367 // RT_TRACE(_module_mp_, _drv_info_, ("+oid_rt_pro_rw_efuse_pgpkt_hdl\n"));
2369 *poid_par_priv->bytes_rw = 0;
2371 if (poid_par_priv->information_buf_len < sizeof(PGPKT_STRUCT))
2372 return NDIS_STATUS_INVALID_LENGTH;
2374 ppgpkt = (PPGPKT_STRUCT)poid_par_priv->information_buf;
2376 _irqlevel_changed_(&oldirql, LOWER);
2378 if (poid_par_priv->type_of_oid == QUERY_OID)
2380 RT_TRACE(_module_mp_, _drv_notice_,
2381 ("oid_rt_pro_rw_efuse_pgpkt_hdl: Read offset=0x%x\n",\
2384 Efuse_PowerSwitch(Adapter, _FALSE, _TRUE);
2385 if (Efuse_PgPacketRead(Adapter, ppgpkt->offset, ppgpkt->data, _FALSE) == _TRUE)
2386 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2388 status = NDIS_STATUS_FAILURE;
2389 Efuse_PowerSwitch(Adapter, _FALSE, _FALSE);
2391 RT_TRACE(_module_mp_, _drv_notice_,
2392 ("oid_rt_pro_rw_efuse_pgpkt_hdl: Write offset=0x%x word_en=0x%x\n",\
2393 ppgpkt->offset, ppgpkt->word_en));
2395 Efuse_PowerSwitch(Adapter, _TRUE, _TRUE);
2396 if (Efuse_PgPacketWrite(Adapter, ppgpkt->offset, ppgpkt->word_en, ppgpkt->data, _FALSE) == _TRUE)
2397 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2399 status = NDIS_STATUS_FAILURE;
2400 Efuse_PowerSwitch(Adapter, _TRUE, _FALSE);
2403 _irqlevel_changed_(&oldirql, RAISE);
2405 RT_TRACE(_module_mp_, _drv_info_,
2406 ("-oid_rt_pro_rw_efuse_pgpkt_hdl: status=0x%08X\n", status));
2412 //------------------------------------------------------------------------------
2413 NDIS_STATUS oid_rt_get_efuse_current_size_hdl(struct oid_par_priv *poid_par_priv)
2415 #ifdef PLATFORM_OS_XP
2420 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2421 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2425 if (poid_par_priv->type_of_oid != QUERY_OID)
2426 return NDIS_STATUS_NOT_ACCEPTED;
2428 if (poid_par_priv->information_buf_len <sizeof(u32))
2429 return NDIS_STATUS_INVALID_LENGTH;
2431 _irqlevel_changed_(&oldirql, LOWER);
2432 ret = efuse_GetCurrentSize(Adapter, &size);
2433 _irqlevel_changed_(&oldirql, RAISE);
2434 if (ret == _SUCCESS) {
2435 *(u32*)poid_par_priv->information_buf = size;
2436 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2438 status = NDIS_STATUS_FAILURE;
2444 //------------------------------------------------------------------------------
2445 NDIS_STATUS oid_rt_get_efuse_max_size_hdl(struct oid_par_priv *poid_par_priv)
2447 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2448 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2452 if (poid_par_priv->type_of_oid != QUERY_OID)
2453 return NDIS_STATUS_NOT_ACCEPTED;
2455 if (poid_par_priv->information_buf_len < sizeof(u32))
2456 return NDIS_STATUS_INVALID_LENGTH;
2458 *(u32*)poid_par_priv->information_buf = efuse_GetMaxSize(Adapter);
2459 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2461 RT_TRACE(_module_mp_, _drv_info_,
2462 ("-oid_rt_get_efuse_max_size_hdl: size=%d status=0x%08X\n",
2463 *(int*)poid_par_priv->information_buf, status));
2469 //------------------------------------------------------------------------------
2470 NDIS_STATUS oid_rt_pro_efuse_hdl(struct oid_par_priv *poid_par_priv)
2476 RT_TRACE(_module_mp_, _drv_info_, ("+oid_rt_pro_efuse_hdl\n"));
2478 if (poid_par_priv->type_of_oid == QUERY_OID)
2479 status = oid_rt_pro_read_efuse_hdl(poid_par_priv);
2481 status = oid_rt_pro_write_efuse_hdl(poid_par_priv);
2483 RT_TRACE(_module_mp_, _drv_info_, ("-oid_rt_pro_efuse_hdl: status=0x%08X\n", status));
2489 //------------------------------------------------------------------------------
2490 NDIS_STATUS oid_rt_pro_efuse_map_hdl(struct oid_par_priv *poid_par_priv)
2492 #ifdef PLATFORM_OS_XP
2496 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2497 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2502 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_efuse_map_hdl\n"));
2504 EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (PVOID)&mapLen, _FALSE);
2506 *poid_par_priv->bytes_rw = 0;
2508 if (poid_par_priv->information_buf_len < mapLen)
2509 return NDIS_STATUS_INVALID_LENGTH;
2511 data = (u8*)poid_par_priv->information_buf;
2513 _irqlevel_changed_(&oldirql, LOWER);
2515 if (poid_par_priv->type_of_oid == QUERY_OID)
2517 RT_TRACE(_module_mp_, _drv_info_,
2518 ("oid_rt_pro_efuse_map_hdl: READ\n"));
2520 if (rtw_efuse_map_read(Adapter, 0, mapLen, data) == _SUCCESS)
2521 *poid_par_priv->bytes_rw = mapLen;
2523 RT_TRACE(_module_mp_, _drv_err_,
2524 ("oid_rt_pro_efuse_map_hdl: READ fail\n"));
2525 status = NDIS_STATUS_FAILURE;
2529 RT_TRACE(_module_mp_, _drv_info_,
2530 ("oid_rt_pro_efuse_map_hdl: WRITE\n"));
2532 if (rtw_efuse_map_write(Adapter, 0, mapLen, data) == _SUCCESS)
2533 *poid_par_priv->bytes_rw = mapLen;
2535 RT_TRACE(_module_mp_, _drv_err_,
2536 ("oid_rt_pro_efuse_map_hdl: WRITE fail\n"));
2537 status = NDIS_STATUS_FAILURE;
2541 _irqlevel_changed_(&oldirql, RAISE);
2543 RT_TRACE(_module_mp_, _drv_info_,
2544 ("-oid_rt_pro_efuse_map_hdl: status=0x%08X\n", status));
2551 NDIS_STATUS oid_rt_set_crystal_cap_hdl(struct oid_par_priv *poid_par_priv)
2553 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2555 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2557 #ifdef PLATFORM_OS_XP
2561 u32 crystal_cap = 0;
2565 if (poid_par_priv->type_of_oid != SET_OID)
2566 return NDIS_STATUS_NOT_ACCEPTED;
2568 if (poid_par_priv->information_buf_len <sizeof(u32))
2569 return NDIS_STATUS_INVALID_LENGTH;
2571 crystal_cap = *((u32*)poid_par_priv->information_buf);//4
2572 if (crystal_cap > 0xf)
2573 return NDIS_STATUS_NOT_ACCEPTED;
2575 Adapter->mppriv.curr_crystalcap = crystal_cap;
2577 _irqlevel_changed_(&oldirql,LOWER);
2578 SetCrystalCap(Adapter);
2579 _irqlevel_changed_(&oldirql,RAISE);
2587 NDIS_STATUS oid_rt_set_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
2589 #ifdef PLATFORM_OS_XP
2594 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2595 // PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
2599 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_set_rx_packet_type_hdl\n"));
2601 if (poid_par_priv->type_of_oid != SET_OID)
2602 return NDIS_STATUS_NOT_ACCEPTED;
2604 if (poid_par_priv->information_buf_len < sizeof(u8))
2605 return NDIS_STATUS_INVALID_LENGTH;
2607 rx_pkt_type = *((u8*)poid_par_priv->information_buf);//4
2609 RT_TRACE(_module_mp_, _drv_info_, ("rx_pkt_type: %x\n",rx_pkt_type ));
2611 _irqlevel_changed_(&oldirql, LOWER);
2613 rcr_val8 = rtw_read8(Adapter, 0x10250048);//RCR
2614 rcr_val8 &= ~(RCR_AB|RCR_AM|RCR_APM|RCR_AAP);
2616 if(rx_pkt_type == RX_PKT_BROADCAST){
2617 rcr_val8 |= (RCR_AB | RCR_ACRC32 );
2619 else if(rx_pkt_type == RX_PKT_DEST_ADDR){
2620 rcr_val8 |= (RCR_AAP| RCR_AM |RCR_ACRC32);
2622 else if(rx_pkt_type == RX_PKT_PHY_MATCH){
2623 rcr_val8 |= (RCR_APM|RCR_ACRC32);
2626 rcr_val8 &= ~(RCR_AAP|RCR_APM|RCR_AM|RCR_AB|RCR_ACRC32);
2628 rtw_write8(padapter, 0x10250048,rcr_val8);
2630 rcr_val32 = rtw_read32(padapter, RCR);//RCR = 0x10250048
2631 rcr_val32 &= ~(RCR_CBSSID|RCR_AB|RCR_AM|RCR_APM|RCR_AAP);
2633 if(rx_pkt_type == RX_PKT_BROADCAST){
2634 rcr_val32 |= (RCR_AB|RCR_AM|RCR_APM|RCR_AAP|RCR_ACRC32);
2636 else if(rx_pkt_type == RX_PKT_DEST_ADDR){
2637 //rcr_val32 |= (RCR_CBSSID|RCR_AAP|RCR_AM|RCR_ACRC32);
2638 rcr_val32 |= (RCR_CBSSID|RCR_APM|RCR_ACRC32);
2640 else if(rx_pkt_type == RX_PKT_PHY_MATCH){
2641 rcr_val32 |= (RCR_APM|RCR_ACRC32);
2642 //rcr_val32 |= (RCR_AAP|RCR_ACRC32);
2645 rcr_val32 &= ~(RCR_AAP|RCR_APM|RCR_AM|RCR_AB|RCR_ACRC32);
2648 switch (rx_pkt_type)
2650 case RX_PKT_BROADCAST :
2651 rcr_val32 |= (RCR_AB|RCR_AM|RCR_APM|RCR_AAP|RCR_ACRC32);
2653 case RX_PKT_DEST_ADDR :
2654 rcr_val32 |= (RCR_AB|RCR_AM|RCR_APM|RCR_AAP|RCR_ACRC32);
2656 case RX_PKT_PHY_MATCH:
2657 rcr_val32 |= (RCR_APM|RCR_ACRC32);
2660 rcr_val32 &= ~(RCR_AAP|RCR_APM|RCR_AM|RCR_AB|RCR_ACRC32);
2664 if (rx_pkt_type == RX_PKT_DEST_ADDR) {
2665 padapter->mppriv.check_mp_pkt = 1;
2667 padapter->mppriv.check_mp_pkt = 0;
2670 rtw_write32(padapter, RCR, rcr_val32);
2673 _irqlevel_changed_(&oldirql, RAISE);
2680 NDIS_STATUS oid_rt_pro_set_tx_agc_offset_hdl(struct oid_par_priv *poid_par_priv)
2683 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2685 #ifdef PLATFORM_OS_XP
2688 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2694 if (poid_par_priv->type_of_oid != SET_OID)
2695 return NDIS_STATUS_NOT_ACCEPTED;
2697 if (poid_par_priv->information_buf_len < sizeof(u32))
2698 return NDIS_STATUS_INVALID_LENGTH;
2700 txagc = *(u32*)poid_par_priv->information_buf;
2701 RT_TRACE(_module_mp_, _drv_info_,
2702 ("oid_rt_pro_set_tx_agc_offset_hdl: 0x%08x\n", txagc));
2704 _irqlevel_changed_(&oldirql, LOWER);
2705 SetTxAGCOffset(Adapter, txagc);
2706 _irqlevel_changed_(&oldirql, RAISE);
2716 NDIS_STATUS oid_rt_pro_set_pkt_test_mode_hdl(struct oid_par_priv *poid_par_priv)
2719 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2721 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2723 struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
2724 struct mp_priv *pmppriv = &Adapter->mppriv;
2729 if (poid_par_priv->type_of_oid != SET_OID)
2730 return NDIS_STATUS_NOT_ACCEPTED;
2732 if (poid_par_priv->information_buf_len <sizeof(u32))
2733 return NDIS_STATUS_INVALID_LENGTH;
2735 type = *(u32*)poid_par_priv->information_buf;
2737 if (_LOOPBOOK_MODE_ == type) {
2738 pmppriv->mode = type;
2739 set_fwstate(pmlmepriv, WIFI_MP_LPBK_STATE); //append txdesc
2740 RT_TRACE(_module_mp_, _drv_info_, ("test mode change to loopback mode:0x%08x.\n", get_fwstate(pmlmepriv)));
2741 } else if (_2MAC_MODE_ == type){
2742 pmppriv->mode = type;
2743 _clr_fwstate_(pmlmepriv, WIFI_MP_LPBK_STATE);
2744 RT_TRACE(_module_mp_, _drv_info_, ("test mode change to 2mac mode:0x%08x.\n", get_fwstate(pmlmepriv)));
2746 status = NDIS_STATUS_NOT_ACCEPTED;
2756 unsigned int mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv)
2758 PMP_XMIT_PARM pparm;
2760 struct mp_priv *pmp_priv;
2761 struct pkt_attrib *pattrib;
2763 RT_TRACE(_module_mp_, _drv_notice_, ("+%s\n", __func__));
2765 pparm = (PMP_XMIT_PARM)poid_par_priv->information_buf;
2766 padapter = (PADAPTER)poid_par_priv->adapter_context;
2767 pmp_priv = &padapter->mppriv;
2769 if (poid_par_priv->type_of_oid == QUERY_OID) {
2770 pparm->enable = !pmp_priv->tx.stop;
2771 pparm->count = pmp_priv->tx.sended;
2773 if (pparm->enable == 0) {
2774 pmp_priv->tx.stop = 1;
2775 } else if (pmp_priv->tx.stop == 1) {
2776 pmp_priv->tx.stop = 0;
2777 pmp_priv->tx.count = pparm->count;
2778 pmp_priv->tx.payload = pparm->payload_type;
2779 pattrib = &pmp_priv->tx.attrib;
2780 pattrib->pktlen = pparm->length;
2781 _rtw_memcpy(pattrib->dst, pparm->da, ETH_ALEN);
2782 SetPacketTx(padapter);
2784 return NDIS_STATUS_FAILURE;
2787 return NDIS_STATUS_SUCCESS;
2791 unsigned int mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv)
2793 unsigned char *pframe, *pmp_pkt;
2794 struct ethhdr *pethhdr;
2795 struct pkt_attrib *pattrib;
2796 struct rtw_ieee80211_hdr *pwlanhdr;
2797 unsigned short *fctrl;
2798 int llc_sz, payload_len;
2799 struct mp_xmit_frame *pxframe= NULL;
2800 struct mp_xmit_packet *pmp_xmitpkt = (struct mp_xmit_packet*)param;
2801 u8 addr3[] = {0x02, 0xE0, 0x4C, 0x87, 0x66, 0x55};
2803 // DBG_871X("+mp_ioctl_xmit_packet_hdl\n");
2805 pxframe = alloc_mp_xmitframe(&padapter->mppriv);
2806 if (pxframe == NULL)
2808 DEBUG_ERR(("Can't alloc pmpframe %d:%s\n", __LINE__, __FILE__));
2813 payload_len = pmp_xmitpkt->len - 14;
2814 pmp_pkt = (unsigned char*)pmp_xmitpkt->mem;
2815 pethhdr = (struct ethhdr *)pmp_pkt;
2817 //DBG_871X("payload_len=%d, pkt_mem=0x%x\n", pmp_xmitpkt->len, (void*)pmp_xmitpkt->mem);
2819 //DBG_871X("pxframe=0x%x\n", (void*)pxframe);
2820 //DBG_871X("pxframe->mem=0x%x\n", (void*)pxframe->mem);
2823 pattrib = &pxframe->attrib;
2824 memset((u8 *)(pattrib), 0, sizeof (struct pkt_attrib));
2825 pattrib->pktlen = pmp_xmitpkt->len;
2826 pattrib->ether_type = ntohs(pethhdr->h_proto);
2827 pattrib->hdrlen = 24;
2828 pattrib->nr_frags = 1;
2829 pattrib->priority = 0;
2830 #ifndef CONFIG_MP_LINUX
2831 if(IS_MCAST(pethhdr->h_dest))
2832 pattrib->mac_id = 4;
2834 pattrib->mac_id = 5;
2836 pattrib->mac_id = 5;
2840 memset(pxframe->mem, 0 , WLANHDR_OFFSET);
2841 pframe = (u8 *)(pxframe->mem) + WLANHDR_OFFSET;
2843 pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
2845 fctrl = &(pwlanhdr->frame_ctl);
2847 SetFrameSubType(pframe, WIFI_DATA);
2849 _rtw_memcpy(pwlanhdr->addr1, pethhdr->h_dest, ETH_ALEN);
2850 _rtw_memcpy(pwlanhdr->addr2, pethhdr->h_source, ETH_ALEN);
2852 _rtw_memcpy(pwlanhdr->addr3, addr3, ETH_ALEN);
2854 pwlanhdr->seq_ctl = 0;
2855 pframe += pattrib->hdrlen;
2857 llc_sz= rtw_put_snap(pframe, pattrib->ether_type);
2860 _rtw_memcpy(pframe, (void*)(pmp_pkt+14), payload_len);
2862 pattrib->last_txcmdsz = pattrib->hdrlen + llc_sz + payload_len;
2864 DEBUG_INFO(("issuing mp_xmit_frame, tx_len=%d, ether_type=0x%x\n", pattrib->last_txcmdsz, pattrib->ether_type));
2865 xmit_mp_frame(padapter, pxframe);
2870 //------------------------------------------------------------------------------
2871 NDIS_STATUS oid_rt_set_power_down_hdl(struct oid_par_priv *poid_par_priv)
2873 #ifdef PLATFORM_OS_XP
2877 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2878 #ifdef PLATFORM_LINUX
2879 #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
2880 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
2886 if (poid_par_priv->type_of_oid != SET_OID) {
2887 status = NDIS_STATUS_NOT_ACCEPTED;
2891 RT_TRACE(_module_mp_, _drv_info_,
2892 ("\n ===> Setoid_rt_set_power_down_hdl.\n"));
2894 _irqlevel_changed_(&oldirql, LOWER);
2896 bpwrup = *(u8 *)poid_par_priv->information_buf;
2897 //CALL the power_down function
2898 #ifdef PLATFORM_LINUX
2899 #if defined(CONFIG_RTL8712) //Linux MP insmod unknown symbol
2900 dev_power_down(padapter,bpwrup);
2903 _irqlevel_changed_(&oldirql, RAISE);
2905 //DEBUG_ERR(("\n <=== Query OID_RT_PRO_READ_REGISTER.
2906 // Add:0x%08x Width:%d Value:0x%08x\n",RegRWStruct->offset,RegRWStruct->width,RegRWStruct->value));
2912 //------------------------------------------------------------------------------
2913 NDIS_STATUS oid_rt_get_power_mode_hdl(struct oid_par_priv *poid_par_priv)
2916 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2917 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2918 //#ifdef PLATFORM_OS_XP
2924 if (poid_par_priv->type_of_oid != QUERY_OID) {
2925 status = NDIS_STATUS_NOT_ACCEPTED;
2928 if (poid_par_priv->information_buf_len < sizeof(u32)) {
2929 status = NDIS_STATUS_INVALID_LENGTH;
2933 RT_TRACE(_module_mp_, _drv_info_,
2934 ("\n ===> oid_rt_get_power_mode_hdl.\n"));
2936 // _irqlevel_changed_(&oldirql, LOWER);
2937 *(int*)poid_par_priv->information_buf = Adapter->registrypriv.low_power ? POWER_LOW : POWER_NORMAL;
2938 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2939 // _irqlevel_changed_(&oldirql, RAISE);