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