/******************************************************************************
 *
 * 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.
 *
 ******************************************************************************/
#ifndef _RTW_XMIT_H_
#define _RTW_XMIT_H_

#include <osdep_service.h>
#include <drv_types.h>

#define MAX_XMITBUF_SZ		2048
#define NR_XMITBUFF		4

#define XMITBUF_ALIGN_SZ	512

/*  xmit extension buff defination */
#define MAX_XMIT_EXTBUF_SZ	1536
#define NR_XMIT_EXTBUFF		32

#define MAX_NUMBLKS		1

#define XMIT_VO_QUEUE		0
#define XMIT_VI_QUEUE		1
#define XMIT_BE_QUEUE		2
#define XMIT_BK_QUEUE		3

#define VO_QUEUE_INX		0
#define VI_QUEUE_INX		1
#define BE_QUEUE_INX		2
#define BK_QUEUE_INX		3
#define BCN_QUEUE_INX		4
#define MGT_QUEUE_INX		5
#define HIGH_QUEUE_INX		6
#define TXCMD_QUEUE_INX		7

#define HW_QUEUE_ENTRY		8

#define WEP_IV(pattrib_iv, dot11txpn, keyidx)				\
do {									\
	pattrib_iv[0] = dot11txpn._byte_.TSC0;				\
	pattrib_iv[1] = dot11txpn._byte_.TSC1;				\
	pattrib_iv[2] = dot11txpn._byte_.TSC2;				\
	pattrib_iv[3] = ((keyidx & 0x3) << 6);				\
	dot11txpn.val = (dot11txpn.val == 0xffffff) ? 0 :		\
			 (dot11txpn.val+1);				\
} while (0)

#define TKIP_IV(pattrib_iv, dot11txpn, keyidx)				\
do {									\
	pattrib_iv[0] = dot11txpn._byte_.TSC1;				\
	pattrib_iv[1] = (dot11txpn._byte_.TSC1 | 0x20) & 0x7f;		\
	pattrib_iv[2] = dot11txpn._byte_.TSC0;				\
	pattrib_iv[3] = BIT(5) | ((keyidx & 0x3)<<6);			\
	pattrib_iv[4] = dot11txpn._byte_.TSC2;				\
	pattrib_iv[5] = dot11txpn._byte_.TSC3;				\
	pattrib_iv[6] = dot11txpn._byte_.TSC4;				\
	pattrib_iv[7] = dot11txpn._byte_.TSC5;				\
	dot11txpn.val = dot11txpn.val == 0xffffffffffffULL ? 0 :	\
					 (dot11txpn.val+1);		\
} while (0)

#define AES_IV(pattrib_iv, dot11txpn, keyidx)\
do {									\
	pattrib_iv[0] = dot11txpn._byte_.TSC0;				\
	pattrib_iv[1] = dot11txpn._byte_.TSC1;				\
	pattrib_iv[2] = 0;						\
	pattrib_iv[3] = BIT(5) | ((keyidx & 0x3) << 6);			\
	pattrib_iv[4] = dot11txpn._byte_.TSC2;				\
	pattrib_iv[5] = dot11txpn._byte_.TSC3;				\
	pattrib_iv[6] = dot11txpn._byte_.TSC4;				\
	pattrib_iv[7] = dot11txpn._byte_.TSC5;				\
	dot11txpn.val = dot11txpn.val == 0xffffffffffffULL ? 0 :	\
					 (dot11txpn.val+1);		\
} while (0)

#define HWXMIT_ENTRY	4

#define TXDESC_SIZE 32

#define PACKET_OFFSET_SZ 8
#define TXDESC_OFFSET (TXDESC_SIZE + PACKET_OFFSET_SZ)

struct tx_desc {
	/* DWORD 0 */
	__le32 txdw0;
	__le32 txdw1;
	__le32 txdw2;
	__le32 txdw3;
	__le32 txdw4;
	__le32 txdw5;
	__le32 txdw6;
	__le32 txdw7;
};

union txdesc {
	struct tx_desc txdesc;
	unsigned int value[TXDESC_SIZE>>2];
};

struct	hw_xmit	{
	struct rtw_queue *sta_queue;
	int	accnt;
};

/* reduce size */
struct pkt_attrib {
	u16	type;
	u8	bswenc;
	u8	dhcp_pkt;
	u16	ether_type;
	u16	seqnum;
	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 */
	u32	last_txcmdsz;
	u32	encrypt;	/* when 0 indicate no encrypt. */
	u8	nr_frags;
	u8	iv_len;
	u8	icv_len;
	u8	iv[18];
	u8	icv[16];
	u8	priority;
	u8	ack_policy;
	u8	mac_id;
	u8	vcs_mode;	/* virtual carrier sense method */
	u8	dst[ETH_ALEN];
	u8	src[ETH_ALEN];
	u8	ta[ETH_ALEN];
	u8	ra[ETH_ALEN];
	u8	key_idx;
	u8	qos_en;
	u8	ht_en;
	u8	raid;/* rate adpative id */
	u8	bwmode;
	u8	ch_offset;/* PRIME_CHNL_OFFSET */
	u8	sgi;/* short GI */
	u8	ampdu_en;/* tx ampdu enable */
	u8	mdata;/* more data bit */
	u8	pctrl;/* per packet txdesc control enable */
	u8	triggered;/* for ap mode handling Power Saving sta */
	u8	qsel;
	u8	eosp;
	u8	rate;
	u8	retry_ctrl;
	struct sta_info *psta;
};

