hc
2024-08-12 233ab1bd4c5697f5cdec94e60206e8c6ac609b4c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
/** @file
 
  Copyright (c) 2011 - 2019, Intel Corporaton. All rights reserved.
 
  SPDX-License-Identifier: BSD-2-Clause-Patent
 
  The original software modules are licensed as follows:
 
  Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.
  Copyright (c) 2011 - 2014, ARM Limited. All rights reserved.
 
  SPDX-License-Identifier: BSD-2-Clause-Patent
 
**/
 
 
#ifndef EMAC_DXE_UTIL_H__
#define EMAC_DXE_UTIL_H__
 
#include <Protocol/SimpleNetwork.h>
 
// Most common CRC32 Polynomial for little endian machines
#define CRC_POLYNOMIAL                                            0xEDB88320
#define HASH_TABLE_REG(n)                                         0x500 + (0x4 * n)
#define RX_MAX_PACKET                                             1600
 
#define CONFIG_ETH_BUFSIZE                                         2048
#define CONFIG_TX_DESCR_NUM                                        10
#define CONFIG_RX_DESCR_NUM                                        10
#define TX_TOTAL_BUFSIZE                                           (CONFIG_ETH_BUFSIZE * CONFIG_TX_DESCR_NUM)
#define RX_TOTAL_BUFSIZE                                           (CONFIG_ETH_BUFSIZE * CONFIG_RX_DESCR_NUM)
 
// DMA status error bit
#define RX_DMA_WRITE_DATA_TRANSFER_ERROR                           0x0
#define TX_DMA_READ_DATA_TRANSFER_ERROR                            0x3
#define RX_DMA_DESCRIPTOR_WRITE_ACCESS_ERROR                       0x4
#define TX_DMA_DESCRIPTOR_WRITE_ACCESS_ERROR                       0x5
#define RX_DMA_DESCRIPTOR_READ_ACCESS_ERROR                        0x6
#define TX_DMA_DESCRIPTOR_READ_ACCESS_ERROR                        0x7
 
// tx descriptor
#define TDES0_OWN                                                  BIT31
#define TDES0_TXINT                                                BIT30
#define TDES0_TXLAST                                               BIT29
#define TDES0_TXFIRST                                              BIT28
#define TDES0_TXCRCDIS                                             BIT27
#define TDES0_TXRINGEND                                            BIT21
#define TDES0_TXCHAIN                                              BIT20
 
#define TDES1_SIZE1MASK                                            (0x1FFF << 0)
#define TDES1_SIZE1SHFT                                            (0)
#define TDES1_SIZE2MASK                                            (0x1FFF << 16)
#define TDES1_SIZE2SHFT                                            (16)
 
// rx descriptor
#define RDES0_FL_MASK                                               0x3fff
#define RDES0_FL_SHIFT                                              16
#define RDES1_CHAINED                                               BIT14
 
#define RDES0_CE                                                    BIT1
#define RDES0_DBE                                                   BIT2
#define RDES0_RE                                                    BIT3
#define RDES0_RWT                                                   BIT4
#define RDES0_LC                                                    BIT6
#define RDES0_GF                                                    BIT7
#define RDES0_OE                                                    BIT11
#define RDES0_LE                                                    BIT12
#define RDES0_SAF                                                   BIT13
#define RDES0_DE                                                    BIT14
#define RDES0_ES                                                    BIT15
#define RDES0_AFM                                                   BIT30
#define RDES0_OWN                                                   BIT31
 
 
// emac config phy interface setting
#define PHY_INTERFACE_MODE_GMII                                     0
#define PHY_INTERFACE_MODE_MII                                      1
#define PHY_INTERFACE_MODE_RGMII                                    2
#define PHY_INTERFACE_MODE_RMII                                     3
 
