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

menuconfig NET_GPTP
	bool "Enable IEEE 802.1AS (gPTP) support [EXPERIMENTAL]"
	select NET_PKT_TIMESTAMP
	select PTP_CLOCK
	help
	  Enable gPTP driver that send and receives gPTP packets
	  and handles network packet timestamps.

if NET_GPTP

module = NET_GPTP
module-dep = NET_LOG
module-str = Log level for gPTP
module-help = Enable logs for the gPTP stack.
source "subsys/net/Kconfig.template.log_config.net"

config NET_GPTP_GM_CAPABLE
	bool "Enable IEEE 802.1AS GrandMaster Capability"
	help
	  Enable to mark the whole system as Grand Master Capable.

config NET_GPTP_PROBE_CLOCK_SOURCE_ON_DEMAND
	bool "Probe clock source on demand"
	depends on NET_GPTP_GM_CAPABLE
	default y
	help
	  This option is helpful if the driver does not fully support the
	  ClockSourceTime.invoke function. If this is enabled, the clock
	  source is probed when it is actually needed instead of being
	  updated on each tick.
	  See IEEE 802.1AS-2011, chapter 9.2 for more details.

choice
	prompt "gPTP Clock Accuracy"
	default NET_GPTP_CLOCK_ACCURACY_UNKNOWN
	help
	  Specify the accuracy of the clock. This setting should reflect
	  the actual capabilities of the hardware.
	  See 7.6.2.5 of IEEE 1588-2008 for more info.

	config NET_GPTP_CLOCK_ACCURACY_UNKNOWN
		bool "Unknown"
	config NET_GPTP_CLOCK_ACCURACY_25NS
		bool "25ns"
	config NET_GPTP_CLOCK_ACCURACY_100NS
		bool "100ns"
	config NET_GPTP_CLOCK_ACCURACY_250NS
		bool "250ns"
	config NET_GPTP_CLOCK_ACCURACY_1US
		bool "1us"
	config NET_GPTP_CLOCK_ACCURACY_2_5US
		bool "2.5us"
	config NET_GPTP_CLOCK_ACCURACY_10US
		bool "10us"
	config NET_GPTP_CLOCK_ACCURACY_25US
		bool "25us"
	config NET_GPTP_CLOCK_ACCURACY_100US
		bool "100us"
	config NET_GPTP_CLOCK_ACCURACY_250US
		bool "250us"
	config NET_GPTP_CLOCK_ACCURACY_1MS
		bool "1ms"
	config NET_GPTP_CLOCK_ACCURACY_2_5MS
		bool "1.5ms"
	config NET_GPTP_CLOCK_ACCURACY_10MS
		bool "10ms"
	config NET_GPTP_CLOCK_ACCURACY_25MS
		bool "25ms"
	config NET_GPTP_CLOCK_ACCURACY_100MS
		bool "100ms"
	config NET_GPTP_CLOCK_ACCURACY_250MS
		bool "250ms"
	config NET_GPTP_CLOCK_ACCURACY_1S
		bool "1s"
	config NET_GPTP_CLOCK_ACCURACY_10S
		bool "10s"
	config NET_GPTP_CLOCK_ACCURACY_GT_10S
		bool "> 10s"
endchoice

config NET_GPTP_CLOCK_ACCURACY
	hex
	default 0x20 if NET_GPTP_CLOCK_ACCURACY_25NS
	default 0x21 if NET_GPTP_CLOCK_ACCURACY_100NS
	default 0x22 if NET_GPTP_CLOCK_ACCURACY_250NS
	default 0x23 if NET_GPTP_CLOCK_ACCURACY_1US
	default 0x24 if NET_GPTP_CLOCK_ACCURACY_2_5US
	default 0x25 if NET_GPTP_CLOCK_ACCURACY_10US
	default 0x26 if NET_GPTP_CLOCK_ACCURACY_25US
	default 0x27 if NET_GPTP_CLOCK_ACCURACY_100US
	default 0x28 if NET_GPTP_CLOCK_ACCURACY_250US
	default 0x29 if NET_GPTP_CLOCK_ACCURACY_1MS
	default 0x2a if NET_GPTP_CLOCK_ACCURACY_2_5MS
	default 0x2b if NET_GPTP_CLOCK_ACCURACY_10MS
	default 0x2c if NET_GPTP_CLOCK_ACCURACY_25MS
	default 0x2d if NET_GPTP_CLOCK_ACCURACY_100MS
	default 0x2e if NET_GPTP_CLOCK_ACCURACY_250MS
	default 0x2f if NET_GPTP_CLOCK_ACCURACY_1S
	default 0x30 if NET_GPTP_CLOCK_ACCURACY_10S
	default 0x31 if NET_GPTP_CLOCK_ACCURACY_GT_10S
	default 0xfe

