Loading drivers/net/wireless/cnss2/main.c +8 −7 Original line number Diff line number Diff line Loading @@ -367,15 +367,16 @@ int cnss_wlan_enable(struct device *dev, req.svc_cfg[i].pipe_num = config->ce_svc_cfg[i].pipe_num; } req.shadow_reg_valid = 1; if (config->num_shadow_reg_cfg > QMI_WLFW_MAX_NUM_SHADOW_REG_V01) req.shadow_reg_len = QMI_WLFW_MAX_NUM_SHADOW_REG_V01; req.shadow_reg_v2_valid = 1; if (config->num_shadow_reg_v2_cfg > QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01) req.shadow_reg_v2_len = QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01; else req.shadow_reg_len = config->num_shadow_reg_cfg; req.shadow_reg_v2_len = config->num_shadow_reg_v2_cfg; memcpy(req.shadow_reg, config->shadow_reg_cfg, sizeof(struct wlfw_shadow_reg_cfg_s_v01) * req.shadow_reg_len); memcpy(req.shadow_reg_v2, config->shadow_reg_v2_cfg, sizeof(struct wlfw_shadow_reg_v2_cfg_s_v01) * req.shadow_reg_v2_len); ret = cnss_wlfw_wlan_cfg_send_sync(plat_priv, &req); if (ret) Loading drivers/net/wireless/cnss2/wlan_firmware_service_v01.c +46 −1 Original line number Diff line number Diff line /* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -127,6 +127,23 @@ static struct elem_info wlfw_shadow_reg_cfg_s_v01_ei[] = { }, }; static struct elem_info wlfw_shadow_reg_v2_cfg_s_v01_ei[] = { { .data_type = QMI_UNSIGNED_4_BYTE, .elem_len = 1, .elem_size = sizeof(uint32_t), .is_array = NO_ARRAY, .tlv_type = 0, .offset = offsetof(struct wlfw_shadow_reg_v2_cfg_s_v01, addr), }, { .data_type = QMI_EOTI, .is_array = NO_ARRAY, .is_array = QMI_COMMON_TLV_TYPE, }, }; static struct elem_info wlfw_memory_region_info_s_v01_ei[] = { { .data_type = QMI_UNSIGNED_8_BYTE, Loading Loading @@ -698,6 +715,34 @@ struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[] = { shadow_reg), .ei_array = wlfw_shadow_reg_cfg_s_v01_ei, }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(uint8_t), .is_array = 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(uint8_t), .is_array = 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_NUM_SHADOW_REG_V2_V01, .elem_size = sizeof(struct wlfw_shadow_reg_v2_cfg_s_v01), .is_array = 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, }, { .data_type = QMI_EOTI, .is_array = NO_ARRAY, Loading drivers/net/wireless/cnss2/wlan_firmware_service_v01.h +13 −3 Original line number Diff line number Diff line /* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -68,10 +68,11 @@ #define QMI_WLFW_MAX_DATA_SIZE_V01 6144 #define QMI_WLFW_MAX_NUM_CE_V01 12 #define QMI_WLFW_MAX_TIMESTAMP_LEN_V01 32 #define QMI_WLFW_MAX_BUILD_ID_LEN_V01 128 #define QMI_WLFW_MAX_STR_LEN_V01 16 #define QMI_WLFW_MAX_NUM_SHADOW_REG_V01 24 #define QMI_WLFW_MAC_ADDR_SIZE_V01 6 #define QMI_WLFW_MAX_BUILD_ID_LEN_V01 128 #define QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01 36 #define QMI_WLFW_MAX_NUM_SVC_V01 24 enum wlfw_driver_mode_enum_v01 { Loading Loading @@ -116,6 +117,7 @@ enum wlfw_pipedir_enum_v01 { #define QMI_WLFW_ALREADY_REGISTERED_V01 ((uint64_t)0x01ULL) #define QMI_WLFW_FW_READY_V01 ((uint64_t)0x02ULL) #define QMI_WLFW_MSA_READY_V01 ((uint64_t)0x04ULL) #define QMI_WLFW_FW_MEM_READY_V01 ((uint64_t)0x08ULL) struct wlfw_ce_tgt_pipe_cfg_s_v01 { uint32_t pipe_num; Loading @@ -136,6 +138,10 @@ struct wlfw_shadow_reg_cfg_s_v01 { uint16_t offset; }; struct wlfw_shadow_reg_v2_cfg_s_v01 { uint32_t addr; }; struct wlfw_memory_region_info_s_v01 { uint64_t region_addr; uint32_t size; Loading Loading @@ -248,9 +254,13 @@ struct wlfw_wlan_cfg_req_msg_v01 { uint32_t shadow_reg_len; struct wlfw_shadow_reg_cfg_s_v01 shadow_reg[QMI_WLFW_MAX_NUM_SHADOW_REG_V01]; uint8_t shadow_reg_v2_valid; uint32_t shadow_reg_v2_len; struct wlfw_shadow_reg_v2_cfg_s_v01 shadow_reg_v2[QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01]; }; #define WLFW_WLAN_CFG_REQ_MSG_V01_MAX_MSG_LEN 655 #define WLFW_WLAN_CFG_REQ_MSG_V01_MAX_MSG_LEN 803 extern struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[]; struct wlfw_wlan_cfg_resp_msg_v01 { Loading include/net/cnss2.h +7 −1 Original line number Diff line number Diff line /* Copyright (c) 2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -101,6 +101,10 @@ struct cnss_shadow_reg_cfg { u16 reg_offset; }; struct cnss_shadow_reg_v2_cfg { u32 addr; }; struct cnss_wlan_enable_cfg { u32 num_ce_tgt_cfg; struct cnss_ce_tgt_pipe_cfg *ce_tgt_cfg; Loading @@ -108,6 +112,8 @@ struct cnss_wlan_enable_cfg { struct cnss_ce_svc_pipe_cfg *ce_svc_cfg; u32 num_shadow_reg_cfg; struct cnss_shadow_reg_cfg *shadow_reg_cfg; u32 num_shadow_reg_v2_cfg; struct cnss_shadow_reg_v2_cfg *shadow_reg_v2_cfg; }; enum cnss_driver_mode { Loading Loading
drivers/net/wireless/cnss2/main.c +8 −7 Original line number Diff line number Diff line Loading @@ -367,15 +367,16 @@ int cnss_wlan_enable(struct device *dev, req.svc_cfg[i].pipe_num = config->ce_svc_cfg[i].pipe_num; } req.shadow_reg_valid = 1; if (config->num_shadow_reg_cfg > QMI_WLFW_MAX_NUM_SHADOW_REG_V01) req.shadow_reg_len = QMI_WLFW_MAX_NUM_SHADOW_REG_V01; req.shadow_reg_v2_valid = 1; if (config->num_shadow_reg_v2_cfg > QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01) req.shadow_reg_v2_len = QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01; else req.shadow_reg_len = config->num_shadow_reg_cfg; req.shadow_reg_v2_len = config->num_shadow_reg_v2_cfg; memcpy(req.shadow_reg, config->shadow_reg_cfg, sizeof(struct wlfw_shadow_reg_cfg_s_v01) * req.shadow_reg_len); memcpy(req.shadow_reg_v2, config->shadow_reg_v2_cfg, sizeof(struct wlfw_shadow_reg_v2_cfg_s_v01) * req.shadow_reg_v2_len); ret = cnss_wlfw_wlan_cfg_send_sync(plat_priv, &req); if (ret) Loading
drivers/net/wireless/cnss2/wlan_firmware_service_v01.c +46 −1 Original line number Diff line number Diff line /* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -127,6 +127,23 @@ static struct elem_info wlfw_shadow_reg_cfg_s_v01_ei[] = { }, }; static struct elem_info wlfw_shadow_reg_v2_cfg_s_v01_ei[] = { { .data_type = QMI_UNSIGNED_4_BYTE, .elem_len = 1, .elem_size = sizeof(uint32_t), .is_array = NO_ARRAY, .tlv_type = 0, .offset = offsetof(struct wlfw_shadow_reg_v2_cfg_s_v01, addr), }, { .data_type = QMI_EOTI, .is_array = NO_ARRAY, .is_array = QMI_COMMON_TLV_TYPE, }, }; static struct elem_info wlfw_memory_region_info_s_v01_ei[] = { { .data_type = QMI_UNSIGNED_8_BYTE, Loading Loading @@ -698,6 +715,34 @@ struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[] = { shadow_reg), .ei_array = wlfw_shadow_reg_cfg_s_v01_ei, }, { .data_type = QMI_OPT_FLAG, .elem_len = 1, .elem_size = sizeof(uint8_t), .is_array = 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(uint8_t), .is_array = 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_NUM_SHADOW_REG_V2_V01, .elem_size = sizeof(struct wlfw_shadow_reg_v2_cfg_s_v01), .is_array = 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, }, { .data_type = QMI_EOTI, .is_array = NO_ARRAY, Loading
drivers/net/wireless/cnss2/wlan_firmware_service_v01.h +13 −3 Original line number Diff line number Diff line /* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -68,10 +68,11 @@ #define QMI_WLFW_MAX_DATA_SIZE_V01 6144 #define QMI_WLFW_MAX_NUM_CE_V01 12 #define QMI_WLFW_MAX_TIMESTAMP_LEN_V01 32 #define QMI_WLFW_MAX_BUILD_ID_LEN_V01 128 #define QMI_WLFW_MAX_STR_LEN_V01 16 #define QMI_WLFW_MAX_NUM_SHADOW_REG_V01 24 #define QMI_WLFW_MAC_ADDR_SIZE_V01 6 #define QMI_WLFW_MAX_BUILD_ID_LEN_V01 128 #define QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01 36 #define QMI_WLFW_MAX_NUM_SVC_V01 24 enum wlfw_driver_mode_enum_v01 { Loading Loading @@ -116,6 +117,7 @@ enum wlfw_pipedir_enum_v01 { #define QMI_WLFW_ALREADY_REGISTERED_V01 ((uint64_t)0x01ULL) #define QMI_WLFW_FW_READY_V01 ((uint64_t)0x02ULL) #define QMI_WLFW_MSA_READY_V01 ((uint64_t)0x04ULL) #define QMI_WLFW_FW_MEM_READY_V01 ((uint64_t)0x08ULL) struct wlfw_ce_tgt_pipe_cfg_s_v01 { uint32_t pipe_num; Loading @@ -136,6 +138,10 @@ struct wlfw_shadow_reg_cfg_s_v01 { uint16_t offset; }; struct wlfw_shadow_reg_v2_cfg_s_v01 { uint32_t addr; }; struct wlfw_memory_region_info_s_v01 { uint64_t region_addr; uint32_t size; Loading Loading @@ -248,9 +254,13 @@ struct wlfw_wlan_cfg_req_msg_v01 { uint32_t shadow_reg_len; struct wlfw_shadow_reg_cfg_s_v01 shadow_reg[QMI_WLFW_MAX_NUM_SHADOW_REG_V01]; uint8_t shadow_reg_v2_valid; uint32_t shadow_reg_v2_len; struct wlfw_shadow_reg_v2_cfg_s_v01 shadow_reg_v2[QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01]; }; #define WLFW_WLAN_CFG_REQ_MSG_V01_MAX_MSG_LEN 655 #define WLFW_WLAN_CFG_REQ_MSG_V01_MAX_MSG_LEN 803 extern struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[]; struct wlfw_wlan_cfg_resp_msg_v01 { Loading
include/net/cnss2.h +7 −1 Original line number Diff line number Diff line /* Copyright (c) 2016, The Linux Foundation. All rights reserved. /* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -101,6 +101,10 @@ struct cnss_shadow_reg_cfg { u16 reg_offset; }; struct cnss_shadow_reg_v2_cfg { u32 addr; }; struct cnss_wlan_enable_cfg { u32 num_ce_tgt_cfg; struct cnss_ce_tgt_pipe_cfg *ce_tgt_cfg; Loading @@ -108,6 +112,8 @@ struct cnss_wlan_enable_cfg { struct cnss_ce_svc_pipe_cfg *ce_svc_cfg; u32 num_shadow_reg_cfg; struct cnss_shadow_reg_cfg *shadow_reg_cfg; u32 num_shadow_reg_v2_cfg; struct cnss_shadow_reg_v2_cfg *shadow_reg_v2_cfg; }; enum cnss_driver_mode { Loading