Loading drivers/net/wireless/cnss2/debug.c +0 −109 Original line number Diff line number Diff line Loading @@ -10,28 +10,10 @@ #include "pci.h" #define MMIO_REG_ACCESS_MEM_TYPE 0xFF #define HEX_DUMP_ROW_SIZE 16 void *cnss_ipc_log_context; void *cnss_ipc_log_long_context; static void cnss_print_hex_dump(const void *buf, int len) { const u8 *ptr = buf; int i, linelen, remaining = len, rowsize = HEX_DUMP_ROW_SIZE; unsigned char linebuf[HEX_DUMP_ROW_SIZE * 3 + 1]; for (i = 0; i < len; i += rowsize) { linelen = min(remaining, rowsize); remaining -= rowsize; hex_dump_to_buffer(ptr + i, linelen, rowsize, 1, linebuf, sizeof(linebuf), false); cnss_pr_dbg("%.8x: %s\n", i, linebuf); } } static int cnss_pin_connect_show(struct seq_file *s, void *data) { struct cnss_plat_data *cnss_priv = s->private; Loading Loading @@ -768,95 +750,6 @@ static const struct file_operations cnss_dynamic_feature_fops = { .llseek = seq_lseek, }; static int cnss_wfc_call_status_debug_show(struct seq_file *s, void *data) { seq_puts(s, "\nUsage: echo <data_len> <hex data> > <debugfs_path>/cnss/wfc_call_status\n"); seq_puts(s, "e.g. Send 4 bytes of hex data for WFC call status using QMI message:\n"); seq_puts(s, "echo '0x4 0xA 0xB 0xC 0xD' > /d/cnss/wfc_call_status\n"); return 0; } static ssize_t cnss_wfc_call_status_debug_write(struct file *fp, const char __user *user_buf, size_t count, loff_t *off) { struct cnss_plat_data *plat_priv = ((struct seq_file *)fp->private_data)->private; char buf[(QMI_WLFW_MAX_WFC_CALL_STATUS_DATA_SIZE_V01 + 1) * 5]; char *sptr, *token; unsigned int len = 0; const char *delim = " "; u32 data_len; u8 data[QMI_WLFW_MAX_WFC_CALL_STATUS_DATA_SIZE_V01] = {0}, data_byte; int ret = 0, i; if (!test_bit(CNSS_FW_READY, &plat_priv->driver_state)) { cnss_pr_err("Firmware is not ready yet\n"); return -EINVAL; } len = min(count, sizeof(buf) - 1); if (copy_from_user(buf, user_buf, len)) return -EFAULT; buf[len] = '\0'; sptr = buf; token = strsep(&sptr, delim); if (!token || !sptr) return -EINVAL; if (kstrtou32(token, 0, &data_len)) return -EINVAL; cnss_pr_dbg("Parsing 0x%x bytes data for WFC call status\n", data_len); if (data_len > QMI_WLFW_MAX_WFC_CALL_STATUS_DATA_SIZE_V01 || data_len == 0) { cnss_pr_err("Invalid data length 0x%x\n", data_len); return -EINVAL; } for (i = 0; i < data_len; i++) { token = strsep(&sptr, delim); if (!token || (!sptr && i < data_len - 1)) { cnss_pr_err("Input data is less than length\n"); return -EINVAL; } if (kstrtou8(token, 0, &data_byte)) { cnss_pr_err("Data format is incorrect\n"); return -EINVAL; } data[i] = data_byte; } cnss_print_hex_dump(data, data_len); ret = cnss_wlfw_wfc_call_status_send_sync(plat_priv, data_len, data); if (ret) return ret; return count; } static int cnss_wfc_call_status_debug_open(struct inode *inode, struct file *file) { return single_open(file, cnss_wfc_call_status_debug_show, inode->i_private); } static const struct file_operations cnss_wfc_call_status_debug_fops = { .read = seq_read, .write = cnss_wfc_call_status_debug_write, .open = cnss_wfc_call_status_debug_open, .owner = THIS_MODULE, .llseek = seq_lseek, }; #ifdef CONFIG_CNSS2_DEBUG static int cnss_create_debug_only_node(struct cnss_plat_data *plat_priv) { Loading @@ -874,8 +767,6 @@ static int cnss_create_debug_only_node(struct cnss_plat_data *plat_priv) &cnss_control_params_debug_fops); debugfs_create_file("dynamic_feature", 0600, root_dentry, plat_priv, &cnss_dynamic_feature_fops); debugfs_create_file("wfc_call_status", 0600, root_dentry, plat_priv, &cnss_wfc_call_status_debug_fops); return 0; } Loading drivers/net/wireless/cnss2/ip_multimedia_subsystem_private_service_v01.c +363 −6 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* Copyright (c) 2019, The Linux Foundation. All rights reserved. */ #include <linux/soc/qcom/qmi.h> /* Copyright (c) 2019-2020, The Linux Foundation. All rights reserved. */ #include "ip_multimedia_subsystem_private_service_v01.h" static struct qmi_elem_info ims_private_service_header_value_v01_ei[] = { { .data_type = QMI_STRING, .elem_len = IMS_PRIVATE_SERVICE_HEADER_STR_LEN_V01 + 1, .elem_size = sizeof(char), .array_type = NO_ARRAY, .tlv_type = 0, .offset = offsetof(struct ims_private_service_header_value_v01, header), }, { .data_type = QMI_STRING, .elem_len = IMS_PRIVATE_SERVICE_HEADER_STR_LEN_V01 + 1, .elem_size = sizeof(char), .array_type = NO_ARRAY, .tlv_type = 0, .offset = offsetof(struct ims_private_service_header_value_v01, value), }, { .data_type = QMI_EOTI, .array_type = NO_ARRAY, .tlv_type = QMI_COMMON_TLV_TYPE, }, }; struct qmi_elem_info ims_private_service_subscribe_for_indications_req_msg_v01_ei[] = { { Loading Loading @@ -74,6 +98,76 @@ ims_private_service_subscribe_for_indications_rsp_msg_v01_ei[] = { }, }; struct qmi_elem_info ims_private_service_mt_invite_ind_msg_v01_ei[] = { { .data_type = QMI_SIGNED_4_BYTE_ENUM, .elem_len = 1, .elem_size = sizeof(enum ims_subscription_type_enum_v01), .array_type = NO_ARRAY, .tlv_type = 0x01, .offset = offsetof(struct ims_private_service_mt_invite_ind_msg_v01, subscription_type), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x10, .offset = offsetof(struct ims_private_service_mt_invite_ind_msg_v01, iccid_valid), }, { .data_type = QMI_STRING, .elem_len = IMS_PRIVATE_SERVICE_MAX_ICCID_LEN_V01 + 1, .elem_size = sizeof(char), .array_type = NO_ARRAY, .tlv_type = 0x10, .offset = offsetof(struct ims_private_service_mt_invite_ind_msg_v01, iccid), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x11, .offset = offsetof(struct ims_private_service_mt_invite_ind_msg_v01, header_value_list_valid), }, { .data_type = QMI_DATA_LEN, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x11, .offset = offsetof(struct ims_private_service_mt_invite_ind_msg_v01, header_value_list_len), }, { .data_type = QMI_STRUCT, .elem_len = IMS_PRIVATE_SERVICE_MAX_MT_INVITE_HEADERS_V01, .elem_size = sizeof(struct ims_private_service_header_value_v01), .array_type = VAR_LEN_ARRAY, .tlv_type = 0x11, .offset = offsetof(struct ims_private_service_mt_invite_ind_msg_v01, header_value_list), .ei_array = ims_private_service_header_value_v01_ei, }, { .data_type = QMI_EOTI, .array_type = NO_ARRAY, .tlv_type = QMI_COMMON_TLV_TYPE, }, }; struct qmi_elem_info ims_private_service_wfc_call_status_ind_msg_v01_ei[] = { { .data_type = QMI_UNSIGNED_1_BYTE, Loading @@ -81,13 +175,276 @@ struct qmi_elem_info ims_private_service_wfc_call_status_ind_msg_v01_ei[] = { .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x01, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, wfc_call_active), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x10, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, all_wfc_calls_held_valid), }, { .data_type = QMI_UNSIGNED_1_BYTE, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x10, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, all_wfc_calls_held), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x11, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, is_wfc_emergency_valid), }, { .data_type = QMI_UNSIGNED_1_BYTE, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x11, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, is_wfc_emergency), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x12, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, twt_ims_start_valid), }, { .data_type = QMI_UNSIGNED_8_BYTE, .elem_len = 1, .elem_size = sizeof(u64), .array_type = NO_ARRAY, .tlv_type = 0x12, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, twt_ims_start), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x13, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, twt_ims_int_valid), }, { .data_type = QMI_UNSIGNED_2_BYTE, .elem_len = 1, .elem_size = sizeof(u16), .array_type = NO_ARRAY, .tlv_type = 0x13, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, twt_ims_int), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x14, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, media_quality_valid), }, { .data_type = QMI_SIGNED_4_BYTE_ENUM, .elem_len = 1, .elem_size = sizeof(enum wfc_media_quality_v01), .array_type = NO_ARRAY, .tlv_type = 0x14, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, media_quality), }, { .data_type = QMI_EOTI, .array_type = NO_ARRAY, .tlv_type = QMI_COMMON_TLV_TYPE, }, }; struct qmi_elem_info ims_private_service_wfc_call_twt_config_req_msg_v01_ei[] = { { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x10, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_start_valid), }, { .data_type = QMI_UNSIGNED_8_BYTE, .elem_len = 1, .elem_size = sizeof(u64), .array_type = NO_ARRAY, .tlv_type = 0x10, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_start), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x11, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_int_valid), }, { .data_type = QMI_UNSIGNED_2_BYTE, .elem_len = 1, .elem_size = sizeof(u16), .array_type = NO_ARRAY, .tlv_type = 0x11, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_int), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x12, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_upo_valid), }, { .data_type = QMI_UNSIGNED_2_BYTE, .elem_len = 1, .elem_size = sizeof(u16), .array_type = NO_ARRAY, .tlv_type = 0x12, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_upo), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x13, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_sp_valid), }, { .data_type = QMI_UNSIGNED_2_BYTE, .elem_len = 1, .elem_size = sizeof(u16), .array_type = NO_ARRAY, .tlv_type = 0x13, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_sp), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x14, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_dl_valid), }, { .data_type = QMI_UNSIGNED_2_BYTE, .elem_len = 1, .elem_size = sizeof(u16), .array_type = NO_ARRAY, .tlv_type = 0x14, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_dl), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x15, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_config_changed_valid), }, { .data_type = QMI_UNSIGNED_1_BYTE, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x15, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_config_changed), }, { .data_type = QMI_EOTI, .array_type = NO_ARRAY, .tlv_type = QMI_COMMON_TLV_TYPE, }, }; struct qmi_elem_info ims_private_service_wfc_call_twt_config_rsp_msg_v01_ei[] = { { .data_type = QMI_STRUCT, .elem_len = 1, .elem_size = sizeof(struct qmi_response_type_v01), .array_type = NO_ARRAY, .tlv_type = 0x02, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_rsp_msg_v01, resp), .ei_array = qmi_response_type_v01_ei, }, { .data_type = QMI_EOTI, .array_type = NO_ARRAY, .tlv_type = QMI_COMMON_TLV_TYPE, }, }; drivers/net/wireless/cnss2/ip_multimedia_subsystem_private_service_v01.h +102 −11 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* Copyright (c) 2019, The Linux Foundation. All rights reserved. */ /* Copyright (c) 2020, The Linux Foundation. All rights reserved. */ #ifndef IP_MULTIMEDIA_SUBSYSTEM_PRIVATE_SERVICE_V01_H #define IP_MULTIMEDIA_SUBSYSTEM_PRIVATE_SERVICE_V01_H #include <linux/soc/qcom/qmi.h> #define IMSPRIVATE_SERVICE_ID_V01 0x4D #define IMSPRIVATE_SERVICE_VERS_V01 0x01 #define IMSPRIVATE_SERVICE_MAX_MSG_LEN 8 #define QMI_IMS_PRIVATE_SERVICE_SUBSCRIBE_FOR_INDICATIONS_RSP_V01 0x003E #define QMI_IMS_PRIVATE_SERVICE_SUBSCRIBE_FOR_INDICATIONS_REQ_V01 0x003E #define QMI_IMS_PRIVATE_SERVICE_WFC_CALL_STATUS_IND_V01 0x0040 #define QMI_IMS_PRIVATE_SERVICE_SUBSCRIBE_FOR_INDICATIONS_REQ_V01 0x003E #define QMI_IMS_PRIVATE_SERVICE_MT_INVITE_IND_V01 0x003F #define QMI_IMS_PRIVATE_SERVICE_WFC_CALL_TWT_CONFIG_RSP_V01 0x0041 #define QMI_IMS_PRIVATE_SERVICE_WFC_CALL_TWT_CONFIG_REQ_V01 0x0041 #define IMS_PRIVATE_SERVICE_MAX_MT_INVITE_HEADERS_V01 15 #define IMS_PRIVATE_SERVICE_HEADER_STR_LEN_V01 1024 #define IMS_PRIVATE_SERVICE_MAX_ICCID_LEN_V01 21 enum ims_common_resp_enum_v01 { IMS_COMMON_RESP_ENUM_MIN_VAL_V01 = INT_MIN, IMS_COMMON_MSG_NO_ERR_V01 = 0, IMS_COMMON_MSG_IMS_NOT_READY_V01 = 1, IMS_COMMON_MSG_FILE_NOT_AVAILABLE_V01 = 2, IMS_COMMON_MSG_READ_FAILED_V01 = 3, IMS_COMMON_MSG_WRITE_FAILED_V01 = 4, IMS_COMMON_MSG_OTHER_INTERNAL_ERR_V01 = 5, IMS_COMMON_RESP_ENUM_MAX_VAL_V01 = INT_MAX, }; enum ims_subscription_type_enum_v01 { IMS_SUBSCRIPTION_TYPE_ENUM_MIN_VAL_V01 = INT_MIN, IMS_SUBSCRIPTION_TYPE_NONE_V01 = -1, IMS_SUBSCRIPTION_TYPE_PRIMARY_V01 = 0, IMS_SUBSCRIPTION_TYPE_SECONDARY_V01 = 1, IMS_SUBSCRIPTION_TYPE_TERTIARY_V01 = 2, IMS_SUBSCRIPTION_TYPE_ENUM_MAX_VAL_V01 = INT_MAX, }; enum wfc_media_quality_v01 { WFC_MEDIA_QUALITY_MIN_VAL_V01 = INT_MIN, WFC_MEDIA_QUAL_NOT_AVAILABLE_V01 = 0, WFC_MEDIA_QUAL_BAD_V01 = 1, WFC_MEDIA_QUAL_GOOD_V01 = 2, WFC_MEDIA_QUAL_EXCELLENT_V01 = 3, WFC_MEDIA_QUALITY_MAX_VAL_V01 = INT_MAX, }; struct ims_private_service_header_value_v01 { char header[IMS_PRIVATE_SERVICE_HEADER_STR_LEN_V01 + 1]; char value[IMS_PRIVATE_SERVICE_HEADER_STR_LEN_V01 + 1]; }; struct ims_private_service_subscribe_for_indications_req_msg_v01 { u8 mt_invite_valid; Loading @@ -21,23 +62,73 @@ struct ims_private_service_subscribe_for_indications_req_msg_v01 { }; #define IMS_PRIVATE_SERVICE_SUBSCRIBE_FOR_INDICATIONS_REQ_MSG_V01_MAX_MSG_LEN 8 extern struct qmi_elem_info ims_private_service_subscribe_for_indications_req_msg_v01_ei[]; extern struct qmi_elem_info ims_private_service_subscribe_for_indications_req_msg_v01_ei[]; struct ims_private_service_subscribe_for_indications_rsp_msg_v01 { struct qmi_response_type_v01 resp; }; #define IMS_PRIVATE_SERVICE_SUBSCRIBE_FOR_INDICATIONS_RSP_MSG_V01_MAX_MSG_LEN 7 extern struct qmi_elem_info ims_private_service_subscribe_for_indications_rsp_msg_v01_ei[]; extern struct qmi_elem_info ims_private_service_subscribe_for_indications_rsp_msg_v01_ei[]; struct ims_private_service_mt_invite_ind_msg_v01 { enum ims_subscription_type_enum_v01 subscription_type; u8 iccid_valid; char iccid[IMS_PRIVATE_SERVICE_MAX_ICCID_LEN_V01 + 1]; u8 header_value_list_valid; u32 header_value_list_len; struct ims_private_service_header_value_v01 header_value_list[IMS_PRIVATE_SERVICE_MAX_MT_INVITE_HEADERS_V01]; }; #define IMS_PRIVATE_SERVICE_MT_INVITE_IND_MSG_V01_MAX_MSG_LEN 30815 extern struct qmi_elem_info ims_private_service_mt_invite_ind_msg_v01_ei[]; struct ims_private_service_wfc_call_status_ind_msg_v01 { u8 wfc_call_active; u8 all_wfc_calls_held_valid; u8 all_wfc_calls_held; u8 is_wfc_emergency_valid; u8 is_wfc_emergency; u8 twt_ims_start_valid; u64 twt_ims_start; u8 twt_ims_int_valid; u16 twt_ims_int; u8 media_quality_valid; enum wfc_media_quality_v01 media_quality; }; #define IMS_PRIVATE_SERVICE_WFC_CALL_STATUS_IND_MSG_V01_MAX_MSG_LEN 35 extern struct qmi_elem_info ims_private_service_wfc_call_status_ind_msg_v01_ei[]; struct ims_private_service_wfc_call_twt_config_req_msg_v01 { u8 twt_sta_start_valid; u64 twt_sta_start; u8 twt_sta_int_valid; u16 twt_sta_int; u8 twt_sta_upo_valid; u16 twt_sta_upo; u8 twt_sta_sp_valid; u16 twt_sta_sp; u8 twt_sta_dl_valid; u16 twt_sta_dl; u8 twt_sta_config_changed_valid; u8 twt_sta_config_changed; }; #define IMS_PRIVATE_SERVICE_WFC_CALL_TWT_CONFIG_REQ_MSG_V01_MAX_MSG_LEN 35 extern struct qmi_elem_info ims_private_service_wfc_call_twt_config_req_msg_v01_ei[]; struct ims_private_service_wfc_call_twt_config_rsp_msg_v01 { struct qmi_response_type_v01 resp; }; #define IMS_PRIVATE_SERVICE_WFC_CALL_STATUS_IND_MSG_V01_MAX_MSG_LEN 4 extern struct qmi_elem_info ims_private_service_wfc_call_status_ind_msg_v01_ei[]; #define IMS_PRIVATE_SERVICE_WFC_CALL_TWT_CONFIG_RSP_MSG_V01_MAX_MSG_LEN 7 extern struct qmi_elem_info ims_private_service_wfc_call_twt_config_rsp_msg_v01_ei[]; #endif drivers/net/wireless/cnss2/qmi.c +168 −32 File changed.Preview size limit exceeded, changes collapsed. Show changes drivers/net/wireless/cnss2/qmi.h +4 −11 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ #ifndef _CNSS_QMI_H #define _CNSS_QMI_H #include <linux/soc/qcom/qmi.h> #include "wlan_firmware_service_v01.h" struct cnss_plat_data; Loading @@ -29,7 +29,6 @@ struct cnss_qmi_event_qdss_trace_save_data { }; #ifdef CONFIG_CNSS2_QMI #include "wlan_firmware_service_v01.h" #include "coexistence_service_v01.h" #include "ip_multimedia_subsystem_private_service_v01.h" Loading Loading @@ -61,8 +60,6 @@ int cnss_wlfw_antenna_grant_send_sync(struct cnss_plat_data *plat_priv); int cnss_wlfw_dynamic_feature_mask_send_sync(struct cnss_plat_data *plat_priv); int cnss_wlfw_get_info_send_sync(struct cnss_plat_data *plat_priv, int type, void *cmd, int cmd_len); int cnss_wlfw_wfc_call_status_send_sync(struct cnss_plat_data *plat_priv, u32 data_len, const void *data); int cnss_register_coex_service(struct cnss_plat_data *plat_priv); void cnss_unregister_coex_service(struct cnss_plat_data *plat_priv); int coex_antenna_switch_to_wlan_send_sync_msg(struct cnss_plat_data *plat_priv); Loading Loading @@ -184,13 +181,6 @@ int cnss_wlfw_get_info_send_sync(struct cnss_plat_data *plat_priv, int type, return 0; } static inline int cnss_wlfw_wfc_call_status_send_sync(struct cnss_plat_data *plat_priv, u32 data_len, const void *data); { return 0; } static inline int cnss_register_coex_service(struct cnss_plat_data *plat_priv) { Loading @@ -208,6 +198,9 @@ int coex_antenna_switch_to_wlan_send_sync_msg(struct cnss_plat_data *plat_priv) static inline int coex_antenna_switch_to_mdm_send_sync_msg(struct cnss_plat_data *plat_priv) { return 0; } static inline int cnss_wlfw_qdss_trace_mem_info_send_sync(struct cnss_plat_data *plat_priv) Loading Loading
drivers/net/wireless/cnss2/debug.c +0 −109 Original line number Diff line number Diff line Loading @@ -10,28 +10,10 @@ #include "pci.h" #define MMIO_REG_ACCESS_MEM_TYPE 0xFF #define HEX_DUMP_ROW_SIZE 16 void *cnss_ipc_log_context; void *cnss_ipc_log_long_context; static void cnss_print_hex_dump(const void *buf, int len) { const u8 *ptr = buf; int i, linelen, remaining = len, rowsize = HEX_DUMP_ROW_SIZE; unsigned char linebuf[HEX_DUMP_ROW_SIZE * 3 + 1]; for (i = 0; i < len; i += rowsize) { linelen = min(remaining, rowsize); remaining -= rowsize; hex_dump_to_buffer(ptr + i, linelen, rowsize, 1, linebuf, sizeof(linebuf), false); cnss_pr_dbg("%.8x: %s\n", i, linebuf); } } static int cnss_pin_connect_show(struct seq_file *s, void *data) { struct cnss_plat_data *cnss_priv = s->private; Loading Loading @@ -768,95 +750,6 @@ static const struct file_operations cnss_dynamic_feature_fops = { .llseek = seq_lseek, }; static int cnss_wfc_call_status_debug_show(struct seq_file *s, void *data) { seq_puts(s, "\nUsage: echo <data_len> <hex data> > <debugfs_path>/cnss/wfc_call_status\n"); seq_puts(s, "e.g. Send 4 bytes of hex data for WFC call status using QMI message:\n"); seq_puts(s, "echo '0x4 0xA 0xB 0xC 0xD' > /d/cnss/wfc_call_status\n"); return 0; } static ssize_t cnss_wfc_call_status_debug_write(struct file *fp, const char __user *user_buf, size_t count, loff_t *off) { struct cnss_plat_data *plat_priv = ((struct seq_file *)fp->private_data)->private; char buf[(QMI_WLFW_MAX_WFC_CALL_STATUS_DATA_SIZE_V01 + 1) * 5]; char *sptr, *token; unsigned int len = 0; const char *delim = " "; u32 data_len; u8 data[QMI_WLFW_MAX_WFC_CALL_STATUS_DATA_SIZE_V01] = {0}, data_byte; int ret = 0, i; if (!test_bit(CNSS_FW_READY, &plat_priv->driver_state)) { cnss_pr_err("Firmware is not ready yet\n"); return -EINVAL; } len = min(count, sizeof(buf) - 1); if (copy_from_user(buf, user_buf, len)) return -EFAULT; buf[len] = '\0'; sptr = buf; token = strsep(&sptr, delim); if (!token || !sptr) return -EINVAL; if (kstrtou32(token, 0, &data_len)) return -EINVAL; cnss_pr_dbg("Parsing 0x%x bytes data for WFC call status\n", data_len); if (data_len > QMI_WLFW_MAX_WFC_CALL_STATUS_DATA_SIZE_V01 || data_len == 0) { cnss_pr_err("Invalid data length 0x%x\n", data_len); return -EINVAL; } for (i = 0; i < data_len; i++) { token = strsep(&sptr, delim); if (!token || (!sptr && i < data_len - 1)) { cnss_pr_err("Input data is less than length\n"); return -EINVAL; } if (kstrtou8(token, 0, &data_byte)) { cnss_pr_err("Data format is incorrect\n"); return -EINVAL; } data[i] = data_byte; } cnss_print_hex_dump(data, data_len); ret = cnss_wlfw_wfc_call_status_send_sync(plat_priv, data_len, data); if (ret) return ret; return count; } static int cnss_wfc_call_status_debug_open(struct inode *inode, struct file *file) { return single_open(file, cnss_wfc_call_status_debug_show, inode->i_private); } static const struct file_operations cnss_wfc_call_status_debug_fops = { .read = seq_read, .write = cnss_wfc_call_status_debug_write, .open = cnss_wfc_call_status_debug_open, .owner = THIS_MODULE, .llseek = seq_lseek, }; #ifdef CONFIG_CNSS2_DEBUG static int cnss_create_debug_only_node(struct cnss_plat_data *plat_priv) { Loading @@ -874,8 +767,6 @@ static int cnss_create_debug_only_node(struct cnss_plat_data *plat_priv) &cnss_control_params_debug_fops); debugfs_create_file("dynamic_feature", 0600, root_dentry, plat_priv, &cnss_dynamic_feature_fops); debugfs_create_file("wfc_call_status", 0600, root_dentry, plat_priv, &cnss_wfc_call_status_debug_fops); return 0; } Loading
drivers/net/wireless/cnss2/ip_multimedia_subsystem_private_service_v01.c +363 −6 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* Copyright (c) 2019, The Linux Foundation. All rights reserved. */ #include <linux/soc/qcom/qmi.h> /* Copyright (c) 2019-2020, The Linux Foundation. All rights reserved. */ #include "ip_multimedia_subsystem_private_service_v01.h" static struct qmi_elem_info ims_private_service_header_value_v01_ei[] = { { .data_type = QMI_STRING, .elem_len = IMS_PRIVATE_SERVICE_HEADER_STR_LEN_V01 + 1, .elem_size = sizeof(char), .array_type = NO_ARRAY, .tlv_type = 0, .offset = offsetof(struct ims_private_service_header_value_v01, header), }, { .data_type = QMI_STRING, .elem_len = IMS_PRIVATE_SERVICE_HEADER_STR_LEN_V01 + 1, .elem_size = sizeof(char), .array_type = NO_ARRAY, .tlv_type = 0, .offset = offsetof(struct ims_private_service_header_value_v01, value), }, { .data_type = QMI_EOTI, .array_type = NO_ARRAY, .tlv_type = QMI_COMMON_TLV_TYPE, }, }; struct qmi_elem_info ims_private_service_subscribe_for_indications_req_msg_v01_ei[] = { { Loading Loading @@ -74,6 +98,76 @@ ims_private_service_subscribe_for_indications_rsp_msg_v01_ei[] = { }, }; struct qmi_elem_info ims_private_service_mt_invite_ind_msg_v01_ei[] = { { .data_type = QMI_SIGNED_4_BYTE_ENUM, .elem_len = 1, .elem_size = sizeof(enum ims_subscription_type_enum_v01), .array_type = NO_ARRAY, .tlv_type = 0x01, .offset = offsetof(struct ims_private_service_mt_invite_ind_msg_v01, subscription_type), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x10, .offset = offsetof(struct ims_private_service_mt_invite_ind_msg_v01, iccid_valid), }, { .data_type = QMI_STRING, .elem_len = IMS_PRIVATE_SERVICE_MAX_ICCID_LEN_V01 + 1, .elem_size = sizeof(char), .array_type = NO_ARRAY, .tlv_type = 0x10, .offset = offsetof(struct ims_private_service_mt_invite_ind_msg_v01, iccid), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x11, .offset = offsetof(struct ims_private_service_mt_invite_ind_msg_v01, header_value_list_valid), }, { .data_type = QMI_DATA_LEN, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x11, .offset = offsetof(struct ims_private_service_mt_invite_ind_msg_v01, header_value_list_len), }, { .data_type = QMI_STRUCT, .elem_len = IMS_PRIVATE_SERVICE_MAX_MT_INVITE_HEADERS_V01, .elem_size = sizeof(struct ims_private_service_header_value_v01), .array_type = VAR_LEN_ARRAY, .tlv_type = 0x11, .offset = offsetof(struct ims_private_service_mt_invite_ind_msg_v01, header_value_list), .ei_array = ims_private_service_header_value_v01_ei, }, { .data_type = QMI_EOTI, .array_type = NO_ARRAY, .tlv_type = QMI_COMMON_TLV_TYPE, }, }; struct qmi_elem_info ims_private_service_wfc_call_status_ind_msg_v01_ei[] = { { .data_type = QMI_UNSIGNED_1_BYTE, Loading @@ -81,13 +175,276 @@ struct qmi_elem_info ims_private_service_wfc_call_status_ind_msg_v01_ei[] = { .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x01, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, wfc_call_active), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x10, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, all_wfc_calls_held_valid), }, { .data_type = QMI_UNSIGNED_1_BYTE, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x10, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, all_wfc_calls_held), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x11, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, is_wfc_emergency_valid), }, { .data_type = QMI_UNSIGNED_1_BYTE, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x11, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, is_wfc_emergency), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x12, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, twt_ims_start_valid), }, { .data_type = QMI_UNSIGNED_8_BYTE, .elem_len = 1, .elem_size = sizeof(u64), .array_type = NO_ARRAY, .tlv_type = 0x12, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, twt_ims_start), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x13, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, twt_ims_int_valid), }, { .data_type = QMI_UNSIGNED_2_BYTE, .elem_len = 1, .elem_size = sizeof(u16), .array_type = NO_ARRAY, .tlv_type = 0x13, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, twt_ims_int), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x14, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, media_quality_valid), }, { .data_type = QMI_SIGNED_4_BYTE_ENUM, .elem_len = 1, .elem_size = sizeof(enum wfc_media_quality_v01), .array_type = NO_ARRAY, .tlv_type = 0x14, .offset = offsetof(struct ims_private_service_wfc_call_status_ind_msg_v01, media_quality), }, { .data_type = QMI_EOTI, .array_type = NO_ARRAY, .tlv_type = QMI_COMMON_TLV_TYPE, }, }; struct qmi_elem_info ims_private_service_wfc_call_twt_config_req_msg_v01_ei[] = { { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x10, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_start_valid), }, { .data_type = QMI_UNSIGNED_8_BYTE, .elem_len = 1, .elem_size = sizeof(u64), .array_type = NO_ARRAY, .tlv_type = 0x10, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_start), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x11, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_int_valid), }, { .data_type = QMI_UNSIGNED_2_BYTE, .elem_len = 1, .elem_size = sizeof(u16), .array_type = NO_ARRAY, .tlv_type = 0x11, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_int), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x12, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_upo_valid), }, { .data_type = QMI_UNSIGNED_2_BYTE, .elem_len = 1, .elem_size = sizeof(u16), .array_type = NO_ARRAY, .tlv_type = 0x12, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_upo), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x13, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_sp_valid), }, { .data_type = QMI_UNSIGNED_2_BYTE, .elem_len = 1, .elem_size = sizeof(u16), .array_type = NO_ARRAY, .tlv_type = 0x13, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_sp), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x14, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_dl_valid), }, { .data_type = QMI_UNSIGNED_2_BYTE, .elem_len = 1, .elem_size = sizeof(u16), .array_type = NO_ARRAY, .tlv_type = 0x14, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_dl), }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x15, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_config_changed_valid), }, { .data_type = QMI_UNSIGNED_1_BYTE, .elem_len = 1, .elem_size = sizeof(u8), .array_type = NO_ARRAY, .tlv_type = 0x15, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_req_msg_v01, twt_sta_config_changed), }, { .data_type = QMI_EOTI, .array_type = NO_ARRAY, .tlv_type = QMI_COMMON_TLV_TYPE, }, }; struct qmi_elem_info ims_private_service_wfc_call_twt_config_rsp_msg_v01_ei[] = { { .data_type = QMI_STRUCT, .elem_len = 1, .elem_size = sizeof(struct qmi_response_type_v01), .array_type = NO_ARRAY, .tlv_type = 0x02, .offset = offsetof(struct ims_private_service_wfc_call_twt_config_rsp_msg_v01, resp), .ei_array = qmi_response_type_v01_ei, }, { .data_type = QMI_EOTI, .array_type = NO_ARRAY, .tlv_type = QMI_COMMON_TLV_TYPE, }, };
drivers/net/wireless/cnss2/ip_multimedia_subsystem_private_service_v01.h +102 −11 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0-only */ /* Copyright (c) 2019, The Linux Foundation. All rights reserved. */ /* Copyright (c) 2020, The Linux Foundation. All rights reserved. */ #ifndef IP_MULTIMEDIA_SUBSYSTEM_PRIVATE_SERVICE_V01_H #define IP_MULTIMEDIA_SUBSYSTEM_PRIVATE_SERVICE_V01_H #include <linux/soc/qcom/qmi.h> #define IMSPRIVATE_SERVICE_ID_V01 0x4D #define IMSPRIVATE_SERVICE_VERS_V01 0x01 #define IMSPRIVATE_SERVICE_MAX_MSG_LEN 8 #define QMI_IMS_PRIVATE_SERVICE_SUBSCRIBE_FOR_INDICATIONS_RSP_V01 0x003E #define QMI_IMS_PRIVATE_SERVICE_SUBSCRIBE_FOR_INDICATIONS_REQ_V01 0x003E #define QMI_IMS_PRIVATE_SERVICE_WFC_CALL_STATUS_IND_V01 0x0040 #define QMI_IMS_PRIVATE_SERVICE_SUBSCRIBE_FOR_INDICATIONS_REQ_V01 0x003E #define QMI_IMS_PRIVATE_SERVICE_MT_INVITE_IND_V01 0x003F #define QMI_IMS_PRIVATE_SERVICE_WFC_CALL_TWT_CONFIG_RSP_V01 0x0041 #define QMI_IMS_PRIVATE_SERVICE_WFC_CALL_TWT_CONFIG_REQ_V01 0x0041 #define IMS_PRIVATE_SERVICE_MAX_MT_INVITE_HEADERS_V01 15 #define IMS_PRIVATE_SERVICE_HEADER_STR_LEN_V01 1024 #define IMS_PRIVATE_SERVICE_MAX_ICCID_LEN_V01 21 enum ims_common_resp_enum_v01 { IMS_COMMON_RESP_ENUM_MIN_VAL_V01 = INT_MIN, IMS_COMMON_MSG_NO_ERR_V01 = 0, IMS_COMMON_MSG_IMS_NOT_READY_V01 = 1, IMS_COMMON_MSG_FILE_NOT_AVAILABLE_V01 = 2, IMS_COMMON_MSG_READ_FAILED_V01 = 3, IMS_COMMON_MSG_WRITE_FAILED_V01 = 4, IMS_COMMON_MSG_OTHER_INTERNAL_ERR_V01 = 5, IMS_COMMON_RESP_ENUM_MAX_VAL_V01 = INT_MAX, }; enum ims_subscription_type_enum_v01 { IMS_SUBSCRIPTION_TYPE_ENUM_MIN_VAL_V01 = INT_MIN, IMS_SUBSCRIPTION_TYPE_NONE_V01 = -1, IMS_SUBSCRIPTION_TYPE_PRIMARY_V01 = 0, IMS_SUBSCRIPTION_TYPE_SECONDARY_V01 = 1, IMS_SUBSCRIPTION_TYPE_TERTIARY_V01 = 2, IMS_SUBSCRIPTION_TYPE_ENUM_MAX_VAL_V01 = INT_MAX, }; enum wfc_media_quality_v01 { WFC_MEDIA_QUALITY_MIN_VAL_V01 = INT_MIN, WFC_MEDIA_QUAL_NOT_AVAILABLE_V01 = 0, WFC_MEDIA_QUAL_BAD_V01 = 1, WFC_MEDIA_QUAL_GOOD_V01 = 2, WFC_MEDIA_QUAL_EXCELLENT_V01 = 3, WFC_MEDIA_QUALITY_MAX_VAL_V01 = INT_MAX, }; struct ims_private_service_header_value_v01 { char header[IMS_PRIVATE_SERVICE_HEADER_STR_LEN_V01 + 1]; char value[IMS_PRIVATE_SERVICE_HEADER_STR_LEN_V01 + 1]; }; struct ims_private_service_subscribe_for_indications_req_msg_v01 { u8 mt_invite_valid; Loading @@ -21,23 +62,73 @@ struct ims_private_service_subscribe_for_indications_req_msg_v01 { }; #define IMS_PRIVATE_SERVICE_SUBSCRIBE_FOR_INDICATIONS_REQ_MSG_V01_MAX_MSG_LEN 8 extern struct qmi_elem_info ims_private_service_subscribe_for_indications_req_msg_v01_ei[]; extern struct qmi_elem_info ims_private_service_subscribe_for_indications_req_msg_v01_ei[]; struct ims_private_service_subscribe_for_indications_rsp_msg_v01 { struct qmi_response_type_v01 resp; }; #define IMS_PRIVATE_SERVICE_SUBSCRIBE_FOR_INDICATIONS_RSP_MSG_V01_MAX_MSG_LEN 7 extern struct qmi_elem_info ims_private_service_subscribe_for_indications_rsp_msg_v01_ei[]; extern struct qmi_elem_info ims_private_service_subscribe_for_indications_rsp_msg_v01_ei[]; struct ims_private_service_mt_invite_ind_msg_v01 { enum ims_subscription_type_enum_v01 subscription_type; u8 iccid_valid; char iccid[IMS_PRIVATE_SERVICE_MAX_ICCID_LEN_V01 + 1]; u8 header_value_list_valid; u32 header_value_list_len; struct ims_private_service_header_value_v01 header_value_list[IMS_PRIVATE_SERVICE_MAX_MT_INVITE_HEADERS_V01]; }; #define IMS_PRIVATE_SERVICE_MT_INVITE_IND_MSG_V01_MAX_MSG_LEN 30815 extern struct qmi_elem_info ims_private_service_mt_invite_ind_msg_v01_ei[]; struct ims_private_service_wfc_call_status_ind_msg_v01 { u8 wfc_call_active; u8 all_wfc_calls_held_valid; u8 all_wfc_calls_held; u8 is_wfc_emergency_valid; u8 is_wfc_emergency; u8 twt_ims_start_valid; u64 twt_ims_start; u8 twt_ims_int_valid; u16 twt_ims_int; u8 media_quality_valid; enum wfc_media_quality_v01 media_quality; }; #define IMS_PRIVATE_SERVICE_WFC_CALL_STATUS_IND_MSG_V01_MAX_MSG_LEN 35 extern struct qmi_elem_info ims_private_service_wfc_call_status_ind_msg_v01_ei[]; struct ims_private_service_wfc_call_twt_config_req_msg_v01 { u8 twt_sta_start_valid; u64 twt_sta_start; u8 twt_sta_int_valid; u16 twt_sta_int; u8 twt_sta_upo_valid; u16 twt_sta_upo; u8 twt_sta_sp_valid; u16 twt_sta_sp; u8 twt_sta_dl_valid; u16 twt_sta_dl; u8 twt_sta_config_changed_valid; u8 twt_sta_config_changed; }; #define IMS_PRIVATE_SERVICE_WFC_CALL_TWT_CONFIG_REQ_MSG_V01_MAX_MSG_LEN 35 extern struct qmi_elem_info ims_private_service_wfc_call_twt_config_req_msg_v01_ei[]; struct ims_private_service_wfc_call_twt_config_rsp_msg_v01 { struct qmi_response_type_v01 resp; }; #define IMS_PRIVATE_SERVICE_WFC_CALL_STATUS_IND_MSG_V01_MAX_MSG_LEN 4 extern struct qmi_elem_info ims_private_service_wfc_call_status_ind_msg_v01_ei[]; #define IMS_PRIVATE_SERVICE_WFC_CALL_TWT_CONFIG_RSP_MSG_V01_MAX_MSG_LEN 7 extern struct qmi_elem_info ims_private_service_wfc_call_twt_config_rsp_msg_v01_ei[]; #endif
drivers/net/wireless/cnss2/qmi.c +168 −32 File changed.Preview size limit exceeded, changes collapsed. Show changes
drivers/net/wireless/cnss2/qmi.h +4 −11 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ #ifndef _CNSS_QMI_H #define _CNSS_QMI_H #include <linux/soc/qcom/qmi.h> #include "wlan_firmware_service_v01.h" struct cnss_plat_data; Loading @@ -29,7 +29,6 @@ struct cnss_qmi_event_qdss_trace_save_data { }; #ifdef CONFIG_CNSS2_QMI #include "wlan_firmware_service_v01.h" #include "coexistence_service_v01.h" #include "ip_multimedia_subsystem_private_service_v01.h" Loading Loading @@ -61,8 +60,6 @@ int cnss_wlfw_antenna_grant_send_sync(struct cnss_plat_data *plat_priv); int cnss_wlfw_dynamic_feature_mask_send_sync(struct cnss_plat_data *plat_priv); int cnss_wlfw_get_info_send_sync(struct cnss_plat_data *plat_priv, int type, void *cmd, int cmd_len); int cnss_wlfw_wfc_call_status_send_sync(struct cnss_plat_data *plat_priv, u32 data_len, const void *data); int cnss_register_coex_service(struct cnss_plat_data *plat_priv); void cnss_unregister_coex_service(struct cnss_plat_data *plat_priv); int coex_antenna_switch_to_wlan_send_sync_msg(struct cnss_plat_data *plat_priv); Loading Loading @@ -184,13 +181,6 @@ int cnss_wlfw_get_info_send_sync(struct cnss_plat_data *plat_priv, int type, return 0; } static inline int cnss_wlfw_wfc_call_status_send_sync(struct cnss_plat_data *plat_priv, u32 data_len, const void *data); { return 0; } static inline int cnss_register_coex_service(struct cnss_plat_data *plat_priv) { Loading @@ -208,6 +198,9 @@ int coex_antenna_switch_to_wlan_send_sync_msg(struct cnss_plat_data *plat_priv) static inline int coex_antenna_switch_to_mdm_send_sync_msg(struct cnss_plat_data *plat_priv) { return 0; } static inline int cnss_wlfw_qdss_trace_mem_info_send_sync(struct cnss_plat_data *plat_priv) Loading