diff options
author | Ivo van Doorn <IvDoorn@gmail.com> | 2008-02-05 16:42:23 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-02-29 15:19:27 -0500 |
commit | 181d6902b6bad978d157e69479c95cc0ff213a76 (patch) | |
tree | 7a90b8a949a50bc8db6b7b5b2d76d5671fb9a89e /drivers/net/wireless/rt2x00/rt2x00debug.c | |
parent | 811aa9cad1bd927999888ab56ed9592519d2fef6 (diff) |
rt2x00: Queue handling overhaul
This introduces a big queue handling overhaul, this also
renames "ring" to "queues".
Move queue handling into rt2x00queue.c and the matching header,
use Kerneldoc to improve rt2x00 library documentation.
Access to the queues is now protected under a spinlock, this
to prevent race conditions which could corrupt the indexing
system of the queue.
Each queue entry allocates x bytes for driver/device specific data,
this cleans up the queue structure significantly and improves
code readability.
rt2500usb no longer needs 2 entries in the beacon queue to correctly
send out the guardian byte. This is now handled in the entry specific
structure.
rt61 and rt73 now use the correct descriptor size for beacon frames,
since this data is written into the registers not the entire TXD
descriptor was used but instead of a subset of it named TXINFO.
Finally this also fixes numerous other bugs related to incorrect
beacon handling or beacon related code.
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/rt2x00debug.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00debug.c | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.c b/drivers/net/wireless/rt2x00/rt2x00debug.c index d70ce6ec8de8..4e048ac0a684 100644 --- a/drivers/net/wireless/rt2x00/rt2x00debug.c +++ b/drivers/net/wireless/rt2x00/rt2x00debug.c | |||
@@ -116,7 +116,7 @@ void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev, | |||
116 | struct sk_buff *skb) | 116 | struct sk_buff *skb) |
117 | { | 117 | { |
118 | struct rt2x00debug_intf *intf = rt2x00dev->debugfs_intf; | 118 | struct rt2x00debug_intf *intf = rt2x00dev->debugfs_intf; |
119 | struct skb_desc *desc = get_skb_desc(skb); | 119 | struct skb_frame_desc *desc = get_skb_frame_desc(skb); |
120 | struct sk_buff *skbcopy; | 120 | struct sk_buff *skbcopy; |
121 | struct rt2x00dump_hdr *dump_hdr; | 121 | struct rt2x00dump_hdr *dump_hdr; |
122 | struct timeval timestamp; | 122 | struct timeval timestamp; |
@@ -147,7 +147,7 @@ void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev, | |||
147 | dump_hdr->chip_rf = cpu_to_le16(rt2x00dev->chip.rf); | 147 | dump_hdr->chip_rf = cpu_to_le16(rt2x00dev->chip.rf); |
148 | dump_hdr->chip_rev = cpu_to_le32(rt2x00dev->chip.rev); | 148 | dump_hdr->chip_rev = cpu_to_le32(rt2x00dev->chip.rev); |
149 | dump_hdr->type = cpu_to_le16(desc->frame_type); | 149 | dump_hdr->type = cpu_to_le16(desc->frame_type); |
150 | dump_hdr->ring_index = desc->ring->queue_idx; | 150 | dump_hdr->queue_index = desc->entry->queue->qid; |
151 | dump_hdr->entry_index = desc->entry->entry_idx; | 151 | dump_hdr->entry_index = desc->entry->entry_idx; |
152 | dump_hdr->timestamp_sec = cpu_to_le32(timestamp.tv_sec); | 152 | dump_hdr->timestamp_sec = cpu_to_le32(timestamp.tv_sec); |
153 | dump_hdr->timestamp_usec = cpu_to_le32(timestamp.tv_usec); | 153 | dump_hdr->timestamp_usec = cpu_to_le32(timestamp.tv_usec); |
@@ -186,7 +186,7 @@ static int rt2x00debug_file_release(struct inode *inode, struct file *file) | |||
186 | return 0; | 186 | return 0; |
187 | } | 187 | } |
188 | 188 | ||
189 | static int rt2x00debug_open_ring_dump(struct inode *inode, struct file *file) | 189 | static int rt2x00debug_open_queue_dump(struct inode *inode, struct file *file) |
190 | { | 190 | { |
191 | struct rt2x00debug_intf *intf = inode->i_private; | 191 | struct rt2x00debug_intf *intf = inode->i_private; |
192 | int retval; | 192 | int retval; |
@@ -203,7 +203,7 @@ static int rt2x00debug_open_ring_dump(struct inode *inode, struct file *file) | |||
203 | return 0; | 203 | return 0; |
204 | } | 204 | } |
205 | 205 | ||
206 | static int rt2x00debug_release_ring_dump(struct inode *inode, struct file *file) | 206 | static int rt2x00debug_release_queue_dump(struct inode *inode, struct file *file) |
207 | { | 207 | { |
208 | struct rt2x00debug_intf *intf = inode->i_private; | 208 | struct rt2x00debug_intf *intf = inode->i_private; |
209 | 209 | ||
@@ -214,10 +214,10 @@ static int rt2x00debug_release_ring_dump(struct inode *inode, struct file *file) | |||
214 | return rt2x00debug_file_release(inode, file); | 214 | return rt2x00debug_file_release(inode, file); |
215 | } | 215 | } |
216 | 216 | ||
217 | static ssize_t rt2x00debug_read_ring_dump(struct file *file, | 217 | static ssize_t rt2x00debug_read_queue_dump(struct file *file, |
218 | char __user *buf, | 218 | char __user *buf, |
219 | size_t length, | 219 | size_t length, |
220 | loff_t *offset) | 220 | loff_t *offset) |
221 | { | 221 | { |
222 | struct rt2x00debug_intf *intf = file->private_data; | 222 | struct rt2x00debug_intf *intf = file->private_data; |
223 | struct sk_buff *skb; | 223 | struct sk_buff *skb; |
@@ -248,8 +248,8 @@ exit: | |||
248 | return status; | 248 | return status; |
249 | } | 249 | } |
250 | 250 | ||
251 | static unsigned int rt2x00debug_poll_ring_dump(struct file *file, | 251 | static unsigned int rt2x00debug_poll_queue_dump(struct file *file, |
252 | poll_table *wait) | 252 | poll_table *wait) |
253 | { | 253 | { |
254 | struct rt2x00debug_intf *intf = file->private_data; | 254 | struct rt2x00debug_intf *intf = file->private_data; |
255 | 255 | ||
@@ -261,12 +261,12 @@ static unsigned int rt2x00debug_poll_ring_dump(struct file *file, | |||
261 | return 0; | 261 | return 0; |
262 | } | 262 | } |
263 | 263 | ||
264 | static const struct file_operations rt2x00debug_fop_ring_dump = { | 264 | static const struct file_operations rt2x00debug_fop_queue_dump = { |
265 | .owner = THIS_MODULE, | 265 | .owner = THIS_MODULE, |
266 | .read = rt2x00debug_read_ring_dump, | 266 | .read = rt2x00debug_read_queue_dump, |
267 | .poll = rt2x00debug_poll_ring_dump, | 267 | .poll = rt2x00debug_poll_queue_dump, |
268 | .open = rt2x00debug_open_ring_dump, | 268 | .open = rt2x00debug_open_queue_dump, |
269 | .release = rt2x00debug_release_ring_dump, | 269 | .release = rt2x00debug_release_queue_dump, |
270 | }; | 270 | }; |
271 | 271 | ||
272 | #define RT2X00DEBUGFS_OPS_READ(__name, __format, __type) \ | 272 | #define RT2X00DEBUGFS_OPS_READ(__name, __format, __type) \ |
@@ -503,7 +503,7 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev) | |||
503 | 503 | ||
504 | intf->frame_dump_entry = | 504 | intf->frame_dump_entry = |
505 | debugfs_create_file("dump", S_IRUGO, intf->frame_folder, | 505 | debugfs_create_file("dump", S_IRUGO, intf->frame_folder, |
506 | intf, &rt2x00debug_fop_ring_dump); | 506 | intf, &rt2x00debug_fop_queue_dump); |
507 | if (IS_ERR(intf->frame_dump_entry)) | 507 | if (IS_ERR(intf->frame_dump_entry)) |
508 | goto exit; | 508 | goto exit; |
509 | 509 | ||