1c869f77dSJakub Kicinski /*
2c869f77dSJakub Kicinski  * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
3c869f77dSJakub Kicinski  * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
4c869f77dSJakub Kicinski  *
5c869f77dSJakub Kicinski  * This program is free software; you can redistribute it and/or modify
6c869f77dSJakub Kicinski  * it under the terms of the GNU General Public License version 2
7c869f77dSJakub Kicinski  * as published by the Free Software Foundation
8c869f77dSJakub Kicinski  *
9c869f77dSJakub Kicinski  * This program is distributed in the hope that it will be useful,
10c869f77dSJakub Kicinski  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11c869f77dSJakub Kicinski  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12c869f77dSJakub Kicinski  * GNU General Public License for more details.
13c869f77dSJakub Kicinski  */
14c869f77dSJakub Kicinski 
15c869f77dSJakub Kicinski #ifndef __MT7601U_MCU_H
16c869f77dSJakub Kicinski #define __MT7601U_MCU_H
17c869f77dSJakub Kicinski 
18c869f77dSJakub Kicinski struct mt7601u_dev;
19c869f77dSJakub Kicinski 
20c869f77dSJakub Kicinski /* Register definitions */
21c869f77dSJakub Kicinski #define MT_MCU_RESET_CTL		0x070C
22c869f77dSJakub Kicinski #define MT_MCU_INT_LEVEL		0x0718
23c869f77dSJakub Kicinski #define MT_MCU_COM_REG0			0x0730
24c869f77dSJakub Kicinski #define MT_MCU_COM_REG1			0x0734
25c869f77dSJakub Kicinski #define MT_MCU_COM_REG2			0x0738
26c869f77dSJakub Kicinski #define MT_MCU_COM_REG3			0x073C
27c869f77dSJakub Kicinski 
28c869f77dSJakub Kicinski #define MT_MCU_IVB_SIZE			0x40
29c869f77dSJakub Kicinski #define MT_MCU_DLM_OFFSET		0x80000
30c869f77dSJakub Kicinski 
31c869f77dSJakub Kicinski #define MT_MCU_MEMMAP_WLAN		0x00410000
32c869f77dSJakub Kicinski #define MT_MCU_MEMMAP_BBP		0x40000000
33c869f77dSJakub Kicinski #define MT_MCU_MEMMAP_RF		0x80000000
34c869f77dSJakub Kicinski 
35c869f77dSJakub Kicinski #define INBAND_PACKET_MAX_LEN		192
36c869f77dSJakub Kicinski 
37c869f77dSJakub Kicinski enum mcu_cmd {
38c869f77dSJakub Kicinski 	CMD_FUN_SET_OP = 1,
39c869f77dSJakub Kicinski 	CMD_LOAD_CR = 2,
40c869f77dSJakub Kicinski 	CMD_INIT_GAIN_OP = 3,
41c869f77dSJakub Kicinski 	CMD_DYNC_VGA_OP = 6,
42c869f77dSJakub Kicinski 	CMD_TDLS_CH_SW = 7,
43c869f77dSJakub Kicinski 	CMD_BURST_WRITE = 8,
44c869f77dSJakub Kicinski 	CMD_READ_MODIFY_WRITE = 9,
45c869f77dSJakub Kicinski 	CMD_RANDOM_READ = 10,
46c869f77dSJakub Kicinski 	CMD_BURST_READ = 11,
47c869f77dSJakub Kicinski 	CMD_RANDOM_WRITE = 12,
48c869f77dSJakub Kicinski 	CMD_LED_MODE_OP = 16,
49c869f77dSJakub Kicinski 	CMD_POWER_SAVING_OP = 20,
50c869f77dSJakub Kicinski 	CMD_WOW_CONFIG = 21,
51c869f77dSJakub Kicinski 	CMD_WOW_QUERY = 22,
52c869f77dSJakub Kicinski 	CMD_WOW_FEATURE = 24,
53c869f77dSJakub Kicinski 	CMD_CARRIER_DETECT_OP = 28,
54c869f77dSJakub Kicinski 	CMD_RADOR_DETECT_OP = 29,
55c869f77dSJakub Kicinski 	CMD_SWITCH_CHANNEL_OP = 30,
56c869f77dSJakub Kicinski 	CMD_CALIBRATION_OP = 31,
57c869f77dSJakub Kicinski 	CMD_BEACON_OP = 32,
58c869f77dSJakub Kicinski 	CMD_ANTENNA_OP = 33,
59c869f77dSJakub Kicinski };
60c869f77dSJakub Kicinski 
61c869f77dSJakub Kicinski enum mcu_function {
62c869f77dSJakub Kicinski 	Q_SELECT = 1,
63c869f77dSJakub Kicinski 	ATOMIC_TSSI_SETTING = 5,
64c869f77dSJakub Kicinski };
65c869f77dSJakub Kicinski 
66c869f77dSJakub Kicinski enum mcu_power_mode {
67c869f77dSJakub Kicinski 	RADIO_OFF = 0x30,
68c869f77dSJakub Kicinski 	RADIO_ON = 0x31,
69c869f77dSJakub Kicinski 	RADIO_OFF_AUTO_WAKEUP = 0x32,
70c869f77dSJakub Kicinski 	RADIO_OFF_ADVANCE = 0x33,
71c869f77dSJakub Kicinski 	RADIO_ON_ADVANCE = 0x34,
72c869f77dSJakub Kicinski };
73c869f77dSJakub Kicinski 
74c869f77dSJakub Kicinski enum mcu_calibrate {
75c869f77dSJakub Kicinski 	MCU_CAL_R = 1,
76c869f77dSJakub Kicinski 	MCU_CAL_DCOC,
77c869f77dSJakub Kicinski 	MCU_CAL_LC,
78c869f77dSJakub Kicinski 	MCU_CAL_LOFT,
79c869f77dSJakub Kicinski 	MCU_CAL_TXIQ,
80c869f77dSJakub Kicinski 	MCU_CAL_BW,
81c869f77dSJakub Kicinski 	MCU_CAL_DPD,
82c869f77dSJakub Kicinski 	MCU_CAL_RXIQ,
83c869f77dSJakub Kicinski 	MCU_CAL_TXDCOC,
84c869f77dSJakub Kicinski };
85c869f77dSJakub Kicinski 
86c869f77dSJakub Kicinski int mt7601u_mcu_init(struct mt7601u_dev *dev);
87c869f77dSJakub Kicinski int mt7601u_mcu_cmd_init(struct mt7601u_dev *dev);
88c869f77dSJakub Kicinski void mt7601u_mcu_cmd_deinit(struct mt7601u_dev *dev);
89c869f77dSJakub Kicinski 
90c869f77dSJakub Kicinski int
91c869f77dSJakub Kicinski mt7601u_mcu_calibrate(struct mt7601u_dev *dev, enum mcu_calibrate cal, u32 val);
92c869f77dSJakub Kicinski int mt7601u_mcu_tssi_read_kick(struct mt7601u_dev *dev, int use_hvga);
93c869f77dSJakub Kicinski 
94c869f77dSJakub Kicinski #endif
95