From bedbef8ad3e75a304af6361af235302bcc61d06b Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Tue, 14 May 2024 06:39:01 +0000
Subject: [PATCH] 修改内核路径

---
 kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c |  450 +++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 285 insertions(+), 165 deletions(-)

diff --git a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c
old mode 100644
new mode 100755
index 4f86b66..6377495
--- a/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c
+++ b/kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c
@@ -65,6 +65,9 @@
 #include <asm/uaccess.h>
 #include <asm/unaligned.h>
 #include <dhd_linux_priv.h>
+#if defined(CUSTOMER_HW_ROCKCHIP) && defined(BCMPCIE)
+#include <rk_dhd_pcie_linux.h>
+#endif /* CUSTOMER_HW_ROCKCHIP && BCMPCIE */
 
 #include <epivers.h>
 #include <bcmutils.h>
@@ -367,6 +370,7 @@
 static void dhd_hang_process(struct work_struct *work_data);
 #endif /* OEM_ANDROID */
 MODULE_LICENSE("GPL and additional rights");
+MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);
 
 #if defined(MULTIPLE_SUPPLICANT)
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25))
@@ -1177,9 +1181,6 @@
 			dhd_conf_set_suspend_resume(dhd, suspend);
 		DHD_OS_WAKE_LOCK_RESTORE(dhd);
 	} else {
-#ifdef BCMDBUS
-		if (dhd->busstate == DHD_BUS_DATA) {
-#endif
 		if (suspend_mode == PM_NOTIFIER || suspend_mode == SUSPEND_MODE_2)
 			dhd_conf_set_suspend_resume(dhd, suspend);
 #if defined(SUPPORT_P2P_GO_PS) && defined(PROP_TXSTATUS)
@@ -1187,11 +1188,6 @@
 #endif /* defined(SUPPORT_P2P_GO_PS) && defined(PROP_TXSTATUS) */
 		if (suspend_mode == PM_NOTIFIER)
 			dhd_suspend_resume_helper(dhdinfo, suspend, 0);
-#ifdef BCMDBUS
-		} else {
-			printf("%s: skip resume since bus suspeneded\n", __FUNCTION__);
-		}
-#endif
 	}
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)) && (LINUX_VERSION_CODE <= \
@@ -4764,11 +4760,6 @@
 static void
 __dhd_txflowcontrol(dhd_pub_t *dhdp, struct net_device *net, bool state)
 {
-
-	if (net->reg_state != NETREG_REGISTERED) {
-		return;
-	}
-
 	if (state == ON) {
 		if (!netif_queue_stopped(net)) {
 			DHD_INFO(("%s: Stop Netif Queue\n", __FUNCTION__));
@@ -9086,14 +9077,14 @@
 {
 	struct file *fp;
 	const char *clm = VENDOR_PATH CONFIG_BCMDHD_CLM_PATH;
+	fp = filp_open(clm, O_RDONLY, 0);
 
-	fp = dhd_filp_open(clm, O_RDONLY, 0);
-	if (IS_ERR(fp) || (fp == NULL)) {
+	if (IS_ERR(fp)) {
 		DHD_ERROR(("%s: filp_open(%s) failed(%d) schedule wl_accel_work\n",
 				__FUNCTION__, clm, (int)IS_ERR(fp)));
 		return FALSE;
 	}
-	dhd_filp_close(fp, NULL);
+	filp_close(fp, NULL);
 
 	return TRUE;
 }
@@ -10588,7 +10579,7 @@
 	if (!fp || !buf || buflen == 0)
 		return -1;
 
-	if (dhd_vfs_write((struct file *)fp, buf, buflen, &wr_posn) < 0)
+	if (vfs_write((struct file *)fp, buf, buflen, &wr_posn) < 0)
 		return -1;
 
 	*posn = wr_posn;
@@ -10604,7 +10595,7 @@
 	if (!file || !buf)
 		return -1;
 
-	return dhd_vfs_read(filep, buf, size, &filep->f_pos);
+	return vfs_read(filep, buf, size, &filep->f_pos);
 }
 
 int
@@ -10620,6 +10611,135 @@
 	return 0;
 }
 
+static int
+dhd_init_logstrs_array(osl_t *osh, dhd_event_log_t *temp)
+{
+	struct file *filep = NULL;
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
+	struct kstat stat;
+	mm_segment_t fs;
+	int error = 0;
+#endif
+	char *raw_fmts =  NULL;
+	int logstrs_size = 0;
+
+	if (control_logtrace != LOGTRACE_PARSED_FMT) {
+		DHD_ERROR_NO_HW4(("%s : turned off logstr parsing\n", __FUNCTION__));
+		return BCME_ERROR;
+	}
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
+	fs = get_fs();
+	set_fs(KERNEL_DS);
+#endif
+
+	filep = filp_open(logstrs_path, O_RDONLY, 0);
+
+	if (IS_ERR(filep)) {
+		DHD_ERROR_NO_HW4(("%s: Failed to open the file %s \n", __FUNCTION__, logstrs_path));
+		goto fail;
+	}
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
+	error = vfs_stat(logstrs_path, &stat);
+	if (error) {
+		DHD_ERROR_NO_HW4(("%s: Failed to stat file %s \n", __FUNCTION__, logstrs_path));
+		goto fail;
+	}
+	logstrs_size = (int) stat.size;
+#else
+	logstrs_size = dhd_os_get_image_size(filep);
+#endif
+
+	if (logstrs_size == 0) {
+		DHD_ERROR(("%s: return as logstrs_size is 0\n", __FUNCTION__));
+		goto fail1;
+	}
+
+	if (temp->raw_fmts != NULL) {
+		raw_fmts = temp->raw_fmts;	/* reuse already malloced raw_fmts */
+	} else {
+		raw_fmts = MALLOC(osh, logstrs_size);
+		if (raw_fmts == NULL) {
+			DHD_ERROR(("%s: Failed to allocate memory \n", __FUNCTION__));
+			goto fail;
+		}
+	}
+
+	if (vfs_read(filep, raw_fmts, logstrs_size, &filep->f_pos) !=	logstrs_size) {
+		DHD_ERROR_NO_HW4(("%s: Failed to read file %s\n", __FUNCTION__, logstrs_path));
+		goto fail;
+	}
+
+	if (dhd_parse_logstrs_file(osh, raw_fmts, logstrs_size, temp)
+				== BCME_OK) {
+		filp_close(filep, NULL);
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
+		set_fs(fs);
+#endif
+		return BCME_OK;
+	}
+
+fail:
+	if (raw_fmts) {
+		MFREE(osh, raw_fmts, logstrs_size);
+	}
+	if (temp->fmts != NULL) {
+		MFREE(osh, temp->fmts, temp->num_fmts * sizeof(char *));
+	}
+
+fail1:
+	if (!IS_ERR(filep))
+		filp_close(filep, NULL);
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
+	set_fs(fs);
+#endif
+	temp->fmts = NULL;
+	temp->raw_fmts = NULL;
+
+	return BCME_ERROR;
+}
+
+static int
+dhd_read_map(osl_t *osh, char *fname, uint32 *ramstart, uint32 *rodata_start,
+		uint32 *rodata_end)
+{
+	struct file *filep = NULL;
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
+	mm_segment_t fs;
+#endif
+	int err = BCME_ERROR;
+
+	if (fname == NULL) {
+		DHD_ERROR(("%s: ERROR fname is NULL \n", __FUNCTION__));
+		return BCME_ERROR;
+	}
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
+	fs = get_fs();
+	set_fs(KERNEL_DS);
+#endif
+
+	filep = filp_open(fname, O_RDONLY, 0);
+	if (IS_ERR(filep)) {
+		DHD_ERROR_NO_HW4(("%s: Failed to open %s \n",  __FUNCTION__, fname));
+		goto fail;
+	}
+
+	if ((err = dhd_parse_map_file(osh, filep, ramstart,
+			rodata_start, rodata_end)) < 0)
+		goto fail;
+
+fail:
+	if (!IS_ERR(filep))
+		filp_close(filep, NULL);
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
+	set_fs(fs);
+#endif
+
+	return err;
+}
 #ifdef DHD_COREDUMP
 #define PC_FOUND_BIT 0x01
 #define LR_FOUND_BIT 0x02
@@ -10679,8 +10799,8 @@
 	set_fs(KERNEL_DS);
 #endif
 
-	filep = dhd_filp_open(fname, O_RDONLY, 0);
-	if (IS_ERR(filep) || (filep == NULL)) {
+	filep = filp_open(fname, O_RDONLY, 0);
+	if (IS_ERR(filep)) {
 		DHD_ERROR(("%s: Failed to open %s \n",  __FUNCTION__, fname));
 		goto fail;
 	}
@@ -10842,7 +10962,7 @@
 	}
 #else
 	if (!IS_ERR(filep))
-		dhd_filp_close(filep, NULL);
+		filp_close(filep, NULL);
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
 	set_fs(fs);
@@ -11217,8 +11337,8 @@
 	set_fs(KERNEL_DS);
 #endif
 
-	filep = dhd_filp_open(str_file, O_RDONLY, 0);
-	if (IS_ERR(filep) || (filep == NULL)) {
+	filep = filp_open(str_file, O_RDONLY, 0);
+	if (IS_ERR(filep)) {
 		DHD_ERROR(("%s: Failed to open the file %s \n",  __FUNCTION__, str_file));
 		goto fail;
 	}
@@ -11255,7 +11375,7 @@
 		}
 	}
 
-	error = dhd_vfs_read(filep, raw_fmts, logstrs_size, (&filep->f_pos));
+	error = vfs_read(filep, raw_fmts, logstrs_size, (&filep->f_pos));
 	if (error != logstrs_size) {
 		DHD_ERROR(("%s: %s read failed %d \n", __FUNCTION__, str_file, error));
 		goto fail;
@@ -11273,7 +11393,7 @@
 		temp->rom_rodata_end = rodata_end;
 	}
 
-	dhd_filp_close(filep, NULL);
+	filp_close(filep, NULL);
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
 	set_fs(fs);
 #endif
@@ -11287,7 +11407,7 @@
 
 fail1:
 	if (!IS_ERR(filep))
-		dhd_filp_close(filep, NULL);
+		filp_close(filep, NULL);
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
 	set_fs(fs);
@@ -11697,12 +11817,6 @@
 		goto fail;
 	}
 #endif /* WL_EVENT */
-#ifdef WL_TIMER
-	if (wl_timer_attach(net) != 0) {
-		DHD_ERROR(("wl_ext_timer_attach failed\n"));
-		goto fail;
-	}
-#endif /* WL_TIMER */
 #ifdef WL_ESCAN
 	/* Attach and link in the escan */
 	if (wl_escan_attach(net) != 0) {
@@ -11757,11 +11871,7 @@
 	dhd_os_start_logging(&dhd->pub, BT_LOG_RING_NAME, 3, 0, 0, 0);
 #endif /* !OEM_ANDROID && BTLOG */
 #ifdef DBG_PKT_MON
-	dhd->pub.dbg->pkt_mon_lock = osl_mutex_lock_init(dhd->pub.osh);
-	if (!dhd->pub.dbg->pkt_mon_lock) {
-		DHD_ERROR(("%s: pkt_mon_lock init failed !\n", __FUNCTION__));
-		goto fail;
-	}
+	dhd->pub.dbg->pkt_mon_lock = osl_spin_lock_init(dhd->pub.osh);
 #ifdef DBG_PKT_MON_INIT_DEFAULT
 	dhd_os_dbg_attach_pkt_monitor(&dhd->pub);
 #endif /* DBG_PKT_MON_INIT_DEFAULT */
@@ -11869,6 +11979,13 @@
 	}
 #endif /* DHD_PCIE_RUNTIMEPM */
 
+#ifdef SHOW_LOGTRACE
+	skb_queue_head_init(&dhd->evt_trace_queue);
+
+	/* Create ring proc entries */
+	dhd_dbg_ring_proc_create(&dhd->pub);
+#endif /* SHOW_LOGTRACE */
+
 #ifdef BTLOG
 	skb_queue_head_init(&dhd->bt_log_queue);
 #endif /* BTLOG */
@@ -11900,13 +12017,6 @@
 		}
 	}
 #endif /* !BCMDBUS */
