1/* SPDX-License-Identifier: GPL-2.0 */
2/******************************************************************************
3 *
4 * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved.
5 *
6 * Modifications for inclusion into the Linux staging tree are
7 * Copyright(c) 2010 Larry Finger. All rights reserved.
8 *
9 * Contact information:
10 * WLAN FAE <wlanfae@realtek.com>
11 * Larry Finger <Larry.Finger@lwfinger.net>
12 *
13 ******************************************************************************/
14#ifndef _RTL8712_XMIT_H_
15#define _RTL8712_XMIT_H_
16
17#define HWXMIT_ENTRY	4
18
19#define VO_QUEUE_INX	0
20#define VI_QUEUE_INX	1
21#define BE_QUEUE_INX	2
22#define BK_QUEUE_INX	3
23#define TS_QUEUE_INX	4
24#define MGT_QUEUE_INX	5
25#define BMC_QUEUE_INX	6
26#define BCN_QUEUE_INX	7
27
28#define HW_QUEUE_ENTRY	8
29
30#define TXDESC_SIZE 32
31#define TXDESC_OFFSET TXDESC_SIZE
32
33#define NR_AMSDU_XMITFRAME 8
34#define NR_TXAGG_XMITFRAME 8
35
36#define MAX_AMSDU_XMITBUF_SZ 8704
37#define MAX_TXAGG_XMITBUF_SZ 16384 /*16k*/
38
39#define tx_cmd tx_desc
40
41/*
42 *defined for TX DESC Operation
43 */
44
45#define MAX_TID (15)
46
47/*OFFSET 0*/
48#define OFFSET_SZ (0)
49#define OFFSET_SHT (16)
50#define OWN	BIT(31)
51#define FSG	BIT(27)
52#define LSG	BIT(26)
53#define TYPE_SHT (24)
54#define TYPE_MSK (0x03000000)
55
56/*OFFSET 4*/
57#define PKT_OFFSET_SZ (0)
58#define QSEL_SHT (8)
59#define HWPC BIT(31)
60
61/*OFFSET 8*/
62#define BMC BIT(7)
63#define BK BIT(30)
64#define AGG_EN BIT(29)
65#define RTS_RC_SHT (16)
66
67/*OFFSET 12*/
68#define SEQ_SHT (16)
69
70/*OFFSET 16*/
71#define TXBW BIT(18)
72
73/*OFFSET 20*/
74#define DISFB BIT(15)
75#define RSVD6_MSK (0x00E00000)
76#define RSVD6_SHT (21)
77
78struct tx_desc {
79	/*DWORD 0*/
80	__le32 txdw0;
81	__le32 txdw1;
82	__le32 txdw2;
83	__le32 txdw3;
84	__le32 txdw4;
85	__le32 txdw5;
86	__le32 txdw6;
87	__le32 txdw7;
88};
89
90union txdesc {
91	struct tx_desc txdesc;
92	unsigned int value[TXDESC_SIZE >> 2];
93};
94
95int r8712_xmitframe_complete(struct _adapter *padapter,
96			     struct xmit_priv *pxmitpriv,
97			     struct xmit_buf *pxmitbuf);
98void r8712_do_queue_select(struct _adapter *padapter,
99			   struct pkt_attrib *pattrib);
100
101#ifdef CONFIG_R8712_TX_AGGR
102void r8712_xmitframe_aggr_1st(struct xmit_buf *pxmitbuf,
103			      struct xmit_frame *pxmitframe);
104void r8712_dump_aggr_xframe(struct xmit_buf *pxmitbuf,
105			    struct xmit_frame *pxmitframe);
106#endif
107
108#endif
109