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