#
# Partition configuration
#
config PARTITION_ADVANCED
	bool "Advanced partition selection"
	help
	  Say Y here if you would like to use hard disks under Linux which
	  were partitioned under an operating system running on a different
	  architecture than your Linux system.

	  Note that the answer to this question won't directly affect the
	  kernel: saying N will just cause the configurator to skip all
	  the questions about foreign partitioning schemes.

	  If unsure, say N.

config ACORN_PARTITION
	bool "Acorn partition support" if PARTITION_ADVANCED
	default y if ARCH_ACORN
	help
	  Support hard disks partitioned under Acorn operating systems.

config ACORN_PARTITION_CUMANA
	bool "Cumana partition support" if PARTITION_ADVANCED
	default y if ARCH_ACORN
	depends on ACORN_PARTITION
	help
	  Say Y here if you would like to use hard disks under Linux which
	  were partitioned using the Cumana interface on Acorn machines.

config ACORN_PARTITION_EESOX
	bool "EESOX partition support" if PARTITION_ADVANCED
	default y if ARCH_ACORN
	depends on ACORN_PARTITION

config ACORN_PARTITION_ICS
	bool "ICS partition support" if PARTITION_ADVANCED
	default y if ARCH_ACORN
	depends on ACORN_PARTITION
	help
	  Say Y here if you would like to use hard disks under Linux which
	  were partitioned using the ICS interface on Acorn machines.

