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