// DW emac mask
#define DW_EMAC_DMAGRP_BUS_MODE_SWR_SET_MSK                         0x00000001
#define DW_EMAC_DMAGRP_BUS_MODE_FB_SET_MSK                          0x00010000
#define DW_EMAC_DMAGRP_BUS_MODE_PBL_SET_MSK                         0x00003f00
#define DW_EMAC_DMAGRP_BUS_MODE_PR_SET_MSK                          0x0000c000
#define DW_EMAC_DMAGRP_OPERATION_MODE_FTF_SET_MSK                   0x00100000
#define DW_EMAC_DMAGRP_OPERATION_MODE_TSF_SET_MSK                   0x00200000
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_TIE_SET_MSK                 0x00000001
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_RIE_SET_MSK                 0x00000040
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_NIE_SET_MSK                 0x00010000
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_AIE_SET_MSK                 0x00008000
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_FBE_SET_MSK                 0x00002000
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_UNE_SET_MSK                 0x00000020
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_TSE_SET_MSK                 0x00000002
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_TUE_SET_MSK                 0x00000004
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_TJE_SET_MSK                 0x00000008
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_OVE_SET_MSK                 0x00000010
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_RUE_SET_MSK                 0x00000080
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_RSE_SET_MSK                 0x00000100
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_RWE_SET_MSK                 0x00000200
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_ETE_SET_MSK                 0x00000400
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_ERE_SET_MSK                 0x00004000
#define DW_EMAC_DMAGRP_OPERATION_MODE_ST_SET_MSK                    0x00002000
#define DW_EMAC_DMAGRP_OPERATION_MODE_SR_SET_MSK                    0x00000002
#define DW_EMAC_GMACGRP_MAC_CONFIGURATION_RE_SET_MSK                0x00000004
#define DW_EMAC_GMACGRP_MAC_CONFIGURATION_TE_SET_MSK                0x00000008
#define DW_EMAC_GMACGRP_MAC_FRAME_FILTER_RESET                      0x00000000
#define DW_EMAC_GMACGRP_MAC_FRAME_FILTER_HMC_SET_MSK                0x00000004
#define DW_EMAC_GMACGRP_MAC_FRAME_FILTER_DBF_SET_MSK                0x00000020
#define DW_EMAC_GMACGRP_MAC_FRAME_FILTER_PR_SET_MSK                 0x00000001
#define DW_EMAC_GMACGRP_MAC_FRAME_FILTER_PM_SET_MSK                 0x00000010
#define DW_EMAC_DMAGRP_OPERATION_MODE_ST_CLR_MSK                    0xffffdfff
#define DW_EMAC_GMACGRP_MAC_CONFIGURATION_RE_CLR_MSK                0xfffffffb
#define DW_EMAC_GMACGRP_MAC_CONFIGURATION_TE_CLR_MSK                0xfffffff7
#define DW_EMAC_DMAGRP_OPERATION_MODE_SR_CLR_MSK                    0xfffffffd
#define DW_EMAC_DMAGRP_STATUS_NIS_SET_MSK                           0x00010000
#define DW_EMAC_DMAGRP_STATUS_RI_SET_MSK                            0x00000040
#define DW_EMAC_DMAGRP_STATUS_TI_SET_MSK                            0x00000001
#define DW_EMAC_DMAGRP_STATUS_TU_SET_MSK                            0x00000004
#define DW_EMAC_DMAGRP_STATUS_ERI_SET_MSK                           0x00004000
#define DW_EMAC_DMAGRP_STATUS_AIS_SET_MSK                           0x00008000
#define DW_EMAC_DMAGRP_STATUS_TPS_SET_MSK                           0x00000002
#define DW_EMAC_DMAGRP_STATUS_TJT_SET_MSK                           0x00000008
#define DW_EMAC_DMAGRP_STATUS_OVF_SET_MSK                           0x00000010
#define DW_EMAC_DMAGRP_STATUS_UNF_SET_MSK                           0x00000020
#define DW_EMAC_DMAGRP_STATUS_RU_SET_MSK                            0x00000080
#define DW_EMAC_DMAGRP_STATUS_RPS_SET_MSK                           0x00000100
#define DW_EMAC_DMAGRP_STATUS_RWT_SET_MSK                           0x00000200
#define DW_EMAC_DMAGRP_STATUS_ETI_SET_MSK                           0x00000400
#define DW_EMAC_DMAGRP_STATUS_FBI_SET_MSK                           0x00002000
#define DW_EMAC_GMACGRP_MAC_CONFIGURATION_PS_SET_MSK                0x00008000
#define DW_EMAC_GMACGRP_MAC_CONFIGURATION_FES_SET_MSK               0x00004000
#define DW_EMAC_GMACGRP_MAC_CONFIGURATION_DM_SET_MSK                0x00000800
#define DW_EMAC_GMACGRP_MAC_CONFIGURATION_BE_SET_MSK                0x00200000
#define DW_EMAC_GMACGRP_MAC_CONFIGURATION_DO_SET_MSK                0x00002000
 
