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_IOCTL_RTL_C_
22 #include <drv_types.h>
24 #ifdef CONFIG_MP_INCLUDED
25 #include <rtw_mp_ioctl.h>
28 struct oid_obj_priv oid_rtl_seg_01_01[] =
30 {1, &oid_null_function}, //0x80
31 {1, &oid_null_function}, //0x81
32 {1, &oid_null_function}, //0x82
33 {1, &oid_null_function}, //0x83//OID_RT_SET_SNIFFER_MODE
34 {1, &oid_rt_get_signal_quality_hdl}, //0x84
35 {1, &oid_rt_get_small_packet_crc_hdl}, //0x85
36 {1, &oid_rt_get_middle_packet_crc_hdl}, //0x86
37 {1, &oid_rt_get_large_packet_crc_hdl}, //0x87
38 {1, &oid_rt_get_tx_retry_hdl}, //0x88
39 {1, &oid_rt_get_rx_retry_hdl}, //0x89
40 {1, &oid_rt_pro_set_fw_dig_state_hdl}, //0x8A
41 {1, &oid_rt_pro_set_fw_ra_state_hdl} , //0x8B
42 {1, &oid_null_function}, //0x8C
43 {1, &oid_null_function}, //0x8D
44 {1, &oid_null_function}, //0x8E
45 {1, &oid_null_function}, //0x8F
46 {1, &oid_rt_get_rx_total_packet_hdl}, //0x90
47 {1, &oid_rt_get_tx_beacon_ok_hdl}, //0x91
48 {1, &oid_rt_get_tx_beacon_err_hdl}, //0x92
49 {1, &oid_rt_get_rx_icv_err_hdl}, //0x93
50 {1, &oid_rt_set_encryption_algorithm_hdl}, //0x94
51 {1, &oid_null_function}, //0x95
52 {1, &oid_rt_get_preamble_mode_hdl}, //0x96
53 {1, &oid_null_function}, //0x97
54 {1, &oid_rt_get_ap_ip_hdl}, //0x98
55 {1, &oid_rt_get_channelplan_hdl}, //0x99
56 {1, &oid_rt_set_preamble_mode_hdl}, //0x9A
57 {1, &oid_rt_set_bcn_intvl_hdl}, //0x9B
58 {1, &oid_null_function}, //0x9C
59 {1, &oid_rt_dedicate_probe_hdl}, //0x9D
60 {1, &oid_null_function}, //0x9E
61 {1, &oid_null_function}, //0x9F
62 {1, &oid_null_function}, //0xA0
63 {1, &oid_null_function}, //0xA1
64 {1, &oid_null_function}, //0xA2
65 {1, &oid_null_function}, //0xA3
66 {1, &oid_null_function}, //0xA4
67 {1, &oid_null_function}, //0xA5
68 {1, &oid_null_function}, //0xA6
69 {1, &oid_rt_get_total_tx_bytes_hdl}, //0xA7
70 {1, &oid_rt_get_total_rx_bytes_hdl}, //0xA8
71 {1, &oid_rt_current_tx_power_level_hdl}, //0xA9
72 {1, &oid_rt_get_enc_key_mismatch_count_hdl}, //0xAA
73 {1, &oid_rt_get_enc_key_match_count_hdl}, //0xAB
74 {1, &oid_rt_get_channel_hdl}, //0xAC
75 {1, &oid_rt_set_channelplan_hdl}, //0xAD
76 {1, &oid_rt_get_hardware_radio_off_hdl}, //0xAE
77 {1, &oid_null_function}, //0xAF
78 {1, &oid_null_function}, //0xB0
79 {1, &oid_null_function}, //0xB1
80 {1, &oid_null_function}, //0xB2
81 {1, &oid_null_function}, //0xB3
82 {1, &oid_rt_get_key_mismatch_hdl}, //0xB4
83 {1, &oid_null_function}, //0xB5
84 {1, &oid_null_function}, //0xB6
85 {1, &oid_null_function}, //0xB7
86 {1, &oid_null_function}, //0xB8
87 {1, &oid_null_function}, //0xB9
88 {1, &oid_null_function}, //0xBA
89 {1, &oid_rt_supported_wireless_mode_hdl}, //0xBB
90 {1, &oid_rt_get_channel_list_hdl}, //0xBC
91 {1, &oid_rt_get_scan_in_progress_hdl}, //0xBD
92 {1, &oid_null_function}, //0xBE
93 {1, &oid_null_function}, //0xBF
94 {1, &oid_null_function}, //0xC0
95 {1, &oid_rt_forced_data_rate_hdl}, //0xC1
96 {1, &oid_rt_wireless_mode_for_scan_list_hdl}, //0xC2
97 {1, &oid_rt_get_bss_wireless_mode_hdl}, //0xC3
98 {1, &oid_rt_scan_with_magic_packet_hdl}, //0xC4
99 {1, &oid_null_function}, //0xC5
100 {1, &oid_null_function}, //0xC6
101 {1, &oid_null_function}, //0xC7
102 {1, &oid_null_function}, //0xC8
103 {1, &oid_null_function}, //0xC9
104 {1, &oid_null_function}, //0xCA
105 {1, &oid_null_function}, //0xCB
106 {1, &oid_null_function}, //0xCC
107 {1, &oid_null_function}, //0xCD
108 {1, &oid_null_function}, //0xCE
109 {1, &oid_null_function}, //0xCF
113 struct oid_obj_priv oid_rtl_seg_01_03[] =
115 {1, &oid_rt_ap_get_associated_station_list_hdl}, //0x00
116 {1, &oid_null_function}, //0x01
117 {1, &oid_rt_ap_switch_into_ap_mode_hdl}, //0x02
118 {1, &oid_null_function}, //0x03
119 {1, &oid_rt_ap_supported_hdl}, //0x04
120 {1, &oid_rt_ap_set_passphrase_hdl}, //0x05
124 struct oid_obj_priv oid_rtl_seg_01_11[] =
126 {1, &oid_null_function}, //0xC0 OID_RT_PRO_RX_FILTER
127 {1, &oid_null_function}, //0xC1 OID_CE_USB_WRITE_REGISTRY
128 {1, &oid_null_function}, //0xC2 OID_CE_USB_READ_REGISTRY
129 {1, &oid_null_function}, //0xC3 OID_RT_PRO_SET_INITIAL_GAIN
130 {1, &oid_null_function}, //0xC4 OID_RT_PRO_SET_BB_RF_STANDBY_MODE
131 {1, &oid_null_function}, //0xC5 OID_RT_PRO_SET_BB_RF_SHUTDOWN_MODE
132 {1, &oid_null_function}, //0xC6 OID_RT_PRO_SET_TX_CHARGE_PUMP
133 {1, &oid_null_function}, //0xC7 OID_RT_PRO_SET_RX_CHARGE_PUMP
134 {1, &oid_rt_pro_rf_write_registry_hdl}, //0xC8
135 {1, &oid_rt_pro_rf_read_registry_hdl}, //0xC9
136 {1, &oid_null_function} //0xCA OID_RT_PRO_QUERY_RF_TYPE
140 struct oid_obj_priv oid_rtl_seg_03_00[] =
142 {1, &oid_null_function}, //0x00
143 {1, &oid_rt_get_connect_state_hdl}, //0x01
144 {1, &oid_null_function}, //0x02
145 {1, &oid_null_function}, //0x03
146 {1, &oid_rt_set_default_key_id_hdl}, //0x04
152 //************** oid_rtl_seg_01_01 section start **************
154 NDIS_STATUS oid_rt_pro_set_fw_dig_state_hdl(struct oid_par_priv* poid_par_priv)
156 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
158 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
163 if(poid_par_priv->type_of_oid != SET_OID)
165 status = NDIS_STATUS_NOT_ACCEPTED;
169 _irqlevel_changed_(&oldirql,LOWER);
170 if(poid_par_priv->information_buf_len >= sizeof(struct setdig_parm))
172 //DEBUG_ERR(("===> oid_rt_pro_set_fw_dig_state_hdl. type:0x%02x.\n",*((unsigned char*)poid_par_priv->information_buf )));
173 if(!rtw_setfwdig_cmd(Adapter,*((unsigned char*)poid_par_priv->information_buf )))
175 status = NDIS_STATUS_NOT_ACCEPTED;
180 status = NDIS_STATUS_NOT_ACCEPTED;
182 _irqlevel_changed_(&oldirql,RAISE);
187 //-----------------------------------------------------------------------------
188 NDIS_STATUS oid_rt_pro_set_fw_ra_state_hdl(struct oid_par_priv* poid_par_priv)
191 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
193 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
197 if(poid_par_priv->type_of_oid != SET_OID)
199 status = NDIS_STATUS_NOT_ACCEPTED;
204 _irqlevel_changed_(&oldirql,LOWER);
206 if(poid_par_priv->information_buf_len >= sizeof(struct setra_parm))
208 //DEBUG_ERR(("===> oid_rt_pro_set_fw_ra_state_hdl. type:0x%02x.\n",*((unsigned char*)poid_par_priv->information_buf )));
209 if(!rtw_setfwra_cmd(Adapter,*((unsigned char*)poid_par_priv->information_buf )))
211 status = NDIS_STATUS_NOT_ACCEPTED;
216 status = NDIS_STATUS_NOT_ACCEPTED;
218 _irqlevel_changed_(&oldirql,RAISE);
223 //-----------------------------------------------------------------------------
224 NDIS_STATUS oid_rt_get_signal_quality_hdl(struct oid_par_priv* poid_par_priv)
226 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
227 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
229 //DEBUG_ERR(("<**********************oid_rt_get_signal_quality_hdl \n"));
230 if(poid_par_priv->type_of_oid != QUERY_OID)
232 status = NDIS_STATUS_NOT_ACCEPTED;
237 if(pMgntInfo->mAssoc || pMgntInfo->mIbss)
239 ulInfo = pAdapter->RxStats.SignalQuality;
240 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
244 ulInfo = 0xffffffff; // It stands for -1 in 4-byte integer.
252 //------------------------------------------------------------------------------
254 NDIS_STATUS oid_rt_get_small_packet_crc_hdl(struct oid_par_priv* poid_par_priv)
256 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
257 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
259 if(poid_par_priv->type_of_oid != QUERY_OID)
261 status = NDIS_STATUS_NOT_ACCEPTED;
265 if(poid_par_priv->information_buf_len >= sizeof(ULONG) )
267 *(ULONG *)poid_par_priv->information_buf = padapter->recvpriv.rx_smallpacket_crcerr;
268 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
272 status = NDIS_STATUS_INVALID_LENGTH;
277 //------------------------------------------------------------------------------
278 NDIS_STATUS oid_rt_get_middle_packet_crc_hdl(struct oid_par_priv* poid_par_priv)
280 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
281 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
283 if(poid_par_priv->type_of_oid != QUERY_OID)
285 status = NDIS_STATUS_NOT_ACCEPTED;
289 if(poid_par_priv->information_buf_len >= sizeof(ULONG) )
291 *(ULONG *)poid_par_priv->information_buf = padapter->recvpriv.rx_middlepacket_crcerr;
292 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
296 status = NDIS_STATUS_INVALID_LENGTH;
302 //------------------------------------------------------------------------------
303 NDIS_STATUS oid_rt_get_large_packet_crc_hdl(struct oid_par_priv* poid_par_priv)
305 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
306 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
308 if(poid_par_priv->type_of_oid != QUERY_OID)
310 status = NDIS_STATUS_NOT_ACCEPTED;
314 if(poid_par_priv->information_buf_len >= sizeof(ULONG) )
316 *(ULONG *)poid_par_priv->information_buf = padapter->recvpriv.rx_largepacket_crcerr;
317 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
321 status = NDIS_STATUS_INVALID_LENGTH;
328 //------------------------------------------------------------------------------
329 NDIS_STATUS oid_rt_get_tx_retry_hdl(struct oid_par_priv* poid_par_priv)
331 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
332 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
334 if(poid_par_priv->type_of_oid != QUERY_OID)
336 status = NDIS_STATUS_NOT_ACCEPTED;
342 NDIS_STATUS oid_rt_get_rx_retry_hdl(struct oid_par_priv* poid_par_priv)
344 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
345 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
347 if(poid_par_priv->type_of_oid != QUERY_OID)
349 status = NDIS_STATUS_NOT_ACCEPTED;
352 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
355 //------------------------------------------------------------------------------
356 NDIS_STATUS oid_rt_get_rx_total_packet_hdl(struct oid_par_priv* poid_par_priv)
358 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
359 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
361 if(poid_par_priv->type_of_oid != QUERY_OID)
363 status = NDIS_STATUS_NOT_ACCEPTED;
366 if(poid_par_priv->information_buf_len >= sizeof(ULONG) )
368 *(u64 *)poid_par_priv->information_buf = padapter->recvpriv.rx_pkts + padapter->recvpriv.rx_drop;
369 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
373 status = NDIS_STATUS_INVALID_LENGTH;
379 //------------------------------------------------------------------------------
380 NDIS_STATUS oid_rt_get_tx_beacon_ok_hdl(struct oid_par_priv* poid_par_priv)
382 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
383 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
385 if(poid_par_priv->type_of_oid != QUERY_OID)
387 status = NDIS_STATUS_NOT_ACCEPTED;
393 NDIS_STATUS oid_rt_get_tx_beacon_err_hdl(struct oid_par_priv* poid_par_priv)
395 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
396 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
398 if(poid_par_priv->type_of_oid != QUERY_OID)
400 status = NDIS_STATUS_NOT_ACCEPTED;
406 //------------------------------------------------------------------------------
407 NDIS_STATUS oid_rt_get_rx_icv_err_hdl(struct oid_par_priv* poid_par_priv)
409 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
410 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
412 if(poid_par_priv->type_of_oid != QUERY_OID)
414 status = NDIS_STATUS_NOT_ACCEPTED;
417 if(poid_par_priv->information_buf_len>= sizeof(u32))
419 //_rtw_memcpy(*(uint *)poid_par_priv->information_buf,padapter->recvpriv.rx_icv_err,sizeof(u32));
420 *(uint *)poid_par_priv->information_buf = padapter->recvpriv.rx_icv_err;
421 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
425 status = NDIS_STATUS_INVALID_LENGTH ;
431 //------------------------------------------------------------------------------
432 NDIS_STATUS oid_rt_set_encryption_algorithm_hdl(struct oid_par_priv* poid_par_priv)
434 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
435 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
437 if(poid_par_priv->type_of_oid != SET_OID)
439 status = NDIS_STATUS_NOT_ACCEPTED;
445 //------------------------------------------------------------------------------
446 NDIS_STATUS oid_rt_get_preamble_mode_hdl(struct oid_par_priv* poid_par_priv)
448 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
449 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
450 ULONG preamblemode = 0 ;
452 if(poid_par_priv->type_of_oid != QUERY_OID)
454 status = NDIS_STATUS_NOT_ACCEPTED;
457 if(poid_par_priv->information_buf_len>= sizeof(ULONG))
459 if(padapter->registrypriv.preamble == PREAMBLE_LONG)
461 else if (padapter->registrypriv.preamble == PREAMBLE_AUTO)
463 else if (padapter->registrypriv.preamble == PREAMBLE_SHORT)
467 *(ULONG *)poid_par_priv->information_buf = preamblemode ;
468 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
472 status = NDIS_STATUS_INVALID_LENGTH ;
476 //------------------------------------------------------------------------------
477 NDIS_STATUS oid_rt_get_ap_ip_hdl(struct oid_par_priv* poid_par_priv)
479 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
480 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
482 if(poid_par_priv->type_of_oid != QUERY_OID)
484 status = NDIS_STATUS_NOT_ACCEPTED;
491 NDIS_STATUS oid_rt_get_channelplan_hdl(struct oid_par_priv* poid_par_priv)
493 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
494 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
496 if(poid_par_priv->type_of_oid != QUERY_OID)
498 status = NDIS_STATUS_NOT_ACCEPTED;
501 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
502 *(u16 *)poid_par_priv->information_buf = padapter->mlmepriv.ChannelPlan ;
506 NDIS_STATUS oid_rt_set_channelplan_hdl(struct oid_par_priv* poid_par_priv)
508 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
509 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
511 if(poid_par_priv->type_of_oid != SET_OID)
513 status = NDIS_STATUS_NOT_ACCEPTED;
517 padapter->mlmepriv.ChannelPlan = *(u16 *)poid_par_priv->information_buf ;
521 //------------------------------------------------------------------------------
522 NDIS_STATUS oid_rt_set_preamble_mode_hdl(struct oid_par_priv* poid_par_priv)
524 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
525 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
526 ULONG preamblemode = 0;
527 if(poid_par_priv->type_of_oid != SET_OID)
529 status = NDIS_STATUS_NOT_ACCEPTED;
533 if(poid_par_priv->information_buf_len>= sizeof(ULONG))
535 preamblemode = *(ULONG *)poid_par_priv->information_buf ;
536 if( preamblemode == 0)
537 padapter->registrypriv.preamble = PREAMBLE_LONG;
538 else if (preamblemode==1 )
539 padapter->registrypriv.preamble = PREAMBLE_AUTO;
540 else if ( preamblemode==2 )
541 padapter->registrypriv.preamble = PREAMBLE_SHORT;
543 *(ULONG *)poid_par_priv->information_buf = preamblemode ;
544 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
548 status = NDIS_STATUS_INVALID_LENGTH ;
553 //------------------------------------------------------------------------------
554 NDIS_STATUS oid_rt_set_bcn_intvl_hdl(struct oid_par_priv* poid_par_priv)
556 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
557 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
559 if(poid_par_priv->type_of_oid != SET_OID)
561 status = NDIS_STATUS_NOT_ACCEPTED;
567 NDIS_STATUS oid_rt_dedicate_probe_hdl(struct oid_par_priv* poid_par_priv)
569 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
570 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
574 //------------------------------------------------------------------------------
575 NDIS_STATUS oid_rt_get_total_tx_bytes_hdl(struct oid_par_priv* poid_par_priv)
577 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
578 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
580 if(poid_par_priv->type_of_oid != QUERY_OID)
582 status = NDIS_STATUS_NOT_ACCEPTED;
585 if(poid_par_priv->information_buf_len>= sizeof(ULONG))
587 *(u64 *)poid_par_priv->information_buf = padapter->xmitpriv.tx_bytes;
588 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
592 status = NDIS_STATUS_INVALID_LENGTH ;
598 //------------------------------------------------------------------------------
599 NDIS_STATUS oid_rt_get_total_rx_bytes_hdl(struct oid_par_priv* poid_par_priv)
601 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
602 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
604 if(poid_par_priv->type_of_oid != QUERY_OID)
606 status = NDIS_STATUS_NOT_ACCEPTED;
609 if(poid_par_priv->information_buf_len>= sizeof(ULONG))
611 //_rtw_memcpy(*(uint *)poid_par_priv->information_buf,padapter->recvpriv.rx_icv_err,sizeof(u32));
612 *(u64 *)poid_par_priv->information_buf = padapter->recvpriv.rx_bytes;
613 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
617 status = NDIS_STATUS_INVALID_LENGTH ;
621 //------------------------------------------------------------------------------
622 NDIS_STATUS oid_rt_current_tx_power_level_hdl(struct oid_par_priv* poid_par_priv)
624 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
625 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
629 NDIS_STATUS oid_rt_get_enc_key_mismatch_count_hdl(struct oid_par_priv* poid_par_priv)
631 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
632 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
634 if(poid_par_priv->type_of_oid != QUERY_OID)
636 status = NDIS_STATUS_NOT_ACCEPTED;
642 NDIS_STATUS oid_rt_get_enc_key_match_count_hdl(struct oid_par_priv* poid_par_priv)
644 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
645 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
647 if(poid_par_priv->type_of_oid != QUERY_OID)
649 status = NDIS_STATUS_NOT_ACCEPTED;
655 NDIS_STATUS oid_rt_get_channel_hdl(struct oid_par_priv* poid_par_priv)
657 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
658 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
659 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
660 NDIS_802_11_CONFIGURATION *pnic_Config;
665 if(poid_par_priv->type_of_oid != QUERY_OID)
667 status = NDIS_STATUS_NOT_ACCEPTED;
671 if ( (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) ||
672 (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE))
673 pnic_Config = &pmlmepriv->cur_network.network.Configuration;
675 pnic_Config = &padapter->registrypriv.dev_network.Configuration;
677 channelnum = pnic_Config->DSConfig;
678 *(ULONG *)poid_par_priv->information_buf = channelnum;
680 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
688 NDIS_STATUS oid_rt_get_hardware_radio_off_hdl(struct oid_par_priv* poid_par_priv)
690 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
691 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
693 if(poid_par_priv->type_of_oid != QUERY_OID)
695 status = NDIS_STATUS_NOT_ACCEPTED;
701 NDIS_STATUS oid_rt_get_key_mismatch_hdl(struct oid_par_priv* poid_par_priv)
703 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
704 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
706 if(poid_par_priv->type_of_oid != QUERY_OID)
708 status = NDIS_STATUS_NOT_ACCEPTED;
714 NDIS_STATUS oid_rt_supported_wireless_mode_hdl(struct oid_par_priv* poid_par_priv)
716 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
717 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
719 //DEBUG_ERR(("<**********************oid_rt_supported_wireless_mode_hdl \n"));
720 if(poid_par_priv->type_of_oid != QUERY_OID)
722 status = NDIS_STATUS_NOT_ACCEPTED;
725 if(poid_par_priv->information_buf_len >= sizeof(ULONG)){
726 ulInfo |= 0x0100; //WIRELESS_MODE_B
727 ulInfo |= 0x0200; //WIRELESS_MODE_G
728 ulInfo |= 0x0400; //WIRELESS_MODE_A
730 *(ULONG *) poid_par_priv->information_buf = ulInfo;
731 //DEBUG_ERR(("<===oid_rt_supported_wireless_mode %x\n",ulInfo));
732 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
735 status = NDIS_STATUS_INVALID_LENGTH;
740 NDIS_STATUS oid_rt_get_channel_list_hdl(struct oid_par_priv* poid_par_priv)
742 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
743 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
745 if(poid_par_priv->type_of_oid != QUERY_OID)
747 status = NDIS_STATUS_NOT_ACCEPTED;
753 NDIS_STATUS oid_rt_get_scan_in_progress_hdl(struct oid_par_priv* poid_par_priv)
755 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
756 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
758 if(poid_par_priv->type_of_oid != QUERY_OID)
760 status = NDIS_STATUS_NOT_ACCEPTED;
768 NDIS_STATUS oid_rt_forced_data_rate_hdl(struct oid_par_priv* poid_par_priv)
770 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
771 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
775 NDIS_STATUS oid_rt_wireless_mode_for_scan_list_hdl(struct oid_par_priv* poid_par_priv)
777 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
778 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
782 NDIS_STATUS oid_rt_get_bss_wireless_mode_hdl(struct oid_par_priv* poid_par_priv)
784 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
785 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
787 if(poid_par_priv->type_of_oid != QUERY_OID)
789 status = NDIS_STATUS_NOT_ACCEPTED;
796 NDIS_STATUS oid_rt_scan_with_magic_packet_hdl(struct oid_par_priv* poid_par_priv)
798 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
799 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
803 //************** oid_rtl_seg_01_01 section end **************
805 //************** oid_rtl_seg_01_03 section start **************
806 NDIS_STATUS oid_rt_ap_get_associated_station_list_hdl(struct oid_par_priv* poid_par_priv)
808 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
809 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
811 if(poid_par_priv->type_of_oid != QUERY_OID)
813 status = NDIS_STATUS_NOT_ACCEPTED;
819 NDIS_STATUS oid_rt_ap_switch_into_ap_mode_hdl(struct oid_par_priv* poid_par_priv)
821 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
822 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
826 NDIS_STATUS oid_rt_ap_supported_hdl(struct oid_par_priv* poid_par_priv)
828 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
829 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
833 NDIS_STATUS oid_rt_ap_set_passphrase_hdl(struct oid_par_priv* poid_par_priv)
835 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
836 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
838 if(poid_par_priv->type_of_oid != SET_OID)
840 status = NDIS_STATUS_NOT_ACCEPTED;
847 //************** oid_rtl_seg_01_03 section end **************
849 //**************** oid_rtl_seg_01_11 section start ****************
850 NDIS_STATUS oid_rt_pro_rf_write_registry_hdl(struct oid_par_priv* poid_par_priv)
852 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
853 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
856 //DEBUG_ERR(("<**********************oid_rt_pro_rf_write_registry_hdl \n"));
857 if(poid_par_priv->type_of_oid != SET_OID) //QUERY_OID
859 status = NDIS_STATUS_NOT_ACCEPTED;
863 _irqlevel_changed_(&oldirql,LOWER);
864 if(poid_par_priv->information_buf_len== (sizeof(unsigned long)*3))
866 //RegOffsetValue - The offset of RF register to write.
867 //RegDataWidth - The data width of RF register to write.
868 //RegDataValue - The value to write.
869 //RegOffsetValue = *((unsigned long*)InformationBuffer);
870 //RegDataWidth = *((unsigned long*)InformationBuffer+1);
871 //RegDataValue = *((unsigned long*)InformationBuffer+2);
872 if(!rtw_setrfreg_cmd(Adapter,
873 *(unsigned char*)poid_par_priv->information_buf,
874 (unsigned long)(*((unsigned long*)poid_par_priv->information_buf+2))))
876 status = NDIS_STATUS_NOT_ACCEPTED;
881 status = NDIS_STATUS_INVALID_LENGTH;
883 _irqlevel_changed_(&oldirql,RAISE);
889 //------------------------------------------------------------------------------
890 NDIS_STATUS oid_rt_pro_rf_read_registry_hdl(struct oid_par_priv* poid_par_priv)
892 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
894 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
898 //DEBUG_ERR(("<**********************oid_rt_pro_rf_read_registry_hdl \n"));
899 if(poid_par_priv->type_of_oid != SET_OID) //QUERY_OID
901 status = NDIS_STATUS_NOT_ACCEPTED;
905 _irqlevel_changed_(&oldirql,LOWER);
906 if(poid_par_priv->information_buf_len== (sizeof(unsigned long)*3))
908 if(Adapter->mppriv.act_in_progress == _TRUE)
910 status = NDIS_STATUS_NOT_ACCEPTED;
915 Adapter->mppriv.act_in_progress = _TRUE;
916 Adapter->mppriv.workparam.bcompleted= _FALSE;
917 Adapter->mppriv.workparam.act_type = MPT_READ_RF;
918 Adapter->mppriv.workparam.io_offset = *(unsigned long*)poid_par_priv->information_buf;
919 Adapter->mppriv.workparam.io_value = 0xcccccccc;
921 //RegOffsetValue - The offset of RF register to read.
922 //RegDataWidth - The data width of RF register to read.
923 //RegDataValue - The value to read.
924 //RegOffsetValue = *((unsigned long*)InformationBuffer);
925 //RegDataWidth = *((unsigned long*)InformationBuffer+1);
926 //RegDataValue = *((unsigned long*)InformationBuffer+2);
927 if(!rtw_getrfreg_cmd(Adapter,
928 *(unsigned char*)poid_par_priv->information_buf,
929 (unsigned char*)&Adapter->mppriv.workparam.io_value))
931 status = NDIS_STATUS_NOT_ACCEPTED;
938 status = NDIS_STATUS_INVALID_LENGTH;
940 _irqlevel_changed_(&oldirql,RAISE);
946 //**************** oid_rtl_seg_01_11 section end****************
949 //************** oid_rtl_seg_03_00 section start **************
950 enum _CONNECT_STATE_{
957 NDIS_STATUS oid_rt_get_connect_state_hdl(struct oid_par_priv* poid_par_priv)
959 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
960 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
962 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
966 if(poid_par_priv->type_of_oid != QUERY_OID)
968 status = NDIS_STATUS_NOT_ACCEPTED;
972 // nStatus==0 CheckingStatus
973 // nStatus==1 Associated
974 // nStatus==2 AdHocMode
975 // nStatus==3 NotAssociated
977 if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE)
978 ulInfo = CHECKINGSTATUS;
979 else if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
981 else if(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)== _TRUE)
984 ulInfo = NOTASSOCIATED ;
986 *(ULONG *)poid_par_priv->information_buf = ulInfo;
987 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
990 // Rearrange the order to let the UI still shows connection when scan is in progress
991 RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_GET_CONNECT_STATE.\n"));
992 if(pMgntInfo->mAssoc)
994 else if(pMgntInfo->mIbss)
996 else if(pMgntInfo->bScanInProgress)
1000 ulInfoLen = sizeof(ULONG);
1001 RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_GET_CONNECT_STATE: %d\n", ulInfo));
1007 NDIS_STATUS oid_rt_set_default_key_id_hdl(struct oid_par_priv* poid_par_priv)
1009 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1010 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
1012 if(poid_par_priv->type_of_oid != SET_OID)
1014 status = NDIS_STATUS_NOT_ACCEPTED;
1020 //************** oid_rtl_seg_03_00 section end **************