155b13a04SStanislaw Gruszka /*
255b13a04SStanislaw Gruszka  * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
355b13a04SStanislaw Gruszka  * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
455b13a04SStanislaw Gruszka  *
555b13a04SStanislaw Gruszka  * This program is free software; you can redistribute it and/or modify
655b13a04SStanislaw Gruszka  * it under the terms of the GNU General Public License version 2
755b13a04SStanislaw Gruszka  * as published by the Free Software Foundation
855b13a04SStanislaw Gruszka  *
955b13a04SStanislaw Gruszka  * This program is distributed in the hope that it will be useful,
1055b13a04SStanislaw Gruszka  * but WITHOUT ANY WARRANTY; without even the implied warranty of
1155b13a04SStanislaw Gruszka  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1255b13a04SStanislaw Gruszka  * GNU General Public License for more details.
1355b13a04SStanislaw Gruszka  */
1455b13a04SStanislaw Gruszka 
1555b13a04SStanislaw Gruszka #ifndef __MT76X0U_MCU_H
1655b13a04SStanislaw Gruszka #define __MT76X0U_MCU_H
1755b13a04SStanislaw Gruszka 
1855b13a04SStanislaw Gruszka struct mt76x0_dev;
1955b13a04SStanislaw Gruszka 
2055b13a04SStanislaw Gruszka /* Register definitions */
2155b13a04SStanislaw Gruszka #define MT_MCU_RESET_CTL		0x070C
2255b13a04SStanislaw Gruszka #define MT_MCU_INT_LEVEL		0x0718
2355b13a04SStanislaw Gruszka #define MT_MCU_COM_REG0			0x0730
2455b13a04SStanislaw Gruszka #define MT_MCU_COM_REG1			0x0734
2555b13a04SStanislaw Gruszka #define MT_MCU_COM_REG2			0x0738
2655b13a04SStanislaw Gruszka #define MT_MCU_COM_REG3			0x073C
2755b13a04SStanislaw Gruszka 
2855b13a04SStanislaw Gruszka #define MT_MCU_IVB_SIZE			0x40
2955b13a04SStanislaw Gruszka #define MT_MCU_DLM_OFFSET		0x80000
3055b13a04SStanislaw Gruszka 
3155b13a04SStanislaw Gruszka #define MT_MCU_MEMMAP_WLAN		0x00410000
3255b13a04SStanislaw Gruszka /* We use same space for BBP as for MAC regs
3355b13a04SStanislaw Gruszka  * #define MT_MCU_MEMMAP_BBP		0x40000000
3455b13a04SStanislaw Gruszka  */
3555b13a04SStanislaw Gruszka #define MT_MCU_MEMMAP_RF		0x80000000
3655b13a04SStanislaw Gruszka 
3755b13a04SStanislaw Gruszka #define INBAND_PACKET_MAX_LEN		192
3855b13a04SStanislaw Gruszka 
3955b13a04SStanislaw Gruszka enum mcu_cmd {
4055b13a04SStanislaw Gruszka 	CMD_FUN_SET_OP = 1,
4155b13a04SStanislaw Gruszka 	CMD_LOAD_CR = 2,
4255b13a04SStanislaw Gruszka 	CMD_INIT_GAIN_OP = 3,
4355b13a04SStanislaw Gruszka 	CMD_DYNC_VGA_OP = 6,
4455b13a04SStanislaw Gruszka 	CMD_TDLS_CH_SW = 7,
4555b13a04SStanislaw Gruszka 	CMD_BURST_WRITE = 8,
4655b13a04SStanislaw Gruszka 	CMD_READ_MODIFY_WRITE = 9,
4755b13a04SStanislaw Gruszka 	CMD_RANDOM_READ = 10,
4855b13a04SStanislaw Gruszka 	CMD_BURST_READ = 11,
4955b13a04SStanislaw Gruszka 	CMD_RANDOM_WRITE = 12,
5055b13a04SStanislaw Gruszka 	CMD_LED_MODE_OP = 16,
5155b13a04SStanislaw Gruszka 	CMD_POWER_SAVING_OP = 20,
5255b13a04SStanislaw Gruszka 	CMD_WOW_CONFIG = 21,
5355b13a04SStanislaw Gruszka 	CMD_WOW_QUERY = 22,
5455b13a04SStanislaw Gruszka 	CMD_WOW_FEATURE = 24,
5555b13a04SStanislaw Gruszka 	CMD_CARRIER_DETECT_OP = 28,
5655b13a04SStanislaw Gruszka 	CMD_RADOR_DETECT_OP = 29,
5755b13a04SStanislaw Gruszka 	CMD_SWITCH_CHANNEL_OP = 30,
5855b13a04SStanislaw Gruszka 	CMD_CALIBRATION_OP = 31,
5955b13a04SStanislaw Gruszka 	CMD_BEACON_OP = 32,
6055b13a04SStanislaw Gruszka 	CMD_ANTENNA_OP = 33,
6155b13a04SStanislaw Gruszka };
6255b13a04SStanislaw Gruszka 
6355b13a04SStanislaw Gruszka enum mcu_function {
6455b13a04SStanislaw Gruszka 	Q_SELECT = 1,
6555b13a04SStanislaw Gruszka 	BW_SETTING = 2,
6655b13a04SStanislaw Gruszka 	ATOMIC_TSSI_SETTING = 5,
6755b13a04SStanislaw Gruszka };
6855b13a04SStanislaw Gruszka 
6955b13a04SStanislaw Gruszka enum mcu_power_mode {
7055b13a04SStanislaw Gruszka 	RADIO_OFF = 0x30,
7155b13a04SStanislaw Gruszka 	RADIO_ON = 0x31,
7255b13a04SStanislaw Gruszka 	RADIO_OFF_AUTO_WAKEUP = 0x32,
7355b13a04SStanislaw Gruszka 	RADIO_OFF_ADVANCE = 0x33,
7455b13a04SStanislaw Gruszka 	RADIO_ON_ADVANCE = 0x34,
7555b13a04SStanislaw Gruszka };
7655b13a04SStanislaw Gruszka 
7755b13a04SStanislaw Gruszka enum mcu_calibrate {
7855b13a04SStanislaw Gruszka 	MCU_CAL_R = 1,
7955b13a04SStanislaw Gruszka 	MCU_CAL_RXDCOC,
8055b13a04SStanislaw Gruszka 	MCU_CAL_LC,
8155b13a04SStanislaw Gruszka 	MCU_CAL_LOFT,
8255b13a04SStanislaw Gruszka 	MCU_CAL_TXIQ,
8355b13a04SStanislaw Gruszka 	MCU_CAL_BW,
8455b13a04SStanislaw Gruszka 	MCU_CAL_DPD,
8555b13a04SStanislaw Gruszka 	MCU_CAL_RXIQ,
8655b13a04SStanislaw Gruszka 	MCU_CAL_TXDCOC,
8755b13a04SStanislaw Gruszka 	MCU_CAL_RX_GROUP_DELAY,
8855b13a04SStanislaw Gruszka 	MCU_CAL_TX_GROUP_DELAY,
8955b13a04SStanislaw Gruszka };
9055b13a04SStanislaw Gruszka 
9155b13a04SStanislaw Gruszka int mt76x0_mcu_init(struct mt76x0_dev *dev);
9255b13a04SStanislaw Gruszka int mt76x0_mcu_cmd_init(struct mt76x0_dev *dev);
9355b13a04SStanislaw Gruszka void mt76x0_mcu_cmd_deinit(struct mt76x0_dev *dev);
9455b13a04SStanislaw Gruszka 
9555b13a04SStanislaw Gruszka int
9655b13a04SStanislaw Gruszka mt76x0_mcu_calibrate(struct mt76x0_dev *dev, enum mcu_calibrate cal, u32 val);
9755b13a04SStanislaw Gruszka 
9855b13a04SStanislaw Gruszka int
9955b13a04SStanislaw Gruszka mt76x0_mcu_function_select(struct mt76x0_dev *dev, enum mcu_function func, u32 val);
10055b13a04SStanislaw Gruszka 
10155b13a04SStanislaw Gruszka #endif
102