firmware_loader: change enum fw_opt to u32
diff mbox series

Message ID 20200522214658.12722-1-scott.branden@broadcom.com
State New
Headers show
Series
  • firmware_loader: change enum fw_opt to u32
Related show

Commit Message

Scott Branden May 22, 2020, 9:46 p.m. UTC
"enum fw_opt" is not used as an enum.
Change fw_opt to a u32 and the FW_OPT_* values inside the enum to defines.

Signed-off-by: Scott Branden <scott.branden@broadcom.com>
---
 drivers/base/firmware_loader/fallback.c       | 12 +++++------
 drivers/base/firmware_loader/fallback.h       |  8 +++----
 .../base/firmware_loader/fallback_platform.c  |  2 +-
 drivers/base/firmware_loader/firmware.h       | 21 ++++++++-----------
 drivers/base/firmware_loader/main.c           | 11 +++++-----
 5 files changed, 25 insertions(+), 29 deletions(-)

Comments

Luis Chamberlain May 22, 2020, 10:45 p.m. UTC | #1
On Fri, May 22, 2020 at 02:46:58PM -0700, Scott Branden wrote:
>  
>  /**
> - * enum fw_opt - options to control firmware loading behaviour
> + * fw_opt - options to control firmware loading behaviour
>   *
>   * @FW_OPT_UEVENT: Enables the fallback mechanism to send a kobject uevent
>   *	when the firmware is not found. Userspace is in charge to load the
> @@ -33,15 +33,13 @@
>   *	the platform's main firmware. If both this fallback and the sysfs
>   *      fallback are enabled, then this fallback will be tried first.
>   */
> -enum fw_opt {
> -	FW_OPT_UEVENT			= BIT(0),
> -	FW_OPT_NOWAIT			= BIT(1),
> -	FW_OPT_USERHELPER		= BIT(2),
> -	FW_OPT_NO_WARN			= BIT(3),
> -	FW_OPT_NOCACHE			= BIT(4),
> -	FW_OPT_NOFALLBACK_SYSFS		= BIT(5),
> -	FW_OPT_FALLBACK_PLATFORM	= BIT(6),
> -};
> +#define FW_OPT_UEVENT			BIT(0)
> +#define FW_OPT_NOWAIT			BIT(1)
> +#define FW_OPT_USERHELPER		BIT(2)
> +#define FW_OPT_NO_WARN			BIT(3)
> +#define FW_OPT_NOCACHE			BIT(4)
> +#define FW_OPT_NOFALLBACK_SYSFS		BIT(5)
> +#define FW_OPT_FALLBACK_PLATFORM	BIT(6)

Everything looked good up to here. The enum defines each flag.
We just want to use an enum for *one* flag represetnation, not
a bundle.

  Luis
Scott Branden May 22, 2020, 10:49 p.m. UTC | #2
Hi Luis,

On 2020-05-22 3:45 p.m., Luis Chamberlain wrote:
> On Fri, May 22, 2020 at 02:46:58PM -0700, Scott Branden wrote:
>>   
>>   /**
>> - * enum fw_opt - options to control firmware loading behaviour
>> + * fw_opt - options to control firmware loading behaviour
>>    *
>>    * @FW_OPT_UEVENT: Enables the fallback mechanism to send a kobject uevent
>>    *	when the firmware is not found. Userspace is in charge to load the
>> @@ -33,15 +33,13 @@
>>    *	the platform's main firmware. If both this fallback and the sysfs
>>    *      fallback are enabled, then this fallback will be tried first.
>>    */
>> -enum fw_opt {
>> -	FW_OPT_UEVENT			= BIT(0),
>> -	FW_OPT_NOWAIT			= BIT(1),
>> -	FW_OPT_USERHELPER		= BIT(2),
>> -	FW_OPT_NO_WARN			= BIT(3),
>> -	FW_OPT_NOCACHE			= BIT(4),
>> -	FW_OPT_NOFALLBACK_SYSFS		= BIT(5),
>> -	FW_OPT_FALLBACK_PLATFORM	= BIT(6),
>> -};
>> +#define FW_OPT_UEVENT			BIT(0)
>> +#define FW_OPT_NOWAIT			BIT(1)
>> +#define FW_OPT_USERHELPER		BIT(2)
>> +#define FW_OPT_NO_WARN			BIT(3)
>> +#define FW_OPT_NOCACHE			BIT(4)
>> +#define FW_OPT_NOFALLBACK_SYSFS		BIT(5)
>> +#define FW_OPT_FALLBACK_PLATFORM	BIT(6)
> Everything looked good up to here. The enum defines each flag.
> We just want to use an enum for *one* flag represetnation, not
> a bundle.
I do not know exactly what you are looking for then.  The FW_OPT_* 
values are OR'd
together in the code.  You still want the fw_opt enum above left in 
place entirely
and then the values used in OR'd together?

