|
@@ -1121,6 +1121,18 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
|
|
|
{
|
|
|
int retval = -ENOMEM;
|
|
|
|
|
|
+ /*
|
|
|
+ * Allocate the driver data memory, if necessary.
|
|
|
+ */
|
|
|
+ if (rt2x00dev->ops->drv_data_size > 0) {
|
|
|
+ rt2x00dev->drv_data = kzalloc(rt2x00dev->ops->drv_data_size,
|
|
|
+ GFP_KERNEL);
|
|
|
+ if (!rt2x00dev->drv_data) {
|
|
|
+ retval = -ENOMEM;
|
|
|
+ goto exit;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
spin_lock_init(&rt2x00dev->irqmask_lock);
|
|
|
mutex_init(&rt2x00dev->csr_mutex);
|
|
|
|
|
@@ -1261,6 +1273,12 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev)
|
|
|
* Free queue structures.
|
|
|
*/
|
|
|
rt2x00queue_free(rt2x00dev);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Free the driver data.
|
|
|
+ */
|
|
|
+ if (rt2x00dev->drv_data)
|
|
|
+ kfree(rt2x00dev->drv_data);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(rt2x00lib_remove_dev);
|
|
|
|