1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /* Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
3 * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
4 */
5
6 #ifndef _CNSS_PLAT_IPC_QMI_H
7 #define _CNSS_PLAT_IPC_QMI_H
8
9 #include "cnss_plat_ipc_service_v01.h"
10
11 /* As the value of CNSS_PLAT_IPC_MAX_QMI_CLIENTS will keep changing
12 * addition of new QMI client, it cannot be kept in IDL as change in
13 * existing value can cause backward compatibily issue. Keep it here
14 * and update its value with new QMI client ID added in enum in IDL.
15 */
16 #define CNSS_PLAT_IPC_MAX_QMI_CLIENTS CNSS_PLAT_IPC_DAEMON_QMI_CLIENT_V01
17
18 /**
19 * cnss_plat_ipc_daemon_config: Config options provided by cnss-daemon
20 * @initialized: Set when daemon configs are initialized
21 * @dms_mac_addr_supported: DMS MAC address provisioning support
22 * @qdss_hw_trace_override: QDSS config for HW trace enable
23 * @cal_file_available_bitmask: Calibration file available
24 */
25 struct cnss_plat_ipc_daemon_config {
26 u8 initialized;
27 u8 dms_mac_addr_supported;
28 u8 qdss_hw_trace_override;
29 u32 cal_file_available_bitmask;
30 };
31
32 typedef void (*cnss_plat_ipc_connection_update)(void *cb_ctx,
33 bool connection_status);
34
35 /**
36 * Persistent caldb file store which is a runtime FW param based feature will
37 * fail if CONFIG_CNSS_PLAT_IPC_QMI_SVC is not enabled.
38 **/
39 #if IS_ENABLED(CONFIG_CNSS_PLAT_IPC_QMI_SVC)
40 int cnss_plat_ipc_register(enum cnss_plat_ipc_qmi_client_id_v01 client_id,
41 cnss_plat_ipc_connection_update
42 connection_update_cb, void *cb_ctx);
43 void cnss_plat_ipc_unregister(enum cnss_plat_ipc_qmi_client_id_v01 client_id,
44 void *cb_ctx);
45 int cnss_plat_ipc_qmi_file_download(enum cnss_plat_ipc_qmi_client_id_v01
46 client_id, char *file_name, char *buf,
47 u32 *size);
48 int cnss_plat_ipc_qmi_file_upload(enum cnss_plat_ipc_qmi_client_id_v01
49 client_id, char *file_name, u8 *file_buf,
50 u32 file_size);
51 struct cnss_plat_ipc_daemon_config *cnss_plat_ipc_qmi_daemon_config(void);
52 #else
53 static inline
cnss_plat_ipc_register(enum cnss_plat_ipc_qmi_client_id_v01 client_id,cnss_plat_ipc_connection_update connection_update_cb,void * cb_ctx)54 int cnss_plat_ipc_register(enum cnss_plat_ipc_qmi_client_id_v01 client_id,
55 cnss_plat_ipc_connection_update
56 connection_update_cb, void *cb_ctx)
57 {
58 return 0;
59 }
60
61 static inline
cnss_plat_ipc_unregister(enum cnss_plat_ipc_qmi_client_id_v01 client_id,void * cb_ctx)62 void cnss_plat_ipc_unregister(enum cnss_plat_ipc_qmi_client_id_v01 client_id,
63 void *cb_ctx)
64 {
65 }
66
67 static inline
cnss_plat_ipc_qmi_file_download(enum cnss_plat_ipc_qmi_client_id_v01 client_id,char * file_name,char * buf,u32 * size)68 int cnss_plat_ipc_qmi_file_download(enum cnss_plat_ipc_qmi_client_id_v01
69 client_id, char *file_name, char *buf,
70 u32 *size)
71 {
72 return -EOPNOTSUPP;
73 }
74
75 static inline
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)76 int cnss_plat_ipc_qmi_file_upload(enum cnss_plat_ipc_qmi_client_id_v01
77 client_id, char *file_name, u8 *file_buf,
78 u32 file_size)
79 {
80 return -EOPNOTSUPP;
81 }
82
83 static inline
cnss_plat_ipc_qmi_daemon_config(void)84 struct cnss_plat_ipc_daemon_config *cnss_plat_ipc_qmi_daemon_config(void)
85 {
86 return NULL;
87 }
88
89 #endif
90 #endif
91