// 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)
#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
#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,
#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;
unsigned int txdw15;
#endif
};
-
+#endif
union txdesc {
struct tx_desc 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
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)
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
#endif
#endif
+#ifdef CONFIG_PCI_HCI
+ struct tx_desc *desc;
+#endif
+
#if defined(DBG_XMIT_BUF )|| defined(DBG_XMIT_BUF_EXT)
u8 no;
#endif
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
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;
#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;
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
_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);
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);
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);