*** Add support for wifi QMI client handshakes ***
v3 cover *** Add support for wifi QMI client handshakes ***
Add QMI client handshakes for Q6 integrated WLAN connectivity subsystem. This module is responsible for communicating WLAN control messages to FW over QMI interface. This patch series enables the qmi handshakes required for WCN3990 chipset.
QUALCOMM MSM Interface(QMI) provides the control interface between components running b/w remote processors with underlying transport layer based on integrated chipset(shared memory) or discrete chipset(PCI/USB/SDIO/UART).
QMI client driver implementation is based on qmi framework https://lwn.net/Articles/729924/.
Below is the sequence of qmi handshake.
QMI CLIENT(APPS) QMI SERVER(FW in Q6)
<------wlan service discoverd----
-----connect to wlam qmi service----->
------------wlan info request----->
<------------wlan info resp------------
------------msa info req-------->
<------------msa info resp------------
------------msa ready req-------->
<------------msa ready resp------------
<------------msa ready indication-------
------------capability req------->
<------------capability resp------------
------------qmi bdf req--------->
<------------qmi bdf resp------------
------------qmi cal trigger------->
<------------ QMI FW ready indication-------WLAN fw is running in modem Q6 dsp as user PD(protection domain). Sequence of user PD loading is as following.
1) Remote proc PIL driver loads the modem fw/ROOT PD.
2) As part of ROOT pd boot-up it queries to a daemon(pd_mapper) running in apps processor to determine how many usre pd's to be loaded by the remote processor(Q6).
3) Once user pd info is known to remote processor it loads the user pd via tftp protocol.
https://github.com/andersson/pd-mapper
https://github.com/andersson/tqftpserv
Changes in V3:
Addressed review comments from v2 version.
Removed msa-size from dt binding and added reference to reserved-memory/reserved-memory.txt.
Changes in V2:
Removed qmi client driver and integrated qmi client handshakes in snoc platform driver. Addressed comments on v1 version.
Switched to ath10k bdf download infra(board-2.bin)
Added MSA fixed region support to support unload use-case.
Unified logging.
Testing:
Tested all qmi handshakes, driver load/unload and STA/SAP sanity testing. Tested HW: SDM845(WCN3990) Tested FW: WLAN.HL.2.0-01192-QCAHLSWMTPLZ-1
Govind Singh (5):
ath10k: Add qmi service helpers for wcn3990 qmi client
dt: bindings: add bindings for msa memory region
firmware: qcom: scm: Add WLAN VMID for Qualcomm SCM interface
ath10k: Add debug mask for QMI layer
ath10k: Add QMI message handshake for wcn3990 client
Rakesh Pillai (1):
ath10k: Add support to create boardname for non-bmi target
.../bindings/net/wireless/qcom,ath10k.txt | 13 + drivers/net/wireless/ath/ath10k/Kconfig | 1 + drivers/net/wireless/ath/ath10k/Makefile | 4 +- drivers/net/wireless/ath/ath10k/core.c | 14 +- drivers/net/wireless/ath/ath10k/core.h | 4 + drivers/net/wireless/ath/ath10k/debug.h | 1 + drivers/net/wireless/ath/ath10k/qmi.c | 1021 ++++++++ drivers/net/wireless/ath/ath10k/qmi.h | 129 + .../net/wireless/ath/ath10k/qmi_wlfw_v01.c | 2072 +++++++++++++++++ .../net/wireless/ath/ath10k/qmi_wlfw_v01.h | 677 ++++++ drivers/net/wireless/ath/ath10k/snoc.c | 215 +- drivers/net/wireless/ath/ath10k/snoc.h | 4 + include/linux/qcom_scm.h | 4 +- 13 files changed, 4148 insertions(+), 11 deletions(-) create mode 100644 drivers/net/wireless/ath/ath10k/qmi.c create mode 100644 drivers/net/wireless/ath/ath10k/qmi.h create mode 100644 drivers/net/wireless/ath/ath10k/qmi_wlfw_v01.c create mode 100644 drivers/net/wireless/ath/ath10k/qmi_wlfw_v01.h
Signature · 1 line
2.17.0
PATCH v3 1/6 ath10k: Add qmi service helpers for wcn3990 qmi client
WLAN qmi server running in Q6 exposes host to target cold boot qmi handshakes. Add WLAN QMI service helpers for ath10k wcn3990 qmi client.
--- .../net/wireless/ath/ath10k/qmi_wlfw_v01.c | 2072 +++++++++++++++++ .../net/wireless/ath/ath10k/qmi_wlfw_v01.h | 677 ++++++ 2 files changed, 2749 insertions(+) create mode 100644 drivers/net/wireless/ath/ath10k/qmi_wlfw_v01.c create mode 100644 drivers/net/wireless/ath/ath10k/qmi_wlfw_v01.h
drivers/net/wireless/ath/ath10k/qmi_wlfw_v01.c new file +2072 -0
@@ -0,0 +1,2072 @@ +/* +* Copyright (c) 2018 The Linux Foundation. All rights reserved. +* +* Permission to use, copy, modify, and/or distribute this software for any +* purpose with or without fee is hereby granted, provided that the above +* copyright notice and this permission notice appear in all copies. +* +* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +#include <linux/soc/qcom/qmi.h> +#include <linux/types.h> +#include "qmi_wlfw_v01.h" + +static struct qmi_elem_info wlfw_ce_tgt_pipe_cfg_s_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_ce_tgt_pipe_cfg_s_v01 , + pipe_num), + }, + { + .data_type =QMI_SIGNED_4_BYTE_ENUM , + .elem_len =1 , + .elem_size =sizeof (enum wlfw_pipedir_enum_v01 ), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_ce_tgt_pipe_cfg_s_v01 , + pipe_dir), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_ce_tgt_pipe_cfg_s_v01 , + nentries), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_ce_tgt_pipe_cfg_s_v01 , + nbytes_max), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_ce_tgt_pipe_cfg_s_v01 , + flags), + }, + {} +}; + +static struct qmi_elem_info wlfw_ce_svc_pipe_cfg_s_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_ce_svc_pipe_cfg_s_v01 , + service_id), + }, + { + .data_type =QMI_SIGNED_4_BYTE_ENUM , + .elem_len =1 , + .elem_size =sizeof (enum wlfw_pipedir_enum_v01 ), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_ce_svc_pipe_cfg_s_v01 , + pipe_dir), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_ce_svc_pipe_cfg_s_v01 , + pipe_num), + }, + {} +}; + +static struct qmi_elem_info wlfw_shadow_reg_cfg_s_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_2_BYTE , + .elem_len =1 , + .elem_size =sizeof (u16), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_shadow_reg_cfg_s_v01 , + id), + }, + { + .data_type =QMI_UNSIGNED_2_BYTE , + .elem_len =1 , + .elem_size =sizeof (u16), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_shadow_reg_cfg_s_v01 , + offset), + }, + {} +}; + +static struct qmi_elem_info wlfw_shadow_reg_v2_cfg_s_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_shadow_reg_v2_cfg_s_v01 , + addr), + }, + {} +}; + +static struct qmi_elem_info wlfw_memory_region_info_s_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_8_BYTE , + .elem_len =1 , + .elem_size =sizeof (u64), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_memory_region_info_s_v01 , + region_addr), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_memory_region_info_s_v01 , + size), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_memory_region_info_s_v01 , + secure_flag), + }, + {} +}; + +static struct qmi_elem_info wlfw_mem_cfg_s_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_8_BYTE , + .elem_len =1 , + .elem_size =sizeof (u64), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_mem_cfg_s_v01 , + offset), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_mem_cfg_s_v01 , + size), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_mem_cfg_s_v01 , + secure_flag), + }, + {} +}; + +static struct qmi_elem_info wlfw_mem_seg_s_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_mem_seg_s_v01 , + size), + }, + { + .data_type =QMI_SIGNED_4_BYTE_ENUM , + .elem_len =1 , + .elem_size =sizeof (enum wlfw_mem_type_enum_v01 ), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_mem_seg_s_v01 , + type), + }, + { + .data_type =QMI_DATA_LEN , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_mem_seg_s_v01 , + mem_cfg_len), + }, + { + .data_type =QMI_STRUCT , + .elem_len =QMI_WLFW_MAX_NUM_MEM_CFG_V01 , + .elem_size =sizeof (struct wlfw_mem_cfg_s_v01 ), + .array_type =VAR_LEN_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_mem_seg_s_v01 , + mem_cfg), + .ei_array = wlfw_mem_cfg_s_v01_ei, + }, + {} +}; + +static struct qmi_elem_info wlfw_mem_seg_resp_s_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_8_BYTE , + .elem_len =1 , + .elem_size =sizeof (u64), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_mem_seg_resp_s_v01 , + addr), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_mem_seg_resp_s_v01 , + size), + }, + { + .data_type =QMI_SIGNED_4_BYTE_ENUM , + .elem_len =1 , + .elem_size =sizeof (enum wlfw_mem_type_enum_v01 ), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_mem_seg_resp_s_v01 , + type), + }, + {} +}; + +static struct qmi_elem_info wlfw_rf_chip_info_s_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_rf_chip_info_s_v01 , + chip_id), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_rf_chip_info_s_v01 , + chip_family), + }, + {} +}; + +static struct qmi_elem_info wlfw_rf_board_info_s_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_rf_board_info_s_v01 , + board_id), + }, + {} +}; + +static struct qmi_elem_info wlfw_soc_info_s_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_soc_info_s_v01 , + soc_id), + }, + {} +}; + +static struct qmi_elem_info wlfw_fw_version_info_s_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_fw_version_info_s_v01 , + fw_version), + }, + { + .data_type =QMI_STRING , + .elem_len =QMI_WLFW_MAX_TIMESTAMP_LEN_V01 +1 , + .elem_size =sizeof (char ), + .array_type =NO_ARRAY , + .tlv_type =0 , + .offset = offsetof(struct wlfw_fw_version_info_s_v01 , + fw_build_timestamp), + }, + {} +}; + +struct qmi_elem_info wlfw_ind_register_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 wlfw_ind_register_req_msg_v01 , + fw_ready_enable_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + fw_ready_enable), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + initiate_cal_download_enable_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + initiate_cal_download_enable), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + initiate_cal_update_enable_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + initiate_cal_update_enable), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + msa_ready_enable_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + msa_ready_enable), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x14 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + pin_connect_result_enable_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x14 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + pin_connect_result_enable), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x15 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + client_id_valid), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x15 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + client_id), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x16 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + request_mem_enable_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x16 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + request_mem_enable), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x17 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + mem_ready_enable_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x17 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + mem_ready_enable), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x18 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + fw_init_done_enable_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x18 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + fw_init_done_enable), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x19 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + rejuvenate_enable_valid), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x19 , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + rejuvenate_enable), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x1A , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + xo_cal_enable_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x1A , + .offset = offsetof(struct wlfw_ind_register_req_msg_v01 , + xo_cal_enable), + }, + {} +}; + +struct qmi_elem_info wlfw_ind_register_resp_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 wlfw_ind_register_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_ind_register_resp_msg_v01 , + fw_status_valid), + }, + { + .data_type =QMI_UNSIGNED_8_BYTE , + .elem_len =1 , + .elem_size =sizeof (u64), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_ind_register_resp_msg_v01 , + fw_status), + }, + {} +}; + +struct qmi_elem_info wlfw_fw_ready_ind_msg_v01_ei[] = { + {} +}; + +struct qmi_elem_info wlfw_msa_ready_ind_msg_v01_ei[] = { + {} +}; + +struct qmi_elem_info wlfw_pin_connect_result_ind_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 wlfw_pin_connect_result_ind_msg_v01 , + pwr_pin_result_valid), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_pin_connect_result_ind_msg_v01 , + pwr_pin_result), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_pin_connect_result_ind_msg_v01 , + phy_io_pin_result_valid), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_pin_connect_result_ind_msg_v01 , + phy_io_pin_result), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_pin_connect_result_ind_msg_v01 , + rf_pin_result_valid), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_pin_connect_result_ind_msg_v01 , + rf_pin_result), + }, + {} +}; + +struct qmi_elem_info wlfw_wlan_mode_req_msg_v01_ei[] = { + { + .data_type =QMI_SIGNED_4_BYTE_ENUM , + .elem_len =1 , + .elem_size =sizeof (enum wlfw_driver_mode_enum_v01 ), + .array_type =NO_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_wlan_mode_req_msg_v01 , + mode), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_wlan_mode_req_msg_v01 , + hw_debug_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_wlan_mode_req_msg_v01 , + hw_debug), + }, + {} +}; + +struct qmi_elem_info wlfw_wlan_mode_resp_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 wlfw_wlan_mode_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_wlan_cfg_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 wlfw_wlan_cfg_req_msg_v01 , + host_version_valid), + }, + { + .data_type =QMI_STRING , + .elem_len =QMI_WLFW_MAX_STR_LEN_V01 +1 , + .elem_size =sizeof (char ), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01 , + host_version), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01 , + tgt_cfg_valid), + }, + { + .data_type =QMI_DATA_LEN , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01 , + tgt_cfg_len), + }, + { + .data_type =QMI_STRUCT , + .elem_len =QMI_WLFW_MAX_NUM_CE_V01 , + .elem_size =sizeof (struct wlfw_ce_tgt_pipe_cfg_s_v01 ), + .array_type =VAR_LEN_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01 , + tgt_cfg), + .ei_array = wlfw_ce_tgt_pipe_cfg_s_v01_ei, + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01 , + svc_cfg_valid), + }, + { + .data_type =QMI_DATA_LEN , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01 , + svc_cfg_len), + }, + { + .data_type =QMI_STRUCT , + .elem_len =QMI_WLFW_MAX_NUM_SVC_V01 , + .elem_size =sizeof (struct wlfw_ce_svc_pipe_cfg_s_v01 ), + .array_type =VAR_LEN_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01 , + svc_cfg), + .ei_array = wlfw_ce_svc_pipe_cfg_s_v01_ei, + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01 , + shadow_reg_valid), + }, + { + .data_type =QMI_DATA_LEN , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01 , + shadow_reg_len), + }, + { + .data_type =QMI_STRUCT , + .elem_len =QMI_WLFW_MAX_NUM_SHADOW_REG_V01 , + .elem_size =sizeof (struct wlfw_shadow_reg_cfg_s_v01 ), + .array_type =VAR_LEN_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01 , + shadow_reg), + .ei_array = wlfw_shadow_reg_cfg_s_v01_ei, + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x14 , + .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01 , + shadow_reg_v2_valid), + }, + { + .data_type =QMI_DATA_LEN , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x14 , + .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01 , + shadow_reg_v2_len), + }, + { + .data_type =QMI_STRUCT , + .elem_len =QMI_WLFW_MAX_SHADOW_REG_V2 , + .elem_size =sizeof (struct wlfw_shadow_reg_v2_cfg_s_v01 ), + .array_type =VAR_LEN_ARRAY , + .tlv_type =0x14 , + .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01 , + shadow_reg_v2), + .ei_array = wlfw_shadow_reg_v2_cfg_s_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_wlan_cfg_resp_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 wlfw_wlan_cfg_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_cap_req_msg_v01_ei[] = { + {} +}; + +struct qmi_elem_info wlfw_cap_resp_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 wlfw_cap_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_cap_resp_msg_v01 , + chip_info_valid), + }, + { + .data_type =QMI_STRUCT , + .elem_len =1 , + .elem_size =sizeof (struct wlfw_rf_chip_info_s_v01 ), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_cap_resp_msg_v01 , + chip_info), + .ei_array = wlfw_rf_chip_info_s_v01_ei, + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_cap_resp_msg_v01 , + board_info_valid), + }, + { + .data_type =QMI_STRUCT , + .elem_len =1 , + .elem_size =sizeof (struct wlfw_rf_board_info_s_v01 ), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_cap_resp_msg_v01 , + board_info), + .ei_array = wlfw_rf_board_info_s_v01_ei, + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_cap_resp_msg_v01 , + soc_info_valid), + }, + { + .data_type =QMI_STRUCT , + .elem_len =1 , + .elem_size =sizeof (struct wlfw_soc_info_s_v01 ), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_cap_resp_msg_v01 , + soc_info), + .ei_array = wlfw_soc_info_s_v01_ei, + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_cap_resp_msg_v01 , + fw_version_info_valid), + }, + { + .data_type =QMI_STRUCT , + .elem_len =1 , + .elem_size =sizeof (struct wlfw_fw_version_info_s_v01 ), + .array_type =NO_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_cap_resp_msg_v01 , + fw_version_info), + .ei_array = wlfw_fw_version_info_s_v01_ei, + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x14 , + .offset = offsetof(struct wlfw_cap_resp_msg_v01 , + fw_build_id_valid), + }, + { + .data_type =QMI_STRING , + .elem_len =QMI_WLFW_MAX_BUILD_ID_LEN_V01 +1 , + .elem_size =sizeof (char ), + .array_type =NO_ARRAY , + .tlv_type =0x14 , + .offset = offsetof(struct wlfw_cap_resp_msg_v01 , + fw_build_id), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x15 , + .offset = offsetof(struct wlfw_cap_resp_msg_v01 , + num_macs_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x15 , + .offset = offsetof(struct wlfw_cap_resp_msg_v01 , + num_macs), + }, + {} +}; + +struct qmi_elem_info wlfw_bdf_download_req_msg_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_bdf_download_req_msg_v01 , + valid), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_bdf_download_req_msg_v01 , + file_id_valid), + }, + { + .data_type =QMI_SIGNED_4_BYTE_ENUM , + .elem_len =1 , + .elem_size =sizeof (enum wlfw_cal_temp_id_enum_v01 ), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_bdf_download_req_msg_v01 , + file_id), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_bdf_download_req_msg_v01 , + total_size_valid), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_bdf_download_req_msg_v01 , + total_size), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_bdf_download_req_msg_v01 , + seg_id_valid), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_bdf_download_req_msg_v01 , + seg_id), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_bdf_download_req_msg_v01 , + data_valid), + }, + { + .data_type =QMI_DATA_LEN , + .elem_len =1 , + .elem_size =sizeof (u16), + .array_type =NO_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_bdf_download_req_msg_v01 , + data_len), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =QMI_WLFW_MAX_DATA_SIZE_V01 , + .elem_size =sizeof (u8), + .array_type =VAR_LEN_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_bdf_download_req_msg_v01 , + data), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x14 , + .offset = offsetof(struct wlfw_bdf_download_req_msg_v01 , + end_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x14 , + .offset = offsetof(struct wlfw_bdf_download_req_msg_v01 , + end), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x15 , + .offset = offsetof(struct wlfw_bdf_download_req_msg_v01 , + bdf_type_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x15 , + .offset = offsetof(struct wlfw_bdf_download_req_msg_v01 , + bdf_type), + }, + {} +}; + +struct qmi_elem_info wlfw_bdf_download_resp_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 wlfw_bdf_download_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_cal_report_req_msg_v01_ei[] = { + { + .data_type =QMI_DATA_LEN , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_cal_report_req_msg_v01 , + meta_data_len), + }, + { + .data_type =QMI_SIGNED_4_BYTE_ENUM , + .elem_len =QMI_WLFW_MAX_NUM_CAL_V01 , + .elem_size =sizeof (enum wlfw_cal_temp_id_enum_v01 ), + .array_type =VAR_LEN_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_cal_report_req_msg_v01 , + meta_data), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_cal_report_req_msg_v01 , + xo_cal_data_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_cal_report_req_msg_v01 , + xo_cal_data), + }, + {} +}; + +struct qmi_elem_info wlfw_cal_report_resp_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 wlfw_cal_report_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_initiate_cal_download_ind_msg_v01_ei[] = { + { + .data_type =QMI_SIGNED_4_BYTE_ENUM , + .elem_len =1 , + .elem_size =sizeof (enum wlfw_cal_temp_id_enum_v01 ), + .array_type =NO_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_initiate_cal_download_ind_msg_v01 , + cal_id), + }, + {} +}; + +struct qmi_elem_info wlfw_cal_download_req_msg_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_cal_download_req_msg_v01 , + valid), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_cal_download_req_msg_v01 , + file_id_valid), + }, + { + .data_type =QMI_SIGNED_4_BYTE_ENUM , + .elem_len =1 , + .elem_size =sizeof (enum wlfw_cal_temp_id_enum_v01 ), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_cal_download_req_msg_v01 , + file_id), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_cal_download_req_msg_v01 , + total_size_valid), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_cal_download_req_msg_v01 , + total_size), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_cal_download_req_msg_v01 , + seg_id_valid), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_cal_download_req_msg_v01 , + seg_id), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_cal_download_req_msg_v01 , + data_valid), + }, + { + .data_type =QMI_DATA_LEN , + .elem_len =1 , + .elem_size =sizeof (u16), + .array_type =NO_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_cal_download_req_msg_v01 , + data_len), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =QMI_WLFW_MAX_DATA_SIZE_V01 , + .elem_size =sizeof (u8), + .array_type =VAR_LEN_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_cal_download_req_msg_v01 , + data), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x14 , + .offset = offsetof(struct wlfw_cal_download_req_msg_v01 , + end_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x14 , + .offset = offsetof(struct wlfw_cal_download_req_msg_v01 , + end), + }, + {} +}; + +struct qmi_elem_info wlfw_cal_download_resp_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 wlfw_cal_download_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_initiate_cal_update_ind_msg_v01_ei[] = { + { + .data_type =QMI_SIGNED_4_BYTE_ENUM , + .elem_len =1 , + .elem_size =sizeof (enum wlfw_cal_temp_id_enum_v01 ), + .array_type =NO_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_initiate_cal_update_ind_msg_v01 , + cal_id), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x02 , + .offset = offsetof(struct wlfw_initiate_cal_update_ind_msg_v01 , + total_size), + }, + {} +}; + +struct qmi_elem_info wlfw_cal_update_req_msg_v01_ei[] = { + { + .data_type =QMI_SIGNED_4_BYTE_ENUM , + .elem_len =1 , + .elem_size =sizeof (enum wlfw_cal_temp_id_enum_v01 ), + .array_type =NO_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_cal_update_req_msg_v01 , + cal_id), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x02 , + .offset = offsetof(struct wlfw_cal_update_req_msg_v01 , + seg_id), + }, + {} +}; + +struct qmi_elem_info wlfw_cal_update_resp_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 wlfw_cal_update_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_cal_update_resp_msg_v01 , + file_id_valid), + }, + { + .data_type =QMI_SIGNED_4_BYTE_ENUM , + .elem_len =1 , + .elem_size =sizeof (enum wlfw_cal_temp_id_enum_v01 ), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_cal_update_resp_msg_v01 , + file_id), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_cal_update_resp_msg_v01 , + total_size_valid), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_cal_update_resp_msg_v01 , + total_size), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_cal_update_resp_msg_v01 , + seg_id_valid), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_cal_update_resp_msg_v01 , + seg_id), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_cal_update_resp_msg_v01 , + data_valid), + }, + { + .data_type =QMI_DATA_LEN , + .elem_len =1 , + .elem_size =sizeof (u16), + .array_type =NO_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_cal_update_resp_msg_v01 , + data_len), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =QMI_WLFW_MAX_DATA_SIZE_V01 , + .elem_size =sizeof (u8), + .array_type =VAR_LEN_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_cal_update_resp_msg_v01 , + data), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x14 , + .offset = offsetof(struct wlfw_cal_update_resp_msg_v01 , + end_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x14 , + .offset = offsetof(struct wlfw_cal_update_resp_msg_v01 , + end), + }, + {} +}; + +struct qmi_elem_info wlfw_msa_info_req_msg_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_8_BYTE , + .elem_len =1 , + .elem_size =sizeof (u64), + .array_type =NO_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_msa_info_req_msg_v01 , + msa_addr), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x02 , + .offset = offsetof(struct wlfw_msa_info_req_msg_v01 , + size), + }, + {} +}; + +struct qmi_elem_info wlfw_msa_info_resp_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 wlfw_msa_info_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + { + .data_type =QMI_DATA_LEN , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x03 , + .offset = offsetof(struct wlfw_msa_info_resp_msg_v01 , + mem_region_info_len), + }, + { + .data_type =QMI_STRUCT , + .elem_len =QMI_WLFW_MAX_MEM_REG_V01 , + .elem_size =sizeof (struct wlfw_memory_region_info_s_v01 ), + .array_type =VAR_LEN_ARRAY , + .tlv_type =0x03 , + .offset = offsetof(struct wlfw_msa_info_resp_msg_v01 , + mem_region_info), + .ei_array = wlfw_memory_region_info_s_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_msa_ready_req_msg_v01_ei[] = { + {} +}; + +struct qmi_elem_info wlfw_msa_ready_resp_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 wlfw_msa_ready_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_ini_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 wlfw_ini_req_msg_v01 , + enablefwlog_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_ini_req_msg_v01 , + enablefwlog), + }, + {} +}; + +struct qmi_elem_info wlfw_ini_resp_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 wlfw_ini_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_athdiag_read_req_msg_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_athdiag_read_req_msg_v01 , + offset), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x02 , + .offset = offsetof(struct wlfw_athdiag_read_req_msg_v01 , + mem_type), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x03 , + .offset = offsetof(struct wlfw_athdiag_read_req_msg_v01 , + data_len), + }, + {} +}; + +struct qmi_elem_info wlfw_athdiag_read_resp_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 wlfw_athdiag_read_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_athdiag_read_resp_msg_v01 , + data_valid), + }, + { + .data_type =QMI_DATA_LEN , + .elem_len =1 , + .elem_size =sizeof (u16), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_athdiag_read_resp_msg_v01 , + data_len), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =QMI_WLFW_MAX_ATHDIAG_DATA_SIZE_V01 , + .elem_size =sizeof (u8), + .array_type =VAR_LEN_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_athdiag_read_resp_msg_v01 , + data), + }, + {} +}; + +struct qmi_elem_info wlfw_athdiag_write_req_msg_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_athdiag_write_req_msg_v01 , + offset), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x02 , + .offset = offsetof(struct wlfw_athdiag_write_req_msg_v01 , + mem_type), + }, + { + .data_type =QMI_DATA_LEN , + .elem_len =1 , + .elem_size =sizeof (u16), + .array_type =NO_ARRAY , + .tlv_type =0x03 , + .offset = offsetof(struct wlfw_athdiag_write_req_msg_v01 , + data_len), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =QMI_WLFW_MAX_ATHDIAG_DATA_SIZE_V01 , + .elem_size =sizeof (u8), + .array_type =VAR_LEN_ARRAY , + .tlv_type =0x03 , + .offset = offsetof(struct wlfw_athdiag_write_req_msg_v01 , + data), + }, + {} +}; + +struct qmi_elem_info wlfw_athdiag_write_resp_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 wlfw_athdiag_write_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_vbatt_req_msg_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_8_BYTE , + .elem_len =1 , + .elem_size =sizeof (u64), + .array_type =NO_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_vbatt_req_msg_v01 , + voltage_uv), + }, + {} +}; + +struct qmi_elem_info wlfw_vbatt_resp_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 wlfw_vbatt_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_mac_addr_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 wlfw_mac_addr_req_msg_v01 , + mac_addr_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =QMI_WLFW_MAC_ADDR_SIZE_V01 , + .elem_size =sizeof (u8), + .array_type =STATIC_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_mac_addr_req_msg_v01 , + mac_addr), + }, + {} +}; + +struct qmi_elem_info wlfw_mac_addr_resp_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 wlfw_mac_addr_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_host_cap_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 wlfw_host_cap_req_msg_v01 , + daemon_support_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_host_cap_req_msg_v01 , + daemon_support), + }, + {} +}; + +struct qmi_elem_info wlfw_host_cap_resp_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 wlfw_host_cap_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_request_mem_ind_msg_v01_ei[] = { + { + .data_type =QMI_DATA_LEN , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_request_mem_ind_msg_v01 , + mem_seg_len), + }, + { + .data_type =QMI_STRUCT , + .elem_len =QMI_WLFW_MAX_NUM_MEM_SEG_V01 , + .elem_size =sizeof (struct wlfw_mem_seg_s_v01 ), + .array_type =VAR_LEN_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_request_mem_ind_msg_v01 , + mem_seg), + .ei_array = wlfw_mem_seg_s_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_respond_mem_req_msg_v01_ei[] = { + { + .data_type =QMI_DATA_LEN , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_respond_mem_req_msg_v01 , + mem_seg_len), + }, + { + .data_type =QMI_STRUCT , + .elem_len =QMI_WLFW_MAX_NUM_MEM_SEG_V01 , + .elem_size =sizeof (struct wlfw_mem_seg_resp_s_v01 ), + .array_type =VAR_LEN_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_respond_mem_req_msg_v01 , + mem_seg), + .ei_array = wlfw_mem_seg_resp_s_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_respond_mem_resp_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 wlfw_respond_mem_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_mem_ready_ind_msg_v01_ei[] = { + {} +}; + +struct qmi_elem_info wlfw_fw_init_done_ind_msg_v01_ei[] = { + {} +}; + +struct qmi_elem_info wlfw_rejuvenate_ind_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 wlfw_rejuvenate_ind_msg_v01 , + cause_for_rejuvenation_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_rejuvenate_ind_msg_v01 , + cause_for_rejuvenation), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_rejuvenate_ind_msg_v01 , + requesting_sub_system_valid), + }, + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_rejuvenate_ind_msg_v01 , + requesting_sub_system), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_rejuvenate_ind_msg_v01 , + line_number_valid), + }, + { + .data_type =QMI_UNSIGNED_2_BYTE , + .elem_len =1 , + .elem_size =sizeof (u16), + .array_type =NO_ARRAY , + .tlv_type =0x12 , + .offset = offsetof(struct wlfw_rejuvenate_ind_msg_v01 , + line_number), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_rejuvenate_ind_msg_v01 , + function_name_valid), + }, + { + .data_type =QMI_STRING , + .elem_len =QMI_WLFW_FUNCTION_NAME_LEN_V01 +1 , + .elem_size =sizeof (char ), + .array_type =NO_ARRAY , + .tlv_type =0x13 , + .offset = offsetof(struct wlfw_rejuvenate_ind_msg_v01 , + function_name), + }, + {} +}; + +struct qmi_elem_info wlfw_rejuvenate_ack_req_msg_v01_ei[] = { + {} +}; + +struct qmi_elem_info wlfw_rejuvenate_ack_resp_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 wlfw_rejuvenate_ack_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_dynamic_feature_mask_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 wlfw_dynamic_feature_mask_req_msg_v01 , + mask_valid), + }, + { + .data_type =QMI_UNSIGNED_8_BYTE , + .elem_len =1 , + .elem_size =sizeof (u64), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_dynamic_feature_mask_req_msg_v01 , + mask), + }, + {} +}; + +struct qmi_elem_info wlfw_dynamic_feature_mask_resp_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 wlfw_dynamic_feature_mask_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_dynamic_feature_mask_resp_msg_v01 , + prev_mask_valid), + }, + { + .data_type =QMI_UNSIGNED_8_BYTE , + .elem_len =1 , + .elem_size =sizeof (u64), + .array_type =NO_ARRAY , + .tlv_type =0x10 , + .offset = offsetof(struct wlfw_dynamic_feature_mask_resp_msg_v01 , + prev_mask), + }, + { + .data_type =QMI_OPT_FLAG , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_dynamic_feature_mask_resp_msg_v01 , + curr_mask_valid), + }, + { + .data_type =QMI_UNSIGNED_8_BYTE , + .elem_len =1 , + .elem_size =sizeof (u64), + .array_type =NO_ARRAY , + .tlv_type =0x11 , + .offset = offsetof(struct wlfw_dynamic_feature_mask_resp_msg_v01 , + curr_mask), + }, + {} +}; + +struct qmi_elem_info wlfw_m3_info_req_msg_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_8_BYTE , + .elem_len =1 , + .elem_size =sizeof (u64), + .array_type =NO_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_m3_info_req_msg_v01 , + addr), + }, + { + .data_type =QMI_UNSIGNED_4_BYTE , + .elem_len =1 , + .elem_size =sizeof (u32), + .array_type =NO_ARRAY , + .tlv_type =0x02 , + .offset = offsetof(struct wlfw_m3_info_req_msg_v01 , + size), + }, + {} +}; + +struct qmi_elem_info wlfw_m3_info_resp_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 wlfw_m3_info_resp_msg_v01 , + resp), + .ei_array = qmi_response_type_v01_ei, + }, + {} +}; + +struct qmi_elem_info wlfw_xo_cal_ind_msg_v01_ei[] = { + { + .data_type =QMI_UNSIGNED_1_BYTE , + .elem_len =1 , + .elem_size =sizeof (u8), + .array_type =NO_ARRAY , + .tlv_type =0x01 , + .offset = offsetof(struct wlfw_xo_cal_ind_msg_v01 , + xo_cal_data), + }, + {} +};
drivers/net/wireless/ath/ath10k/qmi_wlfw_v01.h new file +677 -0
677 lines not on this page · raw message
Signature · 1 line
2.17.0
PATCH v3 2/6 ath10k: Add support to create boardname for non-bmi target
In reply to Govind SinghFrom: Rakesh Pillai <[email protected]>
Add support to create the boardname for non-bmi targets like WCN3990, which uses qmi for bdf download. This boardname is used to parse the board data from board-2.bin.
--- drivers/net/wireless/ath/ath10k/core.c | 8 ++++++++ drivers/net/wireless/ath/ath10k/core.h | 2 ++ 2 files changed, 10 insertions(+)
drivers/net/wireless/ath/ath10k/core.c +8 -0
@@ -1440,6 +1440,14 @@ static int ath10k_core_create_board_name(struct ath10k *ar, char *name, goto out; } +if (ar->id.qmi_ids_valid) { +scnprintf (name, name_len, +"bus=%s,qmi-board-id=%x" , +ath10k_bus_str (ar->hif.bus), + ar->id.qmi_board_id); + goto out; + } + scnprintf(name, name_len, "bus=%s,vendor=%04x,device=%04x,subsystem-vendor=%04x,subsystem-device=%04x%s", ath10k_bus_str(ar->hif.bus),
drivers/net/wireless/ath/ath10k/core.h +2 -0
@@ -941,7 +941,9 @@ struct ath10k {u32 subsystem_device;bool bmi_ids_valid; +bool qmi_ids_valid;u8 bmi_board_id; +u8 qmi_board_id;u8 bmi_chip_id;char bdf_ext[ATH10K_SMBIOS_BDF_EXT_STR_LENGTH ];
Signature · 1 line
2.17.0
Re: [PATCH v3 2/6] ath10k: Add support to create boardname for non-bmi target
Hi Govind,
Quoted 37 lines · Govind Singh
From: Rakesh Pillai <[email protected]>
Add support to create the boardname for non-bmi targets like WCN3990, which uses qmi for bdf download. This boardname is used to parse the board data from board-2.bin.
Signed-off-by Rakesh Pillai <[email protected]>Signed-off-by Govind Singh <[email protected]>--- drivers/net/wireless/ath/ath10k/core.c | 8 ++++++++ drivers/net/wireless/ath/ath10k/core.h | 2 ++ 2 files changed, 10 insertions(+)drivers/net/wireless/ath/ath10k/core.c +8
-0@@ -1440,6 +1440,14 @@ static int ath10k_core_create_board_name(struct ath10k *ar, char *name, goto out; } +if (ar->id.qmi_ids_valid) { +scnprintf (name, name_len, +"bus=%s,qmi-board-id=%x" , +ath10k_bus_str (ar->hif.bus), + ar->id.qmi_board_id); + goto out; + } + scnprintf(name, name_len, "bus=%s,vendor=%04x,device=%04x,subsystem-vendor=%04x,subsystem-device=%04x%s", ath10k_bus_str(ar->hif.bus),drivers/net/wireless/ath/ath10k/core.h +0
-0
drivers/net/wireless/ath/ath10k/core.h struct ath10k { · line 946
Quoted 6 lines
drivers/net/wireless/ath/ath10k/core.h +2
-0@@ -941,7 +941,9 @@ struct ath10k {u32 subsystem_device;bool bmi_ids_valid; +bool qmi_ids_valid;u8 bmi_board_id; +u8 qmi_board_id;
IIUC, QMI board IDs may be more than 8 bits. (And your qmi.c code seems to suggest this as well.) Should this be u32?
Brian
Quoted 6 lines
drivers/net/wireless/ath/ath10k/core.h +0
-0u8 bmi_chip_id;char bdf_ext[ATH10K_SMBIOS_BDF_EXT_STR_LENGTH ];Signature · 1 line
2.17.0
_______________________________________________
ath10k mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/ath10k
PATCH v3 4/6 firmware: qcom: scm: Add WLAN VMID for Qualcomm SCM interface
In reply to Govind SinghAdd WLAN related VMID's to support wlan driver to set up the remote's permissions call via TrustZone.
--- include/linux/qcom_scm.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
include/linux/qcom_scm.h +3 -1
@@ -1,4 +1,4 @@ -/* Copyright (c) 2010-2015, The Linux Foundation. All rights reserved. +/* Copyright (c) 2010-2015, 2018, The Linux Foundation. All rights reserved. * Copyright (C) 2015 Linaro Ltd. * * This program is free software; you can redistribute it and/or modify
@@ -33,6 +33,8 @@ struct qcom_scm_vmperm {#define QCOM_SCM_VMID_HLOS 0x3#define QCOM_SCM_VMID_MSS_MSA 0xF +#define QCOM_SCM_VMID_WLAN 0x18 +#define QCOM_SCM_VMID_WLAN_CE 0x19#define QCOM_SCM_PERM_READ 0x4#define QCOM_SCM_PERM_WRITE 0x2#define QCOM_SCM_PERM_EXEC 0x1
Signature · 1 line
2.17.0
PATCH v3 5/6 ath10k: Add debug mask for QMI layer
In reply to Govind SinghAdd debug mask to control debug info of ath10k qmi messaging layer.
--- drivers/net/wireless/ath/ath10k/debug.h | 1 + 1 file changed, 1 insertion(+)
drivers/net/wireless/ath/ath10k/debug.h +1 -0
@@ -44,6 +44,7 @@ enum ath10k_debug_mask {ATH10K_DBG_USB =0x00040000 ,ATH10K_DBG_USB_BULK =0x00080000 ,ATH10K_DBG_SNOC =0x00100000 , +ATH10K_DBG_QMI =0x00200000 , ATH10K_DBG_ANY = 0xffffffff, };
Signature · 1 line
2.17.0
PATCH v3 6/6 ath10k: Add QMI message handshake for wcn3990 client
In reply to Govind SinghAdd WCN3990 QMI client handshakes for Q6 integrated WLAN connectivity subsystem. This layer is responsible for communicating qmi control messages to wifi fw QMI service using QMI messaging protocol.
Qualcomm MSM Interface(QMI) is a messaging format used to communicate between components running between remote processors with underlying transport layer based on integrated chipset(shared memory) or discrete chipset(PCI/USB/SDIO/UART).
--- drivers/net/wireless/ath/ath10k/Kconfig | 1 + drivers/net/wireless/ath/ath10k/Makefile | 4 +- drivers/net/wireless/ath/ath10k/core.c | 6 +- drivers/net/wireless/ath/ath10k/core.h | 2 + drivers/net/wireless/ath/ath10k/qmi.c | 1021 ++++++++++++++++++++++ drivers/net/wireless/ath/ath10k/qmi.h | 129 +++ drivers/net/wireless/ath/ath10k/snoc.c | 215 ++++- drivers/net/wireless/ath/ath10k/snoc.h | 4 + 8 files changed, 1372 insertions(+), 10 deletions(-) create mode 100644 drivers/net/wireless/ath/ath10k/qmi.c create mode 100644 drivers/net/wireless/ath/ath10k/qmi.h
drivers/net/wireless/ath/ath10k/Kconfig +1 -0
@@ -43,6 +43,7 @@ config ATH10K_USB config ATH10K_SNOC tristate "Qualcomm ath10k SNOC support (EXPERIMENTAL)" depends on ATH10K && ARCH_QCOM + select QCOM_QMI_HELPERS ---help--- This module adds support for integrated WCN3990 chip connected to system NOC(SNOC). Currently work in progress and will not
drivers/net/wireless/ath/ath10k/Makefile +3 -1
@@ -36,7 +36,9 @@ obj-$(CONFIG_ATH10K_USB) += ath10k_usb.o ath10k_usb-y += usb.o obj-$(CONFIG_ATH10K_SNOC) += ath10k_snoc.o -ath10k_snoc-y += snoc.o +ath10k_snoc-y += qmi.o \ + qmi_wlfw_v01.o \ + snoc.o # for tracing framework to find trace.h CFLAGS_trace.o := -I$(src)
drivers/net/wireless/ath/ath10k/core.c +4 -2
@@ -1145,7 +1145,7 @@ static int ath10k_download_fw(struct ath10k *ar)return ret; } -static void ath10k_core_free_board_files (struct ath10k *ar) +void ath10k_core_free_board_files (struct ath10k *ar) {if (!IS_ERR (ar->normal_mode_fw.board))release_firmware (ar->normal_mode_fw.board);
@@ -1154,6 +1154,7 @@ static void ath10k_core_free_board_files(struct ath10k *ar) ar->normal_mode_fw.board_data =NULL ; ar->normal_mode_fw.board_len =0 ; } +EXPORT_SYMBOL (ath10k_core_free_board_files);static void ath10k_core_free_firmware_files (struct ath10k *ar) {
@@ -1459,7 +1460,7 @@ static int ath10k_core_create_board_name(struct ath10k *ar, char *name,return 0 ; } -static int ath10k_core_fetch_board_file (struct ath10k *ar) +int ath10k_core_fetch_board_file (struct ath10k *ar) {char boardname[100 ], fallback_boardname[100 ];int ret;
@@ -1497,6 +1498,7 @@ static int ath10k_core_fetch_board_file(struct ath10k *ar)ath10k_dbg (ar,ATH10K_DBG_BOOT ,"using board api %d\n" , ar->bd_api);return 0 ; } +EXPORT_SYMBOL (ath10k_core_fetch_board_file);int ath10k_core_fetch_firmware_api_n (struct ath10k *ar,const char *name,struct ath10k_fw_file *fw_file)
drivers/net/wireless/ath/ath10k/core.h +2 -0
@@ -1166,5 +1166,7 @@ int ath10k_wait_for_suspend(struct ath10k *ar, u32 suspend_opt);void ath10k_core_stop (struct ath10k *ar);int ath10k_core_register (struct ath10k *ar,u32 chip_id);void ath10k_core_unregister (struct ath10k *ar); +int ath10k_core_fetch_board_file (struct ath10k *ar); +void ath10k_core_free_board_files (struct ath10k *ar);#endif /* _CORE_H_ */
drivers/net/wireless/ath/ath10k/qmi.c new file +1021 -0
1,021 lines not on this page · raw message
drivers/net/wireless/ath/ath10k/qmi.h new file +129 -0
129 lines not on this page · raw message
drivers/net/wireless/ath/ath10k/snoc.c +208 -7
274 lines not on this page · raw message
drivers/net/wireless/ath/ath10k/snoc.h +4 -0
@@ -19,10 +19,12 @@#include "hw.h" #include "ce.h" +#include "qmi.h" struct ath10k_snoc_drv_priv {enum ath10k_hw_rev hw_rev;u64 dma_mask; +u32 msa_size; };struct snoc_state {
@@ -81,6 +83,7 @@ struct ath10k_snoc {struct timer_list rx_post_retry;struct ath10k_wcn3990_vreg_info *vreg;struct ath10k_wcn3990_clk_info *clk; +struct ath10k_qmi *qmi; };static inline struct ath10k_snoc *ath10k_snoc_priv (struct ath10k *ar)
@@ -90,5 +93,6 @@ static inline struct ath10k_snoc *ath10k_snoc_priv(struct ath10k *ar)void ath10k_snoc_write32 (struct ath10k *ar,u32 offset,u32 value);u32 ath10k_snoc_read32 (struct ath10k *ar,u32 offset); +int ath10k_snoc_fw_indication (struct ath10k *ar,u64 type);#endif /* _SNOC_H_ */
Signature · 1 line
2.17.0
Hi,
Quoted 48 lines · Govind Singh
Add QMI client handshakes for Q6 integrated WLAN connectivity subsystem. This module is responsible for communicating WLAN control messages to FW over QMI interface. This patch series enables the qmi handshakes required for WCN3990 chipset.
QUALCOMM MSM Interface(QMI) provides the control interface between components running b/w remote processors with underlying transport layer based on integrated chipset(shared memory) or discrete chipset(PCI/USB/SDIO/UART).
QMI client driver implementation is based on qmi framework https://lwn.net/Articles/729924/.
Below is the sequence of qmi handshake.
QMI CLIENT(APPS) QMI SERVER(FW in Q6) <------wlan service discoverd---- -----connect to wlam qmi service-----> ------------wlan info request-----> <------------wlan info resp------------ ------------msa info req--------> <------------msa info resp------------ ------------msa ready req--------> <------------msa ready resp------------ <------------msa ready indication------- ------------capability req-------> <------------capability resp------------ ------------qmi bdf req---------> <------------qmi bdf resp------------ ------------qmi cal trigger-------> <------------ QMI FW ready indication-------WLAN fw is running in modem Q6 dsp as user PD(protection domain). Sequence of user PD loading is as following.
Quoted 8 lines
1) Remote proc PIL driver loads the modem fw/ROOT PD.
2) As part of ROOT pd boot-up it queries to adaemon(pd_mapper)running in apps processor to determine how many usre pd's to be loaded by the remote processor(Q6).
3) Once user pd info is known to remote processor it loads the user pd via tftp protocol.https://github.com/andersson/pd-mapper
https://github.com/andersson/tqftpserv
FWIW, as of today, the tqftpserv implementation is missing a few headers (so it doesn't even build), and once I hack things such that it can build, it still doesn't work for me (whereas the closed source version does). I see some BYE and DEL_CLIENT messages, but no read requests. I don't think that qualifies as an open source implementation.
Brian
Quoted 37 lines
Changes in V3:
Addressed review comments from v2 version.
Removed msa-size from dt binding and added reference toreserved-memory/reserved-memory.txt.Changes in V2:
Removed qmi client driver and integrated qmi client handshakes in snoc platform driver. Addressed comments on v1 version.
Switched to ath10k bdf download infra(board-2.bin)
Added MSA fixed region support to support unload use-case.
Unified logging.Testing:
Tested all qmi handshakes, driver load/unload and STA/SAP sanity testing. Tested HW: SDM845(WCN3990) Tested FW: WLAN.HL.2.0-01192-QCAHLSWMTPLZ-1Govind Singh (5):
ath10k: Add qmi service helpers for wcn3990 qmi client
dt: bindings: add bindings for msa memory region
firmware: qcom: scm: Add WLAN VMID for Qualcomm SCM interface
ath10k: Add debug mask for QMI layer
ath10k: Add QMI message handshake for wcn3990 clientRakesh Pillai (1):
ath10k: Add support to create boardname for non-bmi target.../bindings/net/wireless/qcom,ath10k.txt | 13 + drivers/net/wireless/ath/ath10k/Kconfig | 1 + drivers/net/wireless/ath/ath10k/Makefile | 4 +- drivers/net/wireless/ath/ath10k/core.c | 14 +- drivers/net/wireless/ath/ath10k/core.h | 4 + drivers/net/wireless/ath/ath10k/debug.h | 1 + drivers/net/wireless/ath/ath10k/qmi.c | 1021 ++++++++ drivers/net/wireless/ath/ath10k/qmi.h | 129 + .../net/wireless/ath/ath10k/qmi_wlfw_v01.c | 2072 +++++++++++++++++ .../net/wireless/ath/ath10k/qmi_wlfw_v01.h | 677 ++++++
Quoted 12 lines
drivers/net/wireless/ath/ath10k/snoc.c | 215 +- drivers/net/wireless/ath/ath10k/snoc.h | 4 + include/linux/qcom_scm.h | 4 +- 13 files changed, 4148 insertions(+), 11 deletions(-) create mode 100644 drivers/net/wireless/ath/ath10k/qmi.c create mode 100644 drivers/net/wireless/ath/ath10k/qmi.h create mode 100644 drivers/net/wireless/ath/ath10k/qmi_wlfw_v01.c create mode 100644 drivers/net/wireless/ath/ath10k/qmi_wlfw_v01.hSignature · 1 line
2.17.0
_______________________________________________
ath10k mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/ath10k
Quoted 2 lines · Brian Norris
Hi,
Hi Brian,
Quoted 1 line · Govind Singh
[..]
Quoted 4 lines
Quoted 1 line
FWIW, as of today, the tqftpserv implementation is missing a few headers (so it doesn't even build),
Sorry about that, had those lingering in my repository. I've pushed a fix for this.
Quoted 3 lines
and once I hack things such that it can
build, it still doesn't work for me (whereas the closed source version does). I see some BYE andDEL_CLIENTmessages, but no read requests.
I interpret this description as you're not seeing any prints at, beyond the "[TQFTP] got bye" and "[TQFTP] got del_client"?
That would imply that the remote side doesn't even attempt to communicate with tqftpserv.
Are you running pd-mapper (either proprietary or my version), is it complaining about anything?
Can you run qrtr-lookup on the device after booting the modem? So that we see that the tqftpserv is registered properly and that the modem is in an appropriate state?
Regards,
Bjorn
_______________________________________________
ath10k mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/ath10k
Quoted 30 lines · Bjorn Andersson
Quoted 2 lines · Brian Norris
Hi,
Hi Brian,
Quoted 1 line · Govind Singh
[..]
Quoted 4 lines
Quoted 1 line
FWIW, as of today, the tqftpserv implementation is missing a few headers (so it doesn't even build),
Sorry about that, had those lingering in my repository. I've pushed a fix for this.
Quoted 3 lines
and once I hack things such that it can
build, it still doesn't work for me (whereas the closed source version does). I see some BYE andDEL_CLIENTmessages, but no read requests.I interpret this description as you're not seeing any prints at, beyond the "[TQFTP] got bye" and "[TQFTP] got
del_client"?That would imply that the remote side doesn't even attempt to communicate with tqftpserv.
Are you running pd-mapper (either proprietary or my version), is it complaining about anything?
Quoted 6 lines
Can you run qrtr-lookup on the device after booting the modem? So that we see that the tqftpserv is registered properly and that the modem is in an appropriate state?
Regards,
Bjorn
For me below sequence is working. PD mapper is bypassed in the modem binary that Brian is using, hence that may not be required at this moment.
qrtr-cfg 1
qrtr-ns
mkdir -p /dev/block/bootdevice/by-name/
ln -s /dev/sda4 /dev/block/bootdevice/by-name/modemst1 ln -s /dev/sda5 /dev/block/bootdevice/by-name/modemst2 ln -s /dev/sda6 /dev/block/bootdevice/by-name/fsc ln -s /dev/sda7 /dev/block/bootdevice/by-name/fsg
ln -s /var/log/ /readwrite
ln -s /lib/firmware/wlanmdsp.mbn /readonly/firmware/image/wlanmdsp.mbn
rmt_storage &
tqftpserv &
Thanks,
Govind
_______________________________________________
ath10k mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/ath10k
Hi,
Quoted 13 lines · Govind Singh
Quoted 12 lines · Bjorn Andersson
Quoted 1 line · Brian Norris
On Fri, Jul 06, 2018 at 02:26:17PM +0530, Govind Singh wrote:
[..]
Quoted 5 lines
Quoted 1 line
FWIW, as of today, the tqftpserv implementation is missing a few headers
(so it doesn't even build),Sorry about that, had those lingering in my repository. I've pushed a fix for this.
Quoted 6 lines
Quoted 6 lines
Quoted 3 lines
and once I hack things such that it can
build, it still doesn't work for me (whereas the closed source version does). I see some BYE andDEL_CLIENTmessages, but no read requests.I interpret this description as you're not seeing any prints at, beyond the "[TQFTP] got bye" and "[TQFTP] got
del_client"?
Yes, I thought that was the case.
Quoted 13 lines
Quoted 6 lines
That would imply that the remote side doesn't even attempt to communicate with tqftpserv.
Are you running pd-mapper (either proprietary or my version), is it complaining about anything?
Quoted 6 lines
Can you run qrtr-lookup on the device after booting the modem? So that we see that the tqftpserv is registered properly and that the modem is in an appropriate state?
Regards,
Bjorn
Quoted 7 lines
For me below sequence is working. PD mapper is bypassed in the modem binary that Brian is using, hence that
may not be required at this moment.qrtr-cfg 1
qrtr-ns
I already had those taken care of.
Quoted 5 lines
mkdir -p
/dev/block/bootdevice/by-name/
ln -s/dev/sda4/dev/block/bootdevice/by-name/modemst1ln -s/dev/sda5/dev/block/bootdevice/by-name/modemst2ln -s/dev/sda6/dev/block/bootdevice/by-name/fscln -s/dev/sda7/dev/block/bootdevice/by-name/fsg
The above are all irrelevant and possibly dangerous.
Quoted 2 lines
ln -s
/var/log//readwrite
ln -s/lib/firmware/wlanmdsp.mbn/readonly/firmware/image/wlanmdsp.mbn
Somehow I missed these; perhaps I was somehow filtering out the console complaints where the server couldn't write to /readwrite/..., but once I have these /readwrite and /readonly paths set up, it does indeed work.
BTW, it's a bit of an annoyance here that the Q6 requires having write access to arbitrary files on the host side. At least now that I have source code for this wretched server, I can just have it drop all the junk I don't want, but this is a very hokey design.
Quoted 1 line
rmt_storage&
This is still a proprietary component. Fortunately this is a working replacement:
https://github.com/andersson/rmtfs
and with that (and creating some zero-filled files at /boot/modem_fs{1,2,c,g}), things work for me.
Brian
Quoted 5 lines
tqftpserv &
Thanks,
Govind
_______________________________________________
ath10k mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/ath10k
Quoted 4 lines · Govind Singh
Add QMI client handshakes for Q6 integrated WLAN connectivity subsystem. This module is responsible for communicating WLAN control messages to FW over QMI interface. This patch series enables the qmi handshakes required for WCN3990 chipset.
(cut)
Hello Govind,
I ran make W=1, sparse, and checkpatch on your new iteration of patches. (I didn't do a full manual review this time, since I did that last time.)
Building with warnings and checkpatch looks good,
but sparse reports the two following warnings:
CHECK drivers/net/wireless/ath/ath10k//qmi.c
drivers/net/wireless/ath/ath10k//qmi.c:935:29: warning: incorrect type in assignment (different address spaces)
drivers/net/wireless/ath/ath10k//qmi.c:935:29: expected void *msa_va
drivers/net/wireless/ath/ath10k//qmi.c:935:29: got void [noderef] <asn:2>*
and
drivers/net/wireless/ath/ath10k//snoc.c:76:22: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:76:22: expected restricted __le16 [usertype] reg_offset
drivers/net/wireless/ath/ath10k//snoc.c:76:22: got int
drivers/net/wireless/ath/ath10k//snoc.c:77:19: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:77:19: expected restricted __le16 [usertype] ce_id
drivers/net/wireless/ath/ath10k//snoc.c:77:19: got int
drivers/net/wireless/ath/ath10k//snoc.c:77:22: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:77:22: expected restricted __le16 [usertype] reg_offset
drivers/net/wireless/ath/ath10k//snoc.c:77:22: got int
drivers/net/wireless/ath/ath10k//snoc.c:78:19: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:78:19: expected restricted __le16 [usertype] ce_id
drivers/net/wireless/ath/ath10k//snoc.c:78:19: got int
drivers/net/wireless/ath/ath10k//snoc.c:78:22: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:78:22: expected restricted __le16 [usertype] reg_offset
drivers/net/wireless/ath/ath10k//snoc.c:78:22: got int
drivers/net/wireless/ath/ath10k//snoc.c:79:19: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:79:19: expected restricted __le16 [usertype] ce_id
drivers/net/wireless/ath/ath10k//snoc.c:79:19: got int
drivers/net/wireless/ath/ath10k//snoc.c:79:22: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:79:22: expected restricted __le16 [usertype] reg_offset
drivers/net/wireless/ath/ath10k//snoc.c:79:22: got int
drivers/net/wireless/ath/ath10k//snoc.c:80:19: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:80:19: expected restricted __le16 [usertype] ce_id
drivers/net/wireless/ath/ath10k//snoc.c:80:19: got int
drivers/net/wireless/ath/ath10k//snoc.c:80:22: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:80:22: expected restricted __le16 [usertype] reg_offset
drivers/net/wireless/ath/ath10k//snoc.c:80:22: got int
drivers/net/wireless/ath/ath10k//snoc.c:81:19: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:81:19: expected restricted __le16 [usertype] ce_id
drivers/net/wireless/ath/ath10k//snoc.c:81:19: got int
drivers/net/wireless/ath/ath10k//snoc.c:81:22: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:81:22: expected restricted __le16 [usertype] reg_offset
drivers/net/wireless/ath/ath10k//snoc.c:81:22: got int
drivers/net/wireless/ath/ath10k//snoc.c:82:19: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:82:19: expected restricted __le16 [usertype] ce_id
drivers/net/wireless/ath/ath10k//snoc.c:82:19: got int
drivers/net/wireless/ath/ath10k//snoc.c:82:22: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:82:22: expected restricted __le16 [usertype] reg_offset
drivers/net/wireless/ath/ath10k//snoc.c:82:22: got int
drivers/net/wireless/ath/ath10k//snoc.c:83:19: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:83:19: expected restricted __le16 [usertype] ce_id
drivers/net/wireless/ath/ath10k//snoc.c:83:19: got int
drivers/net/wireless/ath/ath10k//snoc.c:83:22: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:83:22: expected restricted __le16 [usertype] reg_offset
drivers/net/wireless/ath/ath10k//snoc.c:83:22: got int
drivers/net/wireless/ath/ath10k//snoc.c:84:19: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:84:19: expected restricted __le16 [usertype] ce_id
drivers/net/wireless/ath/ath10k//snoc.c:84:19: got int
drivers/net/wireless/ath/ath10k//snoc.c:84:22: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:84:22: expected restricted __le16 [usertype] reg_offset
drivers/net/wireless/ath/ath10k//snoc.c:84:22: got int
drivers/net/wireless/ath/ath10k//snoc.c:85:19: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:85:19: expected restricted __le16 [usertype] ce_id
drivers/net/wireless/ath/ath10k//snoc.c:85:19: got int
drivers/net/wireless/ath/ath10k//snoc.c:85:22: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:85:22: expected restricted __le16 [usertype] reg_offset
drivers/net/wireless/ath/ath10k//snoc.c:85:22: got int
drivers/net/wireless/ath/ath10k//snoc.c:86:19: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:86:19: expected restricted __le16 [usertype] ce_id
drivers/net/wireless/ath/ath10k//snoc.c:86:19: got int
drivers/net/wireless/ath/ath10k//snoc.c:86:23: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:86:23: expected restricted __le16 [usertype] reg_offset
drivers/net/wireless/ath/ath10k//snoc.c:86:23: got int
drivers/net/wireless/ath/ath10k//snoc.c:87:19: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:87:19: expected restricted __le16 [usertype] ce_id
drivers/net/wireless/ath/ath10k//snoc.c:87:19: got int
drivers/net/wireless/ath/ath10k//snoc.c:87:23: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:87:23: expected restricted __le16 [usertype] reg_offset
drivers/net/wireless/ath/ath10k//snoc.c:87:23: got int
Kind regards,
Niklas
_______________________________________________
ath10k mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/ath10k
Hi Niklas,
Thanks for the review.
Quoted 13 lines · Niklas Cassel
Quoted 4 lines · Govind Singh
Add QMI client handshakes for Q6 integrated WLAN connectivity subsystem. This module is responsible for communicating WLAN control messages to FW over QMI interface. This patch series enables the qmi handshakes required for WCN3990 chipset.
(cut)
Hello Govind,
I ran make W=1, sparse, and checkpatch on your new iteration of patches. (I didn't do a full manual review this time, since I did that last time.)
Quoted 9 lines
Building with warnings and checkpatch looks good,
but sparse reports the two following warnings:CHECK drivers/net/wireless/ath/ath10k//qmi.c
drivers/net/wireless/ath/ath10k//qmi.c:935:29: warning: incorrect type in assignment (different address spaces)
drivers/net/wireless/ath/ath10k//qmi.c:935:29: expected void*msa_va
drivers/net/wireless/ath/ath10k//qmi.c:935:29: got void [noderef] <asn:2>*
Fixed in v4 version.
Quoted 12 lines
and
drivers/net/wireless/ath/ath10k//snoc.c:76:22: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:76:22: expected restricted__le16[usertype]reg_offset
drivers/net/wireless/ath/ath10k//snoc.c:76:22: got int
drivers/net/wireless/ath/ath10k//snoc.c:77:19: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:77:19: expected restricted__le16[usertype]ce_id
drivers/net/wireless/ath/ath10k//snoc.c:77:19: got int
Quoted 8 lines
drivers/net/wireless/ath/ath10k//snoc.c:77:22: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:77:22: expected restricted__le16[usertype]reg_offset
drivers/net/wireless/ath/ath10k//snoc.c:77:22: got int
drivers/net/wireless/ath/ath10k//snoc.c:78:19: warning: incorrect type in initializer (different base types)
drivers/net/wireless/ath/ath10k//snoc.c:78:19: expected restricted
Fixed in v4 version.
Thanks,
Govind
_______________________________________________
ath10k mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/ath10k