1364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/****************************************************************************** 2364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * 3364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. 4364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * 5364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * This program is free software; you can redistribute it and/or modify it 6364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * under the terms of version 2 of the GNU General Public License as 7364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * published by the Free Software Foundation. 8364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * 9364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * This program is distributed in the hope that it will be useful, but WITHOUT 10364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * more details. 13364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * 14364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger ******************************************************************************/ 15364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#ifndef __STA_INFO_H_ 16364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define __STA_INFO_H_ 17364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 18364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#include <osdep_service.h> 19364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#include <drv_types.h> 20364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#include <wifi.h> 21364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 22364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define IBSS_START_MAC_ID 2 23364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define NUM_STA 32 24364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define NUM_ACL 16 25364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 26364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 27364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/* if mode ==0, then the sta is allowed once the addr is hit. */ 28364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/* if mode ==1, then the sta is rejected once the addr is non-hit. */ 29364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct rtw_wlan_acl_node { 30364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct list_head list; 31364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 addr[ETH_ALEN]; 32364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 valid; 33364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger}; 34364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 35364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/* mode=0, disable */ 36364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/* mode=1, accept unless in deny list */ 37364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger/* mode=2, deny unless in accept list */ 38364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct wlan_acl_pool { 39364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger int mode; 40364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger int num; 41364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct rtw_wlan_acl_node aclnode[NUM_ACL]; 42364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct rtw_queue acl_node_q; 43364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger}; 44364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 45364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct rssi_sta { 46364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger s32 UndecoratedSmoothedPWDB; 47364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger s32 UndecoratedSmoothedCCK; 48364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger s32 UndecoratedSmoothedOFDM; 49364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 PacketMap; 50364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 ValidBit; 51364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger}; 52364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 53364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct stainfo_stats { 54364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 rx_mgnt_pkts; 55364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 rx_beacon_pkts; 56364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 rx_probereq_pkts; 57364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 rx_probersp_pkts; 58364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 rx_probersp_bm_pkts; 59364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 rx_probersp_uo_pkts; 60364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 rx_ctrl_pkts; 61364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 rx_data_pkts; 62364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 63364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 last_rx_mgnt_pkts; 64364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 last_rx_beacon_pkts; 65364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 last_rx_probereq_pkts; 66364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 last_rx_probersp_pkts; 67364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 last_rx_probersp_bm_pkts; 68364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 last_rx_probersp_uo_pkts; 69364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 last_rx_ctrl_pkts; 70364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 last_rx_data_pkts; 71364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 72364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 rx_bytes; 73364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 rx_drops; 74364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 75364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 tx_pkts; 76364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 tx_bytes; 77364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u64 tx_drops; 78364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 79364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger}; 80364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 81364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct sta_info { 82364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger spinlock_t lock; 83364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct list_head list; /* free_sta_queue */ 84364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct list_head hash_list; /* sta_hash */ 85364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct rtw_adapter *padapter; 86364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 87364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct sta_xmit_priv sta_xmitpriv; 88364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct sta_recv_priv sta_recvpriv; 89364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 90364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct rtw_queue sleep_q; 91364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger unsigned int sleepq_len; 92364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 93364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger uint state; 94364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger uint aid; 95364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger uint mac_id; 96364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger uint qos_option; 97364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 hwaddr[ETH_ALEN]; 98364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 99364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger uint ieee8021x_blocked; /* 0: allowed, 1:blocked */ 1007989bcf3e21683f413dd1488718166d3ff474bf3Jes Sorensen u32 dot118021XPrivacy; /* aes, tkip... */ 101364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger union Keytype dot11tkiptxmickey; 102364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger union Keytype dot11tkiprxmickey; 103364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger union Keytype dot118021x_UncstKey; 104364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger union pn48 dot11txpn; /* PN48 used for Unicast xmit. */ 105364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger union pn48 dot11rxpn; /* PN48 used for Unicast recv. */ 106364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 107364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 108364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 bssrateset[16]; 109364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u32 bssratelen; 110364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger s32 rssi; 111364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger s32 signal_quality; 112364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 113364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 cts2self; 114364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 rtsen; 115364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 116364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 raid; 117364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 init_rate; 118364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u32 ra_mask; 119364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 wireless_mode; /* NETWORK_TYPE */ 120364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct stainfo_stats sta_stats; 121364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 122364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* for A-MPDU TX, ADDBA timeout check */ 123364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct timer_list addba_retry_timer; 124364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 125364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* for A-MPDU Rx reordering buffer control */ 126364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct recv_reorder_ctrl recvreorder_ctrl[16]; 127364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 128364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* for A-MPDU Tx */ 129364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* unsigned char ampdu_txen_bitmap; */ 130364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u16 BA_starting_seqctrl[16]; 131364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 132364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct ht_priv htpriv; 133364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 134364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* Notes: */ 135364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* STA_Mode: */ 136364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* curr_network(mlme_priv/security_priv/qos/ht) + sta_info: (STA & AP) CAP/INFO */ 137364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* scan_q: AP CAP/INFO */ 138364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 139364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* AP_Mode: */ 140364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* curr_network(mlme_priv/security_priv/qos/ht) : AP CAP/INFO */ 141364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* sta_info: (AP & STA) CAP/INFO */ 142364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 143364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct list_head asoc_list; 144364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct list_head auth_list; 145364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 146364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger unsigned int expire_to; 147364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger unsigned int auth_seq; 148364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger unsigned int authalg; 149364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger unsigned char chg_txt[128]; 150364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 151364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u16 capability; 152364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger int flags; 153364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 154364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger int dot8021xalg;/* 0:disable, 1:psk, 2:802.1x */ 155364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger int wpa_psk;/* 0:disable, bit(0): WPA, bit(1):WPA2 */ 156364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger int wpa_group_cipher; 157364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger int wpa2_group_cipher; 158364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger int wpa_pairwise_cipher; 159364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger int wpa2_pairwise_cipher; 160364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 161364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 bpairwise_key_installed; 162364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 163364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 wpa_ie[32]; 164364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 165364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 nonerp_set; 166364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 no_short_slot_time_set; 167364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 no_short_preamble_set; 168364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 no_ht_gf_set; 169364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 no_ht_set; 170364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 ht_20mhz_set; 171364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 172364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger unsigned int tx_ra_bitmap; 173364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 qos_info; 174364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 175364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 max_sp_len; 176364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 uapsd_bk;/* BIT(0): Delivery enabled, BIT(1): Trigger enabled */ 177364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 uapsd_be; 178364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 uapsd_vi; 179364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 uapsd_vo; 180364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 181364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 has_legacy_ac; 182364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger unsigned int sleepq_ac_len; 183364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 184364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* p2p priv data */ 185364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 is_p2p_device; 186364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 p2p_status_code; 187364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 188c17416ef707312429aafcdc4597db73906f3572eLarry Finger u8 keep_alive_trycnt; 189c17416ef707312429aafcdc4597db73906f3572eLarry Finger 190364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* p2p client info */ 191364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 dev_addr[ETH_ALEN]; 192364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 dev_cap; 193364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u16 config_methods; 194364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 primary_dev_type[8]; 195364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 num_of_secdev_type; 196364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 secdev_types_list[32];/* 32/8 == 4; */ 197364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u16 dev_name_len; 198364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 dev_name[32]; 199364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 *passoc_req; 200364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u32 assoc_req_len; 201364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 202364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* for DM */ 203364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct rssi_sta rssi_stat; 204364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 205364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* */ 206364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* ================ODM Relative Info======================= */ 207364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* Please be care, dont declare too much structure here. It will cost memory * STA support num. */ 208364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* */ 209364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* */ 210364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* 2011/10/20 MH Add for ODM STA info. */ 211364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* */ 212364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* Driver Write */ 213364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 bValid; /* record the sta status link or not? */ 214364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 rssi_level; /* for Refresh RA mask */ 215364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* ODM Write */ 216364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* 1 PHY_STATUS_INFO */ 217364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 RSSI_Path[4]; /* */ 218364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 RSSI_Ave; 219364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 RXEVM[4]; 220364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 RXSNR[4]; 221364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 222364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* ODM Write */ 223364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* 1 TX_INFO (may changed by IC) */ 224364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* ================ODM Relative Info======================= */ 225364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* */ 226364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 227364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* To store the sequence number of received management frame */ 228364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u16 RxMgmtFrameSeqNum; 229364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger}; 230364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 231364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_rx_pkts(sta) \ 232364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.rx_mgnt_pkts \ 233364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger + sta->sta_stats.rx_ctrl_pkts \ 234364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger + sta->sta_stats.rx_data_pkts) 235364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 236364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_last_rx_pkts(sta) \ 237364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.last_rx_mgnt_pkts \ 238364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger + sta->sta_stats.last_rx_ctrl_pkts \ 239364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger + sta->sta_stats.last_rx_data_pkts) 240364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 241364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_rx_data_pkts(sta) \ 242364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.rx_data_pkts) 243364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 244364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_last_rx_data_pkts(sta) \ 245364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.last_rx_data_pkts) 246364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 247364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_rx_mgnt_pkts(sta) \ 248364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.rx_mgnt_pkts) 249364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 250364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_last_rx_mgnt_pkts(sta) \ 251364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.last_rx_mgnt_pkts) 252364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 253364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_rx_beacon_pkts(sta) \ 254364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.rx_beacon_pkts) 255364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 256364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_last_rx_beacon_pkts(sta) \ 257364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.last_rx_beacon_pkts) 258364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 259364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_rx_probereq_pkts(sta) \ 260364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.rx_probereq_pkts) 261364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 262364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_last_rx_probereq_pkts(sta) \ 263364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.last_rx_probereq_pkts) 264364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 265364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_rx_probersp_pkts(sta) \ 266364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.rx_probersp_pkts) 267364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 268364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_last_rx_probersp_pkts(sta) \ 269364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.last_rx_probersp_pkts) 270364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 271364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_rx_probersp_bm_pkts(sta) \ 272364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.rx_probersp_bm_pkts) 273364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 274364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_last_rx_probersp_bm_pkts(sta) \ 275364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.last_rx_probersp_bm_pkts) 276364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 277364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_rx_probersp_uo_pkts(sta) \ 278364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.rx_probersp_uo_pkts) 279364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 280364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_last_rx_probersp_uo_pkts(sta) \ 281364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger (sta->sta_stats.last_rx_probersp_uo_pkts) 282364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 283364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define sta_update_last_rx_pkts(sta) \ 284364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger do { \ 285364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger sta->sta_stats.last_rx_mgnt_pkts = sta->sta_stats.rx_mgnt_pkts; \ 286364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger sta->sta_stats.last_rx_beacon_pkts = sta->sta_stats.rx_beacon_pkts; \ 287364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger sta->sta_stats.last_rx_probereq_pkts = sta->sta_stats.rx_probereq_pkts; \ 288364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger sta->sta_stats.last_rx_probersp_pkts = sta->sta_stats.rx_probersp_pkts; \ 289364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger sta->sta_stats.last_rx_probersp_bm_pkts = sta->sta_stats.rx_probersp_bm_pkts; \ 290364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger sta->sta_stats.last_rx_probersp_uo_pkts = sta->sta_stats.rx_probersp_uo_pkts; \ 291364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger sta->sta_stats.last_rx_ctrl_pkts = sta->sta_stats.rx_ctrl_pkts; \ 292364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger sta->sta_stats.last_rx_data_pkts = sta->sta_stats.rx_data_pkts; \ 293364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger } while (0) 294364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 295364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define STA_RX_PKTS_ARG(sta) \ 296364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger sta->sta_stats.rx_mgnt_pkts \ 297364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger , sta->sta_stats.rx_ctrl_pkts \ 298364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger , sta->sta_stats.rx_data_pkts 299364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 300364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define STA_LAST_RX_PKTS_ARG(sta) \ 301364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger sta->sta_stats.last_rx_mgnt_pkts, \ 302364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger sta->sta_stats.last_rx_ctrl_pkts, \ 303364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger sta->sta_stats.last_rx_data_pkts 304364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 305364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define STA_RX_PKTS_DIFF_ARG(sta) \ 306364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger sta->sta_stats.rx_mgnt_pkts - sta->sta_stats.last_rx_mgnt_pkts, \ 307364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger sta->sta_stats.rx_ctrl_pkts - sta->sta_stats.last_rx_ctrl_pkts, \ 308364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger sta->sta_stats.rx_data_pkts - sta->sta_stats.last_rx_data_pkts 309364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 310364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#define STA_PKTS_FMT "(m:%llu, c:%llu, d:%llu)" 311364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 3122ad7c3d940015ec00b9772ff1f1f4f9a24b1f682Jes Sorensenstruct sta_priv { 313364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger spinlock_t sta_hash_lock; 3142ad7c3d940015ec00b9772ff1f1f4f9a24b1f682Jes Sorensen struct list_head sta_hash[NUM_STA]; 315364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger int asoc_sta_count; 316364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 317364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct rtw_adapter *padapter; 318364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct list_head asoc_list; 319364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct list_head auth_list; 320364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger spinlock_t asoc_list_lock; 321364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger spinlock_t auth_list_lock; 322364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 asoc_list_cnt; 323364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u8 auth_list_cnt; 324364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 325364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger unsigned int auth_to; /* sec, time to expire in authenticating. */ 326364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger unsigned int assoc_to; /* sec, time to expire before associating. */ 327364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger unsigned int expire_to; /* sec , time to expire after associated. */ 328364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 329364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger /* pointers to STA info; based on allocated AID or NULL if AID free 330364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * AID is in the range 1-2007, so sta_aid[0] corresponders to AID 1 331364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * and so on 332364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger */ 333364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct sta_info *sta_aid[NUM_STA]; 334364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 335364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u16 sta_dz_bitmap;/* only support 15 stations, staion aid bitmap 336364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * for sleeping sta. */ 337364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u16 tim_bitmap;/* only support 15 stations, 338364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger * aid=0~15 mapping bit0~bit15 */ 339364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 340364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u16 max_num_sta; 341364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 342364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger struct wlan_acl_pool acl_list; 343364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger}; 344364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 3450348dc74f6689825c16db40fbe0ce6ad2da5bab9Jes Sorensenstatic inline u32 wifi_mac_hash(const u8 *mac) 346364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger{ 347364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger u32 x; 348364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 349364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger x = mac[0]; 350364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger x = (x << 2) ^ mac[1]; 351364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger x = (x << 2) ^ mac[2]; 352364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger x = (x << 2) ^ mac[3]; 353364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger x = (x << 2) ^ mac[4]; 354364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger x = (x << 2) ^ mac[5]; 355364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 356364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger x ^= x >> 8; 357364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger x = x & (NUM_STA - 1); 358364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 359364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger return x; 360364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger} 361364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 36295ddd22553b82be0f92f277744c33c88897afabcJes Sorensenint _rtw_init_sta_priv23a(struct sta_priv *pstapriv); 36395ddd22553b82be0f92f277744c33c88897afabcJes Sorensenint _rtw_free_sta_priv23a(struct sta_priv *pstapriv); 364364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 3653cf7fa6f8a2005f8cbe2e44228239a8dc1fffff6Jes Sorensenstruct sta_info *rtw_alloc_stainfo23a(struct sta_priv *pstapriv, const u8 *hwaddr, gfp_t gfp); 36695ddd22553b82be0f92f277744c33c88897afabcJes Sorensenint rtw_free_stainfo23a(struct rtw_adapter *padapter, struct sta_info *psta); 367364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingervoid rtw_free_all_stainfo23a(struct rtw_adapter *padapter); 3680348dc74f6689825c16db40fbe0ce6ad2da5bab9Jes Sorensenstruct sta_info *rtw_get_stainfo23a(struct sta_priv *pstapriv, const u8 *hwaddr); 36995ddd22553b82be0f92f277744c33c88897afabcJes Sorensenint rtw_init_bcmc_stainfo23a(struct rtw_adapter *padapter); 370364e30ebd2dbaccba430c603da03e68746eb932aLarry Fingerstruct sta_info *rtw_get_bcmc_stainfo23a(struct rtw_adapter *padapter); 37195ddd22553b82be0f92f277744c33c88897afabcJes Sorensenbool rtw_access_ctrl23a(struct rtw_adapter *padapter, u8 *mac_addr); 372364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger 373364e30ebd2dbaccba430c603da03e68746eb932aLarry Finger#endif /* _STA_INFO_H_ */ 374