On Sunday, October 20th, 2024 at 16:49, Philipp Hortmann <philipp.g.hortmann@xxxxxxxxx> wrote: > > > This driver is in the staging area since 2010. > > The following reasons lead to the removal: > - This driver generates maintenance workload for itself and for API wext > - A MAC80211 driver was available in 2016 time frame; This driver does > not compile anymore but would be a better starting point than the > current driver. Here the note from the TODO file: > A replacement for this driver with MAC80211 support is available > at https://github.com/chunkeey/rtl8192su > - no progress changing to mac80211 > - Using this hardware is security wise not state of the art as WPA3 is > not supported. > > The longterm kernels will still support this hardware for years. > > Find further discussions in the Link below. > > Link: https://lore.kernel.org/linux-staging/a02e3e0b-8a9b-47d5-87cf-2c957a474daa@xxxxxxxxx/T/#t > Signed-off-by: Philipp Hortmann philipp.g.hortmann@xxxxxxxxx > > --- > Artifacts of rtl8712 in MAINTAINERS are removed with this patch. > Removed artifacts in Makefile and Kconfig. > --- > MAINTAINERS | 5 - > drivers/staging/Kconfig | 2 - > drivers/staging/Makefile | 1 - > drivers/staging/rtl8712/Kconfig | 21 - > drivers/staging/rtl8712/Makefile | 35 - > drivers/staging/rtl8712/TODO | 12 - > drivers/staging/rtl8712/basic_types.h | 28 - > drivers/staging/rtl8712/drv_types.h | 175 -- > drivers/staging/rtl8712/ethernet.h | 21 - > drivers/staging/rtl8712/hal_init.c | 401 --- > drivers/staging/rtl8712/ieee80211.c | 415 --- > drivers/staging/rtl8712/ieee80211.h | 165 -- > drivers/staging/rtl8712/mlme_linux.c | 161 -- > drivers/staging/rtl8712/mlme_osdep.h | 31 - > drivers/staging/rtl8712/mp_custom_oid.h | 287 --- > drivers/staging/rtl8712/os_intfs.c | 482 ---- > drivers/staging/rtl8712/osdep_intf.h | 32 - > drivers/staging/rtl8712/osdep_service.h | 60 - > drivers/staging/rtl8712/recv_linux.c | 139 - > drivers/staging/rtl8712/recv_osdep.h | 39 - > drivers/staging/rtl8712/rtl8712_bitdef.h | 26 - > drivers/staging/rtl8712/rtl8712_cmd.c | 409 --- > drivers/staging/rtl8712/rtl8712_cmd.h | 231 -- > .../staging/rtl8712/rtl8712_cmdctrl_bitdef.h | 95 - > .../staging/rtl8712/rtl8712_cmdctrl_regdef.h | 19 - > .../rtl8712/rtl8712_debugctrl_bitdef.h | 41 - > .../rtl8712/rtl8712_debugctrl_regdef.h | 32 - > .../rtl8712/rtl8712_edcasetting_bitdef.h | 65 - > .../rtl8712/rtl8712_edcasetting_regdef.h | 24 - > drivers/staging/rtl8712/rtl8712_efuse.c | 563 ---- > drivers/staging/rtl8712/rtl8712_efuse.h | 44 - > drivers/staging/rtl8712/rtl8712_event.h | 86 - > .../staging/rtl8712/rtl8712_fifoctrl_bitdef.h | 131 - > .../staging/rtl8712/rtl8712_fifoctrl_regdef.h | 61 - > drivers/staging/rtl8712/rtl8712_gp_bitdef.h | 68 - > drivers/staging/rtl8712/rtl8712_gp_regdef.h | 29 - > drivers/staging/rtl8712/rtl8712_hal.h | 142 - > .../rtl8712/rtl8712_interrupt_bitdef.h | 44 - > drivers/staging/rtl8712/rtl8712_io.c | 99 - > drivers/staging/rtl8712/rtl8712_led.c | 1830 ------------- > .../rtl8712/rtl8712_macsetting_bitdef.h | 31 - > .../rtl8712/rtl8712_macsetting_regdef.h | 20 - > .../rtl8712/rtl8712_powersave_bitdef.h | 39 - > .../rtl8712/rtl8712_powersave_regdef.h | 26 - > .../staging/rtl8712/rtl8712_ratectrl_bitdef.h | 36 - > .../staging/rtl8712/rtl8712_ratectrl_regdef.h | 43 - > drivers/staging/rtl8712/rtl8712_recv.c | 1075 -------- > drivers/staging/rtl8712/rtl8712_recv.h | 145 -- > drivers/staging/rtl8712/rtl8712_regdef.h | 32 - > .../staging/rtl8712/rtl8712_security_bitdef.h | 34 - > drivers/staging/rtl8712/rtl8712_spec.h | 121 - > .../staging/rtl8712/rtl8712_syscfg_bitdef.h | 163 -- > .../staging/rtl8712/rtl8712_syscfg_regdef.h | 42 - > .../staging/rtl8712/rtl8712_timectrl_bitdef.h | 49 - > .../staging/rtl8712/rtl8712_timectrl_regdef.h | 26 - > drivers/staging/rtl8712/rtl8712_wmac_bitdef.h | 49 - > drivers/staging/rtl8712/rtl8712_wmac_regdef.h | 36 - > drivers/staging/rtl8712/rtl8712_xmit.c | 732 ------ > drivers/staging/rtl8712/rtl8712_xmit.h | 108 - > drivers/staging/rtl8712/rtl871x_cmd.c | 750 ------ > drivers/staging/rtl8712/rtl871x_cmd.h | 750 ------ > drivers/staging/rtl8712/rtl871x_debug.h | 130 - > drivers/staging/rtl8712/rtl871x_eeprom.c | 220 -- > drivers/staging/rtl8712/rtl871x_eeprom.h | 88 - > drivers/staging/rtl8712/rtl871x_event.h | 109 - > drivers/staging/rtl8712/rtl871x_ht.h | 33 - > drivers/staging/rtl8712/rtl871x_io.c | 147 -- > drivers/staging/rtl8712/rtl871x_io.h | 236 -- > drivers/staging/rtl8712/rtl871x_ioctl.h | 94 - > drivers/staging/rtl8712/rtl871x_ioctl_linux.c | 2276 ----------------- > drivers/staging/rtl8712/rtl871x_ioctl_rtl.c | 519 ---- > drivers/staging/rtl8712/rtl871x_ioctl_rtl.h | 109 - > drivers/staging/rtl8712/rtl871x_ioctl_set.c | 355 --- > drivers/staging/rtl8712/rtl871x_ioctl_set.h | 45 - > drivers/staging/rtl8712/rtl871x_led.h | 118 - > drivers/staging/rtl8712/rtl871x_mlme.c | 1711 ------------- > drivers/staging/rtl8712/rtl871x_mlme.h | 205 -- > drivers/staging/rtl8712/rtl871x_mp.c | 724 ------ > drivers/staging/rtl8712/rtl871x_mp.h | 275 -- > drivers/staging/rtl8712/rtl871x_mp_ioctl.c | 883 ------- > drivers/staging/rtl8712/rtl871x_mp_ioctl.h | 328 --- > .../staging/rtl8712/rtl871x_mp_phy_regdef.h | 1034 -------- > drivers/staging/rtl8712/rtl871x_pwrctrl.c | 234 -- > drivers/staging/rtl8712/rtl871x_pwrctrl.h | 113 - > drivers/staging/rtl8712/rtl871x_recv.c | 671 ----- > drivers/staging/rtl8712/rtl871x_recv.h | 208 -- > drivers/staging/rtl8712/rtl871x_rf.h | 55 - > drivers/staging/rtl8712/rtl871x_security.c | 1386 ---------- > drivers/staging/rtl8712/rtl871x_security.h | 223 -- > drivers/staging/rtl8712/rtl871x_sta_mgt.c | 263 -- > drivers/staging/rtl8712/rtl871x_wlan_sme.h | 35 - > drivers/staging/rtl8712/rtl871x_xmit.c | 1056 -------- > drivers/staging/rtl8712/rtl871x_xmit.h | 287 --- > drivers/staging/rtl8712/sta_info.h | 132 - > drivers/staging/rtl8712/usb_halinit.c | 307 --- > drivers/staging/rtl8712/usb_intf.c | 638 ----- > drivers/staging/rtl8712/usb_ops.c | 195 -- > drivers/staging/rtl8712/usb_ops.h | 38 - > drivers/staging/rtl8712/usb_ops_linux.c | 508 ---- > drivers/staging/rtl8712/usb_osintf.h | 35 - > drivers/staging/rtl8712/wifi.h | 196 -- > drivers/staging/rtl8712/wlan_bssdef.h | 223 -- > drivers/staging/rtl8712/xmit_linux.c | 181 -- > drivers/staging/rtl8712/xmit_osdep.h | 52 - > 104 files changed, 27533 deletions(-) > delete mode 100644 drivers/staging/rtl8712/Kconfig > delete mode 100644 drivers/staging/rtl8712/Makefile > delete mode 100644 drivers/staging/rtl8712/TODO > delete mode 100644 drivers/staging/rtl8712/basic_types.h > delete mode 100644 drivers/staging/rtl8712/drv_types.h > delete mode 100644 drivers/staging/rtl8712/ethernet.h > delete mode 100644 drivers/staging/rtl8712/hal_init.c > delete mode 100644 drivers/staging/rtl8712/ieee80211.c > delete mode 100644 drivers/staging/rtl8712/ieee80211.h > delete mode 100644 drivers/staging/rtl8712/mlme_linux.c > delete mode 100644 drivers/staging/rtl8712/mlme_osdep.h > delete mode 100644 drivers/staging/rtl8712/mp_custom_oid.h > delete mode 100644 drivers/staging/rtl8712/os_intfs.c > delete mode 100644 drivers/staging/rtl8712/osdep_intf.h > delete mode 100644 drivers/staging/rtl8712/osdep_service.h > delete mode 100644 drivers/staging/rtl8712/recv_linux.c > delete mode 100644 drivers/staging/rtl8712/recv_osdep.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_bitdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_cmd.c > delete mode 100644 drivers/staging/rtl8712/rtl8712_cmd.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_cmdctrl_bitdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_cmdctrl_regdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_debugctrl_bitdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_debugctrl_regdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_edcasetting_bitdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_edcasetting_regdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_efuse.c > delete mode 100644 drivers/staging/rtl8712/rtl8712_efuse.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_event.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_fifoctrl_bitdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_fifoctrl_regdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_gp_bitdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_gp_regdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_hal.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_interrupt_bitdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_io.c > delete mode 100644 drivers/staging/rtl8712/rtl8712_led.c > delete mode 100644 drivers/staging/rtl8712/rtl8712_macsetting_bitdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_macsetting_regdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_powersave_bitdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_powersave_regdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_ratectrl_bitdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_ratectrl_regdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_recv.c > delete mode 100644 drivers/staging/rtl8712/rtl8712_recv.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_regdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_security_bitdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_spec.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_syscfg_bitdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_syscfg_regdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_timectrl_bitdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_timectrl_regdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_wmac_bitdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_wmac_regdef.h > delete mode 100644 drivers/staging/rtl8712/rtl8712_xmit.c > delete mode 100644 drivers/staging/rtl8712/rtl8712_xmit.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_cmd.c > delete mode 100644 drivers/staging/rtl8712/rtl871x_cmd.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_debug.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_eeprom.c > delete mode 100644 drivers/staging/rtl8712/rtl871x_eeprom.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_event.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_ht.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_io.c > delete mode 100644 drivers/staging/rtl8712/rtl871x_io.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_ioctl.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_ioctl_linux.c > delete mode 100644 drivers/staging/rtl8712/rtl871x_ioctl_rtl.c > delete mode 100644 drivers/staging/rtl8712/rtl871x_ioctl_rtl.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_ioctl_set.c > delete mode 100644 drivers/staging/rtl8712/rtl871x_ioctl_set.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_led.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_mlme.c > delete mode 100644 drivers/staging/rtl8712/rtl871x_mlme.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_mp.c > delete mode 100644 drivers/staging/rtl8712/rtl871x_mp.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_mp_ioctl.c > delete mode 100644 drivers/staging/rtl8712/rtl871x_mp_ioctl.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_mp_phy_regdef.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_pwrctrl.c > delete mode 100644 drivers/staging/rtl8712/rtl871x_pwrctrl.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_recv.c > delete mode 100644 drivers/staging/rtl8712/rtl871x_recv.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_rf.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_security.c > delete mode 100644 drivers/staging/rtl8712/rtl871x_security.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_sta_mgt.c > delete mode 100644 drivers/staging/rtl8712/rtl871x_wlan_sme.h > delete mode 100644 drivers/staging/rtl8712/rtl871x_xmit.c > delete mode 100644 drivers/staging/rtl8712/rtl871x_xmit.h > delete mode 100644 drivers/staging/rtl8712/sta_info.h > delete mode 100644 drivers/staging/rtl8712/usb_halinit.c > delete mode 100644 drivers/staging/rtl8712/usb_intf.c > delete mode 100644 drivers/staging/rtl8712/usb_ops.c > delete mode 100644 drivers/staging/rtl8712/usb_ops.h > delete mode 100644 drivers/staging/rtl8712/usb_ops_linux.c > delete mode 100644 drivers/staging/rtl8712/usb_osintf.h > delete mode 100644 drivers/staging/rtl8712/wifi.h > delete mode 100644 drivers/staging/rtl8712/wlan_bssdef.h > delete mode 100644 drivers/staging/rtl8712/xmit_linux.c > delete mode 100644 drivers/staging/rtl8712/xmit_osdep.h > > diff --git a/MAINTAINERS b/MAINTAINERS > index 4300175d3ee6..b609f40e1420 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -21955,11 +21955,6 @@ L: linux-tegra@xxxxxxxxxxxxxxx > S: Maintained > F: drivers/staging/nvec/ > > -STAGING - REALTEK RTL8712U DRIVERS > -M: Florian Schilhabel florian.c.schilhabel@xxxxxxxxxxxxxx. > > -S: Odd Fixes > -F: drivers/staging/rtl8712/ > - > STAGING - SEPS525 LCD CONTROLLER DRIVERS > M: Michael Hennerich michael.hennerich@xxxxxxxxxx > > L: linux-fbdev@xxxxxxxxxxxxxxx > diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig > index 1f9783df641c..4018f95a31bc 100644 > --- a/drivers/staging/Kconfig > +++ b/drivers/staging/Kconfig > @@ -26,8 +26,6 @@ if STAGING > > source "drivers/staging/rtl8723bs/Kconfig" > > -source "drivers/staging/rtl8712/Kconfig" > - > source "drivers/staging/octeon/Kconfig" > > source "drivers/staging/iio/Kconfig" > diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile > index d25e352d32bd..f29d66da02eb 100644 > --- a/drivers/staging/Makefile > +++ b/drivers/staging/Makefile > @@ -3,7 +3,6 @@ > > obj-y += media/ > obj-$(CONFIG_RTL8723BS) += rtl8723bs/ > -obj-$(CONFIG_R8712U) += rtl8712/ > obj-$(CONFIG_OCTEON_ETHERNET) += octeon/ > obj-$(CONFIG_VME_BUS) += vme_user/ > obj-$(CONFIG_IIO) += iio/ > diff --git a/drivers/staging/rtl8712/Kconfig b/drivers/staging/rtl8712/Kconfig > deleted file mode 100644 > index 8de26425225b..000000000000 > --- a/drivers/staging/rtl8712/Kconfig > +++ /dev/null > @@ -1,21 +0,0 @@ > -# SPDX-License-Identifier: GPL-2.0 > -config R8712U > - tristate "RealTek RTL8712U (RTL8192SU) Wireless LAN NIC driver" > - depends on WLAN && USB && CFG80211 > - select WIRELESS_EXT > - select WEXT_PRIV > - select FW_LOADER > - help > - This option adds the Realtek RTL8712 USB device such as the > - D-Link DWA-130. > - > - If built as a module, it will be called r8712u. > - > -config R8712_TX_AGGR > - bool "Realtek RTL8712U Transmit Aggregation code" > - depends on R8712U && BROKEN > - help > - This option provides transmit aggregation for the Realtek > - RTL8712 USB device. > - > - > diff --git a/drivers/staging/rtl8712/Makefile b/drivers/staging/rtl8712/Makefile > deleted file mode 100644 > index 3ae216b6621b..000000000000 > --- a/drivers/staging/rtl8712/Makefile > +++ /dev/null > @@ -1,35 +0,0 @@ > -# SPDX-License-Identifier: GPL-2.0 > -r8712u-y := \ > - rtl871x_cmd.o \ > - rtl8712_cmd.o \ > - rtl871x_security.o \ > - rtl871x_eeprom.o \ > - rtl8712_efuse.o \ > - hal_init.o \ > - usb_halinit.o \ > - usb_ops.o \ > - usb_ops_linux.o \ > - rtl871x_io.o \ > - rtl8712_io.o \ > - rtl871x_ioctl_linux.o \ > - rtl871x_ioctl_rtl.o \ > - rtl871x_ioctl_set.o \ > - rtl8712_led.o \ > - rtl871x_mlme.o \ > - ieee80211.o \ > - rtl871x_mp_ioctl.o \ > - rtl871x_mp.o \ > - mlme_linux.o \ > - recv_linux.o \ > - xmit_linux.o \ > - usb_intf.o \ > - os_intfs.o \ > - rtl871x_pwrctrl.o \ > - rtl8712_recv.o \ > - rtl871x_recv.o \ > - rtl871x_sta_mgt.o \ > - rtl871x_xmit.o \ > - rtl8712_xmit.o > - > -obj-$(CONFIG_R8712U) := r8712u.o > - > diff --git a/drivers/staging/rtl8712/TODO b/drivers/staging/rtl8712/TODO > deleted file mode 100644 > index 5aed36efa7cb..000000000000 > --- a/drivers/staging/rtl8712/TODO > +++ /dev/null > @@ -1,12 +0,0 @@ > -TODO: > -- merge Realtek's bugfixes and new features into the driver > -- switch to use MAC80211 > -- checkpatch.pl fixes - only a few remain > - > -A replacement for this driver with MAC80211 support is available > -at https://github.com/chunkeey/rtl8192su > - > -Please send any patches to Greg Kroah-Hartman gregkh@xxxxxxxxxxxxxxxxxxx, > > -Larry Finger Larry.Finger@xxxxxxxxxxxx, > > -Florian Schilhabel florian.c.schilhabel@xxxxxxxxxxxxxx and > > -Linux Driver Project Developer List driverdev-devel@xxxxxxxxxxxxxxxxxxxxxx. > > diff --git a/drivers/staging/rtl8712/basic_types.h b/drivers/staging/rtl8712/basic_types.h > deleted file mode 100644 > index aecded87dd4c..000000000000 > --- a/drivers/staging/rtl8712/basic_types.h > +++ /dev/null > @@ -1,28 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > -#ifndef BASIC_TYPES_H > -#define BASIC_TYPES_H > - > -#include <linux/types.h> > > - > -#define sint signed int > - > -/* Should we extend this to be host_addr_t and target_addr_t for case: > - * host : x86_64 > - * target : mips64 > - / > -#define addr_t unsigned long > - > -#endif /BASIC_TYPES_H/ > - > diff --git a/drivers/staging/rtl8712/drv_types.h b/drivers/staging/rtl8712/drv_types.h > deleted file mode 100644 > index 76ac798642bd..000000000000 > --- a/drivers/staging/rtl8712/drv_types.h > +++ /dev/null > @@ -1,175 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - *****************************************************************************/ > -/ --------------------------------------------------------------------- > - * > - * For type defines and data structure defines > - * > - * --------------------------------------------------------------------- > - */ > -#ifndef DRV_TYPES_H > -#define DRV_TYPES_H > - > -struct _adapter; > - > -#include "osdep_service.h" > -#include "wlan_bssdef.h" > -#include "rtl8712_spec.h" > -#include "rtl8712_hal.h" > -#include <linux/mutex.h> > > -#include <linux/completion.h> > > - > -enum _NIC_VERSION { > - RTL8711_NIC, > - RTL8712_NIC, > - RTL8713_NIC, > - RTL8716_NIC > -}; > - > -struct qos_priv { > - /* bit mask option: u-apsd, s-apsd, ts, block ack... / > - unsigned int qos_option; > -}; > - > -#include "rtl871x_ht.h" > -#include "rtl871x_cmd.h" > -#include "rtl871x_xmit.h" > -#include "rtl871x_recv.h" > -#include "rtl871x_security.h" > -#include "rtl871x_pwrctrl.h" > -#include "rtl871x_io.h" > -#include "rtl871x_eeprom.h" > -#include "sta_info.h" > -#include "rtl871x_mlme.h" > -#include "rtl871x_mp.h" > -#include "rtl871x_debug.h" > -#include "rtl871x_rf.h" > -#include "rtl871x_event.h" > -#include "rtl871x_led.h" > - > -#define SPEC_DEV_ID_DISABLE_HT BIT(1) > - > -struct specific_device_id { > - u32 flags; > - u16 idVendor; > - u16 idProduct; > - > -}; > - > -struct registry_priv { > - u8 chip_version; > - u8 rfintfs; > - u8 lbkmode; > - u8 hci; > - u8 network_mode; /infra, ad-hoc, auto/ > - struct ndis_802_11_ssid ssid; > - u8 channel;/ ad-hoc support requirement / > - u8 wireless_mode;/ A, B, G, auto / > - u8 vrtl_carrier_sense; /Enable, Disable, Auto/ > - u8 vcs_type;/RTS/CTS, CTS-to-self/ > - u16 rts_thresh; > - u16 frag_thresh; > - u8 preamble;/long, short, auto/ > - u8 scan_mode;/active, passive/ > - u8 adhoc_tx_pwr; > - u8 soft_ap; > - u8 smart_ps; > - u8 power_mgnt; > - u8 radio_enable; > - u8 long_retry_lmt; > - u8 short_retry_lmt; > - u16 busy_thresh; > - u8 ack_policy; > - u8 mp_mode; > - u8 software_encrypt; > - u8 software_decrypt; > - / UAPSD */ > - u8 wmm_enable; > - u8 uapsd_enable; > - u8 uapsd_max_sp; > - u8 uapsd_acbk_en; > - u8 uapsd_acbe_en; > - u8 uapsd_acvi_en; > - u8 uapsd_acvo_en; > - > - struct wlan_bssid_ex dev_network; > - > - u8 ht_enable; > - u8 cbw40_enable; > - u8 ampdu_enable;/for tx/ > - u8 rf_config; > - u8 low_power; > - u8 wifi_test; > -}; > - > -struct dvobj_priv { > - struct _adapter *padapter; > - u32 nr_endpoint; > - u8 ishighspeed; > - uint (*inirp_init)(struct _adapter *adapter); > - uint (*inirp_deinit)(struct _adapter adapter); > - struct usb_device pusbdev; > -}; > - > -/ > - * struct _adapter - the main adapter structure for this device. > - * > - * bup: True indicates that the interface is up. > - */ > -struct _adapter { > - struct dvobj_priv dvobjpriv; > - struct mlme_priv mlmepriv; > - struct cmd_priv cmdpriv; > - struct evt_priv evtpriv; > - struct io_queue *pio_queue; > - struct xmit_priv xmitpriv; > - struct recv_priv recvpriv; > - struct sta_priv stapriv; > - struct security_priv securitypriv; > - struct registry_priv registrypriv; > - struct wlan_acl_pool acl_list; > - struct pwrctrl_priv pwrctrlpriv; > - struct eeprom_priv eeprompriv; > - struct hal_priv halpriv; > - struct led_priv ledpriv; > - struct mp_priv mppriv; > - bool driver_stopped; > - bool surprise_removed; > - bool suspended; > - u8 eeprom_address_size; > - u8 hw_init_completed; > - struct task_struct *cmd_thread; > - uint (*dvobj_init)(struct _adapter *adapter); > - void (*dvobj_deinit)(struct _adapter *adapter); > - struct net_device *pnetdev; > - int bup; > - struct net_device_stats stats; > - struct iw_statistics iwstats; > - int pid; /process id from UI/ > - struct work_struct wk_filter_rx_ff0; > - const struct firmware *fw; > - struct usb_interface *pusb_intf; > - struct mutex mutex_start; > - struct completion rtl8712_fw_ready; > - struct completion rx_filter_ready; > -}; > - > -static inline u8 *myid(struct eeprom_priv *peepriv) > -{ > - return peepriv->mac_addr; > > -} > - > -u8 r8712_usb_hal_bus_init(struct _adapter adapter); > - > -#endif /DRV_TYPES_H/ > - > diff --git a/drivers/staging/rtl8712/ethernet.h b/drivers/staging/rtl8712/ethernet.h > deleted file mode 100644 > index 4b9b8a97a0bc..000000000000 > --- a/drivers/staging/rtl8712/ethernet.h > +++ /dev/null > @@ -1,21 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef __INC_ETHERNET_H > -#define __INC_ETHERNET_H > - > -#define ETHERNET_HEADER_SIZE 14 /!< Ethernet Header Length/ > -#define LLC_HEADER_SIZE 6 /!< LLC Header Length/ > - > -#endif / #ifndef __INC_ETHERNET_H / > - > diff --git a/drivers/staging/rtl8712/hal_init.c b/drivers/staging/rtl8712/hal_init.c > deleted file mode 100644 > index 1148075f0cd6..000000000000 > --- a/drivers/staging/rtl8712/hal_init.c > +++ /dev/null > @@ -1,401 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/**** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx. > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define HAL_INIT_C > - > -#include <linux/usb.h> > > -#include <linux/device.h> > > -#include <linux/usb/ch9.h> > > -#include <linux/firmware.h> > > -#include <linux/module.h> > > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "usb_osintf.h" > - > -#define FWBUFF_ALIGN_SZ 512 > -#define MAX_DUMP_FWSZ (48 * 1024) > - > -static void rtl871x_load_fw_fail(struct _adapter *adapter) > -{ > - struct usb_device *udev = adapter->dvobjpriv.pusbdev; > > - struct device *dev = &udev->dev; > > - struct device *parent = dev->parent; > > - > - complete(&adapter->rtl8712_fw_ready); > > - > - dev_err(&udev->dev, "r8712u: Firmware request failed\n"); > > - > - if (parent) > - device_lock(parent); > - > - device_release_driver(dev); > - > - if (parent) > - device_unlock(parent); > -} > - > -static void rtl871x_load_fw_cb(const struct firmware *firmware, void *context) > -{ > - struct _adapter *adapter = context; > - > - if (!firmware) { > - rtl871x_load_fw_fail(adapter); > - return; > - } > - adapter->fw = firmware; > > - /* firmware available - start netdev */ > - register_netdev(adapter->pnetdev); > > - complete(&adapter->rtl8712_fw_ready); > > -} > - > -static const char firmware_file[] = "rtlwifi/rtl8712u.bin"; > - > -int rtl871x_load_fw(struct _adapter *padapter) > -{ > - struct device *dev = &padapter->dvobjpriv.pusbdev->dev; > > - int rc; > - > - init_completion(&padapter->rtl8712_fw_ready); > > - dev_info(dev, "r8712u: Loading firmware from \"%s\"\n", firmware_file); > - rc = request_firmware_nowait(THIS_MODULE, 1, firmware_file, dev, > - GFP_KERNEL, padapter, rtl871x_load_fw_cb); > - if (rc) > - dev_err(dev, "r8712u: Firmware request error %d\n", rc); > - return rc; > -} > -MODULE_FIRMWARE("rtlwifi/rtl8712u.bin"); > - > -static u32 rtl871x_open_fw(struct _adapter *adapter, const u8 **mappedfw) > -{ > - if (adapter->fw->size > 200000) { > > - dev_err(&adapter->pnetdev->dev, "r8712u: Bad fw->size of %zu\n", > > - adapter->fw->size); > > - return 0; > - } > - *mappedfw = adapter->fw->data; > > - return adapter->fw->size; > > -} > - > -static void fill_fwpriv(struct _adapter *adapter, struct fw_priv *fwpriv) > -{ > - struct dvobj_priv *dvobj = &adapter->dvobjpriv; > > - struct registry_priv *regpriv = &adapter->registrypriv; > > - > - memset(fwpriv, 0, sizeof(struct fw_priv)); > - /* todo: check if needs endian conversion */ > - fwpriv->hci_sel = RTL8712_HCI_TYPE_72USB; > > - fwpriv->usb_ep_num = (u8)dvobj->nr_endpoint; > > - fwpriv->bw_40MHz_en = regpriv->cbw40_enable; > > - switch (regpriv->rf_config) { > > - case RTL8712_RF_1T1R: > - fwpriv->rf_config = RTL8712_RFC_1T1R; > > - break; > - case RTL8712_RF_2T2R: > - fwpriv->rf_config = RTL8712_RFC_2T2R; > > - break; > - case RTL8712_RF_1T2R: > - default: > - fwpriv->rf_config = RTL8712_RFC_1T2R; > > - } > - fwpriv->mp_mode = (regpriv->mp_mode == 1); > > - /* 0:off 1:on 2:auto */ > - fwpriv->vcs_type = regpriv->vrtl_carrier_sense; > > - fwpriv->vcs_mode = regpriv->vcs_type; /* 1:RTS/CTS 2:CTS to self */ > > - /* default enable turbo_mode */ > - fwpriv->turbo_mode = (regpriv->wifi_test != 1); > > - fwpriv->low_power_mode = regpriv->low_power; > > -} > - > -static void update_fwhdr(struct fw_hdr *pfwhdr, const u8 pmappedfw) > -{ > - pfwhdr->signature = le16_to_cpu((__le16 *)pmappedfw); > > - pfwhdr->version = le16_to_cpu(*(__le16 *)(pmappedfw + 2)); > > - /* define the size of boot loader / > - pfwhdr->dmem_size = le32_to_cpu((__le32 *)(pmappedfw + 4)); > > - /* define the size of FW in IMEM / > - pfwhdr->img_IMEM_size = le32_to_cpu((__le32 *)(pmappedfw + 8)); > > - /* define the size of FW in SRAM / > - pfwhdr->img_SRAM_size = le32_to_cpu((__le32 *)(pmappedfw + 12)); > > - /* define the size of DMEM variable / > - pfwhdr->fw_priv_sz = le32_to_cpu((__le32 *)(pmappedfw + 16)); > > -} > - > -static u8 chk_fwhdr(struct fw_hdr pfwhdr, u32 ulfilelength) > -{ > - u32 fwhdrsz, fw_sz; > - > - / check signature */ > - if ((pfwhdr->signature != 0x8712) && (pfwhdr->signature != 0x8192)) > > - return _FAIL; > - /* check fw_priv_sze & sizeof(struct fw_priv) */ > - if (pfwhdr->fw_priv_sz != sizeof(struct fw_priv)) > > - return _FAIL; > - /* check fw_sz & image_fw_sz */ > - fwhdrsz = offsetof(struct fw_hdr, fwpriv) + pfwhdr->fw_priv_sz; > > - fw_sz = fwhdrsz + pfwhdr->img_IMEM_size + pfwhdr->img_SRAM_size + > > - pfwhdr->dmem_size; > > - if (fw_sz != ulfilelength) > - return _FAIL; > - return _SUCCESS; > -} > - > -static u8 rtl8712_dl_fw(struct _adapter adapter) > -{ > - sint i; > - u8 tmp8, tmp8_a; > - u16 tmp16; > - u32 maxlen = 0; / for compare usage / > - uint dump_imem_sz, imem_sz, dump_emem_sz, emem_sz; / max = 49152; / > - struct fw_hdr fwhdr; > - u32 ulfilelength; / FW file size */ > - const u8 *mappedfw = NULL; > - u8 *tmpchar = NULL, *payload, *ptr; > - struct tx_desc *txdesc; > - u32 txdscp_sz = sizeof(struct tx_desc); > - u8 ret = _FAIL; > - > - ulfilelength = rtl871x_open_fw(adapter, &mappedfw); > - if (mappedfw && (ulfilelength > 0)) { > > - update_fwhdr(&fwhdr, mappedfw); > - if (chk_fwhdr(&fwhdr, ulfilelength) == _FAIL) > - return ret; > - fill_fwpriv(adapter, &fwhdr.fwpriv); > - /* firmware check ok */ > - maxlen = (fwhdr.img_IMEM_size > fwhdr.img_SRAM_size) ? > > - fwhdr.img_IMEM_size : fwhdr.img_SRAM_size; > - maxlen += txdscp_sz; > - tmpchar = kmalloc(maxlen + FWBUFF_ALIGN_SZ, GFP_KERNEL); > - if (!tmpchar) > - return ret; > - > - txdesc = (struct tx_desc *)(tmpchar + FWBUFF_ALIGN_SZ - > - ((addr_t)(tmpchar) & (FWBUFF_ALIGN_SZ - 1))); > - payload = (u8 *)(txdesc) + txdscp_sz; > - ptr = (u8 )mappedfw + offsetof(struct fw_hdr, fwpriv) + > - fwhdr.fw_priv_sz; > - / Download FirmWare / > - / 1. determine IMEM code size and Load IMEM Code Section */ > - imem_sz = fwhdr.img_IMEM_size; > - do { > - memset(txdesc, 0, TXDESC_SIZE); > - if (imem_sz > MAX_DUMP_FWSZ/49152/) { > > - dump_imem_sz = MAX_DUMP_FWSZ; > - } else { > - dump_imem_sz = imem_sz; > - txdesc->txdw0 |= cpu_to_le32(BIT(28)); > > - } > - txdesc->txdw0 |= cpu_to_le32(dump_imem_sz & > > - 0x0000ffff); > - memcpy(payload, ptr, dump_imem_sz); > - r8712_write_mem(adapter, RTL8712_DMA_VOQ, > - dump_imem_sz + TXDESC_SIZE, > - (u8 *)txdesc); > - ptr += dump_imem_sz; > - imem_sz -= dump_imem_sz; > - } while (imem_sz > 0); > > - i = 10; > - tmp16 = r8712_read16(adapter, TCR); > - while (((tmp16 & _IMEM_CODE_DONE) == 0) && (i > 0)) { > > - usleep_range(10, 1000); > - tmp16 = r8712_read16(adapter, TCR); > - i--; > - } > - if (i == 0 || (tmp16 & _IMEM_CHK_RPT) == 0) > - goto exit_fail; > - > - /* 2.Download EMEM code size and Load EMEM Code Section / > - emem_sz = fwhdr.img_SRAM_size; > - do { > - memset(txdesc, 0, TXDESC_SIZE); > - if (emem_sz > MAX_DUMP_FWSZ) { / max=48k */ > > - dump_emem_sz = MAX_DUMP_FWSZ; > - } else { > - dump_emem_sz = emem_sz; > - txdesc->txdw0 |= cpu_to_le32(BIT(28)); > > - } > - txdesc->txdw0 |= cpu_to_le32(dump_emem_sz & > > - 0x0000ffff); > - memcpy(payload, ptr, dump_emem_sz); > - r8712_write_mem(adapter, RTL8712_DMA_VOQ, > - dump_emem_sz + TXDESC_SIZE, > - (u8 *)txdesc); > - ptr += dump_emem_sz; > - emem_sz -= dump_emem_sz; > - } while (emem_sz > 0); > > - i = 5; > - tmp16 = r8712_read16(adapter, TCR); > - while (((tmp16 & _EMEM_CODE_DONE) == 0) && (i > 0)) { > > - usleep_range(10, 1000); > - tmp16 = r8712_read16(adapter, TCR); > - i--; > - } > - if (i == 0 || (tmp16 & _EMEM_CHK_RPT) == 0) > - goto exit_fail; > - > - /* 3.Enable CPU / > - tmp8 = r8712_read8(adapter, SYS_CLKR); > - r8712_write8(adapter, SYS_CLKR, tmp8 | BIT(2)); > - tmp8_a = r8712_read8(adapter, SYS_CLKR); > - if (tmp8_a != (tmp8 | BIT(2))) > - goto exit_fail; > - > - tmp8 = r8712_read8(adapter, SYS_FUNC_EN + 1); > - r8712_write8(adapter, SYS_FUNC_EN + 1, tmp8 | BIT(2)); > - tmp8_a = r8712_read8(adapter, SYS_FUNC_EN + 1); > - if (tmp8_a != (tmp8 | BIT(2))) > - goto exit_fail; > - > - r8712_read32(adapter, TCR); > - > - / 4.polling IMEM Ready */ > - i = 100; > - tmp16 = r8712_read16(adapter, TCR); > - while (((tmp16 & _IMEM_RDY) == 0) && (i > 0)) { > > - msleep(20); > - tmp16 = r8712_read16(adapter, TCR); > - i--; > - } > - if (i == 0) { > - r8712_write16(adapter, 0x10250348, 0xc000); > - r8712_write16(adapter, 0x10250348, 0xc001); > - r8712_write16(adapter, 0x10250348, 0x2000); > - r8712_write16(adapter, 0x10250348, 0x2001); > - r8712_write16(adapter, 0x10250348, 0x2002); > - r8712_write16(adapter, 0x10250348, 0x2003); > - goto exit_fail; > - } > - /* 5.Download DMEM code size and Load EMEM Code Section */ > - memset(txdesc, 0, TXDESC_SIZE); > - txdesc->txdw0 |= cpu_to_le32(fwhdr.fw_priv_sz & 0x0000ffff); > > - txdesc->txdw0 |= cpu_to_le32(BIT(28)); > > - memcpy(payload, &fwhdr.fwpriv, fwhdr.fw_priv_sz); > - r8712_write_mem(adapter, RTL8712_DMA_VOQ, > - fwhdr.fw_priv_sz + TXDESC_SIZE, (u8 )txdesc); > - > - / polling dmem code done */ > - i = 100; > - tmp16 = r8712_read16(adapter, TCR); > - while (((tmp16 & _DMEM_CODE_DONE) == 0) && (i > 0)) { > > - msleep(20); > - tmp16 = r8712_read16(adapter, TCR); > - i--; > - } > - if (i == 0) > - goto exit_fail; > - > - tmp8 = r8712_read8(adapter, 0x1025000A); > - if (tmp8 & BIT(4)) /* When boot from EEPROM, > - * & FW need more time to read EEPROM > - / > - i = 60; > - else / boot from EFUSE */ > - i = 30; > - tmp16 = r8712_read16(adapter, TCR); > - while (((tmp16 & _FWRDY) == 0) && (i > 0)) { > > - msleep(100); > - tmp16 = r8712_read16(adapter, TCR); > - i--; > - } > - if (i == 0) > - goto exit_fail; > - } else { > - goto exit_fail; > - } > - ret = _SUCCESS; > - > -exit_fail: > - kfree(tmpchar); > - return ret; > -} > - > -uint rtl8712_hal_init(struct _adapter padapter) > -{ > - u32 val32; > - int i; > - > - / r8712 firmware download */ > - if (rtl8712_dl_fw(padapter) != _SUCCESS) > - return _FAIL; > - > - netdev_info(padapter->pnetdev, "1 RCR=0x%x\n", > > - r8712_read32(padapter, RCR)); > - val32 = r8712_read32(padapter, RCR); > - r8712_write32(padapter, RCR, (val32 | BIT(26))); /* Enable RX TCP > - * Checksum offload > - */ > - netdev_info(padapter->pnetdev, "2 RCR=0x%x\n", > > - r8712_read32(padapter, RCR)); > - val32 = r8712_read32(padapter, RCR); > - r8712_write32(padapter, RCR, (val32 | BIT(25))); /* Append PHY status / > - val32 = r8712_read32(padapter, 0x10250040); > - r8712_write32(padapter, 0x10250040, (val32 & 0x00FFFFFF)); > - / for usb rx aggregation / > - r8712_write8(padapter, 0x102500B5, r8712_read8(padapter, 0x102500B5) | > - BIT(0)); / page = 128bytes / > - r8712_write8(padapter, 0x102500BD, r8712_read8(padapter, 0x102500BD) | > - BIT(7)); / enable usb rx aggregation / > - r8712_write8(padapter, 0x102500D9, 1); / TH=1 => means that invalidate > > - * usb rx aggregation > - / > - r8712_write8(padapter, 0x1025FE5B, 0x04); / 1.7ms/4 / > - / Fix the RX FIFO issue(USB error) */ > - r8712_write8(padapter, 0x1025fe5C, r8712_read8(padapter, 0x1025fe5C) > - | BIT(7)); > - for (i = 0; i < ETH_ALEN; i++) > - padapter->eeprompriv.mac_addr[i] = r8712_read8(padapter, > > - MACID + i); > - return _SUCCESS; > -} > - > -uint rtl8712_hal_deinit(struct _adapter padapter) > -{ > - r8712_write8(padapter, RF_CTRL, 0x00); > - / Turn off BB / > - msleep(20); > - / Turn off MAC / > - r8712_write8(padapter, SYS_CLKR + 1, 0x38); / Switch Control Path / > - r8712_write8(padapter, SYS_FUNC_EN + 1, 0x70); > - r8712_write8(padapter, PMC_FSM, 0x06); / Enable Loader Data Keep / > - r8712_write8(padapter, SYS_ISO_CTRL, 0xF9); / Isolation signals from > - * CORE, PLL > - / > - r8712_write8(padapter, SYS_ISO_CTRL + 1, 0xe8); / Enable EFUSE 1.2V / > - r8712_write8(padapter, AFE_PLL_CTRL, 0x00); / Disable AFE PLL. / > - r8712_write8(padapter, LDOA15_CTRL, 0x54); / Disable A15V / > - r8712_write8(padapter, SYS_FUNC_EN + 1, 0x50); / Disable E-Fuse 1.2V / > - r8712_write8(padapter, LDOV12D_CTRL, 0x24); / Disable LDO12(for CE) / > - r8712_write8(padapter, AFE_MISC, 0x30); / Disable AFE BG&MB / > - / Option for Disable 1.6V LDO. / > - r8712_write8(padapter, SPS0_CTRL, 0x56); / Disable 1.6V LDO / > - r8712_write8(padapter, SPS0_CTRL + 1, 0x43); / Set SW PFM */ > - return _SUCCESS; > -} > - > -uint rtl871x_hal_init(struct _adapter *padapter) > -{ > - padapter->hw_init_completed = false; > > - if (!padapter->halpriv.hal_bus_init) > > - return _FAIL; > - if (padapter->halpriv.hal_bus_init(padapter) != _SUCCESS) > > - return _FAIL; > - if (rtl8712_hal_init(padapter) == _SUCCESS) { > - padapter->hw_init_completed = true; > > - } else { > - padapter->hw_init_completed = false; > > - return _FAIL; > - } > - return _SUCCESS; > -} > diff --git a/drivers/staging/rtl8712/ieee80211.c b/drivers/staging/rtl8712/ieee80211.c > deleted file mode 100644 > index 7d8f1a29d18a..000000000000 > --- a/drivers/staging/rtl8712/ieee80211.c > +++ /dev/null > @@ -1,415 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/****************************************************************************** > - * ieee80211.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx. > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - *****************************************************************************/ > - > -#define _IEEE80211_C > - > -#include "drv_types.h" > -#include "ieee80211.h" > -#include "wifi.h" > -#include "osdep_service.h" > -#include "wlan_bssdef.h" > - > -static const u8 WPA_OUI_TYPE[] = {0x00, 0x50, 0xf2, 1}; > -static const u8 WPA_CIPHER_SUITE_NONE[] = {0x00, 0x50, 0xf2, 0}; > -static const u8 WPA_CIPHER_SUITE_WEP40[] = {0x00, 0x50, 0xf2, 1}; > -static const u8 WPA_CIPHER_SUITE_TKIP[] = {0x00, 0x50, 0xf2, 2}; > -static const u8 WPA_CIPHER_SUITE_CCMP[] = {0x00, 0x50, 0xf2, 4}; > -static const u8 WPA_CIPHER_SUITE_WEP104[] = {0x00, 0x50, 0xf2, 5}; > - > -static const u8 RSN_CIPHER_SUITE_NONE[] = {0x00, 0x0f, 0xac, 0}; > -static const u8 RSN_CIPHER_SUITE_WEP40[] = {0x00, 0x0f, 0xac, 1}; > -static const u8 RSN_CIPHER_SUITE_TKIP[] = {0x00, 0x0f, 0xac, 2}; > -static const u8 RSN_CIPHER_SUITE_CCMP[] = {0x00, 0x0f, 0xac, 4}; > -static const u8 RSN_CIPHER_SUITE_WEP104[] = {0x00, 0x0f, 0xac, 5}; > - > -/----------------------------------------------------------- > - * for adhoc-master to generate ie and provide supported-rate to fw > - *----------------------------------------------------------- > - */ > - > -static u8 WIFI_CCKRATES[] = { > - (IEEE80211_CCK_RATE_1MB | IEEE80211_BASIC_RATE_MASK), > - (IEEE80211_CCK_RATE_2MB | IEEE80211_BASIC_RATE_MASK), > - (IEEE80211_CCK_RATE_5MB | IEEE80211_BASIC_RATE_MASK), > - (IEEE80211_CCK_RATE_11MB | IEEE80211_BASIC_RATE_MASK) > -}; > - > -static u8 WIFI_OFDMRATES[] = { > - (IEEE80211_OFDM_RATE_6MB), > - (IEEE80211_OFDM_RATE_9MB), > - (IEEE80211_OFDM_RATE_12MB), > - (IEEE80211_OFDM_RATE_18MB), > - (IEEE80211_OFDM_RATE_24MB), > - (IEEE80211_OFDM_RATE_36MB), > - (IEEE80211_OFDM_RATE_48MB), > - (IEEE80211_OFDM_RATE_54MB) > -}; > - > -uint r8712_is_cckrates_included(u8 *rate) > -{ > - u32 i = 0; > - > - while (rate[i] != 0) { > - if ((((rate[i]) & 0x7f) == 2) || (((rate[i]) & 0x7f) == 4) || > - (((rate[i]) & 0x7f) == 11) || (((rate[i]) & 0x7f) == 22)) > - return true; > - i++; > - } > - return false; > -} > - > -uint r8712_is_cckratesonly_included(u8 rate) > -{ > - u32 i = 0; > - > - while (rate[i] != 0) { > - if ((((rate[i]) & 0x7f) != 2) && (((rate[i]) & 0x7f) != 4) && > - (((rate[i]) & 0x7f) != 11) && (((rate[i]) & 0x7f) != 22)) > - return false; > - i++; > - } > - return true; > -} > - > -/ r8712_set_ie will update frame length */ > -u8 *r8712_set_ie(u8 *pbuf, sint index, uint len, u8 *source, uint *frlen) > -{ > - *pbuf = (u8)index; > - *(pbuf + 1) = (u8)len; > - if (len > 0) > > - memcpy((void *)(pbuf + 2), (void *)source, len); > - *frlen = frlen + (len + 2); > - return pbuf + len + 2; > -} > - > -/ --------------------------------------------------------------------------- > - * index: the information element id index, limit is the limit for search > - * --------------------------------------------------------------------------- > - */ > -u8 *r8712_get_ie(u8 *pbuf, sint index, uint *len, sint limit) > -{ > - sint tmp, i; > - u8 *p; > - > - if (limit < 1) > - return NULL; > - p = pbuf; > - i = 0; > - *len = 0; > - while (1) { > - if (*p == index) { > - *len = *(p + 1); > - return p; > - } > - tmp = *(p + 1); > - p += (tmp + 2); > - i += (tmp + 2); > - if (i >= limit) > > - break; > - } > - return NULL; > -} > - > -static void set_supported_rate(u8 *rates, uint mode) > -{ > - memset(rates, 0, NDIS_802_11_LENGTH_RATES_EX); > - switch (mode) { > - case WIRELESS_11B: > - memcpy(rates, WIFI_CCKRATES, IEEE80211_CCK_RATE_LEN); > - break; > - case WIRELESS_11G: > - case WIRELESS_11A: > - memcpy(rates, WIFI_OFDMRATES, IEEE80211_NUM_OFDM_RATESLEN); > - break; > - case WIRELESS_11BG: > - memcpy(rates, WIFI_CCKRATES, IEEE80211_CCK_RATE_LEN); > - memcpy(rates + IEEE80211_CCK_RATE_LEN, WIFI_OFDMRATES, > - IEEE80211_NUM_OFDM_RATESLEN); > - break; > - } > -} > - > -static uint r8712_get_rateset_len(u8 *rateset) > -{ > - uint i = 0; > - > - while (1) { > - if ((rateset[i]) == 0) > - break; > - if (i > 12) > > - break; > - i++; > - } > - return i; > -} > - > -int r8712_generate_ie(struct registry_priv *registrypriv) > -{ > - int rate_len; > - uint sz = 0; > - struct wlan_bssid_ex *dev_network = ®istrypriv->dev_network; > > - u8 *ie = dev_network->IEs; > > - u16 beacon_period = (u16)dev_network->Configuration.BeaconPeriod; > > - > - /timestamp will be inserted by hardware/ > - sz += 8; > - ie += sz; > - /beacon interval : 2bytes/ > - *(__le16 *)ie = cpu_to_le16(beacon_period); > - sz += 2; > - ie += 2; > - /capability info/ > - *(u16 *)ie = 0; > - *(__le16 *)ie |= cpu_to_le16(WLAN_CAPABILITY_IBSS); > - if (registrypriv->preamble == PREAMBLE_SHORT) > > - *(__le16 *)ie |= cpu_to_le16(WLAN_CAPABILITY_SHORT_PREAMBLE); > - if (dev_network->Privacy) > > - *(__le16 *)ie |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY); > - sz += 2; > - ie += 2; > - /SSID/ > - ie = r8712_set_ie(ie, WLAN_EID_SSID, dev_network->Ssid.SsidLength, > > - dev_network->Ssid.Ssid, &sz); > > - /supported rates/ > - set_supported_rate(dev_network->rates, registrypriv->wireless_mode); > > - rate_len = r8712_get_rateset_len(dev_network->rates); > > - if (rate_len > 8) { > > - ie = r8712_set_ie(ie, WLAN_EID_SUPP_RATES, 8, > - dev_network->rates, &sz); > > - ie = r8712_set_ie(ie, WLAN_EID_EXT_SUPP_RATES, (rate_len - 8), > - (dev_network->rates + 8), &sz); > > - } else { > - ie = r8712_set_ie(ie, WLAN_EID_SUPP_RATES, > - rate_len, dev_network->rates, &sz); > > - } > - /DS parameter set/ > - ie = r8712_set_ie(ie, WLAN_EID_DS_PARAMS, 1, > - (u8 *)&dev_network->Configuration.DSConfig, &sz); > > - /IBSS Parameter Set/ > - ie = r8712_set_ie(ie, WLAN_EID_IBSS_PARAMS, 2, > - (u8 *)&dev_network->Configuration.ATIMWindow, &sz); > > - return sz; > -} > - > -unsigned char *r8712_get_wpa_ie(unsigned char *ie, uint *wpa_ie_len, int limit) > -{ > - u32 len; > - u16 val16; > - unsigned char wpa_oui_type[] = {0x00, 0x50, 0xf2, 0x01}; > - u8 *buf = ie; > - > - while (1) { > - buf = r8712_get_ie(buf, WPA_IE_ID, &len, limit); > - if (buf) { > - /check if oui matches.../ > - if (memcmp((buf + 2), wpa_oui_type, > - sizeof(wpa_oui_type))) > - goto check_next_ie; > - /check version.../ > - memcpy((u8 *)&val16, (buf + 6), sizeof(val16)); > - le16_to_cpus(&val16); > - if (val16 != 0x0001) > - goto check_next_ie; > - *wpa_ie_len = *(buf + 1); > - return buf; > - } > - *wpa_ie_len = 0; > - return NULL; > -check_next_ie: > - limit = limit - (buf - ie) - 2 - len; > - if (limit <= 0) > - break; > - buf += (2 + len); > - } > - *wpa_ie_len = 0; > - return NULL; > -} > - > -unsigned char *r8712_get_wpa2_ie(unsigned char *pie, uint *rsn_ie_len, > - int limit) > -{ > - return r8712_get_ie(pie, WPA2_IE_ID, rsn_ie_len, limit); > -} > - > -static int r8712_get_wpa_cipher_suite(u8 *s) > -{ > - if (!memcmp(s, (void *)WPA_CIPHER_SUITE_NONE, WPA_SELECTOR_LEN)) > - return WPA_CIPHER_NONE; > - if (!memcmp(s, (void *)WPA_CIPHER_SUITE_WEP40, WPA_SELECTOR_LEN)) > - return WPA_CIPHER_WEP40; > - if (!memcmp(s, (void *)WPA_CIPHER_SUITE_TKIP, WPA_SELECTOR_LEN)) > - return WPA_CIPHER_TKIP; > - if (!memcmp(s, (void *)WPA_CIPHER_SUITE_CCMP, WPA_SELECTOR_LEN)) > - return WPA_CIPHER_CCMP; > - if (!memcmp(s, (void *)WPA_CIPHER_SUITE_WEP104, WPA_SELECTOR_LEN)) > - return WPA_CIPHER_WEP104; > - return 0; > -} > - > -static int r8712_get_wpa2_cipher_suite(u8 *s) > -{ > - if (!memcmp(s, (void *)RSN_CIPHER_SUITE_NONE, RSN_SELECTOR_LEN)) > - return WPA_CIPHER_NONE; > - if (!memcmp(s, (void *)RSN_CIPHER_SUITE_WEP40, RSN_SELECTOR_LEN)) > - return WPA_CIPHER_WEP40; > - if (!memcmp(s, (void *)RSN_CIPHER_SUITE_TKIP, RSN_SELECTOR_LEN)) > - return WPA_CIPHER_TKIP; > - if (!memcmp(s, (void *)RSN_CIPHER_SUITE_CCMP, RSN_SELECTOR_LEN)) > - return WPA_CIPHER_CCMP; > - if (!memcmp(s, (void *)RSN_CIPHER_SUITE_WEP104, RSN_SELECTOR_LEN)) > - return WPA_CIPHER_WEP104; > - return 0; > -} > - > -int r8712_parse_wpa_ie(u8 *wpa_ie, int wpa_ie_len, int *group_cipher, > - int *pairwise_cipher) > -{ > - int i; > - int left, count; > - u8 pos; > - > - if (wpa_ie_len <= 0) { > - / No WPA IE - fail silently */ > - return -EINVAL; > - } > - if ((wpa_ie != WPA_IE_ID) || > - ((wpa_ie + 1) != (u8)(wpa_ie_len - 2)) || > - (memcmp(wpa_ie + 2, (void *)WPA_OUI_TYPE, WPA_SELECTOR_LEN))) > - return -EINVAL; > - pos = wpa_ie; > - pos += 8; > - left = wpa_ie_len - 8; > - /group_cipher/ > - if (left >= WPA_SELECTOR_LEN) { > > - *group_cipher = r8712_get_wpa_cipher_suite(pos); > - pos += WPA_SELECTOR_LEN; > - left -= WPA_SELECTOR_LEN; > - } else if (left > 0) { > > - return -EINVAL; > - } > - /pairwise_cipher/ > - if (left >= 2) { > > - count = le16_to_cpu(*(__le16 *)pos); > - pos += 2; > - left -= 2; > - if (count == 0 || left < count * WPA_SELECTOR_LEN) > - return -EINVAL; > - for (i = 0; i < count; i++) { > - *pairwise_cipher |= r8712_get_wpa_cipher_suite(pos); > - pos += WPA_SELECTOR_LEN; > - left -= WPA_SELECTOR_LEN; > - } > - } else if (left == 1) { > - return -EINVAL; > - } > - return 0; > -} > - > -int r8712_parse_wpa2_ie(u8 *rsn_ie, int rsn_ie_len, int *group_cipher, > - int *pairwise_cipher) > -{ > - int i; > - int left, count; > - u8 pos; > - > - if (rsn_ie_len <= 0) { > - / No RSN IE - fail silently */ > - return -EINVAL; > - } > - if ((rsn_ie != WPA2_IE_ID) || > - ((rsn_ie + 1) != (u8)(rsn_ie_len - 2))) > - return -EINVAL; > - pos = rsn_ie; > - pos += 4; > - left = rsn_ie_len - 4; > - /group_cipher/ > - if (left >= RSN_SELECTOR_LEN) { > > - *group_cipher = r8712_get_wpa2_cipher_suite(pos); > - pos += RSN_SELECTOR_LEN; > - left -= RSN_SELECTOR_LEN; > - } else if (left > 0) { > > - return -EINVAL; > - } > - /pairwise_cipher/ > - if (left >= 2) { > > - count = le16_to_cpu((__le16 )pos); > - pos += 2; > - left -= 2; > - if (count == 0 || left < count * RSN_SELECTOR_LEN) > - return -EINVAL; > - for (i = 0; i < count; i++) { > - pairwise_cipher |= r8712_get_wpa2_cipher_suite(pos); > - pos += RSN_SELECTOR_LEN; > - left -= RSN_SELECTOR_LEN; > - } > - } else if (left == 1) { > - return -EINVAL; > - } > - return 0; > -} > - > -int r8712_get_sec_ie(u8 in_ie, uint in_len, u8 rsn_ie, u16 rsn_len, > - u8 wpa_ie, u16 wpa_len) > -{ > - u8 authmode; > - u8 wpa_oui[4] = {0x0, 0x50, 0xf2, 0x01}; > - uint cnt; > - > - /Search required WPA or WPA2 IE and copy to sec_ie[ ]/ > - cnt = TIMESTAMP + BEACON_ITERVAL + CAPABILITY; > - while (cnt < in_len) { > - authmode = in_ie[cnt]; > - if ((authmode == WPA_IE_ID) && > - (!memcmp(&in_ie[cnt + 2], &wpa_oui[0], 4))) { > - memcpy(wpa_ie, &in_ie[cnt], in_ie[cnt + 1] + 2); > - wpa_len = in_ie[cnt + 1] + 2; > - cnt += in_ie[cnt + 1] + 2; /get next / > - } else { > - if (authmode == WPA2_IE_ID) { > - memcpy(rsn_ie, &in_ie[cnt], > - in_ie[cnt + 1] + 2); > - rsn_len = in_ie[cnt + 1] + 2; > - cnt += in_ie[cnt + 1] + 2; /get next/ > - } else { > - cnt += in_ie[cnt + 1] + 2; /get next/ > - } > - } > - } > - return rsn_len + wpa_len; > -} > - > -int r8712_get_wps_ie(u8 in_ie, uint in_len, u8 wps_ie, uint wps_ielen) > -{ > - int match; > - uint cnt; > - u8 eid, wps_oui[4] = {0x0, 0x50, 0xf2, 0x04}; > - > - cnt = 12; > - match = false; > - while (cnt < in_len) { > - eid = in_ie[cnt]; > - if ((eid == WPA_IE_ID) && > - (!memcmp(&in_ie[cnt + 2], wps_oui, 4))) { > - memcpy(wps_ie, &in_ie[cnt], in_ie[cnt + 1] + 2); > - wps_ielen = in_ie[cnt + 1] + 2; > - cnt += in_ie[cnt + 1] + 2; > - match = true; > - break; > - } > - cnt += in_ie[cnt + 1] + 2; / goto next / > - } > - return match; > -} > diff --git a/drivers/staging/rtl8712/ieee80211.h b/drivers/staging/rtl8712/ieee80211.h > deleted file mode 100644 > index 65ceaca9b51e..000000000000 > --- a/drivers/staging/rtl8712/ieee80211.h > +++ /dev/null > @@ -1,165 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/************************************************************ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > -#ifndef __IEEE80211_H > -#define __IEEE80211_H > - > -#include <linux/ieee80211.h> > > - > -#define IEEE_CMD_SET_WPA_PARAM 1 > -#define IEEE_CMD_SET_WPA_IE 2 > -#define IEEE_CMD_SET_ENCRYPTION 3 > -#define IEEE_CMD_MLME 4 > - > -#define IEEE_PARAM_WPA_ENABLED 1 > -#define IEEE_PARAM_TKIP_COUNTERMEASURES 2 > -#define IEEE_PARAM_DROP_UNENCRYPTED 3 > -#define IEEE_PARAM_PRIVACY_INVOKED 4 > -#define IEEE_PARAM_AUTH_ALGS 5 > -#define IEEE_PARAM_IEEE_802_1X 6 > -#define IEEE_PARAM_WPAX_SELECT 7 > - > -#define AUTH_ALG_OPEN_SYSTEM 0x1 > -#define AUTH_ALG_SHARED_KEY 0x2 > -#define AUTH_ALG_LEAP 0x00000004 > - > -#define IEEE_MLME_STA_DEAUTH 1 > -#define IEEE_MLME_STA_DISASSOC 2 > - > -#define IEEE_CRYPT_ERR_UNKNOWN_ALG 2 > -#define IEEE_CRYPT_ERR_UNKNOWN_ADDR 3 > -#define IEEE_CRYPT_ERR_CRYPT_INIT_FAILED 4 > -#define IEEE_CRYPT_ERR_KEY_SET_FAILED 5 > -#define IEEE_CRYPT_ERR_TX_KEY_SET_FAILED 6 > -#define IEEE_CRYPT_ERR_CARD_CONF_FAILED 7 > - > -#define IEEE_CRYPT_ALG_NAME_LEN 16 > - > -#define WPA_CIPHER_NONE BIT(0) > -#define WPA_CIPHER_WEP40 BIT(1) > -#define WPA_CIPHER_WEP104 BIT(2) > -#define WPA_CIPHER_TKIP BIT(3) > -#define WPA_CIPHER_CCMP BIT(4) > - > -#define WPA_SELECTOR_LEN 4 > -#define RSN_HEADER_LEN 4 > - > -#define RSN_SELECTOR_LEN 4 > - > -enum NETWORK_TYPE { > - WIRELESS_INVALID = 0, > - WIRELESS_11B = 1, > - WIRELESS_11G = 2, > - WIRELESS_11BG = (WIRELESS_11B | WIRELESS_11G), > - WIRELESS_11A = 4, > - WIRELESS_11N = 8, > - WIRELESS_11GN = (WIRELESS_11G | WIRELESS_11N), > - WIRELESS_11BGN = (WIRELESS_11B | WIRELESS_11G | WIRELESS_11N), > -}; > - > -struct ieee_param { > - u32 cmd; > - u8 sta_addr[ETH_ALEN]; > - union { > - struct { > - u8 name; > - u32 value; > - } wpa_param; > - struct { > - u32 len; > - u8 reserved[32]; > - u8 data[]; > - } wpa_ie; > - struct { > - int command; > - int reason_code; > - } mlme; > - struct { > - u8 alg[IEEE_CRYPT_ALG_NAME_LEN]; > - u8 set_tx; > - u32 err; > - u8 idx; > - u8 seq[8]; /* sequence counter (set: RX, get: TX) / > - u16 key_len; > - u8 key[]; > - } crypt; > - } u; > -}; > - > -#define MIN_FRAG_THRESHOLD 256U > -#define MAX_FRAG_THRESHOLD 2346U > - > -/ QoS,QOS / > -#define NORMAL_ACK 0 > - > -/ IEEE 802.11 defines / > - > -#define P80211_OUI_LEN 3 > - > -struct ieee80211_snap_hdr { > - u8 dsap; / always 0xAA / > - u8 ssap; / always 0xAA / > - u8 ctrl; / always 0x03 / > - u8 oui[P80211_OUI_LEN]; / organizational universal id / > -} __packed; > - > -#define SNAP_SIZE sizeof(struct ieee80211_snap_hdr) > - > -#define IEEE80211_CCK_RATE_LEN 4 > -#define IEEE80211_NUM_OFDM_RATESLEN 8 > - > -#define IEEE80211_CCK_RATE_1MB 0x02 > -#define IEEE80211_CCK_RATE_2MB 0x04 > -#define IEEE80211_CCK_RATE_5MB 0x0B > -#define IEEE80211_CCK_RATE_11MB 0x16 > -#define IEEE80211_OFDM_RATE_6MB 0x0C > -#define IEEE80211_OFDM_RATE_9MB 0x12 > -#define IEEE80211_OFDM_RATE_12MB 0x18 > -#define IEEE80211_OFDM_RATE_18MB 0x24 > -#define IEEE80211_OFDM_RATE_24MB 0x30 > -#define IEEE80211_OFDM_RATE_36MB 0x48 > -#define IEEE80211_OFDM_RATE_48MB 0x60 > -#define IEEE80211_OFDM_RATE_54MB 0x6C > -#define IEEE80211_BASIC_RATE_MASK 0x80 > - > -#define WEP_KEYS 4 > - > -/ MAX_RATES_LENGTH needs to be 12. The spec says 8, and many APs > - * only use 8, and then use extended rates for the remaining supported > - * rates. Other APs, however, stick all of their supported rates on the > - * main rates information element... > - / > -#define MAX_RATES_LENGTH ((u8)12) > -#define MAX_WPA_IE_LEN 128 > - > -struct registry_priv; > - > -u8 r8712_set_ie(u8 pbuf, sint index, uint len, u8 source, uint frlen); > -u8 r8712_get_ie(u8 pbuf, sint index, uint len, sint limit); > -unsigned char r8712_get_wpa_ie(unsigned char pie, uint rsn_ie_len, > - int limit); > -unsigned char r8712_get_wpa2_ie(unsigned char pie, uint rsn_ie_len, > - int limit); > -int r8712_parse_wpa_ie(u8 wpa_ie, int wpa_ie_len, int group_cipher, > - int pairwise_cipher); > -int r8712_parse_wpa2_ie(u8 wpa_ie, int wpa_ie_len, int group_cipher, > - int pairwise_cipher); > -int r8712_get_sec_ie(u8 in_ie, uint in_len, u8 rsn_ie, u16 rsn_len, > - u8 wpa_ie, u16 wpa_len); > -int r8712_get_wps_ie(u8 in_ie, uint in_len, u8 wps_ie, uint wps_ielen); > -int r8712_generate_ie(struct registry_priv pregistrypriv); > -uint r8712_is_cckrates_included(u8 rate); > -uint r8712_is_cckratesonly_included(u8 rate); > - > -#endif / IEEE80211_H / > - > diff --git a/drivers/staging/rtl8712/mlme_linux.c b/drivers/staging/rtl8712/mlme_linux.c > deleted file mode 100644 > index fcd2e0a9487a..000000000000 > --- a/drivers/staging/rtl8712/mlme_linux.c > +++ /dev/null > @@ -1,161 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/*********************************************** > - * mlme_linux.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx. > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define MLME_OSDEP_C > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "mlme_osdep.h" > -#include "rtl871x_security.h" > - > -static void sitesurvey_ctrl_handler(struct timer_list *t) > -{ > - struct _adapter *adapter = > - from_timer(adapter, t, > - mlmepriv.sitesurveyctrl.sitesurvey_ctrl_timer); > - > - _r8712_sitesurvey_ctrl_handler(adapter); > - mod_timer(&adapter->mlmepriv.sitesurveyctrl.sitesurvey_ctrl_timer, > > - jiffies + msecs_to_jiffies(3000)); > -} > - > -static void join_timeout_handler (struct timer_list *t) > -{ > - struct _adapter *adapter = > - from_timer(adapter, t, mlmepriv.assoc_timer); > - > - _r8712_join_timeout_handler(adapter); > -} > - > -static void _scan_timeout_handler (struct timer_list *t) > -{ > - struct _adapter *adapter = > - from_timer(adapter, t, mlmepriv.scan_to_timer); > - > - r8712_scan_timeout_handler(adapter); > -} > - > -static void dhcp_timeout_handler (struct timer_list *t) > -{ > - struct _adapter *adapter = > - from_timer(adapter, t, mlmepriv.dhcp_timer); > - > - _r8712_dhcp_timeout_handler(adapter); > -} > - > -static void wdg_timeout_handler (struct timer_list *t) > -{ > - struct _adapter *adapter = > - from_timer(adapter, t, mlmepriv.wdg_timer); > - > - r8712_wdg_wk_cmd(adapter); > - > - mod_timer(&adapter->mlmepriv.wdg_timer, > > - jiffies + msecs_to_jiffies(2000)); > -} > - > -void r8712_init_mlme_timer(struct _adapter *adapter) > -{ > - struct mlme_priv *mlmepriv = &adapter->mlmepriv; > > - > - timer_setup(&mlmepriv->assoc_timer, join_timeout_handler, 0); > > - timer_setup(&mlmepriv->sitesurveyctrl.sitesurvey_ctrl_timer, > > - sitesurvey_ctrl_handler, 0); > - timer_setup(&mlmepriv->scan_to_timer, _scan_timeout_handler, 0); > > - timer_setup(&mlmepriv->dhcp_timer, dhcp_timeout_handler, 0); > > - timer_setup(&mlmepriv->wdg_timer, wdg_timeout_handler, 0); > > -} > - > -void r8712_os_indicate_connect(struct _adapter *adapter) > -{ > - r8712_indicate_wx_assoc_event(adapter); > - netif_carrier_on(adapter->pnetdev); > > -} > - > -static struct RT_PMKID_LIST backup_PMKID_list[NUM_PMKID_CACHE]; > -void r8712_os_indicate_disconnect(struct _adapter *adapter) > -{ > - u8 backup_PMKID_index = 0; > - u8 backup_TKIP_countermeasure = 0x00; > - > - r8712_indicate_wx_disassoc_event(adapter); > - netif_carrier_off(adapter->pnetdev); > > - if (adapter->securitypriv.auth_algorithm == AUTH_8021x) { > > - /* We have to backup the PMK information for WiFi PMK Caching > - * test item. Backup the btkip_countermeasure information. > - * When the countermeasure is trigger, the driver have to > - * disconnect with AP for 60 seconds. > - */ > - > - memcpy(&backup_PMKID_list[0], > - &adapter->securitypriv.PMKIDList[0], > > - sizeof(struct RT_PMKID_LIST) * NUM_PMKID_CACHE); > - backup_PMKID_index = adapter->securitypriv.PMKIDIndex; > > - backup_TKIP_countermeasure = > - adapter->securitypriv.btkip_countermeasure; > > - memset((unsigned char *)&adapter->securitypriv, 0, > > - sizeof(struct security_priv)); > - timer_setup(&adapter->securitypriv.tkip_timer, > > - r8712_use_tkipkey_handler, 0); > - /* Restore the PMK information to securitypriv structure > - * for the following connection. > - */ > - memcpy(&adapter->securitypriv.PMKIDList[0], > > - &backup_PMKID_list[0], > - sizeof(struct RT_PMKID_LIST) * NUM_PMKID_CACHE); > - adapter->securitypriv.PMKIDIndex = backup_PMKID_index; > > - adapter->securitypriv.btkip_countermeasure = > > - backup_TKIP_countermeasure; > - } else { /reset values in securitypriv/ > - struct security_priv *sec_priv = &adapter->securitypriv; > > - > - sec_priv->auth_algorithm = AUTH_OPEN_SYSTEM; > > - sec_priv->privacy_algorithm = NO_PRIVACY; > > - sec_priv->PrivacyKeyIndex = 0; > > - sec_priv->XGrpPrivacy = NO_PRIVACY; > > - sec_priv->XGrpKeyid = 1; > > - sec_priv->ndisauthtype = Ndis802_11AuthModeOpen; > > - sec_priv->ndisencryptstatus = Ndis802_11WEPDisabled; > > - sec_priv->wps_phase = false; > > - } > -} > - > -void r8712_report_sec_ie(struct _adapter *adapter, u8 authmode, u8 *sec_ie) > -{ > - uint len; > - u8 *buff, *p, i; > - union iwreq_data wrqu; > - > - buff = NULL; > - if (authmode == WPA_IE_ID) { > - buff = kzalloc(IW_CUSTOM_MAX, GFP_ATOMIC); > - if (!buff) > - return; > - p = buff; > - p += sprintf(p, "ASSOCINFO(ReqIEs="); > - len = sec_ie[1] + 2; > - len = (len < IW_CUSTOM_MAX) ? len : IW_CUSTOM_MAX; > - for (i = 0; i < len; i++) > - p += sprintf(p, "%02x", sec_ie[i]); > - p += sprintf(p, ")"); > - memset(&wrqu, 0, sizeof(wrqu)); > - wrqu.data.length = p - buff; > - wrqu.data.length = (wrqu.data.length < IW_CUSTOM_MAX) ? > - wrqu.data.length : IW_CUSTOM_MAX; > - wireless_send_event(adapter->pnetdev, IWEVCUSTOM, &wrqu, buff); > > - kfree(buff); > - } > -} > diff --git a/drivers/staging/rtl8712/mlme_osdep.h b/drivers/staging/rtl8712/mlme_osdep.h > deleted file mode 100644 > index a02c782588dd..000000000000 > --- a/drivers/staging/rtl8712/mlme_osdep.h > +++ /dev/null > @@ -1,31 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - *******/ > -#ifndef _MLME_OSDEP_H > -#define _MLME_OSDEP_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > - > -void r8712_init_mlme_timer(struct _adapter padapter); > -void r8712_os_indicate_disconnect(struct _adapter adapter); > -void r8712_os_indicate_connect(struct _adapter adapter); > -void r8712_report_sec_ie(struct _adapter adapter, u8 authmode, u8 sec_ie); > -int r8712_recv_indicatepkts_in_order(struct _adapter adapter, > - struct recv_reorder_ctrl precvreorder_ctrl, > - int bforced); > -void r8712_indicate_wx_assoc_event(struct _adapter padapter); > -void r8712_indicate_wx_disassoc_event(struct _adapter padapter); > - > -#endif /MLME_OSDEP_H/ > - > diff --git a/drivers/staging/rtl8712/mp_custom_oid.h b/drivers/staging/rtl8712/mp_custom_oid.h > deleted file mode 100644 > index a9fac87fcabc..000000000000 > --- a/drivers/staging/rtl8712/mp_custom_oid.h > +++ /dev/null > @@ -1,287 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - **/ > -#ifndef __CUSTOM_OID_H > -#define __CUSTOM_OID_H > - > -/ 0xFF818000 - 0xFF81802F RTL8180 Mass Production Kit > - * 0xFF818500 - 0xFF81850F RTL8185 Setup Utility > - * 0xFF818580 - 0xFF81858F RTL8185 Phy Status Utility > - * > - * by Owen for Production Kit > - * For Production Kit with Agilent Equipments > - * in order to make our custom oids hopefully somewhat unique > - * we will use 0xFF (indicating implementation specific OID) > - * 81(first byte of non zero Realtek unique identifier) > - * 80 (second byte of non zero Realtek unique identifier) > - * XX (the custom OID number - providing 255 possible custom oids) > - / > -#define OID_RT_PRO_RESET_DUT 0xFF818000 > -#define OID_RT_PRO_SET_DATA_RATE 0xFF818001 > -#define OID_RT_PRO_START_TEST 0xFF818002 > -#define OID_RT_PRO_STOP_TEST 0xFF818003 > -#define OID_RT_PRO_SET_PREAMBLE 0xFF818004 > -#define OID_RT_PRO_SET_SCRAMBLER 0xFF818005 > -#define OID_RT_PRO_SET_FILTER_BB 0xFF818006 > -#define OID_RT_PRO_SET_MANUAL_DIVERSITY_BB 0xFF818007 > -#define OID_RT_PRO_SET_CHANNEL_DIRECT_CALL 0xFF818008 > -#define OID_RT_PRO_SET_SLEEP_MODE_DIRECT_CALL 0xFF818009 > -#define OID_RT_PRO_SET_WAKE_MODE_DIRECT_CALL 0xFF81800A > - > -#define OID_RT_PRO_SET_TX_ANTENNA_BB 0xFF81800D > -#define OID_RT_PRO_SET_ANTENNA_BB 0xFF81800E > -#define OID_RT_PRO_SET_CR_SCRAMBLER 0xFF81800F > -#define OID_RT_PRO_SET_CR_NEW_FILTER 0xFF818010 > -#define OID_RT_PRO_SET_TX_POWER_CONTROL 0xFF818011 > -#define OID_RT_PRO_SET_CR_TX_CONFIG 0xFF818012 > -#define OID_RT_PRO_GET_TX_POWER_CONTROL 0xFF818013 > -#define OID_RT_PRO_GET_CR_SIGNAL_QUALITY 0xFF818014 > -#define OID_RT_PRO_SET_CR_SETPOINT 0xFF818015 > -#define OID_RT_PRO_SET_INTEGRATOR 0xFF818016 > -#define OID_RT_PRO_SET_SIGNAL_QUALITY 0xFF818017 > -#define OID_RT_PRO_GET_INTEGRATOR 0xFF818018 > -#define OID_RT_PRO_GET_SIGNAL_QUALITY 0xFF818019 > -#define OID_RT_PRO_QUERY_EEPROM_TYPE 0xFF81801A > -#define OID_RT_PRO_WRITE_MAC_ADDRESS 0xFF81801B > -#define OID_RT_PRO_READ_MAC_ADDRESS 0xFF81801C > -#define OID_RT_PRO_WRITE_CIS_DATA 0xFF81801D > -#define OID_RT_PRO_READ_CIS_DATA 0xFF81801E > -#define OID_RT_PRO_WRITE_POWER_CONTROL 0xFF81801F > -#define OID_RT_PRO_READ_POWER_CONTROL 0xFF818020 > -#define OID_RT_PRO_WRITE_EEPROM 0xFF818021 > -#define OID_RT_PRO_READ_EEPROM 0xFF818022 > -#define OID_RT_PRO_RESET_TX_PACKET_SENT 0xFF818023 > -#define OID_RT_PRO_QUERY_TX_PACKET_SENT 0xFF818024 > -#define OID_RT_PRO_RESET_RX_PACKET_RECEIVED 0xFF818025 > -#define OID_RT_PRO_QUERY_RX_PACKET_RECEIVED 0xFF818026 > -#define OID_RT_PRO_QUERY_RX_PACKET_CRC32_ERROR 0xFF818027 > -#define OID_RT_PRO_QUERY_CURRENT_ADDRESS 0xFF818028 > -#define OID_RT_PRO_QUERY_PERMANENT_ADDRESS 0xFF818029 > -#define OID_RT_PRO_SET_PHILIPS_RF_PARAMETERS 0xFF81802A > -#define OID_RT_PRO_RECEIVE_PACKET 0xFF81802C > -#define OID_RT_PRO_WRITE_EEPROM_BYTE 0xFF81802D > -#define OID_RT_PRO_READ_EEPROM_BYTE 0xFF81802E > -#define OID_RT_PRO_SET_MODULATION 0xFF81802F > -#define OID_RT_DRIVER_OPTION 0xFF818080 > -#define OID_RT_RF_OFF 0xFF818081 > -#define OID_RT_AUTH_STATUS 0xFF818082 > -#define OID_RT_PRO_SET_CONTINUOUS_TX 0xFF81800B > -#define OID_RT_PRO_SET_SINGLE_CARRIER_TX 0xFF81800C > -#define OID_RT_PRO_SET_CARRIER_SUPPRESSION_TX 0xFF81802B > -#define OID_RT_PRO_SET_SINGLE_TONE_TX 0xFF818043 > -#define OID_RT_UTILITY_FALSE_ALARM_COUNTERS 0xFF818580 > -#define OID_RT_UTILITY_SELECT_DEBUG_MODE 0xFF818581 > -#define OID_RT_UTILITY_SELECT_SUBCARRIER_NUMBER 0xFF818582 > -#define OID_RT_UTILITY_GET_RSSI_STATUS 0xFF818583 > -#define OID_RT_UTILITY_GET_FRAME_DETECTION_STATUS 0xFF818584 > -#define OID_RT_UTILITY_GET_AGC_AND_FREQUENCY_OFFSET_ESTIMATION_STATUS \ > - 0xFF818585 > -#define OID_RT_UTILITY_GET_CHANNEL_ESTIMATION_STATUS 0xFF818586 > -#define OID_RT_WIRELESS_MODE 0xFF818500 > -#define OID_RT_SUPPORTED_RATES 0xFF818501 > -#define OID_RT_DESIRED_RATES 0xFF818502 > -#define OID_RT_WIRELESS_MODE_STARTING_ADHOC 0xFF818503 > -#define OID_RT_GET_CONNECT_STATE 0xFF030001 > -#define OID_RT_RESCAN 0xFF030002 > -#define OID_RT_SET_KEY_LENGTH 0xFF030003 > -#define OID_RT_SET_DEFAULT_KEY_ID 0xFF030004 > -#define OID_RT_SET_CHANNEL 0xFF010182 > -#define OID_RT_SET_SNIFFER_MODE 0xFF010183 > -#define OID_RT_GET_SIGNAL_QUALITY 0xFF010184 > -#define OID_RT_GET_SMALL_PACKET_CRC 0xFF010185 > -#define OID_RT_GET_MIDDLE_PACKET_CRC 0xFF010186 > -#define OID_RT_GET_LARGE_PACKET_CRC 0xFF010187 > -#define OID_RT_GET_TX_RETRY 0xFF010188 > -#define OID_RT_GET_RX_RETRY 0xFF010189 > -#define OID_RT_PRO_SET_FW_DIG_STATE 0xFF01018A > -#define OID_RT_PRO_SET_FW_RA_STATE 0xFF01018B > -#define OID_RT_GET_RX_TOTAL_PACKET 0xFF010190 > -#define OID_RT_GET_TX_BEACON_OK 0xFF010191 > -#define OID_RT_GET_TX_BEACON_ERR 0xFF010192 > -#define OID_RT_GET_RX_ICV_ERR 0xFF010193 > -#define OID_RT_SET_ENCRYPTION_ALGORITHM 0xFF010194 > -#define OID_RT_SET_NO_AUTO_RESCAN 0xFF010195 > -#define OID_RT_GET_PREAMBLE_MODE 0xFF010196 > -#define OID_RT_GET_DRIVER_UP_DELTA_TIME 0xFF010197 > -#define OID_RT_GET_AP_IP 0xFF010198 > -#define OID_RT_GET_CHANNELPLAN 0xFF010199 > -#define OID_RT_SET_PREAMBLE_MODE 0xFF01019A > -#define OID_RT_SET_BCN_INTVL 0xFF01019B > -#define OID_RT_GET_RF_VENDER 0xFF01019C > -#define OID_RT_DEDICATE_PROBE 0xFF01019D > -#define OID_RT_PRO_RX_FILTER_PATTERN 0xFF01019E > -#define OID_RT_GET_DCST_CURRENT_THRESHOLD 0xFF01019F > -#define OID_RT_GET_CCA_ERR 0xFF0101A0 > -#define OID_RT_GET_CCA_UPGRADE_THRESHOLD 0xFF0101A1 > -#define OID_RT_GET_CCA_FALLBACK_THRESHOLD 0xFF0101A2 > -#define OID_RT_GET_CCA_UPGRADE_EVALUATE_TIMES 0xFF0101A3 > -#define OID_RT_GET_CCA_FALLBACK_EVALUATE_TIMES 0xFF0101A4 > -#define OID_RT_SET_RATE_ADAPTIVE 0xFF0101A5 > -#define OID_RT_GET_DCST_EVALUATE_PERIOD 0xFF0101A5 > -#define OID_RT_GET_DCST_TIME_UNIT_INDEX 0xFF0101A6 > -#define OID_RT_GET_TOTAL_TX_BYTES 0xFF0101A7 > -#define OID_RT_GET_TOTAL_RX_BYTES 0xFF0101A8 > -#define OID_RT_CURRENT_TX_POWER_LEVEL 0xFF0101A9 > -#define OID_RT_GET_ENC_KEY_MISMATCH_COUNT 0xFF0101AA > -#define OID_RT_GET_ENC_KEY_MATCH_COUNT 0xFF0101AB > -#define OID_RT_GET_CHANNEL 0xFF0101AC > -#define OID_RT_SET_CHANNELPLAN 0xFF0101AD > -#define OID_RT_GET_HARDWARE_RADIO_OFF 0xFF0101AE > -#define OID_RT_CHANNELPLAN_BY_COUNTRY 0xFF0101AF > -#define OID_RT_SCAN_AVAILABLE_BSSID 0xFF0101B0 > -#define OID_RT_GET_HARDWARE_VERSION 0xFF0101B1 > -#define OID_RT_GET_IS_ROAMING 0xFF0101B2 > -#define OID_RT_GET_IS_PRIVACY 0xFF0101B3 > -#define OID_RT_GET_KEY_MISMATCH 0xFF0101B4 > -#define OID_RT_SET_RSSI_ROAM_TRAFFIC_TH 0xFF0101B5 > -#define OID_RT_SET_RSSI_ROAM_SIGNAL_TH 0xFF0101B6 > -#define OID_RT_RESET_LOG 0xFF0101B7 > -#define OID_RT_GET_LOG 0xFF0101B8 > -#define OID_RT_SET_INDICATE_HIDDEN_AP 0xFF0101B9 > -#define OID_RT_GET_HEADER_FAIL 0xFF0101BA > -#define OID_RT_SUPPORTED_WIRELESS_MODE 0xFF0101BB > -#define OID_RT_GET_CHANNEL_LIST 0xFF0101BC > -#define OID_RT_GET_SCAN_IN_PROGRESS 0xFF0101BD > -#define OID_RT_GET_TX_INFO 0xFF0101BE > -#define OID_RT_RF_READ_WRITE_OFFSET 0xFF0101BF > -#define OID_RT_RF_READ_WRITE 0xFF0101C0 > -#define OID_RT_FORCED_DATA_RATE 0xFF0101C1 > -#define OID_RT_WIRELESS_MODE_FOR_SCAN_LIST 0xFF0101C2 > -#define OID_RT_GET_BSS_WIRELESS_MODE 0xFF0101C3 > -#define OID_RT_SCAN_WITH_MAGIC_PACKET 0xFF0101C4 > -#define OID_RT_PRO_RX_FILTER 0xFF0111C0 > -#define OID_CE_USB_WRITE_REGISTRY 0xFF0111C1 > -#define OID_CE_USB_READ_REGISTRY 0xFF0111C2 > -#define OID_RT_PRO_SET_INITIAL_GAIN 0xFF0111C3 > -#define OID_RT_PRO_SET_BB_RF_STANDBY_MODE 0xFF0111C4 > -#define OID_RT_PRO_SET_BB_RF_SHUTDOWN_MODE 0xFF0111C5 > -#define OID_RT_PRO_SET_TX_CHARGE_PUMP 0xFF0111C6 > -#define OID_RT_PRO_SET_RX_CHARGE_PUMP 0xFF0111C7 > -#define OID_RT_PRO_RF_WRITE_REGISTRY 0xFF0111C8 > -#define OID_RT_PRO_RF_READ_REGISTRY 0xFF0111C9 > -#define OID_RT_PRO_QUERY_RF_TYPE 0xFF0111CA > -#define OID_RT_AP_GET_ASSOCIATED_STATION_LIST 0xFF010300 > -#define OID_RT_AP_GET_CURRENT_TIME_STAMP 0xFF010301 > -#define OID_RT_AP_SWITCH_INTO_AP_MODE 0xFF010302 > -#define OID_RT_AP_SET_DTIM_PERIOD 0xFF010303 > -#define OID_RT_AP_SUPPORTED 0xFF010304 > -#define OID_RT_AP_SET_PASSPHRASE 0xFF010305 > -#define OID_RT_PRO8187_WI_POLL 0xFF818780 > -#define OID_RT_PRO_WRITE_BB_REG 0xFF818781 > -#define OID_RT_PRO_READ_BB_REG 0xFF818782 > -#define OID_RT_PRO_WRITE_RF_REG 0xFF818783 > -#define OID_RT_PRO_READ_RF_REG 0xFF818784 > -#define OID_RT_MH_VENDER_ID 0xFFEDC100 > -#define OID_RT_PRO8711_JOIN_BSS 0xFF871100 > -#define OID_RT_PRO_READ_REGISTER 0xFF871101 > -#define OID_RT_PRO_WRITE_REGISTER 0xFF871102 > -#define OID_RT_PRO_BURST_READ_REGISTER 0xFF871103 > -#define OID_RT_PRO_BURST_WRITE_REGISTER 0xFF871104 > -#define OID_RT_PRO_WRITE_TXCMD 0xFF871105 > -#define OID_RT_PRO_READ16_EEPROM 0xFF871106 > -#define OID_RT_PRO_WRITE16_EEPROM 0xFF871107 > -#define OID_RT_PRO_H2C_SET_COMMAND 0xFF871108 > -#define OID_RT_PRO_H2C_QUERY_RESULT 0xFF871109 > -#define OID_RT_PRO8711_WI_POLL 0xFF87110A > -#define OID_RT_PRO8711_PKT_LOSS 0xFF87110B > -#define OID_RT_RD_ATTRIB_MEM 0xFF87110C > -#define OID_RT_WR_ATTRIB_MEM 0xFF87110D > -/Method 2 for H2C/C2H/ > -#define OID_RT_PRO_H2C_CMD_MODE 0xFF871110 > -#define OID_RT_PRO_H2C_CMD_RSP_MODE 0xFF871111 > -#define OID_RT_PRO_H2C_CMD_EVENT_MODE 0xFF871112 > -#define OID_RT_PRO_WAIT_C2H_EVENT 0xFF871113 > -#define OID_RT_PRO_RW_ACCESS_PROTOCOL_TEST 0xFF871114 > -#define OID_RT_PRO_SCSI_ACCESS_TEST 0xFF871115 > -#define OID_RT_PRO_SCSI_TCPIPOFFLOAD_OUT 0xFF871116 > -#define OID_RT_PRO_SCSI_TCPIPOFFLOAD_IN 0xFF871117 > -#define OID_RT_RRO_RX_PKT_VIA_IOCTRL 0xFF871118 > -#define OID_RT_RRO_RX_PKTARRAY_VIA_IOCTRL 0xFF871119 > -#define OID_RT_RPO_SET_PWRMGT_TEST 0xFF87111A > -#define OID_RT_PRO_QRY_PWRMGT_TEST 0XFF87111B > -#define OID_RT_RPO_ASYNC_RWIO_TEST 0xFF87111C > -#define OID_RT_RPO_ASYNC_RWIO_POLL 0xFF87111D > -#define OID_RT_PRO_SET_RF_INTFS 0xFF87111E > -#define OID_RT_POLL_RX_STATUS 0xFF87111F > -#define OID_RT_PRO_CFG_DEBUG_MESSAGE 0xFF871120 > -#define OID_RT_PRO_SET_DATA_RATE_EX 0xFF871121 > -#define OID_RT_PRO_SET_BASIC_RATE 0xFF871122 > -#define OID_RT_PRO_READ_TSSI 0xFF871123 > -#define OID_RT_PRO_SET_POWER_TRACKING 0xFF871124 > -#define OID_RT_PRO_QRY_PWRSTATE 0xFF871150 > -#define OID_RT_PRO_SET_PWRSTATE 0xFF871151 > -/Method 2 , using workitem / > -#define OID_RT_SET_READ_REG 0xFF871181 > -#define OID_RT_SET_WRITE_REG 0xFF871182 > -#define OID_RT_SET_BURST_READ_REG 0xFF871183 > -#define OID_RT_SET_BURST_WRITE_REG 0xFF871184 > -#define OID_RT_SET_WRITE_TXCMD 0xFF871185 > -#define OID_RT_SET_READ16_EEPROM 0xFF871186 > -#define OID_RT_SET_WRITE16_EEPROM 0xFF871187 > -#define OID_RT_QRY_POLL_WKITEM 0xFF871188 > - > -/For SDIO INTERFACE only/ > -#define OID_RT_PRO_SYNCPAGERW_SRAM 0xFF8711A0 > -#define OID_RT_PRO_871X_DRV_EXT 0xFF8711A1 > - > -/For USB INTERFACE only/ > -#define OID_RT_PRO_USB_VENDOR_REQ 0xFF8711B0 > -#define OID_RT_PRO_SCSI_AUTO_TEST 0xFF8711B1 > -#define OID_RT_PRO_USB_MAC_AC_FIFO_WRITE 0xFF8711B2 > -#define OID_RT_PRO_USB_MAC_RX_FIFO_READ 0xFF8711B3 > -#define OID_RT_PRO_USB_MAC_RX_FIFO_POLLING 0xFF8711B4 > - > -#define OID_RT_PRO_H2C_SET_RATE_TABLE 0xFF8711FB > -#define OID_RT_PRO_H2C_GET_RATE_TABLE 0xFF8711FC > -#define OID_RT_PRO_H2C_C2H_LBK_TEST 0xFF8711FE > - > -#define OID_RT_PRO_ENCRYPTION_CTRL 0xFF871200 > -#define OID_RT_PRO_ADD_STA_INFO 0xFF871201 > -#define OID_RT_PRO_DELE_STA_INFO 0xFF871202 > -#define OID_RT_PRO_QUERY_DR_VARIABLE 0xFF871203 > - > -#define OID_RT_PRO_RX_PACKET_TYPE 0xFF871204 > - > -#define OID_RT_PRO_READ_EFUSE 0xFF871205 > -#define OID_RT_PRO_WRITE_EFUSE 0xFF871206 > -#define OID_RT_PRO_RW_EFUSE_PGPKT 0xFF871207 > -#define OID_RT_GET_EFUSE_CURRENT_SIZE 0xFF871208 > - > -#define OID_RT_SET_BANDWIDTH 0xFF871209 > -#define OID_RT_SET_CRYSTAL_CAP 0xFF87120A > - > -#define OID_RT_SET_RX_PACKET_TYPE 0xFF87120B > - > -#define OID_RT_GET_EFUSE_MAX_SIZE 0xFF87120C > - > -#define OID_RT_PRO_SET_TX_AGC_OFFSET 0xFF87120D > - > -#define OID_RT_PRO_SET_PKT_TEST_MODE 0xFF87120E > - > -#define OID_RT_PRO_FOR_EVM_TEST_SETTING 0xFF87120F > - > -#define OID_RT_PRO_GET_THERMAL_METER 0xFF871210 > - > -#define OID_RT_RESET_PHY_RX_PACKET_COUNT 0xFF871211 > -#define OID_RT_GET_PHY_RX_PACKET_RECEIVED 0xFF871212 > -#define OID_RT_GET_PHY_RX_PACKET_CRC32_ERROR 0xFF871213 > - > -#define OID_RT_SET_POWER_DOWN 0xFF871214 > - > -#define OID_RT_GET_POWER_MODE 0xFF871215 > - > -#define OID_RT_PRO_EFUSE 0xFF871216 > -#define OID_RT_PRO_EFUSE_MAP 0xFF871217 > - > -#endif /#ifndef __CUSTOM_OID_H / > - > diff --git a/drivers/staging/rtl8712/os_intfs.c b/drivers/staging/rtl8712/os_intfs.c > deleted file mode 100644 > index 1b11f8b04e13..000000000000 > --- a/drivers/staging/rtl8712/os_intfs.c > +++ /dev/null > @@ -1,482 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/ > - * os_intfs.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx. > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define OS_INTFS_C > - > -#include <linux/module.h> > > -#include <linux/kthread.h> > > -#include <linux/firmware.h> > > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "xmit_osdep.h" > -#include "recv_osdep.h" > -#include "rtl871x_ioctl.h" > -#include "usb_osintf.h" > - > -MODULE_LICENSE("GPL"); > -MODULE_DESCRIPTION("rtl871x wireless lan driver"); > -MODULE_AUTHOR("Larry Finger"); > - > -static char ifname[IFNAMSIZ] = "wlan%d"; > - > -/* module param defaults / > -static int chip_version = RTL8712_2ndCUT; > -static int rfintfs = HWPI; > -static int lbkmode = RTL8712_AIR_TRX; > -static int hci = RTL8712_USB; > -static int ampdu_enable = 1;/for enable tx_ampdu/ > - > -/ The video_mode variable is for video mode./ > -/ It may be specify when inserting module with video_mode=1 parameter./ > -static int video_mode = 1; / enable video mode*/ > - > -/Ndis802_11Infrastructure; infra, ad-hoc, auto/ > -static int network_mode = Ndis802_11IBSS; > -static int channel = 1;/ad-hoc support requirement/ > -static int wireless_mode = WIRELESS_11BG; > -static int vrtl_carrier_sense = AUTO_VCS; > -static int vcs_type = RTS_CTS; > -static int frag_thresh = 2346; > -static int preamble = PREAMBLE_LONG;/long, short, auto/ > -static int scan_mode = 1;/active, passive/ > -static int adhoc_tx_pwr = 1; > -static int soft_ap; > -static int smart_ps = 1; > -static int power_mgnt = PS_MODE_ACTIVE; > -static int radio_enable = 1; > -static int long_retry_lmt = 7; > -static int short_retry_lmt = 7; > -static int busy_thresh = 40; > -static int ack_policy = NORMAL_ACK; > -static int mp_mode; > -static int software_encrypt; > -static int software_decrypt; > - > -static int wmm_enable;/* default is set to disable the wmm./ > -static int uapsd_enable; > -static int uapsd_max_sp = NO_LIMIT; > -static int uapsd_acbk_en; > -static int uapsd_acbe_en; > -static int uapsd_acvi_en; > -static int uapsd_acvo_en; > - > -static int ht_enable = 1; > -static int cbw40_enable = 1; > -static int rf_config = RTL8712_RF_1T2R; / 1T2R*/ > -static int low_power; > -/* mac address to use instead of the one stored in Efuse */ > -char *r8712_initmac; > -static char initmac; > -/ if wifi_test = 1, driver will disable the turbo mode and pass it to > - * firmware private. > - */ > -static int wifi_test; > - > -module_param_string(ifname, ifname, sizeof(ifname), 0644); > -module_param(wifi_test, int, 0644); > -module_param(initmac, charp, 0644); > -module_param(video_mode, int, 0644); > -module_param(chip_version, int, 0644); > -module_param(rfintfs, int, 0644); > -module_param(lbkmode, int, 0644); > -module_param(hci, int, 0644); > -module_param(network_mode, int, 0644); > -module_param(channel, int, 0644); > -module_param(mp_mode, int, 0644); > -module_param(wmm_enable, int, 0644); > -module_param(vrtl_carrier_sense, int, 0644); > -module_param(vcs_type, int, 0644); > -module_param(busy_thresh, int, 0644); > -module_param(ht_enable, int, 0644); > -module_param(cbw40_enable, int, 0644); > -module_param(ampdu_enable, int, 0644); > -module_param(rf_config, int, 0644); > -module_param(power_mgnt, int, 0644); > -module_param(low_power, int, 0644); > - > -MODULE_PARM_DESC(ifname, " Net interface name, wlan%d=default"); > -MODULE_PARM_DESC(initmac, "MAC-Address, default: use FUSE"); > - > -static int netdev_open(struct net_device *pnetdev); > -static int netdev_close(struct net_device *pnetdev); > - > -static void loadparam(struct _adapter *padapter, struct net_device *pnetdev) > -{ > - struct registry_priv *registry_par = &padapter->registrypriv; > > - > - registry_par->chip_version = (u8)chip_version; > > - registry_par->rfintfs = (u8)rfintfs; > > - registry_par->lbkmode = (u8)lbkmode; > > - registry_par->hci = (u8)hci; > > - registry_par->network_mode = (u8)network_mode; > > - memcpy(registry_par->ssid.Ssid, "ANY", 3); > > - registry_par->ssid.SsidLength = 3; > > - registry_par->channel = (u8)channel; > > - registry_par->wireless_mode = (u8)wireless_mode; > > - registry_par->vrtl_carrier_sense = (u8)vrtl_carrier_sense; > > - registry_par->vcs_type = (u8)vcs_type; > > - registry_par->frag_thresh = (u16)frag_thresh; > > - registry_par->preamble = (u8)preamble; > > - registry_par->scan_mode = (u8)scan_mode; > > - registry_par->adhoc_tx_pwr = (u8)adhoc_tx_pwr; > > - registry_par->soft_ap = (u8)soft_ap; > > - registry_par->smart_ps = (u8)smart_ps; > > - registry_par->power_mgnt = (u8)power_mgnt; > > - registry_par->radio_enable = (u8)radio_enable; > > - registry_par->long_retry_lmt = (u8)long_retry_lmt; > > - registry_par->short_retry_lmt = (u8)short_retry_lmt; > > - registry_par->busy_thresh = (u16)busy_thresh; > > - registry_par->ack_policy = (u8)ack_policy; > > - registry_par->mp_mode = (u8)mp_mode; > > - registry_par->software_encrypt = (u8)software_encrypt; > > - registry_par->software_decrypt = (u8)software_decrypt; > > - /UAPSD/ > - registry_par->wmm_enable = (u8)wmm_enable; > > - registry_par->uapsd_enable = (u8)uapsd_enable; > > - registry_par->uapsd_max_sp = (u8)uapsd_max_sp; > > - registry_par->uapsd_acbk_en = (u8)uapsd_acbk_en; > > - registry_par->uapsd_acbe_en = (u8)uapsd_acbe_en; > > - registry_par->uapsd_acvi_en = (u8)uapsd_acvi_en; > > - registry_par->uapsd_acvo_en = (u8)uapsd_acvo_en; > > - registry_par->ht_enable = (u8)ht_enable; > > - registry_par->cbw40_enable = (u8)cbw40_enable; > > - registry_par->ampdu_enable = (u8)ampdu_enable; > > - registry_par->rf_config = (u8)rf_config; > > - registry_par->low_power = (u8)low_power; > > - registry_par->wifi_test = (u8)wifi_test; > > - r8712_initmac = initmac; > -} > - > -static int r871x_net_set_mac_address(struct net_device *pnetdev, void *p) > -{ > - struct _adapter *padapter = netdev_priv(pnetdev); > - struct sockaddr *addr = p; > - > - if (!padapter->bup) > > - eth_hw_addr_set(pnetdev, addr->sa_data); > > - return 0; > -} > - > -static struct net_device_stats *r871x_net_get_stats(struct net_device *pnetdev) > -{ > - struct _adapter *padapter = netdev_priv(pnetdev); > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - struct recv_priv *precvpriv = &padapter->recvpriv; > > - > - padapter->stats.tx_packets = pxmitpriv->tx_pkts; > > - padapter->stats.rx_packets = precvpriv->rx_pkts; > > - padapter->stats.tx_dropped = pxmitpriv->tx_drop; > > - padapter->stats.rx_dropped = precvpriv->rx_drop; > > - padapter->stats.tx_bytes = pxmitpriv->tx_bytes; > > - padapter->stats.rx_bytes = precvpriv->rx_bytes; > > - return &padapter->stats; > > -} > - > -static const struct net_device_ops rtl8712_netdev_ops = { > - .ndo_open = netdev_open, > - .ndo_stop = netdev_close, > - .ndo_start_xmit = r8712_xmit_entry, > - .ndo_set_mac_address = r871x_net_set_mac_address, > - .ndo_get_stats = r871x_net_get_stats, > - .ndo_do_ioctl = r871x_ioctl, > -}; > - > -struct net_device *r8712_init_netdev(void) > -{ > - struct _adapter *padapter; > - struct net_device *pnetdev; > - > - pnetdev = alloc_etherdev(sizeof(struct _adapter)); > - if (!pnetdev) > - return NULL; > - if (dev_alloc_name(pnetdev, ifname) < 0) { > - strscpy(ifname, "wlan%d", sizeof(ifname)); > - dev_alloc_name(pnetdev, ifname); > - } > - padapter = netdev_priv(pnetdev); > - padapter->pnetdev = pnetdev; > > - pr_info("r8712u: register rtl8712_netdev_ops to netdev_ops\n"); > - pnetdev->netdev_ops = &rtl8712_netdev_ops; > > - pnetdev->watchdog_timeo = HZ; /* 1 second timeout */ > > - pnetdev->wireless_handlers = (struct iw_handler_def *) > > - &r871x_handlers_def; > - loadparam(padapter, pnetdev); > - netif_carrier_off(pnetdev); > - padapter->pid = 0; /* Initial the PID value used for HW PBC.*/ > > - return pnetdev; > -} > - > -static u32 start_drv_threads(struct _adapter *padapter) > -{ > - padapter->cmd_thread = kthread_run(r8712_cmd_thread, padapter, "%s", > > - padapter->pnetdev->name); > > - if (IS_ERR(padapter->cmd_thread)) > > - return _FAIL; > - return _SUCCESS; > -} > - > -void r8712_stop_drv_threads(struct _adapter *padapter) > -{ > - struct completion *completion = > - &padapter->cmdpriv.terminate_cmdthread_comp; > > - > - /Below is to terminate r8712_cmd_thread & event_thread.../ > - complete(&padapter->cmdpriv.cmd_queue_comp); > > - if (padapter->cmd_thread) > > - wait_for_completion_interruptible(completion); > - padapter->cmdpriv.cmd_seq = 1; > > -} > - > -static void start_drv_timers(struct _adapter *padapter) > -{ > - mod_timer(&padapter->mlmepriv.sitesurveyctrl.sitesurvey_ctrl_timer, > > - jiffies + msecs_to_jiffies(5000)); > - mod_timer(&padapter->mlmepriv.wdg_timer, > > - jiffies + msecs_to_jiffies(2000)); > -} > - > -void r8712_stop_drv_timers(struct _adapter *padapter) > -{ > - del_timer_sync(&padapter->mlmepriv.assoc_timer); > > - del_timer_sync(&padapter->securitypriv.tkip_timer); > > - del_timer_sync(&padapter->mlmepriv.scan_to_timer); > > - del_timer_sync(&padapter->mlmepriv.dhcp_timer); > > - del_timer_sync(&padapter->mlmepriv.wdg_timer); > > - del_timer_sync(&padapter->mlmepriv.sitesurveyctrl.sitesurvey_ctrl_timer); > > -} > - > -static void init_default_value(struct _adapter *padapter) > -{ > - struct registry_priv *pregistrypriv = &padapter->registrypriv; > > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct security_priv *psecuritypriv = &padapter->securitypriv; > > - > - /xmit_priv/ > - pxmitpriv->vcs_setting = pregistrypriv->vrtl_carrier_sense; > > - pxmitpriv->vcs = pregistrypriv->vcs_type; > > - pxmitpriv->vcs_type = pregistrypriv->vcs_type; > > - pxmitpriv->rts_thresh = pregistrypriv->rts_thresh; > > - pxmitpriv->frag_len = pregistrypriv->frag_thresh; > > - /* mlme_priv / > - / Maybe someday we should rename this variable to "active_mode"(Jeff)/ > - pmlmepriv->passive_mode = 1; / 1: active, 0: passive. */ > > - /ht_priv/ > - { > - int i; > - struct ht_priv *phtpriv = &pmlmepriv->htpriv; > > - > - phtpriv->ampdu_enable = false;/set to disabled/ > > - for (i = 0; i < 16; i++) > - phtpriv->baddbareq_issued[i] = false; > > - } > - /security_priv/ > - psecuritypriv->sw_encrypt = pregistrypriv->software_encrypt; > > - psecuritypriv->sw_decrypt = pregistrypriv->software_decrypt; > > - psecuritypriv->binstallGrpkey = _FAIL; > > - /pwrctrl_priv/ > - /registry_priv/ > - r8712_init_registrypriv_dev_network(padapter); > - r8712_update_registrypriv_dev_network(padapter); > - /misc./ > -} > - > -int r8712_init_drv_sw(struct _adapter *padapter) > -{ > - int ret; > - > - ret = r8712_init_cmd_priv(&padapter->cmdpriv); > > - if (ret) > - return ret; > - padapter->cmdpriv.padapter = padapter; > > - ret = r8712_init_evt_priv(&padapter->evtpriv); > > - if (ret) > - goto free_cmd; > - ret = r8712_init_mlme_priv(padapter); > - if (ret) > - goto free_evt; > - ret = _r8712_init_xmit_priv(&padapter->xmitpriv, padapter); > > - if (ret) > - goto free_mlme; > - ret = _r8712_init_recv_priv(&padapter->recvpriv, padapter); > > - if (ret) > - goto free_xmit; > - memset((unsigned char *)&padapter->securitypriv, 0, > > - sizeof(struct security_priv)); > - timer_setup(&padapter->securitypriv.tkip_timer, > > - r8712_use_tkipkey_handler, 0); > - ret = _r8712_init_sta_priv(&padapter->stapriv); > > - if (ret) > - goto free_recv; > - padapter->stapriv.padapter = padapter; > > - r8712_init_bcmc_stainfo(padapter); > - r8712_init_pwrctrl_priv(padapter); > - mp871xinit(padapter); > - init_default_value(padapter); > - r8712_InitSwLeds(padapter); > - mutex_init(&padapter->mutex_start); > > - > - return 0; > - > -free_recv: > - _r8712_free_recv_priv(&padapter->recvpriv); > > -free_xmit: > - _free_xmit_priv(&padapter->xmitpriv); > > -free_mlme: > - r8712_free_mlme_priv(&padapter->mlmepriv); > > -free_evt: > - r8712_free_evt_priv(&padapter->evtpriv); > > -free_cmd: > - r8712_free_cmd_priv(&padapter->cmdpriv); > > - return ret; > -} > - > -void r8712_free_drv_sw(struct _adapter *padapter) > -{ > - r8712_free_cmd_priv(&padapter->cmdpriv); > > - r8712_free_evt_priv(&padapter->evtpriv); > > - r8712_DeInitSwLeds(padapter); > - r8712_free_mlme_priv(&padapter->mlmepriv); > > - _free_xmit_priv(&padapter->xmitpriv); > > - _r8712_free_sta_priv(&padapter->stapriv); > > - _r8712_free_recv_priv(&padapter->recvpriv); > > - mp871xdeinit(padapter); > -} > - > -static void enable_video_mode(struct _adapter padapter, int cbw40_value) > -{ > - / bit 8: > - * 1 -> enable video mode to 96B AP > > - * 0 -> disable video mode to 96B AP > > - * bit 9: > - * 1 -> enable 40MHz mode > > - * 0 -> disable 40MHz mode > > - * bit 10: > - * 1 -> enable STBC > > - * 0 -> disable STBC > > - / > - u32 intcmd = 0xf4000500; / enable bit8, bit10*/ > - > - if (cbw40_value) { > - /* if the driver supports the 40M bandwidth, > - * we can enable the bit 9. > - / > - intcmd |= 0x200; > - } > - r8712_fw_cmd(padapter, intcmd); > -} > - > -/ > - * > - * This function intends to handle the activation of an interface > - * i.e. when it is brought Up/Active from a Down state. > - * > - */ > -static int netdev_open(struct net_device *pnetdev) > -{ > - struct _adapter *padapter = netdev_priv(pnetdev); > - > - mutex_lock(&padapter->mutex_start); > > - if (!padapter->bup) { > > - padapter->driver_stopped = false; > > - padapter->surprise_removed = false; > > - padapter->bup = true; > > - if (rtl871x_hal_init(padapter) != _SUCCESS) > - goto netdev_open_error; > - if (!r8712_initmac) { > - /* Use the mac address stored in the Efuse */ > - eth_hw_addr_set(pnetdev, > - padapter->eeprompriv.mac_addr); > > - } else { > - /* We have to inform f/w to use user-supplied MAC > - * address. > - */ > - msleep(200); > - r8712_setMacAddr_cmd(padapter, > - (const u8 *)pnetdev->dev_addr); > > - /* > - * The "myid" function will get the wifi mac address > - * from eeprompriv structure instead of netdev > - * structure. So, we have to overwrite the mac_addr > - * stored in the eeprompriv structure. In this case, > - * the real mac address won't be used anymore. So that, > - * the eeprompriv.mac_addr should store the mac which > - * users specify. > - */ > - memcpy(padapter->eeprompriv.mac_addr, > > - pnetdev->dev_addr, ETH_ALEN); > > - } > - if (start_drv_threads(padapter) != _SUCCESS) > - goto netdev_open_error; > - if (!padapter->dvobjpriv.inirp_init) > > - goto netdev_open_error; > - else > - padapter->dvobjpriv.inirp_init(padapter); > > - r8712_set_ps_mode(padapter, padapter->registrypriv.power_mgnt, > > - padapter->registrypriv.smart_ps); > > - } > - if (!netif_queue_stopped(pnetdev)) > - netif_start_queue(pnetdev); > - else > - netif_wake_queue(pnetdev); > - > - if (video_mode) > - enable_video_mode(padapter, cbw40_enable); > - /* start driver mlme relation timer */ > - start_drv_timers(padapter); > - padapter->ledpriv.LedControlHandler(padapter, LED_CTL_NO_LINK); > > - mutex_unlock(&padapter->mutex_start); > > - return 0; > -netdev_open_error: > - padapter->bup = false; > > - netif_carrier_off(pnetdev); > - netif_stop_queue(pnetdev); > - mutex_unlock(&padapter->mutex_start); > > - return -1; > -} > - > -/* > - * > - * This function intends to handle the shutdown of an interface > - * i.e. when it is brought Down from an Up/Active state. > - * > - */ > -static int netdev_close(struct net_device pnetdev) > -{ > - struct _adapter padapter = netdev_priv(pnetdev); > - > - / Close LED/ > - padapter->ledpriv.LedControlHandler(padapter, LED_CTL_POWER_OFF); > > - msleep(200); > - > - /s1./ > - if (pnetdev) { > - if (!netif_queue_stopped(pnetdev)) > - netif_stop_queue(pnetdev); > - } > - /s2./ > - /s2-1. issue disassoc_cmd to fw/ > - r8712_disassoc_cmd(padapter); > - /s2-2. indicate disconnect to os/ > - r8712_ind_disconnect(padapter); > - /s2-3./ > - r8712_free_assoc_resources(padapter); > - /s2-4./ > - r8712_free_network_queue(padapter); > - return 0; > -} > - > -#include "mlme_osdep.h" > diff --git a/drivers/staging/rtl8712/osdep_intf.h b/drivers/staging/rtl8712/osdep_intf.h > deleted file mode 100644 > index 9e75116c987e..000000000000 > --- a/drivers/staging/rtl8712/osdep_intf.h > +++ /dev/null > @@ -1,32 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > -#ifndef _OSDEP_INTF_H > -#define _OSDEP_INTF_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > - > -#define RND4(x) (((x >> 2) + ((x & 3) != 0)) << 2) > > - > -struct intf_priv { > - u8 intf_dev; > - / when in USB, IO is through interrupt in/out endpoints / > - struct usb_device udev; > - struct urb piorw_urb; > - struct completion io_retevt_comp; > -}; > - > -int r871x_ioctl(struct net_device dev, struct ifreq rq, int cmd); > - > -#endif /OSDEP_INTF_H/ > diff --git a/drivers/staging/rtl8712/osdep_service.h b/drivers/staging/rtl8712/osdep_service.h > deleted file mode 100644 > index 0d9bb42cbc58..000000000000 > --- a/drivers/staging/rtl8712/osdep_service.h > +++ /dev/null > @@ -1,60 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/*************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > -#ifndef _OSDEP_SERVICE_H > -#define _OSDEP_SERVICE_H > - > -#define _SUCCESS 1 > -#define _FAIL 0 > - > -#include <linux/spinlock.h> > > - > -#include <linux/interrupt.h> > > -#include <linux/semaphore.h> > > -#include <linux/sched/signal.h> > > -#include <linux/sem.h> > > -#include <linux/netdevice.h> > > -#include <linux/etherdevice.h> > > -#include <net/iw_handler.h> > > -#include <linux/proc_fs.h> /* Necessary because we use the proc fs */ > > - > -#include "basic_types.h" > - > -struct __queue { > - struct list_head queue; > - spinlock_t lock; > -}; > - > -#define _pkt struct sk_buff > -#define _buffer unsigned char > - > -#define _init_queue(pqueue) \ > - do { \ > - INIT_LIST_HEAD(&((pqueue)->queue)); \ > > - spin_lock_init(&((pqueue)->lock)); \ > > - } while (0) > - > -static inline u32 end_of_queue_search(struct list_head head, > - struct list_head plist) > -{ > - return (head == plist); > -} > - > -static inline void flush_signals_thread(void) > -{ > - if (signal_pending(current)) > - flush_signals(current); > -} > - > -#endif > - > diff --git a/drivers/staging/rtl8712/recv_linux.c b/drivers/staging/rtl8712/recv_linux.c > deleted file mode 100644 > index 215fca4abb3a..000000000000 > --- a/drivers/staging/rtl8712/recv_linux.c > +++ /dev/null > @@ -1,139 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/**************************************************************************** > - * recv_linux.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx. > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RECV_OSDEP_C > - > -#include <linux/usb.h> > > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "wifi.h" > -#include "recv_osdep.h" > -#include "osdep_intf.h" > -#include "ethernet.h" > -#include <linux/if_arp.h> > > -#include "usb_ops.h" > - > -/init os related resource in struct recv_priv/ > -/alloc os related resource in union recv_frame/ > -void r8712_os_recv_resource_alloc(struct _adapter *padapter, > - union recv_frame *precvframe) > -{ > - precvframe->u.hdr.pkt_newalloc = NULL; > > - precvframe->u.hdr.pkt = NULL; > > -} > - > -/alloc os related resource in struct recv_buf/ > -int r8712_os_recvbuf_resource_alloc(struct _adapter *padapter, > - struct recv_buf *precvbuf) > -{ > - int res = 0; > - > - precvbuf->irp_pending = false; > > - precvbuf->purb = usb_alloc_urb(0, GFP_KERNEL); > > - if (!precvbuf->purb) > > - res = -ENOMEM; > - precvbuf->pskb = NULL; > > - precvbuf->pallocated_buf = NULL; > > - precvbuf->pbuf = NULL; > > - precvbuf->pdata = NULL; > > - precvbuf->phead = NULL; > > - precvbuf->ptail = NULL; > > - precvbuf->pend = NULL; > > - precvbuf->transfer_len = 0; > > - precvbuf->len = 0; > > - return res; > -} > - > -/free os related resource in struct recv_buf/ > -void r8712_os_recvbuf_resource_free(struct _adapter *padapter, > - struct recv_buf *precvbuf) > -{ > - if (precvbuf->pskb) > > - dev_kfree_skb_any(precvbuf->pskb); > > - if (precvbuf->purb) { > > - usb_kill_urb(precvbuf->purb); > > - usb_free_urb(precvbuf->purb); > > - } > -} > - > -void r8712_handle_tkip_mic_err(struct _adapter *adapter, u8 bgroup) > -{ > - union iwreq_data wrqu; > - struct iw_michaelmicfailure ev; > - struct mlme_priv *mlmepriv = &adapter->mlmepriv; > > - > - memset(&ev, 0x00, sizeof(ev)); > - if (bgroup) > - ev.flags |= IW_MICFAILURE_GROUP; > - else > - ev.flags |= IW_MICFAILURE_PAIRWISE; > - ev.src_addr.sa_family = ARPHRD_ETHER; > - ether_addr_copy(ev.src_addr.sa_data, &mlmepriv->assoc_bssid[0]); > > - memset(&wrqu, 0x00, sizeof(wrqu)); > - wrqu.data.length = sizeof(ev); > - wireless_send_event(adapter->pnetdev, IWEVMICHAELMICFAILURE, &wrqu, > > - (char *)&ev); > -} > - > -void r8712_recv_indicatepkt(struct _adapter *adapter, > - union recv_frame *recvframe) > -{ > - struct recv_priv *recvpriv; > - struct __queue *free_recv_queue; > - _pkt *skb; > - struct rx_pkt_attrib *attrib = &recvframe->u.hdr.attrib; > > - > - recvpriv = &adapter->recvpriv; > > - free_recv_queue = &recvpriv->free_recv_queue; > > - skb = recvframe->u.hdr.pkt; > > - if (!skb) > - goto _recv_indicatepkt_drop; > - skb->data = recvframe->u.hdr.rx_data; > > - skb->len = recvframe->u.hdr.len; > > - skb_set_tail_pointer(skb, skb->len); > > - if ((attrib->tcpchk_valid == 1) && (attrib->tcp_chkrpt == 1)) > > - skb->ip_summed = CHECKSUM_UNNECESSARY; > > - else > - skb->ip_summed = CHECKSUM_NONE; > > - skb->dev = adapter->pnetdev; > > - skb->protocol = eth_type_trans(skb, adapter->pnetdev); > > - netif_rx(skb); > - recvframe->u.hdr.pkt = NULL; /* pointers to NULL before > > - * r8712_free_recvframe() > - */ > - r8712_free_recvframe(recvframe, free_recv_queue); > - return; > -_recv_indicatepkt_drop: > - /enqueue back to free_recv_queue/ > - if (recvframe) > - r8712_free_recvframe(recvframe, free_recv_queue); > - recvpriv->rx_drop++; > > -} > - > -static void _r8712_reordering_ctrl_timeout_handler (struct timer_list *t) > -{ > - struct recv_reorder_ctrl *reorder_ctrl = > - from_timer(reorder_ctrl, t, reordering_ctrl_timer); > - > - r8712_reordering_ctrl_timeout_handler(reorder_ctrl); > -} > - > -void r8712_init_recv_timer(struct recv_reorder_ctrl *preorder_ctrl) > -{ > - timer_setup(&preorder_ctrl->reordering_ctrl_timer, > > - _r8712_reordering_ctrl_timeout_handler, 0); > -} > diff --git a/drivers/staging/rtl8712/recv_osdep.h b/drivers/staging/rtl8712/recv_osdep.h > deleted file mode 100644 > index fbe3f2868506..000000000000 > --- a/drivers/staging/rtl8712/recv_osdep.h > +++ /dev/null > @@ -1,39 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > -#ifndef _RECV_OSDEP_H > -#define _RECV_OSDEP_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include <linux/skbuff.h> > > - > -int _r8712_init_recv_priv(struct recv_priv precvpriv, > - struct _adapter padapter); > -void _r8712_free_recv_priv(struct recv_priv precvpriv); > -void r8712_recv_entry(union recv_frame precv_frame); > -void r8712_recv_indicatepkt(struct _adapter adapter, > - union recv_frame precv_frame); > -void r8712_handle_tkip_mic_err(struct _adapter padapter, u8 bgroup); > -int r8712_init_recv_priv(struct recv_priv precvpriv, > - struct _adapter padapter); > -void r8712_free_recv_priv(struct recv_priv precvpriv); > -void r8712_os_recv_resource_alloc(struct _adapter padapter, > - union recv_frame precvframe); > -int r8712_os_recvbuf_resource_alloc(struct _adapter padapter, > - struct recv_buf precvbuf); > -void r8712_os_recvbuf_resource_free(struct _adapter padapter, > - struct recv_buf precvbuf); > -void r8712_init_recv_timer(struct recv_reorder_ctrl preorder_ctrl); > - > -#endif > diff --git a/drivers/staging/rtl8712/rtl8712_bitdef.h b/drivers/staging/rtl8712/rtl8712_bitdef.h > deleted file mode 100644 > index a4a687dcc2e7..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_bitdef.h > +++ /dev/null > @@ -1,26 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/************************************************************* > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > - > -#ifndef RTL8712_BITDEF_H > -#define RTL8712_BITDEF_H > - > -#include "rtl8712_cmdctrl_bitdef.h" > -#include "rtl8712_syscfg_bitdef.h" > -#include "rtl8712_macsetting_bitdef.h" > -#include "rtl8712_timectrl_bitdef.h" > -#include "rtl8712_fifoctrl_bitdef.h" > -#include "rtl8712_ratectrl_bitdef.h" > -#include "rtl8712_edcasetting_bitdef.h" > -#include "rtl8712_wmac_bitdef.h" > -#include "rtl8712_security_bitdef.h" > -#include "rtl8712_powersave_bitdef.h" > -#include "rtl8712_gp_bitdef.h" > -#include "rtl8712_interrupt_bitdef.h" > -#include "rtl8712_debugctrl_bitdef.h" > - > -#endif / RTL8712_BITDEF_H / > - > diff --git a/drivers/staging/rtl8712/rtl8712_cmd.c b/drivers/staging/rtl8712/rtl8712_cmd.c > deleted file mode 100644 > index bb7db96ed821..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_cmd.c > +++ /dev/null > @@ -1,409 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/ > - * rtl8712_cmd.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx. > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RTL8712_CMD_C > - > -#include <linux/compiler.h> > > -#include <linux/kernel.h> > > -#include <linux/errno.h> > > -#include <linux/slab.h> > > -#include <linux/sched/signal.h> > > -#include <linux/module.h> > > -#include <linux/kref.h> > > -#include <linux/netdevice.h> > > -#include <linux/skbuff.h> > > -#include <linux/usb.h> > > -#include <linux/usb/ch9.h> > > -#include <linux/circ_buf.h> > > -#include <linux/uaccess.h> > > -#include <asm/byteorder.h> > > -#include <linux/atomic.h> > > -#include <linux/semaphore.h> > > -#include <linux/rtnetlink.h> > > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "recv_osdep.h" > -#include "mlme_osdep.h" > -#include "rtl871x_ioctl_set.h" > - > -static void check_hw_pbc(struct _adapter padapter) > -{ > - u8 tmp1byte; > - > - r8712_write8(padapter, MAC_PINMUX_CTRL, (GPIOMUX_EN | GPIOSEL_GPIO)); > - tmp1byte = r8712_read8(padapter, GPIO_IO_SEL); > - tmp1byte &= ~(HAL_8192S_HW_GPIO_WPS_BIT); > - r8712_write8(padapter, GPIO_IO_SEL, tmp1byte); > - tmp1byte = r8712_read8(padapter, GPIO_CTRL); > - if (tmp1byte == 0xff) > - return; > - if (tmp1byte & HAL_8192S_HW_GPIO_WPS_BIT) { > - / Here we only set bPbcPressed to true > - * After trigger PBC, the variable will be set to false > - */ > - netdev_dbg(padapter->pnetdev, "CheckPbcGPIO - PBC is pressed !!!!\n"); > > - /* 0 is the default value and it means the application monitors > - * the HW PBC doesn't provide its pid to driver. > - */ > - if (padapter->pid == 0) > > - return; > - kill_pid(find_vpid(padapter->pid), SIGUSR1, 1); > > - } > -} > - > -/* query rx phy status from fw. > - * Adhoc mode: beacon. > - * Infrastructure mode: beacon , data. > - */ > -static void query_fw_rx_phy_status(struct _adapter *padapter) > -{ > - u32 val32 = 0; > - int pollingcnts = 50; > - > - if (check_fwstate(&padapter->mlmepriv, _FW_LINKED)) { > > - r8712_write32(padapter, IOCMD_CTRL_REG, 0xf4000001); > - msleep(100); > - /* Wait FW complete IO Cmd */ > - while ((r8712_read32(padapter, IOCMD_CTRL_REG)) && > - (pollingcnts > 0)) { > > - pollingcnts--; > - msleep(20); > - } > - if (pollingcnts != 0) > - val32 = r8712_read32(padapter, IOCMD_DATA_REG); > - else /* time out */ > - val32 = 0; > - val32 >>= 4; > > - padapter->recvpriv.fw_rssi = > > - (u8)r8712_signal_scale_mapping(val32); > - } > -} > - > -/* check mlme, hw, phy, or dynamic algorithm status. */ > -static void StatusWatchdogCallback(struct _adapter *padapter) > -{ > - check_hw_pbc(padapter); > - query_fw_rx_phy_status(padapter); > -} > - > -static void r871x_internal_cmd_hdl(struct _adapter *padapter, u8 *pbuf) > -{ > - struct drvint_cmd_parm *pdrvcmd; > - > - if (!pbuf) > - return; > - pdrvcmd = (struct drvint_cmd_parm *)pbuf; > - switch (pdrvcmd->i_cid) { > > - case WDG_WK_CID: > - StatusWatchdogCallback(padapter); > - break; > - default: > - break; > - } > - kfree(pdrvcmd->pbuf); > > -} > - > -static u8 read_bbreg_hdl(struct _adapter *padapter, u8 *pbuf) > -{ > - struct cmd_obj *pcmd = (struct cmd_obj *)pbuf; > - > - r8712_free_cmd_obj(pcmd); > - return H2C_SUCCESS; > -} > - > -static u8 write_bbreg_hdl(struct _adapter *padapter, u8 *pbuf) > -{ > - void (*pcmd_callback)(struct _adapter *dev, struct cmd_obj *pcmd); > - struct cmd_obj *pcmd = (struct cmd_obj *)pbuf; > - > - pcmd_callback = cmd_callback[pcmd->cmdcode].callback; > > - if (!pcmd_callback) > - r8712_free_cmd_obj(pcmd); > - else > - pcmd_callback(padapter, pcmd); > - return H2C_SUCCESS; > -} > - > -static u8 read_rfreg_hdl(struct _adapter *padapter, u8 *pbuf) > -{ > - u32 val; > - void (*pcmd_callback)(struct _adapter *dev, struct cmd_obj *pcmd); > - struct cmd_obj *pcmd = (struct cmd_obj *)pbuf; > - > - if (pcmd->rsp && pcmd->rspsz > 0) > > - memcpy(pcmd->rsp, (u8 *)&val, pcmd->rspsz); > > - pcmd_callback = cmd_callback[pcmd->cmdcode].callback; > > - if (!pcmd_callback) > - r8712_free_cmd_obj(pcmd); > - else > - pcmd_callback(padapter, pcmd); > - return H2C_SUCCESS; > -} > - > -static u8 write_rfreg_hdl(struct _adapter *padapter, u8 *pbuf) > -{ > - void (*pcmd_callback)(struct _adapter *dev, struct cmd_obj *pcmd); > - struct cmd_obj *pcmd = (struct cmd_obj *)pbuf; > - > - pcmd_callback = cmd_callback[pcmd->cmdcode].callback; > > - if (!pcmd_callback) > - r8712_free_cmd_obj(pcmd); > - else > - pcmd_callback(padapter, pcmd); > - return H2C_SUCCESS; > -} > - > -static u8 sys_suspend_hdl(struct _adapter *padapter, u8 *pbuf) > -{ > - struct cmd_obj *pcmd = (struct cmd_obj *)pbuf; > - > - r8712_free_cmd_obj(pcmd); > - return H2C_SUCCESS; > -} > - > -static struct cmd_obj *cmd_hdl_filter(struct _adapter *padapter, > - struct cmd_obj *pcmd) > -{ > - struct cmd_obj *pcmd_r; > - > - if (!pcmd) > - return pcmd; > - pcmd_r = NULL; > - > - switch (pcmd->cmdcode) { > > - case GEN_CMD_CODE(_Read_BBREG): > - read_bbreg_hdl(padapter, (u8 *)pcmd); > - break; > - case GEN_CMD_CODE(_Write_BBREG): > - write_bbreg_hdl(padapter, (u8 *)pcmd); > - break; > - case GEN_CMD_CODE(_Read_RFREG): > - read_rfreg_hdl(padapter, (u8 *)pcmd); > - break; > - case GEN_CMD_CODE(_Write_RFREG): > - write_rfreg_hdl(padapter, (u8 *)pcmd); > - break; > - case GEN_CMD_CODE(_SetUsbSuspend): > - sys_suspend_hdl(padapter, (u8 )pcmd); > - break; > - case GEN_CMD_CODE(_JoinBss): > - r8712_joinbss_reset(padapter); > - / Before set JoinBss_CMD to FW, driver must ensure FW is in > - * PS_MODE_ACTIVE. Directly write rpwm to radio on and assign > - * new pwr_mode to Driver, instead of use workitem to change > - * state. > - */ > - if (padapter->pwrctrlpriv.pwr_mode > PS_MODE_ACTIVE) { > > - padapter->pwrctrlpriv.pwr_mode = PS_MODE_ACTIVE; > > - mutex_lock(&padapter->pwrctrlpriv.mutex_lock); > > - r8712_set_rpwm(padapter, PS_STATE_S4); > - mutex_unlock(&padapter->pwrctrlpriv.mutex_lock); > > - } > - pcmd_r = pcmd; > - break; > - case DRV_INT_CMD: > - r871x_internal_cmd_hdl(padapter, pcmd->parmbuf); > > - r8712_free_cmd_obj(pcmd); > - pcmd_r = NULL; > - break; > - default: > - pcmd_r = pcmd; > - break; > - } > - return pcmd_r; /* if returning pcmd_r == NULL, pcmd must be free. */ > -} > - > -u8 r8712_fw_cmd(struct _adapter *pAdapter, u32 cmd) > -{ > - int pollingcnts = 50; > - > - r8712_write32(pAdapter, IOCMD_CTRL_REG, cmd); > - msleep(100); > - while ((r8712_read32(pAdapter, IOCMD_CTRL_REG != 0)) && > - (pollingcnts > 0)) { > > - pollingcnts--; > - msleep(20); > - } > - if (pollingcnts == 0) > - return false; > - return true; > -} > - > -void r8712_fw_cmd_data(struct _adapter *pAdapter, u32 value, u8 flag) > -{ > - if (flag == 0) / set */ > - r8712_write32(pAdapter, IOCMD_DATA_REG, value); > - else / query */ > - *value = r8712_read32(pAdapter, IOCMD_DATA_REG); > -} > - > -int r8712_cmd_thread(void *context) > -{ > - struct cmd_obj *pcmd; > - unsigned int cmdsz, wr_sz; > - __le32 *pcmdbuf; > - struct tx_desc *pdesc; > - void (*pcmd_callback)(struct _adapter *dev, struct cmd_obj *pcmd); > - struct _adapter *padapter = context; > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - struct completion *cmd_queue_comp = > - &pcmdpriv->cmd_queue_comp; > > - struct mutex *pwctrl_lock = &padapter->pwrctrlpriv.mutex_lock; > > - > - allow_signal(SIGTERM); > - while (1) { > - if (wait_for_completion_interruptible(cmd_queue_comp)) > - break; > - if (padapter->driver_stopped || padapter->surprise_removed) > > - break; > - if (r8712_register_cmd_alive(padapter)) > - continue; > -_next: > - pcmd = r8712_dequeue_cmd(&pcmdpriv->cmd_queue); > > - if (!(pcmd)) { > - r8712_unregister_cmd_alive(padapter); > - continue; > - } > - pcmdbuf = (__le32 *)pcmdpriv->cmd_buf; > > - pdesc = (struct tx_desc )pcmdbuf; > - memset(pdesc, 0, TXDESC_SIZE); > - pcmd = cmd_hdl_filter(padapter, pcmd); > - if (pcmd) { / if pcmd != NULL, cmd will be handled by f/w */ > - struct dvobj_priv *pdvobj = &padapter->dvobjpriv; > > - u8 blnPending = 0; > - u16 cmdcode = pcmd->cmdcode; > > - > - pcmdpriv->cmd_issued_cnt++; > > - cmdsz = round_up(pcmd->cmdsz, 8); > > - wr_sz = TXDESC_SIZE + 8 + cmdsz; > - pdesc->txdw0 |= cpu_to_le32((wr_sz - TXDESC_SIZE) & > > - 0x0000ffff); > - if (pdvobj->ishighspeed) { > > - if ((wr_sz % 512) == 0) > - blnPending = 1; > - } else { > - if ((wr_sz % 64) == 0) > - blnPending = 1; > - } > - if (blnPending) { /* 32 bytes for TX Desc - 8 offset */ > - pdesc->txdw0 |= cpu_to_le32(((TXDESC_SIZE + > > - OFFSET_SZ + 8) << OFFSET_SHT) & > - 0x00ff0000); > - } else { > - pdesc->txdw0 |= cpu_to_le32(((TXDESC_SIZE + > > - OFFSET_SZ) << > - OFFSET_SHT) & > - 0x00ff0000); > - } > - pdesc->txdw0 |= cpu_to_le32(OWN | FSG | LSG); > > - pdesc->txdw1 |= cpu_to_le32((0x13 << QSEL_SHT) & > > - 0x00001f00); > - pcmdbuf += (TXDESC_SIZE >> 2); > > - *pcmdbuf = cpu_to_le32((cmdsz & 0x0000ffff) | > - (pcmd->cmdcode << 16) | > > - (pcmdpriv->cmd_seq << 24)); > > - pcmdbuf += 2; /* 8 bytes alignment */ > - memcpy((u8 *)pcmdbuf, pcmd->parmbuf, pcmd->cmdsz); > > - if (blnPending) > - wr_sz += 8; /* Append 8 bytes */ > - r8712_write_mem(padapter, RTL8712_DMA_H2CCMD, wr_sz, > - (u8 *)pdesc); > - pcmdpriv->cmd_seq++; > > - if (cmdcode == GEN_CMD_CODE(_CreateBss)) { > - pcmd->res = H2C_SUCCESS; > > - pcmd_callback = cmd_callback[cmdcode].callback; > - if (pcmd_callback) > - pcmd_callback(padapter, pcmd); > - continue; > - } > - if (cmdcode == GEN_CMD_CODE(_SetPwrMode)) { > - if (padapter->pwrctrlpriv.bSleep) { > > - mutex_lock(pwctrl_lock); > - r8712_set_rpwm(padapter, PS_STATE_S2); > - mutex_unlock(pwctrl_lock); > - } > - } > - r8712_free_cmd_obj(pcmd); > - if (list_empty(&pcmdpriv->cmd_queue.queue)) { > > - r8712_unregister_cmd_alive(padapter); > - continue; > - } else { > - goto _next; > - } > - } else { > - goto _next; > - } > - flush_signals_thread(); > - } > - /* free all cmd_obj resources */ > - do { > - pcmd = r8712_dequeue_cmd(&pcmdpriv->cmd_queue); > > - if (!pcmd) > - break; > - r8712_free_cmd_obj(pcmd); > - } while (1); > - complete(&pcmdpriv->terminate_cmdthread_comp); > > - return 0; > -} > - > -void r8712_event_handle(struct _adapter *padapter, __le32 *peventbuf) > -{ > - u8 evt_code, evt_seq; > - u16 evt_sz; > - void (*event_callback)(struct _adapter *dev, u8 *pbuf); > - struct evt_priv *pevt_priv = &padapter->evtpriv; > > - > - if (!peventbuf) > - goto abort_event; > - evt_sz = (u16)(le32_to_cpu(*peventbuf) & 0xffff); > - evt_seq = (u8)((le32_to_cpu(*peventbuf) >> 24) & 0x7f); > > - evt_code = (u8)((le32_to_cpu(*peventbuf) >> 16) & 0xff); > > - /* checking event sequence... */ > - if ((evt_seq & 0x7f) != pevt_priv->event_seq) { > > - pevt_priv->event_seq = ((evt_seq + 1) & 0x7f); > > - goto abort_event; > - } > - /* checking if event code is valid */ > - if (evt_code >= MAX_C2HEVT) { > > - pevt_priv->event_seq = ((evt_seq + 1) & 0x7f); > > - goto abort_event; > - } else if ((evt_code == GEN_EVT_CODE(_Survey)) && > - (evt_sz > sizeof(struct wlan_bssid_ex))) { > > - pevt_priv->event_seq = ((evt_seq + 1) & 0x7f); > > - goto abort_event; > - } > - /* checking if event size match the event parm size */ > - if ((wlanevents[evt_code].parmsize) && > - (wlanevents[evt_code].parmsize != evt_sz)) { > - pevt_priv->event_seq = ((evt_seq + 1) & 0x7f); > > - goto abort_event; > - } else if ((evt_sz == 0) && (evt_code != GEN_EVT_CODE(_WPS_PBC))) { > - pevt_priv->event_seq = ((evt_seq + 1) & 0x7f); > > - goto abort_event; > - } > - pevt_priv->event_seq++; /* update evt_seq */ > > - if (pevt_priv->event_seq > 127) > > - pevt_priv->event_seq = 0; > > - /* move to event content, 8 bytes alignment */ > - peventbuf = peventbuf + 2; > - event_callback = wlanevents[evt_code].event_callback; > - if (event_callback) > - event_callback(padapter, (u8 *)peventbuf); > - pevt_priv->evt_done_cnt++; > > -abort_event: > - return; > -} > diff --git a/drivers/staging/rtl8712/rtl8712_cmd.h b/drivers/staging/rtl8712/rtl8712_cmd.h > deleted file mode 100644 > index a34d0dd023f3..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_cmd.h > +++ /dev/null > @@ -1,231 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef _RTL8712_CMD_H > -#define _RTL8712_CMD_H > - > -#define CMD_HDR_SZ 8 > - > -u8 r8712_fw_cmd(struct _adapter pAdapter, u32 cmd); > -void r8712_fw_cmd_data(struct _adapter pAdapter, u32 value, u8 flag); > - > -struct cmd_hdr { > - u32 cmd_dw0; > - u32 cmd_dw1; > -}; > - > -enum rtl8712_h2c_cmd { > - GEN_CMD_CODE(_Read_MACREG), /0/ > - GEN_CMD_CODE(_Write_MACREG), > - GEN_CMD_CODE(_Read_BBREG), > - GEN_CMD_CODE(_Write_BBREG), > - GEN_CMD_CODE(_Read_RFREG), > - GEN_CMD_CODE(_Write_RFREG), /5/ > - GEN_CMD_CODE(_Read_EEPROM), > - GEN_CMD_CODE(_Write_EEPROM), > - GEN_CMD_CODE(_Read_EFUSE), > - GEN_CMD_CODE(_Write_EFUSE), > - > - GEN_CMD_CODE(_Read_CAM), /10/ > - GEN_CMD_CODE(_Write_CAM), > - GEN_CMD_CODE(_setBCNITV), > - GEN_CMD_CODE(_setMBIDCFG), > - GEN_CMD_CODE(_JoinBss), /14/ > - GEN_CMD_CODE(_DisConnect), /15/ > - GEN_CMD_CODE(_CreateBss), > - GEN_CMD_CODE(_SetOpMode), > - GEN_CMD_CODE(_SiteSurvey), /18/ > - GEN_CMD_CODE(_SetAuth), > - > - GEN_CMD_CODE(_SetKey), /20/ > - GEN_CMD_CODE(_SetStaKey), > - GEN_CMD_CODE(_SetAssocSta), > - GEN_CMD_CODE(_DelAssocSta), > - GEN_CMD_CODE(_SetStaPwrState), > - GEN_CMD_CODE(_SetBasicRate), /25/ > - GEN_CMD_CODE(_GetBasicRate), > - GEN_CMD_CODE(_SetDataRate), > - GEN_CMD_CODE(_GetDataRate), > - GEN_CMD_CODE(_SetPhyInfo), > - > - GEN_CMD_CODE(_GetPhyInfo), /30/ > - GEN_CMD_CODE(_SetPhy), > - GEN_CMD_CODE(_GetPhy), > - GEN_CMD_CODE(_readRssi), > - GEN_CMD_CODE(_readGain), > - GEN_CMD_CODE(_SetAtim), /35/ > - GEN_CMD_CODE(_SetPwrMode), > - GEN_CMD_CODE(_JoinbssRpt), > - GEN_CMD_CODE(_SetRaTable), > - GEN_CMD_CODE(_GetRaTable), > - > - GEN_CMD_CODE(_GetCCXReport), /40/ > - GEN_CMD_CODE(_GetDTMReport), > - GEN_CMD_CODE(_GetTXRateStatistics), > - GEN_CMD_CODE(_SetUsbSuspend), > - GEN_CMD_CODE(_SetH2cLbk), > - GEN_CMD_CODE(_AddBAReq), /45/ > - > - GEN_CMD_CODE(_SetChannel), /46/ > -/ MP_OFFLOAD Start (47~54)/ > - GEN_CMD_CODE(_SetTxPower), > - GEN_CMD_CODE(_SwitchAntenna), > - GEN_CMD_CODE(_SetCrystalCap), > - GEN_CMD_CODE(_SetSingleCarrierTx), /50/ > - GEN_CMD_CODE(_SetSingleToneTx), > - GEN_CMD_CODE(_SetCarrierSuppressionTx), > - GEN_CMD_CODE(_SetContinuousTx), > - GEN_CMD_CODE(_SwitchBandwidth), /54/ > -/ MP_OFFLOAD End/ > - GEN_CMD_CODE(_TX_Beacon), /55/ > - GEN_CMD_CODE(_SetPowerTracking), > - GEN_CMD_CODE(_AMSDU_TO_AMPDU), /57/ > - GEN_CMD_CODE(_SetMacAddress), /58/ > - > - GEN_CMD_CODE(_DisconnectCtrl), /59/ > - GEN_CMD_CODE(_SetChannelPlan), /60/ > - GEN_CMD_CODE(_DisconnectCtrlEx), /61/ > - > - / To do, modify these h2c cmd, add or delete / > - GEN_CMD_CODE(_GetH2cLbk), > - > - / WPS extra IE / > - GEN_CMD_CODE(_SetProbeReqExtraIE), > - GEN_CMD_CODE(_SetAssocReqExtraIE), > - GEN_CMD_CODE(_SetProbeRspExtraIE), > - GEN_CMD_CODE(_SetAssocRspExtraIE), > - > - / the following is driver will do / > - GEN_CMD_CODE(_GetCurDataRate), > - > - GEN_CMD_CODE(_GetTxRetrycnt), / to record times that Tx retry to > - * transmit packet after association > - / > - GEN_CMD_CODE(_GetRxRetrycnt), / to record total number of the > - * received frame with ReTry bit set in > - * the WLAN header > - / > - > - GEN_CMD_CODE(_GetBCNOKcnt), > - GEN_CMD_CODE(_GetBCNERRcnt), > - GEN_CMD_CODE(_GetCurTxPwrLevel), > - > - GEN_CMD_CODE(_SetDIG), > - GEN_CMD_CODE(_SetRA), > - GEN_CMD_CODE(_SetPT), > - GEN_CMD_CODE(_ReadTSSI), > - > - MAX_H2CCMD > -}; > - > -#define GetBBReg_CMD Read_BBREG_CMD > -#define SetBBReg_CMD Write_BBREG_CMD > -#define GetRFReg_CMD Read_RFREG_CMD > -#define SetRFReg_CMD Write_RFREG_CMD > -#define DRV_INT_CMD (MAX_H2CCMD + 1) > -#define SetRFIntFs_CMD (MAX_H2CCMD + 2) > - > -#ifdef RTL8712_CMD_C > -static struct _cmd_callback cmd_callback[] = { > - {GEN_CMD_CODE(_Read_MACREG), NULL}, /0/ > - {GEN_CMD_CODE(_Write_MACREG), NULL}, > - {GEN_CMD_CODE(_Read_BBREG), NULL}, > - {GEN_CMD_CODE(_Write_BBREG), NULL}, > - {GEN_CMD_CODE(_Read_RFREG), &r8712_getbbrfreg_cmdrsp_callback}, > - {GEN_CMD_CODE(_Write_RFREG), NULL}, /5/ > - {GEN_CMD_CODE(_Read_EEPROM), NULL}, > - {GEN_CMD_CODE(_Write_EEPROM), NULL}, > - {GEN_CMD_CODE(_Read_EFUSE), NULL}, > - {GEN_CMD_CODE(_Write_EFUSE), NULL}, > - > - {GEN_CMD_CODE(_Read_CAM), NULL}, /10/ > - {GEN_CMD_CODE(_Write_CAM), NULL}, > - {GEN_CMD_CODE(_setBCNITV), NULL}, > - {GEN_CMD_CODE(_setMBIDCFG), NULL}, > - {GEN_CMD_CODE(_JoinBss), &r8712_joinbss_cmd_callback}, /14/ > - {GEN_CMD_CODE(_DisConnect), &r8712_disassoc_cmd_callback}, /15/ > - {GEN_CMD_CODE(_CreateBss), &r8712_createbss_cmd_callback}, > - {GEN_CMD_CODE(_SetOpMode), NULL}, > - {GEN_CMD_CODE(_SiteSurvey), &r8712_survey_cmd_callback}, /18/ > - {GEN_CMD_CODE(_SetAuth), NULL}, > - > - {GEN_CMD_CODE(_SetKey), NULL}, /20/ > - {GEN_CMD_CODE(_SetStaKey), &r8712_setstaKey_cmdrsp_callback}, > - {GEN_CMD_CODE(_SetAssocSta), &r8712_setassocsta_cmdrsp_callback}, > - {GEN_CMD_CODE(_DelAssocSta), NULL}, > - {GEN_CMD_CODE(_SetStaPwrState), NULL}, > - {GEN_CMD_CODE(_SetBasicRate), NULL}, /25/ > - {GEN_CMD_CODE(_GetBasicRate), NULL}, > - {GEN_CMD_CODE(_SetDataRate), NULL}, > - {GEN_CMD_CODE(_GetDataRate), NULL}, > - {GEN_CMD_CODE(_SetPhyInfo), NULL}, > - > - {GEN_CMD_CODE(_GetPhyInfo), NULL}, /30/ > - {GEN_CMD_CODE(_SetPhy), NULL}, > - {GEN_CMD_CODE(_GetPhy), NULL}, > - {GEN_CMD_CODE(_readRssi), NULL}, > - {GEN_CMD_CODE(_readGain), NULL}, > - {GEN_CMD_CODE(_SetAtim), NULL}, /35/ > - {GEN_CMD_CODE(_SetPwrMode), NULL}, > - {GEN_CMD_CODE(_JoinbssRpt), NULL}, > - {GEN_CMD_CODE(_SetRaTable), NULL}, > - {GEN_CMD_CODE(_GetRaTable), NULL}, > - > - {GEN_CMD_CODE(_GetCCXReport), NULL}, /40/ > - {GEN_CMD_CODE(_GetDTMReport), NULL}, > - {GEN_CMD_CODE(_GetTXRateStatistics), NULL}, > - {GEN_CMD_CODE(_SetUsbSuspend), NULL}, > - {GEN_CMD_CODE(_SetH2cLbk), NULL}, > - {GEN_CMD_CODE(_AddBAReq), NULL}, /45/ > - > - {GEN_CMD_CODE(_SetChannel), NULL}, /46/ > -/ MP_OFFLOAD Start (47~54)/ > - {GEN_CMD_CODE(_SetTxPower), NULL}, > - {GEN_CMD_CODE(_SwitchAntenna), NULL}, > - {GEN_CMD_CODE(_SetCrystalCap), NULL}, > - {GEN_CMD_CODE(_SetSingleCarrierTx), NULL}, /50/ > - {GEN_CMD_CODE(_SetSingleToneTx), NULL}, > - {GEN_CMD_CODE(_SetCarrierSuppressionTx), NULL}, > - {GEN_CMD_CODE(_SetContinuousTx), NULL}, > - {GEN_CMD_CODE(_SwitchBandwidth), NULL}, /54/ > -/ MP_OFFLOAD End/ > - {GEN_CMD_CODE(_TX_Beacon), NULL}, /55/ > - {GEN_CMD_CODE(_SetPowerTracking), NULL}, > - {GEN_CMD_CODE(_AMSDU_TO_AMPDU), NULL}, /57/ > - {GEN_CMD_CODE(_SetMacAddress), NULL}, /58/ > - > - {GEN_CMD_CODE(_DisconnectCtrl), NULL}, /59/ > - {GEN_CMD_CODE(_SetChannelPlan), NULL}, /60/ > - {GEN_CMD_CODE(_DisconnectCtrlEx), NULL}, /61/ > - > - / To do, modify these h2c cmd, add or delete / > - {GEN_CMD_CODE(_GetH2cLbk), NULL}, > - > - {SetProbeReqExtraIE_CMD, NULL}, > - {SetAssocReqExtraIE_CMD, NULL}, > - {SetProbeRspExtraIE_CMD, NULL}, > - {SetAssocRspExtraIE_CMD, NULL}, > - {GetCurDataRate_CMD, NULL}, > - {GetTxRetrycnt_CMD, NULL}, > - {GetRxRetrycnt_CMD, NULL}, > - {GetBCNOKcnt_CMD, NULL}, > - {GetBCNERRcnt_CMD, NULL}, > - {GetCurTxPwrLevel_CMD, NULL}, > - {SetDIG_CMD, NULL}, > - {SetRA_CMD, NULL}, > - {SetPT_CMD, NULL}, > - {GEN_CMD_CODE(_ReadTSSI), &r8712_readtssi_cmdrsp_callback} > -}; > -#endif > - > -#endif > diff --git a/drivers/staging/rtl8712/rtl8712_cmdctrl_bitdef.h b/drivers/staging/rtl8712/rtl8712_cmdctrl_bitdef.h > deleted file mode 100644 > index 68bdec07f51e..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_cmdctrl_bitdef.h > +++ /dev/null > @@ -1,95 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/***** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL8712_CMDCTRL_BITDEF_H > -#define RTL8712_CMDCTRL_BITDEF_H > - > -/ > - * 2. Command Control Registers (Offset: 0x0040 - 0x004F) > - / > -/--------------------------------------------------------------------------/ > -/ 8192S (CMD) command register bits (Offset 0x40, 16 bits)/ > -/--------------------------------------------------------------------------/ > -#define _APSDOFF_STATUS BIT(15) > -#define _APSDOFF BIT(14) > -#define _BBRSTn BIT(13) /Enable OFDM/CCK/ > -#define _BB_GLB_RSTn BIT(12) /Enable BB/ > -#define _SCHEDULE_EN BIT(10) /Enable MAC scheduler/ > -#define _MACRXEN BIT(9) > -#define _MACTXEN BIT(8) > -#define _DDMA_EN BIT(7) /FW off load function enable/ > -#define _FW2HW_EN BIT(6) /MAC every module reset / > -#define _RXDMA_EN BIT(5) > -#define _TXDMA_EN BIT(4) > -#define _HCI_RXDMA_EN BIT(3) > -#define _HCI_TXDMA_EN BIT(2) > - > -/TXPAUSE/ > -#define _STOPHCCA BIT(6) > -#define _STOPHIGH BIT(5) > -#define _STOPMGT BIT(4) > -#define _STOPVO BIT(3) > -#define _STOPVI BIT(2) > -#define _STOPBE BIT(1) > -#define _STOPBK BIT(0) > - > -/TCR/ > -#define _DISCW BIT(20) > -#define _ICV BIT(19) > -#define _CFEND_FMT BIT(17) > -#define _CRC BIT(16) > -#define _FWRDY BIT(7) > -#define _BASECHG BIT(6) > -#define _IMEM_RDY BIT(5) > -#define _DMEM_CODE_DONE BIT(4) > -#define _EMEM_CHK_RPT BIT(3) > -#define _EMEM_CODE_DONE BIT(2) > -#define _IMEM_CHK_RPT BIT(1) > -#define _IMEM_CODE_DONE BIT(0) > - > -#define _TXDMA_INIT_VALUE (_IMEM_CHK_RPT | _EMEM_CHK_RPT) > - > -/RCR/ > -#define _ENMBID BIT(27) > -#define _APP_PHYST_RXFF BIT(25) > -#define _APP_PHYST_STAFF BIT(24) > -#define _CBSSID BIT(23) > -#define _APWRMGT BIT(22) > -#define _ADD3 BIT(21) > -#define _AMF BIT(20) > -#define _ACF BIT(19) > -#define _ADF BIT(18) > -#define _APP_MIC BIT(17) > -#define _APP_ICV BIT(16) > -#define _RXFTH_MSK 0x0000E000 > -#define _RXFTH_SHT 13 > -#define _AICV BIT(12) > -#define _RXPKTLMT_MSK 0x00000FC0 > -#define _RXPKTLMT_SHT 6 > -#define _ACRC32 BIT(5) > -#define _AB BIT(3) > -#define _AM BIT(2) > -#define _APM BIT(1) > -#define _AAP BIT(0) > - > -/MSR/ > -#define _NETTYPE_MSK 0x03 > -#define _NETTYPE_SHT 0 > - > -/BT/ > -#define _BTMODE_MSK 0x06 > -#define _BTMODE_SHT 1 > -#define _ENBT BIT(0) > - > -/MBIDCTRL/ > -#define _ENMBID_MODE BIT(15) > -#define _BCNNO_MSK 0x7000 > -#define _BCNNO_SHT 12 > -#define _BCNSPACE_MSK 0x0FFF > -#define _BCNSPACE_SHT 0 > - > -#endif / RTL8712_CMDCTRL_BITDEF_H/ > - > diff --git a/drivers/staging/rtl8712/rtl8712_cmdctrl_regdef.h b/drivers/staging/rtl8712/rtl8712_cmdctrl_regdef.h > deleted file mode 100644 > index fc67771c89b7..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_cmdctrl_regdef.h > +++ /dev/null > @@ -1,19 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/****** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL8712_CMDCTRL_REGDEF_H > -#define RTL8712_CMDCTRL_REGDEF_H > - > -#define CR (RTL8712_CMDCTRL_ + 0x0000) > -#define TXPAUSE (RTL8712_CMDCTRL_ + 0x0002) > -#define TCR (RTL8712_CMDCTRL_ + 0x0004) > -#define RCR (RTL8712_CMDCTRL_ + 0x0008) > -#define MSR (RTL8712_CMDCTRL_ + 0x000C) > -#define SYSF_CFG (RTL8712_CMDCTRL_ + 0x000D) > -#define MBIDCTRL (RTL8712_CMDCTRL_ + 0x000E) > - > -#endif / RTL8712_CMDCTRL_REGDEF_H / > - > diff --git a/drivers/staging/rtl8712/rtl8712_debugctrl_bitdef.h b/drivers/staging/rtl8712/rtl8712_debugctrl_bitdef.h > deleted file mode 100644 > index bb3863467f0d..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_debugctrl_bitdef.h > +++ /dev/null > @@ -1,41 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL8712_DEBUGCTRL_BITDEF_H > -#define RTL8712_DEBUGCTRL_BITDEF_H > - > -/BIST/ > -#define _BIST_RST BIT(0) > - > -/LMS/ > -#define _LMS_MSK 0x03 > - > -/WDG_CTRL/ > -#define _OVSEL_MSK 0x0600 > -#define _OVSEL_SHT 9 > -#define _WDGCLR BIT(8) > -#define _WDGEN_MSK 0x00FF > -#define _WDGEN_SHT 0 > - > -/INTM/ > -#define _TXTIMER_MSK 0xF000 > -#define _TXTIMER_SHT 12 > -#define _TXNUM_MSK 0x0F00 > -#define _TXNUM_SHT 8 > -#define _RXTIMER_MSK 0x00F0 > -#define _RXTIMER_SHT 4 > -#define _RXNUM_MSK 0x000F > -#define _RXNUM_SHT 0 > - > -/FDLOCKTURN0/ > -/FDLOCKTURN1/ > -#define _TURN1 BIT(0) > - > -/FDLOCKFLAG0/ > -/FDLOCKFLAG1/ > -#define _LOCKFLAG1_MSK 0x03 > - > -#endif / RTL8712_DEBUGCTRL_BITDEF_H / > diff --git a/drivers/staging/rtl8712/rtl8712_debugctrl_regdef.h b/drivers/staging/rtl8712/rtl8712_debugctrl_regdef.h > deleted file mode 100644 > index 319220e9d53d..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_debugctrl_regdef.h > +++ /dev/null > @@ -1,32 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL8712_DEBUGCTRL_REGDEF_H > -#define RTL8712_DEBUGCTRL_REGDEF_H > - > -#define BIST (RTL8712_DEBUGCTRL_ + 0x00) > -#define DBS (RTL8712_DEBUGCTRL_ + 0x04) > -#define LMS (RTL8712_DEBUGCTRL_ + 0x05) > -#define CPUINST (RTL8712_DEBUGCTRL_ + 0x08) > -#define CPUCAUSE (RTL8712_DEBUGCTRL_ + 0x0C) > -#define LBUS_ERR_ADDR (RTL8712_DEBUGCTRL_ + 0x10) > -#define LBUS_ERR_CMD (RTL8712_DEBUGCTRL_ + 0x14) > -#define LBUS_ERR_DATA_L (RTL8712_DEBUGCTRL_ + 0x18) > -#define LBUS_ERR_DATA_H (RTL8712_DEBUGCTRL_ + 0x1C) > -#define LBUS_EXCEPTION_ADDR (RTL8712_DEBUGCTRL_ + 0x20) > -#define WDG_CTRL (RTL8712_DEBUGCTRL_ + 0x24) > -#define INTMTU (RTL8712_DEBUGCTRL_ + 0x28) > -#define INTM (RTL8712_DEBUGCTRL_ + 0x2A) > -#define FDLOCKTURN0 (RTL8712_DEBUGCTRL_ + 0x2C) > -#define FDLOCKTURN1 (RTL8712_DEBUGCTRL_ + 0x2D) > -#define FDLOCKFLAG0 (RTL8712_DEBUGCTRL_ + 0x2E) > -#define FDLOCKFLAG1 (RTL8712_DEBUGCTRL_ + 0x2F) > -#define TRXPKTBUF_DBG_DATA (RTL8712_DEBUGCTRL_ + 0x30) > -#define TRXPKTBUF_DBG_CTRL (RTL8712_DEBUGCTRL_ + 0x38) > -#define DPLL_MON (RTL8712_DEBUGCTRL_ + 0x3A) > - > -#endif / RTL8712_DEBUGCTRL_REGDEF_H / > - > diff --git a/drivers/staging/rtl8712/rtl8712_edcasetting_bitdef.h b/drivers/staging/rtl8712/rtl8712_edcasetting_bitdef.h > deleted file mode 100644 > index 9048d6a65296..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_edcasetting_bitdef.h > +++ /dev/null > @@ -1,65 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef RTL8712_EDCASETTING_BITDEF_H > -#define RTL8712_EDCASETTING_BITDEF_H > - > -/EDCAPARAM/ > -#define _TXOPLIMIT_MSK 0xFFFF0000 > -#define _TXOPLIMIT_SHT 16 > -#define _ECWIN_MSK 0x0000FF00 > -#define _ECWIN_SHT 8 > -#define _AIFS_MSK 0x000000FF > -#define _AIFS_SHT 0 > - > -/BCNTCFG/ > -#define _BCNECW_MSK 0xFF00 > -#define _BCNECW_SHT 8 > -#define _BCNIFS_MSK 0x00FF > -#define _BCNIFS_SHT 0 > - > -/CWRR/ > -#define _CWRR_MSK 0x03FF > - > -/ACMAVG/ > -#define _AVG_TIME_UP BIT(3) > -#define _AVGPERIOD_MSK 0x03 > - > -/ACMHWCTRL/ > -#define _VOQ_ACM_STATUS BIT(6) > -#define _VIQ_ACM_STATUS BIT(5) > -#define _BEQ_ACM_STATUS BIT(4) > -#define _VOQ_ACM_EN BIT(3) > -#define _VIQ_ACM_EN BIT(2) > -#define _BEQ_ACM_EN BIT(1) > -#define _ACMHWEN BIT(0) > - > -/VO_ADMTIME/ > -#define _VO_ACM_RUT BIT(18) > -#define _VO_ADMTIME_MSK 0x0003FFF > - > -/VI_ADMTIME/ > -#define _VI_ACM_RUT BIT(18) > -#define _VI_ADMTIME_MSK 0x0003FFF > - > -/BE_ADMTIME/ > -#define _BE_ACM_RUT BIT(18) > -#define _BE_ADMTIME_MSK 0x0003FFF > - > -/Retry limit reg/ > -#define _SRL_MSK 0xFF00 > -#define _SRL_SHT 8 > -#define _LRL_MSK 0x00FF > -#define _LRL_SHT 0 > - > -#endif / RTL8712_EDCASETTING_BITDEF_H/ > diff --git a/drivers/staging/rtl8712/rtl8712_edcasetting_regdef.h b/drivers/staging/rtl8712/rtl8712_edcasetting_regdef.h > deleted file mode 100644 > index 02ec9f3bba66..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_edcasetting_regdef.h > +++ /dev/null > @@ -1,24 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - *****************************************************************************/ > -#ifndef RTL8712_EDCASETTING_REGDEF_H > -#define RTL8712_EDCASETTING_REGDEF_H > - > -#define EDCA_VO_PARAM (RTL8712_EDCASETTING_ + 0x00) > -#define EDCA_VI_PARAM (RTL8712_EDCASETTING_ + 0x04) > -#define EDCA_BE_PARAM (RTL8712_EDCASETTING_ + 0x08) > -#define EDCA_BK_PARAM (RTL8712_EDCASETTING_ + 0x0C) > -#define BCNTCFG (RTL8712_EDCASETTING_ + 0x10) > -#define CWRR (RTL8712_EDCASETTING_ + 0x12) > -#define ACMAVG (RTL8712_EDCASETTING_ + 0x16) > -#define ACMHWCTRL (RTL8712_EDCASETTING_ + 0x17) > -#define VO_ADMTIME (RTL8712_EDCASETTING_ + 0x18) > -#define VI_ADMTIME (RTL8712_EDCASETTING_ + 0x1C) > -#define BE_ADMTIME (RTL8712_EDCASETTING_ + 0x20) > -#define RL (RTL8712_EDCASETTING_ + 0x24) > - > -#endif / RTL8712_EDCASETTING_REGDEF_H / > - > diff --git a/drivers/staging/rtl8712/rtl8712_efuse.c b/drivers/staging/rtl8712/rtl8712_efuse.c > deleted file mode 100644 > index a39d6c06648f..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_efuse.c > +++ /dev/null > @@ -1,563 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/ > - * rtl8712_efuse.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx. > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - *****************************************************************************/ > - > -#define RTL8712_EFUSE_C > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "rtl8712_efuse.h" > - > -/ reserve 3 bytes for HW stop read */ > -static int efuse_available_max_size = EFUSE_MAX_SIZE - 3 /0x1FD/; > - > -static void efuse_reg_ctrl(struct _adapter adapter, u8 bPowerOn) > -{ > - u8 tmpu8 = 0; > - > - if (bPowerOn) { > - / -----------------e-fuse pwr & clk reg ctrl --------------- > - * Enable LDOE25 Macro Block > - / > - tmpu8 = r8712_read8(adapter, EFUSE_TEST + 3); > - tmpu8 |= 0x80; > - r8712_write8(adapter, EFUSE_TEST + 3, tmpu8); > - msleep(20); / for some platform , need some delay time / > - / Change Efuse Clock for write action to 40MHZ / > - r8712_write8(adapter, EFUSE_CLK_CTRL, 0x03); > - msleep(20); / for some platform , need some delay time / > - } else { > - / -----------------e-fuse pwr & clk reg ctrl ----------------- > - * Disable LDOE25 Macro Block > - / > - tmpu8 = r8712_read8(adapter, EFUSE_TEST + 3); > - tmpu8 &= 0x7F; > - r8712_write8(adapter, EFUSE_TEST + 3, tmpu8); > - / Change Efuse Clock for write action to 500K / > - r8712_write8(adapter, EFUSE_CLK_CTRL, 0x02); > - } > -} > - > -/ > - * Before write E-Fuse, this function must be called. > - */ > -u8 r8712_efuse_reg_init(struct _adapter *adapter) > -{ > - return true; > -} > - > -void r8712_efuse_reg_uninit(struct _adapter *adapter) > -{ > - efuse_reg_ctrl(adapter, false); > -} > - > -static u8 efuse_one_byte_read(struct _adapter *adapter, u16 addr, u8 data) > -{ > - u8 tmpidx = 0, bResult; > - > - / -----------------e-fuse reg ctrl --------------------------------- / > - r8712_write8(adapter, EFUSE_CTRL + 1, (u8)(addr & 0xFF)); / address */ > - r8712_write8(adapter, EFUSE_CTRL + 2, ((u8)((addr >> 8) & 0x03)) | > > - (r8712_read8(adapter, EFUSE_CTRL + 2) & 0xFC)); > - r8712_write8(adapter, EFUSE_CTRL + 3, 0x72); /* read cmd / > - / wait for complete */ > - while (!(0x80 & r8712_read8(adapter, EFUSE_CTRL + 3)) && > - (tmpidx < 100)) > - tmpidx++; > - if (tmpidx < 100) { > - *data = r8712_read8(adapter, EFUSE_CTRL); > - bResult = true; > - } else { > - *data = 0xff; > - bResult = false; > - } > - return bResult; > -} > - > -static u8 efuse_one_byte_write(struct _adapter adapter, u16 addr, u8 data) > -{ > - u8 tmpidx = 0, bResult; > - > - / -----------------e-fuse reg ctrl -------------------------------- / > - r8712_write8(adapter, EFUSE_CTRL + 1, (u8)(addr & 0xFF)); / address */ > - r8712_write8(adapter, EFUSE_CTRL + 2, ((u8)((addr >> 8) & 0x03)) | > > - (r8712_read8(adapter, EFUSE_CTRL + 2) & 0xFC)); > - r8712_write8(adapter, EFUSE_CTRL, data); /* data / > - r8712_write8(adapter, EFUSE_CTRL + 3, 0xF2); / write cmd / > - / wait for complete */ > - while ((0x80 & r8712_read8(adapter, EFUSE_CTRL + 3)) && > - (tmpidx < 100)) > - tmpidx++; > - if (tmpidx < 100) > - bResult = true; > - else > - bResult = false; > - return bResult; > -} > - > -static u8 efuse_one_byte_rw(struct _adapter *adapter, u8 bRead, u16 addr, > - u8 data) > -{ > - u8 tmpidx = 0, tmpv8 = 0, bResult; > - > - / -----------------e-fuse reg ctrl --------------------------------- / > - r8712_write8(adapter, EFUSE_CTRL + 1, (u8)(addr & 0xFF)); / address */ > - tmpv8 = ((u8)((addr >> 8) & 0x03)) | > > - (r8712_read8(adapter, EFUSE_CTRL + 2) & 0xFC); > - r8712_write8(adapter, EFUSE_CTRL + 2, tmpv8); > - if (bRead) { > - r8712_write8(adapter, EFUSE_CTRL + 3, 0x72); /* read cmd */ > - while (!(0x80 & r8712_read8(adapter, EFUSE_CTRL + 3)) && > - (tmpidx < 100)) > - tmpidx++; > - if (tmpidx < 100) { > - *data = r8712_read8(adapter, EFUSE_CTRL); > - bResult = true; > - } else { > - *data = 0; > - bResult = false; > - } > - } else { > - r8712_write8(adapter, EFUSE_CTRL, data); / data / > - r8712_write8(adapter, EFUSE_CTRL + 3, 0xF2); / write cmd */ > - while ((0x80 & r8712_read8(adapter, EFUSE_CTRL + 3)) && > - (tmpidx < 100)) > - tmpidx++; > - if (tmpidx < 100) > - bResult = true; > - else > - bResult = false; > - } > - return bResult; > -} > - > -static u8 efuse_is_empty(struct _adapter *adapter, u8 empty) > -{ > - u8 value, ret = true; > - > - / read one byte to check if E-Fuse is empty */ > - if (efuse_one_byte_rw(adapter, true, 0, &value)) { > - if (value == 0xFF) > - *empty = true; > - else > - *empty = false; > - } else { > - ret = false; > - } > - return ret; > -} > - > -void r8712_efuse_change_max_size(struct _adapter *adapter) > -{ > - u16 pre_pg_data_saddr = 0x1FB; > - u16 i; > - u16 pre_pg_data_size = 5; > - u8 pre_pg_data[5]; > - > - for (i = 0; i < pre_pg_data_size; i++) > - efuse_one_byte_read(adapter, pre_pg_data_saddr + i, > - &pre_pg_data[i]); > - if ((pre_pg_data[0] == 0x03) && (pre_pg_data[1] == 0x00) && > - (pre_pg_data[2] == 0x00) && (pre_pg_data[3] == 0x00) && > - (pre_pg_data[4] == 0x0C)) > - efuse_available_max_size -= pre_pg_data_size; > -} > - > -int r8712_efuse_get_max_size(struct _adapter adapter) > -{ > - return efuse_available_max_size; > -} > - > -static u8 calculate_word_cnts(const u8 word_en) > -{ > - u8 word_cnts = 0; > - u8 word_idx; > - > - for (word_idx = 0; word_idx < PGPKG_MAX_WORDS; word_idx++) > - if (!(word_en & BIT(word_idx))) > - word_cnts++; / 0 : write enable */ > - return word_cnts; > -} > - > -static void pgpacket_copy_data(const u8 word_en, const u8 *sourdata, > - u8 *targetdata) > -{ > - u8 tmpindex = 0; > - u8 word_idx, byte_idx; > - > - for (word_idx = 0; word_idx < PGPKG_MAX_WORDS; word_idx++) { > - if (!(word_en & BIT(word_idx))) { > - byte_idx = word_idx * 2; > - targetdata[byte_idx] = sourdata[tmpindex++]; > - targetdata[byte_idx + 1] = sourdata[tmpindex++]; > - } > - } > -} > - > -u16 r8712_efuse_get_current_size(struct _adapter adapter) > -{ > - int bContinual = true; > - u16 efuse_addr = 0; > - u8 hworden = 0; > - u8 efuse_data, word_cnts = 0; > - > - while (bContinual && efuse_one_byte_read(adapter, efuse_addr, &efuse_data) && > - (efuse_addr < efuse_available_max_size)) { > - if (efuse_data != 0xFF) { > - hworden = efuse_data & 0x0F; > - word_cnts = calculate_word_cnts(hworden); > - / read next header */ > - efuse_addr = efuse_addr + (word_cnts * 2) + 1; > - } else { > - bContinual = false; > - } > - } > - return efuse_addr; > -} > - > -u8 r8712_efuse_pg_packet_read(struct _adapter *adapter, u8 offset, u8 *data) > -{ > - u8 hoffset = 0, hworden = 0, word_cnts = 0; > - u16 efuse_addr = 0; > - u8 efuse_data; > - u8 tmpidx = 0; > - u8 tmpdata[PGPKT_DATA_SIZE]; > - u8 ret = true; > - > - if (!data) > - return false; > - if (offset > 0x0f) > > - return false; > - memset(data, 0xFF, sizeof(u8) * PGPKT_DATA_SIZE); > - while (efuse_addr < efuse_available_max_size) { > - if (efuse_one_byte_read(adapter, efuse_addr, &efuse_data)) { > - if (efuse_data == 0xFF) > - break; > - hoffset = (efuse_data >> 4) & 0x0F; > > - hworden = efuse_data & 0x0F; > - word_cnts = calculate_word_cnts(hworden); > - if (hoffset == offset) { > - memset(tmpdata, 0xFF, PGPKT_DATA_SIZE); > - for (tmpidx = 0; tmpidx < word_cnts * 2; > - tmpidx++) { > - if (efuse_one_byte_read(adapter, efuse_addr + 1 + tmpidx, > - &efuse_data)) { > - tmpdata[tmpidx] = efuse_data; > - } else { > - ret = false; > - } > - } > - pgpacket_copy_data(hworden, tmpdata, data); > - } > - efuse_addr += 1 + (word_cnts * 2); > - } else { > - ret = false; > - break; > - } > - } > - return ret; > -} > - > -static u8 fix_header(struct _adapter *adapter, u8 header, u16 header_addr) > -{ > - struct PGPKT_STRUCT pkt; > - u8 offset, word_en, value; > - u16 addr; > - int i; > - u8 ret = true; > - > - pkt.offset = GET_EFUSE_OFFSET(header); > - pkt.word_en = GET_EFUSE_WORD_EN(header); > - addr = header_addr + 1 + calculate_word_cnts(pkt.word_en) * 2; > - if (addr > efuse_available_max_size) > > - return false; > - /* retrieve original data / > - addr = 0; > - while (addr < header_addr) { > - if (!efuse_one_byte_read(adapter, addr++, &value)) { > - ret = false; > - break; > - } > - offset = GET_EFUSE_OFFSET(value); > - word_en = GET_EFUSE_WORD_EN(value); > - if (pkt.offset != offset) { > - addr += calculate_word_cnts(word_en) * 2; > - continue; > - } > - for (i = 0; i < PGPKG_MAX_WORDS; i++) { > - if (!(BIT(i) & word_en)) > - continue; > - if (BIT(i) & pkt.word_en) { > - if (efuse_one_byte_read(adapter, > - addr, > - &value)) > - pkt.data[i * 2] = value; > - else > - return false; > - if (efuse_one_byte_read(adapter, > - addr + 1, > - &value)) > - pkt.data[i * 2 + 1] = value; > - else > - return false; > - } > - addr += 2; > - } > - } > - if (addr != header_addr) > - return false; > - addr++; > - / fill original data / > - for (i = 0; i < PGPKG_MAX_WORDS; i++) { > - if (BIT(i) & pkt.word_en) { > - efuse_one_byte_write(adapter, addr, pkt.data[i * 2]); > - efuse_one_byte_write(adapter, addr + 1, > - pkt.data[i * 2 + 1]); > - / additional check / > - if (!efuse_one_byte_read(adapter, addr, &value)) { > - ret = false; > - } else if (pkt.data[i * 2] != value) { > - ret = false; > - if (value == 0xFF) / write again / > - efuse_one_byte_write(adapter, addr, > - pkt.data[i * 2]); > - } > - if (!efuse_one_byte_read(adapter, addr + 1, &value)) { > - ret = false; > - } else if (pkt.data[i * 2 + 1] != value) { > - ret = false; > - if (value == 0xFF) / write again */ > - efuse_one_byte_write(adapter, addr + 1, > - pkt.data[i * 2 + > - 1]); > - } > - } > - addr += 2; > - } > - return ret; > -} > - > -u8 r8712_efuse_pg_packet_write(struct _adapter *adapter, const u8 offset, > - const u8 word_en, const u8 data) > -{ > - u8 pg_header = 0; > - u16 efuse_addr = 0, curr_size = 0; > - u8 efuse_data, target_word_cnts = 0; > - int repeat_times; > - int sub_repeat; > - u8 bResult = true; > - > - / check if E-Fuse Clock Enable and E-Fuse Clock is 40M */ > - efuse_data = r8712_read8(adapter, EFUSE_CLK_CTRL); > - if (efuse_data != 0x03) > - return false; > - pg_header = MAKE_EFUSE_HEADER(offset, word_en); > - target_word_cnts = calculate_word_cnts(word_en); > - repeat_times = 0; > - efuse_addr = 0; > - while (efuse_addr < efuse_available_max_size) { > - curr_size = r8712_efuse_get_current_size(adapter); > - if ((curr_size + 1 + target_word_cnts * 2) > > > - efuse_available_max_size) > - return false; /target_word_cnts + pg header(1 byte)/ > - efuse_addr = curr_size; /* current size is also the last addr*/ > - efuse_one_byte_write(adapter, efuse_addr, pg_header); /hdr/ > - sub_repeat = 0; > - /* check if what we read is what we write */ > - while (!efuse_one_byte_read(adapter, efuse_addr, > - &efuse_data)) { > - if (++sub_repeat > REPEAT_THRESHOLD) { > > - bResult = false; /* continue to blind write / > - break; / continue to blind write */ > - } > - } > - if ((sub_repeat > REPEAT_THRESHOLD) || > > - (pg_header == efuse_data)) { > - /* write header ok OR can't check header(creep) / > - u8 i; > - > - / go to next address / > - efuse_addr++; > - for (i = 0; i < target_word_cnts * 2; i++) { > - efuse_one_byte_write(adapter, > - efuse_addr + i, > - (data + i)); > - if (!efuse_one_byte_read(adapter, > - efuse_addr + i, > - &efuse_data)) > - bResult = false; > - else if ((data + i) != efuse_data) / fail / > - bResult = false; > - } > - break; > - } > - / write header fail / > - bResult = false; > - if (efuse_data == 0xFF) > - return bResult; / nothing damaged. / > - / call rescue procedure / > - if (!fix_header(adapter, efuse_data, efuse_addr)) > - return false; / rescue fail / > - > - if (++repeat_times > REPEAT_THRESHOLD) / fail */ > > - break; > - /* otherwise, take another risk... */ > - } > - return bResult; > -} > - > -u8 r8712_efuse_access(struct _adapter *adapter, u8 bRead, u16 start_addr, > - u16 cnts, u8 *data) > -{ > - int i; > - u8 res = true; > - > - if (start_addr > EFUSE_MAX_SIZE) > > - return false; > - if (!bRead && ((start_addr + cnts) > > > - efuse_available_max_size)) > - return false; > - if (!bRead && !r8712_efuse_reg_init(adapter)) > - return false; > - /* -----------------e-fuse one byte read / write ---------------------*/ > - for (i = 0; i < cnts; i++) { > - if ((start_addr + i) > EFUSE_MAX_SIZE) { > > - res = false; > - break; > - } > - res = efuse_one_byte_rw(adapter, bRead, start_addr + i, > - data + i); > - if (!bRead && !res) > - break; > - } > - if (!bRead) > - r8712_efuse_reg_uninit(adapter); > - return res; > -} > - > -u8 r8712_efuse_map_read(struct _adapter *adapter, u16 addr, u16 cnts, u8 *data) > -{ > - u8 offset, ret = true; > - u8 pktdata[PGPKT_DATA_SIZE]; > - int i, idx; > - > - if ((addr + cnts) > EFUSE_MAP_MAX_SIZE) > > - return false; > - if (efuse_is_empty(adapter, &offset) && offset) { > - for (i = 0; i < cnts; i++) > - data[i] = 0xFF; > - return ret; > - } > - offset = (addr >> 3) & 0xF; > > - ret = r8712_efuse_pg_packet_read(adapter, offset, pktdata); > - i = addr & 0x7; /* pktdata index / > - idx = 0; / data index */ > - > - do { > - for (; i < PGPKT_DATA_SIZE; i++) { > - data[idx++] = pktdata[i]; > - if (idx == cnts) > - return ret; > - } > - offset++; > - if (!r8712_efuse_pg_packet_read(adapter, offset, pktdata)) > - ret = false; > - i = 0; > - } while (1); > - return ret; > -} > - > -u8 r8712_efuse_map_write(struct _adapter *adapter, u16 addr, u16 cnts, > - u8 *data) > -{ > - u8 offset, word_en, empty; > - u8 pktdata[PGPKT_DATA_SIZE], newdata[PGPKT_DATA_SIZE]; > - int i, j, idx; > - > - if ((addr + cnts) > EFUSE_MAP_MAX_SIZE) > > - return false; > - /* check if E-Fuse Clock Enable and E-Fuse Clock is 40M */ > - empty = r8712_read8(adapter, EFUSE_CLK_CTRL); > - if (empty != 0x03) > - return false; > - if (efuse_is_empty(adapter, &empty)) { > - if (empty) > - memset(pktdata, 0xFF, PGPKT_DATA_SIZE); > - } else { > - return false; > - } > - offset = (addr >> 3) & 0xF; > > - if (!empty) > - if (!r8712_efuse_pg_packet_read(adapter, offset, pktdata)) > - return false; > - word_en = 0xF; > - memset(newdata, 0xFF, PGPKT_DATA_SIZE); > - i = addr & 0x7; /* pktdata index / > - j = 0; / newdata index / > - idx = 0; / data index / > - > - if (i & 0x1) { > - / odd start */ > - if (data[idx] != pktdata[i]) { > - word_en &= ~BIT(i >> 1); > > - newdata[j++] = pktdata[i - 1]; > - newdata[j++] = data[idx]; > - } > - i++; > - idx++; > - } > - do { > - for (; i < PGPKT_DATA_SIZE; i += 2) { > - if ((cnts - idx) == 1) { > - if (data[idx] != pktdata[i]) { > - word_en &= ~BIT(i >> 1); > > - newdata[j++] = data[idx]; > - newdata[j++] = pktdata[1 + 1]; > - } > - idx++; > - break; > - } > - > - if ((data[idx] != pktdata[i]) || (data[idx + 1] != > - pktdata[i + 1])) { > - word_en &= ~BIT(i >> 1); > > - newdata[j++] = data[idx]; > - newdata[j++] = data[idx + 1]; > - } > - idx += 2; > - > - if (idx == cnts) > - break; > - } > - > - if (word_en != 0xF) > - if (!r8712_efuse_pg_packet_write(adapter, offset, > - word_en, newdata)) > - return false; > - if (idx == cnts) > - break; > - offset++; > - if (!empty) > - if (!r8712_efuse_pg_packet_read(adapter, offset, > - pktdata)) > - return false; > - i = 0; > - j = 0; > - word_en = 0xF; > - memset(newdata, 0xFF, PGPKT_DATA_SIZE); > - } while (1); > - > - return true; > -} > diff --git a/drivers/staging/rtl8712/rtl8712_efuse.h b/drivers/staging/rtl8712/rtl8712_efuse.h > deleted file mode 100644 > index 7a49740212eb..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_efuse.h > +++ /dev/null > @@ -1,44 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -#ifndef RTL8712_EFUSE_H > -#define RTL8712_EFUSE_H > - > -#include "osdep_service.h" > - > -#define REPEAT_THRESHOLD 3 > - > -#define EFUSE_MAX_SIZE 512 > -#define EFUSE_MAP_MAX_SIZE 128 > - > -#define PGPKG_MAX_WORDS 4 > -#define PGPKT_DATA_SIZE 8 / PGPKG_MAX_WORDS2; BYTES sizeof(u8)8/ > -#define MAX_PGPKT_SIZE 9 / 1 + PGPKT_DATA_SIZE; header + 2 * 4 words (BYTES)*/ > - > -#define GET_EFUSE_OFFSET(header) ((header & 0xF0) >> 4) > > -#define GET_EFUSE_WORD_EN(header) (header & 0x0F) > -#define MAKE_EFUSE_HEADER(offset, word_en) ((((offset) & 0x0F) << 4) | \ > - ((word_en) & 0x0F)) > -/--------------------------------------------------------------------------/ > -struct PGPKT_STRUCT { > - u8 offset; > - u8 word_en; > - u8 data[PGPKT_DATA_SIZE]; > -}; > - > -/--------------------------------------------------------------------------/ > -u8 r8712_efuse_reg_init(struct _adapter padapter); > -void r8712_efuse_reg_uninit(struct _adapter padapter); > -u16 r8712_efuse_get_current_size(struct _adapter padapter); > -int r8712_efuse_get_max_size(struct _adapter padapter); > -void r8712_efuse_change_max_size(struct _adapter padapter); > -u8 r8712_efuse_pg_packet_read(struct _adapter padapter, > - u8 offset, u8 data); > -u8 r8712_efuse_pg_packet_write(struct _adapter padapter, > - const u8 offset, const u8 word_en, > - const u8 data); > -u8 r8712_efuse_access(struct _adapter padapter, u8 bRead, > - u16 start_addr, u16 cnts, u8 data); > -u8 r8712_efuse_map_read(struct _adapter padapter, u16 addr, > - u16 cnts, u8 data); > -u8 r8712_efuse_map_write(struct _adapter padapter, u16 addr, > - u16 cnts, u8 data); > -#endif > diff --git a/drivers/staging/rtl8712/rtl8712_event.h b/drivers/staging/rtl8712/rtl8712_event.h > deleted file mode 100644 > index 0d3e5feadcc0..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_event.h > +++ /dev/null > @@ -1,86 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/*************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - **/ > -#ifndef RTL8712_EVENT_H > -#define RTL8712_EVENT_H > - > -void r8712_event_handle(struct _adapter padapter, __le32 peventbuf); > -void r8712_got_addbareq_event_callback(struct _adapter adapter, u8 pbuf); > - > -enum rtl8712_c2h_event { > - GEN_EVT_CODE(_Read_MACREG) = 0, /0/ > - GEN_EVT_CODE(_Read_BBREG), > - GEN_EVT_CODE(_Read_RFREG), > - GEN_EVT_CODE(_Read_EEPROM), > - GEN_EVT_CODE(_Read_EFUSE), > - GEN_EVT_CODE(_Read_CAM), /5/ > - GEN_EVT_CODE(_Get_BasicRate), > - GEN_EVT_CODE(_Get_DataRate), > - GEN_EVT_CODE(_Survey), /8/ > - GEN_EVT_CODE(_SurveyDone), /9/ > - > - GEN_EVT_CODE(_JoinBss), /10/ > - GEN_EVT_CODE(_AddSTA), > - GEN_EVT_CODE(_DelSTA), > - GEN_EVT_CODE(_AtimDone), > - GEN_EVT_CODE(_TX_Report), > - GEN_EVT_CODE(_CCX_Report), /15/ > - GEN_EVT_CODE(_DTM_Report), > - GEN_EVT_CODE(_TX_Rate_Statistics), > - GEN_EVT_CODE(_C2HLBK), > - GEN_EVT_CODE(_FWDBG), > - GEN_EVT_CODE(_C2HFEEDBACK), /20/ > - GEN_EVT_CODE(_ADDBA), > - GEN_EVT_CODE(_C2HBCN), > - GEN_EVT_CODE(_ReportPwrState), /filen: only for PCIE, USB/ > - GEN_EVT_CODE(_WPS_PBC), /24/ > - GEN_EVT_CODE(_ADDBAReq_Report), /25/ > - MAX_C2HEVT > -}; > - > -#ifdef RTL8712_CMD_C > - > -static struct fwevent wlanevents[] = { > - {0, NULL}, /0/ > - {0, NULL}, > - {0, NULL}, > - {0, NULL}, > - {0, NULL}, > - {0, NULL}, > - {0, NULL}, > - {0, NULL}, > - {0, &r8712_survey_event_callback}, /8/ > - {sizeof(struct surveydone_event), > - &r8712_surveydone_event_callback}, /9/ > - > - {0, &r8712_joinbss_event_callback}, /10/ > - {sizeof(struct stassoc_event), &r8712_stassoc_event_callback}, > - {sizeof(struct stadel_event), &r8712_stadel_event_callback}, > - {0, &r8712_atimdone_event_callback}, > - {0, NULL}, > - {0, NULL}, /15/ > - {0, NULL}, > - {0, NULL}, > - {0, NULL}, > - {0, NULL}, /fwdbg_event_callback},/ > - {0, NULL}, /20/ > - {0, NULL}, > - {0, NULL}, > - {0, &r8712_cpwm_event_callback}, > - {0, &r8712_wpspbc_event_callback}, > - {0, &r8712_got_addbareq_event_callback}, > -}; > - > -#endif/RTL8712_CMD_C/ > - > -#endif > diff --git a/drivers/staging/rtl8712/rtl8712_fifoctrl_bitdef.h b/drivers/staging/rtl8712/rtl8712_fifoctrl_bitdef.h > deleted file mode 100644 > index f09645fa1886..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_fifoctrl_bitdef.h > +++ /dev/null > @@ -1,131 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL8712_FIFOCTRL_BITDEF_H > -#define RTL8712_FIFOCTRL_BITDEF_H > - > -/PBP/ > -#define _PSTX_MSK 0xF0 > -#define _PSTX_SHT 4 > -#define _PSRX_MSK 0x0F > -#define _PSRX_SHT 0 > - > -/TXFF_STATUS/ > -#define _TXSTATUS_OVF BIT(15) > - > -/RXFF_STATUS/ > -#define _STATUSFF1_OVF BIT(7) > -#define _STATUSFF1_EMPTY BIT(6) > -#define _STATUSFF0_OVF BIT(5) > -#define _STATUSFF0_EMPTY BIT(4) > -#define _RXFF1_OVF BIT(3) > -#define _RXFF1_EMPTY BIT(2) > -#define _RXFF0_OVF BIT(1) > -#define _RXFF0_EMPTY BIT(0) > - > -/TXFF_EMPTY_TH/ > -#define _BKQ_EMPTY_TH_MSK 0x0F0000 > -#define _BKQ_EMPTY_TH_SHT 16 > -#define _BEQ_EMPTY_TH_MSK 0x00F000 > -#define _BEQ_EMPTY_TH_SHT 12 > -#define _VIQ_EMPTY_TH_MSK 0x000F00 > -#define _VIQ_EMPTY_TH_SHT 8 > -#define _VOQ_EMPTY_TH_MSK 0x0000F0 > -#define _VOQ_EMPTY_TH_SHT 4 > -#define _BMCQ_EMPTY_TH_MSK 0x00000F > -#define _BMCQ_EMPTY_TH_SHT 0 > - > -/SDIO_RX_BLKSZ/ > -#define _SDIO_RX_BLKSZ_MSK 0x07 > - > -/RXDMA_CTRL/ > -#define _C2HFF_POLL BIT(4) > -#define _RXPKT_POLL BIT(0) > - > -/RXPKT_NUM/ > -#define _RXCMD_NUM_MSK 0xFF00 > -#define _RXCMD_NUM_SHT 8 > -#define _RXFF0_NUM_MSK 0x00FF > -#define _RXFF0_NUM_SHT 0 > - > -/FIFOPAGE2/ > -#define _PUB_AVAL_PG_MSK 0xFFFF0000 > -#define _PUB_AVAL_PG_SHT 16 > -#define _BCN_AVAL_PG_MSK 0x0000FFFF > -#define _BCN_AVAL_PG_SHT 0 > - > -/RX0PKTNUM/ > -#define _RXFF0_DEC_POLL BIT(15) > -#define _RXFF0_PKT_DEC_NUM_MSK 0x3F00 > -#define _RXFF0_PKT_DEC_NUM_SHT 8 > -#define _RXFF0_PKTNUM_RPT_MSK 0x00FF > -#define _RXFF0_PKTNUM_RPT_SHT 0 > - > -/RX1PKTNUM/ > -#define _RXFF1_DEC_POLL BIT(15) > -#define _RXFF1_PKT_DEC_NUM_MSK 0x3F00 > -#define _RXFF1_PKT_DEC_NUM_SHT 8 > -#define _RXFF1_PKTNUM_RPT_MSK 0x00FF > -#define _RXFF1_PKTNUM_RPT_SHT 0 > - > -/RXFLTMAP0/ > -#define _MGTFLT13EN BIT(13) > -#define _MGTFLT12EN BIT(12) > -#define _MGTFLT11EN BIT(11) > -#define _MGTFLT10EN BIT(10) > -#define _MGTFLT9EN BIT(9) > -#define _MGTFLT8EN BIT(8) > -#define _MGTFLT5EN BIT(5) > -#define _MGTFLT4EN BIT(4) > -#define _MGTFLT3EN BIT(3) > -#define _MGTFLT2EN BIT(2) > -#define _MGTFLT1EN BIT(1) > -#define _MGTFLT0EN BIT(0) > - > -/RXFLTMAP1/ > -#define _CTRLFLT15EN BIT(15) > -#define _CTRLFLT14EN BIT(14) > -#define _CTRLFLT13EN BIT(13) > -#define _CTRLFLT12EN BIT(12) > -#define _CTRLFLT11EN BIT(11) > -#define _CTRLFLT10EN BIT(10) > -#define _CTRLFLT9EN BIT(9) > -#define _CTRLFLT8EN BIT(8) > -#define _CTRLFLT7EN BIT(7) > -#define _CTRLFLT6EN BIT(6) > - > -/RXFLTMAP2/ > -#define _DATAFLT15EN BIT(15) > -#define _DATAFLT14EN BIT(14) > -#define _DATAFLT13EN BIT(13) > -#define _DATAFLT12EN BIT(12) > -#define _DATAFLT11EN BIT(11) > -#define _DATAFLT10EN BIT(10) > -#define _DATAFLT9EN BIT(9) > -#define _DATAFLT8EN BIT(8) > -#define _DATAFLT7EN BIT(7) > -#define _DATAFLT6EN BIT(6) > -#define _DATAFLT5EN BIT(5) > -#define _DATAFLT4EN BIT(4) > -#define _DATAFLT3EN BIT(3) > -#define _DATAFLT2EN BIT(2) > -#define _DATAFLT1EN BIT(1) > -#define _DATAFLT0EN BIT(0) > - > -/RXFLTMAP3/ > -#define _MESHAFLT1EN BIT(1) > -#define _MESHAFLT0EN BIT(0) > - > -/TXPKT_NUM_CTRL/ > -#define _TXPKTNUM_DEC BIT(8) > -#define _TXPKTNUM_MSK 0x00FF > -#define _TXPKTNUM_SHT 0 > - > -/TXFF_PG_NUM/ > -#define _TXFF_PG_NUM_MSK 0x0FFF > - > -#endif / RTL8712_FIFOCTRL_BITDEF_H / > - > diff --git a/drivers/staging/rtl8712/rtl8712_fifoctrl_regdef.h b/drivers/staging/rtl8712/rtl8712_fifoctrl_regdef.h > deleted file mode 100644 > index 189fdeb16d7d..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_fifoctrl_regdef.h > +++ /dev/null > @@ -1,61 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL8712_FIFOCTRL_REGDEF_H > -#define RTL8712_FIFOCTRL_REGDEF_H > - > -#define RQPN (RTL8712_FIFOCTRL_ + 0x00) > -#define RXFF_BNDY (RTL8712_FIFOCTRL_ + 0x0C) > -#define RXRPT_BNDY (RTL8712_FIFOCTRL_ + 0x10) > -#define TXPKTBUF_PGBNDY (RTL8712_FIFOCTRL_ + 0x14) > -#define PBP (RTL8712_FIFOCTRL_ + 0x15) > -#define RX_DRVINFO_SZ (RTL8712_FIFOCTRL_ + 0x16) > -#define TXFF_STATUS (RTL8712_FIFOCTRL_ + 0x17) > -#define RXFF_STATUS (RTL8712_FIFOCTRL_ + 0x18) > -#define TXFF_EMPTY_TH (RTL8712_FIFOCTRL_ + 0x19) > -#define SDIO_RX_BLKSZ (RTL8712_FIFOCTRL_ + 0x1C) > -#define RXDMA_RXCTRL (RTL8712_FIFOCTRL_ + 0x1D) > -#define RXPKT_NUM (RTL8712_FIFOCTRL_ + 0x1E) > -#define RXPKT_NUM_C2H (RTL8712_FIFOCTRL_ + 0x1F) > -#define C2HCMD_UDT_SIZE (RTL8712_FIFOCTRL_ + 0x20) > -#define C2HCMD_UDT_ADDR (RTL8712_FIFOCTRL_ + 0x22) > -#define FIFOPAGE2 (RTL8712_FIFOCTRL_ + 0x24) > -#define FIFOPAGE1 (RTL8712_FIFOCTRL_ + 0x28) > -#define FW_RSVD_PG_CTRL (RTL8712_FIFOCTRL_ + 0x30) > -#define TXRPTFF_RDPTR (RTL8712_FIFOCTRL_ + 0x40) > -#define TXRPTFF_WTPTR (RTL8712_FIFOCTRL_ + 0x44) > -#define C2HFF_RDPTR (RTL8712_FIFOCTRL_ + 0x48) > -#define C2HFF_WTPTR (RTL8712_FIFOCTRL_ + 0x4C) > -#define RXFF0_RDPTR (RTL8712_FIFOCTRL_ + 0x50) > -#define RXFF0_WTPTR (RTL8712_FIFOCTRL_ + 0x54) > -#define RXFF1_RDPTR (RTL8712_FIFOCTRL_ + 0x58) > -#define RXFF1_WTPTR (RTL8712_FIFOCTRL_ + 0x5C) > -#define RXRPT0FF_RDPTR (RTL8712_FIFOCTRL_ + 0x60) > -#define RXRPT0FF_WTPTR (RTL8712_FIFOCTRL_ + 0x64) > -#define RXRPT1FF_RDPTR (RTL8712_FIFOCTRL_ + 0x68) > -#define RXRPT1FF_WTPTR (RTL8712_FIFOCTRL_ + 0x6C) > -#define RX0PKTNUM (RTL8712_FIFOCTRL_ + 0x72) > -#define RX1PKTNUM (RTL8712_FIFOCTRL_ + 0x74) > -#define RXFLTMAP0 (RTL8712_FIFOCTRL_ + 0x76) > -#define RXFLTMAP1 (RTL8712_FIFOCTRL_ + 0x78) > -#define RXFLTMAP2 (RTL8712_FIFOCTRL_ + 0x7A) > -#define RXFLTMAP3 (RTL8712_FIFOCTRL_ + 0x7c) > -#define TBDA (RTL8712_FIFOCTRL_ + 0x84) > -#define THPDA (RTL8712_FIFOCTRL_ + 0x88) > -#define TCDA (RTL8712_FIFOCTRL_ + 0x8C) > -#define TMDA (RTL8712_FIFOCTRL_ + 0x90) > -#define HDA (RTL8712_FIFOCTRL_ + 0x94) > -#define TVODA (RTL8712_FIFOCTRL_ + 0x98) > -#define TVIDA (RTL8712_FIFOCTRL_ + 0x9C) > -#define TBEDA (RTL8712_FIFOCTRL_ + 0xA0) > -#define TBKDA (RTL8712_FIFOCTRL_ + 0xA4) > -#define RCDA (RTL8712_FIFOCTRL_ + 0xA8) > -#define RDSA (RTL8712_FIFOCTRL_ + 0xAC) > -#define TXPKT_NUM_CTRL (RTL8712_FIFOCTRL_ + 0xB0) > -#define TXQ_PGADD (RTL8712_FIFOCTRL_ + 0xB3) > -#define TXFF_PG_NUM (RTL8712_FIFOCTRL_ + 0xB4) > - > -#endif / RTL8712_FIFOCTRL_REGDEF_H / > diff --git a/drivers/staging/rtl8712/rtl8712_gp_bitdef.h b/drivers/staging/rtl8712/rtl8712_gp_bitdef.h > deleted file mode 100644 > index ee651fb3fde3..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_gp_bitdef.h > +++ /dev/null > @@ -1,68 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef RTL8712_GP_BITDEF_H > -#define RTL8712_GP_BITDEF_H > - > -/GPIO_CTRL/ > -#define _GPIO_MOD_MSK 0xFF000000 > -#define _GPIO_MOD_SHT 24 > -#define _GPIO_IO_SEL_MSK 0x00FF0000 > -#define _GPIO_IO_SEL_SHT 16 > -#define _GPIO_OUT_MSK 0x0000FF00 > -#define _GPIO_OUT_SHT 8 > -#define _GPIO_IN_MSK 0x000000FF > -#define _GPIO_IN_SHT 0 > - > -/SYS_PINMUX_CFG/ > -#define _GPIOSEL_MSK 0x0003 > -#define _GPIOSEL_SHT 0 > - > -/LED_CFG/ > -#define _LED1SV BIT(7) > -#define _LED1CM_MSK 0x0070 > -#define _LED1CM_SHT 4 > -#define _LED0SV BIT(3) > -#define _LED0CM_MSK 0x0007 > -#define _LED0CM_SHT 0 > - > -/PHY_REG/ > -#define _HST_RDRDY_SHT 0 > -#define _HST_RDRDY_MSK 0xFF > -#define _HST_RDRDY BIT(_HST_RDRDY_SHT) > -#define _CPU_WTBUSY_SHT 1 > -#define _CPU_WTBUSY_MSK 0xFF > -#define _CPU_WTBUSY BIT(_CPU_WTBUSY_SHT) > - > -/ 11. General Purpose Registers (Offset: 0x02E0 - 0x02FF)/ > - > -/ 8192S GPIO Config Setting (offset 0x2F1, 1 byte)/ > - > -/----------------------------------------------------------------------------/ > - > -#define GPIOMUX_EN BIT(3) / When this bit is set to "1", > - * GPIO PINs will switch to MAC > - * GPIO Function > - / > -#define GPIOSEL_GPIO 0 / UART or JTAG or pure GPIO/ > -#define GPIOSEL_PHYDBG 1 / PHYDBG/ > -#define GPIOSEL_BT 2 / BT_coex/ > -#define GPIOSEL_WLANDBG 3 / WLANDBG/ > -#define GPIOSEL_GPIO_MASK (~(BIT(0) | BIT(1))) > -/ HW Radio OFF switch (GPIO BIT) / > -#define HAL_8192S_HW_GPIO_OFF_BIT BIT(3) > -#define HAL_8192S_HW_GPIO_OFF_MASK 0xF7 > -#define HAL_8192S_HW_GPIO_WPS_BIT BIT(4) > - > -#endif /RTL8712_GP_BITDEF_H/ > - > diff --git a/drivers/staging/rtl8712/rtl8712_gp_regdef.h b/drivers/staging/rtl8712/rtl8712_gp_regdef.h > deleted file mode 100644 > index 892a7fb13923..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_gp_regdef.h > +++ /dev/null > @@ -1,29 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/**************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef RTL8712_GP_REGDEF_H > -#define RTL8712_GP_REGDEF_H > - > -#define PSTIMER (RTL8712_GP_ + 0x00) > -#define TIMER1 (RTL8712_GP_ + 0x04) > -#define TIMER2 (RTL8712_GP_ + 0x08) > -#define GPIO_CTRL (RTL8712_GP_ + 0x0C) > -#define GPIO_IO_SEL (RTL8712_GP_ + 0x0E) > -#define GPIO_INTCTRL (RTL8712_GP_ + 0x10) > -#define MAC_PINMUX_CTRL (RTL8712_GP_ + 0x11) > -#define LEDCFG (RTL8712_GP_ + 0x12) > -#define PHY_REG_RPT (RTL8712_GP_ + 0x13) > -#define PHY_REG_DATA (RTL8712_GP_ + 0x14) > - > -#endif /RTL8712_GP_REGDEF_H / > - > diff --git a/drivers/staging/rtl8712/rtl8712_hal.h b/drivers/staging/rtl8712/rtl8712_hal.h > deleted file mode 100644 > index 66cc4645e2d1..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_hal.h > +++ /dev/null > @@ -1,142 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef RTL8712_HAL_H > -#define RTL8712_HAL_H > - > -enum _HW_VERSION { > - RTL8712_FPGA, > - RTL8712_1stCUT, /A Cut (RTL8712_ASIC)/ > - RTL8712_2ndCUT, /B Cut/ > - RTL8712_3rdCUT, /C Cut/ > -}; > - > -enum _LOOPBACK_TYPE { > - RTL8712_AIR_TRX = 0, > - RTL8712_MAC_LBK, > - RTL8712_BB_LBK, > - RTL8712_MAC_FW_LBK = 4, > - RTL8712_BB_FW_LBK = 8, > -}; > - > -enum RTL871X_HCI_TYPE { > - RTL8712_SDIO, > - RTL8712_USB, > -}; > - > -enum RTL8712_RF_CONFIG { > - RTL8712_RF_1T1R, > - RTL8712_RF_1T2R, > - RTL8712_RF_2T2R > -}; > - > -enum RTL8712_HCI_TYPE { > - RTL8712_HCI_TYPE_PCIE = 0x01, > - RTL8712_HCI_TYPE_AP_PCIE = 0x81, > - RTL8712_HCI_TYPE_USB = 0x02, > - RTL8712_HCI_TYPE_92USB = 0x02, > - RTL8712_HCI_TYPE_AP_USB = 0x82, > - RTL8712_HCI_TYPE_72USB = 0x12, > - RTL8712_HCI_TYPE_SDIO = 0x04, > - RTL8712_HCI_TYPE_72SDIO = 0x14 > -}; > - > -struct fw_priv { /8-bytes alignment required/ > - /--- long word 0 ----/ > - unsigned char signature_0; /0x12: CE product, 0x92: IT product/ > - unsigned char signature_1; /0x87: CE product, 0x81: IT product/ > - unsigned char hci_sel; /0x81: PCI-AP, 01:PCIe, 02: 92S-U, 0x82: USB-AP, > - * 0x12: 72S-U, 03:SDIO > - / > - unsigned char chip_version; /the same value as register value/ > - unsigned char customer_ID_0; /customer ID low byte/ > - unsigned char customer_ID_1; /customer ID high byte/ > - unsigned char rf_config; /0x11: 1T1R, 0x12: 1T2R, 0x92: 1T2R turbo, > - * 0x22: 2T2R > - / > - unsigned char usb_ep_num; / 4: 4EP, 6: 6EP, 11: 11EP/ > - /--- long word 1 ----/ > - unsigned char regulatory_class_0; /regulatory class bit map 0/ > - unsigned char regulatory_class_1; /regulatory class bit map 1/ > - unsigned char regulatory_class_2; /regulatory class bit map 2/ > - unsigned char regulatory_class_3; /regulatory class bit map 3/ > - unsigned char rfintfs; / 0:SWSI, 1:HWSI, 2:HWPI/ > - unsigned char def_nettype; > - unsigned char turbo_mode; > - unsigned char low_power_mode;/ 0: normal mode, 1: low power mode/ > - /--- long word 2 ----/ > - unsigned char lbk_mode; /0x00: normal, 0x03: MACLBK, 0x01: PHYLBK/ > - unsigned char mp_mode; / 1: for MP use, 0: for normal driver / > - unsigned char vcs_type; / 0:off 1:on 2:auto / > - unsigned char vcs_mode; / 1:RTS/CTS 2:CTS to self / > - unsigned char rsvd022; > - unsigned char rsvd023; > - unsigned char rsvd024; > - unsigned char rsvd025; > - /--- long word 3 ----/ > - unsigned char qos_en; /1: QoS enable/ > - unsigned char bw_40MHz_en; /1: 40MHz BW enable/ > - unsigned char AMSDU2AMPDU_en; /1: 4181 convert AMSDU to AMPDU, > - * 0: disable > - / > - unsigned char AMPDU_en; /1: 11n AMPDU enable/ > - unsigned char rate_control_offload; /1: FW offloads,0: driver handles/ > - unsigned char aggregation_offload; /1: FW offloads,0: driver handles/ > - unsigned char rsvd030; > - unsigned char rsvd031; > - /--- long word 4 ----/ > - unsigned char beacon_offload; / 1. FW offloads, 0: driver handles/ > - unsigned char MLME_offload; / 2. FW offloads, 0: driver handles/ > - unsigned char hwpc_offload; / 3. FW offloads, 0: driver handles/ > - unsigned char tcp_checksum_offload; /4. FW offloads,0: driver handles/ > - unsigned char tcp_offload; / 5. FW offloads, 0: driver handles/ > - unsigned char ps_control_offload; / 6. FW offloads, 0: driver handles/ > - unsigned char WWLAN_offload; / 7. FW offloads, 0: driver handles/ > - unsigned char rsvd040; > - /--- long word 5 ----/ > - unsigned char tcp_tx_frame_len_L; /tcp tx packet length low byte/ > - unsigned char tcp_tx_frame_len_H; /tcp tx packet length high byte/ > - unsigned char tcp_rx_frame_len_L; /tcp rx packet length low byte/ > - unsigned char tcp_rx_frame_len_H; /tcp rx packet length high byte/ > - unsigned char rsvd050; > - unsigned char rsvd051; > - unsigned char rsvd052; > - unsigned char rsvd053; > -}; > - > -struct fw_hdr {/8-byte alignment required/ > - unsigned short signature; > - unsigned short version; / 0x8000 ~ 0x8FFF for FPGA version, > - * 0x0000 ~ 0x7FFF for ASIC version, > - / > - unsigned int dmem_size; /define the size of boot loader/ > - unsigned int img_IMEM_size; /define the size of FW in IMEM/ > - unsigned int img_SRAM_size; /define the size of FW in SRAM/ > - unsigned int fw_priv_sz; /define the size of DMEM variable/ > - unsigned short efuse_addr; > - unsigned short h2ccnd_resp_addr; > - unsigned int SVNRevision; > - unsigned int release_time; /Mon:Day:Hr:Min/ > - struct fw_priv fwpriv; > -}; > - > -struct hal_priv { > - /Endpoint handles/ > - struct net_device pipehdls_r8712[10]; > - u8 (hal_bus_init)(struct _adapter adapter); > -}; > - > -uint rtl8712_hal_init(struct _adapter padapter); > -int rtl871x_load_fw(struct _adapter padapter); > - > -#endif > diff --git a/drivers/staging/rtl8712/rtl8712_interrupt_bitdef.h b/drivers/staging/rtl8712/rtl8712_interrupt_bitdef.h > deleted file mode 100644 > index e9732a1bcd7e..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_interrupt_bitdef.h > +++ /dev/null > @@ -1,44 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/******************* > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL8712_INTERRUPT_BITDEF_H > -#define RTL8712_INTERRUPT_BITDEF_H > - > -/HIMR/ > -/HISR/ > -#define _CPUERR BIT(29) > -#define _ATIMEND BIT(28) > -#define _TXBCNOK BIT(27) > -#define _TXBCNERR BIT(26) > -#define _BCNDMAINT4 BIT(25) > -#define _BCNDMAINT3 BIT(24) > -#define _BCNDMAINT2 BIT(23) > -#define _BCNDMAINT1 BIT(22) > -#define _BCNDOK4 BIT(21) > -#define _BCNDOK3 BIT(20) > -#define _BCNDOK2 BIT(19) > -#define _BCNDOK1 BIT(18) > -#define _TIMEOUT2 BIT(17) > -#define _TIMEOUT1 BIT(16) > -#define _TXFOVW BIT(15) > -#define _PSTIMEOUT BIT(14) > -#define _BCNDMAINT0 BIT(13) > -#define _FOVW BIT(12) > -#define _RDU BIT(11) > -#define _RXCMDOK BIT(10) > -#define _BCNDOK0 BIT(9) > -#define _HIGHDOK BIT(8) > -#define _COMDOK BIT(7) > -#define _MGTDOK BIT(6) > -#define _HCCADOK BIT(5) > -#define _BKDOK BIT(4) > -#define _BEDOK BIT(3) > -#define _VIDOK BIT(2) > -#define _VODOK BIT(1) > -#define _RXOK BIT(0) > - > -#endif /RTL8712_INTERRUPT_BITDEF_H/ > - > diff --git a/drivers/staging/rtl8712/rtl8712_io.c b/drivers/staging/rtl8712/rtl8712_io.c > deleted file mode 100644 > index 384cbdb05e19..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_io.c > +++ /dev/null > @@ -1,99 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/** > - * rtl8712_io.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx. > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RTL8712_IO_C > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "rtl871x_io.h" > -#include "osdep_intf.h" > -#include "usb_ops.h" > - > -u8 r8712_read8(struct _adapter *adapter, u32 addr) > -{ > - struct intf_hdl *hdl = &adapter->pio_queue->intf; > > - > - return hdl->io_ops._read8(hdl, addr); > > -} > - > -u16 r8712_read16(struct _adapter *adapter, u32 addr) > -{ > - struct intf_hdl *hdl = &adapter->pio_queue->intf; > > - > - return hdl->io_ops._read16(hdl, addr); > > -} > - > -u32 r8712_read32(struct _adapter *adapter, u32 addr) > -{ > - struct intf_hdl *hdl = &adapter->pio_queue->intf; > > - > - return hdl->io_ops._read32(hdl, addr); > > -} > - > -void r8712_write8(struct _adapter *adapter, u32 addr, u8 val) > -{ > - struct intf_hdl *hdl = &adapter->pio_queue->intf; > > - > - hdl->io_ops._write8(hdl, addr, val); > > -} > - > -void r8712_write16(struct _adapter *adapter, u32 addr, u16 val) > -{ > - struct intf_hdl *hdl = &adapter->pio_queue->intf; > > - > - hdl->io_ops._write16(hdl, addr, val); > > -} > - > -void r8712_write32(struct _adapter *adapter, u32 addr, u32 val) > -{ > - struct intf_hdl *hdl = &adapter->pio_queue->intf; > > - > - hdl->io_ops._write32(hdl, addr, val); > > -} > - > -void r8712_read_mem(struct _adapter *adapter, u32 addr, u32 cnt, u8 *pmem) > -{ > - struct intf_hdl *hdl = &adapter->pio_queue->intf; > > - > - if (adapter->driver_stopped || adapter->surprise_removed) > > - return; > - > - hdl->io_ops._read_mem(hdl, addr, cnt, pmem); > > -} > - > -void r8712_write_mem(struct _adapter *adapter, u32 addr, u32 cnt, u8 *pmem) > -{ > - struct intf_hdl *hdl = &adapter->pio_queue->intf; > > - > - hdl->io_ops._write_mem(hdl, addr, cnt, pmem); > > -} > - > -void r8712_read_port(struct _adapter *adapter, u32 addr, u32 cnt, u8 *pmem) > -{ > - struct intf_hdl *hdl = &adapter->pio_queue->intf; > > - > - if (adapter->driver_stopped || adapter->surprise_removed) > > - return; > - > - hdl->io_ops._read_port(hdl, addr, cnt, pmem); > > -} > - > -void r8712_write_port(struct _adapter *adapter, u32 addr, u32 cnt, u8 *pmem) > -{ > - struct intf_hdl *hdl = &adapter->pio_queue->intf; > > - > - hdl->io_ops._write_port(hdl, addr, cnt, pmem); > > -} > diff --git a/drivers/staging/rtl8712/rtl8712_led.c b/drivers/staging/rtl8712/rtl8712_led.c > deleted file mode 100644 > index 6d9be5dec4e7..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_led.c > +++ /dev/null > @@ -1,1830 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/****************************************************************************** > - * rtl8712_led.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - *****************************************************************************/ > - > -#include "drv_types.h" > - > -/=========================================================================== > - * Constant. > - *=========================================================================== > - > - * > - * Default LED behavior. > - / > -#define LED_BLINK_NORMAL_INTERVAL 100 > -#define LED_BLINK_SLOWLY_INTERVAL 200 > -#define LED_BLINK_LONG_INTERVAL 400 > - > -#define LED_BLINK_NO_LINK_INTERVAL_ALPHA 1000 > -#define LED_BLINK_LINK_INTERVAL_ALPHA 500 > -#define LED_BLINK_SCAN_INTERVAL_ALPHA 180 > -#define LED_BLINK_FASTER_INTERVAL_ALPHA 50 > -#define LED_BLINK_WPS_SUCCESS_INTERVAL_ALPHA 5000 > - > -/=========================================================================== > - * LED object. > - *=========================================================================== > - / > -enum _LED_STATE_871x { > - LED_UNKNOWN = 0, > - LED_STATE_ON = 1, > - LED_STATE_OFF = 2, > - LED_BLINK_NORMAL = 3, > - LED_BLINK_SLOWLY = 4, > - LED_POWER_ON_BLINK = 5, > - LED_SCAN_BLINK = 6, / LED is blinking during scanning period, > - * the # of times to blink is depend on time > - * for scanning. > - / > - LED_NO_LINK_BLINK = 7, / LED is blinking during no link state. / > - LED_BLINK_StartToBlink = 8,/ Customized for Sercomm Printer > - * Server case > - / > - LED_BLINK_WPS = 9, / LED is blinkg during WPS communication */ > - LED_TXRX_BLINK = 10, > - LED_BLINK_WPS_STOP = 11, /*for ALPHA */ > - LED_BLINK_WPS_STOP_OVERLAP = 12, /*for BELKIN / > -}; > - > -/=========================================================================== > - * Prototype of protected function. > - *=========================================================================== > - */ > -static void BlinkTimerCallback(struct timer_list *t); > - > -static void BlinkWorkItemCallback(struct work_struct work); > -/=========================================================================== > - * LED_819xUsb routines. > - *=========================================================================== > - * > - * > - * > - * Description: > - * Initialize an LED_871x object. > - */ > -static void InitLed871x(struct _adapter *padapter, struct LED_871x *pLed, > - enum LED_PIN_871x LedPin) > -{ > - pLed->padapter = padapter; > > - pLed->LedPin = LedPin; > > - pLed->CurrLedState = LED_STATE_OFF; > > - pLed->bLedOn = false; > > - pLed->bLedBlinkInProgress = false; > > - pLed->BlinkTimes = 0; > > - pLed->BlinkingLedState = LED_UNKNOWN; > > - timer_setup(&pLed->BlinkTimer, BlinkTimerCallback, 0); > > - INIT_WORK(&pLed->BlinkWorkItem, BlinkWorkItemCallback); > > -} > - > -/* > - * Description: > - * DeInitialize an LED_871x object. > - */ > -static void DeInitLed871x(struct LED_871x *pLed) > -{ > - del_timer_sync(&pLed->BlinkTimer); > > - /* We should reset bLedBlinkInProgress if we cancel > - * the LedControlTimer, > - */ > - pLed->bLedBlinkInProgress = false; > > -} > - > -/* > - * Description: > - * Turn on LED according to LedPin specified. > - */ > -static void SwLedOn(struct _adapter *padapter, struct LED_871x *pLed) > -{ > - u8 LedCfg; > - > - if (padapter->surprise_removed || padapter->driver_stopped) > > - return; > - LedCfg = r8712_read8(padapter, LEDCFG); > - switch (pLed->LedPin) { > > - case LED_PIN_GPIO0: > - break; > - case LED_PIN_LED0: > - /* SW control led0 on./ > - r8712_write8(padapter, LEDCFG, LedCfg & 0xf0); > - break; > - case LED_PIN_LED1: > - / SW control led1 on.*/ > - r8712_write8(padapter, LEDCFG, LedCfg & 0x0f); > - break; > - default: > - break; > - } > - pLed->bLedOn = true; > > -} > - > -/* > - * Description: > - * Turn off LED according to LedPin specified. > - */ > -static void SwLedOff(struct _adapter *padapter, struct LED_871x *pLed) > -{ > - u8 LedCfg; > - > - if (padapter->surprise_removed || padapter->driver_stopped) > > - return; > - LedCfg = r8712_read8(padapter, LEDCFG); > - switch (pLed->LedPin) { > > - case LED_PIN_GPIO0: > - break; > - case LED_PIN_LED0: > - LedCfg &= 0xf0; /* Set to software control./ > - r8712_write8(padapter, LEDCFG, (LedCfg | BIT(3))); > - break; > - case LED_PIN_LED1: > - LedCfg &= 0x0f; / Set to software control.*/ > - r8712_write8(padapter, LEDCFG, (LedCfg | BIT(7))); > - break; > - default: > - break; > - } > - pLed->bLedOn = false; > > -} > - > -/*=========================================================================== > - * Interface to manipulate LED objects. > - *=========================================================================== > - * > - * Description: > - * Initialize all LED_871x objects. > - */ > -void r8712_InitSwLeds(struct _adapter *padapter) > -{ > - struct led_priv *pledpriv = &padapter->ledpriv; > > - > - pledpriv->LedControlHandler = LedControl871x; > > - InitLed871x(padapter, &pledpriv->SwLed0, LED_PIN_LED0); > > - InitLed871x(padapter, &pledpriv->SwLed1, LED_PIN_LED1); > > -} > - > -/* Description: > - * DeInitialize all LED_819xUsb objects. > - */ > -void r8712_DeInitSwLeds(struct _adapter *padapter) > -{ > - struct led_priv *ledpriv = &padapter->ledpriv; > > - > - DeInitLed871x(&ledpriv->SwLed0); > > - DeInitLed871x(&ledpriv->SwLed1); > > -} > - > -/* Description: > - * Implementation of LED blinking behavior. > - * It toggle off LED and schedule corresponding timer if necessary. > - */ > -static void SwLedBlink(struct LED_871x *pLed) > -{ > - struct _adapter *padapter = pLed->padapter; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - u8 bStopBlinking = false; > - > - /* Change LED according to BlinkingLedState specified. */ > - if (pLed->BlinkingLedState == LED_STATE_ON) > > - SwLedOn(padapter, pLed); > - else > - SwLedOff(padapter, pLed); > - /* Determine if we shall change LED state again. */ > - pLed->BlinkTimes--; > > - switch (pLed->CurrLedState) { > > - case LED_BLINK_NORMAL: > - if (pLed->BlinkTimes == 0) > > - bStopBlinking = true; > - break; > - case LED_BLINK_StartToBlink: > - if (check_fwstate(pmlmepriv, _FW_LINKED) && > - (pmlmepriv->fw_state & WIFI_STATION_STATE)) > > - bStopBlinking = true; > - if (check_fwstate(pmlmepriv, _FW_LINKED) && > - ((pmlmepriv->fw_state & WIFI_ADHOC_STATE) || > > - (pmlmepriv->fw_state & WIFI_ADHOC_MASTER_STATE))) > > - bStopBlinking = true; > - else if (pLed->BlinkTimes == 0) > > - bStopBlinking = true; > - break; > - case LED_BLINK_WPS: > - if (pLed->BlinkTimes == 0) > > - bStopBlinking = true; > - break; > - default: > - bStopBlinking = true; > - break; > - } > - if (bStopBlinking) { > - if (check_fwstate(pmlmepriv, _FW_LINKED) && > - !pLed->bLedOn) > > - SwLedOn(padapter, pLed); > - else if (check_fwstate(pmlmepriv, _FW_LINKED) && pLed->bLedOn) > > - SwLedOff(padapter, pLed); > - pLed->BlinkTimes = 0; > > - pLed->bLedBlinkInProgress = false; > > - } else { > - /* Assign LED state to toggle. */ > - if (pLed->BlinkingLedState == LED_STATE_ON) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - > - /* Schedule a timer to toggle LED state. */ > - switch (pLed->CurrLedState) { > > - case LED_BLINK_NORMAL: > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NORMAL_INTERVAL)); > - break; > - case LED_BLINK_SLOWLY: > - case LED_BLINK_StartToBlink: > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SLOWLY_INTERVAL)); > - break; > - case LED_BLINK_WPS: > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_LONG_INTERVAL)); > - break; > - default: > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SLOWLY_INTERVAL)); > - break; > - } > - } > -} > - > -static void SwLedBlink1(struct LED_871x *pLed) > -{ > - struct _adapter *padapter = pLed->padapter; > > - struct led_priv *ledpriv = &padapter->ledpriv; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct eeprom_priv *peeprompriv = &padapter->eeprompriv; > > - struct LED_871x *pLed1 = &ledpriv->SwLed1; > > - u8 bStopBlinking = false; > - > - if (peeprompriv->CustomerID == RT_CID_819x_CAMEO) > > - pLed = &ledpriv->SwLed1; > > - /* Change LED according to BlinkingLedState specified. */ > - if (pLed->BlinkingLedState == LED_STATE_ON) > > - SwLedOn(padapter, pLed); > - else > - SwLedOff(padapter, pLed); > - if (peeprompriv->CustomerID == RT_CID_DEFAULT) { > > - if (check_fwstate(pmlmepriv, _FW_LINKED)) { > - if (!pLed1->bSWLedCtrl) { > > - SwLedOn(padapter, pLed1); > - pLed1->bSWLedCtrl = true; > > - } else if (!pLed1->bLedOn) { > > - SwLedOn(padapter, pLed1); > - } > - } else { > - if (!pLed1->bSWLedCtrl) { > > - SwLedOff(padapter, pLed1); > - pLed1->bSWLedCtrl = true; > > - } else if (pLed1->bLedOn) { > > - SwLedOff(padapter, pLed1); > - } > - } > - } > - switch (pLed->CurrLedState) { > > - case LED_BLINK_SLOWLY: > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); > - break; > - case LED_BLINK_NORMAL: > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_LINK_INTERVAL_ALPHA)); > - break; > - case LED_SCAN_BLINK: > - pLed->BlinkTimes--; > > - if (pLed->BlinkTimes == 0) > > - bStopBlinking = true; > - if (bStopBlinking) { > - if (check_fwstate(pmlmepriv, _FW_LINKED)) { > - pLed->bLedLinkBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_NORMAL; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_LINK_INTERVAL_ALPHA)); > - } else if (!check_fwstate(pmlmepriv, _FW_LINKED)) { > - pLed->bLedNoLinkBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_SLOWLY; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); > - } > - pLed->bLedScanBlinkInProgress = false; > > - } else { > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - } > - break; > - case LED_TXRX_BLINK: > - pLed->BlinkTimes--; > > - if (pLed->BlinkTimes == 0) > > - bStopBlinking = true; > - if (bStopBlinking) { > - if (check_fwstate(pmlmepriv, _FW_LINKED)) { > - pLed->bLedLinkBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_NORMAL; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_LINK_INTERVAL_ALPHA)); > - } else if (!check_fwstate(pmlmepriv, _FW_LINKED)) { > - pLed->bLedNoLinkBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_SLOWLY; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); > - } > - pLed->BlinkTimes = 0; > > - pLed->bLedBlinkInProgress = false; > > - } else { > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_FASTER_INTERVAL_ALPHA)); > - } > - break; > - case LED_BLINK_WPS: > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - break; > - case LED_BLINK_WPS_STOP: /* WPS success */ > - if (pLed->BlinkingLedState == LED_STATE_ON) { > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_WPS_SUCCESS_INTERVAL_ALPHA)); > - bStopBlinking = false; > - } else { > - bStopBlinking = true; > - } > - if (bStopBlinking) { > - pLed->bLedLinkBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_NORMAL; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_LINK_INTERVAL_ALPHA)); > - } > - pLed->bLedWPSBlinkInProgress = false; > > - break; > - default: > - break; > - } > -} > - > -static void SwLedBlink2(struct LED_871x *pLed) > -{ > - struct _adapter *padapter = pLed->padapter; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - u8 bStopBlinking = false; > - > - /* Change LED according to BlinkingLedState specified. */ > - if (pLed->BlinkingLedState == LED_STATE_ON) > > - SwLedOn(padapter, pLed); > - else > - SwLedOff(padapter, pLed); > - switch (pLed->CurrLedState) { > > - case LED_SCAN_BLINK: > - pLed->BlinkTimes--; > > - if (pLed->BlinkTimes == 0) > > - bStopBlinking = true; > - if (bStopBlinking) { > - if (check_fwstate(pmlmepriv, _FW_LINKED)) { > - pLed->CurrLedState = LED_STATE_ON; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - SwLedOn(padapter, pLed); > - } else if (!check_fwstate(pmlmepriv, _FW_LINKED)) { > - pLed->CurrLedState = LED_STATE_OFF; > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - SwLedOff(padapter, pLed); > - } > - pLed->bLedScanBlinkInProgress = false; > > - } else { > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - } > - break; > - case LED_TXRX_BLINK: > - pLed->BlinkTimes--; > > - if (pLed->BlinkTimes == 0) > > - bStopBlinking = true; > - if (bStopBlinking) { > - if (check_fwstate(pmlmepriv, _FW_LINKED)) { > - pLed->CurrLedState = LED_STATE_ON; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - SwLedOn(padapter, pLed); > - } else if (!check_fwstate(pmlmepriv, _FW_LINKED)) { > - pLed->CurrLedState = LED_STATE_OFF; > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - SwLedOff(padapter, pLed); > - } > - pLed->bLedBlinkInProgress = false; > > - } else { > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_FASTER_INTERVAL_ALPHA)); > - } > - break; > - default: > - break; > - } > -} > - > -static void SwLedBlink3(struct LED_871x *pLed) > -{ > - struct _adapter *padapter = pLed->padapter; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - u8 bStopBlinking = false; > - > - /* Change LED according to BlinkingLedState specified. */ > - if (pLed->BlinkingLedState == LED_STATE_ON) > > - SwLedOn(padapter, pLed); > - else > - if (pLed->CurrLedState != LED_BLINK_WPS_STOP) > > - SwLedOff(padapter, pLed); > - switch (pLed->CurrLedState) { > > - case LED_SCAN_BLINK: > - pLed->BlinkTimes--; > > - if (pLed->BlinkTimes == 0) > > - bStopBlinking = true; > - if (bStopBlinking) { > - if (check_fwstate(pmlmepriv, _FW_LINKED)) { > - pLed->CurrLedState = LED_STATE_ON; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - if (!pLed->bLedOn) > > - SwLedOn(padapter, pLed); > - } else if (!check_fwstate(pmlmepriv, _FW_LINKED)) { > - pLed->CurrLedState = LED_STATE_OFF; > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - if (pLed->bLedOn) > > - SwLedOff(padapter, pLed); > - } > - pLed->bLedScanBlinkInProgress = false; > > - } else { > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - } > - break; > - case LED_TXRX_BLINK: > - pLed->BlinkTimes--; > > - if (pLed->BlinkTimes == 0) > > - bStopBlinking = true; > - if (bStopBlinking) { > - if (check_fwstate(pmlmepriv, _FW_LINKED)) { > - pLed->CurrLedState = LED_STATE_ON; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - if (!pLed->bLedOn) > > - SwLedOn(padapter, pLed); > - } else if (!check_fwstate(pmlmepriv, _FW_LINKED)) { > - pLed->CurrLedState = LED_STATE_OFF; > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - if (pLed->bLedOn) > > - SwLedOff(padapter, pLed); > - } > - pLed->bLedBlinkInProgress = false; > > - } else { > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_FASTER_INTERVAL_ALPHA)); > - } > - break; > - case LED_BLINK_WPS: > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - break; > - case LED_BLINK_WPS_STOP: /WPS success/ > - if (pLed->BlinkingLedState == LED_STATE_ON) { > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_WPS_SUCCESS_INTERVAL_ALPHA)); > - bStopBlinking = false; > - } else { > - bStopBlinking = true; > - } > - if (bStopBlinking) { > - pLed->CurrLedState = LED_STATE_ON; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - SwLedOn(padapter, pLed); > - pLed->bLedWPSBlinkInProgress = false; > > - } > - break; > - default: > - break; > - } > -} > - > -static void SwLedBlink4(struct LED_871x *pLed) > -{ > - struct _adapter *padapter = pLed->padapter; > > - struct led_priv *ledpriv = &padapter->ledpriv; > > - struct LED_871x *pLed1 = &ledpriv->SwLed1; > > - u8 bStopBlinking = false; > - > - /* Change LED according to BlinkingLedState specified. */ > - if (pLed->BlinkingLedState == LED_STATE_ON) > > - SwLedOn(padapter, pLed); > - else > - SwLedOff(padapter, pLed); > - if (!pLed1->bLedWPSBlinkInProgress && > > - pLed1->BlinkingLedState == LED_UNKNOWN) { > > - pLed1->BlinkingLedState = LED_STATE_OFF; > > - pLed1->CurrLedState = LED_STATE_OFF; > > - SwLedOff(padapter, pLed1); > - } > - switch (pLed->CurrLedState) { > > - case LED_BLINK_SLOWLY: > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); > - break; > - case LED_BLINK_StartToBlink: > - if (pLed->bLedOn) { > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SLOWLY_INTERVAL)); > - } else { > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NORMAL_INTERVAL)); > - } > - break; > - case LED_SCAN_BLINK: > - pLed->BlinkTimes--; > > - if (pLed->BlinkTimes == 0) > > - bStopBlinking = true; > - if (bStopBlinking) { > - pLed->bLedNoLinkBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_SLOWLY; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); > - pLed->bLedScanBlinkInProgress = false; > > - } else { > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - } > - break; > - case LED_TXRX_BLINK: > - pLed->BlinkTimes--; > > - if (pLed->BlinkTimes == 0) > > - bStopBlinking = true; > - if (bStopBlinking) { > - pLed->bLedNoLinkBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_SLOWLY; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); > - pLed->bLedBlinkInProgress = false; > > - } else { > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_FASTER_INTERVAL_ALPHA)); > - } > - break; > - case LED_BLINK_WPS: > - if (pLed->bLedOn) { > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SLOWLY_INTERVAL)); > - } else { > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NORMAL_INTERVAL)); > - } > - break; > - case LED_BLINK_WPS_STOP: /WPS authentication fail/ > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NORMAL_INTERVAL)); > - break; > - case LED_BLINK_WPS_STOP_OVERLAP: /*WPS session overlap */ > - pLed->BlinkTimes--; > > - if (pLed->BlinkTimes == 0) { > > - if (pLed->bLedOn) > > - pLed->BlinkTimes = 1; > > - else > - bStopBlinking = true; > - } > - if (bStopBlinking) { > - pLed->BlinkTimes = 10; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_LINK_INTERVAL_ALPHA)); > - } else { > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NORMAL_INTERVAL)); > - } > - break; > - default: > - break; > - } > -} > - > -static void SwLedBlink5(struct LED_871x *pLed) > -{ > - struct _adapter *padapter = pLed->padapter; > > - u8 bStopBlinking = false; > - > - /* Change LED according to BlinkingLedState specified. */ > - if (pLed->BlinkingLedState == LED_STATE_ON) > > - SwLedOn(padapter, pLed); > - else > - SwLedOff(padapter, pLed); > - switch (pLed->CurrLedState) { > > - case LED_SCAN_BLINK: > - pLed->BlinkTimes--; > > - if (pLed->BlinkTimes == 0) > > - bStopBlinking = true; > - if (bStopBlinking) { > - pLed->CurrLedState = LED_STATE_ON; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - if (!pLed->bLedOn) > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_FASTER_INTERVAL_ALPHA)); > - pLed->bLedScanBlinkInProgress = false; > > - } else { > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - } > - break; > - case LED_TXRX_BLINK: > - pLed->BlinkTimes--; > > - if (pLed->BlinkTimes == 0) > > - bStopBlinking = true; > - if (bStopBlinking) { > - pLed->CurrLedState = LED_STATE_ON; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - if (!pLed->bLedOn) > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_FASTER_INTERVAL_ALPHA)); > - pLed->bLedBlinkInProgress = false; > > - } else { > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_FASTER_INTERVAL_ALPHA)); > - } > - break; > - default: > - break; > - } > -} > - > -static void SwLedBlink6(struct LED_871x *pLed) > -{ > - struct _adapter *padapter = pLed->padapter; > > - u8 bStopBlinking = false; > - > - /* Change LED according to BlinkingLedState specified. */ > - if (pLed->BlinkingLedState == LED_STATE_ON) > > - SwLedOn(padapter, pLed); > - else > - SwLedOff(padapter, pLed); > - switch (pLed->CurrLedState) { > > - case LED_TXRX_BLINK: > - pLed->BlinkTimes--; > > - if (pLed->BlinkTimes == 0) > > - bStopBlinking = true; > - if (bStopBlinking) { > - pLed->CurrLedState = LED_STATE_ON; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - if (!pLed->bLedOn) > > - SwLedOn(padapter, pLed); > - pLed->bLedBlinkInProgress = false; > > - } else { > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_FASTER_INTERVAL_ALPHA)); > - } > - break; > - case LED_BLINK_WPS: > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - break; > - > - default: > - break; > - } > -} > - > -/* Description: > - * Callback function of LED BlinkTimer, > - * it just schedules to corresponding BlinkWorkItem. > - */ > -static void BlinkTimerCallback(struct timer_list *t) > -{ > - struct LED_871x pLed = from_timer(pLed, t, BlinkTimer); > - > - / This fixed the crash problem on Fedora 12 when trying to do the > - * insmod;ifconfig up;rmmod commands. > - */ > - if (pLed->padapter->surprise_removed || pLed->padapter->driver_stopped) > > - return; > - schedule_work(&pLed->BlinkWorkItem); > > -} > - > -/* Description: > - * Callback function of LED BlinkWorkItem. > - * We dispatch actual LED blink action according to LedStrategy. > - */ > -static void BlinkWorkItemCallback(struct work_struct *work) > -{ > - struct LED_871x *pLed = container_of(work, struct LED_871x, > - BlinkWorkItem); > - struct led_priv *ledpriv = &pLed->padapter->ledpriv; > > - > - switch (ledpriv->LedStrategy) { > > - case SW_LED_MODE0: > - SwLedBlink(pLed); > - break; > - case SW_LED_MODE1: > - SwLedBlink1(pLed); > - break; > - case SW_LED_MODE2: > - SwLedBlink2(pLed); > - break; > - case SW_LED_MODE3: > - SwLedBlink3(pLed); > - break; > - case SW_LED_MODE4: > - SwLedBlink4(pLed); > - break; > - case SW_LED_MODE5: > - SwLedBlink5(pLed); > - break; > - case SW_LED_MODE6: > - SwLedBlink6(pLed); > - break; > - default: > - SwLedBlink(pLed); > - break; > - } > -} > - > -/*============================================================================ > - * Default LED behavior. > - *============================================================================ > - * > - * Description: > - * Implement each led action for SW_LED_MODE0. > - * This is default strategy. > - */ > - > -static void SwLedControlMode1(struct _adapter *padapter, > - enum LED_CTL_MODE LedAction) > -{ > - struct led_priv *ledpriv = &padapter->ledpriv; > > - struct LED_871x *pLed = &ledpriv->SwLed0; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct sitesurvey_ctrl *psitesurveyctrl = &pmlmepriv->sitesurveyctrl; > > - > - if (padapter->eeprompriv.CustomerID == RT_CID_819x_CAMEO) > > - pLed = &ledpriv->SwLed1; > > - switch (LedAction) { > - case LED_CTL_START_TO_LINK: > - case LED_CTL_NO_LINK: > - if (!pLed->bLedNoLinkBlinkInProgress) { > > - if (pLed->CurrLedState == LED_SCAN_BLINK || > > - IS_LED_WPS_BLINKING(pLed)) > - return; > - if (pLed->bLedLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedLinkBlinkInProgress = false; > > - } > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - pLed->bLedNoLinkBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_SLOWLY; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); > - } > - break; > - case LED_CTL_LINK: > - if (!pLed->bLedLinkBlinkInProgress) { > > - if (pLed->CurrLedState == LED_SCAN_BLINK || > > - IS_LED_WPS_BLINKING(pLed)) > - return; > - if (pLed->bLedNoLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedNoLinkBlinkInProgress = false; > > - } > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - pLed->bLedLinkBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_NORMAL; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_LINK_INTERVAL_ALPHA)); > - } > - break; > - case LED_CTL_SITE_SURVEY: > - if (psitesurveyctrl->traffic_busy && > > - check_fwstate(pmlmepriv, _FW_LINKED)) > - ; /* dummy branch */ > - else if (!pLed->bLedScanBlinkInProgress) { > > - if (IS_LED_WPS_BLINKING(pLed)) > - return; > - if (pLed->bLedNoLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedNoLinkBlinkInProgress = false; > > - } > - if (pLed->bLedLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedLinkBlinkInProgress = false; > > - } > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - pLed->bLedScanBlinkInProgress = true; > > - pLed->CurrLedState = LED_SCAN_BLINK; > > - pLed->BlinkTimes = 24; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - } > - break; > - case LED_CTL_TX: > - case LED_CTL_RX: > - if (!pLed->bLedBlinkInProgress) { > > - if (pLed->CurrLedState == LED_SCAN_BLINK || > > - IS_LED_WPS_BLINKING(pLed)) > - return; > - if (pLed->bLedNoLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedNoLinkBlinkInProgress = false; > > - } > - if (pLed->bLedLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedLinkBlinkInProgress = false; > > - } > - pLed->bLedBlinkInProgress = true; > > - pLed->CurrLedState = LED_TXRX_BLINK; > > - pLed->BlinkTimes = 2; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_FASTER_INTERVAL_ALPHA)); > - } > - break; > - > - case LED_CTL_START_WPS: /*wait until xinpin finish */ > - case LED_CTL_START_WPS_BOTTON: > - if (!pLed->bLedWPSBlinkInProgress) { > > - if (pLed->bLedNoLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedNoLinkBlinkInProgress = false; > > - } > - if (pLed->bLedLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedLinkBlinkInProgress = false; > > - } > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - if (pLed->bLedScanBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedScanBlinkInProgress = false; > > - } > - pLed->bLedWPSBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_WPS; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - } > - break; > - case LED_CTL_STOP_WPS: > - if (pLed->bLedNoLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedNoLinkBlinkInProgress = false; > > - } > - if (pLed->bLedLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedLinkBlinkInProgress = false; > > - } > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - if (pLed->bLedScanBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedScanBlinkInProgress = false; > > - } > - if (pLed->bLedWPSBlinkInProgress) > > - del_timer(&pLed->BlinkTimer); > > - else > - pLed->bLedWPSBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_WPS_STOP; > > - if (pLed->bLedOn) { > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_WPS_SUCCESS_INTERVAL_ALPHA)); > - } else { > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - } > - break; > - case LED_CTL_STOP_WPS_FAIL: > - if (pLed->bLedWPSBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedWPSBlinkInProgress = false; > > - } > - pLed->bLedNoLinkBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_SLOWLY; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); > - break; > - case LED_CTL_POWER_OFF: > - pLed->CurrLedState = LED_STATE_OFF; > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - if (pLed->bLedNoLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedNoLinkBlinkInProgress = false; > > - } > - if (pLed->bLedLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedLinkBlinkInProgress = false; > > - } > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - if (pLed->bLedWPSBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedWPSBlinkInProgress = false; > > - } > - if (pLed->bLedScanBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedScanBlinkInProgress = false; > > - } > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - break; > - default: > - break; > - } > -} > - > -static void SwLedControlMode2(struct _adapter *padapter, > - enum LED_CTL_MODE LedAction) > -{ > - struct led_priv *ledpriv = &padapter->ledpriv; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct LED_871x *pLed = &ledpriv->SwLed0; > > - > - switch (LedAction) { > - case LED_CTL_SITE_SURVEY: > - if (pmlmepriv->sitesurveyctrl.traffic_busy) > > - ; /* dummy branch */ > - else if (!pLed->bLedScanBlinkInProgress) { > > - if (IS_LED_WPS_BLINKING(pLed)) > - return; > - > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - pLed->bLedScanBlinkInProgress = true; > > - pLed->CurrLedState = LED_SCAN_BLINK; > > - pLed->BlinkTimes = 24; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - } > - break; > - > - case LED_CTL_TX: > - case LED_CTL_RX: > - if (!pLed->bLedBlinkInProgress && > > - check_fwstate(pmlmepriv, _FW_LINKED)) { > - if (pLed->CurrLedState == LED_SCAN_BLINK || > > - IS_LED_WPS_BLINKING(pLed)) > - return; > - pLed->bLedBlinkInProgress = true; > > - pLed->CurrLedState = LED_TXRX_BLINK; > > - pLed->BlinkTimes = 2; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_FASTER_INTERVAL_ALPHA)); > - } > - break; > - > - case LED_CTL_LINK: > - pLed->CurrLedState = LED_STATE_ON; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - if (pLed->bLedScanBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedScanBlinkInProgress = false; > > - } > - > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - break; > - > - case LED_CTL_START_WPS: /wait until xinpin finish/ > - case LED_CTL_START_WPS_BOTTON: > - if (!pLed->bLedWPSBlinkInProgress) { > > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - if (pLed->bLedScanBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedScanBlinkInProgress = false; > > - } > - pLed->bLedWPSBlinkInProgress = true; > > - pLed->CurrLedState = LED_STATE_ON; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - } > - break; > - > - case LED_CTL_STOP_WPS: > - pLed->bLedWPSBlinkInProgress = false; > > - pLed->CurrLedState = LED_STATE_ON; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - break; > - > - case LED_CTL_STOP_WPS_FAIL: > - pLed->bLedWPSBlinkInProgress = false; > > - pLed->CurrLedState = LED_STATE_OFF; > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - break; > - > - case LED_CTL_START_TO_LINK: > - case LED_CTL_NO_LINK: > - if (!IS_LED_BLINKING(pLed)) { > - pLed->CurrLedState = LED_STATE_OFF; > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - } > - break; > - case LED_CTL_POWER_OFF: > - pLed->CurrLedState = LED_STATE_OFF; > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - if (pLed->bLedScanBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedScanBlinkInProgress = false; > > - } > - if (pLed->bLedWPSBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedWPSBlinkInProgress = false; > > - } > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - break; > - default: > - break; > - } > -} > - > -static void SwLedControlMode3(struct _adapter *padapter, > - enum LED_CTL_MODE LedAction) > -{ > - struct led_priv *ledpriv = &padapter->ledpriv; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct LED_871x *pLed = &ledpriv->SwLed0; > > - > - switch (LedAction) { > - case LED_CTL_SITE_SURVEY: > - if (pmlmepriv->sitesurveyctrl.traffic_busy) > > - ; /* dummy branch */ > - else if (!pLed->bLedScanBlinkInProgress) { > > - if (IS_LED_WPS_BLINKING(pLed)) > - return; > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - pLed->bLedScanBlinkInProgress = true; > > - pLed->CurrLedState = LED_SCAN_BLINK; > > - pLed->BlinkTimes = 24; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - } > - break; > - case LED_CTL_TX: > - case LED_CTL_RX: > - if (!pLed->bLedBlinkInProgress && > > - check_fwstate(pmlmepriv, _FW_LINKED)) { > - if (pLed->CurrLedState == LED_SCAN_BLINK || > > - IS_LED_WPS_BLINKING(pLed)) > - return; > - pLed->bLedBlinkInProgress = true; > > - pLed->CurrLedState = LED_TXRX_BLINK; > > - pLed->BlinkTimes = 2; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_FASTER_INTERVAL_ALPHA)); > - } > - break; > - case LED_CTL_LINK: > - if (IS_LED_WPS_BLINKING(pLed)) > - return; > - pLed->CurrLedState = LED_STATE_ON; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - if (pLed->bLedScanBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedScanBlinkInProgress = false; > > - } > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - break; > - case LED_CTL_START_WPS: /* wait until xinpin finish */ > - case LED_CTL_START_WPS_BOTTON: > - if (!pLed->bLedWPSBlinkInProgress) { > > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - if (pLed->bLedScanBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedScanBlinkInProgress = false; > > - } > - pLed->bLedWPSBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_WPS; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - } > - break; > - case LED_CTL_STOP_WPS: > - if (pLed->bLedWPSBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedWPSBlinkInProgress = false; > > - } else { > - pLed->bLedWPSBlinkInProgress = true; > > - } > - pLed->CurrLedState = LED_BLINK_WPS_STOP; > > - if (pLed->bLedOn) { > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_WPS_SUCCESS_INTERVAL_ALPHA)); > - } else { > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - } > - break; > - case LED_CTL_STOP_WPS_FAIL: > - if (pLed->bLedWPSBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedWPSBlinkInProgress = false; > > - } > - pLed->CurrLedState = LED_STATE_OFF; > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - break; > - case LED_CTL_START_TO_LINK: > - case LED_CTL_NO_LINK: > - if (!IS_LED_BLINKING(pLed)) { > - pLed->CurrLedState = LED_STATE_OFF; > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - } > - break; > - case LED_CTL_POWER_OFF: > - pLed->CurrLedState = LED_STATE_OFF; > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - if (pLed->bLedScanBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedScanBlinkInProgress = false; > > - } > - if (pLed->bLedWPSBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedWPSBlinkInProgress = false; > > - } > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - break; > - default: > - break; > - } > -} > - > -static void SwLedControlMode4(struct _adapter *padapter, > - enum LED_CTL_MODE LedAction) > -{ > - struct led_priv *ledpriv = &padapter->ledpriv; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct LED_871x *pLed = &ledpriv->SwLed0; > > - struct LED_871x *pLed1 = &ledpriv->SwLed1; > > - > - switch (LedAction) { > - case LED_CTL_START_TO_LINK: > - if (pLed1->bLedWPSBlinkInProgress) { > > - pLed1->bLedWPSBlinkInProgress = false; > > - del_timer(&pLed1->BlinkTimer); > > - pLed1->BlinkingLedState = LED_STATE_OFF; > > - pLed1->CurrLedState = LED_STATE_OFF; > > - if (pLed1->bLedOn) > > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - } > - if (!pLed->bLedStartToLinkBlinkInProgress) { > > - if (pLed->CurrLedState == LED_SCAN_BLINK || > > - IS_LED_WPS_BLINKING(pLed)) > - return; > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - if (pLed->bLedNoLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedNoLinkBlinkInProgress = false; > > - } > - pLed->bLedStartToLinkBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_StartToBlink; > > - if (pLed->bLedOn) { > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SLOWLY_INTERVAL)); > - } else { > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NORMAL_INTERVAL)); > - } > - } > - break; > - case LED_CTL_LINK: > - case LED_CTL_NO_LINK: > - /LED1 settings/ > - if (LedAction == LED_CTL_LINK) { > - if (pLed1->bLedWPSBlinkInProgress) { > > - pLed1->bLedWPSBlinkInProgress = false; > > - del_timer(&pLed1->BlinkTimer); > > - pLed1->BlinkingLedState = LED_STATE_OFF; > > - pLed1->CurrLedState = LED_STATE_OFF; > > - if (pLed1->bLedOn) > > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - } > - } > - if (!pLed->bLedNoLinkBlinkInProgress) { > > - if (pLed->CurrLedState == LED_SCAN_BLINK || > > - IS_LED_WPS_BLINKING(pLed)) > - return; > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - pLed->bLedNoLinkBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_SLOWLY; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); > - } > - break; > - case LED_CTL_SITE_SURVEY: > - if (pmlmepriv->sitesurveyctrl.traffic_busy && > > - check_fwstate(pmlmepriv, _FW_LINKED)) > - ; > - else if (!pLed->bLedScanBlinkInProgress) { > > - if (IS_LED_WPS_BLINKING(pLed)) > - return; > - if (pLed->bLedNoLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedNoLinkBlinkInProgress = false; > > - } > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - pLed->bLedScanBlinkInProgress = true; > > - pLed->CurrLedState = LED_SCAN_BLINK; > > - pLed->BlinkTimes = 24; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - } > - break; > - case LED_CTL_TX: > - case LED_CTL_RX: > - if (!pLed->bLedBlinkInProgress) { > > - if (pLed->CurrLedState == LED_SCAN_BLINK || > > - IS_LED_WPS_BLINKING(pLed)) > - return; > - if (pLed->bLedNoLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedNoLinkBlinkInProgress = false; > > - } > - pLed->bLedBlinkInProgress = true; > > - pLed->CurrLedState = LED_TXRX_BLINK; > > - pLed->BlinkTimes = 2; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_FASTER_INTERVAL_ALPHA)); > - } > - break; > - case LED_CTL_START_WPS: /wait until xinpin finish/ > - case LED_CTL_START_WPS_BOTTON: > - if (pLed1->bLedWPSBlinkInProgress) { > > - pLed1->bLedWPSBlinkInProgress = false; > > - del_timer(&pLed1->BlinkTimer); > > - pLed1->BlinkingLedState = LED_STATE_OFF; > > - pLed1->CurrLedState = LED_STATE_OFF; > > - if (pLed1->bLedOn) > > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - } > - if (!pLed->bLedWPSBlinkInProgress) { > > - if (pLed->bLedNoLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedNoLinkBlinkInProgress = false; > > - } > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - if (pLed->bLedScanBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedScanBlinkInProgress = false; > > - } > - pLed->bLedWPSBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_WPS; > > - if (pLed->bLedOn) { > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SLOWLY_INTERVAL)); > - } else { > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NORMAL_INTERVAL)); > - } > - } > - break; > - case LED_CTL_STOP_WPS: /WPS connect success/ > - if (pLed->bLedWPSBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedWPSBlinkInProgress = false; > > - } > - pLed->bLedNoLinkBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_SLOWLY; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); > - break; > - case LED_CTL_STOP_WPS_FAIL: /WPS authentication fail/ > - if (pLed->bLedWPSBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedWPSBlinkInProgress = false; > > - } > - pLed->bLedNoLinkBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_SLOWLY; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); > - /LED1 settings/ > - if (pLed1->bLedWPSBlinkInProgress) > > - del_timer(&pLed1->BlinkTimer); > > - else > - pLed1->bLedWPSBlinkInProgress = true; > > - pLed1->CurrLedState = LED_BLINK_WPS_STOP; > > - if (pLed1->bLedOn) > > - pLed1->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed1->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NORMAL_INTERVAL)); > - break; > - case LED_CTL_STOP_WPS_FAIL_OVERLAP: /WPS session overlap/ > - if (pLed->bLedWPSBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedWPSBlinkInProgress = false; > > - } > - pLed->bLedNoLinkBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_SLOWLY; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); > - /LED1 settings/ > - if (pLed1->bLedWPSBlinkInProgress) > > - del_timer(&pLed1->BlinkTimer); > > - else > - pLed1->bLedWPSBlinkInProgress = true; > > - pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP; > > - pLed1->BlinkTimes = 10; > > - if (pLed1->bLedOn) > > - pLed1->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed1->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_NORMAL_INTERVAL)); > - break; > - case LED_CTL_POWER_OFF: > - pLed->CurrLedState = LED_STATE_OFF; > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - if (pLed->bLedNoLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedNoLinkBlinkInProgress = false; > > - } > - if (pLed->bLedLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedLinkBlinkInProgress = false; > > - } > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - if (pLed->bLedWPSBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedWPSBlinkInProgress = false; > > - } > - if (pLed->bLedScanBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedScanBlinkInProgress = false; > > - } > - if (pLed->bLedStartToLinkBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedStartToLinkBlinkInProgress = false; > > - } > - if (pLed1->bLedWPSBlinkInProgress) { > > - del_timer(&pLed1->BlinkTimer); > > - pLed1->bLedWPSBlinkInProgress = false; > > - } > - pLed1->BlinkingLedState = LED_UNKNOWN; > > - SwLedOff(padapter, pLed); > - SwLedOff(padapter, pLed1); > - break; > - default: > - break; > - } > -} > - > -static void SwLedControlMode5(struct _adapter *padapter, > - enum LED_CTL_MODE LedAction) > -{ > - struct led_priv *ledpriv = &padapter->ledpriv; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct LED_871x *pLed = &ledpriv->SwLed0; > > - > - if (padapter->eeprompriv.CustomerID == RT_CID_819x_CAMEO) > > - pLed = &ledpriv->SwLed1; > > - > - switch (LedAction) { > - case LED_CTL_POWER_ON: > - case LED_CTL_NO_LINK: > - case LED_CTL_LINK: /* solid blue */ > - if (pLed->CurrLedState == LED_SCAN_BLINK) > > - return; > - pLed->CurrLedState = LED_STATE_ON; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - pLed->bLedBlinkInProgress = false; > > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - break; > - case LED_CTL_SITE_SURVEY: > - if (pmlmepriv->sitesurveyctrl.traffic_busy && > > - check_fwstate(pmlmepriv, _FW_LINKED)) > - ; /* dummy branch */ > - else if (!pLed->bLedScanBlinkInProgress) { > > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - pLed->bLedScanBlinkInProgress = true; > > - pLed->CurrLedState = LED_SCAN_BLINK; > > - pLed->BlinkTimes = 24; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - } > - break; > - case LED_CTL_TX: > - case LED_CTL_RX: > - if (!pLed->bLedBlinkInProgress) { > > - if (pLed->CurrLedState == LED_SCAN_BLINK) > > - return; > - pLed->bLedBlinkInProgress = true; > > - pLed->CurrLedState = LED_TXRX_BLINK; > > - pLed->BlinkTimes = 2; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_FASTER_INTERVAL_ALPHA)); > - } > - break; > - case LED_CTL_POWER_OFF: > - pLed->CurrLedState = LED_STATE_OFF; > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - SwLedOff(padapter, pLed); > - break; > - default: > - break; > - } > -} > - > -static void SwLedControlMode6(struct _adapter *padapter, > - enum LED_CTL_MODE LedAction) > -{ > - struct led_priv *ledpriv = &padapter->ledpriv; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct LED_871x *pLed = &ledpriv->SwLed0; > > - > - switch (LedAction) { > - case LED_CTL_POWER_ON: > - case LED_CTL_NO_LINK: > - case LED_CTL_LINK: /solid blue/ > - case LED_CTL_SITE_SURVEY: > - if (IS_LED_WPS_BLINKING(pLed)) > - return; > - pLed->CurrLedState = LED_STATE_ON; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - pLed->bLedBlinkInProgress = false; > > - mod_timer(&pLed->BlinkTimer, jiffies + msecs_to_jiffies(0)); > > - break; > - case LED_CTL_TX: > - case LED_CTL_RX: > - if (!pLed->bLedBlinkInProgress && > > - check_fwstate(pmlmepriv, _FW_LINKED)) { > - if (IS_LED_WPS_BLINKING(pLed)) > - return; > - pLed->bLedBlinkInProgress = true; > > - pLed->CurrLedState = LED_TXRX_BLINK; > > - pLed->BlinkTimes = 2; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_FASTER_INTERVAL_ALPHA)); > - } > - break; > - case LED_CTL_START_WPS: /wait until xinpin finish/ > - case LED_CTL_START_WPS_BOTTON: > - if (!pLed->bLedWPSBlinkInProgress) { > > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - pLed->bLedWPSBlinkInProgress = true; > > - pLed->CurrLedState = LED_BLINK_WPS; > > - if (pLed->bLedOn) > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - else > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, jiffies + > > - msecs_to_jiffies(LED_BLINK_SCAN_INTERVAL_ALPHA)); > - } > - break; > - case LED_CTL_STOP_WPS_FAIL: > - case LED_CTL_STOP_WPS: > - if (pLed->bLedWPSBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedWPSBlinkInProgress = false; > > - } > - pLed->CurrLedState = LED_STATE_ON; > > - pLed->BlinkingLedState = LED_STATE_ON; > > - mod_timer(&pLed->BlinkTimer, > > - jiffies + msecs_to_jiffies(0)); > - break; > - case LED_CTL_POWER_OFF: > - pLed->CurrLedState = LED_STATE_OFF; > > - pLed->BlinkingLedState = LED_STATE_OFF; > > - if (pLed->bLedBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedBlinkInProgress = false; > > - } > - if (pLed->bLedWPSBlinkInProgress) { > > - del_timer(&pLed->BlinkTimer); > > - pLed->bLedWPSBlinkInProgress = false; > > - } > - SwLedOff(padapter, pLed); > - break; > - default: > - break; > - } > -} > - > -/* Description: > - * Dispatch LED action according to pHalData->LedStrategy. > > - */ > -void LedControl871x(struct _adapter *padapter, enum LED_CTL_MODE LedAction) > -{ > - struct led_priv *ledpriv = &padapter->ledpriv; > > - > - if (!ledpriv->bRegUseLed) > > - return; > - switch (ledpriv->LedStrategy) { > > - case SW_LED_MODE0: > - break; > - case SW_LED_MODE1: > - SwLedControlMode1(padapter, LedAction); > - break; > - case SW_LED_MODE2: > - SwLedControlMode2(padapter, LedAction); > - break; > - case SW_LED_MODE3: > - SwLedControlMode3(padapter, LedAction); > - break; > - case SW_LED_MODE4: > - SwLedControlMode4(padapter, LedAction); > - break; > - case SW_LED_MODE5: > - SwLedControlMode5(padapter, LedAction); > - break; > - case SW_LED_MODE6: > - SwLedControlMode6(padapter, LedAction); > - break; > - default: > - break; > - } > -} > - > -void r8712_flush_led_works(struct _adapter *padapter) > -{ > - struct led_priv *pledpriv = &padapter->ledpriv; > > - > - flush_work(&pledpriv->SwLed0.BlinkWorkItem); > > - flush_work(&pledpriv->SwLed1.BlinkWorkItem); > > -} > diff --git a/drivers/staging/rtl8712/rtl8712_macsetting_bitdef.h b/drivers/staging/rtl8712/rtl8712_macsetting_bitdef.h > deleted file mode 100644 > index 46d758d3f3a4..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_macsetting_bitdef.h > +++ /dev/null > @@ -1,31 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL8712_MACSETTING_BITDEF_H > -#define RTL8712_MACSETTING_BITDEF_H > - > -/MACID/ > -/BSSID/ > - > -/HWVID/ > -#define _HWVID_MSK 0x0F > - > -/MAR/ > -/MBIDCANCONTENT/ > - > -/MBIDCANCFG/ > -#define _POOLING BIT(31) > -#define _WRITE_EN BIT(16) > -#define _CAM_ADDR_MSK 0x001F > -#define _CAM_ADDR_SHT 0 > - > -/BUILDTIME/ > -#define _BUILDTIME_MSK 0x3FFFFFFF > - > -/BUILDUSER/ > - > -#endif / RTL8712_MACSETTING_BITDEF_H/ > - > diff --git a/drivers/staging/rtl8712/rtl8712_macsetting_regdef.h b/drivers/staging/rtl8712/rtl8712_macsetting_regdef.h > deleted file mode 100644 > index 64740d99c252..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_macsetting_regdef.h > +++ /dev/null > @@ -1,20 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL8712_MACSETTING_REGDEF_H > -#define RTL8712_MACSETTING_REGDEF_H > - > -#define MACID (RTL8712_MACIDSETTING_ + 0x0000) > -#define BSSIDR (RTL8712_MACIDSETTING_ + 0x0008) > -#define HWVID (RTL8712_MACIDSETTING_ + 0x000E) > -#define MAR (RTL8712_MACIDSETTING_ + 0x0010) > -#define MBIDCANCONTENT (RTL8712_MACIDSETTING_ + 0x0018) > -#define MBIDCANCFG (RTL8712_MACIDSETTING_ + 0x0020) > -#define BUILDTIME (RTL8712_MACIDSETTING_ + 0x0024) > -#define BUILDUSER (RTL8712_MACIDSETTING_ + 0x0028) > - > -#endif /RTL8712_MACSETTING_REGDEF_H/ > - > diff --git a/drivers/staging/rtl8712/rtl8712_powersave_bitdef.h b/drivers/staging/rtl8712/rtl8712_powersave_bitdef.h > deleted file mode 100644 > index 53e0d6b440f3..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_powersave_bitdef.h > +++ /dev/null > @@ -1,39 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL8712_POWERSAVE_BITDEF_H > -#define RTL8712_POWERSAVE_BITDEF_H > - > -/WOWCTRL/ > -#define _UWF BIT(3) > -#define _MAGIC BIT(2) > -#define _WOW_EN BIT(1) > -#define _PMEN BIT(0) > - > -/PSSTATUS/ > -#define _PSSTATUS_SEL_MSK 0x0F > - > -/PSSWITCH/ > -#define _PSSWITCH_ACT BIT(7) > -#define _PSSWITCH_SEL_MSK 0x0F > -#define _PSSWITCH_SEL_SHT 0 > - > -/LPNAV_CTRL/ > -#define _LPNAV_EN BIT(31) > -#define _LPNAV_EARLY_MSK 0x7FFF0000 > -#define _LPNAV_EARLY_SHT 16 > -#define _LPNAV_TH_MSK 0x0000FFFF > -#define _LPNAV_TH_SHT 0 > - > -/RPWM/ > -/CPWM/ > -#define _TOGGLING BIT(7) > -#define _WWLAN BIT(3) > -#define _RPS_ST BIT(2) > -#define _WLAN_TRX BIT(1) > -#define _SYS_CLK BIT(0) > - > -#endif / RTL8712_POWERSAVE_BITDEF_H/ > diff --git a/drivers/staging/rtl8712/rtl8712_powersave_regdef.h b/drivers/staging/rtl8712/rtl8712_powersave_regdef.h > deleted file mode 100644 > index 1bcfde4b1c11..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_powersave_regdef.h > +++ /dev/null > @@ -1,26 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL8712_POWERSAVE_REGDEF_H > -#define RTL8712_POWERSAVE_REGDEF_H > - > -#define WOWCTRL (RTL8712_POWERSAVE_ + 0x00) > -#define PSSTATUS (RTL8712_POWERSAVE_ + 0x01) > -#define PSSWITCH (RTL8712_POWERSAVE_ + 0x02) > -#define MIMOPS_WAITPERIOD (RTL8712_POWERSAVE_ + 0x03) > -#define LPNAV_CTRL (RTL8712_POWERSAVE_ + 0x04) > -#define WFM0 (RTL8712_POWERSAVE_ + 0x10) > -#define WFM1 (RTL8712_POWERSAVE_ + 0x20) > -#define WFM2 (RTL8712_POWERSAVE_ + 0x30) > -#define WFM3 (RTL8712_POWERSAVE_ + 0x40) > -#define WFM4 (RTL8712_POWERSAVE_ + 0x50) > -#define WFM5 (RTL8712_POWERSAVE_ + 0x60) > -#define WFCRC (RTL8712_POWERSAVE_ + 0x70) > -#define RPWM (RTL8712_POWERSAVE_ + 0x7C) > -#define CPWM (RTL8712_POWERSAVE_ + 0x7D) > - > -#endif / RTL8712_POWERSAVE_REGDEF_H / > - > diff --git a/drivers/staging/rtl8712/rtl8712_ratectrl_bitdef.h b/drivers/staging/rtl8712/rtl8712_ratectrl_bitdef.h > deleted file mode 100644 > index 1de51c48f9c1..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_ratectrl_bitdef.h > +++ /dev/null > @@ -1,36 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL8712_RATECTRL_BITDEF_H > -#define RTL8712_RATECTRL_BITDEF_H > - > -/INIRTSMCS_SEL/ > -#define _INIRTSMCS_SEL_MSK 0x3F > - > -/ RRSR/ > -#define _RRSR_SHORT BIT(23) > -#define _RRSR_RSC_MSK 0x600000 > -#define _RRSR_RSC_SHT 21 > -#define _RRSR_BITMAP_MSK 0x0FFFFF > -#define _RRSR_BITMAP_SHT 0 > - > -/ AGGLEN_LMT_H/ > -#define _AGGLMT_MCS32_MSK 0xF0 > -#define _AGGLMT_MCS32_SHT 4 > -#define _AGGLMT_MCS15_SGI_MSK 0x0F > -#define _AGGLMT_MCS15_SGI_SHT 0 > - > -/ DARFRC/ > -/ RARFRC/ > -/ MCS_TXAGC/ > -/ CCK_TXAGC/ > -#define _CCK_MSK 0xFF00 > -#define _CCK_SHT 8 > -#define _BARKER_MSK 0x00FF > -#define _BARKER_SHT 0 > - > -#endif / RTL8712_RATECTRL_BITDEF_H/ > - > diff --git a/drivers/staging/rtl8712/rtl8712_ratectrl_regdef.h b/drivers/staging/rtl8712/rtl8712_ratectrl_regdef.h > deleted file mode 100644 > index 9ed5653f3f7f..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_ratectrl_regdef.h > +++ /dev/null > @@ -1,43 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef RTL8712_RATECTRL_REGDEF_H > -#define RTL8712_RATECTRL_REGDEF_H > - > -#define INIMCS_SEL (RTL8712_RATECTRL_ + 0x00) > -#define INIRTSMCS_SEL (RTL8712_RATECTRL_ + 0x20) > -#define RRSR (RTL8712_RATECTRL_ + 0x21) > -#define ARFR0 (RTL8712_RATECTRL_ + 0x24) > -#define ARFR1 (RTL8712_RATECTRL_ + 0x28) > -#define ARFR2 (RTL8712_RATECTRL_ + 0x2C) > -#define ARFR3 (RTL8712_RATECTRL_ + 0x30) > -#define ARFR4 (RTL8712_RATECTRL_ + 0x34) > -#define ARFR5 (RTL8712_RATECTRL_ + 0x38) > -#define ARFR6 (RTL8712_RATECTRL_ + 0x3C) > -#define ARFR7 (RTL8712_RATECTRL_ + 0x40) > -#define AGGLEN_LMT_H (RTL8712_RATECTRL_ + 0x47) > -#define AGGLEN_LMT_L (RTL8712_RATECTRL_ + 0x48) > -#define DARFRC (RTL8712_RATECTRL_ + 0x50) > -#define RARFRC (RTL8712_RATECTRL_ + 0x58) > -#define MCS_TXAGC0 (RTL8712_RATECTRL_ + 0x60) > -#define MCS_TXAGC1 (RTL8712_RATECTRL_ + 0x61) > -#define MCS_TXAGC2 (RTL8712_RATECTRL_ + 0x62) > -#define MCS_TXAGC3 (RTL8712_RATECTRL_ + 0x63) > -#define MCS_TXAGC4 (RTL8712_RATECTRL_ + 0x64) > -#define MCS_TXAGC5 (RTL8712_RATECTRL_ + 0x65) > -#define MCS_TXAGC6 (RTL8712_RATECTRL_ + 0x66) > -#define MCS_TXAGC7 (RTL8712_RATECTRL_ + 0x67) > -#define CCK_TXAGC (RTL8712_RATECTRL_ + 0x68) > - > -#endif /RTL8712_RATECTRL_REGDEF_H/ > - > diff --git a/drivers/staging/rtl8712/rtl8712_recv.c b/drivers/staging/rtl8712/rtl8712_recv.c > deleted file mode 100644 > index ab344d676bb9..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_recv.c > +++ /dev/null > @@ -1,1075 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/** > - * rtl8712_recv.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RTL8712_RECV_C > - > -#include <linux/if_ether.h> > > -#include <linux/ip.h> > > -#include <net/cfg80211.h> > > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "recv_osdep.h" > -#include "mlme_osdep.h" > -#include "ethernet.h" > -#include "usb_ops.h" > -#include "wifi.h" > - > -static void recv_tasklet(struct tasklet_struct *t); > - > -int r8712_init_recv_priv(struct recv_priv *precvpriv, > - struct _adapter *padapter) > -{ > - int i; > - struct recv_buf *precvbuf; > - addr_t tmpaddr = 0; > - int alignment = 0; > - struct sk_buff *pskb = NULL; > - > - /init recv_buf/ > - _init_queue(&precvpriv->free_recv_buf_queue); > > - precvpriv->pallocated_recv_buf = > > - kzalloc(NR_RECVBUFF * sizeof(struct recv_buf) + 4, GFP_ATOMIC); > - if (!precvpriv->pallocated_recv_buf) > > - return -ENOMEM; > - precvpriv->precv_buf = precvpriv->pallocated_recv_buf + 4 - > > - ((addr_t)(precvpriv->pallocated_recv_buf) & 3); > > - precvbuf = (struct recv_buf *)precvpriv->precv_buf; > > - for (i = 0; i < NR_RECVBUFF; i++) { > - INIT_LIST_HEAD(&precvbuf->list); > > - spin_lock_init(&precvbuf->recvbuf_lock); > > - if (r8712_os_recvbuf_resource_alloc(padapter, precvbuf)) > - break; > - precvbuf->ref_cnt = 0; > > - precvbuf->adapter = padapter; > > - list_add_tail(&precvbuf->list, > > - &precvpriv->free_recv_buf_queue.queue); > > - precvbuf++; > - } > - precvpriv->free_recv_buf_queue_cnt = NR_RECVBUFF; > > - tasklet_setup(&precvpriv->recv_tasklet, recv_tasklet); > > - skb_queue_head_init(&precvpriv->rx_skb_queue); > > - > - skb_queue_head_init(&precvpriv->free_recv_skb_queue); > > - for (i = 0; i < NR_PREALLOC_RECV_SKB; i++) { > - pskb = netdev_alloc_skb(padapter->pnetdev, MAX_RECVBUF_SZ + > > - RECVBUFF_ALIGN_SZ); > - if (pskb) { > - tmpaddr = (addr_t)pskb->data; > > - alignment = tmpaddr & (RECVBUFF_ALIGN_SZ - 1); > - skb_reserve(pskb, (RECVBUFF_ALIGN_SZ - alignment)); > - skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb); > > - } > - pskb = NULL; > - } > - return 0; > -} > - > -void r8712_free_recv_priv(struct recv_priv *precvpriv) > -{ > - int i; > - struct recv_buf *precvbuf; > - struct _adapter *padapter = precvpriv->adapter; > > - > - precvbuf = (struct recv_buf *)precvpriv->precv_buf; > > - for (i = 0; i < NR_RECVBUFF; i++) { > - r8712_os_recvbuf_resource_free(padapter, precvbuf); > - precvbuf++; > - } > - kfree(precvpriv->pallocated_recv_buf); > > - skb_queue_purge(&precvpriv->rx_skb_queue); > > - if (skb_queue_len(&precvpriv->rx_skb_queue)) > > - netdev_warn(padapter->pnetdev, "r8712u: rx_skb_queue not empty\n"); > > - skb_queue_purge(&precvpriv->free_recv_skb_queue); > > - if (skb_queue_len(&precvpriv->free_recv_skb_queue)) > > - netdev_warn(padapter->pnetdev, "r8712u: free_recv_skb_queue not empty %d\n", > > - skb_queue_len(&precvpriv->free_recv_skb_queue)); > > -} > - > -void r8712_init_recvbuf(struct _adapter *padapter, struct recv_buf *precvbuf) > -{ > - precvbuf->transfer_len = 0; > > - precvbuf->len = 0; > > - precvbuf->ref_cnt = 0; > > - if (precvbuf->pbuf) { > > - precvbuf->pdata = precvbuf->pbuf; > > - precvbuf->phead = precvbuf->pbuf; > > - precvbuf->ptail = precvbuf->pbuf; > > - precvbuf->pend = precvbuf->pdata + MAX_RECVBUF_SZ; > > - } > -} > - > -void r8712_free_recvframe(union recv_frame *precvframe, > - struct __queue *pfree_recv_queue) > -{ > - unsigned long irqL; > - struct _adapter *padapter = precvframe->u.hdr.adapter; > > - struct recv_priv *precvpriv = &padapter->recvpriv; > > - > - if (precvframe->u.hdr.pkt) { > > - dev_kfree_skb_any(precvframe->u.hdr.pkt);/free skb by driver/ > > - precvframe->u.hdr.pkt = NULL; > > - } > - spin_lock_irqsave(&pfree_recv_queue->lock, irqL); > > - list_del_init(&precvframe->u.hdr.list); > > - list_add_tail(&precvframe->u.hdr.list, &pfree_recv_queue->queue); > > - if (padapter) { > - if (pfree_recv_queue == &precvpriv->free_recv_queue) > > - precvpriv->free_recvframe_cnt++; > > - } > - spin_unlock_irqrestore(&pfree_recv_queue->lock, irqL); > > -} > - > -static void update_recvframe_attrib_from_recvstat(struct rx_pkt_attrib *pattrib, > - struct recv_stat *prxstat) > -{ > - /*TODO: > - * Offset 0 > - */ > - pattrib->bdecrypted = (le32_to_cpu(prxstat->rxdw0) & BIT(27)) == 0; > > - pattrib->crc_err = (le32_to_cpu(prxstat->rxdw0) & BIT(14)) != 0; > > - /Offset 4/ > - /Offset 8/ > - /Offset 12/ > - if (le32_to_cpu(prxstat->rxdw3) & BIT(13)) { > > - pattrib->tcpchk_valid = 1; /* valid */ > > - if (le32_to_cpu(prxstat->rxdw3) & BIT(11)) > > - pattrib->tcp_chkrpt = 1; /* correct */ > > - else > - pattrib->tcp_chkrpt = 0; /* incorrect */ > > - if (le32_to_cpu(prxstat->rxdw3) & BIT(12)) > > - pattrib->ip_chkrpt = 1; /* correct */ > > - else > - pattrib->ip_chkrpt = 0; /* incorrect */ > > - } else { > - pattrib->tcpchk_valid = 0; /* invalid */ > > - } > - pattrib->mcs_rate = (u8)((le32_to_cpu(prxstat->rxdw3)) & 0x3f); > > - pattrib->htc = (u8)((le32_to_cpu(prxstat->rxdw3) >> 14) & 0x1); > > - /Offset 16/ > - /Offset 20/ > - /phy_info/ > -} > - > -/perform defrag/ > -static union recv_frame *recvframe_defrag(struct _adapter *adapter, > - struct __queue *defrag_q) > -{ > - struct list_head *plist, *phead; > - u8 wlanhdr_offset; > - u8 curfragnum; > - struct recv_frame_hdr *pfhdr, *pnfhdr; > - union recv_frame *prframe, *pnextrframe; > - struct __queue *pfree_recv_queue; > - > - pfree_recv_queue = &adapter->recvpriv.free_recv_queue; > > - phead = &defrag_q->queue; > > - plist = phead->next; > > - prframe = container_of(plist, union recv_frame, u.list); > - list_del_init(&prframe->u.list); > > - pfhdr = &prframe->u.hdr; > > - curfragnum = 0; > - if (curfragnum != pfhdr->attrib.frag_num) { > > - /*the first fragment number must be 0 > - *free the whole queue > - */ > - r8712_free_recvframe(prframe, pfree_recv_queue); > - r8712_free_recvframe_queue(defrag_q, pfree_recv_queue); > - return NULL; > - } > - curfragnum++; > - plist = &defrag_q->queue; > > - plist = plist->next; > > - while (!end_of_queue_search(phead, plist)) { > - pnextrframe = container_of(plist, union recv_frame, u.list); > - pnfhdr = &pnextrframe->u.hdr; > > - /*check the fragment sequence (2nd ~n fragment frame) */ > - if (curfragnum != pnfhdr->attrib.frag_num) { > > - /* the fragment number must increase (after decache) > - * release the defrag_q & prframe > - / > - r8712_free_recvframe(prframe, pfree_recv_queue); > - r8712_free_recvframe_queue(defrag_q, pfree_recv_queue); > - return NULL; > - } > - curfragnum++; > - / copy the 2nd~n fragment frame's payload to the first fragment > - * get the 2nd~last fragment frame's payload > - */ > - wlanhdr_offset = pnfhdr->attrib.hdrlen + pnfhdr->attrib.iv_len; > > - recvframe_pull(pnextrframe, wlanhdr_offset); > - /* append to first fragment frame's tail (if privacy frame, > - * pull the ICV) > - */ > - recvframe_pull_tail(prframe, pfhdr->attrib.icv_len); > > - memcpy(pfhdr->rx_tail, pnfhdr->rx_data, pnfhdr->len); > > - recvframe_put(prframe, pnfhdr->len); > > - pfhdr->attrib.icv_len = pnfhdr->attrib.icv_len; > > - plist = plist->next; > > - } > - /* free the defrag_q queue and return the prframe / > - r8712_free_recvframe_queue(defrag_q, pfree_recv_queue); > - return prframe; > -} > - > -/ check if need to defrag, if needed queue the frame to defrag_q */ > -union recv_frame *r8712_recvframe_chk_defrag(struct _adapter *padapter, > - union recv_frame *precv_frame) > -{ > - u8 ismfrag; > - u8 fragnum; > - u8 *psta_addr; > - struct recv_frame_hdr *pfhdr; > - struct sta_info *psta; > - struct sta_priv *pstapriv; > - struct list_head *phead; > - union recv_frame *prtnframe = NULL; > - struct __queue *pfree_recv_queue, *pdefrag_q; > - > - pstapriv = &padapter->stapriv; > > - pfhdr = &precv_frame->u.hdr; > > - pfree_recv_queue = &padapter->recvpriv.free_recv_queue; > > - /* need to define struct of wlan header frame ctrl */ > - ismfrag = pfhdr->attrib.mfrag; > > - fragnum = pfhdr->attrib.frag_num; > > - psta_addr = pfhdr->attrib.ta; > > - psta = r8712_get_stainfo(pstapriv, psta_addr); > - if (!psta) > - pdefrag_q = NULL; > - else > - pdefrag_q = &psta->sta_recvpriv.defrag_q; > > - > - if ((ismfrag == 0) && (fragnum == 0)) > - prtnframe = precv_frame;/isn't a fragment frame/ > - if (ismfrag == 1) { > - /* 0~(n-1) fragment frame > - * enqueue to defraf_g > - */ > - if (pdefrag_q) { > - if (fragnum == 0) { > - /the first fragment/ > - if (!list_empty(&pdefrag_q->queue)) { > > - /*free current defrag_q / > - r8712_free_recvframe_queue(pdefrag_q, pfree_recv_queue); > - } > - } > - / Then enqueue the 0~(n-1) fragment to the defrag_q */ > - phead = &pdefrag_q->queue; > > - list_add_tail(&pfhdr->list, phead); > > - prtnframe = NULL; > - } else { > - /* can't find this ta's defrag_queue, so free this > - * recv_frame > - / > - r8712_free_recvframe(precv_frame, pfree_recv_queue); > - prtnframe = NULL; > - } > - } > - if ((ismfrag == 0) && (fragnum != 0)) { > - / the last fragment frame > - * enqueue the last fragment > - */ > - if (pdefrag_q) { > - phead = &pdefrag_q->queue; > > - list_add_tail(&pfhdr->list, phead); > > - /call recvframe_defrag to defrag/ > - precv_frame = recvframe_defrag(padapter, pdefrag_q); > - prtnframe = precv_frame; > - } else { > - /* can't find this ta's defrag_queue, so free this > - * recv_frame > - */ > - r8712_free_recvframe(precv_frame, pfree_recv_queue); > - prtnframe = NULL; > - } > - } > - if (prtnframe && (prtnframe->u.hdr.attrib.privacy)) { > > - /* after defrag we must check tkip mic code */ > - if (r8712_recvframe_chkmic(padapter, prtnframe) == _FAIL) { > - r8712_free_recvframe(prtnframe, pfree_recv_queue); > - prtnframe = NULL; > - } > - } > - return prtnframe; > -} > - > -static void amsdu_to_msdu(struct _adapter *padapter, union recv_frame *prframe) > -{ > - int a_len, padding_len; > - u16 eth_type, nSubframe_Length; > - u8 nr_subframes, i; > - unsigned char *pdata; > - struct rx_pkt_attrib *pattrib; > - _pkt *sub_skb, *subframes[MAX_SUBFRAME_COUNT]; > - struct recv_priv *precvpriv = &padapter->recvpriv; > > - struct __queue *pfree_recv_queue = &precvpriv->free_recv_queue; > > - > - nr_subframes = 0; > - pattrib = &prframe->u.hdr.attrib; > > - recvframe_pull(prframe, prframe->u.hdr.attrib.hdrlen); > > - if (prframe->u.hdr.attrib.iv_len > 0) > > - recvframe_pull(prframe, prframe->u.hdr.attrib.iv_len); > > - a_len = prframe->u.hdr.len; > > - pdata = prframe->u.hdr.rx_data; > > - while (a_len > ETH_HLEN) { > > - /* Offset 12 denote 2 mac address */ > - nSubframe_Length = ((u16 )(pdata + 12)); > - /==m==>change the length order/ > > - nSubframe_Length = (nSubframe_Length >> 8) + > > - (nSubframe_Length << 8); > - if (a_len < (ETHERNET_HEADER_SIZE + nSubframe_Length)) { > - netdev_warn(padapter->pnetdev, "r8712u: nRemain_Length is %d and nSubframe_Length is: %d\n", > > - a_len, nSubframe_Length); > - goto exit; > - } > - /* move the data point to data content / > - pdata += ETH_HLEN; > - a_len -= ETH_HLEN; > - / Allocate new skb for releasing to upper layer */ > - sub_skb = dev_alloc_skb(nSubframe_Length + 12); > - if (!sub_skb) > - break; > - skb_reserve(sub_skb, 12); > - skb_put_data(sub_skb, pdata, nSubframe_Length); > - subframes[nr_subframes++] = sub_skb; > - if (nr_subframes >= MAX_SUBFRAME_COUNT) { > > - netdev_warn(padapter->pnetdev, "r8712u: ParseSubframe(): Too many Subframes! Packets dropped!\n"); > > - break; > - } > - pdata += nSubframe_Length; > - a_len -= nSubframe_Length; > - if (a_len != 0) { > - padding_len = 4 - ((nSubframe_Length + ETH_HLEN) & 3); > - if (padding_len == 4) > - padding_len = 0; > - if (a_len < padding_len) > - goto exit; > - pdata += padding_len; > - a_len -= padding_len; > - } > - } > - for (i = 0; i < nr_subframes; i++) { > - sub_skb = subframes[i]; > - /* convert hdr + possible LLC headers into Ethernet header */ > - eth_type = (sub_skb->data[6] << 8) | sub_skb->data[7]; > > - if (sub_skb->len >= 8 && > > - ((!memcmp(sub_skb->data, rfc1042_header, SNAP_SIZE) && > > - eth_type != ETH_P_AARP && eth_type != ETH_P_IPX) || > - !memcmp(sub_skb->data, bridge_tunnel_header, SNAP_SIZE))) { > > - /* remove RFC1042 or Bridge-Tunnel encapsulation and > - * replace EtherType > - */ > - skb_pull(sub_skb, SNAP_SIZE); > - memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->src, > > - ETH_ALEN); > - memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->dst, > > - ETH_ALEN); > - } else { > - __be16 len; > - /* Leave Ethernet header part of hdr and full payload */ > - len = htons(sub_skb->len); > > - memcpy(skb_push(sub_skb, 2), &len, 2); > - memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->src, > > - ETH_ALEN); > - memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->dst, > > - ETH_ALEN); > - } > - /* Indicate the packets to upper layer */ > - if (sub_skb) { > - sub_skb->protocol = > > - eth_type_trans(sub_skb, padapter->pnetdev); > > - sub_skb->dev = padapter->pnetdev; > > - if ((pattrib->tcpchk_valid == 1) && > > - (pattrib->tcp_chkrpt == 1)) { > > - sub_skb->ip_summed = CHECKSUM_UNNECESSARY; > > - } else { > - sub_skb->ip_summed = CHECKSUM_NONE; > > - } > - netif_rx(sub_skb); > - } > - } > -exit: > - prframe->u.hdr.len = 0; > > - r8712_free_recvframe(prframe, pfree_recv_queue); > -} > - > -void r8712_rxcmd_event_hdl(struct _adapter *padapter, void *prxcmdbuf) > -{ > - __le32 voffset; > - u8 *poffset; > - u16 cmd_len, drvinfo_sz; > - struct recv_stat *prxstat; > - > - poffset = prxcmdbuf; > - voffset = *(__le32 *)poffset; > - prxstat = prxcmdbuf; > - drvinfo_sz = (le32_to_cpu(prxstat->rxdw0) & 0x000f0000) >> 16; > > - drvinfo_sz <<= 3; > - poffset += RXDESC_SIZE + drvinfo_sz; > - do { > - voffset = *(__le32 *)poffset; > - cmd_len = (u16)(le32_to_cpu(voffset) & 0xffff); > - r8712_event_handle(padapter, (__le32 *)poffset); > - poffset += (cmd_len + 8);/8 bytes alignment/ > - } while (le32_to_cpu(voffset) & BIT(31)); > -} > - > -static int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, > - u16 seq_num) > -{ > - u8 wsize = preorder_ctrl->wsize_b; > > - u16 wend = (preorder_ctrl->indicate_seq + wsize - 1) % 4096; > > - > - /* Rx Reorder initialize condition.*/ > - if (preorder_ctrl->indicate_seq == 0xffff) > > - preorder_ctrl->indicate_seq = seq_num; > > - /* Drop out the packet which SeqNum is smaller than WinStart */ > - if (SN_LESS(seq_num, preorder_ctrl->indicate_seq)) > > - return false; > - /* > - * Sliding window manipulation. Conditions includes: > - * 1. Incoming SeqNum is equal to WinStart =>Window shift 1 > > - * 2. Incoming SeqNum is larger than the WinEnd => Window shift N > > - */ > - if (SN_EQUAL(seq_num, preorder_ctrl->indicate_seq)) > > - preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + > > - 1) % 4096; > - else if (SN_LESS(wend, seq_num)) { > - if (seq_num >= (wsize - 1)) > > - preorder_ctrl->indicate_seq = seq_num + 1 - wsize; > > - else > - preorder_ctrl->indicate_seq = 4095 - (wsize - > > - (seq_num + 1)) + 1; > - } > - return true; > -} > - > -static int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, > - union recv_frame *prframe) > -{ > - struct list_head *phead, *plist; > - union recv_frame *pnextrframe; > - struct rx_pkt_attrib *pnextattrib; > - struct __queue *ppending_recvframe_queue = > - &preorder_ctrl->pending_recvframe_queue; > > - struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib; > > - > - phead = &ppending_recvframe_queue->queue; > > - plist = phead->next; > > - while (!end_of_queue_search(phead, plist)) { > - pnextrframe = container_of(plist, union recv_frame, u.list); > - pnextattrib = &pnextrframe->u.hdr.attrib; > > - > - if (SN_EQUAL(pnextattrib->seq_num, pattrib->seq_num)) > > - return false; > - > - if (SN_LESS(pnextattrib->seq_num, pattrib->seq_num)) > > - plist = plist->next; > > - else > - break; > - } > - list_del_init(&prframe->u.hdr.list); > > - list_add_tail(&prframe->u.hdr.list, plist); > > - return true; > -} > - > -int r8712_recv_indicatepkts_in_order(struct _adapter *padapter, > - struct recv_reorder_ctrl *preorder_ctrl, > - int bforced) > -{ > - struct list_head *phead, *plist; > - union recv_frame *prframe; > - struct rx_pkt_attrib *pattrib; > - int bPktInBuf = false; > - struct __queue *ppending_recvframe_queue = > - &preorder_ctrl->pending_recvframe_queue; > > - > - phead = &ppending_recvframe_queue->queue; > > - plist = phead->next; > > - /* Handling some condition for forced indicate case.*/ > - if (bforced) { > - if (list_empty(phead)) > - return true; > - > - prframe = container_of(plist, union recv_frame, u.list); > - pattrib = &prframe->u.hdr.attrib; > > - preorder_ctrl->indicate_seq = pattrib->seq_num; > > - } > - /* Prepare indication list and indication. > - * Check if there is any packet need indicate. > - */ > - while (!list_empty(phead)) { > - prframe = container_of(plist, union recv_frame, u.list); > - pattrib = &prframe->u.hdr.attrib; > > - if (!SN_LESS(preorder_ctrl->indicate_seq, pattrib->seq_num)) { > > - plist = plist->next; > > - list_del_init(&prframe->u.hdr.list); > > - if (SN_EQUAL(preorder_ctrl->indicate_seq, > > - pattrib->seq_num)) > > - preorder_ctrl->indicate_seq = > > - (preorder_ctrl->indicate_seq + 1) % 4096; > > - /indicate this recv_frame/ > - if (!pattrib->amsdu) { > > - if (!padapter->driver_stopped && > > - !padapter->surprise_removed) { > > - /* indicate this recv_frame */ > - r8712_recv_indicatepkt(padapter, > - prframe); > - } > - } else if (pattrib->amsdu == 1) { > > - amsdu_to_msdu(padapter, prframe); > - } > - /* Update local variables. */ > - bPktInBuf = false; > - } else { > - bPktInBuf = true; > - break; > - } > - } > - return bPktInBuf; > -} > - > -static int recv_indicatepkt_reorder(struct _adapter *padapter, > - union recv_frame *prframe) > -{ > - unsigned long irql; > - struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib; > > - struct recv_reorder_ctrl *preorder_ctrl = prframe->u.hdr.preorder_ctrl; > > - struct __queue *ppending_recvframe_queue = > - &preorder_ctrl->pending_recvframe_queue; > > - > - if (!pattrib->amsdu) { > > - /* s1. */ > - r8712_wlanhdr_to_ethhdr(prframe); > - if (pattrib->qos != 1) { > > - if (!padapter->driver_stopped && > > - !padapter->surprise_removed) { > > - r8712_recv_indicatepkt(padapter, prframe); > - return 0; > - } else { > - return -EINVAL; > - } > - } > - } > - spin_lock_irqsave(&ppending_recvframe_queue->lock, irql); > > - /s2. check if winstart_b(indicate_seq) needs to be updated/ > - if (!check_indicate_seq(preorder_ctrl, pattrib->seq_num)) > > - goto _err_exit; > - /s3. Insert all packet into Reorder Queue to maintain its ordering./ > - if (!enqueue_reorder_recvframe(preorder_ctrl, prframe)) > - goto _err_exit; > - /*s4. > - * Indication process. > - * After Packet dropping and Sliding Window shifting as above, we can > - * now just indicate the packets with the SeqNum smaller than latest > - * WinStart and buffer other packets. > - * > - * For Rx Reorder condition: > - * 1. All packets with SeqNum smaller than WinStart => Indicate > > - * 2. All packets with SeqNum larger than or equal to > - * WinStart => Buffer it. > > - */ > - if (r8712_recv_indicatepkts_in_order(padapter, preorder_ctrl, false)) { > - mod_timer(&preorder_ctrl->reordering_ctrl_timer, > > - jiffies + msecs_to_jiffies(REORDER_WAIT_TIME)); > - spin_unlock_irqrestore(&ppending_recvframe_queue->lock, irql); > > - } else { > - spin_unlock_irqrestore(&ppending_recvframe_queue->lock, irql); > > - del_timer(&preorder_ctrl->reordering_ctrl_timer); > > - } > - return 0; > -_err_exit: > - spin_unlock_irqrestore(&ppending_recvframe_queue->lock, irql); > > - return -ENOMEM; > -} > - > -void r8712_reordering_ctrl_timeout_handler(void *pcontext) > -{ > - unsigned long irql; > - struct recv_reorder_ctrl *preorder_ctrl = pcontext; > - struct _adapter *padapter = preorder_ctrl->padapter; > > - struct __queue *ppending_recvframe_queue = > - &preorder_ctrl->pending_recvframe_queue; > > - > - if (padapter->driver_stopped || padapter->surprise_removed) > > - return; > - spin_lock_irqsave(&ppending_recvframe_queue->lock, irql); > > - r8712_recv_indicatepkts_in_order(padapter, preorder_ctrl, true); > - spin_unlock_irqrestore(&ppending_recvframe_queue->lock, irql); > > -} > - > -static int r8712_process_recv_indicatepkts(struct _adapter *padapter, > - union recv_frame *prframe) > -{ > - int retval = _SUCCESS; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct ht_priv *phtpriv = &pmlmepriv->htpriv; > > - > - if (phtpriv->ht_option == 1) { /B/G/N Mode/ > > - if (recv_indicatepkt_reorder(padapter, prframe)) { > - /* including perform A-MPDU Rx Ordering Buffer Control*/ > - if (!padapter->driver_stopped && > > - !padapter->surprise_removed) > > - return _FAIL; > - } > - } else { /B/G mode/ > - retval = r8712_wlanhdr_to_ethhdr(prframe); > - if (retval) > - return _FAIL; > - if (!padapter->driver_stopped && !padapter->surprise_removed) { > > - /* indicate this recv_frame */ > - r8712_recv_indicatepkt(padapter, prframe); > - } else { > - return _FAIL; > - } > - } > - return retval; > -} > - > -static u8 query_rx_pwr_percentage(s8 antpower) > -{ > - if ((antpower <= -100) || (antpower >= 20)) > > - return 0; > - else if (antpower >= 0) > > - return 100; > - else > - return 100 + antpower; > -} > - > -static u8 evm_db2percentage(s8 value) > -{ > - /* > - * -33dB~0dB to 0%~99% > - */ > - s8 ret_val = clamp(-value, 0, 33) * 3; > - > - if (ret_val == 99) > - ret_val = 100; > - > - return ret_val; > -} > - > -s32 r8712_signal_scale_mapping(s32 cur_sig) > -{ > - s32 ret_sig; > - > - if (cur_sig >= 51 && cur_sig <= 100) > > - ret_sig = 100; > - else if (cur_sig >= 41 && cur_sig <= 50) > > - ret_sig = 80 + ((cur_sig - 40) * 2); > - else if (cur_sig >= 31 && cur_sig <= 40) > > - ret_sig = 66 + (cur_sig - 30); > - else if (cur_sig >= 21 && cur_sig <= 30) > > - ret_sig = 54 + (cur_sig - 20); > - else if (cur_sig >= 10 && cur_sig <= 20) > > - ret_sig = 42 + (((cur_sig - 10) * 2) / 3); > - else if (cur_sig >= 5 && cur_sig <= 9) > > - ret_sig = 22 + (((cur_sig - 5) * 3) / 2); > - else if (cur_sig >= 1 && cur_sig <= 4) > > - ret_sig = 6 + (((cur_sig - 1) * 3) / 2); > - else > - ret_sig = cur_sig; > - return ret_sig; > -} > - > -static s32 translate2dbm(struct _adapter padapter, u8 signal_strength_idx) > -{ > - s32 signal_power; / in dBm./ > - / Translate to dBm (x=0.5y-95).*/ > - signal_power = (s32)((signal_strength_idx + 1) >> 1); > > - signal_power -= 95; > - return signal_power; > -} > - > -static void query_rx_phy_status(struct _adapter *padapter, > - union recv_frame *prframe) > -{ > - u8 i, max_spatial_stream, evm; > - struct recv_stat *prxstat = (struct recv_stat *)prframe->u.hdr.rx_head; > > - struct phy_stat *pphy_stat = (struct phy_stat *)(prxstat + 1); > - u8 *pphy_head = (u8 )(prxstat + 1); > - s8 rx_pwr[4], rx_pwr_all; > - u8 pwdb_all; > - u32 rssi, total_rssi = 0; > - u8 bcck_rate = 0, rf_rx_num = 0, cck_highpwr = 0; > - struct phy_cck_rx_status pcck_buf; > - u8 sq; > - > - / Record it for next packet processing/ > - bcck_rate = (prframe->u.hdr.attrib.mcs_rate <= 3 ? 1 : 0); > > - if (bcck_rate) { > - u8 report; > - > - /* CCK Driver info Structure is not the same as OFDM packet.*/ > - pcck_buf = (struct phy_cck_rx_status )pphy_stat; > - / (1)Hardware does not provide RSSI for CCK > - * (2)PWDB, Average PWDB calculated by hardware > - * (for rate adaptive) > - */ > - if (!cck_highpwr) { > - report = pcck_buf->cck_agc_rpt & 0xc0; > > - report >>= 6; > > - switch (report) { > - /* Modify the RF RNA gain value to -40, -20, > - * -2, 14 by Jenyu's suggestion > - * Note: different RF with the different > - * RNA gain. > - */ > - case 0x3: > - rx_pwr_all = -40 - (pcck_buf->cck_agc_rpt & > > - 0x3e); > - break; > - case 0x2: > - rx_pwr_all = -20 - (pcck_buf->cck_agc_rpt & > > - 0x3e); > - break; > - case 0x1: > - rx_pwr_all = -2 - (pcck_buf->cck_agc_rpt & > > - 0x3e); > - break; > - case 0x0: > - rx_pwr_all = 14 - (pcck_buf->cck_agc_rpt & > > - 0x3e); > - break; > - } > - } else { > - report = ((u8)(le32_to_cpu(pphy_stat->phydw1) >> 8)) & > > - 0x60; > - report >>= 5; > > - switch (report) { > - case 0x3: > - rx_pwr_all = -40 - ((pcck_buf->cck_agc_rpt & > > - 0x1f) << 1); > - break; > - case 0x2: > - rx_pwr_all = -20 - ((pcck_buf->cck_agc_rpt & > > - 0x1f) << 1); > - break; > - case 0x1: > - rx_pwr_all = -2 - ((pcck_buf->cck_agc_rpt & > > - 0x1f) << 1); > - break; > - case 0x0: > - rx_pwr_all = 14 - ((pcck_buf->cck_agc_rpt & > > - 0x1f) << 1); > - break; > - } > - } > - pwdb_all = query_rx_pwr_percentage(rx_pwr_all); > - /* CCK gain is smaller than OFDM/MCS gain,/ > - / so we add gain diff by experiences, the val is 6 */ > - pwdb_all += 6; > - if (pwdb_all > 100) > > - pwdb_all = 100; > - /* modify the offset to make the same gain index with OFDM.*/ > - if (pwdb_all > 34 && pwdb_all <= 42) > > - pwdb_all -= 2; > - else if (pwdb_all > 26 && pwdb_all <= 34) > > - pwdb_all -= 6; > - else if (pwdb_all > 14 && pwdb_all <= 26) > > - pwdb_all -= 8; > - else if (pwdb_all > 4 && pwdb_all <= 14) > > - pwdb_all -= 4; > - /* > - * (3) Get Signal Quality (EVM) > - */ > - if (pwdb_all > 40) { > > - sq = 100; > - } else { > - sq = pcck_buf->sq_rpt; > > - if (pcck_buf->sq_rpt > 64) > > - sq = 0; > - else if (pcck_buf->sq_rpt < 20) > > - sq = 100; > - else > - sq = ((64 - sq) * 100) / 44; > - } > - prframe->u.hdr.attrib.signal_qual = sq; > > - prframe->u.hdr.attrib.rx_mimo_signal_qual[0] = sq; > > - prframe->u.hdr.attrib.rx_mimo_signal_qual[1] = -1; > > - } else { > - /* (1)Get RSSI for HT rate */ > - for (i = 0; i < ((padapter->registrypriv.rf_config) & > > - 0x0f); i++) { > - rf_rx_num++; > - rx_pwr[i] = ((pphy_head[PHY_STAT_GAIN_TRSW_SHT + i] > - & 0x3F) * 2) - 110; > - /* Translate DBM to percentage. / > - rssi = query_rx_pwr_percentage(rx_pwr[i]); > - total_rssi += rssi; > - } > - / (2)PWDB, Average PWDB calculated by hardware (for > - * rate adaptive) > - */ > - rx_pwr_all = (((pphy_head[PHY_STAT_PWDB_ALL_SHT]) >> 1) & 0x7f) > > - - 106; > - pwdb_all = query_rx_pwr_percentage(rx_pwr_all); > - > - { > - /* (3)EVM of HT rate */ > - if (prframe->u.hdr.attrib.htc && > > - prframe->u.hdr.attrib.mcs_rate >= 20 && > > - prframe->u.hdr.attrib.mcs_rate <= 27) { > > - /* both spatial stream make sense / > - max_spatial_stream = 2; > - } else { > - / only spatial stream 1 makes sense */ > - max_spatial_stream = 1; > - } > - for (i = 0; i < max_spatial_stream; i++) { > - evm = evm_db2percentage((pphy_head > - [PHY_STAT_RXEVM_SHT + i]));/dbm/ > - prframe->u.hdr.attrib.signal_qual = > > - (u8)(evm & 0xff); > - prframe->u.hdr.attrib.rx_mimo_signal_qual[i] = > > - (u8)(evm & 0xff); > - } > - } > - } > - /* UI BSS List signal strength(in percentage), make it good looking, > - * from 0~100. It is assigned to the BSS List in > - * GetValueFromBeaconOrProbeRsp(). > - */ > - if (bcck_rate) { > - prframe->u.hdr.attrib.signal_strength = > > - (u8)r8712_signal_scale_mapping(pwdb_all); > - } else { > - if (rf_rx_num != 0) > - prframe->u.hdr.attrib.signal_strength = > > - (u8)(r8712_signal_scale_mapping(total_rssi /= > - rf_rx_num)); > - } > -} > - > -static void process_link_qual(struct _adapter *padapter, > - union recv_frame *prframe) > -{ > - u32 last_evm = 0, avg_val; > - struct rx_pkt_attrib *pattrib; > - struct smooth_rssi_data *sqd = &padapter->recvpriv.signal_qual_data; > > - > - if (!prframe || !padapter) > - return; > - pattrib = &prframe->u.hdr.attrib; > > - if (pattrib->signal_qual != 0) { > > - /* > - * 1. Record the general EVM to the sliding window. > - */ > - if (sqd->total_num++ >= PHY_LINKQUALITY_SLID_WIN_MAX) { > > - sqd->total_num = PHY_LINKQUALITY_SLID_WIN_MAX; > > - last_evm = sqd->elements[sqd->index]; > > - sqd->total_val -= last_evm; > > - } > - sqd->total_val += pattrib->signal_qual; > > - sqd->elements[sqd->index++] = pattrib->signal_qual; > > - if (sqd->index >= PHY_LINKQUALITY_SLID_WIN_MAX) > > - sqd->index = 0; > > - > - /* <1> Showed on UI for user, in percentage. */ > > - avg_val = sqd->total_val / sqd->total_num; > > - padapter->recvpriv.signal = (u8)avg_val; > > - } > -} > - > -static void process_rssi(struct _adapter *padapter, union recv_frame *prframe) > -{ > - u32 last_rssi, tmp_val; > - struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib; > > - struct smooth_rssi_data *ssd = &padapter->recvpriv.signal_strength_data; > > - > - if (ssd->total_num++ >= PHY_RSSI_SLID_WIN_MAX) { > > - ssd->total_num = PHY_RSSI_SLID_WIN_MAX; > > - last_rssi = ssd->elements[ssd->index]; > > - ssd->total_val -= last_rssi; > > - } > - ssd->total_val += pattrib->signal_strength; > > - ssd->elements[ssd->index++] = pattrib->signal_strength; > > - if (ssd->index >= PHY_RSSI_SLID_WIN_MAX) > > - ssd->index = 0; > > - tmp_val = ssd->total_val / ssd->total_num; > > - padapter->recvpriv.rssi = (s8)translate2dbm(padapter, (u8)tmp_val); > > -} > - > -static void process_phy_info(struct _adapter *padapter, > - union recv_frame *prframe) > -{ > - query_rx_phy_status(padapter, prframe); > - process_rssi(padapter, prframe); > - process_link_qual(padapter, prframe); > -} > - > -int recv_func(struct _adapter *padapter, void *pcontext) > -{ > - struct rx_pkt_attrib *pattrib; > - union recv_frame *prframe, *orig_prframe; > - int retval = _SUCCESS; > - struct __queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - > - prframe = pcontext; > - orig_prframe = prframe; > - pattrib = &prframe->u.hdr.attrib; > > - if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) { > - if (pattrib->crc_err == 1) > > - padapter->mppriv.rx_crcerrpktcount++; > > - else > - padapter->mppriv.rx_pktcount++; > > - if (!check_fwstate(pmlmepriv, WIFI_MP_LPBK_STATE)) { > - /* free this recv_frame / > - r8712_free_recvframe(orig_prframe, pfree_recv_queue); > - goto _exit_recv_func; > - } > - } > - / check the frame crtl field and decache / > - retval = r8712_validate_recv_frame(padapter, prframe); > - if (retval != _SUCCESS) { > - / free this recv_frame */ > - r8712_free_recvframe(orig_prframe, pfree_recv_queue); > - goto _exit_recv_func; > - } > - process_phy_info(padapter, prframe); > - prframe = r8712_decryptor(padapter, prframe); > - if (!prframe) { > - retval = _FAIL; > - goto _exit_recv_func; > - } > - prframe = r8712_recvframe_chk_defrag(padapter, prframe); > - if (!prframe) > - goto _exit_recv_func; > - prframe = r8712_portctrl(padapter, prframe); > - if (!prframe) { > - retval = _FAIL; > - goto _exit_recv_func; > - } > - retval = r8712_process_recv_indicatepkts(padapter, prframe); > - if (retval != _SUCCESS) { > - r8712_free_recvframe(orig_prframe, pfree_recv_queue); > - goto _exit_recv_func; > - } > -_exit_recv_func: > - return retval; > -} > - > -static void recvbuf2recvframe(struct _adapter *padapter, struct sk_buff *pskb) > -{ > - u8 *pbuf, shift_sz = 0; > - u8 frag, mf; > - uint pkt_len; > - u32 transfer_len; > - struct recv_stat *prxstat; > - u16 pkt_cnt, drvinfo_sz, pkt_offset, tmp_len, alloc_sz; > - struct __queue *pfree_recv_queue; > - _pkt *pkt_copy = NULL; > - union recv_frame *precvframe = NULL; > - struct recv_priv *precvpriv = &padapter->recvpriv; > > - > - pfree_recv_queue = &precvpriv->free_recv_queue; > > - pbuf = pskb->data; > > - prxstat = (struct recv_stat *)pbuf; > - pkt_cnt = (le32_to_cpu(prxstat->rxdw2) >> 16) & 0xff; > > - pkt_len = le32_to_cpu(prxstat->rxdw0) & 0x00003fff; > > - transfer_len = pskb->len; > > - /* Test throughput with Netgear 3700 (No security) with Chariot 3T3R > - * pairs. The packet count will be a big number so that the containing > - * packet will effect the Rx reordering. > - / > - if (transfer_len < pkt_len) { > - / In this case, it means the MAX_RECVBUF_SZ is too small to > - * get the data from 8712u. > - */ > - return; > - } > - do { > - prxstat = (struct recv_stat *)pbuf; > - pkt_len = le32_to_cpu(prxstat->rxdw0) & 0x00003fff; > > - /* more fragment bit */ > - mf = (le32_to_cpu(prxstat->rxdw1) >> 27) & 0x1; > > - /* ragmentation number */ > - frag = (le32_to_cpu(prxstat->rxdw2) >> 12) & 0xf; > > - /* uint 2^3 = 8 bytes */ > - drvinfo_sz = (le32_to_cpu(prxstat->rxdw0) & 0x000f0000) >> 16; > > - drvinfo_sz <<= 3; > - if (pkt_len <= 0) > - return; > - /* Qos data, wireless lan header length is 26 */ > - if ((le32_to_cpu(prxstat->rxdw0) >> 23) & 0x01) > > - shift_sz = 2; > - precvframe = r8712_alloc_recvframe(pfree_recv_queue); > - if (!precvframe) > - return; > - INIT_LIST_HEAD(&precvframe->u.hdr.list); > > - precvframe->u.hdr.precvbuf = NULL; /can't access the precvbuf/ > > - precvframe->u.hdr.len = 0; > > - tmp_len = pkt_len + drvinfo_sz + RXDESC_SIZE; > - pkt_offset = (u16)round_up(tmp_len, 128); > - /* for first fragment packet, driver need allocate 1536 + > - * drvinfo_sz + RXDESC_SIZE to defrag packet. > - / > - if ((mf == 1) && (frag == 0)) > - /1658+6=1664, 1664 is 128 alignment./ > - alloc_sz = max_t(u16, tmp_len, 1658); > - else > - alloc_sz = tmp_len; > - / 2 is for IP header 4 bytes alignment in QoS packet case. > - * 4 is for skb->data 4 bytes alignment. > > - */ > - alloc_sz += 6; > - pkt_copy = netdev_alloc_skb(padapter->pnetdev, alloc_sz); > > - if (!pkt_copy) > - return; > - > - precvframe->u.hdr.pkt = pkt_copy; > > - skb_reserve(pkt_copy, 4 - ((addr_t)(pkt_copy->data) % 4)); > > - skb_reserve(pkt_copy, shift_sz); > - memcpy(pkt_copy->data, pbuf, tmp_len); > > - precvframe->u.hdr.rx_head = pkt_copy->data; > > - precvframe->u.hdr.rx_data = pkt_copy->data; > > - precvframe->u.hdr.rx_tail = pkt_copy->data; > > - precvframe->u.hdr.rx_end = pkt_copy->data + alloc_sz; > > - > - recvframe_put(precvframe, tmp_len); > - recvframe_pull(precvframe, drvinfo_sz + RXDESC_SIZE); > - /* because the endian issue, driver avoid reference to the > - * rxstat after calling update_recvframe_attrib_from_recvstat(); > - */ > - update_recvframe_attrib_from_recvstat(&precvframe->u.hdr.attrib, > > - prxstat); > - r8712_recv_entry(precvframe); > - transfer_len -= pkt_offset; > - pbuf += pkt_offset; > - pkt_cnt--; > - precvframe = NULL; > - pkt_copy = NULL; > - } while ((transfer_len > 0) && pkt_cnt > 0); > > -} > - > -static void recv_tasklet(struct tasklet_struct *t) > -{ > - struct sk_buff *pskb; > - struct _adapter *padapter = from_tasklet(padapter, t, > - recvpriv.recv_tasklet); > - struct recv_priv *precvpriv = &padapter->recvpriv; > > - > - while (NULL != (pskb = skb_dequeue(&precvpriv->rx_skb_queue))) { > > - recvbuf2recvframe(padapter, pskb); > - skb_reset_tail_pointer(pskb); > - pskb->len = 0; > > - if (!skb_cloned(pskb)) > - skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb); > > - else > - consume_skb(pskb); > - } > -} > diff --git a/drivers/staging/rtl8712/rtl8712_recv.h b/drivers/staging/rtl8712/rtl8712_recv.h > deleted file mode 100644 > index a1360dcf91ce..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_recv.h > +++ /dev/null > @@ -1,145 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ***************************************************************************/ > -#ifndef RTL8712_RECV_H > -#define RTL8712_RECV_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > - > -/ Realtek's v2.6.6 reduced this to 4. However, under heavy network and CPU > - * loads, even 8 receive buffers might not be enough; cutting it to 4 seemed > - * unwise. > - / > -#define NR_RECVBUFF (8) > - > -#define NR_PREALLOC_RECV_SKB (8) > -#define RXDESC_SIZE 24 > -#define RXDESC_OFFSET RXDESC_SIZE > -#define RECV_BLK_SZ 512 > -#define RECV_BLK_CNT 16 > -#define RECV_BLK_TH RECV_BLK_CNT > -#define MAX_RECVBUF_SZ 9100 > -#define RECVBUFF_ALIGN_SZ 512 > -#define RSVD_ROOM_SZ (0) > -/These definition is used for Rx packet reordering./ > -#define SN_LESS(a, b) (((a-b) & 0x800) != 0) > -#define SN_EQUAL(a, b) (a == b) > -#define REORDER_WAIT_TIME 30 / (ms)/ > - > -struct recv_stat { > - __le32 rxdw0; > - __le32 rxdw1; > - __le32 rxdw2; > - __le32 rxdw3; > - __le32 rxdw4; > - __le32 rxdw5; > -}; > - > -struct phy_cck_rx_status { > - / For CCK rate descriptor. This is a unsigned 8:1 variable. > - * LSB bit present 0.5. And MSB 7 bts present a signed value. > - * Range from -64~+63.5. > - */ > - u8 adc_pwdb_X[4]; > - u8 sq_rpt; > - u8 cck_agc_rpt; > -}; > - > -struct phy_stat { > - __le32 phydw0; > - __le32 phydw1; > - __le32 phydw2; > - __le32 phydw3; > - __le32 phydw4; > - __le32 phydw5; > - __le32 phydw6; > - __le32 phydw7; > -}; > - > -#define PHY_STAT_GAIN_TRSW_SHT 0 > -#define PHY_STAT_PWDB_ALL_SHT 4 > -#define PHY_STAT_CFOSHO_SHT 5 > -#define PHY_STAT_CCK_AGC_RPT_SHT 5 > -#define PHY_STAT_CFOTAIL_SHT 9 > -#define PHY_STAT_RXEVM_SHT 13 > -#define PHY_STAT_RXSNR_SHT 15 > -#define PHY_STAT_PDSNR_SHT 19 > -#define PHY_STAT_CSI_CURRENT_SHT 21 > -#define PHY_STAT_CSI_TARGET_SHT 23 > -#define PHY_STAT_SIGEVM_SHT 25 > -#define PHY_STAT_MAX_EX_PWR_SHT 26 > - > -union recvstat { > - struct recv_stat recv_stat; > - unsigned int value[RXDESC_SIZE >> 2]; > > -}; > - > -struct recv_buf { > - struct list_head list; > - spinlock_t recvbuf_lock; > - u32 ref_cnt; > - struct _adapter *adapter; > - struct urb *purb; > - _pkt *pskb; > - u8 irp_pending; > - u32 transfer_len; > - uint len; > - u8 *phead; > - u8 *pdata; > - u8 *ptail; > - u8 *pend; > - u8 *pbuf; > - u8 pallocated_buf; > -}; > - > -/ > - * head -----> > > - * data -----> > > - * payload > - * tail -----> > > - * end -----> > > - * len = (unsigned int )(tail - data); > - / > -struct recv_frame_hdr { > - struct list_head list; > - _pkt pkt; > - _pkt pkt_newalloc; > - struct _adapter adapter; > - u8 fragcnt; > - struct rx_pkt_attrib attrib; > - uint len; > - u8 rx_head; > - u8 rx_data; > - u8 rx_tail; > - u8 rx_end; > - void precvbuf; > - struct sta_info psta; > - /for A-MPDU Rx reordering buffer control/ > - struct recv_reorder_ctrl preorder_ctrl; > -}; > - > -union recv_frame { > - union { > - struct list_head list; > - struct recv_frame_hdr hdr; > - } u; > -}; > - > -void r8712_init_recvbuf(struct _adapter padapter, struct recv_buf precvbuf); > -void r8712_rxcmd_event_hdl(struct _adapter padapter, void prxcmdbuf); > -s32 r8712_signal_scale_mapping(s32 cur_sig); > -void r8712_reordering_ctrl_timeout_handler(void pcontext); > - > -#endif > - > diff --git a/drivers/staging/rtl8712/rtl8712_regdef.h b/drivers/staging/rtl8712/rtl8712_regdef.h > deleted file mode 100644 > index 28aec9aa539f..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_regdef.h > +++ /dev/null > @@ -1,32 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef RTL8712_REGDEF_H > -#define RTL8712_REGDEF_H > - > -#include "rtl8712_syscfg_regdef.h" > -#include "rtl8712_cmdctrl_regdef.h" > -#include "rtl8712_macsetting_regdef.h" > -#include "rtl8712_timectrl_regdef.h" > -#include "rtl8712_fifoctrl_regdef.h" > -#include "rtl8712_ratectrl_regdef.h" > -#include "rtl8712_edcasetting_regdef.h" > -#include "rtl8712_wmac_regdef.h" > -#include "rtl8712_powersave_regdef.h" > -#include "rtl8712_gp_regdef.h" > -#include "rtl8712_debugctrl_regdef.h" > - > -#define HIMR (RTL8712_INTERRUPT_ + 0x08) > - > -#endif / RTL8712_REGDEF_H/ > - > diff --git a/drivers/staging/rtl8712/rtl8712_security_bitdef.h b/drivers/staging/rtl8712/rtl8712_security_bitdef.h > deleted file mode 100644 > index 44275ef455a0..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_security_bitdef.h > +++ /dev/null > @@ -1,34 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL8712_SECURITY_BITDEF_H > -#define RTL8712_SECURITY_BITDEF_H > - > -/CAMCMD/ > -#define _SECCAM_POLLING BIT(31) > -#define _SECCAM_CLR BIT(30) > -#define _SECCAM_WE BIT(16) > -#define _SECCAM_ADR_MSK 0x000000FF > -#define _SECCAM_ADR_SHT 0 > - > -/CAMDBG/ > -#define _SECCAM_INFO BIT(31) > -#define _SEC_KEYFOUND BIT(30) > -#define _SEC_CONFIG_MSK 0x3F000000 > -#define _SEC_CONFIG_SHT 24 > -#define _SEC_KEYCONTENT_MSK 0x00FFFFFF > -#define _SEC_KEYCONTENT_SHT 0 > - > -/SECCFG/ > -#define _NOSKMC BIT(5) > -#define _SKBYA2 BIT(4) > -#define _RXDEC BIT(3) > -#define _TXENC BIT(2) > -#define _RXUSEDK BIT(1) > -#define _TXUSEDK BIT(0) > - > -#endif /RTL8712_SECURITY_BITDEF_H/ > - > diff --git a/drivers/staging/rtl8712/rtl8712_spec.h b/drivers/staging/rtl8712/rtl8712_spec.h > deleted file mode 100644 > index 613a410e5714..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_spec.h > +++ /dev/null > @@ -1,121 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef RTL8712_SPEC_H > -#define RTL8712_SPEC_H > - > -#define RTL8712_IOBASE_TXPKT 0x10200000 /IOBASE_TXPKT/ > -#define RTL8712_IOBASE_RXPKT 0x10210000 /IOBASE_RXPKT/ > -#define RTL8712_IOBASE_RXCMD 0x10220000 /IOBASE_RXCMD/ > -#define RTL8712_IOBASE_TXSTATUS 0x10230000 /IOBASE_TXSTATUS/ > -#define RTL8712_IOBASE_RXSTATUS 0x10240000 /IOBASE_RXSTATUS/ > -#define RTL8712_IOBASE_IOREG 0x10250000 /IOBASE_IOREG ADDR/ > -#define RTL8712_IOBASE_SCHEDULER 0x10260000 /IOBASE_SCHEDULE/ > - > -#define RTL8712_IOBASE_TRXDMA 0x10270000 /IOBASE_TRXDMA/ > -#define RTL8712_IOBASE_TXLLT 0x10280000 /IOBASE_TXLLT/ > -#define RTL8712_IOBASE_WMAC 0x10290000 /IOBASE_WMAC/ > -#define RTL8712_IOBASE_FW2HW 0x102A0000 /IOBASE_FW2HW/ > -#define RTL8712_IOBASE_ACCESS_PHYREG 0x102B0000 /IOBASE_ACCESS_PHYREG/ > - > -#define RTL8712_IOBASE_FF 0x10300000 /IOBASE_FIFO 0x1031000~0x103AFFFF/ > - > -/IOREG Offset for 8712/ > -#define RTL8712_SYSCFG_ RTL8712_IOBASE_IOREG > -#define RTL8712_CMDCTRL_ (RTL8712_IOBASE_IOREG + 0x40) > -#define RTL8712_MACIDSETTING_ (RTL8712_IOBASE_IOREG + 0x50) > -#define RTL8712_TIMECTRL_ (RTL8712_IOBASE_IOREG + 0x80) > -#define RTL8712_FIFOCTRL_ (RTL8712_IOBASE_IOREG + 0xA0) > -#define RTL8712_RATECTRL_ (RTL8712_IOBASE_IOREG + 0x160) > -#define RTL8712_EDCASETTING_ (RTL8712_IOBASE_IOREG + 0x1D0) > -#define RTL8712_WMAC_ (RTL8712_IOBASE_IOREG + 0x200) > -#define RTL8712_SECURITY_ (RTL8712_IOBASE_IOREG + 0x240) > -#define RTL8712_POWERSAVE_ (RTL8712_IOBASE_IOREG + 0x260) > -#define RTL8712_GP_ (RTL8712_IOBASE_IOREG + 0x2E0) > -#define RTL8712_INTERRUPT_ (RTL8712_IOBASE_IOREG + 0x300) > -#define RTL8712_DEBUGCTRL_ (RTL8712_IOBASE_IOREG + 0x310) > -#define RTL8712_OFFLOAD_ (RTL8712_IOBASE_IOREG + 0x2D0) > - > -/FIFO for 8712/ > -#define RTL8712_DMA_BCNQ (RTL8712_IOBASE_FF + 0x10000) > -#define RTL8712_DMA_MGTQ (RTL8712_IOBASE_FF + 0x20000) > -#define RTL8712_DMA_BMCQ (RTL8712_IOBASE_FF + 0x30000) > -#define RTL8712_DMA_VOQ (RTL8712_IOBASE_FF + 0x40000) > -#define RTL8712_DMA_VIQ (RTL8712_IOBASE_FF + 0x50000) > -#define RTL8712_DMA_BEQ (RTL8712_IOBASE_FF + 0x60000) > -#define RTL8712_DMA_BKQ (RTL8712_IOBASE_FF + 0x70000) > -#define RTL8712_DMA_RX0FF (RTL8712_IOBASE_FF + 0x80000) > -#define RTL8712_DMA_H2CCMD (RTL8712_IOBASE_FF + 0x90000) > -#define RTL8712_DMA_C2HCMD (RTL8712_IOBASE_FF + 0xA0000) > - > -/------------------------------/ > - > -/BIT 16 15/ > -#define DID_SDIO_LOCAL 0 / 0 0/ > -#define DID_WLAN_IOREG 1 / 0 1/ > -#define DID_WLAN_FIFO 3 / 1 1/ > -#define DID_UNDEFINE (-1) > - > -#define CMD_ADDR_MAPPING_SHIFT 2 /SDIO CMD ADDR MAPPING, > - shift 2 bit for match > - * offset[14:2] > - / > - > -/Offset for SDIO LOCAL/ > -#define OFFSET_SDIO_LOCAL 0x0FFF > - > -/Offset for WLAN IOREG/ > -#define OFFSET_WLAN_IOREG 0x0FFF > - > -/Offset for WLAN FIFO/ > -#define OFFSET_TX_BCNQ 0x0300 > -#define OFFSET_TX_HIQ 0x0310 > -#define OFFSET_TX_CMDQ 0x0320 > -#define OFFSET_TX_MGTQ 0x0330 > -#define OFFSET_TX_HCCAQ 0x0340 > -#define OFFSET_TX_VOQ 0x0350 > -#define OFFSET_TX_VIQ 0x0360 > -#define OFFSET_TX_BEQ 0x0370 > -#define OFFSET_TX_BKQ 0x0380 > -#define OFFSET_RX_RX0FFQ 0x0390 > -#define OFFSET_RX_C2HFFQ 0x03A0 > - > -#define BK_QID_01 1 > -#define BK_QID_02 2 > -#define BE_QID_01 0 > -#define BE_QID_02 3 > -#define VI_QID_01 4 > -#define VI_QID_02 5 > -#define VO_QID_01 6 > -#define VO_QID_02 7 > -#define HCCA_QID_01 8 > -#define HCCA_QID_02 9 > -#define HCCA_QID_03 10 > -#define HCCA_QID_04 11 > -#define HCCA_QID_05 12 > -#define HCCA_QID_06 13 > -#define HCCA_QID_07 14 > -#define HCCA_QID_08 15 > -#define HI_QID 17 > -#define CMD_QID 19 > -#define MGT_QID 18 > -#define BCN_QID 16 > - > -#include "rtl8712_regdef.h" > - > -#include "rtl8712_bitdef.h" > - > -#include "basic_types.h" > - > -#endif / RTL8712_SPEC_H / > - > diff --git a/drivers/staging/rtl8712/rtl8712_syscfg_bitdef.h b/drivers/staging/rtl8712/rtl8712_syscfg_bitdef.h > deleted file mode 100644 > index d92df3fbd2b1..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_syscfg_bitdef.h > +++ /dev/null > @@ -1,163 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/***** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef RTL8712_SYSCFG_BITDEF_H > -#define RTL8712_SYSCFG_BITDEF_H > - > -/SYS_PWR_CTRL/ > -/SRCTRL0/ > -/SRCTRL1/ > -/SYS_CLKR/ > - > -/SYS_IOS_CTRL/ > -#define iso_LDR2RP_SHT 8 / EE Loader to Retention Path/ > -#define iso_LDR2RP BIT(iso_LDR2RP_SHT) / 1:isolation, 0:attach/ > - > -/SYS_CTRL/ > -#define FEN_DIO_SDIO_SHT 0 > -#define FEN_DIO_SDIO BIT(FEN_DIO_SDIO_SHT) > -#define FEN_SDIO_SHT 1 > -#define FEN_SDIO BIT(FEN_SDIO_SHT) > -#define FEN_USBA_SHT 2 > -#define FEN_USBA BIT(FEN_USBA_SHT) > -#define FEN_UPLL_SHT 3 > -#define FEN_UPLL BIT(FEN_UPLL_SHT) > -#define FEN_USBD_SHT 4 > -#define FEN_USBD BIT(FEN_USBD_SHT) > -#define FEN_DIO_PCIE_SHT 5 > -#define FEN_DIO_PCIE BIT(FEN_DIO_PCIE_SHT) > -#define FEN_PCIEA_SHT 6 > -#define FEN_PCIEA BIT(FEN_PCIEA_SHT) > -#define FEN_PPLL_SHT 7 > -#define FEN_PPLL BIT(FEN_PPLL_SHT) > -#define FEN_PCIED_SHT 8 > -#define FEN_PCIED BIT(FEN_PCIED_SHT) > -#define FEN_CPUEN_SHT 10 > -#define FEN_CPUEN BIT(FEN_CPUEN_SHT) > -#define FEN_DCORE_SHT 11 > -#define FEN_DCORE BIT(FEN_DCORE_SHT) > -#define FEN_ELDR_SHT 12 > -#define FEN_ELDR BIT(FEN_ELDR_SHT) > -#define PWC_DV2LDR_SHT 13 > -#define PWC_DV2LDR BIT(PWC_DV2LDR_SHT) / Loader Power Enable/ > - > -/=== SYS_CLKR ===/ > -#define SYS_CLKSEL_SHT 0 > -#define SYS_CLKSEL BIT(SYS_CLKSEL_SHT) / System Clock 80MHz/ > -#define PS_CLKSEL_SHT 1 > -#define PS_CLKSEL BIT(PS_CLKSEL_SHT) /System power save > - * clock select. > - / > -#define CPU_CLKSEL_SHT 2 > -#define CPU_CLKSEL BIT(CPU_CLKSEL_SHT) / System Clock select, > - * 1: AFE source, > - * 0: System clock(L-Bus) > - / > -#define INT32K_EN_SHT 3 > -#define INT32K_EN BIT(INT32K_EN_SHT) > -#define MACSLP_SHT 4 > -#define MACSLP BIT(MACSLP_SHT) > -#define MAC_CLK_EN_SHT 11 > -#define MAC_CLK_EN BIT(MAC_CLK_EN_SHT) / MAC Clock Enable./ > -#define SYS_CLK_EN_SHT 12 > -#define SYS_CLK_EN BIT(SYS_CLK_EN_SHT) > -#define RING_CLK_EN_SHT 13 > -#define RING_CLK_EN BIT(RING_CLK_EN_SHT) > -#define SWHW_SEL_SHT 14 > -#define SWHW_SEL BIT(SWHW_SEL_SHT) / Load done, > - * control path switch. > - / > -#define FWHW_SEL_SHT 15 > -#define FWHW_SEL BIT(FWHW_SEL_SHT) / Sleep exit, > - * control path switch. > - / > - > -/9346CR/ > -#define _VPDIDX_MSK 0xFF00 > -#define _VPDIDX_SHT 8 > -#define _EEM_MSK 0x00C0 > -#define _EEM_SHT 6 > -#define _EEM0 BIT(6) > -#define _EEM1 BIT(7) > -#define _EEPROM_EN BIT(5) > -#define _9356SEL BIT(4) > -#define _EECS BIT(3) > -#define _EESK BIT(2) > -#define _EEDI BIT(1) > -#define _EEDO BIT(0) > - > -/AFE_MISC/ > -#define AFE_MISC_USB_MBEN_SHT 7 > -#define AFE_MISC_USB_MBEN BIT(AFE_MISC_USB_MBEN_SHT) > -#define AFE_MISC_USB_BGEN_SHT 6 > -#define AFE_MISC_USB_BGEN BIT(AFE_MISC_USB_BGEN_SHT) > -#define AFE_MISC_LD12_VDAJ_SHT 4 > -#define AFE_MISC_LD12_VDAJ_MSK 0X0030 > -#define AFE_MISC_LD12_VDAJ BIT(AFE_MISC_LD12_VDAJ_SHT) > -#define AFE_MISC_I32_EN_SHT 3 > -#define AFE_MISC_I32_EN BIT(AFE_MISC_I32_EN_SHT) > -#define AFE_MISC_E32_EN_SHT 2 > -#define AFE_MISC_E32_EN BIT(AFE_MISC_E32_EN_SHT) > -#define AFE_MISC_MBEN_SHT 1 > -#define AFE_MISC_MBEN BIT(AFE_MISC_MBEN_SHT)/ Enable AFE Macro > - * Block's Mbias. > - / > -#define AFE_MISC_BGEN_SHT 0 > -#define AFE_MISC_BGEN BIT(AFE_MISC_BGEN_SHT)/ Enable AFE Macro > - * Block's Bandgap. > - / > - > -/--------------------------------------------------------------------------/ > -/ SPS1_CTRL bits (Offset 0x18-1E, 56bits)/ > -/--------------------------------------------------------------------------/ > -#define SPS1_SWEN BIT(1) / Enable vsps18 SW Macro Block./ > -#define SPS1_LDEN BIT(0) / Enable VSPS12 LDO Macro block./ > - > -/----------------------------------------------------------------------------/ > -/ LDOA15_CTRL bits (Offset 0x20, 8bits)/ > -/----------------------------------------------------------------------------/ > -#define LDA15_EN BIT(0) / Enable LDOA15 Macro Block/ > - > -/----------------------------------------------------------------------------/ > -/ 8192S LDOV12D_CTRL bit (Offset 0x21, 8bits)/ > -/----------------------------------------------------------------------------/ > -#define LDV12_EN BIT(0) / Enable LDOVD12 Macro Block/ > -#define LDV12_SDBY BIT(1) / LDOVD12 standby mode/ > - > -/CLK_PS_CTRL/ > -#define _CLK_GATE_EN BIT(0) > - > -/ EFUSE_CTRL/ > -#define EF_FLAG BIT(31) / Access Flag, Write:1; > - * Read:0 > - / > -#define EF_PGPD 0x70000000 / E-fuse Program time/ > -#define EF_RDT 0x0F000000 / E-fuse read time: in the > - * unit of cycle time > - / > -#define EF_PDN_EN BIT(19) / EFuse Power down enable/ > -#define ALD_EN BIT(18) / Autoload Enable/ > -#define EF_ADDR 0x0003FF00 / Access Address/ > -#define EF_DATA 0x000000FF / Access Data/ > - > -/ EFUSE_TEST/ > -#define LDOE25_EN BIT(31) / Enable LDOE25 Macro Block/ > - > -/ EFUSE_CLK_CTRL/ > -#define EFUSE_CLK_EN BIT(1) / E-Fuse Clock Enable/ > -#define EFUSE_CLK_SEL BIT(0) / E-Fuse Clock Select, > - * 0:500K, 1:40M > - / > - > -#endif /RTL8712_SYSCFG_BITDEF_H/ > - > diff --git a/drivers/staging/rtl8712/rtl8712_syscfg_regdef.h b/drivers/staging/rtl8712/rtl8712_syscfg_regdef.h > deleted file mode 100644 > index da5efcdedabe..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_syscfg_regdef.h > +++ /dev/null > @@ -1,42 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/************************************************************ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef RTL8712_SYSCFG_REGDEF_H > -#define RTL8712_SYSCFG_REGDEF_H > - > -#define SYS_ISO_CTRL (RTL8712_SYSCFG_ + 0x0000) > -#define SYS_FUNC_EN (RTL8712_SYSCFG_ + 0x0002) > -#define PMC_FSM (RTL8712_SYSCFG_ + 0x0004) > -#define SYS_CLKR (RTL8712_SYSCFG_ + 0x0008) > -#define EE_9346CR (RTL8712_SYSCFG_ + 0x000A) > -#define EE_VPD (RTL8712_SYSCFG_ + 0x000C) > -#define AFE_MISC (RTL8712_SYSCFG_ + 0x0010) > -#define SPS0_CTRL (RTL8712_SYSCFG_ + 0x0011) > -#define SPS1_CTRL (RTL8712_SYSCFG_ + 0x0018) > -#define RF_CTRL (RTL8712_SYSCFG_ + 0x001F) > -#define LDOA15_CTRL (RTL8712_SYSCFG_ + 0x0020) > -#define LDOV12D_CTRL (RTL8712_SYSCFG_ + 0x0021) > -#define LDOHCI12_CTRL (RTL8712_SYSCFG_ + 0x0022) > -#define LDO_USB_CTRL (RTL8712_SYSCFG_ + 0x0023) > -#define LPLDO_CTRL (RTL8712_SYSCFG_ + 0x0024) > -#define AFE_XTAL_CTRL (RTL8712_SYSCFG_ + 0x0026) > -#define AFE_PLL_CTRL (RTL8712_SYSCFG_ + 0x0028) > -#define EFUSE_CTRL (RTL8712_SYSCFG_ + 0x0030) > -#define EFUSE_TEST (RTL8712_SYSCFG_ + 0x0034) > -#define PWR_DATA (RTL8712_SYSCFG_ + 0x0038) > -#define DPS_TIMER (RTL8712_SYSCFG_ + 0x003C) > -#define RCLK_MON (RTL8712_SYSCFG_ + 0x003E) > -#define EFUSE_CLK_CTRL (RTL8712_SYSCFG_ + 0x02F8) > - > -#endif /RTL8712_SYSCFG_REGDEF_H/ > - > diff --git a/drivers/staging/rtl8712/rtl8712_timectrl_bitdef.h b/drivers/staging/rtl8712/rtl8712_timectrl_bitdef.h > deleted file mode 100644 > index d7bc9dd5cecd..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_timectrl_bitdef.h > +++ /dev/null > @@ -1,49 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL8712_TIMECTRL_BITDEF_H > -#define RTL8712_TIMECTRL_BITDEF_H > - > -/TSFTR/ > -/SLOT/ > -/USTIME/ > - > -/TUBASE/ > -#define _TUBASE_MSK 0x07FF > - > -/SIFS_CCK/ > -#define _SIFS_CCK_TRX_MSK 0xFF00 > -#define _SIFS_CCK_TRX_SHT 0x8 > -#define _SIFS_CCK_CTX_MSK 0x00FF > -#define _SIFS_CCK_CTX_SHT 0 > - > -/SIFS_OFDM/ > -#define _SIFS_OFDM_TRX_MSK 0xFF00 > -#define _SIFS_OFDM_TRX_SHT 0x8 > -#define _SIFS_OFDM_CTX_MSK 0x00FF > -#define _SIFS_OFDM_CTX_SHT 0 > - > -/PIFS/ > -/ACKTO/ > -/EIFS/ > -/BCNITV/ > -/ATIMWND/ > - > -/DRVERLYINT/ > -#define _ENSWBCN BIT(15) > -#define _DRVERLY_TU_MSK 0x0FF0 > -#define _DRVERLY_TU_SHT 4 > -#define _DRVERLY_US_MSK 0x000F > -#define _DRVERLY_US_SHT 0 > - > -/BCNDMATIM/ > -#define _BCNDMATIM_MSK 0x03FF > - > -/BCNERRTH/ > -/MLT/ > - > -#endif / RTL8712_TIMECTRL_BITDEF_H/ > - > diff --git a/drivers/staging/rtl8712/rtl8712_timectrl_regdef.h b/drivers/staging/rtl8712/rtl8712_timectrl_regdef.h > deleted file mode 100644 > index b51603f1b880..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_timectrl_regdef.h > +++ /dev/null > @@ -1,26 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL8712_TIMECTRL_REGDEF_H > -#define RTL8712_TIMECTRL_REGDEF_H > - > -#define TSFTR (RTL8712_TIMECTRL_ + 0x00) > -#define USTIME (RTL8712_TIMECTRL_ + 0x08) > -#define SLOT (RTL8712_TIMECTRL_ + 0x09) > -#define TUBASE (RTL8712_TIMECTRL_ + 0x0A) > -#define SIFS_CCK (RTL8712_TIMECTRL_ + 0x0C) > -#define SIFS_OFDM (RTL8712_TIMECTRL_ + 0x0E) > -#define PIFS (RTL8712_TIMECTRL_ + 0x10) > -#define ACKTO (RTL8712_TIMECTRL_ + 0x11) > -#define EIFS (RTL8712_TIMECTRL_ + 0x12) > -#define BCNITV (RTL8712_TIMECTRL_ + 0x14) > -#define ATIMWND (RTL8712_TIMECTRL_ + 0x16) > -#define DRVERLYINT (RTL8712_TIMECTRL_ + 0x18) > -#define BCNDMATIM (RTL8712_TIMECTRL_ + 0x1A) > -#define BCNERRTH (RTL8712_TIMECTRL_ + 0x1C) > -#define MLT (RTL8712_TIMECTRL_ + 0x1D) > - > -#endif / RTL8712_TIMECTRL_REGDEF_H / > diff --git a/drivers/staging/rtl8712/rtl8712_wmac_bitdef.h b/drivers/staging/rtl8712/rtl8712_wmac_bitdef.h > deleted file mode 100644 > index ea164e482347..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_wmac_bitdef.h > +++ /dev/null > @@ -1,49 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef RTL8712_WMAC_BITDEF_H > -#define RTL8712_WMAC_BITDEF_H > - > -/NAVCTRL/ > -#define _NAV_UPPER_EN BIT(18) > -#define _NAV_MTO_EN BIT(17) > -#define _NAV_UPPER BIT(16) > -#define _NAV_MTO_MSK 0xFF00 > -#define _NAV_MTO_SHT 8 > -#define _RTSRST_MSK 0x00FF > -#define _RTSRST_SHT 0 > - > -/BWOPMODE/ > -#define _20MHZBW BIT(2) > - > -/BACAMCMD/ > -#define _BACAM_POLL BIT(31) > -#define _BACAM_RST BIT(17) > -#define _BACAM_RW BIT(16) > -#define _BACAM_ADDR_MSK 0x0000007F > -#define _BACAM_ADDR_SHT 0 > - > -/LBDLY/ > -#define _LBDLY_MSK 0x1F > - > -/FWDLY/ > -#define _FWDLY_MSK 0x0F > - > -/RXERR_RPT/ > -#define _RXERR_RPT_SEL_MSK 0xF0000000 > -#define _RXERR_RPT_SEL_SHT 28 > -#define _RPT_CNT_MSK 0x000FFFFF > -#define _RPT_CNT_SHT 0 > - > -#endif /RTL8712_WMAC_BITDEF_H/ > - > diff --git a/drivers/staging/rtl8712/rtl8712_wmac_regdef.h b/drivers/staging/rtl8712/rtl8712_wmac_regdef.h > deleted file mode 100644 > index dfe3e9fbed43..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_wmac_regdef.h > +++ /dev/null > @@ -1,36 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef RTL8712_WMAC_REGDEF_H > -#define RTL8712_WMAC_REGDEF_H > - > -#define NAVCTRL (RTL8712_WMAC_ + 0x00) > -#define BWOPMODE (RTL8712_WMAC_ + 0x03) > -#define BACAMCMD (RTL8712_WMAC_ + 0x04) > -#define BACAMCONTENT (RTL8712_WMAC_ + 0x08) > -#define LBDLY (RTL8712_WMAC_ + 0x10) > -#define FWDLY (RTL8712_WMAC_ + 0x11) > -#define HWPC_RX_CTRL (RTL8712_WMAC_ + 0x18) > -#define MQ (RTL8712_WMAC_ + 0x20) > -#define MA (RTL8712_WMAC_ + 0x22) > -#define MS (RTL8712_WMAC_ + 0x24) > -#define CLM_RESULT (RTL8712_WMAC_ + 0x27) > -#define NHM_RPI_CNT (RTL8712_WMAC_ + 0x28) > -#define RXERR_RPT (RTL8712_WMAC_ + 0x30) > -#define NAV_PROT_LEN (RTL8712_WMAC_ + 0x34) > -#define CFEND_TH (RTL8712_WMAC_ + 0x36) > -#define AMPDU_MIN_SPACE (RTL8712_WMAC_ + 0x37) > -#define TXOP_STALL_CTRL (RTL8712_WMAC_ + 0x38) > - > -#endif /RTL8712_WMAC_REGDEF_H/ > - > diff --git a/drivers/staging/rtl8712/rtl8712_xmit.c b/drivers/staging/rtl8712/rtl8712_xmit.c > deleted file mode 100644 > index 12f2fdb1b3cb..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_xmit.c > +++ /dev/null > @@ -1,732 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/** > - * rtl8712_xmit.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RTL8712_XMIT_C > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "wifi.h" > -#include "osdep_intf.h" > -#include "usb_ops.h" > - > -static void dump_xframe(struct _adapter *padapter, > - struct xmit_frame *pxmitframe); > -static void update_txdesc(struct xmit_frame *pxmitframe, uint *pmem, int sz); > - > -sint _r8712_init_hw_txqueue(struct hw_txqueue *phw_txqueue, u8 ac_tag) > -{ > - phw_txqueue->ac_tag = ac_tag; > > - switch (ac_tag) { > - case BE_QUEUE_INX: > - phw_txqueue->ff_hwaddr = RTL8712_DMA_BEQ; > > - break; > - case BK_QUEUE_INX: > - phw_txqueue->ff_hwaddr = RTL8712_DMA_BKQ; > > - break; > - case VI_QUEUE_INX: > - phw_txqueue->ff_hwaddr = RTL8712_DMA_VIQ; > > - break; > - case VO_QUEUE_INX: > - phw_txqueue->ff_hwaddr = RTL8712_DMA_VOQ; > > - break; > - case BMC_QUEUE_INX: > - phw_txqueue->ff_hwaddr = RTL8712_DMA_BEQ; > > - break; > - } > - return _SUCCESS; > -} > - > -int r8712_txframes_sta_ac_pending(struct _adapter *padapter, > - struct pkt_attrib *pattrib) > -{ > - struct sta_info *psta; > - struct tx_servq *ptxservq; > - int priority = pattrib->priority; > > - > - psta = pattrib->psta; > > - switch (priority) { > - case 1: > - case 2: > - ptxservq = &psta->sta_xmitpriv.bk_q; > > - break; > - case 4: > - case 5: > - ptxservq = &psta->sta_xmitpriv.vi_q; > > - break; > - case 6: > - case 7: > - ptxservq = &psta->sta_xmitpriv.vo_q; > > - break; > - case 0: > - case 3: > - default: > - ptxservq = &psta->sta_xmitpriv.be_q; > > - break; > - } > - return ptxservq->qcnt; > > -} > - > -static u32 get_ff_hwaddr(struct xmit_frame *pxmitframe) > -{ > - u32 addr = 0; > - struct pkt_attrib *pattrib = &pxmitframe->attrib; > > - struct _adapter *padapter = pxmitframe->padapter; > > - struct dvobj_priv *pdvobj = &padapter->dvobjpriv; > > - > - if (pxmitframe->frame_tag == TXAGG_FRAMETAG) { > > - addr = RTL8712_DMA_H2CCMD; > - } else if (pxmitframe->frame_tag == MGNT_FRAMETAG) { > > - addr = RTL8712_DMA_MGTQ; > - } else if (pdvobj->nr_endpoint == 6) { > > - switch (pattrib->priority) { > > - case 0: > - case 3: > - addr = RTL8712_DMA_BEQ; > - break; > - case 1: > - case 2: > - addr = RTL8712_DMA_BKQ; > - break; > - case 4: > - case 5: > - addr = RTL8712_DMA_VIQ; > - break; > - case 6: > - case 7: > - addr = RTL8712_DMA_VOQ; > - break; > - case 0x10: > - case 0x11: > - case 0x12: > - case 0x13: > - addr = RTL8712_DMA_H2CCMD; > - break; > - default: > - addr = RTL8712_DMA_BEQ; > - break; > - } > - } else if (pdvobj->nr_endpoint == 4) { > > - switch (pattrib->qsel) { > > - case 0: > - case 3: > - case 1: > - case 2: > - addr = RTL8712_DMA_BEQ;/RTL8712_EP_LO;/ > - break; > - case 4: > - case 5: > - case 6: > - case 7: > - addr = RTL8712_DMA_VOQ;/RTL8712_EP_HI;/ > - break; > - case 0x10: > - case 0x11: > - case 0x12: > - case 0x13: > - addr = RTL8712_DMA_H2CCMD; > - break; > - default: > - addr = RTL8712_DMA_BEQ;/RTL8712_EP_LO;/ > - break; > - } > - } > - return addr; > -} > - > -static struct xmit_frame *dequeue_one_xmitframe(struct xmit_priv *pxmitpriv, > - struct hw_xmit *phwxmit, struct tx_servq *ptxservq, > - struct __queue *pframe_queue) > -{ > - struct list_head *xmitframe_plist, *xmitframe_phead; > - struct xmit_frame *pxmitframe = NULL; > - > - xmitframe_phead = &pframe_queue->queue; > > - xmitframe_plist = xmitframe_phead->next; > > - if (!end_of_queue_search(xmitframe_phead, xmitframe_plist)) { > - pxmitframe = container_of(xmitframe_plist, > - struct xmit_frame, list); > - list_del_init(&pxmitframe->list); > > - ptxservq->qcnt--; > > - phwxmit->txcmdcnt++; > > - } > - return pxmitframe; > -} > - > -static struct xmit_frame *dequeue_xframe_ex(struct xmit_priv *pxmitpriv, > - struct hw_xmit *phwxmit_i, sint entry) > -{ > - unsigned long irqL0; > - struct list_head *sta_plist, *sta_phead; > - struct hw_xmit *phwxmit; > - struct tx_servq *ptxservq = NULL; > - struct __queue *pframe_queue = NULL; > - struct xmit_frame *pxmitframe = NULL; > - int i, inx[4]; > - int j, acirp_cnt[4]; > - > - /entry indx: 0->vo, 1->vi, 2->be, 3->bk./ > > - inx[0] = 0; acirp_cnt[0] = pxmitpriv->voq_cnt; > > - inx[1] = 1; acirp_cnt[1] = pxmitpriv->viq_cnt; > > - inx[2] = 2; acirp_cnt[2] = pxmitpriv->beq_cnt; > > - inx[3] = 3; acirp_cnt[3] = pxmitpriv->bkq_cnt; > > - for (i = 0; i < 4; i++) { > - for (j = i + 1; j < 4; j++) { > - if (acirp_cnt[j] < acirp_cnt[i]) { > - swap(acirp_cnt[i], acirp_cnt[j]); > - swap(inx[i], inx[j]); > - } > - } > - } > - spin_lock_irqsave(&pxmitpriv->lock, irqL0); > > - for (i = 0; i < entry; i++) { > - phwxmit = phwxmit_i + inx[i]; > - sta_phead = &phwxmit->sta_queue->queue; > > - sta_plist = sta_phead->next; > > - while (!end_of_queue_search(sta_phead, sta_plist)) { > - ptxservq = container_of(sta_plist, struct tx_servq, tx_pending); > - pframe_queue = &ptxservq->sta_pending; > > - pxmitframe = dequeue_one_xmitframe(pxmitpriv, phwxmit, ptxservq, > - pframe_queue); > - if (pxmitframe) { > - phwxmit->accnt--; > > - goto exit_dequeue_xframe_ex; > - } > - sta_plist = sta_plist->next; > > - /Remove sta node when there are no pending packets./ > - if (list_empty(&pframe_queue->queue)) { > > - /* must be done after sta_plist->next > > - * and before break > - */ > - list_del_init(&ptxservq->tx_pending); > > - } > - } > - } > -exit_dequeue_xframe_ex: > - spin_unlock_irqrestore(&pxmitpriv->lock, irqL0); > > - return pxmitframe; > -} > - > -void r8712_do_queue_select(struct _adapter *padapter, struct pkt_attrib *pattrib) > -{ > - unsigned int qsel = 0; > - struct dvobj_priv *pdvobj = &padapter->dvobjpriv; > > - > - if (pdvobj->nr_endpoint == 6) { > > - qsel = (unsigned int)pattrib->priority; > > - } else if (pdvobj->nr_endpoint == 4) { > > - qsel = (unsigned int)pattrib->priority; > > - if (qsel == 0 || qsel == 3) > - qsel = 3; > - else if (qsel == 1 || qsel == 2) > - qsel = 1; > - else if (qsel == 4 || qsel == 5) > - qsel = 5; > - else if (qsel == 6 || qsel == 7) > - qsel = 7; > - else > - qsel = 3; > - } > - pattrib->qsel = qsel; > > -} > - > -#ifdef CONFIG_R8712_TX_AGGR > -void r8712_construct_txaggr_cmd_desc(struct xmit_buf *pxmitbuf) > -{ > - struct tx_desc *ptx_desc = (struct tx_desc *)pxmitbuf->pbuf; > > - > - /* Fill up TxCmd Descriptor according as USB FW Tx Aggregation info./ > - / dw0 */ > - ptx_desc->txdw0 = cpu_to_le32(CMD_HDR_SZ & 0xffff); > > - ptx_desc->txdw0 |= > > - cpu_to_le32(((TXDESC_SIZE + OFFSET_SZ) << OFFSET_SHT) & > - 0x00ff0000); > - ptx_desc->txdw0 |= cpu_to_le32(OWN | FSG | LSG); > > - > - /* dw1 */ > - ptx_desc->txdw1 |= cpu_to_le32((0x13 << QSEL_SHT) & 0x00001f00); > > -} > - > -void r8712_construct_txaggr_cmd_hdr(struct xmit_buf *pxmitbuf) > -{ > - struct xmit_frame *pxmitframe = (struct xmit_frame *) > - pxmitbuf->priv_data; > > - struct _adapter *padapter = pxmitframe->padapter; > > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - struct cmd_hdr *pcmd_hdr = (struct cmd_hdr *) > - (pxmitbuf->pbuf + TXDESC_SIZE); > > - > - /* Fill up Cmd Header for USB FW Tx Aggregation./ > - / dw0 */ > - pcmd_hdr->cmd_dw0 = cpu_to_le32((GEN_CMD_CODE(_AMSDU_TO_AMPDU) << 16) | > > - (pcmdpriv->cmd_seq << 24)); > > - pcmdpriv->cmd_seq++; > > -} > - > -void r8712_append_mpdu_unit(struct xmit_buf *pxmitbuf, > - struct xmit_frame *pxmitframe) > -{ > - struct _adapter *padapter = pxmitframe->padapter; > > - struct tx_desc *ptx_desc = (struct tx_desc *)pxmitbuf->pbuf; > > - int last_txcmdsz = 0; > - int padding_sz = 0; > - > - /* 802.3->802.11 converter */ > > - r8712_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe); > > - /* free skb struct */ > - r8712_xmit_complete(padapter, pxmitframe); > - if (pxmitframe->attrib.ether_type != 0x0806) { > > - if ((pxmitframe->attrib.ether_type != 0x888e) && > > - (pxmitframe->attrib.dhcp_pkt != 1)) { > > - r8712_issue_addbareq_cmd(padapter, pxmitframe->attrib.priority); > > - } > - } > - pxmitframe->last[0] = 1; > > - update_txdesc(pxmitframe, (uint *)(pxmitframe->buf_addr), pxmitframe->attrib.last_txcmdsz); > > - /*padding zero */ > - last_txcmdsz = pxmitframe->attrib.last_txcmdsz; > > - padding_sz = (8 - (last_txcmdsz % 8)); > - if ((last_txcmdsz % 8) != 0) { > - int i; > - > - for (i = 0; i < padding_sz; i++) > - *(pxmitframe->buf_addr + TXDESC_SIZE + last_txcmdsz + > > - i) = 0; > - } > - /* Add the new mpdu's length */ > - ptx_desc->txdw0 = cpu_to_le32((ptx_desc->txdw0 & 0xffff0000) | > > - ((ptx_desc->txdw0 & 0x0000ffff) + > > - ((TXDESC_SIZE + last_txcmdsz + padding_sz) & > - 0x0000ffff))); > -} > - > -void r8712_xmitframe_aggr_1st(struct xmit_buf *pxmitbuf, > - struct xmit_frame pxmitframe) > -{ > - / linux complete context doesn't need to protect */ > - pxmitframe->pxmitbuf = pxmitbuf; > > - pxmitbuf->priv_data = pxmitframe; > > - pxmitframe->pxmit_urb[0] = pxmitbuf->pxmit_urb[0]; > > - /* buffer addr assoc */ > - pxmitframe->buf_addr = pxmitbuf->pbuf + TXDESC_SIZE + CMD_HDR_SZ; > > - /*RTL8712_DMA_H2CCMD */ > - r8712_construct_txaggr_cmd_desc(pxmitbuf); > - r8712_construct_txaggr_cmd_hdr(pxmitbuf); > - r8712_append_mpdu_unit(pxmitbuf, pxmitframe); > - pxmitbuf->aggr_nr = 1; > > -} > - > -u16 r8712_xmitframe_aggr_next(struct xmit_buf *pxmitbuf, struct xmit_frame *pxmitframe) > -{ > - pxmitframe->pxmitbuf = pxmitbuf; > > - pxmitbuf->priv_data = pxmitframe; > > - pxmitframe->pxmit_urb[0] = pxmitbuf->pxmit_urb[0]; > > - /* buffer addr assoc */ > - pxmitframe->buf_addr = pxmitbuf->pbuf + TXDESC_SIZE + > > - (((struct tx_desc *)pxmitbuf->pbuf)->txdw0 & 0x0000ffff); > > - r8712_append_mpdu_unit(pxmitbuf, pxmitframe); > - r8712_free_xmitframe_ex(&pxmitframe->padapter->xmitpriv, > > - pxmitframe); > - pxmitbuf->aggr_nr++; > > - > - return TXDESC_SIZE + > - (((struct tx_desc *)pxmitbuf->pbuf)->txdw0 & 0x0000ffff); > > -} > - > -void r8712_dump_aggr_xframe(struct xmit_buf *pxmitbuf, > - struct xmit_frame *pxmitframe) > -{ > - struct _adapter *padapter = pxmitframe->padapter; > > - struct dvobj_priv *pdvobj = &padapter->dvobjpriv; > > - struct tx_desc *ptxdesc = pxmitbuf->pbuf; > > - struct cmd_hdr *pcmd_hdr = (struct cmd_hdr *) > - (pxmitbuf->pbuf + TXDESC_SIZE); > > - u16 total_length = (u16)(ptxdesc->txdw0 & 0xffff); > > - > - /* use 1st xmitframe as media */ > - xmitframe_xmitbuf_attach(pxmitframe, pxmitbuf); > - pcmd_hdr->cmd_dw0 = cpu_to_le32(((total_length - CMD_HDR_SZ) & > > - 0x0000ffff) | (pcmd_hdr->cmd_dw0 & > > - 0xffff0000)); > - > - /* urb length in cmd_dw1 */ > - pcmd_hdr->cmd_dw1 = cpu_to_le32((pxmitbuf->aggr_nr & 0xff) | > > - ((total_length + TXDESC_SIZE) << 16)); > - pxmitframe->last[0] = 1; > > - pxmitframe->bpending[0] = false; > > - pxmitframe->mem_addr = pxmitbuf->pbuf; > > - > - if ((pdvobj->ishighspeed && ((total_length + TXDESC_SIZE) % 0x200) == 0) || > > - ((!pdvobj->ishighspeed && ((total_length + TXDESC_SIZE) % > > - 0x40) == 0))) { > - ptxdesc->txdw0 |= cpu_to_le32 > > - (((TXDESC_SIZE + OFFSET_SZ + 8) << OFFSET_SHT) & > - 0x00ff0000); > - /32 bytes for TX Desc + 8 bytes pending/ > - } else { > - ptxdesc->txdw0 |= cpu_to_le32 > > - (((TXDESC_SIZE + OFFSET_SZ) << OFFSET_SHT) & > - 0x00ff0000); > - /default = 32 bytes for TX Desc/ > - } > - r8712_write_port(pxmitframe->padapter, RTL8712_DMA_H2CCMD, total_length + TXDESC_SIZE, > > - (u8 *)pxmitframe); > -} > - > -#endif > - > -static void update_txdesc(struct xmit_frame *pxmitframe, uint *pmem, int sz) > -{ > - uint qsel; > - struct _adapter *padapter = pxmitframe->padapter; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct qos_priv *pqospriv = &pmlmepriv->qospriv; > > - struct security_priv *psecuritypriv = &padapter->securitypriv; > > - struct pkt_attrib *pattrib = &pxmitframe->attrib; > > - struct tx_desc *ptxdesc = (struct tx_desc *)pmem; > - struct dvobj_priv *pdvobj = &padapter->dvobjpriv; > > -#ifdef CONFIG_R8712_TX_AGGR > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > -#endif > - u8 blnSetTxDescOffset; > - bool bmcst = is_multicast_ether_addr(pattrib->ra); > > - struct ht_priv *phtpriv = &pmlmepriv->htpriv; > > - struct tx_desc txdesc_mp; > - > - memcpy(&txdesc_mp, ptxdesc, sizeof(struct tx_desc)); > - memset(ptxdesc, 0, sizeof(struct tx_desc)); > - /* offset 0 */ > - ptxdesc->txdw0 |= cpu_to_le32(sz & 0x0000ffff); > > - if (pdvobj->ishighspeed) { > > - if (((sz + TXDESC_SIZE) % 512) == 0) > - blnSetTxDescOffset = 1; > - else > - blnSetTxDescOffset = 0; > - } else { > - if (((sz + TXDESC_SIZE) % 64) == 0) > - blnSetTxDescOffset = 1; > - else > - blnSetTxDescOffset = 0; > - } > - if (blnSetTxDescOffset) { > - /* 32 bytes for TX Desc + 8 bytes pending */ > - ptxdesc->txdw0 |= cpu_to_le32(((TXDESC_SIZE + OFFSET_SZ + 8) << > > - OFFSET_SHT) & 0x00ff0000); > - } else { > - /* default = 32 bytes for TX Desc */ > - ptxdesc->txdw0 |= cpu_to_le32(((TXDESC_SIZE + OFFSET_SZ) << > > - OFFSET_SHT) & 0x00ff0000); > - } > - ptxdesc->txdw0 |= cpu_to_le32(OWN | FSG | LSG); > > - if (pxmitframe->frame_tag == DATA_FRAMETAG) { > > - /* offset 4 */ > - ptxdesc->txdw1 |= cpu_to_le32((pattrib->mac_id) & 0x1f); > > - > -#ifdef CONFIG_R8712_TX_AGGR > - /* dirty workaround, need to check if it is aggr cmd. */ > - if ((u8 *)pmem != (u8 *)pxmitframe->pxmitbuf->pbuf) { > > - ptxdesc->txdw0 |= cpu_to_le32 > > - ((0x3 << TYPE_SHT) & TYPE_MSK); > - qsel = (uint)(pattrib->qsel & 0x0000001f); > > - if (qsel == 2) > - qsel = 0; > - ptxdesc->txdw1 |= cpu_to_le32 > > - ((qsel << QSEL_SHT) & 0x00001f00); > - ptxdesc->txdw2 = cpu_to_le32 > > - ((qsel << RTS_RC_SHT) & 0x001f0000); > - ptxdesc->txdw6 |= cpu_to_le32 > > - ((0x5 << RSVD6_SHT) & RSVD6_MSK); > - } else { > - ptxdesc->txdw0 |= cpu_to_le32 > > - ((0x3 << TYPE_SHT) & TYPE_MSK); > - ptxdesc->txdw1 |= cpu_to_le32 > > - ((0x13 << QSEL_SHT) & 0x00001f00); > - qsel = (uint)(pattrib->qsel & 0x0000001f); > > - if (qsel == 2) > - qsel = 0; > - ptxdesc->txdw2 = cpu_to_le32 > > - ((qsel << RTS_RC_SHT) & 0x0001f000); > - ptxdesc->txdw7 |= cpu_to_le32 > > - (pcmdpriv->cmd_seq << 24); > > - pcmdpriv->cmd_seq++; > > - } > - pattrib->qsel = 0x13; > > -#else > - qsel = (uint)(pattrib->qsel & 0x0000001f); > > - ptxdesc->txdw1 |= cpu_to_le32((qsel << QSEL_SHT) & 0x00001f00); > > -#endif > - if (!pqospriv->qos_option) > > - ptxdesc->txdw1 |= cpu_to_le32(BIT(16));/Non-QoS/ > > - if ((pattrib->encrypt > 0) && !pattrib->bswenc) { > > - switch (pattrib->encrypt) { /SEC_TYPE/ > > - case WEP40: > - case WEP104: > - ptxdesc->txdw1 |= cpu_to_le32((0x01 << 22) & > > - 0x00c00000); > - /KEY_ID when WEP is used;/ > - ptxdesc->txdw1 |= > > - cpu_to_le32((psecuritypriv->PrivacyKeyIndex << 17) & > > - 0x00060000); > - break; > - case TKIP: > - case TKIP_WTMIC: > - ptxdesc->txdw1 |= cpu_to_le32((0x02 << 22) & > > - 0x00c00000); > - break; > - case AES: > - ptxdesc->txdw1 |= cpu_to_le32((0x03 << 22) & > > - 0x00c00000); > - break; > - case NO_PRIVACY: > - default: > - break; > - } > - } > - /offset 8/ > - if (bmcst) > - ptxdesc->txdw2 |= cpu_to_le32(BMC); > > - > - /offset 12/ > - /* f/w will increase the seqnum by itself, driver pass the > - * correct priority to fw. > - * fw will check the correct priority for increasing the > - * seqnum per tid. about usb using 4-endpoint, qsel points out > - * the correct mapping between AC&Endpoint, > - * the purpose is that correct mapping lets the MAC release > - * the AC Queue list correctly. > - */ > - ptxdesc->txdw3 = cpu_to_le32((pattrib->priority << SEQ_SHT) & > > - 0x0fff0000); > - if ((pattrib->ether_type != 0x888e) && > > - (pattrib->ether_type != 0x0806) && > > - (pattrib->dhcp_pkt != 1)) { > > - /Not EAP & ARP type data packet/ > - if (phtpriv->ht_option == 1) { /B/G/N Mode/ > > - if (!phtpriv->ampdu_enable) > > - ptxdesc->txdw2 |= cpu_to_le32(BK); > > - } > - } else { > - /* EAP data packet and ARP packet. > - * Use the 1M data rate to send the EAP/ARP packet. > - * This will maybe make the handshake smooth. > - */ > - /driver uses data rate/ > - ptxdesc->txdw4 = cpu_to_le32(0x80000000); > > - ptxdesc->txdw5 = cpu_to_le32(0x001f8000);/1M/ > > - } > - if (pattrib->pctrl == 1) { /* mp tx packets */ > > - struct tx_desc ptxdesc_mp; > - > - ptxdesc_mp = &txdesc_mp; > - / offset 8 */ > - ptxdesc->txdw2 = ptxdesc_mp->txdw2; > > - if (bmcst) > - ptxdesc->txdw2 |= cpu_to_le32(BMC); > > - ptxdesc->txdw2 |= cpu_to_le32(BK); > > - /* offset 16 */ > - ptxdesc->txdw4 = ptxdesc_mp->txdw4; > > - /* offset 20 */ > - ptxdesc->txdw5 = ptxdesc_mp->txdw5; > > - pattrib->pctrl = 0;/* reset to zero; */ > > - } > - } else if (pxmitframe->frame_tag == MGNT_FRAMETAG) { > > - /* offset 4 / > - / CAM_ID(MAC_ID), default=5; */ > - ptxdesc->txdw1 |= cpu_to_le32((0x05) & 0x1f); > > - qsel = (uint)(pattrib->qsel & 0x0000001f); > > - ptxdesc->txdw1 |= cpu_to_le32((qsel << QSEL_SHT) & 0x00001f00); > > - ptxdesc->txdw1 |= cpu_to_le32(BIT(16));/* Non-QoS */ > > - /* offset 8 */ > - if (bmcst) > - ptxdesc->txdw2 |= cpu_to_le32(BMC); > > - /* offset 12 / > - / f/w will increase the seqnum by itself, driver pass the > - * correct priority to fw. > - * fw will check the correct priority for increasing the seqnum > - * per tid. about usb using 4-endpoint, qsel points out the > - * correct mapping between AC&Endpoint, > - * the purpose is that correct mapping let the MAC releases > - * the AC Queue list correctly. > - */ > - ptxdesc->txdw3 = cpu_to_le32((pattrib->priority << SEQ_SHT) & > > - 0x0fff0000); > - /* offset 16 */ > - ptxdesc->txdw4 = cpu_to_le32(0x80002040);/gtest/ > > - /* offset 20 / > - ptxdesc->txdw5 = cpu_to_le32(0x001f8000);/ gtest 1M */ > > - } else if (pxmitframe->frame_tag == TXAGG_FRAMETAG) { > > - /* offset 4 */ > - qsel = 0x13; > - ptxdesc->txdw1 |= cpu_to_le32((qsel << QSEL_SHT) & 0x00001f00); > > - } else { > - /* offset 4 */ > - qsel = (uint)(pattrib->priority & 0x0000001f); > > - ptxdesc->txdw1 |= cpu_to_le32((qsel << QSEL_SHT) & 0x00001f00); > > - /offset 8/ > - /offset 12/ > - ptxdesc->txdw3 = cpu_to_le32((pattrib->seqnum << SEQ_SHT) & > > - 0x0fff0000); > - /offset 16/ > - ptxdesc->txdw4 = cpu_to_le32(0x80002040);/gtest/ > > - /offset 20/ > - ptxdesc->txdw5 = cpu_to_le32(0x001f9600);/gtest/ > > - } > -} > - > -int r8712_xmitframe_complete(struct _adapter *padapter, > - struct xmit_priv *pxmitpriv, > - struct xmit_buf *pxmitbuf) > -{ > - struct hw_xmit *phwxmits; > - sint hwentry; > - struct xmit_frame *pxmitframe = NULL; > -#ifdef CONFIG_R8712_TX_AGGR > - struct xmit_frame *p2ndxmitframe = NULL; > -#else > - int res = _SUCCESS; > -#endif > - > - phwxmits = pxmitpriv->hwxmits; > > - hwentry = pxmitpriv->hwxmit_entry; > > - if (!pxmitbuf) { > - pxmitbuf = r8712_alloc_xmitbuf(pxmitpriv); > - if (!pxmitbuf) > - return false; > -#ifdef CONFIG_R8712_TX_AGGR > - pxmitbuf->aggr_nr = 0; > > -#endif > - } > - /* 1st frame dequeued / > - pxmitframe = dequeue_xframe_ex(pxmitpriv, phwxmits, hwentry); > - / need to remember the 1st frame / > - if (pxmitframe) { > -#ifdef CONFIG_R8712_TX_AGGR > - / 1. dequeue 2nd frame > - * 2. aggr if 2nd xframe is dequeued, else dump directly > - */ > - if (AGGR_NR_HIGH_BOUND > 1) > > - p2ndxmitframe = dequeue_xframe_ex(pxmitpriv, phwxmits, hwentry); > - if (pxmitframe->frame_tag != DATA_FRAMETAG) { > > - r8712_free_xmitbuf(pxmitpriv, pxmitbuf); > - return false; > - } > - if (p2ndxmitframe) > - if (p2ndxmitframe->frame_tag != DATA_FRAMETAG) { > > - r8712_free_xmitbuf(pxmitpriv, pxmitbuf); > - return false; > - } > - r8712_xmitframe_aggr_1st(pxmitbuf, pxmitframe); > - if (p2ndxmitframe) { > - u16 total_length; > - > - total_length = r8712_xmitframe_aggr_next(pxmitbuf, p2ndxmitframe); > - do { > - p2ndxmitframe = dequeue_xframe_ex(pxmitpriv, phwxmits, hwentry); > - if (p2ndxmitframe) > - total_length = > - r8712_xmitframe_aggr_next(pxmitbuf, p2ndxmitframe); > - else > - break; > - } while (total_length <= 0x1800 && > - pxmitbuf->aggr_nr <= AGGR_NR_HIGH_BOUND); > > - } > - if (pxmitbuf->aggr_nr > 0) > > - r8712_dump_aggr_xframe(pxmitbuf, pxmitframe); > - > -#else > - > - xmitframe_xmitbuf_attach(pxmitframe, pxmitbuf); > - if (pxmitframe->frame_tag == DATA_FRAMETAG) { > > - if (pxmitframe->attrib.priority <= 15) > > - res = r8712_xmitframe_coalesce(padapter, pxmitframe->pkt, > > - pxmitframe); > - /* always return ndis_packet after > - * r8712_xmitframe_coalesce > - / > - r8712_xmit_complete(padapter, pxmitframe); > - } > - if (res == _SUCCESS) > - dump_xframe(padapter, pxmitframe); > - else > - r8712_free_xmitframe_ex(pxmitpriv, pxmitframe); > -#endif > - > - } else { / pxmitframe == NULL && p2ndxmitframe == NULL */ > - r8712_free_xmitbuf(pxmitpriv, pxmitbuf); > - return false; > - } > - return true; > -} > - > -static void dump_xframe(struct _adapter *padapter, > - struct xmit_frame *pxmitframe) > -{ > - int t, sz, w_sz; > - u8 *mem_addr; > - u32 ff_hwaddr; > - struct pkt_attrib *pattrib = &pxmitframe->attrib; > > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - struct security_priv *psecuritypriv = &padapter->securitypriv; > > - > - if (pxmitframe->attrib.ether_type != 0x0806) { > > - if (pxmitframe->attrib.ether_type != 0x888e) > > - r8712_issue_addbareq_cmd(padapter, pattrib->priority); > > - } > - mem_addr = pxmitframe->buf_addr; > > - for (t = 0; t < pattrib->nr_frags; t++) { > > - if (t != (pattrib->nr_frags - 1)) { > > - sz = pxmitpriv->frag_len; > > - sz = sz - 4 - (psecuritypriv->sw_encrypt ? 0 : > > - pattrib->icv_len); > > - pxmitframe->last[t] = 0; > > - } else { > - sz = pattrib->last_txcmdsz; > > - pxmitframe->last[t] = 1; > > - } > - update_txdesc(pxmitframe, (uint *)mem_addr, sz); > - w_sz = sz + TXDESC_SIZE; > - pxmitframe->mem_addr = mem_addr; > > - pxmitframe->bpending[t] = false; > > - ff_hwaddr = get_ff_hwaddr(pxmitframe); > -#ifdef CONFIG_R8712_TX_AGGR > - r8712_write_port(padapter, RTL8712_DMA_H2CCMD, w_sz, > - (unsigned char *)pxmitframe); > -#else > - r8712_write_port(padapter, ff_hwaddr, w_sz, > - (unsigned char *)pxmitframe); > -#endif > - mem_addr += w_sz; > - mem_addr = (u8 *)RND4(((addr_t)(mem_addr))); > - } > -} > - > -void r8712_xmit_direct(struct _adapter *padapter, struct xmit_frame *pxmitframe) > -{ > - int res; > - > - res = r8712_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe); > > - pxmitframe->pkt = NULL; > > - if (res == _SUCCESS) > - dump_xframe(padapter, pxmitframe); > -} > - > -int r8712_xmit_enqueue(struct _adapter *padapter, struct xmit_frame *pxmitframe) > -{ > - if (r8712_xmit_classifier(padapter, pxmitframe)) { > - pxmitframe->pkt = NULL; > > - return _FAIL; > - } > - return _SUCCESS; > -} > diff --git a/drivers/staging/rtl8712/rtl8712_xmit.h b/drivers/staging/rtl8712/rtl8712_xmit.h > deleted file mode 100644 > index 5cd651a0de75..000000000000 > --- a/drivers/staging/rtl8712/rtl8712_xmit.h > +++ /dev/null > @@ -1,108 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - *****************************************************************************/ > -#ifndef RTL8712_XMIT_H > -#define RTL8712_XMIT_H > - > -#define HWXMIT_ENTRY 4 > - > -#define VO_QUEUE_INX 0 > -#define VI_QUEUE_INX 1 > -#define BE_QUEUE_INX 2 > -#define BK_QUEUE_INX 3 > -#define TS_QUEUE_INX 4 > -#define MGT_QUEUE_INX 5 > -#define BMC_QUEUE_INX 6 > -#define BCN_QUEUE_INX 7 > - > -#define HW_QUEUE_ENTRY 8 > - > -#define TXDESC_SIZE 32 > -#define TXDESC_OFFSET TXDESC_SIZE > - > -#define NR_AMSDU_XMITFRAME 8 > -#define NR_TXAGG_XMITFRAME 8 > - > -#define MAX_AMSDU_XMITBUF_SZ 8704 > -#define MAX_TXAGG_XMITBUF_SZ 16384 /16k/ > - > -#define tx_cmd tx_desc > - > -/ > - *defined for TX DESC Operation > - */ > - > -#define MAX_TID (15) > - > -/OFFSET 0/ > -#define OFFSET_SZ (0) > -#define OFFSET_SHT (16) > -#define OWN BIT(31) > -#define FSG BIT(27) > -#define LSG BIT(26) > -#define TYPE_SHT (24) > -#define TYPE_MSK (0x03000000) > - > -/OFFSET 4/ > -#define PKT_OFFSET_SZ (0) > -#define QSEL_SHT (8) > -#define HWPC BIT(31) > - > -/OFFSET 8/ > -#define BMC BIT(7) > -#define BK BIT(30) > -#define AGG_EN BIT(29) > -#define RTS_RC_SHT (16) > - > -/OFFSET 12/ > -#define SEQ_SHT (16) > - > -/OFFSET 16/ > -#define TXBW BIT(18) > - > -/OFFSET 20/ > -#define DISFB BIT(15) > -#define RSVD6_MSK (0x00E00000) > -#define RSVD6_SHT (21) > - > -struct tx_desc { > - /DWORD 0/ > - __le32 txdw0; > - __le32 txdw1; > - __le32 txdw2; > - __le32 txdw3; > - __le32 txdw4; > - __le32 txdw5; > - __le32 txdw6; > - __le32 txdw7; > -}; > - > -union txdesc { > - struct tx_desc txdesc; > - unsigned int value[TXDESC_SIZE >> 2]; > > -}; > - > -int r8712_xmitframe_complete(struct _adapter padapter, > - struct xmit_priv pxmitpriv, > - struct xmit_buf pxmitbuf); > -void r8712_do_queue_select(struct _adapter padapter, > - struct pkt_attrib pattrib); > - > -#ifdef CONFIG_R8712_TX_AGGR > -void r8712_xmitframe_aggr_1st(struct xmit_buf pxmitbuf, > - struct xmit_frame pxmitframe); > -void r8712_dump_aggr_xframe(struct xmit_buf pxmitbuf, > - struct xmit_frame pxmitframe); > -#endif > - > -#endif > diff --git a/drivers/staging/rtl8712/rtl871x_cmd.c b/drivers/staging/rtl8712/rtl871x_cmd.c > deleted file mode 100644 > index 21e00ec83a19..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_cmd.c > +++ /dev/null > @@ -1,750 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/********************************************************************* > - * rtl871x_cmd.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RTL871X_CMD_C > - > -#include <linux/compiler.h> > > -#include <linux/kernel.h> > > -#include <linux/errno.h> > > -#include <linux/slab.h> > > -#include <linux/module.h> > > -#include <linux/kref.h> > > -#include <linux/netdevice.h> > > -#include <linux/skbuff.h> > > -#include <linux/usb.h> > > -#include <linux/usb/ch9.h> > > -#include <linux/circ_buf.h> > > -#include <linux/uaccess.h> > > -#include <asm/byteorder.h> > > -#include <linux/atomic.h> > > -#include <linux/semaphore.h> > > -#include <linux/rtnetlink.h> > > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "recv_osdep.h" > -#include "mlme_osdep.h" > - > -/* > - * Caller and the r8712_cmd_thread can protect cmd_q by spin_lock. > - * No irqsave is necessary. > - */ > - > -int r8712_init_cmd_priv(struct cmd_priv *pcmdpriv) > -{ > - init_completion(&pcmdpriv->cmd_queue_comp); > > - init_completion(&pcmdpriv->terminate_cmdthread_comp); > > - > - _init_queue(&pcmdpriv->cmd_queue); > > - > - /* allocate DMA-able/Non-Page memory for cmd_buf and rsp_buf */ > - pcmdpriv->cmd_seq = 1; > > - pcmdpriv->cmd_allocated_buf = kmalloc(MAX_CMDSZ + CMDBUFF_ALIGN_SZ, > > - GFP_ATOMIC); > - if (!pcmdpriv->cmd_allocated_buf) > > - return -ENOMEM; > - pcmdpriv->cmd_buf = pcmdpriv->cmd_allocated_buf + CMDBUFF_ALIGN_SZ - > > - ((addr_t)(pcmdpriv->cmd_allocated_buf) & > > - (CMDBUFF_ALIGN_SZ - 1)); > - pcmdpriv->rsp_allocated_buf = kmalloc(MAX_RSPSZ + 4, GFP_ATOMIC); > > - if (!pcmdpriv->rsp_allocated_buf) { > > - kfree(pcmdpriv->cmd_allocated_buf); > > - pcmdpriv->cmd_allocated_buf = NULL; > > - return -ENOMEM; > - } > - pcmdpriv->rsp_buf = pcmdpriv->rsp_allocated_buf + 4 - > > - ((addr_t)(pcmdpriv->rsp_allocated_buf) & 3); > > - pcmdpriv->cmd_issued_cnt = 0; > > - pcmdpriv->cmd_done_cnt = 0; > > - pcmdpriv->rsp_cnt = 0; > > - return 0; > -} > - > -int r8712_init_evt_priv(struct evt_priv pevtpriv) > -{ > - / allocate DMA-able/Non-Page memory for cmd_buf and rsp_buf */ > - pevtpriv->event_seq = 0; > > - pevtpriv->evt_allocated_buf = kmalloc(MAX_EVTSZ + 4, GFP_ATOMIC); > > - > - if (!pevtpriv->evt_allocated_buf) > > - return -ENOMEM; > - pevtpriv->evt_buf = pevtpriv->evt_allocated_buf + 4 - > > - ((addr_t)(pevtpriv->evt_allocated_buf) & 3); > > - pevtpriv->evt_done_cnt = 0; > > - return 0; > -} > - > -void r8712_free_evt_priv(struct evt_priv *pevtpriv) > -{ > - kfree(pevtpriv->evt_allocated_buf); > > -} > - > -void r8712_free_cmd_priv(struct cmd_priv *pcmdpriv) > -{ > - if (pcmdpriv) { > - kfree(pcmdpriv->cmd_allocated_buf); > > - kfree(pcmdpriv->rsp_allocated_buf); > > - } > -} > - > -/* > - * Calling Context: > - * > - * r8712_enqueue_cmd can only be called between kernel thread, > - * since only spin_lock is used. > - * > - * ISR/Call-Back functions can't call this sub-function. > - * > - */ > - > -void r8712_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj) > -{ > - struct __queue *queue; > - unsigned long irqL; > - > - if (pcmdpriv->padapter->eeprompriv.bautoload_fail_flag) > > - return; > - if (!obj) > - return; > - queue = &pcmdpriv->cmd_queue; > > - spin_lock_irqsave(&queue->lock, irqL); > > - list_add_tail(&obj->list, &queue->queue); > > - spin_unlock_irqrestore(&queue->lock, irqL); > > - complete(&pcmdpriv->cmd_queue_comp); > > -} > - > -struct cmd_obj *r8712_dequeue_cmd(struct __queue *queue) > -{ > - unsigned long irqL; > - struct cmd_obj *obj; > - > - spin_lock_irqsave(&queue->lock, irqL); > > - obj = list_first_entry_or_null(&queue->queue, > > - struct cmd_obj, list); > - if (obj) > - list_del_init(&obj->list); > > - spin_unlock_irqrestore(&queue->lock, irqL); > > - return obj; > -} > - > -void r8712_enqueue_cmd_ex(struct cmd_priv *pcmdpriv, struct cmd_obj *obj) > -{ > - unsigned long irqL; > - struct __queue *queue; > - > - if (!obj) > - return; > - if (pcmdpriv->padapter->eeprompriv.bautoload_fail_flag) > > - return; > - queue = &pcmdpriv->cmd_queue; > > - spin_lock_irqsave(&queue->lock, irqL); > > - list_add_tail(&obj->list, &queue->queue); > > - spin_unlock_irqrestore(&queue->lock, irqL); > > - complete(&pcmdpriv->cmd_queue_comp); > > -} > - > -void r8712_free_cmd_obj(struct cmd_obj *pcmd) > -{ > - if ((pcmd->cmdcode != JoinBss_CMD) && > > - (pcmd->cmdcode != CreateBss_CMD)) > > - kfree(pcmd->parmbuf); > > - if (pcmd->rsp) { > > - if (pcmd->rspsz != 0) > > - kfree(pcmd->rsp); > > - } > - kfree(pcmd); > -} > - > -u8 r8712_sitesurvey_cmd(struct _adapter *padapter, > - struct ndis_802_11_ssid *pssid) > - __must_hold(&padapter->mlmepriv.lock) > > -{ > - struct cmd_obj *ph2c; > - struct sitesurvey_parm *psurveyPara; > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - > - ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); > - if (!ph2c) > - return _FAIL; > - psurveyPara = kmalloc(sizeof(*psurveyPara), GFP_ATOMIC); > - if (!psurveyPara) { > - kfree(ph2c); > - return _FAIL; > - } > - init_h2fwcmd_w_parm_no_rsp(ph2c, psurveyPara, > - GEN_CMD_CODE(_SiteSurvey)); > - psurveyPara->bsslimit = cpu_to_le32(48); > > - psurveyPara->passive_mode = cpu_to_le32(pmlmepriv->passive_mode); > > - psurveyPara->ss_ssidlen = 0; > > - memset(psurveyPara->ss_ssid, 0, IW_ESSID_MAX_SIZE + 1); > > - if (pssid && pssid->SsidLength) { > > - int len = min_t(int, pssid->SsidLength, IW_ESSID_MAX_SIZE); > > - > - memcpy(psurveyPara->ss_ssid, pssid->Ssid, len); > > - psurveyPara->ss_ssidlen = cpu_to_le32(len); > > - } > - set_fwstate(pmlmepriv, _FW_UNDER_SURVEY); > - r8712_enqueue_cmd(pcmdpriv, ph2c); > - mod_timer(&pmlmepriv->scan_to_timer, > > - jiffies + msecs_to_jiffies(SCANNING_TIMEOUT)); > - padapter->ledpriv.LedControlHandler(padapter, LED_CTL_SITE_SURVEY); > > - complete(&padapter->rx_filter_ready); > > - return _SUCCESS; > -} > - > -int r8712_setdatarate_cmd(struct _adapter *padapter, u8 *rateset) > -{ > - struct cmd_obj *ph2c; > - struct setdatarate_parm *pbsetdataratepara; > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - > - ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); > - if (!ph2c) > - return -ENOMEM; > - pbsetdataratepara = kmalloc(sizeof(*pbsetdataratepara), GFP_ATOMIC); > - if (!pbsetdataratepara) { > - kfree(ph2c); > - return -ENOMEM; > - } > - init_h2fwcmd_w_parm_no_rsp(ph2c, pbsetdataratepara, > - GEN_CMD_CODE(_SetDataRate)); > - pbsetdataratepara->mac_id = 5; > > - memcpy(pbsetdataratepara->datarates, rateset, NumRates); > > - r8712_enqueue_cmd(pcmdpriv, ph2c); > - return 0; > -} > - > -void r8712_set_chplan_cmd(struct _adapter *padapter, int chplan) > -{ > - struct cmd_obj *ph2c; > - struct SetChannelPlan_param *psetchplanpara; > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - > - ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); > - if (!ph2c) > - return; > - psetchplanpara = kmalloc(sizeof(*psetchplanpara), GFP_ATOMIC); > - if (!psetchplanpara) { > - kfree(ph2c); > - return; > - } > - init_h2fwcmd_w_parm_no_rsp(ph2c, psetchplanpara, GEN_CMD_CODE(_SetChannelPlan)); > - psetchplanpara->ChannelPlan = chplan; > > - r8712_enqueue_cmd(pcmdpriv, ph2c); > -} > - > -int r8712_setrfreg_cmd(struct _adapter *padapter, u8 offset, u32 val) > -{ > - struct cmd_obj *ph2c; > - struct writeRF_parm *pwriterfparm; > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - > - ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); > - if (!ph2c) > - return -ENOMEM; > - pwriterfparm = kmalloc(sizeof(*pwriterfparm), GFP_ATOMIC); > - if (!pwriterfparm) { > - kfree(ph2c); > - return -ENOMEM; > - } > - init_h2fwcmd_w_parm_no_rsp(ph2c, pwriterfparm, GEN_CMD_CODE(_SetRFReg)); > - pwriterfparm->offset = offset; > > - pwriterfparm->value = val; > > - r8712_enqueue_cmd(pcmdpriv, ph2c); > - return 0; > -} > - > -int r8712_getrfreg_cmd(struct _adapter *padapter, u8 offset, u8 *pval) > -{ > - struct cmd_obj *ph2c; > - struct readRF_parm *prdrfparm; > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - > - ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); > - if (!ph2c) > - return -ENOMEM; > - prdrfparm = kmalloc(sizeof(*prdrfparm), GFP_ATOMIC); > - if (!prdrfparm) { > - kfree(ph2c); > - return -ENOMEM; > - } > - INIT_LIST_HEAD(&ph2c->list); > > - ph2c->cmdcode = GEN_CMD_CODE(_GetRFReg); > > - ph2c->parmbuf = (unsigned char *)prdrfparm; > > - ph2c->cmdsz = sizeof(struct readRF_parm); > > - ph2c->rsp = pval; > > - ph2c->rspsz = sizeof(struct readRF_rsp); > > - prdrfparm->offset = offset; > > - r8712_enqueue_cmd(pcmdpriv, ph2c); > - return 0; > -} > - > -void r8712_getbbrfreg_cmdrsp_callback(struct _adapter *padapter, > - struct cmd_obj *pcmd) > -{ > - kfree(pcmd->parmbuf); > > - kfree(pcmd); > - padapter->mppriv.workparam.bcompleted = true; > > -} > - > -void r8712_readtssi_cmdrsp_callback(struct _adapter *padapter, struct cmd_obj *pcmd) > -{ > - kfree(pcmd->parmbuf); > > - kfree(pcmd); > - > - padapter->mppriv.workparam.bcompleted = true; > > -} > - > -int r8712_createbss_cmd(struct _adapter *padapter) > -{ > - struct cmd_obj *pcmd; > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - struct wlan_bssid_ex *pdev_network = > - &padapter->registrypriv.dev_network; > > - > - padapter->ledpriv.LedControlHandler(padapter, LED_CTL_START_TO_LINK); > > - pcmd = kmalloc(sizeof(*pcmd), GFP_ATOMIC); > - if (!pcmd) > - return -ENOMEM; > - INIT_LIST_HEAD(&pcmd->list); > > - pcmd->cmdcode = CreateBss_CMD; > > - pcmd->parmbuf = (unsigned char *)pdev_network; > > - pcmd->cmdsz = r8712_get_wlan_bssid_ex_sz(pdev_network); > > - pcmd->rsp = NULL; > > - pcmd->rspsz = 0; > > - /* notes: translate IELength & Length after assign to cmdsz; */ > - pdev_network->Length = pcmd->cmdsz; > > - pdev_network->IELength = pdev_network->IELength; > > - pdev_network->Ssid.SsidLength = pdev_network->Ssid.SsidLength; > > - r8712_enqueue_cmd(pcmdpriv, pcmd); > - return 0; > -} > - > -int r8712_joinbss_cmd(struct _adapter *padapter, struct wlan_network *pnetwork) > -{ > - struct wlan_bssid_ex *psecnetwork; > - struct cmd_obj *pcmd; > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct qos_priv *pqospriv = &pmlmepriv->qospriv; > > - struct security_priv *psecuritypriv = &padapter->securitypriv; > > - struct registry_priv *pregistrypriv = &padapter->registrypriv; > > - enum NDIS_802_11_NETWORK_INFRASTRUCTURE ndis_network_mode = > - pnetwork->network.InfrastructureMode; > > - > - padapter->ledpriv.LedControlHandler(padapter, LED_CTL_START_TO_LINK); > > - pcmd = kmalloc(sizeof(pcmd), GFP_ATOMIC); > - if (!pcmd) > - return -ENOMEM; > - > - / for hidden ap to set fw_state here */ > - if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_ADHOC_STATE) != > - true) { > - switch (ndis_network_mode) { > - case Ndis802_11IBSS: > - pmlmepriv->fw_state |= WIFI_ADHOC_STATE; > > - break; > - case Ndis802_11Infrastructure: > - pmlmepriv->fw_state |= WIFI_STATION_STATE; > > - break; > - case Ndis802_11APMode: > - case Ndis802_11AutoUnknown: > - case Ndis802_11InfrastructureMax: > - break; > - } > - } > - psecnetwork = &psecuritypriv->sec_bss; > > - memcpy(psecnetwork, &pnetwork->network, sizeof(*psecnetwork)); > > - psecuritypriv->authenticator_ie[0] = (unsigned char) > > - psecnetwork->IELength; > > - if ((psecnetwork->IELength - 12) < (256 - 1)) > > - memcpy(&psecuritypriv->authenticator_ie[1], &psecnetwork->IEs[12], > > - psecnetwork->IELength - 12); > > - else > - memcpy(&psecuritypriv->authenticator_ie[1], &psecnetwork->IEs[12], (256 - 1)); > > - psecnetwork->IELength = 0; > > - /* > - * If the driver wants to use the bssid to create the connection. > - * If not, we copy the connecting AP's MAC address to it so that > - * the driver just has the bssid information for PMKIDList searching. > - */ > - if (!pmlmepriv->assoc_by_bssid) > > - ether_addr_copy(&pmlmepriv->assoc_bssid[0], > > - &pnetwork->network.MacAddress[0]); > > - psecnetwork->IELength = r8712_restruct_sec_ie(padapter, &pnetwork->network.IEs[0], > > - &psecnetwork->IEs[0], pnetwork->network.IELength); > > - pqospriv->qos_option = 0; > > - if (pregistrypriv->wmm_enable) { > > - u32 tmp_len; > - > - tmp_len = r8712_restruct_wmm_ie(padapter, &pnetwork->network.IEs[0], > > - &psecnetwork->IEs[0], pnetwork->network.IELength, > > - psecnetwork->IELength); > > - if (psecnetwork->IELength != tmp_len) { > > - psecnetwork->IELength = tmp_len; > > - pqospriv->qos_option = 1; /* WMM IE in beacon */ > > - } else { > - pqospriv->qos_option = 0; /* no WMM IE in beacon */ > > - } > - } > - if (pregistrypriv->ht_enable) { > > - /* > - * For WEP mode, we will use the bg mode to do the connection > - * to avoid some IOT issues, especially for Realtek 8192u > - * SoftAP. > - */ > - if ((padapter->securitypriv.privacy_algorithm != WEP40) && > > - (padapter->securitypriv.privacy_algorithm != WEP104)) { > > - /* restructure_ht_ie */ > - r8712_restructure_ht_ie(padapter, > - &pnetwork->network.IEs[0], > > - &psecnetwork->IEs[0], > > - pnetwork->network.IELength, > > - &psecnetwork->IELength); > > - } > - } > - psecuritypriv->supplicant_ie[0] = (u8)psecnetwork->IELength; > > - if (psecnetwork->IELength < 255) > > - memcpy(&psecuritypriv->supplicant_ie[1], &psecnetwork->IEs[0], > > - psecnetwork->IELength); > > - else > - memcpy(&psecuritypriv->supplicant_ie[1], &psecnetwork->IEs[0], > > - 255); > - /* get cmdsz before endian conversion */ > - pcmd->cmdsz = r8712_get_wlan_bssid_ex_sz(psecnetwork); > > -#ifdef __BIG_ENDIAN > - /* wlan_network endian conversion */ > - psecnetwork->Length = cpu_to_le32(psecnetwork->Length); > > - psecnetwork->Ssid.SsidLength = cpu_to_le32(psecnetwork->Ssid.SsidLength); > > - psecnetwork->Privacy = cpu_to_le32(psecnetwork->Privacy); > > - psecnetwork->Rssi = cpu_to_le32(psecnetwork->Rssi); > > - psecnetwork->NetworkTypeInUse = cpu_to_le32(psecnetwork->NetworkTypeInUse); > > - psecnetwork->Configuration.ATIMWindow = cpu_to_le32(psecnetwork->Configuration.ATIMWindow); > > - psecnetwork->Configuration.BeaconPeriod = cpu_to_le32(psecnetwork->Configuration.BeaconPeriod); > > - psecnetwork->Configuration.DSConfig = cpu_to_le32(psecnetwork->Configuration.DSConfig); > > - psecnetwork->Configuration.FHConfig.DwellTime = cpu_to_le32(psecnetwork->Configuration.FHConfig.DwellTime); > > - psecnetwork->Configuration.FHConfig.HopPattern = cpu_to_le32(psecnetwork->Configuration.FHConfig.HopPattern); > > - psecnetwork->Configuration.FHConfig.HopSet = cpu_to_le32(psecnetwork->Configuration.FHConfig.HopSet); > > - psecnetwork->Configuration.FHConfig.Length = cpu_to_le32(psecnetwork->Configuration.FHConfig.Length); > > - psecnetwork->Configuration.Length = cpu_to_le32(psecnetwork->Configuration.Length); > > - psecnetwork->InfrastructureMode = cpu_to_le32(psecnetwork->InfrastructureMode); > > - psecnetwork->IELength = cpu_to_le32(psecnetwork->IELength); > > -#endif > - INIT_LIST_HEAD(&pcmd->list); > > - pcmd->cmdcode = JoinBss_CMD; > > - pcmd->parmbuf = (unsigned char *)psecnetwork; > > - pcmd->rsp = NULL; > > - pcmd->rspsz = 0; > > - r8712_enqueue_cmd(pcmdpriv, pcmd); > - return 0; > -} > - > -void r8712_disassoc_cmd(struct _adapter padapter) / for sta_mode */ > -{ > - struct cmd_obj *pdisconnect_cmd; > - struct disconnect_parm *pdisconnect; > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - > - pdisconnect_cmd = kmalloc(sizeof(*pdisconnect_cmd), GFP_ATOMIC); > - if (!pdisconnect_cmd) > - return; > - pdisconnect = kmalloc(sizeof(*pdisconnect), GFP_ATOMIC); > - if (!pdisconnect) { > - kfree(pdisconnect_cmd); > - return; > - } > - init_h2fwcmd_w_parm_no_rsp(pdisconnect_cmd, pdisconnect, DisConnect_CMD); > - r8712_enqueue_cmd(pcmdpriv, pdisconnect_cmd); > -} > - > -void r8712_setopmode_cmd(struct _adapter *padapter, > - enum NDIS_802_11_NETWORK_INFRASTRUCTURE networktype) > -{ > - struct cmd_obj *ph2c; > - struct setopmode_parm *psetop; > - > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - > - ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); > - if (!ph2c) > - return; > - psetop = kmalloc(sizeof(*psetop), GFP_ATOMIC); > - if (!psetop) { > - kfree(ph2c); > - return; > - } > - init_h2fwcmd_w_parm_no_rsp(ph2c, psetop, SetOpMode_CMD); > - psetop->mode = (u8)networktype; > > - r8712_enqueue_cmd(pcmdpriv, ph2c); > -} > - > -void r8712_setstakey_cmd(struct _adapter *padapter, u8 *psta, u8 unicast_key) > -{ > - struct cmd_obj *ph2c; > - struct set_stakey_parm *psetstakey_para; > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - struct set_stakey_rsp *psetstakey_rsp = NULL; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct security_priv *psecuritypriv = &padapter->securitypriv; > > - struct sta_info *sta = (struct sta_info *)psta; > - > - ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); > - if (!ph2c) > - return; > - psetstakey_para = kmalloc(sizeof(*psetstakey_para), GFP_ATOMIC); > - if (!psetstakey_para) { > - kfree(ph2c); > - return; > - } > - psetstakey_rsp = kmalloc(sizeof(*psetstakey_rsp), GFP_ATOMIC); > - if (!psetstakey_rsp) { > - kfree(ph2c); > - kfree(psetstakey_para); > - return; > - } > - init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, SetStaKey_CMD); > - ph2c->rsp = (u8 *)psetstakey_rsp; > > - ph2c->rspsz = sizeof(struct set_stakey_rsp); > > - ether_addr_copy(psetstakey_para->addr, sta->hwaddr); > > - if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) > - psetstakey_para->algorithm = (unsigned char) > > - psecuritypriv->privacy_algorithm; > > - else > - GET_ENCRY_ALGO(psecuritypriv, sta, psetstakey_para->algorithm, false); > > - if (unicast_key) > - memcpy(&psetstakey_para->key, &sta->x_UncstKey, 16); > > - else > - memcpy(&psetstakey_para->key, > > - &psecuritypriv->XGrpKey[psecuritypriv->XGrpKeyid - 1].skey, > > - 16); > - r8712_enqueue_cmd(pcmdpriv, ph2c); > -} > - > -void r8712_setMacAddr_cmd(struct _adapter *padapter, const u8 *mac_addr) > -{ > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - struct cmd_obj *ph2c; > - struct SetMacAddr_param *psetMacAddr_para; > - > - ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); > - if (!ph2c) > - return; > - psetMacAddr_para = kmalloc(sizeof(*psetMacAddr_para), GFP_ATOMIC); > - if (!psetMacAddr_para) { > - kfree(ph2c); > - return; > - } > - init_h2fwcmd_w_parm_no_rsp(ph2c, psetMacAddr_para, SetMacAddress_CMD); > - ether_addr_copy(psetMacAddr_para->MacAddr, mac_addr); > > - r8712_enqueue_cmd(pcmdpriv, ph2c); > -} > - > -void r8712_addbareq_cmd(struct _adapter *padapter, u8 tid) > -{ > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - struct cmd_obj *ph2c; > - struct addBaReq_parm *paddbareq_parm; > - > - ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); > - if (!ph2c) > - return; > - paddbareq_parm = kmalloc(sizeof(*paddbareq_parm), GFP_ATOMIC); > - if (!paddbareq_parm) { > - kfree(ph2c); > - return; > - } > - paddbareq_parm->tid = tid; > > - init_h2fwcmd_w_parm_no_rsp(ph2c, paddbareq_parm, GEN_CMD_CODE(_AddBAReq)); > - r8712_enqueue_cmd_ex(pcmdpriv, ph2c); > -} > - > -void r8712_wdg_wk_cmd(struct _adapter *padapter) > -{ > - struct cmd_obj *ph2c; > - struct drvint_cmd_parm *pdrvintcmd_param; > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - > - ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); > - if (!ph2c) > - return; > - pdrvintcmd_param = kmalloc(sizeof(*pdrvintcmd_param), GFP_ATOMIC); > - if (!pdrvintcmd_param) { > - kfree(ph2c); > - return; > - } > - pdrvintcmd_param->i_cid = WDG_WK_CID; > > - pdrvintcmd_param->sz = 0; > > - pdrvintcmd_param->pbuf = NULL; > > - init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvintcmd_param, DRV_INT_CMD); > - r8712_enqueue_cmd_ex(pcmdpriv, ph2c); > -} > - > -void r8712_survey_cmd_callback(struct _adapter *padapter, struct cmd_obj *pcmd) > -{ > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - > - if (pcmd->res != H2C_SUCCESS) > > - clr_fwstate(pmlmepriv, _FW_UNDER_SURVEY); > - r8712_free_cmd_obj(pcmd); > -} > - > -void r8712_disassoc_cmd_callback(struct _adapter *padapter, > - struct cmd_obj *pcmd) > -{ > - unsigned long irqL; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - > - if (pcmd->res != H2C_SUCCESS) { > > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - set_fwstate(pmlmepriv, _FW_LINKED); > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > - return; > - } > - r8712_free_cmd_obj(pcmd); > -} > - > -void r8712_joinbss_cmd_callback(struct _adapter *padapter, struct cmd_obj *pcmd) > -{ > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - > - if (pcmd->res != H2C_SUCCESS) > > - mod_timer(&pmlmepriv->assoc_timer, jiffies + msecs_to_jiffies(1)); > > - r8712_free_cmd_obj(pcmd); > -} > - > -void r8712_createbss_cmd_callback(struct _adapter *padapter, struct cmd_obj *pcmd) > -{ > - unsigned long irqL; > - struct sta_info *psta = NULL; > - struct wlan_network *pwlan = NULL; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct wlan_bssid_ex *pnetwork = (struct wlan_bssid_ex *)pcmd->parmbuf; > > - struct wlan_network *tgt_network = &pmlmepriv->cur_network; > > - > - if (pcmd->res != H2C_SUCCESS) > > - mod_timer(&pmlmepriv->assoc_timer, jiffies + msecs_to_jiffies(1)); > > - del_timer(&pmlmepriv->assoc_timer); > > -#ifdef __BIG_ENDIAN > - /* endian_convert */ > - pnetwork->Length = le32_to_cpu(pnetwork->Length); > > - pnetwork->Ssid.SsidLength = le32_to_cpu(pnetwork->Ssid.SsidLength); > > - pnetwork->Privacy = le32_to_cpu(pnetwork->Privacy); > > - pnetwork->Rssi = le32_to_cpu(pnetwork->Rssi); > > - pnetwork->NetworkTypeInUse = le32_to_cpu(pnetwork->NetworkTypeInUse); > > - pnetwork->Configuration.ATIMWindow = le32_to_cpu(pnetwork->Configuration.ATIMWindow); > > - pnetwork->Configuration.DSConfig = le32_to_cpu(pnetwork->Configuration.DSConfig); > > - pnetwork->Configuration.FHConfig.DwellTime = le32_to_cpu(pnetwork->Configuration.FHConfig.DwellTime); > > - pnetwork->Configuration.FHConfig.HopPattern = le32_to_cpu(pnetwork->Configuration.FHConfig.HopPattern); > > - pnetwork->Configuration.FHConfig.HopSet = le32_to_cpu(pnetwork->Configuration.FHConfig.HopSet); > > - pnetwork->Configuration.FHConfig.Length = le32_to_cpu(pnetwork->Configuration.FHConfig.Length); > > - pnetwork->Configuration.Length = le32_to_cpu(pnetwork->Configuration.Length); > > - pnetwork->InfrastructureMode = le32_to_cpu(pnetwork->InfrastructureMode); > > - pnetwork->IELength = le32_to_cpu(pnetwork->IELength); > > -#endif > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - if ((pmlmepriv->fw_state) & WIFI_AP_STATE) { > > - psta = r8712_get_stainfo(&padapter->stapriv, pnetwork->MacAddress); > > - if (!psta) { > - psta = r8712_alloc_stainfo(&padapter->stapriv, pnetwork->MacAddress); > > - if (!psta) > - goto createbss_cmd_fail; > - } > - r8712_indicate_connect(padapter); > - } else { > - pwlan = _r8712_alloc_network(pmlmepriv); > - if (!pwlan) { > - pwlan = r8712_get_oldest_wlan_network(&pmlmepriv->scanned_queue); > > - if (!pwlan) > - goto createbss_cmd_fail; > - pwlan->last_scanned = jiffies; > > - } else { > - list_add_tail(&pwlan->list, &pmlmepriv->scanned_queue.queue); > > - } > - pnetwork->Length = r8712_get_wlan_bssid_ex_sz(pnetwork); > > - memcpy(&pwlan->network, pnetwork, pnetwork->Length); > > - pwlan->fixed = true; > > - memcpy(&tgt_network->network, pnetwork, (r8712_get_wlan_bssid_ex_sz(pnetwork))); > > - if (pmlmepriv->fw_state & _FW_UNDER_LINKING) > > - pmlmepriv->fw_state ^= _FW_UNDER_LINKING; > > - /* > - * we will set _FW_LINKED when there is one more sat to > - * join us (stassoc_event_callback) > - */ > - } > -createbss_cmd_fail: > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > - r8712_free_cmd_obj(pcmd); > -} > - > -void r8712_setstaKey_cmdrsp_callback(struct _adapter *padapter, struct cmd_obj *pcmd) > -{ > - struct sta_priv *pstapriv = &padapter->stapriv; > > - struct set_stakey_rsp *psetstakey_rsp = (struct set_stakey_rsp *) (pcmd->rsp); > > - struct sta_info *psta = r8712_get_stainfo(pstapriv, psetstakey_rsp->addr); > > - > - if (!psta) > - goto exit; > - psta->aid = psta->mac_id = psetstakey_rsp->keyid; /CAM_ID(CAM_ENTRY)/ > > -exit: > - r8712_free_cmd_obj(pcmd); > -} > - > -void r8712_setassocsta_cmdrsp_callback(struct _adapter *padapter, > - struct cmd_obj *pcmd) > -{ > - unsigned long irqL; > - struct sta_priv *pstapriv = &padapter->stapriv; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct set_assocsta_parm *passocsta_parm = (struct set_assocsta_parm *)(pcmd->parmbuf); > > - struct set_assocsta_rsp *passocsta_rsp = (struct set_assocsta_rsp *) (pcmd->rsp); > > - struct sta_info *psta = r8712_get_stainfo(pstapriv, passocsta_parm->addr); > > - > - if (!psta) > - return; > - psta->aid = psta->mac_id = passocsta_rsp->cam_id; > > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - if ((check_fwstate(pmlmepriv, WIFI_MP_STATE)) && (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))) > - pmlmepriv->fw_state ^= _FW_UNDER_LINKING; > > - set_fwstate(pmlmepriv, _FW_LINKED); > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > - r8712_free_cmd_obj(pcmd); > -} > - > -void r8712_disconnectCtrlEx_cmd(struct _adapter *adapter, u32 enableDrvCtrl, u32 tryPktCnt, > - u32 tryPktInterval, u32 firstStageTO) > -{ > - struct cmd_obj *ph2c; > - struct DisconnectCtrlEx_param *param; > - struct cmd_priv *pcmdpriv = &adapter->cmdpriv; > > - > - ph2c = kmalloc(sizeof(*ph2c), GFP_ATOMIC); > - if (!ph2c) > - return; > - param = kzalloc(sizeof(*param), GFP_ATOMIC); > - if (!param) { > - kfree(ph2c); > - return; > - } > - > - param->EnableDrvCtrl = (unsigned char)enableDrvCtrl; > > - param->TryPktCnt = (unsigned char)tryPktCnt; > > - param->TryPktInterval = (unsigned char)tryPktInterval; > > - param->FirstStageTO = (unsigned int)firstStageTO; > > - > - init_h2fwcmd_w_parm_no_rsp(ph2c, param, GEN_CMD_CODE(_DisconnectCtrlEx)); > - r8712_enqueue_cmd(pcmdpriv, ph2c); > -} > diff --git a/drivers/staging/rtl8712/rtl871x_cmd.h b/drivers/staging/rtl8712/rtl871x_cmd.h > deleted file mode 100644 > index 268844af57f0..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_cmd.h > +++ /dev/null > @@ -1,750 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - *****************************************************************************/ > -#ifndef _RTL871X_CMD_H > -#define _RTL871X_CMD_H > - > -#include "wlan_bssdef.h" > -#include "rtl871x_rf.h" > -#define C2H_MEM_SZ (161024) > - > -#include "osdep_service.h" > -#include "ieee80211.h" > - > -#define FREE_CMDOBJ_SZ 128 > -#define MAX_CMDSZ 512 > -#define MAX_RSPSZ 512 > -#define MAX_EVTSZ 1024 > -#define CMDBUFF_ALIGN_SZ 512 > - > -struct cmd_obj { > - u16 cmdcode; > - u8 res; > - u8 *parmbuf; > - u32 cmdsz; > - u8 *rsp; > - u32 rspsz; > - struct list_head list; > -}; > - > -struct cmd_priv { > - struct completion cmd_queue_comp; > - struct completion terminate_cmdthread_comp; > - struct __queue cmd_queue; > - u8 cmd_seq; > - u8 *cmd_buf; /shall be non-paged, and 4 bytes aligned/ > - u8 *cmd_allocated_buf; > - u8 *rsp_buf; /shall be non-paged, and 4 bytes aligned/ > - u8 *rsp_allocated_buf; > - u32 cmd_issued_cnt; > - u32 cmd_done_cnt; > - u32 rsp_cnt; > - struct _adapter *padapter; > -}; > - > -struct evt_obj { > - u16 evtcode; > - u8 res; > - u8 *parmbuf; > - u32 evtsz; > - struct list_head list; > -}; > - > -struct evt_priv { > - struct __queue evt_queue; > - u8 event_seq; > - u8 *evt_buf; /shall be non-paged, and 4 bytes aligned/ > - u8 *evt_allocated_buf; > - u32 evt_done_cnt; > -}; > - > -#define init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code) \ > -do {\ > - INIT_LIST_HEAD(&pcmd->list);\ > > - pcmd->cmdcode = code;\ > > - pcmd->parmbuf = (u8 *)(pparm);\ > > - pcmd->cmdsz = sizeof(*pparm);\ > > - pcmd->rsp = NULL;\ > > - pcmd->rspsz = 0;\ > > -} while (0) > - > -void r8712_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj); > -void r8712_enqueue_cmd_ex(struct cmd_priv *pcmdpriv, struct cmd_obj *obj); > -struct cmd_obj *r8712_dequeue_cmd(struct __queue *queue); > -void r8712_free_cmd_obj(struct cmd_obj *pcmd); > -int r8712_cmd_thread(void *context); > -int r8712_init_cmd_priv(struct cmd_priv *pcmdpriv); > -void r8712_free_cmd_priv(struct cmd_priv *pcmdpriv); > -int r8712_init_evt_priv(struct evt_priv *pevtpriv); > -void r8712_free_evt_priv(struct evt_priv pevtpriv); > - > -enum rtl871x_drvint_cid { > - NONE_WK_CID, > - WDG_WK_CID, > - MAX_WK_CID > -}; > - > -enum RFINTFS { > - SWSI, > - HWSI, > - HWPI, > -}; > - > -/ > - * Caller Mode: Infra, Ad-HoC(C) > - * Notes: To enter USB suspend mode > - * Command Mode > - / > -struct usb_suspend_parm { > - u32 action; / 1: sleep, 0:resume / > -}; > - > -/ > - * Caller Mode: Infra, Ad-HoC(C) > - * Notes: To disconnect the current associated BSS > - * Command Mode > - / > -struct disconnect_parm { > - u32 rsvd; > -}; > - > -/ > - * Caller Mode: AP, Ad-HoC, Infra > - * Notes: To set the NIC mode of RTL8711 > - * Command Mode > - * The definition of mode: > - * > - * #define IW_MODE_AUTO 0 // Let the driver decides which AP to join > - * #define IW_MODE_ADHOC 1 // Single cell network (Ad-Hoc Clients) > - * #define IW_MODE_INFRA 2 // Multi cell network, roaming, .. > - * #define IW_MODE_MASTER 3 // Synchronisation master or AP > - * #define IW_MODE_REPEAT 4 // Wireless Repeater (forwarder) > - * #define IW_MODE_SECOND 5 // Secondary master/repeater (backup) > - * #define IW_MODE_MONITOR 6 // Passive monitor (listen only) > - / > -struct setopmode_parm { > - u8 mode; > - u8 rsvd[3]; > -}; > - > -/ > - * Caller Mode: AP, Ad-HoC, Infra > - * Notes: To ask RTL8711 performing site-survey > - * Command-Event Mode > - */ > -struct sitesurvey_parm { > - __le32 passive_mode; /*active: 1, passive: 0 / > - __le32 bsslimit; / 1 ~ 48 / > - __le32 ss_ssidlen; > - u8 ss_ssid[IW_ESSID_MAX_SIZE + 1]; > -}; > - > -/ > - * Caller Mode: Any > - * Notes: To set the auth type of RTL8711. open/shared/802.1x > - * Command Mode > - / > -struct setauth_parm { > - u8 mode; /0: legacy open, 1: legacy shared 2: 802.1x/ > - u8 _1x; /0: PSK, 1: TLS/ > - u8 rsvd[2]; > -}; > - > -/ > - * Caller Mode: Infra > - * a. algorithm: wep40, wep104, tkip & aes > - * b. keytype: grp key/unicast key > - * c. key contents > - * > - * when shared key ==> keyid is the camid > > - * when 802.1x ==> keyid [0:1] ==> grp key > > - * when 802.1x ==> keyid > 2 ==> unicast key > > - / > -struct setkey_parm { > - u8 algorithm; / encryption algorithm, could be none, wep40, > - * TKIP, CCMP, wep104 > - / > - u8 keyid; > - u8 grpkey; / 1: this is the grpkey for 802.1x. > - * 0: this is the unicast key for 802.1x > - / > - u8 key[16]; / this could be 40 or 104 / > -}; > - > -/ > - * When in AP or Ad-Hoc mode, this is used to > - * allocate an sw/hw entry for a newly associated sta. > - * Command > - * when shared key ==> algorithm/keyid > > - / > -struct set_stakey_parm { > - u8 addr[ETH_ALEN]; > - u8 algorithm; > - u8 key[16]; > -}; > - > -struct set_stakey_rsp { > - u8 addr[ETH_ALEN]; > - u8 keyid; > - u8 rsvd; > -}; > - > -struct SetMacAddr_param { > - u8 MacAddr[ETH_ALEN]; > -}; > - > -/ > - * Caller Ad-Hoc/AP > - * > - * Command -Rsp(AID == CAMID) mode > - * > - * This is to force fw to add an sta_data entry per driver's request. > - * > - * FW will write an cam entry associated with it. > - * > - / > -struct set_assocsta_parm { > - u8 addr[ETH_ALEN]; > -}; > - > -struct set_assocsta_rsp { > - u8 cam_id; > - u8 rsvd[3]; > -}; > - > -/ > - * Caller Ad-Hoc/AP > - * > - * Command mode > - * > - * This is to force fw to del an sta_data entry per driver's request > - * > - * FW will invalidate the cam entry associated with it. > - * > - / > -struct del_assocsta_parm { > - u8 addr[ETH_ALEN]; > -}; > - > -/ > - * Caller Mode: AP/Ad-HoC(M) > - * > - * Notes: To notify fw that given staid has changed its power state > - * > - * Command Mode > - * > - / > -struct setstapwrstate_parm { > - u8 staid; > - u8 status; > - u8 hwaddr[6]; > -}; > - > -/ > - * Caller Mode: Any > - * > - * Notes: To setup the basic rate of RTL8711 > - * > - * Command Mode > - * > - / > -struct setbasicrate_parm { > - u8 basicrates[NumRates]; > -}; > - > -/ > - * Caller Mode: Any > - * > - * Notes: To read the current basic rate > - * > - * Command-Rsp Mode > - * > - / > -struct getbasicrate_parm { > - u32 rsvd; > -}; > - > -struct getbasicrate_rsp { > - u8 basicrates[NumRates]; > -}; > - > -/ > - * Caller Mode: Any > - * > - * Notes: To setup the data rate of RTL8711 > - * > - * Command Mode > - * > - / > -struct setdatarate_parm { > - u8 mac_id; > - u8 datarates[NumRates]; > -}; > - > -enum _RT_CHANNEL_DOMAIN { > - RT_CHANNEL_DOMAIN_FCC = 0, > - RT_CHANNEL_DOMAIN_IC = 1, > - RT_CHANNEL_DOMAIN_ETSI = 2, > - RT_CHANNEL_DOMAIN_SPAIN = 3, > - RT_CHANNEL_DOMAIN_FRANCE = 4, > - RT_CHANNEL_DOMAIN_MKK = 5, > - RT_CHANNEL_DOMAIN_MKK1 = 6, > - RT_CHANNEL_DOMAIN_ISRAEL = 7, > - RT_CHANNEL_DOMAIN_TELEC = 8, > - > - / Be compatible with old channel plan. No good! / > - RT_CHANNEL_DOMAIN_MIC = 9, > - RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN = 10, > - RT_CHANNEL_DOMAIN_WORLD_WIDE_13 = 11, > - RT_CHANNEL_DOMAIN_TELEC_NETGEAR = 12, > - > - RT_CHANNEL_DOMAIN_NCC = 13, > - RT_CHANNEL_DOMAIN_5G = 14, > - RT_CHANNEL_DOMAIN_5G_40M = 15, > - /===== Add new channel plan above this line===============/ > - RT_CHANNEL_DOMAIN_MAX, > -}; > - > -struct SetChannelPlan_param { > - enum _RT_CHANNEL_DOMAIN ChannelPlan; > -}; > - > -/ > - * Caller Mode: Any > - * > - * Notes: To read the current data rate > - * > - * Command-Rsp Mode > - * > - / > -struct getdatarate_parm { > - u32 rsvd; > - > -}; > - > -struct getdatarate_rsp { > - u8 datarates[NumRates]; > -}; > - > -/ > - * Caller Mode: Any > - * AP: AP can use the info for the contents of beacon frame > - * Infra: STA can use the info when sitesurveying > - * Ad-HoC(M): Like AP > - * Ad-HoC(C): Like STA > - * > - * > - * Notes: To set the phy capability of the NIC > - * > - * Command Mode > - * > - / > - > -/ > - * Caller Mode: Any > - * > - * Notes: To set the channel/modem/band > - * This command will be used when channel/modem/band is changed. > - * > - * Command Mode > - * > - / > -/ > - * Caller Mode: Any > - * > - * Notes: To get the current setting of channel/modem/band > - * > - * Command-Rsp Mode > - * > - / > -struct getphy_rsp { > - u8 rfchannel; > - u8 modem; > -}; > - > -struct readBB_parm { > - u8 offset; > -}; > - > -struct readBB_rsp { > - u8 value; > -}; > - > -struct readTSSI_parm { > - u8 offset; > -}; > - > -struct readTSSI_rsp { > - u8 value; > -}; > - > -struct writeBB_parm { > - u8 offset; > - u8 value; > -}; > - > -struct writePTM_parm { > - u8 type; > -}; > - > -struct readRF_parm { > - u8 offset; > -}; > - > -struct readRF_rsp { > - u32 value; > -}; > - > -struct writeRF_parm { > - u32 offset; > - u32 value; > -}; > - > -struct setrfintfs_parm { > - u8 rfintfs; > -}; > - > -struct getrfintfs_parm { > - u8 rfintfs; > -}; > - > -/ > - * Notes: This command is used for H2C/C2H loopback testing > - * > - * mac[0] == 0 > - * ==> CMD mode, return H2C_SUCCESS. > > - * The following condition must be true under CMD mode > - * mac[1] == mac[4], mac[2] == mac[3], mac[0]=mac[5]= 0; > - * s0 == 0x1234, s1 == 0xabcd, w0 == 0x78563412, w1 == 0x5aa5def7; > - * s2 == (b1 << 8 | b0); > - * > - * mac[0] == 1 > - * ==> CMD_RSP mode, return H2C_SUCCESS_RSP > > - * > - * The rsp layout shall be: > - * rsp: parm: > - * mac[0] = mac[5]; > - * mac[1] = mac[4]; > - * mac[2] = mac[3]; > - * mac[3] = mac[2]; > - * mac[4] = mac[1]; > - * mac[5] = mac[0]; > - * s0 = s1; > - * s1 = swap16(s0); > - * w0 = swap32(w1); > - * b0 = b1 > - * s2 = s0 + s1 > - * b1 = b0 > - * w1 = w0 > - * > - * mac[0] == 2 > - * ==> CMD_EVENT mode, return H2C_SUCCESS > > - * The event layout shall be: > - * event: parm: > - * mac[0] = mac[5]; > - * mac[1] = mac[4]; > - * mac[2] = event's sequence number, starting from 1 to parm's marc[3] > - * mac[3] = mac[2]; > - * mac[4] = mac[1]; > - * mac[5] = mac[0]; > - * s0 = swap16(s0) - event.mac[2]; > - * s1 = s1 + event.mac[2]; > - * w0 = swap32(w0); > - * b0 = b1 > - * s2 = s0 + event.mac[2] > - * b1 = b0 > - * w1 = swap32(w1) - event.mac[2]; > - * > - * parm->mac[3] is the total event counts that host requested. > > - * > - * > - * event will be the same with the cmd's param. > - * > - / > - > -/ CMD param Formart for DRV INTERNAL CMD HDL*/ > -struct drvint_cmd_parm { > - int i_cid; /internal cmd id/ > - int sz; /* buf sz*/ > - unsigned char pbuf; > -}; > - > -/------------------- Below are used for RF/BB tuning ---------------------/ > - > -struct setantenna_parm { > - u8 tx_antset; > - u8 rx_antset; > - u8 tx_antenna; > - u8 rx_antenna; > -}; > - > -struct enrateadaptive_parm { > - u32 en; > -}; > - > -struct settxagctbl_parm { > - u32 txagc[MAX_RATES_LENGTH]; > -}; > - > -struct gettxagctbl_parm { > - u32 rsvd; > -}; > - > -struct gettxagctbl_rsp { > - u32 txagc[MAX_RATES_LENGTH]; > -}; > - > -struct setagcctrl_parm { > - u32 agcctrl; / 0: pure hw, 1: fw / > -}; > - > -struct setssup_parm { > - u32 ss_ForceUp[MAX_RATES_LENGTH]; > -}; > - > -struct getssup_parm { > - u32 rsvd; > -}; > - > -struct getssup_rsp { > - u8 ss_ForceUp[MAX_RATES_LENGTH]; > -}; > - > -struct setssdlevel_parm { > - u8 ss_DLevel[MAX_RATES_LENGTH]; > -}; > - > -struct getssdlevel_parm { > - u32 rsvd; > -}; > - > -struct getssdlevel_rsp { > - u8 ss_DLevel[MAX_RATES_LENGTH]; > -}; > - > -struct setssulevel_parm { > - u8 ss_ULevel[MAX_RATES_LENGTH]; > -}; > - > -struct getssulevel_parm { > - u32 rsvd; > -}; > - > -struct getssulevel_rsp { > - u8 ss_ULevel[MAX_RATES_LENGTH]; > -}; > - > -struct setcountjudge_parm { > - u8 count_judge[MAX_RATES_LENGTH]; > -}; > - > -struct getcountjudge_parm { > - u32 rsvd; > -}; > - > -struct getcountjudge_rsp { > - u8 count_judge[MAX_RATES_LENGTH]; > -}; > - > -struct setpwrmode_parm { > - u8 mode; > - u8 flag_low_traffic_en; > - u8 flag_lpnav_en; > - u8 flag_rf_low_snr_en; > - u8 flag_dps_en; / 1: dps, 0: 32k / > - u8 bcn_rx_en; > - u8 bcn_pass_cnt; / fw report one beacon information to > - * driver when it receives bcn_pass_cnt > - * beacons. > - / > - u8 bcn_to; / beacon TO (ms). ¡§=0¡¨ no limit./ > - u16 bcn_itv; > - u8 app_itv; / only for VOIP mode. / > - u8 awake_bcn_itv; > - u8 smart_ps; > - u8 bcn_pass_time; / unit: 100ms / > -}; > - > -struct setatim_parm { > - u8 op; /0: add, 1:del/ > - u8 txid; / id of dest station./ > -}; > - > -struct setratable_parm { > - u8 ss_ForceUp[NumRates]; > - u8 ss_ULevel[NumRates]; > - u8 ss_DLevel[NumRates]; > - u8 count_judge[NumRates]; > -}; > - > -struct getratable_parm { > - uint rsvd; > -}; > - > -struct getratable_rsp { > - u8 ss_ForceUp[NumRates]; > - u8 ss_ULevel[NumRates]; > - u8 ss_DLevel[NumRates]; > - u8 count_judge[NumRates]; > -}; > - > -/to get TX,RX retry count/ > -struct gettxretrycnt_parm { > - unsigned int rsvd; > -}; > - > -struct gettxretrycnt_rsp { > - unsigned long tx_retrycnt; > -}; > - > -struct getrxretrycnt_parm { > - unsigned int rsvd; > -}; > - > -struct getrxretrycnt_rsp { > - unsigned long rx_retrycnt; > -}; > - > -/to get BCNOK,BCNERR count/ > -struct getbcnokcnt_parm { > - unsigned int rsvd; > -}; > - > -struct getbcnokcnt_rsp { > - unsigned long bcnokcnt; > -}; > - > -struct getbcnerrcnt_parm { > - unsigned int rsvd; > -}; > - > -struct getbcnerrcnt_rsp { > - unsigned long bcnerrcnt; > -}; > - > -/ to get current TX power level*/ > -struct getcurtxpwrlevel_parm { > - unsigned int rsvd; > -}; > - > -struct getcurtxpwrlevel_rsp { > - unsigned short tx_power; > -}; > - > -/dynamic on/off DIG/ > -struct setdig_parm { > - unsigned char dig_on; /* 1:on , 0:off / > -}; > - > -/dynamic on/off RA/ > -struct setra_parm { > - unsigned char ra_on; / 1:on , 0:off / > -}; > - > -struct setprobereqextraie_parm { > - unsigned char e_id; > - unsigned char ie_len; > - unsigned char ie[]; > -}; > - > -struct setassocreqextraie_parm { > - unsigned char e_id; > - unsigned char ie_len; > - unsigned char ie[]; > -}; > - > -struct setproberspextraie_parm { > - unsigned char e_id; > - unsigned char ie_len; > - unsigned char ie[]; > -}; > - > -struct setassocrspextraie_parm { > - unsigned char e_id; > - unsigned char ie_len; > - unsigned char ie[]; > -}; > - > -struct addBaReq_parm { > - unsigned int tid; > -}; > - > -/H2C Handler index: 46 / > -struct SetChannel_parm { > - u32 curr_ch; > -}; > - > -/H2C Handler index: 61 / > -struct DisconnectCtrlEx_param { > - / MAXTIME = (2 * FirstStageTO) + (TryPktCnt * TryPktInterval) / > - unsigned char EnableDrvCtrl; > - unsigned char TryPktCnt; > - unsigned char TryPktInterval; / Unit: ms / > - unsigned char rsvd; > - unsigned int FirstStageTO; / Unit: ms / > -}; > - > -#define GEN_CMD_CODE(cmd) cmd ## CMD > - > -/ > - * Result: > - * 0x00: success > - * 0x01: success, and check Response. > - * 0x02: cmd ignored due to duplicated sequence number > - * 0x03: cmd dropped due to invalid cmd code > - * 0x04: reserved. > - / > - > -#define H2C_RSP_OFFSET 512 > -#define H2C_SUCCESS 0x00 > -#define H2C_SUCCESS_RSP 0x01 > -#define H2C_DUPLICATED 0x02 > -#define H2C_DROPPED 0x03 > -#define H2C_PARAMETERS_ERROR 0x04 > -#define H2C_REJECTED 0x05 > -#define H2C_CMD_OVERFLOW 0x06 > -#define H2C_RESERVED 0x07 > - > -void r8712_setMacAddr_cmd(struct _adapter padapter, const u8 mac_addr); > -u8 r8712_sitesurvey_cmd(struct _adapter padapter, struct ndis_802_11_ssid pssid); > -int r8712_createbss_cmd(struct _adapter padapter); > -void r8712_setstakey_cmd(struct _adapter padapter, u8 psta, u8 unicast_key); > -int r8712_joinbss_cmd(struct _adapter padapter, struct wlan_network pnetwork); > -void r8712_disassoc_cmd(struct _adapter padapter); > -void r8712_setopmode_cmd(struct _adapter padapter, enum NDIS_802_11_NETWORK_INFRASTRUCTURE networktype); > -int r8712_setdatarate_cmd(struct _adapter padapter, u8 rateset); > -void r8712_set_chplan_cmd(struct _adapter padapter, int chplan); > -int r8712_getrfreg_cmd(struct _adapter padapter, u8 offset, u8 pval); > -int r8712_setrfreg_cmd(struct _adapter padapter, u8 offset, u32 val); > -void r8712_addbareq_cmd(struct _adapter padapter, u8 tid); > -void r8712_wdg_wk_cmd(struct _adapter padapter); > -void r8712_survey_cmd_callback(struct _adapter padapter, struct cmd_obj pcmd); > -void r8712_disassoc_cmd_callback(struct _adapter padapter, struct cmd_obj pcmd); > -void r8712_joinbss_cmd_callback(struct _adapter padapter, struct cmd_obj pcmd); > -void r8712_createbss_cmd_callback(struct _adapter padapter, struct cmd_obj pcmd); > -void r8712_getbbrfreg_cmdrsp_callback(struct _adapter padapter, struct cmd_obj pcmd); > -void r8712_readtssi_cmdrsp_callback(struct _adapter padapter, struct cmd_obj pcmd); > -void r8712_setstaKey_cmdrsp_callback(struct _adapter padapter, struct cmd_obj pcmd); > -void r8712_setassocsta_cmdrsp_callback(struct _adapter padapter, struct cmd_obj pcmd); > -void r8712_disconnectCtrlEx_cmd(struct _adapter adapter, u32 enableDrvCtrl, u32 tryPktCnt, > - u32 tryPktInterval, u32 firstStageTO); > - > -struct _cmd_callback { > - u32 cmd_code; > - void (callback)(struct _adapter padapter, struct cmd_obj cmd); > -}; > - > -#include "rtl8712_cmd.h" > - > -#endif / CMD_H / > - > diff --git a/drivers/staging/rtl8712/rtl871x_debug.h b/drivers/staging/rtl8712/rtl871x_debug.h > deleted file mode 100644 > index 69c631af2a2a..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_debug.h > +++ /dev/null > @@ -1,130 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/********************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef RTL871X_DEBUG_H > -#define RTL871X_DEBUG_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > - > -#define drv_emerg 1 > -#define drv_alert 2 > -#define drv_crit 3 > -#define drv_err 4 > -#define drv_warning 5 > -#define drv_notice 6 > -#define drv_info 7 > -#define drv_dump 8 > -#define drv_debug 9 > - > -#define module_rtl871x_xmit_c BIT(0) > -#define module_xmit_osdep_c BIT(1) > -#define module_rtl871x_recv_c BIT(2) > -#define module_recv_osdep_c BIT(3) > -#define module_rtl871x_mlme_c BIT(4) > -#define module_mlme_osdep_c BIT(5) > -#define module_rtl871x_sta_mgt_c BIT(6) > -#define module_rtl871x_cmd_c BIT(7) > -#define module_cmd_osdep_c BIT(8) > -#define module_rtl871x_io_c BIT(9) > -#define module_io_osdep_c BIT(10) > -#define module_os_intfs_c BIT(11) > -#define module_rtl871x_security_c BIT(12) > -#define module_rtl871x_eeprom_c BIT(13) > -#define module_hal_init_c BIT(14) > -#define module_hci_hal_init_c BIT(15) > -#define module_rtl871x_ioctl_c BIT(16) > -#define module_rtl871x_ioctl_set_c BIT(17) > -#define module_rtl871x_pwrctrl_c BIT(19) > -#define module_hci_intfs_c BIT(20) > -#define module_hci_ops_c BIT(21) > -#define module_osdep_service_c BIT(22) > -#define module_rtl871x_mp_ioctl_c BIT(23) > -#define module_hci_ops_os_c BIT(24) > -#define _module_rtl871x_ioctl_os_c BIT(25) > -#define module_rtl8712_cmd_c BIT(26) > -#define module_rtl871x_mp_c BIT(27) > -#define module_rtl8712_xmit_c BIT(28) > -#define module_rtl8712_efuse_c BIT(29) > -#define module_rtl8712_recv_c BIT(30) > -#define module_rtl8712_led_c BIT(31) > - > -#undef MODULE_DEFINE > - > -#if defined RTL871X_XMIT_C > - #define MODULE_DEFINE module_rtl871x_xmit_c > -#elif defined XMIT_OSDEP_C > - #define MODULE_DEFINE module_xmit_osdep_c > -#elif defined RTL871X_RECV_C > - #define MODULE_DEFINE module_rtl871x_recv_c > -#elif defined RECV_OSDEP_C > - #define MODULE_DEFINE module_recv_osdep_c > -#elif defined RTL871X_MLME_C > - #define MODULE_DEFINE module_rtl871x_mlme_c > -#elif defined MLME_OSDEP_C > - #define MODULE_DEFINE module_mlme_osdep_c > -#elif defined RTL871X_STA_MGT_C > - #define MODULE_DEFINE module_rtl871x_sta_mgt_c > -#elif defined RTL871X_CMD_C > - #define MODULE_DEFINE module_rtl871x_cmd_c > -#elif defined CMD_OSDEP_C > - #define MODULE_DEFINE module_cmd_osdep_c > -#elif defined RTL871X_IO_C > - #define MODULE_DEFINE module_rtl871x_io_c > -#elif defined IO_OSDEP_C > - #define MODULE_DEFINE module_io_osdep_c > -#elif defined OS_INTFS_C > - #define MODULE_DEFINE module_os_intfs_c > -#elif defined RTL871X_SECURITY_C > - #define MODULE_DEFINE module_rtl871x_security_c > -#elif defined RTL871X_EEPROM_C > - #define MODULE_DEFINE module_rtl871x_eeprom_c > -#elif defined HAL_INIT_C > - #define MODULE_DEFINE module_hal_init_c > -#elif defined HCI_HAL_INIT_C > - #define MODULE_DEFINE module_hci_hal_init_c > -#elif defined RTL871X_IOCTL_C > - #define MODULE_DEFINE module_rtl871x_ioctl_c > -#elif defined RTL871X_IOCTL_SET_C > - #define MODULE_DEFINE module_rtl871x_ioctl_set_c > -#elif defined RTL871X_PWRCTRL_C > - #define MODULE_DEFINE module_rtl871x_pwrctrl_c > -#elif defined HCI_INTF_C > - #define MODULE_DEFINE module_hci_intfs_c > -#elif defined HCI_OPS_C > - #define MODULE_DEFINE module_hci_ops_c > -#elif defined OSDEP_HCI_INTF_C > - #define MODULE_DEFINE module_hci_intfs_c > -#elif defined OSDEP_SERVICE_C > - #define MODULE_DEFINE module_osdep_service_c > -#elif defined RTL871X_MP_IOCTL_C > - #define MODULE_DEFINE module_rtl871x_mp_ioctl_c > -#elif defined HCI_OPS_OS_C > - #define MODULE_DEFINE module_hci_ops_os_c > -#elif defined RTL871X_IOCTL_LINUX_C > - #define MODULE_DEFINE _module_rtl871x_ioctl_os_c > -#elif defined RTL871X_MP_C > - #define MODULE_DEFINE module_rtl871x_mp_c > -#elif defined RTL8712_CMD_C > - #define MODULE_DEFINE module_rtl8712_cmd_c > -#elif defined RTL8712_XMIT_C > - #define MODULE_DEFINE module_rtl8712_xmit_c > -#elif defined RTL8712_EFUSE_C > - #define MODULE_DEFINE module_rtl8712_efuse_c > -#elif defined RTL8712_RECV_C > - #define MODULE_DEFINE module_rtl8712_recv_c > -#else > - #undef MODULE_DEFINE > -#endif > - > -#endif /RTL871X_DEBUG_H/ > diff --git a/drivers/staging/rtl8712/rtl871x_eeprom.c b/drivers/staging/rtl8712/rtl871x_eeprom.c > deleted file mode 100644 > index 221bf92e1b1c..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_eeprom.c > +++ /dev/null > @@ -1,220 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/** > - * rtl871x_eeprom.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RTL871X_EEPROM_C > - > -#include "osdep_service.h" > -#include "drv_types.h" > - > -static void up_clk(struct _adapter *padapter, u16 *x) > -{ > - *x = *x | _EESK; > - r8712_write8(padapter, EE_9346CR, (u8)*x); > - udelay(CLOCK_RATE); > -} > - > -static void down_clk(struct _adapter *padapter, u16 *x) > -{ > - *x = *x & ~_EESK; > - r8712_write8(padapter, EE_9346CR, (u8)*x); > - udelay(CLOCK_RATE); > -} > - > -static void shift_out_bits(struct _adapter *padapter, u16 data, u16 count) > -{ > - u16 x, mask; > - > - if (padapter->surprise_removed) > > - goto out; > - mask = 0x01 << (count - 1); > - x = r8712_read8(padapter, EE_9346CR); > - x &= ~(_EEDO | _EEDI); > - do { > - x &= ~_EEDI; > - if (data & mask) > - x |= _EEDI; > - if (padapter->surprise_removed) > > - goto out; > - r8712_write8(padapter, EE_9346CR, (u8)x); > - udelay(CLOCK_RATE); > - up_clk(padapter, &x); > - down_clk(padapter, &x); > - mask >>= 1; > > - } while (mask); > - if (padapter->surprise_removed) > > - goto out; > - x &= ~_EEDI; > - r8712_write8(padapter, EE_9346CR, (u8)x); > -out:; > -} > - > -static u16 shift_in_bits(struct _adapter *padapter) > -{ > - u16 x, d = 0, i; > - > - if (padapter->surprise_removed) > > - goto out; > - x = r8712_read8(padapter, EE_9346CR); > - x &= ~(_EEDO | _EEDI); > - d = 0; > - for (i = 0; i < 16; i++) { > - d <<= 1; > - up_clk(padapter, &x); > - if (padapter->surprise_removed) > > - goto out; > - x = r8712_read8(padapter, EE_9346CR); > - x &= ~(_EEDI); > - if (x & _EEDO) > - d |= 1; > - down_clk(padapter, &x); > - } > -out: > - return d; > -} > - > -static void standby(struct _adapter *padapter) > -{ > - u8 x; > - > - x = r8712_read8(padapter, EE_9346CR); > - x &= ~(_EECS | _EESK); > - r8712_write8(padapter, EE_9346CR, x); > - udelay(CLOCK_RATE); > - x |= _EECS; > - r8712_write8(padapter, EE_9346CR, x); > - udelay(CLOCK_RATE); > -} > - > -static u16 wait_eeprom_cmd_done(struct _adapter *padapter) > -{ > - u8 x; > - u16 i; > - > - standby(padapter); > - for (i = 0; i < 200; i++) { > - x = r8712_read8(padapter, EE_9346CR); > - if (x & _EEDO) > - return true; > - udelay(CLOCK_RATE); > - } > - return false; > -} > - > -static void eeprom_clean(struct _adapter *padapter) > -{ > - u16 x; > - > - if (padapter->surprise_removed) > > - return; > - x = r8712_read8(padapter, EE_9346CR); > - if (padapter->surprise_removed) > > - return; > - x &= ~(_EECS | _EEDI); > - r8712_write8(padapter, EE_9346CR, (u8)x); > - if (padapter->surprise_removed) > > - return; > - up_clk(padapter, &x); > - if (padapter->surprise_removed) > > - return; > - down_clk(padapter, &x); > -} > - > -void r8712_eeprom_write16(struct _adapter *padapter, u16 reg, u16 data) > -{ > - u8 x; > - u8 tmp8_ori, tmp8_new, tmp8_clk_ori, tmp8_clk_new; > - > - tmp8_ori = r8712_read8(padapter, 0x102502f1); > - tmp8_new = tmp8_ori & 0xf7; > - if (tmp8_ori != tmp8_new) > - r8712_write8(padapter, 0x102502f1, tmp8_new); > - tmp8_clk_ori = r8712_read8(padapter, 0x10250003); > - tmp8_clk_new = tmp8_clk_ori | 0x20; > - if (tmp8_clk_new != tmp8_clk_ori) > - r8712_write8(padapter, 0x10250003, tmp8_clk_new); > - x = r8712_read8(padapter, EE_9346CR); > - x &= ~(_EEDI | _EEDO | _EESK | _EEM0); > - x |= _EEM1 | _EECS; > - r8712_write8(padapter, EE_9346CR, x); > - shift_out_bits(padapter, EEPROM_EWEN_OPCODE, 5); > - if (padapter->eeprom_address_size == 8) /CF+ and SDIO/ > > - shift_out_bits(padapter, 0, 6); > - else /* USB / > - shift_out_bits(padapter, 0, 4); > - standby(padapter); > - / Erase this particular word. Write the erase opcode and register > - * number in that order. The opcode is 3bits in length; reg is 6 > - * bits long. > - / > - standby(padapter); > - / write the new word to the EEPROM > - * send the write opcode the EEPORM > - / > - shift_out_bits(padapter, EEPROM_WRITE_OPCODE, 3); > - / select which word in the EEPROM that we are writing to. */ > - shift_out_bits(padapter, reg, padapter->eeprom_address_size); > > - /* write the data to the selected EEPROM word. */ > - shift_out_bits(padapter, data, 16); > - if (wait_eeprom_cmd_done(padapter)) { > - standby(padapter); > - shift_out_bits(padapter, EEPROM_EWDS_OPCODE, 5); > - shift_out_bits(padapter, reg, 4); > - eeprom_clean(padapter); > - } > - if (tmp8_clk_new != tmp8_clk_ori) > - r8712_write8(padapter, 0x10250003, tmp8_clk_ori); > - if (tmp8_new != tmp8_ori) > - r8712_write8(padapter, 0x102502f1, tmp8_ori); > -} > - > -u16 r8712_eeprom_read16(struct _adapter *padapter, u16 reg) /ReadEEprom/ > -{ > - u16 x; > - u16 data = 0; > - u8 tmp8_ori, tmp8_new, tmp8_clk_ori, tmp8_clk_new; > - > - tmp8_ori = r8712_read8(padapter, 0x102502f1); > - tmp8_new = tmp8_ori & 0xf7; > - if (tmp8_ori != tmp8_new) > - r8712_write8(padapter, 0x102502f1, tmp8_new); > - tmp8_clk_ori = r8712_read8(padapter, 0x10250003); > - tmp8_clk_new = tmp8_clk_ori | 0x20; > - if (tmp8_clk_new != tmp8_clk_ori) > - r8712_write8(padapter, 0x10250003, tmp8_clk_new); > - if (padapter->surprise_removed) > > - goto out; > - /* select EEPROM, reset bits, set _EECS */ > - x = r8712_read8(padapter, EE_9346CR); > - if (padapter->surprise_removed) > > - goto out; > - x &= ~(_EEDI | _EEDO | _EESK | _EEM0); > - x |= _EEM1 | _EECS; > - r8712_write8(padapter, EE_9346CR, (unsigned char)x); > - /* write the read opcode and register number in that order > - * The opcode is 3bits in length, reg is 6 bits long > - */ > - shift_out_bits(padapter, EEPROM_READ_OPCODE, 3); > - shift_out_bits(padapter, reg, padapter->eeprom_address_size); > > - /* Now read the data (16 bits) in from the selected EEPROM word / > - data = shift_in_bits(padapter); > - eeprom_clean(padapter); > -out: > - if (tmp8_clk_new != tmp8_clk_ori) > - r8712_write8(padapter, 0x10250003, tmp8_clk_ori); > - if (tmp8_new != tmp8_ori) > - r8712_write8(padapter, 0x102502f1, tmp8_ori); > - return data; > -} > diff --git a/drivers/staging/rtl8712/rtl871x_eeprom.h b/drivers/staging/rtl8712/rtl871x_eeprom.h > deleted file mode 100644 > index 7bdeb2aaa025..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_eeprom.h > +++ /dev/null > @@ -1,88 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - / > -#ifndef RTL871X_EEPROM_H > -#define RTL871X_EEPROM_H > - > -#include "osdep_service.h" > - > -#define RTL8712_EEPROM_ID 0x8712 > -#define EEPROM_MAX_SIZE 256 > -#define CLOCK_RATE 50 /100us/ > - > -/- EEPROM opcodes/ > -#define EEPROM_READ_OPCODE 06 > -#define EEPROM_WRITE_OPCODE 05 > -#define EEPROM_ERASE_OPCODE 07 > -#define EEPROM_EWEN_OPCODE 19 / Erase/write enable/ > -#define EEPROM_EWDS_OPCODE 16 / Erase/write disable/ > - > -#define EEPROM_CID_DEFAULT 0x0 > -#define EEPROM_CID_ALPHA 0x1 > -#define EEPROM_CID_Senao 0x3 > -#define EEPROM_CID_NetCore 0x5 > -#define EEPROM_CID_CAMEO 0X8 > -#define EEPROM_CID_SITECOM 0x9 > -#define EEPROM_CID_COREGA 0xB > -#define EEPROM_CID_EDIMAX_BELKIN 0xC > -#define EEPROM_CID_SERCOMM_BELKIN 0xE > -#define EEPROM_CID_CAMEO1 0xF > -#define EEPROM_CID_WNC_COREGA 0x12 > -#define EEPROM_CID_CLEVO 0x13 > -#define EEPROM_CID_WHQL 0xFE > - > -enum RT_CUSTOMER_ID { > - RT_CID_DEFAULT = 0, > - RT_CID_8187_ALPHA0 = 1, > - RT_CID_8187_SERCOMM_PS = 2, > - RT_CID_8187_HW_LED = 3, > - RT_CID_8187_NETGEAR = 4, > - RT_CID_WHQL = 5, > - RT_CID_819x_CAMEO = 6, > - RT_CID_819x_RUNTOP = 7, > - RT_CID_819x_Senao = 8, > - RT_CID_TOSHIBA = 9, > - RT_CID_819x_Netcore = 10, > - RT_CID_Nettronix = 11, > - RT_CID_DLINK = 12, > - RT_CID_PRONET = 13, > - RT_CID_COREGA = 14, > - RT_CID_819x_ALPHA = 15, > - RT_CID_819x_Sitecom = 16, > - RT_CID_CCX = 17, > - RT_CID_819x_Lenovo = 18, > - RT_CID_819x_QMI = 19, > - RT_CID_819x_Edimax_Belkin = 20, > - RT_CID_819x_Sercomm_Belkin = 21, > - RT_CID_819x_CAMEO1 = 22, > - RT_CID_819x_MSI = 23, > - RT_CID_819x_Acer = 24, > - RT_CID_819x_AzWave_ASUS = 25, > - RT_CID_819x_AzWave = 26, > - RT_CID_819x_WNC_COREGA = 27, > - RT_CID_819x_CLEVO = 28, > -}; > - > -struct eeprom_priv { > - u8 bautoload_fail_flag; > - u8 bempty; > - u8 sys_config; > - u8 mac_addr[6]; > - u8 config0; > - u16 channel_plan; > - u8 country_string[3]; > - u8 tx_power_b[15]; > - u8 tx_power_g[15]; > - u8 tx_power_a[201]; > - u8 efuse_eeprom_data[EEPROM_MAX_SIZE]; > - enum RT_CUSTOMER_ID CustomerID; > -}; > - > -void r8712_eeprom_write16(struct _adapter padapter, u16 reg, u16 data); > -u16 r8712_eeprom_read16(struct _adapter padapter, u16 reg); > - > -#endif /RTL871X_EEPROM_H/ > - > diff --git a/drivers/staging/rtl8712/rtl871x_event.h b/drivers/staging/rtl8712/rtl871x_event.h > deleted file mode 100644 > index 0cc780cf4341..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_event.h > +++ /dev/null > @@ -1,109 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/****** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > -#ifndef RTL871x_EVENT_H > -#define RTL871x_EVENT_H > - > -#include "osdep_service.h" > - > -#include "wlan_bssdef.h" > -#include <linux/semaphore.h> > > -#include <linux/sem.h> > > - > -/* > - * Used to report a bss has been scanned > - / > -struct survey_event { > - struct wlan_bssid_ex bss; > -}; > - > -/ > - * Used to report that the requested site survey has been done. > - * bss_cnt indicates the number of bss that has been reported. > - / > -struct surveydone_event { > - unsigned int bss_cnt; > - > -}; > - > -/ > - * Used to report the link result of joining the given bss > - * join_res: > - * -1: authentication fail > - * -2: association fail > - * > 0: TID > > - / > -struct joinbss_event { > - struct wlan_network network; > -}; > - > -/ > - * Used to report a given STA has joinned the created BSS. > - * It is used in AP/Ad-HoC(M) mode. > - / > -struct stassoc_event { > - unsigned char macaddr[6]; > - unsigned char rsvd[2]; > - __le32 cam_id; > -}; > - > -struct stadel_event { > - unsigned char macaddr[6]; > - unsigned char rsvd[2]; > -}; > - > -struct addba_event { > - unsigned int tid; > -}; > - > -#define GEN_EVT_CODE(event) event ## EVT > - > -struct fwevent { > - u32 parmsize; > - void (event_callback)(struct _adapter dev, u8 pbuf); > -}; > - > -#define C2HEVENT_SZ 32 > -struct event_node { > - unsigned char node; > - unsigned char evt_code; > - unsigned short evt_sz; > - /volatile/ int caller_ff_tail; > - int caller_ff_sz; > -}; > - > -struct c2hevent_queue { > - /volatile/ int head; > - /volatile/ int tail; > - struct event_node nodes[C2HEVENT_SZ]; > - unsigned char seq; > -}; > - > -#define NETWORK_QUEUE_SZ 4 > - > -struct network_queue { > - /volatile/ int head; > - /volatile/ int tail; > - struct wlan_bssid_ex networks[NETWORK_QUEUE_SZ]; > -}; > - > -struct ADDBA_Req_Report_parm { > - unsigned char MacAddress[ETH_ALEN]; > - unsigned short StartSeqNum; > - unsigned char tid; > -}; > - > -#include "rtl8712_event.h" > - > -#endif / WLANEVENT_H / > - > diff --git a/drivers/staging/rtl8712/rtl871x_ht.h b/drivers/staging/rtl8712/rtl871x_ht.h > deleted file mode 100644 > index ebd78665775d..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_ht.h > +++ /dev/null > @@ -1,33 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/************************************************************************ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - **/ > -#ifndef RTL871X_HT_H > -#define RTL871X_HT_H > - > -#include "osdep_service.h" > -#include "wifi.h" > - > -struct ht_priv { > - unsigned int ht_option; > - unsigned int ampdu_enable;/for enable Tx A-MPDU/ > - unsigned char baddbareq_issued[16]; > - unsigned int tx_amsdu_enable;/for enable Tx A-MSDU / > - unsigned int tx_amdsu_maxlen; / 1: 8k, 0:4k ; default:8k, for tx / > - unsigned int rx_ampdu_maxlen; / for rx reordering ctrl win_sz, > - * updated when join_callback. > - / > - struct ieee80211_ht_cap ht_cap; > -}; > - > -#endif /RTL871X_HT_H / > - > diff --git a/drivers/staging/rtl8712/rtl871x_io.c b/drivers/staging/rtl8712/rtl871x_io.c > deleted file mode 100644 > index 20e080e284dd..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_io.c > +++ /dev/null > @@ -1,147 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/ > - * rtl871x_io.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - *****************************************************************************/ > -/ > - * > - * The purpose of rtl871x_io.c > - * > - * a. provides the API > - * b. provides the protocol engine > - * c. provides the software interface between caller and the hardware interface > - * > - * For r8712u, both sync/async operations are provided. > - * > - * Only sync read/write_mem operations are provided. > - * > - */ > - > -#define RTL871X_IO_C > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "rtl871x_io.h" > -#include "osdep_intf.h" > -#include "usb_ops.h" > - > -static uint _init_intf_hdl(struct _adapter *padapter, > - struct intf_hdl *pintf_hdl) > -{ > - struct intf_priv *pintf_priv; > - void (*set_intf_option)(u32 *poption) = NULL; > - void (*set_intf_funs)(struct intf_hdl *pintf_hdl); > - void (*set_intf_ops)(struct _io_ops *pops); > - uint (*init_intf_priv)(struct intf_priv *pintfpriv); > - > - set_intf_option = &(r8712_usb_set_intf_option); > - set_intf_funs = &(r8712_usb_set_intf_funs); > - set_intf_ops = &r8712_usb_set_intf_ops; > - init_intf_priv = &r8712_usb_init_intf_priv; > - pintf_priv = kmalloc(sizeof(*pintf_priv), GFP_ATOMIC); > - pintf_hdl->pintfpriv = pintf_priv; > > - if (!pintf_priv) > - goto _init_intf_hdl_fail; > - pintf_hdl->adapter = (u8 *)padapter; > > - set_intf_option(&pintf_hdl->intf_option); > > - set_intf_funs(pintf_hdl); > - set_intf_ops(&pintf_hdl->io_ops); > > - pintf_priv->intf_dev = (u8 *)&padapter->dvobjpriv; > > - if (init_intf_priv(pintf_priv) == _FAIL) > - goto _init_intf_hdl_fail; > - return _SUCCESS; > -_init_intf_hdl_fail: > - kfree(pintf_priv); > - return _FAIL; > -} > - > -static void _unload_intf_hdl(struct intf_priv *pintfpriv) > -{ > - void (*unload_intf_priv)(struct intf_priv *pintfpriv); > - > - unload_intf_priv = &r8712_usb_unload_intf_priv; > - unload_intf_priv(pintfpriv); > - kfree(pintfpriv); > -} > - > -static uint register_intf_hdl(u8 *dev, struct intf_hdl *pintfhdl) > -{ > - struct _adapter *adapter = (struct _adapter *)dev; > - > - pintfhdl->intf_option = 0; > > - pintfhdl->adapter = dev; > > - pintfhdl->intf_dev = (u8 *)&adapter->dvobjpriv; > > - if (!_init_intf_hdl(adapter, pintfhdl)) > - goto register_intf_hdl_fail; > - return _SUCCESS; > -register_intf_hdl_fail: > - return false; > -} > - > -static void unregister_intf_hdl(struct intf_hdl *pintfhdl) > -{ > - _unload_intf_hdl(pintfhdl->pintfpriv); > > - memset((u8 *)pintfhdl, 0, sizeof(struct intf_hdl)); > -} > - > -uint r8712_alloc_io_queue(struct _adapter *adapter) > -{ > - u32 i; > - struct io_queue *pio_queue; > - struct io_req *pio_req; > - > - pio_queue = kmalloc(sizeof(*pio_queue), GFP_ATOMIC); > - if (!pio_queue) > - goto alloc_io_queue_fail; > - INIT_LIST_HEAD(&pio_queue->free_ioreqs); > > - INIT_LIST_HEAD(&pio_queue->processing); > > - INIT_LIST_HEAD(&pio_queue->pending); > > - spin_lock_init(&pio_queue->lock); > > - pio_queue->pallocated_free_ioreqs_buf = kzalloc(NUM_IOREQ * > > - (sizeof(struct io_req)) + 4, > - GFP_ATOMIC); > - if ((pio_queue->pallocated_free_ioreqs_buf) == NULL) > > - goto alloc_io_queue_fail; > - pio_queue->free_ioreqs_buf = pio_queue->pallocated_free_ioreqs_buf + 4 > > - - ((addr_t)(pio_queue->pallocated_free_ioreqs_buf) > > - & 3); > - pio_req = (struct io_req *)(pio_queue->free_ioreqs_buf); > > - for (i = 0; i < NUM_IOREQ; i++) { > - INIT_LIST_HEAD(&pio_req->list); > > - list_add_tail(&pio_req->list, &pio_queue->free_ioreqs); > > - pio_req++; > - } > - if ((register_intf_hdl((u8 *)adapter, &pio_queue->intf)) == _FAIL) > > - goto alloc_io_queue_fail; > - adapter->pio_queue = pio_queue; > > - return _SUCCESS; > -alloc_io_queue_fail: > - if (pio_queue) { > - kfree(pio_queue->pallocated_free_ioreqs_buf); > > - kfree(pio_queue); > - } > - adapter->pio_queue = NULL; > > - return _FAIL; > -} > - > -void r8712_free_io_queue(struct _adapter *adapter) > -{ > - struct io_queue *pio_queue = adapter->pio_queue; > > - > - if (pio_queue) { > - kfree(pio_queue->pallocated_free_ioreqs_buf); > > - adapter->pio_queue = NULL; > > - unregister_intf_hdl(&pio_queue->intf); > > - kfree(pio_queue); > - } > -} > diff --git a/drivers/staging/rtl8712/rtl871x_io.h b/drivers/staging/rtl8712/rtl871x_io.h > deleted file mode 100644 > index f09d50a29b82..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_io.h > +++ /dev/null > @@ -1,236 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - *****************************************************/ > -#ifndef RTL871X_IO_H > -#define RTL871X_IO_H > - > -#include "osdep_service.h" > -#include "osdep_intf.h" > - > -#define NUM_IOREQ 8 > - > -#define MAX_PROT_SZ (64-16) > - > -#define _IOREADY 0 > -#define _IO_WAIT_COMPLETE 1 > -#define _IO_WAIT_RSP 2 > - > -/ IO COMMAND TYPE / > -#define IOSZ_MASK (0x7F) > -#define IO_WRITE BIT(7) > -#define IO_FIXED BIT(8) > -#define IO_BURST BIT(9) > -#define IO_BYTE BIT(10) > -#define IO_HW BIT(11) > -#define IO_WORD BIT(12) > -#define IO_SYNC BIT(13) > -#define IO_CMDMASK (0x1F80) > - > -/ > - * For prompt mode accessing, caller shall free io_req > - * Otherwise, io_handler will free io_req > - / > -/ IO STATUS TYPE / > -#define IO_ERR BIT(2) > -#define IO_SUCCESS BIT(1) > -#define IO_DONE BIT(0) > -#define IO_RD32 (IO_SYNC | IO_WORD) > -#define IO_RD16 (IO_SYNC | IO_HW) > -#define IO_RD8 (IO_SYNC | IO_BYTE) > -#define IO_RD32_ASYNC (IO_WORD) > -#define IO_RD16_ASYNC (IO_HW) > -#define IO_RD8_ASYNC (IO_BYTE) > -#define IO_WR32 (IO_WRITE | IO_SYNC | IO_WORD) > -#define IO_WR16 (IO_WRITE | IO_SYNC | IO_HW) > -#define IO_WR8 (IO_WRITE | IO_SYNC | IO_BYTE) > -#define IO_WR32_ASYNC (IO_WRITE | IO_WORD) > -#define IO_WR16_ASYNC (IO_WRITE | IO_HW) > -#define IO_WR8_ASYNC (IO_WRITE | IO_BYTE) > -/ > - * Only Sync. burst accessing is provided. > - / > -#define IO_WR_BURST(x) (IO_WRITE_ | IO_SYNC | IO_BURST | \ > - ((x) & IOSZ_MASK)) > -#define IO_RD_BURST(x) (IO_SYNC | IO_BURST | ((x) & IOSZ_MASK)) > -/below is for the intf_option bit definition.../ > -#define INTF_ASYNC BIT(0) /support async io/ > -struct intf_priv; > -struct intf_hdl; > -struct io_queue; > -struct _io_ops { > - uint (_sdbus_read_bytes_to_membuf)(struct intf_priv pintfpriv, > - u32 addr, u32 cnt, u8 pbuf); > - uint (_sdbus_read_blocks_to_membuf)(struct intf_priv pintfpriv, > - u32 addr, u32 cnt, u8 pbuf); > - u8 (_read8)(struct intf_hdl pintfhdl, u32 addr); > - u16 (_read16)(struct intf_hdl pintfhdl, u32 addr); > - u32 (_read32)(struct intf_hdl pintfhdl, u32 addr); > - uint (_sdbus_write_blocks_from_membuf)(struct intf_priv pintfpriv, > - u32 addr, u32 cnt, u8 pbuf, > - u8 async); > - uint (_sdbus_write_bytes_from_membuf)(struct intf_priv pintfpriv, > - u32 addr, u32 cnt, u8 pbuf); > - u8 (_cmd52r)(struct intf_priv pintfpriv, u32 addr); > - void (_cmd52w)(struct intf_priv pintfpriv, u32 addr, u8 val8); > - u8 (_cmdfunc152r)(struct intf_priv pintfpriv, u32 addr); > - void (_cmdfunc152w)(struct intf_priv pintfpriv, u32 addr, u8 val8); > - void (_write8)(struct intf_hdl pintfhdl, u32 addr, u8 val); > - void (_write16)(struct intf_hdl pintfhdl, u32 addr, u16 val); > - void (_write32)(struct intf_hdl pintfhdl, u32 addr, u32 val); > - void (_read_mem)(struct intf_hdl pintfhdl, u32 addr, u32 cnt, > - u8 pmem); > - void (_write_mem)(struct intf_hdl pintfhdl, u32 addr, u32 cnt, > - u8 pmem); > - void (_sync_irp_protocol_rw)(struct io_queue pio_q); > - u32 (_read_port)(struct intf_hdl pintfhdl, u32 addr, u32 cnt, > - u8 pmem); > - u32 (_write_port)(struct intf_hdl pintfhdl, u32 addr, u32 cnt, > - u8 pmem); > -}; > - > -struct io_req { > - struct list_head list; > - u32 addr; > - /volatile/ u32 val; > - u32 command; > - u32 status; > - u8 pbuf; > - void (_async_io_callback)(struct _adapter padapter, > - struct io_req pio_req, u8 cnxt); > - u8 cnxt; > -}; > - > -struct intf_hdl { > - u32 intf_option; > - u8 adapter; > - u8 intf_dev; > - struct intf_priv pintfpriv; > - void (intf_hdl_init)(u8 priv); > - void (intf_hdl_unload)(u8 priv); > - void (intf_hdl_open)(u8 priv); > - void (intf_hdl_close)(u8 priv); > - struct _io_ops io_ops; > -}; > - > -struct reg_protocol_rd { > -#ifdef __LITTLE_ENDIAN > - / DW1 / > - u32 NumOfTrans:4; > - u32 Reserved1:4; > - u32 Reserved2:24; > - / DW2 / > - u32 ByteCount:7; > - u32 WriteEnable:1; /0:read, 1:write/ > - u32 FixOrContinuous:1; /0:continuous, 1: Fix/ > - u32 BurstMode:1; > - u32 Byte1Access:1; > - u32 Byte2Access:1; > - u32 Byte4Access:1; > - u32 Reserved3:3; > - u32 Reserved4:16; > - /DW3/ > - u32 BusAddress; > - /DW4/ > -#else > -/DW1/ > - u32 Reserved1:4; > - u32 NumOfTrans:4; > - u32 Reserved2:24; > - /DW2/ > - u32 WriteEnable:1; > - u32 ByteCount:7; > - u32 Reserved3:3; > - u32 Byte4Access:1; > - u32 Byte2Access:1; > - u32 Byte1Access:1; > - u32 BurstMode:1; > - u32 FixOrContinuous:1; > - u32 Reserved4:16; > - /DW3/ > - u32 BusAddress; > - /DW4/ > -#endif > -}; > - > -struct reg_protocol_wt { > -#ifdef __LITTLE_ENDIAN > - /DW1/ > - u32 NumOfTrans:4; > - u32 Reserved1:4; > - u32 Reserved2:24; > - /DW2/ > - u32 ByteCount:7; > - u32 WriteEnable:1; /0:read, 1:write/ > - u32 FixOrContinuous:1; /0:continuous, 1: Fix/ > - u32 BurstMode:1; > - u32 Byte1Access:1; > - u32 Byte2Access:1; > - u32 Byte4Access:1; > - u32 Reserved3:3; > - u32 Reserved4:16; > - /DW3/ > - u32 BusAddress; > - /DW4/ > - u32 Value; > -#else > - /DW1/ > - u32 Reserved1:4; > - u32 NumOfTrans:4; > - u32 Reserved2:24; > - /DW2/ > - u32 WriteEnable:1; > - u32 ByteCount:7; > - u32 Reserved3:3; > - u32 Byte4Access:1; > - u32 Byte2Access:1; > - u32 Byte1Access:1; > - u32 BurstMode:1; > - u32 FixOrContinuous:1; > - u32 Reserved4:16; > - /DW3/ > - u32 BusAddress; > - /DW4/ > - u32 Value; > -#endif > -}; > - > -/ > - * Below is the data structure used by _io_handler > - / > - > -struct io_queue { > - spinlock_t lock; > - struct list_head free_ioreqs; > - /The io_req list that will be served in the single protocol r/w./ > - struct list_head pending; > - struct list_head processing; > - u8 free_ioreqs_buf; / 4-byte aligned / > - u8 pallocated_free_ioreqs_buf; > - struct intf_hdl intf; > -}; > - > -u8 r8712_read8(struct _adapter adapter, u32 addr); > -u16 r8712_read16(struct _adapter adapter, u32 addr); > -u32 r8712_read32(struct _adapter adapter, u32 addr); > -void r8712_read_mem(struct _adapter adapter, u32 addr, u32 cnt, u8 pmem); > -void r8712_read_port(struct _adapter adapter, u32 addr, u32 cnt, u8 pmem); > -void r8712_write8(struct _adapter adapter, u32 addr, u8 val); > -void r8712_write16(struct _adapter adapter, u32 addr, u16 val); > -void r8712_write32(struct _adapter adapter, u32 addr, u32 val); > -void r8712_write_mem(struct _adapter adapter, u32 addr, u32 cnt, u8 pmem); > -void r8712_write_port(struct _adapter adapter, u32 addr, u32 cnt, u8 pmem); > -/ioreq / > -uint r8712_alloc_io_queue(struct _adapter adapter); > -void r8712_free_io_queue(struct _adapter adapter); > - > -#endif /RTL871X_IO_H/ > diff --git a/drivers/staging/rtl8712/rtl871x_ioctl.h b/drivers/staging/rtl8712/rtl871x_ioctl.h > deleted file mode 100644 > index d6332a8c7f4f..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_ioctl.h > +++ /dev/null > @@ -1,94 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -#ifndef __IOCTL_H > -#define __IOCTL_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > - > -#ifndef OID_802_11_CAPABILITY > - #define OID_802_11_CAPABILITY 0x0d010122 > -#endif > - > -#ifndef OID_802_11_PMKID > - #define OID_802_11_PMKID 0x0d010123 > -#endif > - > -/ For DDK-defined OIDs/ > -#define OID_NDIS_SEG1 0x00010100 > -#define OID_NDIS_SEG2 0x00010200 > -#define OID_NDIS_SEG3 0x00020100 > -#define OID_NDIS_SEG4 0x01010100 > -#define OID_NDIS_SEG5 0x01020100 > -#define OID_NDIS_SEG6 0x01020200 > -#define OID_NDIS_SEG7 0xFD010100 > -#define OID_NDIS_SEG8 0x0D010100 > -#define OID_NDIS_SEG9 0x0D010200 > -#define OID_NDIS_SEG10 0x0D020200 > -#define SZ_OID_NDIS_SEG1 23 > -#define SZ_OID_NDIS_SEG2 3 > -#define SZ_OID_NDIS_SEG3 6 > -#define SZ_OID_NDIS_SEG4 6 > -#define SZ_OID_NDIS_SEG5 4 > -#define SZ_OID_NDIS_SEG6 8 > -#define SZ_OID_NDIS_SEG7 7 > -#define SZ_OID_NDIS_SEG8 36 > -#define SZ_OID_NDIS_SEG9 24 > -#define SZ_OID_NDIS_SEG10 19 > - > -/ For Realtek-defined OIDs/ > -#define OID_MP_SEG1 0xFF871100 > -#define OID_MP_SEG2 0xFF818000 > -#define OID_MP_SEG3 0xFF818700 > -#define OID_MP_SEG4 0xFF011100 > - > -enum oid_type { > - QUERY_OID, > - SET_OID > -}; > - > -struct oid_funs_node { > - unsigned int oid_start; /the starting number for OID/ > - unsigned int oid_end; /the ending number for OID/ > - struct oid_obj_priv node_array; > - unsigned int array_sz; /the size of node_array/ > - int query_counter; /count the number of query hits for this segment/ > - int set_counter; /count the number of set hits for this segment/ > -}; > - > -struct oid_par_priv { > - void adapter_context; > - uint oid; > - void information_buf; > - unsigned long information_buf_len; > - unsigned long bytes_rw; > - unsigned long bytes_needed; > - enum oid_type type_of_oid; > - unsigned int dbg; > -}; > - > -struct oid_obj_priv { > - unsigned char dbg; / 0: without OID debug message > - * 1: with OID debug message > - / > - uint (oidfuns)(struct oid_par_priv poid_par_priv); > -}; > - > -uint oid_null_function(struct oid_par_priv poid_par_priv); > - > -extern struct iw_handler_def r871x_handlers_def; > - > -uint drv_query_info(struct net_device MiniportAdapterContext, > - uint Oid, > - void InformationBuffer, > - u32 InformationBufferLength, > - u32 BytesWritten, > - u32 BytesNeeded); > - > -uint drv_set_info(struct net_device MiniportAdapterContext, > - uint Oid, > - void InformationBuffer, > - u32 InformationBufferLength, > - u32 BytesRead, > - u32 BytesNeeded); > - > -#endif > diff --git a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c b/drivers/staging/rtl8712/rtl871x_ioctl_linux.c > deleted file mode 100644 > index 832c6c64aa68..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_ioctl_linux.c > +++ /dev/null > @@ -1,2276 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/ > - * rtl871x_ioctl_linux.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RTL871X_IOCTL_LINUX_C > -#define RTL871X_MP_IOCTL_C > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "wlan_bssdef.h" > -#include "rtl871x_debug.h" > -#include "wifi.h" > -#include "rtl871x_mlme.h" > -#include "rtl871x_ioctl.h" > -#include "rtl871x_ioctl_set.h" > -#include "rtl871x_mp_ioctl.h" > -#include "rtl871x_security.h" > -#include "mlme_osdep.h" > -#include <linux/wireless.h> > > -#include <linux/module.h> > > -#include <linux/kernel.h> > > -#include <linux/io.h> > > -#include <linux/semaphore.h> > > -#include <net/iw_handler.h> > > -#include <linux/if_arp.h> > > -#include <linux/etherdevice.h> > > - > -#define RTL_IOCTL_WPA_SUPPLICANT (SIOCIWFIRSTPRIV + 0x1E) > - > -#define SCAN_ITEM_SIZE 768 > -#define MAX_CUSTOM_LEN 64 > -#define RATE_COUNT 4 > - > -static const u32 rtl8180_rates[] = {1000000, 2000000, 5500000, 11000000, > - 6000000, 9000000, 12000000, 18000000, > - 24000000, 36000000, 48000000, 54000000}; > - > -static const long ieee80211_wlan_frequencies[] = { > - 2412, 2417, 2422, 2427, > - 2432, 2437, 2442, 2447, > - 2452, 2457, 2462, 2467, > - 2472, 2484 > -}; > - > -void r8712_indicate_wx_assoc_event(struct _adapter *padapter) > -{ > - union iwreq_data wrqu; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - > - wrqu.ap_addr.sa_family = ARPHRD_ETHER; > - memcpy(wrqu.ap_addr.sa_data, pmlmepriv->cur_network.network.MacAddress, ETH_ALEN); > > - wireless_send_event(padapter->pnetdev, SIOCGIWAP, &wrqu, NULL); > > -} > - > -void r8712_indicate_wx_disassoc_event(struct _adapter *padapter) > -{ > - union iwreq_data wrqu; > - > - wrqu.ap_addr.sa_family = ARPHRD_ETHER; > - eth_zero_addr(wrqu.ap_addr.sa_data); > - wireless_send_event(padapter->pnetdev, SIOCGIWAP, &wrqu, NULL); > > -} > - > -static inline void handle_pairwise_key(struct sta_info *psta, > - struct ieee_param *param, > - struct _adapter padapter) > -{ > - / pairwise key */ > - memcpy(psta->x_UncstKey.skey, param->u.crypt.key, > > - (param->u.crypt. key_len > 16 ? 16 : param->u.crypt.key_len)); > > - if (strcmp(param->u.crypt.alg, "TKIP") == 0) { /* set mic key */ > > - memcpy(psta->tkiptxmickey. skey, > > - ¶m->u.crypt.key[16], 8); > > - memcpy(psta->tkiprxmickey. skey, > > - ¶m->u.crypt.key[24], 8); > > - padapter->securitypriv. busetkipkey = false; > > - mod_timer(&padapter->securitypriv.tkip_timer, > > - jiffies + msecs_to_jiffies(50)); > - } > - r8712_setstakey_cmd(padapter, (unsigned char *)psta, true); > -} > - > -static inline void handle_group_key(struct ieee_param *param, > - struct _adapter *padapter) > -{ > - union Keytype *gk = padapter->securitypriv.XGrpKey; > > - union Keytype *gtk = padapter->securitypriv.XGrptxmickey; > > - union Keytype *grk = padapter->securitypriv.XGrprxmickey; > > - > - if (param->u.crypt.idx > 0 && > > - param->u.crypt.idx < 3) { > > - /* group key idx is 1 or 2 */ > - memcpy(gk[param->u.crypt.idx - 1].skey, > > - param->u.crypt.key, > > - (param->u.crypt.key_len > 16 ? 16 : > > - param->u.crypt.key_len)); > > - memcpy(gtk[param->u.crypt.idx - 1].skey, > > - ¶m->u.crypt.key[16], 8); > > - memcpy(grk[param->u.crypt.idx - 1].skey, > > - ¶m->u.crypt.key[24], 8); > > - padapter->securitypriv.binstallGrpkey = true; > > - r8712_set_key(padapter, &padapter->securitypriv, param->u.crypt.idx); > > - if (padapter->registrypriv.power_mgnt > PS_MODE_ACTIVE) { > > - if (padapter->registrypriv.power_mgnt != padapter->pwrctrlpriv.pwr_mode) > > - mod_timer(&padapter->mlmepriv.dhcp_timer, > > - jiffies + msecs_to_jiffies(60000)); > - } > - } > -} > - > -static noinline_for_stack char *translate_scan_wpa(struct iw_request_info *info, > - struct wlan_network *pnetwork, > - struct iw_event *iwe, > - char *start, char stop) > -{ > - / parsing WPA/WPA2 IE */ > - u8 buf[MAX_WPA_IE_LEN]; > - u8 wpa_ie[255], rsn_ie[255]; > - u16 wpa_len = 0, rsn_len = 0; > - int n, i; > - > - r8712_get_sec_ie(pnetwork->network.IEs, > > - pnetwork->network.IELength, rsn_ie, &rsn_len, > > - wpa_ie, &wpa_len); > - if (wpa_len > 0) { > > - memset(buf, 0, MAX_WPA_IE_LEN); > - n = sprintf(buf, "wpa_ie="); > - for (i = 0; i < wpa_len; i++) { > - n += scnprintf(buf + n, MAX_WPA_IE_LEN - n, > - "%02x", wpa_ie[i]); > - if (n == MAX_WPA_IE_LEN - 1) > - break; > - } > - memset(iwe, 0, sizeof(*iwe)); > - iwe->cmd = IWEVCUSTOM; > > - iwe->u.data.length = (u16)strlen(buf); > > - start = iwe_stream_add_point(info, start, stop, iwe, buf); > - memset(iwe, 0, sizeof(*iwe)); > - iwe->cmd = IWEVGENIE; > > - iwe->u.data.length = (u16)wpa_len; > > - start = iwe_stream_add_point(info, start, stop, iwe, wpa_ie); > - } > - if (rsn_len > 0) { > > - memset(buf, 0, MAX_WPA_IE_LEN); > - n = sprintf(buf, "rsn_ie="); > - for (i = 0; i < rsn_len; i++) { > - n += scnprintf(buf + n, MAX_WPA_IE_LEN - n, > - "%02x", rsn_ie[i]); > - if (n == MAX_WPA_IE_LEN - 1) > - break; > - } > - memset(iwe, 0, sizeof(*iwe)); > - iwe->cmd = IWEVCUSTOM; > > - iwe->u.data.length = strlen(buf); > > - start = iwe_stream_add_point(info, start, stop, iwe, buf); > - memset(iwe, 0, sizeof(*iwe)); > - iwe->cmd = IWEVGENIE; > > - iwe->u.data.length = rsn_len; > > - start = iwe_stream_add_point(info, start, stop, iwe, rsn_ie); > - } > - > - return start; > -} > - > -static noinline_for_stack char *translate_scan_wps(struct iw_request_info *info, > - struct wlan_network *pnetwork, > - struct iw_event *iwe, > - char *start, char stop) > -{ > - / parsing WPS IE */ > - u8 wps_ie[512]; > - uint wps_ielen; > - > - if (r8712_get_wps_ie(pnetwork->network.IEs, pnetwork->network.IELength, wps_ie, &wps_ielen)) { > > - if (wps_ielen > 2) { > > - iwe->cmd = IWEVGENIE; > > - iwe->u.data.length = (u16)wps_ielen; > > - start = iwe_stream_add_point(info, start, stop, iwe, wps_ie); > - } > - } > - > - return start; > -} > - > -static char *translate_scan(struct _adapter *padapter, > - struct iw_request_info *info, > - struct wlan_network *pnetwork, > - char *start, char *stop) > -{ > - struct iw_event iwe; > - char *current_val; > - s8 *p; > - u32 i = 0, ht_ielen = 0; > - u16 cap, ht_cap = false; > - u8 rssi; > - > - if ((pnetwork->network.Configuration.DSConfig < 1) || > > - (pnetwork->network.Configuration.DSConfig > 14)) { > > - if (pnetwork->network.Configuration.DSConfig < 1) > > - pnetwork->network.Configuration.DSConfig = 1; > > - else > - pnetwork->network.Configuration.DSConfig = 14; > > - } > - /* AP MAC address */ > - iwe.cmd = SIOCGIWAP; > - iwe.u.ap_addr.sa_family = ARPHRD_ETHER; > - ether_addr_copy(iwe.u.ap_addr.sa_data, pnetwork->network.MacAddress); > > - start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_ADDR_LEN); > - /* Add the ESSID */ > - iwe.cmd = SIOCGIWESSID; > - iwe.u.data.flags = 1; > - iwe.u.data.length = min_t(u32, pnetwork->network.Ssid.SsidLength, 32); > > - start = iwe_stream_add_point(info, start, stop, &iwe, > - pnetwork->network.Ssid.Ssid); > > - /* parsing HT_CAP_IE */ > - p = r8712_get_ie(&pnetwork->network.IEs[12], WLAN_EID_HT_CAPABILITY, > > - &ht_ielen, pnetwork->network.IELength - 12); > > - if (p && ht_ielen > 0) > > - ht_cap = true; > - /* Add the protocol name */ > - iwe.cmd = SIOCGIWNAME; > - if (r8712_is_cckratesonly_included(pnetwork->network.rates)) { > > - if (ht_cap) > - snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11bn"); > - else > - snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11b"); > - } else if (r8712_is_cckrates_included(pnetwork->network.rates)) { > > - if (ht_cap) > - snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11bgn"); > - else > - snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11bg"); > - } else { > - if (ht_cap) > - snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11gn"); > - else > - snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11g"); > - } > - start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_CHAR_LEN); > - /* Add mode */ > - iwe.cmd = SIOCGIWMODE; > - memcpy((u8 *)&cap, r8712_get_capability_from_ie(pnetwork->network.IEs), 2); > > - le16_to_cpus(&cap); > - if (cap & (WLAN_CAPABILITY_IBSS | WLAN_CAPABILITY_ESS)) { > - if (cap & WLAN_CAPABILITY_ESS) > - iwe.u.mode = (u32)IW_MODE_MASTER; > - else > - iwe.u.mode = (u32)IW_MODE_ADHOC; > - start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_UINT_LEN); > - } > - /* Add frequency/channel / > - iwe.cmd = SIOCGIWFREQ; > - { > - / check legal index */ > - u8 dsconfig = pnetwork->network.Configuration.DSConfig; > > - > - if (dsconfig >= 1 && dsconfig <= sizeof(ieee80211_wlan_frequencies) / sizeof(long)) > > - iwe.u.freq.m = (s32)(ieee80211_wlan_frequencies[dsconfig - 1] * 100000); > - else > - iwe.u.freq.m = 0; > - } > - iwe.u.freq.e = (s16)1; > - iwe.u.freq.i = (u8)pnetwork->network.Configuration.DSConfig; > > - start = iwe_stream_add_event(info, start, stop, &iwe, > - IW_EV_FREQ_LEN); > - /* Add encryption capability */ > - iwe.cmd = SIOCGIWENCODE; > - if (cap & WLAN_CAPABILITY_PRIVACY) > - iwe.u.data.flags = (u16)(IW_ENCODE_ENABLED | IW_ENCODE_NOKEY); > - else > - iwe.u.data.flags = (u16)(IW_ENCODE_DISABLED); > - iwe.u.data.length = (u16)0; > - start = iwe_stream_add_point(info, start, stop, &iwe, pnetwork->network.Ssid.Ssid); > > - /*Add basic and extended rates */ > - current_val = start + iwe_stream_lcp_len(info); > - iwe.cmd = SIOCGIWRATE; > - iwe.u.bitrate.fixed = 0; > - iwe.u.bitrate.disabled = 0; > - iwe.u.bitrate.value = 0; > - i = 0; > - while (pnetwork->network.rates[i] != 0) { > > - /* Bit rate given in 500 kb/s units */ > - iwe.u.bitrate.value = (pnetwork->network.rates[i++] & 0x7F) * 500000; > > - current_val = iwe_stream_add_value(info, start, current_val, stop, &iwe, > - IW_EV_PARAM_LEN); > - } > - /* Check if we added any event */ > - if ((current_val - start) > iwe_stream_lcp_len(info)) > > - start = current_val; > - > - start = translate_scan_wpa(info, pnetwork, &iwe, start, stop); > - > - start = translate_scan_wps(info, pnetwork, &iwe, start, stop); > - > - /* Add quality statistics */ > - iwe.cmd = IWEVQUAL; > - rssi = r8712_signal_scale_mapping(pnetwork->network.Rssi); > > - /* we only update signal_level (signal strength) that is rssi. / > - iwe.u.qual.updated = (u8)(IW_QUAL_QUAL_INVALID | IW_QUAL_LEVEL_UPDATED | IW_QUAL_NOISE_INVALID); > - iwe.u.qual.level = rssi; / signal strength / > - iwe.u.qual.qual = 0; / signal quality / > - iwe.u.qual.noise = 0; / noise level / > - start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_QUAL_LEN); > - / how to translate rssi to ?% */ > - return start; > -} > - > -static int wpa_set_auth_algs(struct net_device *dev, u32 value) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - int ret = 0; > - > - if ((value & AUTH_ALG_SHARED_KEY) && (value & AUTH_ALG_OPEN_SYSTEM)) { > - padapter->securitypriv.ndisencryptstatus = > > - Ndis802_11Encryption1Enabled; > - padapter->securitypriv.ndisauthtype = > > - Ndis802_11AuthModeAutoSwitch; > - padapter->securitypriv.auth_algorithm = AUTH_AUTHSWITCH; > > - } else if (value & AUTH_ALG_SHARED_KEY) { > - padapter->securitypriv.ndisencryptstatus = > > - Ndis802_11Encryption1Enabled; > - padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeShared; > > - padapter->securitypriv.auth_algorithm = AUTH_SHARED_SYSTEM; > > - } else if (value & AUTH_ALG_OPEN_SYSTEM) { > - if (padapter->securitypriv.ndisauthtype < > > - Ndis802_11AuthModeWPAPSK) { > - padapter->securitypriv.ndisauthtype = > > - Ndis802_11AuthModeOpen; > - padapter->securitypriv.auth_algorithm = AUTH_OPEN_SYSTEM; > > - } > - } else { > - ret = -EINVAL; > - } > - return ret; > -} > - > -static int wpa_set_encryption(struct net_device *dev, struct ieee_param *param, > - u32 param_len) > -{ > - int ret = 0; > - u32 wep_key_idx, wep_key_len = 0; > - struct NDIS_802_11_WEP *pwep = NULL; > - struct _adapter *padapter = netdev_priv(dev); > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct security_priv *psecuritypriv = &padapter->securitypriv; > > - > - param->u.crypt.err = 0; > > - param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0'; > > - if (param_len != (u32)((u8 *) param->u.crypt.key - (u8 *)param) + > > - param->u.crypt.key_len) > > - return -EINVAL; > - if (!is_broadcast_ether_addr(param->sta_addr)) > > - return -EINVAL; > - > - if (param->u.crypt.idx >= WEP_KEYS) { > > - /* for large key indices, set the default (0) */ > - param->u.crypt.idx = 0; > > - } > - if (strcmp(param->u.crypt.alg, "WEP") == 0) { > > - netdev_info(dev, "r8712u: %s: crypt.alg = WEP\n", func); > - padapter->securitypriv.ndisencryptstatus = > > - Ndis802_11Encryption1Enabled; > - padapter->securitypriv.privacy_algorithm = WEP40; > > - padapter->securitypriv.XGrpPrivacy = WEP40; > > - wep_key_idx = param->u.crypt.idx; > > - wep_key_len = param->u.crypt.key_len; > > - if (wep_key_idx >= WEP_KEYS) > > - wep_key_idx = 0; > - if (wep_key_len <= 0) > - return -EINVAL; > - > - wep_key_len = wep_key_len <= 5 ? 5 : 13; > - pwep = kzalloc(sizeof(*pwep), GFP_ATOMIC); > - if (!pwep) > - return -ENOMEM; > - pwep->KeyLength = wep_key_len; > > - pwep->Length = wep_key_len + > > - offsetof(struct NDIS_802_11_WEP, KeyMaterial); > - if (wep_key_len == 13) { > - padapter->securitypriv.privacy_algorithm = WEP104; > > - padapter->securitypriv.XGrpPrivacy = WEP104; > > - } > - pwep->KeyIndex = wep_key_idx; > > - pwep->KeyIndex |= 0x80000000; > > - memcpy(pwep->KeyMaterial, param->u.crypt.key, pwep->KeyLength); > > - if (param->u.crypt.set_tx) { > > - if (r8712_set_802_11_add_wep(padapter, pwep)) > - ret = -EOPNOTSUPP; > - } else { > - /* don't update "psecuritypriv->privacy_algorithm" and > > - * "psecuritypriv->PrivacyKeyIndex=keyid", but can > > - * r8712_set_key to fw/cam > - */ > - if (wep_key_idx >= WEP_KEYS) { > > - ret = -EOPNOTSUPP; > - goto exit; > - } > - memcpy(&psecuritypriv->DefKey[wep_key_idx].skey[0], > > - pwep->KeyMaterial, > > - pwep->KeyLength); > > - psecuritypriv->DefKeylen[wep_key_idx] = > > - pwep->KeyLength; > > - r8712_set_key(padapter, psecuritypriv, wep_key_idx); > - } > - goto exit; > - } > - if (padapter->securitypriv.auth_algorithm == AUTH_8021x) { > > - struct sta_info *psta, *pbcmc_sta; > - struct sta_priv *pstapriv = &padapter->stapriv; > > - struct security_priv *spriv = &padapter->securitypriv; > > - > - if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | > - WIFI_MP_STATE)) { /* sta mode */ > - psta = r8712_get_stainfo(pstapriv, > - get_bssid(pmlmepriv)); > - if (psta) { > - psta->ieee8021x_blocked = false; > > - if (spriv->ndisencryptstatus == > > - Ndis802_11Encryption2Enabled || > - spriv->ndisencryptstatus == > > - Ndis802_11Encryption3Enabled) > - psta->XPrivacy = spriv->privacy_algorithm; > > - if (param->u.crypt.set_tx == 1) > > - handle_pairwise_key(psta, param, > - padapter); > - else /* group key */ > - handle_group_key(param, padapter); > - } > - pbcmc_sta = r8712_get_bcmc_stainfo(padapter); > - if (pbcmc_sta) { > - pbcmc_sta->ieee8021x_blocked = false; > > - if (spriv->ndisencryptstatus == > > - Ndis802_11Encryption2Enabled || > - spriv->ndisencryptstatus == > > - Ndis802_11Encryption3Enabled) > - pbcmc_sta->XPrivacy = > > - spriv->privacy_algorithm; > > - } > - } > - } > -exit: > - kfree(pwep); > - return ret; > -} > - > -static int r871x_set_wpa_ie(struct _adapter *padapter, char *pie, > - unsigned short ielen) > -{ > - u8 *buf = NULL; > - int group_cipher = 0, pairwise_cipher = 0; > - int ret = 0; > - > - if (ielen > MAX_WPA_IE_LEN || !pie) > > - return -EINVAL; > - if (ielen) { > - buf = kmemdup(pie, ielen, GFP_ATOMIC); > - if (!buf) > - return -ENOMEM; > - if (ielen < RSN_HEADER_LEN) { > - ret = -EINVAL; > - goto exit; > - } > - if (r8712_parse_wpa_ie(buf, ielen, &group_cipher, > - &pairwise_cipher) == 0) { > - padapter->securitypriv.auth_algorithm = AUTH_8021x; > > - padapter->securitypriv.ndisauthtype = > > - Ndis802_11AuthModeWPAPSK; > - } > - if (r8712_parse_wpa2_ie(buf, ielen, &group_cipher, > - &pairwise_cipher) == 0) { > - padapter->securitypriv.auth_algorithm = AUTH_8021x; > > - padapter->securitypriv.ndisauthtype = > > - Ndis802_11AuthModeWPA2PSK; > - } > - switch (group_cipher) { > - case WPA_CIPHER_NONE: > - padapter->securitypriv.XGrpPrivacy = NO_PRIVACY; > > - padapter->securitypriv.ndisencryptstatus = Ndis802_11EncryptionDisabled; > > - break; > - case WPA_CIPHER_WEP40: > - padapter->securitypriv.XGrpPrivacy = WEP40; > > - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled; > > - break; > - case WPA_CIPHER_TKIP: > - padapter->securitypriv.XGrpPrivacy = TKIP; > > - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled; > > - break; > - case WPA_CIPHER_CCMP: > - padapter->securitypriv.XGrpPrivacy = AES; > > - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled; > > - break; > - case WPA_CIPHER_WEP104: > - padapter->securitypriv.XGrpPrivacy = WEP104; > > - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled; > > - break; > - } > - switch (pairwise_cipher) { > - case WPA_CIPHER_NONE: > - padapter->securitypriv.privacy_algorithm = NO_PRIVACY; > > - padapter->securitypriv.ndisencryptstatus = Ndis802_11EncryptionDisabled; > > - break; > - case WPA_CIPHER_WEP40: > - padapter->securitypriv.privacy_algorithm = WEP40; > > - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled; > > - break; > - case WPA_CIPHER_TKIP: > - padapter->securitypriv.privacy_algorithm = TKIP; > > - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled; > > - break; > - case WPA_CIPHER_CCMP: > - padapter->securitypriv.privacy_algorithm = AES; > > - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled; > > - break; > - case WPA_CIPHER_WEP104: > - padapter->securitypriv.privacy_algorithm = WEP104; > > - padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled; > > - break; > - } > - padapter->securitypriv.wps_phase = false; > > - {/* set wps_ie */ > - u16 cnt = 0; > - u8 eid, wps_oui[4] = {0x0, 0x50, 0xf2, 0x04}; > - > - while (cnt < ielen) { > - eid = buf[cnt]; > - > - if ((eid == WLAN_EID_VENDOR_SPECIFIC) && > - (!memcmp(&buf[cnt + 2], wps_oui, 4))) { > - netdev_info(padapter->pnetdev, "r8712u: SET WPS_IE\n"); > > - padapter->securitypriv.wps_ie_len = > > - ((buf[cnt + 1] + 2) < > - (MAX_WPA_IE_LEN << 2)) ? > - (buf[cnt + 1] + 2) : > - (MAX_WPA_IE_LEN << 2); > - memcpy(padapter->securitypriv.wps_ie, > > - &buf[cnt], > - padapter->securitypriv.wps_ie_len); > > - padapter->securitypriv.wps_phase = > > - true; > - netdev_info(padapter->pnetdev, "r8712u: SET WPS_IE, wps_phase==true\n"); > > - cnt += buf[cnt + 1] + 2; > - break; > - } > - > - cnt += buf[cnt + 1] + 2; > - } > - } > - } > -exit: > - kfree(buf); > - return ret; > -} > - > -static int r8711_wx_get_name(struct net_device *dev, struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - u32 ht_ielen = 0; > - char *p; > - u8 ht_cap = false; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network; > > - u8 prates; > - > - if (check_fwstate(pmlmepriv, _FW_LINKED | WIFI_ADHOC_MASTER_STATE) == true) { > - / parsing HT_CAP_IE */ > - p = r8712_get_ie(&pcur_bss->IEs[12], WLAN_EID_HT_CAPABILITY, > > - &ht_ielen, pcur_bss->IELength - 12); > > - if (p && ht_ielen > 0) > > - ht_cap = true; > - prates = pcur_bss->rates; > > - if (r8712_is_cckratesonly_included(prates)) { > - if (ht_cap) > - snprintf(wrqu->name, IFNAMSIZ, > > - "IEEE 802.11bn"); > - else > - snprintf(wrqu->name, IFNAMSIZ, > > - "IEEE 802.11b"); > - } else if (r8712_is_cckrates_included(prates)) { > - if (ht_cap) > - snprintf(wrqu->name, IFNAMSIZ, > > - "IEEE 802.11bgn"); > - else > - snprintf(wrqu->name, IFNAMSIZ, > > - "IEEE 802.11bg"); > - } else { > - if (ht_cap) > - snprintf(wrqu->name, IFNAMSIZ, > > - "IEEE 802.11gn"); > - else > - snprintf(wrqu->name, IFNAMSIZ, > > - "IEEE 802.11g"); > - } > - } else { > - snprintf(wrqu->name, IFNAMSIZ, "unassociated"); > > - } > - return 0; > -} > - > -static const long frequency_list[] = { > - 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, > - 2467, 2472, 2484, 4915, 4920, 4925, 4935, 4940, 4945, 4960, 4980, > - 5035, 5040, 5045, 5055, 5060, 5080, 5170, 5180, 5190, 5200, 5210, > - 5220, 5230, 5240, 5260, 5280, 5300, 5320, 5500, 5520, 5540, 5560, > - 5580, 5600, 5620, 5640, 5660, 5680, 5700, 5745, 5765, 5785, 5805, > - 5825 > -}; > - > -static int r8711_wx_set_freq(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct iw_freq *fwrq = &wrqu->freq; > > - int rc = 0; > - > -/* If setting by frequency, convert to a channel */ > - if ((fwrq->e == 1) && (fwrq->m >= 241200000) && (fwrq->m <= 248700000)) { > > - int f = fwrq->m / 100000; > > - int c = 0; > - > - while ((c < 14) && (f != frequency_list[c])) > - c++; > - fwrq->e = 0; > > - fwrq->m = c + 1; > > - } > - /* Setting by channel number */ > - if ((fwrq->m > 14) || (fwrq->e > 0)) { > > - rc = -EOPNOTSUPP; > - } else { > - int channel = fwrq->m; > > - > - if ((channel < 1) || (channel > 14)) { > > - rc = -EINVAL; > - } else { > - /* Yes ! We can set it !!! */ > - padapter->registrypriv.channel = channel; > > - } > - } > - return rc; > -} > - > -static int r8711_wx_get_freq(struct net_device *dev, struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network; > > - > - if (!check_fwstate(pmlmepriv, _FW_LINKED)) > - return -ENOLINK; > - > - wrqu->freq.m = ieee80211_wlan_frequencies[ > > - pcur_bss->Configuration.DSConfig - 1] * 100000; > > - wrqu->freq.e = 1; > > - wrqu->freq.i = pcur_bss->Configuration.DSConfig; > > - > - return 0; > -} > - > -static int r8711_wx_set_mode(struct net_device *dev, > - struct iw_request_info *a, > - union iwreq_data *wrqu, char *b) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - enum NDIS_802_11_NETWORK_INFRASTRUCTURE networkType; > - > - switch (wrqu->mode) { > > - case IW_MODE_AUTO: > - networkType = Ndis802_11AutoUnknown; > - break; > - case IW_MODE_ADHOC: > - networkType = Ndis802_11IBSS; > - break; > - case IW_MODE_MASTER: > - networkType = Ndis802_11APMode; > - break; > - case IW_MODE_INFRA: > - networkType = Ndis802_11Infrastructure; > - break; > - default: > - return -EINVAL; > - } > - if (Ndis802_11APMode == networkType) > - r8712_setopmode_cmd(padapter, networkType); > - else > - r8712_setopmode_cmd(padapter, Ndis802_11AutoUnknown); > - > - r8712_set_802_11_infrastructure_mode(padapter, networkType); > - return 0; > -} > - > -static int r8711_wx_get_mode(struct net_device *dev, struct iw_request_info *a, > - union iwreq_data *wrqu, char *b) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - > - if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) > - wrqu->mode = IW_MODE_INFRA; > > - else if (check_fwstate(pmlmepriv, > - WIFI_ADHOC_MASTER_STATE | WIFI_ADHOC_STATE)) > - wrqu->mode = IW_MODE_ADHOC; > > - else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) > - wrqu->mode = IW_MODE_MASTER; > > - else > - wrqu->mode = IW_MODE_AUTO; > > - return 0; > -} > - > -static int r871x_wx_set_pmkid(struct net_device *dev, struct iw_request_info *a, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct security_priv *psecuritypriv = &padapter->securitypriv; > > - struct iw_pmksa *pPMK = (struct iw_pmksa *) extra; > - struct RT_PMKID_LIST *pl = psecuritypriv->PMKIDList; > > - u8 strZeroMacAddress[ETH_ALEN] = {0x00}; > - u8 strIssueBssid[ETH_ALEN] = {0x00}; > - u8 j, blInserted = false; > - int intReturn = false; > - > -/* > - * There are the BSSID information in the bssid.sa_data array. > - * If cmd is IW_PMKSA_FLUSH, it means the wpa_supplicant wants to clear > - * all the PMKID information. If cmd is IW_PMKSA_ADD, it means the > - * wpa_supplicant wants to add a PMKID/BSSID to driver. > - * If cmd is IW_PMKSA_REMOVE, it means the wpa_supplicant wants to > - * remove a PMKID/BSSID from driver. > - */ > - if (!pPMK) > - return -EINVAL; > - memcpy(strIssueBssid, pPMK->bssid.sa_data, ETH_ALEN); > > - switch (pPMK->cmd) { > > - case IW_PMKSA_ADD: > - if (!memcmp(strIssueBssid, strZeroMacAddress, ETH_ALEN)) > - return intReturn; > - intReturn = true; > - blInserted = false; > - /* overwrite PMKID / > - for (j = 0; j < NUM_PMKID_CACHE; j++) { > - if (!memcmp(pl[j].Bssid, strIssueBssid, ETH_ALEN)) { > - / BSSID is matched, the same AP => rewrite > > - * with new PMKID. > - */ > - netdev_info(dev, "r8712u: %s: BSSID exists in the PMKList.\n", > - func); > - memcpy(pl[j].PMKID, pPMK->pmkid, IW_PMKID_LEN); > > - pl[j].bUsed = true; > - psecuritypriv->PMKIDIndex = j + 1; > > - blInserted = true; > - break; > - } > - } > - if (!blInserted) { > - /* Find a new entry */ > - netdev_info(dev, "r8712u: %s: Use the new entry index = %d for this PMKID.\n", > - func, psecuritypriv->PMKIDIndex); > > - memcpy(pl[psecuritypriv->PMKIDIndex].Bssid, > > - strIssueBssid, ETH_ALEN); > - memcpy(pl[psecuritypriv->PMKIDIndex].PMKID, > > - pPMK->pmkid, IW_PMKID_LEN); > > - pl[psecuritypriv->PMKIDIndex].bUsed = true; > > - psecuritypriv->PMKIDIndex++; > > - if (psecuritypriv->PMKIDIndex == NUM_PMKID_CACHE) > > - psecuritypriv->PMKIDIndex = 0; > > - } > - break; > - case IW_PMKSA_REMOVE: > - intReturn = true; > - for (j = 0; j < NUM_PMKID_CACHE; j++) { > - if (!memcmp(pl[j].Bssid, strIssueBssid, ETH_ALEN)) { > - /* BSSID is matched, the same AP => Remove > > - * this PMKID information and reset it. > - */ > - eth_zero_addr(pl[j].Bssid); > - pl[j].bUsed = false; > - break; > - } > - } > - break; > - case IW_PMKSA_FLUSH: > - memset(psecuritypriv->PMKIDList, 0, > > - sizeof(struct RT_PMKID_LIST) * NUM_PMKID_CACHE); > - psecuritypriv->PMKIDIndex = 0; > > - intReturn = true; > - break; > - default: > - netdev_info(dev, "r8712u: %s: unknown Command\n", func); > - intReturn = false; > - break; > - } > - return intReturn; > -} > - > -static int r8711_wx_get_sens(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - wrqu->sens.value = 0; > > - wrqu->sens.fixed = 0; /* no auto select */ > > - wrqu->sens.disabled = 1; > > - return 0; > -} > - > -static int r8711_wx_get_range(struct net_device *dev, struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct iw_range *range = (struct iw_range *)extra; > - u16 val; > - int i; > - > - wrqu->data.length = sizeof(*range); > > - memset(range, 0, sizeof(range)); > - / Let's try to keep this struct in the same order as in > - * linux/include/wireless.h > - / > - > - / TODO: See what values we can set, and remove the ones we can't > - * set, or fill them with some default data. > - / > - / ~5 Mb/s real (802.11b) */ > - range->throughput = 5 * 1000 * 1000; > > - /* TODO: 8711 sensitivity ? / > - / signal level threshold range / > - / percent values between 0 and 100. */ > - range->max_qual.qual = 100; > > - range->max_qual.level = 100; > > - range->max_qual.noise = 100; > > - range->max_qual.updated = 7; /* Updated all three */ > > - range->avg_qual.qual = 92; /* > 8% missed beacons is 'bad' */ > > - /* TODO: Find real 'good' to 'bad' threshold value for RSSI */ > - range->avg_qual.level = 0x100 - 78; > > - range->avg_qual.noise = 0; > > - range->avg_qual.updated = 7; /* Updated all three */ > > - range->num_bitrates = RATE_COUNT; > > - for (i = 0; i < RATE_COUNT && i < IW_MAX_BITRATES; i++) > - range->bitrate[i] = rtl8180_rates[i]; > > - range->min_frag = MIN_FRAG_THRESHOLD; > > - range->max_frag = MAX_FRAG_THRESHOLD; > > - range->pm_capa = 0; > > - range->we_version_compiled = WIRELESS_EXT; > > - range->we_version_source = 16; > > - range->num_channels = 14; > > - for (i = 0, val = 0; i < 14; i++) { > - /* Include only legal frequencies for some countries */ > - range->freq[val].i = i + 1; > > - range->freq[val].m = ieee80211_wlan_frequencies[i] * 100000; > > - range->freq[val].e = 1; > > - val++; > - if (val == IW_MAX_FREQUENCIES) > - break; > - } > - range->num_frequency = val; > > - range->enc_capa = IW_ENC_CAPA_WPA | > > - IW_ENC_CAPA_WPA2 | > - IW_ENC_CAPA_CIPHER_TKIP | > - IW_ENC_CAPA_CIPHER_CCMP; > - return 0; > -} > - > -static int r8711_wx_get_rate(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra); > - > -static int r871x_wx_set_priv(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *awrq, > - char *extra) > -{ > - int ret = 0, len = 0; > - char *ext; > - struct _adapter *padapter = netdev_priv(dev); > - struct iw_point *dwrq = (struct iw_point *)awrq; > - > - len = dwrq->length; > > - ext = strndup_user(dwrq->pointer, len); > > - if (IS_ERR(ext)) > - return PTR_ERR(ext); > - > - if (!strcasecmp(ext, "RSSI")) { > - /*Return received signal strength indicator in -db for / > - / current AP / > - /<ssid> Rssi xx */ > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct wlan_network *pcur_network = &pmlmepriv->cur_network; > > - /*static u8 xxxx; */ > - if (check_fwstate(pmlmepriv, _FW_LINKED)) { > - sprintf(ext, "%s rssi %d", > - pcur_network->network.Ssid.Ssid, > > - /*(xxxx=xxxx+10) */ > - ((padapter->recvpriv.fw_rssi) >> 1) - 95 > > - /*pcur_network->network.Rssi */ > > - ); > - } else { > - sprintf(ext, "OK"); > - } > - } else if (!strcasecmp(ext, "LINKSPEED")) { > - /*Return link speed in MBPS */ > - /*LinkSpeed xx */ > - union iwreq_data wrqd; > - int ret_inner; > - int mbps; > - > - ret_inner = r8711_wx_get_rate(dev, info, &wrqd, extra); > - if (ret_inner != 0) > - mbps = 0; > - else > - mbps = wrqd.bitrate.value / 1000000; > - sprintf(ext, "LINKSPEED %d", mbps); > - } else if (!strcasecmp(ext, "MACADDR")) { > - /*Return mac address of the station / > - / Macaddr = xx:xx:xx:xx:xx:xx */ > - sprintf(ext, "MACADDR = %pM", dev->dev_addr); > > - } else if (!strcasecmp(ext, "SCAN-ACTIVE")) { > - /*Set scan type to active */ > - /*OK if successful */ > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - > - pmlmepriv->passive_mode = 1; > > - sprintf(ext, "OK"); > - } else if (!strcasecmp(ext, "SCAN-PASSIVE")) { > - /*Set scan type to passive */ > - /*OK if successful */ > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - > - pmlmepriv->passive_mode = 0; > > - sprintf(ext, "OK"); > - } else if (!strncmp(ext, "DCE-E", 5)) { > - /*Set scan type to passive */ > - /*OK if successful */ > - r8712_disconnectCtrlEx_cmd(padapter > - , 1 /*u32 enableDrvCtrl */ > - , 5 /*u32 tryPktCnt */ > - , 100 /*u32 tryPktInterval */ > - , 5000 /*u32 firstStageTO */ > - ); > - sprintf(ext, "OK"); > - } else if (!strncmp(ext, "DCE-D", 5)) { > - /*Set scan type to passive */ > - /*OK if successfu */ > - r8712_disconnectCtrlEx_cmd(padapter > - , 0 /*u32 enableDrvCtrl */ > - , 5 /*u32 tryPktCnt */ > - , 100 /*u32 tryPktInterval */ > - , 5000 /*u32 firstStageTO */ > - ); > - sprintf(ext, "OK"); > - } else { > - netdev_info(dev, "r8712u: %s: unknown Command %s.\n", func, ext); > - goto FREE_EXT; > - } > - if (copy_to_user(dwrq->pointer, ext, min(dwrq->length, (__u16)(strlen(ext) + 1)))) > > - ret = -EFAULT; > - > -FREE_EXT: > - kfree(ext); > - return ret; > -} > - > -/* set bssid flow > - * s1. set_802_11_infrastructure_mode() > - * s2. set_802_11_authentication_mode() > - * s3. set_802_11_encryption_mode() > - * s4. set_802_11_bssid() > - * > - * This function intends to handle the Set AP command, which specifies the > - * MAC# of a preferred Access Point. > - * Currently, the request comes via Wireless Extensions' SIOCSIWAP ioctl. > - * > - * For this operation to succeed, there is no need for the interface to be up. > - * > - */ > -static int r8711_wx_set_wap(struct net_device *dev, struct iw_request_info *info, > - union iwreq_data *awrq, char *extra) > -{ > - int ret = -EINPROGRESS; > - struct _adapter *padapter = netdev_priv(dev); > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct __queue *queue = &pmlmepriv->scanned_queue; > > - struct sockaddr *temp = (struct sockaddr *)awrq; > - unsigned long irqL; > - struct list_head *phead; > - u8 *dst_bssid; > - struct wlan_network *pnetwork = NULL; > - enum NDIS_802_11_AUTHENTICATION_MODE authmode; > - > - if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) > - return -EBUSY; > - if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) > - return ret; > - if (temp->sa_family != ARPHRD_ETHER) > > - return -EINVAL; > - authmode = padapter->securitypriv.ndisauthtype; > > - spin_lock_irqsave(&queue->lock, irqL); > > - phead = &queue->queue; > > - pmlmepriv->pscanned = phead->next; > > - while (1) { > - if (end_of_queue_search(phead, pmlmepriv->pscanned)) > > - break; > - pnetwork = container_of(pmlmepriv->pscanned, > > - struct wlan_network, list); > - pmlmepriv->pscanned = pmlmepriv->pscanned->next; > > - dst_bssid = pnetwork->network.MacAddress; > > - if (!memcmp(dst_bssid, temp->sa_data, ETH_ALEN)) { > > - r8712_set_802_11_infrastructure_mode(padapter, > - pnetwork->network.InfrastructureMode); > > - break; > - } > - } > - spin_unlock_irqrestore(&queue->lock, irqL); > > - if (!ret) { > - if (!r8712_set_802_11_authentication_mode(padapter, authmode)) { > - ret = -ENOMEM; > - } else { > - if (!r8712_set_802_11_bssid(padapter, temp->sa_data)) > > - ret = -1; > - } > - } > - return ret; > -} > - > -static int r8711_wx_get_wap(struct net_device *dev, struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network; > > - > - wrqu->ap_addr.sa_family = ARPHRD_ETHER; > > - if (check_fwstate(pmlmepriv, _FW_LINKED | WIFI_ADHOC_MASTER_STATE | WIFI_AP_STATE)) > - ether_addr_copy(wrqu->ap_addr.sa_data, pcur_bss->MacAddress); > > - else > - eth_zero_addr(wrqu->ap_addr.sa_data); > > - return 0; > -} > - > -static int r871x_wx_set_mlme(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - int ret = 0; > - struct _adapter *padapter = netdev_priv(dev); > - struct iw_mlme *mlme = (struct iw_mlme *) extra; > - > - if (!mlme) > - return -1; > - switch (mlme->cmd) { > > - case IW_MLME_DEAUTH: > - if (!r8712_set_802_11_disassociate(padapter)) > - ret = -1; > - break; > - case IW_MLME_DISASSOC: > - if (!r8712_set_802_11_disassociate(padapter)) > - ret = -1; > - break; > - default: > - return -EOPNOTSUPP; > - } > - return ret; > -} > - > -/* > - * > - * This function intends to handle the Set Scan command. > - * Currently, the request comes via Wireless Extensions' SIOCSIWSCAN ioctl. > - * > - * For this operation to succeed, the interface is brought Up beforehand. > - * > - */ > -static int r8711_wx_set_scan(struct net_device *dev, struct iw_request_info *a, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - u8 status = true; > - > - if (padapter->driver_stopped) { > > - netdev_info(dev, "In %s: driver_stopped=%d\n", > - func, padapter->driver_stopped); > > - return -1; > - } > - if (!padapter->bup) > > - return -ENETDOWN; > - if (!padapter->hw_init_completed) > > - return -1; > - if ((check_fwstate(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING)) || > - (pmlmepriv->sitesurveyctrl.traffic_busy)) > > - return 0; > - if (wrqu->data.length == sizeof(struct iw_scan_req)) { > > - struct iw_scan_req *req = (struct iw_scan_req *)extra; > - > - if (wrqu->data.flags & IW_SCAN_THIS_ESSID) { > > - struct ndis_802_11_ssid ssid; > - unsigned long irqL; > - u32 len = min_t(u8, req->essid_len, IW_ESSID_MAX_SIZE); > > - > - memset((unsigned char *)&ssid, 0, sizeof(struct ndis_802_11_ssid)); > - memcpy(ssid.Ssid, req->essid, len); > > - ssid.SsidLength = len; > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - if ((check_fwstate(pmlmepriv, _FW_UNDER_SURVEY | > - _FW_UNDER_LINKING)) || > - (pmlmepriv->sitesurveyctrl.traffic_busy)) { > > - if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) > - status = false; > - } else { > - status = r8712_sitesurvey_cmd(padapter, &ssid); > - } > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > - } > - } else { > - status = r8712_set_802_11_bssid_list_scan(padapter); > - } > - if (!status) > - return -1; > - return 0; > -} > - > -static int r8711_wx_get_scan(struct net_device *dev, struct iw_request_info *a, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct __queue *queue = &pmlmepriv->scanned_queue; > > - struct wlan_network *pnetwork = NULL; > - unsigned long irqL; > - struct list_head *plist, *phead; > - char *ev = extra; > - char *stop = ev + wrqu->data.length; > > - u32 ret = 0, cnt = 0; > - > - if (padapter->driver_stopped) > > - return -EINVAL; > - while (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING)) { > - msleep(30); > - cnt++; > - if (cnt > 100) > > - break; > - } > - spin_lock_irqsave(&queue->lock, irqL); > > - phead = &queue->queue; > > - plist = phead->next; > > - while (1) { > - if (end_of_queue_search(phead, plist)) > - break; > - if ((stop - ev) < SCAN_ITEM_SIZE) { > - ret = -E2BIG; > - break; > - } > - pnetwork = container_of(plist, struct wlan_network, list); > - ev = translate_scan(padapter, a, pnetwork, ev, stop); > - plist = plist->next; > > - } > - spin_unlock_irqrestore(&queue->lock, irqL); > > - wrqu->data.length = ev - extra; > > - wrqu->data.flags = 0; > > - return ret; > -} > - > -/* set ssid flow > - * s1. set_802_11_infrastructure_mode() > - * s2. set_802_11_authenticaion_mode() > - * s3. set_802_11_encryption_mode() > - * s4. set_802_11_ssid() > - * > - * This function intends to handle the Set ESSID command. > - * Currently, the request comes via the Wireless Extensions' SIOCSIWESSID ioctl. > - * > - * For this operation to succeed, there is no need for the interface to be Up. > - * > - */ > -static int r8711_wx_set_essid(struct net_device *dev, struct iw_request_info *a, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct __queue *queue = &pmlmepriv->scanned_queue; > > - struct wlan_network *pnetwork = NULL; > - enum NDIS_802_11_AUTHENTICATION_MODE authmode; > - struct ndis_802_11_ssid ndis_ssid; > - u8 *dst_ssid, *src_ssid; > - struct list_head *phead; > - u32 len; > - > - if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) > - return -EBUSY; > - if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) > - return 0; > - if (wrqu->essid.length > IW_ESSID_MAX_SIZE) > > - return -E2BIG; > - authmode = padapter->securitypriv.ndisauthtype; > > - if (wrqu->essid.flags && wrqu->essid.length) { > > - len = (wrqu->essid.length < IW_ESSID_MAX_SIZE) ? > > - wrqu->essid.length : IW_ESSID_MAX_SIZE; > > - memset(&ndis_ssid, 0, sizeof(struct ndis_802_11_ssid)); > - ndis_ssid.SsidLength = len; > - memcpy(ndis_ssid.Ssid, extra, len); > - src_ssid = ndis_ssid.Ssid; > - phead = &queue->queue; > > - pmlmepriv->pscanned = phead->next; > > - while (1) { > - if (end_of_queue_search(phead, pmlmepriv->pscanned)) > > - break; > - pnetwork = container_of(pmlmepriv->pscanned, > > - struct wlan_network, list); > - pmlmepriv->pscanned = pmlmepriv->pscanned->next; > > - dst_ssid = pnetwork->network.Ssid.Ssid; > > - if ((!memcmp(dst_ssid, src_ssid, ndis_ssid.SsidLength)) > - && (pnetwork->network.Ssid.SsidLength == > > - ndis_ssid.SsidLength)) { > - if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { > - if (pnetwork->network. > > - InfrastructureMode > - != > - padapter->mlmepriv. > > - cur_network.network. > - InfrastructureMode) > - continue; > - } > - > - r8712_set_802_11_infrastructure_mode( > - padapter, > - pnetwork->network.InfrastructureMode); > > - break; > - } > - } > - r8712_set_802_11_authentication_mode(padapter, authmode); > - r8712_set_802_11_ssid(padapter, &ndis_ssid); > - } > - return -EINPROGRESS; > -} > - > -static int r8711_wx_get_essid(struct net_device *dev, struct iw_request_info *a, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network; > > - u32 len, ret = 0; > - > - if (check_fwstate(pmlmepriv, _FW_LINKED | WIFI_ADHOC_MASTER_STATE)) { > - len = pcur_bss->Ssid.SsidLength; > > - wrqu->essid.length = len; > > - memcpy(extra, pcur_bss->Ssid.Ssid, len); > > - wrqu->essid.flags = 1; > > - } else { > - ret = -ENOLINK; > - } > - return ret; > -} > - > -static int r8711_wx_set_rate(struct net_device *dev, struct iw_request_info *a, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - u32 target_rate = wrqu->bitrate.value; > > - u32 fixed = wrqu->bitrate.fixed; > > - u32 ratevalue = 0; > - u8 datarates[NumRates]; > - u8 mpdatarate[NumRates] = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0xff}; > - int i; > - > - if (target_rate == -1) { > - ratevalue = 11; > - goto set_rate; > - } > - target_rate = target_rate / 100000; > - switch (target_rate) { > - case 10: > - ratevalue = 0; > - break; > - case 20: > - ratevalue = 1; > - break; > - case 55: > - ratevalue = 2; > - break; > - case 60: > - ratevalue = 3; > - break; > - case 90: > - ratevalue = 4; > - break; > - case 110: > - ratevalue = 5; > - break; > - case 120: > - ratevalue = 6; > - break; > - case 180: > - ratevalue = 7; > - break; > - case 240: > - ratevalue = 8; > - break; > - case 360: > - ratevalue = 9; > - break; > - case 480: > - ratevalue = 10; > - break; > - case 540: > - ratevalue = 11; > - break; > - default: > - ratevalue = 11; > - break; > - } > -set_rate: > - for (i = 0; i < NumRates; i++) { > - if (ratevalue == mpdatarate[i]) { > - datarates[i] = mpdatarate[i]; > - if (fixed == 0) > - break; > - } else { > - datarates[i] = 0xff; > - } > - } > - return r8712_setdatarate_cmd(padapter, datarates); > -} > - > -static int r8711_wx_get_rate(struct net_device *dev, struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network; > > - struct ieee80211_ht_cap *pht_capie; > - unsigned char rf_type = padapter->registrypriv.rf_config; > > - int i; > - u8 *p; > - u16 rate, max_rate = 0, ht_cap = false; > - u32 ht_ielen = 0; > - u8 bw_40MHz = 0, short_GI = 0; > - u16 mcs_rate = 0; > - > - i = 0; > - if (!check_fwstate(pmlmepriv, _FW_LINKED | WIFI_ADHOC_MASTER_STATE)) > - return -ENOLINK; > - p = r8712_get_ie(&pcur_bss->IEs[12], WLAN_EID_HT_CAPABILITY, &ht_ielen, > > - pcur_bss->IELength - 12); > > - if (p && ht_ielen > 0) { > > - ht_cap = true; > - pht_capie = (struct ieee80211_ht_cap *)(p + 2); > - memcpy(&mcs_rate, &pht_capie->mcs, 2); > > - bw_40MHz = (le16_to_cpu(pht_capie->cap_info) & > > - IEEE80211_HT_CAP_SUP_WIDTH_20_40) ? 1 : 0; > - short_GI = (le16_to_cpu(pht_capie->cap_info) & > > - (IEEE80211_HT_CAP_SGI_20 | > - IEEE80211_HT_CAP_SGI_40)) ? 1 : 0; > - } > - while ((pcur_bss->rates[i] != 0) && > > - (pcur_bss->rates[i] != 0xFF)) { > > - rate = pcur_bss->rates[i] & 0x7F; > > - if (rate > max_rate) > > - max_rate = rate; > - wrqu->bitrate.fixed = 0; /* no auto select */ > > - wrqu->bitrate.value = rate * 500000; > > - i++; > - } > - if (ht_cap) { > - if (mcs_rate & 0x8000 /* MCS15 / > - && > - rf_type == RTL8712_RF_2T2R) > - max_rate = (bw_40MHz) ? ((short_GI) ? 300 : 270) : > - ((short_GI) ? 144 : 130); > - else / default MCS7 */ > - max_rate = (bw_40MHz) ? ((short_GI) ? 150 : 135) : > - ((short_GI) ? 72 : 65); > - max_rate = 2; / Mbps/2 */ > - } > - wrqu->bitrate.value = max_rate * 500000; > > - return 0; > -} > - > -static int r8711_wx_get_rts(struct net_device *dev, struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - > - wrqu->rts.value = padapter->registrypriv.rts_thresh; > > - wrqu->rts.fixed = 0; /* no auto select */ > > - return 0; > -} > - > -static int r8711_wx_set_frag(struct net_device *dev, struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - > - if (wrqu->frag.disabled) { > > - padapter->xmitpriv.frag_len = MAX_FRAG_THRESHOLD; > > - } else { > - if (wrqu->frag.value < MIN_FRAG_THRESHOLD || > > - wrqu->frag.value > MAX_FRAG_THRESHOLD) > > - return -EINVAL; > - padapter->xmitpriv.frag_len = wrqu->frag.value & ~0x1; > > - } > - return 0; > -} > - > -static int r8711_wx_get_frag(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - > - wrqu->frag.value = padapter->xmitpriv.frag_len; > > - wrqu->frag.fixed = 0; /* no auto select */ > > - return 0; > -} > - > -static int r8711_wx_get_retry(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - wrqu->retry.value = 7; > > - wrqu->retry.fixed = 0; /* no auto select */ > > - wrqu->retry.disabled = 1; > > - return 0; > -} > - > -static int r8711_wx_set_enc(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *keybuf) > -{ > - u32 key; > - u32 keyindex_provided; > - struct NDIS_802_11_WEP wep; > - enum NDIS_802_11_AUTHENTICATION_MODE authmode; > - struct iw_point *erq = &wrqu->encoding; > > - struct _adapter *padapter = netdev_priv(dev); > - > - key = erq->flags & IW_ENCODE_INDEX; > > - memset(&wep, 0, sizeof(struct NDIS_802_11_WEP)); > - if (erq->flags & IW_ENCODE_DISABLED) { > > - netdev_info(dev, "r8712u: %s: EncryptionDisabled\n", func); > - padapter->securitypriv.ndisencryptstatus = > > - Ndis802_11EncryptionDisabled; > - padapter->securitypriv.privacy_algorithm = NO_PRIVACY; > > - padapter->securitypriv.XGrpPrivacy = NO_PRIVACY; > > - padapter->securitypriv.auth_algorithm = AUTH_OPEN_SYSTEM; > > - authmode = Ndis802_11AuthModeOpen; > - padapter->securitypriv.ndisauthtype = authmode; > > - return 0; > - } > - if (key) { > - if (key > WEP_KEYS) > > - return -EINVAL; > - key--; > - keyindex_provided = 1; > - } else { > - keyindex_provided = 0; > - key = padapter->securitypriv.PrivacyKeyIndex; > > - } > - /* set authentication mode */ > - if (erq->flags & IW_ENCODE_OPEN) { > > - netdev_info(dev, "r8712u: %s: IW_ENCODE_OPEN\n", func); > - padapter->securitypriv.ndisencryptstatus = > > - Ndis802_11Encryption1Enabled; > - padapter->securitypriv.auth_algorithm = AUTH_OPEN_SYSTEM; > > - padapter->securitypriv.privacy_algorithm = NO_PRIVACY; > > - padapter->securitypriv.XGrpPrivacy = NO_PRIVACY; > > - authmode = Ndis802_11AuthModeOpen; > - padapter->securitypriv.ndisauthtype = authmode; > > - } else if (erq->flags & IW_ENCODE_RESTRICTED) { > > - netdev_info(dev, > - "r8712u: %s: IW_ENCODE_RESTRICTED\n", func); > - padapter->securitypriv.ndisencryptstatus = > > - Ndis802_11Encryption1Enabled; > - padapter->securitypriv.auth_algorithm = AUTH_SHARED_SYSTEM; > > - padapter->securitypriv.privacy_algorithm = WEP40; > > - padapter->securitypriv.XGrpPrivacy = WEP40; > > - authmode = Ndis802_11AuthModeShared; > - padapter->securitypriv.ndisauthtype = authmode; > > - } else { > - padapter->securitypriv.ndisencryptstatus = > > - Ndis802_11Encryption1Enabled; > - padapter->securitypriv.auth_algorithm = AUTH_OPEN_SYSTEM; > > - padapter->securitypriv.privacy_algorithm = NO_PRIVACY; > > - padapter->securitypriv.XGrpPrivacy = NO_PRIVACY; > > - authmode = Ndis802_11AuthModeOpen; > - padapter->securitypriv.ndisauthtype = authmode; > > - } > - wep.KeyIndex = key; > - if (erq->length > 0) { > > - wep.KeyLength = erq->length <= 5 ? 5 : 13; > > - wep.Length = wep.KeyLength + > - offsetof(struct NDIS_802_11_WEP, KeyMaterial); > - } else { > - wep.KeyLength = 0; > - if (keyindex_provided == 1) { /* set key_id only, no given > - * KeyMaterial(erq->length==0). > > - */ > - padapter->securitypriv.PrivacyKeyIndex = key; > > - switch (padapter->securitypriv.DefKeylen[key]) { > > - case 5: > - padapter->securitypriv.privacy_algorithm = > > - WEP40; > - break; > - case 13: > - padapter->securitypriv.privacy_algorithm = > > - WEP104; > - break; > - default: > - padapter->securitypriv.privacy_algorithm = > > - NO_PRIVACY; > - break; > - } > - return 0; > - } > - } > - wep.KeyIndex |= 0x80000000; /* transmit key */ > - memcpy(wep.KeyMaterial, keybuf, wep.KeyLength); > - if (r8712_set_802_11_add_wep(padapter, &wep)) > - return -EOPNOTSUPP; > - return 0; > -} > - > -static int r8711_wx_get_enc(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *keybuf) > -{ > - uint key; > - struct _adapter *padapter = netdev_priv(dev); > - struct iw_point *erq = &wrqu->encoding; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - union Keytype *dk = padapter->securitypriv.DefKey; > > - > - if (!check_fwstate(pmlmepriv, _FW_LINKED)) { > - if (!check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) { > - erq->length = 0; > > - erq->flags |= IW_ENCODE_DISABLED; > > - return 0; > - } > - } > - key = erq->flags & IW_ENCODE_INDEX; > > - if (key) { > - if (key > WEP_KEYS) > > - return -EINVAL; > - key--; > - } else { > - key = padapter->securitypriv.PrivacyKeyIndex; > > - } > - erq->flags = key + 1; > > - switch (padapter->securitypriv.ndisencryptstatus) { > > - case Ndis802_11EncryptionNotSupported: > - case Ndis802_11EncryptionDisabled: > - erq->length = 0; > > - erq->flags |= IW_ENCODE_DISABLED; > > - break; > - case Ndis802_11Encryption1Enabled: > - erq->length = padapter->securitypriv.DefKeylen[key]; > > - if (erq->length) { > > - memcpy(keybuf, dk[key].skey, > - padapter->securitypriv.DefKeylen[key]); > > - erq->flags |= IW_ENCODE_ENABLED; > > - if (padapter->securitypriv.ndisauthtype == > > - Ndis802_11AuthModeOpen) > - erq->flags |= IW_ENCODE_OPEN; > > - else if (padapter->securitypriv.ndisauthtype == > > - Ndis802_11AuthModeShared) > - erq->flags |= IW_ENCODE_RESTRICTED; > > - } else { > - erq->length = 0; > > - erq->flags |= IW_ENCODE_DISABLED; > > - } > - break; > - case Ndis802_11Encryption2Enabled: > - case Ndis802_11Encryption3Enabled: > - erq->length = 16; > > - erq->flags |= (IW_ENCODE_ENABLED | IW_ENCODE_OPEN | > > - IW_ENCODE_NOKEY); > - break; > - default: > - erq->length = 0; > > - erq->flags |= IW_ENCODE_DISABLED; > > - break; > - } > - return 0; > -} > - > -static int r8711_wx_get_power(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - wrqu->power.value = 0; > > - wrqu->power.fixed = 0; /* no auto select */ > > - wrqu->power.disabled = 1; > > - return 0; > -} > - > -static int r871x_wx_set_gen_ie(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - > - return r871x_set_wpa_ie(padapter, extra, wrqu->data.length); > > -} > - > -static int r871x_wx_set_auth(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct iw_param *param = (struct iw_param *)&wrqu->param; > > - int paramid; > - int paramval; > - int ret = 0; > - > - paramid = param->flags & IW_AUTH_INDEX; > > - paramval = param->value; > > - switch (paramid) { > - case IW_AUTH_WPA_VERSION: > - break; > - case IW_AUTH_CIPHER_PAIRWISE: > - break; > - case IW_AUTH_CIPHER_GROUP: > - break; > - case IW_AUTH_KEY_MGMT: > - /* > - * ??? does not use these parameters > - / > - break; > - case IW_AUTH_TKIP_COUNTERMEASURES: > - if (paramval) { > - / wpa_supplicant is enabling tkip countermeasure. */ > - padapter->securitypriv.btkip_countermeasure = true; > > - } else { > - /* wpa_supplicant is disabling tkip countermeasure. */ > - padapter->securitypriv.btkip_countermeasure = false; > > - } > - break; > - case IW_AUTH_DROP_UNENCRYPTED: > - /* HACK: > - * > - * wpa_supplicant calls set_wpa_enabled when the driver > - * is loaded and unloaded, regardless of if WPA is being > - * used. No other calls are made which can be used to > - * determine if encryption will be used or not prior to > - * association being expected. If encryption is not being > - * used, drop_unencrypted is set to false, else true -- we > - * can use this to determine if the CAP_PRIVACY_ON bit should > - * be set. > - */ > - if (padapter->securitypriv.ndisencryptstatus == > > - Ndis802_11Encryption1Enabled) { > - /* it means init value, or using wep, > - * ndisencryptstatus = > - * Ndis802_11Encryption1Enabled, > - * then it needn't reset it; > - */ > - break; > - } > - > - if (paramval) { > - padapter->securitypriv.ndisencryptstatus = > > - Ndis802_11EncryptionDisabled; > - padapter->securitypriv.privacy_algorithm = > > - NO_PRIVACY; > - padapter->securitypriv.XGrpPrivacy = > > - NO_PRIVACY; > - padapter->securitypriv.auth_algorithm = AUTH_OPEN_SYSTEM; > > - padapter->securitypriv.ndisauthtype = > > - Ndis802_11AuthModeOpen; > - } > - break; > - case IW_AUTH_80211_AUTH_ALG: > - ret = wpa_set_auth_algs(dev, (u32)paramval); > - break; > - case IW_AUTH_WPA_ENABLED: > - break; > - case IW_AUTH_RX_UNENCRYPTED_EAPOL: > - break; > - case IW_AUTH_PRIVACY_INVOKED: > - break; > - default: > - return -EOPNOTSUPP; > - } > - > - return ret; > -} > - > -static int r871x_wx_set_enc_ext(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct iw_point *pencoding = &wrqu->encoding; > > - struct iw_encode_ext *pext = (struct iw_encode_ext *)extra; > - struct ieee_param *param = NULL; > - char *alg_name; > - u32 param_len; > - int ret = 0; > - > - switch (pext->alg) { > > - case IW_ENCODE_ALG_NONE: > - alg_name = "none"; > - break; > - case IW_ENCODE_ALG_WEP: > - alg_name = "WEP"; > - break; > - case IW_ENCODE_ALG_TKIP: > - alg_name = "TKIP"; > - break; > - case IW_ENCODE_ALG_CCMP: > - alg_name = "CCMP"; > - break; > - default: > - return -EINVAL; > - } > - > - param_len = sizeof(struct ieee_param) + pext->key_len; > > - param = kzalloc(param_len, GFP_ATOMIC); > - if (!param) > - return -ENOMEM; > - param->cmd = IEEE_CMD_SET_ENCRYPTION; > > - eth_broadcast_addr(param->sta_addr); > > - strscpy((char *)param->u.crypt.alg, alg_name, IEEE_CRYPT_ALG_NAME_LEN); > > - if (pext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) > > - param->u.crypt.set_tx = 0; > > - if (pext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) > > - param->u.crypt.set_tx = 1; > > - param->u.crypt.idx = (pencoding->flags & 0x00FF) - 1; > > - if (pext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) > > - memcpy(param->u.crypt.seq, pext->rx_seq, 8); > > - if (pext->key_len) { > > - param->u.crypt.key_len = pext->key_len; > > - memcpy(param + 1, pext + 1, pext->key_len); > > - } > - ret = wpa_set_encryption(dev, param, param_len); > - kfree(param); > - return ret; > -} > - > -static int r871x_wx_get_nick(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - if (extra) { > - wrqu->data.length = 8; > > - wrqu->data.flags = 1; > > - memcpy(extra, "rtl_wifi", 8); > - } > - return 0; > -} > - > -static int r8711_wx_read32(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *keybuf) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - u32 addr; > - u32 data32; > - > - get_user(addr, (u32 __user *)wrqu->data.pointer); > > - data32 = r8712_read32(padapter, addr); > - put_user(data32, (u32 __user *)wrqu->data.pointer); > > - wrqu->data.length = (data32 & 0xffff0000) >> 16; > > - wrqu->data.flags = data32 & 0xffff; > > - get_user(addr, (u32 __user *)wrqu->data.pointer); > > - return 0; > -} > - > -static int r8711_wx_write32(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *keybuf) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - u32 addr; > - u32 data32; > - > - get_user(addr, (u32 __user *)wrqu->data.pointer); > > - data32 = ((u32)wrqu->data.length << 16) | (u32)wrqu->data.flags; > > - r8712_write32(padapter, addr, data32); > - return 0; > -} > - > -static int dummy(struct net_device *dev, > - struct iw_request_info *a, > - union iwreq_data *wrqu, char *b) > -{ > - return -EINVAL; > -} > - > -static int r8711_drvext_hdl(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - return 0; > -} > - > -static int r871x_mp_ioctl_hdl(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct iw_point *p = &wrqu->data; > > - struct oid_par_priv oid_par; > - struct mp_ioctl_handler *phandler; > - struct mp_ioctl_param *poidparam; > - unsigned long BytesRead, BytesWritten, BytesNeeded; > - u8 *pparmbuf, bset; > - u16 len; > - uint status; > - int ret = 0; > - > - if ((!p->length) || (!p->pointer)) > > - return -EINVAL; > - > - bset = (u8)(p->flags & 0xFFFF); > > - len = p->length; > > - pparmbuf = memdup_user(p->pointer, len); > > - if (IS_ERR(pparmbuf)) > - return PTR_ERR(pparmbuf); > - > - poidparam = (struct mp_ioctl_param *)pparmbuf; > - if (poidparam->subcode >= MAX_MP_IOCTL_SUBCODE) { > > - ret = -EINVAL; > - goto _r871x_mp_ioctl_hdl_exit; > - } > - phandler = mp_ioctl_hdl + poidparam->subcode; > > - if ((phandler->paramsize != 0) && > > - (poidparam->len < phandler->paramsize)) { > > - ret = -EINVAL; > - goto _r871x_mp_ioctl_hdl_exit; > - } > - if (phandler->oid == 0 && phandler->handler) { > > - status = phandler->handler(&oid_par); > > - } else if (phandler->handler) { > > - oid_par.adapter_context = padapter; > - oid_par.oid = phandler->oid; > > - oid_par.information_buf = poidparam->data; > > - oid_par.information_buf_len = poidparam->len; > > - oid_par.dbg = 0; > - BytesWritten = 0; > - BytesNeeded = 0; > - if (bset) { > - oid_par.bytes_rw = &BytesRead; > - oid_par.bytes_needed = &BytesNeeded; > - oid_par.type_of_oid = SET_OID; > - } else { > - oid_par.bytes_rw = &BytesWritten; > - oid_par.bytes_needed = &BytesNeeded; > - oid_par.type_of_oid = QUERY_OID; > - } > - status = phandler->handler(&oid_par); > > - /* todo:check status, BytesNeeded, etc. */ > - } else { > - netdev_info(dev, "r8712u: %s: err!, subcode=%d, oid=%d, handler=%p\n", > - func, poidparam->subcode, phandler->oid, > > - phandler->handler); > > - ret = -EFAULT; > - goto _r871x_mp_ioctl_hdl_exit; > - } > - if (bset == 0x00) { /* query info */ > - if (copy_to_user(p->pointer, pparmbuf, len)) > > - ret = -EFAULT; > - } > - if (status) { > - ret = -EFAULT; > - goto _r871x_mp_ioctl_hdl_exit; > - } > -_r871x_mp_ioctl_hdl_exit: > - kfree(pparmbuf); > - return ret; > -} > - > -static int r871x_get_ap_info(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct __queue *queue = &pmlmepriv->scanned_queue; > > - struct iw_point *pdata = &wrqu->data; > > - struct wlan_network *pnetwork = NULL; > - u32 cnt = 0, wpa_ielen; > - unsigned long irqL; > - struct list_head *plist, *phead; > - unsigned char *pbuf; > - u8 bssid[ETH_ALEN]; > - char data[33]; > - > - if (padapter->driver_stopped || !pdata) > > - return -EINVAL; > - while (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY | > - _FW_UNDER_LINKING)) { > - msleep(30); > - cnt++; > - if (cnt > 100) > > - break; > - } > - pdata->flags = 0; > > - if (pdata->length < 32) > > - return -EINVAL; > - if (copy_from_user(data, pdata->pointer, 32)) > > - return -EINVAL; > - data[32] = 0; > - > - spin_lock_irqsave(&pmlmepriv->scanned_queue.lock, irqL); > > - phead = &queue->queue; > > - plist = phead->next; > > - while (1) { > - if (end_of_queue_search(phead, plist)) > - break; > - pnetwork = container_of(plist, struct wlan_network, list); > - if (!mac_pton(data, bssid)) { > - netdev_info(dev, "r8712u: Invalid BSSID '%s'.\n", > - (u8 *)data); > - spin_unlock_irqrestore(&pmlmepriv->scanned_queue.lock, > > - irqL); > - return -EINVAL; > - } > - netdev_info(dev, "r8712u: BSSID:%pM\n", bssid); > - if (ether_addr_equal(bssid, pnetwork->network.MacAddress)) { > > - /* BSSID match, then check if supporting wpa/wpa2 */ > - pbuf = r8712_get_wpa_ie(&pnetwork->network.IEs[12], > > - &wpa_ielen, pnetwork->network.IELength - 12); > > - if (pbuf && (wpa_ielen > 0)) { > > - pdata->flags = 1; > > - break; > - } > - pbuf = r8712_get_wpa2_ie(&pnetwork->network.IEs[12], > > - &wpa_ielen, pnetwork->network.IELength - 12); > > - if (pbuf && (wpa_ielen > 0)) { > > - pdata->flags = 2; > > - break; > - } > - } > - plist = plist->next; > > - } > - spin_unlock_irqrestore(&pmlmepriv->scanned_queue.lock, irqL); > > - if (pdata->length >= 34) { > > - if (copy_to_user((u8 __user *)pdata->pointer + 32, > > - (u8 *)&pdata->flags, 1)) > > - return -EINVAL; > - } > - return 0; > -} > - > -static int r871x_set_pid(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct iw_point *pdata = &wrqu->data; > > - > - if (padapter->driver_stopped || !pdata) > > - return -EINVAL; > - if (copy_from_user(&padapter->pid, pdata->pointer, sizeof(int))) > > - return -EINVAL; > - return 0; > -} > - > -static int r871x_set_chplan(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - int ret = 0; > - struct _adapter *padapter = netdev_priv(dev); > - struct iw_point *pdata = &wrqu->data; > > - int ch_plan = -1; > - > - if (padapter->driver_stopped || !pdata) { > > - ret = -EINVAL; > - goto exit; > - } > - ch_plan = (int)*extra; > - r8712_set_chplan_cmd(padapter, ch_plan); > - > -exit: > - > - return ret; > -} > - > -static int r871x_wps_start(struct net_device *dev, > - struct iw_request_info *info, > - union iwreq_data *wrqu, char *extra) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct iw_point *pdata = &wrqu->data; > > - u32 u32wps_start = 0; > - > - if (padapter->driver_stopped || !pdata) > > - return -EINVAL; > - if (copy_from_user((void *)&u32wps_start, pdata->pointer, 4)) > > - return -EFAULT; > - if (u32wps_start == 0) > - u32wps_start = extra; > - if (u32wps_start == 1) / WPS Start */ > - padapter->ledpriv.LedControlHandler(padapter, > > - LED_CTL_START_WPS); > - else if (u32wps_start == 2) /* WPS Stop because of wps success */ > - padapter->ledpriv.LedControlHandler(padapter, > > - LED_CTL_STOP_WPS); > - else if (u32wps_start == 3) /* WPS Stop because of wps fail */ > - padapter->ledpriv.LedControlHandler(padapter, > > - LED_CTL_STOP_WPS_FAIL); > - return 0; > -} > - > -static int wpa_set_param(struct net_device *dev, u8 name, u32 value) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - > - switch (name) { > - case IEEE_PARAM_WPA_ENABLED: > - padapter->securitypriv.auth_algorithm = AUTH_8021x; > > - switch ((value) & 0xff) { > - case 1: /* WPA */ > - padapter->securitypriv.ndisauthtype = > > - Ndis802_11AuthModeWPAPSK; /* WPA_PSK */ > - padapter->securitypriv.ndisencryptstatus = > > - Ndis802_11Encryption2Enabled; > - break; > - case 2: /* WPA2 */ > - padapter->securitypriv.ndisauthtype = > > - Ndis802_11AuthModeWPA2PSK; /* WPA2_PSK */ > - padapter->securitypriv.ndisencryptstatus = > > - Ndis802_11Encryption3Enabled; > - break; > - } > - break; > - case IEEE_PARAM_TKIP_COUNTERMEASURES: > - break; > - case IEEE_PARAM_DROP_UNENCRYPTED: > - /* HACK: > - * > - * wpa_supplicant calls set_wpa_enabled when the driver > - * is loaded and unloaded, regardless of if WPA is being > - * used. No other calls are made which can be used to > - * determine if encryption will be used or not prior to > - * association being expected. If encryption is not being > - * used, drop_unencrypted is set to false, else true -- we > - * can use this to determine if the CAP_PRIVACY_ON bit should > - * be set. > - / > - break; > - case IEEE_PARAM_PRIVACY_INVOKED: > - break; > - case IEEE_PARAM_AUTH_ALGS: > - return wpa_set_auth_algs(dev, value); > - case IEEE_PARAM_IEEE_802_1X: > - break; > - case IEEE_PARAM_WPAX_SELECT: > - / added for WPA2 mixed mode */ > - break; > - default: > - return -EOPNOTSUPP; > - } > - return 0; > -} > - > -static int wpa_mlme(struct net_device *dev, u32 command, u32 reason) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - > - switch (command) { > - case IEEE_MLME_STA_DEAUTH: > - if (!r8712_set_802_11_disassociate(padapter)) > - return -1; > - break; > - case IEEE_MLME_STA_DISASSOC: > - if (!r8712_set_802_11_disassociate(padapter)) > - return -1; > - break; > - default: > - return -EOPNOTSUPP; > - } > - return 0; > -} > - > -static int wpa_supplicant_ioctl(struct net_device *dev, struct iw_point *p) > -{ > - struct ieee_param *param; > - int ret = 0; > - struct _adapter *padapter = netdev_priv(dev); > - > - if (p->length < sizeof(struct ieee_param) || !p->pointer) > > - return -EINVAL; > - param = memdup_user(p->pointer, p->length); > > - if (IS_ERR(param)) > - return PTR_ERR(param); > - switch (param->cmd) { > > - case IEEE_CMD_SET_WPA_PARAM: > - ret = wpa_set_param(dev, param->u.wpa_param.name, > > - param->u.wpa_param.value); > > - break; > - case IEEE_CMD_SET_WPA_IE: > - ret = r871x_set_wpa_ie(padapter, (char *)param->u.wpa_ie.data, > > - (u16)param->u.wpa_ie.len); > > - break; > - case IEEE_CMD_SET_ENCRYPTION: > - ret = wpa_set_encryption(dev, param, p->length); > > - break; > - case IEEE_CMD_MLME: > - ret = wpa_mlme(dev, param->u.mlme.command, > > - param->u.mlme.reason_code); > > - break; > - default: > - ret = -EOPNOTSUPP; > - break; > - } > - if (ret == 0 && copy_to_user(p->pointer, param, p->length)) > > - ret = -EFAULT; > - kfree(param); > - return ret; > -} > - > -/* based on "driver_ipw" and for hostapd */ > -int r871x_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) > -{ > - struct iwreq *wrq = (struct iwreq *)rq; > - > - switch (cmd) { > - case RTL_IOCTL_WPA_SUPPLICANT: > - return wpa_supplicant_ioctl(dev, &wrq->u.data); > > - default: > - return -EOPNOTSUPP; > - } > - return 0; > -} > - > -static iw_handler r8711_handlers[] = { > - NULL, /* SIOCSIWCOMMIT / > - r8711_wx_get_name, / SIOCGIWNAME / > - dummy, / SIOCSIWNWID / > - dummy, / SIOCGIWNWID / > - r8711_wx_set_freq, / SIOCSIWFREQ / > - r8711_wx_get_freq, / SIOCGIWFREQ / > - r8711_wx_set_mode, / SIOCSIWMODE / > - r8711_wx_get_mode, / SIOCGIWMODE / > - dummy, / SIOCSIWSENS / > - r8711_wx_get_sens, / SIOCGIWSENS / > - NULL, / SIOCSIWRANGE / > - r8711_wx_get_range, / SIOCGIWRANGE / > - r871x_wx_set_priv, / SIOCSIWPRIV / > - NULL, / SIOCGIWPRIV / > - NULL, / SIOCSIWSTATS / > - NULL, / SIOCGIWSTATS / > - dummy, / SIOCSIWSPY / > - dummy, / SIOCGIWSPY / > - NULL, / SIOCGIWTHRSPY / > - NULL, / SIOCWIWTHRSPY / > - r8711_wx_set_wap, / SIOCSIWAP / > - r8711_wx_get_wap, / SIOCGIWAP / > - r871x_wx_set_mlme, / request MLME operation; > - * uses struct iw_mlme > - / > - dummy, / SIOCGIWAPLIST -- deprecated / > - r8711_wx_set_scan, / SIOCSIWSCAN / > - r8711_wx_get_scan, / SIOCGIWSCAN / > - r8711_wx_set_essid, / SIOCSIWESSID / > - r8711_wx_get_essid, / SIOCGIWESSID / > - dummy, / SIOCSIWNICKN / > - r871x_wx_get_nick, / SIOCGIWNICKN / > - NULL, / -- hole -- / > - NULL, / -- hole -- / > - r8711_wx_set_rate, / SIOCSIWRATE / > - r8711_wx_get_rate, / SIOCGIWRATE / > - dummy, / SIOCSIWRTS / > - r8711_wx_get_rts, / SIOCGIWRTS / > - r8711_wx_set_frag, / SIOCSIWFRAG / > - r8711_wx_get_frag, / SIOCGIWFRAG / > - dummy, / SIOCSIWTXPOW / > - dummy, / SIOCGIWTXPOW / > - dummy, / SIOCSIWRETRY / > - r8711_wx_get_retry, / SIOCGIWRETRY / > - r8711_wx_set_enc, / SIOCSIWENCODE / > - r8711_wx_get_enc, / SIOCGIWENCODE / > - dummy, / SIOCSIWPOWER / > - r8711_wx_get_power, / SIOCGIWPOWER / > - NULL, /---hole---/ > - NULL, /---hole---/ > - r871x_wx_set_gen_ie, / SIOCSIWGENIE / > - NULL, / SIOCGIWGENIE / > - r871x_wx_set_auth, / SIOCSIWAUTH / > - NULL, / SIOCGIWAUTH / > - r871x_wx_set_enc_ext, / SIOCSIWENCODEEXT / > - NULL, / SIOCGIWENCODEEXT / > - r871x_wx_set_pmkid, / SIOCSIWPMKSA / > - NULL, /---hole---*/ > -}; > - > -static const struct iw_priv_args r8711_private_args[] = { > - { > - SIOCIWFIRSTPRIV + 0x0, > - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "read32" > - }, > - { > - SIOCIWFIRSTPRIV + 0x1, > - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "write32" > - }, > - { > - SIOCIWFIRSTPRIV + 0x2, 0, 0, "driver_ext" > - }, > - { > - SIOCIWFIRSTPRIV + 0x3, 0, 0, "mp_ioctl" > - }, > - { > - SIOCIWFIRSTPRIV + 0x4, > - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "apinfo" > - }, > - { > - SIOCIWFIRSTPRIV + 0x5, > - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "setpid" > - }, > - { > - SIOCIWFIRSTPRIV + 0x6, > - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "wps_start" > - }, > - { > - SIOCIWFIRSTPRIV + 0x7, > - IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "chplan" > - } > -}; > - > -static iw_handler r8711_private_handler[] = { > - r8711_wx_read32, > - r8711_wx_write32, > - r8711_drvext_hdl, > - r871x_mp_ioctl_hdl, > - r871x_get_ap_info, /for MM DTV platform/ > - r871x_set_pid, > - r871x_wps_start, > - r871x_set_chplan > -}; > - > -static struct iw_statistics *r871x_get_wireless_stats(struct net_device *dev) > -{ > - struct _adapter *padapter = netdev_priv(dev); > - struct iw_statistics *piwstats = &padapter->iwstats; > > - int tmp_level = 0; > - int tmp_qual = 0; > - int tmp_noise = 0; > - > - if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) != true) { > > - piwstats->qual.qual = 0; > > - piwstats->qual.level = 0; > > - piwstats->qual.noise = 0; > > - } else { > - /* show percentage, we need transfer dbm to original value. */ > - tmp_level = padapter->recvpriv.fw_rssi; > > - tmp_qual = padapter->recvpriv.signal; > > - tmp_noise = padapter->recvpriv.noise; > > - piwstats->qual.level = tmp_level; > > - piwstats->qual.qual = tmp_qual; > > - piwstats->qual.noise = tmp_noise; > > - } > - piwstats->qual.updated = IW_QUAL_ALL_UPDATED; > > - return &padapter->iwstats; > > -} > - > -struct iw_handler_def r871x_handlers_def = { > - .standard = r8711_handlers, > - .num_standard = ARRAY_SIZE(r8711_handlers), > - .private = r8711_private_handler, > - .private_args = (struct iw_priv_args )r8711_private_args, > - .num_private = ARRAY_SIZE(r8711_private_handler), > - .num_private_args = sizeof(r8711_private_args) / > - sizeof(struct iw_priv_args), > - .get_wireless_stats = r871x_get_wireless_stats > -}; > diff --git a/drivers/staging/rtl8712/rtl871x_ioctl_rtl.c b/drivers/staging/rtl8712/rtl871x_ioctl_rtl.c > deleted file mode 100644 > index f9b5588fe4d6..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_ioctl_rtl.c > +++ /dev/null > @@ -1,519 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/***************************************************************************** > - * rtl871x_ioctl_rtl.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RTL871X_IOCTL_RTL_C > - > -#include <linux/rndis.h> > > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "wlan_bssdef.h" > -#include "wifi.h" > -#include "rtl871x_ioctl.h" > -#include "rtl871x_ioctl_set.h" > -#include "rtl871x_ioctl_rtl.h" > -#include "mp_custom_oid.h" > -#include "rtl871x_mp.h" > -#include "rtl871x_mp_ioctl.h" > - > -uint oid_rt_get_signal_quality_hdl(struct oid_par_priv *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_small_packet_crc_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *padapter = poid_par_priv->adapter_context; > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len >= sizeof(u32)) { > > - *(u32 *)poid_par_priv->information_buf = > > - padapter->recvpriv.rx_smallpacket_crcerr; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - } else { > - return RNDIS_STATUS_INVALID_LENGTH; > - } > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_middle_packet_crc_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *padapter = poid_par_priv->adapter_context; > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len >= sizeof(u32)) { > > - *(u32 *)poid_par_priv->information_buf = > > - padapter->recvpriv.rx_middlepacket_crcerr; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - } else { > - return RNDIS_STATUS_INVALID_LENGTH; > - } > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_large_packet_crc_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *padapter = poid_par_priv->adapter_context; > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len >= sizeof(u32)) { > > - *(u32 *)poid_par_priv->information_buf = > > - padapter->recvpriv.rx_largepacket_crcerr; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - } else { > - return RNDIS_STATUS_INVALID_LENGTH; > - } > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_tx_retry_hdl(struct oid_par_priv *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_rx_retry_hdl(struct oid_par_priv *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_rx_total_packet_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *padapter = poid_par_priv->adapter_context; > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len >= sizeof(u32)) { > > - *(u32 *)poid_par_priv->information_buf = > > - padapter->recvpriv.rx_pkts + > > - padapter->recvpriv.rx_drop; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - } else { > - return RNDIS_STATUS_INVALID_LENGTH; > - } > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_tx_beacon_ok_hdl(struct oid_par_priv *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_tx_beacon_err_hdl(struct oid_par_priv *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_rx_icv_err_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *padapter = poid_par_priv->adapter_context; > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len >= sizeof(u32)) { > > - *(uint *)poid_par_priv->information_buf = > > - padapter->recvpriv.rx_icv_err; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - } else { > - return RNDIS_STATUS_INVALID_LENGTH; > - } > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_set_encryption_algorithm_hdl(struct oid_par_priv > - *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_preamble_mode_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *padapter = poid_par_priv->adapter_context; > > - u32 preamblemode = 0; > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len >= sizeof(u32)) { > > - if (padapter->registrypriv.preamble == PREAMBLE_LONG) > > - preamblemode = 0; > - else if (padapter->registrypriv.preamble == PREAMBLE_AUTO) > > - preamblemode = 1; > - else if (padapter->registrypriv.preamble == PREAMBLE_SHORT) > > - preamblemode = 2; > - *(u32 *)poid_par_priv->information_buf = preamblemode; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - } else { > - return RNDIS_STATUS_INVALID_LENGTH; > - } > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_ap_ip_hdl(struct oid_par_priv *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_channelplan_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *padapter = poid_par_priv->adapter_context; > > - struct eeprom_priv *peeprompriv = &padapter->eeprompriv; > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - *(u16 *)poid_par_priv->information_buf = peeprompriv->channel_plan; > > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_set_channelplan_hdl(struct oid_par_priv > - *poid_par_priv) > -{ > - struct _adapter *padapter = poid_par_priv->adapter_context; > > - struct eeprom_priv *peeprompriv = &padapter->eeprompriv; > > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - peeprompriv->channel_plan = *(u16 *)poid_par_priv->information_buf; > > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_set_preamble_mode_hdl(struct oid_par_priv > - *poid_par_priv) > -{ > - struct _adapter *padapter = poid_par_priv->adapter_context; > > - u32 preamblemode = 0; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len >= sizeof(u32)) { > > - preamblemode = *(u32 *)poid_par_priv->information_buf; > > - if (preamblemode == 0) > - padapter->registrypriv.preamble = PREAMBLE_LONG; > > - else if (preamblemode == 1) > - padapter->registrypriv.preamble = PREAMBLE_AUTO; > > - else if (preamblemode == 2) > - padapter->registrypriv.preamble = PREAMBLE_SHORT; > > - *(u32 *)poid_par_priv->information_buf = preamblemode; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - } else { > - return RNDIS_STATUS_INVALID_LENGTH; > - } > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_set_bcn_intvl_hdl(struct oid_par_priv *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_dedicate_probe_hdl(struct oid_par_priv > - *poid_par_priv) > -{ > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_total_tx_bytes_hdl(struct oid_par_priv > - *poid_par_priv) > -{ > - struct _adapter *padapter = poid_par_priv->adapter_context; > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len >= sizeof(u32)) { > > - *(u32 *)poid_par_priv->information_buf = > > - padapter->xmitpriv.tx_bytes; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - } else { > - return RNDIS_STATUS_INVALID_LENGTH; > - } > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_total_rx_bytes_hdl(struct oid_par_priv > - *poid_par_priv) > -{ > - struct _adapter *padapter = poid_par_priv->adapter_context; > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len >= sizeof(u32)) { > > - *(u32 *)poid_par_priv->information_buf = > > - padapter->recvpriv.rx_bytes; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - } else { > - return RNDIS_STATUS_INVALID_LENGTH; > - } > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_current_tx_power_level_hdl(struct oid_par_priv > - *poid_par_priv) > -{ > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_enc_key_mismatch_count_hdl(struct oid_par_priv > - *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_enc_key_match_count_hdl(struct oid_par_priv > - *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_channel_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *padapter = poid_par_priv->adapter_context; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct NDIS_802_11_CONFIGURATION *pnic_Config; > - u32 channelnum; > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (check_fwstate(pmlmepriv, _FW_LINKED) || > - check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) > - pnic_Config = &pmlmepriv->cur_network.network.Configuration; > > - else > - pnic_Config = &padapter->registrypriv.dev_network.Configuration; > > - channelnum = pnic_Config->DSConfig; > > - *(u32 *)poid_par_priv->information_buf = channelnum; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_hardware_radio_off_hdl(struct oid_par_priv > - *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_key_mismatch_hdl(struct oid_par_priv *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_supported_wireless_mode_hdl(struct oid_par_priv > - *poid_par_priv) > -{ > - u32 ulInfo = 0; > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len >= sizeof(u32)) { > > - ulInfo |= 0x0100; /* WIRELESS_MODE_B / > - ulInfo |= 0x0200; / WIRELESS_MODE_G / > - ulInfo |= 0x0400; / WIRELESS_MODE_A */ > - *(u32 *) poid_par_priv->information_buf = ulInfo; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - } else { > - return RNDIS_STATUS_INVALID_LENGTH; > - } > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_channel_list_hdl(struct oid_par_priv *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_scan_in_progress_hdl(struct oid_par_priv *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_forced_data_rate_hdl(struct oid_par_priv *poid_par_priv) > -{ > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_wireless_mode_for_scan_list_hdl(struct oid_par_priv > - *poid_par_priv) > -{ > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_bss_wireless_mode_hdl(struct oid_par_priv > - *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_scan_with_magic_packet_hdl(struct oid_par_priv > - *poid_par_priv) > -{ > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_ap_get_associated_station_list_hdl(struct oid_par_priv > - *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_ap_switch_into_ap_mode_hdl(struct oid_par_priv* > - poid_par_priv) > -{ > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_ap_supported_hdl(struct oid_par_priv *poid_par_priv) > -{ > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_ap_set_passphrase_hdl(struct oid_par_priv *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_rf_write_registry_hdl(struct oid_par_priv* > - poid_par_priv) > -{ > - uint status = RNDIS_STATUS_SUCCESS; > - struct _adapter *Adapter = poid_par_priv->adapter_context; > > - > - if (poid_par_priv->type_of_oid != SET_OID) /* QUERY_OID */ > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len == > > - (sizeof(unsigned long) * 3)) { > - if (r8712_setrfreg_cmd(Adapter, > - *(unsigned char *)poid_par_priv->information_buf, > > - (unsigned long)(*((unsigned long *) > - poid_par_priv->information_buf + 2)))) > > - status = RNDIS_STATUS_NOT_ACCEPTED; > - } else { > - status = RNDIS_STATUS_INVALID_LENGTH; > - } > - return status; > -} > - > -uint oid_rt_pro_rf_read_registry_hdl(struct oid_par_priv *poid_par_priv) > -{ > - uint status = RNDIS_STATUS_SUCCESS; > - struct _adapter *Adapter = poid_par_priv->adapter_context; > > - > - if (poid_par_priv->type_of_oid != SET_OID) /* QUERY_OID */ > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len == (sizeof(unsigned long) * > > - 3)) { > - if (Adapter->mppriv.act_in_progress) { > > - status = RNDIS_STATUS_NOT_ACCEPTED; > - } else { > - /* init workparam */ > - Adapter->mppriv.act_in_progress = true; > > - Adapter->mppriv.workparam.bcompleted = false; > > - Adapter->mppriv.workparam.act_type = MPT_READ_RF; > > - Adapter->mppriv.workparam.io_offset = *(unsigned long *) > > - poid_par_priv->information_buf; > > - Adapter->mppriv.workparam.io_value = 0xcccccccc; > > - > - /* RegOffsetValue - The offset of RF register to read. > - * RegDataWidth - The data width of RF register to read. > - * RegDataValue - The value to read. > - * RegOffsetValue = *((unsigned long *)InformationBuffer); > - * RegDataWidth = *((unsigned long *)InformationBuffer+1); > - * RegDataValue = *((unsigned long *)InformationBuffer+2); > - */ > - if (r8712_getrfreg_cmd(Adapter, > - *(unsigned char *)poid_par_priv->information_buf, > > - (unsigned char *)&Adapter->mppriv.workparam.io_value > > - )) > - status = RNDIS_STATUS_NOT_ACCEPTED; > - } > - } else { > - status = RNDIS_STATUS_INVALID_LENGTH; > - } > - return status; > -} > - > -enum CONNECT_STATE { > - CHECKINGSTATUS, > - ASSOCIATED, > - ADHOCMODE, > - NOTASSOCIATED > -}; > - > -uint oid_rt_get_connect_state_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *padapter = poid_par_priv->adapter_context; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - u32 ulInfo; > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - /* nStatus==0 CheckingStatus > - * nStatus==1 Associated > - * nStatus==2 AdHocMode > - * nStatus==3 NotAssociated > - */ > - if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) > - ulInfo = CHECKINGSTATUS; > - else if (check_fwstate(pmlmepriv, _FW_LINKED)) > - ulInfo = ASSOCIATED; > - else if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) > - ulInfo = ADHOCMODE; > - else > - ulInfo = NOTASSOCIATED; > - *(u32 *)poid_par_priv->information_buf = ulInfo; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_set_default_key_id_hdl(struct oid_par_priv *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > diff --git a/drivers/staging/rtl8712/rtl871x_ioctl_rtl.h b/drivers/staging/rtl8712/rtl871x_ioctl_rtl.h > deleted file mode 100644 > index 7c0b880ac686..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_ioctl_rtl.h > +++ /dev/null > @@ -1,109 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ***************************************/ > -#ifndef _RTL871X_IOCTL_RTL_H > -#define _RTL871X_IOCTL_RTL_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > - > -/ oid_rtl_seg_01_01 / > -uint oid_rt_get_signal_quality_hdl( > - struct oid_par_priv poid_par_priv);/84/ > -uint oid_rt_get_small_packet_crc_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_middle_packet_crc_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_large_packet_crc_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_tx_retry_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_rx_retry_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_rx_total_packet_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_tx_beacon_ok_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_tx_beacon_err_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_rx_icv_err_hdl( > - struct oid_par_priv poid_par_priv);/93/ > -uint oid_rt_set_encryption_algorithm_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_preamble_mode_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_ap_ip_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_channelplan_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_set_channelplan_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_set_preamble_mode_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_set_bcn_intvl_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_dedicate_probe_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_total_tx_bytes_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_total_rx_bytes_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_current_tx_power_level_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_enc_key_mismatch_count_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_enc_key_match_count_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_channel_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_hardware_radio_off_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_key_mismatch_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_supported_wireless_mode_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_channel_list_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_scan_in_progress_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_forced_data_rate_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_wireless_mode_for_scan_list_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_bss_wireless_mode_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_scan_with_magic_packet_hdl( > - struct oid_par_priv poid_par_priv); > - > -/ oid_rtl_seg_01_03 section start / > -uint oid_rt_ap_get_associated_station_list_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_ap_switch_into_ap_mode_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_ap_supported_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_ap_set_passphrase_hdl( > - struct oid_par_priv poid_par_priv); > -/ oid_rtl_seg_01_11 / > -uint oid_rt_pro_rf_write_registry_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_rf_read_registry_hdl( > - struct oid_par_priv poid_par_priv); > -/ oid_rtl_seg_03_00 section start / > -uint oid_rt_get_connect_state_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_set_default_key_id_hdl( > - struct oid_par_priv poid_par_priv); > - > -#endif > - > diff --git a/drivers/staging/rtl8712/rtl871x_ioctl_set.c b/drivers/staging/rtl8712/rtl871x_ioctl_set.c > deleted file mode 100644 > index 9ddfe7a1d715..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_ioctl_set.c > +++ /dev/null > @@ -1,355 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/ > - * rtl871x_ioctl_set.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RTL871X_IOCTL_SET_C > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "rtl871x_ioctl_set.h" > -#include "rtl871x_security.h" > -#include "usb_osintf.h" > -#include "usb_ops.h" > - > -static u8 validate_ssid(struct ndis_802_11_ssid *ssid) > -{ > - u8 i; > - > - if (ssid->SsidLength > 32) > > - return false; > - for (i = 0; i < ssid->SsidLength; i++) { > > - /* wifi, printable ascii code must be supported */ > - if (!((ssid->Ssid[i] >= 0x20) && (ssid->Ssid[i] <= 0x7e))) > > - return false; > - } > - return true; > -} > - > -static u8 do_join(struct _adapter *padapter) > -{ > - struct list_head *plist, *phead; > - u8 *pibss = NULL; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct __queue *queue = &pmlmepriv->scanned_queue; > > - int ret; > - > - phead = &queue->queue; > > - plist = phead->next; > > - pmlmepriv->cur_network.join_res = -2; > > - pmlmepriv->fw_state |= _FW_UNDER_LINKING; > > - pmlmepriv->pscanned = plist; > > - pmlmepriv->to_join = true; > > - > - /* adhoc mode will start with an empty queue, but skip checking */ > - if (!check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) && > - list_empty(&queue->queue)) { > > - if (pmlmepriv->fw_state & _FW_UNDER_LINKING) > > - pmlmepriv->fw_state ^= _FW_UNDER_LINKING; > > - /* when set_ssid/set_bssid for do_join(), but scanning queue > - * is empty we try to issue sitesurvey firstly > - */ > - if (!pmlmepriv->sitesurveyctrl.traffic_busy) > > - r8712_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid); > > - return true; > - } > - > - ret = r8712_select_and_join_from_scan(pmlmepriv); > - if (!ret) { > - mod_timer(&pmlmepriv->assoc_timer, > > - jiffies + msecs_to_jiffies(MAX_JOIN_TIMEOUT)); > - } else { > - if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { > - /* submit r8712_createbss_cmd to change to an > - * ADHOC_MASTER pmlmepriv->lock has been > > - * acquired by caller... > - */ > - struct wlan_bssid_ex *pdev_network = > - &padapter->registrypriv.dev_network; > > - pmlmepriv->fw_state = WIFI_ADHOC_MASTER_STATE; > > - pibss = padapter->registrypriv.dev_network.MacAddress; > > - memcpy(&pdev_network->Ssid, > > - &pmlmepriv->assoc_ssid, > > - sizeof(struct ndis_802_11_ssid)); > - r8712_update_registrypriv_dev_network(padapter); > - r8712_generate_random_ibss(pibss); > - if (r8712_createbss_cmd(padapter)) > - return false; > - pmlmepriv->to_join = false; > > - } else { > - /* can't associate ; reset under-linking */ > - if (pmlmepriv->fw_state & _FW_UNDER_LINKING) > > - pmlmepriv->fw_state ^= > > - _FW_UNDER_LINKING; > - /* when set_ssid/set_bssid for do_join(), but > - * there are no desired bss in scanning queue > - * we try to issue sitesurvey first > - */ > - if (!pmlmepriv->sitesurveyctrl.traffic_busy) > > - r8712_sitesurvey_cmd(padapter, > - &pmlmepriv->assoc_ssid); > > - } > - } > - return true; > -} > - > -u8 r8712_set_802_11_bssid(struct _adapter *padapter, u8 *bssid) > -{ > - unsigned long irqL; > - u8 status = true; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - > - if (is_zero_ether_addr(bssid) || is_broadcast_ether_addr(bssid)) { > - status = false; > - return status; > - } > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY | > - _FW_UNDER_LINKING)) { > - status = check_fwstate(pmlmepriv, _FW_UNDER_LINKING); > - goto _Abort_Set_BSSID; > - } > - if (check_fwstate(pmlmepriv, > - _FW_LINKED | WIFI_ADHOC_MASTER_STATE)) { > - if (!memcmp(&pmlmepriv->cur_network.network.MacAddress, bssid, > > - ETH_ALEN)) { > - if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE)) > - /* driver is in > - * WIFI_ADHOC_MASTER_STATE > - */ > - goto _Abort_Set_BSSID; > - } else { > - r8712_disassoc_cmd(padapter); > - if (check_fwstate(pmlmepriv, _FW_LINKED)) > - r8712_ind_disconnect(padapter); > - r8712_free_assoc_resources(padapter); > - if ((check_fwstate(pmlmepriv, > - WIFI_ADHOC_MASTER_STATE))) { > - clr_fwstate(pmlmepriv, > - WIFI_ADHOC_MASTER_STATE); > - set_fwstate(pmlmepriv, WIFI_ADHOC_STATE); > - } > - } > - } > - memcpy(&pmlmepriv->assoc_bssid, bssid, ETH_ALEN); > > - pmlmepriv->assoc_by_bssid = true; > > - status = do_join(padapter); > - goto done; > -_Abort_Set_BSSID: > -done: > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > - return status; > -} > - > -void r8712_set_802_11_ssid(struct _adapter *padapter, > - struct ndis_802_11_ssid *ssid) > -{ > - unsigned long irqL; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct wlan_network *pnetwork = &pmlmepriv->cur_network; > > - > - if (!padapter->hw_init_completed) > > - return; > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING)) { > - check_fwstate(pmlmepriv, _FW_UNDER_LINKING); > - goto _Abort_Set_SSID; > - } > - if (check_fwstate(pmlmepriv, _FW_LINKED | WIFI_ADHOC_MASTER_STATE)) { > - if ((pmlmepriv->assoc_ssid.SsidLength == ssid->SsidLength) && > > - (!memcmp(&pmlmepriv->assoc_ssid.Ssid, ssid->Ssid, > > - ssid->SsidLength))) { > > - if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { > - if (!r8712_is_same_ibss(padapter, > - pnetwork)) { > - /* if in WIFI_ADHOC_MASTER_STATE or > - * WIFI_ADHOC_STATE, create bss or > - * rejoin again > - / > - r8712_disassoc_cmd(padapter); > - if (check_fwstate(pmlmepriv, > - _FW_LINKED)) > - r8712_ind_disconnect(padapter); > - r8712_free_assoc_resources(padapter); > - if (check_fwstate(pmlmepriv, > - WIFI_ADHOC_MASTER_STATE)) { > - clr_fwstate(pmlmepriv, > - WIFI_ADHOC_MASTER_STATE); > - set_fwstate(pmlmepriv, > - WIFI_ADHOC_STATE); > - } > - } else { > - / driver is in > - * WIFI_ADHOC_MASTER_STATE > - */ > - goto _Abort_Set_SSID; > - } > - } > - } else { > - r8712_disassoc_cmd(padapter); > - if (check_fwstate(pmlmepriv, _FW_LINKED)) > - r8712_ind_disconnect(padapter); > - r8712_free_assoc_resources(padapter); > - if (check_fwstate(pmlmepriv, > - WIFI_ADHOC_MASTER_STATE)) { > - clr_fwstate(pmlmepriv, > - WIFI_ADHOC_MASTER_STATE); > - set_fwstate(pmlmepriv, WIFI_ADHOC_STATE); > - } > - } > - } > - if (padapter->securitypriv.btkip_countermeasure) > > - goto _Abort_Set_SSID; > - if (!validate_ssid(ssid)) > - goto _Abort_Set_SSID; > - memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(struct ndis_802_11_ssid)); > > - pmlmepriv->assoc_by_bssid = false; > > - do_join(padapter); > - goto done; > -_Abort_Set_SSID: > -done: > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > -} > - > -void r8712_set_802_11_infrastructure_mode(struct _adapter *padapter, > - enum NDIS_802_11_NETWORK_INFRASTRUCTURE networktype) > -{ > - unsigned long irqL; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct wlan_network *cur_network = &pmlmepriv->cur_network; > > - enum NDIS_802_11_NETWORK_INFRASTRUCTURE *pold_state = > - &cur_network->network.InfrastructureMode; > > - > - if (*pold_state != networktype) { > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - if (check_fwstate(pmlmepriv, _FW_LINKED) || > - (*pold_state == Ndis802_11IBSS)) > - r8712_disassoc_cmd(padapter); > - if (check_fwstate(pmlmepriv, > - _FW_LINKED | WIFI_ADHOC_MASTER_STATE)) > - r8712_free_assoc_resources(padapter); > - if (check_fwstate(pmlmepriv, _FW_LINKED) || > - (*pold_state == Ndis802_11Infrastructure) || > - (pold_state == Ndis802_11IBSS)) { > - / will clr Linked_state before this function, > - * we must have checked whether issue dis-assoc_cmd or > - * not > - */ > - r8712_ind_disconnect(padapter); > - } > - pold_state = networktype; > - / clear WIFI_STATION_STATE; WIFI_AP_STATE; WIFI_ADHOC_STATE; > - * WIFI_ADHOC_MASTER_STATE > - */ > - clr_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_AP_STATE | > - WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE); > - switch (networktype) { > - case Ndis802_11IBSS: > - set_fwstate(pmlmepriv, WIFI_ADHOC_STATE); > - break; > - case Ndis802_11Infrastructure: > - set_fwstate(pmlmepriv, WIFI_STATION_STATE); > - break; > - case Ndis802_11APMode: > - set_fwstate(pmlmepriv, WIFI_AP_STATE); > - break; > - case Ndis802_11AutoUnknown: > - case Ndis802_11InfrastructureMax: > - break; > - } > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > - } > -} > - > -u8 r8712_set_802_11_disassociate(struct _adapter *padapter) > -{ > - unsigned long irqL; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - if (check_fwstate(pmlmepriv, _FW_LINKED)) { > - r8712_disassoc_cmd(padapter); > - r8712_ind_disconnect(padapter); > - r8712_free_assoc_resources(padapter); > - } > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > - return true; > -} > - > -u8 r8712_set_802_11_bssid_list_scan(struct _adapter *padapter) > -{ > - struct mlme_priv *pmlmepriv = NULL; > - unsigned long irqL; > - u8 ret = true; > - > - if (!padapter) > - return false; > - pmlmepriv = &padapter->mlmepriv; > > - if (!padapter->hw_init_completed) > > - return false; > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING) || > - pmlmepriv->sitesurveyctrl.traffic_busy) { > > - /* Scan or linking is in progress, do nothing. */ > - ret = (u8)check_fwstate(pmlmepriv, _FW_UNDER_SURVEY); > - } else { > - r8712_free_network_queue(padapter); > - ret = r8712_sitesurvey_cmd(padapter, NULL); > - } > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > - return ret; > -} > - > -u8 r8712_set_802_11_authentication_mode(struct _adapter *padapter, > - enum NDIS_802_11_AUTHENTICATION_MODE authmode) > -{ > - struct security_priv *psecuritypriv = &padapter->securitypriv; > > - u8 ret; > - > - psecuritypriv->ndisauthtype = authmode; > > - if (psecuritypriv->ndisauthtype > 3) > > - psecuritypriv->auth_algorithm = AUTH_8021x; > > - if (r8712_set_auth(padapter, psecuritypriv)) > - ret = false; > - else > - ret = true; > - return ret; > -} > - > -int r8712_set_802_11_add_wep(struct _adapter *padapter, > - struct NDIS_802_11_WEP *wep) > -{ > - sint keyid; > - struct security_priv *psecuritypriv = &padapter->securitypriv; > > - > - keyid = wep->KeyIndex & 0x3fffffff; > > - if (keyid >= WEP_KEYS) > > - return -EINVAL; > - switch (wep->KeyLength) { > > - case 5: > - psecuritypriv->privacy_algorithm = WEP40; > > - break; > - case 13: > - psecuritypriv->privacy_algorithm = WEP104; > > - break; > - default: > - psecuritypriv->privacy_algorithm = NO_PRIVACY; > > - break; > - } > - memcpy(psecuritypriv->DefKey[keyid].skey, &wep->KeyMaterial, > > - wep->KeyLength); > > - psecuritypriv->DefKeylen[keyid] = wep->KeyLength; > > - psecuritypriv->PrivacyKeyIndex = keyid; > > - return r8712_set_key(padapter, psecuritypriv, keyid); > -} > diff --git a/drivers/staging/rtl8712/rtl871x_ioctl_set.h b/drivers/staging/rtl8712/rtl871x_ioctl_set.h > deleted file mode 100644 > index e2de820f61d9..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_ioctl_set.h > +++ /dev/null > @@ -1,45 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - **********/ > -#ifndef __IOCTL_SET_H > -#define __IOCTL_SET_H > - > -#include "drv_types.h" > - > -typedef u8 NDIS_802_11_PMKID_VALUE[16]; > - > -struct BSSIDInfo { > - unsigned char BSSID[6]; > - NDIS_802_11_PMKID_VALUE PMKID; > -}; > - > -u8 r8712_set_802_11_authentication_mode(struct _adapter pdapter, > - enum NDIS_802_11_AUTHENTICATION_MODE authmode); > - > -u8 r8712_set_802_11_bssid(struct _adapter padapter, u8 bssid); > - > -int r8712_set_802_11_add_wep(struct _adapter padapter, > - struct NDIS_802_11_WEP wep); > - > -u8 r8712_set_802_11_disassociate(struct _adapter padapter); > - > -u8 r8712_set_802_11_bssid_list_scan(struct _adapter padapter); > - > -void r8712_set_802_11_infrastructure_mode(struct _adapter padapter, > - enum NDIS_802_11_NETWORK_INFRASTRUCTURE networktype); > - > -void r8712_set_802_11_ssid(struct _adapter padapter, > - struct ndis_802_11_ssid ssid); > - > -#endif > - > diff --git a/drivers/staging/rtl8712/rtl871x_led.h b/drivers/staging/rtl8712/rtl871x_led.h > deleted file mode 100644 > index 2f0768132ad8..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_led.h > +++ /dev/null > @@ -1,118 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - *****************************************************************************/ > -#ifndef __RTL8712_LED_H > -#define __RTL8712_LED_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > - > -/=========================================================================== > - * LED customization. > - *=========================================================================== > - */ > -enum LED_CTL_MODE { > - LED_CTL_POWER_ON = 1, > - LED_CTL_LINK = 2, > - LED_CTL_NO_LINK = 3, > - LED_CTL_TX = 4, > - LED_CTL_RX = 5, > - LED_CTL_SITE_SURVEY = 6, > - LED_CTL_POWER_OFF = 7, > - LED_CTL_START_TO_LINK = 8, > - LED_CTL_START_WPS = 9, > - LED_CTL_STOP_WPS = 10, > - LED_CTL_START_WPS_BOTTON = 11, > - LED_CTL_STOP_WPS_FAIL = 12, > - LED_CTL_STOP_WPS_FAIL_OVERLAP = 13, > -}; > - > -#define IS_LED_WPS_BLINKING(_LED_871x) \ > - (((struct LED_871x *)_LED_871x)->CurrLedState == LED_BLINK_WPS \ > > - || ((struct LED_871x *)_LED_871x)->CurrLedState == LED_BLINK_WPS_STOP \ > > - || ((struct LED_871x *)_LED_871x)->bLedWPSBlinkInProgress) > > - > -#define IS_LED_BLINKING(_LED_871x) \ > - (((struct LED_871x *)_LED_871x)->bLedWPSBlinkInProgress \ > > - || ((struct LED_871x *)_LED_871x)->bLedScanBlinkInProgress) > > - > -enum LED_PIN_871x { > - LED_PIN_GPIO0, > - LED_PIN_LED0, > - LED_PIN_LED1 > -}; > - > -/=========================================================================== > - * LED customization. > - =========================================================================== > - / > -enum LED_STRATEGY_871x { > - SW_LED_MODE0, / SW control 1 LED via GPIO0. It is default option. / > - SW_LED_MODE1, / 2 LEDs, through LED0 and LED1. For ALPHA. / > - SW_LED_MODE2, / SW control 1 LED via GPIO0, > - * custom for AzWave 8187 minicard. > - / > - SW_LED_MODE3, / SW control 1 LED via GPIO0, > - * customized for Sercomm Printer Server case. > - / > - SW_LED_MODE4, /for Edimax / Belkin/ > - SW_LED_MODE5, /for Sercomm / Belkin/ > - SW_LED_MODE6, /for WNC / Corega/ > - HW_LED, / HW control 2 LEDs, LED0 and LED1 (there are 4 different > - * control modes, see MAC.CONFIG1 for details.) > - / > -}; > - > -struct LED_871x { > - struct _adapter padapter; > - enum LED_PIN_871x LedPin; / Implementation for this SW led. / > - u32 CurrLedState; / Current LED state. / > - u8 bLedOn; / true if LED is ON / > - u8 bSWLedCtrl; > - u8 bLedBlinkInProgress; /true if blinking / > - u8 bLedNoLinkBlinkInProgress; > - u8 bLedLinkBlinkInProgress; > - u8 bLedStartToLinkBlinkInProgress; > - u8 bLedScanBlinkInProgress; > - u8 bLedWPSBlinkInProgress; > - u32 BlinkTimes; / No. times to toggle for blink./ > - u32 BlinkingLedState; / Next state for blinking, > - * either LED_ON or OFF. > - / > - > - struct timer_list BlinkTimer; / Timer object for led blinking./ > - struct work_struct BlinkWorkItem; / Workitem used by BlinkTimer / > -}; > - > -struct led_priv { > - / add for led control / > - struct LED_871x SwLed0; > - struct LED_871x SwLed1; > - enum LED_STRATEGY_871x LedStrategy; > - u8 bRegUseLed; > - void (LedControlHandler)(struct _adapter padapter, > - enum LED_CTL_MODE LedAction); > - / add for led control / > -}; > - > -/=========================================================================== > - * Interface to manipulate LED objects. > - =========================================================================== > - / > -void r8712_InitSwLeds(struct _adapter padapter); > -void r8712_DeInitSwLeds(struct _adapter padapter); > -void LedControl871x(struct _adapter padapter, enum LED_CTL_MODE LedAction); > -void r8712_flush_led_works(struct _adapter padapter); > - > -#endif > - > diff --git a/drivers/staging/rtl8712/rtl871x_mlme.c b/drivers/staging/rtl8712/rtl871x_mlme.c > deleted file mode 100644 > index 1ca94e90dfe6..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_mlme.c > +++ /dev/null > @@ -1,1711 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/********************************************************************* > - * rtl871x_mlme.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RTL871X_MLME_C > - > -#include <linux/etherdevice.h> > > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "recv_osdep.h" > -#include "xmit_osdep.h" > -#include "mlme_osdep.h" > -#include "rtl871x_security.h" > -#include "sta_info.h" > -#include "wifi.h" > -#include "wlan_bssdef.h" > - > -static void update_ht_cap(struct _adapter *padapter, u8 *pie, uint ie_len); > - > -int r8712_init_mlme_priv(struct _adapter *padapter) > -{ > - sint i; > - u8 *pbuf; > - struct wlan_network *pnetwork; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - > - memset((u8 *)pmlmepriv, 0, sizeof(struct mlme_priv)); > - pmlmepriv->nic_hdl = (u8 *)padapter; > > - pmlmepriv->pscanned = NULL; > > - pmlmepriv->fw_state = 0; > > - pmlmepriv->cur_network.network.InfrastructureMode = > > - Ndis802_11AutoUnknown; > - /* Maybe someday we should rename this variable to "active_mode"(Jeff)/ > - pmlmepriv->passive_mode = 1; / 1: active, 0: passive. */ > > - spin_lock_init(&pmlmepriv->lock); > > - spin_lock_init(&pmlmepriv->lock2); > > - _init_queue(&pmlmepriv->free_bss_pool); > > - _init_queue(&pmlmepriv->scanned_queue); > > - set_scanned_network_val(pmlmepriv, 0); > - memset(&pmlmepriv->assoc_ssid, 0, sizeof(struct ndis_802_11_ssid)); > > - pbuf = kmalloc_array(MAX_BSS_CNT, sizeof(struct wlan_network), > - GFP_ATOMIC); > - if (!pbuf) > - return -ENOMEM; > - pmlmepriv->free_bss_buf = pbuf; > > - pnetwork = (struct wlan_network *)pbuf; > - for (i = 0; i < MAX_BSS_CNT; i++) { > - INIT_LIST_HEAD(&pnetwork->list); > > - list_add_tail(&pnetwork->list, > > - &pmlmepriv->free_bss_pool.queue); > > - pnetwork++; > - } > - pmlmepriv->sitesurveyctrl.last_rx_pkts = 0; > > - pmlmepriv->sitesurveyctrl.last_tx_pkts = 0; > > - pmlmepriv->sitesurveyctrl.traffic_busy = false; > > - /* allocate DMA-able/Non-Page memory for cmd_buf and rsp_buf */ > - r8712_init_mlme_timer(padapter); > - return 0; > -} > - > -struct wlan_network *_r8712_alloc_network(struct mlme_priv *pmlmepriv) > -{ > - unsigned long irqL; > - struct wlan_network *pnetwork; > - struct __queue *free_queue = &pmlmepriv->free_bss_pool; > > - > - spin_lock_irqsave(&free_queue->lock, irqL); > > - pnetwork = list_first_entry_or_null(&free_queue->queue, > > - struct wlan_network, list); > - if (pnetwork) { > - list_del_init(&pnetwork->list); > > - pnetwork->last_scanned = jiffies; > > - pmlmepriv->num_of_scanned++; > > - } > - spin_unlock_irqrestore(&free_queue->lock, irqL); > > - return pnetwork; > -} > - > -static void _free_network(struct mlme_priv *pmlmepriv, > - struct wlan_network *pnetwork) > -{ > - u32 curr_time, delta_time; > - unsigned long irqL; > - struct __queue *free_queue = &pmlmepriv->free_bss_pool; > > - > - if (!pnetwork) > - return; > - if (pnetwork->fixed) > > - return; > - curr_time = jiffies; > - delta_time = (curr_time - (u32)pnetwork->last_scanned) / HZ; > > - if (delta_time < SCANQUEUE_LIFETIME) > - return; > - spin_lock_irqsave(&free_queue->lock, irqL); > > - list_del_init(&pnetwork->list); > > - list_add_tail(&pnetwork->list, &free_queue->queue); > > - pmlmepriv->num_of_scanned--; > > - spin_unlock_irqrestore(&free_queue->lock, irqL); > > -} > - > -static void free_network_nolock(struct mlme_priv *pmlmepriv, > - struct wlan_network *pnetwork) > -{ > - struct __queue *free_queue = &pmlmepriv->free_bss_pool; > > - > - if (!pnetwork) > - return; > - if (pnetwork->fixed) > > - return; > - list_del_init(&pnetwork->list); > > - list_add_tail(&pnetwork->list, &free_queue->queue); > > - pmlmepriv->num_of_scanned--; > > -} > - > -/* return the wlan_network with the matching addr > - * Shall be called under atomic context... > - * to avoid possible racing condition... > - */ > -static struct wlan_network *r8712_find_network(struct __queue *scanned_queue, > - u8 *addr) > -{ > - unsigned long irqL; > - struct list_head *phead, *plist; > - struct wlan_network *pnetwork = NULL; > - > - if (is_zero_ether_addr(addr)) > - return NULL; > - spin_lock_irqsave(&scanned_queue->lock, irqL); > > - phead = &scanned_queue->queue; > > - list_for_each(plist, phead) { > - pnetwork = list_entry(plist, struct wlan_network, list); > - if (!memcmp(addr, pnetwork->network.MacAddress, ETH_ALEN)) > > - break; > - } > - if (plist == phead) > - pnetwork = NULL; > - spin_unlock_irqrestore(&scanned_queue->lock, irqL); > > - return pnetwork; > -} > - > -void r8712_free_network_queue(struct _adapter *padapter) > -{ > - unsigned long irqL; > - struct list_head *phead, *plist; > - struct wlan_network *pnetwork; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct __queue *scanned_queue = &pmlmepriv->scanned_queue; > > - > - spin_lock_irqsave(&scanned_queue->lock, irqL); > > - phead = &scanned_queue->queue; > > - plist = phead->next; > > - while (!end_of_queue_search(phead, plist)) { > - pnetwork = container_of(plist, struct wlan_network, list); > - plist = plist->next; > > - _free_network(pmlmepriv, pnetwork); > - } > - spin_unlock_irqrestore(&scanned_queue->lock, irqL); > > -} > - > -sint r8712_if_up(struct _adapter *padapter) > -{ > - sint res; > - > - if (padapter->driver_stopped || padapter->surprise_removed || > > - !check_fwstate(&padapter->mlmepriv, _FW_LINKED)) { > > - res = false; > - } else { > - res = true; > - } > - return res; > -} > - > -void r8712_generate_random_ibss(u8 *pibss) > -{ > - u32 curtime = jiffies; > - > - pibss[0] = 0x02; /*in ad-hoc mode bit1 must set to 1 */ > - pibss[1] = 0x11; > - pibss[2] = 0x87; > - pibss[3] = (u8)(curtime & 0xff); > - pibss[4] = (u8)((curtime >> 8) & 0xff); > > - pibss[5] = (u8)((curtime >> 16) & 0xff); > > -} > - > -uint r8712_get_wlan_bssid_ex_sz(struct wlan_bssid_ex *bss) > -{ > - return sizeof(*bss) + bss->IELength - MAX_IE_SZ; > > -} > - > -u8 *r8712_get_capability_from_ie(u8 *ie) > -{ > - return ie + 8 + 2; > -} > - > -void r8712_free_mlme_priv(struct mlme_priv *pmlmepriv) > -{ > - kfree(pmlmepriv->free_bss_buf); > > -} > - > -static struct wlan_network *alloc_network(struct mlme_priv *pmlmepriv) > -{ > - return _r8712_alloc_network(pmlmepriv); > -} > - > -int r8712_is_same_ibss(struct _adapter *adapter, struct wlan_network *pnetwork) > -{ > - int ret = true; > - struct security_priv *psecuritypriv = &adapter->securitypriv; > > - > - if ((psecuritypriv->privacy_algorithm != NO_PRIVACY) && > > - (pnetwork->network.Privacy == cpu_to_le32(0))) > > - ret = false; > - else if ((psecuritypriv->privacy_algorithm == NO_PRIVACY) && > > - (pnetwork->network.Privacy == cpu_to_le32(1))) > > - ret = false; > - else > - ret = true; > - return ret; > - > -} > - > -static int is_same_network(struct wlan_bssid_ex *src, > - struct wlan_bssid_ex *dst) > -{ > - u16 s_cap, d_cap; > - > - memcpy((u8 *)&s_cap, r8712_get_capability_from_ie(src->IEs), 2); > > - memcpy((u8 *)&d_cap, r8712_get_capability_from_ie(dst->IEs), 2); > > - return (src->Ssid.SsidLength == dst->Ssid.SsidLength) && > > - (src->Configuration.DSConfig == > > - dst->Configuration.DSConfig) && > > - ((!memcmp(src->MacAddress, dst->MacAddress, > > - ETH_ALEN))) && > - ((!memcmp(src->Ssid.Ssid, > > - dst->Ssid.Ssid, > > - src->Ssid.SsidLength))) && > > - ((s_cap & WLAN_CAPABILITY_IBSS) == > - (d_cap & WLAN_CAPABILITY_IBSS)) && > - ((s_cap & WLAN_CAPABILITY_ESS) == > - (d_cap & WLAN_CAPABILITY_ESS)); > - > -} > - > -struct wlan_network *r8712_get_oldest_wlan_network( > - struct __queue *scanned_queue) > -{ > - struct list_head *plist, *phead; > - struct wlan_network *pwlan = NULL; > - struct wlan_network *oldest = NULL; > - > - phead = &scanned_queue->queue; > > - plist = phead->next; > > - while (1) { > - if (end_of_queue_search(phead, plist)) > - break; > - pwlan = container_of(plist, struct wlan_network, list); > - if (!pwlan->fixed) { > > - if (!oldest || > - time_after((unsigned long)oldest->last_scanned, > > - (unsigned long)pwlan->last_scanned)) > > - oldest = pwlan; > - } > - plist = plist->next; > > - } > - return oldest; > -} > - > -static void update_network(struct wlan_bssid_ex *dst, > - struct wlan_bssid_ex *src, > - struct _adapter *padapter) > -{ > - u32 last_evm = 0, tmpVal; > - struct smooth_rssi_data *sqd = &padapter->recvpriv.signal_qual_data; > > - > - if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) && > > - is_same_network(&padapter->mlmepriv.cur_network.network, src)) { > > - if (padapter->recvpriv.signal_qual_data.total_num++ >= > > - PHY_LINKQUALITY_SLID_WIN_MAX) { > - padapter->recvpriv.signal_qual_data.total_num = > > - PHY_LINKQUALITY_SLID_WIN_MAX; > - last_evm = sqd->elements[sqd->index]; > > - padapter->recvpriv.signal_qual_data.total_val -= > > - last_evm; > - } > - padapter->recvpriv.signal_qual_data.total_val += src->Rssi; > > - > - sqd->elements[sqd->index++] = src->Rssi; > > - if (padapter->recvpriv.signal_qual_data.index >= > > - PHY_LINKQUALITY_SLID_WIN_MAX) > - padapter->recvpriv.signal_qual_data.index = 0; > > - /* <1> Showed on UI for user, in percentage. */ > > - tmpVal = padapter->recvpriv.signal_qual_data.total_val / > > - padapter->recvpriv.signal_qual_data.total_num; > > - padapter->recvpriv.signal = (u8)tmpVal; > > - > - src->Rssi = padapter->recvpriv.signal; > > - } else { > - src->Rssi = (src->Rssi + dst->Rssi) / 2; > > - } > - memcpy((u8 *)dst, (u8 *)src, r8712_get_wlan_bssid_ex_sz(src)); > -} > - > -static void update_current_network(struct _adapter *adapter, > - struct wlan_bssid_ex *pnetwork) > -{ > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - > - if (is_same_network(&pmlmepriv->cur_network.network, pnetwork)) { > > - update_network(&pmlmepriv->cur_network.network, > > - pnetwork, adapter); > - r8712_update_protection(adapter, > - (pmlmepriv->cur_network.network.IEs) + > > - sizeof(struct NDIS_802_11_FIXED_IEs), > - pmlmepriv->cur_network.network.IELength); > > - } > -} > - > -/* Caller must hold pmlmepriv->lock first */ > > -static void update_scanned_network(struct _adapter *adapter, > - struct wlan_bssid_ex *target) > -{ > - struct list_head *plist, *phead; > - > - u32 bssid_ex_sz; > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - struct __queue *queue = &pmlmepriv->scanned_queue; > > - struct wlan_network *pnetwork = NULL; > - struct wlan_network *oldest = NULL; > - > - phead = &queue->queue; > > - plist = phead->next; > > - > - while (1) { > - if (end_of_queue_search(phead, plist)) > - break; > - > - pnetwork = container_of(plist, struct wlan_network, list); > - if (is_same_network(&pnetwork->network, target)) > > - break; > - if ((oldest == ((struct wlan_network *)0)) || > - time_after((unsigned long)oldest->last_scanned, > > - (unsigned long)pnetwork->last_scanned)) > > - oldest = pnetwork; > - > - plist = plist->next; > > - } > - > - /* If we didn't find a match, then get a new network slot to initialize > - * with this beacon's information > - */ > - if (end_of_queue_search(phead, plist)) { > - if (list_empty(&pmlmepriv->free_bss_pool.queue)) { > > - /* If there are no more slots, expire the oldest */ > - pnetwork = oldest; > - target->Rssi = (pnetwork->network.Rssi + > > - target->Rssi) / 2; > > - memcpy(&pnetwork->network, target, > > - r8712_get_wlan_bssid_ex_sz(target)); > - pnetwork->last_scanned = jiffies; > > - } else { > - /* Otherwise just pull from the free list / > - / update scan_time */ > - pnetwork = alloc_network(pmlmepriv); > - if (!pnetwork) > - return; > - bssid_ex_sz = r8712_get_wlan_bssid_ex_sz(target); > - target->Length = bssid_ex_sz; > > - memcpy(&pnetwork->network, target, bssid_ex_sz); > > - list_add_tail(&pnetwork->list, &queue->queue); > > - } > - } else { > - /* we have an entry and we are going to update it. But > - * this entry may be already expired. In this case we > - * do the same as we found a new net and call the new_net > - * handler > - */ > - update_network(&pnetwork->network, target, adapter); > > - pnetwork->last_scanned = jiffies; > > - } > -} > - > -static void rtl8711_add_network(struct _adapter *adapter, > - struct wlan_bssid_ex *pnetwork) > -{ > - unsigned long irqL; > - struct mlme_priv *pmlmepriv = &(((struct _adapter *)adapter)->mlmepriv); > > - struct __queue *queue = &pmlmepriv->scanned_queue; > > - > - spin_lock_irqsave(&queue->lock, irqL); > > - update_current_network(adapter, pnetwork); > - update_scanned_network(adapter, pnetwork); > - spin_unlock_irqrestore(&queue->lock, irqL); > > -} > - > -/*select the desired network based on the capability of the (i)bss. > - * check items: (1) security > - * (2) network_type > - * (3) WMM > - * (4) HT > - * (5) others > - */ > -static int is_desired_network(struct _adapter *adapter, > - struct wlan_network *pnetwork) > -{ > - u8 wps_ie[512]; > - uint wps_ielen; > - int bselected = true; > - struct security_priv *psecuritypriv = &adapter->securitypriv; > > - > - if (psecuritypriv->wps_phase) { > > - if (r8712_get_wps_ie(pnetwork->network.IEs, > > - pnetwork->network.IELength, wps_ie, > > - &wps_ielen)) > - return true; > - return false; > - } > - if ((psecuritypriv->privacy_algorithm != NO_PRIVACY) && > > - (pnetwork->network.Privacy == 0)) > > - bselected = false; > - if (check_fwstate(&adapter->mlmepriv, WIFI_ADHOC_STATE)) { > > - if (pnetwork->network.InfrastructureMode != > > - adapter->mlmepriv.cur_network.network.InfrastructureMode) > > - bselected = false; > - } > - return bselected; > -} > - > -/* TODO: Perry : For Power Management */ > -void r8712_atimdone_event_callback(struct _adapter *adapter, u8 *pbuf) > -{ > -} > - > -void r8712_survey_event_callback(struct _adapter *adapter, u8 *pbuf) > -{ > - unsigned long flags; > - u32 len; > - struct wlan_bssid_ex *pnetwork; > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - > - pnetwork = (struct wlan_bssid_ex )pbuf; > -#ifdef __BIG_ENDIAN > - / endian_convert */ > - pnetwork->Length = le32_to_cpu(pnetwork->Length); > > - pnetwork->Ssid.SsidLength = le32_to_cpu(pnetwork->Ssid.SsidLength); > > - pnetwork->Privacy = le32_to_cpu(pnetwork->Privacy); > > - pnetwork->Rssi = le32_to_cpu(pnetwork->Rssi); > > - pnetwork->NetworkTypeInUse = le32_to_cpu(pnetwork->NetworkTypeInUse); > > - pnetwork->Configuration.ATIMWindow = > > - le32_to_cpu(pnetwork->Configuration.ATIMWindow); > > - pnetwork->Configuration.BeaconPeriod = > > - le32_to_cpu(pnetwork->Configuration.BeaconPeriod); > > - pnetwork->Configuration.DSConfig = > > - le32_to_cpu(pnetwork->Configuration.DSConfig); > > - pnetwork->Configuration.FHConfig.DwellTime = > > - le32_to_cpu(pnetwork->Configuration.FHConfig.DwellTime); > > - pnetwork->Configuration.FHConfig.HopPattern = > > - le32_to_cpu(pnetwork->Configuration.FHConfig.HopPattern); > > - pnetwork->Configuration.FHConfig.HopSet = > > - le32_to_cpu(pnetwork->Configuration.FHConfig.HopSet); > > - pnetwork->Configuration.FHConfig.Length = > > - le32_to_cpu(pnetwork->Configuration.FHConfig.Length); > > - pnetwork->Configuration.Length = > > - le32_to_cpu(pnetwork->Configuration.Length); > > - pnetwork->InfrastructureMode = > > - le32_to_cpu(pnetwork->InfrastructureMode); > > - pnetwork->IELength = le32_to_cpu(pnetwork->IELength); > > -#endif > - len = r8712_get_wlan_bssid_ex_sz(pnetwork); > - if (len > sizeof(struct wlan_bssid_ex)) > > - return; > - spin_lock_irqsave(&pmlmepriv->lock2, flags); > > - /* update IBSS_network 's timestamp */ > - if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) { > - if (!memcmp(&pmlmepriv->cur_network.network.MacAddress, > > - pnetwork->MacAddress, ETH_ALEN)) { > > - struct wlan_network *ibss_wlan = NULL; > - > - memcpy(pmlmepriv->cur_network.network.IEs, > > - pnetwork->IEs, 8); > > - ibss_wlan = r8712_find_network( > - &pmlmepriv->scanned_queue, > > - pnetwork->MacAddress); > > - if (ibss_wlan) { > - memcpy(ibss_wlan->network.IEs, > > - pnetwork->IEs, 8); > > - goto exit; > - } > - } > - } > - /* lock pmlmepriv->lock when you accessing network_q */ > > - if (!check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) { > - if (pnetwork->Ssid.Ssid[0] != 0) { > > - rtl8711_add_network(adapter, pnetwork); > - } else { > - pnetwork->Ssid.SsidLength = 8; > > - memcpy(pnetwork->Ssid.Ssid, "<hidden>", 8); > > - rtl8711_add_network(adapter, pnetwork); > - } > - } > -exit: > - spin_unlock_irqrestore(&pmlmepriv->lock2, flags); > > -} > - > -void r8712_surveydone_event_callback(struct _adapter *adapter, u8 *pbuf) > -{ > - unsigned long irqL; > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - > - if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) { > - del_timer(&pmlmepriv->scan_to_timer); > > - > - clr_fwstate(pmlmepriv, _FW_UNDER_SURVEY); > - } > - > - if (pmlmepriv->to_join) { > > - if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { > - if (!check_fwstate(pmlmepriv, _FW_LINKED)) { > - set_fwstate(pmlmepriv, _FW_UNDER_LINKING); > - > - if (!r8712_select_and_join_from_scan(pmlmepriv)) { > - mod_timer(&pmlmepriv->assoc_timer, jiffies + > > - msecs_to_jiffies(MAX_JOIN_TIMEOUT)); > - } else { > - struct wlan_bssid_ex *pdev_network = > - &adapter->registrypriv.dev_network; > > - u8 *pibss = > - adapter->registrypriv.dev_network.MacAddress; > > - pmlmepriv->fw_state ^= _FW_UNDER_SURVEY; > > - memcpy(&pdev_network->Ssid, > > - &pmlmepriv->assoc_ssid, > > - sizeof(struct > - ndis_802_11_ssid)); > - r8712_update_registrypriv_dev_network > - (adapter); > - r8712_generate_random_ibss(pibss); > - pmlmepriv->fw_state = > > - WIFI_ADHOC_MASTER_STATE; > - pmlmepriv->to_join = false; > > - } > - } > - } else { > - pmlmepriv->to_join = false; > > - set_fwstate(pmlmepriv, _FW_UNDER_LINKING); > - if (!r8712_select_and_join_from_scan(pmlmepriv)) > - mod_timer(&pmlmepriv->assoc_timer, jiffies + > > - msecs_to_jiffies(MAX_JOIN_TIMEOUT)); > - else > - clr_fwstate(pmlmepriv, _FW_UNDER_LINKING); > - } > - } > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > -} > - > -/* > - *r8712_free_assoc_resources: the caller has to lock pmlmepriv->lock > > - */ > -void r8712_free_assoc_resources(struct _adapter *adapter) > -{ > - unsigned long irqL; > - struct wlan_network *pwlan = NULL; > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - struct sta_priv *pstapriv = &adapter->stapriv; > > - struct wlan_network *tgt_network = &pmlmepriv->cur_network; > > - > - pwlan = r8712_find_network(&pmlmepriv->scanned_queue, > > - tgt_network->network.MacAddress); > > - > - if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_AP_STATE)) { > - struct sta_info *psta; > - > - psta = r8712_get_stainfo(&adapter->stapriv, > > - tgt_network->network.MacAddress); > > - > - spin_lock_irqsave(&pstapriv->sta_hash_lock, irqL); > > - r8712_free_stainfo(adapter, psta); > - spin_unlock_irqrestore(&pstapriv->sta_hash_lock, irqL); > > - } > - > - if (check_fwstate(pmlmepriv, > - WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE | WIFI_AP_STATE)) > - r8712_free_all_stainfo(adapter); > - if (pwlan) > - pwlan->fixed = false; > > - > - if (((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) && > - (adapter->stapriv.asoc_sta_count == 1))) > > - free_network_nolock(pmlmepriv, pwlan); > -} > - > -/* > - * r8712_indicate_connect: the caller has to lock pmlmepriv->lock > > - */ > -void r8712_indicate_connect(struct _adapter *padapter) > -{ > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - > - pmlmepriv->to_join = false; > > - set_fwstate(pmlmepriv, _FW_LINKED); > - padapter->ledpriv.LedControlHandler(padapter, LED_CTL_LINK); > > - r8712_os_indicate_connect(padapter); > - if (padapter->registrypriv.power_mgnt > PS_MODE_ACTIVE) > > - mod_timer(&pmlmepriv->dhcp_timer, > > - jiffies + msecs_to_jiffies(60000)); > -} > - > -/* > - * r8712_ind_disconnect: the caller has to lock pmlmepriv->lock > > - */ > -void r8712_ind_disconnect(struct _adapter *padapter) > -{ > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - > - if (check_fwstate(pmlmepriv, _FW_LINKED)) { > - clr_fwstate(pmlmepriv, _FW_LINKED); > - padapter->ledpriv.LedControlHandler(padapter, LED_CTL_NO_LINK); > > - r8712_os_indicate_disconnect(padapter); > - } > - if (padapter->pwrctrlpriv.pwr_mode != > > - padapter->registrypriv.power_mgnt) { > > - del_timer(&pmlmepriv->dhcp_timer); > > - r8712_set_ps_mode(padapter, padapter->registrypriv.power_mgnt, > > - padapter->registrypriv.smart_ps); > > - } > -} > - > -/*Notes: > - *pnetwork : returns from r8712_joinbss_event_callback > - *ptarget_wlan: found from scanned_queue > - *if join_res > 0, for (fw_state==WIFI_STATION_STATE), we check if > > - * "ptarget_sta" & "ptarget_wlan" exist. > - *if join_res > 0, for (fw_state==WIFI_ADHOC_STATE), we only check > > - * if "ptarget_wlan" exist. > - *if join_res > 0, update "cur_network->network" from > > - * "pnetwork->network" if (ptarget_wlan !=NULL). > > - */ > -void r8712_joinbss_event_callback(struct _adapter *adapter, u8 *pbuf) > -{ > - unsigned long irqL = 0, irqL2; > - struct sta_info *ptarget_sta = NULL, *pcur_sta = NULL; > - struct sta_priv *pstapriv = &adapter->stapriv; > > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - struct wlan_network *cur_network = &pmlmepriv->cur_network; > > - struct wlan_network *pcur_wlan = NULL, *ptarget_wlan = NULL; > - unsigned int the_same_macaddr = false; > - struct wlan_network *pnetwork; > - > - if (sizeof(struct list_head) == 4 * sizeof(u32)) { > - pnetwork = kmalloc(sizeof(struct wlan_network), GFP_ATOMIC); > - if (!pnetwork) > - return; > - memcpy((u8 *)pnetwork + 16, (u8 *)pbuf + 8, > - sizeof(struct wlan_network) - 16); > - } else { > - pnetwork = (struct wlan_network )pbuf; > - } > - > -#ifdef __BIG_ENDIAN > - / endian_convert */ > - pnetwork->join_res = le32_to_cpu(pnetwork->join_res); > > - pnetwork->network_type = le32_to_cpu(pnetwork->network_type); > > - pnetwork->network.Length = le32_to_cpu(pnetwork->network.Length); > > - pnetwork->network.Ssid.SsidLength = > > - le32_to_cpu(pnetwork->network.Ssid.SsidLength); > > - pnetwork->network.Privacy = le32_to_cpu(pnetwork->network.Privacy); > > - pnetwork->network.Rssi = le32_to_cpu(pnetwork->network.Rssi); > > - pnetwork->network.NetworkTypeInUse = > > - le32_to_cpu(pnetwork->network.NetworkTypeInUse); > > - pnetwork->network.Configuration.ATIMWindow = > > - le32_to_cpu(pnetwork->network.Configuration.ATIMWindow); > > - pnetwork->network.Configuration.BeaconPeriod = > > - le32_to_cpu(pnetwork->network.Configuration.BeaconPeriod); > > - pnetwork->network.Configuration.DSConfig = > > - le32_to_cpu(pnetwork->network.Configuration.DSConfig); > > - pnetwork->network.Configuration.FHConfig.DwellTime = > > - le32_to_cpu(pnetwork->network.Configuration.FHConfig.DwellTime); > > - pnetwork->network.Configuration.FHConfig.HopPattern = > > - le32_to_cpu(pnetwork->network.Configuration.FHConfig.HopPattern); > > - pnetwork->network.Configuration.FHConfig.HopSet = > > - le32_to_cpu(pnetwork->network.Configuration.FHConfig.HopSet); > > - pnetwork->network.Configuration.FHConfig.Length = > > - le32_to_cpu(pnetwork->network.Configuration.FHConfig.Length); > > - pnetwork->network.Configuration.Length = > > - le32_to_cpu(pnetwork->network.Configuration.Length); > > - pnetwork->network.InfrastructureMode = > > - le32_to_cpu(pnetwork->network.InfrastructureMode); > > - pnetwork->network.IELength = le32_to_cpu(pnetwork->network.IELength); > > -#endif > - > - the_same_macaddr = !memcmp(pnetwork->network.MacAddress, > > - cur_network->network.MacAddress, ETH_ALEN); > > - pnetwork->network.Length = > > - r8712_get_wlan_bssid_ex_sz(&pnetwork->network); > > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - if (pnetwork->network.Length > sizeof(struct wlan_bssid_ex)) > > - goto ignore_joinbss_callback; > - if (pnetwork->join_res > 0) { > > - if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) { > - /s1. find ptarget_wlan/ > - if (check_fwstate(pmlmepriv, _FW_LINKED)) { > - if (the_same_macaddr) { > - ptarget_wlan = > - r8712_find_network(&pmlmepriv->scanned_queue, > > - cur_network->network.MacAddress); > > - } else { > - pcur_wlan = > - r8712_find_network(&pmlmepriv->scanned_queue, > > - cur_network->network.MacAddress); > > - if (pcur_wlan) > - pcur_wlan->fixed = false; > > - > - pcur_sta = r8712_get_stainfo(pstapriv, > - cur_network->network.MacAddress); > > - spin_lock_irqsave(&pstapriv->sta_hash_lock, irqL2); > > - r8712_free_stainfo(adapter, pcur_sta); > - spin_unlock_irqrestore(&pstapriv->sta_hash_lock, irqL2); > > - > - ptarget_wlan = > - r8712_find_network(&pmlmepriv->scanned_queue, > > - pnetwork->network.MacAddress); > > - if (ptarget_wlan) > - ptarget_wlan->fixed = true; > > - } > - } else { > - ptarget_wlan = r8712_find_network(&pmlmepriv->scanned_queue, > > - pnetwork->network.MacAddress); > > - if (ptarget_wlan) > - ptarget_wlan->fixed = true; > > - } > - > - if (!ptarget_wlan) { > - if (check_fwstate(pmlmepriv, > - _FW_UNDER_LINKING)) > - pmlmepriv->fw_state ^= > > - _FW_UNDER_LINKING; > - goto ignore_joinbss_callback; > - } > - > - /s2. find ptarget_sta & update ptarget_sta/ > - if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { > - if (the_same_macaddr) { > - ptarget_sta = > - r8712_get_stainfo(pstapriv, > - pnetwork->network.MacAddress); > > - if (!ptarget_sta) > - ptarget_sta = > - r8712_alloc_stainfo(pstapriv, > - pnetwork->network.MacAddress); > > - } else { > - ptarget_sta = > - r8712_alloc_stainfo(pstapriv, > - pnetwork->network.MacAddress); > > - } > - if (ptarget_sta) /update ptarget_sta/ { > - ptarget_sta->aid = pnetwork->join_res; > > - ptarget_sta->qos_option = 1; > > - ptarget_sta->mac_id = 5; > > - if (adapter->securitypriv.auth_algorithm == AUTH_8021x) { > > - adapter->securitypriv.binstallGrpkey = false; > > - adapter->securitypriv.busetkipkey = false; > > - adapter->securitypriv.bgrpkey_handshake = false; > > - ptarget_sta->ieee8021x_blocked = true; > > - ptarget_sta->XPrivacy = > > - adapter->securitypriv.privacy_algorithm; > > - memset((u8 *)&ptarget_sta->x_UncstKey, > > - 0, > - sizeof(union Keytype)); > - memset((u8 *)&ptarget_sta->tkiprxmickey, > > - 0, > - sizeof(union Keytype)); > - memset((u8 *)&ptarget_sta->tkiptxmickey, > > - 0, > - sizeof(union Keytype)); > - memset((u8 *)&ptarget_sta->txpn, > > - 0, > - sizeof(union pn48)); > - memset((u8 *)&ptarget_sta->rxpn, > > - 0, > - sizeof(union pn48)); > - } > - } else { > - if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) > - pmlmepriv->fw_state ^= > > - _FW_UNDER_LINKING; > - goto ignore_joinbss_callback; > - } > - } > - > - /s3. update cur_network & indicate connect/ > - memcpy(&cur_network->network, &pnetwork->network, > > - pnetwork->network.Length); > > - cur_network->aid = pnetwork->join_res; > > - /update fw_state will clr _FW_UNDER_LINKING/ > - switch (pnetwork->network.InfrastructureMode) { > > - case Ndis802_11Infrastructure: > - pmlmepriv->fw_state = WIFI_STATION_STATE; > > - break; > - case Ndis802_11IBSS: > - pmlmepriv->fw_state = WIFI_ADHOC_STATE; > > - break; > - default: > - pmlmepriv->fw_state = WIFI_NULL_STATE; > > - break; > - } > - r8712_update_protection(adapter, > - (cur_network->network.IEs) + > > - sizeof(struct NDIS_802_11_FIXED_IEs), > - (cur_network->network.IELength)); > > - /TODO: update HT_Capability/ > - update_ht_cap(adapter, cur_network->network.IEs, > > - cur_network->network.IELength); > > - /indicate connect/ > - if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) > - r8712_indicate_connect(adapter); > - del_timer(&pmlmepriv->assoc_timer); > > - } else { > - goto ignore_joinbss_callback; > - } > - } else { > - if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) { > - mod_timer(&pmlmepriv->assoc_timer, > > - jiffies + msecs_to_jiffies(1)); > - clr_fwstate(pmlmepriv, _FW_UNDER_LINKING); > - } > - } > -ignore_joinbss_callback: > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > - if (sizeof(struct list_head) == 4 * sizeof(u32)) > - kfree(pnetwork); > -} > - > -void r8712_stassoc_event_callback(struct _adapter *adapter, u8 *pbuf) > -{ > - unsigned long irqL; > - struct sta_info *psta; > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - struct stassoc_event *pstassoc = (struct stassoc_event )pbuf; > - > - / to do: */ > - if (!r8712_access_ctrl(&adapter->acl_list, pstassoc->macaddr)) > > - return; > - psta = r8712_get_stainfo(&adapter->stapriv, pstassoc->macaddr); > > - if (psta) { > - /*the sta have been in sta_info_queue => do nothing > > - *(between drv has received this event before and > - * fw have not yet to set key to CAM_ENTRY) > - */ > - return; > - } > - > - psta = r8712_alloc_stainfo(&adapter->stapriv, pstassoc->macaddr); > > - if (!psta) > - return; > - /* to do : init sta_info variable */ > - psta->qos_option = 0; > > - psta->mac_id = le32_to_cpu(pstassoc->cam_id); > > - /* psta->aid = (uint)pstassoc->cam_id; */ > > - > - if (adapter->securitypriv.auth_algorithm == AUTH_8021x) > > - psta->XPrivacy = adapter->securitypriv.privacy_algorithm; > > - psta->ieee8021x_blocked = false; > > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) || > - check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { > - if (adapter->stapriv.asoc_sta_count == 2) { > > - /* a sta + bc/mc_stainfo (not Ibss_stainfo) */ > - r8712_indicate_connect(adapter); > - } > - } > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > -} > - > -void r8712_stadel_event_callback(struct _adapter *adapter, u8 *pbuf) > -{ > - unsigned long irqL, irqL2; > - struct sta_info *psta; > - struct wlan_network *pwlan = NULL; > - struct wlan_bssid_ex *pdev_network = NULL; > - u8 *pibss = NULL; > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - struct stadel_event *pstadel = (struct stadel_event *)pbuf; > - struct sta_priv *pstapriv = &adapter->stapriv; > > - struct wlan_network *tgt_network = &pmlmepriv->cur_network; > > - > - spin_lock_irqsave(&pmlmepriv->lock, irqL2); > > - if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { > - r8712_ind_disconnect(adapter); > - r8712_free_assoc_resources(adapter); > - } > - if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE | > - WIFI_ADHOC_STATE)) { > - psta = r8712_get_stainfo(&adapter->stapriv, pstadel->macaddr); > > - spin_lock_irqsave(&pstapriv->sta_hash_lock, irqL); > > - r8712_free_stainfo(adapter, psta); > - spin_unlock_irqrestore(&pstapriv->sta_hash_lock, irqL); > > - if (adapter->stapriv.asoc_sta_count == 1) { > > - /*a sta + bc/mc_stainfo (not Ibss_stainfo) */ > - pwlan = r8712_find_network(&pmlmepriv->scanned_queue, > > - tgt_network->network.MacAddress); > > - if (pwlan) { > - pwlan->fixed = false; > > - free_network_nolock(pmlmepriv, pwlan); > - } > - /re-create ibss/ > - pdev_network = &adapter->registrypriv.dev_network; > > - pibss = adapter->registrypriv.dev_network.MacAddress; > > - memcpy(pdev_network, &tgt_network->network, > > - r8712_get_wlan_bssid_ex_sz(&tgt_network->network)); > > - memcpy(&pdev_network->Ssid, > > - &pmlmepriv->assoc_ssid, > > - sizeof(struct ndis_802_11_ssid)); > - r8712_update_registrypriv_dev_network(adapter); > - r8712_generate_random_ibss(pibss); > - if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { > - clr_fwstate(pmlmepriv, WIFI_ADHOC_STATE); > - set_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE); > - } > - } > - } > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL2); > > -} > - > -void r8712_cpwm_event_callback(struct _adapter *adapter, u8 *pbuf) > -{ > - struct reportpwrstate_parm *preportpwrstate = > - (struct reportpwrstate_parm *)pbuf; > - > - preportpwrstate->state |= (u8)(adapter->pwrctrlpriv.cpwm_tog + 0x80); > > - r8712_cpwm_int_hdl(adapter, preportpwrstate); > -} > - > -/* When the Netgear 3500 AP is with WPA2PSK-AES mode, it will send > - * the ADDBA req frame with start seq control = 0 to wifi client after > - * the WPA handshake and the sequence number of following data packet > - * will be 0. In this case, the Rx reorder sequence is not longer than 0 > - * and the WiFi client will drop the data with seq number 0. > - * So, the 8712 firmware has to inform driver with receiving the > - * ADDBA-Req frame so that the driver can reset the > - * sequence value of Rx reorder control. > - */ > -void r8712_got_addbareq_event_callback(struct _adapter *adapter, u8 *pbuf) > -{ > - struct ADDBA_Req_Report_parm *pAddbareq_pram = > - (struct ADDBA_Req_Report_parm *)pbuf; > - struct sta_info *psta; > - struct sta_priv *pstapriv = &adapter->stapriv; > > - struct recv_reorder_ctrl *precvreorder_ctrl = NULL; > - > - psta = r8712_get_stainfo(pstapriv, pAddbareq_pram->MacAddress); > > - if (psta) { > - precvreorder_ctrl = > - &psta->recvreorder_ctrl[pAddbareq_pram->tid]; > > - /* set the indicate_seq to 0xffff so that the rx reorder > - * can store any following data packet. > - */ > - precvreorder_ctrl->indicate_seq = 0xffff; > > - } > -} > - > -void r8712_wpspbc_event_callback(struct _adapter *adapter, u8 *pbuf) > -{ > - if (!adapter->securitypriv.wps_hw_pbc_pressed) > > - adapter->securitypriv.wps_hw_pbc_pressed = true; > > -} > - > -void _r8712_sitesurvey_ctrl_handler(struct _adapter *adapter) > -{ > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - struct sitesurvey_ctrl *psitesurveyctrl = &pmlmepriv->sitesurveyctrl; > > - struct registry_priv *pregistrypriv = &adapter->registrypriv; > > - u64 current_tx_pkts; > - uint current_rx_pkts; > - > - current_tx_pkts = (adapter->xmitpriv.tx_pkts) - > > - (psitesurveyctrl->last_tx_pkts); > > - current_rx_pkts = (adapter->recvpriv.rx_pkts) - > > - (psitesurveyctrl->last_rx_pkts); > > - psitesurveyctrl->last_tx_pkts = adapter->xmitpriv.tx_pkts; > > - psitesurveyctrl->last_rx_pkts = adapter->recvpriv.rx_pkts; > > - if ((current_tx_pkts > pregistrypriv->busy_thresh) || > > - (current_rx_pkts > pregistrypriv->busy_thresh)) > > - psitesurveyctrl->traffic_busy = true; > > - else > - psitesurveyctrl->traffic_busy = false; > > -} > - > -void _r8712_join_timeout_handler(struct _adapter *adapter) > -{ > - unsigned long irqL; > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - > - if (adapter->driver_stopped || adapter->surprise_removed) > > - return; > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - clr_fwstate(pmlmepriv, _FW_UNDER_LINKING); > - pmlmepriv->to_join = false; > > - if (check_fwstate(pmlmepriv, _FW_LINKED)) { > - r8712_os_indicate_disconnect(adapter); > - clr_fwstate(pmlmepriv, _FW_LINKED); > - } > - if (adapter->pwrctrlpriv.pwr_mode != adapter->registrypriv.power_mgnt) { > > - r8712_set_ps_mode(adapter, adapter->registrypriv.power_mgnt, > > - adapter->registrypriv.smart_ps); > > - } > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > -} > - > -void r8712_scan_timeout_handler (struct _adapter *adapter) > -{ > - unsigned long irqL; > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - clr_fwstate(pmlmepriv, _FW_UNDER_SURVEY); > - pmlmepriv->to_join = false; /* scan fail, so clear to_join flag */ > > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > -} > - > -void _r8712_dhcp_timeout_handler (struct _adapter *adapter) > -{ > - if (adapter->driver_stopped || adapter->surprise_removed) > > - return; > - if (adapter->pwrctrlpriv.pwr_mode != adapter->registrypriv.power_mgnt) > > - r8712_set_ps_mode(adapter, adapter->registrypriv.power_mgnt, > > - adapter->registrypriv.smart_ps); > > -} > - > -int r8712_select_and_join_from_scan(struct mlme_priv *pmlmepriv) > -{ > - struct list_head *phead; > - unsigned char *dst_ssid, *src_ssid; > - struct _adapter *adapter; > - struct __queue *queue = NULL; > - struct wlan_network *pnetwork = NULL; > - struct wlan_network *pnetwork_max_rssi = NULL; > - > - adapter = (struct _adapter *)pmlmepriv->nic_hdl; > > - queue = &pmlmepriv->scanned_queue; > > - phead = &queue->queue; > > - pmlmepriv->pscanned = phead->next; > > - while (1) { > - if (end_of_queue_search(phead, pmlmepriv->pscanned)) { > > - if (pmlmepriv->assoc_by_rssi && pnetwork_max_rssi) { > > - pnetwork = pnetwork_max_rssi; > - goto ask_for_joinbss; > - } > - return -EINVAL; > - } > - pnetwork = container_of(pmlmepriv->pscanned, > > - struct wlan_network, list); > - pmlmepriv->pscanned = pmlmepriv->pscanned->next; > > - if (pmlmepriv->assoc_by_bssid) { > > - dst_ssid = pnetwork->network.MacAddress; > > - src_ssid = pmlmepriv->assoc_bssid; > > - if (!memcmp(dst_ssid, src_ssid, ETH_ALEN)) { > - if (check_fwstate(pmlmepriv, _FW_LINKED)) { > - if (is_same_network(&pmlmepriv->cur_network.network, > > - &pnetwork->network)) { > > - clr_fwstate(pmlmepriv, > - _FW_UNDER_LINKING); > - /r8712_indicate_connect again/ > - r8712_indicate_connect(adapter); > - return 2; > - } > - r8712_disassoc_cmd(adapter); > - r8712_ind_disconnect(adapter); > - r8712_free_assoc_resources(adapter); > - } > - goto ask_for_joinbss; > - } > - } else if (pmlmepriv->assoc_ssid.SsidLength == 0) { > > - goto ask_for_joinbss; > - } > - dst_ssid = pnetwork->network.Ssid.Ssid; > > - src_ssid = pmlmepriv->assoc_ssid.Ssid; > > - if ((pnetwork->network.Ssid.SsidLength == > > - pmlmepriv->assoc_ssid.SsidLength) && > > - (!memcmp(dst_ssid, src_ssid, > - pmlmepriv->assoc_ssid.SsidLength))) { > > - if (pmlmepriv->assoc_by_rssi) { > > - /* if the ssid is the same, select the bss > - * which has the max rssi > - */ > - if (pnetwork_max_rssi) { > - if (pnetwork->network.Rssi > > > - pnetwork_max_rssi->network.Rssi) > > - pnetwork_max_rssi = pnetwork; > - } else { > - pnetwork_max_rssi = pnetwork; > - } > - } else if (is_desired_network(adapter, pnetwork)) { > - if (check_fwstate(pmlmepriv, _FW_LINKED)) { > - r8712_disassoc_cmd(adapter); > - r8712_free_assoc_resources(adapter); > - } > - goto ask_for_joinbss; > - } > - } > - } > - > -ask_for_joinbss: > - return r8712_joinbss_cmd(adapter, pnetwork); > -} > - > -int r8712_set_auth(struct _adapter *adapter, > - struct security_priv *psecuritypriv) > -{ > - struct cmd_priv *pcmdpriv = &adapter->cmdpriv; > > - struct cmd_obj *pcmd; > - struct setauth_parm *psetauthparm; > - > - pcmd = kmalloc(sizeof(*pcmd), GFP_ATOMIC); > - if (!pcmd) > - return -ENOMEM; > - > - psetauthparm = kzalloc(sizeof(*psetauthparm), GFP_ATOMIC); > - if (!psetauthparm) { > - kfree(pcmd); > - return -ENOMEM; > - } > - psetauthparm->mode = (u8)psecuritypriv->auth_algorithm; > > - pcmd->cmdcode = SetAuth_CMD; > > - pcmd->parmbuf = (unsigned char *)psetauthparm; > > - pcmd->cmdsz = sizeof(struct setauth_parm); > > - pcmd->rsp = NULL; > > - pcmd->rspsz = 0; > > - INIT_LIST_HEAD(&pcmd->list); > > - r8712_enqueue_cmd(pcmdpriv, pcmd); > - return 0; > -} > - > -int r8712_set_key(struct _adapter *adapter, > - struct security_priv *psecuritypriv, > - sint keyid) > -{ > - struct cmd_priv *pcmdpriv = &adapter->cmdpriv; > > - struct cmd_obj *pcmd; > - struct setkey_parm *psetkeyparm; > - u8 keylen; > - int ret; > - > - pcmd = kmalloc(sizeof(*pcmd), GFP_ATOMIC); > - if (!pcmd) > - return -ENOMEM; > - psetkeyparm = kzalloc(sizeof(*psetkeyparm), GFP_ATOMIC); > - if (!psetkeyparm) { > - ret = -ENOMEM; > - goto err_free_cmd; > - } > - if (psecuritypriv->auth_algorithm == AUTH_8021x) { > > - psetkeyparm->algorithm = > > - (u8)psecuritypriv->XGrpPrivacy; > > - } else { /* WEP */ > - psetkeyparm->algorithm = > > - (u8)psecuritypriv->privacy_algorithm; > > - } > - psetkeyparm->keyid = (u8)keyid; > > - > - switch (psetkeyparm->algorithm) { > > - case WEP40: > - keylen = 5; > - memcpy(psetkeyparm->key, > > - psecuritypriv->DefKey[keyid].skey, keylen); > > - break; > - case WEP104: > - keylen = 13; > - memcpy(psetkeyparm->key, > > - psecuritypriv->DefKey[keyid].skey, keylen); > > - break; > - case TKIP: > - if (keyid < 1 || keyid > 2) { > > - ret = -EINVAL; > - goto err_free_parm; > - } > - keylen = 16; > - memcpy(psetkeyparm->key, > > - &psecuritypriv->XGrpKey[keyid - 1], keylen); > > - psetkeyparm->grpkey = 1; > > - break; > - case AES: > - if (keyid < 1 || keyid > 2) { > > - ret = -EINVAL; > - goto err_free_parm; > - } > - keylen = 16; > - memcpy(psetkeyparm->key, > > - &psecuritypriv->XGrpKey[keyid - 1], keylen); > > - psetkeyparm->grpkey = 1; > > - break; > - default: > - ret = -EINVAL; > - goto err_free_parm; > - } > - pcmd->cmdcode = SetKey_CMD; > > - pcmd->parmbuf = (u8 *)psetkeyparm; > > - pcmd->cmdsz = (sizeof(struct setkey_parm)); > > - pcmd->rsp = NULL; > > - pcmd->rspsz = 0; > > - INIT_LIST_HEAD(&pcmd->list); > > - r8712_enqueue_cmd(pcmdpriv, pcmd); > - return 0; > - > -err_free_parm: > - kfree(psetkeyparm); > -err_free_cmd: > - kfree(pcmd); > - return ret; > -} > - > -/* adjust IEs for r8712_joinbss_cmd in WMM */ > -int r8712_restruct_wmm_ie(struct _adapter *adapter, u8 *in_ie, u8 out_ie, > - uint in_len, uint initial_out_len) > -{ > - unsigned int ielength = 0; > - unsigned int i, j; > - > - i = 12; / after the fixed IE / > - while (i < in_len) { > - ielength = initial_out_len; > - if (in_ie[i] == 0xDD && in_ie[i + 2] == 0x00 && > - in_ie[i + 3] == 0x50 && in_ie[i + 4] == 0xF2 && > - in_ie[i + 5] == 0x02 && i + 5 < in_len) { > - /WMM element ID and OUI/ > - for (j = i; j < i + 9; j++) { > - out_ie[ielength] = in_ie[j]; > - ielength++; > - } > - out_ie[initial_out_len + 1] = 0x07; > - out_ie[initial_out_len + 6] = 0x00; > - out_ie[initial_out_len + 8] = 0x00; > - break; > - } > - i += (in_ie[i + 1] + 2); / to the next IE element / > - } > - return ielength; > -} > - > -/ > - * Ported from 8185: IsInPreAuthKeyList(). > - * > - * Search by BSSID, > - * Return Value: > - * -1 :if there is no pre-auth key in the table > - * >=0 :if there is pre-auth key, and return the entry id > > - */ > -static int SecIsInPMKIDList(struct _adapter *Adapter, u8 *bssid) > -{ > - struct security_priv *p = &Adapter->securitypriv; > > - int i; > - > - for (i = 0; i < NUM_PMKID_CACHE; i++) > - if (p->PMKIDList[i].bUsed && !memcmp(p->PMKIDList[i].Bssid, bssid, ETH_ALEN)) > > - return i; > - return -1; > -} > - > -sint r8712_restruct_sec_ie(struct _adapter *adapter, u8 *in_ie, > - u8 *out_ie, uint in_len) > -{ > - u8 authmode = 0, match; > - u8 sec_ie[IW_CUSTOM_MAX], uncst_oui[4], bkup_ie[255]; > - u8 wpa_oui[4] = {0x0, 0x50, 0xf2, 0x01}; > - uint ielength, cnt, remove_cnt; > - int iEntry; > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - struct security_priv *psecuritypriv = &adapter->securitypriv; > > - uint ndisauthmode = psecuritypriv->ndisauthtype; > > - uint ndissecuritytype = psecuritypriv->ndisencryptstatus; > > - > - if ((ndisauthmode == Ndis802_11AuthModeWPA) || > - (ndisauthmode == Ndis802_11AuthModeWPAPSK)) { > - authmode = WPA_IE_ID; > - uncst_oui[0] = 0x0; > - uncst_oui[1] = 0x50; > - uncst_oui[2] = 0xf2; > - } > - if ((ndisauthmode == Ndis802_11AuthModeWPA2) || > - (ndisauthmode == Ndis802_11AuthModeWPA2PSK)) { > - authmode = WPA2_IE_ID; > - uncst_oui[0] = 0x0; > - uncst_oui[1] = 0x0f; > - uncst_oui[2] = 0xac; > - } > - switch (ndissecuritytype) { > - case Ndis802_11Encryption1Enabled: > - case Ndis802_11Encryption1KeyAbsent: > - uncst_oui[3] = 0x1; > - break; > - case Ndis802_11Encryption2Enabled: > - case Ndis802_11Encryption2KeyAbsent: > - uncst_oui[3] = 0x2; > - break; > - case Ndis802_11Encryption3Enabled: > - case Ndis802_11Encryption3KeyAbsent: > - uncst_oui[3] = 0x4; > - break; > - default: > - break; > - } > - /*Search required WPA or WPA2 IE and copy to sec_ie[] */ > - cnt = 12; > - match = false; > - while (cnt < in_len) { > - if (in_ie[cnt] == authmode) { > - if ((authmode == WPA_IE_ID) && > - (!memcmp(&in_ie[cnt + 2], &wpa_oui[0], 4))) { > - memcpy(&sec_ie[0], &in_ie[cnt], > - in_ie[cnt + 1] + 2); > - match = true; > - break; > - } > - if (authmode == WPA2_IE_ID) { > - memcpy(&sec_ie[0], &in_ie[cnt], > - in_ie[cnt + 1] + 2); > - match = true; > - break; > - } > - if (((authmode == WPA_IE_ID) && > - (!memcmp(&in_ie[cnt + 2], &wpa_oui[0], 4))) || > - (authmode == WPA2_IE_ID)) > - memcpy(&bkup_ie[0], &in_ie[cnt], > - in_ie[cnt + 1] + 2); > - } > - cnt += in_ie[cnt + 1] + 2; /get next/ > - } > - /*restruct WPA IE or WPA2 IE in sec_ie[] / > - if (match) { > - if (sec_ie[0] == WPA_IE_ID) { > - / parsing SSN IE to select required encryption > - * algorithm, and set the bc/mc encryption algorithm > - / > - while (true) { > - /check wpa_oui tag/ > - if (memcmp(&sec_ie[2], &wpa_oui[0], 4)) { > - match = false; > - break; > - } > - if ((sec_ie[6] != 0x01) || (sec_ie[7] != 0x0)) { > - /IE Ver error/ > - match = false; > - break; > - } > - if (!memcmp(&sec_ie[8], &wpa_oui[0], 3)) { > - / get bc/mc encryption type (group > - * key type) > - */ > - switch (sec_ie[11]) { > - case 0x0: /none/ > - psecuritypriv->XGrpPrivacy = > > - NO_PRIVACY; > - break; > - case 0x1: /WEP_40/ > - psecuritypriv->XGrpPrivacy = > > - WEP40; > - break; > - case 0x2: /TKIP/ > - psecuritypriv->XGrpPrivacy = > > - TKIP; > - break; > - case 0x3: /AESCCMP/ > - case 0x4: > - psecuritypriv->XGrpPrivacy = > > - AES; > - break; > - case 0x5: /WEP_104/ > - psecuritypriv->XGrpPrivacy = > > - WEP104; > - break; > - } > - } else { > - match = false; > - break; > - } > - if (sec_ie[12] == 0x01) { > - /check the unicast encryption type/ > - if (memcmp(&sec_ie[14], > - &uncst_oui[0], 4)) { > - match = false; > - break; > - > - } /else the uncst_oui is match/ > - } else { /mixed mode, unicast_enc_type > 1/ > > - /*select the uncst_oui and remove > - * the other uncst_oui > - / > - cnt = sec_ie[12]; > - remove_cnt = (cnt - 1) * 4; > - sec_ie[12] = 0x01; > - memcpy(&sec_ie[14], &uncst_oui[0], 4); > - /remove the other unicast suit/ > - memcpy(&sec_ie[18], > - &sec_ie[18 + remove_cnt], > - sec_ie[1] - 18 + 2 - > - remove_cnt); > - sec_ie[1] = sec_ie[1] - remove_cnt; > - } > - break; > - } > - } > - if (authmode == WPA2_IE_ID) { > - / parsing RSN IE to select required encryption > - * algorithm, and set the bc/mc encryption algorithm > - */ > - while (true) { > - if ((sec_ie[2] != 0x01) || (sec_ie[3] != 0x0)) { > - /IE Ver error/ > - match = false; > - break; > - } > - if (!memcmp(&sec_ie[4], &uncst_oui[0], 3)) { > - /get bc/mc encryption type/ > - switch (sec_ie[7]) { > - case 0x1: /WEP_40/ > - psecuritypriv->XGrpPrivacy = > > - WEP40; > - break; > - case 0x2: /TKIP/ > - psecuritypriv->XGrpPrivacy = > > - TKIP; > - break; > - case 0x4: /AESWRAP/ > - psecuritypriv->XGrpPrivacy = > > - AES; > - break; > - case 0x5: /WEP_104/ > - psecuritypriv->XGrpPrivacy = > > - WEP104; > - break; > - default: /one/ > - psecuritypriv->XGrpPrivacy = > > - NO_PRIVACY; > - break; > - } > - } else { > - match = false; > - break; > - } > - if (sec_ie[8] == 0x01) { > - /check the unicast encryption type/ > - if (memcmp(&sec_ie[10], > - &uncst_oui[0], 4)) { > - match = false; > - break; > - } /else the uncst_oui is match/ > - } else { /mixed mode, unicast_enc_type > 1/ > > - /*select the uncst_oui and remove the > - * other uncst_oui > - */ > - cnt = sec_ie[8]; > - remove_cnt = (cnt - 1) * 4; > - sec_ie[8] = 0x01; > - memcpy(&sec_ie[10], &uncst_oui[0], 4); > - /remove the other unicast suit/ > - memcpy(&sec_ie[14], > - &sec_ie[14 + remove_cnt], > - (sec_ie[1] - 14 + 2 - > - remove_cnt)); > - sec_ie[1] = sec_ie[1] - remove_cnt; > - } > - break; > - } > - } > - } > - if ((authmode == WPA_IE_ID) || (authmode == WPA2_IE_ID)) { > - /copy fixed ie/ > - memcpy(out_ie, in_ie, 12); > - ielength = 12; > - /copy RSN or SSN/ > - if (match) { > - memcpy(&out_ie[ielength], &sec_ie[0], sec_ie[1] + 2); > - ielength += sec_ie[1] + 2; > - if (authmode == WPA2_IE_ID) { > - /the Pre-Authentication bit should be zero/ > - out_ie[ielength - 1] = 0; > - out_ie[ielength - 2] = 0; > - } > - r8712_report_sec_ie(adapter, authmode, sec_ie); > - } > - } else { > - /copy fixed ie only/ > - memcpy(out_ie, in_ie, 12); > - ielength = 12; > - if (psecuritypriv->wps_phase) { > > - memcpy(out_ie + ielength, psecuritypriv->wps_ie, > > - psecuritypriv->wps_ie_len); > > - ielength += psecuritypriv->wps_ie_len; > > - } > - } > - iEntry = SecIsInPMKIDList(adapter, pmlmepriv->assoc_bssid); > > - if (iEntry < 0) > - return ielength; > - if (authmode == WPA2_IE_ID) { > - out_ie[ielength] = 1; > - ielength++; > - out_ie[ielength] = 0; /PMKID count = 0x0100/ > - ielength++; > - memcpy(&out_ie[ielength], > - &psecuritypriv->PMKIDList[iEntry].PMKID, 16); > > - ielength += 16; > - out_ie[13] += 18;/PMKID length = 2+16/ > - } > - return ielength; > -} > - > -void r8712_init_registrypriv_dev_network(struct _adapter *adapter) > -{ > - struct registry_priv *pregistrypriv = &adapter->registrypriv; > > - struct eeprom_priv *peepriv = &adapter->eeprompriv; > > - struct wlan_bssid_ex *pdev_network = &pregistrypriv->dev_network; > > - u8 *myhwaddr = myid(peepriv); > - > - memcpy(pdev_network->MacAddress, myhwaddr, ETH_ALEN); > > - memcpy(&pdev_network->Ssid, &pregistrypriv->ssid, > > - sizeof(struct ndis_802_11_ssid)); > - pdev_network->Configuration.Length = > > - sizeof(struct NDIS_802_11_CONFIGURATION); > - pdev_network->Configuration.BeaconPeriod = 100; > > - pdev_network->Configuration.FHConfig.Length = 0; > > - pdev_network->Configuration.FHConfig.HopPattern = 0; > > - pdev_network->Configuration.FHConfig.HopSet = 0; > > - pdev_network->Configuration.FHConfig.DwellTime = 0; > > -} > - > -void r8712_update_registrypriv_dev_network(struct _adapter *adapter) > -{ > - int sz = 0; > - struct registry_priv *pregistrypriv = &adapter->registrypriv; > > - struct wlan_bssid_ex *pdev_network = &pregistrypriv->dev_network; > > - struct security_priv *psecuritypriv = &adapter->securitypriv; > > - struct wlan_network *cur_network = &adapter->mlmepriv.cur_network; > > - > - pdev_network->Privacy = cpu_to_le32(psecuritypriv->privacy_algorithm > > - > 0 ? 1 : 0); /* adhoc no 802.1x */ > > - pdev_network->Rssi = 0; > > - switch (pregistrypriv->wireless_mode) { > > - case WIRELESS_11B: > - pdev_network->NetworkTypeInUse = Ndis802_11DS; > > - break; > - case WIRELESS_11G: > - case WIRELESS_11BG: > - pdev_network->NetworkTypeInUse = Ndis802_11OFDM24; > > - break; > - case WIRELESS_11A: > - pdev_network->NetworkTypeInUse = Ndis802_11OFDM5; > > - break; > - default: > - /* TODO */ > - break; > - } > - pdev_network->Configuration.DSConfig = pregistrypriv->channel; > > - if (cur_network->network.InfrastructureMode == Ndis802_11IBSS) > > - pdev_network->Configuration.ATIMWindow = 3; > > - pdev_network->InfrastructureMode = cur_network->network.InfrastructureMode; > > - /* 1. Supported rates > - * 2. IE > - */ > - sz = r8712_generate_ie(pregistrypriv); > - pdev_network->IELength = sz; > > - pdev_network->Length = r8712_get_wlan_bssid_ex_sz(pdev_network); > > -} > - > -/the function is at passive_level/ > -void r8712_joinbss_reset(struct _adapter *padapter) > -{ > - int i; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct ht_priv *phtpriv = &pmlmepriv->htpriv; > > - > - /* todo: if you want to do something io/reg/hw setting before join_bss, > - * please add code here > - */ > - phtpriv->ampdu_enable = false;/reset to disabled/ > > - for (i = 0; i < 16; i++) > - phtpriv->baddbareq_issued[i] = false;/reset it/ > > - if (phtpriv->ht_option) { > > - /* validate usb rx aggregation / > - r8712_write8(padapter, 0x102500D9, 48);/TH = 48 pages, 6k/ > - } else { > - / invalidate usb rx aggregation / > - / TH=1 => means that invalidate usb rx aggregation */ > > - r8712_write8(padapter, 0x102500D9, 1); > - } > -} > - > -/the function is >= passive_level/ > > -unsigned int r8712_restructure_ht_ie(struct _adapter *padapter, u8 *in_ie, > - u8 *out_ie, uint in_len, uint *pout_len) > -{ > - u32 ielen, out_len; > - unsigned char *p; > - struct ieee80211_ht_cap ht_capie; > - unsigned char WMM_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00}; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct qos_priv *pqospriv = &pmlmepriv->qospriv; > > - struct ht_priv *phtpriv = &pmlmepriv->htpriv; > > - > - phtpriv->ht_option = 0; > > - p = r8712_get_ie(in_ie + 12, WLAN_EID_HT_CAPABILITY, &ielen, in_len - 12); > - if (p && (ielen > 0)) { > > - if (pqospriv->qos_option == 0) { > > - out_len = *pout_len; > - r8712_set_ie(out_ie + out_len, WLAN_EID_VENDOR_SPECIFIC, > - WMM_IE_Length, WMM_IE, pout_len); > - pqospriv->qos_option = 1; > > - } > - out_len = *pout_len; > - memset(&ht_capie, 0, sizeof(struct ieee80211_ht_cap)); > - ht_capie.cap_info = cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH_20_40 | > - IEEE80211_HT_CAP_SGI_20 | > - IEEE80211_HT_CAP_SGI_40 | > - IEEE80211_HT_CAP_TX_STBC | > - IEEE80211_HT_CAP_MAX_AMSDU | > - IEEE80211_HT_CAP_DSSSCCK40); > - ht_capie.ampdu_params_info = (IEEE80211_HT_AMPDU_PARM_FACTOR & > - 0x03) | (IEEE80211_HT_AMPDU_PARM_DENSITY & 0x00); > - r8712_set_ie(out_ie + out_len, WLAN_EID_HT_CAPABILITY, > - sizeof(struct ieee80211_ht_cap), > - (unsigned char *)&ht_capie, pout_len); > - phtpriv->ht_option = 1; > > - } > - return phtpriv->ht_option; > > -} > - > -/* the function is > passive_level (in critical_section) */ > > -static void update_ht_cap(struct _adapter *padapter, u8 *pie, uint ie_len) > -{ > - u8 *p, max_ampdu_sz; > - int i; > - uint len; > - struct sta_info *bmc_sta, *psta; > - struct ieee80211_ht_cap *pht_capie; > - struct recv_reorder_ctrl *preorder_ctrl; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct ht_priv *phtpriv = &pmlmepriv->htpriv; > > - struct registry_priv *pregistrypriv = &padapter->registrypriv; > > - struct wlan_network *pcur_network = &pmlmepriv->cur_network; > > - > - if (!phtpriv->ht_option) > > - return; > - /* maybe needs check if ap supports rx ampdu. */ > - if (!phtpriv->ampdu_enable && > > - (pregistrypriv->ampdu_enable == 1)) > > - phtpriv->ampdu_enable = true; > > - /check Max Rx A-MPDU Size/ > - len = 0; > - p = r8712_get_ie(pie + sizeof(struct NDIS_802_11_FIXED_IEs), > - WLAN_EID_HT_CAPABILITY, > - &len, ie_len - > - sizeof(struct NDIS_802_11_FIXED_IEs)); > - if (p && len > 0) { > > - pht_capie = (struct ieee80211_ht_cap *)(p + 2); > - max_ampdu_sz = (pht_capie->ampdu_params_info & > > - IEEE80211_HT_AMPDU_PARM_FACTOR); > - /* max_ampdu_sz (kbytes); */ > - max_ampdu_sz = 1 << (max_ampdu_sz + 3); > - phtpriv->rx_ampdu_maxlen = max_ampdu_sz; > > - } > - /* for A-MPDU Rx reordering buffer control for bmc_sta & sta_info > - * if A-MPDU Rx is enabled, resetting rx_ordering_ctrl > - * wstart_b(indicate_seq) to default value=0xffff > - * todo: check if AP can send A-MPDU packets > - */ > - bmc_sta = r8712_get_bcmc_stainfo(padapter); > - if (bmc_sta) { > - for (i = 0; i < 16; i++) { > - preorder_ctrl = &bmc_sta->recvreorder_ctrl[i]; > > - preorder_ctrl->indicate_seq = 0xffff; > > - preorder_ctrl->wend_b = 0xffff; > > - } > - } > - psta = r8712_get_stainfo(&padapter->stapriv, > > - pcur_network->network.MacAddress); > > - if (psta) { > - for (i = 0; i < 16; i++) { > - preorder_ctrl = &psta->recvreorder_ctrl[i]; > > - preorder_ctrl->indicate_seq = 0xffff; > > - preorder_ctrl->wend_b = 0xffff; > > - } > - } > - len = 0; > - p = r8712_get_ie(pie + sizeof(struct NDIS_802_11_FIXED_IEs), > - WLAN_EID_HT_OPERATION, &len, > - ie_len - sizeof(struct NDIS_802_11_FIXED_IEs)); > -} > - > -void r8712_issue_addbareq_cmd(struct _adapter *padapter, int priority) > -{ > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct ht_priv *phtpriv = &pmlmepriv->htpriv; > > - > - if ((phtpriv->ht_option == 1) && (phtpriv->ampdu_enable)) { > > - if (!phtpriv->baddbareq_issued[priority]) { > > - r8712_addbareq_cmd(padapter, (u8)priority); > - phtpriv->baddbareq_issued[priority] = true; > > - } > - } > -} > diff --git a/drivers/staging/rtl8712/rtl871x_mlme.h b/drivers/staging/rtl8712/rtl871x_mlme.h > deleted file mode 100644 > index d7d25f240111..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_mlme.h > +++ /dev/null > @@ -1,205 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ***********************************************************************/ > -#ifndef _RTL871X_MLME_H > -#define _RTL871X_MLME_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "wlan_bssdef.h" > - > -#define MAX_BSS_CNT 64 > -#define MAX_JOIN_TIMEOUT 6000 > - > -#define SCANNING_TIMEOUT 4500 > - > -#define SCANQUEUE_LIFETIME 20 / unit:sec / > - > -#define WIFI_NULL_STATE 0x00000000 > -#define WIFI_ASOC_STATE 0x00000001 / Under Linked state.../ > -#define WIFI_REASOC_STATE 0x00000002 > -#define WIFI_SLEEP_STATE 0x00000004 > -#define WIFI_STATION_STATE 0x00000008 > -#define WIFI_AP_STATE 0x00000010 > -#define WIFI_ADHOC_STATE 0x00000020 > -#define WIFI_ADHOC_MASTER_STATE 0x00000040 > -#define WIFI_UNDER_LINKING 0x00000080 > -#define WIFI_SITE_MONITOR 0x00000800 / to indicate the station > - * is under site surveying > - / > -#define WIFI_MP_STATE 0x00010000 > -#define WIFI_MP_CTX_BACKGROUND 0x00020000 / in cont. tx background/ > -#define WIFI_MP_CTX_ST 0x00040000 / in cont. tx with > - * single-tone > - / > -#define WIFI_MP_CTX_BACKGROUND_PENDING 0x00080000 / pending in cont, tx > - * background due > - * to out of skb > - / > -#define WIFI_MP_CTX_CCK_HW 0x00100000 / in continuous tx/ > -#define WIFI_MP_CTX_CCK_CS 0x00200000 / in cont, tx with carrier > - * suppression > - / > -#define WIFI_MP_LPBK_STATE 0x00400000 > - > -#define _FW_UNDER_LINKING WIFI_UNDER_LINKING > -#define _FW_LINKED WIFI_ASOC_STATE > -#define _FW_UNDER_SURVEY WIFI_SITE_MONITOR > - > -/ > - * there are several "locks" in mlme_priv, > - * since mlme_priv is a shared resource between many threads, > - * like ISR/Call-Back functions, the OID handlers, and even timer functions. > - * Each _queue has its own locks, already. > - * Other items are protected by mlme_priv.lock. > - * To avoid possible dead lock, any thread trying to modify mlme_priv > - * SHALL not lock up more than one lock at a time! > - */ > - > -#define traffic_threshold 10 > -#define traffic_scan_period 500 > - > -struct sitesurvey_ctrl { > - u64 last_tx_pkts; > - uint last_rx_pkts; > - sint traffic_busy; > - struct timer_list sitesurvey_ctrl_timer; > -}; > - > -struct mlme_priv { > - spinlock_t lock; > - spinlock_t lock2; > - sint fw_state; /*shall we protect this variable? */ > - u8 to_join; /flag/ > - u8 *nic_hdl; > - struct list_head pscanned; > - struct __queue free_bss_pool; > - struct __queue scanned_queue; > - u8 free_bss_buf; > - unsigned long num_of_scanned; > - u8 passive_mode; /add for Android's SCAN-ACTIVE/SCAN-PASSIVE / > - struct ndis_802_11_ssid assoc_ssid; > - u8 assoc_bssid[6]; > - struct wlan_network cur_network; > - struct sitesurvey_ctrl sitesurveyctrl; > - struct timer_list assoc_timer; > - uint assoc_by_bssid; > - uint assoc_by_rssi; > - struct timer_list scan_to_timer; / driver handles scan_timeout./ > - struct timer_list dhcp_timer; / set dhcp to if driver in ps mode./ > - struct qos_priv qospriv; > - struct ht_priv htpriv; > - struct timer_list wdg_timer; /watchdog periodic timer/ > -}; > - > -static inline u8 *get_bssid(struct mlme_priv *pmlmepriv) > -{ > - return pmlmepriv->cur_network.network.MacAddress; > > -} > - > -static inline u8 check_fwstate(struct mlme_priv *pmlmepriv, sint state) > -{ > - if (pmlmepriv->fw_state & state) > > - return true; > - return false; > -} > - > -static inline sint get_fwstate(struct mlme_priv *pmlmepriv) > -{ > - return pmlmepriv->fw_state; > > -} > - > -/* > - * No Limit on the calling context, > - * therefore set it to be the critical section... > - * > - * ### NOTE:#### (!!!!) > - * TAKE CARE BEFORE CALLING THIS FUNC, LOCK pmlmepriv->lock > > - */ > -static inline void set_fwstate(struct mlme_priv *pmlmepriv, sint state) > -{ > - pmlmepriv->fw_state |= state; > > -} > - > -static inline void clr_fwstate(struct mlme_priv *pmlmepriv, sint state) > -{ > - pmlmepriv->fw_state &= ~state; > > -} > - > -/* > - * No Limit on the calling context, > - * therefore set it to be the critical section... > - */ > -static inline void clr_fwstate(struct mlme_priv *pmlmepriv, sint state) > -{ > - unsigned long irqL; > - > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - if (check_fwstate(pmlmepriv, state)) > - pmlmepriv->fw_state ^= state; > > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > -} > - > -static inline void set_scanned_network_val(struct mlme_priv *pmlmepriv, > - sint val) > -{ > - unsigned long irqL; > - > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - pmlmepriv->num_of_scanned = val; > > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > -} > - > -void r8712_survey_event_callback(struct _adapter adapter, u8 pbuf); > -void r8712_surveydone_event_callback(struct _adapter adapter, u8 pbuf); > -void r8712_joinbss_event_callback(struct _adapter adapter, u8 pbuf); > -void r8712_stassoc_event_callback(struct _adapter adapter, u8 pbuf); > -void r8712_stadel_event_callback(struct _adapter adapter, u8 pbuf); > -void r8712_atimdone_event_callback(struct _adapter adapter, u8 pbuf); > -void r8712_cpwm_event_callback(struct _adapter adapter, u8 pbuf); > -void r8712_wpspbc_event_callback(struct _adapter adapter, u8 pbuf); > -void r8712_free_network_queue(struct _adapter adapter); > -int r8712_init_mlme_priv(struct _adapter adapter); > -void r8712_free_mlme_priv(struct mlme_priv pmlmepriv); > -int r8712_select_and_join_from_scan(struct mlme_priv pmlmepriv); > -int r8712_set_key(struct _adapter adapter, > - struct security_priv psecuritypriv, sint keyid); > -int r8712_set_auth(struct _adapter adapter, > - struct security_priv psecuritypriv); > -uint r8712_get_wlan_bssid_ex_sz(struct wlan_bssid_ex bss); > -void r8712_generate_random_ibss(u8 pibss); > -u8 r8712_get_capability_from_ie(u8 ie); > -struct wlan_network r8712_get_oldest_wlan_network( > - struct __queue scanned_queue); > -void r8712_free_assoc_resources(struct _adapter adapter); > -void r8712_ind_disconnect(struct _adapter adapter); > -void r8712_indicate_connect(struct _adapter adapter); > -int r8712_restruct_sec_ie(struct _adapter adapter, u8 in_ie, > - u8 out_ie, uint in_len); > -int r8712_restruct_wmm_ie(struct _adapter adapter, u8 in_ie, > - u8 out_ie, uint in_len, uint initial_out_len); > -void r8712_init_registrypriv_dev_network(struct _adapter adapter); > -void r8712_update_registrypriv_dev_network(struct _adapter adapter); > -void _r8712_sitesurvey_ctrl_handler(struct _adapter adapter); > -void _r8712_join_timeout_handler(struct _adapter adapter); > -void r8712_scan_timeout_handler(struct _adapter adapter); > -void _r8712_dhcp_timeout_handler(struct _adapter adapter); > -struct wlan_network _r8712_alloc_network(struct mlme_priv pmlmepriv); > -sint r8712_if_up(struct _adapter padapter); > -void r8712_joinbss_reset(struct _adapter padapter); > -unsigned int r8712_restructure_ht_ie(struct _adapter padapter, u8 in_ie, > - u8 out_ie, uint in_len, uint pout_len); > -void r8712_issue_addbareq_cmd(struct _adapter padapter, int priority); > -int r8712_is_same_ibss(struct _adapter adapter, struct wlan_network pnetwork); > - > -#endif /_RTL871X_MLME_H/ > diff --git a/drivers/staging/rtl8712/rtl871x_mp.c b/drivers/staging/rtl8712/rtl871x_mp.c > deleted file mode 100644 > index c6bc7b546166..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_mp.c > +++ /dev/null > @@ -1,724 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/************************ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > -#define RTL871X_MP_C > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "rtl871x_mp_phy_regdef.h" > -#include "rtl8712_cmd.h" > - > -static void init_mp_priv(struct mp_priv *pmp_priv) > -{ > - pmp_priv->mode = LOOPBOOK_MODE; > > - pmp_priv->curr_ch = 1; > > - pmp_priv->curr_modem = MIXED_PHY; > > - pmp_priv->curr_rateidx = 0; > > - pmp_priv->curr_txpoweridx = 0x14; > > - pmp_priv->antenna_tx = ANTENNA_A; > > - pmp_priv->antenna_rx = ANTENNA_AB; > > - pmp_priv->check_mp_pkt = 0; > > - pmp_priv->tx_pktcount = 0; > > - pmp_priv->rx_pktcount = 0; > > - pmp_priv->rx_crcerrpktcount = 0; > > -} > - > -static int init_mp_priv(struct mp_priv *pmp_priv) > -{ > - int i; > - struct mp_xmit_frame *pmp_xmitframe; > - > - init_mp_priv(pmp_priv); > - _init_queue(&pmp_priv->free_mp_xmitqueue); > > - pmp_priv->pallocated_mp_xmitframe_buf = NULL; > > - pmp_priv->pallocated_mp_xmitframe_buf = kmalloc(NR_MP_XMITFRAME * > > - sizeof(struct mp_xmit_frame) + 4, > - GFP_ATOMIC); > - if (!pmp_priv->pallocated_mp_xmitframe_buf) > > - return -ENOMEM; > - > - pmp_priv->pmp_xmtframe_buf = pmp_priv->pallocated_mp_xmitframe_buf + > > - 4 - > - ((addr_t)(pmp_priv->pallocated_mp_xmitframe_buf) & 3); > > - pmp_xmitframe = (struct mp_xmit_frame *)pmp_priv->pmp_xmtframe_buf; > > - for (i = 0; i < NR_MP_XMITFRAME; i++) { > - INIT_LIST_HEAD(&pmp_xmitframe->list); > > - list_add_tail(&pmp_xmitframe->list, > > - &pmp_priv->free_mp_xmitqueue.queue); > > - pmp_xmitframe->pkt = NULL; > > - pmp_xmitframe->frame_tag = MP_FRAMETAG; > > - pmp_xmitframe->padapter = pmp_priv->papdater; > > - pmp_xmitframe++; > - } > - pmp_priv->free_mp_xmitframe_cnt = NR_MP_XMITFRAME; > > - return 0; > -} > - > -static int free_mp_priv(struct mp_priv *pmp_priv) > -{ > - kfree(pmp_priv->pallocated_mp_xmitframe_buf); > > - return 0; > -} > - > -void mp871xinit(struct _adapter *padapter) > -{ > - struct mp_priv *pmppriv = &padapter->mppriv; > > - > - pmppriv->papdater = padapter; > > - init_mp_priv(pmppriv); > -} > - > -void mp871xdeinit(struct _adapter *padapter) > -{ > - struct mp_priv *pmppriv = &padapter->mppriv; > > - > - free_mp_priv(pmppriv); > -} > - > -/* > - * Special for bb and rf reg read/write > - */ > -static u32 fw_iocmd_read(struct _adapter *pAdapter, struct IOCMD_STRUCT iocmd) > -{ > - u32 cmd32 = 0, val32 = 0; > - u8 iocmd_class = iocmd.cmdclass; > - u16 iocmd_value = iocmd.value; > - u8 iocmd_idx = iocmd.index; > - > - cmd32 = (iocmd_class << 24) | (iocmd_value << 8) | iocmd_idx; > - if (r8712_fw_cmd(pAdapter, cmd32)) > - r8712_fw_cmd_data(pAdapter, &val32, 1); > - else > - val32 = 0; > - return val32; > -} > - > -static u8 fw_iocmd_write(struct _adapter pAdapter, > - struct IOCMD_STRUCT iocmd, u32 value) > -{ > - u32 cmd32 = 0; > - u8 iocmd_class = iocmd.cmdclass; > - u32 iocmd_value = iocmd.value; > - u8 iocmd_idx = iocmd.index; > - > - r8712_fw_cmd_data(pAdapter, &value, 0); > - msleep(100); > - cmd32 = (iocmd_class << 24) | (iocmd_value << 8) | iocmd_idx; > - return r8712_fw_cmd(pAdapter, cmd32); > -} > - > -/ offset : 0X800~0XFFF */ > -u32 r8712_bb_reg_read(struct _adapter pAdapter, u16 offset) > -{ > - u8 shift = offset & 0x0003; / 4 byte access / > - u16 bb_addr = offset & 0x0FFC; / 4 byte access */ > - u32 bb_val = 0; > - struct IOCMD_STRUCT iocmd; > - > - iocmd.cmdclass = IOCMD_CLASS_BB_RF; > - iocmd.value = bb_addr; > - iocmd.index = IOCMD_BB_READ_IDX; > - bb_val = fw_iocmd_read(pAdapter, iocmd); > - if (shift != 0) { > - u32 bb_val2 = 0; > - > - bb_val >>= (shift * 8); > > - iocmd.value += 4; > - bb_val2 = fw_iocmd_read(pAdapter, iocmd); > - bb_val2 <<= ((4 - shift) * 8); > - bb_val |= bb_val2; > - } > - return bb_val; > -} > - > -/* offset : 0X800~0XFFF */ > -u8 r8712_bb_reg_write(struct _adapter pAdapter, u16 offset, u32 value) > -{ > - u8 shift = offset & 0x0003; / 4 byte access / > - u16 bb_addr = offset & 0x0FFC; / 4 byte access */ > - struct IOCMD_STRUCT iocmd; > - > - iocmd.cmdclass = IOCMD_CLASS_BB_RF; > - iocmd.value = bb_addr; > - iocmd.index = IOCMD_BB_WRITE_IDX; > - if (shift != 0) { > - u32 oldValue = 0; > - u32 newValue = value; > - > - oldValue = r8712_bb_reg_read(pAdapter, iocmd.value); > - oldValue &= (0xFFFFFFFF >> ((4 - shift) * 8)); > > - value = oldValue | (newValue << (shift * 8)); > - if (!fw_iocmd_write(pAdapter, iocmd, value)) > - return false; > - iocmd.value += 4; > - oldValue = r8712_bb_reg_read(pAdapter, iocmd.value); > - oldValue &= (0xFFFFFFFF << (shift * 8)); > - value = oldValue | (newValue >> ((4 - shift) * 8)); > > - } > - return fw_iocmd_write(pAdapter, iocmd, value); > -} > - > -/* offset : 0x00 ~ 0xFF */ > -u32 r8712_rf_reg_read(struct _adapter *pAdapter, u8 path, u8 offset) > -{ > - u16 rf_addr = (path << 8) | offset; > - struct IOCMD_STRUCT iocmd; > - > - iocmd.cmdclass = IOCMD_CLASS_BB_RF; > - iocmd.value = rf_addr; > - iocmd.index = IOCMD_RF_READ_IDX; > - return fw_iocmd_read(pAdapter, iocmd); > -} > - > -u8 r8712_rf_reg_write(struct _adapter *pAdapter, u8 path, u8 offset, u32 value) > -{ > - u16 rf_addr = (path << 8) | offset; > - struct IOCMD_STRUCT iocmd; > - > - iocmd.cmdclass = IOCMD_CLASS_BB_RF; > - iocmd.value = rf_addr; > - iocmd.index = IOCMD_RF_WRIT_IDX; > - return fw_iocmd_write(pAdapter, iocmd, value); > -} > - > -static u32 bitshift(u32 bitmask) > -{ > - u32 i; > - > - for (i = 0; i <= 31; i++) > - if (((bitmask >> i) & 0x1) == 1) > > - break; > - return i; > -} > - > -static u32 get_bb_reg(struct _adapter *pAdapter, u16 offset, u32 bitmask) > -{ > - u32 org_value, bit_shift; > - > - org_value = r8712_bb_reg_read(pAdapter, offset); > - bit_shift = bitshift(bitmask); > - return (org_value & bitmask) >> bit_shift; > > -} > - > -static u8 set_bb_reg(struct _adapter *pAdapter, > - u16 offset, > - u32 bitmask, > - u32 value) > -{ > - u32 org_value, bit_shift, new_value; > - > - if (bitmask != bMaskDWord) { > - org_value = r8712_bb_reg_read(pAdapter, offset); > - bit_shift = bitshift(bitmask); > - new_value = (org_value & (~bitmask)) | (value << bit_shift); > - } else { > - new_value = value; > - } > - return r8712_bb_reg_write(pAdapter, offset, new_value); > -} > - > -static u32 get_rf_reg(struct _adapter *pAdapter, u8 path, u8 offset, > - u32 bitmask) > -{ > - u32 org_value, bit_shift; > - > - org_value = r8712_rf_reg_read(pAdapter, path, offset); > - bit_shift = bitshift(bitmask); > - return (org_value & bitmask) >> bit_shift; > > -} > - > -static u8 set_rf_reg(struct _adapter pAdapter, u8 path, u8 offset, u32 bitmask, > - u32 value) > -{ > - u32 org_value, bit_shift, new_value; > - > - if (bitmask != bMaskDWord) { > - org_value = r8712_rf_reg_read(pAdapter, path, offset); > - bit_shift = bitshift(bitmask); > - new_value = (org_value & (~bitmask)) | (value << bit_shift); > - } else { > - new_value = value; > - } > - return r8712_rf_reg_write(pAdapter, path, offset, new_value); > -} > - > -/ > - * SetChannel > - * Description > - * Use H2C command to change channel, > - * not only modify rf register, but also other setting need to be done. > - */ > -void r8712_SetChannel(struct _adapter *pAdapter) > -{ > - struct cmd_priv *pcmdpriv = &pAdapter->cmdpriv; > > - struct cmd_obj *pcmd = NULL; > - struct SetChannel_parm *pparm = NULL; > - u16 code = GEN_CMD_CODE(_SetChannel); > - > - pcmd = kmalloc(sizeof(*pcmd), GFP_ATOMIC); > - if (!pcmd) > - return; > - pparm = kmalloc(sizeof(*pparm), GFP_ATOMIC); > - if (!pparm) { > - kfree(pcmd); > - return; > - } > - pparm->curr_ch = pAdapter->mppriv.curr_ch; > > - init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code); > - r8712_enqueue_cmd(pcmdpriv, pcmd); > -} > - > -static void SetCCKTxPower(struct _adapter *pAdapter, u8 TxPower) > -{ > - u16 TxAGC = 0; > - > - TxAGC = TxPower; > - set_bb_reg(pAdapter, rTxAGC_CCK_Mcs32, bTxAGCRateCCK, TxAGC); > -} > - > -static void SetOFDMTxPower(struct _adapter *pAdapter, u8 TxPower) > -{ > - u32 TxAGC = 0; > - > - TxAGC |= ((TxPower << 24) | (TxPower << 16) | (TxPower << 8) | > - TxPower); > - set_bb_reg(pAdapter, rTxAGC_Rate18_06, bTxAGCRate18_06, TxAGC); > - set_bb_reg(pAdapter, rTxAGC_Rate54_24, bTxAGCRate54_24, TxAGC); > - set_bb_reg(pAdapter, rTxAGC_Mcs03_Mcs00, bTxAGCRateMCS3_MCS0, TxAGC); > - set_bb_reg(pAdapter, rTxAGC_Mcs07_Mcs04, bTxAGCRateMCS7_MCS4, TxAGC); > - set_bb_reg(pAdapter, rTxAGC_Mcs11_Mcs08, bTxAGCRateMCS11_MCS8, TxAGC); > - set_bb_reg(pAdapter, rTxAGC_Mcs15_Mcs12, bTxAGCRateMCS15_MCS12, TxAGC); > -} > - > -void r8712_SetTxPower(struct _adapter *pAdapter) > -{ > - u8 TxPower = pAdapter->mppriv.curr_txpoweridx; > > - > - SetCCKTxPower(pAdapter, TxPower); > - SetOFDMTxPower(pAdapter, TxPower); > -} > - > -void r8712_SetTxAGCOffset(struct _adapter *pAdapter, u32 ulTxAGCOffset) > -{ > - u32 TxAGCOffset_B, TxAGCOffset_C, TxAGCOffset_D, tmpAGC; > - > - TxAGCOffset_B = ulTxAGCOffset & 0x000000ff; > - TxAGCOffset_C = (ulTxAGCOffset & 0x0000ff00) >> 8; > > - TxAGCOffset_D = (ulTxAGCOffset & 0x00ff0000) >> 16; > > - tmpAGC = TxAGCOffset_D << 8 | TxAGCOffset_C << 4 | TxAGCOffset_B; > - set_bb_reg(pAdapter, rFPGA0_TxGainStage, > - (bXBTxAGC | bXCTxAGC | bXDTxAGC), tmpAGC); > -} > - > -void r8712_SetDataRate(struct _adapter *pAdapter) > -{ > - u8 path = RF_PATH_A; > - u8 offset = RF_SYN_G2; > - u32 value; > - > - value = (pAdapter->mppriv.curr_rateidx < 4) ? 0x4440 : 0xF200; > > - r8712_rf_reg_write(pAdapter, path, offset, value); > -} > - > -void r8712_SwitchBandwidth(struct _adapter pAdapter) > -{ > - / 3 1.Set MAC register : BWOPMODE bit2:1 20MhzBW */ > - u8 regBwOpMode = 0; > - u8 Bandwidth = pAdapter->mppriv.curr_bandwidth; > > - > - regBwOpMode = r8712_read8(pAdapter, 0x10250203); > - if (Bandwidth == HT_CHANNEL_WIDTH_20) > - regBwOpMode |= BIT(2); > - else > - regBwOpMode &= ~(BIT(2)); > - r8712_write8(pAdapter, 0x10250203, regBwOpMode); > - /* 3 2.Set PHY related register / > - switch (Bandwidth) { > - / 20 MHz channel*/ > - case HT_CHANNEL_WIDTH_20: > - set_bb_reg(pAdapter, rFPGA0_RFMOD, bRFMOD, 0x0); > - set_bb_reg(pAdapter, rFPGA1_RFMOD, bRFMOD, 0x0); > - /* Use PHY_REG.txt default value. Do not need to change. > - * Correct the tx power for CCK rate in 40M. > - * It is set in Tx descriptor for 8192x series > - / > - set_bb_reg(pAdapter, rFPGA0_AnalogParameter2, bMaskDWord, 0x58); > - break; > - / 40 MHz channel*/ > - case HT_CHANNEL_WIDTH_40: > - set_bb_reg(pAdapter, rFPGA0_RFMOD, bRFMOD, 0x1); > - set_bb_reg(pAdapter, rFPGA1_RFMOD, bRFMOD, 0x1); > - /* Use PHY_REG.txt default value. Do not need to change. > - * Correct the tx power for CCK rate in 40M. > - * Set Control channel to upper or lower. These settings are > - * required only for 40MHz > - */ > - set_bb_reg(pAdapter, rCCK0_System, bCCKSideBand, > - (HAL_PRIME_CHNL_OFFSET_DONT_CARE >> 1)); > > - set_bb_reg(pAdapter, rOFDM1_LSTF, 0xC00, > - HAL_PRIME_CHNL_OFFSET_DONT_CARE); > - set_bb_reg(pAdapter, rFPGA0_AnalogParameter2, bMaskDWord, 0x18); > - break; > - default: > - break; > - } > - > - /* 3 3.Set RF related register / > - switch (Bandwidth) { > - case HT_CHANNEL_WIDTH_20: > - set_rf_reg(pAdapter, RF_PATH_A, RF_CHNLBW, > - BIT(10) | BIT(11), 0x01); > - break; > - case HT_CHANNEL_WIDTH_40: > - set_rf_reg(pAdapter, RF_PATH_A, RF_CHNLBW, > - BIT(10) | BIT(11), 0x00); > - break; > - default: > - break; > - } > -} > - > -/------------------------------Define structure----------------------------*/ > -struct R_ANTENNA_SELECT_OFDM { > - u32 r_tx_antenna:4; > - u32 r_ant_l:4; > - u32 r_ant_non_ht:4; > - u32 r_ant_ht1:4; > - u32 r_ant_ht2:4; > - u32 r_ant_ht_s1:4; > - u32 r_ant_non_ht_s1:4; > - u32 OFDM_TXSC:2; > - u32 Reserved:2; > -}; > - > -struct R_ANTENNA_SELECT_CCK { > - u8 r_cckrx_enable_2:2; > - u8 r_cckrx_enable:2; > - u8 r_ccktx_enable:4; > -}; > - > -void r8712_SwitchAntenna(struct _adapter *pAdapter) > -{ > - u32 ofdm_tx_en_val = 0, ofdm_tx_ant_sel_val = 0; > - u8 ofdm_rx_ant_sel_val = 0; > - u8 cck_ant_select_val = 0; > - u32 cck_ant_sel_val = 0; > - struct R_ANTENNA_SELECT_CCK *p_cck_txrx; > - > - p_cck_txrx = (struct R_ANTENNA_SELECT_CCK *)&cck_ant_select_val; > - > - switch (pAdapter->mppriv.antenna_tx) { > > - case ANTENNA_A: > - /* From SD3 Willis suggestion !!! Set RF A=TX and B as standby*/ > - set_bb_reg(pAdapter, rFPGA0_XA_HSSIParameter2, 0xe, 2); > - set_bb_reg(pAdapter, rFPGA0_XB_HSSIParameter2, 0xe, 1); > - ofdm_tx_en_val = 0x3; > - ofdm_tx_ant_sel_val = 0x11111111;/* Power save */ > - p_cck_txrx->r_ccktx_enable = 0x8; > > - break; > - case ANTENNA_B: > - set_bb_reg(pAdapter, rFPGA0_XA_HSSIParameter2, 0xe, 1); > - set_bb_reg(pAdapter, rFPGA0_XB_HSSIParameter2, 0xe, 2); > - ofdm_tx_en_val = 0x3; > - ofdm_tx_ant_sel_val = 0x22222222;/* Power save */ > - p_cck_txrx->r_ccktx_enable = 0x4; > > - break; > - case ANTENNA_AB: /* For 8192S / > - set_bb_reg(pAdapter, rFPGA0_XA_HSSIParameter2, 0xe, 2); > - set_bb_reg(pAdapter, rFPGA0_XB_HSSIParameter2, 0xe, 2); > - ofdm_tx_en_val = 0x3; > - ofdm_tx_ant_sel_val = 0x3321333; / Disable Power save */ > - p_cck_txrx->r_ccktx_enable = 0xC; > > - break; > - default: > - break; > - } > - /OFDM Tx/ > - set_bb_reg(pAdapter, rFPGA1_TxInfo, 0xffffffff, ofdm_tx_ant_sel_val); > - /OFDM Tx/ > - set_bb_reg(pAdapter, rFPGA0_TxInfo, 0x0000000f, ofdm_tx_en_val); > - switch (pAdapter->mppriv.antenna_rx) { > > - case ANTENNA_A: > - ofdm_rx_ant_sel_val = 0x1; /* A / > - p_cck_txrx->r_cckrx_enable = 0x0; / default: A */ > > - p_cck_txrx->r_cckrx_enable_2 = 0x0; /* option: A */ > > - break; > - case ANTENNA_B: > - ofdm_rx_ant_sel_val = 0x2; /* B / > - p_cck_txrx->r_cckrx_enable = 0x1; / default: B */ > > - p_cck_txrx->r_cckrx_enable_2 = 0x1; /* option: B */ > > - break; > - case ANTENNA_AB: > - ofdm_rx_ant_sel_val = 0x3; /* AB / > - p_cck_txrx->r_cckrx_enable = 0x0; / default:A */ > > - p_cck_txrx->r_cckrx_enable_2 = 0x1; /* option:B */ > > - break; > - default: > - break; > - } > - /OFDM Rx/ > - set_bb_reg(pAdapter, rOFDM0_TRxPathEnable, 0x0000000f, > - ofdm_rx_ant_sel_val); > - /OFDM Rx/ > - set_bb_reg(pAdapter, rOFDM1_TRxPathEnable, 0x0000000f, > - ofdm_rx_ant_sel_val); > - > - cck_ant_sel_val = cck_ant_select_val; > - /CCK TxRx/ > - set_bb_reg(pAdapter, rCCK0_AFESetting, bMaskByte3, cck_ant_sel_val); > -} > - > -static void TriggerRFThermalMeter(struct _adapter pAdapter) > -{ > - / 0x24: RF Reg[6:5] */ > - set_rf_reg(pAdapter, RF_PATH_A, RF_T_METER, bRFRegOffsetMask, 0x60); > -} > - > -static u32 ReadRFThermalMeter(struct _adapter pAdapter) > -{ > - / 0x24: RF Reg[4:0] */ > - return get_rf_reg(pAdapter, RF_PATH_A, RF_T_METER, 0x1F); > -} > - > -void r8712_GetThermalMeter(struct _adapter pAdapter, u32 value) > -{ > - TriggerRFThermalMeter(pAdapter); > - msleep(1000); > - value = ReadRFThermalMeter(pAdapter); > -} > - > -void r8712_SetSingleCarrierTx(struct _adapter pAdapter, u8 bStart) > -{ > - if (bStart) { / Start Single Carrier. / > - / 1. if OFDM block on? / > - if (!get_bb_reg(pAdapter, rFPGA0_RFMOD, bOFDMEn)) > - /set OFDM block on/ > - set_bb_reg(pAdapter, rFPGA0_RFMOD, bOFDMEn, bEnable); > - / 2. set CCK test mode off, set to CCK normal mode / > - set_bb_reg(pAdapter, rCCK0_System, bCCKBBMode, bDisable); > - / 3. turn on scramble setting / > - set_bb_reg(pAdapter, rCCK0_System, bCCKScramble, bEnable); > - / 4. Turn On Single Carrier Tx and off the other test modes. / > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable); > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bEnable); > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable); > - } else { / Stop Single Carrier./ > - / Turn off all test modes./ > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable); > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, > - bDisable); > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable); > - msleep(20); > - /BB Reset/ > - set_bb_reg(pAdapter, rPMAC_Reset, bBBResetB, 0x0); > - set_bb_reg(pAdapter, rPMAC_Reset, bBBResetB, 0x1); > - } > -} > - > -void r8712_SetSingleToneTx(struct _adapter *pAdapter, u8 bStart) > -{ > - u8 rfPath; > - > - switch (pAdapter->mppriv.antenna_tx) { > > - case ANTENNA_B: > - rfPath = RF_PATH_B; > - break; > - case ANTENNA_A: > - default: > - rfPath = RF_PATH_A; > - break; > - } > - if (bStart) { /* Start Single Tone./ > - set_bb_reg(pAdapter, rFPGA0_RFMOD, bCCKEn, bDisable); > - set_bb_reg(pAdapter, rFPGA0_RFMOD, bOFDMEn, bDisable); > - set_rf_reg(pAdapter, rfPath, RF_TX_G2, bRFRegOffsetMask, > - 0xd4000); > - msleep(100); > - / PAD all on./ > - set_rf_reg(pAdapter, rfPath, RF_AC, bRFRegOffsetMask, 0x2001f); > - msleep(100); > - } else { / Stop Single Tone./ > - set_bb_reg(pAdapter, rFPGA0_RFMOD, bCCKEn, bEnable); > - set_bb_reg(pAdapter, rFPGA0_RFMOD, bOFDMEn, bEnable); > - set_rf_reg(pAdapter, rfPath, RF_TX_G2, bRFRegOffsetMask, > - 0x54000); > - msleep(100); > - / PAD all on./ > - set_rf_reg(pAdapter, rfPath, RF_AC, bRFRegOffsetMask, 0x30000); > - msleep(100); > - } > -} > - > -void r8712_SetCarrierSuppressionTx(struct _adapter pAdapter, u8 bStart) > -{ > - if (bStart) { / Start Carrier Suppression./ > - if (pAdapter->mppriv.curr_rateidx <= MPT_RATE_11M) { > > - /* 1. if CCK block on? / > - if (!get_bb_reg(pAdapter, rFPGA0_RFMOD, bCCKEn)) { > - /set CCK block on/ > - set_bb_reg(pAdapter, rFPGA0_RFMOD, bCCKEn, > - bEnable); > - } > - / Turn Off All Test Mode / > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, > - bDisable); > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, > - bDisable); > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, > - bDisable); > - /transmit mode/ > - set_bb_reg(pAdapter, rCCK0_System, bCCKBBMode, 0x2); > - /turn off scramble setting/ > - set_bb_reg(pAdapter, rCCK0_System, bCCKScramble, > - bDisable); > - /Set CCK Tx Test Rate/ > - /Set FTxRate to 1Mbps/ > - set_bb_reg(pAdapter, rCCK0_System, bCCKTxRate, 0x0); > - } > - } else { / Stop Carrier Suppression. */ > - if (pAdapter->mppriv.curr_rateidx <= MPT_RATE_11M) { > > - /normal mode/ > - set_bb_reg(pAdapter, rCCK0_System, bCCKBBMode, 0x0); > - /turn on scramble setting/ > - set_bb_reg(pAdapter, rCCK0_System, bCCKScramble, > - bEnable); > - /BB Reset/ > - set_bb_reg(pAdapter, rPMAC_Reset, bBBResetB, 0x0); > - set_bb_reg(pAdapter, rPMAC_Reset, bBBResetB, 0x1); > - } > - } > -} > - > -static void SetCCKContinuousTx(struct _adapter pAdapter, u8 bStart) > -{ > - u32 cckrate; > - > - if (bStart) { > - / 1. if CCK block on? / > - if (!get_bb_reg(pAdapter, rFPGA0_RFMOD, bCCKEn)) { > - /set CCK block on/ > - set_bb_reg(pAdapter, rFPGA0_RFMOD, bCCKEn, bEnable); > - } > - / Turn Off All Test Mode */ > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable); > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable); > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable); > - /Set CCK Tx Test Rate/ > - cckrate = pAdapter->mppriv.curr_rateidx; > > - set_bb_reg(pAdapter, rCCK0_System, bCCKTxRate, cckrate); > - /transmit mode/ > - set_bb_reg(pAdapter, rCCK0_System, bCCKBBMode, 0x2); > - /turn on scramble setting/ > - set_bb_reg(pAdapter, rCCK0_System, bCCKScramble, bEnable); > - } else { > - /normal mode/ > - set_bb_reg(pAdapter, rCCK0_System, bCCKBBMode, 0x0); > - /turn on scramble setting/ > - set_bb_reg(pAdapter, rCCK0_System, bCCKScramble, bEnable); > - /BB Reset/ > - set_bb_reg(pAdapter, rPMAC_Reset, bBBResetB, 0x0); > - set_bb_reg(pAdapter, rPMAC_Reset, bBBResetB, 0x1); > - } > -} /* mpt_StartCckContTx / > - > -static void SetOFDMContinuousTx(struct _adapter pAdapter, u8 bStart) > -{ > - if (bStart) { > - / 1. if OFDM block on? / > - if (!get_bb_reg(pAdapter, rFPGA0_RFMOD, bOFDMEn)) { > - /set OFDM block on/ > - set_bb_reg(pAdapter, rFPGA0_RFMOD, bOFDMEn, bEnable); > - } > - / 2. set CCK test mode off, set to CCK normal mode/ > - set_bb_reg(pAdapter, rCCK0_System, bCCKBBMode, bDisable); > - /* 3. turn on scramble setting / > - set_bb_reg(pAdapter, rCCK0_System, bCCKScramble, bEnable); > - / 4. Turn On Continue Tx and turn off the other test modes./ > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bEnable); > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable); > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable); > - } else { > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable); > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, > - bDisable); > - set_bb_reg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable); > - msleep(20); > - /BB Reset/ > - set_bb_reg(pAdapter, rPMAC_Reset, bBBResetB, 0x0); > - set_bb_reg(pAdapter, rPMAC_Reset, bBBResetB, 0x1); > - } > -} / mpt_StartOfdmContTx */ > - > -void r8712_SetContinuousTx(struct _adapter pAdapter, u8 bStart) > -{ > - / ADC turn off [bit24-21] adc port0 ~ port1 */ > - if (bStart) { > - r8712_bb_reg_write(pAdapter, rRx_Wait_CCCA, > - r8712_bb_reg_read(pAdapter, > - rRx_Wait_CCCA) & 0xFE1FFFFF); > - msleep(100); > - } > - if (pAdapter->mppriv.curr_rateidx <= MPT_RATE_11M) > > - SetCCKContinuousTx(pAdapter, bStart); > - else if ((pAdapter->mppriv.curr_rateidx >= MPT_RATE_6M) && > > - (pAdapter->mppriv.curr_rateidx <= MPT_RATE_MCS15)) > > - SetOFDMContinuousTx(pAdapter, bStart); > - /* ADC turn on [bit24-21] adc port0 ~ port1 / > - if (!bStart) > - r8712_bb_reg_write(pAdapter, rRx_Wait_CCCA, > - r8712_bb_reg_read(pAdapter, > - rRx_Wait_CCCA) | 0x01E00000); > -} > - > -void r8712_ResetPhyRxPktCount(struct _adapter pAdapter) > -{ > - u32 i, phyrx_set = 0; > - > - for (i = OFDM_PPDU_BIT; i <= HT_MPDU_FAIL_BIT; i++) { > - phyrx_set = 0; > - phyrx_set |= (i << 28); /select/ > - phyrx_set |= 0x08000000; / set counter to zero/ > - r8712_write32(pAdapter, RXERR_RPT, phyrx_set); > - } > -} > - > -static u32 GetPhyRxPktCounts(struct _adapter pAdapter, u32 selbit) > -{ > - /selection/ > - u32 phyrx_set = 0; > - u32 SelectBit; > - > - SelectBit = selbit << 28; > - phyrx_set |= (SelectBit & 0xF0000000); > - r8712_write32(pAdapter, RXERR_RPT, phyrx_set); > - /Read packet count/ > - return r8712_read32(pAdapter, RXERR_RPT) & RPTMaxCount; > -} > - > -u32 r8712_GetPhyRxPktReceived(struct _adapter pAdapter) > -{ > - u32 OFDM_cnt = GetPhyRxPktCounts(pAdapter, OFDM_MPDU_OK_BIT); > - u32 CCK_cnt = GetPhyRxPktCounts(pAdapter, CCK_MPDU_OK_BIT); > - u32 HT_cnt = GetPhyRxPktCounts(pAdapter, HT_MPDU_OK_BIT); > - > - return OFDM_cnt + CCK_cnt + HT_cnt; > -} > - > -u32 r8712_GetPhyRxPktCRC32Error(struct _adapter pAdapter) > -{ > - u32 OFDM_cnt = GetPhyRxPktCounts(pAdapter, OFDM_MPDU_FAIL_BIT); > - u32 CCK_cnt = GetPhyRxPktCounts(pAdapter, CCK_MPDU_FAIL_BIT); > - u32 HT_cnt = GetPhyRxPktCounts(pAdapter, HT_MPDU_FAIL_BIT); > - > - return OFDM_cnt + CCK_cnt + HT_cnt; > -} > diff --git a/drivers/staging/rtl8712/rtl871x_mp.h b/drivers/staging/rtl8712/rtl871x_mp.h > deleted file mode 100644 > index 0a60b1e6ccaf..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_mp.h > +++ /dev/null > @@ -1,275 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/*************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************/ > -#ifndef _RTL871X_MP_H > -#define _RTL871X_MP_H > - > -#define MPT_NOOP 0 > -#define MPT_READ_MAC_1BYTE 1 > -#define MPT_READ_MAC_2BYTE 2 > -#define MPT_READ_MAC_4BYTE 3 > -#define MPT_WRITE_MAC_1BYTE 4 > -#define MPT_WRITE_MAC_2BYTE 5 > -#define MPT_WRITE_MAC_4BYTE 6 > -#define MPT_READ_BB_CCK 7 > -#define MPT_WRITE_BB_CCK 8 > -#define MPT_READ_BB_OFDM 9 > -#define MPT_WRITE_BB_OFDM 10 > -#define MPT_READ_RF 11 > -#define MPT_WRITE_RF 12 > -#define MPT_READ_EEPROM_1BYTE 13 > -#define MPT_WRITE_EEPROM_1BYTE 14 > -#define MPT_READ_EEPROM_2BYTE 15 > -#define MPT_WRITE_EEPROM_2BYTE 16 > -#define MPT_SET_CSTHRESHOLD 21 > -#define MPT_SET_INITGAIN 22 > -#define MPT_SWITCH_BAND 23 > -#define MPT_SWITCH_CHANNEL 24 > -#define MPT_SET_DATARATE 25 > -#define MPT_SWITCH_ANTENNA 26 > -#define MPT_SET_TX_POWER 27 > -#define MPT_SET_CONT_TX 28 > -#define MPT_SET_SINGLE_CARRIER 29 > -#define MPT_SET_CARRIER_SUPPRESSION 30 > -#define MPT_GET_RATE_TABLE 31 > -#define MPT_READ_TSSI 32 > -#define MPT_GET_THERMAL_METER 33 > -#define MAX_MP_XMITBUF_SZ 2048 > -#define NR_MP_XMITFRAME 8 > - > -struct mp_xmit_frame { > - struct list_head list; > - struct pkt_attrib attrib; > - _pkt pkt; > - int frame_tag; > - struct _adapter padapter; > - u8 mem_addr; > - u16 sz[8]; > - struct urb pxmit_urb[8]; > - u8 bpending[8]; > - u8 last[8]; > -}; > - > -struct mp_wiparam { > - u32 bcompleted; > - u32 act_type; > - u32 io_offset; > - u32 io_value; > -}; > - > -struct mp_priv { > - struct _adapter papdater; > - /OID cmd handler/ > - struct mp_wiparam workparam; > - u8 act_in_progress; > - /Tx Section/ > - u8 TID; > - u32 tx_pktcount; > - /Rx Section/ > - u32 rx_pktcount; > - u32 rx_crcerrpktcount; > - u32 rx_pktloss; > - struct recv_stat rxstat; > - /RF/BB relative/ > - u32 curr_ch; > - u32 curr_rateidx; > - u8 curr_bandwidth; > - u8 curr_modem; > - u8 curr_txpoweridx; > - u32 curr_crystalcap; > - u16 antenna_tx; > - u16 antenna_rx; > - u8 curr_rfpath; > - u8 check_mp_pkt; > - uint ForcedDataRate; > - struct wlan_network mp_network; > - unsigned char network_macaddr[6]; > - /Testing Flag/ > - u32 mode;/0 for normal type packet, > - * 1 for loopback packet (16bytes TXCMD) > - / > - sint prev_fw_state; > - u8 pallocated_mp_xmitframe_buf; > - u8 pmp_xmtframe_buf; > - struct __queue free_mp_xmitqueue; > - u32 free_mp_xmitframe_cnt; > -}; > - > -struct IOCMD_STRUCT { > - u8 cmdclass; > - u16 value; > - u8 index; > -}; > - > -struct rf_reg_param { > - u32 path; > - u32 offset; > - u32 value; > -}; > - > -struct bb_reg_param { > - u32 offset; > - u32 value; > -}; > - > -/ ======================================================================= / > - > -#define LOWER true > -#define RAISE false > -#define IOCMD_CTRL_REG 0x10250370 > -#define IOCMD_DATA_REG 0x10250374 > -#define IOCMD_GET_THERMAL_METER 0xFD000028 > -#define IOCMD_CLASS_BB_RF 0xF0 > -#define IOCMD_BB_READ_IDX 0x00 > -#define IOCMD_BB_WRITE_IDX 0x01 > -#define IOCMD_RF_READ_IDX 0x02 > -#define IOCMD_RF_WRIT_IDX 0x03 > -#define BB_REG_BASE_ADDR 0x800 > -#define RF_PATH_A 0 > -#define RF_PATH_B 1 > -#define RF_PATH_C 2 > -#define RF_PATH_D 3 > -#define MAX_RF_PATH_NUMS 2 > -#define 2MAC_MODE 0 > -#define LOOPBOOK_MODE 1 > - > -/ MP set force data rate base on the definition. / > -enum { > - / CCK rate. / > - MPT_RATE_1M, / 0 / > - MPT_RATE_2M, > - MPT_RATE_55M, > - MPT_RATE_11M, / 3 / > - > - / OFDM rate. / > - MPT_RATE_6M, / 4 / > - MPT_RATE_9M, > - MPT_RATE_12M, > - MPT_RATE_18M, > - MPT_RATE_24M, > - MPT_RATE_36M, > - MPT_RATE_48M, > - MPT_RATE_54M, / 11 / > - > - / HT rate. / > - MPT_RATE_MCS0, / 12 / > - MPT_RATE_MCS1, > - MPT_RATE_MCS2, > - MPT_RATE_MCS3, > - MPT_RATE_MCS4, > - MPT_RATE_MCS5, > - MPT_RATE_MCS6, > - MPT_RATE_MCS7, / 19 / > - MPT_RATE_MCS8, > - MPT_RATE_MCS9, > - MPT_RATE_MCS10, > - MPT_RATE_MCS11, > - MPT_RATE_MCS12, > - MPT_RATE_MCS13, > - MPT_RATE_MCS14, > - MPT_RATE_MCS15, / 27 / > - MPT_RATE_LAST > -}; > - > -/ Represent Channel Width in HT Capabilities / > -enum HT_CHANNEL_WIDTH { > - HT_CHANNEL_WIDTH_20 = 0, > - HT_CHANNEL_WIDTH_40 = 1, > -}; > - > -#define MAX_TX_PWR_INDEX_N_MODE 64 / 0x3F / > - > -enum POWER_MODE { > - POWER_LOW = 0, > - POWER_NORMAL > -}; > - > -#define RX_PKT_BROADCAST 1 > -#define RX_PKT_DEST_ADDR 2 > -#define RX_PKT_PHY_MATCH 3 > - > -#define RPTMaxCount 0x000FFFFF > - > -/ parameter 1 : BitMask > - * bit 0 : OFDM PPDU > - * bit 1 : OFDM False Alarm > - * bit 2 : OFDM MPDU OK > - * bit 3 : OFDM MPDU Fail > - * bit 4 : CCK PPDU > - * bit 5 : CCK False Alarm > - * bit 6 : CCK MPDU ok > - * bit 7 : CCK MPDU fail > - * bit 8 : HT PPDU counter > - * bit 9 : HT false alarm > - * bit 10 : HT MPDU total > - * bit 11 : HT MPDU OK > - * bit 12 : HT MPDU fail > - * bit 15 : RX full drop > - / > -enum RXPHY_BITMASK { > - OFDM_PPDU_BIT = 0, > - OFDM_MPDU_OK_BIT, > - OFDM_MPDU_FAIL_BIT, > - CCK_PPDU_BIT, > - CCK_MPDU_OK_BIT, > - CCK_MPDU_FAIL_BIT, > - HT_PPDU_BIT, > - HT_MPDU_BIT, > - HT_MPDU_OK_BIT, > - HT_MPDU_FAIL_BIT, > -}; > - > -enum ENCRY_CTRL_STATE { > - HW_CONTROL, /hw encryption& decryption/ > - SW_CONTROL, /sw encryption& decryption/ > - HW_ENCRY_SW_DECRY, /hw encryption & sw decryption/ > - SW_ENCRY_HW_DECRY /sw encryption & hw decryption/ > -}; > - > -/ Bandwidth Offset / > -#define HAL_PRIME_CHNL_OFFSET_DONT_CARE 0 > -#define HAL_PRIME_CHNL_OFFSET_LOWER 1 > -#define HAL_PRIME_CHNL_OFFSET_UPPER 2 > -/=======================================================================/ > -void mp871xinit(struct _adapter padapter); > -void mp871xdeinit(struct _adapter padapter); > -u32 r8712_bb_reg_read(struct _adapter Adapter, u16 offset); > -u8 r8712_bb_reg_write(struct _adapter Adapter, u16 offset, u32 value); > -u32 r8712_rf_reg_read(struct _adapter Adapter, u8 path, u8 offset); > -u8 r8712_rf_reg_write(struct _adapter Adapter, u8 path, > - u8 offset, u32 value); > -u32 r8712_get_bb_reg(struct _adapter Adapter, u16 offset, u32 bitmask); > -u8 r8712_set_bb_reg(struct _adapter Adapter, u16 offset, > - u32 bitmask, u32 value); > -u32 r8712_get_rf_reg(struct _adapter Adapter, u8 path, u8 offset, > - u32 bitmask); > -u8 r8712_set_rf_reg(struct _adapter Adapter, u8 path, u8 offset, > - u32 bitmask, u32 value); > - > -void r8712_SetChannel(struct _adapter pAdapter); > -void r8712_SetTxPower(struct _adapter pAdapte); > -void r8712_SetTxAGCOffset(struct _adapter pAdapter, u32 ulTxAGCOffset); > -void r8712_SetDataRate(struct _adapter pAdapter); > -void r8712_SwitchBandwidth(struct _adapter pAdapter); > -void r8712_SwitchAntenna(struct _adapter pAdapter); > -void r8712_GetThermalMeter(struct _adapter pAdapter, u32 value); > -void r8712_SetContinuousTx(struct _adapter pAdapter, u8 bStart); > -void r8712_SetSingleCarrierTx(struct _adapter pAdapter, u8 bStart); > -void r8712_SetSingleToneTx(struct _adapter pAdapter, u8 bStart); > -void r8712_SetCarrierSuppressionTx(struct _adapter pAdapter, u8 bStart); > -void r8712_ResetPhyRxPktCount(struct _adapter pAdapter); > -u32 r8712_GetPhyRxPktReceived(struct _adapter pAdapter); > -u32 r8712_GetPhyRxPktCRC32Error(struct _adapter pAdapter); > - > -#endif /_RTL871X_MP_H/ > - > diff --git a/drivers/staging/rtl8712/rtl871x_mp_ioctl.c b/drivers/staging/rtl8712/rtl871x_mp_ioctl.c > deleted file mode 100644 > index 26fa09b45c90..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_mp_ioctl.c > +++ /dev/null > @@ -1,883 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/ > - * rtl871x_mp_ioctl.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#include <linux/rndis.h> > > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "mlme_osdep.h" > -#include "rtl871x_mp.h" > -#include "rtl871x_mp_ioctl.h" > - > -uint oid_null_function(struct oid_par_priv *poid_par_priv) > -{ > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_wireless_mode_hdl(struct oid_par_priv *poid_par_priv) > -{ > - uint status = RNDIS_STATUS_SUCCESS; > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - if (poid_par_priv->type_of_oid == SET_OID) { > > - if (poid_par_priv->information_buf_len >= sizeof(u8)) > > - Adapter->registrypriv.wireless_mode = > > - *(u8 *)poid_par_priv->information_buf; > > - else > - status = RNDIS_STATUS_INVALID_LENGTH; > - } else if (poid_par_priv->type_of_oid == QUERY_OID) { > > - if (poid_par_priv->information_buf_len >= sizeof(u8)) { > > - *(u8 *)poid_par_priv->information_buf = > > - Adapter->registrypriv.wireless_mode; > > - *poid_par_priv->bytes_rw = > > - poid_par_priv->information_buf_len; > > - } else { > - status = RNDIS_STATUS_INVALID_LENGTH; > - } > - } else { > - status = RNDIS_STATUS_NOT_ACCEPTED; > - } > - return status; > -} > - > -uint oid_rt_pro_write_bb_reg_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - struct bb_reg_param *pbbreg; > - u16 offset; > - u32 value; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf); > > - offset = (u16)(pbbreg->offset) & 0xFFF; /0ffset :0x800~0xfff/ > > - if (offset < BB_REG_BASE_ADDR) > - offset |= BB_REG_BASE_ADDR; > - value = pbbreg->value; > > - r8712_bb_reg_write(Adapter, offset, value); > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_read_bb_reg_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - struct bb_reg_param *pbbreg; > - u16 offset; > - u32 value; > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf); > > - offset = (u16)(pbbreg->offset) & 0xFFF; /0ffset :0x800~0xfff/ > > - if (offset < BB_REG_BASE_ADDR) > - offset |= BB_REG_BASE_ADDR; > - value = r8712_bb_reg_read(Adapter, offset); > - pbbreg->value = value; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_write_rf_reg_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - struct rf_reg_param *pbbreg; > - u8 path; > - u8 offset; > - u32 value; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf); > > - path = (u8)pbbreg->path; > > - if (path > RF_PATH_B) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - offset = (u8)pbbreg->offset; > > - value = pbbreg->value; > > - r8712_rf_reg_write(Adapter, path, offset, value); > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_read_rf_reg_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - struct rf_reg_param *pbbreg; > - u8 path; > - u8 offset; > - u32 value; > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf); > > - path = (u8)pbbreg->path; > > - if (path > RF_PATH_B) /* 1T2R path_a /path_b */ > > - return RNDIS_STATUS_NOT_ACCEPTED; > - offset = (u8)pbbreg->offset; > > - value = r8712_rf_reg_read(Adapter, path, offset); > - pbbreg->value = value; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - return RNDIS_STATUS_SUCCESS; > -} > - > -/This function initializes the DUT to the MP test mode/ > -static int mp_start_test(struct _adapter *padapter) > -{ > - struct mp_priv *pmppriv = &padapter->mppriv; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct wlan_network *tgt_network = &pmlmepriv->cur_network; > > - struct wlan_bssid_ex *bssid; > - struct sta_info *psta; > - unsigned long length; > - unsigned long irqL; > - int res = 0; > - > - bssid = kzalloc(sizeof(bssid), GFP_KERNEL); > - if (!bssid) > - return -ENOMEM; > - > - / 3 1. initialize a new struct wlan_bssid_ex */ > - memcpy(bssid->MacAddress, pmppriv->network_macaddr, ETH_ALEN); > > - bssid->Ssid.SsidLength = 16; > > - memcpy(bssid->Ssid.Ssid, (unsigned char *)"mp_pseudo_adhoc", > > - bssid->Ssid.SsidLength); > > - bssid->InfrastructureMode = Ndis802_11IBSS; > > - bssid->NetworkTypeInUse = Ndis802_11DS; > > - bssid->IELength = 0; > > - length = r8712_get_wlan_bssid_ex_sz(bssid); > - if (length % 4) { > - /round up to multiple of 4 bytes./ > - bssid->Length = ((length >> 2) + 1) << 2; > > - } else { > - bssid->Length = length; > > - } > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) > - goto end_of_mp_start_test; > - /init mp_start_test status/ > - pmppriv->prev_fw_state = get_fwstate(pmlmepriv); > > - pmlmepriv->fw_state = WIFI_MP_STATE; > > - if (pmppriv->mode == LOOPBOOK_MODE) > > - set_fwstate(pmlmepriv, WIFI_MP_LPBK_STATE); /append txdesc/ > - set_fwstate(pmlmepriv, _FW_UNDER_LINKING); > - /* 3 2. create a new psta for mp driver / > - / clear psta in the cur_network, if any */ > - psta = r8712_get_stainfo(&padapter->stapriv, > > - tgt_network->network.MacAddress); > > - if (psta) > - r8712_free_stainfo(padapter, psta); > - psta = r8712_alloc_stainfo(&padapter->stapriv, bssid->MacAddress); > > - if (!psta) { > - res = -ENOMEM; > - goto end_of_mp_start_test; > - } > - /* 3 3. join pseudo AdHoc */ > - tgt_network->join_res = 1; > > - tgt_network->aid = psta->aid = 1; > > - memcpy(&tgt_network->network, bssid, length); > > - clr_fwstate(pmlmepriv, _FW_UNDER_LINKING); > - r8712_os_indicate_connect(padapter); > - /* Set to LINKED STATE for MP TRX Testing */ > - set_fwstate(pmlmepriv, _FW_LINKED); > -end_of_mp_start_test: > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > - kfree(bssid); > - return res; > -} > - > -/*This function change the DUT from the MP test mode into normal mode */ > -static int mp_stop_test(struct _adapter *padapter) > -{ > - struct mp_priv *pmppriv = &padapter->mppriv; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct wlan_network *tgt_network = &pmlmepriv->cur_network; > > - struct sta_info *psta; > - unsigned long irqL; > - > - spin_lock_irqsave(&pmlmepriv->lock, irqL); > > - if (!check_fwstate(pmlmepriv, WIFI_MP_STATE)) > - goto end_of_mp_stop_test; > - /* 3 1. disconnect pseudo AdHoc / > - r8712_os_indicate_disconnect(padapter); > - / 3 2. clear psta used in mp test mode. */ > - psta = r8712_get_stainfo(&padapter->stapriv, > > - tgt_network->network.MacAddress); > > - if (psta) > - r8712_free_stainfo(padapter, psta); > - /* 3 3. return to normal state (default:station mode) / > - pmlmepriv->fw_state = pmppriv->prev_fw_state; / WIFI_STATION_STATE;*/ > > - /flush the cur_network/ > - memset(tgt_network, 0, sizeof(struct wlan_network)); > -end_of_mp_stop_test: > - spin_unlock_irqrestore(&pmlmepriv->lock, irqL); > > - return _SUCCESS; > -} > - > -uint oid_rt_pro_set_data_rate_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - u32 ratevalue; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len != sizeof(u32)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - ratevalue = *((u32 *)poid_par_priv->information_buf); > > - if (ratevalue >= MPT_RATE_LAST) > > - return RNDIS_STATUS_INVALID_DATA; > - Adapter->mppriv.curr_rateidx = ratevalue; > > - r8712_SetDataRate(Adapter); > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_start_test_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - uint status = RNDIS_STATUS_SUCCESS; > - u32 mode; > - u8 val8; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - mode = *((u32 *)poid_par_priv->information_buf); > > - Adapter->mppriv.mode = mode;/* 1 for loopback*/ > > - if (mp_start_test(Adapter)) > - status = RNDIS_STATUS_NOT_ACCEPTED; > - r8712_write8(Adapter, MSR, 1); /* Link in ad hoc network, 0x1025004C / > - r8712_write8(Adapter, RCR, 0); / RCR : disable all pkt, 0x10250048 / > - / RCR disable Check BSSID, 0x1025004a / > - r8712_write8(Adapter, RCR + 2, 0x57); > - / disable RX filter map , mgt frames will put in RX FIFO 0 */ > - r8712_write16(Adapter, RXFLTMAP0, 0x0); > - val8 = r8712_read8(Adapter, EE_9346CR); > - if (!(val8 & _9356SEL)) { /boot from EFUSE/ > - r8712_efuse_reg_init(Adapter); > - r8712_efuse_change_max_size(Adapter); > - r8712_efuse_reg_uninit(Adapter); > - } > - return status; > -} > - > -uint oid_rt_pro_stop_test_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (mp_stop_test(Adapter) == _FAIL) > - return RNDIS_STATUS_NOT_ACCEPTED; > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_set_channel_direct_call_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - u32 Channel; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len != sizeof(u32)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - Channel = *((u32 *)poid_par_priv->information_buf); > > - if (Channel > 14) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - Adapter->mppriv.curr_ch = Channel; > > - r8712_SetChannel(Adapter); > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_set_antenna_bb_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - u32 antenna; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len != sizeof(u32)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - antenna = *((u32 *)poid_par_priv->information_buf); > > - Adapter->mppriv.antenna_tx = (u16)((antenna & 0xFFFF0000) >> 16); > > - Adapter->mppriv.antenna_rx = (u16)(antenna & 0x0000FFFF); > > - r8712_SwitchAntenna(Adapter); > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_set_tx_power_control_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - u32 tx_pwr_idx; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len != sizeof(u32)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - tx_pwr_idx = *((u32 *)poid_par_priv->information_buf); > > - if (tx_pwr_idx > MAX_TX_PWR_INDEX_N_MODE) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - Adapter->mppriv.curr_txpoweridx = (u8)tx_pwr_idx; > > - r8712_SetTxPower(Adapter); > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_query_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - > - if (poid_par_priv->information_buf_len == sizeof(u32)) { > > - *(u32 *)poid_par_priv->information_buf = > > - Adapter->mppriv.tx_pktcount; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - } else { > - return RNDIS_STATUS_INVALID_LENGTH; > - } > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_query_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - > - if (poid_par_priv->information_buf_len == sizeof(u32)) { > > - *(u32 *)poid_par_priv->information_buf = > > - Adapter->mppriv.rx_pktcount; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - } else { > - return RNDIS_STATUS_INVALID_LENGTH; > - } > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_query_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - > - if (poid_par_priv->information_buf_len == sizeof(u32)) { > > - *(u32 *)poid_par_priv->information_buf = > > - Adapter->mppriv.rx_crcerrpktcount; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - } else { > - return RNDIS_STATUS_INVALID_LENGTH; > - } > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_reset_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - Adapter->mppriv.tx_pktcount = 0; > > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_reset_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len == sizeof(u32)) { > > - Adapter->mppriv.rx_pktcount = 0; > > - Adapter->mppriv.rx_crcerrpktcount = 0; > > - } else { > - return RNDIS_STATUS_INVALID_LENGTH; > - } > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_reset_phy_rx_packet_count_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - r8712_ResetPhyRxPktCount(Adapter); > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_phy_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len != sizeof(u32)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - *(u32 *)poid_par_priv->information_buf = > > - r8712_GetPhyRxPktReceived(Adapter); > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_phy_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len != sizeof(u32)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - *(u32 *)poid_par_priv->information_buf = > > - r8712_GetPhyRxPktCRC32Error(Adapter); > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_set_modulation_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - > - Adapter->mppriv.curr_modem = *((u8 *)poid_par_priv->information_buf); > > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_set_continuous_tx_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - u32 bStartTest; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - bStartTest = *((u32 *)poid_par_priv->information_buf); > > - r8712_SetContinuousTx(Adapter, (u8)bStartTest); > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_set_single_carrier_tx_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - u32 bStartTest; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - bStartTest = *((u32 *)poid_par_priv->information_buf); > > - r8712_SetSingleCarrierTx(Adapter, (u8)bStartTest); > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_set_carrier_suppression_tx_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - u32 bStartTest; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - bStartTest = *((u32 *)poid_par_priv->information_buf); > > - r8712_SetCarrierSuppressionTx(Adapter, (u8)bStartTest); > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_set_single_tone_tx_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - u32 bStartTest; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - bStartTest = *((u32 *)poid_par_priv->information_buf); > > - r8712_SetSingleToneTx(Adapter, (u8)bStartTest); > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - uint status = RNDIS_STATUS_SUCCESS; > - struct mp_rw_reg *RegRWStruct; > - u16 offset; > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - RegRWStruct = (struct mp_rw_reg *)poid_par_priv->information_buf; > > - if ((RegRWStruct->offset >= 0x10250800) && > > - (RegRWStruct->offset <= 0x10250FFF)) { > > - /baseband register/ > - /0ffset :0x800~0xfff/ > - offset = (u16)(RegRWStruct->offset) & 0xFFF; > > - RegRWStruct->value = r8712_bb_reg_read(Adapter, offset); > > - } else { > - switch (RegRWStruct->width) { > > - case 1: > - RegRWStruct->value = r8712_read8(Adapter, > > - RegRWStruct->offset); > > - break; > - case 2: > - RegRWStruct->value = r8712_read16(Adapter, > > - RegRWStruct->offset); > > - break; > - case 4: > - RegRWStruct->value = r8712_read32(Adapter, > > - RegRWStruct->offset); > > - break; > - default: > - status = RNDIS_STATUS_NOT_ACCEPTED; > - break; > - } > - } > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - return status; > -} > - > -uint oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - uint status = RNDIS_STATUS_SUCCESS; > - struct mp_rw_reg *RegRWStruct; > - u16 offset; > - u32 value; > - u32 oldValue = 0; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - RegRWStruct = (struct mp_rw_reg *)poid_par_priv->information_buf; > > - if ((RegRWStruct->offset >= 0x10250800) && > > - (RegRWStruct->offset <= 0x10250FFF)) { > > - /baseband register/ > - offset = (u16)(RegRWStruct->offset) & 0xFFF; > > - value = RegRWStruct->value; > > - switch (RegRWStruct->width) { > > - case 1: > - oldValue = r8712_bb_reg_read(Adapter, offset); > - oldValue &= 0xFFFFFF00; > - value &= 0x000000FF; > - value |= oldValue; > - break; > - case 2: > - oldValue = r8712_bb_reg_read(Adapter, offset); > - oldValue &= 0xFFFF0000; > - value &= 0x0000FFFF; > - value |= oldValue; > - break; > - } > - r8712_bb_reg_write(Adapter, offset, value); > - } else { > - switch (RegRWStruct->width) { > > - case 1: > - r8712_write8(Adapter, RegRWStruct->offset, > > - (unsigned char)RegRWStruct->value); > > - break; > - case 2: > - r8712_write16(Adapter, RegRWStruct->offset, > > - (unsigned short)RegRWStruct->value); > > - break; > - case 4: > - r8712_write32(Adapter, RegRWStruct->offset, > > - (unsigned int)RegRWStruct->value); > > - break; > - default: > - status = RNDIS_STATUS_NOT_ACCEPTED; > - break; > - } > - } > - return status; > -} > - > -uint oid_rt_get_thermal_meter_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - > - if (Adapter->mppriv.act_in_progress) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - > - if (poid_par_priv->information_buf_len < sizeof(u8)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - /init workparam/ > - Adapter->mppriv.act_in_progress = true; > > - Adapter->mppriv.workparam.bcompleted = false; > > - Adapter->mppriv.workparam.act_type = MPT_GET_THERMAL_METER; > > - Adapter->mppriv.workparam.io_offset = 0; > > - Adapter->mppriv.workparam.io_value = 0xFFFFFFFF; > > - r8712_GetThermalMeter(Adapter, &Adapter->mppriv.workparam.io_value); > > - Adapter->mppriv.workparam.bcompleted = true; > > - Adapter->mppriv.act_in_progress = false; > > - *(u32 *)poid_par_priv->information_buf = > > - Adapter->mppriv.workparam.io_value; > > - *poid_par_priv->bytes_rw = sizeof(u32); > > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_read_efuse_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - uint status = RNDIS_STATUS_SUCCESS; > - > - struct EFUSE_ACCESS_STRUCT *pefuse; > - u8 *data; > - u16 addr = 0, cnts = 0; > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len < > > - sizeof(struct EFUSE_ACCESS_STRUCT)) > - return RNDIS_STATUS_INVALID_LENGTH; > - pefuse = (struct EFUSE_ACCESS_STRUCT *)poid_par_priv->information_buf; > > - addr = pefuse->start_addr; > > - cnts = pefuse->cnts; > > - data = pefuse->data; > > - memset(data, 0xFF, cnts); > - if ((addr > 511) || (cnts < 1) || (cnts > 512) || (addr + cnts) > > > - EFUSE_MAX_SIZE) > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (!r8712_efuse_access(Adapter, true, addr, cnts, data)) > - status = RNDIS_STATUS_FAILURE; > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - return status; > -} > - > -/------------------------------------------------------------------------/ > -uint oid_rt_pro_write_efuse_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - uint status = RNDIS_STATUS_SUCCESS; > - > - struct EFUSE_ACCESS_STRUCT *pefuse; > - u8 *data; > - u16 addr = 0, cnts = 0; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - > - pefuse = (struct EFUSE_ACCESS_STRUCT *)poid_par_priv->information_buf; > > - addr = pefuse->start_addr; > > - cnts = pefuse->cnts; > > - data = pefuse->data; > > - > - if ((addr > 511) || (cnts < 1) || (cnts > 512) || > > - (addr + cnts) > r8712_efuse_get_max_size(Adapter)) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (!r8712_efuse_access(Adapter, false, addr, cnts, data)) > - status = RNDIS_STATUS_FAILURE; > - return status; > -} > - > -/----------------------------------------------------------------------/ > - > -uint oid_rt_get_efuse_current_size_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len < sizeof(int)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - r8712_efuse_reg_init(Adapter); > - *(int *)poid_par_priv->information_buf = > > - r8712_efuse_get_current_size(Adapter); > - r8712_efuse_reg_uninit(Adapter); > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_get_efuse_max_size_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len < sizeof(u32)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - *(int *)poid_par_priv->information_buf = > > - r8712_efuse_get_max_size(Adapter); > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_pro_efuse_hdl(struct oid_par_priv *poid_par_priv) > -{ > - uint status = RNDIS_STATUS_SUCCESS; > - > - if (poid_par_priv->type_of_oid == QUERY_OID) > > - status = oid_rt_pro_read_efuse_hdl(poid_par_priv); > - else > - status = oid_rt_pro_write_efuse_hdl(poid_par_priv); > - return status; > -} > - > -uint oid_rt_pro_efuse_map_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - uint status = RNDIS_STATUS_SUCCESS; > - u8 *data; > - > - *poid_par_priv->bytes_rw = 0; > > - if (poid_par_priv->information_buf_len < EFUSE_MAP_MAX_SIZE) > > - return RNDIS_STATUS_INVALID_LENGTH; > - data = (u8 *)poid_par_priv->information_buf; > > - if (poid_par_priv->type_of_oid == QUERY_OID) { > > - if (r8712_efuse_map_read(Adapter, 0, EFUSE_MAP_MAX_SIZE, data)) > - *poid_par_priv->bytes_rw = EFUSE_MAP_MAX_SIZE; > > - else > - status = RNDIS_STATUS_FAILURE; > - } else { > - /* SET_OID */ > - if (r8712_efuse_reg_init(Adapter)) { > - if (r8712_efuse_map_write(Adapter, 0, > - EFUSE_MAP_MAX_SIZE, data)) > - *poid_par_priv->bytes_rw = EFUSE_MAP_MAX_SIZE; > > - else > - status = RNDIS_STATUS_FAILURE; > - r8712_efuse_reg_uninit(Adapter); > - } else { > - status = RNDIS_STATUS_FAILURE; > - } > - } > - return status; > -} > - > -uint oid_rt_set_bandwidth_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - u32 bandwidth; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len < sizeof(u32)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - bandwidth = *((u32 *)poid_par_priv->information_buf);/4/ > > - if (bandwidth != HT_CHANNEL_WIDTH_20) > - bandwidth = HT_CHANNEL_WIDTH_40; > - Adapter->mppriv.curr_bandwidth = (u8)bandwidth; > > - r8712_SwitchBandwidth(Adapter); > - return RNDIS_STATUS_SUCCESS; > -} > - > -uint oid_rt_set_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - u8 rx_pkt_type; > - u32 rcr_val32; > - > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len < sizeof(u8)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - rx_pkt_type = *((u8 *)poid_par_priv->information_buf);/4/ > > - rcr_val32 = r8712_read32(Adapter, RCR);/RCR = 0x10250048/ > - rcr_val32 &= ~(RCR_CBSSID | RCR_AB | RCR_AM | RCR_APM | RCR_AAP); > - switch (rx_pkt_type) { > - case RX_PKT_BROADCAST: > - rcr_val32 |= (RCR_AB | RCR_AM | RCR_APM | RCR_AAP | RCR_ACRC32); > - break; > - case RX_PKT_DEST_ADDR: > - rcr_val32 |= (RCR_AB | RCR_AM | RCR_APM | RCR_AAP | RCR_ACRC32); > - break; > - case RX_PKT_PHY_MATCH: > - rcr_val32 |= (RCR_APM | RCR_ACRC32); > - break; > - default: > - rcr_val32 &= ~(RCR_AAP | > - RCR_APM | > - RCR_AM | > - RCR_AB | > - RCR_ACRC32); > - break; > - } > - if (rx_pkt_type == RX_PKT_DEST_ADDR) > - Adapter->mppriv.check_mp_pkt = 1; > > - else > - Adapter->mppriv.check_mp_pkt = 0; > > - r8712_write32(Adapter, RCR, rcr_val32); > - return RNDIS_STATUS_SUCCESS; > -} > - > -/--------------------------------------------------------------------------/ > -/Linux/ > -unsigned int mp_ioctl_xmit_packet_hdl(struct oid_par_priv poid_par_priv) > -{ > - return _SUCCESS; > -} > - > -/-------------------------------------------------------------------------*/ > -uint oid_rt_set_power_down_hdl(struct oid_par_priv *poid_par_priv) > -{ > - if (poid_par_priv->type_of_oid != SET_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - /CALL the power_down function/ > - return RNDIS_STATUS_SUCCESS; > -} > - > -/*-------------------------------------------------------------------------- */ > -uint oid_rt_get_power_mode_hdl(struct oid_par_priv *poid_par_priv) > -{ > - struct _adapter *Adapter = (struct _adapter *) > - (poid_par_priv->adapter_context); > > - > - if (poid_par_priv->type_of_oid != QUERY_OID) > > - return RNDIS_STATUS_NOT_ACCEPTED; > - if (poid_par_priv->information_buf_len < sizeof(u32)) > > - return RNDIS_STATUS_INVALID_LENGTH; > - *(int *)poid_par_priv->information_buf = > > - Adapter->registrypriv.low_power ? POWER_LOW : POWER_NORMAL; > > - *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len; > > - return RNDIS_STATUS_SUCCESS; > -} > diff --git a/drivers/staging/rtl8712/rtl871x_mp_ioctl.h b/drivers/staging/rtl8712/rtl871x_mp_ioctl.h > deleted file mode 100644 > index aa4d5ce471f2..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_mp_ioctl.h > +++ /dev/null > @@ -1,328 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ****************************************/ > -#ifndef _RTL871X_MP_IOCTL_H > -#define _RTL871X_MP_IOCTL_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "mp_custom_oid.h" > -#include "rtl871x_ioctl.h" > -#include "rtl871x_ioctl_rtl.h" > -#include "rtl8712_efuse.h" > - > -#define TESTFWCMDNUMBER 1000000 > -#define TEST_H2CINT_WAIT_TIME 500 > -#define TEST_C2HINT_WAIT_TIME 500 > -#define HCI_TEST_SYSCFG_HWMASK 1 > -#define _BUSCLK_40M (4 << 2) > - > -struct CFG_DBG_MSG_STRUCT { > - u32 DebugLevel; > - u32 DebugComponent_H32; > - u32 DebugComponent_L32; > -}; > - > -struct mp_rw_reg { > - uint offset; > - uint width; > - u32 value; > -}; > - > -/ for OID_RT_PRO_READ16_EEPROM & OID_RT_PRO_WRITE16_EEPROM / > -struct eeprom_rw_param { > - uint offset; > - u16 value; > -}; > - > -struct EFUSE_ACCESS_STRUCT { > - u16 start_addr; > - u16 cnts; > - u8 data[]; > -}; > - > -struct burst_rw_reg { > - uint offset; > - uint len; > - u8 Data[256]; > -}; > - > -struct usb_vendor_req { > - u8 bRequest; > - u16 wValue; > - u16 wIndex; > - u16 wLength; > - u8 u8Dir;/0:OUT, 1:IN / > - u8 u8InData; > -}; > - > -struct DR_VARIABLE_STRUCT { > - u8 offset; > - u32 variable; > -}; > - > -/ oid_rtl_seg_87_11_00 / > -uint oid_rt_pro_read_register_hdl(struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_write_register_hdl(struct oid_par_priv poid_par_priv); > -/ oid_rtl_seg_81_80_00 / > -uint oid_rt_pro_set_data_rate_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_start_test_hdl(struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_stop_test_hdl(struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_set_channel_direct_call_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_set_antenna_bb_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_set_tx_power_control_hdl( > - struct oid_par_priv poid_par_priv); > -/ oid_rtl_seg_81_80_20 / > -uint oid_rt_pro_query_tx_packet_sent_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_query_rx_packet_received_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_query_rx_packet_crc32_error_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_reset_tx_packet_sent_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_reset_rx_packet_received_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_set_modulation_hdl(struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_set_continuous_tx_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_set_single_carrier_tx_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_set_carrier_suppression_tx_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_set_single_tone_tx_hdl( > - struct oid_par_priv poid_par_priv); > -/ oid_rtl_seg_81_87 / > -uint oid_rt_pro_write_bb_reg_hdl(struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_read_bb_reg_hdl(struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_write_rf_reg_hdl(struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_read_rf_reg_hdl(struct oid_par_priv poid_par_priv); > -/ oid_rtl_seg_81_85 / > -uint oid_rt_wireless_mode_hdl(struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_read_efuse_hdl(struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_write_efuse_hdl(struct oid_par_priv poid_par_priv); > -uint oid_rt_get_efuse_current_size_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_efuse_hdl(struct oid_par_priv poid_par_priv); > -uint oid_rt_pro_efuse_map_hdl(struct oid_par_priv poid_par_priv); > -uint oid_rt_set_bandwidth_hdl(struct oid_par_priv poid_par_priv); > -uint oid_rt_set_rx_packet_type_hdl(struct oid_par_priv poid_par_priv); > -uint oid_rt_get_efuse_max_size_hdl(struct oid_par_priv poid_par_priv); > -uint oid_rt_get_thermal_meter_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_reset_phy_rx_packet_count_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_phy_rx_packet_received_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_phy_rx_packet_crc32_error_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_set_power_down_hdl( > - struct oid_par_priv poid_par_priv); > -uint oid_rt_get_power_mode_hdl( > - struct oid_par_priv poid_par_priv); > -#ifdef RTL871X_MP_IOCTL_C / CAUTION!!! / > -/ This ifdef MUST be left in!! / > - > -#else / RTL871X_MP_IOCTL_C / > -extern struct oid_obj_priv oid_rtl_seg_81_87[5]; > -extern struct oid_obj_priv oid_rtl_seg_87_11_00[32]; > -extern struct oid_obj_priv oid_rtl_seg_87_11_20[5]; > -extern struct oid_obj_priv oid_rtl_seg_87_11_50[2]; > -extern struct oid_obj_priv oid_rtl_seg_87_11_80[1]; > -extern struct oid_obj_priv oid_rtl_seg_87_11_B0[1]; > -extern struct oid_obj_priv oid_rtl_seg_87_11_F0[16]; > -extern struct oid_obj_priv oid_rtl_seg_87_12_00[32]; > - > -#endif / RTL871X_MP_IOCTL_C / > - > -enum MP_MODE { > - MP_START_MODE, > - MP_STOP_MODE, > - MP_ERR_MODE > -}; > - > -struct rwreg_param { > - unsigned int offset; > - unsigned int width; > - unsigned int value; > -}; > - > -struct bbreg_param { > - unsigned int offset; > - unsigned int phymask; > - unsigned int value; > -}; > - > -struct txpower_param { > - unsigned int pwr_index; > -}; > - > -struct datarate_param { > - unsigned int rate_index; > -}; > - > -struct rfintfs_parm { > - unsigned int rfintfs; > -}; > - > -struct mp_xmit_packet { > - unsigned int len; > -}; > - > -struct psmode_param { > - unsigned int ps_mode; > - unsigned int smart_ps; > -}; > - > -struct mp_ioctl_handler { > - unsigned int paramsize; > - unsigned int (handler)(struct oid_par_priv poid_par_priv); > - unsigned int oid; > -}; > - > -struct mp_ioctl_param { > - unsigned int subcode; > - unsigned int len; > - unsigned char data[]; > -}; > - > -#define GEN_MP_IOCTL_SUBCODE(code) MP_IOCTL ## code ## CMD > - > -enum RTL871X_MP_IOCTL_SUBCODE { > - GEN_MP_IOCTL_SUBCODE(MP_START), /0/ > - GEN_MP_IOCTL_SUBCODE(MP_STOP), /1/ > - GEN_MP_IOCTL_SUBCODE(READ_REG), /2/ > - GEN_MP_IOCTL_SUBCODE(WRITE_REG), > - GEN_MP_IOCTL_SUBCODE(SET_CHANNEL), /4/ > - GEN_MP_IOCTL_SUBCODE(SET_TXPOWER), /5/ > - GEN_MP_IOCTL_SUBCODE(SET_DATARATE), /6/ > - GEN_MP_IOCTL_SUBCODE(READ_BB_REG), /7/ > - GEN_MP_IOCTL_SUBCODE(WRITE_BB_REG), > - GEN_MP_IOCTL_SUBCODE(READ_RF_REG), /9/ > - GEN_MP_IOCTL_SUBCODE(WRITE_RF_REG), > - GEN_MP_IOCTL_SUBCODE(SET_RF_INTFS), > - GEN_MP_IOCTL_SUBCODE(IOCTL_XMIT_PACKET), /12/ > - GEN_MP_IOCTL_SUBCODE(PS_STATE), /13/ > - GEN_MP_IOCTL_SUBCODE(READ16_EEPROM), /14/ > - GEN_MP_IOCTL_SUBCODE(WRITE16_EEPROM), /15/ > - GEN_MP_IOCTL_SUBCODE(SET_PTM), /16/ > - GEN_MP_IOCTL_SUBCODE(READ_TSSI), /17/ > - GEN_MP_IOCTL_SUBCODE(CNTU_TX), /18/ > - GEN_MP_IOCTL_SUBCODE(SET_BANDWIDTH), /19/ > - GEN_MP_IOCTL_SUBCODE(SET_RX_PKT_TYPE), /20/ > - GEN_MP_IOCTL_SUBCODE(RESET_PHY_RX_PKT_CNT), /21/ > - GEN_MP_IOCTL_SUBCODE(GET_PHY_RX_PKT_RECV), /22/ > - GEN_MP_IOCTL_SUBCODE(GET_PHY_RX_PKT_ERROR), /23/ > - GEN_MP_IOCTL_SUBCODE(SET_POWER_DOWN), /24/ > - GEN_MP_IOCTL_SUBCODE(GET_THERMAL_METER), /25/ > - GEN_MP_IOCTL_SUBCODE(GET_POWER_MODE), /26/ > - GEN_MP_IOCTL_SUBCODE(EFUSE), /27/ > - GEN_MP_IOCTL_SUBCODE(EFUSE_MAP), /28/ > - GEN_MP_IOCTL_SUBCODE(GET_EFUSE_MAX_SIZE), /29/ > - GEN_MP_IOCTL_SUBCODE(GET_EFUSE_CURRENT_SIZE), /30/ > - GEN_MP_IOCTL_SUBCODE(SC_TX), /31/ > - GEN_MP_IOCTL_SUBCODE(CS_TX), /32/ > - GEN_MP_IOCTL_SUBCODE(ST_TX), /33/ > - GEN_MP_IOCTL_SUBCODE(SET_ANTENNA), /34/ > - MAX_MP_IOCTL_SUBCODE, > -}; > - > -unsigned int mp_ioctl_xmit_packet_hdl(struct oid_par_priv poid_par_priv); > - > -#ifdef RTL871X_MP_IOCTL_C / CAUTION!!! / > -/ This ifdef MUST be left in!! / > - > -static struct mp_ioctl_handler mp_ioctl_hdl[] = { > - {sizeof(u32), oid_rt_pro_start_test_hdl, > - OID_RT_PRO_START_TEST},/0/ > - {sizeof(u32), oid_rt_pro_stop_test_hdl, > - OID_RT_PRO_STOP_TEST},/1/ > - {sizeof(struct rwreg_param), > - oid_rt_pro_read_register_hdl, > - OID_RT_PRO_READ_REGISTER},/2/ > - {sizeof(struct rwreg_param), > - oid_rt_pro_write_register_hdl, > - OID_RT_PRO_WRITE_REGISTER}, > - {sizeof(u32), > - oid_rt_pro_set_channel_direct_call_hdl, > - OID_RT_PRO_SET_CHANNEL_DIRECT_CALL}, > - {sizeof(struct txpower_param), > - oid_rt_pro_set_tx_power_control_hdl, > - OID_RT_PRO_SET_TX_POWER_CONTROL}, > - {sizeof(u32), > - oid_rt_pro_set_data_rate_hdl, > - OID_RT_PRO_SET_DATA_RATE}, > - {sizeof(struct bb_reg_param), > - oid_rt_pro_read_bb_reg_hdl, > - OID_RT_PRO_READ_BB_REG},/7/ > - {sizeof(struct bb_reg_param), > - oid_rt_pro_write_bb_reg_hdl, > - OID_RT_PRO_WRITE_BB_REG}, > - {sizeof(struct rwreg_param), > - oid_rt_pro_read_rf_reg_hdl, > - OID_RT_PRO_RF_READ_REGISTRY},/9/ > - {sizeof(struct rwreg_param), > - oid_rt_pro_write_rf_reg_hdl, > - OID_RT_PRO_RF_WRITE_REGISTRY}, > - {sizeof(struct rfintfs_parm), NULL, 0}, > - {0, mp_ioctl_xmit_packet_hdl, 0},/12/ > - {sizeof(struct psmode_param), NULL, 0},/13/ > - {sizeof(struct eeprom_rw_param), NULL, 0},/14/ > - {sizeof(struct eeprom_rw_param), NULL, 0},/15/ > - {sizeof(unsigned char), NULL, 0},/16/ > - {sizeof(u32), NULL, 0},/17/ > - {sizeof(u32), oid_rt_pro_set_continuous_tx_hdl, > - OID_RT_PRO_SET_CONTINUOUS_TX},/18/ > - {sizeof(u32), oid_rt_set_bandwidth_hdl, > - OID_RT_SET_BANDWIDTH},/19/ > - {sizeof(u32), oid_rt_set_rx_packet_type_hdl, > - OID_RT_SET_RX_PACKET_TYPE},/20/ > - {0, oid_rt_reset_phy_rx_packet_count_hdl, > - OID_RT_RESET_PHY_RX_PACKET_COUNT},/21/ > - {sizeof(u32), oid_rt_get_phy_rx_packet_received_hdl, > - OID_RT_GET_PHY_RX_PACKET_RECEIVED},/22/ > - {sizeof(u32), oid_rt_get_phy_rx_packet_crc32_error_hdl, > - OID_RT_GET_PHY_RX_PACKET_CRC32_ERROR},/23/ > - {sizeof(unsigned char), oid_rt_set_power_down_hdl, > - OID_RT_SET_POWER_DOWN},/24/ > - {sizeof(u32), oid_rt_get_thermal_meter_hdl, > - OID_RT_PRO_GET_THERMAL_METER},/25/ > - {sizeof(u32), oid_rt_get_power_mode_hdl, > - OID_RT_GET_POWER_MODE},/26/ > - {sizeof(struct EFUSE_ACCESS_STRUCT), > - oid_rt_pro_efuse_hdl, OID_RT_PRO_EFUSE},/27/ > - {EFUSE_MAP_MAX_SIZE, oid_rt_pro_efuse_map_hdl, > - OID_RT_PRO_EFUSE_MAP},/28/ > - {sizeof(u32), oid_rt_get_efuse_max_size_hdl, > - OID_RT_GET_EFUSE_MAX_SIZE},/29/ > - {sizeof(u32), oid_rt_get_efuse_current_size_hdl, > - OID_RT_GET_EFUSE_CURRENT_SIZE},/30/ > - {sizeof(u32), oid_rt_pro_set_single_carrier_tx_hdl, > - OID_RT_PRO_SET_SINGLE_CARRIER_TX},/31/ > - {sizeof(u32), oid_rt_pro_set_carrier_suppression_tx_hdl, > - OID_RT_PRO_SET_CARRIER_SUPPRESSION_TX},/32/ > - {sizeof(u32), oid_rt_pro_set_single_tone_tx_hdl, > - OID_RT_PRO_SET_SINGLE_TONE_TX},/33/ > - {sizeof(u32), oid_rt_pro_set_antenna_bb_hdl, > - OID_RT_PRO_SET_ANTENNA_BB},/34/ > -}; > - > -#else / RTL871X_MP_IOCTL_C / > -extern struct mp_ioctl_handler mp_ioctl_hdl[]; > -#endif / RTL871X_MP_IOCTL_C / > - > -#endif > - > diff --git a/drivers/staging/rtl8712/rtl871x_mp_phy_regdef.h b/drivers/staging/rtl8712/rtl871x_mp_phy_regdef.h > deleted file mode 100644 > index bb9f83d58225..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_mp_phy_regdef.h > +++ /dev/null > @@ -1,1034 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/ > - * Copyright(c) 2008, RealTEK Technology Inc. All Right Reserved. > - * > - * Module: __INC_HAL8192SPHYREG_H > - * > - * > - * Note: 1. Define PMAC/BB register map > - * 2. Define RF register map > - * 3. PMAC/BB register bit mask. > - * 4. RF reg bit mask. > - * 5. Other BB/RF relative definition. > - * > - * > - * Export: Constants, macro, functions(API), global variables(None). > - * > - * Abbrev: > - * > - * History: > - * Data Who Remark > - * 08/07/2007 MHC 1. Porting from 9x series PHYCFG.h. > - * 2. Reorganize code architecture. > - * 09/25/2008 MH 1. Add RL6052 register definition > - * > - *****************************************************************************/ > -#ifndef __RTL871X_MP_PHY_REGDEF_H > -#define __RTL871X_MP_PHY_REGDEF_H > - > -/--------------------------Define Parameters-------------------------------/ > - > -/============================================================ > - * 8192S Register offset definition > - *============================================================ > - * > - * > - * BB-PHY register PMAC 0x100 PHY 0x800 - 0xEFF > - * 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF > - * 2. 0x800/0x900/0xA00/0xC00/0xD00/0xE00 > - * 3. RF register 0x00-2E > - * 4. Bit Mask for BB/RF register > - * 5. Other definition for BB/RF R/W > - * > - * 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF > - * 1. Page1(0x100) > - / > -#define rPMAC_Reset 0x100 > -#define rPMAC_TxStart 0x104 > -#define rPMAC_TxLegacySIG 0x108 > -#define rPMAC_TxHTSIG1 0x10c > -#define rPMAC_TxHTSIG2 0x110 > -#define rPMAC_PHYDebug 0x114 > -#define rPMAC_TxPacketNum 0x118 > -#define rPMAC_TxIdle 0x11c > -#define rPMAC_TxMACHeader0 0x120 > -#define rPMAC_TxMACHeader1 0x124 > -#define rPMAC_TxMACHeader2 0x128 > -#define rPMAC_TxMACHeader3 0x12c > -#define rPMAC_TxMACHeader4 0x130 > -#define rPMAC_TxMACHeader5 0x134 > -#define rPMAC_TxDataType 0x138 > -#define rPMAC_TxRandomSeed 0x13c > -#define rPMAC_CCKPLCPPreamble 0x140 > -#define rPMAC_CCKPLCPHeader 0x144 > -#define rPMAC_CCKCRC16 0x148 > -#define rPMAC_OFDMRxCRC32OK 0x170 > -#define rPMAC_OFDMRxCRC32Er 0x174 > -#define rPMAC_OFDMRxParityEr 0x178 > -#define rPMAC_OFDMRxCRC8Er 0x17c > -#define rPMAC_CCKCRxRC16Er 0x180 > -#define rPMAC_CCKCRxRC32Er 0x184 > -#define rPMAC_CCKCRxRC32OK 0x188 > -#define rPMAC_TxStatus 0x18c > - > -/ > - * 2. Page2(0x200) > - * > - * The following two definition are only used for USB interface. > - *#define RF_BB_CMD_ADDR 0x02c0 // RF/BB read/write command address. > - *#define RF_BB_CMD_DATA 0x02c4 // RF/BB read/write command data. > - * > - * > - * 3. Page8(0x800) > - */ > -#define rFPGA0_RFMOD 0x800 /*RF mode & CCK TxSC RF > - * BW Setting?? > - / > -#define rFPGA0_TxInfo 0x804 / Status report?? / > -#define rFPGA0_PSDFunction 0x808 > -#define rFPGA0_TxGainStage 0x80c / Set TX PWR init gain? / > -#define rFPGA0_RFTiming1 0x810 / Useless now / > -#define rFPGA0_RFTiming2 0x814 > -#define rFPGA0_XA_HSSIParameter1 0x820 / RF 3 wire register / > -#define rFPGA0_XA_HSSIParameter2 0x824 > -#define rFPGA0_XB_HSSIParameter1 0x828 > -#define rFPGA0_XB_HSSIParameter2 0x82c > -#define rFPGA0_XC_HSSIParameter1 0x830 > -#define rFPGA0_XC_HSSIParameter2 0x834 > -#define rFPGA0_XD_HSSIParameter1 0x838 > -#define rFPGA0_XD_HSSIParameter2 0x83c > -#define rFPGA0_XA_LSSIParameter 0x840 > -#define rFPGA0_XB_LSSIParameter 0x844 > -#define rFPGA0_XC_LSSIParameter 0x848 > -#define rFPGA0_XD_LSSIParameter 0x84c > - > -#define rFPGA0_RFWakeUpParameter 0x850 / Useless now / > -#define rFPGA0_RFSleepUpParameter 0x854 > - > -#define rFPGA0_XAB_SwitchControl 0x858 / RF Channel switch / > -#define rFPGA0_XCD_SwitchControl 0x85c > - > -#define rFPGA0_XA_RFInterfaceOE 0x860 / RF Channel switch / > -#define rFPGA0_XB_RFInterfaceOE 0x864 > -#define rFPGA0_XC_RFInterfaceOE 0x868 > -#define rFPGA0_XD_RFInterfaceOE 0x86c > -#define rFPGA0_XAB_RFInterfaceSW 0x870 / RF Interface Software Ctrl / > -#define rFPGA0_XCD_RFInterfaceSW 0x874 > - > -#define rFPGA0_XAB_RFParameter 0x878 / RF Parameter / > -#define rFPGA0_XCD_RFParameter 0x87c > - > -#define rFPGA0_AnalogParameter1 0x880 / Crystal cap setting > - * RF-R/W protection > - * for parameter4?? > - / > -#define rFPGA0_AnalogParameter2 0x884 > -#define rFPGA0_AnalogParameter3 0x888 / Useless now / > -#define rFPGA0_AnalogParameter4 0x88c > - > -#define rFPGA0_XA_LSSIReadBack 0x8a0 / Transceiver LSSI Readback / > -#define rFPGA0_XB_LSSIReadBack 0x8a4 > -#define rFPGA0_XC_LSSIReadBack 0x8a8 > -#define rFPGA0_XD_LSSIReadBack 0x8ac > - > -#define rFPGA0_PSDReport 0x8b4 / Useless now / > -#define rFPGA0_XAB_RFInterfaceRB 0x8e0 / Useless now / > -#define rFPGA0_XCD_RFInterfaceRB 0x8e4 / Useless now / > - > -/ > - * 4. Page9(0x900) > - / > -#define rFPGA1_RFMOD 0x900 / RF mode & OFDM TxSC / > - > -#define rFPGA1_TxBlock 0x904 / Useless now / > -#define rFPGA1_DebugSelect 0x908 / Useless now / > -#define rFPGA1_TxInfo 0x90c / Useless now / > - > -/ > - * 5. PageA(0xA00) > - * > - * Set Control channel to upper or lower. > - * These settings are required only for 40MHz > - / > -#define rCCK0_System 0xa00 > - > -#define rCCK0_AFESetting 0xa04 / Disable init gain now / > -#define rCCK0_CCA 0xa08 / Disable init gain now / > - > -#define rCCK0_RxAGC1 0xa0c > -/ AGC default value, saturation level > - * Antenna Diversity, RX AGC, LNA Threshold, RX LNA Threshold useless now. > - * Not the same as 90 series > - / > -#define rCCK0_RxAGC2 0xa10 / AGC & DAGC / > - > -#define rCCK0_RxHP 0xa14 > - > -#define rCCK0_DSPParameter1 0xa18 / Timing recovery & Channel > - * estimation threshold > - / > -#define rCCK0_DSPParameter2 0xa1c / SQ threshold / > - > -#define rCCK0_TxFilter1 0xa20 > -#define rCCK0_TxFilter2 0xa24 > -#define rCCK0_DebugPort 0xa28 / debug port and Tx filter3 / > -#define rCCK0_FalseAlarmReport 0xa2c / 0xa2d useless now 0xa30-a4f > - * channel report > - / > -#define rCCK0_TRSSIReport 0xa50 > -#define rCCK0_RxReport 0xa54 / 0xa57 / > -#define rCCK0_FACounterLower 0xa5c / 0xa5b / > -#define rCCK0_FACounterUpper 0xa58 / 0xa5c / > - > -/ > - * 6. PageC(0xC00) > - */ > -#define rOFDM0_LSTF 0xc00 > -#define rOFDM0_TRxPathEnable 0xc04 > -#define rOFDM0_TRMuxPar 0xc08 > -#define rOFDM0_TRSWIsolation 0xc0c > - > -/*RxIQ DC offset, Rx digital filter, DC notch filter / > -#define rOFDM0_XARxAFE 0xc10 > -#define rOFDM0_XARxIQImbalance 0xc14 / RxIQ imbalance matrix / > -#define rOFDM0_XBRxAFE 0xc18 > -#define rOFDM0_XBRxIQImbalance 0xc1c > -#define rOFDM0_XCRxAFE 0xc20 > -#define rOFDM0_XCRxIQImbalance 0xc24 > -#define rOFDM0_XDRxAFE 0xc28 > -#define rOFDM0_XDRxIQImbalance 0xc2c > - > -#define rOFDM0_RxDetector1 0xc30 / PD,BW & SBD DM tune > - * init gain > - / > -#define rOFDM0_RxDetector2 0xc34 / SBD & Fame Sync. / > -#define rOFDM0_RxDetector3 0xc38 / Frame Sync. / > -#define rOFDM0_RxDetector4 0xc3c / PD, SBD, Frame Sync & > - * Short-GI > - / > - > -#define rOFDM0_RxDSP 0xc40 / Rx Sync Path / > -#define rOFDM0_CFOandDAGC 0xc44 / CFO & DAGC / > -#define rOFDM0_CCADropThreshold 0xc48 / CCA Drop threshold / > -#define rOFDM0_ECCAThreshold 0xc4c / energy CCA / > - > -#define rOFDM0_XAAGCCore1 0xc50 / DIG / > -#define rOFDM0_XAAGCCore2 0xc54 > -#define rOFDM0_XBAGCCore1 0xc58 > -#define rOFDM0_XBAGCCore2 0xc5c > -#define rOFDM0_XCAGCCore1 0xc60 > -#define rOFDM0_XCAGCCore2 0xc64 > -#define rOFDM0_XDAGCCore1 0xc68 > -#define rOFDM0_XDAGCCore2 0xc6c > -#define rOFDM0_AGCParameter1 0xc70 > -#define rOFDM0_AGCParameter2 0xc74 > -#define rOFDM0_AGCRSSITable 0xc78 > -#define rOFDM0_HTSTFAGC 0xc7c > - > -#define rOFDM0_XATxIQImbalance 0xc80 / TX PWR TRACK and DIG / > -#define rOFDM0_XATxAFE 0xc84 > -#define rOFDM0_XBTxIQImbalance 0xc88 > -#define rOFDM0_XBTxAFE 0xc8c > -#define rOFDM0_XCTxIQImbalance 0xc90 > -#define rOFDM0_XCTxAFE 0xc94 > -#define rOFDM0_XDTxIQImbalance 0xc98 > -#define rOFDM0_XDTxAFE 0xc9c > - > -#define rOFDM0_RxHPParameter 0xce0 > -#define rOFDM0_TxPseudoNoiseWgt 0xce4 > -#define rOFDM0_FrameSync 0xcf0 > -#define rOFDM0_DFSReport 0xcf4 > -#define rOFDM0_TxCoeff1 0xca4 > -#define rOFDM0_TxCoeff2 0xca8 > -#define rOFDM0_TxCoeff3 0xcac > -#define rOFDM0_TxCoeff4 0xcb0 > -#define rOFDM0_TxCoeff5 0xcb4 > -#define rOFDM0_TxCoeff6 0xcb8 > - > -/ > - * 7. PageD(0xD00) > - / > -#define rOFDM1_LSTF 0xd00 > -#define rOFDM1_TRxPathEnable 0xd04 > - > -#define rOFDM1_CFO 0xd08 / No setting now / > -#define rOFDM1_CSI1 0xd10 > -#define rOFDM1_SBD 0xd14 > -#define rOFDM1_CSI2 0xd18 > -#define rOFDM1_CFOTracking 0xd2c > -#define rOFDM1_TRxMesaure1 0xd34 > -#define rOFDM1_IntfDet 0xd3c > -#define rOFDM1_PseudoNoiseStateAB 0xd50 > -#define rOFDM1_PseudoNoiseStateCD 0xd54 > -#define rOFDM1_RxPseudoNoiseWgt 0xd58 > - > -#define rOFDM_PHYCounter1 0xda0 / cca, parity fail / > -#define rOFDM_PHYCounter2 0xda4 / rate illegal, crc8 fail / > -#define rOFDM_PHYCounter3 0xda8 / MCS not support / > -#define rOFDM_ShortCFOAB 0xdac / No setting now / > -#define rOFDM_ShortCFOCD 0xdb0 > -#define rOFDM_LongCFOAB 0xdb4 > -#define rOFDM_LongCFOCD 0xdb8 > -#define rOFDM_TailCFOAB 0xdbc > -#define rOFDM_TailCFOCD 0xdc0 > -#define rOFDM_PWMeasure1 0xdc4 > -#define rOFDM_PWMeasure2 0xdc8 > -#define rOFDM_BWReport 0xdcc > -#define rOFDM_AGCReport 0xdd0 > -#define rOFDM_RxSNR 0xdd4 > -#define rOFDM_RxEVMCSI 0xdd8 > -#define rOFDM_SIGReport 0xddc > - > -/ > - * 8. PageE(0xE00) > - / > -#define rTxAGC_Rate18_06 0xe00 > -#define rTxAGC_Rate54_24 0xe04 > -#define rTxAGC_CCK_Mcs32 0xe08 > -#define rTxAGC_Mcs03_Mcs00 0xe10 > -#define rTxAGC_Mcs07_Mcs04 0xe14 > -#define rTxAGC_Mcs11_Mcs08 0xe18 > -#define rTxAGC_Mcs15_Mcs12 0xe1c > - > -/ Analog- control in RX_WAIT_CCA : REG: EE0 > - * [Analog- Power & Control Register] > - / > -#define rRx_Wait_CCCA 0xe70 > -#define rAnapar_Ctrl_BB 0xee0 > - > -/ > - * 7. RF Register 0x00-0x2E (RF 8256) > - * RF-0222D 0x00-3F > - * > - * Zebra1 > - / > -#define rZebra1_HSSIEnable 0x0 / Useless now / > -#define rZebra1_TRxEnable1 0x1 > -#define rZebra1_TRxEnable2 0x2 > -#define rZebra1_AGC 0x4 > -#define rZebra1_ChargePump 0x5 > -#define rZebra1_Channel 0x7 / RF channel switch / > -#define rZebra1_TxGain 0x8 / Useless now / > -#define rZebra1_TxLPF 0x9 > -#define rZebra1_RxLPF 0xb > -#define rZebra1_RxHPFCorner 0xc > - > -/ Zebra4 / > -#define rGlobalCtrl 0 / Useless now / > -#define rRTL8256_TxLPF 19 > -#define rRTL8256_RxLPF 11 > - > -/ RTL8258 / > -#define rRTL8258_TxLPF 0x11 / Useless now / > -#define rRTL8258_RxLPF 0x13 > -#define rRTL8258_RSSILPF 0xa > - > -/ RL6052 Register definition / > -#define RF_AC 0x00 > -#define RF_IQADJ_G1 0x01 > -#define RF_IQADJ_G2 0x02 > -#define RF_POW_TRSW 0x05 > - > -#define RF_GAIN_RX 0x06 > -#define RF_GAIN_TX 0x07 > - > -#define RF_TXM_IDAC 0x08 > -#define RF_BS_IQGEN 0x0F > - > -#define RF_MODE1 0x10 > -#define RF_MODE2 0x11 > - > -#define RF_RX_AGC_HP 0x12 > -#define RF_TX_AGC 0x13 > -#define RF_BIAS 0x14 > -#define RF_IPA 0x15 > -#define RF_POW_ABILITY 0x17 > -#define RF_MODE_AG 0x18 > -#define rRfChannel 0x18 / RF channel and BW switch / > -#define RF_CHNLBW 0x18 / RF channel and BW switch / > -#define RF_TOP 0x19 > -#define RF_RX_G1 0x1A > -#define RF_RX_G2 0x1B > -#define RF_RX_BB2 0x1C > -#define RF_RX_BB1 0x1D > - > -#define RF_RCK1 0x1E > -#define RF_RCK2 0x1F > - > -#define RF_TX_G1 0x20 > -#define RF_TX_G2 0x21 > -#define RF_TX_G3 0x22 > - > -#define RF_TX_BB1 0x23 > -#define RF_T_METER 0x24 > - > -#define RF_SYN_G1 0x25 / RF TX Power control / > -#define RF_SYN_G2 0x26 / RF TX Power control / > -#define RF_SYN_G3 0x27 / RF TX Power control / > -#define RF_SYN_G4 0x28 / RF TX Power control / > -#define RF_SYN_G5 0x29 / RF TX Power control / > -#define RF_SYN_G6 0x2A / RF TX Power control / > -#define RF_SYN_G7 0x2B / RF TX Power control / > -#define RF_SYN_G8 0x2C / RF TX Power control / > - > -#define RF_RCK_OS 0x30 / RF TX PA control / > - > -#define RF_TXPA_G1 0x31 / RF TX PA control / > -#define RF_TXPA_G2 0x32 / RF TX PA control / > -#define RF_TXPA_G3 0x33 / RF TX PA control / > - > -/ > - * Bit Mask > - * > - * 1. Page1(0x100) > - / > -#define bBBResetB 0x100 / Useless now? */ > -#define bGlobalResetB 0x200 > -#define bOFDMTxStart 0x4 > -#define bCCKTxStart 0x8 > -#define bCRC32Debug 0x100 > -#define bPMACLoopback 0x10 > -#define bTxLSIG 0xffffff > -#define bOFDMTxRate 0xf > -#define bOFDMTxReserved 0x10 > -#define bOFDMTxLength 0x1ffe0 > -#define bOFDMTxParity 0x20000 > -#define bTxHTSIG1 0xffffff > -#define bTxHTMCSRate 0x7f > -#define bTxHTBW 0x80 > -#define bTxHTLength 0xffff00 > -#define bTxHTSIG2 0xffffff > -#define bTxHTSmoothing 0x1 > -#define bTxHTSounding 0x2 > -#define bTxHTReserved 0x4 > -#define bTxHTAggreation 0x8 > -#define bTxHTSTBC 0x30 > -#define bTxHTAdvanceCoding 0x40 > -#define bTxHTShortGI 0x80 > -#define bTxHTNumberHT_LTF 0x300 > -#define bTxHTCRC8 0x3fc00 > -#define bCounterReset 0x10000 > -#define bNumOfOFDMTx 0xffff > -#define bNumOfCCKTx 0xffff0000 > -#define bTxIdleInterval 0xffff > -#define bOFDMService 0xffff0000 > -#define bTxMACHeader 0xffffffff > -#define bTxDataInit 0xff > -#define bTxHTMode 0x100 > -#define bTxDataType 0x30000 > -#define bTxRandomSeed 0xffffffff > -#define bCCKTxPreamble 0x1 > -#define bCCKTxSFD 0xffff0000 > -#define bCCKTxSIG 0xff > -#define bCCKTxService 0xff00 > -#define bCCKLengthExt 0x8000 > -#define bCCKTxLength 0xffff0000 > -#define bCCKTxCRC16 0xffff > -#define bCCKTxStatus 0x1 > -#define bOFDMTxStatus 0x2 > -#define IS_BB_REG_OFFSET_92S(_Offset) ((_Offset >= 0x800) && \ > > - (_Offset <= 0xfff)) > - > -/* 2. Page8(0x800) / > -#define bRFMOD 0x1 / Reg 0x800 rFPGA0_RFMOD / > -#define bJapanMode 0x2 > -#define bCCKTxSC 0x30 > -#define bCCKEn 0x1000000 > -#define bOFDMEn 0x2000000 > - > -#define bOFDMRxADCPhase 0x10000 / Useless now / > -#define bOFDMTxDACPhase 0x40000 > -#define bXATxAGC 0x3f > -#define bXBTxAGC 0xf00 / Reg 80c rFPGA0_TxGainStage / > -#define bXCTxAGC 0xf000 > -#define bXDTxAGC 0xf0000 > - > -#define bPAStart 0xf0000000 / Useless now / > -#define bTRStart 0x00f00000 > -#define bRFStart 0x0000f000 > -#define bBBStart 0x000000f0 > -#define bBBCCKStart 0x0000000f > -#define bPAEnd 0xf / Reg0x814 / > -#define bTREnd 0x0f000000 > -#define bRFEnd 0x000f0000 > -#define bCCAMask 0x000000f0 / T2R / > -#define bR2RCCAMask 0x00000f00 > -#define bHSSI_R2TDelay 0xf8000000 > -#define bHSSI_T2RDelay 0xf80000 > -#define bContTxHSSI 0x400 / change gain at continue Tx / > -#define bIGFromCCK 0x200 > -#define bAGCAddress 0x3f > -#define bRxHPTx 0x7000 > -#define bRxHPT2R 0x38000 > -#define bRxHPCCKIni 0xc0000 > -#define bAGCTxCode 0xc00000 > -#define bAGCRxCode 0x300000 > -#define b3WireDataLength 0x800 / Reg 0x820~84f rFPGA0_XA_HSSIParm1 / > -#define b3WireAddressLength 0x400 > -#define b3WireRFPowerDown 0x1 / Useless now / > -#define b5GPAPEPolarity 0x40000000 > -#define b2GPAPEPolarity 0x80000000 > -#define bRFSW_TxDefaultAnt 0x3 > -#define bRFSW_TxOptionAnt 0x30 > -#define bRFSW_RxDefaultAnt 0x300 > -#define bRFSW_RxOptionAnt 0x3000 > -#define bRFSI_3WireData 0x1 > -#define bRFSI_3WireClock 0x2 > -#define bRFSI_3WireLoad 0x4 > -#define bRFSI_3WireRW 0x8 > -#define bRFSI_3Wire 0xf > -#define bRFSI_RFENV 0x10 / Reg 0x870 rFPGA0_XAB_RFInterfaceSW / > -#define bRFSI_TRSW 0x20 / Useless now / > -#define bRFSI_TRSWB 0x40 > -#define bRFSI_ANTSW 0x100 > -#define bRFSI_ANTSWB 0x200 > -#define bRFSI_PAPE 0x400 > -#define bRFSI_PAPE5G 0x800 > -#define bBandSelect 0x1 > -#define bHTSIG2_GI 0x80 > -#define bHTSIG2_Smoothing 0x01 > -#define bHTSIG2_Sounding 0x02 > -#define bHTSIG2_Aggreaton 0x08 > -#define bHTSIG2_STBC 0x30 > -#define bHTSIG2_AdvCoding 0x40 > -#define bHTSIG2_NumOfHTLTF 0x300 > -#define bHTSIG2_CRC8 0x3fc > -#define bHTSIG1_MCS 0x7f > -#define bHTSIG1_BandWidth 0x80 > -#define bHTSIG1_HTLength 0xffff > -#define bLSIG_Rate 0xf > -#define bLSIG_Reserved 0x10 > -#define bLSIG_Length 0x1fffe > -#define bLSIG_Parity 0x20 > -#define bCCKRxPhase 0x4 > -#define bLSSIReadAddress 0x7f800000 / T65 RF / > -#define bLSSIReadEdge 0x80000000 / LSSI "Read" edge signal / > -#define bLSSIReadBackData 0xfffff / T65 RF / > -#define bLSSIReadOKFlag 0x1000 / Useless now / > -#define bCCKSampleRate 0x8 /0: 44MHz, 1:88MHz/ > -#define bRegulator0Standby 0x1 > -#define bRegulatorPLLStandby 0x2 > -#define bRegulator1Standby 0x4 > -#define bPLLPowerUp 0x8 > -#define bDPLLPowerUp 0x10 > -#define bDA10PowerUp 0x20 > -#define bAD7PowerUp 0x200 > -#define bDA6PowerUp 0x2000 > -#define bXtalPowerUp 0x4000 > -#define b40MDClkPowerUP 0x8000 > -#define bDA6DebugMode 0x20000 > -#define bDA6Swing 0x380000 > - > -/ Reg 0x880 rFPGA0_AnalogParameter1 20/40 CCK support switch 40/80 BB MHZ / > -#define bADClkPhase 0x4000000 > - > -#define b80MClkDelay 0x18000000 / Useless / > -#define bAFEWatchDogEnable 0x20000000 > - > -/ Reg 0x884 rFPGA0_AnalogParameter2 Crystal cap / > -#define bXtalCap01 0xc0000000 > -#define bXtalCap23 0x3 > -#define bXtalCap92x 0x0f000000 > -#define bXtalCap 0x0f000000 > -#define bIntDifClkEnable 0x400 / Useless / > -#define bExtSigClkEnable 0x800 > -#define bBandgapMbiasPowerUp 0x10000 > -#define bAD11SHGain 0xc0000 > -#define bAD11InputRange 0x700000 > -#define bAD11OPCurrent 0x3800000 > -#define bIPathLoopback 0x4000000 > -#define bQPathLoopback 0x8000000 > -#define bAFELoopback 0x10000000 > -#define bDA10Swing 0x7e0 > -#define bDA10Reverse 0x800 > -#define bDAClkSource 0x1000 > -#define bAD7InputRange 0x6000 > -#define bAD7Gain 0x38000 > -#define bAD7OutputCMMode 0x40000 > -#define bAD7InputCMMode 0x380000 > -#define bAD7Current 0xc00000 > -#define bRegulatorAdjust 0x7000000 > -#define bAD11PowerUpAtTx 0x1 > -#define bDA10PSAtTx 0x10 > -#define bAD11PowerUpAtRx 0x100 > -#define bDA10PSAtRx 0x1000 > -#define bCCKRxAGCFormat 0x200 > -#define bPSDFFTSamplepPoint 0xc000 > -#define bPSDAverageNum 0x3000 > -#define bIQPathControl 0xc00 > -#define bPSDFreq 0x3ff > -#define bPSDAntennaPath 0x30 > -#define bPSDIQSwitch 0x40 > -#define bPSDRxTrigger 0x400000 > -#define bPSDTxTrigger 0x80000000 > -#define bPSDSineToneScale 0x7f000000 > -#define bPSDReport 0xffff > - > -/ 3. Page9(0x900) / > -#define bOFDMTxSC 0x30000000 / Useless / > -#define bCCKTxOn 0x1 > -#define bOFDMTxOn 0x2 > -#define bDebugPage 0xfff / reset debug page and HWord, LWord / > -#define bDebugItem 0xff / reset debug page and LWord / > -#define bAntL 0x10 > -#define bAntNonHT 0x100 > -#define bAntHT1 0x1000 > -#define bAntHT2 0x10000 > -#define bAntHT1S1 0x100000 > -#define bAntNonHTS1 0x1000000 > - > -/ 4. PageA(0xA00) / > -#define bCCKBBMode 0x3 / Useless / > -#define bCCKTxPowerSaving 0x80 > -#define bCCKRxPowerSaving 0x40 > - > -#define bCCKSideBand 0x10 / Reg 0xa00 rCCK0_System 20/40 switch*/ > -#define bCCKScramble 0x8 /* Useless / > -#define bCCKAntDiversity 0x8000 > -#define bCCKCarrierRecovery 0x4000 > -#define bCCKTxRate 0x3000 > -#define bCCKDCCancel 0x0800 > -#define bCCKISICancel 0x0400 > -#define bCCKMatchFilter 0x0200 > -#define bCCKEqualizer 0x0100 > -#define bCCKPreambleDetect 0x800000 > -#define bCCKFastFalseCCA 0x400000 > -#define bCCKChEstStart 0x300000 > -#define bCCKCCACount 0x080000 > -#define bCCKcs_lim 0x070000 > -#define bCCKBistMode 0x80000000 > -#define bCCKCCAMask 0x40000000 > -#define bCCKTxDACPhase 0x4 > -#define bCCKRxADCPhase 0x20000000 / r_rx_clk / > -#define bCCKr_cp_mode0 0x0100 > -#define bCCKTxDCOffset 0xf0 > -#define bCCKRxDCOffset 0xf > -#define bCCKCCAMode 0xc000 > -#define bCCKFalseCS_lim 0x3f00 > -#define bCCKCS_ratio 0xc00000 > -#define bCCKCorgBit_sel 0x300000 > -#define bCCKPD_lim 0x0f0000 > -#define bCCKNewCCA 0x80000000 > -#define bCCKRxHPofIG 0x8000 > -#define bCCKRxIG 0x7f00 > -#define bCCKLNAPolarity 0x800000 > -#define bCCKRx1stGain 0x7f0000 > -#define bCCKRFExtend 0x20000000 / CCK Rx initial gain polarity / > -#define bCCKRxAGCSatLevel 0x1f000000 > -#define bCCKRxAGCSatCount 0xe0 > -#define bCCKRxRFSettle 0x1f / AGCsamp_dly / > -#define bCCKFixedRxAGC 0x8000 > -#define bCCKAntennaPolarity 0x2000 > -#define bCCKTxFilterType 0x0c00 > -#define bCCKRxAGCReportType 0x0300 > -#define bCCKRxDAGCEn 0x80000000 > -#define bCCKRxDAGCPeriod 0x20000000 > -#define bCCKRxDAGCSatLevel 0x1f000000 > -#define bCCKTimingRecovery 0x800000 > -#define bCCKTxC0 0x3f0000 > -#define bCCKTxC1 0x3f000000 > -#define bCCKTxC2 0x3f > -#define bCCKTxC3 0x3f00 > -#define bCCKTxC4 0x3f0000 > -#define bCCKTxC5 0x3f000000 > -#define bCCKTxC6 0x3f > -#define bCCKTxC7 0x3f00 > -#define bCCKDebugPort 0xff0000 > -#define bCCKDACDebug 0x0f000000 > -#define bCCKFalseAlarmEnable 0x8000 > -#define bCCKFalseAlarmRead 0x4000 > -#define bCCKTRSSI 0x7f > -#define bCCKRxAGCReport 0xfe > -#define bCCKRxReport_AntSel 0x80000000 > -#define bCCKRxReport_MFOff 0x40000000 > -#define bCCKRxRxReport_SQLoss 0x20000000 > -#define bCCKRxReport_Pktloss 0x10000000 > -#define bCCKRxReport_Lockedbit 0x08000000 > -#define bCCKRxReport_RateError 0x04000000 > -#define bCCKRxReport_RxRate 0x03000000 > -#define bCCKRxFACounterLower 0xff > -#define bCCKRxFACounterUpper 0xff000000 > -#define bCCKRxHPAGCStart 0xe000 > -#define bCCKRxHPAGCFinal 0x1c00 > -#define bCCKRxFalseAlarmEnable 0x8000 > -#define bCCKFACounterFreeze 0x4000 > -#define bCCKTxPathSel 0x10000000 > -#define bCCKDefaultRxPath 0xc000000 > -#define bCCKOptionRxPath 0x3000000 > - > -/ 5. PageC(0xC00) / > -#define bNumOfSTF 0x3 / Useless / > -#define bShift_L 0xc0 > -#define bGI_TH 0xc > -#define bRxPathA 0x1 > -#define bRxPathB 0x2 > -#define bRxPathC 0x4 > -#define bRxPathD 0x8 > -#define bTxPathA 0x1 > -#define bTxPathB 0x2 > -#define bTxPathC 0x4 > -#define bTxPathD 0x8 > -#define bTRSSIFreq 0x200 > -#define bADCBackoff 0x3000 > -#define bDFIRBackoff 0xc000 > -#define bTRSSILatchPhase 0x10000 > -#define bRxIDCOffset 0xff > -#define bRxQDCOffset 0xff00 > -#define bRxDFIRMode 0x1800000 > -#define bRxDCNFType 0xe000000 > -#define bRXIQImb_A 0x3ff > -#define bRXIQImb_B 0xfc00 > -#define bRXIQImb_C 0x3f0000 > -#define bRXIQImb_D 0xffc00000 > -#define bDC_dc_Notch 0x60000 > -#define bRxNBINotch 0x1f000000 > -#define bPD_TH 0xf > -#define bPD_TH_Opt2 0xc000 > -#define bPWED_TH 0x700 > -#define bIfMF_Win_L 0x800 > -#define bPD_Option 0x1000 > -#define bMF_Win_L 0xe000 > -#define bBW_Search_L 0x30000 > -#define bwin_enh_L 0xc0000 > -#define bBW_TH 0x700000 > -#define bED_TH2 0x3800000 > -#define bBW_option 0x4000000 > -#define bRatio_TH 0x18000000 > -#define bWindow_L 0xe0000000 > -#define bSBD_Option 0x1 > -#define bFrame_TH 0x1c > -#define bFS_Option 0x60 > -#define bDC_Slope_check 0x80 > -#define bFGuard_Counter_DC_L 0xe00 > -#define bFrame_Weight_Short 0x7000 > -#define bSub_Tune 0xe00000 > -#define bFrame_DC_Length 0xe000000 > -#define bSBD_start_offset 0x30000000 > -#define bFrame_TH_2 0x7 > -#define bFrame_GI2_TH 0x38 > -#define bGI2_Sync_en 0x40 > -#define bSarch_Short_Early 0x300 > -#define bSarch_Short_Late 0xc00 > -#define bSarch_GI2_Late 0x70000 > -#define bCFOAntSum 0x1 > -#define bCFOAcc 0x2 > -#define bCFOStartOffset 0xc > -#define bCFOLookBack 0x70 > -#define bCFOSumWeight 0x80 > -#define bDAGCEnable 0x10000 > -#define bTXIQImb_A 0x3ff > -#define bTXIQImb_B 0xfc00 > -#define bTXIQImb_C 0x3f0000 > -#define bTXIQImb_D 0xffc00000 > -#define bTxIDCOffset 0xff > -#define bTxQDCOffset 0xff00 > -#define bTxDFIRMode 0x10000 > -#define bTxPesudoNoiseOn 0x4000000 > -#define bTxPesudoNoise_A 0xff > -#define bTxPesudoNoise_B 0xff00 > -#define bTxPesudoNoise_C 0xff0000 > -#define bTxPesudoNoise_D 0xff000000 > -#define bCCADropOption 0x20000 > -#define bCCADropThres 0xfff00000 > -#define bEDCCA_H 0xf > -#define bEDCCA_L 0xf0 > -#define bLambda_ED 0x300 > -#define bRxInitialGain 0x7f > -#define bRxAntDivEn 0x80 > -#define bRxAGCAddressForLNA 0x7f00 > -#define bRxHighPowerFlow 0x8000 > -#define bRxAGCFreezeThres 0xc0000 > -#define bRxFreezeStep_AGC1 0x300000 > -#define bRxFreezeStep_AGC2 0xc00000 > -#define bRxFreezeStep_AGC3 0x3000000 > -#define bRxFreezeStep_AGC0 0xc000000 > -#define bRxRssi_Cmp_En 0x10000000 > -#define bRxQuickAGCEn 0x20000000 > -#define bRxAGCFreezeThresMode 0x40000000 > -#define bRxOverFlowCheckType 0x80000000 > -#define bRxAGCShift 0x7f > -#define bTRSW_Tri_Only 0x80 > -#define bPowerThres 0x300 > -#define bRxAGCEn 0x1 > -#define bRxAGCTogetherEn 0x2 > -#define bRxAGCMin 0x4 > -#define bRxHP_Ini 0x7 > -#define bRxHP_TRLNA 0x70 > -#define bRxHP_RSSI 0x700 > -#define bRxHP_BBP1 0x7000 > -#define bRxHP_BBP2 0x70000 > -#define bRxHP_BBP3 0x700000 > -#define bRSSI_H 0x7f0000 / the threshold for high power / > -#define bRSSI_Gen 0x7f000000 / the threshold for ant divers / > -#define bRxSettle_TRSW 0x7 > -#define bRxSettle_LNA 0x38 > -#define bRxSettle_RSSI 0x1c0 > -#define bRxSettle_BBP 0xe00 > -#define bRxSettle_RxHP 0x7000 > -#define bRxSettle_AntSW_RSSI 0x38000 > -#define bRxSettle_AntSW 0xc0000 > -#define bRxProcessTime_DAGC 0x300000 > -#define bRxSettle_HSSI 0x400000 > -#define bRxProcessTime_BBPPW 0x800000 > -#define bRxAntennaPowerShift 0x3000000 > -#define bRSSITableSelect 0xc000000 > -#define bRxHP_Final 0x7000000 > -#define bRxHTSettle_BBP 0x7 > -#define bRxHTSettle_HSSI 0x8 > -#define bRxHTSettle_RxHP 0x70 > -#define bRxHTSettle_BBPPW 0x80 > -#define bRxHTSettle_Idle 0x300 > -#define bRxHTSettle_Reserved 0x1c00 > -#define bRxHTRxHPEn 0x8000 > -#define bRxHTAGCFreezeThres 0x30000 > -#define bRxHTAGCTogetherEn 0x40000 > -#define bRxHTAGCMin 0x80000 > -#define bRxHTAGCEn 0x100000 > -#define bRxHTDAGCEn 0x200000 > -#define bRxHTRxHP_BBP 0x1c00000 > -#define bRxHTRxHP_Final 0xe0000000 > -#define bRxPWRatioTH 0x3 > -#define bRxPWRatioEn 0x4 > -#define bRxMFHold 0x3800 > -#define bRxPD_Delay_TH1 0x38 > -#define bRxPD_Delay_TH2 0x1c0 > -#define bRxPD_DC_COUNT_MAX 0x600 > -#define bRxPD_Delay_TH 0x8000 > -#define bRxProcess_Delay 0xf0000 > -#define bRxSearchrange_GI2_Early 0x700000 > -#define bRxFrame_Guard_Counter_L 0x3800000 > -#define bRxSGI_Guard_L 0xc000000 > -#define bRxSGI_Search_L 0x30000000 > -#define bRxSGI_TH 0xc0000000 > -#define bDFSCnt0 0xff > -#define bDFSCnt1 0xff00 > -#define bDFSFlag 0xf0000 > -#define bMFWeightSum 0x300000 > -#define bMinIdxTH 0x7f000000 > -#define bDAFormat 0x40000 > -#define bTxChEmuEnable 0x01000000 > -#define bTRSWIsolation_A 0x7f > -#define bTRSWIsolation_B 0x7f00 > -#define bTRSWIsolation_C 0x7f0000 > -#define bTRSWIsolation_D 0x7f000000 > -#define bExtLNAGain 0x7c00 > - > -/ 6. PageE(0xE00) / > -#define bSTBCEn 0x4 / Useless / > -#define bAntennaMapping 0x10 > -#define bNss 0x20 > -#define bCFOAntSumD 0x200 > -#define bPHYCounterReset 0x8000000 > -#define bCFOReportGet 0x4000000 > -#define bOFDMContinueTx 0x10000000 > -#define bOFDMSingleCarrier 0x20000000 > -#define bOFDMSingleTone 0x40000000 > -#define bHTDetect 0x100 > -#define bCFOEn 0x10000 > -#define bCFOValue 0xfff00000 > -#define bSigTone_Re 0x3f > -#define bSigTone_Im 0x7f00 > -#define bCounter_CCA 0xffff > -#define bCounter_ParityFail 0xffff0000 > -#define bCounter_RateIllegal 0xffff > -#define bCounter_CRC8Fail 0xffff0000 > -#define bCounter_MCSNoSupport 0xffff > -#define bCounter_FastSync 0xffff > -#define bShortCFO 0xfff > -#define bShortCFOTLength 12 / total / > -#define bShortCFOFLength 11 / fraction / > -#define bLongCFO 0x7ff > -#define bLongCFOTLength 11 > -#define bLongCFOFLength 11 > -#define bTailCFO 0x1fff > -#define bTailCFOTLength 13 > -#define bTailCFOFLength 12 > -#define bmax_en_pwdB 0xffff > -#define bCC_power_dB 0xffff0000 > -#define bnoise_pwdB 0xffff > -#define bPowerMeasTLength 10 > -#define bPowerMeasFLength 3 > -#define bRx_HT_BW 0x1 > -#define bRxSC 0x6 > -#define bRx_HT 0x8 > -#define bNB_intf_det_on 0x1 > -#define bIntf_win_len_cfg 0x30 > -#define bNB_Intf_TH_cfg 0x1c0 > -#define bRFGain 0x3f > -#define bTableSel 0x40 > -#define bTRSW 0x80 > -#define bRxSNR_A 0xff > -#define bRxSNR_B 0xff00 > -#define bRxSNR_C 0xff0000 > -#define bRxSNR_D 0xff000000 > -#define bSNREVMTLength 8 > -#define bSNREVMFLength 1 > -#define bCSI1st 0xff > -#define bCSI2nd 0xff00 > -#define bRxEVM1st 0xff0000 > -#define bRxEVM2nd 0xff000000 > -#define bSIGEVM 0xff > -#define bPWDB 0xff00 > -#define bSGIEN 0x10000 > - > -#define bSFactorQAM1 0xf / Useless / > -#define bSFactorQAM2 0xf0 > -#define bSFactorQAM3 0xf00 > -#define bSFactorQAM4 0xf000 > -#define bSFactorQAM5 0xf0000 > -#define bSFactorQAM6 0xf0000 > -#define bSFactorQAM7 0xf00000 > -#define bSFactorQAM8 0xf000000 > -#define bSFactorQAM9 0xf0000000 > -#define bCSIScheme 0x100000 > - > -#define bNoiseLvlTopSet 0x3 / Useless / > -#define bChSmooth 0x4 > -#define bChSmoothCfg1 0x38 > -#define bChSmoothCfg2 0x1c0 > -#define bChSmoothCfg3 0xe00 > -#define bChSmoothCfg4 0x7000 > -#define bMRCMode 0x800000 > -#define bTHEVMCfg 0x7000000 > - > -#define bLoopFitType 0x1 / Useless / > -#define bUpdCFO 0x40 > -#define bUpdCFOOffData 0x80 > -#define bAdvUpdCFO 0x100 > -#define bAdvTimeCtrl 0x800 > -#define bUpdClko 0x1000 > -#define bFC 0x6000 > -#define bTrackingMode 0x8000 > -#define bPhCmpEnable 0x10000 > -#define bUpdClkoLTF 0x20000 > -#define bComChCFO 0x40000 > -#define bCSIEstiMode 0x80000 > -#define bAdvUpdEqz 0x100000 > -#define bUChCfg 0x7000000 > -#define bUpdEqz 0x8000000 > - > -#define bTxAGCRate18_06 0x7f7f7f7f / Useless / > -#define bTxAGCRate54_24 0x7f7f7f7f > -#define bTxAGCRateMCS32 0x7f > -#define bTxAGCRateCCK 0x7f00 > -#define bTxAGCRateMCS3_MCS0 0x7f7f7f7f > -#define bTxAGCRateMCS7_MCS4 0x7f7f7f7f > -#define bTxAGCRateMCS11_MCS8 0x7f7f7f7f > -#define bTxAGCRateMCS15_MCS12 0x7f7f7f7f > - > -/ Rx Pseduo noise / > -#define bRxPesudoNoiseOn 0x20000000 / Useless / > -#define bRxPesudoNoise_A 0xff > -#define bRxPesudoNoise_B 0xff00 > -#define bRxPesudoNoise_C 0xff0000 > -#define bRxPesudoNoise_D 0xff000000 > -#define bPesudoNoiseState_A 0xffff > -#define bPesudoNoiseState_B 0xffff0000 > -#define bPesudoNoiseState_C 0xffff > -#define bPesudoNoiseState_D 0xffff0000 > - > -/ 7. RF Register > - * Zebra1 > - / > -#define bZebra1_HSSIEnable 0x8 / Useless / > -#define bZebra1_TRxControl 0xc00 > -#define bZebra1_TRxGainSetting 0x07f > -#define bZebra1_RxCorner 0xc00 > -#define bZebra1_TxChargePump 0x38 > -#define bZebra1_RxChargePump 0x7 > -#define bZebra1_ChannelNum 0xf80 > -#define bZebra1_TxLPFBW 0x400 > -#define bZebra1_RxLPFBW 0x600 > - > -/Zebra4 / > -#define bRTL8256RegModeCtrl1 0x100 / Useless / > -#define bRTL8256RegModeCtrl0 0x40 > -#define bRTL8256_TxLPFBW 0x18 > -#define bRTL8256_RxLPFBW 0x600 > - > -/ RTL8258 / > -#define bRTL8258_TxLPFBW 0xc / Useless / > -#define bRTL8258_RxLPFBW 0xc00 > -#define bRTL8258_RSSILPFBW 0xc0 > - > -/ > - * Other Definition > - / > - > -/ byte endable for sb_write / > -#define bByte0 0x1 / Useless / > -#define bByte1 0x2 > -#define bByte2 0x4 > -#define bByte3 0x8 > -#define bWord0 0x3 > -#define bWord1 0xc > -#define bDWord 0xf > - > -/ for PutRegsetting & GetRegSetting BitMask / > -#define bMaskByte0 0xff / Reg 0xc50 rOFDM0_XAAGCCore~0xC6f / > -#define bMaskByte1 0xff00 > -#define bMaskByte2 0xff0000 > -#define bMaskByte3 0xff000000 > -#define bMaskHWord 0xffff0000 > -#define bMaskLWord 0x0000ffff > -#define bMaskDWord 0xffffffff > - > -/ for PutRFRegsetting & GetRFRegSetting BitMask / > -#define bRFRegOffsetMask 0xfffff > -#define bEnable 0x1 / Useless / > -#define bDisable 0x0 > - > -#define LeftAntenna 0x0 / Useless / > -#define RightAntenna 0x1 > - > -#define tCheckTxStatus 500 / 500ms Useless / > -#define tUpdateRxCounter 100 / 100ms / > - > -#define rateCCK 0 / Useless / > -#define rateOFDM 1 > -#define rateHT 2 > - > -/ define Register-End / > -#define bPMAC_End 0x1ff / Useless / > -#define bFPGAPHY0_End 0x8ff > -#define bFPGAPHY1_End 0x9ff > -#define bCCKPHY0_End 0xaff > -#define bOFDMPHY0_End 0xcff > -#define bOFDMPHY1_End 0xdff > - > -#define bPMACControl 0x0 / Useless / > -#define bWMACControl 0x1 > -#define bWNICControl 0x2 > - > -#define ANTENNA_A 0x1 / Useless / > -#define ANTENNA_B 0x2 > -#define ANTENNA_AB 0x3 / ANTENNA_A |ANTENNA_B / > - > -#define ANTENNA_C 0x4 > -#define ANTENNA_D 0x8 > - > -/ accept all physical address / > -#define RCR_AAP BIT(0) > -#define RCR_APM BIT(1) / accept physical match / > -#define RCR_AM BIT(2) / accept multicast / > -#define RCR_AB BIT(3) / accept broadcast / > -#define RCR_ACRC32 BIT(5) / accept error packet / > -#define RCR_9356SEL BIT(6) > -#define RCR_AICV BIT(12) / Accept ICV error packet / > -#define RCR_RXFTH0 (BIT(13)|BIT(14)|BIT(15)) / Rx FIFO threshold / > -#define RCR_ADF BIT(18) / Accept Data(frame type) frame / > -#define RCR_ACF BIT(19) / Accept control frame / > -#define RCR_AMF BIT(20) / Accept management frame / > -#define RCR_ADD3 BIT(21) > -#define RCR_APWRMGT BIT(22) / Accept power management packet / > -#define RCR_CBSSID BIT(23) / Accept BSSID match packet / > -#define RCR_ENMARP BIT(28) / enable mac auto reset phy / > -#define RCR_EnCS1 BIT(29) / enable carrier sense method 1 / > -#define RCR_EnCS2 BIT(30) / enable carrier sense method 2 / > -/ Rx Early mode is performed for packet size greater than 1536 / > -#define RCR_OnlyErlPkt BIT(31) > - > -/--------------------------Define Parameters-------------------------------/ > - > -#endif /__INC_HAL8192SPHYREG_H / > - > diff --git a/drivers/staging/rtl8712/rtl871x_pwrctrl.c b/drivers/staging/rtl8712/rtl871x_pwrctrl.c > deleted file mode 100644 > index b22129f5d4f9..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_pwrctrl.c > +++ /dev/null > @@ -1,234 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/***************************************************************************** > - * rtl871x_pwrctrl.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RTL871X_PWRCTRL_C > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "osdep_intf.h" > - > -#define RTL8712_SDIO_LOCAL_BASE 0X10100000 > -#define SDIO_HCPWM (RTL8712_SDIO_LOCAL_BASE + 0x0081) > - > -void r8712_set_rpwm(struct _adapter *padapter, u8 val8) > -{ > - u8 rpwm; > - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; > > - > - if (pwrpriv->rpwm == val8) { > > - if (pwrpriv->rpwm_retry == 0) > > - return; > - } > - if (padapter->driver_stopped || padapter->surprise_removed) > > - return; > - rpwm = val8 | pwrpriv->tog; > > - switch (val8) { > - case PS_STATE_S1: > - pwrpriv->cpwm = val8; > > - break; > - case PS_STATE_S2:/* only for USB normal powersave mode use, > - * temp mark some code. > - */ > - case PS_STATE_S3: > - case PS_STATE_S4: > - pwrpriv->cpwm = val8; > > - break; > - default: > - break; > - } > - pwrpriv->rpwm_retry = 0; > > - pwrpriv->rpwm = val8; > > - r8712_write8(padapter, 0x1025FE58, rpwm); > - pwrpriv->tog += 0x80; > > -} > - > -void r8712_set_ps_mode(struct _adapter *padapter, uint ps_mode, uint smart_ps) > -{ > - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; > > - > - if (ps_mode > PM_Card_Disable) > > - return; > - /* if driver is in active state, we dont need set smart_ps.*/ > - if (ps_mode == PS_MODE_ACTIVE) > - smart_ps = 0; > - if ((pwrpriv->pwr_mode != ps_mode) || (pwrpriv->smart_ps != smart_ps)) { > > - if (pwrpriv->pwr_mode == PS_MODE_ACTIVE) > > - pwrpriv->bSleep = true; > > - else > - pwrpriv->bSleep = false; > > - pwrpriv->pwr_mode = ps_mode; > > - pwrpriv->smart_ps = smart_ps; > > - schedule_work(&pwrpriv->SetPSModeWorkItem); > > - } > -} > - > -/* > - * Caller:ISR handler... > - * > - * This will be called when CPWM interrupt is up. > - * > - * using to update cpwn of drv; and drv will make a decision to up or > - * down pwr level > - */ > -void r8712_cpwm_int_hdl(struct _adapter *padapter, > - struct reportpwrstate_parm *preportpwrstate) > -{ > - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; > > - struct cmd_priv *pcmdpriv = &padapter->cmdpriv; > > - > - if (pwrpriv->cpwm_tog == ((preportpwrstate->state) & 0x80)) > > - return; > - del_timer(&padapter->pwrctrlpriv.rpwm_check_timer); > > - mutex_lock(&pwrpriv->mutex_lock); > > - pwrpriv->cpwm = (preportpwrstate->state) & 0xf; > > - if (pwrpriv->cpwm >= PS_STATE_S2) { > > - if (pwrpriv->alives & CMD_ALIVE) > > - complete(&pcmdpriv->cmd_queue_comp); > > - } > - pwrpriv->cpwm_tog = (preportpwrstate->state) & 0x80; > > - mutex_unlock(&pwrpriv->mutex_lock); > > -} > - > -static inline void register_task_alive(struct pwrctrl_priv *pwrctrl, uint tag) > -{ > - pwrctrl->alives |= tag; > > -} > - > -static inline void unregister_task_alive(struct pwrctrl_priv *pwrctrl, uint tag) > -{ > - if (pwrctrl->alives & tag) > > - pwrctrl->alives ^= tag; > > -} > - > -static void _rpwm_check_handler (struct _adapter *padapter) > -{ > - struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv; > > - > - if (padapter->driver_stopped || padapter->surprise_removed) > > - return; > - if (pwrpriv->cpwm != pwrpriv->rpwm) > > - schedule_work(&pwrpriv->rpwm_workitem); > > -} > - > -static void SetPSModeWorkItemCallback(struct work_struct *work) > -{ > - struct pwrctrl_priv *pwrpriv = container_of(work, > - struct pwrctrl_priv, SetPSModeWorkItem); > - struct _adapter *padapter = container_of(pwrpriv, > - struct _adapter, pwrctrlpriv); > - if (!pwrpriv->bSleep) { > > - mutex_lock(&pwrpriv->mutex_lock); > > - if (pwrpriv->pwr_mode == PS_MODE_ACTIVE) > > - r8712_set_rpwm(padapter, PS_STATE_S4); > - mutex_unlock(&pwrpriv->mutex_lock); > > - } > -} > - > -static void rpwm_workitem_callback(struct work_struct *work) > -{ > - struct pwrctrl_priv *pwrpriv = container_of(work, > - struct pwrctrl_priv, rpwm_workitem); > - struct _adapter *padapter = container_of(pwrpriv, > - struct _adapter, pwrctrlpriv); > - if (pwrpriv->cpwm != pwrpriv->rpwm) { > > - mutex_lock(&pwrpriv->mutex_lock); > > - r8712_read8(padapter, SDIO_HCPWM); > - pwrpriv->rpwm_retry = 1; > > - r8712_set_rpwm(padapter, pwrpriv->rpwm); > > - mutex_unlock(&pwrpriv->mutex_lock); > > - } > -} > - > -static void rpwm_check_handler (struct timer_list *t) > -{ > - struct _adapter *adapter = > - from_timer(adapter, t, pwrctrlpriv.rpwm_check_timer); > - > - _rpwm_check_handler(adapter); > -} > - > -void r8712_init_pwrctrl_priv(struct _adapter *padapter) > -{ > - struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv; > > - > - memset((unsigned char *)pwrctrlpriv, 0, sizeof(struct pwrctrl_priv)); > - mutex_init(&pwrctrlpriv->mutex_lock); > > - pwrctrlpriv->cpwm = PS_STATE_S4; > > - pwrctrlpriv->pwr_mode = PS_MODE_ACTIVE; > > - pwrctrlpriv->smart_ps = 0; > > - pwrctrlpriv->tog = 0x80; > > -/* clear RPWM to ensure driver and fw back to initial state. */ > - r8712_write8(padapter, 0x1025FE58, 0); > - INIT_WORK(&pwrctrlpriv->SetPSModeWorkItem, SetPSModeWorkItemCallback); > > - INIT_WORK(&pwrctrlpriv->rpwm_workitem, rpwm_workitem_callback); > > - timer_setup(&pwrctrlpriv->rpwm_check_timer, rpwm_check_handler, 0); > > -} > - > -/* > - * Caller: r8712_cmd_thread > - * Check if the fw_pwrstate is okay for issuing cmd. > - * If not (cpwm should be is less than P2 state), then the sub-routine > - * will raise the cpwm to be greater than or equal to P2. > - * Calling Context: Passive > - * Return Value: > - * 0: r8712_cmd_thread can issue cmds to firmware afterwards. > - * -EINVAL: r8712_cmd_thread can not do anything. > - */ > -int r8712_register_cmd_alive(struct _adapter *padapter) > -{ > - int res = 0; > - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv; > > - > - mutex_lock(&pwrctrl->mutex_lock); > > - register_task_alive(pwrctrl, CMD_ALIVE); > - if (pwrctrl->cpwm < PS_STATE_S2) { > > - r8712_set_rpwm(padapter, PS_STATE_S3); > - res = -EINVAL; > - } > - mutex_unlock(&pwrctrl->mutex_lock); > > - return res; > -} > - > -/* > - * Caller: ISR > - * If ISR's txdone, > - * No more pkts for TX, > - * Then driver shall call this fun. to power down firmware again. > - */ > -void r8712_unregister_cmd_alive(struct _adapter *padapter) > -{ > - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv; > > - > - mutex_lock(&pwrctrl->mutex_lock); > > - unregister_task_alive(pwrctrl, CMD_ALIVE); > - if ((pwrctrl->cpwm > PS_STATE_S2) && > > - (pwrctrl->pwr_mode > PS_MODE_ACTIVE)) { > > - if ((pwrctrl->alives == 0) && > > - (check_fwstate(&padapter->mlmepriv, > > - _FW_UNDER_LINKING) != true)) { > - r8712_set_rpwm(padapter, PS_STATE_S0); > - } > - } > - mutex_unlock(&pwrctrl->mutex_lock); > > -} > - > -void r8712_flush_rwctrl_works(struct _adapter *padapter) > -{ > - struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv; > > - > - flush_work(&pwrctrl->SetPSModeWorkItem); > > - flush_work(&pwrctrl->rpwm_workitem); > > -} > diff --git a/drivers/staging/rtl8712/rtl871x_pwrctrl.h b/drivers/staging/rtl8712/rtl871x_pwrctrl.h > deleted file mode 100644 > index b35b9c7920eb..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_pwrctrl.h > +++ /dev/null > @@ -1,113 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - *****************************************************************************/ > -#ifndef _RTL871X_PWRCTRL_H > -#define _RTL871X_PWRCTRL_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > - > -#define CMD_ALIVE BIT(2) > - > -enum Power_Mgnt { > - PS_MODE_ACTIVE = 0, > - PS_MODE_MIN, > - PS_MODE_MAX, > - PS_MODE_DTIM, > - PS_MODE_VOIP, > - PS_MODE_UAPSD_WMM, > - PS_MODE_UAPSD, > - PS_MODE_IBSS, > - PS_MODE_WWLAN, > - PM_Radio_Off, > - PM_Card_Disable, > - PS_MODE_NUM > -}; > - > -/ > - * BIT[2:0] = HW state > - * BIT[3] = Protocol PS state, 0: register active state, > - * 1: register sleep state > - * BIT[4] = sub-state > - / > - > -#define PS_DPS BIT(0) > -#define PS_LCLK (PS_DPS) > -#define PS_RF_OFF BIT(1) > -#define PS_ALL_ON BIT(2) > -#define PS_ST_ACTIVE BIT(3) > -#define PS_LP BIT(4) / low performance / > - > -#define PS_STATE_MASK (0x0F) > -#define PS_STATE_HW_MASK (0x07) > -#define PS_SEQ_MASK (0xc0) > - > -#define PS_STATE(x) (PS_STATE_MASK & (x)) > -#define PS_STATE_HW(x) (PS_STATE_HW_MASK & (x)) > -#define PS_SEQ(x) (PS_SEQ_MASK & (x)) > - > -#define PS_STATE_S0 (PS_DPS) > -#define PS_STATE_S1 (PS_LCLK) > -#define PS_STATE_S2 (PS_RF_OFF) > -#define PS_STATE_S3 (PS_ALL_ON) > -#define PS_STATE_S4 ((PS_ST_ACTIVE) | (PS_ALL_ON)) > - > -#define PS_IS_RF_ON(x) ((x) & (PS_ALL_ON)) > -#define PS_IS_ACTIVE(x) ((x) & (PS_ST_ACTIVE)) > -#define CLR_PS_STATE(x) ((x) = ((x) & (0xF0))) > - > -struct reportpwrstate_parm { > - unsigned char mode; > - unsigned char state; / the CPWM value / > - unsigned short rsvd; > -}; > - > -struct pwrctrl_priv { > - struct mutex mutex_lock; > - /volatile/ u8 rpwm; / requested power state for fw / > - / fw current power state. updated when 1. read from HCPWM or > - * 2. driver lowers power level > - / > - /volatile/ u8 cpwm; > - /volatile/ u8 tog; / toggling / > - /volatile/ u8 cpwm_tog; / toggling / > - /volatile/ u8 tgt_rpwm; / wanted power state / > - uint pwr_mode; > - uint smart_ps; > - uint alives; > - uint ImrContent; / used to store original imr. / > - uint bSleep; / sleep -> active is different from active -> sleep. */ > > - > - struct work_struct SetPSModeWorkItem; > - struct work_struct rpwm_workitem; > - struct timer_list rpwm_check_timer; > - u8 rpwm_retry; > - uint bSetPSModeWorkItemInProgress; > - > - spinlock_t pnp_pwr_mgnt_lock; > - s32 pnp_current_pwr_state; > - u8 pnp_bstop_trx; > - u8 pnp_wwirp_pending; > -}; > - > -void r8712_init_pwrctrl_priv(struct _adapter adapter); > -int r8712_register_cmd_alive(struct _adapter padapter); > -void r8712_unregister_cmd_alive(struct _adapter padapter); > -void r8712_cpwm_int_hdl(struct _adapter padapter, > - struct reportpwrstate_parm preportpwrstate); > -void r8712_set_ps_mode(struct _adapter padapter, uint ps_mode, > - uint smart_ps); > -void r8712_set_rpwm(struct _adapter padapter, u8 val8); > -void r8712_flush_rwctrl_works(struct _adapter padapter); > - > -#endif / _RTL871X_PWRCTRL_H / > diff --git a/drivers/staging/rtl8712/rtl871x_recv.c b/drivers/staging/rtl8712/rtl871x_recv.c > deleted file mode 100644 > index 3fb5cd746273..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_recv.c > +++ /dev/null > @@ -1,671 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/********************************************************************** > - * rtl871x_recv.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RTL871X_RECV_C > - > -#include <linux/ip.h> > > -#include <linux/if_ether.h> > > -#include <linux/etherdevice.h> > > -#include <linux/ieee80211.h> > > -#include <net/cfg80211.h> > > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "recv_osdep.h" > -#include "mlme_osdep.h" > -#include "ethernet.h" > -#include "usb_ops.h" > -#include "wifi.h" > - > -static const u8 SNAP_ETH_TYPE_IPX[2] = {0x81, 0x37}; > - > -/* Datagram Delivery Protocol */ > -static const u8 SNAP_ETH_TYPE_APPLETALK_AARP[2] = {0x80, 0xf3}; > - > -void _r8712_init_sta_recv_priv(struct sta_recv_priv *psta_recvpriv) > -{ > - memset((u8 *)psta_recvpriv, 0, sizeof(struct sta_recv_priv)); > - spin_lock_init(&psta_recvpriv->lock); > > - _init_queue(&psta_recvpriv->defrag_q); > > -} > - > -int _r8712_init_recv_priv(struct recv_priv *precvpriv, > - struct _adapter *padapter) > -{ > - int ret; > - sint i; > - union recv_frame *precvframe; > - > - memset((unsigned char *)precvpriv, 0, sizeof(struct recv_priv)); > - spin_lock_init(&precvpriv->lock); > > - _init_queue(&precvpriv->free_recv_queue); > > - _init_queue(&precvpriv->recv_pending_queue); > > - precvpriv->adapter = padapter; > > - precvpriv->free_recvframe_cnt = NR_RECVFRAME; > > - precvpriv->pallocated_frame_buf = kzalloc(NR_RECVFRAME * > > - sizeof(union recv_frame) + RXFRAME_ALIGN_SZ, > - GFP_ATOMIC); > - if (!precvpriv->pallocated_frame_buf) > > - return -ENOMEM; > - precvpriv->precv_frame_buf = precvpriv->pallocated_frame_buf + > > - RXFRAME_ALIGN_SZ - > - ((addr_t)(precvpriv->pallocated_frame_buf) & > > - (RXFRAME_ALIGN_SZ - 1)); > - precvframe = (union recv_frame *)precvpriv->precv_frame_buf; > > - for (i = 0; i < NR_RECVFRAME; i++) { > - INIT_LIST_HEAD(&precvframe->u.list); > > - list_add_tail(&precvframe->u.list, > > - &precvpriv->free_recv_queue.queue); > > - r8712_os_recv_resource_alloc(padapter, precvframe); > - precvframe->u.hdr.adapter = padapter; > > - precvframe++; > - } > - precvpriv->rx_pending_cnt = 1; > > - ret = r8712_init_recv_priv(precvpriv, padapter); > - if (ret) > - kfree(precvpriv->pallocated_frame_buf); > > - > - return ret; > -} > - > -void _r8712_free_recv_priv(struct recv_priv *precvpriv) > -{ > - kfree(precvpriv->pallocated_frame_buf); > > - r8712_free_recv_priv(precvpriv); > -} > - > -union recv_frame *r8712_alloc_recvframe(struct __queue *pfree_recv_queue) > -{ > - unsigned long irqL; > - union recv_frame *precvframe; > - struct _adapter *padapter; > - struct recv_priv *precvpriv; > - > - spin_lock_irqsave(&pfree_recv_queue->lock, irqL); > > - precvframe = list_first_entry_or_null(&pfree_recv_queue->queue, > > - union recv_frame, u.hdr.list); > - if (precvframe) { > - list_del_init(&precvframe->u.hdr.list); > > - padapter = precvframe->u.hdr.adapter; > > - if (padapter) { > - precvpriv = &padapter->recvpriv; > > - if (pfree_recv_queue == &precvpriv->free_recv_queue) > > - precvpriv->free_recvframe_cnt--; > > - } > - } > - spin_unlock_irqrestore(&pfree_recv_queue->lock, irqL); > > - return precvframe; > -} > - > -/* > - * caller : defrag; recvframe_chk_defrag in recv_thread (passive) > - * pframequeue: defrag_queue : will be accessed in recv_thread (passive) > - * using spin_lock to protect > - */ > -void r8712_free_recvframe_queue(struct __queue *pframequeue, > - struct __queue *pfree_recv_queue) > -{ > - union recv_frame *precvframe; > - struct list_head *plist, *phead; > - > - spin_lock(&pframequeue->lock); > > - phead = &pframequeue->queue; > > - plist = phead->next; > > - while (!end_of_queue_search(phead, plist)) { > - precvframe = container_of(plist, union recv_frame, u.list); > - plist = plist->next; > > - r8712_free_recvframe(precvframe, pfree_recv_queue); > - } > - spin_unlock(&pframequeue->lock); > > -} > - > -sint r8712_recvframe_chkmic(struct _adapter *adapter, > - union recv_frame *precvframe) > -{ > - sint i, res = _SUCCESS; > - u32 datalen; > - u8 miccode[8]; > - u8 bmic_err = false; > - u8 *pframe, *payload, *pframemic; > - u8 *mickey, idx, *iv; > - struct sta_info *stainfo; > - struct rx_pkt_attrib *prxattrib = &precvframe->u.hdr.attrib; > > - struct security_priv *psecuritypriv = &adapter->securitypriv; > > - > - stainfo = r8712_get_stainfo(&adapter->stapriv, &prxattrib->ta[0]); > > - if (prxattrib->encrypt == TKIP) { > > - /* calculate mic code */ > - if (stainfo) { > - if (is_multicast_ether_addr(prxattrib->ra)) { > > - iv = precvframe->u.hdr.rx_data + > > - prxattrib->hdrlen; > > - idx = iv[3]; > - mickey = &psecuritypriv->XGrprxmickey[(((idx >> > > - 6) & 0x3)) - 1].skey[0]; > - if (!psecuritypriv->binstallGrpkey) > > - return _FAIL; > - } else { > - mickey = &stainfo->tkiprxmickey.skey[0]; > > - } > - /icv_len included the mic code/ > - datalen = precvframe->u.hdr.len - prxattrib->hdrlen - > > - prxattrib->iv_len - prxattrib->icv_len - 8; > > - pframe = precvframe->u.hdr.rx_data; > > - payload = pframe + prxattrib->hdrlen + > > - prxattrib->iv_len; > > - seccalctkipmic(mickey, pframe, payload, datalen, > - &miccode[0], > - (unsigned char)prxattrib->priority); > > - pframemic = payload + datalen; > - bmic_err = false; > - for (i = 0; i < 8; i++) { > - if (miccode[i] != *(pframemic + i)) > - bmic_err = true; > - } > - if (bmic_err) { > - if (prxattrib->bdecrypted) > > - r8712_handle_tkip_mic_err(adapter, > - (u8)is_multicast_ether_addr(prxattrib->ra)); > > - res = _FAIL; > - } else { > - /* mic checked ok */ > - if (!psecuritypriv->bcheck_grpkey && > > - is_multicast_ether_addr(prxattrib->ra)) > > - psecuritypriv->bcheck_grpkey = true; > > - } > - recvframe_pull_tail(precvframe, 8); > - } > - } > - return res; > -} > - > -/* decrypt and set the ivlen,icvlen of the recv_frame */ > -union recv_frame *r8712_decryptor(struct _adapter *padapter, > - union recv_frame *precv_frame) > -{ > - struct rx_pkt_attrib *prxattrib = &precv_frame->u.hdr.attrib; > > - struct security_priv *psecuritypriv = &padapter->securitypriv; > > - union recv_frame *return_packet = precv_frame; > - > - if ((prxattrib->encrypt > 0) && ((prxattrib->bdecrypted == 0) || > > - psecuritypriv->sw_decrypt)) { > > - psecuritypriv->hw_decrypted = false; > > - switch (prxattrib->encrypt) { > > - case WEP40: > - case WEP104: > - r8712_wep_decrypt(padapter, (u8 *)precv_frame); > - break; > - case TKIP: > - r8712_tkip_decrypt(padapter, (u8 *)precv_frame); > - break; > - case AES: > - r8712_aes_decrypt(padapter, (u8 *)precv_frame); > - break; > - default: > - break; > - } > - } else if (prxattrib->bdecrypted == 1) { > > - psecuritypriv->hw_decrypted = true; > > - } > - return return_packet; > -} > - > -/*###set the security information in the recv_frame */ > -union recv_frame *r8712_portctrl(struct _adapter *adapter, > - union recv_frame *precv_frame) > -{ > - u8 *psta_addr, *ptr; > - uint auth_alg; > - struct recv_frame_hdr *pfhdr; > - struct sta_info *psta; > - struct sta_priv *pstapriv; > - union recv_frame *prtnframe; > - u16 ether_type; > - > - pstapriv = &adapter->stapriv; > > - ptr = precv_frame->u.hdr.rx_data; > > - pfhdr = &precv_frame->u.hdr; > > - psta_addr = pfhdr->attrib.ta; > > - psta = r8712_get_stainfo(pstapriv, psta_addr); > - auth_alg = adapter->securitypriv.auth_algorithm; > > - if (auth_alg == 2) { > - /* get ether_type */ > - ptr = ptr + pfhdr->attrib.hdrlen + LLC_HEADER_SIZE; > > - ether_type = get_unaligned_be16(ptr); > - > - if (psta && psta->ieee8021x_blocked) { > > - /* blocked > - * only accept EAPOL frame > - */ > - if (ether_type == 0x888e) { > - prtnframe = precv_frame; > - } else { > - /free this frame/ > - r8712_free_recvframe(precv_frame, > - &adapter->recvpriv.free_recv_queue); > > - prtnframe = NULL; > - } > - } else { > - /* allowed > - * check decryption status, and decrypt the > - * frame if needed > - / > - prtnframe = precv_frame; > - / check is the EAPOL frame or not (Rekey) / > - if (ether_type == 0x888e) { > - / check Rekey */ > - prtnframe = precv_frame; > - } > - } > - } else { > - prtnframe = precv_frame; > - } > - return prtnframe; > -} > - > -static sint recv_decache(union recv_frame *precv_frame, u8 bretry, > - struct stainfo_rxcache *prxcache) > -{ > - sint tid = precv_frame->u.hdr.attrib.priority; > > - u16 seq_ctrl = ((precv_frame->u.hdr.attrib.seq_num & 0xffff) << 4) | > > - (precv_frame->u.hdr.attrib.frag_num & 0xf); > > - > - if (tid > 15) > > - return _FAIL; > - if (seq_ctrl == prxcache->tid_rxseq[tid]) > > - return _FAIL; > - prxcache->tid_rxseq[tid] = seq_ctrl; > > - return _SUCCESS; > -} > - > -static sint sta2sta_data_frame(struct _adapter *adapter, > - union recv_frame *precv_frame, > - struct sta_info **psta) > -{ > - u8 *ptr = precv_frame->u.hdr.rx_data; > > - sint ret = _SUCCESS; > - struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib; > > - struct sta_priv *pstapriv = &adapter->stapriv; > > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - u8 *mybssid = get_bssid(pmlmepriv); > - u8 *myhwaddr = myid(&adapter->eeprompriv); > > - u8 *sta_addr = NULL; > - bool bmcast = is_multicast_ether_addr(pattrib->dst); > > - > - if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || > - check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) { > - /* filter packets that SA is myself or multicast or broadcast */ > - if (!memcmp(myhwaddr, pattrib->src, ETH_ALEN)) > > - return _FAIL; > - if ((memcmp(myhwaddr, pattrib->dst, ETH_ALEN)) && (!bmcast)) > > - return _FAIL; > - if (is_zero_ether_addr(pattrib->bssid) || > > - is_zero_ether_addr(mybssid) || > - (memcmp(pattrib->bssid, mybssid, ETH_ALEN))) > > - return _FAIL; > - sta_addr = pattrib->src; > > - } else if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { > - /* For Station mode, sa and bssid should always be BSSID, > - * and DA is my mac-address > - */ > - if (memcmp(pattrib->bssid, pattrib->src, ETH_ALEN)) > > - return _FAIL; > - sta_addr = pattrib->bssid; > > - } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) { > - if (bmcast) { > - /* For AP mode, if DA == MCAST, then BSSID should > - * be also MCAST > - */ > - if (!is_multicast_ether_addr(pattrib->bssid)) > > - return _FAIL; > - } else { /* not mc-frame / > - / For AP mode, if DA is non-MCAST, then it must be > - * BSSID, and bssid == BSSID > - */ > - if (memcmp(pattrib->bssid, pattrib->dst, ETH_ALEN)) > > - return _FAIL; > - sta_addr = pattrib->src; > > - } > - } else if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) { > - memcpy(pattrib->dst, GetAddr1Ptr(ptr), ETH_ALEN); > > - memcpy(pattrib->src, GetAddr2Ptr(ptr), ETH_ALEN); > > - memcpy(pattrib->bssid, GetAddr3Ptr(ptr), ETH_ALEN); > > - memcpy(pattrib->ra, pattrib->dst, ETH_ALEN); > > - memcpy(pattrib->ta, pattrib->src, ETH_ALEN); > > - sta_addr = mybssid; > - } else { > - ret = _FAIL; > - } > - if (bmcast) > - *psta = r8712_get_bcmc_stainfo(adapter); > - else > - psta = r8712_get_stainfo(pstapriv, sta_addr); / get ap_info */ > - if (!*psta) { > - if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) > - adapter->mppriv.rx_pktloss++; > > - return _FAIL; > - } > - return ret; > -} > - > -static sint ap2sta_data_frame(struct _adapter *adapter, > - union recv_frame *precv_frame, > - struct sta_info **psta) > -{ > - u8 *ptr = precv_frame->u.hdr.rx_data; > > - struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib; > > - struct sta_priv *pstapriv = &adapter->stapriv; > > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - u8 *mybssid = get_bssid(pmlmepriv); > - u8 *myhwaddr = myid(&adapter->eeprompriv); > > - bool bmcast = is_multicast_ether_addr(pattrib->dst); > > - > - if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) && > - check_fwstate(pmlmepriv, _FW_LINKED)) { > - /* if NULL-frame, drop packet / > - if ((GetFrameSubType(ptr)) == (IEEE80211_FTYPE_DATA | IEEE80211_STYPE_NULLFUNC)) > - return _FAIL; > - / drop QoS-SubType Data, including QoS NULL, > - * excluding QoS-Data > - / > - if ((GetFrameSubType(ptr) & WIFI_QOS_DATA_TYPE) == > - WIFI_QOS_DATA_TYPE) { > - if (GetFrameSubType(ptr) & (BIT(4) | BIT(5) | BIT(6))) > - return _FAIL; > - } > - > - / filter packets that SA is myself or multicast or broadcast */ > - if (!memcmp(myhwaddr, pattrib->src, ETH_ALEN)) > > - return _FAIL; > - > - /* da should be for me */ > - if ((memcmp(myhwaddr, pattrib->dst, ETH_ALEN)) && (!bmcast)) > > - return _FAIL; > - /* check BSSID */ > - if (is_zero_ether_addr(pattrib->bssid) || > > - is_zero_ether_addr(mybssid) || > - (memcmp(pattrib->bssid, mybssid, ETH_ALEN))) > > - return _FAIL; > - if (bmcast) > - *psta = r8712_get_bcmc_stainfo(adapter); > - else > - *psta = r8712_get_stainfo(pstapriv, pattrib->bssid); > > - if (!*psta) > - return _FAIL; > - } else if (check_fwstate(pmlmepriv, WIFI_MP_STATE) && > - check_fwstate(pmlmepriv, _FW_LINKED)) { > - memcpy(pattrib->dst, GetAddr1Ptr(ptr), ETH_ALEN); > > - memcpy(pattrib->src, GetAddr2Ptr(ptr), ETH_ALEN); > > - memcpy(pattrib->bssid, GetAddr3Ptr(ptr), ETH_ALEN); > > - memcpy(pattrib->ra, pattrib->dst, ETH_ALEN); > > - memcpy(pattrib->ta, pattrib->src, ETH_ALEN); > > - memcpy(pattrib->bssid, mybssid, ETH_ALEN); > > - *psta = r8712_get_stainfo(pstapriv, pattrib->bssid); > > - if (!*psta) > - return _FAIL; > - } else { > - return _FAIL; > - } > - return _SUCCESS; > -} > - > -static sint sta2ap_data_frame(struct _adapter *adapter, > - union recv_frame *precv_frame, > - struct sta_info **psta) > -{ > - struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib; > > - struct sta_priv *pstapriv = &adapter->stapriv; > > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - unsigned char mybssid = get_bssid(pmlmepriv); > - > - if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) { > - / For AP mode, if DA is non-MCAST, then it must be BSSID, > - * and bssid == BSSID > - * For AP mode, RA=BSSID, TX=STA(SRC_ADDR), A3=DST_ADDR > - */ > - if (memcmp(pattrib->bssid, mybssid, ETH_ALEN)) > > - return _FAIL; > - *psta = r8712_get_stainfo(pstapriv, pattrib->src); > > - if (!*psta) > - return _FAIL; > - } > - return _SUCCESS; > -} > - > -static sint validate_recv_ctrl_frame(struct _adapter *adapter, > - union recv_frame *precv_frame) > -{ > - return _FAIL; > -} > - > -static sint validate_recv_mgnt_frame(struct _adapter *adapter, > - union recv_frame *precv_frame) > -{ > - return _FAIL; > -} > - > -static sint validate_recv_data_frame(struct _adapter *adapter, > - union recv_frame *precv_frame) > -{ > - int res; > - u8 bretry; > - u8 *psa, *pda, *pbssid; > - struct sta_info *psta = NULL; > - u8 *ptr = precv_frame->u.hdr.rx_data; > > - struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib; > > - struct security_priv *psecuritypriv = &adapter->securitypriv; > > - > - bretry = GetRetry(ptr); > - pda = ieee80211_get_DA((struct ieee80211_hdr *)ptr); > - psa = ieee80211_get_SA((struct ieee80211_hdr *)ptr); > - pbssid = get_hdr_bssid(ptr); > - if (!pbssid) > - return _FAIL; > - memcpy(pattrib->dst, pda, ETH_ALEN); > > - memcpy(pattrib->src, psa, ETH_ALEN); > > - memcpy(pattrib->bssid, pbssid, ETH_ALEN); > > - switch (pattrib->to_fr_ds) { > > - case 0: > - memcpy(pattrib->ra, pda, ETH_ALEN); > > - memcpy(pattrib->ta, psa, ETH_ALEN); > > - res = sta2sta_data_frame(adapter, precv_frame, &psta); > - break; > - case 1: > - memcpy(pattrib->ra, pda, ETH_ALEN); > > - memcpy(pattrib->ta, pbssid, ETH_ALEN); > > - res = ap2sta_data_frame(adapter, precv_frame, &psta); > - break; > - case 2: > - memcpy(pattrib->ra, pbssid, ETH_ALEN); > > - memcpy(pattrib->ta, psa, ETH_ALEN); > > - res = sta2ap_data_frame(adapter, precv_frame, &psta); > - break; > - case 3: > - memcpy(pattrib->ra, GetAddr1Ptr(ptr), ETH_ALEN); > > - memcpy(pattrib->ta, GetAddr2Ptr(ptr), ETH_ALEN); > > - return _FAIL; > - default: > - return _FAIL; > - } > - if (res == _FAIL) > - return _FAIL; > - if (!psta) > - return _FAIL; > - precv_frame->u.hdr.psta = psta; > > - pattrib->amsdu = 0; > > - /* parsing QC field */ > - if (pattrib->qos == 1) { > > - pattrib->priority = GetPriority((ptr + 24)); > > - pattrib->ack_policy = GetAckpolicy((ptr + 24)); > > - pattrib->amsdu = GetAMsdu((ptr + 24)); > > - pattrib->hdrlen = pattrib->to_fr_ds == 3 ? 32 : 26; > > - } else { > - pattrib->priority = 0; > > - pattrib->hdrlen = (pattrib->to_fr_ds == 3) ? 30 : 24; > > - } > - > - if (pattrib->order)/HT-CTRL 11n/ > > - pattrib->hdrlen += 4; > > - precv_frame->u.hdr.preorder_ctrl = > > - &psta->recvreorder_ctrl[pattrib->priority]; > > - > - /* decache, drop duplicate recv packets */ > - if (recv_decache(precv_frame, bretry, &psta->sta_recvpriv.rxcache) == > > - _FAIL) > - return _FAIL; > - > - if (pattrib->privacy) { > > - GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, > > - is_multicast_ether_addr(pattrib->ra)); > > - SET_ICE_IV_LEN(pattrib->iv_len, pattrib->icv_len, > > - pattrib->encrypt); > > - } else { > - pattrib->encrypt = 0; > > - pattrib->iv_len = pattrib->icv_len = 0; > > - } > - return _SUCCESS; > -} > - > -sint r8712_validate_recv_frame(struct _adapter *adapter, > - union recv_frame *precv_frame) > -{ > - /*shall check frame subtype, to / from ds, da, bssid */ > - /then call check if rx seq/frag. duplicated./ > - > - u8 type; > - u8 subtype; > - sint retval = _SUCCESS; > - struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib; > > - > - u8 *ptr = precv_frame->u.hdr.rx_data; > > - u8 ver = (unsigned char)(*ptr) & 0x3; > - > - /add version chk/ > - if (ver != 0) > - return _FAIL; > - type = GetFrameType(ptr); > - subtype = GetFrameSubType(ptr); /bit(7)~bit(2)/ > - pattrib->to_fr_ds = get_tofr_ds(ptr); > > - pattrib->frag_num = GetFragNum(ptr); > > - pattrib->seq_num = GetSequence(ptr); > > - pattrib->pw_save = GetPwrMgt(ptr); > > - pattrib->mfrag = GetMFrag(ptr); > > - pattrib->mdata = GetMData(ptr); > > - pattrib->privacy = GetPrivacy(ptr); > > - pattrib->order = GetOrder(ptr); > > - switch (type) { > - case IEEE80211_FTYPE_MGMT: > - retval = validate_recv_mgnt_frame(adapter, precv_frame); > - break; > - case IEEE80211_FTYPE_CTL: > - retval = validate_recv_ctrl_frame(adapter, precv_frame); > - break; > - case IEEE80211_FTYPE_DATA: > - pattrib->qos = (subtype & BIT(7)) ? 1 : 0; > > - retval = validate_recv_data_frame(adapter, precv_frame); > - break; > - default: > - return _FAIL; > - } > - return retval; > -} > - > -int r8712_wlanhdr_to_ethhdr(union recv_frame *precvframe) > -{ > - /remove the wlanhdr and add the eth_hdr/ > - sint rmv_len; > - u16 len; > - u8 bsnaphdr; > - u8 *psnap_type; > - struct ieee80211_snap_hdr *psnap; > - struct _adapter *adapter = precvframe->u.hdr.adapter; > > - struct mlme_priv *pmlmepriv = &adapter->mlmepriv; > > - > - u8 *ptr = precvframe->u.hdr.rx_data; /point to frame_ctrl field/ > > - struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib; > > - > - if (pattrib->encrypt) > > - recvframe_pull_tail(precvframe, pattrib->icv_len); > > - psnap = (struct ieee80211_snap_hdr *)(ptr + pattrib->hdrlen + > > - pattrib->iv_len); > > - psnap_type = ptr + pattrib->hdrlen + pattrib->iv_len + SNAP_SIZE; > > - /* convert hdr + possible LLC headers into Ethernet header */ > - if ((!memcmp(psnap, (void *)rfc1042_header, SNAP_SIZE) && > - (memcmp(psnap_type, (void *)SNAP_ETH_TYPE_IPX, 2)) && > - (memcmp(psnap_type, (void *)SNAP_ETH_TYPE_APPLETALK_AARP, 2))) || > - !memcmp(psnap, (void )bridge_tunnel_header, SNAP_SIZE)) { > - / remove RFC1042 or Bridge-Tunnel encapsulation and > - * replace EtherType > - / > - bsnaphdr = true; > - } else { > - / Leave Ethernet header part of hdr and full payload */ > - bsnaphdr = false; > - } > - rmv_len = pattrib->hdrlen + pattrib->iv_len + > > - (bsnaphdr ? SNAP_SIZE : 0); > - len = precvframe->u.hdr.len - rmv_len; > > - if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) { > - ptr += rmv_len; > - *ptr = 0x87; > - (ptr + 1) = 0x12; > - / append rx status for mp test packets */ > - ptr = recvframe_pull(precvframe, (rmv_len - > - sizeof(struct ethhdr) + 2) - 24); > - if (!ptr) > - return -ENOMEM; > - memcpy(ptr, get_rxmem(precvframe), 24); > - ptr += 24; > - } else { > - ptr = recvframe_pull(precvframe, (rmv_len - > - sizeof(struct ethhdr) + (bsnaphdr ? 2 : 0))); > - if (!ptr) > - return -ENOMEM; > - } > - > - memcpy(ptr, pattrib->dst, ETH_ALEN); > > - memcpy(ptr + ETH_ALEN, pattrib->src, ETH_ALEN); > > - if (!bsnaphdr) { > - __be16 be_tmp = htons(len); > - > - memcpy(ptr + 12, &be_tmp, 2); > - } > - return 0; > -} > - > -void r8712_recv_entry(union recv_frame *precvframe) > -{ > - struct _adapter *padapter; > - struct recv_priv *precvpriv; > - > - s32 ret = _SUCCESS; > - > - padapter = precvframe->u.hdr.adapter; > > - precvpriv = &padapter->recvpriv; > > - > - padapter->ledpriv.LedControlHandler(padapter, LED_CTL_RX); > > - > - ret = recv_func(padapter, precvframe); > - if (ret == _FAIL) > - goto _recv_entry_drop; > - precvpriv->rx_pkts++; > > - precvpriv->rx_bytes += (uint)(precvframe->u.hdr.rx_tail - > > - precvframe->u.hdr.rx_data); > > - return; > -_recv_entry_drop: > - precvpriv->rx_drop++; > > - padapter->mppriv.rx_pktloss = precvpriv->rx_drop; > > -} > diff --git a/drivers/staging/rtl8712/rtl871x_recv.h b/drivers/staging/rtl8712/rtl871x_recv.h > deleted file mode 100644 > index 0760bccbf389..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_recv.h > +++ /dev/null > @@ -1,208 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -#ifndef RTL871X_RECV_H > -#define RTL871X_RECV_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > - > -#define NR_RECVFRAME 256 > - > -#define RXFRAME_ALIGN 8 > -#define RXFRAME_ALIGN_SZ (1 << RXFRAME_ALIGN) > - > -#define MAX_SUBFRAME_COUNT 64 > - > -/ for Rx reordering buffer control */ > -struct recv_reorder_ctrl { > - struct _adapter padapter; > - u16 indicate_seq; / =wstart_b, init_value=0xffff / > - u16 wend_b; > - u8 wsize_b; > - struct __queue pending_recvframe_queue; > - struct timer_list reordering_ctrl_timer; > -}; > - > -struct stainfo_rxcache { > - u16 tid_rxseq[16]; > -}; > - > -#define PHY_RSSI_SLID_WIN_MAX 100 > -#define PHY_LINKQUALITY_SLID_WIN_MAX 20 > - > -struct smooth_rssi_data { > - u32 elements[100]; / array to store values / > - u32 index; / index to current array to store / > - u32 total_num; / num of valid elements / > - u32 total_val; / sum of valid elements / > -}; > - > -struct rx_pkt_attrib { > - u8 amsdu; > - u8 order; > - u8 qos; > - u8 to_fr_ds; > - u8 frag_num; > - u16 seq_num; > - u8 pw_save; > - u8 mfrag; > - u8 mdata; > - u8 privacy; / in frame_ctrl field / > - u8 bdecrypted; > - int hdrlen; / the WLAN Header Len / > - int encrypt; / 0 no encrypt. != 0 encrypt algorithm / > - int iv_len; > - int icv_len; > - int priority; > - int ack_policy; > - u8 crc_err; > - u8 dst[ETH_ALEN]; > - u8 src[ETH_ALEN]; > - u8 ta[ETH_ALEN]; > - u8 ra[ETH_ALEN]; > - u8 bssid[ETH_ALEN]; > - u8 tcpchk_valid; / 0: invalid, 1: valid / > - u8 ip_chkrpt; / 0: incorrect, 1: correct / > - u8 tcp_chkrpt; / 0: incorrect, 1: correct / > - u8 signal_qual; > - s8 rx_mimo_signal_qual[2]; > - u8 mcs_rate; > - u8 htc; > - u8 signal_strength; > -}; > - > -/ > - * accesser of recv_priv: recv_entry(dispatch / passive level); > - * recv_thread(passive) ; returnpkt(dispatch) > - * ; halt(passive) ; > - * > - * using enter_critical section to protect > - */ > -struct recv_priv { > - spinlock_t lock; > - struct __queue free_recv_queue; > - struct __queue recv_pending_queue; > - u8 *pallocated_frame_buf; > - u8 *precv_frame_buf; > - uint free_recvframe_cnt; > - struct _adapter *adapter; > - uint rx_bytes; > - uint rx_pkts; > - uint rx_drop; > - uint rx_icv_err; > - uint rx_largepacket_crcerr; > - uint rx_smallpacket_crcerr; > - uint rx_middlepacket_crcerr; > - u8 rx_pending_cnt; > - uint ff_hwaddr; > - struct tasklet_struct recv_tasklet; > - struct sk_buff_head free_recv_skb_queue; > - struct sk_buff_head rx_skb_queue; > - u8 *pallocated_recv_buf; > - u8 precv_buf; / 4 alignment / > - struct __queue free_recv_buf_queue; > - u32 free_recv_buf_queue_cnt; > - / For the phy information / > - s8 rssi; > - u8 signal; > - u8 noise; > - u8 fw_rssi; > - struct smooth_rssi_data signal_qual_data; > - struct smooth_rssi_data signal_strength_data; > -}; > - > -struct sta_recv_priv { > - spinlock_t lock; > - sint option; > - struct __queue defrag_q; / keeping the fragment frame until defrag / > - struct stainfo_rxcache rxcache; > - uint sta_rx_bytes; > - uint sta_rx_pkts; > - uint sta_rx_fail; > -}; > - > -#include "rtl8712_recv.h" > - > -/ get a free recv_frame from pfree_recv_queue */ > -union recv_frame *r8712_alloc_recvframe(struct __queue *pfree_recv_queue); > -void r8712_free_recvframe(union recv_frame *precvframe, > - struct __queue *pfree_recv_queue); > -void r8712_free_recvframe_queue(struct __queue *pframequeue, > - struct __queue *pfree_recv_queue); > -int r8712_wlanhdr_to_ethhdr(union recv_frame *precvframe); > -int recv_func(struct _adapter *padapter, void *pcontext); > - > -static inline u8 *get_rxmem(union recv_frame precvframe) > -{ > - / always return rx_head... */ > - if (!precvframe) > - return NULL; > - return precvframe->u.hdr.rx_head; > > -} > - > -static inline u8 *recvframe_pull(union recv_frame precvframe, sint sz) > -{ > - / used for extract sz bytes from rx_data, update rx_data and return > - * the updated rx_data to the caller > - */ > - if (!precvframe) > - return NULL; > - precvframe->u.hdr.rx_data += sz; > > - if (precvframe->u.hdr.rx_data > precvframe->u.hdr.rx_tail) { > > - precvframe->u.hdr.rx_data -= sz; > > - return NULL; > - } > - precvframe->u.hdr.len -= sz; > > - return precvframe->u.hdr.rx_data; > > -} > - > -static inline u8 *recvframe_put(union recv_frame precvframe, sint sz) > -{ > - / used for append sz bytes from ptr to rx_tail, update rx_tail and > - * return the updated rx_tail to the caller > - * after putting, rx_tail must be still larger than rx_end. > - */ > - if (!precvframe) > - return NULL; > - precvframe->u.hdr.rx_tail += sz; > > - if (precvframe->u.hdr.rx_tail > precvframe->u.hdr.rx_end) { > > - precvframe->u.hdr.rx_tail -= sz; > > - return NULL; > - } > - precvframe->u.hdr.len += sz; > > - return precvframe->u.hdr.rx_tail; > > -} > - > -static inline u8 *recvframe_pull_tail(union recv_frame precvframe, sint sz) > -{ > - / rmv data from rx_tail (by yitsen) > - * used for extract sz bytes from rx_end, update rx_end and return the > - * updated rx_end to the caller > - * after pulling, rx_end must be still larger than rx_data. > - */ > - if (!precvframe) > - return NULL; > - precvframe->u.hdr.rx_tail -= sz; > > - if (precvframe->u.hdr.rx_tail < precvframe->u.hdr.rx_data) { > > - precvframe->u.hdr.rx_tail += sz; > > - return NULL; > - } > - precvframe->u.hdr.len -= sz; > > - return precvframe->u.hdr.rx_tail; > > -} > - > -struct sta_info; > - > -void _r8712_init_sta_recv_priv(struct sta_recv_priv psta_recvpriv); > -sint r8712_recvframe_chkmic(struct _adapter adapter, > - union recv_frame precvframe); > -union recv_frame r8712_decryptor(struct _adapter adapter, > - union recv_frame precv_frame); > -union recv_frame r8712_recvframe_chk_defrag(struct _adapter adapter, > - union recv_frame precv_frame); > -int r8712_validate_recv_frame(struct _adapter adapter, > - union recv_frame precv_frame); > -union recv_frame r8712_portctrl(struct _adapter adapter, > - union recv_frame precv_frame); > - > -#endif > - > diff --git a/drivers/staging/rtl8712/rtl871x_rf.h b/drivers/staging/rtl8712/rtl871x_rf.h > deleted file mode 100644 > index 7d98921a48fa..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_rf.h > +++ /dev/null > @@ -1,55 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/**************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef _RTL871X_RF_H > -#define _RTL871X_RF_H > - > -#include "rtl871x_cmd.h" > -#include "rtl871x_mp_phy_regdef.h" > - > -#define OFDM_PHY 1 > -#define MIXED_PHY 2 > -#define CCK_PHY 3 > -#define NumRates (13) > -#define RTL8711_RF_MAX_SENS 6 > -#define RTL8711_RF_DEF_SENS 4 > -#define NUM_CHANNELS 15 > - > -struct regulatory_class { > - u32 starting_freq; /MHz, / > - u8 channel_set[NUM_CHANNELS]; > - u8 channel_cck_power[NUM_CHANNELS]; /dbm/ > - u8 channel_ofdm_power[NUM_CHANNELS];/dbm/ > - u8 txpower_limit; /dbm/ > - u8 channel_spacing; /MHz/ > - u8 modem; > -}; > - > -enum _REG_PREAMBLE_MODE { > - PREAMBLE_LONG = 1, > - PREAMBLE_AUTO = 2, > - PREAMBLE_SHORT = 3, > -}; > - > -enum { > - RTL8712_RFC_1T = 0x10, > - RTL8712_RFC_2T = 0x20, > - RTL8712_RFC_1R = 0x01, > - RTL8712_RFC_2R = 0x02, > - RTL8712_RFC_1T1R = 0x11, > - RTL8712_RFC_1T2R = 0x12, > - RTL8712_RFC_TURBO = 0x92, > - RTL8712_RFC_2T2R = 0x22 > -}; > - > -#endif /_RTL871X_RF_H/ > diff --git a/drivers/staging/rtl8712/rtl871x_security.c b/drivers/staging/rtl8712/rtl871x_security.c > deleted file mode 100644 > index e46a5dbc7b65..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_security.c > +++ /dev/null > @@ -1,1386 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/ > - * rtl871x_security.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RTL871X_SECURITY_C > - > -#include <linux/compiler.h> > > -#include <linux/kernel.h> > > -#include <linux/errno.h> > > -#include <linux/slab.h> > > -#include <linux/module.h> > > -#include <linux/kref.h> > > -#include <linux/netdevice.h> > > -#include <linux/skbuff.h> > > -#include <linux/circ_buf.h> > > -#include <linux/uaccess.h> > > -#include <asm/byteorder.h> > > -#include <linux/atomic.h> > > -#include <linux/crc32poly.h> > > -#include <linux/semaphore.h> > > -#include <linux/ieee80211.h> > > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "osdep_intf.h" > - > -/* =====WEP related===== */ > - > -struct arc4context { > - u32 x; > - u32 y; > - u8 state[256]; > -}; > - > -static void arcfour_init(struct arc4context *parc4ctx, u8 *key, u32 key_len) > -{ > - u32 t, u; > - u32 keyindex; > - u32 stateindex; > - u8 *state; > - u32 counter; > - > - state = parc4ctx->state; > > - parc4ctx->x = 0; > > - parc4ctx->y = 0; > > - for (counter = 0; counter < 256; counter++) > - state[counter] = (u8)counter; > - keyindex = 0; > - stateindex = 0; > - for (counter = 0; counter < 256; counter++) { > - t = state[counter]; > - stateindex = (stateindex + key[keyindex] + t) & 0xff; > - u = state[stateindex]; > - state[stateindex] = (u8)t; > - state[counter] = (u8)u; > - if (++keyindex >= key_len) > > - keyindex = 0; > - } > -} > - > -static u32 arcfour_byte(struct arc4context *parc4ctx) > -{ > - u32 x; > - u32 y; > - u32 sx, sy; > - u8 *state; > - > - state = parc4ctx->state; > > - x = (parc4ctx->x + 1) & 0xff; > > - sx = state[x]; > - y = (sx + parc4ctx->y) & 0xff; > > - sy = state[y]; > - parc4ctx->x = x; > > - parc4ctx->y = y; > > - state[y] = (u8)sx; > - state[x] = (u8)sy; > - return state[(sx + sy) & 0xff]; > -} > - > -static void arcfour_encrypt(struct arc4context *parc4ctx, > - u8 *dest, u8 *src, u32 len) > -{ > - u32 i; > - > - for (i = 0; i < len; i++) > - dest[i] = src[i] ^ (unsigned char)arcfour_byte(parc4ctx); > -} > - > -static sint bcrc32initialized; > -static u32 crc32_table[256]; > - > -static u8 crc32_reverseBit(u8 data) > -{ > - return ((u8)(data << 7) & 0x80) | ((data << 5) & 0x40) | ((data << 3) > - & 0x20) | ((data << 1) & 0x10) | ((data >> 1) & 0x08) | > > - ((data >> 3) & 0x04) | ((data >> 5) & 0x02) | ((data >> 7) & > > - 0x01); > -} > - > -static void crc32_init(void) > -{ > - sint i, j; > - u32 c; > - u8 *p = (u8 *)&c, *p1; > - u8 k; > - > - if (bcrc32initialized == 1) > - return; > - > - for (i = 0; i < 256; ++i) { > - k = crc32_reverseBit((u8)i); > - for (c = ((u32)k) << 24, j = 8; j > 0; --j) > > - c = c & 0x80000000 ? (c << 1) ^ CRC32_POLY_BE : (c << 1); > - p1 = (u8 *)&crc32_table[i]; > - p1[0] = crc32_reverseBit(p[3]); > - p1[1] = crc32_reverseBit(p[2]); > - p1[2] = crc32_reverseBit(p[1]); > - p1[3] = crc32_reverseBit(p[0]); > - } > - bcrc32initialized = 1; > -} > - > -static u32 getcrc32(u8 *buf, u32 len) > -{ > - u8 p; > - u32 crc; > - > - if (!bcrc32initialized) > - crc32_init(); > - crc = 0xffffffff; / preload shift register, per CRC-32 spec */ > - for (p = buf; len > 0; ++p, --len) > > - crc = crc32_table[(crc ^ *p) & 0xff] ^ (crc >> 8); > > - return ~crc; /* transmit complement, per CRC-32 spec / > -} > - > -/ > - * Need to consider the fragment situation > - */ > -void r8712_wep_encrypt(struct _adapter *padapter, u8 pxmitframe) > -{ / exclude ICV */ > - unsigned char crc[4]; > - struct arc4context mycontext; > - u32 curfragnum, length, keylength, pki; > - u8 *pframe, *payload, iv; /,wepkey/ > - u8 wepkey[16]; > - struct pkt_attrib *pattrib = &((struct xmit_frame *) > - pxmitframe)->attrib; > > - struct security_priv *psecuritypriv = &padapter->securitypriv; > > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - > - if (((struct xmit_frame *)pxmitframe)->buf_addr == NULL) > > - return; > - pframe = ((struct xmit_frame *)pxmitframe)->buf_addr + TXDESC_OFFSET; > > - /start to encrypt each fragment/ > - if ((pattrib->encrypt == WEP40) || (pattrib->encrypt == WEP104)) { > > - pki = psecuritypriv->PrivacyKeyIndex; > > - keylength = psecuritypriv->DefKeylen[pki]; > > - for (curfragnum = 0; curfragnum < pattrib->nr_frags; > > - curfragnum++) { > - iv = pframe + pattrib->hdrlen; > > - memcpy(&wepkey[0], iv, 3); > - memcpy(&wepkey[3], &psecuritypriv->DefKey[ > > - psecuritypriv->PrivacyKeyIndex].skey[0], > > - keylength); > - payload = pframe + pattrib->iv_len + pattrib->hdrlen; > > - if ((curfragnum + 1) == pattrib->nr_frags) { > > - length = pattrib->last_txcmdsz - > > - pattrib->hdrlen - > > - pattrib->iv_len - > > - pattrib->icv_len; > > - *((__le32 *)crc) = cpu_to_le32(getcrc32( > - payload, length)); > - arcfour_init(&mycontext, wepkey, 3 + keylength); > - arcfour_encrypt(&mycontext, payload, payload, > - length); > - arcfour_encrypt(&mycontext, payload + length, > - crc, 4); > - } else { > - length = pxmitpriv->frag_len - > > - pattrib->hdrlen - pattrib->iv_len - > > - pattrib->icv_len; > > - *((__le32 *)crc) = cpu_to_le32(getcrc32( > - payload, length)); > - arcfour_init(&mycontext, wepkey, 3 + keylength); > - arcfour_encrypt(&mycontext, payload, payload, > - length); > - arcfour_encrypt(&mycontext, payload + length, > - crc, 4); > - pframe += pxmitpriv->frag_len; > > - pframe = (u8 *)RND4((addr_t)(pframe)); > - } > - } > - } > -} > - > -void r8712_wep_decrypt(struct _adapter *padapter, u8 precvframe) > -{ > - / exclude ICV */ > - u8 crc[4]; > - struct arc4context mycontext; > - u32 length, keylength; > - u8 *pframe, *payload, *iv, wepkey[16]; > - u8 keyindex; > - struct rx_pkt_attrib *prxattrib = &(((union recv_frame *) > - precvframe)->u.hdr.attrib); > > - struct security_priv *psecuritypriv = &padapter->securitypriv; > > - > - pframe = (unsigned char *)((union recv_frame *)precvframe)-> > > - u.hdr.rx_data; > - /* start to decrypt recvframe */ > - if ((prxattrib->encrypt == WEP40) || (prxattrib->encrypt == > > - WEP104)) { > - iv = pframe + prxattrib->hdrlen; > > - keyindex = (iv[3] & 0x3); > - keylength = psecuritypriv->DefKeylen[keyindex]; > > - memcpy(&wepkey[0], iv, 3); > - memcpy(&wepkey[3], &psecuritypriv->DefKey[ > > - psecuritypriv->PrivacyKeyIndex].skey[0], > > - keylength); > - length = ((union recv_frame *)precvframe)-> > > - u.hdr.len - prxattrib->hdrlen - prxattrib->iv_len; > > - payload = pframe + prxattrib->iv_len + prxattrib->hdrlen; > > - /* decrypt payload include icv / > - arcfour_init(&mycontext, wepkey, 3 + keylength); > - arcfour_encrypt(&mycontext, payload, payload, length); > - / calculate icv and compare the icv */ > - *((__le32 )crc) = cpu_to_le32(getcrc32(payload, length - 4)); > - } > -} > - > -/ 3 =====TKIP related===== */ > - > -static u32 secmicgetuint32(u8 p) > -/ Convert from Byte[] to Us4Byte32 in a portable way */ > -{ > - s32 i; > - u32 res = 0; > - > - for (i = 0; i < 4; i++) > - res |= ((u32)(*p++)) << (8 * i); > - return res; > -} > - > -static void secmicputuint32(u8 p, u32 val) > -/ Convert from Us4Byte32 to Byte[] in a portable way */ > -{ > - long i; > - > - for (i = 0; i < 4; i++) { > - *p++ = (u8)(val & 0xff); > - val >>= 8; > > - } > -} > - > -static void secmicclear(struct mic_data pmicdata) > -{ > -/ Reset the state to the empty message. */ > - pmicdata->L = pmicdata->K0; > > - pmicdata->R = pmicdata->K1; > > - pmicdata->nBytesInM = 0; > > - pmicdata->M = 0; > > -} > - > -void r8712_secmicsetkey(struct mic_data *pmicdata, u8 key) > -{ > - / Set the key */ > - pmicdata->K0 = secmicgetuint32(key); > > - pmicdata->K1 = secmicgetuint32(key + 4); > > - /* and reset the message */ > - secmicclear(pmicdata); > -} > - > -static void secmicappendbyte(struct mic_data pmicdata, u8 b) > -{ > - / Append the byte to our word-sized buffer */ > - pmicdata->M |= ((u32)b) << (8 * pmicdata->nBytesInM); > > - pmicdata->nBytesInM++; > > - /* Process the word if it is full. */ > - if (pmicdata->nBytesInM >= 4) { > > - pmicdata->L ^= pmicdata->M; > > - pmicdata->R ^= ROL32(pmicdata->L, 17); > > - pmicdata->L += pmicdata->R; > > - pmicdata->R ^= ((pmicdata->L & 0xff00ff00) >> 8) | > > - ((pmicdata->L & 0x00ff00ff) << 8); > > - pmicdata->L += pmicdata->R; > > - pmicdata->R ^= ROL32(pmicdata->L, 3); > > - pmicdata->L += pmicdata->R; > > - pmicdata->R ^= ROR32(pmicdata->L, 2); > > - pmicdata->L += pmicdata->R; > > - /* Clear the buffer */ > - pmicdata->M = 0; > > - pmicdata->nBytesInM = 0; > > - } > -} > - > -void r8712_secmicappend(struct mic_data *pmicdata, u8 src, u32 nbytes) > -{ > - / This is simple */ > - while (nbytes > 0) { > > - secmicappendbyte(pmicdata, *src++); > - nbytes--; > - } > -} > - > -void r8712_secgetmic(struct mic_data *pmicdata, u8 dst) > -{ > - / Append the minimum padding / > - secmicappendbyte(pmicdata, 0x5a); > - secmicappendbyte(pmicdata, 0); > - secmicappendbyte(pmicdata, 0); > - secmicappendbyte(pmicdata, 0); > - secmicappendbyte(pmicdata, 0); > - / and then zeroes until the length is a multiple of 4 */ > - while (pmicdata->nBytesInM != 0) > > - secmicappendbyte(pmicdata, 0); > - /* The appendByte function has already computed the result. */ > - secmicputuint32(dst, pmicdata->L); > > - secmicputuint32(dst + 4, pmicdata->R); > > - /* Reset to the empty message. */ > - secmicclear(pmicdata); > -} > - > -void seccalctkipmic(u8 *key, u8 *header, u8 *data, u32 data_len, u8 mic_code, > - u8 pri) > -{ > - > - struct mic_data micdata; > - u8 priority[4] = {0x0, 0x0, 0x0, 0x0}; > - > - r8712_secmicsetkey(&micdata, key); > - priority[0] = pri; > - / Michael MIC pseudo header: DA, SA, 3 x 0, Priority / > - if (header[1] & 1) { / ToDS==1 / > - r8712_secmicappend(&micdata, &header[16], 6); / DA / > - if (header[1] & 2) / From Ds==1 / > - r8712_secmicappend(&micdata, &header[24], 6); > - else > - r8712_secmicappend(&micdata, &header[10], 6); > - } else { / ToDS==0 / > - r8712_secmicappend(&micdata, &header[4], 6); / DA / > - if (header[1] & 2) / From Ds==1 / > - r8712_secmicappend(&micdata, &header[16], 6); > - else > - r8712_secmicappend(&micdata, &header[10], 6); > - } > - r8712_secmicappend(&micdata, &priority[0], 4); > - r8712_secmicappend(&micdata, data, data_len); > - r8712_secgetmic(&micdata, mic_code); > -} > - > -/ macros for extraction/creation of unsigned char/unsigned short values */ > -#define RotR1(v16) ((((v16) >> 1) & 0x7FFF) ^ (((v16) & 1) << 15)) > > -#define Lo8(v16) ((u8)((v16) & 0x00FF)) > -#define Hi8(v16) ((u8)(((v16) >> 8) & 0x00FF)) > > -#define Lo16(v32) ((u16)((v32) & 0xFFFF)) > -#define Hi16(v32) ((u16)(((v32) >> 16) & 0xFFFF)) > > -#define Mk16(hi, lo) ((lo) ^ (((u16)(hi)) << 8)) > - > -/* select the Nth 16-bit word of the temporal key unsigned char array TK[] / > -#define TK16(N) Mk16(tk[2 * (N) + 1], tk[2 * (N)]) > - > -/ S-box lookup: 16 bits --> 16 bits */ > > -#define S(v16) (Sbox1[0][Lo8(v16)] ^ Sbox1[1][Hi8(v16)]) > - > -/* fixed algorithm "parameters" / > -#define PHASE1_LOOP_CNT 8 / this needs to be "big enough" / > -#define TA_SIZE 6 / 48-bit transmitter address / > -#define TK_SIZE 16 / 128-bit temporal key / > -#define P1K_SIZE 10 / 80-bit Phase1 key / > -#define RC4_KEY_SIZE 16 / 128-bit RC4KEY (104 bits unknown) / > - > -/ 2-unsigned char by 2-unsigned char subset of the full AES S-box table / > -static const unsigned short Sbox1[2][256] = {/ Sbox for hash (can be in ROM) / > - { > - 0xC6A5, 0xF884, 0xEE99, 0xF68D, 0xFF0D, 0xD6BD, 0xDEB1, 0x9154, > - 0x6050, 0x0203, 0xCEA9, 0x567D, 0xE719, 0xB562, 0x4DE6, 0xEC9A, > - 0x8F45, 0x1F9D, 0x8940, 0xFA87, 0xEF15, 0xB2EB, 0x8EC9, 0xFB0B, > - 0x41EC, 0xB367, 0x5FFD, 0x45EA, 0x23BF, 0x53F7, 0xE496, 0x9B5B, > - 0x75C2, 0xE11C, 0x3DAE, 0x4C6A, 0x6C5A, 0x7E41, 0xF502, 0x834F, > - 0x685C, 0x51F4, 0xD134, 0xF908, 0xE293, 0xAB73, 0x6253, 0x2A3F, > - 0x080C, 0x9552, 0x4665, 0x9D5E, 0x3028, 0x37A1, 0x0A0F, 0x2FB5, > - 0x0E09, 0x2436, 0x1B9B, 0xDF3D, 0xCD26, 0x4E69, 0x7FCD, 0xEA9F, > - 0x121B, 0x1D9E, 0x5874, 0x342E, 0x362D, 0xDCB2, 0xB4EE, 0x5BFB, > - 0xA4F6, 0x764D, 0xB761, 0x7DCE, 0x527B, 0xDD3E, 0x5E71, 0x1397, > - 0xA6F5, 0xB968, 0x0000, 0xC12C, 0x4060, 0xE31F, 0x79C8, 0xB6ED, > - 0xD4BE, 0x8D46, 0x67D9, 0x724B, 0x94DE, 0x98D4, 0xB0E8, 0x854A, > - 0xBB6B, 0xC52A, 0x4FE5, 0xED16, 0x86C5, 0x9AD7, 0x6655, 0x1194, > - 0x8ACF, 0xE910, 0x0406, 0xFE81, 0xA0F0, 0x7844, 0x25BA, 0x4BE3, > - 0xA2F3, 0x5DFE, 0x80C0, 0x058A, 0x3FAD, 0x21BC, 0x7048, 0xF104, > - 0x63DF, 0x77C1, 0xAF75, 0x4263, 0x2030, 0xE51A, 0xFD0E, 0xBF6D, > - 0x814C, 0x1814, 0x2635, 0xC32F, 0xBEE1, 0x35A2, 0x88CC, 0x2E39, > - 0x9357, 0x55F2, 0xFC82, 0x7A47, 0xC8AC, 0xBAE7, 0x322B, 0xE695, > - 0xC0A0, 0x1998, 0x9ED1, 0xA37F, 0x4466, 0x547E, 0x3BAB, 0x0B83, > - 0x8CCA, 0xC729, 0x6BD3, 0x283C, 0xA779, 0xBCE2, 0x161D, 0xAD76, > - 0xDB3B, 0x6456, 0x744E, 0x141E, 0x92DB, 0x0C0A, 0x486C, 0xB8E4, > - 0x9F5D, 0xBD6E, 0x43EF, 0xC4A6, 0x39A8, 0x31A4, 0xD337, 0xF28B, > - 0xD532, 0x8B43, 0x6E59, 0xDAB7, 0x018C, 0xB164, 0x9CD2, 0x49E0, > - 0xD8B4, 0xACFA, 0xF307, 0xCF25, 0xCAAF, 0xF48E, 0x47E9, 0x1018, > - 0x6FD5, 0xF088, 0x4A6F, 0x5C72, 0x3824, 0x57F1, 0x73C7, 0x9751, > - 0xCB23, 0xA17C, 0xE89C, 0x3E21, 0x96DD, 0x61DC, 0x0D86, 0x0F85, > - 0xE090, 0x7C42, 0x71C4, 0xCCAA, 0x90D8, 0x0605, 0xF701, 0x1C12, > - 0xC2A3, 0x6A5F, 0xAEF9, 0x69D0, 0x1791, 0x9958, 0x3A27, 0x27B9, > - 0xD938, 0xEB13, 0x2BB3, 0x2233, 0xD2BB, 0xA970, 0x0789, 0x33A7, > - 0x2DB6, 0x3C22, 0x1592, 0xC920, 0x8749, 0xAAFF, 0x5078, 0xA57A, > - 0x038F, 0x59F8, 0x0980, 0x1A17, 0x65DA, 0xD731, 0x84C6, 0xD0B8, > - 0x82C3, 0x29B0, 0x5A77, 0x1E11, 0x7BCB, 0xA8FC, 0x6DD6, 0x2C3A, > - }, > - { / second half is unsigned char-reversed version of first! / > - 0xA5C6, 0x84F8, 0x99EE, 0x8DF6, 0x0DFF, 0xBDD6, 0xB1DE, 0x5491, > - 0x5060, 0x0302, 0xA9CE, 0x7D56, 0x19E7, 0x62B5, 0xE64D, 0x9AEC, > - 0x458F, 0x9D1F, 0x4089, 0x87FA, 0x15EF, 0xEBB2, 0xC98E, 0x0BFB, > - 0xEC41, 0x67B3, 0xFD5F, 0xEA45, 0xBF23, 0xF753, 0x96E4, 0x5B9B, > - 0xC275, 0x1CE1, 0xAE3D, 0x6A4C, 0x5A6C, 0x417E, 0x02F5, 0x4F83, > - 0x5C68, 0xF451, 0x34D1, 0x08F9, 0x93E2, 0x73AB, 0x5362, 0x3F2A, > - 0x0C08, 0x5295, 0x6546, 0x5E9D, 0x2830, 0xA137, 0x0F0A, 0xB52F, > - 0x090E, 0x3624, 0x9B1B, 0x3DDF, 0x26CD, 0x694E, 0xCD7F, 0x9FEA, > - 0x1B12, 0x9E1D, 0x7458, 0x2E34, 0x2D36, 0xB2DC, 0xEEB4, 0xFB5B, > - 0xF6A4, 0x4D76, 0x61B7, 0xCE7D, 0x7B52, 0x3EDD, 0x715E, 0x9713, > - 0xF5A6, 0x68B9, 0x0000, 0x2CC1, 0x6040, 0x1FE3, 0xC879, 0xEDB6, > - 0xBED4, 0x468D, 0xD967, 0x4B72, 0xDE94, 0xD498, 0xE8B0, 0x4A85, > - 0x6BBB, 0x2AC5, 0xE54F, 0x16ED, 0xC586, 0xD79A, 0x5566, 0x9411, > - 0xCF8A, 0x10E9, 0x0604, 0x81FE, 0xF0A0, 0x4478, 0xBA25, 0xE34B, > - 0xF3A2, 0xFE5D, 0xC080, 0x8A05, 0xAD3F, 0xBC21, 0x4870, 0x04F1, > - 0xDF63, 0xC177, 0x75AF, 0x6342, 0x3020, 0x1AE5, 0x0EFD, 0x6DBF, > - 0x4C81, 0x1418, 0x3526, 0x2FC3, 0xE1BE, 0xA235, 0xCC88, 0x392E, > - 0x5793, 0xF255, 0x82FC, 0x477A, 0xACC8, 0xE7BA, 0x2B32, 0x95E6, > - 0xA0C0, 0x9819, 0xD19E, 0x7FA3, 0x6644, 0x7E54, 0xAB3B, 0x830B, > - 0xCA8C, 0x29C7, 0xD36B, 0x3C28, 0x79A7, 0xE2BC, 0x1D16, 0x76AD, > - 0x3BDB, 0x5664, 0x4E74, 0x1E14, 0xDB92, 0x0A0C, 0x6C48, 0xE4B8, > - 0x5D9F, 0x6EBD, 0xEF43, 0xA6C4, 0xA839, 0xA431, 0x37D3, 0x8BF2, > - 0x32D5, 0x438B, 0x596E, 0xB7DA, 0x8C01, 0x64B1, 0xD29C, 0xE049, > - 0xB4D8, 0xFAAC, 0x07F3, 0x25CF, 0xAFCA, 0x8EF4, 0xE947, 0x1810, > - 0xD56F, 0x88F0, 0x6F4A, 0x725C, 0x2438, 0xF157, 0xC773, 0x5197, > - 0x23CB, 0x7CA1, 0x9CE8, 0x213E, 0xDD96, 0xDC61, 0x860D, 0x850F, > - 0x90E0, 0x427C, 0xC471, 0xAACC, 0xD890, 0x0506, 0x01F7, 0x121C, > - 0xA3C2, 0x5F6A, 0xF9AE, 0xD069, 0x9117, 0x5899, 0x273A, 0xB927, > - 0x38D9, 0x13EB, 0xB32B, 0x3322, 0xBBD2, 0x70A9, 0x8907, 0xA733, > - 0xB62D, 0x223C, 0x9215, 0x20C9, 0x4987, 0xFFAA, 0x7850, 0x7AA5, > - 0x8F03, 0xF859, 0x8009, 0x171A, 0xDA65, 0x31D7, 0xC684, 0xB8D0, > - 0xC382, 0xB029, 0x775A, 0x111E, 0xCB7B, 0xFCA8, 0xD66D, 0x3A2C, > - } > -}; > - > -/ > - ********************************************************************** > - * Routine: Phase 1 -- generate P1K, given TA, TK, IV32 > - * > - * Inputs: > - * tk[] = temporal key [128 bits] > - * ta[] = transmitter's MAC address [ 48 bits] > - * iv32 = upper 32 bits of IV [ 32 bits] > - * Output: > - * p1k[] = Phase 1 key [ 80 bits] > - * > - * Note: > - * This function only needs to be called every 216 packets, > - * although in theory it could be called every packet. > - * > - ********************************************************************** > - */ > -static void phase1(u16 *p1k, const u8 *tk, const u8 ta, u32 iv32) > -{ > - sint i; > - > - / Initialize the 80 bits of P1K[] from IV32 and TA[0..5] / > - p1k[0] = Lo16(iv32); > - p1k[1] = Hi16(iv32); > - p1k[2] = Mk16(ta[1], ta[0]); / use TA[] as little-endian / > - p1k[3] = Mk16(ta[3], ta[2]); > - p1k[4] = Mk16(ta[5], ta[4]); > - / Now compute an unbalanced Feistel cipher with 80-bit block / > - / size on the 80-bit block P1K[], using the 128-bit key TK[] / > - for (i = 0; i < PHASE1_LOOP_CNT; i++) { / Each add is mod 216 / > - p1k[0] += S(p1k[4] ^ TK16((i & 1) + 0)); > - p1k[1] += S(p1k[0] ^ TK16((i & 1) + 2)); > - p1k[2] += S(p1k[1] ^ TK16((i & 1) + 4)); > - p1k[3] += S(p1k[2] ^ TK16((i & 1) + 6)); > - p1k[4] += S(p1k[3] ^ TK16((i & 1) + 0)); > - p1k[4] += (unsigned short)i; / avoid "slide attacks" / > - } > -} > - > -/ > - ********************************************************************** > - * Routine: Phase 2 -- generate RC4KEY, given TK, P1K, IV16 > - * > - * Inputs: > - * tk[] = Temporal key [128 bits] > - * p1k[] = Phase 1 output key [ 80 bits] > - * iv16 = low 16 bits of IV counter [ 16 bits] > - * Output: > - * rc4key[] = the key used to encrypt the packet [128 bits] > - * > - * Note: > - * The value {TA,IV32,IV16} for Phase1/Phase2 must be unique > - * across all packets using the same key TK value. Then, for a > - * given value of TK[], this TKIP48 construction guarantees that > - * the final RC4KEY value is unique across all packets. > - * > - * Suggested implementation optimization: if PPK[] is "overlaid" > - * appropriately on RC4KEY[], there is no need for the final > - * for loop below that copies the PPK[] result into RC4KEY[]. > - * > - ********************************************************************** > - */ > -static void phase2(u8 *rc4key, const u8 *tk, const u16 p1k, u16 iv16) > -{ > - sint i; > - u16 PPK[6]; / temporary key for mixing / > - > - / Note: all adds in the PPK[] equations below are mod 2**16 / > - for (i = 0; i < 5; i++) > - PPK[i] = p1k[i]; / first, copy P1K to PPK / > - PPK[5] = p1k[4] + iv16; / next, add in IV16 / > - / Bijective non-linear mixing of the 96 bits of PPK[0..5] / > - PPK[0] += S(PPK[5] ^ TK16(0)); / Mix key in each "round" / > - PPK[1] += S(PPK[0] ^ TK16(1)); > - PPK[2] += S(PPK[1] ^ TK16(2)); > - PPK[3] += S(PPK[2] ^ TK16(3)); > - PPK[4] += S(PPK[3] ^ TK16(4)); > - PPK[5] += S(PPK[4] ^ TK16(5)); / Total # S-box lookups == 6 / > - / Final sweep: bijective, "linear". Rotates kill LSB correlations / > - PPK[0] += RotR1(PPK[5] ^ TK16(6)); > - PPK[1] += RotR1(PPK[0] ^ TK16(7)); / Use all of TK[] in Phase2 / > - PPK[2] += RotR1(PPK[1]); > - PPK[3] += RotR1(PPK[2]); > - PPK[4] += RotR1(PPK[3]); > - PPK[5] += RotR1(PPK[4]); > - / Note: At this point, for a given key TK[0..15], the 96-bit output / > - / value PPK[0..5] is guaranteed to be unique, as a function / > - / of the 96-bit "input" value {TA,IV32,IV16}. That is, P1K / > - / is now a keyed permutation of {TA,IV32,IV16}. / > - / Set RC4KEY[0..3], which includes "cleartext" portion of RC4 key / > - rc4key[0] = Hi8(iv16); / RC4KEY[0..2] is the WEP IV / > - rc4key[1] = (Hi8(iv16) | 0x20) & 0x7F; / Help avoid weak (FMS) keys */ > - rc4key[2] = Lo8(iv16); > - rc4key[3] = Lo8((PPK[5] ^ TK16(0)) >> 1); > > - /* Copy 96 bits of PPK[0..5] to RC4KEY[4..15] (little-endian) */ > - for (i = 0; i < 6; i++) { > - rc4key[4 + 2 * i] = Lo8(PPK[i]); > - rc4key[5 + 2 * i] = Hi8(PPK[i]); > - } > -} > - > -/The hlen isn't include the IV/ > -u32 r8712_tkip_encrypt(struct _adapter *padapter, u8 pxmitframe) > -{ / exclude ICV */ > - u16 pnl; > - u32 pnh; > - u8 rc4key[16]; > - u8 ttkey[16]; > - u8 crc[4]; > - struct arc4context mycontext; > - u32 curfragnum, length; > - > - u8 *pframe, *payload, *iv, *prwskey; > - union pn48 txpn; > - struct sta_info *stainfo; > - struct pkt_attrib *pattrib = &((struct xmit_frame *)pxmitframe)->attrib; > > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - u32 res = _SUCCESS; > - > - if (((struct xmit_frame *)pxmitframe)->buf_addr == NULL) > > - return _FAIL; > - > - pframe = ((struct xmit_frame *)pxmitframe)->buf_addr + TXDESC_OFFSET; > > - /* 4 start to encrypt each fragment */ > - if (pattrib->encrypt == TKIP) { > > - if (pattrib->psta) > > - stainfo = pattrib->psta; > > - else > - stainfo = r8712_get_stainfo(&padapter->stapriv, > > - &pattrib->ra[0]); > > - if (stainfo) { > - prwskey = &stainfo->x_UncstKey.skey[0]; > > - for (curfragnum = 0; curfragnum < pattrib->nr_frags; > > - curfragnum++) { > - iv = pframe + pattrib->hdrlen; > > - payload = pframe + pattrib->iv_len + > > - pattrib->hdrlen; > > - GET_TKIP_PN(iv, txpn); > - pnl = (u16)(txpn.val); > - pnh = (u32)(txpn.val >> 16); > > - phase1((u16 *)&ttkey[0], prwskey, > - &pattrib->ta[0], pnh); > > - phase2(&rc4key[0], prwskey, (u16 *)&ttkey[0], > - pnl); > - if ((curfragnum + 1) == pattrib->nr_frags) { > > - /* 4 the last fragment */ > - length = pattrib->last_txcmdsz - > > - pattrib->hdrlen - > > - pattrib->iv_len - > > - pattrib->icv_len; > > - *((__le32 *)crc) = cpu_to_le32( > - getcrc32(payload, length)); > - arcfour_init(&mycontext, rc4key, 16); > - arcfour_encrypt(&mycontext, payload, > - payload, length); > - arcfour_encrypt(&mycontext, payload + > - length, crc, 4); > - } else { > - length = pxmitpriv->frag_len - > > - pattrib->hdrlen - > > - pattrib->iv_len - > > - pattrib->icv_len; > > - *((__le32 *)crc) = cpu_to_le32(getcrc32( > - payload, length)); > - arcfour_init(&mycontext, rc4key, 16); > - arcfour_encrypt(&mycontext, payload, > - payload, length); > - arcfour_encrypt(&mycontext, > - payload + length, crc, > - 4); > - pframe += pxmitpriv->frag_len; > > - pframe = (u8 )RND4((addr_t)(pframe)); > - } > - } > - } else { > - res = _FAIL; > - } > - } > - return res; > -} > - > -/ The hlen doesn't include the IV */ > -void r8712_tkip_decrypt(struct _adapter *padapter, u8 precvframe) > -{ / exclude ICV */ > - u16 pnl; > - u32 pnh; > - u8 rc4key[16]; > - u8 ttkey[16]; > - u8 crc[4]; > - struct arc4context mycontext; > - u32 length; > - u8 *pframe, *payload, *iv, *prwskey, idx = 0; > - union pn48 txpn; > - struct sta_info *stainfo; > - struct rx_pkt_attrib *prxattrib = &((union recv_frame *) > - precvframe)->u.hdr.attrib; > > - struct security_priv *psecuritypriv = &padapter->securitypriv; > > - > - pframe = (unsigned char *)((union recv_frame *) > - precvframe)->u.hdr.rx_data; > > - /* 4 start to decrypt recvframe */ > - if (prxattrib->encrypt == TKIP) { > > - stainfo = r8712_get_stainfo(&padapter->stapriv, > > - &prxattrib->ta[0]); > > - if (stainfo) { > - iv = pframe + prxattrib->hdrlen; > > - payload = pframe + prxattrib->iv_len + > > - prxattrib->hdrlen; > > - length = ((union recv_frame *)precvframe)-> > > - u.hdr.len - prxattrib->hdrlen - > > - prxattrib->iv_len; > > - if (is_multicast_ether_addr(prxattrib->ra)) { > > - idx = iv[3]; > - prwskey = &psecuritypriv->XGrpKey[ > > - ((idx >> 6) & 0x3) - 1].skey[0]; > > - if (!psecuritypriv->binstallGrpkey) > > - return; > - } else { > - prwskey = &stainfo->x_UncstKey.skey[0]; > > - } > - GET_TKIP_PN(iv, txpn); > - pnl = (u16)(txpn.val); > - pnh = (u32)(txpn.val >> 16); > > - phase1((u16 *)&ttkey[0], prwskey, &prxattrib->ta[0], > > - pnh); > - phase2(&rc4key[0], prwskey, (unsigned short ) > - &ttkey[0], pnl); > - / 4 decrypt payload include icv / > - arcfour_init(&mycontext, rc4key, 16); > - arcfour_encrypt(&mycontext, payload, payload, length); > - ((__le32 )crc) = cpu_to_le32(getcrc32(payload, > - length - 4)); > - } > - } > -} > - > -/ 3 =====AES related===== / > - > -#define MAX_MSG_SIZE 2048 > -/*/ > -/ SBOX Table / > -// > - > -static const u8 sbox_table[256] = { > - 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, > - 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, > - 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, > - 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, > - 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, > - 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, > - 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, > - 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, > - 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, > - 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, > - 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, > - 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, > - 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, > - 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, > - 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, > - 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, > - 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, > - 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, > - 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, > - 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, > - 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, > - 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, > - 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, > - 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, > - 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, > - 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, > - 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, > - 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, > - 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, > - 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, > - 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, > - 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 > -}; > - > -// > -/ aes128k128d() / > -/ Performs a 128 bit AES encrypt with / > -/ 128 bit data. / > -/***/ > -static void xor_128(u8 *a, u8 *b, u8 *out) > -{ > - sint i; > - > - for (i = 0; i < 16; i++) > - out[i] = a[i] ^ b[i]; > -} > - > -static void xor_32(u8 *a, u8 *b, u8 *out) > -{ > - sint i; > - > - for (i = 0; i < 4; i++) > - out[i] = a[i] ^ b[i]; > -} > - > -static u8 sbox(u8 a) > -{ > - return sbox_table[(sint)a]; > -} > - > -static void next_key(u8 *key, sint round) > -{ > - u8 rcon; > - u8 sbox_key[4]; > - static const u8 rcon_table[12] = { > - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, > - 0x1b, 0x36, 0x36, 0x36 > - }; > - > - sbox_key[0] = sbox(key[13]); > - sbox_key[1] = sbox(key[14]); > - sbox_key[2] = sbox(key[15]); > - sbox_key[3] = sbox(key[12]); > - rcon = rcon_table[round]; > - xor_32(&key[0], sbox_key, &key[0]); > - key[0] = key[0] ^ rcon; > - xor_32(&key[4], &key[0], &key[4]); > - xor_32(&key[8], &key[4], &key[8]); > - xor_32(&key[12], &key[8], &key[12]); > -} > - > -static void byte_sub(u8 *in, u8 *out) > -{ > - sint i; > - > - for (i = 0; i < 16; i++) > - out[i] = sbox(in[i]); > -} > - > -static void shift_row(u8 *in, u8 *out) > -{ > - out[0] = in[0]; > - out[1] = in[5]; > - out[2] = in[10]; > - out[3] = in[15]; > - out[4] = in[4]; > - out[5] = in[9]; > - out[6] = in[14]; > - out[7] = in[3]; > - out[8] = in[8]; > - out[9] = in[13]; > - out[10] = in[2]; > - out[11] = in[7]; > - out[12] = in[12]; > - out[13] = in[1]; > - out[14] = in[6]; > - out[15] = in[11]; > -} > - > -static void mix_column(u8 *in, u8 out) > -{ > - sint i; > - u8 add1b[4]; > - u8 add1bf7[4]; > - u8 rotl[4]; > - u8 swap_halves[4]; > - u8 andf7[4]; > - u8 rotr[4]; > - u8 temp[4]; > - u8 tempb[4]; > - > - for (i = 0; i < 4; i++) { > - if ((in[i] & 0x80) == 0x80) > - add1b[i] = 0x1b; > - else > - add1b[i] = 0x00; > - } > - swap_halves[0] = in[2]; / Swap halves / > - swap_halves[1] = in[3]; > - swap_halves[2] = in[0]; > - swap_halves[3] = in[1]; > - rotl[0] = in[3]; / Rotate left 8 bits / > - rotl[1] = in[0]; > - rotl[2] = in[1]; > - rotl[3] = in[2]; > - andf7[0] = in[0] & 0x7f; > - andf7[1] = in[1] & 0x7f; > - andf7[2] = in[2] & 0x7f; > - andf7[3] = in[3] & 0x7f; > - for (i = 3; i > 0; i--) { / logical shift left 1 bit */ > > - andf7[i] = andf7[i] << 1; > - if ((andf7[i - 1] & 0x80) == 0x80) > - andf7[i] = (andf7[i] | 0x01); > - } > - andf7[0] = andf7[0] << 1; > - andf7[0] = andf7[0] & 0xfe; > - xor_32(add1b, andf7, add1bf7); > - xor_32(in, add1bf7, rotr); > - temp[0] = rotr[0]; /* Rotate right 8 bits / > - rotr[0] = rotr[1]; > - rotr[1] = rotr[2]; > - rotr[2] = rotr[3]; > - rotr[3] = temp[0]; > - xor_32(add1bf7, rotr, temp); > - xor_32(swap_halves, rotl, tempb); > - xor_32(temp, tempb, out); > -} > - > -static void aes128k128d(u8 key, u8 data, u8 ciphertext) > -{ > - sint round; > - sint i; > - u8 intermediatea[16]; > - u8 intermediateb[16]; > - u8 round_key[16]; > - > - for (i = 0; i < 16; i++) > - round_key[i] = key[i]; > - for (round = 0; round < 11; round++) { > - if (round == 0) { > - xor_128(round_key, data, ciphertext); > - next_key(round_key, round); > - } else if (round == 10) { > - byte_sub(ciphertext, intermediatea); > - shift_row(intermediatea, intermediateb); > - xor_128(intermediateb, round_key, ciphertext); > - } else { / 1 - 9 / > - byte_sub(ciphertext, intermediatea); > - shift_row(intermediatea, intermediateb); > - mix_column(&intermediateb[0], &intermediatea[0]); > - mix_column(&intermediateb[4], &intermediatea[4]); > - mix_column(&intermediateb[8], &intermediatea[8]); > - mix_column(&intermediateb[12], &intermediatea[12]); > - xor_128(intermediatea, round_key, ciphertext); > - next_key(round_key, round); > - } > - } > -} > - > -// > -/ construct_mic_iv() / > -/ Builds the MIC IV from header fields and PN / > -// > -static void construct_mic_iv(u8 mic_iv, sint qc_exists, sint a4_exists, > - u8 mpdu, uint payload_length, u8 pn_vector) > -{ > - sint i; > - > - mic_iv[0] = 0x59; > - if (qc_exists && a4_exists) > - mic_iv[1] = mpdu[30] & 0x0f; / QoS_TC / > - if (qc_exists && !a4_exists) > - mic_iv[1] = mpdu[24] & 0x0f; / mute bits 7-4 / > - if (!qc_exists) > - mic_iv[1] = 0x00; > - for (i = 2; i < 8; i++) > - mic_iv[i] = mpdu[i + 8]; > - for (i = 8; i < 14; i++) > - mic_iv[i] = pn_vector[13 - i]; / mic_iv[8:13] = PN[5:0] / > - mic_iv[14] = (unsigned char)(payload_length / 256); > - mic_iv[15] = (unsigned char)(payload_length % 256); > -} > - > -// > -/ construct_mic_header1() / > -/ Builds the first MIC header block from / > -/ header fields. / > -// > -static void construct_mic_header1(u8 mic_header1, sint header_length, u8 mpdu) > -{ > - mic_header1[0] = (u8)((header_length - 2) / 256); > - mic_header1[1] = (u8)((header_length - 2) % 256); > - mic_header1[2] = mpdu[0] & 0xcf; / Mute CF poll & CF ack bits / > - / Mute retry, more data and pwr mgt bits / > - mic_header1[3] = mpdu[1] & 0xc7; > - mic_header1[4] = mpdu[4]; / A1 / > - mic_header1[5] = mpdu[5]; > - mic_header1[6] = mpdu[6]; > - mic_header1[7] = mpdu[7]; > - mic_header1[8] = mpdu[8]; > - mic_header1[9] = mpdu[9]; > - mic_header1[10] = mpdu[10]; / A2 / > - mic_header1[11] = mpdu[11]; > - mic_header1[12] = mpdu[12]; > - mic_header1[13] = mpdu[13]; > - mic_header1[14] = mpdu[14]; > - mic_header1[15] = mpdu[15]; > -} > - > -// > -/ construct_mic_header2() / > -/ Builds the last MIC header block from / > -/ header fields. / > -// > -static void construct_mic_header2(u8 mic_header2, u8 mpdu, sint a4_exists, > - sint qc_exists) > -{ > - sint i; > - > - for (i = 0; i < 16; i++) > - mic_header2[i] = 0x00; > - mic_header2[0] = mpdu[16]; / A3 / > - mic_header2[1] = mpdu[17]; > - mic_header2[2] = mpdu[18]; > - mic_header2[3] = mpdu[19]; > - mic_header2[4] = mpdu[20]; > - mic_header2[5] = mpdu[21]; > - mic_header2[6] = 0x00; > - mic_header2[7] = 0x00; / mpdu[23]; / > - if (!qc_exists && a4_exists) > - for (i = 0; i < 6; i++) > - mic_header2[8 + i] = mpdu[24 + i]; / A4 / > - if (qc_exists && !a4_exists) { > - mic_header2[8] = mpdu[24] & 0x0f; / mute bits 15 - 4 / > - mic_header2[9] = mpdu[25] & 0x00; > - } > - if (qc_exists && a4_exists) { > - for (i = 0; i < 6; i++) > - mic_header2[8 + i] = mpdu[24 + i]; / A4 / > - mic_header2[14] = mpdu[30] & 0x0f; > - mic_header2[15] = mpdu[31] & 0x00; > - } > -} > - > -// > -/ construct_mic_header2() / > -/ Builds the last MIC header block from / > -/ header fields. / > -// > -static void construct_ctr_preload(u8 ctr_preload, > - sint a4_exists, sint qc_exists, > - u8 mpdu, u8 pn_vector, sint c) > -{ > - sint i; > - > - for (i = 0; i < 16; i++) > - ctr_preload[i] = 0x00; > - i = 0; > - ctr_preload[0] = 0x01; / flag / > - if (qc_exists && a4_exists) > - ctr_preload[1] = mpdu[30] & 0x0f; > - if (qc_exists && !a4_exists) > - ctr_preload[1] = mpdu[24] & 0x0f; > - for (i = 2; i < 8; i++) > - ctr_preload[i] = mpdu[i + 8]; > - for (i = 8; i < 14; i++) > - ctr_preload[i] = pn_vector[13 - i]; > - ctr_preload[14] = (unsigned char)(c / 256); / Ctr / > - ctr_preload[15] = (unsigned char)(c % 256); > -} > - > -// > -/ bitwise_xor() / > -/ A 128 bit, bitwise exclusive or / > -/**************/ > -static void bitwise_xor(u8 *ina, u8 *inb, u8 *out) > -{ > - sint i; > - > - for (i = 0; i < 16; i++) > - out[i] = ina[i] ^ inb[i]; > -} > - > -static void aes_cipher(u8 *key, uint hdrlen, > - u8 pframe, uint plen) > -{ > - uint qc_exists, a4_exists, i, j, payload_remainder; > - uint num_blocks, payload_index; > - > - u8 pn_vector[6]; > - u8 mic_iv[16]; > - u8 mic_header1[16]; > - u8 mic_header2[16]; > - u8 ctr_preload[16]; > - > - / Intermediate Buffers */ > - u8 chain_buffer[16]; > - u8 aes_out[16]; > - u8 padded_buffer[16]; > - u8 mic[8]; > - u16 frtype = GetFrameType(pframe); > - u16 frsubtype = GetFrameSubType(pframe); > - > - frsubtype >>= 4; > > - memset((void *)mic_iv, 0, 16); > - memset((void *)mic_header1, 0, 16); > - memset((void *)mic_header2, 0, 16); > - memset((void *)ctr_preload, 0, 16); > - memset((void *)chain_buffer, 0, 16); > - memset((void *)aes_out, 0, 16); > - memset((void )padded_buffer, 0, 16); > - > - if ((hdrlen == WLAN_HDR_A3_LEN) || (hdrlen == WLAN_HDR_A3_QOS_LEN)) > - a4_exists = 0; > - else > - a4_exists = 1; > - > - if ((frtype == (IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA_CFACK)) || > - (frtype == (IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA_CFPOLL)) || > - (frtype == (IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA_CFACKPOLL))) { > - qc_exists = 1; > - if (hdrlen != WLAN_HDR_A3_QOS_LEN) > - hdrlen += 2; > - } else if ((frsubtype == 0x08) || > - (frsubtype == 0x09) || > - (frsubtype == 0x0a) || > - (frsubtype == 0x0b)) { > - if (hdrlen != WLAN_HDR_A3_QOS_LEN) > - hdrlen += 2; > - qc_exists = 1; > - } else { > - qc_exists = 0; > - } > - pn_vector[0] = pframe[hdrlen]; > - pn_vector[1] = pframe[hdrlen + 1]; > - pn_vector[2] = pframe[hdrlen + 4]; > - pn_vector[3] = pframe[hdrlen + 5]; > - pn_vector[4] = pframe[hdrlen + 6]; > - pn_vector[5] = pframe[hdrlen + 7]; > - construct_mic_iv(mic_iv, qc_exists, a4_exists, pframe, plen, pn_vector); > - construct_mic_header1(mic_header1, hdrlen, pframe); > - construct_mic_header2(mic_header2, pframe, a4_exists, qc_exists); > - payload_remainder = plen % 16; > - num_blocks = plen / 16; > - / Find start of payload / > - payload_index = hdrlen + 8; > - / Calculate MIC / > - aes128k128d(key, mic_iv, aes_out); > - bitwise_xor(aes_out, mic_header1, chain_buffer); > - aes128k128d(key, chain_buffer, aes_out); > - bitwise_xor(aes_out, mic_header2, chain_buffer); > - aes128k128d(key, chain_buffer, aes_out); > - for (i = 0; i < num_blocks; i++) { > - bitwise_xor(aes_out, &pframe[payload_index], chain_buffer); > - payload_index += 16; > - aes128k128d(key, chain_buffer, aes_out); > - } > - / Add on the final payload block if it needs padding */ > - if (payload_remainder > 0) { > > - for (j = 0; j < 16; j++) > - padded_buffer[j] = 0x00; > - for (j = 0; j < payload_remainder; j++) > - padded_buffer[j] = pframe[payload_index++]; > - bitwise_xor(aes_out, padded_buffer, chain_buffer); > - aes128k128d(key, chain_buffer, aes_out); > - } > - for (j = 0; j < 8; j++) > - mic[j] = aes_out[j]; > - /* Insert MIC into payload / > - for (j = 0; j < 8; j++) > - pframe[payload_index + j] = mic[j]; > - payload_index = hdrlen + 8; > - for (i = 0; i < num_blocks; i++) { > - construct_ctr_preload(ctr_preload, a4_exists, qc_exists, > - pframe, pn_vector, i + 1); > - aes128k128d(key, ctr_preload, aes_out); > - bitwise_xor(aes_out, &pframe[payload_index], chain_buffer); > - for (j = 0; j < 16; j++) > - pframe[payload_index++] = chain_buffer[j]; > - } > - if (payload_remainder > 0) { / If short final block, then pad it,*/ > > - /* encrypt and copy unpadded part back / > - construct_ctr_preload(ctr_preload, a4_exists, qc_exists, > - pframe, pn_vector, num_blocks + 1); > - for (j = 0; j < 16; j++) > - padded_buffer[j] = 0x00; > - for (j = 0; j < payload_remainder; j++) > - padded_buffer[j] = pframe[payload_index + j]; > - aes128k128d(key, ctr_preload, aes_out); > - bitwise_xor(aes_out, padded_buffer, chain_buffer); > - for (j = 0; j < payload_remainder; j++) > - pframe[payload_index++] = chain_buffer[j]; > - } > - / Encrypt the MIC */ > - construct_ctr_preload(ctr_preload, a4_exists, qc_exists, > - pframe, pn_vector, 0); > - for (j = 0; j < 16; j++) > - padded_buffer[j] = 0x00; > - for (j = 0; j < 8; j++) > - padded_buffer[j] = pframe[j + hdrlen + 8 + plen]; > - aes128k128d(key, ctr_preload, aes_out); > - bitwise_xor(aes_out, padded_buffer, chain_buffer); > - for (j = 0; j < 8; j++) > - pframe[payload_index++] = chain_buffer[j]; > -} > - > -u32 r8712_aes_encrypt(struct _adapter *padapter, u8 pxmitframe) > -{ / exclude ICV / > - / Intermediate Buffers */ > - sint curfragnum, length; > - u8 *pframe, *prwskey; > - struct sta_info *stainfo; > - struct pkt_attrib *pattrib = &((struct xmit_frame *) > - pxmitframe)->attrib; > > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - u32 res = _SUCCESS; > - > - if (((struct xmit_frame *)pxmitframe)->buf_addr == NULL) > > - return _FAIL; > - pframe = ((struct xmit_frame *)pxmitframe)->buf_addr + TXDESC_OFFSET; > > - /* 4 start to encrypt each fragment */ > - if (pattrib->encrypt == AES) { > > - if (pattrib->psta) > > - stainfo = pattrib->psta; > > - else > - stainfo = r8712_get_stainfo(&padapter->stapriv, > > - &pattrib->ra[0]); > > - if (stainfo) { > - prwskey = &stainfo->x_UncstKey.skey[0]; > > - for (curfragnum = 0; curfragnum < pattrib->nr_frags; > > - curfragnum++) { > - if ((curfragnum + 1) == pattrib->nr_frags) { > > - length = pattrib->last_txcmdsz - > > - pattrib->hdrlen - > > - pattrib->iv_len - > > - pattrib->icv_len; > > - aes_cipher(prwskey, pattrib->hdrlen, > > - pframe, length); > - } else { > - length = pxmitpriv->frag_len - > > - pattrib->hdrlen - > > - pattrib->iv_len - > > - pattrib->icv_len; > > - aes_cipher(prwskey, pattrib->hdrlen, > > - pframe, length); > - pframe += pxmitpriv->frag_len; > > - pframe = (u8 *)RND4((addr_t)(pframe)); > - } > - } > - } else { > - res = _FAIL; > - } > - } > - return res; > -} > - > -static void aes_decipher(u8 *key, uint hdrlen, > - u8 pframe, uint plen) > -{ > - static u8 message[MAX_MSG_SIZE]; > - uint qc_exists, a4_exists, i, j, payload_remainder; > - uint num_blocks, payload_index; > - u8 pn_vector[6]; > - u8 mic_iv[16]; > - u8 mic_header1[16]; > - u8 mic_header2[16]; > - u8 ctr_preload[16]; > - / Intermediate Buffers */ > - u8 chain_buffer[16]; > - u8 aes_out[16]; > - u8 padded_buffer[16]; > - u8 mic[8]; > - uint frtype = GetFrameType(pframe); > - uint frsubtype = GetFrameSubType(pframe); > - > - frsubtype >>= 4; > > - memset((void *)mic_iv, 0, 16); > - memset((void *)mic_header1, 0, 16); > - memset((void *)mic_header2, 0, 16); > - memset((void *)ctr_preload, 0, 16); > - memset((void *)chain_buffer, 0, 16); > - memset((void )aes_out, 0, 16); > - memset((void )padded_buffer, 0, 16); > - / start to decrypt the payload / > - /(plen including llc, payload and mic) / > - num_blocks = (plen - 8) / 16; > - payload_remainder = (plen - 8) % 16; > - pn_vector[0] = pframe[hdrlen]; > - pn_vector[1] = pframe[hdrlen + 1]; > - pn_vector[2] = pframe[hdrlen + 4]; > - pn_vector[3] = pframe[hdrlen + 5]; > - pn_vector[4] = pframe[hdrlen + 6]; > - pn_vector[5] = pframe[hdrlen + 7]; > - if ((hdrlen == WLAN_HDR_A3_LEN) || (hdrlen == WLAN_HDR_A3_QOS_LEN)) > - a4_exists = 0; > - else > - a4_exists = 1; > - if ((frtype == (IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA_CFACK)) || > - (frtype == (IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA_CFPOLL)) || > - (frtype == (IEEE80211_FTYPE_DATA | IEEE80211_STYPE_DATA_CFACKPOLL))) { > - qc_exists = 1; > - if (hdrlen != WLAN_HDR_A3_QOS_LEN) > - hdrlen += 2; > - } else if ((frsubtype == 0x08) || > - (frsubtype == 0x09) || > - (frsubtype == 0x0a) || > - (frsubtype == 0x0b)) { > - if (hdrlen != WLAN_HDR_A3_QOS_LEN) > - hdrlen += 2; > - qc_exists = 1; > - } else { > - qc_exists = 0; > - } > - / now, decrypt pframe with hdrlen offset and plen long / > - payload_index = hdrlen + 8; / 8 is for extiv / > - for (i = 0; i < num_blocks; i++) { > - construct_ctr_preload(ctr_preload, a4_exists, qc_exists, > - pframe, pn_vector, i + 1); > - aes128k128d(key, ctr_preload, aes_out); > - bitwise_xor(aes_out, &pframe[payload_index], chain_buffer); > - for (j = 0; j < 16; j++) > - pframe[payload_index++] = chain_buffer[j]; > - } > - if (payload_remainder > 0) { / If short final block, pad it,/ > > - /* encrypt it and copy the unpadded part back / > - construct_ctr_preload(ctr_preload, a4_exists, qc_exists, > - pframe, pn_vector, num_blocks + 1); > - for (j = 0; j < 16; j++) > - padded_buffer[j] = 0x00; > - for (j = 0; j < payload_remainder; j++) > - padded_buffer[j] = pframe[payload_index + j]; > - aes128k128d(key, ctr_preload, aes_out); > - bitwise_xor(aes_out, padded_buffer, chain_buffer); > - for (j = 0; j < payload_remainder; j++) > - pframe[payload_index++] = chain_buffer[j]; > - } > - / start to calculate the mic */ > - memcpy((void )message, pframe, (hdrlen + plen + 8)); > - pn_vector[0] = pframe[hdrlen]; > - pn_vector[1] = pframe[hdrlen + 1]; > - pn_vector[2] = pframe[hdrlen + 4]; > - pn_vector[3] = pframe[hdrlen + 5]; > - pn_vector[4] = pframe[hdrlen + 6]; > - pn_vector[5] = pframe[hdrlen + 7]; > - construct_mic_iv(mic_iv, qc_exists, a4_exists, message, plen - 8, > - pn_vector); > - construct_mic_header1(mic_header1, hdrlen, message); > - construct_mic_header2(mic_header2, message, a4_exists, qc_exists); > - payload_remainder = (plen - 8) % 16; > - num_blocks = (plen - 8) / 16; > - / Find start of payload / > - payload_index = hdrlen + 8; > - / Calculate MIC / > - aes128k128d(key, mic_iv, aes_out); > - bitwise_xor(aes_out, mic_header1, chain_buffer); > - aes128k128d(key, chain_buffer, aes_out); > - bitwise_xor(aes_out, mic_header2, chain_buffer); > - aes128k128d(key, chain_buffer, aes_out); > - for (i = 0; i < num_blocks; i++) { > - bitwise_xor(aes_out, &message[payload_index], chain_buffer); > - payload_index += 16; > - aes128k128d(key, chain_buffer, aes_out); > - } > - / Add on the final payload block if it needs padding */ > - if (payload_remainder > 0) { > > - for (j = 0; j < 16; j++) > - padded_buffer[j] = 0x00; > - for (j = 0; j < payload_remainder; j++) > - padded_buffer[j] = message[payload_index++]; > - bitwise_xor(aes_out, padded_buffer, chain_buffer); > - aes128k128d(key, chain_buffer, aes_out); > - } > - for (j = 0; j < 8; j++) > - mic[j] = aes_out[j]; > - /* Insert MIC into payload / > - for (j = 0; j < 8; j++) > - message[payload_index + j] = mic[j]; > - payload_index = hdrlen + 8; > - for (i = 0; i < num_blocks; i++) { > - construct_ctr_preload(ctr_preload, a4_exists, qc_exists, > - message, pn_vector, i + 1); > - aes128k128d(key, ctr_preload, aes_out); > - bitwise_xor(aes_out, &message[payload_index], chain_buffer); > - for (j = 0; j < 16; j++) > - message[payload_index++] = chain_buffer[j]; > - } > - if (payload_remainder > 0) { / If short final block, pad it,*/ > > - /* encrypt and copy unpadded part back / > - construct_ctr_preload(ctr_preload, a4_exists, qc_exists, > - message, pn_vector, num_blocks + 1); > - for (j = 0; j < 16; j++) > - padded_buffer[j] = 0x00; > - for (j = 0; j < payload_remainder; j++) > - padded_buffer[j] = message[payload_index + j]; > - aes128k128d(key, ctr_preload, aes_out); > - bitwise_xor(aes_out, padded_buffer, chain_buffer); > - for (j = 0; j < payload_remainder; j++) > - message[payload_index++] = chain_buffer[j]; > - } > - / Encrypt the MIC / > - construct_ctr_preload(ctr_preload, a4_exists, qc_exists, message, > - pn_vector, 0); > - for (j = 0; j < 16; j++) > - padded_buffer[j] = 0x00; > - for (j = 0; j < 8; j++) > - padded_buffer[j] = message[j + hdrlen + plen]; > - aes128k128d(key, ctr_preload, aes_out); > - bitwise_xor(aes_out, padded_buffer, chain_buffer); > - for (j = 0; j < 8; j++) > - message[payload_index++] = chain_buffer[j]; > - / compare the mic */ > -} > - > -void r8712_aes_decrypt(struct _adapter *padapter, u8 precvframe) > -{ / exclude ICV / > - / Intermediate Buffers */ > - sint length; > - u8 *pframe, *prwskey, *iv, idx; > - struct sta_info *stainfo; > - struct rx_pkt_attrib *prxattrib = &((union recv_frame *) > - precvframe)->u.hdr.attrib; > > - struct security_priv *psecuritypriv = &padapter->securitypriv; > > - > - pframe = (unsigned char *)((union recv_frame *)precvframe)-> > > - u.hdr.rx_data; > - /* 4 start to encrypt each fragment */ > - if (prxattrib->encrypt == AES) { > > - stainfo = r8712_get_stainfo(&padapter->stapriv, > > - &prxattrib->ta[0]); > > - if (stainfo) { > - if (is_multicast_ether_addr(prxattrib->ra)) { > > - iv = pframe + prxattrib->hdrlen; > > - idx = iv[3]; > - prwskey = &psecuritypriv->XGrpKey[ > > - ((idx >> 6) & 0x3) - 1].skey[0]; > > - if (!psecuritypriv->binstallGrpkey) > > - return; > - > - } else { > - prwskey = &stainfo->x_UncstKey.skey[0]; > > - } > - length = ((union recv_frame *)precvframe)-> > > - u.hdr.len - prxattrib->hdrlen - > > - prxattrib->iv_len; > > - aes_decipher(prwskey, prxattrib->hdrlen, pframe, > > - length); > - } > - } > -} > - > -void r8712_use_tkipkey_handler(struct timer_list *t) > -{ > - struct _adapter *padapter = > - from_timer(padapter, t, securitypriv.tkip_timer); > - > - padapter->securitypriv.busetkipkey = true; > > -} > diff --git a/drivers/staging/rtl8712/rtl871x_security.h b/drivers/staging/rtl8712/rtl871x_security.h > deleted file mode 100644 > index 34e5aecf92ae..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_security.h > +++ /dev/null > @@ -1,223 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > -#ifndef _RTL871X_SECURITY_H > -#define _RTL871X_SECURITY_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > - > -#define NO_PRIVACY 0x0 > -#define WEP40 0x1 > -#define TKIP 0x2 > -#define TKIP_WTMIC 0x3 > -#define AES 0x4 > -#define WEP104 0x5 > - > -#define AUTH_OPEN_SYSTEM 0x0 > -#define AUTH_SHARED_SYSTEM 0x1 > -#define AUTH_8021x 0x2 > -#define AUTH_AUTHSWITCH 0x3 > - > -#define WPA_IE_ID 0xdd > -#define WPA2_IE_ID 0x30 > - > -#ifndef Ndis802_11AuthModeWPA2 > -#define Ndis802_11AuthModeWPA2 (Ndis802_11AuthModeWPANone + 1) > -#endif > - > -#ifndef Ndis802_11AuthModeWPA2PSK > -#define Ndis802_11AuthModeWPA2PSK (Ndis802_11AuthModeWPANone + 2) > -#endif > - > -union pn48 { > - u64 val; > -#if defined(__BIG_ENDIAN) > - struct { > - u8 TSC7; > - u8 TSC6; > - u8 TSC5; > - u8 TSC4; > - u8 TSC3; > - u8 TSC2; > - u8 TSC1; > - u8 TSC0; > - } byte; > -#else > - struct { > - u8 TSC0; > - u8 TSC1; > - u8 TSC2; > - u8 TSC3; > - u8 TSC4; > - u8 TSC5; > - u8 TSC6; > - u8 TSC7; > - } byte; > -#endif > -}; > - > -union Keytype { > - u8 skey[16]; > - u32 lkey[4]; > -}; > - > -struct RT_PMKID_LIST { > - u8 bUsed; > - u8 Bssid[6]; > - u8 PMKID[16]; > - u8 SsidBuf[33]; > - u8 ssid_octet; > - u16 ssid_length; > -}; > - > -struct security_priv { > - u32 auth_algorithm; / 802.11 auth, could be open, shared, > - * 8021x and authswitch > - / > - u32 privacy_algorithm; / This specify the privacy for shared > - * auth. algorithm. > - / > - u32 PrivacyKeyIndex; / this is only valid for legendary > - * wep, 0~3 for key id. > - / > - union Keytype DefKey[4]; / this is only valid for def. key / > - u32 DefKeylen[4]; > - u32 XGrpPrivacy; / This specify the privacy algthm. > - * used for Grp key > - / > - u32 XGrpKeyid; / key id used for Grp Key / > - union Keytype XGrpKey[2]; / 802.1x Group Key, for > - * inx0 and inx1 > - / > - union Keytype XGrptxmickey[2]; > - union Keytype XGrprxmickey[2]; > - union pn48 Grptxpn; / PN48 used for Grp Key xmit. / > - union pn48 Grprxpn; / PN48 used for Grp Key recv. / > - u8 wps_hw_pbc_pressed;/for hw pbc pressed/ > - u8 wps_phase;/for wps/ > - u8 wps_ie[MAX_WPA_IE_LEN << 2]; > - int wps_ie_len; > - u8 binstallGrpkey; > - u8 busetkipkey; > - struct timer_list tkip_timer; > - u8 bcheck_grpkey; > - u8 bgrpkey_handshake; > - s32 sw_encrypt; / from registry_priv / > - s32 sw_decrypt; / from registry_priv / > - s32 hw_decrypted; / if the rx packets is hw_decrypted==false, > - * it means the hw has not been ready. > - / > - u32 ndisauthtype; / keeps the auth_type & enc_status from upper > - * layer ioctl(wpa_supplicant or wzc) > - / > - u32 ndisencryptstatus; > - struct wlan_bssid_ex sec_bss; / for joinbss (h2c buffer) usage / > - struct NDIS_802_11_WEP ndiswep; > - u8 assoc_info[600]; > - u8 szofcapability[256]; / for wpa2 usage / > - u8 oidassociation[512]; / for wpa/wpa2 usage / > - u8 authenticator_ie[256]; / store ap security information element / > - u8 supplicant_ie[256]; / store sta security information element / > - / for tkip countermeasure / > - u32 last_mic_err_time; > - u8 btkip_countermeasure; > - u8 btkip_wait_report; > - u32 btkip_countermeasure_time; > - /------------------------------------------------------------------- > - * For WPA2 Pre-Authentication. > - *------------------------------------------------------------------ > - **/ > - struct RT_PMKID_LIST PMKIDList[NUM_PMKID_CACHE]; > - u8 PMKIDIndex; > -}; > - > -#define GET_ENCRY_ALGO(psecuritypriv, psta, encry_algo, bmcst) \ > -do { \ > - switch (psecuritypriv->auth_algorithm) { \ > > - case 0: \ > - case 1: \ > - case 3: \ > - encry_algo = (u8)psecuritypriv->privacy_algorithm; \ > > - break; \ > - case 2: \ > - if (bmcst) \ > - encry_algo = (u8)psecuritypriv->XGrpPrivacy; \ > > - else \ > - encry_algo = (u8)psta->XPrivacy; \ > > - break; \ > - } \ > -} while (0) > -#define SET_ICE_IV_LEN(iv_len, icv_len, encrypt)\ > -do {\ > - switch (encrypt) { \ > - case WEP40: \ > - case WEP104: \ > - iv_len = 4; \ > - icv_len = 4; \ > - break; \ > - case TKIP: \ > - iv_len = 8; \ > - icv_len = 4; \ > - break; \ > - case AES: \ > - iv_len = 8; \ > - icv_len = 8; \ > - break; \ > - default: \ > - iv_len = 0; \ > - icv_len = 0; \ > - break; \ > - } \ > -} while (0) > -#define GET_TKIP_PN(iv, txpn) \ > -do {\ > - txpn.byte.TSC0 = iv[2];\ > - txpn.byte.TSC1 = iv[0];\ > - txpn.byte.TSC2 = iv[4];\ > - txpn.byte.TSC3 = iv[5];\ > - txpn.byte.TSC4 = iv[6];\ > - txpn.byte.TSC5 = iv[7];\ > -} while (0) > - > -#define ROL32(A, n) (((A) << (n)) | (((A) >> (32 - (n))) & ((1UL << (n)) - 1))) > > -#define ROR32(A, n) ROL32((A), 32 - (n)) > - > -struct mic_data { > - u32 K0, K1; /* Key / > - u32 L, R; / Current state / > - u32 M; / Message accumulator (single word) / > - u32 nBytesInM; / # bytes in M / > -}; > - > -void seccalctkipmic( > - u8 key, > - u8 header, > - u8 data, > - u32 data_len, > - u8 Miccode, > - u8 priority); > - > -void r8712_secmicsetkey(struct mic_data pmicdata, u8 key); > -void r8712_secmicappend(struct mic_data pmicdata, u8 src, u32 nBytes); > -void r8712_secgetmic(struct mic_data pmicdata, u8 dst); > -u32 r8712_aes_encrypt(struct _adapter padapter, u8 pxmitframe); > -u32 r8712_tkip_encrypt(struct _adapter padapter, u8 pxmitframe); > -void r8712_wep_encrypt(struct _adapter padapter, u8 pxmitframe); > -void r8712_aes_decrypt(struct _adapter padapter, u8 precvframe); > -void r8712_tkip_decrypt(struct _adapter padapter, u8 precvframe); > -void r8712_wep_decrypt(struct _adapter padapter, u8 precvframe); > -void r8712_use_tkipkey_handler(struct timer_list t); > - > -#endif /_RTL871X_SECURITY_H / > - > diff --git a/drivers/staging/rtl8712/rtl871x_sta_mgt.c b/drivers/staging/rtl8712/rtl871x_sta_mgt.c > deleted file mode 100644 > index 41b8a24e2f33..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_sta_mgt.c > +++ /dev/null > @@ -1,263 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/****************************************************** > - * rtl871x_sta_mgt.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RTL871X_STA_MGT_C > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "recv_osdep.h" > -#include "xmit_osdep.h" > -#include "sta_info.h" > - > -static void _init_stainfo(struct sta_info *psta) > -{ > - memset((u8 *)psta, 0, sizeof(struct sta_info)); > - spin_lock_init(&psta->lock); > > - INIT_LIST_HEAD(&psta->list); > > - INIT_LIST_HEAD(&psta->hash_list); > > - _r8712_init_sta_xmit_priv(&psta->sta_xmitpriv); > > - _r8712_init_sta_recv_priv(&psta->sta_recvpriv); > > - INIT_LIST_HEAD(&psta->asoc_list); > > - INIT_LIST_HEAD(&psta->auth_list); > > -} > - > -int _r8712_init_sta_priv(struct sta_priv *pstapriv) > -{ > - struct sta_info *psta; > - s32 i; > - > - pstapriv->pallocated_stainfo_buf = kmalloc(sizeof(struct sta_info) * > > - NUM_STA + 4, GFP_ATOMIC); > - if (!pstapriv->pallocated_stainfo_buf) > > - return -ENOMEM; > - pstapriv->pstainfo_buf = pstapriv->pallocated_stainfo_buf + 4 - > > - ((addr_t)(pstapriv->pallocated_stainfo_buf) & 3); > > - _init_queue(&pstapriv->free_sta_queue); > > - spin_lock_init(&pstapriv->sta_hash_lock); > > - pstapriv->asoc_sta_count = 0; > > - _init_queue(&pstapriv->sleep_q); > > - _init_queue(&pstapriv->wakeup_q); > > - psta = (struct sta_info *)(pstapriv->pstainfo_buf); > > - for (i = 0; i < NUM_STA; i++) { > - _init_stainfo(psta); > - INIT_LIST_HEAD(&pstapriv->sta_hash[i]); > > - list_add_tail(&psta->list, &pstapriv->free_sta_queue.queue); > > - psta++; > - } > - INIT_LIST_HEAD(&pstapriv->asoc_list); > > - INIT_LIST_HEAD(&pstapriv->auth_list); > > - return 0; > -} > - > -/* this function is used to free the memory of lock || sema for all stainfos */ > -static void mfree_all_stainfo(struct sta_priv *pstapriv) > -{ > - unsigned long irqL; > - struct list_head *plist, *phead; > - > - spin_lock_irqsave(&pstapriv->sta_hash_lock, irqL); > > - phead = &pstapriv->free_sta_queue.queue; > > - plist = phead->next; > > - while (!end_of_queue_search(phead, plist)) > - plist = plist->next; > > - > - spin_unlock_irqrestore(&pstapriv->sta_hash_lock, irqL); > > -} > - > -void _r8712_free_sta_priv(struct sta_priv pstapriv) > -{ > - if (pstapriv) { > - / be done before free sta_hash_lock */ > - mfree_all_stainfo(pstapriv); > - kfree(pstapriv->pallocated_stainfo_buf); > > - } > -} > - > -struct sta_info *r8712_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr) > -{ > - s32 index; > - struct list_head *phash_list; > - struct sta_info *psta; > - struct __queue *pfree_sta_queue; > - struct recv_reorder_ctrl *preorder_ctrl; > - int i = 0; > - u16 wRxSeqInitialValue = 0xffff; > - unsigned long flags; > - > - pfree_sta_queue = &pstapriv->free_sta_queue; > > - spin_lock_irqsave(&pfree_sta_queue->lock, flags); > > - psta = list_first_entry_or_null(&pfree_sta_queue->queue, > > - struct sta_info, list); > - if (psta) { > - list_del_init(&psta->list); > > - _init_stainfo(psta); > - memcpy(psta->hwaddr, hwaddr, ETH_ALEN); > > - index = wifi_mac_hash(hwaddr); > - if (index >= NUM_STA) { > > - psta = NULL; > - goto exit; > - } > - phash_list = &pstapriv->sta_hash[index]; > > - list_add_tail(&psta->hash_list, phash_list); > > - pstapriv->asoc_sta_count++; > > - > -/* For the SMC router, the sequence number of first packet of WPS handshake > - * will be 0. In this case, this packet will be dropped by recv_decache function > - * if we use the 0x00 as the default value for tid_rxseq variable. So, we > - * initialize the tid_rxseq variable as the 0xffff. > - */ > - for (i = 0; i < 16; i++) > - memcpy(&psta->sta_recvpriv.rxcache.tid_rxseq[i], > > - &wRxSeqInitialValue, 2); > - /* for A-MPDU Rx reordering buffer control */ > - for (i = 0; i < 16; i++) { > - preorder_ctrl = &psta->recvreorder_ctrl[i]; > > - preorder_ctrl->padapter = pstapriv->padapter; > > - preorder_ctrl->indicate_seq = 0xffff; > > - preorder_ctrl->wend_b = 0xffff; > > - preorder_ctrl->wsize_b = 64; > > - _init_queue(&preorder_ctrl->pending_recvframe_queue); > > - r8712_init_recv_timer(preorder_ctrl); > - } > - } > -exit: > - spin_unlock_irqrestore(&pfree_sta_queue->lock, flags); > > - return psta; > -} > - > -/* using pstapriv->sta_hash_lock to protect */ > > -void r8712_free_stainfo(struct _adapter *padapter, struct sta_info *psta) > -{ > - int i; > - unsigned long irqL0; > - struct __queue *pfree_sta_queue; > - struct recv_reorder_ctrl *preorder_ctrl; > - struct sta_xmit_priv *pstaxmitpriv; > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - struct sta_priv *pstapriv = &padapter->stapriv; > > - > - if (!psta) > - return; > - pfree_sta_queue = &pstapriv->free_sta_queue; > > - pstaxmitpriv = &psta->sta_xmitpriv; > > - spin_lock_irqsave(&pxmitpriv->vo_pending.lock, irqL0); > > - r8712_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->vo_q.sta_pending); > > - list_del_init(&pstaxmitpriv->vo_q.tx_pending); > > - spin_unlock_irqrestore(&pxmitpriv->vo_pending.lock, irqL0); > > - spin_lock_irqsave(&pxmitpriv->vi_pending.lock, irqL0); > > - r8712_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->vi_q.sta_pending); > > - list_del_init(&pstaxmitpriv->vi_q.tx_pending); > > - spin_unlock_irqrestore(&pxmitpriv->vi_pending.lock, irqL0); > > - spin_lock_irqsave(&pxmitpriv->bk_pending.lock, irqL0); > > - r8712_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->bk_q.sta_pending); > > - list_del_init(&pstaxmitpriv->bk_q.tx_pending); > > - spin_unlock_irqrestore(&pxmitpriv->bk_pending.lock, irqL0); > > - spin_lock_irqsave(&pxmitpriv->be_pending.lock, irqL0); > > - r8712_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->be_q.sta_pending); > > - list_del_init(&pstaxmitpriv->be_q.tx_pending); > > - spin_unlock_irqrestore(&pxmitpriv->be_pending.lock, irqL0); > > - list_del_init(&psta->hash_list); > > - pstapriv->asoc_sta_count--; > > - /* re-init sta_info; 20061114 */ > - _r8712_init_sta_xmit_priv(&psta->sta_xmitpriv); > > - _r8712_init_sta_recv_priv(&psta->sta_recvpriv); > > - /* for A-MPDU Rx reordering buffer control, > - * cancel reordering_ctrl_timer > - */ > - for (i = 0; i < 16; i++) { > - preorder_ctrl = &psta->recvreorder_ctrl[i]; > > - del_timer(&preorder_ctrl->reordering_ctrl_timer); > > - } > - spin_lock(&pfree_sta_queue->lock); > > - /* insert into free_sta_queue; 20061114 */ > - list_add_tail(&psta->list, &pfree_sta_queue->queue); > > - spin_unlock(&pfree_sta_queue->lock); > > -} > - > -/* free all stainfo which in sta_hash[all] */ > -void r8712_free_all_stainfo(struct _adapter *padapter) > -{ > - unsigned long irqL; > - struct list_head *plist, *phead; > - s32 index; > - struct sta_info *psta = NULL; > - struct sta_priv *pstapriv = &padapter->stapriv; > > - struct sta_info *pbcmc_stainfo = r8712_get_bcmc_stainfo(padapter); > - > - if (pstapriv->asoc_sta_count == 1) > > - return; > - spin_lock_irqsave(&pstapriv->sta_hash_lock, irqL); > > - for (index = 0; index < NUM_STA; index++) { > - phead = &pstapriv->sta_hash[index]; > > - plist = phead->next; > > - while (!end_of_queue_search(phead, plist)) { > - psta = container_of(plist, > - struct sta_info, hash_list); > - plist = plist->next; > > - if (pbcmc_stainfo != psta) > - r8712_free_stainfo(padapter, psta); > - } > - } > - spin_unlock_irqrestore(&pstapriv->sta_hash_lock, irqL); > > -} > - > -/* any station allocated can be searched by hash list */ > -struct sta_info *r8712_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr) > -{ > - unsigned long irqL; > - struct list_head *plist, *phead; > - struct sta_info *psta = NULL; > - u32 index; > - > - if (!hwaddr) > - return NULL; > - index = wifi_mac_hash(hwaddr); > - spin_lock_irqsave(&pstapriv->sta_hash_lock, irqL); > > - phead = &pstapriv->sta_hash[index]; > > - plist = phead->next; > > - while (!end_of_queue_search(phead, plist)) { > - psta = container_of(plist, struct sta_info, hash_list); > - if ((!memcmp(psta->hwaddr, hwaddr, ETH_ALEN))) { > > - /* if found the matched address */ > - break; > - } > - psta = NULL; > - plist = plist->next; > > - } > - spin_unlock_irqrestore(&pstapriv->sta_hash_lock, irqL); > > - return psta; > -} > - > -void r8712_init_bcmc_stainfo(struct _adapter *padapter) > -{ > - unsigned char bcast_addr[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; > - struct sta_priv *pstapriv = &padapter->stapriv; > > - > - r8712_alloc_stainfo(pstapriv, bcast_addr); > -} > - > -struct sta_info *r8712_get_bcmc_stainfo(struct _adapter *padapter) > -{ > - struct sta_priv *pstapriv = &padapter->stapriv; > > - u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; > - > - return r8712_get_stainfo(pstapriv, bc_addr); > -} > - > -u8 r8712_access_ctrl(struct wlan_acl_pool pacl_list, u8 mac_addr) > -{ > - return true; > -} > diff --git a/drivers/staging/rtl8712/rtl871x_wlan_sme.h b/drivers/staging/rtl8712/rtl871x_wlan_sme.h > deleted file mode 100644 > index 97ea1451426c..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_wlan_sme.h > +++ /dev/null > @@ -1,35 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/**************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - / > -#ifndef RTL871X_WLAN_SME_H > -#define RTL871X_WLAN_SME_H > - > -#define MSR_APMODE 0x0C > -#define MSR_STAMODE 0x08 > -#define MSR_ADHOCMODE 0x04 > -#define MSR_NOLINKMODE 0x00 > -#define 1M_RATE 0 > -#define 2M_RATE 1 > -#define 5M_RATE 2 > -#define 11M_RATE 3 > -#define 6M_RATE 4 > -#define 9M_RATE 5 > -#define 12M_RATE 6 > -#define 18M_RATE 7 > -#define 24M_RATE 8 > -#define 36M_RATE 9 > -#define 48M_RATE 10 > -#define 54M_RATE 11 > - > -#endif > - > diff --git a/drivers/staging/rtl8712/rtl871x_xmit.c b/drivers/staging/rtl8712/rtl871x_xmit.c > deleted file mode 100644 > index a9aab0389e7f..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_xmit.c > +++ /dev/null > @@ -1,1056 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/ > - * rtl871x_xmit.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define RTL871X_XMIT_C > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "osdep_intf.h" > -#include "usb_ops.h" > - > -#include <linux/usb.h> > > -#include <linux/ieee80211.h> > > - > -static const u8 P802_1H_OUI[P80211_OUI_LEN] = {0x00, 0x00, 0xf8}; > -static const u8 RFC1042_OUI[P80211_OUI_LEN] = {0x00, 0x00, 0x00}; > -static void init_hwxmits(struct hw_xmit *phwxmit, sint entry); > -static void alloc_hwxmits(struct _adapter *padapter); > -static void free_hwxmits(struct _adapter *padapter); > - > -static void _init_txservq(struct tx_servq *ptxservq) > -{ > - INIT_LIST_HEAD(&ptxservq->tx_pending); > > - _init_queue(&ptxservq->sta_pending); > > - ptxservq->qcnt = 0; > > -} > - > -void _r8712_init_sta_xmit_priv(struct sta_xmit_priv *psta_xmitpriv) > -{ > - memset((unsigned char *)psta_xmitpriv, 0, > - sizeof(struct sta_xmit_priv)); > - spin_lock_init(&psta_xmitpriv->lock); > > - _init_txservq(&psta_xmitpriv->be_q); > > - _init_txservq(&psta_xmitpriv->bk_q); > > - _init_txservq(&psta_xmitpriv->vi_q); > > - _init_txservq(&psta_xmitpriv->vo_q); > > - INIT_LIST_HEAD(&psta_xmitpriv->legacy_dz); > > - INIT_LIST_HEAD(&psta_xmitpriv->apsd); > > -} > - > -int _r8712_init_xmit_priv(struct xmit_priv *pxmitpriv, > - struct _adapter *padapter) > -{ > - sint i; > - struct xmit_buf *pxmitbuf; > - struct xmit_frame *pxframe; > - int j; > - > - memset((unsigned char *)pxmitpriv, 0, sizeof(struct xmit_priv)); > - spin_lock_init(&pxmitpriv->lock); > > - /* > - *Please insert all the queue initialization using _init_queue below > - */ > - pxmitpriv->adapter = padapter; > > - _init_queue(&pxmitpriv->be_pending); > > - _init_queue(&pxmitpriv->bk_pending); > > - _init_queue(&pxmitpriv->vi_pending); > > - _init_queue(&pxmitpriv->vo_pending); > > - _init_queue(&pxmitpriv->bm_pending); > > - _init_queue(&pxmitpriv->legacy_dz_queue); > > - _init_queue(&pxmitpriv->apsd_queue); > > - _init_queue(&pxmitpriv->free_xmit_queue); > > - /* > - * Please allocate memory with sz = (struct xmit_frame) * NR_XMITFRAME, > - * and initialize free_xmit_frame below. > - * Please also apply free_txobj to link_up all the xmit_frames... > - */ > - pxmitpriv->pallocated_frame_buf = > > - kmalloc(NR_XMITFRAME * sizeof(struct xmit_frame) + 4, > - GFP_ATOMIC); > - if (!pxmitpriv->pallocated_frame_buf) { > > - pxmitpriv->pxmit_frame_buf = NULL; > > - return -ENOMEM; > - } > - pxmitpriv->pxmit_frame_buf = pxmitpriv->pallocated_frame_buf + 4 - > > - ((addr_t) (pxmitpriv->pallocated_frame_buf) & 3); > > - pxframe = (struct xmit_frame *) pxmitpriv->pxmit_frame_buf; > > - for (i = 0; i < NR_XMITFRAME; i++) { > - INIT_LIST_HEAD(&pxframe->list); > > - pxframe->padapter = padapter; > > - pxframe->frame_tag = DATA_FRAMETAG; > > - pxframe->pkt = NULL; > > - pxframe->buf_addr = NULL; > > - pxframe->pxmitbuf = NULL; > > - list_add_tail(&pxframe->list, > > - &pxmitpriv->free_xmit_queue.queue); > > - pxframe++; > - } > - pxmitpriv->free_xmitframe_cnt = NR_XMITFRAME; > > - /* > - * init xmit hw_txqueue > - */ > - _r8712_init_hw_txqueue(&pxmitpriv->be_txqueue, BE_QUEUE_INX); > > - _r8712_init_hw_txqueue(&pxmitpriv->bk_txqueue, BK_QUEUE_INX); > > - _r8712_init_hw_txqueue(&pxmitpriv->vi_txqueue, VI_QUEUE_INX); > > - _r8712_init_hw_txqueue(&pxmitpriv->vo_txqueue, VO_QUEUE_INX); > > - _r8712_init_hw_txqueue(&pxmitpriv->bmc_txqueue, BMC_QUEUE_INX); > > - pxmitpriv->frag_len = MAX_FRAG_THRESHOLD; > > - pxmitpriv->txirp_cnt = 1; > > - /per AC pending irp/ > - pxmitpriv->beq_cnt = 0; > > - pxmitpriv->bkq_cnt = 0; > > - pxmitpriv->viq_cnt = 0; > > - pxmitpriv->voq_cnt = 0; > > - /init xmit_buf/ > - _init_queue(&pxmitpriv->free_xmitbuf_queue); > > - _init_queue(&pxmitpriv->pending_xmitbuf_queue); > > - pxmitpriv->pxmitbuf = kmalloc_array(NR_XMITBUFF, sizeof(struct xmit_buf), GFP_ATOMIC); > > - if (!pxmitpriv->pxmitbuf) > > - goto clean_up_frame_buf; > - pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmitbuf; > > - for (i = 0; i < NR_XMITBUFF; i++) { > - INIT_LIST_HEAD(&pxmitbuf->list); > > - pxmitbuf->pallocated_buf = > > - kmalloc(MAX_XMITBUF_SZ + XMITBUF_ALIGN_SZ, GFP_ATOMIC); > - if (!pxmitbuf->pallocated_buf) { > > - j = 0; > - goto clean_up_alloc_buf; > - } > - pxmitbuf->pbuf = pxmitbuf->pallocated_buf + XMITBUF_ALIGN_SZ - > > - ((addr_t) (pxmitbuf->pallocated_buf) & > > - (XMITBUF_ALIGN_SZ - 1)); > - if (r8712_xmit_resource_alloc(padapter, pxmitbuf)) { > - j = 1; > - goto clean_up_alloc_buf; > - } > - list_add_tail(&pxmitbuf->list, > > - &pxmitpriv->free_xmitbuf_queue.queue); > > - pxmitbuf++; > - } > - pxmitpriv->free_xmitbuf_cnt = NR_XMITBUFF; > > - INIT_WORK(&padapter->wk_filter_rx_ff0, r8712_SetFilter); > > - alloc_hwxmits(padapter); > - init_hwxmits(pxmitpriv->hwxmits, pxmitpriv->hwxmit_entry); > > - tasklet_setup(&pxmitpriv->xmit_tasklet, r8712_xmit_bh); > > - return 0; > - > -clean_up_alloc_buf: > - if (j) { > - /* failure happened in r8712_xmit_resource_alloc() > - * delete extra pxmitbuf->pallocated_buf > > - */ > - kfree(pxmitbuf->pallocated_buf); > > - } > - for (j = 0; j < i; j++) { > - int k; > - > - pxmitbuf--; /* reset pointer */ > - kfree(pxmitbuf->pallocated_buf); > > - for (k = 0; k < 8; k++) /* delete xmit urb's */ > - usb_free_urb(pxmitbuf->pxmit_urb[k]); > > - } > - kfree(pxmitpriv->pxmitbuf); > > - pxmitpriv->pxmitbuf = NULL; > > -clean_up_frame_buf: > - kfree(pxmitpriv->pallocated_frame_buf); > > - pxmitpriv->pallocated_frame_buf = NULL; > > - return -ENOMEM; > -} > - > -void _free_xmit_priv(struct xmit_priv *pxmitpriv) > -{ > - int i; > - struct _adapter *padapter = pxmitpriv->adapter; > > - struct xmit_frame *pxmitframe = (struct xmit_frame *) > - pxmitpriv->pxmit_frame_buf; > > - struct xmit_buf *pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmitbuf; > > - > - if (!pxmitpriv->pxmit_frame_buf) > > - return; > - for (i = 0; i < NR_XMITFRAME; i++) { > - r8712_xmit_complete(padapter, pxmitframe); > - pxmitframe++; > - } > - for (i = 0; i < NR_XMITBUFF; i++) { > - r8712_xmit_resource_free(padapter, pxmitbuf); > - kfree(pxmitbuf->pallocated_buf); > > - pxmitbuf++; > - } > - kfree(pxmitpriv->pallocated_frame_buf); > > - kfree(pxmitpriv->pxmitbuf); > > - free_hwxmits(padapter); > -} > - > -int r8712_update_attrib(struct _adapter *padapter, _pkt *pkt, > - struct pkt_attrib *pattrib) > -{ > - struct pkt_file pktfile; > - struct sta_info *psta = NULL; > - struct ethhdr etherhdr; > - > - struct tx_cmd txdesc; > - > - bool bmcast; > - struct sta_priv *pstapriv = &padapter->stapriv; > > - struct security_priv *psecuritypriv = &padapter->securitypriv; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct qos_priv *pqospriv = &pmlmepriv->qospriv; > > - > - _r8712_open_pktfile(pkt, &pktfile); > - > - _r8712_pktfile_read(&pktfile, (unsigned char *)ðerhdr, ETH_HLEN); > - > - pattrib->ether_type = ntohs(etherhdr.h_proto); > > - > - /* > - * If driver xmit ARP packet, driver can set ps mode to initial > - * setting. It stands for getting DHCP or fix IP. > - */ > - if (pattrib->ether_type == 0x0806) { > > - if (padapter->pwrctrlpriv.pwr_mode != > > - padapter->registrypriv.power_mgnt) { > > - del_timer_sync(&pmlmepriv->dhcp_timer); > > - r8712_set_ps_mode(padapter, > - padapter->registrypriv.power_mgnt, > > - padapter->registrypriv.smart_ps); > > - } > - } > - > - memcpy(pattrib->dst, ðerhdr.h_dest, ETH_ALEN); > > - memcpy(pattrib->src, ðerhdr.h_source, ETH_ALEN); > > - pattrib->pctrl = 0; > > - if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || > - check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) { > - memcpy(pattrib->ra, pattrib->dst, ETH_ALEN); > > - memcpy(pattrib->ta, pattrib->src, ETH_ALEN); > > - } else if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { > - memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN); > > - memcpy(pattrib->ta, pattrib->src, ETH_ALEN); > > - } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) { > - memcpy(pattrib->ra, pattrib->dst, ETH_ALEN); > > - memcpy(pattrib->ta, get_bssid(pmlmepriv), ETH_ALEN); > > - } else if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) { > - /firstly, filter packet not belongs to mp/ > - if (pattrib->ether_type != 0x8712) > > - return -EINVAL; > - /* for mp storing the txcmd per packet, > - * according to the info of txcmd to update pattrib > - */ > - /get MP_TXDESC_SIZE bytes txcmd per packet/ > - _r8712_pktfile_read(&pktfile, (u8 *)&txdesc, TXDESC_SIZE); > - memcpy(pattrib->ra, pattrib->dst, ETH_ALEN); > > - memcpy(pattrib->ta, pattrib->src, ETH_ALEN); > > - pattrib->pctrl = 1; > > - } > - /* r8712_xmitframe_coalesce() overwrite this!*/ > - pattrib->pktlen = pktfile.pkt_len; > > - if (pattrib->ether_type == ETH_P_IP) { > > - /* The following is for DHCP and ARP packet, we use cck1M to > - * tx these packets and let LPS awake some time > - * to prevent DHCP protocol fail > - */ > - u8 tmp[24]; > - > - _r8712_pktfile_read(&pktfile, &tmp[0], 24); > - pattrib->dhcp_pkt = 0; > > - if (pktfile.pkt_len > 282) {/MINIMUM_DHCP_PACKET_SIZE)/ > > - if (pattrib->ether_type == ETH_P_IP) {/* IP header*/ > > - if (((tmp[21] == 68) && (tmp[23] == 67)) || > - ((tmp[21] == 67) && (tmp[23] == 68))) { > - /* 68 : UDP BOOTP client > - * 67 : UDP BOOTP server > - * Use low rate to send DHCP packet. > - */ > - pattrib->dhcp_pkt = 1; > > - } > - } > - } > - } > - bmcast = is_multicast_ether_addr(pattrib->ra); > > - /* get sta_info*/ > - if (bmcast) { > - psta = r8712_get_bcmc_stainfo(padapter); > - pattrib->mac_id = 4; > > - } else { > - if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) { > - psta = r8712_get_stainfo(pstapriv, > - get_bssid(pmlmepriv)); > - pattrib->mac_id = 5; > > - } else { > - psta = r8712_get_stainfo(pstapriv, pattrib->ra); > > - if (!psta) /* drop the pkt */ > - return -ENOMEM; > - if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) > - pattrib->mac_id = 5; > > - else > - pattrib->mac_id = psta->mac_id; > > - } > - } > - > - if (psta) { > - pattrib->psta = psta; > > - } else { > - /* if we cannot get psta => drrp the pkt */ > > - return -ENOMEM; > - } > - > - pattrib->ack_policy = 0; > > - /* get ether_hdr_len */ > - pattrib->pkt_hdrlen = ETH_HLEN; > > - > - if (pqospriv->qos_option) { > > - r8712_set_qos(&pktfile, pattrib); > - } else { > - pattrib->hdrlen = WLAN_HDR_A3_LEN; > > - pattrib->subtype = IEEE80211_FTYPE_DATA; > > - pattrib->priority = 0; > > - } > - if (psta->ieee8021x_blocked) { > > - pattrib->encrypt = 0; > > - if ((pattrib->ether_type != 0x888e) && > > - !check_fwstate(pmlmepriv, WIFI_MP_STATE)) > - return -EINVAL; > - } else { > - GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, bmcast); > > - } > - switch (pattrib->encrypt) { > > - case WEP40: > - case WEP104: > - pattrib->iv_len = 4; > > - pattrib->icv_len = 4; > > - break; > - case TKIP: > - pattrib->iv_len = 8; > > - pattrib->icv_len = 4; > > - if (padapter->securitypriv.busetkipkey == _FAIL) > > - return -EINVAL; > - break; > - case AES: > - pattrib->iv_len = 8; > > - pattrib->icv_len = 8; > > - break; > - default: > - pattrib->iv_len = 0; > > - pattrib->icv_len = 0; > > - break; > - } > - > - if (pattrib->encrypt && > > - (padapter->securitypriv.sw_encrypt || > > - !psecuritypriv->hw_decrypted)) > > - pattrib->bswenc = true; > > - else > - pattrib->bswenc = false; > > - /* if in MP_STATE, update pkt_attrib from mp_txcmd, and overwrite > - * some settings above. > - */ > - if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) > - pattrib->priority = > > - (le32_to_cpu(txdesc.txdw1) >> QSEL_SHT) & 0x1f; > > - return 0; > -} > - > -static int xmitframe_addmic(struct _adapter *padapter, > - struct xmit_frame *pxmitframe) > -{ > - u32 curfragnum, length; > - u8 *pframe, *payload, mic[8]; > - struct mic_data micdata; > - struct sta_info *stainfo; > - struct qos_priv *pqospriv = &padapter->mlmepriv.qospriv; > > - struct pkt_attrib *pattrib = &pxmitframe->attrib; > > - struct security_priv *psecpriv = &padapter->securitypriv; > > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - u8 priority[4] = {}; > - bool bmcst = is_multicast_ether_addr(pattrib->ra); > > - > - if (pattrib->psta) > > - stainfo = pattrib->psta; > > - else > - stainfo = r8712_get_stainfo(&padapter->stapriv, > > - &pattrib->ra[0]); > > - if (pattrib->encrypt == TKIP) { > > - /encode mic code/ > - if (stainfo) { > - u8 null_key[16] = {}; > - > - pframe = pxmitframe->buf_addr + TXDESC_OFFSET; > > - if (bmcst) { > - if (!memcmp(psecpriv->XGrptxmickey > > - [psecpriv->XGrpKeyid].skey, > > - null_key, 16)) > - return -ENOMEM; > - /start to calculate the mic code/ > - r8712_secmicsetkey(&micdata, > - psecpriv->XGrptxmickey > > - [psecpriv->XGrpKeyid].skey); > > - } else { > - if (!memcmp(&stainfo->tkiptxmickey.skey[0], > > - null_key, 16)) > - return -ENOMEM; > - /* start to calculate the mic code */ > - r8712_secmicsetkey(&micdata, > - &stainfo->tkiptxmickey.skey[0]); > > - } > - if (pframe[1] & 1) { /* ToDS==1 / > - r8712_secmicappend(&micdata, > - &pframe[16], 6); /DA/ > - if (pframe[1] & 2) / From Ds==1 / > - r8712_secmicappend(&micdata, > - &pframe[24], 6); > - else > - r8712_secmicappend(&micdata, > - &pframe[10], 6); > - } else { / ToDS==0 / > - r8712_secmicappend(&micdata, > - &pframe[4], 6); / DA / > - if (pframe[1] & 2) / From Ds==1 */ > - r8712_secmicappend(&micdata, > - &pframe[16], 6); > - else > - r8712_secmicappend(&micdata, > - &pframe[10], 6); > - } > - if (pqospriv->qos_option == 1) > > - priority[0] = (u8)pxmitframe->attrib.priority; > > - r8712_secmicappend(&micdata, &priority[0], 4); > - payload = pframe; > - for (curfragnum = 0; curfragnum < pattrib->nr_frags; > > - curfragnum++) { > - payload = (u8 *)RND4((addr_t)(payload)); > - payload += pattrib->hdrlen + pattrib->iv_len; > > - if ((curfragnum + 1) == pattrib->nr_frags) { > > - length = pattrib->last_txcmdsz - > > - pattrib->hdrlen - > > - pattrib->iv_len - > > - ((psecpriv->sw_encrypt) > > - ? pattrib->icv_len : 0); > > - r8712_secmicappend(&micdata, payload, > - length); > - payload = payload + length; > - } else { > - length = pxmitpriv->frag_len - > > - pattrib->hdrlen - pattrib->iv_len - > > - ((psecpriv->sw_encrypt) ? > > - pattrib->icv_len : 0); > > - r8712_secmicappend(&micdata, payload, > - length); > - payload = payload + length + > - pattrib->icv_len; > > - } > - } > - r8712_secgetmic(&micdata, &mic[0]); > - /* add mic code and add the mic code length in > - * last_txcmdsz > - */ > - memcpy(payload, &mic[0], 8); > - pattrib->last_txcmdsz += 8; > > - payload = payload - pattrib->last_txcmdsz + 8; > > - } > - } > - return 0; > -} > - > -static sint xmitframe_swencrypt(struct _adapter *padapter, > - struct xmit_frame *pxmitframe) > -{ > - struct pkt_attrib *pattrib = &pxmitframe->attrib; > > - > - if (pattrib->bswenc) { > > - switch (pattrib->encrypt) { > > - case WEP40: > - case WEP104: > - r8712_wep_encrypt(padapter, (u8 *)pxmitframe); > - break; > - case TKIP: > - r8712_tkip_encrypt(padapter, (u8 *)pxmitframe); > - break; > - case AES: > - r8712_aes_encrypt(padapter, (u8 *)pxmitframe); > - break; > - default: > - break; > - } > - } > - return _SUCCESS; > -} > - > -static int make_wlanhdr(struct _adapter *padapter, u8 *hdr, > - struct pkt_attrib *pattrib) > -{ > - u16 *qc; > - > - struct ieee80211_hdr *pwlanhdr = (struct ieee80211_hdr *)hdr; > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct qos_priv *pqospriv = &pmlmepriv->qospriv; > > - __le16 *fctrl = &pwlanhdr->frame_control; > > - u8 *bssid; > - > - memset(hdr, 0, WLANHDR_OFFSET); > - SetFrameSubType(fctrl, pattrib->subtype); > > - if (!(pattrib->subtype & IEEE80211_FTYPE_DATA)) > > - return 0; > - > - bssid = get_bssid(pmlmepriv); > - > - if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { > - /* to_ds = 1, fr_ds = 0; */ > - SetToDs(fctrl); > - ether_addr_copy(pwlanhdr->addr1, bssid); > > - ether_addr_copy(pwlanhdr->addr2, pattrib->src); > > - ether_addr_copy(pwlanhdr->addr3, pattrib->dst); > > - } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) { > - /* to_ds = 0, fr_ds = 1; */ > - SetFrDs(fctrl); > - ether_addr_copy(pwlanhdr->addr1, pattrib->dst); > > - ether_addr_copy(pwlanhdr->addr2, bssid); > > - ether_addr_copy(pwlanhdr->addr3, pattrib->src); > > - } else if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || > - check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) { > - ether_addr_copy(pwlanhdr->addr1, pattrib->dst); > > - ether_addr_copy(pwlanhdr->addr2, pattrib->src); > > - ether_addr_copy(pwlanhdr->addr3, bssid); > > - } else if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) { > - ether_addr_copy(pwlanhdr->addr1, pattrib->dst); > > - ether_addr_copy(pwlanhdr->addr2, pattrib->src); > > - ether_addr_copy(pwlanhdr->addr3, bssid); > > - } else { > - return -EINVAL; > - } > - > - if (pattrib->encrypt) > > - SetPrivacy(fctrl); > - if (pqospriv->qos_option) { > > - qc = (unsigned short *)(hdr + pattrib->hdrlen - 2); > > - if (pattrib->priority) > > - SetPriority(qc, pattrib->priority); > > - SetAckpolicy(qc, pattrib->ack_policy); > > - } > - /* TODO: fill HT Control Field / > - / Update Seq Num will be handled by f/w */ > - { > - struct sta_info *psta; > - bool bmcst = is_multicast_ether_addr(pattrib->ra); > > - > - if (pattrib->psta) > > - psta = pattrib->psta; > > - else if (bmcst) > - psta = r8712_get_bcmc_stainfo(padapter); > - else > - psta = r8712_get_stainfo(&padapter->stapriv, > > - pattrib->ra); > > - > - if (psta) { > - u16 *txtid = psta->sta_xmitpriv.txseq_tid; > > - > - txtid[pattrib->priority]++; > > - txtid[pattrib->priority] &= 0xFFF; > > - pattrib->seqnum = txtid[pattrib->priority]; > > - SetSeqNum(hdr, pattrib->seqnum); > > - } > - } > - > - return 0; > -} > - > -static sint r8712_put_snap(u8 *data, u16 h_proto) > -{ > - struct ieee80211_snap_hdr *snap; > - const u8 *oui; > - > - snap = (struct ieee80211_snap_hdr *)data; > - snap->dsap = 0xaa; > > - snap->ssap = 0xaa; > > - snap->ctrl = 0x03; > > - if (h_proto == 0x8137 || h_proto == 0x80f3) > - oui = P802_1H_OUI; > - else > - oui = RFC1042_OUI; > - snap->oui[0] = oui[0]; > > - snap->oui[1] = oui[1]; > > - snap->oui[2] = oui[2]; > > - *(__be16 )(data + SNAP_SIZE) = htons(h_proto); > - return SNAP_SIZE + sizeof(u16); > -} > - > -/ > - * This sub-routine will perform all the following: > - * 1. remove 802.3 header. > - * 2. create wlan_header, based on the info in pxmitframe > - * 3. append sta's iv/ext-iv > - * 4. append LLC > - * 5. move frag chunk from pframe to pxmitframe->mem > > - * 6. apply sw-encrypt, if necessary. > - */ > -sint r8712_xmitframe_coalesce(struct _adapter *padapter, _pkt *pkt, > - struct xmit_frame *pxmitframe) > -{ > - struct pkt_file pktfile; > - > - sint frg_len, mpdu_len, llc_sz; > - u32 mem_sz; > - u8 frg_inx; > - addr_t addr; > - u8 *pframe, *mem_start, *ptxdesc; > - struct sta_info *psta; > - struct security_priv *psecpriv = &padapter->securitypriv; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - struct pkt_attrib *pattrib = &pxmitframe->attrib; > > - u8 *pbuf_start; > - bool bmcst = is_multicast_ether_addr(pattrib->ra); > > - > - if (!pattrib->psta) > > - return _FAIL; > - psta = pattrib->psta; > > - if (!pxmitframe->buf_addr) > > - return _FAIL; > - pbuf_start = pxmitframe->buf_addr; > > - ptxdesc = pbuf_start; > - mem_start = pbuf_start + TXDESC_OFFSET; > - if (make_wlanhdr(padapter, mem_start, pattrib)) > - return _FAIL; > - _r8712_open_pktfile(pkt, &pktfile); > - _r8712_pktfile_read(&pktfile, NULL, (uint) pattrib->pkt_hdrlen); > > - if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) { > - /* truncate TXDESC_SIZE bytes txcmd if at mp mode for 871x */ > - if (pattrib->ether_type == 0x8712) { > > - /* take care - update_txdesc overwrite this */ > - _r8712_pktfile_read(&pktfile, ptxdesc, TXDESC_SIZE); > - } > - } > - pattrib->pktlen = pktfile.pkt_len; > > - frg_inx = 0; > - frg_len = pxmitpriv->frag_len - 4; > > - while (1) { > - llc_sz = 0; > - mpdu_len = frg_len; > - pframe = mem_start; > - SetMFrag(mem_start); > - pframe += pattrib->hdrlen; > > - mpdu_len -= pattrib->hdrlen; > > - /* adding icv, if necessary...*/ > - if (pattrib->iv_len) { > > - if (psta) { > - switch (pattrib->encrypt) { > > - case WEP40: > - case WEP104: > - WEP_IV(pattrib->iv, psta->txpn, > > - (u8)psecpriv->PrivacyKeyIndex); > > - break; > - case TKIP: > - if (bmcst) > - TKIP_IV(pattrib->iv, > > - psta->txpn, > > - (u8)psecpriv->XGrpKeyid); > > - else > - TKIP_IV(pattrib->iv, psta->txpn, > > - 0); > - break; > - case AES: > - if (bmcst) > - AES_IV(pattrib->iv, psta->txpn, > > - (u8)psecpriv->XGrpKeyid); > > - else > - AES_IV(pattrib->iv, psta->txpn, > > - 0); > - break; > - } > - } > - memcpy(pframe, pattrib->iv, pattrib->iv_len); > > - pframe += pattrib->iv_len; > > - mpdu_len -= pattrib->iv_len; > > - } > - if (frg_inx == 0) { > - llc_sz = r8712_put_snap(pframe, pattrib->ether_type); > > - pframe += llc_sz; > - mpdu_len -= llc_sz; > - } > - if ((pattrib->icv_len > 0) && (pattrib->bswenc)) > > - mpdu_len -= pattrib->icv_len; > > - if (bmcst) > - mem_sz = _r8712_pktfile_read(&pktfile, pframe, > - pattrib->pktlen); > > - else > - mem_sz = _r8712_pktfile_read(&pktfile, pframe, > - mpdu_len); > - pframe += mem_sz; > - if ((pattrib->icv_len > 0) && (pattrib->bswenc)) { > > - memcpy(pframe, pattrib->icv, pattrib->icv_len); > > - pframe += pattrib->icv_len; > > - } > - frg_inx++; > - if (bmcst || r8712_endofpktfile(&pktfile)) { > - pattrib->nr_frags = frg_inx; > > - pattrib->last_txcmdsz = pattrib->hdrlen + > > - pattrib->iv_len + > > - ((pattrib->nr_frags == 1) ? > > - llc_sz : 0) + > - ((pattrib->bswenc) ? > > - pattrib->icv_len : 0) + mem_sz; > > - ClearMFrag(mem_start); > - break; > - } > - addr = (addr_t)(pframe); > - mem_start = (unsigned char *)RND4(addr) + TXDESC_OFFSET; > - memcpy(mem_start, pbuf_start + TXDESC_OFFSET, pattrib->hdrlen); > > - } > - > - if (xmitframe_addmic(padapter, pxmitframe)) > - return _FAIL; > - xmitframe_swencrypt(padapter, pxmitframe); > - return _SUCCESS; > -} > - > -void r8712_update_protection(struct _adapter *padapter, u8 *ie, uint ie_len) > -{ > - uint protection; > - u8 *perp; > - uint erp_len; > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - struct registry_priv *pregistrypriv = &padapter->registrypriv; > > - > - switch (pxmitpriv->vcs_setting) { > > - case DISABLE_VCS: > - pxmitpriv->vcs = NONE_VCS; > > - break; > - case ENABLE_VCS: > - break; > - case AUTO_VCS: > - default: > - perp = r8712_get_ie(ie, WLAN_EID_ERP_INFO, &erp_len, ie_len); > - if (!perp) { > - pxmitpriv->vcs = NONE_VCS; > > - } else { > - protection = (*(perp + 2)) & BIT(1); > - if (protection) { > - if (pregistrypriv->vcs_type == RTS_CTS) > > - pxmitpriv->vcs = RTS_CTS; > > - else > - pxmitpriv->vcs = CTS_TO_SELF; > > - } else { > - pxmitpriv->vcs = NONE_VCS; > > - } > - } > - break; > - } > -} > - > -struct xmit_buf *r8712_alloc_xmitbuf(struct xmit_priv *pxmitpriv) > -{ > - unsigned long irqL; > - struct xmit_buf *pxmitbuf; > - struct __queue *pfree_xmitbuf_queue = &pxmitpriv->free_xmitbuf_queue; > > - > - spin_lock_irqsave(&pfree_xmitbuf_queue->lock, irqL); > > - pxmitbuf = list_first_entry_or_null(&pfree_xmitbuf_queue->queue, > > - struct xmit_buf, list); > - if (pxmitbuf) { > - list_del_init(&pxmitbuf->list); > > - pxmitpriv->free_xmitbuf_cnt--; > > - } > - spin_unlock_irqrestore(&pfree_xmitbuf_queue->lock, irqL); > > - return pxmitbuf; > -} > - > -void r8712_free_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf) > -{ > - unsigned long irqL; > - struct __queue *pfree_xmitbuf_queue = &pxmitpriv->free_xmitbuf_queue; > > - > - if (!pxmitbuf) > - return; > - spin_lock_irqsave(&pfree_xmitbuf_queue->lock, irqL); > > - list_del_init(&pxmitbuf->list); > > - list_add_tail(&pxmitbuf->list, &pfree_xmitbuf_queue->queue); > > - pxmitpriv->free_xmitbuf_cnt++; > > - spin_unlock_irqrestore(&pfree_xmitbuf_queue->lock, irqL); > > -} > - > -/* > - * Calling context: > - * 1. OS_TXENTRY > - * 2. RXENTRY (rx_thread or RX_ISR/RX_CallBack) > - * > - * If we turn on USE_RXTHREAD, then, no need for critical section. > - * Otherwise, we must use _enter/_exit critical to protect free_xmit_queue... > - * > - * Must be very very cautious... > - * > - */ > -struct xmit_frame *r8712_alloc_xmitframe(struct xmit_priv pxmitpriv) > -{ > - / > - * Please remember to use all the osdep_service api, > - * and lock/unlock or _enter/_exit critical to protect > - * pfree_xmit_queue > - */ > - unsigned long irqL; > - struct xmit_frame *pxframe; > - struct __queue *pfree_xmit_queue = &pxmitpriv->free_xmit_queue; > > - > - spin_lock_irqsave(&pfree_xmit_queue->lock, irqL); > > - pxframe = list_first_entry_or_null(&pfree_xmit_queue->queue, > > - struct xmit_frame, list); > - if (pxframe) { > - list_del_init(&pxframe->list); > > - pxmitpriv->free_xmitframe_cnt--; > > - pxframe->buf_addr = NULL; > > - pxframe->pxmitbuf = NULL; > > - pxframe->attrib.psta = NULL; > > - pxframe->pkt = NULL; > > - } > - spin_unlock_irqrestore(&pfree_xmit_queue->lock, irqL); > > - return pxframe; > -} > - > -void r8712_free_xmitframe(struct xmit_priv *pxmitpriv, > - struct xmit_frame *pxmitframe) > -{ > - unsigned long irqL; > - struct __queue *pfree_xmit_queue = &pxmitpriv->free_xmit_queue; > > - struct _adapter *padapter = pxmitpriv->adapter; > > - > - if (!pxmitframe) > - return; > - spin_lock_irqsave(&pfree_xmit_queue->lock, irqL); > > - list_del_init(&pxmitframe->list); > > - if (pxmitframe->pkt) > > - pxmitframe->pkt = NULL; > > - list_add_tail(&pxmitframe->list, &pfree_xmit_queue->queue); > > - pxmitpriv->free_xmitframe_cnt++; > > - spin_unlock_irqrestore(&pfree_xmit_queue->lock, irqL); > > - if (netif_queue_stopped(padapter->pnetdev)) > > - netif_wake_queue(padapter->pnetdev); > > -} > - > -void r8712_free_xmitframe_ex(struct xmit_priv *pxmitpriv, > - struct xmit_frame *pxmitframe) > -{ > - if (!pxmitframe) > - return; > - if (pxmitframe->frame_tag == DATA_FRAMETAG) > > - r8712_free_xmitframe(pxmitpriv, pxmitframe); > -} > - > -void r8712_free_xmitframe_queue(struct xmit_priv *pxmitpriv, > - struct __queue *pframequeue) > -{ > - unsigned long irqL; > - struct list_head *plist, *phead; > - struct xmit_frame *pxmitframe; > - > - spin_lock_irqsave(&pframequeue->lock, irqL); > > - phead = &pframequeue->queue; > > - plist = phead->next; > > - while (!end_of_queue_search(phead, plist)) { > - pxmitframe = container_of(plist, struct xmit_frame, list); > - plist = plist->next; > > - r8712_free_xmitframe(pxmitpriv, pxmitframe); > - } > - spin_unlock_irqrestore(&pframequeue->lock, irqL); > > -} > - > -static inline struct tx_servq *get_sta_pending(struct _adapter *padapter, > - struct __queue **ppstapending, > - struct sta_info *psta, sint up) > -{ > - struct tx_servq *ptxservq; > - struct hw_xmit *phwxmits = padapter->xmitpriv.hwxmits; > > - > - switch (up) { > - case 1: > - case 2: > - ptxservq = &psta->sta_xmitpriv.bk_q; > > - *ppstapending = &padapter->xmitpriv.bk_pending; > > - (phwxmits + 3)->accnt++; > > - break; > - case 4: > - case 5: > - ptxservq = &psta->sta_xmitpriv.vi_q; > > - *ppstapending = &padapter->xmitpriv.vi_pending; > > - (phwxmits + 1)->accnt++; > > - break; > - case 6: > - case 7: > - ptxservq = &psta->sta_xmitpriv.vo_q; > > - *ppstapending = &padapter->xmitpriv.vo_pending; > > - (phwxmits + 0)->accnt++; > > - break; > - case 0: > - case 3: > - default: > - ptxservq = &psta->sta_xmitpriv.be_q; > > - *ppstapending = &padapter->xmitpriv.be_pending; > > - (phwxmits + 2)->accnt++; > > - break; > - } > - return ptxservq; > -} > - > -/* > - * Will enqueue pxmitframe to the proper queue, and indicate it > - * to xx_pending list..... > - */ > -int r8712_xmit_classifier(struct _adapter *padapter, > - struct xmit_frame *pxmitframe) > -{ > - unsigned long irqL0; > - struct __queue *pstapending; > - struct sta_info *psta; > - struct tx_servq *ptxservq; > - struct pkt_attrib *pattrib = &pxmitframe->attrib; > > - struct sta_priv *pstapriv = &padapter->stapriv; > > - struct mlme_priv *pmlmepriv = &padapter->mlmepriv; > > - bool bmcst = is_multicast_ether_addr(pattrib->ra); > > - > - if (pattrib->psta) { > > - psta = pattrib->psta; > > - } else { > - if (bmcst) { > - psta = r8712_get_bcmc_stainfo(padapter); > - } else { > - if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) > - psta = r8712_get_stainfo(pstapriv, > - get_bssid(pmlmepriv)); > - else > - psta = r8712_get_stainfo(pstapriv, pattrib->ra); > > - } > - } > - if (!psta) > - return -EINVAL; > - ptxservq = get_sta_pending(padapter, &pstapending, > - psta, pattrib->priority); > > - spin_lock_irqsave(&pstapending->lock, irqL0); > > - if (list_empty(&ptxservq->tx_pending)) > > - list_add_tail(&ptxservq->tx_pending, &pstapending->queue); > > - list_add_tail(&pxmitframe->list, &ptxservq->sta_pending.queue); > > - ptxservq->qcnt++; > > - spin_unlock_irqrestore(&pstapending->lock, irqL0); > > - return 0; > -} > - > -static void alloc_hwxmits(struct _adapter *padapter) > -{ > - struct hw_xmit *hwxmits; > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - > - pxmitpriv->hwxmit_entry = HWXMIT_ENTRY; > > - pxmitpriv->hwxmits = kmalloc_array(pxmitpriv->hwxmit_entry, > > - sizeof(struct hw_xmit), GFP_ATOMIC); > - if (!pxmitpriv->hwxmits) > > - return; > - hwxmits = pxmitpriv->hwxmits; > > - if (pxmitpriv->hwxmit_entry == 5) { > > - pxmitpriv->bmc_txqueue.head = 0; > > - hwxmits[0] .phwtxqueue = &pxmitpriv->bmc_txqueue; > > - hwxmits[0] .sta_queue = &pxmitpriv->bm_pending; > > - pxmitpriv->vo_txqueue.head = 0; > > - hwxmits[1] .phwtxqueue = &pxmitpriv->vo_txqueue; > > - hwxmits[1] .sta_queue = &pxmitpriv->vo_pending; > > - pxmitpriv->vi_txqueue.head = 0; > > - hwxmits[2] .phwtxqueue = &pxmitpriv->vi_txqueue; > > - hwxmits[2] .sta_queue = &pxmitpriv->vi_pending; > > - pxmitpriv->bk_txqueue.head = 0; > > - hwxmits[3] .phwtxqueue = &pxmitpriv->bk_txqueue; > > - hwxmits[3] .sta_queue = &pxmitpriv->bk_pending; > > - pxmitpriv->be_txqueue.head = 0; > > - hwxmits[4] .phwtxqueue = &pxmitpriv->be_txqueue; > > - hwxmits[4] .sta_queue = &pxmitpriv->be_pending; > > - } else if (pxmitpriv->hwxmit_entry == 4) { > > - pxmitpriv->vo_txqueue.head = 0; > > - hwxmits[0] .phwtxqueue = &pxmitpriv->vo_txqueue; > > - hwxmits[0] .sta_queue = &pxmitpriv->vo_pending; > > - pxmitpriv->vi_txqueue.head = 0; > > - hwxmits[1] .phwtxqueue = &pxmitpriv->vi_txqueue; > > - hwxmits[1] .sta_queue = &pxmitpriv->vi_pending; > > - pxmitpriv->be_txqueue.head = 0; > > - hwxmits[2] .phwtxqueue = &pxmitpriv->be_txqueue; > > - hwxmits[2] .sta_queue = &pxmitpriv->be_pending; > > - pxmitpriv->bk_txqueue.head = 0; > > - hwxmits[3] .phwtxqueue = &pxmitpriv->bk_txqueue; > > - hwxmits[3] .sta_queue = &pxmitpriv->bk_pending; > > - } > -} > - > -static void free_hwxmits(struct _adapter *padapter) > -{ > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - > - kfree(pxmitpriv->hwxmits); > > -} > - > -static void init_hwxmits(struct hw_xmit *phwxmit, sint entry) > -{ > - sint i; > - > - for (i = 0; i < entry; i++, phwxmit++) { > - spin_lock_init(&phwxmit->xmit_lock); > > - INIT_LIST_HEAD(&phwxmit->pending); > > - phwxmit->txcmdcnt = 0; > > - phwxmit->accnt = 0; > > - } > -} > - > -void xmitframe_xmitbuf_attach(struct xmit_frame *pxmitframe, > - struct xmit_buf pxmitbuf) > -{ > - / pxmitbuf attach to pxmitframe */ > - pxmitframe->pxmitbuf = pxmitbuf; > > - /* urb and irp connection */ > - pxmitframe->pxmit_urb[0] = pxmitbuf->pxmit_urb[0]; > > - /* buffer addr assoc */ > - pxmitframe->buf_addr = pxmitbuf->pbuf; > > - /* pxmitframe attach to pxmitbuf */ > - pxmitbuf->priv_data = pxmitframe; > > -} > - > -/* > - * tx_action == 0 == no frames to transmit > - * tx_action > 0 ==> we have frames to transmit > > - * tx_action < 0 ==> we have frames to transmit, but TXFF is not even enough > > - * to transmit 1 frame. > - */ > - > -int r8712_pre_xmit(struct _adapter *padapter, struct xmit_frame *pxmitframe) > -{ > - unsigned long irqL; > - int ret; > - struct xmit_buf *pxmitbuf = NULL; > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - struct pkt_attrib *pattrib = &pxmitframe->attrib; > > - > - r8712_do_queue_select(padapter, pattrib); > - spin_lock_irqsave(&pxmitpriv->lock, irqL); > > - if (r8712_txframes_sta_ac_pending(padapter, pattrib) > 0) { > > - ret = false; > - r8712_xmit_enqueue(padapter, pxmitframe); > - spin_unlock_irqrestore(&pxmitpriv->lock, irqL); > > - return ret; > - } > - pxmitbuf = r8712_alloc_xmitbuf(pxmitpriv); > - if (!pxmitbuf) { /enqueue packet/ > - ret = false; > - r8712_xmit_enqueue(padapter, pxmitframe); > - spin_unlock_irqrestore(&pxmitpriv->lock, irqL); > > - } else { /dump packet directly/ > - spin_unlock_irqrestore(&pxmitpriv->lock, irqL); > > - ret = true; > - xmitframe_xmitbuf_attach(pxmitframe, pxmitbuf); > - r8712_xmit_direct(padapter, pxmitframe); > - } > - return ret; > -} > diff --git a/drivers/staging/rtl8712/rtl871x_xmit.h b/drivers/staging/rtl8712/rtl871x_xmit.h > deleted file mode 100644 > index 784172c385e3..000000000000 > --- a/drivers/staging/rtl8712/rtl871x_xmit.h > +++ /dev/null > @@ -1,287 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************/ > -#ifndef RTL871X_XMIT_H > -#define RTL871X_XMIT_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "xmit_osdep.h" > - > -#ifdef CONFIG_R8712_TX_AGGR > -#define MAX_XMITBUF_SZ (16384) > -#else > -#define MAX_XMITBUF_SZ (2048) > -#endif > - > -#define NR_XMITBUFF (4) > - > -#ifdef CONFIG_R8712_TX_AGGR > -#define AGGR_NR_HIGH_BOUND (4) /(8) / > -#define AGGR_NR_LOW_BOUND (2) > -#endif > - > -#define XMITBUF_ALIGN_SZ 512 > -#define TX_GUARD_BAND 5 > -#define MAX_NUMBLKS (1) > - > -/ Fixed the Big Endian bug when using the software driver encryption./ > -#define WEP_IV(pattrib_iv, txpn, keyidx)\ > -do { \ > - pattrib_iv[0] = txpn.byte.TSC0;\ > - pattrib_iv[1] = txpn.byte.TSC1;\ > - pattrib_iv[2] = txpn.byte.TSC2;\ > - pattrib_iv[3] = ((keyidx & 0x3) << 6);\ > - txpn.val = (txpn.val == 0xffffff) ? 0 : (txpn.val + 1);\ > -} while (0) > - > -/ Fixed the Big Endian bug when doing the Tx. > - * The Linksys WRH54G will check this. > - / > -#define TKIP_IV(pattrib_iv, txpn, keyidx)\ > -do { \ > - pattrib_iv[0] = txpn.byte.TSC1;\ > - pattrib_iv[1] = (txpn.byte.TSC1 | 0x20) & 0x7f;\ > - pattrib_iv[2] = txpn.byte.TSC0;\ > - pattrib_iv[3] = BIT(5) | ((keyidx & 0x3) << 6);\ > - pattrib_iv[4] = txpn.byte.TSC2;\ > - pattrib_iv[5] = txpn.byte.TSC3;\ > - pattrib_iv[6] = txpn.byte.TSC4;\ > - pattrib_iv[7] = txpn.byte.TSC5;\ > - txpn.val = txpn.val == 0xffffffffffffULL ? 0 : \ > - (txpn.val + 1);\ > -} while (0) > - > -#define AES_IV(pattrib_iv, txpn, keyidx)\ > -do { \ > - pattrib_iv[0] = txpn.byte.TSC0;\ > - pattrib_iv[1] = txpn.byte.TSC1;\ > - pattrib_iv[2] = 0;\ > - pattrib_iv[3] = BIT(5) | ((keyidx & 0x3) << 6);\ > - pattrib_iv[4] = txpn.byte.TSC2;\ > - pattrib_iv[5] = txpn.byte.TSC3;\ > - pattrib_iv[6] = txpn.byte.TSC4;\ > - pattrib_iv[7] = txpn.byte.TSC5;\ > - txpn.val = txpn.val == 0xffffffffffffULL ? 0 : \ > - (txpn.val + 1);\ > -} while (0) > - > -struct hw_xmit { > - spinlock_t xmit_lock; > - struct list_head pending; > - struct __queue sta_queue; > - struct hw_txqueue phwtxqueue; > - sint txcmdcnt; > - int accnt; > -}; > - > -struct pkt_attrib { > - u8 type; > - u8 subtype; > - u8 bswenc; > - u8 dhcp_pkt; > - > - u16 seqnum; > - u16 ether_type; > - u16 pktlen; / the original 802.3 pkt raw_data len > - * (not include ether_hdr data) > - / > - u16 last_txcmdsz; > - > - u8 pkt_hdrlen; /the original 802.3 pkt header len/ > - u8 hdrlen; /the WLAN Header Len/ > - u8 nr_frags; > - u8 ack_policy; > - u8 mac_id; > - u8 vcs_mode; /virtual carrier sense method/ > - u8 pctrl;/per packet txdesc control enable/ > - u8 qsel; > - > - u8 priority; > - u8 encrypt; / when 0 indicate no encrypt. when non-zero, > - * indicate the encrypt algorithm > - / > - u8 iv_len; > - u8 icv_len; > - unsigned char iv[8]; > - unsigned char icv[8]; > - u8 dst[ETH_ALEN] __aligned(2); / for ether_addr_copy / > - u8 src[ETH_ALEN]; > - u8 ta[ETH_ALEN]; > - u8 ra[ETH_ALEN]; > - struct sta_info psta; > -}; > - > -#define WLANHDR_OFFSET 64 > -#define DATA_FRAMETAG 0x01 > -#define L2_FRAMETAG 0x02 > -#define MGNT_FRAMETAG 0x03 > -#define AMSDU_FRAMETAG 0x04 > -#define EII_FRAMETAG 0x05 > -#define IEEE8023_FRAMETAG 0x06 > -#define MP_FRAMETAG 0x07 > -#define TXAGG_FRAMETAG 0x08 > - > -struct xmit_buf { > - struct list_head list; > - > - u8 pallocated_buf; > - u8 pbuf; > - void priv_data; > - struct urb pxmit_urb[8]; > - u32 aggr_nr; > -}; > - > -struct xmit_frame { > - struct list_head list; > - struct pkt_attrib attrib; > - _pkt pkt; > - int frame_tag; > - struct _adapter padapter; > - u8 buf_addr; > - struct xmit_buf pxmitbuf; > - u8 mem_addr; > - u16 sz[8]; > - struct urb pxmit_urb[8]; > - u8 bpending[8]; > - u8 last[8]; > -}; > - > -struct tx_servq { > - struct list_head tx_pending; > - struct __queue sta_pending; > - int qcnt; > -}; > - > -struct sta_xmit_priv { > - spinlock_t lock; > - sint option; > - sint apsd_setting; / When bit mask is on, the associated edca > - * queue supports APSD. > - / > - struct tx_servq be_q; / priority == 0,3 / > - struct tx_servq bk_q; / priority == 1,2/ > - struct tx_servq vi_q; /priority == 4,5/ > - struct tx_servq vo_q; /priority == 6,7/ > - struct list_head legacy_dz; > - struct list_head apsd; > - u16 txseq_tid[16]; > - uint sta_tx_bytes; > - u64 sta_tx_pkts; > - uint sta_tx_fail; > -}; > - > -struct hw_txqueue { > - sint head; > - sint tail; > - sint free_sz; / in units of 64 bytes / > - sint free_cmdsz; > - sint txsz[8]; > - uint ff_hwaddr; > - uint cmd_hwaddr; > - sint ac_tag; > -}; > - > -struct xmit_priv { > - spinlock_t lock; > - struct __queue be_pending; > - struct __queue bk_pending; > - struct __queue vi_pending; > - struct __queue vo_pending; > - struct __queue bm_pending; > - struct __queue legacy_dz_queue; > - struct __queue apsd_queue; > - u8 pallocated_frame_buf; > - u8 pxmit_frame_buf; > - uint free_xmitframe_cnt; > - uint mapping_addr; > - uint pkt_sz; > - struct __queue free_xmit_queue; > - struct hw_txqueue be_txqueue; > - struct hw_txqueue bk_txqueue; > - struct hw_txqueue vi_txqueue; > - struct hw_txqueue vo_txqueue; > - struct hw_txqueue bmc_txqueue; > - uint frag_len; > - struct _adapter adapter; > - u8 vcs_setting; > - u8 vcs; > - u8 vcs_type; > - u16 rts_thresh; > - uint tx_bytes; > - u64 tx_pkts; > - uint tx_drop; > - struct hw_xmit hwxmits; > - u8 hwxmit_entry; > - u8 txirp_cnt; > - struct tasklet_struct xmit_tasklet; > - struct work_struct xmit_pipe4_reset_wi; > - struct work_struct xmit_pipe6_reset_wi; > - struct work_struct xmit_piped_reset_wi; > - /per AC pending irp/ > - int beq_cnt; > - int bkq_cnt; > - int viq_cnt; > - int voq_cnt; > - struct __queue free_amsdu_xmit_queue; > - u8 pallocated_amsdu_frame_buf; > - u8 pxmit_amsdu_frame_buf; > - uint free_amsdu_xmitframe_cnt; > - struct __queue free_txagg_xmit_queue; > - u8 pallocated_txagg_frame_buf; > - u8 pxmit_txagg_frame_buf; > - uint free_txagg_xmitframe_cnt; > - int cmdseq; > - struct __queue free_xmitbuf_queue; > - struct __queue pending_xmitbuf_queue; > - u8 pxmitbuf; > - uint free_xmitbuf_cnt; > -}; > - > -void r8712_free_xmitbuf(struct xmit_priv pxmitpriv, > - struct xmit_buf pxmitbuf); > -struct xmit_buf r8712_alloc_xmitbuf(struct xmit_priv pxmitpriv); > -void r8712_update_protection(struct _adapter padapter, u8 ie, uint ie_len); > -struct xmit_frame r8712_alloc_xmitframe(struct xmit_priv pxmitpriv); > -void r8712_free_xmitframe(struct xmit_priv pxmitpriv, > - struct xmit_frame pxmitframe); > -void r8712_free_xmitframe_queue(struct xmit_priv pxmitpriv, > - struct __queue pframequeue); > -int r8712_xmit_classifier(struct _adapter padapter, > - struct xmit_frame pxmitframe); > -sint r8712_xmitframe_coalesce(struct _adapter padapter, _pkt pkt, > - struct xmit_frame pxmitframe); > -sint _r8712_init_hw_txqueue(struct hw_txqueue phw_txqueue, u8 ac_tag); > -void _r8712_init_sta_xmit_priv(struct sta_xmit_priv psta_xmitpriv); > -int r8712_update_attrib(struct _adapter padapter, _pkt pkt, > - struct pkt_attrib pattrib); > -int r8712_txframes_sta_ac_pending(struct _adapter padapter, > - struct pkt_attrib pattrib); > -int _r8712_init_xmit_priv(struct xmit_priv pxmitpriv, > - struct _adapter padapter); > -void _free_xmit_priv(struct xmit_priv pxmitpriv); > -void r8712_free_xmitframe_ex(struct xmit_priv pxmitpriv, > - struct xmit_frame pxmitframe); > -int r8712_pre_xmit(struct _adapter padapter, struct xmit_frame pxmitframe); > -int r8712_xmit_enqueue(struct _adapter padapter, > - struct xmit_frame pxmitframe); > -void r8712_xmit_direct(struct _adapter padapter, struct xmit_frame pxmitframe); > -void r8712_xmit_bh(struct tasklet_struct t); > - > -void xmitframe_xmitbuf_attach(struct xmit_frame pxmitframe, > - struct xmit_buf pxmitbuf); > - > -#include "rtl8712_xmit.h" > - > -#endif /RTL871X_XMIT_H/ > - > diff --git a/drivers/staging/rtl8712/sta_info.h b/drivers/staging/rtl8712/sta_info.h > deleted file mode 100644 > index 6286c622475e..000000000000 > --- a/drivers/staging/rtl8712/sta_info.h > +++ /dev/null > @@ -1,132 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ****************************************************************************/ > -#ifndef _STA_INFO_H > -#define _STA_INFO_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "wifi.h" > - > -#define NUM_STA 32 > -#define NUM_ACL 64 > - > -/ if mode ==0, then the sta is allowed once the addr is hit. > - * if mode ==1, then the sta is rejected once the addr is non-hit. > - / > -struct wlan_acl_node { > - struct list_head list; > - u8 addr[ETH_ALEN]; > - u8 mode; > -}; > - > -struct wlan_acl_pool { > - struct wlan_acl_node aclnode[NUM_ACL]; > -}; > - > -struct stainfo_stats { > - uint rx_pkts; > - uint rx_bytes; > - u64 tx_pkts; > - uint tx_bytes; > -}; > - > -struct sta_info { > - spinlock_t lock; > - struct list_head list; /free_sta_queue/ > - struct list_head hash_list; /sta_hash/ > - struct sta_xmit_priv sta_xmitpriv; > - struct sta_recv_priv sta_recvpriv; > - uint state; > - uint aid; > - uint mac_id; > - uint qos_option; > - u8 hwaddr[ETH_ALEN]; > - uint ieee8021x_blocked; /0: allowed, 1:blocked / > - uint XPrivacy; /aes, tkip.../ > - union Keytype tkiptxmickey; > - union Keytype tkiprxmickey; > - union Keytype x_UncstKey; > - union pn48 txpn; / PN48 used for Unicast xmit./ > - union pn48 rxpn; / PN48 used for Unicast recv./ > - u8 bssrateset[16]; > - uint bssratelen; > - s32 rssi; > - s32 signal_quality; > - struct stainfo_stats sta_stats; > - /*for A-MPDU Rx reordering buffer control / > - struct recv_reorder_ctrl recvreorder_ctrl[16]; > - struct ht_priv htpriv; > - / Notes: > - * STA_Mode: > - * curr_network(mlme_priv/security_priv/qos/ht) > - * + sta_info: (STA & AP) CAP/INFO > - * scan_q: AP CAP/INFO > - * AP_Mode: > - * curr_network(mlme_priv/security_priv/qos/ht) : AP CAP/INFO > - * sta_info: (AP & STA) CAP/INFO > - */ > - struct list_head asoc_list; > - struct list_head auth_list; > - unsigned int expire_to; > - unsigned int auth_seq; > - unsigned int authalg; > - unsigned char chg_txt[128]; > - unsigned int tx_ra_bitmap; > -}; > - > -struct sta_priv { > - u8 *pallocated_stainfo_buf; > - u8 *pstainfo_buf; > - struct __queue free_sta_queue; > - spinlock_t sta_hash_lock; > - struct list_head sta_hash[NUM_STA]; > - int asoc_sta_count; > - struct __queue sleep_q; > - struct __queue wakeup_q; > - struct _adapter padapter; > - struct list_head asoc_list; > - struct list_head auth_list; > - unsigned int auth_to; / sec, time to expire in authenticating. / > - unsigned int assoc_to; / sec, time to expire before associating. / > - unsigned int expire_to; / sec , time to expire after associated. */ > -}; > - > -static inline u32 wifi_mac_hash(u8 *mac) > -{ > - u32 x; > - > - x = mac[0]; > - x = (x << 2) ^ mac[1]; > - x = (x << 2) ^ mac[2]; > - x = (x << 2) ^ mac[3]; > - x = (x << 2) ^ mac[4]; > - x = (x << 2) ^ mac[5]; > - x ^= x >> 8; > > - x = x & (NUM_STA - 1); > - return x; > -} > - > -int _r8712_init_sta_priv(struct sta_priv pstapriv); > -void _r8712_free_sta_priv(struct sta_priv pstapriv); > -struct sta_info r8712_alloc_stainfo(struct sta_priv pstapriv, > - u8 hwaddr); > -void r8712_free_stainfo(struct _adapter padapter, struct sta_info psta); > -void r8712_free_all_stainfo(struct _adapter padapter); > -struct sta_info r8712_get_stainfo(struct sta_priv pstapriv, u8 hwaddr); > -void r8712_init_bcmc_stainfo(struct _adapter padapter); > -struct sta_info r8712_get_bcmc_stainfo(struct _adapter padapter); > -u8 r8712_access_ctrl(struct wlan_acl_pool pacl_list, u8 mac_addr); > - > -#endif / STA_INFO_H / > - > diff --git a/drivers/staging/rtl8712/usb_halinit.c b/drivers/staging/rtl8712/usb_halinit.c > deleted file mode 100644 > index b3cd59b9830c..000000000000 > --- a/drivers/staging/rtl8712/usb_halinit.c > +++ /dev/null > @@ -1,307 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/************************************************************** > - * usb_halinit.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define HCI_HAL_INIT_C > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "usb_ops.h" > -#include "usb_osintf.h" > - > -u8 r8712_usb_hal_bus_init(struct _adapter *adapter) > -{ > - u8 val8 = 0; > - u8 ret = _SUCCESS; > - int PollingCnt = 20; > - struct registry_priv *registrypriv = &adapter->registrypriv; > > - > - if (registrypriv->chip_version == RTL8712_FPGA) { > > - val8 = 0x01; > - /* switch to 80M clock / > - r8712_write8(adapter, SYS_CLKR, val8); > - val8 = r8712_read8(adapter, SPS1_CTRL); > - val8 = val8 | 0x01; > - / enable VSPS12 LDO Macro block / > - r8712_write8(adapter, SPS1_CTRL, val8); > - val8 = r8712_read8(adapter, AFE_MISC); > - val8 = val8 | 0x01; > - / Enable AFE Macro Block's Bandgap / > - r8712_write8(adapter, AFE_MISC, val8); > - val8 = r8712_read8(adapter, LDOA15_CTRL); > - val8 = val8 | 0x01; > - / enable LDOA15 block / > - r8712_write8(adapter, LDOA15_CTRL, val8); > - val8 = r8712_read8(adapter, SPS1_CTRL); > - val8 = val8 | 0x02; > - / Enable VSPS12_SW Macro Block / > - r8712_write8(adapter, SPS1_CTRL, val8); > - val8 = r8712_read8(adapter, AFE_MISC); > - val8 = val8 | 0x02; > - / Enable AFE Macro Block's Mbias / > - r8712_write8(adapter, AFE_MISC, val8); > - val8 = r8712_read8(adapter, SYS_ISO_CTRL + 1); > - val8 = val8 | 0x08; > - / isolate PCIe Analog 1.2V to PCIe 3.3V and PCIE Digital / > - r8712_write8(adapter, SYS_ISO_CTRL + 1, val8); > - val8 = r8712_read8(adapter, SYS_ISO_CTRL + 1); > - val8 = val8 & 0xEF; > - / attach AFE PLL to MACTOP/BB/PCIe Digital / > - r8712_write8(adapter, SYS_ISO_CTRL + 1, val8); > - val8 = r8712_read8(adapter, AFE_XTAL_CTRL + 1); > - val8 = val8 & 0xFB; > - / enable AFE clock / > - r8712_write8(adapter, AFE_XTAL_CTRL + 1, val8); > - val8 = r8712_read8(adapter, AFE_PLL_CTRL); > - val8 = val8 | 0x01; > - / Enable AFE PLL Macro Block / > - r8712_write8(adapter, AFE_PLL_CTRL, val8); > - val8 = 0xEE; > - / release isolation AFE PLL & MD / > - r8712_write8(adapter, SYS_ISO_CTRL, val8); > - val8 = r8712_read8(adapter, SYS_CLKR + 1); > - val8 = val8 | 0x08; > - / enable MAC clock / > - r8712_write8(adapter, SYS_CLKR + 1, val8); > - val8 = r8712_read8(adapter, SYS_FUNC_EN + 1); > - val8 = val8 | 0x08; > - / enable Core digital and enable IOREG R/W / > - r8712_write8(adapter, SYS_FUNC_EN + 1, val8); > - val8 = val8 | 0x80; > - / enable REG_EN / > - r8712_write8(adapter, SYS_FUNC_EN + 1, val8); > - val8 = r8712_read8(adapter, SYS_CLKR + 1); > - val8 = (val8 | 0x80) & 0xBF; > - / switch the control path / > - r8712_write8(adapter, SYS_CLKR + 1, val8); > - val8 = 0xFC; > - r8712_write8(adapter, CR, val8); > - val8 = 0x37; > - r8712_write8(adapter, CR + 1, val8); > - / reduce EndPoint & init it / > - r8712_write8(adapter, 0x102500ab, r8712_read8(adapter, > - 0x102500ab) | BIT(6) | BIT(7)); > - / consideration of power consumption - init */ > - r8712_write8(adapter, 0x10250008, r8712_read8(adapter, > - 0x10250008) & 0xfffffffb); > - } else if (registrypriv->chip_version == RTL8712_1stCUT) { > > - /* Initialization for power on sequence, / > - r8712_write8(adapter, SPS0_CTRL + 1, 0x53); > - r8712_write8(adapter, SPS0_CTRL, 0x57); > - / Enable AFE Macro Block's Bandgap and Enable AFE Macro > - * Block's Mbias > - / > - val8 = r8712_read8(adapter, AFE_MISC); > - r8712_write8(adapter, AFE_MISC, (val8 | AFE_MISC_BGEN | > - AFE_MISC_MBEN)); > - / Enable LDOA15 block / > - val8 = r8712_read8(adapter, LDOA15_CTRL); > - r8712_write8(adapter, LDOA15_CTRL, (val8 | LDA15_EN)); > - val8 = r8712_read8(adapter, SPS1_CTRL); > - r8712_write8(adapter, SPS1_CTRL, (val8 | SPS1_LDEN)); > - msleep(20); > - / Enable Switch Regulator Block / > - val8 = r8712_read8(adapter, SPS1_CTRL); > - r8712_write8(adapter, SPS1_CTRL, (val8 | SPS1_SWEN)); > - r8712_write32(adapter, SPS1_CTRL, 0x00a7b267); > - val8 = r8712_read8(adapter, SYS_ISO_CTRL + 1); > - r8712_write8(adapter, SYS_ISO_CTRL + 1, (val8 | 0x08)); > - / Engineer Packet CP test Enable / > - val8 = r8712_read8(adapter, SYS_FUNC_EN + 1); > - r8712_write8(adapter, SYS_FUNC_EN + 1, (val8 | 0x20)); > - val8 = r8712_read8(adapter, SYS_ISO_CTRL + 1); > - r8712_write8(adapter, SYS_ISO_CTRL + 1, (val8 & 0x6F)); > - / Enable AFE clock / > - val8 = r8712_read8(adapter, AFE_XTAL_CTRL + 1); > - r8712_write8(adapter, AFE_XTAL_CTRL + 1, (val8 & 0xfb)); > - / Enable AFE PLL Macro Block / > - val8 = r8712_read8(adapter, AFE_PLL_CTRL); > - r8712_write8(adapter, AFE_PLL_CTRL, (val8 | 0x11)); > - / Attach AFE PLL to MACTOP/BB/PCIe Digital / > - val8 = r8712_read8(adapter, SYS_ISO_CTRL); > - r8712_write8(adapter, SYS_ISO_CTRL, (val8 & 0xEE)); > - / Switch to 40M clock / > - val8 = r8712_read8(adapter, SYS_CLKR); > - r8712_write8(adapter, SYS_CLKR, val8 & (~SYS_CLKSEL)); > - / SSC Disable / > - val8 = r8712_read8(adapter, SYS_CLKR); > - / Enable MAC clock / > - val8 = r8712_read8(adapter, SYS_CLKR + 1); > - r8712_write8(adapter, SYS_CLKR + 1, (val8 | 0x18)); > - / Revised POS, / > - r8712_write8(adapter, PMC_FSM, 0x02); > - / Enable Core digital and enable IOREG R/W / > - val8 = r8712_read8(adapter, SYS_FUNC_EN + 1); > - r8712_write8(adapter, SYS_FUNC_EN + 1, (val8 | 0x08)); > - / Enable REG_EN / > - val8 = r8712_read8(adapter, SYS_FUNC_EN + 1); > - r8712_write8(adapter, SYS_FUNC_EN + 1, (val8 | 0x80)); > - / Switch the control path to FW / > - val8 = r8712_read8(adapter, SYS_CLKR + 1); > - r8712_write8(adapter, SYS_CLKR + 1, (val8 | 0x80) & 0xBF); > - r8712_write8(adapter, CR, 0xFC); > - r8712_write8(adapter, CR + 1, 0x37); > - / Fix the RX FIFO issue(usb error), / > - val8 = r8712_read8(adapter, 0x1025FE5c); > - r8712_write8(adapter, 0x1025FE5c, (val8 | BIT(7))); > - val8 = r8712_read8(adapter, 0x102500ab); > - r8712_write8(adapter, 0x102500ab, (val8 | BIT(6) | BIT(7))); > - / For power save, used this in the bit file after 970621 */ > - val8 = r8712_read8(adapter, SYS_CLKR); > - r8712_write8(adapter, SYS_CLKR, val8 & (~CPU_CLKSEL)); > - } else if (registrypriv->chip_version == RTL8712_2ndCUT || > > - registrypriv->chip_version == RTL8712_3rdCUT) { > > - /* Initialization for power on sequence, > - * E-Fuse leakage prevention sequence > - / > - r8712_write8(adapter, 0x37, 0xb0); > - msleep(20); > - r8712_write8(adapter, 0x37, 0x30); > - / Set control path switch to HW control and reset Digital Core, > - * CPU Core and MAC I/O to solve FW download fail when system > - * from resume sate. > - / > - val8 = r8712_read8(adapter, SYS_CLKR + 1); > - if (val8 & 0x80) { > - val8 &= 0x3f; > - r8712_write8(adapter, SYS_CLKR + 1, val8); > - } > - val8 = r8712_read8(adapter, SYS_FUNC_EN + 1); > - val8 &= 0x73; > - r8712_write8(adapter, SYS_FUNC_EN + 1, val8); > - msleep(20); > - / Revised POS, / > - / Enable AFE Macro Block's Bandgap and Enable AFE Macro > - * Block's Mbias > - / > - r8712_write8(adapter, SPS0_CTRL + 1, 0x53); > - r8712_write8(adapter, SPS0_CTRL, 0x57); > - val8 = r8712_read8(adapter, AFE_MISC); > - /Bandgap/ > - r8712_write8(adapter, AFE_MISC, (val8 | AFE_MISC_BGEN)); > - r8712_write8(adapter, AFE_MISC, (val8 | AFE_MISC_BGEN | > - AFE_MISC_MBEN | AFE_MISC_I32_EN)); > - / Enable PLL Power (LDOA15V) / > - val8 = r8712_read8(adapter, LDOA15_CTRL); > - r8712_write8(adapter, LDOA15_CTRL, (val8 | LDA15_EN)); > - / Enable LDOV12D block / > - val8 = r8712_read8(adapter, LDOV12D_CTRL); > - r8712_write8(adapter, LDOV12D_CTRL, (val8 | LDV12_EN)); > - val8 = r8712_read8(adapter, SYS_ISO_CTRL + 1); > - r8712_write8(adapter, SYS_ISO_CTRL + 1, (val8 | 0x08)); > - / Engineer Packet CP test Enable / > - val8 = r8712_read8(adapter, SYS_FUNC_EN + 1); > - r8712_write8(adapter, SYS_FUNC_EN + 1, (val8 | 0x20)); > - / Support 64k IMEM / > - val8 = r8712_read8(adapter, SYS_ISO_CTRL + 1); > - r8712_write8(adapter, SYS_ISO_CTRL + 1, (val8 & 0x68)); > - / Enable AFE clock / > - val8 = r8712_read8(adapter, AFE_XTAL_CTRL + 1); > - r8712_write8(adapter, AFE_XTAL_CTRL + 1, (val8 & 0xfb)); > - / Enable AFE PLL Macro Block / > - val8 = r8712_read8(adapter, AFE_PLL_CTRL); > - r8712_write8(adapter, AFE_PLL_CTRL, (val8 | 0x11)); > - / Some sample will download fw failure. The clock will be > - * stable with 500 us delay after reset the PLL > - * TODO: When usleep is added to kernel, change next 3 > - * udelay(500) to usleep(500) > - / > - udelay(500); > - r8712_write8(adapter, AFE_PLL_CTRL, (val8 | 0x51)); > - udelay(500); > - r8712_write8(adapter, AFE_PLL_CTRL, (val8 | 0x11)); > - udelay(500); > - / Attach AFE PLL to MACTOP/BB/PCIe Digital / > - val8 = r8712_read8(adapter, SYS_ISO_CTRL); > - r8712_write8(adapter, SYS_ISO_CTRL, (val8 & 0xEE)); > - / Switch to 40M clock / > - r8712_write8(adapter, SYS_CLKR, 0x00); > - / CPU Clock and 80M Clock SSC Disable to overcome FW download > - * fail timing issue. > - / > - val8 = r8712_read8(adapter, SYS_CLKR); > - r8712_write8(adapter, SYS_CLKR, (val8 | 0xa0)); > - / Enable MAC clock / > - val8 = r8712_read8(adapter, SYS_CLKR + 1); > - r8712_write8(adapter, SYS_CLKR + 1, (val8 | 0x18)); > - / Revised POS, / > - r8712_write8(adapter, PMC_FSM, 0x02); > - / Enable Core digital and enable IOREG R/W / > - val8 = r8712_read8(adapter, SYS_FUNC_EN + 1); > - r8712_write8(adapter, SYS_FUNC_EN + 1, (val8 | 0x08)); > - / Enable REG_EN / > - val8 = r8712_read8(adapter, SYS_FUNC_EN + 1); > - r8712_write8(adapter, SYS_FUNC_EN + 1, (val8 | 0x80)); > - / Switch the control path to FW / > - val8 = r8712_read8(adapter, SYS_CLKR + 1); > - r8712_write8(adapter, SYS_CLKR + 1, (val8 | 0x80) & 0xBF); > - r8712_write8(adapter, CR, 0xFC); > - r8712_write8(adapter, CR + 1, 0x37); > - / Fix the RX FIFO issue(usb error), 970410 / > - val8 = r8712_read8(adapter, 0x1025FE5c); > - r8712_write8(adapter, 0x1025FE5c, (val8 | BIT(7))); > - / For power save, used this in the bit file after 970621 / > - val8 = r8712_read8(adapter, SYS_CLKR); > - r8712_write8(adapter, SYS_CLKR, val8 & (~CPU_CLKSEL)); > - / Revised for 8051 ROM code wrong operation. / > - r8712_write8(adapter, 0x1025fe1c, 0x80); > - / To make sure that TxDMA can ready to download FW. > - * We should reset TxDMA if IMEM RPT was not ready. > - / > - do { > - val8 = r8712_read8(adapter, TCR); > - if ((val8 & _TXDMA_INIT_VALUE) == _TXDMA_INIT_VALUE) > - break; > - udelay(5); / PlatformStallExecution(5); / > - } while (PollingCnt--); / Delay 1ms / > - > - if (PollingCnt <= 0) { > - val8 = r8712_read8(adapter, CR); > - r8712_write8(adapter, CR, val8 & (~_TXDMA_EN)); > - udelay(2); / PlatformStallExecution(2); / > - / Reset TxDMA */ > - r8712_write8(adapter, CR, val8 | _TXDMA_EN); > - } > - } else { > - ret = _FAIL; > - } > - return ret; > -} > - > -unsigned int r8712_usb_inirp_init(struct _adapter *adapter) > -{ > - u8 i; > - struct recv_buf *recvbuf; > - struct intf_hdl *intfhdl = &adapter->pio_queue->intf; > > - struct recv_priv *recvpriv = &adapter->recvpriv; > > - > - recvpriv->ff_hwaddr = RTL8712_DMA_RX0FF; /* mapping rx fifo address */ > > - /* issue Rx irp to receive data */ > - recvbuf = (struct recv_buf *)recvpriv->precv_buf; > > - for (i = 0; i < NR_RECVBUFF; i++) { > - if (r8712_usb_read_port(intfhdl, recvpriv->ff_hwaddr, 0, > > - (unsigned char *)recvbuf) == false) > - return _FAIL; > - recvbuf++; > - recvpriv->free_recv_buf_queue_cnt--; > > - } > - return _SUCCESS; > -} > - > -unsigned int r8712_usb_inirp_deinit(struct _adapter adapter) > -{ > - r8712_usb_read_port_cancel(adapter); > - return _SUCCESS; > -} > diff --git a/drivers/staging/rtl8712/usb_intf.c b/drivers/staging/rtl8712/usb_intf.c > deleted file mode 100644 > index df05213f922f..000000000000 > --- a/drivers/staging/rtl8712/usb_intf.c > +++ /dev/null > @@ -1,638 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/***************************************************************************** > - * usb_intf.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define HCI_INTF_C > - > -#include <linux/usb.h> > > -#include <linux/module.h> > > -#include <linux/firmware.h> > > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "recv_osdep.h" > -#include "xmit_osdep.h" > -#include "rtl8712_efuse.h" > -#include "usb_ops.h" > -#include "usb_osintf.h" > - > -static struct usb_interface *pintf; > - > -static int r871xu_drv_init(struct usb_interface *pusb_intf, > - const struct usb_device_id *pdid); > - > -static void r871xu_dev_remove(struct usb_interface pusb_intf); > - > -static const struct usb_device_id rtl871x_usb_id_tbl[] = { > -/ RTL8188SU / > - / Realtek / > - {USB_DEVICE(0x0BDA, 0x8171)}, > - {USB_DEVICE(0x0bda, 0x8173)}, > - {USB_DEVICE(0x0bda, 0x8712)}, > - {USB_DEVICE(0x0bda, 0x8713)}, > - {USB_DEVICE(0x0bda, 0xC512)}, > - / Abocom / > - {USB_DEVICE(0x07B8, 0x8188)}, > - / ASUS / > - {USB_DEVICE(0x0B05, 0x1786)}, > - {USB_DEVICE(0x0B05, 0x1791)}, / 11n mode disable / > - / Belkin / > - {USB_DEVICE(0x050D, 0x945A)}, > - / ISY IWL - Belkin clone / > - {USB_DEVICE(0x050D, 0x11F1)}, > - / Corega / > - {USB_DEVICE(0x07AA, 0x0047)}, > - / D-Link / > - {USB_DEVICE(0x2001, 0x3306)}, > - {USB_DEVICE(0x07D1, 0x3306)}, / 11n mode disable / > - / Edimax / > - {USB_DEVICE(0x7392, 0x7611)}, > - / EnGenius / > - {USB_DEVICE(0x1740, 0x9603)}, > - / Hawking / > - {USB_DEVICE(0x0E66, 0x0016)}, > - / Hercules / > - {USB_DEVICE(0x06F8, 0xE034)}, > - {USB_DEVICE(0x06F8, 0xE032)}, > - / Logitec / > - {USB_DEVICE(0x0789, 0x0167)}, > - / PCI / > - {USB_DEVICE(0x2019, 0xAB28)}, > - {USB_DEVICE(0x2019, 0xED16)}, > - / Sitecom / > - {USB_DEVICE(0x0DF6, 0x0057)}, > - {USB_DEVICE(0x0DF6, 0x0045)}, > - {USB_DEVICE(0x0DF6, 0x0059)}, / 11n mode disable / > - {USB_DEVICE(0x0DF6, 0x004B)}, > - {USB_DEVICE(0x0DF6, 0x005B)}, > - {USB_DEVICE(0x0DF6, 0x005D)}, > - {USB_DEVICE(0x0DF6, 0x0063)}, > - / Sweex / > - {USB_DEVICE(0x177F, 0x0154)}, > - / Thinkware / > - {USB_DEVICE(0x0BDA, 0x5077)}, > - / Toshiba / > - {USB_DEVICE(0x1690, 0x0752)}, > - / - / > - {USB_DEVICE(0x20F4, 0x646B)}, > - {USB_DEVICE(0x083A, 0xC512)}, > - {USB_DEVICE(0x25D4, 0x4CA1)}, > - {USB_DEVICE(0x25D4, 0x4CAB)}, > - > -/ RTL8191SU / > - / Realtek / > - {USB_DEVICE(0x0BDA, 0x8172)}, > - {USB_DEVICE(0x0BDA, 0x8192)}, > - / Amigo / > - {USB_DEVICE(0x0EB0, 0x9061)}, > - / ASUS/EKB / > - {USB_DEVICE(0x13D3, 0x3323)}, > - {USB_DEVICE(0x13D3, 0x3311)}, / 11n mode disable / > - {USB_DEVICE(0x13D3, 0x3342)}, > - / ASUS/EKBLenovo / > - {USB_DEVICE(0x13D3, 0x3333)}, > - {USB_DEVICE(0x13D3, 0x3334)}, > - {USB_DEVICE(0x13D3, 0x3335)}, / 11n mode disable / > - {USB_DEVICE(0x13D3, 0x3336)}, / 11n mode disable / > - / ASUS/Media BOX / > - {USB_DEVICE(0x13D3, 0x3309)}, > - / Belkin / > - {USB_DEVICE(0x050D, 0x815F)}, > - / D-Link / > - {USB_DEVICE(0x07D1, 0x3302)}, > - {USB_DEVICE(0x07D1, 0x3300)}, > - {USB_DEVICE(0x07D1, 0x3303)}, > - / Edimax / > - {USB_DEVICE(0x7392, 0x7612)}, > - / EnGenius / > - {USB_DEVICE(0x1740, 0x9605)}, > - / Guillemot / > - {USB_DEVICE(0x06F8, 0xE031)}, > - / Hawking / > - {USB_DEVICE(0x0E66, 0x0015)}, > - / Mediao / > - {USB_DEVICE(0x13D3, 0x3306)}, > - / PCI / > - {USB_DEVICE(0x2019, 0xED18)}, > - {USB_DEVICE(0x2019, 0x4901)}, > - / Sitecom / > - {USB_DEVICE(0x0DF6, 0x0058)}, > - {USB_DEVICE(0x0DF6, 0x0049)}, > - {USB_DEVICE(0x0DF6, 0x004C)}, > - {USB_DEVICE(0x0DF6, 0x006C)}, > - {USB_DEVICE(0x0DF6, 0x0064)}, > - / Skyworth / > - {USB_DEVICE(0x14b2, 0x3300)}, > - {USB_DEVICE(0x14b2, 0x3301)}, > - {USB_DEVICE(0x14B2, 0x3302)}, > - / - / > - {USB_DEVICE(0x04F2, 0xAFF2)}, > - {USB_DEVICE(0x04F2, 0xAFF5)}, > - {USB_DEVICE(0x04F2, 0xAFF6)}, > - {USB_DEVICE(0x13D3, 0x3339)}, > - {USB_DEVICE(0x13D3, 0x3340)}, / 11n mode disable / > - {USB_DEVICE(0x13D3, 0x3341)}, / 11n mode disable / > - {USB_DEVICE(0x13D3, 0x3310)}, > - {USB_DEVICE(0x13D3, 0x3325)}, > - > -/ RTL8192SU / > - / Realtek / > - {USB_DEVICE(0x0BDA, 0x8174)}, > - / Belkin / > - {USB_DEVICE(0x050D, 0x845A)}, > - / Corega / > - {USB_DEVICE(0x07AA, 0x0051)}, > - / Edimax / > - {USB_DEVICE(0x7392, 0x7622)}, > - / NEC */ > - {USB_DEVICE(0x0409, 0x02B6)}, > - {} > -}; > - > -MODULE_DEVICE_TABLE(usb, rtl871x_usb_id_tbl); > - > -static struct specific_device_id specific_device_id_tbl[] = { > - {.idVendor = 0x0b05, .idProduct = 0x1791, > - .flags = SPEC_DEV_ID_DISABLE_HT}, > - {.idVendor = 0x0df6, .idProduct = 0x0059, > - .flags = SPEC_DEV_ID_DISABLE_HT}, > - {.idVendor = 0x13d3, .idProduct = 0x3306, > - .flags = SPEC_DEV_ID_DISABLE_HT}, > - {.idVendor = 0x13D3, .idProduct = 0x3311, > - .flags = SPEC_DEV_ID_DISABLE_HT}, > - {.idVendor = 0x13d3, .idProduct = 0x3335, > - .flags = SPEC_DEV_ID_DISABLE_HT}, > - {.idVendor = 0x13d3, .idProduct = 0x3336, > - .flags = SPEC_DEV_ID_DISABLE_HT}, > - {.idVendor = 0x13d3, .idProduct = 0x3340, > - .flags = SPEC_DEV_ID_DISABLE_HT}, > - {.idVendor = 0x13d3, .idProduct = 0x3341, > - .flags = SPEC_DEV_ID_DISABLE_HT}, > - {} > -}; > - > -struct drv_priv { > - struct usb_driver r871xu_drv; > - int drv_registered; > -}; > - > -#ifdef CONFIG_PM > -static int r871x_suspend(struct usb_interface *pusb_intf, pm_message_t state) > -{ > - struct net_device *pnetdev = usb_get_intfdata(pusb_intf); > - struct _adapter *padapter = netdev_priv(pnetdev); > - > - netdev_info(pnetdev, "Suspending...\n"); > - padapter->suspended = true; > > - rtl871x_intf_stop(padapter); > - if (pnetdev->netdev_ops->ndo_stop) > > - pnetdev->netdev_ops->ndo_stop(pnetdev); > > - mdelay(10); > - netif_device_detach(pnetdev); > - return 0; > -} > - > -static void rtl871x_intf_resume(struct _adapter *padapter) > -{ > - if (padapter->dvobjpriv.inirp_init) > > - padapter->dvobjpriv.inirp_init(padapter); > > -} > - > -static int r871x_resume(struct usb_interface *pusb_intf) > -{ > - struct net_device *pnetdev = usb_get_intfdata(pusb_intf); > - struct _adapter *padapter = netdev_priv(pnetdev); > - > - netdev_info(pnetdev, "Resuming...\n"); > - netif_device_attach(pnetdev); > - if (pnetdev->netdev_ops->ndo_open) > > - pnetdev->netdev_ops->ndo_open(pnetdev); > > - padapter->suspended = false; > > - rtl871x_intf_resume(padapter); > - return 0; > -} > -#endif > - > -static struct drv_priv drvpriv = { > - .r871xu_drv.name = "r8712u", > - .r871xu_drv.id_table = rtl871x_usb_id_tbl, > - .r871xu_drv.probe = r871xu_drv_init, > - .r871xu_drv.disconnect = r871xu_dev_remove, > -#ifdef CONFIG_PM > - .r871xu_drv.suspend = r871x_suspend, > - .r871xu_drv.resume = r871x_resume, > -#endif > -}; > - > -static uint r8712_usb_dvobj_init(struct _adapter *padapter) > -{ > - uint status = _SUCCESS; > - struct usb_host_interface *phost_iface; > - struct usb_interface_descriptor *piface_desc; > - struct dvobj_priv *pdvobjpriv = &padapter->dvobjpriv; > > - struct usb_device *pusbd = pdvobjpriv->pusbdev; > > - > - pdvobjpriv->padapter = padapter; > > - padapter->eeprom_address_size = 6; > > - phost_iface = pintf->cur_altsetting; > > - piface_desc = &phost_iface->desc; > > - pdvobjpriv->nr_endpoint = piface_desc->bNumEndpoints; > > - if (pusbd->speed == USB_SPEED_HIGH) { > > - pdvobjpriv->ishighspeed = true; > > - dev_info(&pusbd->dev, "r8712u: USB_SPEED_HIGH with %d endpoints\n", > > - pdvobjpriv->nr_endpoint); > > - } else { > - pdvobjpriv->ishighspeed = false; > > - dev_info(&pusbd->dev, "r8712u: USB_SPEED_LOW with %d endpoints\n", > > - pdvobjpriv->nr_endpoint); > > - } > - if ((r8712_alloc_io_queue(padapter)) == _FAIL) > - status = _FAIL; > - return status; > -} > - > -static void r8712_usb_dvobj_deinit(struct _adapter *padapter) > -{ > - r8712_free_io_queue(padapter); > -} > - > -void rtl871x_intf_stop(struct _adapter *padapter) > -{ > - /disable_hw_interrupt/ > - if (!padapter->surprise_removed) { > > - /*device still exists, so driver can do i/o operation > - * TODO: > - / > - } > - > - / cancel in irp */ > - if (padapter->dvobjpriv.inirp_deinit) > > - padapter->dvobjpriv.inirp_deinit(padapter); > > - /* cancel out irp / > - r8712_usb_write_port_cancel(padapter); > - / TODO:cancel other irps */ > -} > - > -void r871x_dev_unload(struct _adapter *padapter) > -{ > - if (padapter->bup) { > > - /s1./ > - padapter->driver_stopped = true; > > - > - /s3./ > - rtl871x_intf_stop(padapter); > - > - /s4./ > - r8712_stop_drv_threads(padapter); > - > - /s5./ > - if (!padapter->surprise_removed) { > > - padapter->hw_init_completed = false; > > - rtl8712_hal_deinit(padapter); > - } > - > - padapter->bup = false; > > - } > -} > - > -static void disable_ht_for_spec_devid(const struct usb_device_id *pdid, > - struct _adapter *padapter) > -{ > - u16 vid, pid; > - u32 flags; > - int i; > - int num = ARRAY_SIZE(specific_device_id_tbl); > - > - for (i = 0; i < num; i++) { > - vid = specific_device_id_tbl[i].idVendor; > - pid = specific_device_id_tbl[i].idProduct; > - flags = specific_device_id_tbl[i].flags; > - > - if ((pdid->idVendor == vid) && (pdid->idProduct == pid) && > > - (flags & SPEC_DEV_ID_DISABLE_HT)) { > - padapter->registrypriv.ht_enable = 0; > > - padapter->registrypriv.cbw40_enable = 0; > > - padapter->registrypriv.ampdu_enable = 0; > > - } > - } > -} > - > -static const struct device_type wlan_type = { > - .name = "wlan", > -}; > - > -/* > - * drv_init() - a device potentially for us > - * > - * notes: drv_init() is called when the bus driver has located a card for us > - * to support. We accept the new device by returning 0. > - */ > -static int r871xu_drv_init(struct usb_interface *pusb_intf, > - const struct usb_device_id *pdid) > -{ > - uint status; > - struct _adapter *padapter = NULL; > - struct dvobj_priv *pdvobjpriv; > - struct net_device *pnetdev; > - struct usb_device udev; > - > - / In this probe function, O.S. will provide the usb interface pointer > - * to driver. We have to increase the reference count of the usb device > - * structure by using the usb_get_dev function. > - / > - udev = interface_to_usbdev(pusb_intf); > - usb_get_dev(udev); > - pintf = pusb_intf; > - / step 1. */ > - pnetdev = r8712_init_netdev(); > - if (!pnetdev) > - goto put_dev; > - padapter = netdev_priv(pnetdev); > - disable_ht_for_spec_devid(pdid, padapter); > - pdvobjpriv = &padapter->dvobjpriv; > > - pdvobjpriv->padapter = padapter; > > - padapter->dvobjpriv.pusbdev = udev; > > - padapter->pusb_intf = pusb_intf; > > - usb_set_intfdata(pusb_intf, pnetdev); > - SET_NETDEV_DEV(pnetdev, &pusb_intf->dev); > > - pnetdev->dev.type = &wlan_type; > > - /* step 2. */ > - padapter->dvobj_init = r8712_usb_dvobj_init; > > - padapter->dvobj_deinit = r8712_usb_dvobj_deinit; > > - padapter->halpriv.hal_bus_init = r8712_usb_hal_bus_init; > > - padapter->dvobjpriv.inirp_init = r8712_usb_inirp_init; > > - padapter->dvobjpriv.inirp_deinit = r8712_usb_inirp_deinit; > > - /* step 3. > - * initialize the dvobj_priv > - */ > - > - status = padapter->dvobj_init(padapter); > > - if (status != _SUCCESS) > - goto free_netdev; > - > - /* step 4. / > - status = r8712_init_drv_sw(padapter); > - if (status) > - goto dvobj_deinit; > - / step 5. read efuse/eeprom data and get mac_addr */ > - { > - int i, offset; > - u8 mac[6]; > - u8 tmpU1b, AutoloadFail, eeprom_CustomerID; > - u8 *pdata = padapter->eeprompriv.efuse_eeprom_data; > > - > - tmpU1b = r8712_read8(padapter, EE_9346CR);/CR9346/ > - > - /* To check system boot selection.*/ > - dev_info(&udev->dev, "r8712u: Boot from %s: Autoload %s\n", > > - (tmpU1b & _9356SEL) ? "EEPROM" : "EFUSE", > - (tmpU1b & _EEPROM_EN) ? "OK" : "Failed"); > - > - /* To check autoload success or not./ > - if (tmpU1b & _EEPROM_EN) { > - AutoloadFail = true; > - / The following operations prevent Efuse leakage by > - * turning on 2.5V. > - / > - tmpU1b = r8712_read8(padapter, EFUSE_TEST + 3); > - r8712_write8(padapter, EFUSE_TEST + 3, tmpU1b | 0x80); > - msleep(20); > - r8712_write8(padapter, EFUSE_TEST + 3, > - (tmpU1b & (~BIT(7)))); > - > - / Retrieve Chip version. > - * Recognize IC version by Reg0x4 BIT15. > - */ > - tmpU1b = (u8)((r8712_read32(padapter, PMC_FSM) >> 15) & > > - 0x1F); > - if (tmpU1b == 0x3) > - padapter->registrypriv.chip_version = > > - RTL8712_3rdCUT; > - else > - padapter->registrypriv.chip_version = > > - (tmpU1b >> 1) + 1; > > - switch (padapter->registrypriv.chip_version) { > > - case RTL8712_1stCUT: > - case RTL8712_2ndCUT: > - case RTL8712_3rdCUT: > - break; > - default: > - padapter->registrypriv.chip_version = > > - RTL8712_2ndCUT; > - break; > - } > - > - for (i = 0, offset = 0; i < 128; i += 8, offset++) > - r8712_efuse_pg_packet_read(padapter, offset, > - &pdata[i]); > - > - if (!r8712_initmac || !mac_pton(r8712_initmac, mac)) { > - /* Use the mac address stored in the Efuse > - * offset = 0x12 for usb in efuse > - */ > - ether_addr_copy(mac, &pdata[0x12]); > - } > - eeprom_CustomerID = pdata[0x52]; > - switch (eeprom_CustomerID) { > - case EEPROM_CID_ALPHA: > - padapter->eeprompriv.CustomerID = > > - RT_CID_819x_ALPHA; > - break; > - case EEPROM_CID_CAMEO: > - padapter->eeprompriv.CustomerID = > > - RT_CID_819x_CAMEO; > - break; > - case EEPROM_CID_SITECOM: > - padapter->eeprompriv.CustomerID = > > - RT_CID_819x_Sitecom; > - break; > - case EEPROM_CID_COREGA: > - padapter->eeprompriv.CustomerID = > > - RT_CID_COREGA; > - break; > - case EEPROM_CID_Senao: > - padapter->eeprompriv.CustomerID = > > - RT_CID_819x_Senao; > - break; > - case EEPROM_CID_EDIMAX_BELKIN: > - padapter->eeprompriv.CustomerID = > > - RT_CID_819x_Edimax_Belkin; > - break; > - case EEPROM_CID_SERCOMM_BELKIN: > - padapter->eeprompriv.CustomerID = > > - RT_CID_819x_Sercomm_Belkin; > - break; > - case EEPROM_CID_WNC_COREGA: > - padapter->eeprompriv.CustomerID = > > - RT_CID_819x_WNC_COREGA; > - break; > - case EEPROM_CID_WHQL: > - break; > - case EEPROM_CID_NetCore: > - padapter->eeprompriv.CustomerID = > > - RT_CID_819x_Netcore; > - break; > - case EEPROM_CID_CAMEO1: > - padapter->eeprompriv.CustomerID = > > - RT_CID_819x_CAMEO1; > - break; > - case EEPROM_CID_CLEVO: > - padapter->eeprompriv.CustomerID = > > - RT_CID_819x_CLEVO; > - break; > - default: > - padapter->eeprompriv.CustomerID = > > - RT_CID_DEFAULT; > - break; > - } > - dev_info(&udev->dev, "r8712u: CustomerID = 0x%.4x\n", > > - padapter->eeprompriv.CustomerID); > > - /* Led mode */ > - switch (padapter->eeprompriv.CustomerID) { > > - case RT_CID_DEFAULT: > - case RT_CID_819x_ALPHA: > - case RT_CID_819x_CAMEO: > - padapter->ledpriv.LedStrategy = SW_LED_MODE1; > > - padapter->ledpriv.bRegUseLed = true; > > - break; > - case RT_CID_819x_Sitecom: > - padapter->ledpriv.LedStrategy = SW_LED_MODE2; > > - padapter->ledpriv.bRegUseLed = true; > > - break; > - case RT_CID_COREGA: > - case RT_CID_819x_Senao: > - padapter->ledpriv.LedStrategy = SW_LED_MODE3; > > - padapter->ledpriv.bRegUseLed = true; > > - break; > - case RT_CID_819x_Edimax_Belkin: > - padapter->ledpriv.LedStrategy = SW_LED_MODE4; > > - padapter->ledpriv.bRegUseLed = true; > > - break; > - case RT_CID_819x_Sercomm_Belkin: > - padapter->ledpriv.LedStrategy = SW_LED_MODE5; > > - padapter->ledpriv.bRegUseLed = true; > > - break; > - case RT_CID_819x_WNC_COREGA: > - padapter->ledpriv.LedStrategy = SW_LED_MODE6; > > - padapter->ledpriv.bRegUseLed = true; > > - break; > - default: > - padapter->ledpriv.LedStrategy = SW_LED_MODE0; > > - padapter->ledpriv.bRegUseLed = false; > > - break; > - } > - } else { > - AutoloadFail = false; > - } > - if ((!AutoloadFail) || > - ((mac[0] == 0xff) && (mac[1] == 0xff) && > - (mac[2] == 0xff) && (mac[3] == 0xff) && > - (mac[4] == 0xff) && (mac[5] == 0xff)) || > - ((mac[0] == 0x00) && (mac[1] == 0x00) && > - (mac[2] == 0x00) && (mac[3] == 0x00) && > - (mac[4] == 0x00) && (mac[5] == 0x00))) { > - mac[0] = 0x00; > - mac[1] = 0xe0; > - mac[2] = 0x4c; > - mac[3] = 0x87; > - mac[4] = 0x00; > - mac[5] = 0x00; > - } > - if (r8712_initmac) { > - /* Make sure the user did not select a multicast > - * address by setting bit 1 of first octet. > - */ > - mac[0] &= 0xFE; > - dev_info(&udev->dev, > > - "r8712u: MAC Address from user = %pM\n", mac); > - } else { > - dev_info(&udev->dev, > > - "r8712u: MAC Address from efuse = %pM\n", mac); > - } > - eth_hw_addr_set(pnetdev, mac); > - } > - /* step 6. Load the firmware asynchronously */ > - if (rtl871x_load_fw(padapter)) > - goto deinit_drv_sw; > - init_completion(&padapter->rx_filter_ready); > > - return 0; > - > -deinit_drv_sw: > - r8712_free_drv_sw(padapter); > -dvobj_deinit: > - padapter->dvobj_deinit(padapter); > > -free_netdev: > - free_netdev(pnetdev); > -put_dev: > - usb_put_dev(udev); > - usb_set_intfdata(pusb_intf, NULL); > - return -ENODEV; > -} > - > -/* rmmod module & unplug(SurpriseRemoved) will call r871xu_dev_remove() > - * => how to recognize both > > - */ > -static void r871xu_dev_remove(struct usb_interface *pusb_intf) > -{ > - struct net_device *pnetdev = usb_get_intfdata(pusb_intf); > - struct usb_device *udev = interface_to_usbdev(pusb_intf); > - struct _adapter padapter = netdev_priv(pnetdev); > - > - / never exit with a firmware callback pending */ > - wait_for_completion(&padapter->rtl8712_fw_ready); > > - if (pnetdev->reg_state != NETREG_UNINITIALIZED) > > - unregister_netdev(pnetdev); /* will call netdev_close() */ > - usb_set_intfdata(pusb_intf, NULL); > - release_firmware(padapter->fw); > > - if (drvpriv.drv_registered) > - padapter->surprise_removed = true; > > - r8712_flush_rwctrl_works(padapter); > - r8712_flush_led_works(padapter); > - udelay(1); > - /* Stop driver mlme relation timer */ > - r8712_stop_drv_timers(padapter); > - r871x_dev_unload(padapter); > - if (padapter->dvobj_deinit) > > - padapter->dvobj_deinit(padapter); > > - r8712_free_drv_sw(padapter); > - free_netdev(pnetdev); > - > - /* decrease the reference count of the usb device structure > - * when disconnect > - / > - usb_put_dev(udev); > - > - / If we didn't unplug usb dongle and remove/insert module, driver > - * fails on sitesurvey for the first time when device is up. > - * Reset usb port for sitesurvey fail issue. > - */ > - if (udev->state != USB_STATE_NOTATTACHED) > > - usb_reset_device(udev); > -} > - > -static int __init r8712u_drv_entry(void) > -{ > - drvpriv.drv_registered = true; > - return usb_register(&drvpriv.r871xu_drv); > -} > - > -static void __exit r8712u_drv_halt(void) > -{ > - drvpriv.drv_registered = false; > - usb_deregister(&drvpriv.r871xu_drv); > -} > - > -module_init(r8712u_drv_entry); > -module_exit(r8712u_drv_halt); > diff --git a/drivers/staging/rtl8712/usb_ops.c b/drivers/staging/rtl8712/usb_ops.c > deleted file mode 100644 > index af9966d03979..000000000000 > --- a/drivers/staging/rtl8712/usb_ops.c > +++ /dev/null > @@ -1,195 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/****************************************************************************** > - * usb_ops.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define HCI_OPS_C > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "osdep_intf.h" > -#include "usb_ops.h" > -#include "recv_osdep.h" > - > -static u8 usb_read8(struct intf_hdl *intfhdl, u32 addr) > -{ > - u8 request; > - u8 requesttype; > - u16 wvalue; > - u16 index; > - u16 len; > - int status; > - __le32 data = 0; > - struct intf_priv *intfpriv = intfhdl->pintfpriv; > > - > - request = 0x05; > - requesttype = 0x01; /* read_in */ > - index = 0; > - wvalue = (u16)(addr & 0x0000ffff); > - len = 1; > - status = r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index, > - &data, len, requesttype); > - if (status < 0) > - return 0; > - return (u8)(le32_to_cpu(data) & 0x0ff); > -} > - > -static u16 usb_read16(struct intf_hdl *intfhdl, u32 addr) > -{ > - u8 request; > - u8 requesttype; > - u16 wvalue; > - u16 index; > - u16 len; > - int status; > - __le32 data = 0; > - struct intf_priv *intfpriv = intfhdl->pintfpriv; > > - > - request = 0x05; > - requesttype = 0x01; /* read_in */ > - index = 0; > - wvalue = (u16)(addr & 0x0000ffff); > - len = 2; > - status = r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index, > - &data, len, requesttype); > - if (status < 0) > - return 0; > - return (u16)(le32_to_cpu(data) & 0xffff); > -} > - > -static u32 usb_read32(struct intf_hdl *intfhdl, u32 addr) > -{ > - u8 request; > - u8 requesttype; > - u16 wvalue; > - u16 index; > - u16 len; > - int status; > - __le32 data = 0; > - struct intf_priv *intfpriv = intfhdl->pintfpriv; > > - > - request = 0x05; > - requesttype = 0x01; /* read_in */ > - index = 0; > - wvalue = (u16)(addr & 0x0000ffff); > - len = 4; > - status = r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index, > - &data, len, requesttype); > - if (status < 0) > - return 0; > - return le32_to_cpu(data); > -} > - > -static void usb_write8(struct intf_hdl *intfhdl, u32 addr, u8 val) > -{ > - u8 request; > - u8 requesttype; > - u16 wvalue; > - u16 index; > - u16 len; > - __le32 data; > - struct intf_priv *intfpriv = intfhdl->pintfpriv; > > - > - request = 0x05; > - requesttype = 0x00; /* write_out */ > - index = 0; > - wvalue = (u16)(addr & 0x0000ffff); > - len = 1; > - data = cpu_to_le32((u32)val & 0x000000ff); > - r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index, &data, len, > - requesttype); > -} > - > -static void usb_write16(struct intf_hdl *intfhdl, u32 addr, u16 val) > -{ > - u8 request; > - u8 requesttype; > - u16 wvalue; > - u16 index; > - u16 len; > - __le32 data; > - struct intf_priv *intfpriv = intfhdl->pintfpriv; > > - > - request = 0x05; > - requesttype = 0x00; /* write_out */ > - index = 0; > - wvalue = (u16)(addr & 0x0000ffff); > - len = 2; > - data = cpu_to_le32((u32)val & 0x0000ffff); > - r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index, &data, len, > - requesttype); > -} > - > -static void usb_write32(struct intf_hdl *intfhdl, u32 addr, u32 val) > -{ > - u8 request; > - u8 requesttype; > - u16 wvalue; > - u16 index; > - u16 len; > - __le32 data; > - struct intf_priv *intfpriv = intfhdl->pintfpriv; > > - > - request = 0x05; > - requesttype = 0x00; /* write_out */ > - index = 0; > - wvalue = (u16)(addr & 0x0000ffff); > - len = 4; > - data = cpu_to_le32(val); > - r8712_usbctrl_vendorreq(intfpriv, request, wvalue, index, &data, len, > - requesttype); > -} > - > -void r8712_usb_set_intf_option(u32 *option) > -{ > - *option = ((*option) | INTF_ASYNC); > -} > - > -static void usb_intf_hdl_init(u8 *priv) > -{ > -} > - > -static void usb_intf_hdl_unload(u8 *priv) > -{ > -} > - > -static void usb_intf_hdl_open(u8 *priv) > -{ > -} > - > -static void usb_intf_hdl_close(u8 *priv) > -{ > -} > - > -void r8712_usb_set_intf_funs(struct intf_hdl *intfhdl) > -{ > - intfhdl->intf_hdl_init = usb_intf_hdl_init; > > - intfhdl->intf_hdl_unload = usb_intf_hdl_unload; > > - intfhdl->intf_hdl_open = usb_intf_hdl_open; > > - intfhdl->intf_hdl_close = usb_intf_hdl_close; > > -} > - > -void r8712_usb_set_intf_ops(struct _io_ops *ops) > -{ > - memset((u8 *)ops, 0, sizeof(struct _io_ops)); > - ops->_read8 = usb_read8; > > - ops->_read16 = usb_read16; > > - ops->_read32 = usb_read32; > > - ops->_read_port = r8712_usb_read_port; > > - ops->_write8 = usb_write8; > > - ops->_write16 = usb_write16; > > - ops->_write32 = usb_write32; > > - ops->_write_mem = r8712_usb_write_mem; > > - ops->_write_port = r8712_usb_write_port; > > -} > diff --git a/drivers/staging/rtl8712/usb_ops.h b/drivers/staging/rtl8712/usb_ops.h > deleted file mode 100644 > index 7a6b619b73fa..000000000000 > --- a/drivers/staging/rtl8712/usb_ops.h > +++ /dev/null > @@ -1,38 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ***************/ > -#ifndef _USB_OPS_H > -#define _USB_OPS_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "osdep_intf.h" > - > -void r8712_usb_write_mem(struct intf_hdl pintfhdl, u32 addr, > - u32 cnt, u8 wmem); > -u32 r8712_usb_write_port(struct intf_hdl pintfhdl, u32 addr, > - u32 cnt, u8 wmem); > -u32 r8712_usb_read_port(struct intf_hdl pintfhdl, u32 addr, > - u32 cnt, u8 rmem); > -void r8712_usb_set_intf_option(u32 poption); > -void r8712_usb_set_intf_funs(struct intf_hdl pintf_hdl); > -uint r8712_usb_init_intf_priv(struct intf_priv pintfpriv); > -void r8712_usb_unload_intf_priv(struct intf_priv pintfpriv); > -void r8712_usb_set_intf_ops(struct _io_ops pops); > -void r8712_usb_read_port_cancel(struct _adapter padapter); > -void r8712_usb_write_port_cancel(struct _adapter padapter); > -int r8712_usbctrl_vendorreq(struct intf_priv pintfpriv, u8 request, u16 value, > - u16 index, void pdata, u16 len, u8 requesttype); > - > -#endif > - > diff --git a/drivers/staging/rtl8712/usb_ops_linux.c b/drivers/staging/rtl8712/usb_ops_linux.c > deleted file mode 100644 > index 0c953298d42d..000000000000 > --- a/drivers/staging/rtl8712/usb_ops_linux.c > +++ /dev/null > @@ -1,508 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/ > - * usb_ops_linux.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define HCI_OPS_OS_C > - > -#include <linux/usb.h> > > - > -#include "osdep_service.h" > -#include "drv_types.h" > -#include "osdep_intf.h" > -#include "usb_ops.h" > - > -#define RTL871X_VENQT_READ 0xc0 > -#define RTL871X_VENQT_WRITE 0x40 > - > -uint r8712_usb_init_intf_priv(struct intf_priv *pintfpriv) > -{ > - pintfpriv->piorw_urb = usb_alloc_urb(0, GFP_ATOMIC); > > - if (!pintfpriv->piorw_urb) > > - return _FAIL; > - init_completion(&pintfpriv->io_retevt_comp); > > - return _SUCCESS; > -} > - > -void r8712_usb_unload_intf_priv(struct intf_priv *pintfpriv) > -{ > - if (pintfpriv->piorw_urb) { > > - usb_kill_urb(pintfpriv->piorw_urb); > > - usb_free_urb(pintfpriv->piorw_urb); > > - } > -} > - > -static unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr) > -{ > - unsigned int pipe = 0; > - struct usb_device *pusbd = pdvobj->pusbdev; > > - > - if (pdvobj->nr_endpoint == 11) { > > - switch (addr) { > - case RTL8712_DMA_BKQ: > - pipe = usb_sndbulkpipe(pusbd, 0x07); > - break; > - case RTL8712_DMA_BEQ: > - pipe = usb_sndbulkpipe(pusbd, 0x06); > - break; > - case RTL8712_DMA_VIQ: > - pipe = usb_sndbulkpipe(pusbd, 0x05); > - break; > - case RTL8712_DMA_VOQ: > - pipe = usb_sndbulkpipe(pusbd, 0x04); > - break; > - case RTL8712_DMA_BCNQ: > - pipe = usb_sndbulkpipe(pusbd, 0x0a); > - break; > - case RTL8712_DMA_BMCQ: /* HI Queue / > - pipe = usb_sndbulkpipe(pusbd, 0x0b); > - break; > - case RTL8712_DMA_MGTQ: > - pipe = usb_sndbulkpipe(pusbd, 0x0c); > - break; > - case RTL8712_DMA_RX0FF: > - pipe = usb_rcvbulkpipe(pusbd, 0x03); / in / > - break; > - case RTL8712_DMA_C2HCMD: > - pipe = usb_rcvbulkpipe(pusbd, 0x09); / in */ > - break; > - case RTL8712_DMA_H2CCMD: > - pipe = usb_sndbulkpipe(pusbd, 0x0d); > - break; > - } > - } else if (pdvobj->nr_endpoint == 6) { > > - switch (addr) { > - case RTL8712_DMA_BKQ: > - pipe = usb_sndbulkpipe(pusbd, 0x07); > - break; > - case RTL8712_DMA_BEQ: > - pipe = usb_sndbulkpipe(pusbd, 0x06); > - break; > - case RTL8712_DMA_VIQ: > - pipe = usb_sndbulkpipe(pusbd, 0x05); > - break; > - case RTL8712_DMA_VOQ: > - pipe = usb_sndbulkpipe(pusbd, 0x04); > - break; > - case RTL8712_DMA_RX0FF: > - case RTL8712_DMA_C2HCMD: > - pipe = usb_rcvbulkpipe(pusbd, 0x03); /* in */ > - break; > - case RTL8712_DMA_H2CCMD: > - case RTL8712_DMA_BCNQ: > - case RTL8712_DMA_BMCQ: > - case RTL8712_DMA_MGTQ: > - pipe = usb_sndbulkpipe(pusbd, 0x0d); > - break; > - } > - } else if (pdvobj->nr_endpoint == 4) { > > - switch (addr) { > - case RTL8712_DMA_BEQ: > - pipe = usb_sndbulkpipe(pusbd, 0x06); > - break; > - case RTL8712_DMA_VOQ: > - pipe = usb_sndbulkpipe(pusbd, 0x04); > - break; > - case RTL8712_DMA_RX0FF: > - case RTL8712_DMA_C2HCMD: > - pipe = usb_rcvbulkpipe(pusbd, 0x03); /* in */ > - break; > - case RTL8712_DMA_H2CCMD: > - case RTL8712_DMA_BCNQ: > - case RTL8712_DMA_BMCQ: > - case RTL8712_DMA_MGTQ: > - pipe = usb_sndbulkpipe(pusbd, 0x0d); > - break; > - } > - } else { > - pipe = 0; > - } > - return pipe; > -} > - > -static void usb_write_mem_complete(struct urb *purb) > -{ > - struct io_queue *pio_q = (struct io_queue *)purb->context; > > - struct intf_hdl *pintf = &pio_q->intf; > > - struct intf_priv *pintfpriv = pintf->pintfpriv; > > - struct _adapter *padapter = (struct _adapter *)pintf->adapter; > > - > - if (purb->status != 0) { > > - if (purb->status == (-ESHUTDOWN)) > > - padapter->driver_stopped = true; > > - else > - padapter->surprise_removed = true; > > - } > - complete(&pintfpriv->io_retevt_comp); > > -} > - > -void r8712_usb_write_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem) > -{ > - unsigned int pipe; > - struct _adapter *padapter = (struct _adapter *)pintfhdl->adapter; > > - struct intf_priv *pintfpriv = pintfhdl->pintfpriv; > > - struct io_queue *pio_queue = padapter->pio_queue; > > - struct dvobj_priv *pdvobj = (struct dvobj_priv *)pintfpriv->intf_dev; > > - struct usb_device *pusbd = pdvobj->pusbdev; > > - struct urb *piorw_urb = pintfpriv->piorw_urb; > > - > - if ((padapter->driver_stopped) || (padapter->surprise_removed) || > > - (padapter->pwrctrlpriv.pnp_bstop_trx)) > > - return; > - /* translate DMA FIFO addr to pipehandle */ > - pipe = ffaddr2pipehdl(pdvobj, addr); > - if (pipe == 0) > - return; > - usb_fill_bulk_urb(piorw_urb, pusbd, pipe, > - wmem, cnt, usb_write_mem_complete, > - pio_queue); > - usb_submit_urb(piorw_urb, GFP_ATOMIC); > - wait_for_completion_interruptible(&pintfpriv->io_retevt_comp); > > -} > - > -static void r8712_usb_read_port_complete(struct urb *purb) > -{ > - uint isevt; > - __le32 *pbuf; > - struct recv_buf *precvbuf = (struct recv_buf *)purb->context; > > - struct _adapter *padapter = (struct _adapter *)precvbuf->adapter; > > - struct recv_priv *precvpriv = &padapter->recvpriv; > > - > - if (padapter->surprise_removed || padapter->driver_stopped) > > - return; > - if (purb->status == 0) { /* SUCCESS */ > > - if ((purb->actual_length > (MAX_RECVBUF_SZ)) || > > - (purb->actual_length < RXDESC_SIZE)) { > > - r8712_read_port(padapter, precvpriv->ff_hwaddr, 0, > > - (unsigned char *)precvbuf); > - } else { > - _pkt *pskb = precvbuf->pskb; > > - > - precvbuf->transfer_len = purb->actual_length; > > - pbuf = (__le32 *)precvbuf->pbuf; > > - isevt = le32_to_cpu(*(pbuf + 1)) & 0x1ff; > - if ((isevt & 0x1ff) == 0x1ff) { > - r8712_rxcmd_event_hdl(padapter, pbuf); > - skb_queue_tail(&precvpriv->rx_skb_queue, pskb); > > - r8712_read_port(padapter, precvpriv->ff_hwaddr, > > - 0, (unsigned char *)precvbuf); > - } else { > - skb_put(pskb, purb->actual_length); > > - skb_queue_tail(&precvpriv->rx_skb_queue, pskb); > > - tasklet_hi_schedule(&precvpriv->recv_tasklet); > > - r8712_read_port(padapter, precvpriv->ff_hwaddr, > > - 0, (unsigned char *)precvbuf); > - } > - } > - } else { > - switch (purb->status) { > > - case -EINVAL: > - case -EPIPE: > - case -ENODEV: > - case -ESHUTDOWN: > - padapter->driver_stopped = true; > > - break; > - case -ENOENT: > - if (!padapter->suspended) { > > - padapter->driver_stopped = true; > > - break; > - } > - fallthrough; > - case -EPROTO: > - r8712_read_port(padapter, precvpriv->ff_hwaddr, 0, > > - (unsigned char *)precvbuf); > - break; > - case -EINPROGRESS: > - netdev_err(padapter->pnetdev, "ERROR: URB IS IN PROGRESS!\n"); > > - break; > - default: > - break; > - } > - } > -} > - > -u32 r8712_usb_read_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem) > -{ > - unsigned int pipe; > - int err; > - u32 tmpaddr = 0; > - int alignment = 0; > - u32 ret = _SUCCESS; > - struct urb *purb = NULL; > - struct recv_buf *precvbuf = (struct recv_buf *)rmem; > - struct intf_priv *pintfpriv = pintfhdl->pintfpriv; > > - struct dvobj_priv *pdvobj = (struct dvobj_priv *)pintfpriv->intf_dev; > > - struct _adapter *adapter = pdvobj->padapter; > > - struct recv_priv *precvpriv = &adapter->recvpriv; > > - struct usb_device *pusbd = pdvobj->pusbdev; > > - > - if (adapter->driver_stopped || adapter->surprise_removed || > > - adapter->pwrctrlpriv.pnp_bstop_trx || !precvbuf) > > - return _FAIL; > - r8712_init_recvbuf(adapter, precvbuf); > - /* Try to use skb from the free queue */ > - precvbuf->pskb = skb_dequeue(&precvpriv->free_recv_skb_queue); > > - > - if (!precvbuf->pskb) { > > - precvbuf->pskb = netdev_alloc_skb(adapter->pnetdev, > > - MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ); > - if (!precvbuf->pskb) > > - return _FAIL; > - tmpaddr = (addr_t)precvbuf->pskb->data; > > - alignment = tmpaddr & (RECVBUFF_ALIGN_SZ - 1); > - skb_reserve(precvbuf->pskb, > > - (RECVBUFF_ALIGN_SZ - alignment)); > - precvbuf->phead = precvbuf->pskb->head; > > - precvbuf->pdata = precvbuf->pskb->data; > > - precvbuf->ptail = skb_tail_pointer(precvbuf->pskb); > > - precvbuf->pend = skb_end_pointer(precvbuf->pskb); > > - precvbuf->pbuf = precvbuf->pskb->data; > > - } else { /* skb is reused */ > - precvbuf->phead = precvbuf->pskb->head; > > - precvbuf->pdata = precvbuf->pskb->data; > > - precvbuf->ptail = skb_tail_pointer(precvbuf->pskb); > > - precvbuf->pend = skb_end_pointer(precvbuf->pskb); > > - precvbuf->pbuf = precvbuf->pskb->data; > > - } > - purb = precvbuf->purb; > > - /* translate DMA FIFO addr to pipehandle */ > - pipe = ffaddr2pipehdl(pdvobj, addr); > - usb_fill_bulk_urb(purb, pusbd, pipe, > - precvbuf->pbuf, MAX_RECVBUF_SZ, > > - r8712_usb_read_port_complete, > - precvbuf); > - err = usb_submit_urb(purb, GFP_ATOMIC); > - if ((err) && (err != (-EPERM))) > - ret = _FAIL; > - return ret; > -} > - > -void r8712_usb_read_port_cancel(struct _adapter *padapter) > -{ > - int i; > - struct recv_buf *precvbuf; > - > - precvbuf = (struct recv_buf *)padapter->recvpriv.precv_buf; > > - for (i = 0; i < NR_RECVBUFF; i++) { > - if (precvbuf->purb) > > - usb_kill_urb(precvbuf->purb); > > - precvbuf++; > - } > -} > - > -void r8712_xmit_bh(struct tasklet_struct *t) > -{ > - int ret = false; > - struct _adapter *padapter = from_tasklet(padapter, t, > - xmitpriv.xmit_tasklet); > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - > - if (padapter->driver_stopped || > > - padapter->surprise_removed) { > > - netdev_err(padapter->pnetdev, "xmit_bh => driver_stopped or surprise_removed\n"); > > - return; > - } > - ret = r8712_xmitframe_complete(padapter, pxmitpriv, NULL); > - if (!ret) > - return; > - tasklet_hi_schedule(&pxmitpriv->xmit_tasklet); > > -} > - > -static void usb_write_port_complete(struct urb *purb) > -{ > - int i; > - struct xmit_frame *pxmitframe = (struct xmit_frame *)purb->context; > > - struct xmit_buf *pxmitbuf = pxmitframe->pxmitbuf; > > - struct _adapter *padapter = pxmitframe->padapter; > > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - struct pkt_attrib *pattrib = &pxmitframe->attrib; > > - > - switch (pattrib->priority) { > > - case 1: > - case 2: > - pxmitpriv->bkq_cnt--; > > - break; > - case 4: > - case 5: > - pxmitpriv->viq_cnt--; > > - break; > - case 6: > - case 7: > - pxmitpriv->voq_cnt--; > > - break; > - case 0: > - case 3: > - default: > - pxmitpriv->beq_cnt--; > > - break; > - } > - pxmitpriv->txirp_cnt--; > > - for (i = 0; i < 8; i++) { > - if (purb == pxmitframe->pxmit_urb[i]) { > > - pxmitframe->bpending[i] = false; > > - break; > - } > - } > - if (padapter->surprise_removed) > > - return; > - switch (purb->status) { > > - case 0: > - break; > - default: > - netdev_warn(padapter->pnetdev, > > - "r8712u: pipe error: (%d)\n", purb->status); > > - break; > - } > - /* not to consider tx fragment */ > - r8712_free_xmitframe_ex(pxmitpriv, pxmitframe); > - r8712_free_xmitbuf(pxmitpriv, pxmitbuf); > - tasklet_hi_schedule(&pxmitpriv->xmit_tasklet); > > -} > - > -u32 r8712_usb_write_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem) > -{ > - unsigned long irqL; > - int i, status; > - unsigned int pipe; > - u32 ret, bwritezero; > - struct urb *purb = NULL; > - struct _adapter *padapter = (struct _adapter *)pintfhdl->adapter; > > - struct dvobj_priv *pdvobj = &padapter->dvobjpriv; > > - struct xmit_priv *pxmitpriv = &padapter->xmitpriv; > > - struct xmit_frame *pxmitframe = (struct xmit_frame *)wmem; > - struct usb_device *pusbd = pdvobj->pusbdev; > > - struct pkt_attrib *pattrib = &pxmitframe->attrib; > > - > - if ((padapter->driver_stopped) || (padapter->surprise_removed) || > > - (padapter->pwrctrlpriv.pnp_bstop_trx)) > > - return _FAIL; > - for (i = 0; i < 8; i++) { > - if (!pxmitframe->bpending[i]) { > > - spin_lock_irqsave(&pxmitpriv->lock, irqL); > > - pxmitpriv->txirp_cnt++; > > - pxmitframe->bpending[i] = true; > > - switch (pattrib->priority) { > > - case 1: > - case 2: > - pxmitpriv->bkq_cnt++; > > - break; > - case 4: > - case 5: > - pxmitpriv->viq_cnt++; > > - break; > - case 6: > - case 7: > - pxmitpriv->voq_cnt++; > > - break; > - case 0: > - case 3: > - default: > - pxmitpriv->beq_cnt++; > > - break; > - } > - spin_unlock_irqrestore(&pxmitpriv->lock, irqL); > > - pxmitframe->sz[i] = (u16)cnt; > > - purb = pxmitframe->pxmit_urb[i]; > > - break; > - } > - } > - bwritezero = false; > - if (pdvobj->ishighspeed) { > > - if (cnt > 0 && cnt % 512 == 0) > > - bwritezero = true; > - } else { > - if (cnt > 0 && cnt % 64 == 0) > > - bwritezero = true; > - } > - /* translate DMA FIFO addr to pipehandle */ > - pipe = ffaddr2pipehdl(pdvobj, addr); > - if (pxmitpriv->free_xmitbuf_cnt % NR_XMITBUFF == 0) > > - purb->transfer_flags &= (~URB_NO_INTERRUPT); > > - else > - purb->transfer_flags |= URB_NO_INTERRUPT; > > - if (bwritezero) > - cnt += 8; > - usb_fill_bulk_urb(purb, pusbd, pipe, > - pxmitframe->mem_addr, > > - cnt, usb_write_port_complete, > - pxmitframe); /* context is xmit_frame */ > - status = usb_submit_urb(purb, GFP_ATOMIC); > - if (!status) > - ret = _SUCCESS; > - else > - ret = _FAIL; > - return ret; > -} > - > -void r8712_usb_write_port_cancel(struct _adapter *padapter) > -{ > - int i, j; > - struct xmit_buf *pxmitbuf = (struct xmit_buf *) > - padapter->xmitpriv.pxmitbuf; > > - > - for (i = 0; i < NR_XMITBUFF; i++) { > - for (j = 0; j < 8; j++) { > - if (pxmitbuf->pxmit_urb[j]) > > - usb_kill_urb(pxmitbuf->pxmit_urb[j]); > > - } > - pxmitbuf++; > - } > -} > - > -int r8712_usbctrl_vendorreq(struct intf_priv *pintfpriv, u8 request, u16 value, > - u16 index, void *pdata, u16 len, u8 requesttype) > -{ > - unsigned int pipe; > - int status; > - u8 reqtype; > - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *) > - pintfpriv->intf_dev; > > - struct usb_device *udev = pdvobjpriv->pusbdev; > > - /* For mstar platform, mstar suggests the address for USB IO > - * should be 16 bytes alignment. Trying to fix it here. > - / > - u8 palloc_buf, pIo_buf; > - > - palloc_buf = kmalloc((u32)len + 16, GFP_ATOMIC); > - if (!palloc_buf) > - return -ENOMEM; > - pIo_buf = palloc_buf + 16 - ((addr_t)(palloc_buf) & 0x0f); > - if (requesttype == 0x01) { > - pipe = usb_rcvctrlpipe(udev, 0); / read_in / > - reqtype = RTL871X_VENQT_READ; > - } else { > - pipe = usb_sndctrlpipe(udev, 0); / write_out / > - reqtype = RTL871X_VENQT_WRITE; > - memcpy(pIo_buf, pdata, len); > - } > - status = usb_control_msg(udev, pipe, request, reqtype, value, index, > - pIo_buf, len, 500); > - if (status < 0) > - goto free; > - if (status != len) { > - status = -EREMOTEIO; > - goto free; > - } > - / Success this control transfer. / > - if (requesttype == 0x01) { > - / For Control read transfer, we have to copy the read > - * data from pIo_buf to pdata. > - / > - memcpy(pdata, pIo_buf, status); > - } > - > -free: > - kfree(palloc_buf); > - return status; > -} > diff --git a/drivers/staging/rtl8712/usb_osintf.h b/drivers/staging/rtl8712/usb_osintf.h > deleted file mode 100644 > index 2e512b4a564c..000000000000 > --- a/drivers/staging/rtl8712/usb_osintf.h > +++ /dev/null > @@ -1,35 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/*************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ************/ > -#ifndef __USB_OSINTF_H > -#define __USB_OSINTF_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > - > -extern char r8712_initmac; > - > -unsigned int r8712_usb_inirp_init(struct _adapter padapter); > -unsigned int r8712_usb_inirp_deinit(struct _adapter padapter); > -uint rtl871x_hal_init(struct _adapter padapter); > -uint rtl8712_hal_deinit(struct _adapter padapter); > - > -void rtl871x_intf_stop(struct _adapter padapter); > -void r871x_dev_unload(struct _adapter padapter); > -void r8712_stop_drv_threads(struct _adapter padapter); > -void r8712_stop_drv_timers(struct _adapter padapter); > -int r8712_init_drv_sw(struct _adapter padapter); > -void r8712_free_drv_sw(struct _adapter padapter); > -struct net_device r8712_init_netdev(void); > - > -#endif > diff --git a/drivers/staging/rtl8712/wifi.h b/drivers/staging/rtl8712/wifi.h > deleted file mode 100644 > index 498e6dec7e67..000000000000 > --- a/drivers/staging/rtl8712/wifi.h > +++ /dev/null > @@ -1,196 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/ > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > -#ifndef WIFI_H > -#define WIFI_H > - > -#include <linux/compiler.h> > > -#include <linux/ieee80211.h> > > - > -#define WLAN_HDR_A3_LEN 24 > -#define WLAN_HDR_A3_QOS_LEN 26 > - > -enum WIFI_FRAME_TYPE { > - WIFI_QOS_DATA_TYPE = (BIT(7) | BIT(3)), /*!< QoS Data */ > -}; > - > -#define SetToDs(pbuf) ({ \ > - *(__le16 )(pbuf) |= cpu_to_le16(IEEE80211_FCTL_TODS); \ > -}) > - > -#define GetToDs(pbuf) ((((__le16 *)(pbuf)) & cpu_to_le16(IEEE80211_FCTL_TODS)) != 0) > - > -#define ClearToDs(pbuf) ({ \ > - *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_TODS)); \ > -}) > - > -#define SetFrDs(pbuf) ({ \ > - *(__le16 )(pbuf) |= cpu_to_le16(IEEE80211_FCTL_FROMDS); \ > -}) > - > -#define GetFrDs(pbuf) ((((__le16 *)(pbuf)) & cpu_to_le16(IEEE80211_FCTL_FROMDS)) != 0) > - > -#define ClearFrDs(pbuf) ({ \ > - *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_FROMDS)); \ > -}) > - > -static inline unsigned char get_tofr_ds(unsigned char *pframe) > -{ > - return ((GetToDs(pframe) << 1) | GetFrDs(pframe)); > -} > - > -#define SetMFrag(pbuf) ({ \ > - *(__le16 )(pbuf) |= cpu_to_le16(IEEE80211_FCTL_MOREFRAGS); \ > -}) > - > -#define GetMFrag(pbuf) ((((__le16 *)(pbuf)) & cpu_to_le16(IEEE80211_FCTL_MOREFRAGS)) != 0) > - > -#define ClearMFrag(pbuf) ({ \ > - *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_MOREFRAGS)); \ > -}) > - > -#define SetRetry(pbuf) ({ \ > - *(__le16 )(pbuf) |= cpu_to_le16(IEEE80211_FCTL_RETRY); \ > -}) > - > -#define GetRetry(pbuf) ((((__le16 *)(pbuf)) & cpu_to_le16(IEEE80211_FCTL_RETRY)) != 0) > - > -#define ClearRetry(pbuf) ({ \ > - *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_RETRY)); \ > -}) > - > -#define SetPwrMgt(pbuf) ({ \ > - *(__le16 )(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PM); \ > -}) > - > -#define GetPwrMgt(pbuf) ((((__le16 *)(pbuf)) & \ > - cpu_to_le16(IEEE80211_FCTL_PM)) != 0) > - > -#define ClearPwrMgt(pbuf) ({ \ > - *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_PM)); \ > -}) > - > -#define SetMData(pbuf) ({ \ > - *(__le16 )(pbuf) |= cpu_to_le16(IEEE80211_FCTL_MOREDATA); \ > -}) > - > -#define GetMData(pbuf) ((((__le16 *)(pbuf)) & \ > - cpu_to_le16(IEEE80211_FCTL_MOREDATA)) != 0) > - > -#define ClearMData(pbuf) ({ \ > - *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_MOREDATA)); \ > -}) > - > -#define SetPrivacy(pbuf) ({ \ > - *(__le16 )(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); \ > -}) > - > -#define GetPrivacy(pbuf) ((((__le16 )(pbuf)) & \ > - cpu_to_le16(IEEE80211_FCTL_PROTECTED)) != 0) > - > -#define GetOrder(pbuf) ((((__le16 )(pbuf)) & \ > - cpu_to_le16(IEEE80211_FCTL_ORDER)) != 0) > - > -#define GetFrameType(pbuf) (le16_to_cpu((__le16 *)(pbuf)) & \ > - (BIT(3) | BIT(2))) > - > -#define SetFrameType(pbuf, type) \ > - do { \ > - *(__le16 *)(pbuf) &= cpu_to_le16(~(BIT(3) | \ > - BIT(2))); \ > - *(__le16 )(pbuf) |= cpu_to_le16(type); \ > - } while (0) > - > -#define GetFrameSubType(pbuf) (le16_to_cpu((__le16 *)(pbuf)) & \ > - (BIT(7) | BIT(6) | BIT(5) | BIT(4) | BIT(3) | \ > - BIT(2))) > - > -#define SetFrameSubType(pbuf, type) \ > - do { \ > - *(__le16 *)(pbuf) &= cpu_to_le16(~(BIT(7) | BIT(6) | \ > - BIT(5) | BIT(4) | BIT(3) | BIT(2))); \ > - *(__le16 )(pbuf) |= cpu_to_le16(type); \ > - } while (0) > - > -#define GetSequence(pbuf) (le16_to_cpu((__le16 *)\ > - ((addr_t)(pbuf) + 22)) >> 4) > > - > -#define GetFragNum(pbuf) (le16_to_cpu(*(__le16 *)((addr_t)\ > - (pbuf) + 22)) & 0x0f) > - > -#define SetSeqNum(pbuf, num) ({ \ > - *(__le16 )((addr_t)(pbuf) + 22) = \ > - cpu_to_le16((le16_to_cpu((__le16 *)((addr_t)(pbuf) + 22)) & \ > - 0x000f) | (0xfff0 & (num << 4))); \ > -}) > - > -#define SetPriority(pbuf, tid) ({ \ > - *(__le16 )(pbuf) |= cpu_to_le16(tid & 0xf); \ > -}) > - > -#define GetPriority(pbuf) ((le16_to_cpu((__le16 *)(pbuf))) & 0xf) > - > -#define SetAckpolicy(pbuf, ack) ({ \ > - *(__le16 )(pbuf) |= cpu_to_le16((ack & 3) << 5); \ > -}) > - > -#define GetAckpolicy(pbuf) (((le16_to_cpu((__le16 *)pbuf)) >> 5) & 0x3) > > - > -#define GetAMsdu(pbuf) (((le16_to_cpu(*(__le16 *)pbuf)) >> 7) & 0x1) > > - > -#define GetAddr1Ptr(pbuf) ((unsigned char )((addr_t)(pbuf) + 4)) > - > -#define GetAddr2Ptr(pbuf) ((unsigned char )((addr_t)(pbuf) + 10)) > - > -#define GetAddr3Ptr(pbuf) ((unsigned char )((addr_t)(pbuf) + 16)) > - > -#define GetAddr4Ptr(pbuf) ((unsigned char )((addr_t)(pbuf) + 24)) > - > -static inline unsigned char get_hdr_bssid(unsigned char pframe) > -{ > - unsigned char sa; > - unsigned int to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe); > - > - switch (to_fr_ds) { > - case 0x00: / ToDs=0, FromDs=0 / > - sa = GetAddr3Ptr(pframe); > - break; > - case 0x01: / ToDs=0, FromDs=1 / > - sa = GetAddr2Ptr(pframe); > - break; > - case 0x02: / ToDs=1, FromDs=0 / > - sa = GetAddr1Ptr(pframe); > - break; > - default: / ToDs=1, FromDs=1 / > - sa = NULL; > - break; > - } > - return sa; > -} > - > -/ --------------------------------------------------------------------------- > - * Below is the fixed elements... > - * --------------------------------------------------------------------------- > - / > -#define BEACON_ITERVAL 2 > -#define CAPABILITY 2 > -#define TIMESTAMP 8 > - > -/----------------------------------------------------------------------------- > - * Below is the definition for WMM > - ------------------------------------------------------------------------------ > - / > -#define WMM_IE_Length 7 / for WMM STA / > - > -#endif / WIFI_H / > - > diff --git a/drivers/staging/rtl8712/wlan_bssdef.h b/drivers/staging/rtl8712/wlan_bssdef.h > deleted file mode 100644 > index ec3749813728..000000000000 > --- a/drivers/staging/rtl8712/wlan_bssdef.h > +++ /dev/null > @@ -1,223 +0,0 @@ > -/ SPDX-License-Identifier: GPL-2.0 / > -/********************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ****/ > -#ifndef WLAN_BSSDEF_H > -#define WLAN_BSSDEF_H > - > -#define MAX_IE_SZ 768 > - > -#define NDIS_802_11_LENGTH_SSID 32 > -#define NDIS_802_11_LENGTH_RATES 8 > -#define NDIS_802_11_LENGTH_RATES_EX 16 > - > -struct ndis_802_11_ssid { > - u32 SsidLength; > - u8 Ssid[32]; > -}; > - > -enum NDIS_802_11_NETWORK_TYPE { > - Ndis802_11FH, > - Ndis802_11DS, > - Ndis802_11OFDM5, > - Ndis802_11OFDM24, > - Ndis802_11NetworkTypeMax / not a real type, defined as an upper bound/ > -}; > - > -struct NDIS_802_11_CONFIGURATION_FH { > - u32 Length; / Length of structure / > - u32 HopPattern; / As defined by 802.11, MSB set / > - u32 HopSet; / to one if non-802.11 / > - u32 DwellTime; / units are Kusec / > -}; > - > -/ > - * FW will only save the channel number in DSConfig. > - * ODI Handler will convert the channel number to freq. number. > - / > -struct NDIS_802_11_CONFIGURATION { > - u32 Length; / Length of structure / > - u32 BeaconPeriod; / units are Kusec / > - u32 ATIMWindow; / units are Kusec / > - u32 DSConfig; / Frequency, units are kHz / > - struct NDIS_802_11_CONFIGURATION_FH FHConfig; > -}; > - > -enum NDIS_802_11_NETWORK_INFRASTRUCTURE { > - Ndis802_11IBSS, > - Ndis802_11Infrastructure, > - Ndis802_11AutoUnknown, > - Ndis802_11InfrastructureMax, /Not a real value,defined as upper bound/ > - Ndis802_11APMode > -}; > - > -struct NDIS_802_11_FIXED_IEs { > - u8 Timestamp[8]; > - u16 BeaconInterval; > - u16 Capabilities; > -}; > - > -struct wlan_bssid_ex { > - u32 Length; > - unsigned char MacAddress[6]; > - u8 Reserved[2]; > - struct ndis_802_11_ssid Ssid; > - __le32 Privacy; > - s32 Rssi; > - enum NDIS_802_11_NETWORK_TYPE NetworkTypeInUse; > - struct NDIS_802_11_CONFIGURATION Configuration; > - enum NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode; > - u8 rates[NDIS_802_11_LENGTH_RATES_EX]; > - / number of content bytes in EIs, which varies / > - u32 IELength; > - /(timestamp, beacon interval, and capability information) / > - u8 IEs[MAX_IE_SZ]; > -}; > - > -enum NDIS_802_11_AUTHENTICATION_MODE { > - Ndis802_11AuthModeOpen, > - Ndis802_11AuthModeShared, > - Ndis802_11AuthModeAutoSwitch, > - Ndis802_11AuthModeWPA, > - Ndis802_11AuthModeWPAPSK, > - Ndis802_11AuthModeWPANone, > - Ndis802_11AuthModeMax / Not a real mode, defined as upper bound / > -}; > - > -enum { > - Ndis802_11WEPEnabled, > - Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled, > - Ndis802_11WEPDisabled, > - Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled, > - Ndis802_11WEPKeyAbsent, > - Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent, > - Ndis802_11WEPNotSupported, > - Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported, > - Ndis802_11Encryption2Enabled, > - Ndis802_11Encryption2KeyAbsent, > - Ndis802_11Encryption3Enabled, > - Ndis802_11Encryption3KeyAbsent > -}; > - > -#define NDIS_802_11_AI_REQFI_CAPABILITIES 1 > -#define NDIS_802_11_AI_REQFI_LISTENINTERVAL 2 > -#define NDIS_802_11_AI_REQFI_CURRENTAPADDRESS 4 > - > -#define NDIS_802_11_AI_RESFI_CAPABILITIES 1 > -#define NDIS_802_11_AI_RESFI_STATUSCODE 2 > -#define NDIS_802_11_AI_RESFI_ASSOCIATIONID 4 > - > -struct NDIS_802_11_AI_REQFI { > - u16 Capabilities; > - u16 ListenInterval; > - unsigned char CurrentAPAddress[6]; > -}; > - > -struct NDIS_802_11_AI_RESFI { > - u16 Capabilities; > - u16 StatusCode; > - u16 AssociationId; > -}; > - > -struct NDIS_802_11_ASSOCIATION_INFORMATION { > - u32 Length; > - u16 AvailableRequestFixedIEs; > - struct NDIS_802_11_AI_REQFI RequestFixedIEs; > - u32 RequestIELength; > - u32 OffsetRequestIEs; > - u16 AvailableResponseFixedIEs; > - struct NDIS_802_11_AI_RESFI ResponseFixedIEs; > - u32 ResponseIELength; > - u32 OffsetResponseIEs; > -}; > - > -/ Key mapping keys require a BSSID/ > -struct NDIS_802_11_KEY { > - u32 Length; / Length of this structure / > - u32 KeyIndex; > - u32 KeyLength; / length of key in bytes / > - unsigned char BSSID[6]; > - unsigned long long KeyRSC; > - u8 KeyMaterial[32]; / variable length / > -}; > - > -struct NDIS_802_11_REMOVE_KEY { > - u32 Length; / Length of this structure / > - u32 KeyIndex; > - unsigned char BSSID[6]; > -}; > - > -struct NDIS_802_11_WEP { > - u32 Length; / Length of this structure / > - u32 KeyIndex; / 0 is the per-client key, > - * 1-N are the global keys > - / > - u32 KeyLength; / length of key in bytes / > - u8 KeyMaterial[16]; / variable length depending on above field / > -}; > - > -/ mask for authentication/integrity fields / > -#define NDIS_802_11_AUTH_REQUEST_AUTH_FIELDS 0x0f > -#define NDIS_802_11_AUTH_REQUEST_REAUTH 0x01 > -#define NDIS_802_11_AUTH_REQUEST_KEYUPDATE 0x02 > -#define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR 0x06 > -#define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR 0x0E > - > -/ MIC check time, 60 seconds. / > -#define MIC_CHECK_TIME 60000000 > - > -#ifndef Ndis802_11APMode > -#define Ndis802_11APMode (Ndis802_11InfrastructureMax + 1) > -#endif > - > -struct wlan_network { > - struct list_head list; > - int network_type; /refer to ieee80211.h for WIRELESS_11A/B/G / > - int fixed; / set to fixed when not to be removed asi > - * site-surveying > - / > - unsigned int last_scanned; /timestamp for the network / > - int aid; /will only be valid when a BSS is joined. / > - int join_res; > - struct wlan_bssid_ex network; /must be the last item / > -}; > - > -enum VRTL_CARRIER_SENSE { > - DISABLE_VCS, > - ENABLE_VCS, > - AUTO_VCS > -}; > - > -enum VCS_TYPE { > - NONE_VCS, > - RTS_CTS, > - CTS_TO_SELF > -}; > - > -#define PWR_CAM 0 > -#define PWR_MINPS 1 > -#define PWR_MAXPS 2 > -#define PWR_UAPSD 3 > -#define PWR_VOIP 4 > - > -enum UAPSD_MAX_SP { > - NO_LIMIT, > - TWO_MSDU, > - FOUR_MSDU, > - SIX_MSDU > -}; > - > -#define NUM_PRE_AUTH_KEY 16 > -#define NUM_PMKID_CACHE NUM_PRE_AUTH_KEY > - > -#endif / #ifndef WLAN_BSSDEF_H_ / > - > diff --git a/drivers/staging/rtl8712/xmit_linux.c b/drivers/staging/rtl8712/xmit_linux.c > deleted file mode 100644 > index fb7eadafe73a..000000000000 > --- a/drivers/staging/rtl8712/xmit_linux.c > +++ /dev/null > @@ -1,181 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/ > - * xmit_linux.c > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * Linux device driver for RTL8192SU > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > - > -#define XMIT_OSDEP_C > - > -#include <linux/usb.h> > > -#include <linux/ip.h> > > -#include <linux/if_ether.h> > > -#include <linux/kmemleak.h> > > - > -#include "osdep_service.h" > -#include "drv_types.h" > - > -#include "wifi.h" > -#include "mlme_osdep.h" > -#include "xmit_osdep.h" > -#include "osdep_intf.h" > - > -static uint remainder_len(struct pkt_file *pfile) > -{ > - return (uint)(pfile->buf_len - ((addr_t)(pfile->cur_addr) - > > - (addr_t)(pfile->buf_start))); > > -} > - > -void _r8712_open_pktfile(_pkt *pktptr, struct pkt_file *pfile) > -{ > - pfile->pkt = pktptr; > > - pfile->cur_addr = pfile->buf_start = pktptr->data; > > - pfile->pkt_len = pfile->buf_len = pktptr->len; > > - pfile->cur_buffer = pfile->buf_start; > > -} > - > -uint _r8712_pktfile_read(struct pkt_file *pfile, u8 *rmem, uint rlen) > -{ > - uint len; > - > - len = remainder_len(pfile); > - len = (rlen > len) ? len : rlen; > > - if (rmem) > - skb_copy_bits(pfile->pkt, pfile->buf_len - pfile->pkt_len, > > - rmem, len); > - pfile->cur_addr += len; > > - pfile->pkt_len -= len; > > - return len; > -} > - > -sint r8712_endofpktfile(struct pkt_file *pfile) > -{ > - return (pfile->pkt_len == 0); > > -} > - > -void r8712_set_qos(struct pkt_file *ppktfile, struct pkt_attrib *pattrib) > -{ > - struct ethhdr etherhdr; > - struct iphdr ip_hdr; > - u16 user_priority = 0; > - > - _r8712_open_pktfile(ppktfile->pkt, ppktfile); > > - _r8712_pktfile_read(ppktfile, (unsigned char )ðerhdr, ETH_HLEN); > - > - / get user_priority from IP hdr*/ > - if (pattrib->ether_type == 0x0800) { > > - _r8712_pktfile_read(ppktfile, (u8 *)&ip_hdr, sizeof(ip_hdr)); > - /user_priority = (ntohs(ip_hdr.tos) >> 5) & 0x3 ;/ > > - user_priority = ip_hdr.tos >> 5; > > - } else { > - /* "When priority processing of data frames is supported, > - * a STA's SME should send EAPOL-Key frames at the highest > - * priority." > - */ > - > - if (pattrib->ether_type == 0x888e) > > - user_priority = 7; > - } > - pattrib->priority = user_priority; > > - pattrib->hdrlen = WLAN_HDR_A3_QOS_LEN; > > - pattrib->subtype = WIFI_QOS_DATA_TYPE; > > -} > - > -void r8712_SetFilter(struct work_struct *work) > -{ > - struct _adapter *adapter = container_of(work, struct _adapter, > - wk_filter_rx_ff0); > - u8 oldvalue = 0x00, newvalue = 0x00; > - > - oldvalue = r8712_read8(adapter, 0x117); > - newvalue = oldvalue & 0xfe; > - r8712_write8(adapter, 0x117, newvalue); > - > - wait_for_completion(&adapter->rx_filter_ready); > > - r8712_write8(adapter, 0x117, oldvalue); > -} > - > -int r8712_xmit_resource_alloc(struct _adapter *padapter, > - struct xmit_buf *pxmitbuf) > -{ > - int i; > - > - for (i = 0; i < 8; i++) { > - pxmitbuf->pxmit_urb[i] = usb_alloc_urb(0, GFP_KERNEL); > > - if (!pxmitbuf->pxmit_urb[i]) { > > - int k; > - > - for (k = i - 1; k >= 0; k--) { > > - /* handle allocation errors part way through loop */ > - usb_free_urb(pxmitbuf->pxmit_urb[k]); > > - } > - netdev_err(padapter->pnetdev, "pxmitbuf->pxmit_urb[i] == NULL\n"); > > - return -ENOMEM; > - } > - kmemleak_not_leak(pxmitbuf->pxmit_urb[i]); > > - } > - return 0; > -} > - > -void r8712_xmit_resource_free(struct _adapter *padapter, > - struct xmit_buf *pxmitbuf) > -{ > - int i; > - > - for (i = 0; i < 8; i++) { > - if (pxmitbuf->pxmit_urb[i]) { > > - usb_kill_urb(pxmitbuf->pxmit_urb[i]); > > - usb_free_urb(pxmitbuf->pxmit_urb[i]); > > - } > - } > -} > - > -void r8712_xmit_complete(struct _adapter *padapter, struct xmit_frame *pxframe) > -{ > - if (pxframe->pkt) > > - dev_kfree_skb_any(pxframe->pkt); > > - pxframe->pkt = NULL; > > -} > - > -netdev_tx_t r8712_xmit_entry(_pkt *pkt, struct net_device *netdev) > -{ > - struct xmit_frame *xmitframe = NULL; > - struct _adapter *adapter = netdev_priv(netdev); > - struct xmit_priv *xmitpriv = &adapter->xmitpriv; > > - > - if (!r8712_if_up(adapter)) > - goto _xmit_entry_drop; > - > - xmitframe = r8712_alloc_xmitframe(xmitpriv); > - if (!xmitframe) > - goto _xmit_entry_drop; > - > - if (r8712_update_attrib(adapter, pkt, &xmitframe->attrib)) > > - goto _xmit_entry_drop; > - > - adapter->ledpriv.LedControlHandler(adapter, LED_CTL_TX); > > - xmitframe->pkt = pkt; > > - if (r8712_pre_xmit(adapter, xmitframe)) { > - /dump xmitframe directly or drop xframe/ > - dev_kfree_skb_any(pkt); > - xmitframe->pkt = NULL; > > - } > - xmitpriv->tx_pkts++; > > - xmitpriv->tx_bytes += xmitframe->attrib.last_txcmdsz; > > - return NETDEV_TX_OK; > -_xmit_entry_drop: > - if (xmitframe) > - r8712_free_xmitframe(xmitpriv, xmitframe); > - xmitpriv->tx_drop++; > > - dev_kfree_skb_any(pkt); > - return NETDEV_TX_OK; > -} > diff --git a/drivers/staging/rtl8712/xmit_osdep.h b/drivers/staging/rtl8712/xmit_osdep.h > deleted file mode 100644 > index 1ad42658c883..000000000000 > --- a/drivers/staging/rtl8712/xmit_osdep.h > +++ /dev/null > @@ -1,52 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 / > -/***************************************************************************** > - * > - * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. > - * > - * Modifications for inclusion into the Linux staging tree are > - * Copyright(c) 2010 Larry Finger. All rights reserved. > - * > - * Contact information: > - * WLAN FAE wlanfae@xxxxxxxxxxx > > - * Larry Finger Larry.Finger@xxxxxxxxxxxx > > - * > - ******************************************************************************/ > -#ifndef _XMIT_OSDEP_H > -#define _XMIT_OSDEP_H > - > -#include "osdep_service.h" > -#include "drv_types.h" > - > -struct pkt_file { > - _pkt *pkt; > - u32 pkt_len; /the remainder length of the open_file/ > - _buffer *cur_buffer; > - u8 *buf_start; > - u8 *cur_addr; > - u32 buf_len; > -}; > - > -#define NR_XMITFRAME 256 > - > -struct xmit_priv; > -struct pkt_attrib; > -struct sta_xmit_priv; > -struct xmit_frame; > -struct xmit_buf; > - > -netdev_tx_t r8712_xmit_entry(_pkt *pkt, struct net_device *pnetdev); > -void r8712_SetFilter(struct work_struct *work); > -int r8712_xmit_resource_alloc(struct _adapter *padapter, > - struct xmit_buf *pxmitbuf); > -void r8712_xmit_resource_free(struct _adapter *padapter, > - struct xmit_buf *pxmitbuf); > - > -void r8712_set_qos(struct pkt_file *ppktfile, > - struct pkt_attrib *pattrib); > -void _r8712_open_pktfile(_pkt *pktptr, struct pkt_file *pfile); > -uint _r8712_pktfile_read(struct pkt_file *pfile, u8 *rmem, uint rlen); > -sint r8712_endofpktfile(struct pkt_file *pfile); > -void r8712_xmit_complete(struct _adapter *padapter, > - struct xmit_frame *pxframe); > - > -#endif > -- > 2.43.0 Tested-by: Dominik Karol Piątkowski <dominik.karol.piatkowski@xxxxxxxxxxxxxx>