diff --git a/fw/wmi_tlv_defs.h b/fw/wmi_tlv_defs.h index 0e9a6ea518c1..d7effd28258a 100644 --- a/fw/wmi_tlv_defs.h +++ b/fw/wmi_tlv_defs.h @@ -1159,6 +1159,8 @@ typedef enum { WMITLV_TAG_STRUC_wmi_peer_create_mlo_params, WMITLV_TAG_STRUC_wmi_vdev_start_mlo_params, WMITLV_TAG_STRUC_wmi_vdev_create_mlo_params, + WMITLV_TAG_STRUC_wmi_pdev_set_bios_sar_table_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_pdev_set_bios_geo_table_cmd_fixed_param, } WMITLV_TAG_ID; /* @@ -1622,6 +1624,8 @@ typedef enum { OP(WMI_MLO_TEARDOWN_CMDID) \ OP(WMI_VDEV_IGMP_OFFLOAD_CMDID) \ OP(WMI_MGMT_RX_REO_FILTER_CONFIGURATION_CMDID) \ + OP(WMI_PDEV_SET_BIOS_SAR_TABLE_CMDID) \ + OP(WMI_PDEV_SET_BIOS_GEO_TABLE_CMDID) \ /* add new CMD_LIST elements above this line */ @@ -3957,6 +3961,19 @@ WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_ANTENNA_SWITCH_TABLE_CMDID); WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_UINT32, A_UINT32, ctl_info, WMITLV_SIZE_VAR) WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_CTL_TABLE_CMDID); +/* Set bios sar table */ +#define WMITLV_TABLE_WMI_PDEV_SET_BIOS_SAR_TABLE_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_set_bios_sar_table_cmd_fixed_param, wmi_pdev_set_bios_sar_table_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, sar_power, WMITLV_SIZE_VAR) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, dbs_backoff, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_BIOS_SAR_TABLE_CMDID); + +/* Set bios geo table */ +#define WMITLV_TABLE_WMI_PDEV_SET_BIOS_GEO_TABLE_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_set_bios_geo_table_cmd_fixed_param, wmi_pdev_set_bios_geo_table_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, geo_offset, WMITLV_SIZE_VAR) +WMITLV_CREATE_PARAM_STRUC(WMI_PDEV_SET_BIOS_GEO_TABLE_CMDID); + /* Override the array gain table */ #define WMITLV_TABLE_WMI_PDEV_SET_MIMOGAIN_TABLE_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_pdev_set_mimogain_table_cmd_fixed_param, wmi_pdev_set_mimogain_table_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ diff --git a/fw/wmi_unified.h b/fw/wmi_unified.h index 3771ba56be7b..c926f8961662 100644 --- a/fw/wmi_unified.h +++ b/fw/wmi_unified.h @@ -448,6 +448,10 @@ typedef enum { WMI_PDEV_ENABLE_DURATION_BASED_TX_MODE_SELECTION_CMDID, /* Get DPD status from HALPHY */ WMI_PDEV_GET_DPD_STATUS_CMDID, + /* Set bios sar table */ + WMI_PDEV_SET_BIOS_SAR_TABLE_CMDID, + /* Set bios geo table */ + WMI_PDEV_SET_BIOS_GEO_TABLE_CMDID, /* VDEV (virtual device) specific commands */ /** vdev create */ @@ -25500,6 +25504,66 @@ typedef struct { */ } wmi_pdev_set_ctl_table_cmd_fixed_param; +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_set_bios_sar_cmd_fixed_param */ + A_UINT32 pdev_id; /* pdev_id for identifying the MAC, See macros starting with WMI_PDEV_ID_ for values. */ + A_UINT32 sar_len; + /* sar power array are stored in TLV, which follow this structure; + * sar_len is the number of valid bytes in the sar power array; + * sar power array contains 22 elements. + * Each element stores the maximum SAR power on certain band. + * Its type is A_UINT8 and its unit is 0.25 dBm. + * sar_power[0] for chain0 2g + * sar_power[1] for chain0 5g unii-1 + * ... + * sar_power[4] for chain0 5g unii-4 + * sar_power[5] for chain0 6g unii-5 + * ... + * sar_power[10] for chain0 6g unii-10 + * sar_power[11] for chain1 2g + * ... + * sar_power[21] for chain1 6g unii-10 + */ + + A_UINT32 dbs_backoff_len; + /* dbs_backoff follow sar array, its type is A_UINT8; + * dbs_backoff[0] ~ dbs_backoff[5], these six elements are based on + * maximum SAR power, and make some offset adjustment in DBS mode. + * Their unit is 0.25 dB. + * dbs_backoff[0] for chain 0 2G + * dbs_backoff[1] for chain 0 5G + * dbs_backoff[2] for chain 0 6G + * dbs_backoff[3] for chain 1 2G + * dbs_backoff[4] for chain 1 5G + * dbs_backoff[5] for chain 1 6G + */ +} wmi_pdev_set_bios_sar_table_cmd_fixed_param; + +typedef struct { + A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_set_bios_sar_cmd_fixed_param */ + A_UINT32 pdev_id; /* pdev_id for identifying the MAC, See macros starting with WMI_PDEV_ID_ for values. */ + A_UINT32 geo_len; + /* geo offset array is in TLV, followed this structure: + * A_UINT8 Geo_offset[]; + * Geo_offset array has 18 elements. The meaning of each element is to + * adjust offset based on maximum SAR power according to different regions. + * Its unit is 0.25 dB. + * Geo_offset[0] chain 0 FCC_Offset on 2G + * Geo_offset[1] chain 0 FCC_Offset on 5G + * Geo_offset[2] chain 0 FCC_Offset on 6G + * Geo_offset[3] chain 0 CE_Offset on 2G + * Geo_offset[4] chain 0 CE_Offset on 5G + * Geo_offset[5] chain 0 CE_Offset on 6G + * Geo_offset[6] chain 0 ROW_Offset on 2G + * Geo_offset[7] chain 0 ROW_Offset on 5G + * Geo_offset[8] chain 0 ROW_Offset on 6G + * Geo_offset[9] chain 1 FCC_Offset on 2G + * ... + * Geo_offset[17] chain 1 ROW_Offset on 6G + * In actual use, FW will subtract an offset value according to the region; + */ +} wmi_pdev_set_bios_geo_table_cmd_fixed_param; + typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_set_mimogain_table_cmd_fixed_param */ union { @@ -28729,6 +28793,8 @@ static INLINE A_UINT8 *wmi_id_to_name(A_UINT32 wmi_command) WMI_RETURN_STRING(WMI_MLO_TEARDOWN_CMDID); WMI_RETURN_STRING(WMI_VDEV_IGMP_OFFLOAD_CMDID); WMI_RETURN_STRING(WMI_MGMT_RX_REO_FILTER_CONFIGURATION_CMDID); + WMI_RETURN_STRING(WMI_PDEV_SET_BIOS_SAR_TABLE_CMDID); + WMI_RETURN_STRING(WMI_PDEV_SET_BIOS_GEO_TABLE_CMDID); } return "Invalid WMI cmd"; diff --git a/fw/wmi_version.h b/fw/wmi_version.h index 8951f54e4293..1841dff0adda 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_ 999 +#define __WMI_REVISION_ 1000 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work