diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00queue.h')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00queue.h | 73 |
1 files changed, 66 insertions, 7 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.h b/drivers/net/wireless/rt2x00/rt2x00queue.h index ff78e52ce43c..37f3f98d58a2 100644 --- a/drivers/net/wireless/rt2x00/rt2x00queue.h +++ b/drivers/net/wireless/rt2x00/rt2x00queue.h | |||
@@ -87,10 +87,13 @@ enum data_queue_qid { | |||
87 | * | 87 | * |
88 | * @SKBDESC_DMA_MAPPED_RX: &skb_dma field has been mapped for RX | 88 | * @SKBDESC_DMA_MAPPED_RX: &skb_dma field has been mapped for RX |
89 | * @SKBDESC_DMA_MAPPED_TX: &skb_dma field has been mapped for TX | 89 | * @SKBDESC_DMA_MAPPED_TX: &skb_dma field has been mapped for TX |
90 | * @FRAME_DESC_IV_STRIPPED: Frame contained a IV/EIV provided by | ||
91 | * mac80211 but was stripped for processing by the driver. | ||
90 | */ | 92 | */ |
91 | enum skb_frame_desc_flags { | 93 | enum skb_frame_desc_flags { |
92 | SKBDESC_DMA_MAPPED_RX = (1 << 0), | 94 | SKBDESC_DMA_MAPPED_RX = 1 << 0, |
93 | SKBDESC_DMA_MAPPED_TX = (1 << 1), | 95 | SKBDESC_DMA_MAPPED_TX = 1 << 1, |
96 | FRAME_DESC_IV_STRIPPED = 1 << 2, | ||
94 | }; | 97 | }; |
95 | 98 | ||
96 | /** | 99 | /** |
@@ -104,6 +107,8 @@ enum skb_frame_desc_flags { | |||
104 | * @desc: Pointer to descriptor part of the frame. | 107 | * @desc: Pointer to descriptor part of the frame. |
105 | * Note that this pointer could point to something outside | 108 | * Note that this pointer could point to something outside |
106 | * of the scope of the skb->data pointer. | 109 | * of the scope of the skb->data pointer. |
110 | * @iv: IV data used during encryption/decryption. | ||
111 | * @eiv: EIV data used during encryption/decryption. | ||
107 | * @skb_dma: (PCI-only) the DMA address associated with the sk buffer. | 112 | * @skb_dma: (PCI-only) the DMA address associated with the sk buffer. |
108 | * @entry: The entry to which this sk buffer belongs. | 113 | * @entry: The entry to which this sk buffer belongs. |
109 | */ | 114 | */ |
@@ -113,6 +118,9 @@ struct skb_frame_desc { | |||
113 | unsigned int desc_len; | 118 | unsigned int desc_len; |
114 | void *desc; | 119 | void *desc; |
115 | 120 | ||
121 | __le32 iv; | ||
122 | __le32 eiv; | ||
123 | |||
116 | dma_addr_t skb_dma; | 124 | dma_addr_t skb_dma; |
117 | 125 | ||
118 | struct queue_entry *entry; | 126 | struct queue_entry *entry; |
@@ -152,7 +160,11 @@ enum rxdone_entry_desc_flags { | |||
152 | * @size: Data size of the received frame. | 160 | * @size: Data size of the received frame. |
153 | * @flags: MAC80211 receive flags (See &enum mac80211_rx_flags). | 161 | * @flags: MAC80211 receive flags (See &enum mac80211_rx_flags). |
154 | * @dev_flags: Ralink receive flags (See &enum rxdone_entry_desc_flags). | 162 | * @dev_flags: Ralink receive flags (See &enum rxdone_entry_desc_flags). |
155 | 163 | * @cipher: Cipher type used during decryption. | |
164 | * @cipher_status: Decryption status. | ||
165 | * @iv: IV data used during decryption. | ||
166 | * @eiv: EIV data used during decryption. | ||
167 | * @icv: ICV data used during decryption. | ||
156 | */ | 168 | */ |
157 | struct rxdone_entry_desc { | 169 | struct rxdone_entry_desc { |
158 | u64 timestamp; | 170 | u64 timestamp; |
@@ -161,6 +173,12 @@ struct rxdone_entry_desc { | |||
161 | int size; | 173 | int size; |
162 | int flags; | 174 | int flags; |
163 | int dev_flags; | 175 | int dev_flags; |
176 | u8 cipher; | ||
177 | u8 cipher_status; | ||
178 | |||
179 | __le32 iv; | ||
180 | __le32 eiv; | ||
181 | __le32 icv; | ||
164 | }; | 182 | }; |
165 | 183 | ||
166 | /** | 184 | /** |
@@ -206,6 +224,10 @@ struct txdone_entry_desc { | |||
206 | * @ENTRY_TXD_BURST: This frame belongs to the same burst event. | 224 | * @ENTRY_TXD_BURST: This frame belongs to the same burst event. |
207 | * @ENTRY_TXD_ACK: An ACK is required for this frame. | 225 | * @ENTRY_TXD_ACK: An ACK is required for this frame. |
208 | * @ENTRY_TXD_RETRY_MODE: When set, the long retry count is used. | 226 | * @ENTRY_TXD_RETRY_MODE: When set, the long retry count is used. |
227 | * @ENTRY_TXD_ENCRYPT: This frame should be encrypted. | ||
228 | * @ENTRY_TXD_ENCRYPT_PAIRWISE: Use pairwise key table (instead of shared). | ||
229 | * @ENTRY_TXD_ENCRYPT_IV: Generate IV/EIV in hardware. | ||
230 | * @ENTRY_TXD_ENCRYPT_MMIC: Generate MIC in hardware. | ||
209 | */ | 231 | */ |
210 | enum txentry_desc_flags { | 232 | enum txentry_desc_flags { |
211 | ENTRY_TXD_RTS_FRAME, | 233 | ENTRY_TXD_RTS_FRAME, |
@@ -218,6 +240,10 @@ enum txentry_desc_flags { | |||
218 | ENTRY_TXD_BURST, | 240 | ENTRY_TXD_BURST, |
219 | ENTRY_TXD_ACK, | 241 | ENTRY_TXD_ACK, |
220 | ENTRY_TXD_RETRY_MODE, | 242 | ENTRY_TXD_RETRY_MODE, |
243 | ENTRY_TXD_ENCRYPT, | ||
244 | ENTRY_TXD_ENCRYPT_PAIRWISE, | ||
245 | ENTRY_TXD_ENCRYPT_IV, | ||
246 | ENTRY_TXD_ENCRYPT_MMIC, | ||
221 | }; | 247 | }; |
222 | 248 | ||
223 | /** | 249 | /** |
@@ -236,6 +262,9 @@ enum txentry_desc_flags { | |||
236 | * @ifs: IFS value. | 262 | * @ifs: IFS value. |
237 | * @cw_min: cwmin value. | 263 | * @cw_min: cwmin value. |
238 | * @cw_max: cwmax value. | 264 | * @cw_max: cwmax value. |
265 | * @cipher: Cipher type used for encryption. | ||
266 | * @key_idx: Key index used for encryption. | ||
267 | * @iv_offset: Position where IV should be inserted by hardware. | ||
239 | */ | 268 | */ |
240 | struct txentry_desc { | 269 | struct txentry_desc { |
241 | unsigned long flags; | 270 | unsigned long flags; |
@@ -252,6 +281,10 @@ struct txentry_desc { | |||
252 | short ifs; | 281 | short ifs; |
253 | short cw_min; | 282 | short cw_min; |
254 | short cw_max; | 283 | short cw_max; |
284 | |||
285 | enum cipher cipher; | ||
286 | u16 key_idx; | ||
287 | u16 iv_offset; | ||
255 | }; | 288 | }; |
256 | 289 | ||
257 | /** | 290 | /** |
@@ -484,25 +517,51 @@ static inline int rt2x00queue_threshold(struct data_queue *queue) | |||
484 | } | 517 | } |
485 | 518 | ||
486 | /** | 519 | /** |
487 | * rt2x00_desc_read - Read a word from the hardware descriptor. | 520 | * _rt2x00_desc_read - Read a word from the hardware descriptor. |
521 | * @desc: Base descriptor address | ||
522 | * @word: Word index from where the descriptor should be read. | ||
523 | * @value: Address where the descriptor value should be written into. | ||
524 | */ | ||
525 | static inline void _rt2x00_desc_read(__le32 *desc, const u8 word, __le32 *value) | ||
526 | { | ||
527 | *value = desc[word]; | ||
528 | } | ||
529 | |||
530 | /** | ||
531 | * rt2x00_desc_read - Read a word from the hardware descriptor, this | ||
532 | * function will take care of the byte ordering. | ||
488 | * @desc: Base descriptor address | 533 | * @desc: Base descriptor address |
489 | * @word: Word index from where the descriptor should be read. | 534 | * @word: Word index from where the descriptor should be read. |
490 | * @value: Address where the descriptor value should be written into. | 535 | * @value: Address where the descriptor value should be written into. |
491 | */ | 536 | */ |
492 | static inline void rt2x00_desc_read(__le32 *desc, const u8 word, u32 *value) | 537 | static inline void rt2x00_desc_read(__le32 *desc, const u8 word, u32 *value) |
493 | { | 538 | { |
494 | *value = le32_to_cpu(desc[word]); | 539 | __le32 tmp; |
540 | _rt2x00_desc_read(desc, word, &tmp); | ||
541 | *value = le32_to_cpu(tmp); | ||
542 | } | ||
543 | |||
544 | /** | ||
545 | * rt2x00_desc_write - write a word to the hardware descriptor, this | ||
546 | * function will take care of the byte ordering. | ||
547 | * @desc: Base descriptor address | ||
548 | * @word: Word index from where the descriptor should be written. | ||
549 | * @value: Value that should be written into the descriptor. | ||
550 | */ | ||
551 | static inline void _rt2x00_desc_write(__le32 *desc, const u8 word, __le32 value) | ||
552 | { | ||
553 | desc[word] = value; | ||
495 | } | 554 | } |
496 | 555 | ||
497 | /** | 556 | /** |
498 | * rt2x00_desc_write - wrote a word to the hardware descriptor. | 557 | * rt2x00_desc_write - write a word to the hardware descriptor. |
499 | * @desc: Base descriptor address | 558 | * @desc: Base descriptor address |
500 | * @word: Word index from where the descriptor should be written. | 559 | * @word: Word index from where the descriptor should be written. |
501 | * @value: Value that should be written into the descriptor. | 560 | * @value: Value that should be written into the descriptor. |
502 | */ | 561 | */ |
503 | static inline void rt2x00_desc_write(__le32 *desc, const u8 word, u32 value) | 562 | static inline void rt2x00_desc_write(__le32 *desc, const u8 word, u32 value) |
504 | { | 563 | { |
505 | desc[word] = cpu_to_le32(value); | 564 | _rt2x00_desc_write(desc, word, cpu_to_le32(value)); |
506 | } | 565 | } |
507 | 566 | ||
508 | #endif /* RT2X00QUEUE_H */ | 567 | #endif /* RT2X00QUEUE_H */ |