mt76: mt7615: move mt7615_mac_get_key_info in mac.c
[linux-2.6-block.git] / drivers / net / wireless / mediatek / mt76 / mt7615 / mcu.h
1 /* SPDX-License-Identifier: ISC */
2 /* Copyright (C) 2019 MediaTek Inc. */
3
4 #ifndef __MT7615_MCU_H
5 #define __MT7615_MCU_H
6
7 struct mt7615_mcu_txd {
8         __le32 txd[8];
9
10         __le16 len;
11         __le16 pq_id;
12
13         u8 cid;
14         u8 pkt_type;
15         u8 set_query; /* FW don't care */
16         u8 seq;
17
18         u8 uc_d2b0_rev;
19         u8 ext_cid;
20         u8 s2d_index;
21         u8 ext_cid_ack;
22
23         u32 reserved[5];
24 } __packed __aligned(4);
25
26 /* event table */
27 enum {
28         MCU_EVENT_TARGET_ADDRESS_LEN = 0x01,
29         MCU_EVENT_FW_START = 0x01,
30         MCU_EVENT_GENERIC = 0x01,
31         MCU_EVENT_ACCESS_REG = 0x02,
32         MCU_EVENT_MT_PATCH_SEM = 0x04,
33         MCU_EVENT_CH_PRIVILEGE = 0x18,
34         MCU_EVENT_EXT = 0xed,
35         MCU_EVENT_RESTART_DL = 0xef,
36 };
37
38 /* ext event table */
39 enum {
40         MCU_EXT_EVENT_PS_SYNC = 0x5,
41         MCU_EXT_EVENT_FW_LOG_2_HOST = 0x13,
42         MCU_EXT_EVENT_THERMAL_PROTECT = 0x22,
43         MCU_EXT_EVENT_ASSERT_DUMP = 0x23,
44         MCU_EXT_EVENT_RDD_REPORT = 0x3a,
45         MCU_EXT_EVENT_CSA_NOTIFY = 0x4f,
46 };
47
48 struct mt7615_mcu_rxd {
49         __le32 rxd[4];
50
51         __le16 len;
52         __le16 pkt_type_id;
53
54         u8 eid;
55         u8 seq;
56         __le16 __rsv;
57
58         u8 ext_eid;
59         u8 __rsv1[2];
60         u8 s2d_index;
61 };
62
63 #define MCU_PQ_ID(p, q)         (((p) << 15) | ((q) << 10))
64 #define MCU_PKT_ID              0xa0
65
66 enum {
67         MCU_Q_QUERY,
68         MCU_Q_SET,
69         MCU_Q_RESERVED,
70         MCU_Q_NA
71 };
72
73 enum {
74         MCU_S2D_H2N,
75         MCU_S2D_C2N,
76         MCU_S2D_H2C,
77         MCU_S2D_H2CN
78 };
79
80 enum {
81         MCU_CMD_TARGET_ADDRESS_LEN_REQ = 0x01,
82         MCU_CMD_FW_START_REQ = 0x02,
83         MCU_CMD_INIT_ACCESS_REG = 0x3,
84         MCU_CMD_PATCH_START_REQ = 0x05,
85         MCU_CMD_PATCH_FINISH_REQ = 0x07,
86         MCU_CMD_PATCH_SEM_CONTROL = 0x10,
87         MCU_CMD_EXT_CID = 0xED,
88         MCU_CMD_FW_SCATTER = 0xEE,
89         MCU_CMD_RESTART_DL_REQ = 0xEF,
90 };
91
92 enum {
93         MCU_EXT_CMD_PM_STATE_CTRL = 0x07,
94         MCU_EXT_CMD_CHANNEL_SWITCH = 0x08,
95         MCU_EXT_CMD_SET_TX_POWER_CTRL = 0x11,
96         MCU_EXT_CMD_EFUSE_BUFFER_MODE = 0x21,
97         MCU_EXT_CMD_STA_REC_UPDATE = 0x25,
98         MCU_EXT_CMD_BSS_INFO_UPDATE = 0x26,
99         MCU_EXT_CMD_EDCA_UPDATE = 0x27,
100         MCU_EXT_CMD_DEV_INFO_UPDATE = 0x2A,
101         MCU_EXT_CMD_WTBL_UPDATE = 0x32,
102         MCU_EXT_CMD_SET_RDD_CTRL = 0x3a,
103         MCU_EXT_CMD_PROTECT_CTRL = 0x3e,
104         MCU_EXT_CMD_MAC_INIT_CTRL = 0x46,
105         MCU_EXT_CMD_BCN_OFFLOAD = 0x49,
106         MCU_EXT_CMD_SET_RX_PATH = 0x4e,
107         MCU_EXT_CMD_SET_RDD_PATTERN = 0x7d,
108 };
109
110 enum {
111         PATCH_SEM_RELEASE = 0x0,
112         PATCH_SEM_GET     = 0x1
113 };
114
115 enum {
116         PATCH_NOT_DL_SEM_FAIL    = 0x0,
117         PATCH_IS_DL              = 0x1,
118         PATCH_NOT_DL_SEM_SUCCESS = 0x2,
119         PATCH_REL_SEM_SUCCESS    = 0x3
120 };
121
122 enum {
123         FW_STATE_INITIAL          = 0,
124         FW_STATE_FW_DOWNLOAD      = 1,
125         FW_STATE_NORMAL_OPERATION = 2,
126         FW_STATE_NORMAL_TRX       = 3,
127         FW_STATE_CR4_RDY          = 7
128 };
129
130 #define STA_TYPE_STA            BIT(0)
131 #define STA_TYPE_AP             BIT(1)
132 #define STA_TYPE_ADHOC          BIT(2)
133 #define STA_TYPE_WDS            BIT(4)
134 #define STA_TYPE_BC             BIT(5)
135
136 #define NETWORK_INFRA           BIT(16)
137 #define NETWORK_P2P             BIT(17)
138 #define NETWORK_IBSS            BIT(18)
139 #define NETWORK_WDS             BIT(21)
140
141 #define CONNECTION_INFRA_STA    (STA_TYPE_STA | NETWORK_INFRA)
142 #define CONNECTION_INFRA_AP     (STA_TYPE_AP | NETWORK_INFRA)
143 #define CONNECTION_P2P_GC       (STA_TYPE_STA | NETWORK_P2P)
144 #define CONNECTION_P2P_GO       (STA_TYPE_AP | NETWORK_P2P)
145 #define CONNECTION_IBSS_ADHOC   (STA_TYPE_ADHOC | NETWORK_IBSS)
146 #define CONNECTION_WDS          (STA_TYPE_WDS | NETWORK_WDS)
147 #define CONNECTION_INFRA_BC     (STA_TYPE_BC | NETWORK_INFRA)
148
149 #define CONN_STATE_DISCONNECT   0
150 #define CONN_STATE_CONNECT      1
151 #define CONN_STATE_PORT_SECURE  2
152
153 enum {
154         DEV_INFO_ACTIVE,
155         DEV_INFO_MAX_NUM
156 };
157
158 struct bss_info_omac {
159         __le16 tag;
160         __le16 len;
161         u8 hw_bss_idx;
162         u8 omac_idx;
163         u8 band_idx;
164         u8 rsv0;
165         __le32 conn_type;
166         u32 rsv1;
167 } __packed;
168
169 struct bss_info_basic {
170         __le16 tag;
171         __le16 len;
172         __le32 network_type;
173         u8 active;
174         u8 rsv0;
175         __le16 bcn_interval;
176         u8 bssid[ETH_ALEN];
177         u8 wmm_idx;
178         u8 dtim_period;
179         u8 bmc_tx_wlan_idx;
180         u8 cipher; /* not used */
181         u8 phymode; /* not used */
182         u8 rsv1[5];
183 } __packed;
184
185 struct bss_info_rf_ch {
186         __le16 tag;
187         __le16 len;
188         u8 pri_ch;
189         u8 central_ch0;
190         u8 central_ch1;
191         u8 bw;
192 } __packed;
193
194 struct bss_info_ext_bss {
195         __le16 tag;
196         __le16 len;
197         __le32 mbss_tsf_offset; /* in unit of us */
198         u8 rsv[8];
199 } __packed;
200
201 enum {
202         BSS_INFO_OMAC,
203         BSS_INFO_BASIC,
204         BSS_INFO_RF_CH, /* optional, for BT/LTE coex */
205         BSS_INFO_PM, /* sta only */
206         BSS_INFO_UAPSD, /* sta only */
207         BSS_INFO_ROAM_DETECTION, /* obsoleted */
208         BSS_INFO_LQ_RM, /* obsoleted */
209         BSS_INFO_EXT_BSS,
210         BSS_INFO_BMC_INFO, /* for bmc rate control in CR4 */
211         BSS_INFO_SYNC_MODE, /* obsoleted */
212         BSS_INFO_RA,
213         BSS_INFO_MAX_NUM
214 };
215
216 enum {
217         WTBL_RESET_AND_SET = 1,
218         WTBL_SET,
219         WTBL_QUERY,
220         WTBL_RESET_ALL
221 };
222
223 struct wtbl_req_hdr {
224         u8 wlan_idx;
225         u8 operation;
226         __le16 tlv_num;
227         u8 rsv[4];
228 } __packed;
229
230 struct wtbl_generic {
231         __le16 tag;
232         __le16 len;
233         u8 peer_addr[ETH_ALEN];
234         u8 muar_idx;
235         u8 skip_tx;
236         u8 cf_ack;
237         u8 qos;
238         u8 mesh;
239         u8 adm;
240         __le16 partial_aid;
241         u8 baf_en;
242         u8 aad_om;
243 } __packed;
244
245 struct wtbl_rx {
246         __le16 tag;
247         __le16 len;
248         u8 rcid;
249         u8 rca1;
250         u8 rca2;
251         u8 rv;
252         u8 rsv[4];
253 } __packed;
254
255 struct wtbl_ht {
256         __le16 tag;
257         __le16 len;
258         u8 ht;
259         u8 ldpc;
260         u8 af;
261         u8 mm;
262         u8 rsv[4];
263 } __packed;
264
265 struct wtbl_vht {
266         __le16 tag;
267         __le16 len;
268         u8 ldpc;
269         u8 dyn_bw;
270         u8 vht;
271         u8 txop_ps;
272         u8 rsv[4];
273 } __packed;
274
275 struct wtbl_tx_ps {
276         __le16 tag;
277         __le16 len;
278         u8 txps;
279         u8 rsv[3];
280 } __packed;
281
282 struct wtbl_hdr_trans {
283         __le16 tag;
284         __le16 len;
285         u8 to_ds;
286         u8 from_ds;
287         u8 disable_rx_trans;
288         u8 rsv;
289 } __packed;
290
291 struct wtbl_sec_key {
292         __le16 tag;
293         __le16 len;
294         u8 add; /* 0: add, 1: remove */
295         u8 rkv;
296         u8 ikv;
297         u8 cipher_id;
298         u8 key_id;
299         u8 key_len;
300         u8 rsv[2];
301         u8 key_material[32];
302 } __packed;
303
304 enum {
305         MT_BA_TYPE_INVALID,
306         MT_BA_TYPE_ORIGINATOR,
307         MT_BA_TYPE_RECIPIENT
308 };
309
310 enum {
311         RST_BA_MAC_TID_MATCH,
312         RST_BA_MAC_MATCH,
313         RST_BA_NO_MATCH
314 };
315
316 struct wtbl_ba {
317         __le16 tag;
318         __le16 len;
319         /* common */
320         u8 tid;
321         u8 ba_type;
322         u8 rsv0[2];
323         /* originator only */
324         __le16 sn;
325         u8 ba_en;
326         u8 ba_winsize_idx;
327         __le16 ba_winsize;
328         /* recipient only */
329         u8 peer_addr[ETH_ALEN];
330         u8 rst_ba_tid;
331         u8 rst_ba_sel;
332         u8 rst_ba_sb;
333         u8 band_idx;
334         u8 rsv1[4];
335 } __packed;
336
337 struct wtbl_bf {
338         __le16 tag;
339         __le16 len;
340         u8 ibf;
341         u8 ebf;
342         u8 ibf_vht;
343         u8 ebf_vht;
344         u8 gid;
345         u8 pfmu_idx;
346         u8 rsv[2];
347 } __packed;
348
349 struct wtbl_smps {
350         __le16 tag;
351         __le16 len;
352         u8 smps;
353         u8 rsv[3];
354 } __packed;
355
356 struct wtbl_pn {
357         __le16 tag;
358         __le16 len;
359         u8 pn[6];
360         u8 rsv[2];
361 } __packed;
362
363 struct wtbl_spe {
364         __le16 tag;
365         __le16 len;
366         u8 spe_idx;
367         u8 rsv[3];
368 } __packed;
369
370 struct wtbl_raw {
371         __le16 tag;
372         __le16 len;
373         u8 wtbl_idx;
374         u8 dw;
375         u8 rsv[2];
376         __le32 msk;
377         __le32 val;
378 } __packed;
379
380 #define MT7615_WTBL_UPDATE_MAX_SIZE (sizeof(struct wtbl_req_hdr) + \
381                                      sizeof(struct wtbl_generic) + \
382                                      sizeof(struct wtbl_rx) + \
383                                      sizeof(struct wtbl_ht) + \
384                                      sizeof(struct wtbl_vht) + \
385                                      sizeof(struct wtbl_tx_ps) + \
386                                      sizeof(struct wtbl_hdr_trans) + \
387                                      sizeof(struct wtbl_sec_key) + \
388                                      sizeof(struct wtbl_ba) + \
389                                      sizeof(struct wtbl_bf) + \
390                                      sizeof(struct wtbl_smps) + \
391                                      sizeof(struct wtbl_pn) + \
392                                      sizeof(struct wtbl_spe))
393
394 enum {
395         WTBL_GENERIC,
396         WTBL_RX,
397         WTBL_HT,
398         WTBL_VHT,
399         WTBL_PEER_PS, /* not used */
400         WTBL_TX_PS,
401         WTBL_HDR_TRANS,
402         WTBL_SEC_KEY,
403         WTBL_BA,
404         WTBL_RDG, /* obsoleted */
405         WTBL_PROTECT, /* not used */
406         WTBL_CLEAR, /* not used */
407         WTBL_BF,
408         WTBL_SMPS,
409         WTBL_RAW_DATA, /* debug only */
410         WTBL_PN,
411         WTBL_SPE,
412         WTBL_MAX_NUM
413 };
414
415 struct sta_req_hdr {
416         u8 bss_idx;
417         u8 wlan_idx;
418         __le16 tlv_num;
419         u8 is_tlv_append;
420         u8 muar_idx;
421         u8 rsv[2];
422 } __packed;
423
424 struct sta_rec_basic {
425         __le16 tag;
426         __le16 len;
427         __le32 conn_type;
428         u8 conn_state;
429         u8 qos;
430         __le16 aid;
431         u8 peer_addr[ETH_ALEN];
432 #define EXTRA_INFO_VER  BIT(0)
433 #define EXTRA_INFO_NEW  BIT(1)
434         __le16 extra_info;
435 } __packed;
436
437 struct sta_rec_ht {
438         __le16 tag;
439         __le16 len;
440         __le16 ht_cap;
441         u16 rsv;
442 } __packed;
443
444 struct sta_rec_vht {
445         __le16 tag;
446         __le16 len;
447         __le32 vht_cap;
448         __le16 vht_rx_mcs_map;
449         __le16 vht_tx_mcs_map;
450 } __packed;
451
452 struct sta_rec_ba {
453         __le16 tag;
454         __le16 len;
455         u8 tid;
456         u8 ba_type;
457         u8 amsdu;
458         u8 ba_en;
459         __le16 ssn;
460         __le16 winsize;
461 } __packed;
462
463 #define MT7615_STA_REC_UPDATE_MAX_SIZE (sizeof(struct sta_rec_basic) + \
464                                         sizeof(struct sta_rec_ht) + \
465                                         sizeof(struct sta_rec_vht))
466
467 enum {
468         STA_REC_BASIC,
469         STA_REC_RA,
470         STA_REC_RA_CMM_INFO,
471         STA_REC_RA_UPDATE,
472         STA_REC_BF,
473         STA_REC_AMSDU, /* for CR4 */
474         STA_REC_BA,
475         STA_REC_RED, /* not used */
476         STA_REC_TX_PROC, /* for hdr trans and CSO in CR4 */
477         STA_REC_HT,
478         STA_REC_VHT,
479         STA_REC_APPS,
480         STA_REC_MAX_NUM
481 };
482
483 enum {
484         CMD_CBW_20MHZ,
485         CMD_CBW_40MHZ,
486         CMD_CBW_80MHZ,
487         CMD_CBW_160MHZ,
488         CMD_CBW_10MHZ,
489         CMD_CBW_5MHZ,
490         CMD_CBW_8080MHZ
491 };
492
493 enum {
494         CH_SWITCH_NORMAL = 0,
495         CH_SWITCH_SCAN = 3,
496         CH_SWITCH_MCC = 4,
497         CH_SWITCH_DFS = 5,
498         CH_SWITCH_BACKGROUND_SCAN_START = 6,
499         CH_SWITCH_BACKGROUND_SCAN_RUNNING = 7,
500         CH_SWITCH_BACKGROUND_SCAN_STOP = 8,
501         CH_SWITCH_SCAN_BYPASS_DPD = 9
502 };
503
504 static inline struct sk_buff *
505 mt7615_mcu_msg_alloc(const void *data, int len)
506 {
507         return mt76_mcu_msg_alloc(data, sizeof(struct mt7615_mcu_txd),
508                                   len, 0);
509 }
510
511 #endif