Compare commits

...

12 Commits

Author SHA1 Message Date
Fomalhaut Weisszwerg d349d9fbd8 Fix: a warning "‘EVM’ may be used uninitialized". 2018-03-05 08:28:08 +01:00
Fomalhaut Weisszwerg dafd3496a8 Update readme. 2018-03-05 08:25:18 +01:00
Fomalhaut Weisszwerg 3b15fcd700 Fix: misleading indentation warning.
# Conflicts:
#	hal/phydm/rtl8822b/phydm_iqk_8822b.c
2018-03-05 08:21:04 +01:00
Fomalhaut Weisszwerg eea45895c7 Adapt `struct cfg80211_ops` to Linux kernel [818a986e4ebacea2020622e48c8bc04b7f500d89].
See 818a986e4e

# Conflicts:
#	os_dep/linux/ioctl_cfg80211.c
2018-03-02 10:46:35 +01:00
Fomalhaut Weisszwerg 2f074a48f2 Adapt `rtw_cfg80211_preinit_wiphy()` to Linux kernel [ca986ad9bcd3893c8b0b4cc2cafcc8cf1554409c]. 2018-03-02 10:38:15 +01:00
Fomalhaut Weisszwerg 9cef46f420 Adapt `rtw_cfg80211_add_monitor_if()` to the change of Linux kernel [cf124db566e6b036b8bcbe8decbed740bdfac8c6]. 2018-03-02 10:38:10 +01:00
Fomalhaut Weisszwerg 5cc79de441 Adapt `rtw_cfg80211_indicate_connect()` to Linux kernel [29ce6ecbb83c9185d76e3a7c340c9702d2a54961].
The function `cfg80211_roamed()` and `cfg80211_roamed_bss()` were unified.
See: 29ce6ecbb8 (diff-6788d961d43074bcd7966d231861f6b8)

# Conflicts:
#	os_dep/linux/ioctl_cfg80211.c
2018-03-02 10:37:55 +01:00
Fomalhaut Weisszwerg 4a9c13ea4d Fix: implicit declaration of function 'allow_signal'.
'allow_signal' requires explicit including of "linux/sched/signal.h" from Linux 4.11.
2018-03-02 10:33:26 +01:00
Harald Wolff d8607a4ff8 Added new ASUS USB device descriptor 2018-03-02 10:31:26 +01:00
Brandon Bailey ebe025e711 Updated Makefile to allow for ARM devices to compile correctly 2018-03-02 10:30:46 +01:00
Brandon Bailey 9a72e1262d Updated MODULE parameters 2018-03-02 10:29:10 +01:00
Brandon Bailey 81f1fdf5c4 Updated Makefile to allow for ARM devices to compile correctly 2018-03-02 10:28:18 +01:00
7 changed files with 6897 additions and 20 deletions

View File

