# Ethernet drivers configuration options

# Copyright (c) 2015 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menuconfig ETH_DRIVER
	bool "Ethernet Drivers"
	default y
	depends on NET_L2_ETHERNET

if ETH_DRIVER

module = ETHERNET
module-dep = LOG
module-str = Log level for Ethernet driver
module-help = Sets log level for Ethernet Device Drivers.
source "subsys/net/Kconfig.template.log_config.net"

config ETH_QEMU_IFACE_NAME
	string "Network interface name for QEMU"
	default "zeth"
	depends on NET_QEMU_ETHERNET
	help
	  The network interface name for QEMU. This value is given as
	  a parameter to -nic qemu command line option. The network
	  interface must be created before starting QEMU. The net-setup.sh
	  script from net-tools project can be used to create the network
	  interface.

config ETH_QEMU_EXTRA_ARGS
	string "Extra arguments to QEMU -nic option"
	depends on NET_QEMU_ETHERNET
	default ""
	help
	  Extra arguments passed to QEMU -nic option when Ethernet Networking
	  is enabled. Typically this is used to set the network MAC address of
	  Zephyr instance. This option can contain multiple QEMU option
	  arguments. Each QEMU argument must be separated by comma "," and no
	  spaces between arguments. Example: "mac=02:03:04:f0:0d:01" or
	  "mac=02:03:04:f0:0d:01,downscript=no"

source "drivers/ethernet/Kconfig.enc28j60"
source "drivers/ethernet/Kconfig.enc424j600"
source "drivers/ethernet/Kconfig.esp32"
source "drivers/ethernet/Kconfig.mcux"
source "drivers/ethernet/Kconfig.e1000"
source "drivers/ethernet/Kconfig.sam_gmac"
source "drivers/ethernet/Kconfig.stm32_hal"
source "drivers/ethernet/Kconfig.dwmac"
source "drivers/ethernet/Kconfig.smsc911x"
source "drivers/ethernet/Kconfig.native_posix"
source "drivers/ethernet/Kconfig.stellaris"
source "drivers/ethernet/Kconfig.liteeth"
source "drivers/ethernet/Kconfig.gecko"
source "drivers/ethernet/Kconfig.w5500"
source "drivers/ethernet/Kconfig.dsa"
source "drivers/ethernet/Kconfig.xlnx_gem"
source "drivers/ethernet/Kconfig.cyclonev"

source "drivers/ethernet/phy/Kconfig"

endif # "Ethernet Drivers"

config ETH_INIT_PRIORITY
	int "Ethernet driver init priority"
	default 80
	help
	  Ethernet device driver initialization priority.
	  Do not mess with it unless you know what you are doing.
	  Note that the priority needs to be lower than the net stack
	  so that it can start before the networking sub-system.
