summaryrefslogtreecommitdiff
path: root/fallback.c
diff options
context:
space:
mode:
Diffstat (limited to 'fallback.c')
-rw-r--r--fallback.c50
1 files changed, 34 insertions, 16 deletions
diff --git a/fallback.c b/fallback.c
index da7f2099..5e4a3963 100644
--- a/fallback.c
+++ b/fallback.c
@@ -579,6 +579,8 @@ find_boot_csv(EFI_FILE_HANDLE fh, CHAR16 *dirname)
FreePool(buffer);
buffer = NULL;
+ CHAR16 *bootcsv=NULL, *bootarchcsv=NULL;
+
bs = 0;
do {
bs = 0;
@@ -608,27 +610,43 @@ find_boot_csv(EFI_FILE_HANDLE fh, CHAR16 *dirname)
fi = buffer;
- if (!StrCaseCmp(fi->FileName, L"boot.csv")) {
- EFI_FILE_HANDLE fh2;
- rc = uefi_call_wrapper(fh->Open, 5, fh, &fh2,
- fi->FileName,
- EFI_FILE_READ_ONLY, 0);
- if (EFI_ERROR(rc) || fh2 == NULL) {
- Print(L"Couldn't open \\EFI\\%s\\%s: %d\n",
- dirname, fi->FileName, rc);
- FreePool(buffer);
- buffer = NULL;
- continue;
- }
- rc = try_boot_csv(fh2, dirname, fi->FileName);
- uefi_call_wrapper(fh2->Close, 1, fh2);
- }
+ if (!bootcsv && !StrCaseCmp(fi->FileName, L"boot.csv"))
+ bootcsv = StrDuplicate(fi->FileName);
+
+ if (!bootarchcsv &&
+ !StrCaseCmp(fi->FileName, L"boot" EFI_ARCH L".csv"))
+ bootarchcsv = StrDuplicate(fi->FileName);
FreePool(buffer);
buffer = NULL;
} while (bs != 0);
rc = EFI_SUCCESS;
+ if (bootarchcsv) {
+ EFI_FILE_HANDLE fh2;
+ rc = uefi_call_wrapper(fh->Open, 5, fh, &fh2,
+ bootarchcsv, EFI_FILE_READ_ONLY, 0);
+ if (EFI_ERROR(rc) || fh2 == NULL) {
+ Print(L"Couldn't open \\EFI\\%s\\%s: %d\n",
+ dirname, bootarchcsv, rc);
+ } else {
+ rc = try_boot_csv(fh2, dirname, bootarchcsv);
+ uefi_call_wrapper(fh2->Close, 1, fh2);
+ }
+ }
+ if ((EFI_ERROR(rc) || !bootarchcsv) && bootcsv) {
+ EFI_FILE_HANDLE fh2;
+ rc = uefi_call_wrapper(fh->Open, 5, fh, &fh2,
+ bootcsv, EFI_FILE_READ_ONLY, 0);
+ if (EFI_ERROR(rc) || fh2 == NULL) {
+ Print(L"Couldn't open \\EFI\\%s\\%s: %d\n",
+ dirname, bootcsv, rc);
+ } else {
+ rc = try_boot_csv(fh2, dirname, bootcsv);
+ uefi_call_wrapper(fh2->Close, 1, fh2);
+ }
+ }
+ rc = EFI_SUCCESS;
return rc;
}
@@ -817,7 +835,7 @@ debug_hook(void)
x = 1;
Print(L"add-symbol-file "DEBUGDIR
- L"fallback.debug %p -s .data %p\n", &_etext,
+ L"fb" EFI_ARCH L".efi.debug %p -s .data %p\n", &_etext,
&_edata);
}