Skip to content

Commit 9f1eebf

Browse files
Karthikeyan Periyasamykvalo
authored andcommitted
wifi: ath12k: refactor DP Rxdma ring structure
Currently data path Rxdma ring structure store the IDR buffer and lock. These IDR handling is needed only for SW cookie conversion and not needed for HW cookie conversion. REO Rxdma ring use the HW cookie conversion and monitor Rxdma ring use the SW cookie conversion. Since idr not needed for REO Rxdma ring, remove the IDR data entity from the data path Rxdma ring structure. Introduce the new data path ring structure for monitor rxmda rings since it need IDR data entity. Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.1.1-00125-QCAHKSWPL_SILICONZ-1 Signed-off-by: Karthikeyan Periyasamy <[email protected]> Acked-by: Jeff Johnson <[email protected]> Signed-off-by: Kalle Valo <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 4d922ce commit 9f1eebf

File tree

4 files changed

+46
-39
lines changed

4 files changed

+46
-39
lines changed

drivers/net/wireless/ath/ath12k/dp.h

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
22
/*
33
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
4-
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
4+
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
55
*/
66

77
#ifndef ATH12K_DP_H
@@ -31,14 +31,19 @@ struct dp_srng {
3131
u32 ring_id;
3232
};
3333

34-
struct dp_rxdma_ring {
34+
struct dp_rxdma_mon_ring {
3535
struct dp_srng refill_buf_ring;
3636
struct idr bufs_idr;
3737
/* Protects bufs_idr */
3838
spinlock_t idr_lock;
3939
int bufs_max;
4040
};
4141

42+
struct dp_rxdma_ring {
43+
struct dp_srng refill_buf_ring;
44+
int bufs_max;
45+
};
46+
4247
#define ATH12K_TX_COMPL_NEXT(x) (((x) + 1) % DP_TX_COMP_RING_SIZE)
4348

4449
struct dp_tx_ring {
@@ -353,8 +358,8 @@ struct ath12k_dp {
353358
struct dp_rxdma_ring rx_refill_buf_ring;
354359
struct dp_srng rx_mac_buf_ring[MAX_RXDMA_PER_PDEV];
355360
struct dp_srng rxdma_err_dst_ring[MAX_RXDMA_PER_PDEV];
356-
struct dp_rxdma_ring rxdma_mon_buf_ring;
357-
struct dp_rxdma_ring tx_mon_buf_ring;
361+
struct dp_rxdma_mon_ring rxdma_mon_buf_ring;
362+
struct dp_rxdma_mon_ring tx_mon_buf_ring;
358363
struct ath12k_reo_q_addr_lut reoq_lut;
359364
};
360365

drivers/net/wireless/ath/ath12k/dp_mon.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: BSD-3-Clause-Clear
22
/*
33
* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
4-
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
4+
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
55
*/
66

77
#include "dp_mon.h"
@@ -797,7 +797,7 @@ ath12k_dp_mon_rx_parse_status_tlv(struct ath12k_base *ab,
797797
/* TODO: add msdu start parsing logic */
798798
break;
799799
case HAL_MON_BUF_ADDR: {
800-
struct dp_rxdma_ring *buf_ring = &ab->dp.rxdma_mon_buf_ring;
800+
struct dp_rxdma_mon_ring *buf_ring = &ab->dp.rxdma_mon_buf_ring;
801801
struct dp_mon_packet_info *packet_info =
802802
(struct dp_mon_packet_info *)tlv_data;
803803
int buf_id = u32_get_bits(packet_info->cookie,
@@ -1259,7 +1259,7 @@ ath12k_dp_mon_rx_parse_mon_status(struct ath12k *ar,
12591259
}
12601260

12611261
int ath12k_dp_mon_buf_replenish(struct ath12k_base *ab,
1262-
struct dp_rxdma_ring *buf_ring,
1262+
struct dp_rxdma_mon_ring *buf_ring,
12631263
int req_entries)
12641264
{
12651265
struct hal_mon_buf_ring *mon_buf;
@@ -1902,7 +1902,7 @@ ath12k_dp_mon_tx_parse_status_tlv(struct ath12k_base *ab,
19021902
}
19031903

19041904
case HAL_MON_BUF_ADDR: {
1905-
struct dp_rxdma_ring *buf_ring = &ab->dp.tx_mon_buf_ring;
1905+
struct dp_rxdma_mon_ring *buf_ring = &ab->dp.tx_mon_buf_ring;
19061906
struct dp_mon_packet_info *packet_info =
19071907
(struct dp_mon_packet_info *)tlv_data;
19081908
int buf_id = u32_get_bits(packet_info->cookie,
@@ -2067,7 +2067,7 @@ int ath12k_dp_mon_srng_process(struct ath12k *ar, int mac_id, int *budget,
20672067
struct ath12k_skb_rxcb *rxcb;
20682068
struct dp_srng *mon_dst_ring;
20692069
struct hal_srng *srng;
2070-
struct dp_rxdma_ring *buf_ring;
2070+
struct dp_rxdma_mon_ring *buf_ring;
20712071
u64 cookie;
20722072
u32 ppdu_id;
20732073
int num_buffs_reaped = 0, srng_id, buf_id;
@@ -2480,7 +2480,7 @@ int ath12k_dp_mon_rx_process_stats(struct ath12k *ar, int mac_id,
24802480
struct ath12k_skb_rxcb *rxcb;
24812481
struct dp_srng *mon_dst_ring;
24822482
struct hal_srng *srng;
2483-
struct dp_rxdma_ring *buf_ring;
2483+
struct dp_rxdma_mon_ring *buf_ring;
24842484
struct ath12k_sta *arsta = NULL;
24852485
struct ath12k_peer *peer;
24862486
u64 cookie;

drivers/net/wireless/ath/ath12k/dp_mon.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
22
/*
33
* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
4-
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
4+
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
55
*/
66

77
#ifndef ATH12K_DP_MON_H
@@ -80,7 +80,7 @@ ath12k_dp_mon_rx_parse_mon_status(struct ath12k *ar,
8080
int mac_id, struct sk_buff *skb,
8181
struct napi_struct *napi);
8282
int ath12k_dp_mon_buf_replenish(struct ath12k_base *ab,
83-
struct dp_rxdma_ring *buf_ring,
83+
struct dp_rxdma_mon_ring *buf_ring,
8484
int req_entries);
8585
int ath12k_dp_mon_srng_process(struct ath12k *ar, int mac_id,
8686
int *budget, enum dp_monitor_mode monitor_mode,

drivers/net/wireless/ath/ath12k/dp_rx.c

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -364,8 +364,8 @@ int ath12k_dp_rx_bufs_replenish(struct ath12k_base *ab,
364364
return req_entries - num_remain;
365365
}
366366

367-
static int ath12k_dp_rxdma_buf_ring_free(struct ath12k_base *ab,
368-
struct dp_rxdma_ring *rx_ring)
367+
static int ath12k_dp_rxdma_mon_buf_ring_free(struct ath12k_base *ab,
368+
struct dp_rxdma_mon_ring *rx_ring)
369369
{
370370
struct sk_buff *skb;
371371
int buf_id;
@@ -390,63 +390,68 @@ static int ath12k_dp_rxdma_buf_ring_free(struct ath12k_base *ab,
390390
static int ath12k_dp_rxdma_buf_free(struct ath12k_base *ab)
391391
{
392392
struct ath12k_dp *dp = &ab->dp;
393-
struct dp_rxdma_ring *rx_ring = &dp->rx_refill_buf_ring;
394393

395-
ath12k_dp_rxdma_buf_ring_free(ab, rx_ring);
394+
ath12k_dp_rxdma_mon_buf_ring_free(ab, &dp->rxdma_mon_buf_ring);
395+
396+
ath12k_dp_rxdma_mon_buf_ring_free(ab, &dp->tx_mon_buf_ring);
397+
398+
return 0;
399+
}
400+
401+
static int ath12k_dp_rxdma_mon_ring_buf_setup(struct ath12k_base *ab,
402+
struct dp_rxdma_mon_ring *rx_ring,
403+
u32 ringtype)
404+
{
405+
int num_entries;
396406

397-
rx_ring = &dp->rxdma_mon_buf_ring;
398-
ath12k_dp_rxdma_buf_ring_free(ab, rx_ring);
407+
num_entries = rx_ring->refill_buf_ring.size /
408+
ath12k_hal_srng_get_entrysize(ab, ringtype);
399409

400-
rx_ring = &dp->tx_mon_buf_ring;
401-
ath12k_dp_rxdma_buf_ring_free(ab, rx_ring);
410+
rx_ring->bufs_max = num_entries;
411+
ath12k_dp_mon_buf_replenish(ab, rx_ring, num_entries);
402412

403413
return 0;
404414
}
405415

406416
static int ath12k_dp_rxdma_ring_buf_setup(struct ath12k_base *ab,
407-
struct dp_rxdma_ring *rx_ring,
408-
u32 ringtype)
417+
struct dp_rxdma_ring *rx_ring)
409418
{
410419
int num_entries;
411420

412421
num_entries = rx_ring->refill_buf_ring.size /
413-
ath12k_hal_srng_get_entrysize(ab, ringtype);
422+
ath12k_hal_srng_get_entrysize(ab, HAL_RXDMA_BUF);
414423

415424
rx_ring->bufs_max = num_entries;
416-
if ((ringtype == HAL_RXDMA_MONITOR_BUF) || (ringtype == HAL_TX_MONITOR_BUF))
417-
ath12k_dp_mon_buf_replenish(ab, rx_ring, num_entries);
418-
else
419-
ath12k_dp_rx_bufs_replenish(ab, rx_ring, num_entries);
425+
ath12k_dp_rx_bufs_replenish(ab, rx_ring, num_entries);
426+
420427
return 0;
421428
}
422429

423430
static int ath12k_dp_rxdma_buf_setup(struct ath12k_base *ab)
424431
{
425432
struct ath12k_dp *dp = &ab->dp;
426-
struct dp_rxdma_ring *rx_ring = &dp->rx_refill_buf_ring;
427433
int ret;
428434

429-
ret = ath12k_dp_rxdma_ring_buf_setup(ab, rx_ring,
430-
HAL_RXDMA_BUF);
435+
ret = ath12k_dp_rxdma_ring_buf_setup(ab, &dp->rx_refill_buf_ring);
431436
if (ret) {
432437
ath12k_warn(ab,
433438
"failed to setup HAL_RXDMA_BUF\n");
434439
return ret;
435440
}
436441

437442
if (ab->hw_params->rxdma1_enable) {
438-
rx_ring = &dp->rxdma_mon_buf_ring;
439-
ret = ath12k_dp_rxdma_ring_buf_setup(ab, rx_ring,
440-
HAL_RXDMA_MONITOR_BUF);
443+
ret = ath12k_dp_rxdma_mon_ring_buf_setup(ab,
444+
&dp->rxdma_mon_buf_ring,
445+
HAL_RXDMA_MONITOR_BUF);
441446
if (ret) {
442447
ath12k_warn(ab,
443448
"failed to setup HAL_RXDMA_MONITOR_BUF\n");
444449
return ret;
445450
}
446451

447-
rx_ring = &dp->tx_mon_buf_ring;
448-
ret = ath12k_dp_rxdma_ring_buf_setup(ab, rx_ring,
449-
HAL_TX_MONITOR_BUF);
452+
ret = ath12k_dp_rxdma_mon_ring_buf_setup(ab,
453+
&dp->tx_mon_buf_ring,
454+
HAL_TX_MONITOR_BUF);
450455
if (ret) {
451456
ath12k_warn(ab,
452457
"failed to setup HAL_TX_MONITOR_BUF\n");
@@ -4060,9 +4065,6 @@ int ath12k_dp_rx_alloc(struct ath12k_base *ab)
40604065
struct ath12k_dp *dp = &ab->dp;
40614066
int i, ret;
40624067

4063-
idr_init(&dp->rx_refill_buf_ring.bufs_idr);
4064-
spin_lock_init(&dp->rx_refill_buf_ring.idr_lock);
4065-
40664068
idr_init(&dp->rxdma_mon_buf_ring.bufs_idr);
40674069
spin_lock_init(&dp->rxdma_mon_buf_ring.idr_lock);
40684070

0 commit comments

Comments
 (0)