WIP FPC-III support
[linux/fpc-iii.git] / drivers / net / wireless / ath / ath11k / hif.h
blob6285c52afc443997dfafad625ad01ddf01dc76d7
1 /* SPDX-License-Identifier: BSD-3-Clause-Clear */
2 /*
3 * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
4 */
6 #ifndef _HIF_H_
7 #define _HIF_H_
9 #include "core.h"
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 void (*irq_enable)(struct ath11k_base *sc);
15 void (*irq_disable)(struct ath11k_base *sc);
16 int (*start)(struct ath11k_base *sc);
17 void (*stop)(struct ath11k_base *sc);
18 int (*power_up)(struct ath11k_base *sc);
19 void (*power_down)(struct ath11k_base *sc);
20 int (*suspend)(struct ath11k_base *ab);
21 int (*resume)(struct ath11k_base *ab);
22 int (*map_service_to_pipe)(struct ath11k_base *sc, u16 service_id,
23 u8 *ul_pipe, u8 *dl_pipe);
24 int (*get_user_msi_vector)(struct ath11k_base *ab, char *user_name,
25 int *num_vectors, u32 *user_base_data,
26 u32 *base_vector);
27 void (*get_msi_address)(struct ath11k_base *ab, u32 *msi_addr_lo,
28 u32 *msi_addr_hi);
29 void (*ce_irq_enable)(struct ath11k_base *ab);
30 void (*ce_irq_disable)(struct ath11k_base *ab);
33 static inline void ath11k_hif_ce_irq_enable(struct ath11k_base *ab)
35 if (ab->hif.ops->ce_irq_enable)
36 ab->hif.ops->ce_irq_enable(ab);
39 static inline void ath11k_hif_ce_irq_disable(struct ath11k_base *ab)
41 if (ab->hif.ops->ce_irq_disable)
42 ab->hif.ops->ce_irq_disable(ab);
45 static inline int ath11k_hif_start(struct ath11k_base *sc)
47 return sc->hif.ops->start(sc);
50 static inline void ath11k_hif_stop(struct ath11k_base *sc)
52 sc->hif.ops->stop(sc);
55 static inline void ath11k_hif_irq_enable(struct ath11k_base *sc)
57 sc->hif.ops->irq_enable(sc);
60 static inline void ath11k_hif_irq_disable(struct ath11k_base *sc)
62 sc->hif.ops->irq_disable(sc);
65 static inline int ath11k_hif_power_up(struct ath11k_base *sc)
67 return sc->hif.ops->power_up(sc);
70 static inline void ath11k_hif_power_down(struct ath11k_base *sc)
72 sc->hif.ops->power_down(sc);
75 static inline int ath11k_hif_suspend(struct ath11k_base *ab)
77 if (ab->hif.ops->suspend)
78 return ab->hif.ops->suspend(ab);
80 return 0;
83 static inline int ath11k_hif_resume(struct ath11k_base *ab)
85 if (ab->hif.ops->resume)
86 return ab->hif.ops->resume(ab);
88 return 0;
91 static inline u32 ath11k_hif_read32(struct ath11k_base *sc, u32 address)
93 return sc->hif.ops->read32(sc, address);
96 static inline void ath11k_hif_write32(struct ath11k_base *sc, u32 address, u32 data)
98 sc->hif.ops->write32(sc, address, data);
101 static inline int ath11k_hif_map_service_to_pipe(struct ath11k_base *sc, u16 service_id,
102 u8 *ul_pipe, u8 *dl_pipe)
104 return sc->hif.ops->map_service_to_pipe(sc, service_id, ul_pipe, dl_pipe);
107 static inline int ath11k_get_user_msi_vector(struct ath11k_base *ab, char *user_name,
108 int *num_vectors, u32 *user_base_data,
109 u32 *base_vector)
111 if (!ab->hif.ops->get_user_msi_vector)
112 return -EOPNOTSUPP;
114 return ab->hif.ops->get_user_msi_vector(ab, user_name, num_vectors,
115 user_base_data,
116 base_vector);
119 static inline void ath11k_get_msi_address(struct ath11k_base *ab, u32 *msi_addr_lo,
120 u32 *msi_addr_hi)
122 if (!ab->hif.ops->get_msi_address)
123 return;
125 ab->hif.ops->get_msi_address(ab, msi_addr_lo, msi_addr_hi);
127 #endif /* _HIF_H_ */