mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-09-01 13:17:05 +00:00
drm/xe: prepare xe_gen_wa_oob to be multi-use
There is a need for additional oob rules files. Make the current gen file more robust to support more files. Signed-off-by: Matt Atwood <matthew.s.atwood@intel.com> Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com> Link: https://lore.kernel.org/r/20250709221605.172516-2-matthew.s.atwood@intel.com Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
This commit is contained in:
parent
94de94d24e
commit
b0a2ee5567
@ -18,8 +18,8 @@
|
||||
" *\n" \
|
||||
" * This file was generated from rules: %s\n" \
|
||||
" */\n" \
|
||||
"#ifndef _GENERATED_XE_WA_OOB_\n" \
|
||||
"#define _GENERATED_XE_WA_OOB_\n" \
|
||||
"#ifndef _GENERATED_%s_\n" \
|
||||
"#define _GENERATED_%s_\n" \
|
||||
"\n" \
|
||||
"enum {\n"
|
||||
|
||||
@ -52,7 +52,7 @@ static char *strip(char *line, size_t linelen)
|
||||
}
|
||||
|
||||
#define MAX_LINE_LEN 4096
|
||||
static int parse(FILE *input, FILE *csource, FILE *cheader)
|
||||
static int parse(FILE *input, FILE *csource, FILE *cheader, char *prefix)
|
||||
{
|
||||
char line[MAX_LINE_LEN + 1];
|
||||
char *name, *prev_name = NULL, *rules;
|
||||
@ -96,7 +96,7 @@ static int parse(FILE *input, FILE *csource, FILE *cheader)
|
||||
}
|
||||
|
||||
if (name) {
|
||||
fprintf(cheader, "\tXE_WA_OOB_%s = %u,\n", name, idx);
|
||||
fprintf(cheader, "\t%s_%s = %u,\n", prefix, name, idx);
|
||||
|
||||
/* Close previous entry before starting a new one */
|
||||
if (idx)
|
||||
@ -118,7 +118,33 @@ static int parse(FILE *input, FILE *csource, FILE *cheader)
|
||||
if (idx)
|
||||
fprintf(csource, ") },\n");
|
||||
|
||||
fprintf(cheader, "\t_XE_WA_OOB_COUNT = %u\n", idx);
|
||||
fprintf(cheader, "\t_%s_COUNT = %u\n", prefix, idx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int fn_to_prefix(const char *fn, char *prefix, size_t size)
|
||||
{
|
||||
size_t len;
|
||||
|
||||
fn = basename(fn);
|
||||
len = strlen(fn);
|
||||
|
||||
if (len > size - 1)
|
||||
return -ENAMETOOLONG;
|
||||
|
||||
memcpy(prefix, fn, len + 1);
|
||||
|
||||
for (char *p = prefix; *p; p++) {
|
||||
switch (*p) {
|
||||
case '.':
|
||||
*p = '\0';
|
||||
return 0;
|
||||
default:
|
||||
*p = toupper(*p);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -141,6 +167,7 @@ int main(int argc, const char *argv[])
|
||||
[ARGS_CHEADER] = { .fn = argv[3], .mode = "w" },
|
||||
};
|
||||
int ret = 1;
|
||||
char prefix[128];
|
||||
|
||||
if (argc < 3) {
|
||||
fprintf(stderr, "ERROR: wrong arguments\n");
|
||||
@ -148,6 +175,9 @@ int main(int argc, const char *argv[])
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (fn_to_prefix(args[ARGS_CHEADER].fn, prefix, sizeof(prefix)) < 0)
|
||||
return 1;
|
||||
|
||||
for (int i = 0; i < _ARGS_COUNT; i++) {
|
||||
args[i].f = fopen(args[i].fn, args[i].mode);
|
||||
if (!args[i].f) {
|
||||
@ -157,9 +187,10 @@ int main(int argc, const char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(args[ARGS_CHEADER].f, HEADER, args[ARGS_INPUT].fn);
|
||||
fprintf(args[ARGS_CHEADER].f, HEADER, args[ARGS_INPUT].fn, prefix, prefix);
|
||||
|
||||
ret = parse(args[ARGS_INPUT].f, args[ARGS_CSOURCE].f,
|
||||
args[ARGS_CHEADER].f);
|
||||
args[ARGS_CHEADER].f, prefix);
|
||||
if (!ret)
|
||||
fprintf(args[ARGS_CHEADER].f, FOOTER);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user