Loading...
Searching...
No Matches
mii.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2020 Otto-von-Guericke-Universität Magdeburg
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
24
25#include <stdbool.h>
26#include <stdint.h>
27
28#include "bitarithm.h"
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
43#define MII_BMCR (0x00U)
44#define MII_BMSR (0x01U)
45#define MII_PHYID1 (0x02U)
46#define MII_PHYID2 (0x03U)
47#define MII_ADVERTISE (0x04U)
48#define MII_LPA (0x05U)
49#define MII_EXPANSION (0x06U)
50#define MII_ESTATUS (0x0fU)
51#define MII_IRQ (0x1bU)
53
58#define MII_BMCR_RESET BIT15
59#define MII_BMCR_LOOP BIT14
60#define MII_BMCR_AN_ENABLE BIT12
61#define MII_BMCR_POWER_DOWN BIT11
62#define MII_BMCR_ISOLATE BIT10
64#define MII_BMCR_AN_RESTART BIT9
65#define MII_BMCR_FULL_DPLX BIT8
66#define MII_BMCR_HALF_DPLX (0)
67#define MII_BMCR_COLL_TEST BIT7
68#define MII_BMCR_SPEED_10 (0)
69#define MII_BMCR_SPEED_100 BIT13
70#define MII_BMCR_SPEED_1000 BIT6
72
77#define MII_BMSR_100_T4 BIT15
78#define MII_BMSR_100_TX_F BIT14
79#define MII_BMSR_100_TX_H BIT13
80#define MII_BMSR_10_F BIT12
81#define MII_BMSR_10_H BIT11
82#define MII_BMSR_100_T2_F BIT10
83#define MII_BMSR_100_T2_H BIT9
84#define MII_BMSR_ESTATUS BIT8
86#define MII_BMSR_AN_DONE BIT5
87#define MII_BMSR_FAULT BIT4
89#define MII_BMSR_HAS_AN BIT3
90#define MII_BMSR_LINK BIT2
91#define MII_BMSR_JABBER BIT1
92#define MII_BMSR_EXTENDED BIT0
94
99#define MII_ADVERTISE_100_F BIT8
100#define MII_ADVERTISE_100_H BIT7
101#define MII_ADVERTISE_10_F BIT6
102#define MII_ADVERTISE_10_H BIT5
103#define MII_ADVERTISE_100 (BIT7 | BIT8)
104#define MII_ADVERTISE_10 (BIT5 | BIT6)
106
111#define MII_LPA_100_F BIT8
112#define MII_LPA_100_H BIT7
113#define MII_LPA_10_F BIT6
114#define MII_LPA_10_H BIT5
115#define MII_LPA_100 (BIT7 | BIT8)
116#define MII_LPA_10 (BIT5 | BIT6)
118
123#define MII_LPA_HAS_AN BIT0
125
130#define MII_IRQ_LINK_UP BIT0
131#define MII_IRQ_RMT_FAULT BIT1
132#define MII_IRQ_LINK_DOWN BIT2
133#define MII_IRQ_LPA_ACK BIT3
134#define MII_IRQ_PD_FAULT BIT4
135#define MII_IRQ_PAGE_RX BIT5
136#define MII_IRQ_RX_ERROR BIT6
137#define MII_IRQ_JABBER BIT7
138#define MII_IRQ_EN_LINK_UP BIT8
139#define MII_IRQ_EN_RMT_FAULT BIT9
140#define MII_IRQ_EN_LINK_DOWN BIT10
141#define MII_IRQ_EN_LPA_ACK BIT11
142#define MII_IRQ_EN_PD_FAULT BIT12
143#define MII_IRQ_EN_PAGE_RX BIT13
144#define MII_IRQ_EN_RX_ERROR BIT14
145#define MII_IRQ_EN_JABBER BIT15
147
156static inline bool mii_can_100_mbps_full_dp(uint16_t bmsr)
157{
158 return (bmsr & (MII_BMSR_100_TX_F | MII_BMSR_100_T2_F));
159}
160
169static inline bool mii_can_100_mbps_half_dp(uint16_t bmsr)
170{
172}
173
182static inline bool mii_can_10_mbps_full_dp(uint16_t bmsr)
183{
184 return (bmsr & MII_BMSR_10_F);
185}
186
195static inline bool mii_can_10_mbps_half_dp(uint16_t bmsr)
196{
197 return (bmsr & MII_BMSR_10_H);
198}
199
200#ifdef __cplusplus
201}
202#endif
203
Helper functions for bit arithmetic.
#define MII_BMSR_10_F
PHY supports 10BASE-T, full duplex.
Definition mii.h:80
#define MII_BMSR_100_T2_H
PHY supports 100BASE-T2, half duplex.
Definition mii.h:83
static bool mii_can_10_mbps_half_dp(uint16_t bmsr)
Check if an Ethernet PHY supports 10 Mbps at half duplex.
Definition mii.h:195
#define MII_BMSR_100_TX_H
PHY supports 100BASE-TX, half duplex.
Definition mii.h:79
static bool mii_can_100_mbps_half_dp(uint16_t bmsr)
Check if an Ethernet PHY supports 100 Mbps at half duplex.
Definition mii.h:169
static bool mii_can_10_mbps_full_dp(uint16_t bmsr)
Check if an Ethernet PHY supports 10 Mbps at full duplex.
Definition mii.h:182
#define MII_BMSR_100_T4
PHY supports 100BASE-T4 (half-duplex)
Definition mii.h:77
static bool mii_can_100_mbps_full_dp(uint16_t bmsr)
Check if an Ethernet PHY supports 100 Mbps at full duplex.
Definition mii.h:156
#define MII_BMSR_100_TX_F
PHY supports 100BASE-TX, full duplex.
Definition mii.h:78
#define MII_BMSR_10_H
PHY supports 10BASE-T, half duplex.
Definition mii.h:81
#define MII_BMSR_100_T2_F
PHY supports 100BASE-T2, full duplex.
Definition mii.h:82