All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] orinoco: firmware: consistently compile out fw cache support if not requested
@ 2009-02-15 10:09 Andrey Borzenkov
  2009-02-15 17:21 ` Dave
  0 siblings, 1 reply; 5+ messages in thread
From: Andrey Borzenkov @ 2009-02-15 10:09 UTC (permalink / raw)
  To: linux-wireless, orinoco-devel

Currently part of support for FW caching is unconditionally compiled
in even if it is never used. Consistently remove caching support if
not requested by user.

Signed-off-by: Andrey Borzenkov <arvidjaar@mail.ru>

---

Patch is against wireless-next

 drivers/net/wireless/orinoco/fw.c      |   24 +++++++--------
 drivers/net/wireless/orinoco/fw.h      |   50 +++++++++++++++++++++++++++++---
 drivers/net/wireless/orinoco/main.c    |    8 +++--
 drivers/net/wireless/orinoco/orinoco.h |    2 +
 4 files changed, 62 insertions(+), 22 deletions(-)

diff --git a/drivers/net/wireless/orinoco/fw.c b/drivers/net/wireless/orinoco/fw.c
index 7d2292d..842834e 100644
--- a/drivers/net/wireless/orinoco/fw.c
+++ b/drivers/net/wireless/orinoco/fw.c
@@ -79,7 +79,7 @@ orinoco_dl_firmware(struct orinoco_private *priv,
 	if (err)
 		goto free;
 
-	if (!priv->cached_fw) {
+	if (!orinoco_cached_fw_get(priv)) {
 		err = request_firmware(&fw_entry, firmware, priv->dev);
 
 		if (err) {
@@ -89,7 +89,7 @@ orinoco_dl_firmware(struct orinoco_private *priv,
 			goto free;
 		}
 	} else
-		fw_entry = priv->cached_fw;
+		fw_entry = orinoco_cached_fw_get(priv);
 
 	hdr = (const struct orinoco_fw_header *) fw_entry->data;
 
@@ -132,7 +132,7 @@ orinoco_dl_firmware(struct orinoco_private *priv,
 
 abort:
 	/* If we requested the firmware, release it. */
-	if (!priv->cached_fw)
+	if (!orinoco_cached_fw_get(priv))
 		release_firmware(fw_entry);
 
 free:
@@ -234,20 +234,20 @@ symbol_dl_firmware(struct orinoco_private *priv,
 	int ret;
 	const struct firmware *fw_entry;
 
-	if (!priv->cached_pri_fw) {
+	if (!orinoco_cached_pri_fw_get(priv)) {
 		if (request_firmware(&fw_entry, fw->pri_fw, priv->dev) != 0) {
 			printk(KERN_ERR "%s: Cannot find firmware: %s\n",
 			       dev->name, fw->pri_fw);
 			return -ENOENT;
 		}
 	} else
-		fw_entry = priv->cached_pri_fw;
+		fw_entry = orinoco_cached_pri_fw_get(priv);
 
 	/* Load primary firmware */
 	ret = symbol_dl_image(priv, fw, fw_entry->data,
 			      fw_entry->data + fw_entry->size, 0);
 
-	if (!priv->cached_pri_fw)
+	if (!orinoco_cached_pri_fw_get(priv))
 		release_firmware(fw_entry);
 	if (ret) {
 		printk(KERN_ERR "%s: Primary firmware download failed\n",
@@ -255,19 +255,19 @@ symbol_dl_firmware(struct orinoco_private *priv,
 		return ret;
 	}
 
-	if (!priv->cached_fw) {
+	if (!orinoco_cached_fw_get(priv)) {
 		if (request_firmware(&fw_entry, fw->sta_fw, priv->dev) != 0) {
 			printk(KERN_ERR "%s: Cannot find firmware: %s\n",
 			       dev->name, fw->sta_fw);
 			return -ENOENT;
 		}
 	} else
-		fw_entry = priv->cached_fw;
+		fw_entry = orinoco_cached_fw_get(priv);
 
 	/* Load secondary firmware */
 	ret = symbol_dl_image(priv, fw, fw_entry->data,
 			      fw_entry->data + fw_entry->size, 1);
-	if (!priv->cached_fw)
+	if (!orinoco_cached_fw_get(priv))
 		release_firmware(fw_entry);
 	if (ret) {
 		printk(KERN_ERR "%s: Secondary firmware download failed\n",
@@ -301,9 +301,9 @@ int orinoco_download(struct orinoco_private *priv)
 	return err;
 }
 
+#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
 void orinoco_cache_fw(struct orinoco_private *priv, int ap)
 {
-#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
 	const struct firmware *fw_entry = NULL;
 	const char *pri_fw;
 	const char *fw;
@@ -323,12 +323,10 @@ void orinoco_cache_fw(struct orinoco_private *priv, int ap)
 		if (request_firmware(&fw_entry, fw, priv->dev) == 0)
 			priv->cached_fw = fw_entry;
 	}
-#endif
 }
 
 void orinoco_uncache_fw(struct orinoco_private *priv)
 {
-#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
 	if (priv->cached_pri_fw)
 		release_firmware(priv->cached_pri_fw);
 	if (priv->cached_fw)
@@ -336,5 +334,5 @@ void orinoco_uncache_fw(struct orinoco_private *priv)
 
 	priv->cached_pri_fw = NULL;
 	priv->cached_fw = NULL;
-#endif
 }
+#endif
diff --git a/drivers/net/wireless/orinoco/fw.h b/drivers/net/wireless/orinoco/fw.h
index 2290f08..1d1e02f 100644
--- a/drivers/net/wireless/orinoco/fw.h
+++ b/drivers/net/wireless/orinoco/fw.h
@@ -5,12 +5,52 @@
 #ifndef _ORINOCO_FW_H_
 #define _ORINOCO_FW_H_
 
-/* Forward declations */
-struct orinoco_private;
-
 int orinoco_download(struct orinoco_private *priv);
 
-void orinoco_cache_fw(struct orinoco_private *priv, int ap);
-void orinoco_uncache_fw(struct orinoco_private *priv);
+#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
+static inline const struct firmware *
+orinoco_cached_fw_get(struct orinoco_private *priv)
+{
+	return priv->cached_fw;
+}
+
+static inline const struct firmware *
+orinoco_cached_pri_fw_get(struct orinoco_private *priv)
+{
+	return priv->cached_pri_fw;
+}
+
+static inline void
+orinoco_cached_fw_set(struct orinoco_private *priv, struct firmware *fw)
+{
+	priv->cached_fw = fw;
+}
+
+static inline void
+orinoco_cached_pri_fw_set(struct orinoco_private *priv, struct firmware *fw)
+{
+	priv->cached_pri_fw = fw;
+}
+
+extern void orinoco_cache_fw(struct orinoco_private *priv, int ap);
+extern void orinoco_uncache_fw(struct orinoco_private *priv);
+#else
+static inline const struct firmware *
+orinoco_cached_fw_get(struct orinoco_private *priv)
+{
+	return NULL;
+}
+
+static inline const struct firmware *
+orinoco_cached_pri_fw_get(struct orinoco_private *priv)
+{
+	return NULL;
+}
+
+#define orinoco_cached_fw_set(priv, fw) do { } while (0)
+#define orinoco_cached_pri_fw_set(priv, fw) do { } while (0)
+#define orinoco_cache_fw(priv, ap) do { } while(0)
+#define orinoco_uncache_fw(priv) do { } while (0)
+#endif
 
 #endif /* _ORINOCO_FW_H_ */
diff --git a/drivers/net/wireless/orinoco/main.c b/drivers/net/wireless/orinoco/main.c
index f953059..2afab2a 100644
--- a/drivers/net/wireless/orinoco/main.c
+++ b/drivers/net/wireless/orinoco/main.c
@@ -89,6 +89,8 @@
 #include <linux/ieee80211.h>
 #include <net/iw_handler.h>
 
+#include "orinoco.h"
+
 #include "hermes_rid.h"
 #include "hermes_dld.h"
 #include "hw.h"
@@ -98,8 +100,6 @@
 #include "wext.h"
 #include "main.h"
 
-#include "orinoco.h"
-
 /********************************************************************/
 /* Module information                                               */
 /********************************************************************/
@@ -2580,8 +2580,8 @@ struct net_device
 	netif_carrier_off(dev);
 	priv->last_linkstatus = 0xffff;
 
-	priv->cached_pri_fw = NULL;
-	priv->cached_fw = NULL;
+	orinoco_cached_pri_fw_set(priv, NULL);
+	orinoco_cached_fw_set(priv, NULL);
 
 	/* Register PM notifiers */
 	orinoco_register_pm_notifier(priv);
diff --git a/drivers/net/wireless/orinoco/orinoco.h b/drivers/net/wireless/orinoco/orinoco.h
index f3f94b2..8e5a72c 100644
--- a/drivers/net/wireless/orinoco/orinoco.h
+++ b/drivers/net/wireless/orinoco/orinoco.h
@@ -159,9 +159,11 @@ struct orinoco_private {
 	unsigned int tkip_cm_active:1;
 	unsigned int key_mgmt:3;
 
+#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
 	/* Cached in memory firmware to use during ->resume. */
 	const struct firmware *cached_pri_fw;
 	const struct firmware *cached_fw;
+#endif
 
 	struct notifier_block pm_notifier;
 };


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] orinoco: firmware: consistently compile out fw cache support if not requested
  2009-02-15 10:09 [PATCH] orinoco: firmware: consistently compile out fw cache support if not requested Andrey Borzenkov
@ 2009-02-15 17:21 ` Dave
  2009-02-21 16:11   ` Andrey Borzenkov
  0 siblings, 1 reply; 5+ messages in thread
From: Dave @ 2009-02-15 17:21 UTC (permalink / raw)
  To: Andrey Borzenkov; +Cc: linux-wireless, orinoco-devel

Andrey Borzenkov wrote:
> Currently part of support for FW caching is unconditionally compiled
> in even if it is never used. Consistently remove caching support if
> not requested by user.
> 
> Signed-off-by: Andrey Borzenkov <arvidjaar@mail.ru>

I don't see much point, but...

> diff --git a/drivers/net/wireless/orinoco/fw.c b/drivers/net/wireless/orinoco/fw.c
> index 7d2292d..842834e 100644
> --- a/drivers/net/wireless/orinoco/fw.c
> +++ b/drivers/net/wireless/orinoco/fw.c
> @@ -79,7 +79,7 @@ orinoco_dl_firmware(struct orinoco_private *priv,
>  	if (err)
>  		goto free;
>  
> -	if (!priv->cached_fw) {
> +	if (!orinoco_cached_fw_get(priv)) {
>  		err = request_firmware(&fw_entry, firmware, priv->dev);
>  
>  		if (err) {
> @@ -89,7 +89,7 @@ orinoco_dl_firmware(struct orinoco_private *priv,
>  			goto free;
>  		}
>  	} else
> -		fw_entry = priv->cached_fw;
> +		fw_entry = orinoco_cached_fw_get(priv);

Rather than fiddling with how we access the pointers, I think it would
be better to refactor these if..elses into function calls like

fw_entry = orinoco_get_pri_fw(...);

#if CACHING
struct firmware *orinoco_get_pri_fw(...) {
    priv->cached_fw;
}
#else
struct firmware *orinoco_get_pri_fw(...) {
    return request_firmware(..);
}
#endif


> --- a/drivers/net/wireless/orinoco/fw.h
> +++ b/drivers/net/wireless/orinoco/fw.h
> @@ -5,12 +5,52 @@
>  #ifndef _ORINOCO_FW_H_
>  #define _ORINOCO_FW_H_
>  
> -/* Forward declations */
> -struct orinoco_private;
> -

Don't remove the forward declaration, you introduce a dependency of this
header on orinoco.h, which is otherwise unnecessary.

>  int orinoco_download(struct orinoco_private *priv);
>  
> -void orinoco_cache_fw(struct orinoco_private *priv, int ap);
> -void orinoco_uncache_fw(struct orinoco_private *priv);
> +#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
> +static inline const struct firmware *
> +orinoco_cached_fw_get(struct orinoco_private *priv)
> +{
> +	return priv->cached_fw;
> +}
> +
> +static inline const struct firmware *
> +orinoco_cached_pri_fw_get(struct orinoco_private *priv)
> +{
> +	return priv->cached_pri_fw;
> +}
> +
> +static inline void
> +orinoco_cached_fw_set(struct orinoco_private *priv, struct firmware *fw)
> +{
> +	priv->cached_fw = fw;
> +}
> +
> +static inline void
> +orinoco_cached_pri_fw_set(struct orinoco_private *priv, struct firmware *fw)
> +{
> +	priv->cached_pri_fw = fw;
> +}

Ick. Only fw.c needs the _get calls so they should not be in the header.
Because the _set makes the other half of the pair I would argue they
don't want to be there either. I'd suggest adding orinoco_fw_init
instead, which cleared both elements.

> +extern void orinoco_cache_fw(struct orinoco_private *priv, int ap);
> +extern void orinoco_uncache_fw(struct orinoco_private *priv);

Why do we want to make the extern explicit?

> diff --git a/drivers/net/wireless/orinoco/main.c b/drivers/net/wireless/orinoco/main.c
> index f953059..2afab2a 100644
> --- a/drivers/net/wireless/orinoco/main.c
> +++ b/drivers/net/wireless/orinoco/main.c
> @@ -89,6 +89,8 @@
>  #include <linux/ieee80211.h>
>  #include <net/iw_handler.h>
>  
> +#include "orinoco.h"
> +
>  #include "hermes_rid.h"
>  #include "hermes_dld.h"
>  #include "hw.h"
> @@ -98,8 +100,6 @@
>  #include "wext.h"
>  #include "main.h"
>  
> -#include "orinoco.h"
> -

Suggest you don't move the inclusion forward. I don't know if it's just
me, but I always keep the header which declares what the compilation
unit exports as the final include. In this case that's orinoco.h.

If you really want to, do it in a separate patch so it isn't hidden away.




Dave.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] orinoco: firmware: consistently compile out fw cache support if not requested
  2009-02-15 17:21 ` Dave
