1 /* SPDX-License-Identifier: ISC */
2 /* Copyright (C) 2022 MediaTek Inc. */
3 
4 #ifndef __MT7921_ACPI_SAR_H
5 #define __MT7921_ACPI_SAR_H
6 
7 #define MT7921_ASAR_MIN_DYN		1
8 #define MT7921_ASAR_MAX_DYN		8
9 #define MT7921_ASAR_MIN_GEO		3
10 #define MT7921_ASAR_MAX_GEO		8
11 
12 #define MT7921_ACPI_MTCL		"MTCL"
13 #define MT7921_ACPI_MTDS		"MTDS"
14 #define MT7921_ACPI_MTGS		"MTGS"
15 
16 struct mt7921_asar_dyn_limit {
17 	u8 idx;
18 	u8 frp[5];
19 } __packed;
20 
21 struct mt7921_asar_dyn {
22 	u8 names[4];
23 	u8 enable;
24 	u8 nr_tbl;
25 	struct mt7921_asar_dyn_limit tbl[0];
26 } __packed;
27 
28 struct mt7921_asar_dyn_limit_v2 {
29 	u8 idx;
30 	u8 frp[11];
31 } __packed;
32 
33 struct mt7921_asar_dyn_v2 {
34 	u8 names[4];
35 	u8 enable;
36 	u8 rsvd;
37 	u8 nr_tbl;
38 	struct mt7921_asar_dyn_limit_v2 tbl[0];
39 } __packed;
40 
41 struct mt7921_asar_geo_band {
42 	u8 pwr;
43 	u8 offset;
44 } __packed;
45 
46 struct mt7921_asar_geo_limit {
47 	u8 idx;
48 	/* 0:2G, 1:5G */
49 	struct mt7921_asar_geo_band band[2];
50 } __packed;
51 
52 struct mt7921_asar_geo {
53 	u8 names[4];
54 	u8 version;
55 	u8 nr_tbl;
56 	struct mt7921_asar_geo_limit tbl[0];
57 } __packed;
58 
59 struct mt7921_asar_geo_limit_v2 {
60 	u8 idx;
61 	/* 0:2G, 1:5G, 2:6G */
62 	struct mt7921_asar_geo_band band[3];
63 } __packed;
64 
65 struct mt7921_asar_geo_v2 {
66 	u8 names[4];
67 	u8 version;
68 	u8 rsvd;
69 	u8 nr_tbl;
70 	struct mt7921_asar_geo_limit_v2 tbl[0];
71 } __packed;
72 
73 struct mt7921_asar_cl {
74 	u8 names[4];
75 	u8 version;
76 	u8 mode_6g;
77 	u8 cl6g[6];
78 } __packed;
79 
80 struct mt7921_acpi_sar {
81 	u8 ver;
82 	union {
83 		struct mt7921_asar_dyn *dyn;
84 		struct mt7921_asar_dyn_v2 *dyn_v2;
85 	};
86 	union {
87 		struct mt7921_asar_geo *geo;
88 		struct mt7921_asar_geo_v2 *geo_v2;
89 	};
90 	struct mt7921_asar_cl *countrylist;
91 };
92 
93 #endif
94