Commit Graph

1485 Commits

Author SHA1 Message Date
Radha Krishna Simha Jiguru
c13c930a62 qcacmn: Rearrange dp_tx_send_single
Rearrange dp_tx_send_single to avoid code duplication.

Change-Id: I35d9f9c36ffecd00931d58b9f66ebc809320963f
2020-03-24 02:41:37 -07:00
Neha Bisht
3b0a0f19ce qcacmn: Disable packet trace by default in per packet path
Disable packet trace by default in per packet path..

Change-Id: I04e998a997edac33eaf1328b71fb6eba675e54c7
2020-03-24 02:41:23 -07:00
Radha Krishna Simha Jiguru
d78c96c67c qcacmn: Restrict lock hold time in tx path
Restrict lock hold time in transmit path to only ring access time.
Also store lmac_id in vdev to avoid multi indirection.
Arrange fields in data structure for better alignment in data path access.

Change-Id: I1d32880ed88be486171be46281ec180d2a4906bf
2020-03-24 02:41:07 -07:00
Mainak Sen
aceafadc2e qcacmn: WBM msdu continuation for SG in QCN9000
In QCN9000, wbm release ring has msdu continuation bit
support for invld peer MPDUs. Host needs to form SG
buffer for packets with msdu continuation bit set

Change-Id: Ica03c78068d32d2c8dc609b9a50298b91dd48c0a
2020-03-23 16:07:47 -07:00
Basamma Yakkanahalli
9def5df14a qcacmn: device ID and target type checks for ipq5018 target
Initial changes for ipq5018 compilation.
Added device ID and target type checks for ipq5018 traget.

Change-Id: Ib86a371fbe66749fcb6d114e7a4a9931b684e03d
2020-03-20 23:45:43 -07:00
Amir Patel
925a7d389c qcacmn: Add full monitor mode changes
Add following changes:
	a. Add CDP API to config full monitor mode
	b. HTT configuration changes
	c. Init/Deinit changes for full monitor mode resources

CRs-Fixed: 2632442
Change-Id: I06db5194031b3ea0f0c1e5deda20df4bc0faa0b9
2020-03-20 22:16:00 -07:00
Sravan Goud
35b8f761f9 qcacmn: Return correct rx refill buf ring
In dp_rxdma_get_mon_buf_ring returns mac id index of
rx_refill_buf_ring array. But for targets with only one
pdev only the zeroth index is initialized. This will lead
to replenish failures in case of monitor mode when mon dest
process of lmac ring with mac id 1. So return only index 0 of
rx refill buf ring.

Change-Id: I03a7e19ea8d976e19fe6482aff0080dfa4d5ec45
CRs-Fixed: 2638655
2020-03-20 20:37:05 -07:00
Srinivas Pitla
cd32eed2af qcacmn: Drop mgmt nbuf in tx_capture disabled case
If tx_capture is disabled, the frames notified to tx_capture
module needs to be freed.

This change frees mgmt frames in tx capture module, if the feature
is disabled

Change-Id: I5f9ced69246c2b712d76f2f3cc61b5c386b703ec
CRs-Fixed: 2644025
2020-03-20 20:36:47 -07:00
Vevek Venkatesan
a62641c747 qcacmn: add synchronous timer stop to avoid race condition
Change the qdf_timer_stop to qdf_timer_sync_cancel (synchronized
timer stop), so it can wait till previous handler is completed
and then stop/delete the timer, to avoid race condition.
Also, call this qdf_timer_sync_cancel in dp_vdev_detach_wifi3,
to be symmetry with timer start in dp_vdev_attach_wifi3.

Change-Id: I3e975554b5492ccfc684ffe8b021c62ef39bf4d7
CRs-Fixed: 2644432
2020-03-19 22:25:27 -07:00
Amit Shukla
a700ecf10e qcacmn: Fix rate and PHY type for disassoc retry packets
In tx capture feature, the last retry packet has wrong rate.
This is because the peer is invalid at the time rate TLV is processed
for retries.

Change-Id: I0eb9a8c80f8ea0dde60fe819c7e667293630a379
CRs-Fixed: 2633669
2020-03-19 01:36:55 -07:00
Chaithanya Garrepalli
f9eb64de02 qcacmn: handle decrypt error on in case of peer invalid
In case of decrypt de-auth need to be sent in case of
invalid. In valid peer case no action needed

Change-Id: I355093734c20a113fc1df0306b426eeb4f92ac88
2020-03-17 05:15:09 -07:00
Pavankumar Nandeshwar
9b0c1271ed qcacmn: Initialized pdev id with default value 0xFF
pdev_id is being initialized with 0. Since 0 is valid pdev_id, though
pdev is not present for that id, it is being accessed.

