diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00debug.c | 14 | ||||
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00queue.h | 3 |
2 files changed, 13 insertions, 4 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.c b/drivers/net/wireless/rt2x00/rt2x00debug.c index 9e2eed51e167..1e81eef9ca1a 100644 --- a/drivers/net/wireless/rt2x00/rt2x00debug.c +++ b/drivers/net/wireless/rt2x00/rt2x00debug.c | |||
@@ -159,6 +159,7 @@ void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev, | |||
159 | struct sk_buff *skbcopy; | 159 | struct sk_buff *skbcopy; |
160 | struct rt2x00dump_hdr *dump_hdr; | 160 | struct rt2x00dump_hdr *dump_hdr; |
161 | struct timeval timestamp; | 161 | struct timeval timestamp; |
162 | u32 data_len; | ||
162 | 163 | ||
163 | do_gettimeofday(×tamp); | 164 | do_gettimeofday(×tamp); |
164 | 165 | ||
@@ -170,7 +171,11 @@ void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev, | |||
170 | return; | 171 | return; |
171 | } | 172 | } |
172 | 173 | ||
173 | skbcopy = alloc_skb(sizeof(*dump_hdr) + skbdesc->desc_len + skb->len, | 174 | data_len = skb->len; |
175 | if (skbdesc->flags & SKBDESC_DESC_IN_SKB) | ||
176 | data_len -= skbdesc->desc_len; | ||
177 | |||
178 | skbcopy = alloc_skb(sizeof(*dump_hdr) + skbdesc->desc_len + data_len, | ||
174 | GFP_ATOMIC); | 179 | GFP_ATOMIC); |
175 | if (!skbcopy) { | 180 | if (!skbcopy) { |
176 | DEBUG(rt2x00dev, "Failed to copy skb for dump.\n"); | 181 | DEBUG(rt2x00dev, "Failed to copy skb for dump.\n"); |
@@ -181,7 +186,7 @@ void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev, | |||
181 | dump_hdr->version = cpu_to_le32(DUMP_HEADER_VERSION); | 186 | dump_hdr->version = cpu_to_le32(DUMP_HEADER_VERSION); |
182 | dump_hdr->header_length = cpu_to_le32(sizeof(*dump_hdr)); | 187 | dump_hdr->header_length = cpu_to_le32(sizeof(*dump_hdr)); |
183 | dump_hdr->desc_length = cpu_to_le32(skbdesc->desc_len); | 188 | dump_hdr->desc_length = cpu_to_le32(skbdesc->desc_len); |
184 | dump_hdr->data_length = cpu_to_le32(skb->len); | 189 | dump_hdr->data_length = cpu_to_le32(data_len); |
185 | dump_hdr->chip_rt = cpu_to_le16(rt2x00dev->chip.rt); | 190 | dump_hdr->chip_rt = cpu_to_le16(rt2x00dev->chip.rt); |
186 | dump_hdr->chip_rf = cpu_to_le16(rt2x00dev->chip.rf); | 191 | dump_hdr->chip_rf = cpu_to_le16(rt2x00dev->chip.rf); |
187 | dump_hdr->chip_rev = cpu_to_le16(rt2x00dev->chip.rev); | 192 | dump_hdr->chip_rev = cpu_to_le16(rt2x00dev->chip.rev); |
@@ -191,8 +196,9 @@ void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev, | |||
191 | dump_hdr->timestamp_sec = cpu_to_le32(timestamp.tv_sec); | 196 | dump_hdr->timestamp_sec = cpu_to_le32(timestamp.tv_sec); |
192 | dump_hdr->timestamp_usec = cpu_to_le32(timestamp.tv_usec); | 197 | dump_hdr->timestamp_usec = cpu_to_le32(timestamp.tv_usec); |
193 | 198 | ||
194 | memcpy(skb_put(skbcopy, skbdesc->desc_len), skbdesc->desc, | 199 | if (!(skbdesc->flags & SKBDESC_DESC_IN_SKB)) |
195 | skbdesc->desc_len); | 200 | memcpy(skb_put(skbcopy, skbdesc->desc_len), skbdesc->desc, |
201 | skbdesc->desc_len); | ||
196 | memcpy(skb_put(skbcopy, skb->len), skb->data, skb->len); | 202 | memcpy(skb_put(skbcopy, skb->len), skb->data, skb->len); |
197 | 203 | ||
198 | skb_queue_tail(&intf->frame_dump_skbqueue, skbcopy); | 204 | skb_queue_tail(&intf->frame_dump_skbqueue, skbcopy); |
diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.h b/drivers/net/wireless/rt2x00/rt2x00queue.h index 36a957adc1f9..f79170849add 100644 --- a/drivers/net/wireless/rt2x00/rt2x00queue.h +++ b/drivers/net/wireless/rt2x00/rt2x00queue.h | |||
@@ -94,12 +94,15 @@ enum data_queue_qid { | |||
94 | * mac80211 but was stripped for processing by the driver. | 94 | * mac80211 but was stripped for processing by the driver. |
95 | * @SKBDESC_NOT_MAC80211: Frame didn't originate from mac80211, | 95 | * @SKBDESC_NOT_MAC80211: Frame didn't originate from mac80211, |
96 | * don't try to pass it back. | 96 | * don't try to pass it back. |
97 | * @SKBDESC_DESC_IN_SKB: The descriptor is at the start of the | ||
98 | * skb, instead of in the desc field. | ||
97 | */ | 99 | */ |
98 | enum skb_frame_desc_flags { | 100 | enum skb_frame_desc_flags { |
99 | SKBDESC_DMA_MAPPED_RX = 1 << 0, | 101 | SKBDESC_DMA_MAPPED_RX = 1 << 0, |
100 | SKBDESC_DMA_MAPPED_TX = 1 << 1, | 102 | SKBDESC_DMA_MAPPED_TX = 1 << 1, |
101 | SKBDESC_IV_STRIPPED = 1 << 2, | 103 | SKBDESC_IV_STRIPPED = 1 << 2, |
102 | SKBDESC_NOT_MAC80211 = 1 << 3, | 104 | SKBDESC_NOT_MAC80211 = 1 << 3, |
105 | SKBDESC_DESC_IN_SKB = 1 << 4, | ||
103 | }; | 106 | }; |
104 | 107 | ||
105 | /** | 108 | /** |