Pārlūkot izejas kodu

fw-api: CL 12315625 - update fw common interface files

Change-Id: Idf559950e0eb337b10d55eddd4595c8d463343da
WMI: add latency config cmd msgs + PDEV_PARAM_LOW_LATENCY_MODE defs
CRs-Fixed: 2262693
spuligil 4 gadi atpakaļ
vecāks
revīzija
180149df48
3 mainītis faili ar 297 papildinājumiem un 1 dzēšanām
  1. 16 0
      fw/wmi_tlv_defs.h
  2. 280 0
      fw/wmi_unified.h
  3. 1 1
      fw/wmi_version.h

+ 16 - 0
fw/wmi_tlv_defs.h

@@ -1126,6 +1126,10 @@ typedef enum {
     WMITLV_TAG_STRUC_wmi_roam_msg_info_tlv_param,
     WMITLV_TAG_STRUC_wmi_vdev_set_tpc_power_cmd_fixed_param,
     WMITLV_TAG_STRUC_wmi_vdev_ch_power_info,
+    WMITLV_TAG_STRUC_wmi_vdev_tid_latency_config_fixed_param,
+    WMITLV_TAG_STRUC_wmi_vdev_latency_info,
+    WMITLV_TAG_STRUC_wmi_peer_tid_latency_config_fixed_param,
+    WMITLV_TAG_STRUC_wmi_tid_latency_info,
 } WMITLV_TAG_ID;
 
 /*
@@ -1580,6 +1584,8 @@ typedef enum {
     OP(WMI_PDEV_ENABLE_DURATION_BASED_TX_MODE_SELECTION_CMDID) \
     OP(WMI_TWT_NUDGE_DIALOG_CMDID) \
     OP(WMI_VDEV_SET_TPC_POWER_CMDID) \
+    OP(WMI_VDEV_TID_LATENCY_CONFIG_CMDID) \
+    OP(WMI_PEER_TID_LATENCY_CONFIG_CMDID) \
     /* add new CMD_LIST elements above this line */
 
 
@@ -3977,6 +3983,16 @@ WMITLV_CREATE_PARAM_STRUC(WMI_FWTEST_CMDID);
 WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_atf_peer_info, peer_info, WMITLV_SIZE_VAR)
 WMITLV_CREATE_PARAM_STRUC(WMI_PEER_ATF_REQUEST_CMDID);
 
+#define WMITLV_TABLE_WMI_VDEV_TID_LATENCY_CONFIG_CMDID(id,op,buf,len) \
+    WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_tid_latency_config_fixed_param, wmi_vdev_tid_latency_config_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
+    WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_vdev_latency_info, vdev_latency_info, WMITLV_SIZE_VAR)
+WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_TID_LATENCY_CONFIG_CMDID);
+
+#define WMITLV_TABLE_WMI_PEER_TID_LATENCY_CONFIG_CMDID(id,op,buf,len) \
+    WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_peer_tid_latency_config_fixed_param, wmi_peer_tid_latency_config_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
+    WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_tid_latency_info, latency_info, WMITLV_SIZE_VAR)
+WMITLV_CREATE_PARAM_STRUC(WMI_PEER_TID_LATENCY_CONFIG_CMDID);
+
 /* ATF Group Request commands */
 #define WMITLV_TABLE_WMI_ATF_SSID_GROUPING_REQUEST_CMDID(id,op,buf,len) \
     WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_atf_ssid_grp_request_fixed_param, wmi_atf_ssid_grp_request_fixed_param, fixed_param, WMITLV_SIZE_FIX) \

+ 280 - 0
fw/wmi_unified.h

@@ -266,6 +266,7 @@ typedef enum {
     WMI_GRP_CFR_CAPTURE,    /* 0x44 */
     WMI_GRP_ATM,            /* 0x45 ATM (Air Time Management group) */
     WMI_GRP_VENDOR,         /* 0x46 vendor specific group */
+    WMI_GRP_LATENCY,        /* 0x47 TID/AC level latency config */
 } WMI_GRP_ID;
 
 #define WMI_CMD_GRP_START_ID(grp_id) (((grp_id) << 12) | 0x1)
