mirror of
https://github.com/RinCat/RTL88x2BU-Linux-Driver.git
synced 2026-03-06 17:09:38 +00:00
Compare commits
10 Commits
e8a059b77f
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
825556e195 | ||
|
471877314b
|
|||
|
77a82dbac7
|
|||
|
fcf8bf2936
|
|||
|
9d619f4c09
|
|||
|
9f48662d71
|
|||
|
|
1f0005d9be | ||
|
9624bd8943
|
|||
|
fda90b7760
|
|||
|
f0644acaa8
|
18
README.md
18
README.md
@@ -1,28 +1,30 @@
|
||||
# REALTEK RTL88x2B USB Linux Driver
|
||||
**Current Driver Version**: 5.13.1-30
|
||||
**Support Kernel**: 2.6.24 ~ 6.13 (with unofficial patches)
|
||||
**Support Kernel**: 2.6.24 ~ 6.18 (with unofficial patches)
|
||||
|
||||
Linux in-tree rtw8822bu driver is working in process, check [this](https://lore.kernel.org/lkml/20220518082318.3898514-1-s.hauer@pengutronix.de/) patchset.
|
||||
Linux in-tree rtw8822bu driver is a work in progress. Check [this](https://lore.kernel.org/lkml/20220518082318.3898514-1-s.hauer@pengutronix.de/) patchset.
|
||||
|
||||
Official release note please check ReleaseNotes.pdf
|
||||
For official release notes please check ReleaseNotes.pdf.
|
||||
|
||||
**Note:** if you believe your device is **RTL8812BU** or **RTL8822BU** but after loaded the module no NIC shows up, the device ID maybe not in the driver whitelist. In this case please submit a new issue with `lsusb` result, and your device name, brand, website, etc.
|
||||
**Note:** if you believe your device is **RTL8812BU** or **RTL8822BU** but after loading the module no NIC shows up, the device ID maybe not be in the driver whitelist. In this case, please submit a new issue with `lsusb` result, and your device name, brand, website, etc.
|
||||
|
||||
This driver does *NOT* support newer Realtek 802.11ax (Wi-Fi 6) chipsets such as RTL8852BU.
|
||||
|
||||
## Linux 5.18+ and RTW88 Driver
|
||||
Starting from Linux 5.18, some distributions have added experimental RTW88 USB support (include RTW88x2BU support).
|
||||
It is not yet stable but if it works well on your system, then you no longer need this driver.
|
||||
But if it doesn't work or is unstable, you need to manually blacklist it because it has a higher loading priority than this external drivers.
|
||||
If it doesn't, then you need to manually blacklist it because it has a higher loading priority than this external drivers.
|
||||
|
||||
Check the currently loaded module using `lsmod`. If you see `rtw88_core`, `rtw88_usb`, or any name beginning with `rtw88_` then you are using the RTW88 driver.
|
||||
Check the currently loaded modules using `lsmod`. If you see `rtw88_core`, `rtw88_usb`, or any name beginning with `rtw88_` then you are using the RTW88 driver.
|
||||
If you see `88x2bu` then you are using this RTW88x2BU driver.
|
||||
|
||||
To blacklist RTW88 8822bu USB driver, run the following command:
|
||||
To blacklist RTW88 8822bu USB driver run:
|
||||
|
||||
```
|
||||
echo "blacklist rtw88_8822bu" > /etc/modprobe.d/rtw8822bu.conf
|
||||
```
|
||||
|
||||
And reboot your system.
|
||||
...and reboot your system.
|
||||
|
||||
## Supported Devices
|
||||
<details>
|
||||
|
||||
@@ -86,19 +86,3 @@ int hmac_sha256_vector(const u8 *key, size_t key_len, size_t num_elem,
|
||||
_len[1] = SHA256_MAC_LEN;
|
||||
return sha256_vector(2, _addr, _len, mac);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* hmac_sha256 - HMAC-SHA256 over data buffer (RFC 2104)
|
||||
* @key: Key for HMAC operations
|
||||
* @key_len: Length of the key in bytes
|
||||
* @data: Pointers to the data area
|
||||
* @data_len: Length of the data area
|
||||
* @mac: Buffer for the hash (32 bytes)
|
||||
* Returns: 0 on success, -1 on failure
|
||||
*/
|
||||
int hmac_sha256(const u8 *key, size_t key_len, const u8 *data,
|
||||
size_t data_len, u8 *mac)
|
||||
{
|
||||
return hmac_sha256_vector(key, key_len, 1, &data, &data_len, mac);
|
||||
}
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
|
||||
int hmac_sha256_vector(const u8 *key, size_t key_len, size_t num_elem,
|
||||
const u8 *addr[], const size_t *len, u8 *mac);
|
||||
int hmac_sha256(const u8 *key, size_t key_len, const u8 *data,
|
||||
size_t data_len, u8 *mac);
|
||||
int sha256_prf(const u8 *key, size_t key_len, const char *label,
|
||||
const u8 *data, size_t data_len, u8 *buf, size_t buf_len);
|
||||
int sha256_prf_bits(const u8 *key, size_t key_len, const char *label,
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
PACKAGE_NAME="rtl88x2bu"
|
||||
PACKAGE_VERSION="@PKGVER@"
|
||||
MAKE="'make' -j$(nproc) KVER=${kernelver} KSRC=/lib/modules/${kernelver}/build"
|
||||
CLEAN="make clean"
|
||||
BUILT_MODULE_NAME[0]="88x2bu"
|
||||
DEST_MODULE_LOCATION[0]="/kernel/drivers/net/wireless"
|
||||
AUTOINSTALL="yes"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
EXTRA_CFLAGS += -I$(src)/hal/phydm
|
||||
ccflags-y += -I$(src)/hal/phydm
|
||||
|
||||
_PHYDM_FILES := hal/phydm/phydm_debug.o \
|
||||
hal/phydm/phydm_antdiv.o\
|
||||
|
||||
@@ -1280,13 +1280,14 @@ void phydm_dfs_histogram_radar_distinguish(
|
||||
dfs->pri_hold_sum[i] = dfs->pri_hold_sum[i] +
|
||||
dfs->pri_hold[(dfs->hist_idx + 1) % 3][i] +
|
||||
dfs->pri_hold[(dfs->hist_idx + 2) % 3][i];
|
||||
}
|
||||
/*@For long radar type*/
|
||||
for (j = 1; j < 4; j++) {
|
||||
dfs->pw_long_hold_sum[i] = dfs->pw_long_hold_sum[i] +
|
||||
dfs->pw_hold[(dfs->hist_long_idx + j) % 4][i];
|
||||
dfs->pri_long_hold_sum[i] = dfs->pri_long_hold_sum[i] +
|
||||
dfs->pri_hold[(dfs->hist_long_idx + j) % 4][i];
|
||||
|
||||
/*@For long radar type*/
|
||||
for (j = 1; j < 4; j++) {
|
||||
dfs->pw_long_hold_sum[i] = dfs->pw_long_hold_sum[i] +
|
||||
dfs->pw_hold[(dfs->hist_long_idx + j) % 4][i];
|
||||
dfs->pri_long_hold_sum[i] = dfs->pri_long_hold_sum[i] +
|
||||
dfs->pri_hold[(dfs->hist_long_idx + j) % 4][i];
|
||||
}
|
||||
}
|
||||
|
||||
dfs->hist_idx++;
|
||||
|
||||
@@ -725,11 +725,23 @@ void odm_initialize_timer(struct dm_struct *dm, struct phydm_timer_list *timer,
|
||||
void odm_cancel_timer(struct dm_struct *dm, struct phydm_timer_list *timer)
|
||||
{
|
||||
#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0))
|
||||
timer_delete(timer);
|
||||
#else
|
||||
del_timer(timer);
|
||||
#endif
|
||||
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE) && defined(DM_ODM_CE_MAC80211)
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0))
|
||||
timer_delete(timer);
|
||||
#else
|
||||
del_timer(timer);
|
||||
#endif
|
||||
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE) && defined(DM_ODM_CE_MAC80211_V2)
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0))
|
||||
timer_delete(&timer->timer);
|
||||
#else
|
||||
del_timer(&timer->timer);
|
||||
#endif
|
||||
#elif (DM_ODM_SUPPORT_TYPE & ODM_CE)
|
||||
_cancel_timer_ex(timer);
|
||||
#elif (DM_ODM_SUPPORT_TYPE & ODM_WIN)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
EXTRA_CFLAGS += -I$(src)/hal/phydm
|
||||
ccflags-y += -I$(src)/hal/phydm
|
||||
|
||||
_PHYDM_FILES := hal/phydm/phydm_debug.o \
|
||||
hal/phydm/phydm_interface.o\
|
||||
|
||||
@@ -357,7 +357,9 @@ static inline void timer_hdl(struct timer_list *in_timer)
|
||||
static inline void timer_hdl(unsigned long cntx)
|
||||
#endif
|
||||
{
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0))
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 16, 0))
|
||||
_timer *ptimer = timer_container_of(ptimer, in_timer, timer);
|
||||
#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0))
|
||||
_timer *ptimer = from_timer(ptimer, in_timer, timer);
|
||||
#else
|
||||
_timer *ptimer = (_timer *)cntx;
|
||||
@@ -387,12 +389,20 @@ __inline static void _set_timer(_timer *ptimer, u32 delay_time)
|
||||
|
||||
__inline static void _cancel_timer(_timer *ptimer, u8 *bcancelled)
|
||||
{
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0))
|
||||
*bcancelled = timer_delete_sync(&ptimer->timer) == 1 ? 1 : 0;
|
||||
#else
|
||||
*bcancelled = del_timer_sync(&ptimer->timer) == 1 ? 1 : 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
__inline static void _cancel_timer_async(_timer *ptimer)
|
||||
{
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0))
|
||||
timer_delete(&ptimer->timer);
|
||||
#else
|
||||
del_timer(&ptimer->timer);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline void _init_workitem(_workitem *pwork, void *pfunc, void *cntx)
|
||||
|
||||
@@ -3592,7 +3592,12 @@ static void cfg80211_rtw_abort_scan(struct wiphy *wiphy,
|
||||
}
|
||||
#endif
|
||||
|
||||
static int cfg80211_rtw_set_wiphy_params(struct wiphy *wiphy, u32 changed)
|
||||
static int cfg80211_rtw_set_wiphy_params(
|
||||
struct wiphy *wiphy,
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0))
|
||||
int radio_idx,
|
||||
#endif
|
||||
u32 changed)
|
||||
{
|
||||
#if 0
|
||||
struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
|
||||
@@ -4597,6 +4602,9 @@ static int cfg80211_rtw_set_txpower(struct wiphy *wiphy,
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0))
|
||||
struct wireless_dev *wdev,
|
||||
#endif
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0))
|
||||
int radio_idx,
|
||||
#endif
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36)) || defined(COMPAT_KERNEL_RELEASE)
|
||||
enum nl80211_tx_power_setting type, int mbm)
|
||||
#else
|
||||
@@ -4658,6 +4666,12 @@ exit:
|
||||
static int cfg80211_rtw_get_txpower(struct wiphy *wiphy,
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0))
|
||||
struct wireless_dev *wdev,
|
||||
#endif
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 17, 0))
|
||||
int radio_idx,
|
||||
#endif
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 14, 0))
|
||||
unsigned int link_id,
|
||||
#endif
|
||||
int *dbm)
|
||||
{
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
EXTRA_CFLAGS += -DCONFIG_RTL8822B
|
||||
ccflags-y += -DCONFIG_RTL8822B
|
||||
|
||||
ifeq ($(CONFIG_MP_INCLUDED), y)
|
||||
### 8822B Default Enable VHT MP HW TX MODE ###
|
||||
#EXTRA_CFLAGS += -DCONFIG_MP_VHT_HW_TX_MODE
|
||||
#ccflags-y += -DCONFIG_MP_VHT_HW_TX_MODE
|
||||
#CONFIG_MP_VHT_HW_TX_MODE = y
|
||||
endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user