aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorIvo van Doorn <ivdoorn@gmail.com>2008-05-10 07:42:31 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-05-21 21:47:31 -0400
commit61486e0f68d1f8966c09b734566a187d42d65c54 (patch)
treeba683a5dfe736f0b9754da2b2a67d799f3ff5594 /drivers/net
parentfb55f4d1fa252ba1e479284b79da1049d658c371 (diff)
rt2x00: Remove ieee80211_tx_control argument from write_tx_desc()
Move the last remaining information details read from ieee80211_tx_control in the drivers to the txentry_desc structure. After this we can remove ieee80211_tx_control from the argument list for the callback function, which makes it easier when the control information is moved into skb->cb Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/rt2x00/rt2400pci.c6
-rw-r--r--drivers/net/wireless/rt2x00/rt2500pci.c7
-rw-r--r--drivers/net/wireless/rt2x00/rt2500usb.c7
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00.h3
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00dev.c19
-rw-r--r--drivers/net/wireless/rt2x00/rt2x00queue.h14
-rw-r--r--drivers/net/wireless/rt2x00/rt61pci.c6
-rw-r--r--drivers/net/wireless/rt2x00/rt73usb.c6
8 files changed, 36 insertions, 32 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c
index 69b1dbd1adf0..fb02d118075b 100644
--- a/drivers/net/wireless/rt2x00/rt2400pci.c
+++ b/drivers/net/wireless/rt2x00/rt2400pci.c
@@ -1001,8 +1001,7 @@ static int rt2400pci_set_device_state(struct rt2x00_dev *rt2x00dev,
1001 */ 1001 */
1002static void rt2400pci_write_tx_desc(struct rt2x00_dev *rt2x00dev, 1002static void rt2400pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1003 struct sk_buff *skb, 1003 struct sk_buff *skb,
1004 struct txentry_desc *txdesc, 1004 struct txentry_desc *txdesc)
1005 struct ieee80211_tx_control *control)
1006{ 1005{
1007 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb); 1006 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb);
1008 __le32 *txd = skbdesc->desc; 1007 __le32 *txd = skbdesc->desc;
@@ -1046,8 +1045,7 @@ static void rt2400pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1046 test_bit(ENTRY_TXD_RTS_FRAME, &txdesc->flags)); 1045 test_bit(ENTRY_TXD_RTS_FRAME, &txdesc->flags));
1047 rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs); 1046 rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs);
1048 rt2x00_set_field32(&word, TXD_W0_RETRY_MODE, 1047 rt2x00_set_field32(&word, TXD_W0_RETRY_MODE,
1049 !!(control->flags & 1048+ test_bit(ENTRY_TXD_RETRY_MODE, &txdesc->flags));
1050 IEEE80211_TXCTL_LONG_RETRY_LIMIT));
1051 rt2x00_desc_write(txd, 0, word); 1049 rt2x00_desc_write(txd, 0, word);
1052} 1050}
1053 1051
diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
index aa195dab1554..1724ce90f8b1 100644
--- a/drivers/net/wireless/rt2x00/rt2500pci.c
+++ b/drivers/net/wireless/rt2x00/rt2500pci.c
@@ -1155,8 +1155,7 @@ static int rt2500pci_set_device_state(struct rt2x00_dev *rt2x00dev,
1155 */ 1155 */
1156static void rt2500pci_write_tx_desc(struct rt2x00_dev *rt2x00dev, 1156static void rt2500pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1157 struct sk_buff *skb, 1157 struct sk_buff *skb,
1158 struct txentry_desc *txdesc, 1158 struct txentry_desc *txdesc)
1159 struct ieee80211_tx_control *control)
1160{ 1159{
1161 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb); 1160 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb);
1162 __le32 *txd = skbdesc->desc; 1161 __le32 *txd = skbdesc->desc;
@@ -1198,9 +1197,7 @@ static void rt2500pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1198 rt2x00_set_field32(&word, TXD_W0_CIPHER_OWNER, 1); 1197 rt2x00_set_field32(&word, TXD_W0_CIPHER_OWNER, 1);
1199 rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs); 1198 rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs);
1200 rt2x00_set_field32(&word, TXD_W0_RETRY_MODE, 1199 rt2x00_set_field32(&word, TXD_W0_RETRY_MODE,
1201 !!(control->flags & 1200 test_bit(ENTRY_TXD_RETRY_MODE, &txdesc->flags));
1202 IEEE80211_TXCTL_LONG_RETRY_LIMIT));
1203 rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, skbdesc->data_len);
1204 rt2x00_set_field32(&word, TXD_W0_CIPHER_ALG, CIPHER_NONE); 1201 rt2x00_set_field32(&word, TXD_W0_CIPHER_ALG, CIPHER_NONE);
1205 rt2x00_desc_write(txd, 0, word); 1202 rt2x00_desc_write(txd, 0, word);
1206} 1203}
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
index 88bafdf8f0fa..7df06ece1b45 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.c
+++ b/drivers/net/wireless/rt2x00/rt2500usb.c
@@ -1033,8 +1033,7 @@ static int rt2500usb_set_device_state(struct rt2x00_dev *rt2x00dev,
1033 */ 1033 */
1034static void rt2500usb_write_tx_desc(struct rt2x00_dev *rt2x00dev, 1034static void rt2500usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1035 struct sk_buff *skb, 1035 struct sk_buff *skb,
1036 struct txentry_desc *txdesc, 1036 struct txentry_desc *txdesc)
1037 struct ieee80211_tx_control *control)
1038{ 1037{
1039 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb); 1038 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb);
1040 __le32 *txd = skbdesc->desc; 1039 __le32 *txd = skbdesc->desc;
@@ -1058,7 +1057,7 @@ static void rt2500usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1058 rt2x00_desc_write(txd, 2, word); 1057 rt2x00_desc_write(txd, 2, word);
1059 1058
1060 rt2x00_desc_read(txd, 0, &word); 1059 rt2x00_desc_read(txd, 0, &word);
1061 rt2x00_set_field32(&word, TXD_W0_RETRY_LIMIT, control->retry_limit); 1060 rt2x00_set_field32(&word, TXD_W0_RETRY_LIMIT, txdesc->retry_limit);
1062 rt2x00_set_field32(&word, TXD_W0_MORE_FRAG, 1061 rt2x00_set_field32(&word, TXD_W0_MORE_FRAG,
1063 test_bit(ENTRY_TXD_MORE_FRAG, &txdesc->flags)); 1062 test_bit(ENTRY_TXD_MORE_FRAG, &txdesc->flags));
1064 rt2x00_set_field32(&word, TXD_W0_ACK, 1063 rt2x00_set_field32(&word, TXD_W0_ACK,
@@ -1068,7 +1067,7 @@ static void rt2500usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1068 rt2x00_set_field32(&word, TXD_W0_OFDM, 1067 rt2x00_set_field32(&word, TXD_W0_OFDM,
1069 test_bit(ENTRY_TXD_OFDM_RATE, &txdesc->flags)); 1068 test_bit(ENTRY_TXD_OFDM_RATE, &txdesc->flags));
1070 rt2x00_set_field32(&word, TXD_W0_NEW_SEQ, 1069 rt2x00_set_field32(&word, TXD_W0_NEW_SEQ,
1071 !!(control->flags & IEEE80211_TXCTL_FIRST_FRAGMENT)); 1070 test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags));
1072 rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs); 1071 rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs);
1073 rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, skbdesc->data_len); 1072 rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, skbdesc->data_len);
1074 rt2x00_set_field32(&word, TXD_W0_CIPHER, CIPHER_NONE); 1073 rt2x00_set_field32(&word, TXD_W0_CIPHER, CIPHER_NONE);
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h
index 79bd9c9f8963..65614841f748 100644
--- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
@@ -540,8 +540,7 @@ struct rt2x00lib_ops {
540 */ 540 */
541 void (*write_tx_desc) (struct rt2x00_dev *rt2x00dev, 541 void (*write_tx_desc) (struct rt2x00_dev *rt2x00dev,
542 struct sk_buff *skb, 542 struct sk_buff *skb,
543 struct txentry_desc *txdesc, 543 struct txentry_desc *txdesc);
544 struct ieee80211_tx_control *control);
545 int (*write_tx_data) (struct rt2x00_dev *rt2x00dev, 544 int (*write_tx_data) (struct rt2x00_dev *rt2x00dev,
546 struct data_queue *queue, struct sk_buff *skb, 545 struct data_queue *queue, struct sk_buff *skb,
547 struct ieee80211_tx_control *control); 546 struct ieee80211_tx_control *control);
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c
index 69da22cf085c..e1368f709858 100644
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
@@ -664,7 +664,12 @@ void rt2x00lib_write_tx_desc(struct rt2x00_dev *rt2x00dev,
664 tx_rate = control->rts_cts_rate->hw_value; 664 tx_rate = control->rts_cts_rate->hw_value;
665 } 665 }
666 666
667 rate = rt2x00_get_rate(tx_rate); 667 /*
668 * Determine retry information.
669 */
670 txdesc.retry_limit = control->retry_limit;
671 if (control->flags & IEEE80211_TXCTL_LONG_RETRY_LIMIT)
672 __set_bit(ENTRY_TXD_RETRY_MODE, &txdesc.flags);
668 673
669 /* 674 /*
670 * Check if more fragments are pending 675 * Check if more fragments are pending
@@ -686,16 +691,20 @@ void rt2x00lib_write_tx_desc(struct rt2x00_dev *rt2x00dev,
686 * Set ifs to IFS_SIFS when the this is not the first fragment, 691 * Set ifs to IFS_SIFS when the this is not the first fragment,
687 * or this fragment came after RTS/CTS. 692 * or this fragment came after RTS/CTS.
688 */ 693 */
689 if ((seq_ctrl & IEEE80211_SCTL_FRAG) > 0 || 694 if (test_bit(ENTRY_TXD_RTS_FRAME, &txdesc.flags)) {
690 test_bit(ENTRY_TXD_RTS_FRAME, &txdesc.flags))
691 txdesc.ifs = IFS_SIFS; 695 txdesc.ifs = IFS_SIFS;
692 else 696 } else if (control->flags & IEEE80211_TXCTL_FIRST_FRAGMENT) {
697 __set_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc.flags);
693 txdesc.ifs = IFS_BACKOFF; 698 txdesc.ifs = IFS_BACKOFF;
699 } else {
700 txdesc.ifs = IFS_SIFS;
701 }
694 702
695 /* 703 /*
696 * PLCP setup 704 * PLCP setup
697 * Length calculation depends on OFDM/CCK rate. 705 * Length calculation depends on OFDM/CCK rate.
698 */ 706 */
707 rate = rt2x00_get_rate(tx_rate);
699 txdesc.signal = rate->plcp; 708 txdesc.signal = rate->plcp;
700 txdesc.service = 0x04; 709 txdesc.service = 0x04;
701 710
@@ -733,7 +742,7 @@ void rt2x00lib_write_tx_desc(struct rt2x00_dev *rt2x00dev,
733 txdesc.signal |= 0x08; 742 txdesc.signal |= 0x08;
734 } 743 }
735 744
736 rt2x00dev->ops->lib->write_tx_desc(rt2x00dev, skb, &txdesc, control); 745 rt2x00dev->ops->lib->write_tx_desc(rt2x00dev, skb, &txdesc);
737 746
738 /* 747 /*
739 * Update queue entry. 748 * Update queue entry.
diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.h b/drivers/net/wireless/rt2x00/rt2x00queue.h
index f361f784965e..3f7cfa9b7da5 100644
--- a/drivers/net/wireless/rt2x00/rt2x00queue.h
+++ b/drivers/net/wireless/rt2x00/rt2x00queue.h
@@ -204,18 +204,22 @@ struct txdone_entry_desc {
204 * 204 *
205 * @ENTRY_TXD_RTS_FRAME: This frame is a RTS frame. 205 * @ENTRY_TXD_RTS_FRAME: This frame is a RTS frame.
206 * @ENTRY_TXD_OFDM_RATE: This frame is send out with an OFDM rate. 206 * @ENTRY_TXD_OFDM_RATE: This frame is send out with an OFDM rate.
207 * @ENTRY_TXD_FIRST_FRAGMENT: This is the first frame.
207 * @ENTRY_TXD_MORE_FRAG: This frame is followed by another fragment. 208 * @ENTRY_TXD_MORE_FRAG: This frame is followed by another fragment.
208 * @ENTRY_TXD_REQ_TIMESTAMP: Require timestamp to be inserted. 209 * @ENTRY_TXD_REQ_TIMESTAMP: Require timestamp to be inserted.
209 * @ENTRY_TXD_BURST: This frame belongs to the same burst event. 210 * @ENTRY_TXD_BURST: This frame belongs to the same burst event.
210 * @ENTRY_TXD_ACK: An ACK is required for this frame. 211 * @ENTRY_TXD_ACK: An ACK is required for this frame.
212 * @ENTRY_TXD_RETRY_MODE: When set, the long retry count is used.
211 */ 213 */
212enum txentry_desc_flags { 214enum txentry_desc_flags {
213 ENTRY_TXD_RTS_FRAME, 215 ENTRY_TXD_RTS_FRAME,
214 ENTRY_TXD_OFDM_RATE, 216 ENTRY_TXD_OFDM_RATE,
217 ENTRY_TXD_FIRST_FRAGMENT,
215 ENTRY_TXD_MORE_FRAG, 218 ENTRY_TXD_MORE_FRAG,
216 ENTRY_TXD_REQ_TIMESTAMP, 219 ENTRY_TXD_REQ_TIMESTAMP,
217 ENTRY_TXD_BURST, 220 ENTRY_TXD_BURST,
218 ENTRY_TXD_ACK, 221 ENTRY_TXD_ACK,
222 ENTRY_TXD_RETRY_MODE,
219}; 223};
220 224
221/** 225/**
@@ -229,6 +233,7 @@ enum txentry_desc_flags {
229 * @length_low: PLCP length low word. 233 * @length_low: PLCP length low word.
230 * @signal: PLCP signal. 234 * @signal: PLCP signal.
231 * @service: PLCP service. 235 * @service: PLCP service.
236 * @retry_limit: Max number of retries.
232 * @aifs: AIFS value. 237 * @aifs: AIFS value.
233 * @ifs: IFS value. 238 * @ifs: IFS value.
234 * @cw_min: cwmin value. 239 * @cw_min: cwmin value.
@@ -244,10 +249,11 @@ struct txentry_desc {
244 u16 signal; 249 u16 signal;
245 u16 service; 250 u16 service;
246 251
247 int aifs; 252 short retry_limit;
248 int ifs; 253 short aifs;
249 int cw_min; 254 short ifs;
250 int cw_max; 255 short cw_min;
256 short cw_max;
251}; 257};
252 258
253/** 259/**
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
index 15191d6581b1..5d690ee1befa 100644
--- a/drivers/net/wireless/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/rt2x00/rt61pci.c
@@ -1526,8 +1526,7 @@ static int rt61pci_set_device_state(struct rt2x00_dev *rt2x00dev,
1526 */ 1526 */
1527static void rt61pci_write_tx_desc(struct rt2x00_dev *rt2x00dev, 1527static void rt61pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1528 struct sk_buff *skb, 1528 struct sk_buff *skb,
1529 struct txentry_desc *txdesc, 1529 struct txentry_desc *txdesc)
1530 struct ieee80211_tx_control *control)
1531{ 1530{
1532 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb); 1531 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb);
1533 __le32 *txd = skbdesc->desc; 1532 __le32 *txd = skbdesc->desc;
@@ -1577,8 +1576,7 @@ static void rt61pci_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1577 test_bit(ENTRY_TXD_OFDM_RATE, &txdesc->flags)); 1576 test_bit(ENTRY_TXD_OFDM_RATE, &txdesc->flags));
1578 rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs); 1577 rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs);
1579 rt2x00_set_field32(&word, TXD_W0_RETRY_MODE, 1578 rt2x00_set_field32(&word, TXD_W0_RETRY_MODE,
1580 !!(control->flags & 1579 test_bit(ENTRY_TXD_RETRY_MODE, &txdesc->flags));
1581 IEEE80211_TXCTL_LONG_RETRY_LIMIT));
1582 rt2x00_set_field32(&word, TXD_W0_TKIP_MIC, 0); 1580 rt2x00_set_field32(&word, TXD_W0_TKIP_MIC, 0);
1583 rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, skbdesc->data_len); 1581 rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, skbdesc->data_len);
1584 rt2x00_set_field32(&word, TXD_W0_BURST, 1582 rt2x00_set_field32(&word, TXD_W0_BURST,
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
index 51c5575ed02f..d98002cfe091 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/rt2x00/rt73usb.c
@@ -1255,8 +1255,7 @@ static int rt73usb_set_device_state(struct rt2x00_dev *rt2x00dev,
1255 */ 1255 */
1256static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev, 1256static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1257 struct sk_buff *skb, 1257 struct sk_buff *skb,
1258 struct txentry_desc *txdesc, 1258 struct txentry_desc *txdesc)
1259 struct ieee80211_tx_control *control)
1260{ 1259{
1261 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb); 1260 struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb);
1262 __le32 *txd = skbdesc->desc; 1261 __le32 *txd = skbdesc->desc;
@@ -1301,8 +1300,7 @@ static void rt73usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
1301 test_bit(ENTRY_TXD_OFDM_RATE, &txdesc->flags)); 1300 test_bit(ENTRY_TXD_OFDM_RATE, &txdesc->flags));
1302 rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs); 1301 rt2x00_set_field32(&word, TXD_W0_IFS, txdesc->ifs);
1303 rt2x00_set_field32(&word, TXD_W0_RETRY_MODE, 1302 rt2x00_set_field32(&word, TXD_W0_RETRY_MODE,
1304 !!(control->flags & 1303 test_bit(ENTRY_TXD_RETRY_MODE, &txdesc->flags));
1305 IEEE80211_TXCTL_LONG_RETRY_LIMIT));
1306 rt2x00_set_field32(&word, TXD_W0_TKIP_MIC, 0); 1304 rt2x00_set_field32(&word, TXD_W0_TKIP_MIC, 0);
1307 rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, skbdesc->data_len); 1305 rt2x00_set_field32(&word, TXD_W0_DATABYTE_COUNT, skbdesc->data_len);
1308 rt2x00_set_field32(&word, TXD_W0_BURST2, 1306 rt2x00_set_field32(&word, TXD_W0_BURST2,