#include <osdep_service.h>
#include <drv_types.h>
-#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
-//#define MAX_XMITBUF_SZ (30720)// (2048)
-#ifdef CONFIG_TX_AGGREGATION
-#define MAX_XMITBUF_SZ (20480) // 20k
-#else
-#define MAX_XMITBUF_SZ (12288) //12k 1536*8
-#endif
-
-#if defined CONFIG_SDIO_HCI
-#define NR_XMITBUFF (16)
-#endif
-#if defined(CONFIG_GSPI_HCI)
-#define NR_XMITBUFF (128)
-#endif
-
-#elif defined (CONFIG_USB_HCI)
+#if defined (CONFIG_USB_HCI)
#ifdef CONFIG_USB_TX_AGGREGATION
-#define MAX_XMITBUF_SZ 20480 // 20k
+#define MAX_XMITBUF_SZ (20480) // 20k
#else
#define MAX_XMITBUF_SZ (2048)
#endif
#else
#define NR_XMITBUFF (4)
#endif //CONFIG_SINGLE_XMIT_BUF
-#elif defined (CONFIG_PCI_HCI)
-#define MAX_XMITBUF_SZ (1664)
-#define NR_XMITBUFF (128)
#endif
-#ifdef CONFIG_PCI_HCI
-#define XMITBUF_ALIGN_SZ 4
-#else
#define XMITBUF_ALIGN_SZ 512
-#endif
// xmit extension buff defination
#define MAX_XMIT_EXTBUF_SZ (1536)
#define HW_QUEUE_ENTRY 8
-#ifdef CONFIG_PCI_HCI
-//#define TXDESC_NUM 64
-#define TXDESC_NUM 128
-#define TXDESC_NUM_BE_QUEUE 128
-#endif
-
#define WEP_IV(pattrib_iv, dot11txpn, keyidx)\
do{\
pattrib_iv[0] = dot11txpn._byte_.TSC0;\
#endif
-#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
-#define TXDESC_OFFSET TXDESC_SIZE
-
-#endif
-
#ifdef CONFIG_USB_HCI
#define PACKET_OFFSET_SZ (8)
#define TXDESC_OFFSET (TXDESC_SIZE + PACKET_OFFSET_SZ)
#endif
-#ifdef CONFIG_PCI_HCI
-#define TXDESC_OFFSET 0
-#define TX_DESC_NEXT_DESC_OFFSET 40
-#endif
-
-
-
struct tx_desc{
//DWORD 0
unsigned int txdw6;
unsigned int txdw7;
-#ifdef CONFIG_PCI_HCI
- unsigned int txdw8;
-
- unsigned int txdw9;
-
- unsigned int txdw10;
-
- unsigned int txdw11;
-
- // 2008/05/15 MH Because PCIE HW memory R/W 4K limit. And now, our descriptor
- // size is 40 bytes. If you use more than 102 descriptor( 103*40>4096), HW will execute
- // memoryR/W CRC error. And then all DMA fetch will fail. We must decrease descriptor
- // number or enlarge descriptor size as 64 bytes.
- unsigned int txdw12;
-
- unsigned int txdw13;
-
- unsigned int txdw14;
-
- unsigned int txdw15;
-#endif
};
unsigned int value[TXDESC_SIZE>>2];
};
-#ifdef CONFIG_PCI_HCI
-#define PCI_MAX_TX_QUEUE_COUNT 8
-
-struct rtw_tx_ring {
- struct tx_desc *desc;
- dma_addr_t dma;
- unsigned int idx;
- unsigned int entries;
- _queue queue;
- u32 qlen;
-};
-#endif
-
struct hw_xmit {
- //_lock xmit_lock;
+ //spinlock_t xmit_lock;
//_list pending;
_queue *sta_queue;
//struct hw_txqueue *phwtxqueue;
- //sint txcmdcnt;
+ //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,
};
u8 bpending[8];
- sint last[8];
+ int last[8];
#endif
-#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
- u8 *phead;
- u8 *pdata;
- u8 *ptail;
- u8 *pend;
- u32 ff_hwaddr;
- u8 pg_num;
- u8 agg_num;
-#endif
-
#if defined(DBG_XMIT_BUF )|| defined(DBG_XMIT_BUF_EXT)
u8 no;
#endif
struct xmit_buf *pxmitbuf;
-#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
- u8 pg_num;
- u8 agg_num;
-#endif
-
#ifdef CONFIG_USB_HCI
#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
#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 {
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 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.
#ifdef CONFIG_USB_HCI
- _sema tx_retevt;//all tx return event;
+ struct semaphore tx_retevt;//all tx return event;
u8 txirp_cnt;//
struct tasklet_struct xmit_tasklet;
#endif
-#ifdef CONFIG_PCI_HCI
- // Tx
- struct rtw_tx_ring tx_ring[PCI_MAX_TX_QUEUE_COUNT];
- int txringcount[PCI_MAX_TX_QUEUE_COUNT];
- u8 beaconDMAing; //flag of indicating beacon is transmiting to HW by DMA
- struct tasklet_struct xmit_tasklet;
-#endif
-
-#ifdef CONFIG_SDIO_HCI
-#ifdef CONFIG_SDIO_TX_TASKLET
- struct tasklet_struct xmit_tasklet;
-#endif
-#endif
-
_queue free_xmitbuf_queue;
_queue pending_xmitbuf_queue;
u8 *pallocated_xmitbuf;
u16 nqos_ssn;
#ifdef CONFIG_TX_EARLY_MODE
- #ifdef CONFIG_SDIO_HCI
- #define MAX_AGG_PKT_NUM 20
- #else
#define MAX_AGG_PKT_NUM 256 //Max tx ampdu coounts
- #endif
struct agg_pkt_info agg_pkt[MAX_AGG_PKT_NUM];
#endif
_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, _pkt **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);
+int check_pending_xmitbuf(struct xmit_priv *pxmitpriv);
thread_return rtw_xmit_thread(thread_context context);
#endif