1 /* SPDX-License-Identifier: BSD-3-Clause-Clear */
3 * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
11 struct ath11k_hif_ops
{
12 u32 (*read32
)(struct ath11k_base
*sc
, u32 address
);
13 void (*write32
)(struct ath11k_base
*sc
, u32 address
, u32 data
);
14 void (*irq_enable
)(struct ath11k_base
*sc
);
15 void (*irq_disable
)(struct ath11k_base
*sc
);
16 int (*start
)(struct ath11k_base
*sc
);
17 void (*stop
)(struct ath11k_base
*sc
);
18 int (*power_up
)(struct ath11k_base
*sc
);
19 void (*power_down
)(struct ath11k_base
*sc
);
20 int (*suspend
)(struct ath11k_base
*ab
);
21 int (*resume
)(struct ath11k_base
*ab
);
22 int (*map_service_to_pipe
)(struct ath11k_base
*sc
, u16 service_id
,
23 u8
*ul_pipe
, u8
*dl_pipe
);
24 int (*get_user_msi_vector
)(struct ath11k_base
*ab
, char *user_name
,
25 int *num_vectors
, u32
*user_base_data
,
27 void (*get_msi_address
)(struct ath11k_base
*ab
, u32
*msi_addr_lo
,
29 void (*ce_irq_enable
)(struct ath11k_base
*ab
);
30 void (*ce_irq_disable
)(struct ath11k_base
*ab
);
33 static inline void ath11k_hif_ce_irq_enable(struct ath11k_base
*ab
)
35 if (ab
->hif
.ops
->ce_irq_enable
)
36 ab
->hif
.ops
->ce_irq_enable(ab
);
39 static inline void ath11k_hif_ce_irq_disable(struct ath11k_base
*ab
)
41 if (ab
->hif
.ops
->ce_irq_disable
)
42 ab
->hif
.ops
->ce_irq_disable(ab
);
45 static inline int ath11k_hif_start(struct ath11k_base
*sc
)
47 return sc
->hif
.ops
->start(sc
);
50 static inline void ath11k_hif_stop(struct ath11k_base
*sc
)
52 sc
->hif
.ops
->stop(sc
);
55 static inline void ath11k_hif_irq_enable(struct ath11k_base
*sc
)
57 sc
->hif
.ops
->irq_enable(sc
);
60 static inline void ath11k_hif_irq_disable(struct ath11k_base
*sc
)
62 sc
->hif
.ops
->irq_disable(sc
);
65 static inline int ath11k_hif_power_up(struct ath11k_base
*sc
)
67 return sc
->hif
.ops
->power_up(sc
);
70 static inline void ath11k_hif_power_down(struct ath11k_base
*sc
)
72 sc
->hif
.ops
->power_down(sc
);
75 static inline int ath11k_hif_suspend(struct ath11k_base
*ab
)
77 if (ab
->hif
.ops
->suspend
)
78 return ab
->hif
.ops
->suspend(ab
);
83 static inline int ath11k_hif_resume(struct ath11k_base
*ab
)
85 if (ab
->hif
.ops
->resume
)
86 return ab
->hif
.ops
->resume(ab
);
91 static inline u32
ath11k_hif_read32(struct ath11k_base
*sc
, u32 address
)
93 return sc
->hif
.ops
->read32(sc
, address
);
96 static inline void ath11k_hif_write32(struct ath11k_base
*sc
, u32 address
, u32 data
)
98 sc
->hif
.ops
->write32(sc
, address
, data
);
101 static inline int ath11k_hif_map_service_to_pipe(struct ath11k_base
*sc
, u16 service_id
,
102 u8
*ul_pipe
, u8
*dl_pipe
)
104 return sc
->hif
.ops
->map_service_to_pipe(sc
, service_id
, ul_pipe
, dl_pipe
);
107 static inline int ath11k_get_user_msi_vector(struct ath11k_base
*ab
, char *user_name
,
108 int *num_vectors
, u32
*user_base_data
,
111 if (!ab
->hif
.ops
->get_user_msi_vector
)
114 return ab
->hif
.ops
->get_user_msi_vector(ab
, user_name
, num_vectors
,
119 static inline void ath11k_get_msi_address(struct ath11k_base
*ab
, u32
*msi_addr_lo
,
122 if (!ab
->hif
.ops
->get_msi_address
)
125 ab
->hif
.ops
->get_msi_address(ab
, msi_addr_lo
, msi_addr_hi
);