staging: r8188eu: Add files for new driver - part 28
authorLarry Finger <Larry.Finger@lwfinger.net>
Thu, 22 Aug 2013 03:34:10 +0000 (22:34 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 22 Aug 2013 17:20:12 +0000 (10:20 -0700)
This commit adds files include/rtw_mlme.h, include/rtw_mlme_ext.h,
include/rtw_mp.h, include/rtw_mp_ioctl.h, and include/rtw_mp_phy_regdef.h.

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8188eu/include/rtw_mlme.h [new file with mode: 0644]
drivers/staging/rtl8188eu/include/rtw_mlme_ext.h [new file with mode: 0644]
drivers/staging/rtl8188eu/include/rtw_mp.h [new file with mode: 0644]
drivers/staging/rtl8188eu/include/rtw_mp_ioctl.h [new file with mode: 0644]
drivers/staging/rtl8188eu/include/rtw_mp_phy_regdef.h [new file with mode: 0644]

diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme.h b/drivers/staging/rtl8188eu/include/rtw_mlme.h
new file mode 100644 (file)
index 0000000..22538e6
--- /dev/null
@@ -0,0 +1,655 @@
+/******************************************************************************
+ *
+ * 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 __RTW_MLME_H_
+#define __RTW_MLME_H_
+
+#include <osdep_service.h>
+#include <mlme_osdep.h>
+#include <drv_types.h>
+#include <wlan_bssdef.h>
+
+#define        MAX_BSS_CNT     128
+#define   MAX_JOIN_TIMEOUT     6500
+
+/* Increase the scanning timeout because of increasing the SURVEY_TO value. */
+
+#define                SCANNING_TIMEOUT        8000
+
+#define        SCAN_INTERVAL   (30) /*  unit:2sec, 30*2=60sec */
+
+#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_UNDER_WPS                  0x00000100
+#define        WIFI_STA_ALIVE_CHK_STATE        0x00000400
+#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 continous tx background */
+#define        WIFI_MP_CTX_ST                  0x00040000      /*  in continous tx with single-tone */
+#define        WIFI_MP_CTX_BACKGROUND_PENDING  0x00080000      /*  pending in continous tx background due to out of skb */
+#define        WIFI_MP_CTX_CCK_HW              0x00100000      /*  in continous tx */
+#define        WIFI_MP_CTX_CCK_CS              0x00200000      /*  in continous 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
+
+enum dot11AuthAlgrthmNum {
+       dot11AuthAlgrthm_Open = 0,
+       dot11AuthAlgrthm_Shared,
+       dot11AuthAlgrthm_8021X,
+       dot11AuthAlgrthm_Auto,
+       dot11AuthAlgrthm_WAPI,
+       dot11AuthAlgrthm_MaxNum
+};
+
+/*  Scan type including active and passive scan. */
+enum rt_scan_type {
+       SCAN_PASSIVE,
+       SCAN_ACTIVE,
+       SCAN_MIX,
+};
+
+enum SCAN_RESULT_TYPE {
+       SCAN_RESULT_P2P_ONLY = 0,       /* Will return all the P2P devices. */
+       SCAN_RESULT_ALL = 1,            /* Will return all the scanned device,
+                                        * include AP. */
+       SCAN_RESULT_WFD_TYPE = 2        /* Will just return the correct WFD
+                                        * device. */
+                                       /* If this device is Miracast sink
+                                        * device, it will just return all the
+                                        * Miracast source devices. */
+};
+
+/*
+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 modifiying 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;
+       int     traffic_busy;
+       struct timer_list sitesurvey_ctrl_timer;
+};
+
+struct rt_link_detect {
+       u32     NumTxOkInPeriod;
+       u32     NumRxOkInPeriod;
+       u32     NumRxUnicastOkInPeriod;
+       bool    bBusyTraffic;
+       bool    bTxBusyTraffic;
+       bool    bRxBusyTraffic;
+       bool    bHigherBusyTraffic; /*  For interrupt migration purpose. */
+       bool    bHigherBusyRxTraffic; /* We may disable Tx interrupt according
+                                      * to Rx traffic. */
+       bool    bHigherBusyTxTraffic; /* We may disable Tx interrupt according
+                                      * to Tx traffic. */
+};
+
+struct profile_info {
+       u8      ssidlen;
+       u8      ssid[ WLAN_SSID_MAXLEN ];
+       u8      peermac[ ETH_ALEN ];
+};
+
+struct tx_invite_req_info {
+       u8      token;
+       u8      benable;
+       u8      go_ssid[ WLAN_SSID_MAXLEN ];
+       u8      ssidlen;
+       u8      go_bssid[ ETH_ALEN ];
+       u8      peer_macaddr[ ETH_ALEN ];
+       u8      operating_ch;   /* This information will be set by using the
+                                * p2p_set op_ch=x */
+       u8      peer_ch;        /* The listen channel for peer P2P device */
+};
+
+struct tx_invite_resp_info {
+       u8      token;  /* Used to record the dialog token of p2p invitation
+                        * request frame. */
+};
+
+struct tx_provdisc_req_info {
+       u16     wps_config_method_request;      /* Used when sending the
+                                                * provisioning request frame*/
+       u16     peer_channel_num[2];            /* The channel number which the
+                                                * receiver stands. */
+       struct ndis_802_11_ssid ssid;
+       u8      peerDevAddr[ETH_ALEN];          /* Peer device address */
+       u8      peerIFAddr[ETH_ALEN];           /* Peer interface address */
+       u8      benable;                        /* This provision discovery
+                                                * request frame is trigger
+                                                * to send or not */
+};
+
+/* When peer device issue prov_disc_req first, we should store the following
+ * information */
+/* The UI must know this information to know which config method the
+ * remote p2p device needs. */
+struct rx_provdisc_req_info {
+       u8      peerDevAddr[ETH_ALEN];          /* Peer device address */
+       u8      strconfig_method_desc_of_prov_disc_req[4];      /* description
+                       * for the config method located in the provisioning
+                       * discovery request frame. */
+};
+
+struct tx_nego_req_info {
+       u16     peer_channel_num[2];    /* The channel number. */
+       u8      peerDevAddr[ETH_ALEN];  /* Peer device address */
+       u8      benable;                /* This negotiation request frame is
+                                        * trigger to send or not */
+};
+
+struct group_id_info {
+       u8      go_device_addr[ ETH_ALEN ];     /* The GO's device address of
+                                                * this P2P group */
+       u8      ssid[ WLAN_SSID_MAXLEN ];       /* The SSID of this P2P group */
+};
+
+struct scan_limit_info {
+       u8      scan_op_ch_only;        /* When this flag is set, the driver
+                                        * should only scan the op. channel */
+       u8      operation_ch[2];        /* Store the op. chan of invitation */
+};
+
+struct wifidirect_info {
+       struct adapter *padapter;
+       struct timer_list find_phase_timer;
+       struct timer_list restore_p2p_state_timer;
+
+       /* Used to do the scanning. After confirming the peer is availalble,
+        * the driver transmits the P2P frame to peer. */
+       struct timer_list pre_tx_scan_timer;
+       struct timer_list reset_ch_sitesurvey;
+       struct timer_list reset_ch_sitesurvey2; /* Just for resetting the scan
+                                        * limit function by using p2p nego */
+       struct tx_provdisc_req_info     tx_prov_disc_info;
+       struct rx_provdisc_req_info rx_prov_disc_info;
+       struct tx_invite_req_info       invitereq_info;
+       /* Store the profile information of persistent group */
+       struct profile_info profileinfo[P2P_MAX_PERSISTENT_GROUP_NUM];
+       struct tx_invite_resp_info      inviteresp_info;
+       struct tx_nego_req_info nego_req_info;
+       /* Store the group id info when doing the group negot handshake. */
+       struct group_id_info groupid_info;
+       /* Used for get the limit scan channel from the Invitation procedure */
+       struct scan_limit_info rx_invitereq_info;
+       /* Used for get the limit scan chan from the P2P negotiation handshake*/
+       struct scan_limit_info p2p_info;
+       enum P2P_ROLE role;
+       enum P2P_STATE pre_p2p_state;
+       enum P2P_STATE p2p_state;
+       /* The device address should be the mac address of this device. */
+       u8 device_addr[ETH_ALEN];
+       u8 interface_addr[ETH_ALEN];
+       u8 social_chan[4];
+       u8 listen_channel;
+       u8 operating_channel;
+       u8 listen_dwell;        /* This value should be between 1 and 3 */
+       u8 support_rate[8];
+       u8 p2p_wildcard_ssid[P2P_WILDCARD_SSID_LEN];
+       u8 intent;      /* should only include the intent value. */
+       u8 p2p_peer_interface_addr[ETH_ALEN];
+       u8 p2p_peer_device_addr[ETH_ALEN];
+       u8 peer_intent; /* Included the intent value and tie breaker value. */
+       /* Device name for displaying on searching device screen */
+       u8 device_name[WPS_MAX_DEVICE_NAME_LEN];
+       u8 device_name_len;
+       u8 profileindex; /* Used to point to the index of profileinfo array */
+       u8 peer_operating_ch;
+       u8 find_phase_state_exchange_cnt;
+       /* The device password ID for group negotation */
+       u16 device_password_id_for_nego;
+       u8 negotiation_dialog_token;
+       /* SSID information for group negotitation */
+       u8 nego_ssid[WLAN_SSID_MAXLEN];
+       u8 nego_ssidlen;
+       u8 p2p_group_ssid[WLAN_SSID_MAXLEN];
+       u8 p2p_group_ssid_len;
+       /* Flag to know if the persistent function should be supported or not.*/
+       u8 persistent_supported;
+       /* In the Sigma test, the Sigma will provide this enable from the
+        * sta_set_p2p CAPI. */
+       /*      0: disable */
+       /*      1: enable */
+       u8 session_available;   /* Flag to set the WFD session available to
+                                * enable or disable "by Sigma" */
+       /* In the Sigma test, the Sigma will disable the session available
+        * by using the sta_preset CAPI. */
+       /*      0: disable */
+       /*      1: enable */
+       u8 wfd_tdls_enable; /* Flag to enable or disable the TDLS by WFD Sigma*/
+                           /* 0: disable */
+                           /*  1: enable */
+       u8 wfd_tdls_weaksec; /* Flag to enable or disable the weak security
+                             * function for TDLS by WFD Sigma */
+                            /* 0: disable */
+                            /* In this case, the driver can't issue the tdsl
+                             * setup request frame. */
+                            /* 1: enable */
+                            /* In this case, the driver can issue the tdls
+                             * setup request frame */
+                            /* even the current security is weak security. */
+
+       /* This field will store the WPS value (PIN value or PBC) that UI had
+        * got from the user. */
+       enum    P2P_WPSINFO ui_got_wps_info;
+       u16 supported_wps_cm;   /* This field describes the WPS config method
+                                * which this driver supported. */
+                               /* The value should be the combination of config
+                                * method defined in page104 of WPS v2.0 spec.*/
+       /* This field will contain the length of body of P2P Channel List
+        * attribute of group negotiation response frame. */
+       uint channel_list_attr_len;
+       /* This field will contain the body of P2P Channel List attribute of
+        * group negotitation response frame. */
+       /* We will use the channel_cnt and channel_list fields when constructing
+        * the group negotiation confirm frame. */
+       u8 channel_list_attr[100];
+       enum P2P_PS_MODE p2p_ps_mode; /*  indicate p2p ps mode */
+       enum P2P_PS_STATE p2p_ps_state; /*  indicate p2p ps state */
+       u8 noa_index; /*  Identifies and instance of Notice of Absence timing. */
+       u8 ctwindow; /*  Client traffic window. A period of time in TU after TBTT. */
+       u8 opp_ps; /*  opportunistic power save. */
+       u8 noa_num; /*  number of NoA descriptor in P2P IE. */
+       u8 noa_count[P2P_MAX_NOA_NUM]; /*  Count for owner, Type of client. */
+       /* Max duration for owner, preferred or min acceptable duration for
+        * client. */
+       u32 noa_duration[P2P_MAX_NOA_NUM];
+       /* Length of interval for owner, preferred or max acceptable interval
+        * of client. */
+       u32 noa_interval[P2P_MAX_NOA_NUM];
+       /* schedule expressed in terms of the lower 4 bytes of the TSF timer. */
+       u32 noa_start_time[P2P_MAX_NOA_NUM];
+};
+
+struct tdls_ss_record {        /* signal strength record */
+       u8 macaddr[ETH_ALEN];
+       u8 RxPWDBAll;
+       u8 is_tdls_sta; /*  true: direct link sta, false: else */
+};
+
+struct tdls_info {
+       u8 ap_prohibited;
+       uint setup_state;
+       u8 sta_cnt;
+       u8 sta_maximum; /*  1:tdls sta is equal (NUM_STA-1), reach max direct link number; 0: else; */
+       struct tdls_ss_record   ss_record;
+       u8 macid_index; /* macid entry that is ready to write */
+       u8 clear_cam;   /* cam entry that is trying to clear, using it in direct link teardown */
+       u8 ch_sensing;
+       u8 cur_channel;
+       u8 candidate_ch;
+       u8 collect_pkt_num[MAX_CHANNEL_NUM];
+       spinlock_t cmd_lock;
+       spinlock_t hdl_lock;
+       u8 watchdog_count;
+       u8 dev_discovered;              /* WFD_TDLS: for sigma test */
+       u8 enable;
+};
+
+struct mlme_priv {
+       spinlock_t lock;
+       int fw_state;   /* shall we protect this variable? maybe not necessarily... */
+       u8 bScanInProcess;
+       u8 to_join; /* flag */
+       u8 to_roaming; /*  roaming trying times */
+
+       u8 *nic_hdl;
+
+       u8 not_indic_disco;
+       struct list_head *pscanned;
+       struct __queue free_bss_pool;
+       struct __queue scanned_queue;
+       u8 *free_bss_buf;
+       u32     num_of_scanned;
+
+       struct ndis_802_11_ssid assoc_ssid;
+       u8      assoc_bssid[6];
+
+       struct wlan_network     cur_network;
+
+       u32     scan_interval;
+
+       struct timer_list assoc_timer;
+
+       uint assoc_by_bssid;
+       uint assoc_by_rssi;
+
+       struct timer_list scan_to_timer; /*  driver itself handles scan_timeout status. */
+       u32 scan_start_time; /*  used to evaluate the time spent in scanning */
+
+       struct qos_priv qospriv;
+
+       /* Number of non-HT AP/stations */
+       int num_sta_no_ht;
+
+       /* Number of HT AP/stations 20 MHz */
+       /* int num_sta_ht_20mhz; */
+
+       int num_FortyMHzIntolerant;
+       struct ht_priv  htpriv;
+       struct rt_link_detect LinkDetectInfo;
+       struct timer_list dynamic_chk_timer; /* dynamic/periodic check timer */
+
+       u8      key_mask; /* use for ips to set wep key after ips_leave */
+       u8      acm_mask; /*  for wmm acm mask */
+       u8      ChannelPlan;
+       enum rt_scan_type scan_mode; /*  active: 1, passive: 0 */
+
+       /* u8 probereq_wpsie[MAX_WPS_IE_LEN];added in probe req */
+       /* int probereq_wpsie_len; */
+       u8 *wps_probe_req_ie;
+       u32 wps_probe_req_ie_len;
+
+       u8 *assoc_req;
+       u32 assoc_req_len;
+       u8 *assoc_rsp;
+       u32 assoc_rsp_len;
+
+#if defined (CONFIG_88EU_AP_MODE)
+       /* Number of associated Non-ERP stations (i.e., stations using 802.11b
+        * in 802.11g BSS) */
+       int num_sta_non_erp;
+
+       /* Number of associated stations that do not support Short Slot Time */
+       int num_sta_no_short_slot_time;
+
+       /* Number of associated stations that do not support Short Preamble */
+       int num_sta_no_short_preamble;
+
+       int olbc; /* Overlapping Legacy BSS Condition */
+
+       /* Number of HT assoc sta that do not support greenfield */
+       int num_sta_ht_no_gf;
+
+       /* Number of associated non-HT stations */
+       /* int num_sta_no_ht; */
+
+       /* Number of HT associated stations 20 MHz */
+       int num_sta_ht_20mhz;
+
+       /* Overlapping BSS information */
+       int olbc_ht;
+
+       u16 ht_op_mode;
+
+       u8 *wps_beacon_ie;
+       /* u8 *wps_probe_req_ie; */
+       u8 *wps_probe_resp_ie;
+       u8 *wps_assoc_resp_ie;
+
+       u32 wps_beacon_ie_len;
+       u32 wps_probe_resp_ie_len;
+       u32 wps_assoc_resp_ie_len;
+
+       u8 *p2p_beacon_ie;
+       u8 *p2p_probe_req_ie;
+       u8 *p2p_probe_resp_ie;
+       u8 *p2p_go_probe_resp_ie; /* for GO */
+       u8 *p2p_assoc_req_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;
+       spinlock_t bcn_update_lock;
+       u8              update_bcn;
+#endif /* if defined (CONFIG_88EU_AP_MODE) */
+};
+
+#ifdef CONFIG_88EU_AP_MODE
+
+struct hostapd_priv {
+       struct adapter *padapter;
+};
+
+int hostapd_mode_init(struct adapter *padapter);
+void hostapd_mode_unload(struct adapter *padapter);
+#endif
+
+extern unsigned char WPA_TKIP_CIPHER[4];
+extern unsigned char RSN_TKIP_CIPHER[4];
+extern unsigned char REALTEK_96B_IE[];
+extern unsigned char   MCS_rate_2R[16];
+extern unsigned char   MCS_rate_1R[16];
+
+void rtw_joinbss_event_prehandle(struct adapter *adapter, u8 *pbuf);
+void rtw_survey_event_callback(struct adapter *adapter, u8 *pbuf);
+void rtw_surveydone_event_callback(struct adapter *adapter, u8 *pbuf);
+void rtw_joinbss_event_callback(struct adapter *adapter, u8 *pbuf);
+void rtw_stassoc_event_callback(struct adapter *adapter, u8 *pbuf);
+void rtw_stadel_event_callback(struct adapter *adapter, u8 *pbuf);
+void rtw_atimdone_event_callback(struct adapter *adapter, u8 *pbuf);
+void rtw_cpwm_event_callback(struct adapter *adapter, u8 *pbuf);
+void indicate_wx_scan_complete_event(struct adapter *padapter);
+void rtw_indicate_wx_assoc_event(struct adapter *padapter);
+void rtw_indicate_wx_disassoc_event(struct adapter *padapter);
+int event_thread(void *context);
+void rtw_join_timeout_handler(void *FunctionContext);
+void _rtw_scan_timeout_handler(void *FunctionContext);
+void rtw_free_network_queue(struct adapter *adapter, u8 isfreeall);
+int rtw_init_mlme_priv(struct adapter *adapter);
+void rtw_free_mlme_priv (struct mlme_priv *pmlmepriv);
+int rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv);
+int rtw_set_key(struct adapter *adapter, struct security_priv *psecuritypriv,
+               int keyid, u8 set_tx);
+int rtw_set_auth(struct adapter *adapter, struct security_priv *psecuritypriv);
+
+static inline u8 *get_bssid(struct mlme_priv *pmlmepriv)
+{      /* if sta_mode:pmlmepriv->cur_network.network.MacAddress=> bssid */
+       /*  if adhoc_mode:pmlmepriv->cur_network.network.MacAddress=> ibss mac address */
+       return pmlmepriv->cur_network.network.MacAddress;
+}
+
+static inline int check_fwstate(struct mlme_priv *pmlmepriv, int state)
+{
+       if (pmlmepriv->fw_state & state)
+               return true;
+
+       return false;
+}
+
+static inline int 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:#### (!!!!)
+ * MUST TAKE CARE THAT BEFORE CALLING THIS FUNC, YOU SHOULD HAVE LOCKED pmlmepriv->lock
+ */
+static inline void set_fwstate(struct mlme_priv *pmlmepriv, int state)
+{
+       pmlmepriv->fw_state |= state;
+       /* FOR HW integration */
+       if (_FW_UNDER_SURVEY==state)
+               pmlmepriv->bScanInProcess = true;
+}
+
+static inline void _clr_fwstate_(struct mlme_priv *pmlmepriv, int state)
+{
+       pmlmepriv->fw_state &= ~state;
+       /* FOR HW integration */
+       if (_FW_UNDER_SURVEY==state)
+               pmlmepriv->bScanInProcess = false;
+}
+
+/*
+ * No Limit on the calling context,
+ * therefore set it to be the critical section...
+ */
+static inline void clr_fwstate(struct mlme_priv *pmlmepriv, int state)
+{
+       unsigned long irql;
+
+       _enter_critical_bh(&pmlmepriv->lock, &irql);
+       if (check_fwstate(pmlmepriv, state) == true)
+               pmlmepriv->fw_state ^= state;
+       _exit_critical_bh(&pmlmepriv->lock, &irql);
+}
+
+static inline void clr_fwstate_ex(struct mlme_priv *pmlmepriv, int state)
+{
+       unsigned long irql;
+
+       _enter_critical_bh(&pmlmepriv->lock, &irql);
+       _clr_fwstate_(pmlmepriv, state);
+       _exit_critical_bh(&pmlmepriv->lock, &irql);
+}
+
+static inline void up_scanned_network(struct mlme_priv *pmlmepriv)
+{
+       unsigned long irql;
+
+       _enter_critical_bh(&pmlmepriv->lock, &irql);
+       pmlmepriv->num_of_scanned++;
+       _exit_critical_bh(&pmlmepriv->lock, &irql);
+}
+
+static inline void down_scanned_network(struct mlme_priv *pmlmepriv)
+{
+       unsigned long irql;
+
+       _enter_critical_bh(&pmlmepriv->lock, &irql);
+       pmlmepriv->num_of_scanned--;
+       _exit_critical_bh(&pmlmepriv->lock, &irql);
+}
+
+static inline void set_scanned_network_val(struct mlme_priv *pmlmepriv, int val)
+{
+       unsigned long irql;
+
+       _enter_critical_bh(&pmlmepriv->lock, &irql);
+       pmlmepriv->num_of_scanned = val;
+       _exit_critical_bh(&pmlmepriv->lock, &irql);
+}
+
+u16 rtw_get_capability(struct wlan_bssid_ex *bss);
+void rtw_update_scanned_network(struct adapter *adapter,
+                               struct wlan_bssid_ex *target);
+void rtw_disconnect_hdl_under_linked(struct adapter *adapter,
+                                    struct sta_info *psta, u8 free_assoc);
+void rtw_generate_random_ibss(u8 *pibss);
+struct wlan_network *rtw_find_network(struct __queue *scanned_queue, u8 *addr);
+struct wlan_network *rtw_get_oldest_wlan_network(struct __queue *scanned_queue);
+
+void rtw_free_assoc_resources(struct adapter *adapter, int lock_scanned_queue);
+void rtw_indicate_disconnect(struct adapter *adapter);
+void rtw_indicate_connect(struct adapter *adapter);
+void rtw_indicate_scan_done( struct adapter *padapter, bool aborted);
+void rtw_scan_abort(struct adapter *adapter);
+
+int rtw_restruct_sec_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie,
+                       uint in_len);
+int rtw_restruct_wmm_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie,
+                       uint in_len, uint initial_out_len);
+void rtw_init_registrypriv_dev_network(struct adapter *adapter);
+
+void rtw_update_registrypriv_dev_network(struct adapter *adapter);
+
+void rtw_get_encrypt_decrypt_from_registrypriv(struct adapter *adapter);
+
+void _rtw_join_timeout_handler(struct adapter *adapter);
+void rtw_scan_timeout_handler(struct adapter *adapter);
+
+ void rtw_dynamic_check_timer_handlder(struct adapter *adapter);
+#define rtw_is_scan_deny(adapter) false
+#define rtw_clear_scan_deny(adapter) do {} while (0)
+#define rtw_set_scan_deny_timer_hdl(adapter) do {} while (0)
+#define rtw_set_scan_deny(adapter, ms) do {} while (0)
+
+
+int _rtw_init_mlme_priv(struct adapter *padapter);
+
+void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv);
+
+void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv);
+
+int _rtw_enqueue_network(struct __queue *queue, struct wlan_network *pnetwork);
+
+struct wlan_network *_rtw_dequeue_network(struct __queue *queue);
+
+ struct wlan_network *_rtw_alloc_network(struct mlme_priv *pmlmepriv);
+
+
+void _rtw_free_network(struct mlme_priv *pmlmepriv,
+                      struct wlan_network *pnetwork, u8 isfreeall);
+void _rtw_free_network_nolock(struct mlme_priv *pmlmepriv,
+                             struct wlan_network *pnetwork);
+
+
+struct wlan_network* _rtw_find_network(struct __queue *scanned_queue, u8 *addr);
+
+void _rtw_free_network_queue(struct adapter *padapter, u8 isfreeall);
+
+int rtw_if_up(struct adapter *padapter);
+
+
+u8 *rtw_get_capability_from_ie(u8 *ie);
+u8 *rtw_get_timestampe_from_ie(u8 *ie);
+u8 *rtw_get_beacon_interval_from_ie(u8 *ie);
+
+
+void rtw_joinbss_reset(struct adapter *padapter);
+
+unsigned int rtw_restructure_ht_ie(struct adapter *padapter, u8 *in_ie,
+                                  u8 *out_ie, uint in_len, uint *pout_len);
+void rtw_update_ht_cap(struct adapter *padapter, u8 *pie, uint ie_len);
+void rtw_issue_addbareq_cmd(struct adapter *padapter,
+                           struct xmit_frame *pxmitframe);
+
+int rtw_is_same_ibss(struct adapter *adapter, struct wlan_network *pnetwork);
+int is_same_network(struct wlan_bssid_ex *src, struct wlan_bssid_ex *dst);
+
+void rtw_roaming(struct adapter *padapter, struct wlan_network *tgt_network);
+void _rtw_roaming(struct adapter *padapter, struct wlan_network *tgt_network);
+
+void rtw_stassoc_hw_rpt(struct adapter *adapter,struct sta_info *psta);
+
+#endif /* __RTL871X_MLME_H_ */
diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h
new file mode 100644 (file)
index 0000000..a96b018
--- /dev/null
@@ -0,0 +1,877 @@
+/******************************************************************************
+ *
+ * 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 __RTW_MLME_EXT_H_
+#define __RTW_MLME_EXT_H_
+
+#include <osdep_service.h>
+#include <drv_types.h>
+#include <wlan_bssdef.h>
+
+
+/*     Commented by Albert 20101105 */
+/*     Increase the SURVEY_TO value from 100 to 150  ( 100ms to 150ms ) */
+/*     The Realtek 8188CE SoftAP will spend around 100ms to send the probe response after receiving the probe request. */
+/*     So, this driver tried to extend the dwell time for each scanning channel. */
+/*     This will increase the chance to receive the probe response from SoftAP. */
+
+#define SURVEY_TO              (100)
+#define REAUTH_TO              (300) /* 50) */
+#define REASSOC_TO             (300) /* 50) */
+/* define DISCONNECT_TO        (3000) */
+#define ADDBA_TO                       (2000)
+
+#define LINKED_TO (1) /* unit:2 sec, 1x2=2 sec */
+
+#define REAUTH_LIMIT   (4)
+#define REASSOC_LIMIT  (4)
+#define READDBA_LIMIT  (2)
+
+#define ROAMING_LIMIT  8
+
+#define        DYNAMIC_FUNC_DISABLE                    (0x0)
+
+/*  ====== ODM_ABILITY_E ======== */
+/*  BB ODM section BIT 0-15 */
+#define        DYNAMIC_BB_DIG                          BIT(0)
+#define        DYNAMIC_BB_RA_MASK                      BIT(1)
+#define        DYNAMIC_BB_DYNAMIC_TXPWR        BIT(2)
+#define        DYNAMIC_BB_BB_FA_CNT                    BIT(3)
+
+#define                DYNAMIC_BB_RSSI_MONITOR         BIT(4)
+#define                DYNAMIC_BB_CCK_PD                       BIT(5)
+#define                DYNAMIC_BB_ANT_DIV                      BIT(6)
+#define                DYNAMIC_BB_PWR_SAVE                     BIT(7)
+#define                DYNAMIC_BB_PWR_TRA                      BIT(8)
+#define                DYNAMIC_BB_RATE_ADAPTIVE                BIT(9)
+#define                DYNAMIC_BB_PATH_DIV                     BIT(10)
+#define                DYNAMIC_BB_PSD                          BIT(11)
+
+/*  MAC DM section BIT 16-23 */
+#define                DYNAMIC_MAC_EDCA_TURBO          BIT(16)
+#define                DYNAMIC_MAC_EARLY_MODE          BIT(17)
+
+/*  RF ODM section BIT 24-31 */
+#define                DYNAMIC_RF_TX_PWR_TRACK         BIT(24)
+#define                DYNAMIC_RF_RX_GAIN_TRACK                BIT(25)
+#define                DYNAMIC_RF_CALIBRATION          BIT(26)
+
+#define                DYNAMIC_ALL_FUNC_ENABLE         0xFFFFFFF
+
+#define _HW_STATE_NOLINK_              0x00
+#define _HW_STATE_ADHOC_               0x01
+#define _HW_STATE_STATION_     0x02
+#define _HW_STATE_AP_                  0x03
+
+
+#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
+
+
+extern unsigned char RTW_WPA_OUI[];
+extern unsigned char WMM_OUI[];
+extern unsigned char WPS_OUI[];
+extern unsigned char WFD_OUI[];
+extern unsigned char P2P_OUI[];
+
+extern unsigned char WMM_INFO_OUI[];
+extern unsigned char WMM_PARA_OUI[];
+
+/*  Channel Plan Type. */
+/*  Note: */
+/*     We just add new channel plan when the new channel plan is different
+ *      from any of the following channel plan. */
+/*     If you just wnat to customize the acitions(scan period or join actions)
+ *      about one of the channel plan, */
+/*     customize them in struct rt_channel_info in the RT_CHANNEL_LIST. */
+enum RT_CHANNEL_DOMAIN {
+       /*  old channel plan mapping =====  */
+       RT_CHANNEL_DOMAIN_FCC = 0x00,
+       RT_CHANNEL_DOMAIN_IC = 0x01,
+       RT_CHANNEL_DOMAIN_ETSI = 0x02,
+       RT_CHANNEL_DOMAIN_SPAIN = 0x03,
+       RT_CHANNEL_DOMAIN_FRANCE = 0x04,
+       RT_CHANNEL_DOMAIN_MKK = 0x05,
+       RT_CHANNEL_DOMAIN_MKK1 = 0x06,
+       RT_CHANNEL_DOMAIN_ISRAEL = 0x07,
+       RT_CHANNEL_DOMAIN_TELEC = 0x08,
+       RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN = 0x09,
+       RT_CHANNEL_DOMAIN_WORLD_WIDE_13 = 0x0A,
+       RT_CHANNEL_DOMAIN_TAIWAN = 0x0B,
+       RT_CHANNEL_DOMAIN_CHINA = 0x0C,
+       RT_CHANNEL_DOMAIN_SINGAPORE_INDIA_MEXICO = 0x0D,
+       RT_CHANNEL_DOMAIN_KOREA = 0x0E,
+       RT_CHANNEL_DOMAIN_TURKEY = 0x0F,
+       RT_CHANNEL_DOMAIN_JAPAN = 0x10,
+       RT_CHANNEL_DOMAIN_FCC_NO_DFS = 0x11,
+       RT_CHANNEL_DOMAIN_JAPAN_NO_DFS = 0x12,
+       RT_CHANNEL_DOMAIN_WORLD_WIDE_5G = 0x13,
+       RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS = 0x14,
+
+       /*  new channel plan mapping, (2GDOMAIN_5GDOMAIN) ===== */
+       RT_CHANNEL_DOMAIN_WORLD_NULL = 0x20,
+       RT_CHANNEL_DOMAIN_ETSI1_NULL = 0x21,
+       RT_CHANNEL_DOMAIN_FCC1_NULL = 0x22,
+       RT_CHANNEL_DOMAIN_MKK1_NULL = 0x23,
+       RT_CHANNEL_DOMAIN_ETSI2_NULL = 0x24,
+       RT_CHANNEL_DOMAIN_FCC1_FCC1 = 0x25,
+       RT_CHANNEL_DOMAIN_WORLD_ETSI1 = 0x26,
+       RT_CHANNEL_DOMAIN_MKK1_MKK1 = 0x27,
+       RT_CHANNEL_DOMAIN_WORLD_KCC1 = 0x28,
+       RT_CHANNEL_DOMAIN_WORLD_FCC2 = 0x29,
+       RT_CHANNEL_DOMAIN_WORLD_FCC3 = 0x30,
+       RT_CHANNEL_DOMAIN_WORLD_FCC4 = 0x31,
+       RT_CHANNEL_DOMAIN_WORLD_FCC5 = 0x32,
+       RT_CHANNEL_DOMAIN_WORLD_FCC6 = 0x33,
+       RT_CHANNEL_DOMAIN_FCC1_FCC7 = 0x34,
+       RT_CHANNEL_DOMAIN_WORLD_ETSI2 = 0x35,
+       RT_CHANNEL_DOMAIN_WORLD_ETSI3 = 0x36,
+       RT_CHANNEL_DOMAIN_MKK1_MKK2 = 0x37,
+       RT_CHANNEL_DOMAIN_MKK1_MKK3 = 0x38,
+       RT_CHANNEL_DOMAIN_FCC1_NCC1 = 0x39,
+       RT_CHANNEL_DOMAIN_FCC1_NCC2 = 0x40,
+       RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN_2G = 0x41,
+       /*  Add new channel plan above this line=============== */
+       RT_CHANNEL_DOMAIN_MAX,
+       RT_CHANNEL_DOMAIN_REALTEK_DEFINE = 0x7F,
+};
+
+enum RT_CHANNEL_DOMAIN_2G {
+       RT_CHANNEL_DOMAIN_2G_WORLD = 0x00,              /* Worldwide 13 */
+       RT_CHANNEL_DOMAIN_2G_ETSI1 = 0x01,              /* Europe */
+       RT_CHANNEL_DOMAIN_2G_FCC1 = 0x02,               /* US */
+       RT_CHANNEL_DOMAIN_2G_MKK1 = 0x03,               /* Japan */
+       RT_CHANNEL_DOMAIN_2G_ETSI2 = 0x04,              /* France */
+       RT_CHANNEL_DOMAIN_2G_NULL = 0x05,
+       /*  Add new channel plan above this line=============== */
+       RT_CHANNEL_DOMAIN_2G_MAX,
+};
+
+#define rtw_is_channel_plan_valid(chplan)                      \
+       (chplan < RT_CHANNEL_DOMAIN_MAX ||                      \
+        chplan == RT_CHANNEL_DOMAIN_REALTEK_DEFINE)
+
+struct rt_channel_plan {
+       unsigned char   Channel[MAX_CHANNEL_NUM];
+       unsigned char   Len;
+};
+
+struct rt_channel_plan_2g {
+       unsigned char   Channel[MAX_CHANNEL_NUM_2G];
+       unsigned char   Len;
+};
+
+struct rt_channel_plan_map {
+       unsigned char   Index2G;
+};
+
+enum Associated_AP {
+       atherosAP       = 0,
+       broadcomAP      = 1,
+       ciscoAP         = 2,
+       marvellAP       = 3,
+       ralinkAP        = 4,
+       realtekAP       = 5,
+       airgocapAP      = 6,
+       unknownAP       = 7,
+       maxAP,
+};
+
+enum HT_IOT_PEER {
+       HT_IOT_PEER_UNKNOWN             = 0,
+       HT_IOT_PEER_REALTEK             = 1,
+       HT_IOT_PEER_REALTEK_92SE        = 2,
+       HT_IOT_PEER_BROADCOM            = 3,
+       HT_IOT_PEER_RALINK              = 4,
+       HT_IOT_PEER_ATHEROS             = 5,
+       HT_IOT_PEER_CISCO               = 6,
+       HT_IOT_PEER_MERU                = 7,
+       HT_IOT_PEER_MARVELL             = 8,
+       HT_IOT_PEER_REALTEK_SOFTAP      = 9,/*  peer is RealTek SOFT_AP */
+       HT_IOT_PEER_SELF_SOFTAP         = 10, /*  Self is SoftAP */
+       HT_IOT_PEER_AIRGO               = 11,
+       HT_IOT_PEER_INTEL               = 12,
+       HT_IOT_PEER_RTK_APCLIENT        = 13,
+       HT_IOT_PEER_REALTEK_81XX        = 14,
+       HT_IOT_PEER_REALTEK_WOW         = 15,
+       HT_IOT_PEER_TENDA               = 16,
+       HT_IOT_PEER_MAX                 = 17
+};
+
+enum SCAN_STATE {
+       SCAN_DISABLE = 0,
+       SCAN_START = 1,
+       SCAN_TXNULL = 2,
+       SCAN_PROCESS = 3,
+       SCAN_COMPLETE = 4,
+       SCAN_STATE_MAX,
+};
+
+struct mlme_handler {
+       unsigned int   num;
+       char *str;
+       unsigned int (*func)(struct adapter *adapt, union recv_frame *frame);
+};
+
+struct action_handler {
+       unsigned int   num;
+       char* str;
+       unsigned int (*func)(struct adapter *adapt, union recv_frame *frame);
+};
+
+struct ss_res {
+       int     state;
+       int     bss_cnt;
+       int     channel_idx;
+       int     scan_mode;
+       u8 ssid_num;
+       u8 ch_num;
+       struct ndis_802_11_ssid ssid[RTW_SSID_SCAN_AMOUNT];
+       struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
+};
+
+/* define AP_MODE                              0x0C */
+/* define STATION_MODE 0x08 */
+/* define AD_HOC_MODE          0x04 */
+/* define NO_LINK_MODE 0x00 */
+
+#define WIFI_FW_NULL_STATE             _HW_STATE_NOLINK_
+#define        WIFI_FW_STATION_STATE           _HW_STATE_STATION_
+#define        WIFI_FW_AP_STATE                _HW_STATE_AP_
+#define        WIFI_FW_ADHOC_STATE             _HW_STATE_ADHOC_
+
+#define        WIFI_FW_AUTH_NULL               0x00000100
+#define        WIFI_FW_AUTH_STATE              0x00000200
+#define        WIFI_FW_AUTH_SUCCESS            0x00000400
+
+#define        WIFI_FW_ASSOC_STATE             0x00002000
+#define        WIFI_FW_ASSOC_SUCCESS           0x00004000
+
+#define        WIFI_FW_LINKING_STATE           (WIFI_FW_AUTH_NULL |            \
+                                       WIFI_FW_AUTH_STATE |            \
+                                       WIFI_FW_AUTH_SUCCESS |          \
+                                       WIFI_FW_ASSOC_STATE)
+
+struct FW_Sta_Info {
+       struct sta_info *psta;
+       u32     status;
+       u32     rx_pkt;
+       u32     retry;
+       unsigned char SupportedRates[NDIS_802_11_LENGTH_RATES_EX];
+};
+
+/*
+ * Usage:
+ * When one iface acted as AP mode and the other iface is STA mode and scanning,
+ * it should switch back to AP's operating channel periodically.
+ * Parameters info:
+ * When the driver scanned RTW_SCAN_NUM_OF_CH channels, it would switch back to
+ * AP's operating channel for
+ * RTW_STAY_AP_CH_MILLISECOND * SURVEY_TO milliseconds.
+ * Example:
+ * For chip supports 2.4G + 5GHz and AP mode is operating in channel 1,
+ * RTW_SCAN_NUM_OF_CH is 8, RTW_STAY_AP_CH_MS is 3 and SURVEY_TO is 100.
+ * When it's STA mode gets set_scan command,
+ * it would
+ * 1. Doing the scan on channel 1.2.3.4.5.6.7.8
+ * 2. Back to channel 1 for 300 milliseconds
+ * 3. Go through doing site survey on channel 9.10.11.36.40.44.48.52
+ * 4. Back to channel 1 for 300 milliseconds
+ * 5. ... and so on, till survey done.
+ */
+
+struct mlme_ext_info {
+       u32     state;
+       u32     reauth_count;
+       u32     reassoc_count;
+       u32     link_count;
+       u32     auth_seq;
+       u32     auth_algo;      /*  802.11 auth, could be open, shared, auto */
+       u32     authModeToggle;
+       u32     enc_algo;/* encrypt algorithm; */
+       u32     key_index;      /*  this is only valid for legacy wep,
+                                *  0~3 for key id. */
+       u32     iv;
+       u8      chg_txt[128];
+       u16     aid;
+       u16     bcn_interval;
+       u16     capability;
+       u8      assoc_AP_vendor;
+       u8      slotTime;
+       u8      preamble_mode;
+       u8      WMM_enable;
+       u8      ERP_enable;
+       u8      ERP_IE;
+       u8      HT_enable;
+       u8      HT_caps_enable;
+       u8      HT_info_enable;
+       u8      HT_protection;
+       u8      turboMode_cts2self;
+       u8      turboMode_rtsen;
+       u8      SM_PS;
+       u8      agg_enable_bitmap;
+       u8      ADDBA_retry_count;
+       u8      candidate_tid_bitmap;
+       u8      dialogToken;
+       /*  Accept ADDBA Request */
+       bool bAcceptAddbaReq;
+       u8      bwmode_updated;
+       u8      hidden_ssid_mode;
+
+       struct ADDBA_request    ADDBA_req;
+       struct WMM_para_element WMM_param;
+       struct HT_caps_element  HT_caps;
+       struct HT_info_element  HT_info;
+       struct wlan_bssid_ex    network;/* join network or bss_network,
+                                        * if in ap mode, it is the same
+                                        * as cur_network.network */
+       struct FW_Sta_Info      FW_sta_info[NUM_STA];
+};
+
+/*  The channel information about this channel including joining,
+ *  scanning, and power constraints. */
+struct rt_channel_info {
+       u8      ChannelNum;     /*  The channel number. */
+       enum rt_scan_type ScanType;     /*  Scan type such as passive
+                                        *  or active scan. */
+       u32     rx_count;
+};
+
+int rtw_ch_set_search_ch(struct rt_channel_info *ch_set, const u32 ch);
+
+/*  P2P_MAX_REG_CLASSES - Maximum number of regulatory classes */
+#define P2P_MAX_REG_CLASSES 10
+
+/*  P2P_MAX_REG_CLASS_CHANNELS - Maximum number of chan per regulatory class */
+#define P2P_MAX_REG_CLASS_CHANNELS 20
+
+/*   struct p2p_channels - List of supported channels */
+struct p2p_channels {
+       /*  struct p2p_reg_class - Supported regulatory class */
+       struct p2p_reg_class {
+               /*  reg_class - Regulatory class (IEEE 802.11-2007, Annex J) */
+               u8 reg_class;
+
+               /*  channel - Supported channels */
+               u8 channel[P2P_MAX_REG_CLASS_CHANNELS];
+
+               /*  channels - Number of channel entries in use */
+               size_t channels;
+       } reg_class[P2P_MAX_REG_CLASSES];
+
+       /*  reg_classes - Number of reg_class entries in use */
+       size_t reg_classes;
+};
+
+struct p2p_oper_class_map {
+       enum hw_mode {IEEE80211G} mode;
+       u8 op_class;
+       u8 min_chan;
+       u8 max_chan;
+       u8 inc;
+       enum {BW20, BW40PLUS, BW40MINUS} bw;
+};
+
+struct mlme_ext_priv {
+       struct adapter  *padapter;
+       u8      mlmeext_init;
+       ATOMIC_T        event_seq;
+       u16     mgnt_seq;
+
+       unsigned char   cur_channel;
+       unsigned char   cur_bwmode;
+       unsigned char   cur_ch_offset;/* PRIME_CHNL_OFFSET */
+       unsigned char   cur_wireless_mode;      /*  NETWORK_TYPE */
+
+       unsigned char   oper_channel; /* saved chan info when call
+                                      * set_channel_bw */
+       unsigned char   oper_bwmode;
+       unsigned char   oper_ch_offset;/* PRIME_CHNL_OFFSET */
+
+       unsigned char   max_chan_nums;
+       struct rt_channel_info channel_set[MAX_CHANNEL_NUM];
+       struct p2p_channels channel_list;
+       unsigned char   basicrate[NumRates];
+       unsigned char   datarate[NumRates];
+
+       struct ss_res           sitesurvey_res;
+       struct mlme_ext_info    mlmext_info;/* for sta/adhoc mode, including
+                                            * current scan/connecting/connected
+                                            * related info. For ap mode,
+                                            * network includes ap's cap_info*/
+       struct timer_list survey_timer;
+       struct timer_list link_timer;
+       u16     chan_scan_time;
+
+       u8      scan_abort;
+       u8      tx_rate; /*  TXRATE when USERATE is set. */
+
+       u32     retry; /* retry for issue probereq */
+
+       u64 TSFValue;
+
+#ifdef CONFIG_88EU_AP_MODE
+       unsigned char bstart_bss;
+#endif
+       u8 update_channel_plan_by_ap_done;
+       /* recv_decache check for Action_public frame */
+       u8 action_public_dialog_token;
+       u16      action_public_rxseq;
+       u8 active_keep_alive_check;
+};
+
+int init_mlme_ext_priv(struct adapter *adapter);
+int init_hw_mlme_ext(struct adapter *padapter);
+void free_mlme_ext_priv (struct mlme_ext_priv *pmlmeext);
+extern void init_mlme_ext_timer(struct adapter *padapter);
+extern void init_addba_retry_timer(struct adapter *adapt, struct sta_info *sta);
+extern struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv);
+
+unsigned char networktype_to_raid(unsigned char network_type);
+u8 judge_network_type(struct adapter *padapter, unsigned char *rate, int len);
+void get_rate_set(struct adapter *padapter, unsigned char *pbssrate, int *len);
+void UpdateBrateTbl(struct adapter *padapter, u8 *mBratesOS);
+void UpdateBrateTblForSoftAP(u8 *bssrateset, u32 bssratelen);
+
+void Save_DM_Func_Flag(struct adapter *padapter);
+void Restore_DM_Func_Flag(struct adapter *padapter);
+void Switch_DM_Func(struct adapter *padapter, u32 mode, u8 enable);
+
+void Set_MSR(struct adapter *padapter, u8 type);
+
+u8 rtw_get_oper_ch(struct adapter *adapter);
+void rtw_set_oper_ch(struct adapter *adapter, u8 ch);
+u8 rtw_get_oper_bw(struct adapter *adapter);
+void rtw_set_oper_bw(struct adapter *adapter, u8 bw);
+u8 rtw_get_oper_choffset(struct adapter *adapter);
+void rtw_set_oper_choffset(struct adapter *adapter, u8 offset);
+
+void set_channel_bwmode(struct adapter *padapter, unsigned char channel,
+                       unsigned char channel_offset, unsigned short bwmode);
+void SelectChannel(struct adapter *padapter, unsigned char channel);
+void SetBWMode(struct adapter *padapter, unsigned short bwmode,
+              unsigned char channel_offset);
+
+unsigned int decide_wait_for_beacon_timeout(unsigned int bcn_interval);
+
+void write_cam(struct adapter *padapter, u8 entry, u16 ctrl, u8 *mac, u8 *key);
+void clear_cam_entry(struct adapter *padapter, u8 entry);
+
+void invalidate_cam_all(struct adapter *padapter);
+void CAM_empty_entry(struct adapter * Adapter, u8 ucIndex);
+
+int allocate_fw_sta_entry(struct adapter *padapter);
+void flush_all_cam_entry(struct adapter *padapter);
+
+void site_survey(struct adapter *padapter);
+u8 collect_bss_info(struct adapter *padapter, union recv_frame *precv_frame,
+                   struct wlan_bssid_ex *bssid);
+void update_network(struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src,
+                   struct adapter *adapter, bool update_ie);
+
+int get_bsstype(unsigned short capability);
+u8 *get_my_bssid(struct wlan_bssid_ex *pnetwork);
+u16 get_beacon_interval(struct wlan_bssid_ex *bss);
+
+int is_client_associated_to_ap(struct adapter *padapter);
+int is_client_associated_to_ibss(struct adapter *padapter);
+int is_IBSS_empty(struct adapter *padapter);
+
+unsigned char check_assoc_AP(u8 *pframe, uint len);
+
+int WMM_param_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE);
+void WMMOnAssocRsp(struct adapter *padapter);
+
+void HT_caps_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE);
+void HT_info_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE);
+void HTOnAssocRsp(struct adapter *padapter);
+
+void ERP_IE_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE);
+void VCS_update(struct adapter *padapter, struct sta_info *psta);
+
+void update_beacon_info(struct adapter *padapter, u8 *pframe, uint len,
+                       struct sta_info *psta);
+int rtw_check_bcn_info(struct adapter  *Adapter, u8 *pframe, u32 packet_len);
+void update_IOT_info(struct adapter *padapter);
+void update_capinfo(struct adapter *adapter, u16 updatecap);
+void update_wireless_mode(struct adapter *padapter);
+void update_tx_basic_rate(struct adapter *padapter, u8 modulation);
+void update_bmc_sta_support_rate(struct adapter *padapter, u32 mac_id);
+int update_sta_support_rate(struct adapter *padapter, u8 *pvar_ie,
+                           uint var_ie_len, int cam_idx);
+
+/* for sta/adhoc mode */
+void update_sta_info(struct adapter *padapter, struct sta_info *psta);
+unsigned int update_basic_rate(unsigned char *ptn, unsigned int ptn_sz);
+unsigned int update_supported_rate(unsigned char *ptn, unsigned int ptn_sz);
+unsigned int update_MSC_rate(struct HT_caps_element *pHT_caps);
+void Update_RA_Entry(struct adapter *padapter, u32 mac_id);
+void set_sta_rate(struct adapter *padapter, struct sta_info *psta);
+
+unsigned int receive_disconnect(struct adapter *padapter,
+                               unsigned char *macaddr, unsigned short reason);
+
+unsigned char get_highest_rate_idx(u32 mask);
+int support_short_GI(struct adapter *padapter, struct HT_caps_element *caps);
+unsigned int is_ap_in_tkip(struct adapter *padapter);
+unsigned int is_ap_in_wep(struct adapter *padapter);
+unsigned int should_forbid_n_rate(struct adapter *padapter);
+
+void report_join_res(struct adapter *padapter, int res);
+void report_survey_event(struct adapter *padapter, union recv_frame *precv_frame);
+void report_surveydone_event(struct adapter *padapter);
+void report_del_sta_event(struct adapter *padapter,
+                         unsigned char *addr, unsigned short reason);
+void report_add_sta_event(struct adapter *padapter, unsigned char* addr,
+                         int cam_idx);
+
+void beacon_timing_control(struct adapter *padapter);
+extern u8 set_tx_beacon_cmd(struct adapter*padapter);
+unsigned int setup_beacon_frame(struct adapter *padapter,
+                               unsigned char *beacon_frame);
+void update_mgnt_tx_rate(struct adapter *padapter, u8 rate);
+void update_mgntframe_attrib(struct adapter *padapter,
+                            struct pkt_attrib *pattrib);
+void dump_mgntframe(struct adapter *padapter, struct xmit_frame *pmgntframe);
+s32 dump_mgntframe_and_wait(struct adapter *padapter,
+                           struct xmit_frame *pmgntframe, int timeout_ms);
+s32 dump_mgntframe_and_wait_ack(struct adapter *padapter,
+                               struct xmit_frame *pmgntframe);
+
+#ifdef CONFIG_88EU_P2P
+void issue_probersp_p2p(struct adapter *padapter, unsigned char *da);
+void issue_p2p_provision_request(struct adapter *padapter, u8 *pssid,
+                                u8 ussidlen, u8 *pdev_raddr);
+void issue_p2p_GO_request(struct adapter *padapter, u8 *raddr);
+void issue_probereq_p2p(struct adapter *padapter, u8 *da);
+int issue_probereq_p2p_ex(struct adapter *adapter, u8 *da, int try_cnt,
+                         int wait_ms);
+void issue_p2p_invitation_response(struct adapter *padapter, u8 *raddr,
+                                  u8 dialogToken, u8 success);
+void issue_p2p_invitation_request(struct adapter *padapter, u8* raddr);
+#endif /* CONFIG_88EU_P2P */
+void issue_beacon(struct adapter *padapter, int timeout_ms);
+void issue_probersp(struct adapter *padapter, unsigned char *da,
+                   u8 is_valid_p2p_probereq);
+void issue_assocreq(struct adapter *padapter);
+void issue_asocrsp(struct adapter *padapter, unsigned short status,
+                  struct sta_info *pstat, int pkt_type);
+void issue_auth(struct adapter *padapter, struct sta_info *psta,
+               unsigned short status);
+void issue_probereq(struct adapter *padapter, struct ndis_802_11_ssid *pssid,
+                   u8 *da);
+s32 issue_probereq_ex(struct adapter *adapter, struct ndis_802_11_ssid *pssid,
+                     u8* da, int try_cnt, int wait_ms);
+int issue_nulldata(struct adapter *padapter, unsigned char *da,
+                  unsigned int power_mode, int try_cnt, int wait_ms);
+int issue_qos_nulldata(struct adapter *padapter, unsigned char *da,
+                      u16 tid, int try_cnt, int wait_ms);
+int issue_deauth(struct adapter *padapter, unsigned char *da,
+                unsigned short reason);
+int issue_deauth_ex(struct adapter *padapter, u8 *da, unsigned short reason,
+                   int try_cnt, int wait_ms);
+void issue_action_spct_ch_switch(struct adapter *padapter, u8 *ra, u8 new_ch,
+                                u8 ch_offset);
+void issue_action_BA(struct adapter *padapter, unsigned char *raddr,
+                    unsigned char action, unsigned short status);
+unsigned int send_delba(struct adapter *padapter, u8 initiator, u8 *addr);
+unsigned int send_beacon(struct adapter *padapter);
+
+void start_clnt_assoc(struct adapter *padapter);
+void start_clnt_auth(struct adapter *padapter);
+void start_clnt_join(struct adapter *padapter);
+void start_create_ibss(struct adapter *padapter);
+
+unsigned int OnAssocReq(struct adapter *padapter,
+                       union recv_frame *precv_frame);
+unsigned int OnAssocRsp(struct adapter *padapter,
+                       union recv_frame *precv_frame);
+unsigned int OnProbeReq(struct adapter *padapter,
+                       union recv_frame *precv_frame);
+unsigned int OnProbeRsp(struct adapter *padapter,
+                       union recv_frame *precv_frame);
+unsigned int DoReserved(struct adapter *padapter,
+                       union recv_frame *precv_frame);
+unsigned int OnBeacon(struct adapter *padapter,
+                     union recv_frame *precv_frame);
+unsigned int OnAtim(struct adapter *padapter,
+                   union recv_frame *precv_frame);
+unsigned int OnDisassoc(struct adapter *padapter,
+                       union recv_frame *precv_frame);
+unsigned int OnAuth(struct adapter *padapter,
+                   union recv_frame *precv_frame);
+unsigned int OnAuthClient(struct adapter *padapter,
+                         union recv_frame *precv_frame);
+unsigned int OnDeAuth(struct adapter *padapter,
+                     union recv_frame *precv_frame);
+unsigned int OnAction(struct adapter *padapter,
+                     union recv_frame *precv_frame);
+
+unsigned int on_action_spct(struct adapter *padapter,
+                           union recv_frame *precv_frame);
+unsigned int OnAction_qos(struct adapter *padapter,
+                         union recv_frame *precv_frame);
+unsigned int OnAction_dls(struct adapter *padapter,
+                         union recv_frame *precv_frame);
+unsigned int OnAction_back(struct adapter *padapter,
+                          union recv_frame *precv_frame);
+unsigned int on_action_public(struct adapter *padapter,
+                             union recv_frame *precv_frame);
+unsigned int OnAction_ht(struct adapter *padapter,
+                        union recv_frame *precv_frame);
+unsigned int OnAction_wmm(struct adapter *padapter,
+                         union recv_frame *precv_frame);
+unsigned int OnAction_p2p(struct adapter *padapter,
+                         union recv_frame *precv_frame);
+
+void mlmeext_joinbss_event_callback(struct adapter *padapter, int join_res);
+void mlmeext_sta_del_event_callback(struct adapter *padapter);
+void mlmeext_sta_add_event_callback(struct adapter *padapter,
+                                   struct sta_info *psta);
+
+void linked_status_chk(struct adapter *padapter);
+
+void survey_timer_hdl (struct adapter *padapter);
+void link_timer_hdl (struct adapter *padapter);
+void addba_timer_hdl(struct sta_info *psta);
+
+#define set_survey_timer(mlmeext, ms) \
+       do { \
+               _set_timer(&(mlmeext)->survey_timer, (ms)); \
+       } while (0)
+
+#define set_link_timer(mlmeext, ms) \
+       do { \
+               _set_timer(&(mlmeext)->link_timer, (ms)); \
+       } while (0)
+
+int cckrates_included(unsigned char *rate, int ratelen);
+int cckratesonly_included(unsigned char *rate, int ratelen);
+
+void process_addba_req(struct adapter *padapter, u8 *paddba_req, u8 *addr);
+
+void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len);
+void correct_TSF(struct adapter *padapter, struct mlme_ext_priv *pmlmeext);
+
+struct cmd_hdl {
+       uint    parmsize;
+       u8 (*h2cfuns)(struct adapter  *padapter, u8 *pbuf);
+};
+
+u8 read_macreg_hdl(struct adapter *padapter, u8 *pbuf);
+u8 write_macreg_hdl(struct adapter *padapter, u8 *pbuf);
+u8 read_bbreg_hdl(struct adapter *padapter, u8 *pbuf);
+u8 write_bbreg_hdl(struct adapter *padapter, u8 *pbuf);
+u8 read_rfreg_hdl(struct adapter *padapter, u8 *pbuf);
+u8 write_rfreg_hdl(struct adapter *padapter, u8 *pbuf);
+u8 NULL_hdl(struct adapter *padapter, u8 *pbuf);
+u8 join_cmd_hdl(struct adapter *padapter, u8 *pbuf);
+u8 disconnect_hdl(struct adapter *padapter, u8 *pbuf);
+u8 createbss_hdl(struct adapter *padapter, u8 *pbuf);
+u8 setopmode_hdl(struct adapter *padapter, u8 *pbuf);
+u8 sitesurvey_cmd_hdl(struct adapter *padapter, u8 *pbuf);
+u8 setauth_hdl(struct adapter *padapter, u8 *pbuf);
+u8 setkey_hdl(struct adapter *padapter, u8 *pbuf);
+u8 set_stakey_hdl(struct adapter *padapter, u8 *pbuf);
+u8 set_assocsta_hdl(struct adapter *padapter, u8 *pbuf);
+u8 del_assocsta_hdl(struct adapter *padapter, u8 *pbuf);
+u8 add_ba_hdl(struct adapter *padapter, unsigned char *pbuf);
+
+u8 mlme_evt_hdl(struct adapter *padapter, unsigned char *pbuf);
+u8 h2c_msg_hdl(struct adapter *padapter, unsigned char *pbuf);
+u8 tx_beacon_hdl(struct adapter *padapter, unsigned char *pbuf);
+u8 set_ch_hdl(struct adapter *padapter, u8 *pbuf);
+u8 set_chplan_hdl(struct adapter *padapter, unsigned char *pbuf);
+u8 led_blink_hdl(struct adapter *padapter, unsigned char *pbuf);
+/* Handling DFS channel switch announcement ie. */
+u8 set_csa_hdl(struct adapter *padapter, unsigned char *pbuf);
+u8 tdls_hdl(struct adapter *padapter, unsigned char *pbuf);
+
+#define GEN_DRV_CMD_HANDLER(size, cmd) {size, &cmd ## _hdl},
+#define GEN_MLME_EXT_HANDLER(size, cmd)        {size, cmd},
+
+#ifdef _RTW_CMD_C_
+
+static struct cmd_hdl wlancmds[] = {
+       GEN_DRV_CMD_HANDLER(0, NULL) /*0*/
+       GEN_DRV_CMD_HANDLER(0, NULL)
+       GEN_DRV_CMD_HANDLER(0, NULL)
+       GEN_DRV_CMD_HANDLER(0, NULL)
+       GEN_DRV_CMD_HANDLER(0, NULL)
+       GEN_DRV_CMD_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL) /*10*/
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(sizeof (struct joinbss_parm), join_cmd_hdl) /*14*/
+       GEN_MLME_EXT_HANDLER(sizeof (struct disconnect_parm), disconnect_hdl)
+       GEN_MLME_EXT_HANDLER(sizeof (struct createbss_parm), createbss_hdl)
+       GEN_MLME_EXT_HANDLER(sizeof (struct setopmode_parm), setopmode_hdl)
+       GEN_MLME_EXT_HANDLER(sizeof (struct sitesurvey_parm),
+                            sitesurvey_cmd_hdl) /*18*/
+       GEN_MLME_EXT_HANDLER(sizeof (struct setauth_parm), setauth_hdl)
+       GEN_MLME_EXT_HANDLER(sizeof (struct setkey_parm), setkey_hdl) /*20*/
+       GEN_MLME_EXT_HANDLER(sizeof (struct set_stakey_parm), set_stakey_hdl)
+       GEN_MLME_EXT_HANDLER(sizeof (struct set_assocsta_parm), NULL)
+       GEN_MLME_EXT_HANDLER(sizeof (struct del_assocsta_parm), NULL)
+       GEN_MLME_EXT_HANDLER(sizeof (struct setstapwrstate_parm), NULL)
+       GEN_MLME_EXT_HANDLER(sizeof (struct setbasicrate_parm), NULL)
+       GEN_MLME_EXT_HANDLER(sizeof (struct getbasicrate_parm), NULL)
+       GEN_MLME_EXT_HANDLER(sizeof (struct setdatarate_parm), NULL)
+       GEN_MLME_EXT_HANDLER(sizeof (struct getdatarate_parm), NULL)
+       GEN_MLME_EXT_HANDLER(sizeof (struct setphyinfo_parm), NULL)
+       GEN_MLME_EXT_HANDLER(sizeof (struct getphyinfo_parm), NULL)  /*30*/
+       GEN_MLME_EXT_HANDLER(sizeof (struct setphy_parm), NULL)
+       GEN_MLME_EXT_HANDLER(sizeof (struct getphy_parm), NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)   /*40*/
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(sizeof(struct addBaReq_parm), add_ba_hdl)
+       GEN_MLME_EXT_HANDLER(sizeof(struct set_ch_parm), set_ch_hdl) /* 46 */
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL) /*50*/
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(0, NULL)
+       GEN_MLME_EXT_HANDLER(sizeof(struct Tx_Beacon_param),
+                            tx_beacon_hdl) /*55*/
+
+       GEN_MLME_EXT_HANDLER(0, mlme_evt_hdl) /*56*/
+       GEN_MLME_EXT_HANDLER(0, rtw_drvextra_cmd_hdl) /*57*/
+
+       GEN_MLME_EXT_HANDLER(0, h2c_msg_hdl) /*58*/
+       GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param),
+                            set_chplan_hdl) /*59*/
+       GEN_MLME_EXT_HANDLER(sizeof(struct LedBlink_param),
+                            led_blink_hdl) /*60*/
+
+       GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelSwitch_param),
+                            set_csa_hdl) /*61*/
+       GEN_MLME_EXT_HANDLER(sizeof(struct TDLSoption_param),
+                            tdls_hdl) /*62*/
+};
+
+#endif
+
+struct C2HEvent_Header {
+#ifdef __LITTLE_ENDIAN
+       unsigned int len:16;
+       unsigned int ID:8;
+       unsigned int seq:8;
+#elif defined(__BIG_ENDIAN)
+       unsigned int seq:8;
+       unsigned int ID:8;
+       unsigned int len:16;
+#endif
+       unsigned int rsvd;
+};
+
+void rtw_dummy_event_callback(struct adapter *adapter, u8 *pbuf);
+void rtw_fwdbg_event_callback(struct adapter *adapter, u8 *pbuf);
+
+enum rtw_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(_CloseRF),         /* filen: only for PCIE,
+                                        * work around ASPM */
+       MAX_C2HEVT
+};
+
+
+#ifdef _RTW_MLME_EXT_C_
+
+static struct fwevent wlanevents[] = {
+       {0, rtw_dummy_event_callback},  /*0*/
+       {0, NULL},
+       {0, NULL},
+       {0, NULL},
+       {0, NULL},
+       {0, NULL},
+       {0, NULL},
+       {0, NULL},
+       {0, &rtw_survey_event_callback},                /*8*/
+       {sizeof (struct surveydone_event), &rtw_surveydone_event_callback},/*9*/
+       {0, &rtw_joinbss_event_callback},               /*10*/
+       {sizeof(struct stassoc_event), &rtw_stassoc_event_callback},
+       {sizeof(struct stadel_event), &rtw_stadel_event_callback},
+       {0, &rtw_atimdone_event_callback},
+       {0, rtw_dummy_event_callback},
+       {0, NULL},      /*15*/
+       {0, NULL},
+       {0, NULL},
+       {0, NULL},
+       {0, rtw_fwdbg_event_callback},
+       {0, NULL},       /*20*/
+       {0, NULL},
+       {0, NULL},
+       {0, &rtw_cpwm_event_callback},
+};
+
+#endif/* _RTL_MLME_EXT_C_ */
+
+#endif /* __RTW_MLME_EXT_H_ */
diff --git a/drivers/staging/rtl8188eu/include/rtw_mp.h b/drivers/staging/rtl8188eu/include/rtw_mp.h
new file mode 100644 (file)
index 0000000..59bdbb5
--- /dev/null
@@ -0,0 +1,495 @@
+/******************************************************************************
+ *
+ * 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 _RTW_MP_H_
+#define _RTW_MP_H_
+
+/*     00 - Success */
+/*     11 - Error */
+#define STATUS_SUCCESS                         (0x00000000L)
+#define STATUS_PENDING                         (0x00000103L)
+
+#define STATUS_UNSUCCESSFUL                    (0xC0000001L)
+#define STATUS_INSUFFICIENT_RESOURCES          (0xC000009AL)
+#define STATUS_NOT_SUPPORTED                   (0xC00000BBL)
+
+#define NDIS_STATUS_SUCCESS                    ((int)STATUS_SUCCESS)
+#define NDIS_STATUS_PENDING                    ((int)STATUS_PENDING)
+#define NDIS_STATUS_NOT_RECOGNIZED             ((int)0x00010001L)
+#define NDIS_STATUS_NOT_COPIED                 ((int)0x00010002L)
+#define NDIS_STATUS_NOT_ACCEPTED               ((int)0x00010003L)
+#define NDIS_STATUS_CALL_ACTIVE                        ((int)0x00010007L)
+
+#define NDIS_STATUS_FAILURE                    ((int)STATUS_UNSUCCESSFUL)
+#define NDIS_STATUS_RESOURCES          ((int)STATUS_INSUFFICIENT_RESOURCES)
+#define NDIS_STATUS_CLOSING                    ((int)0xC0010002L)
+#define NDIS_STATUS_BAD_VERSION                        ((int)0xC0010004L)
+#define NDIS_STATUS_BAD_CHARACTERISTICS                ((int)0xC0010005L)
+#define NDIS_STATUS_ADAPTER_NOT_FOUND          ((int)0xC0010006L)
+#define NDIS_STATUS_OPEN_FAILED                        ((int)0xC0010007L)
+#define NDIS_STATUS_DEVICE_FAILED              ((int)0xC0010008L)
+#define NDIS_STATUS_MULTICAST_FULL             ((int)0xC0010009L)
+#define NDIS_STATUS_MULTICAST_EXISTS           ((int)0xC001000AL)
+#define NDIS_STATUS_MULTICAST_NOT_FOUND                ((int)0xC001000BL)
+#define NDIS_STATUS_REQUEST_ABORTED            ((int)0xC001000CL)
+#define NDIS_STATUS_RESET_IN_PROGRESS          ((int)0xC001000DL)
+#define NDIS_STATUS_CLOSING_INDICATING         ((int)0xC001000EL)
+#define NDIS_STATUS_NOT_SUPPORTED              ((int)STATUS_NOT_SUPPORTED)
+#define NDIS_STATUS_INVALID_PACKET             ((int)0xC001000FL)
+#define NDIS_STATUS_OPEN_LIST_FULL             ((int)0xC0010010L)
+#define NDIS_STATUS_ADAPTER_NOT_READY          ((int)0xC0010011L)
+#define NDIS_STATUS_ADAPTER_NOT_OPEN           ((int)0xC0010012L)
+#define NDIS_STATUS_NOT_INDICATING             ((int)0xC0010013L)
+#define NDIS_STATUS_INVALID_LENGTH             ((int)0xC0010014L)
+#define NDIS_STATUS_INVALID_DATA               ((int)0xC0010015L)
+#define NDIS_STATUS_BUFFER_TOO_SHORT           ((int)0xC0010016L)
+#define NDIS_STATUS_INVALID_OID                        ((int)0xC0010017L)
+#define NDIS_STATUS_ADAPTER_REMOVED            ((int)0xC0010018L)
+#define NDIS_STATUS_UNSUPPORTED_MEDIA          ((int)0xC0010019L)
+#define NDIS_STATUS_GROUP_ADDRESS_IN_USE       ((int)0xC001001AL)
+#define NDIS_STATUS_FILE_NOT_FOUND             ((int)0xC001001BL)
+#define NDIS_STATUS_ERROR_READING_FILE         ((int)0xC001001CL)
+#define NDIS_STATUS_ALREADY_MAPPED             ((int)0xC001001DL)
+#define NDIS_STATUS_RESOURCE_CONFLICT          ((int)0xC001001EL)
+#define NDIS_STATUS_NO_CABLE                   ((int)0xC001001FL)
+
+#define NDIS_STATUS_INVALID_SAP                        ((int)0xC0010020L)
+#define NDIS_STATUS_SAP_IN_USE                 ((int)0xC0010021L)
+#define NDIS_STATUS_INVALID_ADDRESS            ((int)0xC0010022L)
+#define NDIS_STATUS_VC_NOT_ACTIVATED           ((int)0xC0010023L)
+#define NDIS_STATUS_DEST_OUT_OF_ORDER          ((int)0xC0010024L)  /*cause 27*/
+#define NDIS_STATUS_VC_NOT_AVAILABLE           ((int)0xC0010025L)  /*cause 35,45 */
+#define NDIS_STATUS_CELLRATE_NOT_AVAILABLE     ((int)0xC0010026L)  /*cause 37*/
+#define NDIS_STATUS_INCOMPATABLE_QOS           ((int)0xC0010027L)  /*cause 49*/
+#define NDIS_STATUS_AAL_PARAMS_UNSUPPORTED     ((int)0xC0010028L)  /*cause 93*/
+#define NDIS_STATUS_NO_ROUTE_TO_DESTINATION    ((int)0xC0010029L)  /*cause 3 */
+
+enum antenna_path {
+       ANTENNA_NONE = 0x00,
+       ANTENNA_D,
+       ANTENNA_C,
+       ANTENNA_CD,
+       ANTENNA_B,
+       ANTENNA_BD,
+       ANTENNA_BC,
+       ANTENNA_BCD,
+       ANTENNA_A,
+       ANTENNA_AD,
+       ANTENNA_AC,
+       ANTENNA_ACD,
+       ANTENNA_AB,
+       ANTENNA_ABD,
+       ANTENNA_ABC,
+       ANTENNA_ABCD
+};
+
+
+#define MAX_MP_XMITBUF_SZ      2048
+#define NR_MP_XMITFRAME                8
+
+struct mp_xmit_frame {
+       struct list_head list;
+       struct pkt_attrib attrib;
+       struct sk_buff *pkt;
+       int frame_tag;
+       struct adapter *padapter;
+       struct urb *pxmit_urb[8];
+       /* insert urb, irp, and irpcnt info below... */
+       u8 *mem_addr;
+       u32 sz[8];
+       u8 bpending[8];
+       int ac_tag[8];
+       int last[8];
+       uint irpcnt;
+       uint fragcnt;
+       uint mem[(MAX_MP_XMITBUF_SZ >> 2)];
+};
+
+struct mp_wiparam {
+       u32 bcompleted;
+       u32 act_type;
+       u32 io_offset;
+       u32 io_value;
+};
+
+typedef void(*wi_act_func)(void *padapter);
+
+struct mp_tx {
+       u8 stop;
+       u32 count, sended;
+       u8 payload;
+       struct pkt_attrib attrib;
+       struct tx_desc desc;
+       u8 *pallocated_buf;
+       u8 *buf;
+       u32 buf_size, write_size;
+       void *PktTxThread;
+};
+
+#include <Hal8188EPhyCfg.h>
+
+#define MP_MAX_LINES           1000
+#define MP_MAX_LINES_BYTES     256
+
+typedef void (*MPT_WORK_ITEM_HANDLER)(void *Adapter);
+
+struct mpt_context {
+       /*  Indicate if we have started Mass Production Test. */
+       bool                    bMassProdTest;
+
+       /*  Indicate if the driver is unloading or unloaded. */
+       bool                    bMptDrvUnload;
+
+       struct semaphore MPh2c_Sema;
+       struct timer_list MPh2c_timeout_timer;
+/*  Event used to sync H2c for BT control */
+
+       bool            MptH2cRspEvent;
+       bool            MptBtC2hEvent;
+       bool            bMPh2c_timeout;
+
+       /* 8190 PCI does not support NDIS_WORK_ITEM. */
+       /*  Work Item for Mass Production Test. */
+       /*  Event used to sync the case unloading driver and MptWorkItem
+        *  is still in progress. */
+       /*  Indicate a MptWorkItem is scheduled and not yet finished. */
+       bool                    bMptWorkItemInProgress;
+       /*  An instance which implements function and context of MptWorkItem. */
+       MPT_WORK_ITEM_HANDLER   CurrMptAct;
+
+       /*  1=Start, 0=Stop from UI. */
+       u32     MptTestStart;
+       /*  _TEST_MODE, defined in MPT_Req2.h */
+       u32     MptTestItem;
+       /*  Variable needed in each implementation of CurrMptAct. */
+       u32     MptActType;     /*  Type of action performed in CurrMptAct. */
+       /*  The Offset of IO operation is depend of MptActType. */
+       u32     MptIoOffset;
+       /*  The Value of IO operation is depend of MptActType. */
+       u32     MptIoValue;
+       /*  The RfPath of IO operation is depend of MptActType. */
+       u32     MptRfPath;
+
+       enum wireless_mode MptWirelessModeToSw; /*  Wireless mode to switch. */
+       u8      MptChannelToSw;         /*  Channel to switch. */
+       u8      MptInitGainToSet;       /*  Initial gain to set. */
+       u32     MptBandWidth;           /*  bandwidth to switch. */
+       u32     MptRateIndex;           /*  rate index. */
+       /*  Register value kept for Single Carrier Tx test. */
+       u8      btMpCckTxPower;
+       /*  Register value kept for Single Carrier Tx test. */
+       u8      btMpOfdmTxPower;
+       /*  For MP Tx Power index */
+       u8      TxPwrLevel[2];  /*  rf-A, rf-B */
+
+       /*  Content of RCR Regsiter for Mass Production Test. */
+       u32     MptRCR;
+       /*  true if we only receive packets with specific pattern. */
+       bool    bMptFilterPattern;
+       /*  Rx OK count, statistics used in Mass Production Test. */
+       u32     MptRxOkCnt;
+       /*  Rx CRC32 error count, statistics used in Mass Production Test. */
+       u32     MptRxCrcErrCnt;
+
+       bool    bCckContTx;     /*  true if we are in CCK Continuous Tx test. */
+       bool    bOfdmContTx;    /*  true if we are in OFDM Continuous Tx test. */
+       bool    bStartContTx;   /*  true if we have start Continuous Tx test. */
+       /*  true if we are in Single Carrier Tx test. */
+       bool    bSingleCarrier;
+       /*  true if we are in Carrier Suppression Tx Test. */
+       bool    bCarrierSuppression;
+       /* true if we are in Single Tone Tx test. */
+       bool    bSingleTone;
+
+       /*  ACK counter asked by K.Y.. */
+       bool    bMptEnableAckCounter;
+       u32     MptAckCounter;
+
+       u8      APK_bound[2];   /* for APK      path A/path B */
+       bool    bMptIndexEven;
+
+       u8      backup0xc50;
+       u8      backup0xc58;
+       u8      backup0xc30;
+       u8      backup0x52_RF_A;
+       u8      backup0x52_RF_B;
+
+       u8      h2cReqNum;
+       u8      c2hBuf[20];
+
+       u8      btInBuf[100];
+       u32     mptOutLen;
+       u8      mptOutBuf[100];
+};
+
+enum {
+       WRITE_REG = 1,
+       READ_REG,
+       WRITE_RF,
+       READ_RF,
+       MP_START,
+       MP_STOP,
+       MP_RATE,
+       MP_CHANNEL,
+       MP_BANDWIDTH,
+       MP_TXPOWER,
+       MP_ANT_TX,
+       MP_ANT_RX,
+       MP_CTX,
+       MP_QUERY,
+       MP_ARX,
+       MP_PSD,
+       MP_PWRTRK,
+       MP_THER,
+       MP_IOCTL,
+       EFUSE_GET,
+       EFUSE_SET,
+       MP_RESET_STATS,
+       MP_DUMP,
+       MP_PHYPARA,
+       MP_SetRFPathSwh,
+       MP_QueryDrvStats,
+       MP_SetBT,
+       CTA_TEST,
+       MP_NULL,
+};
+
+struct mp_priv {
+       struct adapter *papdater;
+
+       /* Testing Flag */
+       /* 0 for normal type packet, 1 for loopback packet (16bytes TXCMD) */
+       u32 mode;
+
+       u32 prev_fw_state;
+
+       /* OID cmd handler */
+       struct mp_wiparam workparam;
+
+       /* Tx Section */
+       u8 TID;
+       u32 tx_pktcount;
+       struct mp_tx tx;
+
+       /* Rx Section */
+       u32 rx_pktcount;
+       u32 rx_crcerrpktcount;
+       u32 rx_pktloss;
+
+       struct recv_stat rxstat;
+
+       /* RF/BB relative */
+       u8 channel;
+       u8 bandwidth;
+       u8 prime_channel_offset;
+       u8 txpoweridx;
+       u8 txpoweridx_b;
+       u8 rateidx;
+       u32 preamble;
+       u32 CrystalCap;
+
+       u16 antenna_tx;
+       u16 antenna_rx;
+
+       u8 check_mp_pkt;
+
+       u8 bSetTxPower;
+
+       struct wlan_network mp_network;
+       unsigned char network_macaddr[ETH_ALEN];
+
+       u8 *pallocated_mp_xmitframe_buf;
+       u8 *pmp_xmtframe_buf;
+       struct __queue free_mp_xmitqueue;
+       u32 free_mp_xmitframe_cnt;
+
+       struct mpt_context MptCtx;
+};
+
+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
+
+/* Hardware Registers */
+#define BB_REG_BASE_ADDR               0x800
+
+/* MP variables */
+enum mp_mode_{
+       MP_OFF,
+       MP_ON,
+       MP_ERR,
+       MP_CONTINUOUS_TX,
+       MP_SINGLE_CARRIER_TX,
+       MP_CARRIER_SUPPRISSION_TX,
+       MP_SINGLE_TONE_TX,
+       MP_PACKET_TX,
+       MP_PACKET_RX
+};
+
+#define MAX_RF_PATH_NUMS       RF_PATH_MAX
+
+extern u8 mpdatarate[NumRates];
+
+/* MP set force data rate base on the definition. */
+enum mpt_rate_index {
+       /* 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
+};
+
+#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
+
+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 */
+};
+
+s32 init_mp_priv(struct adapter *padapter);
+void free_mp_priv(struct mp_priv *pmp_priv);
+s32 MPT_InitializeAdapter(struct adapter *padapter, u8 Channel);
+void MPT_DeInitAdapter(struct adapter *padapter);
+s32 mp_start_test(struct adapter *padapter);
+void mp_stop_test(struct adapter *padapter);
+
+u32 _read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask);
+void _write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 bitmask, u32 val);
+
+u32 read_macreg(struct adapter *padapter, u32 addr, u32 sz);
+void write_macreg(struct adapter *padapter, u32 addr, u32 val, u32 sz);
+u32 read_bbreg(struct adapter *padapter, u32 addr, u32 bitmask);
+void write_bbreg(struct adapter *padapter, u32 addr, u32 bitmask, u32 val);
+u32 read_rfreg(struct adapter *padapter, u8 rfpath, u32 addr);
+void write_rfreg(struct adapter *padapter, u8 rfpath, u32 addr, u32 val);
+
+void   SetChannel(struct adapter *pAdapter);
+void   SetBandwidth(struct adapter *pAdapter);
+void   SetTxPower(struct adapter *pAdapter);
+void   SetAntennaPathPower(struct adapter *pAdapter);
+void   SetDataRate(struct adapter *pAdapter);
+
+void   SetAntenna(struct adapter *pAdapter);
+
+s32    SetThermalMeter(struct adapter *pAdapter, u8 target_ther);
+void   GetThermalMeter(struct adapter *pAdapter, u8 *value);
+
+void   SetContinuousTx(struct adapter *pAdapter, u8 bStart);
+void   SetSingleCarrierTx(struct adapter *pAdapter, u8 bStart);
+void   SetSingleToneTx(struct adapter *pAdapter, u8 bStart);
+void   SetCarrierSuppressionTx(struct adapter *pAdapter, u8 bStart);
+void PhySetTxPowerLevel(struct adapter *pAdapter);
+
+void   fill_txdesc_for_mp(struct adapter *padapter, struct tx_desc *ptxdesc);
+void   SetPacketTx(struct adapter *padapter);
+void   SetPacketRx(struct adapter *pAdapter, u8 bStartRx);
+
+void   ResetPhyRxPktCount(struct adapter *pAdapter);
+u32    GetPhyRxPktReceived(struct adapter *pAdapter);
+u32    GetPhyRxPktCRC32Error(struct adapter *pAdapter);
+
+s32    SetPowerTracking(struct adapter *padapter, u8 enable);
+void   GetPowerTracking(struct adapter *padapter, u8 *enable);
+u32    mp_query_psd(struct adapter *pAdapter, u8 *data);
+void Hal_SetAntenna(struct adapter *pAdapter);
+void Hal_SetBandwidth(struct adapter *pAdapter);
+void Hal_SetTxPower(struct adapter *pAdapter);
+void Hal_SetCarrierSuppressionTx(struct adapter *pAdapter, u8 bStart);
+void Hal_SetSingleToneTx(struct adapter *pAdapter, u8 bStart);
+void Hal_SetSingleCarrierTx (struct adapter *pAdapter, u8 bStart);
+void Hal_SetContinuousTx (struct adapter *pAdapter, u8 bStart);
+void Hal_SetBandwidth(struct adapter *pAdapter);
+void Hal_SetDataRate(struct adapter *pAdapter);
+void Hal_SetChannel(struct adapter *pAdapter);
+void Hal_SetAntennaPathPower(struct adapter *pAdapter);
+s32 Hal_SetThermalMeter(struct adapter *pAdapter, u8 target_ther);
+s32 Hal_SetPowerTracking(struct adapter *padapter, u8 enable);
+void Hal_GetPowerTracking(struct adapter *padapter, u8 * enable);
+void Hal_GetThermalMeter(struct adapter *pAdapter, u8 *value);
+void Hal_mpt_SwitchRfSetting(struct adapter *pAdapter);
+void Hal_MPT_CCKTxPowerAdjust(struct adapter * Adapter, bool bInCH14);
+void Hal_MPT_CCKTxPowerAdjustbyIndex(struct adapter *pAdapter, bool beven);
+void Hal_SetCCKTxPower(struct adapter *pAdapter, u8 * TxPower);
+void Hal_SetOFDMTxPower(struct adapter *pAdapter, u8 * TxPower);
+void Hal_TriggerRFThermalMeter(struct adapter *pAdapter);
+u8 Hal_ReadRFThermalMeter(struct adapter *pAdapter);
+void Hal_SetCCKContinuousTx(struct adapter *pAdapter, u8 bStart);
+void Hal_SetOFDMContinuousTx(struct adapter *pAdapter, u8 bStart);
+void Hal_ProSetCrystalCap (struct adapter *pAdapter , u32 CrystalCapVal);
+void _rtw_mp_xmit_priv(struct xmit_priv *pxmitpriv);
+void MP_PHY_SetRFPathSwitch(struct adapter *pAdapter ,bool bMain);
+
+#endif /* _RTW_MP_H_ */
diff --git a/drivers/staging/rtl8188eu/include/rtw_mp_ioctl.h b/drivers/staging/rtl8188eu/include/rtw_mp_ioctl.h
new file mode 100644 (file)
index 0000000..db2116d
--- /dev/null
@@ -0,0 +1,340 @@
+/******************************************************************************
+ *
+ * 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 _RTW_MP_IOCTL_H_
+#define _RTW_MP_IOCTL_H_
+
+#include <drv_types.h>
+#include <mp_custom_oid.h>
+#include <rtw_ioctl.h>
+#include <rtw_ioctl_rtl.h>
+#include <rtw_efuse.h>
+#include <rtw_mp.h>
+
+/*  */
+struct cfg_dbg_msg_struct {
+       u32 DebugLevel;
+       u32 DebugComponent_H32;
+       u32 DebugComponent_L32;
+};
+
+struct mp_rw_reg {
+       u32 offset;
+       u32 width;
+       u32 value;
+};
+
+struct efuse_access_struct {
+       u16     start_addr;
+       u16     cnts;
+       u8      data[0];
+};
+
+struct burst_rw_reg {
+       u32 offset;
+       u32 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;
+};
+
+#define _irqlevel_changed_(a, b)
+
+/* oid_rtl_seg_81_80_00 */
+int oid_rt_pro_set_data_rate_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_start_test_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_stop_test_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_set_channel_direct_call_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_set_antenna_bb_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_set_tx_power_control_hdl(struct oid_par_priv *poid_par_priv);
+
+/* oid_rtl_seg_81_80_20 */
+int oid_rt_pro_query_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_query_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_query_rx_packet_crc32_error_hdl(struct oid_par_priv *par_priv);
+int oid_rt_pro_reset_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_reset_rx_packet_received_hdl(struct oid_par_priv *par_priv);
+int oid_rt_pro_set_modulation_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_set_continuous_tx_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_set_single_carrier_tx_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_set_carrier_suppression_tx_hdl(struct oid_par_priv *par_priv);
+int oid_rt_pro_set_single_tone_tx_hdl(struct oid_par_priv *poid_par_priv);
+
+/* oid_rtl_seg_81_87 */
+int oid_rt_pro_write_bb_reg_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_read_bb_reg_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_write_rf_reg_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_read_rf_reg_hdl(struct oid_par_priv *poid_par_priv);
+
+/* oid_rtl_seg_81_85 */
+int oid_rt_wireless_mode_hdl(struct oid_par_priv *poid_par_priv);
+
+/*  oid_rtl_seg_87_11_00 */
+int oid_rt_pro8711_join_bss_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_burst_read_register_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_burst_write_register_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_write_txcmd_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_read16_eeprom_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_write16_eeprom_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro8711_wi_poll_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro8711_pkt_loss_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_rd_attrib_mem_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_wr_attrib_mem_hdl (struct oid_par_priv *poid_par_priv);
+int  oid_rt_pro_set_rf_intfs_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_poll_rx_status_hdl(struct oid_par_priv *poid_par_priv);
+/*  oid_rtl_seg_87_11_20 */
+int oid_rt_pro_cfg_debug_message_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_set_data_rate_ex_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_set_basic_rate_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_read_tssi_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_set_power_tracking_hdl(struct oid_par_priv *poid_par_priv);
+/* oid_rtl_seg_87_11_50 */
+int oid_rt_pro_qry_pwrstate_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_set_pwrstate_hdl(struct oid_par_priv *poid_par_priv);
+/* oid_rtl_seg_87_11_F0 */
+int oid_rt_pro_h2c_set_rate_table_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_h2c_get_rate_table_hdl(struct oid_par_priv *poid_par_priv);
+
+/* oid_rtl_seg_87_12_00 */
+int oid_rt_pro_encryption_ctrl_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_add_sta_info_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_dele_sta_info_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_query_dr_variable_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_read_efuse_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_write_efuse_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_rw_efuse_pgpkt_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_get_efuse_current_size_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_efuse_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_efuse_map_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_set_bandwidth_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_set_crystal_cap_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_set_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_get_efuse_max_size_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_set_tx_agc_offset_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_set_pkt_test_mode_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_get_thermal_meter_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_reset_phy_rx_packet_count_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_get_phy_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_get_phy_rx_packet_crc32_error_hdl(struct oid_par_priv *par_priv);
+int oid_rt_set_power_down_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_get_power_mode_hdl(struct oid_par_priv *poid_par_priv);
+int oid_rt_pro_trigger_gpio_hdl(struct oid_par_priv *poid_par_priv);
+
+#ifdef _RTW_MP_IOCTL_C_
+
+static const struct oid_obj_priv oid_rtl_seg_81_80_00[] = {
+       {1, &oid_null_function},                /* 0x00 OID_RT_PRO_RESET_DUT */
+       {1, &oid_rt_pro_set_data_rate_hdl},     /* 0x01 */
+       {1, &oid_rt_pro_start_test_hdl},        /* 0x02 */
+       {1, &oid_rt_pro_stop_test_hdl},         /* 0x03 */
+       {1, &oid_null_function},        /* 0x04 OID_RT_PRO_SET_PREAMBLE */
+       {1, &oid_null_function},        /* 0x05 OID_RT_PRO_SET_SCRAMBLER */
+       {1, &oid_null_function},        /* 0x06 OID_RT_PRO_SET_FILTER_BB */
+       {1, &oid_null_function},/* 0x07 OID_RT_PRO_SET_MANUAL_DIVERSITY_BB */
+       {1, &oid_rt_pro_set_channel_direct_call_hdl},   /* 0x08 */
+       {1, &oid_null_function},/* 0x09 OID_RT_PRO_SET_SLEEP_MODE_DIRECT_CALL */
+       {1, &oid_null_function},/* 0x0A OID_RT_PRO_SET_WAKE_MODE_DIRECT_CALL */
+       {1, &oid_rt_pro_set_continuous_tx_hdl}, /* 0x0B OID_RT_PRO_SET_TX_CONTINUOUS_DIRECT_CALL */
+       {1, &oid_rt_pro_set_single_carrier_tx_hdl},/* 0x0C      OID_RT_PRO_SET_SINGLE_CARRIER_TX_CONTINUOUS */
+       {1, &oid_null_function},        /* 0x0D OID_RT_PRO_SET_TX_ANTENNA_BB */
+       {1, &oid_rt_pro_set_antenna_bb_hdl},    /* 0x0E */
+       {1, &oid_null_function},                /* 0x0F OID_RT_PRO_SET_CR_SCRAMBLER */
+       {1, &oid_null_function},                /* 0x10 OID_RT_PRO_SET_CR_NEW_FILTER */
+       {1, &oid_rt_pro_set_tx_power_control_hdl},/* 0x11 OID_RT_PRO_SET_TX_POWER_CONTROL */
+       {1, &oid_null_function},        /* 0x12 OID_RT_PRO_SET_CR_TX_CONFIG */
+       {1, &oid_null_function},        /* 0x13 OID_RT_PRO_GET_TX_POWER_CONTROL */
+       {1, &oid_null_function},        /* 0x14 OID_RT_PRO_GET_CR_SIGNAL_QUALITY */
+       {1, &oid_null_function},        /* 0x15 OID_RT_PRO_SET_CR_SETPOINT */
+       {1, &oid_null_function},        /* 0x16 OID_RT_PRO_SET_INTEGRATOR */
+       {1, &oid_null_function},        /* 0x17 OID_RT_PRO_SET_SIGNAL_QUALITY */
+       {1, &oid_null_function},        /* 0x18 OID_RT_PRO_GET_INTEGRATOR */
+       {1, &oid_null_function},        /* 0x19 OID_RT_PRO_GET_SIGNAL_QUALITY */
+       {1, &oid_null_function},        /* 0x1A OID_RT_PRO_QUERY_EEPROM_TYPE */
+       {1, &oid_null_function},        /* 0x1B OID_RT_PRO_WRITE_MAC_ADDRESS */
+       {1, &oid_null_function},        /* 0x1C OID_RT_PRO_READ_MAC_ADDRESS */
+       {1, &oid_null_function},        /* 0x1D OID_RT_PRO_WRITE_CIS_DATA */
+       {1, &oid_null_function},        /* 0x1E OID_RT_PRO_READ_CIS_DATA */
+       {1, &oid_null_function}         /* 0x1F OID_RT_PRO_WRITE_POWER_CONTROL */
+};
+
+static const struct oid_obj_priv oid_rtl_seg_81_80_20[] = {
+       {1, &oid_null_function},        /* 0x20 OID_RT_PRO_READ_POWER_CONTROL */
+       {1, &oid_null_function},        /* 0x21 OID_RT_PRO_WRITE_EEPROM */
+       {1, &oid_null_function},        /* 0x22 OID_RT_PRO_READ_EEPROM */
+       {1, &oid_rt_pro_reset_tx_packet_sent_hdl},      /* 0x23 */
+       {1, &oid_rt_pro_query_tx_packet_sent_hdl},      /* 0x24 */
+       {1, &oid_rt_pro_reset_rx_packet_received_hdl},  /* 0x25 */
+       {1, &oid_rt_pro_query_rx_packet_received_hdl},  /* 0x26 */
+       {1, &oid_rt_pro_query_rx_packet_crc32_error_hdl},       /* 0x27 */
+       {1, &oid_null_function},        /* 0x28 OID_RT_PRO_QUERY_CURRENT_ADDRESS */
+       {1, &oid_null_function},        /* 0x29 OID_RT_PRO_QUERY_PERMANENT_ADDRESS */
+       {1, &oid_null_function},        /* 0x2A OID_RT_PRO_SET_PHILIPS_RF_PARAMETERS */
+       {1, &oid_rt_pro_set_carrier_suppression_tx_hdl},/* 0x2B OID_RT_PRO_SET_CARRIER_SUPPRESSION_TX */
+       {1, &oid_null_function},        /* 0x2C OID_RT_PRO_RECEIVE_PACKET */
+       {1, &oid_null_function},        /* 0x2D OID_RT_PRO_WRITE_EEPROM_BYTE */
+       {1, &oid_null_function},        /* 0x2E OID_RT_PRO_READ_EEPROM_BYTE */
+       {1, &oid_rt_pro_set_modulation_hdl}             /* 0x2F */
+};
+
+static const struct oid_obj_priv oid_rtl_seg_81_80_40[] = {
+       {1, &oid_null_function},                        /* 0x40 */
+       {1, &oid_null_function},                        /* 0x41 */
+       {1, &oid_null_function},                        /* 0x42 */
+       {1, &oid_rt_pro_set_single_tone_tx_hdl},        /* 0x43 */
+       {1, &oid_null_function},                        /* 0x44 */
+       {1, &oid_null_function}                         /* 0x45 */
+};
+
+static const struct oid_obj_priv oid_rtl_seg_81_80_80[] = {
+       {1, &oid_null_function},                /* 0x80 OID_RT_DRIVER_OPTION */
+       {1, &oid_null_function},                /* 0x81 OID_RT_RF_OFF */
+       {1, &oid_null_function}                 /* 0x82 OID_RT_AUTH_STATUS */
+};
+
+static const struct oid_obj_priv oid_rtl_seg_81_85[] = {
+       {1, &oid_rt_wireless_mode_hdl}          /* 0x00 OID_RT_WIRELESS_MODE */
+};
+
+#endif /* _RTL871X_MP_IOCTL_C_ */
+
+struct rwreg_param {
+       u32 offset;
+       u32 width;
+       u32 value;
+};
+
+struct bbreg_param {
+       u32 offset;
+       u32 phymask;
+       u32 value;
+};
+
+struct txpower_param {
+       u32 pwr_index;
+};
+
+struct datarate_param {
+       u32 rate_index;
+};
+
+struct rfintfs_parm {
+       u32 rfintfs;
+};
+
+struct mp_xmit_parm {
+       u8 enable;
+       u32 count;
+       u16 length;
+       u8 payload_type;
+       u8 da[ETH_ALEN];
+};
+
+struct mp_xmit_packet {
+       u32 len;
+       u32 mem[MAX_MP_XMITBUF_SZ >> 2];
+};
+
+struct psmode_param {
+       u32 ps_mode;
+       u32 smart_ps;
+};
+
+/* for OID_RT_PRO_READ16_EEPROM & OID_RT_PRO_WRITE16_EEPROM */
+struct eeprom_rw_param {
+       u32 offset;
+       u16 value;
+};
+
+struct mp_ioctl_handler {
+       u32 paramsize;
+       s32 (*handler)(struct oid_par_priv* poid_par_priv);
+       u32 oid;
+};
+
+struct mp_ioctl_param{
+       u32 subcode;
+       u32 len;
+       u8 data[0];
+};
+
+#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),
+       GEN_MP_IOCTL_SUBCODE(READ_REG),
+       GEN_MP_IOCTL_SUBCODE(WRITE_REG),
+       GEN_MP_IOCTL_SUBCODE(READ_BB_REG),
+       GEN_MP_IOCTL_SUBCODE(WRITE_BB_REG),             /*5*/
+       GEN_MP_IOCTL_SUBCODE(READ_RF_REG),
+       GEN_MP_IOCTL_SUBCODE(WRITE_RF_REG),
+       GEN_MP_IOCTL_SUBCODE(SET_CHANNEL),
+       GEN_MP_IOCTL_SUBCODE(SET_TXPOWER),
+       GEN_MP_IOCTL_SUBCODE(SET_DATARATE),             /*10*/
+       GEN_MP_IOCTL_SUBCODE(SET_BANDWIDTH),
+       GEN_MP_IOCTL_SUBCODE(SET_ANTENNA),
+       GEN_MP_IOCTL_SUBCODE(CNTU_TX),
+       GEN_MP_IOCTL_SUBCODE(SC_TX),
+       GEN_MP_IOCTL_SUBCODE(CS_TX),                    /*15*/
+       GEN_MP_IOCTL_SUBCODE(ST_TX),
+       GEN_MP_IOCTL_SUBCODE(IOCTL_XMIT_PACKET),
+       GEN_MP_IOCTL_SUBCODE(SET_RX_PKT_TYPE),
+       GEN_MP_IOCTL_SUBCODE(RESET_PHY_RX_PKT_CNT),
+       GEN_MP_IOCTL_SUBCODE(GET_PHY_RX_PKT_RECV),      /*20*/
+       GEN_MP_IOCTL_SUBCODE(GET_PHY_RX_PKT_ERROR),
+       GEN_MP_IOCTL_SUBCODE(READ16_EEPROM),
+       GEN_MP_IOCTL_SUBCODE(WRITE16_EEPROM),
+       GEN_MP_IOCTL_SUBCODE(EFUSE),
+       GEN_MP_IOCTL_SUBCODE(EFUSE_MAP),                /*25*/
+       GEN_MP_IOCTL_SUBCODE(GET_EFUSE_MAX_SIZE),
+       GEN_MP_IOCTL_SUBCODE(GET_EFUSE_CURRENT_SIZE),
+       GEN_MP_IOCTL_SUBCODE(GET_THERMAL_METER),
+       GEN_MP_IOCTL_SUBCODE(SET_PTM),
+       GEN_MP_IOCTL_SUBCODE(SET_POWER_DOWN),           /*30*/
+       GEN_MP_IOCTL_SUBCODE(TRIGGER_GPIO),
+       GEN_MP_IOCTL_SUBCODE(SET_DM_BT),                /*35*/
+       GEN_MP_IOCTL_SUBCODE(DEL_BA),                   /*36*/
+       GEN_MP_IOCTL_SUBCODE(GET_WIFI_STATUS),  /*37*/
+       MAX_MP_IOCTL_SUBCODE,
+};
+
+s32 mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv);
+
+#define GEN_HANDLER(sz, hdl, oid) {sz, hdl, oid},
+
+#define EXT_MP_IOCTL_HANDLER(sz, subcode, oid)                 \
+        {sz, mp_ioctl_##subcode##_hdl, oid},
+
+
+#endif
diff --git a/drivers/staging/rtl8188eu/include/rtw_mp_phy_regdef.h b/drivers/staging/rtl8188eu/include/rtw_mp_phy_regdef.h
new file mode 100644 (file)
index 0000000..3ad2207
--- /dev/null
@@ -0,0 +1,1084 @@
+/******************************************************************************
+ *
+ * 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
+ *
+ *
+ ******************************************************************************/
+/*****************************************************************************
+ *
+ * Module:     __RTW_MP_PHY_REGDEF_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 __RTW_MP_PHY_REGDEF_H_
+#define __RTW_MP_PHY_REGDEF_H_
+
+
+/*--------------------------Define Parameters-------------------------------*/
+
+/*  */
+/*     8192S Regsiter 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 defintion 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_XC_RFTiming           0x818 */
+/* define rFPGA0_XD_RFTiming           0x81c */
+
+#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 Control */
+#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   /*  Tranceiver 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 RF Interface Readback Value */
+#define        rFPGA0_XCD_RFInterfaceRB                0x8e4   /*  Useless now */
+
+/*  */
+/*  4. Page9(0x900) */
+/*  */
+#define        rFPGA1_RFMOD                            0x900   /* RF mode & OFDM TxSC RF BW Setting?? */
+
+#define        rFPGA1_TxBlock                          0x904   /*  Useless now */
+#define        rFPGA1_DebugSelect                      0x908   /*  Useless now */
+#define        rFPGA1_TxInfo                           0x90c   /*  Useless now Status report?? */
+
+/*  */
+/*  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 Select RX path by RSSI */
+#define        rCCK0_CCA                                       0xa08   /*  Disable init gain now Init gain */
+
+#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
+
+#define        rOFDM0_XARxAFE                  0xc10  /* RxIQ DC offset, Rx digital filter, DC notch filter */
+#define        rOFDM0_XARxIQImbalance          0xc14  /* RxIQ imblance 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_RxIQExtAnta              0xca0
+
+#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 RTL92SE_FPGA_VERIFY 0
+#define        rZebra1_HSSIEnable              0x0     /*  Useless now */
+#define        rZebra1_TRxEnable1              0x1
+#define        rZebra1_TRxEnable2              0x2
+#define        rZebra1_AGC                     0x4
+#define        rZebra1_ChargePump              0x5
+/* if (RTL92SE_FPGA_VERIFY == 1) */
+#define        rZebra1_Channel                 0x7     /*  RF channel switch */
+/* else */
+
+/* endif */
+#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_TXBIAS                       0x16 /*  */
+#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     /* chane 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_HSSIParameter1 */
+#define        b3WireAddressLength             0x400
+
+#define        b3WireRFPowerDown               0x1     /*  Useless now */
+/* define bHWSISelect                  0x8 */
+#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
+#if (RTL92SE_FPGA_VERIFY == 1)
+#define        bLSSIReadAddress                0x3f000000   /* LSSI "Read" Address
+                                       Reg 0x824 rFPGA0_XA_HSSIParameter2 */
+#else
+#define        bLSSIReadAddress                0x7f800000   /*  T65 RF */
+#endif
+#define        bLSSIReadEdge                   0x80000000   /* LSSI "Read" edge signal */
+#if (RTL92SE_FPGA_VERIFY == 1)
+#define        bLSSIReadBackData               0xfff   /*  Reg 0x8a0
+                                        rFPGA0_XA_LSSIReadBack */
+#else
+#define        bLSSIReadBackData               0xfffff /*  T65 RF */
+#endif
+#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
+
+#define        bADClkPhase                     0x4000000       /*  Reg 0x880
+        rFPGA0_AnalogParameter1 20/40 CCK support switch 40/80 BB MHZ */
+
+#define        b80MClkDelay                    0x18000000      /*  Useless */
+#define        bAFEWatchDogEnable              0x20000000
+
+#define        bXtalCap01                      0xc0000000      /*  Reg 0x884
+        rFPGA0_AnalogParameter2 Crystal cap */
+#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 20/40 sw */
+
+#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 init gain polar */
+#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     /* thresh for hi power */
+#define        bRSSI_Gen                       0x7f000000   /* thresh for ant div */
+#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 bRxMF_Hold        0x3800 */
+#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 bRxPath1              0x01 */
+/* define bRxPath2              0x02 */
+/* define bRxPath3              0x04 */
+/* define bRxPath4              0x08 */
+/* define bTxPath1              0x10 */
+/* define bTxPath2              0x20 */
+#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
+#define        bMaskH4Bits             0xf0000000
+#define        bMaskOFDM_D             0xffc00000
+#define        bMaskCCK                0x3f3f3f3f
+#define        bMask12Bits             0xfff
+
+/* for PutRFRegsetting & GetRFRegSetting BitMask */
+#if (RTL92SE_FPGA_VERIFY == 1)
+#define                bRFRegOffsetMask        0xfff
+#else
+#define                bRFRegOffsetMask        0xfffff
+#endif
+#define        bEnable         0x1     /*  Useless */
+#define        bDisabl         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 max debug item in each debug page */
+/* define bMaxItem_FPGA_PHY0   0x9 */
+/* define bMaxItem_FPGA_PHY1   0x3 */
+/* define bMaxItem_PHY_11B       0x16 */
+/* define bMaxItem_OFDM_PHY0   0x29 */
+/* define bMaxItem_OFDM_PHY1   0x0 */
+
+#define        bPMACControl    0x0             /*  Useless */
+#define        bWMACControl    0x1
+#define        bWNICControl    0x2
+
+#define RCR_AAP                BIT(0)          /*  accept all physical address */
+#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 */
+#define RCR_OnlyErlPkt BIT(31)         /*  Rx Early mode is performed for
+                                        *  packet size greater than 1536 */
+
+/*--------------------------Define Parameters-------------------------------*/
+
+
+#endif /* __INC_HAL8192SPHYREG_H */