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 (DEPRECATED)"
	depends on PM
	default n
	---help---
	   Support for pm_register() and friends.  This old API is obsoleted
	   by the driver model.

	   If unsure, say N.

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 DISABLE_CONSOLE_SUSPEND
	bool "Keep console(s) enabled during suspend/resume (DANGEROUS)"
	depends on PM && PM_DEBUG
	default n
	---help---
	This option turns off the console suspend mechanism that prevents
	debug messages from reaching the console during the suspend/resume
	operations.  This may be helpful when debugging device drivers'
	suspend/resume routines, but may itself lead to problems, for example
	if netconsole is used.

config PM_TRACE
	bool "Suspend/resume event tracing"
	depends on PM && PM_DEBUG && X86_32 && EXPERIMENTAL
	default n
	---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).

	To use this debugging feature you should attempt to suspend the machine,
	then reboot it, then run

		dmesg -s 1000000 | grep 'hash matches'

	CAUTION: this option will cause your machine's real-time clock to be
	set to an invalid time after a resume.

config PM_SYSFS_DEPRECATED
	bool "Driver model /sys/devices/.../power/state files (DEPRECATED)"
	depends on PM && SYSFS
	default n
	help
	  The driver model started out with a sysfs file intended to provide
	  a userspace hook for device power management.  This feature has never
	  worked very well, except for limited testing purposes, and so it will
	  be removed.   It's not clear that a generic mechanism could really
	  handle the wide variability of device power states; any replacements
	  are likely to be bus or driver specific.

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

	  (For now, swsusp is incompatible with PAE aka HIGHMEM_64G on i386.
	  we need identity mapping for resume to work, and that is trivial
	  to get with 4MB pages, but less than trivial on PAE).

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 SUSPEND_SMP
	bool
	depends on HOTPLUG_CPU && X86 && PM
	default y

config APM_EMULATION
	tristate "Advanced Power Management Emulation"
	depends on PM && SYS_SUPPORTS_APM_EMULATION
	help
	  APM is a BIOS specification for saving power using several different
	  techniques. This is mostly useful for battery powered laptops with
	  APM compliant BIOSes. If you say Y here, the system time will be
	  reset after a RESUME operation, the /proc/apm device will provide
	  battery status information, and user-space programs will receive
	  notification of APM "events" (e.g. battery status change).

	  In order to use APM, you will need supporting software. For location
	  and more information, read <file:Documentation/pm.txt> and the
	  Battery Powered Linux mini-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>.

	  This driver does not spin down disk drives (see the hdparm(8)
	  manpage ("man 8 hdparm") for that), and it doesn't turn off
	  VESA-compliant "green" monitors.

	  Generally, if you don't have a battery in your machine, there isn't
	  much point in using this driver and you should say N. If you get
	  random kernel OOPSes or reboots that don't seem to be related to
	  anything, try disabling/enabling this option (or disabling/enabling
	  APM in your BIOS).
