quickfix for kernel 6.1

pull/200/head
themanyone 4 years ago
parent 8c2226a74a
commit 58149cd4db

@ -1,4 +1,6 @@
# Realtek RTL8811CU/RTL8821CU USB wifi adapter driver version 5.4.1 for Linux 4.4.x up to 5.x
# Realtek RTL8811CU/RTL8821CU USB wifi adapter driver version 5.4.1 for Linux 4.4.x up to ...
This fork compiles for kernel 6.1 and tested on open networks. Not all functions/ap settings may work.
Before build this driver make sure `make`, `gcc`, `linux-header`/`kernel-devel`, `bc` and `git` have been installed.
@ -6,7 +8,7 @@ Before build this driver make sure `make`, `gcc`, `linux-header`/`kernel-devel`,
```
mkdir -p ~/build
cd ~/build
git clone https://github.com/brektrou/rtl8821CU.git
git clone (url of repository)
```
## Check the name of the interface

@ -18,7 +18,22 @@
#include <linux/fs.h>
#endif
#include <drv_types.h>
extern __inline int is_multicast_mac_addr(const u8 *addr)
{
return (addr[0] != 0xff) && (0x01 & addr[0]);
}
extern __inline int is_broadcast_mac_addr(const u8 *addr)
{
return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && \
(addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
}
extern __inline int is_zero_mac_addr(const u8 *addr)
{
return ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && \
(addr[3] == 0x00) && (addr[4] == 0x00) && (addr[5] == 0x00));
}
u8 RTW_WPA_OUI_TYPE[] = { 0x00, 0x50, 0xf2, 1 };
u16 RTW_WPA_VERSION = 1;

@ -15,7 +15,7 @@
#define _RTW_MLME_C_
#include <hal_data.h>
#include <ieee80211.h>
extern void indicate_wx_scan_complete_event(_adapter *padapter);
extern u8 rtw_do_join(_adapter *padapter);

@ -16,6 +16,7 @@
#include <drv_types.h>
#include <hal_data.h>
#include <ieee80211.h>
#if defined(PLATFORM_LINUX) && defined (PLATFORM_WINDOWS)

@ -1,4 +1,4 @@
#DHCP client
DEVICE=wlan0
DEVICE=wlo2
BOOTPROTO=dhcp
ONBOOT=yes

@ -1529,22 +1529,11 @@ enum ieee80211_state {
(((Addr[2]) & 0xff) == 0xff) && (((Addr[3]) & 0xff) == 0xff) && (((Addr[4]) & 0xff) == 0xff) && \
(((Addr[5]) & 0xff) == 0xff))
#else
extern __inline int is_multicast_mac_addr(const u8 *addr)
{
return (addr[0] != 0xff) && (0x01 & addr[0]);
}
extern __inline int is_broadcast_mac_addr(const u8 *addr)
{
return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && \
(addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
}
extern __inline int is_zero_mac_addr(const u8 *addr)
{
return ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && \
(addr[3] == 0x00) && (addr[4] == 0x00) && (addr[5] == 0x00));
}
extern int is_multicast_mac_addr(const u8 *addr);
extern int is_broadcast_mac_addr(const u8 *addr);
extern int is_zero_mac_addr(const u8 *addr);
#endif /* PLATFORM_FREEBSD */
#define CFG_IEEE80211_RESERVE_FCS (1<<0)

