Loading...
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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | /* SPDX-License-Identifier: BSD-3-Clause-Clear */ /* * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved. */ #ifndef _HIF_H_ #define _HIF_H_ #include "core.h" struct ath11k_hif_ops { u32 (*read32)(struct ath11k_base *sc, u32 address); void (*write32)(struct ath11k_base *sc, u32 address, u32 data); int (*read)(struct ath11k_base *ab, void *buf, u32 start, u32 end); void (*irq_enable)(struct ath11k_base *sc); void (*irq_disable)(struct ath11k_base *sc); int (*start)(struct ath11k_base *sc); void (*stop)(struct ath11k_base *sc); int (*power_up)(struct ath11k_base *sc); void (*power_down)(struct ath11k_base *sc); int (*suspend)(struct ath11k_base *ab); int (*resume)(struct ath11k_base *ab); int (*map_service_to_pipe)(struct ath11k_base *sc, u16 service_id, u8 *ul_pipe, u8 *dl_pipe); int (*get_user_msi_vector)(struct ath11k_base *ab, char *user_name, int *num_vectors, u32 *user_base_data, u32 *base_vector); void (*get_msi_address)(struct ath11k_base *ab, u32 *msi_addr_lo, u32 *msi_addr_hi); void (*ce_irq_enable)(struct ath11k_base *ab); void (*ce_irq_disable)(struct ath11k_base *ab); void (*get_ce_msi_idx)(struct ath11k_base *ab, u32 ce_id, u32 *msi_idx); }; static inline void ath11k_hif_ce_irq_enable(struct ath11k_base *ab) { if (ab->hif.ops->ce_irq_enable) ab->hif.ops->ce_irq_enable(ab); } static inline void ath11k_hif_ce_irq_disable(struct ath11k_base *ab) { if (ab->hif.ops->ce_irq_disable) ab->hif.ops->ce_irq_disable(ab); } static inline int ath11k_hif_start(struct ath11k_base *sc) { return sc->hif.ops->start(sc); } static inline void ath11k_hif_stop(struct ath11k_base *sc) { sc->hif.ops->stop(sc); } static inline void ath11k_hif_irq_enable(struct ath11k_base *sc) { sc->hif.ops->irq_enable(sc); } static inline void ath11k_hif_irq_disable(struct ath11k_base *sc) { sc->hif.ops->irq_disable(sc); } static inline int ath11k_hif_power_up(struct ath11k_base *sc) { return sc->hif.ops->power_up(sc); } static inline void ath11k_hif_power_down(struct ath11k_base *sc) { sc->hif.ops->power_down(sc); } static inline int ath11k_hif_suspend(struct ath11k_base *ab) { if (ab->hif.ops->suspend) return ab->hif.ops->suspend(ab); return 0; } static inline int ath11k_hif_resume(struct ath11k_base *ab) { if (ab->hif.ops->resume) return ab->hif.ops->resume(ab); return 0; } static inline u32 ath11k_hif_read32(struct ath11k_base *sc, u32 address) { return sc->hif.ops->read32(sc, address); } static inline void ath11k_hif_write32(struct ath11k_base *sc, u32 address, u32 data) { sc->hif.ops->write32(sc, address, data); } static inline int ath11k_hif_read(struct ath11k_base *ab, void *buf, u32 start, u32 end) { if (!ab->hif.ops->read) return -EOPNOTSUPP; return ab->hif.ops->read(ab, buf, start, end); } static inline int ath11k_hif_map_service_to_pipe(struct ath11k_base *sc, u16 service_id, u8 *ul_pipe, u8 *dl_pipe) { return sc->hif.ops->map_service_to_pipe(sc, service_id, ul_pipe, dl_pipe); } static inline int ath11k_get_user_msi_vector(struct ath11k_base *ab, char *user_name, int *num_vectors, u32 *user_base_data, u32 *base_vector) { if (!ab->hif.ops->get_user_msi_vector) return -EOPNOTSUPP; return ab->hif.ops->get_user_msi_vector(ab, user_name, num_vectors, user_base_data, base_vector); } static inline void ath11k_get_msi_address(struct ath11k_base *ab, u32 *msi_addr_lo, u32 *msi_addr_hi) { if (!ab->hif.ops->get_msi_address) return; ab->hif.ops->get_msi_address(ab, msi_addr_lo, msi_addr_hi); } static inline void ath11k_get_ce_msi_idx(struct ath11k_base *ab, u32 ce_id, u32 *msi_data_idx) { if (ab->hif.ops->get_ce_msi_idx) ab->hif.ops->get_ce_msi_idx(ab, ce_id, msi_data_idx); else *msi_data_idx = ce_id; } #endif /* _HIF_H_ */ |