diff --git a/target/inc/wmi_tlv_defs.h b/target/inc/wmi_tlv_defs.h index 8a3178a776..ea50a49d3e 100644 --- a/target/inc/wmi_tlv_defs.h +++ b/target/inc/wmi_tlv_defs.h @@ -709,6 +709,8 @@ typedef enum { WMITLV_TAG_STRUC_wmi_dbglog_time_stamp_sync_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_place_holder_1, WMITLV_TAG_STRUC_wmi_place_holder_2, + WMITLV_TAG_STRUC_wmi_per_chain_rssi_stats, + WMITLV_TAG_STRUC_wmi_rssi_stats, } WMITLV_TAG_ID; /* @@ -3192,9 +3194,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_OEM_RESPONSE_EVENTID); WMITLV_CREATE_PARAM_STRUC(WMI_HOST_SWBA_EVENTID); /* Update stats Event */ -#define WMITLV_TABLE_WMI_UPDATE_STATS_EVENTID(id,op,buf,len) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_stats_event_fixed_param, wmi_stats_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR) +#define WMITLV_TABLE_WMI_UPDATE_STATS_EVENTID(id, op, buf, len) \ + WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_stats_event_fixed_param, wmi_stats_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, data, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_per_chain_rssi_stats, wmi_per_chain_rssi_stats, chain_stats, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_ARRAY_STRUC, wmi_rssi_stats, rssi_stats, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_UPDATE_STATS_EVENTID); /* For vdev based ht/vht info upload*/ diff --git a/target/inc/wmi_unified.h b/target/inc/wmi_unified.h index f2c2dae2ed..96dd6227f4 100644 --- a/target/inc/wmi_unified.h +++ b/target/inc/wmi_unified.h @@ -77,6 +77,7 @@ extern "C" { #define MAX_TX_RATE_VALUES 10 /*Max Tx Rates */ #define MAX_RSSI_VALUES 10 /*Max Rssi values */ +#define MAX_CHAINS 8 /* The WLAN_MAX_AC macro cannot be changed without breaking * WMI compatibility. @@ -3742,6 +3743,32 @@ typedef struct { #define WMI_FAST_DIVERSITY_BIT_OFFSET 0 #define WMI_SLOW_DIVERSITY_BIT_OFFSET 1 +#define WMI_SLOW_DIVERSITY_CH0_WEIGHT_SHIFT 2 +#define WMI_SLOW_DIVERSITY_CH0_WEIGHT_MASK \ + (0xf << WMI_SLOW_DIVERSITY_CH0_WEIGHT_SHIFT) +#define WMI_SLOW_DIVERSITY_CH0_WEIGHT_GET_BITS(word32) \ + (((word32) & WMI_SLOW_DIVERSITY_CH0_WEIGHT_MASK) >> \ + WMI_SLOW_DIVERSITY_CH0_WEIGHT_SHIFT) +#define WMI_SLOW_DIVERSITY_CH0_WEIGHT_SET_BITS(word32, value) \ + do { \ + (word32) &= ~WMI_SLOW_DIVERSITY_CH0_WEIGHT_MASK; \ + (word32) |= ((value) << WMI_SLOW_DIVERSITY_CH0_WEIGHT_SHIFT) & \ + WMI_SLOW_DIVERSITY_CH0_WEIGHT_MASK; \ + } while (0) + +#define WMI_SLOW_DIVERSITY_CH1_WEIGHT_SHIFT 6 +#define WMI_SLOW_DIVERSITY_CH1_WEIGHT_MASK \ + (0xf << WMI_SLOW_DIVERSITY_CH1_WEIGHT_SHIFT) +#define WMI_SLOW_DIVERSITY_CH1_WEIGHT_GET_BITS(word32) \ + (((word32) & WMI_SLOW_DIVERSITY_CH1_WEIGHT_MASK) >> \ + WMI_SLOW_DIVERSITY_CH1_WEIGHT_SHIFT) +#define WMI_SLOW_DIVERSITY_CH1_WEIGHT_SET_BITS(word32, value) \ + do { \ + (word32) &= ~WMI_SLOW_DIVERSITY_CH1_WEIGHT_MASK; \ + (word32) |= ((value) << WMI_SLOW_DIVERSITY_CH1_WEIGHT_SHIFT) & \ + WMI_SLOW_DIVERSITY_CH1_WEIGHT_MASK; \ + } while (0) + typedef struct { /** TLV tag and len; tag equals * WMITLV_TAG_STRUC_wmi_pdev_set_antenna_diversity_cmd_fixed_param @@ -3755,10 +3782,16 @@ typedef struct { */ A_UINT32 pdev_id; }; - /** parameter */ - /** bit0 is for enable/disable FAST diversity, - * and bit1 is for enable/disable SLOW diversity, - * 0->disable, 1->enable + /* + * The following "value" field is divided into bit fields as follows: + * bits | purpose + * -----+--------------------------------------- + * 0 | enable/disable FAST diversity + * 1 | enable/disable SLOW diversity + * 5:2 | chain0 slow-diversity weighting factor + * 9:6 | chain1 slow-diversity weighting factor + * 31:10| currenty unused (set to 0x0) + * Refer to the above WMI_[FAST/SLOW]_DIVERSITY constants. */ A_UINT32 value; } wmi_pdev_set_antenna_diversity_cmd_fixed_param; @@ -4193,6 +4226,7 @@ typedef enum { WMI_REQUEST_VDEV_RATE_STAT = 0x20, WMI_REQUEST_INST_STAT = 0x40, WMI_REQUEST_MIB_STAT = 0x80, + WMI_REQUEST_RSSI_PER_CHAIN_STAT = 0x100, } wmi_stats_id; typedef struct { @@ -4897,6 +4931,28 @@ typedef struct { A_UINT32 reserved_4; } wmi_mib_stats; +typedef struct { + /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rssi_stats */ + A_UINT32 tlv_header; + A_UINT32 vdev_id; + A_INT32 rssi_avg_beacon[MAX_CHAINS]; + A_INT32 rssi_avg_data[MAX_CHAINS]; + wmi_mac_addr peer_macaddr; +} wmi_rssi_stats; + +typedef struct { + /* + * TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_per_chain_rssi_stats + */ + A_UINT32 tlv_header; + A_UINT32 num_per_chain_rssi_stats; + /* + * This TLV is followed by another TLV of array of structs: + * wmi_rssi_stats rssi_stats[num_per_chain_rssi_stats]; + */ +} wmi_per_chain_rssi_stats; + typedef struct { A_UINT32 tlv_header; /** TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_create_cmd_fixed_param */ diff --git a/target/inc/wmi_version.h b/target/inc/wmi_version.h index 9ce0a3af07..4e31fe5163 100644 --- a/target/inc/wmi_version.h +++ b/target/inc/wmi_version.h @@ -36,7 +36,7 @@ #define __WMI_VER_MINOR_ 0 /** WMI revision number has to be incremented when there is a * change that may or may not break compatibility */ -#define __WMI_REVISION_ 252 +#define __WMI_REVISION_ 254 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work