#
# backport Kconfig
#
# Some options are user-selectable ("BACKPORT_USERSEL_*")
#
# Most options, however, follow a few different schemes:
#
# A) An option that is selected by drivers ("select FOO") will be
#    changed to "select BACKPORT_FOO" (if the option BACKPORT_FOO
#    exists). The option BACKPORT_FOO then controls setting of the
#    BACKPORT_BUILD_FOO option, which is a module, like this:
#
# config BACKPORT_BUILD_FOO
#	tristate
#	# or bool
#
#	# not possible on kernel < X.Y, build will fail if any
#	# drivers are allowed to build on kernels < X.Y
#	depends on BACKPORT_KERNEL_X_Y
#
#	# don't build the backport code if FOO is in the kernel
#	# already, but only if the kernel version is also >= X.Z;
#	# this is an example of backporting where the version of
#	# the FOO subsystem that we need is only available from
#	# kernel version X.Z
#	depends on !FOO || BACKPORT_KERNEL_X_Z
#
#	# build if driver needs it (it selects BACKPORT_FOO)
#	default m if BACKPORT_FOO
#
#	# or for build-testing (BACKPORT_USERSEL_BUILD_ALL is enabled)
#	default m if BACKPORT_USERSEL_BUILD_ALL
#
# config BACKPORT_FOO
#	bool
#
# This only works as-is if the kernel code is usable on any version,
# otherwise the "&& !FOO" part needs to be different.
#
#
# B) An option for code always present on some kernels (e.g. KFIFO).
#    This simply depends on/sets the default based on the version:
#
# config BACKPORT_BUILD_KFIFO
#	def_bool y
#	depends on BACKPORT_KERNEL_2_6_36
#
#
# C) similarly, a kconfig symbol for an option, e.g.
#    BACKPORT_OPTION_BT_SOCK_CREATE_NEEDS_KERN (see below)
#
#
# Variations are obviously possible.
#

config BACKPORT_BUILD_FW_LOADER
	tristate
	depends on m
	# RHEL6, starting from 6.0, backports the FW loader already
	depends on !BACKPORT_RHEL_KERNEL_6_0
	depends on !FW_LOADER || BACKPORT_KERNEL_2_6_33
	default m if BACKPORT_FW_LOADER
	default m if BACKPORT_USERSEL_BUILD_ALL

config BACKPORT_FW_LOADER
	bool

config BACKPORT_USERSEL_NET_SCH_CODEL
	tristate "codel"
	depends on m
	depends on m
	depends on !BACKPORT_KERNEL_2_6_25
	default m if NET_SCH_CODEL=n
	default m if BACKPORT_USERSEL_BUILD_ALL

config BACKPORT_USERSEL_NET_SCH_FQ_CODEL
	tristate "FQ codel"
	depends on m
	depends on m
	depends on !BACKPORT_KERNEL_2_6_25
	default m if NET_SCH_FQ_CODEL=n
	default m if BACKPORT_USERSEL_BUILD_ALL

config BACKPORT_BUILD_KFIFO
	def_bool y
	# RHEL6, starting from 6.1, backports kfifo already
	depends on !BACKPORT_RHEL_KERNEL_6_1
	depends on BACKPORT_KERNEL_2_6_36

config BACKPORT_BUILD_CORDIC
	tristate
	depends on m
	depends on !CORDIC
	default m if BACKPORT_CORDIC
	default m if BACKPORT_USERSEL_BUILD_ALL

config BACKPORT_CORDIC
	bool

config BACKPORT_BUILD_CRC8
	tristate
	depends on m
	depends on !CRC8
	default m if BACKPORT_CRC8
	default m if BACKPORT_USERSEL_BUILD_ALL

config BACKPORT_CRC8
	bool

config BACKPORT_BUILD_GENERIC_ATOMIC64
	bool
	default y if !64BIT && !GENERIC_ATOMIC64

config BACKPORT_OPTION_BT_SOCK_CREATE_NEEDS_KERN
	bool
	# in RHEL6 (starting from 6.0), the function needs the argument
	default y if !BACKPORT_KERNEL_2_6_33 || BACKPORT_RHEL_KERNEL_6_0

config BACKPORT_BUILD_AVERAGE
	bool
	depends on !AVERAGE
	default y if BACKPORT_USERSEL_BUILD_ALL
	default y if BACKPORT_AVERAGE
	#h-file linux/average.h
	#c-file lib/average.c

config BACKPORT_AVERAGE
	bool

config BACKPORT_OPTION_USB_URB_THREAD_FIX
	bool
	default y if BACKPORT_KERNEL_2_6_36

config BACKPORT_MII
	bool

config BACKPORT_BUILD_DMA_SHARED_BUFFER
	bool
	depends on ANON_INODES
	depends on !BACKPORT_KERNEL_3_0
	depends on !DMA_SHARED_BUFFER || BACKPORT_KERNEL_3_5
	default y if BACKPORT_DMA_SHARED_BUFFER
	default y if BACKPORT_USERSEL_BUILD_ALL
	#h-file linux/dma-buf.h
	#c-file drivers/base/dma-buf.c

config BACKPORT_DMA_SHARED_BUFFER
	bool

config BACKPORT_BUILD_DMA_SHARED_HELPERS
	bool
	depends on HAS_DMA
	# Build on other kernels kernels < 3.9 if HAVE_GENERIC_DMA_COHERENT is
	# not set. Kernels >= 3.8 have this if HAS_DMA is set.
	depends on (!HAVE_GENERIC_DMA_COHERENT || BACKPORT_KERNEL_3_9)
	# Always build if on 3.3 - 3.5
	default y if (BACKPORT_KERNEL_3_4 || BACKPORT_KERNEL_3_5 || BACKPORT_KERNEL_3_6)
	# build for testing
	default y if BACKPORT_USERSEL_BUILD_ALL

config BACKPORT_BUILD_LEDS
	bool
	depends on !NEW_LEDS || !LEDS_CLASS || !LEDS_TRIGGERS
	default y if BACKPORT_NEW_LEDS
	default y if BACKPORT_LEDS_CLASS
	default y if BACKPORT_LEDS_TRIGGERS

config BACKPORT_NEW_LEDS
	bool

config BACKPORT_LEDS_CLASS
	bool

config BACKPORT_LEDS_TRIGGERS
	bool

config BACKPORT_USERSEL_BUILD_ALL
	bool "Build all compat code"
	help
	  This option selects all the compat code options
	  that would otherwise only be selected by drivers.

	  It's only really useful for compat testing, so
	  you probably shouldn't enable it.