-
-#ifdef SHOW_LOGTRACE
-	skb_queue_head_init(&dhd->evt_trace_queue);
-
-	/* Create ring proc entries */
-	dhd_dbg_ring_proc_create(&dhd->pub);
-#endif /* SHOW_LOGTRACE */
 
 	dhd_state |= DHD_ATTACH_STATE_THREADS_CREATED;
 
@@ -12791,6 +12901,11 @@
 	dhd_bus_l1ss_enable_rc_ep(dhdp->bus, TRUE);
 #endif /* BT_OVER_PCIE */
 
+#if defined(CUSTOMER_HW_ROCKCHIP) && defined(BCMPCIE)
+	if (IS_ENABLED(CONFIG_PCIEASPM_ROCKCHIP_WIFI_EXTENSION))
+		rk_dhd_bus_l1ss_enable_rc_ep(dhdp->bus, TRUE);
+#endif /* CUSTOMER_HW_ROCKCHIP && BCMPCIE */
+
 #if defined(CONFIG_ARCH_EXYNOS) && defined(BCMPCIE)
 #if !defined(CONFIG_SOC_EXYNOS8890) && !defined(SUPPORT_EXYNOS7420)
 	/* XXX: JIRA SWWLAN-139454: Added L1ss enable
@@ -13347,7 +13462,7 @@
 
 	old_fs = get_fs();
 	set_fs(get_ds());
-	if ((ret = dhd_vfs_stat(config_path, &stat))) {
+	if ((ret = vfs_stat(config_path, &stat))) {
 		set_fs(old_fs);
 		printk(KERN_ERR "%s: Failed to get information (%d)\n",
 			config_path, ret);
@@ -13810,8 +13925,12 @@
 	else {
 		bcmstrtok(&ptr, "\n", 0);
 		/* Print fw version info */
