|
1 /* |
|
2 * public_descriptors.h |
|
3 * |
|
4 * Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved. |
|
5 * All rights reserved. |
|
6 * |
|
7 * This program and the accompanying materials are made available under the |
|
8 * terms of the Eclipse Public License v1.0 or BSD License which accompanies |
|
9 * this distribution. The Eclipse Public License is available at |
|
10 * http://www.eclipse.org/legal/epl-v10.html and the BSD License is as below. |
|
11 * |
|
12 * Redistribution and use in source and binary forms, with or without |
|
13 * modification, are permitted provided that the following conditions |
|
14 * are met: |
|
15 * |
|
16 * * Redistributions of source code must retain the above copyright |
|
17 * notice, this list of conditions and the following disclaimer. |
|
18 * * Redistributions in binary form must reproduce the above copyright |
|
19 * notice, this list of conditions and the following disclaimer in |
|
20 * the documentation and/or other materials provided with the |
|
21 * distribution. |
|
22 * * Neither the name Texas Instruments nor the names of its |
|
23 * contributors may be used to endorse or promote products derived |
|
24 * from this software without specific prior written permission. |
|
25 * |
|
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
27 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
28 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
29 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
30 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
31 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
32 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
33 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
34 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
35 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
36 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
37 */ |
|
38 |
|
39 /********************************************************************************************************************** |
|
40 |
|
41 FILENAME: public_descriptors.h |
|
42 |
|
43 DESCRIPTION: Contains the host interface descriptor types in use. |
|
44 |
|
45 |
|
46 |
|
47 ***********************************************************************************************************************/ |
|
48 #ifndef PUBLIC_DESCRIPTORS_H |
|
49 #define PUBLIC_DESCRIPTORS_H |
|
50 |
|
51 |
|
52 #include "public_types.h" |
|
53 |
|
54 |
|
55 |
|
56 /****************************************************************************** |
|
57 |
|
58 TX PATH |
|
59 |
|
60 ******************************************************************************/ |
|
61 |
|
62 #define AID_BROADCAST 0x0 /* broadcast frames AID */ |
|
63 #define AID_GLOBAL 0xFF /* unassociated STAs AID */ |
|
64 |
|
65 #define TRQ_DEPTH 16 /* depth of TX Result Queue */ |
|
66 |
|
67 #define NUM_TX_DESCRIPTORS 32 /* Total number of Tx descriptors in the FW */ |
|
68 |
|
69 /* TX attributes masks and offset used in the txAttr of TxIfDescriptor_t. */ |
|
70 #define TX_ATTR_SAVE_RETRIES BIT_0 |
|
71 #define TX_ATTR_HEADER_PAD BIT_1 |
|
72 #define TX_ATTR_SESSION_COUNTER (BIT_2 | BIT_3 | BIT_4) |
|
73 #define TX_ATTR_RATE_POLICY (BIT_5 | BIT_6 | BIT_7 | BIT_8 | BIT_9) |
|
74 #define TX_ATTR_LAST_WORD_PAD (BIT_10 | BIT_11) |
|
75 #define TX_ATTR_TX_CMPLT_REQ BIT_12 |
|
76 |
|
77 #define TX_ATTR_OFST_SAVE_RETRIES 0 |
|
78 #define TX_ATTR_OFST_HEADER_PAD 1 |
|
79 #define TX_ATTR_OFST_SESSION_COUNTER 2 |
|
80 #define TX_ATTR_OFST_RATE_POLICY 5 |
|
81 #define TX_ATTR_OFST_LAST_WORD_PAD 10 |
|
82 #define TX_ATTR_OFST_TX_CMPLT_REQ 12 |
|
83 |
|
84 /* The packet transmission result, written in the status field of TxResultDescriptor_t */ |
|
85 typedef enum |
|
86 { |
|
87 TX_SUCCESS = 0, |
|
88 TX_HW_ERROR = 1, |
|
89 TX_DISABLED = 2, |
|
90 TX_RETRY_EXCEEDED = 3, |
|
91 TX_TIMEOUT = 4, |
|
92 TX_KEY_NOT_FOUND = 5, |
|
93 TX_PEER_NOT_FOUND = 6, |
|
94 TX_SESSION_MISMATCH = 7 |
|
95 } TxDescStatus_enum; |
|
96 |
|
97 #ifdef HOST_COMPILE |
|
98 typedef uint8 TxDescStatus_e; |
|
99 #else |
|
100 typedef TxDescStatus_enum TxDescStatus_e; |
|
101 #endif |
|
102 |
|
103 /* The Tx Descriptor preceding each Tx packet copied to the FW (before the packet). */ |
|
104 typedef struct TxIfDescriptor_t |
|
105 { |
|
106 uint16 length; /* Length of packet in words, including descriptor+header+data */ |
|
107 uint8 extraMemBlks; /* Number of extra memory blocks to allocate for this packet in addition |
|
108 to the number of blocks derived from the packet length */ |
|
109 uint8 totalMemBlks; /* Total number of memory blocks allocated by the host for this packet. |
|
110 Must be equal or greater than the actual blocks number allocated by HW!! */ |
|
111 uint32 startTime; /* Device time (in us) when the packet arrived to the driver */ |
|
112 uint16 lifeTime; /* Max delay in TUs until transmission. The last device time the |
|
113 packet can be transmitted is: startTime+(1024*LifeTime) */ |
|
114 uint16 txAttr; /* Bitwise fields - see TX_ATTR... definitions above. */ |
|
115 uint8 descID; /* Packet identifier used also in the Tx-Result. */ |
|
116 uint8 tid; /* The packet TID value (as User-Priority) */ |
|
117 uint8 aid; /* Identifier of the remote STA in IBSS, 1 in infra-BSS */ |
|
118 uint8 reserved; /* For HW use, set to 0 */ |
|
119 |
|
120 } TxIfDescriptor_t; |
|
121 |
|
122 |
|
123 /* The Tx result retrieved from FW upon TX completion. */ |
|
124 typedef struct TxResultDescriptor_t |
|
125 { |
|
126 uint8 descID; /* Packet Identifier - same value used in the Tx descriptor.*/ |
|
127 TxDescStatus_e status; /* The status of the transmission, indicating success or one of several |
|
128 possible reasons for failure. Refer to TxDescStatus_enum above.*/ |
|
129 uint16 mediumUsage; /* Total air access duration including all retrys and overheads.*/ |
|
130 uint32 fwHandlingTime; /* The time passed from host xfer to Tx-complete.*/ |
|
131 uint32 mediumDelay; /* Total media delay (from 1st EDCA AIFS counter until TX Complete). */ |
|
132 uint8 lsbSecuritySequenceNumber; /* LS-byte of last TKIP seq-num (saved per AC for recovery).*/ |
|
133 uint8 ackFailures; /* Retry count - number of transmissions without successful ACK.*/ |
|
134 TxRateIndex_t rate; /* The rate that succeeded getting ACK (Valid only if status=SUCCESS). */ |
|
135 uint8 spare; /* for 4-byte alignment. */ |
|
136 } TxResultDescriptor_t; |
|
137 |
|
138 /* The Host-FW Tx-Result control counters */ |
|
139 typedef struct |
|
140 { |
|
141 uint32 TxResultFwCounter; /* FW updates num of results written to results-queue since FW-init. */ |
|
142 uint32 TxResultHostCounter; /* Host updates num of results read from results-queue since FW-init. */ |
|
143 } TxResultControl_t; |
|
144 |
|
145 /* The Host-FW Tx-Result Interface */ |
|
146 typedef struct |
|
147 { |
|
148 TxResultControl_t TxResultControl; /* See above. */ |
|
149 TxResultDescriptor_t TxResultQueue[TRQ_DEPTH]; |
|
150 } TxResultInterface_t; |
|
151 |
|
152 |
|
153 /****************************************************************************** |
|
154 |
|
155 RX PATH |
|
156 |
|
157 ******************************************************************************/ |
|
158 /* ------------------------------------- */ |
|
159 /* flags field in the RxIfDescriptor_t */ |
|
160 /* ------------------------------------- */ |
|
161 /* Bit5-7: Encryption type: */ |
|
162 /* 0 - none */ |
|
163 /* 1 - WEP */ |
|
164 /* 2 - TKIP */ |
|
165 /* 3 - AES */ |
|
166 /* 4 - GEM */ |
|
167 /* Bit4: HT */ |
|
168 /* Bit3: Was part of A-MPDU */ |
|
169 /* Bit2: STBC */ |
|
170 /* Bit0-1: Band the frame was received */ |
|
171 /* from (0=2.4, 1=4.9, 2=5.0) */ |
|
172 /* ------------------------------------- */ |
|
173 #define RX_DESC_BAND_MASK 0x03 /* Band is in Bits 0-1 */ |
|
174 #define RX_DESC_BAND_BG 0x00 |
|
175 #define RX_DESC_BAND_J 0x01 |
|
176 #define RX_DESC_BAND_A 0x02 |
|
177 #define RX_DESC_STBC 0x04 |
|
178 #define RX_DESC_A_MPDU 0x08 |
|
179 #define RX_DESC_HT 0x10 |
|
180 #define RX_DESC_ENCRYPT_MASK 0xE0 /* Encryption is in Bits 5-7 */ |
|
181 #define RX_DESC_ENCRYPT_WEP 0x20 |
|
182 #define RX_DESC_ENCRYPT_TKIP 0x40 |
|
183 #define RX_DESC_ENCRYPT_AES 0x60 |
|
184 #define RX_DESC_ENCRYPT_GEM 0x80 |
|
185 |
|
186 |
|
187 /* ------------------------------------- */ |
|
188 /* Status field in the RxIfDescriptor_t */ |
|
189 /* ------------------------------------- */ |
|
190 /* Bit3-7: reserved (0) */ |
|
191 /* Bit0-2: 0 - Success, */ |
|
192 /* 1 - RX_DECRYPT_FAIL, */ |
|
193 /* 2 - RX_MIC_FAIL */ |
|
194 /* ------------------------------------- */ |
|
195 #define RX_DESC_STATUS_SUCCESS 0 |
|
196 #define RX_DESC_STATUS_DECRYPT_FAIL 1 |
|
197 #define RX_DESC_STATUS_MIC_FAIL 2 |
|
198 #define RX_DESC_STATUS_DRIVER_RX_Q_FAIL 3 |
|
199 |
|
200 #define RX_DESC_STATUS_MASK 7 |
|
201 |
|
202 |
|
203 /********************************************** |
|
204 clasify tagging |
|
205 ***********************************************/ |
|
206 typedef enum |
|
207 { |
|
208 TAG_CLASS_UNKNOWN = 0, |
|
209 TAG_CLASS_MANAGEMENT = 1, /* other than Beacon or Probe Resp */ |
|
210 TAG_CLASS_DATA = 2, |
|
211 TAG_CLASS_QOS_DATA = 3, |
|
212 TAG_CLASS_BCN_PRBRSP = 4, |
|
213 TAG_CLASS_EAPOL = 5, |
|
214 TAG_CLASS_BA_EVENT = 6, |
|
215 TAG_CLASS_AMSDU = 7 |
|
216 } PacketClassTag_enum; |
|
217 |
|
218 #ifdef HOST_COMPILE |
|
219 typedef uint8 PacketClassTag_e; |
|
220 #else |
|
221 typedef PacketClassTag_enum PacketClassTag_e; |
|
222 #endif |
|
223 |
|
224 typedef uint8 ProcessIDTag_e; |
|
225 |
|
226 /****************************************************************************** |
|
227 |
|
228 RxIfDescriptor_t |
|
229 |
|
230 the structure of the Rx Descriptor recieved by HOST. |
|
231 |
|
232 ******************************************************************************/ |
|
233 typedef struct |
|
234 { |
|
235 uint16 length; /* Length of payload (including headers)*/ |
|
236 |
|
237 uint8 status; /* 0 = Success, 1 = RX Decrypt Fail, 2 = RX MIC Fail */ |
|
238 |
|
239 uint8 flags; /* See RX_DESC_xxx above */ |
|
240 |
|
241 TxRateIndex_t rate; /* Recevied Rate:at ETxRateClassId format */ |
|
242 |
|
243 uint8 channel; /* The received channel*/ |
|
244 |
|
245 int8 rx_level; /* The computed RSSI value in db of current frame */ |
|
246 |
|
247 uint8 rx_snr; /* The computed SNR value in db of current frame */ |
|
248 |
|
249 uint32 timestamp; /* Timestamp in microseconds, */ |
|
250 |
|
251 PacketClassTag_e packet_class_tag; /* Packet classification tagging info */ |
|
252 |
|
253 ProcessIDTag_e proccess_id_tag; /* Driver defined ID */ |
|
254 |
|
255 uint8 extraBytes; /* Number of padding bytes added to actual packet length */ |
|
256 |
|
257 uint8 reserved; |
|
258 |
|
259 } RxIfDescriptor_t; |
|
260 |
|
261 |
|
262 |
|
263 #endif /* PUBLIC_DESCRIPTORS_H*/ |
|
264 |
|
265 |
|
266 |