xref: /freebsd/sys/contrib/dev/mediatek/mt76/mt792x_acpi_sar.h (revision cbb3ec25236ba72f91cbdf23f8b78b9d1af0cedf)
1*cbb3ec25SBjoern A. Zeeb /* SPDX-License-Identifier: ISC */
2*cbb3ec25SBjoern A. Zeeb /* Copyright (C) 2023 MediaTek Inc. */
3*cbb3ec25SBjoern A. Zeeb 
4*cbb3ec25SBjoern A. Zeeb #ifndef __MT7921_ACPI_SAR_H
5*cbb3ec25SBjoern A. Zeeb #define __MT7921_ACPI_SAR_H
6*cbb3ec25SBjoern A. Zeeb 
7*cbb3ec25SBjoern A. Zeeb #define MT792x_ASAR_MIN_DYN		1
8*cbb3ec25SBjoern A. Zeeb #define MT792x_ASAR_MAX_DYN		8
9*cbb3ec25SBjoern A. Zeeb #define MT792x_ASAR_MIN_GEO		3
10*cbb3ec25SBjoern A. Zeeb #define MT792x_ASAR_MAX_GEO		8
11*cbb3ec25SBjoern A. Zeeb #define MT792x_ASAR_MIN_FG		8
12*cbb3ec25SBjoern A. Zeeb 
13*cbb3ec25SBjoern A. Zeeb #define MT792x_ACPI_MTCL		"MTCL"
14*cbb3ec25SBjoern A. Zeeb #define MT792x_ACPI_MTDS		"MTDS"
15*cbb3ec25SBjoern A. Zeeb #define MT792x_ACPI_MTGS		"MTGS"
16*cbb3ec25SBjoern A. Zeeb #define MT792x_ACPI_MTFG		"MTFG"
17*cbb3ec25SBjoern A. Zeeb 
18*cbb3ec25SBjoern A. Zeeb struct mt792x_asar_dyn_limit {
19*cbb3ec25SBjoern A. Zeeb 	u8 idx;
20*cbb3ec25SBjoern A. Zeeb 	u8 frp[5];
21*cbb3ec25SBjoern A. Zeeb } __packed;
22*cbb3ec25SBjoern A. Zeeb 
23*cbb3ec25SBjoern A. Zeeb struct mt792x_asar_dyn {
24*cbb3ec25SBjoern A. Zeeb 	u8 names[4];
25*cbb3ec25SBjoern A. Zeeb 	u8 enable;
26*cbb3ec25SBjoern A. Zeeb 	u8 nr_tbl;
27*cbb3ec25SBjoern A. Zeeb 	DECLARE_FLEX_ARRAY(struct mt792x_asar_dyn_limit, tbl);
28*cbb3ec25SBjoern A. Zeeb } __packed;
29*cbb3ec25SBjoern A. Zeeb 
30*cbb3ec25SBjoern A. Zeeb struct mt792x_asar_dyn_limit_v2 {
31*cbb3ec25SBjoern A. Zeeb 	u8 idx;
32*cbb3ec25SBjoern A. Zeeb 	u8 frp[11];
33*cbb3ec25SBjoern A. Zeeb } __packed;
34*cbb3ec25SBjoern A. Zeeb 
35*cbb3ec25SBjoern A. Zeeb struct mt792x_asar_dyn_v2 {
36*cbb3ec25SBjoern A. Zeeb 	u8 names[4];
37*cbb3ec25SBjoern A. Zeeb 	u8 enable;
38*cbb3ec25SBjoern A. Zeeb 	u8 rsvd;
39*cbb3ec25SBjoern A. Zeeb 	u8 nr_tbl;
40*cbb3ec25SBjoern A. Zeeb 	DECLARE_FLEX_ARRAY(struct mt792x_asar_dyn_limit_v2, tbl);
41*cbb3ec25SBjoern A. Zeeb } __packed;
42*cbb3ec25SBjoern A. Zeeb 
43*cbb3ec25SBjoern A. Zeeb struct mt792x_asar_geo_band {
44*cbb3ec25SBjoern A. Zeeb 	u8 pwr;
45*cbb3ec25SBjoern A. Zeeb 	u8 offset;
46*cbb3ec25SBjoern A. Zeeb } __packed;
47*cbb3ec25SBjoern A. Zeeb 
48*cbb3ec25SBjoern A. Zeeb struct mt792x_asar_geo_limit {
49*cbb3ec25SBjoern A. Zeeb 	u8 idx;
50*cbb3ec25SBjoern A. Zeeb 	/* 0:2G, 1:5G */
51*cbb3ec25SBjoern A. Zeeb 	struct mt792x_asar_geo_band band[2];
52*cbb3ec25SBjoern A. Zeeb } __packed;
53*cbb3ec25SBjoern A. Zeeb 
54*cbb3ec25SBjoern A. Zeeb struct mt792x_asar_geo {
55*cbb3ec25SBjoern A. Zeeb 	u8 names[4];
56*cbb3ec25SBjoern A. Zeeb 	u8 version;
57*cbb3ec25SBjoern A. Zeeb 	u8 nr_tbl;
58*cbb3ec25SBjoern A. Zeeb 	DECLARE_FLEX_ARRAY(struct mt792x_asar_geo_limit, tbl);
59*cbb3ec25SBjoern A. Zeeb } __packed;
60*cbb3ec25SBjoern A. Zeeb 
61*cbb3ec25SBjoern A. Zeeb struct mt792x_asar_geo_limit_v2 {
62*cbb3ec25SBjoern A. Zeeb 	u8 idx;
63*cbb3ec25SBjoern A. Zeeb 	/* 0:2G, 1:5G, 2:6G */
64*cbb3ec25SBjoern A. Zeeb 	struct mt792x_asar_geo_band band[3];
65*cbb3ec25SBjoern A. Zeeb } __packed;
66*cbb3ec25SBjoern A. Zeeb 
67*cbb3ec25SBjoern A. Zeeb struct mt792x_asar_geo_v2 {
68*cbb3ec25SBjoern A. Zeeb 	u8 names[4];
69*cbb3ec25SBjoern A. Zeeb 	u8 version;
70*cbb3ec25SBjoern A. Zeeb 	u8 rsvd;
71*cbb3ec25SBjoern A. Zeeb 	u8 nr_tbl;
72*cbb3ec25SBjoern A. Zeeb 	DECLARE_FLEX_ARRAY(struct mt792x_asar_geo_limit_v2, tbl);
73*cbb3ec25SBjoern A. Zeeb } __packed;
74*cbb3ec25SBjoern A. Zeeb 
75*cbb3ec25SBjoern A. Zeeb struct mt792x_asar_cl {
76*cbb3ec25SBjoern A. Zeeb 	u8 names[4];
77*cbb3ec25SBjoern A. Zeeb 	u8 version;
78*cbb3ec25SBjoern A. Zeeb 	u8 mode_6g;
79*cbb3ec25SBjoern A. Zeeb 	u8 cl6g[6];
80*cbb3ec25SBjoern A. Zeeb } __packed;
81*cbb3ec25SBjoern A. Zeeb 
82*cbb3ec25SBjoern A. Zeeb struct mt792x_asar_fg {
83*cbb3ec25SBjoern A. Zeeb 	u8 names[4];
84*cbb3ec25SBjoern A. Zeeb 	u8 version;
85*cbb3ec25SBjoern A. Zeeb 	u8 rsvd;
86*cbb3ec25SBjoern A. Zeeb 	u8 nr_flag;
87*cbb3ec25SBjoern A. Zeeb 	u8 rsvd1;
88*cbb3ec25SBjoern A. Zeeb 	u8 flag[];
89*cbb3ec25SBjoern A. Zeeb } __packed;
90*cbb3ec25SBjoern A. Zeeb 
91*cbb3ec25SBjoern A. Zeeb struct mt792x_acpi_sar {
92*cbb3ec25SBjoern A. Zeeb 	u8 ver;
93*cbb3ec25SBjoern A. Zeeb 	union {
94*cbb3ec25SBjoern A. Zeeb 		struct mt792x_asar_dyn *dyn;
95*cbb3ec25SBjoern A. Zeeb 		struct mt792x_asar_dyn_v2 *dyn_v2;
96*cbb3ec25SBjoern A. Zeeb 	};
97*cbb3ec25SBjoern A. Zeeb 	union {
98*cbb3ec25SBjoern A. Zeeb 		struct mt792x_asar_geo *geo;
99*cbb3ec25SBjoern A. Zeeb 		struct mt792x_asar_geo_v2 *geo_v2;
100*cbb3ec25SBjoern A. Zeeb 	};
101*cbb3ec25SBjoern A. Zeeb 	struct mt792x_asar_cl *countrylist;
102*cbb3ec25SBjoern A. Zeeb 	struct mt792x_asar_fg *fg;
103*cbb3ec25SBjoern A. Zeeb };
104*cbb3ec25SBjoern A. Zeeb 
105*cbb3ec25SBjoern A. Zeeb #endif
106