ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_rmac_mgmt.c
Go to the documentation of this file.
1
31
32#include <stdint.h>
33
34#include "ra8_attributes.h"
35#include "ra8_check.h"
36#include "ra8_err.h"
37#include "ra8_hal_internal.h"
38#include "ra8_log.h"
39#include "ra8_rmac.h"
40#include "ra8_rmac_regs.h"
41
46static const char* s_tag = "RMAC";
47
57
74
91
93{
94 RA8_CHECK_NULL_PTR(out, s_tag, "rmac_get_status: out must not be nullptr");
95 if (!internal_port_ok(port)) {
96 ra8_log_error(s_tag, "rmac_get_status: port out of range");
98 }
99
100 volatile const r_rmac_regs_t* reg = ra8_rmac(port);
101 /* HUM Ch 33.4 "MEIS : MAC Error Interrupt Status Register" p 1745 */
102 out->err_status = reg->MEIS;
103 /* HUM Ch 33.4 "MMIS0 : MAC Monitoring Interrupt Status Register 0" p 1756 */
104 out->mon_status[0] = reg->MMIS0;
105 /* HUM Ch 33.4 "MMIS1 : MAC Monitoring Interrupt Status Register 1" p 1758 */
106 out->mon_status[1] = reg->MMIS1;
107 /* HUM Ch 33.4 "MMIS2 : MAC Monitoring Interrupt Status Register 2" p 1761 */
108 out->mon_status[2] = reg->MMIS2;
109 /* HUM Ch 33.4 "MPIM : PHY Interfaces Monitoring Register" p 1710 */
110 out->phy_monitor = reg->MPIM;
111 /* HUM Ch 33.4 "MRMAC0 : MAC Reception MAC Address Configuration Register 0" p 1716 */
112 out->mrmac0 = reg->MRMAC0;
113 /* HUM Ch 33.4 "MRMAC1 : MAC Reception MAC Address Configuration Register 1" p 1717 */
114 out->mrmac1 = reg->MRMAC1;
115 return k_ra8_ok;
116}
117
119 uint32_t err_mask,
120 uint32_t mon0_mask,
121 uint32_t mon1_mask,
122 uint32_t mon2_mask)
123{
124 if (!internal_port_ok(port)) {
125 ra8_log_error(s_tag, "rmac_clear_status: port out of range");
127 }
128 volatile r_rmac_regs_t* reg = ra8_rmac(port);
129 /* The disable registers act as the clear-on-write counterpart of
130 * each status register; writing 1 to a bit clears the matching bit
131 * in MEIS / MMIS{0,1,2}. The driver also writes the explicit
132 * masked-out value so fake backings (which lack RW1C) end up
133 * in the same observable state as real hardware. */
134 /* HUM Ch 33.4 "MEID : MAC Error Interrupt Disable Register" p 1754 */
135 reg->MEID = err_mask;
136 /* HUM Ch 33.4 "MMID0 : MAC Monitoring Interrupt Disable Register 0" p 1758 */
137 reg->MMID0 = mon0_mask;
138 /* HUM Ch 33.4 "MMID1 : MAC Monitoring Interrupt Disable Register 1" p 1760 */
139 reg->MMID1 = mon1_mask;
140 /* HUM Ch 33.4 "MMID2 : MAC Monitoring Interrupt Disable Register 2" p 1763 */
141 reg->MMID2 = mon2_mask;
142 /* HUM Ch 33.4 "MEIS : MAC Error Interrupt Status Register" p 1745 */
143 reg->MEIS = reg->MEIS & ~err_mask;
144 /* HUM Ch 33.4 "MMIS0 : MAC Monitoring Interrupt Status Register 0" p 1756 */
145 reg->MMIS0 = reg->MMIS0 & ~mon0_mask;
146 /* HUM Ch 33.4 "MMIS1 : MAC Monitoring Interrupt Status Register 1" p 1758 */
147 reg->MMIS1 = reg->MMIS1 & ~mon1_mask;
148 /* HUM Ch 33.4 "MMIS2 : MAC Monitoring Interrupt Status Register 2" p 1761 */
149 reg->MMIS2 = reg->MMIS2 & ~mon2_mask;
150 return k_ra8_ok;
151}
152
171{
172 out->pause_tx_manual = reg->MMPFTCT;
173 out->pause_tx_auto = reg->MAPFTCT;
174 out->pause_rx = reg->MPFRCT;
175 out->false_carrier = reg->MFCICT;
176 out->eee_count = reg->MEEECT;
177 for (uint8_t i = 0; i < k_ra8_rmac_pfc_group_count; ++i) {
178 out->pfc_tx_manual[i] = reg->MMPCFTCT[i];
179 out->pfc_tx_auto[i] = reg->MAPCFTCT[i];
180 }
181 for (uint8_t i = 0; i < k_ra8_rmac_pfc_rx_count; ++i) {
182 out->pfc_rx[i] = reg->MPCFRCT[i];
183 }
184}
185
202static void internal_snapshot_rx(volatile const r_rmac_regs_t* reg, ra8_rmac_stats_t* out)
203{
204 out->rx_overflow = reg->MROVFC;
205 out->rx_hdr_crc_err = reg->MRHCRCEC;
206 out->rx_good_e = reg->MRGFCE;
207 out->rx_good_p = reg->MRGFCP;
208 out->rx_broadcast = reg->MRBFC;
209 out->rx_multicast = reg->MRMFC;
210 out->rx_unicast = reg->MRUFC;
211 out->rx_phy_err = reg->MRPEFC;
212 out->rx_nibble_err = reg->MRNEFC;
213 out->rx_fcs_err = reg->MRFMEFC;
214 out->rx_final_frag_miss = reg->MRFFMEFC;
215 out->rx_c_frag_err = reg->MRCFCEFC;
216 out->rx_frag_count_err = reg->MRFCEFC;
217 out->rx_filter_rejected = reg->MRRCFEFC;
218 out->rx_total = reg->MRFC;
219 out->rx_good_undersize = reg->MRGUEFC;
220 out->rx_bad_undersize = reg->MRBUEFC;
221 out->rx_good_oversize = reg->MRGOEFC;
222 out->rx_bad_oversize = reg->MRBOEFC;
223 out->rx_bytes_e_upper = reg->MRXBCEU;
224 out->rx_bytes_e_lower = reg->MRXBCEL;
225 out->rx_bytes_p_upper = reg->MRXBCPU;
226 out->rx_bytes_p_lower = reg->MRXBCPL;
227}
228
245static void internal_snapshot_tx(volatile const r_rmac_regs_t* reg, ra8_rmac_stats_t* out)
246{
247 out->tx_good_e = reg->MTGFCE;
248 out->tx_good_p = reg->MTGFCP;
249 out->tx_broadcast = reg->MTBFC;
250 out->tx_multicast = reg->MTMFC;
251 out->tx_unicast = reg->MTUFC;
252 out->tx_error = reg->MTEFC;
253 out->tx_bytes_e_upper = reg->MTXBCEU;
254 out->tx_bytes_e_lower = reg->MTXBCEL;
255 out->tx_bytes_p_upper = reg->MTXBCPU;
256 out->tx_bytes_p_lower = reg->MTXBCPL;
257}
258
260{
261 RA8_CHECK_NULL_PTR(out, s_tag, "read_stats: out must not be nullptr");
262 if (!internal_port_ok(port)) {
263 ra8_log_error(s_tag, "read_stats: port out of range");
265 }
266
267 volatile r_rmac_regs_t* reg = ra8_rmac(port);
269 internal_snapshot_rx(reg, out);
270 internal_snapshot_tx(reg, out);
271 return k_ra8_ok;
272}
273
291static inline bool internal_phy_args_ok(ra8_rmac_port_t port, uint8_t phy_addr)
292{
293 return internal_port_ok(port) && (phy_addr <= (uint8_t)k_ra8_rmac_phy_addr_max);
294}
295
316{
317 if ((anlpar & (uint16_t)k_ra8_rmac_phy_anlpar_100_fd) != 0U) {
319 }
320 if ((anlpar & (uint16_t)k_ra8_rmac_phy_anlpar_100_hd) != 0U) {
322 }
323 if ((anlpar & (uint16_t)k_ra8_rmac_phy_anlpar_10_fd) != 0U) {
325 }
326 if ((anlpar & (uint16_t)k_ra8_rmac_phy_anlpar_10_hd) != 0U) {
328 }
330}
331
333{
334 if (!internal_phy_args_ok(port, phy_addr)) {
335 ra8_log_error(s_tag, "phy_reset: bad args");
337 }
338 /* IEEE 802.3 Clause 22 sec 22.2.4.1.1 "BMCR.RESET" -- self-clearing.
339 * HUM Ch 33.4.1.1 "MPSM" p 1707 carries the MDIO write. */
340 const ra8_err_t w = ra8_rmac_mdio_c22_write(port,
341 phy_addr,
343 (uint16_t)k_ra8_rmac_phy_bmcr_reset);
344 if (w != k_ra8_ok) {
345 /* Reached on host by arming the ra8_fake_mmio seam on MPSM so the
346 * MDIO write's drain or post-wait times out. */
347 ra8_log_error(s_tag, "phy_reset: bmcr write");
348 return w;
349 }
350 for (uint32_t i = 0U; i < (uint32_t)k_ra8_rmac_phy_reset_iter_cap; ++i) {
351 uint16_t bmcr = 0U;
352 const ra8_err_t r =
353 ra8_rmac_mdio_c22_read(port, phy_addr, (uint8_t)k_ra8_rmac_phy_reg_bmcr, &bmcr);
354 if (r != k_ra8_ok) {
355 /* Reached on host via ra8_fake_mmio_fail_nth_wait on MPSM: the
356 * write's two MPSM wait-loops succeed, the read's drain fails. */
357 ra8_log_error(s_tag, "phy_reset: bmcr read");
358 return r;
359 }
360 if ((bmcr & (uint16_t)k_ra8_rmac_phy_bmcr_reset) == 0U) {
361 return k_ra8_ok;
362 }
363 }
364 ra8_log_error(s_tag, "phy_reset: bmcr.reset never cleared");
366}
367
368ra8_err_t ra8_rmac_phy_set_advertise(ra8_rmac_port_t port, uint8_t phy_addr, uint16_t capabilities)
369{
370 if (!internal_phy_args_ok(port, phy_addr)) {
371 ra8_log_error(s_tag, "phy_set_advertise: bad args");
373 }
374 /* IEEE 802.3 Clause 28.2.4 "ANAR" -- selector field is bits [4:0],
375 * value 00001 = IEEE 802.3 (the only selector RMAC supports). */
376 const uint16_t anar = (uint16_t)(capabilities | (uint16_t)k_ra8_rmac_phy_anar_selector);
377 return ra8_rmac_mdio_c22_write(port, phy_addr, (uint8_t)k_ra8_rmac_phy_reg_anar, anar);
378}
379
381{
382 if (!internal_phy_args_ok(port, phy_addr)) {
383 ra8_log_error(s_tag, "phy_auto_neg_start: bad args");
385 }
386 /* IEEE 802.3 Clause 22 sec 22.2.4.1 "BMCR" -- AN_ENABLE (bit 12) +
387 * AN_RESTART (bit 9). Writing both in one transaction is the
388 * canonical "kick" sequence. */
389 const uint16_t bmcr =
390 (uint16_t)((uint16_t)k_ra8_rmac_phy_bmcr_an_enable | (uint16_t)k_ra8_rmac_phy_bmcr_an_restart);
391 return ra8_rmac_mdio_c22_write(port, phy_addr, (uint8_t)k_ra8_rmac_phy_reg_bmcr, bmcr);
392}
393
395 uint8_t phy_addr,
396 uint32_t timeout_ms,
397 ra8_rmac_phy_link_t* out_link)
398{
399 RA8_CHECK_NULL_PTR(out_link, s_tag, "phy_auto_neg_wait: out_link null");
400 if (!internal_phy_args_ok(port, phy_addr)) {
401 ra8_log_error(s_tag, "phy_auto_neg_wait: bad args");
403 }
404 out_link->up = false;
406
407 /* 100 iters per ms = 10us per spin (k_ra8_rmac_phy_anwait_us_per_iter). */
408 uint32_t cap = (timeout_ms == 0U) ? (uint32_t)k_ra8_rmac_phy_anwait_iter_cap
409 : (timeout_ms * (uint32_t)k_ra8_rmac_phy_anwait_iters_per_ms);
410 if (cap == 0U) {
411 cap = 1U;
412 }
413
414 for (uint32_t i = 0U; i < cap; ++i) {
415 uint16_t bmsr = 0U;
416 /* IEEE 802.3 Clause 22 sec 22.2.4.2 "BMSR" -- AN_COMPLETE bit 5,
417 * LINK_STATUS bit 2. Need both set for a "ready to forward" link. */
418 const ra8_err_t r =
419 ra8_rmac_mdio_c22_read(port, phy_addr, (uint8_t)k_ra8_rmac_phy_reg_bmsr, &bmsr);
420 if (r != k_ra8_ok) {
421 /* Reached on host by arming the ra8_fake_mmio seam on MPSM. */
422 return r;
423 }
424 const uint16_t need =
425 (uint16_t)((uint16_t)k_ra8_rmac_phy_bmsr_an_done | (uint16_t)k_ra8_rmac_phy_bmsr_link_up);
426 if ((bmsr & need) == need) {
427 uint16_t anlpar = 0U;
428 /* IEEE 802.3 Clause 28.2.4.4 "ANLPAR" -- resolved capability. */
429 const ra8_err_t lp =
430 ra8_rmac_mdio_c22_read(port, phy_addr, (uint8_t)k_ra8_rmac_phy_reg_anlpar, &anlpar);
431 if (lp != k_ra8_ok) {
432 return lp;
433 }
434 out_link->up = true;
435 out_link->speed = internal_decode_anlpar(anlpar);
436 return k_ra8_ok;
437 }
438 }
439 ra8_log_error(s_tag, "phy_auto_neg_wait: timeout");
441}
442
445{
446 RA8_CHECK_NULL_PTR(out_link, s_tag, "phy_link_status: out_link null");
447 if (!internal_phy_args_ok(port, phy_addr)) {
448 ra8_log_error(s_tag, "phy_link_status: bad args");
450 }
451 out_link->up = false;
453
454 uint16_t bmsr = 0U;
455 /* IEEE 802.3 Clause 22 sec 22.2.4.2 "BMSR.LINK_STATUS" (bit 2). */
456 const ra8_err_t r =
457 ra8_rmac_mdio_c22_read(port, phy_addr, (uint8_t)k_ra8_rmac_phy_reg_bmsr, &bmsr);
458 if (r != k_ra8_ok) {
459 /* Reached on host by arming the ra8_fake_mmio seam on MPSM. */
460 return r;
461 }
462 out_link->up = (bmsr & (uint16_t)k_ra8_rmac_phy_bmsr_link_up) != 0U;
463 // mcdc-deactivated: ra8_rmac_phy_link_status link-up + an-done gate; both bits come from the same BMSR read; PHY hardware sets BMSR.AN_DONE only after BMSR.LINK_STATUS asserts (IEEE 802.3 Clause 22 22.2.4.2 ordering) -- the second condition cannot be true while the first is false on any conformant PHY.
464 if (out_link->up && ((bmsr & (uint16_t)k_ra8_rmac_phy_bmsr_an_done) != 0U)) {
465 uint16_t anlpar = 0U;
466 const ra8_err_t lp =
467 ra8_rmac_mdio_c22_read(port, phy_addr, (uint8_t)k_ra8_rmac_phy_reg_anlpar, &anlpar);
468 if (lp != k_ra8_ok) {
469 return lp;
470 }
471 out_link->speed = internal_decode_anlpar(anlpar);
472 }
473 return k_ra8_ok;
474}
static const char * s_tag
Logging / check tag.
Definition ra8_app.c:17
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.
Definition ra8_check.h:243
Error Code Definitions for ra8-firmware.
@ k_ra8_err_invalid_arg
Invalid function argument.
Definition ra8_err.h:152
@ k_ra8_err_hw_timeout
Hardware timed out waiting for a flag or handshake.
Definition ra8_err.h:304
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
Definition ra8_err.h:119
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
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.
Definition ra8_log.h:335
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.
Definition ra8_rmac.c:842
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_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_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
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.
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