Package: broadcom-sta-source
Version:  6.30.223.271-6

I use the attached patch to get this module compiled with 4.12. Works
fine for me the last few days.

Note, https://aur.archlinux.org/cgit/aur.git/tree/linux412.patch?h=broadcom-wl
patch is different. It calculates the bss field, as my patch only sets
the bssid field.
Please refer to
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=29ce6ecbb83c9185d76e3a7c340c9702d2a54961
all other driver fixes seem to be also setting bssid when bss not
already in scope. Also note that in the linux patch there where bss is
set when NULL (search for "info->bss = cfg80211_get_bss") the flags
differ.

Cheers,
Koos Vriezen
--- src/wl/sys/wl_cfg80211_hybrid.c.orig        2017-06-26 11:04:47.204814029 
+0200
+++ src/wl/sys/wl_cfg80211_hybrid.c     2017-07-03 09:57:21.343667706 +0200
@@ -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,
-           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);
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)
 static s32
 wl_cfg80211_scan(struct wiphy *wiphy,
@@ -466,8 +470,11 @@ wl_dev_ioctl(struct net_device *dev, u32
 
 static s32
 wl_cfg80211_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)
 {
        struct wl_cfg80211_priv *wl = wiphy_to_wl(wiphy);
        struct wireless_dev *wdev;
@@ -2387,6 +2394,15 @@ wl_bss_roaming_done(struct wl_cfg80211_p
                     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_roam_info roam_info = {
+               .bssid = wl->profile->bssid,
+               .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;
 
        err = wl_get_assoc_ies(wl);
@@ -2401,12 +2417,17 @@ wl_bss_roaming_done(struct wl_cfg80211_p
                return err;
 
        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);

Reply via email to