162306a36Sopenharmony_ci/* SPDX-License-Identifier: ISC */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2018 The Linux Foundation. All rights reserved. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci#ifndef _ATH10K_QMI_H_ 662306a36Sopenharmony_ci#define _ATH10K_QMI_H_ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include <linux/soc/qcom/qmi.h> 962306a36Sopenharmony_ci#include <linux/qrtr.h> 1062306a36Sopenharmony_ci#include "qmi_wlfw_v01.h" 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#define MAX_NUM_MEMORY_REGIONS 2 1362306a36Sopenharmony_ci#define MAX_TIMESTAMP_LEN 32 1462306a36Sopenharmony_ci#define MAX_BUILD_ID_LEN 128 1562306a36Sopenharmony_ci#define MAX_NUM_CAL_V01 5 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cienum ath10k_qmi_driver_event_type { 1862306a36Sopenharmony_ci ATH10K_QMI_EVENT_SERVER_ARRIVE, 1962306a36Sopenharmony_ci ATH10K_QMI_EVENT_SERVER_EXIT, 2062306a36Sopenharmony_ci ATH10K_QMI_EVENT_FW_READY_IND, 2162306a36Sopenharmony_ci ATH10K_QMI_EVENT_FW_DOWN_IND, 2262306a36Sopenharmony_ci ATH10K_QMI_EVENT_MSA_READY_IND, 2362306a36Sopenharmony_ci ATH10K_QMI_EVENT_MAX, 2462306a36Sopenharmony_ci}; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_cistruct ath10k_msa_mem_info { 2762306a36Sopenharmony_ci phys_addr_t addr; 2862306a36Sopenharmony_ci u32 size; 2962306a36Sopenharmony_ci bool secure; 3062306a36Sopenharmony_ci}; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_cistruct ath10k_qmi_chip_info { 3362306a36Sopenharmony_ci u32 chip_id; 3462306a36Sopenharmony_ci u32 chip_family; 3562306a36Sopenharmony_ci}; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_cistruct ath10k_qmi_board_info { 3862306a36Sopenharmony_ci u32 board_id; 3962306a36Sopenharmony_ci}; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_cistruct ath10k_qmi_soc_info { 4262306a36Sopenharmony_ci u32 soc_id; 4362306a36Sopenharmony_ci}; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_cistruct ath10k_qmi_cal_data { 4662306a36Sopenharmony_ci u32 cal_id; 4762306a36Sopenharmony_ci u32 total_size; 4862306a36Sopenharmony_ci u8 *data; 4962306a36Sopenharmony_ci}; 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_cistruct ath10k_tgt_pipe_cfg { 5262306a36Sopenharmony_ci __le32 pipe_num; 5362306a36Sopenharmony_ci __le32 pipe_dir; 5462306a36Sopenharmony_ci __le32 nentries; 5562306a36Sopenharmony_ci __le32 nbytes_max; 5662306a36Sopenharmony_ci __le32 flags; 5762306a36Sopenharmony_ci __le32 reserved; 5862306a36Sopenharmony_ci}; 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_cistruct ath10k_svc_pipe_cfg { 6162306a36Sopenharmony_ci __le32 service_id; 6262306a36Sopenharmony_ci __le32 pipe_dir; 6362306a36Sopenharmony_ci __le32 pipe_num; 6462306a36Sopenharmony_ci}; 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_cistruct ath10k_shadow_reg_cfg { 6762306a36Sopenharmony_ci __le16 ce_id; 6862306a36Sopenharmony_ci __le16 reg_offset; 6962306a36Sopenharmony_ci}; 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_cistruct ath10k_qmi_wlan_enable_cfg { 7262306a36Sopenharmony_ci u32 num_ce_tgt_cfg; 7362306a36Sopenharmony_ci struct ath10k_tgt_pipe_cfg *ce_tgt_cfg; 7462306a36Sopenharmony_ci u32 num_ce_svc_pipe_cfg; 7562306a36Sopenharmony_ci struct ath10k_svc_pipe_cfg *ce_svc_cfg; 7662306a36Sopenharmony_ci u32 num_shadow_reg_cfg; 7762306a36Sopenharmony_ci struct ath10k_shadow_reg_cfg *shadow_reg_cfg; 7862306a36Sopenharmony_ci}; 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_cistruct ath10k_qmi_driver_event { 8162306a36Sopenharmony_ci struct list_head list; 8262306a36Sopenharmony_ci enum ath10k_qmi_driver_event_type type; 8362306a36Sopenharmony_ci void *data; 8462306a36Sopenharmony_ci}; 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_cienum ath10k_qmi_state { 8762306a36Sopenharmony_ci ATH10K_QMI_STATE_INIT_DONE, 8862306a36Sopenharmony_ci ATH10K_QMI_STATE_DEINIT, 8962306a36Sopenharmony_ci}; 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_cistruct ath10k_qmi { 9262306a36Sopenharmony_ci struct ath10k *ar; 9362306a36Sopenharmony_ci struct qmi_handle qmi_hdl; 9462306a36Sopenharmony_ci struct sockaddr_qrtr sq; 9562306a36Sopenharmony_ci struct work_struct event_work; 9662306a36Sopenharmony_ci struct workqueue_struct *event_wq; 9762306a36Sopenharmony_ci struct list_head event_list; 9862306a36Sopenharmony_ci spinlock_t event_lock; /* spinlock for qmi event list */ 9962306a36Sopenharmony_ci u32 nr_mem_region; 10062306a36Sopenharmony_ci struct ath10k_msa_mem_info mem_region[MAX_NUM_MEMORY_REGIONS]; 10162306a36Sopenharmony_ci struct ath10k_qmi_chip_info chip_info; 10262306a36Sopenharmony_ci struct ath10k_qmi_board_info board_info; 10362306a36Sopenharmony_ci struct ath10k_qmi_soc_info soc_info; 10462306a36Sopenharmony_ci char fw_build_id[MAX_BUILD_ID_LEN + 1]; 10562306a36Sopenharmony_ci u32 fw_version; 10662306a36Sopenharmony_ci bool fw_ready; 10762306a36Sopenharmony_ci char fw_build_timestamp[MAX_TIMESTAMP_LEN + 1]; 10862306a36Sopenharmony_ci struct ath10k_qmi_cal_data cal_data[MAX_NUM_CAL_V01]; 10962306a36Sopenharmony_ci bool msa_fixed_perm; 11062306a36Sopenharmony_ci enum ath10k_qmi_state state; 11162306a36Sopenharmony_ci}; 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ciint ath10k_qmi_wlan_enable(struct ath10k *ar, 11462306a36Sopenharmony_ci struct ath10k_qmi_wlan_enable_cfg *config, 11562306a36Sopenharmony_ci enum wlfw_driver_mode_enum_v01 mode, 11662306a36Sopenharmony_ci const char *version); 11762306a36Sopenharmony_ciint ath10k_qmi_wlan_disable(struct ath10k *ar); 11862306a36Sopenharmony_ciint ath10k_qmi_init(struct ath10k *ar, u32 msa_size); 11962306a36Sopenharmony_ciint ath10k_qmi_deinit(struct ath10k *ar); 12062306a36Sopenharmony_ciint ath10k_qmi_set_fw_log_mode(struct ath10k *ar, u8 fw_log_mode); 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci#endif /* ATH10K_QMI_H */ 123