staging: brcm80211: move assert function to dhd_linux.c
[deliverable/linux.git] / drivers / staging / brcm80211 / brcmfmac / dhd_linux.c
index dfbbda708482f041cbb24c8de2402841fd073559..e0cd8e14ec7abb249ea32b91130882afeb737158 100644 (file)
@@ -46,6 +46,9 @@
 #define EPI_VERSION_STR                "4.218.248.5"
 #define ETH_P_BRCM                     0x886c
 
+/* Global ASSERT type flag */
+u32 g_assert_type;
+
 #if defined(CUSTOMER_HW2) && defined(CONFIG_WIFI_CONTROL_FUNC)
 #include <linux/wifi_tiwlan.h>
 
@@ -180,8 +183,6 @@ MODULE_DESCRIPTION("Broadcom 802.11n wireless LAN fullmac driver.");
 MODULE_SUPPORTED_DEVICE("Broadcom 802.11n WLAN fullmac cards");
 MODULE_LICENSE("Dual BSD/GPL");
 
-#define DRV_MODULE_NAME "brcmfmac"
-
 /* Linux wireless extension support */
 #if defined(CONFIG_WIRELESS_EXT)
 #include <wl_iw.h>
@@ -264,6 +265,10 @@ char nvram_path[MOD_PARAM_PATHLEN];
 module_param_string(firmware_path, firmware_path, MOD_PARAM_PATHLEN, 0);
 module_param_string(nvram_path, nvram_path, MOD_PARAM_PATHLEN, 0);
 
+/* No firmware required */
+bool dhd_no_fw_req;
+module_param(dhd_no_fw_req, bool, 0);
+
 /* Error bits */
 module_param(dhd_msg_level, int, 0);
 
@@ -341,10 +346,6 @@ module_param(dhd_idletime, int, 0);
 uint dhd_poll;
 module_param(dhd_poll, uint, 0);
 
-/* Use cfg80211 */
-uint dhd_cfg80211 = true;
-module_param(dhd_cfg80211, uint, 0);
-
 /* Use interrupts */
 uint dhd_intr = true;
 module_param(dhd_intr, uint, 0);
@@ -373,11 +374,6 @@ uint dhd_pktgen_len;
 module_param(dhd_pktgen_len, uint, 0);
 #endif
 
-#define FAVORITE_WIFI_CP       (!!dhd_cfg80211)
-#define IS_CFG80211_FAVORITE() FAVORITE_WIFI_CP
-#define DBG_CFG80211_GET() ((dhd_cfg80211 & WL_DBG_MASK) >> 1)
-#define NO_FW_REQ() (dhd_cfg80211 & 0x80)
-
 /* Version string to report */
 #ifdef DHD_DEBUG
 #define DHD_COMPILED "\nCompiled in " SRCBASE
@@ -400,32 +396,6 @@ static int dhd_toe_set(dhd_info_t *dhd, int idx, u32 toe_ol);
 static int dhd_wl_host_event(dhd_info_t *dhd, int *ifidx, void *pktdata,
                             wl_event_msg_t *event_ptr, void **data_ptr);
 
