| /* SPDX-License-Identifier: ISC */ |
| /* |
| * Copyright (c) 2018 The Linux Foundation. All rights reserved. |
| */ |
| |
| #ifndef _SNOC_H_ |
| #define _SNOC_H_ |
| |
| #include <linux/notifier.h> |
| |
| #include "hw.h" |
| #include "ce.h" |
| #include "qmi.h" |
| |
| struct ath10k_snoc_drv_priv { |
| enum ath10k_hw_rev hw_rev; |
| u64 dma_mask; |
| u32 msa_size; |
| }; |
| |
| struct snoc_state { |
| u32 pipe_cfg_addr; |
| u32 svc_to_pipe_map; |
| }; |
| |
| struct ath10k_snoc_pipe { |
| struct ath10k_ce_pipe *ce_hdl; |
| u8 pipe_num; |
| struct ath10k *hif_ce_state; |
| size_t buf_sz; |
| /* protect ce info */ |
| spinlock_t pipe_lock; |
| struct ath10k_snoc *ar_snoc; |
| }; |
| |
| struct ath10k_snoc_target_info { |
| u32 target_version; |
| u32 target_type; |
| u32 target_revision; |
| u32 soc_version; |
| }; |
| |
| struct ath10k_snoc_ce_irq { |
| u32 irq_line; |
| }; |
| |
| enum ath10k_snoc_flags { |
| ATH10K_SNOC_FLAG_REGISTERED, |
| ATH10K_SNOC_FLAG_UNREGISTERING, |
| ATH10K_SNOC_FLAG_MODEM_STOPPED, |
| ATH10K_SNOC_FLAG_RECOVERY, |
| ATH10K_SNOC_FLAG_8BIT_HOST_CAP_QUIRK, |
| }; |
| |
| struct clk_bulk_data; |
| struct regulator_bulk_data; |
| |
| struct ath10k_snoc { |
| struct platform_device *dev; |
| struct ath10k *ar; |
| unsigned int use_tz; |
| struct ath10k_firmware { |
| struct device *dev; |
| dma_addr_t fw_start_addr; |
| struct iommu_domain *iommu_domain; |
| size_t mapped_mem_size; |
| } fw; |
| void __iomem *mem; |
| dma_addr_t mem_pa; |
| struct ath10k_snoc_target_info target_info; |
| size_t mem_len; |
| struct ath10k_snoc_pipe pipe_info[CE_COUNT_MAX]; |
| struct ath10k_snoc_ce_irq ce_irqs[CE_COUNT_MAX]; |
| struct ath10k_ce ce; |
| struct timer_list rx_post_retry; |
| struct regulator_bulk_data *vregs; |
| size_t num_vregs; |
| struct clk_bulk_data *clks; |
| size_t num_clks; |
| struct ath10k_qmi *qmi; |
| struct notifier_block nb; |
| void *notifier; |
| unsigned long flags; |
| bool xo_cal_supported; |
| u32 xo_cal_data; |
| DECLARE_BITMAP(pending_ce_irqs, CE_COUNT_MAX); |
| }; |
| |
| static inline struct ath10k_snoc *ath10k_snoc_priv(struct ath10k *ar) |
| { |
| return (struct ath10k_snoc *)ar->drv_priv; |
| } |
| |
| int ath10k_snoc_fw_indication(struct ath10k *ar, u64 type); |
| void ath10k_snoc_fw_crashed_dump(struct ath10k *ar); |
| |
| #endif /* _SNOC_H_ */ |