HPM SDK
HPMicro Software Development Kit
hpm_enet_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2024 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_ENET_DRV_H
9 #define HPM_ENET_DRV_H
10 
11 /*---------------------------------------------------------------------
12  * Includes
13  *---------------------------------------------------------------------
14  */
15 #include "hpm_common.h"
16 #include "hpm_enet_regs.h"
17 #include "hpm_soc_feature.h"
18 #include "hpm_enet_soc_drv.h"
19 
27 /*---------------------------------------------------------------------
28  * Macro Constant Declarations
29  *---------------------------------------------------------------------
30  */
31 #define ENET_HEADER (14U)
32 #define ENET_VLAN_TAG (4U)
33 #define ENET_CRC (4U)
34 #define ENET_MIN_PAYLOAD (46U)
35 #define ENET_MAX_PAYLOAD (1500U)
36 #define ENET_MAX_FRAME_SIZE (1526U)
37 #define ENET_JUMBO_FRAME_PAYLOAD (9000U)
38 #define ENET_MAC (6)
39 #define ENET_ERROR (0)
40 #define ENET_SUCCESS (1)
42 #define ENET_ADJ_FREQ_BASE_ADDEND (0x80000000UL)
43 #define ENET_ONE_SEC_IN_NANOSEC (1000000000UL)
45 #define ENET_PPS_CMD_MASK (0x07UL)
46 #define ENET_PPS_CMD_OFS_FAC (3U)
48 #ifndef ENET_RETRY_CNT
49 #define ENET_RETRY_CNT (10000UL)
50 #endif
51 
52 #ifndef ENET_RETRY_DMA_INIT_CNT
53 #define ENET_RETRY_DMA_INIT_CNT (10000000UL)
54 #endif
55 
56 #define ENET_MAX_BUFF_SIZE ((ENET_MAX_FRAME_SIZE + (ENET_SOC_DMA_BUS_WIDTH_IN_BYTES - 1)) & ~(ENET_SOC_DMA_BUS_WIDTH_IN_BYTES - 1))
57 /*---------------------------------------------------------------------
58  * Typedef Enum Declarations
59  *---------------------------------------------------------------------
60  */
61 
63 typedef enum {
69 
71 typedef enum {
75 
76 
78 typedef enum {
84  enet_pbl_32 = 32
86 
88 typedef enum {
94 
96 typedef enum {
102 
104 typedef enum {
111 
113 typedef enum {
120 
122 typedef enum {
126 
127 
129 typedef enum {
133 
141 typedef enum {
158 
160 typedef enum {
163  enet_inf_rgmii = 1
165 
167 typedef enum {
172 
174 typedef enum {
178 
180 typedef enum {
184 
186 typedef enum {
190 
192 typedef enum {
197 
199 typedef enum {
200  enet_ts_ss_ptp_msg_0 = 0, /* SYNC, Follow_Up, Delay_Req, Delay_Resp */
201  enet_ts_ss_ptp_msg_1 = 1, /* SYNC */
202  enet_ts_ss_ptp_msg_2 = 3, /* Delay_Req */
203  enet_ts_ss_ptp_msg_3 = 4, /* SYNC, Follow_Up, Delay_Req, Delay_Resp, Pdelay_Req, Pdelay_Resp, Pdelay_Resp_Follow_Up */
204  enet_ts_ss_ptp_msg_4 = 5, /* SYNC, Pdelay_Req, Pdelay_Resp */
205  enet_ts_ss_ptp_msg_5 = 7, /* Delay_Req, Pdelay_Req, Pdelay_Resp */
206  enet_ts_ss_ptp_msg_6 = 8, /* SYNC, Delay_Req */
207  enet_ts_ss_ptp_msg_7 = 12 /* Pdelay_Req, Pdelay_Resp */
209 
211 typedef enum {
212  enet_ts_bin_rollover_control = 0, /* timestamp rolls over after 0x7fffffff */
213  enet_ts_dig_rollover_control /* timestamp rolls over after 0x3b9ac9ff */
215 
217 typedef enum {
221  enet_pps_3 = 2
223 
225 typedef enum {
231 
233 typedef enum {
251 
253 typedef enum {
262 
263 /*---------------------------------------------------------------------
264  * Typedef Struct Declarations
265  *---------------------------------------------------------------------
266  */
268 typedef struct {
269  uint32_t buffer;
270  uint32_t count;
271  uint16_t size;
273 
275 typedef struct {
276  uint32_t mac_addr_high[ENET_SOC_ADDR_MAX_COUNT];
277  uint32_t mac_addr_low[ENET_SOC_ADDR_MAX_COUNT];
279  uint8_t dma_pbl;
280  uint8_t sarc;
282 
284 typedef struct {
285  union {
286  uint32_t tdes0;
287  struct {
288  uint32_t db: 1;
289  uint32_t uf: 1;
290  uint32_t ed: 1;
291  uint32_t cc: 4;
292  uint32_t vf: 1;
293  uint32_t ec: 1;
294  uint32_t lc: 1;
295  uint32_t nc: 1;
296  uint32_t loc: 1;
297  uint32_t ipe: 1;
298  uint32_t ff: 1;
299  uint32_t jt: 1;
300  uint32_t es: 1;
301  uint32_t ihe: 1;
302  uint32_t ttss: 1;
303  uint32_t vlic: 2;
304  uint32_t tch: 1;
305  uint32_t ter: 1;
306  uint32_t cic: 2;
307  uint32_t crcr: 1;
308  uint32_t ttse: 1;
309  uint32_t dp: 1;
310  uint32_t dc: 1;
311  uint32_t fs: 1;
312  uint32_t ls: 1;
313  uint32_t ic: 1;
314  uint32_t own: 1;
315  } tdes0_bm;
316  };
317 
318  union {
319  uint32_t tdes1;
320  struct {
321  uint32_t tbs1 : 13;
322  uint32_t reserved: 3;
323  uint32_t tbs2 : 13;
324  uint32_t saic : 3;
325  } tdes1_bm;
326  };
327 
328  union {
329  uint32_t tdes2;
330  struct {
331  uint32_t buffer1;
332  } tdes2_bm;
333  };
334 
335  union {
336  uint32_t tdes3;
337  union {
338  uint32_t buffer2;
339  uint32_t next_desc;
340  } tdes3_bm;
341  };
342 
343 #if ENET_SOC_ALT_EHD_DES_LEN == ENET_SOC_ALT_EHD_DES_MAX_LEN
344  struct {
345  uint32_t reserved;
346  } tdes4_bm;
347 
348  struct {
349  uint32_t reserved;
350  } tdes5_bm;
351 
352  struct {
353  uint32_t ttsl;
354  } tdes6_bm;
355 
356  struct {
357  uint32_t ttsh;
358  } tdes7_bm;
359 #endif
361 
363 typedef struct {
364  union {
365  uint32_t rdes0;
366 
367  struct {
368  uint32_t ex_sta_rx_addr : 1;
369  uint32_t ce : 1;
370  uint32_t dbe : 1;
371  uint32_t re : 1;
372  uint32_t rwt : 1;
373  uint32_t ft : 1;
374  uint32_t lc : 1;
375  uint32_t ts_ip_gf : 1;
376  uint32_t ls : 1;
377  uint32_t fs : 1;
378  uint32_t vlan : 1;
379  uint32_t oe : 1;
380  uint32_t le : 1;
381  uint32_t saf : 1;
382  uint32_t dse : 1;
383  uint32_t es : 1;
384  uint32_t fl : 14;
385  uint32_t afm : 1;
386  uint32_t own : 1;
387  } rdes0_bm;
388  };
389 
390  union {
391  uint32_t rdes1;
392  struct {
393  uint32_t rbs1 : 13;
394  uint32_t reserved0: 1;
395  uint32_t rch : 1;
396  uint32_t rer : 1;
397  uint32_t rbs2 : 13;
398  uint32_t reserved1: 2;
399  uint32_t dic : 1;
400  } rdes1_bm;
401  };
402 
403  union {
404  uint32_t rdes2;
405  struct {
406  uint32_t buffer1;
407  } rdes2_bm;
408  };
409 
410  union {
411  uint32_t rdes3;
412  union {
413  uint32_t buffer2;
414  uint32_t next_desc;
415  } rdes3_bm;
416  };
417 
418 #if ENET_SOC_ALT_EHD_DES_LEN == ENET_SOC_ALT_EHD_DES_MAX_LEN
419  union {
420  uint32_t rdes4;
421  struct {
422  uint32_t ip_payload_type : 3;
423  uint32_t ip_header_err : 1;
424  uint32_t ip_payload_err : 1;
425  uint32_t ip_chksum_bypassed : 1;
426  uint32_t ipv4_pkt_received : 1;
427  uint32_t ipv6_pkt_received : 1;
428  uint32_t msg_type : 4;
429  uint32_t ptp_frame_type : 1;
430  uint32_t ptp_version : 1;
431  uint32_t ts_dp : 1;
432  uint32_t reserved0 : 1;
433  uint32_t av_pkt_recv : 1;
434  uint32_t av_tagged_pkt_recv : 1;
435  uint32_t vlan_tag_pri_value : 3;
436  uint32_t reserved1 : 3;
437  uint32_t l3_fm : 1;
438  uint32_t l4_fm : 1;
439  uint32_t l3_l4_fnl : 2;
440  uint32_t reserved2 : 4;
441  } rdes4_bm;
442  };
443 
444  struct {
445  uint32_t reserved;
446  } rdes5_bm;
447 
448  struct {
449  uint32_t rtsl;
450  } rdes6_bm;
451 
452  struct {
453  uint32_t rtsh;
454  } rdes7_bm;
455 #endif
457 
459 typedef struct{
460  uint32_t length;
461  uint32_t buffer;
463 } enet_frame_t;
464 
466 typedef struct {
469  uint32_t seg_count;
471 
473 typedef struct {
474  bool enable_ioc; /* interrupt on completion */
475  bool disable_crc; /* disable CRC */
476  bool disable_pad; /* disable Pad */
477  bool enable_ttse; /* enable transmit timestamp */
478  bool enable_crcr; /* CRC replacement control */
479  uint8_t cic; /* checksum insertion control */
480  uint8_t vlic; /* VLAN insertion control */
481  uint8_t saic; /* SA insertion control */
483 
485 typedef struct {
494 } enet_desc_t;
495 
497 typedef struct {
498  uint32_t sec;
499  uint32_t nsec;
501 
503 typedef struct {
504  uint32_t sec;
505  uint32_t nsec;
506  uint8_t sign;
508 
510 typedef struct {
511  uint32_t sec;
512  uint32_t nsec;
514 
516 typedef struct {
517  uint8_t ssinc;
519  uint8_t update_method;
520  uint32_t addend;
522 
524 typedef struct {
525  uint32_t pps_interval;
526  uint32_t pps_width;
527  uint32_t target_sec;
528  uint32_t target_nsec;
530 
532 typedef struct {
533  uint32_t sec;
534  uint32_t nsec;
536 
538 typedef struct {
543 
545 typedef struct {
546  uint32_t int_enable; /* DMA_INTR_EN */
547  uint32_t int_mask; /* INTR MASK */
548  uint32_t mmc_intr_rx;
550  uint32_t mmc_intr_tx;
553 
554 /*
555  * @brief Bit definition of TDES1
556  */
557 #define ENET_DMATxDesc_TBS2 ((uint32_t)0x1FFF0000)
558 #define ENET_DMATxDesc_TBS1 ((uint32_t)0x00001FFF)
560 #if defined __cplusplus
561 extern "C" {
562 #endif /* __cplusplus */
563 /*---------------------------------------------------------------------
564  * Exported Functions
565  *---------------------------------------------------------------------
566  */
574 
582 
589 uint32_t enet_get_interrupt_status(ENET_Type *ptr);
590 
597 void enet_mask_mmc_rx_interrupt_event(ENET_Type *ptr, uint32_t mask);
598 
605 void enet_mask_mmc_tx_interrupt_event(ENET_Type *ptr, uint32_t mask);
606 
621 
633 
641 
649 
658 uint16_t enet_read_phy(ENET_Type *ptr, uint32_t phy_addr, uint32_t addr);
659 
668 void enet_write_phy(ENET_Type *ptr, uint32_t phy_addr, uint32_t addr, uint32_t data);
669 
676 void enet_rx_resume(ENET_Type *ptr);
677 
687 uint32_t enet_check_received_frame(enet_rx_desc_t **parent_rx_desc_list_cur, enet_rx_frame_info_t *rx_frame_info);
688 
696 enet_frame_t enet_get_received_frame(enet_rx_desc_t **parent_rx_desc_list_cur, enet_rx_frame_info_t *rx_frame_info);
697 
706 enet_frame_t enet_get_received_frame_interrupt(enet_rx_desc_t **parent_rx_desc_list_cur, enet_rx_frame_info_t *rx_frame_info, uint32_t rx_desc_count);
707 
719 uint32_t enet_prepare_transmission_descriptors(ENET_Type *ptr, enet_tx_desc_t **parent_tx_desc_list_cur, uint16_t frame_length, uint16_t tx_buff_size);
720 
733 uint32_t enet_prepare_tx_desc(ENET_Type *ptr, enet_tx_desc_t **parent_tx_desc_list_cur, enet_tx_control_config_t *config, uint16_t frame_length, uint16_t tx_buff_size);
734 
749  enet_tx_desc_t **parent_tx_desc_list_cur,
750  enet_tx_control_config_t *config,
751  uint16_t frame_length, uint16_t tx_buff_size,
752  enet_ptp_ts_system_t *timestamp);
753 
761 
769 
775 void enet_dma_flush(ENET_Type *ptr);
776 
783 void enet_init_ptp(ENET_Type *ptr, enet_ptp_config_t *config);
784 
792 
800 
808 
815 void enet_adjust_ptp_time_freq(ENET_Type *ptr, int32_t adj);
816 
824 
833 hpm_stat_t enet_enable_ptp_frame_type(ENET_Type *ptr, enet_ptp_frame_type_t ptp_frame_type, bool enable);
834 
842 
850 
860 
870 
871 
880 void enet_mask_interrupt_event(ENET_Type *ptr, uint32_t mask);
881 
890 void enet_unmask_interrupt_event(ENET_Type *ptr, uint32_t mask);
891 
903 
915 
926 
938 
939 #if defined __cplusplus
940 }
941 #endif /* __cplusplus */
942 
944 #endif /* HPM_ENET_DRV_H */
#define ENET_SOC_ADDR_MAX_COUNT
Definition: hpm_soc_feature.h:106
#define ENET_DMA_INTR_EN_AIE_MASK
Definition: hpm_enet_regs.h:5609
#define ENET_INTR_MASK_RGSMIIIM_MASK
Definition: hpm_enet_regs.h:1416
#define ENET_DMA_INTR_EN_RIE_MASK
Definition: hpm_enet_regs.h:5686
#define ENET_TS_CTRL_ATSEN3_MASK
Definition: hpm_enet_regs.h:3867
#define ENET_DMA_INTR_EN_TIE_MASK
Definition: hpm_enet_regs.h:5752
#define ENET_TS_CTRL_ATSEN2_MASK
Definition: hpm_enet_regs.h:3879
#define ENET_INTR_MASK_LPIIM_MASK
Definition: hpm_enet_regs.h:1361
#define ENET_DMA_INTR_EN_NIE_MASK
Definition: hpm_enet_regs.h:5587
#define ENET_TS_CTRL_ATSEN0_MASK
Definition: hpm_enet_regs.h:3902
#define ENET_TS_CTRL_ATSEN1_MASK
Definition: hpm_enet_regs.h:3891
uint32_t hpm_stat_t
Definition: hpm_common.h:123
void enet_set_duplex_mode(ENET_Type *ptr, enet_duplex_mode_t mode)
Set duplex mode.
Definition: hpm_enet_drv.c:240
void enet_dma_rx_desc_chain_init(ENET_Type *ptr, enet_desc_t *desc)
Initialize DMA reception descriptors in chain mode.
Definition: hpm_enet_drv.c:747
enet_pbl_t
Programmable burst length selections.
Definition: hpm_enet_drv.h:78
enet_csr_clk_range_t
CSR clock range and MDC clock selections.
Definition: hpm_enet_drv.h:141
void enet_get_default_interrupt_config(ENET_Type *ptr, enet_int_config_t *config)
Get a default interrupt config.
Definition: hpm_enet_drv.c:421
void enet_set_pps0_control_output(ENET_Type *ptr, enet_pps_ctrl_t freq)
Set the pps0 control output.
Definition: hpm_enet_drv.c:905
enet_inf_type_t
enet interface selections
Definition: hpm_enet_drv.h:160
uint32_t enet_get_mmc_tx_interrupt_status(ENET_Type *ptr)
et a staus of mmc transmission interrupt events
Definition: hpm_enet_drv.c:186
enet_frame_t enet_get_received_frame_interrupt(enet_rx_desc_t **parent_rx_desc_list_cur, enet_rx_frame_info_t *rx_frame_info, uint32_t rx_desc_count)
get a received frame from interrupt
Definition: hpm_enet_drv.c:344
void enet_set_ptp_timestamp(ENET_Type *ptr, enet_ptp_ts_update_t *timestamp)
Set a timestamp to the PTP timer.
Definition: hpm_enet_drv.c:794
enet_ptp_time_update_method_t
enet timestamp update methods
Definition: hpm_enet_drv.h:180
void enet_adjust_ptp_time_freq(ENET_Type *ptr, int32_t adj)
Adjust the count frequency of the PTP timer.
Definition: hpm_enet_drv.c:826
enet_ts_rollover_control_t
PTP timer rollover modes.
Definition: hpm_enet_drv.h:211
enet_saic_insertion_replacement_control_t
SA insertion or replacement control selections for any selective frames.
Definition: hpm_enet_drv.h:104
void enet_unmask_interrupt_event(ENET_Type *ptr, uint32_t mask)
Unmask ENET interrupt events.
Definition: hpm_enet_drv.c:166
enet_ts_ss_ptp_msg_t
PTP message type for snapshots.
Definition: hpm_enet_drv.h:199
enet_pps_ctrl_t
PPS0 control for output frequency selections.
Definition: hpm_enet_drv.h:233
hpm_stat_t enet_enable_ptp_frame_type(ENET_Type *ptr, enet_ptp_frame_type_t ptp_frame_type, bool enable)
Enable the specified ptp frame type for MAC process.
Definition: hpm_enet_drv.c:843
void enet_get_ptp_auxi_timestamp(ENET_Type *ptr, enet_ptp_ts_auxi_snapshot_t *timestamp)
Get PTP auxiliary timestamp.
Definition: hpm_enet_drv.c:998
void enet_get_ptp_auxi_snapshot_status(ENET_Type *ptr, enet_ptp_auxi_snapshot_status_t *status)
Get PTP Auxiliary Snapshot Status.
Definition: hpm_enet_drv.c:989
uint32_t enet_get_interrupt_status(ENET_Type *ptr)
Get interrupt status.
Definition: hpm_enet_drv.c:156
uint32_t enet_prepare_tx_desc(ENET_Type *ptr, enet_tx_desc_t **parent_tx_desc_list_cur, enet_tx_control_config_t *config, uint16_t frame_length, uint16_t tx_buff_size)
prepare for the transmission descriptors
Definition: hpm_enet_drv.c:554
uint32_t enet_prepare_tx_desc_with_ts_record(ENET_Type *ptr, enet_tx_desc_t **parent_tx_desc_list_cur, enet_tx_control_config_t *config, uint16_t frame_length, uint16_t tx_buff_size, enet_ptp_ts_system_t *timestamp)
prepare for the transmission descriptors with a timestamp record
Definition: hpm_enet_drv.c:435
void enet_set_snapshot_ptp_message_type(ENET_Type *ptr, enet_ts_ss_ptp_msg_t ts_ss_ptp_msg)
Set the ptp message type for snapshots.
Definition: hpm_enet_drv.c:863
void enet_disable_ptp_auxiliary_snapshot(ENET_Type *ptr, enet_ptp_auxi_snapshot_trigger_idx_t idx)
Enable PTP auxiliary snapshot.
Definition: hpm_enet_drv.c:984
uint16_t enet_read_phy(ENET_Type *ptr, uint32_t phy_addr, uint32_t addr)
Read phy.
Definition: hpm_enet_drv.c:217
hpm_stat_t enet_controller_init(ENET_Type *ptr, enet_inf_type_t inf_type, enet_desc_t *desc, enet_mac_config_t *cfg, enet_int_config_t *int_config)
Initialize controller.
Definition: hpm_enet_drv.c:246
enet_ptp_frame_type_t
PTP frame types.
Definition: hpm_enet_drv.h:192
hpm_stat_t enet_set_ppsx_config(ENET_Type *ptr, enet_pps_cmd_config_t *cmd_cfg, enet_pps_idx_t idx)
Set a pps config for ppsx.
Definition: hpm_enet_drv.c:928
void enet_get_default_tx_control_config(ENET_Type *ptr, enet_tx_control_config_t *config)
Get a default control config for tranmission.
Definition: hpm_enet_drv.c:408
void enet_dma_flush(ENET_Type *ptr)
Flush DMA.
Definition: hpm_enet_drv.c:191
enet_frame_t enet_get_received_frame(enet_rx_desc_t **parent_rx_desc_list_cur, enet_rx_frame_info_t *rx_frame_info)
get a received frame
Definition: hpm_enet_drv.c:321
enet_ptp_auxi_snapshot_trigger_idx_t
ptp auxiliary snapshot trigger indexes
Definition: hpm_enet_drv.h:225
enet_pps_idx_t
PPS indexes.
Definition: hpm_enet_drv.h:217
enet_ptp_version_t
PTP versions.
Definition: hpm_enet_drv.h:186
void enet_mask_mmc_rx_interrupt_event(ENET_Type *ptr, uint32_t mask)
Mask the specified mmc interrupt evenets of received frames.
Definition: hpm_enet_drv.c:171
void enet_set_line_speed(ENET_Type *ptr, enet_line_speed_t speed)
Set port line speed.
Definition: hpm_enet_drv.c:234
enet_pps_cmd_t
PPS0 commands.
Definition: hpm_enet_drv.h:253
void enet_mask_interrupt_event(ENET_Type *ptr, uint32_t mask)
Mask Ethernet interrupt events.
Definition: hpm_enet_drv.c:161
void enet_enable_ptp_auxiliary_snapshot(ENET_Type *ptr, enet_ptp_auxi_snapshot_trigger_idx_t idx)
Disable PTP auxiliary snapshot.
Definition: hpm_enet_drv.c:974
enet_phy_op_t
PHY operation selections.
Definition: hpm_enet_drv.h:122
enet_sarc_insertion_replacement_control_t
SA insertion or replacement control selections for all transmit frames.
Definition: hpm_enet_drv.h:113
enet_gmii_status_t
PHY status.
Definition: hpm_enet_drv.h:129
void enet_write_phy(ENET_Type *ptr, uint32_t phy_addr, uint32_t addr, uint32_t data)
Write phy.
Definition: hpm_enet_drv.c:200
void enet_mask_mmc_tx_interrupt_event(ENET_Type *ptr, uint32_t mask)
Mask the specified mmc interrupt evenets of transmitted frames.
Definition: hpm_enet_drv.c:181
void enet_set_ptp_version(ENET_Type *ptr, enet_ptp_version_t ptp_ver)
Set the PTP version.
Definition: hpm_enet_drv.c:837
enet_interrupt_mask_t
interrupt mask type
Definition: hpm_enet_drv.h:71
enet_duplex_mode_t
enet duplex mode
Definition: hpm_enet_drv.h:174
uint32_t enet_check_received_frame(enet_rx_desc_t **parent_rx_desc_list_cur, enet_rx_frame_info_t *rx_frame_info)
Check if there is a received frame.
Definition: hpm_enet_drv.c:284
hpm_stat_t enet_set_ppsx_command(ENET_Type *ptr, enet_pps_cmd_t cmd, enet_pps_idx_t idx)
Set a pps command for ppsx.
Definition: hpm_enet_drv.c:911
enet_vlan_insertion_control_t
VLAN insertion control selections.
Definition: hpm_enet_drv.h:96
void enet_get_ptp_timestamp(ENET_Type *ptr, enet_ptp_ts_system_t *timestamp)
Get a timestamp from the PTP timer.
Definition: hpm_enet_drv.c:805
uint32_t enet_get_mmc_rx_interrupt_status(ENET_Type *ptr)
Get a staus of mmc receive interrupt events.
Definition: hpm_enet_drv.c:176
enet_line_speed_t
enet line speed
Definition: hpm_enet_drv.h:167
enet_cic_insertion_control_t
Checksum insertion control selections.
Definition: hpm_enet_drv.h:88
void enet_dma_tx_desc_chain_init(ENET_Type *ptr, enet_desc_t *desc)
Initialize DMA transmission descriptors in chain mode.
Definition: hpm_enet_drv.c:713
void enet_init_ptp(ENET_Type *ptr, enet_ptp_config_t *config)
Initialize a PTP timer.
Definition: hpm_enet_drv.c:872
void enet_update_ptp_timeoffset(ENET_Type *ptr, enet_ptp_ts_update_t *timeoffset)
Update a timestamp to the PTP timer.
Definition: hpm_enet_drv.c:811
enet_interrupt_enable_t
interrupt enable type
Definition: hpm_enet_drv.h:63
uint32_t enet_prepare_transmission_descriptors(ENET_Type *ptr, enet_tx_desc_t **parent_tx_desc_list_cur, uint16_t frame_length, uint16_t tx_buff_size)
prepare for the transmission descriptors (It will be deprecated.)
Definition: hpm_enet_drv.c:637
void enet_rx_resume(ENET_Type *ptr)
Resume reception process.
Definition: hpm_enet_drv.c:276
@ enet_pbl_4
Definition: hpm_enet_drv.h:81
@ enet_pbl_32
Definition: hpm_enet_drv.h:84
@ enet_pbl_16
Definition: hpm_enet_drv.h:83
@ enet_pbl_1
Definition: hpm_enet_drv.h:79
@ enet_pbl_2
Definition: hpm_enet_drv.h:80
@ enet_pbl_8
Definition: hpm_enet_drv.h:82
@ enet_csr_60m_to_100m_mdc_csr_div_18
Definition: hpm_enet_drv.h:156
@ enet_csr_250m_to_300m_mdc_csr_div_124
Definition: hpm_enet_drv.h:147
@ enet_csr_60m_to_100m_mdc_csr_div_42
Definition: hpm_enet_drv.h:142
@ enet_csr_60m_to_100m_mdc_csr_div_14
Definition: hpm_enet_drv.h:154
@ enet_csr_60m_to_100m_mdc_csr_div_12
Definition: hpm_enet_drv.h:153
@ enet_csr_100m_to_150m_mdc_csr_div_62
Definition: hpm_enet_drv.h:143
@ enet_csr_60m_to_100m_mdc_csr_div_16
Definition: hpm_enet_drv.h:155
@ enet_csr_60m_to_100m_mdc_csr_div_4
Definition: hpm_enet_drv.h:149
@ enet_csr_60m_to_100m_mdc_csr_div_6
Definition: hpm_enet_drv.h:150
@ enet_csr_60m_to_100m_mdc_csr_div_10
Definition: hpm_enet_drv.h:152
@ enet_csr_150m_to_250m_mdc_csr_div_102
Definition: hpm_enet_drv.h:146
@ enet_csr_20m_to_35m_mdc_csr_div_16
Definition: hpm_enet_drv.h:144
@ enet_csr_35m_to_60m_mdc_csr_div_26
Definition: hpm_enet_drv.h:145
@ enet_csr_60m_to_100m_mdc_csr_div_8
Definition: hpm_enet_drv.h:151
@ enet_inf_rgmii
Definition: hpm_enet_drv.h:163
@ enet_inf_mii
Definition: hpm_enet_drv.h:161
@ enet_inf_rmii
Definition: hpm_enet_drv.h:162
@ enet_ptp_time_fine_update
Definition: hpm_enet_drv.h:182
@ enet_ptp_time_coarse_update
Definition: hpm_enet_drv.h:181
@ enet_ts_dig_rollover_control
Definition: hpm_enet_drv.h:213
@ enet_ts_bin_rollover_control
Definition: hpm_enet_drv.h:212
@ enet_saic_insert_mac0
Definition: hpm_enet_drv.h:106
@ enet_saic_replace_mac1
Definition: hpm_enet_drv.h:109
@ enet_saic_disable
Definition: hpm_enet_drv.h:105
@ enet_saic_insert_mac1
Definition: hpm_enet_drv.h:108
@ enet_saic_replace_mac0
Definition: hpm_enet_drv.h:107
@ enet_ts_ss_ptp_msg_2
Definition: hpm_enet_drv.h:202
@ enet_ts_ss_ptp_msg_6
Definition: hpm_enet_drv.h:206
@ enet_ts_ss_ptp_msg_7
Definition: hpm_enet_drv.h:207
@ enet_ts_ss_ptp_msg_3
Definition: hpm_enet_drv.h:203
@ enet_ts_ss_ptp_msg_5
Definition: hpm_enet_drv.h:205
@ enet_ts_ss_ptp_msg_0
Definition: hpm_enet_drv.h:200
@ enet_ts_ss_ptp_msg_4
Definition: hpm_enet_drv.h:204
@ enet_ts_ss_ptp_msg_1
Definition: hpm_enet_drv.h:201
@ enet_pps_ctrl_bin_4hz_digital_2hz
Definition: hpm_enet_drv.h:236
@ enet_pps_ctrl_bin_2hz_digital_1hz
Definition: hpm_enet_drv.h:235
@ enet_pps_ctrl_bin_8192hz_digital_4096hz
Definition: hpm_enet_drv.h:247
@ enet_pps_ctrl_bin_32768hz_digital_16384hz
Definition: hpm_enet_drv.h:249
@ enet_pps_ctrl_bin_32hz_digital_16hz
Definition: hpm_enet_drv.h:239
@ enet_pps_ctrl_bin_256hz_digital_128hz
Definition: hpm_enet_drv.h:242
@ enet_pps_ctrl_bin_16hz_digital_8hz
Definition: hpm_enet_drv.h:238
@ enet_pps_ctrl_bin_8hz_digital_4hz
Definition: hpm_enet_drv.h:237
@ enet_pps_ctrl_bin_2048hz_digital_1024hz
Definition: hpm_enet_drv.h:245
@ enet_pps_ctrl_pps
Definition: hpm_enet_drv.h:234
@ enet_pps_ctrl_bin_4096hz_digital_2048hz
Definition: hpm_enet_drv.h:246
@ enet_pps_ctrl_bin_512hz_digital_256hz
Definition: hpm_enet_drv.h:243
@ enet_pps_ctrl_bin_16384hz_digital_8192hz
Definition: hpm_enet_drv.h:248
@ enet_pps_ctrl_bin_64hz_digital_32hz
Definition: hpm_enet_drv.h:240
@ enet_pps_ctrl_bin_1024hz_digital_512hz
Definition: hpm_enet_drv.h:244
@ enet_pps_ctrl_bin_128hz_digital_64hz
Definition: hpm_enet_drv.h:241
@ enet_ptp_frame_ipv6
Definition: hpm_enet_drv.h:194
@ enet_ptp_frame_ethernet
Definition: hpm_enet_drv.h:195
@ enet_ptp_frame_ipv4
Definition: hpm_enet_drv.h:193
@ enet_ptp_auxi_snapshot_trigger_2
Definition: hpm_enet_drv.h:228
@ enet_ptp_auxi_snapshot_trigger_1
Definition: hpm_enet_drv.h:227
@ enet_ptp_auxi_snapshot_trigger_3
Definition: hpm_enet_drv.h:229
@ enet_ptp_auxi_snapshot_trigger_0
Definition: hpm_enet_drv.h:226
@ enet_pps_1
Definition: hpm_enet_drv.h:219
@ enet_pps_2
Definition: hpm_enet_drv.h:220
@ enet_pps_3
Definition: hpm_enet_drv.h:221
@ enet_pps_0
Definition: hpm_enet_drv.h:218
@ enet_ptp_v2
Definition: hpm_enet_drv.h:188
@ enet_ptp_v1
Definition: hpm_enet_drv.h:187
@ enet_pps_cmd_stop_pulse_train_at_time
Definition: hpm_enet_drv.h:258
@ enet_pps_cmd_cancel_stop_pulse_train
Definition: hpm_enet_drv.h:260
@ enet_pps_cmd_start_single_pulse
Definition: hpm_enet_drv.h:255
@ enet_pps_cmd_no_command
Definition: hpm_enet_drv.h:254
@ enet_pps_cmd_start_pulse_train
Definition: hpm_enet_drv.h:256
@ enet_pps_cmd_stop_pulse_train_immediately
Definition: hpm_enet_drv.h:259
@ enet_pps_cmd_cancel_start
Definition: hpm_enet_drv.h:257
@ enet_phy_op_write
Definition: hpm_enet_drv.h:124
@ enet_phy_op_read
Definition: hpm_enet_drv.h:123
@ enet_sarc_disable
Definition: hpm_enet_drv.h:114
@ enet_sarc_insert_mac0
Definition: hpm_enet_drv.h:115
@ enet_sarc_insert_mac1
Definition: hpm_enet_drv.h:117
@ enet_sarc_replace_mac0
Definition: hpm_enet_drv.h:116
@ enet_sarc_replace_mac1
Definition: hpm_enet_drv.h:118
@ enet_gmii_idle
Definition: hpm_enet_drv.h:130
@ enet_gmii_busy
Definition: hpm_enet_drv.h:131
@ enet_rgsmii_int_mask
Definition: hpm_enet_drv.h:73
@ enet_lpi_int_mask
Definition: hpm_enet_drv.h:72
@ enet_full_duplex
Definition: hpm_enet_drv.h:176
@ enet_half_duplex
Definition: hpm_enet_drv.h:175
@ enet_vlic_disable
Definition: hpm_enet_drv.h:97
@ enet_vlic_insert_vlan_tag
Definition: hpm_enet_drv.h:99
@ enet_vlic_replace_vlan_tag
Definition: hpm_enet_drv.h:100
@ enet_vlic_remove_vlan_tag
Definition: hpm_enet_drv.h:98
@ enet_line_speed_1000mbps
Definition: hpm_enet_drv.h:168
@ enet_line_speed_10mbps
Definition: hpm_enet_drv.h:169
@ enet_line_speed_100mbps
Definition: hpm_enet_drv.h:170
@ enet_cic_disable
Definition: hpm_enet_drv.h:89
@ enet_cic_ip
Definition: hpm_enet_drv.h:90
@ enet_cic_ip_no_pseudoheader
Definition: hpm_enet_drv.h:91
@ enet_cic_ip_pseudoheader
Definition: hpm_enet_drv.h:92
@ enet_transmit_int_en
Definition: hpm_enet_drv.h:67
@ enet_normal_int_sum_en
Definition: hpm_enet_drv.h:64
@ enet_receive_int_en
Definition: hpm_enet_drv.h:66
@ enet_aboarmal_int_sum_en
Definition: hpm_enet_drv.h:65
Definition: hpm_enet_regs.h:12
enet buffer config struct
Definition: hpm_enet_drv.h:268
uint16_t size
Definition: hpm_enet_drv.h:271
uint32_t count
Definition: hpm_enet_drv.h:270
uint32_t buffer
Definition: hpm_enet_drv.h:269
enet description struct
Definition: hpm_enet_drv.h:485
enet_buff_config_t tx_buff_cfg
Definition: hpm_enet_drv.h:490
enet_tx_desc_t * tx_desc_list_head
Definition: hpm_enet_drv.h:486
enet_tx_control_config_t tx_control_config
Definition: hpm_enet_drv.h:493
enet_buff_config_t rx_buff_cfg
Definition: hpm_enet_drv.h:491
enet_rx_frame_info_t rx_frame_info
Definition: hpm_enet_drv.h:492
enet_tx_desc_t * tx_desc_list_cur
Definition: hpm_enet_drv.h:488
enet_rx_desc_t * rx_desc_list_head
Definition: hpm_enet_drv.h:487
enet_rx_desc_t * rx_desc_list_cur
Definition: hpm_enet_drv.h:489
enet frame struct
Definition: hpm_enet_drv.h:459
uint32_t length
Definition: hpm_enet_drv.h:460
enet_rx_desc_t * rx_desc
Definition: hpm_enet_drv.h:462
uint32_t buffer
Definition: hpm_enet_drv.h:461
Enet interrupt config struct.
Definition: hpm_enet_drv.h:545
uint32_t mmc_intr_mask_tx
Definition: hpm_enet_drv.h:551
uint32_t int_mask
Definition: hpm_enet_drv.h:547
uint32_t mmc_intr_mask_rx
Definition: hpm_enet_drv.h:549
uint32_t mmc_intr_tx
Definition: hpm_enet_drv.h:550
uint32_t mmc_intr_rx
Definition: hpm_enet_drv.h:548
uint32_t int_enable
Definition: hpm_enet_drv.h:546
enet mac config struct
Definition: hpm_enet_drv.h:275
uint8_t valid_max_count
Definition: hpm_enet_drv.h:278
uint8_t sarc
Definition: hpm_enet_drv.h:280
uint8_t dma_pbl
Definition: hpm_enet_drv.h:279
PTP PPS command output config strcut.
Definition: hpm_enet_drv.h:524
uint32_t target_nsec
Definition: hpm_enet_drv.h:528
uint32_t pps_width
Definition: hpm_enet_drv.h:526
uint32_t target_sec
Definition: hpm_enet_drv.h:527
uint32_t pps_interval
Definition: hpm_enet_drv.h:525
PTP auxiliary snapshot status struct.
Definition: hpm_enet_drv.h:538
uint8_t auxi_snapshot_count
Definition: hpm_enet_drv.h:540
bool auxi_snapshot_miss
Definition: hpm_enet_drv.h:539
uint8_t auxi_snapshot_id
Definition: hpm_enet_drv.h:541
PTP config strcut.
Definition: hpm_enet_drv.h:516
uint8_t timestamp_rollover_mode
Definition: hpm_enet_drv.h:518
uint8_t ssinc
Definition: hpm_enet_drv.h:517
uint32_t addend
Definition: hpm_enet_drv.h:520
uint8_t update_method
Definition: hpm_enet_drv.h:519
PTP auxiliary timestamp struct.
Definition: hpm_enet_drv.h:532
uint32_t nsec
Definition: hpm_enet_drv.h:534
uint32_t sec
Definition: hpm_enet_drv.h:533
PTP system timestamp struct.
Definition: hpm_enet_drv.h:497
uint32_t nsec
Definition: hpm_enet_drv.h:499
uint32_t sec
Definition: hpm_enet_drv.h:498
PTP target timestamp struct.
Definition: hpm_enet_drv.h:510
uint32_t nsec
Definition: hpm_enet_drv.h:512
uint32_t sec
Definition: hpm_enet_drv.h:511
PTP update timestamp struct.
Definition: hpm_enet_drv.h:503
uint32_t sec
Definition: hpm_enet_drv.h:504
uint32_t nsec
Definition: hpm_enet_drv.h:505
uint8_t sign
Definition: hpm_enet_drv.h:506
reception descriptor struct
Definition: hpm_enet_drv.h:363
uint32_t ip_payload_err
Definition: hpm_enet_drv.h:424
uint32_t rbs2
Definition: hpm_enet_drv.h:397
uint32_t dic
Definition: hpm_enet_drv.h:399
uint32_t fl
Definition: hpm_enet_drv.h:384
uint32_t rtsh
Definition: hpm_enet_drv.h:453
uint32_t ts_ip_gf
Definition: hpm_enet_drv.h:375
uint32_t dse
Definition: hpm_enet_drv.h:382
uint32_t ex_sta_rx_addr
Definition: hpm_enet_drv.h:368
uint32_t ipv6_pkt_received
Definition: hpm_enet_drv.h:427
uint32_t vlan_tag_pri_value
Definition: hpm_enet_drv.h:435
uint32_t dbe
Definition: hpm_enet_drv.h:370
uint32_t rdes4
Definition: hpm_enet_drv.h:420
uint32_t reserved2
Definition: hpm_enet_drv.h:440
uint32_t ls
Definition: hpm_enet_drv.h:376
uint32_t rdes0
Definition: hpm_enet_drv.h:365
uint32_t ft
Definition: hpm_enet_drv.h:373
uint32_t msg_type
Definition: hpm_enet_drv.h:428
uint32_t rwt
Definition: hpm_enet_drv.h:372
uint32_t vlan
Definition: hpm_enet_drv.h:378
uint32_t ip_header_err
Definition: hpm_enet_drv.h:423
uint32_t rer
Definition: hpm_enet_drv.h:396
uint32_t av_tagged_pkt_recv
Definition: hpm_enet_drv.h:434
uint32_t oe
Definition: hpm_enet_drv.h:379
uint32_t reserved0
Definition: hpm_enet_drv.h:394
uint32_t saf
Definition: hpm_enet_drv.h:381
uint32_t rdes3
Definition: hpm_enet_drv.h:411
uint32_t l3_fm
Definition: hpm_enet_drv.h:437
uint32_t ts_dp
Definition: hpm_enet_drv.h:431
uint32_t own
Definition: hpm_enet_drv.h:386
uint32_t lc
Definition: hpm_enet_drv.h:374
uint32_t rtsl
Definition: hpm_enet_drv.h:449
uint32_t l3_l4_fnl
Definition: hpm_enet_drv.h:439
uint32_t re
Definition: hpm_enet_drv.h:371
uint32_t ipv4_pkt_received
Definition: hpm_enet_drv.h:426
uint32_t rdes2
Definition: hpm_enet_drv.h:404
uint32_t reserved
Definition: hpm_enet_drv.h:445
uint32_t reserved1
Definition: hpm_enet_drv.h:398
uint32_t rdes1
Definition: hpm_enet_drv.h:391
uint32_t ip_chksum_bypassed
Definition: hpm_enet_drv.h:425
uint32_t rbs1
Definition: hpm_enet_drv.h:393
uint32_t rch
Definition: hpm_enet_drv.h:395
uint32_t buffer1
Definition: hpm_enet_drv.h:406
uint32_t l4_fm
Definition: hpm_enet_drv.h:438
uint32_t buffer2
Definition: hpm_enet_drv.h:413
uint32_t afm
Definition: hpm_enet_drv.h:385
uint32_t ip_payload_type
Definition: hpm_enet_drv.h:422
uint32_t es
Definition: hpm_enet_drv.h:383
uint32_t ptp_version
Definition: hpm_enet_drv.h:430
uint32_t ce
Definition: hpm_enet_drv.h:369
uint32_t next_desc
Definition: hpm_enet_drv.h:414
uint32_t le
Definition: hpm_enet_drv.h:380
uint32_t ptp_frame_type
Definition: hpm_enet_drv.h:429
uint32_t fs
Definition: hpm_enet_drv.h:377
uint32_t av_pkt_recv
Definition: hpm_enet_drv.h:433
enet reception frame info struct
Definition: hpm_enet_drv.h:466
uint32_t seg_count
Definition: hpm_enet_drv.h:469
enet_rx_desc_t * ls_rx_desc
Definition: hpm_enet_drv.h:468
enet_rx_desc_t * fs_rx_desc
Definition: hpm_enet_drv.h:467
enet control config struct for transmission
Definition: hpm_enet_drv.h:473
bool disable_crc
Definition: hpm_enet_drv.h:475
bool enable_crcr
Definition: hpm_enet_drv.h:478
bool enable_ioc
Definition: hpm_enet_drv.h:474
bool disable_pad
Definition: hpm_enet_drv.h:476
uint8_t saic
Definition: hpm_enet_drv.h:481
uint8_t vlic
Definition: hpm_enet_drv.h:480
bool enable_ttse
Definition: hpm_enet_drv.h:477
uint8_t cic
Definition: hpm_enet_drv.h:479
transmission descriptor struct
Definition: hpm_enet_drv.h:284
uint32_t reserved
Definition: hpm_enet_drv.h:322
uint32_t crcr
Definition: hpm_enet_drv.h:307
uint32_t cic
Definition: hpm_enet_drv.h:306
uint32_t db
Definition: hpm_enet_drv.h:288
uint32_t tbs2
Definition: hpm_enet_drv.h:323
uint32_t vlic
Definition: hpm_enet_drv.h:303
uint32_t ihe
Definition: hpm_enet_drv.h:301
uint32_t tbs1
Definition: hpm_enet_drv.h:321
uint32_t tch
Definition: hpm_enet_drv.h:304
uint32_t fs
Definition: hpm_enet_drv.h:311
uint32_t ff
Definition: hpm_enet_drv.h:298
uint32_t tdes2
Definition: hpm_enet_drv.h:329
uint32_t ed
Definition: hpm_enet_drv.h:290
uint32_t tdes1
Definition: hpm_enet_drv.h:319
uint32_t ec
Definition: hpm_enet_drv.h:293
uint32_t es
Definition: hpm_enet_drv.h:300
uint32_t lc
Definition: hpm_enet_drv.h:294
uint32_t nc
Definition: hpm_enet_drv.h:295
uint32_t dp
Definition: hpm_enet_drv.h:309
uint32_t ter
Definition: hpm_enet_drv.h:305
uint32_t dc
Definition: hpm_enet_drv.h:310
uint32_t next_desc
Definition: hpm_enet_drv.h:339
uint32_t ttss
Definition: hpm_enet_drv.h:302
uint32_t ls
Definition: hpm_enet_drv.h:312
uint32_t vf
Definition: hpm_enet_drv.h:292
uint32_t buffer1
Definition: hpm_enet_drv.h:331
uint32_t cc
Definition: hpm_enet_drv.h:291
uint32_t jt
Definition: hpm_enet_drv.h:299
uint32_t own
Definition: hpm_enet_drv.h:314
uint32_t tdes3
Definition: hpm_enet_drv.h:336
uint32_t ipe
Definition: hpm_enet_drv.h:297
uint32_t loc
Definition: hpm_enet_drv.h:296
uint32_t buffer2
Definition: hpm_enet_drv.h:338
uint32_t ttsh
Definition: hpm_enet_drv.h:357
uint32_t saic
Definition: hpm_enet_drv.h:324
uint32_t ic
Definition: hpm_enet_drv.h:313
uint32_t ttse
Definition: hpm_enet_drv.h:308
uint32_t tdes0
Definition: hpm_enet_drv.h:286
uint32_t ttsl
Definition: hpm_enet_drv.h:353
uint32_t uf
Definition: hpm_enet_drv.h:289