@ -87,6 +87,7 @@ CONFIG_RTW_SDIO_PM_KEEP_POWER = y
###################### MP HW TX MODE FOR VHT #######################
CONFIG_MP_VHT_HW_TX_MODE = n
###################### Platform Related #######################
CONFIG_PLATFORM_ARM_RPI = n
CONFIG_PLATFORM_I386_PC = y
CONFIG_PLATFORM_ANDROID_X86 = n
CONFIG_PLATFORM_ANDROID_INTEL_X86 = n
@ -499,6 +500,78 @@ endif
endif
RTL871X := rtl8822b
EXTRA_CFLAGS += -DCONFIG_RTL8822B
ifeq ($(CONFIG_USB_HCI), y)
MODULE_NAME = 8822bu
endif
ifeq ($(CONFIG_PCI_HCI), y)
MODULE_NAME = 8822be
endif
ifeq ($(CONFIG_SDIO_HCI), y)
MODULE_NAME = 8822bs
endif
ifeq ($(CONFIG_MP_INCLUDED), y)
### 8822B Default Enable VHT MP HW TX MODE ###
#EXTRA_CFLAGS += -DCONFIG_MP_VHT_HW_TX_MODE
#CONFIG_MP_VHT_HW_TX_MODE = y
endif
_HAL_HALMAC_FILES += hal/halmac/halmac_api.o
_HAL_HALMAC_FILES += hal/halmac/halmac_88xx/halmac_api_88xx.o \
hal/halmac/halmac_88xx/halmac_func_88xx.o \
hal/halmac/halmac_88xx/halmac_api_88xx_usb.o \
hal/halmac/halmac_88xx/halmac_api_88xx_sdio.o \
hal/halmac/halmac_88xx/halmac_api_88xx_pcie.o
_HAL_HALMAC_FILES += hal/halmac/halmac_88xx/halmac_8822b/halmac_8822b_pwr_seq.o \
hal/halmac/halmac_88xx/halmac_8822b/halmac_api_8822b.o \
hal/halmac/halmac_88xx/halmac_8822b/halmac_func_8822b.o \
hal/halmac/halmac_88xx/halmac_8822b/halmac_api_8822b_usb.o \
hal/halmac/halmac_88xx/halmac_8822b/halmac_api_8822b_sdio.o \
hal/halmac/halmac_88xx/halmac_8822b/halmac_api_8822b_pcie.o
_HAL_INTFS_FILES += hal/hal_halmac.o
_HAL_INTFS_FILES += hal/rtl8822b/rtl8822b_halinit.o \
hal/rtl8822b/rtl8822b_mac.o \
hal/rtl8822b/rtl8822b_cmd.o \
hal/rtl8822b/rtl8822b_phy.o \
hal/rtl8822b/rtl8822b_ops.o
_HAL_INTFS_FILES += hal/rtl8822b/$(HCI_NAME)/rtl$(MODULE_NAME)_halinit.o \
hal/rtl8822b/$(HCI_NAME)/rtl$(MODULE_NAME)_halmac.o \
hal/rtl8822b/$(HCI_NAME)/rtl$(MODULE_NAME)_io.o \
hal/rtl8822b/$(HCI_NAME)/rtl$(MODULE_NAME)_xmit.o \
hal/rtl8822b/$(HCI_NAME)/rtl$(MODULE_NAME)_recv.o \
hal/rtl8822b/$(HCI_NAME)/rtl$(MODULE_NAME)_led.o \
hal/rtl8822b/$(HCI_NAME)/rtl$(MODULE_NAME)_ops.o
ifeq ($(CONFIG_USB_HCI), y)
_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8822B_USB.o
endif
ifeq ($(CONFIG_PCI_HCI), y)
_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8822B_PCIE.o
endif
ifeq ($(CONFIG_SDIO_HCI), y)
#_HAL_INTFS_FILES +=hal/efuse/$(RTL871X)/HalEfuseMask8822B_SDIO.o
endif
_OUTSRC_FILES += hal/phydm/rtl8822b/halhwimg8822b_bb.o \
hal/phydm/rtl8822b/halhwimg8822b_fw.o \
hal/phydm/rtl8822b/halhwimg8822b_mac.o \
hal/phydm/rtl8822b/halhwimg8822b_rf.o \
hal/phydm/rtl8822b/halphyrf_8822b.o \
hal/phydm/rtl8822b/phydm_hal_api8822b.o \
hal/phydm/rtl8822b/phydm_iqk_8822b.o \
hal/phydm/rtl8822b/phydm_regconfig8822b.o \
hal/phydm/rtl8822b/phydm_rtl8822b.o
_HAL_INTFS_FILES += $(_HAL_HALMAC_FILES)
########### HAL_RTL8723B #################################
ifeq ($(CONFIG_RTL8723B), y)
@ -549,6 +622,7 @@ endif
_OUTSRC_FILES += hal/phydm/$(RTL871X)/halhwimg8723b_bb.o\
hal/phydm/$(RTL871X)/halhwimg8723b_mac.o\
hal/phydm/$(RTL871X)/halhwimg8723b_rf.o\
hal/phydm/$(RTL871X)/halhwimg8723b_fw.o\
hal/phydm/$(RTL871X)/halhwimg8723b_mp.o\
hal/phydm/$(RTL871X)/phydm_regconfig8723b.o\
hal/phydm/$(RTL871X)/halphyrf_8723b_ce.o\
@ -559,8 +633,8 @@ endif
########### HAL_RTL8814A #################################
ifeq ($(CONFIG_RTL8814A), y)
## ADD NEW VHT MP HW TX MODE ##
#EXTRA_CFLAGS += -DCONFIG_MP_VHT_HW_TX_MODE
#CONFIG_MP_VHT_HW_TX_MODE = y
EXTRA_CFLAGS += -DCONFIG_MP_VHT_HW_TX_MODE
CONFIG_MP_VHT_HW_TX_MODE = y
##########################################
RTL871X = rtl8814a
ifeq ($(CONFIG_USB_HCI), y)
@ -615,6 +689,7 @@ endif
_OUTSRC_FILES += hal/phydm/$(RTL871X)/halhwimg8814a_bb.o\
hal/phydm/$(RTL871X)/halhwimg8814a_mac.o\
hal/phydm/$(RTL871X)/halhwimg8814a_rf.o\
hal/phydm/$(RTL871X)/halhwimg8814a_fw.o\
hal/phydm/$(RTL871X)/phydm_iqk_8814a.o\
hal/phydm/$(RTL871X)/phydm_regconfig8814a.o\
hal/phydm/$(RTL871X)/halphyrf_8814a_ce.o\
@ -676,6 +751,7 @@ endif
_OUTSRC_FILES += hal/phydm/$(RTL871X)/halhwimg8703b_bb.o\
hal/phydm/$(RTL871X)/halhwimg8703b_mac.o\
hal/phydm/$(RTL871X)/halhwimg8703b_rf.o\
hal/phydm/$(RTL871X)/halhwimg8703b_fw.o\
hal/phydm/$(RTL871X)/phydm_regconfig8703b.o\
hal/phydm/$(RTL871X)/halphyrf_8703b.o
endif
@ -735,6 +811,7 @@ endif
_OUTSRC_FILES += hal/phydm/$(RTL871X)/halhwimg8723d_bb.o\
hal/phydm/$(RTL871X)/halhwimg8723d_mac.o\
hal/phydm/$(RTL871X)/halhwimg8723d_rf.o\
hal/phydm/$(RTL871X)/halhwimg8723d_fw.o\
hal/phydm/$(RTL871X)/phydm_regconfig8723d.o\
hal/phydm/$(RTL871X)/phydm_rtl8723d.o\
hal/phydm/$(RTL871X)/halphyrf_8723d.o
@ -791,6 +868,7 @@ endif
_OUTSRC_FILES += hal/phydm/$(RTL871X)/halhwimg8188f_bb.o\
hal/phydm/$(RTL871X)/halhwimg8188f_mac.o\
hal/phydm/$(RTL871X)/halhwimg8188f_rf.o\
hal/phydm/$(RTL871X)/halhwimg8188f_fw.o\
hal/phydm/$(RTL871X)/phydm_regconfig8188f.o\
hal/phydm/$(RTL871X)/halphyrf_8188f.o \
hal/phydm/$(RTL871X)/phydm_rtl8188f.o
@ -1059,6 +1137,7 @@ EXTRA_CFLAGS += -DDM_ODM_SUPPORT_TYPE=0x04
ifeq ($(CONFIG_PLATFORM_I386_PC), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
EXTRA_CFLAGS += -DPLATFORM_LINUX
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
@ -1068,6 +1147,18 @@ MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/
INSTALL_PREFIX :=
endif
ifeq ($(CONFIG_PLATFORM_ARM_RPI), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
EXTRA_CFLAGS += -DPLATFORM_LINUX
ARCH ?= arm
CROSS_COMPILE ?=
KVER ?= $(shell uname -r)
KSRC := /lib/modules/$(KVER)/build
MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/
INSTALL_PREFIX :=
endif
ifeq ($(CONFIG_PLATFORM_NV_TK1), y)
EXTRA_CFLAGS += -DCONFIG_PLATFORM_NV_TK1
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN

45
README.md 100644
View File

@ -0,0 +1,45 @@
<u>**8822BU for Linux**</u>
Driver for 802.11ac USB Adapter with
RTL8822BU chipset
Only STA/Monitor Mode is supported, no AP.
A few known wireless cards that use this driver include
* [Edimax EW-7822ULC](http://us.edimax.com/edimax/merchandise/merchandise_detail/data/edimax/us/wireless_adapters_ac1200_dual-band/ew-7822ulc/)
* [ASUS AC-53 NANO](https://www.asus.com/Networking/USB-AC53-Nano/)
> NOTE: At least v4.7 is needed to compile this module
> sorry people with older kernels, the code is removed.
> Upon request I can work towards making it backwards compatible.
Currently tested with Linux kernel 4.13.10 on X86_64 platform **only**.
For compiling type
`make`
in source dir
To install the firmware files
`sudo make install`
To Unload driver you may need to disconnect the device
If the driver fails building consult your distro how to
install the kernel sources and build an <u>external</u> module.
**NOTES**
This driver allows use of wpa_supplicant by using the nl80211 driver
`wpa_supplicant -Dnl80211`
If installing on Rasberry Pi or other "armv71" devices, edit the Makefile and set `CONFIG_PLATFORM_ARM_RPI = y` and `CONFIG_PLATFORM_I386_PC = n`
**STATUS**
Driver basically works.
Most of the work is done is cleaning the driver and make this mess **readable** for conversion.
Updates for wireless-ext/cfg80211 are not accepted.
**BUGS**

View File

@ -44,6 +44,7 @@
#ifdef PLATFORM_LINUX
#include <osdep_service_linux.h>
#include <linux/sched/signal.h>
#endif
#ifdef PLATFORM_OS_XP

View File

@ -745,6 +745,10 @@ void rtw_cfg80211_indicate_connect(_adapter *padapter)
}
check_bss:
/* The function `cfg80211_roamed()` and `cfg80211_roamed_bss()` were unified by commit [29ce6ec].
* See https://github.com/torvalds/linux/commit/29ce6ecbb83c9185d76e3a7c340c9702d2a54961#diff-6788d961d43074bcd7966d231861f6b8
*/
if (!rtw_cfg80211_check_bss(padapter))
RTW_PRINT(FUNC_ADPT_FMT" BSS not found !!\n", FUNC_ADPT_ARG(padapter));
@ -759,20 +763,31 @@ check_bss:
notify_channel = ieee80211_get_channel(wiphy, freq);
#endif
#if KERNEL_VERSION(4, 12, 0) <= LINUX_VERSION_CODE
struct cfg80211_roam_info roam_info;
memset(&roam_info, 0, sizeof(struct cfg80211_roam_info));
roam_info.channel = notify_channel;
roam_info.bssid = cur_network->network.MacAddress;
roam_info.req_ie = pmlmepriv->assoc_req + sizeof(struct rtw_ieee80211_hdr_3addr) + 2;
roam_info.req_ie_len = pmlmepriv->assoc_req_len - sizeof(struct rtw_ieee80211_hdr_3addr) - 2;
roam_info.resp_ie = pmlmepriv->assoc_rsp + sizeof(struct rtw_ieee80211_hdr_3addr) + 6;
roam_info.resp_ie_len = pmlmepriv->assoc_rsp_len - sizeof(struct rtw_ieee80211_hdr_3addr) - 6;
#endif
RTW_INFO(FUNC_ADPT_FMT" call cfg80211_roamed\n", FUNC_ADPT_ARG(padapter));
cfg80211_roamed(padapter->pnetdev
#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39) || defined(COMPAT_KERNEL_RELEASE)
, notify_channel
#endif
, cur_network->network.MacAddress
, pmlmepriv->assoc_req + sizeof(struct rtw_ieee80211_hdr_3addr) + 2
, pmlmepriv->assoc_req_len - sizeof(struct rtw_ieee80211_hdr_3addr) - 2
, pmlmepriv->assoc_rsp + sizeof(struct rtw_ieee80211_hdr_3addr) + 6
, pmlmepriv->assoc_rsp_len - sizeof(struct rtw_ieee80211_hdr_3addr) - 6
, GFP_ATOMIC);
#ifdef CONFIG_RTW_80211R
if ((rtw_to_roam(padapter) > 0) && rtw_chk_ft_flags(padapter, RTW_FT_SUPPORTED))
rtw_set_ft_status(padapter, RTW_FT_ASSOCIATED_STA);
#if (KERNEL_VERSION(2, 6, 39) < LINUX_VERSION_CODE && LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0)) || defined(COMPAT_KERNEL_RELEASE)
, notify_channel
#elif KERNEL_VERSION(4, 12, 0) <= LINUX_VERSION_CODE
, &roam_info
, GFP_ATOMIC);
#else
, cur_network->network.MacAddress
, pmlmepriv->assoc_req + sizeof(struct rtw_ieee80211_hdr_3addr) + 2
, pmlmepriv->assoc_req_len - sizeof(struct rtw_ieee80211_hdr_3addr) - 2
, pmlmepriv->assoc_rsp + sizeof(struct rtw_ieee80211_hdr_3addr) + 6
, pmlmepriv->assoc_rsp_len - sizeof(struct rtw_ieee80211_hdr_3addr) - 6
, GFP_ATOMIC);
#endif
} else {
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0) || defined(COMPAT_KERNEL_RELEASE)
@ -1749,11 +1764,14 @@ enum nl80211_iftype {
NL80211_IFTYPE_MAX = NUM_NL80211_IFTYPES - 1
};
#endif
static int cfg80211_rtw_change_iface(struct wiphy *wiphy,
struct net_device *ndev,
enum nl80211_iftype type, u32 *flags,
struct vif_params *params)
{
enum nl80211_iftype type,
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
u32 *flags,
#endif
struct vif_params *params) {
enum nl80211_iftype old_type;
NDIS_802_11_NETWORK_INFRASTRUCTURE networkType;
_adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
@ -3671,7 +3689,15 @@ static int rtw_cfg80211_add_monitor_if(_adapter *padapter, char *name, struct ne
mon_ndev->type = ARPHRD_IEEE80211_RADIOTAP;
strncpy(mon_ndev->name, name, IFNAMSIZ);
mon_ndev->name[IFNAMSIZ - 1] = 0;
#if KERNEL_VERSION(4, 12, 0) < LINUX_VERSION_CODE
/* struct `net_device` was changed by commit [cf124db5] in Linux kernel.
* See https://github.com/torvalds/linux/commit/cf124db566e6b036b8bcbe8decbed740bdfac8c6
*/
mon_ndev->needs_free_netdev = false;
mon_ndev->priv_destructor = rtw_ndev_destructor;
#elif
mon_ndev->destructor = rtw_ndev_destructor;
#endif
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29))
mon_ndev->netdev_ops = &rtw_cfg80211_monitor_if_ops;
@ -3737,7 +3763,11 @@ static int
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0))
unsigned char name_assign_type,
#endif
enum nl80211_iftype type, u32 *flags, struct vif_params *params)
enum nl80211_iftype type,
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
u32 *flags,
#endif
struct vif_params *params)
{
int ret = 0;
struct net_device *ndev = NULL;
@ -6267,7 +6297,10 @@ static void rtw_cfg80211_preinit_wiphy(_adapter *adapter, struct wiphy *wiphy)
/* wiphy->flags |= WIPHY_FLAG_OFFCHAN_TX | WIPHY_FLAG_HAVE_AP_SME; */
#endif
#if defined(CONFIG_PM) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 0, 0))
#if defined(CONFIG_PM) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 0, 0) && LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0))
/* Later kernel 4.12, concurrently multiple scheduled scan is default.
* See https://github.com/torvalds/linux/commit/ca986ad9bcd3893c8b0b4cc2cafcc8cf1554409c
*/
wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
#ifdef CONFIG_PNO_SUPPORT
wiphy->max_sched_scan_ssids = MAX_PNO_LIST_COUNT;
@ -6300,6 +6333,9 @@ static void rtw_cfg80211_preinit_wiphy(_adapter *adapter, struct wiphy *wiphy)
#endif
}
/* Member `(*change_virtual_intf)()` and `(*add_virtual_intf)()` were changed by Linux kernel [818a986e4ebacea2020622e48c8bc04b7f500d89].
* See https://github.com/torvalds/linux/commit/818a986e4ebacea2020622e48c8bc04b7f500d89
*/
static struct cfg80211_ops rtw_cfg80211_ops = {
.change_virtual_intf = cfg80211_rtw_change_iface,
.add_key = cfg80211_rtw_add_key,

File diff suppressed because it is too large Load Diff

View File

@ -31,7 +31,7 @@
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Realtek Wireless Lan Driver");
MODULE_AUTHOR("Realtek Semiconductor Corp.");
MODULE_AUTHOR("Brandon Bailey <brandondanielbailey@gmail.com>");
MODULE_VERSION(DRIVERVERSION);
/* module param defaults */

View File

@ -155,6 +155,7 @@ static struct usb_device_id rtw_usb_id_tbl[] = {
{USB_DEVICE(0x0789, 0x016E), .driver_info = RTL8812}, /* Logitec - Edimax */
{USB_DEVICE(0x0409, 0x0408), .driver_info = RTL8812}, /* NEC - */
{USB_DEVICE(0x0B05, 0x17D2), .driver_info = RTL8812}, /* ASUS - Edimax */
{USB_DEVICE(0x0B05, 0x184C), .driver_info = RTL8812}, /* ASUS - Edimax */
{USB_DEVICE(0x0E66, 0x0022), .driver_info = RTL8812}, /* HAWKING - Edimax */
{USB_DEVICE(0x0586, 0x3426), .driver_info = RTL8812}, /* ZyXEL - */
{USB_DEVICE(0x2001, 0x3313), .driver_info = RTL8812}, /* D-Link - ALPHA */