Path: blob/main/sys/contrib/dev/athk/ath12k/hif.h
106879 views
/* SPDX-License-Identifier: BSD-3-Clause-Clear */1/*2* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.3* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.4*/56#ifndef ATH12K_HIF_H7#define ATH12K_HIF_H89#include "core.h"1011struct ath12k_hif_ops {12u32 (*read32)(struct ath12k_base *sc, u32 address);13void (*write32)(struct ath12k_base *sc, u32 address, u32 data);14void (*irq_enable)(struct ath12k_base *sc);15void (*irq_disable)(struct ath12k_base *sc);16int (*start)(struct ath12k_base *sc);17void (*stop)(struct ath12k_base *sc);18int (*power_up)(struct ath12k_base *sc);19void (*power_down)(struct ath12k_base *sc);20int (*suspend)(struct ath12k_base *ab);21int (*resume)(struct ath12k_base *ab);22int (*map_service_to_pipe)(struct ath12k_base *sc, u16 service_id,23u8 *ul_pipe, u8 *dl_pipe);24int (*get_user_msi_vector)(struct ath12k_base *ab, char *user_name,25int *num_vectors, u32 *user_base_data,26u32 *base_vector);27void (*get_msi_address)(struct ath12k_base *ab, u32 *msi_addr_lo,28u32 *msi_addr_hi);29void (*ce_irq_enable)(struct ath12k_base *ab);30void (*ce_irq_disable)(struct ath12k_base *ab);31void (*get_ce_msi_idx)(struct ath12k_base *ab, u32 ce_id, u32 *msi_idx);32};3334static inline int ath12k_hif_map_service_to_pipe(struct ath12k_base *ab, u16 service_id,35u8 *ul_pipe, u8 *dl_pipe)36{37return ab->hif.ops->map_service_to_pipe(ab, service_id,38ul_pipe, dl_pipe);39}4041static inline int ath12k_hif_get_user_msi_vector(struct ath12k_base *ab,42char *user_name,43int *num_vectors,44u32 *user_base_data,45u32 *base_vector)46{47if (!ab->hif.ops->get_user_msi_vector)48return -EOPNOTSUPP;4950return ab->hif.ops->get_user_msi_vector(ab, user_name, num_vectors,51user_base_data,52base_vector);53}5455static inline void ath12k_hif_get_msi_address(struct ath12k_base *ab,56u32 *msi_addr_lo,57u32 *msi_addr_hi)58{59if (!ab->hif.ops->get_msi_address)60return;6162ab->hif.ops->get_msi_address(ab, msi_addr_lo, msi_addr_hi);63}6465static inline void ath12k_hif_get_ce_msi_idx(struct ath12k_base *ab, u32 ce_id,66u32 *msi_data_idx)67{68if (ab->hif.ops->get_ce_msi_idx)69ab->hif.ops->get_ce_msi_idx(ab, ce_id, msi_data_idx);70else71*msi_data_idx = ce_id;72}7374static inline void ath12k_hif_ce_irq_enable(struct ath12k_base *ab)75{76if (ab->hif.ops->ce_irq_enable)77ab->hif.ops->ce_irq_enable(ab);78}7980static inline void ath12k_hif_ce_irq_disable(struct ath12k_base *ab)81{82if (ab->hif.ops->ce_irq_disable)83ab->hif.ops->ce_irq_disable(ab);84}8586static inline void ath12k_hif_irq_enable(struct ath12k_base *ab)87{88ab->hif.ops->irq_enable(ab);89}9091static inline void ath12k_hif_irq_disable(struct ath12k_base *ab)92{93ab->hif.ops->irq_disable(ab);94}9596static inline int ath12k_hif_suspend(struct ath12k_base *ab)97{98if (ab->hif.ops->suspend)99return ab->hif.ops->suspend(ab);100101return 0;102}103104static inline int ath12k_hif_resume(struct ath12k_base *ab)105{106if (ab->hif.ops->resume)107return ab->hif.ops->resume(ab);108109return 0;110}111112static inline int ath12k_hif_start(struct ath12k_base *ab)113{114return ab->hif.ops->start(ab);115}116117static inline void ath12k_hif_stop(struct ath12k_base *ab)118{119ab->hif.ops->stop(ab);120}121122static inline u32 ath12k_hif_read32(struct ath12k_base *ab, u32 address)123{124return ab->hif.ops->read32(ab, address);125}126127static inline void ath12k_hif_write32(struct ath12k_base *ab, u32 address,128u32 data)129{130ab->hif.ops->write32(ab, address, data);131}132133static inline int ath12k_hif_power_up(struct ath12k_base *ab)134{135return ab->hif.ops->power_up(ab);136}137138static inline void ath12k_hif_power_down(struct ath12k_base *ab)139{140ab->hif.ops->power_down(ab);141}142143#endif /* ATH12K_HIF_H */144145146