Merge "[BugFix][API-1444]disable wifi Fw twt to fix Fw Trap 4" into GSW3.0-No-Connman
diff --git a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/Makefile b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/Makefile
index ea2fdf2..a99cf49 100755
--- a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/Makefile
+++ b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/Makefile
@@ -51,6 +51,9 @@
 endif
 DHDCFLAGS += $(call cc-disable-warning, date-time)
 DHDCFLAGS += $(call cc-disable-warning, stringop-overflow)
+# ifx apply patch to disable twt   20231116
+DHDCFLAGS += -DCUSTOM_CONTROL_TWT_DISABLE
+# ifx apply patch to disable twt   20231116 end
 
 #################
 # Common feature
diff --git a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd.h b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd.h
index 3d14f18..cc9bb24 100755
--- a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd.h
+++ b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd.h
@@ -3498,6 +3498,11 @@
 #ifdef CUSTOM_CONTROL_OCE_DISABLE
 extern int dhd_control_oce_enab(dhd_pub_t * dhd, uint8 oce_enab);
 #endif /* CUSTOM_CONTROL_OCE_DISABLE */
+// apply ifx patch to disable twt 20231116 qs.xiong
+#ifdef CUSTOM_CONTROL_TWT_DISABLE
+int dhd_control_twt_enab(dhd_pub_t * dhd, uint8 twt_enab);
+#endif /* CUSTOM_CONTROL_TWT_DISABLE */
+// apply ifx patch to disable twt 20231116 qs.xiong end
 
 #if defined(BCMSDIO)
 void dhd_set_role(dhd_pub_t *dhdp, int role, int bssidx);
diff --git a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_common.c b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_common.c
index d56ea16..3019956 100755
--- a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_common.c
+++ b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_common.c
@@ -7993,3 +7993,37 @@
 	return ret;
 }
 #endif /* CUSTOM_CONTROL_OCE_DISABLE */
+
+// apply ifx patch to disable twt 20231116
+#ifdef CUSTOM_CONTROL_TWT_DISABLE
+int
+dhd_control_twt_enab(dhd_pub_t * dhd, uint8 twt_enab)
+{
+	int ret = BCME_OK;
+	bcm_xtlv_t *pxtlv = NULL;
+	uint8 mybuf[DHD_IOVAR_BUF_SIZE];
+	uint16 mybuf_len = sizeof(mybuf);
+	pxtlv = (bcm_xtlv_t *)mybuf;
+
+	ret = bcm_pack_xtlv_entry((uint8**)&pxtlv, &mybuf_len, WL_TWT_CMD_ENAB, sizeof(twt_enab),
+			&twt_enab, BCM_XTLV_OPTION_ALIGN32);
+
+	if (ret != BCME_OK) {
+		ret = -EINVAL;
+		DHD_ERROR(("%s failed to pack twt enab, err: %s\n", __FUNCTION__, bcmerrorstr(ret)));
+		return ret;
+	}
+
+	ret = dhd_iovar(dhd, 0, "twt", (char *)&mybuf, sizeof(mybuf), NULL, 0, TRUE);
+	if (ret < 0) {
+		DHD_ERROR(("%s twt_enab (%d) set failed, err: %s\n",
+			__FUNCTION__, twt_enab, bcmerrorstr(ret)));
+	} else {
+		DHD_ERROR(("%s twt_enab (%d) set successed\n", __FUNCTION__, twt_enab));
+	}
+
+	return ret;
+}
+#endif /* CUSTOM_CONTROL_TWT_DISABLE */
+// apply ifx patch to disable twt 20231116 qs.xiong 20231116
+
diff --git a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_linux.c b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_linux.c
index 1d0bdc4..25d9476 100755
--- a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_linux.c
+++ b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_linux.c
@@ -11231,6 +11231,11 @@
 #ifdef CUSTOM_CONTROL_OCE_DISABLE
 	dhd_control_oce_enab(dhd, FALSE);
 #endif /* CUSTOM_CONTROL_OCE_DISABLE */
+// apply ifx patch to disable twt 20231116 qs.xiong
+#ifdef CUSTOM_CONTROL_TWT_DISABLE
+	dhd_control_twt_enab(dhd, FALSE);
+#endif /* CUSTOM_CONTROL_TWT_DISABLE */
+// apply ifx patch to disable twt 20231116 qs.xiong end
 
 #ifdef CUSTOM_PSPRETEND_THR
 	/* Turn off MPC in AP mode */