@ 2009-02-21 16:11   ` Andrey Borzenkov
  2009-02-21 17:02     ` Dave
  0 siblings, 1 reply; 5+ messages in thread
From: Andrey Borzenkov @ 2009-02-21 16:11 UTC (permalink / raw)
  To: Dave; +Cc: linux-wireless, orinoco-devel

[-- Attachment #1: Type: text/plain, Size: 8427 bytes --]

On 15 of February 2009 20:21:19 Dave wrote:
> Andrey Borzenkov wrote:
> > Currently part of support for FW caching is unconditionally
> > compiled in even if it is never used. Consistently remove caching
> > support if not requested by user.
> >
> > Signed-off-by: Andrey Borzenkov <arvidjaar@mail.ru>
>
> I don't see much point, but...
>

It let me catch pm_notifiers errors at the very least :)

May be you are right; so if you NACK this one I won't object. But as long as 
time was already spent in it ...

> Rather than fiddling with how we access the pointers, I think it
> would be better to refactor these if..elses into function calls like
>
> fw_entry = orinoco_get_pri_fw(...);
>
> #if CACHING
> struct firmware *orinoco_get_pri_fw(...) {
>     priv->cached_fw;
> }
> #else
> struct firmware *orinoco_get_pri_fw(...) {
>     return request_firmware(..);
> }
> #endif
>

