diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00pci.c')
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00pci.c | 19 | 
1 files changed, 15 insertions, 4 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00pci.c b/drivers/net/wireless/rt2x00/rt2x00pci.c index 4dd82b0b052..17148bb2442 100644 --- a/drivers/net/wireless/rt2x00/rt2x00pci.c +++ b/drivers/net/wireless/rt2x00/rt2x00pci.c @@ -60,14 +60,15 @@ int rt2x00pci_regbusy_read(struct rt2x00_dev *rt2x00dev,  }  EXPORT_SYMBOL_GPL(rt2x00pci_regbusy_read); -void rt2x00pci_rxdone(struct rt2x00_dev *rt2x00dev) +bool rt2x00pci_rxdone(struct rt2x00_dev *rt2x00dev)  {  	struct data_queue *queue = rt2x00dev->rx;  	struct queue_entry *entry;  	struct queue_entry_priv_pci *entry_priv;  	struct skb_frame_desc *skbdesc; +	int max_rx = 16; -	while (1) { +	while (--max_rx) {  		entry = rt2x00queue_get_entry(queue, Q_INDEX);  		entry_priv = entry->priv_data; @@ -93,9 +94,20 @@ void rt2x00pci_rxdone(struct rt2x00_dev *rt2x00dev)  		 */  		rt2x00lib_rxdone(entry);  	} + +	return !max_rx;  }  EXPORT_SYMBOL_GPL(rt2x00pci_rxdone); +void rt2x00pci_flush_queue(struct data_queue *queue, bool drop) +{ +	unsigned int i; + +	for (i = 0; !rt2x00queue_empty(queue) && i < 10; i++) +		msleep(10); +} +EXPORT_SYMBOL_GPL(rt2x00pci_flush_queue); +  /*   * Device initialization handlers.   */ @@ -239,9 +251,8 @@ exit:  	return -ENOMEM;  } -int rt2x00pci_probe(struct pci_dev *pci_dev, const struct pci_device_id *id) +int rt2x00pci_probe(struct pci_dev *pci_dev, const struct rt2x00_ops *ops)  { -	struct rt2x00_ops *ops = (struct rt2x00_ops *)id->driver_data;  	struct ieee80211_hw *hw;  	struct rt2x00_dev *rt2x00dev;  	int retval;  |