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);
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;
50 /* **************** oid_rtl_seg_81_87_80 section start **************** */
51 NDIS_STATUS oid_rt_pro_write_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
56 struct bb_reg_param *pbbreg;
59 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
60 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
64 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_write_bb_reg_hdl\n"));
66 if (poid_par_priv->type_of_oid != SET_OID)
67 return NDIS_STATUS_NOT_ACCEPTED;
69 if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param))
70 return NDIS_STATUS_INVALID_LENGTH;
72 pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf);
74 offset = (u16)(pbbreg->offset) & 0xFFF; /* 0ffset :0x800~0xfff */
75 if (offset < BB_REG_BASE_ADDR)
76 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)
118 offset |= BB_REG_BASE_ADDR;
120 _irqlevel_changed_(&oldirql, LOWER);
121 value = read_bbreg(Adapter, offset, 0xFFFFFFFF);
122 _irqlevel_changed_(&oldirql, RAISE);
124 pbbreg->value = value;
125 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
127 RT_TRACE(_module_mp_, _drv_notice_,
128 ("-oid_rt_pro_read_bb_reg_hdl: offset=0x%03X value:0x%08X\n",
134 /* ------------------------------------------------------------------------------ */
135 NDIS_STATUS oid_rt_pro_write_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
137 #ifdef PLATFORM_OS_XP
140 struct rf_reg_param *pbbreg;
144 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
145 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
149 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_write_rf_reg_hdl\n"));
151 if (poid_par_priv->type_of_oid != SET_OID)
152 return NDIS_STATUS_NOT_ACCEPTED;
154 if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param))
155 return NDIS_STATUS_INVALID_LENGTH;
157 pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf);
159 if (pbbreg->path >= MAX_RF_PATH_NUMS)
160 return NDIS_STATUS_NOT_ACCEPTED;
161 if (pbbreg->offset > 0xFF)
162 return NDIS_STATUS_NOT_ACCEPTED;
163 if (pbbreg->value > 0xFFFFF)
164 return NDIS_STATUS_NOT_ACCEPTED;
166 path = (u8)pbbreg->path;
167 offset = (u8)pbbreg->offset;
168 value = pbbreg->value;
170 RT_TRACE(_module_mp_, _drv_notice_,
171 ("oid_rt_pro_write_rf_reg_hdl: path=%d offset=0x%02X value=0x%05X\n",
172 path, offset, value));
174 _irqlevel_changed_(&oldirql, LOWER);
175 write_rfreg(Adapter, path, offset, value);
176 _irqlevel_changed_(&oldirql, RAISE);
182 /* ------------------------------------------------------------------------------ */
183 NDIS_STATUS oid_rt_pro_read_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
185 #ifdef PLATFORM_OS_XP
188 struct rf_reg_param *pbbreg;
192 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
193 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
197 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_read_rf_reg_hdl\n"));
199 if (poid_par_priv->type_of_oid != QUERY_OID)
200 return NDIS_STATUS_NOT_ACCEPTED;
202 if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param))
203 return NDIS_STATUS_INVALID_LENGTH;
205 pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf);
207 if (pbbreg->path >= MAX_RF_PATH_NUMS)
208 return NDIS_STATUS_NOT_ACCEPTED;
209 if (pbbreg->offset > 0xFF)
210 return NDIS_STATUS_NOT_ACCEPTED;
212 path = (u8)pbbreg->path;
213 offset = (u8)pbbreg->offset;
215 _irqlevel_changed_(&oldirql, LOWER);
216 value = read_rfreg(Adapter, path, offset);
217 _irqlevel_changed_(&oldirql, RAISE);
219 pbbreg->value = value;
221 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
223 RT_TRACE(_module_mp_, _drv_notice_,
224 ("-oid_rt_pro_read_rf_reg_hdl: path=%d offset=0x%02X value=0x%05X\n",
225 path, offset, value));
231 /* **************** oid_rtl_seg_81_87_00 section end****************
232 * ------------------------------------------------------------------------------ */
234 /* **************** oid_rtl_seg_81_80_00 section start ****************
235 * ------------------------------------------------------------------------------ */
236 NDIS_STATUS oid_rt_pro_set_data_rate_hdl(struct oid_par_priv *poid_par_priv)
238 #ifdef PLATFORM_OS_XP
241 u32 ratevalue;/* 4 */
242 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
243 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
247 RT_TRACE(_module_mp_, _drv_notice_,
248 ("+oid_rt_pro_set_data_rate_hdl\n"));
250 if (poid_par_priv->type_of_oid != SET_OID)
251 return NDIS_STATUS_NOT_ACCEPTED;
253 if (poid_par_priv->information_buf_len != sizeof(u32))
254 return NDIS_STATUS_INVALID_LENGTH;
256 ratevalue = *((u32 *)poid_par_priv->information_buf); /* 4 */
257 RT_TRACE(_module_mp_, _drv_notice_,
258 ("oid_rt_pro_set_data_rate_hdl: data rate idx=%d\n", ratevalue));
259 if (ratevalue >= MPT_RATE_LAST)
260 return NDIS_STATUS_INVALID_DATA;
262 Adapter->mppriv.rateidx = ratevalue;
264 _irqlevel_changed_(&oldirql, LOWER);
265 SetDataRate(Adapter);
266 _irqlevel_changed_(&oldirql, RAISE);
272 /* ------------------------------------------------------------------------------ */
273 NDIS_STATUS oid_rt_pro_start_test_hdl(struct oid_par_priv *poid_par_priv)
275 #ifdef PLATFORM_OS_XP
279 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
280 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
284 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_start_test_hdl\n"));
286 if (Adapter->registrypriv.mp_mode == 0)
287 return NDIS_STATUS_NOT_ACCEPTED;
289 if (poid_par_priv->type_of_oid != SET_OID)
290 return NDIS_STATUS_NOT_ACCEPTED;
292 _irqlevel_changed_(&oldirql, LOWER);
294 /* IQCalibrateBcut(Adapter); */
296 mode = *((u32 *)poid_par_priv->information_buf);
297 Adapter->mppriv.mode = mode;/* 1 for loopback */
299 if (mp_start_test(Adapter) == _FAIL) {
300 status = NDIS_STATUS_NOT_ACCEPTED;
305 _irqlevel_changed_(&oldirql, RAISE);
307 RT_TRACE(_module_mp_, _drv_notice_, ("-oid_rt_pro_start_test_hdl: mp_mode=%d\n", Adapter->mppriv.mode));
313 /* ------------------------------------------------------------------------------ */
314 NDIS_STATUS oid_rt_pro_stop_test_hdl(struct oid_par_priv *poid_par_priv)
316 #ifdef PLATFORM_OS_XP
319 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
320 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
324 RT_TRACE(_module_mp_, _drv_notice_, ("+Set OID_RT_PRO_STOP_TEST\n"));
326 if (poid_par_priv->type_of_oid != SET_OID)
327 return NDIS_STATUS_NOT_ACCEPTED;
329 _irqlevel_changed_(&oldirql, LOWER);
330 mp_stop_test(Adapter);
331 _irqlevel_changed_(&oldirql, RAISE);
333 RT_TRACE(_module_mp_, _drv_notice_, ("-Set OID_RT_PRO_STOP_TEST\n"));
339 /* ------------------------------------------------------------------------------ */
340 NDIS_STATUS oid_rt_pro_set_channel_direct_call_hdl(struct oid_par_priv *poid_par_priv)
342 #ifdef PLATFORM_OS_XP
346 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
347 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
351 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_set_channel_direct_call_hdl\n"));
353 if (poid_par_priv->information_buf_len != sizeof(u32))
354 return NDIS_STATUS_INVALID_LENGTH;
356 if (poid_par_priv->type_of_oid == QUERY_OID) {
357 *((u32 *)poid_par_priv->information_buf) = Adapter->mppriv.channel;
358 return NDIS_STATUS_SUCCESS;
361 if (poid_par_priv->type_of_oid != SET_OID)
362 return NDIS_STATUS_NOT_ACCEPTED;
364 Channel = *((u32 *)poid_par_priv->information_buf);
365 RT_TRACE(_module_mp_, _drv_notice_, ("oid_rt_pro_set_channel_direct_call_hdl: Channel=%d\n", Channel));
367 return NDIS_STATUS_NOT_ACCEPTED;
368 Adapter->mppriv.channel = Channel;
370 _irqlevel_changed_(&oldirql, LOWER);
372 _irqlevel_changed_(&oldirql, RAISE);
378 /* ------------------------------------------------------------------------------ */
379 NDIS_STATUS oid_rt_set_bandwidth_hdl(struct oid_par_priv *poid_par_priv)
381 #ifdef PLATFORM_OS_XP
386 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
387 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
391 RT_TRACE(_module_mp_, _drv_info_,
392 ("+oid_rt_set_bandwidth_hdl\n"));
394 if (poid_par_priv->type_of_oid != SET_OID)
395 return NDIS_STATUS_NOT_ACCEPTED;
397 if (poid_par_priv->information_buf_len < sizeof(u32))
398 return NDIS_STATUS_INVALID_LENGTH;
400 bandwidth = *((u32 *)poid_par_priv->information_buf); /* 4 */
401 channel_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
403 if (bandwidth != CHANNEL_WIDTH_40)
404 bandwidth = CHANNEL_WIDTH_20;
405 padapter->mppriv.bandwidth = (u8)bandwidth;
406 padapter->mppriv.prime_channel_offset = (u8)channel_offset;
408 _irqlevel_changed_(&oldirql, LOWER);
409 SetBandwidth(padapter);
410 _irqlevel_changed_(&oldirql, RAISE);
412 RT_TRACE(_module_mp_, _drv_notice_,
413 ("-oid_rt_set_bandwidth_hdl: bandwidth=%d channel_offset=%d\n",
414 bandwidth, channel_offset));
420 /* ------------------------------------------------------------------------------ */
421 NDIS_STATUS oid_rt_pro_set_antenna_bb_hdl(struct oid_par_priv *poid_par_priv)
423 #ifdef PLATFORM_OS_XP
427 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
428 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
432 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_set_antenna_bb_hdl\n"));
434 if (poid_par_priv->information_buf_len != sizeof(u32))
435 return NDIS_STATUS_INVALID_LENGTH;
437 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;
522 /* ------------------------------------------------------------------------------ */
523 NDIS_STATUS oid_rt_pro_query_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
525 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
526 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
530 if (poid_par_priv->type_of_oid != QUERY_OID) {
531 status = NDIS_STATUS_NOT_ACCEPTED;
534 RT_TRACE(_module_mp_, _drv_alert_, ("===> oid_rt_pro_query_rx_packet_received_hdl.\n"));
535 if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
536 *(ULONG *)poid_par_priv->information_buf = Adapter->mppriv.rx_pktcount;
537 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
538 RT_TRACE(_module_mp_, _drv_alert_, ("recv_ok:%d\n", Adapter->mppriv.rx_pktcount));
540 status = NDIS_STATUS_INVALID_LENGTH;
546 /* ------------------------------------------------------------------------------ */
547 NDIS_STATUS oid_rt_pro_query_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
549 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
550 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
554 if (poid_par_priv->type_of_oid != QUERY_OID) {
555 status = NDIS_STATUS_NOT_ACCEPTED;
558 RT_TRACE(_module_mp_, _drv_alert_, ("===> oid_rt_pro_query_rx_packet_crc32_error_hdl.\n"));
559 if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
560 *(ULONG *)poid_par_priv->information_buf = Adapter->mppriv.rx_crcerrpktcount;
561 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
562 RT_TRACE(_module_mp_, _drv_alert_, ("recv_err:%d\n", Adapter->mppriv.rx_crcerrpktcount));
564 status = NDIS_STATUS_INVALID_LENGTH;
570 /* ------------------------------------------------------------------------------ */
572 NDIS_STATUS oid_rt_pro_reset_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv)
574 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
575 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
579 if (poid_par_priv->type_of_oid != SET_OID) {
580 status = NDIS_STATUS_NOT_ACCEPTED;
584 RT_TRACE(_module_mp_, _drv_alert_, ("===> oid_rt_pro_reset_tx_packet_sent_hdl.\n"));
585 Adapter->mppriv.tx_pktcount = 0;
591 /* ------------------------------------------------------------------------------ */
592 NDIS_STATUS oid_rt_pro_reset_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
594 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
595 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
599 if (poid_par_priv->type_of_oid != SET_OID) {
600 status = NDIS_STATUS_NOT_ACCEPTED;
604 if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
605 Adapter->mppriv.rx_pktcount = 0;
606 Adapter->mppriv.rx_crcerrpktcount = 0;
608 status = NDIS_STATUS_INVALID_LENGTH;
614 /* ------------------------------------------------------------------------------ */
615 NDIS_STATUS oid_rt_reset_phy_rx_packet_count_hdl(struct oid_par_priv *poid_par_priv)
617 #ifdef PLATFORM_OS_XP
620 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
621 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
625 if (poid_par_priv->type_of_oid != SET_OID) {
626 status = NDIS_STATUS_NOT_ACCEPTED;
630 _irqlevel_changed_(&oldirql, LOWER);
631 ResetPhyRxPktCount(Adapter);
632 _irqlevel_changed_(&oldirql, RAISE);
638 /* ------------------------------------------------------------------------------ */
639 NDIS_STATUS oid_rt_get_phy_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
641 #ifdef PLATFORM_OS_XP
644 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
645 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
649 RT_TRACE(_module_mp_, _drv_info_, ("+oid_rt_get_phy_rx_packet_received_hdl\n"));
651 if (poid_par_priv->type_of_oid != QUERY_OID)
652 return NDIS_STATUS_NOT_ACCEPTED;
654 if (poid_par_priv->information_buf_len != sizeof(ULONG))
655 return NDIS_STATUS_INVALID_LENGTH;
657 _irqlevel_changed_(&oldirql, LOWER);
658 *(ULONG *)poid_par_priv->information_buf = GetPhyRxPktReceived(Adapter);
659 _irqlevel_changed_(&oldirql, RAISE);
661 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
663 RT_TRACE(_module_mp_, _drv_notice_, ("-oid_rt_get_phy_rx_packet_received_hdl: recv_ok=%d\n", *(ULONG *)poid_par_priv->information_buf));
669 /* ------------------------------------------------------------------------------ */
670 NDIS_STATUS oid_rt_get_phy_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
672 #ifdef PLATFORM_OS_XP
675 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
676 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
680 RT_TRACE(_module_mp_, _drv_info_, ("+oid_rt_get_phy_rx_packet_crc32_error_hdl\n"));
682 if (poid_par_priv->type_of_oid != QUERY_OID)
683 return NDIS_STATUS_NOT_ACCEPTED;
686 if (poid_par_priv->information_buf_len != sizeof(ULONG))
687 return NDIS_STATUS_INVALID_LENGTH;
689 _irqlevel_changed_(&oldirql, LOWER);
690 *(ULONG *)poid_par_priv->information_buf = GetPhyRxPktCRC32Error(Adapter);
691 _irqlevel_changed_(&oldirql, RAISE);
693 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
695 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));
701 /* **************** oid_rtl_seg_81_80_20 section end **************** */
702 NDIS_STATUS oid_rt_pro_set_continuous_tx_hdl(struct oid_par_priv *poid_par_priv)
704 #ifdef PLATFORM_OS_XP
708 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
709 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
713 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_set_continuous_tx_hdl\n"));
715 if (poid_par_priv->type_of_oid != SET_OID)
716 return NDIS_STATUS_NOT_ACCEPTED;
718 bStartTest = *((u32 *)poid_par_priv->information_buf);
720 _irqlevel_changed_(&oldirql, LOWER);
721 SetContinuousTx(Adapter, (u8)bStartTest);
723 struct mp_priv *pmp_priv = &Adapter->mppriv;
724 if (pmp_priv->tx.stop == 0) {
725 pmp_priv->tx.stop = 1;
726 RTW_INFO("%s: pkt tx is running...\n", __func__);
729 pmp_priv->tx.stop = 0;
730 pmp_priv->tx.count = 1;
731 SetPacketTx(Adapter);
733 _irqlevel_changed_(&oldirql, RAISE);
740 NDIS_STATUS oid_rt_pro_set_single_carrier_tx_hdl(struct oid_par_priv *poid_par_priv)
742 #ifdef PLATFORM_OS_XP
746 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
747 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
751 RT_TRACE(_module_mp_, _drv_alert_, ("+oid_rt_pro_set_single_carrier_tx_hdl\n"));
753 if (poid_par_priv->type_of_oid != SET_OID)
754 return NDIS_STATUS_NOT_ACCEPTED;
756 bStartTest = *((u32 *)poid_par_priv->information_buf);
758 _irqlevel_changed_(&oldirql, LOWER);
759 SetSingleCarrierTx(Adapter, (u8)bStartTest);
761 struct mp_priv *pmp_priv = &Adapter->mppriv;
762 if (pmp_priv->tx.stop == 0) {
763 pmp_priv->tx.stop = 1;
764 RTW_INFO("%s: pkt tx is running...\n", __func__);
767 pmp_priv->tx.stop = 0;
768 pmp_priv->tx.count = 1;
769 SetPacketTx(Adapter);
771 _irqlevel_changed_(&oldirql, RAISE);
778 NDIS_STATUS oid_rt_pro_set_carrier_suppression_tx_hdl(struct oid_par_priv *poid_par_priv)
780 #ifdef PLATFORM_OS_XP
784 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
785 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
789 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_set_carrier_suppression_tx_hdl\n"));
791 if (poid_par_priv->type_of_oid != SET_OID)
792 return NDIS_STATUS_NOT_ACCEPTED;
794 bStartTest = *((u32 *)poid_par_priv->information_buf);
796 _irqlevel_changed_(&oldirql, LOWER);
797 SetCarrierSuppressionTx(Adapter, (u8)bStartTest);
799 struct mp_priv *pmp_priv = &Adapter->mppriv;
800 if (pmp_priv->tx.stop == 0) {
801 pmp_priv->tx.stop = 1;
802 RTW_INFO("%s: pkt tx is running...\n", __func__);
805 pmp_priv->tx.stop = 0;
806 pmp_priv->tx.count = 1;
807 SetPacketTx(Adapter);
809 _irqlevel_changed_(&oldirql, RAISE);
816 NDIS_STATUS oid_rt_pro_set_single_tone_tx_hdl(struct oid_par_priv *poid_par_priv)
818 #ifdef PLATFORM_OS_XP
822 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
823 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
827 RT_TRACE(_module_mp_, _drv_alert_, ("+oid_rt_pro_set_single_tone_tx_hdl\n"));
829 if (poid_par_priv->type_of_oid != SET_OID)
830 return NDIS_STATUS_NOT_ACCEPTED;
832 bStartTest = *((u32 *)poid_par_priv->information_buf);
834 _irqlevel_changed_(&oldirql, LOWER);
835 SetSingleToneTx(Adapter, (u8)bStartTest);
836 _irqlevel_changed_(&oldirql, RAISE);
843 NDIS_STATUS oid_rt_pro_set_modulation_hdl(struct oid_par_priv *poid_par_priv)
848 NDIS_STATUS oid_rt_pro_trigger_gpio_hdl(struct oid_par_priv *poid_par_priv)
850 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
852 #ifdef PLATFORM_OS_XP
855 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
858 if (poid_par_priv->type_of_oid != SET_OID)
859 return NDIS_STATUS_NOT_ACCEPTED;
861 _irqlevel_changed_(&oldirql, LOWER);
862 rtw_hal_set_hwreg(Adapter, HW_VAR_TRIGGER_GPIO_0, 0);
863 _irqlevel_changed_(&oldirql, RAISE);
869 /* **************** oid_rtl_seg_81_80_00 section end ****************
870 * ------------------------------------------------------------------------------ */
871 NDIS_STATUS oid_rt_pro8711_join_bss_hdl(struct oid_par_priv *poid_par_priv)
874 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
876 #ifdef PLATFORM_OS_XP
879 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
881 PNDIS_802_11_SSID pssid;
885 if (poid_par_priv->type_of_oid != SET_OID)
886 return NDIS_STATUS_NOT_ACCEPTED;
888 *poid_par_priv->bytes_needed = (u32)sizeof(NDIS_802_11_SSID);
889 *poid_par_priv->bytes_rw = 0;
890 if (poid_par_priv->information_buf_len < *poid_par_priv->bytes_needed)
891 return NDIS_STATUS_INVALID_LENGTH;
893 pssid = (PNDIS_802_11_SSID)poid_par_priv->information_buf;
895 _irqlevel_changed_(&oldirql, LOWER);
897 if (mp_start_joinbss(Adapter, pssid) == _FAIL)
898 status = NDIS_STATUS_NOT_ACCEPTED;
900 _irqlevel_changed_(&oldirql, RAISE);
902 *poid_par_priv->bytes_rw = sizeof(NDIS_802_11_SSID);
911 /* ------------------------------------------------------------------------------ */
912 NDIS_STATUS oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv)
914 #ifdef PLATFORM_OS_XP
919 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
920 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
924 RT_TRACE(_module_mp_, _drv_info_,
925 ("+oid_rt_pro_read_register_hdl\n"));
927 if (poid_par_priv->type_of_oid != QUERY_OID)
928 return NDIS_STATUS_NOT_ACCEPTED;
930 RegRWStruct = (pRW_Reg)poid_par_priv->information_buf;
931 offset = RegRWStruct->offset;
932 width = RegRWStruct->width;
935 return NDIS_STATUS_NOT_ACCEPTED;
937 _irqlevel_changed_(&oldirql, LOWER);
941 RegRWStruct->value = rtw_read8(Adapter, offset);
944 RegRWStruct->value = rtw_read16(Adapter, offset);
948 RegRWStruct->value = rtw_read32(Adapter, offset);
951 RT_TRACE(_module_mp_, _drv_notice_,
952 ("oid_rt_pro_read_register_hdl: offset:0x%04X value:0x%X\n",
953 offset, RegRWStruct->value));
955 _irqlevel_changed_(&oldirql, RAISE);
957 *poid_par_priv->bytes_rw = width;
963 /* ------------------------------------------------------------------------------ */
964 NDIS_STATUS oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv)
966 #ifdef PLATFORM_OS_XP
970 u32 offset, width, value;
971 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
972 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
976 RT_TRACE(_module_mp_, _drv_info_,
977 ("+oid_rt_pro_write_register_hdl\n"));
979 if (poid_par_priv->type_of_oid != SET_OID)
980 return NDIS_STATUS_NOT_ACCEPTED;
982 RegRWStruct = (pRW_Reg)poid_par_priv->information_buf;
983 offset = RegRWStruct->offset;
984 width = RegRWStruct->width;
985 value = RegRWStruct->value;
988 return NDIS_STATUS_NOT_ACCEPTED;
990 _irqlevel_changed_(&oldirql, LOWER);
992 switch (RegRWStruct->width) {
995 status = NDIS_STATUS_NOT_ACCEPTED;
998 rtw_write8(padapter, offset, (u8)value);
1001 if (value > 0xFFFF) {
1002 status = NDIS_STATUS_NOT_ACCEPTED;
1005 rtw_write16(padapter, offset, (u16)value);
1008 rtw_write32(padapter, offset, value);
1011 status = NDIS_STATUS_NOT_ACCEPTED;
1015 _irqlevel_changed_(&oldirql, RAISE);
1017 RT_TRACE(_module_mp_, _drv_info_,
1018 ("-oid_rt_pro_write_register_hdl: offset=0x%08X width=%d value=0x%X\n",
1019 offset, width, value));
1025 /* ------------------------------------------------------------------------------ */
1026 NDIS_STATUS oid_rt_pro_burst_read_register_hdl(struct oid_par_priv *poid_par_priv)
1029 #ifdef PLATFORM_OS_XP
1032 pBurst_RW_Reg pBstRwReg;
1033 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1034 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
1038 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_burst_read_register_hdl\n"));
1040 if (poid_par_priv->type_of_oid != QUERY_OID)
1041 return NDIS_STATUS_NOT_ACCEPTED;
1043 pBstRwReg = (pBurst_RW_Reg)poid_par_priv->information_buf;
1045 _irqlevel_changed_(&oldirql, LOWER);
1046 rtw_read_mem(padapter, pBstRwReg->offset, (u32)pBstRwReg->len, pBstRwReg->Data);
1047 _irqlevel_changed_(&oldirql, RAISE);
1049 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1051 RT_TRACE(_module_mp_, _drv_info_, ("-oid_rt_pro_burst_read_register_hdl\n"));
1060 /* ------------------------------------------------------------------------------ */
1061 NDIS_STATUS oid_rt_pro_burst_write_register_hdl(struct oid_par_priv *poid_par_priv)
1064 #ifdef PLATFORM_OS_XP
1067 pBurst_RW_Reg pBstRwReg;
1068 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1069 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
1073 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_burst_write_register_hdl\n"));
1075 if (poid_par_priv->type_of_oid != SET_OID)
1076 return NDIS_STATUS_NOT_ACCEPTED;
1078 pBstRwReg = (pBurst_RW_Reg)poid_par_priv->information_buf;
1080 _irqlevel_changed_(&oldirql, LOWER);
1081 rtw_write_mem(padapter, pBstRwReg->offset, (u32)pBstRwReg->len, pBstRwReg->Data);
1082 _irqlevel_changed_(&oldirql, RAISE);
1084 RT_TRACE(_module_mp_, _drv_info_, ("-oid_rt_pro_burst_write_register_hdl\n"));
1093 /* ------------------------------------------------------------------------------ */
1094 NDIS_STATUS oid_rt_pro_write_txcmd_hdl(struct oid_par_priv *poid_par_priv)
1097 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1099 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1101 #ifdef PLATFORM_OS_XP
1105 TX_CMD_Desc *TxCmd_Info;
1109 if (poid_par_priv->type_of_oid != SET_OID)
1110 return NDIS_STATUS_NOT_ACCEPTED;
1112 RT_TRACE(_module_mp_, _drv_info_, ("+Set OID_RT_PRO_WRITE_TXCMD\n"));
1114 TxCmd_Info = (TX_CMD_Desc *)poid_par_priv->information_buf;
1116 RT_TRACE(_module_mp_, _drv_info_, ("WRITE_TXCMD:Addr=%.8X\n", TxCmd_Info->offset));
1117 RT_TRACE(_module_mp_, _drv_info_, ("WRITE_TXCMD:1.)%.8X\n", (ULONG)TxCmd_Info->TxCMD.value[0]));
1118 RT_TRACE(_module_mp_, _drv_info_, ("WRITE_TXCMD:2.)%.8X\n", (ULONG)TxCmd_Info->TxCMD.value[1]));
1119 RT_TRACE(_module_mp_, _drv_info_, (("WRITE_TXCMD:3.)%.8X\n", (ULONG)TxCmd_Info->TxCMD.value[2]));
1120 RT_TRACE(_module_mp_, _drv_info_, ("WRITE_TXCMD:4.)%.8X\n", (ULONG)TxCmd_Info->TxCMD.value[3]));
1122 _irqlevel_changed_(&oldirql, LOWER);
1124 rtw_write32(Adapter, TxCmd_Info->offset + 0, (unsigned int)TxCmd_Info->TxCMD.value[0]);
1125 rtw_write32(Adapter, TxCmd_Info->offset + 4, (unsigned int)TxCmd_Info->TxCMD.value[1]);
1127 _irqlevel_changed_(&oldirql, RAISE);
1129 RT_TRACE(_module_mp_, _drv_notice_,
1130 ("-Set OID_RT_PRO_WRITE_TXCMD: status=0x%08X\n", status));
1140 /* ------------------------------------------------------------------------------ */
1141 NDIS_STATUS oid_rt_pro_read16_eeprom_hdl(struct oid_par_priv *poid_par_priv)
1144 #ifdef PLATFORM_OS_XP
1147 pEEPROM_RWParam pEEPROM;
1148 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1149 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
1153 RT_TRACE(_module_mp_, _drv_info_, ("+Query OID_RT_PRO_READ16_EEPROM\n"));
1155 if (poid_par_priv->type_of_oid != QUERY_OID)
1156 return NDIS_STATUS_NOT_ACCEPTED;
1158 pEEPROM = (pEEPROM_RWParam)poid_par_priv->information_buf;
1160 _irqlevel_changed_(&oldirql, LOWER);
1161 pEEPROM->value = eeprom_read16(padapter, (u16)(pEEPROM->offset >> 1));
1162 _irqlevel_changed_(&oldirql, RAISE);
1164 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1166 RT_TRACE(_module_mp_, _drv_notice_,
1167 ("-Query OID_RT_PRO_READ16_EEPROM: offset=0x%x value=0x%x\n",
1168 pEEPROM->offset, pEEPROM->value));
1178 /* ------------------------------------------------------------------------------ */
1179 NDIS_STATUS oid_rt_pro_write16_eeprom_hdl(struct oid_par_priv *poid_par_priv)
1182 #ifdef PLATFORM_OS_XP
1185 pEEPROM_RWParam pEEPROM;
1186 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1187 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
1191 RT_TRACE(_module_mp_, _drv_notice_, ("+Set OID_RT_PRO_WRITE16_EEPROM\n"));
1193 if (poid_par_priv->type_of_oid != SET_OID)
1194 return NDIS_STATUS_NOT_ACCEPTED;
1196 pEEPROM = (pEEPROM_RWParam)poid_par_priv->information_buf;
1198 _irqlevel_changed_(&oldirql, LOWER);
1199 eeprom_write16(padapter, (u16)(pEEPROM->offset >> 1), pEEPROM->value);
1200 _irqlevel_changed_(&oldirql, RAISE);
1202 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1211 /* ------------------------------------------------------------------------------ */
1212 NDIS_STATUS oid_rt_pro8711_wi_poll_hdl(struct oid_par_priv *poid_par_priv)
1215 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1217 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1219 struct mp_wiparam *pwi_param;
1223 if (poid_par_priv->type_of_oid != QUERY_OID)
1224 return NDIS_STATUS_NOT_ACCEPTED;
1226 if (poid_par_priv->information_buf_len < sizeof(struct mp_wiparam))
1227 return NDIS_STATUS_INVALID_LENGTH;
1229 if (Adapter->mppriv.workparam.bcompleted == _FALSE)
1230 return NDIS_STATUS_NOT_ACCEPTED;
1232 pwi_param = (struct mp_wiparam *)poid_par_priv->information_buf;
1234 _rtw_memcpy(pwi_param, &Adapter->mppriv.workparam, sizeof(struct mp_wiparam));
1235 Adapter->mppriv.act_in_progress = _FALSE;
1236 /* RT_TRACE(_module_mp_, _drv_info_, ("rf:%x\n", pwiparam->IoValue)); */
1237 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1246 /* ------------------------------------------------------------------------------ */
1247 NDIS_STATUS oid_rt_pro8711_pkt_loss_hdl(struct oid_par_priv *poid_par_priv)
1250 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1252 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1256 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro8711_pkt_loss_hdl\n"));
1258 if (poid_par_priv->type_of_oid != QUERY_OID)
1259 return NDIS_STATUS_NOT_ACCEPTED;
1261 if (poid_par_priv->information_buf_len < sizeof(uint) * 2) {
1262 RT_TRACE(_module_mp_, _drv_err_, ("-oid_rt_pro8711_pkt_loss_hdl: buf_len=%d\n", (int)poid_par_priv->information_buf_len));
1263 return NDIS_STATUS_INVALID_LENGTH;
1266 if (*(uint *)poid_par_priv->information_buf == 1) /* init==1 */
1267 Adapter->mppriv.rx_pktloss = 0;
1269 *((uint *)poid_par_priv->information_buf + 1) = Adapter->mppriv.rx_pktloss;
1270 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1279 /* ------------------------------------------------------------------------------ */
1280 NDIS_STATUS oid_rt_rd_attrib_mem_hdl(struct oid_par_priv *poid_par_priv)
1283 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1284 struct io_queue *pio_queue = (struct io_queue *)Adapter->pio_queue;
1285 struct intf_hdl *pintfhdl = &pio_queue->intf;
1287 #ifdef PLATFORM_OS_XP
1290 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1292 #ifdef CONFIG_SDIO_HCI
1293 void (*_attrib_read)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
1298 RT_TRACE(_module_mp_, _drv_notice_, ("+Query OID_RT_RD_ATTRIB_MEM\n"));
1300 if (poid_par_priv->type_of_oid != QUERY_OID)
1301 return NDIS_STATUS_NOT_ACCEPTED;
1303 #ifdef CONFIG_SDIO_HCI
1304 _irqlevel_changed_(&oldirql, LOWER);
1306 u32 *plmem = (u32 *)poid_par_priv->information_buf + 2;
1307 _attrib_read = pintfhdl->io_ops._attrib_read;
1308 _attrib_read(pintfhdl, *((u32 *)poid_par_priv->information_buf),
1309 *((u32 *)poid_par_priv->information_buf + 1), (u8 *)plmem);
1310 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1312 _irqlevel_changed_(&oldirql, RAISE);
1322 /* ------------------------------------------------------------------------------ */
1323 NDIS_STATUS oid_rt_wr_attrib_mem_hdl(struct oid_par_priv *poid_par_priv)
1326 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1327 struct io_queue *pio_queue = (struct io_queue *)Adapter->pio_queue;
1328 struct intf_hdl *pintfhdl = &pio_queue->intf;
1330 #ifdef PLATFORM_OS_XP
1333 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1335 #ifdef CONFIG_SDIO_HCI
1336 void (*_attrib_write)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
1341 if (poid_par_priv->type_of_oid != SET_OID)
1342 return NDIS_STATUS_NOT_ACCEPTED;
1344 #ifdef CONFIG_SDIO_HCI
1345 _irqlevel_changed_(&oldirql, LOWER);
1347 u32 *plmem = (u32 *)poid_par_priv->information_buf + 2;
1348 _attrib_write = pintfhdl->io_ops._attrib_write;
1349 _attrib_write(pintfhdl, *(u32 *)poid_par_priv->information_buf,
1350 *((u32 *)poid_par_priv->information_buf + 1), (u8 *)plmem);
1352 _irqlevel_changed_(&oldirql, RAISE);
1362 /* ------------------------------------------------------------------------------ */
1363 NDIS_STATUS oid_rt_pro_set_rf_intfs_hdl(struct oid_par_priv *poid_par_priv)
1366 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1368 #ifdef PLATFORM_OS_XP
1371 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1375 RT_TRACE(_module_mp_, _drv_notice_, ("+OID_RT_PRO_SET_RF_INTFS\n"));
1377 if (poid_par_priv->type_of_oid != SET_OID)
1378 return NDIS_STATUS_NOT_ACCEPTED;
1380 _irqlevel_changed_(&oldirql, LOWER);
1382 if (rtw_setrfintfs_cmd(Adapter, *(unsigned char *)poid_par_priv->information_buf) == _FAIL)
1383 status = NDIS_STATUS_NOT_ACCEPTED;
1385 _irqlevel_changed_(&oldirql, RAISE);
1394 /* ------------------------------------------------------------------------------ */
1395 NDIS_STATUS oid_rt_poll_rx_status_hdl(struct oid_par_priv *poid_par_priv)
1398 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1400 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1404 if (poid_par_priv->type_of_oid != QUERY_OID)
1405 return NDIS_STATUS_NOT_ACCEPTED;
1407 _rtw_memcpy(poid_par_priv->information_buf, (unsigned char *)&Adapter->mppriv.rxstat, sizeof(struct recv_stat));
1408 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1417 /* ------------------------------------------------------------------------------ */
1418 NDIS_STATUS oid_rt_pro_cfg_debug_message_hdl(struct oid_par_priv *poid_par_priv)
1421 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1423 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1425 PCFG_DBG_MSG_STRUCT pdbg_msg;
1429 /* RT_TRACE(0xffffffffff,_drv_alert_,("===> oid_rt_pro_cfg_debug_message_hdl.\n")); */
1431 #if 0/*#ifdef CONFIG_DEBUG_RTL871X*/
1433 pdbg_msg = (PCFG_DBG_MSG_STRUCT)(poid_par_priv->information_buf);
1435 if (poid_par_priv->type_of_oid == SET_OID) {
1436 RT_TRACE(0xffffffffff, _drv_alert_,
1437 ("===>Set level :0x%08x, H32:0x%08x L32:0x%08x\n",
1438 pdbg_msg->DebugLevel, pdbg_msg->DebugComponent_H32, pdbg_msg->DebugComponent_L32));
1440 GlobalDebugLevel = pdbg_msg->DebugLevel;
1441 GlobalDebugComponents = (pdbg_msg->DebugComponent_H32 << 32) | pdbg_msg->DebugComponent_L32;
1442 RT_TRACE(0xffffffffff, _drv_alert_,
1443 ("===> Set level :0x%08x, component:0x%016x\n",
1444 GlobalDebugLevel, (u32)GlobalDebugComponents));
1446 pdbg_msg->DebugLevel = GlobalDebugLevel;
1447 pdbg_msg->DebugComponent_H32 = (u32)(GlobalDebugComponents >> 32);
1448 pdbg_msg->DebugComponent_L32 = (u32)GlobalDebugComponents;
1449 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1451 RT_TRACE(0xffffffffff, _drv_alert_,
1452 ("===>Query level:0x%08x H32:0x%08x L32:0x%08x\n",
1453 (u32)pdbg_msg->DebugLevel, (u32)pdbg_msg->DebugComponent_H32, (u32)pdbg_msg->DebugComponent_L32));
1465 /* ------------------------------------------------------------------------------ */
1466 NDIS_STATUS oid_rt_pro_set_data_rate_ex_hdl(struct oid_par_priv *poid_par_priv)
1468 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1470 #ifdef PLATFORM_OS_XP
1473 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1477 RT_TRACE(_module_mp_, _drv_notice_, ("+OID_RT_PRO_SET_DATA_RATE_EX\n"));
1479 if (poid_par_priv->type_of_oid != SET_OID)
1480 return NDIS_STATUS_NOT_ACCEPTED;
1482 _irqlevel_changed_(&oldirql, LOWER);
1484 if (rtw_setdatarate_cmd(Adapter, poid_par_priv->information_buf) != _SUCCESS)
1485 status = NDIS_STATUS_NOT_ACCEPTED;
1487 _irqlevel_changed_(&oldirql, RAISE);
1493 /* ----------------------------------------------------------------------------- */
1494 NDIS_STATUS oid_rt_get_thermal_meter_hdl(struct oid_par_priv *poid_par_priv)
1496 #ifdef PLATFORM_OS_XP
1499 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1501 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1505 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_get_thermal_meter_hdl\n"));
1507 if (poid_par_priv->type_of_oid != QUERY_OID)
1508 return NDIS_STATUS_NOT_ACCEPTED;
1510 if (poid_par_priv->information_buf_len < sizeof(u32))
1511 return NDIS_STATUS_INVALID_LENGTH;
1513 _irqlevel_changed_(&oldirql, LOWER);
1514 GetThermalMeter(Adapter, &thermal);
1515 _irqlevel_changed_(&oldirql, RAISE);
1517 *(u32 *)poid_par_priv->information_buf = (u32)thermal;
1518 *poid_par_priv->bytes_rw = sizeof(u32);
1524 /* ----------------------------------------------------------------------------- */
1525 NDIS_STATUS oid_rt_pro_read_tssi_hdl(struct oid_par_priv *poid_par_priv)
1528 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1530 #ifdef PLATFORM_OS_XP
1533 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1537 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_read_tssi_hdl\n"));
1539 if (poid_par_priv->type_of_oid != SET_OID)
1540 return NDIS_STATUS_NOT_ACCEPTED;
1542 if (Adapter->mppriv.act_in_progress == _TRUE)
1543 return NDIS_STATUS_NOT_ACCEPTED;
1545 if (poid_par_priv->information_buf_len < sizeof(u8))
1546 return NDIS_STATUS_INVALID_LENGTH;
1548 /* init workparam */
1549 Adapter->mppriv.act_in_progress = _TRUE;
1550 Adapter->mppriv.workparam.bcompleted = _FALSE;
1551 Adapter->mppriv.workparam.act_type = MPT_READ_TSSI;
1552 Adapter->mppriv.workparam.io_offset = 0;
1553 Adapter->mppriv.workparam.io_value = 0xFFFFFFFF;
1555 _irqlevel_changed_(&oldirql, LOWER);
1557 if (!rtw_gettssi_cmd(Adapter, 0, (u8 *)&Adapter->mppriv.workparam.io_value))
1558 status = NDIS_STATUS_NOT_ACCEPTED;
1560 _irqlevel_changed_(&oldirql, RAISE);
1569 /* ------------------------------------------------------------------------------ */
1570 NDIS_STATUS oid_rt_pro_set_power_tracking_hdl(struct oid_par_priv *poid_par_priv)
1572 #ifdef PLATFORM_OS_XP
1575 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1576 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1581 /* if (poid_par_priv->type_of_oid != SET_OID)
1582 * return NDIS_STATUS_NOT_ACCEPTED; */
1584 if (poid_par_priv->information_buf_len < sizeof(u8))
1585 return NDIS_STATUS_INVALID_LENGTH;
1587 _irqlevel_changed_(&oldirql, LOWER);
1588 if (poid_par_priv->type_of_oid == SET_OID) {
1591 enable = *(u8 *)poid_par_priv->information_buf;
1592 RT_TRACE(_module_mp_, _drv_notice_,
1593 ("+oid_rt_pro_set_power_tracking_hdl: enable=%d\n", enable));
1595 SetPowerTracking(Adapter, enable);
1597 GetPowerTracking(Adapter, (u8 *)poid_par_priv->information_buf);
1598 _irqlevel_changed_(&oldirql, RAISE);
1604 /* ----------------------------------------------------------------------------- */
1605 NDIS_STATUS oid_rt_pro_set_basic_rate_hdl(struct oid_par_priv *poid_par_priv)
1608 #ifdef PLATFORM_OS_XP
1612 u8 datarates[NumRates];
1614 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1615 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
1619 RT_TRACE(_module_mp_, _drv_info_, ("+OID_RT_PRO_SET_BASIC_RATE\n"));
1621 if (poid_par_priv->type_of_oid != SET_OID)
1622 return NDIS_STATUS_NOT_ACCEPTED;
1624 ratevalue = *((u32 *)poid_par_priv->information_buf);
1626 for (i = 0; i < NumRates; i++) {
1627 if (ratevalue == mpdatarate[i])
1628 datarates[i] = mpdatarate[i];
1630 datarates[i] = 0xff;
1631 RT_TRACE(_module_rtl871x_ioctl_c_, _drv_info_, ("basicrate_inx=%d\n", datarates[i]));
1634 _irqlevel_changed_(&oldirql, LOWER);
1636 if (rtw_setbasicrate_cmd(padapter, datarates) != _SUCCESS)
1637 status = NDIS_STATUS_NOT_ACCEPTED;
1639 _irqlevel_changed_(&oldirql, RAISE);
1641 RT_TRACE(_module_mp_, _drv_notice_,
1642 ("-OID_RT_PRO_SET_BASIC_RATE: status=0x%08X\n", status));
1651 /* ------------------------------------------------------------------------------ */
1652 NDIS_STATUS oid_rt_pro_qry_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
1655 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1657 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1661 if (poid_par_priv->type_of_oid != QUERY_OID)
1662 return NDIS_STATUS_NOT_ACCEPTED;
1664 if (poid_par_priv->information_buf_len < 8)
1665 return NDIS_STATUS_INVALID_LENGTH;
1667 *poid_par_priv->bytes_rw = 8;
1668 _rtw_memcpy(poid_par_priv->information_buf, &(adapter_to_pwrctl(Adapter)->pwr_mode), 8);
1669 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1671 RT_TRACE(_module_mp_, _drv_notice_,
1672 ("-oid_rt_pro_qry_pwrstate_hdl: pwr_mode=%d smart_ps=%d\n",
1673 adapter_to_pwrctl(Adapter)->pwr_mode, adapter_to_pwrctl(Adapter)->smart_ps));
1682 /* ------------------------------------------------------------------------------ */
1683 NDIS_STATUS oid_rt_pro_set_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
1686 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1688 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1690 uint pwr_mode, smart_ps;
1694 RT_TRACE(_module_mp_, _drv_notice_, ("+Set OID_RT_PRO_SET_PWRSTATE\n"));
1696 if (poid_par_priv->type_of_oid != SET_OID)
1697 return NDIS_STATUS_NOT_ACCEPTED;
1699 *poid_par_priv->bytes_rw = 0;
1700 *poid_par_priv->bytes_needed = 8;
1702 if (poid_par_priv->information_buf_len < 8)
1703 return NDIS_STATUS_INVALID_LENGTH;
1705 pwr_mode = *(uint *)(poid_par_priv->information_buf);
1706 smart_ps = *(uint *)((int)poid_par_priv->information_buf + 4);
1708 *poid_par_priv->bytes_rw = 8;
1717 /* ------------------------------------------------------------------------------ */
1718 NDIS_STATUS oid_rt_pro_h2c_set_rate_table_hdl(struct oid_par_priv *poid_par_priv)
1721 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1723 #ifdef PLATFORM_OS_XP
1726 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1728 struct setratable_parm *prate_table;
1733 if (poid_par_priv->type_of_oid != SET_OID)
1734 return NDIS_STATUS_NOT_ACCEPTED;
1736 *poid_par_priv->bytes_needed = sizeof(struct setratable_parm);
1737 if (poid_par_priv->information_buf_len < sizeof(struct setratable_parm))
1738 return NDIS_STATUS_INVALID_LENGTH;
1740 prate_table = (struct setratable_parm *)poid_par_priv->information_buf;
1742 _irqlevel_changed_(&oldirql, LOWER);
1743 res = rtw_setrttbl_cmd(Adapter, prate_table);
1744 _irqlevel_changed_(&oldirql, RAISE);
1747 status = NDIS_STATUS_FAILURE;
1756 /* ------------------------------------------------------------------------------ */
1757 NDIS_STATUS oid_rt_pro_h2c_get_rate_table_hdl(struct oid_par_priv *poid_par_priv)
1760 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1762 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1766 if (poid_par_priv->type_of_oid != QUERY_OID)
1767 return NDIS_STATUS_NOT_ACCEPTED;
1770 struct mp_wi_cntx *pmp_wi_cntx = &(Adapter->mppriv.wi_cntx);
1772 DEBUG_INFO(("===> Set OID_RT_PRO_H2C_GET_RATE_TABLE.\n"));
1774 if (pmp_wi_cntx->bmp_wi_progress == _TRUE) {
1775 DEBUG_ERR(("\n mp workitem is progressing, not allow to set another workitem right now!!!\n"));
1776 Status = NDIS_STATUS_NOT_ACCEPTED;
1779 pmp_wi_cntx->bmp_wi_progress = _TRUE;
1780 pmp_wi_cntx->param.bcompleted = _FALSE;
1781 pmp_wi_cntx->param.act_type = MPT_GET_RATE_TABLE;
1782 pmp_wi_cntx->param.io_offset = 0x0;
1783 pmp_wi_cntx->param.bytes_cnt = sizeof(struct getratable_rsp);
1784 pmp_wi_cntx->param.io_value = 0xffffffff;
1786 res = rtw_getrttbl_cmd(Adapter, (struct getratable_rsp *)pmp_wi_cntx->param.data);
1787 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1788 if (res != _SUCCESS)
1789 Status = NDIS_STATUS_NOT_ACCEPTED;
1791 DEBUG_INFO(("\n <=== Set OID_RT_PRO_H2C_GET_RATE_TABLE.\n"));
1802 /* **************** oid_rtl_seg_87_12_00 section start **************** */
1803 NDIS_STATUS oid_rt_pro_encryption_ctrl_hdl(struct oid_par_priv *poid_par_priv)
1806 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1807 struct security_priv *psecuritypriv = &Adapter->securitypriv;
1809 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1811 ENCRY_CTRL_STATE encry_mode;
1814 *poid_par_priv->bytes_needed = sizeof(u8);
1815 if (poid_par_priv->information_buf_len < *poid_par_priv->bytes_needed)
1816 return NDIS_STATUS_INVALID_LENGTH;
1818 if (poid_par_priv->type_of_oid == SET_OID) {
1819 encry_mode = *((u8 *)poid_par_priv->information_buf);
1820 switch (encry_mode) {
1823 Adapter->registrypriv.software_decrypt = _FALSE;
1824 Adapter->registrypriv.software_encrypt = _FALSE;
1826 psecuritypriv->sw_decrypt = _FALSE;
1827 psecuritypriv->sw_encrypt = _FALSE;
1832 Adapter->registrypriv.software_decrypt = _TRUE;
1833 Adapter->registrypriv.software_encrypt = _TRUE;
1835 psecuritypriv->sw_decrypt = _TRUE;
1836 psecuritypriv->sw_encrypt = _TRUE;
1839 case HW_ENCRY_SW_DECRY:
1841 Adapter->registrypriv.software_decrypt = _TRUE;
1842 Adapter->registrypriv.software_encrypt = _FALSE;
1844 psecuritypriv->sw_decrypt = _TRUE;
1845 psecuritypriv->sw_encrypt = _FALSE;
1848 case SW_ENCRY_HW_DECRY:
1850 Adapter->registrypriv.software_decrypt = _FALSE;
1851 Adapter->registrypriv.software_encrypt = _TRUE;
1853 psecuritypriv->sw_decrypt = _FALSE;
1854 psecuritypriv->sw_encrypt = _TRUE;
1859 RT_TRACE(_module_rtl871x_ioctl_c_, _drv_notice_,
1860 ("-oid_rt_pro_encryption_ctrl_hdl: SET encry_mode=0x%x sw_encrypt=0x%x sw_decrypt=0x%x\n",
1861 encry_mode, psecuritypriv->sw_encrypt, psecuritypriv->sw_decrypt));
1864 if (Adapter->registrypriv.software_encrypt == _FALSE) {
1865 if (Adapter->registrypriv.software_decrypt == _FALSE)
1866 encry_mode = HW_CONTROL;
1868 encry_mode = HW_ENCRY_SW_DECRY;
1870 if (Adapter->registrypriv.software_decrypt == _FALSE)
1871 encry_mode = SW_ENCRY_HW_DECRY;
1873 encry_mode = SW_CONTROL;
1877 if ((psecuritypriv->sw_encrypt == _FALSE) && (psecuritypriv->sw_decrypt == _FALSE))
1878 encry_mode = HW_CONTROL;
1879 else if ((psecuritypriv->sw_encrypt == _FALSE) && (psecuritypriv->sw_decrypt == _TRUE))
1880 encry_mode = HW_ENCRY_SW_DECRY;
1881 else if ((psecuritypriv->sw_encrypt == _TRUE) && (psecuritypriv->sw_decrypt == _FALSE))
1882 encry_mode = SW_ENCRY_HW_DECRY;
1883 else if ((psecuritypriv->sw_encrypt == _TRUE) && (psecuritypriv->sw_decrypt == _TRUE))
1884 encry_mode = SW_CONTROL;
1888 *(u8 *)poid_par_priv->information_buf = encry_mode;
1889 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1891 RT_TRACE(_module_mp_, _drv_notice_,
1892 ("-oid_rt_pro_encryption_ctrl_hdl: QUERY encry_mode=0x%x\n",
1901 /* ------------------------------------------------------------------------------ */
1902 NDIS_STATUS oid_rt_pro_add_sta_info_hdl(struct oid_par_priv *poid_par_priv)
1905 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1907 #ifdef PLATFORM_OS_XP
1910 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1912 struct sta_info *psta = NULL;
1916 if (poid_par_priv->type_of_oid != SET_OID)
1917 return NDIS_STATUS_NOT_ACCEPTED;
1919 *poid_par_priv->bytes_needed = ETH_ALEN;
1920 if (poid_par_priv->information_buf_len < *poid_par_priv->bytes_needed)
1921 return NDIS_STATUS_INVALID_LENGTH;
1923 macaddr = (UCHAR *) poid_par_priv->information_buf ;
1925 RT_TRACE(_module_rtl871x_ioctl_c_, _drv_notice_,
1926 ("OID_RT_PRO_ADD_STA_INFO: addr="MAC_FMT"\n", MAC_ARG(macaddr)));
1928 _irqlevel_changed_(&oldirql, LOWER);
1930 psta = rtw_get_stainfo(&Adapter->stapriv, macaddr);
1932 if (psta == NULL) { /* the sta have been in sta_info_queue => do nothing */
1933 psta = rtw_alloc_stainfo(&Adapter->stapriv, macaddr);
1936 RT_TRACE(_module_rtl871x_ioctl_c_, _drv_err_, ("Can't alloc sta_info when OID_RT_PRO_ADD_STA_INFO\n"));
1937 status = NDIS_STATUS_FAILURE;
1939 } else { /* (between drv has received this event before and fw have not yet to set key to CAM_ENTRY) */
1940 RT_TRACE(_module_rtl871x_ioctl_c_, _drv_err_,
1941 ("Error: OID_RT_PRO_ADD_STA_INFO: sta has been in sta_hash_queue\n"));
1944 _irqlevel_changed_(&oldirql, RAISE);
1951 /* ------------------------------------------------------------------------------ */
1952 NDIS_STATUS oid_rt_pro_dele_sta_info_hdl(struct oid_par_priv *poid_par_priv)
1955 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1957 #ifdef PLATFORM_OS_XP
1960 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1962 struct sta_info *psta = NULL;
1966 if (poid_par_priv->type_of_oid != SET_OID)
1967 return NDIS_STATUS_NOT_ACCEPTED;
1969 *poid_par_priv->bytes_needed = ETH_ALEN;
1970 if (poid_par_priv->information_buf_len < *poid_par_priv->bytes_needed)
1971 return NDIS_STATUS_INVALID_LENGTH;
1973 macaddr = (UCHAR *) poid_par_priv->information_buf ;
1974 RT_TRACE(_module_rtl871x_ioctl_c_, _drv_notice_,
1975 ("+OID_RT_PRO_ADD_STA_INFO: addr="MAC_FMT"\n", MAC_ARG(macaddr)));
1977 psta = rtw_get_stainfo(&Adapter->stapriv, macaddr);
1979 /* _enter_critical(&(Adapter->stapriv.sta_hash_lock), &irqL); */
1980 rtw_free_stainfo(Adapter, psta);
1981 /* _exit_critical(&(Adapter->stapriv.sta_hash_lock), &irqL); */
1989 /* ------------------------------------------------------------------------------ */
1991 static u32 mp_query_drv_var(_adapter *padapter, u8 offset, u32 var)
1993 #ifdef CONFIG_SDIO_HCI
1997 tmp_blk_num = rtw_read16(padapter, SDIO_RX0_RDYBLK_NUM);
1998 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));
1999 if (adapter_to_dvobj(padapter)->rxblknum != tmp_blk_num) {
2000 RT_TRACE(_module_mp_, _drv_err_, ("Query Information, mp_query_drv_var call recv rx\n"));
2001 /* sd_recv_rxfifo(padapter); */
2006 if (offset <= 100) { /* For setting data rate and query data rate */
2007 if (offset == 100) { /* For query data rate */
2008 RT_TRACE(_module_mp_, _drv_emerg_, ("\n mp_query_drv_var: offset(%d): query rate=0x%.2x\n", offset, padapter->registrypriv.tx_rate));
2009 var = padapter->registrypriv.tx_rate;
2011 } else if (offset < 0x1d) { /* For setting data rate */
2012 padapter->registrypriv.tx_rate = offset;
2013 var = padapter->registrypriv.tx_rate;
2014 padapter->registrypriv.use_rate = _TRUE;
2015 RT_TRACE(_module_mp_, _drv_emerg_, ("\n mp_query_drv_var: offset(%d): set rate=0x%.2x\n", offset, padapter->registrypriv.tx_rate));
2016 } else { /* not use the data rate */
2017 padapter->registrypriv.use_rate = _FALSE;
2018 RT_TRACE(_module_mp_, _drv_emerg_, ("\n mp_query_drv_var: offset(%d) out of rate range\n", offset));
2020 } else if (offset <= 110) { /* for setting debug level */
2021 RT_TRACE(_module_mp_, _drv_emerg_, (" mp_query_drv_var: offset(%d) for set debug level\n", offset));
2022 if (offset == 110) { /* For query data rate */
2023 RT_TRACE(_module_mp_, _drv_emerg_, (" mp_query_drv_var: offset(%d): query dbg level=0x%.2x\n", offset, padapter->registrypriv.dbg_level));
2024 padapter->registrypriv.dbg_level = GlobalDebugLevel;
2025 var = padapter->registrypriv.dbg_level;
2026 } else if (offset < 110 && offset > 100) {
2027 RT_TRACE(_module_mp_, _drv_emerg_, (" mp_query_drv_var: offset(%d): set dbg level=0x%.2x\n", offset, offset - 100));
2028 padapter->registrypriv.dbg_level = GlobalDebugLevel = offset - 100;
2029 var = padapter->registrypriv.dbg_level;
2030 RT_TRACE(_module_mp_, _drv_emerg_, (" mp_query_drv_var(_drv_emerg_): offset(%d): set dbg level=0x%.2x\n", offset, GlobalDebugLevel));
2031 RT_TRACE(_module_mp_, _drv_alert_, (" mp_query_drv_var(_drv_alert_): offset(%d): set dbg level=0x%.2x\n", offset, GlobalDebugLevel));
2032 RT_TRACE(_module_mp_, _drv_crit_, (" mp_query_drv_var(_drv_crit_): offset(%d): set dbg level=0x%.2x\n", offset, GlobalDebugLevel));
2033 RT_TRACE(_module_mp_, _drv_err_, (" mp_query_drv_var(_drv_err_): offset(%d): set dbg level=0x%.2x\n", offset, GlobalDebugLevel));
2034 RT_TRACE(_module_mp_, _drv_warning_, (" mp_query_drv_var(_drv_warning_): offset(%d): set dbg level=0x%.2x\n", offset, GlobalDebugLevel));
2035 RT_TRACE(_module_mp_, _drv_notice_, (" mp_query_drv_var(_drv_notice_): offset(%d): set dbg level=0x%.2x\n", offset, GlobalDebugLevel));
2036 RT_TRACE(_module_mp_, _drv_info_, (" mp_query_drv_var(_drv_info_): offset(%d): set dbg level=0x%.2x\n", offset, GlobalDebugLevel));
2037 RT_TRACE(_module_mp_, _drv_debug_, (" mp_query_drv_var(_drv_debug_): offset(%d): set dbg level=0x%.2x\n", offset, GlobalDebugLevel));
2040 } else if (offset > 110 && offset < 116) {
2041 if (115 == offset) {
2042 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", \
2043 offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(
2044 padapter)->rx_block_mode));
2048 adapter_to_dvobj(padapter)->tx_block_mode = 1;
2049 adapter_to_dvobj(padapter)->rx_block_mode = 1;
2050 RT_TRACE(_module_mp_, _drv_emerg_, \
2051 (" 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", \
2052 offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
2055 adapter_to_dvobj(padapter)->tx_block_mode = 1;
2056 adapter_to_dvobj(padapter)->rx_block_mode = 0;
2057 RT_TRACE(_module_mp_, _drv_emerg_, \
2058 (" 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", \
2059 offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
2062 adapter_to_dvobj(padapter)->tx_block_mode = 0;
2063 adapter_to_dvobj(padapter)->rx_block_mode = 1;
2064 RT_TRACE(_module_mp_, _drv_emerg_, \
2065 (" 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", \
2066 offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
2069 adapter_to_dvobj(padapter)->tx_block_mode = 0;
2070 adapter_to_dvobj(padapter)->rx_block_mode = 0;
2071 RT_TRACE(_module_mp_, _drv_emerg_, \
2072 (" 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", \
2073 offset, adapter_to_dvobj(padapter)->tx_block_mode, adapter_to_dvobj(padapter)->rx_block_mode));
2082 } else if (offset >= 127) {
2086 chg_idx = offset - 0x80;
2087 tmp_dbg_comp = BIT(chg_idx);
2088 prnt_dbg_comp = padapter->registrypriv.dbg_component = GlobalDebugComponents;
2089 RT_TRACE(_module_mp_, _drv_emerg_,
2090 (" 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,
2091 prnt_dbg_comp, GlobalDebugComponents, padapter->registrypriv.dbg_component));
2092 if (offset == 127) {
2093 /* prnt_dbg_comp=padapter->registrypriv.dbg_component= GlobalDebugComponents; */
2094 var = (u32)(padapter->registrypriv.dbg_component);
2095 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,
2096 padapter->registrypriv.dbg_component, prnt_dbg_comp));
2097 prnt_dbg_comp = GlobalDebugComponents;
2098 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,
2099 padapter->registrypriv.dbg_component, prnt_dbg_comp));
2100 prnt_dbg_comp = GlobalDebugComponents = padapter->registrypriv.dbg_component;
2101 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,
2102 padapter->registrypriv.dbg_component, prnt_dbg_comp));
2105 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,
2106 offset, padapter->registrypriv.dbg_component, prnt_dbg_comp, chg_idx));
2107 prnt_dbg_comp = GlobalDebugComponents;
2108 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,
2109 offset, padapter->registrypriv.dbg_component, prnt_dbg_comp,
2110 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) */
2111 prnt_dbg_comp = GlobalDebugComponents = padapter->registrypriv.dbg_component;
2112 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,
2113 padapter->registrypriv.dbg_component, prnt_dbg_comp));
2115 if (GlobalDebugComponents & tmp_dbg_comp) {
2116 /* this bit is already set, now clear it */
2117 GlobalDebugComponents = GlobalDebugComponents & (~tmp_dbg_comp);
2119 /* this bit is not set, now set it. */
2120 GlobalDebugComponents = GlobalDebugComponents | tmp_dbg_comp;
2122 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,
2123 tmp_dbg_comp, prnt_dbg_comp));
2124 prnt_dbg_comp = GlobalDebugComponents;
2125 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,
2126 tmp_dbg_comp, prnt_dbg_comp));
2128 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,
2130 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,
2131 GlobalDebugComponents));
2132 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,
2133 GlobalDebugComponents));
2134 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,
2135 GlobalDebugComponents));
2136 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,
2137 GlobalDebugComponents));
2138 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,
2139 GlobalDebugComponents));
2140 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,
2141 offset, GlobalDebugComponents));
2142 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,
2143 GlobalDebugComponents));
2144 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,
2145 GlobalDebugComponents));
2146 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,
2147 GlobalDebugComponents));
2148 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,
2149 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,
2151 GlobalDebugComponents));
2152 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,
2153 offset, GlobalDebugComponents));
2154 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,
2155 offset, GlobalDebugComponents));
2156 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,
2157 GlobalDebugComponents));
2158 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,
2159 GlobalDebugComponents));
2160 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,
2161 offset, GlobalDebugComponents));
2162 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",
2163 offset, offset, GlobalDebugComponents));
2164 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",
2165 offset, offset, GlobalDebugComponents));
2166 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,
2167 offset, GlobalDebugComponents));
2168 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,
2169 GlobalDebugComponents));
2170 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,
2171 GlobalDebugComponents));
2172 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,
2173 offset, GlobalDebugComponents));
2174 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));
2175 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,
2176 GlobalDebugComponents));
2177 var = (u32)(GlobalDebugComponents);
2178 /* GlobalDebugComponents=padapter->registrypriv.dbg_component; */
2179 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));
2183 RT_TRACE(_module_mp_, _drv_emerg_, ("\n mp_query_drv_var: offset(%d) >110\n", offset));
2191 NDIS_STATUS oid_rt_pro_query_dr_variable_hdl(struct oid_par_priv *poid_par_priv)
2194 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2196 #ifdef PLATFORM_OS_XP
2199 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2201 DR_VARIABLE_STRUCT *pdrv_var;
2204 if (poid_par_priv->type_of_oid != QUERY_OID)
2205 return NDIS_STATUS_NOT_ACCEPTED;
2207 *poid_par_priv->bytes_needed = sizeof(DR_VARIABLE_STRUCT);
2208 if (poid_par_priv->information_buf_len < *poid_par_priv->bytes_needed)
2209 return NDIS_STATUS_INVALID_LENGTH;
2211 RT_TRACE(_module_mp_, _drv_notice_, ("+Query Information, OID_RT_PRO_QUERY_DR_VARIABLE\n"));
2213 pdrv_var = (struct _DR_VARIABLE_STRUCT_ *)poid_par_priv->information_buf;
2215 _irqlevel_changed_(&oldirql, LOWER);
2216 pdrv_var->variable = mp_query_drv_var(Adapter, pdrv_var->offset, pdrv_var->variable);
2217 _irqlevel_changed_(&oldirql, RAISE);
2219 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2221 RT_TRACE(_module_mp_, _drv_notice_,
2222 ("-oid_rt_pro_query_dr_variable_hdl: offset=0x%x valule=0x%x\n",
2223 pdrv_var->offset, pdrv_var->variable));
2230 /* ------------------------------------------------------------------------------ */
2231 NDIS_STATUS oid_rt_pro_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
2234 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2236 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2238 RT_TRACE(_module_mp_, _drv_err_, ("oid_rt_pro_rx_packet_type_hdl...................\n"));
2240 if (poid_par_priv->information_buf_len < sizeof(UCHAR)) {
2241 status = NDIS_STATUS_INVALID_LENGTH;
2242 *poid_par_priv->bytes_needed = sizeof(UCHAR);
2246 if (poid_par_priv->type_of_oid == SET_OID) {
2247 Adapter->mppriv.rx_with_status = *(UCHAR *) poid_par_priv->information_buf;
2248 RT_TRACE(_module_rtl871x_ioctl_c_, _drv_err_, ("Query Information, OID_RT_PRO_RX_PACKET_TYPE:%d\n", \
2249 Adapter->mppriv.rx_with_status));
2251 RT_TRACE(_module_rtl871x_ioctl_c_, _drv_err_, ("MAC addr=0x%x:0x%x:0x%x:0x%x:0x%x:0x%x\n",
2252 Adapter->eeprompriv.mac_addr[0], Adapter->eeprompriv.mac_addr[1], Adapter->eeprompriv.mac_addr[2], \
2253 Adapter->eeprompriv.mac_addr[3], Adapter->eeprompriv.mac_addr[4], Adapter->eeprompriv.mac_addr[5]));
2256 *(UCHAR *) poid_par_priv->information_buf = Adapter->mppriv.rx_with_status;
2257 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2259 RT_TRACE(_module_rtl871x_ioctl_c_, _drv_err_, ("Query Information, OID_RT_PRO_RX_PACKET_TYPE:%d\n", \
2260 Adapter->mppriv.rx_with_status));
2262 /* *(u32 *)&Adapter->eeprompriv.mac_addr[0]=rtw_read32(Adapter, 0x10250050); */
2263 /* *(u16 *)&Adapter->eeprompriv.mac_addr[4]=rtw_read16(Adapter, 0x10250054); */
2264 RT_TRACE(_module_rtl871x_ioctl_c_, _drv_err_, ("MAC addr=0x%x:0x%x:0x%x:0x%x:0x%x:0x%x\n",
2265 Adapter->eeprompriv.mac_addr[0], Adapter->eeprompriv.mac_addr[1], Adapter->eeprompriv.mac_addr[2], \
2266 Adapter->eeprompriv.mac_addr[3], Adapter->eeprompriv.mac_addr[4], Adapter->eeprompriv.mac_addr[5]));
2270 return NDIS_STATUS_SUCCESS;
2272 /* ------------------------------------------------------------------------------ */
2273 NDIS_STATUS oid_rt_pro_read_efuse_hdl(struct oid_par_priv *poid_par_priv)
2275 #ifdef PLATFORM_OS_XP
2278 PEFUSE_ACCESS_STRUCT pefuse;
2280 u16 addr = 0, cnts = 0, max_available_size = 0;
2281 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2282 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2286 if (poid_par_priv->type_of_oid != QUERY_OID)
2287 return NDIS_STATUS_NOT_ACCEPTED;
2289 if (poid_par_priv->information_buf_len < sizeof(EFUSE_ACCESS_STRUCT))
2290 return NDIS_STATUS_INVALID_LENGTH;
2292 pefuse = (PEFUSE_ACCESS_STRUCT)poid_par_priv->information_buf;
2293 addr = pefuse->start_addr;
2294 cnts = pefuse->cnts;
2295 data = pefuse->data;
2297 RT_TRACE(_module_mp_, _drv_notice_,
2298 ("+oid_rt_pro_read_efuse_hd: buf_len=%d addr=%d cnts=%d\n",
2299 poid_par_priv->information_buf_len, addr, cnts));
2301 EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
2303 if ((addr + cnts) > max_available_size) {
2304 RT_TRACE(_module_mp_, _drv_err_, ("!oid_rt_pro_read_efuse_hdl: parameter error!\n"));
2305 return NDIS_STATUS_NOT_ACCEPTED;
2308 _irqlevel_changed_(&oldirql, LOWER);
2309 if (rtw_efuse_access(Adapter, _FALSE, addr, cnts, data) == _FAIL) {
2310 RT_TRACE(_module_mp_, _drv_err_, ("!oid_rt_pro_read_efuse_hdl: rtw_efuse_access FAIL!\n"));
2311 status = NDIS_STATUS_FAILURE;
2313 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2314 _irqlevel_changed_(&oldirql, RAISE);
2320 /* ------------------------------------------------------------------------------ */
2321 NDIS_STATUS oid_rt_pro_write_efuse_hdl(struct oid_par_priv *poid_par_priv)
2323 #ifdef PLATFORM_OS_XP
2326 PEFUSE_ACCESS_STRUCT pefuse;
2328 u16 addr = 0, cnts = 0, max_available_size = 0;
2329 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2330 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2335 if (poid_par_priv->type_of_oid != SET_OID)
2336 return NDIS_STATUS_NOT_ACCEPTED;
2338 pefuse = (PEFUSE_ACCESS_STRUCT)poid_par_priv->information_buf;
2339 addr = pefuse->start_addr;
2340 cnts = pefuse->cnts;
2341 data = pefuse->data;
2343 RT_TRACE(_module_mp_, _drv_notice_,
2344 ("+oid_rt_pro_write_efuse_hdl: buf_len=%d addr=0x%04x cnts=%d\n",
2345 poid_par_priv->information_buf_len, addr, cnts));
2347 EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
2349 if ((addr + cnts) > max_available_size) {
2350 RT_TRACE(_module_mp_, _drv_err_, ("!oid_rt_pro_write_efuse_hdl: parameter error"));
2351 return NDIS_STATUS_NOT_ACCEPTED;
2354 _irqlevel_changed_(&oldirql, LOWER);
2355 if (rtw_efuse_access(Adapter, _TRUE, addr, cnts, data) == _FAIL)
2356 status = NDIS_STATUS_FAILURE;
2357 _irqlevel_changed_(&oldirql, RAISE);
2363 /* ------------------------------------------------------------------------------ */
2364 NDIS_STATUS oid_rt_pro_rw_efuse_pgpkt_hdl(struct oid_par_priv *poid_par_priv)
2366 #ifdef PLATFORM_OS_XP
2369 PPGPKT_STRUCT ppgpkt;
2370 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2371 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2375 /* RT_TRACE(_module_mp_, _drv_info_, ("+oid_rt_pro_rw_efuse_pgpkt_hdl\n")); */
2377 *poid_par_priv->bytes_rw = 0;
2379 if (poid_par_priv->information_buf_len < sizeof(PGPKT_STRUCT))
2380 return NDIS_STATUS_INVALID_LENGTH;
2382 ppgpkt = (PPGPKT_STRUCT)poid_par_priv->information_buf;
2384 _irqlevel_changed_(&oldirql, LOWER);
2386 if (poid_par_priv->type_of_oid == QUERY_OID) {
2387 RT_TRACE(_module_mp_, _drv_notice_,
2388 ("oid_rt_pro_rw_efuse_pgpkt_hdl: Read offset=0x%x\n", \
2391 Efuse_PowerSwitch(Adapter, _FALSE, _TRUE);
2392 if (Efuse_PgPacketRead(Adapter, ppgpkt->offset, ppgpkt->data, _FALSE) == _TRUE)
2393 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2395 status = NDIS_STATUS_FAILURE;
2396 Efuse_PowerSwitch(Adapter, _FALSE, _FALSE);
2398 RT_TRACE(_module_mp_, _drv_notice_,
2399 ("oid_rt_pro_rw_efuse_pgpkt_hdl: Write offset=0x%x word_en=0x%x\n", \
2400 ppgpkt->offset, ppgpkt->word_en));
2402 Efuse_PowerSwitch(Adapter, _TRUE, _TRUE);
2403 if (Efuse_PgPacketWrite(Adapter, ppgpkt->offset, ppgpkt->word_en, ppgpkt->data, _FALSE) == _TRUE)
2404 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2406 status = NDIS_STATUS_FAILURE;
2407 Efuse_PowerSwitch(Adapter, _TRUE, _FALSE);
2410 _irqlevel_changed_(&oldirql, RAISE);
2412 RT_TRACE(_module_mp_, _drv_info_,
2413 ("-oid_rt_pro_rw_efuse_pgpkt_hdl: status=0x%08X\n", status));
2419 /* ------------------------------------------------------------------------------ */
2420 NDIS_STATUS oid_rt_get_efuse_current_size_hdl(struct oid_par_priv *poid_par_priv)
2422 #ifdef PLATFORM_OS_XP
2427 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2428 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2432 if (poid_par_priv->type_of_oid != QUERY_OID)
2433 return NDIS_STATUS_NOT_ACCEPTED;
2435 if (poid_par_priv->information_buf_len < sizeof(u32))
2436 return NDIS_STATUS_INVALID_LENGTH;
2438 _irqlevel_changed_(&oldirql, LOWER);
2439 ret = efuse_GetCurrentSize(Adapter, &size);
2440 _irqlevel_changed_(&oldirql, RAISE);
2441 if (ret == _SUCCESS) {
2442 *(u32 *)poid_par_priv->information_buf = size;
2443 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2445 status = NDIS_STATUS_FAILURE;
2451 /* ------------------------------------------------------------------------------ */
2452 NDIS_STATUS oid_rt_get_efuse_max_size_hdl(struct oid_par_priv *poid_par_priv)
2454 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2455 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2459 if (poid_par_priv->type_of_oid != QUERY_OID)
2460 return NDIS_STATUS_NOT_ACCEPTED;
2462 if (poid_par_priv->information_buf_len < sizeof(u32))
2463 return NDIS_STATUS_INVALID_LENGTH;
2465 *(u32 *)poid_par_priv->information_buf = efuse_GetMaxSize(Adapter);
2466 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2468 RT_TRACE(_module_mp_, _drv_info_,
2469 ("-oid_rt_get_efuse_max_size_hdl: size=%d status=0x%08X\n",
2470 *(int *)poid_par_priv->information_buf, status));
2476 /* ------------------------------------------------------------------------------ */
2477 NDIS_STATUS oid_rt_pro_efuse_hdl(struct oid_par_priv *poid_par_priv)
2483 RT_TRACE(_module_mp_, _drv_info_, ("+oid_rt_pro_efuse_hdl\n"));
2485 if (poid_par_priv->type_of_oid == QUERY_OID)
2486 status = oid_rt_pro_read_efuse_hdl(poid_par_priv);
2488 status = oid_rt_pro_write_efuse_hdl(poid_par_priv);
2490 RT_TRACE(_module_mp_, _drv_info_, ("-oid_rt_pro_efuse_hdl: status=0x%08X\n", status));
2496 /* ------------------------------------------------------------------------------ */
2497 NDIS_STATUS oid_rt_pro_efuse_map_hdl(struct oid_par_priv *poid_par_priv)
2499 #ifdef PLATFORM_OS_XP
2503 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2504 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2509 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_pro_efuse_map_hdl\n"));
2511 EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (PVOID)&mapLen, _FALSE);
2513 *poid_par_priv->bytes_rw = 0;
2515 if (poid_par_priv->information_buf_len < mapLen)
2516 return NDIS_STATUS_INVALID_LENGTH;
2518 data = (u8 *)poid_par_priv->information_buf;
2520 _irqlevel_changed_(&oldirql, LOWER);
2522 if (poid_par_priv->type_of_oid == QUERY_OID) {
2523 RT_TRACE(_module_mp_, _drv_info_,
2524 ("oid_rt_pro_efuse_map_hdl: READ\n"));
2526 if (rtw_efuse_map_read(Adapter, 0, mapLen, data) == _SUCCESS)
2527 *poid_par_priv->bytes_rw = mapLen;
2529 RT_TRACE(_module_mp_, _drv_err_,
2530 ("oid_rt_pro_efuse_map_hdl: READ fail\n"));
2531 status = NDIS_STATUS_FAILURE;
2535 RT_TRACE(_module_mp_, _drv_info_,
2536 ("oid_rt_pro_efuse_map_hdl: WRITE\n"));
2538 if (rtw_efuse_map_write(Adapter, 0, mapLen, data) == _SUCCESS)
2539 *poid_par_priv->bytes_rw = mapLen;
2541 RT_TRACE(_module_mp_, _drv_err_,
2542 ("oid_rt_pro_efuse_map_hdl: WRITE fail\n"));
2543 status = NDIS_STATUS_FAILURE;
2547 _irqlevel_changed_(&oldirql, RAISE);
2549 RT_TRACE(_module_mp_, _drv_info_,
2550 ("-oid_rt_pro_efuse_map_hdl: status=0x%08X\n", status));
2557 NDIS_STATUS oid_rt_set_crystal_cap_hdl(struct oid_par_priv *poid_par_priv)
2559 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2561 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2563 #ifdef PLATFORM_OS_XP
2567 u32 crystal_cap = 0;
2571 if (poid_par_priv->type_of_oid != SET_OID)
2572 return NDIS_STATUS_NOT_ACCEPTED;
2574 if (poid_par_priv->information_buf_len < sizeof(u32))
2575 return NDIS_STATUS_INVALID_LENGTH;
2577 crystal_cap = *((u32 *)poid_par_priv->information_buf); /* 4 */
2578 if (crystal_cap > 0xf)
2579 return NDIS_STATUS_NOT_ACCEPTED;
2581 Adapter->mppriv.curr_crystalcap = crystal_cap;
2583 _irqlevel_changed_(&oldirql, LOWER);
2584 SetCrystalCap(Adapter);
2585 _irqlevel_changed_(&oldirql, RAISE);
2593 NDIS_STATUS oid_rt_set_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
2595 #ifdef PLATFORM_OS_XP
2599 /* u32 rcr_val32; */
2600 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2601 /* PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); */
2605 RT_TRACE(_module_mp_, _drv_notice_, ("+oid_rt_set_rx_packet_type_hdl\n"));
2607 if (poid_par_priv->type_of_oid != SET_OID)
2608 return NDIS_STATUS_NOT_ACCEPTED;
2610 if (poid_par_priv->information_buf_len < sizeof(u8))
2611 return NDIS_STATUS_INVALID_LENGTH;
2613 rx_pkt_type = *((u8 *)poid_par_priv->information_buf); /* 4 */
2615 RT_TRACE(_module_mp_, _drv_info_, ("rx_pkt_type: %x\n", rx_pkt_type));
2617 _irqlevel_changed_(&oldirql, LOWER);
2619 rcr_val8 = rtw_read8(Adapter, 0x10250048);/* RCR */
2620 rcr_val8 &= ~(RCR_AB | RCR_AM | RCR_APM | RCR_AAP);
2622 if (rx_pkt_type == RX_PKT_BROADCAST)
2623 rcr_val8 |= (RCR_AB | RCR_ACRC32);
2624 else if (rx_pkt_type == RX_PKT_DEST_ADDR)
2625 rcr_val8 |= (RCR_AAP | RCR_AM | RCR_ACRC32);
2626 else if (rx_pkt_type == RX_PKT_PHY_MATCH)
2627 rcr_val8 |= (RCR_APM | RCR_ACRC32);
2629 rcr_val8 &= ~(RCR_AAP | RCR_APM | RCR_AM | RCR_AB | RCR_ACRC32);
2630 rtw_write8(padapter, 0x10250048, rcr_val8);
2632 rcr_val32 = rtw_read32(padapter, RCR);/* RCR = 0x10250048 */
2633 rcr_val32 &= ~(RCR_CBSSID | RCR_AB | RCR_AM | RCR_APM | RCR_AAP);
2635 if (rx_pkt_type == RX_PKT_BROADCAST)
2636 rcr_val32 |= (RCR_AB | RCR_AM | RCR_APM | RCR_AAP | RCR_ACRC32);
2637 else if (rx_pkt_type == RX_PKT_DEST_ADDR) {
2638 /* rcr_val32 |= (RCR_CBSSID|RCR_AAP|RCR_AM|RCR_ACRC32); */
2639 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); */
2644 rcr_val32 &= ~(RCR_AAP | RCR_APM | RCR_AM | RCR_AB | RCR_ACRC32);
2646 switch (rx_pkt_type) {
2647 case RX_PKT_BROADCAST:
2648 rcr_val32 |= (RCR_AB | RCR_AM | RCR_APM | RCR_AAP | RCR_ACRC32);
2650 case RX_PKT_DEST_ADDR:
2651 rcr_val32 |= (RCR_AB | RCR_AM | RCR_APM | RCR_AAP | RCR_ACRC32);
2653 case RX_PKT_PHY_MATCH:
2654 rcr_val32 |= (RCR_APM | RCR_ACRC32);
2657 rcr_val32 &= ~(RCR_AAP | RCR_APM | RCR_AM | RCR_AB | RCR_ACRC32);
2661 if (rx_pkt_type == RX_PKT_DEST_ADDR)
2662 padapter->mppriv.check_mp_pkt = 1;
2664 padapter->mppriv.check_mp_pkt = 0;
2666 rtw_write32(padapter, RCR, rcr_val32);
2669 _irqlevel_changed_(&oldirql, RAISE);
2676 NDIS_STATUS oid_rt_pro_set_tx_agc_offset_hdl(struct oid_par_priv *poid_par_priv)
2679 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2681 #ifdef PLATFORM_OS_XP
2684 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2690 if (poid_par_priv->type_of_oid != SET_OID)
2691 return NDIS_STATUS_NOT_ACCEPTED;
2693 if (poid_par_priv->information_buf_len < sizeof(u32))
2694 return NDIS_STATUS_INVALID_LENGTH;
2696 txagc = *(u32 *)poid_par_priv->information_buf;
2697 RT_TRACE(_module_mp_, _drv_info_,
2698 ("oid_rt_pro_set_tx_agc_offset_hdl: 0x%08x\n", txagc));
2700 _irqlevel_changed_(&oldirql, LOWER);
2701 SetTxAGCOffset(Adapter, txagc);
2702 _irqlevel_changed_(&oldirql, RAISE);
2712 NDIS_STATUS oid_rt_pro_set_pkt_test_mode_hdl(struct oid_par_priv *poid_par_priv)
2715 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2717 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2719 struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
2720 struct mp_priv *pmppriv = &Adapter->mppriv;
2725 if (poid_par_priv->type_of_oid != SET_OID)
2726 return NDIS_STATUS_NOT_ACCEPTED;
2728 if (poid_par_priv->information_buf_len < sizeof(u32))
2729 return NDIS_STATUS_INVALID_LENGTH;
2731 type = *(u32 *)poid_par_priv->information_buf;
2733 if (_LOOPBOOK_MODE_ == type) {
2734 pmppriv->mode = type;
2735 set_fwstate(pmlmepriv, WIFI_MP_LPBK_STATE); /* append txdesc */
2736 RT_TRACE(_module_mp_, _drv_info_, ("test mode change to loopback mode:0x%08x.\n", get_fwstate(pmlmepriv)));
2737 } else if (_2MAC_MODE_ == type) {
2738 pmppriv->mode = type;
2739 _clr_fwstate_(pmlmepriv, WIFI_MP_LPBK_STATE);
2740 RT_TRACE(_module_mp_, _drv_info_, ("test mode change to 2mac mode:0x%08x.\n", get_fwstate(pmlmepriv)));
2742 status = NDIS_STATUS_NOT_ACCEPTED;
2752 unsigned int mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv)
2754 PMP_XMIT_PARM pparm;
2756 struct mp_priv *pmp_priv;
2757 struct pkt_attrib *pattrib;
2759 RT_TRACE(_module_mp_, _drv_notice_, ("+%s\n", __func__));
2761 pparm = (PMP_XMIT_PARM)poid_par_priv->information_buf;
2762 padapter = (PADAPTER)poid_par_priv->adapter_context;
2763 pmp_priv = &padapter->mppriv;
2765 if (poid_par_priv->type_of_oid == QUERY_OID) {
2766 pparm->enable = !pmp_priv->tx.stop;
2767 pparm->count = pmp_priv->tx.sended;
2769 if (pparm->enable == 0)
2770 pmp_priv->tx.stop = 1;
2771 else if (pmp_priv->tx.stop == 1) {
2772 pmp_priv->tx.stop = 0;
2773 pmp_priv->tx.count = pparm->count;
2774 pmp_priv->tx.payload = pparm->payload_type;
2775 pattrib = &pmp_priv->tx.attrib;
2776 pattrib->pktlen = pparm->length;
2777 _rtw_memcpy(pattrib->dst, pparm->da, ETH_ALEN);
2778 SetPacketTx(padapter);
2780 return NDIS_STATUS_FAILURE;
2783 return NDIS_STATUS_SUCCESS;
2787 unsigned int mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv)
2789 unsigned char *pframe, *pmp_pkt;
2790 struct ethhdr *pethhdr;
2791 struct pkt_attrib *pattrib;
2792 struct rtw_ieee80211_hdr *pwlanhdr;
2793 unsigned short *fctrl;
2794 int llc_sz, payload_len;
2795 struct mp_xmit_frame *pxframe = NULL;
2796 struct mp_xmit_packet *pmp_xmitpkt = (struct mp_xmit_packet *)param;
2797 u8 addr3[] = {0x02, 0xE0, 0x4C, 0x87, 0x66, 0x55};
2799 /* RTW_INFO("+mp_ioctl_xmit_packet_hdl\n"); */
2801 pxframe = alloc_mp_xmitframe(&padapter->mppriv);
2802 if (pxframe == NULL) {
2803 DEBUG_ERR(("Can't alloc pmpframe %d:%s\n", __LINE__, __FILE__));
2808 payload_len = pmp_xmitpkt->len - 14;
2809 pmp_pkt = (unsigned char *)pmp_xmitpkt->mem;
2810 pethhdr = (struct ethhdr *)pmp_pkt;
2812 /* RTW_INFO("payload_len=%d, pkt_mem=0x%x\n", pmp_xmitpkt->len, (void*)pmp_xmitpkt->mem); */
2814 /* RTW_INFO("pxframe=0x%x\n", (void*)pxframe); */
2815 /* RTW_INFO("pxframe->mem=0x%x\n", (void*)pxframe->mem); */
2817 /* update attribute */
2818 pattrib = &pxframe->attrib;
2819 memset((u8 *)(pattrib), 0, sizeof(struct pkt_attrib));
2820 pattrib->pktlen = pmp_xmitpkt->len;
2821 pattrib->ether_type = ntohs(pethhdr->h_proto);
2822 pattrib->hdrlen = 24;
2823 pattrib->nr_frags = 1;
2824 pattrib->priority = 0;
2825 #ifndef CONFIG_MP_LINUX
2826 if (IS_MCAST(pethhdr->h_dest))
2827 pattrib->mac_id = 4;
2829 pattrib->mac_id = 5;
2831 pattrib->mac_id = 5;
2835 memset(pxframe->mem, 0 , WLANHDR_OFFSET);
2836 pframe = (u8 *)(pxframe->mem) + WLANHDR_OFFSET;
2838 pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
2840 fctrl = &(pwlanhdr->frame_ctl);
2842 SetFrameSubType(pframe, WIFI_DATA);
2844 _rtw_memcpy(pwlanhdr->addr1, pethhdr->h_dest, ETH_ALEN);
2845 _rtw_memcpy(pwlanhdr->addr2, pethhdr->h_source, ETH_ALEN);
2847 _rtw_memcpy(pwlanhdr->addr3, addr3, ETH_ALEN);
2849 pwlanhdr->seq_ctl = 0;
2850 pframe += pattrib->hdrlen;
2852 llc_sz = rtw_put_snap(pframe, pattrib->ether_type);
2855 _rtw_memcpy(pframe, (void *)(pmp_pkt + 14), payload_len);
2857 pattrib->last_txcmdsz = pattrib->hdrlen + llc_sz + payload_len;
2859 DEBUG_INFO(("issuing mp_xmit_frame, tx_len=%d, ether_type=0x%x\n", pattrib->last_txcmdsz, pattrib->ether_type));
2860 xmit_mp_frame(padapter, pxframe);
2865 /* ------------------------------------------------------------------------------ */
2866 NDIS_STATUS oid_rt_set_power_down_hdl(struct oid_par_priv *poid_par_priv)
2868 #ifdef PLATFORM_OS_XP
2872 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2873 #ifdef PLATFORM_LINUX
2874 #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
2875 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
2881 if (poid_par_priv->type_of_oid != SET_OID) {
2882 status = NDIS_STATUS_NOT_ACCEPTED;
2886 RT_TRACE(_module_mp_, _drv_info_,
2887 ("\n ===> Setoid_rt_set_power_down_hdl.\n"));
2889 _irqlevel_changed_(&oldirql, LOWER);
2891 bpwrup = *(u8 *)poid_par_priv->information_buf;
2892 /* CALL the power_down function */
2893 #ifdef PLATFORM_LINUX
2894 #if defined(CONFIG_RTL8712) /* Linux MP insmod unknown symbol */
2895 dev_power_down(padapter, bpwrup);
2898 _irqlevel_changed_(&oldirql, RAISE);
2900 /* DEBUG_ERR(("\n <=== Query OID_RT_PRO_READ_REGISTER. */
2901 /* Add:0x%08x Width:%d Value:0x%08x\n",RegRWStruct->offset,RegRWStruct->width,RegRWStruct->value)); */
2907 /* ------------------------------------------------------------------------------ */
2908 NDIS_STATUS oid_rt_get_power_mode_hdl(struct oid_par_priv *poid_par_priv)
2911 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2912 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2913 /* #ifdef PLATFORM_OS_XP */
2919 if (poid_par_priv->type_of_oid != QUERY_OID) {
2920 status = NDIS_STATUS_NOT_ACCEPTED;
2923 if (poid_par_priv->information_buf_len < sizeof(u32)) {
2924 status = NDIS_STATUS_INVALID_LENGTH;
2928 RT_TRACE(_module_mp_, _drv_info_,
2929 ("\n ===> oid_rt_get_power_mode_hdl.\n"));
2931 /* _irqlevel_changed_(&oldirql, LOWER); */
2932 *(int *)poid_par_priv->information_buf = Adapter->registrypriv.low_power ? POWER_LOW : POWER_NORMAL;
2933 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2934 /* _irqlevel_changed_(&oldirql, RAISE); */