#
# 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 "Controlled Delay AQM (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
	#module-name sch_codel
	#c-file net/sched/sch_codel.c

config BACKPORT_USERSEL_NET_SCH_FQ_CODEL
	tristate "Fair Queue Controlled Delay AQM (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
	#module-name sch_fq_codel
	#c-file net/sched/sch_fq_codel.c
	#c-file net/core/flow_dissector.c

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
	#module-name cordic
	#c-file lib/cordic.c

config BACKPORT_CORDIC
	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=n || !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.

config BACKPORT_CRYPTO_CCM
	bool

config BACKPORT_BUILD_CRYPTO_CCM
	bool
	default n if CRYPTO_CCM
	default y if BACKPORT_CRYPTO_CCM
	#c-file crypto/ccm.c
