diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00pci.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00pci.c | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.c b/drivers/net/wireless/rt2x00/rt2x00pci.c index 85629f1999ab..2780df00623c 100644 --- a/drivers/net/wireless/rt2x00/rt2x00pci.c +++ b/drivers/net/wireless/rt2x00/rt2x00pci.c | |||
@@ -124,47 +124,40 @@ void rt2x00pci_rxdone(struct rt2x00_dev *rt2x00dev) | |||
124 | struct data_entry *entry; | 124 | struct data_entry *entry; |
125 | struct data_desc *rxd; | 125 | struct data_desc *rxd; |
126 | struct sk_buff *skb; | 126 | struct sk_buff *skb; |
127 | u32 desc; | 127 | struct rxdata_entry_desc desc; |
128 | int retval; | 128 | u32 word; |
129 | int signal; | ||
130 | int rssi; | ||
131 | int ofdm; | ||
132 | int size; | ||
133 | 129 | ||
134 | while (1) { | 130 | while (1) { |
135 | entry = rt2x00_get_data_entry(ring); | 131 | entry = rt2x00_get_data_entry(ring); |
136 | rxd = entry->priv; | 132 | rxd = entry->priv; |
137 | rt2x00_desc_read(rxd, 0, &desc); | 133 | rt2x00_desc_read(rxd, 0, &word); |
138 | 134 | ||
139 | if (rt2x00_get_field32(desc, RXD_ENTRY_OWNER_NIC)) | 135 | if (rt2x00_get_field32(word, RXD_ENTRY_OWNER_NIC)) |
140 | break; | 136 | break; |
141 | 137 | ||
142 | retval = rt2x00dev->ops->lib->fill_rxdone(entry, &signal, | 138 | memset(&desc, 0x00, sizeof(desc)); |
143 | &rssi, &ofdm, &size); | 139 | rt2x00dev->ops->lib->fill_rxdone(entry, &desc); |
144 | if (retval) | ||
145 | goto skip_entry; | ||
146 | 140 | ||
147 | /* | 141 | /* |
148 | * Allocate the sk_buffer, initialize it and copy | 142 | * Allocate the sk_buffer, initialize it and copy |
149 | * all data into it. | 143 | * all data into it. |
150 | */ | 144 | */ |
151 | skb = dev_alloc_skb(size + NET_IP_ALIGN); | 145 | skb = dev_alloc_skb(desc.size + NET_IP_ALIGN); |
152 | if (!skb) | 146 | if (!skb) |
153 | return; | 147 | return; |
154 | 148 | ||
155 | skb_reserve(skb, NET_IP_ALIGN); | 149 | skb_reserve(skb, NET_IP_ALIGN); |
156 | skb_put(skb, size); | 150 | skb_put(skb, desc.size); |
157 | memcpy(skb->data, entry->data_addr, size); | 151 | memcpy(skb->data, entry->data_addr, desc.size); |
158 | 152 | ||
159 | /* | 153 | /* |
160 | * Send the frame to rt2x00lib for further processing. | 154 | * Send the frame to rt2x00lib for further processing. |
161 | */ | 155 | */ |
162 | rt2x00lib_rxdone(entry, skb, signal, rssi, ofdm); | 156 | rt2x00lib_rxdone(entry, skb, &desc); |
163 | 157 | ||
164 | skip_entry: | ||
165 | if (test_bit(DEVICE_ENABLED_RADIO, &ring->rt2x00dev->flags)) { | 158 | if (test_bit(DEVICE_ENABLED_RADIO, &ring->rt2x00dev->flags)) { |
166 | rt2x00_set_field32(&desc, RXD_ENTRY_OWNER_NIC, 1); | 159 | rt2x00_set_field32(&word, RXD_ENTRY_OWNER_NIC, 1); |
167 | rt2x00_desc_write(rxd, 0, desc); | 160 | rt2x00_desc_write(rxd, 0, word); |
168 | } | 161 | } |
169 | 162 | ||
170 | rt2x00_ring_index_inc(ring); | 163 | rt2x00_ring_index_inc(ring); |