Path: blob/main/sys/contrib/dev/athk/ath11k/hif.h
106880 views
/* SPDX-License-Identifier: BSD-3-Clause-Clear */1/*2* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.3* Copyright (c) 2022-2025 Qualcomm Innovation Center, Inc. All rights reserved.4*/56#ifndef _HIF_H_7#define _HIF_H_89#include "core.h"1011struct ath11k_hif_ops {12u32 (*read32)(struct ath11k_base *ab, u32 address);13void (*write32)(struct ath11k_base *ab, u32 address, u32 data);14int (*read)(struct ath11k_base *ab, void *buf, u32 start, u32 end);15void (*irq_enable)(struct ath11k_base *ab);16void (*irq_disable)(struct ath11k_base *ab);17int (*start)(struct ath11k_base *ab);18void (*stop)(struct ath11k_base *ab);19int (*power_up)(struct ath11k_base *ab);20void (*power_down)(struct ath11k_base *ab, bool is_suspend);21int (*suspend)(struct ath11k_base *ab);22int (*resume)(struct ath11k_base *ab);23int (*map_service_to_pipe)(struct ath11k_base *ab, u16 service_id,24u8 *ul_pipe, u8 *dl_pipe);25int (*get_user_msi_vector)(struct ath11k_base *ab, char *user_name,26int *num_vectors, u32 *user_base_data,27u32 *base_vector);28void (*get_msi_address)(struct ath11k_base *ab, u32 *msi_addr_lo,29u32 *msi_addr_hi);30void (*ce_irq_enable)(struct ath11k_base *ab);31void (*ce_irq_disable)(struct ath11k_base *ab);32void (*get_ce_msi_idx)(struct ath11k_base *ab, u32 ce_id, u32 *msi_idx);33void (*coredump_download)(struct ath11k_base *ab);34};3536static inline void ath11k_hif_ce_irq_enable(struct ath11k_base *ab)37{38if (ab->hif.ops->ce_irq_enable)39ab->hif.ops->ce_irq_enable(ab);40}4142static inline void ath11k_hif_ce_irq_disable(struct ath11k_base *ab)43{44if (ab->hif.ops->ce_irq_disable)45ab->hif.ops->ce_irq_disable(ab);46}4748static inline int ath11k_hif_start(struct ath11k_base *ab)49{50return ab->hif.ops->start(ab);51}5253static inline void ath11k_hif_stop(struct ath11k_base *ab)54{55ab->hif.ops->stop(ab);56}5758static inline void ath11k_hif_irq_enable(struct ath11k_base *ab)59{60ab->hif.ops->irq_enable(ab);61}6263static inline void ath11k_hif_irq_disable(struct ath11k_base *ab)64{65ab->hif.ops->irq_disable(ab);66}6768static inline int ath11k_hif_power_up(struct ath11k_base *ab)69{70if (!ab->hif.ops->power_up)71return -EOPNOTSUPP;7273return ab->hif.ops->power_up(ab);74}7576static inline void ath11k_hif_power_down(struct ath11k_base *ab, bool is_suspend)77{78if (!ab->hif.ops->power_down)79return;8081ab->hif.ops->power_down(ab, is_suspend);82}8384static inline int ath11k_hif_suspend(struct ath11k_base *ab)85{86if (ab->hif.ops->suspend)87return ab->hif.ops->suspend(ab);8889return 0;90}9192static inline int ath11k_hif_resume(struct ath11k_base *ab)93{94if (ab->hif.ops->resume)95return ab->hif.ops->resume(ab);9697return 0;98}99100static inline u32 ath11k_hif_read32(struct ath11k_base *ab, u32 address)101{102return ab->hif.ops->read32(ab, address);103}104105static inline void ath11k_hif_write32(struct ath11k_base *ab, u32 address, u32 data)106{107ab->hif.ops->write32(ab, address, data);108}109110static inline int ath11k_hif_read(struct ath11k_base *ab, void *buf,111u32 start, u32 end)112{113if (!ab->hif.ops->read)114return -EOPNOTSUPP;115116return ab->hif.ops->read(ab, buf, start, end);117}118119static inline int ath11k_hif_map_service_to_pipe(struct ath11k_base *ab, u16 service_id,120u8 *ul_pipe, u8 *dl_pipe)121{122return ab->hif.ops->map_service_to_pipe(ab, service_id, ul_pipe, dl_pipe);123}124125static inline int ath11k_get_user_msi_vector(struct ath11k_base *ab, char *user_name,126int *num_vectors, u32 *user_base_data,127u32 *base_vector)128{129if (!ab->hif.ops->get_user_msi_vector)130return -EOPNOTSUPP;131132return ab->hif.ops->get_user_msi_vector(ab, user_name, num_vectors,133user_base_data,134base_vector);135}136137static inline void ath11k_get_msi_address(struct ath11k_base *ab, u32 *msi_addr_lo,138u32 *msi_addr_hi)139{140if (!ab->hif.ops->get_msi_address)141return;142143ab->hif.ops->get_msi_address(ab, msi_addr_lo, msi_addr_hi);144}145146static inline void ath11k_get_ce_msi_idx(struct ath11k_base *ab, u32 ce_id,147u32 *msi_data_idx)148{149if (ab->hif.ops->get_ce_msi_idx)150ab->hif.ops->get_ce_msi_idx(ab, ce_id, msi_data_idx);151else152*msi_data_idx = ce_id;153}154155static inline void ath11k_hif_coredump_download(struct ath11k_base *ab)156{157if (ab->hif.ops->coredump_download)158ab->hif.ops->coredump_download(ab);159}160161#endif /* _HIF_H_ */162163164