From 41d00632f6138fad4264c39206f82754f8f48f30 Mon Sep 17 00:00:00 2001 From: Gertjan van Wingerde Date: Mon, 6 Feb 2012 23:45:06 +0100 Subject: [PATCH] --- yaml --- r: 290399 b: refs/heads/master c: 1ebbc48520a0853cd4d812d8342f9886b2b07b92 h: refs/heads/master i: 290397: 6477dbcf332b5099103eb606e42337949d111a2a 290395: 4c663a1025cb0583f628d0e0d709ee7b3442c0b1 290391: f11f6bd849c50f453d859a46bcf804d6c6096566 290383: 27d01e2f4c570df9a01c236adbd6eb59d8d4df53 290367: d9892f0803d65c6feecd1f3258bc337cd2d96720 v: v3 --- [refs] | 2 +- trunk/drivers/net/wireless/rt2x00/rt2x00.h | 6 ++++++ trunk/drivers/net/wireless/rt2x00/rt2x00dev.c | 18 ++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 8202ca03b15b..6589b2d886c7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 234f6e5c05277c0198797553434e2ed5acac18cc +refs/heads/master: 1ebbc48520a0853cd4d812d8342f9886b2b07b92 diff --git a/trunk/drivers/net/wireless/rt2x00/rt2x00.h b/trunk/drivers/net/wireless/rt2x00/rt2x00.h index b03b22c47b18..b4260bfb6cb4 100644 --- a/trunk/drivers/net/wireless/rt2x00/rt2x00.h +++ b/trunk/drivers/net/wireless/rt2x00/rt2x00.h @@ -647,6 +647,7 @@ struct rt2x00lib_ops { */ struct rt2x00_ops { const char *name; + const unsigned int drv_data_size; const unsigned int max_sta_intf; const unsigned int max_ap_intf; const unsigned int eeprom_size; @@ -741,6 +742,11 @@ struct rt2x00_dev { */ const struct rt2x00_ops *ops; + /* + * Driver data. + */ + void *drv_data; + /* * IEEE80211 control structure. */ diff --git a/trunk/drivers/net/wireless/rt2x00/rt2x00dev.c b/trunk/drivers/net/wireless/rt2x00/rt2x00dev.c index c3e1aa7c1a80..bae5b01299ea 100644 --- a/trunk/drivers/net/wireless/rt2x00/rt2x00dev.c +++ b/trunk/drivers/net/wireless/rt2x00/rt2x00dev.c @@ -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);