/****************************************************************************** * * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA * * ******************************************************************************/ #define _RTW_IOCTL_RTL_C_ #include #ifdef CONFIG_MP_INCLUDED #include #endif struct oid_obj_priv oid_rtl_seg_01_01[] = { {1, &oid_null_function}, //0x80 {1, &oid_null_function}, //0x81 {1, &oid_null_function}, //0x82 {1, &oid_null_function}, //0x83//OID_RT_SET_SNIFFER_MODE {1, &oid_rt_get_signal_quality_hdl}, //0x84 {1, &oid_rt_get_small_packet_crc_hdl}, //0x85 {1, &oid_rt_get_middle_packet_crc_hdl}, //0x86 {1, &oid_rt_get_large_packet_crc_hdl}, //0x87 {1, &oid_rt_get_tx_retry_hdl}, //0x88 {1, &oid_rt_get_rx_retry_hdl}, //0x89 {1, &oid_rt_pro_set_fw_dig_state_hdl}, //0x8A {1, &oid_rt_pro_set_fw_ra_state_hdl} , //0x8B {1, &oid_null_function}, //0x8C {1, &oid_null_function}, //0x8D {1, &oid_null_function}, //0x8E {1, &oid_null_function}, //0x8F {1, &oid_rt_get_rx_total_packet_hdl}, //0x90 {1, &oid_rt_get_tx_beacon_ok_hdl}, //0x91 {1, &oid_rt_get_tx_beacon_err_hdl}, //0x92 {1, &oid_rt_get_rx_icv_err_hdl}, //0x93 {1, &oid_rt_set_encryption_algorithm_hdl}, //0x94 {1, &oid_null_function}, //0x95 {1, &oid_rt_get_preamble_mode_hdl}, //0x96 {1, &oid_null_function}, //0x97 {1, &oid_rt_get_ap_ip_hdl}, //0x98 {1, &oid_rt_get_channelplan_hdl}, //0x99 {1, &oid_rt_set_preamble_mode_hdl}, //0x9A {1, &oid_rt_set_bcn_intvl_hdl}, //0x9B {1, &oid_null_function}, //0x9C {1, &oid_rt_dedicate_probe_hdl}, //0x9D {1, &oid_null_function}, //0x9E {1, &oid_null_function}, //0x9F {1, &oid_null_function}, //0xA0 {1, &oid_null_function}, //0xA1 {1, &oid_null_function}, //0xA2 {1, &oid_null_function}, //0xA3 {1, &oid_null_function}, //0xA4 {1, &oid_null_function}, //0xA5 {1, &oid_null_function}, //0xA6 {1, &oid_rt_get_total_tx_bytes_hdl}, //0xA7 {1, &oid_rt_get_total_rx_bytes_hdl}, //0xA8 {1, &oid_rt_current_tx_power_level_hdl}, //0xA9 {1, &oid_rt_get_enc_key_mismatch_count_hdl}, //0xAA {1, &oid_rt_get_enc_key_match_count_hdl}, //0xAB {1, &oid_rt_get_channel_hdl}, //0xAC {1, &oid_rt_set_channelplan_hdl}, //0xAD {1, &oid_rt_get_hardware_radio_off_hdl}, //0xAE {1, &oid_null_function}, //0xAF {1, &oid_null_function}, //0xB0 {1, &oid_null_function}, //0xB1 {1, &oid_null_function}, //0xB2 {1, &oid_null_function}, //0xB3 {1, &oid_rt_get_key_mismatch_hdl}, //0xB4 {1, &oid_null_function}, //0xB5 {1, &oid_null_function}, //0xB6 {1, &oid_null_function}, //0xB7 {1, &oid_null_function}, //0xB8 {1, &oid_null_function}, //0xB9 {1, &oid_null_function}, //0xBA {1, &oid_rt_supported_wireless_mode_hdl}, //0xBB {1, &oid_rt_get_channel_list_hdl}, //0xBC {1, &oid_rt_get_scan_in_progress_hdl}, //0xBD {1, &oid_null_function}, //0xBE {1, &oid_null_function}, //0xBF {1, &oid_null_function}, //0xC0 {1, &oid_rt_forced_data_rate_hdl}, //0xC1 {1, &oid_rt_wireless_mode_for_scan_list_hdl}, //0xC2 {1, &oid_rt_get_bss_wireless_mode_hdl}, //0xC3 {1, &oid_rt_scan_with_magic_packet_hdl}, //0xC4 {1, &oid_null_function}, //0xC5 {1, &oid_null_function}, //0xC6 {1, &oid_null_function}, //0xC7 {1, &oid_null_function}, //0xC8 {1, &oid_null_function}, //0xC9 {1, &oid_null_function}, //0xCA {1, &oid_null_function}, //0xCB {1, &oid_null_function}, //0xCC {1, &oid_null_function}, //0xCD {1, &oid_null_function}, //0xCE {1, &oid_null_function}, //0xCF }; struct oid_obj_priv oid_rtl_seg_01_03[] = { {1, &oid_rt_ap_get_associated_station_list_hdl}, //0x00 {1, &oid_null_function}, //0x01 {1, &oid_rt_ap_switch_into_ap_mode_hdl}, //0x02 {1, &oid_null_function}, //0x03 {1, &oid_rt_ap_supported_hdl}, //0x04 {1, &oid_rt_ap_set_passphrase_hdl}, //0x05 }; struct oid_obj_priv oid_rtl_seg_01_11[] = { {1, &oid_null_function}, //0xC0 OID_RT_PRO_RX_FILTER {1, &oid_null_function}, //0xC1 OID_CE_USB_WRITE_REGISTRY {1, &oid_null_function}, //0xC2 OID_CE_USB_READ_REGISTRY {1, &oid_null_function}, //0xC3 OID_RT_PRO_SET_INITIAL_GAIN {1, &oid_null_function}, //0xC4 OID_RT_PRO_SET_BB_RF_STANDBY_MODE {1, &oid_null_function}, //0xC5 OID_RT_PRO_SET_BB_RF_SHUTDOWN_MODE {1, &oid_null_function}, //0xC6 OID_RT_PRO_SET_TX_CHARGE_PUMP {1, &oid_null_function}, //0xC7 OID_RT_PRO_SET_RX_CHARGE_PUMP {1, &oid_rt_pro_rf_write_registry_hdl}, //0xC8 {1, &oid_rt_pro_rf_read_registry_hdl}, //0xC9 {1, &oid_null_function} //0xCA OID_RT_PRO_QUERY_RF_TYPE }; struct oid_obj_priv oid_rtl_seg_03_00[] = { {1, &oid_null_function}, //0x00 {1, &oid_rt_get_connect_state_hdl}, //0x01 {1, &oid_null_function}, //0x02 {1, &oid_null_function}, //0x03 {1, &oid_rt_set_default_key_id_hdl}, //0x04 }; //************** oid_rtl_seg_01_01 section start ************** NDIS_STATUS oid_rt_pro_set_fw_dig_state_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; #if 0 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context); _irqL oldirql; _func_enter_; if(poid_par_priv->type_of_oid != SET_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } _irqlevel_changed_(&oldirql,LOWER); if(poid_par_priv->information_buf_len >= sizeof(struct setdig_parm)) { //DEBUG_ERR(("===> oid_rt_pro_set_fw_dig_state_hdl. type:0x%02x.\n",*((unsigned char*)poid_par_priv->information_buf ))); if(!rtw_setfwdig_cmd(Adapter,*((unsigned char*)poid_par_priv->information_buf ))) { status = NDIS_STATUS_NOT_ACCEPTED; } } else{ status = NDIS_STATUS_NOT_ACCEPTED; } _irqlevel_changed_(&oldirql,RAISE); _func_exit_; #endif return status; } //----------------------------------------------------------------------------- NDIS_STATUS oid_rt_pro_set_fw_ra_state_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; #if 0 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context); _irqL oldirql; _func_enter_; if(poid_par_priv->type_of_oid != SET_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } _irqlevel_changed_(&oldirql,LOWER); if(poid_par_priv->information_buf_len >= sizeof(struct setra_parm)) { //DEBUG_ERR(("===> oid_rt_pro_set_fw_ra_state_hdl. type:0x%02x.\n",*((unsigned char*)poid_par_priv->information_buf ))); if(!rtw_setfwra_cmd(Adapter,*((unsigned char*)poid_par_priv->information_buf ))) { status = NDIS_STATUS_NOT_ACCEPTED; } } else{ status = NDIS_STATUS_NOT_ACCEPTED; } _irqlevel_changed_(&oldirql,RAISE); _func_exit_; #endif return status; } //----------------------------------------------------------------------------- NDIS_STATUS oid_rt_get_signal_quality_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); //DEBUG_ERR(("<**********************oid_rt_get_signal_quality_hdl \n")); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } #if 0 if(pMgntInfo->mAssoc || pMgntInfo->mIbss) { ulInfo = pAdapter->RxStats.SignalQuality; *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; } else { ulInfo = 0xffffffff; // It stands for -1 in 4-byte integer. } break; #endif return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_get_small_packet_crc_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } if(poid_par_priv->information_buf_len >= sizeof(ULONG) ) { *(ULONG *)poid_par_priv->information_buf = padapter->recvpriv.rx_smallpacket_crcerr; *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; } else { status = NDIS_STATUS_INVALID_LENGTH; } return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_get_middle_packet_crc_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } if(poid_par_priv->information_buf_len >= sizeof(ULONG) ) { *(ULONG *)poid_par_priv->information_buf = padapter->recvpriv.rx_middlepacket_crcerr; *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; } else { status = NDIS_STATUS_INVALID_LENGTH; } return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_get_large_packet_crc_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } if(poid_par_priv->information_buf_len >= sizeof(ULONG) ) { *(ULONG *)poid_par_priv->information_buf = padapter->recvpriv.rx_largepacket_crcerr; *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; } else { status = NDIS_STATUS_INVALID_LENGTH; } return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_get_tx_retry_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } NDIS_STATUS oid_rt_get_rx_retry_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_get_rx_total_packet_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } if(poid_par_priv->information_buf_len >= sizeof(ULONG) ) { *(u64 *)poid_par_priv->information_buf = padapter->recvpriv.rx_pkts + padapter->recvpriv.rx_drop; *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; } else { status = NDIS_STATUS_INVALID_LENGTH; } return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_get_tx_beacon_ok_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } NDIS_STATUS oid_rt_get_tx_beacon_err_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_get_rx_icv_err_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } if(poid_par_priv->information_buf_len>= sizeof(u32)) { //_rtw_memcpy(*(uint *)poid_par_priv->information_buf,padapter->recvpriv.rx_icv_err,sizeof(u32)); *(uint *)poid_par_priv->information_buf = padapter->recvpriv.rx_icv_err; *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; } else { status = NDIS_STATUS_INVALID_LENGTH ; } return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_set_encryption_algorithm_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != SET_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_get_preamble_mode_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); ULONG preamblemode = 0 ; if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } if(poid_par_priv->information_buf_len>= sizeof(ULONG)) { if(padapter->registrypriv.preamble == PREAMBLE_LONG) preamblemode = 0; else if (padapter->registrypriv.preamble == PREAMBLE_AUTO) preamblemode = 1; else if (padapter->registrypriv.preamble == PREAMBLE_SHORT) preamblemode = 2; *(ULONG *)poid_par_priv->information_buf = preamblemode ; *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; } else { status = NDIS_STATUS_INVALID_LENGTH ; } return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_get_ap_ip_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } NDIS_STATUS oid_rt_get_channelplan_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; *(u16 *)poid_par_priv->information_buf = padapter->mlmepriv.ChannelPlan ; return status; } NDIS_STATUS oid_rt_set_channelplan_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != SET_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } padapter->mlmepriv.ChannelPlan = *(u16 *)poid_par_priv->information_buf ; return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_set_preamble_mode_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); ULONG preamblemode = 0; if(poid_par_priv->type_of_oid != SET_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } if(poid_par_priv->information_buf_len>= sizeof(ULONG)) { preamblemode = *(ULONG *)poid_par_priv->information_buf ; if( preamblemode == 0) padapter->registrypriv.preamble = PREAMBLE_LONG; else if (preamblemode==1 ) padapter->registrypriv.preamble = PREAMBLE_AUTO; else if ( preamblemode==2 ) padapter->registrypriv.preamble = PREAMBLE_SHORT; *(ULONG *)poid_par_priv->information_buf = preamblemode ; *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; } else { status = NDIS_STATUS_INVALID_LENGTH ; } return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_set_bcn_intvl_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != SET_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } NDIS_STATUS oid_rt_dedicate_probe_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_get_total_tx_bytes_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } if(poid_par_priv->information_buf_len>= sizeof(ULONG)) { *(u64 *)poid_par_priv->information_buf = padapter->xmitpriv.tx_bytes; *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; } else { status = NDIS_STATUS_INVALID_LENGTH ; } return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_get_total_rx_bytes_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } if(poid_par_priv->information_buf_len>= sizeof(ULONG)) { //_rtw_memcpy(*(uint *)poid_par_priv->information_buf,padapter->recvpriv.rx_icv_err,sizeof(u32)); *(u64 *)poid_par_priv->information_buf = padapter->recvpriv.rx_bytes; *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; } else { status = NDIS_STATUS_INVALID_LENGTH ; } return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_current_tx_power_level_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); return status; } NDIS_STATUS oid_rt_get_enc_key_mismatch_count_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } NDIS_STATUS oid_rt_get_enc_key_match_count_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } NDIS_STATUS oid_rt_get_channel_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); struct mlme_priv *pmlmepriv = &padapter->mlmepriv; NDIS_802_11_CONFIGURATION *pnic_Config; ULONG channelnum; _func_enter_; if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } if ( (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) || (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE)) pnic_Config = &pmlmepriv->cur_network.network.Configuration; else pnic_Config = &padapter->registrypriv.dev_network.Configuration; channelnum = pnic_Config->DSConfig; *(ULONG *)poid_par_priv->information_buf = channelnum; *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; _func_exit_; return status; } NDIS_STATUS oid_rt_get_hardware_radio_off_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } NDIS_STATUS oid_rt_get_key_mismatch_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } NDIS_STATUS oid_rt_supported_wireless_mode_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); ULONG ulInfo = 0 ; //DEBUG_ERR(("<**********************oid_rt_supported_wireless_mode_hdl \n")); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } if(poid_par_priv->information_buf_len >= sizeof(ULONG)){ ulInfo |= 0x0100; //WIRELESS_MODE_B ulInfo |= 0x0200; //WIRELESS_MODE_G ulInfo |= 0x0400; //WIRELESS_MODE_A *(ULONG *) poid_par_priv->information_buf = ulInfo; //DEBUG_ERR(("<===oid_rt_supported_wireless_mode %x\n",ulInfo)); *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; } else{ status = NDIS_STATUS_INVALID_LENGTH; } return status; } NDIS_STATUS oid_rt_get_channel_list_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } NDIS_STATUS oid_rt_get_scan_in_progress_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } NDIS_STATUS oid_rt_forced_data_rate_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); return status; } NDIS_STATUS oid_rt_wireless_mode_for_scan_list_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); return status; } NDIS_STATUS oid_rt_get_bss_wireless_mode_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } NDIS_STATUS oid_rt_scan_with_magic_packet_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); return status; } //************** oid_rtl_seg_01_01 section end ************** //************** oid_rtl_seg_01_03 section start ************** NDIS_STATUS oid_rt_ap_get_associated_station_list_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } NDIS_STATUS oid_rt_ap_switch_into_ap_mode_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); return status; } NDIS_STATUS oid_rt_ap_supported_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); return status; } NDIS_STATUS oid_rt_ap_set_passphrase_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != SET_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } //************** oid_rtl_seg_01_03 section end ************** //**************** oid_rtl_seg_01_11 section start **************** NDIS_STATUS oid_rt_pro_rf_write_registry_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context); _irqL oldirql; _func_enter_; //DEBUG_ERR(("<**********************oid_rt_pro_rf_write_registry_hdl \n")); if(poid_par_priv->type_of_oid != SET_OID) //QUERY_OID { status = NDIS_STATUS_NOT_ACCEPTED; return status; } _irqlevel_changed_(&oldirql,LOWER); if(poid_par_priv->information_buf_len== (sizeof(unsigned long)*3)) { //RegOffsetValue - The offset of RF register to write. //RegDataWidth - The data width of RF register to write. //RegDataValue - The value to write. //RegOffsetValue = *((unsigned long*)InformationBuffer); //RegDataWidth = *((unsigned long*)InformationBuffer+1); //RegDataValue = *((unsigned long*)InformationBuffer+2); if(!rtw_setrfreg_cmd(Adapter, *(unsigned char*)poid_par_priv->information_buf, (unsigned long)(*((unsigned long*)poid_par_priv->information_buf+2)))) { status = NDIS_STATUS_NOT_ACCEPTED; } } else{ status = NDIS_STATUS_INVALID_LENGTH; } _irqlevel_changed_(&oldirql,RAISE); _func_exit_; return status; } //------------------------------------------------------------------------------ NDIS_STATUS oid_rt_pro_rf_read_registry_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; #if 0 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context); _irqL oldirql; _func_enter_; //DEBUG_ERR(("<**********************oid_rt_pro_rf_read_registry_hdl \n")); if(poid_par_priv->type_of_oid != SET_OID) //QUERY_OID { status = NDIS_STATUS_NOT_ACCEPTED; return status; } _irqlevel_changed_(&oldirql,LOWER); if(poid_par_priv->information_buf_len== (sizeof(unsigned long)*3)) { if(Adapter->mppriv.act_in_progress == _TRUE) { status = NDIS_STATUS_NOT_ACCEPTED; } else { //init workparam Adapter->mppriv.act_in_progress = _TRUE; Adapter->mppriv.workparam.bcompleted= _FALSE; Adapter->mppriv.workparam.act_type = MPT_READ_RF; Adapter->mppriv.workparam.io_offset = *(unsigned long*)poid_par_priv->information_buf; Adapter->mppriv.workparam.io_value = 0xcccccccc; //RegOffsetValue - The offset of RF register to read. //RegDataWidth - The data width of RF register to read. //RegDataValue - The value to read. //RegOffsetValue = *((unsigned long*)InformationBuffer); //RegDataWidth = *((unsigned long*)InformationBuffer+1); //RegDataValue = *((unsigned long*)InformationBuffer+2); if(!rtw_getrfreg_cmd(Adapter, *(unsigned char*)poid_par_priv->information_buf, (unsigned char*)&Adapter->mppriv.workparam.io_value)) { status = NDIS_STATUS_NOT_ACCEPTED; } } } else { status = NDIS_STATUS_INVALID_LENGTH; } _irqlevel_changed_(&oldirql,RAISE); _func_exit_; #endif return status; } //**************** oid_rtl_seg_01_11 section end**************** //************** oid_rtl_seg_03_00 section start ************** enum _CONNECT_STATE_{ CHECKINGSTATUS, ASSOCIATED, ADHOCMODE, NOTASSOCIATED }; NDIS_STATUS oid_rt_get_connect_state_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); ULONG ulInfo; if(poid_par_priv->type_of_oid != QUERY_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } // nStatus==0 CheckingStatus // nStatus==1 Associated // nStatus==2 AdHocMode // nStatus==3 NotAssociated if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE) ulInfo = CHECKINGSTATUS; else if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) ulInfo = ASSOCIATED; else if(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)== _TRUE) ulInfo = ADHOCMODE; else ulInfo = NOTASSOCIATED ; *(ULONG *)poid_par_priv->information_buf = ulInfo; *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; #if 0 // Rearrange the order to let the UI still shows connection when scan is in progress RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_GET_CONNECT_STATE.\n")); if(pMgntInfo->mAssoc) ulInfo = 1; else if(pMgntInfo->mIbss) ulInfo = 2; else if(pMgntInfo->bScanInProgress) ulInfo = 0; else ulInfo = 3; ulInfoLen = sizeof(ULONG); RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_GET_CONNECT_STATE: %d\n", ulInfo)); #endif return status; } NDIS_STATUS oid_rt_set_default_key_id_hdl(struct oid_par_priv* poid_par_priv) { NDIS_STATUS status = NDIS_STATUS_SUCCESS; PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); if(poid_par_priv->type_of_oid != SET_OID) { status = NDIS_STATUS_NOT_ACCEPTED; return status; } return status; } //************** oid_rtl_seg_03_00 section end **************