#define WLANHDR_OFFSET		64

#define NULL_FRAMETAG		0x0
#define DATA_FRAMETAG		0x01
#define L2_FRAMETAG		0x02
#define MGNT_FRAMETAG		0x03
#define AMSDU_FRAMETAG		0x04

#define EII_FRAMETAG		0x05
#define IEEE8023_FRAMETAG 	0x06

#define MP_FRAMETAG		0x07

#define TXAGG_FRAMETAG		0x08

struct  submit_ctx {
	u32 timeout_ms; /* <0: not synchronous, 0: wait forever,
			 * >0: up to ms waiting
			 */
	int status; /* status for operation */
	struct completion done;
};

enum {
	RTW_SCTX_SUBMITTED = -1,
	RTW_SCTX_DONE_SUCCESS = 0,
	RTW_SCTX_DONE_UNKNOWN,
	RTW_SCTX_DONE_TIMEOUT,
	RTW_SCTX_DONE_BUF_ALLOC,
	RTW_SCTX_DONE_BUF_FREE,
	RTW_SCTX_DONE_WRITE_PORT_ERR,
	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,
};

void rtw_sctx_init23a(struct submit_ctx *sctx, int timeout_ms);
int rtw_sctx_wait23a(struct submit_ctx *sctx);
void rtw23a_sctx_done_err(struct submit_ctx **sctx, int status);
void rtw_sctx_done23a(struct submit_ctx **sctx);

struct xmit_buf {
	struct list_head list, list2;
	struct rtw_adapter *padapter;

	u8 *pallocated_buf;
	u8 *pbuf;
	void *priv_data;

	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];
	u8 bpending[8];
	int last[8];
#if defined(DBG_XMIT_BUF) || defined(DBG_XMIT_BUF_EXT)
	u8 no;
#endif
};

struct xmit_frame {
	struct list_head	list;
	struct pkt_attrib attrib;
	struct sk_buff *pkt;
	int	frame_tag;
	struct rtw_adapter *padapter;
	u8	*buf_addr;
	struct xmit_buf *pxmitbuf;

	s8	pkt_offset;

	u8 ack_report;

	u8 ext_tag; /* 0:data, 1:mgmt */
};

struct tx_servq {
	struct list_head	tx_pending;
	struct rtw_queue	sta_pending;
	int qcnt;
};

struct sta_xmit_priv {
	spinlock_t	lock;
	int	option;
	int	apsd_setting;	/* When bit mask is on, the associated edca
				 * queue supports APSD.
				 */
	struct tx_servq	be_q;			/* priority == 0,3 */
	struct tx_servq	bk_q;			/* priority == 1,2 */
	struct tx_servq	vi_q;			/* priority == 4,5 */
	struct tx_servq	vo_q;			/* priority == 6,7 */
	struct list_head legacy_dz;
	struct list_head apsd;
	u16 txseq_tid[16];
};

struct	hw_txqueue {
	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;
	int	ac_tag;
};

struct agg_pkt_info {
	u16 offset;
	u16 pkt_len;
};

struct	xmit_priv {
	spinlock_t	lock;

	struct semaphore	xmit_sema;
	struct semaphore	terminate_xmitthread_sema;

	struct rtw_queue	be_pending;
	struct rtw_queue	bk_pending;
	struct rtw_queue	vi_pending;
	struct rtw_queue	vo_pending;
	struct rtw_queue	bm_pending;

	int free_xmitframe_cnt;
	struct rtw_queue	free_xmit_queue;

	int free_xframe_ext_cnt;
	struct rtw_queue free_xframe_ext_queue;

	uint	frag_len;

	struct rtw_adapter	*adapter;

	u8   vcs_setting;
	u8	vcs;
	u8	vcs_type;

	u64	tx_bytes;
	u64	tx_pkts;
	u64	tx_drop;
	u64	last_tx_bytes;
	u64	last_tx_pkts;

	struct hw_xmit *hwxmits;
	u8	hwxmit_entry;

	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.
				 */

	struct semaphore	tx_retevt;/* all tx return event; */
	u8		txirp_cnt;/*  */

	struct tasklet_struct xmit_tasklet;
	/* per AC pending irp */
	int beq_cnt;
	int bkq_cnt;
	int viq_cnt;
	int voq_cnt;