>    Luis
Luis Chamberlain May 22, 2020, 11 p.m. UTC | #3
On Fri, May 22, 2020 at 03:49:05PM -0700, Scott Branden wrote:
> Hi Luis,
> 
> On 2020-05-22 3:45 p.m., Luis Chamberlain wrote:
> > On Fri, May 22, 2020 at 02:46:58PM -0700, Scott Branden wrote:
> > >   /**
> > > - * enum fw_opt - options to control firmware loading behaviour
> > > + * fw_opt - options to control firmware loading behaviour
> > >    *
> > >    * @FW_OPT_UEVENT: Enables the fallback mechanism to send a kobject uevent
> > >    *	when the firmware is not found. Userspace is in charge to load the
> > > @@ -33,15 +33,13 @@
> > >    *	the platform's main firmware. If both this fallback and the sysfs
> > >    *      fallback are enabled, then this fallback will be tried first.
> > >    */
> > > -enum fw_opt {
> > > -	FW_OPT_UEVENT			= BIT(0),
> > > -	FW_OPT_NOWAIT			= BIT(1),
> > > -	FW_OPT_USERHELPER		= BIT(2),
> > > -	FW_OPT_NO_WARN			= BIT(3),
> > > -	FW_OPT_NOCACHE			= BIT(4),
> > > -	FW_OPT_NOFALLBACK_SYSFS		= BIT(5),
> > > -	FW_OPT_FALLBACK_PLATFORM	= BIT(6),
> > > -};
> > > +#define FW_OPT_UEVENT			BIT(0)
> > > +#define FW_OPT_NOWAIT			BIT(1)
> > > +#define FW_OPT_USERHELPER		BIT(2)
> > > +#define FW_OPT_NO_WARN			BIT(3)
> > > +#define FW_OPT_NOCACHE			BIT(4)
> > > +#define FW_OPT_NOFALLBACK_SYSFS		BIT(5)
> > > +#define FW_OPT_FALLBACK_PLATFORM	BIT(6)
> > Everything looked good up to here. The enum defines each flag.
> > We just want to use an enum for *one* flag represetnation, not
> > a bundle.
>
> I do not know exactly what you are looking for then.  The FW_OPT_*
> values are OR'd together in the code.  You still want the fw_opt enum
> above left in place entirely and then the values used in OR'd
> together?

Yes, exactly. If they are combined then we just use a u32 to represent
these are then flags combined. An enum represents just *one* flag, not
a set which are OR'd together. Let me know if this is still not clear.

  Luis
Greg Kroah-Hartman May 23, 2020, 6:05 a.m. UTC | #4
On Fri, May 22, 2020 at 11:00:25PM +0000, Luis Chamberlain wrote:
> On Fri, May 22, 2020 at 03:49:05PM -0700, Scott Branden wrote:
> > Hi Luis,
> > 
> > On 2020-05-22 3:45 p.m., Luis Chamberlain wrote:
> > > On Fri, May 22, 2020 at 02:46:58PM -0700, Scott Branden wrote:
> > > >   /**
> > > > - * enum fw_opt - options to control firmware loading behaviour
> > > > + * fw_opt - options to control firmware loading behaviour
> > > >    *
> > > >    * @FW_OPT_UEVENT: Enables the fallback mechanism to send a kobject uevent
> > > >    *	when the firmware is not found. Userspace is in charge to load the
> > > > @@ -33,15 +33,13 @@
> > > >    *	the platform's main firmware. If both this fallback and the sysfs
> > > >    *      fallback are enabled, then this fallback will be tried first.
> > > >    */
> > > > -enum fw_opt {
> > > > -	FW_OPT_UEVENT			= BIT(0),
> > > > -	FW_OPT_NOWAIT			= BIT(1),
> > > > -	FW_OPT_USERHELPER		= BIT(2),
> > > > -	FW_OPT_NO_WARN			= BIT(3),
> > > > -	FW_OPT_NOCACHE			= BIT(4),
> > > > -	FW_OPT_NOFALLBACK_SYSFS		= BIT(5),
> > > > -	FW_OPT_FALLBACK_PLATFORM	= BIT(6),
> > > > -};
> > > > +#define FW_OPT_UEVENT			BIT(0)
> > > > +#define FW_OPT_NOWAIT			BIT(1)
> > > > +#define FW_OPT_USERHELPER		BIT(2)
> > > > +#define FW_OPT_NO_WARN			BIT(3)
> > > > +#define FW_OPT_NOCACHE			BIT(4)
> > > > +#define FW_OPT_NOFALLBACK_SYSFS		BIT(5)
> > > > +#define FW_OPT_FALLBACK_PLATFORM	BIT(6)
> > > Everything looked good up to here. The enum defines each flag.
> > > We just want to use an enum for *one* flag represetnation, not
> > > a bundle.
> >
> > I do not know exactly what you are looking for then.  The FW_OPT_*
> > values are OR'd together in the code.  You still want the fw_opt enum
> > above left in place entirely and then the values used in OR'd
> > together?
> 
> Yes, exactly. If they are combined then we just use a u32 to represent
> these are then flags combined. An enum represents just *one* flag, not
> a set which are OR'd together. Let me know if this is still not clear.

