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