config NET_GPTP_NUM_PORTS
	int "Number of gPTP ports"
	default 1
	help
	  Configures the gPTP stack to work with the given number of ports.
	  The port concept is the same thing as network interface.

config NET_GPTP_VLAN
	bool "Run gPTP over VLAN link"
	depends on NET_VLAN
	select NET_L2_ETHERNET_MGMT
	select NET_MGMT_EVENT
	select NET_MGMT_EVENT_INFO
	help
	  This setting allows gPTP to run over VLAN link. Currently only
	  one port can have VLAN tag set. Note that CONFIG_NET_GPTP_VLAN_TAG
	  setting must have a proper tag value set, otherwise the gPTP over
	  VLAN will not work.

config NET_GPTP_VLAN_TAG
	int "VLAN tag to use"
	default 4095
	depends on NET_GPTP_VLAN
	help
	  The VLAN tag to use when sending and receiving gPTP messages.
	  The default value 4095 (0x0fff) means unspecified tag which is
	  not a valid value. This means that you need to set the tag to
	  a valid value.

config NET_GPTP_NEIGHBOR_PROP_DELAY_THR
	int "Set neighbor propagation delay threshold (ns)"
	default 100000
	help
	  Defines the neighbor propagation delay threshold in nanoseconds.
	  This is the propagation time threshold, above which a port is not
	  considered capable of participating in the IEEE 802.1AS protocol.
	  See IEEE 802.1AS chapter 11.2.12.6 for details.

config NET_GPTP_INIT_LOG_PDELAY_REQ_ITV
	int "Set initial pdelay request interval in Log2 base"
	default 0
	help
	  Defines the interval at which a Path Delay Request will be sent.
	  The value is the converted in nanoseconds as follow:
	  nanoseconds = (10^9) * 2^(value)

config NET_GPTP_INIT_LOG_SYNC_ITV
	int "Set initial sync interval in Log2 base"
	default -3
	help
	  Defines the interval at which a Sync message will be sent.
	  The value is the converted in nanoseconds as follow:
	  nanoseconds = (10^9) * 2^(value)

config NET_GPTP_INIT_LOG_ANNOUNCE_ITV
	int "Set initial announce interval in Log2 base"
	default 0
	help
	  Defines the interval at which an Announce message will be sent.
	  The value is the converted in nanoseconds as follow:
	  nanoseconds = (10^9) * 2^(value)

config NET_GPTP_SYNC_RECEIPT_TIMEOUT
	int "Number of sync intervals to wait"
	default 3
	help
	  Defines the number of sync intervals to wait without receiving
	  synchronization information before assuming that the master is no
	  longer transmitting synchronization information.

config NET_GPTP_ANNOUNCE_RECEIPT_TIMEOUT
	int "Number of announce intervals to wait"
	default 3
	help
	  Defines the number of announce intervals to wait without receiving
	  an Announce message before assuming that the master is no longer
	  transmitting Announce messages.

config NET_GPTP_USE_DEFAULT_CLOCK_UPDATE
	bool "Use a default clock update function"
	default y
	help
	  Use a default internal function to update port local clock.

config NET_GPTP_PATH_TRACE_ELEMENTS
	int "How many path trace elements to track"
	default 8
	help
	  This tells the number of time-aware systems that transmits the
	  Announce message. Each array element takes 8 bytes. If this value
	  is set to 8, then 8 * 8 = 64 bytes of memory is used.

config NET_GPTP_STATISTICS
	bool "Collect gPTP statistics"
	help
	  Enable this if you need to collect gPTP statistics. The statistics
	  can be seen in net-shell if needed.

endif # NET_GPTP
