diff options
Diffstat (limited to 'drivers/net/wireless/rtl818x/rtl8187_dev.c')
| -rw-r--r-- | drivers/net/wireless/rtl818x/rtl8187_dev.c | 13 | 
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/net/wireless/rtl818x/rtl8187_dev.c b/drivers/net/wireless/rtl818x/rtl8187_dev.c index 158827e50c5..6499ccc34c9 100644 --- a/drivers/net/wireless/rtl818x/rtl8187_dev.c +++ b/drivers/net/wireless/rtl818x/rtl8187_dev.c @@ -1326,6 +1326,14 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,  	priv = dev->priv;  	priv->is_rtl8187b = (id->driver_info == DEVICE_RTL8187B); +	/* allocate "DMA aware" buffer for register accesses */ +	priv->io_dmabuf = kmalloc(sizeof(*priv->io_dmabuf), GFP_KERNEL); +	if (!priv->io_dmabuf) { +		err = -ENOMEM; +		goto err_free_dev; +	} +	mutex_init(&priv->io_mutex); +  	SET_IEEE80211_DEV(dev, &intf->dev);  	usb_set_intfdata(intf, dev);  	priv->udev = udev; @@ -1489,7 +1497,7 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,  	err = ieee80211_register_hw(dev);  	if (err) {  		printk(KERN_ERR "rtl8187: Cannot register device\n"); -		goto err_free_dev; +		goto err_free_dmabuf;  	}  	mutex_init(&priv->conf_mutex);  	skb_queue_head_init(&priv->b_tx_status.queue); @@ -1506,6 +1514,8 @@ static int __devinit rtl8187_probe(struct usb_interface *intf,  	return 0; + err_free_dmabuf: +	kfree(priv->io_dmabuf);   err_free_dev:  	ieee80211_free_hw(dev);  	usb_set_intfdata(intf, NULL); @@ -1529,6 +1539,7 @@ static void __devexit rtl8187_disconnect(struct usb_interface *intf)  	priv = dev->priv;  	usb_reset_device(priv->udev);  	usb_put_dev(interface_to_usbdev(intf)); +	kfree(priv->io_dmabuf);  	ieee80211_free_hw(dev);  }  |