1 /* SPDX-License-Identifier: BSD-3-Clause-Clear */
3 * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
4 * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
12 struct 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
,
29 void (*get_msi_address
)(struct ath11k_base
*ab
, u32
*msi_addr_lo
,
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
);
36 static inline void ath11k_hif_ce_irq_enable(struct ath11k_base
*ab
)
38 if (ab
->hif
.ops
->ce_irq_enable
)
39 ab
->hif
.ops
->ce_irq_enable(ab
);
42 static inline void ath11k_hif_ce_irq_disable(struct ath11k_base
*ab
)
44 if (ab
->hif
.ops
->ce_irq_disable
)
45 ab
->hif
.ops
->ce_irq_disable(ab
);
48 static inline int ath11k_hif_start(struct ath11k_base
*ab
)
50 return ab
->hif
.ops
->start(ab
);
53 static inline void ath11k_hif_stop(struct ath11k_base
*ab
)
55 ab
->hif
.ops
->stop(ab
);
58 static inline void ath11k_hif_irq_enable(struct ath11k_base
*ab
)
60 ab
->hif
.ops
->irq_enable(ab
);
63 static inline void ath11k_hif_irq_disable(struct ath11k_base
*ab
)
65 ab
->hif
.ops
->irq_disable(ab
);
68 static inline int ath11k_hif_power_up(struct ath11k_base
*ab
)
70 return ab
->hif
.ops
->power_up(ab
);
73 static inline void ath11k_hif_power_down(struct ath11k_base
*ab
)
75 ab
->hif
.ops
->power_down(ab
);
78 static inline int ath11k_hif_suspend(struct ath11k_base
*ab
)
80 if (ab
->hif
.ops
->suspend
)
81 return ab
->hif
.ops
->suspend(ab
);
86 static inline int ath11k_hif_resume(struct ath11k_base
*ab
)
88 if (ab
->hif
.ops
->resume
)
89 return ab
->hif
.ops
->resume(ab
);
94 static inline u32
ath11k_hif_read32(struct ath11k_base
*ab
, u32 address
)
96 return ab
->hif
.ops
->read32(ab
, address
);
99 static inline void ath11k_hif_write32(struct ath11k_base
*ab
, u32 address
, u32 data
)
101 ab
->hif
.ops
->write32(ab
, address
, data
);
104 static inline int ath11k_hif_read(struct ath11k_base
*ab
, void *buf
,
107 if (!ab
->hif
.ops
->read
)
110 return ab
->hif
.ops
->read(ab
, buf
, start
, end
);
113 static inline int ath11k_hif_map_service_to_pipe(struct ath11k_base
*ab
, u16 service_id
,
114 u8
*ul_pipe
, u8
*dl_pipe
)
116 return ab
->hif
.ops
->map_service_to_pipe(ab
, service_id
, ul_pipe
, dl_pipe
);
119 static inline int ath11k_get_user_msi_vector(struct ath11k_base
*ab
, char *user_name
,
120 int *num_vectors
, u32
*user_base_data
,
123 if (!ab
->hif
.ops
->get_user_msi_vector
)
126 return ab
->hif
.ops
->get_user_msi_vector(ab
, user_name
, num_vectors
,
131 static inline void ath11k_get_msi_address(struct ath11k_base
*ab
, u32
*msi_addr_lo
,
134 if (!ab
->hif
.ops
->get_msi_address
)
137 ab
->hif
.ops
->get_msi_address(ab
, msi_addr_lo
, msi_addr_hi
);
140 static inline void ath11k_get_ce_msi_idx(struct ath11k_base
*ab
, u32 ce_id
,
143 if (ab
->hif
.ops
->get_ce_msi_idx
)
144 ab
->hif
.ops
->get_ce_msi_idx(ab
, ce_id
, msi_data_idx
);
146 *msi_data_idx
= ce_id
;