New version of this patch, we need to prepend the paths.
Resolves: rhbz#784327
---
loader/driverdisk.c | 8 +++-----
loader/driverdisk.h | 1 +
loader/fwloader.c | 7 +++++++
loader/fwloader.h | 1 +
loader/loader.c | 2 +-
5 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/loader/driverdisk.c b/loader/driverdisk.c
index 707c253..092de64 100644
--- a/loader/driverdisk.c
+++ b/loader/driverdisk.c
@@ -300,7 +300,6 @@ static int loadDriverDisk(struct loaderData_s *loaderData, char *mntpt) {
/* FIXME moduleInfoSet modInfo = loaderData->modInfo; */
char file[200], dest[200], src[200];
char *title;
- char *fwdir = NULL;
struct moduleBallLocation * location;
struct stat sb;
static int disknum = 0;
@@ -374,13 +373,12 @@ static int loadDriverDisk(struct loaderData_s *loaderData, char *mntpt) {
logMessage(ERROR, "Error running depmod -a for driverdisc no.%d", disknum);
}
- checked_asprintf(&fwdir, DD_FIRMWARE);
- if (!access(fwdir, R_OK|X_OK)) {
- add_fw_search_dir(loaderData, fwdir);
+ if (!access(DD_FIRMWARE, R_OK|X_OK)) {
+ insert_fw_search_dir(loaderData, DD_FIRMWARE);
+ insert_fw_search_dir(loaderData, DD_FIRMWARE_UPDATES);
stop_fw_loader(loaderData);
start_fw_loader(loaderData);
}
- free(fwdir);
/* TODO generate and read module info
*
diff --git a/loader/driverdisk.h b/loader/driverdisk.h
index 4dc8685..d70fe49 100644
--- a/loader/driverdisk.h
+++ b/loader/driverdisk.h
@@ -28,6 +28,7 @@
#define DD_EXTRACTED "/tmp/DD"
#define DD_MODULES "/tmp/DD/lib/modules"
#define DD_FIRMWARE "/tmp/DD/lib/firmware"
+#define DD_FIRMWARE_UPDATES "/tmp/DD/lib/firmware/updates"
extern char *ddFsTypes[];
diff --git a/loader/fwloader.c b/loader/fwloader.c
index a91ff6b..902c63f 100644
--- a/loader/fwloader.c
+++ b/loader/fwloader.c
@@ -604,6 +604,13 @@ void add_fw_search_dir(struct loaderData_s *loaderData, char *dir)
dir);
}
+void insert_fw_search_dir(struct loaderData_s *loaderData, char *dir)
+{
+ argz_insert(&loaderData->fw_search_pathz, &loaderData->fw_search_pathz_len,
+ loaderData->fw_search_pathz, dir);
+}
+
+
void do_fw_loader(struct loaderData_s *loaderData)
{
struct fw_loader fwl;
diff --git a/loader/fwloader.h b/loader/fwloader.h
index e0b0fe8..daa69ec 100644
--- a/loader/fwloader.h
+++ b/loader/fwloader.h
@@ -26,6 +26,7 @@
extern void set_fw_search_path(struct loaderData_s *loaderData, char *path);
extern void add_fw_search_dir(struct loaderData_s *loaderData, char *dir);
+extern void insert_fw_search_dir(struct loaderData_s *loaderData, char *dir);
extern void start_fw_loader(struct loaderData_s *loaderData);
extern void stop_fw_loader(struct loaderData_s *loaderData);
diff --git a/loader/loader.c b/loader/loader.c
index 177d8a3..5bbb7c1 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -2079,7 +2079,7 @@ int main(int argc, char ** argv) {
}
if (hasGraphicalOverride())
flags |= LOADER_FLAGS_EARLY_NETWORKING;
- set_fw_search_path(&loaderData, "/firmware:/lib/firmware");
+ set_fw_search_path(&loaderData, "/lib/firmware/updates:/firmware:/lib/firmware");
start_fw_loader(&loaderData);
arg = "/lib/modules/module-info";
--
1.7.4.4