# Kconfig - Synopsys DesignWare Ethernet driver configuration options

#
# Copyright (c) 2015 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

config SYS_LOG_ETHERNET_LEVEL
	int
	prompt "Grove Log level"
	depends on SYS_LOG && ETHERNET
	default 0
	range 0 4
	help
	  Sets log level for Ethernet Device Drivers.
	  Levels are:
	  0 OFF, do not write
	  1 ERROR, only write SYS_LOG_ERR
	  2 WARNING, write SYS_LOG_WRN in adition to previous level
	  3 INFO, write SYS_LOG_INF in adition to previous levels
	  4 DEBUG, write SYS_LOG_DBG in adition to previous levels

menuconfig ETH_DW
	bool
	prompt "Synopsys DesignWare Ethernet driver"
	depends on ETHERNET
	default n
	help
	  Enable Synopsys DesignWare Ethernet driver.

if ETH_DW
config ETH_DW_SHARED_IRQ
	bool
	default n

config ETH_DW_0
	bool "Synopsys DesignWare Ethernet port 0"
	default n
	help
	 Include port 0 driver

config ETH_DW_0_NAME
	string "Driver name"
	depends on ETH_DW_0
	default "ETH_0"

choice
	prompt "Port 0 Interrupts via"
	default ETH_DW_0_IRQ_SHARED
	depends on ETH_DW_0

config ETH_DW_0_IRQ_DIRECT
	bool "Direct Hardware Interrupt"
	help
	  When interrupts fire, the driver's ISR function is being called directly.

config ETH_DW_0_IRQ_SHARED
	bool "Shared IRQ"
	depends on SHARED_IRQ
	select ETH_DW_SHARED_IRQ
	help
	  When interrupts fire, the shared IRQ driver is notified. Then the shared IRQ
	  driver dispatches the interrupt to other drivers.

endchoice

config ETH_DW_0_IRQ_SHARED_NAME
	string "Device name for Shared IRQ"
	depends on ETH_DW_0 && ETH_DW_0_IRQ_SHARED
	help
	  Specify the device name for the shared IRQ driver. It is used to register
	  this driver with the shared IRQ driver, so interrupts can be dispatched
	  correctly.

config ETH_DW_0_IRQ_PRI
	int "Controller interrupt priority"
	depends on ETH_DW_0 && ETH_DW_0_IRQ_DIRECT
	default 0
	help
	IRQ priority

endif # ETH_DW
