[rt2x00-users] [PATCHv2 4/6] rt2x00: Move TX descriptor field "ifs" into plcp substruct

Gertjan van Wingerde gwingerde at gmail.com
Thu Feb 24 08:02:55 EST 2011


On 02/23/11 13:46, Helmut Schaa wrote:
> "ifs" is only used by no-HT devices. Move it into the plcp substruct and
> fill in the value only for no-HT devices.
> 
> Signed-off-by: Helmut Schaa <helmut.schaa at googlemail.com>

Acked-by: Gertjan van Wingerde <gwingerde at gmail.com>

> ---
>  drivers/net/wireless/rt2x00/rt2400pci.c   |    2 +-
>  drivers/net/wireless/rt2x00/rt2500pci.c   |    2 +-
>  drivers/net/wireless/rt2x00/rt2500usb.c   |    2 +-
>  drivers/net/wireless/rt2x00/rt2x00queue.c |   20 +++++++++++---------
>  drivers/net/wireless/rt2x00/rt2x00queue.h |    2 +-
>  drivers/net/wireless/rt2x00/rt61pci.c     |    2 +-
>  drivers/net/wireless/rt2x00/rt73usb.c     |    2 +-
>  7 files changed, 17 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c
> index 60d7596..9016c00 100644
> --- a/drivers/net/wireless/rt2x00/rt2400pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2400pci.c
> @@ -1166,7 +1166,7 @@ static void rt2400pci_write_tx_desc(struct queue_entry *entry,
>  			   test_bit(ENTRY_TXD_REQ_TIMESTAMP, &txdesc->flags));
>  	rt2x00_set_field32(&word, TXD_W0_RTS,
>  			   test_bit(ENTRY_TXD_RTS_FRAME, &txdesc->flags));
> -	rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs);
> +	rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->u.plcp.ifs);
>  	rt2x00_set_field32(&word, TXD_W0_RETRY_MODE,
>  			   test_bit(ENTRY_TXD_RETRY_MODE, &txdesc->flags));
>  	rt2x00_desc_write(txd, 0, word);
> diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
> index 53ff64e..0fbc18c 100644
> --- a/drivers/net/wireless/rt2x00/rt2500pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2500pci.c
> @@ -1317,7 +1317,7 @@ static void rt2500pci_write_tx_desc(struct queue_entry *entry,
>  	rt2x00_set_field32(&word, TXD_W0_OFDM,
>  			   (txdesc->rate_mode == RATE_MODE_OFDM));
>  	rt2x00_set_field32(&word, TXD_W0_CIPHER_OWNER, 1);
> -	rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs);
> +	rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->u.plcp.ifs);
>  	rt2x00_set_field32(&word, TXD_W0_RETRY_MODE,
>  			   test_bit(ENTRY_TXD_RETRY_MODE, &txdesc->flags));
>  	rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, txdesc->length);
> diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
> index ed5bc9c..979fe65 100644
> --- a/drivers/net/wireless/rt2x00/rt2500usb.c
> +++ b/drivers/net/wireless/rt2x00/rt2500usb.c
> @@ -1100,7 +1100,7 @@ static void rt2500usb_write_tx_desc(struct queue_entry *entry,
>  			   (txdesc->rate_mode == RATE_MODE_OFDM));
>  	rt2x00_set_field32(&word, TXD_W0_NEW_SEQ,
>  			   test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags));
> -	rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs);
> +	rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->u.plcp.ifs);
>  	rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, txdesc->length);
>  	rt2x00_set_field32(&word, TXD_W0_CIPHER, !!txdesc->cipher);
>  	rt2x00_set_field32(&word, TXD_W0_KEY_ID, txdesc->key_idx);
> diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c
> index 7816c1c..6300cf3 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00queue.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
> @@ -262,6 +262,16 @@ static void rt2x00queue_create_tx_descriptor_plcp(struct queue_entry *entry,
>  	unsigned int duration;
>  	unsigned int residual;
>  
> +	/*
> +	 * Determine with what IFS priority this frame should be send.
> +	 * Set ifs to IFS_SIFS when the this is not the first fragment,
> +	 * or this fragment came after RTS/CTS.
> +	 */
> +	if (test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags))
> +		txdesc->u.plcp.ifs = IFS_BACKOFF;
> +	else
> +		txdesc->u.plcp.ifs = IFS_SIFS;
> +
>  	/* Data length + CRC + Crypto overhead (IV/EIV/ICV/MIC) */
>  	data_length = entry->skb->len + 4;
>  	data_length += rt2x00crypto_tx_overhead(rt2x00dev, entry->skb);
> @@ -373,17 +383,9 @@ static void rt2x00queue_create_tx_descriptor(struct queue_entry *entry,
>  	    ieee80211_is_probe_resp(hdr->frame_control))
>  		__set_bit(ENTRY_TXD_REQ_TIMESTAMP, &txdesc->flags);
>  
> -	/*
> -	 * Determine with what IFS priority this frame should be send.
> -	 * Set ifs to IFS_SIFS when the this is not the first fragment,
> -	 * or this fragment came after RTS/CTS.
> -	 */
>  	if ((tx_info->flags & IEEE80211_TX_CTL_FIRST_FRAGMENT) &&
> -	    !test_bit(ENTRY_TXD_RTS_FRAME, &txdesc->flags)) {
> +	    !test_bit(ENTRY_TXD_RTS_FRAME, &txdesc->flags))
>  		__set_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags);
> -		txdesc->ifs = IFS_BACKOFF;
> -	} else
> -		txdesc->ifs = IFS_SIFS;
>  
>  	/*
>  	 * Determine rate modulation.
> diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.h b/drivers/net/wireless/rt2x00/rt2x00queue.h
> index 3fa2406..7f8528d 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00queue.h
> +++ b/drivers/net/wireless/rt2x00/rt2x00queue.h
> @@ -311,6 +311,7 @@ struct txentry_desc {
>  			u16 length_low;
>  			u16 signal;
>  			u16 service;
> +			enum ifs ifs;
>  		} plcp;
>  
>  		struct {
> @@ -325,7 +326,6 @@ struct txentry_desc {
>  	u16 rate_mode;
>  
>  	short retry_limit;
> -	enum ifs ifs;
>  
>  	enum cipher cipher;
>  	u16 key_idx;
> diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
> index 6b49c28..1eb59ee 100644
> --- a/drivers/net/wireless/rt2x00/rt61pci.c
> +++ b/drivers/net/wireless/rt2x00/rt61pci.c
> @@ -1948,7 +1948,7 @@ static void rt61pci_write_tx_desc(struct queue_entry *entry,
>  			   test_bit(ENTRY_TXD_REQ_TIMESTAMP, &txdesc->flags));
>  	rt2x00_set_field32(&word, TXD_W0_OFDM,
>  			   (txdesc->rate_mode == RATE_MODE_OFDM));
> -	rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs);
> +	rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->u.plcp.ifs);
>  	rt2x00_set_field32(&word, TXD_W0_RETRY_MODE,
>  			   test_bit(ENTRY_TXD_RETRY_MODE, &txdesc->flags));
>  	rt2x00_set_field32(&word, TXD_W0_TKIP_MIC,
> diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
> index 80d06d0..4a4bd4e 100644
> --- a/drivers/net/wireless/rt2x00/rt73usb.c
> +++ b/drivers/net/wireless/rt2x00/rt73usb.c
> @@ -1474,7 +1474,7 @@ static void rt73usb_write_tx_desc(struct queue_entry *entry,
>  			   test_bit(ENTRY_TXD_REQ_TIMESTAMP, &txdesc->flags));
>  	rt2x00_set_field32(&word, TXD_W0_OFDM,
>  			   (txdesc->rate_mode == RATE_MODE_OFDM));
> -	rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs);
> +	rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->u.plcp.ifs);
>  	rt2x00_set_field32(&word, TXD_W0_RETRY_MODE,
>  			   test_bit(ENTRY_TXD_RETRY_MODE, &txdesc->flags));
>  	rt2x00_set_field32(&word, TXD_W0_TKIP_MIC,




More information about the users mailing list