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 11struct 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 35static 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 41static 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 47static inline int ath11k_hif_start(struct ath11k_base *sc) 48{ 49 return sc->hif.ops->start(sc); 50} 51 52static inline void ath11k_hif_stop(struct ath11k_base *sc) 53{ 54 sc->hif.ops->stop(sc); 55} 56 57static inline void ath11k_hif_irq_enable(struct ath11k_base *sc) 58{ 59 sc->hif.ops->irq_enable(sc); 60} 61 62static inline void ath11k_hif_irq_disable(struct ath11k_base *sc) 63{ 64 sc->hif.ops->irq_disable(sc); 65} 66 67static inline int ath11k_hif_power_up(struct ath11k_base *sc) 68{ 69 return sc->hif.ops->power_up(sc); 70} 71 72static inline void ath11k_hif_power_down(struct ath11k_base *sc) 73{ 74 sc->hif.ops->power_down(sc); 75} 76 77static 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 85static 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 93static inline u32 ath11k_hif_read32(struct ath11k_base *sc, u32 address) 94{ 95 return sc->hif.ops->read32(sc, address); 96} 97 98static inline void ath11k_hif_write32(struct ath11k_base *sc, u32 address, u32 data) 99{ 100 sc->hif.ops->write32(sc, address, data); 101} 102 103static 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 112static 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 118static 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 130static 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 139static 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