[RAMEN9610-8686][common] wlbt: Logging Improvements in driver code
authorIvan Priest <i.priest@samsung.com>
Fri, 24 Aug 2018 08:25:52 +0000 (09:25 +0100)
committerhskang <hs1218.kang@samsung.com>
Wed, 21 Nov 2018 01:07:10 +0000 (10:07 +0900)
1. fix WEP key length
2. generate sable tar on wifi disconnect
3. Create BT config log client
4. Serialize log collection.
5. Fixed race condition in MXLOGGER

Change-Id: I961bc71b840927491a4e7ae25a9cd4d50d0c0cb6
Signed-off-by: Ivan Priest <i.priest@samsung.com>
30 files changed:
drivers/misc/samsung/scsc/mx140_file.c
drivers/misc/samsung/scsc/mxlogger.c
drivers/misc/samsung/scsc/mxlogger.h
drivers/misc/samsung/scsc/platform_mif.c
drivers/misc/samsung/scsc/scsc_log_collector.c
drivers/misc/samsung/scsc/scsc_wlbtd.c
drivers/misc/samsung/scsc/tags [deleted file]
drivers/misc/samsung/scsc_bt/scsc_bt_module.c
drivers/misc/samsung/scsc_bt/scsc_bt_priv.h
drivers/misc/samsung/scsc_bt/scsc_shm.c
drivers/net/wireless/scsc/Kconfig
drivers/net/wireless/scsc/cfg80211_ops.c
drivers/net/wireless/scsc/dev.h
drivers/net/wireless/scsc/hip4.c
drivers/net/wireless/scsc/hip4_sampler.c
drivers/net/wireless/scsc/hip4_smapper.c
drivers/net/wireless/scsc/ioctl.c
drivers/net/wireless/scsc/mgt.c
drivers/net/wireless/scsc/mgt.h
drivers/net/wireless/scsc/mlme.c
drivers/net/wireless/scsc/mlme.h
drivers/net/wireless/scsc/netif.c
drivers/net/wireless/scsc/nl80211_vendor.c
drivers/net/wireless/scsc/procfs.c
drivers/net/wireless/scsc/rx.c
drivers/net/wireless/scsc/sap_ma.c
drivers/net/wireless/scsc/test/hydra_test.c
include/scsc/scsc_log_collector.h
include/scsc/scsc_mx.h
include/scsc/scsc_release.h

index 4ee6d6ed33162f9a0bd2306f9f634cbbd05624d6..75f9cac47e8fa4d503141775b09af3417e5490a3 100644 (file)
@@ -126,31 +126,55 @@ MODULE_PARM_DESC(cfg_platform, "HCF config subdirectory");
 static int __mx140_file_request_conf(struct scsc_mx *mx,
                const struct firmware **conf,
                const char *platform_dir,
-               const char *config_rel_path)
+               const char *config_rel_path,
+               const char *filename,
+               const bool flat)
 
 {
-       char          config_path[MX140_FW_PATH_MAX_LENGTH];
+       char config_path[MX140_FW_PATH_MAX_LENGTH];
+       int r;
 
        if (mx140_basedir_file(mx))
                return -ENOENT;
 
-       /* e.g. /etc/wifi/mx140/conf/$platform_dir/wlan/wlan.hcf */
-
-       scnprintf(config_path, sizeof(config_path), "%s/%s%s/%s/%s%s%s",
-               base_dir,
-               firmware_variant,
-               fw_suffixes[fw_suffix_found].suffix,
-               MX140_FW_CONF_SUBDIR,
-               platform_dir,
-               (platform_dir[0] != '\0' ? "/" : ""), /* add "/" if platform_dir not empty */
-               config_rel_path);
+       if (flat) {
+               /* e.g. /etc/wifi/mx140_wlan.hcf */
 
+               scnprintf(config_path, sizeof(config_path),
+                       "%s/%s%s_%s",
+                       base_dir,
+                       firmware_variant,
+                       fw_suffixes[fw_suffix_found].suffix,
+                       filename);
+       } else {
+               /* e.g. /etc/wifi/mx140/conf/$platform_dir/wlan/wlan.hcf */
+
+               scnprintf(config_path, sizeof(config_path),
+                       "%s/%s%s/%s/%s%s%s/%s",
+                       base_dir,
+                       firmware_variant,
+                       fw_suffixes[fw_suffix_found].suffix,
+                       MX140_FW_CONF_SUBDIR,
+                       platform_dir,
+                       (platform_dir[0] != '\0' ? "/" : ""), /* add "/" if platform_dir not empty */
+                       config_rel_path,
+                       filename);
+       }
        SCSC_TAG_INFO(MX_FILE, "try %s\n", config_path);
 
-       return mx140_request_file(mx, config_path, conf);
+       r = mx140_request_file(mx, config_path, conf);
+
+       /* Confirm what we read */
+       if (r == 0)
+               SCSC_TAG_INFO(MX_FILE, "loaded %s\n", config_path);
+
+       return r;
 }
 
-int mx140_file_request_conf(struct scsc_mx *mx, const struct firmware **conf, const char *config_rel_path)
+int mx140_file_request_conf(struct scsc_mx *mx,
+                           const struct firmware **conf,
+                           const char *config_rel_path,
+                           const char *filename)
 {
        int r;
 
@@ -159,13 +183,13 @@ int mx140_file_request_conf(struct scsc_mx *mx, const struct firmware **conf, co
         */
        if (strcmp(cfg_platform, "default")) {
                SCSC_TAG_INFO(MX_FILE, "module param cfg_platform = %s\n", cfg_platform);
-               return __mx140_file_request_conf(mx, conf, cfg_platform, config_rel_path);
+               return __mx140_file_request_conf(mx, conf, cfg_platform, config_rel_path, filename, false);
        }
 
        /* Search in generic location. This is an override.
         * e.g. /etc/wifi/mx140/conf/wlan/wlan.hcf
         */
-       r = __mx140_file_request_conf(mx, conf, "", config_rel_path);
+       r = __mx140_file_request_conf(mx, conf, "", config_rel_path, filename, false);
 
 #if defined CONFIG_SCSC_WLBT_CONFIG_PLATFORM
        /* Then  search in platform location
@@ -176,9 +200,16 @@ int mx140_file_request_conf(struct scsc_mx *mx, const struct firmware **conf, co
 
                /* Don't bother if plat is empty string */
                if (plat[0] != '\0')
-                       r = __mx140_file_request_conf(mx, conf, plat, config_rel_path);
+                       r = __mx140_file_request_conf(mx, conf, plat, config_rel_path, filename, false);
        }
 #endif
+
+       /* Finally request "flat" conf, where all hcf files are in FW root dir
+        * e.g. /etc/wifi/<firmware-variant>-wlan.hcf
+        */
+       if (r)
+               r = __mx140_file_request_conf(mx, conf, "", config_rel_path, filename, true);
+
        return r;
 }
 
index de1c49e340b75af0b758a9ea44a59b52db0388ca..8d0192c833e3d0508058f8f6dab35e0bd4480769 100644 (file)
@@ -38,15 +38,23 @@ bool mxlogger_set_enabled_status(bool enable)
 }
 EXPORT_SYMBOL(mxlogger_set_enabled_status);
 
-static bool mxlogger_forced_to_host = true;
+static bool mxlogger_forced_to_host;
 
 static void update_fake_observer(void)
 {
+       static bool mxlogger_fake_observers_registered;
+
        if (mxlogger_forced_to_host) {
-               mxlogger_register_global_observer("FAKE_OBSERVER");
+               if (!mxlogger_fake_observers_registered) {
+                       mxlogger_register_global_observer("FAKE_OBSERVER");
+                       mxlogger_fake_observers_registered = true;
+               }
                SCSC_TAG_INFO(MXMAN, "MXLOGGER is now FORCED TO HOST.\n");
        } else {
-               mxlogger_unregister_global_observer("FAKE_OBSERVER");
+               if (mxlogger_fake_observers_registered) {
+                       mxlogger_unregister_global_observer("FAKE_OBSERVER");
+                       mxlogger_fake_observers_registered = false;
+               }
                SCSC_TAG_INFO(MXMAN, "MXLOGGER is now operating NORMALLY.\n");
        }
 }
@@ -262,12 +270,15 @@ int mxlogger_generate_sync_record(struct mxlogger *mxlogger, enum mxlogger_sync_
        return r;
 }
 
+static void mxlogger_wait_for_msg_reinit_completion(struct mxlogger *mxlogger)
+{
+       reinit_completion(&mxlogger->rings_serialized_ops);
+}
+
 static bool mxlogger_wait_for_msg_reply(struct mxlogger *mxlogger)
 {
        int ret;
 
-       reinit_completion(&mxlogger->rings_serialized_ops);
-
        ret = wait_for_completion_timeout(&mxlogger->rings_serialized_ops, usecs_to_jiffies(MXLOGGER_RINGS_TMO_US));
        if (ret) {
                int i;
@@ -293,6 +304,11 @@ static inline void __mxlogger_enable(struct mxlogger *mxlogger, bool enable, uin
        msg.arg = (enable) ? MM_MXLOGGER_LOGGER_ENABLE : MM_MXLOGGER_LOGGER_DISABLE;
        msg.payload[0] = reason;
 
+       /* Reinit the completion before sending the message over cpacketbuffer
+        * otherwise there might be a race condition
+        */
+       mxlogger_wait_for_msg_reinit_completion(mxlogger);
+
        mxmgmt_transport_send(scsc_mx_get_mxmgmt_transport(mxlogger->mx),
                              MMTRANS_CHAN_ID_MAXWELL_LOGGING,
                              &msg, sizeof(msg));
@@ -318,6 +334,12 @@ static int mxlogger_send_config(struct mxlogger *mxlogger)
        msg.msg = MM_MXLOGGER_CONFIG_CMD;
        msg.arg = MM_MXLOGGER_CONFIG_BASE_ADDR;
        memcpy(&msg.payload, &mxlogger->mifram_ref, sizeof(mxlogger->mifram_ref));
+
+       /* Reinit the completion before sending the message over cpacketbuffer
+        * otherwise there might be a race condition
+        */
+       mxlogger_wait_for_msg_reinit_completion(mxlogger);
+
        mxmgmt_transport_send(scsc_mx_get_mxmgmt_transport(mxlogger->mx),
                              MMTRANS_CHAN_ID_MAXWELL_LOGGING,
                              &msg, sizeof(msg));
@@ -491,12 +513,7 @@ int mxlogger_init(struct scsc_mx *mx, struct mxlogger *mxlogger, uint32_t mem_sz
 
        MEM_LAYOUT_CHECK();
 
-       if (!is_power_of_2(mem_sz)) {
-               SCSC_TAG_ERR(MXMAN, "MXLOGGER size should be power of 2\n");
-               return -EIO;
-       }
-
-       if (mem_sz <= (sizeof(struct mxlogger_config_area) + MXLOGGER_IMP_SIZE)) {
+       if (mem_sz <= (sizeof(struct mxlogger_config_area) + MXLOGGER_TOTAL_FIX_BUF)) {
                SCSC_TAG_ERR(MXMAN, "Insufficient memory allocation\n");
                return -EIO;
        }
@@ -567,7 +584,11 @@ int mxlogger_init(struct scsc_mx *mx, struct mxlogger *mxlogger, uint32_t mem_sz
 
        /* Compute buffer locations and size based on the remaining space */
        remaining_mem = mem_sz - (sizeof(struct mxlogger_config_area) + MXLOGGER_TOTAL_FIX_BUF);
-       udi_mxl_mem_sz = remaining_mem >> 1;
+
+       /* Align the buffer to be cache friendly */
+       udi_mxl_mem_sz = (remaining_mem >> 1) & ~(MXLOGGER_NON_FIX_BUF_ALIGN - 1);
+
+       SCSC_TAG_INFO(MXMAN, "remaining_mem %zu udi/mxlogger size %zu\n", remaining_mem, udi_mxl_mem_sz);
 
        cfg->bfds[MXLOGGER_MXLOG].location =
                cfg->bfds[MXLOGGER_MXLOG - 1].location +
@@ -649,8 +670,8 @@ int mxlogger_init(struct scsc_mx *mx, struct mxlogger *mxlogger, uint32_t mem_sz
        mxlogger_collect_client_mxl.prv = mxlogger;
        scsc_log_collector_register_client(&mxlogger_collect_client_mxl);
 #endif
-
-       SCSC_TAG_INFO(MXMAN, "MXLOGGER Initialized.\n");
+       mxlogger->configured = true;
+       SCSC_TAG_INFO(MXMAN, "MXLOGGER Configured\n");
        return 0;
 }
 
@@ -661,6 +682,11 @@ int mxlogger_start(struct mxlogger *mxlogger)
                return -1;
        }
 
+       if (!mxlogger || !mxlogger->configured) {
+               SCSC_TAG_WARNING(MXMAN, "MXLOGGER is not valid or not configured.\n");
+               return -1;
+       }
+
        SCSC_TAG_INFO(MXMAN, "Starting mxlogger with %d observer[s]\n", mxlogger->observers);
 
        mutex_lock(&mxlogger->lock);
@@ -694,7 +720,7 @@ int mxlogger_start(struct mxlogger *mxlogger)
                mxlogger_enable(mxlogger, true);
        }
 
-       SCSC_TAG_INFO(MXMAN, "MXLOGGER Configured.\n");
+       SCSC_TAG_INFO(MXMAN, "MXLOGGER Started.\n");
        mutex_unlock(&mxlogger->lock);
 
        return 0;
@@ -720,6 +746,7 @@ void mxlogger_deinit(struct scsc_mx *mx, struct mxlogger *mxlogger)
        scsc_log_collector_unregister_client(&mxlogger_collect_client_udi);
 #endif
        mutex_lock(&mxlogger->lock);
+       mxlogger->configured = false;
        mxlogger->initialized = false;
        mxlogger_to_host(mxlogger);
        mxlogger_enable(mxlogger, false);
index deabe38e7f45b303f29a800932673bbd162c704d..ad80abd7c3b5cadeab394a08c515df84e3cb030f 100644 (file)
@@ -33,7 +33,7 @@
  *
  */
 
-#define MXL_POOL_SZ                    (4 * 1024 * 1024)
+#define MXL_POOL_SZ                    (6 * 1024 * 1024)
 
 #define        MXLOGGER_RINGS_TMO_US           200000
 
 #define MXLOGGER_IMP_SIZE              (102 * 1024)
 #define MXLOGGER_RSV_COMMON_SZ         (4 * 1024)
 #define MXLOGGER_RSV_BT_SZ             (4 * 1024)
-#define MXLOGGER_RSV_WLAN_SZ           (4 * 1024)
+#define MXLOGGER_RSV_WLAN_SZ           (2 * 1024 * 1024)
 #define MXLOGGER_RSV_RADIO_SZ          (4 * 1024)
 
 #define MXLOGGER_TOTAL_FIX_BUF         (MXLOGGER_SYNC_SIZE + MXLOGGER_IMP_SIZE + \
                                        MXLOGGER_RSV_COMMON_SZ + MXLOGGER_RSV_BT_SZ + \
                                        MXLOGGER_RSV_WLAN_SZ + MXLOGGER_RSV_RADIO_SZ)
-/* Add further buffers in pow2 size */
+
+#define MXLOGGER_NON_FIX_BUF_ALIGN     32
 
 #define MXLOGGER_MAGIG_NUMBER          0xcaba0401
 #define MXLOGGER_MAJOR                 0
@@ -155,7 +156,7 @@ struct mxlogger_sync_record {
 
 struct buffer_desc {
        u32 location;                   /* Buffer location */
-       u32 size;                       /* Buffer sz (in bytes) */
+       u32 size;                       /* Buffer sz (in bytes) */
        u32 status;                     /* buffer status */
        u32 info;                       /* buffer info */
 } __packed;
@@ -169,8 +170,8 @@ struct mxlogger_config {
 } __packed;
 
 struct mxlogger_config_area {
-       struct  mxlogger_config  config;
-       struct  buffer_desc      bfds[MXLOGGER_NUM_BUFFERS];
+       struct mxlogger_config  config;
+       struct buffer_desc      bfds[MXLOGGER_NUM_BUFFERS];
        uint8_t *buffers_start;
 } __packed;
 
@@ -182,6 +183,7 @@ struct log_msg_packet {
 
 struct mxlogger {
        bool                            initialized;
+       bool                            configured;
        bool                            enabled;
        struct scsc_mx                  *mx;
        void                            *mem;
@@ -189,7 +191,7 @@ struct mxlogger {
        uint32_t                        msz;
        scsc_mifram_ref                 mifram_ref;
        struct mutex                    lock;
-       struct mxlogger_config_area     *cfg;
+       struct mxlogger_config_area     *cfg;
        u8                              observers;
        u8                              sync_buffer_index;
        /* collection variables */
@@ -209,8 +211,9 @@ int mxlogger_unregister_global_observer(char *name);
 bool mxlogger_set_enabled_status(bool enable);
 
 #define MEM_LAYOUT_CHECK()     \
- ({                            \
+({                             \
        BUILD_BUG_ON((sizeof(struct mxlogger_sync_record) * NUM_SYNC_RECORDS) >  MXLOGGER_SYNC_SIZE); \
- })
+       BUILD_BUG_ON((MXLOGGER_TOTAL_FIX_BUF + sizeof(struct mxlogger_config_area))  > MXL_POOL_SZ); \
+})
 
 #endif /* __MX_LOGGER_H__ */
index 5008149337e5e0ffca2b8cfd959fec7a6402da1a..9793a816df178b5f77c0306815b79f4d598ee756 100755 (executable)
@@ -659,76 +659,71 @@ irqreturn_t platform_wdog_isr(int irq, void *data)
  * be programmed using the CBUS during the config phase.
  */
 uint32_t ka_patch[] = {
-       /* Spurious cfg_req fix #2
+       /* Power save fix #2
         * Maxwell142 PMU+PROC combined boot ROM
         * IP Version: 0xA3
         * Major Version: 0xF, Minor Version: 0xF
-        * PMU ROM version: 0x2
+        * PMU ROM version: 0x4
         * PROC  ROM version: 0x0
         */
        0x90750002,
-       0x00207518,
-       0xa611a4c2,
-       0x90757911,
-       0x012075e0,
-       0xe5e79075,
-       0x600154b3,
-       0x18a230f7,
-       0xe503b143,
-       0xfb03b4b2,
-       0x74fcb153,
-       0x02207507,
-       0xadb5acf5,
-       0x032075fd,
-       0x7508a075,
-       0xb4750420,
-       0x05207501,
-       0x0154b3e5,
-       0xb475fa70,
-       0x18907500,
-       0x80062075,
-       0x798278bf,
-       0x75b98083,
-       0x377907a0,
-       0x54e6b078,
-       0x0207b407,
-       0xf6d90b80,
-       0x90f5c404,
-       0x8000af75,
-       0x90907503,
-       0xeff75322,
-       0x79fece53,
-       0x53fed904,
-       0x0c79fdce,
-       0xce53fed9,
-       0x2b9275fb,
-       0x53019375,
-       0xce53fd91,
-       0x08f943f7,
-       0x22fef953,
-       0xd8fed9f9,
-       0x9e7522fb,
-       0xcfc17501,
-       0x75a4c275,
-       0xc4750ac3,
-       0xa4c57547,
-       0x756cc675,
-       0xd27540c7,
-       0x10d37503,
-       0x7500c975,
-       0xcb75d0ca,
-       0x00cc7500,
-       0x75009a75,
-       0x9c75c09b,
-       0x009d7500,
-       0x82740278,
-       0x43a08012,
-       0x057802c6,
-       0x8012d074,
-       0xd09075a0,
-       0x75029175,
-       0xa975029e,
-       0x00002201,
+       0x11a4c218,
+       0x75671191,
+       0x9075e090,
+       0x54b3e5e7,
+       0x30f76001,
+       0xb14315a2,
+       0xb4b2e503,
+       0xb153fb03,
+       0xa90185fc,
+       0xacf50774,
+       0x75fdadb5,
+       0xb47508a0,
+       0x54b3e501,
+       0x75fa7001,
+       0x907500b4,
+       0x78cb8018,
+       0x80837982,
+       0x07a075c5,
+       0xb0783779,
+       0xb40754e6,
+       0x0b800207,
+       0xc404f6d9,
+       0xaf7590f5,
+       0x75038000,
+       0x53229090,
+       0xce53eff7,
+       0xd90479fe,
+       0xfdce53fe,
+       0xfed90c79,
+       0x75fbce53,
+       0x91530b92,
+       0xf7ce53fd,
+       0x5308f943,
+       0xf922fef9,
+       0xfbd8fed9,
+       0x019e7522,
+       0x75cfc175,
+       0xc375a4c2,
+       0x47c4750a,
+       0x75a4c575,
+       0xc7756cc6,
+       0x03d27540,
+       0x7510d375,
+       0xca7500c9,
+       0x00cb75d0,
+       0x7500cc75,
+       0x9b75009a,
+       0x009c75c0,
+       0x78009d75,
+       0x12827402,
+       0xc6438b80,
+       0x74057802,
+       0x8b8012d0,
+       0x75d09075,
+       0x9e750291,
+       0x01a97502,
+       0x00000022,
 };
 
 extern bool reset_failed;
@@ -1318,10 +1313,8 @@ static int platform_mif_pmu_reset(struct scsc_mif_abs *interface, u8 rst_case)
                return ret;
        }
 
-       if (rst_case == 1)
-               ret = platform_mif_power(interface, false);
-       else
-               ret = platform_mif_hold_reset(interface, true);
+       /* rst_case is always 2 on 9610 */
+       ret = platform_mif_hold_reset(interface, true);
 
        if (ret)
                return ret;
@@ -1331,8 +1324,16 @@ static int platform_mif_pmu_reset(struct scsc_mif_abs *interface, u8 rst_case)
                regmap_read(platform->pmureg, CENTRAL_SEQ_WLBT_STATUS, &val);
                val &= STATES;
                val >>= 16;
-               if (val == 0x80)
-                       return 0;       /* OK - return */
+               if (val == 0x80) {
+                       /* OK. Switch CTRL_NS[MASK_PWR_REQ] ownership to FW following
+                        * reset. WLBT PWR_REQ is cleared when it's put in reset.
+                        * The SW PWR_REQ remains asserted, but as ownership is now FW,
+                        * it'll be ignored. This leaves it as we found it.
+                        */
+                       platform_mif_power(interface, false);
+
+                       return 0; /* OK - return */
+               }
        } while (time_before(jiffies, timeout));
 
        SCSC_TAG_ERR_DEV(PLAT_MIF, platform->dev,
index c91f777f1a7dc4b6678cd00a248d7dff67328657..9eb031d1454e0a981a242622711179de43c10f84 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/list_sort.h>
 #include <linux/limits.h>
 #include <linux/workqueue.h>
+#include <linux/completion.h>
 
 #include <scsc/scsc_log_collector.h>
 #include "scsc_log_collector_proc.h"
@@ -110,6 +111,8 @@ struct scsc_log_status {
        struct work_struct      collect_work;
        enum scsc_log_reason    collect_reason;
        u16 reason_code;
+       struct completion complete;
+       struct mutex collection_serial;
 } log_status;
 
 static DEFINE_MUTEX(log_mutex);
@@ -121,8 +124,10 @@ static void collection_worker(struct work_struct *work)
        ls = container_of(work, struct scsc_log_status, collect_work);
        if (!ls)
                return;
-       pr_info("SCSC running scheduled Log Collection - reason:%d\n", ls->collect_reason);
+       pr_info("SCSC running scheduled Log Collection - collect reason:%d reason code:%d\n",
+                ls->collect_reason, ls->reason_code);
        scsc_log_collector_collect(ls->collect_reason, ls->reason_code);
+       complete(&log_status.complete);
 }
 
 /* Module init */
@@ -146,6 +151,9 @@ int __init scsc_log_collector(void)
                log_status.buf = NULL;
        }
 
+       init_completion(&log_status.complete);
+       mutex_init(&log_status.collection_serial);
+
        scsc_log_collect_proc_create();
        scsc_log_collector_mmap_create();
        return 0;
@@ -463,7 +471,7 @@ static int scsc_log_collector_collect(enum scsc_log_reason reason, u16 reason_co
        int ret = -1;
 
        if (sable_collection_off) {
-               pr_info("Sable Log Collection is currently DISABLED (sable_collection_off=Y).\n");
+               pr_info("Sable Log collection is currently DISABLED (sable_collection_off=Y).\n");
                pr_info("Ignoring incoming Sable Collection request with Reason=%d.\n", reason);
                return ret;
        }
@@ -478,12 +486,21 @@ static int scsc_log_collector_collect(enum scsc_log_reason reason, u16 reason_co
 
 void scsc_log_collector_schedule_collection(enum scsc_log_reason reason, u16 reason_code)
 {
+       int err;
+
        if (log_status.collection_workq) {
+               mutex_lock(&log_status.collection_serial);
+               pr_info("Log collection Schedule");
                log_status.collect_reason = reason;
                log_status.reason_code = reason_code;
                if (!queue_work(log_status.collection_workq, &log_status.collect_work))
                        pr_info("Log collection %s reason_code 0x%x rejected. Collection already scheduled\n",
                                scsc_loc_reason_str[reason], reason_code);
+               err = wait_for_completion_timeout(&log_status.complete, 5*HZ);
+               if (!err)
+                       pr_err("Log collection Timeout");
+               pr_info("Log collection End");
+               mutex_unlock(&log_status.collection_serial);
 
        } else {
                pr_err("Log Collection Workqueue NOT available...aborting scheduled collection.\n");
index 514f1f679360880d990a6fe88076978be39db51a..3ae2357aa8dfab667f796e950dcf86b48c7fce45 100755 (executable)
@@ -148,23 +148,6 @@ static struct genl_family scsc_nlfamily = {
        .n_mcgrps = ARRAY_SIZE(scsc_mcgrp),
 };
 
-int scsc_wlbtd_init(void)
-{
-       int r = 0;
-       /* register the family so that wlbtd can bind */
-       /*r = genl_register_family_with_ops_groups(&scsc_nlfamily, scsc_ops,
-             scsc_mcgrp); */
-       r = genl_register_family(&scsc_nlfamily);
-       if (r) {
-               SCSC_TAG_ERR(WLBTD, "Failed to register family. (%d)\n", r);
-               return -1;
-       }
-
-       init_completion(&script_done);
-
-       return r;
-}
-
 int scsc_wlbtd_get_and_print_build_type(void)
 {
        struct sk_buff *skb;
@@ -300,11 +283,11 @@ int call_wlbtd_sable(const char *trigger, u16 reason_code)
        completion_jiffies = wait_for_completion_timeout(&script_done,
                                                max_timeout_jiffies);
 
-       if (completion_jiffies != max_timeout_jiffies) {
+       if (completion_jiffies) {
 
                completion_jiffies = max_timeout_jiffies - completion_jiffies;
-               SCSC_TAG_INFO(WLBTD, "log collection done in %dms\n",
-                       (int)jiffies_to_msecs(completion_jiffies));
+               SCSC_TAG_INFO(WLBTD, "sable generated in %dms\n",
+                       (int)jiffies_to_msecs(completion_jiffies) ? : 1);
        } else
                SCSC_TAG_ERR(WLBTD, "wait for completion timed out !\n");
 
@@ -415,6 +398,21 @@ error:
 }
 EXPORT_SYMBOL(call_wlbtd);
 
+int scsc_wlbtd_init(void)
+{
+       int r = 0;
+       /* register the family so that wlbtd can bind */
+       r = genl_register_family(&scsc_nlfamily);
+       if (r) {
+               SCSC_TAG_ERR(WLBTD, "Failed to register family. (%d)\n", r);
+               return -1;
+       }
+
+       init_completion(&script_done);
+
+       return r;
+}
+
 int scsc_wlbtd_deinit(void)
 {
        int ret = 0;
diff --git a/drivers/misc/samsung/scsc/tags b/drivers/misc/samsung/scsc/tags
deleted file mode 100644 (file)
index 5f20f16..0000000
+++ /dev/null
@@ -1,1791 +0,0 @@
-!_TAG_FILE_FORMAT      2       /extended format; --format=1 will not append ;" to lines/
-!_TAG_FILE_SORTED      1       /0=unsorted, 1=sorted, 2=foldcase/
-!_TAG_PROGRAM_AUTHOR   Darren Hiebert  /dhiebert@users.sourceforge.net/
-!_TAG_PROGRAM_NAME     Exuberant Ctags //
-!_TAG_PROGRAM_URL      http://ctags.sourceforge.net    /official site/
-!_TAG_PROGRAM_VERSION  5.9~svn20110310 //
-ADD_DEBUG_MODULE_PARAM scsc_logring_main.h     22;"    d
-AID_MX mifproc.h       18;"    d
-AID_MXPROC     mx140_clk.c     71;"    d       file:
-AID_MXPROC     mxproc.c        16;"    d       file:
-AID_WIFI       pcie_proc.h     20;"    d
-AMBA2TRANSAXICTR       pcie_mif.h      /^      u32 AMBA2TRANSAXICTR;$/;"       m       struct:scsc_bar0_reg
-AMBA2TRANSAXIRADDR     pcie_mif.h      /^      u32 AMBA2TRANSAXIRADDR;$/;"     m       struct:scsc_bar0_reg
-AMBA2TRANSAXIRCNT      pcie_mif.h      /^      u32 AMBA2TRANSAXIRCNT;$/;"      m       struct:scsc_bar0_reg
-AMBA2TRANSAXIWADDR     pcie_mif.h      /^      u32 AMBA2TRANSAXIWADDR;$/;"     m       struct:scsc_bar0_reg
-AMBA2TRANSAXIWCNT      pcie_mif.h      /^      u32 AMBA2TRANSAXIWCNT;$/;"      m       struct:scsc_bar0_reg
-AP2WIFI_USBPLL_REQ     mif_reg.h       151;"   d
-AP2WLBT_USBPLL_WPLL_EN mif_reg.h       155;"   d
-AP2WLBT_USBPLL_WPLL_SEL        mif_reg.h       154;"   d
-AP_PROCESS     peterson_mutex.h        14;"    d
-AXICTRL        pcie_mif.h      /^      u32 AXICTRL;$/;"        m       struct:scsc_bar0_reg
-AXIDATA        pcie_mif.h      /^      u32 AXIDATA;$/;"        m       struct:scsc_bar0_reg
-AXIRADDR       pcie_mif.h      /^      u32 AXIRADDR;$/;"       m       struct:scsc_bar0_reg
-AXIRCNT        pcie_mif.h      /^      u32 AXIRCNT;$/;"        m       struct:scsc_bar0_reg
-AXIRDBP        pcie_mif.h      /^      u32 AXIRDBP;$/;"        m       struct:scsc_bar0_reg
-AXIWADDR       pcie_mif.h      /^      u32 AXIWADDR;$/;"       m       struct:scsc_bar0_reg
-AXIWCNT        pcie_mif.h      /^      u32 AXIWCNT;$/;"        m       struct:scsc_bar0_reg
-BASE_SPARE_SZ  scsc_logring_ring.h     41;"    d
-BCSP_CRTSCTS_MASK      scsc_app_msg.h  14;"    d
-BCSP_CSTOPB_MASK       scsc_app_msg.h  11;"    d
-BCSP_PARENB_MASK       scsc_app_msg.h  12;"    d
-BCSP_PAREVEN_MASK      scsc_app_msg.h  13;"    d
-BLOCK_BOUND    miframman.h     28;"    d
-BLOCK_FREE     miframman.h     26;"    d
-BLOCK_INUSE    miframman.h     27;"    d
-BUFFER_OVERFLOW        mx_dbg_sampler.c        79;"    d       file:
-BULK_DATA      mx_dbg_sampler.c        232;"   d       file:
-CENTRAL_SEQ_WIFI_CONFIGURATION mif_reg.h       135;"   d
-CENTRAL_SEQ_WIFI_STATUS        mif_reg.h       141;"   d
-CLEANY_BUS_WIFI_SYS_PWR_REG    mif_reg.h       134;"   d
-COL    pcie_proc.c     39;"    d       file:
-CPACKET_BUFFER_H__     cpacket_buffer.h        12;"    d
-CPTAR0 pcie_mif.h      /^      u32 CPTAR0;$/;" m       struct:scsc_bar0_reg
-CPTAR1 pcie_mif.h      /^      u32 CPTAR1;$/;" m       struct:scsc_bar0_reg
-CPTARDELAY     pcie_mif.h      /^      u32 CPTARDELAY;$/;"     m       struct:scsc_bar0_reg
-CPTAW0 pcie_mif.h      /^      u32 CPTAW0;$/;" m       struct:scsc_bar0_reg
-CPTAW1 pcie_mif.h      /^      u32 CPTAW1;$/;" m       struct:scsc_bar0_reg
-CPTAWDELAY     pcie_mif.h      /^      u32 CPTAWDELAY;$/;"     m       struct:scsc_bar0_reg
-CPTB0  pcie_mif.h      /^      u32 CPTB0;$/;"  m       struct:scsc_bar0_reg
-CPTENDADDR     pcie_mif.h      /^      u32 CPTENDADDR;$/;"     m       struct:scsc_bar0_reg
-CPTPHSEL       pcie_mif.h      /^      u32 CPTPHSEL;$/;"       m       struct:scsc_bar0_reg
-CPTR0  pcie_mif.h      /^      u32 CPTR0;$/;"  m       struct:scsc_bar0_reg
-CPTR1  pcie_mif.h      /^      u32 CPTR1;$/;"  m       struct:scsc_bar0_reg
-CPTR2  pcie_mif.h      /^      u32 CPTR2;$/;"  m       struct:scsc_bar0_reg
-CPTRES pcie_mif.h      /^      u32 CPTRES;$/;" m       struct:scsc_bar0_reg
-CPTRUN pcie_mif.h      /^      u32 CPTRUN;$/;" m       struct:scsc_bar0_reg
-CPTSRTADDR     pcie_mif.h      /^      u32 CPTSRTADDR;$/;"     m       struct:scsc_bar0_reg
-CPTSZLTHID     pcie_mif.h      /^      u32 CPTSZLTHID;$/;"     m       struct:scsc_bar0_reg
-CPTW0  pcie_mif.h      /^      u32 CPTW0;$/;"  m       struct:scsc_bar0_reg
-CPTW1  pcie_mif.h      /^      u32 CPTW1;$/;"  m       struct:scsc_bar0_reg
-CPTW2  pcie_mif.h      /^      u32 CPTW2;$/;"  m       struct:scsc_bar0_reg
-DEBUG  pcie_mif.h      /^      u32 DEBUG;$/;"  m       struct:scsc_bar0_reg
-DEBUGFS_RING0_ROOT     scsc_logring_ring.h     51;"    d
-DEBUGFS_ROOT   scsc_logring_ring.h     50;"    d
-DEFAULT_ALL_DISABLED   scsc_logring_common.h   30;"    d
-DEFAULT_BIN_DECODE_LEN scsc_logring_ring.h     49;"    d
-DEFAULT_DBGLEVEL       scsc_logring_common.h   28;"    d
-DEFAULT_DROPLEVEL      scsc_logring_common.h   29;"    d
-DEFAULT_DROP_ALL       scsc_logring_common.h   31;"    d
-DEFAULT_ENABLE_HEADER  scsc_logring_ring.h     44;"    d
-DEFAULT_ENABLE_LOGRING scsc_logring_ring.h     45;"    d
-DEFAULT_NO_REDIRECT    scsc_logring_common.h   33;"    d
-DEFAULT_REDIRECT_DROPLVL       scsc_logring_common.h   32;"    d
-DEFAULT_RING_BUFFER_SZ scsc_logring_ring.h     43;"    d
-DEFAULT_TBUF_SZ        scsc_logring_common.h   34;"    d
-DELAY_NS       peterson_mutex.h        15;"    d
-DEVICE_NAME    mx_dbg_sampler.c        63;"    d       file:
-DEVICE_NAME    mx_mmap.c       31;"    d       file:
-DRV_NAME       mx_dbg_sampler.c        62;"    d       file:
-DRV_NAME       mx_mmap.c       30;"    d       file:
-DRV_NAME       pcie_mif_module.h       8;"     d
-DRV_NAME       platform_mif_module.h   10;"    d
-FPGAVER        pcie_mif.h      /^      u32 FPGAVER;$/;"        m       struct:scsc_bar0_reg
-FPGA_OFFSET    pcie_mif.h      13;"    d
-FPGA_OFFSET    pcie_mif.h      15;"    d
-FWHDR_02_BUILD_ID_OFFSET       fwhdr.c 28;"    d       file:
-FWHDR_02_CONST_CRC32   fwhdr.c 44;"    d       file:
-FWHDR_02_CONST_CRC_OFFSET      fwhdr.c 25;"    d       file:
-FWHDR_02_CONST_FW_LENGTH       fwhdr.c 45;"    d       file:
-FWHDR_02_CONST_FW_LENGTH_OFFSET        fwhdr.c 24;"    d       file:
-FWHDR_02_FIRMWARE_API_VERSION_MAJOR_OFFSET     fwhdr.c 22;"    d       file:
-FWHDR_02_FIRMWARE_API_VERSION_MINOR_OFFSET     fwhdr.c 21;"    d       file:
-FWHDR_02_FIRMWARE_CRC_OFFSET   fwhdr.c 23;"    d       file:
-FWHDR_02_FIRMWARE_ENTRY_POINT_OFFSET   fwhdr.c 27;"    d       file:
-FWHDR_02_FIRMWARE_RUNTIME_LENGTH_OFFSET        fwhdr.c 26;"    d       file:
-FWHDR_02_FW_CRC32      fwhdr.c 41;"    d       file:
-FWHDR_02_HDR_LENGTH    fwhdr.c 42;"    d       file:
-FWHDR_02_HEADER_CRC32  fwhdr.c 43;"    d       file:
-FWHDR_02_HEADER_FIRMWARE_API_VERSION_MAJOR     fwhdr.c 40;"    d       file:
-FWHDR_02_HEADER_FIRMWARE_API_VERSION_MINOR     fwhdr.c 39;"    d       file:
-FWHDR_02_HEADER_FIRMWARE_ENTRY_POINT   fwhdr.c 35;"    d       file:
-FWHDR_02_HEADER_FIRMWARE_RUNTIME_LENGTH        fwhdr.c 36;"    d       file:
-FWHDR_02_HEADER_VERSION_MAJOR  fwhdr.c 37;"    d       file:
-FWHDR_02_HEADER_VERSION_MINOR  fwhdr.c 38;"    d       file:
-FWHDR_02_LENGTH_OFFSET fwhdr.c 20;"    d       file:
-FWHDR_02_M4_PANIC_RECORD_OFFSET        fwhdr.c 47;"    d       file:
-FWHDR_02_M4_PANIC_RECORD_OFFSET_OFFSET fwhdr.c 30;"    d       file:
-FWHDR_02_MAGIC_OFFSET  fwhdr.c 17;"    d       file:
-FWHDR_02_R4_PANIC_RECORD_OFFSET        fwhdr.c 46;"    d       file:
-FWHDR_02_R4_PANIC_RECORD_OFFSET_OFFSET fwhdr.c 29;"    d       file:
-FWHDR_02_TRAMPOLINE    fwhdr.c 34;"    d       file:
-FWHDR_02_TRAMPOLINE_OFFSET     fwhdr.c 16;"    d       file:
-FWHDR_02_VERSION_MAJOR_OFFSET  fwhdr.c 19;"    d       file:
-FWHDR_02_VERSION_MINOR_OFFSET  fwhdr.c 18;"    d       file:
-FWHDR_H        fwhdr.h 8;"     d
-FWHDR_MAGIC_STRING     fwhdr.c 52;"    d       file:
-FWIMAGE_H      fwimage.h       8;"     d
-FW_PANIC_RECORD_H__    fw_panic_record.h       8;"     d
-GCC_PACKED     mxconf.h        47;"    d
-GDB_TRANSPORT_BUF_LENGTH       gdb_transport.h 24;"    d
-GDB_TRANSPORT_H__      gdb_transport.h 18;"    d
-GDB_TRANSPORT_M4       gdb_transport.h /^      GDB_TRANSPORT_M4,$/;"   e       enum:gdb_transport_enum
-GDB_TRANSPORT_R4       gdb_transport.h /^      GDB_TRANSPORT_R4 = 0,$/;"       e       enum:gdb_transport_enum
-GRST   pcie_mif.h      /^      u32 GRST;$/;"   m       struct:scsc_bar0_reg
-IFAXICTRL      pcie_mif.h      /^      u32 IFAXICTRL;$/;"      m       struct:scsc_bar0_reg
-IFAXIRADDR     pcie_mif.h      /^      u32 IFAXIRADDR;$/;"     m       struct:scsc_bar0_reg
-IFAXIRCNT      pcie_mif.h      /^      u32 IFAXIRCNT;$/;"      m       struct:scsc_bar0_reg
-IFAXIWADDR     pcie_mif.h      /^      u32 IFAXIWADDR;$/;"     m       struct:scsc_bar0_reg
-IFAXIWCNT      pcie_mif.h      /^      u32 IFAXIWCNT;$/;"      m       struct:scsc_bar0_reg
-INTCR0 mif_reg.h       60;"    d
-INTCR1 mif_reg.h       66;"    d
-INTCR2 mif_reg.h       72;"    d
-INTGR0 mif_reg.h       59;"    d
-INTGR1 mif_reg.h       65;"    d
-INTGR2 mif_reg.h       71;"    d
-INTMR0 mif_reg.h       61;"    d
-INTMR1 mif_reg.h       67;"    d
-INTMR2 mif_reg.h       73;"    d
-INTMSR0        mif_reg.h       63;"    d
-INTMSR1        mif_reg.h       69;"    d
-INTMSR2        mif_reg.h       75;"    d
-INTSR0 mif_reg.h       62;"    d
-INTSR1 mif_reg.h       68;"    d
-INTSR2 mif_reg.h       74;"    d
-ISSR   mif_reg.h       79;"    d
-ISSR_BASE      mif_reg.h       78;"    d
-IS_PRINTK_REDIRECT_ALLOWED     scsc_logring_main.h     29;"    d
-IS_VERSION     mif_reg.h       77;"    d
-KFIFO_ERROR    mx_dbg_sampler.c        80;"    d       file:
-KFIFO_FULL     mx_dbg_sampler.c        81;"    d       file:
-LOGIC_RESET_WIFI_SYS_PWR_REG   mif_reg.h       133;"   d
-LOG_THREAD_START_TMO_SEC       mxlog_transport.c       203;"   d       file:
-LOG_THREAD_STOP_TMO_SEC        mxlog_transport.c       223;"   d       file:
-M4_PANIC_RECORD_LENGTH_INDEX   fw_panic_record.c       24;"    d       file:
-M4_PANIC_RECORD_MAX_LENGTH     fw_panic_record.c       25;"    d       file:
-M4_PANIC_RECORD_VERSION_1      fw_panic_record.c       22;"    d       file:
-M4_PANIC_RECORD_VERSION_INDEX  fw_panic_record.c       23;"    d       file:
-MAILBOX_WLBT_BASE      mif_reg.h       55;"    d
-MAILBOX_WLBT_REG       mif_reg.h       56;"    d
-MASK_WIFI_PWRDN_DONE   mif_reg.h       96;"    d
-MAX_MEMORY     mx_mmap.c       45;"    d       file:
-MAX_MX_LOG_ARGS        mxlog.h 24;"    d
-MAX_NUM_MBOX   mif_reg.h       15;"    d
-MAX_SPARE_FMT  mxlog.h 22;"    d
-MBOX2_MAGIC_NUMBER     mxman.c 39;"    d       file:
-MBOX_INDEX_0   mxman.c 40;"    d       file:
-MBOX_INDEX_1   mxman.c 41;"    d       file:
-MBOX_INDEX_2   mxman.c 42;"    d       file:
-MBOX_INDEX_3   mxman.c 43;"    d       file:
-MBOX_INDEX_4   mxman.c 44;"    d       file:
-MBOX_INDEX_5   mxman.c 45;"    d       file:
-MBOX_INDEX_6   mxman.c 46;"    d       file:
-MBOX_INDEX_7   mxman.c 47;"    d       file:
-MBOX_OFFSET    mif_reg.h       44;"    d
-MCUCTRL        mif_reg.h       57;"    d
-MEM_LENGTH     mxmgmt_transport.c      234;"   d       file:
-MGMT_THREAD_START_TMO_SEC      mxmgmt_transport.c      190;"   d       file:
-MGMT_THREAD_STOP_TMO_SEC       mxmgmt_transport.c      210;"   d       file:
-MIFINTRBIT_NUM_INT     mifintrbit.h    17;"    d
-MIFINTRBIT_RESERVED_PANIC_M4   mifintrbit.h    21;"    d
-MIFINTRBIT_RESERVED_PANIC_R4   mifintrbit.h    20;"    d
-MIFMBOX_NUM    mifmboxman.h    24;"    d
-MIFRAMMAN_ALIGN        miframman.c     88;"    d       file:
-MIFRAMMAN_BLOCK_SIZE   miframman.h     22;"    d
-MIFRAMMAN_MAXMEM       miframman.h     21;"    d
-MIFRAMMAN_NUM_BLOCKS   miframman.h     24;"    d
-MIFRAMMAN_PTR  miframman.c     92;"    d       file:
-MIFSTREAM_H__  mifstream.h     23;"    d
-MIF_DIRLEN     mifproc.c       295;"   d       file:
-MIF_INIT       mif_reg.h       76;"    d
-MIF_PDE_DATA   mifproc.h       22;"    d
-MIF_PDE_DATA   mifproc.h       24;"    d
-MIF_PROCFS_ADD_FILE    mifproc.h       77;"    d
-MIF_PROCFS_ADD_FILE    mifproc.h       83;"    d
-MIF_PROCFS_REMOVE_FILE mifproc.h       95;"    d
-MIF_PROCFS_RW_FILE_OPS mifproc.h       50;"    d
-MIF_PROCFS_SEQ_ADD_FILE        mifproc.h       40;"    d
-MIF_PROCFS_SEQ_FILE_OPS        mifproc.h       27;"    d
-MIF_PROCFS_SET_UID_GID mifproc.h       62;"    d
-MIF_PROCFS_SET_UID_GID mifproc.h       69;"    d
-MIF_STREAM_DIRECTION   mifstream.h     /^enum MIF_STREAM_DIRECTION {$/;"       g
-MIF_STREAM_DIRECTION_IN        mifstream.h     /^      MIF_STREAM_DIRECTION_IN,$/;"    e       enum:MIF_STREAM_DIRECTION
-MIF_STREAM_DIRECTION_OUT       mifstream.h     /^      MIF_STREAM_DIRECTION_OUT,$/;"   e       enum:MIF_STREAM_DIRECTION
-MIF_STREAM_INTRBIT_TYPE        mifstream.h     /^enum MIF_STREAM_INTRBIT_TYPE {$/;"    g
-MIF_STREAM_INTRBIT_TYPE_ALLOC  mifstream.h     /^      MIF_STREAM_INTRBIT_TYPE_ALLOC,$/;"      e       enum:MIF_STREAM_INTRBIT_TYPE
-MIF_STREAM_INTRBIT_TYPE_RESERVED       mifstream.h     /^      MIF_STREAM_INTRBIT_TYPE_RESERVED,$/;"   e       enum:MIF_STREAM_INTRBIT_TYPE
-MIF_STREAM_PEER        mifstream.h     /^enum MIF_STREAM_PEER {$/;"    g
-MIF_STREAM_PEER_M4     mifstream.h     /^      MIF_STREAM_PEER_M4,$/;" e       enum:MIF_STREAM_PEER
-MIF_STREAM_PEER_R4     mifstream.h     /^      MIF_STREAM_PEER_R4,$/;" e       enum:MIF_STREAM_PEER
-MINIMUM_MXLOG_MSG_LEN_BYTES    mxlog.h 20;"    d
-MIN_HEADER_LENGTH_WITH_PANIC_RECORD    fwhdr.c 50;"    d       file:
-MMTRANS_CHAN_ID_MAXWELL_LOGGING        mxmgmt_transport.h      /^      MMTRANS_CHAN_ID_MAXWELL_LOGGING = 2,$/;"        e       enum:mxmgr_channels
-MMTRANS_CHAN_ID_MAXWELL_MANAGEMENT     mxmgmt_transport.h      /^      MMTRANS_CHAN_ID_MAXWELL_MANAGEMENT = 0,$/;"     e       enum:mxmgr_channels
-MMTRANS_CHAN_ID_SERVICE_MANAGEMENT     mxmgmt_transport.h      /^      MMTRANS_CHAN_ID_SERVICE_MANAGEMENT = 1,$/;"     e       enum:mxmgr_channels
-MMTRANS_NUM_CHANNELS   mxmgmt_transport.h      /^      MMTRANS_NUM_CHANNELS = 3$/;"    e       enum:mxmgr_channels
-MM_FORCE_PANIC mxman.c /^      MM_FORCE_PANIC = 2,$/;" e       enum:__anon8    file:
-MM_HALT_REQ    mxman.c /^      MM_HALT_REQ = 1,$/;"    e       enum:__anon8    file:
-MM_HOST_RESUME mxman.c /^      MM_HOST_RESUME = 4$/;"  e       enum:__anon8    file:
-MM_HOST_SUSPEND        mxman.c /^      MM_HOST_SUSPEND = 3,$/;"        e       enum:__anon8    file:
-MM_START_IND   mxman.c /^      MM_START_IND = 0,$/;"   e       enum:__anon8    file:
-MX140_CLK_TRIES        mx140_clk.c     331;"   d       file:
-MX140_FW_BASE_DIR      mx140_file.c    27;"    d       file:
-MX140_FW_BASE_DIR      mx140_file.c    29;"    d       file:
-MX140_FW_BASE_DIR_ETC_WIFI     mx140_file.c    24;"    d       file:
-MX140_FW_BIN   mx140_file.c    34;"    d       file:
-MX140_FW_CONF_SUBDIR   mx140_file.c    32;"    d       file:
-MX140_FW_DEBUG_SUBDIR  mx140_file.c    33;"    d       file:
-MX140_FW_PATH_MAX_LENGTH       mx140_file.c    35;"    d       file:
-MX140_FW_VARIANT_DEFAULT       mx140_file.c    37;"    d       file:
-MX140_FW_VARIANT_LEGACY_DEFAULT        mx140_file.c    38;"    d       file:
-MX140_MEMDUMP_INFO_FILE        mxman.c 764;"   d       file:
-MX140_SERVICE_RECOVERY_TIMEOUT mx140_clk.c     41;"    d       file:
-MX140_USE_OWN_LOAD_FILE        mx140_file.c    22;"    d       file:
-MXCONF_H__     mxconf.h        23;"    d
-MXCONF_MAGIC   mxconf.h        35;"    d
-MXCONF_VERSION_MAJOR   mxconf.h        43;"    d
-MXCONF_VERSION_MINOR   mxconf.h        44;"    d
-MXLOG_BUFFER_SIZE      mxlog.h 18;"    d
-MXLOG_CAST     mxlog.h 46;"    d
-MXLOG_CAST     mxlog.h 69;"    d
-MXLOG_ELEMENT_SIZE     mxlog.h 21;"    d
-MXLOG_SEXT     mxlog.h 26;"    d
-MXLOG_THREAD_NAME_MAX_LENGTH   mxlog_transport.h       52;"    d
-MXLOG_TRANSPORT_BUF_LENGTH     mxlog_transport.c       15;"    d       file:
-MXLOG_TRANSPORT_H__    mxlog_transport.h       15;"    d
-MXLOG_TRANSPORT_PACKET_SIZE    mxlog_transport.c       16;"    d       file:
-MXMANAGEMENT_TRANSPORT_H__     mxmgmt_transport.h      19;"    d
-MXMAN_STATE_FAILED     mxman.h /^      MXMAN_STATE_FAILED,$/;" e       enum:mxman_state
-MXMAN_STATE_FREEZED    mxman.h /^      MXMAN_STATE_FREEZED,$/;"        e       enum:mxman_state
-MXMAN_STATE_STARTED    mxman.h /^      MXMAN_STATE_STARTED,$/;"        e       enum:mxman_state
-MXMAN_STATE_STOPPED    mxman.h /^      MXMAN_STATE_STOPPED,$/;"        e       enum:mxman_state
-MXMGMT_THREAD_NAME_MAX_LENGTH  mxmgmt_transport.h      78;"    d
-MXMGR_TRANSPORT_FORMAT_H__     mxmgmt_transport_format.h       8;"     d
-MXMGR_TRANSPORT_STREAMS_H__    mxmgmt_transport_streams.h      8;"     d
-MXPROC_H       mxproc.h        12;"    d
-MX_CLK20_DIRLEN        mx140_clk.c     76;"    d       file:
-MX_CLK20_PROCFS_ADD_FILE       mx140_clk.c     120;"   d       file:
-MX_CLK20_PROCFS_ADD_FILE       mx140_clk.c     126;"   d       file:
-MX_CLK20_PROCFS_REMOVE_FILE    mx140_clk.c     138;"   d       file:
-MX_CLK20_PROCFS_RO_FILE_OPS    mx140_clk.c     90;"    d       file:
-MX_CLK20_PROCFS_RW_FILE_OPS    mx140_clk.c     81;"    d       file:
-MX_CLK20_PROCFS_SET_UID_GID    mx140_clk.c     105;"   d       file:
-MX_CLK20_PROCFS_SET_UID_GID    mx140_clk.c     112;"   d       file:
-MX_DIRLEN      mxproc.c        80;"    d       file:
-MX_DRAM_SIZE   mxman.c 36;"    d       file:
-MX_FW_RUNTIME_LENGTH   mxman.c 37;"    d       file:
-MX_LOG_LOGSTRINGS_PATH mxlog.h 25;"    d
-MX_LOG_PHASE_4 mxlog.h 12;"    d
-MX_LOG_PHASE_5 mxlog.h 13;"    d
-MX_PDE_DATA    mx140_clk.c     101;"   d       file:
-MX_PDE_DATA    mx140_clk.c     99;"    d       file:
-MX_PDE_DATA    mxproc.c        38;"    d       file:
-MX_PDE_DATA    mxproc.c        40;"    d       file:
-MX_PROCFS_ADD_FILE     mxproc.c        59;"    d       file:
-MX_PROCFS_ADD_FILE     mxproc.c        65;"    d       file:
-MX_PROCFS_REMOVE_FILE  mxproc.c        77;"    d       file:
-MX_PROCFS_RO_FILE_OPS  mxproc.c        28;"    d       file:
-MX_PROCFS_RW_FILE_OPS  mxproc.c        19;"    d       file:
-MX_PROCFS_SET_UID_GID  mxproc.c        44;"    d       file:
-MX_PROCFS_SET_UID_GID  mxproc.c        51;"    d       file:
-NEWMSG pcie_mif.h      /^      u32 NEWMSG;$/;" m       struct:scsc_bar0_reg
-NO_ERROR       mx_dbg_sampler.c        78;"    d       file:
-NUMBER_OF_STRING_ARGS  mxman.c 35;"    d       file:
-NUM_MBOX       mif_reg.h       20;"    d
-NUM_MBOX_PLAT  mif_reg.h       52;"    d
-NUM_SEMAPHORE  mif_reg.h       53;"    d
-OFFSET pcie_mif.h      /^      u32 OFFSET;$/;" m       struct:scsc_bar0_reg
-OS_UNUSED_PARAMETER    mxproc.c        79;"    d       file:
-PANIC_RECORD_CKSUM_SEED        fw_panic_record.c       11;"    d       file:
-PANIC_RECORD_R4_CKSUM_INDEX    panic_record_r4_defs.h  84;"    d
-PANIC_RECORD_R4_CKSUM_SEED     panic_record_r4_defs.h  46;"    d
-PANIC_RECORD_R4_DEFS_H__       panic_record_r4_defs.h  8;"     d
-PANIC_RECORD_R4_INFO_COUNT     panic_record_r4_defs.h  41;"    d
-PANIC_RECORD_R4_INFO_INDEX     panic_record_r4_defs.h  77;"    d
-PANIC_RECORD_R4_LEN    panic_record_r4_defs.h  89;"    d
-PANIC_RECORD_R4_REGISTERS_INDEX        panic_record_r4_defs.h  70;"    d
-PANIC_RECORD_R4_REGISTER_COUNT panic_record_r4_defs.h  36;"    d
-PANIC_RECORD_R4_REGISTER_CPSR  panic_record_r4_defs.h  112;"   d
-PANIC_RECORD_R4_REGISTER_LR    panic_record_r4_defs.h  109;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_CPSR   panic_record_r4_defs.h  135;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_LR     panic_record_r4_defs.h  132;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_PC     panic_record_r4_defs.h  134;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_R0     panic_record_r4_defs.h  118;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_R1     panic_record_r4_defs.h  119;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_R10    panic_record_r4_defs.h  128;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_R11    panic_record_r4_defs.h  129;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_R12    panic_record_r4_defs.h  130;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_R2     panic_record_r4_defs.h  120;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_R3     panic_record_r4_defs.h  121;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_R4     panic_record_r4_defs.h  122;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_R5     panic_record_r4_defs.h  123;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_R6     panic_record_r4_defs.h  124;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_R7     panic_record_r4_defs.h  125;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_R8     panic_record_r4_defs.h  126;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_R9     panic_record_r4_defs.h  127;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_SP     panic_record_r4_defs.h  131;"   d
-PANIC_RECORD_R4_REGISTER_OFFSET_SPSR   panic_record_r4_defs.h  133;"   d
-PANIC_RECORD_R4_REGISTER_PC    panic_record_r4_defs.h  111;"   d
-PANIC_RECORD_R4_REGISTER_R0    panic_record_r4_defs.h  95;"    d
-PANIC_RECORD_R4_REGISTER_R1    panic_record_r4_defs.h  96;"    d
-PANIC_RECORD_R4_REGISTER_R10   panic_record_r4_defs.h  105;"   d
-PANIC_RECORD_R4_REGISTER_R11   panic_record_r4_defs.h  106;"   d
-PANIC_RECORD_R4_REGISTER_R12   panic_record_r4_defs.h  107;"   d
-PANIC_RECORD_R4_REGISTER_R2    panic_record_r4_defs.h  97;"    d
-PANIC_RECORD_R4_REGISTER_R3    panic_record_r4_defs.h  98;"    d
-PANIC_RECORD_R4_REGISTER_R4    panic_record_r4_defs.h  99;"    d
-PANIC_RECORD_R4_REGISTER_R5    panic_record_r4_defs.h  100;"   d
-PANIC_RECORD_R4_REGISTER_R6    panic_record_r4_defs.h  101;"   d
-PANIC_RECORD_R4_REGISTER_R7    panic_record_r4_defs.h  102;"   d
-PANIC_RECORD_R4_REGISTER_R8    panic_record_r4_defs.h  103;"   d
-PANIC_RECORD_R4_REGISTER_R9    panic_record_r4_defs.h  104;"   d
-PANIC_RECORD_R4_REGISTER_SP    panic_record_r4_defs.h  108;"   d
-PANIC_RECORD_R4_REGISTER_SPSR  panic_record_r4_defs.h  110;"   d
-PANIC_RECORD_R4_TIMESTAMP_1M_INDEX     panic_record_r4_defs.h  64;"    d
-PANIC_RECORD_R4_TIMESTAMP_32K_INDEX    panic_record_r4_defs.h  65;"    d
-PANIC_RECORD_R4_VERSION_1      panic_record_r4_defs.h  31;"    d
-PANIC_RECORD_R4_VERSION_INDEX  panic_record_r4_defs.h  55;"    d
-PCIE_DIRLEN    pcie_proc.c     234;"   d       file:
-PCIE_MIF_ALLOC_MEM     pcie_mif_module.h       27;"    d
-PCIE_MIF_PREALLOC_MEM  pcie_mif_module.h       11;"    d
-PCIE_PDE_DATA  pcie_proc.h     24;"    d
-PCIE_PDE_DATA  pcie_proc.h     26;"    d
-PCIE_PROCFS_ADD_FILE   pcie_proc.h     79;"    d
-PCIE_PROCFS_ADD_FILE   pcie_proc.h     85;"    d
-PCIE_PROCFS_REMOVE_FILE        pcie_proc.h     97;"    d
-PCIE_PROCFS_RW_FILE_OPS        pcie_proc.h     52;"    d
-PCIE_PROCFS_SEQ_ADD_FILE       pcie_proc.h     42;"    d
-PCIE_PROCFS_SEQ_FILE_OPS       pcie_proc.h     29;"    d
-PCIE_PROCFS_SET_UID_GID        pcie_proc.h     64;"    d
-PCIE_PROCFS_SET_UID_GID        pcie_proc.h     71;"    d
-PCI_DEVICE_ID_SAMSUNG_SCSC     pcie_mif_module.h       7;"     d
-PLATFORM_MIF_ALIVE     platform_mif.h  12;"    d
-PLATFORM_MIF_MBOX      platform_mif.h  11;"    d
-PLATFORM_MIF_WDOG      platform_mif.h  13;"    d
-PMU_ALIVE_BASE mif_reg.h       113;"   d
-PMU_ALIVE_REG  mif_reg.h       114;"   d
-P_OFFSET_AP    mif_reg.h       46;"    d
-P_OFFSET_R4    mif_reg.h       47;"    d
-R4_PANIC_RECORD_LENGTH_INDEX_V2        fw_panic_record.c       16;"    d       file:
-R4_PANIC_RECORD_MAX_LENGTH_V2  fw_panic_record.c       17;"    d       file:
-R4_PANIC_RECORD_VERSION_2      fw_panic_record.c       15;"    d       file:
-R4_PROCESS     peterson_mutex.h        13;"    d
-READROUNDTRIPLAST      pcie_mif.h      /^      u32 READROUNDTRIPLAST;$/;"      m       struct:scsc_bar0_reg
-READROUNDTRIPMAX       pcie_mif.h      /^      u32 READROUNDTRIPMAX;$/;"       m       struct:scsc_bar0_reg
-READROUNDTRIPMIN       pcie_mif.h      /^      u32 READROUNDTRIPMIN;$/;"       m       struct:scsc_bar0_reg
-RESET_ASB_WIFI_SYS_PWR_REG     mif_reg.h       131;"   d
-RNAME_SZ       scsc_logring_ring.h     42;"    d
-ROW    pcie_proc.c     38;"    d       file:
-RUNEN  pcie_mif.h      /^      u32 RUNEN;$/;"  m       struct:scsc_bar0_reg
-SAMWRITE_BUFSZ scsc_logring_debugfs.h  28;"    d
-SCSC_ALERT     scsc_logring_common.h   /^      SCSC_ALERT,$/;" e       enum:__anon10
-SCSC_APP_MSG_STATUS_FAILURE    scsc_app_msg.h  /^      SCSC_APP_MSG_STATUS_FAILURE,$/;"        e       enum:__anon2
-SCSC_APP_MSG_STATUS_OK scsc_app_msg.h  /^      SCSC_APP_MSG_STATUS_OK = 0,$/;" e       enum:__anon2
-SCSC_APP_MSG_TYPE_APP_EXIT     scsc_app_msg.h  /^      SCSC_APP_MSG_TYPE_APP_EXIT,$/;" e       enum:__anon1
-SCSC_APP_MSG_TYPE_APP_EXIT_REPLY       scsc_app_msg.h  /^      SCSC_APP_MSG_TYPE_APP_EXIT_REPLY,$/;"   e       enum:__anon1
-SCSC_APP_MSG_TYPE_APP_STARTED_REPLY    scsc_app_msg.h  /^      SCSC_APP_MSG_TYPE_APP_STARTED_REPLY = 0,$/;"    e       enum:__anon1
-SCSC_APP_MSG_TYPE_GET_DB       scsc_app_msg.h  /^      SCSC_APP_MSG_TYPE_GET_DB,$/;"   e       enum:__anon1
-SCSC_APP_MSG_TYPE_GET_DB_REPLY scsc_app_msg.h  /^      SCSC_APP_MSG_TYPE_GET_DB_REPLY,$/;"     e       enum:__anon1
-SCSC_APP_MSG_TYPE_LD_REGISTER_HIGH_RATE        scsc_app_msg.h  /^      SCSC_APP_MSG_TYPE_LD_REGISTER_HIGH_RATE,$/;"    e       enum:__anon1
-SCSC_APP_MSG_TYPE_LD_REGISTER_LOW_RATE scsc_app_msg.h  /^      SCSC_APP_MSG_TYPE_LD_REGISTER_LOW_RATE,$/;"     e       enum:__anon1
-SCSC_APP_MSG_TYPE_LD_REGISTER_REPLY    scsc_app_msg.h  /^      SCSC_APP_MSG_TYPE_LD_REGISTER_REPLY,$/;"        e       enum:__anon1
-SCSC_APP_MSG_TYPE_LD_UNREGISTER        scsc_app_msg.h  /^      SCSC_APP_MSG_TYPE_LD_UNREGISTER,$/;"    e       enum:__anon1
-SCSC_APP_MSG_TYPE_LD_UNREGISTER_BREAK  scsc_app_msg.h  /^      SCSC_APP_MSG_TYPE_LD_UNREGISTER_BREAK,$/;"      e       enum:__anon1
-SCSC_APP_MSG_TYPE_LD_UNREGISTER_REPLY  scsc_app_msg.h  /^      SCSC_APP_MSG_TYPE_LD_UNREGISTER_REPLY,$/;"      e       enum:__anon1
-SCSC_APP_MSG_TYPE_SET_FAST_RATE        scsc_app_msg.h  /^      SCSC_APP_MSG_TYPE_SET_FAST_RATE,$/;"    e       enum:__anon1
-SCSC_APP_MSG_TYPE_SET_FAST_RATE_REPLY  scsc_app_msg.h  /^      SCSC_APP_MSG_TYPE_SET_FAST_RATE_REPLY,$/;"      e       enum:__anon1
-SCSC_BINFO_LEN scsc_logring_ring.h     27;"    d
-SCSC_CHV_ARGV_ADDR_OFFSET      mxman.h 68;"    d
-SCSC_CRC_RINGREC_SZ    scsc_logring_ring.h     176;"   d
-SCSC_CRIT      scsc_logring_common.h   /^      SCSC_CRIT,$/;"  e       enum:__anon10
-SCSC_DBG1      scsc_logring_common.h   /^      SCSC_DBG1 = SCSC_DEBUG,         \/* 7 *\/$/;"   e       enum:__anon10
-SCSC_DBG2      scsc_logring_common.h   /^      SCSC_DBG2,$/;"  e       enum:__anon10
-SCSC_DBG3      scsc_logring_common.h   /^      SCSC_DBG3,$/;"  e       enum:__anon10
-SCSC_DBG4      scsc_logring_common.h   /^      SCSC_DBG4,                      \/* 10 *\/$/;"  e       enum:__anon10
-SCSC_DEBUG     scsc_logring_common.h   /^      SCSC_DEBUG,$/;" e       enum:__anon10
-SCSC_DEBUGFS_ROOT      scsc_logring_debugfs.h  22;"    d
-SCSC_DEFAULT_MAX_RECORDS_PER_READ      scsc_logring_debugfs.h  29;"    d
-SCSC_EMERG     scsc_logring_common.h   /^      SCSC_EMERG = SCSC_MIN_DBG,$/;"  e       enum:__anon10
-SCSC_ERR       scsc_logring_common.h   /^      SCSC_ERR,$/;"   e       enum:__anon10
-SCSC_FILL_RING_RECORD  scsc_logring_ring.h     161;"   d
-SCSC_FULL_DEBUG        scsc_logring_common.h   /^      SCSC_FULL_DEBUG$/;"     e       enum:__anon10
-SCSC_GDB_NODE  mx_mmap.c       41;"    d       file:
-SCSC_GET_HEAD_PTR      scsc_logring_ring.h     203;"   d
-SCSC_GET_NEXT_FREE_SLOT_PTR    scsc_logring_ring.h     205;"   d
-SCSC_GET_NEXT_REC_ENTRY_POS    scsc_logring_ring.h     226;"   d
-SCSC_GET_NEXT_SLOT_POS scsc_logring_ring.h     213;"   d
-SCSC_GET_PTR   scsc_logring_ring.h     196;"   d
-SCSC_GET_REC   scsc_logring_ring.h     198;"   d
-SCSC_GET_REC_BUF       scsc_logring_ring.h     188;"   d
-SCSC_GET_REC_CRC       scsc_logring_ring.h     194;"   d
-SCSC_GET_REC_LEN       scsc_logring_ring.h     190;"   d
-SCSC_GET_REC_TAG       scsc_logring_ring.h     192;"   d
-SCSC_GET_RING_REFC     scsc_logring_ring.h     181;"   d
-SCSC_GET_SLOT_LEN      scsc_logring_ring.h     209;"   d
-SCSC_HBUF_LEN  scsc_logring_ring.h     28;"    d
-SCSC_INFO      scsc_logring_common.h   /^      SCSC_INFO,$/;"  e       enum:__anon10
-SCSC_IS_REC_SYNC_VALID scsc_logring_ring.h     201;"   d
-SCSC_IS_RING_IN_USE    scsc_logring_ring.h     178;"   d
-SCSC_LOGGED_BYTES      scsc_logring_ring.h     223;"   d
-SCSC_MAX_BIN_BLOB_SZ   scsc_logring_ring.h     34;"    d
-SCSC_MAX_INTERFACES    mx_mmap.c       43;"    d       file:
-SCSC_MIF_ABS_TARGET_M4 scsc_mif_abs.h  /^      SCSC_MIF_ABS_TARGET_M4 = 1$/;"  e       enum:scsc_mif_abs_target
-SCSC_MIF_ABS_TARGET_R4 scsc_mif_abs.h  /^      SCSC_MIF_ABS_TARGET_R4 = 0,$/;" e       enum:scsc_mif_abs_target
-SCSC_MIF_PROC_H        mifproc.h       15;"    d
-SCSC_MIN_DBG   scsc_logring_common.h   /^      SCSC_MIN_DBG = 0,$/;"   e       enum:__anon10
-SCSC_MMAP_NODE mx_mmap.c       40;"    d       file:
-SCSC_MODPARAM_DESC     scsc_logring_common.h   41;"    d
-SCSC_MX_BOOT_DELAY_MS  client_test.c   47;"    d       file:
-SCSC_MX_CORE_MODDESC   scsc_mx_module.c        /^MODULE_DESCRIPTION(SCSC_MX_CORE_MODDESC);$/;" v
-SCSC_MX_CORE_MODDESC   scsc_mx_module.c        15;"    d       file:
-SCSC_MX_DEBUG_INTERFACES       mx_dbg_sampler.c        74;"    d       file:
-SCSC_MX_DEBUG_NODE     mx_dbg_sampler.c        72;"    d       file:
-SCSC_MX_SERVICE_RECOVERY_TIMEOUT       scsc_service.c  28;"    d       file:
-SCSC_NOTICE    scsc_logring_common.h   /^      SCSC_NOTICE,$/;"        e       enum:__anon10
-SCSC_PANIC_ORIGIN_FW   mxman.c 49;"    d       file:
-SCSC_PANIC_ORIGIN_HOST mxman.c 50;"    d       file:
-SCSC_PANIC_ORIGIN_MASK mxman.c 57;"    d       file:
-SCSC_PANIC_SUBCODE_MASK        mxman.c 59;"    d       file:
-SCSC_PANIC_TECH_BT     mxman.c 54;"    d       file:
-SCSC_PANIC_TECH_CORE   mxman.c 53;"    d       file:
-SCSC_PANIC_TECH_MASK   mxman.c 58;"    d       file:
-SCSC_PANIC_TECH_UNSP   mxman.c 55;"    d       file:
-SCSC_PANIC_TECH_WLAN   mxman.c 52;"    d       file:
-SCSC_PCIE_AMBA2TRANSAXICTR     pcie_mif.h      46;"    d
-SCSC_PCIE_AMBA2TRANSAXIRADDR   pcie_mif.h      45;"    d
-SCSC_PCIE_AMBA2TRANSAXIRCNT    pcie_mif.h      43;"    d
-SCSC_PCIE_AMBA2TRANSAXIWADDR   pcie_mif.h      44;"    d
-SCSC_PCIE_AMBA2TRANSAXIWCNT    pcie_mif.h      42;"    d
-SCSC_PCIE_AXICTRL      pcie_mif.h      33;"    d
-SCSC_PCIE_AXIDATA      pcie_mif.h      34;"    d
-SCSC_PCIE_AXIRADDR     pcie_mif.h      31;"    d
-SCSC_PCIE_AXIRCNT      pcie_mif.h      29;"    d
-SCSC_PCIE_AXIRDBP      pcie_mif.h      35;"    d
-SCSC_PCIE_AXIWADDR     pcie_mif.h      30;"    d
-SCSC_PCIE_AXIWCNT      pcie_mif.h      28;"    d
-SCSC_PCIE_CPTAR0       pcie_mif.h      57;"    d
-SCSC_PCIE_CPTAR1       pcie_mif.h      58;"    d
-SCSC_PCIE_CPTARDELAY   pcie_mif.h      68;"    d
-SCSC_PCIE_CPTAW0       pcie_mif.h      55;"    d
-SCSC_PCIE_CPTAW1       pcie_mif.h      56;"    d
-SCSC_PCIE_CPTAWDELAY   pcie_mif.h      67;"    d
-SCSC_PCIE_CPTB0        pcie_mif.h      59;"    d
-SCSC_PCIE_CPTENDADDR   pcie_mif.h      70;"    d
-SCSC_PCIE_CPTPHSEL     pcie_mif.h      72;"    d
-SCSC_PCIE_CPTR0        pcie_mif.h      63;"    d
-SCSC_PCIE_CPTR1        pcie_mif.h      64;"    d
-SCSC_PCIE_CPTR2        pcie_mif.h      65;"    d
-SCSC_PCIE_CPTRES       pcie_mif.h      66;"    d
-SCSC_PCIE_CPTRUN       pcie_mif.h      73;"    d
-SCSC_PCIE_CPTSRTADDR   pcie_mif.h      69;"    d
-SCSC_PCIE_CPTSZLTHID   pcie_mif.h      71;"    d
-SCSC_PCIE_CPTW0        pcie_mif.h      60;"    d
-SCSC_PCIE_CPTW1        pcie_mif.h      61;"    d
-SCSC_PCIE_CPTW2        pcie_mif.h      62;"    d
-SCSC_PCIE_DEBUG        pcie_mif.h      27;"    d
-SCSC_PCIE_FPGAVER      pcie_mif.h      74;"    d
-SCSC_PCIE_GRST pcie_mif.h      41;"    d
-SCSC_PCIE_GRST_OFFSET  pcie_mif.h      20;"    d
-SCSC_PCIE_IFAXICTRL    pcie_mif.h      40;"    d
-SCSC_PCIE_IFAXIRADDR   pcie_mif.h      39;"    d
-SCSC_PCIE_IFAXIRCNT    pcie_mif.h      37;"    d
-SCSC_PCIE_IFAXIWADDR   pcie_mif.h      38;"    d
-SCSC_PCIE_IFAXIWCNT    pcie_mif.h      36;"    d
-SCSC_PCIE_MAGIC_VAL    pcie_mif.h      18;"    d
-SCSC_PCIE_NEWMSG       pcie_mif.h      23;"    d
-SCSC_PCIE_OFFSET       pcie_mif.h      25;"    d
-SCSC_PCIE_PROC_H       pcie_proc.h     17;"    d
-SCSC_PCIE_READROUNDTRIPLAST    pcie_mif.h      54;"    d
-SCSC_PCIE_READROUNDTRIPMAX     pcie_mif.h      53;"    d
-SCSC_PCIE_READROUNDTRIPMIN     pcie_mif.h      52;"    d
-SCSC_PCIE_RUNEN        pcie_mif.h      26;"    d
-SCSC_PCIE_SIGNATURE    pcie_mif.h      24;"    d
-SCSC_PCIE_TBD  pcie_mif.h      32;"    d
-SCSC_PCIE_TRANS2PCIEREADALIGNAXICTRL   pcie_mif.h      51;"    d
-SCSC_PCIE_TRANS2PCIEREADALIGNAXIRADDR  pcie_mif.h      50;"    d
-SCSC_PCIE_TRANS2PCIEREADALIGNAXIRCNT   pcie_mif.h      48;"    d
-SCSC_PCIE_TRANS2PCIEREADALIGNAXIWADDR  pcie_mif.h      49;"    d
-SCSC_PCIE_TRANS2PCIEREADALIGNAXIWCNT   pcie_mif.h      47;"    d
-SCSC_PUT_RING_REFC     scsc_logring_ring.h     184;"   d
-SCSC_RF_HW_S610        mxman.c 221;"   d       file:
-SCSC_RINGREC_SZ        scsc_logring_ring.h     175;"   d
-SCSC_RING_FREE_BYTES   scsc_logring_ring.h     216;"   d
-SCSC_SAMLOG_FNAME      scsc_logring_debugfs.h  24;"    d
-SCSC_SAMSG_FNAME       scsc_logring_debugfs.h  23;"    d
-SCSC_SAMWRITE_FNAME    scsc_logring_debugfs.h  26;"    d
-SCSC_SOH       scsc_logring_common.h   27;"    d
-SCSC_STAT_FNAME        scsc_logring_debugfs.h  25;"    d
-SCSC_USED_BYTES        scsc_logring_ring.h     221;"   d
-SCSC_WARNING   scsc_logring_common.h   /^      SCSC_WARNING,$/;"       e       enum:__anon10
-SEMA0CON       mif_reg.h       82;"    d
-SEMA0STATE     mif_reg.h       83;"    d
-SEMAPHORE      mif_reg.h       81;"    d
-SEMAPHORE_BASE mif_reg.h       80;"    d
-SERVMAN_MESSAGES_H__   servman_messages.h      8;"     d
-SIGNATURE      pcie_mif.h      /^      u32 SIGNATURE;$/;"      m       struct:scsc_bar0_reg
-SM_MSG_START_CFM       servman_messages.h      /^      SM_MSG_START_CFM,$/;"   e       enum:__anon7
-SM_MSG_START_REQ       servman_messages.h      /^      SM_MSG_START_REQ,$/;"   e       enum:__anon7
-SM_MSG_STOP_CFM        servman_messages.h      /^      SM_MSG_STOP_CFM,$/;"    e       enum:__anon7
-SM_MSG_STOP_REQ        servman_messages.h      /^      SM_MSG_STOP_REQ,$/;"    e       enum:__anon7
-STATES mif_reg.h       142;"   d
-STATSTR_SZ     scsc_logring_debugfs.h  21;"    d
-STRING_BUFFER_MAX_LENGTH       mxman.c 34;"    d       file:
-SYNC_MAGIC     scsc_logring_ring.h     155;"   d
-SYNC_VALUE_PHASE_4     mxlog.h 15;"    d
-SYNC_VALUE_PHASE_5     mxlog.h 16;"    d
-SYS_PWR_CFG    mif_reg.h       144;"   d
-SYS_PWR_CFG_16 mif_reg.h       146;"   d
-SYS_PWR_CFG_2  mif_reg.h       145;"   d
-TBD    pcie_mif.h      /^      u32 TBD;$/;"    m       struct:scsc_bar0_reg
-TCXO_GATE_WIFI_SYS_PWR_REG     mif_reg.h       132;"   d
-TRANS2PCIEREADALIGNAXICTRL     pcie_mif.h      /^      u32 TRANS2PCIEREADALIGNAXICTRL;$/;"     m       struct:scsc_bar0_reg
-TRANS2PCIEREADALIGNAXIRADDR    pcie_mif.h      /^      u32 TRANS2PCIEREADALIGNAXIRADDR;$/;"    m       struct:scsc_bar0_reg
-TRANS2PCIEREADALIGNAXIRCNT     pcie_mif.h      /^      u32 TRANS2PCIEREADALIGNAXIRCNT;$/;"     m       struct:scsc_bar0_reg
-TRANS2PCIEREADALIGNAXIWADDR    pcie_mif.h      /^      u32 TRANS2PCIEREADALIGNAXIWADDR;$/;"    m       struct:scsc_bar0_reg
-TRANS2PCIEREADALIGNAXIWCNT     pcie_mif.h      /^      u32 TRANS2PCIEREADALIGNAXIWCNT;$/;"     m       struct:scsc_bar0_reg
-TSTAMP_LEN     mxlog.h 23;"    d
-USBPLL_CON0    mif_reg.h       150;"   d
-USBPLL_CON1    mif_reg.h       153;"   d
-VER_MAJOR      mx_dbg_sampler.c        69;"    d       file:
-VER_MAJOR      mx_mmap.c       37;"    d       file:
-VER_MINOR      mx_dbg_sampler.c        70;"    d       file:
-VER_MINOR      mx_mmap.c       38;"    d       file:
-VM_RESERVED    mx_dbg_sampler.c        66;"    d       file:
-VM_RESERVED    mx_mmap.c       34;"    d       file:
-WAIT_FOR_FW_TO_START_DELAY_MS  mxman.c 38;"    d       file:
-WIFI2AP_MEM_CONFIG0    mif_reg.h       115;"   d
-WIFI2AP_MEM_CONFIG1    mif_reg.h       120;"   d
-WIFI2AP_MEM_CONFIG2    mif_reg.h       127;"   d
-WIFI2AP_MEM_CONFIG3    mif_reg.h       128;"   d
-WIFI2AP_MODAPIF_CONFIG mif_reg.h       125;"   d
-WIFI2AP_QOS    mif_reg.h       126;"   d
-WIFI_ACTIVE_CLR        mif_reg.h       93;"    d
-WIFI_ACTIVE_EN mif_reg.h       92;"    d
-WIFI_CTRL_NS   mif_reg.h       89;"    d
-WIFI_CTRL_S    mif_reg.h       103;"   d
-WIFI_DEBUG     mif_reg.h       111;"   d
-WIFI_PWRON     mif_reg.h       90;"    d
-WIFI_RESET_REQ_CLR     mif_reg.h       95;"    d
-WIFI_RESET_REQ_EN      mif_reg.h       94;"    d
-WIFI_RESET_SET mif_reg.h       91;"    d
-WIFI_START     mif_reg.h       104;"   d
-WIFI_STAT      mif_reg.h       110;"   d
-WLBT2AP_MIF_ACCESS_WIN0        mif_reg.h       116;"   d
-WLBT2AP_MIF_ACCESS_WIN1        mif_reg.h       117;"   d
-WLBT2AP_MIF_ACCESS_WIN2        mif_reg.h       118;"   d
-WLBT2AP_MIF_ACCESS_WIN3        mif_reg.h       119;"   d
-WLBT2AP_PERI_ACCESS_WIN        mif_reg.h       124;"   d
-WLBT_BOOT_TEST_RST_CFG mif_reg.h       121;"   d
-_CORE_H_       scsc_mx_impl.h  8;"     d
-_MAXWELL_MANAGER_H     mxman.h 8;"     d
-_MXLOG_H       mxlog.h 8;"     d
-_PANICMON_H    panicmon.h      8;"     d
-_SCSC_LOGRING_DEBUGFS_H_       scsc_logring_debugfs.h  8;"     d
-_SCSC_LOGRING_MAIN_H_  scsc_logring_main.h     8;"     d
-_SCSC_LOGRING_RING_H_  scsc_logring_ring.h     8;"     d
-_SRVMAN_H      srvman.h        8;"     d
-_SUSPENDMON_H  suspendmon.h    10;"    d
-__HCI_LOOPBACK_H       scsc_loopback.h 2;"     d
-__MIFINTRBIT_H mifintrbit.h    8;"     d
-__MIFMBOXMAN_H mifmboxman.h    8;"     d
-__MIFRAMMAN_H  miframman.h     8;"     d
-__MIF_REG_H    mif_reg.h       8;"     d
-__MX140_CLK_TEST_H___  mx140_clk_test.h        8;"     d
-__MX_DBG_SAMPLER_H__   mx_dbg_sampler.h        8;"     d
-__PCIE_MIF_H   pcie_mif.h      8;"     d
-__PLATFORM_MIF_H       platform_mif.h  8;"     d
-__PLATFORM_MIF_MODULE_H        platform_mif_module.h   8;"     d
-__SCSC_APP_MSG_H__     scsc_app_msg.h  8;"     d
-__SCSC_LOGRING_COMMON_H__      scsc_logring_common.h   8;"     d
-__SCSC_MIF_ABS_H       scsc_mif_abs.h  8;"     d
-__SCSC_MODPARAM_DESC   scsc_logring_common.h   44;"    d
-__SCSC_PETERSON_H      peterson_mutex.h        8;"     d
-__miframman_alloc      miframman.c     /^void *__miframman_alloc(struct miframman *ram, size_t nbytes)$/;"     f
-__miframman_free       miframman.c     /^void __miframman_free(struct miframman *ram, void *mem)$/;"   f
-__mx140_file_download_fw       mx140_file.c    /^static int __mx140_file_download_fw(struct scsc_mx *mx, void *dest, size_t dest_size, u32 *fw_image_size, const char *fw_suffix)$/;"  f       file:
-__mxman_open   mxman.c /^static int __mxman_open(struct mxman *mxman)$/;"      f       file:
-__packed       mxlog.h /^} __packed;$/;"       v       typeref:struct:mxlog_event_log_msg
-__packed       mxman.c /^} __packed;$/;"       v       typeref:struct:ma_msg_packet
-__packed       mxmgmt_transport_format.h       /^} __packed;$/;"       v       typeref:struct:mxmgr_message
-__packed       scsc_logring_ring.h     /^} __packed; \/* should NOT be needed *\/$/;"  v       typeref:struct:scsc_ring_record
-__packed       servman_messages.h      /^} __packed;$/;"       v       typeref:struct:sm_msg_packet
-__platform_mif_irq_bit_mask_read       platform_mif.c  /^static u32 __platform_mif_irq_bit_mask_read(struct platform_mif *platform)$/;"        f       file:
-__platform_mif_irq_bit_mask_write      platform_mif.c  /^static void __platform_mif_irq_bit_mask_write(struct platform_mif *platform, u32 val)$/;"     f       file:
-__platform_mif_usbpll_claim    platform_mif.c  /^static void __platform_mif_usbpll_claim(struct platform_mif *platform, bool wlbt)$/;" f       file:
-__this_module  mx_client_test.mod.c    /^__visible struct module __this_module$/;"     v       typeref:struct:module
-__this_module  scsc_mx.mod.c   /^__visible struct module __this_module$/;"     v       typeref:struct:module
-__used mx_client_test.mod.c    /^__used$/;"    v       file:
-__used mx_client_test.mod.c    /^__used$/;"    v       typeref:struct:____versions     file:
-__used scsc_mx.mod.c   /^__used$/;"    v       file:
-__used scsc_mx.mod.c   /^__used$/;"    v       typeref:struct:____versions     file:
-_mx_exec       mxman.c /^static int _mx_exec(char *prog, int wait_exec)$/;"    f       file:
-_mx_exec_cleanup       mxman.c /^static void _mx_exec_cleanup(struct subprocess_info *sp_info)$/;"     f       file:
-_read_one_whole_record scsc_logring_ring.c     /^_read_one_whole_record(void *tbuf, struct scsc_ring_buffer *rb,$/;"   f       file:
-_scsc_printk   scsc_logring_main.c     /^static inline int _scsc_printk(int level, int tag,$/;"        f       file:
-alloc_ring_buffer      scsc_logring_ring.c     /^struct scsc_ring_buffer __init *alloc_ring_buffer(size_t bsz, size_t ssz,$/;" f
-allow_unidentified_firmware    mxman.c /^static bool allow_unidentified_firmware;$/;"  v       file:
-api_access_mutex       srvman.h        /^      struct mutex     api_access_mutex;$/;"  m       struct:srvman   typeref:struct:srvman::mutex
-arg    mxman.c /^      uint32_t arg;   \/* Optional arg set by f\/w in some to-host messages *\/$/;"   m       struct:ma_msg_packet    file:
-auto_start     client_test.c   /^static int auto_start = 2;$/;"        v       file:
-auto_start     client_test.c   /^static int auto_start;$/;"    v       file:
-auto_start     mx140_clk.c     /^static int auto_start;$/;"    v       file:
-auto_start     mx_dbg_sampler.c        /^static bool auto_start;$/;"   v       file:
-auto_start     mx_dbg_sampler.h        /^      uint32_t auto_start;$/;"        m       struct:debug_sampler_config
-base   platform_mif.c  /^      void __iomem  *base;$/;"        m       struct:platform_mif     file:
-base_dir       mx140_file.c    /^static char *base_dir = MX140_FW_BASE_DIR_ETC_WIFI;$/;"       v       file:
-binary_hexdump scsc_logring_ring.c     /^int binary_hexdump(char *tbuf, int tsz, struct scsc_ring_record *rrec,$/;"    f       file:
-bitmap miframman.h     /^      char         bitmap[MIFRAMMAN_NUM_BLOCKS]; \/* Zero initialized-> all blocks free *\/$/;"       m       struct:miframman
-bits_byte      mifproc.c       213;"   d       file:
-bits_void      mifproc.c       214;"   d       file:
-block_thread   mxlog_transport.h       /^      int                block_thread;$/;"    m       struct:mxlog_thread
-block_thread   mxmgmt_transport.h      /^      int                block_thread;$/;"    m       struct:mxmgmt_thread
-bsz    scsc_logring_ring.h     /^      size_t            bsz;$/;"      m       struct:scsc_ring_buffer
-buf    scsc_logring_debugfs.h  /^      char   buf[SAMWRITE_BUFSZ];$/;" m       struct:write_config
-buf    scsc_logring_ring.h     /^      char              *buf;$/;"     m       struct:scsc_ring_buffer
-buf_conf       mxconf.h        /^      struct mxcbufconf buf_conf;$/;" m       struct:mxstreamconf     typeref:struct:mxstreamconf::mxcbufconf
-buf_len        mx_dbg_sampler.c        /^static unsigned int buf_len = 512 * 1024;$/;" v       file:
-buf_len        mx_dbg_sampler.h        /^      uint32_t buf_len;$/;"   m       struct:debug_sampler_buffer_info
-buf_offset     mx_dbg_sampler.h        /^      uint32_t buf_offset;$/;"        m       struct:debug_sampler_buffer_info
-buf_sz scsc_logring_debugfs.h  /^      size_t buf_sz;$/;"      m       struct:write_config
-bufdir scsc_logring_debugfs.h  /^      struct dentry *bufdir;$/;"      m       struct:scsc_debugfs_info        typeref:struct:scsc_debugfs_info::dentry
-buffer cpacket_buffer.h        /^      void           *buffer;     \/* Buffer location *\/$/;" m       struct:cpacketbuffer
-buffer mifstream.h     /^      struct cpacketbuffer buffer;$/;"        m       struct:mif_stream       typeref:struct:mif_stream::cpacketbuffer
-buffer mxlog.h /^      u8             buffer[MXLOG_BUFFER_SIZE];$/;"   m       struct:mxlog
-buffer_info    mx_dbg_sampler.h        /^      struct debug_sampler_buffer_info buffer_info;$/;"       m       struct:debug_sampler_config     typeref:struct:debug_sampler_config::debug_sampler_buffer_info
-buffer_loc     mxconf.h        /^      scsc_mifram_ref buffer_loc;      \/**< Location of allocated buffer in DRAM *\/$/;"     m       struct:mxcbufconf
-build_header   scsc_logring_ring.c     /^int build_header(char *buf, int blen, struct scsc_ring_record *r,$/;" f       file:
-build_len_sign_maps    mxlog.c /^static inline void build_len_sign_maps(char *fmt, u32 *smap, u32 *lmap,$/;"   f       file:
-cached_reads   scsc_logring_debugfs.h  /^      size_t           cached_reads;$/;"      m       struct:scsc_ibox
-cdev   mx_dbg_sampler.c        /^      struct cdev                 cdev;$/;"   m       struct:mx_dbg_sampler_dev       typeref:struct:mx_dbg_sampler_dev::cdev file:
-cdev   mx_mmap.c       /^      struct cdev          cdev;$/;"  m       struct:mx_mmap_dev      typeref:struct:mx_mmap_dev::cdev        file:
-channel_handler_data   gdb_transport.h /^      void                    *channel_handler_data;$/;"      m       struct:gdb_transport
-channel_handler_data   mxlog_transport.h       /^      void                    *channel_handler_data;$/;"      m       struct:mxlog_transport
-channel_handler_data   mxmgmt_transport.h      /^      void                   *channel_handler_data[MMTRANS_NUM_CHANNELS];$/;" m       struct:mxmgmt_transport
-channel_handler_fn     gdb_transport.h /^      gdb_channel_handler     channel_handler_fn;$/;" m       struct:gdb_transport
-channel_handler_fn     mxlog_transport.h       /^      mxlog_channel_handler   channel_handler_fn;$/;" m       struct:mxlog_transport
-channel_handler_fns    mxmgmt_transport.h      /^      mxmgmt_channel_handler channel_handler_fns[MMTRANS_NUM_CHANNELS];$/;"   m       struct:mxmgmt_transport
-channel_handler_mutex  gdb_transport.h /^      struct mutex            channel_handler_mutex;$/;"      m       struct:gdb_transport    typeref:struct:gdb_transport::mutex
-channel_handler_mutex  mxmgmt_transport.h      /^      struct mutex           channel_handler_mutex;$/;"       m       struct:mxmgmt_transport typeref:struct:mxmgmt_transport::mutex
-channel_id     mxmgmt_transport_format.h       /^      uint8_t channel_id; \/* Channel ID from mxmgr_channels *\/$/;"  m       struct:mxmgr_message
-check_crc      mxman.h /^      bool                    check_crc;$/;"  m       struct:mxman
-chv_argc       mxman.c /^static int chv_argc;$/;"      v       file:
-chv_argv       mxman.c /^static unsigned int chv_argv[32];$/;" v       file:
-chv_disable_irq        platform_mif.c  /^static bool chv_disable_irq;$/;"      v       file:
-chv_run        mxman.c /^int chv_run;$/;"      v
-class_mx_dbg_sampler   mx_dbg_sampler.c        /^      struct class              *class_mx_dbg_sampler;$/;"    m       struct:__anon3  typeref:struct:__anon3::class   file:
-class_mx_mmap  mx_mmap.c       /^      struct class       *class_mx_mmap;$/;"  m       struct:__anon9  typeref:struct:__anon9::class   file:
-clean-files    Makefile        /^clean-files := *.o *.ko$/;"   m
-client scsc_service.c  /^      struct scsc_service_client *client;$/;" m       struct:scsc_service     typeref:struct:scsc_service::scsc_service_client        file:
-client_cb      mx140_clk_test.c        /^static void client_cb(void *data, enum mx140_clk20mhz_status event)$/;"       f       file:
-client_gdb_driver      mx_mmap.c       /^struct gdb_transport_client client_gdb_driver = {$/;" v       typeref:struct:gdb_transport_client
-client_gdb_probe       mx_mmap.c       /^void client_gdb_probe(struct gdb_transport_client *gdb_client, struct gdb_transport *gdb_transport, char *dev_uid)$/;"        f
-client_gdb_remove      mx_mmap.c       /^void client_gdb_remove(struct gdb_transport_client *gdb_client, struct gdb_transport *gdb_transport)$/;"      f
-client_module_probe    client_test.c   /^void client_module_probe(struct scsc_mx_module_client *module_client, struct scsc_mx *mx, enum scsc_module_client_reason reason)$/;"  f
-client_module_remove   client_test.c   /^void client_module_remove(struct scsc_mx_module_client *module_client, struct scsc_mx *mx, enum scsc_module_client_reason reason)$/;" f
-client_test_cdev       client_test.c   /^static struct cdev  *client_test_cdev;$/;"    v       typeref:struct:cdev     file:
-client_test_class      client_test.c   /^static struct class *client_test_class;$/;"   v       typeref:struct:class    file:
-client_test_dev_fops   client_test.c   /^static const struct file_operations client_test_dev_fops = {$/;"      v       typeref:struct:file_operations  file:
-client_test_dev_open   client_test.c   /^static int client_test_dev_open(struct inode *inode, struct file *file)$/;"   f       file:
-client_test_dev_read   client_test.c   /^static ssize_t client_test_dev_read(struct file *filp, char *buffer, size_t length, loff_t *offset)$/;"       f       file:
-client_test_dev_release        client_test.c   /^static int client_test_dev_release(struct inode *inode, struct file *file)$/;"        f       file:
-client_test_dev_t      client_test.c   /^static dev_t        client_test_dev_t;$/;"    v       file:
-client_test_dev_write  client_test.c   /^static ssize_t client_test_dev_write(struct file *file, const char *data, size_t len, loff_t *offset)$/;"     f       file:
-client_test_driver     client_test.c   /^struct scsc_mx_module_client client_test_driver = {$/;"       v       typeref:struct:scsc_mx_module_client
-clients_list   gdb_transport.c /^      struct list_head clients_list;$/;"      m       struct:gdb_transport_module     typeref:struct:gdb_transport_module::list_head  file:
-clients_list   scsc_mx_module.c        /^      struct list_head clients_list;$/;"      m       struct:mx_module        typeref:struct:mx_module::list_head     file:
-clients_node   gdb_transport.c /^struct clients_node {$/;"     s       file:
-clients_node   scsc_mx_module.c        /^struct clients_node {$/;"     s       file:
-clk20mhz       mx140_clk.c     /^} clk20mhz;$/;"       v       typeref:struct:mx140_clk20mhz   file:
-clk_request    mx140_clk.c     /^      atomic_t                   clk_request;$/;"     m       struct:mx140_clk20mhz   file:
-clk_wake_lock  mx140_clk.c     /^      struct wake_lock           clk_wake_lock;$/;"   m       struct:mx140_clk20mhz   typeref:struct:mx140_clk20mhz::wake_lock        file:
-cmu_base       platform_mif.c  /^      struct regmap *cmu_base;$/;"    m       struct:platform_mif     typeref:struct:platform_mif::regmap     file:
-completion     mxlog_transport.h       /^      struct completion  completion;$/;"      m       struct:mxlog_thread     typeref:struct:mxlog_thread::completion
-completion     mxmgmt_transport.h      /^      struct completion  completion;$/;"      m       struct:mxmgmt_thread    typeref:struct:mxmgmt_thread::completion
-con0_base      platform_mif.c  /^      void __iomem  *con0_base;$/;"   m       struct:platform_mif     file:
-const_crc32    fwhdr.h /^      u32 const_crc32;$/;"    m       struct:fwhdr
-const_fw_length        fwhdr.h /^      u32 const_fw_length;$/;"        m       struct:fwhdr
-core   scsc_logring_ring.h     /^      u8 core;$/;"    m       struct:scsc_ring_record
-coredump_helper        mxman.c /^static int coredump_helper(void)$/;"  f       file:
-cpacketbuffer  cpacket_buffer.h        /^struct cpacketbuffer {$/;"    s
-cpacketbuffer_address_to_index cpacket_buffer.c        /^static inline uint32_t cpacketbuffer_address_to_index(struct cpacketbuffer *buffer, const uint8_t *address)$/;"       f       file:
-cpacketbuffer_advance_index    cpacket_buffer.c        /^static inline void cpacketbuffer_advance_index(uint32_t *idx, uint32_t amount, uint32_t buffer_size)$/;"      f       file:
-cpacketbuffer_config_serialise cpacket_buffer.c        /^void cpacketbuffer_config_serialise(const struct cpacketbuffer *buffer, struct mxcbufconf *buf_conf)$/;"      f
-cpacketbuffer_free_space       cpacket_buffer.c        /^uint32_t cpacketbuffer_free_space(const struct cpacketbuffer *buffer)$/;"     f
-cpacketbuffer_index_to_address cpacket_buffer.c        /^static inline uint8_t *cpacketbuffer_index_to_address(struct cpacketbuffer *buffer, uint32_t *idx)$/;"        f       file:
-cpacketbuffer_init     cpacket_buffer.c        /^int cpacketbuffer_init(struct cpacketbuffer *buffer, uint32_t num_packets, uint32_t packet_size, struct scsc_mx *mx)$/;"      f
-cpacketbuffer_is_empty cpacket_buffer.c        /^bool cpacketbuffer_is_empty(const struct cpacketbuffer *buffer)$/;"   f
-cpacketbuffer_is_full  cpacket_buffer.c        /^bool cpacketbuffer_is_full(const struct cpacketbuffer *buffer)$/;"    f
-cpacketbuffer_packet_size      cpacket_buffer.c        /^uint32_t cpacketbuffer_packet_size(const struct cpacketbuffer *buffer)$/;"    f
-cpacketbuffer_peek     cpacket_buffer.c        /^const void *cpacketbuffer_peek(struct cpacketbuffer *buffer, const void *current_packet)$/;"  f
-cpacketbuffer_peek_complete    cpacket_buffer.c        /^void cpacketbuffer_peek_complete(struct cpacketbuffer *buffer, const void *current_packet)$/;"        f
-cpacketbuffer_read     cpacket_buffer.c        /^uint32_t cpacketbuffer_read(struct cpacketbuffer *buffer, void *buf, uint32_t num_bytes)$/;"  f
-cpacketbuffer_read_index       cpacket_buffer.c        /^static inline uint32_t cpacketbuffer_read_index(const struct cpacketbuffer *buffer)$/;"       f       file:
-cpacketbuffer_release  cpacket_buffer.c        /^void cpacketbuffer_release(struct cpacketbuffer *buffer)$/;"  f
-cpacketbuffer_write    cpacket_buffer.c        /^bool cpacketbuffer_write(struct cpacketbuffer *buffer, const void *buf, uint32_t num_bytes)$/;"       f
-cpacketbuffer_write_block      cpacket_buffer.c        /^static bool cpacketbuffer_write_block(struct cpacketbuffer *buffer, const void *buf, uint32_t num_bytes)$/;"  f       file:
-cpacketbuffer_write_gather     cpacket_buffer.c        /^bool cpacketbuffer_write_gather(struct cpacketbuffer *buffer, const void **bufs, uint32_t *num_bytes, uint32_t num_bufs)$/;"  f
-cpacketbuffer_write_index      cpacket_buffer.c        /^static inline uint32_t cpacketbuffer_write_index(const struct cpacketbuffer *buffer)$/;"      f       file:
-crc    scsc_logring_ring.h     /^      u32 crc;$/;"    m       struct:scsc_ring_record
-crc_check_allow_none   mxman.c /^static bool crc_check_allow_none = true;$/;"  v       file:
-crc_check_period_ms    mxman.c /^static int crc_check_period_ms = 30000;$/;"   v       file:
-ctx    scsc_logring_ring.h     /^      u8 ctx;$/;"     m       struct:scsc_ring_record
-data   mx140_clk.c     /^      void                       *data;$/;"   m       struct:mx140_clk20mhz   file:
-data   scsc_app_msg.h  /^      __u8  data[0];$/;"      m       struct:scsc_app_msg_resp
-debug_sampler_align    mx_dbg_sampler.h        /^struct debug_sampler_align {$/;"      s
-debug_sampler_buffer_info      mx_dbg_sampler.h        /^struct debug_sampler_buffer_info {$/;"        s
-debug_sampler_config   mx_dbg_sampler.h        /^struct debug_sampler_config {$/;"     s
-debug_sampler_sample_spec      mx_dbg_sampler.h        /^struct debug_sampler_sample_spec {$/;"        s
-debugfile_llseek       scsc_logring_debugfs.c  /^loff_t debugfile_llseek(struct file *filp, loff_t off, int whence)$/;"        f
-debugfile_open scsc_logring_debugfs.c  /^static int debugfile_open(struct inode *ino, struct file *filp)$/;"   f       file:
-debugfile_release      scsc_logring_debugfs.c  /^static int debugfile_release(struct inode *ino, struct file *filp)$/;"        f       file:
-default_dbglevel       scsc_logring_main.c     /^static int              default_dbglevel = DEFAULT_DBGLEVEL;$/;"      v       file:
-delay_open_start_services      client_test.c   /^static void delay_open_start_services(void)$/;"       f       file:
-delay_start_func       client_test.c   /^static void delay_start_func(struct work_struct *work)$/;"    f       file:
-destroy        scsc_mif_abs.h  /^      void (*destroy)(struct scsc_mif_abs *interface);$/;"    m       struct:scsc_mif_abs
-dev    mx_dbg_sampler.c        /^      struct device               *dev;$/;"   m       struct:mx_dbg_sampler_dev       typeref:struct:mx_dbg_sampler_dev::device       file:
-dev    mx_mmap.c       /^      struct device        *dev;$/;"  m       struct:mx_mmap_dev      typeref:struct:mx_mmap_dev::device      file:
-dev    pcie_mif.c      /^      struct device         *dev;$/;" m       struct:pcie_mif typeref:struct:pcie_mif::device file:
-dev    platform_mif.c  /^      struct device          *dev;$/;"        m       struct:platform_mif     typeref:struct:platform_mif::device     file:
-device mx_dbg_sampler.c        /^      dev_t                     device;$/;"   m       struct:__anon3  file:
-device mx_mmap.c       /^      dev_t              device;$/;"  m       struct:__anon9  file:
-devs   mx_dbg_sampler.c        /^      struct mx_dbg_sampler_dev devs[SCSC_MX_DEBUG_INTERFACES];$/;"   m       struct:__anon3  typeref:struct:__anon3::mx_dbg_sampler_dev      file:
-devs   mx_mmap.c       /^      struct mx_mmap_dev devs[SCSC_MAX_INTERFACES];      \/*MMAP NODE + GDB NODE*\/$/;"       m       struct:__anon9  typeref:struct:__anon9::mx_mmap_dev     file:
-direction      mifstream.h     /^      enum MIF_STREAM_DIRECTION direction;$/;"        m       struct:mif_stream       typeref:enum:mif_stream::MIF_STREAM_DIRECTION
-disable_auto_coredump  mxman.c /^static bool disable_auto_coredump;$/;"        v       file:
-disable_error_handling mxman.c /^static bool disable_error_handling;$/;"       v       file:
-disable_logger mxman.c /^static bool disable_logger = true;$/;"        v       file:
-disable_recovery_handling      mxman.c /^static bool disable_recovery_handling = 1;$/;"        v       file:
-dma_addr       pcie_mif.c      /^      dma_addr_t            dma_addr;$/;"     m       struct:pcie_mif file:
-dma_using_dac  pcie_mif.c      /^      int                   dma_using_dac; \/* =1 if 64-bit DMA is used, =0 otherwise. *\/$/;"        m       struct:pcie_mif file:
-do_fw_crc32_checks     mxman.c /^static int do_fw_crc32_checks(char *fw, u32 fw_image_size, struct fwhdr *fwhdr, bool crc32_over_binary)$/;"   f       file:
-driver pcie_mif_module.c       /^      struct scsc_mif_abs_driver *driver; \/* list of drivers (in practice just the core_module) *\/$/;"      m       struct:mif_driver_node  typeref:struct:mif_driver_node::scsc_mif_abs_driver     file:
-driver pcie_mif_module.c       /^      struct scsc_mif_mmap_driver *driver; \/* list of drivers (in practive just the core_module) *\/$/;"     m       struct:mif_mmap_node    typeref:struct:mif_mmap_node::scsc_mif_mmap_driver      file:
-driver platform_mif_module.c   /^      struct scsc_mif_abs_driver *driver;$/;" m       struct:mif_driver_node  typeref:struct:mif_driver_node::scsc_mif_abs_driver     file:
-driver platform_mif_module.c   /^      struct scsc_mif_mmap_driver *driver;$/;"        m       struct:mif_mmap_node    typeref:struct:mif_mmap_node::scsc_mif_mmap_driver      file:
-drop_message_level_macro       scsc_logring_main.c     /^static inline void drop_message_level_macro(const char *fmt, char **msg)$/;"  f       file:
-enable scsc_logring_main.c     /^static int              enable = DEFAULT_ENABLE_LOGRING;$/;"  v       file:
-enable_auto_sense      mx140_file.c    /^static bool enable_auto_sense;$/;"    v       file:
-enable_pcie_mif_arm_reset      pcie_mif.c      /^static bool enable_pcie_mif_arm_reset = true;$/;"     v       file:
-enable_platform_mif_arm_reset  platform_mif.c  /^static bool enable_platform_mif_arm_reset = true;$/;" v       file:
-error  mx_dbg_sampler.c        /^      u8                          error;$/;"  m       struct:mx_dbg_sampler_dev       file:
-error  srvman.h        /^      bool             error;$/;"     m       struct:srvman
-f_pos  scsc_logring_debugfs.h  /^      loff_t                  f_pos;$/;"      m       struct:scsc_ibox
-failure_work   mxman.h /^      struct work_struct      failure_work;$/;"       m       struct:mxman    typeref:struct:mxman::work_struct
-failure_wq     mxman.h /^      struct workqueue_struct *failure_wq;$/;"        m       struct:mxman    typeref:struct:mxman::workqueue_struct
-failure_wq_deinit      mxman.c /^static void failure_wq_deinit(struct mxman *mxman)$/;"        f       file:
-failure_wq_init        mxman.c /^static void failure_wq_init(struct mxman *mxman)$/;"  f       file:
-failure_wq_start       mxman.c /^static void failure_wq_start(struct mxman *mxman)$/;" f       file:
-failure_wq_stop        mxman.c /^static void failure_wq_stop(struct mxman *mxman)$/;"  f       file:
-fifo   mx_mmap.c       /^      struct kfifo         fifo;$/;"  m       struct:mx_mmap_dev      typeref:struct:mx_mmap_dev::kfifo       file:
-filp   mx_dbg_sampler.c        /^      struct file                 *filp;$/;"  m       struct:mx_dbg_sampler_dev       typeref:struct:mx_dbg_sampler_dev::file file:
-filp   mx_mmap.c       /^      struct file          *filp;$/;" m       struct:mx_mmap_dev      typeref:struct:mx_mmap_dev::file        file:
-finalize_record_crc    scsc_logring_ring.c     /^static inline void finalize_record_crc(struct scsc_ring_record *rec,$/;"      f       file:
-find_next_tail_far_enough_from_start   scsc_logring_ring.c     /^loff_t find_next_tail_far_enough_from_start(struct scsc_ring_buffer *rb,$/;"  f       file:
-firmware_entry_point   fwhdr.h /^      u32 firmware_entry_point;$/;"   m       struct:fwhdr
-firmware_hw_ver        mx140_file.c    /^static char *firmware_hw_ver = "auto";$/;"    v       file:
-firmware_startup_flags mxman.c /^static uint firmware_startup_flags;$/;"       v       file:
-firmware_variant       mx140_file.c    /^static char *firmware_variant = MX140_FW_VARIANT_DEFAULT;$/;" v       file:
-flag   mif_reg.h       /^      u32 flag[2];$/;"        m       struct:peterson_mutex
-flags  platform_mif.c  /^              int flags;$/;"  m       struct:platform_mif::__anon4    file:
-fmt    scsc_logring_debugfs.h  /^      char   *fmt;$/;"        m       struct:write_config
-free_mem       miframman.h     /^      u32          free_mem;$/;"      m       struct:miframman
-free_ring_buffer       scsc_logring_ring.c     /^void free_ring_buffer(struct scsc_ring_buffer *rb)$/;"        f
-from_ap_stream_conf    mxconf.h        /^      struct mxstreamconf from_ap_stream_conf;$/;"    m       struct:mxtransconf      typeref:struct:mxtransconf::mxstreamconf
-fw     mxman.h /^      char                    *fw;$/;"        m       struct:mxman
-fw_build_id    mxman.h /^      char                    fw_build_id[64];$/;"    m       struct:mxman
-fw_crc32       fwhdr.h /^      u32 fw_crc32;$/;"       m       struct:fwhdr
-fw_crc_work    mxman.h /^      struct delayed_work     fw_crc_work;$/;"        m       struct:mxman    typeref:struct:mxman::delayed_work
-fw_crc_work_func       mxman.c /^static void fw_crc_work_func(struct work_struct *work)$/;"    f       file:
-fw_crc_wq      mxman.h /^      struct workqueue_struct *fw_crc_wq;$/;" m       struct:mxman    typeref:struct:mxman::workqueue_struct
-fw_crc_wq_deinit       mxman.c /^static void fw_crc_wq_deinit(struct mxman *mxman)$/;" f       file:
-fw_crc_wq_init mxman.c /^static void fw_crc_wq_init(struct mxman *mxman)$/;"   f       file:
-fw_crc_wq_start        mxman.c /^static void fw_crc_wq_start(struct mxman *mxman)$/;"  f       file:
-fw_crc_wq_stop mxman.c /^static void fw_crc_wq_stop(struct mxman *mxman)$/;"   f       file:
-fw_image_size  mxman.h /^      u32                     fw_image_size;$/;"      m       struct:mxman
-fw_init        mxman.c /^static int fw_init(struct mxman *mxman, void *start_dram, size_t size_dram, bool *fwhdr_parsed_ok)$/;"        f       file:
-fw_parse_m4_panic_record       fw_panic_record.c       /^bool fw_parse_m4_panic_record(u32 *m4_panic_record)$/;"       f
-fw_parse_m4_panic_record_v1    fw_panic_record.c       /^static bool fw_parse_m4_panic_record_v1(u32 *m4_panic_record)$/;"     f       file:
-fw_parse_r4_panic_record       fw_panic_record.c       /^bool fw_parse_r4_panic_record(u32 *r4_panic_record)$/;"       f
-fw_parse_r4_panic_record_v2    fw_panic_record.c       /^static bool fw_parse_r4_panic_record_v2(u32 *r4_panic_record)$/;"     f       file:
-fw_runtime_length      fwhdr.h /^      u32 fw_runtime_length;$/;"      m       struct:fwhdr
-fw_suffix      mx140_file.c    /^struct fw_suffix {$/;"        s       file:
-fw_suffix_found        mx140_file.c    /^static int fw_suffix_found = -1;$/;"  v       file:
-fw_suffixes    mx140_file.c    /^static const struct fw_suffix fw_suffixes[] = {$/;"   v       typeref:struct:fw_suffix        file:
-fwapi_major    fwhdr.h /^      u16 fwapi_major;$/;"    m       struct:fwhdr
-fwapi_minor    fwhdr.h /^      u16 fwapi_minor;$/;"    m       struct:fwhdr
-fwhdr  fwhdr.h /^struct fwhdr {$/;"    s
-fwhdr  mxman.h /^      struct fwhdr            fwhdr;$/;"      m       struct:mxman    typeref:struct:mxman::fwhdr
-fwhdr_get_build_id     fwhdr.c /^char *fwhdr_get_build_id(char *fw, struct fwhdr *fwhdr)$/;"   f
-fwhdr_get_build_id_v02 fwhdr.c /^static char *fwhdr_get_build_id_v02(char *fw, struct fwhdr *fwhdr)$/;"        f       file:
-fwhdr_init     mxman.c /^static int fwhdr_init(char *fw, struct fwhdr *fwhdr, bool *fwhdr_parsed_ok, bool *check_crc)$/;"      f       file:
-fwhdr_parse    fwhdr.c /^bool fwhdr_parse(char *fw, struct fwhdr *fwhdr)$/;"   f
-fwhdr_parse_v02        fwhdr.c /^static bool fwhdr_parse_v02(char *fw, struct fwhdr *fwhdr)$/;"        f       file:
-fwimage_check_fw_const_section_crc     fwimage.c       /^int fwimage_check_fw_const_section_crc(char *fw, u32 const_crc32, u32 const_fw_length, u32 hdr_length)$/;"    f
-fwimage_check_fw_crc   fwimage.c       /^int fwimage_check_fw_crc(char *fw, u32 fw_image_length, u32 hdr_length, u32 fw_crc32)$/;"     f
-fwimage_check_fw_header_crc    fwimage.c       /^int  fwimage_check_fw_header_crc(char *fw, u32 hdr_length, u32 header_crc32)$/;"      f
-gdb_channel_handler    gdb_transport.h /^typedef void (*gdb_channel_handler)(const void *message, size_t length, void *data);$/;"      t
-gdb_client     gdb_transport.c /^      struct gdb_transport_client *gdb_client;$/;"    m       struct:clients_node     typeref:struct:clients_node::gdb_transport_client       file:
-gdb_read_callback      mx_mmap.c       /^void gdb_read_callback(const void *message, size_t length, void *data)$/;"    f
-gdb_transport  gdb_transport.c /^      struct gdb_transport *gdb_transport;$/;"        m       struct:gdb_transport_node       typeref:struct:gdb_transport_node::gdb_transport        file:
-gdb_transport  gdb_transport.h /^struct gdb_transport {$/;"    s
-gdb_transport  mx_mmap.c       /^      struct gdb_transport *gdb_transport;$/;"        m       struct:mx_mmap_dev      typeref:struct:mx_mmap_dev::gdb_transport       file:
-gdb_transport_client   gdb_transport.h /^struct gdb_transport_client {$/;"     s
-gdb_transport_config_serialise gdb_transport.c /^void gdb_transport_config_serialise(struct gdb_transport *gdb_transport,$/;"  f
-gdb_transport_enum     gdb_transport.h /^enum gdb_transport_enum {$/;" g
-gdb_transport_init     gdb_transport.c /^int gdb_transport_init(struct gdb_transport *gdb_transport, struct scsc_mx *mx, enum gdb_transport_enum type)$/;"     f
-gdb_transport_list     gdb_transport.c /^      struct list_head gdb_transport_list;$/;"        m       struct:gdb_transport_module     typeref:struct:gdb_transport_module::list_head  file:
-gdb_transport_m4       scsc_mx_impl.c  /^      struct gdb_transport    gdb_transport_m4;$/;"   m       struct:scsc_mx  typeref:struct:scsc_mx::gdb_transport   file:
-gdb_transport_module   gdb_transport.c /^static struct gdb_transport_module {$/;"      s       file:
-gdb_transport_module   gdb_transport.c /^} gdb_transport_module = {$/;"        v       typeref:struct:gdb_transport_module     file:
-gdb_transport_node     gdb_transport.c /^struct gdb_transport_node {$/;"       s       file:
-gdb_transport_probe_registered_clients gdb_transport.c /^static void gdb_transport_probe_registered_clients(struct gdb_transport *gdb_transport)$/;"   f       file:
-gdb_transport_r4       scsc_mx_impl.c  /^      struct gdb_transport    gdb_transport_r4;$/;"   m       struct:scsc_mx  typeref:struct:scsc_mx::gdb_transport   file:
-gdb_transport_register_channel_handler gdb_transport.c /^EXPORT_SYMBOL(gdb_transport_register_channel_handler);$/;"    v
-gdb_transport_register_channel_handler gdb_transport.c /^void gdb_transport_register_channel_handler(struct gdb_transport *gdb_transport,$/;"  f
-gdb_transport_register_client  gdb_transport.c /^EXPORT_SYMBOL(gdb_transport_register_client);$/;"     v
-gdb_transport_register_client  gdb_transport.c /^int gdb_transport_register_client(struct gdb_transport_client *gdb_client)$/;"        f
-gdb_transport_release  gdb_transport.c /^void gdb_transport_release(struct gdb_transport *gdb_transport)$/;"   f
-gdb_transport_send     gdb_transport.c /^EXPORT_SYMBOL(gdb_transport_send);$/;"        v
-gdb_transport_send     gdb_transport.c /^void gdb_transport_send(struct gdb_transport *gdb_transport, void *message, uint32_t message_length)$/;"      f
-gdb_transport_unregister_client        gdb_transport.c /^EXPORT_SYMBOL(gdb_transport_unregister_client);$/;"   v
-gdb_transport_unregister_client        gdb_transport.c /^void gdb_transport_unregister_client(struct gdb_transport_client *gdb_client)$/;"     f
-get_calculated_crc     scsc_logring_ring.c     /^static inline uint32_t get_calculated_crc(struct scsc_ring_record *rec,$/;"   f       file:
-get_debug_level        scsc_logring_main.c     /^static inline int get_debug_level(const char *fmt)$/;"        f       file:
-get_mbox_ptr   scsc_mif_abs.h  /^      u32  *(*get_mbox_ptr)(struct scsc_mif_abs *interface, u32 mbox_index);$/;"      m       struct:scsc_mif_abs
-get_mif_device scsc_mif_abs.h  /^      struct device *(*get_mif_device)(struct scsc_mif_abs *interface);$/;"   m       struct:scsc_mif_abs     typeref:struct:scsc_mif_abs::get_mif_device
-get_mifram_pfn scsc_mif_abs.h  /^      uintptr_t (*get_mifram_pfn)(struct scsc_mif_abs *interface);$/;"        m       struct:scsc_mif_abs
-get_mifram_ptr scsc_mif_abs.h  /^      void      *(*get_mifram_ptr)(struct scsc_mif_abs *interface, scsc_mifram_ref ref);$/;"  m       struct:scsc_mif_abs
-get_mifram_ref scsc_mif_abs.h  /^      int       (*get_mifram_ref)(struct scsc_mif_abs *interface, void *ptr, scsc_mifram_ref *ref);$/;"       m       struct:scsc_mif_abs
-get_uid        scsc_mif_abs.h  /^      char *(*get_uid)(struct scsc_mif_abs *interface);$/;"   m       struct:scsc_mif_abs
-global_fmt_string      scsc_logring_debugfs.c  /^static char          *global_fmt_string = "%s";$/;"   v       file:
-gpio_base      platform_mif.c  /^static void __iomem *gpio_base;$/;"   v       file:
-gpr4_debug     platform_mif.c  /^static bool         gpr4_debug;$/;"   v       file:
-handle_klogbuf_out_binary      scsc_logring_main.c     /^void handle_klogbuf_out_binary(int level, int tag, const void *start,$/;"     f       file:
-handle_klogbuf_out_string      scsc_logring_main.c     /^void handle_klogbuf_out_string(int level, struct device *dev, int tag,$/;"    f       file:
-hdr_length     fwhdr.h /^      u32 hdr_length;$/;"     m       struct:fwhdr
-hdr_major      fwhdr.h /^      u16 hdr_major;$/;"      m       struct:fwhdr
-hdr_minor      fwhdr.h /^      u16 hdr_minor;$/;"      m       struct:fwhdr
-head   scsc_logring_ring.h     /^      loff_t            head;$/;"     m       struct:scsc_ring_buffer
-header_crc32   fwhdr.h /^      u32 header_crc32;$/;"   m       struct:fwhdr
-header_handler_fn      mxlog_transport.h       /^      mxlog_header_handler    header_handler_fn;$/;"  m       struct:mxlog_transport
-hw_ver mx140_file.c    /^      u32 hw_ver;$/;" m       struct:fw_suffix        file:
-id     scsc_service.c  /^      enum scsc_service_id       id;$/;"      m       struct:scsc_service     typeref:enum:scsc_service::scsc_service_id      file:
-in_use mifmboxman.h    /^      bool         in_use;$/;"        m       struct:mifmboxman
-index  mx_dbg_sampler.h        /^      u32                                index;$/;"   m       struct:debug_sampler_align
-index  mxlog.h /^      u16            index;$/;"       m       struct:mxlog
-info   mx_dbg_sampler.c        /^      struct debug_sampler_config info;$/;"   m       struct:mx_dbg_sampler_dev       typeref:struct:mx_dbg_sampler_dev::debug_sampler_config file:
-init_cached_read       scsc_logring_debugfs.c  /^size_t init_cached_read(struct scsc_ibox *i,$/;"      f       file:
-initialized    scsc_logring_main.c     /^static bool             initialized;$/;"      v       file:
-input_irq_handler      gdb_transport.c /^static void input_irq_handler(int irq, void *data)$/;"        f       file:
-input_irq_handler      mxlog_transport.c       /^static void input_irq_handler(int irq, void *data)$/;"        f       file:
-input_irq_handler      mxmgmt_transport.c      /^static void input_irq_handler(int irq, void *data)$/;"        f       file:
-interface      pcie_mif.c      /^      struct scsc_mif_abs   interface;$/;"    m       struct:pcie_mif typeref:struct:pcie_mif::scsc_mif_abs   file:
-interface      platform_mif.c  /^      struct scsc_mif_abs    interface;$/;"   m       struct:platform_mif     typeref:struct:platform_mif::scsc_mif_abs       file:
-intmr0 mif_reg.h       /^      volatile u32 intmr0;                            \/* R4 Int Mask  *\/$/;"        m       struct:scsc_mbox_s
-intmr1 mif_reg.h       /^      volatile u32 intmr1;                            \/* AP Int Mask *\/$/;" m       struct:scsc_mbox_s
-intmr2 mif_reg.h       /^      volatile u32 intmr2;                            \/* M4 Int Mask *\/$/;" m       struct:scsc_mbox_s
-intr   scsc_mx_impl.c  /^      struct mifintrbit       intr;$/;"       m       struct:scsc_mx  typeref:struct:scsc_mx::mifintrbit      file:
-intr_num       mx_dbg_sampler.h        /^      uint32_t intr_num;$/;"  m       struct:debug_sampler_buffer_info
-intsr0 mif_reg.h       /^      volatile u32 intsr0;                            \/* R4 Int Status register *\/$/;"      m       struct:scsc_mbox_s
-intsr1 mif_reg.h       /^      volatile u32 intsr1;                            \/* AP Int Status register *\/$/;"      m       struct:scsc_mbox_s
-intsr2 mif_reg.h       /^      volatile u32 intsr2;                            \/* M4 Int Status register  *\/$/;"     m       struct:scsc_mbox_s
-irq_bit_clear  scsc_mif_abs.h  /^      void (*irq_bit_clear)(struct scsc_mif_abs *interface, int bit_num);$/;" m       struct:scsc_mif_abs
-irq_bit_clear  scsc_mif_abs.h  /^      void (*irq_bit_clear)(struct scsc_mif_abs *interface, u32 irq_reg, int bit_num);$/;"    m       struct:scsc_mif_abs
-irq_bit_get    scsc_mif_abs.h  /^      u32  (*irq_bit_get)(struct scsc_mif_abs *interface, u32 irq_reg);$/;"   m       struct:scsc_mif_abs
-irq_bit_mask   platform_mif.c  /^              u32 irq_bit_mask;$/;"   m       struct:platform_mif::__anon5    file:
-irq_bit_mask   scsc_mif_abs.h  /^      void (*irq_bit_mask)(struct scsc_mif_abs *interface, int bit_num);$/;"  m       struct:scsc_mif_abs
-irq_bit_mask   scsc_mif_abs.h  /^      void (*irq_bit_mask)(struct scsc_mif_abs *interface, u32 irq_reg, int bit_num);$/;"     m       struct:scsc_mif_abs
-irq_bit_mask_status_get        scsc_mif_abs.h  /^      u32  (*irq_bit_mask_status_get)(struct scsc_mif_abs *interface);$/;"    m       struct:scsc_mif_abs
-irq_bit_mask_status_get        scsc_mif_abs.h  /^      u32  (*irq_bit_mask_status_get)(struct scsc_mif_abs *interface, u32 irq_reg);$/;"       m       struct:scsc_mif_abs
-irq_bit_set    scsc_mif_abs.h  /^      void (*irq_bit_set)(struct scsc_mif_abs *interface, int bit_num, enum scsc_mif_abs_target target);$/;"  m       struct:scsc_mif_abs
-irq_bit_set    scsc_mif_abs.h  /^      void (*irq_bit_set)(struct scsc_mif_abs *interface, u32 irq_reg, int bit_num);$/;"      m       struct:scsc_mif_abs
-irq_bit_unmask scsc_mif_abs.h  /^      void (*irq_bit_unmask)(struct scsc_mif_abs *interface, int bit_num);$/;"        m       struct:scsc_mif_abs
-irq_bit_unmask scsc_mif_abs.h  /^      void (*irq_bit_unmask)(struct scsc_mif_abs *interface, u32 irq_reg, int bit_num);$/;"   m       struct:scsc_mif_abs
-irq_clear      scsc_mif_abs.h  /^      void      (*irq_clear)(void);$/;"       m       struct:scsc_mif_abs
-irq_data       mifintrbit.h    /^      void                *irq_data[MIFINTRBIT_NUM_INT];$/;"  m       struct:mifintrbit
-irq_dev        pcie_mif.c      /^      void                  *irq_dev;$/;"     m       struct:pcie_mif file:
-irq_dev        platform_mif.c  /^      void          *irq_dev;$/;"     m       struct:platform_mif     file:
-irq_get        scsc_mif_abs.h  /^      u32  (*irq_get)(struct scsc_mif_abs *interface);$/;"    m       struct:scsc_mif_abs
-irq_num        platform_mif.c  /^              int irq_num;$/;"        m       struct:platform_mif::__anon4    file:
-irq_reg_handler        scsc_mif_abs.h  /^      void      (*irq_reg_handler)(struct scsc_mif_abs *interface, void (*handler)(int irq, void *data), void *dev);$/;"      m       struct:scsc_mif_abs
-irq_reg_handler        scsc_mif_abs.h  /^      void (*irq_reg_handler)(struct scsc_mif_abs *interface, u32 irq_reg, void (*handler)(int irq, void *data), void *dev);$/;"      m       struct:scsc_mif_abs
-irq_reg_reset_request_handler  scsc_mif_abs.h  /^      void      (*irq_reg_reset_request_handler)(struct scsc_mif_abs *interface, void (*handler)(int irq, void *data), void *dev);$/;"        m       struct:scsc_mif_abs
-irq_reset_request_dev  platform_mif.c  /^      void          *irq_reset_request_dev;$/;"       m       struct:platform_mif     file:
-irq_unreg_handler      scsc_mif_abs.h  /^      void      (*irq_unreg_handler)(struct scsc_mif_abs *interface);$/;"     m       struct:scsc_mif_abs
-irq_unreg_handler      scsc_mif_abs.h  /^      void (*irq_unreg_handler)(struct scsc_mif_abs *interface, u32 irq_reg);$/;"     m       struct:scsc_mif_abs
-irq_unreg_reset_request_handler        scsc_mif_abs.h  /^      void      (*irq_unreg_reset_request_handler)(struct scsc_mif_abs *interface);$/;"       m       struct:scsc_mif_abs
-is_bug_on_enabled      mxman.c /^static bool is_bug_on_enabled(struct scsc_mx *mx)$/;" f       file:
-is_power_of_two        scsc_logring_main.c     /^static inline int is_power_of_two(unsigned int x)$/;" f       file:
-is_record_crc_valid    scsc_logring_ring.c     /^static inline bool is_record_crc_valid(struct scsc_ring_record *rec,$/;"      f       file:
-is_ring_pos_safe       scsc_logring_ring.c     /^static inline bool is_ring_pos_safe(struct scsc_ring_buffer *rb,$/;"  f       file:
-is_ring_read_pos_valid scsc_logring_ring.c     /^static inline bool is_ring_read_pos_valid(struct scsc_ring_buffer *rb,$/;"    f       file:
-issr   mif_reg.h       /^      volatile u32 issr[NUM_MBOX];                    \/* MAILBOXES *\/$/;"   m       struct:scsc_mbox_s
-istream        mxmgmt_transport_streams.h      /^      mif_stream *istream;$/;"        m       struct:__anon6
-kfifo_len      mx_dbg_sampler.c        /^static unsigned int kfifo_len = 4 * 1024 * 1024;$/;"  v       file:
-kfifo_max      mx_dbg_sampler.c        /^      u32                         kfifo_max;$/;"      m       struct:mx_dbg_sampler_dev       file:
-last   scsc_logring_ring.h     /^      loff_t            last;$/;"     m       struct:scsc_ring_buffer
-len    scsc_app_msg.h  /^      __u32 len;$/;"  m       struct:scsc_app_msg_resp
-len    scsc_logring_ring.h     /^      u16 len;$/;"    m       struct:scsc_ring_record
-lev    scsc_logring_ring.h     /^      u8 lev;$/;"     m       struct:scsc_ring_record
-list   gdb_transport.c /^      struct list_head            list;$/;"   m       struct:clients_node     typeref:struct:clients_node::list_head  file:
-list   gdb_transport.c /^      struct list_head     list;$/;"  m       struct:gdb_transport_node       typeref:struct:gdb_transport_node::list_head    file:
-list   pcie_mif_module.c       /^      struct list_head            list;$/;"   m       struct:mif_mmap_node    typeref:struct:mif_mmap_node::list_head file:
-list   pcie_mif_module.c       /^      struct list_head           list;$/;"    m       struct:mif_driver_node  typeref:struct:mif_driver_node::list_head       file:
-list   pcie_mif_module.c       /^      struct list_head    list;$/;"   m       struct:mif_abs_node     typeref:struct:mif_abs_node::list_head  file:
-list   platform_mif_module.c   /^      struct list_head            list;$/;"   m       struct:mif_mmap_node    typeref:struct:mif_mmap_node::list_head file:
-list   platform_mif_module.c   /^      struct list_head           list;$/;"    m       struct:mif_driver_node  typeref:struct:mif_driver_node::list_head       file:
-list   platform_mif_module.c   /^      struct list_head    list;$/;"   m       struct:mif_abs_node     typeref:struct:mif_abs_node::list_head  file:
-list   scsc_mx_module.c        /^      struct list_head             list;$/;"  m       struct:clients_node     typeref:struct:clients_node::list_head  file:
-list   scsc_mx_module.c        /^      struct list_head list;$/;"      m       struct:mx_node  typeref:struct:mx_node::list_head       file:
-list   scsc_service.c  /^      struct list_head           list;$/;"    m       struct:scsc_service     typeref:struct:scsc_service::list_head  file:
-lock   mifmboxman.h    /^      struct mutex lock;$/;"  m       struct:mifmboxman       typeref:struct:mifmboxman::mutex
-lock   miframman.h     /^      struct mutex lock;$/;"  m       struct:miframman        typeref:struct:miframman::mutex
-lock   mxlog_transport.h       /^      struct mutex            lock;$/;"       m       struct:mxlog_transport  typeref:struct:mxlog_transport::mutex
-lock   scsc_logring_ring.h     /^      raw_spinlock_t    lock;$/;"     m       struct:scsc_ring_buffer
-logstrings     mxlog.h /^      struct firmware *logstrings;$/;"        m       struct:mxlog    typeref:struct:mxlog::firmware
-lookup_regs    pcie_proc.c     /^char *lookup_regs[ROW][COL] = {$/;"   v
-m4_handler     pcie_mif.c      /^      void                  (*m4_handler)(int irq, void *data);$/;"   m       struct:pcie_mif file:
-m4_panic_record_offset fwhdr.h /^      u32 m4_panic_record_offset;$/;" m       struct:fwhdr
-ma_msg mxman.c /^      uint8_t ma_msg; \/* Message from ma_msg enum *\/$/;"    m       struct:ma_msg_packet    file:
-ma_msg mxman.c /^} ma_msg;$/;" v       typeref:enum:__anon8
-ma_msg_packet  mxman.c /^struct ma_msg_packet {$/;"    s       file:
-magic  mxconf.h        /^      uint32_t magic;$/;"     m       struct:mxconf
-mailbox_get    scsc_mif_abs.h  /^      u32  (*mailbox_get)(struct scsc_mif_abs *interface, u32 mbox_num);$/;"  m       struct:scsc_mif_abs
-mailbox_set    scsc_mif_abs.h  /^      void (*mailbox_set)(struct scsc_mif_abs *interface, u32 mbox_num, u32 value);$/;"       m       struct:scsc_mif_abs
-major  mxconf.h        /^      uint16_t major;$/;"     m       struct:mxconfversion
-map    scsc_mif_abs.h  /^      void *(*map)(struct scsc_mif_abs *interface, size_t *allocated);$/;"    m       struct:scsc_mif_abs
-map2kern       scsc_logring_main.c     /^const char *map2kern[] = {$/;"        v
-mark_out_of_sync       scsc_logring_ring.c     /^static inline size_t mark_out_of_sync(char *tbuf, size_t tsz,$/;"     f       file:
-maxwell_is_present     mx140_clk.c     /^      atomic_t                   maxwell_is_present;$/;"      m       struct:mx140_clk20mhz   file:
-mbox   pcie_mif.c      /^      struct scsc_mbox_s    *mbox;$/;"        m       struct:pcie_mif typeref:struct:pcie_mif::scsc_mbox_s    file:
-mbox   platform_mif.c  /^      struct scsc_mbox_s     *mbox;$/;"       m       struct:platform_mif     typeref:struct:platform_mif::scsc_mbox_s        file:
-mbox   scsc_mx_impl.c  /^      struct mifmboxman       mbox;$/;"       m       struct:scsc_mx  typeref:struct:scsc_mx::mifmboxman      file:
-mbox_free      mifmboxman.h    /^      u32          mbox_free;$/;"     m       struct:mifmboxman
-mbox_init      mxman.c /^static void mbox_init(struct mxman *mxman, u32 firmware_entry_point)$/;"      f       file:
-mem    mx_mmap.c       /^      void                 *mem;$/;"  m       struct:mx_mmap_dev      file:
-mem    pcie_mif.c      /^      void                  *mem;$/;" m       struct:pcie_mif file:
-mem    platform_mif.c  /^      void __iomem  *mem;$/;" m       struct:platform_mif     file:
-mem_allocated  pcie_mif.c      /^      size_t                mem_allocated;$/;"        m       struct:pcie_mif file:
-mem_size       platform_mif.c  /^      size_t        mem_size;$/;"     m       struct:platform_mif     file:
-mem_start      platform_mif.c  /^      unsigned long mem_start;$/;"    m       struct:platform_mif     file:
-mgmt_thread_stop       mxmgmt_transport.c      /^static void mgmt_thread_stop(struct mxmgmt_transport *mxmgmt_transport)$/;"   f       file:
-mif    mifintrbit.h    /^      struct scsc_mif_abs *mif;$/;"   m       struct:mifintrbit       typeref:struct:mifintrbit::scsc_mif_abs
-mif_abs        mx_mmap.c       /^      struct scsc_mif_abs  *mif_abs;$/;"      m       struct:mx_mmap_dev      typeref:struct:mx_mmap_dev::scsc_mif_abs        file:
-mif_abs        pcie_mif_module.c       /^      struct scsc_mif_abs *mif_abs;$/;"       m       struct:mif_abs_node     typeref:struct:mif_abs_node::scsc_mif_abs       file:
-mif_abs        platform_mif_module.c   /^      struct scsc_mif_abs *mif_abs;$/;"       m       struct:mif_abs_node     typeref:struct:mif_abs_node::scsc_mif_abs       file:
-mif_abs        scsc_mx_impl.c  /^      struct scsc_mif_abs     *mif_abs;$/;"   m       struct:scsc_mx  typeref:struct:scsc_mx::scsc_mif_abs    file:
-mif_abs_list   pcie_mif_module.c       /^      struct list_head mif_abs_list;$/;"      m       struct:pcie_mif_module  typeref:struct:pcie_mif_module::list_head       file:
-mif_abs_list   platform_mif_module.c   /^      struct list_head mif_abs_list;$/;"      m       struct:platform_mif_module      typeref:struct:platform_mif_module::list_head   file:
-mif_abs_node   pcie_mif_module.c       /^struct mif_abs_node {$/;"     s       file:
-mif_abs_node   platform_mif_module.c   /^struct mif_abs_node {$/;"     s       file:
-mif_access_max_time_ms mxman.c /^static uint mif_access_max_time_ms = 100;$/;" v       file:
-mif_cleanup    scsc_mif_abs.h  /^      void      (*mif_cleanup)(struct scsc_mif_abs *interface);$/;"   m       struct:scsc_mif_abs
-mif_dbg        mifproc.c       /^MIF_PROCFS_SEQ_FILE_OPS(mif_dbg);$/;" v
-mif_driver_list        pcie_mif_module.c       /^      struct list_head mif_driver_list;$/;"   m       struct:pcie_mif_module  typeref:struct:pcie_mif_module::list_head       file:
-mif_driver_list        platform_mif_module.c   /^      struct list_head mif_driver_list;$/;"   m       struct:platform_mif_module      typeref:struct:platform_mif_module::list_head   file:
-mif_driver_node        pcie_mif_module.c       /^struct mif_driver_node {$/;"  s       file:
-mif_driver_node        platform_mif_module.c   /^struct mif_driver_node {$/;"  s       file:
-mif_dump       mifproc.c       /^MIF_PROCFS_RW_FILE_OPS(mif_dump);$/;" v
-mif_dump_registers     scsc_mif_abs.h  /^      void      (*mif_dump_registers)(struct scsc_mif_abs *interface);$/;"    m       struct:scsc_mif_abs
-mif_global     mifproc.c       /^struct scsc_mif_abs *mif_global;$/;"  v       typeref:struct:scsc_mif_abs
-mif_istream    gdb_transport.h /^      struct mif_stream       mif_istream;$/;"        m       struct:gdb_transport    typeref:struct:gdb_transport::mif_stream
-mif_istream    mxmgmt_transport.h      /^      struct mif_stream      mif_istream;$/;" m       struct:mxmgmt_transport typeref:struct:mxmgmt_transport::mif_stream
-mif_mmap_list  pcie_mif_module.c       /^      struct list_head mif_mmap_list;$/;"     m       struct:pcie_mif_module  typeref:struct:pcie_mif_module::list_head       file:
-mif_mmap_list  platform_mif_module.c   /^      struct list_head mif_mmap_list;$/;"     m       struct:platform_mif_module      typeref:struct:platform_mif_module::list_head   file:
-mif_mmap_node  pcie_mif_module.c       /^struct mif_mmap_node {$/;"    s       file:
-mif_mmap_node  platform_mif_module.c   /^struct mif_mmap_node {$/;"    s       file:
-mif_module     pcie_mif_module.c       /^} mif_module = {$/;"  v       typeref:struct:pcie_mif_module  file:
-mif_module     platform_mif_module.c   /^} mif_module = {$/;"  v       typeref:struct:platform_mif_module      file:
-mif_ostream    gdb_transport.h /^      struct mif_stream       mif_ostream;$/;"        m       struct:gdb_transport    typeref:struct:gdb_transport::mif_stream
-mif_ostream    mxmgmt_transport.h      /^      struct mif_stream      mif_ostream;$/;" m       struct:mxmgmt_transport typeref:struct:mxmgmt_transport::mif_stream
-mif_preserve   platform_mif.c  /^      } mif_preserve;$/;"     m       struct:platform_mif     typeref:struct:platform_mif::__anon5    file:
-mif_restart    scsc_mif_abs.h  /^      void      (*mif_restart)(struct scsc_mif_abs *interface);$/;"   m       struct:scsc_mif_abs
-mif_spinlock   platform_mif.c  /^      spinlock_t    mif_spinlock;$/;" m       struct:platform_mif     file:
-mif_stream     mifstream.h     /^struct mif_stream {$/;"       s
-mif_stream     mxlog_transport.h       /^      struct mif_stream       mif_stream;$/;" m       struct:mxlog_transport  typeref:struct:mxlog_transport::mif_stream
-mif_stream_block_size  mifstream.c     /^uint32_t mif_stream_block_size(struct mif_stream *stream)$/;" f
-mif_stream_config_serialise    mifstream.c     /^void mif_stream_config_serialise(struct mif_stream *stream, struct mxstreamconf *stream_conf)$/;"     f
-mif_stream_init        mifstream.c     /^int mif_stream_init(struct mif_stream *stream, enum scsc_mif_abs_target target, enum MIF_STREAM_DIRECTION direction, uint32_t num_packets, uint32_t packet_size,$/;"  f
-mif_stream_peek        mifstream.c     /^const void *mif_stream_peek(struct mif_stream *stream, const void *current_packet)$/;"        f
-mif_stream_peek_complete       mifstream.c     /^void mif_stream_peek_complete(struct mif_stream *stream, const void *packet)$/;"      f
-mif_stream_read        mifstream.c     /^uint32_t mif_stream_read(struct mif_stream *stream, void *buf, uint32_t num_bytes)$/;"        f
-mif_stream_read_interrupt      mifstream.c     /^uint8_t mif_stream_read_interrupt(struct mif_stream *stream)$/;"      f
-mif_stream_release     mifstream.c     /^void mif_stream_release(struct mif_stream *stream)$/;"        f
-mif_stream_write       mifstream.c     /^bool mif_stream_write(struct mif_stream *stream, const void *buf, uint32_t num_bytes)$/;"     f
-mif_stream_write_gather        mifstream.c     /^bool mif_stream_write_gather(struct mif_stream *stream, const void **bufs, uint32_t *lengths, uint32_t num_bufs)$/;"  f
-mif_stream_write_interrupt     mifstream.c     /^uint8_t mif_stream_write_interrupt(struct mif_stream *stream)$/;"     f
-mif_val        mifproc.c       /^static bool                  mif_val;$/;"     v       file:
-mif_writemem   mifproc.c       /^MIF_PROCFS_RW_FILE_OPS(mif_writemem);$/;"     v
-mifiintrman_isr        mifintrbit.c    /^static void mifiintrman_isr(int irq, void *data)$/;"  f       file:
-mifintrbit     mifintrbit.h    /^struct mifintrbit {$/;"       s
-mifintrbit_alloc_fromhost      mifintrbit.c    /^int mifintrbit_alloc_fromhost(struct mifintrbit *intr, enum scsc_mif_abs_target target)$/;"   f
-mifintrbit_alloc_tohost        mifintrbit.c    /^int mifintrbit_alloc_tohost(struct mifintrbit *intr, mifintrbit_handler handler, void *data)$/;"      f
-mifintrbit_default_handler     mifintrbit.c    /^static void mifintrbit_default_handler(int irq, void *data)$/;"       f       file:
-mifintrbit_deinit      mifintrbit.c    /^void mifintrbit_deinit(struct mifintrbit *intr)$/;"   f
-mifintrbit_free_fromhost       mifintrbit.c    /^int mifintrbit_free_fromhost(struct mifintrbit *intr, int which_bit, enum scsc_mif_abs_target target)$/;"     f
-mifintrbit_free_tohost mifintrbit.c    /^int mifintrbit_free_tohost(struct mifintrbit *intr, int which_bit)$/;"        f
-mifintrbit_handler     mifintrbit.h    /^typedef void (*mifintrbit_handler)(int which_bit, void *data);$/;"    t
-mifintrbit_init        mifintrbit.c    /^void mifintrbit_init(struct mifintrbit *intr, struct scsc_mif_abs *mif)$/;"   f
-mifintrbit_irq_handler mifintrbit.h    /^      void(*mifintrbit_irq_handler[MIFINTRBIT_NUM_INT]) (int irq, void *data);$/;"    m       struct:mifintrbit
-mifmboxman     mifmboxman.h    /^struct mifmboxman {$/;"       s
-mifmboxman_alloc_mboxes        mifmboxman.c    /^bool mifmboxman_alloc_mboxes(struct mifmboxman *mbox, int n, int *first_mbox_index)$/;"       f
-mifmboxman_deinit      mifmboxman.c    /^int mifmboxman_deinit(struct mifmboxman *mbox)$/;"    f
-mifmboxman_free_mboxes mifmboxman.c    /^void mifmboxman_free_mboxes(struct mifmboxman *mbox, int first_mbox_index, int n)$/;" f
-mifmboxman_get_mbox_ptr        mifmboxman.c    /^u32 *mifmboxman_get_mbox_ptr(struct mifmboxman *mbox,  struct scsc_mif_abs *mif_abs, int mbox_index)$/;"      f
-mifmboxman_init        mifmboxman.c    /^int mifmboxman_init(struct mifmboxman *mbox)$/;"      f
-mifproc        mifproc.h       /^struct mifproc {$/;"  s
-mifproc_create_proc_dir        mifproc.c       /^int mifproc_create_proc_dir(struct scsc_mif_abs *mif)$/;"     f
-mifproc_remove_proc_dir        mifproc.c       /^void mifproc_remove_proc_dir(void)$/;"        f
-mifprocfs_mif_dbg_show mifproc.c       /^static int mifprocfs_mif_dbg_show(struct seq_file *m, void *v)$/;"    f       file:
-mifprocfs_mif_dump_read        mifproc.c       /^static ssize_t mifprocfs_mif_dump_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)$/;"      f       file:
-mifprocfs_mif_dump_write       mifproc.c       /^static ssize_t mifprocfs_mif_dump_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos)$/;"       f       file:
-mifprocfs_mif_writemem_read    mifproc.c       /^static ssize_t mifprocfs_mif_writemem_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)$/;"  f       file:
-mifprocfs_mif_writemem_write   mifproc.c       /^static ssize_t mifprocfs_mif_writemem_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos)$/;"   f       file:
-mifprocfs_open_file_generic    mifproc.c       /^static int mifprocfs_open_file_generic(struct inode *inode, struct file *file)$/;"    f       file:
-miframman      miframman.h     /^struct miframman {$/;"        s
-miframman_alloc        miframman.c     /^void *miframman_alloc(struct miframman *ram, size_t nbytes, size_t align)$/;" f
-miframman_deinit       miframman.c     /^void miframman_deinit(struct miframman *ram)$/;"      f
-miframman_free miframman.c     /^void miframman_free(struct miframman *ram, void *mem)$/;"     f
-miframman_init miframman.c     /^void miframman_init(struct miframman *ram, void *start_dram, size_t size_pool)$/;"    f
-minor  mxconf.h        /^      uint16_t minor;$/;"     m       struct:mxconfversion
-mm_completion_timeout_ms       mxman.c /^static ulong mm_completion_timeout_ms = 2000;$/;"     v       file:
-mm_msg_start_ind_completion    mxman.h /^      struct completion       mm_msg_start_ind_completion;$/;"        m       struct:mxman    typeref:struct:mxman::completion
-module_client  scsc_mx_module.c        /^      struct scsc_mx_module_client *module_client;$/;"        m       struct:clients_node     typeref:struct:clients_node::scsc_mx_module_client      file:
-msg    servman_messages.h      /^      uint8_t         msg;$/;"        m       struct:sm_msg_packet
-mutex  mx_dbg_sampler.c        /^      struct mutex                mutex;$/;"  m       struct:mx_dbg_sampler_dev       typeref:struct:mx_dbg_sampler_dev::mutex        file:
-mx     client_test.c   /^      struct scsc_mx             *mx;$/;"     m       struct:scsc_mx_test     typeref:struct:scsc_mx_test::scsc_mx    file:
-mx     cpacket_buffer.h        /^      struct scsc_mx *mx;$/;" m       struct:cpacketbuffer    typeref:struct:cpacketbuffer::scsc_mx
-mx     gdb_transport.h /^      struct scsc_mx          *mx;$/;"        m       struct:gdb_transport    typeref:struct:gdb_transport::scsc_mx
-mx     mifstream.h     /^      struct scsc_mx       *mx;$/;"   m       struct:mif_stream       typeref:struct:mif_stream::scsc_mx
-mx     mx140_clk.c     /^      struct scsc_mx             *mx;$/;"     m       struct:mx140_clk20mhz   typeref:struct:mx140_clk20mhz::scsc_mx  file:
-mx     mx_dbg_sampler.c        /^      struct scsc_mx              *mx;$/;"    m       struct:mx_dbg_sampler_dev       typeref:struct:mx_dbg_sampler_dev::scsc_mx      file:
-mx     mx_mmap.c       /^      struct scsc_mx       *mx;$/;"   m       struct:mx_mmap_dev      typeref:struct:mx_mmap_dev::scsc_mx     file:
-mx     mxlog.h /^      struct scsc_mx *mx;$/;" m       struct:mxlog    typeref:struct:mxlog::scsc_mx
-mx     mxlog_transport.h       /^      struct scsc_mx          *mx;$/;"        m       struct:mxlog_transport  typeref:struct:mxlog_transport::scsc_mx
-mx     mxman.h /^      struct scsc_mx          *mx;$/;"        m       struct:mxman    typeref:struct:mxman::scsc_mx
-mx     mxmgmt_transport.h      /^      struct scsc_mx         *mx;$/;" m       struct:mxmgmt_transport typeref:struct:mxmgmt_transport::scsc_mx
-mx     panicmon.h      /^      struct scsc_mx *mx;$/;" m       struct:panicmon typeref:struct:panicmon::scsc_mx
-mx     scsc_mx_module.c        /^      struct scsc_mx   *mx;$/;"       m       struct:mx_node  typeref:struct:mx_node::scsc_mx file:
-mx     scsc_service.c  /^      struct scsc_mx             *mx;$/;"     m       struct:scsc_service     typeref:struct:scsc_service::scsc_mx    file:
-mx     srvman.h        /^      struct scsc_mx   *mx;$/;"       m       struct:srvman   typeref:struct:srvman::scsc_mx
-mx     suspendmon.h    /^      struct scsc_mx *mx;$/;" m       struct:suspendmon       typeref:struct:suspendmon::scsc_mx
-mx140_basedir_file     mx140_file.c    /^void mx140_basedir_file(struct scsc_mx *mx)$/;"       f
-mx140_clk20mhz mx140_clk.c     /^static struct mx140_clk20mhz {$/;"    s       file:
-mx140_clk20mhz_client_cb       mx140_clk.c     /^      void (*mx140_clk20mhz_client_cb)(void *data, enum mx140_clk20mhz_status event);$/;"     m       struct:mx140_clk20mhz   file:
-mx140_clk20mhz_create_ctrl_proc_dir    mx140_clk.c     /^static int mx140_clk20mhz_create_ctrl_proc_dir(struct mx140_clk20mhz *clk20mhz)$/;"   f       file:
-mx140_clk20mhz_driver  mx140_clk.c     /^struct scsc_mx_module_client mx140_clk20mhz_driver = {$/;"    v       typeref:struct:scsc_mx_module_client
-mx140_clk20mhz_exit    mx140_clk.c     /^module_exit(mx140_clk20mhz_exit);$/;" v
-mx140_clk20mhz_exit    mx140_clk.c     /^static void __exit mx140_clk20mhz_exit(void)$/;"      f       file:
-mx140_clk20mhz_failure_reset   mx140_clk.c     /^static void mx140_clk20mhz_failure_reset(struct scsc_service_client *client, u16 scsc_panic_code)$/;" f       file:
-mx140_clk20mhz_init    mx140_clk.c     /^module_init(mx140_clk20mhz_init);$/;" v
-mx140_clk20mhz_init    mx140_clk.c     /^static int __init mx140_clk20mhz_init(void)$/;"       f       file:
-mx140_clk20mhz_probe   mx140_clk.c     /^void mx140_clk20mhz_probe(struct scsc_mx_module_client *module_client, struct scsc_mx *mx, enum scsc_module_client_reason reason)$/;" f
-mx140_clk20mhz_register        mx140_clk.c     /^EXPORT_SYMBOL(mx140_clk20mhz_register);$/;"   v
-mx140_clk20mhz_register        mx140_clk.c     /^int mx140_clk20mhz_register(void (*client_cb)(void *data, enum mx140_clk20mhz_status event), void *data)$/;"  f
-mx140_clk20mhz_release mx140_clk.c     /^EXPORT_SYMBOL(mx140_clk20mhz_release);$/;"    v
-mx140_clk20mhz_release mx140_clk.c     /^int mx140_clk20mhz_release(void)$/;"  f
-mx140_clk20mhz_remove  mx140_clk.c     /^void mx140_clk20mhz_remove(struct scsc_mx_module_client *module_client, struct scsc_mx *mx, enum scsc_module_client_reason reason)$/;"        f
-mx140_clk20mhz_remove_ctrl_proc_dir    mx140_clk.c     /^static void mx140_clk20mhz_remove_ctrl_proc_dir(struct mx140_clk20mhz *clk20mhz)$/;"  f       file:
-mx140_clk20mhz_request mx140_clk.c     /^EXPORT_SYMBOL(mx140_clk20mhz_request);$/;"    v
-mx140_clk20mhz_request mx140_clk.c     /^int mx140_clk20mhz_request(void)$/;"  f
-mx140_clk20mhz_restart mx140_clk.c     /^static void mx140_clk20mhz_restart(void)$/;"  f       file:
-mx140_clk20mhz_service mx140_clk.c     /^      struct scsc_service        *mx140_clk20mhz_service;$/;" m       struct:mx140_clk20mhz   typeref:struct:mx140_clk20mhz::scsc_service     file:
-mx140_clk20mhz_service_client  mx140_clk.c     /^      struct scsc_service_client mx140_clk20mhz_service_client;$/;"   m       struct:mx140_clk20mhz   typeref:struct:mx140_clk20mhz::scsc_service_client      file:
-mx140_clk20mhz_service_failed  mx140_clk.c     /^      atomic_t                   mx140_clk20mhz_service_failed;$/;"   m       struct:mx140_clk20mhz   file:
-mx140_clk20mhz_service_started mx140_clk.c     /^      atomic_t                   mx140_clk20mhz_service_started;$/;"  m       struct:mx140_clk20mhz   file:
-mx140_clk20mhz_start_service   mx140_clk.c     /^static int mx140_clk20mhz_start_service(struct scsc_mx *mx)$/;"       f       file:
-mx140_clk20mhz_stop_on_failure mx140_clk.c     /^static void mx140_clk20mhz_stop_on_failure(struct scsc_service_client *client)$/;"    f       file:
-mx140_clk20mhz_stop_service    mx140_clk.c     /^static int mx140_clk20mhz_stop_service(struct scsc_mx *mx)$/;"        f       file:
-mx140_clk20mhz_unregister      mx140_clk.c     /^EXPORT_SYMBOL(mx140_clk20mhz_unregister);$/;" v
-mx140_clk20mhz_unregister      mx140_clk.c     /^void mx140_clk20mhz_unregister(void)$/;"      f
-mx140_clk20mhz_work    mx140_clk.c     /^struct work_struct      mx140_clk20mhz_work;$/;"      v       typeref:struct:work_struct
-mx140_clk20mhz_work_func       mx140_clk.c     /^static void mx140_clk20mhz_work_func(struct work_struct *work)$/;"    f       file:
-mx140_clk20mhz_wq      mx140_clk.c     /^struct workqueue_struct *mx140_clk20mhz_wq;$/;"       v       typeref:struct:workqueue_struct
-mx140_clk20mhz_wq_deinit       mx140_clk.c     /^static void mx140_clk20mhz_wq_deinit(void)$/;"        f       file:
-mx140_clk20mhz_wq_init mx140_clk.c     /^static void mx140_clk20mhz_wq_init(void)$/;"  f       file:
-mx140_clk20mhz_wq_start        mx140_clk.c     /^static void mx140_clk20mhz_wq_start(void)$/;" f       file:
-mx140_clk20mhz_wq_stop mx140_clk.c     /^static void mx140_clk20mhz_wq_stop(void)$/;"  f       file:
-mx140_clk_test_cdev    mx140_clk_test.c        /^static struct cdev  *mx140_clk_test_cdev;$/;" v       typeref:struct:cdev     file:
-mx140_clk_test_class   mx140_clk_test.c        /^static struct class *mx140_clk_test_class;$/;"        v       typeref:struct:class    file:
-mx140_clk_test_dev_fops        mx140_clk_test.c        /^static const struct file_operations mx140_clk_test_dev_fops = {$/;"   v       typeref:struct:file_operations  file:
-mx140_clk_test_dev_open        mx140_clk_test.c        /^static int mx140_clk_test_dev_open(struct inode *inode, struct file *file)$/;"        f       file:
-mx140_clk_test_dev_read        mx140_clk_test.c        /^static ssize_t mx140_clk_test_dev_read(struct file *filp, char *buffer, size_t length, loff_t *offset)$/;"    f       file:
-mx140_clk_test_dev_release     mx140_clk_test.c        /^static int mx140_clk_test_dev_release(struct inode *inode, struct file *file)$/;"     f       file:
-mx140_clk_test_dev_t   mx140_clk_test.c        /^static dev_t        mx140_clk_test_dev_t;$/;" v       file:
-mx140_clk_test_dev_write       mx140_clk_test.c        /^static ssize_t mx140_clk_test_dev_write(struct file *file, const char *data, size_t len, loff_t *offset)$/;"  f       file:
-mx140_clk_test_exit    mx140_clk_test.c        /^void mx140_clk_test_exit(void)$/;"    f
-mx140_clk_test_init    mx140_clk_test.c        /^void mx140_clk_test_init(void)$/;"    f
-mx140_file_download_fw mx140_file.c    /^int mx140_file_download_fw(struct scsc_mx *mx, void *dest, size_t dest_size, u32 *fw_image_size)$/;"  f
-mx140_file_release_conf        mx140_file.c    /^EXPORT_SYMBOL(mx140_file_release_conf);$/;"   v
-mx140_file_release_conf        mx140_file.c    /^void mx140_file_release_conf(struct scsc_mx *mx, const struct firmware *conf)$/;"     f
-mx140_file_request_conf        mx140_file.c    /^EXPORT_SYMBOL(mx140_file_request_conf);$/;"   v
-mx140_file_request_conf        mx140_file.c    /^int mx140_file_request_conf(struct scsc_mx *mx, const struct firmware **conf, const char *config_rel_path)$/;"        f
-mx140_file_request_debug_conf  mx140_file.c    /^EXPORT_SYMBOL(mx140_file_request_debug_conf);$/;"     v
-mx140_file_request_debug_conf  mx140_file.c    /^int mx140_file_request_debug_conf(struct scsc_mx *mx, const struct firmware **conf, const char *config_rel_path)$/;"  f
-mx140_file_request_device_conf mx140_file.c    /^EXPORT_SYMBOL(mx140_file_request_device_conf);$/;"    v
-mx140_file_request_device_conf mx140_file.c    /^int mx140_file_request_device_conf(struct scsc_mx *mx, const struct firmware **conf, const char *config_rel_path)$/;" f
-mx140_file_select_fw   mx140_file.c    /^int mx140_file_select_fw(struct scsc_mx *mx, u32 hw_ver)$/;"  f
-mx140_file_supported_hw        mx140_file.c    /^bool mx140_file_supported_hw(struct scsc_mx *mx, u32 hw_ver)$/;"      f
-mx140_log_dump mxman.c /^EXPORT_SYMBOL(mx140_log_dump);$/;"    v
-mx140_log_dump mxman.c /^int mx140_log_dump(void)$/;"  f
-mx140_release_file     mx140_file.c    /^EXPORT_SYMBOL(mx140_release_file);$/;"        v
-mx140_release_file     mx140_file.c    /^int mx140_release_file(struct scsc_mx *mx, const struct firmware *firmp)$/;"  f
-mx140_request_file     mx140_file.c    /^EXPORT_SYMBOL(mx140_request_file);$/;"        v
-mx140_request_file     mx140_file.c    /^int mx140_request_file(struct scsc_mx *mx, char *path, const struct firmware **firmp)$/;"     f
-mx_client      mx_dbg_sampler.c        /^      struct scsc_service_client  mx_client;$/;"      m       struct:mx_dbg_sampler_dev       typeref:struct:mx_dbg_sampler_dev::scsc_service_client  file:
-mx_clk20_procfs_generic_open   mx140_clk.c     /^static int mx_clk20_procfs_generic_open(struct inode *inode, struct file *file)$/;"   f       file:
-mx_dbg_sampler mx_dbg_sampler.c        /^} mx_dbg_sampler;$/;" v       typeref:struct:__anon3  file:
-mx_dbg_sampler_allocate_resources      mx_dbg_sampler.c        /^static int mx_dbg_sampler_allocate_resources(struct scsc_service *service, struct mx_dbg_sampler_dev *mx_dev)$/;"     f       file:
-mx_dbg_sampler_dev     mx_dbg_sampler.c        /^struct mx_dbg_sampler_dev {$/;"       s       file:
-mx_dbg_sampler_driver  mx_dbg_sampler.c        /^struct scsc_mx_module_client mx_dbg_sampler_driver = {$/;"    v       typeref:struct:scsc_mx_module_client
-mx_dbg_sampler_failure_reset   mx_dbg_sampler.c        /^static void mx_dbg_sampler_failure_reset(struct scsc_service_client *client, u16 scsc_panic_code)$/;" f       file:
-mx_dbg_sampler_fops    mx_dbg_sampler.c        /^static const struct file_operations mx_dbg_sampler_fops = {$/;"       v       typeref:struct:file_operations  file:
-mx_dbg_sampler_free_resources  mx_dbg_sampler.c        /^static int mx_dbg_sampler_free_resources(struct scsc_service *service, struct mx_dbg_sampler_dev *mx_dev)$/;" f       file:
-mx_dbg_sampler_init    mx_dbg_sampler.c        /^module_init(mx_dbg_sampler_init);$/;" v
-mx_dbg_sampler_init    mx_dbg_sampler.c        /^static int __init mx_dbg_sampler_init(void)$/;"       f       file:
-mx_dbg_sampler_irq_handler     mx_dbg_sampler.c        /^static void mx_dbg_sampler_irq_handler(int irq, void *data)$/;"       f       file:
-mx_dbg_sampler_open    mx_dbg_sampler.c        /^int mx_dbg_sampler_open(struct inode *inode, struct file *filp)$/;"   f
-mx_dbg_sampler_poll    mx_dbg_sampler.c        /^static unsigned mx_dbg_sampler_poll(struct file *filp, poll_table *wait)$/;"  f       file:
-mx_dbg_sampler_probe   mx_dbg_sampler.c        /^void mx_dbg_sampler_probe(struct scsc_mx_module_client *module_client, struct scsc_mx *mx, enum scsc_module_client_reason reason)$/;" f
-mx_dbg_sampler_read    mx_dbg_sampler.c        /^static ssize_t mx_dbg_sampler_read(struct file *filp, char __user *buf, size_t len, loff_t *offset)$/;"       f       file:
-mx_dbg_sampler_release mx_dbg_sampler.c        /^int mx_dbg_sampler_release(struct inode *inode, struct file *filp)$/;"        f
-mx_dbg_sampler_remove  mx_dbg_sampler.c        /^void mx_dbg_sampler_remove(struct scsc_mx_module_client *module_client, struct scsc_mx *mx, enum scsc_module_client_reason reason)$/;"        f
-mx_dbg_sampler_stop_on_failure mx_dbg_sampler.c        /^static void mx_dbg_sampler_stop_on_failure(struct scsc_service_client *client)$/;"    f       file:
-mx_dbg_sampler_task    mx_dbg_sampler.c        /^static struct task_struct *mx_dbg_sampler_task;$/;"   v       typeref:struct:task_struct      file:
-mx_dbg_sampler_thread  mx_dbg_sampler.c        /^int mx_dbg_sampler_thread(void *data)$/;"     f
-mx_dbg_sampler_unload  mx_dbg_sampler.c        /^module_exit(mx_dbg_sampler_unload);$/;"       v
-mx_dbg_sampler_unload  mx_dbg_sampler.c        /^static void __exit mx_dbg_sampler_unload(void)$/;"    f       file:
-mx_fail        mxproc.c        /^MX_PROCFS_RW_FILE_OPS(mx_fail);$/;"   v
-mx_freeze      mxproc.c        /^MX_PROCFS_RW_FILE_OPS(mx_freeze);$/;" v
-mx_gdb_fops    mx_mmap.c       /^static const struct file_operations mx_gdb_fops = {$/;"       v       typeref:struct:file_operations  file:
-mx_gdb_open    mx_mmap.c       /^int mx_gdb_open(struct inode *inode, struct file *filp)$/;"   f
-mx_gdb_poll    mx_mmap.c       /^static unsigned mx_gdb_poll(struct file *filp, poll_table *wait)$/;"  f       file:
-mx_gdb_read    mx_mmap.c       /^static ssize_t mx_gdb_read(struct file *filp, char __user *buf, size_t len, loff_t *offset)$/;"       f       file:
-mx_gdb_release mx_mmap.c       /^int mx_gdb_release(struct inode *inode, struct file *filp)$/;"        f
-mx_gdb_write   mx_mmap.c       /^static ssize_t mx_gdb_write(struct file *filp, const char __user *buf, size_t len, loff_t *offset)$/;"        f       file:
-mx_list        scsc_mx_module.c        /^      struct list_head mx_list;$/;"   m       struct:mx_module        typeref:struct:mx_module::list_head     file:
-mx_mmap        mx_mmap.c       /^} mx_mmap;$/;"        v       typeref:struct:__anon9  file:
-mx_mmap_cleanup        mx_mmap.c       /^module_exit(mx_mmap_cleanup);$/;"     v
-mx_mmap_cleanup        mx_mmap.c       /^static void __exit mx_mmap_cleanup(void)$/;"  f       file:
-mx_mmap_dev    mx_mmap.c       /^struct mx_mmap_dev {$/;"      s       file:
-mx_mmap_fops   mx_mmap.c       /^static const struct file_operations mx_mmap_fops = {$/;"      v       typeref:struct:file_operations  file:
-mx_mmap_init   mx_mmap.c       /^module_init(mx_mmap_init);$/;"        v
-mx_mmap_init   mx_mmap.c       /^static int __init mx_mmap_init(void)$/;"      f       file:
-mx_mmap_mmap   mx_mmap.c       /^int mx_mmap_mmap(struct file *filp, struct vm_area_struct *vma)$/;"   f
-mx_mmap_open   mx_mmap.c       /^int mx_mmap_open(struct inode *inode, struct file *filp)$/;"  f
-mx_mmap_release        mx_mmap.c       /^int mx_mmap_release(struct inode *inode, struct file *filp)$/;"       f
-mx_module      scsc_mx_module.c        /^static struct mx_module {$/;" s       file:
-mx_module      scsc_mx_module.c        /^} mx_module = {$/;"   v       typeref:struct:mx_module        file:
-mx_module_mif_if       scsc_mx_module.c        /^static struct scsc_mif_abs_driver mx_module_mif_if = {$/;"    v       typeref:struct:scsc_mif_abs_driver      file:
-mx_module_mmap_if      mx_mmap.c       /^static struct scsc_mif_mmap_driver mx_module_mmap_if = {$/;"  v       typeref:struct:scsc_mif_mmap_driver     file:
-mx_node        scsc_mx_module.c        /^struct mx_node {$/;"  s       file:
-mx_panic       mxproc.c        /^MX_PROCFS_RW_FILE_OPS(mx_panic);$/;"  v
-mx_procfs_generic_open mxproc.c        /^static int mx_procfs_generic_open(struct inode *inode, struct file *file)$/;" f       file:
-mx_procfs_mx_fail_read mxproc.c        /^static ssize_t mx_procfs_mx_fail_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)$/;"       f       file:
-mx_procfs_mx_fail_write        mxproc.c        /^static ssize_t mx_procfs_mx_fail_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos)$/;"        f       file:
-mx_procfs_mx_freeze_read       mxproc.c        /^static ssize_t mx_procfs_mx_freeze_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)$/;"     f       file:
-mx_procfs_mx_freeze_write      mxproc.c        /^static ssize_t mx_procfs_mx_freeze_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos)$/;"      f       file:
-mx_procfs_mx_panic_read        mxproc.c        /^static ssize_t mx_procfs_mx_panic_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)$/;"      f       file:
-mx_procfs_mx_panic_write       mxproc.c        /^static ssize_t mx_procfs_mx_panic_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos)$/;"       f       file:
-mx_procfs_mx_release_read      mxproc.c        /^static ssize_t mx_procfs_mx_release_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)$/;"    f       file:
-mx_procfs_mx_rf_hw_ver_read    mxproc.c        /^static ssize_t mx_procfs_mx_rf_hw_ver_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)$/;"  f       file:
-mx_procfs_mx_services_read     mxproc.c        /^static ssize_t mx_procfs_mx_services_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)$/;"   f       file:
-mx_procfs_mx_status_read       mxproc.c        /^static ssize_t mx_procfs_mx_status_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)$/;"     f       file:
-mx_procfs_mx_suspend_count_read        mxproc.c        /^static ssize_t mx_procfs_mx_suspend_count_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)$/;"      f       file:
-mx_procfs_mx_suspend_read      mxproc.c        /^static ssize_t mx_procfs_mx_suspend_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)$/;"    f       file:
-mx_procfs_mx_suspend_write     mxproc.c        /^static ssize_t mx_procfs_mx_suspend_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos)$/;"     f       file:
-mx_procfs_restart_read mx140_clk.c     /^static ssize_t mx_procfs_restart_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)$/;"       f       file:
-mx_procfs_restart_write        mx140_clk.c     /^static ssize_t mx_procfs_restart_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos)$/;"        f       file:
-mx_release     mxproc.c        /^MX_PROCFS_RO_FILE_OPS(mx_release);$/;"        v
-mx_rf_hw_ver   mxproc.c        /^MX_PROCFS_RO_FILE_OPS(mx_rf_hw_ver);$/;"      v
-mx_services    mxproc.c        /^MX_PROCFS_RO_FILE_OPS(mx_services);$/;"       v
-mx_status      mxproc.c        /^MX_PROCFS_RO_FILE_OPS(mx_status);$/;" v
-mx_suspend     mxproc.c        /^MX_PROCFS_RW_FILE_OPS(mx_suspend);$/;"        v
-mx_suspend_count       mxproc.c        /^MX_PROCFS_RO_FILE_OPS(mx_suspend_count);$/;"  v
-mx_trans_conf  mxconf.h        /^      struct mxtransconf   mx_trans_conf;$/;" m       struct:mxconf   typeref:struct:mxconf::mxtransconf
-mx_trans_conf_gdb_m4   mxconf.h        /^      struct mxtransconf   mx_trans_conf_gdb_m4;$/;"  m       struct:mxconf   typeref:struct:mxconf::mxtransconf
-mx_trans_conf_gdb_r4   mxconf.h        /^      struct mxtransconf   mx_trans_conf_gdb_r4;$/;"  m       struct:mxconf   typeref:struct:mxconf::mxtransconf
-mx_wlan_read_process   mx_dbg_sampler.c        /^static void mx_wlan_read_process(const void *data, size_t length, struct mx_dbg_sampler_dev *mx_dev)$/;"      f       file:
-mxcbufconf     mxconf.h        /^GCC_PACKED struct mxcbufconf {$/;"    s
-mxconf mxconf.h        /^GCC_PACKED struct mxconf {$/;"        s
-mxconf mxman.h /^      struct mxconf           *mxconf;$/;"    m       struct:mxman    typeref:struct:mxman::mxconf
-mxconfversion  mxconf.h        /^GCC_PACKED struct mxconfversion {$/;" s
-mxlog  mxlog.h /^struct mxlog {$/;"    s
-mxlog  scsc_mx_impl.c  /^      struct mxlog            mxlog;$/;"      m       struct:scsc_mx  typeref:struct:scsc_mx::mxlog   file:
-mxlog_channel_handler  mxlog_transport.h       /^typedef void (*mxlog_channel_handler)(u8 phase, const void *message,$/;"      t
-mxlog_event_log_msg    mxlog.h /^struct mxlog_event_log_msg {$/;"      s
-mxlog_header_handler   mxlog_transport.h       /^typedef int (*mxlog_header_handler)(u32 header, u8 *phase,$/;"        t
-mxlog_header_parser    mxlog.c /^static int mxlog_header_parser(u32 header, u8 *phase,$/;"     f       file:
-mxlog_init     mxlog.c /^void mxlog_init(struct mxlog *mxlog, struct scsc_mx *mx)$/;"  f
-mxlog_message_handler  mxlog.c /^static void mxlog_message_handler(u8 phase, const void *message,$/;"  f       file:
-mxlog_phase4_message_handler   mxlog.c /^static inline void mxlog_phase4_message_handler(const void *message,$/;"      f       file:
-mxlog_phase5_message_handler   mxlog.c /^static inline void mxlog_phase5_message_handler(const void *message,$/;"      f       file:
-mxlog_release  mxlog.c /^void mxlog_release(struct mxlog *mxlog)$/;"   f
-mxlog_thread   mxlog_transport.h       /^      struct mxlog_thread     mxlog_thread;$/;"       m       struct:mxlog_transport  typeref:struct:mxlog_transport::mxlog_thread
-mxlog_thread   mxlog_transport.h       /^struct mxlog_thread {$/;"     s
-mxlog_thread_function  mxlog_transport.c       /^static int mxlog_thread_function(void *arg)$/;"       f       file:
-mxlog_thread_start     mxlog_transport.c       /^static int mxlog_thread_start(struct mxlog_transport *mxlog_transport)$/;"    f       file:
-mxlog_thread_stop      mxlog_transport.c       /^static void mxlog_thread_stop(struct mxlog_transport *mxlog_transport)$/;"    f       file:
-mxlog_transport        mxlog_transport.h       /^struct mxlog_transport {$/;"  s
-mxlog_transport        scsc_mx_impl.c  /^      struct mxlog_transport  mxlog_transport;$/;"    m       struct:scsc_mx  typeref:struct:scsc_mx::mxlog_transport file:
-mxlog_transport_config_serialise       mxlog_transport.c       /^void mxlog_transport_config_serialise(struct mxlog_transport *mxlog_transport,$/;"    f
-mxlog_transport_init   mxlog_transport.c       /^int mxlog_transport_init(struct mxlog_transport *mxlog_transport, struct scsc_mx *mx)$/;"     f
-mxlog_transport_register_channel_handler       mxlog_transport.c       /^void mxlog_transport_register_channel_handler(struct mxlog_transport *mxlog_transport,$/;"    f
-mxlog_transport_release        mxlog_transport.c       /^void mxlog_transport_release(struct mxlog_transport *mxlog_transport)$/;"     f
-mxlog_transport_set_error      mxlog_transport.c       /^void mxlog_transport_set_error(struct mxlog_transport *mxlog_transport)$/;"   f
-mxlogconf      mxconf.h        /^      struct mxlogconf mxlogconf;$/;" m       struct:mxconf   typeref:struct:mxconf::mxlogconf
-mxlogconf      mxconf.h        /^GCC_PACKED struct mxlogconf$/;"       s
-mxman  mxman.h /^struct mxman {$/;"    s
-mxman  mxproc.h        /^      struct mxman          *mxman;$/;"       m       struct:mxproc   typeref:struct:mxproc::mxman
-mxman  scsc_mx_impl.c  /^      struct mxman            mxman;$/;"      m       struct:scsc_mx  typeref:struct:scsc_mx::mxman   file:
-mxman_close    mxman.c /^void mxman_close(struct mxman *mxman)$/;"     f
-mxman_deinit   mxman.c /^void mxman_deinit(struct mxman *mxman)$/;"    f
-mxman_fail     mxman.c /^void mxman_fail(struct mxman *mxman, u16 scsc_panic_code)$/;" f
-mxman_failure_work     mxman.c /^static void mxman_failure_work(struct work_struct *work)$/;"  f       file:
-mxman_force_panic      mxman.c /^int mxman_force_panic(struct mxman *mxman)$/;"        f
-mxman_freeze   mxman.c /^void mxman_freeze(struct mxman *mxman)$/;"    f
-mxman_hw_ver_check     mxman.c /^static int mxman_hw_ver_check(struct mxman *mxman)$/;"        f       file:
-mxman_init     mxman.c /^void mxman_init(struct mxman *mxman, struct scsc_mx *mx)$/;"  f
-mxman_message_handler  mxman.c /^static void mxman_message_handler(const void *message, void *data)$/;"        f       file:
-mxman_mutex    mxman.h /^      struct mutex            mxman_mutex;$/;"        m       struct:mxman    typeref:struct:mxman::mutex
-mxman_next_state       mxman.h /^      enum mxman_state        mxman_next_state;$/;"   m       struct:mxman    typeref:enum:mxman::mxman_state
-mxman_open     mxman.c /^int mxman_open(struct mxman *mxman)$/;"       f
-mxman_print_versions   mxman.c /^static void mxman_print_versions(struct mxman *mxman)$/;"     f       file:
-mxman_resume   mxman.c /^void mxman_resume(struct mxman *mxman)$/;"    f
-mxman_select_next_fw   mxman.c /^static int mxman_select_next_fw(struct mxman *mxman)$/;"      f       file:
-mxman_start    mxman.c /^static int mxman_start(struct mxman *mxman)$/;"       f       file:
-mxman_state    mxman.h /^      enum mxman_state        mxman_state;$/;"        m       struct:mxman    typeref:enum:mxman::mxman_state
-mxman_state    mxman.h /^enum mxman_state {$/;"        g
-mxman_stop     mxman.c /^static void mxman_stop(struct mxman *mxman)$/;"       f       file:
-mxman_suspend  mxman.c /^int mxman_suspend(struct mxman *mxman)$/;"    f
-mxmgmt_channel_handler mxmgmt_transport.h      /^typedef void (*mxmgmt_channel_handler)(const void *message, void *data);$/;"  t
-mxmgmt_thread  mxmgmt_transport.h      /^      struct mxmgmt_thread   mxmgmt_thread;$/;"       m       struct:mxmgmt_transport typeref:struct:mxmgmt_transport::mxmgmt_thread
-mxmgmt_thread  mxmgmt_transport.h      /^struct mxmgmt_thread {$/;"    s
-mxmgmt_thread_function mxmgmt_transport.c      /^static int mxmgmt_thread_function(void *arg)$/;"      f       file:
-mxmgmt_thread_start    mxmgmt_transport.c      /^static int mxmgmt_thread_start(struct mxmgmt_transport *mxmgmt_transport)$/;" f       file:
-mxmgmt_transport       mxmgmt_transport.h      /^struct mxmgmt_transport {$/;" s
-mxmgmt_transport       scsc_mx_impl.c  /^      struct mxmgmt_transport mxmgmt_transport;$/;"   m       struct:scsc_mx  typeref:struct:scsc_mx::mxmgmt_transport        file:
-mxmgmt_transport_config_serialise      mxmgmt_transport.c      /^void mxmgmt_transport_config_serialise(struct mxmgmt_transport *mxmgmt_transport,$/;" f
-mxmgmt_transport_init  mxmgmt_transport.c      /^int mxmgmt_transport_init(struct mxmgmt_transport *mxmgmt_transport, struct scsc_mx *mx)$/;"  f
-mxmgmt_transport_register_channel_handler      mxmgmt_transport.c      /^void mxmgmt_transport_register_channel_handler(struct mxmgmt_transport *mxmgmt_transport, enum mxmgr_channels channel_id,$/;" f
-mxmgmt_transport_release       mxmgmt_transport.c      /^void mxmgmt_transport_release(struct mxmgmt_transport *mxmgmt_transport)$/;"  f
-mxmgmt_transport_send  mxmgmt_transport.c      /^void mxmgmt_transport_send(struct mxmgmt_transport *mxmgmt_transport, enum mxmgr_channels channel_id,$/;"     f
-mxmgmt_transport_set_error     mxmgmt_transport.c      /^void mxmgmt_transport_set_error(struct mxmgmt_transport *mxmgmt_transport)$/;"        f
-mxmgr_channels mxmgmt_transport.h      /^enum mxmgr_channels {$/;"     g
-mxmgr_message  mxmgmt_transport_format.h       /^struct mxmgr_message {$/;"    s
-mxmgr_stream_container mxmgmt_transport_streams.h      /^} mxmgr_stream_container;$/;" v       typeref:struct:__anon6
-mxproc mxman.h /^      struct mxproc           mxproc;$/;"     m       struct:mxman    typeref:struct:mxman::mxproc
-mxproc mxproc.h        /^struct mxproc {$/;"   s
-mxproc_create_ctrl_proc_dir    mxproc.c        /^int mxproc_create_ctrl_proc_dir(struct mxproc *mxproc, struct mxman *mxman)$/;"       f
-mxproc_create_info_proc_dir    mxproc.c        /^int mxproc_create_info_proc_dir(struct mxproc *mxproc, struct mxman *mxman)$/;"       f
-mxproc_remove_ctrl_proc_dir    mxproc.c        /^void mxproc_remove_ctrl_proc_dir(struct mxproc *mxproc)$/;"   f
-mxproc_remove_info_proc_dir    mxproc.c        /^void mxproc_remove_info_proc_dir(struct mxproc *mxproc)$/;"   f
-mxstreamconf   mxconf.h        /^GCC_PACKED struct mxstreamconf {$/;"  s
-mxtransconf    mxconf.h        /^GCC_PACKED struct mxtransconf {$/;"   s
-name   gdb_transport.h /^      char *name;$/;" m       struct:gdb_transport_client
-name   mxlog_transport.h       /^      char               name[MXLOG_THREAD_NAME_MAX_LENGTH];$/;"      m       struct:mxlog_thread
-name   mxmgmt_transport.h      /^      char               name[MXMGMT_THREAD_NAME_MAX_LENGTH];$/;"     m       struct:mxmgmt_thread
-name   scsc_logring_ring.h     /^      char              name[RNAME_SZ];$/;"   m       struct:scsc_ring_buffer
-name   scsc_mif_abs.h  /^      char *name;$/;" m       struct:scsc_mif_abs_driver
-name   scsc_mif_abs.h  /^      char *name;$/;" m       struct:scsc_mif_mmap_driver
-nsec   scsc_logring_ring.h     /^      s64 nsec;$/;"   m       struct:scsc_ring_record
-num_blocks     miframman.h     /^      u32          num_blocks;$/;"    m       struct:miframman
-num_bytes      mx_dbg_sampler.c        /^static unsigned int num_bytes = 4;$/;"        v       file:
-num_bytes      mx_dbg_sampler.h        /^      uint32_t num_bytes;$/;" m       struct:debug_sampler_sample_spec
-num_packets    cpacket_buffer.h        /^      uint32_t       num_packets; \/* Total number of packets that can be stored in the buffer *\/$/;"        m       struct:cpacketbuffer
-num_packets    mxconf.h        /^      uint32_t        num_packets;     \/**< Total number of packets that can be stored in the buffer *\/$/;" m       struct:mxcbufconf
-obj-m  Makefile        /^obj-m := scsc_mx.o$/;"        m
-offset mifproc.c       212;"   d       file:
-offset mxlog.h /^      u32 offset;$/;" m       struct:mxlog_event_log_msg
-oos    scsc_logring_ring.h     /^      int               oos;$/;"      m       struct:scsc_ring_buffer
-open_start_services    client_test.c   /^static bool open_start_services(struct scsc_mx *mx)$/;"       f       file:
-optional_data  servman_messages.h      /^      scsc_mifram_ref optional_data;$/;"      m       struct:sm_msg_packet
-ostream        mxmgmt_transport_streams.h      /^      mif_stream *ostream;$/;"        m       struct:__anon6
-output_irq_handler     gdb_transport.c /^static void output_irq_handler(int irq, void *data)$/;"       f       file:
-output_irq_handler     mxmgmt_transport.c      /^static void output_irq_handler(int irq, void *data)$/;"       f       file:
-p_mutex_ap     pcie_mif.c      /^      struct peterson_mutex *p_mutex_ap;   \/* AP will WRITE - CR4 will READ *\/$/;"  m       struct:pcie_mif typeref:struct:pcie_mif::peterson_mutex file:
-p_mutex_r4     pcie_mif.c      /^      struct peterson_mutex *p_mutex_r4;   \/* AP will READ  - CR4 will WRITE *\/$/;" m       struct:pcie_mif typeref:struct:pcie_mif::peterson_mutex file:
-packet_size    cpacket_buffer.h        /^      uint32_t       packet_size; \/* Size of each individual packet within the buffer *\/$/;"        m       struct:cpacketbuffer
-packet_size    mxconf.h        /^      uint32_t        packet_size;     \/**< Size of each individual packet within the buffer *\/$/;" m       struct:mxcbufconf
-padding        mif_reg.h       /^      volatile u32 padding[MAX_NUM_MBOX - NUM_MBOX];  \/* MAILBOXES *\/$/;"   m       struct:scsc_mbox_s
-panic_record_delay     mxman.c /^static uint panic_record_delay = 1;$/;"       v       file:
-panic_record_dump      fw_panic_record.c       /^static void panic_record_dump(u32 *panic_record, u32 panic_record_length, bool r4)$/;"        f       file:
-panicmon       panicmon.h      /^struct panicmon {$/;" s
-panicmon       scsc_mx_impl.c  /^      struct panicmon         panicmon;$/;"   m       struct:scsc_mx  typeref:struct:scsc_mx::panicmon        file:
-panicmon_deinit        panicmon.c      /^void panicmon_deinit(struct panicmon *panicmon)$/;"   f
-panicmon_init  panicmon.c      /^void panicmon_init(struct panicmon *panicmon, struct scsc_mx *mx)$/;" f
-panicmon_isr   panicmon.c      /^static void panicmon_isr(int irq, void *data)$/;"     f       file:
-payload        mxmgmt_transport_format.h       /^      uint8_t payload[7]; \/* Message content to store in the transport stream - user defined format *\/$/;"  m       struct:mxmgr_message
-pcie_create_proc_dir   pcie_proc.c     /^int pcie_create_proc_dir(struct pcie_mif *pcie)$/;"   f
-pcie_dbg       pcie_proc.c     /^PCIE_PROCFS_SEQ_FILE_OPS(pcie_dbg);$/;"       v
-pcie_global    pcie_proc.c     /^struct pcie_mif              *pcie_global;$/;"        v       typeref:struct:pcie_mif
-pcie_mif       pcie_mif.c      /^struct pcie_mif {$/;" s       file:
-pcie_mif_create        pcie_mif.c      /^struct scsc_mif_abs *pcie_mif_create(struct pci_dev *pdev, const struct pci_device_id *id)$/;"        f
-pcie_mif_destroy       pcie_mif.c      /^static void pcie_mif_destroy(struct scsc_mif_abs *interface)$/;"      f       file:
-pcie_mif_destroy_pcie  pcie_mif.c      /^void pcie_mif_destroy_pcie(struct pci_dev *pdev, struct scsc_mif_abs *interface)$/;"  f
-pcie_mif_dump_register pcie_mif.c      /^static void pcie_mif_dump_register(struct scsc_mif_abs *interface)$/;"        f       file:
-pcie_mif_from_mif_abs  pcie_mif.c      47;"    d       file:
-pcie_mif_get_bar0      pcie_mif.c      /^void pcie_mif_get_bar0(struct pcie_mif *pcie, struct scsc_bar0_reg *bar0)$/;" f
-pcie_mif_get_dev       pcie_mif.c      /^struct device *pcie_mif_get_dev(struct scsc_mif_abs *interface)$/;"   f
-pcie_mif_get_mbox_ptr  pcie_mif.c      /^static u32 *pcie_mif_get_mbox_ptr(struct scsc_mif_abs *interface, u32 mbox_index)$/;" f       file:
-pcie_mif_get_mif_device        pcie_mif.c      /^static struct device *pcie_mif_get_mif_device(struct scsc_mif_abs *interface)$/;"     f       file:
-pcie_mif_get_mif_pfn   pcie_mif.c      /^static uintptr_t pcie_mif_get_mif_pfn(struct scsc_mif_abs *interface)$/;"     f       file:
-pcie_mif_get_mifram_ptr        pcie_mif.c      /^static void *pcie_mif_get_mifram_ptr(struct scsc_mif_abs *interface, scsc_mifram_ref ref)$/;" f       file:
-pcie_mif_get_mifram_ref        pcie_mif.c      /^static int pcie_mif_get_mifram_ref(struct scsc_mif_abs *interface, void *ptr, scsc_mifram_ref *ref)$/;"       f       file:
-pcie_mif_get_pci_dev   pcie_mif.c      /^struct pci_dev *pcie_mif_get_pci_dev(struct scsc_mif_abs *interface)$/;"      f
-pcie_mif_get_uid       pcie_mif.c      /^static char *pcie_mif_get_uid(struct scsc_mif_abs *interface)$/;"     f       file:
-pcie_mif_irq_bit_clear pcie_mif.c      /^static void pcie_mif_irq_bit_clear(struct scsc_mif_abs *interface, int bit_num)$/;"   f       file:
-pcie_mif_irq_bit_mask  pcie_mif.c      /^static void pcie_mif_irq_bit_mask(struct scsc_mif_abs *interface, int bit_num)$/;"    f       file:
-pcie_mif_irq_bit_mask_status_get       pcie_mif.c      /^static u32 pcie_mif_irq_bit_mask_status_get(struct scsc_mif_abs *interface)$/;"       f       file:
-pcie_mif_irq_bit_set   pcie_mif.c      /^static void pcie_mif_irq_bit_set(struct scsc_mif_abs *interface, int bit_num, enum scsc_mif_abs_target target)$/;"    f       file:
-pcie_mif_irq_bit_unmask        pcie_mif.c      /^static void pcie_mif_irq_bit_unmask(struct scsc_mif_abs *interface, int bit_num)$/;"  f       file:
-pcie_mif_irq_clear     pcie_mif.c      /^static void pcie_mif_irq_clear(void)$/;"      f       file:
-pcie_mif_irq_default_handler   pcie_mif.c      /^static void pcie_mif_irq_default_handler(int irq, void *data)$/;"     f       file:
-pcie_mif_irq_get       pcie_mif.c      /^static u32 pcie_mif_irq_get(struct scsc_mif_abs *interface)$/;"       f       file:
-pcie_mif_irq_reg_handler       pcie_mif.c      /^static void pcie_mif_irq_reg_handler(struct scsc_mif_abs *interface, void (*handler)(int irq, void *data), void *dev)$/;"     f       file:
-pcie_mif_irq_reg_reset_request_handler pcie_mif.c      /^static void pcie_mif_irq_reg_reset_request_handler(struct scsc_mif_abs *interface, void (*handler)(int irq, void *data), void *dev)$/;"       f       file:
-pcie_mif_irq_unreg_handler     pcie_mif.c      /^static void pcie_mif_irq_unreg_handler(struct scsc_mif_abs *interface)$/;"    f       file:
-pcie_mif_irq_unreg_reset_request_handler       pcie_mif.c      /^static void pcie_mif_irq_unreg_reset_request_handler(struct scsc_mif_abs *interface)$/;"      f       file:
-pcie_mif_isr   pcie_mif.c      /^irqreturn_t pcie_mif_isr(int irq, void *data)$/;"     f
-pcie_mif_mailbox_get   pcie_mif.c      /^static u32 pcie_mif_mailbox_get(struct scsc_mif_abs *interface, u32 mbox_num)$/;"     f       file:
-pcie_mif_mailbox_set   pcie_mif.c      /^static void pcie_mif_mailbox_set(struct scsc_mif_abs *interface, u32 mbox_num, u32 value)$/;" f       file:
-pcie_mif_map   pcie_mif.c      /^static void *pcie_mif_map(struct scsc_mif_abs *interface, size_t *allocated)$/;"      f       file:
-pcie_mif_module        pcie_mif_module.c       /^static struct pcie_mif_module {$/;"   s       file:
-pcie_mif_module_probe  pcie_mif_module.c       /^static int pcie_mif_module_probe(struct pci_dev *pdev, const struct pci_device_id *id)$/;"    f       file:
-pcie_mif_module_probe_registered_clients       pcie_mif_module.c       /^static void pcie_mif_module_probe_registered_clients(struct scsc_mif_abs *mif_abs)$/;"        f       file:
-pcie_mif_module_remove pcie_mif_module.c       /^static void pcie_mif_module_remove(struct pci_dev *pdev)$/;"  f       file:
-pcie_mif_module_tbl    pcie_mif_module.c       /^static const struct pci_device_id pcie_mif_module_tbl[] = {$/;"       v       typeref:struct:pci_device_id    file:
-pcie_mif_reset pcie_mif.c      /^static int pcie_mif_reset(struct scsc_mif_abs *interface, bool reset)$/;"     f       file:
-pcie_mif_set_bar0_register     pcie_mif.c      /^int pcie_mif_set_bar0_register(struct pcie_mif *pcie, unsigned int value, unsigned int offset)$/;"    f
-pcie_mif_unmap pcie_mif.c      /^static void pcie_mif_unmap(struct scsc_mif_abs *interface, void *mem)$/;"     f       file:
-pcie_procfs_open_file_generic  pcie_proc.c     /^static int pcie_procfs_open_file_generic(struct inode *inode, struct file *file)$/;"  f       file:
-pcie_procfs_pcie_dbg_show      pcie_proc.c     /^static int pcie_procfs_pcie_dbg_show(struct seq_file *m, void *v)$/;" f       file:
-pcie_procfs_pcie_trg_read      pcie_proc.c     /^static ssize_t pcie_procfs_pcie_trg_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)$/;"    f       file:
-pcie_procfs_pcie_trg_write     pcie_proc.c     /^static ssize_t pcie_procfs_pcie_trg_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos)$/;"     f       file:
-pcie_remove_proc_dir   pcie_proc.c     /^void pcie_remove_proc_dir(void)$/;"   f
-pcie_trg       pcie_proc.c     /^PCIE_PROCFS_RW_FILE_OPS(pcie_trg);$/;"        v
-pcie_val       pcie_proc.c     /^static bool                  pcie_val;$/;"    v       file:
-pdev   pcie_mif.c      /^      struct pci_dev        *pdev;$/;"        m       struct:pcie_mif typeref:struct:pcie_mif::pci_dev        file:
-pdev   platform_mif.c  /^      struct platform_device *pdev;$/;"       m       struct:platform_mif     typeref:struct:platform_mif::platform_device    file:
-peer   mifstream.h     /^      enum MIF_STREAM_PEER peer;$/;"  m       struct:mif_stream       typeref:enum:mif_stream::MIF_STREAM_PEER
-period_usecs   mx_dbg_sampler.c        /^static unsigned int period_usecs;$/;" v       file:
-period_usecs   mx_dbg_sampler.h        /^      uint32_t period_usecs;$/;"      m       struct:debug_sampler_sample_spec
-peterson_mutex mif_reg.h       /^struct peterson_mutex {$/;"   s
-peterson_mutex_init    peterson_mutex.h        /^static inline void peterson_mutex_init(struct peterson_mutex *p_mutex)$/;"    f
-peterson_mutex_lock    peterson_mutex.h        /^static inline void peterson_mutex_lock(struct peterson_mutex *p_mutex, unsigned int process)$/;"      f
-peterson_mutex_unlock  peterson_mutex.h        /^static inline void peterson_mutex_unlock(struct peterson_mutex *p_mutex, unsigned int process)$/;"    f
-platform_alive_isr     platform_mif.c  /^irqreturn_t platform_alive_isr(int irq, void *data)$/;"       f
-platform_mif   platform_mif.c  /^struct platform_mif {$/;"     s       file:
-platform_mif_cleanup   platform_mif.c  /^static void platform_mif_cleanup(struct scsc_mif_abs *interface)$/;"  f       file:
-platform_mif_create    platform_mif.c  /^struct scsc_mif_abs *platform_mif_create(struct platform_device *pdev)$/;"    f
-platform_mif_destroy   platform_mif.c  /^static void platform_mif_destroy(struct scsc_mif_abs *interface)$/;"  f       file:
-platform_mif_destroy_platform  platform_mif.c  /^void platform_mif_destroy_platform(struct platform_device *pdev, struct scsc_mif_abs *interface)$/;"  f
-platform_mif_driver    platform_mif_module.c   /^module_platform_driver(platform_mif_driver);$/;"      v
-platform_mif_driver    platform_mif_module.c   /^static struct platform_driver    platform_mif_driver = {$/;"  v       typeref:struct:platform_driver  file:
-platform_mif_dump_register     platform_mif.c  /^static void platform_mif_dump_register(struct scsc_mif_abs *interface)$/;"    f       file:
-platform_mif_from_mif_abs      platform_mif.c  110;"   d       file:
-platform_mif_get_dev   platform_mif.c  /^struct device *platform_mif_get_dev(struct scsc_mif_abs *interface)$/;"       f
-platform_mif_get_mbox_ptr      platform_mif.c  /^static u32 *platform_mif_get_mbox_ptr(struct scsc_mif_abs *interface, u32 mbox_index)$/;"     f       file:
-platform_mif_get_mif_device    platform_mif.c  /^static struct device *platform_mif_get_mif_device(struct scsc_mif_abs *interface)$/;" f       file:
-platform_mif_get_mif_pfn       platform_mif.c  /^static uintptr_t platform_mif_get_mif_pfn(struct scsc_mif_abs *interface)$/;" f       file:
-platform_mif_get_mifram_ptr    platform_mif.c  /^static void *platform_mif_get_mifram_ptr(struct scsc_mif_abs *interface, scsc_mifram_ref ref)$/;"     f       file:
-platform_mif_get_mifram_ref    platform_mif.c  /^static int platform_mif_get_mifram_ref(struct scsc_mif_abs *interface, void *ptr, scsc_mifram_ref *ref)$/;"   f       file:
-platform_mif_get_platform_dev  platform_mif.c  /^struct platform_device *platform_mif_get_platform_dev(struct scsc_mif_abs *interface)$/;"     f
-platform_mif_get_uid   platform_mif.c  /^static char *platform_mif_get_uid(struct scsc_mif_abs *interface)$/;" f       file:
-platform_mif_hold_reset        platform_mif.c  /^static int platform_mif_hold_reset(struct scsc_mif_abs *interface, bool reset)$/;"    f       file:
-platform_mif_init      platform_mif_module.c   /^core_initcall(platform_mif_init);$/;" v
-platform_mif_init      platform_mif_module.c   /^static int platform_mif_init(void)$/;"        f       file:
-platform_mif_irq_bit_clear     platform_mif.c  /^static void platform_mif_irq_bit_clear(struct scsc_mif_abs *interface, int bit_num)$/;"       f       file:
-platform_mif_irq_bit_mask      platform_mif.c  /^static void platform_mif_irq_bit_mask(struct scsc_mif_abs *interface, int bit_num)$/;"        f       file:
-platform_mif_irq_bit_mask_status_get   platform_mif.c  /^static u32 platform_mif_irq_bit_mask_status_get(struct scsc_mif_abs *interface)$/;"   f       file:
-platform_mif_irq_bit_set       platform_mif.c  /^static void platform_mif_irq_bit_set(struct scsc_mif_abs *interface, int bit_num, enum scsc_mif_abs_target target)$/;"        f       file:
-platform_mif_irq_bit_unmask    platform_mif.c  /^static void platform_mif_irq_bit_unmask(struct scsc_mif_abs *interface, int bit_num)$/;"      f       file:
-platform_mif_irq_clear platform_mif.c  /^static void platform_mif_irq_clear(void)$/;"  f       file:
-platform_mif_irq_default_handler       platform_mif.c  /^static void platform_mif_irq_default_handler(int irq, void *data)$/;" f       file:
-platform_mif_irq_get   platform_mif.c  /^static u32 platform_mif_irq_get(struct scsc_mif_abs *interface)$/;"   f       file:
-platform_mif_irq_reg_handler   platform_mif.c  /^static void platform_mif_irq_reg_handler(struct scsc_mif_abs *interface, void (*handler)(int irq, void *data), void *dev)$/;" f       file:
-platform_mif_irq_reg_reset_request_handler     platform_mif.c  /^static void platform_mif_irq_reg_reset_request_handler(struct scsc_mif_abs *interface, void (*handler)(int irq, void *data), void *dev)$/;"   f       file:
-platform_mif_irq_reset_request_default_handler platform_mif.c  /^static void platform_mif_irq_reset_request_default_handler(int irq, void *data)$/;"   f       file:
-platform_mif_irq_unreg_handler platform_mif.c  /^static void platform_mif_irq_unreg_handler(struct scsc_mif_abs *interface)$/;"        f       file:
-platform_mif_irq_unreg_reset_request_handler   platform_mif.c  /^static void platform_mif_irq_unreg_reset_request_handler(struct scsc_mif_abs *interface)$/;"  f       file:
-platform_mif_isr       platform_mif.c  /^irqreturn_t platform_mif_isr(int irq, void *data)$/;" f
-platform_mif_map       platform_mif.c  /^static void *platform_mif_map(struct scsc_mif_abs *interface, size_t *allocated)$/;"  f       file:
-platform_mif_map_region        platform_mif.c  /^static void __iomem *platform_mif_map_region(unsigned long phys_addr, size_t size)$/;"        f       file:
-platform_mif_module    platform_mif_module.c   /^static struct platform_mif_module {$/;"       s       file:
-platform_mif_module_probe      platform_mif_module.c   /^static int platform_mif_module_probe(struct platform_device *pdev)$/;"        f       file:
-platform_mif_module_probe_registered_clients   platform_mif_module.c   /^static void platform_mif_module_probe_registered_clients(struct scsc_mif_abs *mif_abs)$/;"    f       file:
-platform_mif_module_remove     platform_mif_module.c   /^static int platform_mif_module_remove(struct platform_device *pdev)$/;"       f       file:
-platform_mif_module_resume     platform_mif_module.c   /^static int platform_mif_module_resume(struct device *dev)$/;" f       file:
-platform_mif_module_suspend    platform_mif_module.c   /^static int platform_mif_module_suspend(struct device *dev)$/;"        f       file:
-platform_mif_pm_ops    platform_mif_module.c   /^static const struct dev_pm_ops platform_mif_pm_ops = {$/;"    v       typeref:struct:dev_pm_ops       file:
-platform_mif_pmu_reset platform_mif.c  /^static int platform_mif_pmu_reset(struct scsc_mif_abs *interface, u8 rst_case)$/;"    f       file:
-platform_mif_pmu_reset_release platform_mif.c  /^static int platform_mif_pmu_reset_release(struct scsc_mif_abs *interface)$/;" f       file:
-platform_mif_power     platform_mif.c  /^static int platform_mif_power(struct scsc_mif_abs *interface, bool power)$/;" f       file:
-platform_mif_reg_read  platform_mif.c  /^inline u32 platform_mif_reg_read(struct platform_mif *platform, u16 offset)$/;"       f
-platform_mif_reg_restore       platform_mif.c  /^static void platform_mif_reg_restore(struct platform_mif *platform)$/;"       f       file:
-platform_mif_reg_save  platform_mif.c  /^static void platform_mif_reg_save(struct platform_mif *platform)$/;"  f       file:
-platform_mif_reg_write platform_mif.c  /^inline void platform_mif_reg_write(struct platform_mif *platform, u16 offset, u32 value)$/;"  f
-platform_mif_register_irq      platform_mif.c  /^static int platform_mif_register_irq(struct platform_mif *platform)$/;"       f       file:
-platform_mif_reset     platform_mif.c  /^static int platform_mif_reset(struct scsc_mif_abs *interface, bool reset)$/;" f       file:
-platform_mif_restart   platform_mif.c  /^static void platform_mif_restart(struct scsc_mif_abs *interface)$/;"  f       file:
-platform_mif_resume    platform_mif.c  /^void platform_mif_resume(struct scsc_mif_abs *interface)$/;"  f
-platform_mif_start     platform_mif.c  /^static int platform_mif_start(struct scsc_mif_abs *interface, bool start)$/;" f       file:
-platform_mif_suspend   platform_mif.c  /^int platform_mif_suspend(struct scsc_mif_abs *interface)$/;"  f
-platform_mif_suspend_reg_handler       platform_mif.c  /^static void platform_mif_suspend_reg_handler(struct scsc_mif_abs *interface,$/;"      f       file:
-platform_mif_suspend_unreg_handler     platform_mif.c  /^static void platform_mif_suspend_unreg_handler(struct scsc_mif_abs *interface)$/;"    f       file:
-platform_mif_unmap     platform_mif.c  /^static void platform_mif_unmap(struct scsc_mif_abs *interface, void *mem)$/;" f       file:
-platform_mif_unmap_region      platform_mif.c  /^static void platform_mif_unmap_region(void *vmem)$/;" f       file:
-platform_mif_unregister_irq    platform_mif.c  /^static void platform_mif_unregister_irq(struct platform_mif *platform)$/;"    f       file:
-platform_mif_wifibt_if_reserved_mem_setup      platform_mif.c  /^static int __init platform_mif_wifibt_if_reserved_mem_setup(struct reserved_mem *remem)$/;"   f       file:
-platform_wdog_isr      platform_mif.c  /^irqreturn_t platform_wdog_isr(int irq, void *data)$/;"        f
-pmureg platform_mif.c  /^      struct regmap *pmureg;$/;"      m       struct:platform_mif     typeref:struct:platform_mif::regmap     file:
-port   scsc_loopback.h /^      struct scsc_mport port;$/;"     m       struct:scsc_loopback    typeref:struct:scsc_loopback::scsc_mport
-prepend_header scsc_logring_main.c     /^static int              prepend_header = DEFAULT_ENABLE_HEADER;$/;"   v       file:
-primary_service        client_test.c   /^      struct scsc_service        *primary_service;$/;"        m       struct:scsc_mx_test     typeref:struct:scsc_mx_test::scsc_service       file:
-print_bitmaps  mifintrbit.c    /^static void print_bitmaps(struct mifintrbit *intr)$/;"        f       file:
-print_mailboxes        mxman.c /^static void print_mailboxes(struct mxman *mxman)$/;"  f       file:
-print_panic_code       mxman.c /^static void print_panic_code(u16 code)$/;"    f       file:
-prio   mxlog_transport.h       /^      int                prio;$/;"    m       struct:mxlog_thread
-prio   mxmgmt_transport.h      /^      int                prio;$/;"    m       struct:mxmgmt_thread
-probe  gdb_transport.h /^      void (*probe)(struct gdb_transport_client *gdb_client, struct gdb_transport *gdb_transport, char *dev_uid);$/;" m       struct:gdb_transport_client
-probe  scsc_mif_abs.h  /^      void (*probe)(struct scsc_mif_abs_driver *abs_driver, struct scsc_mif_abs *abs);$/;"    m       struct:scsc_mif_abs_driver
-probe  scsc_mif_abs.h  /^      void (*probe)(struct scsc_mif_mmap_driver *mmap_driver, struct scsc_mif_abs *abs);$/;"  m       struct:scsc_mif_mmap_driver
-proc   scsc_mx_impl.c  /^      struct mifproc          proc;$/;"       m       struct:scsc_mx  typeref:struct:scsc_mx::mifproc file:
-proc_count     mx140_clk.c     /^static u32 proc_count;$/;"    v       file:
-proc_count     mxproc.c        /^static u32 proc_count;$/;"    v       file:
-procdir        mifproc.c       /^static const char *procdir = "driver\/mif_ctrl";$/;"  v       file:
-procdir        pcie_proc.c     /^static const char *procdir = "driver\/pcie_ctrl";$/;" v       file:
-procdir_ctrl   mx140_clk.c     /^static const char *procdir_ctrl = "driver\/mx140_clk";$/;"    v       file:
-procdir_ctrl   mxproc.c        /^static const char *procdir_ctrl = "driver\/mxman_ctrl";$/;"   v       file:
-procdir_info   mxproc.c        /^static const char *procdir_info = "driver\/mxman_info";$/;"   v       file:
-process_cached_read_data       scsc_logring_debugfs.c  /^size_t process_cached_read_data(struct scsc_ibox *i, size_t *count)$/;"       f       file:
-procfs_ctrl_dir        mx140_clk.c     /^      struct proc_dir_entry      *procfs_ctrl_dir;$/;"        m       struct:mx140_clk20mhz   typeref:struct:mx140_clk20mhz::proc_dir_entry   file:
-procfs_ctrl_dir        mxproc.h        /^      struct proc_dir_entry *procfs_ctrl_dir;$/;"     m       struct:mxproc   typeref:struct:mxproc::proc_dir_entry
-procfs_ctrl_dir_num    mx140_clk.c     /^      u32                        procfs_ctrl_dir_num;$/;"     m       struct:mx140_clk20mhz   file:
-procfs_ctrl_dir_num    mxproc.h        /^      u32                   procfs_ctrl_dir_num;$/;"  m       struct:mxproc
-procfs_dir     mifproc.c       /^static struct proc_dir_entry *procfs_dir;$/;" v       typeref:struct:proc_dir_entry   file:
-procfs_dir     pcie_proc.c     /^static struct proc_dir_entry *procfs_dir;$/;" v       typeref:struct:proc_dir_entry   file:
-procfs_info_dir        mxproc.h        /^      struct proc_dir_entry *procfs_info_dir;$/;"     m       struct:mxproc   typeref:struct:mxproc::proc_dir_entry
-push_record_blob       scsc_logring_ring.c     /^int push_record_blob(struct scsc_ring_buffer *rb, int tag, int lev,$/;"       f
-push_record_string     scsc_logring_ring.c     /^int push_record_string(struct scsc_ring_buffer *rb, int tag, int lev,$/;"     f
-r4_handler     pcie_mif.c      /^      void                  (*r4_handler)(int irq, void *data);$/;"   m       struct:pcie_mif file:
-r4_handler     platform_mif.c  /^      void          (*r4_handler)(int irq, void *data);$/;"   m       struct:platform_mif     file:
-r4_panic_record_offset fwhdr.h /^      u32 r4_panic_record_offset;$/;" m       struct:fwhdr
-ram    scsc_mx_impl.c  /^      struct miframman        ram;$/;"        m       struct:scsc_mx  typeref:struct:scsc_mx::miframman       file:
-rb     scsc_logring_debugfs.h  /^      struct scsc_ring_buffer *rb;$/;"        m       struct:scsc_ibox        typeref:struct:scsc_ibox::scsc_ring_buffer
-read_bit_idx   mifstream.h     /^      uint8_t              read_bit_idx;$/;"  m       struct:mif_stream
-read_bit_idx   mxconf.h        /^      uint8_t           read_bit_idx;$/;"     m       struct:mxstreamconf
-read_idx       mx_dbg_sampler.c        /^      u32                         read_idx;$/;"       m       struct:mx_dbg_sampler_dev       file:
-read_index     cpacket_buffer.h        /^      uint32_t       *read_index;  \/* Pointer to the location of the read index, which$/;"   m       struct:cpacketbuffer
-read_index_loc mxconf.h        /^      scsc_mifram_ref read_index_loc;  \/**< Location of 32bit read index in DRAM or Mailbox *\/$/;"  m       struct:mxcbufconf
-read_next_records      scsc_logring_ring.c     /^size_t read_next_records(struct scsc_ring_buffer *rb, int max_recs,$/;"       f
-read_wait      mx_dbg_sampler.c        /^      wait_queue_head_t           read_wait;$/;"      m       struct:mx_dbg_sampler_dev       file:
-read_wait      mx_mmap.c       /^      wait_queue_head_t    read_wait;$/;"     m       struct:mx_mmap_dev      file:
-reader_resync  scsc_logring_ring.c     /^static inline loff_t reader_resync(struct scsc_ring_buffer *rb,$/;"   f       file:
-records        scsc_logring_ring.h     /^      int               records;$/;"  m       struct:scsc_ring_buffer
-recovery       mx140_clk.c     /^static int recovery;$/;"      v       file:
-recovery_completion    mxman.h /^      struct completion       recovery_completion;$/;"        m       struct:mxman    typeref:struct:mxman::completion
-recovery_in_progress   mx_dbg_sampler.c        /^static int recovery_in_progress;$/;"  v       file:
-recovery_pending_stop_close    mx140_clk.c     /^static int recovery_pending_stop_close;$/;"   v       file:
-recovery_probe_completion      mx140_clk.c     /^      struct completion          recovery_probe_completion;$/;"       m       struct:mx140_clk20mhz   typeref:struct:mx140_clk20mhz::completion       file:
-recovery_wake_lock     mxman.h /^      struct wake_lock        recovery_wake_lock;$/;" m       struct:mxman    typeref:struct:mxman::wake_lock
-ref    mx_dbg_sampler.c        /^      scsc_mifram_ref             ref;$/;"    m       struct:mx_dbg_sampler_dev       file:
-refc   scsc_logring_ring.h     /^      atomic_t          refc;$/;"     m       struct:scsc_ring_buffer
-reg_bkp        platform_mif.c  /^static u32          reg_bkp;$/;"      v       file:
-reg_size       platform_mif.c  /^      size_t        reg_size;$/;"     m       struct:platform_mif     file:
-reg_start      platform_mif.c  /^      size_t        reg_start;$/;"    m       struct:platform_mif     file:
-reg_update     platform_mif.c  /^static bool         reg_update;$/;"   v       file:
-registers      pcie_mif.c      /^      __iomem void          *registers;$/;"   m       struct:pcie_mif file:
-reinit_completion      scsc_service.c  31;"    d       file:
-remove gdb_transport.h /^      void (*remove)(struct gdb_transport_client *gdb_client, struct gdb_transport *gdb_transport);$/;"       m       struct:gdb_transport_client
-remove scsc_mif_abs.h  /^      void (*remove)(struct scsc_mif_abs *abs);$/;"   m       struct:scsc_mif_abs_driver
-remove scsc_mif_abs.h  /^      void (*remove)(struct scsc_mif_abs *abs);$/;"   m       struct:scsc_mif_mmap_driver
-request_pending        mx140_clk.c     /^      atomic_t                   request_pending;$/;" m       struct:mx140_clk20mhz   file:
-reset  scsc_mif_abs.h  /^      int (*reset)(struct scsc_mif_abs *interface, bool reset);$/;"   m       struct:scsc_mif_abs
-reset_request_handler  platform_mif.c  /^      void          (*reset_request_handler)(int irq, void *data);$/;"        m       struct:platform_mif     file:
-restart        mx140_clk.c     /^MX_CLK20_PROCFS_RW_FILE_OPS(restart);$/;"     v
-resume_handler platform_mif.c  /^      void (*resume_handler)(struct scsc_mif_abs *abs, void *data);$/;"       m       struct:platform_mif     file:
-rf_hw_ver      mxman.h /^      u32                     rf_hw_ver;$/;"  m       struct:mxman
-ringsize       scsc_logring_main.c     /^static int            ringsize = CONFIG_SCSC_STATIC_RING_SIZE;$/;"    v       file:
-ringsize       scsc_logring_main.c     /^static int              ringsize = DEFAULT_RING_BUFFER_SZ;$/;"        v       file:
-rootdir        scsc_logring_debugfs.h  /^      struct dentry *rootdir;$/;"     m       struct:scsc_debugfs_info        typeref:struct:scsc_debugfs_info::dentry
-samlog_debugfs_exit    scsc_logring_debugfs.c  /^void __exit samlog_debugfs_exit(void **priv)$/;"      f
-samlog_debugfs_init    scsc_logring_debugfs.c  /^void __init *samlog_debugfs_init(const char *root_name, void *rb)$/;" f
-samlog_exit    scsc_logring_main.c     /^module_exit(samlog_exit);$/;" v
-samlog_exit    scsc_logring_main.c     /^void __exit samlog_exit(void)$/;"     f
-samlog_fops    scsc_logring_debugfs.c  /^const struct file_operations samlog_fops = {$/;"      v       typeref:struct:file_operations
-samlog_init    scsc_logring_main.c     /^int __init samlog_init(void)$/;"      f
-samlog_init    scsc_logring_main.c     /^module_init(samlog_init);$/;" v
-samlog_read    scsc_logring_debugfs.c  /^static ssize_t samlog_read(struct file *filp, char __user *ubuf,$/;"  f       file:
-samlogfile     scsc_logring_debugfs.h  /^      struct dentry *samlogfile;$/;"  m       struct:scsc_debugfs_info        typeref:struct:scsc_debugfs_info::dentry
-sample_spec    mx_dbg_sampler.h        /^      struct debug_sampler_sample_spec sample_spec;$/;"       m       struct:debug_sampler_config     typeref:struct:debug_sampler_config::debug_sampler_sample_spec
-samsg_fops     scsc_logring_debugfs.c  /^const struct file_operations samsg_fops = {$/;"       v       typeref:struct:file_operations
-samsg_read     scsc_logring_debugfs.c  /^static ssize_t samsg_read(struct file *filp, char __user *ubuf,$/;"   f       file:
-samsgfile      scsc_logring_debugfs.h  /^      struct dentry *samsgfile;$/;"   m       struct:scsc_debugfs_info        typeref:struct:scsc_debugfs_info::dentry
-samwrite_fops  scsc_logring_debugfs.c  /^const struct file_operations samwrite_fops = {$/;"    v       typeref:struct:file_operations
-samwritefile   scsc_logring_debugfs.h  /^      struct dentry *samwritefile;$/;"        m       struct:scsc_debugfs_info        typeref:struct:scsc_debugfs_info::dentry
-samwritefile_open      scsc_logring_debugfs.c  /^static int samwritefile_open(struct inode *ino, struct file *filp)$/;"        f       file:
-samwritefile_release   scsc_logring_debugfs.c  /^static int samwritefile_release(struct inode *ino, struct file *filp)$/;"     f       file:
-samwritefile_write     scsc_logring_debugfs.c  /^static ssize_t samwritefile_write(struct file *filp, const char __user *ubuf,$/;"     f       file:
-scsc_app_msg_req       scsc_app_msg.h  /^struct scsc_app_msg_req {$/;" s
-scsc_app_msg_resp      scsc_app_msg.h  /^struct scsc_app_msg_resp {$/;"        s
-scsc_bar0_reg  pcie_mif.h      /^struct scsc_bar0_reg {$/;"    s
-scsc_client_test_module_exit   client_test.c   /^module_exit(scsc_client_test_module_exit);$/;"        v
-scsc_client_test_module_exit   client_test.c   /^static void __exit scsc_client_test_module_exit(void)$/;"     f       file:
-scsc_client_test_module_init   client_test.c   /^late_initcall(scsc_client_test_module_init);$/;"      v
-scsc_client_test_module_init   client_test.c   /^static int __init scsc_client_test_module_init(void)$/;"      f       file:
-scsc_debugfs_info      scsc_logring_debugfs.h  /^struct scsc_debugfs_info {$/;"        s
-scsc_debugfs_root      scsc_logring_debugfs.c  /^static struct dentry *scsc_debugfs_root;$/;"  v       typeref:struct:dentry   file:
-scsc_debugfs_root_refcnt       scsc_logring_debugfs.c  /^static atomic_t      scsc_debugfs_root_refcnt;$/;"    v       file:
-scsc_decode_binary_len scsc_logring_ring.c     /^static int  scsc_decode_binary_len = DEFAULT_BIN_DECODE_LEN;$/;"      v       file:
-scsc_double_buffer_sz  scsc_logring_debugfs.c  /^static int  scsc_double_buffer_sz = DEFAULT_TBUF_SZ;$/;"      v       file:
-scsc_droplevel_all     scsc_logring_main.c     /^static int              scsc_droplevel_all = DEFAULT_ALL_DISABLED;$/;"        v       file:
-scsc_droplevel_atomic  scsc_logring_main.c     /^static int              scsc_droplevel_atomic = DEFAULT_DROPLEVEL;$/;"        v       file:
-scsc_droplevel_wlbt    scsc_logring_main.c     /^static int              scsc_droplevel_wlbt = DEFAULT_DROPLEVEL;$/;"  v       file:
-scsc_droplevels        scsc_logring_main.c     /^int *scsc_droplevels[] = {$/;"        v
-scsc_ibox      scsc_logring_debugfs.h  /^struct scsc_ibox {$/;"        s
-scsc_loopback  scsc_loopback.h /^struct scsc_loopback {$/;"    s
-scsc_loopback_deinit   scsc_loopback.c /^void scsc_loopback_deinit(struct scsc_loopback *loopback)$/;" f
-scsc_loopback_get_port scsc_loopback.c /^struct scsc_mport *scsc_loopback_get_port($/;"        f
-scsc_loopback_init     scsc_loopback.c /^void scsc_loopback_init(struct scsc_loopback *loopback)$/;"   f
-scsc_loopback_port_ops scsc_loopback.c /^static const struct scsc_mport_ops scsc_loopback_port_ops = {$/;"     v       typeref:struct:scsc_mport_ops   file:
-scsc_loopback_port_recv        scsc_loopback.c /^static void scsc_loopback_port_recv($/;"      f       file:
-scsc_max_records_per_read      scsc_logring_debugfs.c  /^static int  scsc_max_records_per_read = SCSC_DEFAULT_MAX_RECORDS_PER_READ;$/;"        v       file:
-scsc_mbox_s    mif_reg.h       /^struct scsc_mbox_s {$/;"      s
-scsc_mif_abs   scsc_mif_abs.h  /^struct scsc_mif_abs {$/;"     s
-scsc_mif_abs_driver    scsc_mif_abs.h  /^struct scsc_mif_abs_driver {$/;"      s
-scsc_mif_abs_register  pcie_mif_module.c       /^EXPORT_SYMBOL(scsc_mif_abs_register);$/;"     v
-scsc_mif_abs_register  pcie_mif_module.c       /^void scsc_mif_abs_register(struct scsc_mif_abs_driver *driver)$/;"    f
-scsc_mif_abs_register  platform_mif_module.c   /^EXPORT_SYMBOL(scsc_mif_abs_register);$/;"     v
-scsc_mif_abs_register  platform_mif_module.c   /^void scsc_mif_abs_register(struct scsc_mif_abs_driver *driver)$/;"    f
-scsc_mif_abs_target    scsc_mif_abs.h  /^enum scsc_mif_abs_target {$/;"        g
-scsc_mif_abs_unregister        pcie_mif_module.c       /^EXPORT_SYMBOL(scsc_mif_abs_unregister);$/;"   v
-scsc_mif_abs_unregister        pcie_mif_module.c       /^void scsc_mif_abs_unregister(struct scsc_mif_abs_driver *driver)$/;"  f
-scsc_mif_abs_unregister        platform_mif_module.c   /^EXPORT_SYMBOL(scsc_mif_abs_unregister);$/;"   v
-scsc_mif_abs_unregister        platform_mif_module.c   /^void scsc_mif_abs_unregister(struct scsc_mif_abs_driver *driver)$/;"  f
-scsc_mif_mmap_driver   scsc_mif_abs.h  /^struct scsc_mif_mmap_driver {$/;"     s
-scsc_mif_mmap_register pcie_mif_module.c       /^EXPORT_SYMBOL(scsc_mif_mmap_register);$/;"    v
-scsc_mif_mmap_register pcie_mif_module.c       /^void scsc_mif_mmap_register(struct scsc_mif_mmap_driver *mmap_driver)$/;"     f
-scsc_mif_mmap_register platform_mif_module.c   /^EXPORT_SYMBOL(scsc_mif_mmap_register);$/;"    v
-scsc_mif_mmap_register platform_mif_module.c   /^void scsc_mif_mmap_register(struct scsc_mif_mmap_driver *mmap_driver)$/;"     f
-scsc_mif_mmap_unregister       pcie_mif_module.c       /^EXPORT_SYMBOL(scsc_mif_mmap_unregister);$/;"  v
-scsc_mif_mmap_unregister       pcie_mif_module.c       /^void scsc_mif_mmap_unregister(struct scsc_mif_mmap_driver *mmap_driver)$/;"   f
-scsc_mif_mmap_unregister       platform_mif_module.c   /^EXPORT_SYMBOL(scsc_mif_mmap_unregister);$/;"  v
-scsc_mif_mmap_unregister       platform_mif_module.c   /^void scsc_mif_mmap_unregister(struct scsc_mif_mmap_driver *mmap_driver)$/;"   f
-scsc_mx        scsc_mx_impl.c  /^struct scsc_mx {$/;"  s       file:
-scsc_mx_create scsc_mx_impl.c  /^struct scsc_mx *scsc_mx_create(struct scsc_mif_abs *mif)$/;"  f
-scsc_mx_destroy        scsc_mx_impl.c  /^void scsc_mx_destroy(struct scsc_mx *mx)$/;"  f
-scsc_mx_get_device     scsc_mx_impl.c  /^EXPORT_SYMBOL_GPL(scsc_mx_get_device); \/* TODO: export a top-level API for this *\/$/;"      v
-scsc_mx_get_device     scsc_mx_impl.c  /^struct device *scsc_mx_get_device(struct scsc_mx *mx)$/;"     f
-scsc_mx_get_gdb_transport_m4   scsc_mx_impl.c  /^struct gdb_transport *scsc_mx_get_gdb_transport_m4(struct scsc_mx *mx)$/;"    f
-scsc_mx_get_gdb_transport_r4   scsc_mx_impl.c  /^struct gdb_transport *scsc_mx_get_gdb_transport_r4(struct scsc_mx *mx)$/;"    f
-scsc_mx_get_intrbit    scsc_mx_impl.c  /^struct mifintrbit *scsc_mx_get_intrbit(struct scsc_mx *mx)$/;"        f
-scsc_mx_get_mboxman    scsc_mx_impl.c  /^struct mifmboxman *scsc_mx_get_mboxman(struct scsc_mx *mx)$/;"        f
-scsc_mx_get_mif_abs    scsc_mx_impl.c  /^struct scsc_mif_abs *scsc_mx_get_mif_abs(struct scsc_mx *mx)$/;"      f
-scsc_mx_get_mxlog      scsc_mx_impl.c  /^struct mxlog *scsc_mx_get_mxlog(struct scsc_mx *mx)$/;"       f
-scsc_mx_get_mxlog_transport    scsc_mx_impl.c  /^struct mxlog_transport *scsc_mx_get_mxlog_transport(struct scsc_mx *mx)$/;"   f
-scsc_mx_get_mxman      scsc_mx_impl.c  /^struct mxman *scsc_mx_get_mxman(struct scsc_mx *mx)$/;"       f
-scsc_mx_get_mxmgmt_transport   scsc_mx_impl.c  /^struct mxmgmt_transport *scsc_mx_get_mxmgmt_transport(struct scsc_mx *mx)$/;" f
-scsc_mx_get_panicmon   scsc_mx_impl.c  /^struct panicmon *scsc_mx_get_panicmon(struct scsc_mx *mx)$/;" f
-scsc_mx_get_ramman     scsc_mx_impl.c  /^struct miframman *scsc_mx_get_ramman(struct scsc_mx *mx)$/;"  f
-scsc_mx_get_srvman     scsc_mx_impl.c  /^struct srvman *scsc_mx_get_srvman(struct scsc_mx *mx)$/;"     f
-scsc_mx_get_suspendmon scsc_mx_impl.c  /^struct suspendmon *scsc_mx_get_suspendmon(struct scsc_mx *mx)$/;"     f
-scsc_mx_mmap_module_probe      mx_mmap.c       /^void scsc_mx_mmap_module_probe(struct scsc_mif_mmap_driver *abs_driver, struct scsc_mif_abs *mif_abs)$/;"     f
-scsc_mx_mmap_module_remove     mx_mmap.c       /^void scsc_mx_mmap_module_remove(struct scsc_mif_abs *mif_abs)$/;"     f
-scsc_mx_module_exit    scsc_mx_module.c        /^module_exit(scsc_mx_module_exit);$/;" v
-scsc_mx_module_exit    scsc_mx_module.c        /^static void __exit scsc_mx_module_exit(void)$/;"      f       file:
-scsc_mx_module_init    scsc_mx_module.c        /^module_init(scsc_mx_module_init);$/;" v
-scsc_mx_module_init    scsc_mx_module.c        /^static int __init scsc_mx_module_init(void)$/;"       f       file:
-scsc_mx_module_probe   scsc_mx_module.c        /^static void scsc_mx_module_probe(struct scsc_mif_abs_driver *abs_driver, struct scsc_mif_abs *mif_abs)$/;"    f       file:
-scsc_mx_module_probe_registered_clients        scsc_mx_module.c        /^static void scsc_mx_module_probe_registered_clients(struct scsc_mx *new_mx)$/;"       f       file:
-scsc_mx_module_register_client_module  scsc_mx_module.c        /^EXPORT_SYMBOL(scsc_mx_module_register_client_module);$/;"     v
-scsc_mx_module_register_client_module  scsc_mx_module.c        /^int scsc_mx_module_register_client_module(struct scsc_mx_module_client *module_client)$/;"    f
-scsc_mx_module_remove  scsc_mx_module.c        /^static void scsc_mx_module_remove(struct scsc_mif_abs *abs)$/;"       f       file:
-scsc_mx_module_reset   scsc_mx_module.c        /^EXPORT_SYMBOL(scsc_mx_module_reset);$/;"      v
-scsc_mx_module_reset   scsc_mx_module.c        /^int scsc_mx_module_reset(void)$/;"    f
-scsc_mx_module_unregister_client_module        scsc_mx_module.c        /^EXPORT_SYMBOL(scsc_mx_module_unregister_client_module);$/;"   v
-scsc_mx_module_unregister_client_module        scsc_mx_module.c        /^void scsc_mx_module_unregister_client_module(struct scsc_mx_module_client *module_client)$/;" f
-scsc_mx_service_alloc_mboxes   scsc_service.c  /^EXPORT_SYMBOL(scsc_mx_service_alloc_mboxes);$/;"      v
-scsc_mx_service_alloc_mboxes   scsc_service.c  /^bool scsc_mx_service_alloc_mboxes(struct scsc_service *service, int n, int *first_mbox_index)$/;"     f
-scsc_mx_service_close  scsc_service.c  /^EXPORT_SYMBOL(scsc_mx_service_close);$/;"     v
-scsc_mx_service_close  scsc_service.c  /^int scsc_mx_service_close(struct scsc_service *service)$/;"   f
-scsc_mx_service_get_mbox_ptr   scsc_service.c  /^EXPORT_SYMBOL(scsc_mx_service_get_mbox_ptr);$/;"      v
-scsc_mx_service_get_mbox_ptr   scsc_service.c  /^u32 *scsc_mx_service_get_mbox_ptr(struct scsc_service *service, int mbox_index)$/;"   f
-scsc_mx_service_mif_addr_to_ptr        scsc_service.c  /^EXPORT_SYMBOL(scsc_mx_service_mif_addr_to_ptr);$/;"   v
-scsc_mx_service_mif_addr_to_ptr        scsc_service.c  /^void *scsc_mx_service_mif_addr_to_ptr(struct scsc_service *service, scsc_mifram_ref ref)$/;"  f
-scsc_mx_service_mif_dump_registers     scsc_service.c  /^EXPORT_SYMBOL(scsc_mx_service_mif_dump_registers);$/;"        v
-scsc_mx_service_mif_dump_registers     scsc_service.c  /^int scsc_mx_service_mif_dump_registers(struct scsc_service *service)$/;"      f
-scsc_mx_service_mif_ptr_to_addr        scsc_service.c  /^EXPORT_SYMBOL(scsc_mx_service_mif_ptr_to_addr);$/;"   v
-scsc_mx_service_mif_ptr_to_addr        scsc_service.c  /^int scsc_mx_service_mif_ptr_to_addr(struct scsc_service *service, void *mem_ptr, scsc_mifram_ref *ref)$/;"    f
-scsc_mx_service_mifram_alloc   scsc_service.c  /^EXPORT_SYMBOL(scsc_mx_service_mifram_alloc);$/;"      v
-scsc_mx_service_mifram_alloc   scsc_service.c  /^int scsc_mx_service_mifram_alloc(struct scsc_service *service, size_t nbytes, scsc_mifram_ref *ref, u32 align)$/;"    f
-scsc_mx_service_mifram_free    scsc_service.c  /^EXPORT_SYMBOL(scsc_mx_service_mifram_free);$/;"       v
-scsc_mx_service_mifram_free    scsc_service.c  /^void scsc_mx_service_mifram_free(struct scsc_service *service, scsc_mifram_ref ref)$/;"       f
-scsc_mx_service_open   scsc_service.c  /^EXPORT_SYMBOL(scsc_mx_service_open);$/;"      v
-scsc_mx_service_open   scsc_service.c  /^struct scsc_service *scsc_mx_service_open(struct scsc_mx *mx, enum scsc_service_id id, struct scsc_service_client *client, int *status)$/;"   f
-scsc_mx_service_service_failed scsc_service.c  /^EXPORT_SYMBOL(scsc_mx_service_service_failed);$/;"    v
-scsc_mx_service_service_failed scsc_service.c  /^void scsc_mx_service_service_failed(struct scsc_service *service)$/;" f
-scsc_mx_service_start  scsc_service.c  /^EXPORT_SYMBOL(scsc_mx_service_start);$/;"     v
-scsc_mx_service_start  scsc_service.c  /^int scsc_mx_service_start(struct scsc_service *service, scsc_mifram_ref ref)$/;"      f
-scsc_mx_service_stop   scsc_service.c  /^EXPORT_SYMBOL(scsc_mx_service_stop);$/;"      v
-scsc_mx_service_stop   scsc_service.c  /^int scsc_mx_service_stop(struct scsc_service *service)$/;"    f
-scsc_mx_test   client_test.c   /^struct scsc_mx_test {$/;"     s       file:
-scsc_panic_code        mxman.h /^      u16                     scsc_panic_code;$/;"    m       struct:mxman
-scsc_pcie      pcie_mif_module.c       /^module_pci_driver(scsc_pcie);$/;"     v
-scsc_pcie      pcie_mif_module.c       /^static struct pci_driver scsc_pcie = {$/;"    v       typeref:struct:pci_driver       file:
-scsc_printk_bin        scsc_logring_main.c     /^EXPORT_SYMBOL(scsc_printk_bin);$/;"   v
-scsc_printk_bin        scsc_logring_main.c     /^int scsc_printk_bin(int force, int tag, int dlev, const void *start, size_t len)$/;"  f
-scsc_printk_tag        scsc_logring_main.c     /^EXPORT_SYMBOL(scsc_printk_tag);$/;"   v
-scsc_printk_tag        scsc_logring_main.c     /^int scsc_printk_tag(int force, int tag, const char *fmt, ...)$/;"     f
-scsc_printk_tag_dev    scsc_logring_main.c     /^EXPORT_SYMBOL(scsc_printk_tag_dev);$/;"       v
-scsc_printk_tag_dev    scsc_logring_main.c     /^int scsc_printk_tag_dev(int force, int tag, struct device *dev,$/;"   f
-scsc_printk_tag_dev_lvl        scsc_logring_main.c     /^EXPORT_SYMBOL(scsc_printk_tag_dev_lvl);$/;"   v
-scsc_printk_tag_dev_lvl        scsc_logring_main.c     /^int scsc_printk_tag_dev_lvl(int force, int tag, struct device *dev,$/;"       f
-scsc_printk_tag_lvl    scsc_logring_main.c     /^EXPORT_SYMBOL(scsc_printk_tag_lvl);$/;"       v
-scsc_printk_tag_lvl    scsc_logring_main.c     /^int scsc_printk_tag_lvl(int tag, int level, const char *fmt, ...)$/;" f
-scsc_redirect_to_printk_droplvl        scsc_logring_main.c     /^static int              scsc_redirect_to_printk_droplvl = DEFAULT_REDIRECT_DROPLVL;$/;"       v       file:
-scsc_reset_all_droplevels_to   scsc_logring_main.c     /^static int              scsc_reset_all_droplevels_to;$/;"     v       file:
-scsc_reset_all_droplevels_to_set_param_cb      scsc_logring_main.c     /^static int scsc_reset_all_droplevels_to_set_param_cb(const char *val,$/;"     f       file:
-scsc_reset_droplvl_ops scsc_logring_main.c     /^static struct kernel_param_ops scsc_reset_droplvl_ops = {$/;" v       typeref:struct:kernel_param_ops file:
-scsc_ring_buffer       scsc_logring_ring.h     /^struct scsc_ring_buffer {$/;" s
-scsc_ring_buffer_overlap_append        scsc_logring_ring.c     /^void scsc_ring_buffer_overlap_append(struct scsc_ring_buffer *rb,$/;" f       file:
-scsc_ring_buffer_plain_append  scsc_logring_ring.c     /^void scsc_ring_buffer_plain_append(struct scsc_ring_buffer *rb,$/;"   f       file:
-scsc_ring_record       scsc_logring_ring.h     /^struct scsc_ring_record {$/;" s
-scsc_ring_truncate     scsc_logring_ring.c     /^void scsc_ring_truncate(struct scsc_ring_buffer *rb)$/;"      f
-scsc_service   scsc_service.c  /^struct scsc_service {$/;"     s       file:
-scsc_service_force_panic       scsc_service.c  /^EXPORT_SYMBOL(scsc_service_force_panic);$/;"  v
-scsc_service_force_panic       scsc_service.c  /^int scsc_service_force_panic(struct scsc_service *service)$/;"        f
-scsc_service_free_mboxes       scsc_service.c  /^EXPORT_SYMBOL(scsc_service_free_mboxes);$/;"  v
-scsc_service_free_mboxes       scsc_service.c  /^void scsc_service_free_mboxes(struct scsc_service *service, int n, int first_mbox_index)$/;"  f
-scsc_service_get_device        scsc_service.c  /^EXPORT_SYMBOL(scsc_service_get_device);$/;"   v
-scsc_service_get_device        scsc_service.c  /^struct device *scsc_service_get_device(struct scsc_service *service)$/;"      f
-scsc_service_mifintrbit_alloc_fromhost scsc_service.c  /^EXPORT_SYMBOL(scsc_service_mifintrbit_alloc_fromhost);$/;"    v
-scsc_service_mifintrbit_alloc_fromhost scsc_service.c  /^int scsc_service_mifintrbit_alloc_fromhost(struct scsc_service *service, enum scsc_mifintr_target dir)$/;"    f
-scsc_service_mifintrbit_bit_clear      scsc_service.c  /^EXPORT_SYMBOL(scsc_service_mifintrbit_bit_clear);$/;" v
-scsc_service_mifintrbit_bit_clear      scsc_service.c  /^void scsc_service_mifintrbit_bit_clear(struct scsc_service *service, int which_bit)$/;"       f
-scsc_service_mifintrbit_bit_mask       scsc_service.c  /^EXPORT_SYMBOL(scsc_service_mifintrbit_bit_mask);$/;"  v
-scsc_service_mifintrbit_bit_mask       scsc_service.c  /^void scsc_service_mifintrbit_bit_mask(struct scsc_service *service, int which_bit)$/;"        f
-scsc_service_mifintrbit_bit_mask_status_get    scsc_service.c  /^EXPORT_SYMBOL(scsc_service_mifintrbit_bit_mask_status_get);$/;"       v
-scsc_service_mifintrbit_bit_mask_status_get    scsc_service.c  /^int scsc_service_mifintrbit_bit_mask_status_get(struct scsc_service *service)$/;"     f
-scsc_service_mifintrbit_bit_set        scsc_service.c  /^EXPORT_SYMBOL(scsc_service_mifintrbit_bit_set);$/;"   v
-scsc_service_mifintrbit_bit_set        scsc_service.c  /^void scsc_service_mifintrbit_bit_set(struct scsc_service *service, int which_bit, enum scsc_mifintr_target dir)$/;"   f
-scsc_service_mifintrbit_bit_unmask     scsc_service.c  /^EXPORT_SYMBOL(scsc_service_mifintrbit_bit_unmask);$/;"        v
-scsc_service_mifintrbit_bit_unmask     scsc_service.c  /^void scsc_service_mifintrbit_bit_unmask(struct scsc_service *service, int which_bit)$/;"      f
-scsc_service_mifintrbit_free_fromhost  scsc_service.c  /^EXPORT_SYMBOL(scsc_service_mifintrbit_free_fromhost);$/;"     v
-scsc_service_mifintrbit_free_fromhost  scsc_service.c  /^int scsc_service_mifintrbit_free_fromhost(struct scsc_service *service, int which_bit, enum scsc_mifintr_target dir)$/;"      f
-scsc_service_mifintrbit_get    scsc_service.c  /^EXPORT_SYMBOL(scsc_service_mifintrbit_get);$/;"       v
-scsc_service_mifintrbit_get    scsc_service.c  /^int scsc_service_mifintrbit_get(struct scsc_service *service)$/;"     f
-scsc_service_mifintrbit_register_tohost        scsc_service.c  /^EXPORT_SYMBOL(scsc_service_mifintrbit_register_tohost);$/;"   v
-scsc_service_mifintrbit_register_tohost        scsc_service.c  /^int scsc_service_mifintrbit_register_tohost(struct scsc_service *service, void (*handler)(int irq, void *data), void *data)$/;"       f
-scsc_service_mifintrbit_unregister_tohost      scsc_service.c  /^EXPORT_SYMBOL(scsc_service_mifintrbit_unregister_tohost);$/;" v
-scsc_service_mifintrbit_unregister_tohost      scsc_service.c  /^int scsc_service_mifintrbit_unregister_tohost(struct scsc_service *service, int which_bit)$/;"        f
-scsc_wifibt    platform_mif_module.c   /^static const struct of_device_id scsc_wifibt[] = {$/;"        v       typeref:struct:of_device_id     file:
-secondary_service      client_test.c   /^      struct scsc_service        *secondary_service;$/;"      m       struct:scsc_mx_test     typeref:struct:scsc_mx_test::scsc_service       file:
-self_test      mx_dbg_sampler.c        /^static bool self_test;$/;"    v       file:
-send_mm_msg_stop_blocking      mxman.c /^static int send_mm_msg_stop_blocking(struct mxman *mxman)$/;" f       file:
-send_sm_msg_start_blocking     scsc_service.c  /^static int send_sm_msg_start_blocking(struct scsc_service *service, scsc_mifram_ref ref)$/;"  f       file:
-send_sm_msg_stop_blocking      scsc_service.c  /^static int send_sm_msg_stop_blocking(struct scsc_service *service)$/;"        f       file:
-service        mx_dbg_sampler.c        /^      struct scsc_service         *service;$/;"       m       struct:mx_dbg_sampler_dev       typeref:struct:mx_dbg_sampler_dev::scsc_service file:
-service_id     client_test.c   /^static int                 service_id = SCSC_SERVICE_ID_NULL;$/;"     v       file:
-service_id     servman_messages.h      /^      uint8_t         service_id;$/;" m       struct:sm_msg_packet
-service_id_2   client_test.c   /^static int service_id_2 = -1;$/;"     v       file:
-service_list   srvman.h        /^      struct list_head service_list;$/;"      m       struct:srvman   typeref:struct:srvman::list_head
-service_list_mutex     srvman.h        /^      struct mutex     service_list_mutex;$/;"        m       struct:srvman   typeref:struct:srvman::mutex
-sharedmem_base platform_mif.c  /^static unsigned long sharedmem_base;$/;"      v       file:
-sharedmem_size platform_mif.c  /^static size_t sharedmem_size;$/;"     v       file:
-size_pool      miframman.h     /^      size_t       size_pool;$/;"     m       struct:miframman
-skip_header    mxman.c /^static bool skip_header;$/;"  v       file:
-skip_mbox0_check       mxman.c /^static bool skip_mbox0_check;$/;"     v       file:
-sm_completion_timeout_ms       scsc_service.c  /^static ulong sm_completion_timeout_ms = 1000;$/;"     v       file:
-sm_msg servman_messages.h      /^} sm_msg;$/;" v       typeref:enum:__anon7
-sm_msg_packet  servman_messages.h      /^struct sm_msg_packet {$/;"    s
-sm_msg_start_completion        scsc_service.c  /^      struct completion          sm_msg_start_completion;$/;" m       struct:scsc_service     typeref:struct:scsc_service::completion file:
-sm_msg_stop_completion scsc_service.c  /^      struct completion          sm_msg_stop_completion;$/;"  m       struct:scsc_service     typeref:struct:scsc_service::completion file:
-sm_wake_lock   srvman.h        /^      struct wake_lock sm_wake_lock;$/;"      m       struct:srvman   typeref:struct:srvman::wake_lock
-source_addr    mx_dbg_sampler.c        /^static unsigned int source_addr = 0xd0300028;$/;"     v       file:
-source_addr    mx_dbg_sampler.h        /^      uint32_t source_addr;$/;"       m       struct:debug_sampler_sample_spec
-spare  scsc_logring_ring.h     /^      char              *spare;$/;"   m       struct:scsc_ring_buffer
-spinlock       mifintrbit.h    /^      spinlock_t          spinlock;$/;"       m       struct:mifintrbit
-spinlock       mx_dbg_sampler.c        /^      spinlock_t                  spinlock;$/;"       m       struct:mx_dbg_sampler_dev       file:
-srv_message_handler    scsc_service.c  /^static void srv_message_handler(const void *message, void *data)$/;"  f       file:
-srvman scsc_mx_impl.c  /^      struct srvman           srvman;$/;"     m       struct:scsc_mx  typeref:struct:scsc_mx::srvman  file:
-srvman srvman.h        /^struct srvman {$/;"   s
-srvman_clear_error     scsc_service.c  /^void srvman_clear_error(struct srvman *srvman)$/;"    f
-srvman_deinit  scsc_service.c  /^void srvman_deinit(struct srvman *srvman)$/;" f
-srvman_freeze_services scsc_service.c  /^void srvman_freeze_services(struct srvman *srvman)$/;"        f
-srvman_init    scsc_service.c  /^void srvman_init(struct srvman *srvman, struct scsc_mx *mx)$/;"       f
-srvman_resume_services scsc_service.c  /^int srvman_resume_services(struct srvman *srvman)$/;" f
-srvman_set_error       scsc_service.c  /^void srvman_set_error(struct srvman *srvman)$/;"      f
-srvman_suspend_services        scsc_service.c  /^int srvman_suspend_services(struct srvman *srvman)$/;"        f
-srvman_unfreeze_services       scsc_service.c  /^void srvman_unfreeze_services(struct srvman *srvman, u16 scsc_panic_code)$/;" f
-ssz    scsc_logring_ring.h     /^      size_t            ssz;$/;"      m       struct:scsc_ring_buffer
-start_dram     miframman.h     /^      void         *start_dram;$/;"   m       struct:miframman
-start_dram     mxman.h /^      void                    *start_dram;$/;"        m       struct:mxman
-started        client_test.c   /^      bool                       started;$/;" m       struct:scsc_mx_test     file:
-stat_fops      scsc_logring_debugfs.c  /^const struct file_operations stat_fops = {$/;"        v       typeref:struct:file_operations
-statfile       scsc_logring_debugfs.h  /^      struct dentry *statfile;$/;"    m       struct:scsc_debugfs_info        typeref:struct:scsc_debugfs_info::dentry
-statfile_open  scsc_logring_debugfs.c  /^static int statfile_open(struct inode *ino, struct file *filp)$/;"    f       file:
-statfile_read  scsc_logring_debugfs.c  /^static ssize_t statfile_read(struct file *filp, char __user *ubuf,$/;"        f       file:
-statfile_release       scsc_logring_debugfs.c  /^static int statfile_release(struct inode *ino, struct file *filp)$/;" f       file:
-status scsc_app_msg.h  /^      __u16 status;$/;"       m       struct:scsc_app_msg_resp
-stop_close_services    client_test.c   /^static void stop_close_services(void)$/;"     f       file:
-stream_conf    mxconf.h        /^      struct mxstreamconf stream_conf;$/;"    m       struct:mxlogconf        typeref:struct:mxlogconf::mxstreamconf
-suffix mx140_file.c    /^      char suffix[4];$/;"     m       struct:fw_suffix        file:
-suspend_count  mxman.h /^      atomic_t                suspend_count;$/;"      m       struct:mxman
-suspend_handler        platform_mif.c  /^      int (*suspend_handler)(struct scsc_mif_abs *abs, void *data);$/;"       m       struct:platform_mif     file:
-suspend_reg_handler    scsc_mif_abs.h  /^      void      (*suspend_reg_handler)(struct scsc_mif_abs *abs,$/;"  m       struct:scsc_mif_abs
-suspend_unreg_handler  scsc_mif_abs.h  /^      void      (*suspend_unreg_handler)(struct scsc_mif_abs *abs);$/;"       m       struct:scsc_mif_abs
-suspended      mxman.h /^      int                     suspended;$/;"  m       struct:mxman
-suspendmon     scsc_mx_impl.c  /^      struct suspendmon       suspendmon;$/;" m       struct:scsc_mx  typeref:struct:scsc_mx::suspendmon      file:
-suspendmon     suspendmon.h    /^struct suspendmon {$/;"       s
-suspendmon_deinit      suspendmon.c    /^void suspendmon_deinit(struct suspendmon *suspendmon)$/;"     f
-suspendmon_init        suspendmon.c    /^void suspendmon_init(struct suspendmon *suspendmon, struct scsc_mx *mx)$/;"   f
-suspendmon_resume      suspendmon.c    /^static void suspendmon_resume(struct scsc_mif_abs *mif, void *data)$/;"       f       file:
-suspendmon_suspend     suspendmon.c    /^static int suspendmon_suspend(struct scsc_mif_abs *mif, void *data)$/;"       f       file:
-suspendresume_data     platform_mif.c  /^      void *suspendresume_data;$/;"   m       struct:platform_mif     file:
-sync   scsc_logring_ring.h     /^      u32 sync;$/;"   m       struct:scsc_ring_record
-t_off  scsc_logring_debugfs.h  /^      size_t                  t_off;$/;"      m       struct:scsc_ibox
-t_used scsc_logring_debugfs.h  /^      size_t                 t_used;$/;"      m       struct:scsc_ibox
-tag    scsc_logring_ring.h     /^      u8 tag;$/;"     m       struct:scsc_ring_record
-tag_reader_binary      scsc_logring_ring.c     /^size_t tag_reader_binary(char *tbuf, struct scsc_ring_buffer *rb,$/;" f       file:
-tag_reader_string      scsc_logring_ring.c     /^size_t tag_reader_string(char *tbuf, struct scsc_ring_buffer *rb,$/;" f       file:
-tag_writer_binary      scsc_logring_ring.c     /^int tag_writer_binary(char *spare, int tag, int lev, size_t hexlen)$/;"       f       file:
-tag_writer_string      scsc_logring_ring.c     /^int tag_writer_string(char *spare, int tag, int lev,$/;"      f       file:
-tagstr scsc_logring_ring.c     /^const char *tagstr[] = {$/;"  v
-tail   scsc_logring_ring.h     /^      loff_t            tail;$/;"     m       struct:scsc_ring_buffer
-task   mxlog_transport.h       /^      struct task_struct *task;$/;"   m       struct:mxlog_thread     typeref:struct:mxlog_thread::task_struct
-task   mxmgmt_transport.h      /^      struct task_struct *task;$/;"   m       struct:mxmgmt_thread    typeref:struct:mxmgmt_thread::task_struct
-tbuf   scsc_logring_debugfs.h  /^      char                    *tbuf;$/;"      m       struct:scsc_ibox
-tbuf_vm        scsc_logring_debugfs.h  /^      bool                  tbuf_vm;$/;"      m       struct:scsc_ibox
-test   client_test.c   /^static struct scsc_mx_test *test;$/;" v       typeref:struct:scsc_mx_test     file:
-test_failure_reset     client_test.c   /^static void test_failure_reset(struct scsc_service_client *client, u16 scsc_panic_code)$/;"   f       file:
-test_service_client    client_test.c   /^      struct scsc_service_client test_service_client;$/;"     m       struct:scsc_mx_test     typeref:struct:scsc_mx_test::scsc_service_client        file:
-test_stop_on_failure   client_test.c   /^static void test_stop_on_failure(struct scsc_service_client *client)$/;"      f       file:
-the_ringbuf    scsc_logring_main.c     /^struct scsc_ring_buffer *the_ringbuf;$/;"     v       typeref:struct:scsc_ring_buffer
-thread_wait_until_stopped      mxlog_transport.c       /^static void thread_wait_until_stopped(struct mxlog_transport *mxlog_transport)$/;"    f       file:
-thread_wait_until_stopped      mxmgmt_transport.c      /^static void thread_wait_until_stopped(struct mxmgmt_transport *mxmgmt_transport)$/;"  f       file:
-timestamp      mxlog.h /^      u32 timestamp;$/;"      m       struct:mxlog_event_log_msg
-to_ap_stream_conf      mxconf.h        /^      struct mxstreamconf to_ap_stream_conf;$/;"      m       struct:mxtransconf      typeref:struct:mxtransconf::mxstreamconf
-transports_init        mxman.c /^static int transports_init(struct mxman *mxman)$/;"   f       file:
-transports_release     mxman.c /^static void transports_release(struct mxman *mxman)$/;"       f       file:
-tsz    scsc_logring_debugfs.h  /^      size_t                    tsz;$/;"      m       struct:scsc_ibox
-turn   mif_reg.h       /^      u32 turn;$/;"   m       struct:peterson_mutex
-type   gdb_transport.h /^      enum gdb_transport_enum type;$/;"       m       struct:gdb_transport    typeref:enum:gdb_transport::gdb_transport_enum
-type   scsc_app_msg.h  /^      __u16 type;$/;" m       struct:scsc_app_msg_req
-type   scsc_app_msg.h  /^      __u16 type;$/;" m       struct:scsc_app_msg_resp
-unmap  scsc_mif_abs.h  /^      void (*unmap)(struct scsc_mif_abs *interface, void *mem);$/;"   m       struct:scsc_mif_abs
-usbpll_delay   platform_mif.c  /^      u32           usbpll_delay;$/;" m       struct:platform_mif     file:
-use_new_fw_structure   mx140_file.c    /^static bool use_new_fw_structure = true;$/;"  v       file:
-users  mxman.h /^      int                     users;$/;"      m       struct:mxman
-users  scsc_mx_impl.c  /^      int                     users;$/;"      m       struct:scsc_mx  file:
-version        mx_dbg_sampler.h        /^      uint32_t                         version;$/;"   m       struct:debug_sampler_config
-version        mxconf.h        /^      struct mxconfversion version;$/;"       m       struct:mxconf   typeref:struct:mxconf::mxconfversion
-wait_for_mm_msg_start_ind      mxman.c /^static int wait_for_mm_msg_start_ind(struct mxman *mxman)$/;" f       file:
-wait_for_sm_msg_start_cfm      scsc_service.c  /^static int wait_for_sm_msg_start_cfm(struct scsc_service *service)$/;"        f       file:
-wait_for_sm_msg_stop_cfm       scsc_service.c  /^static int wait_for_sm_msg_stop_cfm(struct scsc_service *service)$/;" f       file:
-wakeup_flag    mxlog_transport.h       /^      unsigned int       wakeup_flag;$/;"     m       struct:mxlog_thread
-wakeup_flag    mxmgmt_transport.h      /^      unsigned int       wakeup_flag;$/;"     m       struct:mxmgmt_thread
-wakeup_q       mxlog_transport.h       /^      wait_queue_head_t  wakeup_q;$/;"        m       struct:mxlog_thread
-wakeup_q       mxmgmt_transport.h      /^      wait_queue_head_t  wakeup_q;$/;"        m       struct:mxmgmt_thread
-wlbt_irq       platform_mif.c  /^      } wlbt_irq[3];$/;"      m       struct:platform_mif     typeref:struct:platform_mif::__anon4    file:
-wq     scsc_logring_ring.h     /^      wait_queue_head_t wq;$/;"       m       struct:scsc_ring_buffer
-wraps  scsc_logring_ring.h     /^      int               wraps;$/;"    m       struct:scsc_ring_buffer
-write_bit_idx  mifstream.h     /^      uint8_t              write_bit_idx;$/;" m       struct:mif_stream
-write_bit_idx  mxconf.h        /^      uint8_t           write_bit_idx;$/;"    m       struct:mxstreamconf
-write_config   scsc_logring_debugfs.h  /^struct write_config {$/;"     s
-write_index    cpacket_buffer.h        /^      uint32_t       *write_index; \/* Pointer to the location of the write index, which$/;"  m       struct:cpacketbuffer
-write_index_loc        mxconf.h        /^      scsc_mifram_ref write_index_loc; \/**< Location of 32bit write index *\/$/;"    m       struct:mxcbufconf
-write_index_offset     mx_dbg_sampler.h        /^      uint32_t write_index_offset;$/;"        m       struct:debug_sampler_buffer_info
-write_mcd_test_fw_version_file mxman.c /^static void write_mcd_test_fw_version_file(struct mxman *mxman)$/;"   f       file:
-written        scsc_logring_ring.h     /^      u64               written;$/;"  m       struct:scsc_ring_buffer
-xor32  fw_panic_record.c       /^static u32 xor32(uint32_t seed, const u32 data[], size_t len)$/;"     f       file:
index 0de645d2b4e0f37e9b47b43a5b3bf8e836659d06..a3af5c63dfebd83486f1f00dfcd6953e43ba796f 100755 (executable)
 #include "scsc_bt_priv.h"
 #include "../scsc/scsc_mx_impl.h"
 
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+#include <scsc/scsc_log_collector.h>
+#endif
+
 #define SCSC_MODDESC "SCSC MX BT Driver"
 #define SCSC_MODAUTH "Samsung Electronics Co., Ltd"
 #define SCSC_MODVERSION "-devel"
@@ -276,6 +280,31 @@ static void slsi_bt_audio_remove(void)
        bt_audio.dev_iommu_unmap(audio_device, size);
 }
 
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+static int bt_hcf_collect(struct scsc_log_collector_client *collect_client, size_t size)
+{
+       struct scsc_bt_hcf_collection *hcf_collect = (struct scsc_bt_hcf_collection *) collect_client->prv;
+       int ret = 0;
+
+       if (hcf_collect == NULL)
+               return ret;
+
+       SCSC_TAG_DEBUG(BT_COMMON, "Collecting BT config file\n");
+       ret = scsc_log_collector_write(hcf_collect->hcf, hcf_collect->hcf_size, 1);
+
+       return ret;
+}
+
+struct scsc_log_collector_client bt_collect_hcf_client = {
+       .name = "bt_hcf",
+       .type = SCSC_LOG_CHUNK_BT_HCF,
+       .collect_init = NULL,
+       .collect = bt_hcf_collect,
+       .collect_end = NULL,
+       .prv = NULL,
+};
+#endif
+
 static int slsi_sm_bt_service_cleanup(bool allow_service_stop)
 {
        SCSC_TAG_DEBUG(BT_COMMON, "enter (service=%p)\n", bt_service.service);
@@ -321,6 +350,18 @@ static int slsi_sm_bt_service_cleanup(bool allow_service_stop)
                }
                mutex_unlock(&bt_audio_mutex);
 
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+               /* Deinit HCF log collection */
+               scsc_log_collector_unregister_client(&bt_collect_hcf_client);
+               bt_collect_hcf_client.prv = NULL;
+
+               if (bt_service.hcf_collection.hcf) {
+                       /* Reset HCF pointer - memory will be freed later */
+                       bt_service.hcf_collection.hcf_size = 0;
+                       bt_service.hcf_collection.hcf = NULL;
+               }
+#endif
+
                /* Release the shared memory */
                SCSC_TAG_DEBUG(BT_COMMON,
                        "free memory allocated in the 4MB DRAM pool\n");
@@ -539,7 +580,7 @@ static int setup_bhcs(struct scsc_service *service,
        SCSC_TAG_DEBUG(BT_COMMON,
                "loading configuration: " SCSC_BT_CONF "\n");
        err = mx140_file_request_conf(common_service.maxwell_core,
-                                     &firm, SCSC_BT_CONF);
+                                     &firm, "bluetooth", SCSC_BT_CONF);
        if (err) {
                /* Not found - just silently ignore this */
                SCSC_TAG_DEBUG(BT_COMMON, "configuration not found\n");
@@ -820,6 +861,20 @@ int slsi_sm_bt_service_start(void)
                         &bt_service.config_ref,
                         &bt_service.bhcs_ref);
 
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+       /* Save the binary BT config ref and register for
+        * log collector to collect the hcf file
+        */
+       if (bhcs->configuration_length > 0) {
+               bt_service.hcf_collection.hcf =
+                               scsc_mx_service_mif_addr_to_ptr(bt_service.service,
+                                                               bt_service.config_ref);
+               bt_service.hcf_collection.hcf_size = bhcs->configuration_length;
+               bt_collect_hcf_client.prv = &bt_service.hcf_collection;
+               scsc_log_collector_register_client(&bt_collect_hcf_client);
+       }
+#endif
+
        if (err == -EINVAL)
                goto exit;
 
@@ -1411,14 +1466,9 @@ static void slsi_bt_service_remove(struct scsc_mx_module_client *module_client,
        slsi_bt_notify_remove();
 
        if (reason == SCSC_MODULE_CLIENT_REASON_RECOVERY && bt_recovery_in_progress) {
-               int ret;
-
                mutex_unlock(&bt_start_mutex);
-               ret = wait_for_completion_timeout(&bt_service.recovery_release_complete,
-                      msecs_to_jiffies(SLSI_BT_SERVICE_STOP_RECOVERY_TIMEOUT));
+               wait_for_completion(&bt_service.recovery_release_complete);
                reinit_completion(&bt_service.recovery_release_complete);
-               if (ret == 0)
-                       SCSC_TAG_INFO(BT_COMMON, "recovery_release_complete timeout\n");
 
                mutex_lock(&bt_start_mutex);
                if (slsi_sm_bt_service_stop() == -EIO)
index 92a651da91be8536fa9617fc8d043fc68088e7f8..8db8f92d6499f67737e23c1aadc7b32785731c33 100755 (executable)
@@ -48,7 +48,7 @@
 #define HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS_EVENT     (0x13)
 #define HCI_EVENT_HARDWARE_ERROR_EVENT                  (0x10)
 
-#define SCSC_BT_CONF      "bluetooth/bt.hcf"
+#define SCSC_BT_CONF      "bt.hcf"
 #ifdef CONFIG_SCSC_BT_BLUEZ
 #define SCSC_BT_ADDR      "/csa/bluetooth/.bd_addr"
 #define SCSC_BT_ADDR_LEN  (3)
@@ -184,6 +184,13 @@ struct scsc_common_service {
 
 extern struct scsc_common_service common_service;
 
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+struct scsc_bt_hcf_collection {
+       void                       *hcf;
+       u32                        hcf_size;
+};
+#endif
+
 struct scsc_bt_service {
        dev_t                          device;
        struct scsc_service            *service;
@@ -245,6 +252,10 @@ struct scsc_bt_service {
        struct scsc_bt_avdtp_detect    avdtp_detect;
        struct completion              recovery_release_complete;
        struct completion              recovery_probe_complete;
+
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+       struct scsc_bt_hcf_collection  hcf_collection;
+#endif
 };
 
 extern struct scsc_bt_service bt_service;
index 42f15d95262927f8458de7202b93cb0d5a0d3290..6a43a4b215c95dccefb282b6e5c700ad5c44773e 100755 (executable)
@@ -778,7 +778,7 @@ static ssize_t scsc_bt_shm_h4_read_continue(char __user *buf, size_t len)
                        /* All done - increase the read pointer and continue */
                        BSMHCP_INCREASE_INDEX(bt_service.mailbox_iq_report_read, BSMHCP_TRANSFER_RING_IQ_REPORT_SIZE);
        } else if (BT_READ_OP_HCI_EVT_ERROR == bt_service.read_operation) {
-               SCSC_TAG_DEBUG(BT_H4, "BT_READ_OP_HCI_EVT_ERROR\n");
+               SCSC_TAG_ERR(BT_H4, "BT_READ_OP_HCI_EVT_ERROR\n");
 
                /* Copy data into the userspace buffer */
                ret = scsc_hci_evt_error_read(buf, len);
index dfeb8ca567350509ca995818f23c6d9eb19489b4..97db0870990aa820738669cf48f9551e533ede0d 100755 (executable)
@@ -12,6 +12,7 @@ config SCSC_WLAN_KEY_MGMT_OFFLOAD
 
 config SCSC_WLAN_HIP4_PROFILING
        bool "Enable HIP4 profiling"
+        default y
        depends on SCSC_WLAN
        ---help---
          This option enables HIP4 profiling
index 1f7a5b8ede7f48ebba717473e00636172db6f13b..a550c1881b3b8f84817bf4551c2dccb3f871bf92 100755 (executable)
@@ -755,9 +755,10 @@ int slsi_connect(struct wiphy *wiphy, struct net_device *dev,
 
        if (ndev_vif->sta.sta_bss)
                SLSI_ETHER_COPY(peer_address, ndev_vif->sta.sta_bss->bssid);
-       SLSI_NET_DBG2(dev, SLSI_CFG80211, "%.*s, %pM ,center frequency = %d, ndev_vif->sta.vif_status = %d,"
-                     "Current bssid: %d, New bssid: %d\n", (int)sme->ssid_len, sme->ssid, sme->bssid,
-                     sme->channel->center_freq, ndev_vif->sta.vif_status, peer_address, sme->bssid);
+       SLSI_NET_DBG2(dev, SLSI_CFG80211,
+                     "%.*s CentFreq=%d vifStatus=%d CurrBssid:%pM NewBssid:%pM QOSinfo:%d\n",
+                     (int)sme->ssid_len, sme->ssid, sme->channel->center_freq, ndev_vif->sta.vif_status,
+                     peer_address, sme->bssid, sdev->device_config.qos_info);
 
        SCSC_WLOG_PKTFATE_NEW_ASSOC();
        SCSC_WLOG_DRIVER_EVENT(WLOG_NORMAL, WIFI_EVENT_ASSOCIATION_REQUESTED, 3,
@@ -952,11 +953,6 @@ int slsi_connect(struct wiphy *wiphy, struct net_device *dev,
        r = slsi_set_boost(sdev, dev);
        if (r != 0)
                SLSI_NET_ERR(dev, "Rssi Boost set failed: %d\n", r);
-       r = slsi_set_uapsd_qos_info(sdev, dev);
-       if (r != 0) {
-               SLSI_NET_ERR(dev, "qosInfo MIB write failed: %d\n", r);
-               goto exit_with_vif;
-       }
 
        /* add_info_elements with Probe Req IEs. Proceed even if confirm fails for add_info as it would
         * still work if the fw pre-join scan does not include the vendor IEs
@@ -1199,8 +1195,8 @@ int slsi_del_station(struct wiphy *wiphy, struct net_device *dev,
 
        SLSI_MUTEX_LOCK(ndev_vif->vif_mutex);
 
-       SLSI_NET_DBG1(dev, SLSI_CFG80211, "%pM, vif_type:%d, vif_index:%d\n", mac, ndev_vif->vif_type,
-                     ndev_vif->ifnum);
+       SLSI_NET_DBG1(dev, SLSI_CFG80211, "%pM, vifType:%d, vifIndex:%d vifActivated:%d ap.p2p_gc_keys_set = %d\n",
+                     mac, ndev_vif->vif_type, ndev_vif->ifnum, ndev_vif->activated, ndev_vif->ap.p2p_gc_keys_set);
 
        /* Function is called by cfg80211 before the VIF is added */
        if (!ndev_vif->activated)
@@ -1215,25 +1211,35 @@ int slsi_del_station(struct wiphy *wiphy, struct net_device *dev,
                goto exit;
        } else if (is_broadcast_ether_addr(mac)) {
                int  i = 0;
-               bool peer_connected = false;
 
                while (i < SLSI_PEER_INDEX_MAX) {
                        peer = ndev_vif->peer_sta_record[i];
                        if (peer && peer->valid) {
                                slsi_ps_port_control(sdev, dev, peer, SLSI_STA_CONN_STATE_DISCONNECTED);
-                               peer_connected = true;
                        }
                        ++i;
                }
-               if (peer_connected) {
-                       if (slsi_mlme_disconnect(sdev, dev, 0, WLAN_REASON_DEAUTH_LEAVING, true) != 0)
-                               SLSI_NET_ERR(dev, "Disconnection for peermac=00:00:00:00:00:00 returned with CFM failure\n");
-               }
 
                /* Note AP :: mlme_disconnect_request with broadcast mac address is
                 * not required. Other third party devices don't support this. Conclusively,
                 * BIP support is not present with AP
                 */
+
+               /* Free WPA and WMM IEs if present */
+               slsi_clear_cached_ies(&ndev_vif->ap.cache_wpa_ie, &ndev_vif->ap.wpa_ie_len);
+               slsi_clear_cached_ies(&ndev_vif->ap.cache_wmm_ie, &ndev_vif->ap.wmm_ie_len);
+
+               netif_carrier_off(dev);
+
+               /* All STA related packets and info should already have been flushed */
+               slsi_mlme_del_vif(sdev, dev);
+               slsi_vif_deactivated(sdev, dev);
+               ndev_vif->ipaddress = cpu_to_be32(0);
+
+               if (ndev_vif->ap.p2p_gc_keys_set) {
+                       slsi_wakeunlock(&sdev->wlan_wl);
+                       ndev_vif->ap.p2p_gc_keys_set = false;
+               }
        } else {
                peer = slsi_get_peer_from_mac(sdev, dev, mac);
                if (peer) {  /* To handle race condition when disconnect_req is sent before procedure_strted_ind and before mlme-connected_ind*/
@@ -1596,12 +1602,13 @@ int slsi_remain_on_channel(struct wiphy              *wiphy,
                        ndev_vif->unsync.ies_changed = false;
                }
                /* Channel Setting - Don't set if already on same channel */
-               if (ndev_vif->chan && (ndev_vif->chan->hw_value != chan->hw_value)) {
+               if (ndev_vif->driver_channel != chan->hw_value) {
                        if (slsi_mlme_set_channel(sdev, dev, chan, SLSI_FW_CHANNEL_DURATION_UNSPECIFIED, 0, 0) != 0) {
                                SLSI_NET_ERR(dev, "Channel setting failed\n");
                                goto exit_with_vif;
                        } else {
                                ndev_vif->chan = chan;
+                               ndev_vif->driver_channel = chan->hw_value;
                        }
                }
        } else {
@@ -1694,6 +1701,11 @@ int slsi_cancel_remain_on_channel(struct wiphy      *wiphy,
                                           ndev_vif->chan, ndev_vif->channel_type, GFP_KERNEL);
 #endif
 
+       if (!ndev_vif->drv_in_p2p_procedure) {
+               slsi_mlme_spare_signal_1(sdev, dev);
+               ndev_vif->driver_channel = 0;
+       }
+
        /* Queue work to delete unsync vif */
        slsi_p2p_queue_unsync_vif_del_work(ndev_vif, SLSI_P2P_UNSYNC_VIF_EXTRA_MSEC);
        SLSI_P2P_STATE_CHANGE(sdev, P2P_IDLE_VIF_ACTIVE);
@@ -1873,12 +1885,12 @@ int slsi_start_ap(struct wiphy *wiphy, struct net_device *dev,
        const u8             *ie;
 #ifdef CONFIG_SCSC_WLAN_WIFI_SHARING
        int wifi_sharing_channel_switched = 0;
+       struct netdev_vif *ndev_sta_vif;
+#endif
        u8 *ds_params_ie = NULL;
        struct ieee80211_mgmt  *mgmt;
        u16                    beacon_ie_head_len;
        u8 *ht_operation_ie = NULL;
-       struct netdev_vif *ndev_sta_vif;
-#endif
        struct ieee80211_channel  *channel = NULL;
        int indoor_channel = 0;
        int i;
@@ -1897,6 +1909,8 @@ int slsi_start_ap(struct wiphy *wiphy, struct net_device *dev,
        wlan_dev = slsi_get_netdev(sdev, SLSI_NET_INDEX_WLAN);
        if (wlan_dev)
                slsi_abort_hw_scan(sdev, wlan_dev);
+
+       SLSI_NET_DBG1(dev, SLSI_CFG80211, "AP frequency received: %d\n", settings->chandef.chan->center_freq);
 #ifdef CONFIG_SCSC_WLAN_WIFI_SHARING
        mgmt = (struct ieee80211_mgmt *)settings->beacon.head;
        beacon_ie_head_len = settings->beacon.head_len - ((u8 *)mgmt->u.beacon.variable - (u8 *)mgmt);
@@ -1968,15 +1982,6 @@ int slsi_start_ap(struct wiphy *wiphy, struct net_device *dev,
        if (r != 0)
                goto exit_with_vif_mutex;
 
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 9))
-       if (slsi_check_channelization(sdev, ndev_vif->chandef) != 0) {
-#else
-       if (slsi_check_channelization(sdev, ndev_vif->channel_type) != 0) {
-#endif
-               r = -EINVAL;
-               goto exit_with_vif_mutex;
-       }
-
        if (ndev_vif->iftype == NL80211_IFTYPE_P2P_GO) {
                slsi_p2p_group_start_remove_unsync_vif(sdev);
                SLSI_ETHER_COPY(device_address, sdev->netdev_addresses[SLSI_NET_INDEX_P2P]);
@@ -2055,6 +2060,15 @@ int slsi_start_ap(struct wiphy *wiphy, struct net_device *dev,
        }
 #endif
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 9))
+       if (slsi_check_channelization(sdev, ndev_vif->chandef) != 0) {
+#else
+       if (slsi_check_channelization(sdev, ndev_vif->channel_type) != 0) {
+#endif
+               r = -EINVAL;
+               goto exit_with_vif_mutex;
+       }
+
        if (ndev_vif->iftype == NL80211_IFTYPE_AP) {
                /* Legacy AP */
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 9))
@@ -2228,7 +2242,8 @@ if ((indoor_channel == 1)
 #endif
 
        if (r != 0) {
-               SLSI_NET_ERR(dev, "Start ap failed: resultcode = %d\n", r);
+               SLSI_NET_ERR(dev, "Start ap failed: resultcode = %d frequency = %d\n", r,
+                            settings->chandef.chan->center_freq);
                goto exit_with_vif;
        } else if (ndev_vif->iftype == NL80211_IFTYPE_P2P_GO) {
                SLSI_P2P_STATE_CHANGE(sdev, P2P_GROUP_FORMED_GO);
@@ -2272,42 +2287,7 @@ int slsi_change_beacon(struct wiphy *wiphy, struct net_device *dev,
 
 int slsi_stop_ap(struct wiphy *wiphy, struct net_device *dev)
 {
-       struct slsi_dev   *sdev = SDEV_FROM_WIPHY(wiphy);
-       struct netdev_vif *ndev_vif = netdev_priv(dev);
-
-       SLSI_MUTEX_LOCK(ndev_vif->vif_mutex);
-
-       SLSI_NET_DBG1(dev, SLSI_CFG80211, "vif_type = %d, vif_index = %d, ndev_vif->activated = %d,"
-                     "ndev_vif->ap.p2p_gc_keys_set = %d\n", ndev_vif->vif_type, ndev_vif->ifnum, ndev_vif->activated,
-                     ndev_vif->ap.p2p_gc_keys_set);
-
-       if (!ndev_vif->activated) {
-               SLSI_NET_DBG1(dev, SLSI_CFG80211, "NetDev VIF not activated\n");
-               goto exit;
-       }
-
-       if (FAPI_VIFTYPE_AP != ndev_vif->vif_type) {
-               SLSI_NET_DBG1(dev, SLSI_CFG80211, "Invalid Device Type: %d\n", ndev_vif->iftype);
-               goto exit;
-       }
-
-       /* Free WPA and WMM IEs if present */
-       slsi_clear_cached_ies(&ndev_vif->ap.cache_wpa_ie, &ndev_vif->ap.wpa_ie_len);
-       slsi_clear_cached_ies(&ndev_vif->ap.cache_wmm_ie, &ndev_vif->ap.wmm_ie_len);
-
-       netif_carrier_off(dev);
-
-       /* All STA related packets and info should already have been flushed */
-       slsi_mlme_del_vif(sdev, dev);
-       slsi_vif_deactivated(sdev, dev);
-       ndev_vif->ipaddress = cpu_to_be32(0);
-
-       if (ndev_vif->ap.p2p_gc_keys_set) {
-               slsi_wakeunlock(&sdev->wlan_wl);
-               ndev_vif->ap.p2p_gc_keys_set = false;
-       }
-exit:
-       SLSI_MUTEX_UNLOCK(ndev_vif->vif_mutex);
+       /* AP stop stuff is done in del_station callback*/
        return 0;
 }
 
@@ -2392,17 +2372,18 @@ static int slsi_p2p_mgmt_tx(const struct ieee80211_mgmt *mgmt, struct wiphy *wip
                        if (slsi_p2p_vif_activate(sdev, dev, chan, wait, false) != 0)
                                goto exit_with_error;
 
-               /* Vif might be present but frame tx could be requested on a different channel */
-               if (ndev_vif->chan && (ndev_vif->chan->hw_value != chan->hw_value)) {
                        /* Clear Probe Response IEs if vif was already present with a different channel */
+               if (ndev_vif->driver_channel != chan->hw_value) {
                        if (slsi_mlme_add_info_elements(sdev, dev, FAPI_PURPOSE_PROBE_RESPONSE, NULL, 0) != 0)
                                SLSI_NET_ERR(dev, "Clearing Probe Response IEs failed for unsync vif\n");
                        slsi_unsync_vif_set_probe_rsp_ie(ndev_vif, NULL, 0);
 
                        if (slsi_mlme_set_channel(sdev, dev, chan, SLSI_FW_CHANNEL_DURATION_UNSPECIFIED, 0, 0) != 0)
                                goto exit_with_vif;
-                       else
+                       else {
                                ndev_vif->chan = chan;
+                               ndev_vif->driver_channel = chan->hw_value;
+                       }
                }
 
                /* Check if peer frame response is expected */
@@ -2420,7 +2401,10 @@ static int slsi_p2p_mgmt_tx(const struct ieee80211_mgmt *mgmt, struct wiphy *wip
                                        (void)slsi_set_mgmt_tx_data(ndev_vif, 0, 0, NULL, 0);
 
                                /* Change Force Schedule Duration as peer response is expected */
-                               dwell_time = SLSI_FORCE_SCHD_ACT_FRAME_MSEC;
+                               if (wait)
+                                       dwell_time = wait;
+                               else
+                                       dwell_time = SLSI_FORCE_SCHD_ACT_FRAME_MSEC;
                        }
                }
 
@@ -2429,7 +2413,10 @@ static int slsi_p2p_mgmt_tx(const struct ieee80211_mgmt *mgmt, struct wiphy *wip
                /* Send the action frame, transmission status indication would be received later */
                if (slsi_mlme_send_frame_mgmt(sdev, dev, buf, len, FAPI_DATAUNITDESCRIPTOR_IEEE802_11_FRAME, FAPI_MESSAGETYPE_IEEE80211_ACTION, host_tag, 0, dwell_time * 1000, 0) != 0)
                        goto exit_with_vif;
-
+               if (subtype == SLSI_P2P_PA_GO_NEG_CFM)
+                       ndev_vif->drv_in_p2p_procedure = false;
+               else if ((subtype == SLSI_P2P_PA_GO_NEG_REQ) || (subtype == SLSI_P2P_PA_PROV_DISC_REQ))
+                       ndev_vif->drv_in_p2p_procedure = true;
                /* If multiple frames are requested for tx, only the info of first frame would be stored */
                if (ndev_vif->mgmt_tx_data.host_tag == 0) {
                        unsigned int n_wait = 0;
@@ -2589,10 +2576,13 @@ static int slsi_hs2_mgmt_tx(struct slsi_dev *sdev, struct net_device *dev,
                if (ndev_vif->vif_type == FAPI_VIFTYPE_UNSYNCHRONISED) {
                        cancel_delayed_work(&ndev_vif->unsync.hs2_del_vif_work);
                        /*even if we fail to cancel the delayed work, we shall go ahead and send action frames*/
-                       if (ndev_vif->chan->hw_value != chan->hw_value) {
+                       if (ndev_vif->driver_channel != chan->hw_value) {
                                r = slsi_mlme_set_channel(sdev, dev, chan, SLSI_FW_CHANNEL_DURATION_UNSPECIFIED, 0, 0);
                                if (r)
                                        goto exit_with_vif;
+                               else {
+                                       ndev_vif->driver_channel = chan->hw_value;
+                               }
                        }
                        SLSI_NET_DBG1(dev, SLSI_CFG80211, "HS2 vif is active ,send GAS (ANQP) request on channel freq = %d\n", chan->center_freq);
                        r = slsi_mlme_send_frame_mgmt(sdev, dev, buf, len, FAPI_DATAUNITDESCRIPTOR_IEEE802_11_FRAME, FAPI_MESSAGETYPE_IEEE80211_ACTION, host_tag, 0, wait * 1000, 0);
index 8bfe8f89d176332fa9c8ef1fa34c8c9ee05acb3b..24257c16aac87bb9277fea1538f71136ab0b5979 100755 (executable)
@@ -650,6 +650,8 @@ struct netdev_vif {
        enum nl80211_iftype         iftype;
        enum nl80211_channel_type   channel_type;
        struct ieee80211_channel    *chan;
+       u16 driver_channel;
+       bool drv_in_p2p_procedure;
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 9))
        struct cfg80211_chan_def    *chandef;
 #endif
@@ -884,6 +886,24 @@ struct slsi_dev_mib_info {
 
 #define SLSI_WLAN_MAX_MIB_FILE     2 /* Number of WLAN HCFs to load */
 
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+struct slsi_dev_mib_collect_file {
+       char            file_name[32];
+       u16             len;
+       u8              *data;
+} __packed;
+
+struct slsi_dev_mib_collect {
+       bool            enabled;
+       /* Serialize writers/readers */
+       spinlock_t      in_collection;
+       char                    num_files;
+       /* +1 represents local_mib */
+       struct slsi_dev_mib_collect_file  file[SLSI_WLAN_MAX_MIB_FILE + 1];
+};
+
+#endif
+
 struct slsi_dev {
        /* Devices */
        struct device              *dev;
@@ -934,7 +954,9 @@ struct slsi_dev {
        u8                         hw_addr[ETH_ALEN];
        struct slsi_dev_mib_info   mib[SLSI_WLAN_MAX_MIB_FILE];
        struct slsi_dev_mib_info   local_mib;
-
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+       struct slsi_dev_mib_collect  collect_mib;
+#endif
        char                       *maddr_file_name;
        bool                       *term_udi_users;   /* Try to terminate UDI users during unload */
        int                        *sig_wait_cfm_timeout;
index 8ff2a46ba03499bb85268dbdcdd0f7d7907dd304..e59ac59e812ca4fb287724cefe4f7edd71c15c71 100755 (executable)
@@ -13,9 +13,6 @@
 #include <linux/ktime.h>
 #include <linux/kthread.h>
 #include <scsc/scsc_logring.h>
-#ifdef CONFIG_SCSC_LOG_COLLECTION
-#include <scsc/scsc_log_collector.h>
-#endif
 
 #include "hip4.h"
 #include "mbulk.h"
@@ -443,41 +440,6 @@ static const struct file_operations hip4_procfs_jitter_fops = {
 };
 #endif
 
-#ifdef CONFIG_SCSC_LOG_COLLECTION
-static int hip4_collect(struct scsc_log_collector_client *collect_client, size_t size)
-{
-       struct slsi_hip4 *hip = (struct slsi_hip4 *)collect_client->prv;
-       struct hip4_priv *hip_priv;
-       int ret = 0;
-
-       if (!hip)
-               return 0;
-
-       hip_priv = hip->hip_priv;
-       if (!hip_priv)
-               return 0;
-
-       if (!hip_priv->mib_collect || !hip_priv->mib_sz)
-               return 0;
-
-       SLSI_INFO_NODEV("Hip4 collecting HCF\n");
-       mutex_lock(&hip_priv->in_collection);
-       ret = scsc_log_collector_write(hip_priv->mib_collect, hip_priv->mib_sz, 1);
-       mutex_unlock(&hip_priv->in_collection);
-       return ret;
-}
-
-/* Collect client registration for HCF file*/
-struct scsc_log_collector_client hip4_collect_hcf_client = {
-       .name = "wlan_hcf",
-       .type = SCSC_LOG_CHUNK_WLAN_HCF,
-       .collect_init = NULL,
-       .collect = hip4_collect,
-       .collect_end = NULL,
-       .prv = NULL,
-};
-#endif
-
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0))
 static inline ktime_t ktime_add_ms(const ktime_t kt, const u64 msec)
 {
@@ -531,29 +493,6 @@ error:
        return value;
 }
 
-#if 0
-/* Function can be called from BH context */
-static u8 hip4_read_vif_peer_status(struct slsi_hip4 *hip, u16 vif, u16 peer)
-{
-       struct hip4_priv    *hip_priv = hip->hip_priv;
-       u32                 value;
-
-       read_lock_bh(&hip_priv->rw_scoreboard);
-       if (hip->hip_priv->version == 3 || hip->hip_priv->version == 4) {
-               value = *((u8 *)(hip->hip_priv->scbrd_base + ((vif*8) + FW_OWN_VIF)));
-               value = (value & (0x3 << (peer % 4)*0x2)) >> (peer % 4)*0x2;
-       } else {
-               SLSI_ERR_NODEV("Incorrect version\n");
-       }
-
-       /* Memory barrier when reading shared mailbox/memory */
-       smp_rmb();
-
-       read_unlock_bh(&hip_priv->rw_scoreboard);
-       return value;
-}
-#endif
-
 static void hip4_dump_dbg(struct slsi_hip4 *hip, struct mbulk *m, struct sk_buff *skb, struct scsc_service *service)
 {
        unsigned int        i = 0;
@@ -1048,6 +987,8 @@ consume_fb_mbulk:
        }
        SCSC_HIP4_SAMPLER_INT_OUT_BH(hip_priv->minor, 2);
 
+       atomic_set(&hip->hip_priv->in_rx, 2);
+
        idx_r = hip4_read_index(hip, HIP4_MIF_Q_TH_CTRL, ridx);
        idx_w = hip4_read_index(hip, HIP4_MIF_Q_TH_CTRL, widx);
 
@@ -1140,6 +1081,8 @@ consume_ctl_mbulk:
 
        SCSC_HIP4_SAMPLER_INT_OUT_BH(hip_priv->minor, 1);
 
+       atomic_set(&hip->hip_priv->in_rx, 3);
+
        idx_r = hip4_read_index(hip, HIP4_MIF_Q_TH_DAT, ridx);
        idx_w = hip4_read_index(hip, HIP4_MIF_Q_TH_DAT, widx);
 
@@ -1317,6 +1260,10 @@ static void hip4_irq_handler(int irq, void *data)
                SLSI_ERR_NODEV("INT triggered while WDT is active\n");
                SLSI_ERR_NODEV("bh_init %lld\n", ktime_to_ns(bh_init));
                SLSI_ERR_NODEV("bh_end  %lld\n", ktime_to_ns(bh_end));
+#ifndef TASKLET
+               SLSI_ERR_NODEV("hip4_wq work_busy %d\n", work_busy(&hip->hip_priv->intr_wq));
+#endif
+               SLSI_ERR_NODEV("hip4_priv->in_rx  %d\n", atomic_read(&hip->hip_priv->in_rx));
        }
        /* If system is not in suspend, mask interrupt to avoid interrupt storm and let BH run */
        if (!atomic_read(&hip->hip_priv->in_suspend)) {
@@ -1659,23 +1606,6 @@ int hip4_init(struct slsi_hip4 *hip)
                        SLSI_WARN(sdev, "failed to add PM QoS request\n");
                }
        }
-
-#ifdef CONFIG_SCSC_LOG_COLLECTION
-       /* Register with log collector to collect wlan hcf file */
-       /* Make a copy for collection */
-       mutex_init(&hip->hip_priv->in_collection);
-       if (total_mib_len) {
-               hip->hip_priv->mib_collect = vmalloc(total_mib_len);
-               if (hip->hip_priv->mib_collect) {
-                       memcpy(hip->hip_priv->mib_collect, (u8 *)hip_ptr + HIP4_WLAN_MIB_OFFSET, total_mib_len);
-                       hip->hip_priv->mib_sz = total_mib_len;
-                       hip4_collect_hcf_client.prv = hip;
-                       scsc_log_collector_register_client(&hip4_collect_hcf_client);
-               } else {
-                       SLSI_WARN(sdev, "failed to allocate memory for hcf file backup\n");
-               }
-       }
-#endif
        return 0;
 }
 
@@ -1923,18 +1853,6 @@ void hip4_deinit(struct slsi_hip4 *hip)
 
        service = sdev->service;
 
-#ifdef CONFIG_SCSC_LOG_COLLECTION
-       hip4_collect_hcf_client.prv = NULL;
-       /* Unregister outside the in_collection_lock to avoid deadlock */
-       scsc_log_collector_unregister_client(&hip4_collect_hcf_client);
-       mutex_lock(&hip->hip_priv->in_collection);
-       if (hip->hip_priv->mib_collect) {
-               hip->hip_priv->mib_sz = 0;
-               vfree(hip->hip_priv->mib_collect);
-       }
-       mutex_unlock(&hip->hip_priv->in_collection);
-#endif
-
        /* de-register with traffic monitor */
        slsi_traffic_mon_client_unregister(sdev, hip);
        scsc_service_pm_qos_remove_request(service);
index 89e24474fe70e035e008080f6ece35678ade7c20..23dcb63e6717ddb0f9c1690091633a3a8e21ad9a 100755 (executable)
@@ -48,7 +48,8 @@ static atomic_t in_read;
 /* It is less efficent, but we simplify the implementation */
 static spinlock_t  g_spinlock;
 
-static bool hip4_sampler_enable = true;
+static bool hip4_sampler_enable;
+
 module_param(hip4_sampler_enable, bool, S_IRUGO | S_IWUSR);
 MODULE_PARM_DESC(hip4_sampler_enable, "Enable hip4_sampler_enable. Run-time option - (default: Y)");
 
index 5c5d369a32d3a46fe23fb8fd492b762a3ee4220f..14cf5521125c9024b7d7e3a170aa54d83ac8dd14 100644 (file)
@@ -63,13 +63,45 @@ static int hip4_smapper_alloc_bank(struct slsi_dev *sdev, struct hip4_priv *priv
        return 0;
 }
 
+static int hip4_smapper_allocate_skb_buffer_entry(struct slsi_dev *sdev, struct hip4_smapper_bank *bank, int idx)
+{
+       struct sk_buff *skb;
+       int err;
+
+       skb = slsi_alloc_skb(bank->entry_size, GFP_ATOMIC);
+       if (!skb) {
+               SLSI_DBG4_NODEV(SLSI_SMAPPER, "Not enough memory\n");
+               return -ENOMEM;
+       }
+       SLSI_DBG4_NODEV(SLSI_SMAPPER, "SKB allocated: 0x%p at bank %d entry %d\n", skb, bank->bank, idx);
+       bank->skbuff_dma[idx] = dma_map_single(sdev->dev, skb->data,
+                                            bank->entry_size, DMA_FROM_DEVICE);
+       err = dma_mapping_error(sdev->dev, bank->skbuff_dma[idx]);
+       if (err) {
+               SLSI_DBG4_NODEV(SLSI_SMAPPER, "Error mapping SKB: 0x%p at bank %d entry %d\n", skb, bank->bank, idx);
+               slsi_kfree_skb(skb);
+               return err;
+       }
+
+       /* Check alignment */
+       if (!IS_ALIGNED(bank->skbuff_dma[idx], bank->align)) {
+               SLSI_DBG4_NODEV(SLSI_SMAPPER, "Phys address: 0x%x not %d aligned. Unmap memory and return error\n",
+                               bank->skbuff_dma[idx], bank->align);
+               dma_unmap_single(sdev->dev, bank->skbuff_dma[idx], bank->entry_size, DMA_FROM_DEVICE);
+               slsi_kfree_skb(skb);
+               bank->skbuff_dma[idx] = 0;
+               return -ENOMEM;
+       }
+       bank->skbuff[idx] = skb;
+       return 0;
+}
+
 /* Pre-Allocate the skbs for the RX entries */
 static int hip4_smapper_allocate_skb_buffers(struct slsi_dev *sdev, struct hip4_smapper_bank *bank)
 {
        unsigned int i;
        unsigned int n;
-       struct sk_buff *skb;
-       int err;
+       int res;
 
        if (!bank)
                return -EINVAL;
@@ -77,30 +109,9 @@ static int hip4_smapper_allocate_skb_buffers(struct slsi_dev *sdev, struct hip4_
        n = bank->entries;
        for (i = 0; i < n; i++) {
                if (!bank->skbuff[i]) {
-                       skb = slsi_alloc_skb(bank->entry_size, GFP_ATOMIC);
-                       if (!skb) {
-                               SLSI_DBG4_NODEV(SLSI_SMAPPER, "Not enough memory\n");
-                               return -ENOMEM;
-                       }
-                       SLSI_DBG4_NODEV(SLSI_SMAPPER, "SKB allocated: 0x%p at bank %d entry %d\n", skb, bank->bank, i);
-                       bank->skbuff_dma[i] = dma_map_single(sdev->dev, skb->data,
-                                                            bank->entry_size, DMA_FROM_DEVICE);
-                       err = dma_mapping_error(sdev->dev, bank->skbuff_dma[i]);
-                       if (err) {
-                               SLSI_DBG4_NODEV(SLSI_SMAPPER, "Error mapping SKB: 0x%p at bank %d entry %d\n", skb, bank->bank, i);
-                               slsi_kfree_skb(skb);
-                               return err;
-                       }
-
-                       /* Check alignment */
-                       if (!IS_ALIGNED(bank->skbuff_dma[i], bank->align)) {
-                               SLSI_DBG4_NODEV(SLSI_SMAPPER, "Phys address: 0x%x not %d aligned. Unmap memory and return error\n", bank->skbuff_dma[i], bank->align);
-                               dma_unmap_single(sdev->dev, bank->skbuff_dma[i], bank->entry_size, DMA_FROM_DEVICE);
-                               slsi_kfree_skb(skb);
-                               bank->skbuff_dma[i] = 0;
-                               return -ENOMEM;
-                       }
-                       bank->skbuff[i] = skb;
+                       res = hip4_smapper_allocate_skb_buffer_entry(sdev, bank, i);
+                       if (res != 0)
+                               return res;
                }
        }
 
@@ -170,8 +181,7 @@ static void hip4_smapper_refill_isr(int irq, void *data)
                if (!bank->in_use)
                        continue;
 
-               if (HIP4_SMAPPER_GET_BANK_OWNER(bank->bank, *control->mbox_ptr) == HIP_SMAPPER_OWNER_HOST &&
-                   HIP4_SMAPPER_GET_BANK_STATE(bank->bank, *control->mbox_ptr) == HIP_SMAPPER_STATUS_REFILL) {
+               if (HIP4_SMAPPER_GET_BANK_OWNER(bank->bank, *control->mbox_ptr) == HIP_SMAPPER_OWNER_HOST) {
                        SLSI_DBG4_NODEV(SLSI_SMAPPER, "SKB allocation at bank %d\n", i);
                        if (hip4_smapper_allocate_skb_buffers(sdev, bank)) {
                                SLSI_DBG4_NODEV(SLSI_SMAPPER, "Error Allocating skb buffers at bank %d. Setting owner to FW\n", i);
@@ -217,7 +227,6 @@ int hip4_smapper_consume_entry(struct slsi_dev *sdev, struct slsi_hip4 *hip, str
        len = desc->entry_size;
        headroom = desc->headroom;
 
-
        if (bank_num >= HIP4_SMAPPER_TOTAL_BANKS) {
                SLSI_DBG4_NODEV(SLSI_SMAPPER, "Incorrect bank_num %d\n", bank_num);
                goto error;
@@ -247,6 +256,9 @@ int hip4_smapper_consume_entry(struct slsi_dev *sdev, struct slsi_hip4 *hip, str
        bank->skbuff[entry] = NULL;
        dma_unmap_single(sdev->dev, bank->skbuff_dma[entry], bank->entry_size, DMA_FROM_DEVICE);
        bank->skbuff_dma[entry] = 0;
+
+       hip4_smapper_allocate_skb_buffer_entry(sdev, bank, entry);
+
        skb_reserve(skb, headroom);
        skb_put(skb, len);
        cb->skb_addr = skb;
index 2db3b9ee9ca0e69e111556005a01e1ff0f5d7235..1fab43e49051dccd317c518554ac2080abd3ad56 100755 (executable)
@@ -80,6 +80,7 @@
 
 #define CMD_FAKEMAC "FAKEMAC"
 
+#define CMD_GETBSSRSSI "GET_BSS_RSSI"
 #define CMD_GETBSSINFO "GETBSSINFO"
 #define CMD_GETSTAINFO "GETSTAINFO"
 #define CMD_GETASSOCREJECTINFO "GETASSOCREJECTINFO"
@@ -601,6 +602,7 @@ static int slsi_p2p_lo_start(struct net_device *dev, char *command)
                goto exit_with_vif_deactivate;
        } else {
                ndev_vif->chan = chan;
+               ndev_vif->driver_channel = chan->hw_value;
        }
        /* If framework sends the values for listen offload as 1,500,5000 and 6,
         * where 5000ms (5 seconds) is the listen interval which needs to be repeated
@@ -2013,24 +2015,40 @@ int slsi_set_fcc_channel(struct net_device *dev, char *cmd, int cmd_len)
        struct netdev_vif    *ndev_vif = netdev_priv(dev);
        struct slsi_dev      *sdev = ndev_vif->sdev;
        int                  status;
-       bool                 max_power_ena;
+       bool                 flight_mode_ena;
        u8                   host_state;
+       int                  err;
+       char                 alpha2[3];
 
-       max_power_ena = (cmd[0]  == '0');
+       /* SET_FCC_CHANNEL 0 when device is in flightmode */
+       flight_mode_ena = (cmd[0]  == '0');
        SLSI_MUTEX_LOCK(sdev->device_config_mutex);
        host_state = sdev->device_config.host_state;
 
-       if (max_power_ena)
-               host_state = host_state | FAPI_HOSTSTATE_CELLULAR_ACTIVE;
-       else
+       if (flight_mode_ena)
                host_state = host_state & ~FAPI_HOSTSTATE_CELLULAR_ACTIVE;
+       else
+               host_state = host_state | FAPI_HOSTSTATE_CELLULAR_ACTIVE;
        sdev->device_config.host_state = host_state;
 
        status = slsi_mlme_set_host_state(sdev, dev, host_state);
-       SLSI_MUTEX_UNLOCK(sdev->device_config_mutex);
-
-       if (status)
+       if (status) {
                SLSI_ERR(sdev, "Err setting MMaxPowerEna. error = %d\n", status);
+       } else {
+               err = slsi_read_default_country(sdev, alpha2, 1);
+               if (err) {
+                       SLSI_WARN(sdev, "Err updating reg_rules = %d\n", err);
+               } else {
+                       memcpy(sdev->device_config.domain_info.regdomain->alpha2, alpha2, 2);
+                       /* Read the regulatory params for the country.*/
+                       if (slsi_read_regulatory_rules(sdev, &sdev->device_config.domain_info, alpha2) == 0) {
+                               slsi_reset_channel_flags(sdev);
+                               wiphy_apply_custom_regulatory(sdev->wiphy, sdev->device_config.domain_info.regdomain);
+                               slsi_update_supported_channels_regd_flags(sdev);
+                       }
+               }
+       }
+       SLSI_MUTEX_UNLOCK(sdev->device_config_mutex);
 
        return status;
 }
@@ -2139,6 +2157,18 @@ int slsi_get_sta_info(struct net_device *dev, char *command, int buf_len)
        return len;
 }
 
+static int slsi_get_bss_rssi(struct net_device *dev, char *command, int buf_len)
+{
+       struct netdev_vif        *ndev_vif = netdev_priv(dev);
+       int len = 0;
+
+       SLSI_MUTEX_LOCK(ndev_vif->vif_mutex);
+       len = snprintf(command, buf_len, "%d", ndev_vif->sta.last_connected_bss.rssi);
+       SLSI_MUTEX_UNLOCK(ndev_vif->vif_mutex);
+
+       return len;
+}
+
 static int slsi_get_bss_info(struct net_device *dev, char *command, int buf_len)
 {
        struct netdev_vif        *ndev_vif = netdev_priv(dev);
@@ -2215,7 +2245,7 @@ int slsi_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
        }
        command[priv_cmd.total_len] = '\0';
 
-       SLSI_NET_DBG3(dev, SLSI_CFG80211, "command: %.*s, total_len in priv_cmd = %d\n", priv_cmd.total_len, command, priv_cmd.total_len);
+       SLSI_INFO_NODEV("command: %.*s\n", priv_cmd.total_len, command);
 
        if (strncasecmp(command, CMD_SETSUSPENDMODE, strlen(CMD_SETSUSPENDMODE)) == 0) {
                ret = slsi_set_suspend_mode(dev, command);
@@ -2426,6 +2456,8 @@ int slsi_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
                                           priv_cmd.total_len - (strlen(CMD_SET_FCC_CHANNEL) + 1));
        } else if (strncasecmp(command, CMD_FAKEMAC, strlen(CMD_FAKEMAC)) == 0) {
                ret = slsi_fake_mac_write(dev, command + strlen(CMD_FAKEMAC) + 1);
+       } else if (strncasecmp(command, CMD_GETBSSRSSI, strlen(CMD_GETBSSRSSI)) == 0) {
+               ret = slsi_get_bss_rssi(dev, command, priv_cmd.total_len);
        } else if (strncasecmp(command, CMD_GETBSSINFO, strlen(CMD_GETBSSINFO)) == 0) {
                ret = slsi_get_bss_info(dev, command, priv_cmd.total_len);
        } else if (strncasecmp(command, CMD_GETSTAINFO, strlen(CMD_GETSTAINFO)) == 0) {
index 37206cc18d4291d8853d2cc3a1baae4ea2589cc3..e0d82a0361d1bb33734911e1431261e7aa3db3d8 100755 (executable)
@@ -24,6 +24,9 @@
 #include "unittest.h"
 #endif
 #include "hip.h"
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+#include <scsc/scsc_log_collector.h>
+#endif
 
 #include "procfs.h"
 #include "mib.h"
@@ -55,7 +58,6 @@ MODULE_PARM_DESC(mib_file2_t, "mib data filename");
 static int slsi_mib_open_file(struct slsi_dev *sdev, struct slsi_dev_mib_info *mib_info, const struct firmware **fw);
 static int slsi_mib_close_file(struct slsi_dev *sdev, const struct firmware *e);
 static int slsi_mib_download_file(struct slsi_dev *sdev, struct slsi_dev_mib_info *mib_info);
-static void slsi_reset_channel_flags(struct slsi_dev *sdev);
 static int slsi_country_to_index(struct slsi_802_11d_reg_domain *domain_info, const char *alpha2);
 static int slsi_mib_initial_get(struct slsi_dev *sdev);
 static int slsi_hanged_event_count;
@@ -191,31 +193,6 @@ mac_default:
 #endif
 }
 
-static void slsi_print_platform_id(struct slsi_dev *sdev)
-{
-       const struct firmware *e = NULL;
-       char                  path_name[MX_WLAN_FILE_PATH_LEN_MAX];
-       int                   r;
-
-       /* read platform id file */
-       scnprintf(path_name, MX_WLAN_FILE_PATH_LEN_MAX, "wlan/platform.txt");
-       SLSI_DBG1(sdev, SLSI_INIT_DEINIT, "Platform ID file : %s\n", path_name);
-
-       r = mx140_file_request_conf(sdev->maxwell_core, &e, path_name);
-       if (r != 0) {
-               mx140_file_release_conf(sdev->maxwell_core, e);
-               return;
-       }
-       if (!e) {
-               SLSI_WARN(sdev, "mx140_file_request_device_conf() returned success, but the struct firmware handle was null\n");
-               mx140_file_release_conf(sdev->maxwell_core, e);
-               return;
-       }
-       SLSI_INFO(sdev, "Platform ID loaded from %s: %s", path_name, (char *)e->data); /* .txt is \n terminated */
-       mx140_file_release_conf(sdev->maxwell_core, e);
-}
-
-
 static void write_wifi_version_info_file(struct slsi_dev *sdev)
 {
        struct file *fp = NULL;
@@ -243,10 +220,17 @@ static void write_wifi_version_info_file(struct slsi_dev *sdev)
         * The framework parser for the version may depend on this
         * exact formatting.
         */
-       snprintf(buf, sizeof(buf), "%s (f/w_ver: %s)\nregDom_ver: %d.%d\n",
-               build_id_drv,
-               build_id_fw,
-               ((sdev->reg_dom_version >> 8) & 0xFF), (sdev->reg_dom_version & 0xFF));
+       snprintf(buf, sizeof(buf),
+                "drv_ver: %s\n"
+                "f/w_ver: %s\n"
+                "hcf_ver_hw: %u\n"
+                "hcf_ver_sw: %u\n"
+                "regDom_ver: %d.%d\n",
+                build_id_drv,
+                build_id_fw,
+                sdev->mib[0].mib_hash,
+                sdev->mib[1].mib_hash,
+                ((sdev->reg_dom_version >> 8) & 0xFF), (sdev->reg_dom_version & 0xFF));
 
        kernel_write(fp, buf, strlen(buf), 0);
 
@@ -295,6 +279,67 @@ void slsi_stop_monitor_mode(struct slsi_dev *sdev, struct net_device *dev)
 }
 #endif
 
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+static int slsi_hcf_collect(struct scsc_log_collector_client *collect_client, size_t size)
+{
+       struct slsi_dev *sdev = (struct slsi_dev *)collect_client->prv;
+       int ret = 0;
+       u8 index = sdev->collect_mib.num_files;
+       u8 i;
+       u8 *data;
+
+       SLSI_INFO_NODEV("Collecting WLAN HCF\n");
+
+       if (!sdev->collect_mib.enabled)
+               SLSI_INFO_NODEV("Collection not enabled\n");
+
+       spin_lock(&sdev->collect_mib.in_collection);
+       ret = scsc_log_collector_write(&index, sizeof(char), 1);
+       if (ret) {
+               spin_unlock(&sdev->collect_mib.in_collection);
+               return ret;
+       }
+
+       for (i = 0; i < index; i++) {
+               SLSI_INFO_NODEV("Collecting WLAN HCF. File %s\n", sdev->collect_mib.file[i].file_name);
+               /* Write file name */
+               ret = scsc_log_collector_write((char *)&sdev->collect_mib.file[i].file_name, 32, 1);
+               if (ret) {
+                       spin_unlock(&sdev->collect_mib.in_collection);
+                       return ret;
+               }
+               /* Write file len */
+               ret = scsc_log_collector_write((char *)&sdev->collect_mib.file[i].len, sizeof(u16), 1);
+               if (ret) {
+                       spin_unlock(&sdev->collect_mib.in_collection);
+                       return ret;
+               }
+               /* Write data */
+               data = sdev->collect_mib.file[i].data;
+               if (!data)
+                       continue;
+               ret = scsc_log_collector_write((char *)data, sdev->collect_mib.file[i].len, 1);
+               if (ret) {
+                       spin_unlock(&sdev->collect_mib.in_collection);
+                       return ret;
+               }
+       }
+       spin_unlock(&sdev->collect_mib.in_collection);
+
+       return ret;
+}
+
+/* Collect client registration for HCF file*/
+struct scsc_log_collector_client slsi_hcf_client = {
+       .name = "wlan_hcf",
+       .type = SCSC_LOG_CHUNK_WLAN_HCF,
+       .collect_init = NULL,
+       .collect = slsi_hcf_collect,
+       .collect_end = NULL,
+       .prv = NULL,
+};
+#endif
+
 #define SLSI_SM_WLAN_SERVICE_RECOVERY_COMPLETED_TIMEOUT 20000
 int slsi_start(struct slsi_dev *sdev)
 {
@@ -347,7 +392,6 @@ int slsi_start(struct slsi_dev *sdev)
 
        SLSI_DBG2(sdev, SLSI_INIT_DEINIT, "Step [1/2]: Start WLAN service\n");
        SLSI_EC_GOTO(slsi_sm_wlan_service_open(sdev), err, err_done);
-       slsi_print_platform_id(sdev);
        /**
         * Download MIB data, if any.
         */
@@ -355,6 +399,11 @@ int slsi_start(struct slsi_dev *sdev)
 
        sdev->local_mib.mib_hash = 0; /* Reset localmib hash value */
 #ifndef SLSI_TEST_DEV
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+       spin_lock_init(&sdev->collect_mib.in_collection);
+       sdev->collect_mib.num_files = 0;
+       sdev->collect_mib.enabled = false;
+#endif
 #ifndef CONFIG_SCSC_DOWNLOAD_FILE
        if (slsi_is_rf_test_mode_enabled()) {
                sdev->mib[0].mib_file_name = mib_file_t;
@@ -465,6 +514,12 @@ int slsi_start(struct slsi_dev *sdev)
 
                SLSI_DBG2(sdev, SLSI_INIT_DEINIT, "Succeed to write softap information to .softap.info\n");
        }
+#endif
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+       /* Register with log collector to collect wlan hcf file */
+       slsi_hcf_client.prv = sdev;
+       scsc_log_collector_register_client(&slsi_hcf_client);
+       sdev->collect_mib.enabled = true;
 #endif
        slsi_update_supported_channels_regd_flags(sdev);
        SLSI_DBG2(sdev, SLSI_INIT_DEINIT, "---Driver started successfully---\n");
@@ -536,6 +591,10 @@ struct net_device *slsi_new_interface_create(struct wiphy        *wiphy,
 
 static void slsi_stop_chip(struct slsi_dev *sdev)
 {
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+       u8 index = sdev->collect_mib.num_files;
+       u8 i;
+#endif
        WARN_ON(!SLSI_MUTEX_IS_LOCKED(sdev->start_stop_mutex));
 
        SLSI_DBG1(sdev, SLSI_INIT_DEINIT, "netdev_up_count:%d device_state:%d\n", sdev->netdev_up_count, sdev->device_state);
@@ -547,6 +606,13 @@ static void slsi_stop_chip(struct slsi_dev *sdev)
        if (sdev->netdev_up_count)
                return;
 
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+       sdev->collect_mib.enabled = false;
+       scsc_log_collector_unregister_client(&slsi_hcf_client);
+       for (i = 0; i < index; i++)
+               kfree(sdev->collect_mib.file[i].data);
+#endif
+
        slsi_reset_channel_flags(sdev);
        slsi_regd_init(sdev);
        sdev->device_state = SLSI_DEVICE_STATE_STOPPING;
@@ -804,6 +870,10 @@ static int slsi_mib_open_file(struct slsi_dev *sdev, struct slsi_dev_mib_info *m
        const char *mib_file_ext;
        char path_name[MX_WLAN_FILE_PATH_LEN_MAX];
        char *mib_file_name = mib_info->mib_file_name;
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+       u8 index = sdev->collect_mib.num_files;
+       u8 *data;
+#endif
 
        if (!mib_file_name || !fw)
                return -EINVAL;
@@ -825,7 +895,7 @@ static int slsi_mib_open_file(struct slsi_dev *sdev, struct slsi_dev_mib_info *m
        scnprintf(path_name, MX_WLAN_FILE_PATH_LEN_MAX, "wlan/%s", mib_file_name);
        SLSI_INFO(sdev, "Path to the MIB file : %s\n", path_name);
 
-       r = mx140_file_request_conf(sdev->maxwell_core, &e, path_name);
+       r = mx140_file_request_conf(sdev->maxwell_core, &e, "wlan", mib_file_name);
        if (r || (!e)) {
                SLSI_DBG2(sdev, SLSI_INIT_DEINIT, "Skip MIB download as file [%s] is NOT found and is optional\n", mib_file_name);
                *fw = e;
@@ -835,6 +905,22 @@ static int slsi_mib_open_file(struct slsi_dev *sdev, struct slsi_dev_mib_info *m
        mib_info->mib_data = (u8 *)e->data;
        mib_info->mib_len = e->size;
 
+#ifdef CONFIG_SCSC_LOG_COLLECTION
+       spin_lock(&sdev->collect_mib.in_collection);
+       memset(&sdev->collect_mib.file[index].file_name, 0, 32);
+       memcpy(&sdev->collect_mib.file[index].file_name, mib_file_name, 32);
+       sdev->collect_mib.file[index].len = mib_info->mib_len;
+       data = kmalloc(mib_info->mib_len, GFP_ATOMIC);
+       if (!data) {
+               spin_unlock(&sdev->collect_mib.in_collection);
+               goto cont;
+       }
+       memcpy(data, mib_info->mib_data, mib_info->mib_len);
+       sdev->collect_mib.file[index].data = data;
+       sdev->collect_mib.num_files += 1;
+       spin_unlock(&sdev->collect_mib.in_collection);
+cont:
+#endif
        /* Check MIB file header */
        if (mib_info->mib_len >= 8 &&              /* Room for header */
                /*(sdev->mib_data[6] & 0xF0) == 0x20 && */ /* WLAN subsystem */
@@ -1062,7 +1148,7 @@ static int slsi_mib_initial_get(struct slsi_dev *sdev)
                } else {
                        sdev->nan_enabled = false;
                        SLSI_WARN(sdev, "Error reading NAN enabled mib\n");
-                }
+               }
 
                if (values[++mib_index].type != SLSI_MIB_TYPE_NONE) { /* UnifiForcedScheduleDuration */
                        SLSI_CHECK_TYPE(sdev, values[mib_index].type, SLSI_MIB_TYPE_UINT);
@@ -2084,7 +2170,10 @@ int slsi_handle_disconnect(struct slsi_dev *sdev, struct net_device *dev, u8 *pe
                 * the connection with the AP has been lost
                 */
                if (ndev_vif->sta.vif_status == SLSI_VIF_STATUS_CONNECTING) {
-                       SLSI_NET_WARN(dev, "Unexpected mlme_disconnect_ind - whilst connecting\n");
+                       if (peer_address)
+                               SLSI_NET_WARN(dev, "Unexpected mlme_disconnect_ind - whilst connecting\n");
+                       else
+                               SLSI_NET_WARN(dev, "Connection failure\n");
                } else if (ndev_vif->sta.vif_status == SLSI_VIF_STATUS_CONNECTED) {
                        if (reason == FAPI_REASONCODE_SYNCHRONISATION_LOSS)
                                reason = 0; /*reason code to recognise beacon loss */
@@ -3016,21 +3105,6 @@ exit_with_vif:
        return r;
 }
 
-int slsi_set_uapsd_qos_info(struct slsi_dev *sdev, struct net_device *dev)
-{
-       int error = 0;
-
-       SLSI_MUTEX_LOCK(sdev->device_config_mutex);
-       SLSI_DBG1(sdev, SLSI_MLME, "Configured QoS Info :0x%x\n", sdev->device_config.qos_info);
-       if (sdev->device_config.qos_info != -1) {
-               error = slsi_set_uint_mib(sdev, dev, SLSI_PSID_UNIFI_STATION_QOS_INFO, sdev->device_config.qos_info);
-               if (error)
-                       SLSI_ERR(sdev, "Err setting qos info . error = %d\n", error);
-       }
-       SLSI_MUTEX_UNLOCK(sdev->device_config_mutex);
-       return error;
-}
-
 int slsi_set_boost(struct slsi_dev *sdev, struct net_device *dev)
 {
        int error = 0;
@@ -3070,6 +3144,13 @@ static void slsi_p2p_roc_duration_expiry_work(struct work_struct *work)
 
        /* If action frame tx is in progress don't schedule work to delete vif */
        if (ndev_vif->sdev->p2p_state != P2P_ACTION_FRAME_TX_RX) {
+               /* After sucessful frame transmission,  we will move to LISTENING or VIF ACTIVE state.
+                * Unset channel should not be sent down during p2p procedure.
+                */
+               if (ndev_vif->drv_in_p2p_procedure == 0) {
+                       slsi_mlme_spare_signal_1(ndev_vif->sdev, ndev_vif->wdev.netdev);
+                       ndev_vif->driver_channel = 0;
+               }
                slsi_p2p_queue_unsync_vif_del_work(ndev_vif, SLSI_P2P_UNSYNC_VIF_EXTRA_MSEC);
                SLSI_P2P_STATE_CHANGE(ndev_vif->sdev, P2P_IDLE_VIF_ACTIVE);
        }
@@ -3178,6 +3259,7 @@ int slsi_p2p_vif_activate(struct slsi_dev *sdev, struct net_device *dev, struct
                goto exit_with_vif;
        } else {
                ndev_vif->chan = chan;
+               ndev_vif->driver_channel = chan->hw_value;
        }
 
        ndev_vif->mgmt_tx_data.exp_frame = SLSI_P2P_PA_INVALID;
@@ -3914,7 +3996,7 @@ static void slsi_reg_mib_to_regd(struct slsi_mib_data *mib, struct slsi_802_11d_
        domain_info->regdomain->n_reg_rules = num_rules;
 }
 
-static void slsi_reset_channel_flags(struct slsi_dev *sdev)
+void slsi_reset_channel_flags(struct slsi_dev *sdev)
 {
        enum nl80211_band band;
        struct ieee80211_channel *chan;
@@ -4100,7 +4182,6 @@ void slsi_select_wifi_sharing_ap_channel(struct wiphy *wiphy, struct net_device
        int sta_frequency = ndev_sta_vif->chan->center_freq;
 
        SLSI_DBG1(sdev, SLSI_CFG80211, "Station connected on frequency: %d\n", sta_frequency);
-       SLSI_DBG1(sdev, SLSI_CFG80211, "AP frequency received: %d\n", settings->chandef.chan->center_freq);
 
        if (((sta_frequency) / 1000) == 2) { /*For 2.4GHz */
                /*if single antenna*/
@@ -4592,6 +4673,7 @@ int slsi_hs2_vif_activate(struct slsi_dev *sdev, struct net_device *dev, struct
                goto exit_with_vif;
        }
        ndev_vif->chan = chan;
+       ndev_vif->driver_channel = chan->hw_value;
        return r;
 
 exit_with_vif:
index 605468920031f341747e192f9aeecc426698cb50..dab85bd399d8608e95dea569c9bafe5f0d769209 100755 (executable)
@@ -404,7 +404,6 @@ struct ieee80211_channel *slsi_find_scan_channel(struct slsi_dev *sdev, struct i
 int slsi_auto_chan_select_scan(struct slsi_dev *sdev, int chan_count, struct ieee80211_channel *channels[]);
 int slsi_set_uint_mib(struct slsi_dev *dev, struct net_device *ndev, u16 psid, int value);
 int slsi_update_regd_rules(struct slsi_dev *sdev, bool country_check);
-int slsi_set_uapsd_qos_info(struct slsi_dev *sdev, struct net_device *dev);
 int slsi_set_boost(struct slsi_dev *sdev, struct net_device *dev);
 int slsi_p2p_init(struct slsi_dev *sdev, struct netdev_vif *ndev_vif);
 void slsi_p2p_deinit(struct slsi_dev *sdev, struct netdev_vif *ndev_vif);
@@ -468,4 +467,5 @@ void slsi_update_supported_channels_regd_flags(struct slsi_dev *sdev);
 int slsi_test_send_hanged_vendor_event(struct net_device *dev);
 #endif
 void slsi_hs2_dump_public_action_subtype(struct ieee80211_mgmt *mgmt, bool tx);
+void slsi_reset_channel_flags(struct slsi_dev *sdev);
 #endif /*__SLSI_MGT_H__*/
index 3f55896b5c1e9322d1fcbdc3d0ccd2e6aa07816e..a080891016f72f432ea10d36d532f646d57799ec 100755 (executable)
@@ -15,6 +15,7 @@
 #include "mlme.h"
 #include "mib.h"
 #include "mgt.h"
+#include "cac.h"
 
 #define SLSI_SCAN_PRIVATE_IE_CHANNEL_LIST_HEADER_LEN   7
 #define SLSI_SCAN_PRIVATE_IE_SSID_FILTER_HEADER_LEN            7
@@ -905,6 +906,8 @@ void slsi_mlme_del_vif(struct slsi_dev *sdev, struct net_device *dev)
                ndev_vif->probe_req_ie_len = 0;
                ndev_vif->delete_probe_req_ies = false;
        }
+       if (SLSI_IS_VIF_INDEX_P2P(ndev_vif))
+               ndev_vif->drv_in_p2p_procedure = false;
 
        slsi_kfree_skb(cfm);
 }
@@ -947,6 +950,35 @@ int slsi_mlme_set_channel(struct slsi_dev *sdev, struct net_device *dev, struct
        return r;
 }
 
+int slsi_mlme_spare_signal_1(struct slsi_dev *sdev, struct net_device *dev)
+{
+       struct netdev_vif *ndev_vif = netdev_priv(dev);
+       struct sk_buff    *req;
+       struct sk_buff    *cfm;
+       int                  r = 0;
+
+       SLSI_NET_DBG3(dev, SLSI_MLME, "slsi_mlme_spare_signal_1\n");
+
+       req = fapi_alloc(mlme_spare_signal_1_req, MLME_SPARE_SIGNAL_1_REQ, ndev_vif->ifnum, 0);
+
+       if (!req)
+               return -ENOMEM;
+
+       cfm = slsi_mlme_req_cfm(sdev, dev, req, MLME_SPARE_SIGNAL_1_CFM);
+
+       if (!cfm)
+               return -EIO;
+
+       if (fapi_get_u16(cfm, u.mlme_set_channel_cfm.result_code) != FAPI_RESULTCODE_SUCCESS) {
+               SLSI_NET_ERR(dev, "mlme_spare_channel_cfm(result:%u) ERROR\n",
+                            fapi_get_u16(cfm, u.mlme_set_channel_cfm.result_code));
+               r = -EINVAL;
+       }
+
+       slsi_kfree_skb(cfm);
+       return r;
+}
+
 void slsi_ap_obss_scan_done_ind(struct net_device *dev, struct netdev_vif *ndev_vif)
 {
        struct sk_buff *scan_res;
@@ -1975,9 +2007,11 @@ static const u8 *slsi_mlme_connect_get_sec_ie(struct cfg80211_connect_params *sm
        return ptr;
 }
 
-/* If is_copy is true copy the required IEs from connect_ie to ie_dest. else calculate the required ie length */
-static int slsi_mlme_connect_info_elems_ie_prep(const u8 *connect_ie, const size_t connect_ie_len,
-                                               bool is_copy, u8 *ie_dest, int ie_dest_len)
+/* If is_copy is true copy the required IEs from connect_ie to ie_dest. else
+ * calculate the required ie length
+ */
+static int slsi_mlme_connect_info_elems_ie_prep(struct slsi_dev *sdev, const u8 *connect_ie,
+                                               const size_t connect_ie_len, bool is_copy, u8 *ie_dest, int ie_dest_len)
 {
        const u8 *ie_pos = NULL;
        int      info_elem_length = 0;
@@ -1994,7 +2028,8 @@ static int slsi_mlme_connect_info_elems_ie_prep(const u8 *connect_ie, const size
                        if (ie_dest_len >= curr_ie_len) {
                                memcpy(ie_dest, ie_pos, curr_ie_len);
                                ie_dest += curr_ie_len;
-                               ie_dest_len -= curr_ie_len;         /* free space available in ie_dest for next ie */
+                               /* free space avail in ie_dest for next ie*/
+                               ie_dest_len -= curr_ie_len;
                        } else {
                                SLSI_ERR_NODEV("interwork ie extract error (ie_copy_l:%d, c_ie_l:%d):\n", ie_dest_len, curr_ie_len);
                                return -EINVAL;
@@ -2007,7 +2042,8 @@ static int slsi_mlme_connect_info_elems_ie_prep(const u8 *connect_ie, const size
        /* vendor specific IEs will be the last elements. */
        ie_pos = cfg80211_find_ie(WLAN_EID_VENDOR_SPECIFIC, connect_ie, connect_ie_len);
        if (ie_pos) {
-               curr_ie_len = connect_ie_len - (ie_pos - connect_ie);         /* length of all the vendor specific IEs */
+               /* length of all the vendor specific IEs */
+               curr_ie_len = connect_ie_len - (ie_pos - connect_ie);
                if (is_copy) {
                        if (ie_dest_len >= curr_ie_len) {
                                memcpy(ie_dest, ie_pos, curr_ie_len);
@@ -2022,6 +2058,30 @@ static int slsi_mlme_connect_info_elems_ie_prep(const u8 *connect_ie, const size
                }
        }
 
+       if (sdev->device_config.qos_info != -1) {
+               if (is_copy) {
+                       if (ie_dest_len >= 9) {
+                               int pos = 0;
+
+                               ie_dest[pos++] = SLSI_WLAN_EID_VENDOR_SPECIFIC;
+                               ie_dest[pos++] = 0x07;
+                               ie_dest[pos++] = 0x00;
+                               ie_dest[pos++] = 0x50;
+                               ie_dest[pos++] = 0xf2;
+                               ie_dest[pos++] = WLAN_OUI_TYPE_MICROSOFT_WMM;
+                               ie_dest[pos++] = WMM_OUI_SUBTYPE_INFORMATION_ELEMENT;
+                               ie_dest[pos++] = WMM_VERSION;
+                               ie_dest[pos++] = sdev->device_config.qos_info & 0x0F;
+                               ie_dest += pos;
+                               ie_dest_len -= pos;
+                       } else {
+                               SLSI_ERR_NODEV("Required 9bytes but left:%d\n", ie_dest_len);
+                               return -EINVAL;
+                       }
+               } else {
+                       info_elem_length += 9;
+               }
+       }
        return info_elem_length;
 }
 
@@ -2034,7 +2094,7 @@ static int slsi_mlme_connect_info_elements(struct slsi_dev *sdev, struct net_dev
        int               r = 0;
        u8                *p;
 
-       info_elem_length = slsi_mlme_connect_info_elems_ie_prep(sme->ie, sme->ie_len, false, NULL, 0);
+       info_elem_length = slsi_mlme_connect_info_elems_ie_prep(sdev, sme->ie, sme->ie_len, false, NULL, 0);
 
        /* NO IE required in MLME-ADD-INFO-ELEMENTS */
        if (info_elem_length <= 0)
@@ -2053,7 +2113,7 @@ static int slsi_mlme_connect_info_elements(struct slsi_dev *sdev, struct net_dev
                return -EINVAL;
        }
 
-       (void)slsi_mlme_connect_info_elems_ie_prep(sme->ie, sme->ie_len, true, p, info_elem_length);
+       (void)slsi_mlme_connect_info_elems_ie_prep(sdev, sme->ie, sme->ie_len, true, p, info_elem_length);
 
        /* backup ies */
        if (SLSI_IS_VIF_INDEX_WLAN(ndev_vif)) {
@@ -2306,10 +2366,7 @@ int slsi_mlme_disconnect(struct slsi_dev *sdev, struct net_device *dev, u8 *mac,
        SLSI_NET_DBG1(dev, SLSI_MLME, "mlme_disconnect_req(vif:%u, bssid:%pM, reason:%d)\n", ndev_vif->ifnum, mac, reason_code);
 
 #ifdef CONFIG_SCSC_LOG_COLLECTION
-       /* stop sable generation as a workaround for now on wifi disconnect.
-        * TODO: serialize tar generation in wlbtd
-        * scsc_log_collector_schedule_collection(SCSC_LOG_HOST_WLAN, SCSC_LOG_HOST_WLAN_REASON_DISCONNECT);
-        */
+       scsc_log_collector_schedule_collection(SCSC_LOG_HOST_WLAN, SCSC_LOG_HOST_WLAN_REASON_DISCONNECT);
 #else
        mx140_log_dump();
 #endif
@@ -2392,6 +2449,10 @@ int slsi_mlme_set_key(struct slsi_dev *sdev, struct net_device *dev, u16 key_id,
 
                if (key_id > 3)
                        SLSI_NET_WARN(dev, "Key ID is greater than 3");
+               /* Incase of WEP key index is appended before key.
+                * So increment length by one
+                */
+               fapi_set_u16(req, u.mlme_setkeys_req.length, (key->key_len + 1) * 8);
                fapi_append_data(req, &wep_key_id, 1);
        }
        fapi_append_data(req, key->key, key->key_len);
index e8cb861bf2c3765188b64ded7369bf5df6fd372e..4fdcd8abd56a25f4a3b7b0ef988229928eba90e7 100755 (executable)
@@ -148,6 +148,8 @@ void slsi_mlme_del_vif(struct slsi_dev *sdev, struct net_device *dev);
 int slsi_mlme_set_channel(struct slsi_dev *sdev, struct net_device *dev, struct ieee80211_channel *chan, u16 duration, u16 interval, u16 count);
 void slsi_ap_obss_scan_done_ind(struct net_device *dev, struct netdev_vif *ndev_vif);
 
+int slsi_mlme_spare_signal_1(struct slsi_dev *sdev, struct net_device *dev);
+
 /**
  * slsi_mlme_add_autonomous_scan() Returns:
  *  0 : Scan installed
index d75fd8f8b934159e140a1de14bfa39f182bd5ef7..27b5c5c1507c04d1fa09f292c13e7e783ebe909b 100755 (executable)
@@ -1196,7 +1196,7 @@ int slsi_netif_add_locked(struct slsi_dev *sdev, const char *name, int ifnum)
        ndev_vif->delete_probe_req_ies = false;
        ndev_vif->probe_req_ies = NULL;
        ndev_vif->probe_req_ie_len = 0;
-
+       ndev_vif->drv_in_p2p_procedure = false;
        return 0;
 
 exit_with_error:
index 360c5edc7ab775d323a04b2fb33a83bebc48085d..4e8369c589b9e152af9cd943cc82c56bee780dbe 100755 (executable)
@@ -147,8 +147,10 @@ static struct netdev_vif *slsi_gscan_get_vif(struct slsi_dev *sdev)
        struct net_device *dev;
 
        dev = slsi_gscan_get_netdev(sdev);
-       if (WARN_ON(!dev))
+       if (!dev) {
+               SLSI_WARN_NODEV("Dev is NULL\n");
                return NULL;
+       }
 
        return netdev_priv(dev);
 }
@@ -426,7 +428,8 @@ void slsi_hotlist_ap_lost_indication(struct slsi_dev *sdev, struct net_device *d
        int                              offset = 0;
        int                              i;
 
-       if (WARN_ON(!ndev_vif)) {
+       if (!ndev_vif) {
+               SLSI_WARN_NODEV("ndev_vif is NULL\n");
                slsi_kfree_skb(skb);
                return;
        }
@@ -489,10 +492,13 @@ void slsi_hotlist_ap_found_indication(struct slsi_dev *sdev, struct net_device *
        u8                         *event_buffer;
        int                        offset;
 
-       if (WARN_ON(!ndev_vif))
+       if (!ndev_vif) {
+               SLSI_WARN_NODEV("ndev_vif is NULL\n");
                return;
+       }
 
-       WARN_ON(!SLSI_MUTEX_IS_LOCKED(ndev_vif->scan_mutex));
+       if (!SLSI_MUTEX_IS_LOCKED(ndev_vif->scan_mutex))
+               SLSI_WARN_NODEV("ndev_vif->scan_mutex is not locked\n");
 
        SLSI_NET_DBG1(dev, SLSI_GSCAN, "Hotlist AP Found Indication: %pM\n", scan_res->nl_scan_res.bssid);
 
@@ -555,7 +561,8 @@ static void slsi_gscan_hash_add(struct slsi_dev *sdev, struct slsi_gscan_result
        struct netdev_vif *ndev_vif;
 
        ndev_vif = slsi_gscan_get_vif(sdev);
-       WARN_ON(!SLSI_MUTEX_IS_LOCKED(ndev_vif->scan_mutex));
+       if (!SLSI_MUTEX_IS_LOCKED(ndev_vif->scan_mutex))
+               SLSI_WARN_NODEV("ndev_vif->scan_mutex is not locked\n");
 
        scan_res->hnext = sdev->gscan_hash_table[key];
        sdev->gscan_hash_table[key] = scan_res;
@@ -573,7 +580,8 @@ static struct slsi_gscan_result *slsi_gscan_hash_get(struct slsi_dev *sdev, u8 *
 
        ndev_vif = slsi_gscan_get_vif(sdev);
 
-       WARN_ON(!SLSI_MUTEX_IS_LOCKED(ndev_vif->scan_mutex));
+       if (!SLSI_MUTEX_IS_LOCKED(ndev_vif->scan_mutex))
+               SLSI_WARN_NODEV("ndev_vif->scan_mutex is not locked\n");
 
        temp = sdev->gscan_hash_table[key];
        while (temp != NULL) {
@@ -594,7 +602,8 @@ void slsi_gscan_hash_remove(struct slsi_dev *sdev, u8 *mac)
        struct slsi_gscan_result *scan_res = NULL;
 
        ndev_vif = slsi_gscan_get_vif(sdev);
-       WARN_ON(!SLSI_MUTEX_IS_LOCKED(ndev_vif->scan_mutex));
+       if (!SLSI_MUTEX_IS_LOCKED(ndev_vif->scan_mutex))
+               SLSI_WARN_NODEV("ndev_vif->scan_mutex is not locked\n");
 
        if (sdev->gscan_hash_table[key] == NULL)
                return;
@@ -624,7 +633,7 @@ void slsi_gscan_hash_remove(struct slsi_dev *sdev, u8 *mac)
                kfree(scan_res);
        }
 
-       if (WARN_ON(sdev->num_gscan_results < 0))
+       if (sdev->num_gscan_results < 0)
                SLSI_ERR(sdev, "Wrong num_gscan_results: %d\n", sdev->num_gscan_results);
 }
 
@@ -669,7 +678,8 @@ void slsi_gscan_handle_scan_result(struct slsi_dev *sdev, struct net_device *dev
        u16                      anqp_length;
        int                      hs2_network_id;
 
-       WARN_ON(!SLSI_MUTEX_IS_LOCKED(ndev_vif->scan_mutex));
+       if (!SLSI_MUTEX_IS_LOCKED(ndev_vif->scan_mutex))
+               SLSI_WARN_NODEV("ndev_vif->scan_mutex is not locked\n");
 
        SLSI_NET_DBG_HEX(dev, SLSI_GSCAN, skb->data, skb->len, "mlme_scan_ind skb->len: %d\n", skb->len);
 
@@ -994,8 +1004,10 @@ void slsi_gscan_flush_scan_results(struct slsi_dev *sdev)
        int                      i;
 
        ndev_vif = slsi_gscan_get_vif(sdev);
-       if (WARN_ON(!ndev_vif))
+       if (!ndev_vif) {
+               SLSI_WARN_NODEV("ndev_vif is NULL");
                return;
+       }
 
        SLSI_MUTEX_LOCK(ndev_vif->scan_mutex);
        for (i = 0; i < SLSI_GSCAN_HASH_TABLE_SIZE; i++)
@@ -1010,8 +1022,11 @@ void slsi_gscan_flush_scan_results(struct slsi_dev *sdev)
        SLSI_DBG2(sdev, SLSI_GSCAN, "num_gscan_results: %d, buffer_consumed = %d\n",
                  sdev->num_gscan_results, sdev->buffer_consumed);
 
-       WARN_ON(sdev->num_gscan_results != 0);
-       WARN_ON(sdev->buffer_consumed != 0);
+       if (sdev->num_gscan_results != 0)
+               SLSI_WARN_NODEV("sdev->num_gscan_results is not zero\n");
+
+       if (sdev->buffer_consumed != 0)
+               SLSI_WARN_NODEV("sdev->buffer_consumedis not zero\n");
 
        SLSI_MUTEX_UNLOCK(ndev_vif->scan_mutex);
 }
@@ -1022,8 +1037,10 @@ void slsi_gscan_flush_hotlist_results(struct slsi_dev *sdev)
        struct netdev_vif          *ndev_vif;
 
        ndev_vif = slsi_gscan_get_vif(sdev);
-       if (WARN_ON(!ndev_vif))
+       if (!ndev_vif) {
+               SLSI_WARN_NODEV("ndev_vif is NULL\n");
                return;
+       }
 
        SLSI_MUTEX_LOCK(ndev_vif->scan_mutex);
 
@@ -1045,8 +1062,11 @@ static int slsi_gscan_add_mlme(struct slsi_dev *sdev, struct slsi_nl_gscan_param
        int                          i;
 
        dev = slsi_gscan_get_netdev(sdev);
-       if (WARN_ON(!dev))
+
+       if (!dev) {
+               SLSI_WARN_NODEV("dev is NULL\n");
                return -EINVAL;
+       }
 
        for (i = 0; i < nl_gscan_param->num_buckets; i++) {
                u16 report_mode = 0;
@@ -1112,8 +1132,10 @@ static int slsi_gscan_add(struct wiphy *wiphy, struct wireless_dev *wdev, const
 
        SLSI_DBG1_NODEV(SLSI_GSCAN, "SUBCMD_ADD_GSCAN\n");
 
-       if (WARN_ON(!sdev))
+       if (!sdev) {
+               SLSI_WARN_NODEV("sdev is NULL\n");
                return -EINVAL;
+       }
 
        if (!slsi_dev_gscan_supported())
                return -ENOTSUPP;
@@ -1206,8 +1228,10 @@ static int slsi_gscan_del(struct wiphy *wiphy,
        SLSI_DBG1_NODEV(SLSI_GSCAN, "SUBCMD_DEL_GSCAN\n");
 
        dev = slsi_gscan_get_netdev(sdev);
-       if (WARN_ON(!dev))
+       if (!dev) {
+               SLSI_WARN_NODEV("dev is NULL\n");
                return -EINVAL;
+       }
 
        ndev_vif = netdev_priv(dev);
 
@@ -1267,8 +1291,10 @@ static int slsi_gscan_get_scan_results(struct wiphy *wiphy,
        }
 
        ndev_vif = slsi_gscan_get_vif(sdev);
-       if (WARN_ON(!ndev_vif))
+       if (!ndev_vif) {
+               SLSI_WARN_NODEV("ndev_vif is NULL\n");
                return -EINVAL;
+       }
 
        SLSI_MUTEX_LOCK(ndev_vif->scan_mutex);
 
@@ -1391,8 +1417,10 @@ static int slsi_gscan_set_hotlist(struct wiphy *wiphy,
        SLSI_DBG1_NODEV(SLSI_GSCAN, "SUBCMD_SET_BSSID_HOTLIST\n");
 
        dev = slsi_gscan_get_netdev(sdev);
-       if (WARN_ON(!dev))
+       if (!dev) {
+               SLSI_WARN_NODEV("dev is NULL\n");
                return -EINVAL;
+       }
 
        ndev_vif = netdev_priv(dev);
 
@@ -1431,8 +1459,10 @@ static int slsi_gscan_reset_hotlist(struct wiphy *wiphy,
        SLSI_DBG1_NODEV(SLSI_GSCAN, "SUBCMD_RESET_BSSID_HOTLIST\n");
 
        dev = slsi_gscan_get_netdev(sdev);
-       if (WARN_ON(!dev))
+       if (!dev) {
+               SLSI_WARN_NODEV("dev is NULL\n");
                return -EINVAL;
+       }
        ndev_vif = netdev_priv(dev);
 
        SLSI_MUTEX_LOCK(ndev_vif->scan_mutex);
@@ -1728,8 +1758,10 @@ static int slsi_set_bssid_blacklist(struct wiphy *wiphy, struct wireless_dev *wd
        SLSI_DBG1_NODEV(SLSI_GSCAN, "SUBCMD_SET_BSSID_BLACK_LIST\n");
 
        net_dev = slsi_get_netdev(sdev, SLSI_NET_INDEX_WLAN);
-       if (WARN_ON(!net_dev))
+       if (!net_dev) {
+               SLSI_WARN_NODEV("net_dev is NULL\n");
                return -EINVAL;
+       }
 
        ndev_vif = netdev_priv(net_dev);
        /*This subcmd can be issued in either connected or disconnected state.
@@ -1809,21 +1841,25 @@ static int slsi_start_keepalive_offload(struct wiphy *wiphy, struct wireless_dev
        ndev_vif = netdev_priv(net_dev);
 
        SLSI_MUTEX_LOCK(ndev_vif->vif_mutex);
-       if (WARN_ON(!ndev_vif->activated)) {
+       if (!ndev_vif->activated) {
+               SLSI_WARN_NODEV("ndev_vif is not activated\n");
                r = -EINVAL;
                goto exit;
        }
-       if (WARN_ON(ndev_vif->vif_type != FAPI_VIFTYPE_STATION)) {
+       if (ndev_vif->vif_type != FAPI_VIFTYPE_STATION) {
+               SLSI_WARN_NODEV("ndev_vif->vif_type is not FAPI_VIFTYPE_STATION\n");
                r = -EINVAL;
                goto exit;
        }
-       if (WARN_ON(ndev_vif->sta.vif_status != SLSI_VIF_STATUS_CONNECTED)) {
+       if (ndev_vif->sta.vif_status != SLSI_VIF_STATUS_CONNECTED) {
+               SLSI_WARN_NODEV("ndev_vif->sta.vif_status is not SLSI_VIF_STATUS_CONNECTED\n");
                r = -EINVAL;
                goto exit;
        }
 
        peer = slsi_get_peer_from_qs(sdev, net_dev, SLSI_STA_PEER_QUEUESET);
-       if (WARN_ON(!peer)) {
+       if (!peer) {
+               SLSI_WARN_NODEV("peer is NULL\n");
                r = -EINVAL;
                goto exit;
        }
@@ -1872,7 +1908,8 @@ static int slsi_start_keepalive_offload(struct wiphy *wiphy, struct wireless_dev
                                  ndev_vif->sta.keepalive_host_tag[index - 1], 0, 0, 0);
 
        skb = slsi_alloc_skb_headroom(sizeof(struct ethhdr) + ip_pkt_len, GFP_KERNEL);
-       if (WARN_ON(!skb)) {
+       if (!skb) {
+               SLSI_WARN_NODEV("Memory allocation failed for skb\n");
                r = -ENOMEM;
                goto exit;
        }
@@ -1909,6 +1946,8 @@ static int slsi_start_keepalive_offload(struct wiphy *wiphy, struct wireless_dev
                                      0, (period * 1000));
        if (r == 0)
                ndev_vif->sta.keepalive_host_tag[index - 1] = host_tag;
+       else
+               slsi_kfree_skb(skb);
 
 exit:
        SLSI_MUTEX_UNLOCK(ndev_vif->vif_mutex);
@@ -1938,15 +1977,18 @@ static int slsi_stop_keepalive_offload(struct wiphy *wiphy, struct wireless_dev
        ndev_vif = netdev_priv(net_dev);
 
        SLSI_MUTEX_LOCK(ndev_vif->vif_mutex);
-       if (WARN_ON(!ndev_vif->activated)) {
+       if (!ndev_vif->activated) {
+               SLSI_WARN(sdev, "VIF is not activated\n");
                r = -EINVAL;
                goto exit;
        }
-       if (WARN_ON(ndev_vif->vif_type != FAPI_VIFTYPE_STATION)) {
+       if (ndev_vif->vif_type != FAPI_VIFTYPE_STATION) {
+               SLSI_WARN(sdev, "Not a STA VIF\n");
                r = -EINVAL;
                goto exit;
        }
-       if (WARN_ON(ndev_vif->sta.vif_status != SLSI_VIF_STATUS_CONNECTED)) {
+       if (ndev_vif->sta.vif_status != SLSI_VIF_STATUS_CONNECTED) {
+               SLSI_WARN(sdev, "VIF is not connected\n");
                r = -EINVAL;
                goto exit;
        }
@@ -5266,7 +5308,6 @@ static int slsi_get_logger_supported_feature_set(struct wiphy *wiphy, struct wir
                SLSI_ERR(sdev, "scsc_wifi_get_logger_supported_feature_set failed ret:%d\n", ret);
                goto exit;
        }
-       SLSI_DBG1(sdev, SLSI_GSCAN, "MOHIT : Value of supported featres is %d\n", supported_features);
        ret = slsi_vendor_cmd_reply(wiphy, &supported_features, sizeof(supported_features));
 exit:
        SLSI_MUTEX_UNLOCK(sdev->logger_mutex);
index c74470c6a7768650fb2da5febdaafd06958248ce..c017af574fb932ef3db83e5585f1ff07b9405ef9 100755 (executable)
@@ -437,6 +437,8 @@ static ssize_t slsi_procfs_uapsd_write(struct file *file,
 
        /*Store the qos info and use it to set MIB during connection*/
        sdev->device_config.qos_info = qos_info;
+       SLSI_DBG1(sdev, SLSI_MLME, "set qos_info:%d\n", sdev->device_config.qos_info);
+
 
        kfree(read_string);
        return count;
index c9b4ee2fdba8af8b08c54aa6fdcc4da307b7e734..cb01ff4d17dc72b49108ffbc2ee0d1b5b1567afc 100755 (executable)
@@ -788,6 +788,7 @@ int slsi_send_roam_vendor_event(struct slsi_dev *sdev, const u8 *bssid,
 {
        bool                                   is_secured_bss;
        struct sk_buff                         *skb = NULL;
+       u8 err = 0;
 
        is_secured_bss = cfg80211_find_ie(WLAN_EID_RSN, req_ie, req_ie_len) ||
                                        cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, WLAN_OUI_TYPE_MICROSOFT_WPA, req_ie, req_ie_len);
@@ -805,17 +806,18 @@ int slsi_send_roam_vendor_event(struct slsi_dev *sdev, const u8 *bssid,
                SLSI_ERR_NODEV("Failed to allocate skb for VENDOR Roam event\n");
                return -ENOMEM;
        }
-       if (nla_put(skb, SLSI_WLAN_VENDOR_ATTR_ROAM_AUTH_BSSID, ETH_ALEN, bssid) ||
-           nla_put(skb, SLSI_WLAN_VENDOR_ATTR_ROAM_AUTH_AUTHORIZED, 1, &authorized) ||
-          (req_ie && nla_put(skb, SLSI_WLAN_VENDOR_ATTR_ROAM_AUTH_REQ_IE, req_ie_len, req_ie)) ||
-          (resp_ie && nla_put(skb, SLSI_WLAN_VENDOR_ATTR_ROAM_AUTH_RESP_IE, resp_ie_len, resp_ie)) ||
-          (beacon_ie && nla_put(skb, SLSI_WLAN_VENDOR_ATTR_ROAM_BEACON_IE, beacon_ie_len, beacon_ie))) {
-               SLSI_ERR_NODEV("Failed nla_put ,req_ie_len=%d,resp_ie_len=%d,beacon_ie_len=%d\n",
-                              req_ie_len, resp_ie_len, beacon_ie_len);
+
+       err |= nla_put(skb, SLSI_WLAN_VENDOR_ATTR_ROAM_AUTH_BSSID, ETH_ALEN, bssid) ? BIT(1) : 0;
+       err |= nla_put(skb, SLSI_WLAN_VENDOR_ATTR_ROAM_AUTH_AUTHORIZED, 1, &authorized) ? BIT(2) : 0;
+       err |= (req_ie && nla_put(skb, SLSI_WLAN_VENDOR_ATTR_ROAM_AUTH_REQ_IE, req_ie_len, req_ie)) ? BIT(3) : 0;
+       err |= (resp_ie && nla_put(skb, SLSI_WLAN_VENDOR_ATTR_ROAM_AUTH_RESP_IE, resp_ie_len, resp_ie)) ? BIT(4) : 0;
+       err |= (beacon_ie && nla_put(skb, SLSI_WLAN_VENDOR_ATTR_ROAM_BEACON_IE, beacon_ie_len, beacon_ie)) ? BIT(5) : 0;
+       if (err) {
+               SLSI_ERR_NODEV("Failed nla_put ,req_ie_len=%d,resp_ie_len=%d,beacon_ie_len=%d,condition_failed=%d\n",
+                              req_ie_len, resp_ie_len, beacon_ie_len, err);
                slsi_kfree_skb(skb);
                return -EINVAL;
        }
-
        SLSI_DBG3_NODEV(SLSI_MLME, "Event: KEY_MGMT_ROAM_AUTH(%d)\n", SLSI_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH);
        cfg80211_vendor_event(skb, GFP_KERNEL);
        return 0;
@@ -1913,6 +1915,21 @@ void slsi_rx_received_frame_ind(struct slsi_dev *sdev, struct net_device *dev, s
                                        SLSI_NET_WARN(dev, "Driver in incorrect P2P state (P2P_LISTENING)");
 
                                cancel_delayed_work(&ndev_vif->unsync.del_vif_work);
+                               /* Sending down the Unset channel is delayed when listen work expires in
+                                * middle of P2P procedure. For example,When Listen Work expires after
+                                * sending provision discovery req,unset channel is not sent to FW.
+                                * After Receiving the PROV_DISC_RESP,  if listen work is not present
+                                * Unset channel to be sent down.Similarly During P2P Negotiation procedure,
+                                * Unset channel is not sent to FW.Once Negotiation is complete,
+                                * if listen work is not present Unset channel to be sent down.
+                                */
+                               if ((subtype == SLSI_P2P_PA_GO_NEG_CFM) || (subtype == SLSI_P2P_PA_PROV_DISC_RSP)) {
+                                       ndev_vif->drv_in_p2p_procedure = false;
+                                       if (!delayed_work_pending(&ndev_vif->unsync.roc_expiry_work)) {
+                                               slsi_mlme_spare_signal_1(ndev_vif->sdev, ndev_vif->wdev.netdev);
+                                               ndev_vif->driver_channel = 0;
+                                       }
+                               }
 
                                ndev_vif->mgmt_tx_data.exp_frame = SLSI_P2P_PA_INVALID;
                                (void)slsi_mlme_reset_dwell_time(sdev, dev);
index f5628042c6cbbfd0e1fb1ebab5ee36b0e8e99758..b2d54dea308f08ad848c8f003b93d657174b56af 100755 (executable)
@@ -484,7 +484,18 @@ void slsi_rx_netdev_data_work(struct work_struct *work)
                slsi_debug_frame(sdev, dev, skb, "RX");
                switch (fapi_get_u16(skb, id)) {
                case MA_UNITDATA_IND:
+#ifdef CONFIG_SCSC_SMAPPER
+                       if (fapi_get_u16(skb, u.ma_unitdata_ind.bulk_data_descriptor) == FAPI_BULKDATADESCRIPTOR_SMAPPER) {
+                               u8 *frame = (u8 *)slsi_hip_get_skb_data_from_smapper(sdev, skb);
+
+                               if (frame)
+                                       SCSC_HIP4_SAMPLER_TCP_DECODE(sdev, dev, frame, false);
+                       } else {
+                               SCSC_HIP4_SAMPLER_TCP_DECODE(sdev, dev, skb->data + fapi_get_siglen(skb), false);
+                       }
+#else
                        SCSC_HIP4_SAMPLER_TCP_DECODE(sdev, dev, skb->data + fapi_get_siglen(skb), false);
+#endif
                        (void)slsi_rx_data(sdev, dev, skb, false);
                        break;
                case MA_UNITDATA_CFM:
index 08e36af90b13c10fef7d1f004666860ff6dfab6d..d40d9c92b3bdc72890a4598de90dd8289ea8964d 100644 (file)
@@ -60,7 +60,7 @@ int slsi_sm_wlan_service_open(struct slsi_dev *sdev)
        return 0;
 }
 
-int mx140_file_request_conf(struct scsc_mx *mx, const struct firmware **conf, const char *config_rel_path)
+int mx140_file_request_conf(struct scsc_mx *mx, const struct firmware **conf, const char *config_rel_path, const char *filename)
 {
        return 0;
 }
index 72d85453bf3ccb8a3af6b6b22c967b4c4546b9d1..0bbb8691d1e25ff258d2bd7225dceb75814ba7ab 100644 (file)
@@ -8,7 +8,7 @@
 #define __SCSC_LOG_COLLECTOR_H__
 
 /* High nibble is Major, Low nibble is Minor */
-#define SCSC_LOG_HEADER_VERSION_MAJOR  0x00
+#define SCSC_LOG_HEADER_VERSION_MAJOR  0x01
 #define SCSC_LOG_HEADER_VERSION_MINOR  0x00
 /* Magic string. 4 bytes "SCSC"*/
 /* Header version. 1 byte */
@@ -66,7 +66,7 @@ enum scsc_log_chunk_type {
        SCSC_LOG_RESERVED_BT,
        SCSC_LOG_RESERVED_WLAN,
        SCSC_LOG_RESERVED_RADIO,
-       SCSC_LOG_CHUNK_LOGRING,
+       SCSC_LOG_CHUNK_LOGRING = 254,
        /* Add other chunks */
        SCSC_LOG_CHUNK_INVALID = 255,
 };
index 25ac3173f7ef9138b1f8aafc64ce3651c79eaaf7..41f0f0ade980894faf79f264ecd4349c8240e844 100755 (executable)
@@ -256,7 +256,7 @@ int scsc_service_unregister_observer(struct scsc_service *service, char *name);
  * Returns pointer to data or NULL if file not found.
  * Call mx140_file_release_conf()to release the memory.
  */
-int mx140_file_request_conf(struct scsc_mx *mx, const struct firmware **conf, const char *config_path);
+int mx140_file_request_conf(struct scsc_mx *mx, const struct firmware **conf, const char *config_path, const char *filename);
 
 /* Reads a debug configuration file into memory.
  *
index 70ef14d29ed7a6208fb22ffd5207ab4bc8faf877..86caa4c8b81dbaddaf0dbf497290b08a5cad81cf 100644 (file)
@@ -10,8 +10,8 @@
 #define SCSC_RELEASE_SOLUTION "mx250"
 
 #define SCSC_RELEASE_PRODUCT 6
-#define SCSC_RELEASE_ITERATION 45
-#define SCSC_RELEASE_CANDIDATE 1
+#define SCSC_RELEASE_ITERATION 51
+#define SCSC_RELEASE_CANDIDATE 0
 
 #define SCSC_RELEASE_POINT 0