diff options
author | Ivo van Doorn <ivdoorn@gmail.com> | 2008-05-10 07:46:13 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-05-21 21:47:34 -0400 |
commit | 7050ec821c52826b63835dde54ee3d71c7db4262 (patch) | |
tree | f8154413b4ed1e8ff01b6dbb1c79240dcce83dc8 /drivers/net/wireless/rt2x00/rt2x00.h | |
parent | 4de36fe5abe077a4c65bf0b6a309865aa043e055 (diff) |
rt2x00: Split rt2x00lib_write_tx_desc()
Split rt2x00lib_write_tx_desc() up into a TX descriptor initializor
and TX descriptor writer.
This split is required to properly allow mac80211 to move its
tx_control structure into the skb->cb array.
The rt2x00queue_create_tx_descriptor() function will read all tx control
information and convert it into a rt2x00 TX descriptor information structure.
After that function is complete, we have all information we needed from the
tx control structure and are free to start writing into the skb->cb array
for our own purposes.
rt2x00queue_write_tx_descriptor() will be in charge of really sending
the TX descriptor to the hardware and kicking the TX queue.
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00.h')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00.h | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h index 6f7b34fac16c..9c186d79c11c 100644 --- a/drivers/net/wireless/rt2x00/rt2x00.h +++ b/drivers/net/wireless/rt2x00/rt2x00.h | |||
@@ -927,6 +927,41 @@ static inline u16 get_duration_res(const unsigned int size, const u8 rate) | |||
927 | } | 927 | } |
928 | 928 | ||
929 | /** | 929 | /** |
930 | * rt2x00queue_create_tx_descriptor - Create TX descriptor from mac80211 input | ||
931 | * @entry: The entry which will be used to transfer the TX frame. | ||
932 | * @txdesc: rt2x00 TX descriptor which will be initialized by this function. | ||
933 | * @control: mac80211 TX control structure from where we read the information. | ||
934 | * | ||
935 | * This function will initialize the &struct txentry_desc based on information | ||
936 | * from mac80211. This descriptor can then be used by rt2x00lib and the drivers | ||
937 | * to correctly initialize the hardware descriptor. | ||
938 | * Note that before calling this function the skb->cb array must be untouched | ||
939 | * by rt2x00lib. Only after this function completes will it be save to | ||
940 | * overwrite the skb->cb information. | ||
941 | * The reason for this is that mac80211 writes its own tx information into | ||
942 | * the skb->cb array, and this function will use that information to initialize | ||
943 | * the &struct txentry_desc structure. | ||
944 | */ | ||
945 | void rt2x00queue_create_tx_descriptor(struct queue_entry *entry, | ||
946 | struct txentry_desc *txdesc, | ||
947 | struct ieee80211_tx_control *control); | ||
948 | |||
949 | /** | ||
950 | * rt2x00queue_write_tx_descriptor - Write TX descriptor to hardware | ||
951 | * @entry: The entry which will be used to transfer the TX frame. | ||
952 | * @txdesc: TX descriptor which will be used to write hardware descriptor | ||
953 | * | ||
954 | * This function will write a TX descriptor initialized by | ||
955 | * &rt2x00queue_create_tx_descriptor to the hardware. After this call | ||
956 | * has completed the frame is now owned by the hardware, the hardware | ||
957 | * queue will have automatically be kicked unless this frame was generated | ||
958 | * by rt2x00lib, in which case the frame is "special" and must be kicked | ||
959 | * by the caller. | ||
960 | */ | ||
961 | void rt2x00queue_write_tx_descriptor(struct queue_entry *entry, | ||
962 | struct txentry_desc *txdesc); | ||
963 | |||
964 | /** | ||
930 | * rt2x00queue_get_queue - Convert queue index to queue pointer | 965 | * rt2x00queue_get_queue - Convert queue index to queue pointer |
931 | * @rt2x00dev: Pointer to &struct rt2x00_dev. | 966 | * @rt2x00dev: Pointer to &struct rt2x00_dev. |
932 | * @queue: rt2x00 queue index (see &enum data_queue_qid). | 967 | * @queue: rt2x00 queue index (see &enum data_queue_qid). |
@@ -964,13 +999,6 @@ void rt2x00lib_rxdone(struct queue_entry *entry, | |||
964 | struct rxdone_entry_desc *rxdesc); | 999 | struct rxdone_entry_desc *rxdesc); |
965 | 1000 | ||
966 | /* | 1001 | /* |
967 | * TX descriptor initializer | ||
968 | */ | ||
969 | void rt2x00lib_write_tx_desc(struct rt2x00_dev *rt2x00dev, | ||
970 | struct sk_buff *skb, | ||
971 | struct ieee80211_tx_control *control); | ||
972 | |||
973 | /* | ||
974 | * mac80211 handlers. | 1002 | * mac80211 handlers. |
975 | */ | 1003 | */ |
976 | int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb, | 1004 | int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb, |