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