111 Commits

Author SHA1 Message Date
Xianjun Jiao
d16217b7aa Swap positon of phy_hdr_config and tx_config:
to align better with 80211ax driver
2025-04-17 16:17:22 +02:00
Xianjun Jiao
fb4cc3e54d improve (force)use_cts_protect code efficiency 2025-04-17 16:17:22 +02:00
Xianjun Jiao
380eec74e8 improve the LARGE/SMALL_FPGA detection in driver 2025-04-17 16:17:22 +02:00
Xianjun Jiao
77769f9dcb change some u16 to u8 2025-04-17 16:17:22 +02:00
Xianjun Jiao
bb3e53ba4d add short gi config into driver test_mode argument 2025-04-17 16:17:22 +02:00
Wei Liu
b102ce3460 write Fc to lower 16 bit of XPU_REG_BAND_CHANNEL register 2025-04-17 16:17:22 +02:00
robgar2001
de9f07c15e Fixed typo in sdr.c 2024-02-22 17:35:03 +01:00
robgar2001
db8c69b6aa Fixed errors during compilation of OpenWRT kernel modules 2024-02-22 14:45:43 +01:00
Xianjun Jiao
1e61d26112 Avoid rfkill turn off wifi after manual tx attenuation setting 2023-11-20 09:14:24 +01:00
Xianjun Jiao
441850b113 NO code change. Formating 2023-02-09 16:14:10 +01:00
Xianjun Jiao
01da46b5c5 Necessary sdr.c change for ADI kuiper release 2023-01-17 14:01:04 +01:00
Xianjun Jiao
d4c3d8108e Though the SIFS definition in 2.4GHz is 10us, the actual gap is still 16us:
1. Confirmed by CMW270 in OFDM mode (10us is for 11b where viterbi decoder is not needed)
2. See Signal Extension in 18.3.2.4 ERP-OFDM PPDU format of 802.11-2020
2023-01-17 13:30:58 +01:00
Xianjun Jiao
20d92b40f5 Change the cca threshold to -62dBm. Seems help a lot in 2.4GHz 2023-01-17 13:11:59 +01:00
Xianjun Jiao
ab74dd7433 Fix the rssi_correction for WiFi 6E channel (close to 6GHz)
Verified by CMW270
2022-05-13 16:50:27 +02:00
Xianjun Jiao
d6c1c3f7f5 Easier way to set arbitrary trx frequency via register rf 1 and 5:
Create helper function ad9361_tx_calibration() and openwifi_rf_rx_update_after_tuning() for frequency tuning. No matter it is from Linux request or rf register 1 (Tx freq override MHz) and 5 (Rx freq override MHz)
2022-03-30 11:36:36 +02:00
Xianjun Jiao
6bb9ef71e9 Example of how to add debug channel via sysfs and access it via script --> driver 2022-03-29 15:18:55 +02:00
Xianjun Jiao
e4d5d1a3ce Add code for new statistics and setting channel via sysfs 2022-03-29 15:16:29 +02:00
Xianjun Jiao
8b7c849019 The improved tx queue handling mechanism between openwifi_tx() and openwifi_tx_interrupt():
1. Consider more corner cases: interrupt missing will cause a bd in the driver ring will never be cleaned. this need to be considered in the openwifi_tx()
2. Another corner case in openwifi_tx_interrupt: a packet is just sent and an interrupt calls the routine, but it finds that the bd in the driver ring has been cleared somehow
3. The driver ring and FPGA queue are always 1 on 1 mapping. User needs to map the higher level Linux priority to the driver ring idx instead of FPGA queue idx
4. Record the information about which FPGA queue (driver ring) has stopped which Linux priority before, and do exhausted search after a packet is sent (in the interrupt routine) to wake that Linux priority queue (in mac80211) up
5. Reserve more room before the FPGA queue full to adopt the last packet before we decide to stop the mac80211 queue. In this way, the last packet before the queue stop will still be put into FPGA and is expected to be sent (not lost/drop actively)
2022-03-29 14:44:39 +02:00
Xianjun Jiao
2c78ef135f Fix the AMPDU reporting bug in tx interrupt:
When pkt_cnt is 1, it is also possible the aggregation case (single packet aggregation). So the reporting type (non aggregation or aggregation) should be decided automatically based on a dedicated use_ht_aggr flag instead of pkt_cnt, otherwise the Linux minstrel_ht link adaptation can not get correct TX status report in the aggregation case and will keep using the lowest MCS0
2022-03-29 14:20:38 +02:00
Xianjun Jiao
106a5e441f Align rx ring init to the new pkt existing flag inserted by FPGA 2022-03-29 14:14:30 +02:00
Xianjun Jiao
088d2d18c4 Add dmesg printk flag in sdr.h and use it in openwifi_rx-interrupt() accordingly 2022-03-29 12:39:33 +02:00
Xianjun Jiao
ca865e3837 Move the location of hdr/addr1/addr2 in openwifi_rx_interrupt() preparing for statistics usage 2022-03-29 12:36:53 +02:00
Xianjun Jiao
d267a5f4fb Add more info when the rx pkt content is abnormal in openwifi_rx_interrupt() 2022-03-29 12:34:51 +02:00
Xianjun Jiao
9c7deabd59 Make the freq/band report in openwifi_rx_interrupt from our driver internal variable instead of Linux setting. The latter might be asynchronous and cause issue: if the received management frame has wrong freq/band info, the Linux mac80211 might reject some state or have issue according to Linux kernel doc somewhere 2022-03-29 12:21:25 +02:00
Xianjun Jiao
0dc3d33d6e Rename the rssi_val to more meaningful rssi_half_db in openwifi_rx_interrupt, and use the helper function rssi_half_db_to_rssi_dbm to do calculation 2022-03-29 12:17:54 +02:00
Xianjun Jiao
1bbdabf023 Remove unnecessary variable initialization and other minor adaptation 2022-03-29 12:16:04 +02:00
Xianjun Jiao
b62a370457 Change the sc to seqno in openwifi_rx_interrupt() and align the operation logic to openwifi_tx() 2022-03-29 12:14:29 +02:00
Xianjun Jiao
bca13d88e4 Shorten the openwifi_rx_interrupt message header to openwifi_rx 2022-03-29 12:13:05 +02:00
thavinga
641a980a9b Disable AD9361 auto calibration and enable openwifi FPGA SPI control in openwifi_start() 2022-03-29 11:34:57 +02:00
Xianjun Jiao
3ac0023386 Try to allocate more room while skb head/tail room is not enough to adopt header/padding in openwifi_tx() 2022-03-29 11:24:42 +02:00
Xianjun Jiao
e7312859f8 Move the normal print location in openwifi_tx() 2022-03-29 11:23:10 +02:00
Xianjun Jiao
09350b04b6 Optimize the type of prio and queue_idx in openwifi_tx() 2022-03-29 11:21:46 +02:00
Xianjun Jiao
f11dfbd0cf Try to wait a bit instead of quit immediately while status!=DMA_COMPLETE in openwifi_tx() 2022-03-29 11:18:51 +02:00
Xianjun Jiao
f70dfc6b7b Optimize seq_no in openwifi_tx() 2022-03-29 11:16:49 +02:00
Xianjun Jiao
5c65530f0b Calculate the duration/id field in driver:
Linux only sets that field for non-ht, and leaves the field blank for ht. Linux expects lower level set it. This is realized after checking the mac80211 source code. After studying the duration/id field of COTS WiFi chip by wireshark, we calculate it in driver sdr.c gen_ht_duration_id(). The concrete logic/method of the calculation is in the comments of the function gen_ht_duration_id().
2022-03-29 11:04:35 +02:00
Xianjun Jiao
86032d0bc7 sifs and n_dbps optimization in openwfii_tx() 2022-03-29 11:03:31 +02:00
Xianjun Jiao
d8b2967699 date type optimization 2022-03-29 11:01:13 +02:00
Xianjun Jiao
db25dabc2b Optimize the pkt_need_ack flag check and rate_hw_value override 2022-03-29 10:56:47 +02:00
Xianjun Jiao
6e0ffbea06 Add abnormal detection prio >= MAX_NUM_HW_QUEUE in openwifi_tx() 2022-03-29 10:48:12 +02:00
Xianjun Jiao
5e4bffc1ef Optimize some variable type 2022-03-29 10:47:32 +02:00
Xianjun Jiao
56d25ef86c We try to handle all tid, so qos_hdr can be optimized 2022-03-29 10:45:49 +02:00
aslaamshaafi
9f3a7b7fcf Merge branch 'pre-release' of github.com:open-sdr/openwifi into pre-release 2022-03-29 10:21:17 +02:00
aslaamshaafi
616c431c9e replace len_mpdu+LEN_PHY_CRC with num_dma_symbol in sdr.c because axis interface in tx_intf IP use it as num_dma_symbol. 2022-03-29 10:21:04 +02:00
Xianjun Jiao
b96c234d09 Remove unnecessary ht aggr related flag reset:
Don't need to reset _prev variables every time when it is not ht aggr qos data. Reason:
1. In 99.9999% cases, the ht always use qos data and goes to prio/queue_idx 2. By not resetting the variable to -1, we can have continuous aggregation packet operation in FPGA queue 2.
2. In other words, the aggregation operation for queue 2 in FPGA won't be interrupted by other non aggregation packets (control/management/beacon/etc.) that go to queue 0 (or other queues than 2).
3. From wired domain and upper level ( DSCP, AC (0~3), WMM management, 802.11D service classes and user priority (UP) ) to chip/FPGA queue index, thre should be some (complicated) mapping relationship.
4. More decent design is setting these aggregation flags (ht_aggr_start) per queue/prio here in driver. But since now only queue 2 and 0 are used (data goes to queue 2, others go to queue 0) in normal (most) cases, let's not go to the decent (complicated) solution immediately.
2022-03-29 10:04:25 +02:00
thavinga
bc98f5bb6c Driver changes for FPGA SPI Tx LO control
- Manually issue Tx Quadrature calibration if frequency change is more than 100MHz
- Disable FPGA SPI module before calibration
- Add xpu reg 13 to disable control manually
2022-03-29 09:56:20 +02:00
Xianjun Jiao
a7d34401ff Update ad9361_rf_set_channel() for easier rssi_half_db rssi_dbm rssi_correction stuffs:
by using the helper functions: rssi_correction_lookup_table(), rssi_dbm_to_rssi_half_db(), rssi_half_db_to_rssi_dbm()
2022-03-28 16:44:52 +02:00
Xianjun Jiao
dbf0324b60 Restructure a bit ad9361_rf_set_channel() for actual lo tuning and priv lo variable update 2022-03-28 16:39:32 +02:00
Xianjun Jiao
534627041e Remove unused code in ad9361_rf_set_channel() 2022-03-28 16:35:25 +02:00
Xianjun Jiao
d2bd08e02e Add useful function definition at the beginning of sdr.c 2022-03-28 16:14:33 +02:00
Xianjun Jiao
df53600a86 Remove the unused code 2022-03-28 16:13:42 +02:00