diff --git a/fw/wmi_services.h b/fw/wmi_services.h index 0343c3c9a0..ae3c778488 100644 --- a/fw/wmi_services.h +++ b/fw/wmi_services.h @@ -579,6 +579,7 @@ typedef enum { WMI_SERVICE_BIOS_SAR_SUPPORT = 326, /* FW support for SAR parameter stored in BIOS */ WMI_SERVICE_REO_QREF_SUPPORT = 327, /* FW supports REO QREF */ WMI_SERVICE_DELETE_ALL_PEER_BITMAP_SUPPORT = 328, /* target supports cmd to delete all specific peer type within a vdev */ + WMI_SERVICE_PN_REPLAY_CHECK_SUPPORT = 329, /* FW support to check RX mgmt frames has invalid PN in packets */ WMI_MAX_EXT2_SERVICE diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index ca9d65bcce..f66ec00cf7 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1248,6 +1248,10 @@ typedef enum { WMITLV_TAG_STRUC_wmi_rssi_dbm_conversion_params_info, WMITLV_TAG_STRUC_wmi_rssi_dbm_conversion_temp_offset_info, WMITLV_TAG_STRUC_wmi_ctrl_path_afc_stats_struct, + WMITLV_TAG_STRUC_wmi_frame_pn_params, + WMITLV_TAG_STRUC_wmi_peer_rx_pn_request_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_peer_rx_pn_response_event_fixed_param, + WMITLV_TAG_STRUC_wmi_vdev_pn_mgmt_rx_filter_cmd_fixed_param, } WMITLV_TAG_ID; /* @@ -1736,6 +1740,8 @@ typedef enum { OP(WMI_VDEV_SET_LTF_KEY_SEED_CMDID) \ OP(WMI_RTT_PASN_AUTH_STATUS_CMD) \ OP(WMI_RTT_PASN_DEAUTH_CMD) \ + OP(WMI_PEER_RX_PN_REQUEST_CMDID) \ + OP(WMI_VDEV_PN_MGMT_RX_FILTER_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -2018,6 +2024,7 @@ typedef enum { OP(WMI_RTT_PASN_PEER_CREATE_REQ_EVENTID) \ OP(WMI_RTT_PASN_PEER_DELETE_EVENTID) \ OP(WMI_PDEV_RSSI_DBM_CONVERSION_PARAMS_INFO_EVENTID) \ + OP(WMI_PEER_RX_PN_RESPONSE_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -2661,6 +2668,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_REQUEST_STATS_CMDID); WMITLV_CREATE_PARAM_STRUC(WMI_PEER_TX_PN_REQUEST_CMDID); +/* PN Request Cmd */ +#define WMITLV_TABLE_WMI_PEER_RX_PN_REQUEST_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_rx_pn_request_cmd_fixed_param, wmi_peer_rx_pn_request_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_PEER_RX_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) \ @@ -4187,6 +4200,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_SET_DSCP_TID_MAP_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_filter_nrp_config_cmd_fixed_param, wmi_vdev_filter_nrp_config_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_FILTER_NEIGHBOR_RX_PACKETS_CMDID); +/* Configure filter for PN Rx Pkt indication which pkts need to be forwarded to host */ +#define WMITLV_TABLE_WMI_VDEV_PN_MGMT_RX_FILTER_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_pn_mgmt_rx_filter_cmd_fixed_param, wmi_vdev_pn_mgmt_rx_filter_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_PN_MGMT_RX_FILTER_CMDID); + /* update a wds (4 address) entry */ #define WMITLV_TABLE_WMI_PEER_UPDATE_WDS_ENTRY_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_update_wds_entry_cmd_fixed_param, wmi_peer_update_wds_entry_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) @@ -5211,7 +5229,8 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PEER_STA_KICKOUT_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, bufp, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_rssi_ctl_ext, rssi_ctl_ext, WMITLV_SIZE_VAR) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mgmt_rx_reo_params, wmi_mgmt_rx_reo_params, reo_params, WMITLV_SIZE_FIX) \ - WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_mgmt_rx_params_ext, mgmt_rx_params_ext, WMITLV_SIZE_VAR) + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_mgmt_rx_params_ext, mgmt_rx_params_ext, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_frame_pn_params, pn_params, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_MGMT_RX_EVENTID); /* Management Rx FW Consumed Event */ @@ -5511,6 +5530,10 @@ WMITLV_CREATE_PARAM_STRUC(WMI_UPDATE_STATS_EVENTID); 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); +#define WMITLV_TABLE_WMI_PEER_RX_PN_RESPONSE_EVENTID(id,op,buf,len)\ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_rx_pn_response_event_fixed_param, wmi_peer_rx_pn_response_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_PEER_RX_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 be06dbd8ee..f8460973f4 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -96,6 +96,8 @@ extern "C" { /* The maximum value of access category */ #define WLAN_MAX_AC 4 +#define WMI_MAX_PN_LEN 8 + /* * These don't necessarily belong here; but as the MS/SM macros require * ar6000_internal.h to be included, it may not be defined as yet. @@ -587,6 +589,8 @@ typedef enum { /** Set LTF key seed which will be further used to derive LTF keys */ WMI_VDEV_SET_LTF_KEY_SEED_CMDID, + WMI_VDEV_PN_MGMT_RX_FILTER_CMDID, + /* peer specific commands */ /** create a peer */ @@ -697,6 +701,8 @@ typedef enum { /** Enable/Disable Intra Bss for the peer */ WMI_PEER_ENABLE_DISABLE_INTRA_BSS_CMDID, + WMI_PEER_RX_PN_REQUEST_CMDID, + /* beacon/management specific commands */ @@ -1751,6 +1757,9 @@ typedef enum { */ WMI_PEER_CREATE_CONF_EVENTID, + WMI_PEER_RX_PN_RESPONSE_EVENTID, + + /* beacon/mgmt specific events */ /** RX management frame. the entire frame is carried along with the event. */ WMI_MGMT_RX_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_MGMT), @@ -5683,6 +5692,11 @@ typedef struct { A_UINT32 filter_high; } wmi_mgmt_rx_reo_filter_configuration_cmd_fixed_param; +typedef struct { + A_UINT32 tlv_header; /* TLV tag (WMITLV_TAG_STRUC_wmi_frame_pn_params) and len */ + A_UINT8 cur_pn[WMI_MAX_PN_LEN]; + A_UINT8 prev_pn[WMI_MAX_PN_LEN]; +} wmi_frame_pn_params; typedef enum { PKT_CAPTURE_MODE_DISABLE = 0, @@ -9937,6 +9951,17 @@ typedef struct { A_UINT32 key_ix; } wmi_peer_tx_pn_request_cmd_fixed_param; +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rx_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 */ + /** key index **/ + A_UINT32 key_ix; +} wmi_peer_rx_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 */ @@ -9955,6 +9980,23 @@ typedef struct { A_UINT32 key_ix; } wmi_peer_tx_pn_response_event_fixed_param; +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rx_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 */ + A_UINT32 key_idx; + /** 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[WMI_MAX_PN_LEN]; +} wmi_peer_rx_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; @@ -19030,6 +19072,7 @@ typedef struct { #define WMI_RXERR_MIC 0x10 /* Michael MIC decrypt error */ #define WMI_RXERR_KEY_CACHE_MISS 0x20 /* No/incorrect key matter in h/w */ #define WMI_RX_OFFLOAD_MON_MODE 0x40 /* Offload dropped mgmt pkt's for only in capture mode*/ +#define WMI_RXERR_PN 0x80 /* Invalid PN number on frame */ typedef enum { PKT_PWR_SAVE_PAID_MATCH = 0x00000001, @@ -19742,8 +19785,6 @@ typedef struct { #define WMI_MAX_KEY_LEN 32 #define IGTK_PN_SIZE 6 -#define WMI_MAX_PN_LEN 8 - typedef struct { /** * WMITLV_TAG_STRUC_wmi_roam_ml_key_material_param will exist when link is not created by fw. @@ -30952,6 +30993,8 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_VDEV_SET_LTF_KEY_SEED_CMDID); WMI_RETURN_STRING(WMI_RTT_PASN_AUTH_STATUS_CMD); WMI_RETURN_STRING(WMI_RTT_PASN_DEAUTH_CMD); + WMI_RETURN_STRING(WMI_VDEV_PN_MGMT_RX_FILTER_CMDID); + WMI_RETURN_STRING(WMI_PEER_RX_PN_REQUEST_CMDID); } return (A_UINT8 *) "Invalid WMI cmd"; @@ -37772,6 +37815,17 @@ typedef struct { */ } wmi_vdev_multiple_peer_group_cmd_fixed_param; +/* WMI_VDEV_PN_MGMT_RX_FILTER_CMDID */ +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_pn_mgmt_rx_filter_cmd_fixed_param */ + A_UINT32 vdev_id; + /* RX Filter - MGMT/Action frame type is specified in each bit as per 802.11 spec + * PN check will be done for all MGMT frames irrespective of RX Filter. + * Rx filter is only used to decide whether PN failed frames should be forwarded to host + * Example for forwarding beacon and de-auth pkt alone to host then bit 8(Beacon) and 12(De-auth) must be set */ + A_UINT32 pn_rx_filter; +} wmi_vdev_pn_mgmt_rx_filter_cmd_fixed_param; /* Filter for Neighbor Rx Packets */ + #define WMI_RTT_PASN_PEER_CREATE_SECURITY_MODE_GET(flag) WMI_GET_BITS(flag, 0, 2) #define WMI_RTT_PASN_PEER_CREATE_SECURITY_MODE_SET(flag,val) WMI_SET_BITS(flag, 0, 2, val) #define WMI_RTT_PASN_PEER_CREATE_FORCE_SELF_MAC_USE_GET(flag) WMI_GET_BITS(flag, 2, 1) diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 4ffbdd17c1..be06c3f841 100644 --- a/fw/wmi_version.h +++ b/fw/wmi_version.h @@ -37,7 +37,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_ 1124 +#define __WMI_REVISION_ 1125 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work