27 #include <linux/kernel.h>
28 #include <linux/module.h>
29 #include <linux/pci.h>
30 #include <linux/slab.h>
49 rt2x00pci_register_read(rt2x00dev, offset, reg);
55 ERROR(rt2x00dev,
"Indirect register access failed: "
56 "offset=0x%.08x, value=0x%.08x\n", offset, *reg);
66 struct queue_entry *
entry;
73 entry_priv = entry->priv_data;
75 if (rt2x00dev->
ops->lib->get_entry_state(entry))
81 skbdesc = get_skb_frame_desc(entry->skb);
83 skbdesc->
desc_len = entry->queue->desc_size;
106 for (i = 0; !rt2x00queue_empty(queue) && i < 10; i++)
114 static int rt2x00pci_alloc_queue_dma(
struct rt2x00_dev *rt2x00dev,
136 for (i = 0; i < queue->
limit; i++) {
137 entry_priv = queue->
entries[
i].priv_data;
145 static void rt2x00pci_free_queue_dma(
struct rt2x00_dev *rt2x00dev,
151 if (entry_priv->
desc)
167 status = rt2x00pci_alloc_queue_dma(rt2x00dev, queue);
176 rt2x00dev->
ops->lib->irq_handler,
179 ERROR(rt2x00dev,
"IRQ %d allocation failed (error %d).\n",
180 rt2x00dev->
irq, status);
188 rt2x00pci_free_queue_dma(rt2x00dev, queue);
207 rt2x00pci_free_queue_dma(rt2x00dev, queue);
214 static void rt2x00pci_free_reg(
struct rt2x00_dev *rt2x00dev)
228 static int rt2x00pci_alloc_reg(
struct rt2x00_dev *rt2x00dev)
249 rt2x00pci_free_reg(rt2x00dev);
270 goto exit_disable_device;
281 goto exit_release_regions;
288 goto exit_release_regions;
291 pci_set_drvdata(pci_dev, hw);
293 rt2x00dev = hw->
priv;
294 rt2x00dev->
dev = &pci_dev->
dev;
297 rt2x00dev->
irq = pci_dev->
irq;
298 rt2x00dev->
name = pci_name(pci_dev);
300 if (pci_is_pcie(pci_dev))
305 retval = rt2x00pci_alloc_reg(rt2x00dev);
307 goto exit_free_device;
324 rt2x00pci_free_reg(rt2x00dev);
329 exit_release_regions:
335 pci_set_drvdata(pci_dev,
NULL);
350 rt2x00pci_free_reg(rt2x00dev);
356 pci_set_drvdata(pci_dev,
NULL);
369 retval = rt2x00lib_suspend(rt2x00dev, state);
386 ERROR(rt2x00dev,
"Failed to resume device.\n");
391 return rt2x00lib_resume(rt2x00dev);