+		DHD_ERROR(("Firmware version = %s\n", buf));
 		strncpy(fw_version, buf, FW_VER_STR_LEN);
 		fw_version[FW_VER_STR_LEN-1] = '\0';
+#if defined(BCMSDIO) || defined(BCMPCIE)
+		dhd_set_version_info(dhd, buf);
+#endif /* BCMSDIO || BCMPCIE */
 	}
 
 	/* query for 'wlc_ver' to get version info from firmware */
@@ -13826,12 +13945,14 @@
 		dhd->wlc_ver_major = wlc_ver.wlc_ver_major;
 		dhd->wlc_ver_minor = wlc_ver.wlc_ver_minor;
 	}
+#ifdef BOARD_HIKEY
 	/* Set op_mode as MFG_MODE if WLTEST is present in "wl ver" */
 	if (strstr(fw_version, "WLTEST") != NULL) {
 		DHD_ERROR(("%s: wl ver has WLTEST, setting op_mode as DHD_FLAG_MFG_MODE\n",
 			__FUNCTION__));
 		op_mode = DHD_FLAG_MFG_MODE;
 	}
+#endif /* BOARD_HIKEY */
 	/* get a capabilities from firmware */
 	ret = dhd_get_fw_capabilities(dhd);
 
@@ -13988,7 +14109,6 @@
 
 	DHD_ERROR(("Firmware up: op_mode=0x%04x, MAC="MACDBG"\n",
 		dhd->op_mode, MAC2STRDBG(dhd->mac.octet)));
-	dhd_set_version_info(dhd, fw_version);
 #if defined(DHD_BLOB_EXISTENCE_CHECK)
 	if (!dhd->is_blob)
 #endif /* DHD_BLOB_EXISTENCE_CHECK */
@@ -14181,10 +14301,6 @@
 	dhd_update_flow_prio_map(dhd, DHD_FLOW_PRIO_LLR_MAP);
 #endif /* defined(BCMPCIE) && defined(EAPOL_PKT_PRIO) */
 
-#if defined(BCMSDIO) && defined(DHD_LOSSLESS_ROAMING)
-	dhd_update_sdio_data_prio_map(dhd);
-#endif /* BCMSDIO && DHD_LOSSLESS_ROAMING */
-
 #ifdef ARP_OFFLOAD_SUPPORT
 	DHD_ERROR(("arp_enable:%d arp_ol:%d\n",
 		dhd->arpoe_enable, dhd->arpol_configured));
@@ -14196,64 +14312,60 @@
 	 */
 #ifdef PKT_FILTER_SUPPORT
 	/* Setup default defintions for pktfilter , enable in suspend */
