qcacld-3.0: Initial snapshot of ihelium wlan driver to match code-scanned SU Release 5.0.0.139. This is open-source version of wlan for next Android release. Change-Id: Icf598ca97da74f84bea607e4e902d1889806f507
161 lines
5.8 KiB
C
161 lines
5.8 KiB
C
/*
|
|
* Copyright (c) 2013-2014 The Linux Foundation. All rights reserved.
|
|
*
|
|
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
|
|
*
|
|
*
|
|
* Permission to use, copy, modify, and/or distribute this software for
|
|
* any purpose with or without fee is hereby granted, provided that the
|
|
* above copyright notice and this permission notice appear in all
|
|
* copies.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
|
|
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
|
|
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
|
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
|
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
|
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
* PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
|
|
/*
|
|
* This file was originally distributed by Qualcomm Atheros, Inc.
|
|
* under proprietary terms before Copyright ownership was assigned
|
|
* to the Linux Foundation.
|
|
*/
|
|
|
|
#ifndef _WMI_TLV_HELPER_H_
|
|
#define _WMI_TLV_HELPER_H_
|
|
|
|
/*
|
|
* Every command or event parameter structure will need a TLV definition.
|
|
* The macro WMITLV_TABLE is used to help build this TLV definition. Inside this macro define, the
|
|
* individual TLV's are specified. The parameters for WMITLV_ELEM are:
|
|
* (1) the list of parameters that are passed unchanged from the WMITLV_TABLE. Currently, they are id,op,buf,len
|
|
* (2) The TLV Tag. You should create a new tag for each cmd/event in WMITLV_TAG_ID. The name of the
|
|
* tag is <WMI_TLVTAG_STRUC_><CMD or Event ID name>. There are special tags,
|
|
* e.g. WMI_TLVTAG_ARRAY_UINT32 and WMI_TLVTAG_ARRAY_STRUC. WMI_TLVTAG_ARRAY_UINT32 is for a
|
|
* variable size array of UINT32 elements. WMI_TLVTAG_ARRAY_STRUC is for a varialbe size array
|
|
* of structures.
|
|
* (3) type of the TLV. For WMI_TLVTAG_ARRAY_* tag, then it is the type of each element.
|
|
* (4) Name of this TLV. It must be unique in this TLV TABLE.
|
|
* (5) Either WMITLV_SIZE_FIX or WMITLV_SIZE_VAR to indicate if this TLV is variable size.
|
|
*
|
|
* Note: It is important that the last TLV_ELEM does not have the "\" character.
|
|
*/
|
|
|
|
/* Size of the TLV Header which is the Tag and Length fields */
|
|
#define WMI_TLV_HDR_SIZE (1 * sizeof(A_UINT32))
|
|
|
|
/** TLV Helper macro to get the TLV Header given the pointer
|
|
* to the TLV buffer. */
|
|
#define WMITLV_GET_HDR(tlv_buf) (((A_UINT32 *)(tlv_buf))[0])
|
|
|
|
/** TLV Helper macro to set the TLV Header given the pointer
|
|
* to the TLV buffer. */
|
|
#define WMITLV_SET_HDR(tlv_buf, tag, len) (((A_UINT32 *)(tlv_buf))[0]) = ((tag << 16) | (len & 0x0000FFFF))
|
|
|
|
/** TLV Helper macro to get the TLV Tag given the TLV header. */
|
|
#define WMITLV_GET_TLVTAG(tlv_header) ((A_UINT32)((tlv_header)>>16))
|
|
|
|
/** TLV Helper macro to get the TLV Buffer Length (minus TLV
|
|
* header size) given the TLV header. */
|
|
#define WMITLV_GET_TLVLEN(tlv_header) ((A_UINT32)((tlv_header) & 0x0000FFFF))
|
|
|
|
/** TLV Helper macro to get the TLV length from TLV structure size by removing TLV header size */
|
|
#define WMITLV_GET_STRUCT_TLVLEN(tlv_struct) ((A_UINT32)(sizeof(tlv_struct)-WMI_TLV_HDR_SIZE))
|
|
|
|
/* Indicates whether the TLV is fixed size or variable length */
|
|
#define WMITLV_SIZE_FIX 0
|
|
#define WMITLV_SIZE_VAR 1
|
|
|
|
typedef struct {
|
|
A_UINT32 tag_order;
|
|
A_UINT32 tag_id;
|
|
A_UINT32 tag_struct_size;
|
|
A_UINT32 tag_varied_size;
|
|
A_UINT32 tag_array_size;
|
|
A_UINT32 cmd_num_tlv;
|
|
} wmitlv_attributes_struc;
|
|
|
|
/* Template structure definition for a variable size array of UINT32 */
|
|
typedef struct {
|
|
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMI_TLVTAG_ARRAY_UINT32 */
|
|
A_UINT32 uint32_array[1]; /* variable length Array of UINT32 */
|
|
} wmitlv_array_uint32;
|
|
|
|
/* Template structure definition for a variable size array of unknown structure */
|
|
typedef struct {
|
|
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMI_TLVTAG_ARRAY_STRUC */
|
|
A_UINT32 struc_array[1]; /* variable length Array of structures */
|
|
} wmitlv_array_struc;
|
|
|
|
/*
|
|
* Used to fill in the "arr_size" parameter when it is not specified and hence, invalid. Can be used to
|
|
* indicate if the original TLV definition specify this fixed array size.
|
|
*/
|
|
#define WMITLV_ARR_SIZE_INVALID 0x1FE
|
|
|
|
#define WMITLV_GET_TAG_NUM_TLV_ATTRIB(wmi_cmd_event_id) \
|
|
WMI_TLV_HLPR_NUM_TLVS_FOR_ ## wmi_cmd_event_id
|
|
|
|
void
|
|
wmitlv_set_static_param_tlv_buf(void *param_tlv_buf,
|
|
A_UINT32 max_tlvs_accomodated);
|
|
|
|
void
|
|
wmitlv_free_allocated_command_tlvs(A_UINT32 cmd_id, void **wmi_cmd_struct_ptr);
|
|
|
|
void
|
|
wmitlv_free_allocated_event_tlvs(A_UINT32 event_id, void **wmi_cmd_struct_ptr);
|
|
|
|
int
|
|
wmitlv_check_command_tlv_params(void *os_ctx, void *param_struc_ptr,
|
|
A_UINT32 param_buf_len,
|
|
A_UINT32 wmi_cmd_event_id);
|
|
|
|
int
|
|
wmitlv_check_event_tlv_params(void *os_ctx, void *param_struc_ptr,
|
|
A_UINT32 param_buf_len,
|
|
A_UINT32 wmi_cmd_event_id);
|
|
|
|
int
|
|
wmitlv_check_and_pad_command_tlvs(void *os_ctx, void *param_struc_ptr,
|
|
A_UINT32 param_buf_len,
|
|
A_UINT32 wmi_cmd_event_id,
|
|
void **wmi_cmd_struct_ptr);
|
|
|
|
int
|
|
wmitlv_check_and_pad_event_tlvs(void *os_ctx, void *param_struc_ptr,
|
|
A_UINT32 param_buf_len,
|
|
A_UINT32 wmi_cmd_event_id,
|
|
void **wmi_cmd_struct_ptr);
|
|
|
|
/** This structure is the element for the Version WhiteList
|
|
* table. */
|
|
typedef struct {
|
|
A_UINT32 major;
|
|
A_UINT32 minor;
|
|
A_UINT32 namespace_0;
|
|
A_UINT32 namespace_1;
|
|
A_UINT32 namespace_2;
|
|
A_UINT32 namespace_3;
|
|
} wmi_whitelist_version_info;
|
|
|
|
struct _wmi_abi_version; /* Forward declaration to make the ARM compiler happy */
|
|
|
|
int
|
|
wmi_cmp_and_set_abi_version(int num_whitelist,
|
|
wmi_whitelist_version_info *
|
|
version_whitelist_table,
|
|
struct _wmi_abi_version *my_vers,
|
|
struct _wmi_abi_version *opp_vers,
|
|
struct _wmi_abi_version *out_vers);
|
|
|
|
int
|
|
wmi_versions_are_compatible(struct _wmi_abi_version *vers1,
|
|
struct _wmi_abi_version *vers2);
|
|
|
|
#endif /*_WMI_TLV_HELPER_H_*/
|