diff options
author | Iliyan Malchev <malchev@google.com> | 2012-06-08 10:42:26 -0700 |
---|---|---|
committer | Iliyan Malchev <malchev@google.com> | 2012-06-11 14:18:45 -0700 |
commit | 029d44e6aef334d2f0f03cbc9a5609cddc1b23e3 (patch) | |
tree | 276614b7de9d5863351f748e43ffa2e0ce9b4c6f /init | |
parent | db7462f8d1560b0e24bffab266ea22f146d5dbd1 (diff) | |
download | system_core-029d44e6aef334d2f0f03cbc9a5609cddc1b23e3.zip system_core-029d44e6aef334d2f0f03cbc9a5609cddc1b23e3.tar.gz system_core-029d44e6aef334d2f0f03cbc9a5609cddc1b23e3.tar.bz2 |
HACK: use /firmware/image as a 3rd choice
Change-Id: I74af2e2dc872f88b904ead13e300ae32547e70c8
Signed-off-by: Iliyan Malchev <malchev@google.com>
Diffstat (limited to 'init')
-rw-r--r-- | init/devices.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/init/devices.c b/init/devices.c index 125f981..2ad81ef 100644 --- a/init/devices.c +++ b/init/devices.c @@ -50,6 +50,7 @@ #define SYSFS_PREFIX "/sys" #define FIRMWARE_DIR1 "/etc/firmware" #define FIRMWARE_DIR2 "/vendor/firmware" +#define FIRMWARE_DIR3 "/firmware/image" #ifdef HAVE_SELINUX static struct selabel_handle *sehandle; @@ -725,7 +726,7 @@ static int is_booting(void) static void process_firmware_event(struct uevent *uevent) { - char *root, *loading, *data, *file1 = NULL, *file2 = NULL; + char *root, *loading, *data, *file1 = NULL, *file2 = NULL, *file3 = NULL; int l, loading_fd, data_fd, fw_fd; int booting = is_booting(); @@ -752,6 +753,10 @@ static void process_firmware_event(struct uevent *uevent) if (l == -1) goto data_free_out; + l = asprintf(&file3, FIRMWARE_DIR3"/%s", uevent->firmware); + if (l == -1) + goto data_free_out; + loading_fd = open(loading, O_WRONLY); if(loading_fd < 0) goto file_free_out; @@ -765,17 +770,20 @@ try_loading_again: if(fw_fd < 0) { fw_fd = open(file2, O_RDONLY); if (fw_fd < 0) { - if (booting) { - /* If we're not fully booted, we may be missing - * filesystems needed for firmware, wait and retry. - */ - usleep(100000); - booting = is_booting(); - goto try_loading_again; + fw_fd = open(file3, O_RDONLY); + if (fw_fd < 0) { + if (booting) { + /* If we're not fully booted, we may be missing + * filesystems needed for firmware, wait and retry. + */ + usleep(100000); + booting = is_booting(); + goto try_loading_again; + } + INFO("firmware: could not open '%s' %d\n", uevent->firmware, errno); + write(loading_fd, "-1", 2); + goto data_close_out; } - INFO("firmware: could not open '%s' %d\n", uevent->firmware, errno); - write(loading_fd, "-1", 2); - goto data_close_out; } } |