-	if (dhd_master_mode) {
-		dhd->pktfilter_count = 6;
-		dhd->pktfilter[DHD_BROADCAST_FILTER_NUM] = NULL;
-		if (!FW_SUPPORTED(dhd, pf6)) {
-			dhd->pktfilter[DHD_MULTICAST4_FILTER_NUM] = NULL;
-			dhd->pktfilter[DHD_MULTICAST6_FILTER_NUM] = NULL;
-		} else {
-			/* Immediately pkt filter TYPE 6 Discard IPv4/IPv6 Multicast Packet */
-			dhd->pktfilter[DHD_MULTICAST4_FILTER_NUM] = DISCARD_IPV4_MCAST;
-			dhd->pktfilter[DHD_MULTICAST6_FILTER_NUM] = DISCARD_IPV6_MCAST;
-		}
-		/* apply APP pktfilter */
-		dhd->pktfilter[DHD_ARP_FILTER_NUM] = "105 0 0 12 0xFFFF 0x0806";
+	dhd->pktfilter_count = 6;
+	dhd->pktfilter[DHD_BROADCAST_FILTER_NUM] = NULL;
+	if (!FW_SUPPORTED(dhd, pf6)) {
+		dhd->pktfilter[DHD_MULTICAST4_FILTER_NUM] = NULL;
+		dhd->pktfilter[DHD_MULTICAST6_FILTER_NUM] = NULL;
+	} else {
+		/* Immediately pkt filter TYPE 6 Discard IPv4/IPv6 Multicast Packet */
+		dhd->pktfilter[DHD_MULTICAST4_FILTER_NUM] = DISCARD_IPV4_MCAST;
+		dhd->pktfilter[DHD_MULTICAST6_FILTER_NUM] = DISCARD_IPV6_MCAST;
+	}
+	/* apply APP pktfilter */
+	dhd->pktfilter[DHD_ARP_FILTER_NUM] = "105 0 0 12 0xFFFF 0x0806";
 
 #ifdef BLOCK_IPV6_PACKET
-		/* Setup filter to allow only IPv4 unicast frames */
-		dhd->pktfilter[DHD_UNICAST_FILTER_NUM] = "100 0 0 0 "
-			HEX_PREF_STR UNI_FILTER_STR ZERO_ADDR_STR ETHER_TYPE_STR IPV6_FILTER_STR
-			" "
-			HEX_PREF_STR ZERO_ADDR_STR ZERO_ADDR_STR ETHER_TYPE_STR ZERO_TYPE_STR;
+	/* Setup filter to allow only IPv4 unicast frames */
+	dhd->pktfilter[DHD_UNICAST_FILTER_NUM] = "100 0 0 0 "
+		HEX_PREF_STR UNI_FILTER_STR ZERO_ADDR_STR ETHER_TYPE_STR IPV6_FILTER_STR
+		" "
+		HEX_PREF_STR ZERO_ADDR_STR ZERO_ADDR_STR ETHER_TYPE_STR ZERO_TYPE_STR;
 #else
-		/* Setup filter to allow only unicast */
-		dhd->pktfilter[DHD_UNICAST_FILTER_NUM] = "100 0 0 0 0x01 0x00";
+	/* Setup filter to allow only unicast */
+	dhd->pktfilter[DHD_UNICAST_FILTER_NUM] = "100 0 0 0 0x01 0x00";
 #endif /* BLOCK_IPV6_PACKET */
 
 #ifdef PASS_IPV4_SUSPEND
-		/* XXX customer want to get IPv4 multicast packets */
-		dhd->pktfilter[DHD_MDNS_FILTER_NUM] = "104 0 0 0 0xFFFFFF 0x01005E";
+	/* XXX customer want to get IPv4 multicast packets */
+	dhd->pktfilter[DHD_MDNS_FILTER_NUM] = "104 0 0 0 0xFFFFFF 0x01005E";
 #else
-		/* Add filter to pass multicastDNS packet and NOT filter out as Broadcast */
-		dhd->pktfilter[DHD_MDNS_FILTER_NUM] = NULL;
+	/* Add filter to pass multicastDNS packet and NOT filter out as Broadcast */
+	dhd->pktfilter[DHD_MDNS_FILTER_NUM] = NULL;
 #endif /* PASS_IPV4_SUSPEND */
-		if (FW_SUPPORTED(dhd, pf6)) {
-			/* Immediately pkt filter TYPE 6 Dicard Broadcast IP packet */
-			dhd->pktfilter[DHD_IP4BCAST_DROP_FILTER_NUM] = DISCARD_IPV4_BCAST;
-			/* Immediately pkt filter TYPE 6 Dicard Cisco STP packet */
-			dhd->pktfilter[DHD_LLC_STP_DROP_FILTER_NUM] = DISCARD_LLC_STP;
-			/* Immediately pkt filter TYPE 6 Dicard Cisco XID protocol */
-			dhd->pktfilter[DHD_LLC_XID_DROP_FILTER_NUM] = DISCARD_LLC_XID;
-			/* Immediately pkt filter TYPE 6 Dicard NETBIOS packet(port 137) */
-			dhd->pktfilter[DHD_UDPNETBIOS_DROP_FILTER_NUM] = DISCARD_UDPNETBIOS;
-			dhd->pktfilter_count = 11;
-		}
+	if (FW_SUPPORTED(dhd, pf6)) {
+		/* Immediately pkt filter TYPE 6 Dicard Broadcast IP packet */
+		dhd->pktfilter[DHD_IP4BCAST_DROP_FILTER_NUM] = DISCARD_IPV4_BCAST;
+		/* Immediately pkt filter TYPE 6 Dicard Cisco STP packet */
+		dhd->pktfilter[DHD_LLC_STP_DROP_FILTER_NUM] = DISCARD_LLC_STP;
+		/* Immediately pkt filter TYPE 6 Dicard Cisco XID protocol */
+		dhd->pktfilter[DHD_LLC_XID_DROP_FILTER_NUM] = DISCARD_LLC_XID;
+		/* Immediately pkt filter TYPE 6 Dicard NETBIOS packet(port 137) */
+		dhd->pktfilter[DHD_UDPNETBIOS_DROP_FILTER_NUM] = DISCARD_UDPNETBIOS;
+		dhd->pktfilter_count = 11;
+	}
 
 #ifdef GAN_LITE_NAT_KEEPALIVE_FILTER
-		dhd->pktfilter_count = 4;
-		/* Setup filter to block broadcast and NAT Keepalive packets */
-		/* discard all broadcast packets */
-		dhd->pktfilter[DHD_UNICAST_FILTER_NUM] = "100 0 0 0 0xffffff 0xffffff";
-		/* discard NAT Keepalive packets */
-		dhd->pktfilter[DHD_BROADCAST_FILTER_NUM] = "102 0 0 36 0xffffffff 0x11940009";
-		/* discard NAT Keepalive packets */
-		dhd->pktfilter[DHD_MULTICAST4_FILTER_NUM] = "104 0 0 38 0xffffffff 0x11940009";
-		dhd->pktfilter[DHD_MULTICAST6_FILTER_NUM] = NULL;
+	dhd->pktfilter_count = 4;
+	/* Setup filter to block broadcast and NAT Keepalive packets */
+	/* discard all broadcast packets */
+	dhd->pktfilter[DHD_UNICAST_FILTER_NUM] = "100 0 0 0 0xffffff 0xffffff";
+	/* discard NAT Keepalive packets */
+	dhd->pktfilter[DHD_BROADCAST_FILTER_NUM] = "102 0 0 36 0xffffffff 0x11940009";
+	/* discard NAT Keepalive packets */
+	dhd->pktfilter[DHD_MULTICAST4_FILTER_NUM] = "104 0 0 38 0xffffffff 0x11940009";
+	dhd->pktfilter[DHD_MULTICAST6_FILTER_NUM] = NULL;
 #endif /* GAN_LITE_NAT_KEEPALIVE_FILTER */
-	} else
-		dhd_conf_discard_pkt_filter(dhd);
-	dhd_conf_add_pkt_filter(dhd);
 
 #if defined(SOFTAP)
 	if (ap_fw_loaded) {
@@ -14495,7 +14607,6 @@
 	dhd_set_bandlock(dhd);
 
 done:
-	dhd_conf_postinit_ioctls(dhd);
 	if (iov_buf) {
 		MFREE(dhd->osh, iov_buf, WLC_IOCTL_SMLEN);
 	}
@@ -14764,12 +14875,14 @@
 		fw_version[FW_VER_STR_LEN-1] = '\0';
 	}
 
