brintos

brintos / linux-shallow public Read only

0
0
Text · 3.8 KiB · 674ff77 Raw
150 lines · c
1/* SPDX-License-Identifier: BSD-3-Clause-Clear */2/*3 * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.4 * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.5 */6 7#ifndef _HIF_H_8#define _HIF_H_9 10#include "core.h"11 12struct ath11k_hif_ops {13	u32 (*read32)(struct ath11k_base *ab, u32 address);14	void (*write32)(struct ath11k_base *ab, u32 address, u32 data);15	int (*read)(struct ath11k_base *ab, void *buf, u32 start, u32 end);16	void (*irq_enable)(struct ath11k_base *ab);17	void (*irq_disable)(struct ath11k_base *ab);18	int (*start)(struct ath11k_base *ab);19	void (*stop)(struct ath11k_base *ab);20	int (*power_up)(struct ath11k_base *ab);21	void (*power_down)(struct ath11k_base *ab);22	int (*suspend)(struct ath11k_base *ab);23	int (*resume)(struct ath11k_base *ab);24	int (*map_service_to_pipe)(struct ath11k_base *ab, u16 service_id,25				   u8 *ul_pipe, u8 *dl_pipe);26	int (*get_user_msi_vector)(struct ath11k_base *ab, char *user_name,27				   int *num_vectors, u32 *user_base_data,28				   u32 *base_vector);29	void (*get_msi_address)(struct ath11k_base *ab, u32 *msi_addr_lo,30				u32 *msi_addr_hi);31	void (*ce_irq_enable)(struct ath11k_base *ab);32	void (*ce_irq_disable)(struct ath11k_base *ab);33	void (*get_ce_msi_idx)(struct ath11k_base *ab, u32 ce_id, u32 *msi_idx);34};35 36static inline void ath11k_hif_ce_irq_enable(struct ath11k_base *ab)37{38	if (ab->hif.ops->ce_irq_enable)39		ab->hif.ops->ce_irq_enable(ab);40}41 42static inline void ath11k_hif_ce_irq_disable(struct ath11k_base *ab)43{44	if (ab->hif.ops->ce_irq_disable)45		ab->hif.ops->ce_irq_disable(ab);46}47 48static inline int ath11k_hif_start(struct ath11k_base *ab)49{50	return ab->hif.ops->start(ab);51}52 53static inline void ath11k_hif_stop(struct ath11k_base *ab)54{55	ab->hif.ops->stop(ab);56}57 58static inline void ath11k_hif_irq_enable(struct ath11k_base *ab)59{60	ab->hif.ops->irq_enable(ab);61}62 63static inline void ath11k_hif_irq_disable(struct ath11k_base *ab)64{65	ab->hif.ops->irq_disable(ab);66}67 68static inline int ath11k_hif_power_up(struct ath11k_base *ab)69{70	return ab->hif.ops->power_up(ab);71}72 73static inline void ath11k_hif_power_down(struct ath11k_base *ab)74{75	ab->hif.ops->power_down(ab);76}77 78static inline int ath11k_hif_suspend(struct ath11k_base *ab)79{80	if (ab->hif.ops->suspend)81		return ab->hif.ops->suspend(ab);82 83	return 0;84}85 86static inline int ath11k_hif_resume(struct ath11k_base *ab)87{88	if (ab->hif.ops->resume)89		return ab->hif.ops->resume(ab);90 91	return 0;92}93 94static inline u32 ath11k_hif_read32(struct ath11k_base *ab, u32 address)95{96	return ab->hif.ops->read32(ab, address);97}98 99static inline void ath11k_hif_write32(struct ath11k_base *ab, u32 address, u32 data)100{101	ab->hif.ops->write32(ab, address, data);102}103 104static inline int ath11k_hif_read(struct ath11k_base *ab, void *buf,105				  u32 start, u32 end)106{107	if (!ab->hif.ops->read)108		return -EOPNOTSUPP;109 110	return ab->hif.ops->read(ab, buf, start, end);111}112 113static inline int ath11k_hif_map_service_to_pipe(struct ath11k_base *ab, u16 service_id,114						 u8 *ul_pipe, u8 *dl_pipe)115{116	return ab->hif.ops->map_service_to_pipe(ab, service_id, ul_pipe, dl_pipe);117}118 119static inline int ath11k_get_user_msi_vector(struct ath11k_base *ab, char *user_name,120					     int *num_vectors, u32 *user_base_data,121					     u32 *base_vector)122{123	if (!ab->hif.ops->get_user_msi_vector)124		return -EOPNOTSUPP;125 126	return ab->hif.ops->get_user_msi_vector(ab, user_name, num_vectors,127						user_base_data,128						base_vector);129}130 131static inline void ath11k_get_msi_address(struct ath11k_base *ab, u32 *msi_addr_lo,132					  u32 *msi_addr_hi)133{134	if (!ab->hif.ops->get_msi_address)135		return;136 137	ab->hif.ops->get_msi_address(ab, msi_addr_lo, msi_addr_hi);138}139 140static inline void ath11k_get_ce_msi_idx(struct ath11k_base *ab, u32 ce_id,141					 u32 *msi_data_idx)142{143	if (ab->hif.ops->get_ce_msi_idx)144		ab->hif.ops->get_ce_msi_idx(ab, ce_id, msi_data_idx);145	else146		*msi_data_idx = ce_id;147}148 149#endif /* _HIF_H_ */150