xref: /linux/drivers/net/wireless/mediatek/mt76/mt7921/regd.h (revision 91ec2035134982b98fab0609a9fd8480e8217dc1)
1 /* SPDX-License-Identifier: BSD-3-Clause-Clear */
2 /* Copyright (C) 2025 MediaTek Inc. */
3 
4 #ifndef __MT7921_REGD_H
5 #define __MT7921_REGD_H
6 
7 #include "mt7921.h"
8 
9 struct mt7921_regd_rule_header {
10 	u8 alpha2[2];
11 	u8 dfs_region;
12 	u8 rsv[13];
13 };
14 
15 struct mt7921_regd_rule {
16 	__le32 start_freq;
17 	__le32 end_freq;
18 	__le32 max_bw;
19 	__le32 eirp;
20 	__le32 flags;
21 	u8 rsv[12];
22 };
23 
24 struct mt7921_regd_cc {
25 	u8 alpha2[2];
26 	u8 ver;
27 	u8 rsv;
28 	__le32 n_reg_rules;
29 	u8 sign_type;
30 	u8 rsv1[7];
31 	u8 data[];
32 };
33 
34 struct mt7921_regd_rule_ev {
35 	__le16 tag;
36 	__le16 len;
37 	__le32 n_reg_rules;
38 	u8 dfs_region;
39 	u8 rsv[15];
40 	struct mt7921_regd_rule reg_rule[];
41 };
42 
43 struct mt7921_regd_query_req {
44 	u8 ver;
45 	u8 sign_type;
46 	u8 rsv1[2];
47 	__le32 size;
48 	u8 alpha2[2];
49 	u8 rsv2[2];
50 	__le32 n_reg_rules;
51 	u8 rsv3[64];
52 	u8 data[];
53 };
54 
55 #define MT7921_REGD_SUPPORTED(phy) \
56 	(((phy)->chip_cap & MT792x_CHIP_CAP_REGD_EN) && \
57 	(phy)->clc[MT792x_CLC_REGD])
58 
59 int mt7921_mcu_regd_update(struct mt792x_dev *dev, u8 *alpha2,
60 			   enum environment_cap country_ie_env);
61 int __mt7921_mcu_regd_update(struct mt792x_dev *dev, u8 *alpha2,
62 			     enum environment_cap country_ie_env);
63 void mt7921_regd_notifier(struct wiphy *wiphy,
64 			  struct regulatory_request *request);
65 bool mt7921_regd_clc_supported(struct mt792x_dev *dev);
66 int mt7921_regd_change(struct mt792x_phy *phy, char *alpha2);
67 int mt7921_regd_init(struct mt792x_phy *phy);
68 int mt7921_regd_update(struct mt792x_phy *phy, char *alpha2);
69 
70 #endif
71