aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/bcmdhd/Makefile2
-rw-r--r--drivers/net/wireless/bcmdhd/dhd_linux.c6
-rw-r--r--drivers/net/wireless/bcmdhd/wl_cfg80211.c7
-rw-r--r--drivers/net/wireless/bcmdhd/wl_cfgp2p.c4
-rw-r--r--net/ipv6/route.c3
5 files changed, 19 insertions, 3 deletions
diff --git a/drivers/net/wireless/bcmdhd/Makefile b/drivers/net/wireless/bcmdhd/Makefile
index 44aaa65..40816c4 100644
--- a/drivers/net/wireless/bcmdhd/Makefile
+++ b/drivers/net/wireless/bcmdhd/Makefile
@@ -8,7 +8,7 @@ DHDCFLAGS = -Wall -Wstrict-prototypes -Dlinux -DBCMDRIVER \
-DNEW_COMPAT_WIRELESS -DWIFI_ACT_FRAME -DARP_OFFLOAD_SUPPORT \
-DKEEP_ALIVE -DCSCAN -DGET_CUSTOM_MAC_ENABLE -DPKT_FILTER_SUPPORT \
-DEMBEDDED_PLATFORM -DENABLE_INSMOD_NO_FW_LOAD -DPNO_SUPPORT \
- -DSET_RANDOM_MAC_SOFTAP -DWL_CFG80211_STA_EVENT \
+ -DSET_RANDOM_MAC_SOFTAP -DWL_CFG80211_STA_EVENT -DSUPPORT_PM2_ONLY \
-Idrivers/net/wireless/bcmdhd -Idrivers/net/wireless/bcmdhd/include
DHDOFILES = aiutils.o bcmsdh_sdmmc_linux.o dhd_linux.o siutils.o bcmutils.o \
diff --git a/drivers/net/wireless/bcmdhd/dhd_linux.c b/drivers/net/wireless/bcmdhd/dhd_linux.c
index 9e9f5b6..476a50a 100644
--- a/drivers/net/wireless/bcmdhd/dhd_linux.c
+++ b/drivers/net/wireless/bcmdhd/dhd_linux.c
@@ -530,7 +530,9 @@ static void dhd_set_packet_filter(int value, dhd_pub_t *dhd)
static int dhd_set_suspend(int value, dhd_pub_t *dhd)
{
+#if !defined(SUPPORT_PM2_ONLY)
int power_mode = PM_MAX;
+#endif
/* wl_pkt_filter_enable_t enable_parm; */
char iovbuf[32];
int bcn_li_dtim = 3;
@@ -546,8 +548,10 @@ static int dhd_set_suspend(int value, dhd_pub_t *dhd)
/* Kernel suspended */
DHD_ERROR(("%s: force extra Suspend setting\n", __FUNCTION__));
+#if !defined(SUPPORT_PM2_ONLY)
dhd_wl_ioctl_cmd(dhd, WLC_SET_PM, (char *)&power_mode,
sizeof(power_mode), TRUE, 0);
+#endif
/* Enable packet filter, only allow unicast packet to send up */
dhd_set_packet_filter(1, dhd);
@@ -570,9 +574,11 @@ static int dhd_set_suspend(int value, dhd_pub_t *dhd)
/* Kernel resumed */
DHD_ERROR(("%s: Remove extra suspend setting\n", __FUNCTION__));
+#if !defined(SUPPORT_PM2_ONLY)
power_mode = PM_FAST;
dhd_wl_ioctl_cmd(dhd, WLC_SET_PM, (char *)&power_mode,
sizeof(power_mode), TRUE, 0);
+#endif
/* disable pkt filter */
dhd_set_packet_filter(0, dhd);
diff --git a/drivers/net/wireless/bcmdhd/wl_cfg80211.c b/drivers/net/wireless/bcmdhd/wl_cfg80211.c
index d653b3e..90c947e 100644
--- a/drivers/net/wireless/bcmdhd/wl_cfg80211.c
+++ b/drivers/net/wireless/bcmdhd/wl_cfg80211.c
@@ -3094,8 +3094,9 @@ wl_cfg80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev,
s32 pm;
s32 err = 0;
struct wl_priv *wl = wiphy_priv(wiphy);
+#if !defined(SUPPORT_PM2_ONLY)
dhd_pub_t *dhd = (dhd_pub_t *)(wl->pub);
-
+#endif
CHECK_SYS_UP(wl);
WL_DBG(("Enter : power save %s\n", (enabled ? "enable" : "disable")));
@@ -3103,7 +3104,11 @@ wl_cfg80211_set_power_mgmt(struct wiphy *wiphy, struct net_device *dev,
return err;
}
+#if !defined(SUPPORT_PM2_ONLY)
pm = enabled ? ((dhd->in_suspend) ? PM_MAX : PM_FAST) : PM_OFF;
+#else
+ pm = enabled ? PM_FAST : PM_OFF;
+#endif
pm = htod32(pm);
err = wldev_ioctl(dev, WLC_SET_PM, &pm, sizeof(pm), true);
if (unlikely(err)) {
diff --git a/drivers/net/wireless/bcmdhd/wl_cfgp2p.c b/drivers/net/wireless/bcmdhd/wl_cfgp2p.c
index aedf970..38c81cf 100644
--- a/drivers/net/wireless/bcmdhd/wl_cfgp2p.c
+++ b/drivers/net/wireless/bcmdhd/wl_cfgp2p.c
@@ -1758,6 +1758,10 @@ wl_cfgp2p_set_p2p_ps(struct wl_priv *wl, struct net_device *ndev, char* buf, int
if (legacy_ps != -1) {
s32 pm = legacy_ps ? PM_MAX : PM_OFF;
+#if defined(SUPPORT_PM2_ONLY)
+ if (pm == PM_MAX)
+ pm = PM_FAST;
+#endif /* SUPPORT_PM2_ONLY */
ret = wldev_ioctl(wl_to_p2p_bss_ndev(wl, P2PAPI_BSSCFG_CONNECTION),
WLC_SET_PM, &pm, sizeof(pm), true);
if (unlikely(ret)) {
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index bbca50a..57ac863 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -1886,7 +1886,8 @@ void rt6_purge_dflt_routers(struct net *net)
restart:
read_lock_bh(&table->tb6_lock);
for (rt = table->tb6_root.leaf; rt; rt = rt->dst.rt6_next) {
- if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) {
+ if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF) &&
+ (!rt->rt6i_idev || rt->rt6i_idev->cnf.accept_ra != 2)) {
dst_hold(&rt->dst);
read_unlock_bh(&table->tb6_lock);
ip6_del_rt(rt);