ptp.h (106102B)
1 /* 2 * 3 * 4 * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file. 5 * 6 * Copyright 2007-2020 Broadcom Inc. All rights reserved. 7 */ 8 9 #ifndef __BCM_INT_PTP_H__ 10 #define __BCM_INT_PTP_H__ 11 12 #include <shared/bsl.h> 13 14 #include <soc/defs.h> 15 #include <soc/drv.h> 16 17 #if defined(INCLUDE_PTP) 18 19 #include <shared/rdpc.h> 20 #include <bcm/ptp.h> 21 22 #define PTP_TIMESOURCE_TODIN_MGMTMSG_FORMAT_LENGTH (32) 23 #define PTP_TIMESOURCE_TODIN_MGMTMSG_MASK_LENGTH (BCM_PTP_MAX_TOD_FORMAT_STRING) 24 25 #ifndef MIN 26 #define MIN(a,b) ((a) < (b) ? (a) : (b)) 27 #endif 28 29 #ifndef BCM_PTP_MAX_BUFFERS 30 /* BCM_PTP_MAX_BUFFERS: number of message buffers usable by CMICm */ 31 #define BCM_PTP_MAX_BUFFERS (48) 32 #endif 33 34 #ifndef BCM_PTP_MAX_LOG 35 /* BCM_PTP_MAX_LOG: size of debug log from CMICm */ 36 #define BCM_PTP_MAX_LOG (1024) 37 #endif 38 39 #ifdef BCM_WARM_BOOT_SUPPORT 40 extern int _bcm_common_ptp_sync(int unit); 41 #endif 42 #ifdef BCM_WARM_BOOT_SUPPORT_SW_DUMP 43 extern void _bcm_ptp_sw_dump(int unit); 44 #endif /* BCM_WARM_BOOT_SUPPORT_SW_DUMP */ 45 46 #if defined(BCM_KATANA_SUPPORT) 47 #define PTP_CONDITIONAL_IS_KATANA(unit) (SOC_IS_KATANA(unit)) 48 #else 49 #define PTP_CONDITIONAL_IS_KATANA(unit) (0) 50 #endif 51 52 #if defined(BCM_TRIUMPH3_SUPPORT) 53 #define PTP_CONDITIONAL_IS_TRIUMPH3(unit) (SOC_IS_TRIUMPH3(unit)) 54 #else 55 #define PTP_CONDITIONAL_IS_TRIUMPH3(unit) (0) 56 #endif 57 58 #if defined(BCM_TRIDENT2_SUPPORT) 59 #define PTP_CONDITIONAL_IS_TRIDENT2(unit) (SOC_IS_TD2_TT2(unit)) 60 #else 61 #define PTP_CONDITIONAL_IS_TRIDENT2(unit) (0) 62 #endif 63 64 #if defined(BCM_ARAD_SUPPORT) 65 #define PTP_CONDITIONAL_IS_ARAD(unit) (SOC_IS_ARAD(unit)) 66 #else 67 #define PTP_CONDITIONAL_IS_ARAD(unit) (0) 68 #endif 69 70 #if defined(BCM_KATANA2_SUPPORT) 71 #define PTP_CONDITIONAL_IS_KATANA2(unit) (SOC_IS_KATANA2(unit)) 72 #else 73 #define PTP_CONDITIONAL_IS_KATANA2(unit) (0) 74 #endif 75 76 #if defined(BCM_HURRICANE2_SUPPORT) 77 #define PTP_CONDITIONAL_IS_HURRICANE2(unit) (SOC_IS_HURRICANE2(unit)) 78 #else 79 #define PTP_CONDITIONAL_IS_HURRICANE2(unit) (0) 80 #endif 81 82 #if defined(BCM_GREYHOUND_SUPPORT) 83 #define PTP_CONDITIONAL_IS_GREYHOUND(unit) (SOC_IS_GREYHOUND(unit)) 84 #else 85 #define PTP_CONDITIONAL_IS_GREYHOUND(unit) (0) 86 #endif 87 88 #if defined(BCM_GREYHOUND2_SUPPORT) 89 #define PTP_CONDITIONAL_IS_GREYHOUND2(unit) (SOC_IS_GREYHOUND2(unit)) 90 #else 91 #define PTP_CONDITIONAL_IS_GREYHOUND2(unit) (0) 92 #endif 93 94 #if defined(BCM_SABER2_SUPPORT) 95 #define PTP_CONDITIONAL_IS_SABER2(unit) (SOC_IS_SABER2(unit)) 96 #else 97 #define PTP_CONDITIONAL_IS_SABER2(unit) (0) 98 #endif 99 100 #if defined(BCM_TOMAHAWK_SUPPORT) 101 #define PTP_CONDITIONAL_IS_TOMAHAWK(unit) (SOC_IS_TOMAHAWKX(unit)) 102 #else 103 #define PTP_CONDITIONAL_IS_TOMAHAWK(unit) (0) 104 #endif 105 106 #if defined(BCM_APACHE_SUPPORT) 107 #define PTP_CONDITIONAL_IS_APACHE(unit) (SOC_IS_APACHE(unit)) 108 #else 109 #define PTP_CONDITIONAL_IS_APACHE(unit) (0) 110 #endif 111 112 #if defined(BCM_HURRICANE3_SUPPORT) 113 #define PTP_CONDITIONAL_IS_HURRICANE3(unit) (SOC_IS_HURRICANE3(unit)) 114 #else 115 #define PTP_CONDITIONAL_IS_HURRICANE3(unit) (0) 116 #endif 117 118 #if defined(BCM_QAX_SUPPORT) 119 #define PTP_CONDITIONAL_IS_QAX(unit) (SOC_IS_QAX(unit)) 120 #else 121 #define PTP_CONDITIONAL_IS_QAX(unit) (0) 122 #endif 123 124 #if defined(BCM_QUX_SUPPORT) 125 #define PTP_CONDITIONAL_IS_QUX(unit) (SOC_IS_QUX(unit)) 126 #else 127 #define PTP_CONDITIONAL_IS_QUX(unit) (0) 128 #endif 129 130 #if defined(BCM_MONTEREY_SUPPORT) 131 #define PTP_CONDITIONAL_IS_MONTEREY(unit) (SOC_IS_MONTEREY(unit)) 132 #define BCM_TDPLL_FREQUENCY (625) 133 #else 134 #define PTP_CONDITIONAL_IS_MONTEREY(unit) (0) 135 #endif 136 137 /* define SOC which support internal stack */ 138 #if defined(BCM_KATANA_SUPPORT) || defined(BCM_TRIUMPH3_SUPPORT) || defined(BCM_TRIDENT2_SUPPORT) || \ 139 defined(BCM_ARAD_SUPPORT) || defined(BCM_KATANA2_SUPPORT) || defined(BCM_HURRICANE2_SUPPORT) || \ 140 defined(BCM_GREYHOUND_SUPPORT) || defined(BCM_SABER2_SUPPORT) || defined(BCM_TOMAHAWK_SUPPORT) || \ 141 defined(BCM_APACHE_SUPPORT) || defined(BCM_HURRICANE3_SUPPORT)|| defined(BCM_QAX_SUPPORT) || \ 142 defined(BCM_QUX_SUPPORT) 143 /* For compile-time decision: */ 144 #define BCM_PTP_INTERNAL_STACK_SUPPORT (1) 145 /* For run-time per-unit decisions: */ 146 #define SOC_HAS_PTP_INTERNAL_STACK_SUPPORT(unit) (PTP_CONDITIONAL_IS_KATANA(unit) || PTP_CONDITIONAL_IS_TRIUMPH3(unit) || \ 147 PTP_CONDITIONAL_IS_TRIDENT2(unit) || PTP_CONDITIONAL_IS_ARAD(unit) || \ 148 PTP_CONDITIONAL_IS_KATANA2(unit) || PTP_CONDITIONAL_IS_HURRICANE2(unit) || \ 149 PTP_CONDITIONAL_IS_GREYHOUND(unit) || PTP_CONDITIONAL_IS_SABER2(unit) || \ 150 PTP_CONDITIONAL_IS_TOMAHAWK(unit) || PTP_CONDITIONAL_IS_APACHE(unit) || \ 151 PTP_CONDITIONAL_IS_HURRICANE3(unit) || PTP_CONDITIONAL_IS_QAX(unit) || \ 152 PTP_CONDITIONAL_IS_QUX(unit) || PTP_CONDITIONAL_IS_GREYHOUND2(unit) || \ 153 PTP_CONDITIONAL_IS_MONTEREY(unit)) 154 #else 155 #undef BCM_PTP_INTERNAL_STACK_SUPPORT 156 #define SOC_HAS_PTP_INTERNAL_STACK_SUPPORT(unit) (0) 157 #endif 158 159 /* define SOC which should include external stack support */ 160 #if defined(PTP_KEYSTONE_STACK) && defined(BCM_ENDURO_SUPPORT) 161 /* For compile-time decisions: */ 162 #define BCM_PTP_EXTERNAL_STACK_SUPPORT (1) 163 /* For run-time per-unit decisions: */ 164 #define SOC_HAS_PTP_EXTERNAL_STACK_SUPPORT(unit) (SOC_IS_ENDURO(unit)) 165 #else 166 #undef BCM_PTP_EXTERNAL_STACK_SUPPORT 167 #define SOC_HAS_PTP_EXTERNAL_STACK_SUPPORT(unit) (SOC_IS_ENDURO(unit)) 168 #endif 169 170 #define PTP_ERROR(errmsg) BSL_LOG( BSL_LS_BCM_PTP | BSL_ERROR, \ 171 ("%s() FAILED %s\n", FUNCTION_NAME(), errmsg)) 172 173 #define PTP_ERROR_FUNC(func) BSL_LOG( BSL_LS_BCM_PTP | BSL_ERROR, \ 174 ("%s() FAILED: %s returned %d : %s\n", \ 175 FUNCTION_NAME(),func, rv, bcm_errmsg(rv))) 176 177 #define PTP_WARN(warnmsg) BSL_LOG( BSL_LS_BCM_PTP | BSL_WARN, \ 178 ("%s() failed %s\n", FUNCTION_NAME(), warnmsg)) 179 180 #define PTP_WARN_FUNC(func) BSL_LOG( BSL_LS_BCM_PTP | BSL_WARN, \ 181 ("%s() failed %s returned %d : %s\n", \ 182 FUNCTION_NAME(), func, rv, bcm_errmsg(rv))) 183 184 #define CONFIG_RCPU_OFFSET (0) 185 #define CONFIG_RCPU_SIZE (4 + 4 + 4 + 4 + 4 + 4 + 6 + 2) 186 #define CONFIG_VLAN_OFFSET (CONFIG_RCPU_OFFSET + CONFIG_RCPU_SIZE) 187 #define CONFIG_VLAN_SIZE (2 + 2) 188 #define CONFIG_MPLS_OFFSET (CONFIG_VLAN_OFFSET + CONFIG_VLAN_SIZE) 189 #define CONFIG_MPLS_SIZE (2 + 2) 190 #define CONFIG_HOST_OFFSET (CONFIG_MPLS_OFFSET + CONFIG_MPLS_SIZE) 191 #define CONFIG_HOST_SIZE (6 + 2 + 6 + 2 + 4 + 4 + 2 + 2) 192 #define CONFIG_DEBUG_OFFSET (CONFIG_HOST_OFFSET + CONFIG_HOST_SIZE) 193 #define CONFIG_DEBUG_SIZE (4) 194 #define CONFIG_PPSOUT_OFFSET (CONFIG_DEBUG_OFFSET + CONFIG_DEBUG_SIZE) 195 #define CONFIG_PPSOUT_SIZE (4 + 4 + 4 + 4 + 4 + 4) 196 #define CONFIG_TIMESOURCE_OFFSET (CONFIG_PPSOUT_OFFSET + CONFIG_PPSOUT_SIZE) 197 #define CONFIG_TIMESOURCE_SIZE (4) 198 #define CONFIG_EXTRA_SIZE (256) 199 200 #define CONFIG_TOTAL_SIZE (CONFIG_RCPU_SIZE + CONFIG_VLAN_SIZE + CONFIG_MPLS_SIZE + \ 201 CONFIG_HOST_SIZE + CONFIG_DEBUG_SIZE + CONFIG_PPSOUT_SIZE + \ 202 CONFIG_TIMESOURCE_SIZE + CONFIG_EXTRA_SIZE) 203 204 #define INFO_BASE_ADDR (0x19000bac) 205 #define CONFIG_BASE (0x19000c2c) 206 207 #define BOOT_STATUS_ADDR (0x19000500) 208 #define FAULT_STATUS_ADDR (0x19000504) 209 #define BKPT_LOCATION_ADDR (0x019000508) 210 211 #define MAX_BOOT_ITER (1000) /* cycles of 1ms to wait for the ToP boot to complete */ 212 213 /* 214 * All ports identifier. 215 * Ref. IEEE Std. 1588-2008, Chapters 13.12.1 and 15.3.1. 216 */ 217 #define PTP_IEEE1588_ALL_PORTS (0xffff) 218 219 /* 220 * PTP management message actions. 221 * Ref. IEEE Std. 1588-2008, Chapter 15.4.1.6, Table 38. 222 */ 223 #define PTP_MGMTMSG_GET (0) 224 #define PTP_MGMTMSG_SET (1) 225 #define PTP_MGMTMSG_RESP (2) 226 #define PTP_MGMTMSG_CMD (3) 227 #define PTP_MGMTMSG_ACK (4) 228 229 /* 230 * PTP management message ID (i.e. managementId) values. 231 * Ref. IEEE Std. 1588-2008, Chapter 15.5.2.3, Table 40. 232 */ 233 #define PTP_MGMTMSG_ID_CLOCK_DESCRIPTION (0x0001) 234 #define PTP_MGMTMSG_ID_USER_DESCRIPTION (0x0002) 235 236 #define PTP_MGMTMSG_ID_DEFAULT_DATASET (0x2000) 237 #define PTP_MGMTMSG_ID_CURRENT_DATASET (0x2001) 238 #define PTP_MGMTMSG_ID_PARENT_DATASET (0x2002) 239 #define PTP_MGMTMSG_ID_TIME_PROPERTIES_DATASET (0x2003) 240 #define PTP_MGMTMSG_ID_PORT_DATASET (0x2004) 241 242 #define PTP_MGMTMSG_ID_PRIORITY1 (0x2005) 243 #define PTP_MGMTMSG_ID_PRIORITY2 (0x2006) 244 #define PTP_MGMTMSG_ID_DOMAIN (0x2007) 245 #define PTP_MGMTMSG_ID_SLAVE_ONLY (0x2008) 246 #define PTP_MGMTMSG_ID_LOG_ANNOUNCE_INTERVAL (0x2009) 247 #define PTP_MGMTMSG_ID_ANNOUNCE_RECEIPT_TIMEOUT (0x200a) 248 #define PTP_MGMTMSG_ID_LOG_SYNC_INTERVAL (0x200b) 249 #define PTP_MGMTMSG_ID_VERSION_NUMBER (0x200c) 250 251 #define PTP_MGMTMSG_ID_ENABLE_PORT (0x200d) 252 #define PTP_MGMTMSG_ID_DISABLE_PORT (0x200e) 253 254 #define PTP_MGMTMSG_ID_TIME (0x200f) 255 #define PTP_MGMTMSG_ID_CLOCK_ACCURACY (0x2010) 256 #define PTP_MGMTMSG_ID_UTC_PROPERTIES (0x2011) 257 #define PTP_MGMTMSG_ID_TRACEABILITY_PROPERTIES (0x2012) 258 #define PTP_MGMTMSG_ID_TIMESCALE_PROPERTIES (0x2013) 259 260 #define PTP_MGMTMSG_ID_UNICAST_MASTER_TABLE (0x2018) 261 #define PTP_MGMTMSG_ID_UNICAST_MASTER_MAX_TABLE_SIZE (0x2019) 262 263 #define PTP_MGMTMSG_ID_ACCEPTABLE_MASTER_TABLE (0x201a) 264 #define PTP_MGMTMSG_ID_ACCEPTABLE_MASTER_TABLE_ENABLED (0x201b) 265 #define PTP_MGMTMSG_ID_ACCEPTABLE_MASTER_MAX_TABLE_SIZE (0x201c) 266 267 #define PTP_MGMTMSG_ID_TRANSPARENT_CLOCK_DEFAULT_DATASET (0x4000) 268 #define PTP_MGMTMSG_ID_TRANSPARENT_CLOCK_PORT_DATASET (0x4001) 269 #define PTP_MGMTMSG_ID_PRIMARY_DOMAIN (0x4002) 270 271 #define PTP_MGMTMSG_ID_DELAY_MECHANISM (0x6000) 272 #define PTP_MGMTMSG_ID_LOG_MIN_PDELAY_REQ_INTERVAL (0x6001) 273 274 /* 275 * Implementation-specific PTP management message IDs. 276 * Hits the standard management message get/set code. 277 */ 278 279 /* For now using from impln. specific range or can use the 280 range (E000-FFFE) to be assigned by an alternate PTP profile if required */ 281 #define PTP_MGMTMSG_ID_CLOCK_QUALITY (0xDF00) 282 #define PTP_MGMTMSG_ID_CLOCK_LOCAL_PRIORITY (0xDF01) 283 #define PTP_MGMTMSG_ID_CLOCK_PEER_AGE_TIMER (0xDF02) 284 #define PTP_MGMTMSG_ID_CLOCK_FLAG_FIELD_OVERRIDE (0xDF03) 285 #define PTP_MGMTMSG_ID_CLOCK_MAX_STEPS_REMOVED (0xDF04) 286 #define PTP_MGMTMSG_ID_CLOCK_PORTS_DROP_COUNT (0xDF05) 287 #define PTP_MGMTMSG_ID_PORT_PTSF_UNUSABLE (0xDF06) 288 #define PTP_MGMTMSG_ID_CLOCK_BMCA_FLAG_OVERRIDE (0xdF07) 289 #define PTP_MGMTMSG_ID_CLOCK_APTS_MODE_CHANGED (0xdF08) 290 291 #define PTP_MGMTMSG_ID_MODULAR_SYSTEM_ENABLED (0xdff4) 292 #define PTP_MGMTMSG_ID_PHYSYNC_STATE (0xdff5) 293 #define PTP_MGMTMSG_ID_OUTPUT_SYNCE (0xdff6) 294 #define PTP_MGMTMSG_ID_CLOCK_CLASS (0xdff7) 295 #define PTP_MGMTMSG_ID_TELECOM_PROFILE_ENABLED (0xdff8) 296 #define PTP_MGMTMSG_ID_PACKET_STATS (0xdff9) 297 #define PTP_MGMTMSG_ID_OUTPUT_SIGNALS (0xdffa) 298 #define PTP_MGMTMSG_ID_CHANNELS (0xdffb) 299 #define PTP_MGMTMSG_ID_PEER_DATASET_FIRST (0xdffc) 300 #define PTP_MGMTMSG_ID_PEER_DATASET_NEXT (0xdffd) 301 #define PTP_MGMTMSG_ID_FOREIGN_MASTER_DATASET (0xdffe) 302 #define PTP_MGMTMSG_ID_LOG_MIN_DELAY_REQ_INTERVAL (0xdfff) 303 304 /* 305 * Implementation-specific PTP management message IDs. 306 * Following hit the custom handler that does not depend on having an 307 * instantiated clock or correctly configured ports. 308 */ 309 #define PTP_MGMTMSG_ID_CREATE_CLOCK_INSTANCE (0xd000) 310 #define PTP_MGMTMSG_ID_CONFIGURE_CLOCK_PORT (0xd002) 311 #define PTP_MGMTMSG_ID_CONFIGURE_TOD_OUT (0xd004) 312 #define PTP_MGMTMSG_ID_CONFIGURE_TOD_IN (0xd005) 313 #define PTP_MGMTMSG_ID_SYNC_PHY (0xd006) 314 #define PTP_MGMTMSG_ID_SYNC_PHYTIME (0xd007) 315 316 #define PTP_MGMTMSG_ID_SERVO_START (0xd00d) 317 #define PTP_MGMTMSG_ID_SERVO_RESTART (0xd00e) 318 #define PTP_MGMTMSG_ID_SERVO_STOP (0xd00f) 319 #define PTP_MGMTMSG_ID_SERVO_CONFIGURATION (0xd010) 320 #define PTP_MGMTMSG_ID_SERVO_IPDV_CONFIGURATION (0xd011) 321 #define PTP_MGMTMSG_ID_SERVO_IPDV_PERFORMANCE (0xd012) 322 #define PTP_MGMTMSG_ID_SERVO_PERFORMANCE (0xd013) 323 #define PTP_MGMTMSG_ID_SERVO_COUNTERS_CLEAR (0xd014) 324 #define PTP_MGMTMSG_ID_SERVO_STATUS (0xd015) 325 #define PTP_MGMTMSG_ID_SERVO_THRESHOLD (0xd016) 326 327 #define PTP_MGMTMSG_ID_PORT_LATENCY (0xd017) 328 #define PTP_MGMTMSG_ID_LOG_LEVEL (0xd018) 329 330 #define PTP_MGMTMSG_ID_TUNNEL_ARP (0xd019) 331 #define PTP_MGMTMSG_ID_SHOW_SYSTEM_INFO (0xd01a) 332 333 #define PTP_MGMTMSG_ID_CHANNEL_STATUS (0xd01b) 334 335 #define PTP_MGMTMSG_ID_FREQUENCY (0xd01c) 336 337 /* T-DPLL support. */ 338 #define PTP_MGMTMSG_ID_TDPLL_BINDINGS (0xd01d) 339 #define PTP_MGMTMSG_ID_TDPLL_REFERENCE (0xd01e) 340 341 #define PTP_MGMTMSG_ID_TDPLL_PHASE_CONTROL (0xd01f) 342 #define PTP_MGMTMSG_ID_TDPLL_BANDWIDTH (0xd020) 343 344 #define PTP_MGMTMSG_ID_INPUT_CLOCK_ENABLED (0xd021) 345 #define PTP_MGMTMSG_ID_INPUT_CLOCK_L1MUX (0xd022) 346 #define PTP_MGMTMSG_ID_INPUT_CLOCK_FREQUENCY (0xd023) 347 #define PTP_MGMTMSG_ID_INPUT_CLOCK_MONITOR_DATA (0xd024) 348 349 #define PTP_MGMTMSG_ID_OUTPUT_CLOCK_ENABLED (0xd025) 350 #define PTP_MGMTMSG_ID_OUTPUT_CLOCK_SYNTH_FREQUENCY (0xd026) 351 #define PTP_MGMTMSG_ID_OUTPUT_CLOCK_DERIV_FREQUENCY (0xd027) 352 353 #define PTP_MGMTMSG_ID_HOLDOVER_DATA (0xd028) 354 #define PTP_MGMTMSG_ID_HOLDOVER_FREQUENCY (0xd029) 355 #define PTP_MGMTMSG_ID_HOLDOVER_MODE (0xd02a) 356 #define PTP_MGMTMSG_ID_HOLDOVER_RESET (0xd02b) 357 358 #define PTP_MGMTMSG_ID_ESMC_TUNNEL (0xd02c) 359 #define PTP_MGMTMSG_ID_ESMC_MAC (0xd02d) 360 361 #define PTP_MGMTMSG_ID_SERVO_PHASE_OFFSET (0xd02e) 362 363 #define PTP_MGMTMSG_ID_PHASE_OFFSET (0xd0ff) 364 365 #define PTP_MGMTMSG_ID_CLOCK_INFO_FLAGS (0xd100) 366 367 #define PTP_MGMTMSG_ID_SHUTDOWN (0xd101) 368 369 /* Management message maximum response size (octets). */ 370 #define PTP_MGMTMSG_RESP_MAX_SIZE_OCTETS (1024) 371 372 /* Management message empty TLV payload size (octets). */ 373 #define PTP_MGMTMSG_PAYLOAD_NULL_SIZE_OCTETS (0) 374 /* Management message minimum, non-empty TLV payload size (octets). */ 375 #define PTP_MGMTMSG_PAYLOAD_MIN_SIZE_OCTETS (2) 376 /* Management message CLOCK QUALITY size (octets) */ 377 #define PTP_MGMTMSG_PAYLOAD_CLOCK_QUALITY_MSG_SIZE_OCTETS (8) 378 /* Management message PEER_AGE_TIMER size (octets) */ 379 #define PTP_MGMTMSG_PAYLOAD_CLOCK_PEER_AGE_TIMER_SIZE_OCTETS (2) 380 /* Management message FLAG_FIELD_OVERRIDE size (octets) */ 381 #define PTP_MGMTMSG_PAYLOAD_CLOCK_FLAG_FIELD_OVERRIDE_SIZE_OCTETS (8) 382 /* Management message proprietary message TLV minimum payload size (octets). */ 383 #define PTP_MGMTMSG_PAYLOAD_MIN_PROPRIETARY_MSG_SIZE_OCTETS (6) 384 /* Management message proprietary message TLV indexed-get payload size (octets). */ 385 #define PTP_MGMTMSG_PAYLOAD_INDEXED_PROPRIETARY_MSG_SIZE_OCTETS (8) 386 /* Management message maximum USER_DESCIPTION TLV payload size (octets). */ 387 #define PTP_MGMTMSG_PAYLOAD_MAX_USER_DESCRIPTION_SIZE_OCTETS (32) 388 /* Management message DEFAULT_DATA_SET TLV payload size (octets). */ 389 #define PTP_MGMTMSG_PAYLOAD_DEFAULT_DATASET_SIZE_OCTETS (20) 390 /* Management message CURRENT_DATA_SET TLV payload size (octets). */ 391 #define PTP_MGMTMSG_PAYLOAD_CURRENT_DATASET_SIZE_OCTETS (18) 392 /* Management message PARENT_DATA_SET TLV payload size (octets). */ 393 #define PTP_MGMTMSG_PAYLOAD_PARENT_DATASET_SIZE_OCTETS (32) 394 /* Management message TIME TLV payload size (octets). */ 395 #define PTP_MGMTMSG_PAYLOAD_TIME_SIZE_OCTETS (10) 396 /* Management message UTC_PROPERTIES TLV payload size (octets). */ 397 #define PTP_MGMTMSG_PAYLOAD_UTC_PROPERTIES_SIZE_OCTETS (4) 398 /* Management message UNICAST_MASTER_TABLE TLV payload size (octets). */ 399 #define PTP_MGMTMSG_PAYLOAD_MAX_UNICAST_MASTER_TABLE_SIZE_OCTETS (1404) 400 /* Management message ACCEPTABLE_MASTER_TABLE TLV payload size (octets). */ 401 #define PTP_MGMTMSG_PAYLOAD_MAX_ACCEPTABLE_MASTER_TABLE_SIZE_OCTETS (1404) 402 /* Management message UNICAST_SLAVE_TABLE TLV payload size (octets). */ 403 #define PTP_MGMTMSG_PAYLOAD_MAX_UNICAST_SLAVE_TABLE_SIZE_OCTETS (1404) 404 /* Management message clock instance creation TLV payload size (octets). */ 405 #define PTP_MGMTMSG_PAYLOAD_CLOCK_INSTANCE_SIZE_OCTETS (56) 406 /* Management message configure clock port TLV payload size (octets). */ 407 #define PTP_MGMTMSG_PAYLOAD_CONFIGURE_CLOCK_PORT_SIZE_OCTETS (371) 408 /* Management message PORT_LATENCY TLV payload size (octets). */ 409 #define PTP_MGMTMSG_PAYLOAD_PORT_LATENCY_SIZE_OCTETS (22) 410 /* Management message LOG_LEVEL TLV payload size (octets). */ 411 #define PTP_MGMTMSG_PAYLOAD_LOG_LEVEL_SIZE_OCTETS (45) 412 /* Management message CHANNELS TLV payload size (octets). */ 413 #define PTP_MGMTMSG_PAYLOAD_CHANNELS_SIZE_OCTETS (83) 414 /* Management message OUTPUT_SIGNALS TLV payload size (octets). */ 415 #define PTP_MGMTMSG_PAYLOAD_OUTPUT_SIGNALS_SIZE_OCTETS (102) 416 /* Management message CONFIGURE_TOD_OUT TLV payload size (octets). */ 417 #define PTP_MGMTMSG_PAYLOAD_CONFIGURE_TOD_OUT_SIZE_OCTETS (180) 418 /* Management message CONFIGURE_TOD_IN TLV payload size (octets). */ 419 #define PTP_MGMTMSG_PAYLOAD_CONFIGURE_TOD_IN_SIZE_OCTETS (196) 420 /* Management message SYNC_PHY TLV payload size (octets). */ 421 #define PTP_MGMTMSG_PAYLOAD_SYNC_PHY_SIZE_OCTETS (16) 422 /* Management message servo configuration TLV payload size (octets). */ 423 #define PTP_MGMTMSG_PAYLOAD_SERVO_CONFIGURATION_SIZE_OCTETS (58) 424 /* Management message servo IPDV configuration TLV payload size (octets). */ 425 #define PTP_MGMTMSG_PAYLOAD_SERVO_IPDV_CONFIGURATION_SIZE_OCTETS (14) 426 /* Management message servo performance data TLV payload size (octets). */ 427 #define PTP_MGMTMSG_PAYLOAD_SERVO_PERFORMANCE_SIZE_OCTETS (223) 428 /* Management message servo IPDV performance data TLV payload size (octets). */ 429 #define PTP_MGMTMSG_PAYLOAD_SERVO_IPDV_PERFORMANCE_SIZE_OCTETS (54) 430 /* Management message servo status TVL payload size (octets). */ 431 #define PTP_MGMTMSG_PAYLOAD_SERVO_STATUS_SIZE_OCTETS (15) 432 /* Management message servo threshold payload size (octets). */ 433 #define PTP_MGMTMSG_PAYLOAD_SERVO_THRESHOLD_SIZE_OCTETS (22) 434 /* Management message TLV phase offset payload size (octets). */ 435 #define PTP_MGMTMSG_PAYLOAD_PHASE_OFFSET_SIZE_OCTETS (54) 436 /* Management message TLV phase offset payload size (octets). */ 437 #define PTP_MGMTMSG_PAYLOAD_SERVO_PHASE_OFFSET_SIZE_OCTETS (34) 438 /* Management message TLV frequency offset payload size (octets). */ 439 #define PTP_MGMTMSG_PAYLOAD_FREQUENCY_SIZE_OCTETS (34) 440 /* Management message modular system enabled TLV payload size (octets). */ 441 #define PTP_MGMTMSG_PAYLOAD_MODULAR_SYSTEM_ENABLED_SIZE_OCTETS (8) 442 /* Management message PTP clock class TLV payload size (octets). */ 443 #define PTP_MGMTMSG_PAYLOAD_CLOCK_CLASS_SIZE_OCTETS (8) 444 /* Management message telecom profile enabled TLV payload size (octets). */ 445 #define PTP_MGMTMSG_PAYLOAD_TELECOM_PROFILE_ENABLED_SIZE_OCTETS (8) 446 /* Management message packet statistics TLV minimum payload size (octets). */ 447 #define PTP_MGMTMSG_PAYLOAD_PACKET_STATS_MIN_SIZE_OCTETS (64) 448 /* Management message packet statistics clear payload size (octets). */ 449 #define PTP_MGMTMSG_PAYLOAD_PACKET_STATS_CLEAR_SIZE_OCTETS (8) 450 /* Management message packet drop stats payload size (octets). */ 451 #define PTP_MGMTMSG_PAYLOAD_PACKET_DROP_STATS_ENABLE_SIZE_OCTETS (2) 452 /* Management message tunnel ARP TLV payload size (octets). */ 453 #define PTP_MGMTMSG_PAYLOAD_TUNNEL_ARP_SIZE_OCTETS (8) 454 /* Management message channel status get TLV payload size (octets). */ 455 #define PTP_MGMTMSG_PAYLOAD_CHANNEL_STATUS_SIZE_OCTETS (104) 456 /* Management message SyncE output state TLV payload size (octets). */ 457 #define PTP_MGMTMSG_PAYLOAD_OUTPUT_SYNCE_SIZE_OCTETS (4) 458 /* Management message T-DPLL logical DPLL bindings TLV payload size (octets). */ 459 #define PTP_MGMTMSG_PAYLOAD_TDPLL_BINDINGS_SIZE_OCTETS (266) 460 /* Management message T-DPLL logical DPLL reference clocks TLV payload size (octets). */ 461 #define PTP_MGMTMSG_PAYLOAD_TDPLL_REFERENCE_SIZE_OCTETS (13) 462 /* Management message T-DPLL logical DPLL phase control TLV payload size (octets). */ 463 #define PTP_MGMTMSG_PAYLOAD_TDPLL_PHASE_CONTROL_SIZE_OCTETS (12) 464 /* Management message T-DPLL logical DPLL bandwidth TLV payload size (octets). */ 465 #define PTP_MGMTMSG_PAYLOAD_TDPLL_BANDWIDTH_SIZE_OCTETS (12) 466 /* Management message T-DPLL input clock enabled payload size (octets). */ 467 #define PTP_MGMTMSG_PAYLOAD_INPUT_CLOCK_ENABLED_SIZE_OCTETS (8) 468 /* Management message T-DPLL input clock L1 mux payload size (octets). */ 469 #define PTP_MGMTMSG_PAYLOAD_INPUT_CLOCK_L1MUX_SIZE_OCTETS (10) 470 /* Management message T-DPLL input clock frequency TLV payload size (octets). */ 471 #define PTP_MGMTMSG_PAYLOAD_INPUT_CLOCK_FREQUENCY_SIZE_OCTETS (16) 472 /* Management message T-DPLL input clock monitoring data TLV payload size (octets). */ 473 #define PTP_MGMTMSG_PAYLOAD_INPUT_CLOCK_MONITOR_DATA_SIZE_OCTETS (286) 474 /* Management message T-DPLL output clock enabled payload size (octets) */ 475 #define PTP_MGMTMSG_PAYLOAD_OUTPUT_CLOCK_ENABLED_SIZE_OCTETS (8) 476 /* Management message T-DPLL output clock synthesizer frequency TLV payload size (octets). */ 477 #define PTP_MGMTMSG_PAYLOAD_OUTPUT_CLOCK_SYNTH_FREQUENCY_SIZE_OCTETS (16) 478 /* Management message T-DPLL output clock derivative frequency TLV payload size (octets). */ 479 #define PTP_MGMTMSG_PAYLOAD_OUTPUT_CLOCK_DERIV_FREQUENCY_SIZE_OCTETS (12) 480 /* Management message T-DPLL holdover data TLV payload size (octets). */ 481 #define PTP_MGMTMSG_PAYLOAD_HOLDOVER_DATA_SIZE_OCTETS (32) 482 /* Management message T-DPLL holdover frequency TLV payload size (octets). */ 483 #define PTP_MGMTMSG_PAYLOAD_HOLDOVER_FREQUENCY_SIZE_OCTETS (12) 484 /* Management message T-DPLL holdover mode TLV payload size (octets). */ 485 #define PTP_MGMTMSG_PAYLOAD_HOLDOVER_MODE_SIZE_OCTETS (8) 486 /* Management message T-DPLL reset TLV payload size (octets). */ 487 #define PTP_MGMTMSG_PAYLOAD_HOLDOVER_RESET_SIZE_OCTETS (8) 488 /* Management message ESMC tunnel TLV payload size (octets). */ 489 #define PTP_MGMTMSG_PAYLOAD_ESMC_TUNNEL_SIZE_OCTETS (8) 490 /* Management message ESMC MAC address TLV payload size (octets). */ 491 #define PTP_MGMTMSG_PAYLOAD_ESMC_MAC_SIZE_OCTETS (14) 492 /* Management message PTSF UNUSABLE size (octets) */ 493 #define PTP_MGMTMSG_PAYLOAD_PTSF_UNUSABLE_MSG_SIZE_OCTETS (14) 494 /* Management message BMCA_FLAG_OVERRIDE size (octets) */ 495 #define PTP_MGMTMSG_PAYLOAD_CLOCK_BMCA_FLAG_OVERRIDE_SIZE_OCTETS (8) 496 /* Management message APTS_MODE_CHANGED size (octets) */ 497 #define PTP_MGMTMSG_PAYLOAD_CLOCK_APTS_MODE_CHANGED_SIZE_OCTETS (8) 498 /* Management message PTP CLOCK INFO FLAGS size (octets) */ 499 #define PTP_MGMTMSG_PAYLOAD_CLOCK_INFO_FLAGS_SIZE_OCTETS (10) 500 501 /* PTP Header parameters and constants.*/ 502 /* L2 header size (octets). */ 503 #define PTP_L2HDR_SIZE_OCTETS (12) 504 /* IEEE 802.1Q, VLAN tagging header size (octets). */ 505 #define PTP_VLANHDR_SIZE_OCTETS (4) 506 /* 507 * VLAN identifier (VID) size (octets). 508 * NOTICE: VID is 12-bit value. 509 */ 510 #define PTP_VLANHDR_VID_SIZE_OCTETS (2) 511 /* VLAN identifier (VID) offset (octets). */ 512 #define PTP_VLANHDR_VID_OFFSET_OCTETS (2) 513 514 /* Ethertype size (octets). */ 515 #define PTP_ETHHDR_SIZE_OCTETS (2) 516 517 /* 518 * IPv4 header start index. 519 * NOTICE: Assumes single VLAN tag. 520 */ 521 #define PTP_IPV4HDR_START_IDX (PTP_L2HDR_SIZE_OCTETS + \ 522 PTP_VLANHDR_SIZE_OCTETS + \ 523 PTP_ETHHDR_SIZE_OCTETS) 524 525 /* IPv4 header offset of total message length (octets). */ 526 #define PTP_IPV4HDR_MSGLEN_OFFSET_OCTETS (2) 527 /* IPv4 header offset of source IP address (octets). */ 528 #define PTP_IPV4HDR_SRC_IPADDR_OFFSET_OCTETS (12) 529 /* IPv4 header offset of header checksum (octets). */ 530 #define PTP_IPV4HDR_HDR_CHKSUM_OFFSET_OCTETS (10) 531 /* 532 * IPv4 header size (octets). 533 * ASSUMPTION: Field 13 (Options) omitted. 534 */ 535 #define PTP_IPV4HDR_SIZE_OCTETS (20) 536 537 #define PTP_UDPHDR_START_IDX (PTP_IPV4HDR_START_IDX + \ 538 PTP_IPV4HDR_SIZE_OCTETS) 539 540 /* UDP header size (octets). */ 541 #define PTP_UDPHDR_SIZE_OCTETS (8) 542 /* UDP header offset of destination port (octets). */ 543 #define PTP_UDPHDR_DESTPORT_OFFSET_OCTETS (2) 544 /* UDP header offset of message length (octets). */ 545 #define PTP_UDPHDR_MSGLEN_OFFSET_OCTETS (4) 546 /* UDP header offset of checksum (octets). */ 547 #define PTP_UDPHDR_CHKSUM_OFFSET_OCTETS (6) 548 549 #define PTP_PTPHDR_START_IDX (PTP_UDPHDR_START_IDX + \ 550 PTP_UDPHDR_SIZE_OCTETS) 551 /* PTP header size (octets). */ 552 #define PTP_PTPHDR_SIZE_OCTETS (34) 553 /* PTP header offset of PTP message length (octets). */ 554 #define PTP_PTPHDR_MSGLEN_OFFSET_OCTETS (2) 555 /* PTP header offset of PTP domain (octets). */ 556 #define PTP_PTPHDR_DOMAIN_OFFSET_OCTETS (4) 557 /* PTP header offset of source port identity (octets). */ 558 #define PTP_PTPHDR_SRCPORT_OFFSET_OCTETS (20) 559 /* PTP header offset of PTP sequence ID (octets). */ 560 #define PTP_PTPHDR_SEQID_OFFSET_OCTETS (30) 561 562 #define PTP_MGMTHDR_START_IDX (PTP_PTPHDR_START_IDX + \ 563 PTP_PTPHDR_SIZE_OCTETS) 564 565 /* Management header size (octets). */ 566 #define PTP_MGMTHDR_SIZE_OCTETS (14) 567 /* Management header offset of management message actions (octets). */ 568 #define PTP_MGMTHDR_ACTION_OFFSET_OCTETS (12) 569 570 /* 571 * Message TLV header size (octets). 572 * NOTICE: Excludes message payload. 573 */ 574 #define PTP_TLVHDR_SIZE_OCTETS (6) 575 /* Message TLV header offset of message TLV type (octets). */ 576 #define PTP_TLVHDR_TYP_OFFSET_OCTETS (0) 577 /* Message TLV header offset of message TLV length (octets). */ 578 #define PTP_TLVHDR_LEN_OFFSET_OCTETS (2) 579 /* 580 * Message TLV header offset of message TLV value prefix, 581 * i.e. management ID (octets). 582 */ 583 #define PTP_TLVHDR_VAL_PREFIX_OFFSET_OCTETS (4) 584 /* Message TLV header TLV value prefix size (octets). */ 585 #define PTP_TLVHDR_VAL_PREFIX_SIZE_OCTETS (2) 586 587 /* Management message maximum size (octets). */ 588 #define PTP_MGMTMSG_TOTAL_SIZE_OCTETS (1500) 589 590 #define PTP_MGMTMSG_TOTAL_HEADER_SIZE (PTP_MGMTHDR_START_IDX + \ 591 PTP_MGMTHDR_SIZE_OCTETS + \ 592 PTP_TLVHDR_SIZE_OCTETS) 593 594 /* Payload maximum size (octets). */ 595 #define PTP_MGMTMSG_PAYLOAD_MAX_SIZE_OCTETS (PTP_MGMTMSG_TOTAL_SIZE_OCTETS - ( \ 596 PTP_L2HDR_SIZE_OCTETS + \ 597 PTP_VLANHDR_SIZE_OCTETS + \ 598 PTP_ETHHDR_SIZE_OCTETS + \ 599 PTP_IPV4HDR_SIZE_OCTETS + \ 600 PTP_UDPHDR_SIZE_OCTETS + \ 601 PTP_PTPHDR_SIZE_OCTETS + \ 602 PTP_MGMTHDR_SIZE_OCTETS + \ 603 PTP_TLVHDR_SIZE_OCTETS)) 604 605 606 #define PTP_SIGHDR_START_IDX (PTP_PTPHDR_START_IDX) 607 #define PTP_SIGHDR_TGTCLOCK_OFFSET_OCTETS (PTP_PTPHDR_SIZE_OCTETS) 608 #define PTP_SIGHDR_TGTPORT_OFFSET_OCTETS (PTP_PTPHDR_SIZE_OCTETS + \ 609 BCM_PTP_CLOCK_EUID_IEEE1588_SIZE) 610 /* 611 * PTP signaling message header size (octets). 612 * NOTICE: Includes PTP header and target port identity. 613 * Ref. IEEE Std. 1588-2008, Sect. 13.12.2. 614 */ 615 #define PTP_SIGHDR_SIZE_OCTETS (PTP_PTPHDR_SIZE_OCTETS + \ 616 BCM_PTP_CLOCK_EUID_IEEE1588_SIZE + 2) 617 618 619 #define PTP_UCSIG_TLV_START_IDX (PTP_L2HDR_SIZE_OCTETS + \ 620 PTP_VLANHDR_SIZE_OCTETS + \ 621 PTP_ETHHDR_SIZE_OCTETS + \ 622 PTP_IPV4HDR_SIZE_OCTETS + \ 623 PTP_UDPHDR_SIZE_OCTETS + \ 624 PTP_SIGHDR_SIZE_OCTETS) 625 /* 626 * PTP unicast transmission signaling message 627 * REQUEST_UNICAST_TRANSMISSION TLV size (octets). 628 */ 629 #define PTP_UCSIG_REQUEST_TLV_SIZE_OCTETS ((2 * PTP_MAX_NETW_ADDR_SIZE) + \ 630 PTP_MAX_L2_HEADER_LENGTH + 12) 631 /* 632 * PTP unicast transmission signaling message 633 * CANCEL_UNICAST_TRANSMISSION TLV size (octets). 634 */ 635 #define PTP_UCSIG_CANCEL_TLV_SIZE_OCTETS (PTP_MAX_NETW_ADDR_SIZE + 7) 636 637 /* 638 * PTP unicast transmission signaling message TLV 639 * offset of TLV length (octets). 640 */ 641 #define PTP_UCSIG_TLVLEN_OFFSET_OCTETS (2) 642 /* 643 * PTP unicast transmission signaling message TLV 644 * offset of message type (octets). 645 */ 646 #define PTP_UCSIG_MSGTYPE_OFFSET_OCTETS (4) 647 /* 648 * PTP unicast transmission signaling message TLV 649 * offset of interval parameter (octets). 650 */ 651 #define PTP_UCSIG_INTERVAL_OFFSET_OCTETS (5) 652 /* 653 * PTP unicast transmission signaling message TLV 654 * offset of duration parameter (octets). 655 */ 656 #define PTP_UCSIG_DURATION_OFFSET_OCTETS (6) 657 /* 658 * PTP unicast transmission signaling message TLV 659 * offset of address type (octets). 660 */ 661 #define PTP_UCSIG_ADDRTYPE_OFFSET_OCTETS (10) 662 /* 663 * PTP unicast transmission signaling message TLV 664 * offset of peer address (octets). 665 */ 666 #define PTP_UCSIG_PEERADDR_OFFSET_OCTETS (11) 667 /* 668 * PTP unicast transmission signaling message TLV 669 * offset of L2 header length value (octets). 670 */ 671 #define PTP_UCSIG_L2HDRLEN_OFFSET_OCTETS (27) 672 /* 673 * PTP unicast transmission signaling message TLV 674 * offset of L2 header (octets). 675 */ 676 #define PTP_UCSIG_L2HDR_OFFSET_OCTETS (28) 677 678 /* 679 * PTP cancel unicast transmission signaling message TLV 680 * offset of reserved field (octets). 681 */ 682 #define PTP_UCSIG_CANCEL_RESERVED_OFFSET_OCTETS (5) 683 /* 684 * PTP cancel unicast transmission signaling message TLV 685 * offset of address type (octets). 686 * NOTICE: Address type and peer address data are custom 687 * additions to TLV data. 688 */ 689 #define PTP_UCSIG_CANCEL_ADDRTYPE_OFFSET_OCTETS (6) 690 /* 691 * PTP cancel unicast transmission signaling message TLV 692 * offset of peer address (octets). 693 * NOTICE: Address type and peer address data are custom 694 * additions to TLV data. 695 */ 696 #define PTP_UCSIG_CANCEL_PEERADDR_OFFSET_OCTETS (7) 697 698 /* 699 * PTP unicast transmission signaling message 700 * REQUEST_UNICAST_TRANSMISSION TLV total size (octets). 701 */ 702 #define PTP_UCSIG_REQUEST_TOTAL_SIZE_OCTETS (PTP_UCSIG_TLV_START_IDX + \ 703 PTP_UCSIG_REQUEST_TLV_SIZE_OCTETS) 704 705 /* 706 * PTP unicast transmission signaling message 707 * CANCEL_UNICAST_TRANSMISSION TLV total size (octets). 708 */ 709 #define PTP_UCSIG_CANCEL_TOTAL_SIZE_OCTETS (PTP_UCSIG_TLV_START_IDX + \ 710 PTP_UCSIG_CANCEL_TLV_SIZE_OCTETS) 711 712 /* PTP clock presets. */ 713 #define PTP_CLOCK_PRESETS_ANNOUNCE_RECEIPT_TIMEOUT_MINIMUM (2) 714 #define PTP_CLOCK_PRESETS_ANNOUNCE_RECEIPT_TIMEOUT_DEFAULT (3) 715 #define PTP_CLOCK_PRESETS_ANNOUNCE_RECEIPT_TIMEOUT_MAXIMUM (255) 716 717 #define PTP_CLOCK_PRESETS_LOG_ANNOUNCE_INTERVAL_MINIMUM (-2) 718 #define PTP_CLOCK_PRESETS_LOG_ANNOUNCE_INTERVAL_DEFAULT (1) 719 #define PTP_CLOCK_PRESETS_LOG_ANNOUNCE_INTERVAL_MAXIMUM (4) 720 721 #define PTP_CLOCK_PRESETS_LOG_SYNC_INTERVAL_MINIMUM (-7) 722 #define PTP_CLOCK_PRESETS_LOG_SYNC_INTERVAL_DEFAULT (-5) 723 #define PTP_CLOCK_PRESETS_LOG_SYNC_INTERVAL_MAXIMUM (1) 724 725 #define PTP_CLOCK_PRESETS_LOG_MIN_DELAY_REQ_INTERVAL_MINIMUM (-7) 726 #define PTP_CLOCK_PRESETS_LOG_MIN_DELAY_REQ_INTERVAL_DEFAULT (-5) 727 #define PTP_CLOCK_PRESETS_LOG_MIN_DELAY_REQ_INTERVAL_MAXIMUM (5) 728 729 #define PTP_CLOCK_PRESETS_DOMAIN_NUMBER_MINIMUM (0) 730 #define PTP_CLOCK_PRESETS_DOMAIN_NUMBER_DEFAULT (0) 731 #define PTP_CLOCK_PRESETS_DOMAIN_NUMBER_MAXIMUM (255) 732 733 #define PTP_CLOCK_PRESETS_PRIORITY1_MINIMUM (0) 734 #define PTP_CLOCK_PRESETS_PRIORITY1_DEFAULT (128) 735 #define PTP_CLOCK_PRESETS_PRIORITY1_MAXIMUM (255) 736 737 #define PTP_CLOCK_PRESETS_PRIORITY2_MINIMUM (0) 738 #define PTP_CLOCK_PRESETS_PRIORITY2_DEFAULT (128) 739 #define PTP_CLOCK_PRESETS_PRIORITY2_MAXIMUM (255) 740 741 #define PTP_CLOCK_PRESETS_TELECOM_LOG_ANNOUNCE_INTERVAL_MINIMUM (-3) 742 #define PTP_CLOCK_PRESETS_TELECOM_LOG_ANNOUNCE_INTERVAL_DEFAULT (1) 743 #define PTP_CLOCK_PRESETS_TELECOM_LOG_ANNOUNCE_INTERVAL_MAXIMUM (4) 744 745 #define PTP_CLOCK_PRESETS_TELECOM_LOG_SYNC_INTERVAL_MINIMUM (-7) 746 #define PTP_CLOCK_PRESETS_TELECOM_LOG_SYNC_INTERVAL_DEFAULT (-5) 747 #define PTP_CLOCK_PRESETS_TELECOM_LOG_SYNC_INTERVAL_MAXIMUM (4) 748 749 #define PTP_CLOCK_PRESETS_TELECOM_LOG_MIN_DELAY_REQ_INTERVAL_MINIMUM (-7) 750 #define PTP_CLOCK_PRESETS_TELECOM_LOG_MIN_DELAY_REQ_INTERVAL_DEFAULT (-5) 751 #define PTP_CLOCK_PRESETS_TELECOM_LOG_MIN_DELAY_REQ_INTERVAL_MAXIMUM (4) 752 753 #define PTP_CLOCK_PRESETS_TELECOM_DOMAIN_NUMBER_MINIMUM (4) 754 #define PTP_CLOCK_PRESETS_TELECOM_DOMAIN_NUMBER_DEFAULT (4) 755 #define PTP_CLOCK_PRESETS_TELECOM_DOMAIN_NUMBER_MAXIMUM (23) 756 757 /* PTP clock presets for TELECOM PHASE PROFILE - ITU-T 8275.1 */ 758 759 #define PTP_CLOCK_PRESETS_TELECOM_PHASE_DOMAIN_NUMBER_MINIMUM (24) 760 #define PTP_CLOCK_PRESETS_TELECOM_PHASE_DOMAIN_NUMBER_DEFAULT (24) 761 #define PTP_CLOCK_PRESETS_TELECOM_PHASE_DOMAIN_NUMBER_MAXIMUM (43) 762 763 #define PTP_CLOCK_PRESETS_TELECOM_PHASE_PRIORITY2_TSC_DEFAULT (255) 764 #define PTP_CLOCK_PRESETS_TELECOM_PHASE_PRIORITY2_TBC_DEFAULT (128) 765 766 #define PTP_CLOCK_PRESETS_TELECOM_PHASE_LOG_ANNOUNCE_INTERVAL_DEFAULT (-3) 767 #define PTP_CLOCK_PRESETS_TELECOM_PHASE_LOG_SYNC_INTERVAL_DEFAULT (-4) 768 #define PTP_CLOCK_PRESETS_TELECOM_PHASE_LOG_MIN_DELAY_REQ_INTERVAL_DEFAULT (-4) 769 770 #define PTP_CLOCK_PRESETS_TELECOM_MAX_STEPS_REMOVED_DEFAULT (255) 771 772 /* PTP clock presets for G8275.2 PROFILE - ITU-T 8275.2 */ 773 774 #define PTP_CLOCK_PRESETS_G8275P2_DOMAIN_NUMBER_MINIMUM (44) 775 #define PTP_CLOCK_PRESETS_G8275P2_DOMAIN_NUMBER_DEFAULT (44) 776 #define PTP_CLOCK_PRESETS_G8275P2_DOMAIN_NUMBER_MAXIMUM (63) 777 778 #define PTP_CLOCK_PRESETS_G8275P2_PRIORITY1_MINIMUM (128) 779 #define PTP_CLOCK_PRESETS_G8275P2_PRIORITY1_DEFAULT (128) 780 #define PTP_CLOCK_PRESETS_G8275P2_PRIORITY1_MAXIMUM (128) 781 782 #define PTP_CLOCK_PRESETS_G8275P2_PRIORITY2_MINIMUM (0) 783 #define PTP_CLOCK_PRESETS_G8275P2_PRIORITY2_DEFAULT (128) 784 #define PTP_CLOCK_PRESETS_G8275P2_PRIORITY2_MAXIMUM (255) 785 786 #define PTP_CLOCK_PRESETS_G8275P2_LOG_ANNOUNCE_INTERVAL_MINIMUM (-3) 787 #define PTP_CLOCK_PRESETS_G8275P2_LOG_ANNOUNCE_INTERVAL_DEFAULT (0) 788 #define PTP_CLOCK_PRESETS_G8275P2_LOG_ANNOUNCE_INTERVAL_MAXIMUM (0) 789 790 #define PTP_CLOCK_PRESETS_G8275P2_LOG_SYNC_INTERVAL_MINIMUM (-7) 791 #define PTP_CLOCK_PRESETS_G8275P2_LOG_SYNC_INTERVAL_DEFAULT (-4) 792 #define PTP_CLOCK_PRESETS_G8275P2_LOG_SYNC_INTERVAL_MAXIMUM (0) 793 794 #define PTP_CLOCK_PRESETS_G8275P2_LOG_MIN_DELAY_REQ_INTERVAL_MINIMUM (-7) 795 #define PTP_CLOCK_PRESETS_G8275P2_LOG_MIN_DELAY_REQ_INTERVAL_DEFAULT (-4) 796 #define PTP_CLOCK_PRESETS_G8275P2_LOG_MIN_DELAY_REQ_INTERVAL_MAXIMUM (0) 797 798 #define PTP_CLOCK_PRESETS_G8275P2_PRIORITY2_TSC_DEFAULT (255) 799 #define PTP_CLOCK_PRESETS_G8275P2_PRIORITY2_TBC_DEFAULT (128) 800 801 #define BCM_PTP_SIGNAL_G8275P2_REQUEST_UC_MINIMUM_DURATION_SEC (60) 802 #define BCM_PTP_SIGNAL_G8275P2_REQUEST_UC_DEFAULT_DURATION_SEC (300) 803 #define BCM_PTP_SIGNAL_G8275P2_REQUEST_UC_MAXIMUM_DURATION_SEC (1000) 804 805 #define PTP_CLOCK_PRESETS_G8275P2_ANNOUNCE_RECEIPT_TIMEOUT_DEFAULT (2) 806 /* 807 * PTP clock configuration flags. 808 * NOTE: Flags complement those defined in /include/bcm/ptp.h. 809 */ 810 811 /* Sync-triggered Delay Requests */ 812 #define PTP_CLOCK_FLAGS_TRIGGERED_DELREQ (1u) 813 /* Fixed-interval Delay Requests */ 814 #define PTP_CLOCK_FLAGS_FIXED_DELREQ (2u) 815 /* One-way operation bit. */ 816 #define PTP_CLOCK_FLAGS_ONEWAY_BIT (3u) 817 /* Telecom profile bit. */ 818 #define PTP_CLOCK_FLAGS_TELECOM_PROFILE_BIT (4u) 819 /* Bit 5 currently unused */ 820 /* */ 821 /* Alternate master Delay_Req messages bit. */ 822 #define PTP_CLOCK_FLAGS_DELREQ_ALTMASTER_BIT (6u) 823 /* Set Sync OAM register, and override servo-reported phase */ 824 #define PTP_CLOCK_FLAGS_SYNCOAM_BIT (7u) 825 826 /* Bits#8-11 : used to represent profile type */ 827 #define PTP_CLOCK_FLAGS_PROFILE_TYPE_START_BIT (8u) 828 829 /* Bits#12 : G.8275.1 profile: Currently developed for DNX devices only - Used 830 * to represent new feature to reduce replication of Delay request and Delay Resp. 831 * packets over pipeline which have following feature: 832 * a) for ptp slave ports, delay request will be sent to rx port of master's 833 * announce packets. 834 * b) for ptp master ports, delay response will be sent to rx port of slave's 835 * delay request packets. 836 * d) This feature not applicable to other ptp packets 837 */ 838 #define PTP_CLOCK_FLAGS_TARGETED_DELREQ_DELRESP_TX_BIT (12u) 839 840 /* Bits#13 : G.8275.1 profile: Currently developed for DNX devices only - 841 * can be used to send untagged delay request and delay resp. packets 842 * if ptp port is configured tagged port, - mainly used with 843 * TARGETED_DELREQ_DELRESP_BIT flag as vlan translation 844 * is not available at EP for packets sent directly without EP processing. 845 */ 846 #define PTP_CLOCK_FLAGS_UNTAGGED_DELREQ_DELRESP_TX_BIT (13u) 847 848 /* Not passed through to TOP: */ 849 /* Multi-TLV signaling message support bit. */ 850 #define PTP_CLOCK_FLAGS_SIGNALING_MULTI_TLV_BIT (30u) 851 852 /* PTP clock MAC address size (bytes). */ 853 #define PTP_MAC_ADDR_SIZE_BYTES (6) 854 /* PTP clock IPv4 address size. */ 855 #define PTP_IPV4_ADDR_SIZE_BYTES (4) 856 /* PTP clock IPv6 address size. */ 857 #define PTP_IPV6_ADDR_SIZE_BYTES (16) 858 /* Maximum size of address (octets). */ 859 #define PTP_MAX_NETW_ADDR_SIZE (16) 860 /* 861 * Maximum length of packet header before IPv4/IPv6 header. 862 * NOTE: Device-side compliant L2 header size. 863 */ 864 #define PTP_MAX_L2_HEADER_LENGTH (32) 865 /* Size of L2 headers used in messaging to TOP */ 866 #define PTP_MSG_L2_HEADER_LENGTH (64) 867 /* 868 * Maximum number of entries in a unicast master table of a PTP clock. 869 * NOTICE: This value may not be configurable for some ToP Firmwares. 870 */ 871 #ifndef PTP_MAX_UNICAST_MASTER_TABLE_ENTRIES 872 #define PTP_MAX_UNICAST_MASTER_TABLE_ENTRIES (10) 873 #endif 874 875 /* Maximum number of entries in an acceptable master table of a PTP clock. 876 * NOTICE: This value may not be configurable for some ToP Firmwares. 877 */ 878 #ifndef PTP_MAX_ACCEPTABLE_MASTER_TABLE_ENTRIES 879 #define PTP_MAX_ACCEPTABLE_MASTER_TABLE_ENTRIES (PTP_MAX_UNICAST_MASTER_TABLE_ENTRIES) 880 #endif 881 882 /* Maximum total number of unicast slave entries 883 * NOTICE: This value may not be configurable for some ToP Firmwares. 884 */ 885 #if defined(PTP_KEYSTONE_STACK) 886 /* Smaller limits on peers & slaves for Keystone stack */ 887 #ifndef PTP_MAX_UNICAST_SLAVE_TABLE_ENTRIES 888 #define PTP_MAX_UNICAST_SLAVE_TABLE_ENTRIES (50) 889 #endif /* PTP_MAX_UNICAST_SLAVE_TABLE_ENTRIES */ 890 #else 891 /* Non-Keystone stack */ 892 #ifndef PTP_MAX_UNICAST_SLAVE_TABLE_ENTRIES 893 #define PTP_MAX_UNICAST_SLAVE_TABLE_ENTRIES (250) 894 #endif /* PTP_MAX_UNICAST_SLAVE_TABLE_ENTRIES */ 895 #endif /* PTP_KEYSTONE_STACK */ 896 897 /* Maximum number of multicast slave stats entries. 898 * NOTICE: This value may not be configurable for some ToP Firmwares. 899 */ 900 #ifndef PTP_MAX_MULTICAST_SLAVE_STATS_ENTRIES 901 #define PTP_MAX_MULTICAST_SLAVE_STATS_ENTRIES (40) 902 #endif 903 904 /* Infinite unicast message transmission duration. */ 905 #define PTP_UNICAST_NEVER_EXPIRE (0xffffffff) 906 907 /* Flags. */ 908 #define PTP_SIGNALING_ANNOUNCE_SERVICE_BIT (0u) 909 #define PTP_SIGNALING_SYNC_SERVICE_BIT (1u) 910 #define PTP_SIGNALING_DELAYRESP_SERVICE_BIT (2u) 911 912 /* Size of outgoing tunneled signaling/management packet buffer (bytes) */ 913 #define BCM_PTP_TUNNEL_QUEUE_SIZE (10240) 914 915 /* Size of timestamp packet pointers buffer */ 916 #define BCM_PTP_TIMESTAMP_QUEUE_SIZE (256) 917 918 /* Data protection macros. */ 919 #define PTP_MUTEX_TAKE(__mutex__, __usec__) \ 920 do { \ 921 int __rv__ = _bcm_ptp_mutex_take(__mutex__, __usec__); \ 922 if (BCM_FAILURE(__rv__)) { \ 923 bsl_printf("%s() failed _bcm_ptp_mutex_take() returned %d : %s\n", \ 924 FUNCTION_NAME(), __rv__, bcm_errmsg(__rv__)); \ 925 return BCM_E_INTERNAL; \ 926 } \ 927 } while (0) 928 929 #define PTP_MUTEX_GIVE(__mutex__) \ 930 do { \ 931 int __rv__ = _bcm_ptp_mutex_give(__mutex__); \ 932 if (BCM_FAILURE(__rv__)) { \ 933 bsl_printf("%s() failed _bcm_ptp_mutex_give() returned %d : %s\n", \ 934 FUNCTION_NAME(), __rv__, bcm_errmsg(__rv__)); \ 935 return BCM_E_INTERNAL; \ 936 } \ 937 } while (0) 938 939 #define PTP_MUTEX_RELEASE_RETURN(__mutex__, __rv__) \ 940 do { \ 941 _bcm_ptp_mutex_give(__mutex__); \ 942 return __rv__; \ 943 } while (0) 944 945 /* Types. */ 946 typedef enum _bcm_ptp_memstate_e 947 { 948 PTP_MEMSTATE_FAILURE = -1, 949 PTP_MEMSTATE_STARTUP = 0, 950 PTP_MEMSTATE_INITIALIZED = 1, 951 PTP_MEMSTATE_HALTING = 2 952 } _bcm_ptp_memstate_t; 953 954 /* dispatchable: initialize the transport mechanism to the ToP */ 955 typedef int _bcm_ptp_transport_init_t( 956 int unit, 957 bcm_ptp_stack_id_t ptp_id, 958 bcm_mac_t *src_mac, 959 bcm_mac_t *dest_mac, 960 bcm_ip_t src_ip, 961 bcm_ip_t dest_ip, 962 uint16 vlan, 963 uint8 prio, 964 bcm_pbmp_t top_bitmap); 965 966 typedef enum _bcm_ptp_transport_type_e { 967 PTP_MESSAGE_TO_TOP, 968 PTP_TUNNEL_TO_TOP, 969 PTP_TUNNEL_FROM_TOP, 970 PTP_TUNNEL_SINGLE_TO_TOP /* same as _TO_TOP, but with no port index header */ 971 } _bcm_ptp_transport_type_t; 972 973 /* dispatchable: transmit a command to the ToP */ 974 typedef int _bcm_ptp_transport_tx_t( 975 int unit, 976 bcm_ptp_stack_id_t ptp_id, 977 int clock_num, 978 _bcm_ptp_transport_type_t transport, 979 uint8 *hdr, 980 int hdr_len, 981 uint8 *message, 982 int message_len); 983 984 /* dispatchable: wait (if applicable) until the last command to the ToP has been received */ 985 typedef int _bcm_ptp_transport_tx_completion_t( 986 int unit, 987 bcm_ptp_stack_id_t ptp_id); 988 989 /* dispatchable: free a buffer containing a received response */ 990 typedef int _bcm_ptp_transport_rx_free_t( 991 int unit, 992 bcm_ptp_stack_id_t ptp_id, 993 uint8 *data); 994 995 /* dispatchable: tear down the transport mechanism to the ToP */ 996 typedef int _bcm_ptp_transport_terminate_t( 997 int unit, 998 bcm_ptp_stack_id_t ptp_id); 999 1000 1001 /****************************************************/ 1002 /* constants shared with firmware */ 1003 1004 #define MBOX_STATUS_EMPTY (0) 1005 #define MBOX_STATUS_ATTN_TOP_CMD (1) 1006 #define MBOX_STATUS_ATTN_TOP_TUNNEL_TO_TOP (2) 1007 #define MBOX_STATUS_ATTN_TOP_TUNNEL_EXTERNAL (3) 1008 #define MBOX_STATUS_ATTN_HOST_RESP (4) 1009 #define MBOX_STATUS_ATTN_HOST_EVENT (5) 1010 #define MBOX_STATUS_ATTN_HOST_TUNNEL (6) 1011 #define MBOX_STATUS_PENDING_TOP (7) 1012 #define MBOX_STATUS_PENDING_HOST (8) 1013 #define MBOX_STATUS_ATTN_HOST_TIMESTAMPS (9) 1014 1015 #define MBOX_TUNNEL_MSG_TYPE_OFFSET (0) 1016 #define MBOX_TUNNEL_PORT_NUM_OFFSET (2) 1017 #define MBOX_TUNNEL_PROTOCOL_OFFSET (4) 1018 #define MBOX_TUNNEL_SRC_ADDR_OFFS_OFFSET (6) 1019 #define MBOX_TUNNEL_PTP_OFFS_OFFSET (8) 1020 #define MBOX_TUNNEL_PACKET_OFFSET (10) 1021 1022 /* Servo fixed-point conversion factors. */ 1023 #define PTP_SERVO_OCXO_FREQ_OFFSET_FIXEDPOINT_SCALEFACTOR (1000) 1024 #define PTP_SERVO_FWD_FLOW_WEIGHT_FIXEDPOINT_SCALEFACTOR (1000) 1025 #define PTP_SERVO_FWD_FLOW_TRANSACTIONS_PCT_FIXEDPOINT_SCALEFACTOR (1000) 1026 #define PTP_SERVO_FWD_MIN_TDEV_FIXEDPOINT_SCALEFACTOR (1000) 1027 #define PTP_SERVO_FWD_MAFIE_FIXEDPOINT_SCALEFACTOR (1000) 1028 #define PTP_SERVO_FWD_MIN_CLUSTER_WIDTH_FIXEDPOINT_SCALEFACTOR (1000) 1029 #define PTP_SERVO_FWD_MODE_WIDTH_FIXEDPOINT_SCALEFACTOR (1000) 1030 #define PTP_SERVO_REV_FLOW_WEIGHT_FIXEDPOINT_SCALEFACTOR (1000) 1031 #define PTP_SERVO_REV_FLOW_TRANSACTIONS_PCT_FIXEDPOINT_SCALEFACTOR (1000) 1032 #define PTP_SERVO_REV_MIN_TDEV_FIXEDPOINT_SCALEFACTOR (1000) 1033 #define PTP_SERVO_REV_MAFIE_FIXEDPOINT_SCALEFACTOR (1000) 1034 #define PTP_SERVO_REV_MIN_CLUSTER_WIDTH_FIXEDPOINT_SCALEFACTOR (1000) 1035 #define PTP_SERVO_REV_MODE_WIDTH_FIXEDPOINT_SCALEFACTOR (1000) 1036 #define PTP_SERVO_FREQ_CORRECTION_FIXEDPOINT_SCALEFACTOR (1000) 1037 #define PTP_SERVO_PHASE_CORRECTION_FIXEDPOINT_SCALEFACTOR (1000) 1038 #define PTP_SERVO_TDEV_ESTIMATE_FIXEDPOINT_SCALEFACTOR (1000) 1039 #define PTP_SERVO_MDEV_ESTIMATE_FIXEDPOINT_SCALEFACTOR (1000) 1040 #define PTP_SERVO_RESIDUAL_PHASE_ERROR_FIXEDPOINT_SCALEFACTOR (1000) 1041 #define PTP_SERVO_MIN_ROUNDTRIP_DELAY_FIXEDPOINT_SCALEFACTOR (1000) 1042 #define PTP_SERVO_FWD_IPDVPCT_FIXEDPOINT_SCALEFACTOR (1000) 1043 #define PTP_SERVO_FWD_IPDVMAX_FIXEDPOINT_SCALEFACTOR (1000) 1044 #define PTP_SERVO_FWD_INTERPKT_JITTER_FIXEDPOINT_SCALEFACTOR (1000) 1045 #define PTP_SERVO_REV_IPDVPCT_FIXEDPOINT_SCALEFACTOR (1000) 1046 #define PTP_SERVO_REV_IPDVMAX_FIXEDPOINT_SCALEFACTOR (1000) 1047 #define PTP_SERVO_REV_INTERPKT_JITTER_FIXEDPOINT_SCALEFACTOR (1000) 1048 1049 /* Legacy flags that can be added to oscillator type instead */ 1050 #define BCM_PTP_FLAG_LOCK_ENDURO_FREQ_MULT (64) 1051 #define BCM_PTP_FLAG_IGNORE_SERVO_OUTPUT (128) 1052 1053 typedef struct _bcm_ptp_servo_configuration_s { 1054 /* Local oscillator type. */ 1055 bcm_ptp_osc_type_t osc_type; 1056 /* PTP transport mode. */ 1057 bcm_ptp_transport_mode_t transport_mode; 1058 /* Bit-mapped phase mode of servo loop. */ 1059 uint32 ptp_phase_mode; 1060 /* OCXO frequency offset */ 1061 int32 freq_corr; 1062 /* Timestamp for frequency offset.*/ 1063 bcm_ptp_timestamp_t freq_corr_time; 1064 /* Bridge time in nanoseconds. */ 1065 uint32 bridge_time; 1066 uint32 flags; 1067 } _bcm_ptp_servo_configuration_t; 1068 1069 1070 /****************************************************/ 1071 /* structures shared with firmware */ 1072 1073 /* mbox 0 is for cmd/resp. Others are for async event & msg to host */ 1074 1075 typedef struct _bcm_ptp_internal_stack_mbox_s { 1076 volatile uint32 status; /* MBOX_STATUS_x value */ 1077 volatile uint32 clock_num; /* clock number that the message is addressed to/from */ 1078 volatile uint32 data_len; 1079 volatile uint32 rfu_mbox; 1080 #if defined BCM_PTP_DMA_ALIGNMENT 1081 uint8 alignment[BCM_PTP_DMA_ALIGNMENT - 16]; /* 16 bytes in the above already */ 1082 #endif /* BCM_PTP_DMA_ALIGNMENT */ 1083 volatile uint8 data[1536]; /* at offset of 'mbox_offset' from start of struct */ 1084 } _bcm_ptp_internal_stack_mbox_t; 1085 1086 #define GET_MBOX_STATUS(stack,idx) \ 1087 ( soc_cm_sinval(unit, (void*)&(stack)->int_state.mboxes->mbox[(idx)].status, \ 1088 sizeof((stack)->int_state.mboxes->mbox[(idx)].status)), \ 1089 soc_ntohl((stack)->int_state.mboxes->mbox[(idx)].status) \ 1090 ) 1091 1092 #define SET_MBOX_STATUS(stack,idx,val) \ 1093 ( (stack)->int_state.mboxes->mbox[(idx)].status = soc_htonl(val), \ 1094 soc_cm_sflush(unit, (void*)&(stack)->int_state.mboxes->mbox[(idx)].status, \ 1095 sizeof((stack)->int_state.mboxes->mbox[(idx)].status)) \ 1096 ) 1097 1098 typedef struct _bcm_ptp_internal_stack_mboxes_s { 1099 volatile uint32 num_mboxes; /* == BCM_PTP_MAX_BUFFERS */ 1100 volatile uint32 mbox_size; 1101 volatile uint32 mbox_offset; /* for both 'mbox' field and 'data' field in mbo struct */ 1102 volatile uint32 rfu; 1103 #if defined BCM_PTP_DMA_ALIGNMENT 1104 uint8 alignment[BCM_PTP_DMA_ALIGNMENT - 16]; /* 16 bytes in the above already */ 1105 #endif /* BCM_PTP_DMA_ALIGNMENT */ 1106 /* note: now at offset of 'mbox_offset' */ 1107 volatile _bcm_ptp_internal_stack_mbox_t mbox[BCM_PTP_MAX_BUFFERS]; /* contents of mbox */ 1108 } _bcm_ptp_internal_stack_mboxes_t; 1109 1110 typedef struct _bcm_ptp_internal_stack_log_s { 1111 volatile uint32 size; /* allocated size of buf (below) */ 1112 volatile uint32 head; /* host-read, updated by CMICm */ 1113 volatile uint8 buf[4]; /* '4' is placeholder. Actual size is 'size' */ 1114 } _bcm_ptp_internal_stack_log_t; 1115 1116 typedef struct _bcm_ptp_internal_stack_state_s { 1117 /* network-byte-ordered physical memory addresses of the shared structures */ 1118 volatile uint32 mbox_ptr; 1119 volatile uint32 log_ptr; 1120 1121 _bcm_ptp_internal_stack_mboxes_t * mboxes; 1122 _bcm_ptp_internal_stack_log_t * log; 1123 1124 /* Elements after this point are not accessed by firmware */ 1125 int core_num; 1126 uint32 log_tail; 1127 } _bcm_ptp_internal_stack_state_t; 1128 1129 1130 typedef struct _bcm_ptp_ext_stack_processor_info_s { 1131 /* System information. */ 1132 uint32 cpu_usage; /* Value 0..1000. 50 => 5% ToP CPU utilization. */ 1133 uint32 max_cpu_usage; /* Maximum value of cpuUsage, reset on ClearSysInfo(). */ 1134 uint32 mem_free; /* Memory available in system heap, in bytes. */ 1135 uint32 min_mem_free; /* Minimum value of memFree, reset on ClearSysInfo(). */ 1136 uint32 tick_buffer; /* Time buffer between tick task. */ 1137 uint32 min_tick_buffer; /* Minimum value of tickBuffer. */ 1138 uint32 one_sec_buffer; /* Time buffer between one second task. */ 1139 uint32 min_one_sec_buffer; /* Minimum value of oneSecBuffer. */ 1140 uint32 one_min_buffer; /* Time buffer between one minute task. */ 1141 uint32 min_one_min_buffer; /* Minimum value of oneMinBuffer. */ 1142 uint32 stack_free[10]; /* Stack free space, per task. */ 1143 uint32 sub_heap_free[10]; /* Space available in individual heaps. */ 1144 } _bcm_ptp_ext_stack_processor_info_t; 1145 1146 typedef struct _bcm_ptp_ext_fw_info_s { 1147 /* PTP firmware information. */ 1148 char firmware_version[128]; 1149 char servo_version[128]; 1150 1151 uint32 ptp_stack_timer_hz; 1152 1153 uint8 ptp_clocks_max; 1154 uint8 ptp_ports_per_clock_max; 1155 1156 uint8 unicast_masters_max; 1157 uint8 unicast_slaves_max; 1158 uint8 foreign_master_dataset_entries_max; 1159 } _bcm_ptp_ext_fw_info_t; 1160 1161 /****************************************************/ 1162 1163 #define PTP_MAX_STACKS_PER_UNIT (1) 1164 #define PTP_MAX_CLOCKS_PER_STACK (1) 1165 #define PTP_MAX_CLOCK_INSTANCES (1) 1166 #define PTP_MAX_CLOCK_INSTANCE_PORTS (32) 1167 #define PTP_MAX_ORDINARY_CLOCK_PORTS (1) 1168 #define PTP_MAX_TIME_SOURCES (3) 1169 #define PTP_MAX_OUTPUT_SIGNALS (7) 1170 #define PTP_GPIO_OUTPUT_SIGNALS (6) 1171 #if defined(BCM_PTP_INTERNAL_STACK_SUPPORT) 1172 #define PTP_OUTPUT_SIGNAL_SYNCE (6) 1173 #else 1174 #define PTP_OUTPUT_SIGNAL_SYNCE (-1) 1175 #endif 1176 #define PTP_MAX_TOD_INPUTS (1) 1177 #define PTP_MAX_TOD_OUTPUTS (5) 1178 1179 #define PTP_UNIT_NUMBER_DEFAULT (0) 1180 #define PTP_STACK_ID_DEFAULT (0) 1181 #define PTP_CLOCK_NUMBER_DEFAULT (0) 1182 #define PTP_CLOCK_PORT_NUMBER_DEFAULT (1) 1183 1184 #if defined(PTP_KEYSTONE_STACK) 1185 /* Smaller limits on peers & slaves for Keystone stack */ 1186 #define _PTP_MAX_PEER_DATASET_ENTRIES 100 1187 #define _PTP_MAX_PEER_DATASET_CHUNK_SIZE 10 1188 #define _PTP_MAX_FOREIGN_MASTER_DATASET_ENTRIES 10 1189 #else 1190 /* Non-Keystone stack */ 1191 #define _PTP_MAX_PEER_DATASET_CHUNK_SIZE 10 1192 #define _PTP_MAX_FOREIGN_MASTER_DATASET_ENTRIES 10 1193 #define _PTP_MAX_PEER_DATASET_ENTRIES PTP_MAX_UNICAST_SLAVE_TABLE_ENTRIES + \ 1194 PTP_MAX_CLOCK_INSTANCE_PORTS + \ 1195 _PTP_MAX_FOREIGN_MASTER_DATASET_ENTRIES 1196 #endif /* PTP_KEYSTONE_STACK */ 1197 1198 /* Peer Dataset */ 1199 typedef struct bcm_ptp_peer_dataset_s { 1200 sal_mutex_t lock; 1201 uint16 num_peers; 1202 bcm_ptp_peer_entry_t peer[_PTP_MAX_PEER_DATASET_ENTRIES]; 1203 } bcm_ptp_peer_dataset_t; 1204 1205 1206 /* 1207 * PTP state enumeration. 1208 * Ref. IEEE Std. 1588-2008, Chapter 8.2.5.3.1. 1209 */ 1210 typedef enum _bcm_ptp_port_state_e { 1211 _bcm_ptp_state_initializing = 1, 1212 _bcm_ptp_state_faulty = 2, 1213 _bcm_ptp_state_disabled = 3, 1214 _bcm_ptp_state_listening = 4, 1215 _bcm_ptp_state_pre_master = 5, 1216 _bcm_ptp_state_master = 6, 1217 _bcm_ptp_state_passive = 7, 1218 _bcm_ptp_state_uncalibrated = 8, 1219 _bcm_ptp_state_slave = 9 1220 } _bcm_ptp_port_state_t; 1221 1222 typedef enum 1223 { 1224 e_PtpProfType_8265p1, 1225 e_PtpProfType_8275p1, 1226 e_PtpProfType_8275p2, 1227 /*e_PtpProfType_8273p2,*/ 1228 e_PtpProfType_None 1229 } e_PTP_Profiletype; 1230 1231 /* 1232 * PTP Boot type enumeration. 1233 */ 1234 typedef enum _bcmPTPBootType_e { 1235 BCM_PTP_COLDSTART, 1236 BCM_PTP_WARMSTART 1237 } _bcmPTPBootType_t; 1238 1239 /* Enumeration of events which can generate a callback */ 1240 typedef enum _bcm_ptp_event_e { 1241 _bcm_ptp_state_change_event = 0x01, 1242 _bcm_ptp_master_change_event = 0x02, 1243 _bcm_ptp_master_avail_event = 0x03, 1244 _bcm_ptp_master_unavail_event = 0x04, 1245 _bcm_ptp_slave_avail_event = 0x05, 1246 _bcm_ptp_slave_unavail_event = 0x06, 1247 _bcm_ptp_top_oom_event = 0x07, 1248 _bcm_ptp_top_watchdog_event = 0x08, 1249 _bcm_ptp_top_ready_event = 0x09, 1250 _bcm_ptp_top_misc_event = 0x0a, 1251 _bcm_ptp_top_tod_avail_event = 0x0b, 1252 _bcm_ptp_top_tod_unavail_event = 0x0c, 1253 _bcm_ptp_ieee1588_warn_event = 0x0d, 1254 _bcm_ptp_servo_state_event = 0x0e, 1255 _bcm_ptp_pps_in_state_event = 0x0f, 1256 _bcm_ptp_tdev_event = 0x10, 1257 _bcm_ptp_servo_log_event = 0x11, 1258 _bcm_ptp_servo_lock_event = 0x12, 1259 _bcm_ptp_synce_loss_event = 0x13, 1260 _bcm_ptp_ts1_offset_event = 0x14, 1261 #ifdef BCM_PTP_EXT_SERVO_SUPPORT 1262 _bcm_ptp_qual_timer_exp_event = 0x15, 1263 #endif /* BCM_PTP_EXT_SERVO_SUPPORT */ 1264 _bcm_ptp_last_event 1265 } _bcm_ptp_event_t; 1266 1267 /* 1268 * Event support (STATE CHANGE). 1269 * Reason for a change in PTP port state. 1270 */ 1271 typedef enum _bcm_ptp_state_change_reason_e { 1272 /* Startup, instance creation. */ 1273 _bcm_ptp_state_change_reason_startup = 0, 1274 /* Port initialization. */ 1275 _bcm_ptp_state_change_reason_port_init = 1, 1276 /* Fault detected. */ 1277 _bcm_ptp_state_change_reason_fault = 2, 1278 /* BMCA state transition. */ 1279 _bcm_ptp_state_change_reason_bmca = 3, 1280 /* Enable port management message. */ 1281 _bcm_ptp_state_change_reason_mnt_enable = 4, 1282 /* Disable port management message. */ 1283 _bcm_ptp_state_change_reason_mnt_disable = 5, 1284 /* Network interface re-initialization. */ 1285 _bcm_ptp_state_change_reason_netw_reinit = 6, 1286 /* Timestamp difference, master-to-slave. */ 1287 _bcm_ptp_state_change_reason_dt_master_slave = 7, 1288 _bcm_ptp_state_change_reason_last 1289 } _bcm_ptp_state_change_reason_t; 1290 1291 /* 1292 * Event support (IEEE Std. 1588-2008 WARNING). 1293 * Reason for a warning related to IEEE Std. 1588-2008. 1294 */ 1295 typedef enum _bcm_ptp_ieee1588_warn_reason_e { 1296 /* Non-uniform logAnnounceInterval in a PTP domain. */ 1297 _bcm_ptp_ieee1588_warn_reason_logAnnounceInterval = 0, 1298 _bcm_ptp_ieee1588_warn_reason_last 1299 } _bcm_ptp_ieee1588_warn_reason_t; 1300 1301 /* Misc Events */ 1302 typedef enum _bcm_ptp_top_misc_reason_e { 1303 /* Non-uniform logAnnounceInterval in a PTP domain. */ 1304 _bcm_ptp_top_misc_reason_anncFlagChange = 0, 1305 _bcm_ptp_top_misc_reason_last 1306 } _bcm_ptp_top_misc_reason_t; 1307 1308 1309 /* Event support (PPS-IN STATE). */ 1310 typedef enum _bcm_ptp_pps_in_state_e { 1311 _bcm_ptp_pps_in_state_missing = 0, 1312 _bcm_ptp_pps_in_state_active_missing_tod = 1, 1313 _bcm_ptp_pps_in_state_valid = 2 1314 } _bcm_ptp_pps_in_state_t; 1315 1316 /* Enumeration of events for ext-servo which can generate a callback */ 1317 typedef enum _bcm_ptp_ext_servo_event_e { 1318 _bcm_ptp_ext_servo_downlink_ts_event = 0x00, 1319 _bcm_ptp_ext_servo_uplink_ts_event = 0x01, 1320 _bcm_ptp_ext_servo_master_change_event = 0x02, 1321 _bcm_ptp_ext_servo_master_avail_event = 0x03, 1322 _bcm_ptp_ext_servo_master_unavail_event = 0x04, 1323 _bcm_ptp_ext_servo_gps_avail_event = 0x05, 1324 _bcm_ptp_ext_servo_gps_unavail_event = 0x06, 1325 _bcm_ptp_ext_servo_gps_ts_event = 0x07, 1326 _bcm_ptp_ext_servo_last_event 1327 } _bcm_ptp_ext_servo_event_t; 1328 1329 1330 typedef struct bcm_ptp_mbox_tsevent_stats_s { 1331 unsigned int event_queued; 1332 unsigned int event_dequeued; 1333 unsigned int event_dl_ts; 1334 unsigned int event_dl_ts_handled; 1335 unsigned int event_dl_ts_above_thres; 1336 unsigned int event_ul_ts; 1337 unsigned int event_ul_ts_handled; 1338 unsigned int event_ul_ts_above_thres; 1339 unsigned int event_master_add; 1340 unsigned int event_master_remove; 1341 unsigned int event_master_change; 1342 unsigned int event_unknown; 1343 unsigned int error_queue_add; 1344 unsigned int ts_rpc_livecount; 1345 } bcm_ptp_mbox_tsevent_stats_t; 1346 1347 typedef struct _bcm_ptp_tunnel_queue_s { 1348 sal_mutex_t lock; 1349 shr_rdpc_t rdpc; 1350 int head; 1351 int tail; 1352 uint8 buf[BCM_PTP_TUNNEL_QUEUE_SIZE]; 1353 } _bcm_ptp_tunnel_queue_t; 1354 1355 #define EXT_SERVO_TS_RATE_MAX 128 1356 1357 typedef enum _bcm_ptp_ts_type_e { 1358 _bcm_ptp_ts_type_uplink = 0, 1359 _bcm_ptp_ts_type_downlink = 1 1360 } _bcm_ptp_ts_type_t; 1361 1362 typedef struct _bcm_ptp_timestamp_node_s 1363 { 1364 bcm_ptp_port_identity_t portId; 1365 uint16 msgSeqId; 1366 uint16 flags; 1367 uint16 numTs; 1368 uint32 tsType; 1369 int first_TS[12]; 1370 int64 tsDiff[EXT_SERVO_TS_RATE_MAX]; 1371 }_bcm_ptp_timestamp_node_t; 1372 1373 #define PTP_EXT_SERVO_TS_OFFSET 32 1374 #define PTP_EXT_SERVO_MSTR_INST_UNKNOWN 0xffff 1375 1376 typedef struct _bcm_ptp_timestamp_list_s 1377 { 1378 _bcm_ptp_timestamp_node_t *data; 1379 } _bcm_ptp_timestamp_list_t; 1380 1381 typedef struct _bcm_ptp_timestamp_queue_s { 1382 sal_mutex_t lock; 1383 shr_rdpc_t rdpc; 1384 int head; 1385 int tail; 1386 _bcm_ptp_timestamp_list_t *ts_list; 1387 } _bcm_ptp_timestamp_queue_t; 1388 1389 /* PTP stack information. */ 1390 typedef struct _bcm_ptp_stack_info_s 1391 { 1392 int in_use; 1393 _bcm_ptp_memstate_t memstate; 1394 bcm_ptp_external_stack_info_t ext_info; 1395 _bcm_ptp_internal_stack_state_t int_state; 1396 1397 int unit; 1398 bcm_ptp_stack_id_t stack_id; 1399 int unicast_master_table_size; 1400 int acceptable_master_table_size; 1401 int unicast_slave_table_size; 1402 int multicast_slave_stats_size; 1403 1404 uint32 flags; 1405 #if defined(PTP_KEYSTONE_STACK) 1406 void *cookie; 1407 uint8 persistent_config[CONFIG_TOTAL_SIZE]; 1408 #endif 1409 1410 _bcm_ptp_tunnel_queue_t tunnel_queue; 1411 _bcm_ptp_timestamp_queue_t timestamp_queue; 1412 1413 /* dispatch table */ 1414 _bcm_ptp_transport_init_t *transport_init; 1415 _bcm_ptp_transport_tx_t *tx; /* transmit a message to the ToP */ 1416 _bcm_ptp_transport_tx_completion_t *tx_completion; /* wait until last tx has been received by ToP */ 1417 _bcm_ptp_transport_rx_free_t *rx_free; /* release a received message from the ToP */ 1418 _bcm_ptp_transport_terminate_t *transport_terminate; 1419 1420 } _bcm_ptp_stack_info_t; 1421 1422 typedef struct _bcm_ptp_info_s 1423 { 1424 _bcm_ptp_memstate_t memstate; 1425 sal_mutex_t mutex; 1426 _bcm_ptp_stack_info_t *stack_info; 1427 } _bcm_ptp_info_t; 1428 1429 extern _bcm_ptp_info_t _bcm_common_ptp_info[BCM_MAX_NUM_UNITS]; 1430 #define SET_PTP_INFO ptp_info_p = &_bcm_common_ptp_info[unit] 1431 1432 1433 /* PTP clock and clock port information cache. */ 1434 typedef struct _bcm_ptp_clock_cache_s 1435 { 1436 int in_use; 1437 int max_num_ports; /* Set on initial clock configuration. Clock can be reconfigured with fewer, but not more */ 1438 bcm_ptp_clock_info_t clock_info; 1439 bcm_ptp_signal_output_t signal_output[PTP_MAX_OUTPUT_SIGNALS]; 1440 bcm_ptp_tod_input_t tod_input[PTP_MAX_TOD_INPUTS]; 1441 bcm_ptp_tod_output_t tod_output[PTP_MAX_TOD_OUTPUTS]; 1442 bcm_ptp_clock_port_info_t port_info[PTP_MAX_CLOCK_INSTANCE_PORTS]; 1443 _bcm_ptp_port_state_t portState[PTP_MAX_CLOCK_INSTANCE_PORTS]; 1444 bcm_ptp_peer_dataset_t peerTable; 1445 #ifdef BCM_PTP_EXT_SERVO_SUPPORT 1446 bcm_ptp_servo_type_t servo_type; 1447 #endif /* BCM_PTP_EXT_SERVO_SUPPORT */ 1448 } _bcm_ptp_clock_cache_t; 1449 1450 /* PTP stack clock and port information caches. */ 1451 typedef struct _bcm_ptp_stack_cache_s 1452 { 1453 _bcm_ptp_memstate_t memstate; 1454 _bcm_ptp_clock_cache_t *clock_array; 1455 } _bcm_ptp_stack_cache_t; 1456 1457 /* Unit clock and port information caches. */ 1458 typedef struct _bcm_ptp_unit_cache_s 1459 { 1460 _bcm_ptp_memstate_t memstate; 1461 _bcm_ptp_stack_cache_t *stack_array; 1462 } _bcm_ptp_unit_cache_t; 1463 1464 /* PTP PCI setconfig */ 1465 typedef int (*bcm_ptp_pci_setconfig_t) (uint32 pci_dev_id, uint32 pciconfig_register, uint32 value); 1466 1467 typedef struct _bcm_ptp_ipdv_config_s { 1468 uint16 observation_interval; /* IPDV observation interval. */ 1469 int32 threshold; /* IPDV threshold (nsec). */ 1470 uint16 pacing_factor; /* IPDV pacing factor. */ 1471 } _bcm_ptp_ipdv_config_t; 1472 1473 typedef struct _bcm_ptp_ipdv_performance_s { 1474 uint64 fwd_pct; /* Forward IPDV % below threshold. */ 1475 uint64 fwd_max; /* Forward maximum IPDV (usec). */ 1476 uint64 fwd_jitter; /* Forward interpacket jitter (usec). */ 1477 uint64 rev_pct; /* Reverse IPDV % below threshold. */ 1478 uint64 rev_max; /* Reverse maximum IPDV (usec). */ 1479 uint64 rev_jitter; /* Reverse interpacket jitter (usec). */ 1480 } _bcm_ptp_ipdv_performance_t; 1481 1482 typedef enum _bcm_ptp_channel_sub_status_e { 1483 _bcm_ptp_channel_status_ok = 0, 1484 _bcm_ptp_channel_status_fault = 1, 1485 _bcm_ptp_channel_status_disabled = 2 1486 } _bcm_ptp_channel_sub_status_t; 1487 1488 typedef struct _bcm_ptp_channel_status_s { 1489 _bcm_ptp_channel_sub_status_t freq_status; 1490 _bcm_ptp_channel_sub_status_t time_status; 1491 int freq_weight; 1492 int time_weight; 1493 int freq_QL; 1494 int time_QL; 1495 int ql_read_externally; 1496 uint32 fault_map; 1497 } _bcm_ptp_channel_status_t; 1498 1499 1500 typedef struct _bcm_ptp_servo_performance_s { 1501 /* FLL state data. */ 1502 bcm_ptp_servo_status_t status; 1503 /* Forward flow weight. */ 1504 uint64 fwd_weight; 1505 /* Forward flow transient-free out of 900 sec. */ 1506 uint32 fwd_trans_free_900; 1507 /* Forward flow transient-free out of 3600 sec. */ 1508 uint32 fwd_trans_free_3600; 1509 /* Forward flow transactions used (%). */ 1510 uint64 fwd_pct; 1511 /* Forward flow operational minimum TDEV (nsec). */ 1512 uint64 fwd_min_Tdev; 1513 /* Forward Mafie. */ 1514 uint64 fwd_Mafie; 1515 /* Forward flow minimum cluster width (nsec).*/ 1516 uint64 fwd_min_cluster_width; 1517 /* Forward flow mode width (nsec). */ 1518 uint64 fwd_mode_width; 1519 /* Reverse flow weight. */ 1520 uint64 rev_weight; 1521 /* Reverse flow transient-free out of 900 sec. */ 1522 uint32 rev_trans_free_900; 1523 /* Reverse flow transient-free out of 3600 sec. */ 1524 uint32 rev_trans_free_3600; 1525 /* Reverse flow transactions used (%). */ 1526 uint64 rev_pct; 1527 /* Reverse flow operational minimum TDEV (nsec). */ 1528 uint64 rev_min_Tdev; 1529 /* Reverse Mafie. */ 1530 uint64 rev_Mafie; 1531 /* Reverse flow minimum cluster width (nsec).*/ 1532 uint64 rev_min_cluster_width; 1533 /* Reverse flow mode width (nsec). */ 1534 uint64 rev_mode_width; 1535 /* Frequency correction (ppb). */ 1536 int64 freq_correction; 1537 /* Phase correction (ppb).*/ 1538 int64 phase_correction; 1539 /* Output TDEV estimate (nsec). */ 1540 uint64 tdev_estimate; 1541 /* Output MDEV estimate (ppb). */ 1542 uint64 mdev_estimate; 1543 /* Residual phase error (nsec). */ 1544 int64 residual_phase_error; 1545 /* Minimum round trip delay (nsec). */ 1546 uint64 min_round_trip_delay; 1547 /* Sync packet rate (pkts/sec). */ 1548 uint16 fwd_pkt_rate; 1549 /* Delay packet rate (pkts/sec). */ 1550 uint16 rev_pkt_rate; 1551 /* IPDV performance data / metrics. */ 1552 _bcm_ptp_ipdv_performance_t ipdv_data; 1553 } _bcm_ptp_servo_performance_t; 1554 1555 /* Extended Peer Info Structure. Includes local port address, for use with wildcard port */ 1556 typedef struct _bcm_ptp_clock_peer_ext_s { 1557 bcm_ptp_clock_peer_t peer; 1558 bcm_ptp_clock_port_address_t local_address; 1559 } _bcm_ptp_clock_peer_ext_t; 1560 1561 /* Phase Holdover state, for nulling asymmetry offsets on master/path changes */ 1562 1563 typedef struct bcm_ptp_phase_holdover_state_s { 1564 /* Current servo-reported phase offset between local timestamper and master */ 1565 int64 reported_phase_offset; 1566 /* User-supplied offset applied in addition to servo's fixed or reported offset */ 1567 int64 delta_phase_offset; 1568 /* Fixed offset to be applied in place of reported phase offset */ 1569 int64 fixed_phase_offset; 1570 /* 1: Use fixed_phase_offset, 0: Use reported_phase_offset 1571 * Note: switching masters will cause a 0->1 transition, while also latching 1572 * reported_phase_offset into fixed_phase_offset 1573 */ 1574 int use_fixed_phase_offset; 1575 /* max slew rate when supplied phase offset is changed */ 1576 int32 phase_slew_rate_ppb; 1577 /* max offset to adjust by slew. Larger offset will cause phase jump */ 1578 uint32 sync_phase_offset_ns; 1579 /* Switching offset computed by FW. */ 1580 int64 gps_to_ptp_offset_auto; 1581 /* Switching offset provided by user. */ 1582 int64 gps_to_ptp_offset_manual; 1583 /* Enable usage of auto offset. */ 1584 int enable_gps_to_ptp_auto; 1585 } bcm_ptp_phase_holdover_state_t; 1586 1587 /* Telecom profile definitions and data types. */ 1588 #define PTP_TELECOM_NETWORKING_OPTION_DEFAULT (bcm_ptp_telecom_g8265_network_option_II) 1589 #define PTP_TELECOM_MAX_NUMBER_PKTMASTERS (PTP_MAX_UNICAST_MASTER_TABLE_ENTRIES) 1590 #define PTP_TELECOM_ANNOUNCE_RECEIPT_TIMEOUT_MSEC_DEFAULT (6000) 1591 #define PTP_TELECOM_SYNC_RECEIPT_TIMEOUT_MSEC_DEFAULT (1000) 1592 #define PTP_TELECOM_DELAYRESP_RECEIPT_TIMEOUT_MSEC_DEFAULT (1000) 1593 #define PTP_TELECOM_PDV_SCALED_ALLAN_VARIANCE_THRESHOLD_NSECSQ_DEFAULT (1000000000) 1594 #define PTP_TELECOM_NON_REVERSION_MODE_DEFAULT (0) 1595 #define PTP_TELECOM_WAIT_TO_RESTORE_SEC_DEFAULT (300) 1596 1597 #define PTP_TELECOM_EVENT_FIFO_SIZE (30) 1598 1599 #define PTP_TELECOM_EVENT_PTSF_LOSS_ANNOUNCE_BIT (0u) 1600 #define PTP_TELECOM_EVENT_PTSF_LOSS_SYNC_BIT (1u) 1601 #define PTP_TELECOM_EVENT_PTSF_LOSS_SYNC_TS_BIT (2u) 1602 #define PTP_TELECOM_EVENT_PTSF_LOSS_DELAY_RESP_BIT (3u) 1603 #define PTP_TELECOM_EVENT_PTSF_UNUSABLE_BIT (4u) 1604 #define PTP_TELECOM_EVENT_QL_DEGRADED_BIT (8u) 1605 #define PTP_TELECOM_EVENT_GM_ADDED_BIT (16u) 1606 #define PTP_TELECOM_EVENT_GM_REMOVED_BIT (17u) 1607 #define PTP_TELECOM_EVENT_GM_SELECTED_BIT (18u) 1608 1609 /* Telecom events. */ 1610 typedef struct _bcm_ptp_telecom_g8265_event_s { 1611 uint32 type; 1612 sal_time_t timestamp; 1613 bcm_ptp_telecom_g8265_pktmaster_t pktmaster; 1614 } _bcm_ptp_telecom_g8265_event_t; 1615 1616 typedef struct _bcm_ptp_telecom_g8265_event_fifo_s { 1617 int head; 1618 _bcm_ptp_telecom_g8265_event_t events[PTP_TELECOM_EVENT_FIFO_SIZE]; 1619 } _bcm_ptp_telecom_g8265_event_fifo_t; 1620 1621 1622 /* T-DPLL definitions and data types. */ 1623 #define TDPLL_INPUT_CLOCK_NUM_GPIO (BCM_TDPLL_INPUT_CLOCK_NUM_GPIO) 1624 #define TDPLL_INPUT_CLOCK_NUM_SYNCE (BCM_TDPLL_INPUT_CLOCK_NUM_SYNCE) 1625 #define TDPLL_INPUT_CLOCK_NUM_1588 (BCM_TDPLL_INPUT_CLOCK_NUM_1588) 1626 #define TDPLL_INPUT_CLOCK_NUM_MAX (BCM_TDPLL_INPUT_CLOCK_NUM_MAX) 1627 1628 #define TDPLL_OUTPUT_CLOCK_NUM_BROADSYNC (BCM_TDPLL_OUTPUT_CLOCK_NUM_BROADSYNC) 1629 #define TDPLL_OUTPUT_CLOCK_NUM_SYNCE (BCM_TDPLL_OUTPUT_CLOCK_NUM_SYNCE) 1630 #define TDPLL_OUTPUT_CLOCK_NUM_1588 (BCM_TDPLL_OUTPUT_CLOCK_NUM_1588) 1631 #define TDPLL_OUTPUT_CLOCK_NUM_GPIO (BCM_TDPLL_OUTPUT_CLOCK_NUM_GPIO) 1632 #define TDPLL_OUTPUT_CLOCK_NUM_MAX (BCM_TDPLL_OUTPUT_CLOCK_NUM_MAX) 1633 1634 #define TDPLL_INPUT_CLOCK_IDX_GPIO4 (4)/*TDPLL INPUTClk GPIO4 Pin*/ 1635 #define TDPLL_INPUT_CLOCK_IDX_GPIO5 (5)/*TDPLL INPUTClk GPIO5 Pin*/ 1636 1637 /* Apache, there are 2 more XGPLLs for TDPLL/SyncE output clocks 1638 TDPLL output clock indices are as indicated below 1639 XGPLL3 XGPLL2 GP5 GP4 GP3 GP2 GP1 GP0 1588 XGPLL1 XGPLL0 BS1 BS0 */ 1640 1641 /* Qumran-AX, possible QUX total 3 SyncE output clocks 1642 PML0,PML1 and PMH PLLs 1643 1644 PMHPLL GP5 GP4 GP3 GP2 GP1 GP0 1588 PML1PLL PML0PLL BS1 BS0 1645 */ 1646 1647 #define TDPLL_OUTPUT_CLOCK_IDX_GPIO4 (9)/*TDPLL OUTPUTClk GPIO4 Pin*/ 1648 #define TDPLL_OUTPUT_CLOCK_IDX_GPIO5 (10)/*TDPLL OUTPUTClk GPIO5 Pin*/ 1649 #define TDPLL_OUTPUT_CLOCK_IDX_SYNCE3 (11)/*Apache- XGPLL2, QAX/QUX-PMHPLL */ 1650 #define TDPLL_OUTPUT_CLOCK_IDX_XGPLL3 (12)/*only in Apache */ 1651 1652 #define TDPLL_OUTPUT_CLOCK_MASK_SYNCE3_PLL (1<<TDPLL_OUTPUT_CLOCK_IDX_SYNCE3) /*Apache- XGPLL2, QAX/QUX-PMHPLL */ 1653 #define TDPLL_OUTPUT_CLOCK_SYNCE3_PLL_ENABLED(x) ((x) & TDPLL_OUTPUT_CLOCK_MASK_SYNCE3_PLL) /*Apache- XGPLL2, QAX/QUX-PMHPLL */ 1654 1655 #define TDPLL_OUTPUT_CLOCK_MASK_SYNCE_XGPLL3 (1<<TDPLL_OUTPUT_CLOCK_IDX_XGPLL3) 1656 #define TDPLL_OUTPUT_CLOCK_SYNCE_XGPLL3_ENABLED(x) ((x) & TDPLL_OUTPUT_CLOCK_MASK_SYNCE_XGPLL3) 1657 1658 #define TDPLL_DPLL_INSTANCE_NUM_MAX (BCM_TDPLL_DPLL_INSTANCE_NUM_MAX) 1659 1660 #if !defined(BCM_TDPLL_FREQUENCY) 1661 #define BCM_TDPLL_FREQUENCY (100) 1662 #endif /* !defined(BCM_TDPLL_FREQUENCY) */ 1663 1664 typedef struct bcm_tdpll_dpll_instance_data_s { 1665 bcm_tdpll_dpll_instance_t dpll_instance[TDPLL_DPLL_INSTANCE_NUM_MAX]; 1666 } bcm_tdpll_dpll_instance_data_t; 1667 1668 typedef struct bcm_tdpll_input_clock_monitor_options_s { 1669 uint32 interval; 1670 1671 uint32 soft_warn_threshold_ppb; 1672 uint32 hard_accept_threshold_ppb; 1673 uint32 hard_reject_threshold_ppb; 1674 } bcm_tdpll_input_clock_monitor_options_t; 1675 1676 typedef struct bcm_tdpll_input_clock_selector_options_s { 1677 int ql_enabled[TDPLL_DPLL_INSTANCE_NUM_MAX]; 1678 } bcm_tdpll_input_clock_selector_options_t; 1679 1680 typedef struct bcm_tdpll_input_clock_switching_options_s { 1681 int revertive[TDPLL_DPLL_INSTANCE_NUM_MAX]; 1682 } bcm_tdpll_input_clock_switching_options_t; 1683 1684 typedef struct bcm_tdpll_input_clock_selector_state_s { 1685 int prior_selected_clock[TDPLL_DPLL_INSTANCE_NUM_MAX]; 1686 int selected_clock[TDPLL_DPLL_INSTANCE_NUM_MAX]; 1687 int reference_clock[TDPLL_DPLL_INSTANCE_NUM_MAX]; 1688 } bcm_tdpll_input_clock_selector_state_t; 1689 1690 typedef struct bcm_tdpll_input_clock_data_s { 1691 int prescreen_valid[TDPLL_INPUT_CLOCK_NUM_MAX]; 1692 bcm_tdpll_input_clock_t input_clock[TDPLL_INPUT_CLOCK_NUM_MAX]; 1693 int phy_port[TDPLL_INPUT_CLOCK_NUM_MAX]; 1694 bcm_tdpll_input_clock_monitor_options_t monitor_options; 1695 bcm_tdpll_input_clock_selector_options_t selector_options; 1696 bcm_tdpll_input_clock_switching_options_t switching_options; 1697 1698 bcm_tdpll_input_clock_selector_state_t selector_state; 1699 1700 bcm_tdpll_input_clock_monitor_cb monitor_callback; 1701 bcm_tdpll_input_clock_selector_cb selector_callback; 1702 1703 bcm_tdpll_input_clock_cb callback[bcmTdpllCallbackTypeNotification+1]; 1704 1705 } bcm_tdpll_input_clock_data_t; 1706 1707 typedef struct bcm_tdpll_output_clock_data_s { 1708 bcm_tdpll_output_clock_t output_clock[TDPLL_OUTPUT_CLOCK_NUM_MAX]; 1709 } bcm_tdpll_output_clock_data_t; 1710 1711 typedef struct bcm_tdpll_esmc_data_s { 1712 int rx_enable; 1713 int tx_enable[TDPLL_DPLL_INSTANCE_NUM_MAX]; 1714 1715 bcm_pbmp_t rx_pbmp[TDPLL_DPLL_INSTANCE_NUM_MAX]; 1716 bcm_pbmp_t tx_pbmp[TDPLL_DPLL_INSTANCE_NUM_MAX]; 1717 1718 bcm_esmc_pdu_data_t pdu_data[TDPLL_DPLL_INSTANCE_NUM_MAX]; 1719 1720 bcm_esmc_network_option_t network_option; 1721 bcm_esmc_quality_level_t holdover_ql[TDPLL_DPLL_INSTANCE_NUM_MAX]; 1722 uint8 holdover_ssm_code[TDPLL_DPLL_INSTANCE_NUM_MAX]; 1723 bcm_tdpll_input_clock_ql_change_cb ql_change_callback; 1724 } bcm_tdpll_esmc_data_t; 1725 1726 extern int _bcm_ptp_external_stack_create( 1727 int unit, 1728 bcm_ptp_stack_info_t *info, 1729 bcm_ptp_stack_id_t ptp_id); 1730 1731 extern int _bcm_ptp_internal_stack_create( 1732 int unit, 1733 bcm_ptp_stack_info_t *info, 1734 bcm_ptp_stack_id_t ptp_id); 1735 1736 extern int _bcm_ptp_stack_shutdown( 1737 int unit, 1738 bcm_ptp_stack_id_t ptp_id); 1739 1740 extern int _bcm_ptp_stack_cleanup( 1741 int unit, 1742 bcm_ptp_stack_id_t ptp_id); 1743 1744 extern int _bcm_ptp_internal_stack_shutdown( 1745 int unit, 1746 bcm_ptp_stack_id_t ptp_id); 1747 1748 extern int _bcm_ptp_internal_stack_cleanup( 1749 int unit, 1750 bcm_ptp_stack_id_t ptp_id); 1751 1752 extern int _bcm_ptp_ext_stack_fault_status_get( 1753 int pci_idx, 1754 uint32 *boot_status, 1755 uint32 *fault_status); 1756 1757 extern int _bcm_ptp_ext_fw_info_set( 1758 int unit, 1759 bcm_ptp_stack_id_t ptp_id, 1760 uint8 *msg); 1761 1762 extern int _bcm_ptp_ext_fw_info_get( 1763 int unit, 1764 bcm_ptp_stack_id_t ptp_id, 1765 _bcm_ptp_ext_fw_info_t *info); 1766 1767 #if defined(BCM_PTP_INTERNAL_STACK_SUPPORT) 1768 extern int _bcm_ptp_stack_deinit_callback( 1769 int unit, 1770 int uC, 1771 soc_cmic_uc_shutdown_stage_t stage, 1772 void *user_data); 1773 #endif /* BCM_PTP_INTERNAL_STACK_SUPPORT */ 1774 1775 extern int 1776 _bcm_ptp_clock_cache_init( 1777 int unit); 1778 1779 extern int 1780 _bcm_ptp_clock_cache_detach( 1781 int unit); 1782 1783 extern int 1784 _bcm_ptp_clock_cache_stack_create( 1785 int unit, 1786 bcm_ptp_stack_id_t ptp_id); 1787 1788 extern int 1789 _bcm_ptp_clock_cache_stack_destroy( 1790 int unit, 1791 bcm_ptp_stack_id_t ptp_id); 1792 1793 extern int 1794 _bcm_ptp_clock_cache_info_create( 1795 int unit, 1796 bcm_ptp_stack_id_t ptp_id, 1797 int clock_num); 1798 1799 extern int _bcm_ptp_clock_cache_info_get( 1800 int unit, 1801 bcm_ptp_stack_id_t ptp_id, 1802 int clock_num, 1803 bcm_ptp_clock_info_t *clock_info); 1804 1805 extern int _bcm_ptp_clock_cache_info_set( 1806 int unit, 1807 bcm_ptp_stack_id_t ptp_id, 1808 int clock_num, 1809 const bcm_ptp_clock_info_t *clock_info); 1810 1811 extern int _bcm_ptp_clock_cache_signal_get( 1812 int unit, 1813 bcm_ptp_stack_id_t ptp_id, 1814 int clock_num, 1815 int signal_num, 1816 bcm_ptp_signal_output_t *signal); 1817 1818 extern int _bcm_ptp_clock_cache_signal_set( 1819 int unit, 1820 bcm_ptp_stack_id_t ptp_id, 1821 int clock_num, 1822 int signal_num, 1823 const bcm_ptp_signal_output_t *signal); 1824 1825 extern int _bcm_ptp_clock_cache_tod_input_get( 1826 int unit, 1827 bcm_ptp_stack_id_t ptp_id, 1828 int clock_num, 1829 int tod_input_num, 1830 bcm_ptp_tod_input_t *tod_input); 1831 1832 extern int _bcm_ptp_clock_cache_tod_input_set( 1833 int unit, 1834 bcm_ptp_stack_id_t ptp_id, 1835 int clock_num, 1836 int tod_input_num, 1837 const bcm_ptp_tod_input_t *tod_input); 1838 1839 extern int _bcm_ptp_clock_cache_tod_output_get( 1840 int unit, 1841 bcm_ptp_stack_id_t ptp_id, 1842 int clock_num, 1843 int tod_output_num, 1844 bcm_ptp_tod_output_t *tod_output); 1845 1846 extern int _bcm_ptp_clock_cache_tod_output_set( 1847 int unit, 1848 bcm_ptp_stack_id_t ptp_id, 1849 int clock_num, 1850 int tod_output_num, 1851 const bcm_ptp_tod_output_t *tod_output); 1852 1853 extern int _bcm_ptp_clock_port_cache_info_get( 1854 int unit, 1855 bcm_ptp_stack_id_t ptp_id, 1856 int clock_num, 1857 uint32 clock_port, 1858 bcm_ptp_clock_port_info_t *port_info); 1859 1860 extern int _bcm_ptp_clock_port_cache_info_set( 1861 int unit, 1862 bcm_ptp_stack_id_t ptp_id, 1863 int clock_num, 1864 uint32 clock_port, 1865 const bcm_ptp_clock_port_info_t *port_info); 1866 1867 extern int _bcm_ptp_clock_cache_port_state_get( 1868 int unit, 1869 bcm_ptp_stack_id_t ptp_id, 1870 int clock_num, 1871 uint32 clock_port, 1872 _bcm_ptp_port_state_t *portState); 1873 1874 extern int _bcm_ptp_clock_cache_port_state_set( 1875 int unit, 1876 bcm_ptp_stack_id_t ptp_id, 1877 int clock_num, 1878 uint32 clock_port, 1879 const _bcm_ptp_port_state_t portState); 1880 1881 extern int _bcm_ptp_rx_init( 1882 int unit); 1883 1884 extern int _bcm_ptp_rx_detach( 1885 int unit); 1886 1887 extern int _bcm_ptp_rx_stack_create( 1888 int unit, 1889 bcm_ptp_stack_id_t ptp_id, 1890 bcm_mac_t *host_mac, 1891 bcm_mac_t *top_mac, 1892 int tpid, 1893 int vlan); 1894 1895 extern int _bcm_ptp_rx_stack_destroy( 1896 int unit, 1897 bcm_ptp_stack_id_t ptp_id); 1898 1899 extern int _bcm_ptp_rx_clock_create( 1900 int unit, 1901 bcm_ptp_stack_id_t ptp_id, 1902 int clock_num); 1903 1904 extern int _bcm_ptp_rx_clock_destroy( 1905 int unit, 1906 bcm_ptp_stack_id_t ptp_id, 1907 int clock_num); 1908 1909 extern int _bcm_ptp_rx_response_get( 1910 int unit, 1911 bcm_ptp_stack_id_t ptp_id, 1912 int clock_num, 1913 int usec, 1914 uint8 **data, 1915 int *data_len); 1916 1917 extern int _bcm_ptp_external_rx_response_free( 1918 int unit, 1919 int ptp_id, 1920 uint8 *resp_data); 1921 1922 extern int _bcm_ptp_internal_rx_response_free( 1923 int unit, 1924 int ptp_id, 1925 uint8 *resp_data); 1926 1927 extern int _bcm_ptp_rx_response_flush( 1928 int unit, 1929 bcm_ptp_stack_id_t ptp_id, 1930 int clock_num); 1931 1932 extern int _bcm_ptp_management_init( 1933 int unit); 1934 1935 extern int _bcm_ptp_management_detach( 1936 int unit); 1937 1938 extern int _bcm_ptp_management_stack_create( 1939 int unit, 1940 bcm_ptp_stack_id_t ptp_id, 1941 bcm_mac_t *src_mac, 1942 bcm_mac_t *dest_mac, 1943 bcm_ip_t src_ip, 1944 bcm_ip_t dest_ip, 1945 uint16 vlan, 1946 uint8 prio, 1947 bcm_pbmp_t top_bitmap); 1948 1949 extern int _bcm_ptp_management_stack_destroy( 1950 int unit, 1951 bcm_ptp_stack_id_t ptp_id); 1952 1953 extern int _bcm_ptp_management_clock_create( 1954 int unit, 1955 bcm_ptp_stack_id_t ptp_id, 1956 int clock_num); 1957 1958 extern int _bcm_ptp_management_message_send( 1959 int unit, 1960 bcm_ptp_stack_id_t ptp_id, 1961 int clock_num, 1962 const bcm_ptp_port_identity_t* dest_clock_port, 1963 uint8 action, 1964 uint16 cmd, 1965 uint8* payload, 1966 int payload_len, 1967 uint8* resp, 1968 int* resp_len); 1969 1970 extern int _bcm_ptp_unicast_slave_subscribe( 1971 int unit, 1972 bcm_ptp_stack_id_t ptp_id, 1973 int clock_num, 1974 uint32 clock_port, 1975 _bcm_ptp_clock_peer_ext_t *slave_info, 1976 bcm_ptp_message_type_t msg_type, 1977 bcm_ptp_tlv_type_t tlv_type, 1978 int interval); 1979 1980 extern int _bcm_ptp_management_domain_get( 1981 int unit, 1982 bcm_ptp_stack_id_t ptp_id, 1983 int clock_num, 1984 uint8 *domain); 1985 1986 1987 extern int _bcm_ptp_management_domain_set( 1988 int unit, 1989 bcm_ptp_stack_id_t ptp_id, 1990 int clock_num, 1991 uint8 domain); 1992 1993 extern int _bcm_ptp_management_message_domain_get( 1994 uint8 *message, 1995 uint8 *domain); 1996 1997 extern int _bcm_ptp_management_message_domain_set( 1998 uint8 *message, 1999 uint8 domain); 2000 2001 extern int _bcm_ptp_tunnel_message_to_top( 2002 int unit, 2003 bcm_ptp_stack_id_t ptp_id, 2004 int clock_index, 2005 int port_index, 2006 unsigned payload_len, 2007 uint8 *payload, 2008 int async); 2009 2010 extern int _bcm_ptp_tunnel_message_to_world( 2011 int unit, 2012 bcm_ptp_stack_id_t ptp_id, 2013 int clock_index, 2014 unsigned payload_len, 2015 uint8 *payload, 2016 int async); 2017 2018 extern int _bcm_ptp_timestamp_queue_add( 2019 int unit, 2020 bcm_ptp_stack_id_t ptp_id, 2021 int clock_index, 2022 unsigned payload_len, 2023 uint8 *payload); 2024 2025 extern int _bcm_ptp_unicast_master_table_init( 2026 int unit); 2027 2028 extern int _bcm_ptp_unicast_master_table_detach( 2029 int unit); 2030 2031 extern int _bcm_ptp_unicast_master_table_stack_create( 2032 int unit, 2033 bcm_ptp_stack_id_t ptp_id); 2034 2035 extern int _bcm_ptp_unicast_master_table_stack_destroy( 2036 int unit, 2037 bcm_ptp_stack_id_t ptp_id); 2038 2039 extern int _bcm_ptp_unicast_master_table_clock_create( 2040 int unit, 2041 bcm_ptp_stack_id_t ptp_id, 2042 int clock_num); 2043 2044 extern int _bcm_ptp_unicast_slave_table_init( 2045 int unit); 2046 2047 extern int _bcm_ptp_unicast_slave_table_detach( 2048 int unit); 2049 2050 extern int _bcm_ptp_unicast_slave_table_stack_create( 2051 int unit, 2052 bcm_ptp_stack_id_t ptp_id); 2053 2054 extern int _bcm_ptp_unicast_slave_table_stack_destroy( 2055 int unit, 2056 bcm_ptp_stack_id_t ptp_id); 2057 2058 extern int _bcm_ptp_unicast_slave_table_clock_create( 2059 int unit, 2060 bcm_ptp_stack_id_t ptp_id, 2061 int clock_num); 2062 2063 extern int _bcm_ptp_unicast_slave_table_clock_destroy( 2064 int unit, 2065 bcm_ptp_stack_id_t ptp_id, 2066 int clock_num); 2067 2068 extern int _bcm_ptp_acceptable_master_table_init( 2069 int unit); 2070 2071 extern int _bcm_ptp_acceptable_master_table_detach( 2072 int unit); 2073 2074 extern int _bcm_ptp_acceptable_master_table_stack_create( 2075 int unit, 2076 bcm_ptp_stack_id_t ptp_id); 2077 2078 extern int _bcm_ptp_acceptable_master_table_stack_destroy( 2079 int unit, 2080 bcm_ptp_stack_id_t ptp_id); 2081 2082 extern int _bcm_ptp_acceptable_master_table_clock_create( 2083 int unit, 2084 bcm_ptp_stack_id_t ptp_id, 2085 int clock_num); 2086 2087 extern int _bcm_ptp_servo_start( 2088 int unit, 2089 bcm_ptp_stack_id_t ptp_id, 2090 int clock_num); 2091 2092 extern int _bcm_ptp_servo_restart( 2093 int unit, 2094 bcm_ptp_stack_id_t ptp_id, 2095 int clock_num); 2096 2097 extern int _bcm_ptp_servo_stop( 2098 int unit, 2099 bcm_ptp_stack_id_t ptp_id, 2100 int clock_num); 2101 2102 extern int _bcm_ptp_servo_ipdv_configuration_get( 2103 int unit, 2104 bcm_ptp_stack_id_t ptp_id, 2105 int clock_num, 2106 _bcm_ptp_ipdv_config_t *config); 2107 2108 extern int _bcm_ptp_servo_ipdv_configuration_set( 2109 int unit, 2110 bcm_ptp_stack_id_t ptp_id, 2111 int clock_num, 2112 const _bcm_ptp_ipdv_config_t config); 2113 2114 extern int _bcm_ptp_servo_performance_get( 2115 int unit, 2116 bcm_ptp_stack_id_t ptp_id, 2117 int clock_num, 2118 _bcm_ptp_servo_performance_t *perf); 2119 2120 extern int _bcm_ptp_servo_ipdv_performance_get( 2121 int unit, 2122 bcm_ptp_stack_id_t ptp_id, 2123 int clock_num, 2124 _bcm_ptp_ipdv_performance_t *perf); 2125 2126 extern int _bcm_ptp_servo_performance_data_clear( 2127 int unit, 2128 bcm_ptp_stack_id_t ptp_id, 2129 int clock_num); 2130 2131 extern int 2132 _bcm_ptp_servo_type_get( 2133 uint32 profile_type, 2134 uint32 *servo); 2135 2136 extern int _bcm_ptp_phase_holdover_get( 2137 int unit, 2138 bcm_ptp_stack_id_t ptp_id, 2139 int clock_num, 2140 bcm_ptp_phase_holdover_state_t *state); 2141 2142 extern int _bcm_ptp_phase_holdover_set( 2143 int unit, 2144 bcm_ptp_stack_id_t ptp_id, 2145 int clock_num, 2146 const bcm_ptp_phase_holdover_state_t *state); 2147 2148 extern int _bcm_ptp_freq_corr_get( 2149 int unit, 2150 bcm_ptp_stack_id_t ptp_id, 2151 int clock_num, 2152 int32 *freq_corr_ppt, 2153 int32 *offset_freq_ppt); 2154 2155 #ifdef BCM_PTP_EXT_SERVO_SUPPORT 2156 extern int _bcm_ptp_freq_corr_set( 2157 int unit, 2158 bcm_ptp_stack_id_t ptp_id, 2159 int clock_num, 2160 double freq_corr_ppb, 2161 double freq_offset_ppb); 2162 #else 2163 extern int _bcm_ptp_freq_corr_set( 2164 int unit, 2165 bcm_ptp_stack_id_t ptp_id, 2166 int clock_num, 2167 int32 freq_corr_ppt, 2168 int32 freq_offset_ppt); 2169 #endif /* BCM_PTP_EXT_SERVO_SUPPORT */ 2170 2171 extern int _bcm_ptp_bcm_servo_synce_freq_corr_get_in_combined_mode( 2172 int unit, 2173 int stack_id, 2174 int64* servo_freq_correction_pbb); 2175 2176 extern int _bcm_ptp_telecom_g8265_map_QL_clockClass( 2177 bcm_ptp_telecom_g8265_quality_level_t QL, 2178 uint8 *clockClass); 2179 2180 extern int _bcm_ptp_telecom_g8265_map_clockClass_QL( 2181 uint8 clockClass, 2182 bcm_ptp_telecom_g8265_quality_level_t *QL); 2183 2184 extern int _bcm_ptp_telecom_g8265_verbose_level_set( 2185 uint32 flags); 2186 2187 extern int _bcm_ptp_clock_class_set( 2188 int unit, 2189 bcm_ptp_stack_id_t ptp_id, 2190 int clock_num, 2191 uint8 clockClass); 2192 2193 extern int _bcm_ptp_system_log_configure(int unit, bcm_ptp_stack_id_t ptp_id, int clock_num, 2194 uint32 debug_mask, uint64 udp_log_mask, 2195 bcm_mac_t src_mac, bcm_mac_t dest_mac, 2196 uint16 tpid, uint16 vid, uint8 ttl, 2197 bcm_ip_t src_addr, bcm_ip_t dest_addr, 2198 uint16 udp_port); 2199 2200 extern int _bcm_ptp_tunnel_arp_set( 2201 int unit, 2202 bcm_ptp_stack_id_t ptp_id, 2203 uint8 flag); 2204 2205 /* ESMC functions. */ 2206 extern int bcm_esmc_init( 2207 int unit, 2208 int stack_id); 2209 2210 extern int bcm_esmc_cleanup( 2211 int unit, 2212 int stack_id); 2213 2214 extern int bcm_esmc_rx( 2215 int unit, 2216 int stack_id, 2217 int ingress_port, 2218 int ethertype, 2219 int esmc_pdu_len, 2220 uint8 *esmc_pdu); 2221 2222 extern int bcm_esmc_pdu_port_data_get( 2223 int unit, 2224 int stack_id, 2225 int port_num, 2226 bcm_esmc_pdu_data_t *pdu_data, 2227 sal_time_t *timestamp); 2228 2229 /* T-DPLL functions. */ 2230 extern int bcm_tdpll_dpll_instance_init( 2231 int unit, 2232 int stack_id); 2233 2234 extern int bcm_tdpll_dpll_instance_cleanup( 2235 int unit, 2236 int stack_id); 2237 2238 extern int bcm_tdpll_dpll_reference_set( 2239 int unit, 2240 int stack_id, 2241 int num_dpll, 2242 int *dpll_ref); 2243 2244 extern int bcm_tdpll_input_clock_init( 2245 int unit, 2246 int stack_id); 2247 2248 extern int bcm_tdpll_input_clock_cleanup( 2249 int unit); 2250 2251 extern int bcm_tdpll_input_clock_port_lookup( 2252 int unit, 2253 int stack_id, 2254 int port_num, 2255 int *clock_index); 2256 2257 extern int bcm_tdpll_input_clock_mac_lookup( 2258 int unit, 2259 int stack_id, 2260 bcm_mac_t *mac, 2261 int *clock_index); 2262 2263 extern int bcm_tdpll_input_clock_reference_mac_get( 2264 int unit, 2265 int stack_id, 2266 int dpll_index, 2267 bcm_mac_t *mac); 2268 2269 extern int bcm_tdpll_input_clock_dpll_use_get( 2270 int unit, 2271 int stack_id, 2272 int clock_index, 2273 int dpll_index, 2274 int *dpll_use); 2275 2276 extern int bcm_tdpll_input_clock_dpll_use_set( 2277 int unit, 2278 int stack_id, 2279 int clock_index, 2280 int dpll_index, 2281 int dpll_use); 2282 2283 extern int bcm_tdpll_input_clock_dpll_reference_get( 2284 int unit, 2285 int stack_id, 2286 int dpll_index, 2287 int *reference); 2288 2289 extern int bcm_tdpll_output_clock_init( 2290 int unit, 2291 int stack_id); 2292 2293 extern int bcm_tdpll_output_clock_cleanup( 2294 int unit, 2295 int stack_id); 2296 2297 extern int bcm_tdpll_esmc_init( 2298 int unit, 2299 int stack_id); 2300 2301 extern int bcm_tdpll_esmc_cleanup( 2302 int unit, 2303 int stack_id); 2304 2305 extern int bcm_tdpll_esmc_holdover_event_send( 2306 int unit, 2307 int stack_id, 2308 int dpll_index); 2309 2310 extern int bcm_tdpll_esmc_switch_event_send( 2311 int unit, 2312 int stack_id, 2313 int dpll_index, 2314 bcm_esmc_quality_level_t ql); 2315 2316 extern int _bcm_ptp_modular_init( 2317 int unit, 2318 bcm_ptp_stack_id_t ptp_id, 2319 int clock_num, 2320 uint32 flags); 2321 2322 extern int _bcm_ptp_modular_shutdown( 2323 int unit, 2324 bcm_ptp_stack_id_t ptp_id, 2325 int clock_num); 2326 2327 extern int _bcm_ptp_ctdev_init( 2328 int unit, 2329 bcm_ptp_stack_id_t ptp_id, 2330 int clock_num, 2331 uint32 p); 2332 2333 extern int 2334 _bcm_ptp_ctdev_gateway( 2335 int unit, 2336 bcm_ptp_stack_id_t ptp_id, 2337 int clock_num, 2338 int ev_data_len, 2339 uint8 *ev_data); 2340 2341 extern int _bcm_ptp_ctdev_phase_accumulator( 2342 int unit, 2343 bcm_ptp_stack_id_t ptp_id, 2344 int clock_num, 2345 const int64 freq_corr_ppt); 2346 2347 extern int _bcm_ptp_ctdev_calculator( 2348 int unit, 2349 bcm_ptp_stack_id_t ptp_id, 2350 int clock_num); 2351 2352 extern int _bcm_ptp_ctdev_get( 2353 int unit, 2354 bcm_ptp_stack_id_t ptp_id, 2355 int clock_num, 2356 unsigned timescale_sec, 2357 uint64 *tdev_psec); 2358 2359 extern uint64 _bcm_ptp_llu_div( 2360 uint64 num, 2361 uint16 den); 2362 2363 extern uint32 _bcm_ptp_llu_isqrt( 2364 uint64 x); 2365 2366 extern uint32 _bcm_ptp_xorshift_rand( 2367 void); 2368 2369 extern uint16 _bcm_ptp_uint16_read( 2370 uint8* buffer); 2371 2372 extern uint32 _bcm_ptp_uint32_read( 2373 uint8* buffer); 2374 2375 extern uint64 _bcm_ptp_uint64_read( 2376 uint8* buffer); 2377 2378 extern int64 _bcm_ptp_int64_read( 2379 uint8* buffer); 2380 2381 extern int64 _bcm_ptp_uint64_to_int64( 2382 const uint64 value); 2383 2384 extern uint64 _bcm_ptp_int64_to_uint64( 2385 const int64 value); 2386 2387 extern void _bcm_ptp_uint16_write( 2388 uint8* buffer, 2389 const uint16 value); 2390 2391 extern void _bcm_ptp_uint32_write( 2392 uint8* buffer, 2393 const uint32 value); 2394 2395 extern void _bcm_ptp_uint64_write( 2396 uint8* buffer, 2397 const uint64 value); 2398 2399 extern void _bcm_ptp_int64_write( 2400 uint8* buffer, 2401 const int64 value); 2402 2403 extern int _bcm_ptp_function_precheck( 2404 int unit, 2405 bcm_ptp_stack_id_t ptp_id, 2406 int clock_num, 2407 uint32 clock_port); 2408 2409 extern int _bcm_ptp_clock_lookup( 2410 const bcm_ptp_clock_identity_t clock_identity, 2411 int unit, 2412 bcm_ptp_stack_id_t ptp_id, 2413 int *clock_num); 2414 2415 extern int _bcm_ptp_peer_address_convert( 2416 bcm_ptp_clock_peer_address_t *peer_addr, 2417 bcm_ptp_clock_port_address_t *port_addr); 2418 2419 extern int _bcm_ptp_port_address_convert( 2420 bcm_ptp_clock_port_address_t *port_addr, 2421 bcm_ptp_clock_peer_address_t *peer_addr); 2422 2423 extern int _bcm_ptp_peer_address_raw_compare( 2424 const bcm_ptp_clock_peer_address_t *a, 2425 uint8 *b, 2426 bcm_ptp_protocol_t protocol); 2427 2428 extern int _bcm_ptp_peer_address_compare( 2429 const bcm_ptp_clock_peer_address_t *a, 2430 const bcm_ptp_clock_peer_address_t *b); 2431 2432 extern int _bcm_ptp_port_address_compare( 2433 const bcm_ptp_clock_port_address_t *a, 2434 const bcm_ptp_clock_port_address_t *b); 2435 2436 #ifdef BCM_PTP_EXT_SERVO_SUPPORT 2437 extern void _bcm_ptp_dump_mbox_tsevent_stats(void); 2438 2439 extern int _bcm_ptp_peer_portid_compare( 2440 const bcm_ptp_port_identity_t *a, 2441 const bcm_ptp_port_identity_t *b); 2442 2443 extern int _bcm_ptp_signaled_unicast_master_index_get( 2444 int unit, 2445 bcm_ptp_stack_id_t ptp_id, 2446 int clock_num, 2447 bcm_ptp_port_identity_t *portId, 2448 int *inst_num); 2449 2450 uint32 _bcm_ptp_servo_usecintv_get(int8 log_int); 2451 2452 extern int _bcm_ptp_telecom_g8265_packet_master_best_get( 2453 int unit, 2454 bcm_ptp_stack_id_t ptp_id, 2455 int clock_num, 2456 bcm_ptp_port_identity_t * master_portId); 2457 2458 extern void _bcm_ptp_servo_state_notify( int unit, bcm_ptp_stack_id_t ptp_id, int clock_num); 2459 2460 extern int _bcm_ptp_servo_state_set( int unit, bcm_ptp_stack_id_t ptp_id, int clock_num, int servo_state); 2461 extern int _bcm_ptp_telecom_g8265_packet_master_ptsf_unusable_set( int unit, bcm_ptp_stack_id_t ptp_id, 2462 int clock_num, bcm_ptp_port_identity_t * master_portId, int ptsf_state); 2463 extern void _bcm_ptp_ext_servo_def_evt_hdlr(int unit, bcm_ptp_stack_id_t ptp_id, int clock_num); 2464 2465 #endif /* BCM_PTP_EXT_SERVO_SUPPORT */ 2466 2467 extern void _bcm_ptp_send_event_cb(int, bcm_ptp_stack_id_t, int, uint8 *, uint16); 2468 2469 extern void _bcm_ptp_dump_hex( 2470 uint8 *buf, 2471 int len, 2472 int indent); 2473 2474 #if defined(BCM_PTP_INTERNAL_STACK_SUPPORT) 2475 extern int _bcm_ptp_check_firmware_exist( 2476 char* fw_str); 2477 #endif /* defined(BCM_PTP_INTERNAL_STACK_SUPPORT) */ 2478 /* monotonic time in seconds */ 2479 extern sal_time_t _bcm_ptp_monotonic_time(void); 2480 2481 /* Prototypes for esw functions */ 2482 extern void esw_set_ext_stack_config_uint32( 2483 _bcm_ptp_stack_info_t *stack_p, 2484 uint32 offset, uint32 value); 2485 2486 extern void esw_set_ext_stack_config_array( 2487 _bcm_ptp_stack_info_t* stack_p, 2488 uint32 offset, 2489 const uint8 * array, 2490 int len); 2491 2492 extern uint8 _bcm_ptp_read_pcishared_uint8( 2493 bcm_ptp_external_stack_info_t *stack_p, 2494 uint32 addr); 2495 2496 extern void _bcm_ptp_write_pcishared_uint8( 2497 bcm_ptp_external_stack_info_t *stack_p, 2498 uint32 addr, 2499 uint8 val); 2500 2501 extern int _bcm_ptp_write_pcishared_uint32( 2502 void *cookie, 2503 uint32 addr, 2504 uint32 val); 2505 2506 extern int _bcm_ptp_read_pcishared_uint32( 2507 void *cookie, 2508 uint32 addr, 2509 uint32 *val); 2510 2511 extern void _bcm_ptp_write_pcishared_uint8_aligned_array( 2512 int pci_idx, 2513 uint32 addr, 2514 uint8 * array, 2515 int array_len); 2516 2517 extern int _bcm_ptp_rcpu_configuration_set( 2518 int unit, 2519 bcm_ptp_stack_id_t ptp_id, 2520 uint16 rcpu_ethertype, 2521 uint16 rcpu_signature, 2522 uint16 rcpu_tpid, 2523 uint16 rcpu_vlan, 2524 int top_port, 2525 uint16 rcpu_reflected_ethertype, 2526 bcm_mac_t switch_mac); 2527 2528 int _bcm_ptp_ext_stack_reset(int pci_idx); 2529 int _bcm_ptp_ext_stack_start(int pci_idx); 2530 2531 int _bcm_ptp_ext_stack_processor_status_get( 2532 int pci_idx, 2533 _bcm_ptp_ext_stack_processor_info_t *info); 2534 2535 int _bcm_ptp_ext_stack_system_status_get( 2536 int pci_idx, 2537 _bcm_ptp_ext_stack_processor_info_t *info); 2538 2539 int _bcm_ptp_ext_stack_task_status_get( 2540 int pci_idx, 2541 _bcm_ptp_ext_stack_processor_info_t *info); 2542 2543 int _bcm_ptp_ext_stack_fault_information_get( 2544 int pci_idx, 2545 int max_size, 2546 uint8 *fault_info, 2547 int *fault_info_size); 2548 2549 extern int _bcm_ptp_set_max_unicast_masters( 2550 int unit, 2551 bcm_ptp_stack_id_t ptp_id, 2552 int max_masters); 2553 2554 extern int _bcm_ptp_set_max_acceptable_masters( 2555 int unit, 2556 bcm_ptp_stack_id_t ptp_id, 2557 int max_masters); 2558 2559 extern int _bcm_ptp_set_max_unicast_slaves( 2560 int unit, 2561 bcm_ptp_stack_id_t ptp_id, 2562 int max_slaves); 2563 2564 extern int _bcm_ptp_set_max_multicast_slave_stats( 2565 int unit, 2566 bcm_ptp_stack_id_t ptp_id, 2567 int max_entries); 2568 2569 2570 extern int _bcm_ptp_register_management_callback( 2571 int unit, 2572 bcm_ptp_cb cb, 2573 void *user_data); 2574 2575 extern int _bcm_ptp_register_event_callback( 2576 int unit, 2577 bcm_ptp_cb cb, 2578 void *user_data); 2579 2580 extern int _bcm_ptp_register_peers_callback( 2581 int unit, 2582 bcm_ptp_cb cb, 2583 void *user_data); 2584 2585 extern int _bcm_ptp_register_fault_callback( 2586 int unit, 2587 bcm_ptp_cb cb, 2588 void *user_data); 2589 2590 extern int _bcm_ptp_register_signal_callback( 2591 int unit, 2592 bcm_ptp_cb cb, 2593 void *user_data); 2594 2595 extern int _bcm_ptp_register_signaling_arbiter( 2596 int unit, 2597 bcm_ptp_signaling_arbiter_t arb, 2598 void *user_data); 2599 2600 extern int _bcm_ptp_unregister_management_callback( 2601 int unit); 2602 2603 extern int _bcm_ptp_unregister_event_callback( 2604 int unit); 2605 2606 extern int _bcm_ptp_unregister_peers_callback( 2607 int unit); 2608 2609 extern int _bcm_ptp_unregister_fault_callback( 2610 int unit); 2611 2612 extern int _bcm_ptp_unregister_signal_callback( 2613 int unit); 2614 2615 extern int _bcm_ptp_unregister_signaling_arbiter( 2616 int unit); 2617 2618 /* external-specific transport functions */ 2619 extern _bcm_ptp_transport_init_t _bcm_ptp_external_transport_init; 2620 extern _bcm_ptp_transport_tx_t _bcm_ptp_external_tx; 2621 extern _bcm_ptp_transport_tx_completion_t _bcm_ptp_external_tx_completion; 2622 extern _bcm_ptp_transport_terminate_t _bcm_ptp_external_transport_terminate; 2623 2624 /* internal-specific transport functions */ 2625 extern _bcm_ptp_transport_init_t _bcm_ptp_internal_transport_init; 2626 extern _bcm_ptp_transport_tx_t _bcm_ptp_internal_tx; 2627 extern _bcm_ptp_transport_tx_completion_t _bcm_ptp_internal_tx_completion; 2628 extern _bcm_ptp_transport_terminate_t _bcm_ptp_internal_transport_terminate; 2629 2630 extern int _bcm_ptp_tunnel_queue_init(int unit, bcm_ptp_stack_id_t ptp_id); 2631 extern int _bcm_ptp_tunnel_queue_cleanup(int unit, bcm_ptp_stack_id_t ptp_id); 2632 2633 extern int _bcm_ptp_timestamp_queue_init(int unit, bcm_ptp_stack_id_t ptp_id); 2634 extern int _bcm_ptp_timestamp_queue_cleanup(int unit, bcm_ptp_stack_id_t ptp_id); 2635 2636 /* internal-specific signaling functions */ 2637 2638 extern int _bcm_ptp_signaling_init( int unit, bcm_ptp_stack_id_t ptp_id); 2639 extern int _bcm_ptp_signaling_cleanup( int unit, bcm_ptp_stack_id_t ptp_id); 2640 extern int _bcm_ptp_signaling_manager(int unit, bcm_ptp_stack_id_t ptp_id, 2641 int clock_num, int en_telecom); 2642 2643 extern int _bcm_ptp_signaled_unicast_master_table_reset(int unit, bcm_ptp_stack_id_t ptp_id); 2644 extern int _bcm_ptp_signaled_unicast_master_table_search(int unit, bcm_ptp_stack_id_t ptp_id, int port_num, 2645 const bcm_ptp_clock_peer_address_t *addr); 2646 extern int _bcm_ptp_signaled_unicast_slave_table_reset(int unit, bcm_ptp_stack_id_t ptp_id); 2647 extern int _bcm_ptp_unicast_slave_host_reset(int unit, bcm_ptp_stack_id_t ptp_id, int clock_num, int port_num); 2648 extern int _bcm_ptp_unicast_slave_stack_restore(int unit, bcm_ptp_stack_id_t ptp_id, int clock_num, int port_num); 2649 2650 extern int _bcm_ptp_construct_signaling_msg(bcm_ptp_port_identity_t *from_port, 2651 bcm_ptp_clock_identity_t to_clock, 2652 uint16 to_port, int domain, uint16 sequenceId, 2653 uint8* tlv_payload, int tlv_payload_len, 2654 uint8* udp_payload, int *udp_payload_len); 2655 2656 extern int _bcm_ptp_construct_signaling_request_tlv(int type, int interval, unsigned duration, 2657 uint8* tlv_payload, int *tlv_payload_len); 2658 2659 extern int _bcm_ptp_construct_udp_packet(bcm_ptp_clock_peer_t *peer, bcm_ptp_clock_port_address_t *local_port, 2660 uint8* udp_payload, int udp_payload_len, uint8* packet, int *packet_len, 2661 uint8 ip_dscp, uint8 ttl); 2662 2663 extern int _bcm_ptp_construct_signaling_cancel_tlv(int type, uint8* tlv_payload, int *tlv_payload_len); 2664 extern int _bcm_ptp_construct_signaling_ack_cancel_tlv(int type, uint8* tlv_payload, int *tlv_payload_len); 2665 extern int _bcm_ptp_construct_signaling_grant_tlv(int type, int interval, unsigned duration, int invite_renewal, 2666 uint8* tlv_payload, int *tlv_payload_len); 2667 2668 extern int _bcm_ptp_signaling_message_append_tlv(uint8 *msg, int *msgLength, 2669 uint8 *tlv, int tlvLength); 2670 2671 extern int _bcm_ptp_append_tlv_to_grant_unicast_tx(bcm_ptp_tlv_type_t input_tlv_type, uint8* input_payload, int input_len, 2672 uint8* tlv_payload, int *tlv_payload_len); 2673 2674 extern bcm_ptp_callback_t _bcm_ptp_process_incoming_signaling_msg( 2675 int unit, bcm_ptp_stack_id_t ptp_id, int clock_num, int port_num, bcm_ptp_protocol_t protocol, 2676 int src_addr_offset, int ptp_msg_offset, unsigned data_length, uint8* data); 2677 2678 /* For use by diag shell */ 2679 extern _bcm_ptp_unit_cache_t _bcm_common_ptp_unit_array[BCM_MAX_NUM_UNITS]; 2680 2681 /* For use by diag shell */ 2682 extern int _bcm_common_ptp_log_level_set(int unit, bcm_ptp_stack_id_t ptp_id, 2683 int clock_num, uint32 level); 2684 2685 /* For use by diag shell */ 2686 extern int _bcm_common_ptp_input_channels_status_get(int unit, 2687 bcm_ptp_stack_id_t ptp_id, int clock_num, 2688 int *num_chan, _bcm_ptp_channel_status_t *chan_status); 2689 2690 /* For use by diag shell */ 2691 extern int _bcm_ptp_show_system_info(int unit, 2692 bcm_ptp_stack_id_t ptp_id, 2693 int clock_num); 2694 2695 /* For use by diag shell */ 2696 typedef struct _bcm_ptp_clock_description_s { 2697 uint16 size; 2698 uint8 *data; 2699 } _bcm_ptp_clock_description_t; 2700 2701 extern int _bcm_ptp_clock_description_get(int unit, 2702 bcm_ptp_stack_id_t ptp_id, 2703 int clock_num, 2704 int port_num, 2705 _bcm_ptp_clock_description_t *description); 2706 2707 extern int _bcm_ptp_update_peer_counts( 2708 int unit, bcm_ptp_stack_id_t ptp_id, int clock_num, 2709 uint16 localPortNum, bcm_ptp_clock_identity_t *clockID, 2710 bcm_ptp_clock_port_address_t *port_addr, int isMaster, 2711 unsigned announces, unsigned syncs, unsigned followups, unsigned delayreqs, 2712 unsigned delayresps, unsigned mgmts, unsigned signals, unsigned rejected, 2713 bcm_gport_t *phy_port); 2714 2715 extern int _bcm_ptp_update_peer_dataset(int unit, bcm_ptp_stack_id_t ptp_id, int clock_num, int port_num); 2716 2717 extern int _bcm_ptp_port_address_cmp(bcm_ptp_clock_port_address_t *a, bcm_ptp_clock_port_address_t *b); 2718 extern int _bcm_ptp_is_clockid_null(bcm_ptp_clock_identity_t clockID); 2719 2720 /* Diag-shell reference C-TDEV alarm function. */ 2721 extern uint32 2722 _bcm_ptp_ctdev_g823_mask( 2723 int tau); 2724 2725 /* For use protecting us from sal syncronization function issues */ 2726 2727 typedef sal_mutex_t _bcm_ptp_mutex_t; 2728 2729 _bcm_ptp_mutex_t _bcm_ptp_mutex_create(char *desc); 2730 void _bcm_ptp_mutex_destroy(_bcm_ptp_mutex_t m); 2731 int _bcm_ptp_mutex_take(_bcm_ptp_mutex_t m, int usec); 2732 int _bcm_ptp_mutex_give(_bcm_ptp_mutex_t m); 2733 2734 typedef sal_sem_t _bcm_ptp_sem_t; 2735 2736 _bcm_ptp_sem_t _bcm_ptp_sem_create(char *desc, int binary, int initial_count); 2737 void _bcm_ptp_sem_destroy(_bcm_ptp_sem_t b); 2738 int _bcm_ptp_sem_take(_bcm_ptp_sem_t b, int usec); 2739 int _bcm_ptp_sem_give(_bcm_ptp_sem_t b); 2740 2741 /* For use by diag shell, to register ARP handler if no other L3 handling is in place: */ 2742 extern void (*_bcm_ptp_arp_callback)(int unit, bcm_ptp_stack_id_t ptp_id, int protocol, int l3_offset, int payload_offset, int msg_len, uint8 *msg); 2743 2744 void ptp_printf(const char *, ...) 2745 #if defined(__GNUC__) || defined(__GNUG__) 2746 __attribute__ ((format (printf, 1, 2))) 2747 #endif 2748 ; 2749 2750 extern int _bcm_ptp_addr_len(int addr_type); 2751 extern int _bcm_ptp_running(int unit); 2752 2753 /* PHY synchronization state to maintain proper PHY timestamps */ 2754 typedef enum _bcm_ptp_physync_state_e { 2755 _bcm_ptp_physync_state_init = 0, 2756 _bcm_ptp_physync_state_required = 1, /* FW-initiated state change: PHY synchronization is required. */ 2757 _bcm_ptp_physync_state_pending = 2, /* Host-initiated state change: PHY synchronization is pending. */ 2758 _bcm_ptp_physync_state_synchronized = 3 /* FW-initiated state change: PHYs are synchronized. */ 2759 } _bcm_ptp_physync_state_t; 2760 2761 2762 /*APTS structures*/ 2763 2764 #define BCM_PTP_APTS_SYNCE_SOURCE_ID 0 2765 #define BCM_PTP_APTS_GPS_SOURCE_ID 1 2766 #define BCM_PTP_APTS_PTP_SOURCE_ID 2 2767 2768 /* Enumeration of current time source availability */ 2769 typedef enum _bcm_ptp_apts_source_avail_e { 2770 _bcm_ptp_apts_avail_none = 0x0, 2771 _bcm_ptp_apts_avail_synce = 0x1, 2772 _bcm_ptp_apts_avail_gps = 0x2, 2773 _bcm_ptp_apts_avail_gps_synce = 0x3, 2774 _bcm_ptp_apts_avail_ptp = 0x4, 2775 _bcm_ptp_apts_avail_ptp_synce = 0x5, 2776 _bcm_ptp_apts_avail_ptp_gps = 0x6, 2777 _bcm_ptp_apts_avail_ptp_gps_synce = 0x7 2778 } _bcm_ptp_apts_source_avail_t; 2779 2780 extern int g_apts_enabled; 2781 extern bcm_ptp_clock_apts_mode_t g_apts_current_op_mode; 2782 extern _bcm_ptp_apts_source_avail_t g_apts_current_source_state; 2783 extern bcm_ptp_clock_apts_source_t g_apts_usr_cfgd_source_state; 2784 extern int g_apts_gps_offset; 2785 extern bcm_ptp_port_identity_t g_gps_port_id; 2786 extern bcm_ptp_port_identity_t g_ptp_best_master_portId; 2787 2788 extern void _bcm_ptp_apts_update_current_mode(void); 2789 2790 /* current datset offset from master scale factor as per 1588v2 std.*/ 2791 #define PTP_CURRENT_DATASET_OFFSET_FROM_MASTER_SCALEFACTOR 65536 2792 2793 2794 #endif /* INCLUDE_PTP */ 2795 #endif /* !__BCM_INT_PTP_H__ */