xref: /freebsd/sys/contrib/dev/athk/ath12k/hif.h (revision 5c1def83)
15c1def83SBjoern A. Zeeb /* SPDX-License-Identifier: BSD-3-Clause-Clear */
25c1def83SBjoern A. Zeeb /*
35c1def83SBjoern A. Zeeb  * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
45c1def83SBjoern A. Zeeb  * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
55c1def83SBjoern A. Zeeb  */
65c1def83SBjoern A. Zeeb 
75c1def83SBjoern A. Zeeb #ifndef ATH12K_HIF_H
85c1def83SBjoern A. Zeeb #define ATH12K_HIF_H
95c1def83SBjoern A. Zeeb 
105c1def83SBjoern A. Zeeb #include "core.h"
115c1def83SBjoern A. Zeeb 
125c1def83SBjoern A. Zeeb struct ath12k_hif_ops {
135c1def83SBjoern A. Zeeb 	u32 (*read32)(struct ath12k_base *sc, u32 address);
145c1def83SBjoern A. Zeeb 	void (*write32)(struct ath12k_base *sc, u32 address, u32 data);
155c1def83SBjoern A. Zeeb 	void (*irq_enable)(struct ath12k_base *sc);
165c1def83SBjoern A. Zeeb 	void (*irq_disable)(struct ath12k_base *sc);
175c1def83SBjoern A. Zeeb 	int (*start)(struct ath12k_base *sc);
185c1def83SBjoern A. Zeeb 	void (*stop)(struct ath12k_base *sc);
195c1def83SBjoern A. Zeeb 	int (*power_up)(struct ath12k_base *sc);
205c1def83SBjoern A. Zeeb 	void (*power_down)(struct ath12k_base *sc);
215c1def83SBjoern A. Zeeb 	int (*suspend)(struct ath12k_base *ab);
225c1def83SBjoern A. Zeeb 	int (*resume)(struct ath12k_base *ab);
235c1def83SBjoern A. Zeeb 	int (*map_service_to_pipe)(struct ath12k_base *sc, u16 service_id,
245c1def83SBjoern A. Zeeb 				   u8 *ul_pipe, u8 *dl_pipe);
255c1def83SBjoern A. Zeeb 	int (*get_user_msi_vector)(struct ath12k_base *ab, char *user_name,
265c1def83SBjoern A. Zeeb 				   int *num_vectors, u32 *user_base_data,
275c1def83SBjoern A. Zeeb 				   u32 *base_vector);
285c1def83SBjoern A. Zeeb 	void (*get_msi_address)(struct ath12k_base *ab, u32 *msi_addr_lo,
295c1def83SBjoern A. Zeeb 				u32 *msi_addr_hi);
305c1def83SBjoern A. Zeeb 	void (*ce_irq_enable)(struct ath12k_base *ab);
315c1def83SBjoern A. Zeeb 	void (*ce_irq_disable)(struct ath12k_base *ab);
325c1def83SBjoern A. Zeeb 	void (*get_ce_msi_idx)(struct ath12k_base *ab, u32 ce_id, u32 *msi_idx);
335c1def83SBjoern A. Zeeb };
345c1def83SBjoern A. Zeeb 
ath12k_hif_map_service_to_pipe(struct ath12k_base * ab,u16 service_id,u8 * ul_pipe,u8 * dl_pipe)355c1def83SBjoern A. Zeeb static inline int ath12k_hif_map_service_to_pipe(struct ath12k_base *ab, u16 service_id,
365c1def83SBjoern A. Zeeb 						 u8 *ul_pipe, u8 *dl_pipe)
375c1def83SBjoern A. Zeeb {
385c1def83SBjoern A. Zeeb 	return ab->hif.ops->map_service_to_pipe(ab, service_id,
395c1def83SBjoern A. Zeeb 						ul_pipe, dl_pipe);
405c1def83SBjoern A. Zeeb }
415c1def83SBjoern A. Zeeb 
ath12k_hif_get_user_msi_vector(struct ath12k_base * ab,char * user_name,int * num_vectors,u32 * user_base_data,u32 * base_vector)425c1def83SBjoern A. Zeeb static inline int ath12k_hif_get_user_msi_vector(struct ath12k_base *ab,
435c1def83SBjoern A. Zeeb 						 char *user_name,
445c1def83SBjoern A. Zeeb 						 int *num_vectors,
455c1def83SBjoern A. Zeeb 						 u32 *user_base_data,
465c1def83SBjoern A. Zeeb 						 u32 *base_vector)
475c1def83SBjoern A. Zeeb {
485c1def83SBjoern A. Zeeb 	if (!ab->hif.ops->get_user_msi_vector)
495c1def83SBjoern A. Zeeb 		return -EOPNOTSUPP;
505c1def83SBjoern A. Zeeb 
515c1def83SBjoern A. Zeeb 	return ab->hif.ops->get_user_msi_vector(ab, user_name, num_vectors,
525c1def83SBjoern A. Zeeb 						user_base_data,
535c1def83SBjoern A. Zeeb 						base_vector);
545c1def83SBjoern A. Zeeb }
555c1def83SBjoern A. Zeeb 
ath12k_hif_get_msi_address(struct ath12k_base * ab,u32 * msi_addr_lo,u32 * msi_addr_hi)565c1def83SBjoern A. Zeeb static inline void ath12k_hif_get_msi_address(struct ath12k_base *ab,
575c1def83SBjoern A. Zeeb 					      u32 *msi_addr_lo,
585c1def83SBjoern A. Zeeb 					      u32 *msi_addr_hi)
595c1def83SBjoern A. Zeeb {
605c1def83SBjoern A. Zeeb 	if (!ab->hif.ops->get_msi_address)
615c1def83SBjoern A. Zeeb 		return;
625c1def83SBjoern A. Zeeb 
635c1def83SBjoern A. Zeeb 	ab->hif.ops->get_msi_address(ab, msi_addr_lo, msi_addr_hi);
645c1def83SBjoern A. Zeeb }
655c1def83SBjoern A. Zeeb 
ath12k_hif_get_ce_msi_idx(struct ath12k_base * ab,u32 ce_id,u32 * msi_data_idx)665c1def83SBjoern A. Zeeb static inline void ath12k_hif_get_ce_msi_idx(struct ath12k_base *ab, u32 ce_id,
675c1def83SBjoern A. Zeeb 					     u32 *msi_data_idx)
685c1def83SBjoern A. Zeeb {
695c1def83SBjoern A. Zeeb 	if (ab->hif.ops->get_ce_msi_idx)
705c1def83SBjoern A. Zeeb 		ab->hif.ops->get_ce_msi_idx(ab, ce_id, msi_data_idx);
715c1def83SBjoern A. Zeeb 	else
725c1def83SBjoern A. Zeeb 		*msi_data_idx = ce_id;
735c1def83SBjoern A. Zeeb }
745c1def83SBjoern A. Zeeb 
ath12k_hif_ce_irq_enable(struct ath12k_base * ab)755c1def83SBjoern A. Zeeb static inline void ath12k_hif_ce_irq_enable(struct ath12k_base *ab)
765c1def83SBjoern A. Zeeb {
775c1def83SBjoern A. Zeeb 	if (ab->hif.ops->ce_irq_enable)
785c1def83SBjoern A. Zeeb 		ab->hif.ops->ce_irq_enable(ab);
795c1def83SBjoern A. Zeeb }
805c1def83SBjoern A. Zeeb 
ath12k_hif_ce_irq_disable(struct ath12k_base * ab)815c1def83SBjoern A. Zeeb static inline void ath12k_hif_ce_irq_disable(struct ath12k_base *ab)
825c1def83SBjoern A. Zeeb {
835c1def83SBjoern A. Zeeb 	if (ab->hif.ops->ce_irq_disable)
845c1def83SBjoern A. Zeeb 		ab->hif.ops->ce_irq_disable(ab);
855c1def83SBjoern A. Zeeb }
865c1def83SBjoern A. Zeeb 
ath12k_hif_irq_enable(struct ath12k_base * ab)875c1def83SBjoern A. Zeeb static inline void ath12k_hif_irq_enable(struct ath12k_base *ab)
885c1def83SBjoern A. Zeeb {
895c1def83SBjoern A. Zeeb 	ab->hif.ops->irq_enable(ab);
905c1def83SBjoern A. Zeeb }
915c1def83SBjoern A. Zeeb 
ath12k_hif_irq_disable(struct ath12k_base * ab)925c1def83SBjoern A. Zeeb static inline void ath12k_hif_irq_disable(struct ath12k_base *ab)
935c1def83SBjoern A. Zeeb {
945c1def83SBjoern A. Zeeb 	ab->hif.ops->irq_disable(ab);
955c1def83SBjoern A. Zeeb }
965c1def83SBjoern A. Zeeb 
ath12k_hif_suspend(struct ath12k_base * ab)975c1def83SBjoern A. Zeeb static inline int ath12k_hif_suspend(struct ath12k_base *ab)
985c1def83SBjoern A. Zeeb {
995c1def83SBjoern A. Zeeb 	if (ab->hif.ops->suspend)
1005c1def83SBjoern A. Zeeb 		return ab->hif.ops->suspend(ab);
1015c1def83SBjoern A. Zeeb 
1025c1def83SBjoern A. Zeeb 	return 0;
1035c1def83SBjoern A. Zeeb }
1045c1def83SBjoern A. Zeeb 
ath12k_hif_resume(struct ath12k_base * ab)1055c1def83SBjoern A. Zeeb static inline int ath12k_hif_resume(struct ath12k_base *ab)
1065c1def83SBjoern A. Zeeb {
1075c1def83SBjoern A. Zeeb 	if (ab->hif.ops->resume)
1085c1def83SBjoern A. Zeeb 		return ab->hif.ops->resume(ab);
1095c1def83SBjoern A. Zeeb 
1105c1def83SBjoern A. Zeeb 	return 0;
1115c1def83SBjoern A. Zeeb }
1125c1def83SBjoern A. Zeeb 
ath12k_hif_start(struct ath12k_base * ab)1135c1def83SBjoern A. Zeeb static inline int ath12k_hif_start(struct ath12k_base *ab)
1145c1def83SBjoern A. Zeeb {
1155c1def83SBjoern A. Zeeb 	return ab->hif.ops->start(ab);
1165c1def83SBjoern A. Zeeb }
1175c1def83SBjoern A. Zeeb 
ath12k_hif_stop(struct ath12k_base * ab)1185c1def83SBjoern A. Zeeb static inline void ath12k_hif_stop(struct ath12k_base *ab)
1195c1def83SBjoern A. Zeeb {
1205c1def83SBjoern A. Zeeb 	ab->hif.ops->stop(ab);
1215c1def83SBjoern A. Zeeb }
1225c1def83SBjoern A. Zeeb 
ath12k_hif_read32(struct ath12k_base * ab,u32 address)1235c1def83SBjoern A. Zeeb static inline u32 ath12k_hif_read32(struct ath12k_base *ab, u32 address)
1245c1def83SBjoern A. Zeeb {
1255c1def83SBjoern A. Zeeb 	return ab->hif.ops->read32(ab, address);
1265c1def83SBjoern A. Zeeb }
1275c1def83SBjoern A. Zeeb 
ath12k_hif_write32(struct ath12k_base * ab,u32 address,u32 data)1285c1def83SBjoern A. Zeeb static inline void ath12k_hif_write32(struct ath12k_base *ab, u32 address,
1295c1def83SBjoern A. Zeeb 				      u32 data)
1305c1def83SBjoern A. Zeeb {
1315c1def83SBjoern A. Zeeb 	ab->hif.ops->write32(ab, address, data);
1325c1def83SBjoern A. Zeeb }
1335c1def83SBjoern A. Zeeb 
ath12k_hif_power_up(struct ath12k_base * ab)1345c1def83SBjoern A. Zeeb static inline int ath12k_hif_power_up(struct ath12k_base *ab)
1355c1def83SBjoern A. Zeeb {
1365c1def83SBjoern A. Zeeb 	return ab->hif.ops->power_up(ab);
1375c1def83SBjoern A. Zeeb }
1385c1def83SBjoern A. Zeeb 
ath12k_hif_power_down(struct ath12k_base * ab)1395c1def83SBjoern A. Zeeb static inline void ath12k_hif_power_down(struct ath12k_base *ab)
1405c1def83SBjoern A. Zeeb {
1415c1def83SBjoern A. Zeeb 	ab->hif.ops->power_down(ab);
1425c1def83SBjoern A. Zeeb }
1435c1def83SBjoern A. Zeeb 
1445c1def83SBjoern A. Zeeb #endif /* ATH12K_HIF_H */
145