-#if defined(CONFIG_PM_SLEEP)
-static int dhd_sleep_pm_callback(struct notifier_block *nfb,
-                                unsigned long action, void *ignored)
-{
-       switch (action) {
-       case PM_HIBERNATION_PREPARE:
-       case PM_SUSPEND_PREPARE:
-               atomic_set(&dhd_mmc_suspend, true);
-               return NOTIFY_OK;
-       case PM_POST_HIBERNATION:
-       case PM_POST_SUSPEND:
-               atomic_set(&dhd_mmc_suspend, false);
-               return NOTIFY_OK;
-       }
-       return 0;
-}
-
-static struct notifier_block dhd_sleep_pm_notifier = {
-       .notifier_call = dhd_sleep_pm_callback,
-       .priority = 0
-};
-
-extern int register_pm_notifier(struct notifier_block *nb);
-extern int unregister_pm_notifier(struct notifier_block *nb);
-#endif /* defined(CONFIG_PM_SLEEP) */
-       /* && defined(DHD_GPL) */
 static void dhd_set_packet_filter(int value, dhd_pub_t *dhd)
 {
 #ifdef PKT_FILTER_SUPPORT
@@ -1490,7 +1460,7 @@ static void dhd_ethtool_get_drvinfo(struct net_device *net,
 {
        dhd_info_t *dhd = *(dhd_info_t **) netdev_priv(net);
 
-       sprintf(info->driver, DRV_MODULE_NAME);
+       sprintf(info->driver, KBUILD_MODNAME);
        sprintf(info->version, "%lu", dhd->pub.drv_version);
        sprintf(info->fw_version, "%s", wl_cfg80211_get_fwname());
        sprintf(info->bus_info, "%s", dev_name(&wl_cfg80211_get_sdio_func()->dev));
@@ -1742,9 +1712,7 @@ static int dhd_stop(struct net_device *net)
        dhd_info_t *dhd = *(dhd_info_t **) netdev_priv(net);
 
        DHD_TRACE(("%s: Enter\n", __func__));
-       if (IS_CFG80211_FAVORITE()) {
-               wl_cfg80211_down();
-       }
+       wl_cfg80211_down();
        if (dhd->pub.up == 0)
                return 0;
 
@@ -1794,12 +1762,10 @@ static int dhd_open(struct net_device *net)
        /* Allow transmit calls */
        netif_start_queue(net);
        dhd->pub.up = 1;
-       if (IS_CFG80211_FAVORITE()) {
-               if (unlikely(wl_cfg80211_up())) {
-                       DHD_ERROR(("%s: failed to bring up cfg80211\n",
-                                  __func__));
-                       return -1;
-               }
+       if (unlikely(wl_cfg80211_up())) {
+               DHD_ERROR(("%s: failed to bring up cfg80211\n",
+                          __func__));
+               return -1;
        }
 
        return ret;
@@ -1939,15 +1905,13 @@ dhd_pub_t *dhd_attach(struct dhd_bus *bus, uint bus_hdrlen)
 #endif /* defined(CONFIG_WIRELESS_EXT) */
 
        /* Attach and link in the cfg80211 */
-       if (IS_CFG80211_FAVORITE()) {
-               if (unlikely(wl_cfg80211_attach(net, &dhd->pub))) {
-                       DHD_ERROR(("wl_cfg80211_attach failed\n"));
-                       goto fail;
-               }
-               if (!NO_FW_REQ()) {
-                       strcpy(fw_path, wl_cfg80211_get_fwname());
-                       strcpy(nv_path, wl_cfg80211_get_nvramname());
-               }
+       if (unlikely(wl_cfg80211_attach(net, &dhd->pub))) {
+               DHD_ERROR(("wl_cfg80211_attach failed\n"));
+               goto fail;
+       }
+       if (!dhd_no_fw_req) {
+               strcpy(fw_path, wl_cfg80211_get_fwname());
+               strcpy(nv_path, wl_cfg80211_get_nvramname());
        }
 
        /* Set up the watchdog timer */
@@ -2013,8 +1977,6 @@ dhd_pub_t *dhd_attach(struct dhd_bus *bus, uint bus_hdrlen)
 #endif
 #if defined(CONFIG_PM_SLEEP)
        atomic_set(&dhd_mmc_suspend, false);
-       if (!IS_CFG80211_FAVORITE())
-               register_pm_notifier(&dhd_sleep_pm_notifier);
 #endif /* defined(CONFIG_PM_SLEEP) */
        /* && defined(DHD_GPL) */
        /* Init lock suspend to prevent kernel going to suspend */
@@ -2304,13 +2266,8 @@ void dhd_detach(dhd_pub_t *dhdp)
                        wl_iw_detach();
 #endif                         /* (CONFIG_WIRELESS_EXT) */
 
-                       if (IS_CFG80211_FAVORITE())
-                               wl_cfg80211_detach();
+                       wl_cfg80211_detach();
 
-#if defined(CONFIG_PM_SLEEP)
-                       if (!IS_CFG80211_FAVORITE())
-                               unregister_pm_notifier(&dhd_sleep_pm_notifier);
-#endif /* defined(CONFIG_PM_SLEEP) */
                        /* && defined(DHD_GPL) */
                        free_netdev(ifp->net);
                        kfree(ifp);
@@ -2511,7 +2468,7 @@ void *dhd_os_open_image(char *filename)
 {
        struct file *fp;
 
-       if (IS_CFG80211_FAVORITE() && !NO_FW_REQ())
+       if (!dhd_no_fw_req)
                return wl_cfg80211_request_fw(filename);
 
        fp = filp_open(filename, O_RDONLY, 0);
@@ -2532,7 +2489,7 @@ int dhd_os_get_image_block(char *buf, int len, void *image)
        struct file *fp = (struct file *)image;
        int rdlen;
 
-       if (IS_CFG80211_FAVORITE() && !NO_FW_REQ())
+       if (!dhd_no_fw_req)
                return wl_cfg80211_read_fw(buf, len);
 
        if (!image)
@@ -2547,7 +2504,7 @@ int dhd_os_get_image_block(char *buf, int len, void *image)
 
 void dhd_os_close_image(void *image)
 {
-       if (IS_CFG80211_FAVORITE() && !NO_FW_REQ())
+       if (!dhd_no_fw_req)
                return wl_cfg80211_release_fw();
        if (image)
                filp_close((struct file *)image, NULL);
@@ -2589,26 +2546,10 @@ dhd_wl_host_event(dhd_info_t *dhd, int *ifidx, void *pktdata,
        if (bcmerror != 0)
                return bcmerror;
 
-#if defined(CONFIG_WIRELESS_EXT)
-       if (!IS_CFG80211_FAVORITE()) {
-               if ((dhd->iflist[*ifidx] == NULL)
-                   || (dhd->iflist[*ifidx]->net == NULL)) {
-                       DHD_ERROR(("%s Exit null pointer\n", __func__));
-                       return bcmerror;
-               }
-
-               if (dhd->iflist[*ifidx]->net)
-                       wl_iw_event(dhd->iflist[*ifidx]->net, event, *data);
-       }
-#endif                         /* defined(CONFIG_WIRELESS_EXT)  */
-
-       if (IS_CFG80211_FAVORITE()) {
-               ASSERT(dhd->iflist[*ifidx] != NULL);
-               ASSERT(dhd->iflist[*ifidx]->net != NULL);
-               if (dhd->iflist[*ifidx]->net)
-                       wl_cfg80211_event(dhd->iflist[*ifidx]->net, event,
-                                         *data);
-       }
+       ASSERT(dhd->iflist[*ifidx] != NULL);
+       ASSERT(dhd->iflist[*ifidx]->net != NULL);
+       if (dhd->iflist[*ifidx]->net)
+               wl_cfg80211_event(dhd->iflist[*ifidx]->net, event, *data);
 
        return bcmerror;
 }
@@ -2828,3 +2769,50 @@ exit:
        return ret;
 }
 #endif                         /* DHD_DEBUG */
+
+#if defined(BCMDBG)
+void osl_assert(char *exp, char *file, int line)
+{
+       char tempbuf[256];
+       char *basename;
+
+       basename = strrchr(file, '/');
+       /* skip the '/' */
+       if (basename)
+               basename++;
+
+       if (!basename)
+               basename = file;
+
+       snprintf(tempbuf, 256,
+                "assertion \"%s\" failed: file \"%s\", line %d\n", exp,
+                basename, line);
+
+       /*
+        * Print assert message and give it time to
+        * be written to /var/log/messages
+        */
+       if (!in_interrupt()) {
+               const int delay = 3;
+               printk(KERN_ERR "%s", tempbuf);
+               printk(KERN_ERR "panic in %d seconds\n", delay);
+               set_current_state(TASK_INTERRUPTIBLE);
+               schedule_timeout(delay * HZ);
+       }
+
+       switch (g_assert_type) {
+       case 0:
+               panic(KERN_ERR "%s", tempbuf);
+               break;
+       case 1:
+               printk(KERN_ERR "%s", tempbuf);
+               BUG();
+               break;
+       case 2:
+               printk(KERN_ERR "%s", tempbuf);
+               break;
+       default:
+               break;
+       }
+}
+#endif                         /* defined(BCMDBG) */
This page took 0.027689 seconds and 5 git commands to generate.