
menu "Partition Types"

config PARTITIONS
	bool
	help
	  Partition Labels (disklabels) Supported:
	  Zero or more of the following:
	  - CONFIG_MAC_PARTITION   Apple's MacOS partition table.
	  - CONFIG_DOS_PARTITION   MS Dos partition table, traditional on the
	                           Intel architecture, USB sticks, etc.
	  - CONFIG_ISO_PARTITION   ISO partition table, used on CDROM etc.
	  - CONFIG_EFI_PARTITION   GPT partition table, common when EFI is the
	                           bootloader.  Note 2TB partition limit; see
	                           disk/part_efi.c
	  - CONFIG_MTD_PARTITIONS  Memory Technology Device partition table.
	  If IDE or SCSI support is enabled (CONFIG_CMD_IDE or CONFIG_SCSI)
	  you must configure support for at least one non-MTD partition type
	  as well.

config SPL_PARTITIONS
	bool
	select SPL_SPRINTF
	select SPL_STRTO
	help
	  Enable this for base partition support in SPL. The required
	  partition table types shold be enabled separately. This add a
	  small amount of size to SPL, typically 500 bytes.

config TPL_PARTITIONS
	bool
	select TPL_SPRINTF
	select TPL_STRTO
	help
	  Enable this for base partition support in SPL. The required
	  partition table types shold be enabled separately. This add a
	  small amount of size to SPL, typically 500 bytes.

config MAC_PARTITION
	bool "Enable Apple's MacOS partition table"
	select PARTITIONS
	help
	  Say Y here if you would like to use device under U-Boot which
	  were partitioned on a Macintosh.

config SPL_MAC_PARTITION
	bool "Enable Apple's MacOS partition table for SPL"
	depends on SPL
	default y if MAC_PARTITION
	select SPL_PARTITIONS

config DOS_PARTITION
	bool "Enable MS Dos partition table"
	default y if DISTRO_DEFAULTS
	default y if x86 || CMD_FAT || USB_STORAGE
	select PARTITIONS
	help
	  traditional on the Intel architecture, USB sticks, etc.

config SPL_DOS_PARTITION
	bool "Enable MS Dos partition table for SPL"
	depends on SPL
	default n if ARCH_SUNXI
	default y if DOS_PARTITION
	select SPL_PARTITIONS

config ISO_PARTITION
	bool "Enable ISO partition table"
	default y if DISTRO_DEFAULTS
	default y if MIPS || ARCH_TEGRA
	select PARTITIONS

config SPL_ISO_PARTITION
	bool "Enable ISO partition table for SPL"
	depends on SPL
	select SPL_PARTITIONS

config AMIGA_PARTITION
	bool "Enable AMIGA partition table"
	select PARTITIONS
	help
	  Say Y here if you would like to use device under U-Boot which
	  were partitioned under AmigaOS.

config SPL_AMIGA_PARTITION
	bool "Enable AMIGA partition table for SPL"
	depends on SPL
	default y if AMIGA_PARTITION
	select SPL_PARTITIONS

config EFI_PARTITION
	bool "Enable EFI GPT partition table"
	default y if DISTRO_DEFAULTS
	default y if ARCH_TEGRA
	select PARTITIONS
	select LIB_UUID
	help
	  Say Y here if you would like to use device under U-Boot which
	  were partitioned using EFI GPT.
	  common when EFI is the bootloader.  Note 2TB partition limit;
	  see disk/part_efi.c

config EFI_PARTITION_ENTRIES_NUMBERS
	int "Number of the EFI partition entries"
	depends on EFI_PARTITION
	default 56 if ARCH_SUNXI
	default 128
	help
	  Specify the number of partition entries in the GPT. This is
	  meant to allow less than the standard specifies for devices
	  that might need to place their first-stage bootloader in the
	  middle of a regular GPT.

	  If unsure, leave at 128 entries, which is the standard
	  number.

config EFI_PARTITION_ENTRIES_OFF
        int "Offset (in bytes) of the EFI partition entries"
	depends on EFI_PARTITION
	default 0
	help
	  Specify an earliest location (in bytes) where the partition
	  entries may be located. This is meant to allow "punching a
	  hole into a device" to create a gap for an SPL, its payload
	  and the U-Boot environment.

	  If unsure, leave at 0 (which will locate the partition
	  entries at the first possible LBA following the GPT header).

config SPL_EFI_PARTITION
	bool "Enable EFI GPT partition table for SPL"
	depends on  SPL
	default n if ARCH_SUNXI
	default y if EFI_PARTITION
	select SPL_PARTITIONS

config PARTITION_UUIDS
	bool "Enable support of UUID for partition"
	depends on PARTITIONS
	default y if DISTRO_DEFAULTS
	default y if EFI_PARTITION
	select LIB_UUID
	help
	  Activate the configuration of UUID for partition

config SPL_PARTITION_UUIDS
	bool "Enable support of UUID for partition in SPL"
	depends on SPL_PARTITIONS
	default y if SPL_EFI_PARTITION

config PARTITION_TYPE_GUID
	bool "Enable support of GUID for partition type"
	depends on EFI_PARTITION
	help
	  Activate the configuration of GUID type
	  for EFI partition

endmenu
