d4854eb632
I did the research: the commit times and authors are as correct as an afternoon of internet spelunking can make them.
93 lines
3.2 KiB
Diff
93 lines
3.2 KiB
Diff
From 2e9c7bd146fbc3b4a62940140eafb47df16b6cb4 Mon Sep 17 00:00:00 2001
|
|
From: aszlig <aszlig@redmoonstudios.org>
|
|
Date: Tue, 18 Jul 2017 21:32:13 +0200
|
|
Subject: [PATCH 07/16] linuxPackages.broadcom_sta: fix build for kernel 4.12+
|
|
|
|
The patch is from Arch Linux at:
|
|
|
|
https://aur.archlinux.org/cgit/aur.git/tree/linux412.patch?h=broadcom-wl
|
|
|
|
Tested this by building against the following attributes:
|
|
|
|
* linuxPackages.broadcom_sta
|
|
* linuxPackages_latest.broadcom_sta
|
|
* pkgsI686Linux.linuxPackages.broadcom_sta
|
|
* pkgsI686Linux.linuxPackages_latest.broadcom_sta
|
|
|
|
I have not tested whether this works at runtime, because I do not possess the hardware.
|
|
---
|
|
src/wl/sys/wl_cfg80211_hybrid.c | 29 ++++++++++++++++++++++++++++-
|
|
1 file changed, 28 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/wl/sys/wl_cfg80211_hybrid.c b/src/wl/sys/wl_cfg80211_hybrid.c
|
|
index 9fd8ed1..1893a53 100644
|
|
--- a/src/wl/sys/wl_cfg80211_hybrid.c
|
|
+++ b/src/wl/sys/wl_cfg80211_hybrid.c
|
|
@@ -53,7 +53,11 @@ u32 wl_dbg_level = WL_DBG_ERR;
|
|
#endif
|
|
|
|
static s32 wl_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev,
|
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
|
|
+ enum nl80211_iftype type, struct vif_params *params);
|
|
+#else
|
|
enum nl80211_iftype type, u32 *flags, struct vif_params *params);
|
|
+#endif
|
|
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)
|
|
static s32
|
|
wl_cfg80211_scan(struct wiphy *wiphy,
|
|
@@ -466,7 +470,11 @@ wl_dev_ioctl(struct net_device *dev, u32 cmd, void *arg, u32 len)
|
|
|
|
static s32
|
|
wl_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev,
|
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
|
|
+ enum nl80211_iftype type,
|
|
+#else
|
|
enum nl80211_iftype type, u32 *flags,
|
|
+#endif
|
|
struct vif_params *params)
|
|
{
|
|
struct wl_cfg80211_priv *wl = wiphy_to_wl(wiphy);
|
|
@@ -2361,6 +2369,20 @@ wl_bss_roaming_done(struct wl_cfg80211_priv *wl, struct net_device *ndev,
|
|
const wl_event_msg_t *e, void *data)
|
|
{
|
|
struct wl_cfg80211_connect_info *conn_info = wl_to_conn(wl);
|
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
|
|
+ struct cfg80211_bss *bss;
|
|
+ struct wlc_ssid *ssid;
|
|
+ ssid = &wl->profile->ssid;
|
|
+ bss = cfg80211_get_bss(wl_to_wiphy(wl), NULL, (s8 *)&wl->bssid,
|
|
+ ssid->SSID, ssid->SSID_len, WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS);
|
|
+ struct cfg80211_roam_info roam_info = {
|
|
+ .bss = bss,
|
|
+ .req_ie = conn_info->req_ie,
|
|
+ .req_ie_len = conn_info->req_ie_len,
|
|
+ .resp_ie = conn_info->resp_ie,
|
|
+ .resp_ie_len = conn_info->resp_ie_len,
|
|
+ };
|
|
+#endif
|
|
s32 err = 0;
|
|
|
|
wl_get_assoc_ies(wl);
|
|
@@ -2368,12 +2390,17 @@ wl_bss_roaming_done(struct wl_cfg80211_priv *wl, struct net_device *ndev,
|
|
memcpy(&wl->bssid, &e->addr, ETHER_ADDR_LEN);
|
|
wl_update_bss_info(wl);
|
|
cfg80211_roamed(ndev,
|
|
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0)
|
|
+ &roam_info,
|
|
+#else
|
|
#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39)
|
|
&wl->conf->channel,
|
|
#endif
|
|
(u8 *)&wl->bssid,
|
|
conn_info->req_ie, conn_info->req_ie_len,
|
|
- conn_info->resp_ie, conn_info->resp_ie_len, GFP_KERNEL);
|
|
+ conn_info->resp_ie, conn_info->resp_ie_len,
|
|
+#endif
|
|
+ GFP_KERNEL);
|
|
WL_DBG(("Report roaming result\n"));
|
|
|
|
set_bit(WL_STATUS_CONNECTED, &wl->status);
|
|
--
|
|
2.45.1
|
|
|