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