# 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
	select NET_DEVLINK
	select PAGE_POOL
	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
	depends on PTP_1588_CLOCK_OPTIONAL
	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
