qcacmn: Restructure and add new files in wmi layer
Add new directory structure and new files for tlv and non-tlv implementation. wmi layer shall not use global context of other layer, remove global context and unused methods. CRs-Fixed: 978547 Change-Id: I230f59052d9db8e1660cc087b09e03641227f490
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2015 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
||||||
*
|
*
|
||||||
@@ -25,8 +25,6 @@
|
|||||||
* to the Linux Foundation.
|
* to the Linux Foundation.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* wmi_tlv_platform.c file will be different for different components like Pronto firmware, Pronto windows host driver,
|
|
||||||
Pronto LA host driver because their memory management functions are different */
|
|
||||||
#include "wmi_tlv_platform.c"
|
#include "wmi_tlv_platform.c"
|
||||||
#include "wmi_tlv_defs.h"
|
#include "wmi_tlv_defs.h"
|
||||||
#include "wmi_version.h"
|
#include "wmi_version.h"
|
||||||
@@ -41,15 +39,19 @@
|
|||||||
#define WMITLV_GET_TAG_ARRAY_SIZE(val) ((val >> 21) & 0x000001FF)
|
#define WMITLV_GET_TAG_ARRAY_SIZE(val) ((val >> 21) & 0x000001FF)
|
||||||
#define WMITLV_GET_TAG_VARIED(val) ((val >> 30) & 0x00000001)
|
#define WMITLV_GET_TAG_VARIED(val) ((val >> 30) & 0x00000001)
|
||||||
|
|
||||||
#define WMITLV_SET_ATTRB0(id) ((WMITLV_GET_TAG_NUM_TLV_ATTRIB(id) << 24) | (id & 0x00FFFFFF))
|
#define WMITLV_SET_ATTRB0(id) ((WMITLV_GET_TAG_NUM_TLV_ATTRIB(id) << 24) | \
|
||||||
#define WMITLV_SET_ATTRB1(tagID, tagStructSize, tagArraySize, tagVaried) (((tagVaried&0x1)<<30) | ((tagArraySize&0x1FF)<<21) | ((tagStructSize&0x1FF)<<12) | (tagID&0xFFF))
|
(id & 0x00FFFFFF))
|
||||||
|
#define WMITLV_SET_ATTRB1(tagID, tagStructSize, tagArraySize, tagVaried) \
|
||||||
|
(((tagVaried&0x1)<<30) | ((tagArraySize&0x1FF)<<21) | \
|
||||||
|
((tagStructSize&0x1FF)<<12) | (tagID&0xFFF))
|
||||||
|
|
||||||
#define WMITLV_OP_SET_TLV_ATTRIB_macro(param_ptr, param_len, wmi_cmd_event_id, elem_tlv_tag, elem_struc_type, elem_name, var_len, arr_size) \
|
#define WMITLV_OP_SET_TLV_ATTRIB_macro(param_ptr, param_len, wmi_cmd_event_id, \
|
||||||
|
elem_tlv_tag, elem_struc_type, elem_name, var_len, arr_size) \
|
||||||
WMITLV_SET_ATTRB1(elem_tlv_tag, sizeof(elem_struc_type), arr_size, var_len),
|
WMITLV_SET_ATTRB1(elem_tlv_tag, sizeof(elem_struc_type), arr_size, var_len),
|
||||||
|
|
||||||
#define WMITLV_GET_CMD_EVT_ATTRB_LIST(id) \
|
#define WMITLV_GET_CMD_EVT_ATTRB_LIST(id) \
|
||||||
WMITLV_SET_ATTRB0(id), \
|
WMITLV_SET_ATTRB0(id), \
|
||||||
WMITLV_TABLE(id,SET_TLV_ATTRIB,NULL,0)
|
WMITLV_TABLE(id,SET_TLV_ATTRIB, NULL, 0)
|
||||||
|
|
||||||
A_UINT32 cmd_attr_list[] = {
|
A_UINT32 cmd_attr_list[] = {
|
||||||
WMITLV_ALL_CMD_LIST(WMITLV_GET_CMD_EVT_ATTRB_LIST)
|
WMITLV_ALL_CMD_LIST(WMITLV_GET_CMD_EVT_ATTRB_LIST)
|
||||||
@@ -60,21 +62,26 @@ A_UINT32 evt_attr_list[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#ifdef NO_DYNAMIC_MEM_ALLOC
|
#ifdef NO_DYNAMIC_MEM_ALLOC
|
||||||
static wmitlv_cmd_param_info *g_wmi_static_cmd_param_info_buf = NULL;
|
static wmitlv_cmd_param_info *g_wmi_static_cmd_param_info_buf;
|
||||||
A_UINT32 g_wmi_static_max_cmd_param_tlvs = 0;
|
A_UINT32 g_wmi_static_max_cmd_param_tlvs;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* TLV helper routines */
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* WMI TLV Helper function to set the static cmd_param_tlv structure and number of TLVs that can be
|
* wmitlv_set_static_param_tlv_buf() - tlv helper function
|
||||||
* accomodated in the structure. This function should be used when dynamic memory allocation is not
|
* @param_tlv_buf: tlv buffer parameter
|
||||||
* supported.
|
* @max_tlvs_accomodated: max no of tlv entries
|
||||||
*
|
*
|
||||||
* When dynamic memory allocation is not supported by any component then NO_DYNAMIC_MEMALLOC
|
*
|
||||||
* macro has to be defined in respective tlv_platform.c file. And respective component has to allocate
|
* WMI TLV Helper function to set the static cmd_param_tlv structure
|
||||||
* cmd_param_tlv structure buffer to accomodate whatever number of TLV's. Both the buffer address
|
* and number of TLVs that can be accomodated in the structure.
|
||||||
* and number of TLV's that can be accomodated in the buffer should be sent as arguments to this function.
|
* This function should be used when dynamic memory allocation is not
|
||||||
|
* supported. When dynamic memory allocation is not supported by any
|
||||||
|
* component then NO_DYNAMIC_MEMALLOC macro has to be defined in respective
|
||||||
|
* tlv_platform.c file. And respective component has to allocate
|
||||||
|
* cmd_param_tlv structure buffer to accomodate whatever number of TLV's.
|
||||||
|
* Both the buffer address and number of TLV's that can be accomodated in
|
||||||
|
* the buffer should be sent as arguments to this function.
|
||||||
*
|
*
|
||||||
* Return None
|
* Return None
|
||||||
*/
|
*/
|
||||||
@@ -88,9 +95,18 @@ wmitlv_set_static_param_tlv_buf(void *param_tlv_buf,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* WMI TLV Helper functions to find the attributes of the Command/Event TLVs.
|
* wmitlv_get_attributes() - tlv helper function
|
||||||
* Return 0 if success. Return >=1 if failure.
|
* @is_cmd_id: boolean for command attribute
|
||||||
|
* @cmd_event_id: command event id
|
||||||
|
* @curr_tlv_order: tlv order
|
||||||
|
* @tlv_attr_ptr: pointer to tlv attribute
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* WMI TLV Helper functions to find the attributes of the
|
||||||
|
* Command/Event TLVs.
|
||||||
|
*
|
||||||
|
* Return: 0 if success. Return >=1 if failure.
|
||||||
*/
|
*/
|
||||||
A_UINT32 wmitlv_get_attributes(A_UINT32 is_cmd_id, A_UINT32 cmd_event_id,
|
A_UINT32 wmitlv_get_attributes(A_UINT32 is_cmd_id, A_UINT32 cmd_event_id,
|
||||||
A_UINT32 curr_tlv_order,
|
A_UINT32 curr_tlv_order,
|
||||||
@@ -112,7 +128,8 @@ A_UINT32 wmitlv_get_attributes(A_UINT32 is_cmd_id, A_UINT32 cmd_event_id,
|
|||||||
if (WMITLV_GET_CMDID(cmd_event_id) ==
|
if (WMITLV_GET_CMDID(cmd_event_id) ==
|
||||||
WMITLV_GET_CMDID(pAttrArrayList[i])) {
|
WMITLV_GET_CMDID(pAttrArrayList[i])) {
|
||||||
tlv_attr_ptr->cmd_num_tlv = num_tlvs;
|
tlv_attr_ptr->cmd_num_tlv = num_tlvs;
|
||||||
/* Return success from here when only number of TLVS for this command/event is required */
|
/* Return success from here when only number of TLVS for
|
||||||
|
* this command/event is required */
|
||||||
if (curr_tlv_order == WMITLV_GET_ATTRIB_NUM_TLVS) {
|
if (curr_tlv_order == WMITLV_GET_ATTRIB_NUM_TLVS) {
|
||||||
wmi_tlv_print_verbose
|
wmi_tlv_print_verbose
|
||||||
("%s: WMI TLV attribute definitions for %s:0x%x found; num_of_tlvs:%d\n",
|
("%s: WMI TLV attribute definitions for %s:0x%x found; num_of_tlvs:%d\n",
|
||||||
@@ -121,7 +138,8 @@ A_UINT32 wmitlv_get_attributes(A_UINT32 is_cmd_id, A_UINT32 cmd_event_id,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return failure if tlv_order is more than the expected number of TLVs */
|
/* Return failure if tlv_order is more than the expected
|
||||||
|
* number of TLVs */
|
||||||
if (curr_tlv_order >= num_tlvs) {
|
if (curr_tlv_order >= num_tlvs) {
|
||||||
wmi_tlv_print_error
|
wmi_tlv_print_error
|
||||||
("%s: ERROR: TLV order %d greater than num_of_tlvs:%d for %s:0x%x\n",
|
("%s: ERROR: TLV order %d greater than num_of_tlvs:%d for %s:0x%x\n",
|
||||||
@@ -163,10 +181,18 @@ A_UINT32 wmitlv_get_attributes(A_UINT32 is_cmd_id, A_UINT32 cmd_event_id,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Helper Function to vaidate the prepared TLV's for an WMI event/command to be sent
|
* wmitlv_check_tlv_params() - tlv helper function
|
||||||
* Return 0 if success.
|
* @os_handle: os context handle
|
||||||
* <0 if failure.
|
* @param_struc_ptr: pointer to tlv structure
|
||||||
|
* @is_cmd_id: boolean for command attribute
|
||||||
|
* @wmi_cmd_event_id: command event id
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Helper Function to vaidate the prepared TLV's for
|
||||||
|
* an WMI event/command to be sent.
|
||||||
|
*
|
||||||
|
* Return: 0 if success. Return < 0 if failure.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
wmitlv_check_tlv_params(void *os_handle, void *param_struc_ptr,
|
wmitlv_check_tlv_params(void *os_handle, void *param_struc_ptr,
|
||||||
@@ -178,6 +204,7 @@ wmitlv_check_tlv_params(void *os_handle, void *param_struc_ptr,
|
|||||||
A_UINT32 tlv_index = 0;
|
A_UINT32 tlv_index = 0;
|
||||||
A_UINT8 *buf_ptr = (unsigned char *)param_struc_ptr;
|
A_UINT8 *buf_ptr = (unsigned char *)param_struc_ptr;
|
||||||
A_UINT32 expected_num_tlvs, expected_tlv_len;
|
A_UINT32 expected_num_tlvs, expected_tlv_len;
|
||||||
|
A_INT32 error = -1;
|
||||||
|
|
||||||
/* Get the number of TLVs for this command/event */
|
/* Get the number of TLVs for this command/event */
|
||||||
if (wmitlv_get_attributes
|
if (wmitlv_get_attributes
|
||||||
@@ -251,7 +278,9 @@ wmitlv_check_tlv_params(void *os_handle, void *param_struc_ptr,
|
|||||||
expected_tlv_len =
|
expected_tlv_len =
|
||||||
attr_struct_ptr.tag_array_size *
|
attr_struct_ptr.tag_array_size *
|
||||||
attr_struct_ptr.tag_struct_size;
|
attr_struct_ptr.tag_struct_size;
|
||||||
/* Paddding is only required for Byte array Tlvs all other array tlv's should be aligned to 4 bytes during their definition */
|
/* Paddding is only required for Byte array Tlvs all other
|
||||||
|
* array tlv's should be aligned to 4 bytes during their
|
||||||
|
* definition */
|
||||||
if (WMITLV_TAG_ARRAY_BYTE ==
|
if (WMITLV_TAG_ARRAY_BYTE ==
|
||||||
attr_struct_ptr.tag_id) {
|
attr_struct_ptr.tag_id) {
|
||||||
expected_tlv_len =
|
expected_tlv_len =
|
||||||
@@ -278,8 +307,9 @@ wmitlv_check_tlv_params(void *os_handle, void *param_struc_ptr,
|
|||||||
goto Error_wmitlv_check_tlv_params;
|
goto Error_wmitlv_check_tlv_params;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Incase of variable length TLV's, there is no expectation on the length field so do whatever checking
|
/* Incase of variable length TLV's, there is no expectation
|
||||||
you can depending on the TLV tag if TLV length is non-zero */
|
* on the length field so do whatever checking you can
|
||||||
|
* depending on the TLV tag if TLV length is non-zero */
|
||||||
if (curr_tlv_len != 0) {
|
if (curr_tlv_len != 0) {
|
||||||
/* Verify TLV length is aligned to the size of structure */
|
/* Verify TLV length is aligned to the size of structure */
|
||||||
if ((curr_tlv_len %
|
if ((curr_tlv_len %
|
||||||
@@ -345,8 +375,7 @@ wmitlv_check_tlv_params(void *os_handle, void *param_struc_ptr,
|
|||||||
|| (curr_tlv_tag ==
|
|| (curr_tlv_tag ==
|
||||||
WMITLV_TAG_ARRAY_BYTE)
|
WMITLV_TAG_ARRAY_BYTE)
|
||||||
|| (curr_tlv_tag ==
|
|| (curr_tlv_tag ==
|
||||||
WMITLV_TAG_ARRAY_FIXED_STRUC))
|
WMITLV_TAG_ARRAY_FIXED_STRUC)) {
|
||||||
{
|
|
||||||
/* Nothing to verify here */
|
/* Nothing to verify here */
|
||||||
} else {
|
} else {
|
||||||
wmi_tlv_print_error
|
wmi_tlv_print_error
|
||||||
@@ -392,30 +421,47 @@ wmitlv_check_tlv_params(void *os_handle, void *param_struc_ptr,
|
|||||||
__func__, wmi_cmd_event_id, tlv_index, expected_num_tlvs);
|
__func__, wmi_cmd_event_id, tlv_index, expected_num_tlvs);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (0);
|
return 0;
|
||||||
Error_wmitlv_check_tlv_params:
|
Error_wmitlv_check_tlv_params:
|
||||||
return (-1);
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Helper Function to vaidate the prepared TLV's for an WMI event to be sent
|
* wmitlv_check_event_tlv_params() - tlv helper function
|
||||||
* Return 0 if success.
|
* @os_handle: os context handle
|
||||||
* <0 if failure.
|
* @param_struc_ptr: pointer to tlv structure
|
||||||
|
* @is_cmd_id: boolean for command attribute
|
||||||
|
* @wmi_cmd_event_id: command event id
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Helper Function to vaidate the prepared TLV's for
|
||||||
|
* an WMI event/command to be sent.
|
||||||
|
*
|
||||||
|
* Return: 0 if success. Return < 0 if failure.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
wmitlv_check_event_tlv_params(void *os_handle, void *param_struc_ptr,
|
wmitlv_check_event_tlv_params(void *os_handle, void *param_struc_ptr,
|
||||||
A_UINT32 param_buf_len, A_UINT32 wmi_cmd_event_id)
|
A_UINT32 param_buf_len, A_UINT32 wmi_cmd_event_id)
|
||||||
{
|
{
|
||||||
A_UINT32 is_cmd_id = 0;
|
A_UINT32 is_cmd_id = 0;
|
||||||
return (wmitlv_check_tlv_params
|
|
||||||
|
return wmitlv_check_tlv_params
|
||||||
(os_handle, param_struc_ptr, param_buf_len, is_cmd_id,
|
(os_handle, param_struc_ptr, param_buf_len, is_cmd_id,
|
||||||
wmi_cmd_event_id));
|
wmi_cmd_event_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Helper Function to vaidate the prepared TLV's for an WMI command to be sent
|
* wmitlv_check_command_tlv_params() - tlv helper function
|
||||||
* Return 0 if success.
|
* @os_handle: os context handle
|
||||||
* <0 if failure.
|
* @param_struc_ptr: pointer to tlv structure
|
||||||
|
* @is_cmd_id: boolean for command attribute
|
||||||
|
* @wmi_cmd_event_id: command event id
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Helper Function to vaidate the prepared TLV's for
|
||||||
|
* an WMI event/command to be sent.
|
||||||
|
*
|
||||||
|
* Return: 0 if success. Return < 0 if failure.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
wmitlv_check_command_tlv_params(void *os_handle, void *param_struc_ptr,
|
wmitlv_check_command_tlv_params(void *os_handle, void *param_struc_ptr,
|
||||||
@@ -423,15 +469,26 @@ wmitlv_check_command_tlv_params(void *os_handle, void *param_struc_ptr,
|
|||||||
A_UINT32 wmi_cmd_event_id)
|
A_UINT32 wmi_cmd_event_id)
|
||||||
{
|
{
|
||||||
A_UINT32 is_cmd_id = 1;
|
A_UINT32 is_cmd_id = 1;
|
||||||
return (wmitlv_check_tlv_params
|
|
||||||
|
return wmitlv_check_tlv_params
|
||||||
(os_handle, param_struc_ptr, param_buf_len, is_cmd_id,
|
(os_handle, param_struc_ptr, param_buf_len, is_cmd_id,
|
||||||
wmi_cmd_event_id));
|
wmi_cmd_event_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Helper Function to vaidate the TLV's coming for an event/command and also pads data to TLV's if necessary
|
* wmitlv_check_and_pad_tlvs() - tlv helper function
|
||||||
* Return 0 if success.
|
* @os_handle: os context handle
|
||||||
<0 if failure.
|
* @param_buf_len: length of tlv parameter
|
||||||
|
* @param_struc_ptr: pointer to tlv structure
|
||||||
|
* @is_cmd_id: boolean for command attribute
|
||||||
|
* @wmi_cmd_event_id: command event id
|
||||||
|
* @wmi_cmd_struct_ptr: wmi command structure
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* vaidate the TLV's coming for an event/command and
|
||||||
|
* also pads data to TLV's if necessary
|
||||||
|
*
|
||||||
|
* Return: 0 if success. Return < 0 if failure.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
||||||
@@ -447,6 +504,7 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
wmitlv_cmd_param_info *cmd_param_tlvs_ptr = NULL;
|
wmitlv_cmd_param_info *cmd_param_tlvs_ptr = NULL;
|
||||||
A_UINT32 remaining_expected_tlvs = 0xFFFFFFFF;
|
A_UINT32 remaining_expected_tlvs = 0xFFFFFFFF;
|
||||||
A_UINT32 len_wmi_cmd_struct_buf;
|
A_UINT32 len_wmi_cmd_struct_buf;
|
||||||
|
A_INT32 error = -1;
|
||||||
|
|
||||||
/* Get the number of TLVs for this command/event */
|
/* Get the number of TLVs for this command/event */
|
||||||
if (wmitlv_get_attributes
|
if (wmitlv_get_attributes
|
||||||
@@ -455,7 +513,7 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
wmi_tlv_print_error
|
wmi_tlv_print_error
|
||||||
("%s: ERROR: Couldn't get expected number of TLVs for Cmd=%d\n",
|
("%s: ERROR: Couldn't get expected number of TLVs for Cmd=%d\n",
|
||||||
__func__, wmi_cmd_event_id);
|
__func__, wmi_cmd_event_id);
|
||||||
return -1;
|
return error;
|
||||||
}
|
}
|
||||||
/* NOTE: the returned number of TLVs is in "attr_struct_ptr.cmd_num_tlv" */
|
/* NOTE: the returned number of TLVs is in "attr_struct_ptr.cmd_num_tlv" */
|
||||||
|
|
||||||
@@ -467,8 +525,10 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
wmi_tlv_os_mem_alloc(os_handle, *wmi_cmd_struct_ptr,
|
wmi_tlv_os_mem_alloc(os_handle, *wmi_cmd_struct_ptr,
|
||||||
len_wmi_cmd_struct_buf);
|
len_wmi_cmd_struct_buf);
|
||||||
#else
|
#else
|
||||||
/* Dynamic memory allocation is not supported. Use the buffer g_wmi_static_cmd_param_info_buf, which should be set using wmi_tlv_set_static_param_tlv_buf(),
|
/* Dynamic memory allocation is not supported. Use the buffer
|
||||||
for base structure of format wmi_cmd_event_id##_param_tlvs */
|
* g_wmi_static_cmd_param_info_buf, which should be set using
|
||||||
|
* wmi_tlv_set_static_param_tlv_buf(),
|
||||||
|
* for base structure of format wmi_cmd_event_id##_param_tlvs */
|
||||||
*wmi_cmd_struct_ptr = g_wmi_static_cmd_param_info_buf;
|
*wmi_cmd_struct_ptr = g_wmi_static_cmd_param_info_buf;
|
||||||
if (attr_struct_ptr.cmd_num_tlv > g_wmi_static_max_cmd_param_tlvs) {
|
if (attr_struct_ptr.cmd_num_tlv > g_wmi_static_max_cmd_param_tlvs) {
|
||||||
/* Error: Expecting more TLVs that accomodated for static structure */
|
/* Error: Expecting more TLVs that accomodated for static structure */
|
||||||
@@ -476,7 +536,7 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
("%s: Error: Expecting more TLVs that accomodated for static structure. Expected:%d Accomodated:%d\n",
|
("%s: Error: Expecting more TLVs that accomodated for static structure. Expected:%d Accomodated:%d\n",
|
||||||
__func__, attr_struct_ptr.cmd_num_tlv,
|
__func__, attr_struct_ptr.cmd_num_tlv,
|
||||||
g_wmi_static_max_cmd_param_tlvs);
|
g_wmi_static_max_cmd_param_tlvs);
|
||||||
return -1;
|
return error;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (*wmi_cmd_struct_ptr == NULL) {
|
if (*wmi_cmd_struct_ptr == NULL) {
|
||||||
@@ -484,7 +544,7 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
wmi_tlv_print_error
|
wmi_tlv_print_error
|
||||||
("%s: Error: unable to alloc memory (size=%d) for TLV\n",
|
("%s: Error: unable to alloc memory (size=%d) for TLV\n",
|
||||||
__func__, len_wmi_cmd_struct_buf);
|
__func__, len_wmi_cmd_struct_buf);
|
||||||
return -1;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd_param_tlvs_ptr = (wmitlv_cmd_param_info *) *wmi_cmd_struct_ptr;
|
cmd_param_tlvs_ptr = (wmitlv_cmd_param_info *) *wmi_cmd_struct_ptr;
|
||||||
@@ -603,9 +663,12 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
A_UINT32 i;
|
A_UINT32 i;
|
||||||
|
|
||||||
if (attr_struct_ptr.tag_varied_size == WMITLV_SIZE_FIX) {
|
if (attr_struct_ptr.tag_varied_size == WMITLV_SIZE_FIX) {
|
||||||
/* This is not allowed. The tag WMITLV_TAG_ARRAY_STRUC can only be used with variable-length structure array
|
/* This is not allowed. The tag WMITLV_TAG_ARRAY_STRUC can
|
||||||
should not have a fixed number of elements (contradicting). Use WMITLV_TAG_ARRAY_FIXED_STRUC tag for
|
* only be used with variable-length structure array
|
||||||
fixed size structure array(where structure never change without breaking compatibility) */
|
* should not have a fixed number of elements (contradicting).
|
||||||
|
* Use WMITLV_TAG_ARRAY_FIXED_STRUC tag for fixed size
|
||||||
|
* structure array(where structure never change without
|
||||||
|
* breaking compatibility) */
|
||||||
wmi_tlv_print_error
|
wmi_tlv_print_error
|
||||||
("%s: ERROR: TLV (tag=%d) should be variable-length and not fixed length\n",
|
("%s: ERROR: TLV (tag=%d) should be variable-length and not fixed length\n",
|
||||||
__func__, curr_tlv_tag);
|
__func__, curr_tlv_tag);
|
||||||
@@ -642,8 +705,9 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
tlv_buf_ptr = (A_UINT8 *) new_tlv_buf;
|
tlv_buf_ptr = (A_UINT8 *) new_tlv_buf;
|
||||||
for (i = 0; i < num_of_elems; i++) {
|
for (i = 0; i < num_of_elems; i++) {
|
||||||
if (tlv_size_diff > 0) {
|
if (tlv_size_diff > 0) {
|
||||||
/* Incoming structure size is greater than expected structure size.
|
/* Incoming structure size is greater than expected
|
||||||
so copy the number of bytes equal to expected structure size */
|
* structure size. so copy the number of bytes equal
|
||||||
|
* to expected structure size */
|
||||||
wmi_tlv_OS_MEMCPY(tlv_buf_ptr,
|
wmi_tlv_OS_MEMCPY(tlv_buf_ptr,
|
||||||
(void *)(buf_ptr +
|
(void *)(buf_ptr +
|
||||||
i *
|
i *
|
||||||
@@ -651,9 +715,9 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
attr_struct_ptr.
|
attr_struct_ptr.
|
||||||
tag_struct_size);
|
tag_struct_size);
|
||||||
} else {
|
} else {
|
||||||
/* Incoming structure size is smaller than expected structure size.
|
/* Incoming structure size is smaller than expected
|
||||||
so copy the number of bytes equal to incoming structure size
|
* structure size. so copy the number of bytes equal
|
||||||
(other bytes would be zeroes) */
|
* to incoming structure size */
|
||||||
wmi_tlv_OS_MEMCPY(tlv_buf_ptr,
|
wmi_tlv_OS_MEMCPY(tlv_buf_ptr,
|
||||||
(void *)(buf_ptr +
|
(void *)(buf_ptr +
|
||||||
i *
|
i *
|
||||||
@@ -669,12 +733,14 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
A_UINT32 buf_mov_len;
|
A_UINT32 buf_mov_len;
|
||||||
|
|
||||||
if (tlv_size_diff < 0) {
|
if (tlv_size_diff < 0) {
|
||||||
/* Incoming structure size is smaller than expected size then this needs padding for each element in the array */
|
/* Incoming structure size is smaller than expected size
|
||||||
|
* then this needs padding for each element in the array */
|
||||||
|
|
||||||
/* Find amount of bytes to be padded for one element */
|
/* Find amount of bytes to be padded for one element */
|
||||||
num_padding_bytes = tlv_size_diff * -1;
|
num_padding_bytes = tlv_size_diff * -1;
|
||||||
|
|
||||||
/* Move subsequent TLVs by number of bytes to be padded for all elements */
|
/* Move subsequent TLVs by number of bytes to be padded
|
||||||
|
* for all elements */
|
||||||
if (param_buf_len >
|
if (param_buf_len >
|
||||||
(buf_idx + curr_tlv_len)) {
|
(buf_idx + curr_tlv_len)) {
|
||||||
src_addr =
|
src_addr =
|
||||||
@@ -692,13 +758,16 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
buf_mov_len);
|
buf_mov_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Move subsequent elements of array down by number of bytes to be padded for one element and alse set padding bytes to zero */
|
/* Move subsequent elements of array down by number of
|
||||||
|
* bytes to be padded for one element and alse set
|
||||||
|
* padding bytes to zero */
|
||||||
tlv_buf_ptr = buf_ptr;
|
tlv_buf_ptr = buf_ptr;
|
||||||
for (i = 0; i < num_of_elems; i++) {
|
for (i = 0; i < num_of_elems; i++) {
|
||||||
src_addr =
|
src_addr =
|
||||||
tlv_buf_ptr + in_tlv_len;
|
tlv_buf_ptr + in_tlv_len;
|
||||||
if (i != (num_of_elems - 1)) {
|
if (i != (num_of_elems - 1)) {
|
||||||
/* Need not move anything for last element in the array */
|
/* Need not move anything for last element
|
||||||
|
* in the array */
|
||||||
dst_addr =
|
dst_addr =
|
||||||
tlv_buf_ptr +
|
tlv_buf_ptr +
|
||||||
in_tlv_len +
|
in_tlv_len +
|
||||||
@@ -722,18 +791,21 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
tag_struct_size;
|
tag_struct_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update the number of padding bytes to total number of bytes padded for all elements in the array */
|
/* Update the number of padding bytes to total number
|
||||||
|
* of bytes padded for all elements in the array */
|
||||||
num_padding_bytes =
|
num_padding_bytes =
|
||||||
num_padding_bytes * num_of_elems;
|
num_padding_bytes * num_of_elems;
|
||||||
|
|
||||||
new_tlv_buf = buf_ptr;
|
new_tlv_buf = buf_ptr;
|
||||||
} else {
|
} else {
|
||||||
/* Incoming structure size is greater than expected size then this needs shrinking for each element in the array */
|
/* Incoming structure size is greater than expected size
|
||||||
|
* then this needs shrinking for each element in the array */
|
||||||
|
|
||||||
/* Find amount of bytes to be shrinked for one element */
|
/* Find amount of bytes to be shrinked for one element */
|
||||||
num_padding_bytes = tlv_size_diff * -1;
|
num_padding_bytes = tlv_size_diff * -1;
|
||||||
|
|
||||||
/* Move subsequent elements of array up by number of bytes to be shrinked for one element */
|
/* Move subsequent elements of array up by number of bytes
|
||||||
|
* to be shrinked for one element */
|
||||||
tlv_buf_ptr = buf_ptr;
|
tlv_buf_ptr = buf_ptr;
|
||||||
for (i = 0; i < (num_of_elems - 1); i++) {
|
for (i = 0; i < (num_of_elems - 1); i++) {
|
||||||
src_addr =
|
src_addr =
|
||||||
@@ -754,7 +826,8 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
tag_struct_size;
|
tag_struct_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Move subsequent TLVs by number of bytes to be shrinked for all elements */
|
/* Move subsequent TLVs by number of bytes to be shrinked
|
||||||
|
* for all elements */
|
||||||
if (param_buf_len >
|
if (param_buf_len >
|
||||||
(buf_idx + curr_tlv_len)) {
|
(buf_idx + curr_tlv_len)) {
|
||||||
src_addr =
|
src_addr =
|
||||||
@@ -772,7 +845,8 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
buf_mov_len);
|
buf_mov_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Update the number of padding bytes to total number of bytes shrinked for all elements in the array */
|
/* Update the number of padding bytes to total number of
|
||||||
|
* bytes shrinked for all elements in the array */
|
||||||
num_padding_bytes =
|
num_padding_bytes =
|
||||||
num_padding_bytes * num_of_elems;
|
num_padding_bytes * num_of_elems;
|
||||||
|
|
||||||
@@ -824,8 +898,9 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
wmi_tlv_OS_MEMCPY(new_tlv_buf, (void *)buf_ptr,
|
wmi_tlv_OS_MEMCPY(new_tlv_buf, (void *)buf_ptr,
|
||||||
curr_tlv_len);
|
curr_tlv_len);
|
||||||
#else
|
#else
|
||||||
/* Dynamic memory allocation is not supported. Padding has to be done with in the existing buffer assuming we have enough space
|
/* Dynamic memory allocation is not supported. Padding has
|
||||||
to grow */
|
* to be done with in the existing buffer assuming we have
|
||||||
|
* enough space to grow */
|
||||||
{
|
{
|
||||||
/* Note: tlv_size_diff is a value less than zero */
|
/* Note: tlv_size_diff is a value less than zero */
|
||||||
/* Move the Subsequent TLVs by amount of bytes needs to be padded */
|
/* Move the Subsequent TLVs by amount of bytes needs to be padded */
|
||||||
@@ -861,7 +936,7 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
buf_idx += curr_tlv_len + num_padding_bytes;
|
buf_idx += curr_tlv_len + num_padding_bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (0);
|
return 0;
|
||||||
Error_wmitlv_check_and_pad_tlvs:
|
Error_wmitlv_check_and_pad_tlvs:
|
||||||
if (is_cmd_id) {
|
if (is_cmd_id) {
|
||||||
wmitlv_free_allocated_command_tlvs(wmi_cmd_event_id,
|
wmitlv_free_allocated_command_tlvs(wmi_cmd_event_id,
|
||||||
@@ -871,13 +946,21 @@ Error_wmitlv_check_and_pad_tlvs:
|
|||||||
wmi_cmd_struct_ptr);
|
wmi_cmd_struct_ptr);
|
||||||
}
|
}
|
||||||
*wmi_cmd_struct_ptr = NULL;
|
*wmi_cmd_struct_ptr = NULL;
|
||||||
return (-1);
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Helper Function to validate and pad(if necessary) for incoming WMI Event TLVs
|
* wmitlv_check_and_pad_event_tlvs() - tlv helper function
|
||||||
* Return 0 if success.
|
* @os_handle: os context handle
|
||||||
<0 if failure.
|
* @param_struc_ptr: pointer to tlv structure
|
||||||
|
* @param_buf_len: length of tlv parameter
|
||||||
|
* @wmi_cmd_event_id: command event id
|
||||||
|
* @wmi_cmd_struct_ptr: wmi command structure
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* validate and pad(if necessary) for incoming WMI Event TLVs
|
||||||
|
*
|
||||||
|
* Return: 0 if success. Return < 0 if failure.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
wmitlv_check_and_pad_event_tlvs(void *os_handle, void *param_struc_ptr,
|
wmitlv_check_and_pad_event_tlvs(void *os_handle, void *param_struc_ptr,
|
||||||
@@ -886,15 +969,23 @@ wmitlv_check_and_pad_event_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
void **wmi_cmd_struct_ptr)
|
void **wmi_cmd_struct_ptr)
|
||||||
{
|
{
|
||||||
A_UINT32 is_cmd_id = 0;
|
A_UINT32 is_cmd_id = 0;
|
||||||
return (wmitlv_check_and_pad_tlvs
|
return wmitlv_check_and_pad_tlvs
|
||||||
(os_handle, param_struc_ptr, param_buf_len, is_cmd_id,
|
(os_handle, param_struc_ptr, param_buf_len, is_cmd_id,
|
||||||
wmi_cmd_event_id, wmi_cmd_struct_ptr));
|
wmi_cmd_event_id, wmi_cmd_struct_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Helper Function to validate and pad(if necessary) for incoming WMI Command TLVs
|
* wmitlv_check_and_pad_command_tlvs() - tlv helper function
|
||||||
* Return 0 if success.
|
* @os_handle: os context handle
|
||||||
<0 if failure.
|
* @param_struc_ptr: pointer to tlv structure
|
||||||
|
* @param_buf_len: length of tlv parameter
|
||||||
|
* @wmi_cmd_event_id: command event id
|
||||||
|
* @wmi_cmd_struct_ptr: wmi command structure
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* validate and pad(if necessary) for incoming WMI Command TLVs
|
||||||
|
*
|
||||||
|
* Return: 0 if success. Return < 0 if failure.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
wmitlv_check_and_pad_command_tlvs(void *os_handle, void *param_struc_ptr,
|
wmitlv_check_and_pad_command_tlvs(void *os_handle, void *param_struc_ptr,
|
||||||
@@ -903,14 +994,21 @@ wmitlv_check_and_pad_command_tlvs(void *os_handle, void *param_struc_ptr,
|
|||||||
void **wmi_cmd_struct_ptr)
|
void **wmi_cmd_struct_ptr)
|
||||||
{
|
{
|
||||||
A_UINT32 is_cmd_id = 1;
|
A_UINT32 is_cmd_id = 1;
|
||||||
return (wmitlv_check_and_pad_tlvs
|
return wmitlv_check_and_pad_tlvs
|
||||||
(os_handle, param_struc_ptr, param_buf_len, is_cmd_id,
|
(os_handle, param_struc_ptr, param_buf_len, is_cmd_id,
|
||||||
wmi_cmd_event_id, wmi_cmd_struct_ptr));
|
wmi_cmd_event_id, wmi_cmd_struct_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Helper Function to free any allocated buffers for WMI Event/Command TLV processing
|
* wmitlv_free_allocated_tlvs() - tlv helper function
|
||||||
* Return None
|
* @is_cmd_id: bollean to check if cmd or event tlv
|
||||||
|
* @cmd_event_id: command or event id
|
||||||
|
* @wmi_cmd_struct_ptr: wmi command structure
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* free any allocated buffers for WMI Event/Command TLV processing
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
*/
|
*/
|
||||||
static void wmitlv_free_allocated_tlvs(A_UINT32 is_cmd_id,
|
static void wmitlv_free_allocated_tlvs(A_UINT32 is_cmd_id,
|
||||||
A_UINT32 cmd_event_id,
|
A_UINT32 cmd_event_id,
|
||||||
@@ -965,9 +1063,15 @@ break;
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Helper Function to free any allocated buffers for WMI Command TLV processing
|
* wmitlv_free_allocated_command_tlvs() - tlv helper function
|
||||||
* Return None
|
* @cmd_event_id: command or event id
|
||||||
|
* @wmi_cmd_struct_ptr: wmi command structure
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* free any allocated buffers for WMI Event/Command TLV processing
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
*/
|
*/
|
||||||
void wmitlv_free_allocated_command_tlvs(A_UINT32 cmd_event_id,
|
void wmitlv_free_allocated_command_tlvs(A_UINT32 cmd_event_id,
|
||||||
void **wmi_cmd_struct_ptr)
|
void **wmi_cmd_struct_ptr)
|
||||||
@@ -975,9 +1079,15 @@ void wmitlv_free_allocated_command_tlvs(A_UINT32 cmd_event_id,
|
|||||||
wmitlv_free_allocated_tlvs(1, cmd_event_id, wmi_cmd_struct_ptr);
|
wmitlv_free_allocated_tlvs(1, cmd_event_id, wmi_cmd_struct_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Helper Function to free any allocated buffers for WMI Event TLV processing
|
* wmitlv_free_allocated_event_tlvs() - tlv helper function
|
||||||
* Return None
|
* @cmd_event_id: command or event id
|
||||||
|
* @wmi_cmd_struct_ptr: wmi command structure
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* free any allocated buffers for WMI Event/Command TLV processing
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
*/
|
*/
|
||||||
void wmitlv_free_allocated_event_tlvs(A_UINT32 cmd_event_id,
|
void wmitlv_free_allocated_event_tlvs(A_UINT32 cmd_event_id,
|
||||||
void **wmi_cmd_struct_ptr)
|
void **wmi_cmd_struct_ptr)
|
||||||
@@ -985,9 +1095,15 @@ void wmitlv_free_allocated_event_tlvs(A_UINT32 cmd_event_id,
|
|||||||
wmitlv_free_allocated_tlvs(0, cmd_event_id, wmi_cmd_struct_ptr);
|
wmitlv_free_allocated_tlvs(0, cmd_event_id, wmi_cmd_struct_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns 1 if the two given versions are compatible.
|
* wmi_versions_are_compatible() - tlv helper function
|
||||||
* Else return 0 if Incompatible.
|
* @vers1: host wmi version
|
||||||
|
* @vers2: target wmi version
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* check if two given wmi versions are compatible
|
||||||
|
*
|
||||||
|
* Return: none
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
wmi_versions_are_compatible(wmi_abi_version *vers1, wmi_abi_version *vers2)
|
wmi_versions_are_compatible(wmi_abi_version *vers1, wmi_abi_version *vers2)
|
||||||
@@ -1008,9 +1124,17 @@ wmi_versions_are_compatible(wmi_abi_version *vers1, wmi_abi_version *vers2)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Returns 1 if the two given versions are compatible.
|
* wmi_versions_can_downgrade() - tlv helper function
|
||||||
* Else return 0 if Incompatible.
|
* @version_whitelist_table: version table
|
||||||
|
* @my_vers: host version
|
||||||
|
* @opp_vers: target version
|
||||||
|
* @out_vers: downgraded version
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* check if target wmi version can be downgraded
|
||||||
|
*
|
||||||
|
* Return: 0 if success. Return < 0 if failure.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
wmi_versions_can_downgrade(int num_whitelist,
|
wmi_versions_can_downgrade(int num_whitelist,
|
||||||
@@ -1111,13 +1235,21 @@ wmi_versions_can_downgrade(int num_whitelist,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
|
* wmi_cmp_and_set_abi_version() - tlv helper function
|
||||||
|
* @version_whitelist_table: version table
|
||||||
|
* @my_vers: host version
|
||||||
|
* @opp_vers: target version
|
||||||
|
* @out_vers: downgraded version
|
||||||
|
*
|
||||||
* This routine will compare and set the WMI ABI version.
|
* This routine will compare and set the WMI ABI version.
|
||||||
* First, compare my version with the opposite side's version.
|
* First, compare my version with the opposite side's version.
|
||||||
* If incompatible, then check the whitelist to see if our side can downgrade.
|
* If incompatible, then check the whitelist to see if our side can downgrade.
|
||||||
* Finally, fill in the final ABI version into the output, out_vers.
|
* Finally, fill in the final ABI version into the output, out_vers.
|
||||||
* Return 0 if the output version is compatible .
|
* Return 0 if the output version is compatible
|
||||||
* Else return 1 if the output version is incompatible. .
|
* Else return 1 if the output version is incompatible
|
||||||
|
*
|
||||||
|
* Return: 0 if the output version is compatible else < 0.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
wmi_cmp_and_set_abi_version(int num_whitelist,
|
wmi_cmp_and_set_abi_version(int num_whitelist,
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2014 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2013-2014, 2016 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
||||||
*
|
*
|
||||||
@@ -36,12 +36,8 @@
|
|||||||
#include "wmi.h"
|
#include "wmi.h"
|
||||||
#include "wma.h"
|
#include "wma.h"
|
||||||
|
|
||||||
/* QCA Main host has dynamic memory allocation and should not define NO_DYNAMIC_MEM_ALLOC */
|
|
||||||
/* #define NO_DYNAMIC_MEM_ALLOC */
|
|
||||||
|
|
||||||
/* Following macro definitions use OS or platform specific functions */
|
/* Following macro definitions use OS or platform specific functions */
|
||||||
/* Following macro definitions use QCA MAIN windows host driver(applicable for Perigrene and its future platforms,
|
|
||||||
Pronto and its future platforms) specific APIs */
|
|
||||||
#define dummy_print(fmt, ...) {}
|
#define dummy_print(fmt, ...) {}
|
||||||
#define wmi_tlv_print_verbose dummy_print
|
#define wmi_tlv_print_verbose dummy_print
|
||||||
#define wmi_tlv_print_error cdf_print
|
#define wmi_tlv_print_error cdf_print
|
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2014 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2013-2014, 2016 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
||||||
*
|
*
|
||||||
@@ -34,5 +34,5 @@
|
|||||||
*/
|
*/
|
||||||
wmi_whitelist_version_info version_whitelist[] = {
|
wmi_whitelist_version_info version_whitelist[] = {
|
||||||
{0, 0, 0x5F414351, 0x00004C4D, 0, 0}
|
{0, 0, 0x5F414351, 0x00004C4D, 0, 0}
|
||||||
, /* Placeholder: Major=0, Minor=0, Namespace="QCA_ML" (Dummy entry) */
|
/* Placeholder: Major=0, Minor=0, Namespace="QCA_ML" (Dummy entry) */
|
||||||
};
|
};
|
Reference in New Issue
Block a user