46static const char*
s_tag =
"RMAC";
52typedef enum : uint32_t {
67typedef enum : uint8_t {
79typedef enum : uint16_t {
135 reg->
MEID = err_mask;
137 reg->
MMID0 = mon0_mask;
139 reg->
MMID1 = mon1_mask;
141 reg->
MMID2 = mon2_mask;
389 const uint16_t bmcr =
404 out_link->
up =
false;
414 for (uint32_t i = 0U; i < cap; ++i) {
424 const uint16_t need =
426 if ((bmsr & need) == need) {
427 uint16_t anlpar = 0U;
451 out_link->
up =
false;
465 uint16_t anlpar = 0U;
static const char * s_tag
Logging / check tag.
Annotation-attribute framework macros for ra8-firmware.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
Validation and Error-Checking Macros for ra8-firmware.
#define RA8_CHECK_NULL_PTR(ptr, tag, message)
Reject nullptr pointer, returning k_ra8_err_null_ptr.
Error Code Definitions for ra8-firmware.
@ k_ra8_err_invalid_arg
Invalid function argument.
@ k_ra8_err_hw_timeout
Hardware timed out waiting for a flag or handshake.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
static bool internal_port_ok(ra8_etha_port_t port)
Range-check a port argument.
Cross-translation-unit private helpers shared inside ra8_hal.
Lightweight Logging Interface for ra8-firmware.
#define ra8_log_error(tag, message)
RA8 log error.
Per-port Ethernet MAC (RMAC) driver – HUM Ch 33.
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.
ra8_rmac_phy_speed_t
Resolved PHY link speed/duplex.
@ k_ra8_rmac_phy_speed_10_fd
10BASE-T full duplex.
@ k_ra8_rmac_phy_speed_100_fd
100BASE-TX full duplex.
@ k_ra8_rmac_phy_speed_unknown
No link / not yet resolved.
@ k_ra8_rmac_phy_speed_100_hd
100BASE-TX half duplex.
@ k_ra8_rmac_phy_speed_10_hd
10BASE-T half duplex.
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.
static ra8_rmac_phy_speed_t internal_decode_anlpar(uint16_t anlpar)
Decode an ANLPAR snapshot into the highest-priority capability.
static void internal_snapshot_tx(volatile const r_rmac_regs_t *reg, ra8_rmac_stats_t *out)
Snapshot the transmit counters into out.
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_rmac_phy_bit_t
IEEE 802.3 Clause 22 BMCR / BMSR / ANxR field bits.
@ k_ra8_rmac_phy_anlpar_10_fd
ANLPAR 10BASE-T FD.
@ k_ra8_rmac_phy_anlpar_100_fd
ANLPAR 100BASE-TX FD.
@ k_ra8_rmac_phy_bmsr_link_up
BMSR bit 2.
@ k_ra8_rmac_phy_anlpar_100_hd
ANLPAR 100BASE-TX HD.
@ k_ra8_rmac_phy_anar_selector
ANAR bit 0 (802.3).
@ k_ra8_rmac_phy_bmsr_an_done
BMSR bit 5.
@ k_ra8_rmac_phy_bmcr_an_enable
BMCR bit 12.
@ k_ra8_rmac_phy_bmcr_an_restart
BMCR bit 9.
@ k_ra8_rmac_phy_anlpar_10_hd
ANLPAR 10BASE-T HD.
@ k_ra8_rmac_phy_bmcr_reset
BMCR bit 15.
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_rmac_phy_reg_addr_t
IEEE 802.3 Clause 22 register addresses.
@ k_ra8_rmac_phy_reg_anar
IEEE 802.3 Clause 28.2.4 ANAR.
@ k_ra8_rmac_phy_reg_anlpar
IEEE 802.3 Clause 28.2.4 ANLPAR.
@ k_ra8_rmac_phy_reg_bmcr
IEEE 802.3 Clause 22 sec 22.2.4.1 BMCR.
@ k_ra8_rmac_phy_reg_bmsr
IEEE 802.3 Clause 22 sec 22.2.4.2 BMSR.
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).
static void internal_snapshot_pause_pfc(volatile r_rmac_regs_t *reg, ra8_rmac_stats_t *out)
Snapshot the pause / PFC / EEE counters into out.
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_phy_set_advertise(ra8_rmac_port_t port, uint8_t phy_addr, uint16_t capabilities)
Program the off-chip PHY's auto-negotiation advertisement.
static bool internal_phy_args_ok(ra8_rmac_port_t port, uint8_t phy_addr)
Validate the (port, phy_addr) tuple shared by every PHY helper.
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.
static void internal_snapshot_rx(volatile const r_rmac_regs_t *reg, ra8_rmac_stats_t *out)
Snapshot the receive counters into out.
ra8_rmac_phy_poll_t
PHY-management bounded poll budgets.
@ k_ra8_rmac_phy_anwait_iter_cap
Auto-neg internal cap.
@ k_ra8_rmac_phy_anwait_iters_per_ms
10us per spin -> 100/ms.
@ k_ra8_rmac_phy_reset_iter_cap
BMCR.RESET self-clear cap.
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.
@ k_ra8_rmac_phy_addr_max
RA8 rmac PHY address maximum.
Ethernet MAC (RMAC) per-port register layout for the RA8D2.
@ k_ra8_rmac_pfc_group_count
RA8 rmac pfc group count.
@ k_ra8_rmac_pfc_rx_count
8 PFC priority RX counters.
static volatile r_rmac_regs_t * ra8_rmac(ra8_rmac_port_t port)
Compile-time check that the RMAC register window matches FSP.
ra8_rmac_port_t
RMAC port index (m = 0, 1).
Full RMAC per-port register window (HUM Ch 33.3, FSP R_RMAC0_Type).
volatile uint32_t MRFFMEFC
+0x0428 RX final-frag missing.
volatile uint32_t MRHCRCEC
+0x0364 RX header CRC err cnt.
volatile uint32_t MTEFC
+0x051C TX error frame cnt.
volatile uint32_t MRMFC
+0x0414 RX multicast cnt.
volatile uint32_t MRXBCPL
+0x0458 RX byte cnt P lower.
volatile uint32_t MMID0
+0x0218 Monitor Disable 0.
volatile uint32_t MTMFC
+0x0514 TX multicast cnt.
volatile uint32_t MRXBCEU
+0x044C RX byte cnt E upper.
volatile uint32_t MMIS0
+0x0210 Monitor Status 0.
volatile uint32_t MAPFTCT
+0x0304 Auto pause TX cnt.
volatile uint32_t MTGFCP
+0x050C TX good P-frame cnt.
volatile uint32_t MRXBCPU
+0x0454 RX byte cnt P upper.
volatile uint32_t MTBFC
+0x0510 TX broadcast cnt.
volatile uint32_t MMID2
+0x0238 Monitor Disable 2.
volatile uint32_t MMPFTCT
+0x0300 Manual pause TX cnt.
volatile uint32_t MEIS
+0x0200 Error IRQ Status.
volatile uint32_t MRBFC
+0x0410 RX broadcast cnt.
volatile uint32_t MAPCFTCT[k_ra8_rmac_pfc_group_count]
+0x0330..0x0334
volatile uint32_t MRPEFC
+0x041C RX PHY error cnt.
volatile uint32_t MPCFRCT[k_ra8_rmac_pfc_rx_count]
+0x0340..0x035C
volatile uint32_t MRFCEFC
+0x0430 RX fragment-cnt err.
volatile uint32_t MROVFC
+0x0360 RX overflow cnt.
volatile uint32_t MEEECT
+0x0310 EEE counter.
volatile uint32_t MPIM
+0x0008 PHY Monitoring.
volatile uint32_t MRGFCE
+0x0408 RX good E-frame cnt.
volatile uint32_t MRMAC1
+0x0088 RX MAC Address 1.
volatile uint32_t MTGFCE
+0x0508 TX good E-frame cnt.
volatile uint32_t MEID
+0x0208 Error IRQ Disable.
volatile uint32_t MRFMEFC
+0x0424 RX FCS/mCRC err cnt.
volatile uint32_t MRGFCP
+0x040C RX good P-frame cnt.
volatile uint32_t MMIS2
+0x0230 Monitor Status 2.
volatile uint32_t MMIS1
+0x0220 Monitor Status 1.
volatile uint32_t MTXBCEL
+0x0524 TX byte cnt E lower.
volatile uint32_t MTXBCPL
+0x052C TX byte cnt P lower.
volatile uint32_t MRXBCEL
+0x0450 RX byte cnt E lower.
volatile uint32_t MTUFC
+0x0518 TX unicast cnt.
volatile uint32_t MMPCFTCT[k_ra8_rmac_pfc_group_count]
+0x0320..0x0324
volatile uint32_t MMID1
+0x0228 Monitor Disable 1.
volatile uint32_t MRGOEFC
+0x0444 RX good oversize cnt.
volatile uint32_t MPFRCT
+0x0308 Pause frame RX cnt.
volatile uint32_t MRUFC
+0x0418 RX unicast cnt.
volatile uint32_t MRNEFC
+0x0420 RX nibble error cnt.
volatile uint32_t MRGUEFC
+0x043C RX good undersize cnt.
volatile uint32_t MRMAC0
+0x0084 RX MAC Address 0.
volatile uint32_t MFCICT
+0x030C False carrier indication
volatile uint32_t MRBOEFC
+0x0448 RX bad oversize cnt.
volatile uint32_t MRCFCEFC
+0x042C RX C-fragment err cnt.
volatile uint32_t MRBUEFC
+0x0440 RX bad undersize cnt.
volatile uint32_t MTXBCEU
+0x0520 TX byte cnt E upper.
volatile uint32_t MRFC
+0x0438 RX total frame cnt.
volatile uint32_t MRRCFEFC
+0x0434 RX filter-rejected cnt.
volatile uint32_t MTXBCPU
+0x0528 TX byte cnt P upper.
Resolved PHY link status snapshot.
ra8_rmac_phy_speed_t speed
Negotiated speed/duplex when up.
bool up
true iff BMSR.LINK_STATUS = 1.
Snapshot of every RMAC statistic counter.
uint32_t rx_hdr_crc_err
MRHCRCEC.
uint32_t pfc_tx_auto[k_ra8_rmac_pfc_group_count]
MAPCFTCT.
uint32_t rx_good_p
MRGFCP.
uint32_t rx_frag_count_err
MRFCEFC.
uint32_t rx_broadcast
MRBFC.
uint32_t tx_multicast
MTMFC.
uint32_t tx_bytes_e_lower
MTXBCEL.
uint32_t tx_unicast
MTUFC.
uint32_t tx_broadcast
MTBFC.
uint32_t tx_good_e
MTGFCE.
uint32_t rx_good_e
MRGFCE.
uint32_t rx_unicast
MRUFC.
uint32_t eee_count
MEEECT.
uint32_t rx_fcs_err
MRFMEFC.
uint32_t rx_bytes_p_lower
MRXBCPL.
uint32_t tx_bytes_e_upper
MTXBCEU.
uint32_t rx_bytes_p_upper
MRXBCPU.
uint32_t rx_good_oversize
MRGOEFC.
uint32_t rx_final_frag_miss
MRFFMEFC.
uint32_t rx_multicast
MRMFC.
uint32_t tx_good_p
MTGFCP.
uint32_t tx_bytes_p_upper
MTXBCPU.
uint32_t tx_bytes_p_lower
MTXBCPL.
uint32_t pfc_tx_manual[k_ra8_rmac_pfc_group_count]
MMPCFTCT.
uint32_t rx_good_undersize
MRGUEFC.
uint32_t rx_filter_rejected
MRRCFEFC.
uint32_t pause_tx_auto
MAPFTCT.
uint32_t rx_bad_oversize
MRBOEFC.
uint32_t rx_c_frag_err
MRCFCEFC.
uint32_t false_carrier
MFCICT.
uint32_t rx_phy_err
MRPEFC.
uint32_t pfc_rx[k_ra8_rmac_pfc_rx_count]
MPCFRCT.
uint32_t pause_tx_manual
MMPFTCT.
uint32_t rx_bad_undersize
MRBUEFC.
uint32_t rx_nibble_err
MRNEFC.
uint32_t rx_overflow
MROVFC.
uint32_t rx_bytes_e_upper
MRXBCEU.
uint32_t rx_bytes_e_lower
MRXBCEL.
Snapshot of an RMAC port's runtime state.
uint32_t phy_monitor
Raw MPIM contents.
uint32_t mrmac0
Cached MRMAC0 contents.
uint32_t mon_status[3]
MMIS0..MMIS2 contents.
uint32_t mrmac1
Cached MRMAC1 contents.
uint32_t err_status
Raw MEIS contents.