ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_rmac.h
Go to the documentation of this file.
1
74
75#pragma once
76
77#ifdef __cplusplus
78extern "C" {
79#endif
80
81#include <stdint.h>
82
83#include "ra8_err.h"
84#include "ra8_rmac_regs.h"
85
105typedef enum : uint32_t {
110
149
168
184
203
213typedef struct {
214 uint32_t err_status;
215 uint32_t mon_status[3];
216 uint32_t phy_monitor;
217 uint32_t mrmac0;
218 uint32_t mrmac1;
220
278
290typedef void (*ra8_rmac_event_fn_t)(void* ctx,
291 ra8_rmac_port_t port,
292 uint32_t err_msk,
293 uint32_t mon0_msk,
294 uint32_t mon1_msk,
295 uint32_t mon2_msk);
296
318[[nodiscard]] ra8_err_t ra8_rmac_init(ra8_rmac_port_t port, const ra8_rmac_config_t* cfg);
319
339[[nodiscard]] ra8_err_t ra8_rmac_deinit(ra8_rmac_port_t port);
340
358
375
398 const uint8_t mac[k_ra8_rmac_mac_byte_count]);
399
418
440 uint8_t index,
441 uint8_t byte_offset,
442 uint8_t value,
443 bool tef0,
444 bool tef1);
445
464[[nodiscard]] ra8_err_t
465ra8_rmac_set_frame_size(ra8_rmac_port_t port, bool is_pframe, uint16_t min_size, uint16_t max_size);
466
484[[nodiscard]] ra8_err_t
485ra8_rmac_set_vlan_framing(ra8_rmac_port_t port, bool disable_pad, bool use_mcrc);
486
506 uint16_t pause_time,
507 uint8_t retry_time,
508 uint8_t retry_level);
509
525[[nodiscard]] ra8_err_t
526ra8_rmac_set_pfc_group(ra8_rmac_port_t port, ra8_rmac_pfc_group_t group, uint8_t pcp_mask);
527
545[[nodiscard]] ra8_err_t ra8_rmac_set_lpi(ra8_rmac_port_t port, bool enable);
546
563[[nodiscard]] ra8_err_t ra8_rmac_set_magic_packet(ra8_rmac_port_t port, bool enable);
564
581[[nodiscard]] ra8_err_t ra8_rmac_set_loopback(ra8_rmac_port_t port, bool enable);
582
600 ra8_rmac_pis_t iface,
601 ra8_rmac_lsc_t speed,
602 ra8_rmac_duplex_t duplex);
603
625 uint8_t phy_addr,
626 uint8_t reg_addr,
627 uint16_t* out_value);
628
645[[nodiscard]] ra8_err_t
646ra8_rmac_mdio_c22_write(ra8_rmac_port_t port, uint8_t phy_addr, uint8_t reg_addr, uint16_t value);
647
669 uint8_t phy_addr,
670 uint8_t dev_addr,
671 uint16_t reg_addr,
672 uint16_t* out_value);
673
692 uint8_t phy_addr,
693 uint8_t dev_addr,
694 uint16_t reg_addr,
695 uint16_t value);
696
716
737 uint32_t err_mask,
738 uint32_t mon0_mask,
739 uint32_t mon1_mask,
740 uint32_t mon2_mask);
741
760
777[[nodiscard]] ra8_err_t
779
802
829[[nodiscard]] ra8_err_t ra8_rmac_phy_reset(ra8_rmac_port_t port, uint8_t phy_addr);
830
860[[nodiscard]] ra8_err_t
861ra8_rmac_phy_set_advertise(ra8_rmac_port_t port, uint8_t phy_addr, uint16_t capabilities);
862
889[[nodiscard]] ra8_err_t ra8_rmac_phy_auto_neg_start(ra8_rmac_port_t port, uint8_t phy_addr);
890
925 uint8_t phy_addr,
926 uint32_t timeout_ms,
927 ra8_rmac_phy_link_t* out_link);
928
956[[nodiscard]] ra8_err_t
957ra8_rmac_phy_link_status(ra8_rmac_port_t port, uint8_t phy_addr, ra8_rmac_phy_link_t* out_link);
958
959#ifdef __cplusplus
960}
961#endif
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
ra8_err_t ra8_rmac_mdio_c45_read(ra8_rmac_port_t port, uint8_t phy_addr, uint8_t dev_addr, uint16_t reg_addr, uint16_t *out_value)
Trigger an MDIO Clause-45 register read.
Definition ra8_rmac.c:859
ra8_err_t ra8_rmac_set_vlan_framing(ra8_rmac_port_t port, bool disable_pad, bool use_mcrc)
Configure VLAN double-tagging behaviour via MTFFC.
Definition ra8_rmac.c:674
ra8_err_t ra8_rmac_enter_stop(ra8_rmac_port_t port)
Enter low-power "stop" by disabling RX address filtering.
Definition ra8_rmac.c:551
ra8_err_t ra8_rmac_set_magic_packet(ra8_rmac_port_t port, bool enable)
Enable / disable magic-packet wake-on-LAN detection.
Definition ra8_rmac.c:749
ra8_err_t ra8_rmac_exit_stop(ra8_rmac_port_t port)
Exit low-power "stop" by reasserting the saved RX filter.
Definition ra8_rmac.c:562
ra8_err_t ra8_rmac_attach_handler(ra8_rmac_port_t port, ra8_rmac_event_fn_t cb, void *ctx)
Attach a per-port IRQ handler for RMAC events.
Definition ra8_rmac.c:934
ra8_err_t ra8_rmac_get_status(ra8_rmac_port_t port, ra8_rmac_status_t *out)
Read a port's status snapshot (MEIS + MMIS0..2 + MPIM + MAC).
ra8_err_t ra8_rmac_mdio_c45_write(ra8_rmac_port_t port, uint8_t phy_addr, uint8_t dev_addr, uint16_t reg_addr, uint16_t value)
Trigger an MDIO Clause-45 register write.
Definition ra8_rmac.c:902
ra8_err_t ra8_rmac_clear_status(ra8_rmac_port_t port, uint32_t err_mask, uint32_t mon0_mask, uint32_t mon1_mask, uint32_t mon2_mask)
Clear bits in MEIS / MMIS0 / MMIS1 / MMIS2.
ra8_err_t ra8_rmac_read_stats(ra8_rmac_port_t port, ra8_rmac_stats_t *out)
Read the full statistic counter snapshot (HUM Ch 33.4).
ra8_err_t ra8_rmac_set_rx_filter(ra8_rmac_port_t port, ra8_rmac_mrafc_t filter)
Program the RX address filter mask (MRAFC).
Definition ra8_rmac.c:609
ra8_err_t ra8_rmac_phy_link_status(ra8_rmac_port_t port, uint8_t phy_addr, ra8_rmac_phy_link_t *out_link)
Quick poll of BMSR.LINK_STATUS (no auto-neg block).
ra8_err_t ra8_rmac_set_pause_frame(ra8_rmac_port_t port, ra8_rmac_pause_mode_t mode, uint16_t pause_time, uint8_t retry_time, uint8_t retry_level)
Program a TX pause / PFC frame template.
Definition ra8_rmac.c:692
ra8_err_t ra8_rmac_set_lpi(ra8_rmac_port_t port, bool enable)
Enable / disable Energy Efficient Ethernet LPI request.
Definition ra8_rmac.c:734
void(* ra8_rmac_event_fn_t)(void *ctx, ra8_rmac_port_t port, uint32_t err_msk, uint32_t mon0_msk, uint32_t mon1_msk, uint32_t mon2_msk)
Per-port RMAC IRQ callback.
Definition ra8_rmac.h:290
ra8_err_t ra8_rmac_phy_set_advertise(ra8_rmac_port_t port, uint8_t phy_addr, uint16_t capabilities)
Program the off-chip PHY's auto-negotiation advertisement.
ra8_err_t ra8_rmac_deinit(ra8_rmac_port_t port)
Tear down an RMAC port.
Definition ra8_rmac.c:515
ra8_rmac_phy_advert_t
802.3 Clause 22 ANAR (auto-negotiation advertisement) bits.
Definition ra8_rmac.h:196
@ k_ra8_rmac_phy_advert_100_hd
IEEE 802.3 ANAR.100BASE-TX.
Definition ra8_rmac.h:199
@ k_ra8_rmac_phy_advert_100_fd
IEEE 802.3 ANAR.100BASE-TX FD.
Definition ra8_rmac.h:200
@ k_ra8_rmac_phy_advert_pause
IEEE 802.3 ANAR.PAUSE.
Definition ra8_rmac.h:201
@ k_ra8_rmac_phy_advert_10_fd
IEEE 802.3 ANAR.10BASE-T FD.
Definition ra8_rmac.h:198
@ k_ra8_rmac_phy_advert_10_hd
IEEE 802.3 ANAR.10BASE-T.
Definition ra8_rmac.h:197
ra8_err_t ra8_rmac_mdio_c22_write(ra8_rmac_port_t port, uint8_t phy_addr, uint8_t reg_addr, uint16_t value)
Trigger an MDIO Clause-22 register write on the off-chip PHY.
Definition ra8_rmac.c:842
ra8_rmac_mdc_clk_t
MPIC PHY-station-management clock-rate constants.
Definition ra8_rmac.h:105
@ k_ra8_rmac_mdc_min_hz
Lower-bound sanity (PSMCS is 7 bits wide).
Definition ra8_rmac.h:107
@ k_ra8_rmac_mdc_default_hz
1 MHz MDC – well below the 2.5 MHz ceiling.
Definition ra8_rmac.h:106
@ k_ra8_rmac_mdc_psmcs_max
MPIC.PSMCS[22:16] is 7 bits wide.
Definition ra8_rmac.h:108
ra8_rmac_phy_speed_t
Resolved PHY link speed/duplex.
Definition ra8_rmac.h:160
@ k_ra8_rmac_phy_speed_10_fd
10BASE-T full duplex.
Definition ra8_rmac.h:163
@ k_ra8_rmac_phy_speed_100_fd
100BASE-TX full duplex.
Definition ra8_rmac.h:165
@ k_ra8_rmac_phy_speed_count
Sentinel.
Definition ra8_rmac.h:166
@ k_ra8_rmac_phy_speed_unknown
No link / not yet resolved.
Definition ra8_rmac.h:161
@ k_ra8_rmac_phy_speed_100_hd
100BASE-TX half duplex.
Definition ra8_rmac.h:164
@ k_ra8_rmac_phy_speed_10_hd
10BASE-T half duplex.
Definition ra8_rmac.h:162
ra8_err_t ra8_rmac_set_link(ra8_rmac_port_t port, ra8_rmac_pis_t iface, ra8_rmac_lsc_t speed, ra8_rmac_duplex_t duplex)
Configure the link layer (interface, speed, duplex) atomically.
Definition ra8_rmac.c:782
ra8_err_t ra8_rmac_set_frame_size(ra8_rmac_port_t port, bool is_pframe, uint16_t min_size, uint16_t max_size)
Configure jumbo-frame minimum / maximum sizes.
Definition ra8_rmac.c:652
ra8_err_t ra8_rmac_phy_auto_neg_start(ra8_rmac_port_t port, uint8_t phy_addr)
Kick off (or restart) auto-negotiation on the off-chip PHY.
ra8_err_t ra8_rmac_phy_reset(ra8_rmac_port_t port, uint8_t phy_addr)
Software-reset an off-chip PHY via Clause-22 MDIO.
ra8_err_t ra8_rmac_mdio_c22_read(ra8_rmac_port_t port, uint8_t phy_addr, uint8_t reg_addr, uint16_t *out_value)
Trigger an MDIO Clause-22 register read on the off-chip PHY.
Definition ra8_rmac.c:811
ra8_err_t ra8_rmac_set_ptp_filter(ra8_rmac_port_t port, uint8_t index, uint8_t byte_offset, uint8_t value, bool tef0, bool tef1)
Program a PTP-frame filter table entry (MPFCt, t = 0..15).
Definition ra8_rmac.c:621
ra8_err_t ra8_rmac_init(ra8_rmac_port_t port, const ra8_rmac_config_t *cfg)
Initialise an RMAC port (MSTP gate + reset regs + filter mode).
Definition ra8_rmac.c:481
ra8_err_t ra8_rmac_phy_auto_neg_wait(ra8_rmac_port_t port, uint8_t phy_addr, uint32_t timeout_ms, ra8_rmac_phy_link_t *out_link)
Block (with a bounded poll) until the PHY reports AN_COMPLETE.
ra8_err_t ra8_rmac_set_loopback(ra8_rmac_port_t port, bool enable)
Enable / disable internal MAC loopback.
Definition ra8_rmac.c:767
ra8_err_t ra8_rmac_set_pfc_group(ra8_rmac_port_t port, ra8_rmac_pfc_group_t group, uint8_t pcp_mask)
Configure a PFC (802.1Qbb) priority group bitmap.
Definition ra8_rmac.c:719
void ra8_rmac_dispatch(ra8_rmac_port_t port)
Dispatch a pending RMAC IRQ.
Definition ra8_rmac.c:946
ra8_err_t ra8_rmac_set_mac_address(ra8_rmac_port_t port, const uint8_t mac[k_ra8_rmac_mac_byte_count])
Program the reception MAC address (MRMAC0 / MRMAC1).
Definition ra8_rmac.c:573
ra8_rmac_phy_speed_t
Negotiated link speed.
Ethernet MAC (RMAC) per-port register layout for the RA8D2.
@ k_ra8_rmac_mac_byte_count
Bytes in a unicast MAC.
ra8_rmac_pfc_group_t
PFC priority group index (MTPFC3t, t = 0..1).
@ k_ra8_rmac_pfc_group_count
RA8 rmac pfc group count.
ra8_rmac_mrafc_t
MRAFC reception address filter mode bits (HUM Ch 33.4).
ra8_rmac_pis_t
Physical interface selector for MPIC.PIS[2:0].
@ k_ra8_rmac_pfc_rx_count
8 PFC priority RX counters.
ra8_rmac_lsc_t
Link-speed selector for MPIC.LSC[5:3] (HUM Ch 33.4).
ra8_rmac_pause_mode_t
Selects PFM bit in MTPFC2 – pause vs PFC frame.
ra8_rmac_port_t
RMAC port index (m = 0, 1).
ra8_rmac_duplex_t
Duplex selection (programmed via MPIC.PIPP / MPIC.PIP).
Per-port RMAC configuration knobs.
Definition ra8_rmac.h:120
uint32_t mon0_irq_enable
Bits to OR into MMIE0.
Definition ra8_rmac.h:123
uint32_t mon2_irq_enable
Bits to OR into MMIE2.
Definition ra8_rmac.h:125
ra8_rmac_lsc_t link_speed
Initial MPIC.LSC encoding.
Definition ra8_rmac.h:127
uint32_t eswclk_hz
Live ESWCLK frequency in Hz (input to the MDC divider).
Definition ra8_rmac.h:138
ra8_rmac_mrafc_t rx_filter
Initial MRAFC mask.
Definition ra8_rmac.h:121
ra8_rmac_duplex_t duplex
Initial MPIC.PIPP encoding.
Definition ra8_rmac.h:128
uint32_t mdc_hz
Target MDC (PHY station-management clock) frequency in Hz.
Definition ra8_rmac.h:147
uint32_t mon1_irq_enable
Bits to OR into MMIE1.
Definition ra8_rmac.h:124
ra8_rmac_pis_t phy_interface
Initial MPIC.PIS encoding.
Definition ra8_rmac.h:126
uint32_t err_irq_enable
Bits to OR into MEIE on init.
Definition ra8_rmac.h:122
Snapshot of every RMAC statistic counter.
Definition ra8_rmac.h:235
uint32_t rx_hdr_crc_err
MRHCRCEC.
Definition ra8_rmac.h:245
uint32_t pfc_tx_auto[k_ra8_rmac_pfc_group_count]
MAPCFTCT.
Definition ra8_rmac.h:242
uint32_t rx_good_p
MRGFCP.
Definition ra8_rmac.h:247
uint32_t rx_frag_count_err
MRFCEFC.
Definition ra8_rmac.h:256
uint32_t rx_broadcast
MRBFC.
Definition ra8_rmac.h:248
uint32_t tx_multicast
MTMFC.
Definition ra8_rmac.h:270
uint32_t tx_bytes_e_lower
MTXBCEL.
Definition ra8_rmac.h:274
uint32_t tx_unicast
MTUFC.
Definition ra8_rmac.h:271
uint32_t tx_broadcast
MTBFC.
Definition ra8_rmac.h:269
uint32_t tx_good_e
MTGFCE.
Definition ra8_rmac.h:267
uint32_t rx_good_e
MRGFCE.
Definition ra8_rmac.h:246
uint32_t rx_unicast
MRUFC.
Definition ra8_rmac.h:250
uint32_t eee_count
MEEECT.
Definition ra8_rmac.h:240
uint32_t rx_fcs_err
MRFMEFC.
Definition ra8_rmac.h:253
uint32_t rx_bytes_p_lower
MRXBCPL.
Definition ra8_rmac.h:266
uint32_t tx_bytes_e_upper
MTXBCEU.
Definition ra8_rmac.h:273
uint32_t rx_bytes_p_upper
MRXBCPU.
Definition ra8_rmac.h:265
uint32_t rx_total
MRFC.
Definition ra8_rmac.h:258
uint32_t pause_rx
MPFRCT.
Definition ra8_rmac.h:238
uint32_t rx_good_oversize
MRGOEFC.
Definition ra8_rmac.h:261
uint32_t rx_final_frag_miss
MRFFMEFC.
Definition ra8_rmac.h:254
uint32_t rx_multicast
MRMFC.
Definition ra8_rmac.h:249
uint32_t tx_good_p
MTGFCP.
Definition ra8_rmac.h:268
uint32_t tx_bytes_p_upper
MTXBCPU.
Definition ra8_rmac.h:275
uint32_t tx_bytes_p_lower
MTXBCPL.
Definition ra8_rmac.h:276
uint32_t pfc_tx_manual[k_ra8_rmac_pfc_group_count]
MMPCFTCT.
Definition ra8_rmac.h:241
uint32_t rx_good_undersize
MRGUEFC.
Definition ra8_rmac.h:259
uint32_t rx_filter_rejected
MRRCFEFC.
Definition ra8_rmac.h:257
uint32_t pause_tx_auto
MAPFTCT.
Definition ra8_rmac.h:237
uint32_t rx_bad_oversize
MRBOEFC.
Definition ra8_rmac.h:262
uint32_t rx_c_frag_err
MRCFCEFC.
Definition ra8_rmac.h:255
uint32_t false_carrier
MFCICT.
Definition ra8_rmac.h:239
uint32_t rx_phy_err
MRPEFC.
Definition ra8_rmac.h:251
uint32_t pfc_rx[k_ra8_rmac_pfc_rx_count]
MPCFRCT.
Definition ra8_rmac.h:243
uint32_t pause_tx_manual
MMPFTCT.
Definition ra8_rmac.h:236
uint32_t rx_bad_undersize
MRBUEFC.
Definition ra8_rmac.h:260
uint32_t rx_nibble_err
MRNEFC.
Definition ra8_rmac.h:252
uint32_t tx_error
MTEFC.
Definition ra8_rmac.h:272
uint32_t rx_overflow
MROVFC.
Definition ra8_rmac.h:244
uint32_t rx_bytes_e_upper
MRXBCEU.
Definition ra8_rmac.h:263
uint32_t rx_bytes_e_lower
MRXBCEL.
Definition ra8_rmac.h:264
Snapshot of an RMAC port's runtime state.
Definition ra8_rmac.h:213
uint32_t phy_monitor
Raw MPIM contents.
Definition ra8_rmac.h:216
uint32_t mrmac0
Cached MRMAC0 contents.
Definition ra8_rmac.h:217
uint32_t mon_status[3]
MMIS0..MMIS2 contents.
Definition ra8_rmac.h:215
uint32_t mrmac1
Cached MRMAC1 contents.
Definition ra8_rmac.h:218
uint32_t err_status
Raw MEIS contents.
Definition ra8_rmac.h:214