1 /*
2  * Copyright 2021-2023 NXP
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef FSL_NETC_PORT_H_
8 #define FSL_NETC_PORT_H_
9 
10 #include "fsl_netc.h"
11 
12 /*******************************************************************************
13  * Definitions
14  ******************************************************************************/
15 #if !(defined(__GNUC__) || defined(__ICCARM__))
16 #pragma region netc_hw_port
17 #endif
18 /*! @addtogroup netc_hw_port
19  * @{
20  */
21 
22 /*! @brief The port supported minimum/maximum frame size. */
23 #define NETC_PORT_MIN_FRAME_SIZE (18U)
24 #define NETC_PORT_MAX_FRAME_SIZE (2000U)
25 
26 typedef enum _netc_port_intr_flags
27 {
28     kNETC_TxEmptyFlag             = NETC_ETH_LINK_PM0_IEVENT_TX_EMPTY_MASK, /*!< Tx FIFO empty flag. */
29     kNETC_RxEmptyFlag             = NETC_ETH_LINK_PM0_IEVENT_RX_EMPTY_MASK, /*!< Rx FIFO empty flag. */
30     kNETC_TxOverflowFlag          = NETC_ETH_LINK_PM0_IEVENT_TX_OVFL_MASK, /*!< Tx overflow flag. */
31     kNETC_TxUnderflowFlag         = NETC_ETH_LINK_PM0_IEVENT_TX_UNFL_MASK, /*!< Tx underflow flag. */
32     kNETC_RxOverflowFlag          = NETC_ETH_LINK_PM0_IEVENT_RX_OVFL_MASK, /*!< Rx overflow flag. */
33     kNETC_MagicPacketFlag         = NETC_ETH_LINK_PM0_IEVENT_MGI_MASK, /*!< Magic packet detection indication flag. */
34     kNETC_TxClkStopFlag           = NETC_ETH_LINK_PM0_IEVENT_TX_CSD_MASK, /*!< Tx clock stop detection flag. */
35     kNETC_RxClkStopFlag           = NETC_ETH_LINK_PM0_IEVENT_RX_CSD_MASK, /*!< Rx clock stop detection flag. */
36     kNETC_SpeedDuplexChangeFlag   = NETC_ETH_LINK_PM0_IEVENT_SPD_DUP_MASK, /*!< Speed/Duplex Change flag */
37     kNETC_MacMergeSMDErrFlag      = NETC_ETH_LINK_PM0_IEVENT_MRG_SERR_MASK, /*!< MAC merge frame SMD error received event flag */
38     kNETC_MacMergeAssemblyErrFlag = NETC_ETH_LINK_PM0_IEVENT_MRG_AERR_MASK, /*!< MAC merge frame assembly error event flag */
39 } netc_port_intr_flags_t;
40 
41 /*! @brief Defines the port MAC frame loopback mode. */
42 typedef enum _netc_port_loopback_mode_t
43 {
44     kNETC_PortLpbWithExtTxClk, /*!< Port MAC frame loopback with external Tx clock. */
45     kNETC_PortLpbWithIntTxClk = 2U, /*!< Port MAC frame loopback with internal Tx clock. */
46 } netc_port_loopback_mode_t;
47 
48 /*! @} */ // end of netc_hw_port
49 #if !(defined(__GNUC__) || defined(__ICCARM__))
50 #pragma endregion netc_hw_port
51 #endif
52 
53 #if !(defined(__GNUC__) || defined(__ICCARM__))
54 #pragma region netc_hw_port_tx
55 #endif
56 /*! @addtogroup netc_hw_port_tx
57  * @{
58  */
59 
60 /*! @} */ // end of netc_hw_port_tx
61 #if !(defined(__GNUC__) || defined(__ICCARM__))
62 #pragma endregion netc_hw_port_tx
63 #endif
64 
65 #if !(defined(__GNUC__) || defined(__ICCARM__))
66 #pragma region netc_hw_port_rx
67 #endif
68 /*! @addtogroup netc_hw_port_rx
69  * @{
70  */
71 
72 /*! @} */ // end of netc_hw_port_rx
73 #if !(defined(__GNUC__) || defined(__ICCARM__))
74 #pragma endregion netc_hw_port_rx
75 #endif
76 
77 #if defined(__cplusplus)
78 extern "C" {
79 #endif
80 
81 /*******************************************************************************
82  * API
83  ******************************************************************************/
84 #if !(defined(__GNUC__) || defined(__ICCARM__))
85 #pragma region netc_hw_port
86 #endif
87 /*! @addtogroup netc_hw_port
88  * @{
89  */
90 /*!
91  * @brief Configure specified PORT
92  *
93  * @param base   NETC port module base address.
94  * @param config Port configuration structure.
95  * @return status_t
96  */
97 status_t NETC_PortConfig(NETC_PORT_Type *base, const netc_port_common_t *config);
98 
99 /*!
100  * @brief Set the MAC address.
101  *
102  * @param handle
103  * @param macAddr
104  */
105 void NETC_PortSetMacAddr(NETC_PORT_Type *base, const uint8_t *macAddr);
106 
107 /*!
108  * @brief Check whether this port a pseudo MAC port.
109  *
110  * @param base PORT peripheral base address.
111  */
112 bool NETC_PortIsPseudo(NETC_PORT_Type *base);
113 
114 /*!
115  * @brief Get specified PORT discard counter
116  *
117  * @param base   NETC port module base address.
118  * @param discardType Port discard type.
119  * @param statistic pointer to the statistic data
120  */
121 void NETC_PortGetDiscardStatistic(NETC_PORT_Type *base,
122                                   netc_port_discard_tpye_t discardType,
123                                   netc_port_discard_statistic_t *statistic);
124 
125 /*!
126  * @brief Clean the Port Rx discard reason. Set the related bits to 1 to clear the specific reasons
127  *
128  * @param base   NETC port module base address.
129  * @param discardType Port discard type.
130  * @param reason0
131  * @param reason1
132  */
133 void NETC_PortClearDiscardReason(NETC_PORT_Type *base,
134                                  netc_port_discard_tpye_t discardType,
135                                  uint32_t reason0,
136                                  uint32_t reason1);
137 
138 /*!
139  * @brief Get port time gate scheduling gate list status
140  *
141  * @param base   NETC port module base address.
142  * @return Port status flags which are ORed by the enumerators in the @ref netc_port_tgsl_status_t
143  */
NETC_PortGetTGSListStatus(NETC_PORT_Type * base)144 static inline uint32_t NETC_PortGetTGSListStatus(NETC_PORT_Type *base)
145 {
146     return base->PTGAGLSR;
147 }
148 
149 /*!
150  * @brief Do graceful stop for Port Ethernet MAC receive/transmit
151  *
152  * @param base   NETC port module base address.
153  */
154 void NETC_PortEthMacGracefulStop(NETC_PORT_Type *base);
155 
156 /*!
157  * @brief Set port speed
158  *
159  * @param base  NETC port module base address.
160  * @param pSpeed  Transmit Port Speed = 10Mbps * (pSpeed+1), Used by ETS, Qbu and to determine
161  * if cut-through is permissable.
162  */
NETC_PortSetSpeed(NETC_PORT_Type * base,uint16_t pSpeed)163 static inline void NETC_PortSetSpeed(NETC_PORT_Type *base, uint16_t pSpeed)
164 {
165     assert(pSpeed <= 15999U);
166     base->PCR = (base->PCR & ~NETC_PORT_PCR_PSPEED_MASK) | NETC_PORT_PCR_PSPEED(pSpeed);
167 }
168 
169 /*! @} */ // end of netc_hw_port
170 #if !(defined(__GNUC__) || defined(__ICCARM__))
171 #pragma endregion netc_hw_port
172 #endif
173 
174 #if !(defined(__GNUC__) || defined(__ICCARM__))
175 #pragma region netc_hw_port_tx
176 #endif
177 /*! @addtogroup netc_hw_port_tx
178  * @{
179  */
180 
181 /*!
182  * @brief Configure the port time gating Scheduling
183  *
184  * @param base
185  * @param config
186  * @return status_t
187  */
NETC_PortConfigTGS(NETC_PORT_Type * base,const netc_port_tg_config_t * config)188 static inline status_t NETC_PortConfigTGS(NETC_PORT_Type *base, const netc_port_tg_config_t *config)
189 {
190     base->PTGSATOR = NETC_PORT_PTGSATOR_ADV_TIME_OFFSET(config->advOffset);
191     if ((base->PCAPR & NETC_PORT_PCAPR_LINK_TYPE_MASK) == 0U)
192     {
193         base->PTGSHCR = NETC_PORT_PTGSHCR_HOLD_SKEW(config->holdSkew);
194     }
195     return kStatus_Success;
196 }
197 
198 /*!
199  * @brief Config the Credit-Based Shaper (CBS) for specified Port Traffic Class
200  *
201  * @param base
202  * @param tcIdx
203  * @param config
204  * @return status_t
205  */
206 status_t NETC_PortConfigTcCBS(NETC_PORT_Type *base, netc_hw_tc_idx_t tcIdx, const netc_port_tc_cbs_config_t *config);
207 
208 /*!
209  * @brief Config the max Transmit max SDU for specified Port Traffic Class
210  *
211  * @param base
212  * @param tcIdx
213  * @param config
214  * @return status_t
215  */
NETC_PortConfigTcMaxSDU(NETC_PORT_Type * base,netc_hw_tc_idx_t tcIdx,const netc_port_tc_sdu_config_t * config)216 static inline status_t NETC_PortConfigTcMaxSDU(NETC_PORT_Type *base,
217                                                netc_hw_tc_idx_t tcIdx,
218                                                const netc_port_tc_sdu_config_t *config)
219 {
220     status_t result = kStatus_Success;
221 
222     if (config->maxSduSized > 0x07D0U)
223     {
224         /* This limit must not exceed 0x07D0 (2000 bytes) */
225         result = kStatus_OutOfRange;
226     }
227     else
228     {
229         base->TCT_NUM[tcIdx].PTCTMSDUR = NETC_PORT_PTCTMSDUR_SF_MAXSDU_DIS(!config->enTxMaxSduCheck) |
230                                          NETC_PORT_PTCTMSDUR_SDU_TYPE(config->sduType) |
231                                          NETC_PORT_PTCTMSDUR_MAXSDU(config->maxSduSized);
232     }
233 
234     return result;
235 }
236 
237 /*!
238  * @brief Read the max Transmit max SDU for specified Port Traffic Class
239  *
240  * @param base
241  * @param tcIdx
242  * @param config
243  * @return status_t
244  */
NETC_PortGetTcMaxSDU(NETC_PORT_Type * base,netc_hw_tc_idx_t tcIdx,netc_port_tc_sdu_config_t * config)245 static inline status_t NETC_PortGetTcMaxSDU(NETC_PORT_Type *base,
246                                             netc_hw_tc_idx_t tcIdx,
247                                             netc_port_tc_sdu_config_t *config)
248 {
249     config->maxSduSized = (uint16_t)(base->TCT_NUM[tcIdx].PTCTMSDUR & NETC_PORT_PTCTMSDUR_MAXSDU_MASK) >> NETC_PORT_PTCTMSDUR_MAXSDU_SHIFT;
250     config->enTxMaxSduCheck = (bool)((base->TCT_NUM[tcIdx].PTCTMSDUR & NETC_PORT_PTCTMSDUR_SF_MAXSDU_DIS_MASK) >> NETC_PORT_PTCTMSDUR_SF_MAXSDU_DIS_SHIFT);
251     config->sduType = (netc_tc_sdu_type_t)(uint32_t)((base->TCT_NUM[tcIdx].PTCTMSDUR & NETC_PORT_PTCTMSDUR_SDU_TYPE_MASK) >> NETC_PORT_PTCTMSDUR_SDU_TYPE_SHIFT);
252 
253     return kStatus_Success;
254 }
255 
256 /*! @} */ // end of netc_hw_port_tx
257 #if !(defined(__GNUC__) || defined(__ICCARM__))
258 #pragma endregion netc_hw_port_tx
259 #endif
260 
261 #if !(defined(__GNUC__) || defined(__ICCARM__))
262 #pragma region netc_hw_port_rx
263 #endif
264 /*! @addtogroup netc_hw_port_rx
265  * @{
266  */
267 
268 /*!
269  * @brief Set port Parser.
270  *
271  * @param base  PORT peripheral base address.
272  * @param config  The port Parser configuration.
273  */
NETC_PortSetParser(NETC_PORT_Type * base,const netc_port_parser_config_t * config)274 static inline void NETC_PortSetParser(NETC_PORT_Type *base, const netc_port_parser_config_t *config)
275 {
276     base->PPCR = NETC_PORT_PPCR_L4PFS(config->l4PayloadCount) | NETC_PORT_PPCR_L4HFP(config->enableL4Parser) |
277                  NETC_PORT_PPCR_L3PFS(config->l3PayloadCount) | NETC_PORT_PPCR_L3HFP(config->enableL3Parser) |
278                  NETC_PORT_PPCR_L2PFS(config->l2PloadCount);
279 }
280 
281 /*!
282  * @brief Set port acceptable VLAN.
283  *
284  * @param base  PORT peripheral base address.
285  * @param config  The port acceptable vlan classification configuration.
286  */
NETC_PortSetVlanClassify(NETC_PORT_Type * base,const netc_port_vlan_classify_config_t * config)287 static inline void NETC_PortSetVlanClassify(NETC_PORT_Type *base, const netc_port_vlan_classify_config_t *config)
288 {
289     base->PTAR = NETC_PORT_PTAR_OVTPIDL(config->outerMask) | NETC_PORT_PTAR_IVTPIDL(config->innerMask);
290 }
291 
292 /*!
293  * @brief Set port Qos Classification.
294  *
295  * @param base  PORT peripheral base address.
296  * @param config  The port QoS classification configuration.
297  * @return status_t
298  */
NETC_PortSetQosClassify(NETC_PORT_Type * base,const netc_port_qos_classify_config_t * config)299 static inline status_t NETC_PortSetQosClassify(NETC_PORT_Type *base, const netc_port_qos_classify_config_t *config)
300 {
301 #if defined(FSL_FEATURE_NETC_HAS_ERRATA_051649) && FSL_FEATURE_NETC_HAS_ERRATA_051649
302     /* ERRATA051649: Only mapping profile instance 0 can be used. Mapping profile instance 1 cannot be used due the decoding of the selected
303        profile is not correct. Therefore, if any switch port is configured to use the second mapping profile (1), all switch ports will not
304        assign the default QoS correctly. */
305     if (config->vlanQosMap != 0U)
306     {
307         return kStatus_InvalidArgument;
308     }
309 #endif
310 
311     base->PQOSMR = NETC_PORT_PQOSMR_VQMP(config->vlanQosMap) | NETC_PORT_PQOSMR_DIPV(config->defaultIpv) |
312                    NETC_PORT_PQOSMR_DDR(config->defaultDr) | NETC_PORT_PQOSMR_VE(config->enVlanInfo) |
313                    NETC_PORT_PQOSMR_VS(config->vlanTagSelect);
314 
315     return kStatus_Success;
316 }
317 
318 /*!
319  * @brief Set port ingress filter.
320  *
321  * @param base  PORT peripheral base address.
322  * @param config  The port ingress filter configuration.
323  */
NETC_PortSetIPF(NETC_PORT_Type * base,const netc_port_ipf_config_t * config)324 static inline void NETC_PortSetIPF(NETC_PORT_Type *base, const netc_port_ipf_config_t *config)
325 {
326     base->PCR    = NETC_PORT_PCR_L2DOSE(config->enL2Dos);
327     base->PIPFCR = NETC_PORT_PIPFCR_EN(config->enIPFTable);
328 }
329 
330 /*!
331  * @brief Set port Ingress stream identification.
332  *
333  * @param base  PORT peripheral base address.
334  * @param config  The port Ingress stream identification configuration.
335  */
NETC_PortSetISI(NETC_PORT_Type * base,const netc_port_psfp_isi_config * config)336 static inline void NETC_PortSetISI(NETC_PORT_Type *base, const netc_port_psfp_isi_config *config)
337 {
338     /* Configure ingress stream identification */
339     base->PISIDCR = NETC_PORT_PISIDCR_ISEID(config->defaultISEID) | NETC_PORT_PISIDCR_KC1EN(config->enKC1) |
340                     NETC_PORT_PISIDCR_KC0EN(config->enKC0) | NETC_PORT_PISIDCR_KCPAIR(config->kcPair);
341 }
342 
343 /*! @} */ // end of netc_hw_port_rx
344 #if !(defined(__GNUC__) || defined(__ICCARM__))
345 #pragma endregion netc_hw_port_rx
346 #endif
347 
348 #if !(defined(__GNUC__) || defined(__ICCARM__))
349 #pragma region netc_hw_port_mac
350 #endif
351 /*! @addtogroup netc_hw_port_mac
352  * @{
353  */
354 
355 /*!
356  * @brief Get port MAC interrupt flags
357  *
358  * @param base  NETC ETH link base register.
359  * @param mac  MAC type.
360  */
361 uint32_t NETC_GetPortMacInterruptFlags(NETC_ETH_LINK_Type *base, netc_port_phy_mac_type_t macType);
362 
363 /*!
364  * @brief Clear port MAC interrupt flags
365  *
366  * @param base  NETC ETH link base register.
367  * @param mac  MAC type.
368  * @param mask  Bit mask of interrupts to enable. See #netc_port_intr_flags_t for the set
369  *              of constants that should be OR'd together to form the bit mask.
370  */
371 void NETC_ClearPortMacInterruptFlags(NETC_ETH_LINK_Type *base, netc_port_phy_mac_type_t macType, uint32_t mask);
372 
373 /*!
374  * @brief Enable/Disable port MAC interrupts
375  *
376  * @param base  NETC ETH link base register.
377  * @param mac  MAC type.
378  * @param mask  Bit mask of interrupts to enable. See #netc_port_intr_flags_t for the set
379  *              of constants that should be OR'd together to form the bit mask.
380  * @param enable  Enable/Disable interrupts.
381  */
382 void NETC_EnablePortMacInterrupts(NETC_ETH_LINK_Type *base, netc_port_phy_mac_type_t macType, uint32_t mask, bool enable);
383 
384 /*!
385  * @brief Enable/Disable Loopback for specified MAC
386  *
387  * @param base
388  * @param loopMode
389  * @param enable
390  * @return status_t
391  */
392 status_t NETC_PortEnableLoopback(NETC_ETH_LINK_Type *base, netc_port_loopback_mode_t loopMode, bool enable);
393 
394 /*!
395  * @brief Get ethernet MAC port MII mode.
396  *
397  * @param base Ethernet MAC port peripheral base address.
398  * @return netc_hw_mii_mode_t
399  */
NETC_PortGetMIIMode(NETC_ETH_LINK_Type * base)400 static inline netc_hw_mii_mode_t NETC_PortGetMIIMode(NETC_ETH_LINK_Type *base)
401 {
402     return (netc_hw_mii_mode_t)(uint32_t)(base->PM0_IF_MODE & NETC_ETH_LINK_PM0_IF_MODE_IFMODE_MASK);
403 }
404 
405 /*!
406  * @brief Configure ethernet MAC interface mode, speed and duplex for specified PORT.
407  *
408  * @param base Ethernet MAC port peripheral base address.
409  * @param miiMode The Ethernet MAC MII mode.
410  * @param speed The Ethernet MAC speed.
411  * @param duplex The Ethernet MAC duplex.
412  * @return status_t
413  */
414 status_t NETC_PortSetMII(NETC_ETH_LINK_Type *base,
415                          netc_hw_mii_mode_t miiMode,
416                          netc_hw_mii_speed_t speed,
417                          netc_hw_mii_duplex_t duplex);
418 
419 /*!
420  * @brief Set the maximum supported received frame size.
421  *
422  * @param base Ethernet MAC port peripheral base address.
423  * @param size Maximum frame size to set.
424  * @return status_t
425  */
426 status_t NETC_PortSetMaxFrameSize(NETC_ETH_LINK_Type *base, uint16_t size);
427 
428 /*!
429  * @brief Configure ethernet MAC for specified PORT.
430  * Set the MII mode, speed/duplex, reverse mode, etc.
431  *
432  * @param base Ethernet MAC port peripheral base address.
433  * @param config The Ethernet MAC configuration.
434  * @return status_t
435  */
436 status_t NETC_PortConfigEthMac(NETC_ETH_LINK_Type *base, const netc_port_ethmac_t *config);
437 
438 /*!
439  * @brief Do software reset for Ethernet MAC.
440  *
441  * @note This can reset all statistic counters.
442  *
443  * @param base  PORT MAC peripheral base address.
444  */
NETC_PortSoftwareResetEthMac(NETC_ETH_LINK_Type * base)445 static inline void NETC_PortSoftwareResetEthMac(NETC_ETH_LINK_Type *base)
446 {
447     base->PM0_COMMAND_CONFIG |= NETC_ETH_LINK_PM0_COMMAND_CONFIG_SWR_MASK;
448     while ((base->PM0_COMMAND_CONFIG & NETC_ETH_LINK_PM0_COMMAND_CONFIG_SWR_MASK) != 0U)
449     {
450     }
451     base->PM1_COMMAND_CONFIG |= NETC_ETH_LINK_PM0_COMMAND_CONFIG_SWR_MASK;
452     while ((base->PM1_COMMAND_CONFIG & NETC_ETH_LINK_PM1_COMMAND_CONFIG_SWR_MASK) != 0U)
453     {
454     }
455 }
456 
457 /*!
458  * @brief Get Ethernet MAC preemption status.
459  *
460  * @param base  PORT MAC peripheral base address.
461  * @param status Point to the buffer which store status.
462  */
NETC_PortGetPhyMacPreemptionStatus(NETC_ETH_LINK_Type * base,netc_port_phy_mac_preemption_status_t * status)463 static inline void NETC_PortGetPhyMacPreemptionStatus(NETC_ETH_LINK_Type *base,
464                                                       netc_port_phy_mac_preemption_status_t *status)
465 {
466     status->verifyStatus = (netc_port_preemption_verify_status_t)(uint32_t)(
467         (base->MAC_MERGE_MMCSR & NETC_ETH_LINK_MAC_MERGE_MMCSR_VSTS_MASK) >> NETC_ETH_LINK_MAC_MERGE_MMCSR_VSTS_SHIFT);
468     status->mergeActive = ((base->MAC_MERGE_MMCSR & NETC_ETH_LINK_MAC_MERGE_MMCSR_TXSTS_MASK) != 0U) ? true : false;
469 }
470 
471 /*!
472  * @brief Get Ethernet MAC Tx Traffic Statistics .
473  *
474  * @param base  PORT MAC peripheral base address.
475  * @param macType Express MAC or Preemptable MAC.
476  * @param status Point to the buffer which store statistics.
477  */
478 void NETC_PortGetPhyMacTxStatistic(NETC_ETH_LINK_Type *base,
479                                    netc_port_phy_mac_type_t macType,
480                                    netc_port_phy_mac_traffic_statistic_t *statistic);
481 
482 /*!
483  * @brief Get Ethernet MAC Rx Traffic Statistics .
484  *
485  * @param base  PORT MAC peripheral base address.
486  * @param macType Express MAC or Preemptable MAC.
487  * @param status Point to the buffer which store statistics.
488  */
489 void NETC_PortGetPhyMacRxStatistic(NETC_ETH_LINK_Type *base,
490                                    netc_port_phy_mac_type_t macType,
491                                    netc_port_phy_mac_traffic_statistic_t *statistic);
492 
493 /*!
494  * @brief Get Ethernet MAC Rx/Tx Drops/Errors Statistics .
495  *
496  * @param base  PORT MAC peripheral base address.
497  * @param macType Express MAC or Preemptable MAC.
498  * @param status Point to the buffer which store statistics.
499  */
500 void NETC_PortGetPhyMacDiscardStatistic(NETC_ETH_LINK_Type *base,
501                                         netc_port_phy_mac_type_t macType,
502                                         netc_port_phy_mac_discard_statistic_t *statistic);
503 
504 /*!
505  * @brief Get Ethernet Preemptable MAC preemption Statistics .
506  *
507  * @param base  PORT MAC peripheral base address.
508  * @param status Point to the buffer which store statistics.
509  */
510 void NETC_PortGetPhyMacPreemptionStatistic(NETC_ETH_LINK_Type *base,
511                                            netc_port_phy_mac_preemption_statistic_t *statistic);
512 
513 #if !(defined(FSL_FEATURE_NETC_HAS_NO_SWITCH) && FSL_FEATURE_NETC_HAS_NO_SWITCH)
514 /*!
515  * @brief Get Pseudo MAC Tx/Rx Traffic Statistics .
516  *
517  * @param base  PORT MAC peripheral base address.
518  * @param getTx true is get Tx, false is get Rx.
519  * @param status Point to the buffer which store statistics.
520  */
521 void NETC_PortGetPseudoMacTrafficStatistic(NETC_PSEUDO_LINK_Type *base,
522                                            bool getTx,
523                                            netc_port_pseudo_mac_traffic_statistic_t *statistic);
524 #endif
525 
526 /*! @} */ // end of netc_hw_port_mac
527 #if !(defined(__GNUC__) || defined(__ICCARM__))
528 #pragma endregion netc_hw_port_mac
529 #endif
530 
531 #if defined(__cplusplus)
532 }
533 #endif
534 #endif /* FSL_NETC_PORT_H_ */
535