summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/boot/dts/qcom/Makefile11
-rw-r--r--arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp-lite-overlay.dts23
-rw-r--r--arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp-lite.dtsi95
-rw-r--r--arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp-overlay.dts23
-rw-r--r--arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp.dtsi86
-rw-r--r--arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto.dts23
-rw-r--r--arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto.dtsi72
-rw-r--r--arch/arm/boot/dts/qcom/msm-pm8004.dtsi6
-rw-r--r--arch/arm/boot/dts/qcom/msm8996-agave-adp.dtsi61
-rw-r--r--arch/arm/boot/dts/qcom/msm8996-auto.dtsi2
-rw-r--r--arch/arm/boot/dts/qcom/msm8996-camera-sensor-adp.dtsi6
-rw-r--r--arch/arm/boot/dts/qcom/msm8996-mdss-panels.dtsi5
-rw-r--r--arch/arm/boot/dts/qcom/msm8996-pm8994-pmi8994-pm8004.dtsi25
-rw-r--r--arch/arm/boot/dts/qcom/msm8996-pm8994.dtsi8
-rw-r--r--arch/arm/boot/dts/qcom/msm8996-pro-auto.dtsi72
-rw-r--r--arch/arm/boot/dts/qcom/msm8996-sde-display.dtsi51
-rw-r--r--arch/arm/boot/dts/qcom/msm8996.dtsi11
-rw-r--r--arch/arm/boot/dts/qcom/msm8996pro-auto-adp-lite-overlay.dts23
-rw-r--r--arch/arm/boot/dts/qcom/msm8996pro-auto-adp-lite.dtsi95
-rw-r--r--arch/arm/boot/dts/qcom/msm8996pro-auto-adp-overlay.dts23
-rw-r--r--arch/arm/boot/dts/qcom/msm8996pro-auto-adp.dtsi95
-rw-r--r--arch/arm/boot/dts/qcom/msm8996pro-auto.dts23
-rw-r--r--arch/arm64/configs/msm-auto-gvm-perf_defconfig1
-rw-r--r--arch/arm64/configs/msm-auto-gvm_defconfig1
-rw-r--r--drivers/char/adsprpc.c24
-rw-r--r--drivers/char/diag/diag_dci.c18
-rw-r--r--drivers/char/diag/diagchar_core.c22
-rw-r--r--drivers/gpu/drm/msm/sde/sde_connector.c6
-rw-r--r--drivers/gpu/drm/msm/sde/sde_encoder_phys_shd.c36
-rw-r--r--drivers/gpu/drm/msm/sde/sde_hw_ctl.c61
-rw-r--r--drivers/gpu/drm/msm/sde/sde_kms.c13
-rw-r--r--drivers/gpu/drm/msm/sde/sde_shd.c15
-rw-r--r--drivers/gpu/drm/msm/sde/sde_shd.h3
-rw-r--r--drivers/gpu/drm/msm/sde/sde_splash.c250
-rw-r--r--drivers/gpu/drm/msm/sde/sde_splash.h29
-rw-r--r--drivers/gpu/msm/kgsl.c2
-rw-r--r--drivers/mmc/host/sdhci-msm.c3
-rw-r--r--drivers/net/wireless/cnss2/bus.c6
-rw-r--r--drivers/net/wireless/cnss2/bus.h5
-rw-r--r--drivers/net/wireless/cnss2/debug.c5
-rw-r--r--drivers/net/wireless/cnss2/main.c19
-rw-r--r--drivers/net/wireless/cnss2/main.h1
-rw-r--r--drivers/net/wireless/cnss2/qmi.c4
-rw-r--r--drivers/net/wireless/cnss2/usb.c111
-rw-r--r--drivers/net/wireless/cnss2/usb.h8
-rw-r--r--drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c9
-rw-r--r--drivers/soc/qcom/hab/ghs_comm.c4
-rw-r--r--drivers/soc/qcom/hab/qvm_comm.c6
-rw-r--r--drivers/soc/qcom/icnss.c59
-rw-r--r--drivers/soc/qcom/wlan_firmware_service_v01.c2045
-rw-r--r--drivers/soc/qcom/wlan_firmware_service_v01.h699
-rw-r--r--drivers/staging/android/ion/ion_system_heap.c6
-rw-r--r--include/net/cfg80211.h44
-rw-r--r--include/uapi/linux/nl80211.h6
-rw-r--r--net/wireless/nl80211.c79
-rw-r--r--net/wireless/rdev-ops.h12
-rw-r--r--net/wireless/trace.h37
-rw-r--r--sound/soc/msm/apq8096-auto.c22
-rw-r--r--sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c29
-rw-r--r--sound/soc/msm/qdsp6v2/msm-pcm-q6-v2.c72
-rw-r--r--sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c34
-rw-r--r--sound/soc/msm/qdsp6v2/q6afe.c31
-rw-r--r--sound/soc/msm/qdsp6v2/q6voice.c5
63 files changed, 3850 insertions, 831 deletions
diff --git a/arch/arm/boot/dts/qcom/Makefile b/arch/arm/boot/dts/qcom/Makefile
index b11b98486606..2e9249199f85 100644
--- a/arch/arm/boot/dts/qcom/Makefile
+++ b/arch/arm/boot/dts/qcom/Makefile
@@ -1,11 +1,18 @@
ifeq ($(CONFIG_BUILD_ARM64_DT_OVERLAY),y)
dtbo-$(CONFIG_ARCH_MSM8996) += \
- msm8996-mtp-overlay.dtbo
+ msm8996-mtp-overlay.dtbo \
+ apq8096pro-v1.1-auto-adp-overlay.dtbo \
+ apq8096pro-v1.1-auto-adp-lite-overlay.dtbo \
+ msm8996pro-auto-adp-overlay.dtbo \
+ msm8996pro-auto-adp-lite-overlay.dtbo
msm8996-mtp-overlay.dtbo-base := msm8996pro-v1.1-pmi8996.dtb \
msm8996-v3-pmi8996.dtb \
msm8996pro-v1.1-pmi8994.dtb
-
+apq8096pro-v1.1-auto-adp-overlay.dtbo-base := apq8096pro-v1.1-auto.dtb
+apq8096pro-v1.1-auto-adp-lite-overlay.dtbo-base := apq8096pro-v1.1-auto.dtb
+msm8996pro-auto-adp-overlay.dtbo-base := msm8996pro-auto.dtb
+msm8996pro-auto-adp-lite-overlay.dtbo-base := msm8996pro-auto.dtb
else
dtb-$(CONFIG_ARCH_MSM8996) += msm8996-v2-pmi8994-cdp.dtb \
msm8996-v2-pmi8994-mtp.dtb \
diff --git a/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp-lite-overlay.dts b/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp-lite-overlay.dts
new file mode 100644
index 000000000000..44053af247c8
--- /dev/null
+++ b/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp-lite-overlay.dts
@@ -0,0 +1,23 @@
+/* Copyright (c) 2019, 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
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "apq8096pro-v1.1-auto-adp-lite.dtsi"
+
+/ {
+ model = "Qualcomm Technologies, Inc. APQ 8096pro V1.1 AUTO ADP LITE";
+ compatible = "qcom,apq8096-adp", "qcom,msm8996", "qcom,adp";
+ qcom,msm-id = <316 0x10001>;
+ qcom,board-id = <0x03010019 0>;
+};
diff --git a/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp-lite.dtsi b/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp-lite.dtsi
new file mode 100644
index 000000000000..ed4945de4c9a
--- /dev/null
+++ b/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp-lite.dtsi
@@ -0,0 +1,95 @@
+/* Copyright (c) 2019, 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
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/clock/msm-clocks-8996.h>
+#include "msm8996-pm8994.dtsi"
+#include "msm8996-agave-adp.dtsi"
+
+&spi_9 {
+ status = "disabled";
+};
+
+&soc {
+ qcom,msm-ssc-sensors {
+ status = "disabled";
+ };
+
+ qcom,msm-thermal {
+ qcom,hotplug-temp = <115>;
+ qcom,hotplug-temp-hysteresis = <25>;
+ qcom,therm-reset-temp = <119>;
+ };
+
+ i2c@75b6000 { /* BLSP8 */
+ /* ADV7533 HDMI Bridge Chip removed on ADP Lite */
+ adv7533@39 {
+ status = "disabled";
+ };
+ };
+
+ qcom,adv7481@70 {
+ status = "disabled";
+ };
+
+ qcom,msm-ba {
+ status = "disabled";
+ };
+
+ qcom,tv-tuner {
+ status = "disabled";
+ };
+};
+
+&dsi_adv_7533_2 {
+ /delete-property/ qcom,dsi-display-active;
+};
+
+&sde_kms {
+ connectors = <&sde_hdmi_tx &sde_hdmi &dsi_adv_7533_1>;
+};
+
+&pil_modem {
+ pinctrl-names = "default";
+ pinctrl-0 = <&modem_mux>;
+};
+
+&slim_msm {
+ status = "disabled";
+};
+
+&pm8994_mpps {
+ mpp@a500 { /* MPP 6 */
+ qcom,mode = <1>; /* Digital output */
+ qcom,output-type = <0>; /* CMOS logic */
+ qcom,vin-sel = <2>; /* S4 1.8V */
+ qcom,src-sel = <0>; /* Constant */
+ qcom,master-en = <1>; /* Enable GPIO */
+ status = "okay";
+ };
+};
+
+&sdhc_2 {
+ cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
+ pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on_sbc>;
+ pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off
+ &sdc2_cd_on_sbc>;
+};
+
+&i2c_7 {
+ silabs4705@11 { /* SiLabs FM chip, slave id 0x11*/
+ status = "disabled";
+ };
+};
+
+/delete-node/ &qcom_pmi8994_3;
+/delete-node/ &qcom_pm8004_5;
diff --git a/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp-overlay.dts b/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp-overlay.dts
new file mode 100644
index 000000000000..d1e64017c091
--- /dev/null
+++ b/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp-overlay.dts
@@ -0,0 +1,23 @@
+/* Copyright (c) 2019, 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
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "apq8096pro-v1.1-auto-adp.dtsi"
+
+/ {
+ model = "Qualcomm Technologies, Inc. APQ 8096pro V1.1 AUTO ADP";
+ compatible = "qcom,apq8096-adp", "qcom,msm8996", "qcom,adp";
+ qcom,msm-id = <316 0x10001>;
+ qcom,board-id = <0x02010019 0>, <0x00010001 0>;
+};
diff --git a/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp.dtsi b/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp.dtsi
new file mode 100644
index 000000000000..1cc7c611b178
--- /dev/null
+++ b/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto-adp.dtsi
@@ -0,0 +1,86 @@
+/* Copyright (c) 2019, 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
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/clock/msm-clocks-8996.h>
+#include "msm8996-pm8994.dtsi"
+#include "msm8996-agave-adp.dtsi"
+
+&spi_9 {
+ status = "ok";
+ can-controller@0 {
+ compatible = "renesas,rh850";
+ reg = <0>;
+ interrupt-parent = <&tlmm>;
+ interrupts = <122 0>;
+ spi-max-frequency = <5000000>;
+ };
+};
+
+&soc {
+ qcom,msm-ssc-sensors {
+ status = "disabled";
+ };
+
+ qcom,msm-thermal {
+ qcom,hotplug-temp = <115>;
+ qcom,hotplug-temp-hysteresis = <25>;
+ qcom,therm-reset-temp = <119>;
+ };
+
+ qcom,adv7481@70 {
+ qcom,cam-vreg-min-voltage = <1300000 0 1800000>;
+ qcom,cam-vreg-max-voltage = <1300000 0 1800000>;
+ };
+};
+
+&pil_modem {
+ pinctrl-names = "default";
+ pinctrl-0 = <&modem_mux>;
+};
+
+&slim_msm {
+ status = "disabled";
+};
+
+&pm8994_mpps {
+ mpp@a500 { /* MPP 6 */
+ qcom,mode = <1>; /* Digital output */
+ qcom,output-type = <0>; /* CMOS logic */
+ qcom,vin-sel = <2>; /* S4 1.8V */
+ qcom,src-sel = <0>; /* Constant */
+ qcom,master-en = <1>; /* Enable GPIO */
+ status = "okay";
+ };
+};
+
+&sdhc_2 {
+ cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
+ pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on_sbc>;
+ pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off
+ &sdc2_cd_on_sbc>;
+};
+
+&i2c_7 {
+ silabs4705@11 { /* SiLabs FM chip, slave id 0x11*/
+ status = "disabled";
+ };
+};
+
+&wil6210 {
+ qcom,pcie-parent = <&pcie0>;
+ qcom,smmu-support;
+ status = "ok";
+};
+
+/delete-node/ &qcom_pmi8994_3;
+/delete-node/ &qcom_pm8004_5;
diff --git a/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto.dts b/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto.dts
new file mode 100644
index 000000000000..ab62b1ef52b6
--- /dev/null
+++ b/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto.dts
@@ -0,0 +1,23 @@
+/* Copyright (c) 2019, 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
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+/dts-v1/;
+
+#include "apq8096pro-v1.1-auto.dtsi"
+
+/ {
+ model = "Qualcomm Technologies, Inc. APQ 8096pro V1.1 AUTO SoC";
+ compatible = "qcom,apq8096-adp", "qcom,msm8996", "qcom,adp";
+ qcom,msm-id = <316 0x10001>;
+ qcom,pmic-id = <0x20009 0x0 0x0 0x0>;
+ qcom,board-id = <0 0>;
+};
diff --git a/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto.dtsi b/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto.dtsi
new file mode 100644
index 000000000000..c6f88c28ac24
--- /dev/null
+++ b/arch/arm/boot/dts/qcom/apq8096pro-v1.1-auto.dtsi
@@ -0,0 +1,72 @@
+/* Copyright (c) 2019, 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
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include "apq8096pro-v1.1.dtsi"
+#include "msm8996pro-auto.dtsi"
+#include "msm8996-auto.dtsi"
+
+&spmi_bus {
+ /delete-node/ qcom,pmi8994@2;
+ /delete-node/ qcom,pmi8994@3;
+ /delete-node/ qcom,pm8004@5;
+};
+
+&rpm_bus {
+ /delete-node/ rpm-regulator-bstb;
+ /delete-node/ rpm-regulator-bbyb;
+ /delete-node/ rpm-regulator-smpb1;
+};
+
+&pcie0 {
+ /delete-property/ qcom,l1-supported;
+ /delete-property/ qcom,l1ss-supported;
+ /delete-property/ qcom,aux-clk-sync;
+};
+
+&pcie1 {
+ /delete-property/ qcom,l1-supported;
+ /delete-property/ qcom,l1ss-supported;
+ /delete-property/ qcom,aux-clk-sync;
+};
+
+&pcie2 {
+ /delete-property/ qcom,l1-supported;
+ /delete-property/ qcom,l1ss-supported;
+ /delete-property/ qcom,aux-clk-sync;
+};
+
+&mdss_hdmi_tx {
+ /delete-property/ qcom,pluggable;
+};
+
+&slim_msm {
+ status = "disabled";
+};
+
+&mdss_dsi0 {
+ /delete-property/ lab-supply;
+ /delete-property/ ibb-supply;
+};
+
+&mdss_dsi1 {
+ /delete-property/ lab-supply;
+ /delete-property/ ibb-supply;
+};
+
+&usb_otg_switch {
+ /delete-property/ vin-supply;
+ /delete-property/ gpio;
+};
+
+&usb3 {
+ /delete-property/ vbus_dwc3-supply;
+};
diff --git a/arch/arm/boot/dts/qcom/msm-pm8004.dtsi b/arch/arm/boot/dts/qcom/msm-pm8004.dtsi
index accce1363020..2ec272228277 100644
--- a/arch/arm/boot/dts/qcom/msm-pm8004.dtsi
+++ b/arch/arm/boot/dts/qcom/msm-pm8004.dtsi
@@ -1,4 +1,4 @@
-/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2014-2015, 2019, 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
@@ -14,7 +14,7 @@
#include <dt-bindings/interrupt-controller/irq.h>
&spmi_bus {
- qcom,pm8004@4 {
+ qcom_pm8004_4: qcom,pm8004@4 {
compatible = "qcom,spmi-pmic";
reg = <0x4 SPMI_USID>;
#address-cells = <2>;
@@ -77,7 +77,7 @@
};
};
- qcom,pm8004@5 {
+ qcom_pm8004_5: qcom,pm8004@5 {
compatible ="qcom,spmi-pmic";
reg = <0x5 SPMI_USID>;
#address-cells = <2>;
diff --git a/arch/arm/boot/dts/qcom/msm8996-agave-adp.dtsi b/arch/arm/boot/dts/qcom/msm8996-agave-adp.dtsi
index 000299fdae22..560b7a81f1f0 100644
--- a/arch/arm/boot/dts/qcom/msm8996-agave-adp.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8996-agave-adp.dtsi
@@ -10,12 +10,11 @@
* GNU General Public License for more details.
*/
-#include "msm8996-pinctrl.dtsi"
#include "msm8996-camera-sensor-adp.dtsi"
#include "msm8996-wsa881x.dtsi"
#include "msm8996-sde.dtsi"
-/ {
+&vendor {
bluetooth: bt_qca6174 {
compatible = "qca,qca6174";
qca,bt-reset-gpio = <&pm8994_gpios 19 0>; /* BT_EN */
@@ -436,17 +435,6 @@
qcom,hw-settle-time = <2>;
qcom,fast-avg-setup = <0>;
};
-
- chan@7c {
- label = "xo_therm_buf";
- reg = <0x7c>;
- qcom,decimation = <0>;
- qcom,pre-div-channel-scaling = <0>;
- qcom,calibration-type = "ratiometric";
- qcom,scale-function = <4>;
- qcom,hw-settle-time = <2>;
- qcom,fast-avg-setup = <0>;
- };
};
&pm8994_adc_tm {
@@ -780,7 +768,7 @@
qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
};
-/{
+&vendor {
mtp_batterydata: qcom,battery-data {
qcom,batt-id-range-pct = <15>;
#include "batterydata-itech-3000mah.dtsi"
@@ -1164,6 +1152,10 @@
qcom,msm-cpudai-tdm-group-port-id = <36896 36898 36900
36902 36904 36906>;
+ pinctrl-names = "default", "sleep";
+ pinctrl-0 = <&tert_tdm_dout_active>;
+ pinctrl-1 = <&tert_tdm_dout_sleep>;
+
dai_tert_tdm_rx_5: qcom,msm-dai-q6-tdm-tert-rx-5 {
compatible = "qcom,msm-dai-q6-tdm";
qcom,msm-cpudai-tdm-dev-id = <36906>;
@@ -1240,18 +1232,14 @@
};
dai_mi2s_quat: qcom,msm-dai-q6-mi2s-quat {
+ qcom,msm-mi2s-rx-lines = <1>;
+ qcom,msm-mi2s-tx-lines = <2>;
pinctrl-names = "default", "sleep";
pinctrl-0 = <&quat_mi2s_active &quat_mi2s_sd0_active>;
pinctrl-1 = <&quat_mi2s_sleep &quat_mi2s_sd0_sleep>;
};
};
- qcom,msm-dai-tdm-tert-rx {
- pinctrl-names = "default", "sleep";
- pinctrl-0 = <&tert_tdm_dout_active>;
- pinctrl-1 = <&tert_tdm_dout_sleep>;
- };
-
qcom,msm-dai-tdm-quat-rx {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&quat_tdm_dout_active>;
@@ -1560,7 +1548,7 @@
status = "disabled";
};
-/delete-node/ &led_flash0;
+/delete-node/ &led_flash0;
&mdss_dsi0 {
/delete-property/ lab-supply;
@@ -1572,14 +1560,12 @@
/delete-property/ ibb-supply;
};
-&cci {
- qcom,camera@0 {
- /delete-property/ qcom,led-flash-src;
- };
+&qcom_camera_0 {
+ /delete-property/ qcom,led-flash-src;
+};
- qcom,camera@1 {
- /delete-property/ cam_vana-supply;
- };
+&qcom_camera_1 {
+ /delete-property/ cam_vana-supply;
};
&usb_otg_switch {
@@ -1630,16 +1616,15 @@
qcom,no-smr-check;
};
-/ {
- reserved-memory {
- early_camera_mem: early_camera_mem@b3fff000 {
- reg = <0 0xb3fff000 0 0x800000>;
- label = "early_camera_mem";
- };
- early_audio_mem: early_audio_mem@0xb5fff000 {
- reg = <0x0 0xb5fff000 0x0 0x3FFFFC>;
- label = "early_audio_mem";
- };
+&reserved_memory {
+ early_camera_mem: early_camera_mem@b3fff000 {
+ reg = <0 0xb3fff000 0 0x800000>;
+ label = "early_camera_mem";
+ };
+
+ early_audio_mem: early_audio_mem@0xb5fff000 {
+ reg = <0x0 0xb5fff000 0x0 0x3FFFFC>;
+ label = "early_audio_mem";
};
};
diff --git a/arch/arm/boot/dts/qcom/msm8996-auto.dtsi b/arch/arm/boot/dts/qcom/msm8996-auto.dtsi
index 4a60b3dae021..ba075694d8c9 100644
--- a/arch/arm/boot/dts/qcom/msm8996-auto.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8996-auto.dtsi
@@ -10,7 +10,7 @@
* GNU General Public License for more details.
*/
-&vendor {
+&android_vendor {
fsmgr_flags = "wait,slotselect,verify";
};
diff --git a/arch/arm/boot/dts/qcom/msm8996-camera-sensor-adp.dtsi b/arch/arm/boot/dts/qcom/msm8996-camera-sensor-adp.dtsi
index 31139c0fbb6d..e798b3d1ee60 100644
--- a/arch/arm/boot/dts/qcom/msm8996-camera-sensor-adp.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8996-camera-sensor-adp.dtsi
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2017, 2019, 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
@@ -114,7 +114,7 @@
qcom,clock-rates = <19200000 0>;
};
- qcom,camera@0 {
+ qcom_camera_0: qcom,camera@0 {
cell-index = <0>;
compatible = "qcom,camera";
reg = <0x0>;
@@ -156,7 +156,7 @@
qcom,clock-rates = <24000000 0>;
};
- qcom,camera@1 {
+ qcom_camera_1: qcom,camera@1 {
cell-index = <1>;
compatible = "qcom,camera";
reg = <0x1>;
diff --git a/arch/arm/boot/dts/qcom/msm8996-mdss-panels.dtsi b/arch/arm/boot/dts/qcom/msm8996-mdss-panels.dtsi
index 94be1082c2be..6cc69045d031 100644
--- a/arch/arm/boot/dts/qcom/msm8996-mdss-panels.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8996-mdss-panels.dtsi
@@ -1,4 +1,4 @@
-/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2015-2017, 2019, 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
@@ -47,6 +47,7 @@
qcom,supply-max-voltage = <1800000>;
qcom,supply-enable-load = <62000>;
qcom,supply-disable-load = <80>;
+ qcom,supply-post-on-sleep = <20>;
};
qcom,panel-supply-entry@1 {
@@ -65,7 +66,7 @@
qcom,supply-max-voltage = <6000000>;
qcom,supply-enable-load = <100000>;
qcom,supply-disable-load = <100>;
- qcom,supply-post-on-sleep = <10>;
+ qcom,supply-post-on-sleep = <20>;
};
};
};
diff --git a/arch/arm/boot/dts/qcom/msm8996-pm8994-pmi8994-pm8004.dtsi b/arch/arm/boot/dts/qcom/msm8996-pm8994-pmi8994-pm8004.dtsi
index f3ef9be36cd7..9747323070e0 100644
--- a/arch/arm/boot/dts/qcom/msm8996-pm8994-pmi8994-pm8004.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8996-pm8994-pmi8994-pm8004.dtsi
@@ -1,4 +1,4 @@
-/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2015, 2019, 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
@@ -25,14 +25,25 @@
* Override PMI8994 resources with proper PM8004 resources for MSM8996 with
* PM8004.
*/
-&pmi8994_s2 {
- status = "disabled";
+
+&spmi_bus {
+ qcom_pmi8994_3: qcom,pmi8994@3 {
+ pmi8994_s2: regulator@1700 {
+ status = "disabled";
+ };
+ };
};
-&pm8004_s2 {
- status = "ok";
+&spmi_bus {
+ qcom_pm8004_5: qcom,pm8004@5 {
+ pm8004_s2: regulator@1700 {
+ status = "ok";
+ };
+ };
};
-&gfx_cpr {
- vdd-supply = <&pm8004_s2>;
+&soc {
+ gfx_cpr: cpr3-ctrl@838000 {
+ vdd-supply = <&pm8004_s2>;
+ };
};
diff --git a/arch/arm/boot/dts/qcom/msm8996-pm8994.dtsi b/arch/arm/boot/dts/qcom/msm8996-pm8994.dtsi
index 4730ee7cc1ce..617e8f27c3d3 100644
--- a/arch/arm/boot/dts/qcom/msm8996-pm8994.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8996-pm8994.dtsi
@@ -1,4 +1,4 @@
-/* Copyright (c) 2016, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2016, 2019, 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
@@ -25,10 +25,8 @@
status = "disabled";
};
-&spmi_bus {
- /delete-node/ qcom,pm8004@4;
- /delete-node/ qcom,pm8004@5;
-};
+/delete-node/ &qcom_pm8004_4;
+/delete-node/ &qcom_pm8004_5;
&gfx_cpr {
/delete-property/ vdd-supply;
diff --git a/arch/arm/boot/dts/qcom/msm8996-pro-auto.dtsi b/arch/arm/boot/dts/qcom/msm8996-pro-auto.dtsi
new file mode 100644
index 000000000000..9036858758d4
--- /dev/null
+++ b/arch/arm/boot/dts/qcom/msm8996-pro-auto.dtsi
@@ -0,0 +1,72 @@
+/* Copyright (c) 2019, 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
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include "msm8996pro.dtsi"
+#include "msm8996pro-auto.dtsi"
+#include "msm8996-auto.dtsi"
+
+&spmi_bus {
+ /delete-node/ qcom,pmi8994@2;
+ /delete-node/ qcom,pmi8994@3;
+ /delete-node/ qcom,pm8004@5;
+};
+
+&rpm_bus {
+ /delete-node/ rpm-regulator-bstb;
+ /delete-node/ rpm-regulator-bbyb;
+ /delete-node/ rpm-regulator-smpb1;
+};
+
+&pcie0 {
+ /delete-property/ qcom,l1-supported;
+ /delete-property/ qcom,l1ss-supported;
+ /delete-property/ qcom,aux-clk-sync;
+};
+
+&pcie1 {
+ /delete-property/ qcom,l1-supported;
+ /delete-property/ qcom,l1ss-supported;
+ /delete-property/ qcom,aux-clk-sync;
+};
+
+&pcie2 {
+ /delete-property/ qcom,l1-supported;
+ /delete-property/ qcom,l1ss-supported;
+ /delete-property/ qcom,aux-clk-sync;
+};
+
+&mdss_hdmi_tx {
+ /delete-property/ qcom,pluggable;
+};
+
+&slim_msm {
+ status = "disabled";
+};
+
+&mdss_dsi0 {
+ /delete-property/ lab-supply;
+ /delete-property/ ibb-supply;
+};
+
+&mdss_dsi1 {
+ /delete-property/ lab-supply;
+ /delete-property/ ibb-supply;
+};
+
+&usb_otg_switch {
+ /delete-property/ vin-supply;
+ /delete-property/ gpio;
+};
+
+&usb3 {
+ /delete-property/ vbus_dwc3-supply;
+};
diff --git a/arch/arm/boot/dts/qcom/msm8996-sde-display.dtsi b/arch/arm/boot/dts/qcom/msm8996-sde-display.dtsi
index 9d1655982cce..4768a7dd162d 100644
--- a/arch/arm/boot/dts/qcom/msm8996-sde-display.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8996-sde-display.dtsi
@@ -11,59 +11,8 @@
*/
#include "msm8996-mdss-panels.dtsi"
-#include "dsi-panel-jdi-1080p-video.dtsi"
-#include "dsi-panel-sharp-1080p-cmd.dtsi"
&soc {
- dsi_panel_pwr_supply: dsi_panel_pwr_supply {
- #address-cells = <1>;
- #size-cells = <0>;
-
- qcom,panel-supply-entry@0 {
- reg = <0>;
- qcom,supply-name = "vddio";
- qcom,supply-min-voltage = <1800000>;
- qcom,supply-max-voltage = <1800000>;
- qcom,supply-enable-load = <62000>;
- qcom,supply-disable-load = <80>;
- qcom,supply-post-on-sleep = <20>;
- };
-
- qcom,panel-supply-entry@1 {
- reg = <1>;
- qcom,supply-name = "lab";
- qcom,supply-min-voltage = <4600000>;
- qcom,supply-max-voltage = <6000000>;
- qcom,supply-enable-load = <100000>;
- qcom,supply-disable-load = <100>;
- };
-
- qcom,panel-supply-entry@2 {
- reg = <2>;
- qcom,supply-name = "ibb";
- qcom,supply-min-voltage = <4600000>;
- qcom,supply-max-voltage = <6000000>;
- qcom,supply-enable-load = <100000>;
- qcom,supply-disable-load = <100>;
- qcom,supply-post-on-sleep = <20>;
- };
- };
-
- dsi_panel_pwr_supply_no_labibb: dsi_panel_pwr_supply_no_labibb {
- #address-cells = <1>;
- #size-cells = <0>;
-
- qcom,panel-supply-entry@0 {
- reg = <0>;
- qcom,supply-name = "vddio";
- qcom,supply-min-voltage = <1800000>;
- qcom,supply-max-voltage = <1800000>;
- qcom,supply-enable-load = <62000>;
- qcom,supply-disable-load = <80>;
- qcom,supply-post-on-sleep = <20>;
- };
- };
-
dsi_panel_pwr_supply_vdd_no_labibb: dsi_panel_pwr_supply_vdd_no_labibb {
#address-cells = <1>;
#size-cells = <0>;
diff --git a/arch/arm/boot/dts/qcom/msm8996.dtsi b/arch/arm/boot/dts/qcom/msm8996.dtsi
index 0c5b605bc29f..b11458580b09 100644
--- a/arch/arm/boot/dts/qcom/msm8996.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8996.dtsi
@@ -176,6 +176,13 @@
soc: soc { };
+ vendor: vendor {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0 0 0 0xffffffff>;
+ compatible = "simple-bus";
+ };
+
firmware: firmware {
android {
compatible = "android,firmware";
@@ -185,7 +192,7 @@
};
fstab {
compatible = "android,fstab";
- vendor: vendor {
+ android_vendor: vendor {
compatible = "android,vendor";
dev = "/dev/block/platform/soc/7464900.sdhci/by-name/vendor";
type = "ext4";
@@ -197,7 +204,7 @@
};
};
- reserved-memory {
+ reserved_memory: reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
diff --git a/arch/arm/boot/dts/qcom/msm8996pro-auto-adp-lite-overlay.dts b/arch/arm/boot/dts/qcom/msm8996pro-auto-adp-lite-overlay.dts
new file mode 100644
index 000000000000..e1be9c4292bf
--- /dev/null
+++ b/arch/arm/boot/dts/qcom/msm8996pro-auto-adp-lite-overlay.dts
@@ -0,0 +1,23 @@
+/* Copyright (c) 2019, 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
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "msm8996pro-auto-adp-lite.dtsi"
+
+/ {
+ model = "Qualcomm Technologies, Inc. MSM 8996pro AUTO ADP LITE";
+ compatible = "qcom,msm8996-adp", "qcom,msm8996", "qcom,adp";
+ qcom,msm-id = <315 0x10000>;
+ qcom,board-id = <0x03010019 0>;
+};
diff --git a/arch/arm/boot/dts/qcom/msm8996pro-auto-adp-lite.dtsi b/arch/arm/boot/dts/qcom/msm8996pro-auto-adp-lite.dtsi
new file mode 100644
index 000000000000..ed4945de4c9a
--- /dev/null
+++ b/arch/arm/boot/dts/qcom/msm8996pro-auto-adp-lite.dtsi
@@ -0,0 +1,95 @@
+/* Copyright (c) 2019, 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
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/clock/msm-clocks-8996.h>
+#include "msm8996-pm8994.dtsi"
+#include "msm8996-agave-adp.dtsi"
+
+&spi_9 {
+ status = "disabled";
+};
+
+&soc {
+ qcom,msm-ssc-sensors {
+ status = "disabled";
+ };
+
+ qcom,msm-thermal {
+ qcom,hotplug-temp = <115>;
+ qcom,hotplug-temp-hysteresis = <25>;
+ qcom,therm-reset-temp = <119>;
+ };
+
+ i2c@75b6000 { /* BLSP8 */
+ /* ADV7533 HDMI Bridge Chip removed on ADP Lite */
+ adv7533@39 {
+ status = "disabled";
+ };
+ };
+
+ qcom,adv7481@70 {
+ status = "disabled";
+ };
+
+ qcom,msm-ba {
+ status = "disabled";
+ };
+
+ qcom,tv-tuner {
+ status = "disabled";
+ };
+};
+
+&dsi_adv_7533_2 {
+ /delete-property/ qcom,dsi-display-active;
+};
+
+&sde_kms {
+ connectors = <&sde_hdmi_tx &sde_hdmi &dsi_adv_7533_1>;
+};
+
+&pil_modem {
+ pinctrl-names = "default";
+ pinctrl-0 = <&modem_mux>;
+};
+
+&slim_msm {
+ status = "disabled";
+};
+
+&pm8994_mpps {
+ mpp@a500 { /* MPP 6 */
+ qcom,mode = <1>; /* Digital output */
+ qcom,output-type = <0>; /* CMOS logic */
+ qcom,vin-sel = <2>; /* S4 1.8V */
+ qcom,src-sel = <0>; /* Constant */
+ qcom,master-en = <1>; /* Enable GPIO */
+ status = "okay";
+ };
+};
+
+&sdhc_2 {
+ cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
+ pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on_sbc>;
+ pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off
+ &sdc2_cd_on_sbc>;
+};
+
+&i2c_7 {
+ silabs4705@11 { /* SiLabs FM chip, slave id 0x11*/
+ status = "disabled";
+ };
+};
+
+/delete-node/ &qcom_pmi8994_3;
+/delete-node/ &qcom_pm8004_5;
diff --git a/arch/arm/boot/dts/qcom/msm8996pro-auto-adp-overlay.dts b/arch/arm/boot/dts/qcom/msm8996pro-auto-adp-overlay.dts
new file mode 100644
index 000000000000..952a807edfaf
--- /dev/null
+++ b/arch/arm/boot/dts/qcom/msm8996pro-auto-adp-overlay.dts
@@ -0,0 +1,23 @@
+/* Copyright (c) 2019, 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
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include "msm8996pro-auto-adp.dtsi"
+
+/ {
+ model = "Qualcomm Technologies, Inc. MSM 8996pro AUTO ADP";
+ compatible = "qcom,msm8996-adp", "qcom,msm8996", "qcom,adp";
+ qcom,msm-id = <315 0x10000>;
+ qcom,board-id = <0x02010019 0>, <0x00010001 0>;
+};
diff --git a/arch/arm/boot/dts/qcom/msm8996pro-auto-adp.dtsi b/arch/arm/boot/dts/qcom/msm8996pro-auto-adp.dtsi
new file mode 100644
index 000000000000..ffdb4b07406b
--- /dev/null
+++ b/arch/arm/boot/dts/qcom/msm8996pro-auto-adp.dtsi
@@ -0,0 +1,95 @@
+/* Copyright (c) 2019, 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
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/clock/msm-clocks-8996.h>
+#include "msm8996-pm8994.dtsi"
+#include "msm8996-agave-adp.dtsi"
+
+&spi_9 {
+ status = "ok";
+ can-controller@0 {
+ compatible = "renesas,rh850";
+ reg = <0>;
+ interrupt-parent = <&tlmm>;
+ interrupts = <122 0>;
+ spi-max-frequency = <5000000>;
+ };
+};
+
+&soc {
+ qcom,msm-ssc-sensors {
+ status = "disabled";
+ };
+
+ qcom,msm-thermal {
+ qcom,hotplug-temp = <115>;
+ qcom,hotplug-temp-hysteresis = <25>;
+ qcom,therm-reset-temp = <119>;
+ };
+
+ qcom,adv7481@70 {
+ qcom,cam-vreg-min-voltage = <1300000 0 1800000>;
+ qcom,cam-vreg-max-voltage = <1300000 0 1800000>;
+ };
+};
+
+&pil_modem {
+ pinctrl-names = "default";
+ pinctrl-0 = <&modem_mux>;
+};
+
+&slim_msm {
+ status = "disabled";
+};
+
+&pm8994_mpps {
+ mpp@a500 { /* MPP 6 */
+ qcom,mode = <1>; /* Digital output */
+ qcom,output-type = <0>; /* CMOS logic */
+ qcom,vin-sel = <2>; /* S4 1.8V */
+ qcom,src-sel = <0>; /* Constant */
+ qcom,master-en = <1>; /* Enable GPIO */
+ status = "okay";
+ };
+};
+
+&sdhc_1 {
+ qcom,tsens-id = <0>;
+};
+
+&sdhc_2 {
+ compatible = "qcom,late-sdhci-msm";
+
+ cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
+ pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on_sbc>;
+ pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off
+ &sdc2_cd_on_sbc>;
+ qcom,tsens-id = <10>;
+ qcom,disable_scaling_threshold_temp = <(-15)>;
+ qcom,enable_scaling_threshold_temp = <(-5)>;
+};
+
+&i2c_7 {
+ silabs4705@11 { /* SiLabs FM chip, slave id 0x11*/
+ status = "disabled";
+ };
+};
+
+&wil6210 {
+ qcom,pcie-parent = <&pcie0>;
+ qcom,smmu-support;
+ status = "ok";
+};
+
+/delete-node/ &qcom_pmi8994_3;
+/delete-node/ &qcom_pm8004_5;
diff --git a/arch/arm/boot/dts/qcom/msm8996pro-auto.dts b/arch/arm/boot/dts/qcom/msm8996pro-auto.dts
new file mode 100644
index 000000000000..df609fbf1ed6
--- /dev/null
+++ b/arch/arm/boot/dts/qcom/msm8996pro-auto.dts
@@ -0,0 +1,23 @@
+/* Copyright (c) 2019, 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
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+/dts-v1/;
+
+#include "msm8996-pro-auto.dtsi"
+
+/ {
+ model = "Qualcomm Technologies, Inc. MSM 8996pro AUTO SoC";
+ compatible = "qcom,msm8996-adp", "qcom,msm8996", "qcom,adp";
+ qcom,msm-id = <315 0x10000>;
+ qcom,pmic-id = <0x20009 0x0 0x0 0x0>;
+ qcom,board-id = <0 0>;
+};
diff --git a/arch/arm64/configs/msm-auto-gvm-perf_defconfig b/arch/arm64/configs/msm-auto-gvm-perf_defconfig
index f16c5e6e6b3c..ee02d824412d 100644
--- a/arch/arm64/configs/msm-auto-gvm-perf_defconfig
+++ b/arch/arm64/configs/msm-auto-gvm-perf_defconfig
@@ -243,6 +243,7 @@ CONFIG_INPUT_MISC=y
CONFIG_INPUT_UINPUT=y
CONFIG_INPUT_GPIO=m
CONFIG_SERIO_AMBAKMI=y
+CONFIG_LEGACY_PTY_COUNT=32
# CONFIG_DEVMEM is not set
# CONFIG_DEVKMEM is not set
CONFIG_SERIAL_MSM_HS=y
diff --git a/arch/arm64/configs/msm-auto-gvm_defconfig b/arch/arm64/configs/msm-auto-gvm_defconfig
index 5b8ed664fb85..fe63b46eb11c 100644
--- a/arch/arm64/configs/msm-auto-gvm_defconfig
+++ b/arch/arm64/configs/msm-auto-gvm_defconfig
@@ -232,6 +232,7 @@ CONFIG_INPUT_UINPUT=y
CONFIG_INPUT_GPIO=m
CONFIG_SERIO_AMBAKMI=y
CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_LEGACY_PTY_COUNT=32
# CONFIG_DEVMEM is not set
# CONFIG_DEVKMEM is not set
CONFIG_SERIAL_AMBA_PL011=y
diff --git a/drivers/char/adsprpc.c b/drivers/char/adsprpc.c
index bd76abfa10ee..e9be78e24ac7 100644
--- a/drivers/char/adsprpc.c
+++ b/drivers/char/adsprpc.c
@@ -83,6 +83,7 @@
#define FASTRPC_LINK_DISCONNECTING (0x7)
#define PERF_KEYS "count:flush:map:copy:glink:getargs:putargs:invalidate:invoke"
+#define FASTRPC_STATIC_HANDLE_KERNEL (1)
#define FASTRPC_STATIC_HANDLE_LISTENER (3)
#define FASTRPC_STATIC_HANDLE_MAX (20)
@@ -1667,6 +1668,15 @@ static int fastrpc_internal_invoke(struct fastrpc_file *fl, uint32_t mode,
if (fl->profile)
getnstimeofday(&invoket);
+ if (!kernel) {
+ VERIFY(err, invoke->handle != FASTRPC_STATIC_HANDLE_KERNEL);
+ if (err) {
+ pr_err("adsprpc: ERROR: %s: user application %s trying to send a kernel RPC message to channel %d",
+ __func__, current->comm, cid);
+ goto bail;
+ }
+ }
+
VERIFY(err, fl->sctx != NULL);
if (err)
goto bail;
@@ -1777,7 +1787,7 @@ static int fastrpc_init_process(struct fastrpc_file *fl,
ra[0].buf.pv = (void *)&tgid;
ra[0].buf.len = sizeof(tgid);
- ioctl.inv.handle = 1;
+ ioctl.inv.handle = FASTRPC_STATIC_HANDLE_KERNEL;
ioctl.inv.sc = REMOTE_SCALARS_MAKE(0, 1, 0);
ioctl.inv.pra = ra;
ioctl.fds = NULL;
@@ -1865,7 +1875,7 @@ static int fastrpc_init_process(struct fastrpc_file *fl,
ra[5].buf.len = sizeof(inbuf.siglen);
fds[5] = 0;
- ioctl.inv.handle = 1;
+ ioctl.inv.handle = FASTRPC_STATIC_HANDLE_KERNEL;
ioctl.inv.sc = REMOTE_SCALARS_MAKE(6, 4, 0);
if (uproc->attrs)
ioctl.inv.sc = REMOTE_SCALARS_MAKE(7, 6, 0);
@@ -1934,7 +1944,7 @@ static int fastrpc_init_process(struct fastrpc_file *fl,
ra[2].buf.pv = (void *)pages;
ra[2].buf.len = sizeof(*pages);
fds[2] = 0;
- ioctl.inv.handle = 1;
+ ioctl.inv.handle = FASTRPC_STATIC_HANDLE_KERNEL;
ioctl.inv.sc = REMOTE_SCALARS_MAKE(8, 3, 0);
ioctl.inv.pra = ra;
@@ -1978,7 +1988,7 @@ static int fastrpc_release_current_dsp_process(struct fastrpc_file *fl)
tgid = fl->tgid;
ra[0].buf.pv = (void *)&tgid;
ra[0].buf.len = sizeof(tgid);
- ioctl.inv.handle = 1;
+ ioctl.inv.handle = FASTRPC_STATIC_HANDLE_KERNEL;
ioctl.inv.sc = REMOTE_SCALARS_MAKE(1, 1, 0);
ioctl.inv.pra = ra;
ioctl.fds = NULL;
@@ -2023,7 +2033,7 @@ static int fastrpc_mmap_on_dsp(struct fastrpc_file *fl, uint32_t flags,
ra[2].buf.pv = (void *)&routargs;
ra[2].buf.len = sizeof(routargs);
- ioctl.inv.handle = 1;
+ ioctl.inv.handle = FASTRPC_STATIC_HANDLE_KERNEL;
if (fl->apps->compat)
ioctl.inv.sc = REMOTE_SCALARS_MAKE(4, 2, 1);
else
@@ -2081,7 +2091,7 @@ static int fastrpc_munmap_on_dsp_rh(struct fastrpc_file *fl, uint64_t phys,
ra[0].buf.pv = (void *)&routargs;
ra[0].buf.len = sizeof(routargs);
- ioctl.inv.handle = 1;
+ ioctl.inv.handle = FASTRPC_STATIC_HANDLE_KERNEL;
ioctl.inv.sc = REMOTE_SCALARS_MAKE(7, 0, 1);
ioctl.inv.pra = ra;
ioctl.fds = NULL;
@@ -2129,7 +2139,7 @@ static int fastrpc_munmap_on_dsp(struct fastrpc_file *fl, uintptr_t raddr,
ra[0].buf.pv = (void *)&inargs;
ra[0].buf.len = sizeof(inargs);
- ioctl.inv.handle = 1;
+ ioctl.inv.handle = FASTRPC_STATIC_HANDLE_KERNEL;
if (fl->apps->compat)
ioctl.inv.sc = REMOTE_SCALARS_MAKE(5, 1, 0);
else
diff --git a/drivers/char/diag/diag_dci.c b/drivers/char/diag/diag_dci.c
index 4051521583b0..f2eb9b285c67 100644
--- a/drivers/char/diag/diag_dci.c
+++ b/drivers/char/diag/diag_dci.c
@@ -1537,6 +1537,7 @@ void diag_dci_notify_client(int peripheral_mask, int data, int proc)
DIAG_LOG(DIAG_DEBUG_PERIPHERALS,
"diag: dci client with pid = %d Exited..\n",
entry->tgid);
+ put_pid(pid_struct);
mutex_unlock(&driver->dci_mutex);
return;
}
@@ -1551,9 +1552,12 @@ void diag_dci_notify_client(int peripheral_mask, int data, int proc)
if (stat)
pr_err("diag: Err sending dci signal to client, signal data: 0x%x, stat: %d\n",
info.si_int, stat);
- } else
+ } else {
pr_err("diag: client data is corrupted, signal data: 0x%x, stat: %d\n",
info.si_int, stat);
+ }
+ put_task_struct(dci_task);
+ put_pid(pid_struct);
}
}
}
@@ -2305,11 +2309,18 @@ struct diag_dci_client_tbl *dci_lookup_client_entry_pid(int tgid)
DIAG_LOG(DIAG_DEBUG_DCI,
"diag: valid task doesn't exist for pid = %d\n",
entry->tgid);
+ put_pid(pid_struct);
continue;
}
- if (task_s == entry->client)
- if (entry->client->tgid == tgid)
+ if (task_s == entry->client) {
+ if (entry->client->tgid == tgid) {
+ put_task_struct(task_s);
+ put_pid(pid_struct);
return entry;
+ }
+ }
+ put_task_struct(task_s);
+ put_pid(pid_struct);
}
return NULL;
}
@@ -2939,6 +2950,7 @@ int diag_dci_register_client(struct diag_dci_reg_tbl_t *reg_entry)
mutex_lock(&driver->dci_mutex);
+ get_task_struct(current);
new_entry->client = current;
new_entry->tgid = current->tgid;
new_entry->client_info.notification_list =
diff --git a/drivers/char/diag/diagchar_core.c b/drivers/char/diag/diagchar_core.c
index 5deeac9d80e8..520f553200f5 100644
--- a/drivers/char/diag/diagchar_core.c
+++ b/drivers/char/diag/diagchar_core.c
@@ -3342,20 +3342,32 @@ exit:
DIAG_LOG(DIAG_DEBUG_DCI,
"diag: valid task doesn't exist for pid = %d\n",
entry->tgid);
+ put_pid(pid_struct);
continue;
}
- if (task_s == entry->client)
- if (entry->client->tgid != current->tgid)
+ if (task_s == entry->client) {
+ if (entry->client->tgid != current->tgid) {
+ put_task_struct(task_s);
+ put_pid(pid_struct);
continue;
- if (!entry->in_service)
+ }
+ }
+ if (!entry->in_service) {
+ put_task_struct(task_s);
+ put_pid(pid_struct);
continue;
+ }
if (copy_to_user(buf + ret, &data_type, sizeof(int))) {
+ put_task_struct(task_s);
+ put_pid(pid_struct);
mutex_unlock(&driver->dci_mutex);
goto end;
}
ret += sizeof(int);
if (copy_to_user(buf + ret, &entry->client_info.token,
sizeof(int))) {
+ put_task_struct(task_s);
+ put_pid(pid_struct);
mutex_unlock(&driver->dci_mutex);
goto end;
}
@@ -3367,9 +3379,13 @@ exit:
atomic_dec(&driver->data_ready_notif[index]);
mutex_unlock(&driver->diagchar_mutex);
if (exit_stat == 1) {
+ put_task_struct(task_s);
+ put_pid(pid_struct);
mutex_unlock(&driver->dci_mutex);
goto end;
}
+ put_task_struct(task_s);
+ put_pid(pid_struct);
}
mutex_unlock(&driver->dci_mutex);
goto end;
diff --git a/drivers/gpu/drm/msm/sde/sde_connector.c b/drivers/gpu/drm/msm/sde/sde_connector.c
index 83aaeee13d73..f46fad0309b6 100644
--- a/drivers/gpu/drm/msm/sde/sde_connector.c
+++ b/drivers/gpu/drm/msm/sde/sde_connector.c
@@ -628,7 +628,8 @@ void sde_connector_complete_commit(struct drm_connector *connector)
sde_splash_free_resource(priv->kms, &priv->phandle,
c_conn->connector_type,
- c_conn->display);
+ c_conn->display,
+ c_conn->is_shared);
}
}
@@ -1003,7 +1004,8 @@ struct drm_connector *sde_connector_init(struct drm_device *dev,
sinfo = &sde_kms->splash_info;
if (sinfo && sinfo->handoff)
- sde_splash_setup_connector_count(sinfo, connector_type);
+ sde_splash_setup_connector_count(sinfo, connector_type,
+ display, c_conn->is_shared);
priv->connectors[priv->num_connectors++] = &c_conn->base;
diff --git a/drivers/gpu/drm/msm/sde/sde_encoder_phys_shd.c b/drivers/gpu/drm/msm/sde/sde_encoder_phys_shd.c
index 5ba2035d389b..46f5cadff3e8 100644
--- a/drivers/gpu/drm/msm/sde/sde_encoder_phys_shd.c
+++ b/drivers/gpu/drm/msm/sde/sde_encoder_phys_shd.c
@@ -197,12 +197,15 @@ static int _sde_encoder_phys_shd_unregister_irq(
}
static void _sde_shd_hw_ctl_clear_blendstages_in_range(
- struct sde_shd_hw_ctl *hw_ctl, enum sde_lm lm)
+ struct sde_shd_hw_ctl *hw_ctl, enum sde_lm lm,
+ bool handoff, const struct splash_reserved_pipe_info *resv_pipes,
+ u32 resv_pipes_length)
{
struct sde_hw_blk_reg_map *c = &hw_ctl->base.hw;
u32 mixercfg, mixercfg_ext;
u32 mixercfg_ext2;
u32 mask = 0, ext_mask = 0, ext2_mask = 0;
+ u32 splash_mask = 0, splash_ext_mask = 0;
u32 start = hw_ctl->range.start + SDE_STAGE_0;
u32 end = start + hw_ctl->range.size;
u32 i;
@@ -214,6 +217,13 @@ static void _sde_shd_hw_ctl_clear_blendstages_in_range(
if (!mixercfg && !mixercfg_ext && !mixercfg_ext2)
goto end;
+ if (handoff) {
+ sde_splash_get_mixer_mask(resv_pipes,
+ resv_pipes_length, &splash_mask, &splash_ext_mask);
+ mask |= splash_mask;
+ ext_mask |= splash_ext_mask;
+ }
+
/* SSPP_VIG0 */
i = (mixercfg & 0x7) | ((mixercfg_ext & 1) << 3);
if (i > start && i <= end) {
@@ -325,7 +335,9 @@ static void _sde_shd_hw_ctl_clear_all_blendstages(struct sde_hw_ctl *ctx,
for (i = 0; i < ctx->mixer_count; i++) {
int mixer_id = ctx->mixer_hw_caps[i].id;
- _sde_shd_hw_ctl_clear_blendstages_in_range(hw_ctl, mixer_id);
+ _sde_shd_hw_ctl_clear_blendstages_in_range(hw_ctl, mixer_id,
+ handoff, resv_pipes,
+ resv_pipes_length);
}
}
@@ -351,11 +363,13 @@ static void _sde_shd_hw_ctl_setup_blendstage(struct sde_hw_ctl *ctx,
{
struct sde_shd_hw_ctl *hw_ctl;
u32 mixercfg = 0, mixercfg_ext = 0, mix, ext, full, mixercfg_ext2;
+ u32 splash_mask = 0, splash_ext_mask = 0;
u32 mask = 0, ext_mask = 0, ext2_mask = 0;
int i, j;
int stages;
int stage_offset = 0;
int pipes_per_stage;
+ struct sde_hw_blk_reg_map *c;
if (!ctx)
return;
@@ -368,7 +382,8 @@ static void _sde_shd_hw_ctl_setup_blendstage(struct sde_hw_ctl *ctx,
else
pipes_per_stage = 1;
- _sde_shd_hw_ctl_clear_blendstages_in_range(hw_ctl, lm);
+ _sde_shd_hw_ctl_clear_blendstages_in_range(hw_ctl, lm, handoff,
+ resv_pipes, resv_pipes_length);
if (!stage_cfg)
goto exit;
@@ -377,6 +392,21 @@ static void _sde_shd_hw_ctl_setup_blendstage(struct sde_hw_ctl *ctx,
stage_offset = hw_ctl->range.start;
stages = hw_ctl->range.size;
+ c = &hw_ctl->base.hw;
+ if (handoff) {
+ mixercfg = SDE_REG_READ(c, CTL_LAYER(lm));
+ mixercfg_ext = SDE_REG_READ(c, CTL_LAYER_EXT(lm));
+ sde_splash_get_mixer_mask(resv_pipes,
+ resv_pipes_length, &splash_mask, &splash_ext_mask);
+
+ mixercfg &= splash_mask;
+ mixercfg_ext &= splash_ext_mask;
+
+ mask |= splash_mask;
+ ext_mask |= splash_ext_mask;
+ mixercfg |= CTL_MIXER_BORDER_OUT;
+ }
+
for (i = SDE_STAGE_0; i <= stages; i++) {
/* overflow to ext register if 'i + 1 > 7' */
mix = (i + stage_offset + 1) & 0x7;
diff --git a/drivers/gpu/drm/msm/sde/sde_hw_ctl.c b/drivers/gpu/drm/msm/sde/sde_hw_ctl.c
index 6ed424217183..e9fb9a2e3183 100644
--- a/drivers/gpu/drm/msm/sde/sde_hw_ctl.c
+++ b/drivers/gpu/drm/msm/sde/sde_hw_ctl.c
@@ -258,63 +258,6 @@ static inline int sde_hw_ctl_get_bitmask_cdm(struct sde_hw_ctl *ctx,
return 0;
}
-static inline void sde_hw_ctl_get_splash_mixer_mask(
- const struct splash_reserved_pipe_info *resv_pipes,
- u32 length, u32 *mixercfg, u32 *mixercfg_ext)
-{
- int i = 0;
- u32 mixer_mask = 0;
- u32 mixer_ext_mask = 0;
-
- for (i = 0; i < length; i++) {
- /* LK's splash VIG layer always stays on second top */
- /* most layerearly HMI RGB layer stays at top most layer */
- switch (resv_pipes[i].pipe_id) {
- case SSPP_VIG0:
- mixer_mask |= 0x7 << 0;
- mixer_ext_mask |= BIT(0);
- break;
- case SSPP_VIG1:
- mixer_mask |= 0x7 << 3;
- mixer_ext_mask |= BIT(2);
- break;
- case SSPP_VIG2:
- mixer_mask |= 0x7 << 6;
- mixer_ext_mask |= BIT(4);
- break;
- case SSPP_VIG3:
- mixer_mask |= 0x7 << 26;
- mixer_ext_mask |= BIT(6);
- break;
- /*
- * If going here, that means the call comes from one
- * NULL commit, so stage RGB pipe as the same stage level
- * as that in bootloader splash.
- */
- case SSPP_RGB0:
- mixer_mask |= 0x2 << 9;
- mixer_ext_mask |= BIT(8);
- break;
- case SSPP_RGB1:
- mixer_mask |= 0x2 << 12;
- mixer_ext_mask |= BIT(10);
- break;
- case SSPP_RGB2:
- mixer_mask |= 0x2 << 15;
- mixer_ext_mask |= BIT(12);
- break;
- case SSPP_RGB3:
- mixer_mask |= 0x2 << 29;
- mixer_ext_mask |= BIT(14);
- break;
- default:
- break;
- }
- }
- *mixercfg = mixer_mask;
- *mixercfg_ext = mixer_ext_mask;
-}
-
static u32 sde_hw_ctl_poll_reset_status(struct sde_hw_ctl *ctx, u32 count)
{
struct sde_hw_blk_reg_map *c = &ctx->hw;
@@ -396,7 +339,7 @@ static void sde_hw_ctl_clear_all_blendstages(struct sde_hw_ctl *ctx,
mixercfg = SDE_REG_READ(c, CTL_LAYER(mixer_id));
mixercfg_ext = SDE_REG_READ(c,
CTL_LAYER_EXT(mixer_id));
- sde_hw_ctl_get_splash_mixer_mask(resv_pipes,
+ sde_splash_get_mixer_mask(resv_pipes,
resv_pipes_length, &mixer_mask, &mixerext_mask);
mixercfg &= mixer_mask;
mixercfg_ext &= mixerext_mask;
@@ -445,7 +388,7 @@ static void sde_hw_ctl_setup_blendstage(struct sde_hw_ctl *ctx,
if (handoff) {
mixercfg = SDE_REG_READ(c, CTL_LAYER(lm));
mixercfg_ext = SDE_REG_READ(c, CTL_LAYER_EXT(lm));
- sde_hw_ctl_get_splash_mixer_mask(resv_pipes,
+ sde_splash_get_mixer_mask(resv_pipes,
resv_pipes_length, &mixer_mask, &mixerext_mask);
mixercfg &= mixer_mask;
mixercfg_ext &= mixerext_mask;
diff --git a/drivers/gpu/drm/msm/sde/sde_kms.c b/drivers/gpu/drm/msm/sde/sde_kms.c
index 2ad6d608d9be..0aa4729ac30d 100644
--- a/drivers/gpu/drm/msm/sde/sde_kms.c
+++ b/drivers/gpu/drm/msm/sde/sde_kms.c
@@ -689,7 +689,7 @@ static int _sde_kms_setup_displays(struct drm_device *dev,
}
rc = sde_splash_setup_display_resource(&sde_kms->splash_info,
- display, DRM_MODE_CONNECTOR_DSI);
+ display, DRM_MODE_CONNECTOR_DSI, false);
if (rc) {
SDE_ERROR("dsi %d splash resource setup failed %d\n",
i, rc);
@@ -790,7 +790,7 @@ static int _sde_kms_setup_displays(struct drm_device *dev,
}
rc = sde_splash_setup_display_resource(&sde_kms->splash_info,
- display, DRM_MODE_CONNECTOR_HDMIA);
+ display, DRM_MODE_CONNECTOR_HDMIA, false);
if (rc) {
SDE_ERROR("hdmi %d splash resource setup failed %d\n",
i, rc);
@@ -841,6 +841,15 @@ static int _sde_kms_setup_displays(struct drm_device *dev,
continue;
}
+ rc = sde_splash_setup_display_resource(&sde_kms->splash_info,
+ display, info.intf_type, true);
+ if (rc) {
+ SDE_ERROR("shared %d splash res setup failed %d\n",
+ i, rc);
+ sde_encoder_destroy(encoder);
+ continue;
+ }
+
rc = shd_drm_bridge_init(display, encoder);
if (rc) {
SDE_ERROR("shd bridge %d init failed, %d\n", i, rc);
diff --git a/drivers/gpu/drm/msm/sde/sde_shd.c b/drivers/gpu/drm/msm/sde/sde_shd.c
index 996aa9757a1f..2c42676bedcb 100644
--- a/drivers/gpu/drm/msm/sde/sde_shd.c
+++ b/drivers/gpu/drm/msm/sde/sde_shd.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2019, 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
@@ -31,6 +31,7 @@
#include "sde_encoder.h"
#include "sde_crtc.h"
#include "sde_shd.h"
+#include "sde_splash.h"
#define SHD_DEBUG(fmt, ...) pr_debug(fmt, ##__VA_ARGS__)
@@ -344,8 +345,18 @@ static void shd_display_enable(struct shd_display *display)
display->enabled = true;
- if (!base->enabled)
+ if (!base->enabled) {
shd_display_enable_base(dev, base);
+ /*
+ * Since base display is enabled, and it's marked to have
+ * splash on, but it's not available to user. So for early
+ * splash case, it's needed to update total registered
+ * connector number to reflect the true case to make handoff
+ * can finish.
+ */
+ sde_splash_decrease_connector_cnt(dev, base->connector_type,
+ display->cont_splash_enabled);
+ }
mutex_unlock(&base->base_mutex);
}
diff --git a/drivers/gpu/drm/msm/sde/sde_shd.h b/drivers/gpu/drm/msm/sde/sde_shd.h
index aedb3efb17ff..a3334ccd51d2 100644
--- a/drivers/gpu/drm/msm/sde/sde_shd.h
+++ b/drivers/gpu/drm/msm/sde/sde_shd.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2018-2019, 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
@@ -68,6 +68,7 @@ struct shd_display {
struct list_head head;
bool enabled;
+ bool cont_splash_enabled;
};
#ifdef CONFIG_DRM_SDE_SHD
diff --git a/drivers/gpu/drm/msm/sde/sde_splash.c b/drivers/gpu/drm/msm/sde/sde_splash.c
index 9ef924ccc557..8cc1125fea2e 100644
--- a/drivers/gpu/drm/msm/sde/sde_splash.c
+++ b/drivers/gpu/drm/msm/sde/sde_splash.c
@@ -29,6 +29,7 @@
#include "sde_hdmi.h"
#include "sde_crtc.h"
#include "sde_plane.h"
+#include "sde_shd.h"
#define MDP_SSPP_TOP0_OFF 0x1000
#define DISP_INTF_SEL 0x004
@@ -417,6 +418,42 @@ _sde_splash_release_early_splash_layer(struct sde_splash_info *splash_info)
}
}
+static bool _sde_splash_check_splash(int connector_type,
+ void *display,
+ bool connector_is_shared)
+{
+ struct dsi_display *dsi_display;
+ struct sde_hdmi *sde_hdmi;
+ struct shd_display *shd_display;
+ bool splash_on = false;
+
+ switch (connector_type) {
+ case DRM_MODE_CONNECTOR_HDMIA:
+ if (connector_is_shared) {
+ shd_display = (struct shd_display *)display;
+ splash_on = shd_display->cont_splash_enabled;
+ } else {
+ sde_hdmi = (struct sde_hdmi *)display;
+ splash_on = sde_hdmi->cont_splash_enabled;
+ }
+ break;
+ case DRM_MODE_CONNECTOR_DSI:
+ if (connector_is_shared) {
+ shd_display = (struct shd_display *)display;
+ splash_on = shd_display->cont_splash_enabled;
+ } else {
+ dsi_display = (struct dsi_display *)display;
+ splash_on = dsi_display->cont_splash_enabled;
+ }
+ break;
+ default:
+ SDE_ERROR("%s:invalid connector_type %d\n",
+ __func__, connector_type);
+ }
+
+ return splash_on;
+}
+
__ref int sde_splash_init(struct sde_power_handle *phandle, struct msm_kms *kms)
{
struct sde_kms *sde_kms;
@@ -719,8 +756,14 @@ static bool _sde_splash_get_panel_intf_status(struct sde_splash_info *sinfo,
}
int sde_splash_setup_display_resource(struct sde_splash_info *sinfo,
- void *disp, int connector_type)
+ void *disp, int connector_type,
+ bool display_is_shared)
{
+ struct dsi_display *dsi_display;
+ struct sde_hdmi *sde_hdmi;
+ struct shd_display *shd_display;
+ bool splash_is_on;
+
if (!sinfo || !disp)
return -EINVAL;
@@ -729,47 +772,161 @@ int sde_splash_setup_display_resource(struct sde_splash_info *sinfo,
return 0;
if (connector_type == DRM_MODE_CONNECTOR_DSI) {
- struct dsi_display *display = (struct dsi_display *)disp;
-
- display->cont_splash_enabled =
- _sde_splash_get_panel_intf_status(sinfo,
- display->name,
+ if (display_is_shared) {
+ shd_display = (struct shd_display *)disp;
+ shd_display->cont_splash_enabled =
+ _sde_splash_get_panel_intf_status(sinfo,
+ shd_display->name, connector_type);
+ splash_is_on = shd_display->cont_splash_enabled;
+ } else {
+ dsi_display = (struct dsi_display *)disp;
+ dsi_display->cont_splash_enabled =
+ _sde_splash_get_panel_intf_status(sinfo,
+ dsi_display->name,
connector_type);
+ splash_is_on = dsi_display->cont_splash_enabled;
- DRM_INFO("DSI splash %s\n",
- display->cont_splash_enabled ? "enabled" : "disabled");
-
- if (display->cont_splash_enabled) {
- if (dsi_dsiplay_setup_splash_resource(display))
- return -EINVAL;
+ if (dsi_display->cont_splash_enabled) {
+ if (dsi_dsiplay_setup_splash_resource(
+ dsi_display))
+ return -EINVAL;
+ }
}
- } else if (connector_type == DRM_MODE_CONNECTOR_HDMIA) {
- struct sde_hdmi *sde_hdmi = (struct sde_hdmi *)disp;
- sde_hdmi->cont_splash_enabled =
- _sde_splash_get_panel_intf_status(sinfo,
+ DRM_INFO("DSI %s splash %s\n",
+ display_is_shared ? "shared" : "normal",
+ splash_is_on ? "enabled" : "disabled");
+ } else if (connector_type == DRM_MODE_CONNECTOR_HDMIA) {
+ if (display_is_shared) {
+ shd_display = (struct shd_display *)disp;
+ shd_display->cont_splash_enabled =
+ _sde_splash_get_panel_intf_status(sinfo,
+ NULL, connector_type);
+ splash_is_on = shd_display->cont_splash_enabled;
+ } else {
+ sde_hdmi = (struct sde_hdmi *)disp;
+ sde_hdmi->cont_splash_enabled =
+ _sde_splash_get_panel_intf_status(sinfo,
NULL, connector_type);
+ splash_is_on = sde_hdmi->cont_splash_enabled;
+ }
- DRM_INFO("HDMI splash %s\n",
- sde_hdmi->cont_splash_enabled ? "enabled" : "disabled");
+ DRM_INFO("HDMI %s splash %s\n",
+ display_is_shared ? "shared" : "normal",
+ splash_is_on ? "enabled" : "disabled");
}
return 0;
}
void sde_splash_setup_connector_count(struct sde_splash_info *sinfo,
- int connector_type)
+ int connector_type,
+ void *display,
+ bool connector_is_shared)
+{
+ bool splash_on = false;
+
+ if (!sinfo || !display)
+ return;
+
+ splash_on = _sde_splash_check_splash(connector_type,
+ display, connector_is_shared);
+
+ switch (connector_type) {
+ case DRM_MODE_CONNECTOR_HDMIA:
+ if (splash_on)
+ sinfo->hdmi_connector_cnt++;
+ break;
+ case DRM_MODE_CONNECTOR_DSI:
+ if (splash_on)
+ sinfo->dsi_connector_cnt++;
+ break;
+ default:
+ SDE_ERROR("%s:invalid connector_type %d\n",
+ __func__, connector_type);
+ }
+}
+
+void sde_splash_decrease_connector_cnt(struct drm_device *dev,
+ int connector_type, bool splash_on)
{
+ struct msm_drm_private *priv = dev->dev_private;
+ struct sde_kms *sde_kms;
+ struct sde_splash_info *sinfo;
+
+ if (!priv || !priv->kms) {
+ SDE_ERROR("Invalid kms\n");
+ return;
+ }
+
+ sde_kms = to_sde_kms(priv->kms);
+ sinfo = &sde_kms->splash_info;
+
+ if (!sinfo->handoff || !splash_on)
+ return;
+
switch (connector_type) {
case DRM_MODE_CONNECTOR_HDMIA:
- sinfo->hdmi_connector_cnt++;
+ sinfo->hdmi_connector_cnt--;
break;
case DRM_MODE_CONNECTOR_DSI:
- sinfo->dsi_connector_cnt++;
+ sinfo->dsi_connector_cnt--;
break;
default:
- SDE_ERROR("invalid connector_type %d\n", connector_type);
+ SDE_ERROR("%s: invalid connector_type %d\n",
+ __func__, connector_type);
+ }
+}
+
+void sde_splash_get_mixer_mask(
+ const struct splash_reserved_pipe_info *resv_pipes,
+ u32 length, u32 *mixercfg, u32 *mixercfg_ext)
+{
+ int i = 0;
+ u32 mixer_mask = 0;
+ u32 mixer_ext_mask = 0;
+
+ for (i = 0; i < length; i++) {
+ switch (resv_pipes[i].pipe_id) {
+ case SSPP_VIG0:
+ mixer_mask |= 0x7 << 0;
+ mixer_ext_mask |= BIT(0);
+ break;
+ case SSPP_VIG1:
+ mixer_mask |= 0x7 << 3;
+ mixer_ext_mask |= BIT(2);
+ break;
+ case SSPP_VIG2:
+ mixer_mask |= 0x7 << 6;
+ mixer_ext_mask |= BIT(4);
+ break;
+ case SSPP_VIG3:
+ mixer_mask |= 0x7 << 26;
+ mixer_ext_mask |= BIT(6);
+ break;
+ case SSPP_RGB0:
+ mixer_mask |= 0x7 << 9;
+ mixer_ext_mask |= BIT(8);
+ break;
+ case SSPP_RGB1:
+ mixer_mask |= 0x7 << 12;
+ mixer_ext_mask |= BIT(10);
+ break;
+ case SSPP_RGB2:
+ mixer_mask |= 0x7 << 15;
+ mixer_ext_mask |= BIT(12);
+ break;
+ case SSPP_RGB3:
+ mixer_mask |= 0x7 << 29;
+ mixer_ext_mask |= BIT(14);
+ break;
+ default:
+ break;
+ }
}
+
+ *mixercfg = mixer_mask;
+ *mixercfg_ext = mixer_ext_mask;
}
bool sde_splash_get_lk_complete_status(struct msm_kms *kms)
@@ -797,19 +954,24 @@ bool sde_splash_get_lk_complete_status(struct msm_kms *kms)
int sde_splash_free_resource(struct msm_kms *kms,
struct sde_power_handle *phandle,
- int connector_type, void *display)
+ int connector_type, void *display,
+ bool connector_is_shared)
{
struct sde_kms *sde_kms;
struct sde_splash_info *sinfo;
struct msm_mmu *mmu;
- struct dsi_display *dsi_display = display;
+ struct dsi_display *dsi_display;
+ struct sde_hdmi *hdmi_display;
+ struct shd_display *shd_display;
+ const char *disp_type;
int ret = 0;
int hdmi_conn_count = 0;
int dsi_conn_count = 0;
- static const char *last_commit_display_type = "unknown";
+ static const char *dsi_old_disp_type = "unknown";
+ static const char *hdmi_old_disp_type = "unknown";
- if (!phandle || !kms) {
- SDE_ERROR("invalid phandle/kms.\n");
+ if (!phandle || !kms || !display) {
+ SDE_ERROR("invalid phandle/kms/display\n");
return -EINVAL;
}
@@ -820,7 +982,7 @@ int sde_splash_free_resource(struct msm_kms *kms,
return -EINVAL;
}
- /* Get connector number where the early splash in on. */
+ /* Get ref count of connector who has early splash. */
_sde_splash_get_connector_ref_cnt(sinfo, &hdmi_conn_count,
&dsi_conn_count);
@@ -883,17 +1045,37 @@ int sde_splash_free_resource(struct msm_kms *kms,
*/
switch (connector_type) {
case DRM_MODE_CONNECTOR_HDMIA:
- if (sinfo->hdmi_connector_cnt == 1)
- sinfo->hdmi_connector_cnt--;
+ if (connector_is_shared) {
+ shd_display = (struct shd_display *)display;
+ disp_type = shd_display->display_type;
+ } else {
+ hdmi_display = (struct sde_hdmi *)display;
+ disp_type = hdmi_display->display_type;
+ }
+
+ if (strcmp(disp_type, "unknown") &&
+ strcmp(hdmi_old_disp_type, disp_type)) {
+ if (sinfo->hdmi_connector_cnt >= 1)
+ sinfo->hdmi_connector_cnt--;
+
+ hdmi_old_disp_type = disp_type;
+ }
break;
case DRM_MODE_CONNECTOR_DSI:
- if (strcmp(dsi_display->display_type, "unknown") &&
- strcmp(last_commit_display_type,
- dsi_display->display_type)) {
+ if (connector_is_shared) {
+ shd_display = (struct shd_display *)display;
+ disp_type = shd_display->display_type;
+ } else {
+ dsi_display = (struct dsi_display *)display;
+ disp_type = dsi_display->display_type;
+ }
+
+ if (strcmp(disp_type, "unknown") &&
+ strcmp(dsi_old_disp_type, disp_type)) {
if (sinfo->dsi_connector_cnt >= 1)
sinfo->dsi_connector_cnt--;
- last_commit_display_type = dsi_display->display_type;
+ dsi_old_disp_type = disp_type;
}
break;
default:
diff --git a/drivers/gpu/drm/msm/sde/sde_splash.h b/drivers/gpu/drm/msm/sde/sde_splash.h
index 1b333932c5db..fc2cc54a00b7 100644
--- a/drivers/gpu/drm/msm/sde/sde_splash.h
+++ b/drivers/gpu/drm/msm/sde/sde_splash.h
@@ -88,7 +88,7 @@ struct sde_splash_info {
/* registered hdmi connector count */
uint32_t hdmi_connector_cnt;
- /* registered dst connector count */
+ /* registered dsi connector count */
uint32_t dsi_connector_cnt;
/* reserved pipe info both for early RVC and early splash */
@@ -118,7 +118,8 @@ int sde_splash_init(struct sde_power_handle *phandle, struct msm_kms *kms);
* To count connector numbers for DSI and HDMI respectively.
*/
void sde_splash_setup_connector_count(struct sde_splash_info *sinfo,
- int connector_type);
+ int connector_type, void *display,
+ bool connector_is_shared);
/**
* sde_splash_lk_stop_splash.
@@ -137,7 +138,8 @@ int sde_splash_lk_stop_splash(struct msm_kms *kms,
*/
int sde_splash_free_resource(struct msm_kms *kms,
struct sde_power_handle *phandle,
- int connector_type, void *display);
+ int connector_type, void *display,
+ bool connector_is_shared);
/**
* sde_splash_parse_memory_dt.
@@ -193,5 +195,24 @@ bool sde_splash_get_lk_complete_status(struct msm_kms *kms);
* Setup display resource based on connector type.
*/
int sde_splash_setup_display_resource(struct sde_splash_info *sinfo,
- void *disp, int connector_type);
+ void *disp, int connector_type,
+ bool display_is_shared);
+
+/**
+ * sde_splash_decrease_connector_cnt()
+ *
+ * Decrease splash connector count when shared display configuration is enabled.
+ */
+void sde_splash_decrease_connector_cnt(struct drm_device *dev,
+ int connector_type,
+ bool splash_on);
+
+/**
+ * sde_splash_get_mixer_mask
+ *
+ * Get mask configuration of splash layer mixer.
+ */
+void sde_splash_get_mixer_mask(
+ const struct splash_reserved_pipe_info *resv_pipes,
+ u32 length, u32 *mixercfg, u32 *mixercfg_ext);
#endif
diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c
index b0b05975dab0..f096e5ed6816 100644
--- a/drivers/gpu/msm/kgsl.c
+++ b/drivers/gpu/msm/kgsl.c
@@ -538,7 +538,7 @@ int kgsl_context_init(struct kgsl_device_private *dev_priv,
*/
spin_lock(&proc_priv->ctxt_count_lock);
if (atomic_read(&proc_priv->ctxt_count) > KGSL_MAX_CONTEXTS_PER_PROC) {
- KGSL_DRV_ERR(device,
+ KGSL_DRV_ERR_RATELIMIT(device,
"Per process context limit reached for pid %u",
dev_priv->process_priv->pid);
spin_unlock(&proc_priv->ctxt_count_lock);
diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
index 0468ea464055..a7bd93f4eedb 100644
--- a/drivers/mmc/host/sdhci-msm.c
+++ b/drivers/mmc/host/sdhci-msm.c
@@ -5110,6 +5110,7 @@ static int sdhci_msm_suspend(struct device *dev)
struct sdhci_host *host = dev_get_drvdata(dev);
struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
struct sdhci_msm_host *msm_host = pltfm_host->priv;
+ struct mmc_host *mmc = host->mmc;
int ret = 0;
int sdio_cfg = 0;
ktime_t start = ktime_get();
@@ -5125,6 +5126,8 @@ static int sdhci_msm_suspend(struct device *dev)
}
ret = sdhci_msm_runtime_suspend(dev);
out:
+ /* cancel any clock gating work scheduled by mmc_host_clk_release() */
+ cancel_delayed_work_sync(&mmc->clk_gate_work);
sdhci_msm_disable_controller_clock(host);
if (host->mmc->card && mmc_card_sdio(host->mmc->card)) {
sdio_cfg = sdhci_msm_cfg_sdio_wakeup(host, true);
diff --git a/drivers/net/wireless/cnss2/bus.c b/drivers/net/wireless/cnss2/bus.c
index 0411f7eb4ea1..088593f9ae1c 100644
--- a/drivers/net/wireless/cnss2/bus.c
+++ b/drivers/net/wireless/cnss2/bus.c
@@ -41,6 +41,8 @@ enum cnss_dev_bus_type cnss_get_bus_type(unsigned long device_id)
return CNSS_BUS_PCI;
case QCN7605_COMPOSITE_DEVICE_ID:
case QCN7605_STANDALONE_DEVICE_ID:
+ case QCN7605_VER20_STANDALONE_DEVICE_ID:
+ case QCN7605_VER20_COMPOSITE_DEVICE_ID:
return CNSS_BUS_USB;
default:
cnss_pr_err("Unknown device_id: 0x%lx\n", device_id);
@@ -196,6 +198,8 @@ void cnss_bus_fw_boot_timeout_hdlr(unsigned long data)
switch (plat_priv->bus_type) {
case CNSS_BUS_PCI:
return cnss_pci_fw_boot_timeout_hdlr(plat_priv->bus_priv);
+ case CNSS_BUS_USB:
+ return cnss_usb_fw_boot_timeout_hdlr(plat_priv->bus_priv);
default:
cnss_pr_err("Unsupported bus type: %d\n",
plat_priv->bus_type);
@@ -269,7 +273,7 @@ int cnss_bus_dev_powerup(struct cnss_plat_data *plat_priv)
case CNSS_BUS_PCI:
return cnss_pci_dev_powerup(plat_priv->bus_priv);
case CNSS_BUS_USB:
- return 0;
+ return cnss_usb_dev_powerup(plat_priv);
default:
cnss_pr_err("Unsupported bus type: %d\n",
plat_priv->bus_type);
diff --git a/drivers/net/wireless/cnss2/bus.h b/drivers/net/wireless/cnss2/bus.h
index f9168c3ade93..1100fd66482a 100644
--- a/drivers/net/wireless/cnss2/bus.h
+++ b/drivers/net/wireless/cnss2/bus.h
@@ -30,10 +30,15 @@
#define QCN7605_USB_VENDOR_ID 0x05C6
#define QCN7605_COMPOSITE_DEVICE_ID QCN7605_COMPOSITE_PRODUCT_ID
#define QCN7605_STANDALONE_DEVICE_ID QCN7605_STANDALONE_PRODUCT_ID
+#define QCN7605_VER20_STANDALONE_DEVICE_ID QCN7605_VER20_STANDALONE_PID
+#define QCN7605_VER20_COMPOSITE_DEVICE_ID QCN7605_VER20_COMPOSITE_PID
#define QCN7605_STANDALONE_PRODUCT_ID 0x9900
#define QCN7605_COMPOSITE_PRODUCT_ID 0x9901
+#define QCN7605_VER20_STANDALONE_PID 0x9902
+#define QCN7605_VER20_COMPOSITE_PID 0x9903
+
enum cnss_dev_bus_type cnss_get_dev_bus_type(struct device *dev);
enum cnss_dev_bus_type cnss_get_bus_type(unsigned long device_id);
void *cnss_bus_dev_to_bus_priv(struct device *dev);
diff --git a/drivers/net/wireless/cnss2/debug.c b/drivers/net/wireless/cnss2/debug.c
index 5e2d44ce1c55..577cbb4482b3 100644
--- a/drivers/net/wireless/cnss2/debug.c
+++ b/drivers/net/wireless/cnss2/debug.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2016-2019, 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
@@ -102,6 +102,9 @@ static int cnss_stats_show_state(struct seq_file *s,
case CNSS_DRIVER_DEBUG:
seq_puts(s, "DRIVER_DEBUG");
continue;
+ case CNSS_DEV_REMOVED:
+ seq_puts(s, "DEV_REMOVED");
+ continue;
}
seq_printf(s, "UNKNOWN-%d", i);
diff --git a/drivers/net/wireless/cnss2/main.c b/drivers/net/wireless/cnss2/main.c
index 8bf7b76f4131..66a7f4694d96 100644
--- a/drivers/net/wireless/cnss2/main.c
+++ b/drivers/net/wireless/cnss2/main.c
@@ -1357,6 +1357,8 @@ int cnss_register_subsys(struct cnss_plat_data *plat_priv)
case QCN7605_DEVICE_ID:
case QCN7605_STANDALONE_DEVICE_ID:
case QCN7605_COMPOSITE_DEVICE_ID:
+ case QCN7605_VER20_STANDALONE_DEVICE_ID:
+ case QCN7605_VER20_COMPOSITE_DEVICE_ID:
subsys_info->subsys_desc.name = "QCN7605";
break;
default:
@@ -1579,6 +1581,8 @@ int cnss_register_ramdump(struct cnss_plat_data *plat_priv)
break;
case QCN7605_COMPOSITE_DEVICE_ID:
case QCN7605_STANDALONE_DEVICE_ID:
+ case QCN7605_VER20_STANDALONE_DEVICE_ID:
+ case QCN7605_VER20_COMPOSITE_DEVICE_ID:
break;
default:
@@ -1601,6 +1605,8 @@ void cnss_unregister_ramdump(struct cnss_plat_data *plat_priv)
break;
case QCN7605_COMPOSITE_DEVICE_ID:
case QCN7605_STANDALONE_DEVICE_ID:
+ case QCN7605_VER20_STANDALONE_DEVICE_ID:
+ case QCN7605_VER20_COMPOSITE_DEVICE_ID:
break;
default:
cnss_pr_err("Unknown device ID: 0x%lx\n", plat_priv->device_id);
@@ -1696,6 +1702,7 @@ static ssize_t cnss_wl_pwr_on(struct device *dev,
{
int pwr_state = 0;
struct cnss_plat_data *plat_priv = dev_get_drvdata(dev);
+ unsigned int timeout;
if (sscanf(buf, "%du", &pwr_state) != 1)
return -EINVAL;
@@ -1703,11 +1710,17 @@ static ssize_t cnss_wl_pwr_on(struct device *dev,
cnss_pr_dbg("vreg-wlan-en state change %d, count %zu", pwr_state,
count);
- if (pwr_state)
+ timeout = cnss_get_qmi_timeout();
+ if (pwr_state) {
cnss_power_on_device(plat_priv);
- else
+ if (timeout) {
+ mod_timer(&plat_priv->fw_boot_timer,
+ jiffies + msecs_to_jiffies(timeout));
+ }
+ } else {
cnss_power_off_device(plat_priv);
-
+ del_timer(&plat_priv->fw_boot_timer);
+ }
return count;
}
diff --git a/drivers/net/wireless/cnss2/main.h b/drivers/net/wireless/cnss2/main.h
index 28469dfc96af..28a2990ed831 100644
--- a/drivers/net/wireless/cnss2/main.h
+++ b/drivers/net/wireless/cnss2/main.h
@@ -143,6 +143,7 @@ enum cnss_driver_state {
CNSS_FW_BOOT_RECOVERY,
CNSS_DEV_ERR_NOTIFY,
CNSS_DRIVER_DEBUG,
+ CNSS_DEV_REMOVED,
};
struct cnss_recovery_data {
diff --git a/drivers/net/wireless/cnss2/qmi.c b/drivers/net/wireless/cnss2/qmi.c
index 30ac0cc9ad51..d86213175495 100644
--- a/drivers/net/wireless/cnss2/qmi.c
+++ b/drivers/net/wireless/cnss2/qmi.c
@@ -794,7 +794,9 @@ int cnss_wlfw_bdf_dnld_send_sync(struct cnss_plat_data *plat_priv)
if (plat_priv->device_id == QCN7605_DEVICE_ID ||
plat_priv->device_id == QCN7605_COMPOSITE_DEVICE_ID ||
- plat_priv->device_id == QCN7605_STANDALONE_DEVICE_ID)
+ plat_priv->device_id == QCN7605_STANDALONE_DEVICE_ID ||
+ plat_priv->device_id == QCN7605_VER20_STANDALONE_DEVICE_ID ||
+ plat_priv->device_id == QCN7605_VER20_COMPOSITE_DEVICE_ID)
bdf_type = CNSS_BDF_BIN;
if (plat_priv->board_info.board_id == 0xFF)
diff --git a/drivers/net/wireless/cnss2/usb.c b/drivers/net/wireless/cnss2/usb.c
index ee9f21349c3f..b196e9f6bc9b 100644
--- a/drivers/net/wireless/cnss2/usb.c
+++ b/drivers/net/wireless/cnss2/usb.c
@@ -14,14 +14,50 @@
#include "bus.h"
#include "debug.h"
#include "usb.h"
+#include "linux/delay.h"
-int cnss_usb_dev_powerup(struct cnss_usb_data *usb_priv)
+void cnss_usb_fw_boot_timeout_hdlr(struct cnss_usb_data *usb_priv)
+{
+ if (!usb_priv)
+ return;
+
+ cnss_pr_err("Timeout waiting for FW ready indication\n");
+}
+
+static int cnss_qcn7605_usb_powerup(struct cnss_plat_data *plat_priv)
{
int ret = 0;
+ unsigned int timeout;
- if (!usb_priv) {
- cnss_pr_err("usb_priv is NULL\n");
- return -ENODEV;
+ ret = cnss_power_on_device(plat_priv);
+ if (ret) {
+ cnss_pr_err("Failed to power on device, err = %d\n", ret);
+ goto out;
+ }
+
+ timeout = cnss_get_qmi_timeout();
+ if (timeout) {
+ mod_timer(&plat_priv->fw_boot_timer,
+ jiffies + msecs_to_jiffies(timeout));
+ }
+
+out:
+ return ret;
+}
+
+int cnss_usb_dev_powerup(struct cnss_plat_data *plat_priv)
+{
+ int ret = 0;
+
+ switch (plat_priv->device_id) {
+ case QCN7605_COMPOSITE_DEVICE_ID:
+ case QCN7605_STANDALONE_DEVICE_ID:
+ ret = cnss_qcn7605_usb_powerup(plat_priv);
+ break;
+ default:
+ cnss_pr_err("Unknown device_id found: %lu\n",
+ plat_priv->device_id);
+ ret = -ENODEV;
}
return ret;
}
@@ -38,10 +74,7 @@ int cnss_usb_wlan_register_driver(struct cnss_usb_wlan_driver *driver_ops)
}
usb_priv = plat_priv->bus_priv;
- if (!usb_priv) {
- cnss_pr_err("usb_priv is NULL\n");
- return -ENODEV;
- }
+ usb_priv->plat_priv = plat_priv;
if (usb_priv->driver_ops) {
cnss_pr_err("Driver has already registered\n");
@@ -74,16 +107,14 @@ EXPORT_SYMBOL(cnss_usb_wlan_unregister_driver);
int cnss_usb_is_device_down(struct device *dev)
{
struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev);
- struct cnss_usb_data *usb_priv;
if (!plat_priv) {
cnss_pr_err("plat_priv is NULL\n");
return -ENODEV;
}
- usb_priv = plat_priv->bus_priv;
- if (!usb_priv) {
- cnss_pr_err("usb_priv is NULL\n");
+ if (test_bit(CNSS_DEV_REMOVED, &plat_priv->driver_state)) {
+ cnss_pr_err("usb device disconnected\n");
return -ENODEV;
}
return 0;
@@ -99,7 +130,17 @@ int cnss_usb_register_driver_hdlr(struct cnss_usb_data *usb_priv,
set_bit(CNSS_DRIVER_LOADING, &plat_priv->driver_state);
usb_priv->driver_ops = data;
- ret = cnss_bus_call_driver_probe(plat_priv);
+ if (test_bit(CNSS_FW_READY, &plat_priv->driver_state)) {
+ cnss_pr_dbg("CNSS_FW_READY set - call wlan probe\n");
+ ret = cnss_bus_call_driver_probe(plat_priv);
+ } else {
+ ret = cnss_usb_dev_powerup(usb_priv->plat_priv);
+ if (ret) {
+ clear_bit(CNSS_DRIVER_LOADING,
+ &plat_priv->driver_state);
+ usb_priv->driver_ops = NULL;
+ }
+ }
return ret;
}
@@ -111,23 +152,33 @@ int cnss_usb_unregister_driver_hdlr(struct cnss_usb_data *usb_priv)
set_bit(CNSS_DRIVER_UNLOADING, &plat_priv->driver_state);
cnss_usb_dev_shutdown(usb_priv);
usb_priv->driver_ops = NULL;
-
+ usb_priv->plat_priv = NULL;
return 0;
}
int cnss_usb_dev_shutdown(struct cnss_usb_data *usb_priv)
{
int ret = 0;
+ struct cnss_plat_data *plat_priv;
if (!usb_priv) {
cnss_pr_err("usb_priv is NULL\n");
return -ENODEV;
}
+ plat_priv = usb_priv->plat_priv;
switch (usb_priv->device_id) {
case QCN7605_COMPOSITE_DEVICE_ID:
case QCN7605_STANDALONE_DEVICE_ID:
- cnss_usb_call_driver_remove(usb_priv);
+ case QCN7605_VER20_STANDALONE_DEVICE_ID:
+ case QCN7605_VER20_COMPOSITE_DEVICE_ID:
+ cnss_pr_dbg("cnss driver state %lu\n", plat_priv->driver_state);
+ if (!test_bit(CNSS_DEV_REMOVED, &plat_priv->driver_state))
+ cnss_usb_call_driver_remove(usb_priv);
+
+ cnss_power_off_device(plat_priv);
+ clear_bit(CNSS_FW_READY, &plat_priv->driver_state);
+ clear_bit(CNSS_DRIVER_UNLOADING, &plat_priv->driver_state);
break;
default:
cnss_pr_err("Unknown device_id found: 0x%x\n",
@@ -222,8 +273,7 @@ static int cnss_usb_probe(struct usb_interface *interface,
id->idVendor, id->idProduct);
usb_dev = interface_to_usbdev(interface);
- usb_priv = devm_kzalloc(&usb_dev->dev, sizeof(*usb_priv),
- GFP_KERNEL);
+ usb_priv = (struct cnss_usb_data *)plat_priv->bus_priv;
if (!usb_priv) {
ret = -ENOMEM;
goto out;
@@ -237,11 +287,11 @@ static int cnss_usb_probe(struct usb_interface *interface,
usb_priv->target_version = bcd_device;
cnss_set_usb_priv(interface, usb_priv);
plat_priv->device_id = usb_priv->device_id;
- plat_priv->bus_priv = usb_priv;
/*increment the ref count of usb dev structure*/
usb_get_dev(usb_dev);
+ clear_bit(CNSS_DEV_REMOVED, &plat_priv->driver_state);
ret = cnss_register_subsys(plat_priv);
if (ret)
goto reset_ctx;
@@ -253,6 +303,8 @@ static int cnss_usb_probe(struct usb_interface *interface,
switch (usb_priv->device_id) {
case QCN7605_COMPOSITE_DEVICE_ID:
case QCN7605_STANDALONE_DEVICE_ID:
+ case QCN7605_VER20_STANDALONE_DEVICE_ID:
+ case QCN7605_VER20_COMPOSITE_DEVICE_ID:
break;
default:
cnss_pr_err("Unknown USB device found: 0x%x\n",
@@ -269,7 +321,6 @@ unregister_subsys:
cnss_unregister_subsys(plat_priv);
reset_ctx:
plat_priv->bus_priv = NULL;
- devm_kfree(&usb_dev->dev, usb_priv);
out:
return ret;
}
@@ -283,11 +334,12 @@ static void cnss_usb_remove(struct usb_interface *interface)
cnss_pr_dbg("driver state %lu\n", plat_priv->driver_state);
cnss_unregister_ramdump(plat_priv);
cnss_unregister_subsys(plat_priv);
- usb_priv->plat_priv = NULL;
- plat_priv->bus_priv = NULL;
usb_dev = interface_to_usbdev(interface);
usb_put_dev(usb_dev);
- devm_kfree(&usb_dev->dev, usb_priv);
+ usb_priv->usb_intf = NULL;
+ usb_priv->usb_device_id = NULL;
+ set_bit(CNSS_DEV_REMOVED, &plat_priv->driver_state);
+ del_timer(&plat_priv->fw_boot_timer);
}
static int cnss_usb_suspend(struct usb_interface *interface, pm_message_t state)
@@ -332,6 +384,12 @@ static struct usb_device_id cnss_usb_id_table[] = {
{ USB_DEVICE_INTERFACE_NUMBER(QCN7605_USB_VENDOR_ID,
QCN7605_STANDALONE_PRODUCT_ID,
QCN7605_WLAN_STANDALONE_INTERFACE_NUM) },
+ { USB_DEVICE_INTERFACE_NUMBER(QCN7605_USB_VENDOR_ID,
+ QCN7605_VER20_STANDALONE_PID,
+ QCN7605_WLAN_STANDALONE_INTERFACE_NUM) },
+ { USB_DEVICE_INTERFACE_NUMBER(QCN7605_USB_VENDOR_ID,
+ QCN7605_VER20_COMPOSITE_PID,
+ QCN7605_WLAN_COMPOSITE_INTERFACE_NUM) },
{} /* Terminating entry */
};
@@ -349,6 +407,13 @@ static struct usb_driver cnss_usb_driver = {
int cnss_usb_init(struct cnss_plat_data *plat_priv)
{
int ret = 0;
+ struct cnss_usb_data *usb_priv;
+
+ plat_priv->bus_priv = kzalloc(sizeof(*usb_priv), GFP_KERNEL);
+ if (!plat_priv->bus_priv) {
+ ret = -ENOMEM;
+ goto out;
+ }
ret = usb_register(&cnss_usb_driver);
if (ret) {
@@ -359,10 +424,12 @@ int cnss_usb_init(struct cnss_plat_data *plat_priv)
return 0;
out:
+ kfree(plat_priv->bus_priv);
return ret;
}
void cnss_usb_deinit(struct cnss_plat_data *plat_priv)
{
+ kfree(plat_priv->bus_priv);
usb_deregister(&cnss_usb_driver);
}
diff --git a/drivers/net/wireless/cnss2/usb.h b/drivers/net/wireless/cnss2/usb.h
index b285dc27daa9..8196c3de3431 100644
--- a/drivers/net/wireless/cnss2/usb.h
+++ b/drivers/net/wireless/cnss2/usb.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2018-2019, 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
@@ -52,15 +52,13 @@ int cnss_usb_force_fw_assert_hdlr(struct cnss_usb_data *usb_priv);
void cnss_usb_fw_boot_timeout_hdlr(struct cnss_usb_data *usb_priv);
int cnss_usb_call_driver_probe(struct cnss_usb_data *usb_priv);
int cnss_usb_call_driver_remove(struct cnss_usb_data *usb_priv);
-int cnss_usb_dev_powerup(struct cnss_usb_data *usb_priv);
+int cnss_usb_dev_powerup(struct cnss_plat_data *plat_priv);
int cnss_usb_dev_shutdown(struct cnss_usb_data *usb_priv);
int cnss_usb_dev_crash_shutdown(struct cnss_usb_data *usb_priv);
int cnss_usb_dev_ramdump(struct cnss_usb_data *usb_priv);
-
int cnss_usb_register_driver_hdlr(struct cnss_usb_data *usb_priv, void *data);
-
int cnss_usb_unregister_driver_hdlr(struct cnss_usb_data *usb_priv);
int cnss_usb_call_driver_modem_status(struct cnss_usb_data *usb_priv,
int modem_current_status);
-
+int cnss_usb_dev_alloc(struct cnss_plat_data *plat_priv);
#endif /* _CNSS_USB_H */
diff --git a/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c b/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c
index db638930e2a1..656b95316895 100644
--- a/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c
+++ b/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c
@@ -3601,6 +3601,15 @@ int rmnet_ipa3_send_lan_client_msg(
IPAWANERR("Can't allocate memory for tether_info\n");
return -ENOMEM;
}
+
+ if (data->client_event != IPA_PER_CLIENT_STATS_CONNECT_EVENT &&
+ data->client_event != IPA_PER_CLIENT_STATS_DISCONNECT_EVENT) {
+ IPAWANERR("Wrong event given. Event:- %d\n",
+ data->client_event);
+ kfree(lan_client);
+ return -EINVAL;
+ }
+ data->lan_client.lanIface[IPA_RESOURCE_NAME_MAX-1] = '\0';
memset(&msg_meta, 0, sizeof(struct ipa_msg_meta));
memcpy(lan_client, &data->lan_client,
sizeof(struct ipa_lan_client_msg));
diff --git a/drivers/soc/qcom/hab/ghs_comm.c b/drivers/soc/qcom/hab/ghs_comm.c
index 825f33a23858..1fdb1668295c 100644
--- a/drivers/soc/qcom/hab/ghs_comm.c
+++ b/drivers/soc/qcom/hab/ghs_comm.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2018-2019, 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
@@ -39,7 +39,7 @@ int physical_channel_send(struct physical_channel *pchan,
struct hab_header *header,
void *payload)
{
- int sizebytes = HAB_HEADER_GET_SIZE(*header);
+ size_t sizebytes = HAB_HEADER_GET_SIZE(*header);
struct ghs_vdev *dev = (struct ghs_vdev *)pchan->hyp_data;
GIPC_Result result;
uint8_t *msg;
diff --git a/drivers/soc/qcom/hab/qvm_comm.c b/drivers/soc/qcom/hab/qvm_comm.c
index 25d0208dea4c..d5332bc38f83 100644
--- a/drivers/soc/qcom/hab/qvm_comm.c
+++ b/drivers/soc/qcom/hab/qvm_comm.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2016-2019, 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
@@ -42,9 +42,9 @@ int physical_channel_send(struct physical_channel *pchan,
struct hab_header *header,
void *payload)
{
- int sizebytes = HAB_HEADER_GET_SIZE(*header);
+ size_t sizebytes = HAB_HEADER_GET_SIZE(*header);
struct qvm_channel *dev = (struct qvm_channel *)pchan->hyp_data;
- int total_size = sizeof(*header) + sizebytes;
+ size_t total_size = sizeof(*header) + sizebytes;
if (total_size > dev->pipe_ep->tx_info.sh_buf->size)
return -EINVAL; /* too much data for ring */
diff --git a/drivers/soc/qcom/icnss.c b/drivers/soc/qcom/icnss.c
index e0fa8b7720d2..8ada7af7fb79 100644
--- a/drivers/soc/qcom/icnss.c
+++ b/drivers/soc/qcom/icnss.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2015-2019, 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
@@ -1636,6 +1636,56 @@ out:
return ret;
}
+static int wlfw_send_modem_shutdown_msg(void)
+{
+ int ret;
+ struct wlfw_shutdown_req_msg_v01 req;
+ struct wlfw_shutdown_resp_msg_v01 resp;
+ struct msg_desc req_desc, resp_desc;
+
+ if (!penv || !penv->wlfw_clnt)
+ return -ENODEV;
+
+ icnss_pr_dbg("Sending modem shutdown request, state: 0x%lx\n",
+ penv->state);
+
+ memset(&req, 0, sizeof(req));
+ memset(&resp, 0, sizeof(resp));
+
+ req.shutdown_valid = 1;
+ req.shutdown = 1;
+
+ req_desc.max_msg_len = WLFW_SHUTDOWN_REQ_MSG_V01_MAX_MSG_LEN;
+ req_desc.msg_id = QMI_WLFW_SHUTDOWN_REQ_V01;
+ req_desc.ei_array = wlfw_shutdown_req_msg_v01_ei;
+
+ resp_desc.max_msg_len = WLFW_SHUTDOWN_RESP_MSG_V01_MAX_MSG_LEN;
+ resp_desc.msg_id = QMI_WLFW_SHUTDOWN_RESP_V01;
+ resp_desc.ei_array = wlfw_shutdown_resp_msg_v01_ei;
+
+ ret = qmi_send_req_wait(penv->wlfw_clnt, &req_desc, &req, sizeof(req),
+ &resp_desc, &resp, sizeof(resp),
+ WLFW_TIMEOUT_MS);
+ if (ret < 0) {
+ icnss_pr_err("Send modem shutdown req failed, ret: %d\n", ret);
+ goto out;
+ }
+
+ if (resp.resp.result != QMI_RESULT_SUCCESS_V01) {
+ icnss_pr_err("QMI modem shutdown request rejected result:%d error:%d\n",
+ resp.resp.result, resp.resp.error);
+ ret = -resp.resp.result;
+ goto out;
+ }
+
+ icnss_pr_dbg("modem shutdown request sent successfully, state: 0x%lx\n",
+ penv->state);
+ return 0;
+
+out:
+ return ret;
+}
+
static int wlfw_athdiag_read_send_sync_msg(struct icnss_priv *priv,
uint32_t offset, uint32_t mem_type,
uint32_t data_len, uint8_t *data)
@@ -2534,6 +2584,13 @@ static int icnss_modem_notifier_nb(struct notifier_block *nb,
if (code != SUBSYS_BEFORE_SHUTDOWN)
return NOTIFY_OK;
+ if (code == SUBSYS_BEFORE_SHUTDOWN && !notif->crashed) {
+ ret = wlfw_send_modem_shutdown_msg();
+ if (ret)
+ icnss_pr_dbg("Fail to send modem shutdown Indication %d\n",
+ ret);
+ }
+
if (test_bit(ICNSS_PDR_REGISTERED, &priv->state)) {
set_bit(ICNSS_FW_DOWN, &priv->state);
icnss_ignore_qmi_timeout(true);
diff --git a/drivers/soc/qcom/wlan_firmware_service_v01.c b/drivers/soc/qcom/wlan_firmware_service_v01.c
index e3ebea31c019..846a4bac16ac 100644
--- a/drivers/soc/qcom/wlan_firmware_service_v01.c
+++ b/drivers/soc/qcom/wlan_firmware_service_v01.c
@@ -1,4 +1,4 @@
- /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
+ /* Copyright (c) 2015-2017, 2019 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
@@ -20,7 +20,7 @@ static struct elem_info wlfw_ce_tgt_pipe_cfg_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_ce_tgt_pipe_cfg_s_v01,
@@ -38,7 +38,7 @@ static struct elem_info wlfw_ce_tgt_pipe_cfg_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_ce_tgt_pipe_cfg_s_v01,
@@ -47,7 +47,7 @@ static struct elem_info wlfw_ce_tgt_pipe_cfg_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_ce_tgt_pipe_cfg_s_v01,
@@ -56,7 +56,7 @@ static struct elem_info wlfw_ce_tgt_pipe_cfg_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_ce_tgt_pipe_cfg_s_v01,
@@ -65,7 +65,7 @@ static struct elem_info wlfw_ce_tgt_pipe_cfg_s_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -73,7 +73,7 @@ static struct elem_info wlfw_ce_svc_pipe_cfg_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_ce_svc_pipe_cfg_s_v01,
@@ -91,7 +91,7 @@ static struct elem_info wlfw_ce_svc_pipe_cfg_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_ce_svc_pipe_cfg_s_v01,
@@ -100,7 +100,7 @@ static struct elem_info wlfw_ce_svc_pipe_cfg_s_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -108,7 +108,7 @@ static struct elem_info wlfw_shadow_reg_cfg_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_2_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint16_t),
+ .elem_size = sizeof(u16),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_shadow_reg_cfg_s_v01,
@@ -117,7 +117,7 @@ static struct elem_info wlfw_shadow_reg_cfg_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_2_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint16_t),
+ .elem_size = sizeof(u16),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_shadow_reg_cfg_s_v01,
@@ -126,7 +126,7 @@ static struct elem_info wlfw_shadow_reg_cfg_s_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -134,7 +134,7 @@ 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),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_shadow_reg_v2_cfg_s_v01,
@@ -143,7 +143,59 @@ static struct elem_info wlfw_shadow_reg_v2_cfg_s_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+static struct elem_info wlfw_rri_over_ddr_cfg_s_v01_ei[] = {
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0,
+ .offset = offsetof(struct wlfw_rri_over_ddr_cfg_s_v01,
+ base_addr_low),
+ },
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0,
+ .offset = offsetof(struct wlfw_rri_over_ddr_cfg_s_v01,
+ base_addr_high),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+static struct elem_info wlfw_msi_cfg_s_v01_ei[] = {
+ {
+ .data_type = QMI_UNSIGNED_2_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u16),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0,
+ .offset = offsetof(struct wlfw_msi_cfg_s_v01,
+ ce_id),
+ },
+ {
+ .data_type = QMI_UNSIGNED_2_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u16),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0,
+ .offset = offsetof(struct wlfw_msi_cfg_s_v01,
+ msi_vector),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -151,7 +203,7 @@ static struct elem_info wlfw_memory_region_info_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint64_t),
+ .elem_size = sizeof(u64),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_memory_region_info_s_v01,
@@ -160,7 +212,7 @@ static struct elem_info wlfw_memory_region_info_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_memory_region_info_s_v01,
@@ -169,7 +221,7 @@ static struct elem_info wlfw_memory_region_info_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_memory_region_info_s_v01,
@@ -178,7 +230,131 @@ static struct elem_info wlfw_memory_region_info_s_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+static struct elem_info wlfw_mem_cfg_s_v01_ei[] = {
+ {
+ .data_type = QMI_UNSIGNED_8_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u64),
+ .is_array = 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),
+ .is_array = 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),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0,
+ .offset = offsetof(struct wlfw_mem_cfg_s_v01,
+ secure_flag),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+static struct elem_info wlfw_mem_seg_s_v01_ei[] = {
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = 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),
+ .is_array = 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),
+ .is_array = 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),
+ .is_array = VAR_LEN_ARRAY,
+ .tlv_type = 0,
+ .offset = offsetof(struct wlfw_mem_seg_s_v01,
+ mem_cfg),
+ .ei_array = wlfw_mem_cfg_s_v01_ei,
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+static struct elem_info wlfw_mem_seg_resp_s_v01_ei[] = {
+ {
+ .data_type = QMI_UNSIGNED_8_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u64),
+ .is_array = 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),
+ .is_array = 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),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0,
+ .offset = offsetof(struct wlfw_mem_seg_resp_s_v01,
+ type),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0,
+ .offset = offsetof(struct wlfw_mem_seg_resp_s_v01,
+ restore),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -186,7 +362,7 @@ static struct elem_info wlfw_rf_chip_info_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_rf_chip_info_s_v01,
@@ -195,7 +371,7 @@ static struct elem_info wlfw_rf_chip_info_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_rf_chip_info_s_v01,
@@ -204,7 +380,7 @@ static struct elem_info wlfw_rf_chip_info_s_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -212,7 +388,7 @@ static struct elem_info wlfw_rf_board_info_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_rf_board_info_s_v01,
@@ -221,7 +397,7 @@ static struct elem_info wlfw_rf_board_info_s_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -229,7 +405,7 @@ static struct elem_info wlfw_soc_info_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_soc_info_s_v01,
@@ -238,7 +414,7 @@ static struct elem_info wlfw_soc_info_s_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -246,7 +422,7 @@ static struct elem_info wlfw_fw_version_info_s_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0,
.offset = offsetof(struct wlfw_fw_version_info_s_v01,
@@ -264,7 +440,7 @@ static struct elem_info wlfw_fw_version_info_s_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -272,7 +448,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -281,7 +457,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -290,7 +466,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -299,7 +475,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -308,7 +484,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -317,7 +493,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -326,7 +502,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -335,7 +511,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -344,7 +520,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x14,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -353,7 +529,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x14,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -362,7 +538,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x15,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -371,7 +547,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x15,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -380,7 +556,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x16,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -389,7 +565,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x16,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -398,7 +574,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x17,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -407,7 +583,7 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x17,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -416,25 +592,25 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x18,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
- cold_boot_cal_done_enable_valid),
+ fw_init_done_enable_valid),
},
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x18,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
- cold_boot_cal_done_enable),
+ fw_init_done_enable),
},
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x19,
.offset = offsetof(struct wlfw_ind_register_req_msg_v01,
@@ -443,16 +619,106 @@ struct elem_info wlfw_ind_register_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = 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),
+ .is_array = 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),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1A,
+ .offset = offsetof(struct wlfw_ind_register_req_msg_v01,
+ xo_cal_enable),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1B,
+ .offset = offsetof(struct wlfw_ind_register_req_msg_v01,
+ cal_done_enable_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1B,
+ .offset = offsetof(struct wlfw_ind_register_req_msg_v01,
+ cal_done_enable),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1C,
+ .offset = offsetof(struct wlfw_ind_register_req_msg_v01,
+ qdss_trace_req_mem_enable_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1C,
+ .offset = offsetof(struct wlfw_ind_register_req_msg_v01,
+ qdss_trace_req_mem_enable),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1D,
+ .offset = offsetof(struct wlfw_ind_register_req_msg_v01,
+ qdss_trace_save_enable_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1D,
+ .offset = offsetof(struct wlfw_ind_register_req_msg_v01,
+ qdss_trace_save_enable),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1E,
+ .offset = offsetof(struct wlfw_ind_register_req_msg_v01,
+ qdss_trace_free_enable_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1E,
+ .offset = offsetof(struct wlfw_ind_register_req_msg_v01,
+ qdss_trace_free_enable),
+ },
+ {
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -463,34 +729,35 @@ struct elem_info wlfw_ind_register_resp_msg_v01_ei[] = {
.elem_size = sizeof(struct qmi_response_type_v01),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
- .offset = offsetof(struct wlfw_ind_register_resp_msg_v01,
- resp),
+ .offset =
+ offsetof(struct wlfw_ind_register_resp_msg_v01,
+ resp),
.ei_array = get_qmi_response_type_v01_ei(),
},
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
- .offset = offsetof(
- struct wlfw_ind_register_resp_msg_v01,
- fw_status_valid),
+ .offset =
+ offsetof(struct wlfw_ind_register_resp_msg_v01,
+ fw_status_valid),
},
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint64_t),
+ .elem_size = sizeof(u64),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
- .offset = offsetof(
- struct wlfw_ind_register_resp_msg_v01,
- fw_status),
+ .offset =
+ offsetof(struct wlfw_ind_register_resp_msg_v01,
+ fw_status),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -498,7 +765,7 @@ struct elem_info wlfw_fw_ready_ind_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -506,7 +773,7 @@ struct elem_info wlfw_msa_ready_ind_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -514,67 +781,67 @@ struct elem_info wlfw_pin_connect_result_ind_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
- .offset = offsetof(
- struct wlfw_pin_connect_result_ind_msg_v01,
- pwr_pin_result_valid),
+ .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(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
- .offset = offsetof(
- struct wlfw_pin_connect_result_ind_msg_v01,
- pwr_pin_result),
+ .offset =
+ offsetof(struct wlfw_pin_connect_result_ind_msg_v01,
+ pwr_pin_result),
},
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
- .offset = offsetof(
- struct wlfw_pin_connect_result_ind_msg_v01,
- phy_io_pin_result_valid),
+ .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(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
- .offset = offsetof(
- struct wlfw_pin_connect_result_ind_msg_v01,
- phy_io_pin_result),
+ .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(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
- .offset = offsetof(
- struct wlfw_pin_connect_result_ind_msg_v01,
- rf_pin_result_valid),
+ .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(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
- .offset = offsetof(
- struct wlfw_pin_connect_result_ind_msg_v01,
- rf_pin_result),
+ .offset =
+ offsetof(struct wlfw_pin_connect_result_ind_msg_v01,
+ rf_pin_result),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -591,7 +858,7 @@ struct elem_info wlfw_wlan_mode_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_wlan_mode_req_msg_v01,
@@ -600,7 +867,7 @@ struct elem_info wlfw_wlan_mode_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_wlan_mode_req_msg_v01,
@@ -609,7 +876,7 @@ struct elem_info wlfw_wlan_mode_req_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -627,7 +894,7 @@ struct elem_info wlfw_wlan_mode_resp_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -635,7 +902,7 @@ struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
@@ -653,7 +920,7 @@ struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
@@ -662,7 +929,7 @@ struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[] = {
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
@@ -681,7 +948,7 @@ struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
@@ -690,7 +957,7 @@ struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[] = {
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
@@ -709,7 +976,7 @@ struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
@@ -718,7 +985,7 @@ struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[] = {
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
@@ -737,7 +1004,7 @@ struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x14,
.offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
@@ -746,7 +1013,7 @@ struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[] = {
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x14,
.offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
@@ -763,9 +1030,56 @@ struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[] = {
.ei_array = wlfw_shadow_reg_v2_cfg_s_v01_ei,
},
{
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x15,
+ .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
+ rri_over_ddr_cfg_valid),
+ },
+ {
+ .data_type = QMI_STRUCT,
+ .elem_len = 1,
+ .elem_size = sizeof(struct wlfw_rri_over_ddr_cfg_s_v01),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x15,
+ .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
+ rri_over_ddr_cfg),
+ .ei_array = wlfw_rri_over_ddr_cfg_s_v01_ei,
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x16,
+ .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
+ msi_cfg_valid),
+ },
+ {
+ .data_type = QMI_DATA_LEN,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x16,
+ .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
+ msi_cfg_len),
+ },
+ {
+ .data_type = QMI_STRUCT,
+ .elem_len = QMI_WLFW_MAX_NUM_CE_V01,
+ .elem_size = sizeof(struct wlfw_msi_cfg_s_v01),
+ .is_array = VAR_LEN_ARRAY,
+ .tlv_type = 0x16,
+ .offset = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
+ msi_cfg),
+ .ei_array = wlfw_msi_cfg_s_v01_ei,
+ },
+ {
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -783,7 +1097,7 @@ struct elem_info wlfw_wlan_cfg_resp_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -791,7 +1105,7 @@ struct elem_info wlfw_cap_req_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -809,7 +1123,7 @@ struct elem_info wlfw_cap_resp_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_cap_resp_msg_v01,
@@ -828,7 +1142,7 @@ struct elem_info wlfw_cap_resp_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(struct wlfw_cap_resp_msg_v01,
@@ -847,7 +1161,7 @@ struct elem_info wlfw_cap_resp_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(struct wlfw_cap_resp_msg_v01,
@@ -866,7 +1180,7 @@ struct elem_info wlfw_cap_resp_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(struct wlfw_cap_resp_msg_v01,
@@ -885,7 +1199,7 @@ struct elem_info wlfw_cap_resp_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x14,
.offset = offsetof(struct wlfw_cap_resp_msg_v01,
@@ -901,9 +1215,45 @@ struct elem_info wlfw_cap_resp_msg_v01_ei[] = {
fw_build_id),
},
{
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = 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),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x15,
+ .offset = offsetof(struct wlfw_cap_resp_msg_v01,
+ num_macs),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x16,
+ .offset = offsetof(struct wlfw_cap_resp_msg_v01,
+ voltage_mv_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x16,
+ .offset = offsetof(struct wlfw_cap_resp_msg_v01,
+ voltage_mv),
+ },
+ {
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -911,7 +1261,7 @@ struct elem_info wlfw_bdf_download_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x01,
.offset = offsetof(struct wlfw_bdf_download_req_msg_v01,
@@ -920,7 +1270,7 @@ struct elem_info wlfw_bdf_download_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_bdf_download_req_msg_v01,
@@ -938,7 +1288,7 @@ struct elem_info wlfw_bdf_download_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(struct wlfw_bdf_download_req_msg_v01,
@@ -947,7 +1297,7 @@ struct elem_info wlfw_bdf_download_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(struct wlfw_bdf_download_req_msg_v01,
@@ -956,7 +1306,7 @@ struct elem_info wlfw_bdf_download_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(struct wlfw_bdf_download_req_msg_v01,
@@ -965,7 +1315,7 @@ struct elem_info wlfw_bdf_download_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(struct wlfw_bdf_download_req_msg_v01,
@@ -974,7 +1324,7 @@ struct elem_info wlfw_bdf_download_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(struct wlfw_bdf_download_req_msg_v01,
@@ -983,7 +1333,7 @@ struct elem_info wlfw_bdf_download_req_msg_v01_ei[] = {
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
- .elem_size = sizeof(uint16_t),
+ .elem_size = sizeof(u16),
.is_array = NO_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(struct wlfw_bdf_download_req_msg_v01,
@@ -992,7 +1342,7 @@ struct elem_info wlfw_bdf_download_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = QMI_WLFW_MAX_DATA_SIZE_V01,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = VAR_LEN_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(struct wlfw_bdf_download_req_msg_v01,
@@ -1001,7 +1351,7 @@ struct elem_info wlfw_bdf_download_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x14,
.offset = offsetof(struct wlfw_bdf_download_req_msg_v01,
@@ -1010,16 +1360,34 @@ struct elem_info wlfw_bdf_download_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = 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),
+ .is_array = 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),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x15,
+ .offset = offsetof(struct wlfw_bdf_download_req_msg_v01,
+ bdf_type),
+ },
+ {
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1030,14 +1398,15 @@ struct elem_info wlfw_bdf_download_resp_msg_v01_ei[] = {
.elem_size = sizeof(struct qmi_response_type_v01),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
- .offset = offsetof(struct wlfw_bdf_download_resp_msg_v01,
- resp),
+ .offset =
+ offsetof(struct wlfw_bdf_download_resp_msg_v01,
+ resp),
.ei_array = get_qmi_response_type_v01_ei(),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1045,7 +1414,7 @@ struct elem_info wlfw_cal_report_req_msg_v01_ei[] = {
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x01,
.offset = offsetof(struct wlfw_cal_report_req_msg_v01,
@@ -1061,9 +1430,27 @@ struct elem_info wlfw_cal_report_req_msg_v01_ei[] = {
meta_data),
},
{
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = 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),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset = offsetof(struct wlfw_cal_report_req_msg_v01,
+ xo_cal_data),
+ },
+ {
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1081,7 +1468,7 @@ struct elem_info wlfw_cal_report_resp_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1092,13 +1479,54 @@ struct elem_info wlfw_initiate_cal_download_ind_msg_v01_ei[] = {
.elem_size = sizeof(enum wlfw_cal_temp_id_enum_v01),
.is_array = NO_ARRAY,
.tlv_type = 0x01,
- .offset = offsetof(struct wlfw_initiate_cal_download_ind_msg_v01,
- cal_id),
+ .offset =
+ offsetof(struct wlfw_initiate_cal_download_ind_msg_v01,
+ cal_id),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_initiate_cal_download_ind_msg_v01,
+ total_size_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_initiate_cal_download_ind_msg_v01,
+ total_size),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x11,
+ .offset =
+ offsetof(struct wlfw_initiate_cal_download_ind_msg_v01,
+ cal_data_location_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x11,
+ .offset =
+ offsetof(struct wlfw_initiate_cal_download_ind_msg_v01,
+ cal_data_location),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1106,7 +1534,7 @@ struct elem_info wlfw_cal_download_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x01,
.offset = offsetof(struct wlfw_cal_download_req_msg_v01,
@@ -1115,7 +1543,7 @@ struct elem_info wlfw_cal_download_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_cal_download_req_msg_v01,
@@ -1133,7 +1561,7 @@ struct elem_info wlfw_cal_download_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(struct wlfw_cal_download_req_msg_v01,
@@ -1142,7 +1570,7 @@ struct elem_info wlfw_cal_download_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(struct wlfw_cal_download_req_msg_v01,
@@ -1151,7 +1579,7 @@ struct elem_info wlfw_cal_download_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(struct wlfw_cal_download_req_msg_v01,
@@ -1160,7 +1588,7 @@ struct elem_info wlfw_cal_download_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(struct wlfw_cal_download_req_msg_v01,
@@ -1169,7 +1597,7 @@ struct elem_info wlfw_cal_download_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(struct wlfw_cal_download_req_msg_v01,
@@ -1178,7 +1606,7 @@ struct elem_info wlfw_cal_download_req_msg_v01_ei[] = {
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
- .elem_size = sizeof(uint16_t),
+ .elem_size = sizeof(u16),
.is_array = NO_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(struct wlfw_cal_download_req_msg_v01,
@@ -1187,7 +1615,7 @@ struct elem_info wlfw_cal_download_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = QMI_WLFW_MAX_DATA_SIZE_V01,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = VAR_LEN_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(struct wlfw_cal_download_req_msg_v01,
@@ -1196,7 +1624,7 @@ struct elem_info wlfw_cal_download_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x14,
.offset = offsetof(struct wlfw_cal_download_req_msg_v01,
@@ -1205,16 +1633,34 @@ struct elem_info wlfw_cal_download_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x14,
.offset = offsetof(struct wlfw_cal_download_req_msg_v01,
end),
},
{
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x15,
+ .offset = offsetof(struct wlfw_cal_download_req_msg_v01,
+ cal_data_location_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x15,
+ .offset = offsetof(struct wlfw_cal_download_req_msg_v01,
+ cal_data_location),
+ },
+ {
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1225,14 +1671,15 @@ struct elem_info wlfw_cal_download_resp_msg_v01_ei[] = {
.elem_size = sizeof(struct qmi_response_type_v01),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
- .offset = offsetof(struct wlfw_cal_download_resp_msg_v01,
- resp),
+ .offset =
+ offsetof(struct wlfw_cal_download_resp_msg_v01,
+ resp),
.ei_array = get_qmi_response_type_v01_ei(),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1243,22 +1690,44 @@ struct elem_info wlfw_initiate_cal_update_ind_msg_v01_ei[] = {
.elem_size = sizeof(enum wlfw_cal_temp_id_enum_v01),
.is_array = NO_ARRAY,
.tlv_type = 0x01,
- .offset = offsetof(struct wlfw_initiate_cal_update_ind_msg_v01,
- cal_id),
+ .offset =
+ offsetof(struct wlfw_initiate_cal_update_ind_msg_v01,
+ cal_id),
},
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
- .offset = offsetof(struct wlfw_initiate_cal_update_ind_msg_v01,
- total_size),
+ .offset =
+ offsetof(struct wlfw_initiate_cal_update_ind_msg_v01,
+ total_size),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_initiate_cal_update_ind_msg_v01,
+ cal_data_location_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_initiate_cal_update_ind_msg_v01,
+ cal_data_location),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1275,7 +1744,7 @@ struct elem_info wlfw_cal_update_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
.offset = offsetof(struct wlfw_cal_update_req_msg_v01,
@@ -1284,7 +1753,7 @@ struct elem_info wlfw_cal_update_req_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1302,7 +1771,7 @@ struct elem_info wlfw_cal_update_resp_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_cal_update_resp_msg_v01,
@@ -1320,7 +1789,7 @@ struct elem_info wlfw_cal_update_resp_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(struct wlfw_cal_update_resp_msg_v01,
@@ -1329,7 +1798,7 @@ struct elem_info wlfw_cal_update_resp_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(struct wlfw_cal_update_resp_msg_v01,
@@ -1338,7 +1807,7 @@ struct elem_info wlfw_cal_update_resp_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(struct wlfw_cal_update_resp_msg_v01,
@@ -1347,7 +1816,7 @@ struct elem_info wlfw_cal_update_resp_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(struct wlfw_cal_update_resp_msg_v01,
@@ -1356,7 +1825,7 @@ struct elem_info wlfw_cal_update_resp_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(struct wlfw_cal_update_resp_msg_v01,
@@ -1365,7 +1834,7 @@ struct elem_info wlfw_cal_update_resp_msg_v01_ei[] = {
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
- .elem_size = sizeof(uint16_t),
+ .elem_size = sizeof(u16),
.is_array = NO_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(struct wlfw_cal_update_resp_msg_v01,
@@ -1374,7 +1843,7 @@ struct elem_info wlfw_cal_update_resp_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = QMI_WLFW_MAX_DATA_SIZE_V01,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = VAR_LEN_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(struct wlfw_cal_update_resp_msg_v01,
@@ -1383,7 +1852,7 @@ struct elem_info wlfw_cal_update_resp_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x14,
.offset = offsetof(struct wlfw_cal_update_resp_msg_v01,
@@ -1392,16 +1861,34 @@ struct elem_info wlfw_cal_update_resp_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x14,
.offset = offsetof(struct wlfw_cal_update_resp_msg_v01,
end),
},
{
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x15,
+ .offset = offsetof(struct wlfw_cal_update_resp_msg_v01,
+ cal_data_location_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x15,
+ .offset = offsetof(struct wlfw_cal_update_resp_msg_v01,
+ cal_data_location),
+ },
+ {
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1409,7 +1896,7 @@ struct elem_info wlfw_msa_info_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint64_t),
+ .elem_size = sizeof(u64),
.is_array = NO_ARRAY,
.tlv_type = 0x01,
.offset = offsetof(struct wlfw_msa_info_req_msg_v01,
@@ -1418,7 +1905,7 @@ struct elem_info wlfw_msa_info_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
.offset = offsetof(struct wlfw_msa_info_req_msg_v01,
@@ -1427,7 +1914,7 @@ struct elem_info wlfw_msa_info_req_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1445,7 +1932,7 @@ struct elem_info wlfw_msa_info_resp_msg_v01_ei[] = {
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x03,
.offset = offsetof(struct wlfw_msa_info_resp_msg_v01,
@@ -1464,7 +1951,7 @@ struct elem_info wlfw_msa_info_resp_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1472,7 +1959,7 @@ struct elem_info wlfw_msa_ready_req_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1490,7 +1977,7 @@ struct elem_info wlfw_msa_ready_resp_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1498,7 +1985,7 @@ struct elem_info wlfw_ini_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_ini_req_msg_v01,
@@ -1507,7 +1994,7 @@ struct elem_info wlfw_ini_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_ini_req_msg_v01,
@@ -1516,7 +2003,7 @@ struct elem_info wlfw_ini_req_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1534,7 +2021,7 @@ struct elem_info wlfw_ini_resp_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1542,7 +2029,7 @@ struct elem_info wlfw_athdiag_read_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x01,
.offset = offsetof(struct wlfw_athdiag_read_req_msg_v01,
@@ -1551,7 +2038,7 @@ struct elem_info wlfw_athdiag_read_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
.offset = offsetof(struct wlfw_athdiag_read_req_msg_v01,
@@ -1560,7 +2047,7 @@ struct elem_info wlfw_athdiag_read_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x03,
.offset = offsetof(struct wlfw_athdiag_read_req_msg_v01,
@@ -1569,7 +2056,7 @@ struct elem_info wlfw_athdiag_read_req_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1580,45 +2067,45 @@ struct elem_info wlfw_athdiag_read_resp_msg_v01_ei[] = {
.elem_size = sizeof(struct qmi_response_type_v01),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
- .offset = offsetof(
- struct wlfw_athdiag_read_resp_msg_v01,
- resp),
+ .offset =
+ offsetof(struct wlfw_athdiag_read_resp_msg_v01,
+ resp),
.ei_array = get_qmi_response_type_v01_ei(),
},
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
- .offset = offsetof(
- struct wlfw_athdiag_read_resp_msg_v01,
- data_valid),
+ .offset =
+ offsetof(struct wlfw_athdiag_read_resp_msg_v01,
+ data_valid),
},
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
- .elem_size = sizeof(uint16_t),
+ .elem_size = sizeof(u16),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
- .offset = offsetof(
- struct wlfw_athdiag_read_resp_msg_v01,
- data_len),
+ .offset =
+ offsetof(struct wlfw_athdiag_read_resp_msg_v01,
+ data_len),
},
{
.data_type = QMI_UNSIGNED_1_BYTE,
- .elem_len = QMI_WLFW_MAX_DATA_SIZE_V01,
- .elem_size = sizeof(uint8_t),
+ .elem_len = QMI_WLFW_MAX_ATHDIAG_DATA_SIZE_V01,
+ .elem_size = sizeof(u8),
.is_array = VAR_LEN_ARRAY,
.tlv_type = 0x10,
- .offset = offsetof(
- struct wlfw_athdiag_read_resp_msg_v01,
- data),
+ .offset =
+ offsetof(struct wlfw_athdiag_read_resp_msg_v01,
+ data),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1626,47 +2113,47 @@ struct elem_info wlfw_athdiag_write_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x01,
- .offset = offsetof(
- struct wlfw_athdiag_write_req_msg_v01,
- offset),
+ .offset =
+ offsetof(struct wlfw_athdiag_write_req_msg_v01,
+ offset),
},
{
.data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
- .offset = offsetof(
- struct wlfw_athdiag_write_req_msg_v01,
- mem_type),
+ .offset =
+ offsetof(struct wlfw_athdiag_write_req_msg_v01,
+ mem_type),
},
{
.data_type = QMI_DATA_LEN,
.elem_len = 1,
- .elem_size = sizeof(uint16_t),
+ .elem_size = sizeof(u16),
.is_array = NO_ARRAY,
.tlv_type = 0x03,
- .offset = offsetof(
- struct wlfw_athdiag_write_req_msg_v01,
- data_len),
+ .offset =
+ offsetof(struct wlfw_athdiag_write_req_msg_v01,
+ data_len),
},
{
.data_type = QMI_UNSIGNED_1_BYTE,
- .elem_len = QMI_WLFW_MAX_DATA_SIZE_V01,
- .elem_size = sizeof(uint8_t),
+ .elem_len = QMI_WLFW_MAX_ATHDIAG_DATA_SIZE_V01,
+ .elem_size = sizeof(u8),
.is_array = VAR_LEN_ARRAY,
.tlv_type = 0x03,
- .offset = offsetof(
- struct wlfw_athdiag_write_req_msg_v01,
- data),
+ .offset =
+ offsetof(struct wlfw_athdiag_write_req_msg_v01,
+ data),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1677,15 +2164,15 @@ struct elem_info wlfw_athdiag_write_resp_msg_v01_ei[] = {
.elem_size = sizeof(struct qmi_response_type_v01),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
- .offset = offsetof(
- struct wlfw_athdiag_write_resp_msg_v01,
- resp),
- .ei_array = get_qmi_response_type_v01_ei(),
+ .offset =
+ offsetof(struct wlfw_athdiag_write_resp_msg_v01,
+ resp),
+ .ei_array = qmi_response_type_v01_ei,
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1693,7 +2180,7 @@ struct elem_info wlfw_vbatt_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint64_t),
+ .elem_size = sizeof(u64),
.is_array = NO_ARRAY,
.tlv_type = 0x01,
.offset = offsetof(struct wlfw_vbatt_req_msg_v01,
@@ -1702,7 +2189,7 @@ struct elem_info wlfw_vbatt_req_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1720,7 +2207,7 @@ struct elem_info wlfw_vbatt_resp_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1728,7 +2215,7 @@ struct elem_info wlfw_mac_addr_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_mac_addr_req_msg_v01,
@@ -1737,7 +2224,7 @@ struct elem_info wlfw_mac_addr_req_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = QMI_WLFW_MAC_ADDR_SIZE_V01,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = STATIC_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_mac_addr_req_msg_v01,
@@ -1746,7 +2233,7 @@ struct elem_info wlfw_mac_addr_req_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1764,7 +2251,7 @@ struct elem_info wlfw_mac_addr_resp_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1772,25 +2259,268 @@ struct elem_info wlfw_host_cap_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_host_cap_req_msg_v01,
- daemon_support_valid),
+ num_clients_valid),
},
{
- .data_type = QMI_UNSIGNED_1_BYTE,
+ .data_type = QMI_UNSIGNED_4_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_host_cap_req_msg_v01,
- daemon_support),
+ num_clients),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x11,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ wake_msi_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x11,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ wake_msi),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x12,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ gpios_valid),
+ },
+ {
+ .data_type = QMI_DATA_LEN,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x12,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ gpios_len),
+ },
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = QMI_WLFW_MAX_NUM_GPIO_V01,
+ .elem_size = sizeof(u32),
+ .is_array = VAR_LEN_ARRAY,
+ .tlv_type = 0x12,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ gpios),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x13,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ nm_modem_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x13,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ nm_modem),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x14,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ bdf_support_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x14,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ bdf_support),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x15,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ bdf_cache_support_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x15,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ bdf_cache_support),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x16,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ m3_support_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x16,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ m3_support),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x17,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ m3_cache_support_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x17,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ m3_cache_support),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x18,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ cal_filesys_support_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x18,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ cal_filesys_support),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x19,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ cal_cache_support_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x19,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ cal_cache_support),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1A,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ cal_done_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1A,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ cal_done),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1B,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ mem_bucket_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1B,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ mem_bucket),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1C,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ mem_cfg_mode_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1C,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ mem_cfg_mode),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1D,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ cal_duration_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_2_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u16),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x1D,
+ .offset = offsetof(struct wlfw_host_cap_req_msg_v01,
+ cal_duration),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1808,50 +2538,61 @@ struct elem_info wlfw_host_cap_resp_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
struct elem_info wlfw_request_mem_ind_msg_v01_ei[] = {
{
- .data_type = QMI_UNSIGNED_4_BYTE,
+ .data_type = QMI_DATA_LEN,
.elem_len = 1,
- .elem_size = sizeof(uint32_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x01,
.offset = offsetof(struct wlfw_request_mem_ind_msg_v01,
- size),
+ 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),
+ .is_array = 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,
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
struct elem_info wlfw_respond_mem_req_msg_v01_ei[] = {
{
- .data_type = QMI_UNSIGNED_8_BYTE,
+ .data_type = QMI_DATA_LEN,
.elem_len = 1,
- .elem_size = sizeof(uint64_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x01,
.offset = offsetof(struct wlfw_respond_mem_req_msg_v01,
- addr),
+ mem_seg_len),
},
{
- .data_type = QMI_UNSIGNED_4_BYTE,
- .elem_len = 1,
- .elem_size = sizeof(uint32_t),
- .is_array = NO_ARRAY,
- .tlv_type = 0x02,
+ .data_type = QMI_STRUCT,
+ .elem_len = QMI_WLFW_MAX_NUM_MEM_SEG_V01,
+ .elem_size = sizeof(struct wlfw_mem_seg_resp_s_v01),
+ .is_array = VAR_LEN_ARRAY,
+ .tlv_type = 0x01,
.offset = offsetof(struct wlfw_respond_mem_req_msg_v01,
- size),
+ mem_seg),
+ .ei_array = wlfw_mem_seg_resp_s_v01_ei,
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1869,7 +2610,7 @@ struct elem_info wlfw_respond_mem_resp_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1877,15 +2618,15 @@ struct elem_info wlfw_fw_mem_ready_ind_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
-struct elem_info wlfw_cold_boot_cal_done_ind_msg_v01_ei[] = {
+struct elem_info wlfw_fw_init_done_ind_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1893,7 +2634,7 @@ struct elem_info wlfw_rejuvenate_ind_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_rejuvenate_ind_msg_v01,
@@ -1902,7 +2643,7 @@ struct elem_info wlfw_rejuvenate_ind_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
.offset = offsetof(struct wlfw_rejuvenate_ind_msg_v01,
@@ -1911,7 +2652,7 @@ struct elem_info wlfw_rejuvenate_ind_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(struct wlfw_rejuvenate_ind_msg_v01,
@@ -1920,7 +2661,7 @@ struct elem_info wlfw_rejuvenate_ind_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_1_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
.offset = offsetof(struct wlfw_rejuvenate_ind_msg_v01,
@@ -1929,7 +2670,7 @@ struct elem_info wlfw_rejuvenate_ind_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(struct wlfw_rejuvenate_ind_msg_v01,
@@ -1938,7 +2679,7 @@ struct elem_info wlfw_rejuvenate_ind_msg_v01_ei[] = {
{
.data_type = QMI_UNSIGNED_2_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint16_t),
+ .elem_size = sizeof(u16),
.is_array = NO_ARRAY,
.tlv_type = 0x12,
.offset = offsetof(struct wlfw_rejuvenate_ind_msg_v01,
@@ -1947,7 +2688,7 @@ struct elem_info wlfw_rejuvenate_ind_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x13,
.offset = offsetof(struct wlfw_rejuvenate_ind_msg_v01,
@@ -1965,7 +2706,7 @@ struct elem_info wlfw_rejuvenate_ind_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1973,7 +2714,7 @@ struct elem_info wlfw_rejuvenate_ack_req_msg_v01_ei[] = {
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -1984,15 +2725,15 @@ struct elem_info wlfw_rejuvenate_ack_resp_msg_v01_ei[] = {
.elem_size = sizeof(struct qmi_response_type_v01),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
- .offset = offsetof(
- struct wlfw_rejuvenate_ack_resp_msg_v01,
- resp),
+ .offset =
+ offsetof(struct wlfw_rejuvenate_ack_resp_msg_v01,
+ resp),
.ei_array = get_qmi_response_type_v01_ei(),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -2000,27 +2741,27 @@ struct elem_info wlfw_dynamic_feature_mask_req_msg_v01_ei[] = {
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
- .offset = offsetof(struct
- wlfw_dynamic_feature_mask_req_msg_v01,
- mask_valid),
+ .offset =
+ offsetof(struct wlfw_dynamic_feature_mask_req_msg_v01,
+ mask_valid),
},
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint64_t),
+ .elem_size = sizeof(u64),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
- .offset = offsetof(
- struct wlfw_dynamic_feature_mask_req_msg_v01,
- mask),
+ .offset =
+ offsetof(struct wlfw_dynamic_feature_mask_req_msg_v01,
+ mask),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
@@ -2031,55 +2772,771 @@ struct elem_info wlfw_dynamic_feature_mask_resp_msg_v01_ei[] = {
.elem_size = sizeof(struct qmi_response_type_v01),
.is_array = NO_ARRAY,
.tlv_type = 0x02,
- .offset = offsetof(
- struct wlfw_dynamic_feature_mask_resp_msg_v01,
- resp),
+ .offset =
+ offsetof(struct wlfw_dynamic_feature_mask_resp_msg_v01,
+ resp),
.ei_array = get_qmi_response_type_v01_ei(),
},
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
+ .is_array = 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),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
- .offset = offsetof(
- struct wlfw_dynamic_feature_mask_resp_msg_v01,
- prev_mask_valid),
+ .offset =
+ offsetof(struct wlfw_dynamic_feature_mask_resp_msg_v01,
+ prev_mask),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = 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(uint64_t),
+ .elem_size = sizeof(u64),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x11,
+ .offset =
+ offsetof(struct wlfw_dynamic_feature_mask_resp_msg_v01,
+ curr_mask),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_m3_info_req_msg_v01_ei[] = {
+ {
+ .data_type = QMI_UNSIGNED_8_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u64),
+ .is_array = 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),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x02,
+ .offset = offsetof(struct wlfw_m3_info_req_msg_v01,
+ size),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_m3_info_resp_msg_v01_ei[] = {
+ {
+ .data_type = QMI_STRUCT,
+ .elem_len = 1,
+ .elem_size = sizeof(struct qmi_response_type_v01),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x02,
+ .offset = offsetof(struct wlfw_m3_info_resp_msg_v01,
+ resp),
+ .ei_array = get_qmi_response_type_v01_ei(),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_xo_cal_ind_msg_v01_ei[] = {
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x01,
+ .offset = offsetof(struct wlfw_xo_cal_ind_msg_v01,
+ xo_cal_data),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_cal_done_ind_msg_v01_ei[] = {
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_qdss_trace_req_mem_ind_msg_v01_ei[] = {
+ {
+ .data_type = QMI_DATA_LEN,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x01,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_req_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),
+ .is_array = VAR_LEN_ARRAY,
+ .tlv_type = 0x01,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_req_mem_ind_msg_v01,
+ mem_seg),
+ .ei_array = wlfw_mem_seg_s_v01_ei,
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_qdss_trace_mem_info_req_msg_v01_ei[] = {
+ {
+ .data_type = QMI_DATA_LEN,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x01,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_mem_info_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),
+ .is_array = VAR_LEN_ARRAY,
+ .tlv_type = 0x01,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_mem_info_req_msg_v01,
+ mem_seg),
+ .ei_array = wlfw_mem_seg_resp_s_v01_ei,
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_qdss_trace_mem_info_resp_msg_v01_ei[] = {
+ {
+ .data_type = QMI_STRUCT,
+ .elem_len = 1,
+ .elem_size = sizeof(struct qmi_response_type_v01),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x02,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_mem_info_resp_msg_v01,
+ resp),
+ .ei_array = get_qmi_response_type_v01_ei(),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_qdss_trace_save_ind_msg_v01_ei[] = {
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x01,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_save_ind_msg_v01,
+ source),
+ },
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x02,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_save_ind_msg_v01,
+ total_size),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_save_ind_msg_v01,
+ mem_seg_valid),
+ },
+ {
+ .data_type = QMI_DATA_LEN,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_save_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_resp_s_v01),
+ .is_array = VAR_LEN_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_save_ind_msg_v01,
+ mem_seg),
+ .ei_array = wlfw_mem_seg_resp_s_v01_ei,
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x11,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_save_ind_msg_v01,
+ file_name_valid),
+ },
+ {
+ .data_type = QMI_STRING,
+ .elem_len = QMI_WLFW_MAX_STR_LEN_V01 + 1,
+ .elem_size = sizeof(char),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x11,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_save_ind_msg_v01,
+ file_name),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_qdss_trace_data_req_msg_v01_ei[] = {
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x01,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_data_req_msg_v01,
+ seg_id),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_qdss_trace_data_resp_msg_v01_ei[] = {
+ {
+ .data_type = QMI_STRUCT,
+ .elem_len = 1,
+ .elem_size = sizeof(struct qmi_response_type_v01),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x02,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_data_resp_msg_v01,
+ resp),
+ .ei_array = get_qmi_response_type_v01_ei(),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_data_resp_msg_v01,
+ total_size_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_data_resp_msg_v01,
+ total_size),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x11,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_data_resp_msg_v01,
+ seg_id_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x11,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_data_resp_msg_v01,
+ seg_id),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x12,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_data_resp_msg_v01,
+ data_valid),
+ },
+ {
+ .data_type = QMI_DATA_LEN,
+ .elem_len = 1,
+ .elem_size = sizeof(u16),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x12,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_data_resp_msg_v01,
+ data_len),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = QMI_WLFW_MAX_DATA_SIZE_V01,
+ .elem_size = sizeof(u8),
+ .is_array = VAR_LEN_ARRAY,
+ .tlv_type = 0x12,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_data_resp_msg_v01,
+ data),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x13,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_data_resp_msg_v01,
+ end_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x13,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_data_resp_msg_v01,
+ end),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_qdss_trace_config_download_req_msg_v01_ei[] = {
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_config_download_req_msg_v01,
+ total_size_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x10,
- .offset = offsetof(
- struct wlfw_dynamic_feature_mask_resp_msg_v01,
- prev_mask),
+ .offset =
+ offsetof(struct wlfw_qdss_trace_config_download_req_msg_v01,
+ total_size),
},
{
.data_type = QMI_OPT_FLAG,
.elem_len = 1,
- .elem_size = sizeof(uint8_t),
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x11,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_config_download_req_msg_v01,
+ seg_id_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_4_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u32),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
- .offset = offsetof(
- struct wlfw_dynamic_feature_mask_resp_msg_v01,
- curr_mask_valid),
+ .offset =
+ offsetof(struct wlfw_qdss_trace_config_download_req_msg_v01,
+ seg_id),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x12,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_config_download_req_msg_v01,
+ data_valid),
+ },
+ {
+ .data_type = QMI_DATA_LEN,
+ .elem_len = 1,
+ .elem_size = sizeof(u16),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x12,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_config_download_req_msg_v01,
+ data_len),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = QMI_WLFW_MAX_DATA_SIZE_V01,
+ .elem_size = sizeof(u8),
+ .is_array = VAR_LEN_ARRAY,
+ .tlv_type = 0x12,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_config_download_req_msg_v01,
+ data),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x13,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_config_download_req_msg_v01,
+ end_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x13,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_config_download_req_msg_v01,
+ end),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_qdss_trace_config_download_resp_msg_v01_ei[] = {
+ {
+ .data_type = QMI_STRUCT,
+ .elem_len = 1,
+ .elem_size = sizeof(struct qmi_response_type_v01),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x02,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_config_download_resp_msg_v01,
+ resp),
+ .ei_array = get_qmi_response_type_v01_ei(),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_qdss_trace_mode_req_msg_v01_ei[] = {
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_mode_req_msg_v01,
+ mode_valid),
+ },
+ {
+ .data_type = QMI_SIGNED_4_BYTE_ENUM,
+ .elem_len = 1,
+ .elem_size = sizeof(enum wlfw_qdss_trace_mode_enum_v01),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_mode_req_msg_v01,
+ mode),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x11,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_mode_req_msg_v01,
+ option_valid),
},
{
.data_type = QMI_UNSIGNED_8_BYTE,
.elem_len = 1,
- .elem_size = sizeof(uint64_t),
+ .elem_size = sizeof(u64),
.is_array = NO_ARRAY,
.tlv_type = 0x11,
- .offset = offsetof(
- struct wlfw_dynamic_feature_mask_resp_msg_v01,
- curr_mask),
+ .offset =
+ offsetof(struct wlfw_qdss_trace_mode_req_msg_v01,
+ option),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_qdss_trace_mode_resp_msg_v01_ei[] = {
+ {
+ .data_type = QMI_STRUCT,
+ .elem_len = 1,
+ .elem_size = sizeof(struct qmi_response_type_v01),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x02,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_mode_resp_msg_v01,
+ resp),
+ .ei_array = get_qmi_response_type_v01_ei(),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_qdss_trace_free_ind_msg_v01_ei[] = {
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_free_ind_msg_v01,
+ mem_seg_valid),
+ },
+ {
+ .data_type = QMI_DATA_LEN,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_free_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_resp_s_v01),
+ .is_array = VAR_LEN_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_qdss_trace_free_ind_msg_v01,
+ mem_seg),
+ .ei_array = wlfw_mem_seg_resp_s_v01_ei,
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_shutdown_req_msg_v01_ei[] = {
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_shutdown_req_msg_v01,
+ shutdown_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_1_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_shutdown_req_msg_v01,
+ shutdown),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_shutdown_resp_msg_v01_ei[] = {
+ {
+ .data_type = QMI_STRUCT,
+ .elem_len = 1,
+ .elem_size = sizeof(struct qmi_response_type_v01),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x02,
+ .offset =
+ offsetof(struct wlfw_shutdown_resp_msg_v01,
+ resp),
+ .ei_array = get_qmi_response_type_v01_ei(),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_antenna_switch_req_msg_v01_ei[] = {
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_antenna_switch_resp_msg_v01_ei[] = {
+ {
+ .data_type = QMI_STRUCT,
+ .elem_len = 1,
+ .elem_size = sizeof(struct qmi_response_type_v01),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x02,
+ .offset =
+ offsetof(struct wlfw_antenna_switch_resp_msg_v01,
+ resp),
+ .ei_array = get_qmi_response_type_v01_ei(),
+ },
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_antenna_switch_resp_msg_v01,
+ antenna_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_8_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u64),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_antenna_switch_resp_msg_v01,
+ antenna),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_antenna_grant_req_msg_v01_ei[] = {
+ {
+ .data_type = QMI_OPT_FLAG,
+ .elem_len = 1,
+ .elem_size = sizeof(u8),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_antenna_grant_req_msg_v01,
+ grant_valid),
+ },
+ {
+ .data_type = QMI_UNSIGNED_8_BYTE,
+ .elem_len = 1,
+ .elem_size = sizeof(u64),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x10,
+ .offset =
+ offsetof(struct wlfw_antenna_grant_req_msg_v01,
+ grant),
+ },
+ {
+ .data_type = QMI_EOTI,
+ .is_array = NO_ARRAY,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
+ },
+};
+
+struct elem_info wlfw_antenna_grant_resp_msg_v01_ei[] = {
+ {
+ .data_type = QMI_STRUCT,
+ .elem_len = 1,
+ .elem_size = sizeof(struct qmi_response_type_v01),
+ .is_array = NO_ARRAY,
+ .tlv_type = 0x02,
+ .offset =
+ offsetof(struct wlfw_antenna_grant_resp_msg_v01,
+ resp),
+ .ei_array = get_qmi_response_type_v01_ei(),
},
{
.data_type = QMI_EOTI,
.is_array = NO_ARRAY,
- .is_array = QMI_COMMON_TLV_TYPE,
+ .tlv_type = QMI_COMMON_TLV_TYPE,
},
};
diff --git a/drivers/soc/qcom/wlan_firmware_service_v01.h b/drivers/soc/qcom/wlan_firmware_service_v01.h
index 751e92338a0f..121c491d2b30 100644
--- a/drivers/soc/qcom/wlan_firmware_service_v01.h
+++ b/drivers/soc/qcom/wlan_firmware_service_v01.h
@@ -1,4 +1,4 @@
- /* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
+ /* Copyright (c) 2015-2017, 2019 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
@@ -18,15 +18,26 @@
#define QMI_WLFW_BDF_DOWNLOAD_REQ_V01 0x0025
#define QMI_WLFW_FW_MEM_READY_IND_V01 0x0037
+#define QMI_WLFW_QDSS_TRACE_CONFIG_DOWNLOAD_REQ_V01 0x0044
#define QMI_WLFW_INITIATE_CAL_UPDATE_IND_V01 0x002A
+#define QMI_WLFW_CAL_DONE_IND_V01 0x003E
#define QMI_WLFW_HOST_CAP_REQ_V01 0x0034
#define QMI_WLFW_DYNAMIC_FEATURE_MASK_RESP_V01 0x003B
+#define QMI_WLFW_M3_INFO_REQ_V01 0x003C
#define QMI_WLFW_CAP_REQ_V01 0x0024
+#define QMI_WLFW_FW_INIT_DONE_IND_V01 0x0038
+#define QMI_WLFW_ANTENNA_GRANT_RESP_V01 0x0048
#define QMI_WLFW_CAL_REPORT_REQ_V01 0x0026
+#define QMI_WLFW_M3_INFO_RESP_V01 0x003C
#define QMI_WLFW_CAL_UPDATE_RESP_V01 0x0029
#define QMI_WLFW_CAL_DOWNLOAD_RESP_V01 0x0027
+#define QMI_WLFW_XO_CAL_IND_V01 0x003D
#define QMI_WLFW_INI_RESP_V01 0x002F
#define QMI_WLFW_CAL_REPORT_RESP_V01 0x0026
+#define QMI_WLFW_QDSS_TRACE_MEM_INFO_REQ_V01 0x0040
+#define QMI_WLFW_ANTENNA_SWITCH_REQ_V01 0x0047
+#define QMI_WLFW_QDSS_TRACE_REQ_MEM_IND_V01 0x003F
+#define QMI_WLFW_SHUTDOWN_RESP_V01 0x0043
#define QMI_WLFW_MAC_ADDR_RESP_V01 0x0033
#define QMI_WLFW_INITIATE_CAL_DOWNLOAD_IND_V01 0x0028
#define QMI_WLFW_HOST_CAP_RESP_V01 0x0034
@@ -35,42 +46,56 @@
#define QMI_WLFW_WLAN_MODE_REQ_V01 0x0022
#define QMI_WLFW_IND_REGISTER_REQ_V01 0x0020
#define QMI_WLFW_WLAN_CFG_RESP_V01 0x0023
-#define QMI_WLFW_COLD_BOOT_CAL_DONE_IND_V01 0x0038
+#define QMI_WLFW_QDSS_TRACE_MODE_REQ_V01 0x0045
#define QMI_WLFW_REQUEST_MEM_IND_V01 0x0035
+#define QMI_WLFW_QDSS_TRACE_CONFIG_DOWNLOAD_RESP_V01 0x0044
#define QMI_WLFW_REJUVENATE_IND_V01 0x0039
#define QMI_WLFW_DYNAMIC_FEATURE_MASK_REQ_V01 0x003B
#define QMI_WLFW_ATHDIAG_WRITE_REQ_V01 0x0031
#define QMI_WLFW_WLAN_MODE_RESP_V01 0x0022
#define QMI_WLFW_RESPOND_MEM_REQ_V01 0x0036
+#define QMI_WLFW_QDSS_TRACE_MODE_RESP_V01 0x0045
#define QMI_WLFW_PIN_CONNECT_RESULT_IND_V01 0x002C
#define QMI_WLFW_FW_READY_IND_V01 0x0021
+#define QMI_WLFW_QDSS_TRACE_SAVE_IND_V01 0x0041
+#define QMI_WLFW_QDSS_TRACE_MEM_INFO_RESP_V01 0x0040
+#define QMI_WLFW_ANTENNA_GRANT_REQ_V01 0x0048
#define QMI_WLFW_MSA_READY_RESP_V01 0x002E
+#define QMI_WLFW_QDSS_TRACE_DATA_REQ_V01 0x0042
#define QMI_WLFW_CAL_UPDATE_REQ_V01 0x0029
#define QMI_WLFW_INI_REQ_V01 0x002F
#define QMI_WLFW_BDF_DOWNLOAD_RESP_V01 0x0025
#define QMI_WLFW_REJUVENATE_ACK_RESP_V01 0x003A
#define QMI_WLFW_MSA_INFO_RESP_V01 0x002D
#define QMI_WLFW_MSA_READY_REQ_V01 0x002E
+#define QMI_WLFW_QDSS_TRACE_DATA_RESP_V01 0x0042
#define QMI_WLFW_CAP_RESP_V01 0x0024
#define QMI_WLFW_REJUVENATE_ACK_REQ_V01 0x003A
#define QMI_WLFW_ATHDIAG_READ_RESP_V01 0x0030
+#define QMI_WLFW_SHUTDOWN_REQ_V01 0x0043
#define QMI_WLFW_VBATT_REQ_V01 0x0032
+#define QMI_WLFW_ANTENNA_SWITCH_RESP_V01 0x0047
#define QMI_WLFW_MAC_ADDR_REQ_V01 0x0033
#define QMI_WLFW_RESPOND_MEM_RESP_V01 0x0036
#define QMI_WLFW_VBATT_RESP_V01 0x0032
#define QMI_WLFW_MSA_INFO_REQ_V01 0x002D
+#define QMI_WLFW_QDSS_TRACE_FREE_IND_V01 0x0046
#define QMI_WLFW_CAL_DOWNLOAD_REQ_V01 0x0027
#define QMI_WLFW_ATHDIAG_READ_REQ_V01 0x0030
#define QMI_WLFW_WLAN_CFG_REQ_V01 0x0023
#define QMI_WLFW_IND_REGISTER_RESP_V01 0x0020
#define QMI_WLFW_MAX_NUM_MEMORY_REGIONS_V01 2
+#define QMI_WLFW_MAX_NUM_MEM_SEG_V01 32
#define QMI_WLFW_MAX_NUM_CAL_V01 5
#define QMI_WLFW_MAX_DATA_SIZE_V01 6144
#define QMI_WLFW_FUNCTION_NAME_LEN_V01 128
#define QMI_WLFW_MAX_NUM_CE_V01 12
#define QMI_WLFW_MAX_TIMESTAMP_LEN_V01 32
+#define QMI_WLFW_MAX_ATHDIAG_DATA_SIZE_V01 6144
+#define QMI_WLFW_MAX_NUM_GPIO_V01 32
#define QMI_WLFW_MAX_BUILD_ID_LEN_V01 128
+#define QMI_WLFW_MAX_NUM_MEM_CFG_V01 2
#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
@@ -109,463 +134,803 @@ enum wlfw_pipedir_enum_v01 {
WLFW_PIPEDIR_ENUM_MAX_VAL_V01 = INT_MAX,
};
-#define QMI_WLFW_CE_ATTR_FLAGS_V01 ((uint32_t)0x00)
-#define QMI_WLFW_CE_ATTR_NO_SNOOP_V01 ((uint32_t)0x01)
-#define QMI_WLFW_CE_ATTR_BYTE_SWAP_DATA_V01 ((uint32_t)0x02)
-#define QMI_WLFW_CE_ATTR_SWIZZLE_DESCRIPTORS_V01 ((uint32_t)0x04)
-#define QMI_WLFW_CE_ATTR_DISABLE_INTR_V01 ((uint32_t)0x08)
-#define QMI_WLFW_CE_ATTR_ENABLE_POLL_V01 ((uint32_t)0x10)
+enum wlfw_mem_type_enum_v01 {
+ WLFW_MEM_TYPE_ENUM_MIN_VAL_V01 = INT_MIN,
+ QMI_WLFW_MEM_TYPE_MSA_V01 = 0,
+ QMI_WLFW_MEM_TYPE_DDR_V01 = 1,
+ QMI_WLFW_MEM_BDF_V01 = 2,
+ QMI_WLFW_MEM_M3_V01 = 3,
+ QMI_WLFW_MEM_CAL_V01 = 4,
+ QMI_WLFW_MEM_DPD_V01 = 5,
+ QMI_WLFW_MEM_QDSS_V01 = 6,
+ WLFW_MEM_TYPE_ENUM_MAX_VAL_V01 = INT_MAX,
+};
+
+enum wlfw_qdss_trace_mode_enum_v01 {
+ WLFW_QDSS_TRACE_MODE_ENUM_MIN_VAL_V01 = INT_MIN,
+ QMI_WLFW_QDSS_TRACE_OFF_V01 = 0,
+ QMI_WLFW_QDSS_TRACE_ON_V01 = 1,
+ WLFW_QDSS_TRACE_MODE_ENUM_MAX_VAL_V01 = INT_MAX,
+};
+
+#define QMI_WLFW_CE_ATTR_FLAGS_V01 ((u32)0x00)
+#define QMI_WLFW_CE_ATTR_NO_SNOOP_V01 ((u32)0x01)
+#define QMI_WLFW_CE_ATTR_BYTE_SWAP_DATA_V01 ((u32)0x02)
+#define QMI_WLFW_CE_ATTR_SWIZZLE_DESCRIPTORS_V01 ((u32)0x04)
+#define QMI_WLFW_CE_ATTR_DISABLE_INTR_V01 ((u32)0x08)
+#define QMI_WLFW_CE_ATTR_ENABLE_POLL_V01 ((u32)0x10)
-#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)
+#define QMI_WLFW_ALREADY_REGISTERED_V01 ((u64)0x01ULL)
+#define QMI_WLFW_FW_READY_V01 ((u64)0x02ULL)
+#define QMI_WLFW_MSA_READY_V01 ((u64)0x04ULL)
+#define QMI_WLFW_FW_MEM_READY_V01 ((u64)0x08ULL)
+#define QMI_WLFW_FW_INIT_DONE_V01 ((u64)0x10ULL)
-#define QMI_WLFW_FW_REJUVENATE_V01 ((uint64_t)0x01ULL)
+#define QMI_WLFW_FW_REJUVENATE_V01 ((u64)0x01ULL)
struct wlfw_ce_tgt_pipe_cfg_s_v01 {
- uint32_t pipe_num;
+ u32 pipe_num;
enum wlfw_pipedir_enum_v01 pipe_dir;
- uint32_t nentries;
- uint32_t nbytes_max;
- uint32_t flags;
+ u32 nentries;
+ u32 nbytes_max;
+ u32 flags;
};
struct wlfw_ce_svc_pipe_cfg_s_v01 {
- uint32_t service_id;
+ u32 service_id;
enum wlfw_pipedir_enum_v01 pipe_dir;
- uint32_t pipe_num;
+ u32 pipe_num;
};
struct wlfw_shadow_reg_cfg_s_v01 {
- uint16_t id;
- uint16_t offset;
+ u16 id;
+ u16 offset;
};
struct wlfw_shadow_reg_v2_cfg_s_v01 {
- uint32_t addr;
+ u32 addr;
+};
+
+struct wlfw_rri_over_ddr_cfg_s_v01 {
+ u32 base_addr_low;
+ u32 base_addr_high;
+};
+
+struct wlfw_msi_cfg_s_v01 {
+ u16 ce_id;
+ u16 msi_vector;
};
struct wlfw_memory_region_info_s_v01 {
- uint64_t region_addr;
- uint32_t size;
- uint8_t secure_flag;
+ u64 region_addr;
+ u32 size;
+ u8 secure_flag;
+};
+
+struct wlfw_mem_cfg_s_v01 {
+ u64 offset;
+ u32 size;
+ u8 secure_flag;
+};
+
+struct wlfw_mem_seg_s_v01 {
+ u32 size;
+ enum wlfw_mem_type_enum_v01 type;
+ u32 mem_cfg_len;
+ struct wlfw_mem_cfg_s_v01 mem_cfg[QMI_WLFW_MAX_NUM_MEM_CFG_V01];
+};
+
+struct wlfw_mem_seg_resp_s_v01 {
+ u64 addr;
+ u32 size;
+ enum wlfw_mem_type_enum_v01 type;
+ u8 restore;
};
struct wlfw_rf_chip_info_s_v01 {
- uint32_t chip_id;
- uint32_t chip_family;
+ u32 chip_id;
+ u32 chip_family;
};
struct wlfw_rf_board_info_s_v01 {
- uint32_t board_id;
+ u32 board_id;
};
struct wlfw_soc_info_s_v01 {
- uint32_t soc_id;
+ u32 soc_id;
};
struct wlfw_fw_version_info_s_v01 {
- uint32_t fw_version;
+ u32 fw_version;
char fw_build_timestamp[QMI_WLFW_MAX_TIMESTAMP_LEN_V01 + 1];
};
struct wlfw_ind_register_req_msg_v01 {
- uint8_t fw_ready_enable_valid;
- uint8_t fw_ready_enable;
- uint8_t initiate_cal_download_enable_valid;
- uint8_t initiate_cal_download_enable;
- uint8_t initiate_cal_update_enable_valid;
- uint8_t initiate_cal_update_enable;
- uint8_t msa_ready_enable_valid;
- uint8_t msa_ready_enable;
- uint8_t pin_connect_result_enable_valid;
- uint8_t pin_connect_result_enable;
- uint8_t client_id_valid;
- uint32_t client_id;
- uint8_t request_mem_enable_valid;
- uint8_t request_mem_enable;
- uint8_t fw_mem_ready_enable_valid;
- uint8_t fw_mem_ready_enable;
- uint8_t cold_boot_cal_done_enable_valid;
- uint8_t cold_boot_cal_done_enable;
- uint8_t rejuvenate_enable_valid;
- uint32_t rejuvenate_enable;
-};
-#define WLFW_IND_REGISTER_REQ_MSG_V01_MAX_MSG_LEN 46
+ u8 fw_ready_enable_valid;
+ u8 fw_ready_enable;
+ u8 initiate_cal_download_enable_valid;
+ u8 initiate_cal_download_enable;
+ u8 initiate_cal_update_enable_valid;
+ u8 initiate_cal_update_enable;
+ u8 msa_ready_enable_valid;
+ u8 msa_ready_enable;
+ u8 pin_connect_result_enable_valid;
+ u8 pin_connect_result_enable;
+ u8 client_id_valid;
+ u32 client_id;
+ u8 request_mem_enable_valid;
+ u8 request_mem_enable;
+ u8 fw_mem_ready_enable_valid;
+ u8 fw_mem_ready_enable;
+ u8 fw_init_done_enable_valid;
+ u8 fw_init_done_enable;
+ u8 rejuvenate_enable_valid;
+ u32 rejuvenate_enable;
+ u8 xo_cal_enable_valid;
+ u8 xo_cal_enable;
+ u8 cal_done_enable_valid;
+ u8 cal_done_enable;
+ u8 qdss_trace_req_mem_enable_valid;
+ u8 qdss_trace_req_mem_enable;
+ u8 qdss_trace_save_enable_valid;
+ u8 qdss_trace_save_enable;
+ u8 qdss_trace_free_enable_valid;
+ u8 qdss_trace_free_enable;
+};
+
+#define WLFW_IND_REGISTER_REQ_MSG_V01_MAX_MSG_LEN 66
extern struct elem_info wlfw_ind_register_req_msg_v01_ei[];
struct wlfw_ind_register_resp_msg_v01 {
struct qmi_response_type_v01 resp;
- uint8_t fw_status_valid;
- uint64_t fw_status;
+ u8 fw_status_valid;
+ u64 fw_status;
};
+
#define WLFW_IND_REGISTER_RESP_MSG_V01_MAX_MSG_LEN 18
extern struct elem_info wlfw_ind_register_resp_msg_v01_ei[];
struct wlfw_fw_ready_ind_msg_v01 {
char placeholder;
};
+
#define WLFW_FW_READY_IND_MSG_V01_MAX_MSG_LEN 0
extern struct elem_info wlfw_fw_ready_ind_msg_v01_ei[];
struct wlfw_msa_ready_ind_msg_v01 {
char placeholder;
};
+
#define WLFW_MSA_READY_IND_MSG_V01_MAX_MSG_LEN 0
extern struct elem_info wlfw_msa_ready_ind_msg_v01_ei[];
struct wlfw_pin_connect_result_ind_msg_v01 {
- uint8_t pwr_pin_result_valid;
- uint32_t pwr_pin_result;
- uint8_t phy_io_pin_result_valid;
- uint32_t phy_io_pin_result;
- uint8_t rf_pin_result_valid;
- uint32_t rf_pin_result;
+ u8 pwr_pin_result_valid;
+ u32 pwr_pin_result;
+ u8 phy_io_pin_result_valid;
+ u32 phy_io_pin_result;
+ u8 rf_pin_result_valid;
+ u32 rf_pin_result;
};
+
#define WLFW_PIN_CONNECT_RESULT_IND_MSG_V01_MAX_MSG_LEN 21
extern struct elem_info wlfw_pin_connect_result_ind_msg_v01_ei[];
struct wlfw_wlan_mode_req_msg_v01 {
enum wlfw_driver_mode_enum_v01 mode;
- uint8_t hw_debug_valid;
- uint8_t hw_debug;
+ u8 hw_debug_valid;
+ u8 hw_debug;
};
+
#define WLFW_WLAN_MODE_REQ_MSG_V01_MAX_MSG_LEN 11
extern struct elem_info wlfw_wlan_mode_req_msg_v01_ei[];
struct wlfw_wlan_mode_resp_msg_v01 {
struct qmi_response_type_v01 resp;
};
+
#define WLFW_WLAN_MODE_RESP_MSG_V01_MAX_MSG_LEN 7
extern struct elem_info wlfw_wlan_mode_resp_msg_v01_ei[];
struct wlfw_wlan_cfg_req_msg_v01 {
- uint8_t host_version_valid;
+ u8 host_version_valid;
char host_version[QMI_WLFW_MAX_STR_LEN_V01 + 1];
- uint8_t tgt_cfg_valid;
- uint32_t tgt_cfg_len;
+ u8 tgt_cfg_valid;
+ u32 tgt_cfg_len;
struct wlfw_ce_tgt_pipe_cfg_s_v01 tgt_cfg[QMI_WLFW_MAX_NUM_CE_V01];
- uint8_t svc_cfg_valid;
- uint32_t svc_cfg_len;
+ u8 svc_cfg_valid;
+ u32 svc_cfg_len;
struct wlfw_ce_svc_pipe_cfg_s_v01 svc_cfg[QMI_WLFW_MAX_NUM_SVC_V01];
- uint8_t shadow_reg_valid;
- uint32_t shadow_reg_len;
+ u8 shadow_reg_valid;
+ u32 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;
+ u8 shadow_reg_v2_valid;
+ u32 shadow_reg_v2_len;
struct wlfw_shadow_reg_v2_cfg_s_v01
- shadow_reg_v2[QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01];
+ shadow_reg_v2[QMI_WLFW_MAX_NUM_SHADOW_REG_V2_V01];
+ u8 rri_over_ddr_cfg_valid;
+ struct wlfw_rri_over_ddr_cfg_s_v01 rri_over_ddr_cfg;
+ u8 msi_cfg_valid;
+ u32 msi_cfg_len;
+ struct wlfw_msi_cfg_s_v01 msi_cfg[QMI_WLFW_MAX_NUM_CE_V01];
};
-#define WLFW_WLAN_CFG_REQ_MSG_V01_MAX_MSG_LEN 803
+
+#define WLFW_WLAN_CFG_REQ_MSG_V01_MAX_MSG_LEN 866
extern struct elem_info wlfw_wlan_cfg_req_msg_v01_ei[];
struct wlfw_wlan_cfg_resp_msg_v01 {
struct qmi_response_type_v01 resp;
};
+
#define WLFW_WLAN_CFG_RESP_MSG_V01_MAX_MSG_LEN 7
extern struct elem_info wlfw_wlan_cfg_resp_msg_v01_ei[];
struct wlfw_cap_req_msg_v01 {
char placeholder;
};
+
#define WLFW_CAP_REQ_MSG_V01_MAX_MSG_LEN 0
extern struct elem_info wlfw_cap_req_msg_v01_ei[];
struct wlfw_cap_resp_msg_v01 {
struct qmi_response_type_v01 resp;
- uint8_t chip_info_valid;
+ u8 chip_info_valid;
struct wlfw_rf_chip_info_s_v01 chip_info;
- uint8_t board_info_valid;
+ u8 board_info_valid;
struct wlfw_rf_board_info_s_v01 board_info;
- uint8_t soc_info_valid;
+ u8 soc_info_valid;
struct wlfw_soc_info_s_v01 soc_info;
- uint8_t fw_version_info_valid;
+ u8 fw_version_info_valid;
struct wlfw_fw_version_info_s_v01 fw_version_info;
- uint8_t fw_build_id_valid;
+ u8 fw_build_id_valid;
char fw_build_id[QMI_WLFW_MAX_BUILD_ID_LEN_V01 + 1];
+ u8 num_macs_valid;
+ u8 num_macs;
+ u8 voltage_mv_valid;
+ u32 voltage_mv;
};
-#define WLFW_CAP_RESP_MSG_V01_MAX_MSG_LEN 203
+
+#define WLFW_CAP_RESP_MSG_V01_MAX_MSG_LEN 214
extern struct elem_info wlfw_cap_resp_msg_v01_ei[];
struct wlfw_bdf_download_req_msg_v01 {
- uint8_t valid;
- uint8_t file_id_valid;
+ u8 valid;
+ u8 file_id_valid;
enum wlfw_cal_temp_id_enum_v01 file_id;
- uint8_t total_size_valid;
- uint32_t total_size;
- uint8_t seg_id_valid;
- uint32_t seg_id;
- uint8_t data_valid;
- uint32_t data_len;
- uint8_t data[QMI_WLFW_MAX_DATA_SIZE_V01];
- uint8_t end_valid;
- uint8_t end;
-};
-#define WLFW_BDF_DOWNLOAD_REQ_MSG_V01_MAX_MSG_LEN 6178
+ u8 total_size_valid;
+ u32 total_size;
+ u8 seg_id_valid;
+ u32 seg_id;
+ u8 data_valid;
+ u32 data_len;
+ u8 data[QMI_WLFW_MAX_DATA_SIZE_V01];
+ u8 end_valid;
+ u8 end;
+ u8 bdf_type_valid;
+ u8 bdf_type;
+};
+
+#define WLFW_BDF_DOWNLOAD_REQ_MSG_V01_MAX_MSG_LEN 6182
extern struct elem_info wlfw_bdf_download_req_msg_v01_ei[];
struct wlfw_bdf_download_resp_msg_v01 {
struct qmi_response_type_v01 resp;
};
+
#define WLFW_BDF_DOWNLOAD_RESP_MSG_V01_MAX_MSG_LEN 7
extern struct elem_info wlfw_bdf_download_resp_msg_v01_ei[];
struct wlfw_cal_report_req_msg_v01 {
- uint32_t meta_data_len;
+ u32 meta_data_len;
enum wlfw_cal_temp_id_enum_v01 meta_data[QMI_WLFW_MAX_NUM_CAL_V01];
+ u8 xo_cal_data_valid;
+ u8 xo_cal_data;
};
-#define WLFW_CAL_REPORT_REQ_MSG_V01_MAX_MSG_LEN 24
+
+#define WLFW_CAL_REPORT_REQ_MSG_V01_MAX_MSG_LEN 28
extern struct elem_info wlfw_cal_report_req_msg_v01_ei[];
struct wlfw_cal_report_resp_msg_v01 {
struct qmi_response_type_v01 resp;
};
+
#define WLFW_CAL_REPORT_RESP_MSG_V01_MAX_MSG_LEN 7
extern struct elem_info wlfw_cal_report_resp_msg_v01_ei[];
struct wlfw_initiate_cal_download_ind_msg_v01 {
enum wlfw_cal_temp_id_enum_v01 cal_id;
+ u8 total_size_valid;
+ u32 total_size;
+ u8 cal_data_location_valid;
+ u32 cal_data_location;
};
-#define WLFW_INITIATE_CAL_DOWNLOAD_IND_MSG_V01_MAX_MSG_LEN 7
+
+#define WLFW_INITIATE_CAL_DOWNLOAD_IND_MSG_V01_MAX_MSG_LEN 21
extern struct elem_info wlfw_initiate_cal_download_ind_msg_v01_ei[];
struct wlfw_cal_download_req_msg_v01 {
- uint8_t valid;
- uint8_t file_id_valid;
+ u8 valid;
+ u8 file_id_valid;
enum wlfw_cal_temp_id_enum_v01 file_id;
- uint8_t total_size_valid;
- uint32_t total_size;
- uint8_t seg_id_valid;
- uint32_t seg_id;
- uint8_t data_valid;
- uint32_t data_len;
- uint8_t data[QMI_WLFW_MAX_DATA_SIZE_V01];
- uint8_t end_valid;
- uint8_t end;
-};
-#define WLFW_CAL_DOWNLOAD_REQ_MSG_V01_MAX_MSG_LEN 6178
+ u8 total_size_valid;
+ u32 total_size;
+ u8 seg_id_valid;
+ u32 seg_id;
+ u8 data_valid;
+ u32 data_len;
+ u8 data[QMI_WLFW_MAX_DATA_SIZE_V01];
+ u8 end_valid;
+ u8 end;
+ u8 cal_data_location_valid;
+ u32 cal_data_location;
+};
+
+#define WLFW_CAL_DOWNLOAD_REQ_MSG_V01_MAX_MSG_LEN 6185
extern struct elem_info wlfw_cal_download_req_msg_v01_ei[];
struct wlfw_cal_download_resp_msg_v01 {
struct qmi_response_type_v01 resp;
};
+
#define WLFW_CAL_DOWNLOAD_RESP_MSG_V01_MAX_MSG_LEN 7
extern struct elem_info wlfw_cal_download_resp_msg_v01_ei[];
struct wlfw_initiate_cal_update_ind_msg_v01 {
enum wlfw_cal_temp_id_enum_v01 cal_id;
- uint32_t total_size;
+ u32 total_size;
+ u8 cal_data_location_valid;
+ u32 cal_data_location;
};
-#define WLFW_INITIATE_CAL_UPDATE_IND_MSG_V01_MAX_MSG_LEN 14
+
+#define WLFW_INITIATE_CAL_UPDATE_IND_MSG_V01_MAX_MSG_LEN 21
extern struct elem_info wlfw_initiate_cal_update_ind_msg_v01_ei[];
struct wlfw_cal_update_req_msg_v01 {
enum wlfw_cal_temp_id_enum_v01 cal_id;
- uint32_t seg_id;
+ u32 seg_id;
};
+
#define WLFW_CAL_UPDATE_REQ_MSG_V01_MAX_MSG_LEN 14
extern struct elem_info wlfw_cal_update_req_msg_v01_ei[];
struct wlfw_cal_update_resp_msg_v01 {
struct qmi_response_type_v01 resp;
- uint8_t file_id_valid;
+ u8 file_id_valid;
enum wlfw_cal_temp_id_enum_v01 file_id;
- uint8_t total_size_valid;
- uint32_t total_size;
- uint8_t seg_id_valid;
- uint32_t seg_id;
- uint8_t data_valid;
- uint32_t data_len;
- uint8_t data[QMI_WLFW_MAX_DATA_SIZE_V01];
- uint8_t end_valid;
- uint8_t end;
-};
-#define WLFW_CAL_UPDATE_RESP_MSG_V01_MAX_MSG_LEN 6181
+ u8 total_size_valid;
+ u32 total_size;
+ u8 seg_id_valid;
+ u32 seg_id;
+ u8 data_valid;
+ u32 data_len;
+ u8 data[QMI_WLFW_MAX_DATA_SIZE_V01];
+ u8 end_valid;
+ u8 end;
+ u8 cal_data_location_valid;
+ u32 cal_data_location;
+};
+
+#define WLFW_CAL_UPDATE_RESP_MSG_V01_MAX_MSG_LEN 6188
extern struct elem_info wlfw_cal_update_resp_msg_v01_ei[];
struct wlfw_msa_info_req_msg_v01 {
- uint64_t msa_addr;
- uint32_t size;
+ u64 msa_addr;
+ u32 size;
};
+
#define WLFW_MSA_INFO_REQ_MSG_V01_MAX_MSG_LEN 18
extern struct elem_info wlfw_msa_info_req_msg_v01_ei[];
struct wlfw_msa_info_resp_msg_v01 {
struct qmi_response_type_v01 resp;
- uint32_t mem_region_info_len;
+ u32 mem_region_info_len;
struct wlfw_memory_region_info_s_v01
- mem_region_info[QMI_WLFW_MAX_NUM_MEMORY_REGIONS_V01];
+ mem_region_info[QMI_WLFW_MAX_NUM_MEMORY_REGIONS_V01];
};
+
#define WLFW_MSA_INFO_RESP_MSG_V01_MAX_MSG_LEN 37
extern struct elem_info wlfw_msa_info_resp_msg_v01_ei[];
struct wlfw_msa_ready_req_msg_v01 {
char placeholder;
};
+
#define WLFW_MSA_READY_REQ_MSG_V01_MAX_MSG_LEN 0
extern struct elem_info wlfw_msa_ready_req_msg_v01_ei[];
struct wlfw_msa_ready_resp_msg_v01 {
struct qmi_response_type_v01 resp;
};
+
#define WLFW_MSA_READY_RESP_MSG_V01_MAX_MSG_LEN 7
extern struct elem_info wlfw_msa_ready_resp_msg_v01_ei[];
struct wlfw_ini_req_msg_v01 {
- uint8_t enablefwlog_valid;
- uint8_t enablefwlog;
+ u8 enablefwlog_valid;
+ u8 enablefwlog;
};
+
#define WLFW_INI_REQ_MSG_V01_MAX_MSG_LEN 4
extern struct elem_info wlfw_ini_req_msg_v01_ei[];
struct wlfw_ini_resp_msg_v01 {
struct qmi_response_type_v01 resp;
};
+
#define WLFW_INI_RESP_MSG_V01_MAX_MSG_LEN 7
extern struct elem_info wlfw_ini_resp_msg_v01_ei[];
struct wlfw_athdiag_read_req_msg_v01 {
- uint32_t offset;
- uint32_t mem_type;
- uint32_t data_len;
+ u32 offset;
+ u32 mem_type;
+ u32 data_len;
};
+
#define WLFW_ATHDIAG_READ_REQ_MSG_V01_MAX_MSG_LEN 21
extern struct elem_info wlfw_athdiag_read_req_msg_v01_ei[];
struct wlfw_athdiag_read_resp_msg_v01 {
struct qmi_response_type_v01 resp;
- uint8_t data_valid;
- uint32_t data_len;
- uint8_t data[QMI_WLFW_MAX_DATA_SIZE_V01];
+ u8 data_valid;
+ u32 data_len;
+ u8 data[QMI_WLFW_MAX_ATHDIAG_DATA_SIZE_V01];
};
+
#define WLFW_ATHDIAG_READ_RESP_MSG_V01_MAX_MSG_LEN 6156
extern struct elem_info wlfw_athdiag_read_resp_msg_v01_ei[];
struct wlfw_athdiag_write_req_msg_v01 {
- uint32_t offset;
- uint32_t mem_type;
- uint32_t data_len;
- uint8_t data[QMI_WLFW_MAX_DATA_SIZE_V01];
+ u32 offset;
+ u32 mem_type;
+ u32 data_len;
+ u8 data[QMI_WLFW_MAX_ATHDIAG_DATA_SIZE_V01];
};
+
#define WLFW_ATHDIAG_WRITE_REQ_MSG_V01_MAX_MSG_LEN 6163
extern struct elem_info wlfw_athdiag_write_req_msg_v01_ei[];
struct wlfw_athdiag_write_resp_msg_v01 {
struct qmi_response_type_v01 resp;
};
+
#define WLFW_ATHDIAG_WRITE_RESP_MSG_V01_MAX_MSG_LEN 7
extern struct elem_info wlfw_athdiag_write_resp_msg_v01_ei[];
struct wlfw_vbatt_req_msg_v01 {
- uint64_t voltage_uv;
+ u64 voltage_uv;
};
+
#define WLFW_VBATT_REQ_MSG_V01_MAX_MSG_LEN 11
extern struct elem_info wlfw_vbatt_req_msg_v01_ei[];
struct wlfw_vbatt_resp_msg_v01 {
struct qmi_response_type_v01 resp;
};
+
#define WLFW_VBATT_RESP_MSG_V01_MAX_MSG_LEN 7
extern struct elem_info wlfw_vbatt_resp_msg_v01_ei[];
struct wlfw_mac_addr_req_msg_v01 {
- uint8_t mac_addr_valid;
- uint8_t mac_addr[QMI_WLFW_MAC_ADDR_SIZE_V01];
+ u8 mac_addr_valid;
+ u8 mac_addr[QMI_WLFW_MAC_ADDR_SIZE_V01];
};
+
#define WLFW_MAC_ADDR_REQ_MSG_V01_MAX_MSG_LEN 9
extern struct elem_info wlfw_mac_addr_req_msg_v01_ei[];
struct wlfw_mac_addr_resp_msg_v01 {
struct qmi_response_type_v01 resp;
};
+
#define WLFW_MAC_ADDR_RESP_MSG_V01_MAX_MSG_LEN 7
extern struct elem_info wlfw_mac_addr_resp_msg_v01_ei[];
struct wlfw_host_cap_req_msg_v01 {
- uint8_t daemon_support_valid;
- uint8_t daemon_support;
-};
-#define WLFW_HOST_CAP_REQ_MSG_V01_MAX_MSG_LEN 4
+ u8 num_clients_valid;
+ u32 num_clients;
+ u8 wake_msi_valid;
+ u32 wake_msi;
+ u8 gpios_valid;
+ u32 gpios_len;
+ u32 gpios[QMI_WLFW_MAX_NUM_GPIO_V01];
+ u8 nm_modem_valid;
+ u8 nm_modem;
+ u8 bdf_support_valid;
+ u8 bdf_support;
+ u8 bdf_cache_support_valid;
+ u8 bdf_cache_support;
+ u8 m3_support_valid;
+ u8 m3_support;
+ u8 m3_cache_support_valid;
+ u8 m3_cache_support;
+ u8 cal_filesys_support_valid;
+ u8 cal_filesys_support;
+ u8 cal_cache_support_valid;
+ u8 cal_cache_support;
+ u8 cal_done_valid;
+ u8 cal_done;
+ u8 mem_bucket_valid;
+ u32 mem_bucket;
+ u8 mem_cfg_mode_valid;
+ u8 mem_cfg_mode;
+ u8 cal_duration_valid;
+ u16 cal_duration;
+};
+
+#define WLFW_HOST_CAP_REQ_MSG_V01_MAX_MSG_LEN 194
extern struct elem_info wlfw_host_cap_req_msg_v01_ei[];
struct wlfw_host_cap_resp_msg_v01 {
struct qmi_response_type_v01 resp;
};
+
#define WLFW_HOST_CAP_RESP_MSG_V01_MAX_MSG_LEN 7
extern struct elem_info wlfw_host_cap_resp_msg_v01_ei[];
struct wlfw_request_mem_ind_msg_v01 {
- uint32_t size;
+ u32 mem_seg_len;
+ struct wlfw_mem_seg_s_v01 mem_seg[QMI_WLFW_MAX_NUM_MEM_SEG_V01];
};
-#define WLFW_REQUEST_MEM_IND_MSG_V01_MAX_MSG_LEN 7
+
+#define WLFW_REQUEST_MEM_IND_MSG_V01_MAX_MSG_LEN 1124
extern struct elem_info wlfw_request_mem_ind_msg_v01_ei[];
struct wlfw_respond_mem_req_msg_v01 {
- uint64_t addr;
- uint32_t size;
+ u32 mem_seg_len;
+ struct wlfw_mem_seg_resp_s_v01 mem_seg[QMI_WLFW_MAX_NUM_MEM_SEG_V01];
};
-#define WLFW_RESPOND_MEM_REQ_MSG_V01_MAX_MSG_LEN 18
+
+#define WLFW_RESPOND_MEM_REQ_MSG_V01_MAX_MSG_LEN 548
extern struct elem_info wlfw_respond_mem_req_msg_v01_ei[];
struct wlfw_respond_mem_resp_msg_v01 {
struct qmi_response_type_v01 resp;
};
+
#define WLFW_RESPOND_MEM_RESP_MSG_V01_MAX_MSG_LEN 7
extern struct elem_info wlfw_respond_mem_resp_msg_v01_ei[];
struct wlfw_fw_mem_ready_ind_msg_v01 {
char placeholder;
};
+
#define WLFW_FW_MEM_READY_IND_MSG_V01_MAX_MSG_LEN 0
extern struct elem_info wlfw_fw_mem_ready_ind_msg_v01_ei[];
-struct wlfw_cold_boot_cal_done_ind_msg_v01 {
+struct wlfw_fw_init_done_ind_msg_v01 {
char placeholder;
};
-#define WLFW_COLD_BOOT_CAL_DONE_IND_MSG_V01_MAX_MSG_LEN 0
-extern struct elem_info wlfw_cold_boot_cal_done_ind_msg_v01_ei[];
+
+#define WLFW_FW_INIT_DONE_IND_MSG_V01_MAX_MSG_LEN 0
+extern struct elem_info wlfw_fw_init_done_ind_msg_v01_ei[];
struct wlfw_rejuvenate_ind_msg_v01 {
- uint8_t cause_for_rejuvenation_valid;
- uint8_t cause_for_rejuvenation;
- uint8_t requesting_sub_system_valid;
- uint8_t requesting_sub_system;
- uint8_t line_number_valid;
- uint16_t line_number;
- uint8_t function_name_valid;
+ u8 cause_for_rejuvenation_valid;
+ u8 cause_for_rejuvenation;
+ u8 requesting_sub_system_valid;
+ u8 requesting_sub_system;
+ u8 line_number_valid;
+ u16 line_number;
+ u8 function_name_valid;
char function_name[QMI_WLFW_FUNCTION_NAME_LEN_V01 + 1];
};
+
#define WLFW_REJUVENATE_IND_MSG_V01_MAX_MSG_LEN 144
extern struct elem_info wlfw_rejuvenate_ind_msg_v01_ei[];
struct wlfw_rejuvenate_ack_req_msg_v01 {
char placeholder;
};
+
#define WLFW_REJUVENATE_ACK_REQ_MSG_V01_MAX_MSG_LEN 0
extern struct elem_info wlfw_rejuvenate_ack_req_msg_v01_ei[];
struct wlfw_rejuvenate_ack_resp_msg_v01 {
struct qmi_response_type_v01 resp;
};
+
#define WLFW_REJUVENATE_ACK_RESP_MSG_V01_MAX_MSG_LEN 7
extern struct elem_info wlfw_rejuvenate_ack_resp_msg_v01_ei[];
struct wlfw_dynamic_feature_mask_req_msg_v01 {
- uint8_t mask_valid;
- uint64_t mask;
+ u8 mask_valid;
+ u64 mask;
};
+
#define WLFW_DYNAMIC_FEATURE_MASK_REQ_MSG_V01_MAX_MSG_LEN 11
extern struct elem_info wlfw_dynamic_feature_mask_req_msg_v01_ei[];
struct wlfw_dynamic_feature_mask_resp_msg_v01 {
struct qmi_response_type_v01 resp;
- uint8_t prev_mask_valid;
- uint64_t prev_mask;
- uint8_t curr_mask_valid;
- uint64_t curr_mask;
+ u8 prev_mask_valid;
+ u64 prev_mask;
+ u8 curr_mask_valid;
+ u64 curr_mask;
};
+
#define WLFW_DYNAMIC_FEATURE_MASK_RESP_MSG_V01_MAX_MSG_LEN 29
extern struct elem_info wlfw_dynamic_feature_mask_resp_msg_v01_ei[];
+struct wlfw_m3_info_req_msg_v01 {
+ u64 addr;
+ u32 size;
+};
+
+#define WLFW_M3_INFO_REQ_MSG_V01_MAX_MSG_LEN 18
+extern struct elem_info wlfw_m3_info_req_msg_v01_ei[];
+
+struct wlfw_m3_info_resp_msg_v01 {
+ struct qmi_response_type_v01 resp;
+};
+
+#define WLFW_M3_INFO_RESP_MSG_V01_MAX_MSG_LEN 7
+extern struct elem_info wlfw_m3_info_resp_msg_v01_ei[];
+
+struct wlfw_xo_cal_ind_msg_v01 {
+ u8 xo_cal_data;
+};
+
+#define WLFW_XO_CAL_IND_MSG_V01_MAX_MSG_LEN 4
+extern struct elem_info wlfw_xo_cal_ind_msg_v01_ei[];
+
+struct wlfw_cal_done_ind_msg_v01 {
+ char placeholder;
+};
+
+#define WLFW_CAL_DONE_IND_MSG_V01_MAX_MSG_LEN 0
+extern struct elem_info wlfw_cal_done_ind_msg_v01_ei[];
+
+struct wlfw_qdss_trace_req_mem_ind_msg_v01 {
+ u32 mem_seg_len;
+ struct wlfw_mem_seg_s_v01 mem_seg[QMI_WLFW_MAX_NUM_MEM_SEG_V01];
+};
+
+#define WLFW_QDSS_TRACE_REQ_MEM_IND_MSG_V01_MAX_MSG_LEN 1124
+extern struct elem_info wlfw_qdss_trace_req_mem_ind_msg_v01_ei[];
+
+struct wlfw_qdss_trace_mem_info_req_msg_v01 {
+ u32 mem_seg_len;
+ struct wlfw_mem_seg_resp_s_v01 mem_seg[QMI_WLFW_MAX_NUM_MEM_SEG_V01];
+};
+
+#define WLFW_QDSS_TRACE_MEM_INFO_REQ_MSG_V01_MAX_MSG_LEN 548
+extern struct elem_info wlfw_qdss_trace_mem_info_req_msg_v01_ei[];
+
+struct wlfw_qdss_trace_mem_info_resp_msg_v01 {
+ struct qmi_response_type_v01 resp;
+};
+
+#define WLFW_QDSS_TRACE_MEM_INFO_RESP_MSG_V01_MAX_MSG_LEN 7
+extern struct elem_info wlfw_qdss_trace_mem_info_resp_msg_v01_ei[];
+
+struct wlfw_qdss_trace_save_ind_msg_v01 {
+ u32 source;
+ u32 total_size;
+ u8 mem_seg_valid;
+ u32 mem_seg_len;
+ struct wlfw_mem_seg_resp_s_v01 mem_seg[QMI_WLFW_MAX_NUM_MEM_SEG_V01];
+ u8 file_name_valid;
+ char file_name[QMI_WLFW_MAX_STR_LEN_V01 + 1];
+};
+
+#define WLFW_QDSS_TRACE_SAVE_IND_MSG_V01_MAX_MSG_LEN 581
+extern struct elem_info wlfw_qdss_trace_save_ind_msg_v01_ei[];
+
+struct wlfw_qdss_trace_data_req_msg_v01 {
+ u32 seg_id;
+};
+
+#define WLFW_QDSS_TRACE_DATA_REQ_MSG_V01_MAX_MSG_LEN 7
+extern struct elem_info wlfw_qdss_trace_data_req_msg_v01_ei[];
+
+struct wlfw_qdss_trace_data_resp_msg_v01 {
+ struct qmi_response_type_v01 resp;
+ u8 total_size_valid;
+ u32 total_size;
+ u8 seg_id_valid;
+ u32 seg_id;
+ u8 data_valid;
+ u32 data_len;
+ u8 data[QMI_WLFW_MAX_DATA_SIZE_V01];
+ u8 end_valid;
+ u8 end;
+};
+
+#define WLFW_QDSS_TRACE_DATA_RESP_MSG_V01_MAX_MSG_LEN 6174
+extern struct elem_info wlfw_qdss_trace_data_resp_msg_v01_ei[];
+
+struct wlfw_qdss_trace_config_download_req_msg_v01 {
+ u8 total_size_valid;
+ u32 total_size;
+ u8 seg_id_valid;
+ u32 seg_id;
+ u8 data_valid;
+ u32 data_len;
+ u8 data[QMI_WLFW_MAX_DATA_SIZE_V01];
+ u8 end_valid;
+ u8 end;
+};
+
+#define WLFW_QDSS_TRACE_CONFIG_DOWNLOAD_REQ_MSG_V01_MAX_MSG_LEN 6167
+extern struct elem_info wlfw_qdss_trace_config_download_req_msg_v01_ei[];
+
+struct wlfw_qdss_trace_config_download_resp_msg_v01 {
+ struct qmi_response_type_v01 resp;
+};
+
+#define WLFW_QDSS_TRACE_CONFIG_DOWNLOAD_RESP_MSG_V01_MAX_MSG_LEN 7
+extern struct elem_info wlfw_qdss_trace_config_download_resp_msg_v01_ei[];
+
+struct wlfw_qdss_trace_mode_req_msg_v01 {
+ u8 mode_valid;
+ enum wlfw_qdss_trace_mode_enum_v01 mode;
+ u8 option_valid;
+ u64 option;
+};
+
+#define WLFW_QDSS_TRACE_MODE_REQ_MSG_V01_MAX_MSG_LEN 18
+extern struct elem_info wlfw_qdss_trace_mode_req_msg_v01_ei[];
+
+struct wlfw_qdss_trace_mode_resp_msg_v01 {
+ struct qmi_response_type_v01 resp;
+};
+
+#define WLFW_QDSS_TRACE_MODE_RESP_MSG_V01_MAX_MSG_LEN 7
+extern struct elem_info wlfw_qdss_trace_mode_resp_msg_v01_ei[];
+
+struct wlfw_qdss_trace_free_ind_msg_v01 {
+ u8 mem_seg_valid;
+ u32 mem_seg_len;
+ struct wlfw_mem_seg_resp_s_v01 mem_seg[QMI_WLFW_MAX_NUM_MEM_SEG_V01];
+};
+
+#define WLFW_QDSS_TRACE_FREE_IND_MSG_V01_MAX_MSG_LEN 548
+extern struct elem_info wlfw_qdss_trace_free_ind_msg_v01_ei[];
+
+struct wlfw_shutdown_req_msg_v01 {
+ u8 shutdown_valid;
+ u8 shutdown;
+};
+
+#define WLFW_SHUTDOWN_REQ_MSG_V01_MAX_MSG_LEN 4
+extern struct elem_info wlfw_shutdown_req_msg_v01_ei[];
+
+struct wlfw_shutdown_resp_msg_v01 {
+ struct qmi_response_type_v01 resp;
+};
+
+#define WLFW_SHUTDOWN_RESP_MSG_V01_MAX_MSG_LEN 7
+extern struct elem_info wlfw_shutdown_resp_msg_v01_ei[];
+
+struct wlfw_antenna_switch_req_msg_v01 {
+ char placeholder;
+};
+
+#define WLFW_ANTENNA_SWITCH_REQ_MSG_V01_MAX_MSG_LEN 0
+extern struct elem_info wlfw_antenna_switch_req_msg_v01_ei[];
+
+struct wlfw_antenna_switch_resp_msg_v01 {
+ struct qmi_response_type_v01 resp;
+ u8 antenna_valid;
+ u64 antenna;
+};
+
+#define WLFW_ANTENNA_SWITCH_RESP_MSG_V01_MAX_MSG_LEN 18
+extern struct elem_info wlfw_antenna_switch_resp_msg_v01_ei[];
+
+struct wlfw_antenna_grant_req_msg_v01 {
+ u8 grant_valid;
+ u64 grant;
+};
+
+#define WLFW_ANTENNA_GRANT_REQ_MSG_V01_MAX_MSG_LEN 11
+extern struct elem_info wlfw_antenna_grant_req_msg_v01_ei[];
+
+struct wlfw_antenna_grant_resp_msg_v01 {
+ struct qmi_response_type_v01 resp;
+};
+
+#define WLFW_ANTENNA_GRANT_RESP_MSG_V01_MAX_MSG_LEN 7
+extern struct elem_info wlfw_antenna_grant_resp_msg_v01_ei[];
+
#endif
diff --git a/drivers/staging/android/ion/ion_system_heap.c b/drivers/staging/android/ion/ion_system_heap.c
index 0d851fffa082..d7bfa5ac943b 100644
--- a/drivers/staging/android/ion/ion_system_heap.c
+++ b/drivers/staging/android/ion/ion_system_heap.c
@@ -2,7 +2,7 @@
* drivers/staging/android/ion/ion_system_heap.c
*
* Copyright (C) 2011 Google, Inc.
- * Copyright (c) 2011-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011-2019, The Linux Foundation. All rights reserved.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
@@ -270,6 +270,9 @@ static struct page_info *alloc_from_pool_preferred(
struct page_info *info;
int i;
+ if (buffer->flags & ION_FLAG_POOL_FORCE_ALLOC)
+ goto force_alloc;
+
info = kmalloc(sizeof(*info), GFP_KERNEL);
if (!info)
return NULL;
@@ -301,6 +304,7 @@ static struct page_info *alloc_from_pool_preferred(
}
kfree(info);
+force_alloc:
return alloc_largest_available(heap, buffer, size, max_order);
}
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 18aff0c86724..1265820a3802 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -30,6 +30,9 @@
/* Indicate backport support for external authentication in AP mode */
#define CFG80211_EXTERNAL_AUTH_AP_SUPPORT 1
+/* Indicate backport support for DH IE creation/update*/
+#define CFG80211_EXTERNAL_DH_UPDATE_SUPPORT 1
+
/**
* DOC: Introduction
*
@@ -2444,6 +2447,31 @@ struct cfg80211_external_auth_params {
};
/**
+ * struct cfg80211_update_owe_info - OWE Information
+ *
+ * This structure provides information needed for the drivers to offload OWE
+ * (Oppurtunistic Wireless Encryption) processing to the user space.
+ *
+ * Commonly used across update_owe request and event interfaces.
+ *
+ * @bssid: BSSID of the peer from which the OWE processing has to be done.
+ * @status: status code, %WLAN_STATUS_SUCCESS for successful OWE info
+ * processing, use %WLAN_STATUS_UNSPECIFIED_FAILURE if user space
+ * cannot give you the real status code for failures. Used only for
+ * OWE update response command interface (user space to driver).
+ * @ie: IE's obtained from the peer or constructed by the user space. These are
+ * the IE's of the remote peer in the event from the host driver and
+ * the constructed IE's by the user space in the request interface.
+ * @ie_len: Length of IE's in octets.
+ */
+struct cfg80211_update_owe_info {
+ u8 bssid[ETH_ALEN] __aligned(2);
+ u16 status;
+ const u8 *ie;
+ size_t ie_len;
+};
+
+/**
* struct cfg80211_ops - backend description for wireless configuration
*
* This struct is registered by fullmac card drivers and/or wireless stacks
@@ -2741,6 +2769,10 @@ struct cfg80211_external_auth_params {
*
* @external_auth: indicates result of offloaded authentication processing from
* user space
+ *
+ * @update_owe_info: Provide updated OWE info to driver. Driver implementing SME
+ * but offloading the OWE processing to the user space will get the updated
+ * DH IE's (from the IE's) obtained through this interface.
*/
struct cfg80211_ops {
int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
@@ -3012,6 +3044,8 @@ struct cfg80211_ops {
const u8 *addr);
int (*external_auth)(struct wiphy *wiphy, struct net_device *dev,
struct cfg80211_external_auth_params *params);
+ int (*update_owe_info)(struct wiphy *wiphy, struct net_device *dev,
+ struct cfg80211_update_owe_info *owe_info);
};
/*
@@ -5896,4 +5930,14 @@ int cfg80211_external_auth_request(struct net_device *netdev,
#define wiphy_WARN(wiphy, format, args...) \
WARN(1, "wiphy: %s\n" format, wiphy_name(wiphy), ##args);
+/**
+ * cfg80211_update_owe_info_event - Notify the peer's OWE info to user space
+ * @netdev: network device
+ * @owe_info: peer's owe info
+ * @gfp: allocation flags
+ */
+void cfg80211_update_owe_info_event(struct net_device *netdev,
+ struct cfg80211_update_owe_info *owe_info,
+ gfp_t gfp);
+
#endif /* __NET_CFG80211_H */
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 0527b779f2f0..9ac3946a916f 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -990,6 +990,11 @@
* indicated by %NL80211_ATTR_WIPHY_FREQ and other attributes
* determining the width and type.
*
+ * @NL80211_CMD_UPDATE_OWE_INFO: This interface allows the host driver to
+ * offload OWE processing to user space. This intends to support
+ * OWE/Enhanced Open AKM by the host drivers that implemnt SME but rely
+ * on the user space for the crypotographic/DH IE processing.
+ *
* @NL80211_CMD_MAX: highest used command number
* @__NL80211_CMD_AFTER_LAST: internal use
*/
@@ -1210,6 +1215,7 @@ enum nl80211_commands {
NL80211_CMD_NOTIFY_RADAR,
+ NL80211_CMD_UPDATE_OWE_INFO,
/* add new commands above here */
/* used to define NL80211_CMD_MAX below */
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index dfce235942a1..a22e64fb6d95 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -11216,6 +11216,34 @@ static int nl80211_external_auth(struct sk_buff *skb, struct genl_info *info)
return rdev_external_auth(rdev, dev, &params);
}
+static int nl80211_update_owe_info(struct sk_buff *skb, struct genl_info *info)
+{
+ struct cfg80211_registered_device *rdev = info->user_ptr[0];
+ struct cfg80211_update_owe_info owe_info;
+ struct net_device *dev = info->user_ptr[1];
+
+ if (!rdev->ops->update_owe_info)
+ return -EOPNOTSUPP;
+
+ if (!info->attrs[NL80211_ATTR_STATUS_CODE] ||
+ (info->attrs[NL80211_ATTR_IE] &&
+ !is_valid_ie_attr(info->attrs[NL80211_ATTR_IE])))
+ return -EINVAL;
+
+ memset(&owe_info, 0, sizeof(owe_info));
+ owe_info.status =
+ nla_get_u16(info->attrs[NL80211_ATTR_STATUS_CODE]);
+ if (info->attrs[NL80211_ATTR_MAC])
+ nla_memcpy(owe_info.bssid, info->attrs[NL80211_ATTR_MAC],
+ ETH_ALEN);
+ if (info->attrs[NL80211_ATTR_IE]) {
+ owe_info.ie = nla_data(info->attrs[NL80211_ATTR_IE]);
+ owe_info.ie_len = nla_len(info->attrs[NL80211_ATTR_IE]);
+ }
+
+ return rdev_update_owe_info(rdev, dev, &owe_info);
+}
+
#define NL80211_FLAG_NEED_WIPHY 0x01
#define NL80211_FLAG_NEED_NETDEV 0x02
#define NL80211_FLAG_NEED_RTNL 0x04
@@ -12058,6 +12086,14 @@ static const struct genl_ops nl80211_ops[] = {
.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
NL80211_FLAG_NEED_RTNL,
},
+ {
+ .cmd = NL80211_CMD_UPDATE_OWE_INFO,
+ .doit = nl80211_update_owe_info,
+ .policy = nl80211_policy,
+ .flags = GENL_ADMIN_PERM,
+ .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
+ NL80211_FLAG_NEED_RTNL,
+ },
};
/* notification functions */
@@ -14052,6 +14088,49 @@ int cfg80211_external_auth_request(struct net_device *dev,
}
EXPORT_SYMBOL(cfg80211_external_auth_request);
+void cfg80211_update_owe_info_event(struct net_device *netdev,
+ struct cfg80211_update_owe_info *owe_info,
+ gfp_t gfp)
+{
+ struct wiphy *wiphy = netdev->ieee80211_ptr->wiphy;
+ struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
+ struct sk_buff *msg;
+ void *hdr;
+
+ trace_cfg80211_update_owe_info_event(wiphy, netdev, owe_info);
+
+ if (!owe_info)
+ return;
+
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
+ if (!msg)
+ return;
+
+ hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_UPDATE_OWE_INFO);
+ if (!hdr)
+ goto nla_put_failure;
+
+ if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) ||
+ nla_put_u32(msg, NL80211_ATTR_IFINDEX, netdev->ifindex) ||
+ nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, owe_info->bssid))
+ goto nla_put_failure;
+
+ if (nla_put(msg, NL80211_ATTR_IE, owe_info->ie_len, owe_info->ie))
+ goto nla_put_failure;
+
+ genlmsg_end(msg, hdr);
+
+ genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0,
+ NL80211_MCGRP_MLME, gfp);
+ return;
+
+nla_put_failure:
+ if (hdr)
+ genlmsg_cancel(msg, hdr);
+ nlmsg_free(msg);
+}
+EXPORT_SYMBOL(cfg80211_update_owe_info_event);
+
/* initialisation/exit functions */
int nl80211_init(void)
diff --git a/net/wireless/rdev-ops.h b/net/wireless/rdev-ops.h
index aef08a0f51f3..5cfd2634dafd 100644
--- a/net/wireless/rdev-ops.h
+++ b/net/wireless/rdev-ops.h
@@ -1054,4 +1054,16 @@ rdev_external_auth(struct cfg80211_registered_device *rdev,
return ret;
}
+static inline int rdev_update_owe_info(struct cfg80211_registered_device *rdev,
+ struct net_device *dev,
+ struct cfg80211_update_owe_info *oweinfo)
+{
+ int ret;
+
+ trace_rdev_update_owe_info(&rdev->wiphy, dev, oweinfo);
+ ret = rdev->ops->update_owe_info(&rdev->wiphy, dev, oweinfo);
+ trace_rdev_return_int(&rdev->wiphy, ret);
+ return ret;
+}
+
#endif /* __CFG80211_RDEV_OPS */
diff --git a/net/wireless/trace.h b/net/wireless/trace.h
index 03a76e86793a..bf43da73aad7 100644
--- a/net/wireless/trace.h
+++ b/net/wireless/trace.h
@@ -2866,6 +2866,43 @@ TRACE_EVENT(cfg80211_stop_iface,
WIPHY_PR_ARG, WDEV_PR_ARG)
);
+TRACE_EVENT(rdev_update_owe_info,
+ TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
+ struct cfg80211_update_owe_info *owe_info),
+ TP_ARGS(wiphy, netdev, owe_info),
+ TP_STRUCT__entry(WIPHY_ENTRY
+ NETDEV_ENTRY
+ MAC_ENTRY(bssid)
+ __field(u16, status)
+ __dynamic_array(u8, ie, owe_info->ie_len)),
+ TP_fast_assign(WIPHY_ASSIGN;
+ NETDEV_ASSIGN;
+ MAC_ASSIGN(bssid, owe_info->bssid);
+ __entry->status = owe_info->status;
+ memcpy(__get_dynamic_array(ie),
+ owe_info->ie, owe_info->ie_len);),
+ TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", peer: " MAC_PR_FMT
+ " status %d", WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(bssid),
+ __entry->status)
+);
+
+TRACE_EVENT(cfg80211_update_owe_info_event,
+ TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
+ struct cfg80211_update_owe_info *owe_info),
+ TP_ARGS(wiphy, netdev, owe_info),
+ TP_STRUCT__entry(WIPHY_ENTRY
+ NETDEV_ENTRY
+ MAC_ENTRY(bssid)
+ __dynamic_array(u8, ie, owe_info->ie_len)),
+ TP_fast_assign(WIPHY_ASSIGN;
+ NETDEV_ASSIGN;
+ MAC_ASSIGN(bssid, owe_info->bssid);
+ memcpy(__get_dynamic_array(ie), owe_info->ie,
+ owe_info->ie_len);),
+ TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT ", peer: " MAC_PR_FMT,
+ WIPHY_PR_ARG, NETDEV_PR_ARG, MAC_PR_ARG(bssid))
+);
+
#endif /* !__RDEV_OPS_TRACE || TRACE_HEADER_MULTI_READ */
#undef TRACE_INCLUDE_PATH
diff --git a/sound/soc/msm/apq8096-auto.c b/sound/soc/msm/apq8096-auto.c
index 69a1fbfa45aa..3aaff39d291d 100644
--- a/sound/soc/msm/apq8096-auto.c
+++ b/sound/soc/msm/apq8096-auto.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2019, 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
@@ -594,8 +594,8 @@ static const char *const tdm_slot_width_text[] = {"16", "24", "32"};
static struct afe_clk_set sec_mi2s_tx_clk = {
AFE_API_VERSION_I2S_CONFIG,
- Q6AFE_LPASS_CLK_ID_SEC_MI2S_EBIT,
- Q6AFE_LPASS_IBIT_CLK_DISABLE,
+ Q6AFE_LPASS_CLK_ID_SEC_MI2S_IBIT,
+ Q6AFE_LPASS_IBIT_CLK_1_P536_MHZ,
Q6AFE_LPASS_CLK_ATTRIBUTE_COUPLE_NO,
Q6AFE_LPASS_CLK_ROOT_DEFAULT,
0,
@@ -3775,7 +3775,7 @@ static int apq8096_mi2s_snd_startup(struct snd_pcm_substream *substream)
__func__, ret);
goto err;
}
- ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_CBM_CFM);
+ ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_CBS_CFS);
if (ret < 0)
pr_err("%s: set fmt cpu dai failed, err:%d\n",
__func__, ret);
@@ -7256,6 +7256,20 @@ static struct snd_soc_dai_link apq8096_auto_be_dai_links[] = {
.be_hw_params_fixup = msm_group_mi2s_be_hw_params_fixup,
.ops = &apq8096_group_mi2s_be_ops,
.ignore_suspend = 1,
+ },
+ {
+ .name = LPASS_BE_QUAT_MI2S_TX,
+ .stream_name = "Quaternary MI2S Capture",
+ .cpu_dai_name = "msm-dai-q6-mi2s.3",
+ .platform_name = "msm-pcm-routing",
+ .codec_name = "msm-stub-codec.1",
+ .codec_dai_name = "msm-stub-tx",
+ .no_pcm = 1,
+ .dpcm_capture = 1,
+ .be_id = MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
+ .be_hw_params_fixup = msm_mi2s_rx_be_hw_params_fixup,
+ .ops = &apq8096_mi2s_be_ops,
+ .ignore_suspend = 1,
}
};
diff --git a/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c b/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c
index c52a797857d4..baca08f3923b 100644
--- a/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c
+++ b/sound/soc/msm/qdsp6v2/msm-compress-q6-v2.c
@@ -1017,17 +1017,7 @@ static int msm_compr_send_media_format_block(struct snd_compr_stream *cstream,
sample_word_size = 16;
break;
}
- if (q6core_get_avs_version() == Q6_SUBSYS_AVS2_7)
- ret = q6asm_media_format_block_pcm_format_support_v3(
- prtd->audio_client,
- prtd->sample_rate,
- prtd->num_channels,
- bit_width, stream_id,
- use_default_chmap,
- chmap,
- sample_word_size);
- else
- ret = q6asm_media_format_block_pcm_format_support_v4(
+ ret = q6asm_media_format_block_pcm_format_support_v4(
prtd->audio_client,
prtd->sample_rate,
prtd->num_channels,
@@ -1333,13 +1323,7 @@ static int msm_compr_configure_dsp_for_playback
} else {
pr_debug("%s: stream_id %d bits_per_sample %d\n",
__func__, ac->stream_id, bits_per_sample);
- if (q6core_get_avs_version() == Q6_SUBSYS_AVS2_7)
- ret = q6asm_stream_open_write_v3(ac,
- prtd->codec, bits_per_sample,
- ac->stream_id,
- prtd->gapless_state.use_dsp_gapless_mode);
- else
- ret = q6asm_stream_open_write_v4(ac,
+ ret = q6asm_stream_open_write_v4(ac,
prtd->codec, bits_per_sample,
ac->stream_id,
prtd->gapless_state.use_dsp_gapless_mode);
@@ -2655,17 +2639,10 @@ static int msm_compr_trigger(struct snd_compr_stream *cstream, int cmd)
pr_debug("%s: open_write stream_id %d bits_per_sample %d",
__func__, stream_id, bits_per_sample);
- if (q6core_get_avs_version() == Q6_SUBSYS_AVS2_7)
- rc = q6asm_stream_open_write_v3(prtd->audio_client,
- prtd->codec, bits_per_sample,
- stream_id,
- prtd->gapless_state.use_dsp_gapless_mode);
- else
- rc = q6asm_stream_open_write_v4(prtd->audio_client,
+ rc = q6asm_stream_open_write_v4(prtd->audio_client,
prtd->codec, bits_per_sample,
stream_id,
prtd->gapless_state.use_dsp_gapless_mode);
- break;
if (rc < 0) {
pr_err("%s: Session out open failed for gapless\n",
__func__);
diff --git a/sound/soc/msm/qdsp6v2/msm-pcm-q6-v2.c b/sound/soc/msm/qdsp6v2/msm-pcm-q6-v2.c
index ab29f1580d13..0b55f71c23f6 100644
--- a/sound/soc/msm/qdsp6v2/msm-pcm-q6-v2.c
+++ b/sound/soc/msm/qdsp6v2/msm-pcm-q6-v2.c
@@ -384,26 +384,6 @@ static int msm_pcm_playback_prepare(struct snd_pcm_substream *substream)
prtd->audio_client = NULL;
return -ENOMEM;
}
- } else if (q6core_get_avs_version() == Q6_SUBSYS_AVS2_7) {
- ret = q6asm_open_write_v3(prtd->audio_client,
- FORMAT_LINEAR_PCM, bits_per_sample);
- if (ret < 0) {
- pr_err("%s: q6asm_open_write_v3 failed (%d)\n",
- __func__, ret);
- q6asm_audio_client_free(prtd->audio_client);
- prtd->audio_client = NULL;
- return -ENOMEM;
- }
- } else if (q6core_get_avs_version() == Q6_SUBSYS_AVS2_8) {
- ret = q6asm_open_write_v4(prtd->audio_client,
- FORMAT_LINEAR_PCM, bits_per_sample);
- if (ret < 0) {
- pr_err("%s: q6asm_open_write_v4 failed (%d)\n",
- __func__, ret);
- q6asm_audio_client_free(prtd->audio_client);
- prtd->audio_client = NULL;
- return -ENOMEM;
- }
} else {
ret = q6asm_open_write_with_retry(prtd->audio_client,
fmt_type, bits_per_sample);
@@ -453,21 +433,13 @@ static int msm_pcm_playback_prepare(struct snd_pcm_substream *substream)
prtd->channel_map, bits_per_sample,
sample_word_size, ASM_LITTLE_ENDIAN,
DEFAULT_QF);
- else {
- if (q6core_get_avs_version() == Q6_SUBSYS_AVS2_7)
- ret = q6asm_media_format_block_multi_ch_pcm_v3(
- prtd->audio_client, runtime->rate,
- runtime->channels, !prtd->set_channel_map,
- prtd->channel_map, bits_per_sample,
- sample_word_size);
- else
- ret = q6asm_media_format_block_multi_ch_pcm_v4(
+ else
+ ret = q6asm_media_format_block_multi_ch_pcm_v4(
prtd->audio_client, runtime->rate,
runtime->channels, !prtd->set_channel_map,
prtd->channel_map, bits_per_sample,
sample_word_size, ASM_LITTLE_ENDIAN,
DEFAULT_QF);
- }
}
if (ret < 0)
pr_info("%s: CMD Format block failed\n", __func__);
@@ -525,19 +497,10 @@ static int msm_pcm_capture_prepare(struct snd_pcm_substream *substream)
pr_debug("%s Opening %d-ch PCM read stream, perf_mode %d\n",
__func__, params_channels(params),
prtd->audio_client->perf_mode);
- if (q6core_get_avs_version() == Q6_SUBSYS_AVS2_7) {
- ret = q6asm_open_read_v3(prtd->audio_client,
- FORMAT_LINEAR_PCM,
- bits_per_sample);
- } else if (q6core_get_avs_version() == Q6_SUBSYS_AVS2_8) {
- ret = q6asm_open_read_v4(prtd->audio_client,
- FORMAT_LINEAR_PCM,
- bits_per_sample, false);
- } else {
- ret = q6asm_open_read_with_retry(prtd->audio_client,
+
+ ret = q6asm_open_read_with_retry(prtd->audio_client,
FORMAT_LINEAR_PCM,
bits_per_sample, false);
- }
if (ret < 0) {
pr_err("%s: q6asm_open_read failed\n", __func__);
q6asm_audio_client_free(prtd->audio_client);
@@ -614,24 +577,15 @@ static int msm_pcm_capture_prepare(struct snd_pcm_substream *substream)
sample_word_size,
ASM_LITTLE_ENDIAN,
DEFAULT_QF);
- else {
- if (q6core_get_avs_version() == Q6_SUBSYS_AVS2_7)
- ret = q6asm_enc_cfg_blk_pcm_format_support_v3(
- prtd->audio_client,
- prtd->samp_rate,
- prtd->channel_mode,
- bits_per_sample,
- sample_word_size);
- else
- ret = q6asm_enc_cfg_blk_pcm_format_support_v4(
- prtd->audio_client,
- prtd->samp_rate,
- prtd->channel_mode,
- bits_per_sample,
- sample_word_size,
- ASM_LITTLE_ENDIAN,
- DEFAULT_QF);
- }
+ else
+ ret = q6asm_enc_cfg_blk_pcm_format_support_v4(
+ prtd->audio_client,
+ prtd->samp_rate,
+ prtd->channel_mode,
+ bits_per_sample,
+ sample_word_size,
+ ASM_LITTLE_ENDIAN,
+ DEFAULT_QF);
if (ret < 0)
pr_debug("%s: cmd cfg pcm was block failed", __func__);
diff --git a/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c b/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c
index ee8c42903c99..a923faf11c84 100644
--- a/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c
+++ b/sound/soc/msm/qdsp6v2/msm-pcm-routing-v2.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2019, 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
@@ -4622,6 +4622,9 @@ static const struct snd_kcontrol_new quaternary_mi2s_rx_mixer_controls[] = {
SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
+ SOC_SINGLE_EXT("MultiMedia21", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
+ MSM_FRONTEND_DAI_MULTIMEDIA21, 1, 0, msm_routing_get_audio_mixer,
+ msm_routing_put_audio_mixer),
SOC_SINGLE_EXT("MultiMedia26", MSM_BACKEND_DAI_QUATERNARY_MI2S_RX,
MSM_FRONTEND_DAI_MULTIMEDIA26, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
@@ -5657,6 +5660,9 @@ static const struct snd_kcontrol_new secondary_mi2s_rx_mixer_controls[] = {
SOC_SINGLE_EXT("MultiMedia19", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
MSM_FRONTEND_DAI_MULTIMEDIA19, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
+ SOC_SINGLE_EXT("MultiMedia21", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
+ MSM_FRONTEND_DAI_MULTIMEDIA21, 1, 0, msm_routing_get_audio_mixer,
+ msm_routing_put_audio_mixer),
SOC_SINGLE_EXT("MultiMedia26", MSM_BACKEND_DAI_SECONDARY_MI2S_RX,
MSM_FRONTEND_DAI_MULTIMEDIA26, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
@@ -8382,6 +8388,12 @@ static const struct snd_kcontrol_new mmul3_mixer_controls[] = {
SOC_SINGLE_EXT("QUAT_MI2S_TX_4", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX_4,
MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
+ SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
+ MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
+ msm_routing_put_audio_mixer),
+ SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
+ MSM_FRONTEND_DAI_MULTIMEDIA3, 1, 0, msm_routing_get_audio_mixer,
+ msm_routing_put_audio_mixer),
};
static const struct snd_kcontrol_new mmul4_mixer_controls[] = {
@@ -8613,6 +8625,12 @@ static const struct snd_kcontrol_new mmul5_mixer_controls[] = {
SOC_SINGLE_EXT("QUAT_MI2S_TX_4", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX_4,
MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
+ SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
+ MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
+ msm_routing_put_audio_mixer),
+ SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
+ MSM_FRONTEND_DAI_MULTIMEDIA5, 1, 0, msm_routing_get_audio_mixer,
+ msm_routing_put_audio_mixer),
};
static const struct snd_kcontrol_new mmul6_mixer_controls[] = {
@@ -9240,6 +9258,12 @@ static const struct snd_kcontrol_new mmul21_mixer_controls[] = {
SOC_SINGLE_EXT("QUAT_TDM_TX_3", MSM_BACKEND_DAI_QUAT_TDM_TX_3,
MSM_FRONTEND_DAI_MULTIMEDIA21, 1, 0, msm_routing_get_audio_mixer,
msm_routing_put_audio_mixer),
+ SOC_SINGLE_EXT("QUAT_MI2S_TX", MSM_BACKEND_DAI_QUATERNARY_MI2S_TX,
+ MSM_FRONTEND_DAI_MULTIMEDIA21, 1, 0, msm_routing_get_audio_mixer,
+ msm_routing_put_audio_mixer),
+ SOC_SINGLE_EXT("SEC_MI2S_TX", MSM_BACKEND_DAI_SECONDARY_MI2S_TX,
+ MSM_FRONTEND_DAI_MULTIMEDIA21, 1, 0, msm_routing_get_audio_mixer,
+ msm_routing_put_audio_mixer),
};
static const struct snd_kcontrol_new mmul27_mixer_controls[] = {
@@ -14973,6 +14997,7 @@ static const struct snd_soc_dapm_route intercon[] = {
{"QUAT_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
{"QUAT_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
{"QUAT_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
+ {"QUAT_MI2S_RX Audio Mixer", "MultiMedia21", "MM_DL21"},
{"QUAT_MI2S_RX Audio Mixer", "MultiMedia26", "MM_DL26"},
{"QUAT_MI2S_RX", NULL, "QUAT_MI2S_RX Audio Mixer"},
@@ -15008,6 +15033,7 @@ static const struct snd_soc_dapm_route intercon[] = {
{"SEC_MI2S_RX Audio Mixer", "MultiMedia14", "MM_DL14"},
{"SEC_MI2S_RX Audio Mixer", "MultiMedia15", "MM_DL15"},
{"SEC_MI2S_RX Audio Mixer", "MultiMedia16", "MM_DL16"},
+ {"SEC_MI2S_RX Audio Mixer", "MultiMedia21", "MM_DL21"},
{"SEC_MI2S_RX Audio Mixer", "MultiMedia26", "MM_DL26"},
{"SEC_MI2S_RX", NULL, "SEC_MI2S_RX Audio Mixer"},
@@ -15783,6 +15809,12 @@ static const struct snd_soc_dapm_route intercon[] = {
{"MultiMedia1 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
{"MultiMedia27 Mixer", "PRI_MI2S_TX", "PRI_MI2S_TX"},
{"MultiMedia2 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
+ {"MultiMedia3 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
+ {"MultiMedia5 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
+ {"MultiMedia21 Mixer", "SEC_MI2S_TX", "SEC_MI2S_TX"},
+ {"MultiMedia3 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
+ {"MultiMedia5 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
+ {"MultiMedia21 Mixer", "QUAT_MI2S_TX", "QUAT_MI2S_TX"},
{"MultiMedia6 Mixer", "SLIM_0_TX", "SLIMBUS_0_TX"},
{"MultiMedia6 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
{"MultiMedia3 Mixer", "TERT_MI2S_TX", "TERT_MI2S_TX"},
diff --git a/sound/soc/msm/qdsp6v2/q6afe.c b/sound/soc/msm/qdsp6v2/q6afe.c
index c7aecd5758d4..752b662da4ea 100644
--- a/sound/soc/msm/qdsp6v2/q6afe.c
+++ b/sound/soc/msm/qdsp6v2/q6afe.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2019, 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
@@ -482,6 +482,15 @@ static int32_t afe_lpass_resources_callback(struct apr_client_data *data)
return 0;
}
+static bool afe_token_is_valid(uint32_t token)
+{
+ if (token >= AFE_MAX_PORTS) {
+ pr_err("%s: token %d is invalid.\n", __func__, token);
+ return false;
+ }
+ return true;
+}
+
static int32_t afe_callback(struct apr_client_data *data, void *priv)
{
if (!data) {
@@ -574,7 +583,10 @@ static int32_t afe_callback(struct apr_client_data *data, void *priv)
ret = afe_lpass_resources_callback(data);
atomic_set(&this_afe.state, 0);
- wake_up(&this_afe.wait[data->token]);
+ if (afe_token_is_valid(data->token))
+ wake_up(&this_afe.wait[data->token]);
+ else
+ return -EINVAL;
if (!ret) {
return ret;
}
@@ -610,7 +622,10 @@ static int32_t afe_callback(struct apr_client_data *data, void *priv)
case AFE_SVC_CMD_SET_PARAM_V2:
case AFE_CMD_REQUEST_LPASS_RESOURCES:
atomic_set(&this_afe.state, 0);
- wake_up(&this_afe.wait[data->token]);
+ if (afe_token_is_valid(data->token))
+ wake_up(&this_afe.wait[data->token]);
+ else
+ return -EINVAL;
break;
case AFE_SERVICE_CMD_REGISTER_RT_PORT_DRIVER:
break;
@@ -622,7 +637,10 @@ static int32_t afe_callback(struct apr_client_data *data, void *priv)
break;
case AFE_CMD_ADD_TOPOLOGIES:
atomic_set(&this_afe.state, 0);
- wake_up(&this_afe.wait[data->token]);
+ if (afe_token_is_valid(data->token))
+ wake_up(&this_afe.wait[data->token]);
+ else
+ return -EINVAL;
pr_debug("%s: AFE_CMD_ADD_TOPOLOGIES cmd 0x%x\n",
__func__, payload[1]);
break;
@@ -678,7 +696,10 @@ static int32_t afe_callback(struct apr_client_data *data, void *priv)
else
this_afe.mmap_handle = payload[0];
atomic_set(&this_afe.state, 0);
- wake_up(&this_afe.wait[data->token]);
+ if (afe_token_is_valid(data->token))
+ wake_up(&this_afe.wait[data->token]);
+ else
+ return -EINVAL;
} else if (data->opcode == AFE_EVENT_RT_PROXY_PORT_STATUS) {
port_id = (uint16_t)(0x0000FFFF & payload[0]);
}
diff --git a/sound/soc/msm/qdsp6v2/q6voice.c b/sound/soc/msm/qdsp6v2/q6voice.c
index 914c63998747..eb635243dd5a 100644
--- a/sound/soc/msm/qdsp6v2/q6voice.c
+++ b/sound/soc/msm/qdsp6v2/q6voice.c
@@ -6793,6 +6793,11 @@ static int32_t qdsp_cvs_callback(struct apr_client_data *data, void *priv)
cvs_voc_pkt = v->shmem_info.sh_buf.buf[1].data;
if (cvs_voc_pkt != NULL && common.mvs_info.ul_cb != NULL) {
+ if (v->shmem_info.sh_buf.buf[1].size <
+ ((3 * sizeof(uint32_t)) + cvs_voc_pkt[2])) {
+ pr_err("%s: invalid voc pkt size\n", __func__);
+ return -EINVAL;
+ }
/* cvs_voc_pkt[0] contains tx timestamp */
common.mvs_info.ul_cb((uint8_t *)&cvs_voc_pkt[3],
cvs_voc_pkt[2],