diff -ur broadcom-sta-5.100.82.112.orig/src/wl/sys/wl_cfg80211.c broadcom-sta-5.100.82.112/src/wl/sys/wl_cfg80211.c
--- sys/wl_cfg80211.c	2013-02-25 23:56:44.171538633 +0400
+++ src/wl/sys/wl_cfg80211.c	2013-03-01 11:24:52.932161199 +0400
@@ -42,8 +42,13 @@
            enum nl80211_iftype type, u32 *flags, struct vif_params *params);
 static s32 __wl_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
            struct cfg80211_scan_request *request, struct cfg80211_ssid *this_ssid);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)
+static s32 wl_cfg80211_scan(struct wiphy *wiphy,
+           struct cfg80211_scan_request *request);
+#else
 static s32 wl_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
            struct cfg80211_scan_request *request);
+#endif
 static s32 wl_cfg80211_set_wiphy_params(struct wiphy *wiphy, u32 changed);
 static s32 wl_cfg80211_join_ibss(struct wiphy *wiphy, struct net_device *dev,
            struct cfg80211_ibss_params *params);
@@ -56,7 +61,10 @@
            struct cfg80211_connect_params *sme);
 static s32 wl_cfg80211_disconnect(struct wiphy *wiphy, struct net_device *dev, u16 reason_code);
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
+static s32 wl_cfg80211_set_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
+           enum nl80211_tx_power_setting type, s32 dbm);
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36)
 static s32 wl_cfg80211_set_tx_power(struct wiphy *wiphy,
            enum nl80211_tx_power_setting type, s32 dbm);
 #else
@@ -64,7 +72,11 @@
            enum tx_power_setting type, s32 dbm);
 #endif
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
+static s32 wl_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev, s32 *dbm);
+#else
 static s32 wl_cfg80211_get_tx_power(struct wiphy *wiphy, s32 *dbm);
+#endif
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 38)
 static s32 wl_cfg80211_config_default_key(struct wiphy *wiphy,
@@ -570,10 +582,19 @@
 }
 
 static s32
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)
+wl_cfg80211_scan(struct wiphy *wiphy,
+                 struct cfg80211_scan_request *request)
+#else
 wl_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
                  struct cfg80211_scan_request *request)
+#endif
 {
 	s32 err = 0;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0)
+	struct wl_priv *wl = wiphy_to_wl(wiphy);
+	struct net_device *ndev = wl_to_ndev(wl);
+#endif
 
 	CHECK_SYS_UP();
 	err = __wl_cfg80211_scan(wiphy, ndev, request, NULL);
@@ -742,7 +763,11 @@
 	else
 		memset(&join_params.params.bssid, 0, ETHER_ADDR_LEN);
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
+	wl_ch_to_chanspec(params->chandef.chan, &join_params, &join_params_size);
+#else
 	wl_ch_to_chanspec(params->channel, &join_params, &join_params_size);
+#endif
 
 	err = wl_dev_ioctl(dev, WLC_SET_SSID, &join_params, join_params_size);
 	if (err) {
@@ -1099,7 +1124,10 @@
 	return err;
 }
 
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
+static s32 wl_cfg80211_set_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev,
+           enum nl80211_tx_power_setting type, s32 dbm)
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36)
 static s32
 wl_cfg80211_set_tx_power(struct wiphy *wiphy, enum nl80211_tx_power_setting type, s32 dbm)
 #else
@@ -1158,7 +1186,11 @@
 	return err;
 }
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0)
+static s32 wl_cfg80211_get_tx_power(struct wiphy *wiphy, struct wireless_dev *wdev, s32 *dbm)
+#else
 static s32 wl_cfg80211_get_tx_power(struct wiphy *wiphy, s32 *dbm)
+#endif
 {
 	struct wl_priv *wl = wiphy_to_wl(wiphy);
 	struct net_device *ndev = wl_to_ndev(wl);
@@ -2074,8 +2106,13 @@
 		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->ies->data;
+		ie_len = bss->ies->len;
+#else
 		ie = bss->information_elements;
 		ie_len = bss->len_information_elements;
+#endif
 		beacon_interval = bss->beacon_interval;
 		cfg80211_put_bss(bss);
 	}

