# 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 "Hisilicon Network Subsystem Support (Framework)"
	---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
