summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-02-14mt76: mt76x02u: do not set NULL beaconsStanislaw Gruszka1-4/+2
With current implementation we do not cleanup beacon memory, so is not needed to call mt76x02_mac_set_beacon() with NULL skb. Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: usb: use max packet length for m76u_copyStanislaw Gruszka2-14/+22
For transferring data over USB the optimal size is endpoint maxpacket. For my hardware maxpaket for control endpoint is 64 bytes and changing to this value from 128 bytes further shorten TBTT work time from 3ms to 1ms. Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt76x02: add channel switch support for usb interfacesMarkus Theil2-1/+9
This patch enables channel switch support on mt76 usb interfaces. Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: speed up usb bulk copyMarkus Theil2-7/+19
Use larger batches for usb copy to speed this operation up. Otherwise it would be too slow for copying new beacons or broadcast frames over usb. Assure, that always a multiple of 4 Bytes is copied, as outlined in 850e8f6fbd "mt76: round up length on mt76_wr_copy" from Felix Fietkau. Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt76x02: remove a copy call for usb speedupMarkus Theil1-4/+15
This patch removes a mt76_wr_copy call from the beacon path to hw. The skb which is used in this place gets therefore build with txwi inside its data. For mt76 usb drivers, this saves one synchronuous copy call over usb, which lets the beacon work complete faster. In mmio case, there is not enough headroom to put the txwi into the skb, it is therefore using an additional mt76_wr_copy, which is fast over mmio. Thanks Stanislaw for pointing this out. Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt76x02: add check for invalid vif idxMarkus Theil1-1/+3
On adding vifs the idx can become 1 + (7 & 7) = 8 for APs. Check against that, as only AP vif idx 0-7 is possible. Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt76x02: split beaconingMarkus Theil6-65/+28
Sending beacons to the hardware always happens in batches. In order to speed up beacon processing on usb devices, this patch splits out common code an calls it only once. Beacons are sequentially written into the beacon memory area, by tracking its usage with the dev->beacon_data_count. For MBSS support and buffered traffic dev->beacon_data_count is used to create the bypass mask. The code is also adapted for the mmio part of the driver, but should not have any performance implication there. MBSS tests were performed with AVM AC860 USB NIC with temporary support for 5 BSS'. Different combinations of active vifs were created and brought up. Afterwards connection and data transfer was tested for the announced BSS'. Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt76x02: omit beacon slot clearingMarkus Theil1-8/+0
mt76 hw does not send beacons from beacon slots, if the corresponding bitmask is set accordingly. Therefore we can omit clearing the beacon memory. Clearing uses many usb calls, if usb drivers are used. These calls unnecessarily slow down the beacon tasklet. Thanks to Stanislaw Gruzska for pointing this out. Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: use AC specific reorder timeoutMarkus Theil2-4/+14
Before this patch, mt76 handled rx traffic for all TIDs equally, when released from reorder buffer early. This patch uses an AC specific reorder timeout, in order to release partial aggregated frames for video ACs earlier. Voice ACs are currently not aggregated (thanks to Felix for this hint). For example, ath10k also uses AC specific reorder timeouts (reported by firmware in that case). Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: add set_coverage class supportLorenzo Bianconi5-0/+113
Add the capability to configure acktimeout for mt7615 driver. Moreover configure slottime according to the value provided by mac80211 Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7603: set 0 as min coverage_class valueLorenzo Bianconi1-1/+1
Set 0 as minimum configurable value for coverage_class since mt76 does not support dynack Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt76x02: fix coverage_class typeLorenzo Bianconi2-2/+2
Fix coverage_class type in mt76x02_dev data structure since coverage_class can be negative to enable dynack (just supported by ath9k). Set 0 as minimum value for coverage_class Fixes: 7bc04215a66b ("mt76: add driver code for MT76x2e") Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: report firmware version using ethtoolLorenzo Bianconi1-1/+7
Print fw_ver and build_date members of struct mt7615_fw_trailer similarly to what appears in the output of 'dmesg' when the MCU firmware is loaded. Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: Fix build with older compilersPablo Greco1-4/+1
Some compilers (tested with 4.8.5 from CentOS 7) fail properly process FIELD_GET inside an inline function, which ends up in a BUILD_BUG_ON. Convert inline function to a macro. Fixes commit bf92e7685100 ("mt76: mt7615: add support for per-chain signal strength reporting") Reported in https://lkml.org/lkml/2019/9/21/146 Reported-by: kbuild test robot <lkp@intel.com> Signed-off-by: Pablo Greco <pgreco@centosproject.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14dt-bindings: net: wireless: mt76: introduce big-endian propertyLorenzo Bianconi1-0/+3
Introduce big-endian property to specify mtd radio partition endianness Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Acked-by: Rob Herring <robh@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: eeprom: add support for big endian eeprom partitionLorenzo Bianconi1-0/+10
mt76x0e users reported some devices (e.g TP-Link Archer VR200v) have been flashed with big endian radio partition. Add the possibility to specify eeprom endianness using big-endian dts property and in case covert eeprom data in little endian Tested-by: Kevin Schmidt <kevin.patrick.schmidt@googlemail.com> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7603: reset STA_CCA counter setting the channelLorenzo Bianconi1-1/+1
Reset MT_MIB_STAT_CCA after channel switch since it is used to track busy time starting from 'commit dcff8d4dc301 ("mt76: mt7603: switch to a different counter for survey busy time")' Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: fix possible undetected invalid MAC addressShayne Chen1-1/+2
Make sure the MAC address is checked before function returns. If CONFIG_OF is set and the device node is null, the function will return directly, and an invalid MAC address will not be checked. Signed-off-by: Shayne Chen <shayne.chen@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: disable bh in mt76_dma_rx_pollFelix Fietkau1-0/+2
Fixes potential RCU issues and avoids calling ieee80211_rx_napi with softirq enabled. Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: fix rx dma ring descriptor state on resetFelix Fietkau1-1/+1
To avoid having the hardware potentially write to memory behind stale descriptors, set the dma-done flag on all of them before cleaning up allocated rx buffers Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt7615: replace sta_state callback with sta_add/sta_removeFelix Fietkau3-22/+29
The MT7615 firmware needs to know the association id at creation time, which is unavailable during the transition from notexist to none in .sta_state. This can cause a number of issues, probably also breaking powersave support. Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: defer mcu initialization via workqueueFelix Fietkau4-10/+45
Loading the mcu firmware and waiting for it to boot takes a long time, which adds a significant amount to the system boot time. Fix this by running the mcu init from a workqueue and waiting for it to complete before starting the phy or issuing mcu commands via debugfs Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: update beacon contents on BSS_CHANGED_BEACONFelix Fietkau1-5/+4
Beacon changes need to be sent to the firmware, otherwise it will keep sending stale data Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: add support for registering a second wiphy via debugfsFelix Fietkau4-21/+140
This is only used for testing for now. In the future it will be possible to enable the second PHY through an proper API via device tree Running: echo 1 > /sys/kernel/debug/ieee80211/phyX/mt76/dbdc will register a second wiphy (and limit the primary one to 2 spatial streams). The second wiphy will only be able to run on 5 GHz, while the primary one can operate in both bands (if supported by the device). Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: select the correct tx queue for frames sent to the second phyFelix Fietkau2-3/+14
Beacons and management frames need to explicitly select the alternate tx queues in order to be sent out on the right phy Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: move radio/mac initialization to .start/stop callbacksFelix Fietkau4-8/+26
Run initialization per phy Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: initialize dbdc settings on interface addFelix Fietkau5-1/+94
Use the first two WMM slots for the primary phy and the second two for the secondary phy. Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: add multiple wiphy support to the rx pathFelix Fietkau4-15/+47
Program the RMAC CHFREQ registers to properly indicate the band that the frames are received on. Add some sanity checks to the programmed values, because the firmware programs these registers differently Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: rework chainmask handlingFelix Fietkau3-4/+8
Move chainmask to struct mt7615_phy and instead of needlessly making the format similar to values for older chips, make it refer to the actual chain bits used for the rx/tx path. This is important for multiple wiphy support, where for a secondary phy, antenna_mask will start at 0, and chainmask will start at the chain offset (bit 2) Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: add multiple wiphy support to the dfs support codeFelix Fietkau6-53/+107
There are two DFS detectors on the chip. When using 160 MHz channel bandwidth (not supported in dual-wiphy mode), both are used. Otherwise, one detector is used per wiphy. Rework the code to start/stop them separately per phy and to indicate the radar event on the right phy based on the detector index Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: remove useless MT_HW_RDD0/1 enumFelix Fietkau3-24/+13
Writing 0/1 is shorter and just as clear Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: add missing register init for dual-wiphy supportFelix Fietkau2-4/+4
Initialize low-power beacon mode setting Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: add multiple wiphy support for smart carrier senseFelix Fietkau5-65/+112
Use per-phy radio stats and tuning registers Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: mt7615: add dual-phy support for mac80211 opsFelix Fietkau6-108/+244
Allows them to be used by a separately registered wiphy later Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: do not overwrite max_tx_fragments if it has been setShayne Chen1-1/+3
Prevent the overwriting of max_tx_fragments if it has already been set in chip-specific init routine. Signed-off-by: Shayne Chen <shayne.chen@mediatek.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: move ampdu_ref from mt76_dev to driver structFelix Fietkau7-10/+12
It is only used by the driver Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: add ext_phy field to struct mt76_wcidFelix Fietkau2-0/+2
Will be used to determine the phy from within the driver Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: add function for allocating an extra wiphyFelix Fietkau2-49/+135
Unlike the core phy, this will have extra allocated memory for a driver private struct. Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: add priv pointer to struct mt76_phyFelix Fietkau1-0/+1
Will be used for per-phy driver private data Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: add multiple wiphy support to mt76_get_min_avg_rssiFelix Fietkau6-7/+11
Allow tracking clients of both wiphys separately Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: move txpower and antenna mask to struct mt76_phyFelix Fietkau14-34/+35
Adds multiple wiphy support to mt76_get_txpower Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: move txpower_conf back to driver specific structsFelix Fietkau9-11/+11
Nothing in the core uses it Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: move chainmask back to driver specific structsFelix Fietkau10-12/+13
Nothing in the core uses it Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: move state from struct mt76_dev to mt76_phyFelix Fietkau34-90/+97
Allows keeping per-wiphy state separate Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: keep a set of software tx queues per phyFelix Fietkau7-13/+24
Allows tracking tx scheduling separately per phy Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: move channel state to struct mt76_phyFelix Fietkau30-137/+153
Add support for an extra wiphy in mt76_set_channel and mt76_get_survey This is preparation for supporting multiple wiphys per device to support the concurrent dual-band feature of MT7615D Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: add support for an extra wiphy in mt76_sta_state()Felix Fietkau3-5/+33
This is preparation for supporting multiple wiphys per device to support the concurrent dual-band feature of MT7615D Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: add support for an extra wiphy in the tx status pathFelix Fietkau3-6/+44
This is preparation for supporting multiple wiphys per device to support the concurrent dual-band feature of MT7615D Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: add support for an extra wiphy in the main tx pathFelix Fietkau11-37/+45
This is preparation for supporting multiple wiphys per device to support the concurrent dual-band feature of MT7615D Signed-off-by: Felix Fietkau <nbd@nbd.name>
2020-02-14mt76: add support for an extra wiphy in the rx pathFelix Fietkau2-6/+25
This is preparation for supporting multiple wiphys per device to support the concurrent dual-band feature of MT7615D Signed-off-by: Felix Fietkau <nbd@nbd.name>