From 444c4043db9e8f8e965dc38ad7fdef38e5c0cef9 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Mon, 24 Jul 2017 19:58:56 +0100 Subject: broadcom-sta-dkms : patch for Linux 4.12 changes --- .../broadcom-sta-6.30.223.271-r3-linux-4.7.patch | 14 --- .../broadcom-sta-6.30.223.271-r4-linux-4.11.patch | 52 ++++++++++ .../broadcom-sta-6.30.223.271-r4-linux-4.12.patch | 64 ++++++++++++ .../broadcom-sta-6.30.223.271-r4-linux-4.7.patch | 109 +++++++++++++++++++++ .../broadcom-sta-6.30.223.271-r4-linux-4.8.patch | 64 ++++++++++++ 5 files changed, 289 insertions(+), 14 deletions(-) delete mode 100644 sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r3-linux-4.7.patch create mode 100644 sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.11.patch create mode 100644 sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.12.patch create mode 100644 sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.7.patch create mode 100644 sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.8.patch (limited to 'sys-kernel/broadcom-sta-dkms/files') diff --git a/sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r3-linux-4.7.patch b/sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r3-linux-4.7.patch deleted file mode 100644 index 55b30e34..00000000 --- a/sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r3-linux-4.7.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/src/wl/sys/wl_cfg80211_hybrid.c 2016-08-20 17:19:11.285578121 +0200 -+++ b/src/wl/sys/wl_cfg80211_hybrid.c 2016-08-20 17:20:55.611574041 +0200 -@@ -49,6 +49,11 @@ - u32 wl_dbg_level = WL_DBG_ERR; - #endif - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0) -+#define IEEE80211_BAND_2GHZ NL80211_BAND_2GHZ -+#define IEEE80211_BAND_5GHZ NL80211_BAND_5GHZ -+#endif -+ - static s32 wl_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev, - enum nl80211_iftype type, u32 *flags, struct vif_params *params); - #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0) diff --git a/sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.11.patch b/sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.11.patch new file mode 100644 index 00000000..a779f8c8 --- /dev/null +++ b/sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.11.patch @@ -0,0 +1,52 @@ +diff --git a/src/wl/sys/wl_cfg80211_hybrid.c b/src/wl/sys/wl_cfg80211_hybrid.c +index a9671e2..da36405 100644 +--- a/src/wl/sys/wl_cfg80211_hybrid.c ++++ b/src/wl/sys/wl_cfg80211_hybrid.c +@@ -30,6 +30,9 @@ + #include + #include + #include ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) ++#include ++#endif + #include + #include + #include +diff --git a/src/wl/sys/wl_linux.c b/src/wl/sys/wl_linux.c +index 489c9f5..f8278ad 100644 +--- a/src/wl/sys/wl_linux.c ++++ b/src/wl/sys/wl_linux.c +@@ -117,6 +117,9 @@ int wl_found = 0; + + typedef struct priv_link { + wl_if_t *wlif; ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) ++ unsigned long last_rx; ++#endif + } priv_link_t; + + #define WL_DEV_IF(dev) ((wl_if_t*)((priv_link_t*)DEV_PRIV(dev))->wlif) +@@ -2450,6 +2453,9 @@ wl_monitor(wl_info_t *wl, wl_rxsts_t *rxsts, void *p) + { + struct sk_buff *oskb = (struct sk_buff *)p; + struct sk_buff *skb; ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) ++ priv_link_t *priv_link; ++#endif + uchar *pdata; + uint len; + +@@ -2916,7 +2922,13 @@ wl_monitor(wl_info_t *wl, wl_rxsts_t *rxsts, void *p) + if (skb == NULL) return; + + skb->dev = wl->monitor_dev; ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) ++ priv_link = MALLOC(wl->osh, sizeof(priv_link_t)); ++ priv_link = netdev_priv(skb->dev); ++ priv_link->last_rx = jiffies; ++#else + skb->dev->last_rx = jiffies; ++#endif + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) + skb_reset_mac_header(skb); + #else diff --git a/sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.12.patch b/sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.12.patch new file mode 100644 index 00000000..94c6253f --- /dev/null +++ b/sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.12.patch @@ -0,0 +1,64 @@ +diff -ru work.orig/src/wl/sys/wl_cfg80211_hybrid.c work.patched/src/wl/sys/wl_cfg80211_hybrid.c +--- work.orig/src/wl/sys/wl_cfg80211_hybrid.c 2017-06-10 15:50:27.328823384 -0700 ++++ work.patched/src/wl/sys/wl_cfg80211_hybrid.c 2017-06-10 15:52:40.540809187 -0700 +@@ -52,8 +52,13 @@ + u32 wl_dbg_level = WL_DBG_ERR; + #endif + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) ++static s32 wl_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev, ++ enum nl80211_iftype type, struct vif_params *params); ++#else + static s32 wl_cfg80211_change_iface(struct wiphy *wiphy, struct net_device *ndev, + 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 +471,11 @@ + + 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,12 +2370,26 @@ + 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 = {}; ++#endif + s32 err = 0; + + wl_get_assoc_ies(wl); + memcpy(wl->profile->bssid, &e->addr, ETHER_ADDR_LEN); + memcpy(&wl->bssid, &e->addr, ETHER_ADDR_LEN); + wl_update_bss_info(wl); ++ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 12, 0) ++ roam_info.channel = &wl->conf->channel, ++ roam_info.bssid = (u8 *)&wl->bssid, ++ roam_info.req_ie = conn_info->req_ie, ++ roam_info.req_ie_len = conn_info->req_ie_len, ++ roam_info.resp_ie = conn_info->resp_ie, ++ roam_info.resp_ie_len = conn_info->resp_ie_len, ++ ++ cfg80211_roamed(ndev, &roam_info, GFP_KERNEL); ++#else + cfg80211_roamed(ndev, + #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39) + &wl->conf->channel, +@@ -2374,6 +2397,7 @@ + (u8 *)&wl->bssid, + conn_info->req_ie, conn_info->req_ie_len, + conn_info->resp_ie, conn_info->resp_ie_len, GFP_KERNEL); ++#endif + WL_DBG(("Report roaming result\n")); + + set_bit(WL_STATUS_CONNECTED, &wl->status); diff --git a/sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.7.patch b/sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.7.patch new file mode 100644 index 00000000..566680a0 --- /dev/null +++ b/sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.7.patch @@ -0,0 +1,109 @@ +Since Linux 4.7, the enum ieee80211_band is no longer used + +This shall cause no problem's since both enums ieee80211_band +and nl80211_band were added in the same commit: +https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit?id=13ae75b103e07304a34ab40c9136e9f53e06475c + +This patch refactors the references of IEEE80211_BAND_* to NL80211_BAND_* + +Reference: +https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit?id=57fbcce37be7c1d2622b56587c10ade00e96afa3 + +--- a/src/wl/sys/wl_cfg80211_hybrid.c 2016-06-13 11:57:36.159340297 -0500 ++++ b/src/wl/sys/wl_cfg80211_hybrid.c 2016-06-13 11:58:18.442323435 -0500 +@@ -236,7 +236,7 @@ + #endif + + #define CHAN2G(_channel, _freq, _flags) { \ +- .band = IEEE80211_BAND_2GHZ, \ ++ .band = NL80211_BAND_2GHZ, \ + .center_freq = (_freq), \ + .hw_value = (_channel), \ + .flags = (_flags), \ +@@ -245,7 +245,7 @@ + } + + #define CHAN5G(_channel, _flags) { \ +- .band = IEEE80211_BAND_5GHZ, \ ++ .band = NL80211_BAND_5GHZ, \ + .center_freq = 5000 + (5 * (_channel)), \ + .hw_value = (_channel), \ + .flags = (_flags), \ +@@ -379,7 +379,7 @@ + }; + + static struct ieee80211_supported_band __wl_band_2ghz = { +- .band = IEEE80211_BAND_2GHZ, ++ .band = NL80211_BAND_2GHZ, + .channels = __wl_2ghz_channels, + .n_channels = ARRAY_SIZE(__wl_2ghz_channels), + .bitrates = wl_g_rates, +@@ -387,7 +387,7 @@ + }; + + static struct ieee80211_supported_band __wl_band_5ghz_a = { +- .band = IEEE80211_BAND_5GHZ, ++ .band = NL80211_BAND_5GHZ, + .channels = __wl_5ghz_a_channels, + .n_channels = ARRAY_SIZE(__wl_5ghz_a_channels), + .bitrates = wl_a_rates, +@@ -395,7 +395,7 @@ + }; + + static struct ieee80211_supported_band __wl_band_5ghz_n = { +- .band = IEEE80211_BAND_5GHZ, ++ .band = NL80211_BAND_5GHZ, + .channels = __wl_5ghz_n_channels, + .n_channels = ARRAY_SIZE(__wl_5ghz_n_channels), + .bitrates = wl_a_rates, +@@ -1876,8 +1876,8 @@ + wdev->wiphy->max_num_pmkids = WL_NUM_PMKIDS_MAX; + #endif + wdev->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_ADHOC); +- wdev->wiphy->bands[IEEE80211_BAND_2GHZ] = &__wl_band_2ghz; +- wdev->wiphy->bands[IEEE80211_BAND_5GHZ] = &__wl_band_5ghz_a; ++ wdev->wiphy->bands[NL80211_BAND_2GHZ] = &__wl_band_2ghz; ++ wdev->wiphy->bands[NL80211_BAND_5GHZ] = &__wl_band_5ghz_a; + wdev->wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM; + wdev->wiphy->cipher_suites = __wl_cipher_suites; + wdev->wiphy->n_cipher_suites = ARRAY_SIZE(__wl_cipher_suites); +@@ -2000,7 +2000,7 @@ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 39) + freq = ieee80211_channel_to_frequency(notif_bss_info->channel, + (notif_bss_info->channel <= CH_MAX_2G_CHANNEL) ? +- IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ); ++ NL80211_BAND_2GHZ : NL80211_BAND_5GHZ); + #else + freq = ieee80211_channel_to_frequency(notif_bss_info->channel); + #endif +@@ -2116,7 +2116,7 @@ + return err; + } + chan = wf_chspec_ctlchan(chanspec); +- band = (chan <= CH_MAX_2G_CHANNEL) ? IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ; ++ band = (chan <= CH_MAX_2G_CHANNEL) ? NL80211_BAND_2GHZ : NL80211_BAND_5GHZ; + freq = ieee80211_channel_to_frequency(chan, band); + channel = ieee80211_get_channel(wiphy, freq); + cfg80211_ibss_joined(ndev, (u8 *)&wl->bssid, channel, GFP_KERNEL); +@@ -2250,10 +2250,10 @@ + join_params->params.chanspec_list[0] = + ieee80211_frequency_to_channel(chan->center_freq); + +- if (chan->band == IEEE80211_BAND_2GHZ) { ++ if (chan->band == NL80211_BAND_2GHZ) { + chanspec |= WL_CHANSPEC_BAND_2G; + } +- else if (chan->band == IEEE80211_BAND_5GHZ) { ++ else if (chan->band == NL80211_BAND_5GHZ) { + chanspec |= WL_CHANSPEC_BAND_5G; + } + else { +@@ -2885,7 +2885,7 @@ + + if (phy == 'n' || phy == 'a' || phy == 'v') { + wiphy = wl_to_wiphy(wl); +- wiphy->bands[IEEE80211_BAND_5GHZ] = &__wl_band_5ghz_n; ++ wiphy->bands[NL80211_BAND_5GHZ] = &__wl_band_5ghz_n; + } + + return err; diff --git a/sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.8.patch b/sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.8.patch new file mode 100644 index 00000000..20e8a9ae --- /dev/null +++ b/sys-kernel/broadcom-sta-dkms/files/broadcom-sta-6.30.223.271-r4-linux-4.8.patch @@ -0,0 +1,64 @@ +From d3f93542326a06d920c6eb89b703384290d37b8b Mon Sep 17 00:00:00 2001 +From: Alberto Milone +Date: Fri, 2 Sep 2016 17:35:34 +0200 +Subject: [PATCH 1/1] Add support for Linux 4.8 + +Orginal author: Krzysztof Kolasa +--- + src/wl/sys/wl_cfg80211_hybrid.c | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) + +diff --git a/src/wl/sys/wl_cfg80211_hybrid.c b/src/wl/sys/wl_cfg80211_hybrid.c +index 2fc71fe..ec5e472 100644 +--- a/src/wl/sys/wl_cfg80211_hybrid.c ++++ b/src/wl/sys/wl_cfg80211_hybrid.c +@@ -2388,8 +2388,16 @@ wl_bss_connect_done(struct wl_cfg80211_priv *wl, struct net_device *ndev, + s32 err = 0; + + if (wl->scan_request) { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) ++ struct cfg80211_scan_info info = { ++ .aborted = true, ++ }; ++ WL_DBG(("%s: Aborting scan\n", __FUNCTION__)); ++ cfg80211_scan_done(wl->scan_request, &info); ++#else + WL_DBG(("%s: Aborting scan\n", __FUNCTION__)); + cfg80211_scan_done(wl->scan_request, true); ++#endif + wl->scan_request = NULL; + } + +@@ -2490,7 +2498,14 @@ wl_notify_scan_status(struct wl_cfg80211_priv *wl, struct net_device *ndev, + + scan_done_out: + if (wl->scan_request) { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) ++ struct cfg80211_scan_info info = { ++ .aborted = false, ++ }; ++ cfg80211_scan_done(wl->scan_request, &info); ++#else + cfg80211_scan_done(wl->scan_request, false); ++#endif + wl->scan_request = NULL; + } + rtnl_unlock(); +@@ -2909,7 +2924,14 @@ s32 wl_cfg80211_down(struct net_device *ndev) + s32 err = 0; + + if (wl->scan_request) { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) ++ struct cfg80211_scan_info info = { ++ .aborted = true, ++ }; ++ cfg80211_scan_done(wl->scan_request, &info); ++#else + cfg80211_scan_done(wl->scan_request, true); ++#endif + wl->scan_request = NULL; + } + +-- +2.7.4 + -- cgit v1.2.3