diff options
-rw-r--r-- | .SRCINFO | 4 | ||||
-rw-r--r-- | PKGBUILD | 24 | ||||
-rw-r--r-- | makefile-for-linux.patch | 46 | ||||
-rw-r--r-- | package_kernel_rtl8189es_patches_010-rename-sta_info.h.patch | 1048 |
4 files changed, 1118 insertions, 4 deletions
@@ -15,8 +15,12 @@ pkgbase = rtl8189es-git conflicts = rtl8189es-git source = git+https://github.com/jwrdegoede/rtl8189ES_linux source = rtl8189es-git.install + source = makefile-for-linux.patch + source = package_kernel_rtl8189es_patches_010-rename-sta_info.h.patch md5sums = SKIP md5sums = 8a04c4c6a69a34393694aa0a14fb4853 + md5sums = c199e7dce430101a1b47a3e73c7c0b8e + md5sums = 967d0e1b4f7e7cc17949113faf67f89b pkgname = rtl8189es-git @@ -10,9 +10,14 @@ license=('GPL2') makedepends=('git' 'make' 'linux-headers') conflicts=("${_pkgbase}") source=("git+${url}" - "$pkgname.install") + "$pkgname.install" + "makefile-for-linux.patch" + "package_kernel_rtl8189es_patches_010-rename-sta_info.h.patch") install=$pkgname.install -md5sums=('SKIP' '8a04c4c6a69a34393694aa0a14fb4853') +md5sums=('SKIP' + '8a04c4c6a69a34393694aa0a14fb4853' + 'c199e7dce430101a1b47a3e73c7c0b8e' + '967d0e1b4f7e7cc17949113faf67f89b') procs_num=$(nproc) _extramodules=$(cat `find /usr/lib/modules/extramodules* -type 'f' -name 'version'`) @@ -22,19 +27,30 @@ pkgver() { printf '%s' "$(git rev-list --count HEAD)" "." "$(git rev-parse --short HEAD)" } +prepare() { + cd ${srcdir}/rtl8189ES_linux + local i; for i in "${source[@]}"; do + case $i in + *.patch) + echo "Applying patch ${i}" + patch -p1 -i "${srcdir}/${i}" + esac + done +} + build() { cd ${srcdir}/rtl8189ES_linux if [ ${CARCH} == "armv6h" -o ${CARCH} == "armv7h" ]; then ARCH="arm" + make ARCH=$ARCH -j$procs_num KSRC="/usr/lib/modules/${_extramodules}/build/" CONFIG_PLATFORM_ARM_SUN8I=y modules else ARCH=${CARCH} + make ARCH=$ARCH -j$procs_num KSRC="/usr/lib/modules/${_extramodules}/build/" CONFIG_PLATFORM_I386_PC=y modules fi - make ARCH=$ARCH -j$procs_num KSRC="/usr/lib/modules/${_extramodules}/build/" } package(){ cd ${srcdir}/rtl8189ES_linux - file_dir="$pkgdir/usr/lib/modules/${_extramodules}/kernel/drivers/net/wireless/realtek/rtl8189es" mkdir -p $file_dir install -Dm644 "8189es.ko" "$file_dir/8189es.ko" diff --git a/makefile-for-linux.patch b/makefile-for-linux.patch new file mode 100644 index 000000000000..2e10141381c9 --- /dev/null +++ b/makefile-for-linux.patch @@ -0,0 +1,46 @@ +--- a/Makefile 2021-03-30 16:23:13.556311014 +0300 ++++ b/Makefile 2021-03-30 17:10:58.503749788 +0300 +@@ -108,6 +108,7 @@ + CONFIG_PLATFORM_ARM_SUNxI = n + CONFIG_PLATFORM_ARM_SUN6I = n + CONFIG_PLATFORM_ARM_SUN7I = n ++CONFIG_PLATFORM_ARM_SUN8I = n + CONFIG_PLATFORM_ARM_SUN8I_W3P1 = n + CONFIG_PLATFORM_ARM_SUN8I_W5P1 = n + CONFIG_PLATFORM_ACTIONS_ATM702X = n +@@ -908,7 +909,6 @@ + MODULE_NAME :=wlan + endif + +- + ifeq ($(CONFIG_PLATFORM_ACTIONS_ATM705X), y) + EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN + #EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC +@@ -1113,8 +1113,6 @@ + KSRC ?= /home/share/CusEnv/FreeScale/FS_kernel_env + endif + +- +- + ifeq ($(CONFIG_PLATFORM_ACTIONS_ATJ227X), y) + EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ACTIONS_ATJ227X + ARCH := mips +@@ -1374,6 +1372,18 @@ + KSRC := /home/android_sdk/Allwinner/a20/kitkat-a20_v4.4/lichee/linux-3.4 + endif + ++ifeq ($(CONFIG_PLATFORM_ARM_SUN8I), y) ++#EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN ++EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_SUN8I ++EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_SUN8I_W3P1 ++EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT ++# default setting for Android 4.1, 4.2 ++EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE ++#EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT ++EXTRA_CFLAGS += -DCONFIG_P2P_IPS ++ARCH := arm ++endif ++ + ifeq ($(CONFIG_PLATFORM_ARM_SUN8I_W3P1), y) + EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN + EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_SUN8I diff --git a/package_kernel_rtl8189es_patches_010-rename-sta_info.h.patch b/package_kernel_rtl8189es_patches_010-rename-sta_info.h.patch new file mode 100644 index 000000000000..24e58211dad3 --- /dev/null +++ b/package_kernel_rtl8189es_patches_010-rename-sta_info.h.patch @@ -0,0 +1,1048 @@ +From 10f5956da995a89b4b803f276dc282f2cac3ae4e Mon Sep 17 00:00:00 2001 +From: Hauke Mehrtens <hauke@hauke-m.de> +Date: Wed, 27 Sep 2017 23:32:33 +0200 +Subject: rename sta_info.h + +--- + include/drv_types.h | 2 +- + include/{sta_info.h => rtl_sta_info.h} | 0 + 2 files changed, 1 insertion(+), 1 deletion(-) + rename include/{sta_info.h => rtl_sta_info.h} (100%) + +--- a/include/drv_types.h ++++ b/include/drv_types.h +@@ -105,7 +105,7 @@ typedef struct _ADAPTER _adapter, ADAPTE + #include <rtw_ioctl_rtl.h> + #include <osdep_intf.h> + #include <rtw_eeprom.h> +-#include <sta_info.h> ++#include <rtl_sta_info.h> + #include <rtw_event.h> + #include <rtw_mlme_ext.h> + #include <rtw_ap.h> +--- /dev/null ++++ b/include/rtl_sta_info.h +@@ -0,0 +1,510 @@ ++/****************************************************************************** ++ * ++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of version 2 of the GNU General Public License as ++ * published by the Free Software Foundation. ++ * ++ * This program is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for ++ * more details. ++ * ++ * You should have received a copy of the GNU General Public License along with ++ * this program; if not, write to the Free Software Foundation, Inc., ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA ++ * ++ * ++ ******************************************************************************/ ++#ifndef __STA_INFO_H_ ++#define __STA_INFO_H_ ++ ++ ++#define IBSS_START_MAC_ID 2 ++#define NUM_STA MACID_NUM_SW_LIMIT ++#define NUM_ACL 16 ++ ++#ifdef CONFIG_TDLS ++#define MAX_ALLOWED_TDLS_STA_NUM 4 ++#endif ++ ++enum sta_info_update_type { ++ STA_INFO_UPDATE_NONE = 0, ++ STA_INFO_UPDATE_BW = BIT(0), ++ STA_INFO_UPDATE_RATE = BIT(1), ++ STA_INFO_UPDATE_PROTECTION_MODE = BIT(2), ++ STA_INFO_UPDATE_CAP = BIT(3), ++ STA_INFO_UPDATE_HT_CAP = BIT(4), ++ STA_INFO_UPDATE_VHT_CAP = BIT(5), ++ STA_INFO_UPDATE_ALL = STA_INFO_UPDATE_BW ++ |STA_INFO_UPDATE_RATE ++ |STA_INFO_UPDATE_PROTECTION_MODE ++ |STA_INFO_UPDATE_CAP ++ |STA_INFO_UPDATE_HT_CAP ++ |STA_INFO_UPDATE_VHT_CAP, ++ STA_INFO_UPDATE_MAX ++}; ++ ++//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 rtw_wlan_acl_node { ++ _list list; ++ u8 addr[ETH_ALEN]; ++ u8 valid; ++}; ++ ++//mode=0, disable ++//mode=1, accept unless in deny list ++//mode=2, deny unless in accept list ++struct wlan_acl_pool { ++ int mode; ++ int num; ++ struct rtw_wlan_acl_node aclnode[NUM_ACL]; ++ _queue acl_node_q; ++}; ++ ++typedef struct _RSSI_STA{ ++ s32 UndecoratedSmoothedPWDB; ++ s32 UndecoratedSmoothedCCK; ++ s32 UndecoratedSmoothedOFDM; ++ u32 OFDM_pkt; ++ u64 PacketMap; ++ u8 ValidBit; ++}RSSI_STA, *PRSSI_STA; ++ ++struct stainfo_stats { ++ ++ u64 rx_mgnt_pkts; ++ u64 rx_beacon_pkts; ++ u64 rx_probereq_pkts; ++ u64 rx_probersp_pkts; ++ u64 rx_probersp_bm_pkts; ++ u64 rx_probersp_uo_pkts; ++ u64 rx_ctrl_pkts; ++ u64 rx_data_pkts; ++ u64 rx_data_qos_pkts[TID_NUM]; ++ u64 last_rx_mgnt_pkts; ++ u64 last_rx_beacon_pkts; ++ u64 last_rx_probereq_pkts; ++ u64 last_rx_probersp_pkts; ++ u64 last_rx_probersp_bm_pkts; ++ u64 last_rx_probersp_uo_pkts; ++ u64 last_rx_ctrl_pkts; ++ u64 last_rx_data_pkts; ++ u64 last_rx_data_qos_pkts[TID_NUM]; ++#ifdef CONFIG_TDLS ++ u64 rx_tdls_disc_rsp_pkts; ++ u64 last_rx_tdls_disc_rsp_pkts; ++#endif ++ u64 rx_bytes; ++ u64 rx_drops; ++ ++ u64 tx_pkts; ++ u64 tx_bytes; ++ u64 tx_drops; ++}; ++ ++#ifdef CONFIG_TDLS ++struct TDLS_PeerKey { ++ u8 kck[16]; /* TPK-KCK */ ++ u8 tk[16]; /* TPK-TK; only CCMP will be used */ ++} ; ++#endif //CONFIG_TDLS ++ ++struct sta_info { ++ ++ _lock lock; ++ _list list; //free_sta_queue ++ _list hash_list; //sta_hash ++ //_list asoc_list; //20061114 ++ //_list sleep_list;//sleep_q ++ //_list wakeup_list;//wakeup_q ++ _adapter *padapter; ++ ++ struct sta_xmit_priv sta_xmitpriv; ++ struct sta_recv_priv sta_recvpriv; ++ ++ _queue sleep_q; ++ unsigned int sleepq_len; ++ ++ uint state; ++ uint aid; ++ uint mac_id; ++ uint qos_option; ++ u8 hwaddr[ETH_ALEN]; ++ u16 hwseq; ++ ++ uint ieee8021x_blocked; //0: allowed, 1:blocked ++ uint dot118021XPrivacy; //aes, tkip... ++ union Keytype dot11tkiptxmickey; ++ union Keytype dot11tkiprxmickey; ++ union Keytype dot118021x_UncstKey; ++ union pn48 dot11txpn; // PN48 used for Unicast xmit ++#ifdef CONFIG_GTK_OL ++ u8 kek[RTW_KEK_LEN]; ++ u8 kck[RTW_KCK_LEN]; ++ u8 replay_ctr[RTW_REPLAY_CTR_LEN]; ++#endif //CONFIG_GTK_OL ++#ifdef CONFIG_IEEE80211W ++ union pn48 dot11wtxpn; // PN48 used for Unicast mgmt xmit. ++ _timer dot11w_expire_timer; ++#endif //CONFIG_IEEE80211W ++ union pn48 dot11rxpn; // PN48 used for Unicast recv. ++ ++ ++ u8 bssrateset[16]; ++ u32 bssratelen; ++ s32 rssi; ++ s32 signal_quality; ++ ++ u8 cts2self; ++ u8 rtsen; ++ ++ u8 raid; ++ u8 init_rate; ++ u64 ra_mask; ++ u8 wireless_mode; // NETWORK_TYPE ++ u8 bw_mode; ++ ++ u8 ldpc; ++ u8 stbc; ++ ++ struct stainfo_stats sta_stats; ++ ++#ifdef CONFIG_TDLS ++ u32 tdls_sta_state; ++ u8 SNonce[32]; ++ u8 ANonce[32]; ++ u32 TDLS_PeerKey_Lifetime; ++ u16 TPK_count; ++ _timer TPK_timer; ++ struct TDLS_PeerKey tpk; ++#ifdef CONFIG_TDLS_CH_SW ++ u16 ch_switch_time; ++ u16 ch_switch_timeout; ++ //u8 option; ++ _timer ch_sw_timer; ++ _timer delay_timer; ++#endif ++ _timer handshake_timer; ++ u8 alive_count; ++ _timer pti_timer; ++ u8 TDLS_RSNIE[20]; /* Save peer's RSNIE, used for sending TDLS_SETUP_RSP */ ++#endif /* CONFIG_TDLS */ ++ ++ //for A-MPDU TX, ADDBA timeout check ++ _timer addba_retry_timer; ++ ++ //for A-MPDU Rx reordering buffer control ++ struct recv_reorder_ctrl recvreorder_ctrl[TID_NUM]; ++ ATOMIC_T continual_no_rx_packet[TID_NUM]; ++ //for A-MPDU Tx ++ //unsigned char ampdu_txen_bitmap; ++ u16 BA_starting_seqctrl[16]; ++ ++ ++#ifdef CONFIG_80211N_HT ++ struct ht_priv htpriv; ++#endif ++ ++#ifdef CONFIG_80211AC_VHT ++ struct vht_priv vhtpriv; ++#endif ++ ++ //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 ++ ++#ifdef CONFIG_AP_MODE ++ ++ _list asoc_list; ++ _list auth_list; ++ ++ unsigned int expire_to; ++ unsigned int auth_seq; ++ unsigned int authalg; ++ unsigned char chg_txt[128]; ++ ++ u16 capability; ++ int flags; ++ ++ int dot8021xalg;//0:disable, 1:psk, 2:802.1x ++ int wpa_psk;//0:disable, bit(0): WPA, bit(1):WPA2 ++ int wpa_group_cipher; ++ int wpa2_group_cipher; ++ int wpa_pairwise_cipher; ++ int wpa2_pairwise_cipher; ++ ++ u8 bpairwise_key_installed; ++ ++#ifdef CONFIG_NATIVEAP_MLME ++ u8 wpa_ie[32]; ++ ++ u8 nonerp_set; ++ u8 no_short_slot_time_set; ++ u8 no_short_preamble_set; ++ u8 no_ht_gf_set; ++ u8 no_ht_set; ++ u8 ht_20mhz_set; ++ u8 ht_40mhz_intolerant; ++#endif // CONFIG_NATIVEAP_MLME ++ ++#ifdef CONFIG_ATMEL_RC_PATCH ++ u8 flag_atmel_rc; ++#endif ++ ++ u8 qos_info; ++ ++ u8 max_sp_len; ++ u8 uapsd_bk;//BIT(0): Delivery enabled, BIT(1): Trigger enabled ++ u8 uapsd_be; ++ u8 uapsd_vi; ++ u8 uapsd_vo; ++ ++ u8 has_legacy_ac; ++ unsigned int sleepq_ac_len; ++ ++#ifdef CONFIG_P2P ++ //p2p priv data ++ u8 is_p2p_device; ++ u8 p2p_status_code; ++ ++ //p2p client info ++ u8 dev_addr[ETH_ALEN]; ++ //u8 iface_addr[ETH_ALEN];//= hwaddr[ETH_ALEN] ++ u8 dev_cap; ++ u16 config_methods; ++ u8 primary_dev_type[8]; ++ u8 num_of_secdev_type; ++ u8 secdev_types_list[32];// 32/8 == 4; ++ u16 dev_name_len; ++ u8 dev_name[32]; ++#endif //CONFIG_P2P ++ ++#ifdef CONFIG_TX_MCAST2UNI ++ u8 under_exist_checking; ++#endif // CONFIG_TX_MCAST2UNI ++ ++ u8 keep_alive_trycnt; ++ ++#ifdef CONFIG_AUTO_AP_MODE ++ u8 isrc; //this device is rc ++ u16 pid; // pairing id ++#endif ++ ++#endif // CONFIG_AP_MODE ++ ++#ifdef CONFIG_IOCTL_CFG80211 ++ u8 *passoc_req; ++ u32 assoc_req_len; ++#endif ++ ++ //for DM ++ RSSI_STA rssi_stat; ++ ++ //ODM_STA_INFO_T ++ // ================ODM Relative Info======================= ++ // Please be care, dont declare too much structure here. It will cost memory * STA support num. ++ // ++ // ++ // 2011/10/20 MH Add for ODM STA info. ++ // ++ // Driver Write ++ u8 bValid; // record the sta status link or not? ++ //u8 WirelessMode; // ++ u8 IOTPeer; // Enum value. HT_IOT_PEER_E ++ // ODM Write ++ //1 PHY_STATUS_INFO ++ u8 RSSI_Path[4]; // ++ u8 RSSI_Ave; ++ u8 RXEVM[4]; ++ u8 RXSNR[4]; ++ ++ u8 rssi_level; //for Refresh RA mask ++ // ODM Write ++ //1 TX_INFO (may changed by IC) ++ //TX_INFO_T pTxInfo; // Define in IC folder. Move lower layer. ++ // ++ // ================ODM Relative Info======================= ++ // ++ ++ /* To store the sequence number of received management frame */ ++ u16 RxMgmtFrameSeqNum; ++}; ++ ++#define sta_rx_pkts(sta) \ ++ (sta->sta_stats.rx_mgnt_pkts \ ++ + sta->sta_stats.rx_ctrl_pkts \ ++ + sta->sta_stats.rx_data_pkts) ++ ++#define sta_last_rx_pkts(sta) \ ++ (sta->sta_stats.last_rx_mgnt_pkts \ ++ + sta->sta_stats.last_rx_ctrl_pkts \ ++ + sta->sta_stats.last_rx_data_pkts) ++ ++#define sta_rx_data_pkts(sta) \ ++ (sta->sta_stats.rx_data_pkts) ++ ++#define sta_rx_data_qos_pkts(sta, i) \ ++ (sta->sta_stats.rx_data_qos_pkts[i]) ++ ++#define sta_last_rx_data_pkts(sta) \ ++ (sta->sta_stats.last_rx_data_pkts) ++ ++#define sta_last_rx_data_qos_pkts(sta, i) \ ++ (sta->sta_stats.last_rx_data_qos_pkts[i]) ++ ++#define sta_rx_mgnt_pkts(sta) \ ++ (sta->sta_stats.rx_mgnt_pkts) ++ ++#define sta_last_rx_mgnt_pkts(sta) \ ++ (sta->sta_stats.last_rx_mgnt_pkts) ++ ++#define sta_rx_beacon_pkts(sta) \ ++ (sta->sta_stats.rx_beacon_pkts) ++ ++#define sta_last_rx_beacon_pkts(sta) \ ++ (sta->sta_stats.last_rx_beacon_pkts) ++ ++#define sta_rx_probereq_pkts(sta) \ ++ (sta->sta_stats.rx_probereq_pkts) ++ ++#define sta_last_rx_probereq_pkts(sta) \ ++ (sta->sta_stats.last_rx_probereq_pkts) ++ ++#define sta_rx_probersp_pkts(sta) \ ++ (sta->sta_stats.rx_probersp_pkts) ++ ++#define sta_last_rx_probersp_pkts(sta) \ ++ (sta->sta_stats.last_rx_probersp_pkts) ++ ++#define sta_rx_probersp_bm_pkts(sta) \ ++ (sta->sta_stats.rx_probersp_bm_pkts) ++ ++#define sta_last_rx_probersp_bm_pkts(sta) \ ++ (sta->sta_stats.last_rx_probersp_bm_pkts) ++ ++#define sta_rx_probersp_uo_pkts(sta) \ ++ (sta->sta_stats.rx_probersp_uo_pkts) ++ ++#define sta_last_rx_probersp_uo_pkts(sta) \ ++ (sta->sta_stats.last_rx_probersp_uo_pkts) ++ ++#define sta_update_last_rx_pkts(sta) \ ++ do { \ ++ sta->sta_stats.last_rx_mgnt_pkts = sta->sta_stats.rx_mgnt_pkts; \ ++ sta->sta_stats.last_rx_beacon_pkts = sta->sta_stats.rx_beacon_pkts; \ ++ sta->sta_stats.last_rx_probereq_pkts = sta->sta_stats.rx_probereq_pkts; \ ++ sta->sta_stats.last_rx_probersp_pkts = sta->sta_stats.rx_probersp_pkts; \ ++ sta->sta_stats.last_rx_probersp_bm_pkts = sta->sta_stats.rx_probersp_bm_pkts; \ ++ sta->sta_stats.last_rx_probersp_uo_pkts = sta->sta_stats.rx_probersp_uo_pkts; \ ++ sta->sta_stats.last_rx_ctrl_pkts = sta->sta_stats.rx_ctrl_pkts; \ ++ sta->sta_stats.last_rx_data_pkts = sta->sta_stats.rx_data_pkts; \ ++ } while(0) ++ ++#define STA_RX_PKTS_ARG(sta) \ ++ sta->sta_stats.rx_mgnt_pkts \ ++ , sta->sta_stats.rx_ctrl_pkts \ ++ , sta->sta_stats.rx_data_pkts ++ ++#define STA_LAST_RX_PKTS_ARG(sta) \ ++ sta->sta_stats.last_rx_mgnt_pkts \ ++ , sta->sta_stats.last_rx_ctrl_pkts \ ++ , sta->sta_stats.last_rx_data_pkts ++ ++#define STA_RX_PKTS_DIFF_ARG(sta) \ ++ sta->sta_stats.rx_mgnt_pkts - sta->sta_stats.last_rx_mgnt_pkts \ ++ , sta->sta_stats.rx_ctrl_pkts - sta->sta_stats.last_rx_ctrl_pkts \ ++ , sta->sta_stats.rx_data_pkts -sta->sta_stats.last_rx_data_pkts ++ ++#define STA_PKTS_FMT "(m:%llu, c:%llu, d:%llu)" ++ ++struct sta_priv { ++ ++ u8 *pallocated_stainfo_buf; ++ u8 *pstainfo_buf; ++ _queue free_sta_queue; ++ ++ _lock sta_hash_lock; ++ _list sta_hash[NUM_STA]; ++ int asoc_sta_count; ++ _queue sleep_q; ++ _queue wakeup_q; ++ ++ _adapter *padapter; ++ ++ ++#ifdef CONFIG_AP_MODE ++ _list asoc_list; ++ _list auth_list; ++ _lock asoc_list_lock; ++ _lock auth_list_lock; ++ u8 asoc_list_cnt; ++ u8 auth_list_cnt; ++ ++ 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. ++ ++ /* pointers to STA info; based on allocated AID or NULL if AID free ++ * AID is in the range 1-2007, so sta_aid[0] corresponders to AID 1 ++ * and so on ++ */ ++ struct sta_info *sta_aid[NUM_STA]; ++ ++ u16 sta_dz_bitmap;//only support 15 stations, staion aid bitmap for sleeping sta. ++ u16 tim_bitmap;//only support 15 stations, aid=0~15 mapping bit0~bit15 ++ ++ u16 max_num_sta; ++ ++ struct wlan_acl_pool acl_list; ++#endif ++ ++#ifdef CONFIG_ATMEL_RC_PATCH ++ u8 atmel_rc_pattern [6]; ++#endif ++ ++}; ++ ++ ++__inline static 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; ++} ++ ++ ++extern u32 _rtw_init_sta_priv(struct sta_priv *pstapriv); ++extern u32 _rtw_free_sta_priv(struct sta_priv *pstapriv); ++ ++#define stainfo_offset_valid(offset) (offset < NUM_STA && offset >= 0) ++int rtw_stainfo_offset(struct sta_priv *stapriv, struct sta_info *sta); ++struct sta_info *rtw_get_stainfo_by_offset(struct sta_priv *stapriv, int offset); ++ ++extern struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr); ++extern u32 rtw_free_stainfo(_adapter *padapter , struct sta_info *psta); ++extern void rtw_free_all_stainfo(_adapter *padapter); ++extern struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr); ++extern u32 rtw_init_bcmc_stainfo(_adapter* padapter); ++extern struct sta_info* rtw_get_bcmc_stainfo(_adapter* padapter); ++extern u8 rtw_access_ctrl(_adapter *padapter, u8 *mac_addr); ++ ++#endif //_STA_INFO_H_ ++ +--- a/include/sta_info.h ++++ /dev/null +@@ -1,510 +0,0 @@ +-/****************************************************************************** +- * +- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. +- * +- * This program is free software; you can redistribute it and/or modify it +- * under the terms of version 2 of the GNU General Public License as +- * published by the Free Software Foundation. +- * +- * This program is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +- * more details. +- * +- * You should have received a copy of the GNU General Public License along with +- * this program; if not, write to the Free Software Foundation, Inc., +- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA +- * +- * +- ******************************************************************************/ +-#ifndef __STA_INFO_H_ +-#define __STA_INFO_H_ +- +- +-#define IBSS_START_MAC_ID 2 +-#define NUM_STA MACID_NUM_SW_LIMIT +-#define NUM_ACL 16 +- +-#ifdef CONFIG_TDLS +-#define MAX_ALLOWED_TDLS_STA_NUM 4 +-#endif +- +-enum sta_info_update_type { +- STA_INFO_UPDATE_NONE = 0, +- STA_INFO_UPDATE_BW = BIT(0), +- STA_INFO_UPDATE_RATE = BIT(1), +- STA_INFO_UPDATE_PROTECTION_MODE = BIT(2), +- STA_INFO_UPDATE_CAP = BIT(3), +- STA_INFO_UPDATE_HT_CAP = BIT(4), +- STA_INFO_UPDATE_VHT_CAP = BIT(5), +- STA_INFO_UPDATE_ALL = STA_INFO_UPDATE_BW +- |STA_INFO_UPDATE_RATE +- |STA_INFO_UPDATE_PROTECTION_MODE +- |STA_INFO_UPDATE_CAP +- |STA_INFO_UPDATE_HT_CAP +- |STA_INFO_UPDATE_VHT_CAP, +- STA_INFO_UPDATE_MAX +-}; +- +-//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 rtw_wlan_acl_node { +- _list list; +- u8 addr[ETH_ALEN]; +- u8 valid; +-}; +- +-//mode=0, disable +-//mode=1, accept unless in deny list +-//mode=2, deny unless in accept list +-struct wlan_acl_pool { +- int mode; +- int num; +- struct rtw_wlan_acl_node aclnode[NUM_ACL]; +- _queue acl_node_q; +-}; +- +-typedef struct _RSSI_STA{ +- s32 UndecoratedSmoothedPWDB; +- s32 UndecoratedSmoothedCCK; +- s32 UndecoratedSmoothedOFDM; +- u32 OFDM_pkt; +- u64 PacketMap; +- u8 ValidBit; +-}RSSI_STA, *PRSSI_STA; +- +-struct stainfo_stats { +- +- u64 rx_mgnt_pkts; +- u64 rx_beacon_pkts; +- u64 rx_probereq_pkts; +- u64 rx_probersp_pkts; +- u64 rx_probersp_bm_pkts; +- u64 rx_probersp_uo_pkts; +- u64 rx_ctrl_pkts; +- u64 rx_data_pkts; +- u64 rx_data_qos_pkts[TID_NUM]; +- u64 last_rx_mgnt_pkts; +- u64 last_rx_beacon_pkts; +- u64 last_rx_probereq_pkts; +- u64 last_rx_probersp_pkts; +- u64 last_rx_probersp_bm_pkts; +- u64 last_rx_probersp_uo_pkts; +- u64 last_rx_ctrl_pkts; +- u64 last_rx_data_pkts; +- u64 last_rx_data_qos_pkts[TID_NUM]; +-#ifdef CONFIG_TDLS +- u64 rx_tdls_disc_rsp_pkts; +- u64 last_rx_tdls_disc_rsp_pkts; +-#endif +- u64 rx_bytes; +- u64 rx_drops; +- +- u64 tx_pkts; +- u64 tx_bytes; +- u64 tx_drops; +-}; +- +-#ifdef CONFIG_TDLS +-struct TDLS_PeerKey { +- u8 kck[16]; /* TPK-KCK */ +- u8 tk[16]; /* TPK-TK; only CCMP will be used */ +-} ; +-#endif //CONFIG_TDLS +- +-struct sta_info { +- +- _lock lock; +- _list list; //free_sta_queue +- _list hash_list; //sta_hash +- //_list asoc_list; //20061114 +- //_list sleep_list;//sleep_q +- //_list wakeup_list;//wakeup_q +- _adapter *padapter; +- +- struct sta_xmit_priv sta_xmitpriv; +- struct sta_recv_priv sta_recvpriv; +- +- _queue sleep_q; +- unsigned int sleepq_len; +- +- uint state; +- uint aid; +- uint mac_id; +- uint qos_option; +- u8 hwaddr[ETH_ALEN]; +- u16 hwseq; +- +- uint ieee8021x_blocked; //0: allowed, 1:blocked +- uint dot118021XPrivacy; //aes, tkip... +- union Keytype dot11tkiptxmickey; +- union Keytype dot11tkiprxmickey; +- union Keytype dot118021x_UncstKey; +- union pn48 dot11txpn; // PN48 used for Unicast xmit +-#ifdef CONFIG_GTK_OL +- u8 kek[RTW_KEK_LEN]; +- u8 kck[RTW_KCK_LEN]; +- u8 replay_ctr[RTW_REPLAY_CTR_LEN]; +-#endif //CONFIG_GTK_OL +-#ifdef CONFIG_IEEE80211W +- union pn48 dot11wtxpn; // PN48 used for Unicast mgmt xmit. +- _timer dot11w_expire_timer; +-#endif //CONFIG_IEEE80211W +- union pn48 dot11rxpn; // PN48 used for Unicast recv. +- +- +- u8 bssrateset[16]; +- u32 bssratelen; +- s32 rssi; +- s32 signal_quality; +- +- u8 cts2self; +- u8 rtsen; +- +- u8 raid; +- u8 init_rate; +- u64 ra_mask; +- u8 wireless_mode; // NETWORK_TYPE +- u8 bw_mode; +- +- u8 ldpc; +- u8 stbc; +- +- struct stainfo_stats sta_stats; +- +-#ifdef CONFIG_TDLS +- u32 tdls_sta_state; +- u8 SNonce[32]; +- u8 ANonce[32]; +- u32 TDLS_PeerKey_Lifetime; +- u16 TPK_count; +- _timer TPK_timer; +- struct TDLS_PeerKey tpk; +-#ifdef CONFIG_TDLS_CH_SW +- u16 ch_switch_time; +- u16 ch_switch_timeout; +- //u8 option; +- _timer ch_sw_timer; +- _timer delay_timer; +-#endif +- _timer handshake_timer; +- u8 alive_count; +- _timer pti_timer; +- u8 TDLS_RSNIE[20]; /* Save peer's RSNIE, used for sending TDLS_SETUP_RSP */ +-#endif /* CONFIG_TDLS */ +- +- //for A-MPDU TX, ADDBA timeout check +- _timer addba_retry_timer; +- +- //for A-MPDU Rx reordering buffer control +- struct recv_reorder_ctrl recvreorder_ctrl[TID_NUM]; +- ATOMIC_T continual_no_rx_packet[TID_NUM]; +- //for A-MPDU Tx +- //unsigned char ampdu_txen_bitmap; +- u16 BA_starting_seqctrl[16]; +- +- +-#ifdef CONFIG_80211N_HT +- struct ht_priv htpriv; +-#endif +- +-#ifdef CONFIG_80211AC_VHT +- struct vht_priv vhtpriv; +-#endif +- +- //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 +- +-#ifdef CONFIG_AP_MODE +- +- _list asoc_list; +- _list auth_list; +- +- unsigned int expire_to; +- unsigned int auth_seq; +- unsigned int authalg; +- unsigned char chg_txt[128]; +- +- u16 capability; +- int flags; +- +- int dot8021xalg;//0:disable, 1:psk, 2:802.1x +- int wpa_psk;//0:disable, bit(0): WPA, bit(1):WPA2 +- int wpa_group_cipher; +- int wpa2_group_cipher; +- int wpa_pairwise_cipher; +- int wpa2_pairwise_cipher; +- +- u8 bpairwise_key_installed; +- +-#ifdef CONFIG_NATIVEAP_MLME +- u8 wpa_ie[32]; +- +- u8 nonerp_set; +- u8 no_short_slot_time_set; +- u8 no_short_preamble_set; +- u8 no_ht_gf_set; +- u8 no_ht_set; +- u8 ht_20mhz_set; +- u8 ht_40mhz_intolerant; +-#endif // CONFIG_NATIVEAP_MLME +- +-#ifdef CONFIG_ATMEL_RC_PATCH +- u8 flag_atmel_rc; +-#endif +- +- u8 qos_info; +- +- u8 max_sp_len; +- u8 uapsd_bk;//BIT(0): Delivery enabled, BIT(1): Trigger enabled +- u8 uapsd_be; +- u8 uapsd_vi; +- u8 uapsd_vo; +- +- u8 has_legacy_ac; +- unsigned int sleepq_ac_len; +- +-#ifdef CONFIG_P2P +- //p2p priv data +- u8 is_p2p_device; +- u8 p2p_status_code; +- +- //p2p client info +- u8 dev_addr[ETH_ALEN]; +- //u8 iface_addr[ETH_ALEN];//= hwaddr[ETH_ALEN] +- u8 dev_cap; +- u16 config_methods; +- u8 primary_dev_type[8]; +- u8 num_of_secdev_type; +- u8 secdev_types_list[32];// 32/8 == 4; +- u16 dev_name_len; +- u8 dev_name[32]; +-#endif //CONFIG_P2P +- +-#ifdef CONFIG_TX_MCAST2UNI +- u8 under_exist_checking; +-#endif // CONFIG_TX_MCAST2UNI +- +- u8 keep_alive_trycnt; +- +-#ifdef CONFIG_AUTO_AP_MODE +- u8 isrc; //this device is rc +- u16 pid; // pairing id +-#endif +- +-#endif // CONFIG_AP_MODE +- +-#ifdef CONFIG_IOCTL_CFG80211 +- u8 *passoc_req; +- u32 assoc_req_len; +-#endif +- +- //for DM +- RSSI_STA rssi_stat; +- +- //ODM_STA_INFO_T +- // ================ODM Relative Info======================= +- // Please be care, dont declare too much structure here. It will cost memory * STA support num. +- // +- // +- // 2011/10/20 MH Add for ODM STA info. +- // +- // Driver Write +- u8 bValid; // record the sta status link or not? +- //u8 WirelessMode; // +- u8 IOTPeer; // Enum value. HT_IOT_PEER_E +- // ODM Write +- //1 PHY_STATUS_INFO +- u8 RSSI_Path[4]; // +- u8 RSSI_Ave; +- u8 RXEVM[4]; +- u8 RXSNR[4]; +- +- u8 rssi_level; //for Refresh RA mask +- // ODM Write +- //1 TX_INFO (may changed by IC) +- //TX_INFO_T pTxInfo; // Define in IC folder. Move lower layer. +- // +- // ================ODM Relative Info======================= +- // +- +- /* To store the sequence number of received management frame */ +- u16 RxMgmtFrameSeqNum; +-}; +- +-#define sta_rx_pkts(sta) \ +- (sta->sta_stats.rx_mgnt_pkts \ +- + sta->sta_stats.rx_ctrl_pkts \ +- + sta->sta_stats.rx_data_pkts) +- +-#define sta_last_rx_pkts(sta) \ +- (sta->sta_stats.last_rx_mgnt_pkts \ +- + sta->sta_stats.last_rx_ctrl_pkts \ +- + sta->sta_stats.last_rx_data_pkts) +- +-#define sta_rx_data_pkts(sta) \ +- (sta->sta_stats.rx_data_pkts) +- +-#define sta_rx_data_qos_pkts(sta, i) \ +- (sta->sta_stats.rx_data_qos_pkts[i]) +- +-#define sta_last_rx_data_pkts(sta) \ +- (sta->sta_stats.last_rx_data_pkts) +- +-#define sta_last_rx_data_qos_pkts(sta, i) \ +- (sta->sta_stats.last_rx_data_qos_pkts[i]) +- +-#define sta_rx_mgnt_pkts(sta) \ +- (sta->sta_stats.rx_mgnt_pkts) +- +-#define sta_last_rx_mgnt_pkts(sta) \ +- (sta->sta_stats.last_rx_mgnt_pkts) +- +-#define sta_rx_beacon_pkts(sta) \ +- (sta->sta_stats.rx_beacon_pkts) +- +-#define sta_last_rx_beacon_pkts(sta) \ +- (sta->sta_stats.last_rx_beacon_pkts) +- +-#define sta_rx_probereq_pkts(sta) \ +- (sta->sta_stats.rx_probereq_pkts) +- +-#define sta_last_rx_probereq_pkts(sta) \ +- (sta->sta_stats.last_rx_probereq_pkts) +- +-#define sta_rx_probersp_pkts(sta) \ +- (sta->sta_stats.rx_probersp_pkts) +- +-#define sta_last_rx_probersp_pkts(sta) \ +- (sta->sta_stats.last_rx_probersp_pkts) +- +-#define sta_rx_probersp_bm_pkts(sta) \ +- (sta->sta_stats.rx_probersp_bm_pkts) +- +-#define sta_last_rx_probersp_bm_pkts(sta) \ +- (sta->sta_stats.last_rx_probersp_bm_pkts) +- +-#define sta_rx_probersp_uo_pkts(sta) \ +- (sta->sta_stats.rx_probersp_uo_pkts) +- +-#define sta_last_rx_probersp_uo_pkts(sta) \ +- (sta->sta_stats.last_rx_probersp_uo_pkts) +- +-#define sta_update_last_rx_pkts(sta) \ +- do { \ +- sta->sta_stats.last_rx_mgnt_pkts = sta->sta_stats.rx_mgnt_pkts; \ +- sta->sta_stats.last_rx_beacon_pkts = sta->sta_stats.rx_beacon_pkts; \ +- sta->sta_stats.last_rx_probereq_pkts = sta->sta_stats.rx_probereq_pkts; \ +- sta->sta_stats.last_rx_probersp_pkts = sta->sta_stats.rx_probersp_pkts; \ +- sta->sta_stats.last_rx_probersp_bm_pkts = sta->sta_stats.rx_probersp_bm_pkts; \ +- sta->sta_stats.last_rx_probersp_uo_pkts = sta->sta_stats.rx_probersp_uo_pkts; \ +- sta->sta_stats.last_rx_ctrl_pkts = sta->sta_stats.rx_ctrl_pkts; \ +- sta->sta_stats.last_rx_data_pkts = sta->sta_stats.rx_data_pkts; \ +- } while(0) +- +-#define STA_RX_PKTS_ARG(sta) \ +- sta->sta_stats.rx_mgnt_pkts \ +- , sta->sta_stats.rx_ctrl_pkts \ +- , sta->sta_stats.rx_data_pkts +- +-#define STA_LAST_RX_PKTS_ARG(sta) \ +- sta->sta_stats.last_rx_mgnt_pkts \ +- , sta->sta_stats.last_rx_ctrl_pkts \ +- , sta->sta_stats.last_rx_data_pkts +- +-#define STA_RX_PKTS_DIFF_ARG(sta) \ +- sta->sta_stats.rx_mgnt_pkts - sta->sta_stats.last_rx_mgnt_pkts \ +- , sta->sta_stats.rx_ctrl_pkts - sta->sta_stats.last_rx_ctrl_pkts \ +- , sta->sta_stats.rx_data_pkts -sta->sta_stats.last_rx_data_pkts +- +-#define STA_PKTS_FMT "(m:%llu, c:%llu, d:%llu)" +- +-struct sta_priv { +- +- u8 *pallocated_stainfo_buf; +- u8 *pstainfo_buf; +- _queue free_sta_queue; +- +- _lock sta_hash_lock; +- _list sta_hash[NUM_STA]; +- int asoc_sta_count; +- _queue sleep_q; +- _queue wakeup_q; +- +- _adapter *padapter; +- +- +-#ifdef CONFIG_AP_MODE +- _list asoc_list; +- _list auth_list; +- _lock asoc_list_lock; +- _lock auth_list_lock; +- u8 asoc_list_cnt; +- u8 auth_list_cnt; +- +- 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. +- +- /* pointers to STA info; based on allocated AID or NULL if AID free +- * AID is in the range 1-2007, so sta_aid[0] corresponders to AID 1 +- * and so on +- */ +- struct sta_info *sta_aid[NUM_STA]; +- +- u16 sta_dz_bitmap;//only support 15 stations, staion aid bitmap for sleeping sta. +- u16 tim_bitmap;//only support 15 stations, aid=0~15 mapping bit0~bit15 +- +- u16 max_num_sta; +- +- struct wlan_acl_pool acl_list; +-#endif +- +-#ifdef CONFIG_ATMEL_RC_PATCH +- u8 atmel_rc_pattern [6]; +-#endif +- +-}; +- +- +-__inline static 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; +-} +- +- +-extern u32 _rtw_init_sta_priv(struct sta_priv *pstapriv); +-extern u32 _rtw_free_sta_priv(struct sta_priv *pstapriv); +- +-#define stainfo_offset_valid(offset) (offset < NUM_STA && offset >= 0) +-int rtw_stainfo_offset(struct sta_priv *stapriv, struct sta_info *sta); +-struct sta_info *rtw_get_stainfo_by_offset(struct sta_priv *stapriv, int offset); +- +-extern struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr); +-extern u32 rtw_free_stainfo(_adapter *padapter , struct sta_info *psta); +-extern void rtw_free_all_stainfo(_adapter *padapter); +-extern struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr); +-extern u32 rtw_init_bcmc_stainfo(_adapter* padapter); +-extern struct sta_info* rtw_get_bcmc_stainfo(_adapter* padapter); +-extern u8 rtw_access_ctrl(_adapter *padapter, u8 *mac_addr); +- +-#endif //_STA_INFO_H_ +- |