# SPDX-License-Identifier: GPL-2.0-only
#
# Microchip VCAP API configuration
#

if NET_VENDOR_MICROCHIP

config VCAP
	bool "VCAP (Versatile Content-Aware Processor) library"
	help
	  Provides the basic VCAP functionality for multiple Microchip switchcores

	  A VCAP is essentially a TCAM with rules consisting of

	    - Programmable key fields
	    - Programmable action fields
	    - A counter (which may be only one bit wide)

	  Besides this each VCAP has:

	    - A number of lookups
	    - A keyset configuration per port per lookup

	  The VCAP implementation provides switchcore independent handling of rules
	  and supports:

	    - Creating and deleting rules
	    - Updating and getting rules

	  The platform specific configuration as well as the platform specific model
	  of the VCAP instances are attached to the VCAP API and a client can then
	  access rules via the API in a platform independent way, with the
	  limitations that each VCAP has in terms of its supported keys and actions.

	  Different switchcores will have different VCAP instances with different
	  characteristics. Look in the datasheet for the VCAP specifications for the
	  specific switchcore.

config VCAP_KUNIT_TEST
	bool "KUnit test for VCAP library" if !KUNIT_ALL_TESTS
	depends on KUNIT
	depends on KUNIT=y && VCAP=y && y
	select DEBUG_FS
	default KUNIT_ALL_TESTS
	help
	  This builds unit tests for the VCAP library.

	  For more information on KUnit and unit tests in general, please refer
	  to the KUnit documentation in Documentation/dev-tools/kunit/.

	  If unsure, say N.

endif # NET_VENDOR_MICROCHIP
