Skip to content

Commit b0a2ee5

Browse files
msatwoodLucas De Marchi
authored andcommitted
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>
1 parent 94de94d commit b0a2ee5

1 file changed

Lines changed: 38 additions & 7 deletions

File tree

drivers/gpu/drm/xe/xe_gen_wa_oob.c

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
" *\n" \
1919
" * This file was generated from rules: %s\n" \
2020
" */\n" \
21-
"#ifndef _GENERATED_XE_WA_OOB_\n" \
22-
"#define _GENERATED_XE_WA_OOB_\n" \
21+
"#ifndef _GENERATED_%s_\n" \
22+
"#define _GENERATED_%s_\n" \
2323
"\n" \
2424
"enum {\n"
2525

@@ -52,7 +52,7 @@ static char *strip(char *line, size_t linelen)
5252
}
5353

5454
#define MAX_LINE_LEN 4096
55-
static int parse(FILE *input, FILE *csource, FILE *cheader)
55+
static int parse(FILE *input, FILE *csource, FILE *cheader, char *prefix)
5656
{
5757
char line[MAX_LINE_LEN + 1];
5858
char *name, *prev_name = NULL, *rules;
@@ -96,7 +96,7 @@ static int parse(FILE *input, FILE *csource, FILE *cheader)
9696
}
9797

9898
if (name) {
99-
fprintf(cheader, "\tXE_WA_OOB_%s = %u,\n", name, idx);
99+
fprintf(cheader, "\t%s_%s = %u,\n", prefix, name, idx);
100100

101101
/* Close previous entry before starting a new one */
102102
if (idx)
@@ -118,7 +118,33 @@ static int parse(FILE *input, FILE *csource, FILE *cheader)
118118
if (idx)
119119
fprintf(csource, ") },\n");
120120

121-
fprintf(cheader, "\t_XE_WA_OOB_COUNT = %u\n", idx);
121+
fprintf(cheader, "\t_%s_COUNT = %u\n", prefix, idx);
122+
123+
return 0;
124+
}
125+
126+
static int fn_to_prefix(const char *fn, char *prefix, size_t size)
127+
{
128+
size_t len;
129+
130+
fn = basename(fn);
131+
len = strlen(fn);
132+
133+
if (len > size - 1)
134+
return -ENAMETOOLONG;
135+
136+
memcpy(prefix, fn, len + 1);
137+
138+
for (char *p = prefix; *p; p++) {
139+
switch (*p) {
140+
case '.':
141+
*p = '\0';
142+
return 0;
143+
default:
144+
*p = toupper(*p);
145+
break;
146+
}
147+
}
122148

123149
return 0;
124150
}
@@ -141,13 +167,17 @@ int main(int argc, const char *argv[])
141167
[ARGS_CHEADER] = { .fn = argv[3], .mode = "w" },
142168
};
143169
int ret = 1;
170+
char prefix[128];
144171

145172
if (argc < 3) {
146173
fprintf(stderr, "ERROR: wrong arguments\n");
147174
print_usage(stderr, argv[0]);
148175
return 1;
149176
}
150177

178+
if (fn_to_prefix(args[ARGS_CHEADER].fn, prefix, sizeof(prefix)) < 0)
179+
return 1;
180+
151181
for (int i = 0; i < _ARGS_COUNT; i++) {
152182
args[i].f = fopen(args[i].fn, args[i].mode);
153183
if (!args[i].f) {
@@ -157,9 +187,10 @@ int main(int argc, const char *argv[])
157187
}
158188
}
159189

160-
fprintf(args[ARGS_CHEADER].f, HEADER, args[ARGS_INPUT].fn);
190+
fprintf(args[ARGS_CHEADER].f, HEADER, args[ARGS_INPUT].fn, prefix, prefix);
191+
161192
ret = parse(args[ARGS_INPUT].f, args[ARGS_CSOURCE].f,
162-
args[ARGS_CHEADER].f);
193+
args[ARGS_CHEADER].f, prefix);
163194
if (!ret)
164195
fprintf(args[ARGS_CHEADER].f, FOOTER);
165196

0 commit comments

Comments
 (0)