#include <drv_types.h>
#ifdef CONFIG_USB_TX_AGGREGATION
-#define MAX_XMITBUF_SZ 20480 // 20k
+#define MAX_XMITBUF_SZ (20480) // 20k
#else
#define MAX_XMITBUF_SZ (2048)
#endif
pattrib_iv[2] = dot11txpn._byte_.TSC2;\
pattrib_iv[3] = ((keyidx & 0x3)<<6);\
dot11txpn.val = (dot11txpn.val == 0xffffff) ? 0: (dot11txpn.val+1);\
-}while (0)
+}while(0)
#define TKIP_IV(pattrib_iv, dot11txpn, keyidx)\
pattrib_iv[6] = dot11txpn._byte_.TSC4;\
pattrib_iv[7] = dot11txpn._byte_.TSC5;\
dot11txpn.val = dot11txpn.val == 0xffffffffffffULL ? 0: (dot11txpn.val+1);\
-}while (0)
+}while(0)
#define AES_IV(pattrib_iv, dot11txpn, keyidx)\
do{\
pattrib_iv[6] = dot11txpn._byte_.TSC4;\
pattrib_iv[7] = dot11txpn._byte_.TSC5;\
dot11txpn.val = dot11txpn.val == 0xffffffffffffULL ? 0: (dot11txpn.val+1);\
-}while (0)
+}while(0)
#define HWXMIT_ENTRY 4
#define EARLY_MODE_INFO_SIZE 8
#endif
+
#define PACKET_OFFSET_SZ (8)
#define TXDESC_OFFSET (TXDESC_SIZE + PACKET_OFFSET_SZ)
-
struct tx_desc{
+
//DWORD 0
unsigned int txdw0;
+
unsigned int txdw1;
+
unsigned int txdw2;
+
unsigned int txdw3;
+
unsigned int txdw4;
+
unsigned int txdw5;
+
unsigned int txdw6;
+
unsigned int txdw7;
};
+
union txdesc {
struct tx_desc txdesc;
unsigned int value[TXDESC_SIZE>>2];
};
struct hw_xmit {
+ //spinlock_t xmit_lock;
+ //struct list_head pending;
_queue *sta_queue;
+ //struct hw_txqueue *phwtxqueue;
+ //int txcmdcnt;
int accnt;
};
RTW_SCTX_DONE_TX_DESC_NA,
RTW_SCTX_DONE_TX_DENY,
RTW_SCTX_DONE_CCX_PKT_FAIL,
+ RTW_SCTX_DONE_DRV_STOP,
+ RTW_SCTX_DONE_DEV_REMOVE,
};
struct xmit_buf
{
- _list list;
+ struct list_head list;
_adapter *padapter;
u16 ext_tag; // 0: Normal xmitbuf, 1: extension xmitbuf.
u16 flags;
u32 alloc_sz;
-
u32 len;
-
struct submit_ctx *sctx;
-
u32 ff_hwaddr;
-
struct urb *pxmit_urb[8];
dma_addr_t dma_transfer_addr; /* (in) dma addr for transfer_buffer */
-
u8 bpending[8];
-
- sint last[8];
-
-
+ int last[8];
#if defined(DBG_XMIT_BUF )|| defined(DBG_XMIT_BUF_EXT)
u8 no;
#endif
-
};
-
-struct xmit_frame
-{
- _list list;
-
+struct xmit_frame {
+ struct list_head list;
struct pkt_attrib attrib;
-
struct sk_buff *pkt;
-
int frame_tag;
-
_adapter *padapter;
-
u8 *buf_addr;
-
struct xmit_buf *pxmitbuf;
#ifdef CONFIG_USB_TX_AGGREGATION
u8 agg_num;
#endif
s8 pkt_offset;
+#ifdef CONFIG_RTL8192D
+ u8 EMPktNum;
+ u16 EMPktLen[5];//The max value by HW
+#endif
#ifdef CONFIG_XMIT_ACK
u8 ack_report;
#endif
+ u8 *alloc_addr; /* the actual address this xmitframe allocated */
+ u8 ext_tag; /* 0:data, 1:mgmt */
+
};
struct tx_servq {
- _list tx_pending;
+ struct list_head tx_pending;
_queue sta_pending;
int qcnt;
};
struct sta_xmit_priv
{
- _lock lock;
- sint option;
- sint apsd_setting; //When bit mask is on, the associated edca queue supports APSD.
+ spinlock_t lock;
+ int option;
+ int apsd_setting; //When bit mask is on, the associated edca queue supports APSD.
//struct tx_servq blk_q[MAX_NUMBLKS];
struct tx_servq bk_q; //priority == 1,2
struct tx_servq vi_q; //priority == 4,5
struct tx_servq vo_q; //priority == 6,7
- _list legacy_dz;
- _list apsd;
+ struct list_head legacy_dz;
+ struct list_head apsd;
u16 txseq_tid[16];
struct hw_txqueue {
- volatile sint head;
- volatile sint tail;
- volatile sint free_sz; //in units of 64 bytes
- volatile sint free_cmdsz;
- volatile sint txsz[8];
+ volatile int head;
+ volatile int tail;
+ volatile int free_sz; //in units of 64 bytes
+ volatile int free_cmdsz;
+ volatile int txsz[8];
uint ff_hwaddr;
uint cmd_hwaddr;
- sint ac_tag;
+ int ac_tag;
};
struct agg_pkt_info{
struct xmit_priv {
- _lock lock;
+ spinlock_t lock;
- _sema xmit_sema;
- _sema terminate_xmitthread_sema;
+ struct semaphore xmit_sema;
+ struct semaphore terminate_xmitthread_sema;
//_queue blk_strms[MAX_NUMBLKS];
_queue be_pending;
u8 *pallocated_frame_buf;
u8 *pxmit_frame_buf;
uint free_xmitframe_cnt;
+ _queue free_xmit_queue;
//uint mapping_addr;
//uint pkt_sz;
- _queue free_xmit_queue;
+ u8 *xframe_ext_alloc_addr;
+ u8 *xframe_ext;
+ uint free_xframe_ext_cnt;
+ _queue free_xframe_ext_queue;
//struct hw_txqueue be_txqueue;
//struct hw_txqueue bk_txqueue;
u8 wmm_para_seq[4];//sequence for wmm ac parameter strength from large to small. it's value is 0->vo, 1->vi, 2->be, 3->bk.
- _sema tx_retevt;//all tx return event;
+ struct semaphore tx_retevt;//all tx return event;
u8 txirp_cnt;//
struct tasklet_struct xmit_tasklet;
#ifdef CONFIG_XMIT_ACK
int ack_tx;
- _mutex ack_tx_mutex;
+ struct mutex ack_tx_mutex;
struct submit_ctx ack_tx_ops;
#endif
-
+ spinlock_t lock_sctx;
};
extern struct xmit_buf *rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv);
extern s32 rtw_put_snap(u8 *data, u16 h_proto);
extern struct xmit_frame *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv);
+struct xmit_frame *rtw_alloc_xmitframe_ext(struct xmit_priv *pxmitpriv);
+struct xmit_frame *rtw_alloc_xmitframe_once(struct xmit_priv *pxmitpriv);
extern s32 rtw_free_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe);
extern void rtw_free_xmitframe_queue(struct xmit_priv *pxmitpriv, _queue *pframequeue);
-struct tx_servq *rtw_get_sta_pending(_adapter *padapter, struct sta_info *psta, sint up, u8 *ac);
+struct tx_servq *rtw_get_sta_pending(_adapter *padapter, struct sta_info *psta, int up, u8 *ac);
extern s32 rtw_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
-extern struct xmit_frame* rtw_dequeue_xframe(struct xmit_priv *pxmitpriv, struct hw_xmit *phwxmit_i, sint entry);
+extern struct xmit_frame* rtw_dequeue_xframe(struct xmit_priv *pxmitpriv, struct hw_xmit *phwxmit_i, int entry);
extern s32 rtw_xmit_classifier(_adapter *padapter, struct xmit_frame *pxmitframe);
extern u32 rtw_calculate_wlan_pkt_size_by_attribue(struct pkt_attrib *pattrib);
s32 rtw_txframes_pending(_adapter *padapter);
s32 rtw_txframes_sta_ac_pending(_adapter *padapter, struct pkt_attrib *pattrib);
-void rtw_init_hwxmits(struct hw_xmit *phwxmit, sint entry);
+void rtw_init_hwxmits(struct hw_xmit *phwxmit, int entry);
s32 _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, _adapter *padapter);
s32 rtw_xmit(_adapter *padapter, struct sk_buff **pkt);
#if defined(CONFIG_AP_MODE) || defined(CONFIG_TDLS)
-sint xmitframe_enqueue_for_sleeping_sta(_adapter *padapter, struct xmit_frame *pxmitframe);
+int xmitframe_enqueue_for_sleeping_sta(_adapter *padapter, struct xmit_frame *pxmitframe);
void stop_sta_xmit(_adapter *padapter, struct sta_info *psta);
void wakeup_sta_to_xmit(_adapter *padapter, struct sta_info *psta);
void xmit_delivery_enabled_frames(_adapter *padapter, struct sta_info *psta);
void enqueue_pending_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
struct xmit_buf* dequeue_pending_xmitbuf(struct xmit_priv *pxmitpriv);
struct xmit_buf* dequeue_pending_xmitbuf_under_survey(struct xmit_priv *pxmitpriv);
-sint check_pending_xmitbuf(struct xmit_priv *pxmitpriv);
-thread_return rtw_xmit_thread(thread_context context);
+int check_pending_xmitbuf(struct xmit_priv *pxmitpriv);
+int rtw_xmit_thread(void *context);
#endif
u32 rtw_get_ff_hwaddr(struct xmit_frame *pxmitframe);