diff options
| author | Akash Patel <akashp@codeaurora.org> | 2015-04-28 10:10:29 -0700 |
|---|---|---|
| committer | Akash Patel <akashp@codeaurora.org> | 2015-04-28 10:10:29 -0700 |
| commit | 1c55fca9190bf97eccd090ca378c01ad3e378ee2 (patch) | |
| tree | 3873ed7485362e356720892735bef8c9a35d22d4 | |
| parent | 9b2f443006c558ec7ba36251718c4935eae8ff2d (diff) | |
| parent | 922e735ef9a1097394c86a1dd9802c619e7b8042 (diff) | |
Release 4.0.10.86 QCACLD WLAN Driver
Merge remote-tracking branch 'origin/caf/caf-wlan/master' into HEAD
* origin/caf/caf-wlan/master:
Cafstaging Release 4.0.10.86
qcacld-2.0: Fix to validate destination address of deauth & disassoc
qcacld-2.0: Initial Scan fix
wlan: Fix wmi buffer stale pointer
qcacld: Add version field to the packet log message structure
qcacld: Read residue data written into the proc during read process
qcacld: Fix compilation errors in SDIO platform
Change-Id: Ic8b3f3b50eb8e731907993f5b84d9183e816780a
| -rwxr-xr-x | CORE/HDD/src/wlan_hdd_main.c | 2 | ||||
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_memdump.c | 36 | ||||
| -rw-r--r-- | CORE/MAC/inc/qwlan_version.h | 4 | ||||
| -rw-r--r-- | CORE/MAC/inc/sirTypes.h | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessDeauthFrame.c | 6 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessDisassocFrame.c | 5 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limUtils.c | 31 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limUtils.h | 2 | ||||
| -rw-r--r-- | CORE/SERVICES/WMA/wma.c | 36 | ||||
| -rw-r--r-- | CORE/SME/src/csr/csrApiScan.c | 6 | ||||
| -rw-r--r-- | CORE/SYS/legacy/src/system/src/macInitApi.c | 2 | ||||
| -rw-r--r-- | CORE/UTILS/PKTLOG/include/pktlog_ac.h | 3 | ||||
| -rw-r--r-- | CORE/UTILS/PKTLOG/linux_ac.c | 44 | ||||
| -rw-r--r-- | CORE/UTILS/PKTLOG/pktlog_internal.c | 1 | ||||
| -rw-r--r-- | CORE/VOSS/inc/vos_diag_core_log.h | 4 |
15 files changed, 142 insertions, 41 deletions
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 97b3587cbb58..7e8481de59ee 100755 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -110,7 +110,6 @@ #ifdef CONFIG_CNSS #include <net/cnss.h> #endif -#include "wlan_hdd_memdump.h" extern int hdd_hostapd_stop (struct net_device *dev); void hdd_ch_avoid_cb(void *hdd_context,void *indi_param); @@ -122,6 +121,7 @@ void hdd_ch_avoid_cb(void *hdd_context,void *indi_param); #include "wlan_hdd_debugfs.h" #include "epping_main.h" +#include "wlan_hdd_memdump.h" #ifdef IPA_OFFLOAD #include <wlan_hdd_ipa.h> diff --git a/CORE/HDD/src/wlan_hdd_memdump.c b/CORE/HDD/src/wlan_hdd_memdump.c index 2dba7df3c24a..8192d1e69318 100644 --- a/CORE/HDD/src/wlan_hdd_memdump.c +++ b/CORE/HDD/src/wlan_hdd_memdump.c @@ -35,6 +35,11 @@ #include <sme_Api.h> #include <wlan_hdd_includes.h> #include "wlan_hdd_memdump.h" +#include <linux/module.h> +#include <linux/kernel.h> +#include <linux/version.h> +#include <linux/proc_fs.h> /* Necessary because we use the proc fs */ +#include <linux/uaccess.h> /* for copy_to_user */ /** * memdump_cleanup_timer_cb() - Timer callback function for memory dump cleanup. @@ -265,6 +270,33 @@ int wlan_hdd_cfg80211_get_fw_mem_dump(struct wiphy *wiphy, static struct proc_dir_entry *proc_file, *proc_dir; +/** memdump_get_file_data() - get data available in proc file + * + * @file - handle for the proc file. + * + * This function is used to retrieve the data passed while + * creating proc file entry. + * + * Return: void pointer to hdd_context + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)) || defined(WITH_BACKPORTS) +static void *memdump_get_file_data(struct file *file) +{ + void *hdd_ctx; + + hdd_ctx = PDE_DATA(file_inode(file)); + return hdd_ctx; +} +#else +static void *memdump_get_file_data(struct file *file) +{ + void *hdd_ctx; + + hdd_ctx = PDE(file->f_path.dentry->d_inode)->data; + return hdd_ctx; +} +#endif + /** * memdump_read() - perform read operation in memory dump proc file * @@ -281,11 +313,13 @@ static ssize_t memdump_read(struct file *file, char __user *buf, size_t count, loff_t *pos) { int status; - hdd_context_t *hdd_ctx = (hdd_context_t *)PDE_DATA(file_inode(file)); + hdd_context_t *hdd_ctx; adf_os_dma_addr_t paddr; adf_os_dma_addr_t dma_ctx; adf_os_device_t adf_ctx; + hdd_ctx = memdump_get_file_data(file); + hddLog(LOG1, FL("Read req for size:%zu pos:%llu"), count, *pos); status = wlan_hdd_validate_context(hdd_ctx); if (0 != status) { diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h index 7dad50c0b4f3..7e42f0768f4d 100644 --- a/CORE/MAC/inc/qwlan_version.h +++ b/CORE/MAC/inc/qwlan_version.h @@ -42,9 +42,9 @@ BRIEF DESCRIPTION: #define QWLAN_VERSION_MINOR 0 #define QWLAN_VERSION_PATCH 10 #define QWLAN_VERSION_EXTRA "" -#define QWLAN_VERSION_BUILD 85 +#define QWLAN_VERSION_BUILD 86 -#define QWLAN_VERSIONSTR "4.0.10.85" +#define QWLAN_VERSIONSTR "4.0.10.86" #define AR6320_REV1_VERSION 0x5000000 diff --git a/CORE/MAC/inc/sirTypes.h b/CORE/MAC/inc/sirTypes.h index 9f04e9a9ee03..4c4f177600a7 100644 --- a/CORE/MAC/inc/sirTypes.h +++ b/CORE/MAC/inc/sirTypes.h @@ -41,6 +41,7 @@ #include "halTypes.h" +#define FIRST_SCAN_ID 1 /* ********************************************** * * * * SIRIUS ERROR Codes / Return Codes * diff --git a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c index bbba2794533d..f7a730120c16 100644 --- a/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessDeauthFrame.c @@ -128,6 +128,12 @@ limProcessDeauthFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession p return; } + if (!lim_validate_received_frame_a1_addr(pMac, pHdr->da, psessionEntry)) { + limLog(pMac, LOGE, + FL("rx frame doesn't have valid a1 address, dropping it")); + return; + } + #ifdef WLAN_FEATURE_11W /* PMF: If this session is a PMF session, then ensure that this frame was protected */ if(psessionEntry->limRmfEnabled && (WDA_GET_RX_DPU_FEEDBACK(pRxPacketInfo) & DPU_FEEDBACK_UNPROTECTED_ERROR)) diff --git a/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c b/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c index ce2b9dea868e..9418a33b8ddd 100644 --- a/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessDisassocFrame.c @@ -105,6 +105,11 @@ limProcessDisassocFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tpPESession return; } + if (!lim_validate_received_frame_a1_addr(pMac, pHdr->da, psessionEntry)) { + limLog(pMac, LOGE, + FL("rx frame doesn't have valid a1 address, dropping it")); + return; + } if (LIM_IS_STA_ROLE(psessionEntry) && (eLIM_SME_WT_DISASSOC_STATE == psessionEntry->limSmeState)) { diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c index 073320661700..eff2c6d57b5e 100644 --- a/CORE/MAC/src/pe/lim/limUtils.c +++ b/CORE/MAC/src/pe/lim/limUtils.c @@ -8030,3 +8030,34 @@ error: return; } #endif /* SAP_AUTH_OFFLOAD */ + +/** + * lim_validate_received_frame_a1_addr() - To validate received frame's A1 addr + * @mac_ctx: pointer to mac context + * @a1: received frame's a1 address which is nothing but our self address + * @session: PE session pointer + * + * This routine will validate, A1 addres of the received frame + * + * Return: true or false + */ +bool lim_validate_received_frame_a1_addr(tpAniSirGlobal mac_ctx, + tSirMacAddr a1, tpPESession session) +{ + if (mac_ctx == NULL || session == NULL) { + limLog(mac_ctx, LOGE, + FL("NULL pointer")); + /* let main routine handle it */ + return true; + } + if (limIsGroupAddr(a1) || limIsAddrBC(a1)) { + /* just for fail safe, don't handle MC/BC a1 in this routine */ + return true; + } + if (!vos_mem_compare(a1, session->selfMacAddr, 6)) { + limLog(mac_ctx, LOGE, + FL("Invalid A1 address in received frame")); + return false; + } + return true; +} diff --git a/CORE/MAC/src/pe/lim/limUtils.h b/CORE/MAC/src/pe/lim/limUtils.h index 1fecbb73ed59..a7f3b3daabee 100644 --- a/CORE/MAC/src/pe/lim/limUtils.h +++ b/CORE/MAC/src/pe/lim/limUtils.h @@ -612,5 +612,7 @@ void lim_sap_offload_add_sta(tpAniSirGlobal pmac, void lim_sap_offload_del_sta(tpAniSirGlobal pmac, tpSirMsgQ lim_msgq); #endif /* SAP_AUTH_OFFLOAD */ +bool lim_validate_received_frame_a1_addr(tpAniSirGlobal mac_ctx, + tSirMacAddr a1, tpPESession session); #endif /* __LIM_UTILS_H */ diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index bb2839d5aede..ac3cf4e351e9 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -10736,6 +10736,24 @@ VOS_STATUS wma_vdev_start(tp_wma_handle wma, chan->band_center_freq2, chan->reg_info_1, chan->reg_info_2, req->max_txpow); + /* Store vdev params in SAP mode which can be used in vdev restart */ + if (intr[req->vdev_id].type == WMI_VDEV_TYPE_AP && + intr[req->vdev_id].sub_type == 0) { + intr[req->vdev_id].vdev_restart_params.vdev_id = req->vdev_id; + intr[req->vdev_id].vdev_restart_params.ssid.ssid_len = cmd->ssid.ssid_len; + vos_mem_copy(intr[req->vdev_id].vdev_restart_params.ssid.ssid, cmd->ssid.ssid, + cmd->ssid.ssid_len); + intr[req->vdev_id].vdev_restart_params.flags = cmd->flags; + intr[req->vdev_id].vdev_restart_params.requestor_id = cmd->requestor_id; + intr[req->vdev_id].vdev_restart_params.disable_hw_ack = cmd->disable_hw_ack; + intr[req->vdev_id].vdev_restart_params.chan.mhz = chan->mhz; + intr[req->vdev_id].vdev_restart_params.chan.band_center_freq1 = chan->band_center_freq1; + intr[req->vdev_id].vdev_restart_params.chan.band_center_freq2 = chan->band_center_freq1; + intr[req->vdev_id].vdev_restart_params.chan.info = chan->info; + intr[req->vdev_id].vdev_restart_params.chan.reg_info_1 = chan->reg_info_1; + intr[req->vdev_id].vdev_restart_params.chan.reg_info_2 = chan->reg_info_2; + } + if (isRestart) { /* * Marking the VDEV UP STATUS to FALSE @@ -10763,24 +10781,6 @@ VOS_STATUS wma_vdev_start(tp_wma_handle wma, return VOS_STATUS_E_FAILURE; } - /* Store vdev params in SAP mode which can be used in vdev restart */ - if (intr[req->vdev_id].type == WMI_VDEV_TYPE_AP && - intr[req->vdev_id].sub_type == 0) { - intr[req->vdev_id].vdev_restart_params.vdev_id = req->vdev_id; - intr[req->vdev_id].vdev_restart_params.ssid.ssid_len = cmd->ssid.ssid_len; - vos_mem_copy(intr[req->vdev_id].vdev_restart_params.ssid.ssid, cmd->ssid.ssid, - cmd->ssid.ssid_len); - intr[req->vdev_id].vdev_restart_params.flags = cmd->flags; - intr[req->vdev_id].vdev_restart_params.requestor_id = cmd->requestor_id; - intr[req->vdev_id].vdev_restart_params.disable_hw_ack = cmd->disable_hw_ack; - intr[req->vdev_id].vdev_restart_params.chan.mhz = chan->mhz; - intr[req->vdev_id].vdev_restart_params.chan.band_center_freq1 = chan->band_center_freq1; - intr[req->vdev_id].vdev_restart_params.chan.band_center_freq2 = chan->band_center_freq1; - intr[req->vdev_id].vdev_restart_params.chan.info = chan->info; - intr[req->vdev_id].vdev_restart_params.chan.reg_info_1 = chan->reg_info_1; - intr[req->vdev_id].vdev_restart_params.chan.reg_info_2 = chan->reg_info_2; - } - return VOS_STATUS_SUCCESS; } diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c index 7324340b08b4..7ef70f9b1345 100644 --- a/CORE/SME/src/csr/csrApiScan.c +++ b/CORE/SME/src/csr/csrApiScan.c @@ -561,10 +561,11 @@ static void csrScan2GOnyRequest(tpAniSirGlobal pMac,tSmeCmd *pScanCmd, return; } - if (pScanCmd->u.scanCmd.scanID || + if ((pScanCmd->u.scanCmd.scanID != FIRST_SCAN_ID) || (eCSR_SCAN_REQUEST_FULL_SCAN != pScanRequest->requestType)) return; + smsLog( pMac, LOG1, FL("Scanning only 2G Channels during first scan")); /* Construct valid Supported 2.4 GHz Channel List */ for( index = 0; index < ARRAY_SIZE(channelList2G); index++ ) { @@ -730,7 +731,7 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, // If it is the first scan request from HDD, CSR checks if it is for 11d. // If it is not, CSR will save the scan request in the pending cmd queue // & issue an 11d scan request to PE. - if (((0 == pScanCmd->u.scanCmd.scanID) + if (((FIRST_SCAN_ID == pScanCmd->u.scanCmd.scanID) && (eCSR_SCAN_REQUEST_11D_SCAN != pScanRequest->requestType)) #ifdef SOFTAP_CHANNEL_RANGE && (eCSR_SCAN_SOFTAP_CHANNEL_RANGE != pScanRequest->requestType) @@ -850,7 +851,6 @@ eHalStatus csrScanRequest(tpAniSirGlobal pMac, tANI_U16 sessionId, //Once we turn on Wifi if(pMac->scan.fFirstScanOnly2GChnl) { - smsLog( pMac, LOG1, FL("Scanning only 2G Channels during first scan")); csrScan2GOnyRequest(pMac, pScanCmd, pScanRequest); } diff --git a/CORE/SYS/legacy/src/system/src/macInitApi.c b/CORE/SYS/legacy/src/system/src/macInitApi.c index 983c8e08ae5e..2455691d378c 100644 --- a/CORE/SYS/legacy/src/system/src/macInitApi.c +++ b/CORE/SYS/legacy/src/system/src/macInitApi.c @@ -202,7 +202,7 @@ tSirRetStatus macOpen(tHalHandle *pHalHandle, tHddHandle hHdd, tMacOpenParameter */ p_mac->psOffloadEnabled = TRUE; - p_mac->scan.nextScanID = 1; + p_mac->scan.nextScanID = FIRST_SCAN_ID; /* FW: 0 to 2047 and Host: 2048 to 4095 */ p_mac->mgmtSeqNum = WLAN_HOST_SEQ_NUM_MIN-1; diff --git a/CORE/UTILS/PKTLOG/include/pktlog_ac.h b/CORE/UTILS/PKTLOG/include/pktlog_ac.h index dc7f3f6f575b..b7d22028865c 100644 --- a/CORE/UTILS/PKTLOG/include/pktlog_ac.h +++ b/CORE/UTILS/PKTLOG/include/pktlog_ac.h @@ -63,7 +63,8 @@ extern int pktlog_alloc_buf(struct ol_softc *scn); extern void pktlog_release_buf(struct ol_softc *scn); ssize_t pktlog_read_proc_entry(char *buf, size_t nbytes, loff_t *ppos, - struct ath_pktlog_info *pl_info); + struct ath_pktlog_info *pl_info, + bool *read_complete); int pktlog_send_per_pkt_stats_to_user(void); struct ol_pl_arch_dep_funcs { diff --git a/CORE/UTILS/PKTLOG/linux_ac.c b/CORE/UTILS/PKTLOG/linux_ac.c index 8e148f16aff5..91b1b9e383f9 100644 --- a/CORE/UTILS/PKTLOG/linux_ac.c +++ b/CORE/UTILS/PKTLOG/linux_ac.c @@ -587,21 +587,24 @@ int pktlog_send_per_pkt_stats_to_user(void) ol_txrx_pdev_handle txrx_pdev = vos_get_context(VOS_MODULE_ID_TXRX, vos); struct ath_pktlog_info *pl_info; + bool read_complete; if (!txrx_pdev) { - printk(PKTLOG_TAG "%s: Invalid TxRx handle \n", __func__); + printk(PKTLOG_TAG " %s: Invalid TxRx handle\n", __func__); return -EINVAL; } pl_info = txrx_pdev->pl_dev->pl_info; if (!pl_info || !pl_info->buf) { - printk(PKTLOG_TAG "%s: Shouldnt happen. pl_info is invalid \n", + printk(PKTLOG_TAG " %s: Shouldnt happen. pl_info is invalid\n", __func__); return -EINVAL; } if (pl_info->buf->rd_offset == -1) { + printk(PKTLOG_TAG " %s: Shouldnt happen. No write yet!\n", + __func__); return -EINVAL; } @@ -610,7 +613,8 @@ int pktlog_send_per_pkt_stats_to_user(void) vos_mem_malloc(sizeof(struct vos_log_pktlog_info) + VOS_LOG_PKT_LOG_SIZE); if (!pktlog) { - printk(PKTLOG_TAG "%s: Memory allocation failed \n", __func__); + printk(PKTLOG_TAG " %s: Memory allocation failed\n", + __func__); return -ENOMEM; } @@ -618,6 +622,7 @@ int pktlog_send_per_pkt_stats_to_user(void) vos_log_set_code(pktlog, LOG_WLAN_PKT_LOG_INFO_C); pktlog->buf_len = 0; + pktlog->version = VERSION_LOG_WLAN_PKT_LOG_INFO_C; /* * @ret_val: ret_val gives the actual data read from the buffer. @@ -629,7 +634,7 @@ int pktlog_send_per_pkt_stats_to_user(void) ret_val = pktlog_read_proc_entry(pktlog->buf, VOS_LOG_PKT_LOG_SIZE, &pl_info->buf->offset, - pl_info); + pl_info, &read_complete); if (ret_val) { int index = 0; struct ath_pktlog_hdr *temp; @@ -637,7 +642,8 @@ int pktlog_send_per_pkt_stats_to_user(void) if ((ret_val - index) < sizeof(struct ath_pktlog_hdr)) { /* Partial header */ - pl_info->buf->offset -= (ret_val - index); + pl_info->buf->offset -= + (ret_val - index); ret_val = index; break; } @@ -646,7 +652,8 @@ int pktlog_send_per_pkt_stats_to_user(void) if ((ret_val - index) < (temp->size + sizeof(struct ath_pktlog_hdr))) { /* Partial record payload */ - pl_info->buf->offset -= (ret_val - index); + pl_info->buf->offset -= + (ret_val - index); ret_val = index; break; } @@ -665,7 +672,7 @@ int pktlog_send_per_pkt_stats_to_user(void) } else { vos_mem_free(pktlog); } - } while (ret_val); + } while (read_complete == false); return 0; } @@ -673,10 +680,11 @@ int pktlog_send_per_pkt_stats_to_user(void) /** * pktlog_read_proc_entry() - This function is used to read data from the * proc entry into the readers buffer - * @buf: Readers buffer - * @nbytes: Number of bytes to read - * @ppos: Offset within the drivers buffer - * @pl_info: Packet log information pointer + * @buf: Readers buffer + * @nbytes: Number of bytes to read + * @ppos: Offset within the drivers buffer + * @pl_info: Packet log information pointer + * @read_complete: Boolean value indication whether read is complete * * This function is used to read data from the proc entry into the readers * buffer. Its functionality is similar to 'pktlog_read' which does @@ -687,7 +695,8 @@ int pktlog_send_per_pkt_stats_to_user(void) */ ssize_t pktlog_read_proc_entry(char *buf, size_t nbytes, loff_t *ppos, - struct ath_pktlog_info *pl_info) + struct ath_pktlog_info *pl_info, + bool *read_complete) { size_t bufhdr_size; size_t count = 0, ret_val = 0; @@ -696,8 +705,12 @@ pktlog_read_proc_entry(char *buf, size_t nbytes, loff_t *ppos, int fold_offset, ppos_data, cur_rd_offset, cur_wr_offset; struct ath_pktlog_buf *log_buf = pl_info->buf; - if (log_buf == NULL) + *read_complete = false; + + if (log_buf == NULL) { + *read_complete = true; return 0; + } if (*ppos == 0 && pl_info->log_state) { pl_info->saved_state = pl_info->log_state; @@ -803,11 +816,14 @@ rd_done: * So, if some data is written into, lets not reset the pointers. * We can continue to read from the offset position */ - if (cur_wr_offset == log_buf->wr_offset) { + if (cur_wr_offset != log_buf->wr_offset) { + *read_complete = false; + } else { pl_info->buf->rd_offset = -1; pl_info->buf->wr_offset = 0; pl_info->buf->bytes_written = 0; pl_info->buf->offset = PKTLOG_READ_OFFSET; + *read_complete = true; } PKTLOG_UNLOCK(pl_info); } diff --git a/CORE/UTILS/PKTLOG/pktlog_internal.c b/CORE/UTILS/PKTLOG/pktlog_internal.c index c22c7f474e7a..7560da0a7609 100644 --- a/CORE/UTILS/PKTLOG/pktlog_internal.c +++ b/CORE/UTILS/PKTLOG/pktlog_internal.c @@ -105,6 +105,7 @@ pktlog_getbuf_intsafe(struct ath_pktlog_arg *plarg) while ((cur_wr_offset <= log_buf->rd_offset) && (cur_wr_offset + log_size) > log_buf->rd_offset) { + printk("%s: Buffer overflow\n", __func__); PKTLOG_MOV_RD_IDX(log_buf->rd_offset, log_buf, buf_size); } diff --git a/CORE/VOSS/inc/vos_diag_core_log.h b/CORE/VOSS/inc/vos_diag_core_log.h index 10ece90b4bc1..cc579e16f6f1 100644 --- a/CORE/VOSS/inc/vos_diag_core_log.h +++ b/CORE/VOSS/inc/vos_diag_core_log.h @@ -66,6 +66,9 @@ extern "C" { #define VOS_LOG_MAX_WOW_PTRN_MASK_SIZE 16 #define VOS_LOG_PKT_LOG_SIZE 2048 +/* Version to be updated whenever format of vos_log_pktlog_info changes */ +#define VERSION_LOG_WLAN_PKT_LOG_INFO_C 1 + /*--------------------------------------------------------------------------- This packet contains the scan results of the recent scan operation LOG_WLAN_SCAN_C 0x1496 @@ -378,6 +381,7 @@ typedef struct */ struct vos_log_pktlog_info { log_hdr_type log_hdr; + uint32_t version; uint32_t seq_no; uint32_t buf_len; uint8_t buf[]; |