+#ifdef BOARD_HIKEY
 	/* Set op_mode as MFG_MODE if WLTEST is present in "wl ver" */
 	if (strstr(fw_version, "WLTEST") != NULL) {
 		DHD_ERROR(("%s: wl ver has WLTEST, setting op_mode as DHD_FLAG_MFG_MODE\n",
 			__FUNCTION__));
 		op_mode = DHD_FLAG_MFG_MODE;
 	}
+#endif /* BOARD_HIKEY */
 
 	if ((!op_mode && dhd_get_fw_mode(dhd->info) == DHD_FLAG_MFG_MODE) ||
 		(op_mode == DHD_FLAG_MFG_MODE)) {
@@ -15325,7 +15438,7 @@
 	}
 
 #else /* OEM_ANDROID */
-	if ((ret = dhd_apply_default_clm(dhd, dhd->clm_path)) < 0) {
+	if ((ret = dhd_apply_default_clm(dhd, clm_path)) < 0) {
 		DHD_ERROR(("%s: CLM set failed. Abort initialization.\n", __FUNCTION__));
 		goto done;
 	}
@@ -15717,10 +15830,6 @@
 	dhd_update_flow_prio_map(dhd, DHD_FLOW_PRIO_LLR_MAP);
 #endif /* defined(BCMPCIE) && defined(EAPOL_PKT_PRIO) */
 
-#if defined(BCMSDIO) && defined(DHD_LOSSLESS_ROAMING)
-	dhd_update_sdio_data_prio_map(dhd);
-#endif /* BCMSDIO && DHD_LOSSLESS_ROAMING */
-
 #ifdef RSSI_MONITOR_SUPPORT
 	setbit(mask, WLC_E_RSSI_LQM);
 #endif /* RSSI_MONITOR_SUPPORT */
@@ -15758,9 +15867,6 @@
 	setbit(mask, WLC_E_DELTS_IND);
 #endif /* WL_BCNRECV */
 	setbit(mask, WLC_E_COUNTRY_CODE_CHANGED);
-#if defined(WL_TWT) || defined(WL_TWT_HAL_IF)
-	setbit(mask, WLC_E_TWT);
-#endif /* WL_TWT || WL_TWT_HAL_IF */
 
 	/* Write updated Event mask */
 	eventmask_msg->ver = EVENTMSGS_VER;
@@ -17265,9 +17371,6 @@
 #ifdef WL_ESCAN
 	wl_escan_detach(dev);
 #endif /* WL_ESCAN */
-#ifdef WL_TIMER
-	wl_timer_dettach(dhdp);
-#endif /* WL_TIMER */
 #ifdef WL_EVENT
 	wl_ext_event_dettach(dhdp);
 #endif /* WL_EVENT */
@@ -17455,7 +17558,7 @@
 	if (dhdp->dbg) {
 #ifdef DBG_PKT_MON
 		dhd_os_dbg_detach_pkt_monitor(dhdp);
-		osl_mutex_lock_deinit(dhd->pub.osh, dhd->pub.dbg->pkt_mon_lock);
+		osl_spin_lock_deinit(dhd->pub.osh, dhd->pub.dbg->pkt_mon_lock);
 #endif /* DBG_PKT_MON */
 	}
 #endif /* DEBUGABILITY */
@@ -18441,14 +18544,14 @@
 	struct file *fp;
 	int size;
 
-	fp = dhd_filp_open(filename, O_RDONLY, 0);
+	fp = filp_open(filename, O_RDONLY, 0);
 	/*
-	 * 2.6.11 (FC4) supports dhd_filp_open() but later revs don't?
+	 * 2.6.11 (FC4) supports filp_open() but later revs don't?
 	 * Alternative:
 	 * fp = open_namei(AT_FDCWD, filename, O_RD, 0);
 	 * ???
 	 */
-	 if (IS_ERR(fp) || (fp == NULL)) {
+	 if (IS_ERR(fp)) {
 		 fp = NULL;
 		 goto err;
 	 }
@@ -18459,7 +18562,7 @@
 		 goto err;
 	 }
 
-	 size = dhd_i_size_read(file_inode(fp));
+	 size = i_size_read(file_inode(fp));
 	 if (size <= 0) {
 		 DHD_ERROR(("%s: %s file size invalid %d\n", __FUNCTION__, filename, size));
 		 fp = NULL;
@@ -18483,8 +18586,8 @@
 		return 0;
 	}
 
-	size = dhd_i_size_read(file_inode(fp));
-	rdlen = dhd_kernel_read_compat(fp, fp->f_pos, buf, MIN(len, size));
+	size = i_size_read(file_inode(fp));
+	rdlen = kernel_read_compat(fp, fp->f_pos, buf, MIN(len, size));
 
 	if (len >= size && size != rdlen) {
 		return -EIO;
@@ -18509,7 +18612,7 @@
 	if (!image)
 		return 0;
 
-	rd_len = dhd_kernel_read_compat(fp, fp->f_pos, str, len);
+	rd_len = kernel_read_compat(fp, fp->f_pos, str, len);
 	str_end = strnchr(str, len, '\n');
 	if (str_end == NULL) {
 		goto err;
@@ -18534,7 +18637,7 @@
 		return 0;
 	}
 
-	size = dhd_i_size_read(file_inode(fp));
+	size = i_size_read(file_inode(fp));
 
 	return size;
 }
@@ -18543,7 +18646,7 @@
 dhd_os_close_image1(dhd_pub_t *pub, void *image)
 {
 	if (image) {
-		dhd_filp_close((struct file *)image, NULL);
+		filp_close((struct file *)image, NULL);
 	}
 }
 
@@ -20886,14 +20989,14 @@
 #endif
 
 	/* open file to write */
-	fp = dhd_filp_open(file_name, flags, 0664);
-	if (IS_ERR(fp) || (fp == NULL)) {
+	fp = filp_open(file_name, flags, 0664);
+	if (IS_ERR(fp)) {
 		DHD_ERROR(("open file error, err = %ld\n", PTR_ERR(fp)));
 		goto exit;
 	}
 
 	/* Write buf to file */
-	ret = dhd_vfs_write(fp, buf, size, &pos);
+	ret = vfs_write(fp, buf, size, &pos);
 	if (ret < 0) {
 		DHD_ERROR(("write file error, err = %d\n", ret));
 		goto exit;
@@ -20901,7 +21004,7 @@
 
 	/* Sync file from filesystem to physical media */
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35))
-	ret = dhd_vfs_fsync(fp, 0);
+	ret = vfs_fsync(fp, 0);
 #else
 	ret = vfs_fsync(fp, fp->f_path.dentry, 0);
 #endif
@@ -20914,7 +21017,7 @@
 exit:
 	/* close file before return */
 	if (!IS_ERR(fp))
-		dhd_filp_close(fp, current->files);
+		filp_close(fp, current->files);
 
 	/* restore previous address limit */
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
@@ -21106,14 +21209,14 @@
 	 */
 	file_mode = O_CREAT | O_WRONLY | O_SYNC;
 	{
-		struct file *fp = dhd_filp_open(memdump_path, file_mode, 0664);
+		struct file *fp = filp_open(memdump_path, file_mode, 0664);
 		/* Check if it is live Brix image having /installmedia, else use /data */
-		if (IS_ERR(fp) || (fp == NULL)) {
+		if (IS_ERR(fp)) {
 			DHD_ERROR(("open file %s, try /data/\n", memdump_path));
 			snprintf(memdump_path, sizeof(memdump_path), "%s%s_%s_" "%s",
 				"/data/", fname, memdump_type,  dhd->debug_dump_time_str);
 		} else {
-			dhd_filp_close(fp, NULL);
+			filp_close(fp, NULL);
 		}
 	}
 #else
@@ -21761,13 +21864,16 @@
 void
 dhd_os_oob_irq_wake_lock_timeout(dhd_pub_t *pub, int val)
 {
-#ifdef CONFIG_HAS_WAKELOCK
 	dhd_info_t *dhd = (dhd_info_t *)(pub->info);
 
 	if (dhd) {
+#ifdef CONFIG_HAS_WAKELOCK
 		dhd_wake_lock_timeout(&dhd->wl_intrwake, msecs_to_jiffies(val));
-	}
+#else
+		printk("%s: =========\n",__FUNCTION__);
+		wake_lock_timeout(&dhd->rx_wakelock, 5*HZ);
 #endif /* CONFIG_HAS_WAKELOCK */
+	}
 }
 
 void
@@ -21917,6 +22023,7 @@
 #ifdef DHD_TRACE_WAKE_LOCK
 	dhd_wk_lock_trace_init(dhd);
 #endif /* DHD_TRACE_WAKE_LOCK */
+	wake_lock_init(&dhd->rx_wakelock, WAKE_LOCK_SUSPEND, "wlan_rx_wakelock");
 }
 
 void dhd_os_wake_lock_destroy(struct dhd_info *dhd)