#define DW_EMAC_DMAGRP_BUS_MODE_SWR_GET(value)                      (((value) & 0x00000001) >> 0)
#define DW_EMAC_DMAGRP_STATUS_EB_GET(value)                         (((value) & 0x03800000) >> 23)
#define DW_EMAC_GMACGRP_GMII_ADDRESS_GB_GET(value)                  (((value) & 0x00000001) >> 0)
#define DW_EMAC_GMACGRP_GMII_DATA_GD_GET(value)                     (((value) & 0x0000ffff) >> 0)
#define DW_EMAC_DMAGRP_OPERATION_MODE_FTF_GET(value)                (((value) & 0x00100000) >> 20)
 
// DW emac registers offset
 
#define DW_EMAC_GMACGRP_MAC_CONFIGURATION_OFST                       0x000
#define DW_EMAC_GMACGRP_MAC_FRAME_FILTER_OFST                        0x004
#define DW_EMAC_GMACGRP_GMII_ADDRESS_OFST                            0x010
#define DW_EMAC_GMACGRP_GMII_DATA_OFST                               0x014
#define DW_EMAC_GMACGRP_FLOW_CONTROL_OFST                            0x018
#define DW_EMAC_GMACGRP_VLAN_TAG_OFST                                0x01c
#define DW_EMAC_GMACGRP_VERSION_OFST                                 0x020
#define DW_EMAC_GMACGRP_DEBUG_OFST                                   0x024
#define DW_EMAC_GMACGRP_LPI_CONTROL_STATUS_OFST                      0x030
#define DW_EMAC_GMACGRP_LPI_TIMERS_CONTROL_OFST                      0x034
#define DW_EMAC_GMACGRP_INTERRUPT_STATUS_OFST                        0x038
#define DW_EMAC_GMACGRP_INTERRUPT_MASK_OFST                          0x03c
#define DW_EMAC_GMACGRP_MAC_ADDRESS0_HIGH_OFST                       0x040
#define DW_EMAC_GMACGRP_MAC_ADDRESS0_LOW_OFST                        0x044
#define DW_EMAC_GMACGRP_MAC_ADDRESS1_HIGH_OFST                       0x048
#define DW_EMAC_GMACGRP_MAC_ADDRESS1_LOW_OFST                        0x04c
#define DW_EMAC_GMACGRP_MAC_ADDRESS2_HIGH_OFST                       0x050
#define DW_EMAC_GMACGRP_MAC_ADDRESS2_LOW_OFST                        0x054
#define DW_EMAC_GMACGRP_MAC_ADDRESS3_HIGH_OFST                       0x058
#define DW_EMAC_GMACGRP_MAC_ADDRESS3_LOW_OFST                        0x05c
#define DW_EMAC_GMACGRP_MAC_ADDRESS4_HIGH_OFST                       0x060
#define DW_EMAC_GMACGRP_MAC_ADDRESS4_LOW_OFST                        0x064
#define DW_EMAC_GMACGRP_MAC_ADDRESS5_HIGH_OFST                       0x068
#define DW_EMAC_GMACGRP_MAC_ADDRESS5_LOW_OFST                        0x06c
#define DW_EMAC_GMACGRP_MAC_ADDRESS6_HIGH_OFST                       0x070
#define DW_EMAC_GMACGRP_MAC_ADDRESS6_LOW_OFST                        0x074
#define DW_EMAC_GMACGRP_MAC_ADDRESS7_HIGH_OFST                       0x078
#define DW_EMAC_GMACGRP_MAC_ADDRESS7_LOW_OFST                        0x07c
#define DW_EMAC_GMACGRP_MAC_ADDRESS8_HIGH_OFST                       0x080
#define DW_EMAC_GMACGRP_MAC_ADDRESS8_LOW_OFST                        0x084
#define DW_EMAC_GMACGRP_MAC_ADDRESS9_HIGH_OFST                       0x088
#define DW_EMAC_GMACGRP_MAC_ADDRESS9_LOW_OFST                        0x08c
#define DW_EMAC_GMACGRP_MAC_ADDRESS10_HIGH_OFST                      0x090
#define DW_EMAC_GMACGRP_MAC_ADDRESS10_LOW_OFST                       0x094
#define DW_EMAC_GMACGRP_MAC_ADDRESS11_HIGH_OFST                      0x098
#define DW_EMAC_GMACGRP_MAC_ADDRESS11_LOW_OFST                       0x09c
#define DW_EMAC_GMACGRP_MAC_ADDRESS12_HIGH_OFST                      0x0a0
#define DW_EMAC_GMACGRP_MAC_ADDRESS12_LOW_OFST                       0x0a4
#define DW_EMAC_GMACGRP_MAC_ADDRESS13_HIGH_OFST                      0x0a8
#define DW_EMAC_GMACGRP_MAC_ADDRESS13_LOW_OFST                       0x0ac
#define DW_EMAC_GMACGRP_MAC_ADDRESS14_HIGH_OFST                      0x0b0
#define DW_EMAC_GMACGRP_MAC_ADDRESS14_LOW_OFST                       0x0b4
#define DW_EMAC_GMACGRP_MAC_ADDRESS15_HIGH_OFST                      0x0b8
#define DW_EMAC_GMACGRP_MAC_ADDRESS15_LOW_OFST                       0x0bc
#define DW_EMAC_GMACGRP_SGMII_RGMII_SMII_CONTROL_STATUS_OFST         0x0d8
#define DW_EMAC_GMACGRP_WDOG_TIMEOUT_OFST                            0x0dc
#define DW_EMAC_GMACGRP_GENPIO_OFST                                  0x0e0
#define DW_EMAC_GMACGRP_MMC_CONTROL_OFST                             0x100
#define DW_EMAC_GMACGRP_MMC_RECEIVE_INTERRUPT_OFST                   0x104
#define DW_EMAC_GMACGRP_MMC_TRANSMIT_INTERRUPT_OFST                  0x108
#define DW_EMAC_GMACGRP_MMC_RECEIVE_INTERRUPT_MASK_OFST              0x10c
#define DW_EMAC_GMACGRP_MMC_TRANSMIT_INTERRUPT_MASK_OFST             0x110
#define DW_EMAC_GMACGRP_TXOCTETCOUNT_GB_OFST                         0x114
#define DW_EMAC_GMACGRP_TXFRAMECOUNT_GB_OFST                         0x118
#define DW_EMAC_GMACGRP_TXBROADCASTFRAMES_G_OFST                     0x11c
#define DW_EMAC_GMACGRP_TXMULTICASTFRAMES_G_OFST                     0x120
#define DW_EMAC_GMACGRP_TXUNICASTFRAMES_GB_OFST                      0x13c
#define DW_EMAC_GMACGRP_TXLATECOL_OFST                               0x158
#define DW_EMAC_GMACGRP_TXEXESSCOL_OFST                              0x15c
#define DW_EMAC_GMACGRP_TXFRAMECOUNT_G_OFST                          0x168
#define DW_EMAC_GMACGRP_TXOVERSIZE_G_OFST                            0x178
#define DW_EMAC_GMACGRP_RXFRAMECOUNT_GB_OFST                         0x180
#define DW_EMAC_GMACGRP_RXOCTETCOUNT_GB_OFST                         0x184
#define DW_EMAC_GMACGRP_RXBROADCASTFRAMES_G_OFST                     0x18c
#define DW_EMAC_GMACGRP_RXMULTICASTFRAMES_G_OFST                     0x190
#define DW_EMAC_GMACGRP_RXCRCERROR_OFST                              0x194
#define DW_EMAC_GMACGRP_RXUNDERSIZE_G_OFST                           0x1a4
#define DW_EMAC_GMACGRP_RXOVERSIZE_G_OFST                            0x1a8
#define DW_EMAC_GMACGRP_RXUNICASTFRAMES_G_OFST                       0x1c4
#define DW_EMAC_DMAGRP_BUS_MODE_OFST                                 0x1000
#define DW_EMAC_DMAGRP_TRANSMIT_POLL_DEMAND_OFST                     0x1004
#define DW_EMAC_DMAGRP_RECEIVE_POLL_DEMAND_OFST                      0x1008
#define DW_EMAC_DMAGRP_RECEIVE_DESCRIPTOR_LIST_ADDRESS_OFST          0x100c
#define DW_EMAC_DMAGRP_TRANSMIT_DESCRIPTOR_LIST_ADDRESS_OFST         0x1010
#define DW_EMAC_DMAGRP_STATUS_OFST                                   0x1014
#define DW_EMAC_DMAGRP_OPERATION_MODE_OFST                           0x1018
#define DW_EMAC_DMAGRP_INTERRUPT_ENABLE_OFST                         0x101c
#define DW_EMAC_DMAGRP_MISSED_FRAME_AND_BUFFER_OVERFLOW_COUNTER_OFST 0x1020
#define DW_EMAC_DMAGRP_RECEIVE_INTERRUPT_WATCHDOG_TIMER_OFST         0x1024
#define DW_EMAC_DMAGRP_AXI_BUS_MODE_OFST                             0x1028
#define DW_EMAC_DMAGRP_AHB_OR_AXI_STATUS_OFST                        0x102c
#define DW_EMAC_DMAGRP_CURRENT_HOST_TRANSMIT_DESCRIPTOR_OFST         0x1048
#define DW_EMAC_DMAGRP_CURRENT_HOST_RECEIVE_DESCRIPTOR_OFST          0x104c
#define DW_EMAC_DMAGRP_CURRENT_HOST_TRANSMIT_BUFFER_ADDRESS_OFST     0x1050
#define DW_EMAC_DMAGRP_CURRENT_HOST_RECEIVE_BUFFER_ADDRESS_OFST      0x1054
#define DW_EMAC_DMAGRP_HW_FEATURE_OFST                               0x1058
 
