1e2340276SBjoern A. Zeeb /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 2e2340276SBjoern A. Zeeb /* Copyright(c) 2021-2023 Realtek Corporation 3e2340276SBjoern A. Zeeb */ 4e2340276SBjoern A. Zeeb 5e2340276SBjoern A. Zeeb #ifndef __RTW89_ACPI_H__ 6e2340276SBjoern A. Zeeb #define __RTW89_ACPI_H__ 7e2340276SBjoern A. Zeeb 8e2340276SBjoern A. Zeeb #include "core.h" 9e2340276SBjoern A. Zeeb 10e2340276SBjoern A. Zeeb enum rtw89_acpi_dsm_func { 11e2340276SBjoern A. Zeeb RTW89_ACPI_DSM_FUNC_IDN_BAND_SUP = 2, 12e2340276SBjoern A. Zeeb RTW89_ACPI_DSM_FUNC_6G_DIS = 3, 13e2340276SBjoern A. Zeeb RTW89_ACPI_DSM_FUNC_6G_BP = 4, 14e2340276SBjoern A. Zeeb RTW89_ACPI_DSM_FUNC_TAS_EN = 5, 156d67aabdSBjoern A. Zeeb RTW89_ACPI_DSM_FUNC_UNII4_SUP = 6, 166d67aabdSBjoern A. Zeeb RTW89_ACPI_DSM_FUNC_6GHZ_SP_SUP = 7, 176d67aabdSBjoern A. Zeeb }; 186d67aabdSBjoern A. Zeeb 196d67aabdSBjoern A. Zeeb enum rtw89_acpi_conf_unii4 { 206d67aabdSBjoern A. Zeeb RTW89_ACPI_CONF_UNII4_FCC = BIT(0), 216d67aabdSBjoern A. Zeeb RTW89_ACPI_CONF_UNII4_IC = BIT(1), 226d67aabdSBjoern A. Zeeb }; 236d67aabdSBjoern A. Zeeb 246d67aabdSBjoern A. Zeeb enum rtw89_acpi_policy_mode { 256d67aabdSBjoern A. Zeeb RTW89_ACPI_POLICY_BLOCK = 0, 266d67aabdSBjoern A. Zeeb RTW89_ACPI_POLICY_ALLOW = 1, 276d67aabdSBjoern A. Zeeb }; 286d67aabdSBjoern A. Zeeb 296d67aabdSBjoern A. Zeeb struct rtw89_acpi_country_code { 306d67aabdSBjoern A. Zeeb /* below are allowed: 316d67aabdSBjoern A. Zeeb * * ISO alpha2 country code 326d67aabdSBjoern A. Zeeb * * EU for countries in Europe 336d67aabdSBjoern A. Zeeb */ 346d67aabdSBjoern A. Zeeb char alpha2[2]; 356d67aabdSBjoern A. Zeeb } __packed; 366d67aabdSBjoern A. Zeeb 376d67aabdSBjoern A. Zeeb struct rtw89_acpi_policy_6ghz { 386d67aabdSBjoern A. Zeeb u8 signature[3]; 396d67aabdSBjoern A. Zeeb u8 rsvd; 406d67aabdSBjoern A. Zeeb u8 policy_mode; 416d67aabdSBjoern A. Zeeb u8 country_count; 426d67aabdSBjoern A. Zeeb struct rtw89_acpi_country_code country_list[] __counted_by(country_count); 436d67aabdSBjoern A. Zeeb } __packed; 446d67aabdSBjoern A. Zeeb 456d67aabdSBjoern A. Zeeb enum rtw89_acpi_conf_6ghz_sp { 466d67aabdSBjoern A. Zeeb RTW89_ACPI_CONF_6GHZ_SP_US = BIT(0), 476d67aabdSBjoern A. Zeeb }; 486d67aabdSBjoern A. Zeeb 496d67aabdSBjoern A. Zeeb struct rtw89_acpi_policy_6ghz_sp { 506d67aabdSBjoern A. Zeeb u8 signature[4]; 516d67aabdSBjoern A. Zeeb u8 revision; 526d67aabdSBjoern A. Zeeb u8 override; 536d67aabdSBjoern A. Zeeb u8 conf; 546d67aabdSBjoern A. Zeeb u8 rsvd; 556d67aabdSBjoern A. Zeeb } __packed; 566d67aabdSBjoern A. Zeeb 576d67aabdSBjoern A. Zeeb struct rtw89_acpi_dsm_result { 586d67aabdSBjoern A. Zeeb union { 596d67aabdSBjoern A. Zeeb u8 value; 606d67aabdSBjoern A. Zeeb /* caller needs to free it after using */ 616d67aabdSBjoern A. Zeeb struct rtw89_acpi_policy_6ghz *policy_6ghz; 626d67aabdSBjoern A. Zeeb struct rtw89_acpi_policy_6ghz_sp *policy_6ghz_sp; 636d67aabdSBjoern A. Zeeb } u; 64e2340276SBjoern A. Zeeb }; 65e2340276SBjoern A. Zeeb 66*df279a26SBjoern A. Zeeb struct rtw89_acpi_rtag_result { 67*df279a26SBjoern A. Zeeb u8 tag[4]; 68*df279a26SBjoern A. Zeeb u8 revision; 69*df279a26SBjoern A. Zeeb __le32 domain; 70*df279a26SBjoern A. Zeeb u8 ant_gain_table[RTW89_ANT_GAIN_CHAIN_NUM][RTW89_ANT_GAIN_SUBBAND_NR]; 71*df279a26SBjoern A. Zeeb } __packed; 72*df279a26SBjoern A. Zeeb 73e2340276SBjoern A. Zeeb int rtw89_acpi_evaluate_dsm(struct rtw89_dev *rtwdev, 746d67aabdSBjoern A. Zeeb enum rtw89_acpi_dsm_func func, 756d67aabdSBjoern A. Zeeb struct rtw89_acpi_dsm_result *res); 76*df279a26SBjoern A. Zeeb int rtw89_acpi_evaluate_rtag(struct rtw89_dev *rtwdev, 77*df279a26SBjoern A. Zeeb struct rtw89_acpi_rtag_result *res); 78e2340276SBjoern A. Zeeb 79e2340276SBjoern A. Zeeb #endif 80