/* SPDX-License-Identifier: GPL-2.0-only * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved. */ /* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved. */ #ifndef _CNSS_PLAT_IPC_QMI_H #define _CNSS_PLAT_IPC_QMI_H #include "cnss_plat_ipc_service_v01.h" /* As the value of CNSS_PLAT_IPC_MAX_QMI_CLIENTS will keep changing * addition of new QMI client, it cannot be kept in IDL as change in * existing value can cause backward compatibily issue. Keep it here * and update its value with new QMI client ID added in enum in IDL. */ #define CNSS_PLAT_IPC_MAX_QMI_CLIENTS CNSS_PLAT_IPC_DAEMON_QMI_CLIENT_V01 /** * struct cnss_plat_user_config: Config options provided by user space * @dms_mac_addr_supported: DMS MAC address provisioning support * @qdss_hw_trace_override: QDSS config for HW trace enable * @cal_file_available_bitmask: Calibration file available */ struct cnss_plat_ipc_daemon_config { u8 dms_mac_addr_supported; u8 qdss_hw_trace_override; u32 cal_file_available_bitmask; }; typedef void (*cnss_plat_ipc_connection_update)(void *cb_ctx, bool connection_status); typedef void (*cnss_plat_ipc_config_param_req)(uint32_t instance_id, enum cnss_plat_ipc_qmi_config_param_type_v01 param, uint64_t value); struct cnss_plat_ipc_qmi_cb { cnss_plat_ipc_connection_update connection_update_cb; cnss_plat_ipc_config_param_req config_param_cb; }; int cnss_plat_ipc_register(enum cnss_plat_ipc_qmi_client_id_v01 client_id, struct cnss_plat_ipc_qmi_cb *ipc_qmi_callbacks, void *cb_ctx); void cnss_plat_ipc_unregister(enum cnss_plat_ipc_qmi_client_id_v01 client_id, void *cb_ctx); int cnss_plat_ipc_qmi_file_download(enum cnss_plat_ipc_qmi_client_id_v01 client_id, char *file_name, char *buf, u32 *size); int cnss_plat_ipc_qmi_file_upload(enum cnss_plat_ipc_qmi_client_id_v01 client_id, char *file_name, u8 *file_buf, u32 file_size); struct cnss_plat_ipc_daemon_config *cnss_plat_ipc_qmi_daemon_config(void); bool is_ipc_qmi_client_connected(enum cnss_plat_ipc_qmi_client_id_v01 client_id, unsigned int timeout); int cnss_plat_ipc_qmi_svc_init(void); void cnss_plat_ipc_qmi_svc_exit(void); #endif