@@ -21949,6 +22056,7 @@
 		while (dhd_os_wake_unlock(&dhd->pub));
 	}
 #endif /* CONFIG_HAS_WAKELOCK */
+	wake_lock_destroy(&dhd->rx_wakelock);
 }
 
 bool dhd_os_check_if_up(dhd_pub_t *pub)
@@ -22473,8 +22581,8 @@
 	loff_t pos = 0;
 
 	/* Read memdump info from the file */
-	fp = dhd_filp_open(filepath, file_mode, 0);
-	if (IS_ERR(fp) || (fp == NULL)) {
+	fp = filp_open(filepath, file_mode, 0);
+	if (IS_ERR(fp)) {
 		DHD_ERROR(("%s: File [%s] doesn't exist\n", __FUNCTION__, filepath));
 #if defined(CONFIG_X86) && defined(OEM_ANDROID)
 		/* Check if it is Live Brix Image */
@@ -22484,8 +22592,8 @@
 		/* Try if it is Installed Brix Image */
 		filepath = RNDINFO_INST".in";
 		DHD_ERROR(("%s: Try File [%s]\n", __FUNCTION__, filepath));
-		fp = dhd_filp_open(filepath, file_mode, 0);
-		if (IS_ERR(fp) || (fp == NULL)) {
+		fp = filp_open(filepath, file_mode, 0);
+		if (IS_ERR(fp)) {
 			DHD_ERROR(("%s: File [%s] doesn't exist\n", __FUNCTION__, filepath));
 			goto err1;
 		}
@@ -22498,7 +22606,7 @@
 	set_fs(KERNEL_DS);
 
 	/* Handle success case */
-	ret = dhd_vfs_read(fp, (char *)&dhd->rnd_len, sizeof(dhd->rnd_len), &pos);
+	ret = vfs_read(fp, (char *)&dhd->rnd_len, sizeof(dhd->rnd_len), &pos);
 	if (ret < 0) {
 		DHD_ERROR(("%s: rnd_len read error, ret=%d\n", __FUNCTION__, ret));
 		goto err2;
@@ -22510,14 +22618,14 @@
 		goto err2;
 	}
 
-	ret = dhd_vfs_read(fp, (char *)dhd->rnd_buf, dhd->rnd_len, &pos);
+	ret = vfs_read(fp, (char *)dhd->rnd_buf, dhd->rnd_len, &pos);
 	if (ret < 0) {
 		DHD_ERROR(("%s: rnd_buf read error, ret=%d\n", __FUNCTION__, ret));
 		goto err3;
 	}
 
 	set_fs(old_fs);
-	dhd_filp_close(fp, NULL);
+	filp_close(fp, NULL);
 
 	DHD_ERROR(("%s: RND read from %s\n", __FUNCTION__, filepath));
 	return BCME_OK;
@@ -22527,7 +22635,7 @@
 	dhd->rnd_buf = NULL;
 err2:
 	set_fs(old_fs);
-	dhd_filp_close(fp, NULL);
+	filp_close(fp, NULL);
 err1:
 	return BCME_ERROR;
 }
@@ -22543,8 +22651,8 @@
 	loff_t pos = 0;
 
 	/* Read memdump info from the file */
-	fp = dhd_filp_open(filepath, file_mode, 0664);
-	if (IS_ERR(fp) || (fp == NULL)) {
+	fp = filp_open(filepath, file_mode, 0664);
+	if (IS_ERR(fp)) {
 		DHD_ERROR(("%s: File [%s] doesn't exist\n", __FUNCTION__, filepath));
 #if defined(CONFIG_X86) && defined(OEM_ANDROID)
 		/* Check if it is Live Brix Image */
@@ -22554,8 +22662,8 @@
 		/* Try if it is Installed Brix Image */
 		filepath = RNDINFO_INST".out";
 		DHD_ERROR(("%s: Try File [%s]\n", __FUNCTION__, filepath));
-		fp = dhd_filp_open(filepath, file_mode, 0664);
-		if (IS_ERR(fp) || (fp == NULL)) {
+		fp = filp_open(filepath, file_mode, 0664);
+		if (IS_ERR(fp)) {
 			DHD_ERROR(("%s: File [%s] doesn't exist\n", __FUNCTION__, filepath));
 			goto err1;
 		}
@@ -22568,26 +22676,26 @@
 	set_fs(KERNEL_DS);
 
 	/* Handle success case */
-	ret = dhd_vfs_write(fp, (char *)&rnd_len, sizeof(rnd_len), &pos);
+	ret = vfs_write(fp, (char *)&rnd_len, sizeof(rnd_len), &pos);
 	if (ret < 0) {
 		DHD_ERROR(("%s: rnd_len write error, ret=%d\n", __FUNCTION__, ret));
 		goto err2;
 	}
 
-	ret = dhd_vfs_write(fp, (char *)rnd_buf, rnd_len, &pos);
+	ret = vfs_write(fp, (char *)rnd_buf, rnd_len, &pos);
 	if (ret < 0) {
 		DHD_ERROR(("%s: rnd_buf write error, ret=%d\n", __FUNCTION__, ret));
 		goto err2;
 	}
 
 	set_fs(old_fs);
-	dhd_filp_close(fp, NULL);
+	filp_close(fp, NULL);
 	DHD_ERROR(("%s: RND written to %s\n", __FUNCTION__, filepath));
 	return BCME_OK;
 
 err2:
 	set_fs(old_fs);
-	dhd_filp_close(fp, NULL);
+	filp_close(fp, NULL);
 err1:
 	return BCME_ERROR;
 
@@ -24505,8 +24613,8 @@
 	else
 		file_mode = O_CREAT | O_RDWR | O_SYNC;
 
-	fp = dhd_filp_open(dump_path, file_mode, 0664);
-	if (IS_ERR(fp) || (fp == NULL)) {
+	fp = filp_open(dump_path, file_mode, 0664);
+	if (IS_ERR(fp)) {
 		/* If android installed image, try '/data' directory */
 #if defined(CONFIG_X86) && defined(OEM_ANDROID)
 		DHD_ERROR(("%s: File open error on Installed android image, trying /data...\n",
@@ -24517,8 +24625,8 @@
 				sizeof(dump_path) - strlen(dump_path),
 				"_%s", dhdp->debug_dump_time_str);
 		}
-		fp = dhd_filp_open(dump_path, file_mode, 0664);
-		if (IS_ERR(fp) || (fp == NULL)) {
+		fp = filp_open(dump_path, file_mode, 0664);
+		if (IS_ERR(fp)) {
 			ret = PTR_ERR(fp);
 			DHD_ERROR(("open file error, err = %d\n", ret));
 			goto exit2;
@@ -24532,7 +24640,7 @@
 	}
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
-	ret = dhd_vfs_stat(dump_path, &stat);
+	ret = vfs_stat(dump_path, &stat);
 	if (ret < 0) {
 		DHD_ERROR(("file stat error, err = %d\n", ret));
 		goto exit2;
@@ -24701,7 +24809,7 @@
 
 exit2:
 	if (!IS_ERR(fp) && fp != NULL) {
-		dhd_filp_close(fp, NULL);
+		filp_close(fp, NULL);
 		DHD_ERROR(("%s: Finished writing log dump to file - '%s' \n",
 				__FUNCTION__, dump_path));
 	}
@@ -24736,7 +24844,7 @@
 	int ret = BCME_OK;
 
 	if (fp) {
-		ret = dhd_vfs_write(fp, mem_buf, buf_len, (loff_t *)pos);
+		ret = vfs_write(fp, mem_buf, buf_len, (loff_t *)pos);
 		if (ret < 0) {
 			DHD_ERROR(("write file error, err = %d\n", ret));
 			goto exit;
@@ -26637,8 +26745,8 @@
 	struct file *fp;
 	char *filepath = VENDOR_PATH CONFIG_BCMDHD_CLM_PATH;
 
-	fp = dhd_filp_open(filepath, O_RDONLY, 0);
-	if (IS_ERR(fp) || (fp == NULL)) {
+	fp = filp_open(filepath, O_RDONLY, 0);
+	if (IS_ERR(fp)) {
 		DHD_ERROR(("%s: ----- blob file doesn't exist (%s) -----\n", __FUNCTION__,
 			filepath));
 		dhdp->is_blob = FALSE;
@@ -26650,7 +26758,7 @@
 #else
 		BCM_REFERENCE(fw_path);
 #endif /* SKIP_CONCATE_BLOB */
-		dhd_filp_close(fp, NULL);
+		filp_close(fp, NULL);
 	}
 }
 #endif /* DHD_BLOB_EXISTENCE_CHECK */
@@ -26807,14 +26915,14 @@
 #endif
 
 	/* File is always created. */
-	fp = dhd_filp_open(filepath, O_RDWR | O_CREAT, 0664);
-	if (IS_ERR(fp) || (fp == NULL)) {
+	fp = filp_open(filepath, O_RDWR | O_CREAT, 0664);
+	if (IS_ERR(fp)) {
 		DHD_ERROR(("%s: Couldn't open file '%s' err %ld\n",
 			__FUNCTION__, filepath, PTR_ERR(fp)));
 		ret = BCME_ERROR;
 	} else {
 		if (fp->f_mode & FMODE_WRITE) {
-			ret = dhd_vfs_write(fp, buf, buf_len, &fp->f_pos);
+			ret = vfs_write(fp, buf, buf_len, &fp->f_pos);
 			if (ret < 0) {
 				DHD_ERROR(("%s: Couldn't write file '%s'\n",
 					__FUNCTION__, filepath));
@@ -26823,7 +26931,7 @@
 				ret = BCME_OK;
 			}
 		}
-		dhd_filp_close(fp, NULL);
+		filp_close(fp, NULL);
 	}
 
 	/* restore previous address limit */
@@ -26849,8 +26957,8 @@
 	set_fs(KERNEL_DS);
 #endif
 
-	fp = dhd_filp_open(filepath, O_RDONLY, 0);
-	if (IS_ERR(fp) || (fp == NULL)) {
+	fp = filp_open(filepath, O_RDONLY, 0);
+	if (IS_ERR(fp)) {
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
 		set_fs(old_fs);
 #endif
@@ -26858,8 +26966,8 @@
 		return BCME_ERROR;
 	}
 
-	ret = dhd_kernel_read_compat(fp, 0, buf, buf_len);
-	dhd_filp_close(fp, NULL);
+	ret = kernel_read_compat(fp, 0, buf, buf_len);
+	filp_close(fp, NULL);
 
 	/* restore previous address limit */
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
@@ -29659,15 +29767,27 @@
 }
 /* END of DHD RING */
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0))
+#define DHD_VFS_INODE(dir) (dir->d_inode)
+#else
+#define DHD_VFS_INODE(dir) d_inode(dir)
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) */
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0))
+#define DHD_VFS_UNLINK(dir, b, c) vfs_unlink(DHD_VFS_INODE(dir), b)
+#else
+#define DHD_VFS_UNLINK(dir, b, c) vfs_unlink(DHD_VFS_INODE(dir), b, c)
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0) */
+
 #if ((defined DHD_DUMP_MNGR) || (defined DNGL_AXI_ERROR_LOGGING))
 int
 dhd_file_delete(char *path)
 {
-	struct path file_path = {.dentry = 0};
+	struct path file_path;
 	int err;
 	struct dentry *dir;
 
-	err = dhd_kern_path(path, 0, &file_path);
+	err = kern_path(path, 0, &file_path);
 
 	if (err < 0) {
 		DHD_ERROR(("Failed to get kern-path delete file: %s error: %d\n", path, err));

--
Gitblit v1.6.2