| /****************************************************************************** |
| * |
| * Copyright(c) 2007 - 2017 Realtek Corporation. |
| * |
| * 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. |
| * |
| *****************************************************************************/ |
| #define _RTW_IOCTL_RTL_C_ |
| |
| #include <drv_types.h> |
| |
| #ifdef CONFIG_MP_INCLUDED |
| #include <rtw_mp_ioctl.h> |
| #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; |
| |
| |
| 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); |
| #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; |
| |
| 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); |
| #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); |
| struct rf_ctl_t *rfctl = adapter_to_rfctl(padapter); |
| |
| 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 = rfctl->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); |
| struct rf_ctl_t *rfctl = adapter_to_rfctl(padapter); |
| |
| if (poid_par_priv->type_of_oid != SET_OID) { |
| status = NDIS_STATUS_NOT_ACCEPTED; |
| return status; |
| } |
| |
| rfctl->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; |
| |
| 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; |
| |
| |
| |
| |
| 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; |
| /* 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); |
| |
| 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; |
| |
| /* 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); |
| #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 */ |
| if (pMgntInfo->mAssoc) |
| ulInfo = 1; |
| else if (pMgntInfo->mIbss) |
| ulInfo = 2; |
| else if (pMgntInfo->bScanInProgress) |
| ulInfo = 0; |
| else |
| ulInfo = 3; |
| ulInfoLen = sizeof(ULONG); |
| #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 ************** */ |