1*2a43201aSDennis Gilmore /* 2*2a43201aSDennis Gilmore * (C) Copyright 2014 3*2a43201aSDennis Gilmore * NVIDIA Corporation <www.nvidia.com> 4*2a43201aSDennis Gilmore * 5*2a43201aSDennis Gilmore * Copyright 2014 Red Hat, Inc. 6*2a43201aSDennis Gilmore * 7*2a43201aSDennis Gilmore * SPDX-License-Identifier: GPL-2.0+ 8*2a43201aSDennis Gilmore */ 9*2a43201aSDennis Gilmore 10*2a43201aSDennis Gilmore #ifndef _CONFIG_CMD_DISTRO_BOOTCMD_H 11*2a43201aSDennis Gilmore #define _CONFIG_CMD_DISTRO_BOOTCMD_H 12*2a43201aSDennis Gilmore 13*2a43201aSDennis Gilmore #define BOOTENV_SHARED_BLKDEV_BODY(devtypel) \ 14*2a43201aSDennis Gilmore "if " #devtypel " dev ${devnum}; then " \ 15*2a43201aSDennis Gilmore "setenv devtype " #devtypel "; " \ 16*2a43201aSDennis Gilmore "run scan_dev_for_boot; " \ 17*2a43201aSDennis Gilmore "fi\0" 18*2a43201aSDennis Gilmore 19*2a43201aSDennis Gilmore #define BOOTENV_SHARED_BLKDEV(devtypel) \ 20*2a43201aSDennis Gilmore #devtypel "_boot=" \ 21*2a43201aSDennis Gilmore BOOTENV_SHARED_BLKDEV_BODY(devtypel) 22*2a43201aSDennis Gilmore 23*2a43201aSDennis Gilmore #define BOOTENV_DEV_BLKDEV(devtypeu, devtypel, instance) \ 24*2a43201aSDennis Gilmore "bootcmd_" #devtypel #instance "=" \ 25*2a43201aSDennis Gilmore "setenv devnum " #instance "; " \ 26*2a43201aSDennis Gilmore "run " #devtypel "_boot\0" 27*2a43201aSDennis Gilmore 28*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME_BLKDEV(devtypeu, devtypel, instance) \ 29*2a43201aSDennis Gilmore #devtypel #instance " " 30*2a43201aSDennis Gilmore 31*2a43201aSDennis Gilmore #ifdef CONFIG_CMD_MMC 32*2a43201aSDennis Gilmore #define BOOTENV_SHARED_MMC BOOTENV_SHARED_BLKDEV(mmc) 33*2a43201aSDennis Gilmore #define BOOTENV_DEV_MMC BOOTENV_DEV_BLKDEV 34*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME_MMC BOOTENV_DEV_NAME_BLKDEV 35*2a43201aSDennis Gilmore #else 36*2a43201aSDennis Gilmore #define BOOTENV_SHARED_MMC 37*2a43201aSDennis Gilmore #define BOOTENV_DEV_MMC \ 38*2a43201aSDennis Gilmore BOOT_TARGET_DEVICES_references_MMC_without_CONFIG_CMD_MMC 39*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME_MMC \ 40*2a43201aSDennis Gilmore BOOT_TARGET_DEVICES_references_MMC_without_CONFIG_CMD_MMC 41*2a43201aSDennis Gilmore #endif 42*2a43201aSDennis Gilmore 43*2a43201aSDennis Gilmore #ifdef CONFIG_CMD_SATA 44*2a43201aSDennis Gilmore #define BOOTENV_SHARED_SATA BOOTENV_SHARED_BLKDEV(sata) 45*2a43201aSDennis Gilmore #define BOOTENV_DEV_SATA BOOTENV_DEV_BLKDEV 46*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME_SATA BOOTENV_DEV_NAME_BLKDEV 47*2a43201aSDennis Gilmore #else 48*2a43201aSDennis Gilmore #define BOOTENV_SHARED_SATA 49*2a43201aSDennis Gilmore #define BOOTENV_DEV_SATA \ 50*2a43201aSDennis Gilmore BOOT_TARGET_DEVICES_references_SATA_without_CONFIG_CMD_SATA 51*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME_SATA \ 52*2a43201aSDennis Gilmore BOOT_TARGET_DEVICES_references_SATA_without_CONFIG_CMD_SATA 53*2a43201aSDennis Gilmore #endif 54*2a43201aSDennis Gilmore 55*2a43201aSDennis Gilmore #ifdef CONFIG_CMD_SCSI 56*2a43201aSDennis Gilmore #define BOOTENV_SHARED_SCSI BOOTENV_SHARED_BLKDEV(scsi) 57*2a43201aSDennis Gilmore #define BOOTENV_DEV_SCSI BOOTENV_DEV_BLKDEV 58*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME_SCSI BOOTENV_DEV_NAME_BLKDEV 59*2a43201aSDennis Gilmore #else 60*2a43201aSDennis Gilmore #define BOOTENV_SHARED_SCSI 61*2a43201aSDennis Gilmore #define BOOTENV_DEV_SCSI \ 62*2a43201aSDennis Gilmore BOOT_TARGET_DEVICES_references_SCSI_without_CONFIG_CMD_SCSI 63*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME_SCSI \ 64*2a43201aSDennis Gilmore BOOT_TARGET_DEVICES_references_SCSI_without_CONFIG_CMD_SCSI 65*2a43201aSDennis Gilmore #endif 66*2a43201aSDennis Gilmore 67*2a43201aSDennis Gilmore #ifdef CONFIG_CMD_IDE 68*2a43201aSDennis Gilmore #define BOOTENV_SHARED_IDE BOOTENV_SHARED_BLKDEV(ide) 69*2a43201aSDennis Gilmore #define BOOTENV_DEV_IDE BOOTENV_DEV_BLKDEV 70*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME_IDE BOOTENV_DEV_NAME_BLKDEV 71*2a43201aSDennis Gilmore #else 72*2a43201aSDennis Gilmore #define BOOTENV_SHARED_IDE 73*2a43201aSDennis Gilmore #define BOOTENV_DEV_IDE \ 74*2a43201aSDennis Gilmore BOOT_TARGET_DEVICES_references_IDE_without_CONFIG_CMD_IDE 75*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME_IDE \ 76*2a43201aSDennis Gilmore BOOT_TARGET_DEVICES_references_IDE_without_CONFIG_CMD_IDE 77*2a43201aSDennis Gilmore #endif 78*2a43201aSDennis Gilmore 79*2a43201aSDennis Gilmore #ifdef CONFIG_CMD_USB 80*2a43201aSDennis Gilmore #define BOOTENV_RUN_USB_INIT "run usb_init; " 81*2a43201aSDennis Gilmore #define BOOTENV_SET_USB_NEED_INIT "setenv usb_need_init; " 82*2a43201aSDennis Gilmore #define BOOTENV_SHARED_USB \ 83*2a43201aSDennis Gilmore "usb_init=" \ 84*2a43201aSDennis Gilmore "if ${usb_need_init}; then " \ 85*2a43201aSDennis Gilmore "setenv usb_need_init false; " \ 86*2a43201aSDennis Gilmore "usb start 0; " \ 87*2a43201aSDennis Gilmore "fi\0" \ 88*2a43201aSDennis Gilmore \ 89*2a43201aSDennis Gilmore "usb_boot=" \ 90*2a43201aSDennis Gilmore BOOTENV_RUN_USB_INIT \ 91*2a43201aSDennis Gilmore BOOTENV_SHARED_BLKDEV_BODY(usb) 92*2a43201aSDennis Gilmore #define BOOTENV_DEV_USB BOOTENV_DEV_BLKDEV 93*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME_USB BOOTENV_DEV_NAME_BLKDEV 94*2a43201aSDennis Gilmore #else 95*2a43201aSDennis Gilmore #define BOOTENV_RUN_USB_INIT 96*2a43201aSDennis Gilmore #define BOOTENV_SET_USB_NEED_INIT 97*2a43201aSDennis Gilmore #define BOOTENV_SHARED_USB 98*2a43201aSDennis Gilmore #define BOOTENV_DEV_USB \ 99*2a43201aSDennis Gilmore BOOT_TARGET_DEVICES_references_USB_without_CONFIG_CMD_USB 100*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME_USB \ 101*2a43201aSDennis Gilmore BOOT_TARGET_DEVICES_references_USB_without_CONFIG_CMD_USB 102*2a43201aSDennis Gilmore #endif 103*2a43201aSDennis Gilmore 104*2a43201aSDennis Gilmore #if defined(CONFIG_CMD_DHCP) 105*2a43201aSDennis Gilmore #define BOOTENV_DEV_DHCP(devtypeu, devtypel, instance) \ 106*2a43201aSDennis Gilmore "bootcmd_dhcp=" \ 107*2a43201aSDennis Gilmore BOOTENV_RUN_USB_INIT \ 108*2a43201aSDennis Gilmore "if dhcp ${scriptaddr} boot.scr.uimg; then " \ 109*2a43201aSDennis Gilmore "source ${scriptaddr}; " \ 110*2a43201aSDennis Gilmore "fi\0" 111*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME_DHCP(devtypeu, devtypel, instance) \ 112*2a43201aSDennis Gilmore "dhcp " 113*2a43201aSDennis Gilmore #else 114*2a43201aSDennis Gilmore #define BOOTENV_DEV_DHCP \ 115*2a43201aSDennis Gilmore BOOT_TARGET_DEVICES_references_DHCP_without_CONFIG_CMD_DHCP 116*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME_DHCP \ 117*2a43201aSDennis Gilmore BOOT_TARGET_DEVICES_references_DHCP_without_CONFIG_CMD_DHCP 118*2a43201aSDennis Gilmore #endif 119*2a43201aSDennis Gilmore 120*2a43201aSDennis Gilmore #if defined(CONFIG_CMD_DHCP) && defined(CONFIG_CMD_PXE) 121*2a43201aSDennis Gilmore #define BOOTENV_DEV_PXE(devtypeu, devtypel, instance) \ 122*2a43201aSDennis Gilmore "bootcmd_pxe=" \ 123*2a43201aSDennis Gilmore BOOTENV_RUN_USB_INIT \ 124*2a43201aSDennis Gilmore "dhcp; " \ 125*2a43201aSDennis Gilmore "if pxe get; then " \ 126*2a43201aSDennis Gilmore "pxe boot; " \ 127*2a43201aSDennis Gilmore "fi\0" 128*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME_PXE(devtypeu, devtypel, instance) \ 129*2a43201aSDennis Gilmore "pxe " 130*2a43201aSDennis Gilmore #else 131*2a43201aSDennis Gilmore #define BOOTENV_DEV_PXE \ 132*2a43201aSDennis Gilmore BOOT_TARGET_DEVICES_references_PXE_without_CONFIG_CMD_DHCP_or_PXE 133*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME_PXE \ 134*2a43201aSDennis Gilmore BOOT_TARGET_DEVICES_references_PXE_without_CONFIG_CMD_DHCP_or_PXE 135*2a43201aSDennis Gilmore #endif 136*2a43201aSDennis Gilmore 137*2a43201aSDennis Gilmore #define BOOTENV_DEV_NAME(devtypeu, devtypel, instance) \ 138*2a43201aSDennis Gilmore BOOTENV_DEV_NAME_##devtypeu(devtypeu, devtypel, instance) 139*2a43201aSDennis Gilmore #define BOOTENV_BOOT_TARGETS \ 140*2a43201aSDennis Gilmore "boot_targets=" BOOT_TARGET_DEVICES(BOOTENV_DEV_NAME) "\0" 141*2a43201aSDennis Gilmore 142*2a43201aSDennis Gilmore #define BOOTENV_DEV(devtypeu, devtypel, instance) \ 143*2a43201aSDennis Gilmore BOOTENV_DEV_##devtypeu(devtypeu, devtypel, instance) 144*2a43201aSDennis Gilmore #define BOOTENV \ 145*2a43201aSDennis Gilmore BOOTENV_SHARED_MMC \ 146*2a43201aSDennis Gilmore BOOTENV_SHARED_USB \ 147*2a43201aSDennis Gilmore BOOTENV_SHARED_SATA \ 148*2a43201aSDennis Gilmore BOOTENV_SHARED_SCSI \ 149*2a43201aSDennis Gilmore BOOTENV_SHARED_IDE \ 150*2a43201aSDennis Gilmore "boot_prefixes=/ /boot/\0" \ 151*2a43201aSDennis Gilmore "boot_scripts=boot.scr.uimg boot.scr\0" \ 152*2a43201aSDennis Gilmore BOOTENV_BOOT_TARGETS \ 153*2a43201aSDennis Gilmore "bootpart=1\0" \ 154*2a43201aSDennis Gilmore \ 155*2a43201aSDennis Gilmore "boot_extlinux=" \ 156*2a43201aSDennis Gilmore "sysboot ${devtype} ${devnum}:${bootpart} any " \ 157*2a43201aSDennis Gilmore "${scriptaddr} ${prefix}extlinux/extlinux.conf\0" \ 158*2a43201aSDennis Gilmore \ 159*2a43201aSDennis Gilmore "scan_dev_for_extlinux=" \ 160*2a43201aSDennis Gilmore "if test -e ${devtype} ${devnum}:${bootpart} " \ 161*2a43201aSDennis Gilmore "${prefix}extlinux/extlinux.conf; then " \ 162*2a43201aSDennis Gilmore "echo Found ${prefix}extlinux/extlinux.conf; " \ 163*2a43201aSDennis Gilmore "run boot_extlinux; " \ 164*2a43201aSDennis Gilmore "echo SCRIPT FAILED: continuing...; " \ 165*2a43201aSDennis Gilmore "fi\0" \ 166*2a43201aSDennis Gilmore \ 167*2a43201aSDennis Gilmore "boot_a_script=" \ 168*2a43201aSDennis Gilmore "load ${devtype} ${devnum}:${bootpart} " \ 169*2a43201aSDennis Gilmore "${scriptaddr} ${prefix}${script}; " \ 170*2a43201aSDennis Gilmore "source ${scriptaddr}\0" \ 171*2a43201aSDennis Gilmore \ 172*2a43201aSDennis Gilmore "scan_dev_for_scripts=" \ 173*2a43201aSDennis Gilmore "for script in ${boot_scripts}; do " \ 174*2a43201aSDennis Gilmore "if test -e ${devtype} ${devnum}:${bootpart} " \ 175*2a43201aSDennis Gilmore "${prefix}${script}; then " \ 176*2a43201aSDennis Gilmore "echo Found U-Boot script " \ 177*2a43201aSDennis Gilmore "${prefix}${script}; " \ 178*2a43201aSDennis Gilmore "run boot_a_script; " \ 179*2a43201aSDennis Gilmore "echo SCRIPT FAILED: continuing...; " \ 180*2a43201aSDennis Gilmore "fi; " \ 181*2a43201aSDennis Gilmore "done\0" \ 182*2a43201aSDennis Gilmore \ 183*2a43201aSDennis Gilmore "scan_dev_for_boot=" \ 184*2a43201aSDennis Gilmore "echo Scanning ${devtype} ${devnum}...; " \ 185*2a43201aSDennis Gilmore "for prefix in ${boot_prefixes}; do " \ 186*2a43201aSDennis Gilmore "run scan_dev_for_extlinux; " \ 187*2a43201aSDennis Gilmore "run scan_dev_for_scripts; " \ 188*2a43201aSDennis Gilmore "done\0" \ 189*2a43201aSDennis Gilmore \ 190*2a43201aSDennis Gilmore BOOT_TARGET_DEVICES(BOOTENV_DEV) \ 191*2a43201aSDennis Gilmore \ 192*2a43201aSDennis Gilmore "bootcmd=" BOOTENV_SET_USB_NEED_INIT \ 193*2a43201aSDennis Gilmore "for target in ${boot_targets}; do " \ 194*2a43201aSDennis Gilmore "run bootcmd_${target}; " \ 195*2a43201aSDennis Gilmore "done\0" 196*2a43201aSDennis Gilmore 197*2a43201aSDennis Gilmore #endif /* _CONFIG_CMD_DISTRO_BOOTCMD_H */ 198