typedef struct {
  UINT32 Tdes0;
  UINT32 Tdes1;
  UINT32 Addr;
  UINT32 AddrNext;
} DESIGNWARE_HW_DESCRIPTOR;
 
typedef struct {
  EFI_PHYSICAL_ADDRESS        AddrMap;
  void                        *Mapping;
} MAP_INFO;
 
typedef struct {
  DESIGNWARE_HW_DESCRIPTOR    *TxdescRing[CONFIG_TX_DESCR_NUM];
  DESIGNWARE_HW_DESCRIPTOR    *RxdescRing[CONFIG_RX_DESCR_NUM];
  CHAR8                       TxBuffer[TX_TOTAL_BUFSIZE];
  CHAR8                       RxBuffer[RX_TOTAL_BUFSIZE];
  MAP_INFO                    TxdescRingMap[CONFIG_TX_DESCR_NUM ];
  MAP_INFO                    RxdescRingMap[CONFIG_RX_DESCR_NUM ];
  MAP_INFO                    RxBufNum[CONFIG_TX_DESCR_NUM];
  UINT32                      TxCurrentDescriptorNum;
  UINT32                      TxNextDescriptorNum;
  UINT32                      RxCurrentDescriptorNum;
  UINT32                      RxNextDescriptorNum;
} EMAC_DRIVER;
 