If this is the case, why have an enum at all?  What difference is it
from a #define like was done here?

thanks,

greg k-h
Luis Chamberlain May 23, 2020, 6:48 a.m. UTC | #5
On Sat, May 23, 2020 at 08:05:48AM +0200, Greg Kroah-Hartman wrote:
> On Fri, May 22, 2020 at 11:00:25PM +0000, Luis Chamberlain wrote:
> > On Fri, May 22, 2020 at 03:49:05PM -0700, Scott Branden wrote:
> > > Hi Luis,
> > > 
> > > On 2020-05-22 3:45 p.m., Luis Chamberlain wrote:
> > > > On Fri, May 22, 2020 at 02:46:58PM -0700, Scott Branden wrote:
> > > > >   /**
> > > > > - * enum fw_opt - options to control firmware loading behaviour
> > > > > + * fw_opt - options to control firmware loading behaviour
> > > > >    *
> > > > >    * @FW_OPT_UEVENT: Enables the fallback mechanism to send a kobject uevent
> > > > >    *	when the firmware is not found. Userspace is in charge to load the
> > > > > @@ -33,15 +33,13 @@
> > > > >    *	the platform's main firmware. If both this fallback and the sysfs
> > > > >    *      fallback are enabled, then this fallback will be tried first.
> > > > >    */
> > > > > -enum fw_opt {
> > > > > -	FW_OPT_UEVENT			= BIT(0),
> > > > > -	FW_OPT_NOWAIT			= BIT(1),
> > > > > -	FW_OPT_USERHELPER		= BIT(2),
> > > > > -	FW_OPT_NO_WARN			= BIT(3),
> > > > > -	FW_OPT_NOCACHE			= BIT(4),
> > > > > -	FW_OPT_NOFALLBACK_SYSFS		= BIT(5),
> > > > > -	FW_OPT_FALLBACK_PLATFORM	= BIT(6),
> > > > > -};
> > > > > +#define FW_OPT_UEVENT			BIT(0)
> > > > > +#define FW_OPT_NOWAIT			BIT(1)
> > > > > +#define FW_OPT_USERHELPER		BIT(2)
> > > > > +#define FW_OPT_NO_WARN			BIT(3)
> > > > > +#define FW_OPT_NOCACHE			BIT(4)
> > > > > +#define FW_OPT_NOFALLBACK_SYSFS		BIT(5)
> > > > > +#define FW_OPT_FALLBACK_PLATFORM	BIT(6)
> > > > Everything looked good up to here. The enum defines each flag.
> > > > We just want to use an enum for *one* flag represetnation, not
> > > > a bundle.
> > >
> > > I do not know exactly what you are looking for then.  The FW_OPT_*
> > > values are OR'd together in the code.  You still want the fw_opt enum
> > > above left in place entirely and then the values used in OR'd
> > > together?
> > 
> > Yes, exactly. If they are combined then we just use a u32 to represent
> > these are then flags combined. An enum represents just *one* flag, not
> > a set which are OR'd together. Let me know if this is still not clear.
> 
> If this is the case, why have an enum at all?  What difference is it
> from a #define like was done here?

If used on a switch to test for cases the compiler will error if you
miss one, and it is easier to use kdoc for them.

  Luis

Patch
diff mbox series

