1# Copyright (c) 2018 Intel Corporation.
2# SPDX-License-Identifier: Apache-2.0
3
4menuconfig NET_GPTP
5	bool "IEEE 802.1AS (gPTP) support [EXPERIMENTAL]"
6	select NET_L2_PTP
7	select EXPERIMENTAL
8	help
9	  Enable gPTP driver that send and receives gPTP packets
10	  and handles network packet timestamps.
11
12if NET_GPTP
13
14module = NET_GPTP
15module-dep = NET_LOG
16module-str = Log level for gPTP
17module-help = Enable logs for the gPTP stack.
18source "subsys/net/Kconfig.template.log_config.net"
19
20config NET_GPTP_GM_CAPABLE
21	bool "IEEE 802.1AS GrandMaster Capability"
22	help
23	  Enable to mark the whole system as Grand Master Capable.
24
25config NET_GPTP_PROBE_CLOCK_SOURCE_ON_DEMAND
26	bool "Probe clock source on demand"
27	depends on NET_GPTP_GM_CAPABLE
28	default y
29	help
30	  This option is helpful if the driver does not fully support the
31	  ClockSourceTime.invoke function. If this is enabled, the clock
32	  source is probed when it is actually needed instead of being
33	  updated on each tick.
34	  See IEEE 802.1AS-2011, chapter 9.2 for more details.
35
36choice
37	prompt "gPTP Clock Accuracy"
38	default NET_GPTP_CLOCK_ACCURACY_UNKNOWN
39	help
40	  Specify the accuracy of the clock. This setting should reflect
41	  the actual capabilities of the hardware.
42	  See 7.6.2.5 of IEEE 1588-2008 for more info.
43
44	config NET_GPTP_CLOCK_ACCURACY_UNKNOWN
45		bool "Unknown"
46	config NET_GPTP_CLOCK_ACCURACY_25NS
47		bool "25ns"
48	config NET_GPTP_CLOCK_ACCURACY_100NS
49		bool "100ns"
50	config NET_GPTP_CLOCK_ACCURACY_250NS
51		bool "250ns"
52	config NET_GPTP_CLOCK_ACCURACY_1US
53		bool "1us"
54	config NET_GPTP_CLOCK_ACCURACY_2_5US
55		bool "2.5us"
56	config NET_GPTP_CLOCK_ACCURACY_10US
57		bool "10us"
58	config NET_GPTP_CLOCK_ACCURACY_25US
59		bool "25us"
60	config NET_GPTP_CLOCK_ACCURACY_100US
61		bool "100us"
62	config NET_GPTP_CLOCK_ACCURACY_250US
63		bool "250us"
64	config NET_GPTP_CLOCK_ACCURACY_1MS
65		bool "1ms"
66	config NET_GPTP_CLOCK_ACCURACY_2_5MS
67		bool "1.5ms"
68	config NET_GPTP_CLOCK_ACCURACY_10MS
69		bool "10ms"
70	config NET_GPTP_CLOCK_ACCURACY_25MS
71		bool "25ms"
72	config NET_GPTP_CLOCK_ACCURACY_100MS
73		bool "100ms"
74	config NET_GPTP_CLOCK_ACCURACY_250MS
75		bool "250ms"
76	config NET_GPTP_CLOCK_ACCURACY_1S
77		bool "1s"
78	config NET_GPTP_CLOCK_ACCURACY_10S
79		bool "10s"
80	config NET_GPTP_CLOCK_ACCURACY_GT_10S
81		bool "> 10s"
82endchoice
83
84config NET_GPTP_CLOCK_ACCURACY
85	hex
86	default 0x20 if NET_GPTP_CLOCK_ACCURACY_25NS
87	default 0x21 if NET_GPTP_CLOCK_ACCURACY_100NS
88	default 0x22 if NET_GPTP_CLOCK_ACCURACY_250NS
89	default 0x23 if NET_GPTP_CLOCK_ACCURACY_1US
90	default 0x24 if NET_GPTP_CLOCK_ACCURACY_2_5US
91	default 0x25 if NET_GPTP_CLOCK_ACCURACY_10US
92	default 0x26 if NET_GPTP_CLOCK_ACCURACY_25US
93	default 0x27 if NET_GPTP_CLOCK_ACCURACY_100US
94	default 0x28 if NET_GPTP_CLOCK_ACCURACY_250US
95	default 0x29 if NET_GPTP_CLOCK_ACCURACY_1MS
96	default 0x2a if NET_GPTP_CLOCK_ACCURACY_2_5MS
97	default 0x2b if NET_GPTP_CLOCK_ACCURACY_10MS
98	default 0x2c if NET_GPTP_CLOCK_ACCURACY_25MS
99	default 0x2d if NET_GPTP_CLOCK_ACCURACY_100MS
100	default 0x2e if NET_GPTP_CLOCK_ACCURACY_250MS
101	default 0x2f if NET_GPTP_CLOCK_ACCURACY_1S
102	default 0x30 if NET_GPTP_CLOCK_ACCURACY_10S
103	default 0x31 if NET_GPTP_CLOCK_ACCURACY_GT_10S
104	default 0xfe
105
106config NET_GPTP_NUM_PORTS
107	int "Number of gPTP ports"
108	default 1
109	help
110	  Configures the gPTP stack to work with the given number of ports.
111	  The port concept is the same thing as network interface.
112
113config NET_GPTP_VLAN
114	bool "Run gPTP over VLAN link"
115	depends on NET_VLAN
116	select NET_L2_ETHERNET_MGMT
117	select NET_MGMT_EVENT
118	select NET_MGMT_EVENT_INFO
119	help
120	  This setting allows gPTP to run over VLAN link. Currently only
121	  one port can have VLAN tag set. Note that CONFIG_NET_GPTP_VLAN_TAG
122	  setting must have a proper tag value set, otherwise the gPTP over
123	  VLAN will not work.
124
125config NET_GPTP_VLAN_TAG
126	int "VLAN tag to use"
127	default 4095
128	depends on NET_GPTP_VLAN
129	help
130	  The VLAN tag to use when sending and receiving gPTP messages.
131	  The default value 4095 (0x0fff) means unspecified tag which is
132	  not a valid value. This means that you need to set the tag to
133	  a valid value.
134
135config NET_GPTP_NEIGHBOR_PROP_DELAY_THR
136	int "Set neighbor propagation delay threshold (ns)"
137	default 100000
138	help
139	  Defines the neighbor propagation delay threshold in nanoseconds.
140	  This is the propagation time threshold, above which a port is not
141	  considered capable of participating in the IEEE 802.1AS protocol.
142	  See IEEE 802.1AS chapter 11.2.12.6 for details.
143
144config NET_GPTP_INIT_LOG_PDELAY_REQ_ITV
145	int "Set initial pdelay request interval in Log2 base"
146	default 0
147	help
148	  Defines the interval at which a Path Delay Request will be sent.
149	  The value is the converted in nanoseconds as follow:
150	  nanoseconds = (10^9) * 2^(value)
151
152config NET_GPTP_INIT_LOG_SYNC_ITV
153	int "Set initial sync interval in Log2 base"
154	default -3
155	help
156	  Defines the interval at which a Sync message will be sent.
157	  The value is the converted in nanoseconds as follow:
158	  nanoseconds = (10^9) * 2^(value)
159
160config NET_GPTP_INIT_LOG_ANNOUNCE_ITV
161	int "Set initial announce interval in Log2 base"
162	default 0
163	help
164	  Defines the interval at which an Announce message will be sent.
165	  The value is the converted in nanoseconds as follow:
166	  nanoseconds = (10^9) * 2^(value)
167
168config NET_GPTP_SYNC_RECEIPT_TIMEOUT
169	int "Number of sync intervals to wait"
170	default 3
171	help
172	  Defines the number of sync intervals to wait without receiving
173	  synchronization information before assuming that the master is no
174	  longer transmitting synchronization information.
175
176config NET_GPTP_ANNOUNCE_RECEIPT_TIMEOUT
177	int "Number of announce intervals to wait"
178	default 3
179	help
180	  Defines the number of announce intervals to wait without receiving
181	  an Announce message before assuming that the master is no longer
182	  transmitting Announce messages.
183
184config NET_GPTP_USE_DEFAULT_CLOCK_UPDATE
185	bool "Use a default clock update function"
186	default y
187	help
188	  Use a default internal function to update port local clock.
189
190config NET_GPTP_PATH_TRACE_ELEMENTS
191	int "How many path trace elements to track"
192	default 8
193	help
194	  This tells the number of time-aware systems that transmits the
195	  Announce message. Each array element takes 8 bytes. If this value
196	  is set to 8, then 8 * 8 = 64 bytes of memory is used.
197
198config NET_GPTP_BMCA_PRIORITY1
199	int "BMCA priority1 value"
200	default 248 if NET_GPTP_GM_CAPABLE
201	default 255
202	range 0 255
203	help
204	  The priority1 attribute of the local clock. It is used in the
205	  Best Master Clock selection Algorithm (BMCA), lower values take
206	  precedence. The default value is 255 if the device is non grand
207	  master capable, and 248 if it is GM capable.
208	  See Chapter 8.6.2.1 of IEEE 802.1AS for a more detailed description
209	  of priority1. Note that if the system	is non GM capable, then the
210	  value 255 is used always and this setting is ignored.
211
212config NET_GPTP_BMCA_PRIORITY2
213	int "BMCA priority2 value"
214	default 248
215	range 0 255
216	help
217	  The priority2 attribute of the local clock. It is used in the BMCA
218	  (Best Master Clock selection Algorithm), lower values take
219	  precedence. The default value is 248.
220	  See Chapter 8.6.2.5 of IEEE 802.1AS for a more detailed description
221	  of priority2.
222
223config NET_GPTP_STATISTICS
224	bool "Collect gPTP statistics"
225	help
226	  Enable this if you need to collect gPTP statistics. The statistics
227	  can be seen in net-shell if needed.
228
229endif # NET_GPTP
230