NetBurner 3.5.8
PDF Version
Toggle main menu visibility
ether_phy.h
1
#ifndef __ETHER_PHYS_H
2
#define __ETHER_PHYS_H
3
/*NB_REVISION*/
4
5
/*NB_COPYRIGHT*/
6
#include <predef.h>
7
#include <stdint.h>
8
#include <nettypes.h>
9
#include <ether_consts.h>
10
11
class
EthernetVars;
12
13
class
EtherPhy {
14
static
EthernetVars *allocatingStruct;
// for use by the class 'new'
15
void
*
operator
new
(
size_t
size);
16
protected
:
17
EthernetVars ð
18
uint32_t currentPage;
19
uint32_t driver_state;
// Storage for a generic phy driver state. Not necessarily used.
20
public
:
21
EtherPhy();
22
inline
uint32_t getState() {
return
driver_state; }
23
virtual
uint16_t ProcessIRQ();
24
virtual
eLinkState_t SetLinkMode(eLinkMode_t mode);
25
virtual
eLinkMode_t GetLinkMode();
26
virtual
eLinkState_t GetLink();
27
virtual
eLinkState_t GetMacLink();
// This is the link state needed for the MAC
28
// configuration. For a normal PHY, it's the same as
29
// 'GetLink', but for a smart NIC or switch
30
// it may not be.
31
virtual
void
SetMIIMode(eMIIMode_t mode);
32
virtual
void
IRQMask(uint16_t IRQMask,
bool
setNotClr);
33
virtual
void
Enable();
34
virtual
void
Disable();
35
36
virtual
void
FinalizeFrame(PoolPtr pb, int64_t egress_port_mask,
int
qos,
bool
force);
37
virtual
bool
DoRx(PoolPtr pb, uint16_t *rx_len,
int
*logical_rx_ifnum);
// rx_len and ifnum may be modified by DoRx, do not pass non-frame-specific variables
38
39
virtual
void
ShowMII();
40
41
friend
class
EthernetVars;
42
};
43
44
45
#define _PUSH_PHY_CLASS _Pragma("push_macro(\"_PHY_CLASS\")")
46
#define _POP_PHY_CLASS _Pragma("pop_macro(\"_PHY_CLASS\")")
47
48
class
Phy_KSZ8041 :
public
EtherPhy {
49
public
:
50
Phy_KSZ8041();
51
52
virtual
eLinkState_t SetLinkMode(eLinkMode_t mode)
override
;
53
virtual
eLinkMode_t GetLinkMode()
override
;
54
virtual
eLinkState_t GetLink()
override
;
55
virtual
void
Disable()
override
;
56
virtual
void
Enable()
override
;
57
};
58
#define _PHY_CLASS Phy_KSZ8041
59
60
class
Phy_KSZ8081 :
public
EtherPhy {
61
public
:
62
Phy_KSZ8081();
63
64
virtual
eLinkState_t SetLinkMode(eLinkMode_t mode)
override
;
65
virtual
eLinkMode_t GetLinkMode()
override
;
66
virtual
eLinkState_t GetLink()
override
;
67
virtual
void
SetMIIMode(eMIIMode_t mode)
override
;
68
virtual
void
Disable()
override
;
69
virtual
void
Enable()
override
;
70
};
71
_PUSH_PHY_CLASS
72
#undef _PHY_CLASS
73
#define _PHY_CLASS _POP_PHY_CLASS _PHY_CLASS, Phy_KSZ8081
74
75
class
Phy_AMD :
public
EtherPhy {
76
public
:
77
Phy_AMD();
78
virtual
eLinkState_t GetLink()
override
;
79
};
80
_PUSH_PHY_CLASS
81
#undef _PHY_CLASS
82
#define _PHY_CLASS _POP_PHY_CLASS _PHY_CLASS, Phy_AMD
83
84
class
Phy_National :
public
EtherPhy {
85
public
:
86
Phy_National();
87
virtual
eLinkState_t GetLink()
override
;
88
};
89
_PUSH_PHY_CLASS
90
#undef _PHY_CLASS
91
#define _PHY_CLASS _POP_PHY_CLASS _PHY_CLASS, Phy_National
92
93
class
Phy_DP83825I :
public
EtherPhy {
94
public
:
95
Phy_DP83825I();
96
virtual
void
ShowMII()
override
;
97
virtual
uint16_t ProcessIRQ()
override
;
98
virtual
eLinkState_t GetLink()
override
;
99
virtual
eLinkState_t SetLinkMode(eLinkMode_t mode)
override
;
100
virtual
eLinkMode_t GetLinkMode()
override
;
101
virtual
void
IRQMask(uint16_t mask,
bool
setNotClr)
override
;
102
virtual
void
Disable()
override
;
103
virtual
void
Enable()
override
;
104
};
105
_PUSH_PHY_CLASS
106
#undef _PHY_CLASS
107
#define _PHY_CLASS _POP_PHY_CLASS _PHY_CLASS, Phy_DP83825I
108
109
class
Phy_RTL8211 :
public
EtherPhy {
110
public
:
111
Phy_RTL8211();
112
virtual
uint16_t ProcessIRQ()
override
;
113
virtual
eLinkState_t GetLink()
override
;
114
virtual
eLinkState_t SetLinkMode(eLinkMode_t mode)
override
;
115
virtual
eLinkMode_t GetLinkMode()
override
;
116
virtual
void
IRQMask(uint16_t mask,
bool
setNotClr)
override
;
117
virtual
void
Disable()
override
;
118
virtual
void
Enable()
override
;
119
};
120
_PUSH_PHY_CLASS
121
#undef _PHY_CLASS
122
#define _PHY_CLASS _POP_PHY_CLASS _PHY_CLASS, Phy_RTL8211
123
124
#include <ether_phy_ksz9893.h>
125
126
#include <algorithm>
127
template
<
typename
... Ts>
128
struct
_max_sizeof : std::integral_constant<std::size_t, std::max({sizeof(Ts)...})> {};
129
130
131
static
constexpr
size_t
ETHER_PHY_MAX_SIZE =
132
_max_sizeof<_PHY_CLASS>();
133
134
#endif
/* ----- #ifndef __ETHER_PHYS_H ----- */
arch
cortex-m7
cpu
MIMXRT11xx
include
ether_phy.h
Generated by
1.18.0