Initialized pdev_id to 0xFF by default. Added checks on API to
detect valid pdev_id value corresponding to lmac_id

Change-Id: I2b2a38783615494ccc08e265702815f7e562214b
2020-03-17 03:11:13 -07:00
Pavankumar Nandeshwar
9afaef18bf qcacmn: Assign soc to dp_pdev soon after allocation
Assign soc to dp_pdev soon after allocation, since the
soc pointer is required during deinit if pdev attach fails.

Change-Id: I87789deb82efe9f554b3310a904dd340c5eb9f7a
CRs-fixed: 2638378
2020-03-17 01:06:23 -07:00
Saket Jha
42f305e423 qcacmn: Avoid accessing invalid cookie rx_descriptor
Remove debug dump call to dp_rx_desc_dump() as cookie rx_descriptor is
invalid.

Change-Id: I106ebc2f872e43079abd6e6e493c90022fd09c3b
CRs-Fixed: 2638059
2020-03-16 19:55:12 -07:00
Chaithanya Garrepalli
1da6b755af qcacmn: drop nbufs in WBM error with sa_idx out of range
In some cases we are seeing sa as valid and sa_idx out of
range. Drop nbufs in this case

Change-Id: I17c4ff41817a77f0eb8fcdf77fa17d4d3197f97b
2020-03-16 08:05:48 -07:00
Rakesh Pillai
f2e0f22bf7 qcacmn: Fix stack frame overflow for dp_rx_process
dp_rx_process stack frame has grown to exceed the
stack frame size of 4096. dp_rx_deliver_to_stack_no_peer
is a big function which should not be inline. Calling it
in other function increases the stack size consumed by the
caller function a lot.

Since dp_rx_deliver_to_stack_no_peer is not called very
frequently from dp_rx_process, changing its type to non-inline
function does not hit the core rx datapath much. Hence
change dp_rx_deliver_to_stack_no_peer to a non-inline
function.

Change-Id: Ib042f74c1f5a9cbe5fd947a24f004bb2fecf1fb1
CRs-Fixed: 2636365
2020-03-16 03:47:48 -07:00
Kai Chen
b1a940fa76 qcacmn: Fix issue on block ACK on response to BAR
Fix the issue on block ACK on response to BAR frame.
Parse BAR frame received from monitor destination ring and
generate block ack frame from BAR frame and previous block
ACK frame.

Change-Id: Ifc242b3850630aa25827b003a1e2078a9228358a
2020-03-11 01:47:02 -07:00
Nisha Menon
af7af90906 qcacmn: SMMU fault as iova to phy address is invalid
IPA pipes are not disconnected successfully when the last
client disconnects and despite that smmu mappings given
to IPA for the buffers are released.
Assert instead of releasing the smmu buffer mappings as
IPA has stalled and is in a non-recoverable state.

Change-Id: I9a9a35a4019726421d7435b62defe8da4907d4e0
CRs-Fixed: 2627889
2020-03-09 20:58:50 -07:00
Mohit Khanna
b4429e8278 qcacmn: Add delayed register write support in HAL
In case the bus is in low power mode, the register writes (followed by a
memory barrier) may take a long time (~4ms). This can cause the caller
to block till the PCIe write is completed. Thus, even though PCI
writes are posted, it can still block the caller.

Hence, in case the bus is in low power mode (not in M0), or not in high
throughput scenarios, queue the register write in a workqueue. The
register write will happen in the delayed work context. In other cases,
i.e ,when the bus is not in low power mode or in high thoughput
scenarios, do the register writes in caller context.

Change-Id: Idf218e4581545bc6ac67b91d0f70d495387ca90e
CRs-Fixed: 2602029
2020-03-09 20:58:23 -07:00
Amir Patel
d5a7a4ca89 qcacmn: Revert "qcacmn: Replenish last entry in monitor status ring"
This reverts commit I7da6cd6006243cbca2151da22a31a6f5ed0015f3

Change-Id: I04ceeeeabb5f94bfcd81e10280dcd017da537c81
2020-03-09 14:52:57 -07:00
Ankit Kumar
673a66042b qcacmn: Retrieve peer from mac based search
Use mac based search to avoid use after free Peer.

Change-Id: Ie6c3e82f3bb95cdf4c6504e95704e821bbd19e24
2020-03-09 08:24:21 -07:00
Saket Jha
d364435727 qcacmn: Validate rx return_buffer_manager
Host rx return_buffer_manager should always be 4 or 6. Add check for
invalid return_buffer_manager value in ring descriptor.

