Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/dev/athk/ath11k/hif.h
48375 views
1
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
2
/*
3
* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
4
*/
5
6
#ifndef _HIF_H_
7
#define _HIF_H_
8
9
#include "core.h"
10
11
struct ath11k_hif_ops {
12
u32 (*read32)(struct ath11k_base *sc, u32 address);
13
void (*write32)(struct ath11k_base *sc, u32 address, u32 data);
14
int (*read)(struct ath11k_base *ab, void *buf, u32 start, u32 end);
15
void (*irq_enable)(struct ath11k_base *sc);
16
void (*irq_disable)(struct ath11k_base *sc);
17
int (*start)(struct ath11k_base *sc);
18
void (*stop)(struct ath11k_base *sc);
19
int (*power_up)(struct ath11k_base *sc);
20
void (*power_down)(struct ath11k_base *sc);
21
int (*suspend)(struct ath11k_base *ab);
22
int (*resume)(struct ath11k_base *ab);
23
int (*map_service_to_pipe)(struct ath11k_base *sc, u16 service_id,
24
u8 *ul_pipe, u8 *dl_pipe);
25
int (*get_user_msi_vector)(struct ath11k_base *ab, char *user_name,
26
int *num_vectors, u32 *user_base_data,
27
u32 *base_vector);
28
void (*get_msi_address)(struct ath11k_base *ab, u32 *msi_addr_lo,
29
u32 *msi_addr_hi);
30
void (*ce_irq_enable)(struct ath11k_base *ab);
31
void (*ce_irq_disable)(struct ath11k_base *ab);
32
void (*get_ce_msi_idx)(struct ath11k_base *ab, u32 ce_id, u32 *msi_idx);
33
};
34
35
static inline void ath11k_hif_ce_irq_enable(struct ath11k_base *ab)
36
{
37
if (ab->hif.ops->ce_irq_enable)
38
ab->hif.ops->ce_irq_enable(ab);
39
}
40
41
static inline void ath11k_hif_ce_irq_disable(struct ath11k_base *ab)
42
{
43
if (ab->hif.ops->ce_irq_disable)
44
ab->hif.ops->ce_irq_disable(ab);
45
}
46
47
static inline int ath11k_hif_start(struct ath11k_base *sc)
48
{
49
return sc->hif.ops->start(sc);
50
}
51
52
static inline void ath11k_hif_stop(struct ath11k_base *sc)
53
{
54
sc->hif.ops->stop(sc);
55
}
56
57
static inline void ath11k_hif_irq_enable(struct ath11k_base *sc)
58
{
59
sc->hif.ops->irq_enable(sc);
60
}
61
62
static inline void ath11k_hif_irq_disable(struct ath11k_base *sc)
63
{
64
sc->hif.ops->irq_disable(sc);
65
}
66
67
static inline int ath11k_hif_power_up(struct ath11k_base *sc)
68
{
69
return sc->hif.ops->power_up(sc);
70
}
71
72
static inline void ath11k_hif_power_down(struct ath11k_base *sc)
73
{
74
sc->hif.ops->power_down(sc);
75
}
76
77
static inline int ath11k_hif_suspend(struct ath11k_base *ab)
78
{
79
if (ab->hif.ops->suspend)
80
return ab->hif.ops->suspend(ab);
81
82
return 0;
83
}
84
85
static inline int ath11k_hif_resume(struct ath11k_base *ab)
86
{
87
if (ab->hif.ops->resume)
88
return ab->hif.ops->resume(ab);
89
90
return 0;
91
}
92
93
static inline u32 ath11k_hif_read32(struct ath11k_base *sc, u32 address)
94
{
95
return sc->hif.ops->read32(sc, address);
96
}
97
98
static inline void ath11k_hif_write32(struct ath11k_base *sc, u32 address, u32 data)
99
{
100
sc->hif.ops->write32(sc, address, data);
101
}
102
103
static inline int ath11k_hif_read(struct ath11k_base *ab, void *buf,
104
u32 start, u32 end)
105
{
106
if (!ab->hif.ops->read)
107
return -EOPNOTSUPP;
108
109
return ab->hif.ops->read(ab, buf, start, end);
110
}
111
112
static inline int ath11k_hif_map_service_to_pipe(struct ath11k_base *sc, u16 service_id,
113
u8 *ul_pipe, u8 *dl_pipe)
114
{
115
return sc->hif.ops->map_service_to_pipe(sc, service_id, ul_pipe, dl_pipe);
116
}
117
118
static inline int ath11k_get_user_msi_vector(struct ath11k_base *ab, char *user_name,
119
int *num_vectors, u32 *user_base_data,
120
u32 *base_vector)
121
{
122
if (!ab->hif.ops->get_user_msi_vector)
123
return -EOPNOTSUPP;
124
125
return ab->hif.ops->get_user_msi_vector(ab, user_name, num_vectors,
126
user_base_data,
127
base_vector);
128
}
129
130
static inline void ath11k_get_msi_address(struct ath11k_base *ab, u32 *msi_addr_lo,
131
u32 *msi_addr_hi)
132
{
133
if (!ab->hif.ops->get_msi_address)
134
return;
135
136
ab->hif.ops->get_msi_address(ab, msi_addr_lo, msi_addr_hi);
137
}
138
139
static inline void ath11k_get_ce_msi_idx(struct ath11k_base *ab, u32 ce_id,
140
u32 *msi_data_idx)
141
{
142
if (ab->hif.ops->get_ce_msi_idx)
143
ab->hif.ops->get_ce_msi_idx(ab, ce_id, msi_data_idx);
144
else
145
*msi_data_idx = ce_id;
146
}
147
148
#endif /* _HIF_H_ */
149
150