hc
2024-08-16 62c46c9150c4afde7e5b25436263fddf79d66f0b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
/*
 * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
 */
 
#ifndef ATH11K_DBRING_H
#define ATH11K_DBRING_H
 
#include <linux/types.h>
#include <linux/idr.h>
#include <linux/spinlock.h>
#include "dp.h"
 
struct ath11k_dbring_element {
   dma_addr_t paddr;
   u8 payload[0];
};
 
struct ath11k_dbring_data {
   void *data;
   u32 data_sz;
   struct wmi_dma_buf_release_meta_data meta;
};
 
struct ath11k_dbring_buf_release_event {
   struct ath11k_wmi_dma_buf_release_fixed_param fixed;
   struct wmi_dma_buf_release_entry *buf_entry;
   struct wmi_dma_buf_release_meta_data *meta_data;
   u32 num_buf_entry;
   u32 num_meta;
};
 
struct ath11k_dbring_cap {
   u32 pdev_id;
   enum wmi_direct_buffer_module id;
   u32 min_elem;
   u32 min_buf_sz;
   u32 min_buf_align;
};
 
struct ath11k_dbring {
   struct dp_srng refill_srng;
   struct idr bufs_idr;
   /* Protects bufs_idr */
   spinlock_t idr_lock;
   dma_addr_t tp_addr;
   dma_addr_t hp_addr;
   int bufs_max;
   u32 pdev_id;
   u32 buf_sz;
   u32 buf_align;
   u32 num_resp_per_event;
   u32 event_timeout_ms;
   int (*handler)(struct ath11k *, struct ath11k_dbring_data *);
};
 
int ath11k_dbring_set_cfg(struct ath11k *ar,
             struct ath11k_dbring *ring,
             u32 num_resp_per_event,
             u32 event_timeout_ms,
             int (*handler)(struct ath11k *,
                    struct ath11k_dbring_data *));
int ath11k_dbring_wmi_cfg_setup(struct ath11k *ar,
               struct ath11k_dbring *ring,
               enum wmi_direct_buffer_module id);
int ath11k_dbring_buf_setup(struct ath11k *ar,
               struct ath11k_dbring *ring,
               struct ath11k_dbring_cap *db_cap);
int ath11k_dbring_srng_setup(struct ath11k *ar, struct ath11k_dbring *ring,
                int ring_num, int num_entries);
int ath11k_dbring_buffer_release_event(struct ath11k_base *ab,
                      struct ath11k_dbring_buf_release_event *ev);
int ath11k_dbring_get_cap(struct ath11k_base *ab,
             u8 pdev_idx,
             enum wmi_direct_buffer_module id,
             struct ath11k_dbring_cap *db_cap);
void ath11k_dbring_srng_cleanup(struct ath11k *ar, struct ath11k_dbring *ring);
void ath11k_dbring_buf_cleanup(struct ath11k *ar, struct ath11k_dbring *ring);
#endif /* ATH11K_DBRING_H */