config PPC_PS3
	bool "Sony PS3"
	depends on PPC_MULTIPLATFORM && PPC64
	select PPC_CELL
	select USB_ARCH_HAS_OHCI
	select USB_OHCI_LITTLE_ENDIAN
	select USB_OHCI_BIG_ENDIAN_MMIO
	select USB_ARCH_HAS_EHCI
	select USB_EHCI_BIG_ENDIAN_MMIO
	select MEMORY_HOTPLUG
	select PPC_PCI_CHOICE
	help
	  This option enables support for the Sony PS3 game console
	  and other platforms using the PS3 hypervisor.  Enabling this
	  option will allow building otheros.bld, a kernel image suitable
	  for programming into flash memory, and vmlinux, a kernel image
	  suitable for loading via kexec.

menu "PS3 Platform Options"
	depends on PPC_PS3

config PS3_ADVANCED
	depends on PPC_PS3
	bool "PS3 Advanced configuration options"
	help
	  This gives you access to some advanced options for the PS3. The
	  defaults should be fine for most users, but these options may make
	  it possible to better control the kernel configuration if you know
	  what you are doing.

	  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 these options.

	  Most users should say N to this question.

config PS3_HTAB_SIZE
	depends on PPC_PS3
	int "PS3 Platform pagetable size" if PS3_ADVANCED
	range 18 20
	default 20
	help
	  This option is only for experts who may have the desire to fine
	  tune the pagetable size on their system.  The value here is
	  expressed as the log2 of the page table size.  Valid values are
	  18, 19, and 20, corresponding to 256KB, 512KB and 1MB respectively.

	  If unsure, choose the default (20) with the confidence that your
	  system will have optimal runtime performance.

config PS3_DYNAMIC_DMA
	depends on PPC_PS3 && EXPERIMENTAL
	bool "PS3 Platform dynamic DMA page table management"
	default n
	help
	  This option will enable kernel support to take advantage of the
	  per device dynamic DMA page table management provided by the Cell
	  processor's IO Controller.  This support incurs some runtime
	  overhead and also slightly increases kernel memory usage.  The
	  current implementation should be considered experimental.

	  This support is mainly for Linux kernel development.  If unsure,
	  say N.

config PS3_VUART
	depends on PPC_PS3
	tristate

config PS3_PS3AV
	depends on PPC_PS3
	tristate "PS3 AV settings driver" if PS3_ADVANCED
	select PS3_VUART
	default y
	help
	  Include support for the PS3 AV Settings driver.

	  This support is required for graphics and sound. In
	  general, all users will say Y or M.

config PS3_SYS_MANAGER
	depends on PPC_PS3
	tristate "PS3 System Manager driver" if PS3_ADVANCED
	select PS3_VUART
	default y
	help
	  Include support for the PS3 System Manager.

	  This support is required for system control.  In
	  general, all users will say Y or M.

config PS3_STORAGE
	depends on PPC_PS3
	tristate

config PS3_DISK
	tristate "PS3 Disk Storage Driver"
	depends on PPC_PS3 && BLOCK
	select PS3_STORAGE
	help
	  Include support for the PS3 Disk Storage.

	  This support is required to access the PS3 hard disk.
	  In general, all users will say Y or M.

config PS3_ROM
	tristate "PS3 BD/DVD/CD-ROM Storage Driver"
	depends on PPC_PS3 && SCSI
	select PS3_STORAGE
	help
	  Include support for the PS3 ROM Storage.

	  This support is required to access the PS3 BD/DVD/CD-ROM drive.
	  In general, all users will say Y or M.
	  Also make sure to say Y or M to "SCSI CDROM support" later.

config PS3_FLASH
	tristate "PS3 FLASH ROM Storage Driver"
	depends on PPC_PS3
	select PS3_STORAGE
	help
	  Include support for the PS3 FLASH ROM Storage.

	  This support is required to access the PS3 FLASH ROM, which
	  contains the boot loader and some boot options.
	  In general, all users will say Y or M.

	  As this driver needs a fixed buffer of 256 KiB of memory, it can
	  be disabled on the kernel command line using "ps3flash=off", to
	  not allocate this fixed buffer.

config PS3_LPM
	tristate "PS3 Logical Performance Monitor support"
	depends on PPC_PS3
	help
	  Include support for the PS3 Logical Performance Monitor.

	  This support is required to use the logical performance monitor
	  of the PS3's LV1 hypervisor.

	  If you intend to use the advanced performance monitoring and
	  profiling support of the Cell processor with programs like
	  oprofile and perfmon2, then say Y or M, otherwise say N.

endmenu