@ -417,7 +417,7 @@ u8 rtw_cfg80211_ch_switch_notify(_adapter *adapter, u8 ch, u8 bw, u8 offset, u8
if (ret != _SUCCESS)
goto exit;
cfg80211_ch_switch_notify(adapter->pnetdev, &chdef);
cfg80211_ch_switch_notify(adapter->pnetdev, &chdef, NULL);
#else
int freq = rtw_ch2freq(ch);
@ -1085,7 +1085,7 @@ check_bss:
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
roam_info.bssid = cur_network->network.MacAddress;
//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;
@ -4223,7 +4223,7 @@ void rtw_cfg80211_indicate_sta_assoc(_adapter *padapter, u8 *pmgmt_frame, uint f
pwdev->iftype = NL80211_IFTYPE_STATION;
#endif /* CONFIG_PLATFORM_MSTAR */
RTW_INFO("iftype=%d before call cfg80211_send_rx_assoc()\n", pwdev->iftype);
rtw_cfg80211_send_rx_assoc(padapter, NULL, pmgmt_frame, frame_len);
//~ rtw_cfg80211_send_rx_assoc(padapter, NULL, pmgmt_frame, frame_len);
RTW_INFO("iftype=%d after call cfg80211_send_rx_assoc()\n", pwdev->iftype);
pwdev->iftype = NL80211_IFTYPE_AP;
/* cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC); */
@ -4282,7 +4282,7 @@ void rtw_cfg80211_indicate_sta_disassoc(_adapter *padapter, const u8 *da, unsign
#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
rtw_cfg80211_rx_mgmt(wdev, freq, 0, mgmt_buf, frame_len, GFP_ATOMIC);
#else /* COMPAT_KERNEL_RELEASE */
cfg80211_send_disassoc(padapter->pnetdev, mgmt_buf, frame_len);
//~ cfg80211_send_disassoc(padapter->pnetdev, mgmt_buf, frame_len);
/* cfg80211_rx_action(padapter->pnetdev, freq, mgmt_buf, frame_len, GFP_ATOMIC); */
#endif /* COMPAT_KERNEL_RELEASE */
#endif /* defined(RTW_USE_CFG80211_STA_EVENT) */
@ -9378,12 +9378,12 @@ int rtw_hostapd_acs_dump_survey(struct wiphy *wiphy, struct net_device *netdev,
static struct cfg80211_ops rtw_cfg80211_ops = {
.change_virtual_intf = cfg80211_rtw_change_iface,
.add_key = cfg80211_rtw_add_key,
.get_key = cfg80211_rtw_get_key,
.del_key = cfg80211_rtw_del_key,
.set_default_key = cfg80211_rtw_set_default_key,
//.add_key = cfg80211_rtw_add_key,
//.get_key = cfg80211_rtw_get_key,
//.del_key = cfg80211_rtw_del_key,
//.set_default_key = cfg80211_rtw_set_default_key,
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30))
.set_default_mgmt_key = cfg80211_rtw_set_default_mgmt_key,
//.set_default_mgmt_key = cfg80211_rtw_set_default_mgmt_key,
#endif
#if defined(CONFIG_GTK_OL) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0))
.set_rekey_data = cfg80211_rtw_set_rekey_data,
@ -9413,7 +9413,7 @@ static struct cfg80211_ops rtw_cfg80211_ops = {
#else
.start_ap = cfg80211_rtw_start_ap,
.change_beacon = cfg80211_rtw_change_beacon,
.stop_ap = cfg80211_rtw_stop_ap,
//.stop_ap = cfg80211_rtw_stop_ap,
#endif
#if CONFIG_RTW_MACADDR_ACL && (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0))
@ -9679,10 +9679,10 @@ void rtw_wdev_unregister(struct wireless_dev *wdev)
rtw_cfg80211_indicate_scan_done(adapter, _TRUE);
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 11, 0)) || defined(COMPAT_KERNEL_RELEASE)
if (wdev->current_bss) {
RTW_INFO(FUNC_ADPT_FMT" clear current_bss by cfg80211_disconnected\n", FUNC_ADPT_ARG(adapter));
rtw_cfg80211_indicate_disconnect(adapter, 0, 1);
}
//~ if (wdev->current_bss) {
//~ RTW_INFO(FUNC_ADPT_FMT" clear current_bss by cfg80211_disconnected\n", FUNC_ADPT_ARG(adapter));
//~ rtw_cfg80211_indicate_disconnect(adapter, 0, 1);
//~ }
#endif
if (pwdev_priv->pmon_ndev) {

@ -346,8 +346,7 @@ void rtw_cfg80211_deinit_rfkill(struct wiphy *wiphy);
#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 4, 0)) && !defined(COMPAT_KERNEL_RELEASE)
#define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, buf, len)
#else
#define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, bss, buf, len)
#endif
#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0))

@ -1643,7 +1643,7 @@ int rtw_os_ndev_register(_adapter *adapter, const char *name)
u8 rtnl_lock_needed = rtw_rtnl_lock_needed(dvobj);
#ifdef CONFIG_RTW_NAPI
netif_napi_add(ndev, &adapter->napi, rtw_recv_napi_poll, RTL_NAPI_WEIGHT);
netif_napi_add(ndev, &adapter->napi, rtw_recv_napi_poll);
#endif /* CONFIG_RTW_NAPI */
#if defined(CONFIG_IOCTL_CFG80211)

@ -12,7 +12,6 @@
* more details.
*
*****************************************************************************/
#include <linux/ctype.h> /* tolower() */
#include <drv_types.h>
#include <hal_data.h>
@ -1335,7 +1334,7 @@ ssize_t proc_set_macaddr_acl(struct file *file, const char __user *buffer, size_
if (sscanf(c, MAC_SFMT, MAC_SARG(addr)) != 6)
break;
is_bcast = is_broadcast_mac_addr(addr);
is_bcast = is_broadcast_mac_addr((const void*)addr);
if (is_bcast
|| rtw_check_invalid_mac_address(addr, 0) == _FALSE
) {
@ -1990,7 +1989,7 @@ static ssize_t proc_set_tx_bw_mode(struct file *file, const char __user *buffer,
for (i = 0; i < MACID_NUM_SW_LIMIT; i++) {
sta = macid_ctl->sta[i];
if (sta && !is_broadcast_mac_addr(sta->cmn.mac_addr))
if (sta && !is_broadcast_mac_addr((const void*)sta->cmn.mac_addr))
rtw_dm_ra_mask_wk_cmd(adapter, (u8 *)sta);
}
}

@ -2615,7 +2615,7 @@ inline u32 rtw_random32(void)
{
#ifdef PLATFORM_LINUX
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0))
return prandom_u32();
return rtw_random32();
#elif (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18))
u32 random_int;
get_random_bytes(&random_int , 4);

Loading…
Cancel
Save