# SPDX-License-Identifier: GPL-2.0
menu "Android"

config ANDROID_BINDER_IPC
	bool "Android Binder IPC Driver"
	depends on MMU
	default n
	help
	  Binder is used in Android for both communication between processes,
	  and remote method invocation.

	  This means one Android process can call a method/routine in another
	  Android process, using Binder to identify, invoke and pass arguments
	  between said processes.

config ANDROID_BINDER_IPC_C
	bool "Android Binder IPC Driver in C"
	depends on ANDROID_BINDER_IPC
	default y
	help
	  Enable the C implementation of the Android Binder IPC Driver.

	  See the ANDROID_BINDER_IPC config option for more details on the
	  Android Binder IPC driver.

	  If unsure, pick the C implementation.

config ANDROID_BINDER_IPC_RUST
	tristate "Android Binder IPC Driver in Rust"
	depends on ANDROID_BINDER_IPC && RUST
	help
	  Enable the Rust implementation of the Android Binder IPC Driver.

	  See the ANDROID_BINDER_IPC config option for more details on the
	  Android Binder IPC driver.

	  If unsure, pick the C implementation.

config ANDROID_BINDER_IPC_DEFAULT_IS_RUST
	bool "Android Binder driver default implementation is Rust"
	depends on ANDROID_BINDER_IPC_RUST
	default y if !ANDROID_BINDER_IPC_C
	help
	  The kernel commandline parameter binder.impl is used to choose which
	  implementation of the Android Binder driver to use. This option
	  determines the default value of binder.impl.

	  If unsure, say n.

config ANDROID_BINDERFS
	bool "Android Binderfs filesystem"
	depends on ANDROID_BINDER_IPC
	default n
	help
	  Binderfs is a pseudo-filesystem for the Android Binder IPC driver
	  which can be mounted per-ipc namespace allowing to run multiple
	  instances of Android.
	  Each binderfs mount initially only contains a binder-control device.
	  It can be used to dynamically allocate new binder IPC devices via
	  ioctls.

config ANDROID_BINDERFS_C
	bool
	depends on ANDROID_BINDER_IPC_C && ANDROID_BINDERFS
	default y

config ANDROID_BINDERFS_RUST
	bool
	depends on ANDROID_BINDER_IPC_RUST && ANDROID_BINDERFS
	default y

config ANDROID_BINDER_DEVICES
	string "Android Binder devices"
	depends on ANDROID_BINDER_IPC
	default "binder,hwbinder,vndbinder"
	help
	  Default value for the binder.devices parameter.

	  The binder.devices parameter is a comma-separated list of strings
	  that specifies the names of the binder device nodes that will be
	  created. Each binder device has its own context manager, and is
	  therefore logically separated from the other devices.

config ANDROID_BINDER_IPC_SELFTEST
	bool "Android Binder IPC Driver Selftest"
	depends on ANDROID_BINDER_IPC_C
	help
	  This feature allows binder selftest to run.

	  Binder selftest checks the allocation and free of binder buffers
	  exhaustively with combinations of various buffer sizes and
	  alignments.

config ANDROID_DEBUG_SYMBOLS
	bool "Android Debug Symbols"
	help
	  Enables export of debug symbols that are useful for offline debugging
	  of a kernel. These symbols would be used in vendor modules to find
	  addresses of the core kernel symbols for vendor extensions.

	  This driver is statically compiled into kernel and maintains all the
	  required symbol addresses for vendor modules and provides necessary
	  interface vendor modules.

config ANDROID_VENDOR_HOOKS
	bool "Android Vendor Hooks"
	depends on TRACEPOINTS
	help
	  Enable vendor hooks implemented as tracepoints

	  Allow vendor modules to attach to tracepoint "hooks" defined via
	  DECLARE_HOOK or DECLARE_RESTRICTED_HOOK.

config ANDROID_DEBUG_KINFO
	bool "Android Debug Kernel Information Support"
	depends on KALLSYMS
	help
	  This supports kernel information backup for bootloader usage.
	  Specifics:
	   - The kallsyms symbols for unwind_backtrace
	   - Page directory pointer
	   - UTS_RELEASE
	   - BUILD_INFO(ro.build.fingerprint)

config ANDROID_KABI_RESERVE
	bool "Android KABI reserve padding"
	default y
	help
	  This option enables the padding that the Android GKI kernel adds
	  to many different kernel structures to support an in-kernel stable ABI
	  over the lifespan of support for the kernel.

	  Only disable this option if you have a system that needs the Android
	  kernel drivers, but is NOT an Android GKI kernel image. If disabled
	  it has the possibility to make the kernel static and runtime image
	  slightly smaller but will NOT be supported by the Google Android
	  kernel team.

	  If even slightly unsure, say Y.

config ANDROID_VENDOR_OEM_DATA
	bool "Android vendor and OEM data padding"
	default y
	help
	  This option enables the padding that the Android GKI kernel adds
	  to many different kernel structures to support an in-kernel stable ABI
	  over the lifespan of support for the kernel as well as OEM additional
	  fields that are needed by some of the Android kernel tracepoints. The
	  macros enabled by this option are used to enable padding in vendor modules
	  used for the above specified purposes.

	  Only disable this option if you have a system that needs the Android
	  kernel drivers, but is NOT an Android GKI kernel image and you do NOT
	  use the Android kernel tracepoints. If disabled it has the possibility
	  to make the kernel static and runtime image slightly smaller but will
	  NOT be supported by the Google Android kernel team.

	  If even slightly unsure, say Y.

endmenu
