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[] = {
29 {1, &oid_null_function}, /* 0x80 */
30 {1, &oid_null_function}, /* 0x81 */
31 {1, &oid_null_function}, /* 0x82 */
32 {1, &oid_null_function}, /* 0x83 */ /* OID_RT_SET_SNIFFER_MODE */
33 {1, &oid_rt_get_signal_quality_hdl}, /* 0x84 */
34 {1, &oid_rt_get_small_packet_crc_hdl}, /* 0x85 */
35 {1, &oid_rt_get_middle_packet_crc_hdl}, /* 0x86 */
36 {1, &oid_rt_get_large_packet_crc_hdl}, /* 0x87 */
37 {1, &oid_rt_get_tx_retry_hdl}, /* 0x88 */
38 {1, &oid_rt_get_rx_retry_hdl}, /* 0x89 */
39 {1, &oid_rt_pro_set_fw_dig_state_hdl}, /* 0x8A */
40 {1, &oid_rt_pro_set_fw_ra_state_hdl} , /* 0x8B */
41 {1, &oid_null_function}, /* 0x8C */
42 {1, &oid_null_function}, /* 0x8D */
43 {1, &oid_null_function}, /* 0x8E */
44 {1, &oid_null_function}, /* 0x8F */
45 {1, &oid_rt_get_rx_total_packet_hdl}, /* 0x90 */
46 {1, &oid_rt_get_tx_beacon_ok_hdl}, /* 0x91 */
47 {1, &oid_rt_get_tx_beacon_err_hdl}, /* 0x92 */
48 {1, &oid_rt_get_rx_icv_err_hdl}, /* 0x93 */
49 {1, &oid_rt_set_encryption_algorithm_hdl}, /* 0x94 */
50 {1, &oid_null_function}, /* 0x95 */
51 {1, &oid_rt_get_preamble_mode_hdl}, /* 0x96 */
52 {1, &oid_null_function}, /* 0x97 */
53 {1, &oid_rt_get_ap_ip_hdl}, /* 0x98 */
54 {1, &oid_rt_get_channelplan_hdl}, /* 0x99 */
55 {1, &oid_rt_set_preamble_mode_hdl}, /* 0x9A */
56 {1, &oid_rt_set_bcn_intvl_hdl}, /* 0x9B */
57 {1, &oid_null_function}, /* 0x9C */
58 {1, &oid_rt_dedicate_probe_hdl}, /* 0x9D */
59 {1, &oid_null_function}, /* 0x9E */
60 {1, &oid_null_function}, /* 0x9F */
61 {1, &oid_null_function}, /* 0xA0 */
62 {1, &oid_null_function}, /* 0xA1 */
63 {1, &oid_null_function}, /* 0xA2 */
64 {1, &oid_null_function}, /* 0xA3 */
65 {1, &oid_null_function}, /* 0xA4 */
66 {1, &oid_null_function}, /* 0xA5 */
67 {1, &oid_null_function}, /* 0xA6 */
68 {1, &oid_rt_get_total_tx_bytes_hdl}, /* 0xA7 */
69 {1, &oid_rt_get_total_rx_bytes_hdl}, /* 0xA8 */
70 {1, &oid_rt_current_tx_power_level_hdl}, /* 0xA9 */
71 {1, &oid_rt_get_enc_key_mismatch_count_hdl}, /* 0xAA */
72 {1, &oid_rt_get_enc_key_match_count_hdl}, /* 0xAB */
73 {1, &oid_rt_get_channel_hdl}, /* 0xAC */
74 {1, &oid_rt_set_channelplan_hdl}, /* 0xAD */
75 {1, &oid_rt_get_hardware_radio_off_hdl}, /* 0xAE */
76 {1, &oid_null_function}, /* 0xAF */
77 {1, &oid_null_function}, /* 0xB0 */
78 {1, &oid_null_function}, /* 0xB1 */
79 {1, &oid_null_function}, /* 0xB2 */
80 {1, &oid_null_function}, /* 0xB3 */
81 {1, &oid_rt_get_key_mismatch_hdl}, /* 0xB4 */
82 {1, &oid_null_function}, /* 0xB5 */
83 {1, &oid_null_function}, /* 0xB6 */
84 {1, &oid_null_function}, /* 0xB7 */
85 {1, &oid_null_function}, /* 0xB8 */
86 {1, &oid_null_function}, /* 0xB9 */
87 {1, &oid_null_function}, /* 0xBA */
88 {1, &oid_rt_supported_wireless_mode_hdl}, /* 0xBB */
89 {1, &oid_rt_get_channel_list_hdl}, /* 0xBC */
90 {1, &oid_rt_get_scan_in_progress_hdl}, /* 0xBD */
91 {1, &oid_null_function}, /* 0xBE */
92 {1, &oid_null_function}, /* 0xBF */
93 {1, &oid_null_function}, /* 0xC0 */
94 {1, &oid_rt_forced_data_rate_hdl}, /* 0xC1 */
95 {1, &oid_rt_wireless_mode_for_scan_list_hdl}, /* 0xC2 */
96 {1, &oid_rt_get_bss_wireless_mode_hdl}, /* 0xC3 */
97 {1, &oid_rt_scan_with_magic_packet_hdl}, /* 0xC4 */
98 {1, &oid_null_function}, /* 0xC5 */
99 {1, &oid_null_function}, /* 0xC6 */
100 {1, &oid_null_function}, /* 0xC7 */
101 {1, &oid_null_function}, /* 0xC8 */
102 {1, &oid_null_function}, /* 0xC9 */
103 {1, &oid_null_function}, /* 0xCA */
104 {1, &oid_null_function}, /* 0xCB */
105 {1, &oid_null_function}, /* 0xCC */
106 {1, &oid_null_function}, /* 0xCD */
107 {1, &oid_null_function}, /* 0xCE */
108 {1, &oid_null_function}, /* 0xCF */
112 struct oid_obj_priv oid_rtl_seg_01_03[] = {
113 {1, &oid_rt_ap_get_associated_station_list_hdl}, /* 0x00 */
114 {1, &oid_null_function}, /* 0x01 */
115 {1, &oid_rt_ap_switch_into_ap_mode_hdl}, /* 0x02 */
116 {1, &oid_null_function}, /* 0x03 */
117 {1, &oid_rt_ap_supported_hdl}, /* 0x04 */
118 {1, &oid_rt_ap_set_passphrase_hdl}, /* 0x05 */
122 struct oid_obj_priv oid_rtl_seg_01_11[] = {
123 {1, &oid_null_function}, /* 0xC0 OID_RT_PRO_RX_FILTER */
124 {1, &oid_null_function}, /* 0xC1 OID_CE_USB_WRITE_REGISTRY */
125 {1, &oid_null_function}, /* 0xC2 OID_CE_USB_READ_REGISTRY */
126 {1, &oid_null_function}, /* 0xC3 OID_RT_PRO_SET_INITIAL_GAIN */
127 {1, &oid_null_function}, /* 0xC4 OID_RT_PRO_SET_BB_RF_STANDBY_MODE */
128 {1, &oid_null_function}, /* 0xC5 OID_RT_PRO_SET_BB_RF_SHUTDOWN_MODE */
129 {1, &oid_null_function}, /* 0xC6 OID_RT_PRO_SET_TX_CHARGE_PUMP */
130 {1, &oid_null_function}, /* 0xC7 OID_RT_PRO_SET_RX_CHARGE_PUMP */
131 {1, &oid_rt_pro_rf_write_registry_hdl}, /* 0xC8 */
132 {1, &oid_rt_pro_rf_read_registry_hdl}, /* 0xC9 */
133 {1, &oid_null_function} /* 0xCA OID_RT_PRO_QUERY_RF_TYPE */
137 struct oid_obj_priv oid_rtl_seg_03_00[] = {
138 {1, &oid_null_function}, /* 0x00 */
139 {1, &oid_rt_get_connect_state_hdl}, /* 0x01 */
140 {1, &oid_null_function}, /* 0x02 */
141 {1, &oid_null_function}, /* 0x03 */
142 {1, &oid_rt_set_default_key_id_hdl}, /* 0x04 */
148 /* ************** oid_rtl_seg_01_01 section start ************** */
150 NDIS_STATUS oid_rt_pro_set_fw_dig_state_hdl(struct oid_par_priv *poid_par_priv)
152 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
154 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
158 if (poid_par_priv->type_of_oid != SET_OID) {
159 status = NDIS_STATUS_NOT_ACCEPTED;
163 _irqlevel_changed_(&oldirql, LOWER);
164 if (poid_par_priv->information_buf_len >= sizeof(struct setdig_parm)) {
165 /* DEBUG_ERR(("===> oid_rt_pro_set_fw_dig_state_hdl. type:0x%02x.\n",*((unsigned char*)poid_par_priv->information_buf ))); */
166 if (!rtw_setfwdig_cmd(Adapter, *((unsigned char *)poid_par_priv->information_buf)))
167 status = NDIS_STATUS_NOT_ACCEPTED;
170 status = NDIS_STATUS_NOT_ACCEPTED;
171 _irqlevel_changed_(&oldirql, RAISE);
175 /* ----------------------------------------------------------------------------- */
176 NDIS_STATUS oid_rt_pro_set_fw_ra_state_hdl(struct oid_par_priv *poid_par_priv)
179 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
181 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
184 if (poid_par_priv->type_of_oid != SET_OID) {
185 status = NDIS_STATUS_NOT_ACCEPTED;
190 _irqlevel_changed_(&oldirql, LOWER);
192 if (poid_par_priv->information_buf_len >= sizeof(struct setra_parm)) {
193 /* DEBUG_ERR(("===> oid_rt_pro_set_fw_ra_state_hdl. type:0x%02x.\n",*((unsigned char*)poid_par_priv->information_buf ))); */
194 if (!rtw_setfwra_cmd(Adapter, *((unsigned char *)poid_par_priv->information_buf)))
195 status = NDIS_STATUS_NOT_ACCEPTED;
198 status = NDIS_STATUS_NOT_ACCEPTED;
199 _irqlevel_changed_(&oldirql, RAISE);
203 /* ----------------------------------------------------------------------------- */
204 NDIS_STATUS oid_rt_get_signal_quality_hdl(struct oid_par_priv *poid_par_priv)
206 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
207 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
209 /* DEBUG_ERR(("<**********************oid_rt_get_signal_quality_hdl\n")); */
210 if (poid_par_priv->type_of_oid != QUERY_OID) {
211 status = NDIS_STATUS_NOT_ACCEPTED;
216 if (pMgntInfo->mAssoc || pMgntInfo->mIbss) {
217 ulInfo = pAdapter->RxStats.SignalQuality;
218 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
220 ulInfo = 0xffffffff; /* It stands for -1 in 4-byte integer. */
228 /* ------------------------------------------------------------------------------ */
230 NDIS_STATUS oid_rt_get_small_packet_crc_hdl(struct oid_par_priv *poid_par_priv)
232 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
233 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
235 if (poid_par_priv->type_of_oid != QUERY_OID) {
236 status = NDIS_STATUS_NOT_ACCEPTED;
240 if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
241 *(ULONG *)poid_par_priv->information_buf = padapter->recvpriv.rx_smallpacket_crcerr;
242 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
244 status = NDIS_STATUS_INVALID_LENGTH;
248 /* ------------------------------------------------------------------------------ */
249 NDIS_STATUS oid_rt_get_middle_packet_crc_hdl(struct oid_par_priv *poid_par_priv)
251 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
252 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
254 if (poid_par_priv->type_of_oid != QUERY_OID) {
255 status = NDIS_STATUS_NOT_ACCEPTED;
259 if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
260 *(ULONG *)poid_par_priv->information_buf = padapter->recvpriv.rx_middlepacket_crcerr;
261 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
263 status = NDIS_STATUS_INVALID_LENGTH;
268 /* ------------------------------------------------------------------------------ */
269 NDIS_STATUS oid_rt_get_large_packet_crc_hdl(struct oid_par_priv *poid_par_priv)
271 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
272 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
274 if (poid_par_priv->type_of_oid != QUERY_OID) {
275 status = NDIS_STATUS_NOT_ACCEPTED;
279 if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
280 *(ULONG *)poid_par_priv->information_buf = padapter->recvpriv.rx_largepacket_crcerr;
281 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
283 status = NDIS_STATUS_INVALID_LENGTH;
289 /* ------------------------------------------------------------------------------ */
290 NDIS_STATUS oid_rt_get_tx_retry_hdl(struct oid_par_priv *poid_par_priv)
292 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
293 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
295 if (poid_par_priv->type_of_oid != QUERY_OID) {
296 status = NDIS_STATUS_NOT_ACCEPTED;
302 NDIS_STATUS oid_rt_get_rx_retry_hdl(struct oid_par_priv *poid_par_priv)
304 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
305 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
307 if (poid_par_priv->type_of_oid != QUERY_OID) {
308 status = NDIS_STATUS_NOT_ACCEPTED;
311 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
314 /* ------------------------------------------------------------------------------ */
315 NDIS_STATUS oid_rt_get_rx_total_packet_hdl(struct oid_par_priv *poid_par_priv)
317 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
318 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
320 if (poid_par_priv->type_of_oid != QUERY_OID) {
321 status = NDIS_STATUS_NOT_ACCEPTED;
324 if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
325 *(u64 *)poid_par_priv->information_buf = padapter->recvpriv.rx_pkts + padapter->recvpriv.rx_drop;
326 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
328 status = NDIS_STATUS_INVALID_LENGTH;
333 /* ------------------------------------------------------------------------------ */
334 NDIS_STATUS oid_rt_get_tx_beacon_ok_hdl(struct oid_par_priv *poid_par_priv)
336 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
337 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
339 if (poid_par_priv->type_of_oid != QUERY_OID) {
340 status = NDIS_STATUS_NOT_ACCEPTED;
346 NDIS_STATUS oid_rt_get_tx_beacon_err_hdl(struct oid_par_priv *poid_par_priv)
348 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
349 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
351 if (poid_par_priv->type_of_oid != QUERY_OID) {
352 status = NDIS_STATUS_NOT_ACCEPTED;
358 /* ------------------------------------------------------------------------------ */
359 NDIS_STATUS oid_rt_get_rx_icv_err_hdl(struct oid_par_priv *poid_par_priv)
361 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
362 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
364 if (poid_par_priv->type_of_oid != QUERY_OID) {
365 status = NDIS_STATUS_NOT_ACCEPTED;
368 if (poid_par_priv->information_buf_len >= sizeof(u32)) {
369 /* _rtw_memcpy(*(uint *)poid_par_priv->information_buf,padapter->recvpriv.rx_icv_err,sizeof(u32)); */
370 *(uint *)poid_par_priv->information_buf = padapter->recvpriv.rx_icv_err;
371 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
373 status = NDIS_STATUS_INVALID_LENGTH ;
378 /* ------------------------------------------------------------------------------ */
379 NDIS_STATUS oid_rt_set_encryption_algorithm_hdl(struct oid_par_priv *poid_par_priv)
381 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
382 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
384 if (poid_par_priv->type_of_oid != SET_OID) {
385 status = NDIS_STATUS_NOT_ACCEPTED;
391 /* ------------------------------------------------------------------------------ */
392 NDIS_STATUS oid_rt_get_preamble_mode_hdl(struct oid_par_priv *poid_par_priv)
394 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
395 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
396 ULONG preamblemode = 0 ;
398 if (poid_par_priv->type_of_oid != QUERY_OID) {
399 status = NDIS_STATUS_NOT_ACCEPTED;
402 if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
403 if (padapter->registrypriv.preamble == PREAMBLE_LONG)
405 else if (padapter->registrypriv.preamble == PREAMBLE_AUTO)
407 else if (padapter->registrypriv.preamble == PREAMBLE_SHORT)
411 *(ULONG *)poid_par_priv->information_buf = preamblemode ;
412 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
414 status = NDIS_STATUS_INVALID_LENGTH ;
417 /* ------------------------------------------------------------------------------ */
418 NDIS_STATUS oid_rt_get_ap_ip_hdl(struct oid_par_priv *poid_par_priv)
420 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
421 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
423 if (poid_par_priv->type_of_oid != QUERY_OID) {
424 status = NDIS_STATUS_NOT_ACCEPTED;
431 NDIS_STATUS oid_rt_get_channelplan_hdl(struct oid_par_priv *poid_par_priv)
433 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
434 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
436 if (poid_par_priv->type_of_oid != QUERY_OID) {
437 status = NDIS_STATUS_NOT_ACCEPTED;
440 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
441 *(u16 *)poid_par_priv->information_buf = padapter->mlmepriv.ChannelPlan ;
445 NDIS_STATUS oid_rt_set_channelplan_hdl(struct oid_par_priv *poid_par_priv)
447 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
448 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
450 if (poid_par_priv->type_of_oid != SET_OID) {
451 status = NDIS_STATUS_NOT_ACCEPTED;
455 padapter->mlmepriv.ChannelPlan = *(u16 *)poid_par_priv->information_buf ;
459 /* ------------------------------------------------------------------------------ */
460 NDIS_STATUS oid_rt_set_preamble_mode_hdl(struct oid_par_priv *poid_par_priv)
462 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
463 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
464 ULONG preamblemode = 0;
465 if (poid_par_priv->type_of_oid != SET_OID) {
466 status = NDIS_STATUS_NOT_ACCEPTED;
470 if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
471 preamblemode = *(ULONG *)poid_par_priv->information_buf ;
472 if (preamblemode == 0)
473 padapter->registrypriv.preamble = PREAMBLE_LONG;
474 else if (preamblemode == 1)
475 padapter->registrypriv.preamble = PREAMBLE_AUTO;
476 else if (preamblemode == 2)
477 padapter->registrypriv.preamble = PREAMBLE_SHORT;
479 *(ULONG *)poid_par_priv->information_buf = preamblemode ;
480 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
482 status = NDIS_STATUS_INVALID_LENGTH ;
486 /* ------------------------------------------------------------------------------ */
487 NDIS_STATUS oid_rt_set_bcn_intvl_hdl(struct oid_par_priv *poid_par_priv)
489 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
490 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
492 if (poid_par_priv->type_of_oid != SET_OID) {
493 status = NDIS_STATUS_NOT_ACCEPTED;
499 NDIS_STATUS oid_rt_dedicate_probe_hdl(struct oid_par_priv *poid_par_priv)
501 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
502 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
506 /* ------------------------------------------------------------------------------ */
507 NDIS_STATUS oid_rt_get_total_tx_bytes_hdl(struct oid_par_priv *poid_par_priv)
509 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
510 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
512 if (poid_par_priv->type_of_oid != QUERY_OID) {
513 status = NDIS_STATUS_NOT_ACCEPTED;
516 if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
517 *(u64 *)poid_par_priv->information_buf = padapter->xmitpriv.tx_bytes;
518 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
520 status = NDIS_STATUS_INVALID_LENGTH ;
525 /* ------------------------------------------------------------------------------ */
526 NDIS_STATUS oid_rt_get_total_rx_bytes_hdl(struct oid_par_priv *poid_par_priv)
528 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
529 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
531 if (poid_par_priv->type_of_oid != QUERY_OID) {
532 status = NDIS_STATUS_NOT_ACCEPTED;
535 if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
536 /* _rtw_memcpy(*(uint *)poid_par_priv->information_buf,padapter->recvpriv.rx_icv_err,sizeof(u32)); */
537 *(u64 *)poid_par_priv->information_buf = padapter->recvpriv.rx_bytes;
538 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
540 status = NDIS_STATUS_INVALID_LENGTH ;
543 /* ------------------------------------------------------------------------------ */
544 NDIS_STATUS oid_rt_current_tx_power_level_hdl(struct oid_par_priv *poid_par_priv)
546 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
547 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
551 NDIS_STATUS oid_rt_get_enc_key_mismatch_count_hdl(struct oid_par_priv *poid_par_priv)
553 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
554 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
556 if (poid_par_priv->type_of_oid != QUERY_OID) {
557 status = NDIS_STATUS_NOT_ACCEPTED;
563 NDIS_STATUS oid_rt_get_enc_key_match_count_hdl(struct oid_par_priv *poid_par_priv)
565 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
566 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
568 if (poid_par_priv->type_of_oid != QUERY_OID) {
569 status = NDIS_STATUS_NOT_ACCEPTED;
575 NDIS_STATUS oid_rt_get_channel_hdl(struct oid_par_priv *poid_par_priv)
577 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
578 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
579 struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
580 NDIS_802_11_CONFIGURATION *pnic_Config;
584 if (poid_par_priv->type_of_oid != QUERY_OID) {
585 status = NDIS_STATUS_NOT_ACCEPTED;
589 if ((check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) ||
590 (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE))
591 pnic_Config = &pmlmepriv->cur_network.network.Configuration;
593 pnic_Config = &padapter->registrypriv.dev_network.Configuration;
595 channelnum = pnic_Config->DSConfig;
596 *(ULONG *)poid_par_priv->information_buf = channelnum;
598 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
605 NDIS_STATUS oid_rt_get_hardware_radio_off_hdl(struct oid_par_priv *poid_par_priv)
607 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
608 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
610 if (poid_par_priv->type_of_oid != QUERY_OID) {
611 status = NDIS_STATUS_NOT_ACCEPTED;
617 NDIS_STATUS oid_rt_get_key_mismatch_hdl(struct oid_par_priv *poid_par_priv)
619 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
620 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
622 if (poid_par_priv->type_of_oid != QUERY_OID) {
623 status = NDIS_STATUS_NOT_ACCEPTED;
629 NDIS_STATUS oid_rt_supported_wireless_mode_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 /* DEBUG_ERR(("<**********************oid_rt_supported_wireless_mode_hdl\n")); */
635 if (poid_par_priv->type_of_oid != QUERY_OID) {
636 status = NDIS_STATUS_NOT_ACCEPTED;
639 if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
640 ulInfo |= 0x0100; /* WIRELESS_MODE_B */
641 ulInfo |= 0x0200; /* WIRELESS_MODE_G */
642 ulInfo |= 0x0400; /* WIRELESS_MODE_A */
644 *(ULONG *) poid_par_priv->information_buf = ulInfo;
645 /* DEBUG_ERR(("<===oid_rt_supported_wireless_mode %x\n",ulInfo)); */
646 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
648 status = NDIS_STATUS_INVALID_LENGTH;
652 NDIS_STATUS oid_rt_get_channel_list_hdl(struct oid_par_priv *poid_par_priv)
654 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
655 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
657 if (poid_par_priv->type_of_oid != QUERY_OID) {
658 status = NDIS_STATUS_NOT_ACCEPTED;
664 NDIS_STATUS oid_rt_get_scan_in_progress_hdl(struct oid_par_priv *poid_par_priv)
666 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
667 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
669 if (poid_par_priv->type_of_oid != QUERY_OID) {
670 status = NDIS_STATUS_NOT_ACCEPTED;
678 NDIS_STATUS oid_rt_forced_data_rate_hdl(struct oid_par_priv *poid_par_priv)
680 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
681 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
685 NDIS_STATUS oid_rt_wireless_mode_for_scan_list_hdl(struct oid_par_priv *poid_par_priv)
687 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
688 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
692 NDIS_STATUS oid_rt_get_bss_wireless_mode_hdl(struct oid_par_priv *poid_par_priv)
694 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
695 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
697 if (poid_par_priv->type_of_oid != QUERY_OID) {
698 status = NDIS_STATUS_NOT_ACCEPTED;
705 NDIS_STATUS oid_rt_scan_with_magic_packet_hdl(struct oid_par_priv *poid_par_priv)
707 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
708 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
712 /* ************** oid_rtl_seg_01_01 section end ************** */
714 /* ************** oid_rtl_seg_01_03 section start ************** */
715 NDIS_STATUS oid_rt_ap_get_associated_station_list_hdl(struct oid_par_priv *poid_par_priv)
717 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
718 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
720 if (poid_par_priv->type_of_oid != QUERY_OID) {
721 status = NDIS_STATUS_NOT_ACCEPTED;
727 NDIS_STATUS oid_rt_ap_switch_into_ap_mode_hdl(struct oid_par_priv *poid_par_priv)
729 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
730 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
734 NDIS_STATUS oid_rt_ap_supported_hdl(struct oid_par_priv *poid_par_priv)
736 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
737 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
741 NDIS_STATUS oid_rt_ap_set_passphrase_hdl(struct oid_par_priv *poid_par_priv)
743 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
744 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
746 if (poid_par_priv->type_of_oid != SET_OID) {
747 status = NDIS_STATUS_NOT_ACCEPTED;
754 /* ************** oid_rtl_seg_01_03 section end ************** */
756 /* **************** oid_rtl_seg_01_11 section start **************** */
757 NDIS_STATUS oid_rt_pro_rf_write_registry_hdl(struct oid_par_priv *poid_par_priv)
759 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
760 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
762 /* DEBUG_ERR(("<**********************oid_rt_pro_rf_write_registry_hdl\n")); */
763 if (poid_par_priv->type_of_oid != SET_OID) { /* QUERY_OID */
764 status = NDIS_STATUS_NOT_ACCEPTED;
768 _irqlevel_changed_(&oldirql, LOWER);
769 if (poid_par_priv->information_buf_len == (sizeof(unsigned long) * 3)) {
770 /* RegOffsetValue - The offset of RF register to write. */
771 /* RegDataWidth - The data width of RF register to write. */
772 /* RegDataValue - The value to write. */
773 /* RegOffsetValue = *((unsigned long*)InformationBuffer); */
774 /* RegDataWidth = *((unsigned long*)InformationBuffer+1); */
775 /* RegDataValue = *((unsigned long*)InformationBuffer+2); */
776 if (!rtw_setrfreg_cmd(Adapter,
777 *(unsigned char *)poid_par_priv->information_buf,
778 (unsigned long)(*((unsigned long *)poid_par_priv->information_buf + 2))))
779 status = NDIS_STATUS_NOT_ACCEPTED;
782 status = NDIS_STATUS_INVALID_LENGTH;
783 _irqlevel_changed_(&oldirql, RAISE);
788 /* ------------------------------------------------------------------------------ */
789 NDIS_STATUS oid_rt_pro_rf_read_registry_hdl(struct oid_par_priv *poid_par_priv)
791 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
793 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
796 /* DEBUG_ERR(("<**********************oid_rt_pro_rf_read_registry_hdl\n")); */
797 if (poid_par_priv->type_of_oid != SET_OID) { /* QUERY_OID */
798 status = NDIS_STATUS_NOT_ACCEPTED;
802 _irqlevel_changed_(&oldirql, LOWER);
803 if (poid_par_priv->information_buf_len == (sizeof(unsigned long) * 3)) {
804 if (Adapter->mppriv.act_in_progress == _TRUE)
805 status = NDIS_STATUS_NOT_ACCEPTED;
808 Adapter->mppriv.act_in_progress = _TRUE;
809 Adapter->mppriv.workparam.bcompleted = _FALSE;
810 Adapter->mppriv.workparam.act_type = MPT_READ_RF;
811 Adapter->mppriv.workparam.io_offset = *(unsigned long *)poid_par_priv->information_buf;
812 Adapter->mppriv.workparam.io_value = 0xcccccccc;
814 /* RegOffsetValue - The offset of RF register to read. */
815 /* RegDataWidth - The data width of RF register to read. */
816 /* RegDataValue - The value to read. */
817 /* RegOffsetValue = *((unsigned long*)InformationBuffer); */
818 /* RegDataWidth = *((unsigned long*)InformationBuffer+1); */
819 /* RegDataValue = *((unsigned long*)InformationBuffer+2); */
820 if (!rtw_getrfreg_cmd(Adapter,
821 *(unsigned char *)poid_par_priv->information_buf,
822 (unsigned char *)&Adapter->mppriv.workparam.io_value))
823 status = NDIS_STATUS_NOT_ACCEPTED;
828 status = NDIS_STATUS_INVALID_LENGTH;
829 _irqlevel_changed_(&oldirql, RAISE);
834 /* **************** oid_rtl_seg_01_11 section end**************** */
837 /* ************** oid_rtl_seg_03_00 section start ************** */
838 enum _CONNECT_STATE_ {
845 NDIS_STATUS oid_rt_get_connect_state_hdl(struct oid_par_priv *poid_par_priv)
847 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
848 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
850 struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
854 if (poid_par_priv->type_of_oid != QUERY_OID) {
855 status = NDIS_STATUS_NOT_ACCEPTED;
859 /* nStatus==0 CheckingStatus */
860 /* nStatus==1 Associated */
861 /* nStatus==2 AdHocMode */
862 /* nStatus==3 NotAssociated */
864 if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE)
865 ulInfo = CHECKINGSTATUS;
866 else if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
868 else if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE)
871 ulInfo = NOTASSOCIATED ;
873 *(ULONG *)poid_par_priv->information_buf = ulInfo;
874 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
877 /* Rearrange the order to let the UI still shows connection when scan is in progress */
878 if (pMgntInfo->mAssoc)
880 else if (pMgntInfo->mIbss)
882 else if (pMgntInfo->bScanInProgress)
886 ulInfoLen = sizeof(ULONG);
892 NDIS_STATUS oid_rt_set_default_key_id_hdl(struct oid_par_priv *poid_par_priv)
894 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
895 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
897 if (poid_par_priv->type_of_oid != SET_OID) {
898 status = NDIS_STATUS_NOT_ACCEPTED;
904 /* ************** oid_rtl_seg_03_00 section end ************** */