8723BU: Update 8723BU wifi driver to version v4.3.16_14189.20150519_BTCOEX2015119...
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8723bu / include / rtw_xmit.h
old mode 100644 (file)
new mode 100755 (executable)
index 363ee61..c793868
 
 // xmit extension buff defination
 #define MAX_XMIT_EXTBUF_SZ     (1536)
+
+#ifdef CONFIG_SINGLE_XMIT_BUF
+#define NR_XMIT_EXTBUFF        (1)
+#else
 #define NR_XMIT_EXTBUFF        (32)
+#endif
 
-#define MAX_CMDBUF_SZ  (4096)
+#define MAX_CMDBUF_SZ  (5120)  //(4096)
 
 #define MAX_NUMBLKS            (1)
 
@@ -144,8 +149,24 @@ do{\
 
 #define HWXMIT_ENTRY   4
 
-#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)|| defined(CONFIG_RTL8192E) || defined(CONFIG_RTL8723B)
+// For Buffer Descriptor ring architecture
+#ifdef BUF_DESC_ARCH   
+#if defined (CONFIG_RTL8192E)
+#define TX_BUFFER_SEG_NUM      1 // 0:2 seg, 1: 4 seg, 2: 8 seg.       
+#endif
+#endif
+
+#if defined(CONFIG_RTL8812A) || defined(CONFIG_RTL8821A)|| defined(CONFIG_RTL8723B) || defined(CONFIG_RTL8814A)
 #define TXDESC_SIZE 40
+//8192EE_TODO
+#elif defined (CONFIG_RTL8192E) // this section is defined for buffer descriptor ring architecture
+       #ifdef CONFIG_PCI_HCI
+               #define TXDESC_SIZE ((TX_BUFFER_SEG_NUM ==0)?16: ((TX_BUFFER_SEG_NUM ==1)? 32:64) )
+               #define TX_WIFI_INFO_SIZE 40  
+       #else  //8192E USB or SDIO
+               #define TXDESC_SIZE 40
+       #endif
+//8192EE_TODO
 #else
 #define TXDESC_SIZE 32
 #endif
@@ -169,9 +190,13 @@ do{\
 #endif
 
 #ifdef CONFIG_PCI_HCI
+#if defined(CONFIG_RTL8192E) // this section is defined for buffer descriptor ring architecture
+#define TXDESC_OFFSET TX_WIFI_INFO_SIZE
+#else
 #define TXDESC_OFFSET 0
+#endif 
 #define TX_DESC_NEXT_DESC_OFFSET       (TXDESC_SIZE + 8)
-#endif
+#endif //CONFIG_PCI_HCI
 
 enum TXDESC_SC{
        SC_DONT_CARE = 0x00,
@@ -186,6 +211,20 @@ enum TXDESC_SC{
 #define TXDESC_40_BYTES
 #endif
 
+#if defined(CONFIG_RTL8192E) && defined(CONFIG_PCI_HCI) //8192ee
+//8192EE_TODO
+struct tx_desc
+{
+       unsigned int txdw0;
+       unsigned int txdw1;
+       unsigned int txdw2;
+       unsigned int txdw3;
+       unsigned int txdw4;
+       unsigned int txdw5;
+       unsigned int txdw6;
+       unsigned int txdw7;
+};
+#else
 struct tx_desc
 {
        unsigned int txdw0;
@@ -216,7 +255,7 @@ struct tx_desc
        unsigned int txdw15;
 #endif
 };
-
+#endif
 
 union txdesc {
        struct tx_desc txdesc;
@@ -227,12 +266,13 @@ union txdesc {
 #define PCI_MAX_TX_QUEUE_COUNT 8
 
 struct rtw_tx_ring {
+       unsigned char   qid;
        struct tx_desc  *desc;
-       dma_addr_t              dma;
-       unsigned int            idx;
-       unsigned int            entries;
-       _queue                  queue;
-       u32                             qlen;
+       dma_addr_t      dma;
+       unsigned int    idx;
+       unsigned int    entries;
+       _queue          queue;
+       u32             qlen;
 };
 #endif
 
@@ -305,6 +345,7 @@ struct pkt_attrib
        u8      dhcp_pkt;
        u16     ether_type;
        u16     seqnum;
+       u8      hw_ssn_sel;     //for HW_SEQ0,1,2,3
        u16     pkt_hdrlen;     //the original 802.3 pkt header len
        u16     hdrlen;         //the WLAN Header Len
        u32     pktlen;         //the original 802.3 pkt raw_data len (not include ether_hdr data)
@@ -331,6 +372,7 @@ struct pkt_attrib
        u8      ch_offset;//PRIME_CHNL_OFFSET
        u8      sgi;//short GI
        u8      ampdu_en;//tx ampdu enable
+       u8      ampdu_spacing; //ampdu_min_spacing for peer sta's rx
        u8      mdata;//more data bit
        u8      pctrl;//per packet txdesc control enable
        u8      triggered;//for ap mode handling Power Saving sta
@@ -491,6 +533,10 @@ struct xmit_buf
 #endif
 #endif
 
+#ifdef CONFIG_PCI_HCI
+       struct tx_desc *desc;
+#endif
+
 #if defined(DBG_XMIT_BUF )|| defined(DBG_XMIT_BUF_EXT)
        u8 no;
 #endif
@@ -524,10 +570,6 @@ struct xmit_frame
        u8      agg_num;
 #endif
        s8      pkt_offset;
-#ifdef CONFIG_RTL8192D
-       u8      EMPktNum;
-       u16     EMPktLen[5];//The max value by HW
-#endif
 #endif
 
 #ifdef CONFIG_XMIT_ACK
@@ -587,6 +629,14 @@ struct agg_pkt_info{
        u16 pkt_len;
 };
 
+enum cmdbuf_type {
+       CMDBUF_BEACON = 0x00,
+       CMDBUF_RSVD,
+       CMDBUF_MAX
+};
+
+u8 rtw_get_hwseq_no(_adapter *padapter);
+
 struct xmit_priv       {
 
        _lock   lock;
@@ -674,7 +724,7 @@ struct      xmit_priv       {
 #endif
 #endif
 
-#ifdef CONFIG_SDIO_HCI
+#if defined (CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
 #ifdef CONFIG_SDIO_TX_TASKLET
        #ifdef PLATFORM_LINUX
        struct tasklet_struct xmit_tasklet;
@@ -697,8 +747,8 @@ struct      xmit_priv       {
        u8 *pxmit_extbuf;
        uint free_xmit_extbuf_cnt;
 
-       struct xmit_buf pcmd_xmitbuf;
-
+       struct xmit_buf pcmd_xmitbuf[CMDBUF_MAX];
+       u8   hw_ssn_seq_no;//mapping to REG_HW_SEQ 0,1,2,3
        u16     nqos_ssn;
        #ifdef CONFIG_TX_EARLY_MODE
 
@@ -720,9 +770,16 @@ struct     xmit_priv       {
        _lock lock_sctx;
 };
 
-extern struct xmit_frame *rtw_alloc_cmdxmitframe(struct xmit_priv *pxmitpriv);
-extern struct xmit_buf *rtw_alloc_cmd_xmitbuf(struct xmit_priv *pxmitpriv);
-extern s32     rtw_free_cmd_xmitbuf(struct xmit_priv *pxmitpriv);
+extern struct xmit_frame *__rtw_alloc_cmdxmitframe(struct xmit_priv *pxmitpriv,
+               enum cmdbuf_type buf_type);
+#define rtw_alloc_cmdxmitframe(p) __rtw_alloc_cmdxmitframe(p, CMDBUF_RSVD)
+#if defined(CONFIG_RTL8192E) && defined(CONFIG_PCI_HCI) 
+extern struct xmit_frame *__rtw_alloc_cmdxmitframe_8192ee(struct xmit_priv *pxmitpriv,
+               enum cmdbuf_type buf_type);
+#define rtw_alloc_bcnxmitframe(p) __rtw_alloc_cmdxmitframe_8192ee(p, CMDBUF_BEACON)
+#else
+#define rtw_alloc_bcnxmitframe(p) __rtw_alloc_cmdxmitframe(p, CMDBUF_BEACON)
+#endif
 
 extern struct xmit_buf *rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv);
 extern s32 rtw_free_xmitbuf_ext(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
@@ -733,7 +790,7 @@ extern s32 rtw_free_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitb
 void rtw_count_tx_stats(_adapter *padapter, struct xmit_frame *pxmitframe, int sz);
 extern void rtw_update_protection(_adapter *padapter, u8 *ie, uint ie_len);
 static s32 update_attrib_sec_info(_adapter *padapter, struct pkt_attrib *pattrib, struct sta_info *psta);
-static void update_attrib_phy_info(struct pkt_attrib *pattrib, struct sta_info *psta);
+static void update_attrib_phy_info(_adapter *padapter, struct pkt_attrib *pattrib, struct sta_info *psta);
 extern s32 rtw_make_wlanhdr(_adapter *padapter, u8 *hdr, struct pkt_attrib *pattrib);
 extern s32 rtw_put_snap(u8 *data, u16 h_proto);
 
@@ -776,7 +833,7 @@ void rtw_free_hwxmits(_adapter *padapter);
 
 
 s32 rtw_xmit(_adapter *padapter, _pkt **pkt);
-
+bool xmitframe_hiq_filter(struct xmit_frame *xmitframe);
 #if defined(CONFIG_AP_MODE) || defined(CONFIG_TDLS)
 sint xmitframe_enqueue_for_sleeping_sta(_adapter *padapter, struct xmit_frame *pxmitframe);
 void stop_sta_xmit(_adapter *padapter, struct sta_info *psta);