config PM
	bool "Power Management support"
	depends on !IA64_HP_SIM
	---help---
	  "Power Management" means that parts of your computer are shut
	  off or put into a power conserving "sleep" mode if they are not
	  being used.  There are two competing standards for doing this: APM
	  and ACPI.  If you want to use either one, say Y here and then also
	  to the requisite support below.

	  Power Management is most important for battery powered laptop
	  computers; if you have a laptop, check out the Linux Laptop home
	  page on the WWW at <http://www.linux-on-laptops.com/> or
	  Tuxmobil - Linux on Mobile Computers at <http://www.tuxmobil.org/>
	  and the Battery Powered Linux mini-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

	  Note that, even if you say N here, Linux on the x86 architecture
	  will issue the hlt instruction if nothing is to be done, thereby
	  sending the processor to sleep and saving power.

config PM_LEGACY
	bool "Legacy Power Management API"
	depends on PM
	default y
	---help---
	   Support for pm_register() and friends.

	   If unsure, say Y.

config PM_DEBUG
	bool "Power Management Debug Support"
	depends on PM
	---help---
	This option enables verbose debugging support in the Power Management
	code. This is helpful when debugging and reporting various PM bugs, 
	like suspend support.

config PM_TRACE
	bool "Suspend/resume event tracing"
	depends on PM && PM_DEBUG && X86_32
	default y
	---help---
	This enables some cheesy code to save the last PM event point in the
	RTC across reboots, so that you can debug a machine that just hangs
	during suspend (or more commonly, during resume).

config SOFTWARE_SUSPEND
	bool "Software Suspend"
	depends on PM && SWAP && (X86 && (!SMP || SUSPEND_SMP)) || ((FRV || PPC32) && !SMP)
	---help---
	  Enable the possibility of suspending the machine.
	  It doesn't need ACPI or APM.
	  You may suspend your machine by 'swsusp' or 'shutdown -z <time>' 
	  (patch for sysvinit needed). 

	  It creates an image which is saved in your active swap. Upon next
	  boot, pass the 'resume=/dev/swappartition' argument to the kernel to
	  have it detect the saved image, restore memory state from it, and
	  continue to run as before. If you do not want the previous state to
	  be reloaded, then use the 'noresume' kernel argument. However, note
	  that your partitions will be fsck'd and you must re-mkswap your swap
	  partitions. It does not work with swap files.

	  Right now you may boot without resuming and then later resume but
	  in meantime you cannot use those swap partitions/files which were
	  involved in suspending. Also in this case there is a risk that buffers
	  on disk won't match with saved ones.

	  For more information take a look at <file:Documentation/power/swsusp.txt>.

config PM_STD_PARTITION
	string "Default resume partition"
	depends on SOFTWARE_SUSPEND
	default ""
	---help---
	  The default resume partition is the partition that the suspend-
	  to-disk implementation will look for a suspended disk image. 

	  The partition specified here will be different for almost every user. 
	  It should be a valid swap partition (at least for now) that is turned
	  on before suspending. 

	  The partition specified can be overridden by specifying:

		resume=/dev/<other device> 

	  which will set the resume partition to the device specified. 

	  Note there is currently not a way to specify which device to save the
	  suspended image to. It will simply pick the first available swap 
	  device.

config SWSUSP_ENCRYPT
	bool "Encrypt suspend image"
	depends on SOFTWARE_SUSPEND && CRYPTO=y && (CRYPTO_AES=y || CRYPTO_AES_586=y || CRYPTO_AES_X86_64=y)
	default ""
	---help---
	  To prevent data gathering from swap after resume you can encrypt
	  the suspend image with a temporary key that is deleted on
	  resume.

	  Note that the temporary key is stored unencrypted on disk while the
	  system is suspended.

config SUSPEND_SMP
	bool
	depends on HOTPLUG_CPU && X86 && PM
	default y
