summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaehoon Chung <jh80.chung@samsung.com>2015-02-10 17:07:05 +0900
committerSeung-Woo Kim <sw0312.kim@samsung.com>2016-12-14 13:44:29 +0900
commita704c333d55af6b574bc22fd2b5e84a08af72d56 (patch)
tree0dc0cfc82aa0744e0dde8251646125ef444725c4
parent1587db93a89ac44776e39d8cbdbc84e4fd793f15 (diff)
local/net: bcm4358: add the exynos5433-tm2 board and version check
Add the ARCH_EXYNOS5433 to use the exynos5433-tm2 board. And checking linux version at build time. Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com> [Remove EXT_VENDOR for 3.18 and later version to build] Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
-rw-r--r--drivers/net/wireless/bcmdhd4358/Makefile5
-rw-r--r--drivers/net/wireless/bcmdhd4358/bcmsdh_linux.c4
-rw-r--r--drivers/net/wireless/bcmdhd4358/dhd.h2
-rw-r--r--drivers/net/wireless/bcmdhd4358/dhd_custom_exynos.c15
-rw-r--r--drivers/net/wireless/bcmdhd4358/dhd_linux.c2
-rw-r--r--drivers/net/wireless/bcmdhd4358/dhd_linux_platdev.c2
-rw-r--r--drivers/net/wireless/bcmdhd4358/dhd_pcie.c4
-rw-r--r--drivers/net/wireless/bcmdhd4358/dhd_sec_feature.h2
-rw-r--r--drivers/net/wireless/bcmdhd4358/include/linuxver.h4
-rw-r--r--drivers/net/wireless/bcmdhd4358/siutils.c2
-rw-r--r--drivers/net/wireless/bcmdhd4358/wl_cfg80211.c25
-rw-r--r--drivers/net/wireless/bcmdhd4358/wl_cfg80211.h1
-rw-r--r--drivers/net/wireless/bcmdhd4358/wl_cfgvendor.h6
13 files changed, 51 insertions, 23 deletions
diff --git a/drivers/net/wireless/bcmdhd4358/Makefile b/drivers/net/wireless/bcmdhd4358/Makefile
index 8f0f15231a9f..60b471153022 100644
--- a/drivers/net/wireless/bcmdhd4358/Makefile
+++ b/drivers/net/wireless/bcmdhd4358/Makefile
@@ -533,6 +533,11 @@ obj-$(CONFIG_MACH_UNIVERSAL7420) += dhd_custom_exynos.o
DHDCFLAGS += -DDHD_OF_SUPPORT
DHDCFLAGS += -DBCMPCIE_OOB_HOST_WAKE
endif
+ifneq ($(CONFIG_ARCH_EXYNOS),)
+obj-$(CONFIG_ARCH_EXYNOS) += dhd_custom_exynos.o
+DHDCFLAGS += -DDHD_OF_SUPPORT
+DHDCFLAGS += -DBCMPCIE_OOB_HOST_WAKE
+endif
ifneq ($(CONFIG_MACH_UNIVERSAL5433),)
obj-$(CONFIG_MACH_UNIVERSAL5433) += dhd_custom_exynos.o
DHDCFLAGS += -DDHD_OF_SUPPORT
diff --git a/drivers/net/wireless/bcmdhd4358/bcmsdh_linux.c b/drivers/net/wireless/bcmdhd4358/bcmsdh_linux.c
index 8e3d6f43c3be..6423cda1a56b 100644
--- a/drivers/net/wireless/bcmdhd4358/bcmsdh_linux.c
+++ b/drivers/net/wireless/bcmdhd4358/bcmsdh_linux.c
@@ -32,7 +32,11 @@
#include <typedefs.h>
#include <linuxver.h>
+#ifdef CONFIG_PCI_TM2
+#include <linux/pci-tm2.h>
+#else
#include <linux/pci.h>
+#endif
#include <linux/completion.h>
#include <osl.h>
diff --git a/drivers/net/wireless/bcmdhd4358/dhd.h b/drivers/net/wireless/bcmdhd4358/dhd.h
index baefe3577a14..ff86f5fbbb24 100644
--- a/drivers/net/wireless/bcmdhd4358/dhd.h
+++ b/drivers/net/wireless/bcmdhd4358/dhd.h
@@ -1175,7 +1175,7 @@ extern void *dhd_pub_wlinfo(dhd_pub_t *dhd_pub);
int dhd_rps_cpus_enable(struct net_device *net, int enable);
int custom_rps_map_set(struct netdev_rx_queue *queue, char *buf, size_t len);
void custom_rps_map_clear(struct netdev_rx_queue *queue);
-#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420)
+#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420) || defined(CONFIG_ARCH_EXYNOS)
#define RPS_CPUS_MASK "10"
#define RPS_CPUS_MASK_P2P "10"
#define RPS_CPUS_MASK_IBSS "10"
diff --git a/drivers/net/wireless/bcmdhd4358/dhd_custom_exynos.c b/drivers/net/wireless/bcmdhd4358/dhd_custom_exynos.c
index 1b0f5bba48e7..9a178ce11a74 100644
--- a/drivers/net/wireless/bcmdhd4358/dhd_custom_exynos.c
+++ b/drivers/net/wireless/bcmdhd4358/dhd_custom_exynos.c
@@ -47,14 +47,14 @@
#include <linux/wlan_plat.h>
#if defined(CONFIG_64BIT)
-#include <asm/gpio.h>
+#include <linux/gpio.h>
#else
#include <mach/gpio.h>
#endif
-#include <mach/irqs.h>
+//#include <mach/irqs.h>
#include <linux/sec_sysfs.h>
-#include <plat/gpio-cfg.h>
+//#include <plat/gpio-cfg.h>
#ifdef CONFIG_BROADCOM_WIFI_RESERVED_MEM
@@ -373,7 +373,8 @@ static int wlan_pwr_on = -1;
int wlan_host_wake_irq = 0;
EXPORT_SYMBOL(wlan_host_wake_irq);
-#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420)
+#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420) || defined(CONFIG_ARCH_EXYNOS)
+
extern void exynos_pcie_poweron(void);
extern void exynos_pcie_poweroff(void);
#endif /* CONFIG_MACH_UNIVERSAL5433 || CONFIG_MACH_UNIVERSAL7420 */
@@ -384,7 +385,7 @@ static int dhd_wlan_power(int onoff)
printk(KERN_INFO"------------------------------------------------\n");
printk(KERN_INFO"%s Enter: power %s\n", __FUNCTION__, onoff ? "on" : "off");
-#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420)
+#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420) || defined(CONFIG_ARCH_EXYNOS)
if (!onoff)
exynos_pcie_poweroff();
@@ -457,7 +458,7 @@ int __init dhd_wlan_init_gpio(void)
}
#ifdef CONFIG_BCMDHD_PCIE
gpio_direction_output(wlan_pwr_on, 1);
-#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420)
+#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420) || defined(CONFIG_ARCH_EXYNOS)
exynos_pcie_poweron(); //Dean
#endif /* CONFIG_MACH_UNIVERSAL5433 || CONFIG_MACH_UNIVERSAL7420 */
#else
@@ -490,7 +491,7 @@ int __init dhd_wlan_init_gpio(void)
#if defined(CONFIG_ARGOS)
void set_cpucore_for_interrupt(cpumask_var_t default_cpu_mask,
cpumask_var_t affinity_cpu_mask) {
-#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420)
+#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420) || defined(CONFIG_ARCH_EXYNOS)
argos_irq_affinity_setup_label(277, "WIFI", affinity_cpu_mask, default_cpu_mask);
#endif /* CONFIG_MACH_UNIVERSAL5433 || CONFIG_MACH_UNIVERSAL7420 */
}
diff --git a/drivers/net/wireless/bcmdhd4358/dhd_linux.c b/drivers/net/wireless/bcmdhd4358/dhd_linux.c
index af40ee151408..e8ba781a20d0 100644
--- a/drivers/net/wireless/bcmdhd4358/dhd_linux.c
+++ b/drivers/net/wireless/bcmdhd4358/dhd_linux.c
@@ -8627,7 +8627,7 @@ static void dhd_hang_process(void *dhd_info, void *event_info, u8 event)
}
#ifdef CUSTOMER_HW4
-#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420)
+#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420) || defined(CONFIG_ARCH_EXYNOS)
extern dhd_pub_t *link_recovery;
void dhd_host_recover_link(void)
{
diff --git a/drivers/net/wireless/bcmdhd4358/dhd_linux_platdev.c b/drivers/net/wireless/bcmdhd4358/dhd_linux_platdev.c
index 6bf9db2e3032..50da47ed0f53 100644
--- a/drivers/net/wireless/bcmdhd4358/dhd_linux_platdev.c
+++ b/drivers/net/wireless/bcmdhd4358/dhd_linux_platdev.c
@@ -244,7 +244,7 @@ void *wifi_platform_get_country_code(wifi_adapter_info_t *adapter, char *ccode)
DHD_TRACE(("%s\n", __FUNCTION__));
if (plat_data->get_country_code) {
- return plat_data->get_country_code(ccode , 0);
+ return plat_data->get_country_code(ccode);
}
#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 39)) */
diff --git a/drivers/net/wireless/bcmdhd4358/dhd_pcie.c b/drivers/net/wireless/bcmdhd4358/dhd_pcie.c
index c50586dce9fd..76b17dd328d2 100644
--- a/drivers/net/wireless/bcmdhd4358/dhd_pcie.c
+++ b/drivers/net/wireless/bcmdhd4358/dhd_pcie.c
@@ -435,7 +435,7 @@ dhdpcie_bus_isr(dhd_bus_t *bus)
}
#ifdef CUSTOMER_HW4
-#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420)
+#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420) || defined(CONFIG_ARCH_EXYNOS)
dhd_pub_t *link_recovery = NULL;
#endif /* CONFIG_MACH_UNIVERSAL5433 || CONFIG_MACH_UNIVERSAL7420*/
#endif /* CUSTOMER_HW4 */
@@ -453,7 +453,7 @@ dhdpcie_dongle_attach(dhd_bus_t *bus)
__FUNCTION__));
#ifdef CUSTOMER_HW4
-#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420)
+#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420) || defined(CONFIG_ARCH_EXYNOS)
link_recovery = bus->dhd;
#endif /* CONFIG_MACH_UNIVERSAL5433 || CONFIG_MACH_UNIVERSAL7420 */
#endif /* CUSTOMER_HW4 */
diff --git a/drivers/net/wireless/bcmdhd4358/dhd_sec_feature.h b/drivers/net/wireless/bcmdhd4358/dhd_sec_feature.h
index febe8d850f8f..35389b920323 100644
--- a/drivers/net/wireless/bcmdhd4358/dhd_sec_feature.h
+++ b/drivers/net/wireless/bcmdhd4358/dhd_sec_feature.h
@@ -84,7 +84,7 @@
#define HW_OOB
#endif /* CONFIG_MACH_SAMSUNG_ESPRESSO && CONFIG_MACH_SAMSUNG_ESPRESSO_10 */
-#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420)
+#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420) || defined(CONFIG_ARCH_EXYNOS)
#undef CUSTOM_SET_CPUCORE
#define PRIMARY_CPUCORE 0
#define DPC_CPUCORE 4
diff --git a/drivers/net/wireless/bcmdhd4358/include/linuxver.h b/drivers/net/wireless/bcmdhd4358/include/linuxver.h
index f3887522c682..f6142fc5cf26 100644
--- a/drivers/net/wireless/bcmdhd4358/include/linuxver.h
+++ b/drivers/net/wireless/bcmdhd4358/include/linuxver.h
@@ -71,7 +71,11 @@
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/string.h>
+#ifdef CONFIG_PCI_TM2
+#include <linux/pci-tm2.h>
+#else
#include <linux/pci.h>
+#endif
#include <linux/interrupt.h>
#include <linux/kthread.h>
#include <linux/netdevice.h>
diff --git a/drivers/net/wireless/bcmdhd4358/siutils.c b/drivers/net/wireless/bcmdhd4358/siutils.c
index 53516d386dfd..dc265f2fa1ea 100644
--- a/drivers/net/wireless/bcmdhd4358/siutils.c
+++ b/drivers/net/wireless/bcmdhd4358/siutils.c
@@ -90,7 +90,7 @@ static void si_config_gcigpio(si_t *sih, uint32 gci_pos, uint8 gcigpio,
#endif /* BCMLTECOEX */
#ifdef CUSTOMER_HW4
-#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420)
+#if defined(CONFIG_MACH_UNIVERSAL5433) || defined(CONFIG_MACH_UNIVERSAL7420) || defined(CONFIG_ARCH_EXYNOS)
extern int check_pcie_link_status(void);
#endif /* CONFIG_MACH_UNIVERSAL5433 || defined(CONFIG_MACH_UNIVERSAL7420) */
#endif /* CUSTOMER_HW4 */
diff --git a/drivers/net/wireless/bcmdhd4358/wl_cfg80211.c b/drivers/net/wireless/bcmdhd4358/wl_cfg80211.c
index c02bb164fdfa..199098f880db 100644
--- a/drivers/net/wireless/bcmdhd4358/wl_cfg80211.c
+++ b/drivers/net/wireless/bcmdhd4358/wl_cfg80211.c
@@ -8832,7 +8832,9 @@ wl_notify_connect_status_ap(struct bcm_cfg80211 *cfg, struct net_device *ndev,
isfree = true;
if (event == WLC_E_ASSOC_IND && reason == DOT11_SC_SUCCESS) {
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 12, 0))
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0))
+ cfg80211_rx_mgmt(ndev, freq, 0, mgmt_frame, len, 0);
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 12, 0))
cfg80211_rx_mgmt(ndev, freq, 0, mgmt_frame, len, 0, GFP_ATOMIC);
#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0)) || \
defined(WL_COMPAT_WIRELESS)
@@ -8841,7 +8843,9 @@ wl_notify_connect_status_ap(struct bcm_cfg80211 *cfg, struct net_device *ndev,
cfg80211_rx_mgmt(ndev, freq, mgmt_frame, len, GFP_ATOMIC);
#endif /* LINUX_VERSION >= VERSION(3, 12, 0) */
} else if (event == WLC_E_DISASSOC_IND) {
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 12, 0))
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0))
+ cfg80211_rx_mgmt(ndev, freq, 0, mgmt_frame, len, 0, GFP_ATOMIC);
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 12, 0))
cfg80211_rx_mgmt(ndev, freq, 0, mgmt_frame, len, 0, GFP_ATOMIC);
#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0)) || \
defined(WL_COMPAT_WIRELESS)
@@ -8850,7 +8854,9 @@ wl_notify_connect_status_ap(struct bcm_cfg80211 *cfg, struct net_device *ndev,
cfg80211_rx_mgmt(ndev, freq, mgmt_frame, len, GFP_ATOMIC);
#endif /* LINUX_VERSION >= VERSION(3, 12, 0) */
} else if ((event == WLC_E_DEAUTH_IND) || (event == WLC_E_DEAUTH)) {
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 12, 0))
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0))
+ cfg80211_rx_mgmt(ndev, freq, 0, mgmt_frame, len, 0);
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 12, 0))
cfg80211_rx_mgmt(ndev, freq, 0, mgmt_frame, len, 0, GFP_ATOMIC);
#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0)) || \
defined(WL_COMPAT_WIRELESS)
@@ -8916,6 +8922,7 @@ wl_notify_connect_status_ibss(struct bcm_cfg80211 *cfg, struct net_device *ndev,
u16 flags = ntoh16(e->flags);
u32 status = ntoh32(e->status);
bool active;
+ struct ieee80211_channel *chan;
if (event == WLC_E_JOIN) {
WL_DBG(("joined in IBSS network\n"));
@@ -8923,6 +8930,8 @@ wl_notify_connect_status_ibss(struct bcm_cfg80211 *cfg, struct net_device *ndev,
if (event == WLC_E_START) {
WL_DBG(("started IBSS network\n"));
}
+
+ chan = ieee80211_get_channel(cfg->wiphy, cfg->channel);
if (event == WLC_E_JOIN || event == WLC_E_START ||
(event == WLC_E_LINK && (flags == WLC_EVENT_MSG_LINK))) {
if (wl_get_drv_status(cfg, CONNECTED, ndev)) {
@@ -8938,7 +8947,7 @@ wl_notify_connect_status_ibss(struct bcm_cfg80211 *cfg, struct net_device *ndev,
wl_get_assoc_ies(cfg, ndev);
wl_update_prof(cfg, ndev, NULL, (void *)&e->addr, WL_PROF_BSSID);
wl_update_bss_info(cfg, ndev, false);
- cfg80211_ibss_joined(ndev, (s8 *)&e->addr, GFP_KERNEL);
+ cfg80211_ibss_joined(ndev, (s8 *)&e->addr, chan, GFP_KERNEL);
}
else {
/* New connection */
@@ -8947,7 +8956,7 @@ wl_notify_connect_status_ibss(struct bcm_cfg80211 *cfg, struct net_device *ndev,
wl_get_assoc_ies(cfg, ndev);
wl_update_prof(cfg, ndev, NULL, (void *)&e->addr, WL_PROF_BSSID);
wl_update_bss_info(cfg, ndev, false);
- cfg80211_ibss_joined(ndev, (s8 *)&e->addr, GFP_KERNEL);
+ cfg80211_ibss_joined(ndev, (s8 *)&e->addr, chan, GFP_KERNEL);
wl_set_drv_status(cfg, CONNECTED, ndev);
active = true;
wl_update_prof(cfg, ndev, NULL, (void *)&active, WL_PROF_ACT);
@@ -10092,8 +10101,9 @@ wl_notify_rx_mgmt_frame(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
}
}
}
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 12, 0))
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0))
+ cfg80211_rx_mgmt(cfgdev, freq, 0, mgmt_frame, mgmt_frame_len, 0);
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 12, 0))
cfg80211_rx_mgmt(cfgdev, freq, 0, mgmt_frame, mgmt_frame_len, 0, GFP_ATOMIC);
#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 0)) || \
defined(WL_COMPAT_WIRELESS)
@@ -11524,6 +11534,7 @@ s32 wl_cfg80211_attach(struct net_device *ndev, void *context)
ndev->ieee80211_ptr = wdev;
SET_NETDEV_DEV(ndev, wiphy_dev(wdev->wiphy));
wdev->netdev = ndev;
+ cfg->wiphy = wdev->wiphy;
cfg->state_notifier = wl_notifier_change_state;
err = wl_alloc_netinfo(cfg, ndev, wdev, WL_MODE_BSS, PM_ENABLE);
if (err) {
diff --git a/drivers/net/wireless/bcmdhd4358/wl_cfg80211.h b/drivers/net/wireless/bcmdhd4358/wl_cfg80211.h
index 0e11877a0418..2ec17b496fbb 100644
--- a/drivers/net/wireless/bcmdhd4358/wl_cfg80211.h
+++ b/drivers/net/wireless/bcmdhd4358/wl_cfg80211.h
@@ -520,6 +520,7 @@ typedef struct wl_if_event_info {
/* private data of cfg80211 interface */
struct bcm_cfg80211 {
+ struct wiphy *wiphy;
struct wireless_dev *wdev; /* representing cfg cfg80211 device */
struct wireless_dev *p2p_wdev; /* representing cfg cfg80211 device for P2P */
diff --git a/drivers/net/wireless/bcmdhd4358/wl_cfgvendor.h b/drivers/net/wireless/bcmdhd4358/wl_cfgvendor.h
index 76726833fef2..7d279e47e668 100644
--- a/drivers/net/wireless/bcmdhd4358/wl_cfgvendor.h
+++ b/drivers/net/wireless/bcmdhd4358/wl_cfgvendor.h
@@ -28,9 +28,11 @@
#ifndef _wl_cfgvendor_h_
#define _wl_cfgvendor_h_
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0))
#if (LINUX_VERSION_CODE > KERNEL_VERSION(3, 14, 0)) && !defined(VENDOR_EXT_SUPPORT)
#define VENDOR_EXT_SUPPORT
#endif /* LINUX_VERSION_CODE > KERNEL_VERSION(3, 14, 0) && !VENDOR_EXT_SUPPORT */
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3, 18, 0) */
enum wl_vendor_event {
BRCM_VENDOR_EVENT_UNSPEC,
@@ -44,8 +46,8 @@ enum wl_vendor_event {
extern int cfgvendor_attach(struct wiphy *wiphy);
extern int cfgvendor_detach(struct wiphy *wiphy);
#else
-static INLINE int cfgvendor_attach(struct wiphy *wiphy) { return 0; }
-static INLINE int cfgvendor_detach(struct wiphy *wiphy) { return 0; }
+static inline int cfgvendor_attach(struct wiphy *wiphy) { return 0; }
+static inline int cfgvendor_detach(struct wiphy *wiphy) { return 0; }
#endif /* VENDOR_EXT_SUPPORT */
#endif /* _wl_cfgvendor_h_ */