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>;
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_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 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,
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
#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"
};
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);
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 { \
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);
/*
};
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,
};
/**
* (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
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;
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)
{
- struct files_struct *files;
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;
}
-
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:
- put_files_struct(files);
+ mutex_unlock(&proc->files_lock);
return ret;
}
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);
}
/*
*/
static long task_close_fd(struct binder_proc *proc, unsigned int fd)
{
- struct files_struct *files = binder_get_files_struct(proc);
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;
- put_files_struct(files);
-
+err:
+ mutex_unlock(&proc->files_lock);
return retval;
}
&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);
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;
if (node->has_async_transaction) {
pending_async = true;
} else {
- node->has_async_transaction = 1;
+ node->has_async_transaction = true;
}
}
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) {
/*
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);
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);
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);
+ /*
+ * 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);
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;
(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)
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);
-
- 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:
- 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;
}
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);
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;
* 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);
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);
static void binder_deferred_func(struct work_struct *work)
{
struct binder_proc *proc;
+ struct files_struct *files;
+
int defer;
do {
}
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 (files)
+ put_files_struct(files);
} while (proc);
}
static DECLARE_WORK(binder_deferred_work, binder_deferred_func);
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);
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",
- S_IRUGO,
+ 0444,
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",
- S_IRUGO,
+ 0444,
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);
mm = alloc->vma_vm_mm;
if (mm) {
- down_write(&mm->mmap_sem);
+ down_read(&mm->mmap_sem);
vma = alloc->vma;
}
/* 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;
}
err_no_vma:
if (mm) {
- up_write(&mm->mmap_sem);
+ up_read(&mm->mmap_sem);
mmput(mm);
}
return vma ? -ENOMEM : -ESRCH;
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;
}
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,
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;
bool is_afc_tx;
bool tx_id_done;
int tx_id;
+ int tx_id_cnt;
u8 device_event;
int i2c_error_count;
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;
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 {
- /* 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);
-#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->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;
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: 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) {
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);
+ 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);
}
/*
"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 */
}
/* 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)) {
- u8 irq_src[2];
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));
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));
}
}
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;
}
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) {
/*** debugfs support ***/
-#ifdef CONFIG_DEBUG_FS
+#if defined(CONFIG_DEBUG_FS) && !defined(CONFIG_ARCH_EXYNOS)
#include <linux/debugfs.h>
static struct dentry *rootdir;
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;
}
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);
+#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);
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 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---
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
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
-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
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
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
DHDCFLAGS += -DWL11U -DMFP
DHDCFLAGS += -DBCMCCX
DHDCFLAGS += -DWES_SUPPORT
+ DHDCFLAGS += -DSUPPORT_RESTORE_SCAN_PARAMS
DHDCFLAGS += -DOKC_SUPPORT
DHDCFLAGS += -DWLTDLS
DHDCFLAGS += -DWLFBT
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)
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\""
-#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
DHDCFLAGS += -DWL11U -DMFP
DHDCFLAGS += -DBCMCCX
DHDCFLAGS += -DWES_SUPPORT
+ DHDCFLAGS += -DSUPPORT_RESTORE_SCAN_PARAMS
DHDCFLAGS += -DOKC_SUPPORT
DHDCFLAGS += -DWLTDLS
DHDCFLAGS += -DWLFBT
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
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)
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),)
# 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
# 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)
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
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 += -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
+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
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 -DSUPPORT_P2P_GO_PS,$(DHDCFLAGS))
# 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),)
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
# 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
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
DHDCFLAGS += -DWL11U -DMFP
DHDCFLAGS += -DBCMCCX
DHDCFLAGS += -DWES_SUPPORT
+ DHDCFLAGS += -DSUPPORT_RESTORE_SCAN_PARAMS
DHDCFLAGS += -DOKC_SUPPORT
DHDCFLAGS += -DWLTDLS
DHDCFLAGS += -DWLFBT
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)
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
-endif
DHDCFLAGS += -DDISABLE_PM_BCNRX
# Debugability
DHDCFLAGS += -DDEBUGABILITY_ECNTRS_LOGGING
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 += -DWL11U -DMFP
DHDCFLAGS += -DBCMCCX
DHDCFLAGS += -DWES_SUPPORT
+ DHDCFLAGS += -DSUPPORT_RESTORE_SCAN_PARAMS
DHDCFLAGS += -DOKC_SUPPORT
DHDCFLAGS += -DWLTDLS
DHDCFLAGS += -DWLFBT
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)
# 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
# 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)
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
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 += -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
+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
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 -DSUPPORT_P2P_GO_PS,$(DHDCFLAGS))
# 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),)
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
# 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
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
DHDCFLAGS += -DWL11U -DMFP
DHDCFLAGS += -DBCMCCX
DHDCFLAGS += -DWES_SUPPORT
+ DHDCFLAGS += -DSUPPORT_RESTORE_SCAN_PARAMS
DHDCFLAGS += -DOKC_SUPPORT
DHDCFLAGS += -DWLTDLS
DHDCFLAGS += -DWLFBT
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)
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
-endif
DHDCFLAGS += -DDISABLE_PM_BCNRX
# Debugability
DHDCFLAGS += -DDEBUGABILITY_ECNTRS_LOGGING
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 += -DWL11U -DMFP
DHDCFLAGS += -DBCMCCX
DHDCFLAGS += -DWES_SUPPORT
+ DHDCFLAGS += -DSUPPORT_RESTORE_SCAN_PARAMS
DHDCFLAGS += -DOKC_SUPPORT
DHDCFLAGS += -DWLTDLS
DHDCFLAGS += -DWLFBT
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)
# 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
# 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)
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
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 += -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
+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
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 -DSUPPORT_P2P_GO_PS,$(DHDCFLAGS))
# 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),)
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
*
* <<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>
#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);
{ 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 */
*
* <<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>
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:
+ case DSCP_CS3:
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:
- 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);
*
* <<Broadcom-WL-IPTag/Open:>>
*
- * $Id: dhd.h 798183 2019-01-07 09:51:58Z $
+ * $Id: dhd.h 815855 2019-04-22 05:16:49Z $
*/
/****************
};
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 {
- 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 {
- 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
#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 {
#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)
#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 */
#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
-#endif /* CONFIG_BCM4359 */
+#endif /* WL_BAM */
#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
*
* <<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>
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;
}
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);
+ }
i = 0;
if (argv[i] == NULL) {
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));
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));
#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
+ * # Both wifi and hotspot can be turned on at the same time?
+ * DualInterface
* # 5Ghz band support?
* 5G
* # How many clients can be connected?
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",
-#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[] = {
-#ifdef WL_RESTRICTED_APSTA_SCC
- "yes",
-#else
"no",
-#endif /* WL_RESTRICTED_APSTA_SCC */
#ifdef DHD_SOFTAP_DUAL_IF_INFO
#ifdef WL_RESTRICTED_APSTA_SCC
"yes",
*
* <<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>
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_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 */
+#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) {
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);
}
#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) {
DHD_ERROR(("%s, register_netdev failed for %s\n",
__FUNCTION__, dev->name));
free_netdev(dev);
+ return;
}
if (FW_SUPPORTED((&dhd->pub), monitor)) {
#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 */
#endif /* PNO_SUPPORT */
/* enable dongle roaming event */
#ifdef WL_CFG80211
+#if !defined(ROAM_EVT_DISABLE)
setbit(eventmask, WLC_E_ROAM);
+#endif /* !ROAM_EVT_DISABLE */
setbit(eventmask, WLC_E_BSSID);
#endif /* WL_CFG80211 */
#ifdef BCMCCX
#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;
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)
{
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;
*
* <<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
#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,
*
* <<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>
proptx = onoff;
DHD_ERROR(("[WIFI_SEC] %s: FRAMEBURST On/Off from sysfs = %u\n",
- __FUNCTION__, txbf));
+ __FUNCTION__, proptx));
return count;
}
__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
#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
};
*
* <<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>
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,
*
* <<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 */
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);
-#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);
/* 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),
+ 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)));
+ /* 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;
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);
__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);
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));
*
* <<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 */
#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 {
*
* <<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>
#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;
uint8 clkctl = 0;
#endif /* !BCMSPI */
uint fn, numfn;
- uint8 *cis[SDIOD_MAX_IOFUNCS];
+ uint8 *cis = NULL;
int32 value;
int err = 0;
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++) {
- 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
- 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,
- sizeof(value), TRUE) != BCME_OK) {
+ sizeof(value), TRUE) != BCME_OK) {
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);
}
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;
+ /* resume all interface network queue. */
+ dhd_txflowcontrol(bus->dhd, ALL_INTERFACES, OFF);
DHD_LINUX_GENERAL_UNLOCK(bus->dhd, flags);
return -EBUSY;
}
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_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;
}
#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)
{
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"));
-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)
+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
*
* <<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_
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 */
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 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)
} 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
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;
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
/**
#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
} 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
*
* <<Broadcom-WL-IPTag/Open:>>
*
- * $Id: bcmevent.h 759112 2018-04-24 01:34:08Z $
+ * $Id: bcmevent.h 779385 2018-09-03 17:35:01Z $
*
*/
#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 */
#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 */
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 */
#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 */
#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 */
typedef enum wl_mbo_event_type {
WL_MBO_E_CELLULAR_NW_SWITCH = 1,
+ WL_MBO_E_BTM_RCVD = 2,
/* 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 */
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 */
*
* <<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_
#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 {
/** 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;
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
uint16 info_data_len;
/* sequence number */
uint16 seqnum;
+ /* destination */
+ uint8 dest;
/* rsvd */
- uint32 rsvd;
+ uint8 rsvd[3];
/* XOR checksum or a magic number to audit DMA done */
dma_done_t marker;
} info_buf_resp_t;
/** 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 {
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 {
- 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;
*
* <<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_
#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 */
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.
#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:
#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
#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.
#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
*
* <<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_
#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
+/* CS3: Broadcast Video (RFC2474) */
+#define DSCP_CS3 0x18
+/* VA: VOCIE-ADMIT (RFC5865) */
+#define DSCP_VA 0x2C
/* 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);
*
* <<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_
unsigned short length; /* Length of body */
} eapol_hdr_t;
-#define EAPOL_HDR_LEN 4
+#define EAPOL_HDR_LEN 4u
/* 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
-#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 */
-#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 */
-#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 {
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 */
-#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 */
-#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
-#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_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 */
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 */
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)
((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
#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_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 */
-#define EPI_VERSION_STR "100.13.21 (r)"
+#define EPI_VERSION_STR "100.13.36 (r)"
#endif /* _epivers_h_ */
*
* <<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_
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_ */
*
* <<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_
* 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
-/* 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
*
* <<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_
#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 */
-#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_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
#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 */
-#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 */
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>
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
*
* <<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_
#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
*
* <<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_
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
*
* <<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_
(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_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 || \
*
* <<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>
#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); \
- 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 */
*
* <<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>
#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)
#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_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"
#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
#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_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);
#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 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
*/
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;
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)
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)
{
#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;
+#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 */
}
} 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
{
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",
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));
}
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
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);
}
#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)
}
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;
}
#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)
{
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) {
- 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);
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);
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");
*
* <<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>
#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 */
*
* <<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>
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);
#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 };
#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
-#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) || \
- * (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
#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;
#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 */
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);
#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);
-#endif /* CUSTOMER_HW4 */
}
#endif /* WL_CFG80211_P2P_DEV_IF */
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)) {
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);
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)) {
}
}
- 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));
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
u16 wl_iftype;
#ifdef WL_STATIC_IF
int need_legacy_war = 0;
+ dhd_pub_t *dhd = NULL;
#endif /* WL_STATIC_IF */
if (!ndev || !event) {
#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 */
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)) {
+ 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,
#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;
-#endif // endif
WL_DBG(("In\n"));
if (!dev) {
/*
* 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);
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
}
}
+ if (sme->bssid) {
+ wl_update_prof(cfg, dev, NULL, sme->bssid, WL_PROF_LATEST_BSSID);
+ } else {
+ wl_update_prof(cfg, dev, NULL, ðer_bcast, WL_PROF_LATEST_BSSID);
+ }
+
/* 'connect' request received */
wl_set_drv_status(cfg, CONNECTING, dev);
/* clear nested connect bit on proceeding for connection */
/*
* 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);
}
-#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);
}
#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"));
+ CFG80211_CONNECT_RESULT(dev, NULL, NULL,
+ NULL, 0, NULL, 0,
+ WLAN_STATUS_UNSPECIFIED_FAILURE,
+ GFP_KERNEL);
}
#ifdef CUSTOM_SET_CPUCORE
/* set default cpucore */
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 */
}
#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"));
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 */
+#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)
}
#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.
} else {
WL_ERR(("Fail to Set (err=%d cookie:%llu)\n", err, *cookie));
}
+ mutex_unlock(&cfg->usr_sync);
return err;
}
#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;
}
}
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}};
"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) {
/* 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);
- 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_clr_drv_status(cfg, CONNECTING, ndev);
+ WL_INFORM_MEM(("connect fail reported\n"));
+ }
} else {
WL_DBG(("%s nothing\n", __FUNCTION__));
}
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,
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));
}
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,
}
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;
}
#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)
#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"));
+ spin_unlock_irqrestore(&cfg->cfgdrv_lock, flags);
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)
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);
}
}
-#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);
-
bzero(&msg, sizeof(wl_event_msg_t));
WL_ERR(("timer expired\n"));
#ifdef BCMPCIE
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 (!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"));
+exit:
+ mutex_unlock(&cfg->scan_sync);
}
void wl_cfg80211_scan_abort(struct bcm_cfg80211 *cfg)
WL_DBG(("Enter \n"));
BCM_REFERENCE(dhdp);
- mutex_lock(&cfg->scan_complete);
if (!ndev) {
WL_ERR(("ndev is null\n"));
err = BCME_ERROR;
spin_unlock_irqrestore(&cfg->cfgdrv_lock, flags);
out:
- mutex_unlock(&cfg->scan_complete);
return err;
}
}
#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)
{
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;
-
}
+ 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",
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) {
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;
}
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->scan_sync);
#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 */
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;
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, 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);
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)
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;
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);
wdev = cfg->p2p_wdev;
}
- if (wdev && cfg->down_disc_if) {
+ if (wdev) {
wl_cfgp2p_del_p2p_disc_if(wdev, cfg);
- cfg->down_disc_if = FALSE;
}
}
#endif /* WL_CFG80211_P2P_DEV_IF */
}
#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)
{
*
* <<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 $
*/
/**
WL_PROF_BSSID,
WL_PROF_ACT,
WL_PROF_BEACONINT,
- WL_PROF_DTIMPERIOD
+ WL_PROF_DTIMPERIOD,
+ WL_PROF_LATEST_BSSID
};
/* donlge escan state */
u16 beacon_interval;
u8 dtim_period;
bool active;
+ u8 latest_bssid[ETHER_ADDR_LEN];
};
struct wl_wps_ie {
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 {
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;
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 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 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);
+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() \
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_ */
*
* <<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>
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);
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"));
+ if (!cfg->p2p_wdev) {
+ WL_ERR(("Already deleted p2p_wdev\n"));
+ return -EINVAL;
+ }
+
if (!rtnl_is_locked()) {
rtnl_lock();
rollback_lock = true;
*
* <<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 $
*/
/*
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;
+ 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"));
- 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));
-
- } else {
- err = -EINVAL;
}
exit:
return err;
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;
+ 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);
- } else {
- err = -1;
}
+
return err;
}
#endif /* CUSTOM_FORCE_NODFS_FLAG */
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) {
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) {
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;
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) {
if (unlikely(err))
WL_ERR(("Could not enable lazy roam:%d \n", err));
}
+
return err;
}
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) {
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"));
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));
{ 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)
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 */
*
* <<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_
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 {
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_ */
*
* <<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__
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);
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)) {
kfree(abc_log);
}
+ mutex_unlock(&pinfo->log_mutex);
+
return count;
}
struct abc_log_entry *abc_log;
int count = 0;
+ mutex_lock(&pinfo->log_mutex);
+
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);
#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_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;
init_completion(&pinfo->enable_done);
+ mutex_init(&pinfo->log_mutex);
+
sec_abc = pinfo->dev;
pinfo->pdata = 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);
-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
-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
+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
-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
-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
+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
-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
-846d448cb27abb9c50cd9fd522d0cd4d846eff306a1a310747a2b280b5311cea ./system/bin/profman
+2140b2d414d5cc74b1f3ac54d811ee6ebfc5b635737866ed0722ffc52419f8a6 ./system/bin/sload_f2fs
+6571ffd1fb0bb0d8174af014e8eff55a25bdf9420d493a8697545c4c4ae56a21 ./system/bin/vr
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
-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
-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
-643e1a066df19d86d7539435fa81c27cb90892c1f9fef5e5b50f089554f7191c ./system/bin/e2fsdroid
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
-549346bff303d1baa1d46c12bf9e40fee593a1ba47afa88e4f6c98c619f94d10 ./system/bin/vold
-7a95bb39384040bc4a61aacf537bc285293195f150c2fe0c319233f6d2f19757 ./system/bin/bu
+fd672e946b5bb678b364bb8ea1c9de811013749c04c03c797014eec70b37ffe5 ./system/bin/idledefrag
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
-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
-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
-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
-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
+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
-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
-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
-5eaec5790dfef5015a40bba17489bc7bafc75149282b3585cb25fd6e85467c3b ./root/sbin/knox_changer
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
-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
-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
-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
+28485d8ef79ca83e6f56b2c919b898251151cc1cebbde1f3ffc31d83ee52dc7e ./recovery/root/res/images/change00011.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
-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
+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
-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
+0120840477638d72370e3e3988f648fe2eeaf592a32dc96535c797bbcdff1741 ./recovery/root/res/images/poc_change00007.png
+4adf5a8a6871c9fc5af4424e902d78e94e3ac60b28f0bb0eb8ffd9074246badf ./recovery/root/res/images/poc_change00014.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
-a11150c8a73789e2d7fcef9489d28a75f588dd4c78b1984553e2e2a63996e836 ./recovery/root/res/images/poc_change00003.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
-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
-c229c76130976a1df9a91057f855aab14620a9a1a39719ef32367b17218a5d82 ./recovery/root/res/images/simple00004.png
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
-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
+3a69699c095edcd2cfff85233730c131b3c1d85b353f0b4075021daa94b48397 ./recovery/root/sbin/e2fsdroid_static
+985fe8f3e4466dc73b4b1ec981732a266a5cd8db2518b958b40a64328e2921ae ./recovery/root/sbin/mke2fs_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
-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
-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
+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
-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
+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
-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
-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
-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
-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
-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
-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
-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
-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
+8a64aec180bafbbd861d1c3d1b43ae9d913da223168e6f9352fb8017737411d4 ./system/vendor/bin/vendor.samsung.security.sem@1.0-service
+ba894b2956614b7f4e115f18f3d657c8c9f1a97c6da2b2610808022ac78011c0 ./system/vendor/bin/vndservice
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