diff --git a/drivers/base/firmware_loader/fallback.c b/drivers/base/firmware_loader/fallback.c
index 1e9c96e3ed63..af1aa3d69920 100644
--- a/drivers/base/firmware_loader/fallback.c
+++ b/drivers/base/firmware_loader/fallback.c
@@ -460,7 +460,7 @@  static const struct attribute_group *fw_dev_attr_groups[] = {
 
 static struct fw_sysfs *
 fw_create_instance(struct firmware *firmware, const char *fw_name,
-		   struct device *device, enum fw_opt opt_flags)
+		   struct device *device, u32 opt_flags)
 {
 	struct fw_sysfs *fw_sysfs;
 	struct device *f_dev;
@@ -493,7 +493,7 @@  fw_create_instance(struct firmware *firmware, const char *fw_name,
  * In charge of constructing a sysfs fallback interface for firmware loading.
  **/
 static int fw_load_sysfs_fallback(struct fw_sysfs *fw_sysfs,
-				  enum fw_opt opt_flags, long timeout)
+				  u32 opt_flags, long timeout)
 {
 	int retval = 0;
 	struct device *f_dev = &fw_sysfs->dev;
@@ -547,7 +547,7 @@  static int fw_load_sysfs_fallback(struct fw_sysfs *fw_sysfs,
 
 static int fw_load_from_user_helper(struct firmware *firmware,
 				    const char *name, struct device *device,
-				    enum fw_opt opt_flags)
+				    u32 opt_flags)
 {
 	struct fw_sysfs *fw_sysfs;
 	long timeout;
@@ -588,7 +588,7 @@  static int fw_load_from_user_helper(struct firmware *firmware,
 	return ret;
 }
 
-static bool fw_force_sysfs_fallback(enum fw_opt opt_flags)
+static bool fw_force_sysfs_fallback(u32 opt_flags)
 {
 	if (fw_fallback_config.force_sysfs_fallback)
 		return true;
@@ -597,7 +597,7 @@  static bool fw_force_sysfs_fallback(enum fw_opt opt_flags)
 	return true;
 }
 
-static bool fw_run_sysfs_fallback(enum fw_opt opt_flags)
+static bool fw_run_sysfs_fallback(u32 opt_flags)
 {
 	int ret;
 
@@ -640,7 +640,7 @@  static bool fw_run_sysfs_fallback(enum fw_opt opt_flags)
  **/
 int firmware_fallback_sysfs(struct firmware *fw, const char *name,
 			    struct device *device,
-			    enum fw_opt opt_flags,
+			    u32 opt_flags,
 			    int ret)
 {
 	if (!fw_run_sysfs_fallback(opt_flags))
diff --git a/drivers/base/firmware_loader/fallback.h b/drivers/base/firmware_loader/fallback.h
index 06f4577733a8..2afdb6adb23f 100644
--- a/drivers/base/firmware_loader/fallback.h
+++ b/drivers/base/firmware_loader/fallback.h
@@ -33,7 +33,7 @@  struct firmware_fallback_config {
 #ifdef CONFIG_FW_LOADER_USER_HELPER
 int firmware_fallback_sysfs(struct firmware *fw, const char *name,
 			    struct device *device,
-			    enum fw_opt opt_flags,
+			    u32 opt_flags,
 			    int ret);
 void kill_pending_fw_fallback_reqs(bool only_kill_custom);
 
@@ -45,7 +45,7 @@  void unregister_sysfs_loader(void);
 #else /* CONFIG_FW_LOADER_USER_HELPER */
 static inline int firmware_fallback_sysfs(struct firmware *fw, const char *name,
 					  struct device *device,
-					  enum fw_opt opt_flags,
+					  u32 opt_flags,
 					  int ret)
 {
 	/* Keep carrying over the same error */
@@ -67,10 +67,10 @@  static inline void unregister_sysfs_loader(void)
 #endif /* CONFIG_FW_LOADER_USER_HELPER */
 
 #ifdef CONFIG_EFI_EMBEDDED_FIRMWARE
-int firmware_fallback_platform(struct fw_priv *fw_priv, enum fw_opt opt_flags);
+int firmware_fallback_platform(struct fw_priv *fw_priv, u32 opt_flags);
 #else
 static inline int firmware_fallback_platform(struct fw_priv *fw_priv,
-					     enum fw_opt opt_flags)
+					     u32 opt_flags)
 {
 	return -ENOENT;
 }
diff --git a/drivers/base/firmware_loader/fallback_platform.c b/drivers/base/firmware_loader/fallback_platform.c
index c88c745590fe..cdd2c9a9f38a 100644
--- a/drivers/base/firmware_loader/fallback_platform.c
+++ b/drivers/base/firmware_loader/fallback_platform.c
@@ -8,7 +8,7 @@ 
 #include "fallback.h"
 #include "firmware.h"
 
-int firmware_fallback_platform(struct fw_priv *fw_priv, enum fw_opt opt_flags)
+int firmware_fallback_platform(struct fw_priv *fw_priv, u32 opt_flags)
 {
 	const u8 *data;
 	size_t size;
diff --git a/drivers/base/firmware_loader/firmware.h b/drivers/base/firmware_loader/firmware.h
index 25836a6afc9f..cf6dc96a84a2 100644
--- a/drivers/base/firmware_loader/firmware.h
+++ b/drivers/base/firmware_loader/firmware.h
@@ -12,7 +12,7 @@ 
 #include <generated/utsrelease.h>
 
 /**
- * enum fw_opt - options to control firmware loading behaviour
+ * fw_opt - options to control firmware loading behaviour
  *
  * @FW_OPT_UEVENT: Enables the fallback mechanism to send a kobject uevent
  *	when the firmware is not found. Userspace is in charge to load the
@@ -33,15 +33,13 @@ 
  *	the platform's main firmware. If both this fallback and the sysfs
  *      fallback are enabled, then this fallback will be tried first.
  */
-enum fw_opt {
-	FW_OPT_UEVENT			= BIT(0),
-	FW_OPT_NOWAIT			= BIT(1),
-	FW_OPT_USERHELPER		= BIT(2),
-	FW_OPT_NO_WARN			= BIT(3),
-	FW_OPT_NOCACHE			= BIT(4),
-	FW_OPT_NOFALLBACK_SYSFS		= BIT(5),
-	FW_OPT_FALLBACK_PLATFORM	= BIT(6),
-};
+#define FW_OPT_UEVENT			BIT(0)
+#define FW_OPT_NOWAIT			BIT(1)
+#define FW_OPT_USERHELPER		BIT(2)
+#define FW_OPT_NO_WARN			BIT(3)
+#define FW_OPT_NOCACHE			BIT(4)
+#define FW_OPT_NOFALLBACK_SYSFS		BIT(5)
+#define FW_OPT_FALLBACK_PLATFORM	BIT(6)
 
 enum fw_status {
 	FW_STATUS_UNKNOWN,
@@ -136,8 +134,7 @@  static inline void fw_state_done(struct fw_priv *fw_priv)
 	__fw_state_set(fw_priv, FW_STATUS_DONE);
 }
 
-int assign_fw(struct firmware *fw, struct device *device,
-	      enum fw_opt opt_flags);
+int assign_fw(struct firmware *fw, struct device *device, u32 opt_flags);
 
 #ifdef CONFIG_FW_LOADER_PAGED_BUF
 void fw_free_paged_buf(struct fw_priv *fw_priv);
diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c
index 76f79913916d..2ca6b4735979 100644
--- a/drivers/base/firmware_loader/main.c
+++ b/drivers/base/firmware_loader/main.c
@@ -210,7 +210,7 @@  static struct fw_priv *__lookup_fw_priv(const char *fw_name)
 static int alloc_lookup_fw_priv(const char *fw_name,
 				struct firmware_cache *fwc,
 				struct fw_priv **fw_priv, void *dbuf,
-				size_t size, enum fw_opt opt_flags)
+				size_t size, u32 opt_flags)
 {
 	struct fw_priv *tmp;
 
@@ -635,8 +635,7 @@  static int fw_add_devm_name(struct device *dev, const char *name)
 }
 #endif
 
-int assign_fw(struct firmware *fw, struct device *device,
-	      enum fw_opt opt_flags)
+int assign_fw(struct firmware *fw, struct device *device, u32 opt_flags)
 {
 	struct fw_priv *fw_priv = fw->priv;
 	int ret;
@@ -687,7 +686,7 @@  int assign_fw(struct firmware *fw, struct device *device,
 static int
 _request_firmware_prepare(struct firmware **firmware_p, const char *name,
 			  struct device *device, void *dbuf, size_t size,
-			  enum fw_opt opt_flags)
+			  u32 opt_flags)
 {
 	struct firmware *firmware;
 	struct fw_priv *fw_priv;
@@ -753,7 +752,7 @@  static void fw_abort_batch_reqs(struct firmware *fw)
 static int
 _request_firmware(const struct firmware **firmware_p, const char *name,
 		  struct device *device, void *buf, size_t size,
-		  enum fw_opt opt_flags)
+		  u32 opt_flags)
 {
 	struct firmware *fw = NULL;
 	int ret;
@@ -990,7 +989,7 @@  struct firmware_work {
 	struct device *device;
 	void *context;
 	void (*cont)(const struct firmware *fw, void *context);
-	enum fw_opt opt_flags;
+	u32 opt_flags;
 };
 
 static void request_firmware_work_func(struct work_struct *work)