162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org> 462306a36Sopenharmony_ci * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl> 562306a36Sopenharmony_ci * Copyright (C) 2018 Stanislaw Gruszka <stf_xl@wp.pl> 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef MT76X0U_H 962306a36Sopenharmony_ci#define MT76X0U_H 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <linux/bitfield.h> 1262306a36Sopenharmony_ci#include <linux/kernel.h> 1362306a36Sopenharmony_ci#include <linux/device.h> 1462306a36Sopenharmony_ci#include <linux/mutex.h> 1562306a36Sopenharmony_ci#include <linux/usb.h> 1662306a36Sopenharmony_ci#include <linux/completion.h> 1762306a36Sopenharmony_ci#include <net/mac80211.h> 1862306a36Sopenharmony_ci#include <linux/debugfs.h> 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#include "../mt76x02.h" 2162306a36Sopenharmony_ci#include "eeprom.h" 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#define MT7610E_FIRMWARE "mediatek/mt7610e.bin" 2462306a36Sopenharmony_ci#define MT7650E_FIRMWARE "mediatek/mt7650e.bin" 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci#define MT7610U_FIRMWARE "mediatek/mt7610u.bin" 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci#define MT_USB_AGGR_SIZE_LIMIT 21 /* * 1024B */ 2962306a36Sopenharmony_ci#define MT_USB_AGGR_TIMEOUT 0x80 /* * 33ns */ 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cistatic inline bool is_mt7610e(struct mt76x02_dev *dev) 3262306a36Sopenharmony_ci{ 3362306a36Sopenharmony_ci if (!mt76_is_mmio(&dev->mt76)) 3462306a36Sopenharmony_ci return false; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci return mt76_chip(&dev->mt76) == 0x7610; 3762306a36Sopenharmony_ci} 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_cistatic inline bool is_mt7630(struct mt76x02_dev *dev) 4062306a36Sopenharmony_ci{ 4162306a36Sopenharmony_ci return mt76_chip(&dev->mt76) == 0x7630; 4262306a36Sopenharmony_ci} 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci/* Init */ 4562306a36Sopenharmony_ciint mt76x0_init_hardware(struct mt76x02_dev *dev); 4662306a36Sopenharmony_ciint mt76x0_register_device(struct mt76x02_dev *dev); 4762306a36Sopenharmony_civoid mt76x0_chip_onoff(struct mt76x02_dev *dev, bool enable, bool reset); 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_civoid mt76x0_mac_stop(struct mt76x02_dev *dev); 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ciint mt76x0_config(struct ieee80211_hw *hw, u32 changed); 5262306a36Sopenharmony_ciint mt76x0_set_sar_specs(struct ieee80211_hw *hw, 5362306a36Sopenharmony_ci const struct cfg80211_sar_specs *sar); 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci/* PHY */ 5662306a36Sopenharmony_civoid mt76x0_phy_init(struct mt76x02_dev *dev); 5762306a36Sopenharmony_ciint mt76x0_phy_wait_bbp_ready(struct mt76x02_dev *dev); 5862306a36Sopenharmony_civoid mt76x0_phy_set_channel(struct mt76x02_dev *dev, 5962306a36Sopenharmony_ci struct cfg80211_chan_def *chandef); 6062306a36Sopenharmony_civoid mt76x0_phy_set_txpower(struct mt76x02_dev *dev); 6162306a36Sopenharmony_civoid mt76x0_phy_calibrate(struct mt76x02_dev *dev, bool power_on); 6262306a36Sopenharmony_ci#endif 63