Change-Id: I509dd58ddd89e6a0ce1bffa509dcfabbd0fbc975
CRs-Fixed: 2632372
2020-03-06 18:52:30 -08:00
Chaithanya Garrepalli
9668aeef28 qcacmn: Fix SG target assert issue
In SG mode use correct QDF apis to populate
the extension descriptor

Change-Id: I828d11481b013facb07f22a119ab9b3f35912f22
2020-03-06 08:37:20 -08:00
Pavankumar Nandeshwar
d1aac5b3c3 qcacmn: Send peer_id in peer_add_wds_entry API
Send peer_id in peer_add_wds_entry API of ol_if_ops,
so that the dp peer doesn't need to be explicitly
retrieved in corresponding offload API.

Change-Id: Ia32d31946de43e9faa1970f4e74f2810f4125995
CRs-fixed: 2629475
2020-03-05 08:28:02 -08:00
Srinivas Pitla
4f48adea18 qcacmn: Fix EAPOL frames issue in Tx capture
This change fixes issue with EAPOL frames in Tx capture
EAPOL frames completions are received with ACK completion.
For ACK completion, ba_size, ba_bitmap, ba_seqno are not updated earlier.
it was leading to dropping the frames in driver.

This fix updates ba_size, ba_bitmap, ba_seqno for QOS TID frames in ACK
completion handler

Change-Id: I58308a13c1b6addb95f424aa7ad45fe64e93b532
CRs-Fixed: 2620890
2020-03-04 22:59:15 -08:00
Jinwei Chen
356c6b714e qcacmn: fix null skb accessing due to incomplete scattered msdu
If RX packets reaped from REO2SW ring hit rx_reap_loop_pkt_limit,
REO2SW ring reaping will break and stop, but for scattered msdu case,
all related buffer should be received one time for further processing,
otherwise dp_rx_sg_create can not handle correctly.

(1) make sure all buffers for scattered msdu is received then allow
break when rx_reap_loop_pkt_limit hit.
(2) refine skb unmap location in case msdu_scatter_wait_break logic is
hit, then may double unmap for same skb(not for current issue).

Change-Id: I85d385ee9c3b1a5ed56ae5e5b68636d04968553f
CRs-Fixed: 2632082
2020-03-04 09:56:49 -08:00
Rakesh Pillai
7a26da4e7e qcacmn: Validate the rx descriptor before dereferencing
The rx descriptor obtained using the cookie
can be NULL if the cookie is invalid. Hence
dereferencing the rx descriptor without any
validation can cause invalid address access.

Fix this by validating the rx descriptor
which has been obtained using the cookie from
the hal ring descriptor.

Change-Id: Ib584f0d8175b581d15b0e1c67d2f6ed9119ecbfc
CRs-Fixed: 2629254
2020-03-03 18:55:00 -08:00
Amir Patel
605e44bf31 qcacmn: Move dp monitor inline APIs to header file
Move dp monitor inline APIs to header file from dp_rx_mon_dest.c
to dp_rx_mon.h to use it in component dev

CRs-Fixed: 2626054
Change-Id: I3a31dacd7d7e817f144708f9bda5536808080864
2020-03-03 18:54:37 -08:00
Amir Patel
31bfe1fb2c qcacmn: Replenish last entry in monitor status ring
In current monitor status ring implementation,
on pdev_attach, (srng->num_entires – 1) entries
(to keep one entry slot between hp and tp)
are replenished and last entry is not replenished to HW.

With qcn9000 monitor mode HW enhancements, status and destination ring
can be made lock-stepped.
for qcn9000 lock step is achieved by making monitor status ring
follow the monitor destination reap for a PPDU

However in existing flow during attach monitor status replenish logic
do not fill last entry but is filled up during first subsequent reap.
for first ppdu, i.e. after reaping destination ring,
when status ring is reaped, as first entry (hp = srng->num_entires – 1)
in status ring is NULL, so lock-stepping is not achieved.

To address this issue for qcn9000 as well as HK:
	a. Replenish last entry in monitor status ring during attach
	b. Modify src srng peek API to peek it from hp+1 entry
	c. Introduce new HAL API get cur desc and move next

CRs-Fixed: 2626049
Change-Id: I7da6cd6006243cbca2151da22a31a6f5ed0015f3
2020-03-03 12:37:37 -08:00
Yu Tian
42e17e09b4 qcacmn: refine dp_set_key_sec_type_wifi3
Peer key security type is set in cdp_set_pn_check,
this API is called in key install step, but only
update Ucast field even if in Mcast key install.
This may be set wrongly if Ucast and Mcast security
modes are different. Add a new API to set
security modes of differ key types separately.
This change should be reviewd in associate with
review #3036742

