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