Index: usr.sbin/bsdinstall/partedit/gpart_ops.c =================================================================== --- usr.sbin/bsdinstall/partedit/gpart_ops.c +++ usr.sbin/bsdinstall/partedit/gpart_ops.c @@ -428,6 +428,7 @@ const char *scheme; const char *indexstr; const char *partcode; + const char *fat; char message[255], command[255]; LIST_FOREACH(gc, &pp->lg_geom->lg_config, lg_config) { @@ -442,6 +443,31 @@ if (partcode == NULL) return; + /* Some platforms have files on FAT, check for that */ + fat = fat_bootcode_file(scheme, fstype); + if (fat != NULL) { + /* + * A case could be made for making this an external script + */ + sprintf(command, "newfs_msdos -F 12 -L EFI /dev/%s", + pp->lg_geom->lg_name); + if (system(command) != 0) { + sprintf(message, "Error newfs_msdos the partcode on partition %s", + pp->lg_name); + dialog_msgbox("Error", message, 0, 0, TRUE); + return; + } + sprintf(command, "mount -t msdos /dev/%s /mnt && mkdir -p /mnt/`dirname %s` && cp %s /mnt/%s && umount /mnt", + pp->lg_geom->lg_name, fat, partcode, fat); + if (system(command) != 0) { + sprintf(message, "Error mounting partition %s", + pp->lg_name); + dialog_msgbox("Error", message, 0, 0, TRUE); + return; + } + return; + } + LIST_FOREACH(gc, &pp->lg_config, lg_config) { if (strcmp(gc->lg_name, "index") == 0) { indexstr = gc->lg_val; Index: usr.sbin/bsdinstall/partedit/partedit.h =================================================================== --- usr.sbin/bsdinstall/partedit/partedit.h +++ usr.sbin/bsdinstall/partedit/partedit.h @@ -83,5 +83,6 @@ const char *bootpart_type(const char *scheme); const char *bootcode_path(const char *scheme); const char *partcode_path(const char *scheme, const char *fs_type); +const char *fat_bootcode_file(const char *part_type, const char *fs_type); #endif Index: usr.sbin/bsdinstall/partedit/partedit_arm64.c =================================================================== --- usr.sbin/bsdinstall/partedit/partedit_arm64.c +++ usr.sbin/bsdinstall/partedit/partedit_arm64.c @@ -36,7 +36,8 @@ /* EFI partition size in bytes */ #define EFI_BOOTPART_SIZE (200 * 1024 * 1024) -#define EFI_BOOTPART_PATH "/boot/boot1.efifat" +#define EFI_BOOTPART_PATH "/boot/boot1.efif" +#define EFI_FAT_PATH "/efi/boot/bootaa64.efi" const char * default_scheme(void) @@ -98,6 +99,15 @@ if (strcmp(part_type, "GPT") == 0) return (EFI_BOOTPART_PATH); - /* No boot partition data for non-GPT */ + return (NULL); +} + +const char * +fat_bootcode_file(const char *part_type, const char *fs_type) +{ + + if (strcmp(part_type, "GPT") == 0) + return (EFI_FAT_PATH); + return (NULL); } Index: usr.sbin/bsdinstall/partedit/partedit_generic.c =================================================================== --- usr.sbin/bsdinstall/partedit/partedit_generic.c +++ usr.sbin/bsdinstall/partedit/partedit_generic.c @@ -76,3 +76,8 @@ partcode_path(const char *part_type, const char *fs_type) { return (NULL); } + +const char * +fat_bootcode_file(const char *part_type, const char *fs_type) { + return (NULL); +} Index: usr.sbin/bsdinstall/partedit/partedit_powerpc.c =================================================================== --- usr.sbin/bsdinstall/partedit/partedit_powerpc.c +++ usr.sbin/bsdinstall/partedit/partedit_powerpc.c @@ -121,3 +121,9 @@ return ("/boot/boot1.elf"); return (NULL); } + +const char * +fat_bootcode_file(const char *part_type, const char *fs_type) +{ + return (NULL); +} Index: usr.sbin/bsdinstall/partedit/partedit_sparc64.c =================================================================== --- usr.sbin/bsdinstall/partedit/partedit_sparc64.c +++ usr.sbin/bsdinstall/partedit/partedit_sparc64.c @@ -79,3 +79,9 @@ } return (NULL); } + +const char * +fat_bootcode_file(const char *part_type, const char *fs_type) +{ + return (NULL); +} Index: usr.sbin/bsdinstall/partedit/partedit_x86.c =================================================================== --- usr.sbin/bsdinstall/partedit/partedit_x86.c +++ usr.sbin/bsdinstall/partedit/partedit_x86.c @@ -34,7 +34,8 @@ /* EFI partition size in bytes */ #define EFI_BOOTPART_SIZE (200 * 1024 * 1024) -#define EFI_BOOTPART_PATH "/boot/boot1.efifat" +#define EFI_BOOTPART_PATH "/boot/boot1.efi" +#define EFI_FAT_PATH "/efi/boot/bootx64.efi" static const char * x86_bootmethod(void) @@ -151,3 +152,14 @@ /* No partcode except for GPT */ return (NULL); } + +const char * +fat_bootcode_file(const char *part_type, const char *fs_type) +{ + + if (strcmp(part_type, "GPT") == 0 && + strcmp(x86_bootmethod(), "UEFI") == 0) + return (EFI_FAT_PATH); + + return (NULL); +}