Change-Id: Ib9723416fbedbe3dce61224928d51ef203cf7068
CRs-Fixed: 2623114
2020-03-02 19:13:17 -08:00
Ankit Kumar
2bf9b7a18a qcacmn: Initialize command/credit ring for qca8074 & qcn9000
Initialize command/credit ring for qca8074 & qcn9000.

Change-Id: I28087dd4d8f4afddd954c764c2e85da43eaf78f1
CRs-fixed: 2562649
2020-03-01 05:25:24 -08:00
Jinwei Chen
610ed92400 qcacmn: enlarge htt_htc misclist trim threshold
Macro ATH_11AC_TXCOMPACT is defined, so CE4 sending completion will
not free the related htt_htc packets. Currently it depends on
htt_soc->htt_htc_pkt_misclist to free them once this kind of htt_htc
is no longer sitting in CE4 source ring which means CE sending
completion is done already. misclist will free the old/tail of
htt_htc packets if there is > 256 htt_htc packet is pending in list,
but CE4 source ring has 2048 entries, for extreme case, if CE4 sending
is blocking and > 256  htt_htc packets is pending in CE4,
misclist will free the tail htt_htc packet, but later CE4 sending
completion is coming, invalid access to htt_htc packets will happen.
  Enlarge misclist trim threshold > 2048 to ensure that when free
htt_htc packet in misclist, the htt_htc packets has done sending
completion already.

Change-Id: I2d86f68485b1d45a5ea4edb6b952f746700df54f
CRs-Fixed: 2609903
2020-02-28 02:59:54 -08:00
Adwait Nayak
48d23f29a1 qcacmn: CFR: Update RCC specific debug statistics
Move RCC specific debug statistics to Data path
to avoid allocating nbuf for the PPDUs for which
MAC has not sent a Freeze TLV. Instead just update the
debug statistics at an earlier point irrespective of
MAC sending Freeze to PHY, to gather below information:
Status of number of PPDUs being captured by PHY
Status of MAC sending freeze TLV for the PPDUs
Update freeze reason for the number of PPDUs received

Add support to clear debug statistics at user's will.

Change-Id: I8def3ce1f3ecc0b169030704db3fb1fb1c0a20ee
CRs-Fixed: 2609604
2020-02-28 00:20:49 -08:00
Amit Shukla
fc8337d5de qcacmn: Add support for noACK frames
Intercept monitor destination path for NDPA frames,
use it to generate noack frames for tx capture.

Change-Id: Ia54196bd84729a7863954b6deec7e02b52f23556
CRs-Fixed: 2605672
2020-02-28 00:20:34 -08:00
Ananya Gupta
9b146aa11a qcacmn: Iterate over all vdev ids to check if peer exists
Currently when checking for duplicate peer, only the vdev
id on which peer is going to be created is checked and not
on other vdev ids. So correct it by iterating over all
vdev ids.

Change-Id: Ie05ecc125d3285a522021b630fc7244501b6a797
CRs-Fixed: 2629146
2020-02-27 13:16:57 -08:00
Sumedh Baikady
d188789876 qcacmn: Enhancement in Minidump feature
Handle minidump logging using dynamic
configurablity options. Data structures
to be logged in minidump can be configured
using internal INI file.

Change-Id: I99f12b3f98c4a9c0e15c3e5d611019e6b8d0909a
2020-02-26 08:35:46 -08:00
nobelj
d3a6d13d9f qcacmn: Fix to support ack ba status tlv comes twice
Sometimes ack ba status tlv comes twice which cause ppdu desc to be hold
as waiting for some more tlv as mpdu ack ba tlv is not matching with
completion common tlv mpdu count.

Change-Id: Id946ecd53018ee7abe93aa6c5f62e69d41b750e8
2020-02-25 21:59:08 -08:00
Amit Shukla
28432f1195 qcacmn: Fix crash in frag path by using correct API to obtain PDEV
PDEV was being obtained using lmac_id by directly indexing the
pdev_list array. Instead, we need to use dp_get_pdev_for_lmac_id.

Change-Id: I1c4a0f3df5db59390e17666a5f712c5412e22bb1
CRs-Fixed: 2627909
2020-02-25 20:26:22 -08:00
Ruben Columbus
e792f8bab3 qcacmn: adding doppler/SR for he information
Add doppler and spatial reuse in ppdu descriptor to be able to use it on
HE information for tx capture

