diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 01dd3f44924f..28ad988b8ff2 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1431,6 +1431,7 @@ typedef enum { WMITLV_TAG_STRUC_wmi_pdev_enable_xlna_cmd_fixed_param, WMITLV_TAG_STRUC_wmi_pdev_enable_xlna_event_fixed_param, WMITLV_TAG_STRUC_wmi_reg_chan_list_cc_event_ext2_fixed_param, + WMITLV_TAG_STRUC_wmi_pdev_set_custom_tx_power_per_mcs_cmd_fixed_param, } WMITLV_TAG_ID; /* * IMPORTANT: Please add _ALL_ WMI Commands Here. @@ -1976,6 +1977,7 @@ typedef enum { OP(WMI_VDEV_GET_TWT_SESSION_STATS_INFO_CMDID) \ OP(WMI_PDEV_ENABLE_WIFI_RADAR_CMDID) \ OP(WMI_PDEV_ENABLE_XLNA_CMDID) \ + OP(WMI_PDEV_SET_CUSTOM_TX_POWER_PER_MCS_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -5583,6 +5585,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_ENABLE_WIFI_RADAR_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_enable_xlna_cmd_fixed_param, wmi_pdev_enable_xlna_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_ENABLE_XLNA_CMDID); +/* WMI cmd to set custom TX power backoff value per band/chain/mcs to PHY */ +#define WMITLV_TABLE_WMI_PDEV_SET_CUSTOM_TX_POWER_PER_MCS_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_set_custom_tx_power_per_mcs_cmd_fixed_param, wmi_pdev_set_custom_tx_power_per_mcs_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, txpower_bkoff_array, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_CUSTOM_TX_POWER_PER_MCS_CMDID); + /************************** TLV definitions of WMI events *******************************/ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 709828eb7b86..bc44524413b0 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -563,6 +563,10 @@ typedef enum { WMI_PDEV_ENABLE_WIFI_RADAR_CMDID, /* WMI Command to enable xLNA */ WMI_PDEV_ENABLE_XLNA_CMDID, + /** + * WMI cmd to set custom TX power backoff value per band/chain/MCS to PHY. + */ + WMI_PDEV_SET_CUSTOM_TX_POWER_PER_MCS_CMDID, /* VDEV (virtual device) specific commands */ @@ -37446,6 +37450,7 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_PDEV_ENABLE_WIFI_RADAR_CMDID); WMI_RETURN_STRING(WMI_VDEV_GET_TWT_SESSION_STATS_INFO_CMDID); WMI_RETURN_STRING(WMI_PDEV_ENABLE_XLNA_CMDID); + WMI_RETURN_STRING(WMI_PDEV_SET_CUSTOM_TX_POWER_PER_MCS_CMDID); } return (A_UINT8 *) "Invalid WMI cmd"; @@ -46930,6 +46935,91 @@ typedef struct { A_UINT32 pdev_id; /* to identify for which pdev the response is received */ } wmi_pdev_set_tgtr2p_table_event_fixed_param; + +#define WMI_PDEV_SET_CUSTOM_TX_PWR_MAX_CHAIN_NUM 4 + +#define WMI_PDEV_SET_CUSTOM_TX_PWR_MAX_2G_RATE_NUM 18 + +#define WMI_PDEV_SET_CUSTOM_TX_PWR_MAX_5G_6G_RATE_NUM 24 + +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_set_custom_tx_power_per_mcs_cmd_fixed_param */ + A_UINT32 pdev_id; + + /* Every band's bitmap is per chain per mcs, the bit set indicate the txpower value existed + * in txpower_array, otherwise, it means no setting from up-layer and need treat the setting + * txpower as zero + */ + + /* currently 2GHz band has 2 chains (though space is allocated for up + * to 4 chains) and each chain has 18 rates. + * bitmap_of_2GHz_band[0] -> chain 0 bitmap: + * |bit 0|bit 1|......|bit 17| + * |rate 0|rate 1|......|rate 17| + * + * bitmap_of_2GHz_band[1] -> chain 1 bitmap: + * |bit 0|bit 1|......|bit 17| + * |rate 0|rate 1|......|rate 17| + * + * bitmap_of_2GHz_band[2] -> reserved + * bitmap_of_2GHz_band[3] -> reserved + */ + A_UINT32 bitmap_of_2GHz_band[WMI_PDEV_SET_CUSTOM_TX_PWR_MAX_CHAIN_NUM]; + + /* 5GHz band has 4 chains and each chain has 24 rates. + * bitmap_of_5GHz_band[0] -> chain 0 bitmap: + * |bit 0|bit 1|......|bit 23| + * |rate 0|rate 1|......|rate 23| + * + * bitmap_of_5GHz_band[1] -> chain 1 bitmap: + * |bit 0|bit 1|......|bit 23| + * |rate 0|rate 1|......|rate 23| + * + * bitmap_of_5GHz_band[2] -> chain 2 bitmap: + * |bit 0|bit 1|......|bit 23| + * |rate 0|rate 1|......|rate 23| + * + * bitmap_of_5GHz_band[3] -> chain 3 bitmap: + * |bit 0|bit 1|......|bit 23| + * |rate 0|rate 1|......|rate 23| + */ + A_UINT32 bitmap_of_5GHz_band[WMI_PDEV_SET_CUSTOM_TX_PWR_MAX_CHAIN_NUM]; + + /* 6GHz band has 4 chains and each chain has 24 rates. + * bitmap_of_6GHz_band[0] -> chain 0 bitmap: + * |bit 0|bit 1|......|bit 23| + * |rate 0|rate 1|......|rate 23| + * + * bitmap_of_6GHz_band[1] -> chain 1 bitmap: + * |bit 0|bit 1|......|bit 23| + * |rate 0|rate 1|......|rate 23| + * + * bitmap_of_6GHz_band[2] -> chain 2 bitmap: + * |bit 0|bit 1|......|bit 23| + * |rate 0|rate 1|......|rate 23| + * + * bitmap_of_6GHz_band[3] -> chain 3 bitmap: + * |bit 0|bit 1|......|bit 23| + * |rate 0|rate 1|......|rate 23| + */ + A_UINT32 bitmap_of_6GHz_band[WMI_PDEV_SET_CUSTOM_TX_PWR_MAX_CHAIN_NUM]; + + A_UINT32 txpower_array_len; + +/* This TLV is followed by array of bytes: + * A_UINT8 txpower_bkoff_array[]: + * The txpower backoff value for each bit set within the per-band bitmaps + * above, in dB units. + * The elements from the 2GHz band occur first, then the elements from the + * 5GHz band, then the elements from the 6GHz band. + * Within each band, the elements from the lower chain numbers (i.e. the + * lower words within the bitmap array) occur first. + * Within each chain of each band, the element from the lower rate indices + * (i.e. the least significant bits within the bitmap word) occur first. + */ +} wmi_pdev_set_custom_tx_power_per_mcs_cmd_fixed_param; + + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_mlo_vdev_get_link_info_cmd_fixed_param */ A_UINT32 vdev_id; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 0d77f3c694c7..cf487ddb4fb9 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_ 1450 +#define __WMI_REVISION_ 1451 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work