LinuxKPI: treat firmware file names more lenient

A lot of firmware files have a "-" in the name.  That "-" is a problem
when dealing with shell variables or loader (e.g., auto-loading .ko).
It may thus often be convenient to generate firmware kernel object files
with s/-/_/g in the name.  In order to automatically find them from
drivers using LinuxKPI also substitue the '-' for a '_' like we do
for '/' and '.' already.

Reviewed-by:	hselasky, manu (ok)
MFC-after:	2 weeks
Differential Revision:	https://reviews.freebsd.org/D29514
This commit is contained in:
Bjoern A. Zeeb 2021-03-31 15:25:01 +00:00
parent 4ded022d3b
commit 37c3241a43

View File

@ -85,9 +85,10 @@ _linuxkpi_request_firmware(const char *fw_name, const struct linuxkpi_firmware *
fwimg = fw_name;
fbdfw = firmware_get_flags(fwimg, flags);
}
/* (3) Flatten '/' and then '.' to '_' and try with adjusted name. */
/* (3) Flatten '/', '.' and '-' to '_' and try with adjusted name. */
if (fbdfw == NULL &&
(strchr(fw_name, '/') != NULL || strchr(fw_name, '.') != NULL)) {
(strchr(fw_name, '/') != NULL || strchr(fw_name, '.') != NULL ||
strchr(fw_name, '-'))) {
fwimg = strdup(fw_name, M_LKPI_FW);
if (fwimg != NULL) {
while ((p = strchr(fwimg, '/')) != NULL)
@ -98,6 +99,11 @@ _linuxkpi_request_firmware(const char *fw_name, const struct linuxkpi_firmware *
*p = '_';
fbdfw = firmware_get_flags(fwimg, flags);
}
if (fbdfw == NULL) {
while ((p = strchr(fwimg, '-')) != NULL)
*p = '_';
fbdfw = firmware_get_flags(fwimg, flags);
}
free(__DECONST(void *, fwimg), M_LKPI_FW);
}
}