Change-Id: Id87a692a89d00c64929624c22c2efc27bc873e43
2020-02-25 12:39:44 -08:00
Vivek
10d8aff10e qcacmn: Use right API for retrieving pdev based on id
We are seeing a invalid memory access crash
in the dp_get_pdev_for_mac_id call from
dp_rx_process_invalid_peer, due to invalid mac id passed,
probably due to some stack correction.

We should instead use dp_get_pdev_for_lmac_id from
dp_rx_process_invalid_peer, where for invalid
mac id, we assert.

Change-Id: I0737132b5bbdd2fcbdb714d4643a69184ae3821e
CRs-Fixed: 2618432
2020-02-24 22:02:03 -08:00
Yu Tian
0108c7d032 qcacmn: update REO SSN when TX compl of ADDBA resp
There is possibility that DUT receives non-aggr frames
with non-aggr SN during BA setup during BA session
setup. SSN updates when ADDBA req is processed, should
also update REO SSN one more time when ADDBA resp sends
This will let REO to be able to receive frames in BA
session with new SN.

Change-Id: I4791bcd6f1ede90615c883d31426fcdecd50a631
CRs-Fixed: 2623505
2020-02-24 22:01:46 -08:00
Linux Build Service Account
b5bc05ee3f Merge "qcacmn: Ignore rx hw stats reo command status callback" 2020-02-21 15:10:09 -08:00
Jeevan Kukkalli
e795cc17aa qcacmn: Add NULL check for peer mac
Add NULL check for peer mac before accessing it.

Change-Id: I039aa22d81c0e6a192c816c395cebefa4eaf3b82
CRs-Fixed: 2622011
2020-02-20 12:25:14 -08:00
Himanshu Batra
7e8e1a229c qcacmn: Move _ol_ath_param_t enum out from CDP
Add code to move enum _ol_ath_param_t out from common DP code
and move it into OL layer

Change-Id: I92fa5f52c581a18449ab42da41ff5f6f1a2bc595
Crs-Fixed: 2560866
2020-02-20 08:32:47 -08:00
Aditya Sathish
041409f98f qcacmn: Add 6GHz support for chan/freq/band usage in mesh mode
Currently mesh mode uses channel numbering which is derived
from APIs that don't support 6GHz channels numbering due to the
overloading of 6GHz channels with 2.4GHz and 5GHz.

Add support to obtain the correct channel number (and auxiliary
information like band and frequency) through the new APIs that
support 6GHz.

Change-Id: Ib0b39ebae2a22bd6b2b5d17b9058c3c2100e0d59
CRs-Fixed: 2605229
2020-02-20 08:32:09 -08:00
Manjunathappa Prakash
c4667b8b12 qcacmn: Save Rx TLV offset info so as to recover in FISA
Packets delivered to FISA via exception err path doesnot have TLVs.
FISA handling requires additional TLVs. dp rx core handling
skips TLVs, save TLV length info in nbuf->cb so that TLVs
are recovered back in FISA.

Change-Id: I53fab2e19abcbf82697ea6f53a4ddf3ea0dd0699
CRs-Fixed: 2620844
2020-02-20 06:39:48 -08:00
Sravan Goud
5fd5cf65e2 qcacmn: In case of peer reuse set valid flag
Currently if peer reference is reused valid flag is not set.
In peer delete function if valid flag is not set, function
returns with out decrementing the ref count and also not
releasing the local id. This leads to local id exhaustion if
back to back peer reuse happens which is common in case of back
to back roaming to same AP. As a result connection to AP fails
due to unavailability of local id. In this change set valid flag
if peer reference is reused.

Change-Id: Ibeccbc4d33aac9e4285b48a4b8abdd2276fd7ede
CRs-Fixed: 2624798
2020-02-19 22:18:47 -08:00
nobelj
b621cabe85 qcacmn: Fix ppdu stats for disassoc frame
For Disassoc frame, fw send ppdu stats to host with peer_id
of the previous associated client. peer id is valid and peer
structure is NULL making framectrl as zero for disassoc frame.
with the fix frame ctrl are populated before checking for invalid peer.

Change-Id: I5960685a4c90f00a850f4f1fa2b3d883117fb443
2020-02-19 20:46:01 -08:00
Pavankumar Nandeshwar
0d8578f313 qcacmn: Check the max value for max desc before using
Check the max value for max desc extracted from cfg
before using it for actual allocation of tx descs.

Change-Id: I9bd6c88f136870a42596afbf25328965fce959be
CRs-fixed: 2614329
2020-02-19 08:43:54 -08:00
Linux Build Service Account
16b11006ed Merge "qcacmn: Break up DMA mem alloc for HW desc banks in multi pages" 2020-02-18 18:08:17 -08:00