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.
|
||||
*
|
||||
@@ -25,8 +25,6 @@
|
||||
* 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_defs.h"
|
||||
#include "wmi_version.h"
|
||||
@@ -41,15 +39,19 @@
|
||||
#define WMITLV_GET_TAG_ARRAY_SIZE(val) ((val >> 21) & 0x000001FF)
|
||||
#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_ATTRB1(tagID, tagStructSize, tagArraySize, tagVaried) (((tagVaried&0x1)<<30) | ((tagArraySize&0x1FF)<<21) | ((tagStructSize&0x1FF)<<12) | (tagID&0xFFF))
|
||||
#define WMITLV_SET_ATTRB0(id) ((WMITLV_GET_TAG_NUM_TLV_ATTRIB(id) << 24) | \
|
||||
(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),
|
||||
|
||||
#define WMITLV_GET_CMD_EVT_ATTRB_LIST(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[] = {
|
||||
WMITLV_ALL_CMD_LIST(WMITLV_GET_CMD_EVT_ATTRB_LIST)
|
||||
@@ -60,21 +62,26 @@ A_UINT32 evt_attr_list[] = {
|
||||
};
|
||||
|
||||
#ifdef NO_DYNAMIC_MEM_ALLOC
|
||||
static wmitlv_cmd_param_info *g_wmi_static_cmd_param_info_buf = NULL;
|
||||
A_UINT32 g_wmi_static_max_cmd_param_tlvs = 0;
|
||||
static wmitlv_cmd_param_info *g_wmi_static_cmd_param_info_buf;
|
||||
A_UINT32 g_wmi_static_max_cmd_param_tlvs;
|
||||
#endif
|
||||
|
||||
/* TLV helper routines */
|
||||
|
||||
/*
|
||||
* WMI TLV Helper function to set the static cmd_param_tlv structure and number of TLVs that can be
|
||||
* accomodated in the structure. This function should be used when dynamic memory allocation is not
|
||||
* supported.
|
||||
/**
|
||||
* wmitlv_set_static_param_tlv_buf() - tlv helper function
|
||||
* @param_tlv_buf: tlv buffer parameter
|
||||
* @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
|
||||
* 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.
|
||||
*
|
||||
* WMI TLV Helper function to set the static cmd_param_tlv structure
|
||||
* and number of TLVs that can be accomodated in the structure.
|
||||
* 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
|
||||
*/
|
||||
@@ -88,9 +95,18 @@ wmitlv_set_static_param_tlv_buf(void *param_tlv_buf,
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* WMI TLV Helper functions to find the attributes of the Command/Event TLVs.
|
||||
* Return 0 if success. Return >=1 if failure.
|
||||
/**
|
||||
* wmitlv_get_attributes() - tlv helper function
|
||||
* @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 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) ==
|
||||
WMITLV_GET_CMDID(pAttrArrayList[i])) {
|
||||
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) {
|
||||
wmi_tlv_print_verbose
|
||||
("%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 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) {
|
||||
wmi_tlv_print_error
|
||||
("%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;
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper Function to vaidate the prepared TLV's for an WMI event/command to be sent
|
||||
* Return 0 if success.
|
||||
* <0 if failure.
|
||||
/**
|
||||
* wmitlv_check_tlv_params() - tlv helper function
|
||||
* @os_handle: os context handle
|
||||
* @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
|
||||
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_UINT8 *buf_ptr = (unsigned char *)param_struc_ptr;
|
||||
A_UINT32 expected_num_tlvs, expected_tlv_len;
|
||||
A_INT32 error = -1;
|
||||
|
||||
/* Get the number of TLVs for this command/event */
|
||||
if (wmitlv_get_attributes
|
||||
@@ -251,7 +278,9 @@ wmitlv_check_tlv_params(void *os_handle, void *param_struc_ptr,
|
||||
expected_tlv_len =
|
||||
attr_struct_ptr.tag_array_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 ==
|
||||
attr_struct_ptr.tag_id) {
|
||||
expected_tlv_len =
|
||||
@@ -278,8 +307,9 @@ wmitlv_check_tlv_params(void *os_handle, void *param_struc_ptr,
|
||||
goto Error_wmitlv_check_tlv_params;
|
||||
}
|
||||
|
||||
/* Incase of variable length TLV's, there is no expectation on the length field so do whatever checking
|
||||
you can depending on the TLV tag if TLV length is non-zero */
|
||||
/* Incase of variable length TLV's, there is no expectation
|
||||
* 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) {
|
||||
/* Verify TLV length is aligned to the size of structure */
|
||||
if ((curr_tlv_len %
|
||||
@@ -345,8 +375,7 @@ wmitlv_check_tlv_params(void *os_handle, void *param_struc_ptr,
|
||||
|| (curr_tlv_tag ==
|
||||
WMITLV_TAG_ARRAY_BYTE)
|
||||
|| (curr_tlv_tag ==
|
||||
WMITLV_TAG_ARRAY_FIXED_STRUC))
|
||||
{
|
||||
WMITLV_TAG_ARRAY_FIXED_STRUC)) {
|
||||
/* Nothing to verify here */
|
||||
} else {
|
||||
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);
|
||||
}
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
Error_wmitlv_check_tlv_params:
|
||||
return (-1);
|
||||
return error;
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper Function to vaidate the prepared TLV's for an WMI event to be sent
|
||||
* Return 0 if success.
|
||||
* <0 if failure.
|
||||
/**
|
||||
* wmitlv_check_event_tlv_params() - tlv helper function
|
||||
* @os_handle: os context handle
|
||||
* @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
|
||||
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 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,
|
||||
wmi_cmd_event_id));
|
||||
wmi_cmd_event_id);
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper Function to vaidate the prepared TLV's for an WMI command to be sent
|
||||
* Return 0 if success.
|
||||
* <0 if failure.
|
||||
/**
|
||||
* wmitlv_check_command_tlv_params() - tlv helper function
|
||||
* @os_handle: os context handle
|
||||
* @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
|
||||
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 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,
|
||||
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
|
||||
* Return 0 if success.
|
||||
<0 if failure.
|
||||
/**
|
||||
* wmitlv_check_and_pad_tlvs() - tlv helper function
|
||||
* @os_handle: os context handle
|
||||
* @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
|
||||
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;
|
||||
A_UINT32 remaining_expected_tlvs = 0xFFFFFFFF;
|
||||
A_UINT32 len_wmi_cmd_struct_buf;
|
||||
A_INT32 error = -1;
|
||||
|
||||
/* Get the number of TLVs for this command/event */
|
||||
if (wmitlv_get_attributes
|
||||
@@ -455,7 +513,7 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
||||
wmi_tlv_print_error
|
||||
("%s: ERROR: Couldn't get expected number of TLVs for Cmd=%d\n",
|
||||
__func__, wmi_cmd_event_id);
|
||||
return -1;
|
||||
return error;
|
||||
}
|
||||
/* 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,
|
||||
len_wmi_cmd_struct_buf);
|
||||
#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(),
|
||||
for base structure of format wmi_cmd_event_id##_param_tlvs */
|
||||
/* 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(),
|
||||
* for base structure of format wmi_cmd_event_id##_param_tlvs */
|
||||
*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) {
|
||||
/* 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",
|
||||
__func__, attr_struct_ptr.cmd_num_tlv,
|
||||
g_wmi_static_max_cmd_param_tlvs);
|
||||
return -1;
|
||||
return error;
|
||||
}
|
||||
#endif
|
||||
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
|
||||
("%s: Error: unable to alloc memory (size=%d) for TLV\n",
|
||||
__func__, len_wmi_cmd_struct_buf);
|
||||
return -1;
|
||||
return error;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
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
|
||||
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) */
|
||||
/* This is not allowed. The tag WMITLV_TAG_ARRAY_STRUC can
|
||||
* only be used with variable-length structure array
|
||||
* 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
|
||||
("%s: ERROR: TLV (tag=%d) should be variable-length and not fixed length\n",
|
||||
__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;
|
||||
for (i = 0; i < num_of_elems; i++) {
|
||||
if (tlv_size_diff > 0) {
|
||||
/* Incoming structure size is greater than expected structure size.
|
||||
so copy the number of bytes equal to expected structure size */
|
||||
/* Incoming structure size is greater than expected
|
||||
* structure size. so copy the number of bytes equal
|
||||
* to expected structure size */
|
||||
wmi_tlv_OS_MEMCPY(tlv_buf_ptr,
|
||||
(void *)(buf_ptr +
|
||||
i *
|
||||
@@ -651,9 +715,9 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
||||
attr_struct_ptr.
|
||||
tag_struct_size);
|
||||
} else {
|
||||
/* Incoming structure size is smaller than expected structure size.
|
||||
so copy the number of bytes equal to incoming structure size
|
||||
(other bytes would be zeroes) */
|
||||
/* Incoming structure size is smaller than expected
|
||||
* structure size. so copy the number of bytes equal
|
||||
* to incoming structure size */
|
||||
wmi_tlv_OS_MEMCPY(tlv_buf_ptr,
|
||||
(void *)(buf_ptr +
|
||||
i *
|
||||
@@ -669,12 +733,14 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
||||
A_UINT32 buf_mov_len;
|
||||
|
||||
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 */
|
||||
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 >
|
||||
(buf_idx + curr_tlv_len)) {
|
||||
src_addr =
|
||||
@@ -692,13 +758,16 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
||||
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;
|
||||
for (i = 0; i < num_of_elems; i++) {
|
||||
src_addr =
|
||||
tlv_buf_ptr + in_tlv_len;
|
||||
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 =
|
||||
tlv_buf_ptr +
|
||||
in_tlv_len +
|
||||
@@ -722,18 +791,21 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
||||
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_of_elems;
|
||||
|
||||
new_tlv_buf = buf_ptr;
|
||||
} 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 */
|
||||
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;
|
||||
for (i = 0; i < (num_of_elems - 1); i++) {
|
||||
src_addr =
|
||||
@@ -754,7 +826,8 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
||||
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 >
|
||||
(buf_idx + curr_tlv_len)) {
|
||||
src_addr =
|
||||
@@ -772,7 +845,8 @@ wmitlv_check_and_pad_tlvs(void *os_handle, void *param_struc_ptr,
|
||||
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_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,
|
||||
curr_tlv_len);
|
||||
#else
|
||||
/* Dynamic memory allocation is not supported. Padding has to be done with in the existing buffer assuming we have enough space
|
||||
to grow */
|
||||
/* Dynamic memory allocation is not supported. Padding has
|
||||
* 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 */
|
||||
/* 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;
|
||||
}
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
Error_wmitlv_check_and_pad_tlvs:
|
||||
if (is_cmd_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 = NULL;
|
||||
return (-1);
|
||||
return error;
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper Function to validate and pad(if necessary) for incoming WMI Event TLVs
|
||||
* Return 0 if success.
|
||||
<0 if failure.
|
||||
/**
|
||||
* wmitlv_check_and_pad_event_tlvs() - tlv helper function
|
||||
* @os_handle: os context handle
|
||||
* @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
|
||||
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)
|
||||
{
|
||||
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,
|
||||
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
|
||||
* Return 0 if success.
|
||||
<0 if failure.
|
||||
/**
|
||||
* wmitlv_check_and_pad_command_tlvs() - tlv helper function
|
||||
* @os_handle: os context handle
|
||||
* @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
|
||||
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)
|
||||
{
|
||||
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,
|
||||
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
|
||||
* Return None
|
||||
/**
|
||||
* wmitlv_free_allocated_tlvs() - tlv helper function
|
||||
* @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,
|
||||
A_UINT32 cmd_event_id,
|
||||
@@ -965,9 +1063,15 @@ break;
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper Function to free any allocated buffers for WMI Command TLV processing
|
||||
* Return None
|
||||
/**
|
||||
* wmitlv_free_allocated_command_tlvs() - tlv helper function
|
||||
* @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 **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);
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper Function to free any allocated buffers for WMI Event TLV processing
|
||||
* Return None
|
||||
/**
|
||||
* wmitlv_free_allocated_event_tlvs() - tlv helper function
|
||||
* @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 **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);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns 1 if the two given versions are compatible.
|
||||
* Else return 0 if Incompatible.
|
||||
/**
|
||||
* wmi_versions_are_compatible() - tlv helper function
|
||||
* @vers1: host wmi version
|
||||
* @vers2: target wmi version
|
||||
*
|
||||
*
|
||||
* check if two given wmi versions are compatible
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
int
|
||||
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;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns 1 if the two given versions are compatible.
|
||||
* Else return 0 if Incompatible.
|
||||
/**
|
||||
* wmi_versions_can_downgrade() - tlv helper function
|
||||
* @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
|
||||
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.
|
||||
* First, compare my version with the opposite side's version.
|
||||
* 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.
|
||||
* Return 0 if the output version is compatible .
|
||||
* Else return 1 if the output version is incompatible. .
|
||||
* Return 0 if the output version is compatible
|
||||
* Else return 1 if the output version is incompatible
|
||||
*
|
||||
* Return: 0 if the output version is compatible else < 0.
|
||||
*/
|
||||
int
|
||||
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.
|
||||
*
|
||||
@@ -36,12 +36,8 @@
|
||||
#include "wmi.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 QCA MAIN windows host driver(applicable for Perigrene and its future platforms,
|
||||
Pronto and its future platforms) specific APIs */
|
||||
#define dummy_print(fmt, ...) {}
|
||||
#define wmi_tlv_print_verbose dummy_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.
|
||||
*
|
||||
@@ -34,5 +34,5 @@
|
||||
*/
|
||||
wmi_whitelist_version_info version_whitelist[] = {
|
||||
{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