Skip to content

Commit

Permalink
rt2x00: Correctly initialize data and desc pointer
Browse files Browse the repository at this point in the history
rt2500usb and rt73usb store the descriptor in different
places. This means we should move the initialization of
the 2 pointers to the driver callback function fill_rxdone().

Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Ivo van Doorn authored and David S. Miller committed Jan 28, 2008
1 parent 837e7f2 commit 7d1de80
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 2 deletions.
12 changes: 12 additions & 0 deletions drivers/net/wireless/rt2x00/rt2500usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1113,6 +1113,7 @@ static void rt2500usb_kick_tx_queue(struct rt2x00_dev *rt2x00dev,
static void rt2500usb_fill_rxdone(struct data_entry *entry,
struct rxdata_entry_desc *desc)
{
struct skb_desc *skbdesc = get_skb_desc(entry->skb);
struct urb *urb = entry->priv;
__le32 *rxd = (__le32 *)(entry->skb->data +
(urb->actual_length - entry->ring->desc_size));
Expand All @@ -1137,6 +1138,17 @@ static void rt2500usb_fill_rxdone(struct data_entry *entry,
desc->ofdm = rt2x00_get_field32(word0, RXD_W0_OFDM);
desc->size = rt2x00_get_field32(word0, RXD_W0_DATABYTE_COUNT);
desc->my_bss = !!rt2x00_get_field32(word0, RXD_W0_MY_BSS);

/*
* Trim the skb to clear the descriptor area.
*/
skb_pull(entry->skb, entry->ring->desc_size);

/*
* Set descriptor and data pointer.
*/
skbdesc->desc = entry->skb->data + skbdesc->data_len;
skbdesc->data = entry->skb->data;
}

/*
Expand Down
2 changes: 0 additions & 2 deletions drivers/net/wireless/rt2x00/rt2x00usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -303,8 +303,6 @@ static void rt2x00usb_interrupt_rxdone(struct urb *urb)
skbdesc = get_skb_desc(entry->skb);
skbdesc->desc_len = entry->ring->desc_size;
skbdesc->data_len = entry->skb->len;
skbdesc->desc = entry->skb->data - skbdesc->desc_len;
skbdesc->data = entry->skb->data;
skbdesc->ring = ring;
skbdesc->entry = entry;

Expand Down
7 changes: 7 additions & 0 deletions drivers/net/wireless/rt2x00/rt73usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1376,6 +1376,7 @@ static int rt73usb_agc_to_rssi(struct rt2x00_dev *rt2x00dev, int rxd_w1)
static void rt73usb_fill_rxdone(struct data_entry *entry,
struct rxdata_entry_desc *desc)
{
struct skb_desc *skbdesc = get_skb_desc(entry->skb);
__le32 *rxd = (__le32 *)entry->skb->data;
u32 word0;
u32 word1;
Expand All @@ -1400,6 +1401,12 @@ static void rt73usb_fill_rxdone(struct data_entry *entry,
* Pull the skb to clear the descriptor area.
*/
skb_pull(entry->skb, entry->ring->desc_size);

/*
* Set descriptor and data pointer.
*/
skbdesc->desc = entry->skb->data - skbdesc->desc_len;
skbdesc->data = entry->skb->data;
}

/*
Expand Down

0 comments on commit 7d1de80

Please sign in to comment.