config ACORN_PARTITION_ADFS
	bool "Native filecore partition support" if PARTITION_ADVANCED
	default y if ARCH_ACORN
	depends on ACORN_PARTITION
	help
	  The Acorn Disc Filing System is the standard file system of the
	  RiscOS operating system which runs on Acorn's ARM-based Risc PC
	  systems and the Acorn Archimedes range of machines.  If you say
	  `Y' here, Linux will support disk partitions created under ADFS.

config ACORN_PARTITION_POWERTEC
	bool "PowerTec partition support" if PARTITION_ADVANCED
	default y if ARCH_ACORN
	depends on ACORN_PARTITION
	help
	  Support reading partition tables created on Acorn machines using
	  the PowerTec SCSI drive.

config ACORN_PARTITION_RISCIX
	bool "RISCiX partition support" if PARTITION_ADVANCED
	default y if ARCH_ACORN
	depends on ACORN_PARTITION
	help
	  Once upon a time, there was a native Unix port for the Acorn series
	  of machines called RISCiX.  If you say 'Y' here, Linux will be able
	  to read disks partitioned under RISCiX.

config OSF_PARTITION
	bool "Alpha OSF partition support" if PARTITION_ADVANCED
	default y if ALPHA
	help
	  Say Y here if you would like to use hard disks under Linux which
	  were partitioned on an Alpha machine.

config AMIGA_PARTITION
	bool "Amiga partition table support" if PARTITION_ADVANCED
	default y if (AMIGA || AFFS_FS=y)
	help
	  Say Y here if you would like to use hard disks under Linux which
	  were partitioned under AmigaOS.

config ATARI_PARTITION
	bool "Atari partition table support" if PARTITION_ADVANCED
	default y if ATARI
	help
	  Say Y here if you would like to use hard disks under Linux which
	  were partitioned under the Atari OS.

config IBM_PARTITION
	bool "IBM disk label and partition support"
	depends on PARTITION_ADVANCED && S390
	help
	  Say Y here if you would like to be able to read the hard disk
	  partition table format used by IBM DASD disks operating under CMS.
	  Otherwise, say N.

config MAC_PARTITION
	bool "Macintosh partition map support" if PARTITION_ADVANCED
	default y if (MAC || PPC_PMAC)
	help
	  Say Y here if you would like to use hard disks under Linux which
	  were partitioned on a Macintosh.

config MSDOS_PARTITION
	bool "PC BIOS (MSDOS partition tables) support" if PARTITION_ADVANCED
	default y
	help
	  Say Y here.

config BSD_DISKLABEL
	bool "BSD disklabel (FreeBSD partition tables) support"
	depends on PARTITION_ADVANCED && MSDOS_PARTITION
	help
	  FreeBSD uses its own hard disk partition scheme on your PC. It
	  requires only one entry in the primary partition table of your disk
	  and manages it similarly to DOS extended partitions, putting in its
	  first sector a new partition table in BSD disklabel format. Saying Y
	  here allows you to read these disklabels and further mount FreeBSD
	  partitions from within Linux if you have also said Y to "UFS
	  file system support", above. If you don't know what all this is
	  about, say N.

config MINIX_SUBPARTITION
	bool "Minix subpartition support"
	depends on PARTITION_ADVANCED && MSDOS_PARTITION
	help
	  Minix 2.0.0/2.0.2 subpartition table support for Linux.
	  Say Y here if you want to mount and use Minix 2.0.0/2.0.2
	  subpartitions.

config SOLARIS_X86_PARTITION
	bool "Solaris (x86) partition table support"
	depends on PARTITION_ADVANCED && MSDOS_PARTITION
	help
	  Like most systems, Solaris x86 uses its own hard disk partition
	  table format, incompatible with all others. Saying Y here allows you
	  to read these partition tables and further mount Solaris x86
	  partitions from within Linux if you have also said Y to "UFS
	  file system support", above.

config UNIXWARE_DISKLABEL
	bool "Unixware slices support"
	depends on PARTITION_ADVANCED && MSDOS_PARTITION
	---help---
	  Like some systems, UnixWare uses its own slice table inside a
	  partition (VTOC - Virtual Table of Contents). Its format is
	  incompatible with all other OSes. Saying Y here allows you to read
	  VTOC and further mount UnixWare partitions read-only from within
	  Linux if you have also said Y to "UFS file system support" or
	  "System V and Coherent file system support", above.

	  This is mainly used to carry data from a UnixWare box to your
	  Linux box via a removable medium like magneto-optical, ZIP or
	  removable IDE drives. Note, however, that a good portable way to
	  transport files and directories between unixes (and even other
	  operating systems) is given by the tar program ("man tar" or
	  preferably "info tar").

	  If you don't know what all this is about, say N.

config LDM_PARTITION
	bool "Windows Logical Disk Manager (Dynamic Disk) support"
	depends on PARTITION_ADVANCED
	---help---
	  Say Y here if you would like to use hard disks under Linux which
	  were partitioned using Windows 2000's or XP's Logical Disk Manager.
	  They are also known as "Dynamic Disks".

	  Windows 2000 introduced the concept of Dynamic Disks to get around
	  the limitations of the PC's partitioning scheme.  The Logical Disk
	  Manager allows the user to repartition a disk and create spanned,
	  mirrored, striped or RAID volumes, all without the need for
	  rebooting.

	  Normal partitions are now called Basic Disks under Windows 2000 and
	  XP.

	  For a fuller description read <file:Documentation/ldm.txt>.

	  If unsure, say N.

config LDM_DEBUG
	bool "Windows LDM extra logging"
	depends on LDM_PARTITION
	help
	  Say Y here if you would like LDM to log verbosely.  This could be
	  helpful if the driver doesn't work as expected and you'd like to
	  report a bug.

	  If unsure, say N.

config SGI_PARTITION
	bool "SGI partition support" if PARTITION_ADVANCED
	default y if (SGI_IP22 || SGI_IP27 || ((MACH_JAZZ || SNI_RM) && !CPU_LITTLE_ENDIAN))
	help
	  Say Y here if you would like to be able to read the hard disk
	  partition table format used by SGI machines.

config ULTRIX_PARTITION
	bool "Ultrix partition table support" if PARTITION_ADVANCED
	default y if MACH_DECSTATION
	help
	  Say Y here if you would like to be able to read the hard disk
	  partition table format used by DEC (now Compaq) Ultrix machines.
	  Otherwise, say N.

config SUN_PARTITION
	bool "Sun partition tables support" if PARTITION_ADVANCED
	default y if (SPARC || SUN3 || SUN3X)
	---help---
	  Like most systems, SunOS uses its own hard disk partition table
	  format, incompatible with all others. Saying Y here allows you to
	  read these partition tables and further mount SunOS partitions from
	  within Linux if you have also said Y to "UFS file system support",
	  above. This is mainly used to carry data from a SPARC under SunOS to
	  your Linux box via a removable medium like magneto-optical or ZIP
	  drives; note however that a good portable way to transport files and
	  directories between unixes (and even other operating systems) is
	  given by the tar program ("man tar" or preferably "info tar"). If
	  you don't know what all this is about, say N.

config KARMA_PARTITION
	bool "Karma Partition support"
	depends on PARTITION_ADVANCED
	help
	  Say Y here if you would like to mount the Rio Karma MP3 player, as it
	  uses a proprietary partition table.

config EFI_PARTITION
	bool "EFI GUID Partition support"
	depends on PARTITION_ADVANCED
	select CRC32
	help
	  Say Y here if you would like to use hard disks under Linux which
	  were partitioned using EFI GPT.  Presently only useful on the
	  IA-64 platform.