Won't work. We do need to know whether fw is cached or not (to properly 
release it). And #ifdefs around if() statement are really unreadable.


> Don't remove the forward declaration, you introduce a dependency of
> this header on orinoco.h, which is otherwise unnecessary.
>

No more required in this version.

> Ick. Only fw.c needs the _get calls so they should not be in the
> header. Because the _set makes the other half of the pair I would
> argue they don't want to be there either. I'd suggest adding
> orinoco_fw_init instead, which cleared both elements.
>

I think in this case explicit #ifdef at the point of initialization makes it 
more clear.


> Suggest you don't move the inclusion forward.

Again no more needed in this version.

Let's test kmail again :)

Subject: [PATCH] orinoco: firmware: consistently compile out fw cache 
support if not requested
From: Andrey Borzenkov <arvidjaar@mail.ru>

Currently part of support for FW caching is unconditionally compiled
in even if it is never used. Consistently remove caching support if
not requested by user.

Signed-off-by: Andrey Borzenkov <arvidjaar@mail.ru>

---

 drivers/net/wireless/orinoco/fw.c      |   37 
+++++++++++++++++++++-----------
 drivers/net/wireless/orinoco/fw.h      |    9 ++++++--
 drivers/net/wireless/orinoco/main.c    |    4 +++
 drivers/net/wireless/orinoco/orinoco.h |    2 ++
 4 files changed, 36 insertions(+), 16 deletions(-)