VOID
EFIAPI
EmacSetMacAddress (
  IN  EFI_MAC_ADDRESS         *MacAddress,
  IN  UINTN                   MacBaseAddress
  );
 
VOID
EFIAPI
EmacReadMacAddress (
  OUT EFI_MAC_ADDRESS         *MacAddress,
  IN  UINTN                   MacBaseAddress
  );
 
EFI_STATUS
EFIAPI
EmacDxeInitialization (
  IN  EMAC_DRIVER             *EmacDriver,
  IN  UINTN                   MacBaseAddress
  );
 
EFI_STATUS
EFIAPI
EmacDmaInit (
  IN  EMAC_DRIVER             *EmacDriver,
  IN  UINTN                   MacBaseAddress
  );
 
EFI_STATUS
EFIAPI
EmacSetupTxdesc (
  IN  EMAC_DRIVER             *EmacDriver,
  IN  UINTN                   MacBaseAddress
 );
 
EFI_STATUS
EFIAPI
EmacSetupRxdesc (
  IN  EMAC_DRIVER             *EmacDriver,
  IN  UINTN                   MacBaseAddress
  );
 
VOID
EFIAPI
EmacStartTransmission (
  IN  UINTN                   MacBaseAddress
  );
 
EFI_STATUS
EFIAPI
EmacRxFilters (
  IN  UINT32                  ReceiveFilterSetting,
  IN  BOOLEAN                 Reset,
  IN  UINTN                   NumMfilter             OPTIONAL,
  IN  EFI_MAC_ADDRESS         *Mfilter               OPTIONAL,
  IN  UINTN                   MacBaseAddress
  );
 
UINT32
EFIAPI
GenEtherCrc32 (
  IN  EFI_MAC_ADDRESS         *Mac,
  IN  UINT32 AddrLen
  );
 
UINT8
EFIAPI
BitReverse (
  UINT8                       Value
  );
 
VOID
EFIAPI
EmacStopTxRx (
  IN  UINTN                   MacBaseAddress
  );
 
EFI_STATUS
EFIAPI
EmacDmaStart (
  IN  UINTN                   MacBaseAddress
  );
 
 
VOID
EFIAPI
EmacGetDmaStatus (
  OUT UINT32                  *IrqStat  OPTIONAL,
  IN  UINTN                   MacBaseAddress
  );
 
VOID
EFIAPI
EmacGetStatistic (
  IN  EFI_NETWORK_STATISTICS *Stats,
  IN  UINTN                  MacBaseAddress
  );
 
VOID
EFIAPI
EmacConfigAdjust (
  IN  UINT32                 Speed,
  IN  UINT32                 Duplex,
  IN  UINTN                  MacBaseAddress
  );
 
#endif // EMAC_DXE_UTIL_H__