18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: ISC */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (c) 2018 The Linux Foundation. All rights reserved. 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#ifndef _SNOC_H_ 78c2ecf20Sopenharmony_ci#define _SNOC_H_ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include "hw.h" 108c2ecf20Sopenharmony_ci#include "ce.h" 118c2ecf20Sopenharmony_ci#include "qmi.h" 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_cistruct ath10k_snoc_drv_priv { 148c2ecf20Sopenharmony_ci enum ath10k_hw_rev hw_rev; 158c2ecf20Sopenharmony_ci u64 dma_mask; 168c2ecf20Sopenharmony_ci u32 msa_size; 178c2ecf20Sopenharmony_ci}; 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cistruct snoc_state { 208c2ecf20Sopenharmony_ci u32 pipe_cfg_addr; 218c2ecf20Sopenharmony_ci u32 svc_to_pipe_map; 228c2ecf20Sopenharmony_ci}; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_cistruct ath10k_snoc_pipe { 258c2ecf20Sopenharmony_ci struct ath10k_ce_pipe *ce_hdl; 268c2ecf20Sopenharmony_ci u8 pipe_num; 278c2ecf20Sopenharmony_ci struct ath10k *hif_ce_state; 288c2ecf20Sopenharmony_ci size_t buf_sz; 298c2ecf20Sopenharmony_ci /* protect ce info */ 308c2ecf20Sopenharmony_ci spinlock_t pipe_lock; 318c2ecf20Sopenharmony_ci struct ath10k_snoc *ar_snoc; 328c2ecf20Sopenharmony_ci}; 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_cistruct ath10k_snoc_target_info { 358c2ecf20Sopenharmony_ci u32 target_version; 368c2ecf20Sopenharmony_ci u32 target_type; 378c2ecf20Sopenharmony_ci u32 target_revision; 388c2ecf20Sopenharmony_ci u32 soc_version; 398c2ecf20Sopenharmony_ci}; 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_cistruct ath10k_snoc_ce_irq { 428c2ecf20Sopenharmony_ci u32 irq_line; 438c2ecf20Sopenharmony_ci}; 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_cienum ath10k_snoc_flags { 468c2ecf20Sopenharmony_ci ATH10K_SNOC_FLAG_REGISTERED, 478c2ecf20Sopenharmony_ci ATH10K_SNOC_FLAG_UNREGISTERING, 488c2ecf20Sopenharmony_ci ATH10K_SNOC_FLAG_RECOVERY, 498c2ecf20Sopenharmony_ci ATH10K_SNOC_FLAG_8BIT_HOST_CAP_QUIRK, 508c2ecf20Sopenharmony_ci}; 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_cistruct clk_bulk_data; 538c2ecf20Sopenharmony_cistruct regulator_bulk_data; 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_cistruct ath10k_snoc { 568c2ecf20Sopenharmony_ci struct platform_device *dev; 578c2ecf20Sopenharmony_ci struct ath10k *ar; 588c2ecf20Sopenharmony_ci unsigned int use_tz; 598c2ecf20Sopenharmony_ci struct ath10k_firmware { 608c2ecf20Sopenharmony_ci struct device *dev; 618c2ecf20Sopenharmony_ci dma_addr_t fw_start_addr; 628c2ecf20Sopenharmony_ci struct iommu_domain *iommu_domain; 638c2ecf20Sopenharmony_ci size_t mapped_mem_size; 648c2ecf20Sopenharmony_ci } fw; 658c2ecf20Sopenharmony_ci void __iomem *mem; 668c2ecf20Sopenharmony_ci dma_addr_t mem_pa; 678c2ecf20Sopenharmony_ci struct ath10k_snoc_target_info target_info; 688c2ecf20Sopenharmony_ci size_t mem_len; 698c2ecf20Sopenharmony_ci struct ath10k_snoc_pipe pipe_info[CE_COUNT_MAX]; 708c2ecf20Sopenharmony_ci struct ath10k_snoc_ce_irq ce_irqs[CE_COUNT_MAX]; 718c2ecf20Sopenharmony_ci struct ath10k_ce ce; 728c2ecf20Sopenharmony_ci struct timer_list rx_post_retry; 738c2ecf20Sopenharmony_ci struct regulator_bulk_data *vregs; 748c2ecf20Sopenharmony_ci size_t num_vregs; 758c2ecf20Sopenharmony_ci struct clk_bulk_data *clks; 768c2ecf20Sopenharmony_ci size_t num_clks; 778c2ecf20Sopenharmony_ci struct ath10k_qmi *qmi; 788c2ecf20Sopenharmony_ci unsigned long flags; 798c2ecf20Sopenharmony_ci bool xo_cal_supported; 808c2ecf20Sopenharmony_ci u32 xo_cal_data; 818c2ecf20Sopenharmony_ci DECLARE_BITMAP(pending_ce_irqs, CE_COUNT_MAX); 828c2ecf20Sopenharmony_ci}; 838c2ecf20Sopenharmony_ci 848c2ecf20Sopenharmony_cistatic inline struct ath10k_snoc *ath10k_snoc_priv(struct ath10k *ar) 858c2ecf20Sopenharmony_ci{ 868c2ecf20Sopenharmony_ci return (struct ath10k_snoc *)ar->drv_priv; 878c2ecf20Sopenharmony_ci} 888c2ecf20Sopenharmony_ci 898c2ecf20Sopenharmony_ciint ath10k_snoc_fw_indication(struct ath10k *ar, u64 type); 908c2ecf20Sopenharmony_civoid ath10k_snoc_fw_crashed_dump(struct ath10k *ar); 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_ci#endif /* _SNOC_H_ */ 93