# 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
	imply PTP_1588_CLOCK
	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
	select DIMLIB
	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
