diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 2c730f928f..6df95fb2b1 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -363,6 +363,7 @@ typedef enum { WMI_SERVICE_HW_DB2DBM_CONVERSION_SUPPORT = 178, WMI_SERVICE_SUPPORT_EXTEND_ADDRESS=179, /* indicates firmware supports host memory addresses larger than 32 bit */ WMI_SERVICE_BEACON_RECEPTION_STATS=180, /* Support per vdev beacon stats info */ + WMI_SERVICE_FETCH_TX_PN=181, /******* ADD NEW SERVICES HERE *******/ diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 7f036d1738..d1b34ca92f 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -946,6 +946,8 @@ typedef enum { WMITLV_TAG_STRUC_wmi_quiet_offload_info, WMITLV_TAG_STRUC_wmi_get_bcn_recv_stats_fixed_param, WMITLV_TAG_STRUC_wmi_vdev_bcn_recv_stats_event_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_tx_pn_request_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_tx_pn_response_event_fixed_param, } WMITLV_TAG_ID; /* @@ -1334,6 +1336,7 @@ typedef enum { OP(WMI_NDP_CMDID) \ OP(WMI_PDEV_PKTLOG_FILTER_CMDID) \ OP(WMI_VDEV_GET_BCN_RECEPTION_STATS_CMDID) \ + OP(WMI_PEER_TX_PN_REQUEST_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -1547,6 +1550,7 @@ typedef enum { OP(WMI_PDEV_CTL_FAILSAFE_CHECK_EVENTID) \ OP(WMI_NDP_EVENTID) \ OP(WMI_VDEV_BCN_RECEPTION_STATS_EVENTID) \ + OP(WMI_PEER_TX_PN_RESPONSE_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -2131,6 +2135,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_SPECTRAL_SCAN_ENABLE_CMDID); WMITLV_CREATE_PARAM_STRUC(WMI_REQUEST_STATS_CMDID); +/* PN Request Cmd */ +#define WMITLV_TABLE_WMI_PEER_TX_PN_REQUEST_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_tx_pn_request_cmd_fixed_param, wmi_peer_tx_pn_request_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_PEER_TX_PN_REQUEST_CMDID); + /* Request for memory dump stats Cmd */ #define WMITLV_TABLE_WMI_GET_FW_MEM_DUMP_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_get_fw_mem_dump_fixed_param, wmi_get_fw_mem_dump_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ @@ -4299,6 +4309,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_HOST_SWFDA_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_peer_extd2_stats, peer_extd2_stats, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_UPDATE_STATS_EVENTID); +/* Update PN response Event */ +#define WMITLV_TABLE_WMI_PEER_TX_PN_RESPONSE_EVENTID(id,op,buf,len)\ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_tx_pn_response_event_fixed_param, wmi_peer_tx_pn_response_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_PEER_TX_PN_RESPONSE_EVENTID); + /* For vdev based ht/vht info upload*/ #define WMITLV_TABLE_WMI_UPDATE_VDEV_RATE_STATS_EVENTID(id,op,buf,len)\ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_rate_stats_event_fixed_param, wmi_vdev_rate_stats_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 875bff5e1a..450240d400 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -555,6 +555,9 @@ typedef enum { /** WMI command related to AP channel width switching */ WMI_PEER_CHAN_WIDTH_SWITCH_CMDID, + /** WMI command to fetch current tx PN for the peer */ + WMI_PEER_TX_PN_REQUEST_CMDID, + /* beacon/management specific commands */ /** transmit beacon by reference . used for transmitting beacon on low latency interface like pcie */ @@ -1369,6 +1372,8 @@ typedef enum { /** Peer operating mode change indication sent to host to update stats */ WMI_PEER_OPER_MODE_CHANGE_EVENTID, + /** report the current tx PN for the peer */ + WMI_PEER_TX_PN_RESPONSE_EVENTID, /* beacon/mgmt specific events */ /** RX management frame. the entire frame is carried along with the event. */ @@ -6644,6 +6649,31 @@ typedef struct { A_UINT32 end_seq; /* end sequence number of the hole */ } wmi_rx_aggr_failure_info; +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_tx_pn_request_cmd_fixed_param */ + /** unique id identifying the VDEV, generated by the caller */ + A_UINT32 vdev_id; + /** peer MAC address */ + wmi_mac_addr peer_macaddr; + A_UINT32 key_type; /* use standard cipher types - see WMI_CIPHER_ defs */ +} wmi_peer_tx_pn_request_cmd_fixed_param; + +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_tx_pn_response_event_fixed_param */ + /** unique id identifying the VDEV, generated by the caller */ + A_UINT32 vdev_id; + /** peer MAC address */ + wmi_mac_addr peer_macaddr; + A_UINT32 key_type; /* use standard cipher types - see WMI_CIPHER_ defs */ + /** Packet Number + * The PN is provided in little endian order, with bits 7:0 of the PN + * residing in pn[0]. + * The key_type indirectly specifies the packet number length, and thus + * how many bytes within pn[] are filled with valid data. + */ + A_UINT8 pn[16]; +} wmi_peer_tx_pn_response_event_fixed_param; + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_stats_event_fixed_param */ wmi_stats_id stats_id; @@ -22687,6 +22717,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_PDEV_PKTLOG_FILTER_CMDID); WMI_RETURN_STRING(WMI_SET_CURRENT_COUNTRY_CMDID); WMI_RETURN_STRING(WMI_VDEV_GET_BCN_RECEPTION_STATS_CMDID); + WMI_RETURN_STRING(WMI_PEER_TX_PN_REQUEST_CMDID); } return "Invalid WMI cmd"; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index a091fef47c..35da5cfaee 100644 --- a/fw/wmi_version.h +++ b/fw/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_ 600 +#define __WMI_REVISION_ 601 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work