diff --git a/fw/htt.h b/fw/htt.h index 27b1bddaebcf..b1f72a3d06ba 100644 --- a/fw/htt.h +++ b/fw/htt.h @@ -263,9 +263,10 @@ * 3.133 Add packet_type_enable_data_flags fields in rx_ring_selection_cfg. * 3.134 Add qdata_refill flag in rx_peer_metadata_v1a. * 3.135 Add HTT_HOST4_TO_FW_RXBUF_RING def. + * 3.136 Add htt_ext_present flag in htt_tx_tcl_global_seq_metadata. */ #define HTT_CURRENT_VERSION_MAJOR 3 -#define HTT_CURRENT_VERSION_MINOR 135 +#define HTT_CURRENT_VERSION_MINOR 136 #define HTT_NUM_TX_FRAG_DESC 1024 @@ -2699,7 +2700,7 @@ typedef struct { type: 2, /* vdev_id based or peer_id or svc_id or global seq based */ host_inspected: 1, global_seq_no: 12, - rsvd: 1, + htt_ext_present:1, padding: 16; /* These 16 bits cannot be used by FW for the tcl command */ } htt_tx_tcl_global_seq_metadata; @@ -2742,6 +2743,13 @@ PREPACK struct htt_tx_tcl_metadata_v2 { #define HTT_TX_TCL_METADATA_GLBL_SEQ_NO_M 0x00007ff8 #define HTT_TX_TCL_METADATA_GLBL_SEQ_NO_S 3 +/* HTT ext present flag: + * Specify whether there is a htt ext desc present for this packet, + * accompanying the global seq no metadata. + */ +#define HTT_TX_TCL_METADATA_GLBL_SEQ_HTT_EXT_PRESENT_M 0x00008000 +#define HTT_TX_TCL_METADATA_GLBL_SEQ_HTT_EXT_PRESENT_S 15 + /*----- Get and Set V2 type field in Vdev, Peer, Svc_Class_Id, Global_seq_no */ #define HTT_TX_TCL_METADATA_TYPE_V2_GET(_var) \ @@ -2829,6 +2837,15 @@ PREPACK struct htt_tx_tcl_metadata_v2 { ((_var) |= ((_val) << HTT_TX_TCL_METADATA_GLBL_SEQ_NO_S)); \ } while (0) +#define HTT_TX_TCL_METADATA_GLBL_SEQ_HTT_EXT_PRESENT_GET(_var) \ + (((_var) & HTT_TX_TCL_METADATA_GLBL_SEQ_HTT_EXT_PRESENT_M) >> \ + HTT_TX_TCL_METADATA_GLBL_SEQ_HTT_EXT_PRESENT_S) +#define HTT_TX_TCL_METADATA_GLBL_SEQ_HTT_EXT_PRESENT_SET(_var, _val) \ + do { \ + HTT_CHECK_SET_VAL(HTT_TX_TCL_METADATA_GLBL_SEQ_HTT_EXT_PRESENT, _val); \ + ((_var) |= ((_val) << HTT_TX_TCL_METADATA_GLBL_SEQ_HTT_EXT_PRESENT_S)); \ + } while (0) + /*------------------------------------------------------------------ * End V2 Version of TCL Data Command *-----------------------------------------------------------------*/ diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 5fa49073d7cc..024814e85140 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1446,6 +1446,9 @@ typedef enum { WMITLV_TAG_STRUC_wmi_reg_chan_list_cc_ext_additional_params, WMITLV_TAG_STRUC_wmi_regulatory_rule_meta_data, WMITLV_TAG_STRUC_wmi_vdev_report_ap_oper_bw_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_mlo_peer_tid_to_link_map_event_fixed_param, + WMITLV_TAG_STRUC_wmi_usd_service_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_usd_service_event_fixed_param, } WMITLV_TAG_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -1999,6 +2002,7 @@ typedef enum { OP(WMI_SET_AP_SUSPEND_RESUME_CMDID) \ OP(WMI_P2P_GO_DFS_AP_CONFIG_CMDID) \ OP(WMI_VDEV_REPORT_AP_OPER_BW_CMDID) \ + OP(WMI_USD_SERVICE_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -2325,6 +2329,8 @@ typedef enum { OP(WMI_P2P_CLI_DFS_AP_BMISS_DETECTED_EVENTID) \ OP(WMI_MGMT_SRNG_REAP_EVENTID) \ OP(WMI_MLO_TLT_SELECTION_FOR_TID_SPRAY_EVENTID) \ + OP(WMI_MLO_PEER_TID_TO_LINK_MAP_EVENTID) \ + OP(WMI_USD_SERVICE_EVENTID) \ /* add new EVT_LIST elements above this line */ @@ -5650,6 +5656,14 @@ WMITLV_CREATE_PARAM_STRUC(WMI_SET_AP_SUSPEND_RESUME_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_report_ap_oper_bw_cmd_fixed_param, wmi_vdev_report_ap_oper_bw_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_REPORT_AP_OPER_BW_CMDID); +/* Unsynchronized Service Discovery Service Cmd */ +#define WMITLV_TABLE_WMI_USD_SERVICE_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_usd_service_cmd_fixed_param, wmi_usd_service_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, element_container_attr_data, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, chan_list, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, service_specific_info, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_USD_SERVICE_CMDID); + /************************** TLV definitions of WMI events *******************************/ @@ -7708,6 +7722,16 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_ENABLE_XLNA_EVENTID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mgmt_srng_reap_event_fixed_param, wmi_mgmt_srng_reap_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_MGMT_SRNG_REAP_EVENTID); +/** WMI event used to send status of Tid to link map configured */ +#define WMITLV_TABLE_WMI_MLO_PEER_TID_TO_LINK_MAP_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mlo_peer_tid_to_link_map_event_fixed_param, wmi_mlo_peer_tid_to_link_map_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_MLO_PEER_TID_TO_LINK_MAP_EVENTID); + +/* USD Service Event */ +#define WMITLV_TABLE_WMI_USD_SERVICE_EVENTID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_usd_service_event_fixed_param, wmi_usd_service_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) +WMITLV_CREATE_PARAM_STRUC(WMI_USD_SERVICE_EVENTID); + #ifdef __cplusplus } diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 838d3ad4b4ac..936cb5a13bd4 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -258,6 +258,27 @@ static INLINE void wmi_packed_arr_set_bits(A_UINT32 *arr, A_UINT32 entry_index, (pwmi_mac_addr)->mac_addr47to32 = ((c_macaddr)[4] | ((c_macaddr)[5] << 8));\ } while (0) +/** macro to convert generic hash of 6 bytes from WMI word format to char array */ +#define WMI_GENERIC_HASH_TO_CHAR_ARRAY(pwmi_generic_hash,c_generic_hash) do { \ + (c_generic_hash)[0] = (((pwmi_generic_hash)->generic_hash31to0) >> 0) & 0xff; \ + (c_generic_hash)[1] = (((pwmi_generic_hash)->generic_hash31to0) >> 8) & 0xff; \ + (c_generic_hash)[2] = (((pwmi_generic_hash)->generic_hash31to0) >> 16) & 0xff; \ + (c_generic_hash)[3] = (((pwmi_generic_hash)->generic_hash31to0) >> 24) & 0xff; \ + (c_generic_hash)[4] = (((pwmi_generic_hash)->generic_hash47to32) >> 0) & 0xff; \ + (c_generic_hash)[5] = (((pwmi_generic_hash)->generic_hash47to32) >> 8) & 0xff; \ +} while (0) + +/** macro to convert generic hash from char array to WMI word format */ +#define WMI_CHAR_ARRAY_TO_GENERIC_HASH(c_generic_hash,pwmi_generic_hash) do { \ + (pwmi_generic_hash)->generic_hash31to0 = \ + (((A_UINT32)(c_generic_hash)[0] << 0) | \ + ((A_UINT32)(c_generic_hash)[1] << 8) | \ + ((A_UINT32)(c_generic_hash)[2] << 16) | \ + ((A_UINT32)(c_generic_hash)[3] << 24)); \ + (pwmi_generic_hash)->generic_hash47to32 = \ + ((c_generic_hash)[4] | ((c_generic_hash)[5] << 8)); \ +} while (0) + /* * The below function declarations are for implementations on some * platforms of the above macros, but in function form, to save code @@ -1319,6 +1340,9 @@ typedef enum { /** WMI command to Request SAP suspend/resume */ WMI_SET_AP_SUSPEND_RESUME_CMDID, + /** Unsynchronized Service Discovery */ + WMI_USD_SERVICE_CMDID, + /* Offload 11k related requests */ WMI_11K_OFFLOAD_REPORT_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_11K_OFFLOAD), @@ -2346,6 +2370,11 @@ typedef enum { /* WMI evt to indicate switch type either to WLAN(XPAN) or non_WLAN(BLE) */ WMI_AUDIO_TRANSPORT_SWITCH_TYPE_EVENTID, + /** Usynchronized Service Discovery: + * Send USD event with USD mode status as success or fail. + */ + WMI_USD_SERVICE_EVENTID, + /* GPIO Event */ WMI_GPIO_INPUT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_GPIO), @@ -2533,6 +2562,8 @@ typedef enum { WMI_MLO_LINK_INFO_SYNC_EVENTID, /** WMI Event to announce host about the TLT update for TID */ WMI_MLO_TLT_SELECTION_FOR_TID_SPRAY_EVENTID, + /** WMI Event to send the status of T2LM configured */ + WMI_MLO_PEER_TID_TO_LINK_MAP_EVENTID, /* WMI event specific to Quiet handling */ WMI_QUIET_HANDLING_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_QUIET_OFL), @@ -31458,6 +31489,78 @@ typedef struct { /** This is followed by a TLV array of wmi_ocb_schedule_element. */ } wmi_ocb_set_config_cmd_fixed_param; +/** WMI Generic hash to be used by any 6 byte or 8 byte hash + * Used for 6 byte USD Service ID + */ +typedef struct _wmi_generic_hash { + /** upper 4 bytes of hash */ + A_UINT32 generic_hash31to0; + /** lower 4 bytes of hash */ + A_UINT32 generic_hash47to32; +} wmi_generic_hash; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_usd_add_delete_update_service_cmd_fixed_param */ + A_UINT32 tlv_header; + A_UINT32 vdev_id; + /* picks service type from WMI_USD_MODE */ + A_UINT32 usd_mode; + /* element_container_attribute struct: + * A_UINT8 element_container_attr_data[element_container_attr_len] */ + A_UINT32 element_container_attr_data_len; + /* 6 bytes of service id hash */ + wmi_generic_hash service_id; + /* Instance ID of the service */ + A_UINT32 instance_id; + /* Default frequency in MHz */ + A_UINT32 default_freq; + /* length of the Service Specific Info */ + A_UINT32 service_specific_info_len; + /* Time to live in seconds */ + A_UINT32 time_to_live; + /* picks protocol type from WMI_USD_SERVICE_PROTOCOL_TYPE */ + A_UINT32 protocol_type; + wmi_mac_addr device_mac_addr; +} wmi_usd_service_cmd_fixed_param; + +typedef struct { + A_UINT32 tlv_header; + A_UINT32 vdev_id; + /* picks values from WMI_USD_MODE_STATUS */ + A_UINT32 usd_mode_status; +} wmi_usd_service_event_fixed_param; + +typedef enum { + WMI_USD_MODE_FLUSH, + WMI_USD_MODE_PUBLISH, + WMI_USD_MODE_SUBSCRIBE, + WMI_USD_MODE_UPDATE_PUBLISH, + WMI_USD_MODE_CANCEL_PUBLISH, + WMI_USD_MODE_CANCEL_SUBSCRIBE, +} WMI_USD_MODE; + +typedef enum { + WMI_USD_MODE_FLUSH_SUCCESS, + WMI_USD_MODE_FLUSH_FAIL, + WMI_USD_MODE_PUBLISH_SUCCESS, + WMI_USD_MODE_PUBLISH_FAIL, + WMI_USD_MODE_SUBSCRIBE_SUCCESS, + WMI_USD_MODE_SUBSCRIBE_FAIL, + WMI_USD_MODE_UPDATE_PUBLISH_SUCCESS, + WMI_USD_MODE_UPDATE_PUBLISH_FAIL, + WMI_USD_MODE_CANCEL_PUBLISH_SUCCESS, + WMI_USD_MODE_CANCEL_PUBLISH_FAIL, + WMI_USD_MODE_CANCEL_SUBSCRIBE_SUCCESS, + WMI_USD_MODE_CANCEL_SUBSCRIBE_FAIL, +} WMI_USD_MODE_STATUS; + +typedef enum { + WMI_USD_SERVICE_PROTOCOL_TYPE_BONJOUR = 1, + WMI_USD_SERVICE_PROTOCOL_TYPE_GENERIC = 2, + WMI_USD_SERVICE_PROTOCOL_TYPE_CSA_MATTER = 3, +} WMI_USD_SERVICE_PROTOCOL_TYPE; + #define EXPIRY_TIME_IN_TSF_TIMESTAMP_OFFSET 0 #define EXPIRY_TIME_IN_TSF_TIMESTAMP_MASK 1 @@ -48754,6 +48857,14 @@ typedef struct { A_UINT32 tail_pointer; } wmi_mgmt_srng_reap_event_fixed_param; +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_mlo_peer_tid_to_link_map_event_fixed_param */ + A_UINT32 tlv_header; + /* status takes values from WMI_MLO_TID_TO_LINK_MAP_STATUS */ + A_UINT32 status; +} wmi_mlo_peer_tid_to_link_map_event_fixed_param; + /* ADD NEW DEFS HERE */ diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 0f4f31bef321..656d21d73472 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_ 1503 +#define __WMI_REVISION_ 1505 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work