1*5c1def83SBjoern A. Zeeb /* SPDX-License-Identifier: BSD-3-Clause-Clear */
2*5c1def83SBjoern A. Zeeb /*
3*5c1def83SBjoern A. Zeeb * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
4*5c1def83SBjoern A. Zeeb * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
5*5c1def83SBjoern A. Zeeb */
6*5c1def83SBjoern A. Zeeb
7*5c1def83SBjoern A. Zeeb #ifndef ATH12K_HIF_H
8*5c1def83SBjoern A. Zeeb #define ATH12K_HIF_H
9*5c1def83SBjoern A. Zeeb
10*5c1def83SBjoern A. Zeeb #include "core.h"
11*5c1def83SBjoern A. Zeeb
12*5c1def83SBjoern A. Zeeb struct ath12k_hif_ops {
13*5c1def83SBjoern A. Zeeb u32 (*read32)(struct ath12k_base *sc, u32 address);
14*5c1def83SBjoern A. Zeeb void (*write32)(struct ath12k_base *sc, u32 address, u32 data);
15*5c1def83SBjoern A. Zeeb void (*irq_enable)(struct ath12k_base *sc);
16*5c1def83SBjoern A. Zeeb void (*irq_disable)(struct ath12k_base *sc);
17*5c1def83SBjoern A. Zeeb int (*start)(struct ath12k_base *sc);
18*5c1def83SBjoern A. Zeeb void (*stop)(struct ath12k_base *sc);
19*5c1def83SBjoern A. Zeeb int (*power_up)(struct ath12k_base *sc);
20*5c1def83SBjoern A. Zeeb void (*power_down)(struct ath12k_base *sc);
21*5c1def83SBjoern A. Zeeb int (*suspend)(struct ath12k_base *ab);
22*5c1def83SBjoern A. Zeeb int (*resume)(struct ath12k_base *ab);
23*5c1def83SBjoern A. Zeeb int (*map_service_to_pipe)(struct ath12k_base *sc, u16 service_id,
24*5c1def83SBjoern A. Zeeb u8 *ul_pipe, u8 *dl_pipe);
25*5c1def83SBjoern A. Zeeb int (*get_user_msi_vector)(struct ath12k_base *ab, char *user_name,
26*5c1def83SBjoern A. Zeeb int *num_vectors, u32 *user_base_data,
27*5c1def83SBjoern A. Zeeb u32 *base_vector);
28*5c1def83SBjoern A. Zeeb void (*get_msi_address)(struct ath12k_base *ab, u32 *msi_addr_lo,
29*5c1def83SBjoern A. Zeeb u32 *msi_addr_hi);
30*5c1def83SBjoern A. Zeeb void (*ce_irq_enable)(struct ath12k_base *ab);
31*5c1def83SBjoern A. Zeeb void (*ce_irq_disable)(struct ath12k_base *ab);
32*5c1def83SBjoern A. Zeeb void (*get_ce_msi_idx)(struct ath12k_base *ab, u32 ce_id, u32 *msi_idx);
33*5c1def83SBjoern A. Zeeb };
34*5c1def83SBjoern A. Zeeb
ath12k_hif_map_service_to_pipe(struct ath12k_base * ab,u16 service_id,u8 * ul_pipe,u8 * dl_pipe)35*5c1def83SBjoern A. Zeeb static inline int ath12k_hif_map_service_to_pipe(struct ath12k_base *ab, u16 service_id,
36*5c1def83SBjoern A. Zeeb u8 *ul_pipe, u8 *dl_pipe)
37*5c1def83SBjoern A. Zeeb {
38*5c1def83SBjoern A. Zeeb return ab->hif.ops->map_service_to_pipe(ab, service_id,
39*5c1def83SBjoern A. Zeeb ul_pipe, dl_pipe);
40*5c1def83SBjoern A. Zeeb }
41*5c1def83SBjoern A. Zeeb
ath12k_hif_get_user_msi_vector(struct ath12k_base * ab,char * user_name,int * num_vectors,u32 * user_base_data,u32 * base_vector)42*5c1def83SBjoern A. Zeeb static inline int ath12k_hif_get_user_msi_vector(struct ath12k_base *ab,
43*5c1def83SBjoern A. Zeeb char *user_name,
44*5c1def83SBjoern A. Zeeb int *num_vectors,
45*5c1def83SBjoern A. Zeeb u32 *user_base_data,
46*5c1def83SBjoern A. Zeeb u32 *base_vector)
47*5c1def83SBjoern A. Zeeb {
48*5c1def83SBjoern A. Zeeb if (!ab->hif.ops->get_user_msi_vector)
49*5c1def83SBjoern A. Zeeb return -EOPNOTSUPP;
50*5c1def83SBjoern A. Zeeb
51*5c1def83SBjoern A. Zeeb return ab->hif.ops->get_user_msi_vector(ab, user_name, num_vectors,
52*5c1def83SBjoern A. Zeeb user_base_data,
53*5c1def83SBjoern A. Zeeb base_vector);
54*5c1def83SBjoern A. Zeeb }
55*5c1def83SBjoern A. Zeeb
ath12k_hif_get_msi_address(struct ath12k_base * ab,u32 * msi_addr_lo,u32 * msi_addr_hi)56*5c1def83SBjoern A. Zeeb static inline void ath12k_hif_get_msi_address(struct ath12k_base *ab,
57*5c1def83SBjoern A. Zeeb u32 *msi_addr_lo,
58*5c1def83SBjoern A. Zeeb u32 *msi_addr_hi)
59*5c1def83SBjoern A. Zeeb {
60*5c1def83SBjoern A. Zeeb if (!ab->hif.ops->get_msi_address)
61*5c1def83SBjoern A. Zeeb return;
62*5c1def83SBjoern A. Zeeb
63*5c1def83SBjoern A. Zeeb ab->hif.ops->get_msi_address(ab, msi_addr_lo, msi_addr_hi);
64*5c1def83SBjoern A. Zeeb }
65*5c1def83SBjoern A. Zeeb
ath12k_hif_get_ce_msi_idx(struct ath12k_base * ab,u32 ce_id,u32 * msi_data_idx)66*5c1def83SBjoern A. Zeeb static inline void ath12k_hif_get_ce_msi_idx(struct ath12k_base *ab, u32 ce_id,
67*5c1def83SBjoern A. Zeeb u32 *msi_data_idx)
68*5c1def83SBjoern A. Zeeb {
69*5c1def83SBjoern A. Zeeb if (ab->hif.ops->get_ce_msi_idx)
70*5c1def83SBjoern A. Zeeb ab->hif.ops->get_ce_msi_idx(ab, ce_id, msi_data_idx);
71*5c1def83SBjoern A. Zeeb else
72*5c1def83SBjoern A. Zeeb *msi_data_idx = ce_id;
73*5c1def83SBjoern A. Zeeb }
74*5c1def83SBjoern A. Zeeb
ath12k_hif_ce_irq_enable(struct ath12k_base * ab)75*5c1def83SBjoern A. Zeeb static inline void ath12k_hif_ce_irq_enable(struct ath12k_base *ab)
76*5c1def83SBjoern A. Zeeb {
77*5c1def83SBjoern A. Zeeb if (ab->hif.ops->ce_irq_enable)
78*5c1def83SBjoern A. Zeeb ab->hif.ops->ce_irq_enable(ab);
79*5c1def83SBjoern A. Zeeb }
80*5c1def83SBjoern A. Zeeb
ath12k_hif_ce_irq_disable(struct ath12k_base * ab)81*5c1def83SBjoern A. Zeeb static inline void ath12k_hif_ce_irq_disable(struct ath12k_base *ab)
82*5c1def83SBjoern A. Zeeb {
83*5c1def83SBjoern A. Zeeb if (ab->hif.ops->ce_irq_disable)
84*5c1def83SBjoern A. Zeeb ab->hif.ops->ce_irq_disable(ab);
85*5c1def83SBjoern A. Zeeb }
86*5c1def83SBjoern A. Zeeb
ath12k_hif_irq_enable(struct ath12k_base * ab)87*5c1def83SBjoern A. Zeeb static inline void ath12k_hif_irq_enable(struct ath12k_base *ab)
88*5c1def83SBjoern A. Zeeb {
89*5c1def83SBjoern A. Zeeb ab->hif.ops->irq_enable(ab);
90*5c1def83SBjoern A. Zeeb }
91*5c1def83SBjoern A. Zeeb
ath12k_hif_irq_disable(struct ath12k_base * ab)92*5c1def83SBjoern A. Zeeb static inline void ath12k_hif_irq_disable(struct ath12k_base *ab)
93*5c1def83SBjoern A. Zeeb {
94*5c1def83SBjoern A. Zeeb ab->hif.ops->irq_disable(ab);
95*5c1def83SBjoern A. Zeeb }
96*5c1def83SBjoern A. Zeeb
ath12k_hif_suspend(struct ath12k_base * ab)97*5c1def83SBjoern A. Zeeb static inline int ath12k_hif_suspend(struct ath12k_base *ab)
98*5c1def83SBjoern A. Zeeb {
99*5c1def83SBjoern A. Zeeb if (ab->hif.ops->suspend)
100*5c1def83SBjoern A. Zeeb return ab->hif.ops->suspend(ab);
101*5c1def83SBjoern A. Zeeb
102*5c1def83SBjoern A. Zeeb return 0;
103*5c1def83SBjoern A. Zeeb }
104*5c1def83SBjoern A. Zeeb
ath12k_hif_resume(struct ath12k_base * ab)105*5c1def83SBjoern A. Zeeb static inline int ath12k_hif_resume(struct ath12k_base *ab)
106*5c1def83SBjoern A. Zeeb {
107*5c1def83SBjoern A. Zeeb if (ab->hif.ops->resume)
108*5c1def83SBjoern A. Zeeb return ab->hif.ops->resume(ab);
109*5c1def83SBjoern A. Zeeb
110*5c1def83SBjoern A. Zeeb return 0;
111*5c1def83SBjoern A. Zeeb }
112*5c1def83SBjoern A. Zeeb
ath12k_hif_start(struct ath12k_base * ab)113*5c1def83SBjoern A. Zeeb static inline int ath12k_hif_start(struct ath12k_base *ab)
114*5c1def83SBjoern A. Zeeb {
115*5c1def83SBjoern A. Zeeb return ab->hif.ops->start(ab);
116*5c1def83SBjoern A. Zeeb }
117*5c1def83SBjoern A. Zeeb
ath12k_hif_stop(struct ath12k_base * ab)118*5c1def83SBjoern A. Zeeb static inline void ath12k_hif_stop(struct ath12k_base *ab)
119*5c1def83SBjoern A. Zeeb {
120*5c1def83SBjoern A. Zeeb ab->hif.ops->stop(ab);
121*5c1def83SBjoern A. Zeeb }
122*5c1def83SBjoern A. Zeeb
ath12k_hif_read32(struct ath12k_base * ab,u32 address)123*5c1def83SBjoern A. Zeeb static inline u32 ath12k_hif_read32(struct ath12k_base *ab, u32 address)
124*5c1def83SBjoern A. Zeeb {
125*5c1def83SBjoern A. Zeeb return ab->hif.ops->read32(ab, address);
126*5c1def83SBjoern A. Zeeb }
127*5c1def83SBjoern A. Zeeb
ath12k_hif_write32(struct ath12k_base * ab,u32 address,u32 data)128*5c1def83SBjoern A. Zeeb static inline void ath12k_hif_write32(struct ath12k_base *ab, u32 address,
129*5c1def83SBjoern A. Zeeb u32 data)
130*5c1def83SBjoern A. Zeeb {
131*5c1def83SBjoern A. Zeeb ab->hif.ops->write32(ab, address, data);
132*5c1def83SBjoern A. Zeeb }
133*5c1def83SBjoern A. Zeeb
ath12k_hif_power_up(struct ath12k_base * ab)134*5c1def83SBjoern A. Zeeb static inline int ath12k_hif_power_up(struct ath12k_base *ab)
135*5c1def83SBjoern A. Zeeb {
136*5c1def83SBjoern A. Zeeb return ab->hif.ops->power_up(ab);
137*5c1def83SBjoern A. Zeeb }
138*5c1def83SBjoern A. Zeeb
ath12k_hif_power_down(struct ath12k_base * ab)139*5c1def83SBjoern A. Zeeb static inline void ath12k_hif_power_down(struct ath12k_base *ab)
140*5c1def83SBjoern A. Zeeb {
141*5c1def83SBjoern A. Zeeb ab->hif.ops->power_down(ab);
142*5c1def83SBjoern A. Zeeb }
143*5c1def83SBjoern A. Zeeb
144*5c1def83SBjoern A. Zeeb #endif /* ATH12K_HIF_H */
145