0001
0002
0003
0004
0005
0006 #ifndef _SNOC_H_
0007 #define _SNOC_H_
0008
0009 #include <linux/notifier.h>
0010
0011 #include "hw.h"
0012 #include "ce.h"
0013 #include "qmi.h"
0014
0015 struct ath10k_snoc_drv_priv {
0016 enum ath10k_hw_rev hw_rev;
0017 u64 dma_mask;
0018 u32 msa_size;
0019 };
0020
0021 struct snoc_state {
0022 u32 pipe_cfg_addr;
0023 u32 svc_to_pipe_map;
0024 };
0025
0026 struct ath10k_snoc_pipe {
0027 struct ath10k_ce_pipe *ce_hdl;
0028 u8 pipe_num;
0029 struct ath10k *hif_ce_state;
0030 size_t buf_sz;
0031
0032 spinlock_t pipe_lock;
0033 struct ath10k_snoc *ar_snoc;
0034 };
0035
0036 struct ath10k_snoc_target_info {
0037 u32 target_version;
0038 u32 target_type;
0039 u32 target_revision;
0040 u32 soc_version;
0041 };
0042
0043 struct ath10k_snoc_ce_irq {
0044 u32 irq_line;
0045 };
0046
0047 enum ath10k_snoc_flags {
0048 ATH10K_SNOC_FLAG_REGISTERED,
0049 ATH10K_SNOC_FLAG_UNREGISTERING,
0050 ATH10K_SNOC_FLAG_MODEM_STOPPED,
0051 ATH10K_SNOC_FLAG_RECOVERY,
0052 ATH10K_SNOC_FLAG_8BIT_HOST_CAP_QUIRK,
0053 };
0054
0055 struct clk_bulk_data;
0056 struct regulator_bulk_data;
0057
0058 struct ath10k_snoc {
0059 struct platform_device *dev;
0060 struct ath10k *ar;
0061 unsigned int use_tz;
0062 struct ath10k_firmware {
0063 struct device *dev;
0064 dma_addr_t fw_start_addr;
0065 struct iommu_domain *iommu_domain;
0066 size_t mapped_mem_size;
0067 } fw;
0068 void __iomem *mem;
0069 dma_addr_t mem_pa;
0070 struct ath10k_snoc_target_info target_info;
0071 size_t mem_len;
0072 struct ath10k_snoc_pipe pipe_info[CE_COUNT_MAX];
0073 struct ath10k_snoc_ce_irq ce_irqs[CE_COUNT_MAX];
0074 struct ath10k_ce ce;
0075 struct timer_list rx_post_retry;
0076 struct regulator_bulk_data *vregs;
0077 size_t num_vregs;
0078 struct clk_bulk_data *clks;
0079 size_t num_clks;
0080 struct ath10k_qmi *qmi;
0081 struct notifier_block nb;
0082 void *notifier;
0083 unsigned long flags;
0084 bool xo_cal_supported;
0085 u32 xo_cal_data;
0086 DECLARE_BITMAP(pending_ce_irqs, CE_COUNT_MAX);
0087 };
0088
0089 static inline struct ath10k_snoc *ath10k_snoc_priv(struct ath10k *ar)
0090 {
0091 return (struct ath10k_snoc *)ar->drv_priv;
0092 }
0093
0094 int ath10k_snoc_fw_indication(struct ath10k *ar, u64 type);
0095 void ath10k_snoc_fw_crashed_dump(struct ath10k *ar);
0096
0097 #endif