source: G950FXXS5DSI1
authorMichael Benedict <michaelbt@live.com>
Sat, 5 Oct 2019 10:03:32 +0000 (20:03 +1000)
committerMichael Benedict <michaelbt@live.com>
Sat, 12 Oct 2019 11:54:31 +0000 (22:54 +1100)
Signed-off-by: Michael Benedict <michaelbt@live.com>
57 files changed:
arch/arm64/boot/dts/exynos/battery_data_dreamlte_common.dtsi
arch/arm64/configs/exynos8895-dreamlte_defconfig
drivers/android/Kconfig
drivers/android/binder.c
drivers/android/binder_alloc.c
drivers/android/binder_alloc.h
drivers/battery_v2/include/charger/mfc_charger.h
drivers/battery_v2/include/sec_charging_common.h
drivers/battery_v2/mfc_charger.c
drivers/battery_v2/sec_battery.c
drivers/clk/clk.c
drivers/gpu/arm/b_r16p0/platform/exynos/gpu_custom_interface.c
drivers/gpu/arm/b_r16p0/platform/exynos/gpu_pmqos.c
drivers/net/wireless/bcmdhd4361/Kconfig
drivers/net/wireless/bcmdhd4361/Makefile
drivers/net/wireless/bcmdhd4361/Makefile.kk
drivers/net/wireless/bcmdhd4361/Makefile.lp
drivers/net/wireless/bcmdhd4361/bcmsdh_sdmmc_linux.c
drivers/net/wireless/bcmdhd4361/bcmutils.c
drivers/net/wireless/bcmdhd4361/dhd.h
drivers/net/wireless/bcmdhd4361/dhd_common.c
drivers/net/wireless/bcmdhd4361/dhd_custom_sec.c
drivers/net/wireless/bcmdhd4361/dhd_linux.c
drivers/net/wireless/bcmdhd4361/dhd_linux.h
drivers/net/wireless/bcmdhd4361/dhd_linux_exportfs.c
drivers/net/wireless/bcmdhd4361/dhd_msgbuf.c
drivers/net/wireless/bcmdhd4361/dhd_pcie.c
drivers/net/wireless/bcmdhd4361/dhd_pcie_linux.c
drivers/net/wireless/bcmdhd4361/dhd_sdio.c
drivers/net/wireless/bcmdhd4361/document/ChangeHistory.txt
drivers/net/wireless/bcmdhd4361/include/802.11.h
drivers/net/wireless/bcmdhd4361/include/bcmevent.h
drivers/net/wireless/bcmdhd4361/include/bcmmsgbuf.h
drivers/net/wireless/bcmdhd4361/include/bcmpcie.h
drivers/net/wireless/bcmdhd4361/include/bcmutils.h
drivers/net/wireless/bcmdhd4361/include/eapol.h
drivers/net/wireless/bcmdhd4361/include/epivers.h
drivers/net/wireless/bcmdhd4361/include/event_log_payload.h
drivers/net/wireless/bcmdhd4361/include/event_log_set.h
drivers/net/wireless/bcmdhd4361/include/event_log_tag.h
drivers/net/wireless/bcmdhd4361/include/fils.h
drivers/net/wireless/bcmdhd4361/include/nan.h
drivers/net/wireless/bcmdhd4361/include/wlioctl.h
drivers/net/wireless/bcmdhd4361/include/wpa.h
drivers/net/wireless/bcmdhd4361/linux_pkt.c
drivers/net/wireless/bcmdhd4361/wl_android.c
drivers/net/wireless/bcmdhd4361/wl_android.h
drivers/net/wireless/bcmdhd4361/wl_cfg80211.c
drivers/net/wireless/bcmdhd4361/wl_cfg80211.h
drivers/net/wireless/bcmdhd4361/wl_cfgp2p.c
drivers/net/wireless/bcmdhd4361/wl_cfgvendor.c
drivers/net/wireless/bcmdhd4361/wl_cfgvendor.h
drivers/net/wireless/bcmdhd4361/wldev_common.h
drivers/staging/sti/abc/abc_common.c
include/linux/sti/abc_common.h
security/defex_lsm/file_list
tools/dtbtool

index baa707f2b52ee320293fbfe02bb63fc2426235d9..3e0e761686115244e5f2be95803ec12702dbf261 100755 (executable)
                battery,sleep_mode_limit_current = <500>;
                battery,wc_full_input_limit_current = <100>;
                battery,wc_cv_current = <820>;
                battery,sleep_mode_limit_current = <500>;
                battery,wc_full_input_limit_current = <100>;
                battery,wc_cv_current = <820>;
+               battery,wc_cv_tx_current = <650>;
                battery,wc_cv_pack_current = <630>;
                battery,wc_hero_stand_cc_cv = <70>;
                battery,wc_hero_stand_cv_current = <600>;
                battery,wc_cv_pack_current = <630>;
                battery,wc_hero_stand_cc_cv = <70>;
                battery,wc_hero_stand_cv_current = <600>;
index 4aa6509a1f4ba0341429e7447a89c94c59092fef..8897e81cc29360fbc29e47fa175d195495cb69af 100644 (file)
@@ -1793,6 +1793,7 @@ CONFIG_WLAN=y
 CONFIG_BROADCOM_WIFI=y
 # CONFIG_BCM4330 is not set
 # CONFIG_BCM4343 is not set
 CONFIG_BROADCOM_WIFI=y
 # CONFIG_BCM4330 is not set
 # CONFIG_BCM4343 is not set
+# CONFIG_BCM43436 is not set
 # CONFIG_BCM4334 is not set
 # CONFIG_BCM4335 is not set
 # CONFIG_BCM4339 is not set
 # CONFIG_BCM4334 is not set
 # CONFIG_BCM4335 is not set
 # CONFIG_BCM4339 is not set
@@ -1821,6 +1822,8 @@ CONFIG_BCMDHD_PREALLOC_MEMDUMP=y
 # CONFIG_WLAN_HERO2 is not set
 CONFIG_BCMDHD_OOB_HOST_WAKE=y
 CONFIG_SPLIT_ARGOS_SET=y
 # CONFIG_WLAN_HERO2 is not set
 CONFIG_BCMDHD_OOB_HOST_WAKE=y
 CONFIG_SPLIT_ARGOS_SET=y
+# CONFIG_WLAN_GRACE is not set
+# CONFIG_WLAN_GREAT is not set
 # CONFIG_BCM_DETECT_CONSECUTIVE_HANG is not set
 # CONFIG_WLAN_TSQ_MULTIPLIER is not set
 # CONFIG_DHD_DRIVEN_RANDOM_MAC_SCAN is not set
 # CONFIG_BCM_DETECT_CONSECUTIVE_HANG is not set
 # CONFIG_WLAN_TSQ_MULTIPLIER is not set
 # CONFIG_DHD_DRIVEN_RANDOM_MAC_SCAN is not set
index 01de42c8b74bd7032197512ea79c658606f660e4..63ed9ceebf7b0b6f3034688e91f6fd7bdc21c21a 100644 (file)
@@ -9,7 +9,7 @@ if ANDROID
 
 config ANDROID_BINDER_IPC
        bool "Android Binder IPC Driver"
 
 config ANDROID_BINDER_IPC
        bool "Android Binder IPC Driver"
-       depends on MMU
+       depends on MMU && !M68K
        default n
        ---help---
          Binder is used in Android for both communication between processes,
        default n
        ---help---
          Binder is used in Android for both communication between processes,
@@ -31,19 +31,6 @@ config ANDROID_BINDER_DEVICES
          created. Each binder device has its own context manager, and is
          therefore logically separated from the other devices.
 
          created. Each binder device has its own context manager, and is
          therefore logically separated from the other devices.
 
-config ANDROID_BINDER_IPC_32BIT
-       bool
-       depends on !64BIT && ANDROID_BINDER_IPC
-       default y
-       ---help---
-         The Binder API has been changed to support both 32 and 64bit
-         applications in a mixed environment.
-
-         Enable this to support an old 32-bit Android user-space (v4.4 and
-         earlier).
-
-         Note that enabling this will break newer Android user-space.
-
 config ANDROID_BINDER_IPC_SELFTEST
        bool "Android Binder IPC Driver Selftest"
        depends on ANDROID_BINDER_IPC
 config ANDROID_BINDER_IPC_SELFTEST
        bool "Android Binder IPC Driver Selftest"
        depends on ANDROID_BINDER_IPC
index ba8872fc9211d61e677f27ef34904786c587bbee..7b0f7459da4207db81dba1c3b2d2d74924e247bc 100644 (file)
 #include <linux/security.h>
 #include <linux/spinlock.h>
 
 #include <linux/security.h>
 #include <linux/spinlock.h>
 
-#ifdef CONFIG_ANDROID_BINDER_IPC_32BIT
-#define BINDER_IPC_32BIT 1
-#endif
-
 #include <uapi/linux/android/binder.h>
 #include "binder_alloc.h"
 #include "binder_trace.h"
 #include <uapi/linux/android/binder.h>
 #include "binder_alloc.h"
 #include "binder_trace.h"
@@ -145,7 +141,7 @@ enum {
 };
 static uint32_t binder_debug_mask = BINDER_DEBUG_USER_ERROR |
        BINDER_DEBUG_FAILED_TRANSACTION | BINDER_DEBUG_DEAD_TRANSACTION;
 };
 static uint32_t binder_debug_mask = BINDER_DEBUG_USER_ERROR |
        BINDER_DEBUG_FAILED_TRANSACTION | BINDER_DEBUG_DEAD_TRANSACTION;
-module_param_named(debug_mask, binder_debug_mask, uint, S_IWUSR | S_IRUGO);
+module_param_named(debug_mask, binder_debug_mask, uint, 0644);
 
 static char *binder_devices_param = CONFIG_ANDROID_BINDER_DEVICES;
 module_param_named(devices, binder_devices_param, charp, S_IRUGO);
 
 static char *binder_devices_param = CONFIG_ANDROID_BINDER_DEVICES;
 module_param_named(devices, binder_devices_param, charp, S_IRUGO);
@@ -164,7 +160,7 @@ static int binder_set_stop_on_user_error(const char *val,
        return ret;
 }
 module_param_call(stop_on_user_error, binder_set_stop_on_user_error,
        return ret;
 }
 module_param_call(stop_on_user_error, binder_set_stop_on_user_error,
-       param_get_int, &binder_stop_on_user_error, S_IWUSR | S_IRUGO);
+       param_get_int, &binder_stop_on_user_error, 0644);
 
 #define binder_debug(mask, x...) \
        do { \
 
 #define binder_debug(mask, x...) \
        do { \
@@ -253,7 +249,7 @@ static struct binder_transaction_log_entry *binder_transaction_log_add(
        unsigned int cur = atomic_inc_return(&log->cur);
 
        if (cur >= ARRAY_SIZE(log->entry))
        unsigned int cur = atomic_inc_return(&log->cur);
 
        if (cur >= ARRAY_SIZE(log->entry))
-               log->full = 1;
+               log->full = true;
        e = &log->entry[cur % ARRAY_SIZE(log->entry)];
        WRITE_ONCE(e->debug_id_done, 0);
        /*
        e = &log->entry[cur % ARRAY_SIZE(log->entry)];
        WRITE_ONCE(e->debug_id_done, 0);
        /*
@@ -472,8 +468,9 @@ struct binder_ref {
 };
 
 enum binder_deferred_state {
 };
 
 enum binder_deferred_state {
-       BINDER_DEFERRED_FLUSH        = 0x01,
-       BINDER_DEFERRED_RELEASE      = 0x02,
+       BINDER_DEFERRED_PUT_FILES    = 0x01,
+       BINDER_DEFERRED_FLUSH        = 0x02,
+       BINDER_DEFERRED_RELEASE      = 0x04,
 };
 
 /**
 };
 
 /**
@@ -510,6 +507,9 @@ struct binder_priority {
  *                        (invariant after initialized)
  * @tsk                   task_struct for group_leader of process
  *                        (invariant after initialized)
  *                        (invariant after initialized)
  * @tsk                   task_struct for group_leader of process
  *                        (invariant after initialized)
+ * @files                 files_struct for process
+ *                        (protected by @files_lock)
+ * @files_lock            mutex to protect @files
  * @deferred_work_node:   element for binder_deferred_list
  *                        (protected by binder_deferred_lock)
  * @deferred_work:        bitmap of deferred work to perform
  * @deferred_work_node:   element for binder_deferred_list
  *                        (protected by binder_deferred_lock)
  * @deferred_work:        bitmap of deferred work to perform
@@ -554,6 +554,8 @@ struct binder_proc {
        struct list_head waiting_threads;
        int pid;
        struct task_struct *tsk;
        struct list_head waiting_threads;
        int pid;
        struct task_struct *tsk;
+       struct files_struct *files;
+       struct mutex files_lock;
        struct hlist_node deferred_work_node;
        int deferred_work;
        bool is_dead;
        struct hlist_node deferred_work_node;
        int deferred_work;
        bool is_dead;
@@ -949,33 +951,27 @@ static void binder_free_thread(struct binder_thread *thread);
 static void binder_free_proc(struct binder_proc *proc);
 static void binder_inc_node_tmpref_ilocked(struct binder_node *node);
 
 static void binder_free_proc(struct binder_proc *proc);
 static void binder_inc_node_tmpref_ilocked(struct binder_node *node);
 
-struct files_struct *binder_get_files_struct(struct binder_proc *proc)
-{
-       return get_files_struct(proc->tsk);
-}
-
 static int task_get_unused_fd_flags(struct binder_proc *proc, int flags)
 {
 static int task_get_unused_fd_flags(struct binder_proc *proc, int flags)
 {
-       struct files_struct *files;
        unsigned long rlim_cur;
        unsigned long irqs;
        int ret;
 
        unsigned long rlim_cur;
        unsigned long irqs;
        int ret;
 
-       files = binder_get_files_struct(proc);
-       if (files == NULL)
-               return -ESRCH;
-
+       mutex_lock(&proc->files_lock);
+       if (proc->files == NULL) {
+               ret = -ESRCH;
+               goto err;
+       }
        if (!lock_task_sighand(proc->tsk, &irqs)) {
                ret = -EMFILE;
                goto err;
        }
        if (!lock_task_sighand(proc->tsk, &irqs)) {
                ret = -EMFILE;
                goto err;
        }
-
        rlim_cur = task_rlimit(proc->tsk, RLIMIT_NOFILE);
        unlock_task_sighand(proc->tsk, &irqs);
 
        rlim_cur = task_rlimit(proc->tsk, RLIMIT_NOFILE);
        unlock_task_sighand(proc->tsk, &irqs);
 
-       ret = __alloc_fd(files, 0, rlim_cur, flags);
+       ret = __alloc_fd(proc->files, 0, rlim_cur, flags);
 err:
 err:
-       put_files_struct(files);
+       mutex_unlock(&proc->files_lock);
        return ret;
 }
 
        return ret;
 }
 
@@ -985,12 +981,10 @@ err:
 static void task_fd_install(
        struct binder_proc *proc, unsigned int fd, struct file *file)
 {
 static void task_fd_install(
        struct binder_proc *proc, unsigned int fd, struct file *file)
 {
-       struct files_struct *files = binder_get_files_struct(proc);
-
-       if (files) {
-               __fd_install(files, fd, file);
-               put_files_struct(files);
-       }
+       mutex_lock(&proc->files_lock);
+       if (proc->files)
+               __fd_install(proc->files, fd, file);
+       mutex_unlock(&proc->files_lock);
 }
 
 /*
 }
 
 /*
@@ -998,21 +992,22 @@ static void task_fd_install(
  */
 static long task_close_fd(struct binder_proc *proc, unsigned int fd)
 {
  */
 static long task_close_fd(struct binder_proc *proc, unsigned int fd)
 {
-       struct files_struct *files = binder_get_files_struct(proc);
        int retval;
 
        int retval;
 
-       if (files == NULL)
-               return -ESRCH;
-
-       retval = __close_fd(files, fd);
+       mutex_lock(&proc->files_lock);
+       if (proc->files == NULL) {
+               retval = -ESRCH;
+               goto err;
+       }
+       retval = __close_fd(proc->files, fd);
        /* can't restart close syscall because file table entry was cleared */
        if (unlikely(retval == -ERESTARTSYS ||
                     retval == -ERESTARTNOINTR ||
                     retval == -ERESTARTNOHAND ||
                     retval == -ERESTART_RESTARTBLOCK))
                retval = -EINTR;
        /* can't restart close syscall because file table entry was cleared */
        if (unlikely(retval == -ERESTARTSYS ||
                     retval == -ERESTARTNOINTR ||
                     retval == -ERESTARTNOHAND ||
                     retval == -ERESTART_RESTARTBLOCK))
                retval = -EINTR;
-       put_files_struct(files);
-
+err:
+       mutex_unlock(&proc->files_lock);
        return retval;
 }
 
        return retval;
 }
 
@@ -2156,8 +2151,14 @@ static void binder_send_failed_reply(struct binder_transaction *t,
                                        &target_thread->reply_error.work);
                                wake_up_interruptible(&target_thread->wait);
                        } else {
                                        &target_thread->reply_error.work);
                                wake_up_interruptible(&target_thread->wait);
                        } else {
-                               WARN(1, "Unexpected reply error: %u\n",
-                                               target_thread->reply_error.cmd);
+                               /*
+                                * Cannot get here for normal operation, but
+                                * we can if multiple synchronous transactions
+                                * are sent without blocking for responses.
+                                * Just ignore the 2nd error in this case.
+                                */
+                               pr_warn("Unexpected reply error: %u\n",
+                                       target_thread->reply_error.cmd);
                        }
                        binder_inner_proc_unlock(target_thread->proc);
                        binder_thread_dec_tmpref(target_thread);
                        }
                        binder_inner_proc_unlock(target_thread->proc);
                        binder_thread_dec_tmpref(target_thread);
@@ -2217,8 +2218,8 @@ static size_t binder_validate_object(struct binder_buffer *buffer, u64 offset)
        struct binder_object_header *hdr;
        size_t object_size = 0;
 
        struct binder_object_header *hdr;
        size_t object_size = 0;
 
-       if (offset > buffer->data_size - sizeof(*hdr) ||
-           buffer->data_size < sizeof(*hdr) ||
+       if (buffer->data_size < sizeof(*hdr) ||
+           offset > buffer->data_size - sizeof(*hdr) ||
            !IS_ALIGNED(offset, sizeof(u32)))
                return 0;
 
            !IS_ALIGNED(offset, sizeof(u32)))
                return 0;
 
@@ -2807,7 +2808,7 @@ static bool binder_proc_transaction(struct binder_transaction *t,
                if (node->has_async_transaction) {
                        pending_async = true;
                } else {
                if (node->has_async_transaction) {
                        pending_async = true;
                } else {
-                       node->has_async_transaction = 1;
+                       node->has_async_transaction = true;
                }
        }
 
                }
        }
 
@@ -3006,6 +3007,14 @@ static void binder_transaction(struct binder_proc *proc,
                        else
                                return_error = BR_DEAD_REPLY;
                        mutex_unlock(&context->context_mgr_node_lock);
                        else
                                return_error = BR_DEAD_REPLY;
                        mutex_unlock(&context->context_mgr_node_lock);
+                       if (target_node && target_proc == proc) {
+                               binder_user_error("%d:%d got transaction to context manager from process owning it\n",
+                                                 proc->pid, thread->pid);
+                               return_error = BR_FAILED_REPLY;
+                               return_error_param = -EINVAL;
+                               return_error_line = __LINE__;
+                               goto err_invalid_target_handle;
+                       }
                }
                if (!target_node) {
                        /*
                }
                if (!target_node) {
                        /*
@@ -3708,7 +3717,7 @@ static int binder_thread_write(struct binder_proc *proc,
                                w = binder_dequeue_work_head_ilocked(
                                                &buf_node->async_todo);
                                if (!w) {
                                w = binder_dequeue_work_head_ilocked(
                                                &buf_node->async_todo);
                                if (!w) {
-                                       buf_node->has_async_transaction = 0;
+                                       buf_node->has_async_transaction = false;
                                } else {
                                        binder_enqueue_work_ilocked(
                                                        w, &proc->todo);
                                } else {
                                        binder_enqueue_work_ilocked(
                                                        w, &proc->todo);
@@ -4139,6 +4148,7 @@ retry:
                        binder_inner_proc_unlock(proc);
                        if (put_user(e->cmd, (uint32_t __user *)ptr))
                                return -EFAULT;
                        binder_inner_proc_unlock(proc);
                        if (put_user(e->cmd, (uint32_t __user *)ptr))
                                return -EFAULT;
+                       cmd = e->cmd;
                        e->cmd = BR_OK;
                        ptr += sizeof(uint32_t);
 
                        e->cmd = BR_OK;
                        ptr += sizeof(uint32_t);
 
@@ -4600,8 +4610,29 @@ static int binder_thread_release(struct binder_proc *proc,
                if (t)
                        spin_lock(&t->lock);
        }
                if (t)
                        spin_lock(&t->lock);
        }
+
+       /*
+        * If this thread used poll, make sure we remove the waitqueue
+        * from any epoll data structures holding it with POLLFREE.
+        * waitqueue_active() is safe to use here because we're holding
+        * the inner lock.
+        */
+       if ((thread->looper & BINDER_LOOPER_STATE_POLL) &&
+           waitqueue_active(&thread->wait)) {
+               wake_up_poll(&thread->wait, POLLHUP | POLLFREE);
+       }
+
        binder_inner_proc_unlock(thread->proc);
 
        binder_inner_proc_unlock(thread->proc);
 
+       /*
+        * This is needed to avoid races between wake_up_poll() above and
+        * and ep_remove_waitqueue() called for other reasons (eg the epoll file
+        * descriptor being closed); ep_remove_waitqueue() holds an RCU read
+        * lock, so we can be sure it's done after calling synchronize_rcu().
+        */
+       if (thread->looper & BINDER_LOOPER_STATE_POLL)
+               synchronize_rcu();
+
        if (send_reply)
                binder_send_failed_reply(send_reply, BR_DEAD_REPLY);
        binder_release_work(proc, &thread->todo);
        if (send_reply)
                binder_send_failed_reply(send_reply, BR_DEAD_REPLY);
        binder_release_work(proc, &thread->todo);
@@ -4617,6 +4648,8 @@ static unsigned int binder_poll(struct file *filp,
        bool wait_for_proc_work;
 
        thread = binder_get_thread(proc);
        bool wait_for_proc_work;
 
        thread = binder_get_thread(proc);
+       if (!thread)
+               return POLLERR;
 
        binder_inner_proc_lock(thread->proc);
        thread->looper |= BINDER_LOOPER_STATE_POLL;
 
        binder_inner_proc_lock(thread->proc);
        thread->looper |= BINDER_LOOPER_STATE_POLL;
@@ -4908,6 +4941,7 @@ static void binder_vma_close(struct vm_area_struct *vma)
                     (vma->vm_end - vma->vm_start) / SZ_1K, vma->vm_flags,
                     (unsigned long)pgprot_val(vma->vm_page_prot));
        binder_alloc_vma_close(&proc->alloc);
                     (vma->vm_end - vma->vm_start) / SZ_1K, vma->vm_flags,
                     (unsigned long)pgprot_val(vma->vm_page_prot));
        binder_alloc_vma_close(&proc->alloc);
+       binder_defer_work(proc, BINDER_DEFERRED_PUT_FILES);
 }
 
 static int binder_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 }
 
 static int binder_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
@@ -4944,16 +4978,22 @@ static int binder_mmap(struct file *filp, struct vm_area_struct *vma)
                failure_string = "bad vm_flags";
                goto err_bad_arg;
        }
                failure_string = "bad vm_flags";
                goto err_bad_arg;
        }
-       vma->vm_flags = (vma->vm_flags | VM_DONTCOPY) & ~VM_MAYWRITE;
+       vma->vm_flags |= VM_DONTCOPY | VM_MIXEDMAP;
+       vma->vm_flags &= ~VM_MAYWRITE;
+
        vma->vm_ops = &binder_vm_ops;
        vma->vm_private_data = proc;
 
        ret = binder_alloc_mmap_handler(&proc->alloc, vma);
        vma->vm_ops = &binder_vm_ops;
        vma->vm_private_data = proc;
 
        ret = binder_alloc_mmap_handler(&proc->alloc, vma);
-
-       return ret;
+       if (ret)
+               return ret;
+       mutex_lock(&proc->files_lock);
+       proc->files = get_files_struct(current);
+       mutex_unlock(&proc->files_lock);
+       return 0;
 
 err_bad_arg:
 
 err_bad_arg:
-       pr_err("binder_mmap: %d %lx-%lx %s failed %d\n",
+       pr_err("%s: %d %lx-%lx %s failed %d\n", __func__,
               proc->pid, vma->vm_start, vma->vm_end, failure_string, ret);
        return ret;
 }
               proc->pid, vma->vm_start, vma->vm_end, failure_string, ret);
        return ret;
 }
@@ -4963,7 +5003,7 @@ static int binder_open(struct inode *nodp, struct file *filp)
        struct binder_proc *proc;
        struct binder_device *binder_dev;
 
        struct binder_proc *proc;
        struct binder_device *binder_dev;
 
-       binder_debug(BINDER_DEBUG_OPEN_CLOSE, "binder_open: %d:%d\n",
+       binder_debug(BINDER_DEBUG_OPEN_CLOSE, "%s: %d:%d\n", __func__,
                     current->group_leader->pid, current->pid);
 
        proc = kzalloc(sizeof(*proc), GFP_KERNEL);
                     current->group_leader->pid, current->pid);
 
        proc = kzalloc(sizeof(*proc), GFP_KERNEL);
@@ -4973,6 +5013,7 @@ static int binder_open(struct inode *nodp, struct file *filp)
        spin_lock_init(&proc->outer_lock);
        get_task_struct(current->group_leader);
        proc->tsk = current->group_leader;
        spin_lock_init(&proc->outer_lock);
        get_task_struct(current->group_leader);
        proc->tsk = current->group_leader;
+       mutex_init(&proc->files_lock);
        INIT_LIST_HEAD(&proc->todo);
        if (binder_supported_policy(current->policy)) {
                proc->default_priority.sched_policy = current->policy;
        INIT_LIST_HEAD(&proc->todo);
        if (binder_supported_policy(current->policy)) {
                proc->default_priority.sched_policy = current->policy;
@@ -5008,7 +5049,7 @@ static int binder_open(struct inode *nodp, struct file *filp)
                 * anyway print all contexts that a given PID has, so this
                 * is not a problem.
                 */
                 * anyway print all contexts that a given PID has, so this
                 * is not a problem.
                 */
-               proc->debugfs_entry = debugfs_create_file(strbuf, S_IRUGO,
+               proc->debugfs_entry = debugfs_create_file(strbuf, 0444,
                        binder_debugfs_dir_entry_proc,
                        (void *)(unsigned long)proc->pid,
                        &binder_proc_fops);
                        binder_debugfs_dir_entry_proc,
                        (void *)(unsigned long)proc->pid,
                        &binder_proc_fops);
@@ -5129,6 +5170,8 @@ static void binder_deferred_release(struct binder_proc *proc)
        struct rb_node *n;
        int threads, nodes, incoming_refs, outgoing_refs, active_transactions;
 
        struct rb_node *n;
        int threads, nodes, incoming_refs, outgoing_refs, active_transactions;
 
+       BUG_ON(proc->files);
+
        mutex_lock(&binder_procs_lock);
        hlist_del(&proc->proc_node);
        mutex_unlock(&binder_procs_lock);
        mutex_lock(&binder_procs_lock);
        hlist_del(&proc->proc_node);
        mutex_unlock(&binder_procs_lock);
@@ -5210,6 +5253,8 @@ static void binder_deferred_release(struct binder_proc *proc)
 static void binder_deferred_func(struct work_struct *work)
 {
        struct binder_proc *proc;
 static void binder_deferred_func(struct work_struct *work)
 {
        struct binder_proc *proc;
+       struct files_struct *files;
+
        int defer;
 
        do {
        int defer;
 
        do {
@@ -5226,11 +5271,23 @@ static void binder_deferred_func(struct work_struct *work)
                }
                mutex_unlock(&binder_deferred_lock);
 
                }
                mutex_unlock(&binder_deferred_lock);
 
+               files = NULL;
+               if (defer & BINDER_DEFERRED_PUT_FILES) {
+                       mutex_lock(&proc->files_lock);
+                       files = proc->files;
+                       if (files)
+                               proc->files = NULL;
+                       mutex_unlock(&proc->files_lock);
+               }
+
                if (defer & BINDER_DEFERRED_FLUSH)
                        binder_deferred_flush(proc);
 
                if (defer & BINDER_DEFERRED_RELEASE)
                        binder_deferred_release(proc); /* frees proc */
                if (defer & BINDER_DEFERRED_FLUSH)
                        binder_deferred_flush(proc);
 
                if (defer & BINDER_DEFERRED_RELEASE)
                        binder_deferred_release(proc); /* frees proc */
+
+               if (files)
+                       put_files_struct(files);
        } while (proc);
 }
 static DECLARE_WORK(binder_deferred_work, binder_deferred_func);
        } while (proc);
 }
 static DECLARE_WORK(binder_deferred_work, binder_deferred_func);
@@ -5898,7 +5955,9 @@ static int __init binder_init(void)
        struct binder_device *device;
        struct hlist_node *tmp;
 
        struct binder_device *device;
        struct hlist_node *tmp;
 
-       binder_alloc_shrinker_init();
+       ret = binder_alloc_shrinker_init();
+       if (ret)
+               return ret;
 
        atomic_set(&binder_transaction_log.cur, ~0U);
        atomic_set(&binder_transaction_log_failed.cur, ~0U);
 
        atomic_set(&binder_transaction_log.cur, ~0U);
        atomic_set(&binder_transaction_log_failed.cur, ~0U);
@@ -5910,27 +5969,27 @@ static int __init binder_init(void)
 
        if (binder_debugfs_dir_entry_root) {
                debugfs_create_file("state",
 
        if (binder_debugfs_dir_entry_root) {
                debugfs_create_file("state",
-                                   S_IRUGO,
+                                   0444,
                                    binder_debugfs_dir_entry_root,
                                    NULL,
                                    &binder_state_fops);
                debugfs_create_file("stats",
                                    binder_debugfs_dir_entry_root,
                                    NULL,
                                    &binder_state_fops);
                debugfs_create_file("stats",
-                                   S_IRUGO,
+                                   0444,
                                    binder_debugfs_dir_entry_root,
                                    NULL,
                                    &binder_stats_fops);
                debugfs_create_file("transactions",
                                    binder_debugfs_dir_entry_root,
                                    NULL,
                                    &binder_stats_fops);
                debugfs_create_file("transactions",
-                                   S_IRUGO,
+                                   0444,
                                    binder_debugfs_dir_entry_root,
                                    NULL,
                                    &binder_transactions_fops);
                debugfs_create_file("transaction_log",
                                    binder_debugfs_dir_entry_root,
                                    NULL,
                                    &binder_transactions_fops);
                debugfs_create_file("transaction_log",
-                                   S_IRUGO,
+                                   0444,
                                    binder_debugfs_dir_entry_root,
                                    &binder_transaction_log,
                                    &binder_transaction_log_fops);
                debugfs_create_file("failed_transaction_log",
                                    binder_debugfs_dir_entry_root,
                                    &binder_transaction_log,
                                    &binder_transaction_log_fops);
                debugfs_create_file("failed_transaction_log",
-                                   S_IRUGO,
+                                   0444,
                                    binder_debugfs_dir_entry_root,
                                    &binder_transaction_log_failed,
                                    &binder_transaction_log_fops);
                                    binder_debugfs_dir_entry_root,
                                    &binder_transaction_log_failed,
                                    &binder_transaction_log_fops);
index f13def03ca5be80dad3de651f3312a5c5654d4c5..bbd59c336cc976abaf89ebd66131adc9c4a5bc37 100644 (file)
@@ -218,7 +218,7 @@ static int binder_update_page_range(struct binder_alloc *alloc, int allocate,
                mm = alloc->vma_vm_mm;
 
        if (mm) {
                mm = alloc->vma_vm_mm;
 
        if (mm) {
-               down_write(&mm->mmap_sem);
+               down_read(&mm->mmap_sem);
                vma = alloc->vma;
        }
 
                vma = alloc->vma;
        }
 
@@ -287,7 +287,7 @@ static int binder_update_page_range(struct binder_alloc *alloc, int allocate,
                /* vm_insert_page does not seem to increment the refcount */
        }
        if (mm) {
                /* vm_insert_page does not seem to increment the refcount */
        }
        if (mm) {
-               up_write(&mm->mmap_sem);
+               up_read(&mm->mmap_sem);
                mmput(mm);
        }
        return 0;
                mmput(mm);
        }
        return 0;
@@ -320,7 +320,7 @@ err_page_ptr_cleared:
        }
 err_no_vma:
        if (mm) {
        }
 err_no_vma:
        if (mm) {
-               up_write(&mm->mmap_sem);
+               up_read(&mm->mmap_sem);
                mmput(mm);
        }
        return vma ? -ENOMEM : -ESRCH;
                mmput(mm);
        }
        return vma ? -ENOMEM : -ESRCH;
@@ -1005,8 +1005,14 @@ void binder_alloc_init(struct binder_alloc *alloc)
        INIT_LIST_HEAD(&alloc->buffers);
 }
 
        INIT_LIST_HEAD(&alloc->buffers);
 }
 
-void binder_alloc_shrinker_init(void)
+int binder_alloc_shrinker_init(void)
 {
 {
-       list_lru_init(&binder_alloc_lru);
-       register_shrinker(&binder_shrinker);
+       int ret = list_lru_init(&binder_alloc_lru);
+
+       if (ret == 0) {
+               ret = register_shrinker(&binder_shrinker);
+               if (ret)
+                       list_lru_destroy(&binder_alloc_lru);
+       }
+       return ret;
 }
 }
index c4b49e24e5fa027e8d0c1ee400970a29bd2d083b..fb3238c74c8a8671282cf9a428febaf182880821 100644 (file)
@@ -129,7 +129,7 @@ extern struct binder_buffer *binder_alloc_new_buf(struct binder_alloc *alloc,
                                                  size_t extra_buffers_size,
                                                  int is_async);
 extern void binder_alloc_init(struct binder_alloc *alloc);
                                                  size_t extra_buffers_size,
                                                  int is_async);
 extern void binder_alloc_init(struct binder_alloc *alloc);
-void binder_alloc_shrinker_init(void);
+extern int binder_alloc_shrinker_init(void);
 extern void binder_alloc_vma_close(struct binder_alloc *alloc);
 extern struct binder_buffer *
 binder_alloc_prepare_to_free(struct binder_alloc *alloc,
 extern void binder_alloc_vma_close(struct binder_alloc *alloc);
 extern struct binder_buffer *
 binder_alloc_prepare_to_free(struct binder_alloc *alloc,
index 1e4913e5e5c7520a788ee1fea5ae2b1ea5c5e668..d2281e30631d5d02b637715b31f282a11000ddf6 100755 (executable)
@@ -700,6 +700,7 @@ struct mfc_charger_data {
        struct wake_lock wpc_opfq_lock;
        struct wake_lock wpc_afc_vout_lock;
        struct wake_lock wpc_vout_mode_lock;
        struct wake_lock wpc_opfq_lock;
        struct wake_lock wpc_afc_vout_lock;
        struct wake_lock wpc_vout_mode_lock;
+       struct wake_lock wpc_tx_id_lock;
        struct workqueue_struct *wqueue;
        struct work_struct      wcin_work;
        struct delayed_work     wpc_det_work;
        struct workqueue_struct *wqueue;
        struct work_struct      wcin_work;
        struct delayed_work     wpc_det_work;
@@ -731,6 +732,7 @@ struct mfc_charger_data {
        bool is_afc_tx;
        bool tx_id_done;
        int tx_id;
        bool is_afc_tx;
        bool tx_id_done;
        int tx_id;
+       int tx_id_cnt;
        u8 device_event;
 
        int i2c_error_count;
        u8 device_event;
 
        int i2c_error_count;
index ec9ce8b5f89dcc53544ef9f64e8e2bff896e5082..66ed5d90d1b1d93a1a8679b2ba47feb17194d2ba 100755 (executable)
@@ -789,6 +789,7 @@ struct sec_battery_platform_data {
        unsigned int sleep_mode_limit_current;
        unsigned int wc_full_input_limit_current;
        unsigned int wc_cv_current;
        unsigned int sleep_mode_limit_current;
        unsigned int wc_full_input_limit_current;
        unsigned int wc_cv_current;
+       unsigned int wc_cv_tx_current;
        unsigned int wc_cv_pack_current;
        unsigned int max_charging_current;
        int mix_high_temp;
        unsigned int wc_cv_pack_current;
        unsigned int max_charging_current;
        int mix_high_temp;
index 827dd8e6c50c6acf4a81dff4d47b4861ed637b0c..5c5ae23aa1290850e49c734bd4154adf9fb3b3fd 100755 (executable)
@@ -2492,24 +2492,18 @@ static void mfc_wpc_det_work(struct work_struct *work)
                                value.intval = SEC_WIRELESS_PAD_WPC_HV;
                                psy_do_property("wireless", set,
                                        POWER_SUPPLY_PROP_ONLINE, value);
                                value.intval = SEC_WIRELESS_PAD_WPC_HV;
                                psy_do_property("wireless", set,
                                        POWER_SUPPLY_PROP_ONLINE, value);
-
-                               /* request tx id */
-                               queue_delayed_work(charger->wqueue, &charger->wpc_tx_id_work, msecs_to_jiffies(500));
                        } else {
                                /* send request afc_tx */
                                mfc_send_command(charger, MFC_REQUEST_AFC_TX);
                        }
                        } else {
                                /* send request afc_tx */
                                mfc_send_command(charger, MFC_REQUEST_AFC_TX);
                        }
-               } else {
-                       /* request tx id */
-                       queue_delayed_work(charger->wqueue, &charger->wpc_tx_id_work, msecs_to_jiffies(500));
                }
 #endif
                /* set rpp scaling factor for LED cover */
                mfc_rpp_set(charger);
                }
 #endif
                /* set rpp scaling factor for LED cover */
                mfc_rpp_set(charger);
-#if 0
-               /* set request TX_ID */
-               mfc_send_command(charger, MFC_REQUEST_TX_ID);
-#endif
+
+               wake_lock(&charger->wpc_tx_id_lock);
+               /* request tx id */
+               queue_delayed_work(charger->wqueue, &charger->wpc_tx_id_work, msecs_to_jiffies(2500));
 
                charger->pdata->is_charging = 1;
        } else if ((charger->wc_w_state == 1) && (wc_w_state == 0)) {
 
                charger->pdata->is_charging = 1;
        } else if ((charger->wc_w_state == 1) && (wc_w_state == 0)) {
@@ -2527,6 +2521,7 @@ static void mfc_wpc_det_work(struct work_struct *work)
                charger->is_afc_tx = false;
                charger->tx_id = 0;
                charger->i2c_error_count = 0;
                charger->is_afc_tx = false;
                charger->tx_id = 0;
                charger->i2c_error_count = 0;
+               charger->tx_id_cnt = 0;
                charger->tx_id_done = false;
                charger->device_event = 0;
 
                charger->tx_id_done = false;
                charger->device_event = 0;
 
@@ -2561,6 +2556,7 @@ static void mfc_wpc_det_work(struct work_struct *work)
                cancel_delayed_work(&charger->wpc_opfq_work);
                cancel_delayed_work(&charger->wpc_tx_id_work);
                cancel_delayed_work(&charger->wpc_i2c_error_work);
                cancel_delayed_work(&charger->wpc_opfq_work);
                cancel_delayed_work(&charger->wpc_tx_id_work);
                cancel_delayed_work(&charger->wpc_i2c_error_work);
+               wake_unlock(&charger->wpc_tx_id_lock);
        }
 
        pr_info("%s: w(%d to %d)\n", __func__,
        }
 
        pr_info("%s: w(%d to %d)\n", __func__,
@@ -2740,8 +2736,6 @@ static void mfc_wpc_isr_work(struct work_struct *work)
                                pr_info("%s: unsupport : 0x%x", __func__, val_data);
                                break;
                        }
                                pr_info("%s: unsupport : 0x%x", __func__, val_data);
                                break;
                        }
-
-                       queue_delayed_work(charger->wqueue, &charger->wpc_tx_id_work, msecs_to_jiffies(500));
                } else if (cmd_data == WPC_TX_COM_TX_ID) {
                        if (!charger->tx_id_done) {
                                switch (val_data) {
                } else if (cmd_data == WPC_TX_COM_TX_ID) {
                        if (!charger->tx_id_done) {
                                switch (val_data) {
@@ -2878,8 +2872,22 @@ static void mfc_wpc_tx_id_work(struct work_struct *work)
                container_of(work, struct mfc_charger_data, wpc_tx_id_work.work);
 
        pr_info("%s\n",__func__);
                container_of(work, struct mfc_charger_data, wpc_tx_id_work.work);
 
        pr_info("%s\n",__func__);
-       
+
        mfc_send_command(charger, MFC_REQUEST_TX_ID);
        mfc_send_command(charger, MFC_REQUEST_TX_ID);
+       charger->tx_id_cnt++;
+
+       if ((charger->tx_id_cnt <= 10) && !charger->tx_id) {
+               pr_info("%s: request TX ID (%d)\n", __func__, charger->tx_id_cnt);
+               queue_delayed_work(charger->wqueue, &charger->wpc_tx_id_work, msecs_to_jiffies(1500));
+               return;
+       } else {
+               if (charger->tx_id)
+                       pr_info("%s: TX ID (0x%x)\n", __func__, charger->tx_id);
+               else
+                       pr_info("%s: TX ID not Received\n", __func__);
+               charger->tx_id_cnt = 0;
+       }
+       wake_unlock(&charger->wpc_tx_id_lock);
 }
 
 /*
 }
 
 /*
@@ -3523,6 +3531,8 @@ static int mfc_charger_probe(
                        "wpc_afc_vout_lock");
        wake_lock_init(&charger->wpc_vout_mode_lock, WAKE_LOCK_SUSPEND,
                        "wpc_vout_mode_lock");
                        "wpc_afc_vout_lock");
        wake_lock_init(&charger->wpc_vout_mode_lock, WAKE_LOCK_SUSPEND,
                        "wpc_vout_mode_lock");
+       wake_lock_init(&charger->wpc_tx_id_lock, WAKE_LOCK_SUSPEND,
+                       "wpc_tx_id_lock");
 
        /* Enable interrupts after battery driver load */
        /* wpc_det */
 
        /* Enable interrupts after battery driver load */
        /* wpc_det */
@@ -3539,20 +3549,12 @@ static int mfc_charger_probe(
        }
 
        /* wpc_irq */
        }
 
        /* wpc_irq */
-       queue_delayed_work(charger->wqueue, &charger->wpc_int_req_work, msecs_to_jiffies(100));
+       queue_delayed_work(charger->wqueue, &charger->wpc_int_req_work, 0);
 
        wc_w_state_irq = gpio_get_value(charger->pdata->wpc_int);
        pr_info("%s wc_w_state_irq = %d\n", __func__, wc_w_state_irq);
        if (gpio_get_value(charger->pdata->wpc_det)) {
 
        wc_w_state_irq = gpio_get_value(charger->pdata->wpc_int);
        pr_info("%s wc_w_state_irq = %d\n", __func__, wc_w_state_irq);
        if (gpio_get_value(charger->pdata->wpc_det)) {
-               u8 irq_src[2];
                pr_info("%s: Charger interrupt occured during lpm \n", __func__);
                pr_info("%s: Charger interrupt occured during lpm \n", __func__);
-
-               mfc_reg_read(charger->client, MFC_INT_A_L_REG, &irq_src[0]);
-               mfc_reg_read(charger->client, MFC_INT_A_H_REG, &irq_src[1]);
-               /* clear intterupt */
-               mfc_reg_write(charger->client, MFC_INT_A_CLEAR_L_REG, irq_src[0]); // clear int
-               mfc_reg_write(charger->client, MFC_INT_A_CLEAR_H_REG, irq_src[1]); // clear int
-               mfc_set_cmd_l_reg(charger, 0x20, MFC_CMD_CLEAR_INT_MASK); // command
                queue_delayed_work(charger->wqueue, &charger->wpc_det_work, 0);
                if(!wc_w_state_irq && !delayed_work_pending(&charger->wpc_isr_work))
                        queue_delayed_work(charger->wqueue, &charger->wpc_isr_work, msecs_to_jiffies(2000));
                queue_delayed_work(charger->wqueue, &charger->wpc_det_work, 0);
                if(!wc_w_state_irq && !delayed_work_pending(&charger->wpc_isr_work))
                        queue_delayed_work(charger->wqueue, &charger->wpc_isr_work, msecs_to_jiffies(2000));
@@ -3634,13 +3636,12 @@ static void mfc_charger_shutdown(struct i2c_client *client)
        struct mfc_charger_data *charger = i2c_get_clientdata(client);
 
        pr_info("%s\n", __func__);
        struct mfc_charger_data *charger = i2c_get_clientdata(client);
 
        pr_info("%s\n", __func__);
-       if (charger->pdata->is_charging) {
-               mfc_set_vrect_adjust(charger, MFC_HEADROOM_1);
 
 
-               if (charger->pad_vout == PAD_VOUT_5V &&
-                       charger->pdata->vout_status == MFC_VOUT_5_5V) {
-                       mfc_set_vout(charger, MFC_VOUT_5V);
-               }
+       if (gpio_get_value(charger->pdata->wpc_det)) {
+               mfc_set_vrect_adjust(charger, MFC_HEADROOM_1);
+               mfc_set_vout(charger, MFC_VOUT_5V);
+               pr_info("%s: forced 5V Vout, wc_w_state_irq = %d\n",
+                       __func__, gpio_get_value(charger->pdata->wpc_int));
        }
 }
 
        }
 }
 
index 7ff91a9321eafb3c136c80003ce817d682914909..8af67d97cead2c7152b00a5433fbf6d25c55c1cc 100755 (executable)
@@ -401,6 +401,9 @@ static int sec_bat_get_wireless_current(struct sec_battery_info *battery, int in
                        if (battery->cable_type == SEC_BATTERY_CABLE_WIRELESS_PACK) {
                                if (incurr > battery->pdata->wc_cv_pack_current)
                                        incurr = battery->pdata->wc_cv_pack_current;
                        if (battery->cable_type == SEC_BATTERY_CABLE_WIRELESS_PACK) {
                                if (incurr > battery->pdata->wc_cv_pack_current)
                                        incurr = battery->pdata->wc_cv_pack_current;
+                       } else if (battery->cable_type == SEC_BATTERY_CABLE_WIRELESS_TX) {
+                               if (incurr > battery->pdata->wc_cv_tx_current)
+                                       incurr = battery->pdata->wc_cv_tx_current;
                        } else if (incurr > battery->pdata->wc_cv_current) {
                                incurr = battery->pdata->wc_cv_current;
                        }
                        } else if (incurr > battery->pdata->wc_cv_current) {
                                incurr = battery->pdata->wc_cv_current;
                        }
@@ -8352,6 +8355,13 @@ static int sec_bat_parse_dt(struct device *dev,
                pdata->wc_cv_current = 820;
        }
 
                pdata->wc_cv_current = 820;
        }
 
+       ret = of_property_read_u32(np, "battery,wc_cv_tx_current",
+               &pdata->wc_cv_tx_current);
+       if (ret) {
+               pr_info("%s : wc_cv_tx_current is Empty\n", __func__);
+               pdata->wc_cv_tx_current = 650;
+       }
+
        ret = of_property_read_u32(np, "battery,wc_cv_pack_current",
                &pdata->wc_cv_pack_current);
        if (ret) {
        ret = of_property_read_u32(np, "battery,wc_cv_pack_current",
                &pdata->wc_cv_pack_current);
        if (ret) {
index 77b9ba892bfd72ec2c53c1150876c5d666da1242..a140c48e229965dbd05ee3032c677c16bcdff00b 100644 (file)
@@ -1951,7 +1951,7 @@ EXPORT_SYMBOL_GPL(clk_is_match);
 
 /***        debugfs support        ***/
 
 
 /***        debugfs support        ***/
 
-#ifdef CONFIG_DEBUG_FS
+#if defined(CONFIG_DEBUG_FS) && !defined(CONFIG_ARCH_EXYNOS)
 #include <linux/debugfs.h>
 
 static struct dentry *rootdir;
 #include <linux/debugfs.h>
 
 static struct dentry *rootdir;
index 856f3890d02718dede2637c9ea41f3187e3f8a23..60176d52b23d48af7a69b9df400c09bf648843c3 100644 (file)
@@ -1176,6 +1176,10 @@ static ssize_t show_trace_dump(struct device *dev, struct device_attribute *attr
 
                kbasep_trace_format_msg(trace_msg, buffer, KBASE_TRACE_SIZE);
                ret += snprintf(buf+ret, PAGE_SIZE-ret, "%s\n", buffer);
 
                kbasep_trace_format_msg(trace_msg, buffer, KBASE_TRACE_SIZE);
                ret += snprintf(buf+ret, PAGE_SIZE-ret, "%s\n", buffer);
+
+        if (ret >= PAGE_SIZE - 1)
+            break;
+
                start = (start + 1) & KBASE_TRACE_MASK;
        }
 
                start = (start + 1) & KBASE_TRACE_MASK;
        }
 
index 5f804fd0af9b1d0b60c35801ab6b7fe35ae63595..14700cf07bb0b9cad605cb6ebaf611e5599d1c34 100644 (file)
@@ -66,8 +66,10 @@ int gpu_pm_qos_command(struct exynos_context *platform, gpu_pmqos_state state)
                        pm_qos_add_request(&exynos5_g3d_mif_max_qos, PM_QOS_BUS_THROUGHPUT_MAX, PM_QOS_BUS_THROUGHPUT_MAX_DEFAULT_VALUE);
                pm_qos_add_request(&exynos5_g3d_cpu_cluster0_min_qos, PM_QOS_CLUSTER0_FREQ_MIN, 0);
                pm_qos_add_request(&exynos5_g3d_cpu_cluster1_max_qos, PM_QOS_CLUSTER1_FREQ_MAX, PM_QOS_CLUSTER1_FREQ_MAX_DEFAULT_VALUE);
                        pm_qos_add_request(&exynos5_g3d_mif_max_qos, PM_QOS_BUS_THROUGHPUT_MAX, PM_QOS_BUS_THROUGHPUT_MAX_DEFAULT_VALUE);
                pm_qos_add_request(&exynos5_g3d_cpu_cluster0_min_qos, PM_QOS_CLUSTER0_FREQ_MIN, 0);
                pm_qos_add_request(&exynos5_g3d_cpu_cluster1_max_qos, PM_QOS_CLUSTER1_FREQ_MAX, PM_QOS_CLUSTER1_FREQ_MAX_DEFAULT_VALUE);
+#if PM_QOS_CPU_CLUSTER_NUM == 2
                if (platform->boost_egl_min_lock)
                        pm_qos_add_request(&exynos5_g3d_cpu_cluster1_min_qos, PM_QOS_CLUSTER1_FREQ_MIN, 0);
                if (platform->boost_egl_min_lock)
                        pm_qos_add_request(&exynos5_g3d_cpu_cluster1_min_qos, PM_QOS_CLUSTER1_FREQ_MIN, 0);
+#endif
 #if PM_QOS_CPU_CLUSTER_NUM == 3
                pm_qos_add_request(&exynos5_g3d_cpu_cluster1_min_qos, PM_QOS_CLUSTER1_FREQ_MIN, 0);
                pm_qos_add_request(&exynos5_g3d_cpu_cluster2_max_qos, PM_QOS_CLUSTER2_FREQ_MAX, PM_QOS_CLUSTER2_FREQ_MAX_DEFAULT_VALUE);
 #if PM_QOS_CPU_CLUSTER_NUM == 3
                pm_qos_add_request(&exynos5_g3d_cpu_cluster1_min_qos, PM_QOS_CLUSTER1_FREQ_MIN, 0);
                pm_qos_add_request(&exynos5_g3d_cpu_cluster2_max_qos, PM_QOS_CLUSTER2_FREQ_MAX, PM_QOS_CLUSTER2_FREQ_MAX_DEFAULT_VALUE);
index ea96171fe7e50085cfc2cd912a994e0889d92985..0d56cb340b08c3c6df795c80ecb1d67914b3b661 100644 (file)
@@ -19,6 +19,13 @@ config BCM4343
          This module adds support for wireless adapters based on
          Broadcom 4343 chipset.
 
          This module adds support for wireless adapters based on
          Broadcom 4343 chipset.
 
+config BCM43436
+        tristate "Broadcom 43436 wireless cards support"
+        depends on BROADCOM_WIFI
+        ---help---
+          This module adds support for wireless adapters based on
+          Broadcom 43436 chipset.
+
 config BCM4334
        tristate "Broadcom 4334 wireless cards support"
        depends on BROADCOM_WIFI
 config BCM4334
        tristate "Broadcom 4334 wireless cards support"
        depends on BROADCOM_WIFI
@@ -139,7 +146,7 @@ config BROADCOM_WIFI_RESERVED_MEM
 
 config WIFI_BROADCOM_COB
         bool "BROADCOM WIFI COB"
 
 config WIFI_BROADCOM_COB
         bool "BROADCOM WIFI COB"
-        depends on (BCM43456 || BCM43455 || BCM4343 || BCM43454 || BCM43012)
+        depends on (BCM43456 || BCM43455 || BCM4343 || BCM43436 || BCM43454 || BCM43012)
         ---help---
           This is a configuration for Broadcom WIFI COB Type.
 
         ---help---
           This is a configuration for Broadcom WIFI COB Type.
 
@@ -230,6 +237,18 @@ config SPLIT_ARGOS_SET
        ---help---
        To support SPLIT_ARGOS_SET
 
        ---help---
        To support SPLIT_ARGOS_SET
 
+config WLAN_GRACE
+       bool "Model code for GRACE"
+       depends on BROADCOM_WIFI
+       ---help---
+         This is configuration for Grace feature
+
+config WLAN_GREAT
+       bool "model code for GREAT"
+       depends on BROADCOM_WIFI
+       ---help---
+         This is configuration for Great feature
+
 config BCM_DETECT_CONSECUTIVE_HANG
        bool "Detect consecutive hang event"
        depends on BROADCOM_WIFI
 config BCM_DETECT_CONSECUTIVE_HANG
        bool "Detect consecutive hang event"
        depends on BROADCOM_WIFI
index a89c70c55d7204c88cafa0cbce3852d32e763eb6..7bef80f365dffbbe5fb07a64fbf7bd9248eba4fe 100644 (file)
@@ -102,12 +102,10 @@ endif
 ifeq ($(filter y,$(CONFIG_ARCH_SM8150) $(CONFIG_SOC_EXYNOS8890)),y)
        DHDCFLAGS += -DWAKEUP_KSOFTIRQD_POST_NAPI_SCHEDULE
 endif
 ifeq ($(filter y,$(CONFIG_ARCH_SM8150) $(CONFIG_SOC_EXYNOS8890)),y)
        DHDCFLAGS += -DWAKEUP_KSOFTIRQD_POST_NAPI_SCHEDULE
 endif
-       # Extended HANG event with reason codes
-       DHDCFLAGS += -DDHD_USE_EXTENDED_HANG_REASON
        # DHDCFLAGS += -DDHD_RECOVER_TIMEOUT
        # HEAP ASLR
        DHDCFLAGS += -DBCM_ASLR_HEAP
        # DHDCFLAGS += -DDHD_RECOVER_TIMEOUT
        # HEAP ASLR
        DHDCFLAGS += -DBCM_ASLR_HEAP
-ifeq ($(filter y,$(CONFIG_SOC_EXYNOS8895) $(CONFIG_SOC_EXYNOS9810) $(CONFIG_ARCH_SDM845)),y)
+ifeq ($(filter y,$(CONFIG_SOC_EXYNOS8895) $(CONFIG_ARCH_MSM8998) $(CONFIG_SOC_EXYNOS9810) $(CONFIG_ARCH_SDM845)),y)
        # Default Tx LB Enable
        DHDCFLAGS += -DDHD_LB_TXP_DEFAULT_ENAB
 endif
        # Default Tx LB Enable
        DHDCFLAGS += -DDHD_LB_TXP_DEFAULT_ENAB
 endif
@@ -174,6 +172,7 @@ DHDCFLAGS += -DROAM_ENABLE -DROAM_CHANNEL_CACHE -DROAM_API
 DHDCFLAGS += -DENABLE_FW_ROAM_SUSPEND
 DHDCFLAGS += -DDHD_LOSSLESS_ROAMING
 DHDCFLAGS += -DSKIP_ROAM_TRIGGER_RESET
 DHDCFLAGS += -DENABLE_FW_ROAM_SUSPEND
 DHDCFLAGS += -DDHD_LOSSLESS_ROAMING
 DHDCFLAGS += -DSKIP_ROAM_TRIGGER_RESET
+DHDCFLAGS += -DROAM_EVT_DISABLE
 
 # Enable Roam time thresh
 DHDCFLAGS += -DENABLE_MAX_DTIM_IN_SUSPEND
 
 # Enable Roam time thresh
 DHDCFLAGS += -DENABLE_MAX_DTIM_IN_SUSPEND
@@ -214,6 +213,8 @@ DHDCFLAGS += -DUNSET_FW_ROAM_WIPHY_FLAG
 DHDCFLAGS += -DCUSTOM_LONG_RETRY_LIMIT=12
 DHDCFLAGS += -DDISABLE_ANDROID_PNO
 DHDCFLAGS += -DSUPPORT_SET_TID
 DHDCFLAGS += -DCUSTOM_LONG_RETRY_LIMIT=12
 DHDCFLAGS += -DDISABLE_ANDROID_PNO
 DHDCFLAGS += -DSUPPORT_SET_TID
+# Extended HANG event with reason codes
+DHDCFLAGS += -DDHD_USE_EXTENDED_HANG_REASON
 
 # For special PNO Event keep wake lock for 10sec
 DHDCFLAGS += -DCUSTOM_PNO_EVENT_LOCK_xTIME=10
 
 # For special PNO Event keep wake lock for 10sec
 DHDCFLAGS += -DCUSTOM_PNO_EVENT_LOCK_xTIME=10
@@ -436,6 +437,7 @@ endif
   DHDCFLAGS += -DWL11U -DMFP
   DHDCFLAGS += -DBCMCCX
   DHDCFLAGS += -DWES_SUPPORT
   DHDCFLAGS += -DWL11U -DMFP
   DHDCFLAGS += -DBCMCCX
   DHDCFLAGS += -DWES_SUPPORT
+  DHDCFLAGS += -DSUPPORT_RESTORE_SCAN_PARAMS
   DHDCFLAGS += -DOKC_SUPPORT
   DHDCFLAGS += -DWLTDLS
   DHDCFLAGS += -DWLFBT
   DHDCFLAGS += -DOKC_SUPPORT
   DHDCFLAGS += -DWLTDLS
   DHDCFLAGS += -DWLFBT
@@ -542,6 +544,8 @@ ifeq ($(CONFIG_SEC_FACTORY),y)
   DHDCFLAGS += -DDHD_NON_DMA_M2M_CORRUPTION
 # Detect FW Memory Corruption
   DHDCFLAGS += -DDHD_FW_MEM_CORRUPTION
   DHDCFLAGS += -DDHD_NON_DMA_M2M_CORRUPTION
 # Detect FW Memory Corruption
   DHDCFLAGS += -DDHD_FW_MEM_CORRUPTION
+# Detect turn on failure
+  DHDCFLAGS += -DBCM_DETECT_TURN_ON_FAILURE
 endif # CONFIG_SEC_FACTORY
 
 ifeq ($(CONFIG_BCM4375),y)
 endif # CONFIG_SEC_FACTORY
 
 ifeq ($(CONFIG_BCM4375),y)
@@ -577,12 +581,11 @@ endif
  DHDCFLAGS += -DCUSTOM_BLOCK_DEAUTH_AT_EAP_FAILURE
 # Customer ocl disabe
  DHDCFLAGS += -DCUSTOM_SET_OCLOFF
  DHDCFLAGS += -DCUSTOM_BLOCK_DEAUTH_AT_EAP_FAILURE
 # Customer ocl disabe
  DHDCFLAGS += -DCUSTOM_SET_OCLOFF
+#FAKEAP
+ DHDCFLAGS += -DWL_BCNRECV
  DHDCFLAGS += -DWL_STATIC_IF
  DHDCFLAGS += -DWL_STATIC_IFNAME_PREFIX="\"swlan0\""
 
  DHDCFLAGS += -DWL_STATIC_IF
  DHDCFLAGS += -DWL_STATIC_IFNAME_PREFIX="\"swlan0\""
 
-#Iface force dev close
-DHDCFLAGS += -DIFACE_HANG_FORCE_DEV_CLOSE
-
 # tput enhancement for PCIE
 ifeq ($(BUS_IFACE_PCIE),y)
   DHDCFLAGS += -DCUSTOM_TCPACK_SUPP_RATIO=15
 # tput enhancement for PCIE
 ifeq ($(BUS_IFACE_PCIE),y)
   DHDCFLAGS += -DCUSTOM_TCPACK_SUPP_RATIO=15
@@ -616,6 +619,7 @@ endif
   DHDCFLAGS += -DWL11U -DMFP
   DHDCFLAGS += -DBCMCCX
   DHDCFLAGS += -DWES_SUPPORT
   DHDCFLAGS += -DWL11U -DMFP
   DHDCFLAGS += -DBCMCCX
   DHDCFLAGS += -DWES_SUPPORT
+  DHDCFLAGS += -DSUPPORT_RESTORE_SCAN_PARAMS
   DHDCFLAGS += -DOKC_SUPPORT
   DHDCFLAGS += -DWLTDLS
   DHDCFLAGS += -DWLFBT
   DHDCFLAGS += -DOKC_SUPPORT
   DHDCFLAGS += -DWLTDLS
   DHDCFLAGS += -DWLFBT
@@ -706,6 +710,8 @@ ifeq ($(filter y,$(CONFIG_WLAN_GREAT) $(CONFIG_SEC_GREATQLTE_PROJECT) $(CONFIG_S
   DHDCFLAGS += -DBIGDATA_SOFTAP
 # Enable DHD_DUMP_MNGR
   DHDCFLAGS += -DDHD_DUMP_MNGR
   DHDCFLAGS += -DBIGDATA_SOFTAP
 # Enable DHD_DUMP_MNGR
   DHDCFLAGS += -DDHD_DUMP_MNGR
+# Iface force dev close
+  DHDCFLAGS += -DIFACE_HANG_FORCE_DEV_CLOSE
 endif
 
 # Use Legacy dump path
 endif
 
 # Use Legacy dump path
@@ -728,6 +734,8 @@ ifeq ($(CONFIG_SEC_FACTORY),y)
   DHDCFLAGS += -DDHD_NON_DMA_M2M_CORRUPTION
 # Detect FW Memory Corruption
   DHDCFLAGS += -DDHD_FW_MEM_CORRUPTION
   DHDCFLAGS += -DDHD_NON_DMA_M2M_CORRUPTION
 # Detect FW Memory Corruption
   DHDCFLAGS += -DDHD_FW_MEM_CORRUPTION
+# Detect turn on failure
+  DHDCFLAGS += -DBCM_DETECT_TURN_ON_FAILURE
 endif # CONFIG_SEC_FACTORY
 
 ifeq ($(CONFIG_BCM4361),y)
 endif # CONFIG_SEC_FACTORY
 
 ifeq ($(CONFIG_BCM4361),y)
@@ -752,8 +760,6 @@ ifneq ($(CONFIG_BCM4359),)
   DHDCFLAGS += -DDISABLE_PM_BCNRX
   DHDCFLAGS += -DWL_STATIC_IF
   DHDCFLAGS += -DWL_STATIC_IFNAME_PREFIX="\"swlan0\""
   DHDCFLAGS += -DDISABLE_PM_BCNRX
   DHDCFLAGS += -DWL_STATIC_IF
   DHDCFLAGS += -DWL_STATIC_IFNAME_PREFIX="\"swlan0\""
- #Iface force dev close
-  DHDCFLAGS += -DIFACE_HANG_FORCE_DEV_CLOSE
 
 # Use Legacy dump path
 ifneq ($(USE_LEGACY_DUMP_PATH),)
 
 # Use Legacy dump path
 ifneq ($(USE_LEGACY_DUMP_PATH),)
@@ -858,7 +864,7 @@ endif
 # HANG simulation
   DHDCFLAGS += -DDHD_HANG_SEND_UP_TEST
 
 # HANG simulation
   DHDCFLAGS += -DDHD_HANG_SEND_UP_TEST
 
-ifneq ($(CONFIG_WLAN_GRACE),)
+ifeq ($(filter y,$(CONFIG_WLAN_GRACE) $(CONFIG_SEC_KELLYLTE_PROJECT)),y)
   DHDCFLAGS += -DWBTEXT
   DHDCFLAGS += -DDHD_USE_CLMINFO_PARSER
 endif
   DHDCFLAGS += -DWBTEXT
   DHDCFLAGS += -DDHD_USE_CLMINFO_PARSER
 endif
@@ -869,6 +875,8 @@ endif
 
 # Enable concate blob path
     DHDCFLAGS += -DCONCATE_BLOB
 
 # Enable concate blob path
     DHDCFLAGS += -DCONCATE_BLOB
+# Generate .softap.info
+  DHDCFLAGS += -DGEN_SOFTAP_INFO_FILE
 
 # For Samsung factory mode only
 ifeq ($(CONFIG_SEC_FACTORY),y)
 
 # For Samsung factory mode only
 ifeq ($(CONFIG_SEC_FACTORY),y)
@@ -1160,6 +1168,10 @@ ifneq ($(CONFIG_BCM43456),)
   DHDCFLAGS += -DAPSTA_RESTRICTED_CHANNEL
 # Block ARP during DHCP on STA/SoftAP concurrent mode
   DHDCFLAGS += -DAPSTA_BLOCK_ARP_DURING_DHCP
   DHDCFLAGS += -DAPSTA_RESTRICTED_CHANNEL
 # Block ARP during DHCP on STA/SoftAP concurrent mode
   DHDCFLAGS += -DAPSTA_BLOCK_ARP_DURING_DHCP
+  DHDCFLAGS += -DWL_STATIC_IF
+  DHDCFLAGS += -DWL_STATIC_IFNAME_PREFIX="\"swlan0\""
+# Iface force dev close
+  DHDCFLAGS += -DIFACE_HANG_FORCE_DEV_CLOSE
 endif
 endif
 endif
 endif
 endif
 endif
@@ -1265,14 +1277,26 @@ endif
 ifneq ($(CONFIG_BCM4343),)
   DHDCFLAGS += -DBCM43430_CHIP -DSUPPORT_MULTIPLE_REVISION -DHW_OOB
   DHDCFLAGS += -DUSE_CID_CHECK
 ifneq ($(CONFIG_BCM4343),)
   DHDCFLAGS += -DBCM43430_CHIP -DSUPPORT_MULTIPLE_REVISION -DHW_OOB
   DHDCFLAGS += -DUSE_CID_CHECK
-  DHDCFLAGS += -DCUSTOM_GLOM_SETTING=0
   DHDCFLAGS += -DCUSTOM_ASSOC_RETRY_MAX=7
   DHDCFLAGS += -DCUSTOM_ASSOC_RETRY_MAX=7
+  DHDCFLAGS += -DENABLE_BCN_LI_BCN_WAKEUP
 # tput enhancement
   DHDCFLAGS += -DUSE_DYNAMIC_F2_BLKSIZE -DDYNAMIC_F2_BLKSIZE_FOR_NONLEGACY=128
   DHDCFLAGS += -DRXFRAME_THREAD -DRXTHREAD_ONLYSTA
   DHDCFLAGS += -DMAX_HDR_READ=128
   DHDCFLAGS += -DDHD_FIRSTREAD=128
   DHDCFLAGS += -DCUSTOM_AMPDU_BA_WSIZE=64 -DCUSTOM_IBSS_AMPDU_BA_WSIZE=16
 # tput enhancement
   DHDCFLAGS += -DUSE_DYNAMIC_F2_BLKSIZE -DDYNAMIC_F2_BLKSIZE_FOR_NONLEGACY=128
   DHDCFLAGS += -DRXFRAME_THREAD -DRXTHREAD_ONLYSTA
   DHDCFLAGS += -DMAX_HDR_READ=128
   DHDCFLAGS += -DDHD_FIRSTREAD=128
   DHDCFLAGS += -DCUSTOM_AMPDU_BA_WSIZE=64 -DCUSTOM_IBSS_AMPDU_BA_WSIZE=16
+ifeq ($(CONFIG_BCM43436),y)
+  DHDCFLAGS += -DCUSTOM_GLOM_SETTING=8
+  DHDCFLAGS += -DCUSTOM_DPC_CPUCORE=0
+  DHDCFLAGS += -DCUSTOM_FRAMEBURST_SET=1
+# Enable Firmware Coredump
+  DHDCFLAGS += -DDHD_FW_COREDUMP
+ifeq ($(CONFIG_BCMDHD_PREALLOC_MEMDUMP),y)
+  DHDCFLAGS += -DDHD_USE_STATIC_MEMDUMP
+endif
+else
+  DHDCFLAGS += -DCUSTOM_GLOM_SETTING=0
+endif
   # New Features
   DHDCFLAGS += -DDHD_RANDOM_MAC_SCAN
   DHDCFLAGS += -DWL11U
   # New Features
   DHDCFLAGS += -DDHD_RANDOM_MAC_SCAN
   DHDCFLAGS += -DWL11U
@@ -1286,11 +1310,26 @@ ifeq ($(CONFIG_BCM4343),y)
   DHDCFLAGS += -DUSE_LATE_INITCALL_SYNC
   DRIVER_TYPE = y
 endif
   DHDCFLAGS += -DUSE_LATE_INITCALL_SYNC
   DRIVER_TYPE = y
 endif
-  # Remove common feature for BCM4343
+# FCC power limit control on ch12/13.
+  DHDCFLAGS += -DFCC_PWR_LIMIT_2G
+# Enable Roam time thresh
+  DHDCFLAGS += -DENABLE_MAX_DTIM_IN_SUSPEND
+  DHDCFLAGS += -DCUSTOM_BCN_TIMEOUT_IN_SUSPEND=10
+  DHDCFLAGS += -DCUSTOM_ROAM_TIME_THRESH_IN_SUSPEND=6000
+  DHDCFLAGS += -DMAX_DTIM_ALLOWED_INTERVAL=925
+# Remove common feature for BCM4343
   DHDCFLAGS :=$(filter-out -DROAM_AP_ENV_DETECTION,$(DHDCFLAGS))
   DHDCFLAGS :=$(filter-out -DDISABLE_11H_SOFTAP,$(DHDCFLAGS))
   DHDCFLAGS :=$(filter-out -DROAM_AP_ENV_DETECTION,$(DHDCFLAGS))
   DHDCFLAGS :=$(filter-out -DDISABLE_11H_SOFTAP,$(DHDCFLAGS))
+  DHDCFLAGS :=$(filter-out -DSUPPORT_P2P_GO_PS,$(DHDCFLAGS))
 # Generate .softap.info
   DHDCFLAGS += -DGEN_SOFTAP_INFO_FILE
 # Generate .softap.info
   DHDCFLAGS += -DGEN_SOFTAP_INFO_FILE
+ifneq ($(PLATFORM_VERSION),)
+# Android O OS use below features
+ifeq ($(shell expr $(PLATFORM_VERSION) \>= 8.0),1)
+# Use single nvram file
+  DHDCFLAGS += -DDHD_USE_SINGLE_NVRAM_FILE
+endif
+endif
 endif
 
 ifneq ($(CONFIG_BCM43012),)
 endif
 
 ifneq ($(CONFIG_BCM43012),)
@@ -1464,6 +1503,7 @@ DHDCFLAGS := $(filter-out -DGSCAN_SUPPORT,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DRTT_SUPPORT,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DDHD_LB_IRQSET,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DSET_PCIE_IRQ_CPU_CORE,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DRTT_SUPPORT,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DDHD_LB_IRQSET,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DSET_PCIE_IRQ_CPU_CORE,$(DHDCFLAGS))
+DHDCFLAGS := $(filter-out -DWL_BCNRECV,$(DHDCFLAGS))
 DHD_ANDROID_OFILES := $(filter-out wl_cfgvendor.o,$(DHD_ANDROID_OFILES))
 DHD_ANDROID_OFILES := $(filter-out dhd_rtt.o,$(DHD_ANDROID_OFILES))
 endif
 DHD_ANDROID_OFILES := $(filter-out wl_cfgvendor.o,$(DHD_ANDROID_OFILES))
 DHD_ANDROID_OFILES := $(filter-out dhd_rtt.o,$(DHD_ANDROID_OFILES))
 endif
index 8cc3ae24d924179ca585cca46c18011eb23a26be..290af474e9dd5e0b5f993191e84689392eb495ff 100644 (file)
@@ -107,7 +107,7 @@ endif
        # DHDCFLAGS += -DDHD_RECOVER_TIMEOUT
        # HEAP ASLR
        DHDCFLAGS += -DBCM_ASLR_HEAP
        # DHDCFLAGS += -DDHD_RECOVER_TIMEOUT
        # HEAP ASLR
        DHDCFLAGS += -DBCM_ASLR_HEAP
-ifeq ($(filter y,$(CONFIG_SOC_EXYNOS8895) $(CONFIG_SOC_EXYNOS9810) $(CONFIG_ARCH_SDM845)),y)
+ifeq ($(filter y,$(CONFIG_SOC_EXYNOS8895) $(CONFIG_ARCH_MSM8998) $(CONFIG_SOC_EXYNOS9810) $(CONFIG_ARCH_SDM845)),y)
        # Default Tx LB Enable
        DHDCFLAGS += -DDHD_LB_TXP_DEFAULT_ENAB
 endif
        # Default Tx LB Enable
        DHDCFLAGS += -DDHD_LB_TXP_DEFAULT_ENAB
 endif
@@ -174,6 +174,7 @@ DHDCFLAGS += -DROAM_ENABLE -DROAM_CHANNEL_CACHE -DROAM_API
 DHDCFLAGS += -DENABLE_FW_ROAM_SUSPEND
 DHDCFLAGS += -DDHD_LOSSLESS_ROAMING
 DHDCFLAGS += -DSKIP_ROAM_TRIGGER_RESET
 DHDCFLAGS += -DENABLE_FW_ROAM_SUSPEND
 DHDCFLAGS += -DDHD_LOSSLESS_ROAMING
 DHDCFLAGS += -DSKIP_ROAM_TRIGGER_RESET
+DHDCFLAGS += -DROAM_EVT_DISABLE
 
 # Enable Roam time thresh
 DHDCFLAGS += -DENABLE_MAX_DTIM_IN_SUSPEND
 
 # Enable Roam time thresh
 DHDCFLAGS += -DENABLE_MAX_DTIM_IN_SUSPEND
@@ -409,6 +410,7 @@ endif
   DHDCFLAGS += -DWL11U -DMFP
   DHDCFLAGS += -DBCMCCX
   DHDCFLAGS += -DWES_SUPPORT
   DHDCFLAGS += -DWL11U -DMFP
   DHDCFLAGS += -DBCMCCX
   DHDCFLAGS += -DWES_SUPPORT
+  DHDCFLAGS += -DSUPPORT_RESTORE_SCAN_PARAMS
   DHDCFLAGS += -DOKC_SUPPORT
   DHDCFLAGS += -DWLTDLS
   DHDCFLAGS += -DWLFBT
   DHDCFLAGS += -DOKC_SUPPORT
   DHDCFLAGS += -DWLTDLS
   DHDCFLAGS += -DWLFBT
@@ -515,6 +517,8 @@ ifeq ($(CONFIG_SEC_FACTORY),y)
   DHDCFLAGS += -DDHD_NON_DMA_M2M_CORRUPTION
 # Detect FW Memory Corruption
   DHDCFLAGS += -DDHD_FW_MEM_CORRUPTION
   DHDCFLAGS += -DDHD_NON_DMA_M2M_CORRUPTION
 # Detect FW Memory Corruption
   DHDCFLAGS += -DDHD_FW_MEM_CORRUPTION
+# Detect turn on failure
+  DHDCFLAGS += -DBCM_DETECT_TURN_ON_FAILURE
 endif # CONFIG_SEC_FACTORY
 
 ifeq ($(CONFIG_BCM4375),y)
 endif # CONFIG_SEC_FACTORY
 
 ifeq ($(CONFIG_BCM4375),y)
@@ -538,9 +542,7 @@ ifneq ($(CONFIG_BCM4361),)
  DHDCFLAGS += -DUSE_WL_TXBF
  DHDCFLAGS += -DUSE_WL_FRAMEBURST
  DHDCFLAGS += -DDISABLE_FRAMEBURST_VSDB
  DHDCFLAGS += -DUSE_WL_TXBF
  DHDCFLAGS += -DUSE_WL_FRAMEBURST
  DHDCFLAGS += -DDISABLE_FRAMEBURST_VSDB
-ifeq ($(filter y,$(CONFIG_ARCH_SDM845) $(CONFIG_SOC_EXYNOS9810)),y)
  DHDCFLAGS += -DDISABLE_WL_FRAMEBURST_SOFTAP
  DHDCFLAGS += -DDISABLE_WL_FRAMEBURST_SOFTAP
-endif
  DHDCFLAGS += -DDISABLE_PM_BCNRX
 # Debugability
  DHDCFLAGS += -DDEBUGABILITY_ECNTRS_LOGGING
  DHDCFLAGS += -DDISABLE_PM_BCNRX
 # Debugability
  DHDCFLAGS += -DDEBUGABILITY_ECNTRS_LOGGING
@@ -550,6 +552,8 @@ endif
  DHDCFLAGS += -DCUSTOM_BLOCK_DEAUTH_AT_EAP_FAILURE
 # Customer ocl disabe
  DHDCFLAGS += -DCUSTOM_SET_OCLOFF
  DHDCFLAGS += -DCUSTOM_BLOCK_DEAUTH_AT_EAP_FAILURE
 # Customer ocl disabe
  DHDCFLAGS += -DCUSTOM_SET_OCLOFF
+#FAKEAP
+ DHDCFLAGS += -DWL_BCNRECV
  DHDCFLAGS += -DWL_STATIC_IF
  DHDCFLAGS += -DWL_STATIC_IFNAME_PREFIX="\"swlan0\""
 
  DHDCFLAGS += -DWL_STATIC_IF
  DHDCFLAGS += -DWL_STATIC_IFNAME_PREFIX="\"swlan0\""
 
@@ -589,6 +593,7 @@ endif
   DHDCFLAGS += -DWL11U -DMFP
   DHDCFLAGS += -DBCMCCX
   DHDCFLAGS += -DWES_SUPPORT
   DHDCFLAGS += -DWL11U -DMFP
   DHDCFLAGS += -DBCMCCX
   DHDCFLAGS += -DWES_SUPPORT
+  DHDCFLAGS += -DSUPPORT_RESTORE_SCAN_PARAMS
   DHDCFLAGS += -DOKC_SUPPORT
   DHDCFLAGS += -DWLTDLS
   DHDCFLAGS += -DWLFBT
   DHDCFLAGS += -DOKC_SUPPORT
   DHDCFLAGS += -DWLTDLS
   DHDCFLAGS += -DWLFBT
@@ -701,6 +706,8 @@ ifeq ($(CONFIG_SEC_FACTORY),y)
   DHDCFLAGS += -DDHD_NON_DMA_M2M_CORRUPTION
 # Detect FW Memory Corruption
   DHDCFLAGS += -DDHD_FW_MEM_CORRUPTION
   DHDCFLAGS += -DDHD_NON_DMA_M2M_CORRUPTION
 # Detect FW Memory Corruption
   DHDCFLAGS += -DDHD_FW_MEM_CORRUPTION
+# Detect turn on failure
+  DHDCFLAGS += -DBCM_DETECT_TURN_ON_FAILURE
 endif # CONFIG_SEC_FACTORY
 
 ifeq ($(CONFIG_BCM4361),y)
 endif # CONFIG_SEC_FACTORY
 
 ifeq ($(CONFIG_BCM4361),y)
@@ -831,7 +838,7 @@ endif
 # HANG simulation
   DHDCFLAGS += -DDHD_HANG_SEND_UP_TEST
 
 # HANG simulation
   DHDCFLAGS += -DDHD_HANG_SEND_UP_TEST
 
-ifneq ($(CONFIG_WLAN_GRACE),)
+ifeq ($(filter y,$(CONFIG_WLAN_GRACE) $(CONFIG_SEC_KELLYLTE_PROJECT)),y)
   DHDCFLAGS += -DWBTEXT
   DHDCFLAGS += -DDHD_USE_CLMINFO_PARSER
 endif
   DHDCFLAGS += -DWBTEXT
   DHDCFLAGS += -DDHD_USE_CLMINFO_PARSER
 endif
@@ -842,6 +849,8 @@ endif
 
 # Enable concate blob path
     DHDCFLAGS += -DCONCATE_BLOB
 
 # Enable concate blob path
     DHDCFLAGS += -DCONCATE_BLOB
+# Generate .softap.info
+  DHDCFLAGS += -DGEN_SOFTAP_INFO_FILE
 
 # For Samsung factory mode only
 ifeq ($(CONFIG_SEC_FACTORY),y)
 
 # For Samsung factory mode only
 ifeq ($(CONFIG_SEC_FACTORY),y)
@@ -1133,6 +1142,10 @@ ifneq ($(CONFIG_BCM43456),)
   DHDCFLAGS += -DAPSTA_RESTRICTED_CHANNEL
 # Block ARP during DHCP on STA/SoftAP concurrent mode
   DHDCFLAGS += -DAPSTA_BLOCK_ARP_DURING_DHCP
   DHDCFLAGS += -DAPSTA_RESTRICTED_CHANNEL
 # Block ARP during DHCP on STA/SoftAP concurrent mode
   DHDCFLAGS += -DAPSTA_BLOCK_ARP_DURING_DHCP
+  DHDCFLAGS += -DWL_STATIC_IF
+  DHDCFLAGS += -DWL_STATIC_IFNAME_PREFIX="\"swlan0\""
+# Iface force dev close
+  DHDCFLAGS += -DIFACE_HANG_FORCE_DEV_CLOSE
 endif
 endif
 endif
 endif
 endif
 endif
@@ -1238,14 +1251,26 @@ endif
 ifneq ($(CONFIG_BCM4343),)
   DHDCFLAGS += -DBCM43430_CHIP -DSUPPORT_MULTIPLE_REVISION -DHW_OOB
   DHDCFLAGS += -DUSE_CID_CHECK
 ifneq ($(CONFIG_BCM4343),)
   DHDCFLAGS += -DBCM43430_CHIP -DSUPPORT_MULTIPLE_REVISION -DHW_OOB
   DHDCFLAGS += -DUSE_CID_CHECK
-  DHDCFLAGS += -DCUSTOM_GLOM_SETTING=0
   DHDCFLAGS += -DCUSTOM_ASSOC_RETRY_MAX=7
   DHDCFLAGS += -DCUSTOM_ASSOC_RETRY_MAX=7
+  DHDCFLAGS += -DENABLE_BCN_LI_BCN_WAKEUP
 # tput enhancement
   DHDCFLAGS += -DUSE_DYNAMIC_F2_BLKSIZE -DDYNAMIC_F2_BLKSIZE_FOR_NONLEGACY=128
   DHDCFLAGS += -DRXFRAME_THREAD -DRXTHREAD_ONLYSTA
   DHDCFLAGS += -DMAX_HDR_READ=128
   DHDCFLAGS += -DDHD_FIRSTREAD=128
   DHDCFLAGS += -DCUSTOM_AMPDU_BA_WSIZE=64 -DCUSTOM_IBSS_AMPDU_BA_WSIZE=16
 # tput enhancement
   DHDCFLAGS += -DUSE_DYNAMIC_F2_BLKSIZE -DDYNAMIC_F2_BLKSIZE_FOR_NONLEGACY=128
   DHDCFLAGS += -DRXFRAME_THREAD -DRXTHREAD_ONLYSTA
   DHDCFLAGS += -DMAX_HDR_READ=128
   DHDCFLAGS += -DDHD_FIRSTREAD=128
   DHDCFLAGS += -DCUSTOM_AMPDU_BA_WSIZE=64 -DCUSTOM_IBSS_AMPDU_BA_WSIZE=16
+ifeq ($(CONFIG_BCM43436),y)
+  DHDCFLAGS += -DCUSTOM_GLOM_SETTING=8
+  DHDCFLAGS += -DCUSTOM_DPC_CPUCORE=0
+  DHDCFLAGS += -DCUSTOM_FRAMEBURST_SET=1
+# Enable Firmware Coredump
+  DHDCFLAGS += -DDHD_FW_COREDUMP
+ifeq ($(CONFIG_BCMDHD_PREALLOC_MEMDUMP),y)
+  DHDCFLAGS += -DDHD_USE_STATIC_MEMDUMP
+endif
+else
+  DHDCFLAGS += -DCUSTOM_GLOM_SETTING=0
+endif
   # New Features
   DHDCFLAGS += -DDHD_RANDOM_MAC_SCAN
   DHDCFLAGS += -DWL11U
   # New Features
   DHDCFLAGS += -DDHD_RANDOM_MAC_SCAN
   DHDCFLAGS += -DWL11U
@@ -1259,11 +1284,26 @@ ifeq ($(CONFIG_BCM4343),y)
   DHDCFLAGS += -DUSE_LATE_INITCALL_SYNC
   DRIVER_TYPE = y
 endif
   DHDCFLAGS += -DUSE_LATE_INITCALL_SYNC
   DRIVER_TYPE = y
 endif
-  # Remove common feature for BCM4343
+# FCC power limit control on ch12/13.
+  DHDCFLAGS += -DFCC_PWR_LIMIT_2G
+# Enable Roam time thresh
+  DHDCFLAGS += -DENABLE_MAX_DTIM_IN_SUSPEND
+  DHDCFLAGS += -DCUSTOM_BCN_TIMEOUT_IN_SUSPEND=10
+  DHDCFLAGS += -DCUSTOM_ROAM_TIME_THRESH_IN_SUSPEND=6000
+  DHDCFLAGS += -DMAX_DTIM_ALLOWED_INTERVAL=925
+# Remove common feature for BCM4343
   DHDCFLAGS :=$(filter-out -DROAM_AP_ENV_DETECTION,$(DHDCFLAGS))
   DHDCFLAGS :=$(filter-out -DDISABLE_11H_SOFTAP,$(DHDCFLAGS))
   DHDCFLAGS :=$(filter-out -DROAM_AP_ENV_DETECTION,$(DHDCFLAGS))
   DHDCFLAGS :=$(filter-out -DDISABLE_11H_SOFTAP,$(DHDCFLAGS))
+  DHDCFLAGS :=$(filter-out -DSUPPORT_P2P_GO_PS,$(DHDCFLAGS))
 # Generate .softap.info
   DHDCFLAGS += -DGEN_SOFTAP_INFO_FILE
 # Generate .softap.info
   DHDCFLAGS += -DGEN_SOFTAP_INFO_FILE
+ifneq ($(PLATFORM_VERSION),)
+# Android O OS use below features
+ifeq ($(shell expr $(PLATFORM_VERSION) \>= 8.0),1)
+# Use single nvram file
+  DHDCFLAGS += -DDHD_USE_SINGLE_NVRAM_FILE
+endif
+endif
 endif
 
 ifneq ($(CONFIG_BCM43012),)
 endif
 
 ifneq ($(CONFIG_BCM43012),)
@@ -1437,6 +1477,7 @@ DHDCFLAGS := $(filter-out -DGSCAN_SUPPORT,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DRTT_SUPPORT,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DDHD_LB_IRQSET,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DSET_PCIE_IRQ_CPU_CORE,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DRTT_SUPPORT,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DDHD_LB_IRQSET,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DSET_PCIE_IRQ_CPU_CORE,$(DHDCFLAGS))
+DHDCFLAGS := $(filter-out -DWL_BCNRECV,$(DHDCFLAGS))
 DHD_ANDROID_OFILES := $(filter-out wl_cfgvendor.o,$(DHD_ANDROID_OFILES))
 DHD_ANDROID_OFILES := $(filter-out dhd_rtt.o,$(DHD_ANDROID_OFILES))
 endif
 DHD_ANDROID_OFILES := $(filter-out wl_cfgvendor.o,$(DHD_ANDROID_OFILES))
 DHD_ANDROID_OFILES := $(filter-out dhd_rtt.o,$(DHD_ANDROID_OFILES))
 endif
index e14b34064421a6aa81855caaaf52132cf03596e2..4ff778f8393bee0d6c362f8b42646b28f954867f 100644 (file)
@@ -107,7 +107,7 @@ endif
        # DHDCFLAGS += -DDHD_RECOVER_TIMEOUT
        # HEAP ASLR
        DHDCFLAGS += -DBCM_ASLR_HEAP
        # DHDCFLAGS += -DDHD_RECOVER_TIMEOUT
        # HEAP ASLR
        DHDCFLAGS += -DBCM_ASLR_HEAP
-ifeq ($(filter y,$(CONFIG_SOC_EXYNOS8895) $(CONFIG_SOC_EXYNOS9810) $(CONFIG_ARCH_SDM845)),y)
+ifeq ($(filter y,$(CONFIG_SOC_EXYNOS8895) $(CONFIG_ARCH_MSM8998) $(CONFIG_SOC_EXYNOS9810) $(CONFIG_ARCH_SDM845)),y)
        # Default Tx LB Enable
        DHDCFLAGS += -DDHD_LB_TXP_DEFAULT_ENAB
 endif
        # Default Tx LB Enable
        DHDCFLAGS += -DDHD_LB_TXP_DEFAULT_ENAB
 endif
@@ -174,6 +174,7 @@ DHDCFLAGS += -DROAM_ENABLE -DROAM_CHANNEL_CACHE -DROAM_API
 DHDCFLAGS += -DENABLE_FW_ROAM_SUSPEND
 DHDCFLAGS += -DDHD_LOSSLESS_ROAMING
 DHDCFLAGS += -DSKIP_ROAM_TRIGGER_RESET
 DHDCFLAGS += -DENABLE_FW_ROAM_SUSPEND
 DHDCFLAGS += -DDHD_LOSSLESS_ROAMING
 DHDCFLAGS += -DSKIP_ROAM_TRIGGER_RESET
+DHDCFLAGS += -DROAM_EVT_DISABLE
 
 # Enable Roam time thresh
 DHDCFLAGS += -DENABLE_MAX_DTIM_IN_SUSPEND
 
 # Enable Roam time thresh
 DHDCFLAGS += -DENABLE_MAX_DTIM_IN_SUSPEND
@@ -432,6 +433,7 @@ endif
   DHDCFLAGS += -DWL11U -DMFP
   DHDCFLAGS += -DBCMCCX
   DHDCFLAGS += -DWES_SUPPORT
   DHDCFLAGS += -DWL11U -DMFP
   DHDCFLAGS += -DBCMCCX
   DHDCFLAGS += -DWES_SUPPORT
+  DHDCFLAGS += -DSUPPORT_RESTORE_SCAN_PARAMS
   DHDCFLAGS += -DOKC_SUPPORT
   DHDCFLAGS += -DWLTDLS
   DHDCFLAGS += -DWLFBT
   DHDCFLAGS += -DOKC_SUPPORT
   DHDCFLAGS += -DWLTDLS
   DHDCFLAGS += -DWLFBT
@@ -538,6 +540,8 @@ ifeq ($(CONFIG_SEC_FACTORY),y)
   DHDCFLAGS += -DDHD_NON_DMA_M2M_CORRUPTION
 # Detect FW Memory Corruption
   DHDCFLAGS += -DDHD_FW_MEM_CORRUPTION
   DHDCFLAGS += -DDHD_NON_DMA_M2M_CORRUPTION
 # Detect FW Memory Corruption
   DHDCFLAGS += -DDHD_FW_MEM_CORRUPTION
+# Detect turn on failure
+  DHDCFLAGS += -DBCM_DETECT_TURN_ON_FAILURE
 endif # CONFIG_SEC_FACTORY
 
 ifeq ($(CONFIG_BCM4375),y)
 endif # CONFIG_SEC_FACTORY
 
 ifeq ($(CONFIG_BCM4375),y)
@@ -561,9 +565,7 @@ ifneq ($(CONFIG_BCM4361),)
  DHDCFLAGS += -DUSE_WL_TXBF
  DHDCFLAGS += -DUSE_WL_FRAMEBURST
  DHDCFLAGS += -DDISABLE_FRAMEBURST_VSDB
  DHDCFLAGS += -DUSE_WL_TXBF
  DHDCFLAGS += -DUSE_WL_FRAMEBURST
  DHDCFLAGS += -DDISABLE_FRAMEBURST_VSDB
-ifeq ($(filter y,$(CONFIG_ARCH_SDM845) $(CONFIG_SOC_EXYNOS9810)),y)
  DHDCFLAGS += -DDISABLE_WL_FRAMEBURST_SOFTAP
  DHDCFLAGS += -DDISABLE_WL_FRAMEBURST_SOFTAP
-endif
  DHDCFLAGS += -DDISABLE_PM_BCNRX
 # Debugability
  DHDCFLAGS += -DDEBUGABILITY_ECNTRS_LOGGING
  DHDCFLAGS += -DDISABLE_PM_BCNRX
 # Debugability
  DHDCFLAGS += -DDEBUGABILITY_ECNTRS_LOGGING
@@ -573,6 +575,8 @@ endif
  DHDCFLAGS += -DCUSTOM_BLOCK_DEAUTH_AT_EAP_FAILURE
 # Customer ocl disabe
  DHDCFLAGS += -DCUSTOM_SET_OCLOFF
  DHDCFLAGS += -DCUSTOM_BLOCK_DEAUTH_AT_EAP_FAILURE
 # Customer ocl disabe
  DHDCFLAGS += -DCUSTOM_SET_OCLOFF
+#FAKEAP
+ DHDCFLAGS += -DWL_BCNRECV
  DHDCFLAGS += -DWL_STATIC_IF
  DHDCFLAGS += -DWL_STATIC_IFNAME_PREFIX="\"swlan0\""
 
  DHDCFLAGS += -DWL_STATIC_IF
  DHDCFLAGS += -DWL_STATIC_IFNAME_PREFIX="\"swlan0\""
 
@@ -612,6 +616,7 @@ endif
   DHDCFLAGS += -DWL11U -DMFP
   DHDCFLAGS += -DBCMCCX
   DHDCFLAGS += -DWES_SUPPORT
   DHDCFLAGS += -DWL11U -DMFP
   DHDCFLAGS += -DBCMCCX
   DHDCFLAGS += -DWES_SUPPORT
+  DHDCFLAGS += -DSUPPORT_RESTORE_SCAN_PARAMS
   DHDCFLAGS += -DOKC_SUPPORT
   DHDCFLAGS += -DWLTDLS
   DHDCFLAGS += -DWLFBT
   DHDCFLAGS += -DOKC_SUPPORT
   DHDCFLAGS += -DWLTDLS
   DHDCFLAGS += -DWLFBT
@@ -724,6 +729,8 @@ ifeq ($(CONFIG_SEC_FACTORY),y)
   DHDCFLAGS += -DDHD_NON_DMA_M2M_CORRUPTION
 # Detect FW Memory Corruption
   DHDCFLAGS += -DDHD_FW_MEM_CORRUPTION
   DHDCFLAGS += -DDHD_NON_DMA_M2M_CORRUPTION
 # Detect FW Memory Corruption
   DHDCFLAGS += -DDHD_FW_MEM_CORRUPTION
+# Detect turn on failure
+  DHDCFLAGS += -DBCM_DETECT_TURN_ON_FAILURE
 endif # CONFIG_SEC_FACTORY
 
 ifeq ($(CONFIG_BCM4361),y)
 endif # CONFIG_SEC_FACTORY
 
 ifeq ($(CONFIG_BCM4361),y)
@@ -854,7 +861,7 @@ endif
 # HANG simulation
   DHDCFLAGS += -DDHD_HANG_SEND_UP_TEST
 
 # HANG simulation
   DHDCFLAGS += -DDHD_HANG_SEND_UP_TEST
 
-ifneq ($(CONFIG_WLAN_GRACE),)
+ifeq ($(filter y,$(CONFIG_WLAN_GRACE) $(CONFIG_SEC_KELLYLTE_PROJECT)),y)
   DHDCFLAGS += -DWBTEXT
   DHDCFLAGS += -DDHD_USE_CLMINFO_PARSER
 endif
   DHDCFLAGS += -DWBTEXT
   DHDCFLAGS += -DDHD_USE_CLMINFO_PARSER
 endif
@@ -865,6 +872,8 @@ endif
 
 # Enable concate blob path
     DHDCFLAGS += -DCONCATE_BLOB
 
 # Enable concate blob path
     DHDCFLAGS += -DCONCATE_BLOB
+# Generate .softap.info
+  DHDCFLAGS += -DGEN_SOFTAP_INFO_FILE
 
 # For Samsung factory mode only
 ifeq ($(CONFIG_SEC_FACTORY),y)
 
 # For Samsung factory mode only
 ifeq ($(CONFIG_SEC_FACTORY),y)
@@ -1156,6 +1165,10 @@ ifneq ($(CONFIG_BCM43456),)
   DHDCFLAGS += -DAPSTA_RESTRICTED_CHANNEL
 # Block ARP during DHCP on STA/SoftAP concurrent mode
   DHDCFLAGS += -DAPSTA_BLOCK_ARP_DURING_DHCP
   DHDCFLAGS += -DAPSTA_RESTRICTED_CHANNEL
 # Block ARP during DHCP on STA/SoftAP concurrent mode
   DHDCFLAGS += -DAPSTA_BLOCK_ARP_DURING_DHCP
+  DHDCFLAGS += -DWL_STATIC_IF
+  DHDCFLAGS += -DWL_STATIC_IFNAME_PREFIX="\"swlan0\""
+# Iface force dev close
+  DHDCFLAGS += -DIFACE_HANG_FORCE_DEV_CLOSE
 endif
 endif
 endif
 endif
 endif
 endif
@@ -1261,14 +1274,26 @@ endif
 ifneq ($(CONFIG_BCM4343),)
   DHDCFLAGS += -DBCM43430_CHIP -DSUPPORT_MULTIPLE_REVISION -DHW_OOB
   DHDCFLAGS += -DUSE_CID_CHECK
 ifneq ($(CONFIG_BCM4343),)
   DHDCFLAGS += -DBCM43430_CHIP -DSUPPORT_MULTIPLE_REVISION -DHW_OOB
   DHDCFLAGS += -DUSE_CID_CHECK
-  DHDCFLAGS += -DCUSTOM_GLOM_SETTING=0
   DHDCFLAGS += -DCUSTOM_ASSOC_RETRY_MAX=7
   DHDCFLAGS += -DCUSTOM_ASSOC_RETRY_MAX=7
+  DHDCFLAGS += -DENABLE_BCN_LI_BCN_WAKEUP
 # tput enhancement
   DHDCFLAGS += -DUSE_DYNAMIC_F2_BLKSIZE -DDYNAMIC_F2_BLKSIZE_FOR_NONLEGACY=128
   DHDCFLAGS += -DRXFRAME_THREAD -DRXTHREAD_ONLYSTA
   DHDCFLAGS += -DMAX_HDR_READ=128
   DHDCFLAGS += -DDHD_FIRSTREAD=128
   DHDCFLAGS += -DCUSTOM_AMPDU_BA_WSIZE=64 -DCUSTOM_IBSS_AMPDU_BA_WSIZE=16
 # tput enhancement
   DHDCFLAGS += -DUSE_DYNAMIC_F2_BLKSIZE -DDYNAMIC_F2_BLKSIZE_FOR_NONLEGACY=128
   DHDCFLAGS += -DRXFRAME_THREAD -DRXTHREAD_ONLYSTA
   DHDCFLAGS += -DMAX_HDR_READ=128
   DHDCFLAGS += -DDHD_FIRSTREAD=128
   DHDCFLAGS += -DCUSTOM_AMPDU_BA_WSIZE=64 -DCUSTOM_IBSS_AMPDU_BA_WSIZE=16
+ifeq ($(CONFIG_BCM43436),y)
+  DHDCFLAGS += -DCUSTOM_GLOM_SETTING=8
+  DHDCFLAGS += -DCUSTOM_DPC_CPUCORE=0
+  DHDCFLAGS += -DCUSTOM_FRAMEBURST_SET=1
+# Enable Firmware Coredump
+  DHDCFLAGS += -DDHD_FW_COREDUMP
+ifeq ($(CONFIG_BCMDHD_PREALLOC_MEMDUMP),y)
+  DHDCFLAGS += -DDHD_USE_STATIC_MEMDUMP
+endif
+else
+  DHDCFLAGS += -DCUSTOM_GLOM_SETTING=0
+endif
   # New Features
   DHDCFLAGS += -DDHD_RANDOM_MAC_SCAN
   DHDCFLAGS += -DWL11U
   # New Features
   DHDCFLAGS += -DDHD_RANDOM_MAC_SCAN
   DHDCFLAGS += -DWL11U
@@ -1282,11 +1307,26 @@ ifeq ($(CONFIG_BCM4343),y)
   DHDCFLAGS += -DUSE_LATE_INITCALL_SYNC
   DRIVER_TYPE = y
 endif
   DHDCFLAGS += -DUSE_LATE_INITCALL_SYNC
   DRIVER_TYPE = y
 endif
-  # Remove common feature for BCM4343
+# FCC power limit control on ch12/13.
+  DHDCFLAGS += -DFCC_PWR_LIMIT_2G
+# Enable Roam time thresh
+  DHDCFLAGS += -DENABLE_MAX_DTIM_IN_SUSPEND
+  DHDCFLAGS += -DCUSTOM_BCN_TIMEOUT_IN_SUSPEND=10
+  DHDCFLAGS += -DCUSTOM_ROAM_TIME_THRESH_IN_SUSPEND=6000
+  DHDCFLAGS += -DMAX_DTIM_ALLOWED_INTERVAL=925
+# Remove common feature for BCM4343
   DHDCFLAGS :=$(filter-out -DROAM_AP_ENV_DETECTION,$(DHDCFLAGS))
   DHDCFLAGS :=$(filter-out -DDISABLE_11H_SOFTAP,$(DHDCFLAGS))
   DHDCFLAGS :=$(filter-out -DROAM_AP_ENV_DETECTION,$(DHDCFLAGS))
   DHDCFLAGS :=$(filter-out -DDISABLE_11H_SOFTAP,$(DHDCFLAGS))
+  DHDCFLAGS :=$(filter-out -DSUPPORT_P2P_GO_PS,$(DHDCFLAGS))
 # Generate .softap.info
   DHDCFLAGS += -DGEN_SOFTAP_INFO_FILE
 # Generate .softap.info
   DHDCFLAGS += -DGEN_SOFTAP_INFO_FILE
+ifneq ($(PLATFORM_VERSION),)
+# Android O OS use below features
+ifeq ($(shell expr $(PLATFORM_VERSION) \>= 8.0),1)
+# Use single nvram file
+  DHDCFLAGS += -DDHD_USE_SINGLE_NVRAM_FILE
+endif
+endif
 endif
 
 ifneq ($(CONFIG_BCM43012),)
 endif
 
 ifneq ($(CONFIG_BCM43012),)
@@ -1460,6 +1500,7 @@ DHDCFLAGS := $(filter-out -DGSCAN_SUPPORT,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DRTT_SUPPORT,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DDHD_LB_IRQSET,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DSET_PCIE_IRQ_CPU_CORE,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DRTT_SUPPORT,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DDHD_LB_IRQSET,$(DHDCFLAGS))
 DHDCFLAGS := $(filter-out -DSET_PCIE_IRQ_CPU_CORE,$(DHDCFLAGS))
+DHDCFLAGS := $(filter-out -DWL_BCNRECV,$(DHDCFLAGS))
 DHD_ANDROID_OFILES := $(filter-out wl_cfgvendor.o,$(DHD_ANDROID_OFILES))
 DHD_ANDROID_OFILES := $(filter-out dhd_rtt.o,$(DHD_ANDROID_OFILES))
 endif
 DHD_ANDROID_OFILES := $(filter-out wl_cfgvendor.o,$(DHD_ANDROID_OFILES))
 DHD_ANDROID_OFILES := $(filter-out dhd_rtt.o,$(DHD_ANDROID_OFILES))
 endif
index 8df2e414ac4d14a84ade09706d29ead65789829b..5fb3f8f9efdf10a2ef0c11ae0974da3580db2b61 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Proprietary,Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Proprietary,Open:>>
  *
- * $Id: bcmsdh_sdmmc_linux.c 796833 2018-12-27 05:52:37Z $
+ * $Id: bcmsdh_sdmmc_linux.c 801673 2019-01-29 04:29:43Z $
  */
 
 #include <typedefs.h>
  */
 
 #include <typedefs.h>
 
 #if !defined(SDIO_DEVICE_ID_BROADCOM_4362)
 #define SDIO_DEVICE_ID_BROADCOM_4362    0x4362
 
 #if !defined(SDIO_DEVICE_ID_BROADCOM_4362)
 #define SDIO_DEVICE_ID_BROADCOM_4362    0x4362
-#endif // endif
+#endif  /* !defined(SDIO_DEVICE_ID_BROADCOM_4362) */
+#if !defined(SDIO_DEVICE_ID_BROADCOM_43430)
+#define SDIO_DEVICE_ID_BROADCOM_43430  43430
+#endif /* !defined(SDIO_DEVICE_ID_BROADCOM_43430) */
 
 extern void wl_cfg80211_set_parent_dev(void *dev);
 extern void sdioh_sdmmc_devintr_off(sdioh_info_t *sd);
 
 extern void wl_cfg80211_set_parent_dev(void *dev);
 extern void sdioh_sdmmc_devintr_off(sdioh_info_t *sd);
@@ -222,6 +225,7 @@ static const struct sdio_device_id bcmsdh_sdmmc_ids[] = {
        { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4324) },
        { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_43239) },
        { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4345) },
        { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4324) },
        { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_43239) },
        { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4345) },
+       { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_43430) },
        { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4362) },
        { SDIO_DEVICE_CLASS(SDIO_CLASS_NONE)            },
        { 0, 0, 0, 0 /* end: all zeroes */
        { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4362) },
        { SDIO_DEVICE_CLASS(SDIO_CLASS_NONE)            },
        { 0, 0, 0, 0 /* end: all zeroes */
index 61168892c40b299c9aa012b61aa26dda09636d50..dff9cd9fc00b36caf6cc995da20a8f720c7520e0 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: bcmutils.c 759570 2018-04-26 00:14:59Z $
+ * $Id: bcmutils.c 813756 2019-04-08 05:18:14Z $
  */
 
 #include <bcm_cfg.h>
  */
 
 #include <bcm_cfg.h>
@@ -316,20 +316,28 @@ pktsetprio(void *pkt, bool update_vtag)
                uint8 dscp = tos_tc >> IPV4_TOS_DSCP_SHIFT;
                switch (dscp) {
                case DSCP_EF:
                uint8 dscp = tos_tc >> IPV4_TOS_DSCP_SHIFT;
                switch (dscp) {
                case DSCP_EF:
+               case DSCP_VA:
                        priority = PRIO_8021D_VO;
                        break;
                case DSCP_AF31:
                case DSCP_AF32:
                case DSCP_AF33:
                        priority = PRIO_8021D_VO;
                        break;
                case DSCP_AF31:
                case DSCP_AF32:
                case DSCP_AF33:
+               case DSCP_CS3:
                        priority = PRIO_8021D_CL;
                        break;
                case DSCP_AF21:
                case DSCP_AF22:
                case DSCP_AF23:
                        priority = PRIO_8021D_CL;
                        break;
                case DSCP_AF21:
                case DSCP_AF22:
                case DSCP_AF23:
+                       priority = PRIO_8021D_EE;
+                       break;
                case DSCP_AF11:
                case DSCP_AF12:
                case DSCP_AF13:
                case DSCP_AF11:
                case DSCP_AF12:
                case DSCP_AF13:
-                       priority = PRIO_8021D_EE;
+               case DSCP_CS2:
+                       priority = PRIO_8021D_BE;
+                       break;
+               case DSCP_CS6:
+                       priority = PRIO_8021D_NC;
                        break;
                default:
                        priority = (int)(tos_tc >> IPV4_TOS_PREC_SHIFT);
                        break;
                default:
                        priority = (int)(tos_tc >> IPV4_TOS_PREC_SHIFT);
index bfca7496365a9897078152f22dbf83db25a49bd5..df9f668aa1c80920297f14e3c8a4b30a57b27093 100644 (file)
@@ -27,7 +27,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: dhd.h 798183 2019-01-07 09:51:58Z $
+ * $Id: dhd.h 815855 2019-04-22 05:16:49Z $
  */
 
 /****************
  */
 
 /****************
@@ -427,65 +427,63 @@ enum dhd_prealloc_index {
 };
 
 enum dhd_dongledump_mode {
 };
 
 enum dhd_dongledump_mode {
-       DUMP_DISABLED = 0,
-       DUMP_MEMONLY,
-       DUMP_MEMFILE,
-       DUMP_MEMFILE_BUGON,
-       DUMP_MEMFILE_MAX
+       DUMP_DISABLED           = 0,
+       DUMP_MEMONLY            = 1,
+       DUMP_MEMFILE            = 2,
+       DUMP_MEMFILE_BUGON      = 3,
+       DUMP_MEMFILE_MAX        = 4
 };
 
 enum dhd_dongledump_type {
 };
 
 enum dhd_dongledump_type {
-       DUMP_TYPE_RESUMED_ON_TIMEOUT = 1,
-       DUMP_TYPE_D3_ACK_TIMEOUT,
-       DUMP_TYPE_DONGLE_TRAP,
-       DUMP_TYPE_MEMORY_CORRUPTION,
-       DUMP_TYPE_PKTID_AUDIT_FAILURE,
-       DUMP_TYPE_PKTID_INVALID,
-       DUMP_TYPE_SCAN_TIMEOUT,
-       DUMP_TYPE_SCAN_BUSY,
-       DUMP_TYPE_BY_SYSDUMP,
-       DUMP_TYPE_BY_LIVELOCK,
-       DUMP_TYPE_AP_LINKUP_FAILURE,
-       DUMP_TYPE_AP_ABNORMAL_ACCESS,
-       DUMP_TYPE_CFG_VENDOR_TRIGGERED,
-       DUMP_TYPE_RESUMED_ON_TIMEOUT_TX,
-       DUMP_TYPE_RESUMED_ON_TIMEOUT_RX,
-       DUMP_TYPE_RESUMED_ON_INVALID_RING_RDWR,
-       DUMP_TYPE_TRANS_ID_MISMATCH,
-       DUMP_TYPE_IFACE_OP_FAILURE,
-#ifdef DEBUG_DNGL_INIT_FAIL
-       DUMP_TYPE_DONGLE_INIT_FAILURE,
-#endif /* DEBUG_DNGL_INIT_FAIL */
-#ifdef SUPPORT_LINKDOWN_RECOVERY
-       DUMP_TYPE_READ_SHM_FAIL,
-#endif /* SUPPORT_LINKDOWN_RECOVERY */
-       DUMP_TYPE_DONGLE_HOST_EVENT,
-       DUMP_TYPE_SMMU_FAULT,
-       DUMP_TYPE_RESUMED_UNKNOWN,
-#ifdef DHD_ERPOM
-       DUMP_TYPE_DUE_TO_BT,
-#endif /* DHD_ERPOM */
-       DUMP_TYPE_BY_USER
+       DUMP_TYPE_RESUMED_ON_TIMEOUT            = 1,
+       DUMP_TYPE_D3_ACK_TIMEOUT                = 2,
+       DUMP_TYPE_DONGLE_TRAP                   = 3,
+       DUMP_TYPE_MEMORY_CORRUPTION             = 4,
+       DUMP_TYPE_PKTID_AUDIT_FAILURE           = 5,
+       DUMP_TYPE_PKTID_INVALID                 = 6,
+       DUMP_TYPE_SCAN_TIMEOUT                  = 7,
+       DUMP_TYPE_SCAN_BUSY                     = 8,
+       DUMP_TYPE_BY_SYSDUMP                    = 9,
+       DUMP_TYPE_BY_LIVELOCK                   = 10,
+       DUMP_TYPE_AP_LINKUP_FAILURE             = 11,
+       DUMP_TYPE_AP_ABNORMAL_ACCESS            = 12,
+       DUMP_TYPE_CFG_VENDOR_TRIGGERED          = 13,
+       DUMP_TYPE_RESUMED_ON_TIMEOUT_TX         = 14,
+       DUMP_TYPE_RESUMED_ON_TIMEOUT_RX         = 15,
+       DUMP_TYPE_RESUMED_ON_INVALID_RING_RDWR  = 16,
+       DUMP_TYPE_TRANS_ID_MISMATCH             = 17,
+       DUMP_TYPE_IFACE_OP_FAILURE              = 18,
+       DUMP_TYPE_DONGLE_INIT_FAILURE           = 19,
+       DUMP_TYPE_READ_SHM_FAIL                 = 20,
+       DUMP_TYPE_DONGLE_HOST_EVENT             = 21,
+       DUMP_TYPE_SMMU_FAULT                    = 22,
+       DUMP_TYPE_RESUMED_UNKNOWN               = 23,
+       DUMP_TYPE_DUE_TO_BT                     = 24,
+       DUMP_TYPE_LOGSET_BEYOND_RANGE           = 25,
+       DUMP_TYPE_BY_USER                       = 26,
+       DUMP_TYPE_CTO_RECOVERY                  = 27,
+       DUMP_TYPE_SEQUENTIAL_PRIVCMD_ERROR      = 28
 };
 
 enum dhd_hang_reason {
 };
 
 enum dhd_hang_reason {
-       HANG_REASON_MASK = 0x8000,
-       HANG_REASON_IOCTL_RESP_TIMEOUT = 0x8001,
-       HANG_REASON_DONGLE_TRAP = 0x8002,
-       HANG_REASON_D3_ACK_TIMEOUT = 0x8003,
-       HANG_REASON_BUS_DOWN = 0x8004,
-       HANG_REASON_MSGBUF_LIVELOCK = 0x8006,
-       HANG_REASON_IFACE_DEL_FAILURE = 0x8007,
-       HANG_REASON_HT_AVAIL_ERROR = 0x8008,
-       HANG_REASON_PCIE_RC_LINK_UP_FAIL = 0x8009,
-       HANG_REASON_PCIE_PKTID_ERROR = 0x800A,
-       HANG_REASON_IFACE_ADD_FAILURE = 0x800B,
-       HANG_REASON_IOCTL_RESP_TIMEOUT_SCHED_ERROR = 0x800C,
-       HANG_REASON_D3_ACK_TIMEOUT_SCHED_ERROR = 0x800D,
-       HANG_REASON_PCIE_LINK_DOWN = 0x8805,
-       HANG_REASON_INVALID_EVENT_OR_DATA = 0x8806,
-       HANG_REASON_UNKNOWN = 0x8807,
-       HANG_REASON_MAX = 0x8808
+       HANG_REASON_MASK                                = 0x8000,
+       HANG_REASON_IOCTL_RESP_TIMEOUT                  = 0x8001,
+       HANG_REASON_DONGLE_TRAP                         = 0x8002,
+       HANG_REASON_D3_ACK_TIMEOUT                      = 0x8003,
+       HANG_REASON_BUS_DOWN                            = 0x8004,
+       HANG_REASON_MSGBUF_LIVELOCK                     = 0x8006,
+       HANG_REASON_IFACE_DEL_FAILURE                   = 0x8007,
+       HANG_REASON_HT_AVAIL_ERROR                      = 0x8008,
+       HANG_REASON_PCIE_RC_LINK_UP_FAIL                = 0x8009,
+       HANG_REASON_PCIE_PKTID_ERROR                    = 0x800A,
+       HANG_REASON_IFACE_ADD_FAILURE                   = 0x800B,
+       HANG_REASON_IOCTL_RESP_TIMEOUT_SCHED_ERROR      = 0x800C,
+       HANG_REASON_D3_ACK_TIMEOUT_SCHED_ERROR          = 0x800D,
+       HANG_REASON_SEQUENTIAL_PRIVCMD_ERROR            = 0x800E,
+       HANG_REASON_PCIE_LINK_DOWN                      = 0x8805,
+       HANG_REASON_INVALID_EVENT_OR_DATA               = 0x8806,
+       HANG_REASON_UNKNOWN                             = 0x8807,
+       HANG_REASON_MAX                                 = 0x8808
 };
 
 #define WLC_E_DEAUTH_MAX_REASON 0x0FFF
 };
 
 #define WLC_E_DEAUTH_MAX_REASON 0x0FFF
@@ -1241,6 +1239,7 @@ typedef struct dhd_pub {
 #ifdef DHD_USE_CLMINFO_PARSER
        bool is_clm_mult_regrev;        /* Checking for CLM single/multiple regrev */
 #endif /* DHD_USE_CLMINFO_PARSER */
 #ifdef DHD_USE_CLMINFO_PARSER
        bool is_clm_mult_regrev;        /* Checking for CLM single/multiple regrev */
 #endif /* DHD_USE_CLMINFO_PARSER */
+       bool disable_dtim_in_suspend;   /* Disable set bcn_li_dtim in suspend */
 } dhd_pub_t;
 
 typedef struct {
 } dhd_pub_t;
 
 typedef struct {
@@ -1890,6 +1889,7 @@ extern int net_os_rxfilter_add_remove(struct net_device *dev, int val, int num);
 #define MAX_PKTFLT_FIXED_PATTERN_SIZE  32
 #define MAX_PKTFLT_FIXED_BUF_SIZE      \
        (WL_PKT_FILTER_FIXED_LEN + MAX_PKTFLT_FIXED_PATTERN_SIZE * 2)
 #define MAX_PKTFLT_FIXED_PATTERN_SIZE  32
 #define MAX_PKTFLT_FIXED_BUF_SIZE      \
        (WL_PKT_FILTER_FIXED_LEN + MAX_PKTFLT_FIXED_PATTERN_SIZE * 2)
+#define MAXPKT_ARG     16
 #endif /* PKT_FILTER_SUPPORT */
 
 #if defined(BCMPCIE)
 #endif /* PKT_FILTER_SUPPORT */
 
 #if defined(BCMPCIE)
@@ -2383,6 +2383,9 @@ extern char fw_path2[MOD_PARAM_PATHLEN];
 #ifdef WL_STATIC_IFNAME_PREFIX
 #undef WL_STATIC_IFNAME_PREFIX
 #endif /* WL_STATIC_IFNAME_PREFIX */
 #ifdef WL_STATIC_IFNAME_PREFIX
 #undef WL_STATIC_IFNAME_PREFIX
 #endif /* WL_STATIC_IFNAME_PREFIX */
+#ifdef IFACE_HANG_FORCE_DEV_CLOSE
+#undef IFACE_HANG_FORCE_DEV_CLOSE
+#endif /* IFACE_HANG_FORCE_DEV_CLOSE */
 #endif /* ANDROID_PLATFORM_VERSION < 9 */
 #endif /* ANDROID_PLATFORM_VERSION */
 
 #endif /* ANDROID_PLATFORM_VERSION < 9 */
 #endif /* ANDROID_PLATFORM_VERSION */
 
@@ -2395,11 +2398,12 @@ extern char fw_path2[MOD_PARAM_PATHLEN];
 #if (ANDROID_PLATFORM_VERSION >= 9)
 #define PLATFORM_PATH  "/data/vendor/conn/"
 #define DHD_MAC_ADDR_EXPORT
 #if (ANDROID_PLATFORM_VERSION >= 9)
 #define PLATFORM_PATH  "/data/vendor/conn/"
 #define DHD_MAC_ADDR_EXPORT
-#if !defined(CONFIG_BCM4359)
+#if defined(WL_BAM)
 #define DHD_ADPS_BAM_EXPORT
 #define DHD_ADPS_BAM_EXPORT
-#endif /* CONFIG_BCM4359 */
+#endif /* WL_BAM */
 #define DHD_EXPORT_CNTL_FILE
 #define DHD_SOFTAP_DUAL_IF_INFO
 #define DHD_EXPORT_CNTL_FILE
 #define DHD_SOFTAP_DUAL_IF_INFO
+#define DHD_SEND_HANG_PRIVCMD_ERRORS
 /* ANDROID P(9.0) and later, always use single nvram file */
 #ifndef DHD_USE_SINGLE_NVRAM_FILE
 #define DHD_USE_SINGLE_NVRAM_FILE
 /* ANDROID P(9.0) and later, always use single nvram file */
 #ifndef DHD_USE_SINGLE_NVRAM_FILE
 #define DHD_USE_SINGLE_NVRAM_FILE
index cfba55c49362def71c5eeb3caf629d22fcbd1c2c..c8cedd87c228572668c5acfdf502bc9616f2a268 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: dhd_common.c 796845 2018-12-27 06:24:52Z $
+ * $Id: dhd_common.c 815855 2019-04-22 05:16:49Z $
  */
 #include <typedefs.h>
 #include <osl.h>
  */
 #include <typedefs.h>
 #include <osl.h>
@@ -3638,7 +3638,7 @@ dhd_pktfilter_offload_set(dhd_pub_t * dhd, char *arg)
        int                             rc;
        uint32                          mask_size;
        uint32                          pattern_size;
        int                             rc;
        uint32                          mask_size;
        uint32                          pattern_size;
-       char                            *argv[16], * buf = 0;
+       char                            *argv[MAXPKT_ARG] = {0}, * buf = 0;
        int                                     i = 0;
        char                            *arg_save = 0, *arg_org = 0;
 
        int                                     i = 0;
        char                            *arg_save = 0, *arg_org = 0;
 
@@ -3666,8 +3666,13 @@ dhd_pktfilter_offload_set(dhd_pub_t * dhd, char *arg)
        }
 
        argv[i] = bcmstrtok(&arg_save, " ", 0);
        }
 
        argv[i] = bcmstrtok(&arg_save, " ", 0);
-       while (argv[i++])
+       while (argv[i++]) {
+               if (i >= MAXPKT_ARG) {
+                       DHD_ERROR(("Invalid args provided\n"));
+                       goto fail;
+               }
                argv[i] = bcmstrtok(&arg_save, " ", 0);
                argv[i] = bcmstrtok(&arg_save, " ", 0);
+       }
 
        i = 0;
        if (argv[i] == NULL) {
 
        i = 0;
        if (argv[i] == NULL) {
@@ -4598,6 +4603,12 @@ dhd_get_suspend_bcn_li_dtim(dhd_pub_t *dhd, int *dtim_period, int *bcn_interval)
        int ret = -1;
        int allowed_skip_dtim_cnt = 0;
 
        int ret = -1;
        int allowed_skip_dtim_cnt = 0;
 
+       if (dhd->disable_dtim_in_suspend) {
+               DHD_ERROR(("%s Disable bcn_li_dtim in suspend\n", __FUNCTION__));
+               bcn_li_dtim = 0;
+               return bcn_li_dtim;
+       }
+
        /* Check if associated */
        if (dhd_is_associated(dhd, 0, NULL) == FALSE) {
                DHD_TRACE(("%s NOT assoc ret %d\n", __FUNCTION__, ret));
        /* Check if associated */
        if (dhd_is_associated(dhd, 0, NULL) == FALSE) {
                DHD_TRACE(("%s NOT assoc ret %d\n", __FUNCTION__, ret));
@@ -4674,6 +4685,12 @@ dhd_get_suspend_bcn_li_dtim(dhd_pub_t *dhd)
        int ap_beacon = 0;
        int allowed_skip_dtim_cnt = 0;
 
        int ap_beacon = 0;
        int allowed_skip_dtim_cnt = 0;
 
+       if (dhd->disable_dtim_in_suspend) {
+               DHD_ERROR(("%s Disable bcn_li_dtim in suspend\n", __FUNCTION__));
+               bcn_li_dtim = 0;
+               goto exit;
+       }
+
        /* Check if associated */
        if (dhd_is_associated(dhd, 0, NULL) == FALSE) {
                DHD_TRACE(("%s NOT assoc ret %d\n", __FUNCTION__, ret));
        /* Check if associated */
        if (dhd_is_associated(dhd, 0, NULL) == FALSE) {
                DHD_TRACE(("%s NOT assoc ret %d\n", __FUNCTION__, ret));
index 3ca97ad00c7f0bceeab8ff916f63ceb04a772670..80e1fc8368e31dc5f7da7cc41a36b1970af278e1 100644 (file)
@@ -903,8 +903,10 @@ early_param("androidboot.hw_rev", get_hw_rev);
 #ifdef GEN_SOFTAP_INFO_FILE
 #define SOFTAP_INFO_FILE_FIRST_LINE    "#.softap.info"
 /*
 #ifdef GEN_SOFTAP_INFO_FILE
 #define SOFTAP_INFO_FILE_FIRST_LINE    "#.softap.info"
 /*
- * # Whether both wifi and hotspot can be turned on at the same time?
+ * # Does RSDB Wifi sharing support?
  * DualBandConcurrency
  * DualBandConcurrency
+ * # Both wifi and hotspot can be turned on at the same time?
+ * DualInterface
  * # 5Ghz band support?
  * 5G
  * # How many clients can be connected?
  * # 5Ghz band support?
  * 5G
  * # How many clients can be connected?
@@ -936,21 +938,17 @@ const char *softap_info_values[] = {
 const char *softap_info_values[] = {
        "yes",
 #ifdef DHD_SOFTAP_DUAL_IF_INFO
 const char *softap_info_values[] = {
        "yes",
 #ifdef DHD_SOFTAP_DUAL_IF_INFO
-#ifdef CONFIG_WLAN_GRACE
+#if defined(CONFIG_WLAN_GRACE) || defined(CONFIG_SEC_KELLYLTE_PROJECT)
        "yes",
 #else
        "no",
        "yes",
 #else
        "no",
-#endif /* CONFIG_WLAN_GRACE */
+#endif /* CONFIG_WLAN_GRACE || CONFIG_SEC_KELLYLTE_PROJECT */
 #endif /* DHD_SOFTAP_DUAL_IF_INFO */
        "yes", "10", "yes", "yes", "yes", NULL
 };
 #elif defined(BCM43454_CHIP) || defined(BCM43455_CHIP) || defined(BCM43456_CHIP)
 const char *softap_info_values[] = {
 #endif /* DHD_SOFTAP_DUAL_IF_INFO */
        "yes", "10", "yes", "yes", "yes", NULL
 };
 #elif defined(BCM43454_CHIP) || defined(BCM43455_CHIP) || defined(BCM43456_CHIP)
 const char *softap_info_values[] = {
-#ifdef WL_RESTRICTED_APSTA_SCC
-       "yes",
-#else
        "no",
        "no",
-#endif /* WL_RESTRICTED_APSTA_SCC */
 #ifdef DHD_SOFTAP_DUAL_IF_INFO
 #ifdef WL_RESTRICTED_APSTA_SCC
        "yes",
 #ifdef DHD_SOFTAP_DUAL_IF_INFO
 #ifdef WL_RESTRICTED_APSTA_SCC
        "yes",
index d11d908cf906b6b346c152bf056360e885929284..4d318d0cb85de0867eafe70a0492c89e233b0be9 100644 (file)
@@ -25,7 +25,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: dhd_linux.c 796863 2018-12-27 07:39:27Z $
+ * $Id: dhd_linux.c 818247 2019-05-07 04:15:13Z $
  */
 
 #include <typedefs.h>
  */
 
 #include <typedefs.h>
@@ -2906,7 +2906,7 @@ static int dhd_set_suspend(int value, dhd_pub_t *dhd)
        uint roamvar = 1;
 #endif /* ENABLE_FW_ROAM_SUSPEND */
 #ifdef ENABLE_BCN_LI_BCN_WAKEUP
        uint roamvar = 1;
 #endif /* ENABLE_FW_ROAM_SUSPEND */
 #ifdef ENABLE_BCN_LI_BCN_WAKEUP
-       int bcn_li_bcn;
+       int bcn_li_bcn = 1;
 #endif /* ENABLE_BCN_LI_BCN_WAKEUP */
        uint nd_ra_filter = 0;
 #ifdef ENABLE_IPMCAST_FILTER
 #endif /* ENABLE_BCN_LI_BCN_WAKEUP */
        uint nd_ra_filter = 0;
 #ifdef ENABLE_IPMCAST_FILTER
@@ -3087,13 +3087,22 @@ static int dhd_set_suspend(int value, dhd_pub_t *dhd)
                                }
 #endif /* ENABLE_FW_ROAM_SUSPEND */
 #ifdef ENABLE_BCN_LI_BCN_WAKEUP
                                }
 #endif /* ENABLE_FW_ROAM_SUSPEND */
 #ifdef ENABLE_BCN_LI_BCN_WAKEUP
-                               bcn_li_bcn = 0;
+                               if (bcn_li_dtim) {
+                                       bcn_li_bcn = 0;
+                               }
                                ret = dhd_iovar(dhd, 0, "bcn_li_bcn", (char *)&bcn_li_bcn,
                                                sizeof(bcn_li_bcn), NULL, 0, TRUE);
                                if (ret < 0) {
                                        DHD_ERROR(("%s bcn_li_bcn failed %d\n", __FUNCTION__, ret));
                                }
 #endif /* ENABLE_BCN_LI_BCN_WAKEUP */
                                ret = dhd_iovar(dhd, 0, "bcn_li_bcn", (char *)&bcn_li_bcn,
                                                sizeof(bcn_li_bcn), NULL, 0, TRUE);
                                if (ret < 0) {
                                        DHD_ERROR(("%s bcn_li_bcn failed %d\n", __FUNCTION__, ret));
                                }
 #endif /* ENABLE_BCN_LI_BCN_WAKEUP */
+#if defined(WL_CFG80211) && defined(WL_BCNRECV)
+                               ret = wl_android_bcnrecv_suspend(dhd_linux_get_primary_netdev(dhd));
+                               if (ret != BCME_OK) {
+                                       DHD_ERROR(("failed to stop beacon recv event on"
+                                               " suspend state (%d)\n", ret));
+                               }
+#endif /* WL_CFG80211 && WL_BCNRECV */
 #ifdef NDO_CONFIG_SUPPORT
                                if (dhd->ndo_enable) {
                                        if (!dhd->ndo_host_ip_overflow) {
 #ifdef NDO_CONFIG_SUPPORT
                                if (dhd->ndo_enable) {
                                        if (!dhd->ndo_host_ip_overflow) {
@@ -3171,6 +3180,13 @@ static int dhd_set_suspend(int value, dhd_pub_t *dhd)
                                dhd_wl_ioctl_cmd(dhd, WLC_SET_PM, (char *)&power_mode,
                                                 sizeof(power_mode), TRUE, 0);
 #endif /* SUPPORT_PM2_ONLY */
                                dhd_wl_ioctl_cmd(dhd, WLC_SET_PM, (char *)&power_mode,
                                                 sizeof(power_mode), TRUE, 0);
 #endif /* SUPPORT_PM2_ONLY */
+#if defined(WL_CFG80211) && defined(WL_BCNRECV)
+                               ret = wl_android_bcnrecv_resume(dhd_linux_get_primary_netdev(dhd));
+                               if (ret != BCME_OK) {
+                                       DHD_ERROR(("failed to resume beacon recv state (%d)\n",
+                                                       ret));
+                               }
+#endif /* WL_CF80211 && WL_BCNRECV */
 #ifdef PKT_FILTER_SUPPORT
                                /* disable pkt filter */
                                dhd_enable_packet_filter(0, dhd);
 #ifdef PKT_FILTER_SUPPORT
                                /* disable pkt filter */
                                dhd_enable_packet_filter(0, dhd);
@@ -3254,7 +3270,6 @@ static int dhd_set_suspend(int value, dhd_pub_t *dhd)
                                }
 #endif /* ENABLE_FW_ROAM_SUSPEND */
 #ifdef ENABLE_BCN_LI_BCN_WAKEUP
                                }
 #endif /* ENABLE_FW_ROAM_SUSPEND */
 #ifdef ENABLE_BCN_LI_BCN_WAKEUP
-                               bcn_li_bcn = 1;
                                ret = dhd_iovar(dhd, 0, "bcn_li_bcn", (char *)&bcn_li_bcn,
                                                sizeof(bcn_li_bcn), NULL, 0, TRUE);
                                if (ret < 0) {
                                ret = dhd_iovar(dhd, 0, "bcn_li_bcn", (char *)&bcn_li_bcn,
                                                sizeof(bcn_li_bcn), NULL, 0, TRUE);
                                if (ret < 0) {
@@ -7188,6 +7203,7 @@ dhd_add_monitor_if(dhd_info_t *dhd)
                DHD_ERROR(("%s, register_netdev failed for %s\n",
                        __FUNCTION__, dev->name));
                free_netdev(dev);
                DHD_ERROR(("%s, register_netdev failed for %s\n",
                        __FUNCTION__, dev->name));
                free_netdev(dev);
+               return;
        }
 
        if (FW_SUPPORTED((&dhd->pub), monitor)) {
        }
 
        if (FW_SUPPORTED((&dhd->pub), monitor)) {
@@ -11034,6 +11050,7 @@ dhd_preinit_ioctls(dhd_pub_t *dhd)
 #else
        dhd->max_dtim_enable = FALSE;
 #endif /* ENABLE_MAX_DTIM_IN_SUSPEND */
 #else
        dhd->max_dtim_enable = FALSE;
 #endif /* ENABLE_MAX_DTIM_IN_SUSPEND */
+       dhd->disable_dtim_in_suspend = FALSE;
 #ifdef CUSTOM_SET_OCLOFF
        dhd->ocl_off = FALSE;
 #endif /* CUSTOM_SET_OCLOFF */
 #ifdef CUSTOM_SET_OCLOFF
        dhd->ocl_off = FALSE;
 #endif /* CUSTOM_SET_OCLOFF */
@@ -11717,7 +11734,9 @@ dhd_preinit_ioctls(dhd_pub_t *dhd)
 #endif /* PNO_SUPPORT */
        /* enable dongle roaming event */
 #ifdef WL_CFG80211
 #endif /* PNO_SUPPORT */
        /* enable dongle roaming event */
 #ifdef WL_CFG80211
+#if !defined(ROAM_EVT_DISABLE)
        setbit(eventmask, WLC_E_ROAM);
        setbit(eventmask, WLC_E_ROAM);
+#endif /* !ROAM_EVT_DISABLE */
        setbit(eventmask, WLC_E_BSSID);
 #endif /* WL_CFG80211 */
 #ifdef BCMCCX
        setbit(eventmask, WLC_E_BSSID);
 #endif /* WL_CFG80211 */
 #ifdef BCMCCX
@@ -11824,6 +11843,9 @@ dhd_preinit_ioctls(dhd_pub_t *dhd)
 #ifdef SUPPORT_EVT_SDB_LOG
                setbit(eventmask_msg->mask, WLC_E_SDB_TRANSITION);
 #endif /* SUPPORT_EVT_SDB_LOG */
 #ifdef SUPPORT_EVT_SDB_LOG
                setbit(eventmask_msg->mask, WLC_E_SDB_TRANSITION);
 #endif /* SUPPORT_EVT_SDB_LOG */
+#ifdef WL_BCNRECV
+               setbit(eventmask_msg->mask, WLC_E_BCNRECV_ABORTED);
+#endif /* WL_BCNRECV */
                /* Write updated Event mask */
                eventmask_msg->ver = EVENTMSGS_VER;
                eventmask_msg->command = EVENTMSGS_SET_MASK;
                /* Write updated Event mask */
                eventmask_msg->ver = EVENTMSGS_VER;
                eventmask_msg->command = EVENTMSGS_SET_MASK;
@@ -14573,6 +14595,26 @@ int net_os_set_max_dtim_enable(struct net_device *dev, int val)
        return 0;
 }
 
        return 0;
 }
 
+int
+net_os_set_disable_dtim_in_suspend(struct net_device *dev, int val)
+{
+       dhd_info_t *dhd = DHD_DEV_INFO(dev);
+
+       if (dhd) {
+               DHD_ERROR(("%s: Disable bcn_li_dtim in suspend : %s\n",
+                       __FUNCTION__, (val ? "Enable" : "Disable")));
+               if (val) {
+                       dhd->pub.disable_dtim_in_suspend = TRUE;
+               } else {
+                       dhd->pub.disable_dtim_in_suspend = FALSE;
+               }
+       } else {
+               return -1;
+       }
+
+       return 0;
+}
+
 #ifdef PKT_FILTER_SUPPORT
 int net_os_rxfilter_add_remove(struct net_device *dev, int add_remove, int num)
 {
 #ifdef PKT_FILTER_SUPPORT
 int net_os_rxfilter_add_remove(struct net_device *dev, int add_remove, int num)
 {
@@ -16723,6 +16765,15 @@ dhd_convert_memdump_type_to_str(uint32 type, char *buf, int substr_type)
                        type_str = "DUE_TO_BT";
                        break;
 #endif /* DHD_ERPOM */
                        type_str = "DUE_TO_BT";
                        break;
 #endif /* DHD_ERPOM */
+               case DUMP_TYPE_LOGSET_BEYOND_RANGE:
+                       type_str = "LOGSET_BEYOND_RANGE";
+                       break;
+               case DUMP_TYPE_CTO_RECOVERY:
+                       type_str = "CTO_RECOVERY";
+                       break;
+               case DUMP_TYPE_SEQUENTIAL_PRIVCMD_ERROR:
+                       type_str = "SEQUENTIAL_PRIVCMD_ERROR";
+                       break;
                default:
                        type_str = "Unknown_type";
                        break;
                default:
                        type_str = "Unknown_type";
                        break;
index 671d2f97b3ab54c7e925a928f675d94e3be5cbf1..5bf17a699df1484a0b5cd4404edd0b1f1645f9bb 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: dhd_linux.h 798171 2019-01-07 09:10:40Z $
+ * $Id: dhd_linux.h 798798 2019-01-10 10:24:21Z $
  */
 
 /* wifi platform functions for power, interrupt and pre-alloc, either
  */
 
 /* wifi platform functions for power, interrupt and pre-alloc, either
@@ -302,6 +302,10 @@ extern uint32 sec_save_softap_info(void);
 #endif /* GEN_SOFTAP_INFO_FILE */
 #endif /* CUSTOMER_HW4 */
 
 #endif /* GEN_SOFTAP_INFO_FILE */
 #endif /* CUSTOMER_HW4 */
 
+#ifdef DHD_SEND_HANG_PRIVCMD_ERRORS
+extern uint32 report_hang_privcmd_err;
+#endif /* DHD_SEND_HANG_PRIVCMD_ERRORS */
+
 #if defined(ARGOS_CPU_SCHEDULER) && !defined(DHD_LB_IRQSET) && \
        !defined(CONFIG_SOC_EXYNOS7870)
 extern int argos_task_affinity_setup_label(struct task_struct *p, const char *label,
 #if defined(ARGOS_CPU_SCHEDULER) && !defined(DHD_LB_IRQSET) && \
        !defined(CONFIG_SOC_EXYNOS7870)
 extern int argos_task_affinity_setup_label(struct task_struct *p, const char *label,
index b406bad2eb8deb3fdd7d5d9a59937a500801555b..057f0e545975ccd34a51a25ab86486db93930d5e 100644 (file)
@@ -25,7 +25,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: dhd_linux_exportfs.c 793750 2018-12-11 02:12:38Z $
+ * $Id: dhd_linux_exportfs.c 808910 2019-03-11 10:44:36Z $
  */
 #include <linux/kobject.h>
 #include <linux/proc_fs.h>
  */
 #include <linux/kobject.h>
 #include <linux/proc_fs.h>
@@ -916,7 +916,7 @@ set_proptx(struct dhd_info *dev, const char *buf, size_t count)
 
        proptx = onoff;
        DHD_ERROR(("[WIFI_SEC] %s: FRAMEBURST On/Off from sysfs = %u\n",
 
        proptx = onoff;
        DHD_ERROR(("[WIFI_SEC] %s: FRAMEBURST On/Off from sysfs = %u\n",
-               __FUNCTION__, txbf));
+               __FUNCTION__, proptx));
        return count;
 }
 
        return count;
 }
 
@@ -1012,6 +1012,36 @@ static struct dhd_attr dhd_attr_adps_bam =
        __ATTR(bad_ap_list, 0660, show_adps_bam_list, store_adps_bam_list);
 #endif /* DHD_ADPS_BAM_EXPORT && WL_BAM */
 
        __ATTR(bad_ap_list, 0660, show_adps_bam_list, store_adps_bam_list);
 #endif /* DHD_ADPS_BAM_EXPORT && WL_BAM */
 
+#ifdef DHD_SEND_HANG_PRIVCMD_ERRORS
+uint32 report_hang_privcmd_err = 1;
+
+static ssize_t
+show_hang_privcmd_err(struct dhd_info *dev, char *buf)
+{
+       ssize_t ret = 0;
+
+       ret = scnprintf(buf, PAGE_SIZE - 1, "%u\n", report_hang_privcmd_err);
+       return ret;
+}
+
+static ssize_t
+set_hang_privcmd_err(struct dhd_info *dev, const char *buf, size_t count)
+{
+       uint32 val;
+
+       val = bcm_atoi(buf);
+       sscanf(buf, "%u", &val);
+
+       report_hang_privcmd_err = val ? 1 : 0;
+       DHD_INFO(("%s: Set report HANG for private cmd error: %d\n",
+               __FUNCTION__, report_hang_privcmd_err));
+       return count;
+}
+
+static struct dhd_attr dhd_attr_hang_privcmd_err =
+       __ATTR(hang_privcmd_err, 0660, show_hang_privcmd_err, set_hang_privcmd_err);
+#endif /* DHD_SEND_HANG_PRIVCMD_ERRORS */
+
 /* Attribute object that gets registered with "wifi" kobject tree */
 static struct attribute *control_file_attrs[] = {
 #ifdef DHD_MAC_ADDR_EXPORT
 /* Attribute object that gets registered with "wifi" kobject tree */
 static struct attribute *control_file_attrs[] = {
 #ifdef DHD_MAC_ADDR_EXPORT
@@ -1061,6 +1091,9 @@ static struct attribute *control_file_attrs[] = {
 #ifdef DHD_ADPS_BAM_EXPORT
        &dhd_attr_adps_bam.attr,
 #endif /* DHD_ADPS_BAM_EXPORT */
 #ifdef DHD_ADPS_BAM_EXPORT
        &dhd_attr_adps_bam.attr,
 #endif /* DHD_ADPS_BAM_EXPORT */
+#ifdef DHD_SEND_HANG_PRIVCMD_ERRORS
+       &dhd_attr_hang_privcmd_err.attr,
+#endif /* DHD_SEND_HANG_PRIVCMD_ERRORS */
        NULL
 };
 
        NULL
 };
 
index b49a178c43e6164c1cc912e668dff4fd918d578a..aa5e530fea7d5885b358b671685a08707f83c409 100644 (file)
@@ -26,7 +26,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: dhd_msgbuf.c 796673 2018-12-26 08:34:38Z $
+ * $Id: dhd_msgbuf.c 818370 2019-05-07 11:39:47Z $
  */
 
 #include <typedefs.h>
  */
 
 #include <typedefs.h>
@@ -8940,6 +8940,11 @@ dhd_prot_debug_info_print(dhd_pub_t *dhd)
        DHD_ERROR(("DHD: %s\n", dhd_version));
        DHD_ERROR(("Firmware: %s\n", fw_version));
 
        DHD_ERROR(("DHD: %s\n", dhd_version));
        DHD_ERROR(("Firmware: %s\n", fw_version));
 
+#ifdef DHD_FW_COREDUMP
+       DHD_ERROR(("\n ------- DUMPING CONFIGURATION INFORMATION ------ \r\n"));
+       DHD_ERROR(("memdump mode: %d\n", dhd->memdump_enabled));
+#endif /* DHD_FW_COREDUMP */
+
        DHD_ERROR(("\n ------- DUMPING PROTOCOL INFORMATION ------- \r\n"));
        DHD_ERROR(("ICPrevs: Dev %d, Host %d, active %d\n",
                prot->device_ipc_version,
        DHD_ERROR(("\n ------- DUMPING PROTOCOL INFORMATION ------- \r\n"));
        DHD_ERROR(("ICPrevs: Dev %d, Host %d, active %d\n",
                prot->device_ipc_version,
index 8fbd3ea567cd3e5321ce8988463de2ca1093f789..8aeacde1029fc6aed2e03d698336b9dcc39ee563 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: dhd_pcie.c 797197 2018-12-29 03:31:21Z $
+ * $Id: dhd_pcie.c 802450 2019-02-01 14:05:56Z $
  */
 
 /* include files */
  */
 
 /* include files */
@@ -159,13 +159,10 @@ static void dhdpcie_bus_reg_unmap(osl_t *osh, volatile char *addr, int size);
 static int dhdpcie_cc_nvmshadow(dhd_bus_t *bus, struct bcmstrbuf *b);
 static void dhdpcie_fw_trap(dhd_bus_t *bus);
 static void dhd_fillup_ring_sharedptr_info(dhd_bus_t *bus, ring_info_t *ring_info);
 static int dhdpcie_cc_nvmshadow(dhd_bus_t *bus, struct bcmstrbuf *b);
 static void dhdpcie_fw_trap(dhd_bus_t *bus);
 static void dhd_fillup_ring_sharedptr_info(dhd_bus_t *bus, ring_info_t *ring_info);
+static void dhdpcie_handle_mb_data(dhd_bus_t *bus);
 extern void dhd_dpc_enable(dhd_pub_t *dhdp);
 extern void dhd_dpc_kill(dhd_pub_t *dhdp);
 
 extern void dhd_dpc_enable(dhd_pub_t *dhdp);
 extern void dhd_dpc_kill(dhd_pub_t *dhdp);
 
-#ifdef DHD_PCIE_NATIVE_RUNTIMEPM
-static void dhdpcie_handle_mb_data(dhd_bus_t *bus);
-#endif /* DHD_PCIE_NATIVE_RUNTIMEPM */
-
 #ifdef IDLE_TX_FLOW_MGMT
 static void dhd_bus_check_idle_scan(dhd_bus_t *bus);
 static void dhd_bus_idle_scan(dhd_bus_t *bus);
 #ifdef IDLE_TX_FLOW_MGMT
 static void dhd_bus_check_idle_scan(dhd_bus_t *bus);
 static void dhd_bus_idle_scan(dhd_bus_t *bus);
@@ -754,16 +751,59 @@ dhd_bus_query_dpc_sched_errors(dhd_pub_t *dhdp)
                /* print out minimum timestamp info */
                DHD_ERROR(("isr_entry_time="SEC_USEC_FMT
                        " isr_exit_time="SEC_USEC_FMT
                /* print out minimum timestamp info */
                DHD_ERROR(("isr_entry_time="SEC_USEC_FMT
                        " isr_exit_time="SEC_USEC_FMT
-                       " dpc_entry_time="SEC_USEC_FMT
-                       "\ndpc_exit_time="SEC_USEC_FMT
+                       " last_non_ours_irq_time="SEC_USEC_FMT
+                       " \ndpc_entry_time="SEC_USEC_FMT
+                       " dpc_exit_time="SEC_USEC_FMT
                        " dpc_sched_time="SEC_USEC_FMT
                        " resched_dpc_time="SEC_USEC_FMT"\n",
                        GET_SEC_USEC(bus->isr_entry_time),
                        GET_SEC_USEC(bus->isr_exit_time),
                        " dpc_sched_time="SEC_USEC_FMT
                        " resched_dpc_time="SEC_USEC_FMT"\n",
                        GET_SEC_USEC(bus->isr_entry_time),
                        GET_SEC_USEC(bus->isr_exit_time),
+                       GET_SEC_USEC(bus->last_non_ours_irq_time),
                        GET_SEC_USEC(bus->dpc_entry_time),
                        GET_SEC_USEC(bus->dpc_exit_time),
                        GET_SEC_USEC(bus->dpc_sched_time),
                        GET_SEC_USEC(bus->resched_dpc_time)));
                        GET_SEC_USEC(bus->dpc_entry_time),
                        GET_SEC_USEC(bus->dpc_exit_time),
                        GET_SEC_USEC(bus->dpc_sched_time),
                        GET_SEC_USEC(bus->resched_dpc_time)));
+               /* Added more log to debug un-scheduling from isr */
+               DHD_ERROR(("donglereset=%d, busstate=%d instatus=0x%x intr_enabled=%d \n",
+                       dhdp->dongle_reset, dhdp->busstate, bus->intstatus, bus->intr_enabled));
+
+               dhd_pcie_dump_rc_conf_space_cap(dhdp);
+#ifdef EXTENDED_PCIE_DEBUG_DUMP
+       DHD_ERROR(("Pcie EP Uncorrectable Error Status Val=0x%x\n",
+               dhdpcie_ep_access_cap(bus, PCIE_EXTCAP_ID_ERR,
+               PCIE_EXTCAP_AER_UCERR_OFFSET, TRUE, FALSE, 0)));
+       DHD_ERROR(("hdrlog0(0x%x)=0x%08x hdrlog1(0x%x)=0x%08x hdrlog2(0x%x)=0x%08x "
+               "hdrlog3(0x%x)=0x%08x\n", PCI_TLP_HDR_LOG1,
+               dhd_pcie_config_read(bus->osh, PCI_TLP_HDR_LOG1, sizeof(uint32)),
+               PCI_TLP_HDR_LOG2,
+               dhd_pcie_config_read(bus->osh, PCI_TLP_HDR_LOG2, sizeof(uint32)),
+               PCI_TLP_HDR_LOG3,
+               dhd_pcie_config_read(bus->osh, PCI_TLP_HDR_LOG3, sizeof(uint32)),
+               PCI_TLP_HDR_LOG4,
+               dhd_pcie_config_read(bus->osh, PCI_TLP_HDR_LOG4, sizeof(uint32))));
+               if (bus->sih->buscorerev >= 24) {
+                       DHD_ERROR(("DeviceStatusControl(0x%x)=0x%x SubsystemControl(0x%x)=0x%x "
+                       "L1SSControl2(0x%x)=0x%x\n", PCIECFGREG_DEV_STATUS_CTRL,
+                       dhd_pcie_config_read(bus->osh, PCIECFGREG_DEV_STATUS_CTRL,
+                       sizeof(uint32)), PCIE_CFG_SUBSYSTEM_CONTROL,
+                       dhd_pcie_config_read(bus->osh, PCIE_CFG_SUBSYSTEM_CONTROL,
+                       sizeof(uint32)), PCIECFGREG_PML1_SUB_CTRL2,
+                       dhd_pcie_config_read(bus->osh, PCIECFGREG_PML1_SUB_CTRL2,
+                       sizeof(uint32))));
+
+                       DHD_ERROR(("\n ------- DUMPING PCIE DAR Registers ------- \r\n"));
+                       DHD_ERROR(("clkctl(0x%x)=0x%x pwrctl(0x%x)=0x%x H2D_DB0(0x%x)=0x%x\n",
+                       PCIDARClkCtl(bus->sih->buscorerev),
+                       si_corereg(bus->sih, bus->sih->buscoreidx,
+                       PCIDARClkCtl(bus->sih->buscorerev), 0, 0),
+                       PCIDARPwrCtl(bus->sih->buscorerev),
+                       si_corereg(bus->sih, bus->sih->buscoreidx,
+                       PCIDARPwrCtl(bus->sih->buscorerev), 0, 0),
+                       PCIDARH2D_DB0(bus->sih->buscorerev),
+                       si_corereg(bus->sih, bus->sih->buscoreidx,
+                       PCIDARH2D_DB0(bus->sih->buscorerev), 0, 0)));
+               }
+#endif /* EXTENDED_PCIE_DEBUG_DUMP */
        }
 
        return sched_err;
        }
 
        return sched_err;
@@ -869,7 +909,9 @@ dhdpcie_bus_isr(dhd_bus_t *bus)
                        DHD_INFO(("%s, not ready to receive interrupts\n", __FUNCTION__));
                        break;
                }
                        DHD_INFO(("%s, not ready to receive interrupts\n", __FUNCTION__));
                        break;
                }
-
+#ifdef DHD_PCIE_RUNTIMEPM
+               bus->idlecount = 0;
+#endif /* DHD_PCIE_RUNTIMEPM */
                if (PCIECTO_ENAB(bus)) {
                        /* read pci_intstatus */
                        intstatus = dhdpcie_bus_cfg_read_dword(bus, PCI_INT_STATUS, 4);
                if (PCIECTO_ENAB(bus)) {
                        /* read pci_intstatus */
                        intstatus = dhdpcie_bus_cfg_read_dword(bus, PCI_INT_STATUS, 4);
@@ -5808,7 +5850,12 @@ dhdpcie_bus_suspend(struct dhd_bus *bus, bool state)
                                        __FUNCTION__, intstatus, host_irq_disabled));
                                dhd_pcie_intr_count_dump(bus->dhd);
                                dhd_print_tasklet_status(bus->dhd);
                                        __FUNCTION__, intstatus, host_irq_disabled));
                                dhd_pcie_intr_count_dump(bus->dhd);
                                dhd_print_tasklet_status(bus->dhd);
-                               dhd_prot_process_ctrlbuf(bus->dhd);
+                               if (bus->api.fw_rev >= PCIE_SHARED_VERSION_6 &&
+                                       !bus->use_mailbox) {
+                                       dhd_prot_process_ctrlbuf(bus->dhd);
+                               } else {
+                                       dhdpcie_handle_mb_data(bus);
+                               }
                                timeleft = dhd_os_d3ack_wait(bus->dhd, &bus->wait_for_d3_ack);
                                /* Clear Interrupts */
                                dhdpcie_bus_clear_intstatus(bus);
                                timeleft = dhd_os_d3ack_wait(bus->dhd, &bus->wait_for_d3_ack);
                                /* Clear Interrupts */
                                dhdpcie_bus_clear_intstatus(bus);
@@ -6567,7 +6614,7 @@ dhdpcie_downloadvars(dhd_bus_t *bus, void *arg, int len)
                bus->dhd->vars_ccode[0] = 0;
                bus->dhd->vars_regrev = 0;
                if ((pos = strstr(tmpbuf, "ccode"))) {
                bus->dhd->vars_ccode[0] = 0;
                bus->dhd->vars_regrev = 0;
                if ((pos = strstr(tmpbuf, "ccode"))) {
-                       sscanf(pos, "ccode=%s\n", bus->dhd->vars_ccode);
+                       sscanf(pos, "ccode=%3s\n", bus->dhd->vars_ccode);
                }
                if ((pos = strstr(tmpbuf, "regrev"))) {
                        sscanf(pos, "regrev=%u\n", &(bus->dhd->vars_regrev));
                }
                if ((pos = strstr(tmpbuf, "regrev"))) {
                        sscanf(pos, "regrev=%u\n", &(bus->dhd->vars_regrev));
index d812ec4091892a947e7f86f47de2b0aa59f162a6..2727b7d7d184cb0bd9ad6c3fc2e3243a8bc983e3 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: dhd_pcie_linux.c 797197 2018-12-29 03:31:21Z $
+ * $Id: dhd_pcie_linux.c 800754 2019-01-23 08:38:54Z $
  */
 
 /* include files */
  */
 
 /* include files */
 #define OS_HANDLE_MAGIC                0x1234abcd      /* Magic # to recognize osh */
 #define BCM_MEM_FILENAME_LEN   24              /* Mem. filename length */
 
 #define OS_HANDLE_MAGIC                0x1234abcd      /* Magic # to recognize osh */
 #define BCM_MEM_FILENAME_LEN   24              /* Mem. filename length */
 
-#define OSL_PKTTAG_CLEAR(p) \
-do { \
-       struct sk_buff *s = (struct sk_buff *)(p); \
-       ASSERT(OSL_PKTTAG_SZ == 32); \
-       *(uint32 *)(&s->cb[0]) = 0; *(uint32 *)(&s->cb[4]) = 0; \
-       *(uint32 *)(&s->cb[8]) = 0; *(uint32 *)(&s->cb[12]) = 0; \
-       *(uint32 *)(&s->cb[16]) = 0; *(uint32 *)(&s->cb[20]) = 0; \
-       *(uint32 *)(&s->cb[24]) = 0; *(uint32 *)(&s->cb[28]) = 0; \
-} while (0)
-
 /* user defined data structures  */
 
 typedef struct dhd_pc_res {
 /* user defined data structures  */
 
 typedef struct dhd_pc_res {
index 07bb0fde911726a6faef2e0ec51287660827b6cf..be60ac7a8d72b51a1fb58cc292112c0234ae6f2a 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: dhd_sdio.c 796833 2018-12-27 05:52:37Z $
+ * $Id: dhd_sdio.c 814373 2019-04-11 02:01:55Z $
  */
 
 #include <typedefs.h>
  */
 
 #include <typedefs.h>
@@ -252,6 +252,8 @@ typedef struct dhd_console {
 
 #endif /* defined (BT_OVER_SDIO) */
 
 
 #endif /* defined (BT_OVER_SDIO) */
 
+#define SBSDIO_CIS_TINY_SIZE_LIMIT 26
+
 /* Private data for SDIO bus interaction */
 typedef struct dhd_bus {
        dhd_pub_t       *dhd;
 /* Private data for SDIO bus interaction */
 typedef struct dhd_bus {
        dhd_pub_t       *dhd;
@@ -7759,7 +7761,7 @@ dhdsdio_probe_attach(struct dhd_bus *bus, osl_t *osh, void *sdh, void *regsva,
        uint8 clkctl = 0;
 #endif /* !BCMSPI */
        uint fn, numfn;
        uint8 clkctl = 0;
 #endif /* !BCMSPI */
        uint fn, numfn;
-       uint8 *cis[SDIOD_MAX_IOFUNCS];
+       uint8 *cis = NULL;
        int32 value;
        int err = 0;
 
        int32 value;
        int err = 0;
 
@@ -7809,47 +7811,56 @@ dhdsdio_probe_attach(struct dhd_bus *bus, osl_t *osh, void *sdh, void *regsva,
                numfn = 0; /* internally func is hardcoded to 1 as gSPI has cis on F1 only */
 #endif /* !BCMSPI */
 #ifndef BCMSDIOLITE
                numfn = 0; /* internally func is hardcoded to 1 as gSPI has cis on F1 only */
 #endif /* !BCMSPI */
 #ifndef BCMSDIOLITE
+               if (!(cis = MALLOC(osh, SBSDIO_CIS_SIZE_LIMIT))) {
+                       DHD_INFO(("dhdsdio_probe: cis malloc failed\n"));
+                       goto fail;
+               }
+               bzero(cis, SBSDIO_CIS_SIZE_LIMIT);
+
                for (fn = 0; fn <= numfn; fn++) {
                for (fn = 0; fn <= numfn; fn++) {
-                       if (!(cis[fn] = MALLOC(osh, SBSDIO_CIS_SIZE_LIMIT))) {
-                               DHD_INFO(("dhdsdio_probe: fn %d cis malloc failed\n", fn));
-                               break;
+                       if (DHD_INFO_ON()) {
+                               if ((err = bcmsdh_cis_read(sdh, fn, cis,
+                                               SBSDIO_CIS_SIZE_LIMIT))) {
+                                       DHD_INFO(("dhdsdio_probe: fn %d cis read err %d\n",
+                                               fn, err));
+                                       break;
+                               }
+#ifdef DHD_DEBUG
+                               dhd_dump_cis(fn, cis);
+#endif /* DHD_DEBUG */
                        }
                        }
-                       bzero(cis[fn], SBSDIO_CIS_SIZE_LIMIT);
-
-                       if ((err = bcmsdh_cis_read(sdh, fn, cis[fn],
-                                                        SBSDIO_CIS_SIZE_LIMIT))) {
-                               DHD_INFO(("dhdsdio_probe: fn %d cis read err %d\n", fn, err));
-                               MFREE(osh, cis[fn], SBSDIO_CIS_SIZE_LIMIT);
-                               break;
+                       else
+                       {
+                               if (fn > 0) {
+                                       if ((err = bcmsdh_cis_read(sdh, fn, cis,
+                                                       SBSDIO_CIS_TINY_SIZE_LIMIT))) {
+                                               DHD_INFO(("dhdsdio_probe: fn %d cis read err %d\n",
+                                                       fn, err));
+                                               break;
+                                       }
+                               }
                        }
 
                        }
 
-               /* Reading the F1, F2 and F3 max blocksize values from CIS
-                 * and writing into the F1, F2 and F3  block size registers.
-                 * There is no max block size register value available for F0 in CIS register.
-                 * So, setting default value for F0 block size as 32 (which was set earlier
-                 * in iovar). IOVAR takes only one arguement.
-                 * So, we are passing the function number alongwith the value (fn<<16)
-               */
+                       /* Reading the F1, F2 and F3 max blocksize values from CIS
+                        * and writing into the F1, F2 and F3   block size registers.
+                        * There is no max block size register value available for F0 in CIS
+                        * register.
+                        * So, setting default value for F0 block size as 32 (which was set earlier
+                        * in iovar). IOVAR takes only one arguement.
+                        * So, we are passing the function number alongwith the value (fn<<16)
+                        */
                        if (!fn)
                                value = F0_BLOCK_SIZE;
                        else
                        if (!fn)
                                value = F0_BLOCK_SIZE;
                        else
-                               value = (cis[fn][25]<<8) | cis[fn][24] | (fn<<16);
+                               value = (cis[25]<<8) | cis[24] | (fn<<16);
                        if (bcmsdh_iovar_op(sdh, "sd_blocksize", NULL, 0, &value,
                        if (bcmsdh_iovar_op(sdh, "sd_blocksize", NULL, 0, &value,
-                               sizeof(value), TRUE) != BCME_OK) {
+                                       sizeof(value), TRUE) != BCME_OK) {
                                bus->blocksize = 0;
                                DHD_ERROR(("%s: fail on %s get\n", __FUNCTION__,
                                        "sd_blocksize"));
                        }
                                bus->blocksize = 0;
                                DHD_ERROR(("%s: fail on %s get\n", __FUNCTION__,
                                        "sd_blocksize"));
                        }
-#ifdef DHD_DEBUG
-                       if (DHD_INFO_ON()) {
-                               dhd_dump_cis(fn, cis[fn]);
-                       }
-#endif /* DHD_DEBUG */
                }
                }
-       while (fn-- > 0) {
-               ASSERT(cis[fn]);
-               MFREE(osh, cis[fn], SBSDIO_CIS_SIZE_LIMIT);
-       }
+               MFREE(osh, cis, SBSDIO_CIS_SIZE_LIMIT);
 #else
        BCM_REFERENCE(cis);
        BCM_REFERENCE(fn);
 #else
        BCM_REFERENCE(cis);
        BCM_REFERENCE(fn);
@@ -8365,10 +8376,14 @@ dhdsdio_suspend(void *context)
        }
 
        DHD_LINUX_GENERAL_LOCK(bus->dhd, flags);
        }
 
        DHD_LINUX_GENERAL_LOCK(bus->dhd, flags);
+       /* stop all interface network queue. */
+       dhd_txflowcontrol(bus->dhd, ALL_INTERFACES, ON);
        bus->dhd->busstate = DHD_BUS_SUSPEND;
        if (DHD_BUS_BUSY_CHECK_IN_TX(bus->dhd)) {
                DHD_ERROR(("Tx Request is not ended\n"));
                bus->dhd->busstate = DHD_BUS_DATA;
        bus->dhd->busstate = DHD_BUS_SUSPEND;
        if (DHD_BUS_BUSY_CHECK_IN_TX(bus->dhd)) {
                DHD_ERROR(("Tx Request is not ended\n"));
                bus->dhd->busstate = DHD_BUS_DATA;
+               /* resume all interface network queue. */
+               dhd_txflowcontrol(bus->dhd, ALL_INTERFACES, OFF);
                DHD_LINUX_GENERAL_UNLOCK(bus->dhd, flags);
                return -EBUSY;
        }
                DHD_LINUX_GENERAL_UNLOCK(bus->dhd, flags);
                return -EBUSY;
        }
@@ -8394,6 +8409,8 @@ dhdsdio_suspend(void *context)
        DHD_LINUX_GENERAL_LOCK(bus->dhd, flags);
        if (ret) {
                bus->dhd->busstate = DHD_BUS_DATA;
        DHD_LINUX_GENERAL_LOCK(bus->dhd, flags);
        if (ret) {
                bus->dhd->busstate = DHD_BUS_DATA;
+               /* resume all interface network queue. */
+               dhd_txflowcontrol(bus->dhd, ALL_INTERFACES, OFF);
        }
        DHD_BUS_BUSY_CLEAR_SUSPEND_IN_PROGRESS(bus->dhd);
        dhd_os_busbusy_wake(bus->dhd);
        }
        DHD_BUS_BUSY_CLEAR_SUSPEND_IN_PROGRESS(bus->dhd);
        dhd_os_busbusy_wake(bus->dhd);
@@ -8426,6 +8443,8 @@ dhdsdio_resume(void *context)
        DHD_BUS_BUSY_CLEAR_RESUME_IN_PROGRESS(bus->dhd);
        bus->dhd->busstate = DHD_BUS_DATA;
        dhd_os_busbusy_wake(bus->dhd);
        DHD_BUS_BUSY_CLEAR_RESUME_IN_PROGRESS(bus->dhd);
        bus->dhd->busstate = DHD_BUS_DATA;
        dhd_os_busbusy_wake(bus->dhd);
+       /* resume all interface network queue. */
+       dhd_txflowcontrol(bus->dhd, ALL_INTERFACES, OFF);
        DHD_LINUX_GENERAL_UNLOCK(bus->dhd, flags);
 
        return 0;
        DHD_LINUX_GENERAL_UNLOCK(bus->dhd, flags);
 
        return 0;
@@ -9330,6 +9349,38 @@ concate_revision_bcm43455(dhd_bus_t *bus, char *fw_path, char *nv_path)
 }
 #endif /* SUPPORT_MULTIPLE_CHIP_4345X */
 
 }
 #endif /* SUPPORT_MULTIPLE_CHIP_4345X */
 
+static int
+concate_revision_bcm43430(dhd_bus_t *bus, char *fw_path, char *nv_path)
+{
+
+       uint chipver;
+       char chipver_tag[4] = {0, };
+
+       DHD_TRACE(("%s: BCM43430 Multiple Revision Check\n", __FUNCTION__));
+       if (bus->sih->chip != BCM43430_CHIP_ID) {
+               DHD_ERROR(("%s:Chip is not BCM43430\n", __FUNCTION__));
+               return BCME_ERROR;
+       }
+       chipver = bus->sih->chiprev;
+       DHD_ERROR(("CHIP VER = [0x%x]\n", chipver));
+       if (chipver == 0x0) {
+               DHD_ERROR(("----- CHIP bcm4343S -----\n"));
+               strcat(chipver_tag, "_3s");
+       } else if (chipver == 0x1) {
+               DHD_ERROR(("----- CHIP bcm43438 -----\n"));
+       } else if (chipver == 0x2) {
+               DHD_ERROR(("----- CHIP bcm43436L -----\n"));
+               strcat(chipver_tag, "_36");
+       } else {
+               DHD_ERROR(("----- CHIP bcm43430 unknown revision %d -----\n",
+                       chipver));
+       }
+
+       strcat(fw_path, chipver_tag);
+       strcat(nv_path, chipver_tag);
+       return 0;
+}
+
 int
 concate_revision(dhd_bus_t *bus, char *fw_path, char *nv_path)
 {
 int
 concate_revision(dhd_bus_t *bus, char *fw_path, char *nv_path)
 {
@@ -9366,6 +9417,9 @@ concate_revision(dhd_bus_t *bus, char *fw_path, char *nv_path)
                res = concate_revision_bcm43455(bus, fw_path, nv_path);
                break;
 #endif /* SUPPORT_MULTIPLE_CHIP_4345X */
                res = concate_revision_bcm43455(bus, fw_path, nv_path);
                break;
 #endif /* SUPPORT_MULTIPLE_CHIP_4345X */
+       case BCM43430_CHIP_ID:
+               res = concate_revision_bcm43430(bus, fw_path, nv_path);
+               break;
 
        default:
                DHD_ERROR(("REVISION SPECIFIC feature is not required\n"));
 
        default:
                DHD_ERROR(("REVISION SPECIFIC feature is not required\n"));
index 399054f1c8f6cfc5320dba4d7b0b7c9e87c78b4a..6dfc2a17a4fbb563a0e902b4df4eca2eaee4feb6 100644 (file)
@@ -1,6 +1,92 @@
-BCM4361 DHD 100.13.21 for Android Crown Project
+DHD 100.13.36 for Android P Projects
 (Notes: 100.13.x is twigged off from 100.10.246)
 
 (Notes: 100.13.x is twigged off from 100.10.246)
 
+DHD 100.13.36 - 2019.05.24
+New Feature
+ - CS5350346(By Jung Junyeop) Fake AP - Fixed to provide correct channel information for beacon receive result
+ - Enable to support Fake AP
+   (This patch should be sync up with FW 13.38.60(4361B0), FW 13.50.10(4361B2) or higher version)
+ - WIPS attack warning reporting
+   (This patch should be sync up with FW 13.38.60(4361B0), FW 13.50.10(4361B2) or higher version)
+
+Security Patch
+ - CS8069399(By Kang Hyung Wook) SI-13926 Fixed use-after-free in the wl_cfg80211_set_mgmt_vndr_ies function
+
+Others
+ - CS7939107(By Kim Tae-Yong) Included memdump value prints in the dump information
+ - Added missing options into the Kconfig file
+
+
+DHD 100.13.32 - 2019.04.26
+Kernel Panic
+ - CS7696936(By Min SungBin) Fix misspelling of CUSTOMER_HW4_DEBUG definition
+ - CS7706946(By Min SungBin) Fixed to avoid kernel panic due to race condition of cfg->scan_request
+
+Security Patch
+ - CS7860687(By Kang Hyung Wook) SI-12455: Fixed use-after-free write in dhd_set_monitor() function
+ - CS7949699(By Choi Hyeonu) SI-14074: Fixed Security issue, Potential stack-based buffer overflow in dhd_pktfilter_offload_set
+ - CS7956197(By Choi Hyeonu) SI-14130: Fixed the multiple NULL pointer dereference in wl_cfgvendor.c
+
+Others
+ - CS6844193(By MinSoo Kim) Changed log level of LQCM report
+ - CS7099653(By Nitesh Suthar) Enabled frameburst to enhance throughput for BCM43436 projects
+ - CS7362375(By Gu Ja Heon) Added Private command in order to receive every beacon in Suspend
+ - CS7526157(By Suthar Nitesh) Fixed DualBandConcurrency field in .softap.info
+ - CS7765577(By Park Heebae) Wifi-on time reduction by reading necessary CIS information
+ - CS7827257(By Choi Hyeonu) Fixed kernel panic caused by invalid memory access
+ - CS7834653(By Kang MinHo) Removed redundant TX error prints during suspend in SDIO
+ - CS7884436(By Beom Jip Kim) Fixed to cancel p2p listen offloading by framework scan request
+ - CS7892037(By Sun Yinghan) Fixed to support W2018/KELLY Android P OS upgrade
+
+
+DHD 100.13.31.1 - 2019.04.19
+Others
+ - CS4726130(By Min Hyun-Ki) Added User priority to AC mapping in case of various DSCP types that may not compatible with RFC8325
+ - CS6951980(By Min Hyun-Ki) Changed the UP to AC mapping of CS6 based on the RFC8325
+
+
+DHD 100.13.31 - 2019.02.15
+Others
+ - CS7241767(By LEE EONJI) Added more logs for the DPC schedule error debugging
+ - CS7299641(By Kim MinSoo) Enabled LB_TXP for MSM8998 Platform
+ - CS7323375(By kwon Jaecheol) Enabled the softap.info file support in BCM4359 platform
+ - CS7362527(By Hyeonu Choi) Cancel P2P listen offloading operation when SoftAP brings up
+ - CS7363197(By Junhak Lim) Fixed prevent issues
+ - CS7386068(By Lee Gibum) Disabled frameburst for "2.4Ghz + SoftAP" (Drame & Great projects)
+ - Fixed the scan failure when p2p listen offload is triggered
+ - Fixed to abort scan when connection/disconnection requested
+ - Prevented the bus suspend by the PCIe Runtime PM from abnormal ISR status
+
+
+DHD 100.13.28 - 2019.01.25
+Others
+ - CS7111512(By LEE EONJI) Detect turn on failure in factory binary
+ - CS7299329(By Kim Yu-Kyoung) Fixed SoftAP CTS fail due to interface creation failure
+ - Blocked WLC_E_ROAM event to fix wakes-up frequently under weak signal AP
+ - Changed error results of GETSTAINFO private command to BCME_UNSUPPORTED if the BIGDATA_SOFTAP is not supported
+
+
+DHD 100.13.23 - 2019.01.18
+Kernel Panic
+ - Fixed kernel panic during mfg mode interface creation
+
+Security Patch
+ - CS7091164(By Kang Hyung Wook) SI-13561: Fixed kernel heap overflow security issue at dhdpcie_downloadvars
+ - CS7091371(By Kang Hyung Wook) SI-13584: Fixed kernel panic due to access to not allocated memory
+
+Others
+ - CS6785460(By Jeong Min Cheol) Send HANG event to the framework for the sequential private command failure
+ - CS7003600(By Kang MinHo) Support android private command for restoring roam/scan parameters
+ - CS7094302(By Yoon YeJi) Fixed connect failure caused by connection information not initialized
+ - CS7103552(By LEE EONJI) Fixed the recovery routine to fix the D3_ACK timeout issue
+ - CS7119174(By Kim Seong Hwan) Avoid HANG event indication due to sequential private command failures in case of unsupported error
+ - CS7137399(By Yoon YeJi) Fixed connect failure caused by connection information not initialized
+ - CS7141596(By Suthar Nitesh) Fixed MHS operates with STA mac address
+ - Control HANG report for consecutive Android private command failure by sysfs
+ - Increased the NUMBER_SEQUENTIAL_PRIVCMD_ERRORS from 4 to 7
+ - Taking a SOCRAM dump in the sequential private command error case
+
+
 DHD 100.13.21 - 2019.01.11
 Security Patch
  - CS6935603(By Hong Min Whoa) SI-13638: Fixed Kernel warning message by restructuring the DMA_LOCK and DMA_UNLOCK
 DHD 100.13.21 - 2019.01.11
 Security Patch
  - CS6935603(By Hong Min Whoa) SI-13638: Fixed Kernel warning message by restructuring the DMA_LOCK and DMA_UNLOCK
index 58ef8e536fd330dc3589a20a2030df5eb5694318..c62b76b4ea4a31f42051818db84dec076824219b 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: 802.11.h 759325 2018-04-25 00:30:00Z $
+ * $Id: 802.11.h 778668 2018-08-29 01:12:46Z $
  */
 
 #ifndef _802_11_H_
  */
 
 #ifndef _802_11_H_
@@ -257,7 +257,7 @@ BWL_PRE_PACKED_STRUCT struct dot11_bcn_prb {
        uint16                  capability;
 } BWL_POST_PACKED_STRUCT;
 #define        DOT11_BCN_PRB_LEN       12              /* 802.11 beacon/probe frame fixed length */
        uint16                  capability;
 } BWL_POST_PACKED_STRUCT;
 #define        DOT11_BCN_PRB_LEN       12              /* 802.11 beacon/probe frame fixed length */
-#define        DOT11_BCN_PRB_FIXED_LEN 12              /* 802.11 beacon/probe frame fixed length */
+#define        DOT11_BCN_PRB_FIXED_LEN 12u             /* 802.11 beacon/probe frame fixed length */
 
 BWL_PRE_PACKED_STRUCT struct dot11_auth {
        uint16                  alg;            /* algorithm */
 
 BWL_PRE_PACKED_STRUCT struct dot11_auth {
        uint16                  alg;            /* algorithm */
@@ -355,6 +355,7 @@ BWL_PRE_PACKED_STRUCT struct dot11_tpc_rep {
        uint8 margin;
 } BWL_POST_PACKED_STRUCT;
 typedef struct dot11_tpc_rep dot11_tpc_rep_t;
        uint8 margin;
 } BWL_POST_PACKED_STRUCT;
 typedef struct dot11_tpc_rep dot11_tpc_rep_t;
+#define DOT11_MNG_IE_TPC_REPORT_SIZE   (sizeof(dot11_tpc_rep_t))
 #define DOT11_MNG_IE_TPC_REPORT_LEN    2       /* length of IE data, not including 2 byte header */
 
 BWL_PRE_PACKED_STRUCT struct dot11_supp_channels {
 #define DOT11_MNG_IE_TPC_REPORT_LEN    2       /* length of IE data, not including 2 byte header */
 
 BWL_PRE_PACKED_STRUCT struct dot11_supp_channels {
@@ -1552,6 +1553,9 @@ typedef struct ccx_qfl_ie ccx_qfl_ie_t;
 #define FILS_EXTID_MNG_HLP_CONTAINER_ID                5u      /* FILS HLP Container element */
 #define DOT11_MNG_FILS_HLP_CONTAINER           (DOT11_MNG_ID_EXT_ID +\
                                                        FILS_EXTID_MNG_HLP_CONTAINER_ID)
 #define FILS_EXTID_MNG_HLP_CONTAINER_ID                5u      /* FILS HLP Container element */
 #define DOT11_MNG_FILS_HLP_CONTAINER           (DOT11_MNG_ID_EXT_ID +\
                                                        FILS_EXTID_MNG_HLP_CONTAINER_ID)
+#define FILS_EXTID_MNG_KEY_DELIVERY_ID         7u      /* FILS Key Delivery element */
+#define DOT11_MNG_FILS_KEY_DELIVERY            (DOT11_MNG_ID_EXT_ID +\
+                                                               FILS_EXTID_MNG_KEY_DELIVERY_ID)
 #define FILS_EXTID_MNG_WRAPPED_DATA_ID         8u      /* FILS Wrapped Data element */
 #define DOT11_MNG_FILS_WRAPPED_DATA            (DOT11_MNG_ID_EXT_ID +\
                                                        FILS_EXTID_MNG_WRAPPED_DATA_ID)
 #define FILS_EXTID_MNG_WRAPPED_DATA_ID         8u      /* FILS Wrapped Data element */
 #define DOT11_MNG_FILS_WRAPPED_DATA            (DOT11_MNG_ID_EXT_ID +\
                                                        FILS_EXTID_MNG_WRAPPED_DATA_ID)
@@ -1993,6 +1997,7 @@ BWL_PRE_PACKED_STRUCT struct dot11_bsstrans_req {
 } BWL_POST_PACKED_STRUCT;
 typedef struct dot11_bsstrans_req dot11_bsstrans_req_t;
 #define DOT11_BSSTRANS_REQ_LEN 7       /* Fixed length */
 } BWL_POST_PACKED_STRUCT;
 typedef struct dot11_bsstrans_req dot11_bsstrans_req_t;
 #define DOT11_BSSTRANS_REQ_LEN 7       /* Fixed length */
+#define DOT11_BSSTRANS_REQ_FIXED_LEN 7u        /* Fixed length */
 
 /* BSS Mgmt Transition Request Mode Field - 802.11v */
 #define DOT11_BSSTRANS_REQMODE_PREF_LIST_INCL          0x01
 
 /* BSS Mgmt Transition Request Mode Field - 802.11v */
 #define DOT11_BSSTRANS_REQMODE_PREF_LIST_INCL          0x01
@@ -2886,7 +2891,7 @@ BWL_PRE_PACKED_STRUCT struct dot11_rmreq_bcn {
        struct ether_addr       bssid;
 } BWL_POST_PACKED_STRUCT;
 typedef struct dot11_rmreq_bcn dot11_rmreq_bcn_t;
        struct ether_addr       bssid;
 } BWL_POST_PACKED_STRUCT;
 typedef struct dot11_rmreq_bcn dot11_rmreq_bcn_t;
-#define DOT11_RMREQ_BCN_LEN    18
+#define DOT11_RMREQ_BCN_LEN    18u
 
 BWL_PRE_PACKED_STRUCT struct dot11_rmrep_bcn {
        uint8 reg;
 
 BWL_PRE_PACKED_STRUCT struct dot11_rmrep_bcn {
        uint8 reg;
@@ -4326,6 +4331,8 @@ typedef enum vht_op_chan_width {
        VHT_OP_CHAN_WIDTH_80_80 = 3  /* deprecated - IEEE 802.11 REVmc D8.0 Table 11-25 */
 } vht_op_chan_width_t;
 
        VHT_OP_CHAN_WIDTH_80_80 = 3  /* deprecated - IEEE 802.11 REVmc D8.0 Table 11-25 */
 } vht_op_chan_width_t;
 
+#define VHT_OP_INFO_LEN                3
+
 /* AID length */
 #define AID_IE_LEN             2
 /**
 /* AID length */
 #define AID_IE_LEN             2
 /**
@@ -4400,7 +4407,7 @@ typedef struct vht_features_ie_hdr vht_features_ie_hdr_t;
 #ifdef WL_LEGACY_P2P
 #define APPLE_OUI           "\x00\x17\xF2"     /* MACOSX OUI */
 #define APPLE_OUI_LEN          3
 #ifdef WL_LEGACY_P2P
 #define APPLE_OUI           "\x00\x17\xF2"     /* MACOSX OUI */
 #define APPLE_OUI_LEN          3
-#define APPLE_OUI_TYPE_P2P     9
+#define APPLE_OUI_TYPE_P2P     5
 #endif /* WL_LEGACY_P2P */
 
 #ifndef WL_LEGACY_P2P
 #endif /* WL_LEGACY_P2P */
 
 #ifndef WL_LEGACY_P2P
@@ -4974,6 +4981,17 @@ BWL_PRE_PACKED_STRUCT struct dot11_ftm_vs_ie {
 } BWL_POST_PACKED_STRUCT;
 typedef struct dot11_ftm_vs_ie dot11_ftm_vs_ie_t;
 
 } BWL_POST_PACKED_STRUCT;
 typedef struct dot11_ftm_vs_ie dot11_ftm_vs_ie_t;
 
+/* same as payload of dot11_ftm_vs_ie.
+* This definition helps in having struct access
+* of pay load while building FTM VS IE from other modules(NAN)
+*/
+BWL_PRE_PACKED_STRUCT struct dot11_ftm_vs_ie_pyld {
+       uint8 sub_type;                                 /* BRCM_FTM_IE_TYPE (or Customer) */
+       uint8 version;
+       ftm_vs_tlv_t    tlvs[1];
+} BWL_POST_PACKED_STRUCT;
+typedef struct dot11_ftm_vs_ie_pyld dot11_ftm_vs_ie_pyld_t;
+
 /* ftm vs api version */
 #define BCM_FTM_VS_PARAMS_VERSION 0x01
 
 /* ftm vs api version */
 #define BCM_FTM_VS_PARAMS_VERSION 0x01
 
index 194aa27d37d72e1f4e82754578b288e1d162358c..c7c2b7ac98e9249eb506f7ac2ddbaf7cf4e444e0 100644 (file)
@@ -26,7 +26,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: bcmevent.h 759112 2018-04-24 01:34:08Z $
+ * $Id: bcmevent.h 779385 2018-09-03 17:35:01Z $
  *
  */
 
  *
  */
 
@@ -292,9 +292,12 @@ typedef union bcm_event_msg_u {
 #define WLC_E_ADPS             176     /* ADPS event */
 #define WLC_E_SLOTTED_BSS_PEER_OP      177     /* Per peer SCB delete */
 #define WLC_E_HWA                178   /* HWA events */
 #define WLC_E_ADPS             176     /* ADPS event */
 #define WLC_E_SLOTTED_BSS_PEER_OP      177     /* Per peer SCB delete */
 #define WLC_E_HWA                178   /* HWA events */
-#define WLC_E_LAST                     179     /* highest val + 1 for range checking */
-#if (WLC_E_LAST > 179)
-#error "WLC_E_LAST: Invalid value for last event; must be <= 178."
+#define WLC_E_GTK_KEYROT_NO_CHANSW      179     /* Avoid Chanswitch while GTK key rotation */
+#define WLC_E_ONBODY_STATUS_CHANGE     180     /* Indication of onbody status change */
+#define WLC_E_BCNRECV_ABORTED          181     /* Fake AP bcnrecv aborted roam event */
+#define WLC_E_LAST                     182     /* highest val + 1 for range checking */
+#if (WLC_E_LAST > 182)
+#error "WLC_E_LAST: Invalid value for last event; must be <= 182."
 #endif /* WLC_E_LAST */
 
 /* define an API for getting the string name of an event */
 #endif /* WLC_E_LAST */
 
 /* define an API for getting the string name of an event */
@@ -332,6 +335,8 @@ void wl_event_to_network_order(wl_event_msg_t * evt);
 #define WLC_E_STATUS_ERROR             16      /* request failed due to error */
 #define WLC_E_STATUS_SLOTTED_PEER_ADD  17      /* Slotted scb for peer addition status */
 #define WLC_E_STATUS_SLOTTED_PEER_DEL  18      /* Slotted scb for peer deletion status */
 #define WLC_E_STATUS_ERROR             16      /* request failed due to error */
 #define WLC_E_STATUS_SLOTTED_PEER_ADD  17      /* Slotted scb for peer addition status */
 #define WLC_E_STATUS_SLOTTED_PEER_DEL  18      /* Slotted scb for peer deletion status */
+#define WLC_E_STATUS_RXBCN             19      /* Rx Beacon event for FAKEAP feature   */
+#define WLC_E_STATUS_RXBCN_ABORT       20      /* Rx Beacon abort event for FAKEAP feature */
 #define WLC_E_STATUS_INVALID 0xff  /* Invalid status code to init variables. */
 
 /* 4-way handshake event type */
 #define WLC_E_STATUS_INVALID 0xff  /* Invalid status code to init variables. */
 
 /* 4-way handshake event type */
@@ -382,6 +387,11 @@ typedef struct wl_event_sdb_trans {
        struct wl_event_sdb_data values[WL_MAX_BSSCFG];
 } wl_event_sdb_trans_t;
 
        struct wl_event_sdb_data values[WL_MAX_BSSCFG];
 } wl_event_sdb_trans_t;
 
+/* reason codes for WLC_E_GTK_KEYROT_NO_CHANSW event */
+#define WLC_E_GTKKEYROT_SCANDELAY       0       /* Delay scan while gtk in progress */
+#define WLC_E_GTKKEYROT_SKIPCHANSW_AWDL 1       /* Avoid chansw by awdl while gtk in progress */
+#define WLC_E_GTKKEYROT_SKIPCHANSW_P2P  2       /* Avoid chansw by p2p while gtk in progress */
+
 /* roam reason codes */
 #define WLC_E_REASON_INITIAL_ASSOC     0       /* initial assoc */
 #define WLC_E_REASON_LOW_RSSI          1       /* roamed due to low RSSI */
 /* roam reason codes */
 #define WLC_E_REASON_INITIAL_ASSOC     0       /* initial assoc */
 #define WLC_E_REASON_LOW_RSSI          1       /* roamed due to low RSSI */
@@ -431,6 +441,8 @@ typedef struct wl_event_sdb_trans {
 #define WLC_E_PRUNE_NO_DIAG_SUPPORT    19      /* prune due to diagnostic mode not supported */
 #endif /* BCMCCX */
 #define WLC_E_PRUNE_AUTH_RESP_MAC      20      /* suppress auth resp by MAC filter */
 #define WLC_E_PRUNE_NO_DIAG_SUPPORT    19      /* prune due to diagnostic mode not supported */
 #endif /* BCMCCX */
 #define WLC_E_PRUNE_AUTH_RESP_MAC      20      /* suppress auth resp by MAC filter */
+#define WLC_E_PRUNE_ASSOC_RETRY_DELAY  21      /* MBO assoc retry delay */
+#define WLC_E_PRUNE_RSSI_ASSOC_REJ     22      /* OCE RSSI-based assoc rejection */
 
 /* WPA failure reason codes carried in the WLC_E_PSK_SUP event */
 #define WLC_E_SUP_OTHER                        0       /* Other reason */
 
 /* WPA failure reason codes carried in the WLC_E_PSK_SUP event */
 #define WLC_E_SUP_OTHER                        0       /* Other reason */
@@ -451,6 +463,9 @@ typedef struct wl_event_sdb_trans {
 #define WLC_E_SUP_WPA_PSK_TMO          15      /* WPA PSK 4-way handshake timeout */
 #define WLC_E_SUP_WPA_PSK_M1_TMO       16      /* WPA PSK 4-way handshake M1 timeout */
 #define WLC_E_SUP_WPA_PSK_M3_TMO       17      /* WPA PSK 4-way handshake M3 timeout */
 #define WLC_E_SUP_WPA_PSK_TMO          15      /* WPA PSK 4-way handshake timeout */
 #define WLC_E_SUP_WPA_PSK_M1_TMO       16      /* WPA PSK 4-way handshake M1 timeout */
 #define WLC_E_SUP_WPA_PSK_M3_TMO       17      /* WPA PSK 4-way handshake M3 timeout */
+#define WLC_E_SUP_GTK_UPDATE_FAIL      18  /* GTK update failure */
+#define WLC_E_SUP_TK_UPDATE_FAIL       19  /* TK update failure */
+#define WLC_E_SUP_KEY_INSTALL_FAIL     20  /* Buffered key install failure */
 
 /* Ucode reason codes carried in the WLC_E_MACDBG event */
 #define WLC_E_MACDBG_LIST_PSM          0       /* Dump list update for PSM registers */
 
 /* Ucode reason codes carried in the WLC_E_MACDBG event */
 #define WLC_E_MACDBG_LIST_PSM          0       /* Dump list update for PSM registers */
@@ -1100,8 +1115,9 @@ typedef struct {
 
 typedef enum wl_mbo_event_type {
        WL_MBO_E_CELLULAR_NW_SWITCH = 1,
 
 typedef enum wl_mbo_event_type {
        WL_MBO_E_CELLULAR_NW_SWITCH = 1,
+       WL_MBO_E_BTM_RCVD = 2,
        /* ADD before this */
        /* ADD before this */
-       WL_MBO_E_LAST = 2,  /* highest val + 1 for range checking */
+       WL_MBO_E_LAST = 3  /* highest val + 1 for range checking */
 } wl_mbo_event_type_t;
 
 /* WLC_E_MBO event structure version */
 } wl_mbo_event_type_t;
 
 /* WLC_E_MBO event structure version */
@@ -1133,6 +1149,29 @@ struct wl_event_mbo_cell_nw_switch {
        uint32 assoc_time_remain;
 };
 
        uint32 assoc_time_remain;
 };
 
+/* WLC_E_MBO_BTM_RCVD event structure version */
+#define WL_BTM_EVENT_DATA_VER_1       1
+/* Specific btm event type data */
+struct wl_btm_event_type_data {
+       uint16  version;
+       uint16  len;
+       uint8   transition_reason;      /* transition reason code */
+       uint8   pad[3];                 /* pad */
+};
+
+/* WLC_E_PRUNE event structure version */
+#define WL_BSSID_PRUNE_EVT_VER_1       1
+/* MBO-OCE params */
+struct wl_bssid_prune_evt_info {
+       uint16 version;
+       uint16 len;
+       uint8   SSID[32];
+       uint32  time_remaining;         /* Time remaining */
+       struct ether_addr BSSID;
+       uint8   SSID_len;
+       uint8   reason;                 /* Reason code */
+};
+
 /* WLC_E_HWA Event structure */
 typedef struct wl_event_hwa {
        uint16 version; /* structure version */
 /* WLC_E_HWA Event structure */
 typedef struct wl_event_hwa {
        uint16 version; /* structure version */
index 46d2e28b717ffa62dedd1bc6713c7471931b3d1f..93d6fd33996ca8261d3e516e9cdafa207a8fd6cc 100644 (file)
@@ -27,7 +27,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: bcmmsgbuf.h 739442 2018-01-08 17:45:01Z $
+ * $Id: bcmmsgbuf.h 777047 2018-08-17 01:01:33Z $
  */
 #ifndef _bcmmsgbuf_h_
 #define        _bcmmsgbuf_h_
  */
 #ifndef _bcmmsgbuf_h_
 #define        _bcmmsgbuf_h_
 #define H2DRING_DYNAMIC_INFO_MAX_ITEM          32
 #define D2HRING_DYNAMIC_INFO_MAX_ITEM          32
 
 #define H2DRING_DYNAMIC_INFO_MAX_ITEM          32
 #define D2HRING_DYNAMIC_INFO_MAX_ITEM          32
 
+#define D2HRING_EDL_ITEMSIZE                   2048u
+#define D2HRING_EDL_MAX_ITEM                   256u
+#define D2HRING_EDL_WATERMARK                  (D2HRING_EDL_MAX_ITEM >> 5u)
+
 #define D2HRING_CTRL_CMPLT_MAX_ITEM            64
 
 enum {
 #define D2HRING_CTRL_CMPLT_MAX_ITEM            64
 
 enum {
@@ -576,8 +580,15 @@ typedef struct info_ring_submit_item {
 
 /** Control Completion messages (20 bytes) */
 typedef struct compl_msg_hdr {
 
 /** Control Completion messages (20 bytes) */
 typedef struct compl_msg_hdr {
-       /** status for the completion */
-       int16   status;
+       union {
+               /** status for the completion */
+               int16   status;
+
+               /* mutually exclusive with pkt fate debug feature */
+               struct pktts_compl_hdr {
+                       uint16 d_t4; /* Delta TimeStamp 3: T4-tref */
+               } tx_pktts;
+       };
        /** submisison flow ring id which generated this status */
        union {
            uint16      ring_id;
        /** submisison flow ring id which generated this status */
        union {
            uint16      ring_id;
@@ -629,6 +640,12 @@ typedef ts_timestamp_t ts_timestamp_ns_64_t;
 typedef ts_timestamp_t ts_correction_m_t;
 typedef ts_timestamp_t ts_correction_b_t;
 
 typedef ts_timestamp_t ts_correction_m_t;
 typedef ts_timestamp_t ts_correction_b_t;
 
+typedef struct _pktts {
+       uint32 tref; /* Ref Clk in uSec (currently, tsf) */
+       uint16 d_t2; /* Delta TimeStamp 1: T2-tref */
+       uint16 d_t3; /* Delta TimeStamp 2: T3-tref */
+} pktts_t;
+
 /* completion header status codes */
 #define        BCMPCIE_SUCCESS                 0
 #define BCMPCIE_NOTFOUND               1
 /* completion header status codes */
 #define        BCMPCIE_SUCCESS                 0
 #define BCMPCIE_NOTFOUND               1
@@ -809,8 +826,10 @@ typedef struct info_buf_resp {
        uint16                  info_data_len;
        /* sequence number */
        uint16                  seqnum;
        uint16                  info_data_len;
        /* sequence number */
        uint16                  seqnum;
+       /* destination */
+       uint8                   dest;
        /* rsvd */
        /* rsvd */
-       uint32                  rsvd;
+       uint8                   rsvd[3];
        /* XOR checksum or a magic number to audit DMA done */
        dma_done_t              marker;
 } info_buf_resp_t;
        /* XOR checksum or a magic number to audit DMA done */
        dma_done_t              marker;
 } info_buf_resp_t;
@@ -918,11 +937,23 @@ typedef struct host_rxbuf_cmpl {
        /** rx status */
        uint32          rx_status_0;
        uint32          rx_status_1;
        /** rx status */
        uint32          rx_status_0;
        uint32          rx_status_1;
-       /** XOR checksum or a magic number to audit DMA done */
-       /* This is for rev6 only. For IPC rev7, this is a reserved field */
-       dma_done_t      marker;
-       /* timestamp */
-       ipc_timestamp_t ts;
+
+       union { /* size per IPC = (3 x uint32) bytes */
+               struct {
+                       /* used by Monitor mode */
+                       uint32 marker;
+                       /* timestamp */
+                       ipc_timestamp_t ts;
+               };
+
+               /* LatTS_With_XORCSUM */
+               struct {
+                       /* latency timestamp */
+                       pktts_t rx_pktts;
+                       /* XOR checksum or a magic number to audit DMA done */
+                       dma_done_t marker_ext;
+               };
+       };
 } host_rxbuf_cmpl_t;
 
 typedef union rxbuf_complete_item {
 } host_rxbuf_cmpl_t;
 
 typedef union rxbuf_complete_item {
@@ -1001,23 +1032,33 @@ typedef struct host_txbuf_cmpl {
        cmn_msg_hdr_t   cmn_hdr;
        /** completion message header */
        compl_msg_hdr_t compl_hdr;
        cmn_msg_hdr_t   cmn_hdr;
        /** completion message header */
        compl_msg_hdr_t compl_hdr;
-       union {
+
+       union { /* size per IPC = (3 x uint32) bytes */
+               /* Usage 1: TxS_With_TimeSync */
+               struct {
+                        struct {
+                               union {
+                                       /** provided meta data len */
+                                       uint16  metadata_len;
+                                       /** provided extended TX status */
+                                       uint16  tx_status_ext;
+                               }; /*Ext_TxStatus */
+
+                               /** WLAN side txstatus */
+                               uint16  tx_status;
+                       }; /* TxS */
+                       /* timestamp */
+                       ipc_timestamp_t ts;
+               }; /* TxS_with_TS */
+
+               /* Usage 2: LatTS_With_XORCSUM */
                struct {
                struct {
-                       union {
-                               /** provided meta data len */
-                               uint16  metadata_len;
-                               /** provided extended TX status */
-                               uint16  tx_status_ext;
-                       };
-                       /** WLAN side txstatus */
-                       uint16  tx_status;
+                       /* latency timestamp */
+                       pktts_t tx_pktts;
+                       /* XOR checksum or a magic number to audit DMA done */
+                       dma_done_t marker_ext;
                };
                };
-               /** XOR checksum or a magic number to audit DMA done */
-               /* This is for rev6 only. For IPC rev7, this is not used */
-               dma_done_t      marker;
        };
        };
-       /* timestamp */
-       ipc_timestamp_t ts;
 
 } host_txbuf_cmpl_t;
 
 
 } host_txbuf_cmpl_t;
 
index 109873ef80553fb0bfb522ad37a35c0f704ed774..f4994f9bd736de0bd0560a5126d40501f5e58784 100644 (file)
@@ -26,7 +26,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: bcmpcie.h 755866 2018-04-05 05:07:41Z $
+ * $Id: bcmpcie.h 775339 2018-08-07 02:14:37Z $
  */
 
 #ifndef        _bcmpcie_h_
  */
 
 #ifndef        _bcmpcie_h_
@@ -87,6 +87,7 @@ typedef struct {
 #define PCIE_SHARED2_SNAPSHOT_UPLOAD   0x00000008      /* BT/WLAN snapshot upload support */
 #define PCIE_SHARED2_SUBMIT_COUNT_WAR  0x00000010      /* submission count WAR */
 #define PCIE_SHARED2_FW_SMALL_MEMDUMP  0x00000200      /* FW small memdump */
 #define PCIE_SHARED2_SNAPSHOT_UPLOAD   0x00000008      /* BT/WLAN snapshot upload support */
 #define PCIE_SHARED2_SUBMIT_COUNT_WAR  0x00000010      /* submission count WAR */
 #define PCIE_SHARED2_FW_SMALL_MEMDUMP  0x00000200      /* FW small memdump */
+#define PCIE_SHARED2_DEBUG_BUF_DEST    0x00002000      /* debug buf dest support */
 #define PCIE_SHARED_FAST_DELETE_RING   0x00000020      /* Fast Delete Ring */
 #define PCIE_SHARED_EVENT_BUF_POOL_MAX 0x000000c0      /* event buffer pool max bits */
 #define PCIE_SHARED_EVENT_BUF_POOL_MAX_POS     6       /* event buffer pool max bit position */
 #define PCIE_SHARED_FAST_DELETE_RING   0x00000020      /* Fast Delete Ring */
 #define PCIE_SHARED_EVENT_BUF_POOL_MAX 0x000000c0      /* event buffer pool max bits */
 #define PCIE_SHARED_EVENT_BUF_POOL_MAX_POS     6       /* event buffer pool max bit position */
@@ -161,6 +162,12 @@ typedef struct {
                                                           firmware support added to reuse
                                                           timesync to update PKT txstatus
                                                           */
                                                           firmware support added to reuse
                                                           timesync to update PKT txstatus
                                                           */
+/* Support Enhanced Debug Lane */
+#define PCIE_SHARED2_EDL_RING          0x00001000
+
+/* BT producer index reset WAR */
+#define PCIE_SHARED2_PCIE_ENUM_RESET_FLR               0x00004000
+
 /**
  * Message rings convey messages between host and device. They are unidirectional, and are located
  * in host memory.
 /**
  * Message rings convey messages between host and device. They are unidirectional, and are located
  * in host memory.
@@ -195,6 +202,7 @@ typedef struct {
 #define BCMPCIE_D2H_RING_TYPE_DBGBUF_CPL               0x4
 #define BCMPCIE_D2H_RING_TYPE_AC_RX_COMPLETE           0x5
 #define BCMPCIE_D2H_RING_TYPE_BTLOG_CPL                0x6
 #define BCMPCIE_D2H_RING_TYPE_DBGBUF_CPL               0x4
 #define BCMPCIE_D2H_RING_TYPE_AC_RX_COMPLETE           0x5
 #define BCMPCIE_D2H_RING_TYPE_BTLOG_CPL                0x6
+#define BCMPCIE_D2H_RING_TYPE_EDL                       0x7
 
 /**
  * H2D and D2H, WR and RD index, are maintained in the following arrays:
 
 /**
  * H2D and D2H, WR and RD index, are maintained in the following arrays:
@@ -263,8 +271,6 @@ enum d2hring_idx {
 #define BCMPCIE_D2H_RW_INDEX_ARRAY_SZ(rw_index_sz) \
        ((rw_index_sz) * BCMPCIE_D2H_COMMON_MSGRINGS)
 
 #define BCMPCIE_D2H_RW_INDEX_ARRAY_SZ(rw_index_sz) \
        ((rw_index_sz) * BCMPCIE_D2H_COMMON_MSGRINGS)
 
-#define HOFFLOAD_MODULES_ENAB(shmem) (0)
-
 /**
  * This type is used by a 'message buffer' (which is a FIFO for messages). Message buffers are used
  * for host<->device communication and are instantiated on both sides. ring_mem_t is instantiated
 /**
  * This type is used by a 'message buffer' (which is a FIFO for messages). Message buffers are used
  * for host<->device communication and are instantiated on both sides. ring_mem_t is instantiated
@@ -409,6 +415,8 @@ typedef struct {
 #define HOSTCAP_HSCB                           0x02000000
 /* Host support for extended device trap debug buffer */
 #define HOSTCAP_EXT_TRAP_DBGBUF                        0x04000000
 #define HOSTCAP_HSCB                           0x02000000
 /* Host support for extended device trap debug buffer */
 #define HOSTCAP_EXT_TRAP_DBGBUF                        0x04000000
+/* Host support for enhanced debug lane */
+#define HOSTCAP_EDL_RING                       0x10000000
 
 /* extended trap debug buffer allocation sizes. Note that this buffer can be used for
  * other trap related purposes also.
 
 /* extended trap debug buffer allocation sizes. Note that this buffer can be used for
  * other trap related purposes also.
@@ -450,6 +458,7 @@ typedef struct {
 #define D2HMB_DS_HOST_SLEEP_EXIT_ACK   0x00000008
 #define D2H_DEV_IDMA_INITED                            0x00000010
 #define D2H_DEV_FWHALT                                 0x10000000
 #define D2HMB_DS_HOST_SLEEP_EXIT_ACK   0x00000008
 #define D2H_DEV_IDMA_INITED                            0x00000010
 #define D2H_DEV_FWHALT                                 0x10000000
+#define D2H_DEV_TRAP_PING_HOST_FAILURE  0x08000000
 #define D2H_DEV_EXT_TRAP_DATA                  0x20000000
 #define D2H_DEV_TRAP_IN_TRAP                   0x40000000
 #define D2H_DEV_TRAP_DUE_TO_BT                 0x01000000
 #define D2H_DEV_EXT_TRAP_DATA                  0x20000000
 #define D2H_DEV_TRAP_IN_TRAP                   0x40000000
 #define D2H_DEV_TRAP_DUE_TO_BT                 0x01000000
index 80ae2510edbea4558eee0a7a63d43fbd2f061e16..0323cbae197550d942d44041fa5f28058c467dd8 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: bcmutils.h 784503 2018-10-12 06:07:30Z $
+ * $Id: bcmutils.h 813756 2019-04-08 05:18:14Z $
  */
 
 #ifndef        _bcmutils_h_
  */
 
 #ifndef        _bcmutils_h_
@@ -163,12 +163,20 @@ extern void *pktoffset(osl_t *osh, void *p,  uint offset);
 #define DSCP_AF21      0x12
 #define DSCP_AF22      0x14
 #define DSCP_AF23      0x16
 #define DSCP_AF21      0x12
 #define DSCP_AF22      0x14
 #define DSCP_AF23      0x16
+/* CS2: OAM (RFC2474) */
+#define DSCP_CS2       0x10
 /* AF3x: Multimedia Streaming (RFC2597) */
 #define DSCP_AF31      0x1A
 #define DSCP_AF32      0x1C
 #define DSCP_AF33      0x1E
 /* AF3x: Multimedia Streaming (RFC2597) */
 #define DSCP_AF31      0x1A
 #define DSCP_AF32      0x1C
 #define DSCP_AF33      0x1E
+/* CS3: Broadcast Video (RFC2474) */
+#define DSCP_CS3       0x18
+/* VA: VOCIE-ADMIT (RFC5865) */
+#define DSCP_VA                0x2C
 /* EF: Telephony (RFC3246) */
 #define DSCP_EF                0x2E
 /* EF: Telephony (RFC3246) */
 #define DSCP_EF                0x2E
+/* CS6: Network Control (RFC2474) */
+#define DSCP_CS6       0x30
 
 extern uint pktsetprio(void *pkt, bool update_vtag);
 extern uint pktsetprio_qms(void *pkt, uint8* up_table, bool update_vtag);
 
 extern uint pktsetprio(void *pkt, bool update_vtag);
 extern uint pktsetprio_qms(void *pkt, uint8* up_table, bool update_vtag);
index 6227dbe02c7f0d91e73b41d6af352c7d26849044..903cf3dba7871e6e5b2045a59d7b0eafdf07faf8 100755 (executable)
@@ -28,7 +28,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: eapol.h 758863 2018-04-21 00:29:12Z $
+ * $Id: eapol.h 767212 2018-06-13 00:17:23Z $
  */
 
 #ifndef _eapol_h_
  */
 
 #ifndef _eapol_h_
@@ -62,30 +62,30 @@ typedef struct {
        unsigned short length;          /* Length of body */
 } eapol_hdr_t;
 
        unsigned short length;          /* Length of body */
 } eapol_hdr_t;
 
-#define EAPOL_HDR_LEN 4
+#define EAPOL_HDR_LEN 4u
 
 /* EAPOL version */
 
 /* EAPOL version */
-#define WPA2_EAPOL_VERSION     2
-#define WPA_EAPOL_VERSION      1
-#define LEAP_EAPOL_VERSION     1
-#define SES_EAPOL_VERSION      1
+#define WPA2_EAPOL_VERSION     2u
+#define WPA_EAPOL_VERSION      1u
+#define LEAP_EAPOL_VERSION     1u
+#define SES_EAPOL_VERSION      1u
 
 /* EAPOL types */
 #define EAP_PACKET             0
 
 /* EAPOL types */
 #define EAP_PACKET             0
-#define EAPOL_START            1
-#define EAPOL_LOGOFF           2
-#define EAPOL_KEY              3
-#define EAPOL_ASF              4
+#define EAPOL_START            1u
+#define EAPOL_LOGOFF           2u
+#define EAPOL_KEY              3u
+#define EAPOL_ASF              4u
 
 /* EAPOL-Key types */
 
 /* EAPOL-Key types */
-#define EAPOL_RC4_KEY          1
-#define EAPOL_WPA2_KEY         2       /* 802.11i/WPA2 */
-#define EAPOL_WPA_KEY          254     /* WPA */
+#define EAPOL_RC4_KEY          1u
+#define EAPOL_WPA2_KEY         2u      /* 802.11i/WPA2 */
+#define EAPOL_WPA_KEY          254u    /* WPA */
 
 /* RC4 EAPOL-Key header field sizes */
 
 /* RC4 EAPOL-Key header field sizes */
-#define EAPOL_KEY_REPLAY_LEN   8
-#define EAPOL_KEY_IV_LEN       16
-#define EAPOL_KEY_SIG_LEN      16
+#define EAPOL_KEY_REPLAY_LEN   8u
+#define EAPOL_KEY_IV_LEN       16u
+#define EAPOL_KEY_SIG_LEN      16u
 
 /* RC4 EAPOL-Key */
 typedef BWL_PRE_PACKED_STRUCT struct {
 
 /* RC4 EAPOL-Key */
 typedef BWL_PRE_PACKED_STRUCT struct {
@@ -98,27 +98,42 @@ typedef BWL_PRE_PACKED_STRUCT struct {
        unsigned char key[1];                           /* Key (optional) */
 } BWL_POST_PACKED_STRUCT eapol_key_header_t;
 
        unsigned char key[1];                           /* Key (optional) */
 } BWL_POST_PACKED_STRUCT eapol_key_header_t;
 
-#define EAPOL_KEY_HEADER_LEN   44
+#define EAPOL_KEY_HEADER_LEN   44u
 
 /* RC4 EAPOL-Key flags */
 
 /* RC4 EAPOL-Key flags */
-#define EAPOL_KEY_FLAGS_MASK   0x80
-#define EAPOL_KEY_BROADCAST    0
-#define EAPOL_KEY_UNICAST      0x80
+#define EAPOL_KEY_FLAGS_MASK   0x80u
+#define EAPOL_KEY_BROADCAST    0u
+#define EAPOL_KEY_UNICAST      0x80u
 
 /* RC4 EAPOL-Key index */
 
 /* RC4 EAPOL-Key index */
-#define EAPOL_KEY_INDEX_MASK   0x7f
+#define EAPOL_KEY_INDEX_MASK   0x7fu
 
 /* WPA/802.11i/WPA2 EAPOL-Key header field sizes */
 #define EAPOL_AKW_BLOCK_LEN 8
 
 /* WPA/802.11i/WPA2 EAPOL-Key header field sizes */
 #define EAPOL_AKW_BLOCK_LEN 8
-#define EAPOL_WPA_KEY_REPLAY_LEN       8
-#define EAPOL_WPA_KEY_NONCE_LEN                32
-#define EAPOL_WPA_KEY_IV_LEN           16
-#define EAPOL_WPA_KEY_RSC_LEN          8
-#define EAPOL_WPA_KEY_ID_LEN           8
-#define EAPOL_WPA_KEY_MIC_LEN          16 /* deprecated */
+#define EAPOL_WPA_KEY_REPLAY_LEN       8u
+#define EAPOL_WPA_KEY_NONCE_LEN                32u
+#define EAPOL_WPA_KEY_IV_LEN           16u
+#define EAPOL_WPA_KEY_RSC_LEN          8u
+#define EAPOL_WPA_KEY_ID_LEN           8u
 #define EAPOL_WPA_KEY_DATA_LEN         (EAPOL_WPA_MAX_KEY_SIZE + EAPOL_AKW_BLOCK_LEN)
 #define EAPOL_WPA_KEY_DATA_LEN         (EAPOL_WPA_MAX_KEY_SIZE + EAPOL_AKW_BLOCK_LEN)
-#define EAPOL_WPA_MAX_KEY_SIZE         32
+#define EAPOL_WPA_MAX_KEY_SIZE         32u
+#define EAPOL_WPA_KEY_MAX_MIC_LEN      32u
+#define EAPOL_WPA_ENCR_KEY_MAX_LEN     64u
+#define EAPOL_WPA_TEMP_ENCR_KEY_MAX_LEN        32u
+
+#define EAPOL_WPA_PMK_MAX_LEN           64u
+#define EAPOL_WPA_PMK_SHA384_LEN        48u
+#define EAPOL_WPA_PMK_DEFAULT_LEN      32u
+#define EAPOL_WPA_KCK_DEFAULT_LEN      16u
+#define EAPOL_WPA_KCK_MIC_DEFAULT_LEN  16u
+#define EAPOL_WPA_ENCR_KEY_DEFAULT_LEN 16u
+
+#ifndef EAPOL_KEY_HDR_VER_V2
+#define EAPOL_WPA_KEY_MIC_LEN          16u /* deprecated */
+#define EAPOL_WPA_KEY_LEN              95u /* deprecated */
+#endif // endif
 
 
+#ifndef EAPOL_KEY_HDR_VER_V2
 /* WPA EAPOL-Key : deprecated */
 typedef BWL_PRE_PACKED_STRUCT struct {
        unsigned char type;             /* Key Descriptor Type */
 /* WPA EAPOL-Key : deprecated */
 typedef BWL_PRE_PACKED_STRUCT struct {
        unsigned char type;             /* Key Descriptor Type */
@@ -133,7 +148,7 @@ typedef BWL_PRE_PACKED_STRUCT struct {
        unsigned short data_len;                        /* Key Data Length */
        unsigned char data[EAPOL_WPA_KEY_DATA_LEN];     /* Key data */
 } BWL_POST_PACKED_STRUCT eapol_wpa_key_header_t;
        unsigned short data_len;                        /* Key Data Length */
        unsigned char data[EAPOL_WPA_KEY_DATA_LEN];     /* Key data */
 } BWL_POST_PACKED_STRUCT eapol_wpa_key_header_t;
-
+#else
 /* WPA EAPOL-Key : new structure to consider dynamic MIC length */
 typedef BWL_PRE_PACKED_STRUCT struct {
        unsigned char type;             /* Key Descriptor Type */
 /* WPA EAPOL-Key : new structure to consider dynamic MIC length */
 typedef BWL_PRE_PACKED_STRUCT struct {
        unsigned char type;             /* Key Descriptor Type */
@@ -146,9 +161,12 @@ typedef BWL_PRE_PACKED_STRUCT struct {
        unsigned char id[EAPOL_WPA_KEY_ID_LEN];         /* WPA:Key ID, 802.11i/WPA2: Reserved */
 } BWL_POST_PACKED_STRUCT eapol_wpa_key_header_v2_t;
 
        unsigned char id[EAPOL_WPA_KEY_ID_LEN];         /* WPA:Key ID, 802.11i/WPA2: Reserved */
 } BWL_POST_PACKED_STRUCT eapol_wpa_key_header_v2_t;
 
-#define EAPOL_WPA_KEY_LEN              95 /* deprecated */
-#define EAPOL_WPA_KEY_DATA_LEN_SIZE    2
+typedef eapol_wpa_key_header_v2_t eapol_wpa_key_header_t;
+#endif /* EAPOL_KEY_HDR_VER_V2 */
+
+#define EAPOL_WPA_KEY_DATA_LEN_SIZE    2u
 
 
+#ifdef  EAPOL_KEY_HDR_VER_V2
 #define EAPOL_WPA_KEY_HDR_SIZE(mic_len) (sizeof(eapol_wpa_key_header_v2_t) \
        + mic_len + EAPOL_WPA_KEY_DATA_LEN_SIZE)
 
 #define EAPOL_WPA_KEY_HDR_SIZE(mic_len) (sizeof(eapol_wpa_key_header_v2_t) \
        + mic_len + EAPOL_WPA_KEY_DATA_LEN_SIZE)
 
@@ -158,6 +176,12 @@ typedef BWL_PRE_PACKED_STRUCT struct {
        ((uint8 *)pos + sizeof(eapol_wpa_key_header_v2_t) + mic_len)
 #define EAPOL_WPA_KEY_HDR_DATA_PTR(pos, mic_len) \
        ((uint8 *)pos + EAPOL_WPA_KEY_HDR_SIZE(mic_len))
        ((uint8 *)pos + sizeof(eapol_wpa_key_header_v2_t) + mic_len)
 #define EAPOL_WPA_KEY_HDR_DATA_PTR(pos, mic_len) \
        ((uint8 *)pos + EAPOL_WPA_KEY_HDR_SIZE(mic_len))
+#else
+#define EAPOL_WPA_KEY_HDR_SIZE(mic_len) EAPOL_WPA_KEY_LEN
+#define EAPOL_WPA_KEY_HDR_MIC_PTR(pos) ((uint8 *)&pos->mic)
+#define EAPOL_WPA_KEY_HDR_DATA_LEN_PTR(pos, mic_len) ((uint8 *)&pos->data_len)
+#define EAPOL_WPA_KEY_HDR_DATA_PTR(pos, mic_len) ((uint8 *)&pos->data)
+#endif /* EAPOL_KEY_HDR_VER_V2 */
 
 /* WPA/802.11i/WPA2 KEY KEY_INFO bits */
 #define WPA_KEY_DESC_OSEN      0x0
 
 /* WPA/802.11i/WPA2 KEY KEY_INFO bits */
 #define WPA_KEY_DESC_OSEN      0x0
index acbbeee1383a0df7f7a910a5d134d84c8b47a669..9776cbcc03d9cf8adb657ac9461b28e57ed748a2 100644 (file)
 
 #define        EPI_MINOR_VERSION       13
 
 
 #define        EPI_MINOR_VERSION       13
 
-#define        EPI_RC_NUMBER           21
+#define        EPI_RC_NUMBER           36
 
 #define        EPI_INCREMENTAL_NUMBER  0
 
 #define        EPI_BUILD_NUMBER        0
 
 
 #define        EPI_INCREMENTAL_NUMBER  0
 
 #define        EPI_BUILD_NUMBER        0
 
-#define        EPI_VERSION             100, 13, 21, 0
+#define        EPI_VERSION             100, 13, 36, 0
 
 
-#define        EPI_VERSION_NUM         0x640d1500
+#define        EPI_VERSION_NUM         0x640d2400
 
 
-#define EPI_VERSION_DEV                100.13.21
+#define EPI_VERSION_DEV                100.13.36
 
 /* Driver Version String, ASCII, 32 chars max */
 
 /* Driver Version String, ASCII, 32 chars max */
-#define        EPI_VERSION_STR         "100.13.21 (r)"
+#define        EPI_VERSION_STR         "100.13.36 (r)"
 
 #endif /* _epivers_h_ */
 
 #endif /* _epivers_h_ */
index 8b80646ae4a53644467cd6c6332ef4dcb43876eb..763aea4e8d9c14af65bd69198e13646db023263b 100755 (executable)
@@ -27,7 +27,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: event_log_payload.h 738285 2017-12-28 01:28:18Z $
+ * $Id: event_log_payload.h 768232 2018-06-19 05:28:22Z $
  */
 
 #ifndef _EVENT_LOG_PAYLOAD_H_
  */
 
 #ifndef _EVENT_LOG_PAYLOAD_H_
@@ -682,4 +682,118 @@ typedef struct msch_register_params       {
        uint16 chanspec_list[WL_MSCH_NUMCHANNELS];
 } msch_register_params_t;
 
        uint16 chanspec_list[WL_MSCH_NUMCHANNELS];
 } msch_register_params_t;
 
+typedef struct {
+       uint32  txallfrm;       /**< total number of frames sent, incl. Data, ACK, RTS, CTS,
+                               * Control Management (includes retransmissions)
+                               */
+       uint32  rxrsptmout;     /**< number of response timeouts for transmitted frames
+                               * expecting a response
+                               */
+       uint32  rxstrt;         /**< number of received frames with a good PLCP */
+       uint32  rxbadplcp;      /**< number of parity check of the PLCP header failed */
+       uint32  rxcrsglitch;    /**< PHY was able to correlate the preamble but not the header */
+       uint32  rxnodelim;      /**< number of no valid delimiter detected by ampdu parser */
+       uint32  bphy_badplcp;   /**< number of bad PLCP reception on BPHY rate */
+       uint32  bphy_rxcrsglitch;       /**< PHY count of bphy glitches */
+       uint32  rxbadfcs;       /**< number of frames for which the CRC check failed in the MAC */
+       uint32  rxanyerr;       /**< Any RX error that is not counted by other counters. */
+       uint32  rxbeaconmbss;   /**< beacons received from member of BSS */
+       uint32  rxdtucastmbss;  /**< number of received DATA frames with good FCS and matching RA */
+       uint32  rxdtocast;      /**< number of received DATA frames (good FCS and no matching RA) */
+       uint32  rxtoolate;      /**< receive too late */
+       uint32  goodfcs;        /**< Good fcs counters  */
+       uint32  rxf0ovfl;       /** < Rx FIFO0 overflow counters information */
+       uint32  rxf1ovfl;       /** < Rx FIFO1 overflow counters information */
+} phy_periodic_counters_v1_t;
+
+typedef struct phycal_log_cmn {
+       uint16 chanspec; /* Current phy chanspec */
+       uint8  last_cal_reason;  /* Last Cal Reason */
+       uint8  pad1;  /* Padding byte to align with word */
+       uint   last_cal_time; /* Last cal time in sec */
+} phycal_log_cmn_t;
+
+typedef struct phycal_log_core {
+       uint16 ofdm_txa; /* OFDM Tx IQ Cal a coeff */
+       uint16 ofdm_txb; /* OFDM Tx IQ Cal b coeff */
+       uint16 ofdm_txd; /* contain di & dq */
+       uint16 bphy_txa; /* BPHY Tx IQ Cal a coeff */
+       uint16 bphy_txb; /* BPHY Tx IQ Cal b coeff */
+       uint16 bphy_txd; /* contain di & dq */
+
+       uint16 rxa; /* Rx IQ Cal A coeffecient */
+       uint16 rxb; /* Rx IQ Cal B coeffecient */
+       int32 rxs;  /* FDIQ Slope coeffecient */
+
+       uint8 baseidx; /* TPC Base index */
+       uint8 adc_coeff_cap0_adcI; /* ADC CAP Cal Cap0 I */
+       uint8 adc_coeff_cap1_adcI; /* ADC CAP Cal Cap1 I */
+       uint8 adc_coeff_cap2_adcI; /* ADC CAP Cal Cap2 I */
+       uint8 adc_coeff_cap0_adcQ; /* ADC CAP Cal Cap0 Q */
+       uint8 adc_coeff_cap1_adcQ; /* ADC CAP Cal Cap1 Q */
+       uint8 adc_coeff_cap2_adcQ; /* ADC CAP Cal Cap2 Q */
+       uint8 pad; /* Padding byte to align with word */
+} phycal_log_core_t;
+
+#define PHYCAL_LOG_VER1         (1u)
+
+typedef struct phycal_log_v1 {
+       uint8  version; /* Logging structure version */
+       uint8  numcores; /* Numbe of cores for which core specific data present */
+       uint16 length;  /* Length of the entire structure */
+       phycal_log_cmn_t phycal_log_cmn; /* Logging common structure */
+       /* This will be a variable length based on the numcores field defined above */
+       phycal_log_core_t phycal_log_core[1];
+} phycal_log_v1_t;
+
+typedef struct phy_periodic_log_cmn {
+       uint16  chanspec; /* Current phy chanspec */
+       uint16  vbatmeas; /* Measured VBAT sense value */
+       uint16  featureflag; /* Currently active feature flags */
+       int8    chiptemp; /* Chip temparature */
+       int8    femtemp;  /* Fem temparature */
+
+       uint32  nrate; /* Current Tx nrate */
+
+       uint8   cal_phase_id; /* Current Multi phase cal ID */
+       uint8   rxchain; /* Rx Chain */
+       uint8   txchain; /* Tx Chain */
+       uint8   ofdm_desense; /* OFDM desense */
+
+       uint8   bphy_desense; /* BPHY desense */
+       uint8   pll_lockstatus; /* PLL Lock status */
+       uint8   pad1; /* Padding byte to align with word */
+       uint8   pad2; /* Padding byte to align with word */
+
+       uint32 duration;        /**< millisecs spent sampling this channel */
+       uint32 congest_ibss;    /**< millisecs in our bss (presumably this traffic will */
+                               /**<  move if cur bss moves channels) */
+       uint32 congest_obss;    /**< traffic not in our bss */
+       uint32 interference;    /**< millisecs detecting a non 802.11 interferer. */
+
+} phy_periodic_log_cmn_t;
+
+typedef struct phy_periodic_log_core {
+       uint8   baseindxval; /* TPC Base index */
+       int8    tgt_pwr; /* Programmed Target power */
+       int8    estpwradj; /* Current Est Power Adjust value */
+       int8    crsmin_pwr; /* CRS Min/Noise power */
+       int8    rssi_per_ant; /* RSSI Per antenna */
+       int8    snr_per_ant; /* SNR Per antenna */
+       int8    pad1; /* Padding byte to align with word */
+       int8    pad2; /* Padding byte to align with word */
+} phy_periodic_log_core_t;
+
+#define PHY_PERIODIC_LOG_VER1         (1u)
+
+typedef struct phy_periodic_log_v1 {
+       uint8  version; /* Logging structure version */
+       uint8  numcores; /* Numbe of cores for which core specific data present */
+       uint16 length;  /* Length of the entire structure */
+       phy_periodic_log_cmn_t phy_perilog_cmn;
+       phy_periodic_counters_v1_t counters_peri_log;
+       /* This will be a variable length based on the numcores field defined above */
+       phy_periodic_log_core_t phy_perilog_core[1];
+} phy_periodic_log_v1_t;
+
 #endif /* _EVENT_LOG_PAYLOAD_H_ */
 #endif /* _EVENT_LOG_PAYLOAD_H_ */
index 42500b612a23ef0299505317189a1d651c7e00c9..be9e8a02460bf944f1fd0314350d80e82fe5bf61 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: event_log_set.h 744920 2018-02-06 06:25:40Z $
+ * $Id: event_log_set.h 771154 2018-07-09 05:46:33Z $
  */
 
 #ifndef _EVENT_LOG_SET_H_
  */
 
 #ifndef _EVENT_LOG_SET_H_
  * this to an appropriat enumber in their makefiles to reduce
  * ROM invalidation
  */
  * this to an appropriat enumber in their makefiles to reduce
  * ROM invalidation
  */
-#define NUM_EVENT_LOG_SETS 11
+#define NUM_EVENT_LOG_SETS (24)
 #endif // endif
 
 #endif // endif
 
-/* Legacy implementation does not have these sets. So make them 0. */
-#if (NUM_EVENT_LOG_SETS <= 8)
-#define NUM_EVENT_LOG_DBG_SETS 0
-#elif (NUM_EVENT_LOG_SETS == 9)
-#define NUM_EVENT_LOG_DBG_SETS 1
-#else
-#define NUM_EVENT_LOG_DBG_SETS 2
-#endif // endif
+/* Set assignments */
+#define EVENT_LOG_SET_BUS              (0u)
+#define EVENT_LOG_SET_WL               (1u)
+#define EVENT_LOG_SET_PSM              (2u)
+#define EVENT_LOG_SET_ERROR            (3u)
 
 
-/* Debug log sets start from this log set and are always the last few ones */
-/* Note that these log sets are not reserved for debug builds. They can be used
- * for other purpose as well. If used for other purpose, the debug log set
- * allocation code will check if there is a free one available out of
- * NUM_EVENT_LOG_DBG_SETS starting from EVENT_LOG_DBG_START_SET
- */
-#define EVENT_LOG_DBG_START_SET        (NUM_EVENT_LOG_SETS - NUM_EVENT_LOG_DBG_SETS)
-
-/* Define new event log sets here */
-#define EVENT_LOG_SET_BUS      0
-#define EVENT_LOG_SET_WL       1
-#define EVENT_LOG_SET_PSM      2
-#define EVENT_LOG_SET_ERROR    3
-#define EVENT_LOG_SET_MEM_API  4
-/* Share the set with MEM_API for now to limit ROM invalidation.
- * The above set is used in dingo only
- * On trunk, MSCH should move to a different set.
+/* MSCH logging */
+#define EVENT_LOG_SET_MSCH_PROFILER    (4u)
+
+#define EVENT_LOG_SET_5                        (5u)
+#define EVENT_LOG_SET_ECOUNTERS                (EVENT_LOG_SET_5)
+#define EVENT_LOG_SET_6                        (6u)
+#define EVENT_LOG_SET_7                        (7u)
+
+#define EVENT_LOG_SET_8                        (8u)
+#define EVENT_LOG_SET_PRSRV            (EVENT_LOG_SET_8)
+
+#define EVENT_LOG_SET_9                        (9u)
+/* General purpose preserve chatty.
+ * EVENT_LOG_SET_PRSRV_CHATTY log set should not be used by FW as it is
+ * used by customer host. FW should use EVENT_LOG_SET_GP_PRSRV_CHATTY
+ * for general purpose preserve chatty logs.
  */
  */
-#define EVENT_LOG_SET_MSCH_PROFILER    4
-#define EVENT_LOG_SET_ECOUNTERS 5      /* Host to instantiate this for ecounters. */
-#define EVENT_LOG_SET_6        6       /* Instantiated by host for channel switch logs */
-#define EVENT_LOG_SET_7        7       /* Instantiated by host for AMPDU stats */
+#define EVENT_LOG_SET_GP_PRSRV_CHATTY  (EVENT_LOG_SET_9)
+#define EVENT_LOG_SET_PRSRV_CHATTY     (EVENT_LOG_SET_6)
+
+/* BUS preserve */
+#define EVENT_LOG_SET_PRSRV_BUS                (10u)
+
+/* WL preserve */
+#define EVENT_LOG_SET_PRSRV_WL         (11u)
 
 
-/* The following ones could be used for debug builds. Always the last few ones */
-#define EVENT_LOG_SET_8 8
-#define EVENT_LOG_SET_9        9
+/* Slotted BSS set */
+#define EVENT_LOG_SET_WL_SLOTTED_BSS    (12u)
 
 
-#define EVENT_LOG_SET_PRSRV    7 /* The logtag set flushed only on error. Share with 7 to avoid
-                                   * abandons.
-                                   */
+/* PHY entity logging */
+#define EVENT_LOG_SET_PHY              (13u)
+
+/* PHY preserve */
+#define EVENT_LOG_SET_PRSRV_PHY                (14u)
+
+/* RTE entity */
+#define EVENT_LOG_SET_RTE              (15u)
+
+/* Malloc and free logging */
+#define EVENT_LOG_SET_MEM_API          (16u)
+
+/* Console buffer */
+#define EVENT_LOG_SET_RTE_CONS_BUF     (17u)
+
+/* three log sets for general debug purposes */
+#define EVENT_LOG_SET_GENERAL_DBG_1    (18u)
+#define EVENT_LOG_SET_GENERAL_DBG_2    (19u)
+#define EVENT_LOG_SET_GENERAL_DBG_3    (20u)
+
+/* Log sets for capturing power related logs. Note that these sets
+ * are to be used across entire system and not just WL.
+ */
+#define EVENT_LOG_SET_POWER_1          (21u)
+#define EVENT_LOG_SET_POWER_2          (22u)
 
 
-#define EVENT_LOG_SET_PRSRV_BUS        10
+/* Used for timestamp plotting, TS_LOG() */
+#define EVENT_LOG_SET_TS_LOG           (23u)
 
 /* send delayed logs when >= 50% of buffer is full */
 #ifndef ECOUNTERS_DELAYED_FLUSH_PERCENTAGE
 
 /* send delayed logs when >= 50% of buffer is full */
 #ifndef ECOUNTERS_DELAYED_FLUSH_PERCENTAGE
index 8573ac7c0b5e4de952eab3f4164e05be2dea695e..fcb998ac28670a7dea40cf29475184b9e0d2666c 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: event_log_tag.h 759112 2018-04-24 01:34:08Z $
+ * $Id: event_log_tag.h 779150 2018-08-31 10:04:22Z $
  */
 
 #ifndef _EVENT_LOG_TAG_H_
  */
 
 #ifndef _EVENT_LOG_TAG_H_
 #define EVENT_LOG_TAG_SRSCAN           22
 #define EVENT_LOG_TAG_PWRSTATS_INFO    23
 
 #define EVENT_LOG_TAG_SRSCAN           22
 #define EVENT_LOG_TAG_PWRSTATS_INFO    23
 
+/* Timestamp logging for plotting. */
+#define EVENT_LOG_TAG_TSLOG            26
+
 /* Possible candidates for reuse */
 /* Possible candidates for reuse */
-#define EVENT_LOG_TAG_UCODE_WATCHDOG   26
-#define EVENT_LOG_TAG_UCODE_FIFO       27
+#define EVENT_LOG_TAG_UCODE_FIFO       27
 
 #define EVENT_LOG_TAG_SCAN_TRACE_LOW   28
 #define EVENT_LOG_TAG_SCAN_TRACE_HIGH  29
 
 #define EVENT_LOG_TAG_SCAN_TRACE_LOW   28
 #define EVENT_LOG_TAG_SCAN_TRACE_HIGH  29
 #define EVENT_LOG_TAG_FILS_ERROR               221
 #define EVENT_LOG_TAG_HWA_TXPOST               222
 #define EVENT_LOG_TAG_HWA_TXDMA                        223
 #define EVENT_LOG_TAG_FILS_ERROR               221
 #define EVENT_LOG_TAG_HWA_TXPOST               222
 #define EVENT_LOG_TAG_HWA_TXDMA                        223
+/* Arbitrator callback log tags */
+#define EVENT_LOG_TAG_STF_ARB_CB_TRACE         224
+#define EVENT_LOG_TAG_STF_ARB_CB_ERROR         225
+#define EVENT_LOG_TAG_PHY_PERIODIC_SEC         226
+#define EVENT_LOG_TAG_RTE_ERROR                        227
+#define EVENT_LOG_TAG_CPLT_ERROR               228
+#define EVENT_LOG_TAG_DNGL_ERROR               229
+#define EVENT_LOG_TAG_NVRAM_ERROR              230
 
 /* Debug tags for making debug builds */
 #define EVENT_LOG_TAG_DBG1                     251
 
 /* Debug tags for making debug builds */
 #define EVENT_LOG_TAG_DBG1                     251
 #define EVENT_LOG_TAG_WL_HEB_ERROR              300
 #define EVENT_LOG_TAG_WL_HEB_TRACE              301
 
 #define EVENT_LOG_TAG_WL_HEB_ERROR              300
 #define EVENT_LOG_TAG_WL_HEB_TRACE              301
 
+/* RRM EVENT_LOG_TAG */
+#define EVENT_LOG_TAG_RRM_DBG                   302
+#define EVENT_LOG_TAG_RRM_INFO                  303
+#define EVENT_LOG_TAG_RRM_ERR                   304
+
+/* scan core */
+#define EVENT_LOG_TAG_SC                       305
+
+#define EVENT_LOG_TAG_ESP_DBG                  306
+#define EVENT_LOG_TAG_ESP_INFO                 307
+#define EVENT_LOG_TAG_ESP_ERR                  308
+
+/* SDC */
+#define EVENT_LOG_TAG_SDC_DBG                  309
+#define EVENT_LOG_TAG_SDC_INFO                 310
+#define EVENT_LOG_TAG_SDC_ERR                  311
+
+/* RTE */
+#define EVENT_LOG_TAG_RTE_ERR                  312
+
+/* TX FIFO */
+#define EVENT_LOG_TAG_FIFO_INFO                        313
+
+/* PKTTS */
+#define EVENT_LOG_TAG_LATENCY_INFO             314
+
+/* TDLS */
+#define EVENT_LOG_TAG_WL_TDLS_INFO              315
+#define EVENT_LOG_TAG_WL_TDLS_DBG               316
+#define EVENT_LOG_TAG_WL_TDLS_ERR               317
+
 /* EVENT_LOG_TAG_MAX   = Set to the same value of last tag, not last tag + 1 */
 /* EVENT_LOG_TAG_MAX   = Set to the same value of last tag, not last tag + 1 */
-#define EVENT_LOG_TAG_MAX                      301
-#define EVENT_LOG_TAG_MAX_LEGACY_FORMAT                255
-/* Note: New event should be added/reserved in trunk before adding it to branches */
+#define EVENT_LOG_TAG_MAX                      317
 
 typedef enum wl_el_set_type_def {
        EVENT_LOG_SET_TYPE_DEFAULT = 0, /* flush the log buffer when it is full - Default option */
 
 typedef enum wl_el_set_type_def {
        EVENT_LOG_SET_TYPE_DEFAULT = 0, /* flush the log buffer when it is full - Default option */
@@ -363,6 +402,9 @@ typedef union event_log_hdr {
        uint32 t;                       /* Type cheat */
 } event_log_hdr_t;
 
        uint32 t;                       /* Type cheat */
 } event_log_hdr_t;
 
+/* for internal use - legacy max. tag */
+#define EVENT_LOG_TAG_MAX_LEGACY_FORMAT                255
+
 /*
  * The position of the extended header in the event log stream will be as follows:
  * <event log payload><ARM cycle count timestamp><extended header><regular header>
 /*
  * The position of the extended header in the event log stream will be as follows:
  * <event log payload><ARM cycle count timestamp><extended header><regular header>
index cf12c5324326d14cbfa636003aea8a197eef0ca2..0f033f1a4e5179c5f53f3aa19f413ce46242783b 100755 (executable)
@@ -136,6 +136,17 @@ typedef BWL_PRE_PACKED_STRUCT struct fils_nonce_element {
        uint8           fils_nonce[FILS_NONCE_LENGTH];
 } BWL_POST_PACKED_STRUCT fils_nonce_element_t;
 
        uint8           fils_nonce[FILS_NONCE_LENGTH];
 } BWL_POST_PACKED_STRUCT fils_nonce_element_t;
 
+/* 11ai 9.4.2.186 FILS Key Delivery element */
+#define FILS_KEY_RSC_LENGTH 8u
+
+typedef BWL_PRE_PACKED_STRUCT struct fils_key_delivery_element {
+       uint8           elementid;
+       uint8           length;
+       uint8           element_id_ext;
+       uint8           key_rsc[FILS_KEY_RSC_LENGTH];
+       uint8           kde_list[];     /* Key Data Elements */
+} BWL_POST_PACKED_STRUCT fils_key_delivery_element_t;
+
 /* 8.4.2.175 FILS Session element */
 #define FILS_SESSION_LENGTH 8u
 
 /* 8.4.2.175 FILS Session element */
 #define FILS_SESSION_LENGTH 8u
 
index 2d24051a04c711b8e724aa63e79646166ce9a74d..1f5d38aa1fdf3cc03a5c35af8a69e2b6f055bd0e 100644 (file)
@@ -25,7 +25,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: nan.h 758133 2018-04-17 19:07:15Z $
+ * $Id: nan.h 773122 2018-07-20 08:27:36Z $
  */
 #ifndef _NAN_H_
 #define _NAN_H_
  */
 #ifndef _NAN_H_
 #define _NAN_H_
@@ -1143,6 +1143,15 @@ typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_ndp_attr_s {
 #define NAN_NDP_SETUP_STATUS_FAIL      0
 #define NAN_NDP_SETUP_STATUS_REJECT    2
 
 #define NAN_NDP_SETUP_STATUS_FAIL      0
 #define NAN_NDP_SETUP_STATUS_REJECT    2
 
+/* NDPE TLV list */
+#define NDPE_TLV_TYPE_IPV6             0x00
+#define NDPE_TLV_TYPE_SVC_INFO         0x01
+typedef BWL_PRE_PACKED_STRUCT struct wifi_nan_ndpe_tlv_s {
+       uint8 type;             /* Operating Class */
+       uint16 length;          /* Channel Bitmap */
+       uint8 data[];
+} BWL_POST_PACKED_STRUCT wifi_nan_ndpe_tlv_t;
+
 /* Rng setup attribute type and status macros */
 #define NAN_RNG_TYPE_MASK      0x0F
 #define NAN_RNG_TYPE_REQUEST   0x0
 /* Rng setup attribute type and status macros */
 #define NAN_RNG_TYPE_MASK      0x0F
 #define NAN_RNG_TYPE_REQUEST   0x0
index 3b03b75bdb346d62066a47b337fbdadcdd9583c6..2306a3245b5c5c66f0233c3e076d9ec2d2df86ad 100644 (file)
@@ -29,7 +29,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: wlioctl.h 787944 2018-11-07 13:13:27Z $
+ * $Id: wlioctl.h 816311 2019-04-24 07:19:37Z $
  */
 
 #ifndef _wlioctl_h_
  */
 
 #ifndef _wlioctl_h_
@@ -468,6 +468,58 @@ typedef struct wl_bss_info_v109_1 {
        uint32          he_txmcsmap;    /**< HE tx mcs map (802.11ax IE, HE_CAP_MCS_MAP_*) */
 } wl_bss_info_v109_1_t;
 
        uint32          he_txmcsmap;    /**< HE tx mcs map (802.11ax IE, HE_CAP_MCS_MAP_*) */
 } wl_bss_info_v109_1_t;
 
+/**
+ * BSS info structure
+ * Applications MUST CHECK ie_offset field and length field to access IEs and
+ * next bss_info structure in a vector (in wl_scan_results_t)
+ */
+typedef struct wl_bss_info_v109_2 {
+       uint32          version;                /**< version field */
+       uint32          length;                 /**< byte length of data in this record,
+                                                * starting at version and including IEs
+                                                */
+       struct ether_addr BSSID;
+       uint16          beacon_period;          /**< units are Kusec */
+       uint16          capability;             /**< Capability information */
+       uint8           SSID_len;
+       uint8           SSID[32];
+       uint8           bcnflags;               /* additional flags w.r.t. beacon */
+       struct {
+               uint32  count;                  /**< # rates in this set */
+               uint8   rates[16];              /**< rates in 500kbps units w/hi bit set if basic */
+       } rateset;                              /**< supported rates */
+       chanspec_t      chanspec;               /**< chanspec for bss */
+       uint16          atim_window;            /**< units are Kusec */
+       uint8           dtim_period;            /**< DTIM period */
+       uint8           accessnet;              /* from beacon interwork IE (if bcnflags) */
+       int16           RSSI;                   /**< receive signal strength (in dBm) */
+       int8            phy_noise;              /**< noise (in dBm) */
+       uint8           n_cap;                  /**< BSS is 802.11N Capable */
+       uint8           he_cap;                 /**< BSS is he capable */
+       uint8           freespace1;             /* make implicit padding explicit */
+       uint32          nbss_cap;               /**< 802.11N+AC BSS Capabilities */
+       uint8           ctl_ch;                 /**< 802.11N BSS control channel number */
+       uint8           padding1[3];            /**< explicit struct alignment padding */
+       uint16          vht_rxmcsmap;   /**< VHT rx mcs map (802.11ac IE, VHT_CAP_MCS_MAP_*) */
+       uint16          vht_txmcsmap;   /**< VHT tx mcs map (802.11ac IE, VHT_CAP_MCS_MAP_*) */
+       uint8           flags;                  /**< flags */
+       uint8           vht_cap;                /**< BSS is vht capable */
+       uint8           reserved[2];            /**< Reserved for expansion of BSS properties */
+       uint8           basic_mcs[MCSSET_LEN];  /**< 802.11N BSS required MCS set */
+
+       uint16          ie_offset;              /**< offset at which IEs start, from beginning */
+       uint16          freespace2;             /* making implicit padding explicit */
+       uint32          ie_length;              /**< byte length of Information Elements */
+       int16           SNR;                    /**< average SNR of during frame reception */
+       uint16          vht_mcsmap;             /**< STA's Associated vhtmcsmap */
+       uint16          vht_mcsmap_prop;        /**< STA's Associated prop vhtmcsmap */
+       uint16          vht_txmcsmap_prop;      /**< prop VHT tx mcs prop */
+       uint32          he_mcsmap;      /**< STA's Associated hemcsmap */
+       uint32          he_rxmcsmap;    /**< HE rx mcs map (802.11ax IE, HE_CAP_MCS_MAP_*) */
+       uint32          he_txmcsmap;    /**< HE tx mcs map (802.11ax IE, HE_CAP_MCS_MAP_*) */
+       uint32          timestamp[2];  /* Beacon Timestamp for FAKEAP req */
+} wl_bss_info_v109_2_t;
+
 #ifndef WL_BSS_INFO_TYPEDEF_HAS_ALIAS
 typedef wl_bss_info_v109_t wl_bss_info_t;
 #endif // endif
 #ifndef WL_BSS_INFO_TYPEDEF_HAS_ALIAS
 typedef wl_bss_info_v109_t wl_bss_info_t;
 #endif // endif
index 545d4da7c7facc6a9c593136036f02b212a8b50b..d659d28fdb02f507b8d07bae15b2c44bc3d181c7 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: wpa.h 758863 2018-04-21 00:29:12Z $
+ * $Id: wpa.h 761317 2018-05-07 21:33:58Z $
  */
 
 #ifndef _proto_wpa_h_
  */
 
 #ifndef _proto_wpa_h_
@@ -180,10 +180,12 @@ typedef BWL_PRE_PACKED_STRUCT struct
                        (akm) == RSN_AKM_SHA256_PSK || \
                        (akm) == RSN_AKM_TPK || \
                        (akm) == RSN_AKM_SAE_PSK || \
                        (akm) == RSN_AKM_SHA256_PSK || \
                        (akm) == RSN_AKM_TPK || \
                        (akm) == RSN_AKM_SAE_PSK || \
-                       (akm) == RSN_AKM_SAE_PSK || \
+                       (akm) == RSN_AKM_SAE_FBT || \
                        (akm) == RSN_AKM_FILS_SHA256 || \
                        (akm) == RSN_AKM_FILS_SHA384 || \
                        (akm) == RSN_AKM_FILS_SHA256 || \
                        (akm) == RSN_AKM_FILS_SHA384 || \
-                       (akm) == RSN_AKM_OWE)
+                       (akm) == RSN_AKM_OWE || \
+                       (akm) == RSN_AKM_SUITEB_SHA256_1X || \
+                       (akm) == RSN_AKM_SUITEB_SHA384_1X)
 
 #define IS_VALID_BIP_CIPHER(cipher) ((cipher) == WPA_CIPHER_BIP || \
                                        (cipher) == WPA_CIPHER_BIP_GMAC_128 || \
 
 #define IS_VALID_BIP_CIPHER(cipher) ((cipher) == WPA_CIPHER_BIP || \
                                        (cipher) == WPA_CIPHER_BIP_GMAC_128 || \
index 15ab16c53e23bea61908f9064e14a0e2d753f619..8231e583e6ab1691c8c997fbe92a863b9e77020d 100755 (executable)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: linux_pkt.c 769679 2018-06-27 07:14:30Z $
+ * $Id: linux_pkt.c 800754 2019-01-23 08:38:54Z $
  */
 
 #include <typedefs.h>
  */
 
 #include <typedefs.h>
@@ -54,21 +54,17 @@ void* wifi_platform_prealloc(void *adapter, int section, unsigned long size);
 #define OSL_PKTTAG_CLEAR(p) \
 do { \
        struct sk_buff *s = (struct sk_buff *)(p); \
 #define OSL_PKTTAG_CLEAR(p) \
 do { \
        struct sk_buff *s = (struct sk_buff *)(p); \
-       ASSERT(OSL_PKTTAG_SZ == 32); \
-       *(uint32 *)(&s->cb[4]) = 0; \
-       *(uint32 *)(&s->cb[8]) = 0; *(uint32 *)(&s->cb[12]) = 0; \
-       *(uint32 *)(&s->cb[16]) = 0; *(uint32 *)(&s->cb[20]) = 0; \
-       *(uint32 *)(&s->cb[24]) = 0; *(uint32 *)(&s->cb[28]) = 0; \
+       uint tagsz = sizeof(s->cb); \
+       ASSERT(OSL_PKTTAG_SZ <= tagsz); \
+       memset(s->cb + 4, 0, tagsz - 4); \
 } while (0)
 #else
 #define OSL_PKTTAG_CLEAR(p) \
 do { \
        struct sk_buff *s = (struct sk_buff *)(p); \
 } while (0)
 #else
 #define OSL_PKTTAG_CLEAR(p) \
 do { \
        struct sk_buff *s = (struct sk_buff *)(p); \
-       ASSERT(OSL_PKTTAG_SZ == 32); \
-       *(uint32 *)(&s->cb[0]) = 0; *(uint32 *)(&s->cb[4]) = 0; \
-       *(uint32 *)(&s->cb[8]) = 0; *(uint32 *)(&s->cb[12]) = 0; \
-       *(uint32 *)(&s->cb[16]) = 0; *(uint32 *)(&s->cb[20]) = 0; \
-       *(uint32 *)(&s->cb[24]) = 0; *(uint32 *)(&s->cb[28]) = 0; \
+       uint tagsz = sizeof(s->cb); \
+       ASSERT(OSL_PKTTAG_SZ <= tagsz); \
+       memset(s->cb, 0, tagsz); \
 } while (0)
 #endif /* BCM_OBJECT_TRACE */
 
 } while (0)
 #endif /* BCM_OBJECT_TRACE */
 
index 170047244e0c9c9f928863c21c42cf3b13edfe6b..27ce4d5bf0d81937f264df28982a8410e7377e55 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: wl_android.c 796872 2018-12-27 08:23:42Z $
+ * $Id: wl_android.c 818247 2019-05-07 04:15:13Z $
  */
 
 #include <linux/module.h>
  */
 
 #include <linux/module.h>
 #ifdef WL_STATIC_IF
 #define WL_BSSIDX_MAX  16
 #endif /* WL_STATIC_IF */
 #ifdef WL_STATIC_IF
 #define WL_BSSIDX_MAX  16
 #endif /* WL_STATIC_IF */
-
+#ifdef WL_BCNRECV
+#include <wl_cfgvendor.h>
+#include <brcm_nl80211.h>
+#endif /* WL_BCNRECV */
 /*
  * Android private command strings, PLEASE define new private commands here
  * so they can be updated easily in the future (if needed)
 /*
  * Android private command strings, PLEASE define new private commands here
  * so they can be updated easily in the future (if needed)
@@ -93,6 +96,7 @@
 #define CMD_SETSUSPENDMODE      "SETSUSPENDMODE"
 #define CMD_SETDTIM_IN_SUSPEND  "SET_DTIM_IN_SUSPEND"
 #define CMD_MAXDTIM_IN_SUSPEND  "MAX_DTIM_IN_SUSPEND"
 #define CMD_SETSUSPENDMODE      "SETSUSPENDMODE"
 #define CMD_SETDTIM_IN_SUSPEND  "SET_DTIM_IN_SUSPEND"
 #define CMD_MAXDTIM_IN_SUSPEND  "MAX_DTIM_IN_SUSPEND"
+#define CMD_DISDTIM_IN_SUSPEND  "DISABLE_DTIM_IN_SUSPEND"
 #define CMD_P2P_DEV_ADDR       "P2P_DEV_ADDR"
 #define CMD_SETFWPATH          "SETFWPATH"
 #define CMD_SETBAND            "SETBAND"
 #define CMD_P2P_DEV_ADDR       "P2P_DEV_ADDR"
 #define CMD_SETFWPATH          "SETFWPATH"
 #define CMD_SETBAND            "SETBAND"
 #define CMD_SET_TID            "SET_TID"
 #define CMD_GET_TID            "GET_TID"
 #endif /* SUPPORT_SET_TID */
 #define CMD_SET_TID            "SET_TID"
 #define CMD_GET_TID            "GET_TID"
 #endif /* SUPPORT_SET_TID */
-#ifdef APSTA_RESTRICTED_CHANNEL
-#define CMD_SET_INDOOR_CHANNELS        "SET_INDOOR_CHANNELS"
-#define CMD_GET_INDOOR_CHANNELS        "GET_INDOOR_CHANNELS"
-#endif /* APSTA_RESTRICTED_CHANNEL */
 #endif /* CUSTOMER_HW4_PRIVATE_CMD */
 #define CMD_KEEP_ALIVE         "KEEPALIVE"
 
 #endif /* CUSTOMER_HW4_PRIVATE_CMD */
 #define CMD_KEEP_ALIVE         "KEEPALIVE"
 
@@ -284,12 +284,6 @@ typedef struct android_wifi_af_params {
 #define CUSTOMER_HW4_DISABLE   -1
 #define CUSTOMER_HW4_EN_CONVERT(i)     (i += 1)
 #endif /* FCC_PWR_LIMIT_2G */
 #define CUSTOMER_HW4_DISABLE   -1
 #define CUSTOMER_HW4_EN_CONVERT(i)     (i += 1)
 #endif /* FCC_PWR_LIMIT_2G */
-
-#ifdef APSTA_RESTRICTED_CHANNEL
-#define CMD_SET_INDOOR_CHANNELS        "SET_INDOOR_CHANNELS"
-#define CMD_GET_INDOOR_CHANNELS        "GET_INDOOR_CHANNELS"
-#endif /* APSTA_RESTRICTED_CHANNEL */
-
 #endif /* CUSTOMER_HW4_PRIVATE_CMD */
 
 #ifdef WLFBT
 #endif /* CUSTOMER_HW4_PRIVATE_CMD */
 
 #ifdef WLFBT
@@ -361,6 +355,11 @@ typedef struct android_wifi_af_params {
 #define CMD_GET_RSSI_PER_ANT                           "GET_RSSI_PER_ANT"
 #endif /* SUPPORT_RSSI_SUM_REPORT */
 
 #define CMD_GET_RSSI_PER_ANT                           "GET_RSSI_PER_ANT"
 #endif /* SUPPORT_RSSI_SUM_REPORT */
 
+#ifdef APSTA_RESTRICTED_CHANNEL
+#define CMD_SET_INDOOR_CHANNELS                "SET_INDOOR_CHANNELS"
+#define CMD_GET_INDOOR_CHANNELS                "GET_INDOOR_CHANNELS"
+#endif /* APSTA_RESTRICTED_CHANNEL */
+
 #define CMD_GET_SNR                                                    "GET_SNR"
 
 #ifdef SUPPORT_SET_CAC
 #define CMD_GET_SNR                                                    "GET_SNR"
 
 #ifdef SUPPORT_SET_CAC
@@ -538,6 +537,10 @@ static const wl_natoe_sub_cmd_t natoe_cmd_list[] = {
 #define CMD_EWP_FILTER         "EWP_FILTER"
 #endif /* DHD_EVENT_LOG_FILTER */
 
 #define CMD_EWP_FILTER         "EWP_FILTER"
 #endif /* DHD_EVENT_LOG_FILTER */
 
+#ifdef WL_BCNRECV
+#define CMD_BEACON_RECV "BEACON_RECV"
+#endif /* WL_BCNRECV */
+
 #ifdef WL_GENL
 static s32 wl_genl_handle_msg(struct sk_buff *skb, struct genl_info *info);
 static int wl_genl_init(void);
 #ifdef WL_GENL
 static s32 wl_genl_handle_msg(struct sk_buff *skb, struct genl_info *info);
 static int wl_genl_init(void);
@@ -605,6 +608,11 @@ static struct genl_multicast_group wl_genl_mcast = {
 #define LQCM_RX_INDEX_SHIFT            16      /* LQCM rx index shift */
 #endif /* SUPPORT_LQCM */
 
 #define LQCM_RX_INDEX_SHIFT            16      /* LQCM rx index shift */
 #endif /* SUPPORT_LQCM */
 
+#ifdef DHD_SEND_HANG_PRIVCMD_ERRORS
+#define NUMBER_SEQUENTIAL_PRIVCMD_ERRORS       7
+static int priv_cmd_errors = 0;
+#endif /* DHD_SEND_HANG_PRIVCMD_ERRORS */
+
 /**
  * Extern function declarations (TODO: move them to dhd_linux.h)
  */
 /**
  * Extern function declarations (TODO: move them to dhd_linux.h)
  */
@@ -663,6 +671,117 @@ extern char iface_name[IFNAMSIZ];
 extern bool g_pm_control;
 #endif /* DHD_PM_CONTROL_FROM_FILE */
 
 extern bool g_pm_control;
 #endif /* DHD_PM_CONTROL_FROM_FILE */
 
+/* private command support for restoring roam/scan parameters */
+#ifdef SUPPORT_RESTORE_SCAN_PARAMS
+#define CMD_RESTORE_SCAN_PARAMS "RESTORE_SCAN_PARAMS"
+
+typedef int (*PRIV_CMD_HANDLER) (struct net_device *dev, char *command);
+typedef int (*PRIV_CMD_HANDLER_WITH_LEN) (struct net_device *dev, char *command, int total_len);
+
+enum {
+       RESTORE_TYPE_UNSPECIFIED = 0,
+       RESTORE_TYPE_PRIV_CMD = 1,
+       RESTORE_TYPE_PRIV_CMD_WITH_LEN = 2
+};
+
+typedef struct android_restore_scan_params {
+       char command[64];
+       int parameter;
+       int cmd_type;
+       union {
+               PRIV_CMD_HANDLER cmd_handler;
+               PRIV_CMD_HANDLER_WITH_LEN cmd_handler_w_len;
+       };
+} android_restore_scan_params_t;
+
+/* function prototypes of private command handler */
+static int wl_android_set_roam_trigger(struct net_device *dev, char* command);
+int wl_android_set_roam_delta(struct net_device *dev, char* command);
+int wl_android_set_roam_scan_period(struct net_device *dev, char* command);
+int wl_android_set_full_roam_scan_period(struct net_device *dev, char* command, int total_len);
+int wl_android_set_roam_scan_control(struct net_device *dev, char *command);
+int wl_android_set_scan_channel_time(struct net_device *dev, char *command);
+int wl_android_set_scan_home_time(struct net_device *dev, char *command);
+int wl_android_set_scan_home_away_time(struct net_device *dev, char *command);
+int wl_android_set_scan_nprobes(struct net_device *dev, char *command);
+static int wl_android_set_band(struct net_device *dev, char *command);
+int wl_android_set_scan_dfs_channel_mode(struct net_device *dev, char *command);
+int wl_android_set_wes_mode(struct net_device *dev, char *command);
+int wl_android_set_okc_mode(struct net_device *dev, char *command);
+
+/* default values */
+#ifdef ROAM_API
+#define DEFAULT_ROAM_TIRGGER -75
+#define DEFAULT_ROAM_DELTA 10
+#define DEFAULT_ROAMSCANPERIOD 10
+#define DEFAULT_FULLROAMSCANPERIOD_SET 120
+#endif /* ROAM_API */
+#ifdef WES_SUPPORT
+#define DEFAULT_ROAMSCANCONTROL 0
+#define DEFAULT_SCANCHANNELTIME 40
+#ifdef BCM4361_CHIP
+#define DEFAULT_SCANHOMETIME 60
+#else
+#define DEFAULT_SCANHOMETIME 45
+#endif /* BCM4361_CHIP */
+#define DEFAULT_SCANHOMEAWAYTIME 100
+#define DEFAULT_SCANPROBES 2
+#define DEFAULT_DFSSCANMODE 1
+#define DEFAULT_WESMODE 0
+#define DEFAULT_OKCMODE 1
+#endif /* WES_SUPPORT */
+#define DEFAULT_BAND 0
+#ifdef WBTEXT
+#define DEFAULT_WBTEXT_ENABLE 1
+#endif /* WBTEXT */
+
+/* restoring parameter list, please don't change order */
+static android_restore_scan_params_t restore_params[] =
+{
+/* wbtext need to be disabled while updating roam/scan parameters */
+#ifdef WBTEXT
+       { CMD_WBTEXT_ENABLE, 0, RESTORE_TYPE_PRIV_CMD_WITH_LEN,
+               .cmd_handler_w_len = wl_android_wbtext},
+#endif /* WBTEXT */
+#ifdef ROAM_API
+       { CMD_ROAMTRIGGER_SET, DEFAULT_ROAM_TIRGGER,
+               RESTORE_TYPE_PRIV_CMD, .cmd_handler = wl_android_set_roam_trigger},
+       { CMD_ROAMDELTA_SET, DEFAULT_ROAM_DELTA,
+               RESTORE_TYPE_PRIV_CMD, .cmd_handler = wl_android_set_roam_delta},
+       { CMD_ROAMSCANPERIOD_SET, DEFAULT_ROAMSCANPERIOD,
+               RESTORE_TYPE_PRIV_CMD, .cmd_handler = wl_android_set_roam_scan_period},
+       { CMD_FULLROAMSCANPERIOD_SET, DEFAULT_FULLROAMSCANPERIOD_SET,
+               RESTORE_TYPE_PRIV_CMD_WITH_LEN,
+               .cmd_handler_w_len = wl_android_set_full_roam_scan_period},
+#endif /* ROAM_API */
+#ifdef WES_SUPPORT
+       { CMD_SETROAMSCANCONTROL, DEFAULT_ROAMSCANCONTROL,
+               RESTORE_TYPE_PRIV_CMD, .cmd_handler = wl_android_set_roam_scan_control},
+       { CMD_SETSCANCHANNELTIME, DEFAULT_SCANCHANNELTIME,
+               RESTORE_TYPE_PRIV_CMD, .cmd_handler = wl_android_set_scan_channel_time},
+       { CMD_SETSCANHOMETIME, DEFAULT_SCANHOMETIME,
+               RESTORE_TYPE_PRIV_CMD, .cmd_handler = wl_android_set_scan_home_time},
+       { CMD_GETSCANHOMEAWAYTIME, DEFAULT_SCANHOMEAWAYTIME,
+               RESTORE_TYPE_PRIV_CMD, .cmd_handler = wl_android_set_scan_home_away_time},
+       { CMD_SETSCANNPROBES, DEFAULT_SCANPROBES,
+               RESTORE_TYPE_PRIV_CMD, .cmd_handler = wl_android_set_scan_nprobes},
+       { CMD_SETDFSSCANMODE, DEFAULT_DFSSCANMODE,
+               RESTORE_TYPE_PRIV_CMD, .cmd_handler = wl_android_set_scan_dfs_channel_mode},
+       { CMD_SETWESMODE, DEFAULT_WESMODE,
+               RESTORE_TYPE_PRIV_CMD, .cmd_handler = wl_android_set_wes_mode},
+       { CMD_SETOKCMODE, DEFAULT_OKCMODE,
+               RESTORE_TYPE_PRIV_CMD, .cmd_handler = wl_android_set_okc_mode},
+#endif /* WES_SUPPORT */
+       { CMD_SETBAND, DEFAULT_BAND,
+               RESTORE_TYPE_PRIV_CMD, .cmd_handler = wl_android_set_band},
+#ifdef WBTEXT
+       { CMD_WBTEXT_ENABLE, DEFAULT_WBTEXT_ENABLE,
+               RESTORE_TYPE_PRIV_CMD_WITH_LEN, .cmd_handler_w_len = wl_android_wbtext},
+#endif /* WBTEXT */
+       { "\0", 0, RESTORE_TYPE_UNSPECIFIED, .cmd_handler = NULL}
+};
+#endif /* SUPPORT_RESTORE_SCAN_PARAMS */
+
 /**
  * Local (static) functions and variables
  */
 /**
  * Local (static) functions and variables
  */
@@ -1118,6 +1237,24 @@ wl_android_set_max_dtim(struct net_device *dev, char *command)
        return ret;
 }
 
        return ret;
 }
 
+static int
+wl_android_set_disable_dtim_in_suspend(struct net_device *dev, char *command)
+{
+       int ret = 0;
+       int dtim_flag;
+
+       dtim_flag = *(command + strlen(CMD_DISDTIM_IN_SUSPEND) + 1) - '0';
+
+       if (!(ret = net_os_set_disable_dtim_in_suspend(dev, dtim_flag))) {
+               DHD_TRACE(("%s: use Disable bcn_li_dtim in suspend %s\n",
+                       __FUNCTION__, (dtim_flag ? "Enable" : "Disable")));
+       } else {
+               DHD_ERROR(("%s: failed %d\n", __FUNCTION__, ret));
+       }
+
+       return ret;
+}
+
 static int wl_android_get_band(struct net_device *dev, char *command, int total_len)
 {
        uint band;
 static int wl_android_get_band(struct net_device *dev, char *command, int total_len)
 {
        uint band;
@@ -1131,6 +1268,35 @@ static int wl_android_get_band(struct net_device *dev, char *command, int total_
        return bytes_written;
 }
 
        return bytes_written;
 }
 
+static int
+wl_android_set_band(struct net_device *dev, char *command)
+{
+       int error = 0;
+       uint band = *(command + strlen(CMD_SETBAND) + 1) - '0';
+#ifdef WL_HOST_BAND_MGMT
+       int ret = 0;
+       if ((ret = wl_cfg80211_set_band(dev, band)) < 0) {
+               if (ret == BCME_UNSUPPORTED) {
+                       /* If roam_var is unsupported, fallback to the original method */
+                       WL_ERR(("WL_HOST_BAND_MGMT defined, "
+                               "but roam_band iovar unsupported in the firmware\n"));
+               } else {
+                       error = -1;
+               }
+       }
+       if (((ret == 0) && (band == WLC_BAND_AUTO)) || (ret == BCME_UNSUPPORTED)) {
+               /* Apply if roam_band iovar is not supported or band setting is AUTO */
+               error = wldev_set_band(dev, band);
+       }
+#else
+       error = wl_cfg80211_set_if_band(dev, band);
+#endif /* WL_HOST_BAND_MGMT */
+#ifdef ROAM_CHANNEL_CACHE
+       wl_update_roamscan_cache_by_band(dev, band);
+#endif /* ROAM_CHANNEL_CACHE */
+       return error;
+}
+
 #ifdef CUSTOMER_HW4_PRIVATE_CMD
 #ifdef ROAM_API
 static bool wl_android_check_wbtext(struct net_device *dev)
 #ifdef CUSTOMER_HW4_PRIVATE_CMD
 #ifdef ROAM_API
 static bool wl_android_check_wbtext(struct net_device *dev)
@@ -2114,6 +2280,46 @@ wl_android_okc_enable(struct net_device *dev, char *command)
        return error;
 }
 #endif /* WES_SUPPORT */
        return error;
 }
 #endif /* WES_SUPPORT */
+
+#ifdef SUPPORT_RESTORE_SCAN_PARAMS
+static int
+wl_android_restore_scan_params(struct net_device *dev, char *command, int total_len)
+{
+       int error = 0;
+       uint error_cnt = 0;
+       int cnt = 0;
+       char restore_command[WLC_IOCTL_SMLEN];
+
+       while (strlen(restore_params[cnt].command) > 0 && restore_params[cnt].cmd_handler) {
+               sprintf(restore_command, "%s %d", restore_params[cnt].command,
+                       restore_params[cnt].parameter);
+               printk("CNT : %d\n", cnt);
+               printk("COMMAND : %s\n", restore_command);
+               if (restore_params[cnt].cmd_type == RESTORE_TYPE_PRIV_CMD) {
+               error = restore_params[cnt].cmd_handler(dev, restore_command);
+               }  else if (restore_params[cnt].cmd_type == RESTORE_TYPE_PRIV_CMD_WITH_LEN) {
+                       error = restore_params[cnt].cmd_handler_w_len(dev,
+                               restore_command, total_len);
+               } else {
+                       DHD_ERROR(("Unknown restore command handler\n"));
+                       error = -1;
+               }
+               if (error) {
+                       DHD_ERROR(("Failed to restore scan parameters %s, error : %d\n",
+                               restore_command, error));
+                       error_cnt++;
+               }
+               cnt++;
+       }
+       if (error_cnt > 0) {
+               DHD_ERROR(("Got %d error(s) while restoring scan parameters\n",
+                       error_cnt));
+               error = -1;
+       }
+       return error;
+}
+#endif /* SUPPORT_RESTORE_SCAN_PARAMS */
+
 #ifdef WLTDLS
 int wl_android_tdls_reset(struct net_device *dev)
 {
 #ifdef WLTDLS
 int wl_android_tdls_reset(struct net_device *dev)
 {
@@ -2229,10 +2435,15 @@ wl_cfg80211_get_sta_info(struct net_device *dev, char* command, int total_len)
 #endif /* BIGDATA_SOFTAP */
                        if (ret < 0) {
                                WL_ERR(("Get sta_info ERR %d\n", ret));
 #endif /* BIGDATA_SOFTAP */
                        if (ret < 0) {
                                WL_ERR(("Get sta_info ERR %d\n", ret));
-#ifndef BIGDATA_SOFTAP
-                               goto error;
-#else
+#ifdef BIGDATA_SOFTAP
                                goto get_bigdata;
                                goto get_bigdata;
+#else
+                               /* In case framework assumes the BIGDATA_SOFTAP
+                                * is enabled in DHD, the return value causes
+                                * triggering HANG event.
+                                */
+                               bytes_written = BCME_UNSUPPORTED;
+                               goto error;
 #endif /* BIGDATA_SOFTAP */
                        }
 
 #endif /* BIGDATA_SOFTAP */
                        }
 
@@ -2957,6 +3168,9 @@ int wl_android_wifi_on(struct net_device *dev)
                } while (retry-- > 0);
                if (ret != 0) {
                        DHD_ERROR(("\nfailed to power up wifi chip, max retry reached **\n\n"));
                } while (retry-- > 0);
                if (ret != 0) {
                        DHD_ERROR(("\nfailed to power up wifi chip, max retry reached **\n\n"));
+#ifdef BCM_DETECT_TURN_ON_FAILURE
+                       BUG_ON(1);
+#endif /* BCM_DETECT_TURN_ON_FAILURE */
                        goto exit;
                }
 #ifdef BCMSDIO
                        goto exit;
                }
 #ifdef BCMSDIO
@@ -5626,7 +5840,6 @@ wl_cfg80211_p2plo_deinit(struct bcm_cfg80211 *cfg)
 {
        s32 bssidx;
        int ret = 0;
 {
        s32 bssidx;
        int ret = 0;
-       int p2plo_pause = 0;
        dhd_pub_t *dhd = NULL;
        if (!cfg || !cfg->p2p) {
                WL_ERR(("Wl %p or cfg->p2p %p is null\n",
        dhd_pub_t *dhd = NULL;
        if (!cfg || !cfg->p2p) {
                WL_ERR(("Wl %p or cfg->p2p %p is null\n",
@@ -5642,7 +5855,7 @@ wl_cfg80211_p2plo_deinit(struct bcm_cfg80211 *cfg)
 
        bssidx = wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE);
        ret = wldev_iovar_setbuf_bsscfg(bcmcfg_to_prmry_ndev(cfg),
 
        bssidx = wl_to_p2p_bss_bssidx(cfg, P2PAPI_BSSCFG_DEVICE);
        ret = wldev_iovar_setbuf_bsscfg(bcmcfg_to_prmry_ndev(cfg),
-                       "p2po_stop", (void*)&p2plo_pause, sizeof(p2plo_pause),
+                       "p2po_stop", NULL, 0,
                        cfg->ioctl_buf, WLC_IOCTL_SMLEN, bssidx, &cfg->ioctl_buf_sync);
        if (ret < 0) {
                WL_ERR(("p2po_stop Failed :%d\n", ret));
                        cfg->ioctl_buf, WLC_IOCTL_SMLEN, bssidx, &cfg->ioctl_buf_sync);
        if (ret < 0) {
                WL_ERR(("p2po_stop Failed :%d\n", ret));
@@ -5763,6 +5976,35 @@ wl_cfg80211_p2plo_offload(struct net_device *dev, char *cmd, char* buf, int len)
        }
        return ret;
 }
        }
        return ret;
 }
+void
+wl_cfg80211_cancel_p2plo(struct bcm_cfg80211 *cfg)
+{
+       struct wireless_dev *wdev;
+       if (!cfg) {
+               return;
+       }
+
+       wdev = bcmcfg_to_p2p_wdev(cfg);
+
+       if (wl_get_p2p_status(cfg, DISC_IN_PROGRESS)) {
+               WL_INFORM_MEM(("P2P_FIND: Discovery offload is already in progress."
+                               "it aborted\n"));
+               wl_clr_p2p_status(cfg, DISC_IN_PROGRESS);
+               if (wdev != NULL) {
+#if defined(WL_CFG80211_P2P_DEV_IF)
+                       cfg80211_remain_on_channel_expired(wdev,
+                                       cfg->last_roc_id,
+                                       &cfg->remain_on_chan, GFP_KERNEL);
+#else
+                       cfg80211_remain_on_channel_expired(wdev,
+                                       cfg->last_roc_id,
+                                       &cfg->remain_on_chan,
+                                       cfg->remain_on_chan_type, GFP_KERNEL);
+#endif /* WL_CFG80211_P2P_DEV_IF */
+               }
+               wl_cfg80211_p2plo_deinit(cfg);
+       }
+}
 #endif /* P2P_LISTEN_OFFLOADING */
 
 #ifdef DYNAMIC_MUMIMO_CONTROL
 #endif /* P2P_LISTEN_OFFLOADING */
 
 #ifdef DYNAMIC_MUMIMO_CONTROL
@@ -6039,7 +6281,7 @@ wl_android_get_lqcm_report(struct net_device *dev, char *command, int total_len)
        tx_lqcm_idx = (lqcm_report & LQCM_TX_INDEX_MASK) >> LQCM_TX_INDEX_SHIFT;
        rx_lqcm_idx = (lqcm_report & LQCM_RX_INDEX_MASK) >> LQCM_RX_INDEX_SHIFT;
 
        tx_lqcm_idx = (lqcm_report & LQCM_TX_INDEX_MASK) >> LQCM_TX_INDEX_SHIFT;
        rx_lqcm_idx = (lqcm_report & LQCM_RX_INDEX_MASK) >> LQCM_RX_INDEX_SHIFT;
 
-       WL_ERR(("lqcm report EN:%d, TX:%d, RX:%d\n", lqcm_enable, tx_lqcm_idx, rx_lqcm_idx));
+       WL_DBG(("lqcm report EN:%d, TX:%d, RX:%d\n", lqcm_enable, tx_lqcm_idx, rx_lqcm_idx));
 
        bytes_written = snprintf(command, total_len, "%s %d",
                        CMD_GET_LQCM_REPORT, lqcm_report);
 
        bytes_written = snprintf(command, total_len, "%s %d",
                        CMD_GET_LQCM_REPORT, lqcm_report);
@@ -6286,6 +6528,55 @@ wl_android_make_hang_with_reason(struct net_device *dev, const char *string_num)
 }
 #endif /* DHD_HANG_SEND_UP_TEST */
 
 }
 #endif /* DHD_HANG_SEND_UP_TEST */
 
+#ifdef DHD_SEND_HANG_PRIVCMD_ERRORS
+static void
+wl_android_check_priv_cmd_errors(struct net_device *dev)
+{
+       dhd_pub_t *dhdp;
+       int memdump_mode;
+
+       if (!dev) {
+               WL_ERR(("dev is NULL\n"));
+               return;
+       }
+
+       dhdp = wl_cfg80211_get_dhdp(dev);
+       if (!dhdp) {
+               WL_ERR(("dhdp is NULL\n"));
+               return;
+       }
+
+#ifdef DHD_FW_COREDUMP
+       memdump_mode = dhdp->memdump_enabled;
+#else
+       /* Default enable if DHD doesn't support SOCRAM dump */
+       memdump_mode = 1;
+#endif /* DHD_FW_COREDUMP */
+
+       if (report_hang_privcmd_err) {
+               priv_cmd_errors++;
+       } else {
+               priv_cmd_errors = 0;
+       }
+
+       /* Trigger HANG event only if memdump mode is enabled
+        * due to customer's request
+        */
+       if (memdump_mode && (priv_cmd_errors > NUMBER_SEQUENTIAL_PRIVCMD_ERRORS)) {
+               WL_ERR(("Send HANG event due to sequential private cmd errors\n"));
+               priv_cmd_errors = 0;
+#ifdef DHD_FW_COREDUMP
+               /* Take a SOCRAM dump */
+               dhdp->memdump_type = DUMP_TYPE_SEQUENTIAL_PRIVCMD_ERROR;
+               dhd_common_socram_dump(dhdp);
+#endif /* DHD_FW_COREDUMP */
+               /* Send the HANG event to upper layer */
+               dhdp->hang_reason = HANG_REASON_SEQUENTIAL_PRIVCMD_ERROR;
+               dhd_os_check_hang(dhdp, 0, -EREMOTEIO);
+       }
+}
+#endif /* DHD_SEND_HANG_PRIVCMD_ERRORS */
+
 #ifdef DHD_PKT_LOGGING
 static int
 wl_android_pktlog_filter_enable(struct net_device *dev, char *command, int total_len)
 #ifdef DHD_PKT_LOGGING
 static int
 wl_android_pktlog_filter_enable(struct net_device *dev, char *command, int total_len)
@@ -6784,6 +7075,16 @@ int wl_android_priv_cmd(struct net_device *net, struct ifreq *ifr)
        }
 
 exit:
        }
 
 exit:
+#ifdef DHD_SEND_HANG_PRIVCMD_ERRORS
+       if (ret) {
+               /* Avoid incrementing priv_cmd_errors in case of unsupported feature */
+               if (ret != BCME_UNSUPPORTED) {
+                       wl_android_check_priv_cmd_errors(net);
+               }
+       } else {
+               priv_cmd_errors = 0;
+       }
+#endif /* DHD_SEND_HANG_PRIVCMD_ERRORS */
        net_os_wake_unlock(net);
        MFREE(cfg->osh, command, (buf_size + 1));
        return ret;
        net_os_wake_unlock(net);
        MFREE(cfg->osh, command, (buf_size + 1));
        return ret;
@@ -6863,6 +7164,263 @@ wl_android_get_adps_mode(
 }
 #endif /* WLADPS_PRIVATE_CMD */
 
 }
 #endif /* WLADPS_PRIVATE_CMD */
 
+#ifdef WL_BCNRECV
+#define BCNRECV_ATTR_HDR_LEN 30
+int
+wl_android_bcnrecv_event(struct net_device *ndev, uint attr_type,
+               uint status, uint reason, uint8 *data, uint data_len)
+{
+       s32 err = BCME_OK;
+       struct sk_buff *skb;
+       gfp_t kflags;
+       struct bcm_cfg80211 *cfg = wl_get_cfg(ndev);
+       struct wiphy *wiphy = bcmcfg_to_wiphy(cfg);
+       uint len;
+
+       len = BCNRECV_ATTR_HDR_LEN + data_len;
+
+       kflags = in_atomic() ? GFP_ATOMIC : GFP_KERNEL;
+       skb = CFG80211_VENDOR_EVENT_ALLOC(wiphy, ndev_to_wdev(ndev), len,
+               BRCM_VENDOR_EVENT_BEACON_RECV, kflags);
+       if (!skb) {
+               WL_ERR(("skb alloc failed"));
+               return -ENOMEM;
+       }
+       if ((attr_type == BCNRECV_ATTR_BCNINFO) && (data)) {
+               /* send bcn info to upper layer */
+               nla_put(skb, BCNRECV_ATTR_BCNINFO, data_len, data);
+       } else if (attr_type == BCNRECV_ATTR_STATUS) {
+               nla_put_u32(skb, BCNRECV_ATTR_STATUS, status);
+               if (reason) {
+                       nla_put_u32(skb, BCNRECV_ATTR_REASON, reason);
+               }
+       } else {
+               WL_ERR(("UNKNOWN ATTR_TYPE. attr_type:%d\n", attr_type));
+               kfree_skb(skb);
+               return -EINVAL;
+       }
+       cfg80211_vendor_event(skb, kflags);
+       return err;
+}
+
+static int
+_wl_android_bcnrecv_start(struct bcm_cfg80211 *cfg, struct net_device *ndev, bool user_trigger)
+{
+       s32 err = BCME_OK;
+
+       /* check any scan is in progress before beacon recv scan trigger IOVAR */
+       if (wl_get_drv_status_all(cfg, SCANNING)) {
+               err = BCME_UNSUPPORTED;
+               WL_ERR(("Scan in progress, Aborting beacon recv start, "
+                       "error:%d\n", err));
+               goto exit;
+       }
+
+       if (wl_get_p2p_status(cfg, SCANNING)) {
+               err = BCME_UNSUPPORTED;
+               WL_ERR(("P2P Scan in progress, Aborting beacon recv start, "
+                       "error:%d\n", err));
+               goto exit;
+       }
+
+       if (wl_get_drv_status(cfg, REMAINING_ON_CHANNEL, ndev)) {
+               err = BCME_UNSUPPORTED;
+               WL_ERR(("P2P remain on channel, Aborting beacon recv start, "
+                       "error:%d\n", err));
+               goto exit;
+       }
+
+       /* check STA is in connected state, Beacon recv required connected state
+        * else exit from beacon recv scan
+        */
+       if (!wl_get_drv_status(cfg, CONNECTED, ndev)) {
+               err = BCME_UNSUPPORTED;
+               WL_ERR(("STA is in not associated state error:%d\n", err));
+               goto exit;
+       }
+
+#ifdef WL_NAN
+       /* Check NAN is enabled, if enabled exit else continue */
+       if (wl_cfgnan_check_state(cfg)) {
+               err = BCME_UNSUPPORTED;
+               WL_ERR(("Nan is enabled, NAN+STA+FAKEAP concurrency is not supported\n"));
+               goto exit;
+       }
+#endif /* WL_NAN */
+
+       /* Triggering an sendup_bcn iovar */
+       err = wldev_iovar_setint(ndev, "sendup_bcn", 1);
+       if (unlikely(err)) {
+               WL_ERR(("sendup_bcn failed to set, error:%d\n", err));
+       } else {
+               cfg->bcnrecv_info.bcnrecv_state = BEACON_RECV_STARTED;
+               WL_INFORM_MEM(("bcnrecv started\n"));
+               if (user_trigger) {
+                       WL_INFORM_MEM(("BCN-RECV-STARTED"));
+                       if ((err = wl_android_bcnrecv_event(ndev, BCNRECV_ATTR_STATUS,
+                                       WL_BCNRECV_STARTED, 0, NULL, 0)) != BCME_OK) {
+                               WL_ERR(("failed to send bcnrecv event, error:%d\n", err));
+                       }
+               }
+       }
+exit:
+       /*
+        * BCNRECV start request can be rejected from dongle
+        * in various conditions.
+        * Error code need to be overridden to BCME_UNSUPPORTED
+        * to avoid hang event from continous private
+        * command error
+        */
+       if (err) {
+               err = BCME_UNSUPPORTED;
+       }
+       return err;
+}
+
+int
+_wl_android_bcnrecv_stop(struct bcm_cfg80211 *cfg, struct net_device *ndev, uint reason)
+{
+       s32 err = BCME_OK;
+       u32 status;
+
+       /* Send sendup_bcn iovar for all cases except W_BCNRECV_ROAMABORT reason -
+        * fw generates roam abort event after aborting the bcnrecv.
+        */
+       if (reason != WL_BCNRECV_ROAMABORT) {
+               /* Triggering an sendup_bcn iovar */
+               err = wldev_iovar_setint(ndev, "sendup_bcn", 0);
+               if (unlikely(err)) {
+                       WL_ERR(("sendup_bcn failed to set error:%d\n", err));
+                       goto exit;
+               }
+       }
+
+       /* Send notification for all cases */
+       if (reason == WL_BCNRECV_SUSPEND) {
+               cfg->bcnrecv_info.bcnrecv_state = BEACON_RECV_SUSPENDED;
+               status = WL_BCNRECV_SUSPENDED;
+       } else {
+               cfg->bcnrecv_info.bcnrecv_state = BEACON_RECV_STOPPED;
+               WL_INFORM_MEM(("bcnrecv stopped\n"));
+               if (reason == WL_BCNRECV_USER_TRIGGER) {
+                       status = WL_BCNRECV_STOPPED;
+               } else {
+                       status = WL_BCNRECV_ABORTED;
+               }
+       }
+       if ((err = wl_android_bcnrecv_event(ndev, BCNRECV_ATTR_STATUS, status,
+               reason, NULL, 0)) != BCME_OK) {
+               WL_ERR(("failed to send bcnrecv event, error:%d\n", err));
+       }
+exit:
+       return err;
+}
+
+static int
+wl_android_bcnrecv_start(struct bcm_cfg80211 *cfg, struct net_device *ndev)
+{
+       s32 err = BCME_OK;
+
+       /* Adding scan_sync mutex to avoid race condition in b/w scan_req and bcn recv */
+       mutex_lock(&cfg->scan_sync);
+       mutex_lock(&cfg->bcn_sync);
+       err = _wl_android_bcnrecv_start(cfg, ndev, true);
+       mutex_unlock(&cfg->bcn_sync);
+       mutex_unlock(&cfg->scan_sync);
+       return err;
+}
+
+int
+wl_android_bcnrecv_stop(struct net_device *ndev, uint reason)
+{
+       s32 err = BCME_OK;
+       struct bcm_cfg80211 *cfg = wl_get_cfg(ndev);
+
+       mutex_lock(&cfg->bcn_sync);
+       if ((cfg->bcnrecv_info.bcnrecv_state == BEACON_RECV_STARTED) ||
+          (cfg->bcnrecv_info.bcnrecv_state == BEACON_RECV_SUSPENDED)) {
+               err = _wl_android_bcnrecv_stop(cfg, ndev, reason);
+       }
+       mutex_unlock(&cfg->bcn_sync);
+       return err;
+}
+
+int
+wl_android_bcnrecv_suspend(struct net_device *ndev)
+{
+       s32 ret = BCME_OK;
+       struct bcm_cfg80211 *cfg = wl_get_cfg(ndev);
+
+       mutex_lock(&cfg->bcn_sync);
+       if (cfg->bcnrecv_info.bcnrecv_state == BEACON_RECV_STARTED) {
+               WL_INFORM_MEM(("bcnrecv suspend\n"));
+               ret = _wl_android_bcnrecv_stop(cfg, ndev, WL_BCNRECV_SUSPEND);
+       }
+       mutex_unlock(&cfg->bcn_sync);
+       return ret;
+}
+
+int
+wl_android_bcnrecv_resume(struct net_device *ndev)
+{
+       s32 ret = BCME_OK;
+       struct bcm_cfg80211 *cfg = wl_get_cfg(ndev);
+
+       /* Adding scan_sync mutex to avoid race condition in b/w scan_req and bcn recv */
+       mutex_lock(&cfg->scan_sync);
+       mutex_lock(&cfg->bcn_sync);
+       if (cfg->bcnrecv_info.bcnrecv_state == BEACON_RECV_SUSPENDED) {
+               WL_INFORM_MEM(("bcnrecv resume\n"));
+               ret = _wl_android_bcnrecv_start(cfg, ndev, false);
+       }
+       mutex_unlock(&cfg->bcn_sync);
+       mutex_unlock(&cfg->scan_sync);
+       return ret;
+}
+
+/* Beacon recv functionality code implementation */
+int
+wl_android_bcnrecv_config(struct net_device *ndev, char *cmd_argv, int total_len)
+{
+       struct bcm_cfg80211 *cfg = NULL;
+       uint err = BCME_OK;
+
+       if (!ndev) {
+               WL_ERR(("ndev is NULL\n"));
+               return -EINVAL;
+       }
+
+       cfg = wl_get_cfg(ndev);
+       if (!cfg) {
+               WL_ERR(("cfg is NULL\n"));
+               return -EINVAL;
+       }
+
+       /* sync commands from user space */
+       mutex_lock(&cfg->usr_sync);
+       if (strncmp(cmd_argv, "start", strlen("start")) == 0) {
+               WL_INFORM(("BCNRECV start\n"));
+               err = wl_android_bcnrecv_start(cfg, ndev);
+               if (err != BCME_OK) {
+                       WL_ERR(("Failed to process the start command, error:%d\n", err));
+                       goto exit;
+               }
+       } else if (strncmp(cmd_argv, "stop", strlen("stop")) == 0) {
+               WL_INFORM(("BCNRECV stop\n"));
+               err = wl_android_bcnrecv_stop(ndev, WL_BCNRECV_USER_TRIGGER);
+               if (err != BCME_OK) {
+                       WL_ERR(("Failed to stop the bcn recv, error:%d\n", err));
+                       goto exit;
+               }
+       } else {
+               err = BCME_ERROR;
+       }
+exit:
+       mutex_unlock(&cfg->usr_sync);
+       return err;
+}
+#endif /* WL_BCNRECV */
+
 int
 wl_handle_private_cmd(struct net_device *net, char *command, u32 cmd_len)
 {
 int
 wl_handle_private_cmd(struct net_device *net, char *command, u32 cmd_len)
 {
@@ -6966,29 +7524,11 @@ wl_handle_private_cmd(struct net_device *net, char *command, u32 cmd_len)
        else if (strnicmp(command, CMD_MAXDTIM_IN_SUSPEND, strlen(CMD_MAXDTIM_IN_SUSPEND)) == 0) {
                bytes_written = wl_android_set_max_dtim(net, command);
        }
        else if (strnicmp(command, CMD_MAXDTIM_IN_SUSPEND, strlen(CMD_MAXDTIM_IN_SUSPEND)) == 0) {
                bytes_written = wl_android_set_max_dtim(net, command);
        }
+       else if (strnicmp(command, CMD_DISDTIM_IN_SUSPEND, strlen(CMD_DISDTIM_IN_SUSPEND)) == 0) {
+               bytes_written = wl_android_set_disable_dtim_in_suspend(net, command);
+       }
        else if (strnicmp(command, CMD_SETBAND, strlen(CMD_SETBAND)) == 0) {
        else if (strnicmp(command, CMD_SETBAND, strlen(CMD_SETBAND)) == 0) {
-               uint band = *(command + strlen(CMD_SETBAND) + 1) - '0';
-#ifdef WL_HOST_BAND_MGMT
-               s32 ret = 0;
-               if ((ret = wl_cfg80211_set_band(net, band)) < 0) {
-                       if (ret == BCME_UNSUPPORTED) {
-                               /* If roam_var is unsupported, fallback to the original method */
-                               WL_ERR(("WL_HOST_BAND_MGMT defined, "
-                                       "but roam_band iovar unsupported in the firmware\n"));
-                       } else {
-                               bytes_written = -1;
-                       }
-               }
-               if (((ret == 0) && (band == WLC_BAND_AUTO)) || (ret == BCME_UNSUPPORTED)) {
-                       /* Apply if roam_band iovar is not supported or band setting is AUTO */
-                       bytes_written = wldev_set_band(net, band);
-               }
-#else
-               bytes_written = wl_cfg80211_set_if_band(net, band);
-#endif /* WL_HOST_BAND_MGMT */
-#ifdef ROAM_CHANNEL_CACHE
-               wl_update_roamscan_cache_by_band(net, band);
-#endif /* ROAM_CHANNEL_CACHE */
+               bytes_written = wl_android_set_band(net, command);
        }
        else if (strnicmp(command, CMD_GETBAND, strlen(CMD_GETBAND)) == 0) {
                bytes_written = wl_android_get_band(net, command, priv_cmd.total_len);
        }
        else if (strnicmp(command, CMD_GETBAND, strlen(CMD_GETBAND)) == 0) {
                bytes_written = wl_android_get_band(net, command, priv_cmd.total_len);
@@ -7181,6 +7721,11 @@ wl_handle_private_cmd(struct net_device *net, char *command, u32 cmd_len)
                bytes_written = wl_android_okc_enable(net, command);
        }
 #endif /* WES_SUPPORT */
                bytes_written = wl_android_okc_enable(net, command);
        }
 #endif /* WES_SUPPORT */
+#ifdef SUPPORT_RESTORE_SCAN_PARAMS
+       else if (strnicmp(command, CMD_RESTORE_SCAN_PARAMS, strlen(CMD_RESTORE_SCAN_PARAMS)) == 0) {
+               bytes_written = wl_android_restore_scan_params(net, command, priv_cmd.total_len);
+       }
+#endif /* SUPPORT_RESTORE_SCAN_PARAMS */
 #ifdef WLTDLS
        else if (strnicmp(command, CMD_TDLS_RESET, strlen(CMD_TDLS_RESET)) == 0) {
                bytes_written = wl_android_tdls_reset(net);
 #ifdef WLTDLS
        else if (strnicmp(command, CMD_TDLS_RESET, strlen(CMD_TDLS_RESET)) == 0) {
                bytes_written = wl_android_tdls_reset(net);
@@ -7760,6 +8305,14 @@ wl_handle_private_cmd(struct net_device *net, char *command, u32 cmd_len)
                bytes_written = wl_cfg80211_enable_cac(net, enable);
        }
 #endif /* SUPPORT_SET_CAC */
                bytes_written = wl_cfg80211_enable_cac(net, enable);
        }
 #endif /* SUPPORT_SET_CAC */
+#ifdef WL_BCNRECV
+       else if (strnicmp(command, CMD_BEACON_RECV,
+               strlen(CMD_BEACON_RECV)) == 0) {
+               char *data = (command + strlen(CMD_BEACON_RECV) + 1);
+               bytes_written = wl_android_bcnrecv_config(net,
+                               data, priv_cmd.total_len);
+       }
+#endif /* WL_BCNRECV */
        else {
                DHD_ERROR(("Unknown PRIVATE command %s - ignored\n", command));
                bytes_written = scnprintf(command, sizeof("FAIL"), "FAIL");
        else {
                DHD_ERROR(("Unknown PRIVATE command %s - ignored\n", command));
                bytes_written = scnprintf(command, sizeof("FAIL"), "FAIL");
index 40e430b4f0bb07f29a3b736a8b9c369404b86b2f..0d8dff42e23c2047463c056f5b760cca2ec080d1 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: wl_android.h 695651 2017-04-21 10:48:20Z $
+ * $Id: wl_android.h 818247 2019-05-07 04:15:13Z $
  */
 
 #include <linux/module.h>
  */
 
 #include <linux/module.h>
@@ -137,3 +137,12 @@ s32 wl_netlink_send_msg(int pid, int type, int seq, const void *data, size_t siz
 #define MAX_NUM_MAC_FILT        10
 
 int wl_android_set_ap_mac_list(struct net_device *dev, int macmode, struct maclist *maclist);
 #define MAX_NUM_MAC_FILT        10
 
 int wl_android_set_ap_mac_list(struct net_device *dev, int macmode, struct maclist *maclist);
+#ifdef WL_BCNRECV
+extern int wl_android_bcnrecv_config(struct net_device *ndev, char *data,
+               int total_len);
+extern int wl_android_bcnrecv_stop(struct net_device *ndev, uint reason);
+extern int wl_android_bcnrecv_resume(struct net_device *ndev);
+extern int wl_android_bcnrecv_suspend(struct net_device *ndev);
+extern int wl_android_bcnrecv_event(struct net_device *ndev,
+               uint attr_type, uint status, uint reason, uint8 *data, uint data_len);
+#endif /* WL_BCNRECV */
index 0fd4ff1fefa778364864c8c076799fce968b3f88..b6e4c04ef1862f62f24938203bbde72015232e83 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: wl_cfg80211.c 798171 2019-01-07 09:10:40Z $
+ * $Id: wl_cfg80211.c 820080 2019-05-16 03:05:46Z $
  */
 /* */
 #include <typedefs.h>
  */
 /* */
 #include <typedefs.h>
@@ -909,12 +909,6 @@ static s32 __wl_update_wiphybands(struct bcm_cfg80211 *cfg, bool notify);
 static s32 wl_check_vif_support(struct bcm_cfg80211 *cfg, wl_iftype_t wl_iftype);
 bool wl_is_wps_enrollee_active(struct net_device *ndev, const u8 *ie_ptr, u16 len);
 
 static s32 wl_check_vif_support(struct bcm_cfg80211 *cfg, wl_iftype_t wl_iftype);
 bool wl_is_wps_enrollee_active(struct net_device *ndev, const u8 *ie_ptr, u16 len);
 
-#ifdef WL_CFGVENDOR_SEND_HANG_EVENT
-static void wl_cfgvendor_send_hang_event(struct net_device *dev, u16 reason,
-               char *string, int hang_info_cnt);
-static void wl_copy_hang_info_if_falure(struct net_device *dev, u16 reason, s32 err);
-#endif /* WL_CFGVENDOR_SEND_HANG_EVENT */
-
 #ifdef WL_WPS_SYNC
 static void wl_init_wps_reauth_sm(struct bcm_cfg80211 *cfg);
 static void wl_deinit_wps_reauth_sm(struct bcm_cfg80211 *cfg);
 #ifdef WL_WPS_SYNC
 static void wl_init_wps_reauth_sm(struct bcm_cfg80211 *cfg);
 static void wl_deinit_wps_reauth_sm(struct bcm_cfg80211 *cfg);
@@ -928,6 +922,11 @@ static void wl_wps_handle_ifdel(struct net_device *ndev);
 #endif /* WL_WPS_SYNC */
 const u8 *wl_find_attribute(const u8 *buf, u16 len, u16 element_id);
 
 #endif /* WL_WPS_SYNC */
 const u8 *wl_find_attribute(const u8 *buf, u16 len, u16 element_id);
 
+#ifdef WL_BCNRECV
+static s32 wl_bcnrecv_aborted_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
+               const wl_event_msg_t *e, void *data);
+#endif /* WL_BCNRECV */
+
 static int bw2cap[] = { 0, 0, WLC_BW_CAP_20MHZ, WLC_BW_CAP_40MHZ, WLC_BW_CAP_80MHZ,
        WLC_BW_CAP_160MHZ, WLC_BW_CAP_160MHZ };
 
 static int bw2cap[] = { 0, 0, WLC_BW_CAP_20MHZ, WLC_BW_CAP_40MHZ, WLC_BW_CAP_80MHZ,
        WLC_BW_CAP_160MHZ, WLC_BW_CAP_160MHZ };
 
@@ -953,20 +952,35 @@ static int bw2cap[] = { 0, 0, WLC_BW_CAP_20MHZ, WLC_BW_CAP_40MHZ, WLC_BW_CAP_80M
 #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)) */
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
 #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)) */
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)) || (defined(CONFIG_ARCH_MSM) && \
-       defined(CFG80211_CONNECT_TIMEOUT_REASON_CODE))
-#define CFG80211_CONNECT_BSS(dev, bssid, bss, req_ie, req_ie_len, resp_ie, \
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)) || \
+       defined(CFG80211_CONNECT_TIMEOUT_REASON_CODE)
+#define CFG80211_CONNECT_RESULT(dev, bssid, bss, req_ie, req_ie_len, resp_ie, \
                resp_ie_len, status, gfp) \
        cfg80211_connect_bss(dev, bssid, bss, req_ie, req_ie_len, resp_ie, \
                resp_ie_len, status, gfp, NL80211_TIMEOUT_UNSPECIFIED);
 #else
                resp_ie_len, status, gfp) \
        cfg80211_connect_bss(dev, bssid, bss, req_ie, req_ie_len, resp_ie, \
                resp_ie_len, status, gfp, NL80211_TIMEOUT_UNSPECIFIED);
 #else
-#define CFG80211_CONNECT_BSS(dev, bssid, bss, req_ie, req_ie_len, resp_ie, \
+#define CFG80211_CONNECT_RESULT(dev, bssid, bss, req_ie, req_ie_len, resp_ie, \
                resp_ie_len, status, gfp) \
        cfg80211_connect_bss(dev, bssid, bss, req_ie, req_ie_len, resp_ie, \
                resp_ie_len, status, gfp);
 #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) || \
                resp_ie_len, status, gfp) \
        cfg80211_connect_bss(dev, bssid, bss, req_ie, req_ie_len, resp_ie, \
                resp_ie_len, status, gfp);
 #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) || \
-       * (CONFIG_ARCH_MSM && CFG80211_CONNECT_TIMEOUT_REASON_CODE)
+         (CFG80211_CONNECT_TIMEOUT_REASON_CODE)
        */
        */
+#elif defined(CFG80211_CONNECT_TIMEOUT_REASON_CODE)
+/* There are customer kernels with backported changes for
+ *  connect timeout. CFG80211_CONNECT_TIMEOUT_REASON_CODE define
+ * is available for kernels < 4.7 in such cases.
+ */
+#define CFG80211_CONNECT_RESULT(dev, bssid, bss, req_ie, req_ie_len, resp_ie, \
+               resp_ie_len, status, gfp) \
+       cfg80211_connect_bss(dev, bssid, NULL, req_ie, req_ie_len, resp_ie, \
+               resp_ie_len, status, gfp, NL80211_TIMEOUT_UNSPECIFIED);
+#else
+/* Kernels < 4.7 doesn't support cfg80211_connect_bss */
+#define CFG80211_CONNECT_RESULT(dev, bssid, bss, req_ie, req_ie_len, resp_ie, \
+               resp_ie_len, status, gfp) \
+       cfg80211_connect_result(dev, bssid, req_ie, req_ie_len, resp_ie, \
+               resp_ie_len, status, gfp);
 #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0) */
 
 #ifdef RSSI_OFFSET
 #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0) */
 
 #ifdef RSSI_OFFSET
@@ -1183,6 +1197,10 @@ static const struct {
 
 #define SOFT_AP_IF_NAME         "swlan0"
 
 
 #define SOFT_AP_IF_NAME         "swlan0"
 
+#ifdef P2P_LISTEN_OFFLOADING
+void wl_cfg80211_cancel_p2plo(struct bcm_cfg80211 *cfg);
+#endif /* P2P_LISTEN_OFFLOADING */
+
 #ifdef CUSTOMER_HW4_DEBUG
 uint prev_dhd_console_ms = 0;
 u32 prev_wl_dbg_level = 0;
 #ifdef CUSTOMER_HW4_DEBUG
 uint prev_dhd_console_ms = 0;
 u32 prev_wl_dbg_level = 0;
@@ -1759,7 +1777,6 @@ wl_cfg80211_p2p_if_add(struct bcm_cfg80211 *cfg,
 #if defined(WL_CFG80211_P2P_DEV_IF)
        if (wl_iftype == WL_IF_TYPE_P2P_DISC) {
                /* Handle Dedicated P2P discovery Interface */
 #if defined(WL_CFG80211_P2P_DEV_IF)
        if (wl_iftype == WL_IF_TYPE_P2P_DISC) {
                /* Handle Dedicated P2P discovery Interface */
-               cfg->down_disc_if = FALSE;
                return wl_cfgp2p_add_p2p_disc_if(cfg);
        }
 #endif /* WL_CFG80211_P2P_DEV_IF */
                return wl_cfgp2p_add_p2p_disc_if(cfg);
        }
 #endif /* WL_CFG80211_P2P_DEV_IF */
@@ -1931,6 +1948,10 @@ wl_cfg80211_iface_state_ops(struct wireless_dev *wdev,
 
        switch (state) {
                case WL_IF_CREATE_REQ:
 
        switch (state) {
                case WL_IF_CREATE_REQ:
+#ifdef WL_BCNRECV
+                       /* check fakeapscan in progress then abort */
+                       wl_android_bcnrecv_stop(ndev, WL_BCNRECV_CONCURRENCY);
+#endif /* WL_BCNRECV */
                        wl_cfg80211_scan_abort(cfg);
                        wl_wlfc_enable(cfg, true);
 
                        wl_cfg80211_scan_abort(cfg);
                        wl_wlfc_enable(cfg, true);
 
@@ -2017,17 +2038,7 @@ wl_cfg80211_p2p_if_del(struct wiphy *wiphy, struct wireless_dev *wdev)
 #ifdef WL_CFG80211_P2P_DEV_IF
        if (wdev->iftype == NL80211_IFTYPE_P2P_DEVICE) {
                /* Handle dedicated P2P discovery interface. */
 #ifdef WL_CFG80211_P2P_DEV_IF
        if (wdev->iftype == NL80211_IFTYPE_P2P_DEVICE) {
                /* Handle dedicated P2P discovery interface. */
-#ifdef CUSTOMER_HW4
-               if (dhd_download_fw_on_driverload) {
-                       return wl_cfgp2p_del_p2p_disc_if(wdev, cfg);
-               } else {
-                       WL_INFORM_MEM(("skipping del p2p discovery\n"));
-                       cfg->down_disc_if = TRUE;
-                       return 0;
-               }
-#else
                return wl_cfgp2p_del_p2p_disc_if(wdev, cfg);
                return wl_cfgp2p_del_p2p_disc_if(wdev, cfg);
-#endif /* CUSTOMER_HW4 */
        }
 #endif /* WL_CFG80211_P2P_DEV_IF */
 
        }
 #endif /* WL_CFG80211_P2P_DEV_IF */
 
@@ -2784,6 +2795,11 @@ wl_cfg80211_change_virtual_iface(struct wiphy *wiphy, struct net_device *ndev,
                return -EINVAL;
        }
 
                return -EINVAL;
        }
 
+       /* If any scan is going on, abort it */
+       if (wl_abort_scan_and_check(cfg) != TRUE) {
+               wl_notify_escan_complete(cfg, cfg->escan_info.ndev, true, true);
+       }
+
        mutex_lock(&cfg->if_sync);
        netinfo = wl_get_netinfo_by_wdev(cfg, ndev->ieee80211_ptr);
        if (unlikely(!netinfo)) {
        mutex_lock(&cfg->if_sync);
        netinfo = wl_get_netinfo_by_wdev(cfg, ndev->ieee80211_ptr);
        if (unlikely(!netinfo)) {
@@ -2805,11 +2821,6 @@ wl_cfg80211_change_virtual_iface(struct wiphy *wiphy, struct net_device *ndev,
                goto fail;
        }
 
                goto fail;
        }
 
-       /* If any scan is going on, abort it */
-       if (wl_abort_scan_and_check(cfg) != TRUE) {
-               wl_notify_escan_complete(cfg, cfg->escan_info.ndev, true, true);
-       }
-
        /* perform pre-if-change tasks */
        wl_cfg80211_iface_state_ops(ndev->ieee80211_ptr,
                WL_IF_CHANGE_REQ, wl_iftype, wl_mode);
        /* perform pre-if-change tasks */
        wl_cfg80211_iface_state_ops(ndev->ieee80211_ptr,
                WL_IF_CHANGE_REQ, wl_iftype, wl_mode);
@@ -3637,6 +3648,10 @@ __wl_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
                WL_ERR(("request null or n_ssids > WL_SCAN_PARAMS_SSID_MAX\n"));
                return -EOPNOTSUPP;
        }
                WL_ERR(("request null or n_ssids > WL_SCAN_PARAMS_SSID_MAX\n"));
                return -EOPNOTSUPP;
        }
+#ifdef WL_BCNRECV
+       /* check fakeapscan in progress then abort */
+       wl_android_bcnrecv_stop(ndev, WL_BCNRECV_SCANBUSY);
+#endif /* WL_BCNRECV */
 
 #ifdef P2P_LISTEN_OFFLOADING
        if (wl_get_p2p_status(cfg, DISC_IN_PROGRESS)) {
 
 #ifdef P2P_LISTEN_OFFLOADING
        if (wl_get_p2p_status(cfg, DISC_IN_PROGRESS)) {
@@ -3930,7 +3945,7 @@ wl_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
                }
        }
 
                }
        }
 
-       mutex_lock(&cfg->usr_sync);
+       mutex_lock(&cfg->scan_sync);
        err = __wl_cfg80211_scan(wiphy, ndev, request, NULL);
        if (unlikely(err)) {
                WL_ERR(("scan error (%d)\n", err));
        err = __wl_cfg80211_scan(wiphy, ndev, request, NULL);
        if (unlikely(err)) {
                WL_ERR(("scan error (%d)\n", err));
@@ -3939,7 +3954,7 @@ wl_cfg80211_scan(struct wiphy *wiphy, struct net_device *ndev,
                mod_timer(&cfg->scan_timeout,
                        jiffies + msecs_to_jiffies(wl_get_scan_timeout_val(cfg)));
        }
                mod_timer(&cfg->scan_timeout,
                        jiffies + msecs_to_jiffies(wl_get_scan_timeout_val(cfg)));
        }
-       mutex_unlock(&cfg->usr_sync);
+       mutex_unlock(&cfg->scan_sync);
 #ifdef WL_DRV_AVOID_SCANCACHE
        /* Reset roam cache after successful scan request */
 #ifdef ROAM_CHANNEL_CACHE
 #ifdef WL_DRV_AVOID_SCANCACHE
        /* Reset roam cache after successful scan request */
 #ifdef ROAM_CHANNEL_CACHE
@@ -4786,6 +4801,7 @@ wl_cfg80211_post_ifcreate(struct net_device *ndev,
        u16 wl_iftype;
 #ifdef WL_STATIC_IF
        int need_legacy_war = 0;
        u16 wl_iftype;
 #ifdef WL_STATIC_IF
        int need_legacy_war = 0;
+       dhd_pub_t *dhd = NULL;
 #endif /* WL_STATIC_IF */
 
        if (!ndev || !event) {
 #endif /* WL_STATIC_IF */
 
        if (!ndev || !event) {
@@ -4801,12 +4817,16 @@ wl_cfg80211_post_ifcreate(struct net_device *ndev,
 
 #ifdef WL_STATIC_IF
        {
 
 #ifdef WL_STATIC_IF
        {
-               need_legacy_war = ((wl_legacy_chip_check(cfg) ||
-                       wl_check_interface_create_v0(cfg)) &&
-                       !strnicmp(name, SOFT_AP_IF_NAME, strlen(SOFT_AP_IF_NAME)));
-               if (need_legacy_war) {
-                       event->role = WLC_E_IF_ROLE_AP;
+               dhd = (dhd_pub_t *)(cfg->pub);
+               if (!DHD_OPMODE_SUPPORTED(dhd, DHD_FLAG_MFG_MODE) && name) {
+                       need_legacy_war = ((wl_legacy_chip_check(cfg) ||
+                               wl_check_interface_create_v0(cfg)) &&
+                               !strnicmp(name, SOFT_AP_IF_NAME, strlen(SOFT_AP_IF_NAME)));
+                       if (need_legacy_war) {
+                               event->role = WLC_E_IF_ROLE_AP;
+                       }
                }
                }
+               WL_DBG(("name: %s\n", name));
        }
 #endif /* WL_STATIC_IF */
 
        }
 #endif /* WL_STATIC_IF */
 
@@ -4855,8 +4875,23 @@ wl_cfg80211_post_ifcreate(struct net_device *ndev,
                wdev = new_ndev->ieee80211_ptr;
 
                if (need_legacy_war) {
                wdev = new_ndev->ieee80211_ptr;
 
                if (need_legacy_war) {
-                       s32 err;
+                       /* Check whether mac addr is in sync with fw. If not,
+                        * apply it using cur_etheraddr.
+                        */
+                       if (memcmp(addr, event->mac, ETH_ALEN) != 0) {
+                               ret = wldev_iovar_setbuf_bsscfg(new_ndev, "cur_etheraddr",
+                                               addr, ETH_ALEN, cfg->ioctl_buf, WLC_IOCTL_MAXLEN,
+                                               event->bssidx, &cfg->ioctl_buf_sync);
+                               if (unlikely(ret)) {
+                                       WL_ERR(("set cur_etheraddr Error (%d)\n", ret));
+                                       goto fail;
+                               }
+                               memcpy(new_ndev->dev_addr, addr, ETH_ALEN);
+                               WL_ERR(("Applying updated mac address to firmware\n"));
+                       }
+
                        if (!wl_get_drv_status(cfg, AP_CREATED, new_ndev)) {
                        if (!wl_get_drv_status(cfg, AP_CREATED, new_ndev)) {
+                               s32 err;
                                WL_INFORM_MEM(("[%s] Bringup SoftAP on bssidx:%d \n",
                                        new_ndev->name, event->bssidx));
                                if ((err = wl_cfg80211_add_del_bss(cfg, new_ndev,
                                WL_INFORM_MEM(("[%s] Bringup SoftAP on bssidx:%d \n",
                                        new_ndev->name, event->bssidx));
                                if ((err = wl_cfg80211_add_del_bss(cfg, new_ndev,
@@ -6259,9 +6294,7 @@ wl_cfg80211_connect(struct wiphy *wiphy, struct net_device *dev,
 #ifdef ESCAN_CHANNEL_CACHE
        chanspec_t chanspec_list[MAX_ROAM_CHANNEL];
 #endif /* ESCAN_CHANNEL_CACHE */
 #ifdef ESCAN_CHANNEL_CACHE
        chanspec_t chanspec_list[MAX_ROAM_CHANNEL];
 #endif /* ESCAN_CHANNEL_CACHE */
-#if (defined(BCM4334_CHIP) || defined(BCM4359_CHIP) || !defined(ESCAN_RESULT_PATCH))
        int wait_cnt;
        int wait_cnt;
-#endif // endif
 
        WL_DBG(("In\n"));
        if (!dev) {
 
        WL_DBG(("In\n"));
        if (!dev) {
@@ -6317,7 +6350,6 @@ wl_cfg80211_connect(struct wiphy *wiphy, struct net_device *dev,
        /*
         * Cancel ongoing scan to sync up with sme state machine of cfg80211.
         */
        /*
         * Cancel ongoing scan to sync up with sme state machine of cfg80211.
         */
-#if (defined(BCM4359_CHIP) || !defined(ESCAN_RESULT_PATCH))
        if (cfg->scan_request) {
                WL_TRACE_HW4(("Aborting the scan! \n"));
                wl_cfg80211_scan_abort(cfg);
        if (cfg->scan_request) {
                WL_TRACE_HW4(("Aborting the scan! \n"));
                wl_cfg80211_scan_abort(cfg);
@@ -6331,7 +6363,6 @@ wl_cfg80211_connect(struct wiphy *wiphy, struct net_device *dev,
                        wl_cfg80211_cancel_scan(cfg);
                }
        }
                        wl_cfg80211_cancel_scan(cfg);
                }
        }
-#endif // endif
 #ifdef WL_SCHED_SCAN
        /* Locks are taken in wl_cfg80211_sched_scan_stop()
         * A start scan occuring during connect is unlikely
 #ifdef WL_SCHED_SCAN
        /* Locks are taken in wl_cfg80211_sched_scan_stop()
         * A start scan occuring during connect is unlikely
@@ -6372,6 +6403,12 @@ wl_cfg80211_connect(struct wiphy *wiphy, struct net_device *dev,
                }
        }
 
                }
        }
 
+       if (sme->bssid) {
+               wl_update_prof(cfg, dev, NULL, sme->bssid, WL_PROF_LATEST_BSSID);
+       } else {
+               wl_update_prof(cfg, dev, NULL, &ether_bcast, WL_PROF_LATEST_BSSID);
+       }
+
        /* 'connect' request received */
        wl_set_drv_status(cfg, CONNECTING, dev);
        /* clear nested connect bit on proceeding for connection */
        /* 'connect' request received */
        wl_set_drv_status(cfg, CONNECTING, dev);
        /* clear nested connect bit on proceeding for connection */
@@ -6768,13 +6805,11 @@ wl_cfg80211_disconnect(struct wiphy *wiphy, struct net_device *dev,
                /*
                * Cancel ongoing scan to sync up with sme state machine of cfg80211.
                */
                /*
                * Cancel ongoing scan to sync up with sme state machine of cfg80211.
                */
-#if !defined(ESCAN_RESULT_PATCH)
                /* Let scan aborted by F/W */
                if (cfg->scan_request) {
                        WL_TRACE_HW4(("Aborting the scan! \n"));
                        wl_cfg80211_cancel_scan(cfg);
                }
                /* Let scan aborted by F/W */
                if (cfg->scan_request) {
                        WL_TRACE_HW4(("Aborting the scan! \n"));
                        wl_cfg80211_cancel_scan(cfg);
                }
-#endif /* ESCAN_RESULT_PATCH */
                if (wl_get_drv_status(cfg, CONNECTING, dev) ||
                        wl_get_drv_status(cfg, CONNECTED, dev)) {
                                wl_set_drv_status(cfg, DISCONNECTING, dev);
                if (wl_get_drv_status(cfg, CONNECTING, dev) ||
                        wl_get_drv_status(cfg, CONNECTED, dev)) {
                                wl_set_drv_status(cfg, DISCONNECTING, dev);
@@ -6802,8 +6837,19 @@ wl_cfg80211_disconnect(struct wiphy *wiphy, struct net_device *dev,
                }
 #endif /* WPS_SYNC */
                wl_cfg80211_wait_for_disconnection(cfg, dev);
                }
 #endif /* WPS_SYNC */
                wl_cfg80211_wait_for_disconnection(cfg, dev);
+               if (wl_get_drv_status(cfg, DISCONNECTING, dev)) {
+                       CFG80211_CONNECT_RESULT(dev, NULL, NULL,
+                               NULL, 0, NULL, 0,
+                               WLAN_STATUS_UNSPECIFIED_FAILURE,
+                               GFP_KERNEL);
+                       wl_clr_drv_status(cfg, DISCONNECTING, dev);
+               }
        } else {
                WL_INFORM_MEM(("act is false\n"));
        } else {
                WL_INFORM_MEM(("act is false\n"));
+               CFG80211_CONNECT_RESULT(dev, NULL, NULL,
+                       NULL, 0, NULL, 0,
+                       WLAN_STATUS_UNSPECIFIED_FAILURE,
+                       GFP_KERNEL);
        }
 #ifdef CUSTOM_SET_CPUCORE
        /* set default cpucore */
        }
 #ifdef CUSTOM_SET_CPUCORE
        /* set default cpucore */
@@ -8280,6 +8326,7 @@ wl_cfg80211_remain_on_channel(struct wiphy *wiphy, bcm_struct_cfgdev *cfgdev,
        struct net_device *ndev = NULL;
        struct bcm_cfg80211 *cfg = wiphy_priv(wiphy);
 
        struct net_device *ndev = NULL;
        struct bcm_cfg80211 *cfg = wiphy_priv(wiphy);
 
+       RETURN_EIO_IF_NOT_UP(cfg);
 #ifdef DHD_IFDEBUG
        PRINT_WDEV_INFO(cfgdev);
 #endif /* DHD_IFDEBUG */
 #ifdef DHD_IFDEBUG
        PRINT_WDEV_INFO(cfgdev);
 #endif /* DHD_IFDEBUG */
@@ -8293,6 +8340,7 @@ wl_cfg80211_remain_on_channel(struct wiphy *wiphy, bcm_struct_cfgdev *cfgdev,
        }
 #endif /* WL_NAN */
 
        }
 #endif /* WL_NAN */
 
+       mutex_lock(&cfg->usr_sync);
        WL_DBG(("Enter, channel: %d, duration ms (%d) SCANNING ?? %s \n",
                ieee80211_frequency_to_channel(channel->center_freq),
                duration, (wl_get_drv_status(cfg, SCANNING, ndev)) ? "YES":"NO"));
        WL_DBG(("Enter, channel: %d, duration ms (%d) SCANNING ?? %s \n",
                ieee80211_frequency_to_channel(channel->center_freq),
                duration, (wl_get_drv_status(cfg, SCANNING, ndev)) ? "YES":"NO"));
@@ -8303,19 +8351,16 @@ wl_cfg80211_remain_on_channel(struct wiphy *wiphy, bcm_struct_cfgdev *cfgdev,
                goto exit;
        }
 
                goto exit;
        }
 
-#ifdef P2P_LISTEN_OFFLOADING
-       if (wl_get_p2p_status(cfg, DISC_IN_PROGRESS)) {
-               WL_ERR(("P2P_FIND: Discovery offload is in progress\n"));
-               return -EAGAIN;
-       }
-#endif /* P2P_LISTEN_OFFLOADING */
-
 #ifndef WL_CFG80211_VSDB_PRIORITIZE_SCAN_REQUEST
        if (wl_get_drv_status_all(cfg, SCANNING)) {
                wl_cfg80211_cancel_scan(cfg);
        }
 #endif /* not WL_CFG80211_VSDB_PRIORITIZE_SCAN_REQUEST */
 
 #ifndef WL_CFG80211_VSDB_PRIORITIZE_SCAN_REQUEST
        if (wl_get_drv_status_all(cfg, SCANNING)) {
                wl_cfg80211_cancel_scan(cfg);
        }
 #endif /* not WL_CFG80211_VSDB_PRIORITIZE_SCAN_REQUEST */
 
+#ifdef P2P_LISTEN_OFFLOADING
+       wl_cfg80211_cancel_p2plo(cfg);
+#endif /* P2P_LISTEN_OFFLOADING */
+
        target_channel = ieee80211_frequency_to_channel(channel->center_freq);
        memcpy(&cfg->remain_on_chan, channel, sizeof(struct ieee80211_channel));
 #if defined(WL_ENABLE_P2P_IF)
        target_channel = ieee80211_frequency_to_channel(channel->center_freq);
        memcpy(&cfg->remain_on_chan, channel, sizeof(struct ieee80211_channel));
 #if defined(WL_ENABLE_P2P_IF)
@@ -8352,6 +8397,10 @@ wl_cfg80211_remain_on_channel(struct wiphy *wiphy, bcm_struct_cfgdev *cfgdev,
        }
 #endif /* WL_CFG80211_VSDB_PRIORITIZE_SCAN_REQUEST */
 
        }
 #endif /* WL_CFG80211_VSDB_PRIORITIZE_SCAN_REQUEST */
 
+#ifdef WL_BCNRECV
+       /* check fakeapscan in progress then abort */
+       wl_android_bcnrecv_stop(ndev, WL_BCNRECV_LISTENBUSY);
+#endif /* WL_BCNRECV */
 #ifdef WL_CFG80211_SYNC_GON
        if (wl_get_drv_status_all(cfg, WAITING_NEXT_ACT_FRM_LISTEN)) {
                /* do not enter listen mode again if we are in listen mode already for next af.
 #ifdef WL_CFG80211_SYNC_GON
        if (wl_get_drv_status_all(cfg, WAITING_NEXT_ACT_FRM_LISTEN)) {
                /* do not enter listen mode again if we are in listen mode already for next af.
@@ -8418,6 +8467,7 @@ exit:
        } else {
                WL_ERR(("Fail to Set (err=%d cookie:%llu)\n", err, *cookie));
        }
        } else {
                WL_ERR(("Fail to Set (err=%d cookie:%llu)\n", err, *cookie));
        }
+       mutex_unlock(&cfg->usr_sync);
        return err;
 }
 
        return err;
 }
 
@@ -13030,6 +13080,10 @@ wl_notify_connect_status_ap(struct bcm_cfg80211 *cfg, struct net_device *ndev,
 #ifdef BIGDATA_SOFTAP
                        wl_ap_stainfo_init(cfg);
 #endif /* BIGDATA_SOFTAP */
 #ifdef BIGDATA_SOFTAP
                        wl_ap_stainfo_init(cfg);
 #endif /* BIGDATA_SOFTAP */
+#ifdef WL_BCNRECV
+                       /* check fakeapscan is in progress, if progress then abort */
+                       wl_android_bcnrecv_stop(ndev, WL_BCNRECV_CONCURRENCY);
+#endif /* WL_BCNRECV */
                        return 0;
                }
        }
                        return 0;
                }
        }
@@ -14039,6 +14093,11 @@ wl_notify_connect_status(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
                                scb_val_t scbval;
                                u8 *curbssid = wl_read_prof(cfg, ndev, WL_PROF_BSSID);
                                uint32 reason = 0;
                                scb_val_t scbval;
                                u8 *curbssid = wl_read_prof(cfg, ndev, WL_PROF_BSSID);
                                uint32 reason = 0;
+                               bcm_tlv_t *deauth_info = NULL;
+                               wips_detect_inform_t *wips_detect_info;
+                               uint8 wips_bssid[ETHER_ADDR_LEN];
+                               u32 len = ntoh32(e->datalen) + TLV_HDR_LEN;
+
                                struct ether_addr bssid_dongle = {{0, 0, 0, 0, 0, 0}};
                                struct ether_addr bssid_null = {{0, 0, 0, 0, 0, 0}};
 
                                struct ether_addr bssid_dongle = {{0, 0, 0, 0, 0, 0}};
                                struct ether_addr bssid_null = {{0, 0, 0, 0, 0, 0}};
 
@@ -14049,6 +14108,23 @@ wl_notify_connect_status(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
                                                        "changed 0xFF\n", event, reason));
                                                reason = WLC_E_DEAUTH_MAX_REASON;
                                        }
                                                        "changed 0xFF\n", event, reason));
                                                reason = WLC_E_DEAUTH_MAX_REASON;
                                        }
+                                       if ((deauth_info = bcm_parse_tlvs(data, len,
+                                               TAG_DEAUTH_TLV_WIPS)) != NULL) {
+                                               wips_detect_info =
+                                                       (wips_detect_inform_t *)deauth_info->data;
+                                               memcpy(wips_bssid, &wips_detect_info->ea,
+                                                       ETHER_ADDR_LEN);
+                                               if (wips_detect_info->misdeauth > 1) {
+                                                       WL_ERR(("WIPS attack!! cnt=%d, curRSSI=%d, "
+                                                               "deauthRSSI=%d, time=%d, "
+                                                               "MAC="MACDBG"\n",
+                                                               wips_detect_info->misdeauth,
+                                                               wips_detect_info->cur_bsscfg_rssi,
+                                                               wips_detect_info->deauth_rssi,
+                                                               wips_detect_info->timestamp,
+                                                               MAC2STRDBG(wips_bssid)));
+                                               }
+                                       }
                                }
 #ifdef SET_SSID_FAIL_CUSTOM_RC
                                if (event == WLC_E_SET_SSID) {
                                }
 #ifdef SET_SSID_FAIL_CUSTOM_RC
                                if (event == WLC_E_SET_SSID) {
@@ -14203,19 +14279,25 @@ wl_notify_connect_status(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
                        /* Dump FW preserve buffer content */
                        wl_flush_fw_log_buffer(ndev, FW_LOGSET_MASK_ALL);
 
                        /* Dump FW preserve buffer content */
                        wl_flush_fw_log_buffer(ndev, FW_LOGSET_MASK_ALL);
 
-                       if (wl_get_drv_status(cfg, DISCONNECTING, ndev) &&
-                               wl_get_drv_status(cfg, CONNECTING, ndev)) {
-                               wl_clr_drv_status(cfg, DISCONNECTING, ndev);
-                               wl_clr_drv_status(cfg, CONNECTING, ndev);
-                               wl_cfg80211_scan_abort(cfg);
-                               DHD_ENABLE_RUNTIME_PM((dhd_pub_t *)cfg->pub);
-                               return err;
-                       }
                        /* Clean up any pending scan request */
                        wl_cfg80211_cancel_scan(cfg);
 
                        /* Clean up any pending scan request */
                        wl_cfg80211_cancel_scan(cfg);
 
-                       if (wl_get_drv_status(cfg, CONNECTING, ndev))
+                       if (wl_get_drv_status(cfg, CONNECTING, ndev)) {
+                               if (!wl_get_drv_status(cfg, DISCONNECTING, ndev)) {
+                                       WL_INFORM_MEM(("wl dissassoc\n"));
+                                       err = wldev_ioctl_set(ndev, WLC_DISASSOC, NULL, 0);
+                                       if (err < 0) {
+                                               WL_ERR(("WLC_DISASSOC error %d\n", err));
+                                               err = 0;
+                                       }
+                               } else {
+                                       WL_DBG(("connect fail. clear disconnecting bit\n"));
+                                       wl_clr_drv_status(cfg, DISCONNECTING, ndev);
+                               }
                                wl_bss_connect_done(cfg, ndev, e, data, false);
                                wl_bss_connect_done(cfg, ndev, e, data, false);
+                               wl_clr_drv_status(cfg, CONNECTING, ndev);
+                               WL_INFORM_MEM(("connect fail reported\n"));
+                       }
                } else {
                        WL_DBG(("%s nothing\n", __FUNCTION__));
                }
                } else {
                        WL_DBG(("%s nothing\n", __FUNCTION__));
                }
@@ -15202,8 +15284,8 @@ wl_bss_connect_done(struct bcm_cfg80211 *cfg, struct net_device *ndev,
                        completed = false;
                        sec->auth_assoc_res_status = WLAN_STATUS_UNSPECIFIED_FAILURE;
                }
                        completed = false;
                        sec->auth_assoc_res_status = WLAN_STATUS_UNSPECIFIED_FAILURE;
                }
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
-               CFG80211_CONNECT_BSS(ndev,
+
+               CFG80211_CONNECT_RESULT(ndev,
                        curbssid,
                        bss,
                        conn_info->req_ie,
                        curbssid,
                        bss,
                        conn_info->req_ie,
@@ -15215,19 +15297,7 @@ wl_bss_connect_done(struct bcm_cfg80211 *cfg, struct net_device *ndev,
                        sec->auth_assoc_res_status :
                        WLAN_STATUS_UNSPECIFIED_FAILURE,
                        GFP_KERNEL);
                        sec->auth_assoc_res_status :
                        WLAN_STATUS_UNSPECIFIED_FAILURE,
                        GFP_KERNEL);
-#else
-               cfg80211_connect_result(ndev,
-                       curbssid,
-                       conn_info->req_ie,
-                       conn_info->req_ie_len,
-                       conn_info->resp_ie,
-                       conn_info->resp_ie_len,
-                       completed ? WLAN_STATUS_SUCCESS :
-                       (sec->auth_assoc_res_status) ?
-                       sec->auth_assoc_res_status :
-                       WLAN_STATUS_UNSPECIFIED_FAILURE,
-                       GFP_KERNEL);
-#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0) */
+
                if (completed) {
                        WL_INFORM_MEM(("[%s] Report connect result - "
                                "connection succeeded\n", ndev->name));
                if (completed) {
                        WL_INFORM_MEM(("[%s] Report connect result - "
                                "connection succeeded\n", ndev->name));
@@ -15459,7 +15529,7 @@ wl_notify_scan_status(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
        }
        ndev = cfgdev_to_wlc_ndev(cfgdev, cfg);
 
        }
        ndev = cfgdev_to_wlc_ndev(cfgdev, cfg);
 
-       mutex_lock(&cfg->usr_sync);
+       mutex_lock(&cfg->scan_sync);
        wl_clr_drv_status(cfg, SCANNING, ndev);
        memset(&channel_inform, 0, sizeof(channel_inform));
        err = wldev_ioctl_get(ndev, WLC_GET_CHANNEL, &channel_inform,
        wl_clr_drv_status(cfg, SCANNING, ndev);
        memset(&channel_inform, 0, sizeof(channel_inform));
        err = wldev_ioctl_get(ndev, WLC_GET_CHANNEL, &channel_inform,
@@ -15499,7 +15569,7 @@ scan_done_out:
        }
        spin_unlock_irqrestore(&cfg->cfgdrv_lock, flags);
        WL_DBG(("cfg80211_scan_done\n"));
        }
        spin_unlock_irqrestore(&cfg->cfgdrv_lock, flags);
        WL_DBG(("cfg80211_scan_done\n"));
-       mutex_unlock(&cfg->usr_sync);
+       mutex_unlock(&cfg->scan_sync);
        return err;
 }
 
        return err;
 }
 
@@ -16533,6 +16603,9 @@ static void wl_init_event_handler(struct bcm_cfg80211 *cfg)
 #ifdef WL_BAM
        cfg->evt_handler[WLC_E_ADPS] = wl_adps_event_handler;
 #endif /* WL_BAM */
 #ifdef WL_BAM
        cfg->evt_handler[WLC_E_ADPS] = wl_adps_event_handler;
 #endif /* WL_BAM */
+#ifdef WL_BCNRECV
+       cfg->evt_handler[WLC_E_BCNRECV_ABORTED] = wl_bcnrecv_aborted_event_handler;
+#endif /* WL_BCNRECV */
 }
 
 #if defined(STATIC_WL_PRIV_STRUCT)
 }
 
 #if defined(STATIC_WL_PRIV_STRUCT)
@@ -16758,10 +16831,27 @@ static void wl_scan_timeout(unsigned long data)
 #ifdef DHD_FW_COREDUMP
        uint32 prev_memdump_mode = dhdp->memdump_enabled;
 #endif /* DHD_FW_COREDUMP */
 #ifdef DHD_FW_COREDUMP
        uint32 prev_memdump_mode = dhdp->memdump_enabled;
 #endif /* DHD_FW_COREDUMP */
+       unsigned long flags;
 
 
+       spin_lock_irqsave(&cfg->cfgdrv_lock, flags);
        if (!(cfg->scan_request)) {
                WL_ERR(("timer expired but no scan request\n"));
        if (!(cfg->scan_request)) {
                WL_ERR(("timer expired but no scan request\n"));
+               spin_unlock_irqrestore(&cfg->cfgdrv_lock, flags);
                return;
                return;
+       } else {
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0))
+               if (cfg->scan_request->dev) {
+                       wdev = cfg->scan_request->dev->ieee80211_ptr;
+               }
+#else
+               wdev = cfg->scan_request->wdev;
+#endif /* LINUX_VERSION < KERNEL_VERSION(3, 6, 0) */
+               spin_unlock_irqrestore(&cfg->cfgdrv_lock, flags);
+
+               if (!wdev) {
+                       WL_ERR(("No wireless_dev present\n"));
+                       return;
+               }
        }
 
 #if defined(DHD_KERNEL_SCHED_DEBUG) && defined(DHD_FW_COREDUMP)
        }
 
 #if defined(DHD_KERNEL_SCHED_DEBUG) && defined(DHD_FW_COREDUMP)
@@ -16792,7 +16882,7 @@ static void wl_scan_timeout(unsigned long data)
                mutex_is_locked(&cfg->if_sync),
                mutex_is_locked(&cfg->usr_sync),
                mutex_is_locked(&cfg->pm_sync),
                mutex_is_locked(&cfg->if_sync),
                mutex_is_locked(&cfg->usr_sync),
                mutex_is_locked(&cfg->pm_sync),
-               mutex_is_locked(&cfg->scan_complete),
+               mutex_is_locked(&cfg->scan_sync),
                spin_is_locked(&cfg->cfgdrv_lock),
                spin_is_locked(&cfg->eq_lock)));
        dhd_bus_intr_count_dump(dhdp);
                spin_is_locked(&cfg->cfgdrv_lock),
                spin_is_locked(&cfg->eq_lock)));
        dhd_bus_intr_count_dump(dhdp);
@@ -16816,18 +16906,7 @@ static void wl_scan_timeout(unsigned long data)
                }
        }
 
                }
        }
 
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0))
-       if (cfg->scan_request->dev)
-               wdev = cfg->scan_request->dev->ieee80211_ptr;
-#else
-       wdev = cfg->scan_request->wdev;
-#endif /* LINUX_VERSION < KERNEL_VERSION(3, 6, 0) */
-       if (!wdev) {
-               WL_ERR(("No wireless_dev present\n"));
-               return;
-       }
        ndev = wdev_to_wlc_ndev(wdev, cfg);
        ndev = wdev_to_wlc_ndev(wdev, cfg);
-
        bzero(&msg, sizeof(wl_event_msg_t));
        WL_ERR(("timer expired\n"));
 #ifdef BCMPCIE
        bzero(&msg, sizeof(wl_event_msg_t));
        WL_ERR(("timer expired\n"));
 #ifdef BCMPCIE
@@ -16984,8 +17063,10 @@ static void wl_cfg80211_cancel_scan(struct bcm_cfg80211 *cfg)
        struct wireless_dev *wdev = NULL;
        struct net_device *ndev = NULL;
 
        struct wireless_dev *wdev = NULL;
        struct net_device *ndev = NULL;
 
-       if (!cfg->scan_request)
-               return;
+       mutex_lock(&cfg->scan_sync);
+       if (!cfg->scan_request) {
+               goto exit;
+       }
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0))
        if (cfg->scan_request->dev)
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0))
        if (cfg->scan_request->dev)
@@ -16996,12 +17077,14 @@ static void wl_cfg80211_cancel_scan(struct bcm_cfg80211 *cfg)
 
        if (!wdev) {
                WL_ERR(("No wireless_dev present\n"));
 
        if (!wdev) {
                WL_ERR(("No wireless_dev present\n"));
-               return;
+               goto exit;
        }
 
        ndev = wdev_to_wlc_ndev(wdev, cfg);
        wl_notify_escan_complete(cfg, ndev, true, true);
        WL_INFORM_MEM(("Scan aborted! \n"));
        }
 
        ndev = wdev_to_wlc_ndev(wdev, cfg);
        wl_notify_escan_complete(cfg, ndev, true, true);
        WL_INFORM_MEM(("Scan aborted! \n"));
+exit:
+       mutex_unlock(&cfg->scan_sync);
 }
 
 void wl_cfg80211_scan_abort(struct bcm_cfg80211 *cfg)
 }
 
 void wl_cfg80211_scan_abort(struct bcm_cfg80211 *cfg)
@@ -17047,7 +17130,6 @@ static s32 wl_notify_escan_complete(struct bcm_cfg80211 *cfg,
        WL_DBG(("Enter \n"));
        BCM_REFERENCE(dhdp);
 
        WL_DBG(("Enter \n"));
        BCM_REFERENCE(dhdp);
 
-       mutex_lock(&cfg->scan_complete);
        if (!ndev) {
                WL_ERR(("ndev is null\n"));
                err = BCME_ERROR;
        if (!ndev) {
                WL_ERR(("ndev is null\n"));
                err = BCME_ERROR;
@@ -17122,7 +17204,6 @@ static s32 wl_notify_escan_complete(struct bcm_cfg80211 *cfg,
        spin_unlock_irqrestore(&cfg->cfgdrv_lock, flags);
 
 out:
        spin_unlock_irqrestore(&cfg->cfgdrv_lock, flags);
 
 out:
-       mutex_unlock(&cfg->scan_complete);
        return err;
 }
 
        return err;
 }
 
@@ -17371,6 +17452,69 @@ exit:
 
 }
 #endif /* WL_DRV_AVOID_SCANCACHE */
 
 }
 #endif /* WL_DRV_AVOID_SCANCACHE */
+
+#ifdef WL_BCNRECV
+/* Beacon recv results handler sending to upper layer */
+static s32
+wl_bcnrecv_result_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
+               wl_bss_info_v109_2_t *bi, uint32 scan_status)
+{
+       s32 err = BCME_OK;
+       struct wiphy *wiphy = NULL;
+       wl_bcnrecv_result_t *bcn_recv = NULL;
+       struct timespec ts;
+       if (!bi) {
+               WL_ERR(("%s: bi is NULL\n", __func__));
+               err = BCME_NORESOURCE;
+               goto exit;
+       }
+       if ((bi->length - bi->ie_length) < sizeof(wl_bss_info_v109_2_t)) {
+               WL_ERR(("bi info version doesn't support bcn_recv attributes\n"));
+               goto exit;
+       }
+
+       if (scan_status == WLC_E_STATUS_RXBCN) {
+               wiphy = cfg->wdev->wiphy;
+               if (!wiphy) {
+                        WL_ERR(("wiphy is NULL\n"));
+                        err = BCME_NORESOURCE;
+                        goto exit;
+               }
+               bcn_recv = (wl_bcnrecv_result_t *)MALLOCZ(cfg->osh, sizeof(*bcn_recv));
+               if (unlikely(!bcn_recv)) {
+                       WL_ERR(("Failed to allocate memory\n"));
+                       return -ENOMEM;
+               }
+               memcpy((char *)bcn_recv->SSID, (char *)bi->SSID, DOT11_MAX_SSID_LEN);
+               memcpy(&bcn_recv->BSSID, &bi->BSSID, ETH_ALEN);
+               bcn_recv->channel = wf_chspec_ctlchan(
+                       wl_chspec_driver_to_host(bi->chanspec));
+               bcn_recv->beacon_interval = bi->beacon_period;
+
+               /* kernal timestamp */
+               get_monotonic_boottime(&ts);
+               bcn_recv->system_time = ((u64)ts.tv_sec*1000000)
+                               + ts.tv_nsec / 1000;
+               bcn_recv->timestamp[0] = bi->timestamp[0];
+               bcn_recv->timestamp[1] = bi->timestamp[1];
+               if (bcn_recv) {
+                       if ((err = wl_android_bcnrecv_event(cfgdev_to_wlc_ndev(cfgdev, cfg),
+                               BCNRECV_ATTR_BCNINFO, 0, 0, (uint8 *)bcn_recv, sizeof(*bcn_recv)))
+                                               != BCME_OK) {
+                               WL_ERR(("failed to send bcnrecv event, error:%d\n", err));
+                       }
+               }
+       } else {
+               WL_DBG(("Ignoring Escan Event:%d \n", scan_status));
+       }
+exit:
+       if (bcn_recv) {
+               MFREE(cfg->osh, bcn_recv, sizeof(*bcn_recv));
+       }
+       return err;
+}
+#endif /* WL_BCNRECV */
+
 static s32 wl_escan_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
        const wl_event_msg_t *e, void *data)
 {
 static s32 wl_escan_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
        const wl_event_msg_t *e, void *data)
 {
@@ -17393,15 +17537,25 @@ static s32 wl_escan_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
 
        ndev = cfgdev_to_wlc_ndev(cfgdev, cfg);
 
 
        ndev = cfgdev_to_wlc_ndev(cfgdev, cfg);
 
-       mutex_lock(&cfg->usr_sync);
+       mutex_lock(&cfg->scan_sync);
        /* P2P SCAN is coming from primary interface */
        if (wl_get_p2p_status(cfg, SCANNING)) {
                if (wl_get_drv_status_all(cfg, SENDING_ACT_FRM))
                        ndev = cfg->afx_hdl->dev;
                else
                        ndev = cfg->escan_info.ndev;
        /* P2P SCAN is coming from primary interface */
        if (wl_get_p2p_status(cfg, SCANNING)) {
                if (wl_get_drv_status_all(cfg, SENDING_ACT_FRM))
                        ndev = cfg->afx_hdl->dev;
                else
                        ndev = cfg->escan_info.ndev;
-
        }
        }
+       escan_result = (wl_escan_result_t *)data;
+#ifdef WL_BCNRECV
+       if (cfg->bcnrecv_info.bcnrecv_state == BEACON_RECV_STARTED &&
+               status == WLC_E_STATUS_RXBCN) {
+               /* handle beacon recv scan results */
+               wl_bss_info_v109_2_t *bi_info;
+               bi_info = (wl_bss_info_v109_2_t *)escan_result->bss_info;
+               err = wl_bcnrecv_result_handler(cfg, cfgdev, bi_info, status);
+               goto exit;
+       }
+#endif /* WL_BCNRECV */
        if (!ndev || (!wl_get_drv_status(cfg, SCANNING, ndev) && !cfg->sched_scan_running)) {
                WL_ERR_RLMT(("escan is not ready. drv_scan_status 0x%x"
                " e_type %d e_states %d\n",
        if (!ndev || (!wl_get_drv_status(cfg, SCANNING, ndev) && !cfg->sched_scan_running)) {
                WL_ERR_RLMT(("escan is not ready. drv_scan_status 0x%x"
                " e_type %d e_states %d\n",
@@ -17409,7 +17563,6 @@ static s32 wl_escan_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
                ntoh32(e->event_type), ntoh32(e->status)));
                goto exit;
        }
                ntoh32(e->event_type), ntoh32(e->status)));
                goto exit;
        }
-       escan_result = (wl_escan_result_t *)data;
 
 #ifndef WL_DRV_AVOID_SCANCACHE
        if (status == WLC_E_STATUS_PARTIAL) {
 
 #ifndef WL_DRV_AVOID_SCANCACHE
        if (status == WLC_E_STATUS_PARTIAL) {
@@ -17762,7 +17915,7 @@ static s32 wl_escan_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
        err = wl_escan_without_scan_cache(cfg, escan_result, ndev, e, status);
 #endif /* WL_DRV_AVOID_SCANCACHE */
 exit:
        err = wl_escan_without_scan_cache(cfg, escan_result, ndev, e, status);
 #endif /* WL_DRV_AVOID_SCANCACHE */
 exit:
-       mutex_unlock(&cfg->usr_sync);
+       mutex_unlock(&cfg->scan_sync);
        return err;
 }
 
        return err;
 }
 
@@ -18108,11 +18261,14 @@ static s32 wl_init_priv(struct bcm_cfg80211 *cfg)
        wl_init_event_handler(cfg);
        mutex_init(&cfg->usr_sync);
        mutex_init(&cfg->event_sync);
        wl_init_event_handler(cfg);
        mutex_init(&cfg->usr_sync);
        mutex_init(&cfg->event_sync);
-       mutex_init(&cfg->scan_complete);
        mutex_init(&cfg->if_sync);
        mutex_init(&cfg->if_sync);
+       mutex_init(&cfg->scan_sync);
 #ifdef WLTDLS
        mutex_init(&cfg->tdls_sync);
 #endif /* WLTDLS */
 #ifdef WLTDLS
        mutex_init(&cfg->tdls_sync);
 #endif /* WLTDLS */
+#ifdef WL_BCNRECV
+       mutex_init(&cfg->bcn_sync);
+#endif /* WL_BCNRECV */
 #ifdef WL_WPS_SYNC
        wl_init_wps_reauth_sm(cfg);
 #endif /* WL_WPS_SYNC */
 #ifdef WL_WPS_SYNC
        wl_init_wps_reauth_sm(cfg);
 #endif /* WL_WPS_SYNC */
@@ -19231,6 +19387,78 @@ static s32 __wl_update_wiphybands(struct bcm_cfg80211 *cfg, bool notify)
        return 0;
 }
 
        return 0;
 }
 
+#ifdef WL_BCNRECV
+static s32
+wl_bcnrecv_aborted_event_handler(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgdev,
+               const wl_event_msg_t *e, void *data)
+{
+       s32 status = ntoh32(e->status);
+       struct net_device *ndev = bcmcfg_to_prmry_ndev(cfg);
+       /* Abort fakeapscan, when Roam is in progress */
+       if (status == WLC_E_STATUS_RXBCN_ABORT) {
+               wl_android_bcnrecv_stop(ndev, WL_BCNRECV_ROAMABORT);
+       } else {
+               WL_ERR(("UNKNOWN STATUS. status:%d\n", status));
+       }
+       return BCME_OK;
+}
+#endif /* WL_BCNRECV */
+
+/* Get the concurrency mode */
+int wl_cfg80211_get_concurrency_mode(struct bcm_cfg80211 *cfg)
+{
+       struct net_info *iter, *next;
+       uint cmode = CONCURRENCY_MODE_NONE;
+       u32 connected_cnt = 0;
+       u32 pre_channel = 0, channel = 0;
+       u32 pre_band = 0;
+       u32 chanspec = 0;
+       u32 band = 0;
+
+       connected_cnt = wl_get_drv_status_all(cfg, CONNECTED);
+       if (connected_cnt <= 1) {
+               return cmode;
+       }
+#if defined(STRICT_GCC_WARNINGS) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == \
+       4 && __GNUC_MINOR__ >= 6))
+_Pragma("GCC diagnostic push")
+_Pragma("GCC diagnostic ignored \"-Wcast-qual\"")
+#endif // endif
+       for_each_ndev(cfg, iter, next) {
+               if (iter->ndev) {
+                       if (wl_get_drv_status(cfg, CONNECTED, iter->ndev)) {
+                               if (wldev_iovar_getint(iter->ndev, "chanspec",
+                                       (s32 *)&chanspec) == BCME_OK) {
+                                       channel = wf_chspec_ctlchan(
+                                               wl_chspec_driver_to_host(chanspec));
+                                       band = (channel <= CH_MAX_2G_CHANNEL) ?
+                                               IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ;
+                               }
+                               if ((!pre_channel && channel)) {
+                                       pre_band = band;
+                                       pre_channel = channel;
+                               } else if (pre_channel) {
+                                       if ((pre_band == band) && (pre_channel == channel)) {
+                                               cmode = CONCURRENCY_SCC_MODE;
+                                               goto exit;
+                                       } else if ((pre_band == band) && (pre_channel != channel)) {
+                                               cmode = CONCURRENCY_VSDB_MODE;
+                                               goto exit;
+                                       } else if (pre_band != band) {
+                                               cmode = CONCURRENCY_RSDB_MODE;
+                                               goto exit;
+                                       }
+                               }
+                       }
+               }
+       }
+#if defined(STRICT_GCC_WARNINGS) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == \
+       4 && __GNUC_MINOR__ >= 6))
+_Pragma("GCC diagnostic pop")
+#endif // endif
+exit:
+       return cmode;
+}
 s32 wl_update_wiphybands(struct bcm_cfg80211 *cfg, bool notify)
 {
        s32 err;
 s32 wl_update_wiphybands(struct bcm_cfg80211 *cfg, bool notify)
 {
        s32 err;
@@ -19471,10 +19699,36 @@ _Pragma("GCC diagnostic ignored \"-Wcast-qual\"")
                if (iter->ndev == NULL)
                        continue;
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0))
                if (iter->ndev == NULL)
                        continue;
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0))
+               WL_INFORM_MEM(("wl_cfg80211_down. connection state bit status: [%u:%u:%u:%u]\n",
+                       wl_get_drv_status(cfg, CONNECTING, ndev),
+                       wl_get_drv_status(cfg, CONNECTED, ndev),
+                       wl_get_drv_status(cfg, DISCONNECTING, ndev),
+                       wl_get_drv_status(cfg, NESTED_CONNECT, ndev)));
+
                if ((iter->ndev->ieee80211_ptr->iftype == NL80211_IFTYPE_STATION) &&
                        wl_get_drv_status(cfg, CONNECTED, iter->ndev)) {
                        CFG80211_DISCONNECTED(iter->ndev, 0, NULL, 0, false, GFP_KERNEL);
                }
                if ((iter->ndev->ieee80211_ptr->iftype == NL80211_IFTYPE_STATION) &&
                        wl_get_drv_status(cfg, CONNECTED, iter->ndev)) {
                        CFG80211_DISCONNECTED(iter->ndev, 0, NULL, 0, false, GFP_KERNEL);
                }
+
+               if ((iter->ndev->ieee80211_ptr->iftype == NL80211_IFTYPE_STATION) &&
+                       wl_get_drv_status(cfg, CONNECTING, iter->ndev)) {
+                       u8 *latest_bssid = wl_read_prof(cfg, ndev, WL_PROF_LATEST_BSSID);
+                       struct wiphy *wiphy = bcmcfg_to_wiphy(cfg);
+                       struct wireless_dev *wdev = ndev->ieee80211_ptr;
+                       struct cfg80211_bss *bss = CFG80211_GET_BSS(wiphy, NULL, latest_bssid,
+                               wdev->ssid, wdev->ssid_len);
+
+                       prhex("bssid:", (uchar *)latest_bssid, ETHER_ADDR_LEN);
+                       prhex("ssid:", (uchar *)wdev->ssid, wdev->ssid_len);
+                       if (!bss) {
+                               WL_DBG(("null bss\n"));
+                       }
+
+                       CFG80211_CONNECT_RESULT(ndev,
+                                       latest_bssid, bss, NULL, 0, NULL, 0,
+                                       WLAN_STATUS_UNSPECIFIED_FAILURE,
+                                       GFP_KERNEL);
+               }
 #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) */
                wl_clr_drv_status(cfg, READY, iter->ndev);
                wl_clr_drv_status(cfg, SCANNING, iter->ndev);
 #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)) */
                wl_clr_drv_status(cfg, READY, iter->ndev);
                wl_clr_drv_status(cfg, SCANNING, iter->ndev);
@@ -19767,6 +20021,9 @@ static void *wl_read_prof(struct bcm_cfg80211 *cfg, struct net_device *ndev, s32
        case WL_PROF_CHAN:
                rptr = &profile->channel;
                break;
        case WL_PROF_CHAN:
                rptr = &profile->channel;
                break;
+       case WL_PROF_LATEST_BSSID:
+               rptr = profile->latest_bssid;
+               break;
        }
        spin_unlock_irqrestore(&cfg->cfgdrv_lock, flags);
        if (!rptr)
        }
        spin_unlock_irqrestore(&cfg->cfgdrv_lock, flags);
        if (!rptr)
@@ -19815,6 +20072,13 @@ wl_update_prof(struct bcm_cfg80211 *cfg, struct net_device *ndev,
        case WL_PROF_CHAN:
                profile->channel = *(const u32*)data;
                break;
        case WL_PROF_CHAN:
                profile->channel = *(const u32*)data;
                break;
+       case WL_PROF_LATEST_BSSID:
+               if (data) {
+                       memcpy(profile->latest_bssid, data, ETHER_ADDR_LEN);
+               } else {
+                       memset(profile->latest_bssid, 0, ETHER_ADDR_LEN);
+               }
+               break;
        default:
                err = -EOPNOTSUPP;
                break;
        default:
                err = -EOPNOTSUPP;
                break;
@@ -22267,6 +22531,11 @@ wl_cfg80211_set_mgmt_vndr_ies(struct bcm_cfg80211 *cfg, bcm_struct_cfgdev *cfgde
        struct net_info *netinfo;
        struct wireless_dev *wdev;
 
        struct net_info *netinfo;
        struct wireless_dev *wdev;
 
+       if (!cfgdev) {
+               WL_ERR(("cfgdev is NULL\n"));
+               return -EINVAL;
+       }
+
        ndev = cfgdev_to_wlc_ndev(cfgdev, cfg);
        wdev = cfgdev_to_wdev(cfgdev);
 
        ndev = cfgdev_to_wlc_ndev(cfgdev, cfg);
        wdev = cfgdev_to_wdev(cfgdev);
 
@@ -22768,9 +23037,8 @@ void wl_cfg80211_del_p2p_wdev(struct net_device *dev)
                wdev = cfg->p2p_wdev;
        }
 
                wdev = cfg->p2p_wdev;
        }
 
-       if (wdev && cfg->down_disc_if) {
+       if (wdev) {
                wl_cfgp2p_del_p2p_disc_if(wdev, cfg);
                wl_cfgp2p_del_p2p_disc_if(wdev, cfg);
-               cfg->down_disc_if = FALSE;
        }
 }
 #endif /* WL_CFG80211_P2P_DEV_IF */
        }
 }
 #endif /* WL_CFG80211_P2P_DEV_IF */
@@ -24738,175 +25006,6 @@ wl_flush_fw_log_buffer(struct net_device *dev, uint32 logset_mask)
 }
 #endif /* DHD_LOG_DUMP */
 
 }
 #endif /* DHD_LOG_DUMP */
 
-#ifdef WL_CFGVENDOR_SEND_HANG_EVENT
-static void
-wl_cfgvendor_send_hang_event(struct net_device *dev, u16 reason, char *string, int hang_info_cnt)
-{
-       struct bcm_cfg80211 *cfg = wl_get_cfg(dev);
-       struct wiphy *wiphy;
-       char *hang_info;
-       int len = 0;
-       int bytes_written;
-       uint32 dumy_data = 0;
-       int reason_hang_info = 0;
-       int cnt = 0;
-       dhd_pub_t *dhd;
-       int hang_reason_mismatch = FALSE;
-
-       if (!cfg || !cfg->wdev) {
-               WL_ERR(("cfg=%p wdev=%p\n", cfg, (cfg ? cfg->wdev : NULL)));
-               return;
-       }
-
-       wiphy = cfg->wdev->wiphy;
-
-       if (!wiphy) {
-               WL_ERR(("wiphy is NULL\n"));
-               return;
-       }
-
-       hang_info = MALLOCZ(cfg->osh, VENDOR_SEND_HANG_EXT_INFO_LEN);
-       if (hang_info == NULL) {
-               WL_ERR(("alloc hang_info failed\n"));
-               return;
-       }
-
-       dhd = (dhd_pub_t *)(cfg->pub);
-
-       sscanf(string, "%d", &reason_hang_info);
-       bytes_written = 0;
-       len = VENDOR_SEND_HANG_EXT_INFO_LEN - bytes_written;
-       if (strlen(string) == 0 || (reason_hang_info != reason)) {
-               WL_ERR(("hang reason mismatch: string len %d reason_hang_info %d\n",
-                       (int)strlen(string), reason_hang_info));
-               hang_reason_mismatch = TRUE;
-               if (dhd) {
-                       get_debug_dump_time(dhd->debug_dump_time_hang_str);
-                       copy_debug_dump_time(dhd->debug_dump_time_str,
-                                       dhd->debug_dump_time_hang_str);
-               }
-               bytes_written += scnprintf(&hang_info[bytes_written], len,
-                               "%d %d %s %08x %08x %08x %08x %08x %08x %08x",
-                               reason, VENDOR_SEND_HANG_EXT_INFO_VER,
-                               dhd->debug_dump_time_hang_str,
-                               0, 0, 0, 0, 0, 0, 0);
-               if (dhd) {
-                       clear_debug_dump_time(dhd->debug_dump_time_hang_str);
-               }
-       } else {
-               bytes_written += scnprintf(&hang_info[bytes_written], len, "%s", string);
-       }
-
-       WL_ERR(("hang reason: %d info cnt: %d\n", reason, hang_info_cnt));
-
-       if (hang_reason_mismatch == FALSE) {
-               cnt = hang_info_cnt;
-       } else {
-               cnt = HANG_FIELD_MISMATCH_CNT;
-       }
-
-       while (cnt < HANG_FIELD_CNT_MAX) {
-               len = VENDOR_SEND_HANG_EXT_INFO_LEN - bytes_written;
-               bytes_written += scnprintf(&hang_info[bytes_written], len,
-                               "%c%08x", HANG_RAW_DEL, dumy_data);
-               cnt++;
-       }
-
-       WL_ERR(("hang info cnt: %d len: %d\n", cnt, (int)strlen(hang_info)));
-       WL_ERR(("hang info data: %s\n", hang_info));
-
-       wl_cfgvendor_send_async_event(wiphy,
-                       bcmcfg_to_prmry_ndev(cfg), BRCM_VENDOR_EVENT_HANGED,
-                       hang_info, (int)strlen(hang_info));
-
-       memset(string, 0, VENDOR_SEND_HANG_EXT_INFO_LEN);
-
-       if (hang_info) {
-               MFREE(cfg->osh, hang_info, VENDOR_SEND_HANG_EXT_INFO_LEN);
-       }
-
-#ifdef DHD_LOG_DUMP
-       if (dhd->debug_dump_time_hang_str) {
-               dhd_logdump_cookie_save(dhd, dhd->debug_dump_time_hang_str, "HANG");
-       }
-#endif /* DHD_LOG_DUMP */
-
-       if (dhd) {
-               clear_debug_dump_time(dhd->debug_dump_time_str);
-       }
-}
-
-void
-wl_copy_hang_info_if_falure(struct net_device *dev, u16 reason, s32 ret)
-{
-       struct bcm_cfg80211 *cfg = NULL;
-       dhd_pub_t *dhd;
-       s32 err = 0;
-       char ioctl_buf[WLC_IOCTL_SMLEN];
-       memuse_info_t mu;
-       int bytes_written = 0;
-       int remain_len = 0;
-
-       if (!dev) {
-               WL_ERR(("dev is null"));
-               return;
-
-       }
-
-       cfg = wl_get_cfg(dev);
-       if (!cfg) {
-               WL_ERR(("dev=%p cfg=%p\n", dev, cfg));
-               return;
-       }
-
-       dhd = (dhd_pub_t *)(cfg->pub);
-
-       if (!dhd || !dhd->hang_info) {
-               WL_ERR(("%s dhd=%p hang_info=%p\n", __FUNCTION__,
-                       dhd, (dhd ? dhd->hang_info : NULL)));
-               return;
-       }
-
-       err = wldev_iovar_getbuf_bsscfg(dev, "memuse",
-                       NULL, 0, ioctl_buf, WLC_IOCTL_SMLEN, 0, NULL);
-       if (unlikely(err)) {
-               WL_ERR(("error (%d)\n", err));
-               return;
-       }
-
-       memcpy(&mu, ioctl_buf, sizeof(memuse_info_t));
-
-       if (mu.len >= sizeof(memuse_info_t)) {
-               WL_ERR(("Heap Total: %d(%dK)\n", mu.arena_size, KB(mu.arena_size)));
-               WL_ERR(("Free: %d(%dK), LWM: %d(%dK)\n",
-                       mu.arena_free, KB(mu.arena_free),
-                       mu.free_lwm, KB(mu.free_lwm)));
-               WL_ERR(("In use: %d(%dK), HWM: %d(%dK)\n",
-                       mu.inuse_size, KB(mu.inuse_size),
-                       mu.inuse_hwm, KB(mu.inuse_hwm)));
-               WL_ERR(("Malloc failure count: %d\n", mu.mf_count));
-       }
-
-       memset(dhd->hang_info, 0, VENDOR_SEND_HANG_EXT_INFO_LEN);
-       remain_len = VENDOR_SEND_HANG_EXT_INFO_LEN - bytes_written;
-
-       get_debug_dump_time(dhd->debug_dump_time_hang_str);
-       copy_debug_dump_time(dhd->debug_dump_time_str, dhd->debug_dump_time_hang_str);
-
-       bytes_written += scnprintf(&dhd->hang_info[bytes_written], remain_len,
-                       "%d %d %s %d %d %d %d %d %08x %08x",
-                       reason, VENDOR_SEND_HANG_EXT_INFO_VER,
-                       dhd->debug_dump_time_hang_str,
-                       ret, mu.arena_size, mu.arena_free, mu.inuse_size, mu.mf_count, 0, 0);
-
-       dhd->hang_info_cnt = HANG_FIELD_IF_FAILURE_CNT;
-
-       clear_debug_dump_time(dhd->debug_dump_time_hang_str);
-
-       return;
-}
-#endif /* WL_CFGVENDOR_SEND_HANG_EVENT */
-
 s32
 wl_cfg80211_set_dbg_verbose(struct net_device *ndev, u32 level)
 {
 s32
 wl_cfg80211_set_dbg_verbose(struct net_device *ndev, u32 level)
 {
index c35541fd8647fd3137e9f15f98add6509f9d8d47..6382384acf588fa24cdb2b18d2903a959902e2ae 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: wl_cfg80211.h 796900 2018-12-27 09:37:28Z $
+ * $Id: wl_cfg80211.h 819372 2019-05-13 06:41:30Z $
  */
 
 /**
  */
 
 /**
@@ -476,7 +476,8 @@ enum wl_prof_list {
        WL_PROF_BSSID,
        WL_PROF_ACT,
        WL_PROF_BEACONINT,
        WL_PROF_BSSID,
        WL_PROF_ACT,
        WL_PROF_BEACONINT,
-       WL_PROF_DTIMPERIOD
+       WL_PROF_DTIMPERIOD,
+       WL_PROF_LATEST_BSSID
 };
 
 /* donlge escan state */
 };
 
 /* donlge escan state */
@@ -617,6 +618,7 @@ struct wl_profile {
        u16 beacon_interval;
        u8 dtim_period;
        bool active;
        u16 beacon_interval;
        u8 dtim_period;
        bool active;
+       u8 latest_bssid[ETHER_ADDR_LEN];
 };
 
 struct wl_wps_ie {
 };
 
 struct wl_wps_ie {
@@ -660,6 +662,54 @@ struct net_info {
        struct list_head list; /* list of all net_info structure */
 };
 
        struct list_head list; /* list of all net_info structure */
 };
 
+#ifdef WL_BCNRECV
+/* PERIODIC Beacon receive for detecting FakeAPs */
+typedef struct wl_bcnrecv_result {
+       uint8      SSID[DOT11_MAX_SSID_LEN];    /**< SSID String */
+       struct ether_addr BSSID;                /**< Network BSSID */
+       uint8      channel;                     /**< Channel */
+       uint16     beacon_interval;
+       uint32     timestamp[2];                /**< Beacon Timestamp */
+       uint64     system_time;
+} wl_bcnrecv_result_t;
+
+typedef struct wl_bcnrecv_info {
+       uint bcnrecv_state;             /* TO know the fakeap state */
+} wl_bcnrecv_info_t;
+
+typedef enum wl_bcnrecv_state {
+       BEACON_RECV_IDLE = 0,
+       BEACON_RECV_STARTED,
+       BEACON_RECV_STOPPED,
+       BEACON_RECV_SUSPENDED
+} wl_bcnrecv_state_t;
+
+typedef enum wl_bcnrecv_reason {
+       WL_BCNRECV_INVALID = 0,
+       WL_BCNRECV_USER_TRIGGER,
+       WL_BCNRECV_SUSPEND,
+       WL_BCNRECV_SCANBUSY,
+       WL_BCNRECV_CONCURRENCY,
+       WL_BCNRECV_LISTENBUSY,
+       WL_BCNRECV_ROAMABORT,
+       WL_BCNRECV_HANG
+} wl_bcnrecv_reason_t;
+
+typedef enum wl_bcnrecv_status {
+       WL_BCNRECV_STARTED = 0,
+       WL_BCNRECV_STOPPED,
+       WL_BCNRECV_ABORTED,
+       WL_BCNRECV_SUSPENDED,
+       WL_BCNRECV_MAX
+} wl_bcnrecv_status_t;
+
+typedef enum wl_bcnrecv_attr_type {
+       BCNRECV_ATTR_STATUS = 1,
+       BCNRECV_ATTR_REASON,
+       BCNRECV_ATTR_BCNINFO
+} wl_bcnrecv_attr_type_t;
+#endif /* WL_BCNRECV */
+
 /* association inform */
 #define MAX_REQ_LINE 1024u
 struct wl_connect_info {
 /* association inform */
 #define MAX_REQ_LINE 1024u
 struct wl_connect_info {
@@ -955,7 +1005,7 @@ struct bcm_cfg80211 {
        struct completion wait_next_af;
        struct mutex usr_sync;  /* maily for up/down synchronization */
        struct mutex if_sync;   /* maily for iface op synchronization */
        struct completion wait_next_af;
        struct mutex usr_sync;  /* maily for up/down synchronization */
        struct mutex if_sync;   /* maily for iface op synchronization */
-       struct mutex scan_complete;     /* serialize scan_complete call */
+       struct mutex scan_sync; /* scan sync from different scan contexts  */
        struct wl_scan_results *bss_list;
        struct wl_scan_results *scan_results;
 
        struct wl_scan_results *bss_list;
        struct wl_scan_results *scan_results;
 
@@ -1089,9 +1139,6 @@ struct bcm_cfg80211 {
        nan_ranging_inst_t nan_ranging_info[NAN_MAX_RANGING_INST];
 #endif /* WL_NAN_DISC_CACHE  */
 #endif /* WL_NAN */
        nan_ranging_inst_t nan_ranging_info[NAN_MAX_RANGING_INST];
 #endif /* WL_NAN_DISC_CACHE  */
 #endif /* WL_NAN */
-#ifdef WL_CFG80211_P2P_DEV_IF
-       bool down_disc_if;
-#endif /* WL_CFG80211_P2P_DEV_IF */
 #ifdef P2PLISTEN_AP_SAMECHN
        bool p2p_resp_apchn_status;
 #endif /* P2PLISTEN_AP_SAMECHN */
 #ifdef P2PLISTEN_AP_SAMECHN
        bool p2p_resp_apchn_status;
 #endif /* P2PLISTEN_AP_SAMECHN */
@@ -1175,6 +1222,12 @@ struct bcm_cfg80211 {
 #ifdef SUPPORT_CUSTOM_SET_CAC
        int enable_cac;
 #endif /* SUPPORT_CUSTOM_SET_CAC */
 #ifdef SUPPORT_CUSTOM_SET_CAC
        int enable_cac;
 #endif /* SUPPORT_CUSTOM_SET_CAC */
+
+#ifdef WL_BCNRECV
+       /* structure used for fake ap detection info */
+       struct mutex bcn_sync;  /* mainly for bcn resume/suspend synchronization */
+       wl_bcnrecv_info_t bcnrecv_info;
+#endif /* WL_BCNRECV */
 };
 
 #define WL_STATIC_IFIDX        (DHD_MAX_IFS + DHD_MAX_STATIC_IFS - 1)
 };
 
 #define WL_STATIC_IFIDX        (DHD_MAX_IFS + DHD_MAX_STATIC_IFS - 1)
@@ -1193,8 +1246,27 @@ enum static_ndev_states {
 #define IS_CFG80211_STATIC_IF_NAME(cfg, name) \
        ((cfg && !strcmp(cfg->static_ndev->name, name)))
 
 #define IS_CFG80211_STATIC_IF_NAME(cfg, name) \
        ((cfg && !strcmp(cfg->static_ndev->name, name)))
 
+typedef enum wl_concurrency_mode {
+       CONCURRENCY_MODE_NONE = 0,
+       CONCURRENCY_SCC_MODE,
+       CONCURRENCY_VSDB_MODE,
+       CONCURRENCY_RSDB_MODE
+} wl_concurrency_mode_t;
+
 s32 wl_iftype_to_mode(wl_iftype_t iftype);
 
 s32 wl_iftype_to_mode(wl_iftype_t iftype);
 
+typedef struct wips_detect_inform {
+       uint16  misdeauth;              /* wrong deauth count every 1sec */
+       int16   cur_bsscfg_rssi;        /* current bss rssi */
+       int16   deauth_rssi;            /* wrong deauth pkt rssi */
+       struct  ether_addr ea;          /* MAC address for misdeauth */
+       uint32  timestamp;              /* start timestamp for misdeauth */
+} wips_detect_inform_t;
+
+enum {
+       TAG_DEAUTH_TLV_WIPS = 0 /* Deauth info for WIPS */
+};
+
 #if defined(STRICT_GCC_WARNINGS) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == \
        4 && __GNUC_MINOR__ >= 6))
 #define GCC_DIAGNOSTIC_PUSH() \
 #if defined(STRICT_GCC_WARNINGS) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == \
        4 && __GNUC_MINOR__ >= 6))
 #define GCC_DIAGNOSTIC_PUSH() \
@@ -2167,4 +2239,5 @@ extern bool wl_cfg80211_check_indoor_channels(struct net_device *ndev, int chann
 extern int wl_cfg80211_enable_cac(struct net_device *dev, int enable);
 extern void wl_cfg80211_set_cac(struct bcm_cfg80211 *cfg, int enable);
 #endif /* SUPPORT_SET_CAC */
 extern int wl_cfg80211_enable_cac(struct net_device *dev, int enable);
 extern void wl_cfg80211_set_cac(struct bcm_cfg80211 *cfg, int enable);
 #endif /* SUPPORT_SET_CAC */
+extern int wl_cfg80211_get_concurrency_mode(struct bcm_cfg80211 *cfg);
 #endif /* _wl_cfg80211_h_ */
 #endif /* _wl_cfg80211_h_ */
index dba9a70fc01677c6587415d557f1e5fe49cd1597..cf8ec965eab9893172fac428ce12267b29c2c808 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: wl_cfgp2p.c 783638 2018-10-08 02:24:49Z $
+ * $Id: wl_cfgp2p.c 819437 2019-05-13 12:34:56Z $
  *
  */
 #include <typedefs.h>
  *
  */
 #include <typedefs.h>
@@ -2561,6 +2561,10 @@ wl_cfgp2p_stop_p2p_device(struct wiphy *wiphy, struct wireless_dev *wdev)
        if (!cfg->p2p)
                return;
 
        if (!cfg->p2p)
                return;
 
+#ifdef P2P_LISTEN_OFFLOADING
+       wl_cfg80211_p2plo_deinit(cfg);
+#endif /* P2P_LISTEN_OFFLOADING */
+
        /* Cancel any on-going listen */
        wl_cfgp2p_cancel_listen(cfg, bcmcfg_to_prmry_ndev(cfg), wdev, TRUE);
 
        /* Cancel any on-going listen */
        wl_cfgp2p_cancel_listen(cfg, bcmcfg_to_prmry_ndev(cfg), wdev, TRUE);
 
@@ -2582,12 +2586,17 @@ wl_cfgp2p_del_p2p_disc_if(struct wireless_dev *wdev, struct bcm_cfg80211 *cfg)
        bool rollback_lock = false;
 
        if (!wdev || !cfg) {
        bool rollback_lock = false;
 
        if (!wdev || !cfg) {
-               WL_ERR(("null ptr. wdev:%p cfg:%p\n", wdev, cfg));
+               WL_ERR(("wdev or cfg is NULL\n"));
                return -EINVAL;
        }
 
        WL_INFORM(("Enter\n"));
 
                return -EINVAL;
        }
 
        WL_INFORM(("Enter\n"));
 
+       if (!cfg->p2p_wdev) {
+               WL_ERR(("Already deleted p2p_wdev\n"));
+               return -EINVAL;
+       }
+
        if (!rtnl_is_locked()) {
                rtnl_lock();
                rollback_lock = true;
        if (!rtnl_is_locked()) {
                rtnl_lock();
                rollback_lock = true;
index dd915b9569b91d10c9ae26a380c83c514d9e5440..96bfeeac27790f75a0542b31f00eed3de7a6a880 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: wl_cfgvendor.c 797501 2019-01-02 04:57:12Z $
+ * $Id: wl_cfgvendor.c 818247 2019-05-07 04:15:13Z $
  */
 
 /*
  */
 
 /*
@@ -267,25 +267,31 @@ static int
 wl_cfgvendor_set_rand_mac_oui(struct wiphy *wiphy,
        struct wireless_dev *wdev, const void  *data, int len)
 {
 wl_cfgvendor_set_rand_mac_oui(struct wiphy *wiphy,
        struct wireless_dev *wdev, const void  *data, int len)
 {
-       int err = 0;
+       int err = -EINVAL;
        struct bcm_cfg80211 *cfg = wiphy_priv(wiphy);
        int type;
 
        struct bcm_cfg80211 *cfg = wiphy_priv(wiphy);
        int type;
 
+       if (!data) {
+               WL_ERR(("data is not available\n"));
+               goto exit;
+       }
+
+       if (len <= 0) {
+               WL_ERR(("invalid len %d\n", len));
+               goto exit;
+       }
+
        type = nla_type(data);
 
        if (type == ANDR_WIFI_ATTRIBUTE_RANDOM_MAC_OUI) {
                if (nla_len(data) != DOT11_OUI_LEN) {
                        WL_ERR(("nla_len not matched.\n"));
        type = nla_type(data);
 
        if (type == ANDR_WIFI_ATTRIBUTE_RANDOM_MAC_OUI) {
                if (nla_len(data) != DOT11_OUI_LEN) {
                        WL_ERR(("nla_len not matched.\n"));
-                       err = -EINVAL;
                        goto exit;
                }
                err = dhd_dev_cfg_rand_mac_oui(bcmcfg_to_prmry_ndev(cfg), nla_data(data));
 
                if (unlikely(err))
                        WL_ERR(("Bad OUI, could not set:%d \n", err));
                        goto exit;
                }
                err = dhd_dev_cfg_rand_mac_oui(bcmcfg_to_prmry_ndev(cfg), nla_data(data));
 
                if (unlikely(err))
                        WL_ERR(("Bad OUI, could not set:%d \n", err));
-
-       } else {
-               err = -EINVAL;
        }
 exit:
        return err;
        }
 exit:
        return err;
@@ -295,18 +301,27 @@ static int
 wl_cfgvendor_set_nodfs_flag(struct wiphy *wiphy,
        struct wireless_dev *wdev, const void *data, int len)
 {
 wl_cfgvendor_set_nodfs_flag(struct wiphy *wiphy,
        struct wireless_dev *wdev, const void *data, int len)
 {
-       int err = 0;
+       int err = -EINVAL;
        struct bcm_cfg80211 *cfg = wiphy_priv(wiphy);
        int type;
        u32 nodfs;
 
        struct bcm_cfg80211 *cfg = wiphy_priv(wiphy);
        int type;
        u32 nodfs;
 
+       if (!data) {
+               WL_ERR(("data is not available\n"));
+               return -EINVAL;
+       }
+
+       if (len <= 0) {
+               WL_ERR(("invalid len %d\n", len));
+               return -EINVAL;
+       }
+
        type = nla_type(data);
        if (type == ANDR_WIFI_ATTRIBUTE_NODFS_SET) {
                nodfs = nla_get_u32(data);
                err = dhd_dev_set_nodfs(bcmcfg_to_prmry_ndev(cfg), nodfs);
        type = nla_type(data);
        if (type == ANDR_WIFI_ATTRIBUTE_NODFS_SET) {
                nodfs = nla_get_u32(data);
                err = dhd_dev_set_nodfs(bcmcfg_to_prmry_ndev(cfg), nodfs);
-       } else {
-               err = -1;
        }
        }
+
        return err;
 }
 #endif /* CUSTOM_FORCE_NODFS_FLAG */
        return err;
 }
 #endif /* CUSTOM_FORCE_NODFS_FLAG */
@@ -570,6 +585,16 @@ wl_cfgvendor_enable_full_scan_result(struct wiphy *wiphy,
        int type;
        bool real_time = FALSE;
 
        int type;
        bool real_time = FALSE;
 
+       if (!data) {
+               WL_ERR(("data is not available\n"));
+               return -EINVAL;
+       }
+
+       if (len <= 0) {
+               WL_ERR(("invalid len %d\n", len));
+               return -EINVAL;
+       }
+
        type = nla_type(data);
 
        if (type == GSCAN_ATTRIBUTE_ENABLE_FULL_SCAN_RESULTS) {
        type = nla_type(data);
 
        if (type == GSCAN_ATTRIBUTE_ENABLE_FULL_SCAN_RESULTS) {
@@ -1101,6 +1126,16 @@ wl_cfgvendor_gscan_get_channel_list(struct wiphy *wiphy,
        uint32 reply_len = 0, num_channels, mem_needed;
        struct sk_buff *skb;
 
        uint32 reply_len = 0, num_channels, mem_needed;
        struct sk_buff *skb;
 
+       if (!data) {
+               WL_ERR(("data is not available\n"));
+               return -EINVAL;
+       }
+
+       if (len <= 0) {
+               WL_ERR(("invalid len %d\n", len));
+               return -EINVAL;
+       }
+
        type = nla_type(data);
 
        if (type == GSCAN_ATTRIBUTE_BAND) {
        type = nla_type(data);
 
        if (type == GSCAN_ATTRIBUTE_BAND) {
@@ -1184,6 +1219,12 @@ wl_cfgvendor_set_tcpack_sup_mode(struct wiphy *wiphy,
        struct net_device *ndev = wdev_to_wlc_ndev(wdev, cfg);
        uint8 enable = 0;
 
        struct net_device *ndev = wdev_to_wlc_ndev(wdev, cfg);
        uint8 enable = 0;
 
+       if (!data) {
+               WL_ERR(("data is not available\n"));
+               err = BCME_BADARG;
+               goto exit;
+       }
+
        if (len <= 0) {
                WL_ERR(("Length of the nlattr is not valid len : %d\n", len));
                err = BCME_BADARG;
        if (len <= 0) {
                WL_ERR(("Length of the nlattr is not valid len : %d\n", len));
                err = BCME_BADARG;
@@ -1761,6 +1802,16 @@ static int wl_cfgvendor_enable_lazy_roam(struct wiphy *wiphy,
        int type;
        uint32 lazy_roam_enable_flag;
 
        int type;
        uint32 lazy_roam_enable_flag;
 
+       if (!data) {
+               WL_ERR(("data is not available\n"));
+               return -EINVAL;
+       }
+
+       if (len <= 0) {
+               WL_ERR(("invaild len %d\n", len));
+               return -EINVAL;
+       }
+
        type = nla_type(data);
 
        if (type == GSCAN_ATTRIBUTE_LAZY_ROAM_ENABLE) {
        type = nla_type(data);
 
        if (type == GSCAN_ATTRIBUTE_LAZY_ROAM_ENABLE) {
@@ -1771,6 +1822,7 @@ static int wl_cfgvendor_enable_lazy_roam(struct wiphy *wiphy,
                if (unlikely(err))
                        WL_ERR(("Could not enable lazy roam:%d \n", err));
        }
                if (unlikely(err))
                        WL_ERR(("Could not enable lazy roam:%d \n", err));
        }
+
        return err;
 }
 
        return err;
 }
 
@@ -2216,6 +2268,16 @@ wl_cfgvendor_set_fw_roaming_state(struct wiphy *wiphy,
        int type;
        int err = 0;
 
        int type;
        int err = 0;
 
+       if (!data) {
+               WL_ERR(("data is not available\n"));
+               return -EINVAL;
+       }
+
+       if (len <= 0) {
+               WL_ERR(("invalid len %d\n", len));
+               return -EINVAL;
+       }
+
        /* Get the requested fw roaming state */
        type = nla_type(data);
        if (type != GSCAN_ATTRIBUTE_ROAM_STATE_SET) {
        /* Get the requested fw roaming state */
        type = nla_type(data);
        if (type != GSCAN_ATTRIBUTE_ROAM_STATE_SET) {
@@ -2272,8 +2334,6 @@ wl_cfgvendor_priv_string_handler(struct wiphy *wiphy,
        struct sk_buff *reply;
        dhd_pub_t *dhdp = wl_cfg80211_get_dhdp(wdev->netdev);
 
        struct sk_buff *reply;
        dhd_pub_t *dhdp = wl_cfg80211_get_dhdp(wdev->netdev);
 
-       WL_DBG(("entry: cmd = %d\n", nlioc->cmd));
-
        /* send to dongle only if we are not waiting for reload already */
        if (dhdp && dhdp->hang_was_sent) {
                WL_INFORM(("Bus down. HANG was sent up earlier\n"));
        /* send to dongle only if we are not waiting for reload already */
        if (dhdp && dhdp->hang_was_sent) {
                WL_INFORM(("Bus down. HANG was sent up earlier\n"));
@@ -2282,6 +2342,18 @@ wl_cfgvendor_priv_string_handler(struct wiphy *wiphy,
                return OSL_ERROR(BCME_DONGLE_DOWN);
        }
 
                return OSL_ERROR(BCME_DONGLE_DOWN);
        }
 
+       if (!data) {
+               WL_ERR(("data is not available\n"));
+               return BCME_BADARG;
+       }
+
+       if (len <= 0) {
+               WL_ERR(("invalid len %d\n", len));
+               return BCME_BADARG;
+       }
+
+       WL_DBG(("entry: cmd = %d\n", nlioc->cmd));
+
        if (nlioc->offset != sizeof(struct bcm_nlmsg_hdr) ||
                len <= sizeof(struct bcm_nlmsg_hdr)) {
                WL_ERR(("invalid offset %d\n", nlioc->offset));
        if (nlioc->offset != sizeof(struct bcm_nlmsg_hdr) ||
                len <= sizeof(struct bcm_nlmsg_hdr)) {
                WL_ERR(("invalid offset %d\n", nlioc->offset));
@@ -7151,7 +7223,9 @@ static const struct  nl80211_vendor_cmd_info wl_vendor_events [] = {
                { OUI_GOOGLE, GOOGLE_NAN_EVENT_SUBSCRIBE_UNMATCH},
                { OUI_GOOGLE, GOOGLE_NAN_EVENT_UNKNOWN},
                { OUI_GOOGLE, GOOGLE_ROAM_EVENT_START},
                { OUI_GOOGLE, GOOGLE_NAN_EVENT_SUBSCRIBE_UNMATCH},
                { OUI_GOOGLE, GOOGLE_NAN_EVENT_UNKNOWN},
                { OUI_GOOGLE, GOOGLE_ROAM_EVENT_START},
-               { OUI_BRCM, BRCM_VENDOR_EVENT_HANGED}
+               { OUI_BRCM, BRCM_VENDOR_EVENT_HANGED},
+               { OUI_BRCM, BRCM_VENDOR_EVENT_SAE_KEY},
+               { OUI_BRCM, BRCM_VENDOR_EVENT_BEACON_RECV}
 };
 
 int wl_cfgvendor_attach(struct wiphy *wiphy, dhd_pub_t *dhd)
 };
 
 int wl_cfgvendor_attach(struct wiphy *wiphy, dhd_pub_t *dhd)
@@ -7188,3 +7262,178 @@ int wl_cfgvendor_detach(struct wiphy *wiphy)
        return 0;
 }
 #endif /* (LINUX_VERSION_CODE > KERNEL_VERSION(3, 13, 0)) || defined(WL_VENDOR_EXT_SUPPORT) */
        return 0;
 }
 #endif /* (LINUX_VERSION_CODE > KERNEL_VERSION(3, 13, 0)) || defined(WL_VENDOR_EXT_SUPPORT) */
+
+#ifdef WL_CFGVENDOR_SEND_HANG_EVENT
+void
+wl_cfgvendor_send_hang_event(struct net_device *dev, u16 reason, char *string, int hang_info_cnt)
+{
+       struct bcm_cfg80211 *cfg = wl_get_cfg(dev);
+       struct wiphy *wiphy;
+       char *hang_info;
+       int len = 0;
+       int bytes_written;
+       uint32 dumy_data = 0;
+       int reason_hang_info = 0;
+       int cnt = 0;
+       dhd_pub_t *dhd;
+       int hang_reason_mismatch = FALSE;
+
+       if (!cfg || !cfg->wdev) {
+               WL_ERR(("cfg=%p wdev=%p\n", cfg, (cfg ? cfg->wdev : NULL)));
+               return;
+       }
+
+       wiphy = cfg->wdev->wiphy;
+
+       if (!wiphy) {
+               WL_ERR(("wiphy is NULL\n"));
+               return;
+       }
+
+       hang_info = MALLOCZ(cfg->osh, VENDOR_SEND_HANG_EXT_INFO_LEN);
+       if (hang_info == NULL) {
+               WL_ERR(("alloc hang_info failed\n"));
+               return;
+       }
+
+       dhd = (dhd_pub_t *)(cfg->pub);
+
+#ifdef WL_BCNRECV
+       /* check fakeapscan in progress then stop scan */
+       if (cfg->bcnrecv_info.bcnrecv_state == BEACON_RECV_STARTED) {
+               wl_android_bcnrecv_stop(dev, WL_BCNRECV_HANG);
+       }
+#endif /* WL_BCNRECV */
+       sscanf(string, "%d", &reason_hang_info);
+       bytes_written = 0;
+       len = VENDOR_SEND_HANG_EXT_INFO_LEN - bytes_written;
+       if (strlen(string) == 0 || (reason_hang_info != reason)) {
+               WL_ERR(("hang reason mismatch: string len %d reason_hang_info %d\n",
+                       (int)strlen(string), reason_hang_info));
+               hang_reason_mismatch = TRUE;
+               if (dhd) {
+                       get_debug_dump_time(dhd->debug_dump_time_hang_str);
+                       copy_debug_dump_time(dhd->debug_dump_time_str,
+                                       dhd->debug_dump_time_hang_str);
+               }
+               bytes_written += scnprintf(&hang_info[bytes_written], len,
+                               "%d %d %s %08x %08x %08x %08x %08x %08x %08x",
+                               reason, VENDOR_SEND_HANG_EXT_INFO_VER,
+                               dhd->debug_dump_time_hang_str,
+                               0, 0, 0, 0, 0, 0, 0);
+               if (dhd) {
+                       clear_debug_dump_time(dhd->debug_dump_time_hang_str);
+               }
+       } else {
+               bytes_written += scnprintf(&hang_info[bytes_written], len, "%s", string);
+       }
+
+       WL_ERR(("hang reason: %d info cnt: %d\n", reason, hang_info_cnt));
+
+       if (hang_reason_mismatch == FALSE) {
+               cnt = hang_info_cnt;
+       } else {
+               cnt = HANG_FIELD_MISMATCH_CNT;
+       }
+
+       while (cnt < HANG_FIELD_CNT_MAX) {
+               len = VENDOR_SEND_HANG_EXT_INFO_LEN - bytes_written;
+               bytes_written += scnprintf(&hang_info[bytes_written], len,
+                               "%c%08x", HANG_RAW_DEL, dumy_data);
+               cnt++;
+       }
+
+       WL_ERR(("hang info cnt: %d len: %d\n", cnt, (int)strlen(hang_info)));
+       WL_ERR(("hang info data: %s\n", hang_info));
+
+       wl_cfgvendor_send_async_event(wiphy,
+                       bcmcfg_to_prmry_ndev(cfg), BRCM_VENDOR_EVENT_HANGED,
+                       hang_info, (int)strlen(hang_info));
+
+       memset(string, 0, VENDOR_SEND_HANG_EXT_INFO_LEN);
+
+       if (hang_info) {
+               MFREE(cfg->osh, hang_info, VENDOR_SEND_HANG_EXT_INFO_LEN);
+       }
+
+#ifdef DHD_LOG_DUMP
+       if (dhd->debug_dump_time_hang_str) {
+               dhd_logdump_cookie_save(dhd, dhd->debug_dump_time_hang_str, "HANG");
+       }
+#endif /* DHD_LOG_DUMP */
+
+       if (dhd) {
+               clear_debug_dump_time(dhd->debug_dump_time_str);
+       }
+}
+
+void
+wl_copy_hang_info_if_falure(struct net_device *dev, u16 reason, s32 ret)
+{
+       struct bcm_cfg80211 *cfg = NULL;
+       dhd_pub_t *dhd;
+       s32 err = 0;
+       char ioctl_buf[WLC_IOCTL_SMLEN];
+       memuse_info_t mu;
+       int bytes_written = 0;
+       int remain_len = 0;
+
+       if (!dev) {
+               WL_ERR(("dev is null"));
+               return;
+
+       }
+
+       cfg = wl_get_cfg(dev);
+       if (!cfg) {
+               WL_ERR(("dev=%p cfg=%p\n", dev, cfg));
+               return;
+       }
+
+       dhd = (dhd_pub_t *)(cfg->pub);
+
+       if (!dhd || !dhd->hang_info) {
+               WL_ERR(("%s dhd=%p hang_info=%p\n", __FUNCTION__,
+                       dhd, (dhd ? dhd->hang_info : NULL)));
+               return;
+       }
+
+       err = wldev_iovar_getbuf_bsscfg(dev, "memuse",
+                       NULL, 0, ioctl_buf, WLC_IOCTL_SMLEN, 0, NULL);
+       if (unlikely(err)) {
+               WL_ERR(("error (%d)\n", err));
+               return;
+       }
+
+       memcpy(&mu, ioctl_buf, sizeof(memuse_info_t));
+
+       if (mu.len >= sizeof(memuse_info_t)) {
+               WL_ERR(("Heap Total: %d(%dK)\n", mu.arena_size, KB(mu.arena_size)));
+               WL_ERR(("Free: %d(%dK), LWM: %d(%dK)\n",
+                       mu.arena_free, KB(mu.arena_free),
+                       mu.free_lwm, KB(mu.free_lwm)));
+               WL_ERR(("In use: %d(%dK), HWM: %d(%dK)\n",
+                       mu.inuse_size, KB(mu.inuse_size),
+                       mu.inuse_hwm, KB(mu.inuse_hwm)));
+               WL_ERR(("Malloc failure count: %d\n", mu.mf_count));
+       }
+
+       memset(dhd->hang_info, 0, VENDOR_SEND_HANG_EXT_INFO_LEN);
+       remain_len = VENDOR_SEND_HANG_EXT_INFO_LEN - bytes_written;
+
+       get_debug_dump_time(dhd->debug_dump_time_hang_str);
+       copy_debug_dump_time(dhd->debug_dump_time_str, dhd->debug_dump_time_hang_str);
+
+       bytes_written += scnprintf(&dhd->hang_info[bytes_written], remain_len,
+                       "%d %d %s %d %d %d %d %d %08x %08x",
+                       reason, VENDOR_SEND_HANG_EXT_INFO_VER,
+                       dhd->debug_dump_time_hang_str,
+                       ret, mu.arena_size, mu.arena_free, mu.inuse_size, mu.mf_count, 0, 0);
+
+       dhd->hang_info_cnt = HANG_FIELD_IF_FAILURE_CNT;
+
+       clear_debug_dump_time(dhd->debug_dump_time_hang_str);
+
+       return;
+}
+#endif /* WL_CFGVENDOR_SEND_HANG_EVENT */
index 782b4dcbf1f3335adf5f7b8e00c8335013ece7d2..f4db53686d9dc81c008bc53da6fe11c61a4513f1 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: wl_cfgvendor.h 740003 2018-01-10 10:47:17Z $
+ * $Id: wl_cfgvendor.h 818247 2019-05-07 04:15:13Z $
  */
 
 #ifndef _wl_cfgvendor_h_
  */
 
 #ifndef _wl_cfgvendor_h_
@@ -447,7 +447,9 @@ typedef enum wl_vendor_event {
 
        GOOGLE_ROAM_EVENT_START                 = 32,
 
 
        GOOGLE_ROAM_EVENT_START                 = 32,
 
-       BRCM_VENDOR_EVENT_HANGED                = 33
+       BRCM_VENDOR_EVENT_HANGED                = 33,
+       BRCM_VENDOR_EVENT_SAE_KEY               = 34,
+       BRCM_VENDOR_EVENT_BEACON_RECV           = 35
 } wl_vendor_event_t;
 
 enum andr_wifi_attr {
 } wl_vendor_event_t;
 
 enum andr_wifi_attr {
@@ -603,4 +605,22 @@ extern int wl_cfgvendor_send_supp_eventstring(const char *func, const char *fmt,
        normal_structure.member = value;
 #endif /* CONFIG_COMPAT */
 
        normal_structure.member = value;
 #endif /* CONFIG_COMPAT */
 
+#ifdef WL_BCNRECV
+#if (defined(CONFIG_ARCH_MSM) && defined(SUPPORT_WDEV_CFG80211_VENDOR_EVENT_ALLOC)) || \
+       LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0)
+#define CFG80211_VENDOR_EVENT_ALLOC(wiphy, wdev, len, type, kflags) \
+       cfg80211_vendor_event_alloc(wiphy, ndev_to_wdev(ndev), len, \
+                       BRCM_VENDOR_EVENT_BEACON_RECV, kflags);
+#else
+#define CFG80211_VENDOR_EVENT_ALLOC(wiphy, wdev, len, type, kflags) \
+       cfg80211_vendor_event_alloc(wiphy, len, BRCM_VENDOR_EVENT_BEACON_RECV, kflags);
+#endif /* (defined(CONFIG_ARCH_MSM) && defined(SUPPORT_WDEV_CFG80211_VENDOR_EVENT_ALLOC)) || */
+               /* LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0) */
+#endif /* WL_BCNRECV */
+
+#ifdef WL_CFGVENDOR_SEND_HANG_EVENT
+void wl_cfgvendor_send_hang_event(struct net_device *dev, u16 reason,
+       char *string, int hang_info_cnt);
+void wl_copy_hang_info_if_falure(struct net_device *dev, u16 reason, s32 ret);
+#endif /* WL_CFGVENDOR_SEND_HANG_EVENT */
 #endif /* _wl_cfgvendor_h_ */
 #endif /* _wl_cfgvendor_h_ */
index 0c5191e173f9b5ecf31dac04b40643b4a2288344..f42652fc3cc9507fe71a0138eb9dcbbd2fadfa23 100644 (file)
@@ -24,7 +24,7 @@
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
  *
  * <<Broadcom-WL-IPTag/Open:>>
  *
- * $Id: wldev_common.h 776904 2018-08-16 05:57:39Z $
+ * $Id: wldev_common.h 812480 2019-04-01 07:43:53Z $
  */
 #ifndef __WLDEV_COMMON_H__
 #define __WLDEV_COMMON_H__
  */
 #ifndef __WLDEV_COMMON_H__
 #define __WLDEV_COMMON_H__
@@ -111,6 +111,7 @@ extern int net_os_set_suspend_disable(struct net_device *dev, int val);
 extern int net_os_set_suspend(struct net_device *dev, int val, int force);
 extern int net_os_set_suspend_bcn_li_dtim(struct net_device *dev, int val);
 extern int net_os_set_max_dtim_enable(struct net_device *dev, int val);
 extern int net_os_set_suspend(struct net_device *dev, int val, int force);
 extern int net_os_set_suspend_bcn_li_dtim(struct net_device *dev, int val);
 extern int net_os_set_max_dtim_enable(struct net_device *dev, int val);
+extern int net_os_set_disable_dtim_in_suspend(struct net_device *dev, int val);
 extern int wl_parse_ssid_list_tlv(char** list_str, wlc_ssid_ext_t* ssid,
        int max, int *bytes_left);
 
 extern int wl_parse_ssid_list_tlv(char** list_str, wlc_ssid_ext_t* ssid,
        int max, int *bytes_left);
 
index 8a54e73f64a071890d141001e334f19f9edbde05..813a6e379454a4f8868cc276ab4e23d18eaece35 100644 (file)
@@ -219,6 +219,8 @@ static ssize_t store_abc_log(struct device *dev,
        struct abc_info *pinfo = dev_get_drvdata(sec_abc);
        struct abc_log_entry *abc_log;
 
        struct abc_info *pinfo = dev_get_drvdata(sec_abc);
        struct abc_log_entry *abc_log;
 
+       mutex_lock(&pinfo->log_mutex);
+
        pinfo->log_list_cnt = 0;
 
        while (!list_empty(&pinfo->log_list)) {
        pinfo->log_list_cnt = 0;
 
        while (!list_empty(&pinfo->log_list)) {
@@ -227,6 +229,8 @@ static ssize_t store_abc_log(struct device *dev,
                kfree(abc_log);
        }
 
                kfree(abc_log);
        }
 
+       mutex_unlock(&pinfo->log_mutex);
+
        return count;
 }
 
        return count;
 }
 
@@ -239,10 +243,14 @@ static ssize_t show_abc_log(struct device *dev,
        struct abc_log_entry *abc_log;
        int count = 0;
 
        struct abc_log_entry *abc_log;
        int count = 0;
 
+       mutex_lock(&pinfo->log_mutex);
+
        list_for_each_entry(abc_log, &pinfo->log_list, node) {
        list_for_each_entry(abc_log, &pinfo->log_list, node) {
-               count += sprintf(buf + count, "%s\n", abc_log->abc_log_str);
+               count += snprintf(buf + count, PAGE_SIZE - count, "%s\n", abc_log->abc_log_str);
        }
 
        }
 
+       mutex_unlock(&pinfo->log_mutex);
+
        return count;
 }
 static DEVICE_ATTR(log, 0644, show_abc_log, store_abc_log);
        return count;
 }
 static DEVICE_ATTR(log, 0644, show_abc_log, store_abc_log);
@@ -359,6 +367,8 @@ static void sec_abc_work_func(struct work_struct *work)
 #endif
 
        /* Add abc log_list */
 #endif
 
        /* Add abc log_list */
+       mutex_lock(&pinfo->log_mutex);
+
        abc_log = kzalloc(sizeof(*abc_log), GFP_KERNEL);
        if (abc_log) {
                snprintf(abc_log->abc_log_str, ABC_LOG_STR_LEN, "[%5lu.%03d][%02d:%02d:%02d.%03lu]%s_%s",
        abc_log = kzalloc(sizeof(*abc_log), GFP_KERNEL);
        if (abc_log) {
                snprintf(abc_log->abc_log_str, ABC_LOG_STR_LEN, "[%5lu.%03d][%02d:%02d:%02d.%03lu]%s_%s",
@@ -377,6 +387,8 @@ static void sec_abc_work_func(struct work_struct *work)
                ABC_PRINT("failed to allocate abc_log\n");
        }
 
                ABC_PRINT("failed to allocate abc_log\n");
        }
 
+       mutex_unlock(&pinfo->log_mutex);
+
        if (abc_enabled == ABC_TYPE1_ENABLED) {
                pgpu = pinfo->pdata->gpu_items;
                paicl = pinfo->pdata->aicl_items;
        if (abc_enabled == ABC_TYPE1_ENABLED) {
                pgpu = pinfo->pdata->gpu_items;
                paicl = pinfo->pdata->aicl_items;
@@ -577,6 +589,8 @@ static int sec_abc_probe(struct platform_device *pdev)
 
        init_completion(&pinfo->enable_done);
 
 
        init_completion(&pinfo->enable_done);
 
+       mutex_init(&pinfo->log_mutex);
+
        sec_abc = pinfo->dev;
        pinfo->pdata = pdata;
 
        sec_abc = pinfo->dev;
        pinfo->pdata = pdata;
 
index e0fdde982e9ebd63aaef2052adadc6f3f0c10cf6..ddb47ed1d8df09a3c70863adb5374a34bca5b801 100644 (file)
@@ -104,6 +104,7 @@ struct abc_info {
        int log_list_cnt;
        char abc_str[ABC_BUFFER_MAX];
        struct abc_platform_data *pdata;
        int log_list_cnt;
        char abc_str[ABC_BUFFER_MAX];
        struct abc_platform_data *pdata;
+       struct mutex log_mutex;
 };
 
 extern void sec_abc_send_event(char *str);
 };
 
 extern void sec_abc_send_event(char *str);
index 554e597b2f580dc9f0ca2552bf4bc343796bc885..4968e195cad90f4f563cfb7627557938f7d8d466 100644 (file)
-ad8ba192e8db2ecc66096961be9b5b357aa6914419cc606d23100ac4b44cd582  ./root/init
+5ab08537cf0e9fe55c44c422eb5cec22ec9500a4ddbc50fd3764132185d2edc2  ./root/init
+f9f0eb86ea6f35877da1a411dbf0275bd91eef022d8badf9f0e07e1574662ee5  ./system/bin/fsck.vfat
+078360b23c7284e328f46ac32f0bfc9119394d9c823f98ef055a9cca2919382a  ./system/bin/bsd
+7aaa4ede5935cb24ee67285f8948b7f099e30e03a9a2838521aee9c107214801  ./system/bin/app_process64
+e436edeb6770ba29b03adcb1e1a56d7c5c17f1ed6740755659b5651bb19a7eca  ./system/bin/samsungpowersoundplay
+9e8d9598a0c2d57bbe4d98b0ad3d6baeeab7c16b8fbf72b3b6636c3857d5dfbe  ./system/bin/bugreport
+6518fd161d41986619cb4c56cec65a30b36e944798fa2a354cf0622f3fdfd385  ./system/bin/atrace
+6a3ecf21f4614a0d9f615ebfceec57b46107b7d953c16fdc019c89bf50e87e3a  ./system/bin/media
+5d2f0f940e4512fe920df673a7b2c1ddf36ab5fcd87ff7dcf22dccffce01bff2  ./system/bin/bootchecker
 39529b065e7278f78f056de6936244f9fc0c155f450f16cfb865fec2596e708c  ./system/bin/screenrecord
 39529b065e7278f78f056de6936244f9fc0c155f450f16cfb865fec2596e708c  ./system/bin/screenrecord
-b1f47f37bc5d9f7655f5d3ca4798f437d582c2e8f11b8983a45c3f1249fe830e  ./system/bin/insthk
+6aa95202ca1b2a691737daffc979bfd81dd497f2493cb37dc0972faf6af3fae2  ./system/bin/wm
+7eb6f8812ea81b6b37bdc9ad4451d54e3fdb67f9ac97d70f8a971db3b25646f0  ./system/bin/fsck.f2fs
+34574fae55b1fb257dd9ee100e6d15805ffc7699bcb7c17e7f685f9e644e7646  ./system/bin/faced
+8319029afaf2e008d67d13e9145a6991ab64f27f90c7bedabc8d02f88c1aad8f  ./system/bin/ddexe
+1a704290dda86f5ec5a2057890d60ec33e550705bdd6d90382aa271c4cf45456  ./system/bin/awk
+2331bc252df4ac5f02518bdf5ed7abfffbab4c82ee190eb06cd7fb3e868ad0c4  ./system/bin/ikev2-client
+4a647bc9c3e061614565bbe359d4b8475e26bbe5bd9b7cc7e094f80078ae8ea1  ./system/bin/applypatch
 4da897b697987b4de052901be2425513964c2e8b4fd689bc2fbd667b272e3633  ./system/bin/ld.mc
 4da897b697987b4de052901be2425513964c2e8b4fd689bc2fbd667b272e3633  ./system/bin/ld.mc
+4147308f5aa017fd0f5e6cc5a598e4267db99c391ac6b557b719ca831957826c  ./system/bin/vdc
+35d4f2339b80b87eb0bf7bac80d78bb6b1a0ba0e9b4a360554ee8644a8dde329  ./system/bin/ping
+9318fb4f866c0ac5434916da0a10c09462be87d521829a4ae2d6f3fc5acbfc40  ./system/bin/mdf_fota
+7be280c40f74cb511a78de182a76e139e5829d0f85b0aab6a67baa30b6c9543d  ./system/bin/storkd
+1a61c1e5d9829f234cc916c2790942c004cfed9ec5bfd2aa826b6faf82dc03db  ./system/bin/dpm
+a0e36f5f9ecb152697fe814e5e091e4d41d36ff2540c2fc7a62e3da7b0f6397d  ./system/bin/dm_verity_tz_cmd_exynos
+ed8b5c33dc90a6e17a206f1df9d2984c8eddfc028c509d7bd733640f805368dd  ./system/bin/dsms
+c48e660b628b5e5147a1ffa3d8e5642ed5e04eb3ce6846647339f77d020688e9  ./system/bin/racoon
+2baf015b6fee2c9669e1ebfa414f08daaca6abd3398696cdea09b0fda8d823ee  ./system/bin/incident_helper
+7ac9931fab04bb68d137f99e166445059146345f1050a1570eabff32949e13e9  ./system/bin/telecom
+39dfdd4a43ad6fc436a4db97671c06e926d0ef6568424e994530764867569751  ./system/bin/traced
+58e0620f6755eb29905c9b0b4bb5a68b2e9aee73e33e2dd4b640d15da31927e9  ./system/bin/fsck.exfat
+e8739f888079e0b8797c9a6967624061cfca0db57881f3696e1a16570fb063e2  ./system/bin/bugreportz
+3133e1e36ff66391887480d9ddff4f7eef37349dbab3c3f6736498c535904c4f  ./system/bin/secure_storage_pm
+6d33c5c7f84e7d3ab5af5a217fc2b86193e168bf7d4a322b6ca659a2efa24560  ./system/bin/dalvikvm64
+6d62f019755642c8dc9c34ed18fc0df143ea0475155e147b8c740fa1ea0b1998  ./system/bin/debuggerd
+c5d345498b63220a4b4d79066d1195cfaf9f9ab994c0356620f7202a3866cfe8  ./system/bin/appwidget
+26f4d84f31c974a7ee12d7cffd76b1269d66f8da90596cd33da62ffe042fed4a  ./system/bin/crash_dump32
+cbfaa371cad1c8829c409869fcdf97c8b8bd17aa2bbb348826c3f75b1e68bee8  ./system/bin/at_distributor
+d36ddb2aa83f94759a9baa0241b5a8790bdd225ad9a9dbb339d61ad56cccca9d  ./system/bin/tombstoned
+e496b3279a2c0b50e8f6ccecdbf8d83f6484342a263a13695c1adfa5e74a9913  ./system/bin/mediametrics
+9010ee25d82748bbdb48fa98763e14e6674b1be7099882b5fab327b02a3b53a2  ./system/bin/linker64
+a1986b5318b627581092ac9933a8d3c082ccc7d544a3cad3a44821d36dfee1be  ./system/bin/surfaceflinger
+6db43545f02b197d0e030b1d276d3ec763fa44e7d9c053b4468d0822cb2c048f  ./system/bin/blank_screen
+4d333940375771099253f7c8dd465b074cc3c82b5bd1ac0de73818115b7bfe9b  ./system/bin/hid
+d190e1d1d43a9657efcecffc77eec1c9e9b3e92809a0a174c9f25d8655bcc6c4  ./system/bin/dumpstate
+469d5fd600a9c226466929aedd595f8802e6dfd9890e324593430422f6224816  ./system/bin/redsocks
+13e40f00f037bc2cf3a9dfba35ab0c369e6b55ab60204683093f6618c9c01b1c  ./system/bin/ping6
 524163c841d29842ee1e29051c74df8ae6b02023d083aa187e659558e0bae6d3  ./system/bin/ip6tables
 524163c841d29842ee1e29051c74df8ae6b02023d083aa187e659558e0bae6d3  ./system/bin/ip6tables
-5738945166978ecd57a4eea2a9660a3cb97c4acd816749d379b5eb1a662ec4ac  ./system/bin/statsd
-e609bb56b4cc978eb88175e67207d456e649bfa700abc636f97a720e7913009b  ./system/bin/tune2fs
-d8c0b19be46c87598e0c3291e97472012c23faadf013ec0afd769d429d1f7f2d  ./system/bin/incidentd
-79b129b1e57cd24f356230d41134afe302cff21469e4f25141a3a13dc29369a5  ./system/bin/ccm_gen_cert
-2140b2d414d5cc74b1f3ac54d811ee6ebfc5b635737866ed0722ffc52419f8a6  ./system/bin/sload_f2fs
-e75a66e52ab152a2b178cfd1088b1cbcf04ab2b623e5f00ffa01cb71cbdbfcf7  ./system/bin/toybox
-0b2bb8a1f45aead8dc5f3529b2cff1ac381daddf26355a31eb3feafc3cbb00af  ./system/bin/bootanimation
-5f8f4945fe542907d125832756072fd3e6293c35da73994136ede820419c0940  ./system/bin/blank_screen
-62cb633397d20e16924400d46930497cb4ca076aa31f75c0dd3bc7761a224e7b  ./system/bin/lpm
+13ca1aca38dd3f73ed693e7b9d5a6db6dea42974d7f221c5e2556e83a4b30f9d  ./system/bin/mke2fs
+c92aab352456caaa6f422903f7b922190937cad7791fd1009597d3c5c2597fdf  ./system/bin/traced_probes
+a09864d0c62a4bbf2dd2f731fbf80672880729807881503056f6173d3a2bec98  ./system/bin/run-as
+635b3195aa550e5a0f78360e42f3b257e25dad86a71ef54c336665a8bd6da574  ./system/bin/mkfs.vfat
 1db5dd2e6b805970474c3e58b170aacfa137b9575b233f0d7d3fc69ff9583c97  ./system/bin/am
 1db5dd2e6b805970474c3e58b170aacfa137b9575b233f0d7d3fc69ff9583c97  ./system/bin/am
-2f76b22b65396e545384e3f03bb994251621fc53743cfdb57f9a3b5e27197217  ./system/bin/freecessmonitor
-d8c83c5476b5e9a6bf77b470dd4547faf826904556dddf930b4ff400cfe319eb  ./system/bin/netutils-wrapper-1.0
-fd672e946b5bb678b364bb8ea1c9de811013749c04c03c797014eec70b37ffe5  ./system/bin/idledefrag
-cbfaa371cad1c8829c409869fcdf97c8b8bd17aa2bbb348826c3f75b1e68bee8  ./system/bin/at_distributor
-5dfc07f20a5b819fc0ceb6692cf6bc1d123ae6679e6fa7d128a6794697e24501  ./system/bin/patchoat
-6571ffd1fb0bb0d8174af014e8eff55a25bdf9420d493a8697545c4c4ae56a21  ./system/bin/vr
-19a2cbb36d90c19da9bc680d7fc87480fe2ccb442673e067b40b418a2d1b995f  ./system/bin/sh
-1814756c49b0a8529ef5113e70a8a3d3cbc8467fcd03767a0a431f6e6d797280  ./system/bin/surfaceflinger
-2f53ff45fe5d074496afa31473856bcfd2cff39fe6c1805ab666120e1612b9f5  ./system/bin/dex2oat
-9e8d9598a0c2d57bbe4d98b0ad3d6baeeab7c16b8fbf72b3b6636c3857d5dfbe  ./system/bin/bugreport
-e6c0941a5994d4ab2ad4cd111e1f0c5072e81ce431029ccf33e7eb71063d7b5d  ./system/bin/bootstat
-9aa115de669a5441bfcc806f68cd09e887a18fe101d4f4e8388c22655f829438  ./system/bin/lshal
-f6e0ba7527d218fdfb74d23ae123780d29c3956ad569dc69bc02a79f9c011429  ./system/bin/pppd
+998cecfb5e9c7ace015ab21c7b5231b786b614aeb4e2c7c570d271e1942979d0  ./system/bin/cmd
 841ecb72877cafb5cafa136872c3d44a20ed7099ba0714c9eb75dd92bfb0b140  ./system/bin/logcat
 841ecb72877cafb5cafa136872c3d44a20ed7099ba0714c9eb75dd92bfb0b140  ./system/bin/logcat
+5c447700471b694854e201453d8a588505e9a0913ca9583429dc6c9bfcef4dde  ./system/bin/settings
+dd81ddbb37599f6bc27655d62f292c3b0ad950ee38b34330320d6cb8883be647  ./system/bin/wlandutservice
+735ce4130149059a4a38328f2771040e92d7b08b719a16359675c3d14974e2ea  ./system/bin/input
+5dfc07f20a5b819fc0ceb6692cf6bc1d123ae6679e6fa7d128a6794697e24501  ./system/bin/patchoat
+40f61ce0f51e3b2d843b612651f48cb706331e6efbaee669ad904cfd4760a59a  ./system/bin/service
+9102ca0ce2d28ce47ff8d141a0a1b58ea08626af3a6b84c0b89b89947513a764  ./system/bin/wificond
+9e81ca6d2fde1880a3a97c65d5361dfe81e93f8e5430911921c05830024951c1  ./system/bin/dexdiag
+db21b5fdff05805f51cbbf62888b2ec0bc2dbff448082ac1077b3504e3b64494  ./system/bin/bcc
+fc0b887b54fca6c9d093fe31cbc912ceffb400af5671a494361adbefec4349e2  ./system/bin/linker
+dd72d37dbc93761224e07a92be8a6075eb82f74dfe534714cd8652d467d23203  ./system/bin/remotedisplay
 c0105d45ccc2c518de7acc293ff5f9627889aecdb8c98c5488e74ea8c751dd79  ./system/bin/charon
 c0105d45ccc2c518de7acc293ff5f9627889aecdb8c98c5488e74ea8c751dd79  ./system/bin/charon
-a09864d0c62a4bbf2dd2f731fbf80672880729807881503056f6173d3a2bec98  ./system/bin/run-as
-e496b3279a2c0b50e8f6ccecdbf8d83f6484342a263a13695c1adfa5e74a9913  ./system/bin/mediametrics
-8319029afaf2e008d67d13e9145a6991ab64f27f90c7bedabc8d02f88c1aad8f  ./system/bin/ddexe
-26f4d84f31c974a7ee12d7cffd76b1269d66f8da90596cd33da62ffe042fed4a  ./system/bin/crash_dump32
+8485b4e08abd3e2812877cc3746506e3a70a9c0afa5e4f537e5b49b134e2a221  ./system/bin/edmaudit
+41bc09db578b0f70735637f10605e502c61054a49177bf42e922851822e860af  ./system/bin/mediaextractor
 ee6bd158a817f3907632d438152a39be1e03e588fa7668499906e1200239b4f7  ./system/bin/fsdbg
 ee6bd158a817f3907632d438152a39be1e03e588fa7668499906e1200239b4f7  ./system/bin/fsdbg
-846d448cb27abb9c50cd9fd522d0cd4d846eff306a1a310747a2b280b5311cea  ./system/bin/profman
+2140b2d414d5cc74b1f3ac54d811ee6ebfc5b635737866ed0722ffc52419f8a6  ./system/bin/sload_f2fs
+6571ffd1fb0bb0d8174af014e8eff55a25bdf9420d493a8697545c4c4ae56a21  ./system/bin/vr
 84c1b97dbffa5d6c52f35400e7f57d10f3630d2d0f52ac2d4fc02819f1aabe37  ./system/bin/installd
 84c1b97dbffa5d6c52f35400e7f57d10f3630d2d0f52ac2d4fc02819f1aabe37  ./system/bin/installd
-a0c6a0d113a973c47bfd69b5aebdc9fe932de179411ad0d76f813bc197a1afd2  ./system/bin/lmkd
-2c7eb0fa3da455b89428bbf90f6c67a17b6b38677d1b60c192b13ff93848882a  ./system/bin/appops
-252f20db263b1dbe67143549d3a1eddcf41379540a510b5ac2c1e61424ccb270  ./system/bin/uncrypt
-c411a2a4ad99af9f73385505357d9e4be222e666b64dea14e873b309130a4de5  ./system/bin/cameraserver
-bba5c868c89c14d6e7d2233ab38af8ca207c4ab2a1525df3cb2f7fbeedd57dc7  ./system/bin/atrace
-40f61ce0f51e3b2d843b612651f48cb706331e6efbaee669ad904cfd4760a59a  ./system/bin/service
-e667417f0aafad8209b0e0e4242eb0be8ec7af2ed4c88468d360a489f1c9aef3  ./system/bin/apexserver
-46b05967807b7c341fc0cccef5b86d66a88f39790dea12fdc866802ab3bf5821  ./system/bin/ss_conn_daemon
-df7da16d1d2a37ef4fcbb481c49e0f8daff645a930b07841483c27c3b3cee9ff  ./system/bin/oatdump
-7308619107fb493233291a5117df5cddbe776ded11d2c58afeb1aa5f68984894  ./system/bin/app_process32
-dd72d37dbc93761224e07a92be8a6075eb82f74dfe534714cd8652d467d23203  ./system/bin/remotedisplay
+49b158cf363155b33f133ebc7a953cb563704fb3e9ab377156b29a7e0b335d9e  ./system/bin/requestsync
+8312ae40085b99c656e2aa1dcbb22ee69e72e7ed4f25bf79a7a1c0f817f5fad4  ./system/bin/tzdatacheck
+d34066a213dc1ff00ae30dee95da9874e4a81de71445ea2f12eb8d06f3ee1ce7  ./system/bin/tlc_server
+90e04476b07d535f332ac2ca89f46ac42560578328b5444aa24202afc7ca5c99  ./system/bin/smdexe
+a262bedd9699c5abb616d05a309c766a4ddaefc4720bf260437379ebaf377add  ./system/bin/reboot
+7174dfdade656ea0cd60b13181ffe09022bac6f4e838b089afde557333c6d969  ./system/bin/move_widevine_data.sh
+79b129b1e57cd24f356230d41134afe302cff21469e4f25141a3a13dc29369a5  ./system/bin/ccm_gen_cert
+0b2bb8a1f45aead8dc5f3529b2cff1ac381daddf26355a31eb3feafc3cbb00af  ./system/bin/bootanimation
+2e0581b53edd96e737fc86cfe11f92e9f950adfe6ed303ea3361f0b5cea22e53  ./system/bin/dumpsys
+1311936a87515dd79fd8a80b7d4c1b200d95471f43d83d6687c4eb2d94af3c53  ./system/bin/clatd
+e17c99176326e4ca332f50e53abb5f6e68b802543ba10416eb460940e35b7977  ./system/bin/locksettings
+38d8e9c1b0e61752ebfda327dfba40588a3bad422ecb08702953ab9a9cf703a7  ./system/bin/logwrapper
+c220078e68c7505d3c7696222c4c65e4fbc13064d67c685242785873d1677a7a  ./system/bin/bzip2
+e609bb56b4cc978eb88175e67207d456e649bfa700abc636f97a720e7913009b  ./system/bin/tune2fs
+5642f05d9009312287b4b98dbe376be743d779c195ee6aaa607abe9d0741bf95  ./system/bin/auditd
+9ea181c0450aafcc7acc3a9153e3783c4fc4b8f3d29c68df5f586e89a7e71208  ./system/bin/mediaserver
+8747322bccf1a826bad00e4f2d57acc24e7eee536c0fcbe23d371b46ac137a08  ./system/bin/bmgr
+f0c34cfca62c3f8dde9068c69ad1e02406370e51e4039e80736a9196dbb95bd0  ./system/bin/scs
+67dc2dfb770751701a5361008c2b969da42b62e691d14e6816e415bc9281abd9  ./system/bin/logd
+d62c969421aded9aea9d5219a4d9500463d0a6254ef933fc50aa156583ace104  ./system/bin/resize2fs
 a9c18385418406cf8cf3718704b0007d2475f7a853713603e4e6973c2b8c2a3d  ./system/bin/make_f2fs
 a9c18385418406cf8cf3718704b0007d2475f7a853713603e4e6973c2b8c2a3d  ./system/bin/make_f2fs
-fc0b887b54fca6c9d093fe31cbc912ceffb400af5671a494361adbefec4349e2  ./system/bin/linker
-078360b23c7284e328f46ac32f0bfc9119394d9c823f98ef055a9cca2919382a  ./system/bin/bsd
-d1e60272d201994b190192ab18464bf779893b024f7841e32f06daa9f3ea4070  ./system/bin/e2fsck
-5c447700471b694854e201453d8a588505e9a0913ca9583429dc6c9bfcef4dde  ./system/bin/settings
-e50b9a6a2dffadc2833449b141a7248c71aeb0737ef330d0d35626743ed3cac9  ./system/bin/srm.bin
-d127b368d29b21d530337e99215510d6e3f1c8c9d9ba4d7fdd1dd8a99c832aa0  ./system/bin/resetreason
-c5d345498b63220a4b4d79066d1195cfaf9f9ab994c0356620f7202a3866cfe8  ./system/bin/appwidget
-7be280c40f74cb511a78de182a76e139e5829d0f85b0aab6a67baa30b6c9543d  ./system/bin/storkd
-435b62950ae0f5cdd5e6b8e35bb898fdd4bb2ad6f8a1d0060672c35db85957df  ./system/bin/multiclientd
-f84adc0396732ad372b03b329cfeeddf51dc9ba68ee2fe0b5bee2eba4ef6ceb8  ./system/bin/tc
-a0e36f5f9ecb152697fe814e5e091e4d41d36ff2540c2fc7a62e3da7b0f6397d  ./system/bin/dm_verity_tz_cmd_exynos
-1a704290dda86f5ec5a2057890d60ec33e550705bdd6d90382aa271c4cf45456  ./system/bin/awk
-12d399740e7ea9f1594f3be80e51370282c5f42fa47c904b9bfdf2c46bd266fe  ./system/bin/imsd
-90ff6b324af17803804c81be3bf9b1fb058bec521e4c20fef3581be8b5daef37  ./system/bin/wait_for_keymaster
-2baf015b6fee2c9669e1ebfa414f08daaca6abd3398696cdea09b0fda8d823ee  ./system/bin/incident_helper
+7cf94cdaa5e7f8762e5ea96d3656bddeef3a2099e37962fca908f90c86be2211  ./system/bin/incident
+6d2a3126eccb5d6c89e920863aee91ed43886f08fbc59b0e501ee7829b335cd6  ./system/bin/screencap
+148e85cce90f23acde88d8e7adefb727578a39c7e0d53460891c47947538df24  ./system/bin/toolbox
 4e9917e8b816ee794ab307a528c59b8707180ee3112453337c05c5bc5520f404  ./system/bin/mdnsd
 4e9917e8b816ee794ab307a528c59b8707180ee3112453337c05c5bc5520f404  ./system/bin/mdnsd
-65ef94255890560059651737ca1fe88b5f5e45ce35c83de3275c715967d2fd08  ./system/bin/audioserver
-74053ee14430f59da257a8b4082fb452cf8a1b91a094e7670f94bf28f96d4f97  ./system/bin/vdc
-718371bfbc1f12579f51bba15371c2fd0719df35a31c77652dad82fbc811c75d  ./system/bin/adbd
-ed8b5c33dc90a6e17a206f1df9d2984c8eddfc028c509d7bd733640f805368dd  ./system/bin/dsms
+1ba2f003f49b4e2acc98daa617badfe37b1e7844c43861aa213cfeb9377c6d03  ./system/bin/eris
+b4f0cccfa68ee05bb30b1fa681a9c7a16c1078798c51206ba2f449fbba6ab07c  ./system/bin/statsd
+9a8605dbdd8e6219cea4ee412b46e91a1191e6e950ea4c06664993236dc8c46a  ./system/bin/storaged
+fac0be1069023ce302bf33fdf23ea8b55f0695cecc60d4bd3ca9885a6aa7dbf7  ./system/bin/lpm
+c38aee25d16c76acfc7ea466753ca68322c98842be7c4a667d1fd43ca00f5e54  ./system/bin/iptables
+5ea8ff67e680812f14e244246857a066c879316c4cf7782ef9ccc83a3eff692c  ./system/bin/multiclientd
+b1f47f37bc5d9f7655f5d3ca4798f437d582c2e8f11b8983a45c3f1249fe830e  ./system/bin/insthk
+d9923b6b841e438ff62de5429e4d04c6e76fdac3b7546284ff02961982aa631b  ./system/bin/dnsmasq
+ba6257dd83b8f0bc8977f26013e7a2d2a7922e10b405b6e7924f4c75958b2b49  ./system/bin/dalvikvm32
+d127b368d29b21d530337e99215510d6e3f1c8c9d9ba4d7fdd1dd8a99c832aa0  ./system/bin/resetreason
+7068c7044da661ef800a4608d1510e2a9d889e2b42317e695c9a71c77b5be539  ./system/bin/netd
+9aa115de669a5441bfcc806f68cd09e887a18fe101d4f4e8388c22655f829438  ./system/bin/lshal
+cd2b09b3d5b6978d9cda77cdb053c294a0014ea297dc9ebecfbd10f10e1af364  ./system/bin/servicemanager
+737bf28c6337e34551ae26252d23802dbb453d1ec805867f47c0101003d18fea  ./system/bin/mtpd
+b273c0507e86b0328578481462a501c5e3458ab4d34a423b006476139ed38407  ./system/bin/pm
+68642e08b7acab255cc192e30c1302ca3d0c0431f2e0227655c10f8915de04eb  ./system/bin/mediadrmserver
+c4986826c4a9fcca8776a181e3bc61a7a9f3f8afa2baf18a63818b9ef091b0a1  ./system/bin/lmkd
+d8c83c5476b5e9a6bf77b470dd4547faf826904556dddf930b4ff400cfe319eb  ./system/bin/netutils-wrapper-1.0
+81d7b4f153e17816a4be319f1b8eb6e6a78e40a0c4bb54737f3db7b7e30cd106  ./system/bin/thermalserviced
+e667417f0aafad8209b0e0e4242eb0be8ec7af2ed4c88468d360a489f1c9aef3  ./system/bin/apexserver
+f6e0ba7527d218fdfb74d23ae123780d29c3956ad569dc69bc02a79f9c011429  ./system/bin/pppd
+4c79c02e6b0d13c47c16353fc0f26725a49ea818418670403805bac96b437876  ./system/bin/iod
+add0353ad9b85f4d90a7c19c4ef11cd5ac0bbff3139bb530ced45a5cf32ae69d  ./system/bin/wait_for_keymaster
+05f6b98ff3a0c5d81b2ae412ff5ac76d5e5bc7f25f3e63e4c43e88f4b2643a3c  ./system/bin/blkid
+e415515df52a4ef15e876d3ba378c24f9f6e473b019f8501ac37633b92ad0231  ./system/bin/vold_prepare_subdirs
+a7b5331386613aa4f2741633cd5edf6db902a9d0f66c34a5d19eca308e19d99c  ./system/bin/prepare_param.sh
+7a95bb39384040bc4a61aacf537bc285293195f150c2fe0c319233f6d2f19757  ./system/bin/bu
+64d38e8f13f5718528d90a7ea50b2ec6cd0e0ca29c60c88a32d3f337e8833138  ./system/bin/crash_dump64
+6bc9765f317d0f30c1903e310cc4cf9b24fbba197f9f5b430c78f01b08179e3e  ./system/bin/keystore_cli_v2
 85504ed8aaff00986e6342d4b4d4d7a21c05cde98c409b2863f5436d5b64bd3f  ./system/bin/bpfloader
 85504ed8aaff00986e6342d4b4d4d7a21c05cde98c409b2863f5436d5b64bd3f  ./system/bin/bpfloader
-643e1a066df19d86d7539435fa81c27cb90892c1f9fef5e5b50f089554f7191c  ./system/bin/e2fsdroid
 936cf8f33eb63b43ce84f36653919b3bb2087ac6c46e4a86e7c0b439c5714e89  ./system/bin/freecessmod
 936cf8f33eb63b43ce84f36653919b3bb2087ac6c46e4a86e7c0b439c5714e89  ./system/bin/freecessmod
-c38346a5e7abc7af059dda75baa9bf641ebcd6546c79cf055d5a803f4655ffc7  ./system/bin/diagexe
+588f4e89975e626c1ae185c350389e4fad005b2cb9525834a42dfa7dfd548545  ./system/bin/uiautomator
+c09e3b1981bb5e49999fc1ffa15b678329bf8c43525eaf69b52380d5ef5c81a2  ./system/bin/e2fsck
+729b3fe95cabf324ffea751d43a351017e656ee38ba89824894fa327620475c1  ./system/bin/usbd
+4bb2584cbdde05809405024caae5b146dca4c2d1099b0bff1a8eb83eeaac4ac4  ./system/bin/secilc
+2b0da39f3c8b61047abba6170c92895ce0053a6d4a960259d799acdbe655ada8  ./system/bin/sem_daemon
+f5dd547155686ce3c85664a3942f681fe3bd279d1caea6c8dba2e59c34c170af  ./system/bin/e4defrag
+7308619107fb493233291a5117df5cddbe776ded11d2c58afeb1aa5f68984894  ./system/bin/app_process32
+9101c06b4bbd79e638841f407d8be934d8842e15b6fa59a1da426a6be88d5378  ./system/bin/drmserver
+4a1e287caabce6a774978a9b6c1a1e902b0b7dc409975889b6c4e956160605d2  ./system/bin/adbd
 7282585164a320016785ffd01bb27fc53dc9893b00d8a5b7c3bacdbda3e21bd5  ./system/bin/ndc
 7282585164a320016785ffd01bb27fc53dc9893b00d8a5b7c3bacdbda3e21bd5  ./system/bin/ndc
-549346bff303d1baa1d46c12bf9e40fee593a1ba47afa88e4f6c98c619f94d10  ./system/bin/vold
-7a95bb39384040bc4a61aacf537bc285293195f150c2fe0c319233f6d2f19757  ./system/bin/bu
+fd672e946b5bb678b364bb8ea1c9de811013749c04c03c797014eec70b37ffe5  ./system/bin/idledefrag
 1cde380f3deaf3a8a075c96f8342a444ba96d12a6ea5773c882c31fe3a68b310  ./system/bin/monkey
 1cde380f3deaf3a8a075c96f8342a444ba96d12a6ea5773c882c31fe3a68b310  ./system/bin/monkey
-b4c9111f9bec34659d34fbe1a28bc276bd2f701764873d3a67033ff5b3281655  ./system/bin/connfwexe
+7a83ff74f265d17d450156d52959eccc1b5707c68e9ab0856c87ac2310e4b7e5  ./system/bin/bootstat
+926a1b11b366d185a5816b79dd5e37f01eb43a078053a51b9facc47c53b09d88  ./system/bin/imsd
+252f20db263b1dbe67143549d3a1eddcf41379540a510b5ac2c1e61424ccb270  ./system/bin/uncrypt
+e517017ceb88e2e9b473dcd7aeca60ab141c112217f31bc7e9353f5852f0dcae  ./system/bin/svc
+7d0a0d2d290556d444d045caae0c2a23e96954e3b3b7d7c022113b353cf28c00  ./system/bin/irisd
+2d5d7d17c060938bfdb4b56c214d1c76aed66c94585496275300c5bd88f3bc78  ./system/bin/vold
+c411a2a4ad99af9f73385505357d9e4be222e666b64dea14e873b309130a4de5  ./system/bin/cameraserver
+e1e86a2207d0ae8071c66b200813ea2cd98ab59663ceb47cab04f42f5348a5fb  ./system/bin/schedtest
 32b69cf7f5da2ccc6a7c1f30fe038f08b7f2bb152b8a657eaec8f2f8dfe55339  ./system/bin/dexdump
 32b69cf7f5da2ccc6a7c1f30fe038f08b7f2bb152b8a657eaec8f2f8dfe55339  ./system/bin/dexdump
-c7d44238836ac830ecd22ce3785a8640366a340bc9ae21d22faace7693a6e4d6  ./system/bin/keystore
-cae2953866ba79675d44d8be966b9efd36ed259144e10d65ad806bb741ab9576  ./system/bin/hw/android.hidl.allocator@1.0-service
-7cf94cdaa5e7f8762e5ea96d3656bddeef3a2099e37962fca908f90c86be2211  ./system/bin/incident
-58e0620f6755eb29905c9b0b4bb5a68b2e9aee73e33e2dd4b640d15da31927e9  ./system/bin/fsck.exfat
-f94b938432690dcdab7c2c3d7980ad9c53d8b36b2964e2e81d9ebe704f401ef7  ./system/bin/mediadrmserver
-635b3195aa550e5a0f78360e42f3b257e25dad86a71ef54c336665a8bd6da574  ./system/bin/mkfs.vfat
-469d5fd600a9c226466929aedd595f8802e6dfd9890e324593430422f6224816  ./system/bin/redsocks
-6d2a3126eccb5d6c89e920863aee91ed43886f08fbc59b0e501ee7829b335cd6  ./system/bin/screencap
-1311936a87515dd79fd8a80b7d4c1b200d95471f43d83d6687c4eb2d94af3c53  ./system/bin/clatd
-49ada3d3a7e0eb91ec50abc2b96b62019eb49dd20c9bf4e511275206b87dc34b  ./system/bin/secure_storage_daemon
-9101c06b4bbd79e638841f407d8be934d8842e15b6fa59a1da426a6be88d5378  ./system/bin/drmserver
-998cecfb5e9c7ace015ab21c7b5231b786b614aeb4e2c7c570d271e1942979d0  ./system/bin/cmd
-9badc29e80f001d85c329f511eb6109ee93a921316d3d33f660529dc3ebaed31  ./system/bin/secdiscard
-2e0581b53edd96e737fc86cfe11f92e9f950adfe6ed303ea3361f0b5cea22e53  ./system/bin/dumpsys
-d34066a213dc1ff00ae30dee95da9874e4a81de71445ea2f12eb8d06f3ee1ce7  ./system/bin/tlc_server
-471b1bc524cc51e4368d90fd970850c0175377e7afbf2683abd3850f9000bef2  ./system/bin/app_process64
-c92aab352456caaa6f422903f7b922190937cad7791fd1009597d3c5c2597fdf  ./system/bin/traced_probes
-9ea181c0450aafcc7acc3a9153e3783c4fc4b8f3d29c68df5f586e89a7e71208  ./system/bin/mediaserver
-6a3ecf21f4614a0d9f615ebfceec57b46107b7d953c16fdc019c89bf50e87e3a  ./system/bin/media
+d8c0b19be46c87598e0c3291e97472012c23faadf013ec0afd769d429d1f7f2d  ./system/bin/incidentd
+b4c9111f9bec34659d34fbe1a28bc276bd2f701764873d3a67033ff5b3281655  ./system/bin/connfwexe
 38f26832ed3564399424a7e2b28e319dad9a7ad3dadc91494c312beee69162fe  ./system/bin/dexlist
 38f26832ed3564399424a7e2b28e319dad9a7ad3dadc91494c312beee69162fe  ./system/bin/dexlist
-aee5affa71b505d59ae5206f3674e5ccadcd332b04b5158a96504494958abc9c  ./system/bin/sem_daemon
-735ce4130149059a4a38328f2771040e92d7b08b719a16359675c3d14974e2ea  ./system/bin/input
-dafd522c3300b7ed552e6cbcfcfe757d6fb18ac138a8bfaeb61bdb7c9db2657e  ./system/bin/content
-3886ded4d0fbdb059fcab1c84920b54ee45bc9df5b4fcff3aeaa11838b13000a  ./system/bin/hwservicemanager
-2331bc252df4ac5f02518bdf5ed7abfffbab4c82ee190eb06cd7fb3e868ad0c4  ./system/bin/ikev2-client
-e1e86a2207d0ae8071c66b200813ea2cd98ab59663ceb47cab04f42f5348a5fb  ./system/bin/schedtest
-6d62f019755642c8dc9c34ed18fc0df143ea0475155e147b8c740fa1ea0b1998  ./system/bin/debuggerd
-4bb2584cbdde05809405024caae5b146dca4c2d1099b0bff1a8eb83eeaac4ac4  ./system/bin/secilc
-35d4f2339b80b87eb0bf7bac80d78bb6b1a0ba0e9b4a360554ee8644a8dde329  ./system/bin/ping
-a7b5331386613aa4f2741633cd5edf6db902a9d0f66c34a5d19eca308e19d99c  ./system/bin/prepare_param.sh
-c38aee25d16c76acfc7ea466753ca68322c98842be7c4a667d1fd43ca00f5e54  ./system/bin/iptables
-5309b3fde799636c969637bdb5c91a158d8386aaad8f571bc80e28644d2323df  ./system/bin/ip
-467afc9f64758f976a7e8189b0e9627d7f39726ac494692ff86ccf2860b40af3  ./system/bin/netd
-cd2b09b3d5b6978d9cda77cdb053c294a0014ea297dc9ebecfbd10f10e1af364  ./system/bin/servicemanager
-b273c0507e86b0328578481462a501c5e3458ab4d34a423b006476139ed38407  ./system/bin/pm
-e415515df52a4ef15e876d3ba378c24f9f6e473b019f8501ac37633b92ad0231  ./system/bin/vold_prepare_subdirs
-3133e1e36ff66391887480d9ddff4f7eef37349dbab3c3f6736498c535904c4f  ./system/bin/secure_storage_pm
+933ec6dd4476af3a5a603808f35c7c379f8ace744bc79b1bf939021b7af29cbf  ./system/bin/gatekeeperd
+19a2cbb36d90c19da9bc680d7fc87480fe2ccb442673e067b40b418a2d1b995f  ./system/bin/sh
+2f53ff45fe5d074496afa31473856bcfd2cff39fe6c1805ab666120e1612b9f5  ./system/bin/dex2oat
+1d254ac628f5dd96ba0ca1aa6eb86416b9c0e4241ad4982a498f93aed1a2bf15  ./system/bin/dexoptanalyzer
+f999033ee9f37eeeb7e4ee4c7bed7572516ac0cb2920f823021ad0ba8d7e5732  ./system/bin/hw/android.hidl.allocator@1.0-service
+e8b4b954cdc569fe2957fb0747ac10a6e2678849259d1249f485b8bcdfbdb615  ./system/bin/sdp_cryptod
+2c7eb0fa3da455b89428bbf90f6c67a17b6b38677d1b60c192b13ff93848882a  ./system/bin/appops
+4a36fba4e224bd4e8071f9959cb25224cf209f8bbc66c5caea760c71fbe400f1  ./system/bin/hwservicemanager
+d0959c12d988f12b92b075a2222a0df1b66e1764f64ce75ef3d4bd9eacb282b7  ./system/bin/ime
+e50b9a6a2dffadc2833449b141a7248c71aeb0737ef330d0d35626743ed3cac9  ./system/bin/srm.bin
 dc7cfa6ab7bf9b54d8bdf17a60c7e93d5ac09b290bfc6794b2fb352f93a1201f  ./system/bin/mlchecker
 dc7cfa6ab7bf9b54d8bdf17a60c7e93d5ac09b290bfc6794b2fb352f93a1201f  ./system/bin/mlchecker
-3783b60e9afa4eaa917455aa808aee7eff472130a65fceabbf77d3afd1b5957e  ./system/bin/logd
-d62c969421aded9aea9d5219a4d9500463d0a6254ef933fc50aa156583ace104  ./system/bin/resize2fs
-6d33c5c7f84e7d3ab5af5a217fc2b86193e168bf7d4a322b6ca659a2efa24560  ./system/bin/dalvikvm64
-4a647bc9c3e061614565bbe359d4b8475e26bbe5bd9b7cc7e094f80078ae8ea1  ./system/bin/applypatch
-4c79c02e6b0d13c47c16353fc0f26725a49ea818418670403805bac96b437876  ./system/bin/iod
-13e40f00f037bc2cf3a9dfba35ab0c369e6b55ab60204683093f6618c9c01b1c  ./system/bin/ping6
-6aa95202ca1b2a691737daffc979bfd81dd497f2493cb37dc0972faf6af3fae2  ./system/bin/wm
-ecbc526cdd57a485f835cdbb030e67c956f6370432b53d35184fbb2af6e6565e  ./system/bin/sdp_cryptod
-9010ee25d82748bbdb48fa98763e14e6674b1be7099882b5fab327b02a3b53a2  ./system/bin/linker64
-ba6257dd83b8f0bc8977f26013e7a2d2a7922e10b405b6e7924f4c75958b2b49  ./system/bin/dalvikvm32
-7ac9931fab04bb68d137f99e166445059146345f1050a1570eabff32949e13e9  ./system/bin/telecom
-7234ae155c444dff269556f0826762010aba1a25281e46ba024ad1cfb8ec4041  ./system/bin/thermalserviced
-75ef30135564abb4089ffda82d374e812327ed54155bc46e3df1d2c8e23bb48b  ./system/bin/grep
-0a01c65738b5ad01c7faebbbe61dac29a607a3b49ec569e172daba03f6681959  ./system/bin/wificond
-db21b5fdff05805f51cbbf62888b2ec0bc2dbff448082ac1077b3504e3b64494  ./system/bin/bcc
-091819bab5d6a22e31e7d605a573032562ff3171100fdb8ad40378e627feeab6  ./system/bin/gatekeeperd
-e517017ceb88e2e9b473dcd7aeca60ab141c112217f31bc7e9353f5852f0dcae  ./system/bin/svc
-38d8e9c1b0e61752ebfda327dfba40588a3bad422ecb08702953ab9a9cf703a7  ./system/bin/logwrapper
-f9f0eb86ea6f35877da1a411dbf0275bd91eef022d8badf9f0e07e1574662ee5  ./system/bin/fsck.vfat
-41bc09db578b0f70735637f10605e502c61054a49177bf42e922851822e860af  ./system/bin/mediaextractor
-4d333940375771099253f7c8dd465b074cc3c82b5bd1ac0de73818115b7bfe9b  ./system/bin/hid
+93fdfb670956418473e203b6545d899b665c19227c6bdb1f98c7ff375a47eeba  ./system/bin/sensorservice
+2f76b22b65396e545384e3f03bb994251621fc53743cfdb57f9a3b5e27197217  ./system/bin/freecessmonitor
 73ad500675e3668e8c49bd4be736e2af129b6b558e76ff952157bd68b0fb07fc  ./system/bin/idmap
 73ad500675e3668e8c49bd4be736e2af129b6b558e76ff952157bd68b0fb07fc  ./system/bin/idmap
-737bf28c6337e34551ae26252d23802dbb453d1ec805867f47c0101003d18fea  ./system/bin/mtpd
-e8739f888079e0b8797c9a6967624061cfca0db57881f3696e1a16570fb063e2  ./system/bin/bugreportz
+46b05967807b7c341fc0cccef5b86d66a88f39790dea12fdc866802ab3bf5821  ./system/bin/ss_conn_daemon
+f84adc0396732ad372b03b329cfeeddf51dc9ba68ee2fe0b5bee2eba4ef6ceb8  ./system/bin/tc
+49ada3d3a7e0eb91ec50abc2b96b62019eb49dd20c9bf4e511275206b87dc34b  ./system/bin/secure_storage_daemon
+c38346a5e7abc7af059dda75baa9bf641ebcd6546c79cf055d5a803f4655ffc7  ./system/bin/diagexe
+972ae0d1af6569e59167716ebd5cefb5648efff83c090b818800a5b8af53b1e9  ./system/bin/sdcard
+dafd522c3300b7ed552e6cbcfcfe757d6fb18ac138a8bfaeb61bdb7c9db2657e  ./system/bin/content
+5309b3fde799636c969637bdb5c91a158d8386aaad8f571bc80e28644d2323df  ./system/bin/ip
+d9089960353c271fe8af45ebe6c344723823e0591fddc0117fe6ebb8d8861dec  ./system/bin/audioserver
 32125a2541dc3345420feadf70b5df41c8483e74e75c650092458e0339b45a6e  ./system/bin/sgdisk
 32125a2541dc3345420feadf70b5df41c8483e74e75c650092458e0339b45a6e  ./system/bin/sgdisk
+7616516e407d297b057350bdf55534cabcaff58a36c30bca48dcf1609bbabad3  ./system/bin/sm
+a37bce47f0efc308f74080144de33952889a2cf1f762a0ac746ddc029a72a6db  ./system/bin/keystore
+846d448cb27abb9c50cd9fd522d0cd4d846eff306a1a310747a2b280b5311cea  ./system/bin/profman
+e75a66e52ab152a2b178cfd1088b1cbcf04ab2b623e5f00ffa01cb71cbdbfcf7  ./system/bin/toybox
+df7da16d1d2a37ef4fcbb481c49e0f8daff645a930b07841483c27c3b3cee9ff  ./system/bin/oatdump
+643e1a066df19d86d7539435fa81c27cb90892c1f9fef5e5b50f089554f7191c  ./system/bin/e2fsdroid
+9badc29e80f001d85c329f511eb6109ee93a921316d3d33f660529dc3ebaed31  ./system/bin/secdiscard
 d0c76f33c369f4dfa85f9f68ba86f350f56cda5a255e4d1473fe9c258b470a67  ./system/bin/perfetto
 d0c76f33c369f4dfa85f9f68ba86f350f56cda5a255e4d1473fe9c258b470a67  ./system/bin/perfetto
-cd22ada0ba23a0c52af1178b17b975a0ceb8756a96f70c1793e03faf26c88b97  ./system/bin/eris
-7d0a0d2d290556d444d045caae0c2a23e96954e3b3b7d7c022113b353cf28c00  ./system/bin/irisd
-c48e660b628b5e5147a1ffa3d8e5642ed5e04eb3ce6846647339f77d020688e9  ./system/bin/racoon
-588f4e89975e626c1ae185c350389e4fad005b2cb9525834a42dfa7dfd548545  ./system/bin/uiautomator
+75ef30135564abb4089ffda82d374e812327ed54155bc46e3df1d2c8e23bb48b  ./system/bin/grep
 3714b8c7e7441a9d644caf6ecfe5c760b1217b63f8532c5a5d48d096f4f72fa9  ./system/bin/mkfs.exfat
 3714b8c7e7441a9d644caf6ecfe5c760b1217b63f8532c5a5d48d096f4f72fa9  ./system/bin/mkfs.exfat
-90e04476b07d535f332ac2ca89f46ac42560578328b5444aa24202afc7ca5c99  ./system/bin/smdexe
-39dfdd4a43ad6fc436a4db97671c06e926d0ef6568424e994530764867569751  ./system/bin/traced
-f5dd547155686ce3c85664a3942f681fe3bd279d1caea6c8dba2e59c34c170af  ./system/bin/e4defrag
-1a61c1e5d9829f234cc916c2790942c004cfed9ec5bfd2aa826b6faf82dc03db  ./system/bin/dpm
-729b3fe95cabf324ffea751d43a351017e656ee38ba89824894fa327620475c1  ./system/bin/usbd
-d36ddb2aa83f94759a9baa0241b5a8790bdd225ad9a9dbb339d61ad56cccca9d  ./system/bin/tombstoned
-9e81ca6d2fde1880a3a97c65d5361dfe81e93f8e5430911921c05830024951c1  ./system/bin/dexdiag
-e17c99176326e4ca332f50e53abb5f6e68b802543ba10416eb460940e35b7977  ./system/bin/locksettings
-05f6b98ff3a0c5d81b2ae412ff5ac76d5e5bc7f25f3e63e4c43e88f4b2643a3c  ./system/bin/blkid
-c220078e68c7505d3c7696222c4c65e4fbc13064d67c685242785873d1677a7a  ./system/bin/bzip2
-661a3f143795271574144e5efb6b5df34e6dec87599f3e6b7d39c7472d1dafcf  ./system/bin/storaged
-1d254ac628f5dd96ba0ca1aa6eb86416b9c0e4241ad4982a498f93aed1a2bf15  ./system/bin/dexoptanalyzer
-dd81ddbb37599f6bc27655d62f292c3b0ad950ee38b34330320d6cb8883be647  ./system/bin/wlandutservice
-8485b4e08abd3e2812877cc3746506e3a70a9c0afa5e4f537e5b49b134e2a221  ./system/bin/edmaudit
-93fdfb670956418473e203b6545d899b665c19227c6bdb1f98c7ff375a47eeba  ./system/bin/sensorservice
-5d2f0f940e4512fe920df673a7b2c1ddf36ab5fcd87ff7dcf22dccffce01bff2  ./system/bin/bootchecker
-f0c34cfca62c3f8dde9068c69ad1e02406370e51e4039e80736a9196dbb95bd0  ./system/bin/scs
-49b158cf363155b33f133ebc7a953cb563704fb3e9ab377156b29a7e0b335d9e  ./system/bin/requestsync
-d9923b6b841e438ff62de5429e4d04c6e76fdac3b7546284ff02961982aa631b  ./system/bin/dnsmasq
-d6d70f63cab5a6f4328a6f6c5dc3e4857aefb9a333f1fae154b9a00ae96eed10  ./system/bin/dumpstate
-5642f05d9009312287b4b98dbe376be743d779c195ee6aaa607abe9d0741bf95  ./system/bin/auditd
-64d38e8f13f5718528d90a7ea50b2ec6cd0e0ca29c60c88a32d3f337e8833138  ./system/bin/crash_dump64
-a262bedd9699c5abb616d05a309c766a4ddaefc4720bf260437379ebaf377add  ./system/bin/reboot
-9318fb4f866c0ac5434916da0a10c09462be87d521829a4ae2d6f3fc5acbfc40  ./system/bin/mdf_fota
-7616516e407d297b057350bdf55534cabcaff58a36c30bca48dcf1609bbabad3  ./system/bin/sm
-148e85cce90f23acde88d8e7adefb727578a39c7e0d53460891c47947538df24  ./system/bin/toolbox
-d9d2e8939abd95bfd023272e93937cd314b19ae2c393b518a92db680f77457f6  ./system/bin/keystore_cli_v2
-8312ae40085b99c656e2aa1dcbb22ee69e72e7ed4f25bf79a7a1c0f817f5fad4  ./system/bin/tzdatacheck
-13ca1aca38dd3f73ed693e7b9d5a6db6dea42974d7f221c5e2556e83a4b30f9d  ./system/bin/mke2fs
-972ae0d1af6569e59167716ebd5cefb5648efff83c090b818800a5b8af53b1e9  ./system/bin/sdcard
-d0959c12d988f12b92b075a2222a0df1b66e1764f64ce75ef3d4bd9eacb282b7  ./system/bin/ime
-8747322bccf1a826bad00e4f2d57acc24e7eee536c0fcbe23d371b46ac137a08  ./system/bin/bmgr
-e436edeb6770ba29b03adcb1e1a56d7c5c17f1ed6740755659b5651bb19a7eca  ./system/bin/samsungpowersoundplay
-7eb6f8812ea81b6b37bdc9ad4451d54e3fdb67f9ac97d70f8a971db3b25646f0  ./system/bin/fsck.f2fs
-34574fae55b1fb257dd9ee100e6d15805ffc7699bcb7c17e7f685f9e644e7646  ./system/bin/faced
 aae9f3a39cdda7a791703d743f1b8f13fe0995b721c266c50543991510092ba4  ./system/xbin/cpustats
 aae9f3a39cdda7a791703d743f1b8f13fe0995b721c266c50543991510092ba4  ./system/xbin/cpustats
-5eaec5790dfef5015a40bba17489bc7bafc75149282b3585cb25fd6e85467c3b  ./root/sbin/knox_changer
 34bba842f95758bbc9702b83e61dbeadf3d7a9885ff1b7cba2baf0f8a81db4bc  ./root/sbin/sswap
 c258f4be15970da1e658fcf097e2c95fc46e80f6582bd033c87a65b131c3141b  ./root/sbin/dm_verity_signature_checker
 34bba842f95758bbc9702b83e61dbeadf3d7a9885ff1b7cba2baf0f8a81db4bc  ./root/sbin/sswap
 c258f4be15970da1e658fcf097e2c95fc46e80f6582bd033c87a65b131c3141b  ./root/sbin/dm_verity_signature_checker
-8beeb022beeb6cddf59750a08582e2068e27688b67ddec1e9b91d152105b17b3  ./root/sbin/charger
-8af15238f049b12f98625504d850b33d02a6ea3f7c96c30dadce51c1c874747c  ./recovery/root/vndservice_contexts
+5eaec5790dfef5015a40bba17489bc7bafc75149282b3585cb25fd6e85467c3b  ./root/sbin/knox_changer
+76b6f9f8f17dffde3ab06588d79178f17ab61704f6ec35ea8a0c0d929af35d01  ./root/sbin/charger
 4f49704f32b81282acb818356737c4a759aae3252b84f516e1768b873f093939  ./recovery/root/plat_property_contexts
 4f49704f32b81282acb818356737c4a759aae3252b84f516e1768b873f093939  ./recovery/root/plat_property_contexts
-5593b7960b46a1157615b7fda90f35c53c1bb18d2413b5beceebd5dc6f26466d  ./recovery/root/res/keys
-47ccbc6a446d1bf939c79f2669ca186733b5dffbdaff5af808b0c776436cf17b  ./recovery/root/res/images/change00004.png
-001c41070cb3f96fd95e93dcef2ea1a6c7f241bd11a3653f87f0eecea2da6dd1  ./recovery/root/res/images/erasing_text.png
-2051f6ee5437ba392e19ba95d2c8a302bd2671623b91896e47b4aab521d8ddac  ./recovery/root/res/images/change00003.png
-0120840477638d72370e3e3988f648fe2eeaf592a32dc96535c797bbcdff1741  ./recovery/root/res/images/poc_change00007.png
-6e6a249f1c75baaa2138bbe9240f041276bda475936bdf0714a816193327506d  ./recovery/root/res/images/poc_change00012.png
-6db4380f569cc461d175872f1e55648a081df7147a895e7cff295e51d2be3d8d  ./recovery/root/res/images/simple00010.png
-28485d8ef79ca83e6f56b2c919b898251151cc1cebbde1f3ffc31d83ee52dc7e  ./recovery/root/res/images/change00009.png
-958efbe2c47e15cd1d8c8121cdb018cbce1f9e6b2c14f7ee618dcfd9d12d61e0  ./recovery/root/res/images/poc_change00000.png
-3dd9717af3c2b008db3b3b2a57d33890d72fbfac425249a8ac152ca30bd3d5b8  ./recovery/root/res/images/indicator_off.png
-a488ec9c04f7535cad1110e2c3650708a00309923139e99689f9724190706559  ./recovery/root/res/images/progress_simple_empty.png
-2051f6ee5437ba392e19ba95d2c8a302bd2671623b91896e47b4aab521d8ddac  ./recovery/root/res/images/change00000.png
-3fb2c94ff89874a6a452ab2f24cd3cab3696b44411113b42172bd04f36df3ac4  ./recovery/root/res/images/icon_simple_error.png
-b4dd8baa8a9339c3cfbc2ee79141f95c0222e5605011b0cc5c6a493351e0823c  ./recovery/root/res/images/poc_change00005.png
-745e2981d8042f984c5c6942fc29270a9b60fa98170c269f41d0bdbd5c67e623  ./recovery/root/res/images/progress_empty.png
-8d3b4c627de34ceb0a48039dfc9c54ec33822562e7e6e8a898cd0576c91ab979  ./recovery/root/res/images/installing_text.png
-2051f6ee5437ba392e19ba95d2c8a302bd2671623b91896e47b4aab521d8ddac  ./recovery/root/res/images/change00002.png
-4eae88e6d6a5443d162736a86481afddbb735617048f2b976f49df872a663e31  ./recovery/root/res/images/simple00001.png
-fd84b1c971c80f1eaf9d1cdf1320ea47df94485c2ea12dd9df26e974d8edb5f3  ./recovery/root/res/images/stage_fill.png
-30a89ef3b58a5561d324148e07263a6d780bd26b27c9f8905b77e6f5339a3dfc  ./recovery/root/res/images/indicator_on.png
+4c1fa145fad89570980d71b496731a018de302e6456e24376c219c44c536f0db  ./recovery/root/res/images/stage_empty.png
+47ccbc6a446d1bf939c79f2669ca186733b5dffbdaff5af808b0c776436cf17b  ./recovery/root/res/images/change00007.png
+b7ed040ebe8e4801fb258a4c4a99257c725c4e35689ec4da107f54887efc1ec1  ./recovery/root/res/images/simple00000.png
 23237ac83ce5483656226ad39e6cb3b5ccb5b852b8b6dac7c538a5df398cfa85  ./recovery/root/res/images/poc_change00008.png
 23237ac83ce5483656226ad39e6cb3b5ccb5b852b8b6dac7c538a5df398cfa85  ./recovery/root/res/images/poc_change00008.png
-47ccbc6a446d1bf939c79f2669ca186733b5dffbdaff5af808b0c776436cf17b  ./recovery/root/res/images/change00005.png
-559b36f43e5552cd5d5767a78de437f63c635e86498b574f0c5a3ea095808ad1  ./recovery/root/res/images/simple00011.png
+47ccbc6a446d1bf939c79f2669ca186733b5dffbdaff5af808b0c776436cf17b  ./recovery/root/res/images/change00006.png
 dab327d8d4965eba64e0e7b257c32866187434f14f868ce588fb3d96c9f2e998  ./recovery/root/res/images/poc_change00006.png
 dab327d8d4965eba64e0e7b257c32866187434f14f868ce588fb3d96c9f2e998  ./recovery/root/res/images/poc_change00006.png
-9c23a78638158ff34acdb29ff7e9b6005623c2d21ea42d41223d14bc1bb2c467  ./recovery/root/res/images/poc_change00002.png
-28485d8ef79ca83e6f56b2c919b898251151cc1cebbde1f3ffc31d83ee52dc7e  ./recovery/root/res/images/change00011.png
-fec501aab0b89adf0ca0751e619ac4a294c05e9633c9b50ea88c634b40640d7f  ./recovery/root/res/images/res_info
+4eae88e6d6a5443d162736a86481afddbb735617048f2b976f49df872a663e31  ./recovery/root/res/images/simple00001.png
 e60ab702201a8086eaf99b619386eed5b6ba8b4e350ed8b819b48b6977a6fd1a  ./recovery/root/res/images/simple00013.png
 e60ab702201a8086eaf99b619386eed5b6ba8b4e350ed8b819b48b6977a6fd1a  ./recovery/root/res/images/simple00013.png
+28485d8ef79ca83e6f56b2c919b898251151cc1cebbde1f3ffc31d83ee52dc7e  ./recovery/root/res/images/change00011.png
 28485d8ef79ca83e6f56b2c919b898251151cc1cebbde1f3ffc31d83ee52dc7e  ./recovery/root/res/images/change00008.png
 28485d8ef79ca83e6f56b2c919b898251151cc1cebbde1f3ffc31d83ee52dc7e  ./recovery/root/res/images/change00008.png
+2051f6ee5437ba392e19ba95d2c8a302bd2671623b91896e47b4aab521d8ddac  ./recovery/root/res/images/change00000.png
+f7f1c3efed3139a14649915806c86bdb20531c3a2d1c833d9d4366650d130d5e  ./recovery/root/res/images/poc_change00009.png
+3dd9717af3c2b008db3b3b2a57d33890d72fbfac425249a8ac152ca30bd3d5b8  ./recovery/root/res/images/indicator_off.png
+af11460f8463943befc9bed4eba90e45ae4b9af3ca26396dab53acb39f59bad3  ./recovery/root/res/images/icon_change_simcard.png
+28485d8ef79ca83e6f56b2c919b898251151cc1cebbde1f3ffc31d83ee52dc7e  ./recovery/root/res/images/change00010.png
+fd84b1c971c80f1eaf9d1cdf1320ea47df94485c2ea12dd9df26e974d8edb5f3  ./recovery/root/res/images/stage_fill.png
+6a910bbb77d0942e7ff8c9dee414db3da159bb0683cb031ee790b095254e1b35  ./recovery/root/res/images/simple00012.png
 4d3c890b6c0225a89925142e7f34882b8acbbeb08cb15c98a09abb75e2de2947  ./recovery/root/res/images/simple00008.png
 4d3c890b6c0225a89925142e7f34882b8acbbeb08cb15c98a09abb75e2de2947  ./recovery/root/res/images/simple00008.png
-9d4df95e86676b949f7b2718d3abc40c8ff4adab9617f0d7e9d693e0ef010ea1  ./recovery/root/res/images/font_percentage.png
-9247e466a4bdff143188c253c92b2176c0836f5dd1b133134595bd56b2260c3a  ./recovery/root/res/images/simple00002.png
-4c1fa145fad89570980d71b496731a018de302e6456e24376c219c44c536f0db  ./recovery/root/res/images/stage_empty.png
+2051f6ee5437ba392e19ba95d2c8a302bd2671623b91896e47b4aab521d8ddac  ./recovery/root/res/images/change00003.png
+2051f6ee5437ba392e19ba95d2c8a302bd2671623b91896e47b4aab521d8ddac  ./recovery/root/res/images/change00002.png
+7a41a626f054f5974a5fbe6c93bbe2785bf4f50153d87d98700ea7c96a24748c  ./recovery/root/res/images/poc_change00004.png
+748123c5a8c6766333ae98e5a1e77eae9652fb9741b6601b20c49c03b7d0ddf5  ./recovery/root/res/images/installing_security_text.png
+b4dd8baa8a9339c3cfbc2ee79141f95c0222e5605011b0cc5c6a493351e0823c  ./recovery/root/res/images/poc_change00005.png
+9440c9f63c5cc03b90d8435b3e459a5dc499308b3120fd2aa7ec1735cd5a0be9  ./recovery/root/res/images/font.png
+dfed67ccbec7c1b3a12efbb185ee925d8cf8279920dd629484f415daf4099803  ./recovery/root/res/images/simple00014.png
 c183703265e5bf780969e37d5e3fc60c20215c42cbcf0f49b3f052cd0a8f0416  ./recovery/root/res/images/simple00009.png
 c183703265e5bf780969e37d5e3fc60c20215c42cbcf0f49b3f052cd0a8f0416  ./recovery/root/res/images/simple00009.png
+958efbe2c47e15cd1d8c8121cdb018cbce1f9e6b2c14f7ee618dcfd9d12d61e0  ./recovery/root/res/images/poc_change00000.png
+3fb2c94ff89874a6a452ab2f24cd3cab3696b44411113b42172bd04f36df3ac4  ./recovery/root/res/images/icon_simple_error.png
+9f7f72554190524f6da9bbed5dede9ab5ee45b1505e672dfe50eebb19f99d7ee  ./recovery/root/res/images/icon_simple_android.png
+30a89ef3b58a5561d324148e07263a6d780bd26b27c9f8905b77e6f5339a3dfc  ./recovery/root/res/images/indicator_on.png
+5f7a8592b9511040367a18a36045c06abfce8fd90e4603921be954bd10aadf30  ./recovery/root/res/images/poc_change00013.png
+6db4380f569cc461d175872f1e55648a081df7147a895e7cff295e51d2be3d8d  ./recovery/root/res/images/simple00010.png
+28485d8ef79ca83e6f56b2c919b898251151cc1cebbde1f3ffc31d83ee52dc7e  ./recovery/root/res/images/change00009.png
+7aca0e83ba846e7b6bb33ef82bc5374ef9a0536b198b5b3a3a38e89d562b165c  ./recovery/root/res/images/simple00007.png
+cfa94f8af03399c3ccd0522a3610eeba079fc64c99d724e9235d8bb030a337b3  ./recovery/root/res/images/simple00005.png
+fec501aab0b89adf0ca0751e619ac4a294c05e9633c9b50ea88c634b40640d7f  ./recovery/root/res/images/res_info
+a11150c8a73789e2d7fcef9489d28a75f588dd4c78b1984553e2e2a63996e836  ./recovery/root/res/images/poc_change00003.png
+9c23a78638158ff34acdb29ff7e9b6005623c2d21ea42d41223d14bc1bb2c467  ./recovery/root/res/images/poc_change00002.png
+47ccbc6a446d1bf939c79f2669ca186733b5dffbdaff5af808b0c776436cf17b  ./recovery/root/res/images/change00004.png
+c229c76130976a1df9a91057f855aab14620a9a1a39719ef32367b17218a5d82  ./recovery/root/res/images/simple00004.png
+8d3b4c627de34ceb0a48039dfc9c54ec33822562e7e6e8a898cd0576c91ab979  ./recovery/root/res/images/installing_text.png
 b4b0d7fbee5563e184f09a85b5c7faa9d28fd604ff2df43e7cb5f4db05802fc9  ./recovery/root/res/images/error_text.png
 b4b0d7fbee5563e184f09a85b5c7faa9d28fd604ff2df43e7cb5f4db05802fc9  ./recovery/root/res/images/error_text.png
-4adf5a8a6871c9fc5af4424e902d78e94e3ac60b28f0bb0eb8ffd9074246badf  ./recovery/root/res/images/poc_change00014.png
-6a910bbb77d0942e7ff8c9dee414db3da159bb0683cb031ee790b095254e1b35  ./recovery/root/res/images/simple00012.png
+a488ec9c04f7535cad1110e2c3650708a00309923139e99689f9724190706559  ./recovery/root/res/images/progress_simple_empty.png
+2051f6ee5437ba392e19ba95d2c8a302bd2671623b91896e47b4aab521d8ddac  ./recovery/root/res/images/change00001.png
+47ccbc6a446d1bf939c79f2669ca186733b5dffbdaff5af808b0c776436cf17b  ./recovery/root/res/images/change00005.png
+6e6a249f1c75baaa2138bbe9240f041276bda475936bdf0714a816193327506d  ./recovery/root/res/images/poc_change00012.png
+980b3fa6936f88604ebd62f84663a8f2fe1430e0354906cc5e90f3db77080bea  ./recovery/root/res/images/progress_fill.png
+fb92d2fbcb1ea4ad3c601b067492647671c82f570c707d7a2c28703a52d722bf  ./recovery/root/res/images/no_command_text.png
+9247e466a4bdff143188c253c92b2176c0836f5dd1b133134595bd56b2260c3a  ./recovery/root/res/images/simple00002.png
 c279514056a68e6b31193562d3a19b5320589de6331ff0248e0065ea41def363  ./recovery/root/res/images/poc_change00011.png
 c279514056a68e6b31193562d3a19b5320589de6331ff0248e0065ea41def363  ./recovery/root/res/images/poc_change00011.png
+0120840477638d72370e3e3988f648fe2eeaf592a32dc96535c797bbcdff1741  ./recovery/root/res/images/poc_change00007.png
+4adf5a8a6871c9fc5af4424e902d78e94e3ac60b28f0bb0eb8ffd9074246badf  ./recovery/root/res/images/poc_change00014.png
 702f8c92f60bfc2c13ca55a74944f6ed4a1748df3b7b100879bd5c174dc74206  ./recovery/root/res/images/poc_change00010.png
 702f8c92f60bfc2c13ca55a74944f6ed4a1748df3b7b100879bd5c174dc74206  ./recovery/root/res/images/poc_change00010.png
-7aca0e83ba846e7b6bb33ef82bc5374ef9a0536b198b5b3a3a38e89d562b165c  ./recovery/root/res/images/simple00007.png
-dfed67ccbec7c1b3a12efbb185ee925d8cf8279920dd629484f415daf4099803  ./recovery/root/res/images/simple00014.png
-5f7a8592b9511040367a18a36045c06abfce8fd90e4603921be954bd10aadf30  ./recovery/root/res/images/poc_change00013.png
-7a41a626f054f5974a5fbe6c93bbe2785bf4f50153d87d98700ea7c96a24748c  ./recovery/root/res/images/poc_change00004.png
-f7f1c3efed3139a14649915806c86bdb20531c3a2d1c833d9d4366650d130d5e  ./recovery/root/res/images/poc_change00009.png
-9440c9f63c5cc03b90d8435b3e459a5dc499308b3120fd2aa7ec1735cd5a0be9  ./recovery/root/res/images/font.png
-47ccbc6a446d1bf939c79f2669ca186733b5dffbdaff5af808b0c776436cf17b  ./recovery/root/res/images/change00006.png
 36ad0f5f0fe17ca781a34397216c28ca6c17b5b4c8a53785ec795cc2565a494d  ./recovery/root/res/images/simple00006.png
 36ad0f5f0fe17ca781a34397216c28ca6c17b5b4c8a53785ec795cc2565a494d  ./recovery/root/res/images/simple00006.png
-a11150c8a73789e2d7fcef9489d28a75f588dd4c78b1984553e2e2a63996e836  ./recovery/root/res/images/poc_change00003.png
 176416596ee4c4bb7c0fa0d78b295b968962332903a5a07d789ebd0f8fa9a0ad  ./recovery/root/res/images/progress_simple_fill.png
 176416596ee4c4bb7c0fa0d78b295b968962332903a5a07d789ebd0f8fa9a0ad  ./recovery/root/res/images/progress_simple_fill.png
-980b3fa6936f88604ebd62f84663a8f2fe1430e0354906cc5e90f3db77080bea  ./recovery/root/res/images/progress_fill.png
-af11460f8463943befc9bed4eba90e45ae4b9af3ca26396dab53acb39f59bad3  ./recovery/root/res/images/icon_change_simcard.png
-28485d8ef79ca83e6f56b2c919b898251151cc1cebbde1f3ffc31d83ee52dc7e  ./recovery/root/res/images/change00010.png
-fb92d2fbcb1ea4ad3c601b067492647671c82f570c707d7a2c28703a52d722bf  ./recovery/root/res/images/no_command_text.png
-cfa94f8af03399c3ccd0522a3610eeba079fc64c99d724e9235d8bb030a337b3  ./recovery/root/res/images/simple00005.png
-b7ed040ebe8e4801fb258a4c4a99257c725c4e35689ec4da107f54887efc1ec1  ./recovery/root/res/images/simple00000.png
-47ccbc6a446d1bf939c79f2669ca186733b5dffbdaff5af808b0c776436cf17b  ./recovery/root/res/images/change00007.png
+001c41070cb3f96fd95e93dcef2ea1a6c7f241bd11a3653f87f0eecea2da6dd1  ./recovery/root/res/images/erasing_text.png
+559b36f43e5552cd5d5767a78de437f63c635e86498b574f0c5a3ea095808ad1  ./recovery/root/res/images/simple00011.png
 1c733b6fb841334226cdfd43def94e2ddc25ba2bdc5e5fee7021b7dd7de5883c  ./recovery/root/res/images/simple00003.png
 1c733b6fb841334226cdfd43def94e2ddc25ba2bdc5e5fee7021b7dd7de5883c  ./recovery/root/res/images/simple00003.png
-2051f6ee5437ba392e19ba95d2c8a302bd2671623b91896e47b4aab521d8ddac  ./recovery/root/res/images/change00001.png
-748123c5a8c6766333ae98e5a1e77eae9652fb9741b6601b20c49c03b7d0ddf5  ./recovery/root/res/images/installing_security_text.png
-9f7f72554190524f6da9bbed5dede9ab5ee45b1505e672dfe50eebb19f99d7ee  ./recovery/root/res/images/icon_simple_android.png
+9d4df95e86676b949f7b2718d3abc40c8ff4adab9617f0d7e9d693e0ef010ea1  ./recovery/root/res/images/font_percentage.png
+745e2981d8042f984c5c6942fc29270a9b60fa98170c269f41d0bdbd5c67e623  ./recovery/root/res/images/progress_empty.png
 4e67c262bf019047fc746720cb71f8c700e1125a0e6dd19f532610d4240611b4  ./recovery/root/res/images/poc_change00001.png
 4e67c262bf019047fc746720cb71f8c700e1125a0e6dd19f532610d4240611b4  ./recovery/root/res/images/poc_change00001.png
-c229c76130976a1df9a91057f855aab14620a9a1a39719ef32367b17218a5d82  ./recovery/root/res/images/simple00004.png
 3bb5249931fb973fea8cf31ac582d6b9ad53d4e90b9e38878856736f7ed8802b  ./recovery/root/res/recovery.do
 3bb5249931fb973fea8cf31ac582d6b9ad53d4e90b9e38878856736f7ed8802b  ./recovery/root/res/recovery.do
-629f64f534991ec923dc4e66b3b308ef7ea94874b006cbb42b0dc73424b945fa  ./recovery/root/prop.default
-75e32f537e4d8064bbaa18b5b5f18b1ea4ffaa884b92546c3f1d0191a0a1f577  ./recovery/root/vendor_service_contexts
-985fe8f3e4466dc73b4b1ec981732a266a5cd8db2518b958b40a64328e2921ae  ./recovery/root/sbin/mke2fs_static
-5eaec5790dfef5015a40bba17489bc7bafc75149282b3585cb25fd6e85467c3b  ./recovery/root/sbin/knox_changer
+5593b7960b46a1157615b7fda90f35c53c1bb18d2413b5beceebd5dc6f26466d  ./recovery/root/res/keys
+0c1471d080d64fd83875db80b8e99b0f73f76071cd6a12a1293f17e2e00abe04  ./recovery/root/vendor_hwservice_contexts
+7e1e97fd432c8f553253fd5a035c9832f0152689f596cca905e8c63ff8b5f64b  ./recovery/root/vendor_seapp_contexts
+117d3610a1651d0fc88860bed8c4d5861b19325fc4449e5cf7b22911884e92f8  ./recovery/root/fstab.samsungexynos8895
+7bdff387f8ef141c44974dce34f7b543be328f1ff09125a101064e49fb7a8aac  ./recovery/root/vendor_file_contexts
+95fa81794bef792968f7e511bdfd5089f4a555ffe99421e31e323ee526d2bf73  ./recovery/root/sepolicy_version
+1c6ad1c270126132a14078be8e5662bc643788f12561e782c3ca6e024c150fa0  ./recovery/root/init.rc
+6e87de3d4146c1e296b8a55fce3c2e7c3717f5b8ff2ce18e63f14d82c503f098  ./recovery/root/plat_file_contexts
+ff6e9c2fa0f118eeea5acc1d1a5f0858c14081f9e843ecfd56faca3ffa4eb37d  ./recovery/root/mcRegistry/ffffffffd0000000000000000000000a.tlbin
+5949cd0e0df1a35fe5e1190703ba7962a10e8bc5742e0c6f876b210432dc046e  ./recovery/root/mcRegistry/ffffffff000000000000000000000019.tlbin
+a713f037b605b235700127c5a2e71d0864ca9c113e2a331d2df706f5608ce018  ./recovery/root/mcRegistry/ffffffff00000000000000000000000d.tlbin
+36b51f8817dcb5ffe5288187a67e4e2c60cbae305270418cf0cee8c489e2897e  ./recovery/root/publiccert.pem
 34bba842f95758bbc9702b83e61dbeadf3d7a9885ff1b7cba2baf0f8a81db4bc  ./recovery/root/sbin/sswap
 34bba842f95758bbc9702b83e61dbeadf3d7a9885ff1b7cba2baf0f8a81db4bc  ./recovery/root/sbin/sswap
-be63c6a266bd5bd870cc6572354f4eef66a0e1c986c1c7e1d3aebf9f8cfa54c1  ./recovery/root/sbin/recovery
-eb78d371fa3ba5da9a334292e993a083d9700b171656716b300caa3fa5fa8b3b  ./recovery/root/sbin/e2fsdroid_static
-718371bfbc1f12579f51bba15371c2fd0719df35a31c77652dad82fbc811c75d  ./recovery/root/sbin/adbd
+a5c12dbf9b3072d09d63cdc80ba6c20ed41165a0628b2fa9e0d846cfe7973814  ./recovery/root/sbin/dm_verity_hash
 c258f4be15970da1e658fcf097e2c95fc46e80f6582bd033c87a65b131c3141b  ./recovery/root/sbin/dm_verity_signature_checker
 c258f4be15970da1e658fcf097e2c95fc46e80f6582bd033c87a65b131c3141b  ./recovery/root/sbin/dm_verity_signature_checker
+3a69699c095edcd2cfff85233730c131b3c1d85b353f0b4075021daa94b48397  ./recovery/root/sbin/e2fsdroid_static
+985fe8f3e4466dc73b4b1ec981732a266a5cd8db2518b958b40a64328e2921ae  ./recovery/root/sbin/mke2fs_static
 4f784e837137517999300322146460cd12166be25dff70bdfe2f08b6ecda36c6  ./recovery/root/sbin/mcDriverDaemon_static
 4f784e837137517999300322146460cd12166be25dff70bdfe2f08b6ecda36c6  ./recovery/root/sbin/mcDriverDaemon_static
-8beeb022beeb6cddf59750a08582e2068e27688b67ddec1e9b91d152105b17b3  ./recovery/root/sbin/charger
+5eaec5790dfef5015a40bba17489bc7bafc75149282b3585cb25fd6e85467c3b  ./recovery/root/sbin/knox_changer
+4a1e287caabce6a774978a9b6c1a1e902b0b7dc409975889b6c4e956160605d2  ./recovery/root/sbin/adbd
+76b6f9f8f17dffde3ab06588d79178f17ab61704f6ec35ea8a0c0d929af35d01  ./recovery/root/sbin/charger
+a6501d92595bc06bb6f9be0729e351f6c97167db7ad3be9fefe4a202c5463a2e  ./recovery/root/sbin/recovery
 a0e36f5f9ecb152697fe814e5e091e4d41d36ff2540c2fc7a62e3da7b0f6397d  ./recovery/root/sbin/dm_verity_tz_cmd
 a0e36f5f9ecb152697fe814e5e091e4d41d36ff2540c2fc7a62e3da7b0f6397d  ./recovery/root/sbin/dm_verity_tz_cmd
-a5c12dbf9b3072d09d63cdc80ba6c20ed41165a0628b2fa9e0d846cfe7973814  ./recovery/root/sbin/dm_verity_hash
-47eb8cac3011cd149d27344fd698d1703ad0dab56ccc625ab6c6bc1eb5631348  ./recovery/root/audit_filter_table
-697fc32a726f454278424225370f12d9fb69a6c260391799cb7a15205f637054  ./recovery/root/vendor_seapp_contexts
-87949e52279a51d5c3de68093ea98b0630be24f435525ea21466a9c0251670ec  ./recovery/root/plat_service_contexts
-5949cd0e0df1a35fe5e1190703ba7962a10e8bc5742e0c6f876b210432dc046e  ./recovery/root/mcRegistry/ffffffff000000000000000000000019.tlbin
-ff6e9c2fa0f118eeea5acc1d1a5f0858c14081f9e843ecfd56faca3ffa4eb37d  ./recovery/root/mcRegistry/ffffffffd0000000000000000000000a.tlbin
-a713f037b605b235700127c5a2e71d0864ca9c113e2a331d2df706f5608ce018  ./recovery/root/mcRegistry/ffffffff00000000000000000000000d.tlbin
-49fb8bb30a2fe2c3a85584b8567d3f7d007fef2d805f3f0271e90bf686150c17  ./recovery/root/vendor_hwservice_contexts
-60312cc1419f438481ae0de375b4d147a88d436754a7e39a4fec78e37da3ad7c  ./recovery/root/plat_seapp_contexts
+852ec77ce415d58b891876eb65cfdcfb2eaedc56302a55630670437282a3fbe7  ./recovery/root/plat_hwservice_contexts
 906c402804f3bfb5ccc10ceeeeb84383682232686a294b19d35a7c41afc88615  ./recovery/root/etc/mke2fs.conf
 52441e7b11de9b12706bd50b2a2a7cf2525f57b7bf243b711d9458e6d46c05d8  ./recovery/root/etc/recovery.fstab
 906c402804f3bfb5ccc10ceeeeb84383682232686a294b19d35a7c41afc88615  ./recovery/root/etc/mke2fs.conf
 52441e7b11de9b12706bd50b2a2a7cf2525f57b7bf243b711d9458e6d46c05d8  ./recovery/root/etc/recovery.fstab
-0383ae8a83117582d49015ed77fd498c8da2144828b7103d7f7f1ea8535e08cb  ./recovery/root/vendor_property_contexts
-d7ef2b86ecd75047c2914a8d24bd9f690079cd280b510893919092e86cdd2612  ./recovery/root/vendor_file_contexts
-36b51f8817dcb5ffe5288187a67e4e2c60cbae305270418cf0cee8c489e2897e  ./recovery/root/publiccert.pem
-852ec77ce415d58b891876eb65cfdcfb2eaedc56302a55630670437282a3fbe7  ./recovery/root/plat_hwservice_contexts
-46e6d61c2f1d314fe44d644d7511ecc9fe16b6f43ec61fdae72ddbda29742c9f  ./recovery/root/sepolicy
-ad8ba192e8db2ecc66096961be9b5b357aa6914419cc606d23100ac4b44cd582  ./recovery/root/init
-f3d96eca897124530ef90171821cb68b9b849564e06983bdd7b9515ae9acb205  ./recovery/root/sepolicy_version
+75e32f537e4d8064bbaa18b5b5f18b1ea4ffaa884b92546c3f1d0191a0a1f577  ./recovery/root/vendor_service_contexts
+4932714de34e22ab86c4657cbf59dd96f8659f27b6884c4a5f373aba8110e96e  ./recovery/root/plat_service_contexts
 4c94b8657cb4f7558497cb1a47f7c60ca7274e4a729cb0a921cda14efdaa227e  ./recovery/root/ueventd.samsungexynos8895.rc
 4c94b8657cb4f7558497cb1a47f7c60ca7274e4a729cb0a921cda14efdaa227e  ./recovery/root/ueventd.samsungexynos8895.rc
+b8ef339c67859dfaeb8f1bf0ba368e2443d58a4fa28b2965a093bebacf207ec2  ./recovery/root/audit_filter_table
+ee110e30f722cc49f3e03e7e05b8b84b937743f5569b85333542341739761a61  ./recovery/root/vendor_property_contexts
+b9c8d705269c7f53eced93d36917f681e513a21ee5c003eabe5dce30659f569e  ./recovery/root/prop.default
+8af15238f049b12f98625504d850b33d02a6ea3f7c96c30dadce51c1c874747c  ./recovery/root/vndservice_contexts
+5ab08537cf0e9fe55c44c422eb5cec22ec9500a4ddbc50fd3764132185d2edc2  ./recovery/root/init
 4dfd8860be6d10b31db525c56972c3b85617f1779b3b36b44984d4f99fbcdf40  ./recovery/root/ueventd.rc
 ca8e348081c2a9b325dd40ca296ec9697f0687dae028c3b1a7310f9a7557474d  ./recovery/root/atrace.rc
 4dfd8860be6d10b31db525c56972c3b85617f1779b3b36b44984d4f99fbcdf40  ./recovery/root/ueventd.rc
 ca8e348081c2a9b325dd40ca296ec9697f0687dae028c3b1a7310f9a7557474d  ./recovery/root/atrace.rc
-1c6ad1c270126132a14078be8e5662bc643788f12561e782c3ca6e024c150fa0  ./recovery/root/init.rc
-6e87de3d4146c1e296b8a55fce3c2e7c3717f5b8ff2ce18e63f14d82c503f098  ./recovery/root/plat_file_contexts
-117d3610a1651d0fc88860bed8c4d5861b19325fc4449e5cf7b22911884e92f8  ./recovery/root/fstab.samsungexynos8895
-fa48525def04b26023fbf84f67b8a9ad34c4b2ef36e839511242395d50495ad8  ./system/vendor/bin/pm_proxy_helper
-5c53ff66fef4ad7be9200aabe3c30287f1c0fba71325aa0bdf2315ba0378f60d  ./system/vendor/bin/sh
-2a2ab067003fad715f9798ef23ebf227ddce9e8c712563c2e6833043d7410178  ./system/vendor/bin/vendor.samsung.security.skpm@1.0-service
+60312cc1419f438481ae0de375b4d147a88d436754a7e39a4fec78e37da3ad7c  ./recovery/root/plat_seapp_contexts
+67dafb9ef8800d942bfcb2b3e18262ad6447f776b3635b37f6291f66f88e4eac  ./recovery/root/sepolicy
+80b2b244c85a6ee3408ce304d2ffeaea5af3796cf7d817555efa3fd40c9b0e9a  ./system/vendor/bin/toybox_vendor
 201d83a1c12bdc8d71b372c4694cf0f39c17eec8c626a50c97ebe7fb70409b4b  ./system/vendor/bin/awk
 201d83a1c12bdc8d71b372c4694cf0f39c17eec8c626a50c97ebe7fb70409b4b  ./system/vendor/bin/awk
+fa48525def04b26023fbf84f67b8a9ad34c4b2ef36e839511242395d50495ad8  ./system/vendor/bin/pm_proxy_helper
+994d0af60ae43ff172a5c074ed5fed8fdde326716ed9ed6468af12ce4ef30e9b  ./system/vendor/bin/vendor.samsung.security.skpm@1.0-service
+a334246f53bd614ea3530baf49acec645ae37c7ed4f62f7d73c8d071db789671  ./system/vendor/bin/vendor.samsung.security.wsm@1.0-service
+d21c268af1a1c5d1468758edb504c94c755094a7feef4d36fa20c3559f1e241d  ./system/vendor/bin/argosd
+38d8e9c1b0e61752ebfda327dfba40588a3bad422ecb08702953ab9a9cf703a7  ./system/vendor/bin/logwrapper
+148e85cce90f23acde88d8e7adefb727578a39c7e0d53460891c47947538df24  ./system/vendor/bin/toolbox
 896a18e5989e1fb5eebaf1e3ed2c350360a0fe2c3ab6db40d0cce903c2b1eeda  ./system/vendor/bin/mcDriverDaemon
 896a18e5989e1fb5eebaf1e3ed2c350360a0fe2c3ab6db40d0cce903c2b1eeda  ./system/vendor/bin/mcDriverDaemon
-146a4573c417679164271eef8e934a4c9028845bcce05f63aebee2c5d0084675  ./system/vendor/bin/vendor.samsung.security.wsm@1.0-service
-506c07e4c8dd8ff9eaaf720b879a2ca0c002c7c8b5d19ec4deef3f176721dd15  ./system/vendor/bin/hw/vendor.samsung_slsi.hardware.ExynosHWCServiceTW@1.0-service
-5eaaec9cba821c88e010653925dfca00a6903925d00d29c17f586a8513db79f2  ./system/vendor/bin/hw/gpsd
-e78465a549f87897193a83939b939e641dcd76d57b5ffd4d564df708ee1b11d5  ./system/vendor/bin/hw/vendor.trustonic.tee@1.0-service
-3480c8cebf4f9fd0346558d9884425311c1674f4faebdec0c81f5af398a32ccb  ./system/vendor/bin/hw/android.hardware.sensors@1.0-service
-7fecbd0fdc37f6d1015b4c091175c0fb413d3eb41d30781a1512a68990779e0c  ./system/vendor/bin/hw/android.hardware.usb@1.1-service.samsung
-d73a26431398328f192c4de9e82e4bcb7ea8eea56de74333d3cb47f0bb0f9c11  ./system/vendor/bin/hw/android.hardware.health@2.0-service.samsung
-33fac3bc221dd27ce42031d4623e5d284b4c4da7a952eb8fd9215f0c98c84136  ./system/vendor/bin/hw/vendor.samsung.hardware.radio.configsvc@1.0-service
-4c56490169c629e296e8e61ce6ce7a839daf3a9395e5aefccf8e63f032912147  ./system/vendor/bin/hw/android.hardware.gatekeeper@1.0-service
-e73f2c89ba9b2c9c46510c325e1d82a4bcf8dd3fe0eda660559e12b71fd72de7  ./system/vendor/bin/hw/android.hardware.drm@1.0-service
+39e2bbbc8b12b6abe23a3636ba52517cb7f8ea3cb7bd0597ecdd5f67bd15b0da  ./system/vendor/bin/vendor.samsung.security.wvkprov_server@1.0-service
+843eb90df083da5f33999177eea7f12dac7cd9a465cd4d574cb821bc40820427  ./system/vendor/bin/wvkprov
+586d43914301c010831b5665a10f4b9159a2af1dd7c9b27047a9be3b27d965df  ./system/vendor/bin/vndservicemanager
+5c53ff66fef4ad7be9200aabe3c30287f1c0fba71325aa0bdf2315ba0378f60d  ./system/vendor/bin/sh
+6c08deb7f66e91a137c97503c5d58ce8ea8c3e73f53ced08e046e01b5dda27dd  ./system/vendor/bin/hw/vendor.trustonic.teeregistry@1.0-service
 faa5b57f8a1efbd7cbe94a57fed2efa00246745a89e7ca511d68779d0fb6861a  ./system/vendor/bin/hw/lhd
 faa5b57f8a1efbd7cbe94a57fed2efa00246745a89e7ca511d68779d0fb6861a  ./system/vendor/bin/hw/lhd
-2940e018c9376d0a0b589b86ff61585b145c21ee102095dc4c20da0f0c05e439  ./system/vendor/bin/hw/mfgloader
-0f996815451b905364f471880762b7109c505039131763d9042dfa84f60eaa63  ./system/vendor/bin/hw/android.hardware.configstore@1.1-service
-19755849f9016fa9391cf17d6adbd618996d9a6b6e53e08fb8ffcb8cab5ee66c  ./system/vendor/bin/hw/sec.android.hardware.nfc@1.1-service
-b1675207f4c3f6320fc17a8006fa9f8a1748c4b6efacbe4ba77c0c1d98db02e3  ./system/vendor/bin/hw/hostapd
-f056c4c0419f5254f13bd1339063fb1411b53497311a192cac1694d0cc004e14  ./system/vendor/bin/hw/android.hardware.power@1.0-service
-cf4e2dd238699ffda81b3d67cffc464ee4b1117337f1787828034257b7894bca  ./system/vendor/bin/hw/android.hardware.bluetooth@1.0-service
-fccbf60a60f77eab2be9a162e7be71bbfc095629a5825ee6ff68419da3594da7  ./system/vendor/bin/hw/vendor.samsung.hardware.vibrator@1.0-service
+2b21ea22e35a6854c4aa6224eefc8c074905fce2b2318b76c833c8fe92602e68  ./system/vendor/bin/hw/android.hardware.bluetooth@1.0-service
+a2fbf057720baff2848281faaf8c692b5839d53c8eede2b9a72f9310e427ab11  ./system/vendor/bin/hw/android.hardware.audio@2.0-service
+6087aa955a1b03c3aabda9b85b85d3cfb35379887815781a7e41a95177ec8cda  ./system/vendor/bin/hw/android.hardware.drm@1.1-service.clearkey
+78e6bda29fc47dfa9a3319a07139bcb92d3ce93ce18d47124d7413b388b6a1b0  ./system/vendor/bin/hw/vendor.samsung_slsi.hardware.configstore@1.0-service
+71a17e039de8ffcd678f8d4b2e934528b7363b4b59a1799da84d3d456310e779  ./system/vendor/bin/hw/android.hardware.graphics.composer@2.1-service
+ff700cda481177ef20cb321b23d793f339ba677ef23e737b6ae8051ce6ed76b9  ./system/vendor/bin/hw/wldu
+4c56490169c629e296e8e61ce6ce7a839daf3a9395e5aefccf8e63f032912147  ./system/vendor/bin/hw/android.hardware.gatekeeper@1.0-service
+192e927a04c2adcdd3b422deb90fd32d677c2f918d57dc484b85c9063b9d03c5  ./system/vendor/bin/hw/android.hardware.health@2.0-service.samsung
+3480c8cebf4f9fd0346558d9884425311c1674f4faebdec0c81f5af398a32ccb  ./system/vendor/bin/hw/android.hardware.sensors@1.0-service
 efa5f0430f74cb2a5220c751be4b337e19be88bb48bb511d91d69a6d36de78d8  ./system/vendor/bin/hw/android.hardware.memtrack@1.0-service
 efa5f0430f74cb2a5220c751be4b337e19be88bb48bb511d91d69a6d36de78d8  ./system/vendor/bin/hw/android.hardware.memtrack@1.0-service
-2a9376bd06552564de5ccd29e29ab7869ae4958cc51255cbeb0bbd0f225b68e0  ./system/vendor/bin/hw/android.hardware.drm@1.1-service.clearkey
-6c00a40ed8efd9bca664c1ec77a1242af25064d6a442b4d4ea7c25bd105bcc93  ./system/vendor/bin/hw/android.hardware.wifi@1.0-service
-450412811d940a24fb6b206bedede0b9cccf95c949a09723bd028b3d118acaf7  ./system/vendor/bin/hw/vendor.samsung.hardware.light@2.0-service
-dd17d33ecf33caa1195bea525bfa2930662e8e71cab400d17e445bacb6e71b18  ./system/vendor/bin/hw/wpa_supplicant
+cfd3dd89ed5bb10f94cad335de38b2ad84bcd6f21de305b7f424c5e693ee4bd9  ./system/vendor/bin/hw/android.hardware.usb@1.1-service.samsung
+dc57f1028a046260595bd90d0ab4dd4603c4b256bf02adde47b56f6904760587  ./system/vendor/bin/hw/vendor.samsung.hardware.miscpower@1.0-service
+efcee404cccba9f980474e5b7cef5ea074b2c6ada4997201aec09978a1a7f3ca  ./system/vendor/bin/hw/android.hardware.drm@1.0-service
+7135958d2fbc1bfc1b2b41f2681a26392adb1fb24d027feb00f1d879471c8b4f  ./system/vendor/bin/hw/android.hardware.cas@1.0-service
 6c01ccaacd0af53b7f4b5de5b5171f1e326de75948d2101e648cbf6cc724ab19  ./system/vendor/bin/hw/android.hardware.light@2.0-service
 6c01ccaacd0af53b7f4b5de5b5171f1e326de75948d2101e648cbf6cc724ab19  ./system/vendor/bin/hw/android.hardware.light@2.0-service
-ba8d835ee14e6b42cd645df88d32079ca3f08076167285d3b5a44eda775ec0ae  ./system/vendor/bin/hw/vendor.samsung.hardware.gnss@1.0-service
-a2fbf057720baff2848281faaf8c692b5839d53c8eede2b9a72f9310e427ab11  ./system/vendor/bin/hw/android.hardware.audio@2.0-service
-b61e1f1e69100162e10e1e765da782fa3beebcde30a797c0ac31724be06cf3d4  ./system/vendor/bin/hw/vendor.samsung.hardware.miscpower@1.0-service
+e1412077f5e12cab4c7b9051c849b179e5cc536083d7fd6a985bd23d34543f28  ./system/vendor/bin/hw/android.hardware.media.omx@1.0-service
+f056c4c0419f5254f13bd1339063fb1411b53497311a192cac1694d0cc004e14  ./system/vendor/bin/hw/android.hardware.power@1.0-service
+450412811d940a24fb6b206bedede0b9cccf95c949a09723bd028b3d118acaf7  ./system/vendor/bin/hw/vendor.samsung.hardware.light@2.0-service
 803905f7b97e6897e34fdf20575ded85dcec2b5fc29df9e256573c3cd6d4aa56  ./system/vendor/bin/hw/android.hardware.keymaster@3.0-service
 803905f7b97e6897e34fdf20575ded85dcec2b5fc29df9e256573c3cd6d4aa56  ./system/vendor/bin/hw/android.hardware.keymaster@3.0-service
-e581f906631db317afe5ae391bf314751dfa9cc78c7ccb01f2ce7a55246b2cbd  ./system/vendor/bin/hw/android.hardware.thermal@1.0-service
-fb4254e6f4a1701147615f2f4cfdf6ebcfe41e9fa2c6fe9ee2b7e697811b0c45  ./system/vendor/bin/hw/android.hardware.vr@1.0-service
-eecfec1c37e55629f6d0266d7f1e106b780d8c4e29a47b802f5b1bb5f9189c99  ./system/vendor/bin/hw/vendor.samsung_slsi.hardware.configstore@1.0-service
+486a931ccb31af2ce656b1994f3d70ae04f1a82d7c71293ee69a5f0200becc36  ./system/vendor/bin/hw/hostapd
 b048dfcc3063718b49e04a69dbd84bc7d25157fd3ced0b64e75723eaf02cd0f9  ./system/vendor/bin/hw/rild
 b048dfcc3063718b49e04a69dbd84bc7d25157fd3ced0b64e75723eaf02cd0f9  ./system/vendor/bin/hw/rild
-71a17e039de8ffcd678f8d4b2e934528b7363b4b59a1799da84d3d456310e779  ./system/vendor/bin/hw/android.hardware.graphics.composer@2.1-service
-914a664cadd18da7ebd7417749242e5458e0d6334eecad9cec687057b393d4d6  ./system/vendor/bin/hw/android.hardware.cas@1.0-service
+d7cb6ae97f652c7ec1a7d7ba2e48eadea4dad431cd5b60e31815de9c38f5c9da  ./system/vendor/bin/hw/vendor.samsung.hardware.radio.configsvc@1.0-service
+e65e1f8277daba6536163f61333091fe07165bb6cd57defa8d0c284a3a07a17f  ./system/vendor/bin/hw/vendor.samsung.hardware.biometrics.fingerprint@2.1-service
+2b385406f7b257d896b4d3ba4c4adcbf717ec2ed7fddec60ce0449f45533ba64  ./system/vendor/bin/hw/vendor.samsung.hardware.vibrator@1.0-service
+ba8d835ee14e6b42cd645df88d32079ca3f08076167285d3b5a44eda775ec0ae  ./system/vendor/bin/hw/vendor.samsung.hardware.gnss@1.0-service
+0f996815451b905364f471880762b7109c505039131763d9042dfa84f60eaa63  ./system/vendor/bin/hw/android.hardware.configstore@1.1-service
+939af2ece6f69a9fb828953ef54c06e4ea5312dd918f3e545d6d8869f30763ae  ./system/vendor/bin/hw/android.hardware.wifi@1.0-service
+2940e018c9376d0a0b589b86ff61585b145c21ee102095dc4c20da0f0c05e439  ./system/vendor/bin/hw/mfgloader
+5eaaec9cba821c88e010653925dfca00a6903925d00d29c17f586a8513db79f2  ./system/vendor/bin/hw/gpsd
+e581f906631db317afe5ae391bf314751dfa9cc78c7ccb01f2ce7a55246b2cbd  ./system/vendor/bin/hw/android.hardware.thermal@1.0-service
 c83ac1a315b41e9ce1a022338f7f6635ed59a0661268fefd2903cb371060d513  ./system/vendor/bin/hw/android.hardware.graphics.allocator@2.0-service
 c83ac1a315b41e9ce1a022338f7f6635ed59a0661268fefd2903cb371060d513  ./system/vendor/bin/hw/android.hardware.graphics.allocator@2.0-service
-8e0c0e08ab864321c2608723701e1e4dbbc777c2e18535078b7b16814d30024b  ./system/vendor/bin/hw/android.hardware.drm@1.1-service.widevine
-6c2415e9f590aa44ae13d9b9d9d2c514e82d7906cec9542cb1405fd8ed73b81f  ./system/vendor/bin/hw/vendor.trustonic.teeregistry@1.0-service
-ff700cda481177ef20cb321b23d793f339ba677ef23e737b6ae8051ce6ed76b9  ./system/vendor/bin/hw/wldu
-57e966e024d054dd5819b141936042741c128d16e5058ba1716892d60a5e4184  ./system/vendor/bin/hw/android.hardware.media.omx@1.0-service
+a45483a3ad7ca43fc246a052112e0e349241b75bccc0e65b550245a1991ec7bc  ./system/vendor/bin/hw/vendor.trustonic.tee@1.0-service
+7098c5325a079d04f8a1f38e0577a6209f7fc513998c237e8d270d83916c5347  ./system/vendor/bin/hw/sec.android.hardware.nfc@1.1-service
+19af0e27cc30251e3a03fa5eceb273bf1c37288993200163a51018baf051180c  ./system/vendor/bin/hw/android.hardware.drm@1.1-service.widevine
+fd58fb76cb3c20c65139e157685449a8ca89e6588826067dfa8fe8d6573248f0  ./system/vendor/bin/hw/vendor.samsung_slsi.hardware.ExynosHWCServiceTW@1.0-service
+fb4254e6f4a1701147615f2f4cfdf6ebcfe41e9fa2c6fe9ee2b7e697811b0c45  ./system/vendor/bin/hw/android.hardware.vr@1.0-service
 f597d4d71d39dba36d0dbd7e76048716a95589b1bc81a97cda3ba6203e7557d6  ./system/vendor/bin/hw/macloader
 f597d4d71d39dba36d0dbd7e76048716a95589b1bc81a97cda3ba6203e7557d6  ./system/vendor/bin/hw/macloader
-22ad1aa70aebbb910b0ee2c394f15dd8fc7db2482c0c8eed405e3d59e74dc586  ./system/vendor/bin/hw/vendor.samsung.hardware.biometrics.fingerprint@2.1-service
-ba894b2956614b7f4e115f18f3d657c8c9f1a97c6da2b2610808022ac78011c0  ./system/vendor/bin/vndservice
-80b2b244c85a6ee3408ce304d2ffeaea5af3796cf7d817555efa3fd40c9b0e9a  ./system/vendor/bin/toybox_vendor
-586d43914301c010831b5665a10f4b9159a2af1dd7c9b27047a9be3b27d965df  ./system/vendor/bin/vndservicemanager
+619abd593e3f6d397f073d3bfc4eee476757438ffcd0bec01ec5f62248186113  ./system/vendor/bin/hw/wpa_supplicant
+b7f90c1a87e778c35c39ebd5a4f7b7421a2f87303b918addc967b282294207c2  ./system/vendor/bin/icd
 a32de4a2fb5adf359805230ce96e42fa809879191e7e6714386d1a4bb7e3eb98  ./system/vendor/bin/cbd
 a32de4a2fb5adf359805230ce96e42fa809879191e7e6714386d1a4bb7e3eb98  ./system/vendor/bin/cbd
+8a64aec180bafbbd861d1c3d1b43ae9d913da223168e6f9352fb8017737411d4  ./system/vendor/bin/vendor.samsung.security.sem@1.0-service
+ba894b2956614b7f4e115f18f3d657c8c9f1a97c6da2b2610808022ac78011c0  ./system/vendor/bin/vndservice
 75ef30135564abb4089ffda82d374e812327ed54155bc46e3df1d2c8e23bb48b  ./system/vendor/bin/grep
 75ef30135564abb4089ffda82d374e812327ed54155bc46e3df1d2c8e23bb48b  ./system/vendor/bin/grep
-38d8e9c1b0e61752ebfda327dfba40588a3bad422ecb08702953ab9a9cf703a7  ./system/vendor/bin/logwrapper
-d21c268af1a1c5d1468758edb504c94c755094a7feef4d36fa20c3559f1e241d  ./system/vendor/bin/argosd
-843eb90df083da5f33999177eea7f12dac7cd9a465cd4d574cb821bc40820427  ./system/vendor/bin/wvkprov
-d5c2c181bc5e61bcbbf99c4411d3acd371d7f0dc1a9e6a6a221ab0674eaa6083  ./system/vendor/bin/vendor.samsung.security.wvkprov_server@1.0-service
-148e85cce90f23acde88d8e7adefb727578a39c7e0d53460891c47947538df24  ./system/vendor/bin/toolbox
-b7f90c1a87e778c35c39ebd5a4f7b7421a2f87303b918addc967b282294207c2  ./system/vendor/bin/icd
-dece896892a9f29432e2ad060436dc98c9b92acf64c1c715ddf72316963df974  ./system/vendor/bin/vendor.samsung.security.sem@1.0-service
-2af4e17e087a7018c6c600f4d9a4cbe386879afcbef6c864c1183c8832f58169  ./tmp/update_binary
-22461ad2981d678dd8a85433dd685219c1c6a52dc1c5d168174a1ba4eb85ff85  ./system/bin/install-recovery.sh
+50325da06bb17a1fbfa35ffebaf132bc5f76857b4bb50c53f575eb58f30d85dd  ./tmp/update_binary
+1a59ae8de53d98448c3bc8cdcdd5bfefb2dbdf5992a4b0b56b7aff3b756f431d  ./system/bin/install-recovery.sh
index 0777cba669e0e193c75f6fafa3f7e0337d709e99..7bd0bdba49b0df3f2145178be64c490a1ba3634f 100755 (executable)
Binary files a/tools/dtbtool and b/tools/dtbtool differ