rt2x00: Add RXDONE_CRYPTO_IV/ICV flags
PATCH 1/1 rt2x00: Add RXDONE_CRYPTO_IV/ICV flags
Drivers should notify rt2x00lib when they provide the IV/ICV data. This adds some flexibility to drivers which can't provide all information.
* rt2500usb provides ICV inside the frame
* rt2800pci doesn't provide IV/ICV
* rt2800usb doesn't provide IV/ICV
Signed-off-by Ivo van Doorn <[email protected]>
---
John, this is on top of the merge request from earlier today.
--- drivers/net/wireless/rt2x00/rt2500usb.c | 2 ++ drivers/net/wireless/rt2x00/rt2x00dev.c | 3 ++- drivers/net/wireless/rt2x00/rt2x00queue.h | 4 ++++ drivers/net/wireless/rt2x00/rt61pci.c | 3 +++ drivers/net/wireless/rt2x00/rt73usb.c | 3 +++ 5 files changed, 14 insertions(+), 1 deletions(-)
drivers/net/wireless/rt2x00/rt2500usb.c +2 -0
@@ -1330,6 +1330,8 @@ static void rt2500usb_fill_rxdone(struct queue_entry *entry,if (rxdesc->cipher !=CIPHER_NONE ) {_rt2x00_desc_read (rxd,2 , &rxdesc->iv[0 ]);_rt2x00_desc_read (rxd,3 , &rxdesc->iv[1 ]); + rxdesc->dev_flags |=RXDONE_CRYPTO_IV ; +/* ICV is located at the end of frame */ /*
drivers/net/wireless/rt2x00/rt2x00dev.c +2 -1
@@ -636,7 +636,8 @@ void rt2x00lib_rxdone(struct rt2x00_dev *rt2x00dev,* provided seperately (through hardware descriptor) * in which case we should reinsert the data into the frame. */ -if ((rxdesc.flags &RX_FLAG_IV_STRIPPED )) { +if ((rxdesc.dev_flags &RXDONE_CRYPTO_IV ) && + (rxdesc.flags &RX_FLAG_IV_STRIPPED )) {rt2x00crypto_rx_insert_iv (entry->skb, align, header_length, &rxdesc); }else if (align) {
drivers/net/wireless/rt2x00/rt2x00queue.h +4 -0
@@ -146,11 +146,15 @@ static inline struct skb_frame_desc* get_skb_frame_desc(struct sk_buff *skb)* @RXDONE_SIGNAL_PLCP: Signal field contains the plcp value. * @RXDONE_SIGNAL_BITRATE: Signal field contains the bitrate value. * @RXDONE_MY_BSS: Does this frame originate from device's BSS. +* @RXDONE_CRYPTO_IV: Driver provided IV/EIV data. +* @RXDONE_CRYPTO_ICV: Driver provided ICV data. */ enum rxdone_entry_desc_flags {RXDONE_SIGNAL_PLCP =1 <<0 ,RXDONE_SIGNAL_BITRATE =1 <<1 ,RXDONE_MY_BSS =1 <<2 , +RXDONE_CRYPTO_IV =1 <<3 , +RXDONE_CRYPTO_ICV =1 <<4 , };/**
drivers/net/wireless/rt2x00/rt61pci.c +3 -0
@@ -1951,7 +1951,10 @@ static void rt61pci_fill_rxdone(struct queue_entry *entry,if (rxdesc->cipher !=CIPHER_NONE ) {_rt2x00_desc_read (entry_priv->desc,2 , &rxdesc->iv[0 ]);_rt2x00_desc_read (entry_priv->desc,3 , &rxdesc->iv[1 ]); + rxdesc->dev_flags |=RXDONE_CRYPTO_IV ; +_rt2x00_desc_read (entry_priv->desc,4 , &rxdesc->icv); + rxdesc->dev_flags |=RXDONE_CRYPTO_ICV ;/* * Hardware has stripped IV/EIV data from 802.11 frame during
drivers/net/wireless/rt2x00/rt73usb.c +3 -0
@@ -1620,7 +1620,10 @@ static void rt73usb_fill_rxdone(struct queue_entry *entry,if (rxdesc->cipher !=CIPHER_NONE ) {_rt2x00_desc_read (rxd,2 , &rxdesc->iv[0 ]);_rt2x00_desc_read (rxd,3 , &rxdesc->iv[1 ]); + rxdesc->dev_flags |=RXDONE_CRYPTO_IV ; +_rt2x00_desc_read (rxd,4 , &rxdesc->icv); + rxdesc->dev_flags |=RXDONE_CRYPTO_ICV ;/* * Hardware has stripped IV/EIV data from 802.11 frame during
Signature · 1 line
1.5.6.1