@@ -1352,6 +1353,12 @@ typedef enum {
     WMI_VENDOR_VDEV_CMDID,
     WMI_VENDOR_PEER_CMDID,
     /** Further vendor cmd IDs can be added below **/
+
+    /** WMI commands specific to Tid level Latency config **/
+    /** VDEV Latency Config command */
+    WMI_VDEV_TID_LATENCY_CONFIG_CMDID = WMI_CMD_GRP_START_ID(WMI_GRP_LATENCY),
+    /** TID Latency Request command */
+    WMI_PEER_TID_LATENCY_CONFIG_CMDID,
 } WMI_CMD_ID;
 
 typedef enum {
@@ -7104,6 +7111,9 @@ typedef enum {
      */
     WMI_PDEV_PARAM_SET_MESH_PARAMS,
 
+    /* Param to enable low latency mode */
+    WMI_PDEV_PARAM_LOW_LATENCY_SCHED_MODE,
+
 } WMI_PDEV_PARAM;
 
 #define WMI_PDEV_ONLY_BSR_TRIG_IS_ENABLED(trig_type) WMI_GET_BITS(trig_type, 0, 1)
@@ -24696,6 +24706,274 @@ typedef struct {
      */
 } wmi_atf_grp_wmm_ac_cfg_request_fixed_param;
 
+#define WMI_VDEV_LATENCY_TIDNUM_BIT_POS     0
+#define WMI_VDEV_LATENCY_TIDNUM_NUM_BITS    8
+
+#define WMI_VDEV_LATENCY_GET_TIDNUM(vdev_latency_info) \
+    WMI_GET_BITS(vdev_latency_info, WMI_VDEV_LATENCY_TIDNUM_BIT_POS, WMI_VDEV_LATENCY_TIDNUM_NUM_BITS)
+
+#define WMI_VDEV_LATENCY_SET_TIDNUM(vdev_latency_info,val) \
+    WMI_SET_BITS(vdev_latency_info, WMI_VDEV_LATENCY_TIDNUM_BIT_POS, WMI_VDEV_LATENCY_TIDNUM_NUM_BITS, val)
+
+#define WMI_VDEV_LATENCY_AC_BIT_POS     8
+#define WMI_VDEV_LATENCY_AC_NUM_BITS    2
+
+#define WMI_VDEV_LATENCY_GET_AC(vdev_latency_info) \
+    WMI_GET_BITS(vdev_latency_info, WMI_VDEV_LATENCY_AC_BIT_POS, WMI_VDEV_LATENCY_AC_NUM_BITS)
+
+#define WMI_VDEV_LATENCY_SET_AC(vdev_latency_info,val) \
+    WMI_SET_BITS(vdev_latency_info, WMI_VDEV_LATENCY_AC_BIT_POS, WMI_VDEV_LATENCY_AC_NUM_BITS, val)
+
+#define WMI_VDEV_LATENCY_DL_VALID_BIT_POS     10
+#define WMI_VDEV_LATENCY_DL_VALID_NUM_BITS    1
+
+#define WMI_VDEV_LATENCY_GET_DL_VALID(vdev_latency_info) \
+    WMI_GET_BITS(vdev_latency_info, WMI_VDEV_LATENCY_DL_VALID_BIT_POS, WMI_VDEV_LATENCY_DL_VALID_NUM_BITS)
+
+#define WMI_VDEV_LATENCY_SET_DL_VALID(vdev_latency_info,val) \
+    WMI_SET_BITS(vdev_latency_info, WMI_VDEV_LATENCY_DL_VALID_BIT_POS, WMI_VDEV_LATENCY_DL_VALID_NUM_BITS, val)
+
+#define WMI_VDEV_LATENCY_UL_VALID_BIT_POS     11
+#define WMI_VDEV_LATENCY_UL_VALID_NUM_BITS    1
+
+#define WMI_VDEV_LATENCY_GET_UL_VALID(vdev_latency_info) \
+    WMI_GET_BITS(vdev_latency_info,WMI_VDEV_LATENCY_UL_VALID_BIT_POS, WMI_VDEV_LATENCY_UL_VALID_NUM_BITS)
+
+#define WMI_VDEV_LATENCY_SET_UL_VALID(vdev_latency_info,val) \
+    WMI_SET_BITS(vdev_latency_info, WMI_VDEV_LATENCY_UL_VALID_BIT_POS, WMI_VDEV_LATENCY_UL_VALID_NUM_BITS, val)
+
+typedef struct {
+    /** TLV tag and len; tag equals
+     *  WMITLV_TAG_STRUC_wmi_vdev_latency_info
+     */
+    A_UINT32 tlv_header;
+    /*
+     * Maximum expected average delay between 2 schedules in milliseconds
+     * of given TID type when it has active traffic.
+     * 0x0 is considered as invalid service interval.
+     */
+    A_UINT32 service_interval;
+    /* burst_size:
+     * The number of bytes transmitted (in DL TIDs) / received (in UL ACs)
+     * in service interval.
+     */
+    A_UINT32 burst_size;
+    /* max_latency:
+     * The maximum end to end latency expectation, in milliseconds.
+     * If this value is 0x0, it shall be ignored.
+     */
+    A_UINT32 max_latency;
+    /* max_per:
+     * The maximum PER (as a percent) for the peer-TID, in range 1 - 100.
+     * If this value is 0x0, it shall be ignored.
+     */
+    A_UINT32 max_per;
+    /* min_tput:
+     * The minimum guaranteed throughput to the peer-TID, in Kbps.
+     * If this value is 0x0, it shall be ignored.
+     */
+    A_UINT32 min_tput;
+    /* vdev_latency_info
+     *  Bits  12 - 31   - Reserved (Shall be zero)
+     *  Bit   11        - UL latency config indication.
+     *                    If this bit is set then this latency info will
+     *                    be used when triggering UL traffic.  Until the
+     *                    AC specified in bits 8-9 has transferred at least
+     *                    burst_size amount of UL data within the service
+     *                    period, the AP will continue sending UL triggers
+     *                    when the STA has data of the specified access
+     *                    category ready to transmit.
+     *                    Note that the TID specified in bits 0-7 does not
+     *                    apply to UL; the TID-to-AC mapping applied to DL
+     *                    data that can be adjusted by the TID specified
+     *                    in bits 0-7 and the AC specified in bits 8-9 is
+     *                    distinct from the TID-to-AC mapping applied to
+     *                    UL data.
+     *  Bit   10        - DL latency config indication. If the bit is set
+     *                    then DL TID will use this latency config.
+     *  Bits  8 - 9     - This bit has info on the custom AC of DL TID.
+     *                    Also if bit 11 is set, the AP will apply some
+     *                    of these latency specs (in particular, burst_size)
+     *                    to UL traffic for this AC, by sending UL triggers
+     *                    until the desired amount of data has been received
+     *                    within the service period.
+     *  Bits  0 - 7     - Specifies the TID of interest that corresponds
+     *                    to the AC specified in bits 8-9.  This can be
+     *                    used to adjust the TID-to-AC mapping applied to
+     *                    DL data (if bit 10 is set).
+     */
+    A_UINT32 vdev_latency_info;
+} wmi_vdev_latency_info;
+
+/*
+ * Currently wmi_vdev_tid_latency_config_fixed_param will be sent per
+ * data tid to map the AC.
+ * Also to configure VDEV level latency config to be used by all TIDs
+ * based on the mapping.
+ * VDEV restart is expected during this command
+ */
+
+typedef struct {
+    A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_tid_latency_config_fixed_param  */
+    A_UINT32 pdev_id;
+    A_UINT32 vdev_id;
+    /*
+     * Following this structure is the TLV:
+     * struct wmi_vdev_latency_info vdev_latency_info[];
+     */
+} wmi_vdev_tid_latency_config_fixed_param ;
+
+#define WMI_TID_LATENCY_TIDNUM_BIT_POS     0
+#define WMI_TID_LATENCY_TIDNUM_NUM_BITS    8
+
+#define WMI_TID_LATENCY_GET_TIDNUM(latency_tid_info) \
+    WMI_GET_BITS(latency_tid_info, WMI_TID_LATENCY_TIDNUM_BIT_POS, WMI_TID_LATENCY_TIDNUM_NUM_BITS)
+
+#define WMI_TID_LATENCY_SET_TIDNUM(latency_tid_info,val) \
+    WMI_SET_BITS(latency_tid_info, WMI_TID_LATENCY_TIDNUM_BIT_POS, WMI_TID_LATENCY_TIDNUM_NUM_BITS, val)
+
+#define WMI_TID_LATENCY_AC_BIT_POS     8
+#define WMI_TID_LATENCY_AC_NUM_BITS    2
+
+#define WMI_TID_LATENCY_GET_AC(latency_tid_info) \
+    WMI_GET_BITS(latency_tid_info, WMI_TID_LATENCY_AC_BIT_POS ,  WMI_TID_LATENCY_AC_NUM_BITS)
+
+#define WMI_TID_LATENCY_SET_AC(latency_tid_info,val) \
+    WMI_SET_BITS(latency_tid_info, WMI_TID_LATENCY_AC_BIT_POS ,   WMI_TID_LATENCY_AC_NUM_BITS, val)
+
+#define WMI_TID_LATENCY_DL_ENABLE_BIT_POS     10
+#define WMI_TID_LATENCY_DL_ENABLE_NUM_BITS    1
+
+#define WMI_TID_LATENCY_GET_DL_ENABLE(latency_tid_info) \
+    WMI_GET_BITS(latency_tid_info,WMI_TID_LATENCY_DL_ENABLE_BIT_POS, WMI_TID_LATENCY_DL_ENABLE_NUM_BITS)
+
+#define WMI_TID_LATENCY_SET_DL_ENABLE(latency_tid_info,val) \
+    WMI_SET_BITS(latency_tid_info,WMI_TID_LATENCY_DL_ENABLE_BIT_POS, WMI_TID_LATENCY_DL_ENABLE_NUM_BITS, val)
+
+#define WMI_TID_LATENCY_UL_ENABLE_BIT_POS     11
+#define WMI_TID_LATENCY_UL_ENABLE_NUM_BITS    1
+
+#define WMI_TID_LATENCY_GET_UL_ENABLE(latency_tid_info) \
+    WMI_GET_BITS(latency_tid_info,WMI_TID_LATENCY_UL_ENABLE_BIT_POS, WMI_TID_LATENCY_UL_ENABLE_NUM_BITS)
+
+#define WMI_TID_LATENCY_SET_UL_ENABLE(latency_tid_info,val) \
+    WMI_SET_BITS(latency_tid_info,WMI_TID_LATENCY_UL_ENABLE_BIT_POS, WMI_TID_LATENCY_UL_ENABLE_NUM_BITS, val)
+
+#define WMI_LATENCY_BURST_SIZE_SUM_BIT_POS     12
+#define WMI_LATENCY_BURST_SIZE_SUM_NUM_BITS    2
+
+#define WMI_LATENCY_GET_BURST_SIZE_SUM(latency_tid_info) \
+    WMI_GET_BITS(latency_tid_info, WMI_LATENCY_BURST_SIZE_SUM_BIT_POS, WMI_LATENCY_BURST_SIZE_SUM_NUM_BITS)
+
+#define WMI_LATENCY_SET_BURST_SIZE_SUM(latency_tid_info,val) \
+    WMI_SET_BITS(latency_tid_info, WMI_LATENCY_BURST_SIZE_SUM_BIT_POS, WMI_LATENCY_BURST_SIZE_SUM_NUM_BITS, val)
+
+#define WMI_LATENCY_MSDUQ_ID_BIT_POS     14
+#define WMI_LATENCY_MSDUQ_ID_NUM_BITS    4
+
+#define WMI_LATENCY_GET_MSDUQ_ID(latency_tid_info) \
+    WMI_GET_BITS(latency_tid_info, WMI_LATENCY_MSDUQ_ID_BIT_POS, WMI_LATENCY_MSDUQ_ID_NUM_BITS)
+
+#define WMI_LATENCY_SET_MSDUQ_ID(latency_tid_info,val) \
+    WMI_SET_BITS(latency_tid_info, WMI_LATENCY_MSDUQ_ID_BIT_POS, WMI_LATENCY_MSDUQ_ID_NUM_BITS, val)
+
+typedef struct {
+    /** TLV tag and len; tag equals
+     *  WMITLV_TAG_STRUC_wmi_tid_latency_info
+     */
+    A_UINT32 tlv_header;
+    wmi_mac_addr dest_macaddr; /* Mac address of end client */
+    /*
+     * Maximum expected average delay between 2 schedules in milliseconds
+     * of given TID type when it has active traffic.
+     * 0x0 is considered as invalid service interval.
+     */
+    A_UINT32 service_interval;
+    /*
+     * Cumulative number of bytes are expected to be transmitted or
+     * received in the service interval when this specific Peer-TID
+     * has active traffic.
+     * If cumulative number of bytes is 0x0, it is considered as
+     * invalid burst size.  In that case, firmware would try to transmit
+     * and receive as many bytes as it can for this specific Peer-TID.
+     * This burst size will be added or subtracted from vdev burst size
+     * based on burst size sum bit in latency tid info.
+     * The VDEV burst size will be considered to be 0 when no VDEV latency
+     * command is received.
+     * If host needs to set burst size for a peer then they can use the
+     * peer cmd and set burst size sum bit to 1.
+     */
+    A_UINT32 burst_size_diff;
+    /* max_latency:
+     * The maximum end to end latency expectation, in milliseconds.
+     * If this value is 0x0, it shall be ignored.
+     */
+    A_UINT32 max_latency;
+    /* max_per:
+     * The maximum PER (as a percent) for the peer-TID, in range 1 - 100
+     * If this value is 0x0, it shall be ignored.
+     */
+    A_UINT32 max_per;
+    /* min_tput:
+     * The minimum guaranteed throughput to the peer-TID, in Kbps.
+     * If this value is 0x0, it shall be ignored.
+     */
+    A_UINT32 min_tput;
+    /* latency_tid_info
+     *  Bits 18-31      - Reserved (Shall be zero)
+     *  Bits 14-17      - MSDU queue flow id within the TID for configuring
+     *                    latency info per MSDU flow queue
+     *  Bit  12-13      - burst size sum. Bit to indicate whether to add or
+     *                    subtract burst_size_diff from vdev cmd burst size:
+     *                    1 -> addition
+     *                    2 -> subtraction
+     *  Bit   11        - UL latency config indication.
+     *                    If this bit is set then this latency info will
+     *                    be used when triggering UL traffic.  Until the
+     *                    AC specified in bits 8-9 has transferred at least
+     *                    burst_size amount of UL data within the service
+     *                    period, the AP will continue sending UL triggers
+     *                    when the STA has data of the specified access
+     *                    category ready to transmit.
+     *                    Note that the TID specified in bits 0-7 does not
+     *                    apply to UL; the TID-to-AC mapping applied to DL
+     *                    data that can be adjusted by the TID specified
+     *                    in bits 0-7 and the AC specified in bits 8-9 is
+     *                    distinct from the TID-to-AC mapping applied to
+     *                    UL data.
+     *  Bit   10        - DL latency config indication. If the bit is set
+     *                    then DL TID will use this latency config.
+     *  Bits  8 - 9     - This bit has info on the custom AC of DL TID.
+     *                    Also if bit 11 is set, the AP will apply some
+     *                    of these latency specs (in particular, burst_size)
+     *                    to UL traffic for this AC, by sending UL triggers
+     *                    until the desired amount of data has been received
+     *                    within the service period.
+     *  Bits  0 - 7     - Specifies the TID of interest that corresponds
+     *                    to the AC specified in bits 8-9.  This can be
+     *                    used to adjust the TID-to-AC mapping applied to
+     *                    DL data (if bit 10 is set).
+     */
+    A_UINT32 latency_tid_info;
+} wmi_tid_latency_info;
+
+/*
+ * Currently wmi_peer_tid_set_latency_request_fixed_param will be sent
+ * per TID per latency configured client.
+ * In future this command might come for multiple latency configured
+ * clients together.
+ * The clients are expected to be associated while receiving this command.
+ */
+
+typedef struct {
+    A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_tid_latency_config_fixed_param */
+    A_UINT32 pdev_id;
+    /*
+     * Following this structure is the TLV:
+     * struct wmi_tid_latency_info latency_info[];
+     */
+} wmi_peer_tid_latency_config_fixed_param;
+
 #define WMI_ATF_GROUP_CFG_PEER_BIT_POS     0
 #define WMI_ATF_GROUP_CFG_PEER_NUM_BITS    1
 
@@ -27406,6 +27684,8 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command)
         WMI_RETURN_STRING(WMI_PDEV_ENABLE_DURATION_BASED_TX_MODE_SELECTION_CMDID);
         WMI_RETURN_STRING(WMI_TWT_NUDGE_DIALOG_CMDID);
         WMI_RETURN_STRING(WMI_VDEV_SET_TPC_POWER_CMDID);
+        WMI_RETURN_STRING(WMI_VDEV_TID_LATENCY_CONFIG_CMDID);
+        WMI_RETURN_STRING(WMI_PEER_TID_LATENCY_CONFIG_CMDID);
     }
 
     return "Invalid WMI cmd";

+ 1 - 1
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_ 929
+#define __WMI_REVISION_ 930
 
 /** The Version Namespace should not be normally changed. Only
  *  host and firmware of the same WMI namespace will work