mirror of
https://github.com/abperiasamy/rtl8812AU_8821AU_linux.git
synced 2025-04-29 15:19:40 +02:00
Openwrt and new compiler related fixes (#285)
* rtw-ap: Fix compiler warning. Signed-off-by: Ben Greear <greearb@candelatech.com> * makefile: Add entry for compiling against openwrt tree. Users would need to edit it to match their path, but this should get them started. Signed-off-by: Ben Greear <greearb@candelatech.com> * makefile: Allow defining KSRC outside of build. So, you can do this: KSRC=/tmp/my/kernel make And not have to edit the makefile to have this function as desired. Signed-off-by: Ben Greear <greearb@candelatech.com> * Fix stack-too-large warning on x86-64 compile Signed-off-by: Ben Greear <greearb@candelatech.com> * compile: Allow cross-compiling on cmd-line w/out editing Makefile For instance: KSRC=/home/greearb/git/openwrt-neo2-dev/build_dir/target-aarch64_cortex-a53_musl/linux-sunxi_cortexa53/linux-4.14.78 \ EXT_EXTRA_CFLAGS=-DCONFIG_LITTLE_ENDIAN ARCH=arm64 CROSS_COMPILE=aarch64-openwrt-linux- MODDESTDIR=/tmp make V=1 Signed-off-by: Ben Greear <greearb@candelatech.com> * build: Attempt to auto-detect endian-ness. Will make building in openwrt much easier. Signed-off-by: Ben Greear <greearb@candelatech.com> * Fix build against openwrt backports tree. Like breaks builds elsewhere, can fix it up later. Signed-off-by: Ben Greear <greearb@candelatech.com> * Register wiphy after we probe MAC addr. This way the phy object has a valid MAC-addr, which can be helpful for identification. Signed-off-by: Ben Greear <greearb@candelatech.com> * Make sure MAC is set in wiphy_preinit This is needed to make sure the phy registers with a proper MAC address instead of all 00 Signed-off-by: Ben Greear <greearb@candelatech.com> * Fix build on 4.19 kernel. Signed-off-by: Ben Greear <greearb@candelatech.com> * Fix compile against 4.20 kernel. Remove some variable-length arrays (which could be security bugs, ways to overflow the stack it seems), and remove use of get_monotonic_boottime. Signed-off-by: Ben Greear <greearb@candelatech.com> * Support arm64
This commit is contained in:
parent
fb91faf610
commit
ba6fa69560
26
Makefile
26
Makefile
@ -83,6 +83,7 @@ CONFIG_PLATFORM_ARM_S3C6K4 = n
|
|||||||
CONFIG_PLATFORM_MIPS_RMI = n
|
CONFIG_PLATFORM_MIPS_RMI = n
|
||||||
CONFIG_PLATFORM_RTD2880B = n
|
CONFIG_PLATFORM_RTD2880B = n
|
||||||
CONFIG_PLATFORM_MIPS_AR9132 = n
|
CONFIG_PLATFORM_MIPS_AR9132 = n
|
||||||
|
CONFIG_PLATFORM_OPENWRT_NEO2 = n
|
||||||
CONFIG_PLATFORM_RTK_DMP = n
|
CONFIG_PLATFORM_RTK_DMP = n
|
||||||
CONFIG_PLATFORM_MIPS_PLM = n
|
CONFIG_PLATFORM_MIPS_PLM = n
|
||||||
CONFIG_PLATFORM_MSTAR389 = n
|
CONFIG_PLATFORM_MSTAR389 = n
|
||||||
@ -869,18 +870,31 @@ EXTRA_CFLAGS += -DCONFIG_TDLS
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_PLATFORM_I386_PC), y)
|
ifeq ($(CONFIG_PLATFORM_I386_PC), y)
|
||||||
|
|
||||||
|
ifdef EXT_EXTRA_CFLAGS
|
||||||
|
EXTRA_CFLAGS += $(EXT_EXTRA_CFLAGS)
|
||||||
|
else
|
||||||
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
|
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
|
||||||
#EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
|
#EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
|
||||||
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
|
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
|
||||||
#EXTRA_CFLAGS += -DCONFIG_P2P_IPS
|
#EXTRA_CFLAGS += -DCONFIG_P2P_IPS
|
||||||
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ | sed -e s/ppc64le/powerpc/)
|
endif
|
||||||
|
ifndef ARCH
|
||||||
|
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/ppc64le/powerpc/ -e s/aarch64/arm64/)
|
||||||
ARCH ?= $(SUBARCH)
|
ARCH ?= $(SUBARCH)
|
||||||
|
endif
|
||||||
|
ifndef CROSS_COMPILE
|
||||||
CROSS_COMPILE ?=
|
CROSS_COMPILE ?=
|
||||||
|
endif
|
||||||
ifndef KVER
|
ifndef KVER
|
||||||
KVER ?= $(shell uname -r)
|
KVER ?= $(shell uname -r)
|
||||||
endif
|
endif
|
||||||
|
ifndef KSRC
|
||||||
KSRC := /lib/modules/$(KVER)/build
|
KSRC := /lib/modules/$(KVER)/build
|
||||||
|
endif
|
||||||
|
ifndef MODDESTDIR
|
||||||
MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/
|
MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/
|
||||||
|
endif
|
||||||
INSTALL_PREFIX :=
|
INSTALL_PREFIX :=
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -1046,6 +1060,16 @@ CROSS_COMPILE := mips-openwrt-linux-
|
|||||||
KSRC := /home/alex/test_openwrt/tmp/linux-2.6.30.9
|
KSRC := /home/alex/test_openwrt/tmp/linux-2.6.30.9
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# This is how I built for openwrt Neo2 platform. --Ben
|
||||||
|
ifeq ($(CONFIG_PLATFORM_OPENWRT_NEO2), y)
|
||||||
|
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
|
||||||
|
ARCH := arm64
|
||||||
|
CROSS_COMPILE := aarch64-openwrt-linux-
|
||||||
|
#export PATH=$PATH:/home/greearb/git/openwrt-neo2-dev/staging_dir/toolchain-aarch64_cortex-a53_gcc-7.3.0_musl/bin/
|
||||||
|
#export STAGING_DIR=/home/greearb/git/openwrt-neo2-dev/staging_dir
|
||||||
|
KSRC := /home/greearb/git/openwrt-neo2-dev/build_dir/target-aarch64_cortex-a53_musl/linux-sunxi_cortexa53/linux-4.14.78
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_PLATFORM_DMP_PHILIPS), y)
|
ifeq ($(CONFIG_PLATFORM_DMP_PHILIPS), y)
|
||||||
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DRTK_DMP_PLATFORM
|
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DRTK_DMP_PLATFORM
|
||||||
ARCH := mips
|
ARCH := mips
|
||||||
|
@ -79,6 +79,13 @@ Load module
|
|||||||
# sudo modprobe -a rtl8812au
|
# sudo modprobe -a rtl8812au
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Cross-compiling. You can now specify variables on the command line w/out editing
|
||||||
|
# makefile. For instance, this builds against recent OpenWRT neo2 platform. Your
|
||||||
|
# Cross-compile binaries should be in your PATH.
|
||||||
|
|
||||||
|
KSRC=/home/greearb/git/openwrt-neo2-dev/build_dir/target-aarch64_cortex-a53_musl/linux-sunxi_cortexa53/linux-4.14.78 EXT_EXTRA_CFLAGS=-DCONFIG_LITTLE_ENDIAN ARCH=arm64 CROSS_COMPILE=aarch64-openwrt-linux- MODDESTDIR=/tmp make V=1
|
||||||
|
|
||||||
|
|
||||||
Setup DKMS
|
Setup DKMS
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
@ -194,7 +194,7 @@ void rtw_add_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index, u8 *d
|
|||||||
u8 bmatch = _FALSE;
|
u8 bmatch = _FALSE;
|
||||||
u8 *pie = pnetwork->IEs;
|
u8 *pie = pnetwork->IEs;
|
||||||
u8 *p=NULL, *dst_ie=NULL, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
|
u8 *p=NULL, *dst_ie=NULL, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
|
||||||
u32 i, offset, ielen, ie_offset, remainder_ielen = 0;
|
u32 i, offset, ielen = 0, ie_offset, remainder_ielen = 0;
|
||||||
|
|
||||||
for (i = sizeof(NDIS_802_11_FIXED_IEs); i < pnetwork->IELength;) {
|
for (i = sizeof(NDIS_802_11_FIXED_IEs); i < pnetwork->IELength;) {
|
||||||
pIE = (PNDIS_802_11_VARIABLE_IEs)(pnetwork->IEs + i);
|
pIE = (PNDIS_802_11_VARIABLE_IEs)(pnetwork->IEs + i);
|
||||||
|
@ -3534,7 +3534,8 @@ void issue_p2p_GO_response(_adapter *padapter, u8* raddr, u8* frame_body,uint le
|
|||||||
u8 action = P2P_PUB_ACTION_ACTION;
|
u8 action = P2P_PUB_ACTION_ACTION;
|
||||||
u32 p2poui = cpu_to_be32(P2POUI);
|
u32 p2poui = cpu_to_be32(P2POUI);
|
||||||
u8 oui_subtype = P2P_GO_NEGO_RESP;
|
u8 oui_subtype = P2P_GO_NEGO_RESP;
|
||||||
u8 wpsie[ 255 ] = { 0x00 }, p2pie[ 255 ] = { 0x00 };
|
u8 *wpsie;
|
||||||
|
u8 p2pie[ 255 ] = { 0x00 };
|
||||||
u8 p2pielen = 0;
|
u8 p2pielen = 0;
|
||||||
uint wpsielen = 0;
|
uint wpsielen = 0;
|
||||||
u16 wps_devicepassword_id = 0x0000;
|
u16 wps_devicepassword_id = 0x0000;
|
||||||
@ -3560,6 +3561,8 @@ void issue_p2p_GO_response(_adapter *padapter, u8* raddr, u8* frame_body,uint le
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wpsie = rtw_zmalloc(256);
|
||||||
|
|
||||||
DBG_871X( "[%s] In, result = %d\n", __FUNCTION__, result );
|
DBG_871X( "[%s] In, result = %d\n", __FUNCTION__, result );
|
||||||
//update attribute
|
//update attribute
|
||||||
pattrib = &pmgntframe->attrib;
|
pattrib = &pmgntframe->attrib;
|
||||||
@ -3965,6 +3968,8 @@ void issue_p2p_GO_response(_adapter *padapter, u8* raddr, u8* frame_body,uint le
|
|||||||
|
|
||||||
dump_mgntframe(padapter, pmgntframe);
|
dump_mgntframe(padapter, pmgntframe);
|
||||||
|
|
||||||
|
kfree(wpsie);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,9 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#ifndef __DRV_CONF_H__
|
#ifndef __DRV_CONF_H__
|
||||||
#define __DRV_CONF_H__
|
#define __DRV_CONF_H__
|
||||||
#include "autoconf.h"
|
|
||||||
|
#include <generated/autoconf.h>
|
||||||
|
#include "rtl_autoconf.h"
|
||||||
|
|
||||||
#if defined (PLATFORM_LINUX) && defined (PLATFORM_WINDOWS)
|
#if defined (PLATFORM_LINUX) && defined (PLATFORM_WINDOWS)
|
||||||
|
|
||||||
|
@ -25,6 +25,18 @@
|
|||||||
#error "Shall be CONFIG_LITTLE_ENDIAN or CONFIG_BIG_ENDIAN, but not both!\n"
|
#error "Shall be CONFIG_LITTLE_ENDIAN or CONFIG_BIG_ENDIAN, but not both!\n"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !((defined CONFIG_LITTLE_ENDIAN) || (defined CONFIG_BIG_ENDIAN))
|
||||||
|
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||||
|
#define CONFIG_LITTLE_ENDIAN
|
||||||
|
//#warning "Auto-detected little-endian system...hope it is correct!"
|
||||||
|
#else
|
||||||
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||||
|
//#warning "Auto-detected big-endian system...hope it is correct!"
|
||||||
|
#define CONFIG_BIG_ENDIAN
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined (CONFIG_LITTLE_ENDIAN)
|
#if defined (CONFIG_LITTLE_ENDIAN)
|
||||||
#ifndef CONFIG_PLATFORM_MSTAR389
|
#ifndef CONFIG_PLATFORM_MSTAR389
|
||||||
# include <byteorder/little_endian.h>
|
# include <byteorder/little_endian.h>
|
||||||
|
@ -977,7 +977,7 @@ typedef enum _HT_CAP_AMPDU_FACTOR {
|
|||||||
* According to IEEE802.11n spec size varies from 8K to 64K (in powers of 2)
|
* According to IEEE802.11n spec size varies from 8K to 64K (in powers of 2)
|
||||||
*/
|
*/
|
||||||
#define IEEE80211_MIN_AMPDU_BUF 0x8
|
#define IEEE80211_MIN_AMPDU_BUF 0x8
|
||||||
#define IEEE80211_MAX_AMPDU_BUF 0x40
|
//#define IEEE80211_MAX_AMPDU_BUF 0x40
|
||||||
|
|
||||||
|
|
||||||
/* Spatial Multiplexing Power Save Modes */
|
/* Spatial Multiplexing Power Save Modes */
|
||||||
|
@ -349,6 +349,9 @@ static int rtw_ieee80211_channel_to_frequency(int chan, int band)
|
|||||||
|
|
||||||
static u64 rtw_get_systime_us(void)
|
static u64 rtw_get_systime_us(void)
|
||||||
{
|
{
|
||||||
|
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,20,0))
|
||||||
|
return ktime_to_us(ktime_get_boottime());
|
||||||
|
#else
|
||||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
|
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,39))
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
get_monotonic_boottime(&ts);
|
get_monotonic_boottime(&ts);
|
||||||
@ -358,6 +361,7 @@ static u64 rtw_get_systime_us(void)
|
|||||||
do_gettimeofday(&tv);
|
do_gettimeofday(&tv);
|
||||||
return ((u64)tv.tv_sec*1000000) + tv.tv_usec;
|
return ((u64)tv.tv_sec*1000000) + tv.tv_usec;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MAX_BSSINFO_LEN 1000
|
#define MAX_BSSINFO_LEN 1000
|
||||||
@ -5837,10 +5841,6 @@ void rtw_cfg80211_init_wiphy(_adapter *padapter)
|
|||||||
|
|
||||||
/* init regulary domain */
|
/* init regulary domain */
|
||||||
rtw_regd_init(padapter);
|
rtw_regd_init(padapter);
|
||||||
|
|
||||||
/* copy mac_addr to wiphy */
|
|
||||||
_rtw_memcpy(wiphy->perm_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -5959,6 +5959,10 @@ static void rtw_cfg80211_preinit_wiphy(_adapter *padapter, struct wiphy *wiphy)
|
|||||||
//wiphy->flags |= WIPHY_FLAG_SUPPORTS_FW_ROAM;
|
//wiphy->flags |= WIPHY_FLAG_SUPPORTS_FW_ROAM;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* copy mac_addr to wiphy */
|
||||||
|
_rtw_memcpy(wiphy->perm_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
|
||||||
|
|
||||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) || defined(RTW_VENDOR_EXT_SUPPORT)
|
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) || defined(RTW_VENDOR_EXT_SUPPORT)
|
||||||
rtw_cfgvendor_attach(wiphy);
|
rtw_cfgvendor_attach(wiphy);
|
||||||
#endif
|
#endif
|
||||||
|
@ -83,6 +83,8 @@ static const char * const iw_operation_mode[] = {
|
|||||||
"Auto", "Ad-Hoc", "Managed", "Master", "Repeater", "Secondary", "Monitor"
|
"Auto", "Ad-Hoc", "Managed", "Master", "Repeater", "Secondary", "Monitor"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef CONFIG_WIRELESS_EXT
|
||||||
|
|
||||||
static int hex2num_i(char c)
|
static int hex2num_i(char c)
|
||||||
{
|
{
|
||||||
if (c >= '0' && c <= '9')
|
if (c >= '0' && c <= '9')
|
||||||
@ -132,6 +134,7 @@ static int hwaddr_aton_i(const char *txt, u8 *addr)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static inline void indicate_wx_custom_event(_adapter *padapter, char *msg)
|
static inline void indicate_wx_custom_event(_adapter *padapter, char *msg)
|
||||||
{
|
{
|
||||||
@ -304,6 +307,8 @@ uint rtw_is_cckratesonly_included(u8 *rate)
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef CONFIG_WIRELESS_EXT
|
||||||
|
|
||||||
static int search_p2p_wfd_ie(_adapter *padapter,
|
static int search_p2p_wfd_ie(_adapter *padapter,
|
||||||
struct iw_request_info* info, struct wlan_network *pnetwork,
|
struct iw_request_info* info, struct wlan_network *pnetwork,
|
||||||
char *start, char *stop)
|
char *start, char *stop)
|
||||||
@ -378,6 +383,8 @@ static int search_p2p_wfd_ie(_adapter *padapter,
|
|||||||
#endif //CONFIG_P2P
|
#endif //CONFIG_P2P
|
||||||
return _TRUE;
|
return _TRUE;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static inline char *iwe_stream_mac_addr_proess(_adapter *padapter,
|
static inline char *iwe_stream_mac_addr_proess(_adapter *padapter,
|
||||||
struct iw_request_info* info, struct wlan_network *pnetwork,
|
struct iw_request_info* info, struct wlan_network *pnetwork,
|
||||||
char *start, char *stop,struct iw_event *iwe)
|
char *start, char *stop,struct iw_event *iwe)
|
||||||
@ -826,6 +833,8 @@ static inline char * iwe_stream_net_rsv_process(_adapter *padapter,
|
|||||||
return start;
|
return start;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_WIRELESS_EXT
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
static char *translate_scan(_adapter *padapter,
|
static char *translate_scan(_adapter *padapter,
|
||||||
struct iw_request_info* info, struct wlan_network *pnetwork,
|
struct iw_request_info* info, struct wlan_network *pnetwork,
|
||||||
@ -1735,6 +1744,9 @@ exit:
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_WIRELESS_EXT
|
||||||
|
|
||||||
static int rtw_wx_get_name(struct net_device *dev,
|
static int rtw_wx_get_name(struct net_device *dev,
|
||||||
struct iw_request_info *info,
|
struct iw_request_info *info,
|
||||||
@ -10238,31 +10250,48 @@ static int rtw_mp_write_reg(struct net_device *dev,
|
|||||||
char *width_str;
|
char *width_str;
|
||||||
char width;
|
char width;
|
||||||
u32 addr, data;
|
u32 addr, data;
|
||||||
int ret;
|
int ret = 0;
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
char input[wrqu->length];
|
char* input = kmalloc(wrqu->length, GFP_KERNEL);
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->pointer, wrqu->length))
|
if (!input)
|
||||||
return -EFAULT;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (copy_from_user(input, wrqu->pointer, wrqu->length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
_rtw_memset(extra, 0, wrqu->length);
|
_rtw_memset(extra, 0, wrqu->length);
|
||||||
|
|
||||||
pch = input;
|
pch = input;
|
||||||
|
|
||||||
pnext = strpbrk(pch, " ,.-");
|
pnext = strpbrk(pch, " ,.-");
|
||||||
if (pnext == NULL) return -EINVAL;
|
if (pnext == NULL) {
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
*pnext = 0;
|
*pnext = 0;
|
||||||
width_str = pch;
|
width_str = pch;
|
||||||
|
|
||||||
pch = pnext + 1;
|
pch = pnext + 1;
|
||||||
pnext = strpbrk(pch, " ,.-");
|
pnext = strpbrk(pch, " ,.-");
|
||||||
if (pnext == NULL) return -EINVAL;
|
if (pnext == NULL) {
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
*pnext = 0;
|
*pnext = 0;
|
||||||
addr = simple_strtoul(pch, &ptmp, 16);
|
addr = simple_strtoul(pch, &ptmp, 16);
|
||||||
if (addr > 0x3FFF) return -EINVAL;
|
if (addr > 0x3FFF) {
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
pch = pnext + 1;
|
pch = pnext + 1;
|
||||||
if ((pch - extra) >= wrqu->length) return -EINVAL;
|
if ((pch - extra) >= wrqu->length) {
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
data = simple_strtoul(pch, &ptmp, 16);
|
data = simple_strtoul(pch, &ptmp, 16);
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
@ -10293,6 +10322,8 @@ static int rtw_mp_write_reg(struct net_device *dev,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out:
|
||||||
|
kfree(input);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10311,7 +10342,7 @@ static int rtw_mp_read_reg(struct net_device *dev,
|
|||||||
struct iw_request_info *info,
|
struct iw_request_info *info,
|
||||||
struct iw_point *wrqu, char *extra)
|
struct iw_point *wrqu, char *extra)
|
||||||
{
|
{
|
||||||
char input[wrqu->length];
|
char input[128];
|
||||||
char *pch, *pnext, *ptmp;
|
char *pch, *pnext, *ptmp;
|
||||||
char *width_str;
|
char *width_str;
|
||||||
char width;
|
char width;
|
||||||
@ -10446,20 +10477,28 @@ static int rtw_mp_write_rf(struct net_device *dev,
|
|||||||
union iwreq_data *wrqu, char *extra)
|
union iwreq_data *wrqu, char *extra)
|
||||||
*/
|
*/
|
||||||
u32 path, addr, data;
|
u32 path, addr, data;
|
||||||
int ret;
|
int ret = 0;
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
char input[wrqu->length];
|
char* input = kmalloc(wrqu->length, GFP_KERNEL);
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->pointer, wrqu->length))
|
if (copy_from_user(input, wrqu->pointer, wrqu->length)) {
|
||||||
return -EFAULT;
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ret = sscanf(input, "%d,%x,%x", &path, &addr, &data);
|
ret = sscanf(input, "%d,%x,%x", &path, &addr, &data);
|
||||||
if (ret < 3) return -EINVAL;
|
if (ret < 3) {
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (path >= GET_HAL_RFPATH_NUM(padapter)) return -EINVAL;
|
if ((path >= GET_HAL_RFPATH_NUM(padapter)) ||
|
||||||
if (addr > 0xFF) return -EINVAL;
|
(addr > 0xFF) ||
|
||||||
if (data > 0xFFFFF) return -EINVAL;
|
(data > 0xFFFFF)) {
|
||||||
|
ret = -EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
_rtw_memset(extra, 0, wrqu->length);
|
_rtw_memset(extra, 0, wrqu->length);
|
||||||
|
|
||||||
@ -10468,7 +10507,9 @@ static int rtw_mp_write_rf(struct net_device *dev,
|
|||||||
sprintf(extra, "write_rf completed \n");
|
sprintf(extra, "write_rf completed \n");
|
||||||
wrqu->length = strlen(extra);
|
wrqu->length = strlen(extra);
|
||||||
|
|
||||||
return 0;
|
out:
|
||||||
|
kfree(input);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -10483,7 +10524,7 @@ static int rtw_mp_read_rf(struct net_device *dev,
|
|||||||
struct iw_request_info *info,
|
struct iw_request_info *info,
|
||||||
struct iw_point *wrqu, char *extra)
|
struct iw_point *wrqu, char *extra)
|
||||||
{
|
{
|
||||||
char input[wrqu->length];
|
char input[128];
|
||||||
char *pch, *pnext, *ptmp;
|
char *pch, *pnext, *ptmp;
|
||||||
char data[20],tmp[20];
|
char data[20],tmp[20];
|
||||||
//u32 *data = (u32*)extra;
|
//u32 *data = (u32*)extra;
|
||||||
@ -10624,11 +10665,17 @@ static int rtw_mp_rate(struct net_device *dev,
|
|||||||
struct iw_point *wrqu, char *extra)
|
struct iw_point *wrqu, char *extra)
|
||||||
{
|
{
|
||||||
u32 rate = MPT_RATE_1M;
|
u32 rate = MPT_RATE_1M;
|
||||||
u8 input[wrqu->length];
|
u8* input = kmalloc(wrqu->length, GFP_KERNEL);
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->pointer, wrqu->length))
|
if (!input)
|
||||||
return -EFAULT;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (copy_from_user(input, wrqu->pointer, wrqu->length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
rate = rtw_mpRateParseFunc(padapter,input);
|
rate = rtw_mpRateParseFunc(padapter,input);
|
||||||
|
|
||||||
@ -10650,14 +10697,19 @@ static int rtw_mp_rate(struct net_device *dev,
|
|||||||
sprintf( extra, "Set data rate to %s index %d" ,input,rate );
|
sprintf( extra, "Set data rate to %s index %d" ,input,rate );
|
||||||
DBG_871X("%s: %s rate index=%d \n", __func__,input,rate);
|
DBG_871X("%s: %s rate index=%d \n", __func__,input,rate);
|
||||||
|
|
||||||
if (rate >= MPT_RATE_LAST )
|
if (rate >= MPT_RATE_LAST ) {
|
||||||
return -EINVAL;
|
ret = -EINVAL;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
padapter->mppriv.rateidx = rate;
|
padapter->mppriv.rateidx = rate;
|
||||||
Hal_SetDataRate(padapter);
|
Hal_SetDataRate(padapter);
|
||||||
|
|
||||||
wrqu->length = strlen(extra);
|
wrqu->length = strlen(extra);
|
||||||
return 0;
|
|
||||||
|
out:
|
||||||
|
kfree(input);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtw_mp_channel(struct net_device *dev,
|
static int rtw_mp_channel(struct net_device *dev,
|
||||||
@ -10667,12 +10719,18 @@ static int rtw_mp_channel(struct net_device *dev,
|
|||||||
|
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
||||||
u8 input[wrqu->length];
|
u8* input = kmalloc(wrqu->length, GFP_KERNEL);
|
||||||
u32 channel = 1;
|
u32 channel = 1;
|
||||||
|
int ret = 0;
|
||||||
//int cur_ch_offset;
|
//int cur_ch_offset;
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->pointer, wrqu->length))
|
if (!input)
|
||||||
return -EFAULT;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (copy_from_user(input, wrqu->pointer, wrqu->length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
channel = rtw_atoi(input);
|
channel = rtw_atoi(input);
|
||||||
//DBG_871X("%s: channel=%d\n", __func__, channel);
|
//DBG_871X("%s: channel=%d\n", __func__, channel);
|
||||||
@ -10683,7 +10741,9 @@ static int rtw_mp_channel(struct net_device *dev,
|
|||||||
pHalData->CurrentChannel = channel;
|
pHalData->CurrentChannel = channel;
|
||||||
|
|
||||||
wrqu->length = strlen(extra);
|
wrqu->length = strlen(extra);
|
||||||
return 0;
|
out:
|
||||||
|
kfree(input);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtw_mp_bandwidth(struct net_device *dev,
|
static int rtw_mp_bandwidth(struct net_device *dev,
|
||||||
@ -10725,7 +10785,7 @@ static int rtw_mp_txpower_index(struct net_device *dev,
|
|||||||
struct iw_point *wrqu, char *extra)
|
struct iw_point *wrqu, char *extra)
|
||||||
{
|
{
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
char input[wrqu->length];
|
char input[128];
|
||||||
u32 rfpath;
|
u32 rfpath;
|
||||||
u32 txpower_inx;
|
u32 txpower_inx;
|
||||||
|
|
||||||
@ -10750,12 +10810,17 @@ static int rtw_mp_txpower(struct net_device *dev,
|
|||||||
{
|
{
|
||||||
u32 idx_a = 0, idx_b = 0;
|
u32 idx_a = 0, idx_b = 0;
|
||||||
int MsetPower = 1;
|
int MsetPower = 1;
|
||||||
u8 input[wrqu->length];
|
u8* input = kmalloc(wrqu->length, GFP_KERNEL);
|
||||||
|
int ret = 0;
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->pointer, wrqu->length))
|
if (!input)
|
||||||
return -EFAULT;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (copy_from_user(input, wrqu->pointer, wrqu->length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
MsetPower = strncmp(input, "off", 3);
|
MsetPower = strncmp(input, "off", 3);
|
||||||
sscanf(input,"patha=%d,pathb=%d",&idx_a,&idx_b);
|
sscanf(input,"patha=%d,pathb=%d",&idx_a,&idx_b);
|
||||||
@ -10771,6 +10836,9 @@ static int rtw_mp_txpower(struct net_device *dev,
|
|||||||
Hal_SetAntennaPathPower(padapter);
|
Hal_SetAntennaPathPower(padapter);
|
||||||
}
|
}
|
||||||
wrqu->length = strlen(extra);
|
wrqu->length = strlen(extra);
|
||||||
|
|
||||||
|
out:
|
||||||
|
kfree(input);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10779,12 +10847,18 @@ static int rtw_mp_ant_tx(struct net_device *dev,
|
|||||||
struct iw_point *wrqu, char *extra)
|
struct iw_point *wrqu, char *extra)
|
||||||
{
|
{
|
||||||
u8 i;
|
u8 i;
|
||||||
u8 input[wrqu->length];
|
u8 *input = kmalloc(wrqu->length, GFP_KERNEL);
|
||||||
u16 antenna = 0;
|
u16 antenna = 0;
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->pointer, wrqu->length))
|
if (!input)
|
||||||
return -EFAULT;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (copy_from_user(input, wrqu->pointer, wrqu->length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
//DBG_871X("%s: input=%s\n", __func__, input);
|
//DBG_871X("%s: input=%s\n", __func__, input);
|
||||||
|
|
||||||
@ -10809,7 +10883,9 @@ static int rtw_mp_ant_tx(struct net_device *dev,
|
|||||||
Hal_SetAntenna(padapter);
|
Hal_SetAntenna(padapter);
|
||||||
|
|
||||||
wrqu->length = strlen(extra);
|
wrqu->length = strlen(extra);
|
||||||
return 0;
|
out:
|
||||||
|
kfree(input);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtw_mp_ant_rx(struct net_device *dev,
|
static int rtw_mp_ant_rx(struct net_device *dev,
|
||||||
@ -10818,11 +10894,18 @@ static int rtw_mp_ant_rx(struct net_device *dev,
|
|||||||
{
|
{
|
||||||
u8 i;
|
u8 i;
|
||||||
u16 antenna = 0;
|
u16 antenna = 0;
|
||||||
u8 input[wrqu->length];
|
u8 *input = kmalloc(wrqu->length, GFP_KERNEL);
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
if (!input)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (copy_from_user(input, wrqu->pointer, wrqu->length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->pointer, wrqu->length))
|
|
||||||
return -EFAULT;
|
|
||||||
//DBG_871X("%s: input=%s\n", __func__, input);
|
//DBG_871X("%s: input=%s\n", __func__, input);
|
||||||
_rtw_memset(extra, 0, wrqu->length);
|
_rtw_memset(extra, 0, wrqu->length);
|
||||||
|
|
||||||
@ -10849,7 +10932,9 @@ static int rtw_mp_ant_rx(struct net_device *dev,
|
|||||||
Hal_SetAntenna(padapter);
|
Hal_SetAntenna(padapter);
|
||||||
wrqu->length = strlen(extra);
|
wrqu->length = strlen(extra);
|
||||||
|
|
||||||
return 0;
|
out:
|
||||||
|
kfree(input);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtw_set_ctx_destAddr(struct net_device *dev,
|
static int rtw_set_ctx_destAddr(struct net_device *dev,
|
||||||
@ -11063,11 +11148,17 @@ static int rtw_mp_disable_bt_coexist(struct net_device *dev,
|
|||||||
//struct hal_ops *pHalFunc = &padapter->HalFunc;
|
//struct hal_ops *pHalFunc = &padapter->HalFunc;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
u8 input[wrqu->data.length];
|
u8 *input = kmalloc(wrqu->data.length, GFP_KERNEL);
|
||||||
u32 bt_coexist;
|
u32 bt_coexist;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->data.pointer, wrqu->data.length))
|
if (!input)
|
||||||
return -EFAULT;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (copy_from_user(input, wrqu->data.pointer, wrqu->data.length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
bt_coexist = rtw_atoi(input);
|
bt_coexist = rtw_atoi(input);
|
||||||
|
|
||||||
@ -11092,7 +11183,9 @@ static int rtw_mp_disable_bt_coexist(struct net_device *dev,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
out:
|
||||||
|
kfree(input);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -11102,15 +11195,21 @@ static int rtw_mp_arx(struct net_device *dev,
|
|||||||
{
|
{
|
||||||
int bStartRx = 0, bStopRx = 0, bQueryPhy = 0, bQueryMac = 0, bSetBssid = 0;
|
int bStartRx = 0, bStopRx = 0, bQueryPhy = 0, bQueryMac = 0, bSetBssid = 0;
|
||||||
int bmac_filter = 0, bmon = 0;
|
int bmac_filter = 0, bmon = 0;
|
||||||
u8 input[wrqu->length];
|
u8 *input = kmalloc(wrqu->length, GFP_KERNEL);
|
||||||
char *pch, *token, *tmp[2]= {0x00,0x00};
|
char *pch, *token, *tmp[2]= {0x00,0x00};
|
||||||
u32 i = 0, jj = 0, kk = 0, cnts = 0;
|
u32 i = 0, jj = 0, kk = 0, cnts = 0;
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
struct mp_priv *pmppriv = &padapter->mppriv;
|
struct mp_priv *pmppriv = &padapter->mppriv;
|
||||||
struct dbg_rx_counter rx_counter;
|
struct dbg_rx_counter rx_counter;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->pointer, wrqu->length))
|
if (!input)
|
||||||
return -EFAULT;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (copy_from_user(input, wrqu->pointer, wrqu->length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
DBG_871X("%s: %s\n", __func__, input);
|
DBG_871X("%s: %s\n", __func__, input);
|
||||||
|
|
||||||
@ -11131,10 +11230,14 @@ static int rtw_mp_arx(struct net_device *dev,
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if ((tmp[0]==NULL) && (tmp[1]==NULL)) {
|
if ((tmp[0]==NULL) && (tmp[1]==NULL)) {
|
||||||
return -EFAULT;
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
} else {
|
} else {
|
||||||
cnts = strlen(tmp[1])/2;
|
cnts = strlen(tmp[1])/2;
|
||||||
if (cnts<1) return -EFAULT;
|
if (cnts<1) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
DBG_871X("%s: cnts=%d\n", __FUNCTION__, cnts);
|
DBG_871X("%s: cnts=%d\n", __FUNCTION__, cnts);
|
||||||
DBG_871X("%s: data=%s\n", __FUNCTION__, tmp[1]);
|
DBG_871X("%s: data=%s\n", __FUNCTION__, tmp[1]);
|
||||||
for (jj=0, kk=0; jj < cnts ; jj++, kk+=2) {
|
for (jj=0, kk=0; jj < cnts ; jj++, kk+=2) {
|
||||||
@ -11154,10 +11257,14 @@ static int rtw_mp_arx(struct net_device *dev,
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
if ((tmp[0]==NULL) && (tmp[1]==NULL)) {
|
if ((tmp[0]==NULL) && (tmp[1]==NULL)) {
|
||||||
return -EFAULT;
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
} else {
|
} else {
|
||||||
cnts = strlen(tmp[1])/2;
|
cnts = strlen(tmp[1])/2;
|
||||||
if (cnts<1) return -EFAULT;
|
if (cnts<1) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
DBG_871X("%s: cnts=%d\n", __FUNCTION__, cnts);
|
DBG_871X("%s: cnts=%d\n", __FUNCTION__, cnts);
|
||||||
DBG_871X("%s: data=%s\n", __FUNCTION__, tmp[1]);
|
DBG_871X("%s: data=%s\n", __FUNCTION__, tmp[1]);
|
||||||
for (jj=0, kk=0; jj < cnts ; jj++, kk+=2) {
|
for (jj=0, kk=0; jj < cnts ; jj++, kk+=2) {
|
||||||
@ -11205,7 +11312,9 @@ static int rtw_mp_arx(struct net_device *dev,
|
|||||||
|
|
||||||
wrqu->length = strlen(extra) + 1;
|
wrqu->length = strlen(extra) + 1;
|
||||||
|
|
||||||
return 0;
|
out:
|
||||||
|
kfree(input);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtw_mp_trx_query(struct net_device *dev,
|
static int rtw_mp_trx_query(struct net_device *dev,
|
||||||
@ -11240,11 +11349,16 @@ static int rtw_mp_pwrtrk(struct net_device *dev,
|
|||||||
u32 thermal;
|
u32 thermal;
|
||||||
s32 ret;
|
s32 ret;
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
||||||
u8 input[wrqu->length];
|
u8 *input = kmalloc(wrqu->length, GFP_KERNEL);
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->pointer, wrqu->length))
|
if (!input)
|
||||||
return -EFAULT;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (copy_from_user(input, wrqu->pointer, wrqu->length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
_rtw_memset(extra, 0, wrqu->length);
|
_rtw_memset(extra, 0, wrqu->length);
|
||||||
|
|
||||||
@ -11265,11 +11379,17 @@ static int rtw_mp_pwrtrk(struct net_device *dev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret = Hal_SetPowerTracking(padapter, enable);
|
ret = Hal_SetPowerTracking(padapter, enable);
|
||||||
if (ret == _FAIL) return -EPERM;
|
if (ret == _FAIL) {
|
||||||
|
ret = -EPERM;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
wrqu->length = strlen(extra);
|
wrqu->length = strlen(extra);
|
||||||
|
ret = 0;
|
||||||
|
|
||||||
return 0;
|
out:
|
||||||
|
kfree(input);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtw_mp_psd(struct net_device *dev,
|
static int rtw_mp_psd(struct net_device *dev,
|
||||||
@ -11277,16 +11397,24 @@ static int rtw_mp_psd(struct net_device *dev,
|
|||||||
struct iw_point *wrqu, char *extra)
|
struct iw_point *wrqu, char *extra)
|
||||||
{
|
{
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
u8 input[wrqu->length];
|
u8 *input = kmalloc(wrqu->length, GFP_KERNEL);
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->pointer, wrqu->length))
|
if (!input)
|
||||||
return -EFAULT;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (copy_from_user(input, wrqu->pointer, wrqu->length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
strcpy(extra,input);
|
strcpy(extra,input);
|
||||||
|
|
||||||
wrqu->length = mp_query_psd(padapter, extra);
|
wrqu->length = mp_query_psd(padapter, extra);
|
||||||
|
|
||||||
return 0;
|
out:
|
||||||
|
kfree(input);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtw_mp_thermal(struct net_device *dev,
|
static int rtw_mp_thermal(struct net_device *dev,
|
||||||
@ -11380,22 +11508,31 @@ static int rtw_mp_dump(struct net_device *dev,
|
|||||||
struct mp_priv *pmp_priv;
|
struct mp_priv *pmp_priv;
|
||||||
//struct pkt_attrib *pattrib;
|
//struct pkt_attrib *pattrib;
|
||||||
//u32 value;
|
//u32 value;
|
||||||
u8 input[wrqu->length];
|
u8 *input = kmalloc(wrqu->length, GFP_KERNEL);
|
||||||
//u8 rf_type,path_nums = 0;
|
//u8 rf_type,path_nums = 0;
|
||||||
//u32 i,j=1,path;
|
//u32 i,j=1,path;
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
if (!input)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
pmp_priv = &padapter->mppriv;
|
pmp_priv = &padapter->mppriv;
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->pointer, wrqu->length))
|
if (copy_from_user(input, wrqu->pointer, wrqu->length)) {
|
||||||
return -EFAULT;
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if ( strncmp(input, "all", 4)==0 ) {
|
if ( strncmp(input, "all", 4)==0 ) {
|
||||||
mac_reg_dump(RTW_DBGDUMP, padapter);
|
mac_reg_dump(RTW_DBGDUMP, padapter);
|
||||||
bb_reg_dump(RTW_DBGDUMP, padapter);
|
bb_reg_dump(RTW_DBGDUMP, padapter);
|
||||||
rf_reg_dump(RTW_DBGDUMP, padapter);
|
rf_reg_dump(RTW_DBGDUMP, padapter);
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
out:
|
||||||
|
kfree(input);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtw_mp_phypara(struct net_device *dev,
|
static int rtw_mp_phypara(struct net_device *dev,
|
||||||
@ -11405,11 +11542,17 @@ static int rtw_mp_phypara(struct net_device *dev,
|
|||||||
|
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
|
||||||
char input[wrqu->length];
|
char *input = kmalloc(wrqu->length, GFP_KERNEL);
|
||||||
u32 valxcap;
|
u32 valxcap;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->pointer, wrqu->length))
|
if (!input)
|
||||||
return -EFAULT;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (copy_from_user(input, wrqu->pointer, wrqu->length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
DBG_871X("%s:iwpriv in=%s\n", __func__, input);
|
DBG_871X("%s:iwpriv in=%s\n", __func__, input);
|
||||||
|
|
||||||
@ -11421,7 +11564,9 @@ static int rtw_mp_phypara(struct net_device *dev,
|
|||||||
sprintf( extra, "Set xcap=%d",valxcap );
|
sprintf( extra, "Set xcap=%d",valxcap );
|
||||||
wrqu->length = strlen(extra) + 1;
|
wrqu->length = strlen(extra) + 1;
|
||||||
|
|
||||||
return 0;
|
out:
|
||||||
|
kfree(input);
|
||||||
|
return ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -11430,11 +11575,17 @@ static int rtw_mp_SetRFPath(struct net_device *dev,
|
|||||||
union iwreq_data *wrqu, char *extra)
|
union iwreq_data *wrqu, char *extra)
|
||||||
{
|
{
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
char input[wrqu->data.length];
|
char* input = kmalloc(wrqu->data.length, GFP_KERNEL);
|
||||||
int bMain = 1, bTurnoff = 1;
|
int bMain = 1, bTurnoff = 1;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->data.pointer, wrqu->data.length))
|
if (!input)
|
||||||
return -EFAULT;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (copy_from_user(input, wrqu->data.pointer, wrqu->data.length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
DBG_871X("%s:iwpriv in=%s\n", __func__, input);
|
DBG_871X("%s:iwpriv in=%s\n", __func__, input);
|
||||||
|
|
||||||
bMain = strncmp(input, "1", 2); // strncmp TRUE is 0
|
bMain = strncmp(input, "1", 2); // strncmp TRUE is 0
|
||||||
@ -11448,7 +11599,9 @@ static int rtw_mp_SetRFPath(struct net_device *dev,
|
|||||||
DBG_871X("%s:PHY_SetRFPathSwitch=FALSE\n", __func__);
|
DBG_871X("%s:PHY_SetRFPathSwitch=FALSE\n", __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
out:
|
||||||
|
kfree(input);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtw_mp_QueryDrv(struct net_device *dev,
|
static int rtw_mp_QueryDrv(struct net_device *dev,
|
||||||
@ -11456,13 +11609,19 @@ static int rtw_mp_QueryDrv(struct net_device *dev,
|
|||||||
union iwreq_data *wrqu, char *extra)
|
union iwreq_data *wrqu, char *extra)
|
||||||
{
|
{
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
char input[wrqu->data.length];
|
char* input = kmalloc(wrqu->data.length, GFP_KERNEL);
|
||||||
int qAutoLoad = 1;
|
int qAutoLoad = 1;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
|
EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->data.pointer, wrqu->data.length))
|
if (!input)
|
||||||
return -EFAULT;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (copy_from_user(input, wrqu->data.pointer, wrqu->data.length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
DBG_871X("%s:iwpriv in=%s\n", __func__, input);
|
DBG_871X("%s:iwpriv in=%s\n", __func__, input);
|
||||||
|
|
||||||
qAutoLoad = strncmp(input, "autoload", 8); // strncmp TRUE is 0
|
qAutoLoad = strncmp(input, "autoload", 8); // strncmp TRUE is 0
|
||||||
@ -11476,7 +11635,10 @@ static int rtw_mp_QueryDrv(struct net_device *dev,
|
|||||||
sprintf(extra, "ok");
|
sprintf(extra, "ok");
|
||||||
}
|
}
|
||||||
wrqu->data.length = strlen(extra) + 1;
|
wrqu->data.length = strlen(extra) + 1;
|
||||||
return 0;
|
|
||||||
|
out:
|
||||||
|
kfree(input);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* update Tx AGC offset */
|
/* update Tx AGC offset */
|
||||||
@ -11496,11 +11658,17 @@ static int rtw_mp_PwrCtlDM(struct net_device *dev,
|
|||||||
struct iw_point *wrqu, char *extra)
|
struct iw_point *wrqu, char *extra)
|
||||||
{
|
{
|
||||||
PADAPTER padapter = rtw_netdev_priv(dev);
|
PADAPTER padapter = rtw_netdev_priv(dev);
|
||||||
u8 input[wrqu->length];
|
u8 *input = kmalloc(wrqu->length, GFP_KERNEL);
|
||||||
int bstart=1;
|
int bstart=1;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
if (copy_from_user(input, wrqu->pointer, wrqu->length))
|
if (!input)
|
||||||
return -EFAULT;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (copy_from_user(input, wrqu->pointer, wrqu->length)) {
|
||||||
|
ret = -EFAULT;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
bstart = strncmp(input, "start", 5); // strncmp TRUE is 0
|
bstart = strncmp(input, "start", 5); // strncmp TRUE is 0
|
||||||
if(bstart==0) {
|
if(bstart==0) {
|
||||||
@ -11512,7 +11680,9 @@ static int rtw_mp_PwrCtlDM(struct net_device *dev,
|
|||||||
}
|
}
|
||||||
wrqu->length = strlen(extra);
|
wrqu->length = strlen(extra);
|
||||||
|
|
||||||
return 0;
|
out:
|
||||||
|
kfree(input);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rtw_mp_getver(struct net_device *dev,
|
static int rtw_mp_getver(struct net_device *dev,
|
||||||
@ -13828,6 +13998,7 @@ static int rtw_test(
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_WIRELESS_EXT
|
||||||
static iw_handler rtw_handlers[] = {
|
static iw_handler rtw_handlers[] = {
|
||||||
NULL, /* SIOCSIWCOMMIT */
|
NULL, /* SIOCSIWCOMMIT */
|
||||||
rtw_wx_get_name, /* SIOCGIWNAME */
|
rtw_wx_get_name, /* SIOCGIWNAME */
|
||||||
@ -14113,8 +14284,9 @@ static iw_handler rtw_private_handler[] = {
|
|||||||
rtw_widi_set_probe_request, //0x1F
|
rtw_widi_set_probe_request, //0x1F
|
||||||
#endif // CONFIG_INTEL_WIDI
|
#endif // CONFIG_INTEL_WIDI
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_WIRELESS_EXT
|
||||||
#if WIRELESS_EXT >= 17
|
#if WIRELESS_EXT >= 17
|
||||||
static struct iw_statistics *rtw_get_wireless_stats(struct net_device *dev)
|
static struct iw_statistics *rtw_get_wireless_stats(struct net_device *dev)
|
||||||
{
|
{
|
||||||
@ -14174,6 +14346,7 @@ static struct iw_statistics *rtw_get_wireless_stats(struct net_device *dev)
|
|||||||
return &padapter->iwstats;
|
return &padapter->iwstats;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_WIRELESS_EXT
|
#ifdef CONFIG_WIRELESS_EXT
|
||||||
struct iw_handler_def rtw_handlers_def = {
|
struct iw_handler_def rtw_handlers_def = {
|
||||||
@ -14189,7 +14362,6 @@ struct iw_handler_def rtw_handlers_def = {
|
|||||||
.get_wireless_stats = rtw_get_wireless_stats,
|
.get_wireless_stats = rtw_get_wireless_stats,
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
// copy from net/wireless/wext.c start
|
// copy from net/wireless/wext.c start
|
||||||
/* ---------------------------------------------------------------- */
|
/* ---------------------------------------------------------------- */
|
||||||
@ -14534,6 +14706,7 @@ exit:
|
|||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_COMPAT
|
#ifdef CONFIG_COMPAT
|
||||||
static int rtw_ioctl_compat_wext_private(struct net_device *dev, struct ifreq *rq)
|
static int rtw_ioctl_compat_wext_private(struct net_device *dev, struct ifreq *rq)
|
||||||
@ -14561,6 +14734,7 @@ static int rtw_ioctl_compat_wext_private(struct net_device *dev, struct ifreq *r
|
|||||||
}
|
}
|
||||||
#endif // CONFIG_COMPAT
|
#endif // CONFIG_COMPAT
|
||||||
|
|
||||||
|
#ifdef CONFIG_WIRELESS_EXT
|
||||||
static inline int rtw_ioctl_standard_wext_private(struct net_device *dev, struct ifreq *rq)
|
static inline int rtw_ioctl_standard_wext_private(struct net_device *dev, struct ifreq *rq)
|
||||||
{
|
{
|
||||||
struct iw_point *iwp;
|
struct iw_point *iwp;
|
||||||
@ -14623,3 +14797,5 @@ int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
@ -688,7 +688,11 @@ unsigned int rtw_classify8021d(struct sk_buff *skb)
|
|||||||
|
|
||||||
static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb
|
static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb
|
||||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
|
||||||
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)
|
||||||
|
, struct net_device *sb_dev
|
||||||
|
#else
|
||||||
, void *accel_priv
|
, void *accel_priv
|
||||||
|
#endif
|
||||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)
|
||||||
, select_queue_fallback_t fallback
|
, select_queue_fallback_t fallback
|
||||||
#endif
|
#endif
|
||||||
@ -745,12 +749,14 @@ static int rtw_ndev_notifier_call(struct notifier_block * nb, unsigned long stat
|
|||||||
struct net_device *dev = ptr;
|
struct net_device *dev = ptr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_WIRELESS_EXT
|
||||||
#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
|
#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
|
||||||
if (dev->netdev_ops->ndo_do_ioctl != rtw_ioctl)
|
if (dev->netdev_ops->ndo_do_ioctl != rtw_ioctl)
|
||||||
#else
|
#else
|
||||||
if (dev->do_ioctl != rtw_ioctl)
|
if (dev->do_ioctl != rtw_ioctl)
|
||||||
#endif
|
#endif
|
||||||
return NOTIFY_DONE;
|
return NOTIFY_DONE;
|
||||||
|
#endif
|
||||||
|
|
||||||
DBG_871X_LEVEL(_drv_info_, FUNC_NDEV_FMT" state:%lu\n", FUNC_NDEV_ARG(dev), state);
|
DBG_871X_LEVEL(_drv_info_, FUNC_NDEV_FMT" state:%lu\n", FUNC_NDEV_ARG(dev), state);
|
||||||
|
|
||||||
@ -810,7 +816,9 @@ static const struct net_device_ops rtw_netdev_ops = {
|
|||||||
#endif
|
#endif
|
||||||
.ndo_set_mac_address = rtw_net_set_mac_address,
|
.ndo_set_mac_address = rtw_net_set_mac_address,
|
||||||
.ndo_get_stats = rtw_net_get_stats,
|
.ndo_get_stats = rtw_net_get_stats,
|
||||||
|
#ifdef CONFIG_WIRELESS_EXT
|
||||||
.ndo_do_ioctl = rtw_ioctl,
|
.ndo_do_ioctl = rtw_ioctl,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -896,8 +904,10 @@ struct net_device *rtw_init_netdev(_adapter *old_padapter)
|
|||||||
pnetdev->hard_start_xmit = rtw_xmit_entry;
|
pnetdev->hard_start_xmit = rtw_xmit_entry;
|
||||||
pnetdev->set_mac_address = rtw_net_set_mac_address;
|
pnetdev->set_mac_address = rtw_net_set_mac_address;
|
||||||
pnetdev->get_stats = rtw_net_get_stats;
|
pnetdev->get_stats = rtw_net_get_stats;
|
||||||
|
#ifdef CONFIG_WIRELESS_EXT
|
||||||
pnetdev->do_ioctl = rtw_ioctl;
|
pnetdev->do_ioctl = rtw_ioctl;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
|
#ifdef CONFIG_TCP_CSUM_OFFLOAD_TX
|
||||||
@ -1598,7 +1608,9 @@ static const struct net_device_ops rtw_netdev_vir_if_ops = {
|
|||||||
.ndo_start_xmit = rtw_xmit_entry,
|
.ndo_start_xmit = rtw_xmit_entry,
|
||||||
.ndo_set_mac_address = rtw_net_set_mac_address,
|
.ndo_set_mac_address = rtw_net_set_mac_address,
|
||||||
.ndo_get_stats = rtw_net_get_stats,
|
.ndo_get_stats = rtw_net_get_stats,
|
||||||
|
#ifdef CONFIG_WIRELESS_EXT
|
||||||
.ndo_do_ioctl = rtw_ioctl,
|
.ndo_do_ioctl = rtw_ioctl,
|
||||||
|
#endif
|
||||||
#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
|
#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
|
||||||
.ndo_select_queue = rtw_select_queue,
|
.ndo_select_queue = rtw_select_queue,
|
||||||
#endif
|
#endif
|
||||||
@ -1989,7 +2001,9 @@ static const struct net_device_ops rtw_netdev_if2_ops = {
|
|||||||
.ndo_start_xmit = rtw_xmit_entry,
|
.ndo_start_xmit = rtw_xmit_entry,
|
||||||
.ndo_set_mac_address = rtw_net_set_mac_address,
|
.ndo_set_mac_address = rtw_net_set_mac_address,
|
||||||
.ndo_get_stats = rtw_net_get_stats,
|
.ndo_get_stats = rtw_net_get_stats,
|
||||||
|
#ifdef CONFIG_WIRELESS_EXT
|
||||||
.ndo_do_ioctl = rtw_ioctl,
|
.ndo_do_ioctl = rtw_ioctl,
|
||||||
|
#endif
|
||||||
#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
|
#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35))
|
||||||
.ndo_select_queue = rtw_select_queue,
|
.ndo_select_queue = rtw_select_queue,
|
||||||
#endif
|
#endif
|
||||||
|
@ -1314,17 +1314,9 @@ _adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
|
|||||||
if (rtw_handle_dualmac(padapter, 1) != _SUCCESS)
|
if (rtw_handle_dualmac(padapter, 1) != _SUCCESS)
|
||||||
goto free_adapter;
|
goto free_adapter;
|
||||||
|
|
||||||
if((pnetdev = rtw_init_netdev(padapter)) == NULL) {
|
/* Code used to call rtw_init_netdev here, but MAC has not been probed
|
||||||
goto handle_dualmac;
|
* yet, so moving it lower. --Ben
|
||||||
}
|
*/
|
||||||
SET_NETDEV_DEV(pnetdev, dvobj_to_dev(dvobj));
|
|
||||||
padapter = rtw_netdev_priv(pnetdev);
|
|
||||||
|
|
||||||
#ifdef CONFIG_IOCTL_CFG80211
|
|
||||||
if(rtw_wdev_alloc(padapter, dvobj_to_dev(dvobj)) != 0) {
|
|
||||||
goto handle_dualmac;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//step 2. hook HalFunc, allocate HalData
|
//step 2. hook HalFunc, allocate HalData
|
||||||
//hal_set_hal_ops(padapter);
|
//hal_set_hal_ops(padapter);
|
||||||
@ -1349,6 +1341,19 @@ _adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
|
|||||||
//step read efuse/eeprom data and get mac_addr
|
//step read efuse/eeprom data and get mac_addr
|
||||||
rtw_hal_read_chip_info(padapter);
|
rtw_hal_read_chip_info(padapter);
|
||||||
|
|
||||||
|
/* Now that we have MAC, init the wiphy and such. --Ben */
|
||||||
|
if((pnetdev = rtw_init_netdev(padapter)) == NULL) {
|
||||||
|
goto handle_dualmac;
|
||||||
|
}
|
||||||
|
SET_NETDEV_DEV(pnetdev, dvobj_to_dev(dvobj));
|
||||||
|
padapter = rtw_netdev_priv(pnetdev);
|
||||||
|
|
||||||
|
#ifdef CONFIG_IOCTL_CFG80211
|
||||||
|
if(rtw_wdev_alloc(padapter, dvobj_to_dev(dvobj)) != 0) {
|
||||||
|
goto handle_dualmac;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//step 5.
|
//step 5.
|
||||||
if(rtw_init_drv_sw(padapter) ==_FAIL) {
|
if(rtw_init_drv_sw(padapter) ==_FAIL) {
|
||||||
RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize driver software resource Failed!\n"));
|
RT_TRACE(_module_hci_intfs_c_,_drv_err_,("Initialize driver software resource Failed!\n"));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user