1 | /* SPDX-License-Identifier: BSD-3-Clause-Clear */ |
2 | /* |
3 | * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved. |
4 | * Copyright (c) 2021-2022, Qualcomm Innovation Center, Inc. All rights reserved. |
5 | */ |
6 | |
7 | #ifndef _ATH11K_PCI_CMN_H |
8 | #define _ATH11K_PCI_CMN_H |
9 | |
10 | #include "core.h" |
11 | |
12 | #define ATH11K_PCI_IRQ_CE0_OFFSET 3 |
13 | #define ATH11K_PCI_IRQ_DP_OFFSET 14 |
14 | |
15 | #define ATH11K_PCI_CE_WAKE_IRQ 2 |
16 | |
17 | #define ATH11K_PCI_WINDOW_ENABLE_BIT 0x40000000 |
18 | #define ATH11K_PCI_WINDOW_REG_ADDRESS 0x310c |
19 | #define ATH11K_PCI_WINDOW_VALUE_MASK GENMASK(24, 19) |
20 | #define ATH11K_PCI_WINDOW_START 0x80000 |
21 | #define ATH11K_PCI_WINDOW_RANGE_MASK GENMASK(18, 0) |
22 | |
23 | /* BAR0 + 4k is always accessible, and no |
24 | * need to force wakeup. |
25 | * 4K - 32 = 0xFE0 |
26 | */ |
27 | #define ATH11K_PCI_ACCESS_ALWAYS_OFF 0xFE0 |
28 | |
29 | int ath11k_pcic_get_user_msi_assignment(struct ath11k_base *ab, char *user_name, |
30 | int *num_vectors, u32 *user_base_data, |
31 | u32 *base_vector); |
32 | void ath11k_pcic_write32(struct ath11k_base *ab, u32 offset, u32 value); |
33 | u32 ath11k_pcic_read32(struct ath11k_base *ab, u32 offset); |
34 | void ath11k_pcic_get_msi_address(struct ath11k_base *ab, u32 *msi_addr_lo, |
35 | u32 *msi_addr_hi); |
36 | void ath11k_pcic_get_ce_msi_idx(struct ath11k_base *ab, u32 ce_id, u32 *msi_idx); |
37 | void ath11k_pcic_free_irq(struct ath11k_base *ab); |
38 | int ath11k_pcic_config_irq(struct ath11k_base *ab); |
39 | void ath11k_pcic_ext_irq_enable(struct ath11k_base *ab); |
40 | void ath11k_pcic_ext_irq_disable(struct ath11k_base *ab); |
41 | void ath11k_pcic_stop(struct ath11k_base *ab); |
42 | int ath11k_pcic_start(struct ath11k_base *ab); |
43 | int ath11k_pcic_map_service_to_pipe(struct ath11k_base *ab, u16 service_id, |
44 | u8 *ul_pipe, u8 *dl_pipe); |
45 | void ath11k_pcic_ce_irqs_enable(struct ath11k_base *ab); |
46 | void ath11k_pcic_ce_irq_disable_sync(struct ath11k_base *ab); |
47 | int ath11k_pcic_init_msi_config(struct ath11k_base *ab); |
48 | int ath11k_pcic_register_pci_ops(struct ath11k_base *ab, |
49 | const struct ath11k_pci_ops *pci_ops); |
50 | int ath11k_pcic_read(struct ath11k_base *ab, void *buf, u32 start, u32 end); |
51 | void ath11k_pci_enable_ce_irqs_except_wake_irq(struct ath11k_base *ab); |
52 | void ath11k_pci_disable_ce_irqs_except_wake_irq(struct ath11k_base *ab); |
53 | |
54 | #endif |
55 | |