// Commented by Albert 20101105
// Increase the scanning timeout because of increasing the SURVEY_TO value.
-#define SCANNING_TIMEOUT 8000
-#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
-#define CONC_SCANNING_TIMEOUT_SINGLE_BAND 10000
-#define CONC_SCANNING_TIMEOUT_DUAL_BAND 15000
-#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
+#define SCANNING_TIMEOUT 8000
+#ifdef CONFIG_SCAN_BACKOP
+#define CONC_SCANNING_TIMEOUT_SINGLE_BAND 10000
+#define CONC_SCANNING_TIMEOUT_DUAL_BAND 15000
+#endif
#ifdef PALTFORM_OS_WINCE
#define SCANQUEUE_LIFETIME 12000000 // unit:us
#define WIFI_ADHOC_MASTER_STATE 0x00000040
#define WIFI_UNDER_LINKING 0x00000080
#define WIFI_UNDER_WPS 0x00000100
-#define WIFI_UNDER_CAC 0x00000200
+/*#define WIFI_UNDEFINED_STATE 0x00000200*/
#define WIFI_STA_ALIVE_CHK_STATE 0x00000400
#define WIFI_SITE_MONITOR 0x00000800 /* under site surveying */
#define WIFI_WDS 0x00001000
/*#define WIFI_UNDEFINED_STATE 0x40000000*/
#define WIFI_MONITOR_STATE 0x80000000
-#define MLME_STATE_FMT "%s%s%s%s%s%s%s%s%s%s%s%s"
-#define MLME_STATE_ARG(state) \
- ((state) & WIFI_STATION_STATE)?" STA":"", \
- ((state) & WIFI_AP_STATE)?" AP":"", \
- ((state) & WIFI_ADHOC_STATE)?" ADHOC":"", \
- ((state) & WIFI_ADHOC_MASTER_STATE)?" ADHOC_M":"", \
- ((state) & WIFI_MONITOR_STATE)?" MONITOR":"", \
- ((state) & WIFI_MP_STATE)?" MP":"", \
- ((state) & WIFI_SITE_MONITOR)?" SCAN":"", \
- ((state) & WIFI_UNDER_LINKING)?" LINKING":"", \
- ((state) & WIFI_ASOC_STATE)?" ASOC":"", \
- ((state) & WIFI_OP_CH_SWITCHING)?" OP_CH_SW":"", \
- ((state) & WIFI_UNDER_WPS)?" WPS":"", \
- ((state) & WIFI_SLEEP_STATE)?" SLEEP":""
-
-#define ADPT_MLME_S_ARG(adapter) MLME_STATE_ARG(get_fwstate(&((adapter)->mlmepriv)))
+#define MIRACAST_DISABLED 0
+#define MIRACAST_SOURCE BIT0
+#define MIRACAST_SINK BIT1
+
+#define MIRACAST_MODE_REVERSE(mode) \
+ ((((mode) & MIRACAST_SOURCE) ? MIRACAST_SINK : 0) | (((mode) & MIRACAST_SINK) ? MIRACAST_SOURCE : 0))
+
+bool is_miracast_enabled(_adapter *adapter);
+bool rtw_chk_miracast_mode(_adapter *adapter, u8 mode);
+const char *get_miracast_mode_str(int mode);
+void rtw_wfd_st_switch(struct sta_info *sta, bool on);
+
+#define MLME_STATE(adapter) get_fwstate(&((adapter)->mlmepriv))
+
+#define MLME_IS_STA(adapter) (MLME_STATE((adapter)) & WIFI_STATION_STATE)
+#define MLME_IS_AP(adapter) (MLME_STATE((adapter)) & WIFI_AP_STATE)
+#define MLME_IS_ADHOC(adapter) (MLME_STATE((adapter)) & WIFI_ADHOC_STATE)
+#define MLME_IS_ADHOC_MASTER(adapter) (MLME_STATE((adapter)) & WIFI_ADHOC_MASTER_STATE)
+#define MLME_IS_MONITOR(adapter) (MLME_STATE((adapter)) & WIFI_MONITOR_STATE)
+#define MLME_IS_MP(adapter) (MLME_STATE((adapter)) & WIFI_MP_STATE)
+#ifdef CONFIG_P2P
+#define MLME_IS_GC(adapter) rtw_p2p_chk_role(&(adapter)->wdinfo, P2P_ROLE_CLIENT)
+#define MLME_IS_GO(adapter) rtw_p2p_chk_role(&(adapter)->wdinfo, P2P_ROLE_GO)
+#else /* !CONFIG_P2P */
+#define MLME_IS_GC(adapter) 0
+#define MLME_IS_GO(adapter) 0
+#endif /* !CONFIG_P2P */
+#define MLME_IS_MSRC(adapter) rtw_chk_miracast_mode((adapter), MIRACAST_SOURCE)
+#define MLME_IS_MSINK(adapter) rtw_chk_miracast_mode((adapter), MIRACAST_SINK)
+
+#define MLME_STATE_FMT "%s%s%s%s%s%s%s%s%s%s%s%s%s%s"
+#define MLME_STATE_ARG(adapter) \
+ MLME_IS_STA((adapter)) ? (MLME_IS_GC((adapter)) ? " GC" : " STA") : "", \
+ MLME_IS_AP((adapter)) ? (MLME_IS_GO((adapter)) ? " GO" : " AP") : "", \
+ MLME_IS_ADHOC((adapter)) ? " ADHOC" : "", \
+ MLME_IS_ADHOC_MASTER((adapter)) ? " ADHOC_M" : "", \
+ MLME_IS_MONITOR((adapter)) ? " MONITOR" : "", \
+ MLME_IS_MP((adapter)) ? " MP" : "", \
+ MLME_IS_MSRC((adapter)) ? " MSRC" : "", \
+ MLME_IS_MSINK((adapter)) ? " MSINK" : "", \
+ (MLME_STATE((adapter)) & WIFI_SITE_MONITOR) ? " SCAN" : "", \
+ (MLME_STATE((adapter)) & WIFI_UNDER_LINKING) ? " LINKING" : "", \
+ (MLME_STATE((adapter)) & WIFI_ASOC_STATE) ? " ASOC" : "", \
+ (MLME_STATE((adapter)) & WIFI_OP_CH_SWITCHING) ? " OP_CH_SW" : "", \
+ (MLME_STATE((adapter)) & WIFI_UNDER_WPS) ? " WPS" : "", \
+ (MLME_STATE((adapter)) & WIFI_SLEEP_STATE) ? " SLEEP" : ""
#define _FW_UNDER_LINKING WIFI_UNDER_LINKING
#define _FW_LINKED WIFI_ASOC_STATE
SCAN_MIX,
}RT_SCAN_TYPE, *PRT_SCAN_TYPE;
-enum _BAND
-{
- GHZ24_50 = 0,
- GHZ_50,
- GHZ_24,
- GHZ_MAX,
-};
+#define WIFI_FREQUENCY_BAND_AUTO 0
+#define WIFI_FREQUENCY_BAND_5GHZ 1
+#define WIFI_FREQUENCY_BAND_2GHZ 2
-#define rtw_band_valid(band) ((band) >= GHZ24_50 && (band) < GHZ_MAX)
+#define rtw_band_valid(band) ((band) <= WIFI_FREQUENCY_BAND_2GHZ)
enum DriverInterface {
DRIVER_WEXT = 1,
u8 token; // Used to record the dialog token of p2p invitation request frame.
};
-#define MIRACAST_DISABLED 0
-#define MIRACAST_SOURCE 1
-#define MIRACAST_SINK 2
-#define MIRACAST_INVALID 3
-
-#define is_miracast_enabled(mode) \
- (mode == MIRACAST_SOURCE || mode == MIRACAST_SINK)
-
-const char *get_miracast_mode_str(int mode);
-
#ifdef CONFIG_WFD
struct wifi_display_info{
u16 wfd_enable; // Eanble/Disable the WFD function.
- u16 rtsp_ctrlport; // TCP port number at which the this WFD device listens for RTSP messages
+ u16 init_rtsp_ctrlport; /* init value of rtsp_ctrlport when WFD enable */
+ u16 rtsp_ctrlport; /* TCP port number at which the this WFD device listens for RTSP messages, 0 when WFD disable */
+ u16 tdls_rtsp_ctrlport; /* rtsp_ctrlport used by tdls, will sync when rtsp_ctrlport is changed by user */
u16 peer_rtsp_ctrlport; // TCP port number at which the peer WFD device listens for RTSP messages
// This filed should be filled when receiving the gropu negotiation request
// 0 -> WFD Source Device
// 1 -> WFD Primary Sink Device
enum SCAN_RESULT_TYPE scan_result_type; // Used when P2P is enable. This parameter will impact the scan result.
+ u8 op_wfd_mode;
u8 stack_wfd_mode;
};
#endif //CONFIG_WFD
u16 peer_channel_num[2]; // The channel number which the receiver stands.
u8 peerDevAddr[ ETH_ALEN ]; // Peer device address
u8 benable; // This negoitation request frame is trigger to send or not
+ u8 peer_ch; /* The listen channel for peer P2P device */
};
struct group_id_info{
};
#endif //CONFIG_IOCTL_CFG80211
+#ifdef CONFIG_P2P_WOWLAN
+
+enum P2P_WOWLAN_RECV_FRAME_TYPE
+{
+ P2P_WOWLAN_RECV_NEGO_REQ = 0,
+ P2P_WOWLAN_RECV_INVITE_REQ = 1,
+ P2P_WOWLAN_RECV_PROVISION_REQ = 2,
+};
+
+struct p2p_wowlan_info{
+
+ u8 is_trigger;
+ enum P2P_WOWLAN_RECV_FRAME_TYPE wowlan_recv_frame_type;
+ u8 wowlan_peer_addr[ETH_ALEN];
+ u16 wowlan_peer_wpsconfig;
+ u8 wowlan_peer_is_persistent;
+ u8 wowlan_peer_invitation_type;
+};
+
+#endif //CONFIG_P2P_WOWLAN
+
struct wifidirect_info{
_adapter* padapter;
_timer find_phase_timer;
#ifdef CONFIG_WFD
struct wifi_display_info *wfd_info;
#endif
+
+#ifdef CONFIG_P2P_WOWLAN
+ struct p2p_wowlan_info p2p_wow_info;
+#endif //CONFIG_P2P_WOWLAN
+
enum P2P_ROLE role;
enum P2P_STATE pre_p2p_state;
enum P2P_STATE p2p_state;
u8 is_tdls_sta; // _TRUE: direct link sta, _FALSE: else
};
+struct tdls_temp_mgmt{
+ u8 initiator; // 0: None, 1: we initiate, 2: peer initiate
+ u8 peer_addr[ETH_ALEN];
+};
+
+#ifdef CONFIG_TDLS_CH_SW
+struct tdls_ch_switch{
+ u32 ch_sw_state;
+ ATOMIC_T chsw_on;
+ u8 addr[ETH_ALEN];
+ u8 off_ch_num;
+ u8 ch_offset;
+ u32 cur_time;
+ u8 delay_switch_back;
+ u8 dump_stack;
+ struct submit_ctx chsw_sctx;
+};
+#endif
+
struct tdls_info{
u8 ap_prohibited;
+ u8 ch_switch_prohibited;
u8 link_established;
u8 sta_cnt;
- u8 sta_maximum; // 1:tdls sta is equal (NUM_STA-1), reach max direct link number; 0: else;
+ u8 sta_maximum; /* 1:tdls sta is equal (NUM_STA-1), reach max direct link number; 0: else; */
struct tdls_ss_record ss_record;
+#ifdef CONFIG_TDLS_CH_SW
+ struct tdls_ch_switch chsw_info;
+#endif
+
u8 ch_sensing;
u8 cur_channel;
- u8 candidate_ch;
u8 collect_pkt_num[MAX_CHANNEL_NUM];
_lock cmd_lock;
_lock hdl_lock;
u8 watchdog_count;
- u8 dev_discovered; //WFD_TDLS: for sigma test
+ u8 dev_discovered; /* WFD_TDLS: for sigma test */
u8 tdls_enable;
- u8 external_setup; // _TRUE: setup is handled by wpa_supplicant
+
+ /* Let wpa_supplicant to setup*/
+ u8 driver_setup;
#ifdef CONFIG_WFD
struct wifi_display_info *wfd_info;
#endif
u16 status_code;
u8 *buf;
size_t len;
- u8 external_support;
};
/* used for mlme_priv.roam_flags */
RTW_ROAM_ACTIVE = BIT2,
};
+struct beacon_keys {
+ u8 ssid[IW_ESSID_MAX_SIZE];
+ u32 ssid_len;
+ u8 bcn_channel;
+ u16 ht_cap_info;
+ u8 ht_info_infos_0_sco; // bit0 & bit1 in infos[0] is second channel offset
+ int encryp_protocol;
+ int pairwise_cipher;
+ int group_cipher;
+ int is_8021x;
+};
+
struct mlme_priv {
_lock lock;
u8 *nic_hdl;
+ #ifdef SUPPLICANT_RTK_VERSION_LOWER_THAN_JB42
u8 not_indic_disco;
+ #endif
_list *pscanned;
_queue free_bss_pool;
_queue scanned_queue;
struct wlan_network cur_network;
struct wlan_network *cur_network_scanned;
+
+ // bcn check info
+ struct beacon_keys cur_beacon_keys; // save current beacon keys
+ struct beacon_keys new_beacon_keys; // save new beacon keys
+ u8 new_beacon_cnts; // if new_beacon_cnts >= threshold, ap beacon is changed
+
#ifdef CONFIG_ARP_KEEP_ALIVE
// for arp offload keep alive
+ u8 bGetGateway;
u8 gw_mac_addr[6];
u8 gw_ip[4];
#endif
struct vht_priv vhtpriv;
#endif
#ifdef CONFIG_BEAMFORMING
+#if (BEAMFORMING_SUPPORT == 0)/*for driver beamforming*/
struct beamforming_info beamforming_info;
#endif
+#endif
#ifdef CONFIG_DFS
u8 handle_dfs;
-#endif //CONFIG_DFS
+#endif
+#ifdef CONFIG_DFS_MASTER
+ /* TODO: move to rfctl */
+ _timer dfs_master_timer;
+#endif
RT_LINK_DETECT_T LinkDetectInfo;
_timer dynamic_chk_timer; //dynamic/periodic check timer
u8 acm_mask; // for wmm acm mask
+ const struct country_chplan *country_ent;
u8 ChannelPlan;
RT_SCAN_TYPE scan_mode; // active: 1, passive: 0
u8 *wps_probe_req_ie;
u32 wps_probe_req_ie_len;
+ u8 ext_capab_ie_data[8];/*currently for ap mode only*/
+ u8 ext_capab_ie_len;
+
#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
/* Number of associated Non-ERP stations (i.e., stations using 802.11b
* in 802.11g BSS) */
/* Number of associated stations that do not support Short Preamble */
int num_sta_no_short_preamble;
- int olbc; /* Overlapping Legacy BSS Condition */
+ int olbc; /* Overlapping Legacy BSS Condition (Legacy b/g)*/
/* Number of HT associated stations that do not support greenfield */
int num_sta_ht_no_gf;
/* Number of HT associated stations 20 MHz */
int num_sta_ht_20mhz;
+ /* number of associated stations 40MHz intolerant */
+ int num_sta_40mhz_intolerant;
+
/* Overlapping BSS information */
int olbc_ht;
#ifdef CONFIG_80211N_HT
+ int ht_20mhz_width_req;
+ int ht_intolerant_ch_reported;
u16 ht_op_mode;
+ u8 sw_to_20mhz; /*switch to 20Mhz BW*/
#endif /* CONFIG_80211N_HT */
u8 *assoc_req;
u8 *p2p_probe_resp_ie;
u8 *p2p_go_probe_resp_ie; //for GO
u8 *p2p_assoc_req_ie;
+ u8 *p2p_assoc_resp_ie;
u32 p2p_beacon_ie_len;
u32 p2p_probe_req_ie_len;
u32 p2p_probe_resp_ie_len;
u32 p2p_go_probe_resp_ie_len; //for GO
u32 p2p_assoc_req_ie_len;
-/*
-#if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
- //u8 *wps_p2p_beacon_ie;
- u8 *p2p_beacon_ie;
- u8 *wps_p2p_probe_resp_ie;
- u8 *wps_p2p_assoc_resp_ie;
- //u32 wps_p2p_beacon_ie_len;
- u32 p2p_beacon_ie_len;
- u32 wps_p2p_probe_resp_ie_len;
- u32 wps_p2p_assoc_resp_ie_len;
-#endif
-*/
+ u32 p2p_assoc_resp_ie_len;
_lock bcn_update_lock;
u8 update_bcn;
-
+ u8 ori_ch;
+ u8 ori_bw;
+ u8 ori_offset;
#endif //#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
#if defined(CONFIG_WFD) && defined(CONFIG_IOCTL_CFG80211)
u8 *wfd_probe_resp_ie;
u8 *wfd_go_probe_resp_ie; //for GO
u8 *wfd_assoc_req_ie;
+ u8 *wfd_assoc_resp_ie;
u32 wfd_beacon_ie_len;
u32 wfd_probe_req_ie_len;
u32 wfd_probe_resp_ie_len;
u32 wfd_go_probe_resp_ie_len; //for GO
u32 wfd_assoc_req_ie_len;
+ u32 wfd_assoc_resp_ie_len;
#endif
u8 scanning_via_buddy_intf;
#endif
- u8 NumOfBcnInfoChkFail;
- u32 timeBcnInfoChkStart;
+// u8 NumOfBcnInfoChkFail;
+// u32 timeBcnInfoChkStart;
};
#define mlme_set_scan_to_timer(mlme, ms) \
#define rtw_mlme_set_auto_scan_int(adapter, ms) \
do { \
adapter->mlmepriv.auto_scan_int_ms = ms; \
- while (0)
+ } while (0)
void rtw_mlme_reset_auto_scan_int(_adapter *adapter);
extern void rtw_stadel_event_callback(_adapter *adapter, u8 *pbuf);
extern void rtw_atimdone_event_callback(_adapter *adapter, u8 *pbuf);
extern void rtw_cpwm_event_callback(_adapter *adapter, u8 *pbuf);
-
+extern void rtw_wmm_event_callback(PADAPTER padapter, u8 *pbuf);
+#ifdef CONFIG_IEEE80211W
+void rtw_sta_timeout_event_callback(_adapter *adapter, u8 *pbuf);
+#endif /* CONFIG_IEEE80211W */
extern void rtw_join_timeout_handler(RTW_TIMER_HDL_ARGS);
extern void _rtw_scan_timeout_handler(RTW_TIMER_HDL_ARGS);
{
_irqL irqL;
- _enter_critical_bh(&pmlmepriv->lock, &irqL);
- if (check_fwstate(pmlmepriv, state) == _TRUE)
- pmlmepriv->fw_state ^= state;
- _exit_critical_bh(&pmlmepriv->lock, &irqL);
-}
-
-__inline static void clr_fwstate_ex(struct mlme_priv *pmlmepriv, sint state)
-{
- _irqL irqL;
-
_enter_critical_bh(&pmlmepriv->lock, &irqL);
_clr_fwstate_(pmlmepriv, state);
_exit_critical_bh(&pmlmepriv->lock, &irqL);
extern void rtw_indicate_connect(_adapter* adapter);
void rtw_indicate_scan_done( _adapter *padapter, bool aborted);
+void rtw_drv_scan_by_self(_adapter *padapter);
+void rtw_scan_wait_completed(_adapter *adapter);
u32 rtw_scan_abort_timeout(_adapter *adapter, u32 timeout_ms);
void rtw_scan_abort_no_wait(_adapter *adapter);
void rtw_scan_abort(_adapter *adapter);
#define rtw_set_scan_deny(adapter, ms) do {} while (0)
#endif
+void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv);
-extern int _rtw_init_mlme_priv(_adapter *padapter);
+#define MLME_BEACON_IE 0
+#define MLME_PROBE_REQ_IE 1
+#define MLME_PROBE_RESP_IE 2
+#define MLME_GO_PROBE_RESP_IE 3
+#define MLME_ASSOC_REQ_IE 4
+#define MLME_ASSOC_RESP_IE 5
-void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv);
+#if defined(CONFIG_WFD) && defined(CONFIG_IOCTL_CFG80211)
+int rtw_mlme_update_wfd_ie_data(struct mlme_priv *mlme, u8 type, u8 *ie, u32 ie_len);
+#endif
+extern int _rtw_init_mlme_priv(_adapter *padapter);
extern void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv);
extern int _rtw_enqueue_network(_queue *queue, struct wlan_network *pnetwork);
#define rtw_select_roaming_candidate(mlme) _FAIL
#endif /* CONFIG_LAYER2_ROAMING */
-void rtw_sta_media_status_rpt(_adapter *adapter,struct sta_info *psta, u32 mstatus);
+bool rtw_adjust_chbw(_adapter *adapter, u8 req_ch, u8 *req_bw, u8 *req_offset);
+
+struct sta_media_status_rpt_cmd_parm {
+ struct sta_info *sta;
+ bool connected;
+};
+
+void rtw_sta_media_status_rpt(_adapter *adapter, struct sta_info *sta, bool connected);
+u8 rtw_sta_media_status_rpt_cmd(_adapter *adapter, struct sta_info *sta, bool connected);
+void rtw_sta_media_status_rpt_cmd_hdl(_adapter *adapter, struct sta_media_status_rpt_cmd_parm *parm);
#ifdef CONFIG_INTEL_PROXIM
void rtw_proxim_enable(_adapter *padapter);
void rtw_proxim_disable(_adapter *padapter);
void rtw_proxim_send_packet(_adapter *padapter,u8 *pbuf,u16 len,u8 hw_rate);
#endif //CONFIG_INTEL_PROXIM
+
+#define IPV4_SRC(_iphdr) (((u8 *)(_iphdr)) + 12)
+#define IPV4_DST(_iphdr) (((u8 *)(_iphdr)) + 16)
+#define GET_IPV4_IHL(_iphdr) BE_BITS_TO_1BYTE(((u8 *)(_iphdr)) + 0, 0, 4)
+#define GET_IPV4_PROTOCOL(_iphdr) BE_BITS_TO_1BYTE(((u8 *)(_iphdr)) + 9, 0, 8)
+#define GET_IPV4_SRC(_iphdr) BE_BITS_TO_4BYTE(((u8 *)(_iphdr)) + 12, 0, 32)
+#define GET_IPV4_DST(_iphdr) BE_BITS_TO_4BYTE(((u8 *)(_iphdr)) + 16, 0, 32)
+
+#define GET_UDP_SRC(_udphdr) BE_BITS_TO_2BYTE(((u8 *)(_udphdr)) + 0, 0, 16)
+#define GET_UDP_DST(_udphdr) BE_BITS_TO_2BYTE(((u8 *)(_udphdr)) + 2, 0, 16)
+
+#define TCP_SRC(_tcphdr) (((u8 *)(_tcphdr)) + 0)
+#define TCP_DST(_tcphdr) (((u8 *)(_tcphdr)) + 2)
+#define GET_TCP_SRC(_tcphdr) BE_BITS_TO_2BYTE(((u8 *)(_tcphdr)) + 0, 0, 16)
+#define GET_TCP_DST(_tcphdr) BE_BITS_TO_2BYTE(((u8 *)(_tcphdr)) + 2, 0, 16)
+#define GET_TCP_SEQ(_tcphdr) BE_BITS_TO_4BYTE(((u8 *)(_tcphdr)) + 4, 0, 32)
+#define GET_TCP_ACK_SEQ(_tcphdr) BE_BITS_TO_4BYTE(((u8 *)(_tcphdr)) + 8, 0, 32)
+#define GET_TCP_DOFF(_tcphdr) BE_BITS_TO_1BYTE(((u8 *)(_tcphdr)) + 12, 4, 4)
+#define GET_TCP_FIN(_tcphdr) BE_BITS_TO_1BYTE(((u8 *)(_tcphdr)) + 13, 0, 1)
+#define GET_TCP_SYN(_tcphdr) BE_BITS_TO_1BYTE(((u8 *)(_tcphdr)) + 13, 1, 1)
+#define GET_TCP_RST(_tcphdr) BE_BITS_TO_1BYTE(((u8 *)(_tcphdr)) + 13, 2, 1)
+#define GET_TCP_PSH(_tcphdr) BE_BITS_TO_1BYTE(((u8 *)(_tcphdr)) + 13, 3, 1)
+#define GET_TCP_ACK(_tcphdr) BE_BITS_TO_1BYTE(((u8 *)(_tcphdr)) + 13, 4, 1)
+#define GET_TCP_URG(_tcphdr) BE_BITS_TO_1BYTE(((u8 *)(_tcphdr)) + 13, 5, 1)
+#define GET_TCP_ECE(_tcphdr) BE_BITS_TO_1BYTE(((u8 *)(_tcphdr)) + 13, 6, 1)
+#define GET_TCP_CWR(_tcphdr) BE_BITS_TO_1BYTE(((u8 *)(_tcphdr)) + 13, 7, 1)
+
#endif //__RTL871X_MLME_H_