mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-29 13:46:49 +00:00
bcm_sta: add patch to support kernel 3.8
Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
parent
452ccd8b64
commit
28ff7abd08
@ -0,0 +1,158 @@
|
||||
From 00da4982e9175921cfb26d1377bf49ece3bb41cb Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Saraev <stefan@saraev.ca>
|
||||
Date: Tue, 26 Mar 2013 23:10:17 +0200
|
||||
Subject: [PATCH] linux 3.8 support
|
||||
|
||||
---
|
||||
x86-32/src/include/bcmutils.h | 5 +++++
|
||||
x86-32/src/wl/sys/wl_cfg80211.c | 25 ++++++++++++++++++++++++-
|
||||
x86-64/src/include/bcmutils.h | 4 ++++
|
||||
x86-64/src/wl/sys/wl_cfg80211.c | 25 ++++++++++++++++++++++++-
|
||||
4 files changed, 57 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/x86-32/src/include/bcmutils.h b/x86-32/src/include/bcmutils.h
|
||||
index fa6df04..9a8cab4 100644
|
||||
--- a/x86-32/src/include/bcmutils.h
|
||||
+++ b/x86-32/src/include/bcmutils.h
|
||||
@@ -555,7 +555,12 @@ extern void printbig(char *buf);
|
||||
extern void prhex(const char *msg, uchar *buf, uint len);
|
||||
|
||||
extern bcm_tlv_t *BCMROMFN(bcm_next_tlv)(bcm_tlv_t *elt, int *buflen);
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0)
|
||||
extern bcm_tlv_t *BCMROMFN(bcm_parse_tlvs)(void *buf, int buflen, uint key);
|
||||
+#else
|
||||
+extern bcm_tlv_t *BCMROMFN(bcm_parse_tlvs)(const void *buf, int buflen, uint key);
|
||||
+#endif
|
||||
+
|
||||
extern bcm_tlv_t *BCMROMFN(bcm_parse_ordered_tlvs)(void *buf, int buflen, uint key);
|
||||
|
||||
extern const char *bcmerrorstr(int bcmerror);
|
||||
diff --git a/x86-32/src/wl/sys/wl_cfg80211.c b/x86-32/src/wl/sys/wl_cfg80211.c
|
||||
index 09d04ed..698b004 100644
|
||||
--- a/x86-32/src/wl/sys/wl_cfg80211.c
|
||||
+++ b/x86-32/src/wl/sys/wl_cfg80211.c
|
||||
@@ -744,7 +744,11 @@ wl_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *dev,
|
||||
else
|
||||
memset(&join_params.params.bssid, 0, ETHER_ADDR_LEN);
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0)
|
||||
wl_ch_to_chanspec(params->channel, &join_params, &join_params_size);
|
||||
+#else
|
||||
+ wl_ch_to_chanspec(params->chandef.chan, &join_params, &join_params_size);
|
||||
+#endif
|
||||
|
||||
err = wl_dev_ioctl(dev, WLC_SET_SSID, &join_params, join_params_size);
|
||||
if (err) {
|
||||
@@ -2047,9 +2051,14 @@ static s32 wl_update_bss_info(struct wl_priv *wl)
|
||||
struct bcm_tlv *tim;
|
||||
u16 beacon_interval;
|
||||
s32 dtim_period;
|
||||
+ s32 err = 0;
|
||||
size_t ie_len;
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0)
|
||||
u8 *ie;
|
||||
- s32 err = 0;
|
||||
+#else
|
||||
+ const u8 *ie;
|
||||
+ const struct cfg80211_bss_ies *ies;
|
||||
+#endif
|
||||
|
||||
ssid = &wl->profile->ssid;
|
||||
bss = cfg80211_get_bss(wl_to_wiphy(wl), NULL, (s8 *)&wl->bssid,
|
||||
@@ -2079,8 +2088,22 @@ static s32 wl_update_bss_info(struct wl_priv *wl)
|
||||
beacon_interval = cpu_to_le16(bi->beacon_period);
|
||||
} else {
|
||||
WL_DBG(("Found the AP in the list - BSSID %pM\n", bss->bssid));
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0)
|
||||
ie = bss->information_elements;
|
||||
ie_len = bss->len_information_elements;
|
||||
+#else
|
||||
+ rcu_read_lock();
|
||||
+ ies = (const struct cfg80211_bss_ies*)rcu_dereference(bss->ies);
|
||||
+ if (!ies) {
|
||||
+ /* This should never happen */
|
||||
+ rcu_read_unlock();
|
||||
+ err = -EIO;
|
||||
+ goto update_bss_info_out;
|
||||
+ }
|
||||
+ ie = ies->data;
|
||||
+ ie_len = (size_t)(ies->len);
|
||||
+ rcu_read_unlock();
|
||||
+#endif
|
||||
beacon_interval = bss->beacon_interval;
|
||||
cfg80211_put_bss(bss);
|
||||
}
|
||||
diff --git a/x86-64/src/include/bcmutils.h b/x86-64/src/include/bcmutils.h
|
||||
index fa6df04..1200bf0 100644
|
||||
--- a/x86-64/src/include/bcmutils.h
|
||||
+++ b/x86-64/src/include/bcmutils.h
|
||||
@@ -555,7 +555,11 @@ extern void printbig(char *buf);
|
||||
extern void prhex(const char *msg, uchar *buf, uint len);
|
||||
|
||||
extern bcm_tlv_t *BCMROMFN(bcm_next_tlv)(bcm_tlv_t *elt, int *buflen);
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0)
|
||||
extern bcm_tlv_t *BCMROMFN(bcm_parse_tlvs)(void *buf, int buflen, uint key);
|
||||
+#else
|
||||
+extern bcm_tlv_t *BCMROMFN(bcm_parse_tlvs)(const void *buf, int buflen, uint key);
|
||||
+#endif
|
||||
extern bcm_tlv_t *BCMROMFN(bcm_parse_ordered_tlvs)(void *buf, int buflen, uint key);
|
||||
|
||||
extern const char *bcmerrorstr(int bcmerror);
|
||||
diff --git a/x86-64/src/wl/sys/wl_cfg80211.c b/x86-64/src/wl/sys/wl_cfg80211.c
|
||||
index 94aac25..244243f 100644
|
||||
--- a/x86-64/src/wl/sys/wl_cfg80211.c
|
||||
+++ b/x86-64/src/wl/sys/wl_cfg80211.c
|
||||
@@ -744,7 +744,11 @@ wl_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *dev,
|
||||
else
|
||||
memset(&join_params.params.bssid, 0, ETHER_ADDR_LEN);
|
||||
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0)
|
||||
wl_ch_to_chanspec(params->channel, &join_params, &join_params_size);
|
||||
+#else
|
||||
+ wl_ch_to_chanspec(params->chandef.chan, &join_params, &join_params_size);
|
||||
+#endif
|
||||
|
||||
err = wl_dev_ioctl(dev, WLC_SET_SSID, &join_params, join_params_size);
|
||||
if (err) {
|
||||
@@ -2047,9 +2051,14 @@ static s32 wl_update_bss_info(struct wl_priv *wl)
|
||||
struct bcm_tlv *tim;
|
||||
u16 beacon_interval;
|
||||
s32 dtim_period;
|
||||
+ s32 err = 0;
|
||||
size_t ie_len;
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0)
|
||||
u8 *ie;
|
||||
- s32 err = 0;
|
||||
+#else
|
||||
+ const u8 *ie;
|
||||
+ const struct cfg80211_bss_ies *ies;
|
||||
+#endif
|
||||
|
||||
ssid = &wl->profile->ssid;
|
||||
bss = cfg80211_get_bss(wl_to_wiphy(wl), NULL, (s8 *)&wl->bssid,
|
||||
@@ -2079,8 +2088,22 @@ static s32 wl_update_bss_info(struct wl_priv *wl)
|
||||
beacon_interval = cpu_to_le16(bi->beacon_period);
|
||||
} else {
|
||||
WL_DBG(("Found the AP in the list - BSSID %pM\n", bss->bssid));
|
||||
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0)
|
||||
ie = bss->information_elements;
|
||||
ie_len = bss->len_information_elements;
|
||||
+#else
|
||||
+ rcu_read_lock();
|
||||
+ ies = (const struct cfg80211_bss_ies*)rcu_dereference(bss->ies);
|
||||
+ if (!ies) {
|
||||
+ /* This should never happen */
|
||||
+ rcu_read_unlock();
|
||||
+ err = -EIO;
|
||||
+ goto update_bss_info_out;
|
||||
+ }
|
||||
+ ie = ies->data;
|
||||
+ ie_len = (size_t)(ies->len);
|
||||
+ rcu_read_unlock();
|
||||
+#endif
|
||||
beacon_interval = bss->beacon_interval;
|
||||
cfg80211_put_bss(bss);
|
||||
}
|
||||
--
|
||||
1.7.2.5
|
||||
|
Loading…
x
Reference in New Issue
Block a user