]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
libie: add adminq helper for converting err to str
authorMichal Swiatkowski <michal.swiatkowski@linux.intel.com>
Fri, 25 Apr 2025 06:08:06 +0000 (08:08 +0200)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Thu, 24 Jul 2025 16:38:29 +0000 (09:38 -0700)
Add a new module for common handling of Admin Queue related logic.
Start by a helper for error to string conversion. This lives inside
libie/, but is a separate module what follows our logic of splitting
into topical modules, to avoid pulling in not needed stuff, and have
better organization in general.

Olek suggested how to better solve the error to string conversion.

It will be used in follow-up patches in ice, i40e and iavf.

Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Suggested-by: Alexander Lobakin <aleksander.lobakin@intel.com>
Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/libie/Kconfig
drivers/net/ethernet/intel/libie/Makefile
drivers/net/ethernet/intel/libie/adminq.c [new file with mode: 0644]
include/linux/net/intel/libie/adminq.h

index 33aff6bc8f81c4f55358e8b6fc30e570e46694f9..e6072758e3d84fd187a7db698e1060dacdedc8bb 100644 (file)
@@ -8,3 +8,9 @@ config LIBIE
          libie (Intel Ethernet library) is a common library built on top of
          libeth and containing vendor-specific routines shared between several
          Intel Ethernet drivers.
+
+config LIBIE_ADMINQ
+       tristate
+       help
+         Helper functions used by Intel Ethernet drivers for administration
+         queue command interface (aka adminq).
index ffd27fab916a6d6b07dd2eb60de8c7d3ac0c84d8..e98f00b865d361b86e7cb44fa5405a40aae105bb 100644 (file)
@@ -4,3 +4,7 @@
 obj-$(CONFIG_LIBIE)    += libie.o
 
 libie-y                        := rx.o
+
+obj-$(CONFIG_LIBIE_ADMINQ)     += libie_adminq.o
+
+libie_adminq-y                 := adminq.o
diff --git a/drivers/net/ethernet/intel/libie/adminq.c b/drivers/net/ethernet/intel/libie/adminq.c
new file mode 100644 (file)
index 0000000..5535654
--- /dev/null
@@ -0,0 +1,52 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright (C) 2025 Intel Corporation */
+
+#include <linux/module.h>
+#include <linux/net/intel/libie/adminq.h>
+
+static const char * const libie_aq_str_arr[] = {
+#define LIBIE_AQ_STR(x)                                        \
+       [LIBIE_AQ_RC_##x]       = "LIBIE_AQ_RC" #x
+       LIBIE_AQ_STR(OK),
+       LIBIE_AQ_STR(EPERM),
+       LIBIE_AQ_STR(ENOENT),
+       LIBIE_AQ_STR(ESRCH),
+       LIBIE_AQ_STR(EIO),
+       LIBIE_AQ_STR(EAGAIN),
+       LIBIE_AQ_STR(ENOMEM),
+       LIBIE_AQ_STR(EACCES),
+       LIBIE_AQ_STR(EBUSY),
+       LIBIE_AQ_STR(EEXIST),
+       LIBIE_AQ_STR(EINVAL),
+       LIBIE_AQ_STR(ENOSPC),
+       LIBIE_AQ_STR(ENOSYS),
+       LIBIE_AQ_STR(EMODE),
+       LIBIE_AQ_STR(ENOSEC),
+       LIBIE_AQ_STR(EBADSIG),
+       LIBIE_AQ_STR(ESVN),
+       LIBIE_AQ_STR(EBADMAN),
+       LIBIE_AQ_STR(EBADBUF),
+#undef LIBIE_AQ_STR
+       "LIBIE_AQ_RC_UNKNOWN",
+};
+
+#define __LIBIE_AQ_STR_NUM (ARRAY_SIZE(libie_aq_str_arr) - 1)
+
+/**
+ * libie_aq_str - get error string based on aq error
+ * @err: admin queue error type
+ *
+ * Return: error string for passed error code
+ */
+const char *libie_aq_str(enum libie_aq_err err)
+{
+       if (err >= ARRAY_SIZE(libie_aq_str_arr) ||
+           !libie_aq_str_arr[err])
+               err = __LIBIE_AQ_STR_NUM;
+
+       return libie_aq_str_arr[err];
+}
+EXPORT_SYMBOL_NS_GPL(libie_aq_str, "LIBIE_ADMINQ");
+
+MODULE_DESCRIPTION("Intel(R) Ethernet common library - adminq helpers");
+MODULE_LICENSE("GPL");
index bab7cecc657f83dba78fb25679ffb12849325aab..012b5d499c1a2cfc2322c082aa357e0fc3e71dc8 100644 (file)
@@ -303,4 +303,6 @@ static inline void *libie_aq_raw(struct libie_aq_desc *desc)
        return &desc->params.raw;
 }
 
+const char *libie_aq_str(enum libie_aq_err err);
+
 #endif /* __LIBIE_ADMINQ_H */