Skip to content

Commit

Permalink
Make Linux 5.19/6.0/6.1 support backwards compatible
Browse files Browse the repository at this point in the history
  • Loading branch information
agners committed Feb 16, 2023
1 parent ced770c commit 7caf3cc
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 17 deletions.
9 changes: 9 additions & 0 deletions include/ieee80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -1529,17 +1529,26 @@ enum ieee80211_state {
(((Addr[2]) & 0xff) == 0xff) && (((Addr[3]) & 0xff) == 0xff) && (((Addr[4]) & 0xff) == 0xff) && \
(((Addr[5]) & 0xff) == 0xff))
#else
#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 19, 0))
extern
#endif
__inline int is_multicast_mac_addr(const u8 *addr)
{
return (addr[0] != 0xff) && (0x01 & addr[0]);
}

#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 19, 0))
extern
#endif
__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));
}

#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 19, 0))
extern
#endif
__inline int is_zero_mac_addr(const u8 *addr)
{
return ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && \
Expand Down
43 changes: 35 additions & 8 deletions os_dep/linux/ioctl_cfg80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -417,7 +417,11 @@ u8 rtw_cfg80211_ch_switch_notify(_adapter *adapter, u8 ch, u8 bw, u8 offset, u8
if (ret != _SUCCESS)
goto exit;

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0))
cfg80211_ch_switch_notify(adapter->pnetdev, &chdef, 0);
#else
cfg80211_ch_switch_notify(adapter->pnetdev, &chdef);
#endif

#else
int freq = rtw_ch2freq(ch);
Expand Down Expand Up @@ -1085,7 +1089,9 @@ void rtw_cfg80211_indicate_connect(_adapter *padapter)
#endif

#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)
roam_info.links[0].bssid = cur_network->network.MacAddress;
#endif /*LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)*/
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;
Expand Down Expand Up @@ -1635,8 +1641,11 @@ static int rtw_cfg80211_set_encryption(struct net_device *dev, struct ieee_param
return ret;
}

static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
int link_id, u8 key_index
static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0))
, int link_id
#endif
, u8 key_index
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) || defined(COMPAT_KERNEL_RELEASE)
, bool pairwise
#endif
Expand Down Expand Up @@ -1779,8 +1788,11 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,

}

static int cfg80211_rtw_get_key(struct wiphy *wiphy, struct net_device *ndev,
int link_id, u8 keyid
static int cfg80211_rtw_get_key(struct wiphy *wiphy, struct net_device *ndev
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0))
, int link_id
#endif
, u8 keyid
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) || defined(COMPAT_KERNEL_RELEASE)
, bool pairwise
#endif
Expand Down Expand Up @@ -1944,7 +1956,10 @@ static int cfg80211_rtw_get_key(struct wiphy *wiphy, struct net_device *ndev,
return ret;
}

static int cfg80211_rtw_del_key(struct wiphy *wiphy, struct net_device *ndev, int link_id,
static int cfg80211_rtw_del_key(struct wiphy *wiphy, struct net_device *ndev,
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0))
int link_id,
#endif
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) || defined(COMPAT_KERNEL_RELEASE)
u8 key_index, bool pairwise, const u8 *mac_addr)
#else /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37)) */
Expand All @@ -1965,7 +1980,11 @@ static int cfg80211_rtw_del_key(struct wiphy *wiphy, struct net_device *ndev, in
}

static int cfg80211_rtw_set_default_key(struct wiphy *wiphy,
struct net_device *ndev, int link_id, u8 key_index
struct net_device *ndev
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0))
, int link_id
#endif
, u8 key_index
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38)) || defined(COMPAT_KERNEL_RELEASE)
, bool unicast, bool multicast
#endif
Expand Down Expand Up @@ -2013,7 +2032,11 @@ static int cfg80211_rtw_set_default_key(struct wiphy *wiphy,

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 30))
int cfg80211_rtw_set_default_mgmt_key(struct wiphy *wiphy,
struct net_device *ndev, int link_id, u8 key_index)
struct net_device *ndev
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0))
, int link_id
#endif
, u8 key_index)
{
#define SET_DEF_KEY_PARAM_FMT " key_index=%d"
#define SET_DEF_KEY_PARAM_ARG , key_index
Expand Down Expand Up @@ -4929,7 +4952,11 @@ static int cfg80211_rtw_change_beacon(struct wiphy *wiphy, struct net_device *nd
return ret;
}

static int cfg80211_rtw_stop_ap(struct wiphy *wiphy, struct net_device *ndev, unsigned int link_id)
static int cfg80211_rtw_stop_ap(struct wiphy *wiphy, struct net_device *ndev
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0))
, unsigned int link_id
#endif
)
{
_adapter *adapter = (_adapter *)rtw_netdev_priv(ndev);

Expand Down
6 changes: 5 additions & 1 deletion os_dep/linux/os_intfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -1643,7 +1643,11 @@ 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);
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0))
netif_napi_add_weight(ndev, &adapter->napi, rtw_recv_napi_poll, RTL_NAPI_WEIGHT);
#else
netif_napi_add(ndev, &adapter->napi, rtw_recv_napi_poll, RTL_NAPI_WEIGHT);
#endif
#endif /* CONFIG_RTW_NAPI */

#if defined(CONFIG_IOCTL_CFG80211)
Expand Down
18 changes: 10 additions & 8 deletions os_dep/osdep_service.c
Original file line number Diff line number Diff line change
Expand Up @@ -2614,15 +2614,17 @@ u64 rtw_division64(u64 x, u64 y)
inline u32 rtw_random32(void)
{
#ifdef PLATFORM_LINUX
// #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0))
// return prandom_u32();
// #elif (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18))
// u32 random_int;
// get_random_bytes(&random_int , 4);
// return random_int;
// #else
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0))
return get_random_u32();
// #endif
#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0))
return prandom_u32();
#elif (LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18))
u32 random_int;
get_random_bytes(&random_int , 4);
return random_int;
#else
return random32();
#endif
#elif defined(PLATFORM_WINDOWS)
#error "to be implemented\n"
#elif defined(PLATFORM_FREEBSD)
Expand Down

0 comments on commit 7caf3cc

Please sign in to comment.