Release 11 * Fix 80+80 mode to allow OFDM and some other lower rates. This fixes a crash and at least somewhat works, but not sure this mode is fully supported. * Improve rate-ctrl: The code uses timers to know when to probe higher rates, and when you have 20 active peers doing full speed transmit, a 75ms probe timer means about 20% of the frames are probe frames! So, scale up the probe timer a bit when we have more stations. Also, tune rate-ctrl best-rate selection to more favour rates with lower PER. This improves my 20-station upload to an AP that can really only do about MCS8 from about 350Mbps to almost 450Mbps total throughput. * Rate-ctrl: Allow AMPDU lenth up to 16 when probing. Previous limit was 4. Upping to 16 improves throughput in my test bed. * Fix memory corruption related to pre-fetch sched structs being carelessly cast, exacerbated by changes I made last spring, but the code was potentially wrong even before that and in stock firmware. * The driver can set the software retry for agg and non-agg TIDs, but the ath10k driver doesn't ever actually do this currently. Change defaults in the firmware to do zero non-agg retries (hardware will still retry 4 times it seems), and default agg-retries to 4 instead of 16. I'm not sure if the firmware actually handles the agg-retries or not, possibly that is handled by upper layers anyway. * Do not software-retry host-generated non-mpdu frames. Previously, these could be retransmitted by software the maximum amount the tid supports. In addition, flag frames with NOACK if user specifies 0 retransmits. * Enable specifying per-packet tx-rate info. Requires modified driver, see ath10k_convert_hw_rate_to_rate_info in recent ath10k-ct driver. * Enable MFP feature flag. This fixes .11w performance since blockack can now work. * Add IRQ disabling around beacon processing code. I think this could stop a potential race. * Add ability to set the tx_antenna field in the descriptor. To set this, use use the ct_special API, example: # Set peer-id 1 to use 0x1f as antenna pattern. echo 0x130001001f > /debug/ieee80211/wiphy1/ath10k/ct_special * Disable WREG feature in all firmware builds (not just diet ones). We will assume the host is handling regulatory issues. This should fix a user-reported problem when setting FCC3_FCCA channels. See bug report for details: https://github.com/greearb/ath10k-ct/issues/25 Release 10 (April 11, 2018) * Fix an assert related to tx scheduling. This hopefully fixes what appears to be a regression that I added some time back. * Enable CSI reporting for 9984, and maybe 9888/9886. Only in non-trimmed builds. * Other stability improvements, including regression fixes from some tricky bugs introduced in earlier releases. * Allow compiling for IPQ4019 chipset. * Firmware will now send txbf frames to the host (driver) if the TXBF (0xF00000001) set-special feature is enabled, or when the radio is in monitor mode. But, if the frame is consumed by the txbf_cv logic, then the pkt cannot be delivered to the host in this manner. Instead, a WMI event will be sent and host can find the txbf_cv data in shared memory. See ath10k_wmi_event_txbf_cv_mesg() in ath10k-ct driver. * Support rx-all-mgt option. When enabled, the firmware will deliver all management frames that it can to the host. No RX filters are changed when this option is enabled. * Fix at least some problems with sending tx-beamforming frames to SU-MIMO peers. Looks like this was a regression in my code. * Fix a crash in rate-ctrl due to nss mismatch. This was something I introduced while trying to fix other bugs in rate-ctrl some time back. * Attempt to fix a sw-peer-key object leak in IBSS mode. The peer key code is very complex, and shares some pointers as union members. I think I fixed at least some of the issues, but would not be surprised if more exist. * Improve ath10k user guide to document CT firmware features: https://www.candelatech.com/ath10k-ug.php * Add ct-special option to configure the txbf sounding time. See ath10k-ug.php * Fix and allow the driver to tell the firmware to send sounding frames. See ath10k-ug.php In further testing, this seems to fail much of the time, and I am not sure why. Disabling this in diet (trimmed) builds. * Fix crashes related to deleting peers while they are in power-save mode. Reported by LEDE user on r7800 with 9984 NIC. * Make rate-ctrl txbf probe work better. If enabled, the rate-ctrl logic will periodically send out probes at an NSS that can to txbf. Previously, txbf probes would not reliably happen if both AP and peer had the same nss (ie, 2x2 talking to 2x2). To enable this feature, you need to enable the fwtest-cmdid number 20. * Report rx-timeout error counters. These were previously un-reported, though the field existed in the wmi struct already. * txbf: Ignore frames not destined for us. If NIC is in promisc mode, it could acquire and process NDPA frames that were not destined for it. Check the dest-MAC and ignore frames not for us (pass them up the stack for monitor mode instead of save them in the peer's rate-ctrl logic.) * Port ping-pong crash handling and othe related features to IPQ4019 target. It should now act similar to 9984 in this regard. * Fix a few asserts related to txbf and tx-seq logic. * Add custom-stats support, for rx-reorder-stats. Similar to what I did for wave-1. * Disable AMSDU for IBSS. This now matches what I did for peregrine. It seems to work better this way, though I did not debug it in detail. * Enable the set-special command to re-enable AMSDU for IBSS if user wants to experiment. * Fix bug where dbglog did not disable IRQs, so if you made dbglog messages from the IRQ handler, it could cause corruption that could crash the firmware and/or corrupt the log message buffers. * Don't assert if there are no buffer descriptors for RX of non-data frame. * Retry any stuck block-ack sessions every 20 seconds instead of just disabling BA for ever when we get too many failures. * Fix SGI flag when reporting tx-rate info. The flag moved since wave-1 days, and I did not notice that when I ported my changes forward to wave-2. * Allow disabling special CCA handling for IBSS txqs. Earlier testing indicated this might improve throughput in some testing on 9984 chips in IBSS mode, but subsequent testing looks about the same without it. Since I do not really understand what this setting exists for, leave it at upstream defaults. A new set-special API command (0x12) can be used to enable this hack for testing. Setting 0x1 bit disables special CCA handling for non-beacon IBSS txqs, setting 0x2 bit disables it for beacon queues as well. * When calculating the rx-address filter (affects ACK & BLOCK-ACK, among other things), to not add in monitor interfaces if other interfaces are up. There is no need for a monitor device to ACK frames. * Fix key leak in monitor mode. Release 9 (Sept 1, 2017) * Fix channel parsing for vht160 mode. Should be compatible with the way ath10k wants to do it, and hopefully doesn't break whatever driver wants to do it the new and weird way. * Disable WAR that ignored the driver setting opmode to 80Mhz on a NIC that supports 160Mhz. This WAR broke the ability for a station to configure itself to only 80Mhz on these chips. * Port forward rate-ctrl change from 10.1 CT firmware that will cache tx-status if the rate-ctrl object is not currently swapped in from the host memory. This keeps the rate-ctrl logic from getting stuck at low rates when using 30+ stations and fast UDP download to all of them. This is implemented a bit differently from 10.1, hopefully better. Might can backport that some day if desired. * Use the patch-allocram for 9888 target. This should save a bit of RAM, and gives good debugging hooks in case we need to go exploring. * Let driver configure larger max-amsdu (up to 31 is allowed). This improves tx rate somewhat when packets are small. * Probe requests logic had an un-initialized variable that could cause them to be sent at invalid tx rates. This was introduced by me some time ago. It is now fixed. * Allow compiling with gcc 4.7 and fix the many compile warnings it found. Most were probably not serious, but a few, especially for the 9888 target, might have caused buffer overflows and such. * Backport latest 3.4.71 firmware to this code base. * Compile out COEX code in diet builds in order to save memory. * Backport latest 3.4.82 firmware to this code base. * Fix some type-safety issues in WDS logic. Might fix WDS mode in CT firmware. * Comment out a line of code in wlan_vdev.c that came in with 3.4.71 and made multiple vdev performance with 9888 (at least) work poorly. * Modify firmware to not ask for txq prefetch for self-peers. It is useless, at best, since the driver has no idea about self-peers since the AST-add event is not sent to the driver, and thus will not be able to fetch anything. * The firmware tries to cache rate-ctrl objects in the host (driver) memory. But, with lots of active stations, this appears to cause constant cache swapping and in the end, rate-ctrl fails to work well at all. CT Firmware has lots of RAM savings, especially when using fewer than 64 vdevs, so allow users to configure more than the default of in-ram rate-ctrl objects. As long as firmware RAM is available, allocating as many rate-ctrl objects as possible (up to number of peers) is probably a good idea. Setting value to 0 means use firmware defaults. * Fix channel reservation logic. This has been broken for a long time in CT firmware, at least when using multiple station vdevs. Somehow, it mostly worked before, but the bug became appearant lately. Tracked it down and fixed it I did. * Fix key-setting bug that broke sending the EAPOL 2/4 in some cases. This was a bug I introduced some time back while trying to fix .11r and simplify the key handling logic. (Patch to wpa_supplicant fixed the race with sending the 4/4 and setting the key...un-patched supplicant will still have this race and the 4-way auth will not work as reliably.) * Increase amount of active-tids that can be scheduled. This fixes a tx-stall seen with many station vdevs. * Fix bug in upstream code that would cause the maximum peer to never be scheduled for tx. * Fix crash when some rate indices had zero available rates. This was seen when specifying that a station should only transmit on VHT-MCS 31 when peer was only a 3x3. Probably other ways of getting zero ratesets would also trigger this. * Inspect beacons, and wake a station vdev if we detect the AID in the beacon TIM IE. This fixes the case where you ping from AP to a power-save station and the station takes 10+ seconds to respond. * Fix 802.11s mesh interfaces, specifically beaconing was broken. And, there was a crash related to mesh when a monitor interface was the last vdev in the firmware. That is fixed as well. * Add wmi message to allow host to inspect txbf-cv data. Disabled by default, use the set-special API to enable. See 4.9 ath10k-ct driver for syntax. * Fix problem with mesh where ARPs could not be sent. This was due to the firmware tx-scheduler having boundary-condition errors when there was only peer-0 wanting to transmit. Possibly peer-0 would always have issues and it was only detected in the mesh test case? Release 8 * Backport 10.4.3.3.92 changes from upstream. * Fix regression I had added earlier in the beta series. Problem was regression in power-save logic due to some problems when I tried to consolidate lots of timers into one timer to save RAM. * Optimize for memory, especially the DIET (trimmed) builds. qboost and RTT are disabled in diet builds now. Neither seem that useful for normal wifi work, and qboost is not used by the ath10k driver at present anyway. * Consolidate and re-work block-ack to not need a timer per session. Instead use one timer and walk all sessions at expiry. Saves a nice bit of RAM, and is cleaner fix for a previously worked-around use-after-free timer crash bug, but hard to test properly. Please report any BA issues. * Diet build now supports 64-vdevs (128 sta, etc) on 9984 and 9886 hardware, 9980 supports 48 vdevs. * Enable 160Mhz capability flag. Haven't actually tried to see if it can actually function at 160Mhz bandwith. * Allow compiling for 9886/9888 chipset. This NIC seems to work pretty well so far, tested on a 9886 NIC from Compex. * Auto-calculate the 'base' MAC address. This lets us create vdevs with a MAC address range differing from the 'real' MAC of the radio and still keep a tight BSSID-Filter mask. * Fix assert related to prefetch-sched logic when completion comes in after peer object was deleted and then quickly re-used. * set-special: Some: Many of the set-special options are not supported by 10.4 firmware. Setting THRESH62, NOISE_FLR_THRESH, MAX_TXPOWER, and MAX_PER_THR should work in previous releases. STA_TXBW_MASK, RIFS_ENABLE is not supported. PDEV_XRETRY_TH is not supported (or needed). WMI_WD is not supported (WMI WD is not enabled in 10.4 firmware) * Fix some crashes related to tx-callbacks in the firmware when deleting peer (and tid) objects. Release 7 * Fix regression that broke mu-mimo, among other things. MU-MIMO does not work with rxsw-crypt enabled, however. * Fix htt-mgt-tx for 4.5 and higher kernels. Problem was that mgt tid and non-pause tids were being converted to non-qos tid, which means that mgt frames were going onto the air with 10 bytes of junk on the end. This same bug might have make APs using this firmware not be able to associate with /a/b/g stations as well, but not certain of that. * Fix memory corruption relating to passing the wrong value to methods taking void pointers as context. While fixing this, convert several classes of void pointers into typed pointers so that the compiler can catch stupid mistakes. This was in core code, so both 9980 and 9984 will benefit. * Fix memory corruption in iq-cal logic for 9984 (and probably 9888 if I compile for that) chipsets. Basic problem was poor code quality causing buffer overflow in a structure located in SRAM storage. * Return stats when no vdevs are active. Seems this was a regression added to the firmware at some point. * Allow compiling out the peer-caching (swap to host) logic. It breaks use-case of having multiple STA vdevs connected to one AP, and I suspect it might be cause of instability in many station load test case. * Merge in upstream 10.4.3.3-25 code. * Enable compiling for 9984 chipset, fix some initial bugs (Initial release for 9984 CT firmware) * Fix, or at least work-around asserts in rate-ctrl code with TCP download test. * Lots more tweaks to rate-ctrl logic. * Fix regression bug with htt-mgt and OPEN APs. Release 6 * Fix regression bug that broke encryption. * Tested with 36 station vdevs. * Disable WMI keepalive timer. It was not actually working properly and was crashing due to calling a function-pointer that was NULL. Can properly re-enable it later if it turns out wave-2 firmware/hardware actually has WMI hang issues. * Ensure key event is sent on error when AST is full. Saves 3-second timeout under RTNL lock in the driver in cases where not enough AST entries are allocated. * Pull in changes from the CNSS.BL.3.0.2-00068-S-1 release. * Fix NPE crash when removing vdev. Looks like frame completion logic was trying to access a just-freed peer object, and so it crashed. So, protect against NULL pointers in this case. * Fix several crashes related to removing peers, especially when deleting a partially created peer. * Fix more asserts related to running out of peer-key objects and similar. Release 5 * Fix AP mode. I had introduced a regression in the rx-filter concurrency logic in Release 4. In addition, there were some other bugs in AP mode when using htt-mgt that are resolved. * Ensure mgt frames use proper management rate in htt-mgt mode. This significantly improves the ability to associate. This had not worked properly since the introduction of htt-mgt logic. Images compiled without htt-mgt would not have had this bug. * Support CT Ratemask feature (ability to disable any rate or set of rates). Release 4 * Fix IBSS + STA concurrent use. It mostly worked, but needed to remove some asserts that seemed overly restrictive. * Fix ANQP queries to APs with which the station is not currently connected. The station will now use the bss-peer if actual peer is unknown. This changes some behaviour for how mgt frames to unknown peers is handled. This appears good for ANQP/GAS, but possibly there are other test cases where the old logic was needed? * Return temperature for the 4 ADC units in the register-dump stats. * Fix TID mapping: When host requests one of the special TIDS, such as HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST, then the firmware should NOT attempt to re-map this to AC/TID. Instead, pass it unchanged into the lower code. This lets null-func packets go out as truly non-qos frames instead of turning them into QoS best-effort frames and then letting block-ack work (or not, or at least not fast enough, in my testing). May require host patch to set the TID to HTT_DATA_TX_EXT_TID_NON_QOS_MCAST_BCAST as needed to make good use of this firmware. This change only affects station mode. * Allow over-riding thresh62_ext. The other 'special' cmd IDs involving CTS timing have not been implemented yet. * Enable CT Management-over-HTT firmware variants. These are *NOT* compatible with stock drivers. You must use this patch or something similar for the 'htt-mgt' firmware to work. http://dmz2.candelatech.com/git/gitweb.cgi?p=linux-4.0.dev.y/.git;a=commitdiff;h=56d57560d68da5d9a5ec266c0d9bc6f2ad8a2f44;hp=abd3ee5c4d297e56b854864624152f5704c5df20 Stock 10.4 has somewhat similar HTT mgt API already, so this is mostly to be compatible with earlier firmware and to make sure all frames go through the same code path instead of using the MGT specific packet-transmit API that stock firmware uses. * Allow monitor mode to receive 'Association Request', block-ack action frames, nodata frames, TYPE-CTL frames. Previously, these were not delivered to the WMI interface, and the kernel driver is configured to drop mgmt frames in the normal RX htt datapath, so host never saw them. This makes sniffing with ath10k a lot more useful. When no monitor devices are active, the firmware reverts to the previous behaviour. I guess the idea is that this is an optimization and keeps some un-needed frames off the host. * Enable setting noise-floor-threshold and min-cca-power. If set, this will over ride the defaults, including eeprom (though firmware ignores these settings in the eeprom anyway.) Don't mess with this unless you understand the consequences. But, if set properly, noise-floor-threshold tweaking may fix ETSI CCA adapatibility test failures. * Allow disabling firmware-added legacy, HT and VHT related IEs in probe requests. The host can do a better job of adding these, and this keeps there from being duplicated IEs in probe requests. Requires kernel patch to take advantage of these new