# SPDX-License-Identifier: GPL-2.0-only
#
# HISILICON device configuration
#

config NET_VENDOR_HISILICON
	bool "Hisilicon devices"
	default y
	depends on OF || ACPI
	depends on ARM || ARM64 || COMPILE_TEST
	help
	  If you have a network (Ethernet) card belonging to this class, say Y.

	  Note that the answer to this question doesn't directly affect the
	  kernel: saying N will just cause the configurator to skip all
	  the questions about Hisilicon devices. If you say Y, you will be asked
	  for your specific card in the following questions.

if NET_VENDOR_HISILICON

config HIX5HD2_GMAC
	tristate "Hisilicon HIX5HD2 Family Network Device Support"
	select PHYLIB
	help
	  This selects the hix5hd2 mac family network device.

config HISI_FEMAC
	tristate "Hisilicon Fast Ethernet MAC device support"
	depends on HAS_IOMEM
	select PHYLIB
	select RESET_CONTROLLER
	help
	  This selects the Hisilicon Fast Ethernet MAC device(FEMAC).
	  The FEMAC receives and transmits data over Ethernet
	  ports at 10/100 Mbps in full-duplex or half-duplex mode.
	  The FEMAC exchanges data with the CPU, and supports
	  the energy efficient Ethernet (EEE).

config HIP04_ETH
	tristate "HISILICON P04 Ethernet support"
	depends on HAS_IOMEM	# For MFD_SYSCON
	select MARVELL_PHY
	select MFD_SYSCON
	select HNS_MDIO
	help
	  If you wish to compile a kernel for a hardware with hisilicon p04 SoC and
	  want to use the internal ethernet then you should answer Y to this.

config HI13X1_GMAC
	bool "Hisilicon HI13X1 Network Device Support"
	depends on HIP04_ETH
	help
	  If you wish to compile a kernel for a hardware with hisilicon hi13x1_gamc
	  then you should answer Y to this. This makes this driver suitable for use
	  on certain boards such as the HI13X1.

	  If you are unsure, say N.

config HNS_MDIO
	tristate
	select PHYLIB
	help
	  This selects the HNS MDIO support. It is needed by HNS_DSAF to access
	  the PHY

config HNS
	tristate
	help
	  This selects the framework support for Hisilicon Network Subsystem. It
	  is needed by any driver which provides HNS acceleration engine or make
	  use of the engine

config HNS_DSAF
	tristate "Hisilicon HNS DSAF device Support"
	select HNS
	select HNS_MDIO
	help
	  This selects the DSAF (Distributed System Area Frabric) network
	  acceleration engine support. The engine is used in Hisilicon hip05,
	  Hi1610 and further ICT SoC

config HNS_ENET
	tristate "Hisilicon HNS Ethernet Device Support"
	select PHYLIB
	select HNS
	help
	  This selects the general ethernet driver for HNS.  This module make
	  use of any HNS AE driver, such as HNS_DSAF

config HNS3
	tristate "Hisilicon Network Subsystem Support HNS3 (Framework)"
	depends on PCI
	help
	  This selects the framework support for Hisilicon Network Subsystem 3.
	  This layer facilitates clients like ENET, RoCE and user-space ethernet
	  drivers(like ODP)to register with HNAE devices and their associated
	  operations.

if HNS3

config HNS3_HCLGE
	tristate "Hisilicon HNS3 HCLGE Acceleration Engine & Compatibility Layer Support"
	default m
	depends on PCI_MSI
	help
	  This selects the HNS3_HCLGE network acceleration engine & its hardware
	  compatibility layer. The engine would be used in Hisilicon hip08 family of
	  SoCs and further upcoming SoCs.

config HNS3_DCB
	bool "Hisilicon HNS3 Data Center Bridge Support"
	default n
	depends on HNS3_HCLGE && DCB
	help
	  Say Y here if you want to use Data Center Bridging (DCB) in the HNS3 driver.

	  If unsure, say N.

config HNS3_HCLGEVF
	tristate "Hisilicon HNS3VF Acceleration Engine & Compatibility Layer Support"
	depends on PCI_MSI
	depends on HNS3_HCLGE
	help
	  This selects the HNS3 VF drivers network acceleration engine & its hardware
	  compatibility layer. The engine would be used in Hisilicon hip08 family of
	  SoCs and further upcoming SoCs.

config HNS3_ENET
	tristate "Hisilicon HNS3 Ethernet Device Support"
	default m
	depends on 64BIT && PCI
	depends on INET
	help
	  This selects the Ethernet Driver for Hisilicon Network Subsystem 3 for hip08
	  family of SoCs. This module depends upon HNAE3 driver to access the HNAE3
	  devices and their associated operations.

endif #HNS3

endif # NET_VENDOR_HISILICON