diff --git a/drivers/net/wireless/orinoco/fw.c 
b/drivers/net/wireless/orinoco/fw.c
index 7d2292d..9bbc1dd 100644
--- a/drivers/net/wireless/orinoco/fw.c
+++ b/drivers/net/wireless/orinoco/fw.c
@@ -43,6 +43,19 @@ struct orinoco_fw_header {
 	char signature[0];      /* FW signature length headersize-20 */
 } __attribute__ ((packed));
 
+#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
+static inline const struct firmware *
+orinoco_cached_fw_get(struct orinoco_private *priv, bool primary)
+{
+	if (primary)
+		return priv->cached_pri_fw;
+	else
+		return priv->cached_fw;
+}
+#else
+#define orinoco_cached_fw_get(priv, primary) (NULL)
+#endif
+
 /* Download either STA or AP firmware into the card. */
 static int
 orinoco_dl_firmware(struct orinoco_private *priv,
@@ -79,7 +92,7 @@ orinoco_dl_firmware(struct orinoco_private *priv,
 	if (err)
 		goto free;
 
-	if (!priv->cached_fw) {
+	if (!orinoco_cached_fw_get(priv, false)) {
 		err = request_firmware(&fw_entry, firmware, priv->dev);
 
 		if (err) {
@@ -89,7 +102,7 @@ orinoco_dl_firmware(struct orinoco_private *priv,
 			goto free;
 		}
 	} else
-		fw_entry = priv->cached_fw;
+		fw_entry = orinoco_cached_fw_get(priv, false);
 
 	hdr = (const struct orinoco_fw_header *) fw_entry->data;
 
@@ -132,7 +145,7 @@ orinoco_dl_firmware(struct orinoco_private *priv,
 
 abort:
 	/* If we requested the firmware, release it. */
-	if (!priv->cached_fw)
+	if (!orinoco_cached_fw_get(priv, false))
 		release_firmware(fw_entry);
 
 free:
@@ -234,20 +247,20 @@ symbol_dl_firmware(struct orinoco_private *priv,
 	int ret;
 	const struct firmware *fw_entry;
 
-	if (!priv->cached_pri_fw) {
+	if (!orinoco_cached_fw_get(priv, true)) {
 		if (request_firmware(&fw_entry, fw->pri_fw, priv->dev) != 0) {
 			printk(KERN_ERR "%s: Cannot find firmware: %s\n",
 			       dev->name, fw->pri_fw);
 			return -ENOENT;
 		}
 	} else
-		fw_entry = priv->cached_pri_fw;
+		fw_entry = orinoco_cached_fw_get(priv, true);
 
 	/* Load primary firmware */
 	ret = symbol_dl_image(priv, fw, fw_entry->data,
 			      fw_entry->data + fw_entry->size, 0);
 
-	if (!priv->cached_pri_fw)
+	if (!orinoco_cached_fw_get(priv, true))
 		release_firmware(fw_entry);
 	if (ret) {
 		printk(KERN_ERR "%s: Primary firmware download failed\n",
@@ -255,19 +268,19 @@ symbol_dl_firmware(struct orinoco_private *priv,
 		return ret;
 	}
 
-	if (!priv->cached_fw) {
+	if (!orinoco_cached_fw_get(priv, false)) {
 		if (request_firmware(&fw_entry, fw->sta_fw, priv->dev) != 0) {
 			printk(KERN_ERR "%s: Cannot find firmware: %s\n",
 			       dev->name, fw->sta_fw);
 			return -ENOENT;
 		}
 	} else
-		fw_entry = priv->cached_fw;
+		fw_entry = orinoco_cached_fw_get(priv, false);
 
 	/* Load secondary firmware */
 	ret = symbol_dl_image(priv, fw, fw_entry->data,
 			      fw_entry->data + fw_entry->size, 1);
-	if (!priv->cached_fw)
+	if (!orinoco_cached_fw_get(priv, false))
 		release_firmware(fw_entry);
 	if (ret) {
 		printk(KERN_ERR "%s: Secondary firmware download failed\n",
@@ -301,9 +314,9 @@ int orinoco_download(struct orinoco_private *priv)
 	return err;
 }
 
+#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
 void orinoco_cache_fw(struct orinoco_private *priv, int ap)
 {
-#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
 	const struct firmware *fw_entry = NULL;
 	const char *pri_fw;
 	const char *fw;
@@ -323,12 +336,10 @@ void orinoco_cache_fw(struct orinoco_private *priv, 
int ap)
 		if (request_firmware(&fw_entry, fw, priv->dev) == 0)
 			priv->cached_fw = fw_entry;
 	}
-#endif
 }
 
 void orinoco_uncache_fw(struct orinoco_private *priv)
 {
-#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
 	if (priv->cached_pri_fw)
 		release_firmware(priv->cached_pri_fw);
 	if (priv->cached_fw)
@@ -336,5 +347,5 @@ void orinoco_uncache_fw(struct orinoco_private *priv)
 
 	priv->cached_pri_fw = NULL;
 	priv->cached_fw = NULL;
-#endif
 }
+#endif
diff --git a/drivers/net/wireless/orinoco/fw.h 
b/drivers/net/wireless/orinoco/fw.h
index 2290f08..49eb9f8 100644
--- a/drivers/net/wireless/orinoco/fw.h
+++ b/drivers/net/wireless/orinoco/fw.h
@@ -10,7 +10,12 @@ struct orinoco_private;
 
 int orinoco_download(struct orinoco_private *priv);
 
-void orinoco_cache_fw(struct orinoco_private *priv, int ap);
-void orinoco_uncache_fw(struct orinoco_private *priv);
+#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
+extern void orinoco_cache_fw(struct orinoco_private *priv, int ap);
+extern void orinoco_uncache_fw(struct orinoco_private *priv);
+#else
+#define orinoco_cache_fw(priv, ap) do { } while(0)
+#define orinoco_uncache_fw(priv) do { } while (0)
+#endif
 
 #endif /* _ORINOCO_FW_H_ */
diff --git a/drivers/net/wireless/orinoco/main.c 
b/drivers/net/wireless/orinoco/main.c
index f953059..694e74b 100644
--- a/drivers/net/wireless/orinoco/main.c
+++ b/drivers/net/wireless/orinoco/main.c
@@ -2580,8 +2580,10 @@ struct net_device
 	netif_carrier_off(dev);
 	priv->last_linkstatus = 0xffff;
 
-	priv->cached_pri_fw = NULL;
+#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
 	priv->cached_fw = NULL;
+	priv->cached_pri_fw = NULL;
+#endif
 
 	/* Register PM notifiers */
 	orinoco_register_pm_notifier(priv);
diff --git a/drivers/net/wireless/orinoco/orinoco.h 
b/drivers/net/wireless/orinoco/orinoco.h
index f3f94b2..8e5a72c 100644
--- a/drivers/net/wireless/orinoco/orinoco.h
+++ b/drivers/net/wireless/orinoco/orinoco.h
@@ -159,9 +159,11 @@ struct orinoco_private {
 	unsigned int tkip_cm_active:1;
 	unsigned int key_mgmt:3;
 
+#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
 	/* Cached in memory firmware to use during ->resume. */
 	const struct firmware *cached_pri_fw;
 	const struct firmware *cached_fw;
+#endif
 
 	struct notifier_block pm_notifier;
 };


[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] orinoco: firmware: consistently compile out fw cache support if not requested
  2009-02-21 16:11   ` Andrey Borzenkov
@ 2009-02-21 17:02     ` Dave
  2009-02-28 20:09       ` [PATCH v3] " Andrey Borzenkov
  0 siblings, 1 reply; 5+ messages in thread
From: Dave @ 2009-02-21 17:02 UTC (permalink / raw)
  To: Andrey Borzenkov; +Cc: linux-wireless, orinoco-devel

Andrey Borzenkov wrote:
> Currently part of support for FW caching is unconditionally compiled
> in even if it is never used. Consistently remove caching support if
> not requested by user.
> 
> Signed-off-by: Andrey Borzenkov <arvidjaar@mail.ru>
> --- a/drivers/net/wireless/orinoco/fw.h
> +++ b/drivers/net/wireless/orinoco/fw.h
> @@ -10,7 +10,12 @@ struct orinoco_private;
>  
> -void orinoco_cache_fw(struct orinoco_private *priv, int ap);
> -void orinoco_uncache_fw(struct orinoco_private *priv);
> +#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
> +extern void orinoco_cache_fw(struct orinoco_private *priv, int ap);
> +extern void orinoco_uncache_fw(struct orinoco_private *priv);

Please remove the explicit externs.

> --- a/drivers/net/wireless/orinoco/main.c
> +++ b/drivers/net/wireless/orinoco/main.c
> @@ -2580,8 +2580,10 @@ struct net_device
>  
> -	priv->cached_pri_fw = NULL;
> +#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
>  	priv->cached_fw = NULL;
> +	priv->cached_pri_fw = NULL;
> +#endif

Please leave the orderring alone.

These just minimize the changes and reduce potential for conflicts
during rebases/merges.

Acked-by: David Kilroy <kilroyd@googlemail.com>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH v3] orinoco: firmware: consistently compile out fw cache support if not requested
  2009-02-21 17:02     ` Dave
@ 2009-02-28 20:09       ` Andrey Borzenkov
  0 siblings, 0 replies; 5+ messages in thread
From: Andrey Borzenkov @ 2009-02-28 20:09 UTC (permalink / raw)
  To: Dave; +Cc: linux-wireless, orinoco-devel


[-- Attachment #1.1: Type: text/plain, Size: 889 bytes --]

On 21 февраля 2009 20:02:32 Dave wrote:
> > +#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) ||
> > defined(CONFIG_PM_SLEEP) +extern void orinoco_cache_fw(struct
> > orinoco_private *priv, int ap); +extern void
> > orinoco_uncache_fw(struct orinoco_private *priv);
>
> Please remove the explicit externs.
>

OK

> > --- a/drivers/net/wireless/orinoco/main.c
> > +++ b/drivers/net/wireless/orinoco/main.c
> > @@ -2580,8 +2580,10 @@ struct net_device
> >
> > -	priv->cached_pri_fw = NULL;
> > +#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) ||
> > defined(CONFIG_PM_SLEEP) priv->cached_fw = NULL;
> > +	priv->cached_pri_fw = NULL;
> > +#endif
>
> Please leave the orderring alone.
>

OK

> These just minimize the changes and reduce potential for conflicts
> during rebases/merges.
>
> Acked-by: David Kilroy <kilroyd@googlemail.com>

Fixed version attached.

[-- Attachment #1.2: orinoco-conditional-fw-cache --]
[-- Type: message/rfc822, Size: 6331 bytes --]

From: Andrey Borzenkov <arvidjaar@mail.ru>
Subject: [PATCH] orinoco: firmware: consistently compile out fw cache support if not requested

Currently part of support for FW caching is unconditionally compiled
in even if it is never used. Consistently remove caching support if
not requested by user.

Signed-off-by: Andrey Borzenkov <arvidjaar@mail.ru>

---

 drivers/net/wireless/orinoco/fw.c      |   37 +++++++++++++++++++++-----------
 drivers/net/wireless/orinoco/fw.h      |    5 ++++
 drivers/net/wireless/orinoco/main.c    |    2 ++
 drivers/net/wireless/orinoco/orinoco.h |    2 ++
 4 files changed, 33 insertions(+), 13 deletions(-)


diff --git a/drivers/net/wireless/orinoco/fw.c b/drivers/net/wireless/orinoco/fw.c
index 7d2292d..9bbc1dd 100644
--- a/drivers/net/wireless/orinoco/fw.c
+++ b/drivers/net/wireless/orinoco/fw.c
@@ -43,6 +43,19 @@ struct orinoco_fw_header {
 	char signature[0];      /* FW signature length headersize-20 */
 } __attribute__ ((packed));
 
+#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
+static inline const struct firmware *
+orinoco_cached_fw_get(struct orinoco_private *priv, bool primary)
+{
+	if (primary)
+		return priv->cached_pri_fw;
+	else
+		return priv->cached_fw;
+}
+#else
+#define orinoco_cached_fw_get(priv, primary) (NULL)
+#endif
+
 /* Download either STA or AP firmware into the card. */
 static int
 orinoco_dl_firmware(struct orinoco_private *priv,
@@ -79,7 +92,7 @@ orinoco_dl_firmware(struct orinoco_private *priv,
 	if (err)
 		goto free;
 
-	if (!priv->cached_fw) {
+	if (!orinoco_cached_fw_get(priv, false)) {
 		err = request_firmware(&fw_entry, firmware, priv->dev);
 
 		if (err) {
@@ -89,7 +102,7 @@ orinoco_dl_firmware(struct orinoco_private *priv,
 			goto free;
 		}
 	} else
-		fw_entry = priv->cached_fw;
+		fw_entry = orinoco_cached_fw_get(priv, false);
 
 	hdr = (const struct orinoco_fw_header *) fw_entry->data;
 
@@ -132,7 +145,7 @@ orinoco_dl_firmware(struct orinoco_private *priv,
 
 abort:
 	/* If we requested the firmware, release it. */
-	if (!priv->cached_fw)
+	if (!orinoco_cached_fw_get(priv, false))
 		release_firmware(fw_entry);
 
 free:
@@ -234,20 +247,20 @@ symbol_dl_firmware(struct orinoco_private *priv,
 	int ret;
 	const struct firmware *fw_entry;
 
-	if (!priv->cached_pri_fw) {
+	if (!orinoco_cached_fw_get(priv, true)) {
 		if (request_firmware(&fw_entry, fw->pri_fw, priv->dev) != 0) {
 			printk(KERN_ERR "%s: Cannot find firmware: %s\n",
 			       dev->name, fw->pri_fw);
 			return -ENOENT;
 		}
 	} else
-		fw_entry = priv->cached_pri_fw;
+		fw_entry = orinoco_cached_fw_get(priv, true);
 
 	/* Load primary firmware */
 	ret = symbol_dl_image(priv, fw, fw_entry->data,
 			      fw_entry->data + fw_entry->size, 0);
 
-	if (!priv->cached_pri_fw)
+	if (!orinoco_cached_fw_get(priv, true))
 		release_firmware(fw_entry);
 	if (ret) {
 		printk(KERN_ERR "%s: Primary firmware download failed\n",
@@ -255,19 +268,19 @@ symbol_dl_firmware(struct orinoco_private *priv,
 		return ret;
 	}
 
-	if (!priv->cached_fw) {
+	if (!orinoco_cached_fw_get(priv, false)) {
 		if (request_firmware(&fw_entry, fw->sta_fw, priv->dev) != 0) {
 			printk(KERN_ERR "%s: Cannot find firmware: %s\n",
 			       dev->name, fw->sta_fw);
 			return -ENOENT;
 		}
 	} else
-		fw_entry = priv->cached_fw;
+		fw_entry = orinoco_cached_fw_get(priv, false);
 
 	/* Load secondary firmware */
 	ret = symbol_dl_image(priv, fw, fw_entry->data,
 			      fw_entry->data + fw_entry->size, 1);
-	if (!priv->cached_fw)
+	if (!orinoco_cached_fw_get(priv, false))
 		release_firmware(fw_entry);
 	if (ret) {
 		printk(KERN_ERR "%s: Secondary firmware download failed\n",
@@ -301,9 +314,9 @@ int orinoco_download(struct orinoco_private *priv)
 	return err;
 }
 
+#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
 void orinoco_cache_fw(struct orinoco_private *priv, int ap)
 {
-#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
 	const struct firmware *fw_entry = NULL;
 	const char *pri_fw;
 	const char *fw;
@@ -323,12 +336,10 @@ void orinoco_cache_fw(struct orinoco_private *priv, int ap)
 		if (request_firmware(&fw_entry, fw, priv->dev) == 0)
 			priv->cached_fw = fw_entry;
 	}
-#endif
 }
 
 void orinoco_uncache_fw(struct orinoco_private *priv)
 {
-#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
 	if (priv->cached_pri_fw)
 		release_firmware(priv->cached_pri_fw);
 	if (priv->cached_fw)
@@ -336,5 +347,5 @@ void orinoco_uncache_fw(struct orinoco_private *priv)
 
 	priv->cached_pri_fw = NULL;
 	priv->cached_fw = NULL;
-#endif
 }
+#endif
diff --git a/drivers/net/wireless/orinoco/fw.h b/drivers/net/wireless/orinoco/fw.h
index 2290f08..89fc26d 100644
--- a/drivers/net/wireless/orinoco/fw.h
+++ b/drivers/net/wireless/orinoco/fw.h
@@ -10,7 +10,12 @@ struct orinoco_private;
 
 int orinoco_download(struct orinoco_private *priv);
 
+#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
 void orinoco_cache_fw(struct orinoco_private *priv, int ap);
 void orinoco_uncache_fw(struct orinoco_private *priv);
+#else
+#define orinoco_cache_fw(priv, ap) do { } while(0)
+#define orinoco_uncache_fw(priv) do { } while (0)
+#endif
 
 #endif /* _ORINOCO_FW_H_ */
diff --git a/drivers/net/wireless/orinoco/main.c b/drivers/net/wireless/orinoco/main.c
index f953059..0a0c96a 100644
--- a/drivers/net/wireless/orinoco/main.c
+++ b/drivers/net/wireless/orinoco/main.c
@@ -2580,8 +2580,10 @@ struct net_device
 	netif_carrier_off(dev);
 	priv->last_linkstatus = 0xffff;
 
+#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
 	priv->cached_pri_fw = NULL;
 	priv->cached_fw = NULL;
+#endif
 
 	/* Register PM notifiers */
 	orinoco_register_pm_notifier(priv);
diff --git a/drivers/net/wireless/orinoco/orinoco.h b/drivers/net/wireless/orinoco/orinoco.h
index f3f94b2..8e5a72c 100644
--- a/drivers/net/wireless/orinoco/orinoco.h
+++ b/drivers/net/wireless/orinoco/orinoco.h
@@ -159,9 +159,11 @@ struct orinoco_private {
 	unsigned int tkip_cm_active:1;
 	unsigned int key_mgmt:3;
 
+#if defined(CONFIG_HERMES_CACHE_FW_ON_INIT) || defined(CONFIG_PM_SLEEP)
 	/* Cached in memory firmware to use during ->resume. */
 	const struct firmware *cached_pri_fw;
 	const struct firmware *cached_fw;
+#endif
 
 	struct notifier_block pm_notifier;
 };

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2009-02-28 20:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-02-15 10:09 [PATCH] orinoco: firmware: consistently compile out fw cache support if not requested Andrey Borzenkov
2009-02-15 17:21 ` Dave
2009-02-21 16:11   ` Andrey Borzenkov
2009-02-21 17:02     ` Dave
2009-02-28 20:09       ` [PATCH v3] " Andrey Borzenkov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.