accel-config/0006-Add-decode-subcommand-info.patch
Jerry Snitselaar 31fe2c9cb9 accel-config: Update to stable
JIRA: https://issues.redhat.com/browse/RHEL-38577

Sync up with current stable branch upstream.

* Update tests to use syscall write interface for descriptor submission
* Refine usage for enable-device/disable device commands

Resolves: RHEL-38577

Signed-off-by: Jerry Snitselaar <jsnitsel@redhat.com>
2025-03-17 12:29:05 -07:00

233 lines
6.7 KiB
Diff

From 07b5795208c79274aa29253a73109bad00561bea Mon Sep 17 00:00:00 2001
From: Yi Sun <yi.sun@intel.com>
Date: Mon, 28 Oct 2024 17:34:34 +0800
Subject: [PATCH] Add decode subcommand info
'Content-type:text/plain'
Decode op_cap to a readable operation name, providing users with easier
access to information about hardware support."
Example
-------------
[root@testmachine]accel-config info -v
dsa0 [active]
00000000,00000000,00000000,00000000,00000000,00000000,0000007b,00bf07fd
Batch[-] Drain[+] Memory Move[+] Fill[+] Compare[+] Compare Pattern[+] Create Delta Record[+] Apply Delta Record[+] Memory Copy with Dualcast[+] Translation Fetch[+] CRC Generation[+] Copy with CRC Generation[+] DIF Check[+] DIF Insert[+] DIF Strip[+] DIF Update[+] DIX Generate[+] Cache Flush[+] Update Window[+] Inter-Domain Momery Copy[+] Inter-Domain Fill[+] Inter-Domain Compare[+] Inter-Domain Compare Pattern[+] Inter-Domain Cache Flush[-]
iax1
00000000,00000000,00000000,00000000,00000000,004d001c,00000000,00000405
Drain[+] Translation Fetch[+] Decrypt[-] Encrypt[-] Decompress[+] Compress[+] CRC64[+] Zdecompress32[-] Zdecompress16[-] Zdecompress8 [-] Zcompress32[-] Zcompress16[-] Zcompress8[-] Scan[+] Set Membership[-] Extract[+] Select[+] BLE Burst[-] Find Unique[-] Expand[+]
- Change from v1 to v2:
- Merge two related patch into a single commit.
- Reword.
Signed-off-by: Yi Sun <yi.sun@intel.com>
---
accfg/accel-config.c | 1 +
accfg/list.c | 148 +++++++++++++++++++++++++++++++++++++++++++
builtin.h | 1 +
3 files changed, 150 insertions(+)
diff --git a/accfg/accel-config.c b/accfg/accel-config.c
index 616f2e5af5dd..e8a1f718cebc 100644
--- a/accfg/accel-config.c
+++ b/accfg/accel-config.c
@@ -23,6 +23,7 @@ const char accfg_usage_string[] =
static struct cmd_struct commands[] = {
{"list", cmd_list},
+ {"info", cmd_info},
{"load-config", cmd_config},
{"save-config", cmd_save},
{"disable-device", cmd_disable_device},
diff --git a/accfg/list.c b/accfg/list.c
index 145c5231f5c5..916451069d2c 100644
--- a/accfg/list.c
+++ b/accfg/list.c
@@ -14,6 +14,7 @@
#include <util/parse-options.h>
#include <ccan/array_size/array_size.h>
#include <accfg.h>
+#include <string.h>
static struct util_filter_params util_param;
static struct {
@@ -25,6 +26,96 @@ static struct {
bool save_conf;
} list;
+struct map_op_name {
+ int op_code;
+ const char *op_name;
+};
+
+#define BITMAP_SIZE 8
+#define IAX_OP_CODE_NAME \
+ {0x02, "Drain"}, \
+ {0x0A, "Translation Fetch"}, \
+ {0x40, "Decrypt"}, \
+ {0x41, "Encrypt"}, \
+ {0x42, "Decompress"}, \
+ {0x43, "Compress"}, \
+ {0x44, "CRC64"}, \
+ {0x48, "Zdecompress32"}, \
+ {0x49, "Zdecompress16"}, \
+ {0x4A, "Zdecompress8"}, \
+ {0x4C, "Zcompress32"}, \
+ {0x4D, "Zcompress16"}, \
+ {0x4E, "Zcompress8"}, \
+ {0x50, "Scan"}, \
+ {0x51, "Set Membership"}, \
+ {0x52, "Extract"}, \
+ {0x53, "Select"}, \
+ {0x54, "BLE Burst"}, \
+ {0x55, "Find Unique"}, \
+ {0x56, "Expand"}
+
+struct map_op_name iax_op_code_name[] = {
+ IAX_OP_CODE_NAME,
+ {-1, NULL}
+};
+
+#define DSA_OP_CODE_NAME \
+ {0x01, "Batch"}, \
+ {0x02, "Drain"}, \
+ {0x03, "Memory Move"}, \
+ {0x04, "Fill"}, \
+ {0x05, "Compare"}, \
+ {0x06, "Compare Pattern"}, \
+ {0x07, "Create Delta Record"}, \
+ {0x08, "Apply Delta Record"}, \
+ {0x09, "Memory Copy with Dualcast"}, \
+ {0x0A, "Translation Fetch"}, \
+ {0x10, "CRC Generation"}, \
+ {0x11, "Copy with CRC Generation"}, \
+ {0x12, "DIF Check"}, \
+ {0x13, "DIF Insert"}, \
+ {0x14, "DIF Strip"}, \
+ {0x15, "DIF Update"}, \
+ {0x17, "DIX Generate"}, \
+ {0x20, "Cache Flush"}, \
+ {0x21, "Update Window"}, \
+ {0x23, "Inter-Domain Momery Copy"}, \
+ {0x24, "Inter-Domain Fill"}, \
+ {0x25, "Inter-Domain Compare"}, \
+ {0x26, "Inter-Domain Compare Pattern"}, \
+ {0x27, "Inter-Domain Cache Flush"}
+
+struct map_op_name dsa_op_code_name[] = {
+ DSA_OP_CODE_NAME,
+ {-1, NULL}
+};
+
+
+static const char* get_op_name(struct map_op_name *code_name, int op_code)
+{
+ int i = 0;
+ while (code_name[i].op_code != -1) {
+ if (code_name[i].op_code == op_code) {
+ return code_name[i].op_name;
+ }
+ i++;
+ }
+ return NULL;
+}
+
+static int get_bit(struct accfg_op_cap op_cap, int bit_index)
+{
+ int array_index = (BITMAP_SIZE - 1) - (bit_index / 32);
+ int bit_offset = bit_index % 32;
+
+ if (bit_index < 0 || bit_index >= 256) {
+ printf("Error: bit_index out of range (0-255)\n");
+ return -1;
+ }
+
+ return (op_cap.bits[array_index] & (1 << bit_offset)) != 0;
+}
+
static uint64_t listopts_to_flags(void)
{
uint64_t flags = 0;
@@ -692,6 +783,63 @@ int cmd_list(int argc, const char **argv, void *ctx)
return 0;
}
+int cmd_info(int argc, const char **argv, void *ctx)
+{
+ struct map_op_name *cur_op_name = NULL;
+ struct accfg_device *device;
+ struct accfg_op_cap op_cap;
+ bool verbose = false;
+ const char *dev_name;
+ const char *op_name;
+ int rc, j, has_op;
+
+ const struct option options[] = {
+ OPT_BOOLEAN('v', "verbose", &verbose, "show more info"),
+ OPT_END(),
+ };
+ const char *const u[] = {
+ "accel-config info [<options>]",
+ NULL
+ };
+
+ argc = parse_options(argc, argv, options, u, 0);
+ for (j = 0; j < argc; j++)
+ error("unknown parameter \"%s\"\n", argv[j]);
+
+ accfg_device_foreach(ctx, device) {
+ dev_name = accfg_device_get_devname(device);
+ fprintf(stdout, "%s %s\n", dev_name,
+ accfg_device_is_active(device)? "[active]" : "");
+
+ rc = accfg_device_get_op_cap(device, &op_cap);
+ if (rc) {
+ printf("Error getting op cap\n");
+ return rc;
+ }
+
+ for (j = 0; j < BITMAP_SIZE; j++)
+ printf("%08x,", op_cap.bits[j]);
+ printf("\b \n");
+
+ if (!verbose)
+ continue;
+
+ if (strstr(dev_name, "dsa") != NULL) {
+ cur_op_name = dsa_op_code_name;
+ } else if (strstr(dev_name, "iax") != NULL) {
+ cur_op_name = iax_op_code_name;
+ }
+ for (int k = 0; k < 256; k++) {
+ has_op = get_bit(op_cap, k);
+ op_name = get_op_name(cur_op_name, k);
+ if (op_name)
+ printf("%s[%c] ", op_name, has_op? '+' : '-');
+ }
+ printf("\n");
+ }
+
+ return 0;
+}
int cmd_save(int argc, const char **argv, void *ctx)
{
const struct option options[] = {
diff --git a/builtin.h b/builtin.h
index 9554ee541eed..ff6cb5f62990 100644
--- a/builtin.h
+++ b/builtin.h
@@ -19,6 +19,7 @@ struct cmd_struct {
int (*fn) (int, const char **, void *ctx);
};
int cmd_list(int argc, const char **argv, void *ctx);
+int cmd_info(int argc, const char **argv, void *ctx);
int cmd_config(int argc, const char **argv, void *ctx);
int cmd_save(int argc, const char **argv, void *ctx);
int cmd_disable_device(int argc, const char **argv, void *ctx);
--
2.48.0