diff --git a/target/inc/wmi_tlv_defs.h b/target/inc/wmi_tlv_defs.h index b1fb378d5d..532d9123de 100644 --- a/target/inc/wmi_tlv_defs.h +++ b/target/inc/wmi_tlv_defs.h @@ -725,6 +725,11 @@ typedef enum { WMITLV_TAG_STRUC_WMI_PDEV_SET_WAKEUP_CONFIG_CMDID_fixed_param, WMITLV_TAG_STRUC_wmi_tlv_buf_len_param, WMITLV_TAG_STRUC_wmi_service_available_event_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_antdiv_info_req_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_antdiv_info_event_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_antdiv_info, + WMITLV_TAG_STRUC_wmi_pdev_get_antdiv_status_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_pdev_antdiv_status_event_fixed_param, } WMITLV_TAG_ID; /* @@ -1021,6 +1026,8 @@ typedef enum { OP(WMI_PDEV_SET_REORDER_TIMEOUT_VAL_CMDID) \ OP(WMI_PEER_SET_RX_BLOCKSIZE_CMDID) \ OP(WMI_PDEV_SET_WAKEUP_CONFIG_CMDID) \ + OP(WMI_PEER_ANTDIV_INFO_REQ_CMDID) \ + OP(WMI_PDEV_GET_ANTDIV_STATUS_CMDID) \ /* add new CMD_LIST elements above this line */ /* @@ -1175,6 +1182,8 @@ typedef enum { OP(WMI_MGMT_TX_BUNDLE_COMPLETION_EVENTID) \ OP(WMI_READ_DATA_FROM_FLASH_EVENTID) \ OP(WMI_SERVICE_AVAILABLE_EVENTID) \ + OP(WMI_PEER_ANTDIV_INFO_EVENTID) \ + OP(WMI_PDEV_ANTDIV_STATUS_EVENTID) \ /* add new EVT_LIST elements above this line */ /* TLV definitions of WMI commands */ @@ -2326,6 +2335,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_BATCH_SCAN_ENABLE_CMDID); WMITLV_CREATE_PARAM_STRUC(WMI_PEER_INFO_REQ_CMDID); +#define WMITLV_TABLE_WMI_PEER_ANTDIV_INFO_REQ_CMDID(id, op, buf, len) \ + WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_peer_antdiv_info_req_cmd_fixed_param, \ + wmi_peer_antdiv_info_req_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ANTDIV_INFO_REQ_CMDID); + #define WMITLV_TABLE_WMI_RMC_SET_MODE_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_rmc_set_mode_cmd_fixed_param, \ wmi_rmc_set_mode_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -2534,6 +2549,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_D0_WOW_ENABLE_DISABLE_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_get_temperature_cmd_fixed_param, wmi_pdev_get_temperature_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_GET_TEMPERATURE_CMDID); +/* Pdev get ANT DIV feature status Cmd */ +#define WMITLV_TABLE_WMI_PDEV_GET_ANTDIV_STATUS_CMDID(id, op, buf, len) \ + WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_pdev_get_antdiv_status_cmd_fixed_param, wmi_pdev_get_antdiv_status_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_GET_ANTDIV_STATUS_CMDID); + /* Set antenna diversity Cmd */ #define WMITLV_TABLE_WMI_SET_ANTENNA_DIVERSITY_CMDID(id,op,buf,len) \ WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_pdev_set_antenna_diversity_cmd_fixed_param, wmi_pdev_set_antenna_diversity_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -3443,6 +3463,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_AP_PS_EGAP_INFO_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_info, peer_info, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_PEER_INFO_EVENTID); +#define WMITLV_TABLE_WMI_PEER_ANTDIV_INFO_EVENTID(id, op, buf, len) \ + WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_peer_antdiv_info_event_fixed_param, wmi_peer_antdiv_info_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_antdiv_info, peer_info, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ANTDIV_INFO_EVENTID); + #define WMITLV_TABLE_WMI_PEER_TX_FAIL_CNT_THR_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_tx_fail_cnt_thr_event_fixed_param, wmi_peer_tx_fail_cnt_thr_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_PEER_TX_FAIL_CNT_THR_EVENTID); @@ -3604,6 +3629,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_D0_WOW_DISABLE_ACK_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_temperature_event_fixed_param, wmi_pdev_temperature_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_TEMPERATURE_EVENTID); +/* Pdev get ANT DIV feature status event */ +#define WMITLV_TABLE_WMI_PDEV_ANTDIV_STATUS_EVENTID(id, op, buf, len) \ + WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_STRUC_wmi_pdev_antdiv_status_event_fixed_param, wmi_pdev_antdiv_status_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_ANTDIV_STATUS_EVENTID); + /* mDNS offload stats event */ #define WMITLV_TABLE_WMI_MDNS_STATS_EVENTID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mdns_stats_event_fixed_param, wmi_mdns_stats_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) diff --git a/target/inc/wmi_unified.h b/target/inc/wmi_unified.h index 63091490b8..c91ad3e25c 100644 --- a/target/inc/wmi_unified.h +++ b/target/inc/wmi_unified.h @@ -349,6 +349,8 @@ typedef enum { WMI_PDEV_SET_REORDER_TIMEOUT_VAL_CMDID, /** WMI command for WOW gpio and type */ WMI_PDEV_SET_WAKEUP_CONFIG_CMDID, + /* Get current ANT's per chain's RSSI info */ + WMI_PDEV_GET_ANTDIV_STATUS_CMDID, /* VDEV (virtual device) specific commands */ /** vdev create */ @@ -453,6 +455,11 @@ typedef enum { WMI_PEER_REORDER_QUEUE_REMOVE_CMDID, /** specify a limit for rx A-MPDU block size */ WMI_PEER_SET_RX_BLOCKSIZE_CMDID, + /** + * request peer antdiv info from FW. FW shall respond with + * PEER_ANTDIV_INFO_EVENTID + */ + WMI_PEER_ANTDIV_INFO_REQ_CMDID, /* beacon/management specific commands */ @@ -1064,6 +1071,8 @@ typedef enum { WMI_PDEV_SET_HW_MODE_RESP_EVENTID, WMI_PDEV_HW_MODE_TRANSITION_EVENTID, WMI_PDEV_SET_MAC_CONFIG_RESP_EVENTID, + /** Report ANT DIV feature's status */ + WMI_PDEV_ANTDIV_STATUS_EVENTID, /* VDEV specific events */ /** VDEV started event in response to VDEV_START request */ @@ -1119,6 +1128,8 @@ typedef enum { WMI_PEER_RATECODE_LIST_EVENTID, WMI_WDS_PEER_EVENTID, WMI_PEER_STA_PS_STATECHG_EVENTID, + /** Peer Ant Div Info Event with rssi per chain, etc */ + WMI_PEER_ANTDIV_INFO_EVENTID, /* beacon/mgmt specific events */ /** RX management frame. the entire frame is carried along with the event. */ @@ -11112,6 +11123,69 @@ typedef struct { */ } wmi_peer_info_event_fixed_param; +/** + * WMI_PEER_ANTDIV_INFO_REQ_CMDID + * Request FW to provide peer info + */ +typedef struct { + /** + * TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_peer_antdiv_info_req_cmd_fixed_param + */ + A_UINT32 tlv_header; + /** + * In order to get the peer antdiv info for a single peer, host shall + * issue the peer_mac_address of that peer. For getting the + * info all peers, the host shall issue 0xFFFFFFFF as the mac + * address. The firmware will return the peer info for all the + * peers on the specified vdev_id + */ + wmi_mac_addr peer_mac_address; + /** vdev id */ + A_UINT32 vdev_id; +} wmi_peer_antdiv_info_req_cmd_fixed_param; + +/** FW response with the peer antdiv info */ +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_peer_antdiv_info_event_fixed_param + */ + A_UINT32 tlv_header; + /** number of peers in peer_info */ + A_UINT32 num_peers; + /** VDEV to which the peer belongs to */ + A_UINT32 vdev_id; + /** + * This TLV is followed by another TLV of array of structs + * wmi_peer_antdiv_info peer_antdiv_info[]; + */ +} wmi_peer_antdiv_info_event_fixed_param; + +typedef struct { + /** + * TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_peer_antdiv_info + */ + A_UINT32 tlv_header; + /** mac addr of the peer */ + wmi_mac_addr peer_mac_address; + /** + * per chain rssi of the peer, for up to 8 chains. + * Each chain's entry reports the RSSI for different bandwidths: + * bits 7:0 -> primary 20 MHz + * bits 15:8 -> secondary 20 MHz of 40 MHz channel (if applicable) + * bits 23:16 -> secondary 40 MHz of 80 MHz channel (if applicable) + * bits 31:24 -> secondary 80 MHz of 160 MHz channel (if applicable) + * Each of these 8-bit RSSI reports is in dB units, with respect to + * the noise floor. + * 0x80 means invalid. + * All unused bytes within used chain_rssi indices shall be + * set to 0x80. + * All unused chain_rssi indices shall be set to 0x80808080. + */ + A_INT32 chain_rssi[8]; +} wmi_peer_antdiv_info; + /** FW response when tx failure count has reached threshold * for a peer */ typedef struct { @@ -13231,6 +13305,50 @@ typedef struct { A_UINT32 pdev_id; } wmi_pdev_temperature_event_fixed_param; +typedef enum { + ANTDIV_HW_CFG_STATUS, + ANTDIV_SW_CFG_STATUS, + ANTDIV_MAX_STATUS_TYPE_NUM +} ANTDIV_STATUS_TYPE; + +typedef struct { + /** + * TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_pdev_get_antdiv_status_cmd_fixed_param + */ + A_UINT32 tlv_header; + /* Status event ID - see ANTDIV_STATUS_TYPE */ + A_UINT32 status_event_id; + /** + * pdev_id for identifying the MAC + * See macros starting with WMI_PDEV_ID_ for values. + */ + A_UINT32 pdev_id; +} wmi_pdev_get_antdiv_status_cmd_fixed_param; + +typedef struct { + /** + * TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_pdev_antdiv_status_event_fixed_param + */ + A_UINT32 tlv_header; + /* ANT DIV feature enabled or not */ + A_UINT32 support; + A_UINT32 chain_num; /* how many chain supported */ + /* how many ANT supported, 32 max */ + A_UINT32 ant_num; + /** + * Each entry is for a tx/rx chain, and contains a bitmap + * identifying the antennas attached to that tx/rx chain. + */ + A_UINT32 selectable_ant_mask[8]; + /** + * pdev_id for identifying the MAC + * See macros starting with WMI_PDEV_ID_ for values. + */ + A_UINT32 pdev_id; +} wmi_pdev_antdiv_status_event_fixed_param; + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_set_dhcp_server_offload_cmd_fixed_param */ A_UINT32 vdev_id; diff --git a/target/inc/wmi_version.h b/target/inc/wmi_version.h index 3daffa3bce..7144897209 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_ 279 +#define __WMI_REVISION_ 280 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work