uboot/include/config_distro_bootcmd.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2/*
   3 * (C) Copyright 2014
   4 * NVIDIA Corporation <www.nvidia.com>
   5 *
   6 * Copyright 2014 Red Hat, Inc.
   7 */
   8
   9#ifndef _CONFIG_CMD_DISTRO_BOOTCMD_H
  10#define _CONFIG_CMD_DISTRO_BOOTCMD_H
  11
  12/*
  13 * A note on error handling: It is possible for BOOT_TARGET_DEVICES to
  14 * reference a device that is not enabled in the U-Boot configuration, e.g.
  15 * it may include MMC in the list without CONFIG_CMD_MMC being enabled. Given
  16 * that BOOT_TARGET_DEVICES is a macro that's expanded by the C pre-processor
  17 * at compile time, it's not  possible to detect and report such problems via
  18 * a simple #ifdef/#error combination. Still, the code needs to report errors.
  19 * The best way I've found to do this is to make BOOT_TARGET_DEVICES expand to
  20 * reference a non-existent symbol, and have the name of that symbol encode
  21 * the error message. Consequently, this file contains references to e.g.
  22 * BOOT_TARGET_DEVICES_references_MMC_without_CONFIG_CMD_MMC. Given the
  23 * prevalence of capitals here, this looks like a pre-processor macro and
  24 * hence seems like it should be all capitals, but it's really an error
  25 * message that includes some other pre-processor symbols in the text.
  26 */
  27
  28#define BOOTENV_SHARED_BLKDEV_BODY(devtypel) \
  29                "if " #devtypel " dev ${devnum}; then " \
  30                        "devtype=" #devtypel "; " \
  31                        "run scan_dev_for_boot_part; " \
  32                "fi\0"
  33
  34#define BOOTENV_SHARED_BLKDEV(devtypel) \
  35        #devtypel "_boot=" \
  36        BOOTENV_SHARED_BLKDEV_BODY(devtypel)
  37
  38#define BOOTENV_DEV_BLKDEV(devtypeu, devtypel, instance) \
  39        "bootcmd_" #devtypel #instance "=" \
  40                "devnum=" #instance "; " \
  41                "run " #devtypel "_boot\0"
  42
  43#define BOOTENV_DEV_NAME_BLKDEV(devtypeu, devtypel, instance) \
  44        #devtypel #instance " "
  45
  46#ifdef CONFIG_SANDBOX
  47#define BOOTENV_SHARED_HOST     BOOTENV_SHARED_BLKDEV(host)
  48#define BOOTENV_DEV_HOST        BOOTENV_DEV_BLKDEV
  49#define BOOTENV_DEV_NAME_HOST   BOOTENV_DEV_NAME_BLKDEV
  50#else
  51#define BOOTENV_SHARED_HOST
  52#define BOOTENV_DEV_HOST \
  53        BOOT_TARGET_DEVICES_references_HOST_without_CONFIG_SANDBOX
  54#define BOOTENV_DEV_NAME_HOST \
  55        BOOT_TARGET_DEVICES_references_HOST_without_CONFIG_SANDBOX
  56#endif
  57
  58#ifdef CONFIG_CMD_MMC
  59#define BOOTENV_SHARED_MMC      BOOTENV_SHARED_BLKDEV(mmc)
  60#define BOOTENV_DEV_MMC         BOOTENV_DEV_BLKDEV
  61#define BOOTENV_DEV_NAME_MMC    BOOTENV_DEV_NAME_BLKDEV
  62#else
  63#define BOOTENV_SHARED_MMC
  64#define BOOTENV_DEV_MMC \
  65        BOOT_TARGET_DEVICES_references_MMC_without_CONFIG_CMD_MMC
  66#define BOOTENV_DEV_NAME_MMC \
  67        BOOT_TARGET_DEVICES_references_MMC_without_CONFIG_CMD_MMC
  68#endif
  69
  70#ifdef CONFIG_CMD_UBIFS
  71#define BOOTENV_SHARED_UBIFS \
  72        "ubifs_boot=" \
  73                "env exists bootubipart || " \
  74                        "env set bootubipart UBI; " \
  75                "env exists bootubivol || " \
  76                        "env set bootubivol boot; " \
  77                "if ubi part ${bootubipart} && " \
  78                        "ubifsmount ubi${devnum}:${bootubivol}; " \
  79                "then " \
  80                        "devtype=ubi; " \
  81                        "run scan_dev_for_boot; " \
  82                "fi\0"
  83#define BOOTENV_DEV_UBIFS       BOOTENV_DEV_BLKDEV
  84#define BOOTENV_DEV_NAME_UBIFS  BOOTENV_DEV_NAME_BLKDEV
  85#else
  86#define BOOTENV_SHARED_UBIFS
  87#define BOOTENV_DEV_UBIFS \
  88        BOOT_TARGET_DEVICES_references_UBIFS_without_CONFIG_CMD_UBIFS
  89#define BOOTENV_DEV_NAME_UBIFS \
  90        BOOT_TARGET_DEVICES_references_UBIFS_without_CONFIG_CMD_UBIFS
  91#endif
  92
  93#ifdef CONFIG_EFI_LOADER
  94#if defined(CONFIG_ARM64)
  95#define BOOTEFI_NAME "bootaa64.efi"
  96#elif defined(CONFIG_ARM)
  97#define BOOTEFI_NAME "bootarm.efi"
  98#elif defined(CONFIG_X86_RUN_32BIT)
  99#define BOOTEFI_NAME "bootia32.efi"
 100#elif defined(CONFIG_X86_RUN_64BIT)
 101#define BOOTEFI_NAME "bootx64.efi"
 102#elif defined(CONFIG_ARCH_RV32I)
 103#define BOOTEFI_NAME "bootriscv32.efi"
 104#elif defined(CONFIG_ARCH_RV64I)
 105#define BOOTEFI_NAME "bootriscv64.efi"
 106#endif
 107#endif
 108
 109#ifdef BOOTEFI_NAME
 110#if defined(CONFIG_ARM) && !defined(CONFIG_ARM64)
 111/*
 112 * On 32bit ARM systems there is a reasonable number of systems that follow
 113 * the $soc-$board$boardver.dtb name scheme for their device trees. Use that
 114 * scheme if we don't have an explicit fdtfile variable.
 115 */
 116#define BOOTENV_EFI_SET_FDTFILE_FALLBACK                                  \
 117        "if test -z \"${fdtfile}\" -a -n \"${soc}\"; then "               \
 118          "setenv efi_fdtfile ${soc}-${board}${boardver}.dtb; "           \
 119        "fi; "
 120#else
 121#define BOOTENV_EFI_SET_FDTFILE_FALLBACK
 122#endif
 123
 124
 125#define BOOTENV_SHARED_EFI                                                \
 126        "boot_efi_binary="                                                \
 127                "if fdt addr ${fdt_addr_r}; then "                        \
 128                        "bootefi bootmgr ${fdt_addr_r};"                  \
 129                "else "                                                   \
 130                        "bootefi bootmgr ${fdtcontroladdr};"              \
 131                "fi;"                                                     \
 132                "load ${devtype} ${devnum}:${distro_bootpart} "           \
 133                        "${kernel_addr_r} efi/boot/"BOOTEFI_NAME"; "      \
 134                "if fdt addr ${fdt_addr_r}; then "                        \
 135                        "bootefi ${kernel_addr_r} ${fdt_addr_r};"         \
 136                "else "                                                   \
 137                        "bootefi ${kernel_addr_r} ${fdtcontroladdr};"     \
 138                "fi\0"                                                    \
 139        \
 140        "load_efi_dtb="                                                   \
 141                "load ${devtype} ${devnum}:${distro_bootpart} "           \
 142                        "${fdt_addr_r} ${prefix}${efi_fdtfile}\0"         \
 143        \
 144        "efi_dtb_prefixes=/ /dtb/ /dtb/current/\0"                        \
 145        "scan_dev_for_efi="                                               \
 146                "setenv efi_fdtfile ${fdtfile}; "                         \
 147                BOOTENV_EFI_SET_FDTFILE_FALLBACK                          \
 148                "for prefix in ${efi_dtb_prefixes}; do "                  \
 149                        "if test -e ${devtype} "                          \
 150                                        "${devnum}:${distro_bootpart} "   \
 151                                        "${prefix}${efi_fdtfile}; then "  \
 152                                "run load_efi_dtb; "                      \
 153                        "fi;"                                             \
 154                "done;"                                                   \
 155                "if test -e ${devtype} ${devnum}:${distro_bootpart} "     \
 156                                        "efi/boot/"BOOTEFI_NAME"; then "  \
 157                                "echo Found EFI removable media binary "  \
 158                                        "efi/boot/"BOOTEFI_NAME"; "       \
 159                                "run boot_efi_binary; "                   \
 160                                "echo EFI LOAD FAILED: continuing...; "   \
 161                "fi; "                                                    \
 162                "setenv efi_fdtfile\0"
 163#define SCAN_DEV_FOR_EFI "run scan_dev_for_efi;"
 164#else
 165#define BOOTENV_SHARED_EFI
 166#define SCAN_DEV_FOR_EFI
 167#endif
 168
 169#ifdef CONFIG_SATA
 170#define BOOTENV_SHARED_SATA     BOOTENV_SHARED_BLKDEV(sata)
 171#define BOOTENV_DEV_SATA        BOOTENV_DEV_BLKDEV
 172#define BOOTENV_DEV_NAME_SATA   BOOTENV_DEV_NAME_BLKDEV
 173#else
 174#define BOOTENV_SHARED_SATA
 175#define BOOTENV_DEV_SATA \
 176        BOOT_TARGET_DEVICES_references_SATA_without_CONFIG_SATA
 177#define BOOTENV_DEV_NAME_SATA \
 178        BOOT_TARGET_DEVICES_references_SATA_without_CONFIG_SATA
 179#endif
 180
 181#ifdef CONFIG_NVME
 182#define BOOTENV_RUN_NVME_INIT "run nvme_init; "
 183#define BOOTENV_SET_NVME_NEED_INIT "setenv nvme_need_init; "
 184#define BOOTENV_SHARED_NVME \
 185        "nvme_init=" \
 186                "if ${nvme_need_init}; then " \
 187                        "setenv nvme_need_init false; " \
 188                        "nvme scan; " \
 189                "fi\0" \
 190        \
 191        "nvme_boot=" \
 192                BOOTENV_RUN_PCI_ENUM \
 193                BOOTENV_RUN_NVME_INIT \
 194                BOOTENV_SHARED_BLKDEV_BODY(nvme)
 195#define BOOTENV_DEV_NVME        BOOTENV_DEV_BLKDEV
 196#define BOOTENV_DEV_NAME_NVME   BOOTENV_DEV_NAME_BLKDEV
 197#else
 198#define BOOTENV_RUN_NVME_INIT
 199#define BOOTENV_SET_NVME_NEED_INIT
 200#define BOOTENV_SHARED_NVME
 201#define BOOTENV_DEV_NVME \
 202        BOOT_TARGET_DEVICES_references_NVME_without_CONFIG_NVME
 203#define BOOTENV_DEV_NAME_NVME \
 204        BOOT_TARGET_DEVICES_references_NVME_without_CONFIG_NVME
 205#endif
 206
 207#ifdef CONFIG_SCSI
 208#define BOOTENV_RUN_SCSI_INIT "run scsi_init; "
 209#define BOOTENV_SET_SCSI_NEED_INIT "scsi_need_init=; "
 210#define BOOTENV_SHARED_SCSI \
 211        "scsi_init=" \
 212                "if ${scsi_need_init}; then " \
 213                        "scsi_need_init=false; " \
 214                        "scsi scan; " \
 215                "fi\0" \
 216        \
 217        "scsi_boot=" \
 218                BOOTENV_RUN_SCSI_INIT \
 219                BOOTENV_SHARED_BLKDEV_BODY(scsi)
 220#define BOOTENV_DEV_SCSI        BOOTENV_DEV_BLKDEV
 221#define BOOTENV_DEV_NAME_SCSI   BOOTENV_DEV_NAME_BLKDEV
 222#else
 223#define BOOTENV_RUN_SCSI_INIT
 224#define BOOTENV_SET_SCSI_NEED_INIT
 225#define BOOTENV_SHARED_SCSI
 226#define BOOTENV_DEV_SCSI \
 227        BOOT_TARGET_DEVICES_references_SCSI_without_CONFIG_SCSI
 228#define BOOTENV_DEV_NAME_SCSI \
 229        BOOT_TARGET_DEVICES_references_SCSI_without_CONFIG_SCSI
 230#endif
 231
 232#ifdef CONFIG_IDE
 233#define BOOTENV_RUN_IDE_INIT "run ide_init; "
 234#define BOOTENV_SET_IDE_NEED_INIT "setenv ide_need_init; "
 235#define BOOTENV_SHARED_IDE \
 236        "ide_init=" \
 237                "if ${ide_need_init}; then " \
 238                        "setenv ide_need_init false; " \
 239                        "ide reset; " \
 240                "fi\0" \
 241        \
 242        "ide_boot=" \
 243                BOOTENV_RUN_IDE_INIT \
 244                BOOTENV_SHARED_BLKDEV_BODY(ide)
 245#define BOOTENV_DEV_IDE         BOOTENV_DEV_BLKDEV
 246#define BOOTENV_DEV_NAME_IDE    BOOTENV_DEV_NAME_BLKDEV
 247#else
 248#define BOOTENV_RUN_IDE_INIT
 249#define BOOTENV_SET_IDE_NEED_INIT
 250#define BOOTENV_SHARED_IDE
 251#define BOOTENV_DEV_IDE \
 252        BOOT_TARGET_DEVICES_references_IDE_without_CONFIG_IDE
 253#define BOOTENV_DEV_NAME_IDE \
 254        BOOT_TARGET_DEVICES_references_IDE_without_CONFIG_IDE
 255#endif
 256
 257#if defined(CONFIG_DM_PCI)
 258#define BOOTENV_RUN_PCI_ENUM "run boot_pci_enum; "
 259#define BOOTENV_SHARED_PCI \
 260        "boot_pci_enum=pci enum\0"
 261#else
 262#define BOOTENV_RUN_PCI_ENUM
 263#define BOOTENV_SHARED_PCI
 264#endif
 265
 266#ifdef CONFIG_CMD_USB
 267#define BOOTENV_RUN_NET_USB_START "run boot_net_usb_start; "
 268#define BOOTENV_SHARED_USB \
 269        "boot_net_usb_start=usb start\0" \
 270        "usb_boot=" \
 271                "usb start; " \
 272                BOOTENV_SHARED_BLKDEV_BODY(usb)
 273#define BOOTENV_DEV_USB         BOOTENV_DEV_BLKDEV
 274#define BOOTENV_DEV_NAME_USB    BOOTENV_DEV_NAME_BLKDEV
 275#else
 276#define BOOTENV_RUN_NET_USB_START
 277#define BOOTENV_SHARED_USB
 278#define BOOTENV_DEV_USB \
 279        BOOT_TARGET_DEVICES_references_USB_without_CONFIG_CMD_USB
 280#define BOOTENV_DEV_NAME_USB \
 281        BOOT_TARGET_DEVICES_references_USB_without_CONFIG_CMD_USB
 282#endif
 283
 284#ifdef CONFIG_CMD_VIRTIO
 285#define BOOTENV_RUN_VIRTIO_INIT "run virtio_init; "
 286#define BOOTENV_SET_VIRTIO_NEED_INIT "virtio_need_init=; "
 287#define BOOTENV_SHARED_VIRTIO \
 288        "virtio_init=" \
 289                "if ${virtio_need_init}; then " \
 290                        "virtio_need_init=false; " \
 291                        "virtio scan; " \
 292                "fi\0" \
 293        \
 294        "virtio_boot=" \
 295                BOOTENV_RUN_PCI_ENUM \
 296                BOOTENV_RUN_VIRTIO_INIT \
 297                BOOTENV_SHARED_BLKDEV_BODY(virtio)
 298#define BOOTENV_DEV_VIRTIO      BOOTENV_DEV_BLKDEV
 299#define BOOTENV_DEV_NAME_VIRTIO BOOTENV_DEV_NAME_BLKDEV
 300#else
 301#define BOOTENV_RUN_VIRTIO_INIT
 302#define BOOTENV_SET_VIRTIO_NEED_INIT
 303#define BOOTENV_SHARED_VIRTIO
 304#define BOOTENV_DEV_VIRTIO \
 305        BOOT_TARGET_DEVICES_references_VIRTIO_without_CONFIG_CMD_VIRTIO
 306#define BOOTENV_DEV_NAME_VIRTIO \
 307        BOOT_TARGET_DEVICES_references_VIRTIO_without_CONFIG_CMD_VIRTIO
 308#endif
 309
 310#if defined(CONFIG_CMD_DHCP)
 311#if defined(CONFIG_EFI_LOADER)
 312/* http://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml */
 313#if defined(CONFIG_ARM64) || defined(__aarch64__)
 314#define BOOTENV_EFI_PXE_ARCH "0xb"
 315#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:00011:UNDI:003000"
 316#elif defined(CONFIG_ARM) || defined(__arm__)
 317#define BOOTENV_EFI_PXE_ARCH "0xa"
 318#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:00010:UNDI:003000"
 319#elif defined(CONFIG_X86) || defined(__x86_64__)
 320#define BOOTENV_EFI_PXE_ARCH "0x7"
 321#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:00007:UNDI:003000"
 322#elif defined(__i386__)
 323#define BOOTENV_EFI_PXE_ARCH "0x6"
 324#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:00006:UNDI:003000"
 325#elif defined(CONFIG_ARCH_RV32I) || ((defined(__riscv) && __riscv_xlen == 32))
 326#define BOOTENV_EFI_PXE_ARCH "0x19"
 327#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:00025:UNDI:003000"
 328#elif defined(CONFIG_ARCH_RV64I) || ((defined(__riscv) && __riscv_xlen == 64))
 329#define BOOTENV_EFI_PXE_ARCH "0x1b"
 330#define BOOTENV_EFI_PXE_VCI "PXEClient:Arch:00027:UNDI:003000"
 331#elif defined(CONFIG_SANDBOX)
 332# error "sandbox EFI support is only supported on ARM and x86"
 333#else
 334#error Please specify an EFI client identifier
 335#endif
 336
 337/*
 338 * Ask the dhcp server for an EFI binary. If we get one, check for a
 339 * device tree in the same folder. Then boot everything. If the file was
 340 * not an EFI binary, we just return from the bootefi command and continue.
 341 */
 342#define BOOTENV_EFI_RUN_DHCP \
 343        "setenv efi_fdtfile ${fdtfile}; "                                 \
 344        BOOTENV_EFI_SET_FDTFILE_FALLBACK                                  \
 345        "setenv efi_old_vci ${bootp_vci};"                                \
 346        "setenv efi_old_arch ${bootp_arch};"                              \
 347        "setenv bootp_vci " BOOTENV_EFI_PXE_VCI ";"                       \
 348        "setenv bootp_arch " BOOTENV_EFI_PXE_ARCH ";"                     \
 349        "if dhcp ${kernel_addr_r}; then "                                 \
 350                "tftpboot ${fdt_addr_r} dtb/${efi_fdtfile};"              \
 351                "if fdt addr ${fdt_addr_r}; then "                        \
 352                        "bootefi ${kernel_addr_r} ${fdt_addr_r}; "        \
 353                "else "                                                   \
 354                        "bootefi ${kernel_addr_r} ${fdtcontroladdr};"     \
 355                "fi;"                                                     \
 356        "fi;"                                                             \
 357        "setenv bootp_vci ${efi_old_vci};"                                \
 358        "setenv bootp_arch ${efi_old_arch};"                              \
 359        "setenv efi_fdtfile;"                                             \
 360        "setenv efi_old_arch;"                                            \
 361        "setenv efi_old_vci;"
 362#else
 363#define BOOTENV_EFI_RUN_DHCP
 364#endif
 365#define BOOTENV_DEV_DHCP(devtypeu, devtypel, instance) \
 366        "bootcmd_dhcp=" \
 367                BOOTENV_RUN_NET_USB_START \
 368                BOOTENV_RUN_PCI_ENUM \
 369                "if dhcp ${scriptaddr} ${boot_script_dhcp}; then " \
 370                        "source ${scriptaddr}; " \
 371                "fi;" \
 372                BOOTENV_EFI_RUN_DHCP \
 373                "\0"
 374#define BOOTENV_DEV_NAME_DHCP(devtypeu, devtypel, instance) \
 375        "dhcp "
 376#else
 377#define BOOTENV_DEV_DHCP \
 378        BOOT_TARGET_DEVICES_references_DHCP_without_CONFIG_CMD_DHCP
 379#define BOOTENV_DEV_NAME_DHCP \
 380        BOOT_TARGET_DEVICES_references_DHCP_without_CONFIG_CMD_DHCP
 381#endif
 382
 383#if defined(CONFIG_CMD_DHCP) && defined(CONFIG_CMD_PXE)
 384#define BOOTENV_DEV_PXE(devtypeu, devtypel, instance) \
 385        "bootcmd_pxe=" \
 386                BOOTENV_RUN_NET_USB_START \
 387                BOOTENV_RUN_PCI_ENUM \
 388                "dhcp; " \
 389                "if pxe get; then " \
 390                        "pxe boot; " \
 391                "fi\0"
 392#define BOOTENV_DEV_NAME_PXE(devtypeu, devtypel, instance) \
 393        "pxe "
 394#else
 395#define BOOTENV_DEV_PXE \
 396        BOOT_TARGET_DEVICES_references_PXE_without_CONFIG_CMD_DHCP_or_PXE
 397#define BOOTENV_DEV_NAME_PXE \
 398        BOOT_TARGET_DEVICES_references_PXE_without_CONFIG_CMD_DHCP_or_PXE
 399#endif
 400
 401#define BOOTENV_DEV_NAME(devtypeu, devtypel, instance) \
 402        BOOTENV_DEV_NAME_##devtypeu(devtypeu, devtypel, instance)
 403#define BOOTENV_BOOT_TARGETS \
 404        "boot_targets=" BOOT_TARGET_DEVICES(BOOTENV_DEV_NAME) "\0"
 405
 406#define BOOTENV_DEV(devtypeu, devtypel, instance) \
 407        BOOTENV_DEV_##devtypeu(devtypeu, devtypel, instance)
 408#define BOOTENV \
 409        BOOTENV_SHARED_HOST \
 410        BOOTENV_SHARED_MMC \
 411        BOOTENV_SHARED_PCI \
 412        BOOTENV_SHARED_USB \
 413        BOOTENV_SHARED_SATA \
 414        BOOTENV_SHARED_SCSI \
 415        BOOTENV_SHARED_NVME \
 416        BOOTENV_SHARED_IDE \
 417        BOOTENV_SHARED_UBIFS \
 418        BOOTENV_SHARED_EFI \
 419        BOOTENV_SHARED_VIRTIO \
 420        "boot_prefixes=/ /boot/\0" \
 421        "boot_scripts=boot.scr.uimg boot.scr\0" \
 422        "boot_script_dhcp=boot.scr.uimg\0" \
 423        BOOTENV_BOOT_TARGETS \
 424        \
 425        "boot_syslinux_conf=extlinux/extlinux.conf\0" \
 426        "boot_extlinux="                                                  \
 427                "sysboot ${devtype} ${devnum}:${distro_bootpart} any "    \
 428                        "${scriptaddr} ${prefix}${boot_syslinux_conf}\0"  \
 429        \
 430        "scan_dev_for_extlinux="                                          \
 431                "if test -e ${devtype} "                                  \
 432                                "${devnum}:${distro_bootpart} "           \
 433                                "${prefix}${boot_syslinux_conf}; then "   \
 434                        "echo Found ${prefix}${boot_syslinux_conf}; "     \
 435                        "run boot_extlinux; "                             \
 436                        "echo SCRIPT FAILED: continuing...; "             \
 437                "fi\0"                                                    \
 438        \
 439        "boot_a_script="                                                  \
 440                "load ${devtype} ${devnum}:${distro_bootpart} "           \
 441                        "${scriptaddr} ${prefix}${script}; "              \
 442                "source ${scriptaddr}\0"                                  \
 443        \
 444        "scan_dev_for_scripts="                                           \
 445                "for script in ${boot_scripts}; do "                      \
 446                        "if test -e ${devtype} "                          \
 447                                        "${devnum}:${distro_bootpart} "   \
 448                                        "${prefix}${script}; then "       \
 449                                "echo Found U-Boot script "               \
 450                                        "${prefix}${script}; "            \
 451                                "run boot_a_script; "                     \
 452                                "echo SCRIPT FAILED: continuing...; "     \
 453                        "fi; "                                            \
 454                "done\0"                                                  \
 455        \
 456        "scan_dev_for_boot="                                              \
 457                "echo Scanning ${devtype} "                               \
 458                                "${devnum}:${distro_bootpart}...; "       \
 459                "for prefix in ${boot_prefixes}; do "                     \
 460                        "run scan_dev_for_extlinux; "                     \
 461                        "run scan_dev_for_scripts; "                      \
 462                "done;"                                                   \
 463                SCAN_DEV_FOR_EFI                                          \
 464                "\0"                                                      \
 465        \
 466        "scan_dev_for_boot_part="                                         \
 467                "part list ${devtype} ${devnum} -bootable devplist; "     \
 468                "env exists devplist || setenv devplist 1; "              \
 469                "for distro_bootpart in ${devplist}; do "                 \
 470                        "if fstype ${devtype} "                           \
 471                                        "${devnum}:${distro_bootpart} "   \
 472                                        "bootfstype; then "               \
 473                                "run scan_dev_for_boot; "                 \
 474                        "fi; "                                            \
 475                "done; "                                                  \
 476                "setenv devplist\0"                                       \
 477        \
 478        BOOT_TARGET_DEVICES(BOOTENV_DEV)                                  \
 479        \
 480        "distro_bootcmd=" BOOTENV_SET_SCSI_NEED_INIT                      \
 481                BOOTENV_SET_NVME_NEED_INIT                                \
 482                BOOTENV_SET_IDE_NEED_INIT                                 \
 483                BOOTENV_SET_VIRTIO_NEED_INIT                              \
 484                "for target in ${boot_targets}; do "                      \
 485                        "run bootcmd_${target}; "                         \
 486                "done\0"
 487
 488#ifndef CONFIG_BOOTCOMMAND
 489#define CONFIG_BOOTCOMMAND "run distro_bootcmd"
 490#endif
 491
 492#endif  /* _CONFIG_CMD_DISTRO_BOOTCMD_H */
 493