1 /******************************************************************************
2  * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
3  *
4  * This program is distributed in the hope that it will be useful, but WITHOUT
5  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
7  * more details.
8  *
9  * You should have received a copy of the GNU General Public License along with
10  * this program; if not, write to the Free Software Foundation, Inc.,
11  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
12  *
13  * The full GNU General Public License is included in this distribution in the
14  * file called LICENSE.
15  *
16  * Contact Information:
17  * wlanfae <wlanfae@realtek.com>
18 ******************************************************************************/
19 #ifndef R819XUSB_CMDPKT_H
20 #define R819XUSB_CMDPKT_H
21 #define	CMPK_RX_TX_FB_SIZE		sizeof(struct cmpk_txfb)
22 #define CMPK_TX_SET_CONFIG_SIZE		sizeof(struct cmpk_set_cfg)
23 #define CMPK_BOTH_QUERY_CONFIG_SIZE	sizeof(struct cmpk_set_cfg)
24 #define CMPK_RX_TX_STS_SIZE		sizeof(struct cmpk_tx_status)
25 #define CMPK_RX_DBG_MSG_SIZE		sizeof(struct cmpk_rx_dbginfo)
26 #define	CMPK_TX_RAHIS_SIZE		sizeof(struct cmpk_tx_rahis)
27 
28 #define ISR_TxBcnOk			BIT27
29 #define ISR_TxBcnErr			BIT26
30 #define ISR_BcnTimerIntr		BIT13
31 
32 
33 struct cmpk_txfb {
34 	u8	element_id;
35 	u8	length;
36 	u8	TID:4;				/* */
37 	u8	fail_reason:3;		/* */
38 	u8	tok:1;
39 	u8	reserve1:4;			/* */
40 	u8	pkt_type:2;		/* */
41 	u8	bandwidth:1;		/* */
42 	u8	qos_pkt:1;			/* */
43 
44 	u8	reserve2;			/* */
45 	u8	retry_cnt;			/* */
46 	u16	pkt_id;				/* */
47 
48 	u16	seq_num;			/* */
49 	u8	s_rate;
50 	u8	f_rate;
51 
52 	u8	s_rts_rate;			/* */
53 	u8	f_rts_rate;			/* */
54 	u16	pkt_length;			/* */
55 
56 	u16	reserve3;			/* */
57 	u16	duration;			/* */
58 };
59 
60 struct cmpk_intr_sta {
61 	u8	element_id;
62 	u8	length;
63 	u16	reserve;
64 	u32	interrupt_status;
65 };
66 
67 
68 struct cmpk_set_cfg {
69 	u8	element_id;
70 	u8	length;
71 	u16	reserve1;
72 	u8	cfg_reserve1:3;
73 	u8	cfg_size:2;
74 	u8	cfg_type:2;
75 	u8	cfg_action:1;
76 	u8	cfg_reserve2;
77 	u8	cfg_page:4;
78 	u8	cfg_reserve3:4;
79 	u8	cfg_offset;
80 	u32	value;
81 	u32	mask;
82 };
83 
84 #define		cmpk_query_cfg_t	struct cmpk_set_cfg
85 
86 struct cmpk_tx_status {
87 	u16	reserve1;
88 	u8	length;
89 	u8	element_id;
90 
91 	u16	txfail;
92 	u16	txok;
93 
94 	u16	txmcok;
95 	u16	txretry;
96 
97 	u16  txucok;
98 	u16	txbcok;
99 
100 	u16	txbcfail;
101 	u16	txmcfail;
102 
103 	u16	reserve2;
104 	u16	txucfail;
105 
106 	u32	txmclength;
107 	u32	txbclength;
108 	u32	txuclength;
109 
110 	u16	reserve3_23;
111 	u8	reserve3_1;
112 	u8	rate;
113 } __packed;
114 
115 struct cmpk_rx_dbginfo {
116 	u16	reserve1;
117 	u8	length;
118 	u8	element_id;
119 
120 
121 };
122 
123 struct cmpk_tx_rahis {
124 	u8	element_id;
125 	u8	length;
126 	u16	reserved1;
127 
128 	u16	cck[4];
129 
130 	u16	ofdm[8];
131 
132 
133 
134 
135 
136 	u16	ht_mcs[4][16];
137 
138 } __packed;
139 
140 enum cmpk_element {
141 	RX_TX_FEEDBACK = 0,
142 	RX_INTERRUPT_STATUS		= 1,
143 	TX_SET_CONFIG			= 2,
144 	BOTH_QUERY_CONFIG		= 3,
145 	RX_TX_STATUS			= 4,
146 	RX_DBGINFO_FEEDBACK		= 5,
147 	RX_TX_PER_PKT_FEEDBACK		= 6,
148 	RX_TX_RATE_HISTORY		= 7,
149 	RX_CMD_ELE_MAX
150 };
151 
152 extern  u32 cmpk_message_handle_rx(struct net_device *dev,
153 				   struct rtllib_rx_stats *pstats);
154 extern bool cmpk_message_handle_tx(struct net_device *dev,
155 				   u8 *codevirtualaddress, u32 packettype,
156 				   u32 buffer_len);
157 
158 
159 #endif
160