bus->ops->wowl_config(bus->dev, enabled);
 }
 
-static inline void brcmf_bus_change_state(struct brcmf_bus *bus,
-                                         enum brcmf_bus_state new_state)
-{
-       brcmf_dbg(TRACE, "%d -> %d\n", bus->state, new_state);
-       bus->state = new_state;
-}
-
 /*
  * interface functions from common layer
  */
 /* Notify the bus has transferred the tx packet to firmware */
 void brcmf_txcomplete(struct device *dev, struct sk_buff *txp, bool success);
 
+/* Configure the "global" bus state used by upper layers */
+void brcmf_bus_change_state(struct brcmf_bus *bus, enum brcmf_bus_state state);
+
 int brcmf_bus_start(struct device *dev);
 s32 brcmf_iovar_data_set(struct device *dev, char *name, void *data, u32 len);
 void brcmf_bus_add_txhdrlen(struct device *dev, uint len);
 
        return !err;
 }
 
+void brcmf_bus_change_state(struct brcmf_bus *bus, enum brcmf_bus_state state)
+{
+       struct brcmf_pub *drvr = bus->drvr;
+       struct net_device *ndev;
+       int ifidx;
+
+       brcmf_dbg(TRACE, "%d -> %d\n", bus->state, state);
+       bus->state = state;
+
+       if (state == BRCMF_BUS_UP) {
+               for (ifidx = 0; ifidx < BRCMF_MAX_IFS; ifidx++) {
+                       if ((drvr->iflist[ifidx]) &&
+                           (drvr->iflist[ifidx]->ndev)) {
+                               ndev = drvr->iflist[ifidx]->ndev;
+                               if (netif_queue_stopped(ndev))
+                                       netif_wake_queue(ndev);
+                       }
+               }
+       }
+}
+
 static void brcmf_driver_register(struct work_struct *work)
 {
 #ifdef CONFIG_BRCMFMAC_SDIO