	struct rtw_queue free_xmitbuf_queue;
	struct list_head xmitbuf_list;		/* track buffers for cleanup */
	struct rtw_queue pending_xmitbuf_queue;
	uint free_xmitbuf_cnt;

	struct rtw_queue free_xmit_extbuf_queue;
	struct list_head xmitextbuf_list;	/* track buffers for cleanup */
	uint free_xmit_extbuf_cnt;

	u16	nqos_ssn;
	int	ack_tx;
	struct mutex ack_tx_mutex;
	struct submit_ctx ack_tx_ops;
	spinlock_t lock_sctx;
};

struct xmit_buf *rtw_alloc_xmitbuf23a_ext(struct xmit_priv *pxmitpriv);
s32 rtw_free_xmitbuf_ext23a(struct xmit_priv *pxmitpriv,
			 struct xmit_buf *pxmitbuf);

struct xmit_buf *rtw_alloc_xmitbuf23a(struct xmit_priv *pxmitpriv);
s32 rtw_free_xmitbuf23a(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);

void rtw_count_tx_stats23a(struct rtw_adapter *padapter,
			struct xmit_frame *pxmitframe, int sz);
void rtw_update_protection23a(struct rtw_adapter *padapter, u8 *ie, uint ie_len);
s32 rtw_put_snap23a(u8 *data, u16 h_proto);
struct xmit_frame *rtw_alloc_xmitframe23a_ext(struct xmit_priv *pxmitpriv);
struct xmit_frame *rtw_alloc_xmitframe23a_once(struct xmit_priv *pxmitpriv);
s32 rtw_free_xmitframe23a(struct xmit_priv *pxmitpriv,
		       struct xmit_frame *pxmitframe);
void rtw_free_xmitframe_queue23a(struct xmit_priv *pxmitpriv, struct rtw_queue *pframequeue);
struct tx_servq *rtw_get_sta_pending23a(struct rtw_adapter *padapter,
				     struct sta_info *psta, int up, u8 *ac);
s32 rtw_xmitframe_enqueue23a(struct rtw_adapter *padapter,
			     struct xmit_frame *pxmitframe);
struct xmit_frame *rtw_dequeue_xframe23a(struct xmit_priv *pxmitpriv,
				      struct hw_xmit *phwxmit_i, int entry);
s32 rtw_xmit23a_classifier(struct rtw_adapter *padapter,
			struct xmit_frame *pxmitframe);
u32 rtw_calculate_wlan_pkt_size_by_attribue23a(struct pkt_attrib *pattrib);
#define rtw_wlan_pkt_size(f) rtw_calculate_wlan_pkt_size_by_attribue23a(&f->attrib)
s32 rtw_xmitframe_coalesce23a(struct rtw_adapter *padapter, struct sk_buff *pkt,
			      struct xmit_frame *pxmitframe);
s32 _rtw_init_hw_txqueue(struct hw_txqueue *phw_txqueue, u8 ac_tag);
void _rtw_init_sta_xmit_priv23a(struct sta_xmit_priv *psta_xmitpriv);

s32 rtw_txframes_pending23a(struct rtw_adapter *padapter);
s32 rtw_txframes_sta_ac_pending23a(struct rtw_adapter *padapter,
				struct pkt_attrib *pattrib);
void rtw_init_hwxmits23a(struct hw_xmit *phwxmit, int entry);
int _rtw_init_xmit_priv23a(struct xmit_priv *pxmitpriv,
			struct rtw_adapter *padapter);
void _rtw_free_xmit_priv23a(struct xmit_priv *pxmitpriv);
void rtw_alloc_hwxmits23a(struct rtw_adapter *padapter);
void rtw_free_hwxmits23a(struct rtw_adapter *padapter);
int rtw_xmit23a(struct rtw_adapter *padapter, struct sk_buff *pkt);
#if defined(CONFIG_8723AU_AP_MODE)
int xmitframe_enqueue_for_sleeping_sta23a(struct rtw_adapter *padapter,
				       struct xmit_frame *pxmitframe);
void stop_sta_xmit23a(struct rtw_adapter *padapter, struct sta_info *psta);
void wakeup_sta_to_xmit23a(struct rtw_adapter *padapter, struct sta_info *psta);
void xmit_delivery_enabled_frames23a(struct rtw_adapter *padapter,
				  struct sta_info *psta);
#endif
u8	qos_acm23a(u8 acm_mask, u8 priority);
u32	rtw_get_ff_hwaddr23a(struct xmit_frame	*pxmitframe);
int rtw_ack_tx_wait23a(struct xmit_priv *pxmitpriv, u32 timeout_ms);
void rtw_ack_tx_done23a(struct xmit_priv *pxmitpriv, int status);

/* include after declaring struct xmit_buf, in order to avoid warning */
#include <xmit_osdep.h>

#endif	/* _RTL871X_XMIT_H_ */
