mirror of
https://github.com/lwfinger/rtl8188eu.git
synced 2025-02-12 17:32:06 +00:00
rtl8188eu: Flatten directory hal/
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
This commit is contained in:
parent
52f8d17ffc
commit
494792ba07
81 changed files with 41103 additions and 66623 deletions
86
Makefile
86
Makefile
|
@ -77,15 +77,15 @@ CONFIG_DRVEXT_MODULE = n
|
||||||
export TopDIR ?= $(shell pwd)
|
export TopDIR ?= $(shell pwd)
|
||||||
|
|
||||||
|
|
||||||
OUTSRC_FILES := hal/OUTSRC/odm_debug.o \
|
OUTSRC_FILES := hal/odm_debug.o \
|
||||||
hal/OUTSRC/odm_interface.o\
|
hal/odm_interface.o\
|
||||||
hal/OUTSRC/odm_HWConfig.o\
|
hal/odm_HWConfig.o\
|
||||||
hal/OUTSRC/odm.o\
|
hal/odm.o\
|
||||||
hal/OUTSRC/HalPhyRf.o
|
hal/HalPhyRf.o
|
||||||
|
|
||||||
RTL871X = rtl8188e
|
RTL871X = rtl8188e
|
||||||
HAL_COMM_FILES := hal/$(RTL871X)/$(RTL871X)_xmit.o\
|
HAL_COMM_FILES := hal/rtl8188e_xmit.o\
|
||||||
hal/$(RTL871X)/$(RTL871X)_sreset.o
|
hal/rtl8188e_sreset.o
|
||||||
|
|
||||||
ifeq ($(CONFIG_SDIO_HCI), y)
|
ifeq ($(CONFIG_SDIO_HCI), y)
|
||||||
MODULE_NAME = 8189es
|
MODULE_NAME = 8189es
|
||||||
|
@ -99,24 +99,23 @@ ifeq ($(CONFIG_PCI_HCI), y)
|
||||||
MODULE_NAME = 8188ee
|
MODULE_NAME = 8188ee
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#hal/OUTSRC/$(RTL871X)/HalHWImg8188E_FW.o
|
OUTSRC_FILES += hal/HalHWImg8188E_MAC.o\
|
||||||
OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/HalHWImg8188E_MAC.o\
|
hal/HalHWImg8188E_BB.o\
|
||||||
hal/OUTSRC/$(RTL871X)/HalHWImg8188E_BB.o\
|
hal/HalHWImg8188E_RF.o\
|
||||||
hal/OUTSRC/$(RTL871X)/HalHWImg8188E_RF.o\
|
hal/Hal8188EFWImg_CE.o\
|
||||||
hal/OUTSRC/$(RTL871X)/Hal8188EFWImg_CE.o\
|
hal/HalPhyRf_8188e.o\
|
||||||
hal/OUTSRC/$(RTL871X)/HalPhyRf_8188e.o\
|
hal/odm_RegConfig8188E.o\
|
||||||
hal/OUTSRC/$(RTL871X)/odm_RegConfig8188E.o\
|
hal/Hal8188ERateAdaptive.o\
|
||||||
hal/OUTSRC/$(RTL871X)/Hal8188ERateAdaptive.o\
|
hal/odm_RTL8188E.o
|
||||||
hal/OUTSRC/$(RTL871X)/odm_RTL8188E.o
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_RTL8188E), y)
|
ifeq ($(CONFIG_RTL8188E), y)
|
||||||
ifeq ($(CONFIG_WOWLAN), y)
|
ifeq ($(CONFIG_WOWLAN), y)
|
||||||
OUTSRC_FILES += hal/OUTSRC/$(RTL871X)/HalHWImg8188E_FW.o
|
OUTSRC_FILES += hal/HalHWImg8188E_FW.o
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
PWRSEQ_FILES := hal/HalPwrSeqCmd.o \
|
PWRSEQ_FILES := hal/HalPwrSeqCmd.o \
|
||||||
hal/$(RTL871X)/Hal8188EPwrSeq.o
|
hal/Hal8188EPwrSeq.o
|
||||||
|
|
||||||
CHIP_FILES += $(HAL_COMM_FILES) $(OUTSRC_FILES) $(PWRSEQ_FILES)
|
CHIP_FILES += $(HAL_COMM_FILES) $(OUTSRC_FILES) $(PWRSEQ_FILES)
|
||||||
|
|
||||||
|
@ -160,40 +159,21 @@ endif
|
||||||
|
|
||||||
_HAL_INTFS_FILES := hal/hal_intf.o \
|
_HAL_INTFS_FILES := hal/hal_intf.o \
|
||||||
hal/hal_com.o \
|
hal/hal_com.o \
|
||||||
hal/$(RTL871X)/$(RTL871X)_hal_init.o \
|
hal/rtl8188e_hal_init.o \
|
||||||
hal/$(RTL871X)/$(RTL871X)_phycfg.o \
|
hal/rtl8188e_phycfg.o \
|
||||||
hal/$(RTL871X)/$(RTL871X)_rf6052.o \
|
hal/rtl8188e_rf6052.o \
|
||||||
hal/$(RTL871X)/$(RTL871X)_dm.o \
|
hal/rtl8188e_dm.o \
|
||||||
hal/$(RTL871X)/$(RTL871X)_rxdesc.o \
|
hal/rtl8188e_rxdesc.o \
|
||||||
hal/$(RTL871X)/$(RTL871X)_cmd.o \
|
hal/rtl8188e_cmd.o \
|
||||||
hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_halinit.o \
|
hal/$(HCI_NAME)_halinit.o \
|
||||||
hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_led.o \
|
hal/rtl$(MODULE_NAME)_led.o \
|
||||||
hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_xmit.o \
|
hal//rtl$(MODULE_NAME)_xmit.o \
|
||||||
hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_recv.o
|
hal/rtl$(MODULE_NAME)_recv.o
|
||||||
|
|
||||||
ifeq ($(CONFIG_SDIO_HCI), y)
|
_HAL_INTFS_FILES += hal/$(HCI_NAME)_ops_linux.o
|
||||||
_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops.o
|
|
||||||
else
|
|
||||||
ifeq ($(CONFIG_GSPI_HCI), y)
|
|
||||||
_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops.o
|
|
||||||
else
|
|
||||||
_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops_linux.o
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
_HAL_INTFS_FILES += $(CHIP_FILES)
|
_HAL_INTFS_FILES += $(CHIP_FILES)
|
||||||
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_AUTOCFG_CP), y)
|
|
||||||
|
|
||||||
#ifeq ($(CONFIG_RTL8188E)$(CONFIG_SDIO_HCI),yy)
|
|
||||||
#$(shell cp $(TopDIR)/autoconf_rtl8189e_$(HCI_NAME)_linux.h $(TopDIR)/include/autoconf.h)
|
|
||||||
#else
|
|
||||||
#$(shell cp $(TopDIR)/autoconf_$(RTL871X)_$(HCI_NAME)_linux.h $(TopDIR)/include/autoconf.h)
|
|
||||||
#endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_USB_HCI), y)
|
ifeq ($(CONFIG_USB_HCI), y)
|
||||||
ifeq ($(CONFIG_USB_AUTOSUSPEND), y)
|
ifeq ($(CONFIG_USB_AUTOSUSPEND), y)
|
||||||
EXTRA_CFLAGS += -DCONFIG_USB_AUTOSUSPEND
|
EXTRA_CFLAGS += -DCONFIG_USB_AUTOSUSPEND
|
||||||
|
@ -663,7 +643,7 @@ $(MODULE_NAME)-y += $(rtk_core)
|
||||||
$(MODULE_NAME)-$(CONFIG_INTEL_WIDI) += core/rtw_intel_widi.o
|
$(MODULE_NAME)-$(CONFIG_INTEL_WIDI) += core/rtw_intel_widi.o
|
||||||
|
|
||||||
$(MODULE_NAME)-$(CONFIG_WAPI_SUPPORT) += core/rtw_wapi.o \
|
$(MODULE_NAME)-$(CONFIG_WAPI_SUPPORT) += core/rtw_wapi.o \
|
||||||
core/rtw_wapi_sms4.o
|
core/rtw_wapi_sms4.o
|
||||||
|
|
||||||
$(MODULE_NAME)-y += core/efuse/rtw_efuse.o
|
$(MODULE_NAME)-y += core/efuse/rtw_efuse.o
|
||||||
|
|
||||||
|
@ -699,21 +679,13 @@ config_r:
|
||||||
|
|
||||||
.PHONY: modules clean clean_odm-8192c
|
.PHONY: modules clean clean_odm-8192c
|
||||||
|
|
||||||
clean_odm-8192c:
|
|
||||||
cd hal/OUTSRC/rtl8192c ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
|
|
||||||
|
|
||||||
clean: $(clean_more)
|
clean: $(clean_more)
|
||||||
rm -fr *.mod.c *.mod *.o .*.cmd *.ko *~
|
rm -fr *.mod.c *.mod *.o .*.cmd *.ko *~
|
||||||
rm -fr .tmp_versions
|
rm -fr .tmp_versions
|
||||||
rm -fr Module.symvers ; rm -fr Module.markers ; rm -fr modules.order
|
rm -fr Module.symvers ; rm -fr Module.markers ; rm -fr modules.order
|
||||||
cd core/efuse ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
|
cd core/efuse ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
|
||||||
cd core ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
|
cd core ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
|
||||||
cd hal/$(RTL871X)/$(HCI_NAME) ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
|
|
||||||
cd hal/$(RTL871X) ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
|
|
||||||
cd hal/OUTSRC/$(RTL871X) ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
|
|
||||||
cd hal/OUTSRC/ ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
|
|
||||||
cd hal ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
|
cd hal ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
|
||||||
cd os_dep/linux ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
|
|
||||||
cd os_dep ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
|
cd os_dep ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#include "../odm_precomp.h"
|
#include "odm_precomp.h"
|
||||||
|
|
||||||
const u8 Rtl8188EFwImgArray[Rtl8188EFWImgArrayLength] = {
|
const u8 Rtl8188EFwImgArray[Rtl8188EFWImgArrayLength] = {
|
||||||
0xE1, 0x88, 0x10, 0x00, 0x0B, 0x00, 0x01, 0x00, 0x01, 0x21, 0x11, 0x27, 0x30, 0x36, 0x00, 0x00,
|
0xE1, 0x88, 0x10, 0x00, 0x0B, 0x00, 0x01, 0x00, 0x01, 0x21, 0x11, 0x27, 0x30, 0x36, 0x00, 0x00,
|
183
hal/Hal8188EPwrSeq.c
Normal file → Executable file
183
hal/Hal8188EPwrSeq.c
Normal file → Executable file
|
@ -1,86 +1,97 @@
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* 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
|
* under the terms of version 2 of the GNU General Public License as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
* more details.
|
* more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License along with
|
* 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.,
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "Hal8188EPwrSeq.h"
|
#include "Hal8188EPwrSeq.h"
|
||||||
#include <rtl8188e_hal.h>
|
#include <rtl8188e_hal.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
drivers should parse below arrays and do the corresponding actions
|
drivers should parse below arrays and do the corresponding actions
|
||||||
*/
|
*/
|
||||||
/* 3 Power on Array */
|
//3 Power on Array
|
||||||
struct wl_pwr_cfg rtl8188E_power_on_flow[RTL8188E_TRANS_CARDEMU_TO_ACT_STEPS + RTL8188E_TRANS_END_STEPS] = {
|
WLAN_PWR_CFG rtl8188E_power_on_flow[RTL8188E_TRANS_CARDEMU_TO_ACT_STEPS+RTL8188E_TRANS_END_STEPS]=
|
||||||
RTL8188E_TRANS_CARDEMU_TO_ACT
|
{
|
||||||
RTL8188E_TRANS_END
|
RTL8188E_TRANS_CARDEMU_TO_ACT
|
||||||
};
|
RTL8188E_TRANS_END
|
||||||
|
};
|
||||||
/* 3Radio off Array */
|
|
||||||
struct wl_pwr_cfg rtl8188E_radio_off_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + RTL8188E_TRANS_END_STEPS] = {
|
//3Radio off Array
|
||||||
RTL8188E_TRANS_ACT_TO_CARDEMU
|
WLAN_PWR_CFG rtl8188E_radio_off_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_END_STEPS]=
|
||||||
RTL8188E_TRANS_END
|
{
|
||||||
};
|
RTL8188E_TRANS_ACT_TO_CARDEMU
|
||||||
|
RTL8188E_TRANS_END
|
||||||
/* 3Card Disable Array */
|
};
|
||||||
struct wl_pwr_cfg rtl8188E_card_disable_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS + RTL8188E_TRANS_END_STEPS] = {
|
|
||||||
RTL8188E_TRANS_ACT_TO_CARDEMU
|
//3Card Disable Array
|
||||||
RTL8188E_TRANS_CARDEMU_TO_CARDDIS
|
WLAN_PWR_CFG rtl8188E_card_disable_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8188E_TRANS_END_STEPS]=
|
||||||
RTL8188E_TRANS_END
|
{
|
||||||
};
|
RTL8188E_TRANS_ACT_TO_CARDEMU
|
||||||
|
RTL8188E_TRANS_CARDEMU_TO_CARDDIS
|
||||||
/* 3 Card Enable Array */
|
RTL8188E_TRANS_END
|
||||||
struct wl_pwr_cfg rtl8188E_card_enable_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS + RTL8188E_TRANS_END_STEPS] = {
|
};
|
||||||
RTL8188E_TRANS_CARDDIS_TO_CARDEMU
|
|
||||||
RTL8188E_TRANS_CARDEMU_TO_ACT
|
//3 Card Enable Array
|
||||||
RTL8188E_TRANS_END
|
WLAN_PWR_CFG rtl8188E_card_enable_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8188E_TRANS_END_STEPS]=
|
||||||
};
|
{
|
||||||
|
RTL8188E_TRANS_CARDDIS_TO_CARDEMU
|
||||||
/* 3Suspend Array */
|
RTL8188E_TRANS_CARDEMU_TO_ACT
|
||||||
struct wl_pwr_cfg rtl8188E_suspend_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS + RTL8188E_TRANS_END_STEPS] = {
|
RTL8188E_TRANS_END
|
||||||
RTL8188E_TRANS_ACT_TO_CARDEMU
|
};
|
||||||
RTL8188E_TRANS_CARDEMU_TO_SUS
|
|
||||||
RTL8188E_TRANS_END
|
//3Suspend Array
|
||||||
};
|
WLAN_PWR_CFG rtl8188E_suspend_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS+RTL8188E_TRANS_END_STEPS]=
|
||||||
|
{
|
||||||
/* 3 Resume Array */
|
RTL8188E_TRANS_ACT_TO_CARDEMU
|
||||||
struct wl_pwr_cfg rtl8188E_resume_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS + RTL8188E_TRANS_END_STEPS] = {
|
RTL8188E_TRANS_CARDEMU_TO_SUS
|
||||||
RTL8188E_TRANS_SUS_TO_CARDEMU
|
RTL8188E_TRANS_END
|
||||||
RTL8188E_TRANS_CARDEMU_TO_ACT
|
};
|
||||||
RTL8188E_TRANS_END
|
|
||||||
};
|
//3 Resume Array
|
||||||
|
WLAN_PWR_CFG rtl8188E_resume_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS+RTL8188E_TRANS_END_STEPS]=
|
||||||
/* 3HWPDN Array */
|
{
|
||||||
struct wl_pwr_cfg rtl8188E_hwpdn_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS + RTL8188E_TRANS_END_STEPS] = {
|
RTL8188E_TRANS_SUS_TO_CARDEMU
|
||||||
RTL8188E_TRANS_ACT_TO_CARDEMU
|
RTL8188E_TRANS_CARDEMU_TO_ACT
|
||||||
RTL8188E_TRANS_CARDEMU_TO_PDN
|
RTL8188E_TRANS_END
|
||||||
RTL8188E_TRANS_END
|
};
|
||||||
};
|
|
||||||
|
|
||||||
/* 3 Enter LPS */
|
//3HWPDN Array
|
||||||
struct wl_pwr_cfg rtl8188E_enter_lps_flow[RTL8188E_TRANS_ACT_TO_LPS_STEPS + RTL8188E_TRANS_END_STEPS] = {
|
WLAN_PWR_CFG rtl8188E_hwpdn_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8188E_TRANS_END_STEPS]=
|
||||||
/* FW behavior */
|
{
|
||||||
RTL8188E_TRANS_ACT_TO_LPS
|
RTL8188E_TRANS_ACT_TO_CARDEMU
|
||||||
RTL8188E_TRANS_END
|
RTL8188E_TRANS_CARDEMU_TO_PDN
|
||||||
};
|
RTL8188E_TRANS_END
|
||||||
|
};
|
||||||
/* 3 Leave LPS */
|
|
||||||
struct wl_pwr_cfg rtl8188E_leave_lps_flow[RTL8188E_TRANS_LPS_TO_ACT_STEPS + RTL8188E_TRANS_END_STEPS] = {
|
//3 Enter LPS
|
||||||
/* FW behavior */
|
WLAN_PWR_CFG rtl8188E_enter_lps_flow[RTL8188E_TRANS_ACT_TO_LPS_STEPS+RTL8188E_TRANS_END_STEPS]=
|
||||||
RTL8188E_TRANS_LPS_TO_ACT
|
{
|
||||||
RTL8188E_TRANS_END
|
//FW behavior
|
||||||
};
|
RTL8188E_TRANS_ACT_TO_LPS
|
||||||
|
RTL8188E_TRANS_END
|
||||||
|
};
|
||||||
|
|
||||||
|
//3 Leave LPS
|
||||||
|
WLAN_PWR_CFG rtl8188E_leave_lps_flow[RTL8188E_TRANS_LPS_TO_ACT_STEPS+RTL8188E_TRANS_END_STEPS]=
|
||||||
|
{
|
||||||
|
//FW behavior
|
||||||
|
RTL8188E_TRANS_LPS_TO_ACT
|
||||||
|
RTL8188E_TRANS_END
|
||||||
|
};
|
||||||
|
|
||||||
|
|
1422
hal/Hal8188ERateAdaptive.c
Normal file → Executable file
1422
hal/Hal8188ERateAdaptive.c
Normal file → Executable file
File diff suppressed because it is too large
Load diff
2168
hal/HalHWImg8188E_BB.c
Normal file → Executable file
2168
hal/HalHWImg8188E_BB.c
Normal file → Executable file
File diff suppressed because it is too large
Load diff
732
hal/HalHWImg8188E_MAC.c
Normal file → Executable file
732
hal/HalHWImg8188E_MAC.c
Normal file → Executable file
|
@ -1,230 +1,502 @@
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* 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
|
* under the terms of version 2 of the GNU General Public License as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
* more details.
|
* more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License along with
|
* 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.,
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "odm_precomp.h"
|
#include "odm_precomp.h"
|
||||||
#include <rtw_iol.h>
|
#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
|
#include <rtw_iol.h>
|
||||||
static bool Checkcondition(const u32 condition, const u32 hex)
|
#endif
|
||||||
{
|
#if (RTL8188E_SUPPORT == 1)
|
||||||
u32 _board = (hex & 0x000000FF);
|
static BOOLEAN
|
||||||
u32 _interface = (hex & 0x0000FF00) >> 8;
|
CheckCondition(
|
||||||
u32 _platform = (hex & 0x00FF0000) >> 16;
|
const u4Byte Condition,
|
||||||
u32 cond = condition;
|
const u4Byte Hex
|
||||||
|
)
|
||||||
if (condition == 0xCDCDCDCD)
|
{
|
||||||
return true;
|
u4Byte _board = (Hex & 0x000000FF);
|
||||||
|
u4Byte _interface = (Hex & 0x0000FF00) >> 8;
|
||||||
cond = condition & 0x000000FF;
|
u4Byte _platform = (Hex & 0x00FF0000) >> 16;
|
||||||
if ((_board == cond) && cond != 0x00)
|
u4Byte cond = Condition;
|
||||||
return false;
|
|
||||||
|
if ( Condition == 0xCDCDCDCD )
|
||||||
cond = condition & 0x0000FF00;
|
return TRUE;
|
||||||
cond = cond >> 8;
|
|
||||||
if ((_interface & cond) == 0 && cond != 0x07)
|
cond = Condition & 0x000000FF;
|
||||||
return false;
|
if ( (_board != cond) && (cond != 0xFF) )
|
||||||
|
return FALSE;
|
||||||
cond = condition & 0x00FF0000;
|
|
||||||
cond = cond >> 16;
|
cond = Condition & 0x0000FF00;
|
||||||
if ((_platform & cond) == 0 && cond != 0x0F)
|
cond = cond >> 8;
|
||||||
return false;
|
if ( ((_interface & cond) == 0) && (cond != 0x07) )
|
||||||
return true;
|
return FALSE;
|
||||||
}
|
|
||||||
|
cond = Condition & 0x00FF0000;
|
||||||
/******************************************************************************
|
cond = cond >> 16;
|
||||||
* MAC_REG.TXT
|
if ( ((_platform & cond) == 0) && (cond != 0x0F) )
|
||||||
******************************************************************************/
|
return FALSE;
|
||||||
|
return TRUE;
|
||||||
static u32 array_MAC_REG_8188E[] = {
|
}
|
||||||
0x026, 0x00000041,
|
|
||||||
0x027, 0x00000035,
|
|
||||||
0x428, 0x0000000A,
|
/******************************************************************************
|
||||||
0x429, 0x00000010,
|
* MAC_REG.TXT
|
||||||
0x430, 0x00000000,
|
******************************************************************************/
|
||||||
0x431, 0x00000001,
|
|
||||||
0x432, 0x00000002,
|
u4Byte Array_MAC_REG_8188E[] = {
|
||||||
0x433, 0x00000004,
|
0x026, 0x00000041,
|
||||||
0x434, 0x00000005,
|
0x027, 0x00000035,
|
||||||
0x435, 0x00000006,
|
0xFF0F0718, 0xABCD,
|
||||||
0x436, 0x00000007,
|
0x040, 0x0000000C,
|
||||||
0x437, 0x00000008,
|
0xCDCDCDCD, 0xCDCD,
|
||||||
0x438, 0x00000000,
|
0x040, 0x00000000,
|
||||||
0x439, 0x00000000,
|
0xFF0F0718, 0xDEAD,
|
||||||
0x43A, 0x00000001,
|
0x428, 0x0000000A,
|
||||||
0x43B, 0x00000002,
|
0x429, 0x00000010,
|
||||||
0x43C, 0x00000004,
|
0x430, 0x00000000,
|
||||||
0x43D, 0x00000005,
|
0x431, 0x00000001,
|
||||||
0x43E, 0x00000006,
|
0x432, 0x00000002,
|
||||||
0x43F, 0x00000007,
|
0x433, 0x00000004,
|
||||||
0x440, 0x0000005D,
|
0x434, 0x00000005,
|
||||||
0x441, 0x00000001,
|
0x435, 0x00000006,
|
||||||
0x442, 0x00000000,
|
0x436, 0x00000007,
|
||||||
0x444, 0x00000015,
|
0x437, 0x00000008,
|
||||||
0x445, 0x000000F0,
|
0x438, 0x00000000,
|
||||||
0x446, 0x0000000F,
|
0x439, 0x00000000,
|
||||||
0x447, 0x00000000,
|
0x43A, 0x00000001,
|
||||||
0x458, 0x00000041,
|
0x43B, 0x00000002,
|
||||||
0x459, 0x000000A8,
|
0x43C, 0x00000004,
|
||||||
0x45A, 0x00000072,
|
0x43D, 0x00000005,
|
||||||
0x45B, 0x000000B9,
|
0x43E, 0x00000006,
|
||||||
0x460, 0x00000066,
|
0x43F, 0x00000007,
|
||||||
0x461, 0x00000066,
|
0x440, 0x0000005D,
|
||||||
0x480, 0x00000008,
|
0x441, 0x00000001,
|
||||||
0x4C8, 0x000000FF,
|
0x442, 0x00000000,
|
||||||
0x4C9, 0x00000008,
|
0x444, 0x00000015,
|
||||||
0x4CC, 0x000000FF,
|
0x445, 0x000000F0,
|
||||||
0x4CD, 0x000000FF,
|
0x446, 0x0000000F,
|
||||||
0x4CE, 0x00000001,
|
0x447, 0x00000000,
|
||||||
0x4D3, 0x00000001,
|
0x458, 0x00000041,
|
||||||
0x500, 0x00000026,
|
0x459, 0x000000A8,
|
||||||
0x501, 0x000000A2,
|
0x45A, 0x00000072,
|
||||||
0x502, 0x0000002F,
|
0x45B, 0x000000B9,
|
||||||
0x503, 0x00000000,
|
0x460, 0x00000066,
|
||||||
0x504, 0x00000028,
|
0x461, 0x00000066,
|
||||||
0x505, 0x000000A3,
|
0x480, 0x00000008,
|
||||||
0x506, 0x0000005E,
|
0x4C8, 0x000000FF,
|
||||||
0x507, 0x00000000,
|
0x4C9, 0x00000008,
|
||||||
0x508, 0x0000002B,
|
0x4CC, 0x000000FF,
|
||||||
0x509, 0x000000A4,
|
0x4CD, 0x000000FF,
|
||||||
0x50A, 0x0000005E,
|
0x4CE, 0x00000001,
|
||||||
0x50B, 0x00000000,
|
0x4D3, 0x00000001,
|
||||||
0x50C, 0x0000004F,
|
0x500, 0x00000026,
|
||||||
0x50D, 0x000000A4,
|
0x501, 0x000000A2,
|
||||||
0x50E, 0x00000000,
|
0x502, 0x0000002F,
|
||||||
0x50F, 0x00000000,
|
0x503, 0x00000000,
|
||||||
0x512, 0x0000001C,
|
0x504, 0x00000028,
|
||||||
0x514, 0x0000000A,
|
0x505, 0x000000A3,
|
||||||
0x516, 0x0000000A,
|
0x506, 0x0000005E,
|
||||||
0x525, 0x0000004F,
|
0x507, 0x00000000,
|
||||||
0x550, 0x00000010,
|
0x508, 0x0000002B,
|
||||||
0x551, 0x00000010,
|
0x509, 0x000000A4,
|
||||||
0x559, 0x00000002,
|
0x50A, 0x0000005E,
|
||||||
0x55D, 0x000000FF,
|
0x50B, 0x00000000,
|
||||||
0x605, 0x00000030,
|
0x50C, 0x0000004F,
|
||||||
0x608, 0x0000000E,
|
0x50D, 0x000000A4,
|
||||||
0x609, 0x0000002A,
|
0x50E, 0x00000000,
|
||||||
0x620, 0x000000FF,
|
0x50F, 0x00000000,
|
||||||
0x621, 0x000000FF,
|
0x512, 0x0000001C,
|
||||||
0x622, 0x000000FF,
|
0x514, 0x0000000A,
|
||||||
0x623, 0x000000FF,
|
0x516, 0x0000000A,
|
||||||
0x624, 0x000000FF,
|
0x525, 0x0000004F,
|
||||||
0x625, 0x000000FF,
|
0x550, 0x00000010,
|
||||||
0x626, 0x000000FF,
|
0x551, 0x00000010,
|
||||||
0x627, 0x000000FF,
|
0x559, 0x00000002,
|
||||||
0x652, 0x00000020,
|
0x55D, 0x000000FF,
|
||||||
0x63C, 0x0000000A,
|
0x605, 0x00000030,
|
||||||
0x63D, 0x0000000A,
|
0x608, 0x0000000E,
|
||||||
0x63E, 0x0000000E,
|
0x609, 0x0000002A,
|
||||||
0x63F, 0x0000000E,
|
0x620, 0x000000FF,
|
||||||
0x640, 0x00000040,
|
0x621, 0x000000FF,
|
||||||
0x66E, 0x00000005,
|
0x622, 0x000000FF,
|
||||||
0x700, 0x00000021,
|
0x623, 0x000000FF,
|
||||||
0x701, 0x00000043,
|
0x624, 0x000000FF,
|
||||||
0x702, 0x00000065,
|
0x625, 0x000000FF,
|
||||||
0x703, 0x00000087,
|
0x626, 0x000000FF,
|
||||||
0x708, 0x00000021,
|
0x627, 0x000000FF,
|
||||||
0x709, 0x00000043,
|
0x652, 0x00000020,
|
||||||
0x70A, 0x00000065,
|
0x63C, 0x0000000A,
|
||||||
0x70B, 0x00000087,
|
0x63D, 0x0000000A,
|
||||||
};
|
0x63E, 0x0000000E,
|
||||||
|
0x63F, 0x0000000E,
|
||||||
enum HAL_STATUS ODM_ReadAndConfig_MAC_REG_8188E(struct odm_dm_struct *dm_odm)
|
0x640, 0x00000040,
|
||||||
{
|
0x66E, 0x00000005,
|
||||||
#define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = array[i]; v2 = array[i+1]; } while (0)
|
0x700, 0x00000021,
|
||||||
|
0x701, 0x00000043,
|
||||||
u32 hex = 0;
|
0x702, 0x00000065,
|
||||||
u32 i;
|
0x703, 0x00000087,
|
||||||
u8 platform = dm_odm->SupportPlatform;
|
0x708, 0x00000021,
|
||||||
u8 interface_val = dm_odm->SupportInterface;
|
0x709, 0x00000043,
|
||||||
u8 board = dm_odm->BoardType;
|
0x70A, 0x00000065,
|
||||||
u32 array_len = sizeof(array_MAC_REG_8188E)/sizeof(u32);
|
0x70B, 0x00000087,
|
||||||
u32 *array = array_MAC_REG_8188E;
|
};
|
||||||
bool biol = false;
|
|
||||||
|
HAL_STATUS
|
||||||
struct adapter *adapt = dm_odm->Adapter;
|
ODM_ReadAndConfig_MAC_REG_8188E(
|
||||||
struct xmit_frame *pxmit_frame = NULL;
|
IN PDM_ODM_T pDM_Odm
|
||||||
u8 bndy_cnt = 1;
|
)
|
||||||
enum HAL_STATUS rst = HAL_STATUS_SUCCESS;
|
{
|
||||||
hex += board;
|
#define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
|
||||||
hex += interface_val << 8;
|
|
||||||
hex += platform << 16;
|
u4Byte hex = 0;
|
||||||
hex += 0xFF000000;
|
u4Byte i = 0;
|
||||||
|
u2Byte count = 0;
|
||||||
biol = rtw_IOL_applied(adapt);
|
pu4Byte ptr_array = NULL;
|
||||||
|
u1Byte platform = pDM_Odm->SupportPlatform;
|
||||||
if (biol) {
|
u1Byte interfaceValue = pDM_Odm->SupportInterface;
|
||||||
pxmit_frame = rtw_IOL_accquire_xmit_frame(adapt);
|
u1Byte board = pDM_Odm->BoardType;
|
||||||
if (pxmit_frame == NULL) {
|
u4Byte ArrayLen = sizeof(Array_MAC_REG_8188E)/sizeof(u4Byte);
|
||||||
pr_info("rtw_IOL_accquire_xmit_frame failed\n");
|
pu4Byte Array = Array_MAC_REG_8188E;
|
||||||
return HAL_STATUS_FAILURE;
|
BOOLEAN biol = FALSE;
|
||||||
}
|
|
||||||
}
|
#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
for (i = 0; i < array_len; i += 2) {
|
struct xmit_frame *pxmit_frame;
|
||||||
u32 v1 = array[i];
|
u8 bndy_cnt = 1;
|
||||||
u32 v2 = array[i+1];
|
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
||||||
|
struct cmd_cmp cmpdata[ArrayLen];
|
||||||
/* This (offset, data) pair meets the condition. */
|
u4Byte cmpdata_idx=0;
|
||||||
if (v1 < 0xCDCDCDCD) {
|
#endif
|
||||||
if (biol) {
|
#endif //CONFIG_IOL_IOREG_CFG
|
||||||
if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
|
HAL_STATUS rst =HAL_STATUS_SUCCESS;
|
||||||
bndy_cnt++;
|
hex += board;
|
||||||
rtw_IOL_append_WB_cmd(pxmit_frame, (u16)v1, (u8)v2, 0xFF);
|
hex += interfaceValue << 8;
|
||||||
} else {
|
hex += platform << 16;
|
||||||
odm_ConfigMAC_8188E(dm_odm, v1, (u8)v2);
|
hex += 0xFF000000;
|
||||||
}
|
|
||||||
continue;
|
#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
} else { /* This line is the start line of branch. */
|
biol = rtw_IOL_applied(Adapter);
|
||||||
if (!Checkcondition(array[i], hex)) {
|
|
||||||
/* Discard the following (offset, data) pairs. */
|
if(biol){
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
if((pxmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL)
|
||||||
while (v2 != 0xDEAD &&
|
{
|
||||||
v2 != 0xCDEF &&
|
printk("rtw_IOL_accquire_xmit_frame failed\n");
|
||||||
v2 != 0xCDCD && i < array_len - 2) {
|
return HAL_STATUS_FAILURE;
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
}
|
||||||
}
|
}
|
||||||
i -= 2; /* prevent from for-loop += 2 */
|
|
||||||
} else { /* Configure matched pairs and skip to end of if-else. */
|
#endif //CONFIG_IOL_IOREG_CFG
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
while (v2 != 0xDEAD &&
|
for (i = 0; i < ArrayLen; i += 2 )
|
||||||
v2 != 0xCDEF &&
|
{
|
||||||
v2 != 0xCDCD && i < array_len - 2) {
|
u4Byte v1 = Array[i];
|
||||||
if (biol) {
|
u4Byte v2 = Array[i+1];
|
||||||
if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
|
|
||||||
bndy_cnt++;
|
// This (offset, data) pair meets the condition.
|
||||||
rtw_IOL_append_WB_cmd(pxmit_frame, (u16)v1, (u8)v2, 0xFF);
|
if ( v1 < 0xCDCDCDCD )
|
||||||
} else {
|
{
|
||||||
odm_ConfigMAC_8188E(dm_odm, v1, (u8)v2);
|
#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
}
|
|
||||||
|
if(biol){
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
}
|
if(rtw_IOL_cmd_boundary_handle(pxmit_frame))
|
||||||
while (v2 != 0xDEAD && i < array_len - 2)
|
bndy_cnt++;
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
rtw_IOL_append_WB_cmd(pxmit_frame,(u2Byte)v1, (u1Byte)v2,0xFF);
|
||||||
}
|
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
||||||
}
|
cmpdata[cmpdata_idx].addr = v1;
|
||||||
}
|
cmpdata[cmpdata_idx].value= v2;
|
||||||
if (biol) {
|
cmpdata_idx++;
|
||||||
if (!rtw_IOL_exec_cmds_sync(dm_odm->Adapter, pxmit_frame, 1000, bndy_cnt)) {
|
#endif
|
||||||
pr_info("~~~ MAC IOL_exec_cmds Failed !!!\n");
|
}
|
||||||
rst = HAL_STATUS_FAILURE;
|
else
|
||||||
}
|
#endif //endif CONFIG_IOL_IOREG_CFG
|
||||||
}
|
{
|
||||||
return rst;
|
odm_ConfigMAC_8188E(pDM_Odm, v1, (u1Byte)v2);
|
||||||
}
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // This line is the start line of branch.
|
||||||
|
if ( !CheckCondition(Array[i], hex) )
|
||||||
|
{ // Discard the following (offset, data) pairs.
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
while ( v2 != 0xDEAD &&
|
||||||
|
v2 != 0xCDEF &&
|
||||||
|
v2 != 0xCDCD && i < ArrayLen -2)
|
||||||
|
{
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
}
|
||||||
|
i -= 2; // prevent from for-loop += 2
|
||||||
|
}
|
||||||
|
else // Configure matched pairs and skip to end of if-else.
|
||||||
|
{
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
while ( v2 != 0xDEAD &&
|
||||||
|
v2 != 0xCDEF &&
|
||||||
|
v2 != 0xCDCD && i < ArrayLen -2)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
|
if(biol){
|
||||||
|
if(rtw_IOL_cmd_boundary_handle(pxmit_frame))
|
||||||
|
bndy_cnt++;
|
||||||
|
rtw_IOL_append_WB_cmd(pxmit_frame,(u2Byte)v1, (u1Byte)v2,0xFF);
|
||||||
|
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
||||||
|
cmpdata[cmpdata_idx].addr = v1;
|
||||||
|
cmpdata[cmpdata_idx].value= v2;
|
||||||
|
cmpdata_idx++;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif //#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
|
{
|
||||||
|
odm_ConfigMAC_8188E(pDM_Odm, v1, (u1Byte)v2);
|
||||||
|
}
|
||||||
|
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (v2 != 0xDEAD && i < ArrayLen -2)
|
||||||
|
{
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
|
if(biol){
|
||||||
|
//printk("==> %s, pktlen = %d,bndy_cnt = %d\n",__FUNCTION__,pxmit_frame->attrib.pktlen+4+32,bndy_cnt);
|
||||||
|
|
||||||
|
if(rtw_IOL_exec_cmds_sync(pDM_Odm->Adapter, pxmit_frame, 1000, bndy_cnt))
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
||||||
|
printk("~~~ IOL Config MAC Success !!! \n");
|
||||||
|
//compare writed data
|
||||||
|
{
|
||||||
|
u4Byte idx;
|
||||||
|
u1Byte cdata;
|
||||||
|
// HAL_STATUS_FAILURE;
|
||||||
|
printk(" MAC data compare => array_len:%d \n",cmpdata_idx);
|
||||||
|
for(idx=0;idx< cmpdata_idx;idx++)
|
||||||
|
{
|
||||||
|
cdata = ODM_Read1Byte(pDM_Odm, cmpdata[idx].addr);
|
||||||
|
if(cdata != cmpdata[idx].value){
|
||||||
|
printk("### MAC data compared failed !! addr:0x%04x, data:(0x%02x : 0x%02x) ###\n",
|
||||||
|
cmpdata[idx].addr,cmpdata[idx].value,cdata);
|
||||||
|
//rst = HAL_STATUS_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//dump data from TX packet buffer
|
||||||
|
//if(rst == HAL_STATUS_FAILURE)
|
||||||
|
{
|
||||||
|
rtw_IOL_cmd_tx_pkt_buf_dump(pDM_Odm->Adapter,pxmit_frame->attrib.pktlen+32);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif //CONFIG_IOL_IOREG_CFG_DBG
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
printk("~~~ MAC IOL_exec_cmds Failed !!! \n");
|
||||||
|
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
||||||
|
{
|
||||||
|
//dump data from TX packet buffer
|
||||||
|
rtw_IOL_cmd_tx_pkt_buf_dump(pDM_Odm->Adapter,pxmit_frame->attrib.pktlen+32);
|
||||||
|
}
|
||||||
|
#endif //CONFIG_IOL_IOREG_CFG_DBG
|
||||||
|
rst = HAL_STATUS_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif //#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
|
return rst;
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* MAC_REG_ICUT.TXT
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
u4Byte Array_MP_8188E_MAC_REG_ICUT[] = {
|
||||||
|
0x026, 0x00000041,
|
||||||
|
0x027, 0x00000035,
|
||||||
|
0x428, 0x0000000A,
|
||||||
|
0x429, 0x00000010,
|
||||||
|
0x430, 0x00000000,
|
||||||
|
0x431, 0x00000001,
|
||||||
|
0x432, 0x00000002,
|
||||||
|
0x433, 0x00000004,
|
||||||
|
0x434, 0x00000005,
|
||||||
|
0x435, 0x00000006,
|
||||||
|
0x436, 0x00000007,
|
||||||
|
0x437, 0x00000008,
|
||||||
|
0x438, 0x00000000,
|
||||||
|
0x439, 0x00000000,
|
||||||
|
0x43A, 0x00000001,
|
||||||
|
0x43B, 0x00000002,
|
||||||
|
0x43C, 0x00000004,
|
||||||
|
0x43D, 0x00000005,
|
||||||
|
0x43E, 0x00000006,
|
||||||
|
0x43F, 0x00000007,
|
||||||
|
0x440, 0x0000005D,
|
||||||
|
0x441, 0x00000001,
|
||||||
|
0x442, 0x00000000,
|
||||||
|
0x444, 0x00000015,
|
||||||
|
0x445, 0x000000F0,
|
||||||
|
0x446, 0x0000000F,
|
||||||
|
0x447, 0x00000000,
|
||||||
|
0x458, 0x00000041,
|
||||||
|
0x459, 0x000000A8,
|
||||||
|
0x45A, 0x00000072,
|
||||||
|
0x45B, 0x000000B9,
|
||||||
|
0x460, 0x00000066,
|
||||||
|
0x461, 0x00000066,
|
||||||
|
0x480, 0x00000008,
|
||||||
|
0x4C8, 0x000000FF,
|
||||||
|
0x4C9, 0x00000008,
|
||||||
|
0x4CC, 0x000000FF,
|
||||||
|
0x4CD, 0x000000FF,
|
||||||
|
0x4CE, 0x00000001,
|
||||||
|
0x4D3, 0x00000001,
|
||||||
|
0x500, 0x00000026,
|
||||||
|
0x501, 0x000000A2,
|
||||||
|
0x502, 0x0000002F,
|
||||||
|
0x503, 0x00000000,
|
||||||
|
0x504, 0x00000028,
|
||||||
|
0x505, 0x000000A3,
|
||||||
|
0x506, 0x0000005E,
|
||||||
|
0x507, 0x00000000,
|
||||||
|
0x508, 0x0000002B,
|
||||||
|
0x509, 0x000000A4,
|
||||||
|
0x50A, 0x0000005E,
|
||||||
|
0x50B, 0x00000000,
|
||||||
|
0x50C, 0x0000004F,
|
||||||
|
0x50D, 0x000000A4,
|
||||||
|
0x50E, 0x00000000,
|
||||||
|
0x50F, 0x00000000,
|
||||||
|
0x512, 0x0000001C,
|
||||||
|
0x514, 0x0000000A,
|
||||||
|
0x516, 0x0000000A,
|
||||||
|
0x525, 0x0000004F,
|
||||||
|
0x550, 0x00000010,
|
||||||
|
0x551, 0x00000010,
|
||||||
|
0x559, 0x00000002,
|
||||||
|
0x55D, 0x000000FF,
|
||||||
|
0x605, 0x00000030,
|
||||||
|
0x608, 0x0000000E,
|
||||||
|
0x609, 0x0000002A,
|
||||||
|
0x620, 0x000000FF,
|
||||||
|
0x621, 0x000000FF,
|
||||||
|
0x622, 0x000000FF,
|
||||||
|
0x623, 0x000000FF,
|
||||||
|
0x624, 0x000000FF,
|
||||||
|
0x625, 0x000000FF,
|
||||||
|
0x626, 0x000000FF,
|
||||||
|
0x627, 0x000000FF,
|
||||||
|
0x652, 0x00000020,
|
||||||
|
0x63C, 0x0000000A,
|
||||||
|
0x63D, 0x0000000A,
|
||||||
|
0x63E, 0x0000000E,
|
||||||
|
0x63F, 0x0000000E,
|
||||||
|
0x640, 0x00000040,
|
||||||
|
0x66E, 0x00000005,
|
||||||
|
0x700, 0x00000021,
|
||||||
|
0x701, 0x00000043,
|
||||||
|
0x702, 0x00000065,
|
||||||
|
0x703, 0x00000087,
|
||||||
|
0x708, 0x00000021,
|
||||||
|
0x709, 0x00000043,
|
||||||
|
0x70A, 0x00000065,
|
||||||
|
0x70B, 0x00000087,
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
ODM_ReadAndConfig_MAC_REG_ICUT_8188E(
|
||||||
|
IN PDM_ODM_T pDM_Odm
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
|
||||||
|
|
||||||
|
u4Byte hex = 0;
|
||||||
|
u4Byte i = 0;
|
||||||
|
u2Byte count = 0;
|
||||||
|
pu4Byte ptr_array = NULL;
|
||||||
|
u1Byte platform = pDM_Odm->SupportPlatform;
|
||||||
|
u1Byte _interface = pDM_Odm->SupportInterface;
|
||||||
|
u1Byte board = pDM_Odm->BoardType;
|
||||||
|
u4Byte ArrayLen = sizeof(Array_MP_8188E_MAC_REG_ICUT)/sizeof(u4Byte);
|
||||||
|
pu4Byte Array = Array_MP_8188E_MAC_REG_ICUT;
|
||||||
|
|
||||||
|
|
||||||
|
hex += board;
|
||||||
|
hex += _interface << 8;
|
||||||
|
hex += platform << 16;
|
||||||
|
hex += 0xFF000000;
|
||||||
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ReadAndConfig_MP_8188E_MAC_REG_ICUT, hex = 0x%X\n", hex));
|
||||||
|
|
||||||
|
for (i = 0; i < ArrayLen; i += 2 )
|
||||||
|
{
|
||||||
|
u4Byte v1 = Array[i];
|
||||||
|
u4Byte v2 = Array[i+1];
|
||||||
|
|
||||||
|
// This (offset, data) pair meets the condition.
|
||||||
|
if ( v1 < 0xCDCDCDCD )
|
||||||
|
{
|
||||||
|
odm_ConfigMAC_8188E(pDM_Odm, v1, (u1Byte)v2);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // This line is the start line of branch.
|
||||||
|
if ( !CheckCondition(Array[i], hex) )
|
||||||
|
{ // Discard the following (offset, data) pairs.
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
while (v2 != 0xDEAD &&
|
||||||
|
v2 != 0xCDEF &&
|
||||||
|
v2 != 0xCDCD && i < ArrayLen -2)
|
||||||
|
{
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
}
|
||||||
|
i -= 2; // prevent from for-loop += 2
|
||||||
|
}
|
||||||
|
else // Configure matched pairs and skip to end of if-else.
|
||||||
|
{
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
while (v2 != 0xDEAD &&
|
||||||
|
v2 != 0xCDEF &&
|
||||||
|
v2 != 0xCDCD && i < ArrayLen -2)
|
||||||
|
{
|
||||||
|
odm_ConfigMAC_8188E(pDM_Odm, v1, (u1Byte)v2);
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (v2 != 0xDEAD && i < ArrayLen -2)
|
||||||
|
{
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // end of HWIMG_SUPPORT
|
||||||
|
|
||||||
|
|
837
hal/HalHWImg8188E_RF.c
Normal file → Executable file
837
hal/HalHWImg8188E_RF.c
Normal file → Executable file
|
@ -1,268 +1,569 @@
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* 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
|
* under the terms of version 2 of the GNU General Public License as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
* more details.
|
* more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License along with
|
* 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.,
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "odm_precomp.h"
|
#include "odm_precomp.h"
|
||||||
|
|
||||||
#include <rtw_iol.h>
|
#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
|
#include <rtw_iol.h>
|
||||||
static bool CheckCondition(const u32 Condition, const u32 Hex)
|
#endif
|
||||||
{
|
|
||||||
u32 _board = (Hex & 0x000000FF);
|
#if (RTL8188E_SUPPORT == 1)
|
||||||
u32 _interface = (Hex & 0x0000FF00) >> 8;
|
static BOOLEAN
|
||||||
u32 _platform = (Hex & 0x00FF0000) >> 16;
|
CheckCondition(
|
||||||
u32 cond = Condition;
|
const u4Byte Condition,
|
||||||
|
const u4Byte Hex
|
||||||
if (Condition == 0xCDCDCDCD)
|
)
|
||||||
return true;
|
{
|
||||||
|
u4Byte _board = (Hex & 0x000000FF);
|
||||||
cond = Condition & 0x000000FF;
|
u4Byte _interface = (Hex & 0x0000FF00) >> 8;
|
||||||
if ((_board == cond) && cond != 0x00)
|
u4Byte _platform = (Hex & 0x00FF0000) >> 16;
|
||||||
return false;
|
u4Byte cond = Condition;
|
||||||
|
|
||||||
cond = Condition & 0x0000FF00;
|
if ( Condition == 0xCDCDCDCD )
|
||||||
cond = cond >> 8;
|
return TRUE;
|
||||||
if ((_interface & cond) == 0 && cond != 0x07)
|
|
||||||
return false;
|
cond = Condition & 0x000000FF;
|
||||||
|
if ( (_board != cond) && (cond != 0xFF) )
|
||||||
cond = Condition & 0x00FF0000;
|
return FALSE;
|
||||||
cond = cond >> 16;
|
|
||||||
if ((_platform & cond) == 0 && cond != 0x0F)
|
cond = Condition & 0x0000FF00;
|
||||||
return false;
|
cond = cond >> 8;
|
||||||
return true;
|
if ( ((_interface & cond) == 0) && (cond != 0x07) )
|
||||||
}
|
return FALSE;
|
||||||
|
|
||||||
/******************************************************************************
|
cond = Condition & 0x00FF0000;
|
||||||
* RadioA_1T.TXT
|
cond = cond >> 16;
|
||||||
******************************************************************************/
|
if ( ((_platform & cond) == 0) && (cond != 0x0F) )
|
||||||
|
return FALSE;
|
||||||
static u32 Array_RadioA_1T_8188E[] = {
|
return TRUE;
|
||||||
0x000, 0x00030000,
|
}
|
||||||
0x008, 0x00084000,
|
|
||||||
0x018, 0x00000407,
|
|
||||||
0x019, 0x00000012,
|
/******************************************************************************
|
||||||
0x01E, 0x00080009,
|
* RadioA_1T.TXT
|
||||||
0x01F, 0x00000880,
|
******************************************************************************/
|
||||||
0x02F, 0x0001A060,
|
|
||||||
0x03F, 0x00000000,
|
u4Byte Array_RadioA_1T_8188E[] = {
|
||||||
0x042, 0x000060C0,
|
0x000, 0x00030000,
|
||||||
0x057, 0x000D0000,
|
0x008, 0x00084000,
|
||||||
0x058, 0x000BE180,
|
0x018, 0x00000407,
|
||||||
0x067, 0x00001552,
|
0x019, 0x00000012,
|
||||||
0x083, 0x00000000,
|
0x01E, 0x00080009,
|
||||||
0x0B0, 0x000FF8FC,
|
0x01F, 0x00000880,
|
||||||
0x0B1, 0x00054400,
|
0x02F, 0x0001A060,
|
||||||
0x0B2, 0x000CCC19,
|
0x03F, 0x00000000,
|
||||||
0x0B4, 0x00043003,
|
0x042, 0x000060C0,
|
||||||
0x0B6, 0x0004953E,
|
0x057, 0x000D0000,
|
||||||
0x0B7, 0x0001C718,
|
0x058, 0x000BE180,
|
||||||
0x0B8, 0x000060FF,
|
0x067, 0x00001552,
|
||||||
0x0B9, 0x00080001,
|
0x083, 0x00000000,
|
||||||
0x0BA, 0x00040000,
|
0x0B0, 0x000FF8FC,
|
||||||
0x0BB, 0x00000400,
|
0x0B1, 0x00054400,
|
||||||
0x0BF, 0x000C0000,
|
0x0B2, 0x000CCC19,
|
||||||
0x0C2, 0x00002400,
|
0x0B4, 0x00043003,
|
||||||
0x0C3, 0x00000009,
|
0x0B6, 0x0004953E,
|
||||||
0x0C4, 0x00040C91,
|
0x0B7, 0x0001C718,
|
||||||
0x0C5, 0x00099999,
|
0x0B8, 0x000060FF,
|
||||||
0x0C6, 0x000000A3,
|
0x0B9, 0x00080001,
|
||||||
0x0C7, 0x00088820,
|
0x0BA, 0x00040000,
|
||||||
0x0C8, 0x00076C06,
|
0x0BB, 0x00000400,
|
||||||
0x0C9, 0x00000000,
|
0x0BF, 0x000C0000,
|
||||||
0x0CA, 0x00080000,
|
0x0C2, 0x00002400,
|
||||||
0x0DF, 0x00000180,
|
0x0C3, 0x00000009,
|
||||||
0x0EF, 0x000001A0,
|
0x0C4, 0x00040C91,
|
||||||
0x051, 0x0006B27D,
|
0x0C5, 0x00099999,
|
||||||
0xFF0F041F, 0xABCD,
|
0x0C6, 0x000000A3,
|
||||||
0x052, 0x0007E4DD,
|
0x0C7, 0x00088820,
|
||||||
0xCDCDCDCD, 0xCDCD,
|
0x0C8, 0x00076C06,
|
||||||
0x052, 0x0007E49D,
|
0x0C9, 0x00000000,
|
||||||
0xFF0F041F, 0xDEAD,
|
0x0CA, 0x00080000,
|
||||||
0x053, 0x00000073,
|
0x0DF, 0x00000180,
|
||||||
0x056, 0x00051FF3,
|
0x0EF, 0x000001A0,
|
||||||
0x035, 0x00000086,
|
0x051, 0x0006B27D,
|
||||||
0x035, 0x00000186,
|
0xFF0F0400, 0xABCD,
|
||||||
0x035, 0x00000286,
|
0x052, 0x0007E4DD,
|
||||||
0x036, 0x00001C25,
|
0xCDCDCDCD, 0xCDCD,
|
||||||
0x036, 0x00009C25,
|
0x052, 0x0007E49D,
|
||||||
0x036, 0x00011C25,
|
0xFF0F0400, 0xDEAD,
|
||||||
0x036, 0x00019C25,
|
0x053, 0x00000073,
|
||||||
0x0B6, 0x00048538,
|
0x056, 0x00051FF3,
|
||||||
0x018, 0x00000C07,
|
0x035, 0x00000086,
|
||||||
0x05A, 0x0004BD00,
|
0x035, 0x00000186,
|
||||||
0x019, 0x000739D0,
|
0x035, 0x00000286,
|
||||||
0x034, 0x0000ADF3,
|
0x036, 0x00001C25,
|
||||||
0x034, 0x00009DF0,
|
0x036, 0x00009C25,
|
||||||
0x034, 0x00008DED,
|
0x036, 0x00011C25,
|
||||||
0x034, 0x00007DEA,
|
0x036, 0x00019C25,
|
||||||
0x034, 0x00006DE7,
|
0x0B6, 0x00048538,
|
||||||
0x034, 0x000054EE,
|
0x018, 0x00000C07,
|
||||||
0x034, 0x000044EB,
|
0x05A, 0x0004BD00,
|
||||||
0x034, 0x000034E8,
|
0x019, 0x000739D0,
|
||||||
0x034, 0x0000246B,
|
0xFF0F0718, 0xABCD,
|
||||||
0x034, 0x00001468,
|
0x034, 0x0000A093,
|
||||||
0x034, 0x0000006D,
|
0x034, 0x0000908F,
|
||||||
0x000, 0x00030159,
|
0x034, 0x0000808C,
|
||||||
0x084, 0x00068200,
|
0x034, 0x0000704F,
|
||||||
0x086, 0x000000CE,
|
0x034, 0x0000604C,
|
||||||
0x087, 0x00048A00,
|
0x034, 0x00005049,
|
||||||
0x08E, 0x00065540,
|
0x034, 0x0000400C,
|
||||||
0x08F, 0x00088000,
|
0x034, 0x00003009,
|
||||||
0x0EF, 0x000020A0,
|
0x034, 0x00002006,
|
||||||
0x03B, 0x000F02B0,
|
0x034, 0x00001003,
|
||||||
0x03B, 0x000EF7B0,
|
0x034, 0x00000000,
|
||||||
0x03B, 0x000D4FB0,
|
0xCDCDCDCD, 0xCDCD,
|
||||||
0x03B, 0x000CF060,
|
0x034, 0x0000ADF3,
|
||||||
0x03B, 0x000B0090,
|
0x034, 0x00009DF0,
|
||||||
0x03B, 0x000A0080,
|
0x034, 0x00008DED,
|
||||||
0x03B, 0x00090080,
|
0x034, 0x00007DEA,
|
||||||
0x03B, 0x0008F780,
|
0x034, 0x00006DE7,
|
||||||
0x03B, 0x000722B0,
|
0x034, 0x000054EE,
|
||||||
0x03B, 0x0006F7B0,
|
0x034, 0x000044EB,
|
||||||
0x03B, 0x00054FB0,
|
0x034, 0x000034E8,
|
||||||
0x03B, 0x0004F060,
|
0x034, 0x0000246B,
|
||||||
0x03B, 0x00030090,
|
0x034, 0x00001468,
|
||||||
0x03B, 0x00020080,
|
0x034, 0x0000006D,
|
||||||
0x03B, 0x00010080,
|
0xFF0F0718, 0xDEAD,
|
||||||
0x03B, 0x0000F780,
|
0x000, 0x00030159,
|
||||||
0x0EF, 0x000000A0,
|
0x084, 0x00068200,
|
||||||
0x000, 0x00010159,
|
0x086, 0x000000CE,
|
||||||
0x018, 0x0000F407,
|
0x087, 0x00048A00,
|
||||||
0xFFE, 0x00000000,
|
0x08E, 0x00065540,
|
||||||
0xFFE, 0x00000000,
|
0x08F, 0x00088000,
|
||||||
0x01F, 0x00080003,
|
0x0EF, 0x000020A0,
|
||||||
0xFFE, 0x00000000,
|
0x03B, 0x000F02B0,
|
||||||
0xFFE, 0x00000000,
|
0x03B, 0x000EF7B0,
|
||||||
0x01E, 0x00000001,
|
0x03B, 0x000D4FB0,
|
||||||
0x01F, 0x00080000,
|
0x03B, 0x000CF060,
|
||||||
0x000, 0x00033E60,
|
0x03B, 0x000B0090,
|
||||||
};
|
0x03B, 0x000A0080,
|
||||||
|
0x03B, 0x00090080,
|
||||||
enum HAL_STATUS ODM_ReadAndConfig_RadioA_1T_8188E(struct odm_dm_struct *pDM_Odm)
|
0x03B, 0x0008F780,
|
||||||
{
|
0x03B, 0x000722B0,
|
||||||
#define READ_NEXT_PAIR(v1, v2, i) do \
|
0x03B, 0x0006F7B0,
|
||||||
{ i += 2; v1 = Array[i]; \
|
0x03B, 0x00054FB0,
|
||||||
v2 = Array[i+1]; } while (0)
|
0x03B, 0x0004F060,
|
||||||
|
0x03B, 0x00030090,
|
||||||
u32 hex = 0;
|
0x03B, 0x00020080,
|
||||||
u32 i = 0;
|
0x03B, 0x00010080,
|
||||||
u8 platform = pDM_Odm->SupportPlatform;
|
0x03B, 0x0000F780,
|
||||||
u8 interfaceValue = pDM_Odm->SupportInterface;
|
0x0EF, 0x000000A0,
|
||||||
u8 board = pDM_Odm->BoardType;
|
0x000, 0x00010159,
|
||||||
u32 ArrayLen = sizeof(Array_RadioA_1T_8188E)/sizeof(u32);
|
0x018, 0x0000F407,
|
||||||
u32 *Array = Array_RadioA_1T_8188E;
|
0xFFE, 0x00000000,
|
||||||
bool biol = false;
|
0xFFE, 0x00000000,
|
||||||
struct adapter *Adapter = pDM_Odm->Adapter;
|
0x01F, 0x00080003,
|
||||||
struct xmit_frame *pxmit_frame = NULL;
|
0xFFE, 0x00000000,
|
||||||
u8 bndy_cnt = 1;
|
0xFFE, 0x00000000,
|
||||||
enum HAL_STATUS rst = HAL_STATUS_SUCCESS;
|
0x01E, 0x00000001,
|
||||||
|
0x01F, 0x00080000,
|
||||||
hex += board;
|
0x000, 0x00033E60,
|
||||||
hex += interfaceValue << 8;
|
|
||||||
hex += platform << 16;
|
};
|
||||||
hex += 0xFF000000;
|
|
||||||
biol = rtw_IOL_applied(Adapter);
|
HAL_STATUS
|
||||||
|
ODM_ReadAndConfig_RadioA_1T_8188E(
|
||||||
if (biol) {
|
IN PDM_ODM_T pDM_Odm
|
||||||
pxmit_frame = rtw_IOL_accquire_xmit_frame(Adapter);
|
)
|
||||||
if (pxmit_frame == NULL) {
|
{
|
||||||
pr_info("rtw_IOL_accquire_xmit_frame failed\n");
|
#define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
|
||||||
return HAL_STATUS_FAILURE;
|
|
||||||
}
|
u4Byte hex = 0;
|
||||||
}
|
u4Byte i = 0;
|
||||||
|
u2Byte count = 0;
|
||||||
for (i = 0; i < ArrayLen; i += 2) {
|
pu4Byte ptr_array = NULL;
|
||||||
u32 v1 = Array[i];
|
u1Byte platform = pDM_Odm->SupportPlatform;
|
||||||
u32 v2 = Array[i+1];
|
u1Byte interfaceValue = pDM_Odm->SupportInterface;
|
||||||
|
u1Byte board = pDM_Odm->BoardType;
|
||||||
/* This (offset, data) pair meets the condition. */
|
u4Byte ArrayLen = sizeof(Array_RadioA_1T_8188E)/sizeof(u4Byte);
|
||||||
if (v1 < 0xCDCDCDCD) {
|
pu4Byte Array = Array_RadioA_1T_8188E;
|
||||||
if (biol) {
|
BOOLEAN biol = FALSE;
|
||||||
if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
|
#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
bndy_cnt++;
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
struct xmit_frame *pxmit_frame;
|
||||||
if (v1 == 0xffe)
|
u8 bndy_cnt = 1;
|
||||||
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 50);
|
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
||||||
else if (v1 == 0xfd)
|
struct cmd_cmp cmpdata[ArrayLen];
|
||||||
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 5);
|
u4Byte cmpdata_idx=0;
|
||||||
else if (v1 == 0xfc)
|
#endif
|
||||||
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 1);
|
#endif//#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
else if (v1 == 0xfb)
|
HAL_STATUS rst =HAL_STATUS_SUCCESS;
|
||||||
rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 50);
|
|
||||||
else if (v1 == 0xfa)
|
hex += board;
|
||||||
rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 5);
|
hex += interfaceValue << 8;
|
||||||
else if (v1 == 0xf9)
|
hex += platform << 16;
|
||||||
rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 1);
|
hex += 0xFF000000;
|
||||||
else
|
#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
rtw_IOL_append_WRF_cmd(pxmit_frame, ODM_RF_PATH_A, (u16)v1, v2, bRFRegOffsetMask);
|
biol = rtw_IOL_applied(Adapter);
|
||||||
} else {
|
|
||||||
odm_ConfigRF_RadioA_8188E(pDM_Odm, v1, v2);
|
if(biol){
|
||||||
}
|
if((pxmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL)
|
||||||
continue;
|
{
|
||||||
} else { /* This line is the start line of branch. */
|
printk("rtw_IOL_accquire_xmit_frame failed\n");
|
||||||
if (!CheckCondition(Array[i], hex)) {
|
return HAL_STATUS_FAILURE;
|
||||||
/* Discard the following (offset, data) pairs. */
|
}
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
}
|
||||||
while (v2 != 0xDEAD &&
|
#endif//#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
v2 != 0xCDEF &&
|
|
||||||
v2 != 0xCDCD && i < ArrayLen - 2)
|
for (i = 0; i < ArrayLen; i += 2 )
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
{
|
||||||
i -= 2; /* prevent from for-loop += 2 */
|
u4Byte v1 = Array[i];
|
||||||
} else { /* Configure matched pairs and skip to end of if-else. */
|
u4Byte v2 = Array[i+1];
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
while (v2 != 0xDEAD &&
|
// This (offset, data) pair meets the condition.
|
||||||
v2 != 0xCDEF &&
|
if ( v1 < 0xCDCDCDCD )
|
||||||
v2 != 0xCDCD && i < ArrayLen - 2) {
|
{
|
||||||
if (biol) {
|
#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
|
if(biol){
|
||||||
bndy_cnt++;
|
if(rtw_IOL_cmd_boundary_handle(pxmit_frame))
|
||||||
|
bndy_cnt++;
|
||||||
if (v1 == 0xffe)
|
|
||||||
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 50);
|
if(v1 == 0xffe)
|
||||||
else if (v1 == 0xfd)
|
{
|
||||||
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 5);
|
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame,50);
|
||||||
else if (v1 == 0xfc)
|
}
|
||||||
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 1);
|
else if (v1 == 0xfd){
|
||||||
else if (v1 == 0xfb)
|
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame,5);
|
||||||
rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 50);
|
}
|
||||||
else if (v1 == 0xfa)
|
else if (v1 == 0xfc){
|
||||||
rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 5);
|
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame,1);
|
||||||
else if (v1 == 0xf9)
|
}
|
||||||
rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 1);
|
else if (v1 == 0xfb){
|
||||||
else
|
rtw_IOL_append_DELAY_US_cmd(pxmit_frame,50);
|
||||||
rtw_IOL_append_WRF_cmd(pxmit_frame, ODM_RF_PATH_A, (u16)v1, v2, bRFRegOffsetMask);
|
}
|
||||||
} else {
|
else if (v1 == 0xfa){
|
||||||
odm_ConfigRF_RadioA_8188E(pDM_Odm, v1, v2);
|
rtw_IOL_append_DELAY_US_cmd(pxmit_frame,5);
|
||||||
}
|
}
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
else if (v1 == 0xf9){
|
||||||
}
|
rtw_IOL_append_DELAY_US_cmd(pxmit_frame,1);
|
||||||
|
}
|
||||||
while (v2 != 0xDEAD && i < ArrayLen - 2)
|
else{
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
rtw_IOL_append_WRF_cmd(pxmit_frame, ODM_RF_PATH_A,(u2Byte)v1, v2,bRFRegOffsetMask) ;
|
||||||
}
|
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
||||||
}
|
cmpdata[cmpdata_idx].addr = v1;
|
||||||
}
|
cmpdata[cmpdata_idx].value= v2;
|
||||||
if (biol) {
|
cmpdata_idx++;
|
||||||
if (!rtw_IOL_exec_cmds_sync(pDM_Odm->Adapter, pxmit_frame, 1000, bndy_cnt)) {
|
#endif
|
||||||
rst = HAL_STATUS_FAILURE;
|
}
|
||||||
pr_info("~~~ IOL Config %s Failed !!!\n", __func__);
|
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
return rst;
|
#endif //#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
}
|
{
|
||||||
|
odm_ConfigRF_RadioA_8188E(pDM_Odm, v1, v2);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // This line is the start line of branch.
|
||||||
|
if ( !CheckCondition(Array[i], hex) )
|
||||||
|
{ // Discard the following (offset, data) pairs.
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
while (v2 != 0xDEAD &&
|
||||||
|
v2 != 0xCDEF &&
|
||||||
|
v2 != 0xCDCD && i < ArrayLen -2)
|
||||||
|
{
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
}
|
||||||
|
i -= 2; // prevent from for-loop += 2
|
||||||
|
}
|
||||||
|
else // Configure matched pairs and skip to end of if-else.
|
||||||
|
{
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
while (v2 != 0xDEAD &&
|
||||||
|
v2 != 0xCDEF &&
|
||||||
|
v2 != 0xCDCD && i < ArrayLen -2)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
|
if(biol){
|
||||||
|
if(rtw_IOL_cmd_boundary_handle(pxmit_frame))
|
||||||
|
bndy_cnt++;
|
||||||
|
|
||||||
|
if(v1 == 0xffe)
|
||||||
|
{
|
||||||
|
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame,50);
|
||||||
|
}
|
||||||
|
else if (v1 == 0xfd){
|
||||||
|
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame,5);
|
||||||
|
}
|
||||||
|
else if (v1 == 0xfc){
|
||||||
|
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame,1);
|
||||||
|
}
|
||||||
|
else if (v1 == 0xfb){
|
||||||
|
rtw_IOL_append_DELAY_US_cmd(pxmit_frame,50);
|
||||||
|
}
|
||||||
|
else if (v1 == 0xfa){
|
||||||
|
rtw_IOL_append_DELAY_US_cmd(pxmit_frame,5);
|
||||||
|
}
|
||||||
|
else if (v1 == 0xf9){
|
||||||
|
rtw_IOL_append_DELAY_US_cmd(pxmit_frame,1);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
rtw_IOL_append_WRF_cmd(pxmit_frame, ODM_RF_PATH_A,(u2Byte)v1, v2,bRFRegOffsetMask) ;
|
||||||
|
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
||||||
|
cmpdata[cmpdata_idx].addr = v1;
|
||||||
|
cmpdata[cmpdata_idx].value= v2;
|
||||||
|
cmpdata_idx++;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif //#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
|
{
|
||||||
|
odm_ConfigRF_RadioA_8188E(pDM_Odm, v1, v2);
|
||||||
|
}
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (v2 != 0xDEAD && i < ArrayLen -2)
|
||||||
|
{
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
|
if(biol){
|
||||||
|
//printk("==> %s, pktlen = %d,bndy_cnt = %d\n",__FUNCTION__,pxmit_frame->attrib.pktlen+4+32,bndy_cnt);
|
||||||
|
if(rtw_IOL_exec_cmds_sync(pDM_Odm->Adapter, pxmit_frame, 1000, bndy_cnt))
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
||||||
|
printk("~~~ %s Success !!! \n",__FUNCTION__);
|
||||||
|
{
|
||||||
|
u4Byte idx;
|
||||||
|
u4Byte cdata;
|
||||||
|
printk(" %s data compare => array_len:%d \n",__FUNCTION__,cmpdata_idx);
|
||||||
|
printk("### %s data compared !!###\n",__FUNCTION__);
|
||||||
|
for(idx=0;idx< cmpdata_idx;idx++)
|
||||||
|
{
|
||||||
|
cdata = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A,cmpdata[idx].addr,bRFRegOffsetMask);
|
||||||
|
if(cdata != cmpdata[idx].value){
|
||||||
|
printk("addr:0x%04x, data:(0x%02x : 0x%02x) \n",
|
||||||
|
cmpdata[idx].addr,cmpdata[idx].value,cdata);
|
||||||
|
rst = HAL_STATUS_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printk("### %s data compared !!###\n",__FUNCTION__);
|
||||||
|
//if(rst == HAL_STATUS_FAILURE)
|
||||||
|
{//dump data from TX packet buffer
|
||||||
|
rtw_IOL_cmd_tx_pkt_buf_dump(pDM_Odm->Adapter,pxmit_frame->attrib.pktlen+32);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif //CONFIG_IOL_IOREG_CFG_DBG
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
rst = HAL_STATUS_FAILURE;
|
||||||
|
printk("~~~ IOL Config %s Failed !!! \n",__FUNCTION__);
|
||||||
|
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
||||||
|
{
|
||||||
|
//dump data from TX packet buffer
|
||||||
|
rtw_IOL_cmd_tx_pkt_buf_dump(pDM_Odm->Adapter,pxmit_frame->attrib.pktlen+32);
|
||||||
|
}
|
||||||
|
#endif //CONFIG_IOL_IOREG_CFG_DBG
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif //#ifdef CONFIG_IOL_IOREG_CFG
|
||||||
|
return rst;
|
||||||
|
}
|
||||||
|
/******************************************************************************
|
||||||
|
* RadioA_1T_ICUT.TXT
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
u4Byte Array_MP_8188E_RadioA_1T_ICUT[] = {
|
||||||
|
0x000, 0x00030000,
|
||||||
|
0x008, 0x00084000,
|
||||||
|
0x018, 0x00000407,
|
||||||
|
0x019, 0x00000012,
|
||||||
|
0x01E, 0x00080009,
|
||||||
|
0x01F, 0x00000880,
|
||||||
|
0x02F, 0x0001A060,
|
||||||
|
0x03F, 0x00000000,
|
||||||
|
0x042, 0x000060C0,
|
||||||
|
0x057, 0x000D0000,
|
||||||
|
0x058, 0x000BE180,
|
||||||
|
0x067, 0x00001552,
|
||||||
|
0x083, 0x00000000,
|
||||||
|
0x0B0, 0x000FF8FC,
|
||||||
|
0x0B1, 0x00054400,
|
||||||
|
0x0B2, 0x000CCC19,
|
||||||
|
0x0B4, 0x00043003,
|
||||||
|
0x0B6, 0x0004953E,
|
||||||
|
0x0B7, 0x0001C718,
|
||||||
|
0x0B8, 0x000060FF,
|
||||||
|
0x0B9, 0x00080001,
|
||||||
|
0x0BA, 0x00040000,
|
||||||
|
0x0BB, 0x00000400,
|
||||||
|
0x0BF, 0x000C0000,
|
||||||
|
0x0C2, 0x00002400,
|
||||||
|
0x0C3, 0x00000009,
|
||||||
|
0x0C4, 0x00040C91,
|
||||||
|
0x0C5, 0x00099999,
|
||||||
|
0x0C6, 0x000000A3,
|
||||||
|
0x0C7, 0x00088820,
|
||||||
|
0x0C8, 0x00076C06,
|
||||||
|
0x0C9, 0x00000000,
|
||||||
|
0x0CA, 0x00080000,
|
||||||
|
0x0DF, 0x00000180,
|
||||||
|
0x0EF, 0x000001A0,
|
||||||
|
0x051, 0x0006B27D,
|
||||||
|
0xFF0F0400, 0xABCD,
|
||||||
|
0x052, 0x0007E4DD,
|
||||||
|
0xCDCDCDCD, 0xCDCD,
|
||||||
|
0x052, 0x0007E49D,
|
||||||
|
0xFF0F0400, 0xDEAD,
|
||||||
|
0x053, 0x00000073,
|
||||||
|
0x056, 0x00051FF3,
|
||||||
|
0x035, 0x00000086,
|
||||||
|
0x035, 0x00000186,
|
||||||
|
0x035, 0x00000286,
|
||||||
|
0x036, 0x00001C25,
|
||||||
|
0x036, 0x00009C25,
|
||||||
|
0x036, 0x00011C25,
|
||||||
|
0x036, 0x00019C25,
|
||||||
|
0x0B6, 0x00048538,
|
||||||
|
0x018, 0x00000C07,
|
||||||
|
0x05A, 0x0004BD00,
|
||||||
|
0x019, 0x000739D0,
|
||||||
|
0x034, 0x0000ADF3,
|
||||||
|
0x034, 0x00009DF0,
|
||||||
|
0x034, 0x00008DED,
|
||||||
|
0x034, 0x00007DEA,
|
||||||
|
0x034, 0x00006DE7,
|
||||||
|
0x034, 0x000054EE,
|
||||||
|
0x034, 0x000044EB,
|
||||||
|
0x034, 0x000034E8,
|
||||||
|
0x034, 0x0000246B,
|
||||||
|
0x034, 0x00001468,
|
||||||
|
0x034, 0x0000006D,
|
||||||
|
0x000, 0x00030159,
|
||||||
|
0x084, 0x00068200,
|
||||||
|
0x086, 0x000000CE,
|
||||||
|
0x087, 0x00048A00,
|
||||||
|
0x08E, 0x00065540,
|
||||||
|
0x08F, 0x00088000,
|
||||||
|
0x0EF, 0x000020A0,
|
||||||
|
0x03B, 0x000F02B0,
|
||||||
|
0x03B, 0x000EF7B0,
|
||||||
|
0x03B, 0x000D4FB0,
|
||||||
|
0x03B, 0x000CF060,
|
||||||
|
0x03B, 0x000B0090,
|
||||||
|
0x03B, 0x000A0080,
|
||||||
|
0x03B, 0x00090080,
|
||||||
|
0x03B, 0x0008F780,
|
||||||
|
0x03B, 0x000722B0,
|
||||||
|
0x03B, 0x0006F7B0,
|
||||||
|
0x03B, 0x00054FB0,
|
||||||
|
0x03B, 0x0004F060,
|
||||||
|
0x03B, 0x00030090,
|
||||||
|
0x03B, 0x00020080,
|
||||||
|
0x03B, 0x00010080,
|
||||||
|
0x03B, 0x0000F780,
|
||||||
|
0x0EF, 0x000000A0,
|
||||||
|
0x000, 0x00010159,
|
||||||
|
0x018, 0x0000F407,
|
||||||
|
0xFFE, 0x00000000,
|
||||||
|
0xFFE, 0x00000000,
|
||||||
|
0x01F, 0x00080003,
|
||||||
|
0xFFE, 0x00000000,
|
||||||
|
0xFFE, 0x00000000,
|
||||||
|
0x01E, 0x00000001,
|
||||||
|
0x01F, 0x00080000,
|
||||||
|
0x000, 0x00033E60,
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
ODM_ReadAndConfig_RadioA_1T_ICUT_8188E(
|
||||||
|
IN PDM_ODM_T pDM_Odm
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
|
||||||
|
|
||||||
|
u4Byte hex = 0;
|
||||||
|
u4Byte i = 0;
|
||||||
|
u2Byte count = 0;
|
||||||
|
pu4Byte ptr_array = NULL;
|
||||||
|
u1Byte platform = pDM_Odm->SupportPlatform;
|
||||||
|
u1Byte _interface = pDM_Odm->SupportInterface;
|
||||||
|
u1Byte board = pDM_Odm->BoardType;
|
||||||
|
u4Byte ArrayLen = sizeof(Array_MP_8188E_RadioA_1T_ICUT)/sizeof(u4Byte);
|
||||||
|
pu4Byte Array = Array_MP_8188E_RadioA_1T_ICUT;
|
||||||
|
|
||||||
|
|
||||||
|
hex += board;
|
||||||
|
hex += _interface << 8;
|
||||||
|
hex += platform << 16;
|
||||||
|
hex += 0xFF000000;
|
||||||
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ReadAndConfig_MP_8188E_RadioA_1T_ICUT, hex = 0x%X\n", hex));
|
||||||
|
|
||||||
|
for (i = 0; i < ArrayLen; i += 2 )
|
||||||
|
{
|
||||||
|
u4Byte v1 = Array[i];
|
||||||
|
u4Byte v2 = Array[i+1];
|
||||||
|
|
||||||
|
// This (offset, data) pair meets the condition.
|
||||||
|
if ( v1 < 0xCDCDCDCD )
|
||||||
|
{
|
||||||
|
odm_ConfigRF_RadioA_8188E(pDM_Odm, v1, v2);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // This line is the start line of branch.
|
||||||
|
if ( !CheckCondition(Array[i], hex) )
|
||||||
|
{ // Discard the following (offset, data) pairs.
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
while (v2 != 0xDEAD &&
|
||||||
|
v2 != 0xCDEF &&
|
||||||
|
v2 != 0xCDCD && i < ArrayLen -2)
|
||||||
|
{
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
}
|
||||||
|
i -= 2; // prevent from for-loop += 2
|
||||||
|
}
|
||||||
|
else // Configure matched pairs and skip to end of if-else.
|
||||||
|
{
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
while (v2 != 0xDEAD &&
|
||||||
|
v2 != 0xCDEF &&
|
||||||
|
v2 != 0xCDCD && i < ArrayLen -2)
|
||||||
|
{
|
||||||
|
odm_ConfigRF_RadioA_8188E(pDM_Odm, v1, v2);
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (v2 != 0xDEAD && i < ArrayLen -2)
|
||||||
|
{
|
||||||
|
READ_NEXT_PAIR(v1, v2, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif // end of HWIMG_SUPPORT
|
||||||
|
|
||||||
|
|
1554
hal/HalPhyRf.c
Normal file → Executable file
1554
hal/HalPhyRf.c
Normal file → Executable file
File diff suppressed because it is too large
Load diff
4550
hal/HalPhyRf_8188e.c
Normal file → Executable file
4550
hal/HalPhyRf_8188e.c
Normal file → Executable file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
12495
hal/OUTSRC/odm.c
12495
hal/OUTSRC/odm.c
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,627 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*
|
|
||||||
*
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
//============================================================
|
|
||||||
// include files
|
|
||||||
//============================================================
|
|
||||||
|
|
||||||
#include "odm_precomp.h"
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_InitDebugSetting(
|
|
||||||
IN PDM_ODM_T pDM_Odm
|
|
||||||
)
|
|
||||||
{
|
|
||||||
pDM_Odm->DebugLevel = ODM_DBG_TRACE;
|
|
||||||
|
|
||||||
pDM_Odm->DebugComponents =
|
|
||||||
\
|
|
||||||
#if DBG
|
|
||||||
//BB Functions
|
|
||||||
// ODM_COMP_DIG |
|
|
||||||
// ODM_COMP_RA_MASK |
|
|
||||||
// ODM_COMP_DYNAMIC_TXPWR |
|
|
||||||
// ODM_COMP_FA_CNT |
|
|
||||||
// ODM_COMP_RSSI_MONITOR |
|
|
||||||
// ODM_COMP_CCK_PD |
|
|
||||||
// ODM_COMP_ANT_DIV |
|
|
||||||
// ODM_COMP_PWR_SAVE |
|
|
||||||
// ODM_COMP_PWR_TRAIN |
|
|
||||||
// ODM_COMP_RATE_ADAPTIVE |
|
|
||||||
// ODM_COMP_PATH_DIV |
|
|
||||||
// ODM_COMP_DYNAMIC_PRICCA |
|
|
||||||
// ODM_COMP_RXHP |
|
|
||||||
|
|
||||||
//MAC Functions
|
|
||||||
// ODM_COMP_EDCA_TURBO |
|
|
||||||
// ODM_COMP_EARLY_MODE |
|
|
||||||
//RF Functions
|
|
||||||
// ODM_COMP_TX_PWR_TRACK |
|
|
||||||
// ODM_COMP_RX_GAIN_TRACK |
|
|
||||||
// ODM_COMP_CALIBRATION |
|
|
||||||
//Common
|
|
||||||
// ODM_COMP_COMMON |
|
|
||||||
// ODM_COMP_INIT |
|
|
||||||
#endif
|
|
||||||
0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
/*------------------Declare variable-----------------------
|
|
||||||
// Define debug flag array for common debug print macro. */
|
|
||||||
u4Byte ODM_DBGP_Type[ODM_DBGP_TYPE_MAX];
|
|
||||||
|
|
||||||
/* Define debug print header for every service module. */
|
|
||||||
ODM_DBGP_HEAD_T ODM_DBGP_Head;
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------
|
|
||||||
* Function: DBGP_Flag_Init
|
|
||||||
*
|
|
||||||
* Overview: Refresh all debug print control flag content to zero.
|
|
||||||
*
|
|
||||||
* Input: NONE
|
|
||||||
*
|
|
||||||
* Output: NONE
|
|
||||||
*
|
|
||||||
* Return: NONE
|
|
||||||
*
|
|
||||||
* Revised History:
|
|
||||||
* When Who Remark
|
|
||||||
* 10/20/2006 MHC Create Version 0.
|
|
||||||
*
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
extern void ODM_DBGP_Flag_Init(void)
|
|
||||||
{
|
|
||||||
u1Byte i;
|
|
||||||
|
|
||||||
for (i = 0; i < ODM_DBGP_TYPE_MAX; i++)
|
|
||||||
{
|
|
||||||
ODM_DBGP_Type[i] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifndef ADSL_AP_BUILD_WORKAROUND
|
|
||||||
#if DBG
|
|
||||||
// 2010/06/02 MH Free build driver can not out any debug message!!!
|
|
||||||
// Init Debug flag enable condition
|
|
||||||
|
|
||||||
ODM_DBGP_Type[FINIT] = \
|
|
||||||
// INIT_EEPROM |
|
|
||||||
// INIT_TxPower |
|
|
||||||
// INIT_IQK |
|
|
||||||
// INIT_RF |
|
|
||||||
0;
|
|
||||||
|
|
||||||
ODM_DBGP_Type[FDM] = \
|
|
||||||
// WA_IOT |
|
|
||||||
// DM_PWDB |
|
|
||||||
// DM_Monitor |
|
|
||||||
// DM_DIG |
|
|
||||||
// DM_EDCA_Turbo |
|
|
||||||
// DM_BT30 |
|
|
||||||
0;
|
|
||||||
|
|
||||||
ODM_DBGP_Type[FIOCTL] = \
|
|
||||||
// IOCTL_IRP |
|
|
||||||
// IOCTL_IRP_DETAIL |
|
|
||||||
// IOCTL_IRP_STATISTICS |
|
|
||||||
// IOCTL_IRP_HANDLE |
|
|
||||||
// IOCTL_BT_HCICMD |
|
|
||||||
// IOCTL_BT_HCICMD_DETAIL |
|
|
||||||
// IOCTL_BT_HCICMD_EXT |
|
|
||||||
// IOCTL_BT_EVENT |
|
|
||||||
// IOCTL_BT_EVENT_DETAIL |
|
|
||||||
// IOCTL_BT_EVENT_PERIODICAL |
|
|
||||||
// IOCTL_BT_TX_ACLDATA |
|
|
||||||
// IOCTL_BT_TX_ACLDATA_DETAIL |
|
|
||||||
// IOCTL_BT_RX_ACLDATA |
|
|
||||||
// IOCTL_BT_RX_ACLDATA_DETAIL |
|
|
||||||
// IOCTL_BT_TP |
|
|
||||||
// IOCTL_STATE |
|
|
||||||
// IOCTL_BT_LOGO |
|
|
||||||
// IOCTL_CALLBACK_FUN |
|
|
||||||
// IOCTL_PARSE_BT_PKT |
|
|
||||||
0;
|
|
||||||
|
|
||||||
ODM_DBGP_Type[FBT] = \
|
|
||||||
// BT_TRACE |
|
|
||||||
0;
|
|
||||||
|
|
||||||
ODM_DBGP_Type[FEEPROM] = \
|
|
||||||
// EEPROM_W |
|
|
||||||
// EFUSE_PG |
|
|
||||||
// EFUSE_READ_ALL |
|
|
||||||
// EFUSE_ANALYSIS |
|
|
||||||
// EFUSE_PG_DETAIL |
|
|
||||||
0;
|
|
||||||
|
|
||||||
ODM_DBGP_Type[FDBG_CTRL] = \
|
|
||||||
// DBG_CTRL_TRACE |
|
|
||||||
// DBG_CTRL_INBAND_NOISE |
|
|
||||||
0;
|
|
||||||
|
|
||||||
// 2011/07/20 MH Add for short cut
|
|
||||||
ODM_DBGP_Type[FSHORT_CUT] = \
|
|
||||||
// SHCUT_TX |
|
|
||||||
// SHCUT_RX |
|
|
||||||
0;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
/* Define debug header of every service module. */
|
|
||||||
//ODM_DBGP_Head.pMANS = "\n\r[MANS] ";
|
|
||||||
//ODM_DBGP_Head.pRTOS = "\n\r[RTOS] ";
|
|
||||||
//ODM_DBGP_Head.pALM = "\n\r[ALM] ";
|
|
||||||
//ODM_DBGP_Head.pPEM = "\n\r[PEM] ";
|
|
||||||
//ODM_DBGP_Head.pCMPK = "\n\r[CMPK] ";
|
|
||||||
//ODM_DBGP_Head.pRAPD = "\n\r[RAPD] ";
|
|
||||||
//ODM_DBGP_Head.pTXPB = "\n\r[TXPB] ";
|
|
||||||
//ODM_DBGP_Head.pQUMG = "\n\r[QUMG] ";
|
|
||||||
|
|
||||||
} /* DBGP_Flag_Init */
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
u4Byte GlobalDebugLevel = DBG_LOUD;
|
|
||||||
//
|
|
||||||
// 2009/06/22 MH Allow Fre build to print none debug info at init time.
|
|
||||||
//
|
|
||||||
#if DBG
|
|
||||||
u8Byte GlobalDebugComponents = \
|
|
||||||
// COMP_TRACE |
|
|
||||||
// COMP_DBG |
|
|
||||||
// COMP_INIT |
|
|
||||||
// COMP_OID_QUERY |
|
|
||||||
// COMP_OID_SET |
|
|
||||||
// COMP_RECV |
|
|
||||||
// COMP_SEND |
|
|
||||||
// COMP_IO |
|
|
||||||
// COMP_POWER |
|
|
||||||
// COMP_MLME |
|
|
||||||
// COMP_SCAN |
|
|
||||||
// COMP_SYSTEM |
|
|
||||||
// COMP_SEC |
|
|
||||||
// COMP_AP |
|
|
||||||
// COMP_TURBO |
|
|
||||||
// COMP_QOS |
|
|
||||||
// COMP_AUTHENTICATOR |
|
|
||||||
// COMP_BEACON |
|
|
||||||
// COMP_ANTENNA |
|
|
||||||
// COMP_RATE |
|
|
||||||
// COMP_EVENTS |
|
|
||||||
// COMP_FPGA |
|
|
||||||
// COMP_RM |
|
|
||||||
// COMP_MP |
|
|
||||||
// COMP_RXDESC |
|
|
||||||
// COMP_CKIP |
|
|
||||||
// COMP_DIG |
|
|
||||||
// COMP_TXAGC |
|
|
||||||
// COMP_HIPWR |
|
|
||||||
// COMP_HALDM |
|
|
||||||
// COMP_RSNA |
|
|
||||||
// COMP_INDIC |
|
|
||||||
// COMP_LED |
|
|
||||||
// COMP_RF |
|
|
||||||
// COMP_DUALMACSWITCH |
|
|
||||||
// COMP_EASY_CONCURRENT |
|
|
||||||
|
|
||||||
//1!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
//1//1Attention Please!!!<11n or 8190 specific code should be put below this line>
|
|
||||||
//1!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
|
|
||||||
// COMP_HT |
|
|
||||||
// COMP_POWER_TRACKING |
|
|
||||||
// COMP_RX_REORDER |
|
|
||||||
// COMP_AMSDU |
|
|
||||||
// COMP_WPS |
|
|
||||||
// COMP_RATR |
|
|
||||||
// COMP_RESET |
|
|
||||||
// COMP_CMD |
|
|
||||||
// COMP_EFUSE |
|
|
||||||
// COMP_MESH_INTERWORKING |
|
|
||||||
// COMP_CCX |
|
|
||||||
// COMP_IOCTL |
|
|
||||||
// COMP_GP |
|
|
||||||
// COMP_TXAGG |
|
|
||||||
// COMP_BB_POWERSAVING |
|
|
||||||
// COMP_SWAS |
|
|
||||||
// COMP_P2P |
|
|
||||||
// COMP_MUX |
|
|
||||||
// COMP_FUNC |
|
|
||||||
// COMP_TDLS |
|
|
||||||
// COMP_OMNIPEEK |
|
|
||||||
// COMP_PSD |
|
|
||||||
0;
|
|
||||||
|
|
||||||
|
|
||||||
#else
|
|
||||||
#define FuncEntry
|
|
||||||
#define FuncExit
|
|
||||||
u8Byte GlobalDebugComponents = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (RT_PLATFORM==PLATFORM_LINUX)
|
|
||||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
|
|
||||||
EXPORT_SYMBOL(GlobalDebugComponents);
|
|
||||||
EXPORT_SYMBOL(GlobalDebugLevel);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*------------------Declare variable-----------------------
|
|
||||||
// Define debug flag array for common debug print macro. */
|
|
||||||
u4Byte DBGP_Type[DBGP_TYPE_MAX];
|
|
||||||
|
|
||||||
/* Define debug print header for every service module. */
|
|
||||||
DBGP_HEAD_T DBGP_Head;
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------
|
|
||||||
* Function: DBGP_Flag_Init
|
|
||||||
*
|
|
||||||
* Overview: Refresh all debug print control flag content to zero.
|
|
||||||
*
|
|
||||||
* Input: NONE
|
|
||||||
*
|
|
||||||
* Output: NONE
|
|
||||||
*
|
|
||||||
* Return: NONE
|
|
||||||
*
|
|
||||||
* Revised History:
|
|
||||||
* When Who Remark
|
|
||||||
* 10/20/2006 MHC Create Version 0.
|
|
||||||
*
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
extern void DBGP_Flag_Init(void)
|
|
||||||
{
|
|
||||||
u1Byte i;
|
|
||||||
|
|
||||||
for (i = 0; i < DBGP_TYPE_MAX; i++)
|
|
||||||
{
|
|
||||||
DBGP_Type[i] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if DBG
|
|
||||||
// 2010/06/02 MH Free build driver can not out any debug message!!!
|
|
||||||
// Init Debug flag enable condition
|
|
||||||
|
|
||||||
DBGP_Type[FINIT] = \
|
|
||||||
// INIT_EEPROM |
|
|
||||||
// INIT_TxPower |
|
|
||||||
// INIT_IQK |
|
|
||||||
// INIT_RF |
|
|
||||||
0;
|
|
||||||
|
|
||||||
DBGP_Type[FDM] = \
|
|
||||||
// WA_IOT |
|
|
||||||
// DM_PWDB |
|
|
||||||
// DM_Monitor |
|
|
||||||
// DM_DIG |
|
|
||||||
// DM_EDCA_Turbo |
|
|
||||||
// DM_BT30 |
|
|
||||||
0;
|
|
||||||
|
|
||||||
DBGP_Type[FIOCTL] = \
|
|
||||||
// IOCTL_IRP |
|
|
||||||
// IOCTL_IRP_DETAIL |
|
|
||||||
// IOCTL_IRP_STATISTICS |
|
|
||||||
// IOCTL_IRP_HANDLE |
|
|
||||||
// IOCTL_BT_HCICMD |
|
|
||||||
// IOCTL_BT_HCICMD_DETAIL |
|
|
||||||
// IOCTL_BT_HCICMD_EXT |
|
|
||||||
// IOCTL_BT_EVENT |
|
|
||||||
// IOCTL_BT_EVENT_DETAIL |
|
|
||||||
// IOCTL_BT_EVENT_PERIODICAL |
|
|
||||||
// IOCTL_BT_TX_ACLDATA |
|
|
||||||
// IOCTL_BT_TX_ACLDATA_DETAIL |
|
|
||||||
// IOCTL_BT_RX_ACLDATA |
|
|
||||||
// IOCTL_BT_RX_ACLDATA_DETAIL |
|
|
||||||
// IOCTL_BT_TP |
|
|
||||||
// IOCTL_STATE |
|
|
||||||
// IOCTL_BT_LOGO |
|
|
||||||
// IOCTL_CALLBACK_FUN |
|
|
||||||
// IOCTL_PARSE_BT_PKT |
|
|
||||||
0;
|
|
||||||
|
|
||||||
DBGP_Type[FBT] = \
|
|
||||||
// BT_TRACE |
|
|
||||||
0;
|
|
||||||
|
|
||||||
DBGP_Type[FEEPROM] = \
|
|
||||||
// EEPROM_W |
|
|
||||||
// EFUSE_PG |
|
|
||||||
// EFUSE_READ_ALL |
|
|
||||||
// EFUSE_ANALYSIS |
|
|
||||||
// EFUSE_PG_DETAIL |
|
|
||||||
0;
|
|
||||||
|
|
||||||
DBGP_Type[FDBG_CTRL] = \
|
|
||||||
// DBG_CTRL_TRACE |
|
|
||||||
// DBG_CTRL_INBAND_NOISE |
|
|
||||||
0;
|
|
||||||
|
|
||||||
// 2011/07/20 MH Add for short cut
|
|
||||||
DBGP_Type[FSHORT_CUT] = \
|
|
||||||
// SHCUT_TX |
|
|
||||||
// SHCUT_RX |
|
|
||||||
0;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
/* Define debug header of every service module. */
|
|
||||||
DBGP_Head.pMANS = "\n\r[MANS] ";
|
|
||||||
DBGP_Head.pRTOS = "\n\r[RTOS] ";
|
|
||||||
DBGP_Head.pALM = "\n\r[ALM] ";
|
|
||||||
DBGP_Head.pPEM = "\n\r[PEM] ";
|
|
||||||
DBGP_Head.pCMPK = "\n\r[CMPK] ";
|
|
||||||
DBGP_Head.pRAPD = "\n\r[RAPD] ";
|
|
||||||
DBGP_Head.pTXPB = "\n\r[TXPB] ";
|
|
||||||
DBGP_Head.pQUMG = "\n\r[QUMG] ";
|
|
||||||
|
|
||||||
} /* DBGP_Flag_Init */
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------
|
|
||||||
* Function: DBG_PrintAllFlag
|
|
||||||
*
|
|
||||||
* Overview: Print All debug flag
|
|
||||||
*
|
|
||||||
* Input: NONE
|
|
||||||
*
|
|
||||||
* Output: NONE
|
|
||||||
*
|
|
||||||
* Return: NONE
|
|
||||||
*
|
|
||||||
* Revised History:
|
|
||||||
* When Who Remark
|
|
||||||
* 12/10/2008 MHC Create Version 0.
|
|
||||||
*
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
extern void DBG_PrintAllFlag(void)
|
|
||||||
{
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 0 FQoS\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 1 FTX\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 2 FRX\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 3 FSEC\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 4 FMGNT\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 5 FMLME\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 6 FRESOURCE\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 7 FBEACON\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 8 FISR\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 9 FPHY\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 11 FMP\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 12 FPWR\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 13 FDM\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 14 FDBG_CTRL\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 15 FC2H\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 16 FBT\n"));
|
|
||||||
} // DBG_PrintAllFlag
|
|
||||||
|
|
||||||
|
|
||||||
extern void DBG_PrintAllComp(void)
|
|
||||||
{
|
|
||||||
u1Byte i;
|
|
||||||
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("GlobalDebugComponents Definition\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT0 COMP_TRACE\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT1 COMP_DBG\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT2 COMP_INIT\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT3 COMP_OID_QUERY\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT4 COMP_OID_SET\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT5 COMP_RECV\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT6 COMP_SEND\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT7 COMP_IO\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT8 COMP_POWER\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT9 COMP_MLME\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT10 COMP_SCAN\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT11 COMP_SYSTEM\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT12 COMP_SEC\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT13 COMP_AP\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT14 COMP_TURBO\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT15 COMP_QOS\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT16 COMP_AUTHENTICATOR\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT17 COMP_BEACON\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT18 COMP_BEACON\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT19 COMP_RATE\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT20 COMP_EVENTS\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT21 COMP_FPGA\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT22 COMP_RM\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT23 COMP_MP\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT24 COMP_RXDESC\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT25 COMP_CKIP\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT26 COMP_DIG\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT27 COMP_TXAGC\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT28 COMP_HIPWR\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT29 COMP_HALDM\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT30 COMP_RSNA\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT31 COMP_INDIC\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT32 COMP_LED\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT33 COMP_RF\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT34 COMP_HT\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT35 COMP_POWER_TRACKING\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT36 COMP_POWER_TRACKING\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT37 COMP_AMSDU\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT38 COMP_WPS\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT39 COMP_RATR\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT40 COMP_RESET\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT41 COMP_CMD\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT42 COMP_EFUSE\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT43 COMP_MESH_INTERWORKING\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT43 COMP_CCX\n"));
|
|
||||||
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("GlobalDebugComponents = %"i64fmt"x\n", GlobalDebugComponents));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("Enable DBG COMP ="));
|
|
||||||
for (i = 0; i < 64; i++)
|
|
||||||
{
|
|
||||||
if (GlobalDebugComponents & ((u8Byte)0x1 << i) )
|
|
||||||
{
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT%02d |\n", i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("\n"));
|
|
||||||
|
|
||||||
} // DBG_PrintAllComp
|
|
||||||
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------
|
|
||||||
* Function: DBG_PrintFlagEvent
|
|
||||||
*
|
|
||||||
* Overview: Print dedicated debug flag event
|
|
||||||
*
|
|
||||||
* Input: NONE
|
|
||||||
*
|
|
||||||
* Output: NONE
|
|
||||||
*
|
|
||||||
* Return: NONE
|
|
||||||
*
|
|
||||||
* Revised History:
|
|
||||||
* When Who Remark
|
|
||||||
* 12/10/2008 MHC Create Version 0.
|
|
||||||
*
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
extern void DBG_PrintFlagEvent(u1Byte DbgFlag)
|
|
||||||
{
|
|
||||||
switch(DbgFlag)
|
|
||||||
{
|
|
||||||
case FQoS:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 QoS_INIT\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 QoS_VISTA\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FTX:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 TX_DESC\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 TX_DESC_TID\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FRX:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 RX_DATA\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 RX_PHY_STS\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 RX_PHY_SS\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 RX_PHY_SQ\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 4 RX_PHY_ASTS\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 5 RX_ERR_LEN\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 6 RX_DEFRAG\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 7 RX_ERR_RATE\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FSEC:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("NA\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FMGNT:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("NA\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FMLME:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 MEDIA_STS\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 LINK_STS\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FRESOURCE:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 OS_CHK\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FBEACON:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 BCN_SHOW\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 BCN_PEER\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FISR:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 ISR_CHK\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FPHY:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 PHY_BBR\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 PHY_BBW\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 PHY_RFR\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 PHY_RFW\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 4 PHY_MACR\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 5 PHY_MACW\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 6 PHY_ALLR\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 7 PHY_ALLW\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 8 PHY_TXPWR\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FMP:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 MP_RX\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FEEPROM:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 EEPROM_W\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 EFUSE_PG\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FPWR:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 LPS\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 IPS\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 PWRSW\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 PWRHW\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 4 PWRHAL\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FDM:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 WA_IOT\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 DM_PWDB\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 DM_Monitor\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 DM_DIG\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FDBG_CTRL:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 DBG_CTRL_TRACE\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 DBG_CTRL_INBAND_NOISE\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FC2H:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 C2H_Summary\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 C2H_PacketData\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 C2H_ContentData\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FBT:
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 BT_TRACE\n"));
|
|
||||||
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 BT_RFPoll\n"));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // DBG_PrintFlagEvent
|
|
||||||
|
|
||||||
|
|
||||||
extern void DBG_DumpMem(const u1Byte DbgComp,
|
|
||||||
const u1Byte DbgLevel,
|
|
||||||
pu1Byte pMem,
|
|
||||||
u2Byte Len)
|
|
||||||
{
|
|
||||||
u2Byte i;
|
|
||||||
|
|
||||||
for (i=0;i<((Len>>3) + 1);i++)
|
|
||||||
{
|
|
||||||
ODM_RT_TRACE(pDM_Odm,DbgComp, DbgLevel, ("%02X %02X %02X %02X %02X %02X %02X %02X\n",
|
|
||||||
*(pMem+(i*8)), *(pMem+(i*8+1)), *(pMem+(i*8+2)), *(pMem+(i*8+3)),
|
|
||||||
*(pMem+(i*8+4)), *(pMem+(i*8+5)), *(pMem+(i*8+6)), *(pMem+(i*8+7))));
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,666 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*
|
|
||||||
*
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
//============================================================
|
|
||||||
// include files
|
|
||||||
//============================================================
|
|
||||||
|
|
||||||
#include "odm_precomp.h"
|
|
||||||
//
|
|
||||||
// ODM IO Relative API.
|
|
||||||
//
|
|
||||||
|
|
||||||
u1Byte
|
|
||||||
ODM_Read1Byte(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte RegAddr
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
prtl8192cd_priv priv = pDM_Odm->priv;
|
|
||||||
return RTL_R8(RegAddr);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
return rtw_read8(Adapter,RegAddr);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
return PlatformEFIORead1Byte(Adapter, RegAddr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
u2Byte
|
|
||||||
ODM_Read2Byte(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte RegAddr
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
prtl8192cd_priv priv = pDM_Odm->priv;
|
|
||||||
return RTL_R16(RegAddr);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
return rtw_read16(Adapter,RegAddr);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
return PlatformEFIORead2Byte(Adapter, RegAddr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
u4Byte
|
|
||||||
ODM_Read4Byte(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte RegAddr
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
prtl8192cd_priv priv = pDM_Odm->priv;
|
|
||||||
return RTL_R32(RegAddr);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
return rtw_read32(Adapter,RegAddr);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
return PlatformEFIORead4Byte(Adapter, RegAddr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_Write1Byte(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte RegAddr,
|
|
||||||
IN u1Byte Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
prtl8192cd_priv priv = pDM_Odm->priv;
|
|
||||||
RTL_W8(RegAddr, Data);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
rtw_write8(Adapter,RegAddr, Data);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
PlatformEFIOWrite1Byte(Adapter, RegAddr, Data);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_Write2Byte(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte RegAddr,
|
|
||||||
IN u2Byte Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
prtl8192cd_priv priv = pDM_Odm->priv;
|
|
||||||
RTL_W16(RegAddr, Data);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
rtw_write16(Adapter,RegAddr, Data);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
PlatformEFIOWrite2Byte(Adapter, RegAddr, Data);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_Write4Byte(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte RegAddr,
|
|
||||||
IN u4Byte Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
prtl8192cd_priv priv = pDM_Odm->priv;
|
|
||||||
RTL_W32(RegAddr, Data);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
rtw_write32(Adapter,RegAddr, Data);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
PlatformEFIOWrite4Byte(Adapter, RegAddr, Data);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_SetMACReg(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte RegAddr,
|
|
||||||
IN u4Byte BitMask,
|
|
||||||
IN u4Byte Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
PHY_SetBBReg(pDM_Odm->priv, RegAddr, BitMask, Data);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
u4Byte
|
|
||||||
ODM_GetMACReg(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte RegAddr,
|
|
||||||
IN u4Byte BitMask
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
return PHY_QueryBBReg(pDM_Odm->priv, RegAddr, BitMask);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
return PHY_QueryBBReg(Adapter, RegAddr, BitMask);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_SetBBReg(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte RegAddr,
|
|
||||||
IN u4Byte BitMask,
|
|
||||||
IN u4Byte Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
PHY_SetBBReg(pDM_Odm->priv, RegAddr, BitMask, Data);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
u4Byte
|
|
||||||
ODM_GetBBReg(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte RegAddr,
|
|
||||||
IN u4Byte BitMask
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
return PHY_QueryBBReg(pDM_Odm->priv, RegAddr, BitMask);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
return PHY_QueryBBReg(Adapter, RegAddr, BitMask);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_SetRFReg(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN ODM_RF_RADIO_PATH_E eRFPath,
|
|
||||||
IN u4Byte RegAddr,
|
|
||||||
IN u4Byte BitMask,
|
|
||||||
IN u4Byte Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
PHY_SetRFReg(pDM_Odm->priv, eRFPath, RegAddr, BitMask, Data);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
u4Byte
|
|
||||||
ODM_GetRFReg(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN ODM_RF_RADIO_PATH_E eRFPath,
|
|
||||||
IN u4Byte RegAddr,
|
|
||||||
IN u4Byte BitMask
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
return PHY_QueryRFReg(pDM_Odm->priv, eRFPath, RegAddr, BitMask, 1);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
return PHY_QueryRFReg(Adapter, eRFPath, RegAddr, BitMask);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// ODM Memory relative API.
|
|
||||||
//
|
|
||||||
VOID
|
|
||||||
ODM_AllocateMemory(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
OUT PVOID *pPtr,
|
|
||||||
IN u4Byte length
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
*pPtr = kmalloc(length, GFP_ATOMIC);
|
|
||||||
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
|
|
||||||
*pPtr = rtw_zvmalloc(length);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
PlatformAllocateMemory(Adapter, pPtr, length);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
// length could be ignored, used to detect memory leakage.
|
|
||||||
VOID
|
|
||||||
ODM_FreeMemory(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
OUT PVOID pPtr,
|
|
||||||
IN u4Byte length
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
kfree(pPtr);
|
|
||||||
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
|
|
||||||
rtw_vmfree(pPtr, length);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
//PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
PlatformFreeMemory(pPtr, length);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
s4Byte ODM_CompareMemory(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN PVOID pBuf1,
|
|
||||||
IN PVOID pBuf2,
|
|
||||||
IN u4Byte length
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
return memcmp(pBuf1,pBuf2,length);
|
|
||||||
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
|
|
||||||
return _rtw_memcmp(pBuf1,pBuf2,length);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
return PlatformCompareMemory(pBuf1,pBuf2,length);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// ODM MISC relative API.
|
|
||||||
//
|
|
||||||
VOID
|
|
||||||
ODM_AcquireSpinLock(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN RT_SPINLOCK_TYPE type
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
|
|
||||||
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
PlatformAcquireSpinLock(Adapter, type);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
VOID
|
|
||||||
ODM_ReleaseSpinLock(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN RT_SPINLOCK_TYPE type
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
|
|
||||||
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
PlatformReleaseSpinLock(Adapter, type);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Work item relative API. FOr MP driver only~!
|
|
||||||
//
|
|
||||||
VOID
|
|
||||||
ODM_InitializeWorkItem(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN PRT_WORK_ITEM pRtWorkItem,
|
|
||||||
IN RT_WORKITEM_CALL_BACK RtWorkItemCallback,
|
|
||||||
IN PVOID pContext,
|
|
||||||
IN const char* szID
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
PlatformInitializeWorkItem(Adapter, pRtWorkItem, RtWorkItemCallback, pContext, szID);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_StartWorkItem(
|
|
||||||
IN PRT_WORK_ITEM pRtWorkItem
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PlatformStartWorkItem(pRtWorkItem);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_StopWorkItem(
|
|
||||||
IN PRT_WORK_ITEM pRtWorkItem
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PlatformStopWorkItem(pRtWorkItem);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_FreeWorkItem(
|
|
||||||
IN PRT_WORK_ITEM pRtWorkItem
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PlatformFreeWorkItem(pRtWorkItem);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_ScheduleWorkItem(
|
|
||||||
IN PRT_WORK_ITEM pRtWorkItem
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PlatformScheduleWorkItem(pRtWorkItem);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_IsWorkItemScheduled(
|
|
||||||
IN PRT_WORK_ITEM pRtWorkItem
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PlatformIsWorkItemScheduled(pRtWorkItem);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// ODM Timer relative API.
|
|
||||||
//
|
|
||||||
VOID
|
|
||||||
ODM_StallExecution(
|
|
||||||
IN u4Byte usDelay
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
rtw_udelay_os(usDelay);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PlatformStallExecution(usDelay);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_delay_ms(IN u4Byte ms)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
delay_ms(ms);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
rtw_mdelay_os(ms);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
delay_ms(ms);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_delay_us(IN u4Byte us)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
delay_us(us);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
rtw_udelay_os(us);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PlatformStallExecution(us);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_sleep_ms(IN u4Byte ms)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
rtw_msleep_os(ms);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_sleep_us(IN u4Byte us)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
rtw_usleep_os(us);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_SetTimer(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN PRT_TIMER pTimer,
|
|
||||||
IN u4Byte msDelay
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
mod_timer(pTimer, jiffies + (msDelay+9)/10);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
_set_timer(pTimer,msDelay ); //ms
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
PlatformSetTimer(Adapter, pTimer, msDelay);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_InitializeTimer(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN PRT_TIMER pTimer,
|
|
||||||
IN RT_TIMER_CALL_BACK CallBackFunc,
|
|
||||||
IN PVOID pContext,
|
|
||||||
IN const char* szID
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
pTimer->function = CallBackFunc;
|
|
||||||
pTimer->data = (unsigned long)pDM_Odm;
|
|
||||||
init_timer(pTimer);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
_init_timer(pTimer,Adapter->pnetdev,CallBackFunc,pDM_Odm);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
PlatformInitializeTimer(Adapter, pTimer, CallBackFunc,pContext,szID);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_CancelTimer(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN PRT_TIMER pTimer
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
del_timer_sync(pTimer);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
_cancel_timer_ex(pTimer);
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
PlatformCancelTimer(Adapter, pTimer);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
ODM_ReleaseTimer(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN PRT_TIMER pTimer
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
|
|
||||||
// <20120301, Kordan> If the initilization fails, InitializeAdapterXxx will return regardless of InitHalDm.
|
|
||||||
// Hence, uninitialized timers cause BSOD when the driver releases resources since the init fail.
|
|
||||||
if (pTimer == 0)
|
|
||||||
{
|
|
||||||
ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_SERIOUS, ("=====>ODM_ReleaseTimer(), The timer is NULL! Please check it!\n"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
PlatformReleaseTimer(Adapter, pTimer);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// ODM FW relative API.
|
|
||||||
//
|
|
||||||
#if (DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
VOID
|
|
||||||
ODM_FillH2CCmd(
|
|
||||||
IN PADAPTER Adapter,
|
|
||||||
IN u1Byte ElementID,
|
|
||||||
IN u4Byte CmdLen,
|
|
||||||
IN pu1Byte pCmdBuffer
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if(IS_HARDWARE_TYPE_JAGUAR(Adapter))
|
|
||||||
{
|
|
||||||
switch(ElementID)
|
|
||||||
{
|
|
||||||
case ODM_H2C_RSSI_REPORT:
|
|
||||||
FillH2CCmd8812(Adapter, H2C_8812_RSSI_REPORT, CmdLen, pCmdBuffer);
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if(IS_HARDWARE_TYPE_8188E(Adapter))
|
|
||||||
{
|
|
||||||
switch(ElementID)
|
|
||||||
{
|
|
||||||
case ODM_H2C_PSD_RESULT:
|
|
||||||
FillH2CCmd88E(Adapter, H2C_88E_PSD_RESULT, CmdLen, pCmdBuffer);
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
switch(ElementID)
|
|
||||||
{
|
|
||||||
case ODM_H2C_RSSI_REPORT:
|
|
||||||
FillH2CCmd92C(Adapter, H2C_RSSI_REPORT, CmdLen, pCmdBuffer);
|
|
||||||
case ODM_H2C_PSD_RESULT:
|
|
||||||
FillH2CCmd92C(Adapter, H2C_92C_PSD_RESULT, CmdLen, pCmdBuffer);
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
u4Byte
|
|
||||||
ODM_FillH2CCmd(
|
|
||||||
IN pu1Byte pH2CBuffer,
|
|
||||||
IN u4Byte H2CBufferLen,
|
|
||||||
IN u4Byte CmdNum,
|
|
||||||
IN pu4Byte pElementID,
|
|
||||||
IN pu4Byte pCmdLen,
|
|
||||||
IN pu1Byte* pCmbBuffer,
|
|
||||||
IN pu1Byte CmdStartSeq
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
|
||||||
|
|
||||||
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
|
||||||
//FillH2CCmd(pH2CBuffer, H2CBufferLen, CmdNum, pElementID, pCmdLen, pCmbBuffer, CmdStartSeq);
|
|
||||||
return FALSE;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,502 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*
|
|
||||||
*
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
#include "../odm_precomp.h"
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
#include <rtw_iol.h>
|
|
||||||
#endif
|
|
||||||
#if (RTL8188E_SUPPORT == 1)
|
|
||||||
static BOOLEAN
|
|
||||||
CheckCondition(
|
|
||||||
const u4Byte Condition,
|
|
||||||
const u4Byte Hex
|
|
||||||
)
|
|
||||||
{
|
|
||||||
u4Byte _board = (Hex & 0x000000FF);
|
|
||||||
u4Byte _interface = (Hex & 0x0000FF00) >> 8;
|
|
||||||
u4Byte _platform = (Hex & 0x00FF0000) >> 16;
|
|
||||||
u4Byte cond = Condition;
|
|
||||||
|
|
||||||
if ( Condition == 0xCDCDCDCD )
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
cond = Condition & 0x000000FF;
|
|
||||||
if ( (_board != cond) && (cond != 0xFF) )
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
cond = Condition & 0x0000FF00;
|
|
||||||
cond = cond >> 8;
|
|
||||||
if ( ((_interface & cond) == 0) && (cond != 0x07) )
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
cond = Condition & 0x00FF0000;
|
|
||||||
cond = cond >> 16;
|
|
||||||
if ( ((_platform & cond) == 0) && (cond != 0x0F) )
|
|
||||||
return FALSE;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* MAC_REG.TXT
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
u4Byte Array_MAC_REG_8188E[] = {
|
|
||||||
0x026, 0x00000041,
|
|
||||||
0x027, 0x00000035,
|
|
||||||
0xFF0F0718, 0xABCD,
|
|
||||||
0x040, 0x0000000C,
|
|
||||||
0xCDCDCDCD, 0xCDCD,
|
|
||||||
0x040, 0x00000000,
|
|
||||||
0xFF0F0718, 0xDEAD,
|
|
||||||
0x428, 0x0000000A,
|
|
||||||
0x429, 0x00000010,
|
|
||||||
0x430, 0x00000000,
|
|
||||||
0x431, 0x00000001,
|
|
||||||
0x432, 0x00000002,
|
|
||||||
0x433, 0x00000004,
|
|
||||||
0x434, 0x00000005,
|
|
||||||
0x435, 0x00000006,
|
|
||||||
0x436, 0x00000007,
|
|
||||||
0x437, 0x00000008,
|
|
||||||
0x438, 0x00000000,
|
|
||||||
0x439, 0x00000000,
|
|
||||||
0x43A, 0x00000001,
|
|
||||||
0x43B, 0x00000002,
|
|
||||||
0x43C, 0x00000004,
|
|
||||||
0x43D, 0x00000005,
|
|
||||||
0x43E, 0x00000006,
|
|
||||||
0x43F, 0x00000007,
|
|
||||||
0x440, 0x0000005D,
|
|
||||||
0x441, 0x00000001,
|
|
||||||
0x442, 0x00000000,
|
|
||||||
0x444, 0x00000015,
|
|
||||||
0x445, 0x000000F0,
|
|
||||||
0x446, 0x0000000F,
|
|
||||||
0x447, 0x00000000,
|
|
||||||
0x458, 0x00000041,
|
|
||||||
0x459, 0x000000A8,
|
|
||||||
0x45A, 0x00000072,
|
|
||||||
0x45B, 0x000000B9,
|
|
||||||
0x460, 0x00000066,
|
|
||||||
0x461, 0x00000066,
|
|
||||||
0x480, 0x00000008,
|
|
||||||
0x4C8, 0x000000FF,
|
|
||||||
0x4C9, 0x00000008,
|
|
||||||
0x4CC, 0x000000FF,
|
|
||||||
0x4CD, 0x000000FF,
|
|
||||||
0x4CE, 0x00000001,
|
|
||||||
0x4D3, 0x00000001,
|
|
||||||
0x500, 0x00000026,
|
|
||||||
0x501, 0x000000A2,
|
|
||||||
0x502, 0x0000002F,
|
|
||||||
0x503, 0x00000000,
|
|
||||||
0x504, 0x00000028,
|
|
||||||
0x505, 0x000000A3,
|
|
||||||
0x506, 0x0000005E,
|
|
||||||
0x507, 0x00000000,
|
|
||||||
0x508, 0x0000002B,
|
|
||||||
0x509, 0x000000A4,
|
|
||||||
0x50A, 0x0000005E,
|
|
||||||
0x50B, 0x00000000,
|
|
||||||
0x50C, 0x0000004F,
|
|
||||||
0x50D, 0x000000A4,
|
|
||||||
0x50E, 0x00000000,
|
|
||||||
0x50F, 0x00000000,
|
|
||||||
0x512, 0x0000001C,
|
|
||||||
0x514, 0x0000000A,
|
|
||||||
0x516, 0x0000000A,
|
|
||||||
0x525, 0x0000004F,
|
|
||||||
0x550, 0x00000010,
|
|
||||||
0x551, 0x00000010,
|
|
||||||
0x559, 0x00000002,
|
|
||||||
0x55D, 0x000000FF,
|
|
||||||
0x605, 0x00000030,
|
|
||||||
0x608, 0x0000000E,
|
|
||||||
0x609, 0x0000002A,
|
|
||||||
0x620, 0x000000FF,
|
|
||||||
0x621, 0x000000FF,
|
|
||||||
0x622, 0x000000FF,
|
|
||||||
0x623, 0x000000FF,
|
|
||||||
0x624, 0x000000FF,
|
|
||||||
0x625, 0x000000FF,
|
|
||||||
0x626, 0x000000FF,
|
|
||||||
0x627, 0x000000FF,
|
|
||||||
0x652, 0x00000020,
|
|
||||||
0x63C, 0x0000000A,
|
|
||||||
0x63D, 0x0000000A,
|
|
||||||
0x63E, 0x0000000E,
|
|
||||||
0x63F, 0x0000000E,
|
|
||||||
0x640, 0x00000040,
|
|
||||||
0x66E, 0x00000005,
|
|
||||||
0x700, 0x00000021,
|
|
||||||
0x701, 0x00000043,
|
|
||||||
0x702, 0x00000065,
|
|
||||||
0x703, 0x00000087,
|
|
||||||
0x708, 0x00000021,
|
|
||||||
0x709, 0x00000043,
|
|
||||||
0x70A, 0x00000065,
|
|
||||||
0x70B, 0x00000087,
|
|
||||||
};
|
|
||||||
|
|
||||||
HAL_STATUS
|
|
||||||
ODM_ReadAndConfig_MAC_REG_8188E(
|
|
||||||
IN PDM_ODM_T pDM_Odm
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
|
|
||||||
|
|
||||||
u4Byte hex = 0;
|
|
||||||
u4Byte i = 0;
|
|
||||||
u2Byte count = 0;
|
|
||||||
pu4Byte ptr_array = NULL;
|
|
||||||
u1Byte platform = pDM_Odm->SupportPlatform;
|
|
||||||
u1Byte interfaceValue = pDM_Odm->SupportInterface;
|
|
||||||
u1Byte board = pDM_Odm->BoardType;
|
|
||||||
u4Byte ArrayLen = sizeof(Array_MAC_REG_8188E)/sizeof(u4Byte);
|
|
||||||
pu4Byte Array = Array_MAC_REG_8188E;
|
|
||||||
BOOLEAN biol = FALSE;
|
|
||||||
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
struct xmit_frame *pxmit_frame;
|
|
||||||
u8 bndy_cnt = 1;
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
|
||||||
struct cmd_cmp cmpdata[ArrayLen];
|
|
||||||
u4Byte cmpdata_idx=0;
|
|
||||||
#endif
|
|
||||||
#endif //CONFIG_IOL_IOREG_CFG
|
|
||||||
HAL_STATUS rst =HAL_STATUS_SUCCESS;
|
|
||||||
hex += board;
|
|
||||||
hex += interfaceValue << 8;
|
|
||||||
hex += platform << 16;
|
|
||||||
hex += 0xFF000000;
|
|
||||||
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
biol = rtw_IOL_applied(Adapter);
|
|
||||||
|
|
||||||
if(biol){
|
|
||||||
if((pxmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL)
|
|
||||||
{
|
|
||||||
printk("rtw_IOL_accquire_xmit_frame failed\n");
|
|
||||||
return HAL_STATUS_FAILURE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif //CONFIG_IOL_IOREG_CFG
|
|
||||||
|
|
||||||
for (i = 0; i < ArrayLen; i += 2 )
|
|
||||||
{
|
|
||||||
u4Byte v1 = Array[i];
|
|
||||||
u4Byte v2 = Array[i+1];
|
|
||||||
|
|
||||||
// This (offset, data) pair meets the condition.
|
|
||||||
if ( v1 < 0xCDCDCDCD )
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
|
|
||||||
if(biol){
|
|
||||||
|
|
||||||
if(rtw_IOL_cmd_boundary_handle(pxmit_frame))
|
|
||||||
bndy_cnt++;
|
|
||||||
rtw_IOL_append_WB_cmd(pxmit_frame,(u2Byte)v1, (u1Byte)v2,0xFF);
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
|
||||||
cmpdata[cmpdata_idx].addr = v1;
|
|
||||||
cmpdata[cmpdata_idx].value= v2;
|
|
||||||
cmpdata_idx++;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif //endif CONFIG_IOL_IOREG_CFG
|
|
||||||
{
|
|
||||||
odm_ConfigMAC_8188E(pDM_Odm, v1, (u1Byte)v2);
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ // This line is the start line of branch.
|
|
||||||
if ( !CheckCondition(Array[i], hex) )
|
|
||||||
{ // Discard the following (offset, data) pairs.
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
while ( v2 != 0xDEAD &&
|
|
||||||
v2 != 0xCDEF &&
|
|
||||||
v2 != 0xCDCD && i < ArrayLen -2)
|
|
||||||
{
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
}
|
|
||||||
i -= 2; // prevent from for-loop += 2
|
|
||||||
}
|
|
||||||
else // Configure matched pairs and skip to end of if-else.
|
|
||||||
{
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
while ( v2 != 0xDEAD &&
|
|
||||||
v2 != 0xCDEF &&
|
|
||||||
v2 != 0xCDCD && i < ArrayLen -2)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
if(biol){
|
|
||||||
if(rtw_IOL_cmd_boundary_handle(pxmit_frame))
|
|
||||||
bndy_cnt++;
|
|
||||||
rtw_IOL_append_WB_cmd(pxmit_frame,(u2Byte)v1, (u1Byte)v2,0xFF);
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
|
||||||
cmpdata[cmpdata_idx].addr = v1;
|
|
||||||
cmpdata[cmpdata_idx].value= v2;
|
|
||||||
cmpdata_idx++;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif //#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
{
|
|
||||||
odm_ConfigMAC_8188E(pDM_Odm, v1, (u1Byte)v2);
|
|
||||||
}
|
|
||||||
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (v2 != 0xDEAD && i < ArrayLen -2)
|
|
||||||
{
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
if(biol){
|
|
||||||
//printk("==> %s, pktlen = %d,bndy_cnt = %d\n",__FUNCTION__,pxmit_frame->attrib.pktlen+4+32,bndy_cnt);
|
|
||||||
|
|
||||||
if(rtw_IOL_exec_cmds_sync(pDM_Odm->Adapter, pxmit_frame, 1000, bndy_cnt))
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
|
||||||
printk("~~~ IOL Config MAC Success !!! \n");
|
|
||||||
//compare writed data
|
|
||||||
{
|
|
||||||
u4Byte idx;
|
|
||||||
u1Byte cdata;
|
|
||||||
// HAL_STATUS_FAILURE;
|
|
||||||
printk(" MAC data compare => array_len:%d \n",cmpdata_idx);
|
|
||||||
for(idx=0;idx< cmpdata_idx;idx++)
|
|
||||||
{
|
|
||||||
cdata = ODM_Read1Byte(pDM_Odm, cmpdata[idx].addr);
|
|
||||||
if(cdata != cmpdata[idx].value){
|
|
||||||
printk("### MAC data compared failed !! addr:0x%04x, data:(0x%02x : 0x%02x) ###\n",
|
|
||||||
cmpdata[idx].addr,cmpdata[idx].value,cdata);
|
|
||||||
//rst = HAL_STATUS_FAILURE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//dump data from TX packet buffer
|
|
||||||
//if(rst == HAL_STATUS_FAILURE)
|
|
||||||
{
|
|
||||||
rtw_IOL_cmd_tx_pkt_buf_dump(pDM_Odm->Adapter,pxmit_frame->attrib.pktlen+32);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif //CONFIG_IOL_IOREG_CFG_DBG
|
|
||||||
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
printk("~~~ MAC IOL_exec_cmds Failed !!! \n");
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
|
||||||
{
|
|
||||||
//dump data from TX packet buffer
|
|
||||||
rtw_IOL_cmd_tx_pkt_buf_dump(pDM_Odm->Adapter,pxmit_frame->attrib.pktlen+32);
|
|
||||||
}
|
|
||||||
#endif //CONFIG_IOL_IOREG_CFG_DBG
|
|
||||||
rst = HAL_STATUS_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif //#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
return rst;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* MAC_REG_ICUT.TXT
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
u4Byte Array_MP_8188E_MAC_REG_ICUT[] = {
|
|
||||||
0x026, 0x00000041,
|
|
||||||
0x027, 0x00000035,
|
|
||||||
0x428, 0x0000000A,
|
|
||||||
0x429, 0x00000010,
|
|
||||||
0x430, 0x00000000,
|
|
||||||
0x431, 0x00000001,
|
|
||||||
0x432, 0x00000002,
|
|
||||||
0x433, 0x00000004,
|
|
||||||
0x434, 0x00000005,
|
|
||||||
0x435, 0x00000006,
|
|
||||||
0x436, 0x00000007,
|
|
||||||
0x437, 0x00000008,
|
|
||||||
0x438, 0x00000000,
|
|
||||||
0x439, 0x00000000,
|
|
||||||
0x43A, 0x00000001,
|
|
||||||
0x43B, 0x00000002,
|
|
||||||
0x43C, 0x00000004,
|
|
||||||
0x43D, 0x00000005,
|
|
||||||
0x43E, 0x00000006,
|
|
||||||
0x43F, 0x00000007,
|
|
||||||
0x440, 0x0000005D,
|
|
||||||
0x441, 0x00000001,
|
|
||||||
0x442, 0x00000000,
|
|
||||||
0x444, 0x00000015,
|
|
||||||
0x445, 0x000000F0,
|
|
||||||
0x446, 0x0000000F,
|
|
||||||
0x447, 0x00000000,
|
|
||||||
0x458, 0x00000041,
|
|
||||||
0x459, 0x000000A8,
|
|
||||||
0x45A, 0x00000072,
|
|
||||||
0x45B, 0x000000B9,
|
|
||||||
0x460, 0x00000066,
|
|
||||||
0x461, 0x00000066,
|
|
||||||
0x480, 0x00000008,
|
|
||||||
0x4C8, 0x000000FF,
|
|
||||||
0x4C9, 0x00000008,
|
|
||||||
0x4CC, 0x000000FF,
|
|
||||||
0x4CD, 0x000000FF,
|
|
||||||
0x4CE, 0x00000001,
|
|
||||||
0x4D3, 0x00000001,
|
|
||||||
0x500, 0x00000026,
|
|
||||||
0x501, 0x000000A2,
|
|
||||||
0x502, 0x0000002F,
|
|
||||||
0x503, 0x00000000,
|
|
||||||
0x504, 0x00000028,
|
|
||||||
0x505, 0x000000A3,
|
|
||||||
0x506, 0x0000005E,
|
|
||||||
0x507, 0x00000000,
|
|
||||||
0x508, 0x0000002B,
|
|
||||||
0x509, 0x000000A4,
|
|
||||||
0x50A, 0x0000005E,
|
|
||||||
0x50B, 0x00000000,
|
|
||||||
0x50C, 0x0000004F,
|
|
||||||
0x50D, 0x000000A4,
|
|
||||||
0x50E, 0x00000000,
|
|
||||||
0x50F, 0x00000000,
|
|
||||||
0x512, 0x0000001C,
|
|
||||||
0x514, 0x0000000A,
|
|
||||||
0x516, 0x0000000A,
|
|
||||||
0x525, 0x0000004F,
|
|
||||||
0x550, 0x00000010,
|
|
||||||
0x551, 0x00000010,
|
|
||||||
0x559, 0x00000002,
|
|
||||||
0x55D, 0x000000FF,
|
|
||||||
0x605, 0x00000030,
|
|
||||||
0x608, 0x0000000E,
|
|
||||||
0x609, 0x0000002A,
|
|
||||||
0x620, 0x000000FF,
|
|
||||||
0x621, 0x000000FF,
|
|
||||||
0x622, 0x000000FF,
|
|
||||||
0x623, 0x000000FF,
|
|
||||||
0x624, 0x000000FF,
|
|
||||||
0x625, 0x000000FF,
|
|
||||||
0x626, 0x000000FF,
|
|
||||||
0x627, 0x000000FF,
|
|
||||||
0x652, 0x00000020,
|
|
||||||
0x63C, 0x0000000A,
|
|
||||||
0x63D, 0x0000000A,
|
|
||||||
0x63E, 0x0000000E,
|
|
||||||
0x63F, 0x0000000E,
|
|
||||||
0x640, 0x00000040,
|
|
||||||
0x66E, 0x00000005,
|
|
||||||
0x700, 0x00000021,
|
|
||||||
0x701, 0x00000043,
|
|
||||||
0x702, 0x00000065,
|
|
||||||
0x703, 0x00000087,
|
|
||||||
0x708, 0x00000021,
|
|
||||||
0x709, 0x00000043,
|
|
||||||
0x70A, 0x00000065,
|
|
||||||
0x70B, 0x00000087,
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
|
||||||
ODM_ReadAndConfig_MAC_REG_ICUT_8188E(
|
|
||||||
IN PDM_ODM_T pDM_Odm
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
|
|
||||||
|
|
||||||
u4Byte hex = 0;
|
|
||||||
u4Byte i = 0;
|
|
||||||
u2Byte count = 0;
|
|
||||||
pu4Byte ptr_array = NULL;
|
|
||||||
u1Byte platform = pDM_Odm->SupportPlatform;
|
|
||||||
u1Byte _interface = pDM_Odm->SupportInterface;
|
|
||||||
u1Byte board = pDM_Odm->BoardType;
|
|
||||||
u4Byte ArrayLen = sizeof(Array_MP_8188E_MAC_REG_ICUT)/sizeof(u4Byte);
|
|
||||||
pu4Byte Array = Array_MP_8188E_MAC_REG_ICUT;
|
|
||||||
|
|
||||||
|
|
||||||
hex += board;
|
|
||||||
hex += _interface << 8;
|
|
||||||
hex += platform << 16;
|
|
||||||
hex += 0xFF000000;
|
|
||||||
ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ReadAndConfig_MP_8188E_MAC_REG_ICUT, hex = 0x%X\n", hex));
|
|
||||||
|
|
||||||
for (i = 0; i < ArrayLen; i += 2 )
|
|
||||||
{
|
|
||||||
u4Byte v1 = Array[i];
|
|
||||||
u4Byte v2 = Array[i+1];
|
|
||||||
|
|
||||||
// This (offset, data) pair meets the condition.
|
|
||||||
if ( v1 < 0xCDCDCDCD )
|
|
||||||
{
|
|
||||||
odm_ConfigMAC_8188E(pDM_Odm, v1, (u1Byte)v2);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ // This line is the start line of branch.
|
|
||||||
if ( !CheckCondition(Array[i], hex) )
|
|
||||||
{ // Discard the following (offset, data) pairs.
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
while (v2 != 0xDEAD &&
|
|
||||||
v2 != 0xCDEF &&
|
|
||||||
v2 != 0xCDCD && i < ArrayLen -2)
|
|
||||||
{
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
}
|
|
||||||
i -= 2; // prevent from for-loop += 2
|
|
||||||
}
|
|
||||||
else // Configure matched pairs and skip to end of if-else.
|
|
||||||
{
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
while (v2 != 0xDEAD &&
|
|
||||||
v2 != 0xCDEF &&
|
|
||||||
v2 != 0xCDCD && i < ArrayLen -2)
|
|
||||||
{
|
|
||||||
odm_ConfigMAC_8188E(pDM_Odm, v1, (u1Byte)v2);
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (v2 != 0xDEAD && i < ArrayLen -2)
|
|
||||||
{
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // end of HWIMG_SUPPORT
|
|
||||||
|
|
|
@ -1,569 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*
|
|
||||||
*
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
#include "../odm_precomp.h"
|
|
||||||
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
#include <rtw_iol.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (RTL8188E_SUPPORT == 1)
|
|
||||||
static BOOLEAN
|
|
||||||
CheckCondition(
|
|
||||||
const u4Byte Condition,
|
|
||||||
const u4Byte Hex
|
|
||||||
)
|
|
||||||
{
|
|
||||||
u4Byte _board = (Hex & 0x000000FF);
|
|
||||||
u4Byte _interface = (Hex & 0x0000FF00) >> 8;
|
|
||||||
u4Byte _platform = (Hex & 0x00FF0000) >> 16;
|
|
||||||
u4Byte cond = Condition;
|
|
||||||
|
|
||||||
if ( Condition == 0xCDCDCDCD )
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
cond = Condition & 0x000000FF;
|
|
||||||
if ( (_board != cond) && (cond != 0xFF) )
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
cond = Condition & 0x0000FF00;
|
|
||||||
cond = cond >> 8;
|
|
||||||
if ( ((_interface & cond) == 0) && (cond != 0x07) )
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
cond = Condition & 0x00FF0000;
|
|
||||||
cond = cond >> 16;
|
|
||||||
if ( ((_platform & cond) == 0) && (cond != 0x0F) )
|
|
||||||
return FALSE;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* RadioA_1T.TXT
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
u4Byte Array_RadioA_1T_8188E[] = {
|
|
||||||
0x000, 0x00030000,
|
|
||||||
0x008, 0x00084000,
|
|
||||||
0x018, 0x00000407,
|
|
||||||
0x019, 0x00000012,
|
|
||||||
0x01E, 0x00080009,
|
|
||||||
0x01F, 0x00000880,
|
|
||||||
0x02F, 0x0001A060,
|
|
||||||
0x03F, 0x00000000,
|
|
||||||
0x042, 0x000060C0,
|
|
||||||
0x057, 0x000D0000,
|
|
||||||
0x058, 0x000BE180,
|
|
||||||
0x067, 0x00001552,
|
|
||||||
0x083, 0x00000000,
|
|
||||||
0x0B0, 0x000FF8FC,
|
|
||||||
0x0B1, 0x00054400,
|
|
||||||
0x0B2, 0x000CCC19,
|
|
||||||
0x0B4, 0x00043003,
|
|
||||||
0x0B6, 0x0004953E,
|
|
||||||
0x0B7, 0x0001C718,
|
|
||||||
0x0B8, 0x000060FF,
|
|
||||||
0x0B9, 0x00080001,
|
|
||||||
0x0BA, 0x00040000,
|
|
||||||
0x0BB, 0x00000400,
|
|
||||||
0x0BF, 0x000C0000,
|
|
||||||
0x0C2, 0x00002400,
|
|
||||||
0x0C3, 0x00000009,
|
|
||||||
0x0C4, 0x00040C91,
|
|
||||||
0x0C5, 0x00099999,
|
|
||||||
0x0C6, 0x000000A3,
|
|
||||||
0x0C7, 0x00088820,
|
|
||||||
0x0C8, 0x00076C06,
|
|
||||||
0x0C9, 0x00000000,
|
|
||||||
0x0CA, 0x00080000,
|
|
||||||
0x0DF, 0x00000180,
|
|
||||||
0x0EF, 0x000001A0,
|
|
||||||
0x051, 0x0006B27D,
|
|
||||||
0xFF0F0400, 0xABCD,
|
|
||||||
0x052, 0x0007E4DD,
|
|
||||||
0xCDCDCDCD, 0xCDCD,
|
|
||||||
0x052, 0x0007E49D,
|
|
||||||
0xFF0F0400, 0xDEAD,
|
|
||||||
0x053, 0x00000073,
|
|
||||||
0x056, 0x00051FF3,
|
|
||||||
0x035, 0x00000086,
|
|
||||||
0x035, 0x00000186,
|
|
||||||
0x035, 0x00000286,
|
|
||||||
0x036, 0x00001C25,
|
|
||||||
0x036, 0x00009C25,
|
|
||||||
0x036, 0x00011C25,
|
|
||||||
0x036, 0x00019C25,
|
|
||||||
0x0B6, 0x00048538,
|
|
||||||
0x018, 0x00000C07,
|
|
||||||
0x05A, 0x0004BD00,
|
|
||||||
0x019, 0x000739D0,
|
|
||||||
0xFF0F0718, 0xABCD,
|
|
||||||
0x034, 0x0000A093,
|
|
||||||
0x034, 0x0000908F,
|
|
||||||
0x034, 0x0000808C,
|
|
||||||
0x034, 0x0000704F,
|
|
||||||
0x034, 0x0000604C,
|
|
||||||
0x034, 0x00005049,
|
|
||||||
0x034, 0x0000400C,
|
|
||||||
0x034, 0x00003009,
|
|
||||||
0x034, 0x00002006,
|
|
||||||
0x034, 0x00001003,
|
|
||||||
0x034, 0x00000000,
|
|
||||||
0xCDCDCDCD, 0xCDCD,
|
|
||||||
0x034, 0x0000ADF3,
|
|
||||||
0x034, 0x00009DF0,
|
|
||||||
0x034, 0x00008DED,
|
|
||||||
0x034, 0x00007DEA,
|
|
||||||
0x034, 0x00006DE7,
|
|
||||||
0x034, 0x000054EE,
|
|
||||||
0x034, 0x000044EB,
|
|
||||||
0x034, 0x000034E8,
|
|
||||||
0x034, 0x0000246B,
|
|
||||||
0x034, 0x00001468,
|
|
||||||
0x034, 0x0000006D,
|
|
||||||
0xFF0F0718, 0xDEAD,
|
|
||||||
0x000, 0x00030159,
|
|
||||||
0x084, 0x00068200,
|
|
||||||
0x086, 0x000000CE,
|
|
||||||
0x087, 0x00048A00,
|
|
||||||
0x08E, 0x00065540,
|
|
||||||
0x08F, 0x00088000,
|
|
||||||
0x0EF, 0x000020A0,
|
|
||||||
0x03B, 0x000F02B0,
|
|
||||||
0x03B, 0x000EF7B0,
|
|
||||||
0x03B, 0x000D4FB0,
|
|
||||||
0x03B, 0x000CF060,
|
|
||||||
0x03B, 0x000B0090,
|
|
||||||
0x03B, 0x000A0080,
|
|
||||||
0x03B, 0x00090080,
|
|
||||||
0x03B, 0x0008F780,
|
|
||||||
0x03B, 0x000722B0,
|
|
||||||
0x03B, 0x0006F7B0,
|
|
||||||
0x03B, 0x00054FB0,
|
|
||||||
0x03B, 0x0004F060,
|
|
||||||
0x03B, 0x00030090,
|
|
||||||
0x03B, 0x00020080,
|
|
||||||
0x03B, 0x00010080,
|
|
||||||
0x03B, 0x0000F780,
|
|
||||||
0x0EF, 0x000000A0,
|
|
||||||
0x000, 0x00010159,
|
|
||||||
0x018, 0x0000F407,
|
|
||||||
0xFFE, 0x00000000,
|
|
||||||
0xFFE, 0x00000000,
|
|
||||||
0x01F, 0x00080003,
|
|
||||||
0xFFE, 0x00000000,
|
|
||||||
0xFFE, 0x00000000,
|
|
||||||
0x01E, 0x00000001,
|
|
||||||
0x01F, 0x00080000,
|
|
||||||
0x000, 0x00033E60,
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
HAL_STATUS
|
|
||||||
ODM_ReadAndConfig_RadioA_1T_8188E(
|
|
||||||
IN PDM_ODM_T pDM_Odm
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
|
|
||||||
|
|
||||||
u4Byte hex = 0;
|
|
||||||
u4Byte i = 0;
|
|
||||||
u2Byte count = 0;
|
|
||||||
pu4Byte ptr_array = NULL;
|
|
||||||
u1Byte platform = pDM_Odm->SupportPlatform;
|
|
||||||
u1Byte interfaceValue = pDM_Odm->SupportInterface;
|
|
||||||
u1Byte board = pDM_Odm->BoardType;
|
|
||||||
u4Byte ArrayLen = sizeof(Array_RadioA_1T_8188E)/sizeof(u4Byte);
|
|
||||||
pu4Byte Array = Array_RadioA_1T_8188E;
|
|
||||||
BOOLEAN biol = FALSE;
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
PADAPTER Adapter = pDM_Odm->Adapter;
|
|
||||||
struct xmit_frame *pxmit_frame;
|
|
||||||
u8 bndy_cnt = 1;
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
|
||||||
struct cmd_cmp cmpdata[ArrayLen];
|
|
||||||
u4Byte cmpdata_idx=0;
|
|
||||||
#endif
|
|
||||||
#endif//#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
HAL_STATUS rst =HAL_STATUS_SUCCESS;
|
|
||||||
|
|
||||||
hex += board;
|
|
||||||
hex += interfaceValue << 8;
|
|
||||||
hex += platform << 16;
|
|
||||||
hex += 0xFF000000;
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
biol = rtw_IOL_applied(Adapter);
|
|
||||||
|
|
||||||
if(biol){
|
|
||||||
if((pxmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL)
|
|
||||||
{
|
|
||||||
printk("rtw_IOL_accquire_xmit_frame failed\n");
|
|
||||||
return HAL_STATUS_FAILURE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif//#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
|
|
||||||
for (i = 0; i < ArrayLen; i += 2 )
|
|
||||||
{
|
|
||||||
u4Byte v1 = Array[i];
|
|
||||||
u4Byte v2 = Array[i+1];
|
|
||||||
|
|
||||||
// This (offset, data) pair meets the condition.
|
|
||||||
if ( v1 < 0xCDCDCDCD )
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
if(biol){
|
|
||||||
if(rtw_IOL_cmd_boundary_handle(pxmit_frame))
|
|
||||||
bndy_cnt++;
|
|
||||||
|
|
||||||
if(v1 == 0xffe)
|
|
||||||
{
|
|
||||||
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame,50);
|
|
||||||
}
|
|
||||||
else if (v1 == 0xfd){
|
|
||||||
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame,5);
|
|
||||||
}
|
|
||||||
else if (v1 == 0xfc){
|
|
||||||
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame,1);
|
|
||||||
}
|
|
||||||
else if (v1 == 0xfb){
|
|
||||||
rtw_IOL_append_DELAY_US_cmd(pxmit_frame,50);
|
|
||||||
}
|
|
||||||
else if (v1 == 0xfa){
|
|
||||||
rtw_IOL_append_DELAY_US_cmd(pxmit_frame,5);
|
|
||||||
}
|
|
||||||
else if (v1 == 0xf9){
|
|
||||||
rtw_IOL_append_DELAY_US_cmd(pxmit_frame,1);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
rtw_IOL_append_WRF_cmd(pxmit_frame, ODM_RF_PATH_A,(u2Byte)v1, v2,bRFRegOffsetMask) ;
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
|
||||||
cmpdata[cmpdata_idx].addr = v1;
|
|
||||||
cmpdata[cmpdata_idx].value= v2;
|
|
||||||
cmpdata_idx++;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif //#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
{
|
|
||||||
odm_ConfigRF_RadioA_8188E(pDM_Odm, v1, v2);
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ // This line is the start line of branch.
|
|
||||||
if ( !CheckCondition(Array[i], hex) )
|
|
||||||
{ // Discard the following (offset, data) pairs.
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
while (v2 != 0xDEAD &&
|
|
||||||
v2 != 0xCDEF &&
|
|
||||||
v2 != 0xCDCD && i < ArrayLen -2)
|
|
||||||
{
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
}
|
|
||||||
i -= 2; // prevent from for-loop += 2
|
|
||||||
}
|
|
||||||
else // Configure matched pairs and skip to end of if-else.
|
|
||||||
{
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
while (v2 != 0xDEAD &&
|
|
||||||
v2 != 0xCDEF &&
|
|
||||||
v2 != 0xCDCD && i < ArrayLen -2)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
if(biol){
|
|
||||||
if(rtw_IOL_cmd_boundary_handle(pxmit_frame))
|
|
||||||
bndy_cnt++;
|
|
||||||
|
|
||||||
if(v1 == 0xffe)
|
|
||||||
{
|
|
||||||
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame,50);
|
|
||||||
}
|
|
||||||
else if (v1 == 0xfd){
|
|
||||||
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame,5);
|
|
||||||
}
|
|
||||||
else if (v1 == 0xfc){
|
|
||||||
rtw_IOL_append_DELAY_MS_cmd(pxmit_frame,1);
|
|
||||||
}
|
|
||||||
else if (v1 == 0xfb){
|
|
||||||
rtw_IOL_append_DELAY_US_cmd(pxmit_frame,50);
|
|
||||||
}
|
|
||||||
else if (v1 == 0xfa){
|
|
||||||
rtw_IOL_append_DELAY_US_cmd(pxmit_frame,5);
|
|
||||||
}
|
|
||||||
else if (v1 == 0xf9){
|
|
||||||
rtw_IOL_append_DELAY_US_cmd(pxmit_frame,1);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
rtw_IOL_append_WRF_cmd(pxmit_frame, ODM_RF_PATH_A,(u2Byte)v1, v2,bRFRegOffsetMask) ;
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
|
||||||
cmpdata[cmpdata_idx].addr = v1;
|
|
||||||
cmpdata[cmpdata_idx].value= v2;
|
|
||||||
cmpdata_idx++;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif //#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
{
|
|
||||||
odm_ConfigRF_RadioA_8188E(pDM_Odm, v1, v2);
|
|
||||||
}
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (v2 != 0xDEAD && i < ArrayLen -2)
|
|
||||||
{
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
if(biol){
|
|
||||||
//printk("==> %s, pktlen = %d,bndy_cnt = %d\n",__FUNCTION__,pxmit_frame->attrib.pktlen+4+32,bndy_cnt);
|
|
||||||
if(rtw_IOL_exec_cmds_sync(pDM_Odm->Adapter, pxmit_frame, 1000, bndy_cnt))
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
|
||||||
printk("~~~ %s Success !!! \n",__FUNCTION__);
|
|
||||||
{
|
|
||||||
u4Byte idx;
|
|
||||||
u4Byte cdata;
|
|
||||||
printk(" %s data compare => array_len:%d \n",__FUNCTION__,cmpdata_idx);
|
|
||||||
printk("### %s data compared !!###\n",__FUNCTION__);
|
|
||||||
for(idx=0;idx< cmpdata_idx;idx++)
|
|
||||||
{
|
|
||||||
cdata = ODM_GetRFReg(pDM_Odm, ODM_RF_PATH_A,cmpdata[idx].addr,bRFRegOffsetMask);
|
|
||||||
if(cdata != cmpdata[idx].value){
|
|
||||||
printk("addr:0x%04x, data:(0x%02x : 0x%02x) \n",
|
|
||||||
cmpdata[idx].addr,cmpdata[idx].value,cdata);
|
|
||||||
rst = HAL_STATUS_FAILURE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
printk("### %s data compared !!###\n",__FUNCTION__);
|
|
||||||
//if(rst == HAL_STATUS_FAILURE)
|
|
||||||
{//dump data from TX packet buffer
|
|
||||||
rtw_IOL_cmd_tx_pkt_buf_dump(pDM_Odm->Adapter,pxmit_frame->attrib.pktlen+32);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif //CONFIG_IOL_IOREG_CFG_DBG
|
|
||||||
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
rst = HAL_STATUS_FAILURE;
|
|
||||||
printk("~~~ IOL Config %s Failed !!! \n",__FUNCTION__);
|
|
||||||
#ifdef CONFIG_IOL_IOREG_CFG_DBG
|
|
||||||
{
|
|
||||||
//dump data from TX packet buffer
|
|
||||||
rtw_IOL_cmd_tx_pkt_buf_dump(pDM_Odm->Adapter,pxmit_frame->attrib.pktlen+32);
|
|
||||||
}
|
|
||||||
#endif //CONFIG_IOL_IOREG_CFG_DBG
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif //#ifdef CONFIG_IOL_IOREG_CFG
|
|
||||||
return rst;
|
|
||||||
}
|
|
||||||
/******************************************************************************
|
|
||||||
* RadioA_1T_ICUT.TXT
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
u4Byte Array_MP_8188E_RadioA_1T_ICUT[] = {
|
|
||||||
0x000, 0x00030000,
|
|
||||||
0x008, 0x00084000,
|
|
||||||
0x018, 0x00000407,
|
|
||||||
0x019, 0x00000012,
|
|
||||||
0x01E, 0x00080009,
|
|
||||||
0x01F, 0x00000880,
|
|
||||||
0x02F, 0x0001A060,
|
|
||||||
0x03F, 0x00000000,
|
|
||||||
0x042, 0x000060C0,
|
|
||||||
0x057, 0x000D0000,
|
|
||||||
0x058, 0x000BE180,
|
|
||||||
0x067, 0x00001552,
|
|
||||||
0x083, 0x00000000,
|
|
||||||
0x0B0, 0x000FF8FC,
|
|
||||||
0x0B1, 0x00054400,
|
|
||||||
0x0B2, 0x000CCC19,
|
|
||||||
0x0B4, 0x00043003,
|
|
||||||
0x0B6, 0x0004953E,
|
|
||||||
0x0B7, 0x0001C718,
|
|
||||||
0x0B8, 0x000060FF,
|
|
||||||
0x0B9, 0x00080001,
|
|
||||||
0x0BA, 0x00040000,
|
|
||||||
0x0BB, 0x00000400,
|
|
||||||
0x0BF, 0x000C0000,
|
|
||||||
0x0C2, 0x00002400,
|
|
||||||
0x0C3, 0x00000009,
|
|
||||||
0x0C4, 0x00040C91,
|
|
||||||
0x0C5, 0x00099999,
|
|
||||||
0x0C6, 0x000000A3,
|
|
||||||
0x0C7, 0x00088820,
|
|
||||||
0x0C8, 0x00076C06,
|
|
||||||
0x0C9, 0x00000000,
|
|
||||||
0x0CA, 0x00080000,
|
|
||||||
0x0DF, 0x00000180,
|
|
||||||
0x0EF, 0x000001A0,
|
|
||||||
0x051, 0x0006B27D,
|
|
||||||
0xFF0F0400, 0xABCD,
|
|
||||||
0x052, 0x0007E4DD,
|
|
||||||
0xCDCDCDCD, 0xCDCD,
|
|
||||||
0x052, 0x0007E49D,
|
|
||||||
0xFF0F0400, 0xDEAD,
|
|
||||||
0x053, 0x00000073,
|
|
||||||
0x056, 0x00051FF3,
|
|
||||||
0x035, 0x00000086,
|
|
||||||
0x035, 0x00000186,
|
|
||||||
0x035, 0x00000286,
|
|
||||||
0x036, 0x00001C25,
|
|
||||||
0x036, 0x00009C25,
|
|
||||||
0x036, 0x00011C25,
|
|
||||||
0x036, 0x00019C25,
|
|
||||||
0x0B6, 0x00048538,
|
|
||||||
0x018, 0x00000C07,
|
|
||||||
0x05A, 0x0004BD00,
|
|
||||||
0x019, 0x000739D0,
|
|
||||||
0x034, 0x0000ADF3,
|
|
||||||
0x034, 0x00009DF0,
|
|
||||||
0x034, 0x00008DED,
|
|
||||||
0x034, 0x00007DEA,
|
|
||||||
0x034, 0x00006DE7,
|
|
||||||
0x034, 0x000054EE,
|
|
||||||
0x034, 0x000044EB,
|
|
||||||
0x034, 0x000034E8,
|
|
||||||
0x034, 0x0000246B,
|
|
||||||
0x034, 0x00001468,
|
|
||||||
0x034, 0x0000006D,
|
|
||||||
0x000, 0x00030159,
|
|
||||||
0x084, 0x00068200,
|
|
||||||
0x086, 0x000000CE,
|
|
||||||
0x087, 0x00048A00,
|
|
||||||
0x08E, 0x00065540,
|
|
||||||
0x08F, 0x00088000,
|
|
||||||
0x0EF, 0x000020A0,
|
|
||||||
0x03B, 0x000F02B0,
|
|
||||||
0x03B, 0x000EF7B0,
|
|
||||||
0x03B, 0x000D4FB0,
|
|
||||||
0x03B, 0x000CF060,
|
|
||||||
0x03B, 0x000B0090,
|
|
||||||
0x03B, 0x000A0080,
|
|
||||||
0x03B, 0x00090080,
|
|
||||||
0x03B, 0x0008F780,
|
|
||||||
0x03B, 0x000722B0,
|
|
||||||
0x03B, 0x0006F7B0,
|
|
||||||
0x03B, 0x00054FB0,
|
|
||||||
0x03B, 0x0004F060,
|
|
||||||
0x03B, 0x00030090,
|
|
||||||
0x03B, 0x00020080,
|
|
||||||
0x03B, 0x00010080,
|
|
||||||
0x03B, 0x0000F780,
|
|
||||||
0x0EF, 0x000000A0,
|
|
||||||
0x000, 0x00010159,
|
|
||||||
0x018, 0x0000F407,
|
|
||||||
0xFFE, 0x00000000,
|
|
||||||
0xFFE, 0x00000000,
|
|
||||||
0x01F, 0x00080003,
|
|
||||||
0xFFE, 0x00000000,
|
|
||||||
0xFFE, 0x00000000,
|
|
||||||
0x01E, 0x00000001,
|
|
||||||
0x01F, 0x00080000,
|
|
||||||
0x000, 0x00033E60,
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
|
||||||
ODM_ReadAndConfig_RadioA_1T_ICUT_8188E(
|
|
||||||
IN PDM_ODM_T pDM_Odm
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
|
|
||||||
|
|
||||||
u4Byte hex = 0;
|
|
||||||
u4Byte i = 0;
|
|
||||||
u2Byte count = 0;
|
|
||||||
pu4Byte ptr_array = NULL;
|
|
||||||
u1Byte platform = pDM_Odm->SupportPlatform;
|
|
||||||
u1Byte _interface = pDM_Odm->SupportInterface;
|
|
||||||
u1Byte board = pDM_Odm->BoardType;
|
|
||||||
u4Byte ArrayLen = sizeof(Array_MP_8188E_RadioA_1T_ICUT)/sizeof(u4Byte);
|
|
||||||
pu4Byte Array = Array_MP_8188E_RadioA_1T_ICUT;
|
|
||||||
|
|
||||||
|
|
||||||
hex += board;
|
|
||||||
hex += _interface << 8;
|
|
||||||
hex += platform << 16;
|
|
||||||
hex += 0xFF000000;
|
|
||||||
ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ReadAndConfig_MP_8188E_RadioA_1T_ICUT, hex = 0x%X\n", hex));
|
|
||||||
|
|
||||||
for (i = 0; i < ArrayLen; i += 2 )
|
|
||||||
{
|
|
||||||
u4Byte v1 = Array[i];
|
|
||||||
u4Byte v2 = Array[i+1];
|
|
||||||
|
|
||||||
// This (offset, data) pair meets the condition.
|
|
||||||
if ( v1 < 0xCDCDCDCD )
|
|
||||||
{
|
|
||||||
odm_ConfigRF_RadioA_8188E(pDM_Odm, v1, v2);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ // This line is the start line of branch.
|
|
||||||
if ( !CheckCondition(Array[i], hex) )
|
|
||||||
{ // Discard the following (offset, data) pairs.
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
while (v2 != 0xDEAD &&
|
|
||||||
v2 != 0xCDEF &&
|
|
||||||
v2 != 0xCDCD && i < ArrayLen -2)
|
|
||||||
{
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
}
|
|
||||||
i -= 2; // prevent from for-loop += 2
|
|
||||||
}
|
|
||||||
else // Configure matched pairs and skip to end of if-else.
|
|
||||||
{
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
while (v2 != 0xDEAD &&
|
|
||||||
v2 != 0xCDEF &&
|
|
||||||
v2 != 0xCDCD && i < ArrayLen -2)
|
|
||||||
{
|
|
||||||
odm_ConfigRF_RadioA_8188E(pDM_Odm, v1, v2);
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (v2 != 0xDEAD && i < ArrayLen -2)
|
|
||||||
{
|
|
||||||
READ_NEXT_PAIR(v1, v2, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif // end of HWIMG_SUPPORT
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,209 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*
|
|
||||||
*
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
#include "../odm_precomp.h"
|
|
||||||
|
|
||||||
#if (RTL8188E_SUPPORT == 1)
|
|
||||||
|
|
||||||
void
|
|
||||||
odm_ConfigRFReg_8188E(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte Addr,
|
|
||||||
IN u4Byte Data,
|
|
||||||
IN ODM_RF_RADIO_PATH_E RF_PATH,
|
|
||||||
IN u4Byte RegAddr
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if(Addr == 0xffe)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_LONG_DELAY_ISSUE
|
|
||||||
ODM_sleep_ms(50);
|
|
||||||
#else
|
|
||||||
ODM_delay_ms(50);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else if (Addr == 0xfd)
|
|
||||||
{
|
|
||||||
ODM_delay_ms(5);
|
|
||||||
}
|
|
||||||
else if (Addr == 0xfc)
|
|
||||||
{
|
|
||||||
ODM_delay_ms(1);
|
|
||||||
}
|
|
||||||
else if (Addr == 0xfb)
|
|
||||||
{
|
|
||||||
ODM_delay_us(50);
|
|
||||||
}
|
|
||||||
else if (Addr == 0xfa)
|
|
||||||
{
|
|
||||||
ODM_delay_us(5);
|
|
||||||
}
|
|
||||||
else if (Addr == 0xf9)
|
|
||||||
{
|
|
||||||
ODM_delay_us(1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ODM_SetRFReg(pDM_Odm, RF_PATH, RegAddr, bRFRegOffsetMask, Data);
|
|
||||||
// Add 1us delay between BB/RF register setting.
|
|
||||||
ODM_delay_us(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
odm_ConfigRF_RadioA_8188E(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte Addr,
|
|
||||||
IN u4Byte Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
u4Byte content = 0x1000; // RF_Content: radioa_txt
|
|
||||||
u4Byte maskforPhySet= (u4Byte)(content&0xE000);
|
|
||||||
|
|
||||||
odm_ConfigRFReg_8188E(pDM_Odm, Addr, Data, ODM_RF_PATH_A, Addr|maskforPhySet);
|
|
||||||
|
|
||||||
ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigRFWithHeaderFile: [RadioA] %08X %08X\n", Addr, Data));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
odm_ConfigRF_RadioB_8188E(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte Addr,
|
|
||||||
IN u4Byte Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
u4Byte content = 0x1001; // RF_Content: radiob_txt
|
|
||||||
u4Byte maskforPhySet= (u4Byte)(content&0xE000);
|
|
||||||
|
|
||||||
odm_ConfigRFReg_8188E(pDM_Odm, Addr, Data, ODM_RF_PATH_B, Addr|maskforPhySet);
|
|
||||||
|
|
||||||
ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigRFWithHeaderFile: [RadioB] %08X %08X\n", Addr, Data));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
odm_ConfigMAC_8188E(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte Addr,
|
|
||||||
IN u1Byte Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ODM_Write1Byte(pDM_Odm, Addr, Data);
|
|
||||||
ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigMACWithHeaderFile: [MAC_REG] %08X %08X\n", Addr, Data));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
odm_ConfigBB_AGC_8188E(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte Addr,
|
|
||||||
IN u4Byte Bitmask,
|
|
||||||
IN u4Byte Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
ODM_SetBBReg(pDM_Odm, Addr, Bitmask, Data);
|
|
||||||
// Add 1us delay between BB/RF register setting.
|
|
||||||
ODM_delay_us(1);
|
|
||||||
|
|
||||||
ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigBBWithHeaderFile: [AGC_TAB] %08X %08X\n", Addr, Data));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
odm_ConfigBB_PHY_REG_PG_8188E(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte Addr,
|
|
||||||
IN u4Byte Bitmask,
|
|
||||||
IN u4Byte Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (Addr == 0xfe){
|
|
||||||
#ifdef CONFIG_LONG_DELAY_ISSUE
|
|
||||||
ODM_sleep_ms(50);
|
|
||||||
#else
|
|
||||||
ODM_delay_ms(50);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else if (Addr == 0xfd){
|
|
||||||
ODM_delay_ms(5);
|
|
||||||
}
|
|
||||||
else if (Addr == 0xfc){
|
|
||||||
ODM_delay_ms(1);
|
|
||||||
}
|
|
||||||
else if (Addr == 0xfb){
|
|
||||||
ODM_delay_us(50);
|
|
||||||
}
|
|
||||||
else if (Addr == 0xfa){
|
|
||||||
ODM_delay_us(5);
|
|
||||||
}
|
|
||||||
else if (Addr == 0xf9){
|
|
||||||
ODM_delay_us(1);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, ("===> @@@@@@@ ODM_ConfigBBWithHeaderFile: [PHY_REG] %08X %08X %08X\n", Addr, Bitmask, Data));
|
|
||||||
|
|
||||||
#if !(DM_ODM_SUPPORT_TYPE&ODM_AP)
|
|
||||||
storePwrIndexDiffRateOffset(pDM_Odm->Adapter, Addr, Bitmask, Data);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
odm_ConfigBB_PHY_8188E(
|
|
||||||
IN PDM_ODM_T pDM_Odm,
|
|
||||||
IN u4Byte Addr,
|
|
||||||
IN u4Byte Bitmask,
|
|
||||||
IN u4Byte Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (Addr == 0xfe){
|
|
||||||
#ifdef CONFIG_LONG_DELAY_ISSUE
|
|
||||||
ODM_sleep_ms(50);
|
|
||||||
#else
|
|
||||||
ODM_delay_ms(50);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else if (Addr == 0xfd){
|
|
||||||
ODM_delay_ms(5);
|
|
||||||
}
|
|
||||||
else if (Addr == 0xfc){
|
|
||||||
ODM_delay_ms(1);
|
|
||||||
}
|
|
||||||
else if (Addr == 0xfb){
|
|
||||||
ODM_delay_us(50);
|
|
||||||
}
|
|
||||||
else if (Addr == 0xfa){
|
|
||||||
ODM_delay_us(5);
|
|
||||||
}
|
|
||||||
else if (Addr == 0xf9){
|
|
||||||
ODM_delay_us(1);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if (Addr == 0xa24)
|
|
||||||
pDM_Odm->RFCalibrateInfo.RegA24 = Data;
|
|
||||||
ODM_SetBBReg(pDM_Odm, Addr, Bitmask, Data);
|
|
||||||
|
|
||||||
// Add 1us delay between BB/RF register setting.
|
|
||||||
ODM_delay_us(1);
|
|
||||||
ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigBBWithHeaderFile: [PHY_REG] %08X %08X\n", Addr, Data));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
13209
hal/odm.c
Normal file → Executable file
13209
hal/odm.c
Normal file → Executable file
File diff suppressed because it is too large
Load diff
1799
hal/odm_HWConfig.c
Normal file → Executable file
1799
hal/odm_HWConfig.c
Normal file → Executable file
File diff suppressed because it is too large
Load diff
1689
hal/odm_RTL8188E.c
Normal file → Executable file
1689
hal/odm_RTL8188E.c
Normal file → Executable file
File diff suppressed because it is too large
Load diff
205
hal/odm_RegConfig8188E.c
Normal file → Executable file
205
hal/odm_RegConfig8188E.c
Normal file → Executable file
|
@ -1,7 +1,7 @@
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* 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
|
* under the terms of version 2 of the GNU General Public License as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
|
@ -20,111 +20,190 @@
|
||||||
|
|
||||||
#include "odm_precomp.h"
|
#include "odm_precomp.h"
|
||||||
|
|
||||||
void odm_ConfigRFReg_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr,
|
#if (RTL8188E_SUPPORT == 1)
|
||||||
u32 Data, enum ODM_RF_RADIO_PATH RF_PATH,
|
|
||||||
u32 RegAddr)
|
void
|
||||||
|
odm_ConfigRFReg_8188E(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN u4Byte Addr,
|
||||||
|
IN u4Byte Data,
|
||||||
|
IN ODM_RF_RADIO_PATH_E RF_PATH,
|
||||||
|
IN u4Byte RegAddr
|
||||||
|
)
|
||||||
{
|
{
|
||||||
if (Addr == 0xffe) {
|
if(Addr == 0xffe)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_LONG_DELAY_ISSUE
|
||||||
ODM_sleep_ms(50);
|
ODM_sleep_ms(50);
|
||||||
} else if (Addr == 0xfd) {
|
#else
|
||||||
|
ODM_delay_ms(50);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if (Addr == 0xfd)
|
||||||
|
{
|
||||||
ODM_delay_ms(5);
|
ODM_delay_ms(5);
|
||||||
} else if (Addr == 0xfc) {
|
}
|
||||||
|
else if (Addr == 0xfc)
|
||||||
|
{
|
||||||
ODM_delay_ms(1);
|
ODM_delay_ms(1);
|
||||||
} else if (Addr == 0xfb) {
|
}
|
||||||
|
else if (Addr == 0xfb)
|
||||||
|
{
|
||||||
ODM_delay_us(50);
|
ODM_delay_us(50);
|
||||||
} else if (Addr == 0xfa) {
|
}
|
||||||
|
else if (Addr == 0xfa)
|
||||||
|
{
|
||||||
ODM_delay_us(5);
|
ODM_delay_us(5);
|
||||||
} else if (Addr == 0xf9) {
|
}
|
||||||
ODM_delay_us(1);
|
else if (Addr == 0xf9)
|
||||||
} else {
|
{
|
||||||
ODM_SetRFReg(pDM_Odm, RF_PATH, RegAddr, bRFRegOffsetMask, Data);
|
|
||||||
/* Add 1us delay between BB/RF register setting. */
|
|
||||||
ODM_delay_us(1);
|
ODM_delay_us(1);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ODM_SetRFReg(pDM_Odm, RF_PATH, RegAddr, bRFRegOffsetMask, Data);
|
||||||
|
// Add 1us delay between BB/RF register setting.
|
||||||
|
ODM_delay_us(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void odm_ConfigRF_RadioA_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u32 Data)
|
|
||||||
|
void
|
||||||
|
odm_ConfigRF_RadioA_8188E(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN u4Byte Addr,
|
||||||
|
IN u4Byte Data
|
||||||
|
)
|
||||||
{
|
{
|
||||||
u32 content = 0x1000; /* RF_Content: radioa_txt */
|
u4Byte content = 0x1000; // RF_Content: radioa_txt
|
||||||
u32 maskforPhySet = (u32)(content&0xE000);
|
u4Byte maskforPhySet= (u4Byte)(content&0xE000);
|
||||||
|
|
||||||
odm_ConfigRFReg_8188E(pDM_Odm, Addr, Data, ODM_RF_PATH_A, Addr|maskforPhySet);
|
odm_ConfigRFReg_8188E(pDM_Odm, Addr, Data, ODM_RF_PATH_A, Addr|maskforPhySet);
|
||||||
ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigRFWithHeaderFile: [RadioA] %08X %08X\n", Addr, Data));
|
|
||||||
|
ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigRFWithHeaderFile: [RadioA] %08X %08X\n", Addr, Data));
|
||||||
}
|
}
|
||||||
|
|
||||||
void odm_ConfigRF_RadioB_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u32 Data)
|
void
|
||||||
|
odm_ConfigRF_RadioB_8188E(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN u4Byte Addr,
|
||||||
|
IN u4Byte Data
|
||||||
|
)
|
||||||
{
|
{
|
||||||
u32 content = 0x1001; /* RF_Content: radiob_txt */
|
u4Byte content = 0x1001; // RF_Content: radiob_txt
|
||||||
u32 maskforPhySet = (u32)(content&0xE000);
|
u4Byte maskforPhySet= (u4Byte)(content&0xE000);
|
||||||
|
|
||||||
odm_ConfigRFReg_8188E(pDM_Odm, Addr, Data, ODM_RF_PATH_B, Addr|maskforPhySet);
|
odm_ConfigRFReg_8188E(pDM_Odm, Addr, Data, ODM_RF_PATH_B, Addr|maskforPhySet);
|
||||||
|
|
||||||
ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigRFWithHeaderFile: [RadioB] %08X %08X\n", Addr, Data));
|
ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigRFWithHeaderFile: [RadioB] %08X %08X\n", Addr, Data));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void odm_ConfigMAC_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u8 Data)
|
void
|
||||||
|
odm_ConfigMAC_8188E(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN u4Byte Addr,
|
||||||
|
IN u1Byte Data
|
||||||
|
)
|
||||||
{
|
{
|
||||||
ODM_Write1Byte(pDM_Odm, Addr, Data);
|
ODM_Write1Byte(pDM_Odm, Addr, Data);
|
||||||
ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigMACWithHeaderFile: [MAC_REG] %08X %08X\n", Addr, Data));
|
ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigMACWithHeaderFile: [MAC_REG] %08X %08X\n", Addr, Data));
|
||||||
}
|
}
|
||||||
|
|
||||||
void odm_ConfigBB_AGC_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u32 Bitmask, u32 Data)
|
void
|
||||||
|
odm_ConfigBB_AGC_8188E(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN u4Byte Addr,
|
||||||
|
IN u4Byte Bitmask,
|
||||||
|
IN u4Byte Data
|
||||||
|
)
|
||||||
{
|
{
|
||||||
ODM_SetBBReg(pDM_Odm, Addr, Bitmask, Data);
|
ODM_SetBBReg(pDM_Odm, Addr, Bitmask, Data);
|
||||||
/* Add 1us delay between BB/RF register setting. */
|
// Add 1us delay between BB/RF register setting.
|
||||||
ODM_delay_us(1);
|
ODM_delay_us(1);
|
||||||
|
|
||||||
ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
|
ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigBBWithHeaderFile: [AGC_TAB] %08X %08X\n", Addr, Data));
|
||||||
("===> ODM_ConfigBBWithHeaderFile: [AGC_TAB] %08X %08X\n",
|
|
||||||
Addr, Data));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void odm_ConfigBB_PHY_REG_PG_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr,
|
void
|
||||||
u32 Bitmask, u32 Data)
|
odm_ConfigBB_PHY_REG_PG_8188E(
|
||||||
{
|
IN PDM_ODM_T pDM_Odm,
|
||||||
if (Addr == 0xfe) {
|
IN u4Byte Addr,
|
||||||
|
IN u4Byte Bitmask,
|
||||||
|
IN u4Byte Data
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Addr == 0xfe){
|
||||||
|
#ifdef CONFIG_LONG_DELAY_ISSUE
|
||||||
ODM_sleep_ms(50);
|
ODM_sleep_ms(50);
|
||||||
} else if (Addr == 0xfd) {
|
#else
|
||||||
|
ODM_delay_ms(50);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if (Addr == 0xfd){
|
||||||
ODM_delay_ms(5);
|
ODM_delay_ms(5);
|
||||||
} else if (Addr == 0xfc) {
|
}
|
||||||
|
else if (Addr == 0xfc){
|
||||||
ODM_delay_ms(1);
|
ODM_delay_ms(1);
|
||||||
} else if (Addr == 0xfb) {
|
}
|
||||||
|
else if (Addr == 0xfb){
|
||||||
ODM_delay_us(50);
|
ODM_delay_us(50);
|
||||||
} else if (Addr == 0xfa) {
|
}
|
||||||
|
else if (Addr == 0xfa){
|
||||||
ODM_delay_us(5);
|
ODM_delay_us(5);
|
||||||
} else if (Addr == 0xf9) {
|
}
|
||||||
|
else if (Addr == 0xf9){
|
||||||
ODM_delay_us(1);
|
ODM_delay_us(1);
|
||||||
} else{
|
}
|
||||||
ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD,
|
else{
|
||||||
("===> @@@@@@@ ODM_ConfigBBWithHeaderFile: [PHY_REG] %08X %08X %08X\n",
|
ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, ("===> @@@@@@@ ODM_ConfigBBWithHeaderFile: [PHY_REG] %08X %08X %08X\n", Addr, Bitmask, Data));
|
||||||
Addr, Bitmask, Data));
|
|
||||||
|
#if !(DM_ODM_SUPPORT_TYPE&ODM_AP)
|
||||||
storePwrIndexDiffRateOffset(pDM_Odm->Adapter, Addr, Bitmask, Data);
|
storePwrIndexDiffRateOffset(pDM_Odm->Adapter, Addr, Bitmask, Data);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void odm_ConfigBB_PHY_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u32 Bitmask, u32 Data)
|
void
|
||||||
{
|
odm_ConfigBB_PHY_8188E(
|
||||||
if (Addr == 0xfe) {
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN u4Byte Addr,
|
||||||
|
IN u4Byte Bitmask,
|
||||||
|
IN u4Byte Data
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (Addr == 0xfe){
|
||||||
|
#ifdef CONFIG_LONG_DELAY_ISSUE
|
||||||
ODM_sleep_ms(50);
|
ODM_sleep_ms(50);
|
||||||
} else if (Addr == 0xfd) {
|
#else
|
||||||
|
ODM_delay_ms(50);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if (Addr == 0xfd){
|
||||||
ODM_delay_ms(5);
|
ODM_delay_ms(5);
|
||||||
} else if (Addr == 0xfc) {
|
}
|
||||||
|
else if (Addr == 0xfc){
|
||||||
ODM_delay_ms(1);
|
ODM_delay_ms(1);
|
||||||
} else if (Addr == 0xfb) {
|
}
|
||||||
|
else if (Addr == 0xfb){
|
||||||
ODM_delay_us(50);
|
ODM_delay_us(50);
|
||||||
} else if (Addr == 0xfa) {
|
}
|
||||||
|
else if (Addr == 0xfa){
|
||||||
ODM_delay_us(5);
|
ODM_delay_us(5);
|
||||||
} else if (Addr == 0xf9) {
|
}
|
||||||
|
else if (Addr == 0xf9){
|
||||||
ODM_delay_us(1);
|
ODM_delay_us(1);
|
||||||
} else {
|
}
|
||||||
|
else{
|
||||||
if (Addr == 0xa24)
|
if (Addr == 0xa24)
|
||||||
pDM_Odm->RFCalibrateInfo.RegA24 = Data;
|
pDM_Odm->RFCalibrateInfo.RegA24 = Data;
|
||||||
ODM_SetBBReg(pDM_Odm, Addr, Bitmask, Data);
|
ODM_SetBBReg(pDM_Odm, Addr, Bitmask, Data);
|
||||||
|
|
||||||
/* Add 1us delay between BB/RF register setting. */
|
// Add 1us delay between BB/RF register setting.
|
||||||
ODM_delay_us(1);
|
ODM_delay_us(1);
|
||||||
ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE,
|
ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_TRACE, ("===> ODM_ConfigBBWithHeaderFile: [PHY_REG] %08X %08X\n", Addr, Data));
|
||||||
("===> ODM_ConfigBBWithHeaderFile: [PHY_REG] %08X %08X\n",
|
|
||||||
Addr, Data));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
659
hal/odm_debug.c
Normal file → Executable file
659
hal/odm_debug.c
Normal file → Executable file
|
@ -1,32 +1,627 @@
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* 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
|
* under the terms of version 2 of the GNU General Public License as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
* more details.
|
* more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License along with
|
* 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.,
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
/* include files */
|
//============================================================
|
||||||
|
// include files
|
||||||
#include "odm_precomp.h"
|
//============================================================
|
||||||
|
|
||||||
void ODM_InitDebugSetting(struct odm_dm_struct *pDM_Odm)
|
#include "odm_precomp.h"
|
||||||
{
|
|
||||||
pDM_Odm->DebugLevel = ODM_DBG_TRACE;
|
VOID
|
||||||
|
ODM_InitDebugSetting(
|
||||||
pDM_Odm->DebugComponents = 0;
|
IN PDM_ODM_T pDM_Odm
|
||||||
}
|
)
|
||||||
|
{
|
||||||
u32 GlobalDebugLevel;
|
pDM_Odm->DebugLevel = ODM_DBG_TRACE;
|
||||||
|
|
||||||
|
pDM_Odm->DebugComponents =
|
||||||
|
\
|
||||||
|
#if DBG
|
||||||
|
//BB Functions
|
||||||
|
// ODM_COMP_DIG |
|
||||||
|
// ODM_COMP_RA_MASK |
|
||||||
|
// ODM_COMP_DYNAMIC_TXPWR |
|
||||||
|
// ODM_COMP_FA_CNT |
|
||||||
|
// ODM_COMP_RSSI_MONITOR |
|
||||||
|
// ODM_COMP_CCK_PD |
|
||||||
|
// ODM_COMP_ANT_DIV |
|
||||||
|
// ODM_COMP_PWR_SAVE |
|
||||||
|
// ODM_COMP_PWR_TRAIN |
|
||||||
|
// ODM_COMP_RATE_ADAPTIVE |
|
||||||
|
// ODM_COMP_PATH_DIV |
|
||||||
|
// ODM_COMP_DYNAMIC_PRICCA |
|
||||||
|
// ODM_COMP_RXHP |
|
||||||
|
|
||||||
|
//MAC Functions
|
||||||
|
// ODM_COMP_EDCA_TURBO |
|
||||||
|
// ODM_COMP_EARLY_MODE |
|
||||||
|
//RF Functions
|
||||||
|
// ODM_COMP_TX_PWR_TRACK |
|
||||||
|
// ODM_COMP_RX_GAIN_TRACK |
|
||||||
|
// ODM_COMP_CALIBRATION |
|
||||||
|
//Common
|
||||||
|
// ODM_COMP_COMMON |
|
||||||
|
// ODM_COMP_INIT |
|
||||||
|
#endif
|
||||||
|
0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/*------------------Declare variable-----------------------
|
||||||
|
// Define debug flag array for common debug print macro. */
|
||||||
|
u4Byte ODM_DBGP_Type[ODM_DBGP_TYPE_MAX];
|
||||||
|
|
||||||
|
/* Define debug print header for every service module. */
|
||||||
|
ODM_DBGP_HEAD_T ODM_DBGP_Head;
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* Function: DBGP_Flag_Init
|
||||||
|
*
|
||||||
|
* Overview: Refresh all debug print control flag content to zero.
|
||||||
|
*
|
||||||
|
* Input: NONE
|
||||||
|
*
|
||||||
|
* Output: NONE
|
||||||
|
*
|
||||||
|
* Return: NONE
|
||||||
|
*
|
||||||
|
* Revised History:
|
||||||
|
* When Who Remark
|
||||||
|
* 10/20/2006 MHC Create Version 0.
|
||||||
|
*
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
extern void ODM_DBGP_Flag_Init(void)
|
||||||
|
{
|
||||||
|
u1Byte i;
|
||||||
|
|
||||||
|
for (i = 0; i < ODM_DBGP_TYPE_MAX; i++)
|
||||||
|
{
|
||||||
|
ODM_DBGP_Type[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef ADSL_AP_BUILD_WORKAROUND
|
||||||
|
#if DBG
|
||||||
|
// 2010/06/02 MH Free build driver can not out any debug message!!!
|
||||||
|
// Init Debug flag enable condition
|
||||||
|
|
||||||
|
ODM_DBGP_Type[FINIT] = \
|
||||||
|
// INIT_EEPROM |
|
||||||
|
// INIT_TxPower |
|
||||||
|
// INIT_IQK |
|
||||||
|
// INIT_RF |
|
||||||
|
0;
|
||||||
|
|
||||||
|
ODM_DBGP_Type[FDM] = \
|
||||||
|
// WA_IOT |
|
||||||
|
// DM_PWDB |
|
||||||
|
// DM_Monitor |
|
||||||
|
// DM_DIG |
|
||||||
|
// DM_EDCA_Turbo |
|
||||||
|
// DM_BT30 |
|
||||||
|
0;
|
||||||
|
|
||||||
|
ODM_DBGP_Type[FIOCTL] = \
|
||||||
|
// IOCTL_IRP |
|
||||||
|
// IOCTL_IRP_DETAIL |
|
||||||
|
// IOCTL_IRP_STATISTICS |
|
||||||
|
// IOCTL_IRP_HANDLE |
|
||||||
|
// IOCTL_BT_HCICMD |
|
||||||
|
// IOCTL_BT_HCICMD_DETAIL |
|
||||||
|
// IOCTL_BT_HCICMD_EXT |
|
||||||
|
// IOCTL_BT_EVENT |
|
||||||
|
// IOCTL_BT_EVENT_DETAIL |
|
||||||
|
// IOCTL_BT_EVENT_PERIODICAL |
|
||||||
|
// IOCTL_BT_TX_ACLDATA |
|
||||||
|
// IOCTL_BT_TX_ACLDATA_DETAIL |
|
||||||
|
// IOCTL_BT_RX_ACLDATA |
|
||||||
|
// IOCTL_BT_RX_ACLDATA_DETAIL |
|
||||||
|
// IOCTL_BT_TP |
|
||||||
|
// IOCTL_STATE |
|
||||||
|
// IOCTL_BT_LOGO |
|
||||||
|
// IOCTL_CALLBACK_FUN |
|
||||||
|
// IOCTL_PARSE_BT_PKT |
|
||||||
|
0;
|
||||||
|
|
||||||
|
ODM_DBGP_Type[FBT] = \
|
||||||
|
// BT_TRACE |
|
||||||
|
0;
|
||||||
|
|
||||||
|
ODM_DBGP_Type[FEEPROM] = \
|
||||||
|
// EEPROM_W |
|
||||||
|
// EFUSE_PG |
|
||||||
|
// EFUSE_READ_ALL |
|
||||||
|
// EFUSE_ANALYSIS |
|
||||||
|
// EFUSE_PG_DETAIL |
|
||||||
|
0;
|
||||||
|
|
||||||
|
ODM_DBGP_Type[FDBG_CTRL] = \
|
||||||
|
// DBG_CTRL_TRACE |
|
||||||
|
// DBG_CTRL_INBAND_NOISE |
|
||||||
|
0;
|
||||||
|
|
||||||
|
// 2011/07/20 MH Add for short cut
|
||||||
|
ODM_DBGP_Type[FSHORT_CUT] = \
|
||||||
|
// SHCUT_TX |
|
||||||
|
// SHCUT_RX |
|
||||||
|
0;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
/* Define debug header of every service module. */
|
||||||
|
//ODM_DBGP_Head.pMANS = "\n\r[MANS] ";
|
||||||
|
//ODM_DBGP_Head.pRTOS = "\n\r[RTOS] ";
|
||||||
|
//ODM_DBGP_Head.pALM = "\n\r[ALM] ";
|
||||||
|
//ODM_DBGP_Head.pPEM = "\n\r[PEM] ";
|
||||||
|
//ODM_DBGP_Head.pCMPK = "\n\r[CMPK] ";
|
||||||
|
//ODM_DBGP_Head.pRAPD = "\n\r[RAPD] ";
|
||||||
|
//ODM_DBGP_Head.pTXPB = "\n\r[TXPB] ";
|
||||||
|
//ODM_DBGP_Head.pQUMG = "\n\r[QUMG] ";
|
||||||
|
|
||||||
|
} /* DBGP_Flag_Init */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
u4Byte GlobalDebugLevel = DBG_LOUD;
|
||||||
|
//
|
||||||
|
// 2009/06/22 MH Allow Fre build to print none debug info at init time.
|
||||||
|
//
|
||||||
|
#if DBG
|
||||||
|
u8Byte GlobalDebugComponents = \
|
||||||
|
// COMP_TRACE |
|
||||||
|
// COMP_DBG |
|
||||||
|
// COMP_INIT |
|
||||||
|
// COMP_OID_QUERY |
|
||||||
|
// COMP_OID_SET |
|
||||||
|
// COMP_RECV |
|
||||||
|
// COMP_SEND |
|
||||||
|
// COMP_IO |
|
||||||
|
// COMP_POWER |
|
||||||
|
// COMP_MLME |
|
||||||
|
// COMP_SCAN |
|
||||||
|
// COMP_SYSTEM |
|
||||||
|
// COMP_SEC |
|
||||||
|
// COMP_AP |
|
||||||
|
// COMP_TURBO |
|
||||||
|
// COMP_QOS |
|
||||||
|
// COMP_AUTHENTICATOR |
|
||||||
|
// COMP_BEACON |
|
||||||
|
// COMP_ANTENNA |
|
||||||
|
// COMP_RATE |
|
||||||
|
// COMP_EVENTS |
|
||||||
|
// COMP_FPGA |
|
||||||
|
// COMP_RM |
|
||||||
|
// COMP_MP |
|
||||||
|
// COMP_RXDESC |
|
||||||
|
// COMP_CKIP |
|
||||||
|
// COMP_DIG |
|
||||||
|
// COMP_TXAGC |
|
||||||
|
// COMP_HIPWR |
|
||||||
|
// COMP_HALDM |
|
||||||
|
// COMP_RSNA |
|
||||||
|
// COMP_INDIC |
|
||||||
|
// COMP_LED |
|
||||||
|
// COMP_RF |
|
||||||
|
// COMP_DUALMACSWITCH |
|
||||||
|
// COMP_EASY_CONCURRENT |
|
||||||
|
|
||||||
|
//1!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
//1//1Attention Please!!!<11n or 8190 specific code should be put below this line>
|
||||||
|
//1!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
// COMP_HT |
|
||||||
|
// COMP_POWER_TRACKING |
|
||||||
|
// COMP_RX_REORDER |
|
||||||
|
// COMP_AMSDU |
|
||||||
|
// COMP_WPS |
|
||||||
|
// COMP_RATR |
|
||||||
|
// COMP_RESET |
|
||||||
|
// COMP_CMD |
|
||||||
|
// COMP_EFUSE |
|
||||||
|
// COMP_MESH_INTERWORKING |
|
||||||
|
// COMP_CCX |
|
||||||
|
// COMP_IOCTL |
|
||||||
|
// COMP_GP |
|
||||||
|
// COMP_TXAGG |
|
||||||
|
// COMP_BB_POWERSAVING |
|
||||||
|
// COMP_SWAS |
|
||||||
|
// COMP_P2P |
|
||||||
|
// COMP_MUX |
|
||||||
|
// COMP_FUNC |
|
||||||
|
// COMP_TDLS |
|
||||||
|
// COMP_OMNIPEEK |
|
||||||
|
// COMP_PSD |
|
||||||
|
0;
|
||||||
|
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define FuncEntry
|
||||||
|
#define FuncExit
|
||||||
|
u8Byte GlobalDebugComponents = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (RT_PLATFORM==PLATFORM_LINUX)
|
||||||
|
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
|
||||||
|
EXPORT_SYMBOL(GlobalDebugComponents);
|
||||||
|
EXPORT_SYMBOL(GlobalDebugLevel);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*------------------Declare variable-----------------------
|
||||||
|
// Define debug flag array for common debug print macro. */
|
||||||
|
u4Byte DBGP_Type[DBGP_TYPE_MAX];
|
||||||
|
|
||||||
|
/* Define debug print header for every service module. */
|
||||||
|
DBGP_HEAD_T DBGP_Head;
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* Function: DBGP_Flag_Init
|
||||||
|
*
|
||||||
|
* Overview: Refresh all debug print control flag content to zero.
|
||||||
|
*
|
||||||
|
* Input: NONE
|
||||||
|
*
|
||||||
|
* Output: NONE
|
||||||
|
*
|
||||||
|
* Return: NONE
|
||||||
|
*
|
||||||
|
* Revised History:
|
||||||
|
* When Who Remark
|
||||||
|
* 10/20/2006 MHC Create Version 0.
|
||||||
|
*
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
extern void DBGP_Flag_Init(void)
|
||||||
|
{
|
||||||
|
u1Byte i;
|
||||||
|
|
||||||
|
for (i = 0; i < DBGP_TYPE_MAX; i++)
|
||||||
|
{
|
||||||
|
DBGP_Type[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if DBG
|
||||||
|
// 2010/06/02 MH Free build driver can not out any debug message!!!
|
||||||
|
// Init Debug flag enable condition
|
||||||
|
|
||||||
|
DBGP_Type[FINIT] = \
|
||||||
|
// INIT_EEPROM |
|
||||||
|
// INIT_TxPower |
|
||||||
|
// INIT_IQK |
|
||||||
|
// INIT_RF |
|
||||||
|
0;
|
||||||
|
|
||||||
|
DBGP_Type[FDM] = \
|
||||||
|
// WA_IOT |
|
||||||
|
// DM_PWDB |
|
||||||
|
// DM_Monitor |
|
||||||
|
// DM_DIG |
|
||||||
|
// DM_EDCA_Turbo |
|
||||||
|
// DM_BT30 |
|
||||||
|
0;
|
||||||
|
|
||||||
|
DBGP_Type[FIOCTL] = \
|
||||||
|
// IOCTL_IRP |
|
||||||
|
// IOCTL_IRP_DETAIL |
|
||||||
|
// IOCTL_IRP_STATISTICS |
|
||||||
|
// IOCTL_IRP_HANDLE |
|
||||||
|
// IOCTL_BT_HCICMD |
|
||||||
|
// IOCTL_BT_HCICMD_DETAIL |
|
||||||
|
// IOCTL_BT_HCICMD_EXT |
|
||||||
|
// IOCTL_BT_EVENT |
|
||||||
|
// IOCTL_BT_EVENT_DETAIL |
|
||||||
|
// IOCTL_BT_EVENT_PERIODICAL |
|
||||||
|
// IOCTL_BT_TX_ACLDATA |
|
||||||
|
// IOCTL_BT_TX_ACLDATA_DETAIL |
|
||||||
|
// IOCTL_BT_RX_ACLDATA |
|
||||||
|
// IOCTL_BT_RX_ACLDATA_DETAIL |
|
||||||
|
// IOCTL_BT_TP |
|
||||||
|
// IOCTL_STATE |
|
||||||
|
// IOCTL_BT_LOGO |
|
||||||
|
// IOCTL_CALLBACK_FUN |
|
||||||
|
// IOCTL_PARSE_BT_PKT |
|
||||||
|
0;
|
||||||
|
|
||||||
|
DBGP_Type[FBT] = \
|
||||||
|
// BT_TRACE |
|
||||||
|
0;
|
||||||
|
|
||||||
|
DBGP_Type[FEEPROM] = \
|
||||||
|
// EEPROM_W |
|
||||||
|
// EFUSE_PG |
|
||||||
|
// EFUSE_READ_ALL |
|
||||||
|
// EFUSE_ANALYSIS |
|
||||||
|
// EFUSE_PG_DETAIL |
|
||||||
|
0;
|
||||||
|
|
||||||
|
DBGP_Type[FDBG_CTRL] = \
|
||||||
|
// DBG_CTRL_TRACE |
|
||||||
|
// DBG_CTRL_INBAND_NOISE |
|
||||||
|
0;
|
||||||
|
|
||||||
|
// 2011/07/20 MH Add for short cut
|
||||||
|
DBGP_Type[FSHORT_CUT] = \
|
||||||
|
// SHCUT_TX |
|
||||||
|
// SHCUT_RX |
|
||||||
|
0;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
/* Define debug header of every service module. */
|
||||||
|
DBGP_Head.pMANS = "\n\r[MANS] ";
|
||||||
|
DBGP_Head.pRTOS = "\n\r[RTOS] ";
|
||||||
|
DBGP_Head.pALM = "\n\r[ALM] ";
|
||||||
|
DBGP_Head.pPEM = "\n\r[PEM] ";
|
||||||
|
DBGP_Head.pCMPK = "\n\r[CMPK] ";
|
||||||
|
DBGP_Head.pRAPD = "\n\r[RAPD] ";
|
||||||
|
DBGP_Head.pTXPB = "\n\r[TXPB] ";
|
||||||
|
DBGP_Head.pQUMG = "\n\r[QUMG] ";
|
||||||
|
|
||||||
|
} /* DBGP_Flag_Init */
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* Function: DBG_PrintAllFlag
|
||||||
|
*
|
||||||
|
* Overview: Print All debug flag
|
||||||
|
*
|
||||||
|
* Input: NONE
|
||||||
|
*
|
||||||
|
* Output: NONE
|
||||||
|
*
|
||||||
|
* Return: NONE
|
||||||
|
*
|
||||||
|
* Revised History:
|
||||||
|
* When Who Remark
|
||||||
|
* 12/10/2008 MHC Create Version 0.
|
||||||
|
*
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
extern void DBG_PrintAllFlag(void)
|
||||||
|
{
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 0 FQoS\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 1 FTX\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 2 FRX\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 3 FSEC\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 4 FMGNT\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 5 FMLME\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 6 FRESOURCE\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 7 FBEACON\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 8 FISR\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 9 FPHY\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 11 FMP\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 12 FPWR\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 13 FDM\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 14 FDBG_CTRL\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 15 FC2H\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 16 FBT\n"));
|
||||||
|
} // DBG_PrintAllFlag
|
||||||
|
|
||||||
|
|
||||||
|
extern void DBG_PrintAllComp(void)
|
||||||
|
{
|
||||||
|
u1Byte i;
|
||||||
|
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("GlobalDebugComponents Definition\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT0 COMP_TRACE\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT1 COMP_DBG\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT2 COMP_INIT\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT3 COMP_OID_QUERY\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT4 COMP_OID_SET\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT5 COMP_RECV\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT6 COMP_SEND\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT7 COMP_IO\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT8 COMP_POWER\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT9 COMP_MLME\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT10 COMP_SCAN\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT11 COMP_SYSTEM\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT12 COMP_SEC\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT13 COMP_AP\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT14 COMP_TURBO\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT15 COMP_QOS\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT16 COMP_AUTHENTICATOR\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT17 COMP_BEACON\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT18 COMP_BEACON\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT19 COMP_RATE\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT20 COMP_EVENTS\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT21 COMP_FPGA\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT22 COMP_RM\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT23 COMP_MP\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT24 COMP_RXDESC\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT25 COMP_CKIP\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT26 COMP_DIG\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT27 COMP_TXAGC\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT28 COMP_HIPWR\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT29 COMP_HALDM\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT30 COMP_RSNA\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT31 COMP_INDIC\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT32 COMP_LED\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT33 COMP_RF\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT34 COMP_HT\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT35 COMP_POWER_TRACKING\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT36 COMP_POWER_TRACKING\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT37 COMP_AMSDU\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT38 COMP_WPS\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT39 COMP_RATR\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT40 COMP_RESET\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT41 COMP_CMD\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT42 COMP_EFUSE\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT43 COMP_MESH_INTERWORKING\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT43 COMP_CCX\n"));
|
||||||
|
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("GlobalDebugComponents = %"i64fmt"x\n", GlobalDebugComponents));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("Enable DBG COMP ="));
|
||||||
|
for (i = 0; i < 64; i++)
|
||||||
|
{
|
||||||
|
if (GlobalDebugComponents & ((u8Byte)0x1 << i) )
|
||||||
|
{
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT%02d |\n", i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("\n"));
|
||||||
|
|
||||||
|
} // DBG_PrintAllComp
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------
|
||||||
|
* Function: DBG_PrintFlagEvent
|
||||||
|
*
|
||||||
|
* Overview: Print dedicated debug flag event
|
||||||
|
*
|
||||||
|
* Input: NONE
|
||||||
|
*
|
||||||
|
* Output: NONE
|
||||||
|
*
|
||||||
|
* Return: NONE
|
||||||
|
*
|
||||||
|
* Revised History:
|
||||||
|
* When Who Remark
|
||||||
|
* 12/10/2008 MHC Create Version 0.
|
||||||
|
*
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
extern void DBG_PrintFlagEvent(u1Byte DbgFlag)
|
||||||
|
{
|
||||||
|
switch(DbgFlag)
|
||||||
|
{
|
||||||
|
case FQoS:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 QoS_INIT\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 QoS_VISTA\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FTX:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 TX_DESC\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 TX_DESC_TID\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FRX:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 RX_DATA\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 RX_PHY_STS\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 RX_PHY_SS\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 RX_PHY_SQ\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 4 RX_PHY_ASTS\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 5 RX_ERR_LEN\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 6 RX_DEFRAG\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 7 RX_ERR_RATE\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FSEC:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("NA\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FMGNT:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("NA\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FMLME:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 MEDIA_STS\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 LINK_STS\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FRESOURCE:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 OS_CHK\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FBEACON:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 BCN_SHOW\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 BCN_PEER\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FISR:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 ISR_CHK\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FPHY:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 PHY_BBR\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 PHY_BBW\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 PHY_RFR\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 PHY_RFW\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 4 PHY_MACR\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 5 PHY_MACW\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 6 PHY_ALLR\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 7 PHY_ALLW\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 8 PHY_TXPWR\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FMP:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 MP_RX\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FEEPROM:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 EEPROM_W\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 EFUSE_PG\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FPWR:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 LPS\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 IPS\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 PWRSW\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 PWRHW\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 4 PWRHAL\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FDM:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 WA_IOT\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 DM_PWDB\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 DM_Monitor\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 DM_DIG\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FDBG_CTRL:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 DBG_CTRL_TRACE\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 DBG_CTRL_INBAND_NOISE\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FC2H:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 C2H_Summary\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 C2H_PacketData\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 C2H_ContentData\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FBT:
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 BT_TRACE\n"));
|
||||||
|
ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 BT_RFPoll\n"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // DBG_PrintFlagEvent
|
||||||
|
|
||||||
|
|
||||||
|
extern void DBG_DumpMem(const u1Byte DbgComp,
|
||||||
|
const u1Byte DbgLevel,
|
||||||
|
pu1Byte pMem,
|
||||||
|
u2Byte Len)
|
||||||
|
{
|
||||||
|
u2Byte i;
|
||||||
|
|
||||||
|
for (i=0;i<((Len>>3) + 1);i++)
|
||||||
|
{
|
||||||
|
ODM_RT_TRACE(pDM_Odm,DbgComp, DbgLevel, ("%02X %02X %02X %02X %02X %02X %02X %02X\n",
|
||||||
|
*(pMem+(i*8)), *(pMem+(i*8+1)), *(pMem+(i*8+2)), *(pMem+(i*8+3)),
|
||||||
|
*(pMem+(i*8+4)), *(pMem+(i*8+5)), *(pMem+(i*8+6)), *(pMem+(i*8+7))));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
869
hal/odm_interface.c
Normal file → Executable file
869
hal/odm_interface.c
Normal file → Executable file
|
@ -1,203 +1,666 @@
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* 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
|
* under the terms of version 2 of the GNU General Public License as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
* more details.
|
* more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License along with
|
* 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.,
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "odm_precomp.h"
|
//============================================================
|
||||||
/* ODM IO Relative API. */
|
// include files
|
||||||
|
//============================================================
|
||||||
u8 ODM_Read1Byte(struct odm_dm_struct *pDM_Odm, u32 RegAddr)
|
|
||||||
{
|
#include "odm_precomp.h"
|
||||||
struct adapter *Adapter = pDM_Odm->Adapter;
|
//
|
||||||
return rtw_read8(Adapter, RegAddr);
|
// ODM IO Relative API.
|
||||||
}
|
//
|
||||||
|
|
||||||
u16 ODM_Read2Byte(struct odm_dm_struct *pDM_Odm, u32 RegAddr)
|
u1Byte
|
||||||
{
|
ODM_Read1Byte(
|
||||||
struct adapter *Adapter = pDM_Odm->Adapter;
|
IN PDM_ODM_T pDM_Odm,
|
||||||
return rtw_read16(Adapter, RegAddr);
|
IN u4Byte RegAddr
|
||||||
}
|
)
|
||||||
|
{
|
||||||
u32 ODM_Read4Byte(struct odm_dm_struct *pDM_Odm, u32 RegAddr)
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
{
|
prtl8192cd_priv priv = pDM_Odm->priv;
|
||||||
struct adapter *Adapter = pDM_Odm->Adapter;
|
return RTL_R8(RegAddr);
|
||||||
return rtw_read32(Adapter, RegAddr);
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
}
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
return rtw_read8(Adapter,RegAddr);
|
||||||
void ODM_Write1Byte(struct odm_dm_struct *pDM_Odm, u32 RegAddr, u8 Data)
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
{
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
struct adapter *Adapter = pDM_Odm->Adapter;
|
return PlatformEFIORead1Byte(Adapter, RegAddr);
|
||||||
rtw_write8(Adapter, RegAddr, Data);
|
#endif
|
||||||
}
|
|
||||||
|
}
|
||||||
void ODM_Write2Byte(struct odm_dm_struct *pDM_Odm, u32 RegAddr, u16 Data)
|
|
||||||
{
|
|
||||||
struct adapter *Adapter = pDM_Odm->Adapter;
|
u2Byte
|
||||||
rtw_write16(Adapter, RegAddr, Data);
|
ODM_Read2Byte(
|
||||||
}
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN u4Byte RegAddr
|
||||||
void ODM_Write4Byte(struct odm_dm_struct *pDM_Odm, u32 RegAddr, u32 Data)
|
)
|
||||||
{
|
{
|
||||||
struct adapter *Adapter = pDM_Odm->Adapter;
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
rtw_write32(Adapter, RegAddr, Data);
|
prtl8192cd_priv priv = pDM_Odm->priv;
|
||||||
}
|
return RTL_R16(RegAddr);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
void ODM_SetMACReg(struct odm_dm_struct *pDM_Odm, u32 RegAddr, u32 BitMask, u32 Data)
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
{
|
return rtw_read16(Adapter,RegAddr);
|
||||||
struct adapter *Adapter = pDM_Odm->Adapter;
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
}
|
return PlatformEFIORead2Byte(Adapter, RegAddr);
|
||||||
|
#endif
|
||||||
u32 ODM_GetMACReg(struct odm_dm_struct *pDM_Odm, u32 RegAddr, u32 BitMask)
|
|
||||||
{
|
}
|
||||||
struct adapter *Adapter = pDM_Odm->Adapter;
|
|
||||||
return PHY_QueryBBReg(Adapter, RegAddr, BitMask);
|
|
||||||
}
|
u4Byte
|
||||||
|
ODM_Read4Byte(
|
||||||
void ODM_SetBBReg(struct odm_dm_struct *pDM_Odm, u32 RegAddr, u32 BitMask, u32 Data)
|
IN PDM_ODM_T pDM_Odm,
|
||||||
{
|
IN u4Byte RegAddr
|
||||||
struct adapter *Adapter = pDM_Odm->Adapter;
|
)
|
||||||
PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);
|
{
|
||||||
}
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
prtl8192cd_priv priv = pDM_Odm->priv;
|
||||||
u32 ODM_GetBBReg(struct odm_dm_struct *pDM_Odm, u32 RegAddr, u32 BitMask)
|
return RTL_R32(RegAddr);
|
||||||
{
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
struct adapter *Adapter = pDM_Odm->Adapter;
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
return PHY_QueryBBReg(Adapter, RegAddr, BitMask);
|
return rtw_read32(Adapter,RegAddr);
|
||||||
}
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
void ODM_SetRFReg(struct odm_dm_struct *pDM_Odm, enum ODM_RF_RADIO_PATH eRFPath, u32 RegAddr, u32 BitMask, u32 Data)
|
return PlatformEFIORead4Byte(Adapter, RegAddr);
|
||||||
{
|
#endif
|
||||||
struct adapter *Adapter = pDM_Odm->Adapter;
|
|
||||||
PHY_SetRFReg(Adapter, (enum rf_radio_path)eRFPath, RegAddr, BitMask, Data);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
u32 ODM_GetRFReg(struct odm_dm_struct *pDM_Odm, enum ODM_RF_RADIO_PATH eRFPath, u32 RegAddr, u32 BitMask)
|
VOID
|
||||||
{
|
ODM_Write1Byte(
|
||||||
struct adapter *Adapter = pDM_Odm->Adapter;
|
IN PDM_ODM_T pDM_Odm,
|
||||||
return PHY_QueryRFReg(Adapter, (enum rf_radio_path)eRFPath, RegAddr, BitMask);
|
IN u4Byte RegAddr,
|
||||||
}
|
IN u1Byte Data
|
||||||
|
)
|
||||||
/* ODM Memory relative API. */
|
{
|
||||||
void ODM_AllocateMemory(struct odm_dm_struct *pDM_Odm, void **pPtr, u32 length)
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
{
|
prtl8192cd_priv priv = pDM_Odm->priv;
|
||||||
*pPtr = rtw_zvmalloc(length);
|
RTL_W8(RegAddr, Data);
|
||||||
}
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
/* length could be ignored, used to detect memory leakage. */
|
rtw_write8(Adapter,RegAddr, Data);
|
||||||
void ODM_FreeMemory(struct odm_dm_struct *pDM_Odm, void *pPtr, u32 length)
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
{
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
rtw_vmfree(pPtr, length);
|
PlatformEFIOWrite1Byte(Adapter, RegAddr, Data);
|
||||||
}
|
#endif
|
||||||
|
|
||||||
s32 ODM_CompareMemory(struct odm_dm_struct *pDM_Odm, void *pBuf1, void *pBuf2, u32 length)
|
}
|
||||||
{
|
|
||||||
return _rtw_memcmp(pBuf1, pBuf2, length);
|
|
||||||
}
|
VOID
|
||||||
|
ODM_Write2Byte(
|
||||||
/* ODM MISC relative API. */
|
IN PDM_ODM_T pDM_Odm,
|
||||||
void ODM_AcquireSpinLock(struct odm_dm_struct *pDM_Odm, enum RT_SPINLOCK_TYPE type)
|
IN u4Byte RegAddr,
|
||||||
{
|
IN u2Byte Data
|
||||||
}
|
)
|
||||||
|
{
|
||||||
void ODM_ReleaseSpinLock(struct odm_dm_struct *pDM_Odm, enum RT_SPINLOCK_TYPE type)
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
{
|
prtl8192cd_priv priv = pDM_Odm->priv;
|
||||||
}
|
RTL_W16(RegAddr, Data);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
/* Work item relative API. FOr MP driver only~! */
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
void ODM_InitializeWorkItem(struct odm_dm_struct *pDM_Odm, void *pRtWorkItem,
|
rtw_write16(Adapter,RegAddr, Data);
|
||||||
RT_WORKITEM_CALL_BACK RtWorkItemCallback,
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
void *pContext, const char *szID)
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
{
|
PlatformEFIOWrite2Byte(Adapter, RegAddr, Data);
|
||||||
}
|
#endif
|
||||||
|
|
||||||
void ODM_StartWorkItem(void *pRtWorkItem)
|
}
|
||||||
{
|
|
||||||
}
|
|
||||||
|
VOID
|
||||||
void ODM_StopWorkItem(void *pRtWorkItem)
|
ODM_Write4Byte(
|
||||||
{
|
IN PDM_ODM_T pDM_Odm,
|
||||||
}
|
IN u4Byte RegAddr,
|
||||||
|
IN u4Byte Data
|
||||||
void ODM_FreeWorkItem(void *pRtWorkItem)
|
)
|
||||||
{
|
{
|
||||||
}
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
prtl8192cd_priv priv = pDM_Odm->priv;
|
||||||
void ODM_ScheduleWorkItem(void *pRtWorkItem)
|
RTL_W32(RegAddr, Data);
|
||||||
{
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
}
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
rtw_write32(Adapter,RegAddr, Data);
|
||||||
void ODM_IsWorkItemScheduled(void *pRtWorkItem)
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
{
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
}
|
PlatformEFIOWrite4Byte(Adapter, RegAddr, Data);
|
||||||
|
#endif
|
||||||
/* ODM Timer relative API. */
|
|
||||||
void ODM_StallExecution(u32 usDelay)
|
}
|
||||||
{
|
|
||||||
rtw_udelay_os(usDelay);
|
|
||||||
}
|
VOID
|
||||||
|
ODM_SetMACReg(
|
||||||
void ODM_delay_ms(u32 ms)
|
IN PDM_ODM_T pDM_Odm,
|
||||||
{
|
IN u4Byte RegAddr,
|
||||||
rtw_mdelay_os(ms);
|
IN u4Byte BitMask,
|
||||||
}
|
IN u4Byte Data
|
||||||
|
)
|
||||||
void ODM_delay_us(u32 us)
|
{
|
||||||
{
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
rtw_udelay_os(us);
|
PHY_SetBBReg(pDM_Odm->priv, RegAddr, BitMask, Data);
|
||||||
}
|
#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
void ODM_sleep_ms(u32 ms)
|
PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);
|
||||||
{
|
#endif
|
||||||
rtw_msleep_os(ms);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void ODM_sleep_us(u32 us)
|
u4Byte
|
||||||
{
|
ODM_GetMACReg(
|
||||||
rtw_usleep_os(us);
|
IN PDM_ODM_T pDM_Odm,
|
||||||
}
|
IN u4Byte RegAddr,
|
||||||
|
IN u4Byte BitMask
|
||||||
void ODM_SetTimer(struct odm_dm_struct *pDM_Odm, struct timer_list *pTimer, u32 msDelay)
|
)
|
||||||
{
|
{
|
||||||
_set_timer(pTimer, msDelay); /* ms */
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
}
|
return PHY_QueryBBReg(pDM_Odm->priv, RegAddr, BitMask);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
|
||||||
void ODM_InitializeTimer(struct odm_dm_struct *pDM_Odm, struct timer_list *pTimer,
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
void *CallBackFunc, void *pContext,
|
return PHY_QueryBBReg(Adapter, RegAddr, BitMask);
|
||||||
const char *szID)
|
#endif
|
||||||
{
|
}
|
||||||
struct adapter *Adapter = pDM_Odm->Adapter;
|
|
||||||
_init_timer(pTimer, Adapter->pnetdev, CallBackFunc, pDM_Odm);
|
|
||||||
}
|
VOID
|
||||||
|
ODM_SetBBReg(
|
||||||
void ODM_CancelTimer(struct odm_dm_struct *pDM_Odm, struct timer_list *pTimer)
|
IN PDM_ODM_T pDM_Odm,
|
||||||
{
|
IN u4Byte RegAddr,
|
||||||
_cancel_timer_ex(pTimer);
|
IN u4Byte BitMask,
|
||||||
}
|
IN u4Byte Data
|
||||||
|
)
|
||||||
void ODM_ReleaseTimer(struct odm_dm_struct *pDM_Odm, struct timer_list *pTimer)
|
{
|
||||||
{
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
}
|
PHY_SetBBReg(pDM_Odm->priv, RegAddr, BitMask, Data);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
|
||||||
/* ODM FW relative API. */
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
u32 ODM_FillH2CCmd(u8 *pH2CBuffer, u32 H2CBufferLen, u32 CmdNum,
|
PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);
|
||||||
u32 *pElementID, u32 *pCmdLen,
|
#endif
|
||||||
u8 **pCmbBuffer, u8 *CmdStartSeq)
|
}
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
u4Byte
|
||||||
|
ODM_GetBBReg(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN u4Byte RegAddr,
|
||||||
|
IN u4Byte BitMask
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
return PHY_QueryBBReg(pDM_Odm->priv, RegAddr, BitMask);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
return PHY_QueryBBReg(Adapter, RegAddr, BitMask);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
ODM_SetRFReg(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN ODM_RF_RADIO_PATH_E eRFPath,
|
||||||
|
IN u4Byte RegAddr,
|
||||||
|
IN u4Byte BitMask,
|
||||||
|
IN u4Byte Data
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
PHY_SetRFReg(pDM_Odm->priv, eRFPath, RegAddr, BitMask, Data);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
u4Byte
|
||||||
|
ODM_GetRFReg(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN ODM_RF_RADIO_PATH_E eRFPath,
|
||||||
|
IN u4Byte RegAddr,
|
||||||
|
IN u4Byte BitMask
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
return PHY_QueryRFReg(pDM_Odm->priv, eRFPath, RegAddr, BitMask, 1);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
return PHY_QueryRFReg(Adapter, eRFPath, RegAddr, BitMask);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// ODM Memory relative API.
|
||||||
|
//
|
||||||
|
VOID
|
||||||
|
ODM_AllocateMemory(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
OUT PVOID *pPtr,
|
||||||
|
IN u4Byte length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
*pPtr = kmalloc(length, GFP_ATOMIC);
|
||||||
|
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
|
||||||
|
*pPtr = rtw_zvmalloc(length);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
PlatformAllocateMemory(Adapter, pPtr, length);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// length could be ignored, used to detect memory leakage.
|
||||||
|
VOID
|
||||||
|
ODM_FreeMemory(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
OUT PVOID pPtr,
|
||||||
|
IN u4Byte length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
kfree(pPtr);
|
||||||
|
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
|
||||||
|
rtw_vmfree(pPtr, length);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
//PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
PlatformFreeMemory(pPtr, length);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
s4Byte ODM_CompareMemory(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN PVOID pBuf1,
|
||||||
|
IN PVOID pBuf2,
|
||||||
|
IN u4Byte length
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
return memcmp(pBuf1,pBuf2,length);
|
||||||
|
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
|
||||||
|
return _rtw_memcmp(pBuf1,pBuf2,length);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
return PlatformCompareMemory(pBuf1,pBuf2,length);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// ODM MISC relative API.
|
||||||
|
//
|
||||||
|
VOID
|
||||||
|
ODM_AcquireSpinLock(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN RT_SPINLOCK_TYPE type
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
|
||||||
|
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
PlatformAcquireSpinLock(Adapter, type);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
VOID
|
||||||
|
ODM_ReleaseSpinLock(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN RT_SPINLOCK_TYPE type
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
|
||||||
|
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
PlatformReleaseSpinLock(Adapter, type);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Work item relative API. FOr MP driver only~!
|
||||||
|
//
|
||||||
|
VOID
|
||||||
|
ODM_InitializeWorkItem(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN PRT_WORK_ITEM pRtWorkItem,
|
||||||
|
IN RT_WORKITEM_CALL_BACK RtWorkItemCallback,
|
||||||
|
IN PVOID pContext,
|
||||||
|
IN const char* szID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
PlatformInitializeWorkItem(Adapter, pRtWorkItem, RtWorkItemCallback, pContext, szID);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
ODM_StartWorkItem(
|
||||||
|
IN PRT_WORK_ITEM pRtWorkItem
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
PlatformStartWorkItem(pRtWorkItem);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
ODM_StopWorkItem(
|
||||||
|
IN PRT_WORK_ITEM pRtWorkItem
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
PlatformStopWorkItem(pRtWorkItem);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
ODM_FreeWorkItem(
|
||||||
|
IN PRT_WORK_ITEM pRtWorkItem
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
PlatformFreeWorkItem(pRtWorkItem);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
ODM_ScheduleWorkItem(
|
||||||
|
IN PRT_WORK_ITEM pRtWorkItem
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
PlatformScheduleWorkItem(pRtWorkItem);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
ODM_IsWorkItemScheduled(
|
||||||
|
IN PRT_WORK_ITEM pRtWorkItem
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
PlatformIsWorkItemScheduled(pRtWorkItem);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// ODM Timer relative API.
|
||||||
|
//
|
||||||
|
VOID
|
||||||
|
ODM_StallExecution(
|
||||||
|
IN u4Byte usDelay
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
rtw_udelay_os(usDelay);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
PlatformStallExecution(usDelay);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
ODM_delay_ms(IN u4Byte ms)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
delay_ms(ms);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
rtw_mdelay_os(ms);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
delay_ms(ms);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
ODM_delay_us(IN u4Byte us)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
delay_us(us);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
rtw_udelay_os(us);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
PlatformStallExecution(us);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
ODM_sleep_ms(IN u4Byte ms)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
rtw_msleep_os(ms);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
ODM_sleep_us(IN u4Byte us)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
rtw_usleep_os(us);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
ODM_SetTimer(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN PRT_TIMER pTimer,
|
||||||
|
IN u4Byte msDelay
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
mod_timer(pTimer, jiffies + (msDelay+9)/10);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
_set_timer(pTimer,msDelay ); //ms
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
PlatformSetTimer(Adapter, pTimer, msDelay);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
ODM_InitializeTimer(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN PRT_TIMER pTimer,
|
||||||
|
IN RT_TIMER_CALL_BACK CallBackFunc,
|
||||||
|
IN PVOID pContext,
|
||||||
|
IN const char* szID
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
pTimer->function = CallBackFunc;
|
||||||
|
pTimer->data = (unsigned long)pDM_Odm;
|
||||||
|
init_timer(pTimer);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
_init_timer(pTimer,Adapter->pnetdev,CallBackFunc,pDM_Odm);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
PlatformInitializeTimer(Adapter, pTimer, CallBackFunc,pContext,szID);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
ODM_CancelTimer(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN PRT_TIMER pTimer
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
del_timer_sync(pTimer);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
_cancel_timer_ex(pTimer);
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
PlatformCancelTimer(Adapter, pTimer);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
ODM_ReleaseTimer(
|
||||||
|
IN PDM_ODM_T pDM_Odm,
|
||||||
|
IN PRT_TIMER pTimer
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
|
||||||
|
PADAPTER Adapter = pDM_Odm->Adapter;
|
||||||
|
|
||||||
|
// <20120301, Kordan> If the initilization fails, InitializeAdapterXxx will return regardless of InitHalDm.
|
||||||
|
// Hence, uninitialized timers cause BSOD when the driver releases resources since the init fail.
|
||||||
|
if (pTimer == 0)
|
||||||
|
{
|
||||||
|
ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_SERIOUS, ("=====>ODM_ReleaseTimer(), The timer is NULL! Please check it!\n"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
PlatformReleaseTimer(Adapter, pTimer);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// ODM FW relative API.
|
||||||
|
//
|
||||||
|
#if (DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
VOID
|
||||||
|
ODM_FillH2CCmd(
|
||||||
|
IN PADAPTER Adapter,
|
||||||
|
IN u1Byte ElementID,
|
||||||
|
IN u4Byte CmdLen,
|
||||||
|
IN pu1Byte pCmdBuffer
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if(IS_HARDWARE_TYPE_JAGUAR(Adapter))
|
||||||
|
{
|
||||||
|
switch(ElementID)
|
||||||
|
{
|
||||||
|
case ODM_H2C_RSSI_REPORT:
|
||||||
|
FillH2CCmd8812(Adapter, H2C_8812_RSSI_REPORT, CmdLen, pCmdBuffer);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if(IS_HARDWARE_TYPE_8188E(Adapter))
|
||||||
|
{
|
||||||
|
switch(ElementID)
|
||||||
|
{
|
||||||
|
case ODM_H2C_PSD_RESULT:
|
||||||
|
FillH2CCmd88E(Adapter, H2C_88E_PSD_RESULT, CmdLen, pCmdBuffer);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch(ElementID)
|
||||||
|
{
|
||||||
|
case ODM_H2C_RSSI_REPORT:
|
||||||
|
FillH2CCmd92C(Adapter, H2C_RSSI_REPORT, CmdLen, pCmdBuffer);
|
||||||
|
case ODM_H2C_PSD_RESULT:
|
||||||
|
FillH2CCmd92C(Adapter, H2C_92C_PSD_RESULT, CmdLen, pCmdBuffer);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
u4Byte
|
||||||
|
ODM_FillH2CCmd(
|
||||||
|
IN pu1Byte pH2CBuffer,
|
||||||
|
IN u4Byte H2CBufferLen,
|
||||||
|
IN u4Byte CmdNum,
|
||||||
|
IN pu4Byte pElementID,
|
||||||
|
IN pu4Byte pCmdLen,
|
||||||
|
IN pu1Byte* pCmbBuffer,
|
||||||
|
IN pu1Byte CmdStartSeq
|
||||||
|
)
|
||||||
|
{
|
||||||
|
#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||||
|
|
||||||
|
#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
|
||||||
|
//FillH2CCmd(pH2CBuffer, H2CBufferLen, CmdNum, pElementID, pCmdLen, pCmbBuffer, CmdStartSeq);
|
||||||
|
return FALSE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -120,7 +120,7 @@
|
||||||
#elif(RTL8723AU_SUPPORT==1)
|
#elif(RTL8723AU_SUPPORT==1)
|
||||||
#include "rtl8723a/Hal8723UHWImg_CE.h"
|
#include "rtl8723a/Hal8723UHWImg_CE.h"
|
||||||
#elif(RTL8188E_SUPPORT==1)
|
#elif(RTL8188E_SUPPORT==1)
|
||||||
#include "rtl8188e/Hal8188EFWImg_CE.h"
|
#include "Hal8188EFWImg_CE.h"
|
||||||
#endif
|
#endif
|
||||||
#elif (DM_ODM_SUPPORT_TYPE == ODM_MP)
|
#elif (DM_ODM_SUPPORT_TYPE == ODM_MP)
|
||||||
|
|
||||||
|
@ -161,8 +161,8 @@
|
||||||
#include "rtl8192c/HalDMOutSrc8192C_CE.h" //for IQK,LCK,Power-tracking
|
#include "rtl8192c/HalDMOutSrc8192C_CE.h" //for IQK,LCK,Power-tracking
|
||||||
#include "rtl8723a_hal.h"
|
#include "rtl8723a_hal.h"
|
||||||
#elif (RTL8188E_SUPPORT==1)
|
#elif (RTL8188E_SUPPORT==1)
|
||||||
#include "rtl8188e/HalPhyRf_8188e.h"//for IQK,LCK,Power-tracking
|
#include "HalPhyRf_8188e.h"//for IQK,LCK,Power-tracking
|
||||||
#include "rtl8188e/Hal8188ERateAdaptive.h"//for RA,Power training
|
#include "Hal8188ERateAdaptive.h"//for RA,Power training
|
||||||
#include "rtl8188e_hal.h"
|
#include "rtl8188e_hal.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -171,52 +171,29 @@
|
||||||
#include "odm_interface.h"
|
#include "odm_interface.h"
|
||||||
#include "odm_reg.h"
|
#include "odm_reg.h"
|
||||||
|
|
||||||
#if (RTL8192C_SUPPORT==1)
|
#include "HalHWImg8188E_MAC.h"
|
||||||
#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
|
#include "HalHWImg8188E_RF.h"
|
||||||
#include "rtl8192c/Hal8192CHWImg_MAC.h"
|
#include "HalHWImg8188E_BB.h"
|
||||||
#include "rtl8192c/Hal8192CHWImg_RF.h"
|
#include "Hal8188EReg.h"
|
||||||
#include "rtl8192c/Hal8192CHWImg_BB.h"
|
|
||||||
#include "rtl8192c/Hal8192CHWImg_FW.h"
|
|
||||||
#endif
|
|
||||||
#include "rtl8192c/odm_RTL8192C.h"
|
|
||||||
#endif
|
|
||||||
#if (RTL8192D_SUPPORT==1)
|
|
||||||
#include "rtl8192d/odm_RTL8192D.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (RTL8723A_SUPPORT==1)
|
|
||||||
#include "rtl8723a/HalHWImg8723A_MAC.h"
|
|
||||||
#include "rtl8723a/HalHWImg8723A_RF.h"
|
|
||||||
#include "rtl8723a/HalHWImg8723A_BB.h"
|
|
||||||
#include "rtl8723a/HalHWImg8723A_FW.h"
|
|
||||||
#include "rtl8723a/odm_RegConfig8723A.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (RTL8188E_SUPPORT==1)
|
|
||||||
#include "rtl8188e/HalHWImg8188E_MAC.h"
|
|
||||||
#include "rtl8188e/HalHWImg8188E_RF.h"
|
|
||||||
#include "rtl8188e/HalHWImg8188E_BB.h"
|
|
||||||
#include "rtl8188e/Hal8188EReg.h"
|
|
||||||
|
|
||||||
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
||||||
#include "rtl8188e/HalPhyRf_8188e.h"
|
#include "HalPhyRf_8188e.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (RTL8188E_FOR_TEST_CHIP >= 1)
|
#if (RTL8188E_FOR_TEST_CHIP >= 1)
|
||||||
#include "rtl8188e/HalHWImg8188E_TestChip_MAC.h"
|
#include "HalHWImg8188E_TestChip_MAC.h"
|
||||||
#include "rtl8188e/HalHWImg8188E_TestChip_RF.h"
|
#include "HalHWImg8188E_TestChip_RF.h"
|
||||||
#include "rtl8188e/HalHWImg8188E_TestChip_BB.h"
|
#include "HalHWImg8188E_TestChip_BB.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_WOWLAN
|
#ifdef CONFIG_WOWLAN
|
||||||
#if (RTL8188E_SUPPORT==1)
|
#if (RTL8188E_SUPPORT==1)
|
||||||
#include "rtl8188e/HalHWImg8188E_FW.h"
|
#include "HalHWImg8188E_FW.h"
|
||||||
#endif
|
#endif
|
||||||
#endif //CONFIG_WOWLAN
|
#endif //CONFIG_WOWLAN
|
||||||
|
|
||||||
#include "rtl8188e/odm_RegConfig8188E.h"
|
#include "odm_RegConfig8188E.h"
|
||||||
#include "rtl8188e/odm_RTL8188E.h"
|
#include "odm_RTL8188E.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // __ODM_PRECOMP_H__
|
#endif // __ODM_PRECOMP_H__
|
||||||
|
|
|
@ -1,97 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*
|
|
||||||
*
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
#include "Hal8188EPwrSeq.h"
|
|
||||||
#include <rtl8188e_hal.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
drivers should parse below arrays and do the corresponding actions
|
|
||||||
*/
|
|
||||||
//3 Power on Array
|
|
||||||
WLAN_PWR_CFG rtl8188E_power_on_flow[RTL8188E_TRANS_CARDEMU_TO_ACT_STEPS+RTL8188E_TRANS_END_STEPS]=
|
|
||||||
{
|
|
||||||
RTL8188E_TRANS_CARDEMU_TO_ACT
|
|
||||||
RTL8188E_TRANS_END
|
|
||||||
};
|
|
||||||
|
|
||||||
//3Radio off Array
|
|
||||||
WLAN_PWR_CFG rtl8188E_radio_off_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_END_STEPS]=
|
|
||||||
{
|
|
||||||
RTL8188E_TRANS_ACT_TO_CARDEMU
|
|
||||||
RTL8188E_TRANS_END
|
|
||||||
};
|
|
||||||
|
|
||||||
//3Card Disable Array
|
|
||||||
WLAN_PWR_CFG rtl8188E_card_disable_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8188E_TRANS_END_STEPS]=
|
|
||||||
{
|
|
||||||
RTL8188E_TRANS_ACT_TO_CARDEMU
|
|
||||||
RTL8188E_TRANS_CARDEMU_TO_CARDDIS
|
|
||||||
RTL8188E_TRANS_END
|
|
||||||
};
|
|
||||||
|
|
||||||
//3 Card Enable Array
|
|
||||||
WLAN_PWR_CFG rtl8188E_card_enable_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8188E_TRANS_END_STEPS]=
|
|
||||||
{
|
|
||||||
RTL8188E_TRANS_CARDDIS_TO_CARDEMU
|
|
||||||
RTL8188E_TRANS_CARDEMU_TO_ACT
|
|
||||||
RTL8188E_TRANS_END
|
|
||||||
};
|
|
||||||
|
|
||||||
//3Suspend Array
|
|
||||||
WLAN_PWR_CFG rtl8188E_suspend_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS+RTL8188E_TRANS_END_STEPS]=
|
|
||||||
{
|
|
||||||
RTL8188E_TRANS_ACT_TO_CARDEMU
|
|
||||||
RTL8188E_TRANS_CARDEMU_TO_SUS
|
|
||||||
RTL8188E_TRANS_END
|
|
||||||
};
|
|
||||||
|
|
||||||
//3 Resume Array
|
|
||||||
WLAN_PWR_CFG rtl8188E_resume_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS+RTL8188E_TRANS_END_STEPS]=
|
|
||||||
{
|
|
||||||
RTL8188E_TRANS_SUS_TO_CARDEMU
|
|
||||||
RTL8188E_TRANS_CARDEMU_TO_ACT
|
|
||||||
RTL8188E_TRANS_END
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//3HWPDN Array
|
|
||||||
WLAN_PWR_CFG rtl8188E_hwpdn_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8188E_TRANS_END_STEPS]=
|
|
||||||
{
|
|
||||||
RTL8188E_TRANS_ACT_TO_CARDEMU
|
|
||||||
RTL8188E_TRANS_CARDEMU_TO_PDN
|
|
||||||
RTL8188E_TRANS_END
|
|
||||||
};
|
|
||||||
|
|
||||||
//3 Enter LPS
|
|
||||||
WLAN_PWR_CFG rtl8188E_enter_lps_flow[RTL8188E_TRANS_ACT_TO_LPS_STEPS+RTL8188E_TRANS_END_STEPS]=
|
|
||||||
{
|
|
||||||
//FW behavior
|
|
||||||
RTL8188E_TRANS_ACT_TO_LPS
|
|
||||||
RTL8188E_TRANS_END
|
|
||||||
};
|
|
||||||
|
|
||||||
//3 Leave LPS
|
|
||||||
WLAN_PWR_CFG rtl8188E_leave_lps_flow[RTL8188E_TRANS_LPS_TO_ACT_STEPS+RTL8188E_TRANS_END_STEPS]=
|
|
||||||
{
|
|
||||||
//FW behavior
|
|
||||||
RTL8188E_TRANS_LPS_TO_ACT
|
|
||||||
RTL8188E_TRANS_END
|
|
||||||
};
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,647 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*
|
|
||||||
*
|
|
||||||
******************************************************************************/
|
|
||||||
//============================================================
|
|
||||||
// Description:
|
|
||||||
//
|
|
||||||
// This file is for 92CE/92CU dynamic mechanism only
|
|
||||||
//
|
|
||||||
//
|
|
||||||
//============================================================
|
|
||||||
#define _RTL8188E_DM_C_
|
|
||||||
|
|
||||||
//============================================================
|
|
||||||
// include files
|
|
||||||
//============================================================
|
|
||||||
#include <drv_conf.h>
|
|
||||||
#include <osdep_service.h>
|
|
||||||
#include <drv_types.h>
|
|
||||||
#include <rtw_byteorder.h>
|
|
||||||
|
|
||||||
#include <rtl8188e_hal.h>
|
|
||||||
|
|
||||||
//============================================================
|
|
||||||
// Global var
|
|
||||||
//============================================================
|
|
||||||
|
|
||||||
|
|
||||||
static VOID
|
|
||||||
dm_CheckProtection(
|
|
||||||
IN PADAPTER Adapter
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo);
|
|
||||||
u1Byte CurRate, RateThreshold;
|
|
||||||
|
|
||||||
if(pMgntInfo->pHTInfo->bCurBW40MHz)
|
|
||||||
RateThreshold = MGN_MCS1;
|
|
||||||
else
|
|
||||||
RateThreshold = MGN_MCS3;
|
|
||||||
|
|
||||||
if(Adapter->TxStats.CurrentInitTxRate <= RateThreshold)
|
|
||||||
{
|
|
||||||
pMgntInfo->bDmDisableProtect = TRUE;
|
|
||||||
DbgPrint("Forced disable protect: %x\n", Adapter->TxStats.CurrentInitTxRate);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pMgntInfo->bDmDisableProtect = FALSE;
|
|
||||||
DbgPrint("Enable protect: %x\n", Adapter->TxStats.CurrentInitTxRate);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static VOID
|
|
||||||
dm_CheckStatistics(
|
|
||||||
IN PADAPTER Adapter
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
if(!Adapter->MgntInfo.bMediaConnect)
|
|
||||||
return;
|
|
||||||
|
|
||||||
//2008.12.10 tynli Add for getting Current_Tx_Rate_Reg flexibly.
|
|
||||||
rtw_hal_get_hwreg( Adapter, HW_VAR_INIT_TX_RATE, (pu1Byte)(&Adapter->TxStats.CurrentInitTxRate) );
|
|
||||||
|
|
||||||
// Calculate current Tx Rate(Successful transmited!!)
|
|
||||||
|
|
||||||
// Calculate current Rx Rate(Successful received!!)
|
|
||||||
|
|
||||||
//for tx tx retry count
|
|
||||||
rtw_hal_get_hwreg( Adapter, HW_VAR_RETRY_COUNT, (pu1Byte)(&Adapter->TxStats.NumTxRetryCount) );
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void dm_CheckPbcGPIO(_adapter *padapter)
|
|
||||||
{
|
|
||||||
u8 tmp1byte;
|
|
||||||
u8 bPbcPressed = _FALSE;
|
|
||||||
|
|
||||||
if(!padapter->registrypriv.hw_wps_pbc)
|
|
||||||
return;
|
|
||||||
|
|
||||||
#ifdef CONFIG_USB_HCI
|
|
||||||
tmp1byte = rtw_read8(padapter, GPIO_IO_SEL);
|
|
||||||
tmp1byte |= (HAL_8188E_HW_GPIO_WPS_BIT);
|
|
||||||
rtw_write8(padapter, GPIO_IO_SEL, tmp1byte); //enable GPIO[2] as output mode
|
|
||||||
|
|
||||||
tmp1byte &= ~(HAL_8188E_HW_GPIO_WPS_BIT);
|
|
||||||
rtw_write8(padapter, GPIO_IN, tmp1byte); //reset the floating voltage level
|
|
||||||
|
|
||||||
tmp1byte = rtw_read8(padapter, GPIO_IO_SEL);
|
|
||||||
tmp1byte &= ~(HAL_8188E_HW_GPIO_WPS_BIT);
|
|
||||||
rtw_write8(padapter, GPIO_IO_SEL, tmp1byte); //enable GPIO[2] as input mode
|
|
||||||
|
|
||||||
tmp1byte =rtw_read8(padapter, GPIO_IN);
|
|
||||||
|
|
||||||
if (tmp1byte == 0xff)
|
|
||||||
return ;
|
|
||||||
|
|
||||||
if (tmp1byte&HAL_8188E_HW_GPIO_WPS_BIT)
|
|
||||||
{
|
|
||||||
bPbcPressed = _TRUE;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
tmp1byte = rtw_read8(padapter, GPIO_IN);
|
|
||||||
//RT_TRACE(COMP_IO, DBG_TRACE, ("dm_CheckPbcGPIO - %x\n", tmp1byte));
|
|
||||||
|
|
||||||
if (tmp1byte == 0xff || padapter->init_adpt_in_progress)
|
|
||||||
return ;
|
|
||||||
|
|
||||||
if((tmp1byte&HAL_8188E_HW_GPIO_WPS_BIT)==0)
|
|
||||||
{
|
|
||||||
bPbcPressed = _TRUE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if( _TRUE == bPbcPressed)
|
|
||||||
{
|
|
||||||
// Here we only set bPbcPressed to true
|
|
||||||
// After trigger PBC, the variable will be set to false
|
|
||||||
DBG_8192C("CheckPbcGPIO - PBC is pressed\n");
|
|
||||||
|
|
||||||
#ifdef RTK_DMP_PLATFORM
|
|
||||||
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12))
|
|
||||||
kobject_uevent(&padapter->pnetdev->dev.kobj, KOBJ_NET_PBC);
|
|
||||||
#else
|
|
||||||
kobject_hotplug(&padapter->pnetdev->class_dev.kobj, KOBJ_NET_PBC);
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
|
|
||||||
if ( padapter->pid[0] == 0 )
|
|
||||||
{ // 0 is the default value and it means the application monitors the HW PBC doesn't privde its pid to driver.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
rtw_signal_process(padapter->pid[0], SIGUSR1);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_PCI_HCI
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// Perform interrupt migration dynamically to reduce CPU utilization.
|
|
||||||
//
|
|
||||||
// Assumption:
|
|
||||||
// 1. Do not enable migration under WIFI test.
|
|
||||||
//
|
|
||||||
// Created by Roger, 2010.03.05.
|
|
||||||
//
|
|
||||||
VOID
|
|
||||||
dm_InterruptMigration(
|
|
||||||
IN PADAPTER Adapter
|
|
||||||
)
|
|
||||||
{
|
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
|
|
||||||
struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
|
|
||||||
BOOLEAN bCurrentIntMt, bCurrentACIntDisable;
|
|
||||||
BOOLEAN IntMtToSet = _FALSE;
|
|
||||||
BOOLEAN ACIntToSet = _FALSE;
|
|
||||||
|
|
||||||
|
|
||||||
// Retrieve current interrupt migration and Tx four ACs IMR settings first.
|
|
||||||
bCurrentIntMt = pHalData->bInterruptMigration;
|
|
||||||
bCurrentACIntDisable = pHalData->bDisableTxInt;
|
|
||||||
|
|
||||||
//
|
|
||||||
// <Roger_Notes> Currently we use busy traffic for reference instead of RxIntOK counts to prevent non-linear Rx statistics
|
|
||||||
// when interrupt migration is set before. 2010.03.05.
|
|
||||||
//
|
|
||||||
if(!Adapter->registrypriv.wifi_spec &&
|
|
||||||
(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) &&
|
|
||||||
pmlmepriv->LinkDetectInfo.bHigherBusyTraffic)
|
|
||||||
{
|
|
||||||
IntMtToSet = _TRUE;
|
|
||||||
|
|
||||||
// To check whether we should disable Tx interrupt or not.
|
|
||||||
if(pmlmepriv->LinkDetectInfo.bHigherBusyRxTraffic )
|
|
||||||
ACIntToSet = _TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Update current settings.
|
|
||||||
if( bCurrentIntMt != IntMtToSet ){
|
|
||||||
DBG_8192C("%s(): Update interrrupt migration(%d)\n",__FUNCTION__,IntMtToSet);
|
|
||||||
if(IntMtToSet)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// <Roger_Notes> Set interrrupt migration timer and corresponging Tx/Rx counter.
|
|
||||||
// timer 25ns*0xfa0=100us for 0xf packets.
|
|
||||||
// 2010.03.05.
|
|
||||||
//
|
|
||||||
rtw_write32(Adapter, REG_INT_MIG, 0xff000fa0);// 0x306:Rx, 0x307:Tx
|
|
||||||
pHalData->bInterruptMigration = IntMtToSet;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Reset all interrupt migration settings.
|
|
||||||
rtw_write32(Adapter, REG_INT_MIG, 0);
|
|
||||||
pHalData->bInterruptMigration = IntMtToSet;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*if( bCurrentACIntDisable != ACIntToSet ){
|
|
||||||
DBG_8192C("%s(): Update AC interrrupt(%d)\n",__FUNCTION__,ACIntToSet);
|
|
||||||
if(ACIntToSet) // Disable four ACs interrupts.
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// <Roger_Notes> Disable VO, VI, BE and BK four AC interrupts to gain more efficient CPU utilization.
|
|
||||||
// When extremely highly Rx OK occurs, we will disable Tx interrupts.
|
|
||||||
// 2010.03.05.
|
|
||||||
//
|
|
||||||
UpdateInterruptMask8192CE( Adapter, 0, RT_AC_INT_MASKS );
|
|
||||||
pHalData->bDisableTxInt = ACIntToSet;
|
|
||||||
}
|
|
||||||
else// Enable four ACs interrupts.
|
|
||||||
{
|
|
||||||
UpdateInterruptMask8192CE( Adapter, RT_AC_INT_MASKS, 0 );
|
|
||||||
pHalData->bDisableTxInt = ACIntToSet;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
|
||||||
// Initialize GPIO setting registers
|
|
||||||
//
|
|
||||||
static void
|
|
||||||
dm_InitGPIOSetting(
|
|
||||||
IN PADAPTER Adapter
|
|
||||||
)
|
|
||||||
{
|
|
||||||
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
|
|
||||||
|
|
||||||
u8 tmp1byte;
|
|
||||||
|
|
||||||
tmp1byte = rtw_read8(Adapter, REG_GPIO_MUXCFG);
|
|
||||||
tmp1byte &= (GPIOSEL_GPIO | ~GPIOSEL_ENBT);
|
|
||||||
|
|
||||||
#ifdef CONFIG_BT_COEXIST
|
|
||||||
// UMB-B cut bug. We need to support the modification.
|
|
||||||
if (IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID) &&
|
|
||||||
pHalData->bt_coexist.BT_Coexist)
|
|
||||||
{
|
|
||||||
tmp1byte |= (BIT5);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
rtw_write8(Adapter, REG_GPIO_MUXCFG, tmp1byte);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//============================================================
|
|
||||||
// functions
|
|
||||||
//============================================================
|
|
||||||
static void Init_ODM_ComInfo_88E(PADAPTER Adapter)
|
|
||||||
{
|
|
||||||
|
|
||||||
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
|
|
||||||
struct dm_priv *pdmpriv = &pHalData->dmpriv;
|
|
||||||
PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
|
|
||||||
u8 cut_ver,fab_ver;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Init Value
|
|
||||||
//
|
|
||||||
_rtw_memset(pDM_Odm,0,sizeof(pDM_Odm));
|
|
||||||
|
|
||||||
pDM_Odm->Adapter = Adapter;
|
|
||||||
|
|
||||||
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_PLATFORM,ODM_CE);
|
|
||||||
|
|
||||||
if(Adapter->interface_type == RTW_GSPI )
|
|
||||||
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_INTERFACE,ODM_ITRF_SDIO);
|
|
||||||
else
|
|
||||||
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_INTERFACE,Adapter->interface_type);//RTL871X_HCI_TYPE
|
|
||||||
|
|
||||||
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_IC_TYPE,ODM_RTL8188E);
|
|
||||||
|
|
||||||
fab_ver = ODM_TSMC;
|
|
||||||
cut_ver = ODM_CUT_A;
|
|
||||||
|
|
||||||
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_FAB_VER,fab_ver);
|
|
||||||
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_CUT_VER,cut_ver);
|
|
||||||
|
|
||||||
ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_MP_TEST_CHIP,IS_NORMAL_CHIP(pHalData->VersionID));
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
//#ifdef CONFIG_USB_HCI
|
|
||||||
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_BOARD_TYPE,pHalData->BoardType);
|
|
||||||
|
|
||||||
if(pHalData->BoardType == BOARD_USB_High_PA){
|
|
||||||
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_EXT_LNA,_TRUE);
|
|
||||||
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_EXT_PA,_TRUE);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_PATCH_ID,pHalData->CustomerID);
|
|
||||||
// ODM_CMNINFO_BINHCT_TEST only for MP Team
|
|
||||||
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_BWIFI_TEST,Adapter->registrypriv.wifi_spec);
|
|
||||||
|
|
||||||
|
|
||||||
if(pHalData->rf_type == RF_1T1R){
|
|
||||||
ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_RF_TYPE,ODM_1T1R);
|
|
||||||
}
|
|
||||||
else if(pHalData->rf_type == RF_2T2R){
|
|
||||||
ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_RF_TYPE,ODM_2T2R);
|
|
||||||
}
|
|
||||||
else if(pHalData->rf_type == RF_1T2R){
|
|
||||||
ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_RF_TYPE,ODM_1T2R);
|
|
||||||
}
|
|
||||||
|
|
||||||
ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_ANTENNA_TYPE, pHalData->TRxAntDivType);
|
|
||||||
|
|
||||||
#ifdef CONFIG_DISABLE_ODM
|
|
||||||
pdmpriv->InitODMFlag = 0;
|
|
||||||
#else
|
|
||||||
pdmpriv->InitODMFlag = ODM_RF_CALIBRATION |
|
|
||||||
ODM_RF_TX_PWR_TRACK //|
|
|
||||||
;
|
|
||||||
//if(pHalData->AntDivCfg)
|
|
||||||
// pdmpriv->InitODMFlag |= ODM_BB_ANT_DIV;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_ABILITY,pdmpriv->InitODMFlag);
|
|
||||||
|
|
||||||
}
|
|
||||||
static void Update_ODM_ComInfo_88E(PADAPTER Adapter)
|
|
||||||
{
|
|
||||||
struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
|
|
||||||
struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
|
|
||||||
struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(Adapter);
|
|
||||||
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
|
|
||||||
PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
|
|
||||||
struct dm_priv *pdmpriv = &pHalData->dmpriv;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
pdmpriv->InitODMFlag = 0
|
|
||||||
| ODM_BB_DIG
|
|
||||||
#ifdef CONFIG_ODM_REFRESH_RAMASK
|
|
||||||
| ODM_BB_RA_MASK
|
|
||||||
#endif
|
|
||||||
| ODM_BB_DYNAMIC_TXPWR
|
|
||||||
| ODM_BB_FA_CNT
|
|
||||||
| ODM_BB_RSSI_MONITOR
|
|
||||||
| ODM_BB_CCK_PD
|
|
||||||
| ODM_BB_PWR_SAVE
|
|
||||||
| ODM_RF_CALIBRATION
|
|
||||||
| ODM_RF_TX_PWR_TRACK
|
|
||||||
#ifdef CONFIG_ODM_ADAPTIVITY
|
|
||||||
| ODM_BB_ADAPTIVITY
|
|
||||||
#endif
|
|
||||||
;
|
|
||||||
|
|
||||||
if (!Adapter->registrypriv.qos_opt_enable) {
|
|
||||||
pdmpriv->InitODMFlag |= ODM_MAC_EDCA_TURBO;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(pHalData->AntDivCfg)
|
|
||||||
pdmpriv->InitODMFlag |= ODM_BB_ANT_DIV;
|
|
||||||
|
|
||||||
#if (MP_DRIVER==1)
|
|
||||||
if (Adapter->registrypriv.mp_mode == 1) {
|
|
||||||
pdmpriv->InitODMFlag = 0
|
|
||||||
| ODM_RF_CALIBRATION
|
|
||||||
| ODM_RF_TX_PWR_TRACK
|
|
||||||
;
|
|
||||||
}
|
|
||||||
#endif//(MP_DRIVER==1)
|
|
||||||
|
|
||||||
#ifdef CONFIG_DISABLE_ODM
|
|
||||||
pdmpriv->InitODMFlag = 0;
|
|
||||||
#endif//CONFIG_DISABLE_ODM
|
|
||||||
|
|
||||||
ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_ABILITY,pdmpriv->InitODMFlag);
|
|
||||||
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_TX_UNI,&(Adapter->xmitpriv.tx_bytes));
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_RX_UNI,&(Adapter->recvpriv.rx_bytes));
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_WM_MODE,&(pmlmeext->cur_wireless_mode));
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_SEC_CHNL_OFFSET,&(pHalData->nCur40MhzPrimeSC));
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_SEC_MODE,&(Adapter->securitypriv.dot11PrivacyAlgrthm));
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BW,&(pHalData->CurrentChannelBW ));
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_CHNL,&( pHalData->CurrentChannel));
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_NET_CLOSED,&( Adapter->net_closed));
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_MP_MODE,&(Adapter->registrypriv.mp_mode));
|
|
||||||
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BAND,&(pDM_Odm->u1Byte_temp));
|
|
||||||
//================= only for 8192D =================
|
|
||||||
/*
|
|
||||||
//pHalData->CurrentBandType92D
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BAND,&(pDM_Odm->u1Byte_temp));
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_DMSP_GET_VALUE,&(pDM_Odm->u1Byte_temp));
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BUDDY_ADAPTOR,&(pDM_Odm->PADAPTER_temp));
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_DMSP_IS_MASTER,&(pDM_Odm->u1Byte_temp));
|
|
||||||
//================= only for 8192D =================
|
|
||||||
// driver havn't those variable now
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BT_OPERATION,&(pDM_Odm->u1Byte_temp));
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BT_DISABLE_EDCA,&(pDM_Odm->u1Byte_temp));
|
|
||||||
*/
|
|
||||||
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_SCAN,&(pmlmepriv->bScanInProcess));
|
|
||||||
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_POWER_SAVING,&(pwrctrlpriv->bpower_saving));
|
|
||||||
ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_ANTENNA_TYPE, pHalData->TRxAntDivType);
|
|
||||||
|
|
||||||
for(i=0; i< NUM_STA; i++)
|
|
||||||
{
|
|
||||||
//pDM_Odm->pODM_StaInfo[i] = NULL;
|
|
||||||
ODM_CmnInfoPtrArrayHook(pDM_Odm, ODM_CMNINFO_STA_STATUS,i,NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
rtl8188e_InitHalDm(
|
|
||||||
IN PADAPTER Adapter
|
|
||||||
)
|
|
||||||
{
|
|
||||||
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
|
|
||||||
struct dm_priv *pdmpriv = &pHalData->dmpriv;
|
|
||||||
PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
|
|
||||||
u8 i;
|
|
||||||
|
|
||||||
#ifdef CONFIG_USB_HCI
|
|
||||||
dm_InitGPIOSetting(Adapter);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pdmpriv->DM_Type = DM_Type_ByDriver;
|
|
||||||
pdmpriv->DMFlag = DYNAMIC_FUNC_DISABLE;
|
|
||||||
|
|
||||||
Update_ODM_ComInfo_88E(Adapter);
|
|
||||||
ODM_DMInit(pDM_Odm);
|
|
||||||
|
|
||||||
Adapter->fix_rate = 0xFF;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
VOID
|
|
||||||
rtl8188e_HalDmWatchDog(
|
|
||||||
IN PADAPTER Adapter
|
|
||||||
)
|
|
||||||
{
|
|
||||||
BOOLEAN bFwCurrentInPSMode = _FALSE;
|
|
||||||
BOOLEAN bFwPSAwake = _TRUE;
|
|
||||||
u8 hw_init_completed = _FALSE;
|
|
||||||
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
|
|
||||||
struct dm_priv *pdmpriv = &pHalData->dmpriv;
|
|
||||||
PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
|
|
||||||
#ifdef CONFIG_CONCURRENT_MODE
|
|
||||||
PADAPTER pbuddy_adapter = Adapter->pbuddy_adapter;
|
|
||||||
#endif //CONFIG_CONCURRENT_MODE
|
|
||||||
|
|
||||||
_func_enter_;
|
|
||||||
|
|
||||||
hw_init_completed = Adapter->hw_init_completed;
|
|
||||||
|
|
||||||
if (hw_init_completed == _FALSE)
|
|
||||||
goto skip_dm;
|
|
||||||
|
|
||||||
#ifdef CONFIG_LPS
|
|
||||||
bFwCurrentInPSMode = adapter_to_pwrctl(Adapter)->bFwCurrentInPSMode;
|
|
||||||
rtw_hal_get_hwreg(Adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bFwPSAwake));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_P2P_PS
|
|
||||||
// Fw is under p2p powersaving mode, driver should stop dynamic mechanism.
|
|
||||||
// modifed by thomas. 2011.06.11.
|
|
||||||
if(Adapter->wdinfo.p2p_ps_mode)
|
|
||||||
bFwPSAwake = _FALSE;
|
|
||||||
#endif //CONFIG_P2P_PS
|
|
||||||
|
|
||||||
if( (hw_init_completed == _TRUE)
|
|
||||||
&& ((!bFwCurrentInPSMode) && bFwPSAwake))
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Calculate Tx/Rx statistics.
|
|
||||||
//
|
|
||||||
dm_CheckStatistics(Adapter);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Dynamically switch RTS/CTS protection.
|
|
||||||
//
|
|
||||||
//dm_CheckProtection(Adapter);
|
|
||||||
|
|
||||||
#ifdef CONFIG_PCI_HCI
|
|
||||||
// 20100630 Joseph: Disable Interrupt Migration mechanism temporarily because it degrades Rx throughput.
|
|
||||||
// Tx Migration settings.
|
|
||||||
//dm_InterruptMigration(Adapter);
|
|
||||||
|
|
||||||
//if(Adapter->HalFunc.TxCheckStuckHandler(Adapter))
|
|
||||||
// PlatformScheduleWorkItem(&(GET_HAL_DATA(Adapter)->HalResetWorkItem));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//ODM
|
|
||||||
if (hw_init_completed == _TRUE)
|
|
||||||
{
|
|
||||||
u8 bLinked=_FALSE;
|
|
||||||
u8 bsta_state = _FALSE;
|
|
||||||
|
|
||||||
#ifdef CONFIG_DISABLE_ODM
|
|
||||||
pHalData->odmpriv.SupportAbility = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(rtw_linked_check(Adapter))
|
|
||||||
bLinked = _TRUE;
|
|
||||||
|
|
||||||
#ifdef CONFIG_CONCURRENT_MODE
|
|
||||||
if(pbuddy_adapter && rtw_linked_check(pbuddy_adapter))
|
|
||||||
bLinked = _TRUE;
|
|
||||||
#endif //CONFIG_CONCURRENT_MODE
|
|
||||||
ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_LINK, bLinked);
|
|
||||||
|
|
||||||
|
|
||||||
if (check_fwstate(&Adapter->mlmepriv, WIFI_STATION_STATE))
|
|
||||||
bsta_state = _TRUE;
|
|
||||||
#ifdef CONFIG_CONCURRENT_MODE
|
|
||||||
if(pbuddy_adapter && check_fwstate(&pbuddy_adapter->mlmepriv, WIFI_STATION_STATE))
|
|
||||||
bsta_state = _TRUE;
|
|
||||||
#endif //CONFIG_CONCURRENT_MODE
|
|
||||||
ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_STATION_STATE, bsta_state);
|
|
||||||
|
|
||||||
ODM_DMWatchdog(&pHalData->odmpriv);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
skip_dm:
|
|
||||||
|
|
||||||
// Check GPIO to determine current RF on/off and Pbc status.
|
|
||||||
// Check Hardware Radio ON/OFF or not
|
|
||||||
#ifdef CONFIG_PCI_HCI
|
|
||||||
if(pHalData->bGpioHwWpsPbc)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
//temp removed
|
|
||||||
//dm_CheckPbcGPIO(Adapter);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8188e_init_dm_priv(IN PADAPTER Adapter)
|
|
||||||
{
|
|
||||||
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
|
|
||||||
struct dm_priv *pdmpriv = &pHalData->dmpriv;
|
|
||||||
PDM_ODM_T podmpriv = &pHalData->odmpriv;
|
|
||||||
_rtw_memset(pdmpriv, 0, sizeof(struct dm_priv));
|
|
||||||
//_rtw_spinlock_init(&(pHalData->odm_stainfo_lock));
|
|
||||||
Init_ODM_ComInfo_88E(Adapter);
|
|
||||||
#ifdef CONFIG_SW_ANTENNA_DIVERSITY
|
|
||||||
//_init_timer(&(pdmpriv->SwAntennaSwitchTimer), Adapter->pnetdev , odm_SW_AntennaSwitchCallback, Adapter);
|
|
||||||
ODM_InitAllTimers(podmpriv );
|
|
||||||
#endif
|
|
||||||
ODM_InitDebugSetting(podmpriv);
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8188e_deinit_dm_priv(IN PADAPTER Adapter)
|
|
||||||
{
|
|
||||||
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
|
|
||||||
struct dm_priv *pdmpriv = &pHalData->dmpriv;
|
|
||||||
PDM_ODM_T podmpriv = &pHalData->odmpriv;
|
|
||||||
//_rtw_spinlock_free(&pHalData->odm_stainfo_lock);
|
|
||||||
#ifdef CONFIG_SW_ANTENNA_DIVERSITY
|
|
||||||
//_cancel_timer_ex(&pdmpriv->SwAntennaSwitchTimer);
|
|
||||||
ODM_CancelAllTimers(podmpriv);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_ANTENNA_DIVERSITY
|
|
||||||
// Add new function to reset the state of antenna diversity before link.
|
|
||||||
//
|
|
||||||
// Compare RSSI for deciding antenna
|
|
||||||
void AntDivCompare8188E(PADAPTER Adapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src)
|
|
||||||
{
|
|
||||||
//PADAPTER Adapter = pDM_Odm->Adapter ;
|
|
||||||
|
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
|
|
||||||
if(0 != pHalData->AntDivCfg )
|
|
||||||
{
|
|
||||||
//DBG_8192C("update_network=> orgRSSI(%d)(%d),newRSSI(%d)(%d)\n",dst->Rssi,query_rx_pwr_percentage(dst->Rssi),
|
|
||||||
// src->Rssi,query_rx_pwr_percentage(src->Rssi));
|
|
||||||
//select optimum_antenna for before linked =>For antenna diversity
|
|
||||||
if(dst->Rssi >= src->Rssi )//keep org parameter
|
|
||||||
{
|
|
||||||
src->Rssi = dst->Rssi;
|
|
||||||
src->PhyInfo.Optimum_antenna = dst->PhyInfo.Optimum_antenna;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add new function to reset the state of antenna diversity before link.
|
|
||||||
u8 AntDivBeforeLink8188E(PADAPTER Adapter )
|
|
||||||
{
|
|
||||||
|
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
|
|
||||||
PDM_ODM_T pDM_Odm =&pHalData->odmpriv;
|
|
||||||
SWAT_T *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
|
|
||||||
struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
|
|
||||||
|
|
||||||
// Condition that does not need to use antenna diversity.
|
|
||||||
if(pHalData->AntDivCfg==0)
|
|
||||||
{
|
|
||||||
//DBG_8192C("odm_AntDivBeforeLink8192C(): No AntDiv Mechanism.\n");
|
|
||||||
return _FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
|
|
||||||
{
|
|
||||||
return _FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(pDM_SWAT_Table->SWAS_NoLink_State == 0){
|
|
||||||
//switch channel
|
|
||||||
pDM_SWAT_Table->SWAS_NoLink_State = 1;
|
|
||||||
pDM_SWAT_Table->CurAntenna = (pDM_SWAT_Table->CurAntenna==Antenna_A)?Antenna_B:Antenna_A;
|
|
||||||
|
|
||||||
//PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, 0x300, pDM_SWAT_Table->CurAntenna);
|
|
||||||
rtw_antenna_select_cmd(Adapter, pDM_SWAT_Table->CurAntenna, _FALSE);
|
|
||||||
//DBG_8192C("%s change antenna to ANT_( %s ).....\n",__FUNCTION__, (pDM_SWAT_Table->CurAntenna==Antenna_A)?"A":"B");
|
|
||||||
return _TRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pDM_SWAT_Table->SWAS_NoLink_State = 0;
|
|
||||||
return _FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,350 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* 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 _RTL8188E_REDESC_C_
|
|
||||||
|
|
||||||
#include <drv_conf.h>
|
|
||||||
#include <osdep_service.h>
|
|
||||||
#include <drv_types.h>
|
|
||||||
#include <rtl8188e_hal.h>
|
|
||||||
|
|
||||||
static s32 translate2dbm(u8 signal_strength_idx)
|
|
||||||
{
|
|
||||||
s32 signal_power; // in dBm.
|
|
||||||
|
|
||||||
|
|
||||||
// Translate to dBm (x=0.5y-95).
|
|
||||||
signal_power = (s32)((signal_strength_idx + 1) >> 1);
|
|
||||||
signal_power -= 95;
|
|
||||||
|
|
||||||
return signal_power;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void process_rssi(_adapter *padapter,union recv_frame *prframe)
|
|
||||||
{
|
|
||||||
u32 last_rssi, tmp_val;
|
|
||||||
struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
|
|
||||||
#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
|
|
||||||
struct signal_stat * signal_stat = &padapter->recvpriv.signal_strength_data;
|
|
||||||
#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
|
|
||||||
|
|
||||||
//DBG_8192C("process_rssi=> pattrib->rssil(%d) signal_strength(%d)\n ",pattrib->RecvSignalPower,pattrib->signal_strength);
|
|
||||||
//if(pRfd->Status.bPacketToSelf || pRfd->Status.bPacketBeacon)
|
|
||||||
{
|
|
||||||
|
|
||||||
#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
|
|
||||||
if(signal_stat->update_req) {
|
|
||||||
signal_stat->total_num = 0;
|
|
||||||
signal_stat->total_val = 0;
|
|
||||||
signal_stat->update_req = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
signal_stat->total_num++;
|
|
||||||
signal_stat->total_val += pattrib->phy_info.SignalStrength;
|
|
||||||
signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;
|
|
||||||
#else //CONFIG_NEW_SIGNAL_STAT_PROCESS
|
|
||||||
|
|
||||||
//Adapter->RxStats.RssiCalculateCnt++; //For antenna Test
|
|
||||||
if(padapter->recvpriv.signal_strength_data.total_num++ >= PHY_RSSI_SLID_WIN_MAX)
|
|
||||||
{
|
|
||||||
padapter->recvpriv.signal_strength_data.total_num = PHY_RSSI_SLID_WIN_MAX;
|
|
||||||
last_rssi = padapter->recvpriv.signal_strength_data.elements[padapter->recvpriv.signal_strength_data.index];
|
|
||||||
padapter->recvpriv.signal_strength_data.total_val -= last_rssi;
|
|
||||||
}
|
|
||||||
padapter->recvpriv.signal_strength_data.total_val +=pattrib->phy_info.SignalStrength;
|
|
||||||
|
|
||||||
padapter->recvpriv.signal_strength_data.elements[padapter->recvpriv.signal_strength_data.index++] = pattrib->phy_info.SignalStrength;
|
|
||||||
if(padapter->recvpriv.signal_strength_data.index >= PHY_RSSI_SLID_WIN_MAX)
|
|
||||||
padapter->recvpriv.signal_strength_data.index = 0;
|
|
||||||
|
|
||||||
|
|
||||||
tmp_val = padapter->recvpriv.signal_strength_data.total_val/padapter->recvpriv.signal_strength_data.total_num;
|
|
||||||
|
|
||||||
if(padapter->recvpriv.is_signal_dbg) {
|
|
||||||
padapter->recvpriv.signal_strength= padapter->recvpriv.signal_strength_dbg;
|
|
||||||
padapter->recvpriv.rssi=(s8)translate2dbm((u8)padapter->recvpriv.signal_strength_dbg);
|
|
||||||
} else {
|
|
||||||
padapter->recvpriv.signal_strength= tmp_val;
|
|
||||||
padapter->recvpriv.rssi=(s8)translate2dbm((u8)tmp_val);
|
|
||||||
}
|
|
||||||
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("UI RSSI = %d, ui_rssi.TotalVal = %d, ui_rssi.TotalNum = %d\n", tmp_val, padapter->recvpriv.signal_strength_data.total_val,padapter->recvpriv.signal_strength_data.total_num));
|
|
||||||
#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
|
|
||||||
}
|
|
||||||
|
|
||||||
}// Process_UI_RSSI_8192C
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void process_link_qual(_adapter *padapter,union recv_frame *prframe)
|
|
||||||
{
|
|
||||||
u32 last_evm=0, tmpVal;
|
|
||||||
struct rx_pkt_attrib *pattrib;
|
|
||||||
#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
|
|
||||||
struct signal_stat * signal_stat;
|
|
||||||
#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
|
|
||||||
|
|
||||||
if(prframe == NULL || padapter==NULL){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
pattrib = &prframe->u.hdr.attrib;
|
|
||||||
#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
|
|
||||||
signal_stat = &padapter->recvpriv.signal_qual_data;
|
|
||||||
#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
|
|
||||||
|
|
||||||
//DBG_8192C("process_link_qual=> pattrib->signal_qual(%d)\n ",pattrib->signal_qual);
|
|
||||||
|
|
||||||
#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
|
|
||||||
if(signal_stat->update_req) {
|
|
||||||
signal_stat->total_num = 0;
|
|
||||||
signal_stat->total_val = 0;
|
|
||||||
signal_stat->update_req = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
signal_stat->total_num++;
|
|
||||||
signal_stat->total_val += pattrib->phy_info.SignalQuality;
|
|
||||||
signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;
|
|
||||||
|
|
||||||
#else //CONFIG_NEW_SIGNAL_STAT_PROCESS
|
|
||||||
if(pattrib->phy_info.SignalQuality != 0)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// 1. Record the general EVM to the sliding window.
|
|
||||||
//
|
|
||||||
if(padapter->recvpriv.signal_qual_data.total_num++ >= PHY_LINKQUALITY_SLID_WIN_MAX)
|
|
||||||
{
|
|
||||||
padapter->recvpriv.signal_qual_data.total_num = PHY_LINKQUALITY_SLID_WIN_MAX;
|
|
||||||
last_evm = padapter->recvpriv.signal_qual_data.elements[padapter->recvpriv.signal_qual_data.index];
|
|
||||||
padapter->recvpriv.signal_qual_data.total_val -= last_evm;
|
|
||||||
}
|
|
||||||
padapter->recvpriv.signal_qual_data.total_val += pattrib->phy_info.SignalQuality;
|
|
||||||
|
|
||||||
padapter->recvpriv.signal_qual_data.elements[padapter->recvpriv.signal_qual_data.index++] = pattrib->phy_info.SignalQuality;
|
|
||||||
if(padapter->recvpriv.signal_qual_data.index >= PHY_LINKQUALITY_SLID_WIN_MAX)
|
|
||||||
padapter->recvpriv.signal_qual_data.index = 0;
|
|
||||||
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("Total SQ=%d pattrib->signal_qual= %d\n", padapter->recvpriv.signal_qual_data.total_val, pattrib->phy_info.SignalQuality));
|
|
||||||
|
|
||||||
// <1> Showed on UI for user, in percentage.
|
|
||||||
tmpVal = padapter->recvpriv.signal_qual_data.total_val/padapter->recvpriv.signal_qual_data.total_num;
|
|
||||||
padapter->recvpriv.signal_qual=(u8)tmpVal;
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,(" pattrib->signal_qual =%d\n", pattrib->phy_info.SignalQuality));
|
|
||||||
}
|
|
||||||
#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//void rtl8188e_process_phy_info(_adapter *padapter, union recv_frame *prframe)
|
|
||||||
void rtl8188e_process_phy_info(_adapter *padapter, void *prframe)
|
|
||||||
{
|
|
||||||
union recv_frame *precvframe = (union recv_frame *)prframe;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check RSSI
|
|
||||||
//
|
|
||||||
process_rssi(padapter, precvframe);
|
|
||||||
//
|
|
||||||
// Check PWDB.
|
|
||||||
//
|
|
||||||
//process_PWDB(padapter, precvframe);
|
|
||||||
|
|
||||||
//UpdateRxSignalStatistics8192C(Adapter, pRfd);
|
|
||||||
//
|
|
||||||
// Check EVM
|
|
||||||
//
|
|
||||||
process_link_qual(padapter, precvframe);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void update_recvframe_attrib_88e(
|
|
||||||
union recv_frame *precvframe,
|
|
||||||
struct recv_stat *prxstat)
|
|
||||||
{
|
|
||||||
struct rx_pkt_attrib *pattrib;
|
|
||||||
struct recv_stat report;
|
|
||||||
PRXREPORT prxreport;
|
|
||||||
//struct recv_frame_hdr *phdr;
|
|
||||||
|
|
||||||
//phdr = &precvframe->u.hdr;
|
|
||||||
|
|
||||||
report.rxdw0 = le32_to_cpu(prxstat->rxdw0);
|
|
||||||
report.rxdw1 = le32_to_cpu(prxstat->rxdw1);
|
|
||||||
report.rxdw2 = le32_to_cpu(prxstat->rxdw2);
|
|
||||||
report.rxdw3 = le32_to_cpu(prxstat->rxdw3);
|
|
||||||
report.rxdw4 = le32_to_cpu(prxstat->rxdw4);
|
|
||||||
report.rxdw5 = le32_to_cpu(prxstat->rxdw5);
|
|
||||||
|
|
||||||
prxreport = (PRXREPORT)&report;
|
|
||||||
|
|
||||||
pattrib = &precvframe->u.hdr.attrib;
|
|
||||||
_rtw_memset(pattrib, 0, sizeof(struct rx_pkt_attrib));
|
|
||||||
|
|
||||||
pattrib->crc_err = (u8)((report.rxdw0 >> 14) & 0x1);;//(u8)prxreport->crc32;
|
|
||||||
|
|
||||||
// update rx report to recv_frame attribute
|
|
||||||
pattrib->pkt_rpt_type = (u8)((report.rxdw3 >> 14) & 0x3);//prxreport->rpt_sel;
|
|
||||||
|
|
||||||
if(pattrib->pkt_rpt_type == NORMAL_RX)//Normal rx packet
|
|
||||||
{
|
|
||||||
pattrib->pkt_len = (u16)(report.rxdw0 &0x00003fff);//(u16)prxreport->pktlen;
|
|
||||||
pattrib->drvinfo_sz = (u8)((report.rxdw0 >> 16) & 0xf) * 8;//(u8)(prxreport->drvinfosize << 3);
|
|
||||||
|
|
||||||
pattrib->physt = (u8)((report.rxdw0 >> 26) & 0x1);//(u8)prxreport->physt;
|
|
||||||
|
|
||||||
pattrib->bdecrypted = (report.rxdw0 & BIT(27))? 0:1;//(u8)(prxreport->swdec ? 0 : 1);
|
|
||||||
pattrib->encrypt = (u8)((report.rxdw0 >> 20) & 0x7);//(u8)prxreport->security;
|
|
||||||
|
|
||||||
pattrib->qos = (u8)((report.rxdw0 >> 23) & 0x1);//(u8)prxreport->qos;
|
|
||||||
pattrib->priority = (u8)((report.rxdw1 >> 8) & 0xf);//(u8)prxreport->tid;
|
|
||||||
|
|
||||||
pattrib->amsdu = (u8)((report.rxdw1 >> 13) & 0x1);//(u8)prxreport->amsdu;
|
|
||||||
|
|
||||||
pattrib->seq_num = (u16)(report.rxdw2 & 0x00000fff);//(u16)prxreport->seq;
|
|
||||||
pattrib->frag_num = (u8)((report.rxdw2 >> 12) & 0xf);//(u8)prxreport->frag;
|
|
||||||
pattrib->mfrag = (u8)((report.rxdw1 >> 27) & 0x1);//(u8)prxreport->mf;
|
|
||||||
pattrib->mdata = (u8)((report.rxdw1 >> 26) & 0x1);//(u8)prxreport->md;
|
|
||||||
|
|
||||||
pattrib->mcs_rate = (u8)(report.rxdw3 & 0x3f);//(u8)prxreport->rxmcs;
|
|
||||||
pattrib->rxht = (u8)((report.rxdw3 >> 6) & 0x1);//(u8)prxreport->rxht;
|
|
||||||
|
|
||||||
pattrib->icv_err = (u8)((report.rxdw0 >> 15) & 0x1);//(u8)prxreport->icverr;
|
|
||||||
pattrib->shift_sz = (u8)((report.rxdw0 >> 24) & 0x3);
|
|
||||||
|
|
||||||
}
|
|
||||||
else if(pattrib->pkt_rpt_type == TX_REPORT1)//CCX
|
|
||||||
{
|
|
||||||
pattrib->pkt_len = TX_RPT1_PKT_LEN;
|
|
||||||
pattrib->drvinfo_sz = 0;
|
|
||||||
}
|
|
||||||
else if(pattrib->pkt_rpt_type == TX_REPORT2)// TX RPT
|
|
||||||
{
|
|
||||||
pattrib->pkt_len =(u16)(report.rxdw0 & 0x3FF);//Rx length[9:0]
|
|
||||||
pattrib->drvinfo_sz = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Get TX report MAC ID valid.
|
|
||||||
//
|
|
||||||
pattrib->MacIDValidEntry[0] = report.rxdw4;
|
|
||||||
pattrib->MacIDValidEntry[1] = report.rxdw5;
|
|
||||||
|
|
||||||
}
|
|
||||||
else if(pattrib->pkt_rpt_type == HIS_REPORT)// USB HISR RPT
|
|
||||||
{
|
|
||||||
pattrib->pkt_len = (u16)(report.rxdw0 &0x00003fff);//(u16)prxreport->pktlen;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Notice:
|
|
||||||
* Before calling this function,
|
|
||||||
* precvframe->u.hdr.rx_data should be ready!
|
|
||||||
*/
|
|
||||||
void update_recvframe_phyinfo_88e(
|
|
||||||
union recv_frame *precvframe,
|
|
||||||
struct phy_stat *pphy_status)
|
|
||||||
{
|
|
||||||
PADAPTER padapter = precvframe->u.hdr.adapter;
|
|
||||||
struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib;
|
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
|
||||||
PODM_PHY_INFO_T pPHYInfo = (PODM_PHY_INFO_T)(&pattrib->phy_info);
|
|
||||||
u8 *wlanhdr;
|
|
||||||
ODM_PACKET_INFO_T pkt_info;
|
|
||||||
u8 *sa;
|
|
||||||
struct sta_priv *pstapriv;
|
|
||||||
struct sta_info *psta;
|
|
||||||
//_irqL irqL;
|
|
||||||
|
|
||||||
pkt_info.bPacketMatchBSSID =_FALSE;
|
|
||||||
pkt_info.bPacketToSelf = _FALSE;
|
|
||||||
pkt_info.bPacketBeacon = _FALSE;
|
|
||||||
|
|
||||||
wlanhdr = get_recvframe_data(precvframe);
|
|
||||||
|
|
||||||
pkt_info.bPacketMatchBSSID = ((!IsFrameTypeCtrl(wlanhdr)) &&
|
|
||||||
!pattrib->icv_err && !pattrib->crc_err &&
|
|
||||||
_rtw_memcmp(get_hdr_bssid(wlanhdr), get_bssid(&padapter->mlmepriv), ETH_ALEN));
|
|
||||||
|
|
||||||
pkt_info.bPacketToSelf = pkt_info.bPacketMatchBSSID && (_rtw_memcmp(get_da(wlanhdr), myid(&padapter->eeprompriv), ETH_ALEN));
|
|
||||||
|
|
||||||
pkt_info.bPacketBeacon = pkt_info.bPacketMatchBSSID && (GetFrameSubType(wlanhdr) == WIFI_BEACON);
|
|
||||||
|
|
||||||
if(pkt_info.bPacketBeacon){
|
|
||||||
if(check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE) == _TRUE){
|
|
||||||
sa = padapter->mlmepriv.cur_network.network.MacAddress;
|
|
||||||
#if 0
|
|
||||||
{
|
|
||||||
DBG_8192C("==> rx beacon from AP[%02x:%02x:%02x:%02x:%02x:%02x]\n",
|
|
||||||
sa[0],sa[1],sa[2],sa[3],sa[4],sa[5]);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
sa = get_sa(wlanhdr);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
sa = get_sa(wlanhdr);
|
|
||||||
}
|
|
||||||
|
|
||||||
pstapriv = &padapter->stapriv;
|
|
||||||
pkt_info.StationID = 0xFF;
|
|
||||||
psta = rtw_get_stainfo(pstapriv, sa);
|
|
||||||
if (psta)
|
|
||||||
{
|
|
||||||
pkt_info.StationID = psta->mac_id;
|
|
||||||
//DBG_8192C("%s ==> StationID(%d)\n",__FUNCTION__,pkt_info.StationID);
|
|
||||||
}
|
|
||||||
pkt_info.Rate = pattrib->mcs_rate;
|
|
||||||
//rtl8188e_query_rx_phy_status(precvframe, pphy_status);
|
|
||||||
|
|
||||||
//_enter_critical_bh(&pHalData->odm_stainfo_lock, &irqL);
|
|
||||||
ODM_PhyStatusQuery(&pHalData->odmpriv,pPHYInfo,(u8 *)pphy_status,&(pkt_info));
|
|
||||||
//_exit_critical_bh(&pHalData->odm_stainfo_lock, &irqL);
|
|
||||||
|
|
||||||
precvframe->u.hdr.psta = NULL;
|
|
||||||
if (pkt_info.bPacketMatchBSSID &&
|
|
||||||
(check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == _TRUE))
|
|
||||||
{
|
|
||||||
if (psta)
|
|
||||||
{
|
|
||||||
precvframe->u.hdr.psta = psta;
|
|
||||||
rtl8188e_process_phy_info(padapter, precvframe);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (pkt_info.bPacketToSelf || pkt_info.bPacketBeacon)
|
|
||||||
{
|
|
||||||
if (check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE)
|
|
||||||
{
|
|
||||||
if (psta)
|
|
||||||
{
|
|
||||||
precvframe->u.hdr.psta = psta;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rtl8188e_process_phy_info(padapter, precvframe);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,125 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* 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 _RTL8188E_SRESET_C_
|
|
||||||
|
|
||||||
#include <rtl8188e_sreset.h>
|
|
||||||
#include <rtl8188e_hal.h>
|
|
||||||
|
|
||||||
#ifdef DBG_CONFIG_ERROR_DETECT
|
|
||||||
|
|
||||||
void rtl8188e_sreset_xmit_status_check(_adapter *padapter)
|
|
||||||
{
|
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
|
||||||
struct sreset_priv *psrtpriv = &pHalData->srestpriv;
|
|
||||||
|
|
||||||
unsigned long current_time;
|
|
||||||
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
|
|
||||||
unsigned int diff_time;
|
|
||||||
u32 txdma_status;
|
|
||||||
|
|
||||||
if( (txdma_status=rtw_read32(padapter, REG_TXDMA_STATUS)) !=0x00){
|
|
||||||
DBG_871X("%s REG_TXDMA_STATUS:0x%08x\n", __FUNCTION__, txdma_status);
|
|
||||||
rtw_hal_sreset_reset(padapter);
|
|
||||||
}
|
|
||||||
#ifdef CONFIG_USB_HCI
|
|
||||||
//total xmit irp = 4
|
|
||||||
//DBG_8192C("==>%s free_xmitbuf_cnt(%d),txirp_cnt(%d)\n",__FUNCTION__,pxmitpriv->free_xmitbuf_cnt,pxmitpriv->txirp_cnt);
|
|
||||||
//if(pxmitpriv->txirp_cnt == NR_XMITBUFF+1)
|
|
||||||
current_time = rtw_get_current_time();
|
|
||||||
|
|
||||||
if(0 == pxmitpriv->free_xmitbuf_cnt || 0 == pxmitpriv->free_xmit_extbuf_cnt) {
|
|
||||||
|
|
||||||
diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_time);
|
|
||||||
|
|
||||||
if (diff_time > 2000) {
|
|
||||||
if (psrtpriv->last_tx_complete_time == 0) {
|
|
||||||
psrtpriv->last_tx_complete_time = current_time;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_complete_time);
|
|
||||||
if (diff_time > 4000) {
|
|
||||||
u32 ability;
|
|
||||||
|
|
||||||
//padapter->Wifi_Error_Status = WIFI_TX_HANG;
|
|
||||||
rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DM_FUNC, &ability);
|
|
||||||
|
|
||||||
DBG_871X("%s tx hang %s\n", __FUNCTION__,
|
|
||||||
(ability & ODM_BB_ADAPTIVITY)? "ODM_BB_ADAPTIVITY" : "");
|
|
||||||
|
|
||||||
if (!(ability & ODM_BB_ADAPTIVITY))
|
|
||||||
rtw_hal_sreset_reset(padapter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif //CONFIG_USB_HCI
|
|
||||||
|
|
||||||
if (psrtpriv->dbg_trigger_point == SRESET_TGP_XMIT_STATUS) {
|
|
||||||
psrtpriv->dbg_trigger_point = SRESET_TGP_NULL;
|
|
||||||
rtw_hal_sreset_reset(padapter);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8188e_sreset_linked_status_check(_adapter *padapter)
|
|
||||||
{
|
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
|
||||||
struct sreset_priv *psrtpriv = &pHalData->srestpriv;
|
|
||||||
|
|
||||||
u32 rx_dma_status = 0;
|
|
||||||
u8 fw_status=0;
|
|
||||||
rx_dma_status = rtw_read32(padapter,REG_RXDMA_STATUS);
|
|
||||||
if(rx_dma_status!= 0x00){
|
|
||||||
DBG_8192C("%s REG_RXDMA_STATUS:0x%08x \n",__FUNCTION__,rx_dma_status);
|
|
||||||
rtw_write32(padapter,REG_RXDMA_STATUS,rx_dma_status);
|
|
||||||
}
|
|
||||||
fw_status = rtw_read8(padapter,REG_FMETHR);
|
|
||||||
if(fw_status != 0x00)
|
|
||||||
{
|
|
||||||
if(fw_status == 1)
|
|
||||||
DBG_8192C("%s REG_FW_STATUS (0x%02x), Read_Efuse_Fail !! \n",__FUNCTION__,fw_status);
|
|
||||||
else if(fw_status == 2)
|
|
||||||
DBG_8192C("%s REG_FW_STATUS (0x%02x), Condition_No_Match !! \n",__FUNCTION__,fw_status);
|
|
||||||
}
|
|
||||||
#if 0
|
|
||||||
u32 regc50,regc58,reg824,reg800;
|
|
||||||
regc50 = rtw_read32(padapter,0xc50);
|
|
||||||
regc58 = rtw_read32(padapter,0xc58);
|
|
||||||
reg824 = rtw_read32(padapter,0x824);
|
|
||||||
reg800 = rtw_read32(padapter,0x800);
|
|
||||||
if( ((regc50&0xFFFFFF00)!= 0x69543400)||
|
|
||||||
((regc58&0xFFFFFF00)!= 0x69543400)||
|
|
||||||
(((reg824&0xFFFFFF00)!= 0x00390000)&&(((reg824&0xFFFFFF00)!= 0x80390000)))||
|
|
||||||
( ((reg800&0xFFFFFF00)!= 0x03040000)&&((reg800&0xFFFFFF00)!= 0x83040000)))
|
|
||||||
{
|
|
||||||
DBG_8192C("%s regc50:0x%08x, regc58:0x%08x, reg824:0x%08x, reg800:0x%08x,\n", __FUNCTION__,
|
|
||||||
regc50, regc58, reg824, reg800);
|
|
||||||
rtw_hal_sreset_reset(padapter);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (psrtpriv->dbg_trigger_point == SRESET_TGP_LINK_STATUS) {
|
|
||||||
psrtpriv->dbg_trigger_point = SRESET_TGP_NULL;
|
|
||||||
rtw_hal_sreset_reset(padapter);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,292 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* 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 _RTL8188E_XMIT_C_
|
|
||||||
|
|
||||||
#include <drv_conf.h>
|
|
||||||
#include <osdep_service.h>
|
|
||||||
#include <drv_types.h>
|
|
||||||
#include <rtl8188e_hal.h>
|
|
||||||
|
|
||||||
#ifdef CONFIG_XMIT_ACK
|
|
||||||
void dump_txrpt_ccx_88e(void *buf)
|
|
||||||
{
|
|
||||||
struct txrpt_ccx_88e *txrpt_ccx = (struct txrpt_ccx_88e *)buf;
|
|
||||||
|
|
||||||
DBG_871X("%s:\n"
|
|
||||||
"tag1:%u, pkt_num:%u, txdma_underflow:%u, int_bt:%u, int_tri:%u, int_ccx:%u\n"
|
|
||||||
"mac_id:%u, pkt_ok:%u, bmc:%u\n"
|
|
||||||
"retry_cnt:%u, lifetime_over:%u, retry_over:%u\n"
|
|
||||||
"ccx_qtime:%u\n"
|
|
||||||
"final_data_rate:0x%02x\n"
|
|
||||||
"qsel:%u, sw:0x%03x\n"
|
|
||||||
, __func__
|
|
||||||
, txrpt_ccx->tag1, txrpt_ccx->pkt_num, txrpt_ccx->txdma_underflow, txrpt_ccx->int_bt, txrpt_ccx->int_tri, txrpt_ccx->int_ccx
|
|
||||||
, txrpt_ccx->mac_id, txrpt_ccx->pkt_ok, txrpt_ccx->bmc
|
|
||||||
, txrpt_ccx->retry_cnt, txrpt_ccx->lifetime_over, txrpt_ccx->retry_over
|
|
||||||
, txrpt_ccx_qtime_88e(txrpt_ccx)
|
|
||||||
, txrpt_ccx->final_data_rate
|
|
||||||
, txrpt_ccx->qsel, txrpt_ccx_sw_88e(txrpt_ccx)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void handle_txrpt_ccx_88e(_adapter *adapter, u8 *buf)
|
|
||||||
{
|
|
||||||
struct txrpt_ccx_88e *txrpt_ccx = (struct txrpt_ccx_88e *)buf;
|
|
||||||
|
|
||||||
#ifdef DBG_CCX
|
|
||||||
dump_txrpt_ccx_88e(buf);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (txrpt_ccx->int_ccx) {
|
|
||||||
if (txrpt_ccx->pkt_ok)
|
|
||||||
rtw_ack_tx_done(&adapter->xmitpriv, RTW_SCTX_DONE_SUCCESS);
|
|
||||||
else
|
|
||||||
rtw_ack_tx_done(&adapter->xmitpriv, RTW_SCTX_DONE_CCX_PKT_FAIL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif //CONFIG_XMIT_ACK
|
|
||||||
|
|
||||||
void _dbg_dump_tx_info(_adapter *padapter,int frame_tag,struct tx_desc *ptxdesc)
|
|
||||||
{
|
|
||||||
u8 bDumpTxPkt;
|
|
||||||
u8 bDumpTxDesc = _FALSE;
|
|
||||||
rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DUMP_TXPKT, &(bDumpTxPkt));
|
|
||||||
|
|
||||||
if(bDumpTxPkt ==1){//dump txdesc for data frame
|
|
||||||
DBG_871X("dump tx_desc for data frame\n");
|
|
||||||
if((frame_tag&0x0f) == DATA_FRAMETAG){
|
|
||||||
bDumpTxDesc = _TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(bDumpTxPkt ==2){//dump txdesc for mgnt frame
|
|
||||||
DBG_871X("dump tx_desc for mgnt frame\n");
|
|
||||||
if((frame_tag&0x0f) == MGNT_FRAMETAG){
|
|
||||||
bDumpTxDesc = _TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(bDumpTxPkt ==3){//dump early info
|
|
||||||
}
|
|
||||||
|
|
||||||
if(bDumpTxDesc){
|
|
||||||
// ptxdesc->txdw4 = cpu_to_le32(0x00001006);//RTS Rate=24M
|
|
||||||
// ptxdesc->txdw6 = 0x6666f800;
|
|
||||||
DBG_8192C("=====================================\n");
|
|
||||||
DBG_8192C("txdw0(0x%08x)\n",ptxdesc->txdw0);
|
|
||||||
DBG_8192C("txdw1(0x%08x)\n",ptxdesc->txdw1);
|
|
||||||
DBG_8192C("txdw2(0x%08x)\n",ptxdesc->txdw2);
|
|
||||||
DBG_8192C("txdw3(0x%08x)\n",ptxdesc->txdw3);
|
|
||||||
DBG_8192C("txdw4(0x%08x)\n",ptxdesc->txdw4);
|
|
||||||
DBG_8192C("txdw5(0x%08x)\n",ptxdesc->txdw5);
|
|
||||||
DBG_8192C("txdw6(0x%08x)\n",ptxdesc->txdw6);
|
|
||||||
DBG_8192C("txdw7(0x%08x)\n",ptxdesc->txdw7);
|
|
||||||
DBG_8192C("=====================================\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Description:
|
|
||||||
* Aggregation packets and send to hardware
|
|
||||||
*
|
|
||||||
* Return:
|
|
||||||
* 0 Success
|
|
||||||
* -1 Hardware resource(TX FIFO) not ready
|
|
||||||
* -2 Software resource(xmitbuf) not ready
|
|
||||||
*/
|
|
||||||
#ifdef CONFIG_TX_EARLY_MODE
|
|
||||||
|
|
||||||
//#define DBG_EMINFO
|
|
||||||
|
|
||||||
#if RTL8188E_EARLY_MODE_PKT_NUM_10 == 1
|
|
||||||
#define EARLY_MODE_MAX_PKT_NUM 10
|
|
||||||
#else
|
|
||||||
#define EARLY_MODE_MAX_PKT_NUM 5
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
struct EMInfo{
|
|
||||||
u8 EMPktNum;
|
|
||||||
u16 EMPktLen[EARLY_MODE_MAX_PKT_NUM];
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
InsertEMContent_8188E(
|
|
||||||
struct EMInfo *pEMInfo,
|
|
||||||
IN pu1Byte VirtualAddress)
|
|
||||||
{
|
|
||||||
|
|
||||||
#if RTL8188E_EARLY_MODE_PKT_NUM_10 == 1
|
|
||||||
u1Byte index=0;
|
|
||||||
u4Byte dwtmp=0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_rtw_memset(VirtualAddress, 0, EARLY_MODE_INFO_SIZE);
|
|
||||||
if(pEMInfo->EMPktNum==0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
#ifdef DBG_EMINFO
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
DBG_8192C("\n%s ==> pEMInfo->EMPktNum =%d\n",__FUNCTION__,pEMInfo->EMPktNum);
|
|
||||||
for(i=0;i< EARLY_MODE_MAX_PKT_NUM;i++){
|
|
||||||
DBG_8192C("%s ==> pEMInfo->EMPktLen[%d] =%d\n",__FUNCTION__,i,pEMInfo->EMPktLen[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if RTL8188E_EARLY_MODE_PKT_NUM_10 == 1
|
|
||||||
SET_EARLYMODE_PKTNUM(VirtualAddress, pEMInfo->EMPktNum);
|
|
||||||
|
|
||||||
if(pEMInfo->EMPktNum == 1){
|
|
||||||
dwtmp = pEMInfo->EMPktLen[0];
|
|
||||||
}else{
|
|
||||||
dwtmp = pEMInfo->EMPktLen[0];
|
|
||||||
dwtmp += ((dwtmp%4)?(4-dwtmp%4):0)+4;
|
|
||||||
dwtmp += pEMInfo->EMPktLen[1];
|
|
||||||
}
|
|
||||||
SET_EARLYMODE_LEN0(VirtualAddress, dwtmp);
|
|
||||||
if(pEMInfo->EMPktNum <= 3){
|
|
||||||
dwtmp = pEMInfo->EMPktLen[2];
|
|
||||||
}else{
|
|
||||||
dwtmp = pEMInfo->EMPktLen[2];
|
|
||||||
dwtmp += ((dwtmp%4)?(4-dwtmp%4):0)+4;
|
|
||||||
dwtmp += pEMInfo->EMPktLen[3];
|
|
||||||
}
|
|
||||||
SET_EARLYMODE_LEN1(VirtualAddress, dwtmp);
|
|
||||||
if(pEMInfo->EMPktNum <= 5){
|
|
||||||
dwtmp = pEMInfo->EMPktLen[4];
|
|
||||||
}else{
|
|
||||||
dwtmp = pEMInfo->EMPktLen[4];
|
|
||||||
dwtmp += ((dwtmp%4)?(4-dwtmp%4):0)+4;
|
|
||||||
dwtmp += pEMInfo->EMPktLen[5];
|
|
||||||
}
|
|
||||||
SET_EARLYMODE_LEN2_1(VirtualAddress, dwtmp&0xF);
|
|
||||||
SET_EARLYMODE_LEN2_2(VirtualAddress, dwtmp>>4);
|
|
||||||
if(pEMInfo->EMPktNum <= 7){
|
|
||||||
dwtmp = pEMInfo->EMPktLen[6];
|
|
||||||
}else{
|
|
||||||
dwtmp = pEMInfo->EMPktLen[6];
|
|
||||||
dwtmp += ((dwtmp%4)?(4-dwtmp%4):0)+4;
|
|
||||||
dwtmp += pEMInfo->EMPktLen[7];
|
|
||||||
}
|
|
||||||
SET_EARLYMODE_LEN3(VirtualAddress, dwtmp);
|
|
||||||
if(pEMInfo->EMPktNum <= 9){
|
|
||||||
dwtmp = pEMInfo->EMPktLen[8];
|
|
||||||
}else{
|
|
||||||
dwtmp = pEMInfo->EMPktLen[8];
|
|
||||||
dwtmp += ((dwtmp%4)?(4-dwtmp%4):0)+4;
|
|
||||||
dwtmp += pEMInfo->EMPktLen[9];
|
|
||||||
}
|
|
||||||
SET_EARLYMODE_LEN4(VirtualAddress, dwtmp);
|
|
||||||
#else
|
|
||||||
SET_EARLYMODE_PKTNUM(VirtualAddress, pEMInfo->EMPktNum);
|
|
||||||
SET_EARLYMODE_LEN0(VirtualAddress, pEMInfo->EMPktLen[0]);
|
|
||||||
SET_EARLYMODE_LEN1(VirtualAddress, pEMInfo->EMPktLen[1]);
|
|
||||||
SET_EARLYMODE_LEN2_1(VirtualAddress, pEMInfo->EMPktLen[2]&0xF);
|
|
||||||
SET_EARLYMODE_LEN2_2(VirtualAddress, pEMInfo->EMPktLen[2]>>4);
|
|
||||||
SET_EARLYMODE_LEN3(VirtualAddress, pEMInfo->EMPktLen[3]);
|
|
||||||
SET_EARLYMODE_LEN4(VirtualAddress, pEMInfo->EMPktLen[4]);
|
|
||||||
#endif
|
|
||||||
//RT_PRINT_DATA(COMP_SEND, DBG_LOUD, "EMHdr:", VirtualAddress, 8);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void UpdateEarlyModeInfo8188E(struct xmit_priv *pxmitpriv,struct xmit_buf *pxmitbuf )
|
|
||||||
{
|
|
||||||
//_adapter *padapter, struct xmit_frame *pxmitframe,struct tx_servq *ptxservq
|
|
||||||
int index,j;
|
|
||||||
u16 offset,pktlen;
|
|
||||||
PTXDESC ptxdesc;
|
|
||||||
|
|
||||||
u8 *pmem,*pEMInfo_mem;
|
|
||||||
s8 node_num_0=0,node_num_1=0;
|
|
||||||
struct EMInfo eminfo;
|
|
||||||
struct agg_pkt_info *paggpkt;
|
|
||||||
struct xmit_frame *pframe = (struct xmit_frame*)pxmitbuf->priv_data;
|
|
||||||
pmem= pframe->buf_addr;
|
|
||||||
|
|
||||||
#ifdef DBG_EMINFO
|
|
||||||
DBG_8192C("\n%s ==> agg_num:%d\n",__FUNCTION__, pframe->agg_num);
|
|
||||||
for(index=0;index<pframe->agg_num;index++){
|
|
||||||
offset = pxmitpriv->agg_pkt[index].offset;
|
|
||||||
pktlen = pxmitpriv->agg_pkt[index].pkt_len;
|
|
||||||
DBG_8192C("%s ==> agg_pkt[%d].offset=%d\n",__FUNCTION__,index,offset);
|
|
||||||
DBG_8192C("%s ==> agg_pkt[%d].pkt_len=%d\n",__FUNCTION__,index,pktlen);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if( pframe->agg_num > EARLY_MODE_MAX_PKT_NUM)
|
|
||||||
{
|
|
||||||
node_num_0 = pframe->agg_num;
|
|
||||||
node_num_1= EARLY_MODE_MAX_PKT_NUM-1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(index=0;index<pframe->agg_num;index++){
|
|
||||||
|
|
||||||
offset = pxmitpriv->agg_pkt[index].offset;
|
|
||||||
pktlen = pxmitpriv->agg_pkt[index].pkt_len;
|
|
||||||
|
|
||||||
_rtw_memset(&eminfo,0,sizeof(struct EMInfo));
|
|
||||||
if( pframe->agg_num > EARLY_MODE_MAX_PKT_NUM){
|
|
||||||
if(node_num_0 > EARLY_MODE_MAX_PKT_NUM){
|
|
||||||
eminfo.EMPktNum = EARLY_MODE_MAX_PKT_NUM;
|
|
||||||
node_num_0--;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
eminfo.EMPktNum = node_num_1;
|
|
||||||
node_num_1--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
eminfo.EMPktNum = pframe->agg_num-(index+1);
|
|
||||||
}
|
|
||||||
for(j=0;j< eminfo.EMPktNum ;j++){
|
|
||||||
eminfo.EMPktLen[j] = pxmitpriv->agg_pkt[index+1+j].pkt_len+4;// 4 bytes CRC
|
|
||||||
}
|
|
||||||
|
|
||||||
if(pmem){
|
|
||||||
if(index==0){
|
|
||||||
ptxdesc = (PTXDESC)(pmem);
|
|
||||||
pEMInfo_mem = ((u8 *)ptxdesc)+TXDESC_SIZE;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
pmem = pmem + pxmitpriv->agg_pkt[index-1].offset;
|
|
||||||
ptxdesc = (PTXDESC)(pmem);
|
|
||||||
pEMInfo_mem = ((u8 *)ptxdesc)+TXDESC_SIZE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DBG_EMINFO
|
|
||||||
DBG_8192C("%s ==> desc.pkt_len=%d\n",__FUNCTION__,ptxdesc->pktlen);
|
|
||||||
#endif
|
|
||||||
InsertEMContent_8188E(&eminfo,pEMInfo_mem);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
_rtw_memset(pxmitpriv->agg_pkt,0,sizeof(struct agg_pkt_info)*MAX_AGG_PKT_NUM);
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -1,124 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* 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 _RTL8189ES_LED_C_
|
|
||||||
|
|
||||||
#include "drv_types.h"
|
|
||||||
#include "rtl8188e_hal.h"
|
|
||||||
|
|
||||||
//================================================================================
|
|
||||||
// LED object.
|
|
||||||
//================================================================================
|
|
||||||
|
|
||||||
|
|
||||||
//================================================================================
|
|
||||||
// Prototype of protected function.
|
|
||||||
//================================================================================
|
|
||||||
|
|
||||||
//================================================================================
|
|
||||||
// LED_819xUsb routines.
|
|
||||||
//================================================================================
|
|
||||||
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// Turn on LED according to LedPin specified.
|
|
||||||
//
|
|
||||||
void
|
|
||||||
SwLedOn(
|
|
||||||
_adapter *padapter,
|
|
||||||
PLED_871x pLed
|
|
||||||
)
|
|
||||||
{
|
|
||||||
u8 LedCfg;
|
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
|
||||||
|
|
||||||
if( (padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
pLed->bLedOn = _TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// Turn off LED according to LedPin specified.
|
|
||||||
//
|
|
||||||
void
|
|
||||||
SwLedOff(
|
|
||||||
_adapter *padapter,
|
|
||||||
PLED_871x pLed
|
|
||||||
)
|
|
||||||
{
|
|
||||||
u8 LedCfg;
|
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
|
||||||
|
|
||||||
if((padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
|
|
||||||
{
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
exit:
|
|
||||||
pLed->bLedOn = _FALSE;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//================================================================================
|
|
||||||
// Default LED behavior.
|
|
||||||
//================================================================================
|
|
||||||
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// Initialize all LED_871x objects.
|
|
||||||
//
|
|
||||||
void
|
|
||||||
rtl8188es_InitSwLeds(
|
|
||||||
_adapter *padapter
|
|
||||||
)
|
|
||||||
{
|
|
||||||
struct led_priv *pledpriv = &(padapter->ledpriv);
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
pledpriv->LedControlHandler = LedControl871x;
|
|
||||||
|
|
||||||
InitLed871x(padapter, &(pledpriv->SwLed0), LED_PIN_LED0);
|
|
||||||
|
|
||||||
InitLed871x(padapter,&(pledpriv->SwLed1), LED_PIN_LED1);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// DeInitialize all LED_819xUsb objects.
|
|
||||||
//
|
|
||||||
void
|
|
||||||
rtl8188es_DeInitSwLeds(
|
|
||||||
_adapter *padapter
|
|
||||||
)
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
struct led_priv *ledpriv = &(padapter->ledpriv);
|
|
||||||
|
|
||||||
DeInitLed871x( &(ledpriv->SwLed0) );
|
|
||||||
DeInitLed871x( &(ledpriv->SwLed1) );
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,824 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* 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 _RTL8189ES_RECV_C_
|
|
||||||
|
|
||||||
#include <drv_conf.h>
|
|
||||||
|
|
||||||
#include <drv_types.h>
|
|
||||||
#include <recv_osdep.h>
|
|
||||||
#include <rtl8188e_hal.h>
|
|
||||||
|
|
||||||
static void rtl8188es_recv_tasklet(void *priv);
|
|
||||||
|
|
||||||
static s32 initrecvbuf(struct recv_buf *precvbuf, PADAPTER padapter)
|
|
||||||
{
|
|
||||||
_rtw_init_listhead(&precvbuf->list);
|
|
||||||
_rtw_spinlock_init(&precvbuf->recvbuf_lock);
|
|
||||||
|
|
||||||
precvbuf->adapter = padapter;
|
|
||||||
|
|
||||||
return _SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void freerecvbuf(struct recv_buf *precvbuf)
|
|
||||||
{
|
|
||||||
_rtw_spinlock_free(&precvbuf->recvbuf_lock);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Initialize recv private variable for hardware dependent
|
|
||||||
* 1. recv buf
|
|
||||||
* 2. recv tasklet
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
s32 rtl8188es_init_recv_priv(PADAPTER padapter)
|
|
||||||
{
|
|
||||||
s32 res;
|
|
||||||
u32 i, n;
|
|
||||||
struct recv_priv *precvpriv;
|
|
||||||
struct recv_buf *precvbuf;
|
|
||||||
|
|
||||||
|
|
||||||
res = _SUCCESS;
|
|
||||||
precvpriv = &padapter->recvpriv;
|
|
||||||
|
|
||||||
//3 1. init recv buffer
|
|
||||||
_rtw_init_queue(&precvpriv->free_recv_buf_queue);
|
|
||||||
_rtw_init_queue(&precvpriv->recv_buf_pending_queue);
|
|
||||||
|
|
||||||
n = NR_RECVBUFF * sizeof(struct recv_buf) + 4;
|
|
||||||
precvpriv->pallocated_recv_buf = rtw_zmalloc(n);
|
|
||||||
if (precvpriv->pallocated_recv_buf == NULL) {
|
|
||||||
res = _FAIL;
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("alloc recv_buf fail!\n"));
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
precvpriv->precv_buf = (u8*)N_BYTE_ALIGMENT((SIZE_PTR)(precvpriv->pallocated_recv_buf), 4);
|
|
||||||
|
|
||||||
// init each recv buffer
|
|
||||||
precvbuf = (struct recv_buf*)precvpriv->precv_buf;
|
|
||||||
for (i = 0; i < NR_RECVBUFF; i++)
|
|
||||||
{
|
|
||||||
res = initrecvbuf(precvbuf, padapter);
|
|
||||||
if (res == _FAIL)
|
|
||||||
break;
|
|
||||||
|
|
||||||
res = rtw_os_recvbuf_resource_alloc(padapter, precvbuf);
|
|
||||||
if (res == _FAIL) {
|
|
||||||
freerecvbuf(precvbuf);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_SDIO_RX_COPY
|
|
||||||
if (precvbuf->pskb == NULL) {
|
|
||||||
SIZE_PTR tmpaddr=0;
|
|
||||||
SIZE_PTR alignment=0;
|
|
||||||
|
|
||||||
precvbuf->pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
|
|
||||||
|
|
||||||
if(precvbuf->pskb)
|
|
||||||
{
|
|
||||||
precvbuf->pskb->dev = padapter->pnetdev;
|
|
||||||
|
|
||||||
tmpaddr = (SIZE_PTR)precvbuf->pskb->data;
|
|
||||||
alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);
|
|
||||||
skb_reserve(precvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment));
|
|
||||||
|
|
||||||
precvbuf->phead = precvbuf->pskb->head;
|
|
||||||
precvbuf->pdata = precvbuf->pskb->data;
|
|
||||||
precvbuf->ptail = skb_tail_pointer(precvbuf->pskb);
|
|
||||||
precvbuf->pend = skb_end_pointer(precvbuf->pskb);
|
|
||||||
precvbuf->len = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (precvbuf->pskb == NULL) {
|
|
||||||
DBG_871X("%s: alloc_skb fail!\n", __FUNCTION__);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
rtw_list_insert_tail(&precvbuf->list, &precvpriv->free_recv_buf_queue.queue);
|
|
||||||
|
|
||||||
precvbuf++;
|
|
||||||
}
|
|
||||||
precvpriv->free_recv_buf_queue_cnt = i;
|
|
||||||
|
|
||||||
if (res == _FAIL)
|
|
||||||
goto initbuferror;
|
|
||||||
|
|
||||||
//3 2. init tasklet
|
|
||||||
tasklet_init(&precvpriv->recv_tasklet,
|
|
||||||
(void(*)(unsigned long))rtl8188es_recv_tasklet,
|
|
||||||
(unsigned long)padapter);
|
|
||||||
goto exit;
|
|
||||||
|
|
||||||
initbuferror:
|
|
||||||
precvbuf = (struct recv_buf*)precvpriv->precv_buf;
|
|
||||||
if (precvbuf) {
|
|
||||||
n = precvpriv->free_recv_buf_queue_cnt;
|
|
||||||
precvpriv->free_recv_buf_queue_cnt = 0;
|
|
||||||
for (i = 0; i < n ; i++)
|
|
||||||
{
|
|
||||||
rtw_list_delete(&precvbuf->list);
|
|
||||||
rtw_os_recvbuf_resource_free(padapter, precvbuf);
|
|
||||||
freerecvbuf(precvbuf);
|
|
||||||
precvbuf++;
|
|
||||||
}
|
|
||||||
precvpriv->precv_buf = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (precvpriv->pallocated_recv_buf) {
|
|
||||||
n = NR_RECVBUFF * sizeof(struct recv_buf) + 4;
|
|
||||||
rtw_mfree(precvpriv->pallocated_recv_buf, n);
|
|
||||||
precvpriv->pallocated_recv_buf = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
exit:
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Free recv private variable of hardware dependent
|
|
||||||
* 1. recv buf
|
|
||||||
* 2. recv tasklet
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void rtl8188es_free_recv_priv(PADAPTER padapter)
|
|
||||||
{
|
|
||||||
u32 i, n;
|
|
||||||
struct recv_priv *precvpriv;
|
|
||||||
struct recv_buf *precvbuf;
|
|
||||||
|
|
||||||
|
|
||||||
precvpriv = &padapter->recvpriv;
|
|
||||||
|
|
||||||
//3 1. kill tasklet
|
|
||||||
tasklet_kill(&precvpriv->recv_tasklet);
|
|
||||||
|
|
||||||
//3 2. free all recv buffers
|
|
||||||
precvbuf = (struct recv_buf*)precvpriv->precv_buf;
|
|
||||||
if (precvbuf) {
|
|
||||||
n = NR_RECVBUFF;
|
|
||||||
precvpriv->free_recv_buf_queue_cnt = 0;
|
|
||||||
for (i = 0; i < n ; i++)
|
|
||||||
{
|
|
||||||
rtw_list_delete(&precvbuf->list);
|
|
||||||
rtw_os_recvbuf_resource_free(padapter, precvbuf);
|
|
||||||
freerecvbuf(precvbuf);
|
|
||||||
precvbuf++;
|
|
||||||
}
|
|
||||||
precvpriv->precv_buf = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (precvpriv->pallocated_recv_buf) {
|
|
||||||
n = NR_RECVBUFF * sizeof(struct recv_buf) + 4;
|
|
||||||
rtw_mfree(precvpriv->pallocated_recv_buf, n);
|
|
||||||
precvpriv->pallocated_recv_buf = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_SDIO_RX_COPY
|
|
||||||
static s32 pre_recv_entry(union recv_frame *precvframe, struct recv_buf *precvbuf, struct phy_stat *pphy_status)
|
|
||||||
{
|
|
||||||
s32 ret=_SUCCESS;
|
|
||||||
#ifdef CONFIG_CONCURRENT_MODE
|
|
||||||
u8 *primary_myid, *secondary_myid, *paddr1;
|
|
||||||
union recv_frame *precvframe_if2 = NULL;
|
|
||||||
_adapter *primary_padapter = precvframe->u.hdr.adapter;
|
|
||||||
_adapter *secondary_padapter = primary_padapter->pbuddy_adapter;
|
|
||||||
struct recv_priv *precvpriv = &primary_padapter->recvpriv;
|
|
||||||
_queue *pfree_recv_queue = &precvpriv->free_recv_queue;
|
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(primary_padapter);
|
|
||||||
|
|
||||||
if(!secondary_padapter)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
paddr1 = GetAddr1Ptr(precvframe->u.hdr.rx_data);
|
|
||||||
|
|
||||||
if(IS_MCAST(paddr1) == _FALSE)//unicast packets
|
|
||||||
{
|
|
||||||
//primary_myid = myid(&primary_padapter->eeprompriv);
|
|
||||||
secondary_myid = myid(&secondary_padapter->eeprompriv);
|
|
||||||
|
|
||||||
if(_rtw_memcmp(paddr1, secondary_myid, ETH_ALEN))
|
|
||||||
{
|
|
||||||
//change to secondary interface
|
|
||||||
precvframe->u.hdr.adapter = secondary_padapter;
|
|
||||||
}
|
|
||||||
|
|
||||||
//ret = recv_entry(precvframe);
|
|
||||||
|
|
||||||
}
|
|
||||||
else // Handle BC/MC Packets
|
|
||||||
{
|
|
||||||
//clone/copy to if2
|
|
||||||
_pkt *pkt_copy = NULL;
|
|
||||||
struct rx_pkt_attrib *pattrib = NULL;
|
|
||||||
|
|
||||||
precvframe_if2 = rtw_alloc_recvframe(pfree_recv_queue);
|
|
||||||
|
|
||||||
if(!precvframe_if2)
|
|
||||||
return _FAIL;
|
|
||||||
|
|
||||||
precvframe_if2->u.hdr.adapter = secondary_padapter;
|
|
||||||
_rtw_memcpy(&precvframe_if2->u.hdr.attrib, &precvframe->u.hdr.attrib, sizeof(struct rx_pkt_attrib));
|
|
||||||
pattrib = &precvframe_if2->u.hdr.attrib;
|
|
||||||
|
|
||||||
//driver need to set skb len for rtw_skb_copy().
|
|
||||||
//If skb->len is zero, rtw_skb_copy() will not copy data from original skb.
|
|
||||||
skb_put(precvframe->u.hdr.pkt, pattrib->pkt_len);
|
|
||||||
|
|
||||||
pkt_copy = rtw_skb_copy( precvframe->u.hdr.pkt);
|
|
||||||
if (pkt_copy == NULL)
|
|
||||||
{
|
|
||||||
if((pattrib->mfrag == 1)&&(pattrib->frag_num == 0))
|
|
||||||
{
|
|
||||||
DBG_8192C("pre_recv_entry(): rtw_skb_copy fail , drop frag frame \n");
|
|
||||||
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
pkt_copy = rtw_skb_clone(precvframe->u.hdr.pkt);
|
|
||||||
if(pkt_copy == NULL)
|
|
||||||
{
|
|
||||||
DBG_8192C("pre_recv_entry(): rtw_skb_clone fail , drop frame\n");
|
|
||||||
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pkt_copy->dev = secondary_padapter->pnetdev;
|
|
||||||
|
|
||||||
precvframe_if2->u.hdr.pkt = pkt_copy;
|
|
||||||
precvframe_if2->u.hdr.rx_head = pkt_copy->head;
|
|
||||||
precvframe_if2->u.hdr.rx_data = pkt_copy->data;
|
|
||||||
precvframe_if2->u.hdr.rx_tail = skb_tail_pointer(pkt_copy);
|
|
||||||
precvframe_if2->u.hdr.rx_end = skb_end_pointer(pkt_copy);
|
|
||||||
precvframe_if2->u.hdr.len = pkt_copy->len;
|
|
||||||
|
|
||||||
//recvframe_put(precvframe_if2, pattrib->pkt_len);
|
|
||||||
|
|
||||||
if ( pHalData->ReceiveConfig & RCR_APPFCS)
|
|
||||||
recvframe_pull_tail(precvframe_if2, IEEE80211_FCS_LEN);
|
|
||||||
|
|
||||||
if (pattrib->physt)
|
|
||||||
update_recvframe_phyinfo_88e(precvframe_if2, pphy_status);
|
|
||||||
|
|
||||||
if(rtw_recv_entry(precvframe_if2) != _SUCCESS)
|
|
||||||
{
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,
|
|
||||||
("recvbuf2recvframe: rtw_recv_entry(precvframe) != _SUCCESS\n"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (precvframe->u.hdr.attrib.physt)
|
|
||||||
update_recvframe_phyinfo_88e(precvframe, pphy_status);
|
|
||||||
ret = rtw_recv_entry(precvframe);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static void rtl8188es_recv_tasklet(void *priv)
|
|
||||||
{
|
|
||||||
PADAPTER padapter;
|
|
||||||
PHAL_DATA_TYPE pHalData;
|
|
||||||
struct recv_priv *precvpriv;
|
|
||||||
struct recv_buf *precvbuf;
|
|
||||||
union recv_frame *precvframe;
|
|
||||||
struct recv_frame_hdr *phdr;
|
|
||||||
struct rx_pkt_attrib *pattrib;
|
|
||||||
_irqL irql;
|
|
||||||
u8 *ptr;
|
|
||||||
u32 pkt_offset, skb_len, alloc_sz;
|
|
||||||
s32 transfer_len;
|
|
||||||
_pkt *pkt_copy = NULL;
|
|
||||||
struct phy_stat *pphy_status = NULL;
|
|
||||||
u8 shift_sz = 0, rx_report_sz = 0;
|
|
||||||
|
|
||||||
|
|
||||||
padapter = (PADAPTER)priv;
|
|
||||||
pHalData = GET_HAL_DATA(padapter);
|
|
||||||
precvpriv = &padapter->recvpriv;
|
|
||||||
|
|
||||||
do {
|
|
||||||
if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE))
|
|
||||||
{
|
|
||||||
DBG_8192C("recv_tasklet => bDriverStopped or bSurpriseRemoved \n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
precvbuf = rtw_dequeue_recvbuf(&precvpriv->recv_buf_pending_queue);
|
|
||||||
if (NULL == precvbuf) break;
|
|
||||||
|
|
||||||
transfer_len = (s32)precvbuf->len;
|
|
||||||
ptr = precvbuf->pdata;
|
|
||||||
|
|
||||||
do {
|
|
||||||
precvframe = rtw_alloc_recvframe(&precvpriv->free_recv_queue);
|
|
||||||
if (precvframe == NULL) {
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("%s: no enough recv frame!\n",__FUNCTION__));
|
|
||||||
rtw_enqueue_recvbuf_to_head(precvbuf, &precvpriv->recv_buf_pending_queue);
|
|
||||||
|
|
||||||
// The case of can't allocte recvframe should be temporary,
|
|
||||||
// schedule again and hope recvframe is available next time.
|
|
||||||
tasklet_schedule(&precvpriv->recv_tasklet);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//rx desc parsing
|
|
||||||
update_recvframe_attrib_88e(precvframe, (struct recv_stat*)ptr);
|
|
||||||
|
|
||||||
pattrib = &precvframe->u.hdr.attrib;
|
|
||||||
|
|
||||||
// fix Hardware RX data error, drop whole recv_buffer
|
|
||||||
if ((!(pHalData->ReceiveConfig & RCR_ACRC32)) && pattrib->crc_err)
|
|
||||||
{
|
|
||||||
DBG_8192C("%s()-%d: RX Warning! rx CRC ERROR !!\n", __FUNCTION__, __LINE__);
|
|
||||||
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pHalData->ReceiveConfig & RCR_APP_BA_SSN)
|
|
||||||
rx_report_sz = RXDESC_SIZE + 4 + pattrib->drvinfo_sz;
|
|
||||||
else
|
|
||||||
rx_report_sz = RXDESC_SIZE + pattrib->drvinfo_sz;
|
|
||||||
|
|
||||||
pkt_offset = rx_report_sz + pattrib->shift_sz + pattrib->pkt_len;
|
|
||||||
|
|
||||||
if ((pattrib->pkt_len==0) || (pkt_offset>transfer_len)) {
|
|
||||||
DBG_8192C("%s()-%d: RX Warning!,pkt_len==0 or pkt_offset(%d)> transfoer_len(%d) \n", __FUNCTION__, __LINE__, pkt_offset, transfer_len);
|
|
||||||
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((pattrib->crc_err) || (pattrib->icv_err))
|
|
||||||
{
|
|
||||||
DBG_8192C("%s: crc_err=%d icv_err=%d, skip!\n", __FUNCTION__, pattrib->crc_err, pattrib->icv_err);
|
|
||||||
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Modified by Albert 20101213
|
|
||||||
// For 8 bytes IP header alignment.
|
|
||||||
if (pattrib->qos) // Qos data, wireless lan header length is 26
|
|
||||||
{
|
|
||||||
shift_sz = 6;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
shift_sz = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
skb_len = pattrib->pkt_len;
|
|
||||||
|
|
||||||
// for first fragment packet, driver need allocate 1536+drvinfo_sz+RXDESC_SIZE to defrag packet.
|
|
||||||
// modify alloc_sz for recvive crc error packet by thomas 2011-06-02
|
|
||||||
if((pattrib->mfrag == 1)&&(pattrib->frag_num == 0)){
|
|
||||||
//alloc_sz = 1664; //1664 is 128 alignment.
|
|
||||||
if(skb_len <= 1650)
|
|
||||||
alloc_sz = 1664;
|
|
||||||
else
|
|
||||||
alloc_sz = skb_len + 14;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
alloc_sz = skb_len;
|
|
||||||
// 6 is for IP header 8 bytes alignment in QoS packet case.
|
|
||||||
// 8 is for skb->data 4 bytes alignment.
|
|
||||||
alloc_sz += 14;
|
|
||||||
}
|
|
||||||
|
|
||||||
pkt_copy = rtw_skb_alloc(alloc_sz);
|
|
||||||
|
|
||||||
if(pkt_copy)
|
|
||||||
{
|
|
||||||
pkt_copy->dev = padapter->pnetdev;
|
|
||||||
precvframe->u.hdr.pkt = pkt_copy;
|
|
||||||
skb_reserve( pkt_copy, 8 - ((SIZE_PTR)( pkt_copy->data ) & 7 ));//force pkt_copy->data at 8-byte alignment address
|
|
||||||
skb_reserve( pkt_copy, shift_sz );//force ip_hdr at 8-byte alignment address according to shift_sz.
|
|
||||||
_rtw_memcpy(pkt_copy->data, (ptr + rx_report_sz + pattrib->shift_sz), skb_len);
|
|
||||||
precvframe->u.hdr.rx_head = pkt_copy->head;
|
|
||||||
precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pkt_copy->data;
|
|
||||||
precvframe->u.hdr.rx_end = skb_end_pointer(pkt_copy);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if((pattrib->mfrag == 1)&&(pattrib->frag_num == 0))
|
|
||||||
{
|
|
||||||
DBG_8192C("rtl8188es_recv_tasklet: alloc_skb fail , drop frag frame \n");
|
|
||||||
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
precvframe->u.hdr.pkt = rtw_skb_clone(precvbuf->pskb);
|
|
||||||
if(precvframe->u.hdr.pkt)
|
|
||||||
{
|
|
||||||
_pkt *pkt_clone = precvframe->u.hdr.pkt;
|
|
||||||
|
|
||||||
pkt_clone->data = ptr + rx_report_sz + pattrib->shift_sz;
|
|
||||||
skb_reset_tail_pointer(pkt_clone);
|
|
||||||
precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail
|
|
||||||
= pkt_clone->data;
|
|
||||||
precvframe->u.hdr.rx_end = pkt_clone->data + skb_len;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DBG_8192C("rtl8188es_recv_tasklet: rtw_skb_clone fail\n");
|
|
||||||
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
recvframe_put(precvframe, skb_len);
|
|
||||||
//recvframe_pull(precvframe, drvinfo_sz + RXDESC_SIZE);
|
|
||||||
|
|
||||||
if (pHalData->ReceiveConfig & RCR_APPFCS)
|
|
||||||
recvframe_pull_tail(precvframe, IEEE80211_FCS_LEN);
|
|
||||||
|
|
||||||
// update drv info
|
|
||||||
if (pHalData->ReceiveConfig & RCR_APP_BA_SSN) {
|
|
||||||
//rtl8723s_update_bassn(padapter, (ptr + RXDESC_SIZE));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(pattrib->pkt_rpt_type == NORMAL_RX)//Normal rx packet
|
|
||||||
{
|
|
||||||
pphy_status = (struct phy_stat *)(ptr + (rx_report_sz - pattrib->drvinfo_sz));
|
|
||||||
|
|
||||||
#ifdef CONFIG_CONCURRENT_MODE
|
|
||||||
if(rtw_buddy_adapter_up(padapter))
|
|
||||||
{
|
|
||||||
if(pre_recv_entry(precvframe, precvbuf, (struct phy_stat*)pphy_status) != _SUCCESS)
|
|
||||||
{
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,
|
|
||||||
("recvbuf2recvframe: recv_entry(precvframe) != _SUCCESS\n"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
if (pattrib->physt)
|
|
||||||
update_recvframe_phyinfo_88e(precvframe, (struct phy_stat*)pphy_status);
|
|
||||||
|
|
||||||
if (rtw_recv_entry(precvframe) != _SUCCESS)
|
|
||||||
{
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("%s: rtw_recv_entry(precvframe) != _SUCCESS\n",__FUNCTION__));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{ // pkt_rpt_type == TX_REPORT1-CCX, TX_REPORT2-TX RTP,HIS_REPORT-USB HISR RTP
|
|
||||||
|
|
||||||
//enqueue recvframe to txrtp queue
|
|
||||||
if(pattrib->pkt_rpt_type == TX_REPORT1){
|
|
||||||
//DBG_8192C("rx CCX \n");
|
|
||||||
//CCX-TXRPT ack for xmit mgmt frames.
|
|
||||||
handle_txrpt_ccx_88e(padapter, precvframe->u.hdr.rx_data);
|
|
||||||
}
|
|
||||||
else if(pattrib->pkt_rpt_type == TX_REPORT2){
|
|
||||||
//printk("rx TX RPT \n");
|
|
||||||
ODM_RA_TxRPT2Handle_8188E(
|
|
||||||
&pHalData->odmpriv,
|
|
||||||
precvframe->u.hdr.rx_data,
|
|
||||||
pattrib->pkt_len,
|
|
||||||
pattrib->MacIDValidEntry[0],
|
|
||||||
pattrib->MacIDValidEntry[1]
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
else if(pattrib->pkt_rpt_type == HIS_REPORT){
|
|
||||||
printk("rx USB HISR \n");
|
|
||||||
}*/
|
|
||||||
|
|
||||||
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Page size of receive package is 128 bytes alignment =>DMA AGG
|
|
||||||
// refer to _InitTransferPageSize()
|
|
||||||
pkt_offset = _RND128(pkt_offset);
|
|
||||||
transfer_len -= pkt_offset;
|
|
||||||
ptr += pkt_offset;
|
|
||||||
precvframe = NULL;
|
|
||||||
pkt_copy = NULL;
|
|
||||||
}while(transfer_len>0);
|
|
||||||
|
|
||||||
precvbuf->len = 0;
|
|
||||||
|
|
||||||
rtw_enqueue_recvbuf(precvbuf, &precvpriv->free_recv_buf_queue);
|
|
||||||
} while (1);
|
|
||||||
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static s32 pre_recv_entry(union recv_frame *precvframe, struct recv_buf *precvbuf, struct phy_stat *pphy_status)
|
|
||||||
{
|
|
||||||
s32 ret=_SUCCESS;
|
|
||||||
#ifdef CONFIG_CONCURRENT_MODE
|
|
||||||
u8 *primary_myid, *secondary_myid, *paddr1;
|
|
||||||
union recv_frame *precvframe_if2 = NULL;
|
|
||||||
_adapter *primary_padapter = precvframe->u.hdr.adapter;
|
|
||||||
_adapter *secondary_padapter = primary_padapter->pbuddy_adapter;
|
|
||||||
struct recv_priv *precvpriv = &primary_padapter->recvpriv;
|
|
||||||
_queue *pfree_recv_queue = &precvpriv->free_recv_queue;
|
|
||||||
u8 *pbuf = precvframe->u.hdr.rx_head;
|
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(primary_padapter);
|
|
||||||
|
|
||||||
if(!secondary_padapter)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
paddr1 = GetAddr1Ptr(precvframe->u.hdr.rx_data);
|
|
||||||
|
|
||||||
if(IS_MCAST(paddr1) == _FALSE)//unicast packets
|
|
||||||
{
|
|
||||||
//primary_myid = myid(&primary_padapter->eeprompriv);
|
|
||||||
secondary_myid = myid(&secondary_padapter->eeprompriv);
|
|
||||||
|
|
||||||
if(_rtw_memcmp(paddr1, secondary_myid, ETH_ALEN))
|
|
||||||
{
|
|
||||||
//change to secondary interface
|
|
||||||
precvframe->u.hdr.adapter = secondary_padapter;
|
|
||||||
}
|
|
||||||
|
|
||||||
//ret = recv_entry(precvframe);
|
|
||||||
|
|
||||||
}
|
|
||||||
else // Handle BC/MC Packets
|
|
||||||
{
|
|
||||||
//clone/copy to if2
|
|
||||||
u8 shift_sz = 0;
|
|
||||||
u32 alloc_sz, skb_len;
|
|
||||||
_pkt *pkt_copy = NULL;
|
|
||||||
struct rx_pkt_attrib *pattrib = NULL;
|
|
||||||
|
|
||||||
precvframe_if2 = rtw_alloc_recvframe(pfree_recv_queue);
|
|
||||||
|
|
||||||
if(!precvframe_if2)
|
|
||||||
return _FAIL;
|
|
||||||
|
|
||||||
precvframe_if2->u.hdr.adapter = secondary_padapter;
|
|
||||||
_rtw_init_listhead(&precvframe_if2->u.hdr.list);
|
|
||||||
precvframe_if2->u.hdr.precvbuf = NULL; //can't access the precvbuf for new arch.
|
|
||||||
precvframe_if2->u.hdr.len=0;
|
|
||||||
_rtw_memcpy(&precvframe_if2->u.hdr.attrib, &precvframe->u.hdr.attrib, sizeof(struct rx_pkt_attrib));
|
|
||||||
pattrib = &precvframe_if2->u.hdr.attrib;
|
|
||||||
|
|
||||||
pkt_copy = rtw_skb_copy( precvframe->u.hdr.pkt);
|
|
||||||
if (pkt_copy == NULL)
|
|
||||||
{
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_crit_, ("%s: no enough memory to allocate SKB!\n",__FUNCTION__));
|
|
||||||
rtw_free_recvframe(precvframe_if2, &precvpriv->free_recv_queue);
|
|
||||||
rtw_enqueue_recvbuf_to_head(precvbuf, &precvpriv->recv_buf_pending_queue);
|
|
||||||
|
|
||||||
// The case of can't allocte skb is serious and may never be recovered,
|
|
||||||
// once bDriverStopped is enable, this task should be stopped.
|
|
||||||
if (secondary_padapter->bDriverStopped == _FALSE)
|
|
||||||
tasklet_schedule(&precvpriv->recv_tasklet);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
pkt_copy->dev = secondary_padapter->pnetdev;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if((pattrib->mfrag == 1)&&(pattrib->frag_num == 0)){
|
|
||||||
//alloc_sz = 1664; //1664 is 128 alignment.
|
|
||||||
if(skb_len <= 1650)
|
|
||||||
alloc_sz = 1664;
|
|
||||||
else
|
|
||||||
alloc_sz = skb_len + 14;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
alloc_sz = skb_len;
|
|
||||||
// 6 is for IP header 8 bytes alignment in QoS packet case.
|
|
||||||
// 8 is for skb->data 4 bytes alignment.
|
|
||||||
alloc_sz += 14;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 1
|
|
||||||
precvframe_if2->u.hdr.pkt = pkt_copy;
|
|
||||||
precvframe_if2->u.hdr.rx_head = pkt_copy->head;
|
|
||||||
precvframe_if2->u.hdr.rx_data = precvframe_if2->u.hdr.rx_tail = pkt_copy->data;
|
|
||||||
precvframe_if2->u.hdr.rx_end = pkt_copy->data + alloc_sz;
|
|
||||||
#endif
|
|
||||||
recvframe_put(precvframe_if2, pkt_offset);
|
|
||||||
recvframe_pull(precvframe_if2, RXDESC_SIZE + pattrib->drvinfo_sz);
|
|
||||||
|
|
||||||
if ( pHalData->ReceiveConfig & RCR_APPFCS)
|
|
||||||
recvframe_pull_tail(precvframe_if2, IEEE80211_FCS_LEN);
|
|
||||||
|
|
||||||
if (pattrib->physt)
|
|
||||||
update_recvframe_phyinfo_88e(precvframe_if2, pphy_status);
|
|
||||||
|
|
||||||
if(rtw_recv_entry(precvframe_if2) != _SUCCESS)
|
|
||||||
{
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,
|
|
||||||
("recvbuf2recvframe: rtw_recv_entry(precvframe) != _SUCCESS\n"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (precvframe->u.hdr.attrib.physt)
|
|
||||||
update_recvframe_phyinfo_88e(precvframe, (struct phy_stat*)pphy_status);
|
|
||||||
ret = rtw_recv_entry(precvframe);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static void rtl8188es_recv_tasklet(void *priv)
|
|
||||||
{
|
|
||||||
PADAPTER padapter;
|
|
||||||
PHAL_DATA_TYPE pHalData;
|
|
||||||
struct recv_priv *precvpriv;
|
|
||||||
struct recv_buf *precvbuf;
|
|
||||||
union recv_frame *precvframe;
|
|
||||||
struct recv_frame_hdr *phdr;
|
|
||||||
struct rx_pkt_attrib *pattrib;
|
|
||||||
u8 *ptr;
|
|
||||||
_pkt *ppkt;
|
|
||||||
u32 pkt_offset;
|
|
||||||
_irqL irql;
|
|
||||||
#ifdef CONFIG_CONCURRENT_MODE
|
|
||||||
struct recv_stat *prxstat;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
padapter = (PADAPTER)priv;
|
|
||||||
pHalData = GET_HAL_DATA(padapter);
|
|
||||||
precvpriv = &padapter->recvpriv;
|
|
||||||
|
|
||||||
do {
|
|
||||||
precvbuf = rtw_dequeue_recvbuf(&precvpriv->recv_buf_pending_queue);
|
|
||||||
if (NULL == precvbuf) break;
|
|
||||||
|
|
||||||
ptr = precvbuf->pdata;
|
|
||||||
|
|
||||||
while (ptr < precvbuf->ptail)
|
|
||||||
{
|
|
||||||
precvframe = rtw_alloc_recvframe(&precvpriv->free_recv_queue);
|
|
||||||
if (precvframe == NULL) {
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("%s: no enough recv frame!\n",__FUNCTION__));
|
|
||||||
rtw_enqueue_recvbuf_to_head(precvbuf, &precvpriv->recv_buf_pending_queue);
|
|
||||||
|
|
||||||
// The case of can't allocte recvframe should be temporary,
|
|
||||||
// schedule again and hope recvframe is available next time.
|
|
||||||
tasklet_schedule(&precvpriv->recv_tasklet);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
phdr = &precvframe->u.hdr;
|
|
||||||
pattrib = &phdr->attrib;
|
|
||||||
|
|
||||||
//rx desc parsing
|
|
||||||
update_recvframe_attrib_88e(precvframe, (struct recv_stat*)ptr);
|
|
||||||
#ifdef CONFIG_CONCURRENT_MODE
|
|
||||||
prxstat = (struct recv_stat*)ptr;
|
|
||||||
#endif
|
|
||||||
// fix Hardware RX data error, drop whole recv_buffer
|
|
||||||
if ((!(pHalData->ReceiveConfig & RCR_ACRC32)) && pattrib->crc_err)
|
|
||||||
{
|
|
||||||
DBG_8192C("%s()-%d: RX Warning! rx CRC ERROR !!\n", __FUNCTION__, __LINE__);
|
|
||||||
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
pkt_offset = RXDESC_SIZE + pattrib->drvinfo_sz + pattrib->pkt_len;
|
|
||||||
|
|
||||||
if ((ptr + pkt_offset) > precvbuf->ptail) {
|
|
||||||
DBG_8192C("%s()-%d: : next pkt len(%p,%d) exceed ptail(%p)!\n", __FUNCTION__, __LINE__, ptr, pkt_offset, precvbuf->ptail);
|
|
||||||
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((pattrib->crc_err) || (pattrib->icv_err))
|
|
||||||
{
|
|
||||||
|
|
||||||
DBG_8192C("%s: crc_err=%d icv_err=%d, skip!\n", __FUNCTION__, pattrib->crc_err, pattrib->icv_err);
|
|
||||||
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ppkt = rtw_skb_clone(precvbuf->pskb);
|
|
||||||
if (ppkt == NULL)
|
|
||||||
{
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_crit_, ("%s: no enough memory to allocate SKB!\n",__FUNCTION__));
|
|
||||||
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
|
|
||||||
rtw_enqueue_recvbuf_to_head(precvbuf, &precvpriv->recv_buf_pending_queue);
|
|
||||||
|
|
||||||
// The case of can't allocte skb is serious and may never be recovered,
|
|
||||||
// once bDriverStopped is enable, this task should be stopped.
|
|
||||||
if (padapter->bDriverStopped == _FALSE) {
|
|
||||||
tasklet_schedule(&precvpriv->recv_tasklet);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
phdr->pkt = ppkt;
|
|
||||||
phdr->len = 0;
|
|
||||||
phdr->rx_head = precvbuf->phead;
|
|
||||||
phdr->rx_data = phdr->rx_tail = precvbuf->pdata;
|
|
||||||
phdr->rx_end = precvbuf->pend;
|
|
||||||
|
|
||||||
recvframe_put(precvframe, pkt_offset);
|
|
||||||
recvframe_pull(precvframe, RXDESC_SIZE + pattrib->drvinfo_sz);
|
|
||||||
|
|
||||||
if (pHalData->ReceiveConfig & RCR_APPFCS)
|
|
||||||
recvframe_pull_tail(precvframe, IEEE80211_FCS_LEN);
|
|
||||||
|
|
||||||
// move to drv info position
|
|
||||||
ptr += RXDESC_SIZE;
|
|
||||||
|
|
||||||
// update drv info
|
|
||||||
if (pHalData->ReceiveConfig & RCR_APP_BA_SSN) {
|
|
||||||
// rtl8723s_update_bassn(padapter, pdrvinfo);
|
|
||||||
ptr += 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(pattrib->pkt_rpt_type == NORMAL_RX)//Normal rx packet
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_CONCURRENT_MODE
|
|
||||||
if(rtw_buddy_adapter_up(padapter))
|
|
||||||
{
|
|
||||||
if(pre_recv_entry(precvframe, precvbuf, (struct phy_stat*)ptr) != _SUCCESS)
|
|
||||||
{
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,
|
|
||||||
("recvbuf2recvframe: recv_entry(precvframe) != _SUCCESS\n"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
if (pattrib->physt)
|
|
||||||
update_recvframe_phyinfo_88e(precvframe, (struct phy_stat*)ptr);
|
|
||||||
|
|
||||||
if (rtw_recv_entry(precvframe) != _SUCCESS)
|
|
||||||
{
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,
|
|
||||||
("recvbuf2recvframe: rtw_recv_entry(precvframe) != _SUCCESS\n"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{ // pkt_rpt_type == TX_REPORT1-CCX, TX_REPORT2-TX RTP,HIS_REPORT-USB HISR RTP
|
|
||||||
|
|
||||||
//enqueue recvframe to txrtp queue
|
|
||||||
if(pattrib->pkt_rpt_type == TX_REPORT1){
|
|
||||||
DBG_8192C("rx CCX \n");
|
|
||||||
}
|
|
||||||
else if(pattrib->pkt_rpt_type == TX_REPORT2){
|
|
||||||
//DBG_8192C("rx TX RPT \n");
|
|
||||||
ODM_RA_TxRPT2Handle_8188E(
|
|
||||||
&pHalData->odmpriv,
|
|
||||||
precvframe->u.hdr.rx_data,
|
|
||||||
pattrib->pkt_len,
|
|
||||||
pattrib->MacIDValidEntry[0],
|
|
||||||
pattrib->MacIDValidEntry[1]
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
else if(pattrib->pkt_rpt_type == HIS_REPORT){
|
|
||||||
DBG_8192C("rx USB HISR \n");
|
|
||||||
}*/
|
|
||||||
|
|
||||||
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Page size of receive package is 128 bytes alignment =>DMA AGG
|
|
||||||
// refer to _InitTransferPageSize()
|
|
||||||
pkt_offset = _RND128(pkt_offset);
|
|
||||||
precvbuf->pdata += pkt_offset;
|
|
||||||
ptr = precvbuf->pdata;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
rtw_skb_free(precvbuf->pskb);
|
|
||||||
precvbuf->pskb = NULL;
|
|
||||||
rtw_enqueue_recvbuf(precvbuf, &precvpriv->free_recv_buf_queue);
|
|
||||||
|
|
||||||
} while (1);
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,170 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*
|
|
||||||
*
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
#include <drv_conf.h>
|
|
||||||
#include <osdep_service.h>
|
|
||||||
#include <drv_types.h>
|
|
||||||
#include <rtl8188e_hal.h>
|
|
||||||
|
|
||||||
//================================================================================
|
|
||||||
// LED object.
|
|
||||||
//================================================================================
|
|
||||||
|
|
||||||
|
|
||||||
//================================================================================
|
|
||||||
// Prototype of protected function.
|
|
||||||
//================================================================================
|
|
||||||
|
|
||||||
|
|
||||||
//================================================================================
|
|
||||||
// LED_819xUsb routines.
|
|
||||||
//================================================================================
|
|
||||||
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// Turn on LED according to LedPin specified.
|
|
||||||
//
|
|
||||||
void
|
|
||||||
SwLedOn(
|
|
||||||
_adapter *padapter,
|
|
||||||
PLED_871x pLed
|
|
||||||
)
|
|
||||||
{
|
|
||||||
u8 LedCfg;
|
|
||||||
//HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
|
||||||
|
|
||||||
if( (padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
LedCfg = rtw_read8(padapter, REG_LEDCFG2);
|
|
||||||
switch(pLed->LedPin)
|
|
||||||
{
|
|
||||||
case LED_PIN_LED0:
|
|
||||||
rtw_write8(padapter, REG_LEDCFG2, (LedCfg&0xf0)|BIT5|BIT6); // SW control led0 on.
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LED_PIN_LED1:
|
|
||||||
rtw_write8(padapter, REG_LEDCFG2, (LedCfg&0x0f)|BIT5); // SW control led1 on.
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
pLed->bLedOn = _TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// Turn off LED according to LedPin specified.
|
|
||||||
//
|
|
||||||
void
|
|
||||||
SwLedOff(
|
|
||||||
_adapter *padapter,
|
|
||||||
PLED_871x pLed
|
|
||||||
)
|
|
||||||
{
|
|
||||||
u8 LedCfg;
|
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
|
||||||
|
|
||||||
if((padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
|
|
||||||
{
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
LedCfg = rtw_read8(padapter, REG_LEDCFG2);//0x4E
|
|
||||||
|
|
||||||
switch(pLed->LedPin)
|
|
||||||
{
|
|
||||||
case LED_PIN_LED0:
|
|
||||||
if(pHalData->bLedOpenDrain == _TRUE) // Open-drain arrangement for controlling the LED)
|
|
||||||
{
|
|
||||||
LedCfg &= 0x90; // Set to software control.
|
|
||||||
rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3));
|
|
||||||
LedCfg = rtw_read8(padapter, REG_MAC_PINMUX_CFG);
|
|
||||||
LedCfg &= 0xFE;
|
|
||||||
rtw_write8(padapter, REG_MAC_PINMUX_CFG, LedCfg);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3|BIT5|BIT6));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case LED_PIN_LED1:
|
|
||||||
LedCfg &= 0x0f; // Set to software control.
|
|
||||||
rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3));
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
exit:
|
|
||||||
pLed->bLedOn = _FALSE;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//================================================================================
|
|
||||||
// Interface to manipulate LED objects.
|
|
||||||
//================================================================================
|
|
||||||
|
|
||||||
|
|
||||||
//================================================================================
|
|
||||||
// Default LED behavior.
|
|
||||||
//================================================================================
|
|
||||||
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// Initialize all LED_871x objects.
|
|
||||||
//
|
|
||||||
void
|
|
||||||
rtl8188eu_InitSwLeds(
|
|
||||||
_adapter *padapter
|
|
||||||
)
|
|
||||||
{
|
|
||||||
struct led_priv *pledpriv = &(padapter->ledpriv);
|
|
||||||
|
|
||||||
pledpriv->LedControlHandler = LedControl871x;
|
|
||||||
|
|
||||||
InitLed871x(padapter, &(pledpriv->SwLed0), LED_PIN_LED0);
|
|
||||||
|
|
||||||
InitLed871x(padapter,&(pledpriv->SwLed1), LED_PIN_LED1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// DeInitialize all LED_819xUsb objects.
|
|
||||||
//
|
|
||||||
void
|
|
||||||
rtl8188eu_DeInitSwLeds(
|
|
||||||
_adapter *padapter
|
|
||||||
)
|
|
||||||
{
|
|
||||||
struct led_priv *ledpriv = &(padapter->ledpriv);
|
|
||||||
|
|
||||||
DeInitLed871x( &(ledpriv->SwLed0) );
|
|
||||||
DeInitLed871x( &(ledpriv->SwLed1) );
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,212 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* 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 _RTL8188EU_RECV_C_
|
|
||||||
#include <drv_conf.h>
|
|
||||||
#include <osdep_service.h>
|
|
||||||
#include <drv_types.h>
|
|
||||||
#include <recv_osdep.h>
|
|
||||||
#include <mlme_osdep.h>
|
|
||||||
#include <ip.h>
|
|
||||||
#include <if_ether.h>
|
|
||||||
#include <ethernet.h>
|
|
||||||
|
|
||||||
#include <usb_ops.h>
|
|
||||||
|
|
||||||
#include <wifi.h>
|
|
||||||
#include <circ_buf.h>
|
|
||||||
|
|
||||||
#include <rtl8188e_hal.h>
|
|
||||||
|
|
||||||
|
|
||||||
void rtl8188eu_init_recvbuf(_adapter *padapter, struct recv_buf *precvbuf)
|
|
||||||
{
|
|
||||||
|
|
||||||
precvbuf->transfer_len = 0;
|
|
||||||
|
|
||||||
precvbuf->len = 0;
|
|
||||||
|
|
||||||
precvbuf->ref_cnt = 0;
|
|
||||||
|
|
||||||
if(precvbuf->pbuf)
|
|
||||||
{
|
|
||||||
precvbuf->pdata = precvbuf->phead = precvbuf->ptail = precvbuf->pbuf;
|
|
||||||
precvbuf->pend = precvbuf->pdata + MAX_RECVBUF_SZ;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int rtl8188eu_init_recv_priv(_adapter *padapter)
|
|
||||||
{
|
|
||||||
struct recv_priv *precvpriv = &padapter->recvpriv;
|
|
||||||
int i, res = _SUCCESS;
|
|
||||||
struct recv_buf *precvbuf;
|
|
||||||
|
|
||||||
#ifdef CONFIG_RECV_THREAD_MODE
|
|
||||||
_rtw_init_sema(&precvpriv->recv_sema, 0);//will be removed
|
|
||||||
_rtw_init_sema(&precvpriv->terminate_recvthread_sema, 0);//will be removed
|
|
||||||
#endif
|
|
||||||
|
|
||||||
tasklet_init(&precvpriv->recv_tasklet,
|
|
||||||
(void(*)(unsigned long))rtl8188eu_recv_tasklet,
|
|
||||||
(unsigned long)padapter);
|
|
||||||
|
|
||||||
#ifdef CONFIG_USB_INTERRUPT_IN_PIPE
|
|
||||||
precvpriv->int_in_urb = usb_alloc_urb(0, GFP_KERNEL);
|
|
||||||
if(precvpriv->int_in_urb == NULL){
|
|
||||||
res= _FAIL;
|
|
||||||
DBG_8192C("alloc_urb for interrupt in endpoint fail !!!!\n");
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
precvpriv->int_in_buf = rtw_zmalloc(INTERRUPT_MSG_FORMAT_LEN);
|
|
||||||
if(precvpriv->int_in_buf == NULL){
|
|
||||||
res= _FAIL;
|
|
||||||
DBG_8192C("alloc_mem for interrupt in endpoint fail !!!!\n");
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//init recv_buf
|
|
||||||
_rtw_init_queue(&precvpriv->free_recv_buf_queue);
|
|
||||||
|
|
||||||
#ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
|
|
||||||
_rtw_init_queue(&precvpriv->recv_buf_pending_queue);
|
|
||||||
#endif // CONFIG_USE_USB_BUFFER_ALLOC_RX
|
|
||||||
|
|
||||||
precvpriv->pallocated_recv_buf = rtw_zmalloc(NR_RECVBUFF *sizeof(struct recv_buf) + 4);
|
|
||||||
if(precvpriv->pallocated_recv_buf==NULL){
|
|
||||||
res= _FAIL;
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("alloc recv_buf fail!\n"));
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
_rtw_memset(precvpriv->pallocated_recv_buf, 0, NR_RECVBUFF *sizeof(struct recv_buf) + 4);
|
|
||||||
|
|
||||||
precvpriv->precv_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(precvpriv->pallocated_recv_buf), 4);
|
|
||||||
//precvpriv->precv_buf = precvpriv->pallocated_recv_buf + 4 -
|
|
||||||
// ((uint) (precvpriv->pallocated_recv_buf) &(4-1));
|
|
||||||
|
|
||||||
|
|
||||||
precvbuf = (struct recv_buf*)precvpriv->precv_buf;
|
|
||||||
|
|
||||||
for(i=0; i < NR_RECVBUFF ; i++)
|
|
||||||
{
|
|
||||||
_rtw_init_listhead(&precvbuf->list);
|
|
||||||
|
|
||||||
_rtw_spinlock_init(&precvbuf->recvbuf_lock);
|
|
||||||
|
|
||||||
precvbuf->alloc_sz = MAX_RECVBUF_SZ;
|
|
||||||
|
|
||||||
res = rtw_os_recvbuf_resource_alloc(padapter, precvbuf);
|
|
||||||
if(res==_FAIL)
|
|
||||||
break;
|
|
||||||
|
|
||||||
precvbuf->ref_cnt = 0;
|
|
||||||
precvbuf->adapter =padapter;
|
|
||||||
|
|
||||||
|
|
||||||
//rtw_list_insert_tail(&precvbuf->list, &(precvpriv->free_recv_buf_queue.queue));
|
|
||||||
|
|
||||||
precvbuf++;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
precvpriv->free_recv_buf_queue_cnt = NR_RECVBUFF;
|
|
||||||
|
|
||||||
|
|
||||||
skb_queue_head_init(&precvpriv->rx_skb_queue);
|
|
||||||
|
|
||||||
#ifdef CONFIG_PREALLOC_RECV_SKB
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
SIZE_PTR tmpaddr=0;
|
|
||||||
SIZE_PTR alignment=0;
|
|
||||||
struct sk_buff *pskb=NULL;
|
|
||||||
|
|
||||||
skb_queue_head_init(&precvpriv->free_recv_skb_queue);
|
|
||||||
|
|
||||||
for(i=0; i<NR_PREALLOC_RECV_SKB; i++)
|
|
||||||
{
|
|
||||||
pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
|
|
||||||
|
|
||||||
if(pskb)
|
|
||||||
{
|
|
||||||
pskb->dev = padapter->pnetdev;
|
|
||||||
|
|
||||||
tmpaddr = (SIZE_PTR)pskb->data;
|
|
||||||
alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);
|
|
||||||
skb_reserve(pskb, (RECVBUFF_ALIGN_SZ - alignment));
|
|
||||||
|
|
||||||
skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);
|
|
||||||
}
|
|
||||||
|
|
||||||
pskb=NULL;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
exit:
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
void rtl8188eu_free_recv_priv (_adapter *padapter)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
struct recv_buf *precvbuf;
|
|
||||||
struct recv_priv *precvpriv = &padapter->recvpriv;
|
|
||||||
|
|
||||||
precvbuf = (struct recv_buf *)precvpriv->precv_buf;
|
|
||||||
|
|
||||||
for(i=0; i < NR_RECVBUFF ; i++)
|
|
||||||
{
|
|
||||||
rtw_os_recvbuf_resource_free(padapter, precvbuf);
|
|
||||||
precvbuf++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(precvpriv->pallocated_recv_buf)
|
|
||||||
rtw_mfree(precvpriv->pallocated_recv_buf, NR_RECVBUFF *sizeof(struct recv_buf) + 4);
|
|
||||||
|
|
||||||
#ifdef CONFIG_USB_INTERRUPT_IN_PIPE
|
|
||||||
if(precvpriv->int_in_urb)
|
|
||||||
usb_free_urb(precvpriv->int_in_urb);
|
|
||||||
|
|
||||||
if(precvpriv->int_in_buf)
|
|
||||||
rtw_mfree(precvpriv->int_in_buf, INTERRUPT_MSG_FORMAT_LEN);
|
|
||||||
#endif//CONFIG_USB_INTERRUPT_IN_PIPE
|
|
||||||
|
|
||||||
if (skb_queue_len(&precvpriv->rx_skb_queue)) {
|
|
||||||
DBG_8192C(KERN_WARNING "rx_skb_queue not empty\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
rtw_skb_queue_purge(&precvpriv->rx_skb_queue);
|
|
||||||
|
|
||||||
#ifdef CONFIG_PREALLOC_RECV_SKB
|
|
||||||
|
|
||||||
if (skb_queue_len(&precvpriv->free_recv_skb_queue)) {
|
|
||||||
DBG_8192C(KERN_WARNING "free_recv_skb_queue not empty, %d\n", skb_queue_len(&precvpriv->free_recv_skb_queue));
|
|
||||||
}
|
|
||||||
|
|
||||||
rtw_skb_queue_purge(&precvpriv->free_recv_skb_queue);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
2255
hal/rtl8188e_cmd.c
Normal file → Executable file
2255
hal/rtl8188e_cmd.c
Normal file → Executable file
File diff suppressed because it is too large
Load diff
914
hal/rtl8188e_dm.c
Normal file → Executable file
914
hal/rtl8188e_dm.c
Normal file → Executable file
|
@ -1,267 +1,647 @@
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* 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
|
* under the terms of version 2 of the GNU General Public License as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
* more details.
|
* more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License along with
|
* 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.,
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
/* */
|
//============================================================
|
||||||
/* Description: */
|
// Description:
|
||||||
/* */
|
//
|
||||||
/* This file is for 92CE/92CU dynamic mechanism only */
|
// This file is for 92CE/92CU dynamic mechanism only
|
||||||
/* */
|
//
|
||||||
/* */
|
//
|
||||||
/* */
|
//============================================================
|
||||||
#define _RTL8188E_DM_C_
|
#define _RTL8188E_DM_C_
|
||||||
|
|
||||||
#include <osdep_service.h>
|
//============================================================
|
||||||
#include <drv_types.h>
|
// include files
|
||||||
|
//============================================================
|
||||||
#include <rtl8188e_hal.h>
|
#include <drv_conf.h>
|
||||||
|
#include <osdep_service.h>
|
||||||
static void dm_CheckStatistics(struct adapter *Adapter)
|
#include <drv_types.h>
|
||||||
{
|
#include <rtw_byteorder.h>
|
||||||
}
|
|
||||||
|
#include <rtl8188e_hal.h>
|
||||||
/* Initialize GPIO setting registers */
|
|
||||||
static void dm_InitGPIOSetting(struct adapter *Adapter)
|
//============================================================
|
||||||
{
|
// Global var
|
||||||
u8 tmp1byte;
|
//============================================================
|
||||||
|
|
||||||
tmp1byte = rtw_read8(Adapter, REG_GPIO_MUXCFG);
|
|
||||||
tmp1byte &= (GPIOSEL_GPIO | ~GPIOSEL_ENBT);
|
static VOID
|
||||||
|
dm_CheckProtection(
|
||||||
rtw_write8(Adapter, REG_GPIO_MUXCFG, tmp1byte);
|
IN PADAPTER Adapter
|
||||||
}
|
)
|
||||||
|
{
|
||||||
/* */
|
#if 0
|
||||||
/* functions */
|
PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo);
|
||||||
/* */
|
u1Byte CurRate, RateThreshold;
|
||||||
static void Init_ODM_ComInfo_88E(struct adapter *Adapter)
|
|
||||||
{
|
if(pMgntInfo->pHTInfo->bCurBW40MHz)
|
||||||
struct hal_data_8188e *hal_data = GET_HAL_DATA(Adapter);
|
RateThreshold = MGN_MCS1;
|
||||||
struct dm_priv *pdmpriv = &hal_data->dmpriv;
|
else
|
||||||
struct odm_dm_struct *dm_odm = &(hal_data->odmpriv);
|
RateThreshold = MGN_MCS3;
|
||||||
u8 cut_ver, fab_ver;
|
|
||||||
|
if(Adapter->TxStats.CurrentInitTxRate <= RateThreshold)
|
||||||
/* Init Value */
|
{
|
||||||
_rtw_memset(dm_odm, 0, sizeof(*dm_odm));
|
pMgntInfo->bDmDisableProtect = TRUE;
|
||||||
|
DbgPrint("Forced disable protect: %x\n", Adapter->TxStats.CurrentInitTxRate);
|
||||||
dm_odm->Adapter = Adapter;
|
}
|
||||||
|
else
|
||||||
ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_PLATFORM, ODM_CE);
|
{
|
||||||
|
pMgntInfo->bDmDisableProtect = FALSE;
|
||||||
if (Adapter->interface_type == RTW_GSPI)
|
DbgPrint("Enable protect: %x\n", Adapter->TxStats.CurrentInitTxRate);
|
||||||
ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_INTERFACE, ODM_ITRF_SDIO);
|
}
|
||||||
else
|
#endif
|
||||||
ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_INTERFACE, Adapter->interface_type);/* RTL871X_HCI_TYPE */
|
}
|
||||||
|
|
||||||
ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_IC_TYPE, ODM_RTL8188E);
|
static VOID
|
||||||
|
dm_CheckStatistics(
|
||||||
fab_ver = ODM_TSMC;
|
IN PADAPTER Adapter
|
||||||
cut_ver = ODM_CUT_A;
|
)
|
||||||
|
{
|
||||||
ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_FAB_VER, fab_ver);
|
#if 0
|
||||||
ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_CUT_VER, cut_ver);
|
if(!Adapter->MgntInfo.bMediaConnect)
|
||||||
|
return;
|
||||||
ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_MP_TEST_CHIP, IS_NORMAL_CHIP(hal_data->VersionID));
|
|
||||||
|
//2008.12.10 tynli Add for getting Current_Tx_Rate_Reg flexibly.
|
||||||
ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_PATCH_ID, hal_data->CustomerID);
|
rtw_hal_get_hwreg( Adapter, HW_VAR_INIT_TX_RATE, (pu1Byte)(&Adapter->TxStats.CurrentInitTxRate) );
|
||||||
ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_BWIFI_TEST, Adapter->registrypriv.wifi_spec);
|
|
||||||
|
// Calculate current Tx Rate(Successful transmited!!)
|
||||||
if (hal_data->rf_type == RF_1T1R)
|
|
||||||
ODM_CmnInfoUpdate(dm_odm, ODM_CMNINFO_RF_TYPE, ODM_1T1R);
|
// Calculate current Rx Rate(Successful received!!)
|
||||||
else if (hal_data->rf_type == RF_2T2R)
|
|
||||||
ODM_CmnInfoUpdate(dm_odm, ODM_CMNINFO_RF_TYPE, ODM_2T2R);
|
//for tx tx retry count
|
||||||
else if (hal_data->rf_type == RF_1T2R)
|
rtw_hal_get_hwreg( Adapter, HW_VAR_RETRY_COUNT, (pu1Byte)(&Adapter->TxStats.NumTxRetryCount) );
|
||||||
ODM_CmnInfoUpdate(dm_odm, ODM_CMNINFO_RF_TYPE, ODM_1T2R);
|
#endif
|
||||||
|
}
|
||||||
ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_RF_ANTENNA_TYPE, hal_data->TRxAntDivType);
|
|
||||||
|
static void dm_CheckPbcGPIO(_adapter *padapter)
|
||||||
pdmpriv->InitODMFlag = ODM_RF_CALIBRATION |
|
{
|
||||||
ODM_RF_TX_PWR_TRACK;
|
u8 tmp1byte;
|
||||||
|
u8 bPbcPressed = _FALSE;
|
||||||
ODM_CmnInfoUpdate(dm_odm, ODM_CMNINFO_ABILITY, pdmpriv->InitODMFlag);
|
|
||||||
}
|
if(!padapter->registrypriv.hw_wps_pbc)
|
||||||
|
return;
|
||||||
static void Update_ODM_ComInfo_88E(struct adapter *Adapter)
|
|
||||||
{
|
#ifdef CONFIG_USB_HCI
|
||||||
struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
|
tmp1byte = rtw_read8(padapter, GPIO_IO_SEL);
|
||||||
struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
|
tmp1byte |= (HAL_8188E_HW_GPIO_WPS_BIT);
|
||||||
struct pwrctrl_priv *pwrctrlpriv = &Adapter->pwrctrlpriv;
|
rtw_write8(padapter, GPIO_IO_SEL, tmp1byte); //enable GPIO[2] as output mode
|
||||||
struct hal_data_8188e *hal_data = GET_HAL_DATA(Adapter);
|
|
||||||
struct odm_dm_struct *dm_odm = &(hal_data->odmpriv);
|
tmp1byte &= ~(HAL_8188E_HW_GPIO_WPS_BIT);
|
||||||
struct dm_priv *pdmpriv = &hal_data->dmpriv;
|
rtw_write8(padapter, GPIO_IN, tmp1byte); //reset the floating voltage level
|
||||||
int i;
|
|
||||||
|
tmp1byte = rtw_read8(padapter, GPIO_IO_SEL);
|
||||||
pdmpriv->InitODMFlag = ODM_BB_DIG |
|
tmp1byte &= ~(HAL_8188E_HW_GPIO_WPS_BIT);
|
||||||
ODM_BB_RA_MASK |
|
rtw_write8(padapter, GPIO_IO_SEL, tmp1byte); //enable GPIO[2] as input mode
|
||||||
ODM_BB_DYNAMIC_TXPWR |
|
|
||||||
ODM_BB_FA_CNT |
|
tmp1byte =rtw_read8(padapter, GPIO_IN);
|
||||||
ODM_BB_RSSI_MONITOR |
|
|
||||||
ODM_BB_CCK_PD |
|
if (tmp1byte == 0xff)
|
||||||
ODM_BB_PWR_SAVE |
|
return ;
|
||||||
ODM_MAC_EDCA_TURBO |
|
|
||||||
ODM_RF_CALIBRATION |
|
if (tmp1byte&HAL_8188E_HW_GPIO_WPS_BIT)
|
||||||
ODM_RF_TX_PWR_TRACK;
|
{
|
||||||
if (hal_data->AntDivCfg)
|
bPbcPressed = _TRUE;
|
||||||
pdmpriv->InitODMFlag |= ODM_BB_ANT_DIV;
|
}
|
||||||
|
#else
|
||||||
if (Adapter->registrypriv.mp_mode == 1) {
|
tmp1byte = rtw_read8(padapter, GPIO_IN);
|
||||||
pdmpriv->InitODMFlag = ODM_RF_CALIBRATION |
|
//RT_TRACE(COMP_IO, DBG_TRACE, ("dm_CheckPbcGPIO - %x\n", tmp1byte));
|
||||||
ODM_RF_TX_PWR_TRACK;
|
|
||||||
}
|
if (tmp1byte == 0xff || padapter->init_adpt_in_progress)
|
||||||
|
return ;
|
||||||
ODM_CmnInfoUpdate(dm_odm, ODM_CMNINFO_ABILITY, pdmpriv->InitODMFlag);
|
|
||||||
|
if((tmp1byte&HAL_8188E_HW_GPIO_WPS_BIT)==0)
|
||||||
ODM_CmnInfoHook(dm_odm, ODM_CMNINFO_TX_UNI, &(Adapter->xmitpriv.tx_bytes));
|
{
|
||||||
ODM_CmnInfoHook(dm_odm, ODM_CMNINFO_RX_UNI, &(Adapter->recvpriv.rx_bytes));
|
bPbcPressed = _TRUE;
|
||||||
ODM_CmnInfoHook(dm_odm, ODM_CMNINFO_WM_MODE, &(pmlmeext->cur_wireless_mode));
|
}
|
||||||
ODM_CmnInfoHook(dm_odm, ODM_CMNINFO_SEC_CHNL_OFFSET, &(hal_data->nCur40MhzPrimeSC));
|
#endif
|
||||||
ODM_CmnInfoHook(dm_odm, ODM_CMNINFO_SEC_MODE, &(Adapter->securitypriv.dot11PrivacyAlgrthm));
|
|
||||||
ODM_CmnInfoHook(dm_odm, ODM_CMNINFO_BW, &(hal_data->CurrentChannelBW));
|
if( _TRUE == bPbcPressed)
|
||||||
ODM_CmnInfoHook(dm_odm, ODM_CMNINFO_CHNL, &(hal_data->CurrentChannel));
|
{
|
||||||
ODM_CmnInfoHook(dm_odm, ODM_CMNINFO_NET_CLOSED, &(Adapter->net_closed));
|
// Here we only set bPbcPressed to true
|
||||||
ODM_CmnInfoHook(dm_odm, ODM_CMNINFO_MP_MODE, &(Adapter->registrypriv.mp_mode));
|
// After trigger PBC, the variable will be set to false
|
||||||
ODM_CmnInfoHook(dm_odm, ODM_CMNINFO_SCAN, &(pmlmepriv->bScanInProcess));
|
DBG_8192C("CheckPbcGPIO - PBC is pressed\n");
|
||||||
ODM_CmnInfoHook(dm_odm, ODM_CMNINFO_POWER_SAVING, &(pwrctrlpriv->bpower_saving));
|
|
||||||
ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_RF_ANTENNA_TYPE, hal_data->TRxAntDivType);
|
#ifdef RTK_DMP_PLATFORM
|
||||||
|
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12))
|
||||||
for (i = 0; i < NUM_STA; i++)
|
kobject_uevent(&padapter->pnetdev->dev.kobj, KOBJ_NET_PBC);
|
||||||
ODM_CmnInfoPtrArrayHook(dm_odm, ODM_CMNINFO_STA_STATUS, i, NULL);
|
#else
|
||||||
}
|
kobject_hotplug(&padapter->pnetdev->class_dev.kobj, KOBJ_NET_PBC);
|
||||||
|
#endif
|
||||||
void rtl8188e_InitHalDm(struct adapter *Adapter)
|
#else
|
||||||
{
|
|
||||||
struct hal_data_8188e *hal_data = GET_HAL_DATA(Adapter);
|
if ( padapter->pid[0] == 0 )
|
||||||
struct dm_priv *pdmpriv = &hal_data->dmpriv;
|
{ // 0 is the default value and it means the application monitors the HW PBC doesn't privde its pid to driver.
|
||||||
struct odm_dm_struct *dm_odm = &(hal_data->odmpriv);
|
return;
|
||||||
|
}
|
||||||
dm_InitGPIOSetting(Adapter);
|
rtw_signal_process(padapter->pid[0], SIGUSR1);
|
||||||
pdmpriv->DM_Type = DM_Type_ByDriver;
|
#endif
|
||||||
pdmpriv->DMFlag = DYNAMIC_FUNC_DISABLE;
|
}
|
||||||
Update_ODM_ComInfo_88E(Adapter);
|
}
|
||||||
ODM_DMInit(dm_odm);
|
|
||||||
Adapter->fix_rate = 0xFF;
|
#ifdef CONFIG_PCI_HCI
|
||||||
}
|
//
|
||||||
|
// Description:
|
||||||
void rtl8188e_HalDmWatchDog(struct adapter *Adapter)
|
// Perform interrupt migration dynamically to reduce CPU utilization.
|
||||||
{
|
//
|
||||||
bool fw_cur_in_ps = false;
|
// Assumption:
|
||||||
bool fw_ps_awake = true;
|
// 1. Do not enable migration under WIFI test.
|
||||||
u8 hw_init_completed = false;
|
//
|
||||||
struct hal_data_8188e *hal_data = GET_HAL_DATA(Adapter);
|
// Created by Roger, 2010.03.05.
|
||||||
|
//
|
||||||
|
VOID
|
||||||
hw_init_completed = Adapter->hw_init_completed;
|
dm_InterruptMigration(
|
||||||
|
IN PADAPTER Adapter
|
||||||
if (!hw_init_completed)
|
)
|
||||||
goto skip_dm;
|
{
|
||||||
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
|
||||||
fw_cur_in_ps = Adapter->pwrctrlpriv.bFwCurrentInPSMode;
|
struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
|
||||||
rtw_hal_get_hwreg(Adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&fw_ps_awake));
|
BOOLEAN bCurrentIntMt, bCurrentACIntDisable;
|
||||||
|
BOOLEAN IntMtToSet = _FALSE;
|
||||||
/* Fw is under p2p powersaving mode, driver should stop dynamic mechanism. */
|
BOOLEAN ACIntToSet = _FALSE;
|
||||||
/* modifed by thomas. 2011.06.11. */
|
|
||||||
if (Adapter->wdinfo.p2p_ps_mode)
|
|
||||||
fw_ps_awake = false;
|
// Retrieve current interrupt migration and Tx four ACs IMR settings first.
|
||||||
|
bCurrentIntMt = pHalData->bInterruptMigration;
|
||||||
if (hw_init_completed && ((!fw_cur_in_ps) && fw_ps_awake)) {
|
bCurrentACIntDisable = pHalData->bDisableTxInt;
|
||||||
/* Calculate Tx/Rx statistics. */
|
|
||||||
dm_CheckStatistics(Adapter);
|
//
|
||||||
|
// <Roger_Notes> Currently we use busy traffic for reference instead of RxIntOK counts to prevent non-linear Rx statistics
|
||||||
|
// when interrupt migration is set before. 2010.03.05.
|
||||||
}
|
//
|
||||||
|
if(!Adapter->registrypriv.wifi_spec &&
|
||||||
/* ODM */
|
(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) &&
|
||||||
if (hw_init_completed) {
|
pmlmepriv->LinkDetectInfo.bHigherBusyTraffic)
|
||||||
struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
|
{
|
||||||
u8 bLinked = false;
|
IntMtToSet = _TRUE;
|
||||||
|
|
||||||
if ((check_fwstate(pmlmepriv, WIFI_AP_STATE)) ||
|
// To check whether we should disable Tx interrupt or not.
|
||||||
(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE))) {
|
if(pmlmepriv->LinkDetectInfo.bHigherBusyRxTraffic )
|
||||||
if (Adapter->stapriv.asoc_sta_count > 2)
|
ACIntToSet = _TRUE;
|
||||||
bLinked = true;
|
}
|
||||||
} else {/* Station mode */
|
|
||||||
if (check_fwstate(pmlmepriv, _FW_LINKED))
|
//Update current settings.
|
||||||
bLinked = true;
|
if( bCurrentIntMt != IntMtToSet ){
|
||||||
}
|
DBG_8192C("%s(): Update interrrupt migration(%d)\n",__FUNCTION__,IntMtToSet);
|
||||||
|
if(IntMtToSet)
|
||||||
ODM_CmnInfoUpdate(&hal_data->odmpriv, ODM_CMNINFO_LINK, bLinked);
|
{
|
||||||
ODM_DMWatchdog(&hal_data->odmpriv);
|
//
|
||||||
}
|
// <Roger_Notes> Set interrrupt migration timer and corresponging Tx/Rx counter.
|
||||||
skip_dm:
|
// timer 25ns*0xfa0=100us for 0xf packets.
|
||||||
/* Check GPIO to determine current RF on/off and Pbc status. */
|
// 2010.03.05.
|
||||||
/* Check Hardware Radio ON/OFF or not */
|
//
|
||||||
return;
|
rtw_write32(Adapter, REG_INT_MIG, 0xff000fa0);// 0x306:Rx, 0x307:Tx
|
||||||
}
|
pHalData->bInterruptMigration = IntMtToSet;
|
||||||
|
}
|
||||||
void rtl8188e_init_dm_priv(struct adapter *Adapter)
|
else
|
||||||
{
|
{
|
||||||
struct hal_data_8188e *hal_data = GET_HAL_DATA(Adapter);
|
// Reset all interrupt migration settings.
|
||||||
struct dm_priv *pdmpriv = &hal_data->dmpriv;
|
rtw_write32(Adapter, REG_INT_MIG, 0);
|
||||||
struct odm_dm_struct *podmpriv = &hal_data->odmpriv;
|
pHalData->bInterruptMigration = IntMtToSet;
|
||||||
|
}
|
||||||
_rtw_memset(pdmpriv, 0, sizeof(struct dm_priv));
|
}
|
||||||
Init_ODM_ComInfo_88E(Adapter);
|
|
||||||
ODM_InitDebugSetting(podmpriv);
|
/*if( bCurrentACIntDisable != ACIntToSet ){
|
||||||
}
|
DBG_8192C("%s(): Update AC interrrupt(%d)\n",__FUNCTION__,ACIntToSet);
|
||||||
|
if(ACIntToSet) // Disable four ACs interrupts.
|
||||||
void rtl8188e_deinit_dm_priv(struct adapter *Adapter)
|
{
|
||||||
{
|
//
|
||||||
}
|
// <Roger_Notes> Disable VO, VI, BE and BK four AC interrupts to gain more efficient CPU utilization.
|
||||||
|
// When extremely highly Rx OK occurs, we will disable Tx interrupts.
|
||||||
/* Add new function to reset the state of antenna diversity before link. */
|
// 2010.03.05.
|
||||||
/* Compare RSSI for deciding antenna */
|
//
|
||||||
void AntDivCompare8188E(struct adapter *Adapter, struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src)
|
UpdateInterruptMask8192CE( Adapter, 0, RT_AC_INT_MASKS );
|
||||||
{
|
pHalData->bDisableTxInt = ACIntToSet;
|
||||||
struct hal_data_8188e *hal_data = GET_HAL_DATA(Adapter);
|
}
|
||||||
|
else// Enable four ACs interrupts.
|
||||||
if (0 != hal_data->AntDivCfg) {
|
{
|
||||||
/* select optimum_antenna for before linked =>For antenna diversity */
|
UpdateInterruptMask8192CE( Adapter, RT_AC_INT_MASKS, 0 );
|
||||||
if (dst->Rssi >= src->Rssi) {/* keep org parameter */
|
pHalData->bDisableTxInt = ACIntToSet;
|
||||||
src->Rssi = dst->Rssi;
|
}
|
||||||
src->PhyInfo.Optimum_antenna = dst->PhyInfo.Optimum_antenna;
|
}*/
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
#endif
|
||||||
/* Add new function to reset the state of antenna diversity before link. */
|
|
||||||
u8 AntDivBeforeLink8188E(struct adapter *Adapter)
|
//
|
||||||
{
|
// Initialize GPIO setting registers
|
||||||
struct hal_data_8188e *hal_data = GET_HAL_DATA(Adapter);
|
//
|
||||||
struct odm_dm_struct *dm_odm = &hal_data->odmpriv;
|
static void
|
||||||
struct sw_ant_switch *dm_swat_tbl = &dm_odm->DM_SWAT_Table;
|
dm_InitGPIOSetting(
|
||||||
struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
|
IN PADAPTER Adapter
|
||||||
|
)
|
||||||
/* Condition that does not need to use antenna diversity. */
|
{
|
||||||
if (hal_data->AntDivCfg == 0)
|
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
|
||||||
return false;
|
|
||||||
|
u8 tmp1byte;
|
||||||
if (check_fwstate(pmlmepriv, _FW_LINKED))
|
|
||||||
return false;
|
tmp1byte = rtw_read8(Adapter, REG_GPIO_MUXCFG);
|
||||||
|
tmp1byte &= (GPIOSEL_GPIO | ~GPIOSEL_ENBT);
|
||||||
if (dm_swat_tbl->SWAS_NoLink_State == 0) {
|
|
||||||
/* switch channel */
|
#ifdef CONFIG_BT_COEXIST
|
||||||
dm_swat_tbl->SWAS_NoLink_State = 1;
|
// UMB-B cut bug. We need to support the modification.
|
||||||
dm_swat_tbl->CurAntenna = (dm_swat_tbl->CurAntenna == Antenna_A) ? Antenna_B : Antenna_A;
|
if (IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID) &&
|
||||||
|
pHalData->bt_coexist.BT_Coexist)
|
||||||
rtw_antenna_select_cmd(Adapter, dm_swat_tbl->CurAntenna, false);
|
{
|
||||||
return true;
|
tmp1byte |= (BIT5);
|
||||||
} else {
|
}
|
||||||
dm_swat_tbl->SWAS_NoLink_State = 0;
|
#endif
|
||||||
return false;
|
rtw_write8(Adapter, REG_GPIO_MUXCFG, tmp1byte);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//============================================================
|
||||||
|
// functions
|
||||||
|
//============================================================
|
||||||
|
static void Init_ODM_ComInfo_88E(PADAPTER Adapter)
|
||||||
|
{
|
||||||
|
|
||||||
|
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
|
||||||
|
struct dm_priv *pdmpriv = &pHalData->dmpriv;
|
||||||
|
PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
|
||||||
|
u8 cut_ver,fab_ver;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Init Value
|
||||||
|
//
|
||||||
|
_rtw_memset(pDM_Odm,0,sizeof(pDM_Odm));
|
||||||
|
|
||||||
|
pDM_Odm->Adapter = Adapter;
|
||||||
|
|
||||||
|
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_PLATFORM,ODM_CE);
|
||||||
|
|
||||||
|
if(Adapter->interface_type == RTW_GSPI )
|
||||||
|
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_INTERFACE,ODM_ITRF_SDIO);
|
||||||
|
else
|
||||||
|
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_INTERFACE,Adapter->interface_type);//RTL871X_HCI_TYPE
|
||||||
|
|
||||||
|
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_IC_TYPE,ODM_RTL8188E);
|
||||||
|
|
||||||
|
fab_ver = ODM_TSMC;
|
||||||
|
cut_ver = ODM_CUT_A;
|
||||||
|
|
||||||
|
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_FAB_VER,fab_ver);
|
||||||
|
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_CUT_VER,cut_ver);
|
||||||
|
|
||||||
|
ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_MP_TEST_CHIP,IS_NORMAL_CHIP(pHalData->VersionID));
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
//#ifdef CONFIG_USB_HCI
|
||||||
|
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_BOARD_TYPE,pHalData->BoardType);
|
||||||
|
|
||||||
|
if(pHalData->BoardType == BOARD_USB_High_PA){
|
||||||
|
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_EXT_LNA,_TRUE);
|
||||||
|
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_EXT_PA,_TRUE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_PATCH_ID,pHalData->CustomerID);
|
||||||
|
// ODM_CMNINFO_BINHCT_TEST only for MP Team
|
||||||
|
ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_BWIFI_TEST,Adapter->registrypriv.wifi_spec);
|
||||||
|
|
||||||
|
|
||||||
|
if(pHalData->rf_type == RF_1T1R){
|
||||||
|
ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_RF_TYPE,ODM_1T1R);
|
||||||
|
}
|
||||||
|
else if(pHalData->rf_type == RF_2T2R){
|
||||||
|
ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_RF_TYPE,ODM_2T2R);
|
||||||
|
}
|
||||||
|
else if(pHalData->rf_type == RF_1T2R){
|
||||||
|
ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_RF_TYPE,ODM_1T2R);
|
||||||
|
}
|
||||||
|
|
||||||
|
ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_ANTENNA_TYPE, pHalData->TRxAntDivType);
|
||||||
|
|
||||||
|
#ifdef CONFIG_DISABLE_ODM
|
||||||
|
pdmpriv->InitODMFlag = 0;
|
||||||
|
#else
|
||||||
|
pdmpriv->InitODMFlag = ODM_RF_CALIBRATION |
|
||||||
|
ODM_RF_TX_PWR_TRACK //|
|
||||||
|
;
|
||||||
|
//if(pHalData->AntDivCfg)
|
||||||
|
// pdmpriv->InitODMFlag |= ODM_BB_ANT_DIV;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_ABILITY,pdmpriv->InitODMFlag);
|
||||||
|
|
||||||
|
}
|
||||||
|
static void Update_ODM_ComInfo_88E(PADAPTER Adapter)
|
||||||
|
{
|
||||||
|
struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
|
||||||
|
struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
|
||||||
|
struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(Adapter);
|
||||||
|
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
|
||||||
|
PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
|
||||||
|
struct dm_priv *pdmpriv = &pHalData->dmpriv;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
pdmpriv->InitODMFlag = 0
|
||||||
|
| ODM_BB_DIG
|
||||||
|
#ifdef CONFIG_ODM_REFRESH_RAMASK
|
||||||
|
| ODM_BB_RA_MASK
|
||||||
|
#endif
|
||||||
|
| ODM_BB_DYNAMIC_TXPWR
|
||||||
|
| ODM_BB_FA_CNT
|
||||||
|
| ODM_BB_RSSI_MONITOR
|
||||||
|
| ODM_BB_CCK_PD
|
||||||
|
| ODM_BB_PWR_SAVE
|
||||||
|
| ODM_RF_CALIBRATION
|
||||||
|
| ODM_RF_TX_PWR_TRACK
|
||||||
|
#ifdef CONFIG_ODM_ADAPTIVITY
|
||||||
|
| ODM_BB_ADAPTIVITY
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|
||||||
|
if (!Adapter->registrypriv.qos_opt_enable) {
|
||||||
|
pdmpriv->InitODMFlag |= ODM_MAC_EDCA_TURBO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pHalData->AntDivCfg)
|
||||||
|
pdmpriv->InitODMFlag |= ODM_BB_ANT_DIV;
|
||||||
|
|
||||||
|
#if (MP_DRIVER==1)
|
||||||
|
if (Adapter->registrypriv.mp_mode == 1) {
|
||||||
|
pdmpriv->InitODMFlag = 0
|
||||||
|
| ODM_RF_CALIBRATION
|
||||||
|
| ODM_RF_TX_PWR_TRACK
|
||||||
|
;
|
||||||
|
}
|
||||||
|
#endif//(MP_DRIVER==1)
|
||||||
|
|
||||||
|
#ifdef CONFIG_DISABLE_ODM
|
||||||
|
pdmpriv->InitODMFlag = 0;
|
||||||
|
#endif//CONFIG_DISABLE_ODM
|
||||||
|
|
||||||
|
ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_ABILITY,pdmpriv->InitODMFlag);
|
||||||
|
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_TX_UNI,&(Adapter->xmitpriv.tx_bytes));
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_RX_UNI,&(Adapter->recvpriv.rx_bytes));
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_WM_MODE,&(pmlmeext->cur_wireless_mode));
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_SEC_CHNL_OFFSET,&(pHalData->nCur40MhzPrimeSC));
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_SEC_MODE,&(Adapter->securitypriv.dot11PrivacyAlgrthm));
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BW,&(pHalData->CurrentChannelBW ));
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_CHNL,&( pHalData->CurrentChannel));
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_NET_CLOSED,&( Adapter->net_closed));
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_MP_MODE,&(Adapter->registrypriv.mp_mode));
|
||||||
|
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BAND,&(pDM_Odm->u1Byte_temp));
|
||||||
|
//================= only for 8192D =================
|
||||||
|
/*
|
||||||
|
//pHalData->CurrentBandType92D
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BAND,&(pDM_Odm->u1Byte_temp));
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_DMSP_GET_VALUE,&(pDM_Odm->u1Byte_temp));
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BUDDY_ADAPTOR,&(pDM_Odm->PADAPTER_temp));
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_DMSP_IS_MASTER,&(pDM_Odm->u1Byte_temp));
|
||||||
|
//================= only for 8192D =================
|
||||||
|
// driver havn't those variable now
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BT_OPERATION,&(pDM_Odm->u1Byte_temp));
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BT_DISABLE_EDCA,&(pDM_Odm->u1Byte_temp));
|
||||||
|
*/
|
||||||
|
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_SCAN,&(pmlmepriv->bScanInProcess));
|
||||||
|
ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_POWER_SAVING,&(pwrctrlpriv->bpower_saving));
|
||||||
|
ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_RF_ANTENNA_TYPE, pHalData->TRxAntDivType);
|
||||||
|
|
||||||
|
for(i=0; i< NUM_STA; i++)
|
||||||
|
{
|
||||||
|
//pDM_Odm->pODM_StaInfo[i] = NULL;
|
||||||
|
ODM_CmnInfoPtrArrayHook(pDM_Odm, ODM_CMNINFO_STA_STATUS,i,NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
rtl8188e_InitHalDm(
|
||||||
|
IN PADAPTER Adapter
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
|
||||||
|
struct dm_priv *pdmpriv = &pHalData->dmpriv;
|
||||||
|
PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
|
||||||
|
u8 i;
|
||||||
|
|
||||||
|
#ifdef CONFIG_USB_HCI
|
||||||
|
dm_InitGPIOSetting(Adapter);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
pdmpriv->DM_Type = DM_Type_ByDriver;
|
||||||
|
pdmpriv->DMFlag = DYNAMIC_FUNC_DISABLE;
|
||||||
|
|
||||||
|
Update_ODM_ComInfo_88E(Adapter);
|
||||||
|
ODM_DMInit(pDM_Odm);
|
||||||
|
|
||||||
|
Adapter->fix_rate = 0xFF;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VOID
|
||||||
|
rtl8188e_HalDmWatchDog(
|
||||||
|
IN PADAPTER Adapter
|
||||||
|
)
|
||||||
|
{
|
||||||
|
BOOLEAN bFwCurrentInPSMode = _FALSE;
|
||||||
|
BOOLEAN bFwPSAwake = _TRUE;
|
||||||
|
u8 hw_init_completed = _FALSE;
|
||||||
|
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
|
||||||
|
struct dm_priv *pdmpriv = &pHalData->dmpriv;
|
||||||
|
PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
|
||||||
|
#ifdef CONFIG_CONCURRENT_MODE
|
||||||
|
PADAPTER pbuddy_adapter = Adapter->pbuddy_adapter;
|
||||||
|
#endif //CONFIG_CONCURRENT_MODE
|
||||||
|
|
||||||
|
_func_enter_;
|
||||||
|
|
||||||
|
hw_init_completed = Adapter->hw_init_completed;
|
||||||
|
|
||||||
|
if (hw_init_completed == _FALSE)
|
||||||
|
goto skip_dm;
|
||||||
|
|
||||||
|
#ifdef CONFIG_LPS
|
||||||
|
bFwCurrentInPSMode = adapter_to_pwrctl(Adapter)->bFwCurrentInPSMode;
|
||||||
|
rtw_hal_get_hwreg(Adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bFwPSAwake));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_P2P_PS
|
||||||
|
// Fw is under p2p powersaving mode, driver should stop dynamic mechanism.
|
||||||
|
// modifed by thomas. 2011.06.11.
|
||||||
|
if(Adapter->wdinfo.p2p_ps_mode)
|
||||||
|
bFwPSAwake = _FALSE;
|
||||||
|
#endif //CONFIG_P2P_PS
|
||||||
|
|
||||||
|
if( (hw_init_completed == _TRUE)
|
||||||
|
&& ((!bFwCurrentInPSMode) && bFwPSAwake))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Calculate Tx/Rx statistics.
|
||||||
|
//
|
||||||
|
dm_CheckStatistics(Adapter);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Dynamically switch RTS/CTS protection.
|
||||||
|
//
|
||||||
|
//dm_CheckProtection(Adapter);
|
||||||
|
|
||||||
|
#ifdef CONFIG_PCI_HCI
|
||||||
|
// 20100630 Joseph: Disable Interrupt Migration mechanism temporarily because it degrades Rx throughput.
|
||||||
|
// Tx Migration settings.
|
||||||
|
//dm_InterruptMigration(Adapter);
|
||||||
|
|
||||||
|
//if(Adapter->HalFunc.TxCheckStuckHandler(Adapter))
|
||||||
|
// PlatformScheduleWorkItem(&(GET_HAL_DATA(Adapter)->HalResetWorkItem));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//ODM
|
||||||
|
if (hw_init_completed == _TRUE)
|
||||||
|
{
|
||||||
|
u8 bLinked=_FALSE;
|
||||||
|
u8 bsta_state = _FALSE;
|
||||||
|
|
||||||
|
#ifdef CONFIG_DISABLE_ODM
|
||||||
|
pHalData->odmpriv.SupportAbility = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(rtw_linked_check(Adapter))
|
||||||
|
bLinked = _TRUE;
|
||||||
|
|
||||||
|
#ifdef CONFIG_CONCURRENT_MODE
|
||||||
|
if(pbuddy_adapter && rtw_linked_check(pbuddy_adapter))
|
||||||
|
bLinked = _TRUE;
|
||||||
|
#endif //CONFIG_CONCURRENT_MODE
|
||||||
|
ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_LINK, bLinked);
|
||||||
|
|
||||||
|
|
||||||
|
if (check_fwstate(&Adapter->mlmepriv, WIFI_STATION_STATE))
|
||||||
|
bsta_state = _TRUE;
|
||||||
|
#ifdef CONFIG_CONCURRENT_MODE
|
||||||
|
if(pbuddy_adapter && check_fwstate(&pbuddy_adapter->mlmepriv, WIFI_STATION_STATE))
|
||||||
|
bsta_state = _TRUE;
|
||||||
|
#endif //CONFIG_CONCURRENT_MODE
|
||||||
|
ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_STATION_STATE, bsta_state);
|
||||||
|
|
||||||
|
ODM_DMWatchdog(&pHalData->odmpriv);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
skip_dm:
|
||||||
|
|
||||||
|
// Check GPIO to determine current RF on/off and Pbc status.
|
||||||
|
// Check Hardware Radio ON/OFF or not
|
||||||
|
#ifdef CONFIG_PCI_HCI
|
||||||
|
if(pHalData->bGpioHwWpsPbc)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
//temp removed
|
||||||
|
//dm_CheckPbcGPIO(Adapter);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void rtl8188e_init_dm_priv(IN PADAPTER Adapter)
|
||||||
|
{
|
||||||
|
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
|
||||||
|
struct dm_priv *pdmpriv = &pHalData->dmpriv;
|
||||||
|
PDM_ODM_T podmpriv = &pHalData->odmpriv;
|
||||||
|
_rtw_memset(pdmpriv, 0, sizeof(struct dm_priv));
|
||||||
|
//_rtw_spinlock_init(&(pHalData->odm_stainfo_lock));
|
||||||
|
Init_ODM_ComInfo_88E(Adapter);
|
||||||
|
#ifdef CONFIG_SW_ANTENNA_DIVERSITY
|
||||||
|
//_init_timer(&(pdmpriv->SwAntennaSwitchTimer), Adapter->pnetdev , odm_SW_AntennaSwitchCallback, Adapter);
|
||||||
|
ODM_InitAllTimers(podmpriv );
|
||||||
|
#endif
|
||||||
|
ODM_InitDebugSetting(podmpriv);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rtl8188e_deinit_dm_priv(IN PADAPTER Adapter)
|
||||||
|
{
|
||||||
|
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
|
||||||
|
struct dm_priv *pdmpriv = &pHalData->dmpriv;
|
||||||
|
PDM_ODM_T podmpriv = &pHalData->odmpriv;
|
||||||
|
//_rtw_spinlock_free(&pHalData->odm_stainfo_lock);
|
||||||
|
#ifdef CONFIG_SW_ANTENNA_DIVERSITY
|
||||||
|
//_cancel_timer_ex(&pdmpriv->SwAntennaSwitchTimer);
|
||||||
|
ODM_CancelAllTimers(podmpriv);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CONFIG_ANTENNA_DIVERSITY
|
||||||
|
// Add new function to reset the state of antenna diversity before link.
|
||||||
|
//
|
||||||
|
// Compare RSSI for deciding antenna
|
||||||
|
void AntDivCompare8188E(PADAPTER Adapter, WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src)
|
||||||
|
{
|
||||||
|
//PADAPTER Adapter = pDM_Odm->Adapter ;
|
||||||
|
|
||||||
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
|
||||||
|
if(0 != pHalData->AntDivCfg )
|
||||||
|
{
|
||||||
|
//DBG_8192C("update_network=> orgRSSI(%d)(%d),newRSSI(%d)(%d)\n",dst->Rssi,query_rx_pwr_percentage(dst->Rssi),
|
||||||
|
// src->Rssi,query_rx_pwr_percentage(src->Rssi));
|
||||||
|
//select optimum_antenna for before linked =>For antenna diversity
|
||||||
|
if(dst->Rssi >= src->Rssi )//keep org parameter
|
||||||
|
{
|
||||||
|
src->Rssi = dst->Rssi;
|
||||||
|
src->PhyInfo.Optimum_antenna = dst->PhyInfo.Optimum_antenna;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add new function to reset the state of antenna diversity before link.
|
||||||
|
u8 AntDivBeforeLink8188E(PADAPTER Adapter )
|
||||||
|
{
|
||||||
|
|
||||||
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
|
||||||
|
PDM_ODM_T pDM_Odm =&pHalData->odmpriv;
|
||||||
|
SWAT_T *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
|
||||||
|
struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
|
||||||
|
|
||||||
|
// Condition that does not need to use antenna diversity.
|
||||||
|
if(pHalData->AntDivCfg==0)
|
||||||
|
{
|
||||||
|
//DBG_8192C("odm_AntDivBeforeLink8192C(): No AntDiv Mechanism.\n");
|
||||||
|
return _FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
|
||||||
|
{
|
||||||
|
return _FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(pDM_SWAT_Table->SWAS_NoLink_State == 0){
|
||||||
|
//switch channel
|
||||||
|
pDM_SWAT_Table->SWAS_NoLink_State = 1;
|
||||||
|
pDM_SWAT_Table->CurAntenna = (pDM_SWAT_Table->CurAntenna==Antenna_A)?Antenna_B:Antenna_A;
|
||||||
|
|
||||||
|
//PHY_SetBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, 0x300, pDM_SWAT_Table->CurAntenna);
|
||||||
|
rtw_antenna_select_cmd(Adapter, pDM_SWAT_Table->CurAntenna, _FALSE);
|
||||||
|
//DBG_8192C("%s change antenna to ANT_( %s ).....\n",__FUNCTION__, (pDM_SWAT_Table->CurAntenna==Antenna_A)?"A":"B");
|
||||||
|
return _TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pDM_SWAT_Table->SWAS_NoLink_State = 0;
|
||||||
|
return _FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
3905
hal/rtl8188e_hal_init.c
Normal file → Executable file
3905
hal/rtl8188e_hal_init.c
Normal file → Executable file
File diff suppressed because it is too large
Load diff
4687
hal/rtl8188e_phycfg.c
Normal file → Executable file
4687
hal/rtl8188e_phycfg.c
Normal file → Executable file
File diff suppressed because it is too large
Load diff
1841
hal/rtl8188e_rf6052.c
Normal file → Executable file
1841
hal/rtl8188e_rf6052.c
Normal file → Executable file
File diff suppressed because it is too large
Load diff
340
hal/rtl8188e_rxdesc.c
Normal file → Executable file
340
hal/rtl8188e_rxdesc.c
Normal file → Executable file
|
@ -19,38 +19,101 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#define _RTL8188E_REDESC_C_
|
#define _RTL8188E_REDESC_C_
|
||||||
|
|
||||||
|
#include <drv_conf.h>
|
||||||
#include <osdep_service.h>
|
#include <osdep_service.h>
|
||||||
#include <drv_types.h>
|
#include <drv_types.h>
|
||||||
#include <rtl8188e_hal.h>
|
#include <rtl8188e_hal.h>
|
||||||
|
|
||||||
static void process_rssi(struct adapter *padapter, union recv_frame *prframe)
|
static s32 translate2dbm(u8 signal_strength_idx)
|
||||||
{
|
{
|
||||||
struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
|
s32 signal_power; // in dBm.
|
||||||
struct signal_stat *signal_stat = &padapter->recvpriv.signal_strength_data;
|
|
||||||
|
|
||||||
if (signal_stat->update_req) {
|
|
||||||
signal_stat->total_num = 0;
|
// Translate to dBm (x=0.5y-95).
|
||||||
signal_stat->total_val = 0;
|
signal_power = (s32)((signal_strength_idx + 1) >> 1);
|
||||||
signal_stat->update_req = 0;
|
signal_power -= 95;
|
||||||
|
|
||||||
|
return signal_power;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void process_rssi(_adapter *padapter,union recv_frame *prframe)
|
||||||
|
{
|
||||||
|
u32 last_rssi, tmp_val;
|
||||||
|
struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
|
||||||
|
#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
|
||||||
|
struct signal_stat * signal_stat = &padapter->recvpriv.signal_strength_data;
|
||||||
|
#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
|
||||||
|
|
||||||
|
//DBG_8192C("process_rssi=> pattrib->rssil(%d) signal_strength(%d)\n ",pattrib->RecvSignalPower,pattrib->signal_strength);
|
||||||
|
//if(pRfd->Status.bPacketToSelf || pRfd->Status.bPacketBeacon)
|
||||||
|
{
|
||||||
|
|
||||||
|
#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
|
||||||
|
if(signal_stat->update_req) {
|
||||||
|
signal_stat->total_num = 0;
|
||||||
|
signal_stat->total_val = 0;
|
||||||
|
signal_stat->update_req = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
signal_stat->total_num++;
|
||||||
|
signal_stat->total_val += pattrib->phy_info.SignalStrength;
|
||||||
|
signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;
|
||||||
|
#else //CONFIG_NEW_SIGNAL_STAT_PROCESS
|
||||||
|
|
||||||
|
//Adapter->RxStats.RssiCalculateCnt++; //For antenna Test
|
||||||
|
if(padapter->recvpriv.signal_strength_data.total_num++ >= PHY_RSSI_SLID_WIN_MAX)
|
||||||
|
{
|
||||||
|
padapter->recvpriv.signal_strength_data.total_num = PHY_RSSI_SLID_WIN_MAX;
|
||||||
|
last_rssi = padapter->recvpriv.signal_strength_data.elements[padapter->recvpriv.signal_strength_data.index];
|
||||||
|
padapter->recvpriv.signal_strength_data.total_val -= last_rssi;
|
||||||
|
}
|
||||||
|
padapter->recvpriv.signal_strength_data.total_val +=pattrib->phy_info.SignalStrength;
|
||||||
|
|
||||||
|
padapter->recvpriv.signal_strength_data.elements[padapter->recvpriv.signal_strength_data.index++] = pattrib->phy_info.SignalStrength;
|
||||||
|
if(padapter->recvpriv.signal_strength_data.index >= PHY_RSSI_SLID_WIN_MAX)
|
||||||
|
padapter->recvpriv.signal_strength_data.index = 0;
|
||||||
|
|
||||||
|
|
||||||
|
tmp_val = padapter->recvpriv.signal_strength_data.total_val/padapter->recvpriv.signal_strength_data.total_num;
|
||||||
|
|
||||||
|
if(padapter->recvpriv.is_signal_dbg) {
|
||||||
|
padapter->recvpriv.signal_strength= padapter->recvpriv.signal_strength_dbg;
|
||||||
|
padapter->recvpriv.rssi=(s8)translate2dbm((u8)padapter->recvpriv.signal_strength_dbg);
|
||||||
|
} else {
|
||||||
|
padapter->recvpriv.signal_strength= tmp_val;
|
||||||
|
padapter->recvpriv.rssi=(s8)translate2dbm((u8)tmp_val);
|
||||||
|
}
|
||||||
|
|
||||||
|
RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("UI RSSI = %d, ui_rssi.TotalVal = %d, ui_rssi.TotalNum = %d\n", tmp_val, padapter->recvpriv.signal_strength_data.total_val,padapter->recvpriv.signal_strength_data.total_num));
|
||||||
|
#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
|
||||||
}
|
}
|
||||||
|
|
||||||
signal_stat->total_num++;
|
}// Process_UI_RSSI_8192C
|
||||||
signal_stat->total_val += pattrib->phy_info.SignalStrength;
|
|
||||||
signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;
|
|
||||||
} /* Process_UI_RSSI_8192C */
|
|
||||||
|
|
||||||
static void process_link_qual(struct adapter *padapter, union recv_frame *prframe)
|
|
||||||
|
|
||||||
|
static void process_link_qual(_adapter *padapter,union recv_frame *prframe)
|
||||||
{
|
{
|
||||||
struct rx_pkt_attrib *pattrib;
|
u32 last_evm=0, tmpVal;
|
||||||
struct signal_stat *signal_stat;
|
struct rx_pkt_attrib *pattrib;
|
||||||
|
#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
|
||||||
|
struct signal_stat * signal_stat;
|
||||||
|
#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
|
||||||
|
|
||||||
if (prframe == NULL || padapter == NULL)
|
if(prframe == NULL || padapter==NULL){
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
pattrib = &prframe->u.hdr.attrib;
|
pattrib = &prframe->u.hdr.attrib;
|
||||||
|
#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
|
||||||
signal_stat = &padapter->recvpriv.signal_qual_data;
|
signal_stat = &padapter->recvpriv.signal_qual_data;
|
||||||
|
#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
|
||||||
|
|
||||||
if (signal_stat->update_req) {
|
//DBG_8192C("process_link_qual=> pattrib->signal_qual(%d)\n ",pattrib->signal_qual);
|
||||||
|
|
||||||
|
#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
|
||||||
|
if(signal_stat->update_req) {
|
||||||
signal_stat->total_num = 0;
|
signal_stat->total_num = 0;
|
||||||
signal_stat->total_val = 0;
|
signal_stat->total_val = 0;
|
||||||
signal_stat->update_req = 0;
|
signal_stat->update_req = 0;
|
||||||
|
@ -59,78 +122,140 @@ static void process_link_qual(struct adapter *padapter, union recv_frame *prfram
|
||||||
signal_stat->total_num++;
|
signal_stat->total_num++;
|
||||||
signal_stat->total_val += pattrib->phy_info.SignalQuality;
|
signal_stat->total_val += pattrib->phy_info.SignalQuality;
|
||||||
signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;
|
signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;
|
||||||
|
|
||||||
|
#else //CONFIG_NEW_SIGNAL_STAT_PROCESS
|
||||||
|
if(pattrib->phy_info.SignalQuality != 0)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// 1. Record the general EVM to the sliding window.
|
||||||
|
//
|
||||||
|
if(padapter->recvpriv.signal_qual_data.total_num++ >= PHY_LINKQUALITY_SLID_WIN_MAX)
|
||||||
|
{
|
||||||
|
padapter->recvpriv.signal_qual_data.total_num = PHY_LINKQUALITY_SLID_WIN_MAX;
|
||||||
|
last_evm = padapter->recvpriv.signal_qual_data.elements[padapter->recvpriv.signal_qual_data.index];
|
||||||
|
padapter->recvpriv.signal_qual_data.total_val -= last_evm;
|
||||||
|
}
|
||||||
|
padapter->recvpriv.signal_qual_data.total_val += pattrib->phy_info.SignalQuality;
|
||||||
|
|
||||||
|
padapter->recvpriv.signal_qual_data.elements[padapter->recvpriv.signal_qual_data.index++] = pattrib->phy_info.SignalQuality;
|
||||||
|
if(padapter->recvpriv.signal_qual_data.index >= PHY_LINKQUALITY_SLID_WIN_MAX)
|
||||||
|
padapter->recvpriv.signal_qual_data.index = 0;
|
||||||
|
|
||||||
|
RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("Total SQ=%d pattrib->signal_qual= %d\n", padapter->recvpriv.signal_qual_data.total_val, pattrib->phy_info.SignalQuality));
|
||||||
|
|
||||||
|
// <1> Showed on UI for user, in percentage.
|
||||||
|
tmpVal = padapter->recvpriv.signal_qual_data.total_val/padapter->recvpriv.signal_qual_data.total_num;
|
||||||
|
padapter->recvpriv.signal_qual=(u8)tmpVal;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,(" pattrib->signal_qual =%d\n", pattrib->phy_info.SignalQuality));
|
||||||
|
}
|
||||||
|
#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtl8188e_process_phy_info(struct adapter *padapter, void *prframe)
|
//void rtl8188e_process_phy_info(_adapter *padapter, union recv_frame *prframe)
|
||||||
|
void rtl8188e_process_phy_info(_adapter *padapter, void *prframe)
|
||||||
{
|
{
|
||||||
union recv_frame *precvframe = (union recv_frame *)prframe;
|
union recv_frame *precvframe = (union recv_frame *)prframe;
|
||||||
|
|
||||||
/* Check RSSI */
|
//
|
||||||
|
// Check RSSI
|
||||||
|
//
|
||||||
process_rssi(padapter, precvframe);
|
process_rssi(padapter, precvframe);
|
||||||
/* Check EVM */
|
//
|
||||||
|
// Check PWDB.
|
||||||
|
//
|
||||||
|
//process_PWDB(padapter, precvframe);
|
||||||
|
|
||||||
|
//UpdateRxSignalStatistics8192C(Adapter, pRfd);
|
||||||
|
//
|
||||||
|
// Check EVM
|
||||||
|
//
|
||||||
process_link_qual(padapter, precvframe);
|
process_link_qual(padapter, precvframe);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_recvframe_attrib_88e(union recv_frame *precvframe, struct recv_stat *prxstat)
|
|
||||||
|
void update_recvframe_attrib_88e(
|
||||||
|
union recv_frame *precvframe,
|
||||||
|
struct recv_stat *prxstat)
|
||||||
{
|
{
|
||||||
struct rx_pkt_attrib *pattrib;
|
struct rx_pkt_attrib *pattrib;
|
||||||
struct recv_stat report;
|
struct recv_stat report;
|
||||||
|
PRXREPORT prxreport;
|
||||||
|
//struct recv_frame_hdr *phdr;
|
||||||
|
|
||||||
report.rxdw0 = prxstat->rxdw0;
|
//phdr = &precvframe->u.hdr;
|
||||||
report.rxdw1 = prxstat->rxdw1;
|
|
||||||
report.rxdw2 = prxstat->rxdw2;
|
report.rxdw0 = le32_to_cpu(prxstat->rxdw0);
|
||||||
report.rxdw3 = prxstat->rxdw3;
|
report.rxdw1 = le32_to_cpu(prxstat->rxdw1);
|
||||||
report.rxdw4 = prxstat->rxdw4;
|
report.rxdw2 = le32_to_cpu(prxstat->rxdw2);
|
||||||
report.rxdw5 = prxstat->rxdw5;
|
report.rxdw3 = le32_to_cpu(prxstat->rxdw3);
|
||||||
|
report.rxdw4 = le32_to_cpu(prxstat->rxdw4);
|
||||||
|
report.rxdw5 = le32_to_cpu(prxstat->rxdw5);
|
||||||
|
|
||||||
|
prxreport = (PRXREPORT)&report;
|
||||||
|
|
||||||
pattrib = &precvframe->u.hdr.attrib;
|
pattrib = &precvframe->u.hdr.attrib;
|
||||||
_rtw_memset(pattrib, 0, sizeof(struct rx_pkt_attrib));
|
_rtw_memset(pattrib, 0, sizeof(struct rx_pkt_attrib));
|
||||||
|
|
||||||
pattrib->crc_err = (u8)((le32_to_cpu(report.rxdw0) >> 14) & 0x1);;/* u8)prxreport->crc32; */
|
pattrib->crc_err = (u8)((report.rxdw0 >> 14) & 0x1);;//(u8)prxreport->crc32;
|
||||||
|
|
||||||
|
// update rx report to recv_frame attribute
|
||||||
|
pattrib->pkt_rpt_type = (u8)((report.rxdw3 >> 14) & 0x3);//prxreport->rpt_sel;
|
||||||
|
|
||||||
|
if(pattrib->pkt_rpt_type == NORMAL_RX)//Normal rx packet
|
||||||
|
{
|
||||||
|
pattrib->pkt_len = (u16)(report.rxdw0 &0x00003fff);//(u16)prxreport->pktlen;
|
||||||
|
pattrib->drvinfo_sz = (u8)((report.rxdw0 >> 16) & 0xf) * 8;//(u8)(prxreport->drvinfosize << 3);
|
||||||
|
|
||||||
|
pattrib->physt = (u8)((report.rxdw0 >> 26) & 0x1);//(u8)prxreport->physt;
|
||||||
|
|
||||||
/* update rx report to recv_frame attribute */
|
pattrib->bdecrypted = (report.rxdw0 & BIT(27))? 0:1;//(u8)(prxreport->swdec ? 0 : 1);
|
||||||
pattrib->pkt_rpt_type = (u8)((le32_to_cpu(report.rxdw3) >> 14) & 0x3);/* prxreport->rpt_sel; */
|
pattrib->encrypt = (u8)((report.rxdw0 >> 20) & 0x7);//(u8)prxreport->security;
|
||||||
|
|
||||||
if (pattrib->pkt_rpt_type == NORMAL_RX) { /* Normal rx packet */
|
pattrib->qos = (u8)((report.rxdw0 >> 23) & 0x1);//(u8)prxreport->qos;
|
||||||
pattrib->pkt_len = (u16)(le32_to_cpu(report.rxdw0) & 0x00003fff);/* u16)prxreport->pktlen; */
|
pattrib->priority = (u8)((report.rxdw1 >> 8) & 0xf);//(u8)prxreport->tid;
|
||||||
pattrib->drvinfo_sz = (u8)((le32_to_cpu(report.rxdw0) >> 16) & 0xf) * 8;/* u8)(prxreport->drvinfosize << 3); */
|
|
||||||
|
|
||||||
pattrib->physt = (u8)((le32_to_cpu(report.rxdw0) >> 26) & 0x1);/* u8)prxreport->physt; */
|
pattrib->amsdu = (u8)((report.rxdw1 >> 13) & 0x1);//(u8)prxreport->amsdu;
|
||||||
|
|
||||||
pattrib->bdecrypted = (le32_to_cpu(report.rxdw0) & BIT(27)) ? 0 : 1;/* u8)(prxreport->swdec ? 0 : 1); */
|
pattrib->seq_num = (u16)(report.rxdw2 & 0x00000fff);//(u16)prxreport->seq;
|
||||||
pattrib->encrypt = (u8)((le32_to_cpu(report.rxdw0) >> 20) & 0x7);/* u8)prxreport->security; */
|
pattrib->frag_num = (u8)((report.rxdw2 >> 12) & 0xf);//(u8)prxreport->frag;
|
||||||
|
pattrib->mfrag = (u8)((report.rxdw1 >> 27) & 0x1);//(u8)prxreport->mf;
|
||||||
|
pattrib->mdata = (u8)((report.rxdw1 >> 26) & 0x1);//(u8)prxreport->md;
|
||||||
|
|
||||||
pattrib->qos = (u8)((le32_to_cpu(report.rxdw0) >> 23) & 0x1);/* u8)prxreport->qos; */
|
pattrib->mcs_rate = (u8)(report.rxdw3 & 0x3f);//(u8)prxreport->rxmcs;
|
||||||
pattrib->priority = (u8)((le32_to_cpu(report.rxdw1) >> 8) & 0xf);/* u8)prxreport->tid; */
|
pattrib->rxht = (u8)((report.rxdw3 >> 6) & 0x1);//(u8)prxreport->rxht;
|
||||||
|
|
||||||
pattrib->amsdu = (u8)((le32_to_cpu(report.rxdw1) >> 13) & 0x1);/* u8)prxreport->amsdu; */
|
pattrib->icv_err = (u8)((report.rxdw0 >> 15) & 0x1);//(u8)prxreport->icverr;
|
||||||
|
pattrib->shift_sz = (u8)((report.rxdw0 >> 24) & 0x3);
|
||||||
pattrib->seq_num = (u16)(le32_to_cpu(report.rxdw2) & 0x00000fff);/* u16)prxreport->seq; */
|
|
||||||
pattrib->frag_num = (u8)((le32_to_cpu(report.rxdw2) >> 12) & 0xf);/* u8)prxreport->frag; */
|
}
|
||||||
pattrib->mfrag = (u8)((le32_to_cpu(report.rxdw1) >> 27) & 0x1);/* u8)prxreport->mf; */
|
else if(pattrib->pkt_rpt_type == TX_REPORT1)//CCX
|
||||||
pattrib->mdata = (u8)((le32_to_cpu(report.rxdw1) >> 26) & 0x1);/* u8)prxreport->md; */
|
{
|
||||||
|
|
||||||
pattrib->mcs_rate = (u8)(le32_to_cpu(report.rxdw3) & 0x3f);/* u8)prxreport->rxmcs; */
|
|
||||||
pattrib->rxht = (u8)((le32_to_cpu(report.rxdw3) >> 6) & 0x1);/* u8)prxreport->rxht; */
|
|
||||||
|
|
||||||
pattrib->icv_err = (u8)((le32_to_cpu(report.rxdw0) >> 15) & 0x1);/* u8)prxreport->icverr; */
|
|
||||||
pattrib->shift_sz = (u8)((le32_to_cpu(report.rxdw0) >> 24) & 0x3);
|
|
||||||
} else if (pattrib->pkt_rpt_type == TX_REPORT1) { /* CCX */
|
|
||||||
pattrib->pkt_len = TX_RPT1_PKT_LEN;
|
pattrib->pkt_len = TX_RPT1_PKT_LEN;
|
||||||
pattrib->drvinfo_sz = 0;
|
pattrib->drvinfo_sz = 0;
|
||||||
} else if (pattrib->pkt_rpt_type == TX_REPORT2) { /* TX RPT */
|
}
|
||||||
pattrib->pkt_len = (u16)(le32_to_cpu(report.rxdw0) & 0x3FF);/* Rx length[9:0] */
|
else if(pattrib->pkt_rpt_type == TX_REPORT2)// TX RPT
|
||||||
|
{
|
||||||
|
pattrib->pkt_len =(u16)(report.rxdw0 & 0x3FF);//Rx length[9:0]
|
||||||
pattrib->drvinfo_sz = 0;
|
pattrib->drvinfo_sz = 0;
|
||||||
|
|
||||||
/* */
|
//
|
||||||
/* Get TX report MAC ID valid. */
|
// Get TX report MAC ID valid.
|
||||||
/* */
|
//
|
||||||
pattrib->MacIDValidEntry[0] = le32_to_cpu(report.rxdw4);
|
pattrib->MacIDValidEntry[0] = report.rxdw4;
|
||||||
pattrib->MacIDValidEntry[1] = le32_to_cpu(report.rxdw5);
|
pattrib->MacIDValidEntry[1] = report.rxdw5;
|
||||||
|
|
||||||
} else if (pattrib->pkt_rpt_type == HIS_REPORT) { /* USB HISR RPT */
|
|
||||||
pattrib->pkt_len = (u16)(le32_to_cpu(report.rxdw0) & 0x00003fff);/* u16)prxreport->pktlen; */
|
|
||||||
}
|
}
|
||||||
|
else if(pattrib->pkt_rpt_type == HIS_REPORT)// USB HISR RPT
|
||||||
|
{
|
||||||
|
pattrib->pkt_len = (u16)(report.rxdw0 &0x00003fff);//(u16)prxreport->pktlen;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -138,65 +263,88 @@ void update_recvframe_attrib_88e(union recv_frame *precvframe, struct recv_stat
|
||||||
* Before calling this function,
|
* Before calling this function,
|
||||||
* precvframe->u.hdr.rx_data should be ready!
|
* precvframe->u.hdr.rx_data should be ready!
|
||||||
*/
|
*/
|
||||||
void update_recvframe_phyinfo_88e(union recv_frame *precvframe, struct phy_stat *pphy_status)
|
void update_recvframe_phyinfo_88e(
|
||||||
|
union recv_frame *precvframe,
|
||||||
|
struct phy_stat *pphy_status)
|
||||||
{
|
{
|
||||||
struct adapter *padapter = precvframe->u.hdr.adapter;
|
PADAPTER padapter = precvframe->u.hdr.adapter;
|
||||||
struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib;
|
struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib;
|
||||||
struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter);
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
||||||
struct odm_phy_status_info *pPHYInfo = (struct odm_phy_status_info *)(&pattrib->phy_info);
|
PODM_PHY_INFO_T pPHYInfo = (PODM_PHY_INFO_T)(&pattrib->phy_info);
|
||||||
u8 *wlanhdr;
|
u8 *wlanhdr;
|
||||||
struct odm_per_pkt_info pkt_info;
|
ODM_PACKET_INFO_T pkt_info;
|
||||||
u8 *sa = NULL;
|
u8 *sa;
|
||||||
struct sta_priv *pstapriv;
|
struct sta_priv *pstapriv;
|
||||||
struct sta_info *psta;
|
struct sta_info *psta;
|
||||||
|
//_irqL irqL;
|
||||||
pkt_info.bPacketMatchBSSID = false;
|
|
||||||
pkt_info.bPacketToSelf = false;
|
pkt_info.bPacketMatchBSSID =_FALSE;
|
||||||
pkt_info.bPacketBeacon = false;
|
pkt_info.bPacketToSelf = _FALSE;
|
||||||
|
pkt_info.bPacketBeacon = _FALSE;
|
||||||
|
|
||||||
wlanhdr = get_recvframe_data(precvframe);
|
wlanhdr = get_recvframe_data(precvframe);
|
||||||
|
|
||||||
pkt_info.bPacketMatchBSSID = ((!IsFrameTypeCtrl(wlanhdr)) &&
|
pkt_info.bPacketMatchBSSID = ((!IsFrameTypeCtrl(wlanhdr)) &&
|
||||||
!pattrib->icv_err && !pattrib->crc_err &&
|
!pattrib->icv_err && !pattrib->crc_err &&
|
||||||
_rtw_memcmp(get_hdr_bssid(wlanhdr),
|
_rtw_memcmp(get_hdr_bssid(wlanhdr), get_bssid(&padapter->mlmepriv), ETH_ALEN));
|
||||||
get_bssid(&padapter->mlmepriv), ETH_ALEN));
|
|
||||||
|
|
||||||
pkt_info.bPacketToSelf = pkt_info.bPacketMatchBSSID &&
|
pkt_info.bPacketToSelf = pkt_info.bPacketMatchBSSID && (_rtw_memcmp(get_da(wlanhdr), myid(&padapter->eeprompriv), ETH_ALEN));
|
||||||
(_rtw_memcmp(get_da(wlanhdr),
|
|
||||||
myid(&padapter->eeprompriv), ETH_ALEN));
|
|
||||||
|
|
||||||
pkt_info.bPacketBeacon = pkt_info.bPacketMatchBSSID &&
|
pkt_info.bPacketBeacon = pkt_info.bPacketMatchBSSID && (GetFrameSubType(wlanhdr) == WIFI_BEACON);
|
||||||
(GetFrameSubType(wlanhdr) == WIFI_BEACON);
|
|
||||||
|
|
||||||
if (pkt_info.bPacketBeacon) {
|
if(pkt_info.bPacketBeacon){
|
||||||
if (check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE))
|
if(check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE) == _TRUE){
|
||||||
sa = padapter->mlmepriv.cur_network.network.MacAddress;
|
sa = padapter->mlmepriv.cur_network.network.MacAddress;
|
||||||
/* to do Ad-hoc */
|
#if 0
|
||||||
} else {
|
{
|
||||||
sa = get_sa(wlanhdr);
|
DBG_8192C("==> rx beacon from AP[%02x:%02x:%02x:%02x:%02x:%02x]\n",
|
||||||
|
sa[0],sa[1],sa[2],sa[3],sa[4],sa[5]);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
sa = get_sa(wlanhdr);
|
||||||
}
|
}
|
||||||
|
else{
|
||||||
|
sa = get_sa(wlanhdr);
|
||||||
|
}
|
||||||
|
|
||||||
pstapriv = &padapter->stapriv;
|
pstapriv = &padapter->stapriv;
|
||||||
pkt_info.StationID = 0xFF;
|
pkt_info.StationID = 0xFF;
|
||||||
psta = rtw_get_stainfo(pstapriv, sa);
|
psta = rtw_get_stainfo(pstapriv, sa);
|
||||||
if (psta)
|
if (psta)
|
||||||
pkt_info.StationID = psta->mac_id;
|
{
|
||||||
pkt_info.Rate = pattrib->mcs_rate;
|
pkt_info.StationID = psta->mac_id;
|
||||||
|
//DBG_8192C("%s ==> StationID(%d)\n",__FUNCTION__,pkt_info.StationID);
|
||||||
|
}
|
||||||
|
pkt_info.Rate = pattrib->mcs_rate;
|
||||||
|
//rtl8188e_query_rx_phy_status(precvframe, pphy_status);
|
||||||
|
|
||||||
ODM_PhyStatusQuery(&pHalData->odmpriv, pPHYInfo, (u8 *)pphy_status, &(pkt_info), padapter);
|
//_enter_critical_bh(&pHalData->odm_stainfo_lock, &irqL);
|
||||||
|
ODM_PhyStatusQuery(&pHalData->odmpriv,pPHYInfo,(u8 *)pphy_status,&(pkt_info));
|
||||||
|
//_exit_critical_bh(&pHalData->odm_stainfo_lock, &irqL);
|
||||||
|
|
||||||
precvframe->u.hdr.psta = NULL;
|
precvframe->u.hdr.psta = NULL;
|
||||||
if (pkt_info.bPacketMatchBSSID &&
|
if (pkt_info.bPacketMatchBSSID &&
|
||||||
(check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE))) {
|
(check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == _TRUE))
|
||||||
if (psta) {
|
{
|
||||||
|
if (psta)
|
||||||
|
{
|
||||||
precvframe->u.hdr.psta = psta;
|
precvframe->u.hdr.psta = psta;
|
||||||
rtl8188e_process_phy_info(padapter, precvframe);
|
rtl8188e_process_phy_info(padapter, precvframe);
|
||||||
}
|
|
||||||
} else if (pkt_info.bPacketToSelf || pkt_info.bPacketBeacon) {
|
}
|
||||||
if (check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE)) {
|
}
|
||||||
|
else if (pkt_info.bPacketToSelf || pkt_info.bPacketBeacon)
|
||||||
|
{
|
||||||
|
if (check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE)
|
||||||
|
{
|
||||||
if (psta)
|
if (psta)
|
||||||
|
{
|
||||||
precvframe->u.hdr.psta = psta;
|
precvframe->u.hdr.psta = psta;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
rtl8188e_process_phy_info(padapter, precvframe);
|
rtl8188e_process_phy_info(padapter, precvframe);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
205
hal/rtl8188e_sreset.c
Normal file → Executable file
205
hal/rtl8188e_sreset.c
Normal file → Executable file
|
@ -1,80 +1,125 @@
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* 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
|
* under the terms of version 2 of the GNU General Public License as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
* more details.
|
* more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License along with
|
* 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.,
|
* this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#define _RTL8188E_SRESET_C_
|
#define _RTL8188E_SRESET_C_
|
||||||
|
|
||||||
#include <rtl8188e_sreset.h>
|
#include <rtl8188e_sreset.h>
|
||||||
#include <rtl8188e_hal.h>
|
#include <rtl8188e_hal.h>
|
||||||
|
|
||||||
void rtl8188e_silentreset_for_specific_platform(struct adapter *padapter)
|
#ifdef DBG_CONFIG_ERROR_DETECT
|
||||||
{
|
|
||||||
}
|
void rtl8188e_sreset_xmit_status_check(_adapter *padapter)
|
||||||
|
{
|
||||||
void rtl8188e_sreset_xmit_status_check(struct adapter *padapter)
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
||||||
{
|
struct sreset_priv *psrtpriv = &pHalData->srestpriv;
|
||||||
struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter);
|
|
||||||
struct sreset_priv *psrtpriv = &pHalData->srestpriv;
|
unsigned long current_time;
|
||||||
|
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
|
||||||
unsigned long current_time;
|
unsigned int diff_time;
|
||||||
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
|
u32 txdma_status;
|
||||||
unsigned int diff_time;
|
|
||||||
u32 txdma_status;
|
if( (txdma_status=rtw_read32(padapter, REG_TXDMA_STATUS)) !=0x00){
|
||||||
|
DBG_871X("%s REG_TXDMA_STATUS:0x%08x\n", __FUNCTION__, txdma_status);
|
||||||
txdma_status = rtw_read32(padapter, REG_TXDMA_STATUS);
|
rtw_hal_sreset_reset(padapter);
|
||||||
if (txdma_status != 0x00) {
|
}
|
||||||
DBG_88E("%s REG_TXDMA_STATUS:0x%08x\n", __func__, txdma_status);
|
#ifdef CONFIG_USB_HCI
|
||||||
rtw_write32(padapter, REG_TXDMA_STATUS, txdma_status);
|
//total xmit irp = 4
|
||||||
rtl8188e_silentreset_for_specific_platform(padapter);
|
//DBG_8192C("==>%s free_xmitbuf_cnt(%d),txirp_cnt(%d)\n",__FUNCTION__,pxmitpriv->free_xmitbuf_cnt,pxmitpriv->txirp_cnt);
|
||||||
}
|
//if(pxmitpriv->txirp_cnt == NR_XMITBUFF+1)
|
||||||
/* total xmit irp = 4 */
|
current_time = rtw_get_current_time();
|
||||||
current_time = rtw_get_current_time();
|
|
||||||
if (0 == pxmitpriv->free_xmitbuf_cnt) {
|
if(0 == pxmitpriv->free_xmitbuf_cnt || 0 == pxmitpriv->free_xmit_extbuf_cnt) {
|
||||||
diff_time = jiffies_to_msecs(current_time - psrtpriv->last_tx_time);
|
|
||||||
|
diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_time);
|
||||||
if (diff_time > 2000) {
|
|
||||||
if (psrtpriv->last_tx_complete_time == 0) {
|
if (diff_time > 2000) {
|
||||||
psrtpriv->last_tx_complete_time = current_time;
|
if (psrtpriv->last_tx_complete_time == 0) {
|
||||||
} else {
|
psrtpriv->last_tx_complete_time = current_time;
|
||||||
diff_time = jiffies_to_msecs(current_time - psrtpriv->last_tx_complete_time);
|
}
|
||||||
if (diff_time > 4000) {
|
else{
|
||||||
DBG_88E("%s tx hang\n", __func__);
|
diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_complete_time);
|
||||||
rtl8188e_silentreset_for_specific_platform(padapter);
|
if (diff_time > 4000) {
|
||||||
}
|
u32 ability;
|
||||||
}
|
|
||||||
}
|
//padapter->Wifi_Error_Status = WIFI_TX_HANG;
|
||||||
}
|
rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DM_FUNC, &ability);
|
||||||
}
|
|
||||||
|
DBG_871X("%s tx hang %s\n", __FUNCTION__,
|
||||||
void rtl8188e_sreset_linked_status_check(struct adapter *padapter)
|
(ability & ODM_BB_ADAPTIVITY)? "ODM_BB_ADAPTIVITY" : "");
|
||||||
{
|
|
||||||
u32 rx_dma_status = 0;
|
if (!(ability & ODM_BB_ADAPTIVITY))
|
||||||
u8 fw_status = 0;
|
rtw_hal_sreset_reset(padapter);
|
||||||
rx_dma_status = rtw_read32(padapter, REG_RXDMA_STATUS);
|
}
|
||||||
if (rx_dma_status != 0x00) {
|
}
|
||||||
DBG_88E("%s REG_RXDMA_STATUS:0x%08x\n", __func__, rx_dma_status);
|
}
|
||||||
rtw_write32(padapter, REG_RXDMA_STATUS, rx_dma_status);
|
}
|
||||||
}
|
#endif //CONFIG_USB_HCI
|
||||||
fw_status = rtw_read8(padapter, REG_FMETHR);
|
|
||||||
if (fw_status != 0x00) {
|
if (psrtpriv->dbg_trigger_point == SRESET_TGP_XMIT_STATUS) {
|
||||||
if (fw_status == 1)
|
psrtpriv->dbg_trigger_point = SRESET_TGP_NULL;
|
||||||
DBG_88E("%s REG_FW_STATUS (0x%02x), Read_Efuse_Fail !!\n", __func__, fw_status);
|
rtw_hal_sreset_reset(padapter);
|
||||||
else if (fw_status == 2)
|
return;
|
||||||
DBG_88E("%s REG_FW_STATUS (0x%02x), Condition_No_Match !!\n", __func__, fw_status);
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
void rtl8188e_sreset_linked_status_check(_adapter *padapter)
|
||||||
|
{
|
||||||
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
||||||
|
struct sreset_priv *psrtpriv = &pHalData->srestpriv;
|
||||||
|
|
||||||
|
u32 rx_dma_status = 0;
|
||||||
|
u8 fw_status=0;
|
||||||
|
rx_dma_status = rtw_read32(padapter,REG_RXDMA_STATUS);
|
||||||
|
if(rx_dma_status!= 0x00){
|
||||||
|
DBG_8192C("%s REG_RXDMA_STATUS:0x%08x \n",__FUNCTION__,rx_dma_status);
|
||||||
|
rtw_write32(padapter,REG_RXDMA_STATUS,rx_dma_status);
|
||||||
|
}
|
||||||
|
fw_status = rtw_read8(padapter,REG_FMETHR);
|
||||||
|
if(fw_status != 0x00)
|
||||||
|
{
|
||||||
|
if(fw_status == 1)
|
||||||
|
DBG_8192C("%s REG_FW_STATUS (0x%02x), Read_Efuse_Fail !! \n",__FUNCTION__,fw_status);
|
||||||
|
else if(fw_status == 2)
|
||||||
|
DBG_8192C("%s REG_FW_STATUS (0x%02x), Condition_No_Match !! \n",__FUNCTION__,fw_status);
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
|
u32 regc50,regc58,reg824,reg800;
|
||||||
|
regc50 = rtw_read32(padapter,0xc50);
|
||||||
|
regc58 = rtw_read32(padapter,0xc58);
|
||||||
|
reg824 = rtw_read32(padapter,0x824);
|
||||||
|
reg800 = rtw_read32(padapter,0x800);
|
||||||
|
if( ((regc50&0xFFFFFF00)!= 0x69543400)||
|
||||||
|
((regc58&0xFFFFFF00)!= 0x69543400)||
|
||||||
|
(((reg824&0xFFFFFF00)!= 0x00390000)&&(((reg824&0xFFFFFF00)!= 0x80390000)))||
|
||||||
|
( ((reg800&0xFFFFFF00)!= 0x03040000)&&((reg800&0xFFFFFF00)!= 0x83040000)))
|
||||||
|
{
|
||||||
|
DBG_8192C("%s regc50:0x%08x, regc58:0x%08x, reg824:0x%08x, reg800:0x%08x,\n", __FUNCTION__,
|
||||||
|
regc50, regc58, reg824, reg800);
|
||||||
|
rtw_hal_sreset_reset(padapter);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (psrtpriv->dbg_trigger_point == SRESET_TGP_LINK_STATUS) {
|
||||||
|
psrtpriv->dbg_trigger_point = SRESET_TGP_NULL;
|
||||||
|
rtw_hal_sreset_reset(padapter);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
279
hal/rtl8188e_xmit.c
Normal file → Executable file
279
hal/rtl8188e_xmit.c
Normal file → Executable file
|
@ -19,73 +19,274 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#define _RTL8188E_XMIT_C_
|
#define _RTL8188E_XMIT_C_
|
||||||
|
|
||||||
|
#include <drv_conf.h>
|
||||||
#include <osdep_service.h>
|
#include <osdep_service.h>
|
||||||
#include <drv_types.h>
|
#include <drv_types.h>
|
||||||
#include <rtl8188e_hal.h>
|
#include <rtl8188e_hal.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_XMIT_ACK
|
||||||
void dump_txrpt_ccx_88e(void *buf)
|
void dump_txrpt_ccx_88e(void *buf)
|
||||||
{
|
{
|
||||||
struct txrpt_ccx_88e *txrpt_ccx = (struct txrpt_ccx_88e *)buf;
|
struct txrpt_ccx_88e *txrpt_ccx = (struct txrpt_ccx_88e *)buf;
|
||||||
|
|
||||||
DBG_88E("%s:\n"
|
DBG_871X("%s:\n"
|
||||||
"tag1:%u, pkt_num:%u, txdma_underflow:%u, int_bt:%u, int_tri:%u, int_ccx:%u\n"
|
"tag1:%u, pkt_num:%u, txdma_underflow:%u, int_bt:%u, int_tri:%u, int_ccx:%u\n"
|
||||||
"mac_id:%u, pkt_ok:%u, bmc:%u\n"
|
"mac_id:%u, pkt_ok:%u, bmc:%u\n"
|
||||||
"retry_cnt:%u, lifetime_over:%u, retry_over:%u\n"
|
"retry_cnt:%u, lifetime_over:%u, retry_over:%u\n"
|
||||||
"ccx_qtime:%u\n"
|
"ccx_qtime:%u\n"
|
||||||
"final_data_rate:0x%02x\n"
|
"final_data_rate:0x%02x\n"
|
||||||
"qsel:%u, sw:0x%03x\n",
|
"qsel:%u, sw:0x%03x\n"
|
||||||
__func__, txrpt_ccx->tag1, txrpt_ccx->pkt_num,
|
, __func__
|
||||||
txrpt_ccx->txdma_underflow, txrpt_ccx->int_bt,
|
, txrpt_ccx->tag1, txrpt_ccx->pkt_num, txrpt_ccx->txdma_underflow, txrpt_ccx->int_bt, txrpt_ccx->int_tri, txrpt_ccx->int_ccx
|
||||||
txrpt_ccx->int_tri, txrpt_ccx->int_ccx,
|
, txrpt_ccx->mac_id, txrpt_ccx->pkt_ok, txrpt_ccx->bmc
|
||||||
txrpt_ccx->mac_id, txrpt_ccx->pkt_ok, txrpt_ccx->bmc,
|
, txrpt_ccx->retry_cnt, txrpt_ccx->lifetime_over, txrpt_ccx->retry_over
|
||||||
txrpt_ccx->retry_cnt, txrpt_ccx->lifetime_over,
|
, txrpt_ccx_qtime_88e(txrpt_ccx)
|
||||||
txrpt_ccx->retry_over, txrpt_ccx_qtime_88e(txrpt_ccx),
|
, txrpt_ccx->final_data_rate
|
||||||
txrpt_ccx->final_data_rate, txrpt_ccx->qsel,
|
, txrpt_ccx->qsel, txrpt_ccx_sw_88e(txrpt_ccx)
|
||||||
txrpt_ccx_sw_88e(txrpt_ccx)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_txrpt_ccx_88e(struct adapter *adapter, u8 *buf)
|
void handle_txrpt_ccx_88e(_adapter *adapter, u8 *buf)
|
||||||
{
|
{
|
||||||
struct txrpt_ccx_88e *txrpt_ccx = (struct txrpt_ccx_88e *)buf;
|
struct txrpt_ccx_88e *txrpt_ccx = (struct txrpt_ccx_88e *)buf;
|
||||||
|
|
||||||
|
#ifdef DBG_CCX
|
||||||
|
dump_txrpt_ccx_88e(buf);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (txrpt_ccx->int_ccx) {
|
if (txrpt_ccx->int_ccx) {
|
||||||
if (txrpt_ccx->pkt_ok)
|
if (txrpt_ccx->pkt_ok)
|
||||||
rtw_ack_tx_done(&adapter->xmitpriv,
|
rtw_ack_tx_done(&adapter->xmitpriv, RTW_SCTX_DONE_SUCCESS);
|
||||||
RTW_SCTX_DONE_SUCCESS);
|
|
||||||
else
|
else
|
||||||
rtw_ack_tx_done(&adapter->xmitpriv,
|
rtw_ack_tx_done(&adapter->xmitpriv, RTW_SCTX_DONE_CCX_PKT_FAIL);
|
||||||
RTW_SCTX_DONE_CCX_PKT_FAIL);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif //CONFIG_XMIT_ACK
|
||||||
|
|
||||||
void _dbg_dump_tx_info(struct adapter *padapter, int frame_tag,
|
void _dbg_dump_tx_info(_adapter *padapter,int frame_tag,struct tx_desc *ptxdesc)
|
||||||
struct tx_desc *ptxdesc)
|
|
||||||
{
|
{
|
||||||
u8 dmp_txpkt;
|
u8 bDumpTxPkt;
|
||||||
bool dump_txdesc = false;
|
u8 bDumpTxDesc = _FALSE;
|
||||||
rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DUMP_TXPKT, &(dmp_txpkt));
|
rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DUMP_TXPKT, &(bDumpTxPkt));
|
||||||
|
|
||||||
if (dmp_txpkt == 1) {/* dump txdesc for data frame */
|
if(bDumpTxPkt ==1){//dump txdesc for data frame
|
||||||
DBG_88E("dump tx_desc for data frame\n");
|
DBG_871X("dump tx_desc for data frame\n");
|
||||||
if ((frame_tag & 0x0f) == DATA_FRAMETAG)
|
if((frame_tag&0x0f) == DATA_FRAMETAG){
|
||||||
dump_txdesc = true;
|
bDumpTxDesc = _TRUE;
|
||||||
} else if (dmp_txpkt == 2) {/* dump txdesc for mgnt frame */
|
}
|
||||||
DBG_88E("dump tx_desc for mgnt frame\n");
|
}
|
||||||
if ((frame_tag & 0x0f) == MGNT_FRAMETAG)
|
else if(bDumpTxPkt ==2){//dump txdesc for mgnt frame
|
||||||
dump_txdesc = true;
|
DBG_871X("dump tx_desc for mgnt frame\n");
|
||||||
|
if((frame_tag&0x0f) == MGNT_FRAMETAG){
|
||||||
|
bDumpTxDesc = _TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(bDumpTxPkt ==3){//dump early info
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dump_txdesc) {
|
if(bDumpTxDesc){
|
||||||
DBG_88E("=====================================\n");
|
// ptxdesc->txdw4 = cpu_to_le32(0x00001006);//RTS Rate=24M
|
||||||
DBG_88E("txdw0(0x%08x)\n", ptxdesc->txdw0);
|
// ptxdesc->txdw6 = 0x6666f800;
|
||||||
DBG_88E("txdw1(0x%08x)\n", ptxdesc->txdw1);
|
DBG_8192C("=====================================\n");
|
||||||
DBG_88E("txdw2(0x%08x)\n", ptxdesc->txdw2);
|
DBG_8192C("txdw0(0x%08x)\n",ptxdesc->txdw0);
|
||||||
DBG_88E("txdw3(0x%08x)\n", ptxdesc->txdw3);
|
DBG_8192C("txdw1(0x%08x)\n",ptxdesc->txdw1);
|
||||||
DBG_88E("txdw4(0x%08x)\n", ptxdesc->txdw4);
|
DBG_8192C("txdw2(0x%08x)\n",ptxdesc->txdw2);
|
||||||
DBG_88E("txdw5(0x%08x)\n", ptxdesc->txdw5);
|
DBG_8192C("txdw3(0x%08x)\n",ptxdesc->txdw3);
|
||||||
DBG_88E("txdw6(0x%08x)\n", ptxdesc->txdw6);
|
DBG_8192C("txdw4(0x%08x)\n",ptxdesc->txdw4);
|
||||||
DBG_88E("txdw7(0x%08x)\n", ptxdesc->txdw7);
|
DBG_8192C("txdw5(0x%08x)\n",ptxdesc->txdw5);
|
||||||
DBG_88E("=====================================\n");
|
DBG_8192C("txdw6(0x%08x)\n",ptxdesc->txdw6);
|
||||||
|
DBG_8192C("txdw7(0x%08x)\n",ptxdesc->txdw7);
|
||||||
|
DBG_8192C("=====================================\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Description:
|
||||||
|
* Aggregation packets and send to hardware
|
||||||
|
*
|
||||||
|
* Return:
|
||||||
|
* 0 Success
|
||||||
|
* -1 Hardware resource(TX FIFO) not ready
|
||||||
|
* -2 Software resource(xmitbuf) not ready
|
||||||
|
*/
|
||||||
|
#ifdef CONFIG_TX_EARLY_MODE
|
||||||
|
|
||||||
|
//#define DBG_EMINFO
|
||||||
|
|
||||||
|
#if RTL8188E_EARLY_MODE_PKT_NUM_10 == 1
|
||||||
|
#define EARLY_MODE_MAX_PKT_NUM 10
|
||||||
|
#else
|
||||||
|
#define EARLY_MODE_MAX_PKT_NUM 5
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
struct EMInfo{
|
||||||
|
u8 EMPktNum;
|
||||||
|
u16 EMPktLen[EARLY_MODE_MAX_PKT_NUM];
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
InsertEMContent_8188E(
|
||||||
|
struct EMInfo *pEMInfo,
|
||||||
|
IN pu1Byte VirtualAddress)
|
||||||
|
{
|
||||||
|
|
||||||
|
#if RTL8188E_EARLY_MODE_PKT_NUM_10 == 1
|
||||||
|
u1Byte index=0;
|
||||||
|
u4Byte dwtmp=0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
_rtw_memset(VirtualAddress, 0, EARLY_MODE_INFO_SIZE);
|
||||||
|
if(pEMInfo->EMPktNum==0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
#ifdef DBG_EMINFO
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
DBG_8192C("\n%s ==> pEMInfo->EMPktNum =%d\n",__FUNCTION__,pEMInfo->EMPktNum);
|
||||||
|
for(i=0;i< EARLY_MODE_MAX_PKT_NUM;i++){
|
||||||
|
DBG_8192C("%s ==> pEMInfo->EMPktLen[%d] =%d\n",__FUNCTION__,i,pEMInfo->EMPktLen[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if RTL8188E_EARLY_MODE_PKT_NUM_10 == 1
|
||||||
|
SET_EARLYMODE_PKTNUM(VirtualAddress, pEMInfo->EMPktNum);
|
||||||
|
|
||||||
|
if(pEMInfo->EMPktNum == 1){
|
||||||
|
dwtmp = pEMInfo->EMPktLen[0];
|
||||||
|
}else{
|
||||||
|
dwtmp = pEMInfo->EMPktLen[0];
|
||||||
|
dwtmp += ((dwtmp%4)?(4-dwtmp%4):0)+4;
|
||||||
|
dwtmp += pEMInfo->EMPktLen[1];
|
||||||
|
}
|
||||||
|
SET_EARLYMODE_LEN0(VirtualAddress, dwtmp);
|
||||||
|
if(pEMInfo->EMPktNum <= 3){
|
||||||
|
dwtmp = pEMInfo->EMPktLen[2];
|
||||||
|
}else{
|
||||||
|
dwtmp = pEMInfo->EMPktLen[2];
|
||||||
|
dwtmp += ((dwtmp%4)?(4-dwtmp%4):0)+4;
|
||||||
|
dwtmp += pEMInfo->EMPktLen[3];
|
||||||
|
}
|
||||||
|
SET_EARLYMODE_LEN1(VirtualAddress, dwtmp);
|
||||||
|
if(pEMInfo->EMPktNum <= 5){
|
||||||
|
dwtmp = pEMInfo->EMPktLen[4];
|
||||||
|
}else{
|
||||||
|
dwtmp = pEMInfo->EMPktLen[4];
|
||||||
|
dwtmp += ((dwtmp%4)?(4-dwtmp%4):0)+4;
|
||||||
|
dwtmp += pEMInfo->EMPktLen[5];
|
||||||
|
}
|
||||||
|
SET_EARLYMODE_LEN2_1(VirtualAddress, dwtmp&0xF);
|
||||||
|
SET_EARLYMODE_LEN2_2(VirtualAddress, dwtmp>>4);
|
||||||
|
if(pEMInfo->EMPktNum <= 7){
|
||||||
|
dwtmp = pEMInfo->EMPktLen[6];
|
||||||
|
}else{
|
||||||
|
dwtmp = pEMInfo->EMPktLen[6];
|
||||||
|
dwtmp += ((dwtmp%4)?(4-dwtmp%4):0)+4;
|
||||||
|
dwtmp += pEMInfo->EMPktLen[7];
|
||||||
|
}
|
||||||
|
SET_EARLYMODE_LEN3(VirtualAddress, dwtmp);
|
||||||
|
if(pEMInfo->EMPktNum <= 9){
|
||||||
|
dwtmp = pEMInfo->EMPktLen[8];
|
||||||
|
}else{
|
||||||
|
dwtmp = pEMInfo->EMPktLen[8];
|
||||||
|
dwtmp += ((dwtmp%4)?(4-dwtmp%4):0)+4;
|
||||||
|
dwtmp += pEMInfo->EMPktLen[9];
|
||||||
|
}
|
||||||
|
SET_EARLYMODE_LEN4(VirtualAddress, dwtmp);
|
||||||
|
#else
|
||||||
|
SET_EARLYMODE_PKTNUM(VirtualAddress, pEMInfo->EMPktNum);
|
||||||
|
SET_EARLYMODE_LEN0(VirtualAddress, pEMInfo->EMPktLen[0]);
|
||||||
|
SET_EARLYMODE_LEN1(VirtualAddress, pEMInfo->EMPktLen[1]);
|
||||||
|
SET_EARLYMODE_LEN2_1(VirtualAddress, pEMInfo->EMPktLen[2]&0xF);
|
||||||
|
SET_EARLYMODE_LEN2_2(VirtualAddress, pEMInfo->EMPktLen[2]>>4);
|
||||||
|
SET_EARLYMODE_LEN3(VirtualAddress, pEMInfo->EMPktLen[3]);
|
||||||
|
SET_EARLYMODE_LEN4(VirtualAddress, pEMInfo->EMPktLen[4]);
|
||||||
|
#endif
|
||||||
|
//RT_PRINT_DATA(COMP_SEND, DBG_LOUD, "EMHdr:", VirtualAddress, 8);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void UpdateEarlyModeInfo8188E(struct xmit_priv *pxmitpriv,struct xmit_buf *pxmitbuf )
|
||||||
|
{
|
||||||
|
//_adapter *padapter, struct xmit_frame *pxmitframe,struct tx_servq *ptxservq
|
||||||
|
int index,j;
|
||||||
|
u16 offset,pktlen;
|
||||||
|
PTXDESC ptxdesc;
|
||||||
|
|
||||||
|
u8 *pmem,*pEMInfo_mem;
|
||||||
|
s8 node_num_0=0,node_num_1=0;
|
||||||
|
struct EMInfo eminfo;
|
||||||
|
struct agg_pkt_info *paggpkt;
|
||||||
|
struct xmit_frame *pframe = (struct xmit_frame*)pxmitbuf->priv_data;
|
||||||
|
pmem= pframe->buf_addr;
|
||||||
|
|
||||||
|
#ifdef DBG_EMINFO
|
||||||
|
DBG_8192C("\n%s ==> agg_num:%d\n",__FUNCTION__, pframe->agg_num);
|
||||||
|
for(index=0;index<pframe->agg_num;index++){
|
||||||
|
offset = pxmitpriv->agg_pkt[index].offset;
|
||||||
|
pktlen = pxmitpriv->agg_pkt[index].pkt_len;
|
||||||
|
DBG_8192C("%s ==> agg_pkt[%d].offset=%d\n",__FUNCTION__,index,offset);
|
||||||
|
DBG_8192C("%s ==> agg_pkt[%d].pkt_len=%d\n",__FUNCTION__,index,pktlen);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if( pframe->agg_num > EARLY_MODE_MAX_PKT_NUM)
|
||||||
|
{
|
||||||
|
node_num_0 = pframe->agg_num;
|
||||||
|
node_num_1= EARLY_MODE_MAX_PKT_NUM-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(index=0;index<pframe->agg_num;index++){
|
||||||
|
|
||||||
|
offset = pxmitpriv->agg_pkt[index].offset;
|
||||||
|
pktlen = pxmitpriv->agg_pkt[index].pkt_len;
|
||||||
|
|
||||||
|
_rtw_memset(&eminfo,0,sizeof(struct EMInfo));
|
||||||
|
if( pframe->agg_num > EARLY_MODE_MAX_PKT_NUM){
|
||||||
|
if(node_num_0 > EARLY_MODE_MAX_PKT_NUM){
|
||||||
|
eminfo.EMPktNum = EARLY_MODE_MAX_PKT_NUM;
|
||||||
|
node_num_0--;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
eminfo.EMPktNum = node_num_1;
|
||||||
|
node_num_1--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
eminfo.EMPktNum = pframe->agg_num-(index+1);
|
||||||
|
}
|
||||||
|
for(j=0;j< eminfo.EMPktNum ;j++){
|
||||||
|
eminfo.EMPktLen[j] = pxmitpriv->agg_pkt[index+1+j].pkt_len+4;// 4 bytes CRC
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pmem){
|
||||||
|
if(index==0){
|
||||||
|
ptxdesc = (PTXDESC)(pmem);
|
||||||
|
pEMInfo_mem = ((u8 *)ptxdesc)+TXDESC_SIZE;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
pmem = pmem + pxmitpriv->agg_pkt[index-1].offset;
|
||||||
|
ptxdesc = (PTXDESC)(pmem);
|
||||||
|
pEMInfo_mem = ((u8 *)ptxdesc)+TXDESC_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef DBG_EMINFO
|
||||||
|
DBG_8192C("%s ==> desc.pkt_len=%d\n",__FUNCTION__,ptxdesc->pktlen);
|
||||||
|
#endif
|
||||||
|
InsertEMContent_8188E(&eminfo,pEMInfo_mem);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
_rtw_memset(pxmitpriv->agg_pkt,0,sizeof(struct agg_pkt_info)*MAX_AGG_PKT_NUM);
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
171
hal/rtl8188eu_led.c
Normal file → Executable file
171
hal/rtl8188eu_led.c
Normal file → Executable file
|
@ -1,7 +1,7 @@
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* 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
|
* under the terms of version 2 of the GNU General Public License as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
|
@ -18,94 +18,153 @@
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
#include <drv_conf.h>
|
||||||
#include <osdep_service.h>
|
#include <osdep_service.h>
|
||||||
#include <drv_types.h>
|
#include <drv_types.h>
|
||||||
#include <rtl8188e_hal.h>
|
#include <rtl8188e_hal.h>
|
||||||
#include <rtl8188e_led.h>
|
|
||||||
|
|
||||||
/* LED object. */
|
//================================================================================
|
||||||
|
// LED object.
|
||||||
|
//================================================================================
|
||||||
|
|
||||||
/* LED_819xUsb routines. */
|
|
||||||
/* Description: */
|
//================================================================================
|
||||||
/* Turn on LED according to LedPin specified. */
|
// Prototype of protected function.
|
||||||
void SwLedOn(struct adapter *padapter, struct LED_871x *pLed)
|
//================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
//================================================================================
|
||||||
|
// LED_819xUsb routines.
|
||||||
|
//================================================================================
|
||||||
|
|
||||||
|
//
|
||||||
|
// Description:
|
||||||
|
// Turn on LED according to LedPin specified.
|
||||||
|
//
|
||||||
|
void
|
||||||
|
SwLedOn(
|
||||||
|
_adapter *padapter,
|
||||||
|
PLED_871x pLed
|
||||||
|
)
|
||||||
{
|
{
|
||||||
u8 LedCfg;
|
u8 LedCfg;
|
||||||
|
//HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
||||||
|
|
||||||
if (padapter->bSurpriseRemoved || padapter->bDriverStopped)
|
if( (padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
LedCfg = rtw_read8(padapter, REG_LEDCFG2);
|
|
||||||
switch (pLed->LedPin) {
|
|
||||||
case LED_PIN_LED0:
|
|
||||||
rtw_write8(padapter, REG_LEDCFG2, (LedCfg&0xf0)|BIT5|BIT6); /* SW control led0 on. */
|
|
||||||
break;
|
|
||||||
case LED_PIN_LED1:
|
|
||||||
rtw_write8(padapter, REG_LEDCFG2, (LedCfg&0x0f)|BIT5); /* SW control led1 on. */
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
pLed->bLedOn = true;
|
|
||||||
|
LedCfg = rtw_read8(padapter, REG_LEDCFG2);
|
||||||
|
switch(pLed->LedPin)
|
||||||
|
{
|
||||||
|
case LED_PIN_LED0:
|
||||||
|
rtw_write8(padapter, REG_LEDCFG2, (LedCfg&0xf0)|BIT5|BIT6); // SW control led0 on.
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LED_PIN_LED1:
|
||||||
|
rtw_write8(padapter, REG_LEDCFG2, (LedCfg&0x0f)|BIT5); // SW control led1 on.
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
pLed->bLedOn = _TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Description: */
|
|
||||||
/* Turn off LED according to LedPin specified. */
|
//
|
||||||
void SwLedOff(struct adapter *padapter, struct LED_871x *pLed)
|
// Description:
|
||||||
|
// Turn off LED according to LedPin specified.
|
||||||
|
//
|
||||||
|
void
|
||||||
|
SwLedOff(
|
||||||
|
_adapter *padapter,
|
||||||
|
PLED_871x pLed
|
||||||
|
)
|
||||||
{
|
{
|
||||||
u8 LedCfg;
|
u8 LedCfg;
|
||||||
struct hal_data_8188e *pHalData = GET_HAL_DATA(padapter);
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
||||||
|
|
||||||
if (padapter->bSurpriseRemoved || padapter->bDriverStopped)
|
if((padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
|
||||||
|
{
|
||||||
goto exit;
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
LedCfg = rtw_read8(padapter, REG_LEDCFG2);/* 0x4E */
|
|
||||||
|
|
||||||
switch (pLed->LedPin) {
|
LedCfg = rtw_read8(padapter, REG_LEDCFG2);//0x4E
|
||||||
case LED_PIN_LED0:
|
|
||||||
if (pHalData->bLedOpenDrain) {
|
switch(pLed->LedPin)
|
||||||
/* Open-drain arrangement for controlling the LED) */
|
{
|
||||||
LedCfg &= 0x90; /* Set to software control. */
|
case LED_PIN_LED0:
|
||||||
|
if(pHalData->bLedOpenDrain == _TRUE) // Open-drain arrangement for controlling the LED)
|
||||||
|
{
|
||||||
|
LedCfg &= 0x90; // Set to software control.
|
||||||
|
rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3));
|
||||||
|
LedCfg = rtw_read8(padapter, REG_MAC_PINMUX_CFG);
|
||||||
|
LedCfg &= 0xFE;
|
||||||
|
rtw_write8(padapter, REG_MAC_PINMUX_CFG, LedCfg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3|BIT5|BIT6));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LED_PIN_LED1:
|
||||||
|
LedCfg &= 0x0f; // Set to software control.
|
||||||
rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3));
|
rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3));
|
||||||
LedCfg = rtw_read8(padapter, REG_MAC_PINMUX_CFG);
|
break;
|
||||||
LedCfg &= 0xFE;
|
|
||||||
rtw_write8(padapter, REG_MAC_PINMUX_CFG, LedCfg);
|
default:
|
||||||
} else {
|
break;
|
||||||
rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3|BIT5|BIT6));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case LED_PIN_LED1:
|
|
||||||
LedCfg &= 0x0f; /* Set to software control. */
|
|
||||||
rtw_write8(padapter, REG_LEDCFG2, (LedCfg|BIT3));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
exit:
|
exit:
|
||||||
pLed->bLedOn = false;
|
pLed->bLedOn = _FALSE;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Interface to manipulate LED objects. */
|
//================================================================================
|
||||||
/* Default LED behavior. */
|
// Interface to manipulate LED objects.
|
||||||
|
//================================================================================
|
||||||
|
|
||||||
/* Description: */
|
|
||||||
/* Initialize all LED_871x objects. */
|
//================================================================================
|
||||||
void rtl8188eu_InitSwLeds(struct adapter *padapter)
|
// Default LED behavior.
|
||||||
|
//================================================================================
|
||||||
|
|
||||||
|
//
|
||||||
|
// Description:
|
||||||
|
// Initialize all LED_871x objects.
|
||||||
|
//
|
||||||
|
void
|
||||||
|
rtl8188eu_InitSwLeds(
|
||||||
|
_adapter *padapter
|
||||||
|
)
|
||||||
{
|
{
|
||||||
struct led_priv *pledpriv = &(padapter->ledpriv);
|
struct led_priv *pledpriv = &(padapter->ledpriv);
|
||||||
|
|
||||||
pledpriv->LedControlHandler = LedControl8188eu;
|
pledpriv->LedControlHandler = LedControl871x;
|
||||||
|
|
||||||
InitLed871x(padapter, &(pledpriv->SwLed0), LED_PIN_LED0);
|
InitLed871x(padapter, &(pledpriv->SwLed0), LED_PIN_LED0);
|
||||||
|
|
||||||
InitLed871x(padapter, &(pledpriv->SwLed1), LED_PIN_LED1);
|
InitLed871x(padapter,&(pledpriv->SwLed1), LED_PIN_LED1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Description: */
|
|
||||||
/* DeInitialize all LED_819xUsb objects. */
|
//
|
||||||
void rtl8188eu_DeInitSwLeds(struct adapter *padapter)
|
// Description:
|
||||||
|
// DeInitialize all LED_819xUsb objects.
|
||||||
|
//
|
||||||
|
void
|
||||||
|
rtl8188eu_DeInitSwLeds(
|
||||||
|
_adapter *padapter
|
||||||
|
)
|
||||||
{
|
{
|
||||||
struct led_priv *ledpriv = &(padapter->ledpriv);
|
struct led_priv *ledpriv = &(padapter->ledpriv);
|
||||||
|
|
||||||
DeInitLed871x(&(ledpriv->SwLed0));
|
DeInitLed871x( &(ledpriv->SwLed0) );
|
||||||
DeInitLed871x(&(ledpriv->SwLed1));
|
DeInitLed871x( &(ledpriv->SwLed1) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
174
hal/rtl8188eu_recv.c
Normal file → Executable file
174
hal/rtl8188eu_recv.c
Normal file → Executable file
|
@ -1,7 +1,7 @@
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* 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
|
* under the terms of version 2 of the GNU General Public License as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
|
@ -18,6 +18,7 @@
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#define _RTL8188EU_RECV_C_
|
#define _RTL8188EU_RECV_C_
|
||||||
|
#include <drv_conf.h>
|
||||||
#include <osdep_service.h>
|
#include <osdep_service.h>
|
||||||
#include <drv_types.h>
|
#include <drv_types.h>
|
||||||
#include <recv_osdep.h>
|
#include <recv_osdep.h>
|
||||||
|
@ -27,90 +28,145 @@
|
||||||
#include <ethernet.h>
|
#include <ethernet.h>
|
||||||
|
|
||||||
#include <usb_ops.h>
|
#include <usb_ops.h>
|
||||||
|
|
||||||
#include <wifi.h>
|
#include <wifi.h>
|
||||||
|
#include <circ_buf.h>
|
||||||
|
|
||||||
#include <rtl8188e_hal.h>
|
#include <rtl8188e_hal.h>
|
||||||
|
|
||||||
void rtl8188eu_init_recvbuf(struct adapter *padapter, struct recv_buf *precvbuf)
|
|
||||||
|
void rtl8188eu_init_recvbuf(_adapter *padapter, struct recv_buf *precvbuf)
|
||||||
{
|
{
|
||||||
|
|
||||||
precvbuf->transfer_len = 0;
|
precvbuf->transfer_len = 0;
|
||||||
|
|
||||||
precvbuf->len = 0;
|
precvbuf->len = 0;
|
||||||
|
|
||||||
precvbuf->ref_cnt = 0;
|
precvbuf->ref_cnt = 0;
|
||||||
|
|
||||||
if (precvbuf->pbuf) {
|
if(precvbuf->pbuf)
|
||||||
precvbuf->pdata = precvbuf->pbuf;
|
{
|
||||||
precvbuf->phead = precvbuf->pbuf;
|
precvbuf->pdata = precvbuf->phead = precvbuf->ptail = precvbuf->pbuf;
|
||||||
precvbuf->ptail = precvbuf->pbuf;
|
|
||||||
precvbuf->pend = precvbuf->pdata + MAX_RECVBUF_SZ;
|
precvbuf->pend = precvbuf->pdata + MAX_RECVBUF_SZ;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int rtl8188eu_init_recv_priv(struct adapter *padapter)
|
int rtl8188eu_init_recv_priv(_adapter *padapter)
|
||||||
{
|
{
|
||||||
struct recv_priv *precvpriv = &padapter->recvpriv;
|
struct recv_priv *precvpriv = &padapter->recvpriv;
|
||||||
int i, res = _SUCCESS;
|
int i, res = _SUCCESS;
|
||||||
struct recv_buf *precvbuf;
|
struct recv_buf *precvbuf;
|
||||||
|
|
||||||
|
#ifdef CONFIG_RECV_THREAD_MODE
|
||||||
|
_rtw_init_sema(&precvpriv->recv_sema, 0);//will be removed
|
||||||
|
_rtw_init_sema(&precvpriv->terminate_recvthread_sema, 0);//will be removed
|
||||||
|
#endif
|
||||||
|
|
||||||
tasklet_init(&precvpriv->recv_tasklet,
|
tasklet_init(&precvpriv->recv_tasklet,
|
||||||
(void(*)(unsigned long))rtl8188eu_recv_tasklet,
|
(void(*)(unsigned long))rtl8188eu_recv_tasklet,
|
||||||
(unsigned long)padapter);
|
(unsigned long)padapter);
|
||||||
|
|
||||||
/* init recv_buf */
|
#ifdef CONFIG_USB_INTERRUPT_IN_PIPE
|
||||||
_rtw_init_queue(&precvpriv->free_recv_buf_queue);
|
precvpriv->int_in_urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||||
|
if(precvpriv->int_in_urb == NULL){
|
||||||
precvpriv->pallocated_recv_buf = rtw_zmalloc(NR_RECVBUFF * sizeof(struct recv_buf) + 4);
|
res= _FAIL;
|
||||||
if (precvpriv->pallocated_recv_buf == NULL) {
|
DBG_8192C("alloc_urb for interrupt in endpoint fail !!!!\n");
|
||||||
res = _FAIL;
|
|
||||||
RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, ("alloc recv_buf fail!\n"));
|
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
_rtw_memset(precvpriv->pallocated_recv_buf, 0, NR_RECVBUFF * sizeof(struct recv_buf) + 4);
|
precvpriv->int_in_buf = rtw_zmalloc(INTERRUPT_MSG_FORMAT_LEN);
|
||||||
|
if(precvpriv->int_in_buf == NULL){
|
||||||
precvpriv->precv_buf = (u8 *)N_BYTE_ALIGMENT((size_t)(precvpriv->pallocated_recv_buf), 4);
|
res= _FAIL;
|
||||||
|
DBG_8192C("alloc_mem for interrupt in endpoint fail !!!!\n");
|
||||||
precvbuf = (struct recv_buf *)precvpriv->precv_buf;
|
goto exit;
|
||||||
|
|
||||||
for (i = 0; i < NR_RECVBUFF; i++) {
|
|
||||||
_rtw_init_listhead(&precvbuf->list);
|
|
||||||
spin_lock_init(&precvbuf->recvbuf_lock);
|
|
||||||
precvbuf->alloc_sz = MAX_RECVBUF_SZ;
|
|
||||||
res = rtw_os_recvbuf_resource_alloc(padapter, precvbuf);
|
|
||||||
if (res == _FAIL)
|
|
||||||
break;
|
|
||||||
precvbuf->ref_cnt = 0;
|
|
||||||
precvbuf->adapter = padapter;
|
|
||||||
precvbuf++;
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//init recv_buf
|
||||||
|
_rtw_init_queue(&precvpriv->free_recv_buf_queue);
|
||||||
|
|
||||||
|
#ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
|
||||||
|
_rtw_init_queue(&precvpriv->recv_buf_pending_queue);
|
||||||
|
#endif // CONFIG_USE_USB_BUFFER_ALLOC_RX
|
||||||
|
|
||||||
|
precvpriv->pallocated_recv_buf = rtw_zmalloc(NR_RECVBUFF *sizeof(struct recv_buf) + 4);
|
||||||
|
if(precvpriv->pallocated_recv_buf==NULL){
|
||||||
|
res= _FAIL;
|
||||||
|
RT_TRACE(_module_rtl871x_recv_c_,_drv_err_,("alloc recv_buf fail!\n"));
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
_rtw_memset(precvpriv->pallocated_recv_buf, 0, NR_RECVBUFF *sizeof(struct recv_buf) + 4);
|
||||||
|
|
||||||
|
precvpriv->precv_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(precvpriv->pallocated_recv_buf), 4);
|
||||||
|
//precvpriv->precv_buf = precvpriv->pallocated_recv_buf + 4 -
|
||||||
|
// ((uint) (precvpriv->pallocated_recv_buf) &(4-1));
|
||||||
|
|
||||||
|
|
||||||
|
precvbuf = (struct recv_buf*)precvpriv->precv_buf;
|
||||||
|
|
||||||
|
for(i=0; i < NR_RECVBUFF ; i++)
|
||||||
|
{
|
||||||
|
_rtw_init_listhead(&precvbuf->list);
|
||||||
|
|
||||||
|
_rtw_spinlock_init(&precvbuf->recvbuf_lock);
|
||||||
|
|
||||||
|
precvbuf->alloc_sz = MAX_RECVBUF_SZ;
|
||||||
|
|
||||||
|
res = rtw_os_recvbuf_resource_alloc(padapter, precvbuf);
|
||||||
|
if(res==_FAIL)
|
||||||
|
break;
|
||||||
|
|
||||||
|
precvbuf->ref_cnt = 0;
|
||||||
|
precvbuf->adapter =padapter;
|
||||||
|
|
||||||
|
|
||||||
|
//rtw_list_insert_tail(&precvbuf->list, &(precvpriv->free_recv_buf_queue.queue));
|
||||||
|
|
||||||
|
precvbuf++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
precvpriv->free_recv_buf_queue_cnt = NR_RECVBUFF;
|
precvpriv->free_recv_buf_queue_cnt = NR_RECVBUFF;
|
||||||
|
|
||||||
|
|
||||||
skb_queue_head_init(&precvpriv->rx_skb_queue);
|
skb_queue_head_init(&precvpriv->rx_skb_queue);
|
||||||
|
|
||||||
|
#ifdef CONFIG_PREALLOC_RECV_SKB
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
size_t tmpaddr = 0;
|
SIZE_PTR tmpaddr=0;
|
||||||
size_t alignment = 0;
|
SIZE_PTR alignment=0;
|
||||||
struct sk_buff *pskb = NULL;
|
struct sk_buff *pskb=NULL;
|
||||||
|
|
||||||
skb_queue_head_init(&precvpriv->free_recv_skb_queue);
|
skb_queue_head_init(&precvpriv->free_recv_skb_queue);
|
||||||
|
|
||||||
for (i = 0; i < NR_PREALLOC_RECV_SKB; i++) {
|
for(i=0; i<NR_PREALLOC_RECV_SKB; i++)
|
||||||
pskb = __netdev_alloc_skb(padapter->pnetdev, MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, GFP_KERNEL);
|
{
|
||||||
if (pskb) {
|
pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
|
||||||
|
|
||||||
|
if(pskb)
|
||||||
|
{
|
||||||
pskb->dev = padapter->pnetdev;
|
pskb->dev = padapter->pnetdev;
|
||||||
tmpaddr = (size_t)pskb->data;
|
|
||||||
|
tmpaddr = (SIZE_PTR)pskb->data;
|
||||||
alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);
|
alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);
|
||||||
skb_reserve(pskb, (RECVBUFF_ALIGN_SZ - alignment));
|
skb_reserve(pskb, (RECVBUFF_ALIGN_SZ - alignment));
|
||||||
|
|
||||||
skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);
|
skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);
|
||||||
}
|
}
|
||||||
pskb = NULL;
|
|
||||||
|
pskb=NULL;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtl8188eu_free_recv_priv(struct adapter *padapter)
|
void rtl8188eu_free_recv_priv (_adapter *padapter)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
struct recv_buf *precvbuf;
|
struct recv_buf *precvbuf;
|
||||||
|
@ -118,19 +174,39 @@ void rtl8188eu_free_recv_priv(struct adapter *padapter)
|
||||||
|
|
||||||
precvbuf = (struct recv_buf *)precvpriv->precv_buf;
|
precvbuf = (struct recv_buf *)precvpriv->precv_buf;
|
||||||
|
|
||||||
for (i = 0; i < NR_RECVBUFF; i++) {
|
for(i=0; i < NR_RECVBUFF ; i++)
|
||||||
|
{
|
||||||
rtw_os_recvbuf_resource_free(padapter, precvbuf);
|
rtw_os_recvbuf_resource_free(padapter, precvbuf);
|
||||||
precvbuf++;
|
precvbuf++;
|
||||||
}
|
}
|
||||||
|
|
||||||
kfree(precvpriv->pallocated_recv_buf);
|
if(precvpriv->pallocated_recv_buf)
|
||||||
|
rtw_mfree(precvpriv->pallocated_recv_buf, NR_RECVBUFF *sizeof(struct recv_buf) + 4);
|
||||||
|
|
||||||
if (skb_queue_len(&precvpriv->rx_skb_queue))
|
#ifdef CONFIG_USB_INTERRUPT_IN_PIPE
|
||||||
DBG_88E(KERN_WARNING "rx_skb_queue not empty\n");
|
if(precvpriv->int_in_urb)
|
||||||
skb_queue_purge(&precvpriv->rx_skb_queue);
|
usb_free_urb(precvpriv->int_in_urb);
|
||||||
|
|
||||||
if (skb_queue_len(&precvpriv->free_recv_skb_queue))
|
if(precvpriv->int_in_buf)
|
||||||
DBG_88E(KERN_WARNING "free_recv_skb_queue not empty, %d\n", skb_queue_len(&precvpriv->free_recv_skb_queue));
|
rtw_mfree(precvpriv->int_in_buf, INTERRUPT_MSG_FORMAT_LEN);
|
||||||
|
#endif//CONFIG_USB_INTERRUPT_IN_PIPE
|
||||||
|
|
||||||
|
if (skb_queue_len(&precvpriv->rx_skb_queue)) {
|
||||||
|
DBG_8192C(KERN_WARNING "rx_skb_queue not empty\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
rtw_skb_queue_purge(&precvpriv->rx_skb_queue);
|
||||||
|
|
||||||
|
#ifdef CONFIG_PREALLOC_RECV_SKB
|
||||||
|
|
||||||
|
if (skb_queue_len(&precvpriv->free_recv_skb_queue)) {
|
||||||
|
DBG_8192C(KERN_WARNING "free_recv_skb_queue not empty, %d\n", skb_queue_len(&precvpriv->free_recv_skb_queue));
|
||||||
|
}
|
||||||
|
|
||||||
|
rtw_skb_queue_purge(&precvpriv->free_recv_skb_queue);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
skb_queue_purge(&precvpriv->free_recv_skb_queue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
1348
hal/rtl8188eu_xmit.c
Normal file → Executable file
1348
hal/rtl8188eu_xmit.c
Normal file → Executable file
File diff suppressed because it is too large
Load diff
6039
hal/usb_halinit.c
Normal file → Executable file
6039
hal/usb_halinit.c
Normal file → Executable file
File diff suppressed because it is too large
Load diff
1717
hal/usb_ops_linux.c
Normal file → Executable file
1717
hal/usb_ops_linux.c
Normal file → Executable file
File diff suppressed because it is too large
Load diff
|
@ -36,7 +36,7 @@
|
||||||
#endif
|
#endif
|
||||||
#include "rtw_efuse.h"
|
#include "rtw_efuse.h"
|
||||||
|
|
||||||
#include "../hal/OUTSRC/odm_precomp.h"
|
#include "../hal/odm_precomp.h"
|
||||||
|
|
||||||
// Fw Array
|
// Fw Array
|
||||||
#define Rtl8188E_FwImageArray Rtl8188EFwImgArray
|
#define Rtl8188E_FwImageArray Rtl8188EFwImgArray
|
||||||
|
|
Loading…
Add table
Reference in a new issue