]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/contrib/ncsw/Peripherals/FM/MAC/fm_mac.c
dts: Import DTS from Linux 5.6
[FreeBSD/FreeBSD.git] / sys / contrib / ncsw / Peripherals / FM / MAC / fm_mac.c
1 /*
2  * Copyright 2008-2012 Freescale Semiconductor Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *     * Redistributions of source code must retain the above copyright
7  *       notice, this list of conditions and the following disclaimer.
8  *     * Redistributions in binary form must reproduce the above copyright
9  *       notice, this list of conditions and the following disclaimer in the
10  *       documentation and/or other materials provided with the distribution.
11  *     * Neither the name of Freescale Semiconductor nor the
12  *       names of its contributors may be used to endorse or promote products
13  *       derived from this software without specific prior written permission.
14  *
15  *
16  * ALTERNATIVELY, this software may be distributed under the terms of the
17  * GNU General Public License ("GPL") as published by the Free Software
18  * Foundation, either version 2 of that License or (at your option) any
19  * later version.
20  *
21  * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
22  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24  * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
25  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32
33
34 /******************************************************************************
35  @File          fm_mac.c
36
37  @Description   FM MAC ...
38 *//***************************************************************************/
39 #include "std_ext.h"
40 #include "string_ext.h"
41 #include "sprint_ext.h"
42 #include "error_ext.h"
43 #include "fm_ext.h"
44
45 #include "fm_common.h"
46 #include "fm_mac.h"
47
48
49 /* ......................................................................... */
50
51 t_Handle FM_MAC_Config (t_FmMacParams *p_FmMacParam)
52 {
53     t_FmMacControllerDriver *p_FmMacControllerDriver;
54     uint16_t                fmClkFreq;
55
56     SANITY_CHECK_RETURN_VALUE(p_FmMacParam, E_INVALID_HANDLE, NULL);
57
58     fmClkFreq = FmGetClockFreq(p_FmMacParam->h_Fm);
59     if (fmClkFreq == 0)
60     {
61         REPORT_ERROR(MAJOR, E_INVALID_STATE, ("Can't get clock for MAC!"));
62         return NULL;
63     }
64
65 #if (DPAA_VERSION == 10)
66     if (ENET_SPEED_FROM_MODE(p_FmMacParam->enetMode) < e_ENET_SPEED_10000)
67         p_FmMacControllerDriver = (t_FmMacControllerDriver *)DTSEC_Config(p_FmMacParam);
68     else
69 #if FM_MAX_NUM_OF_10G_MACS > 0
70         p_FmMacControllerDriver = (t_FmMacControllerDriver *)TGEC_Config(p_FmMacParam);
71 #else
72         p_FmMacControllerDriver = NULL;
73 #endif /* FM_MAX_NUM_OF_10G_MACS > 0 */
74 #else
75     p_FmMacControllerDriver = (t_FmMacControllerDriver *)MEMAC_Config(p_FmMacParam);
76 #endif /* (DPAA_VERSION == 10) */
77
78     if (!p_FmMacControllerDriver)
79         return NULL;
80
81     p_FmMacControllerDriver->h_Fm           = p_FmMacParam->h_Fm;
82     p_FmMacControllerDriver->enetMode       = p_FmMacParam->enetMode;
83     p_FmMacControllerDriver->macId          = p_FmMacParam->macId;
84     p_FmMacControllerDriver->resetOnInit    = DEFAULT_resetOnInit;
85
86     p_FmMacControllerDriver->clkFreq        = fmClkFreq;
87
88     return (t_Handle)p_FmMacControllerDriver;
89 }
90
91 /* ......................................................................... */
92
93 t_Error FM_MAC_Init (t_Handle h_FmMac)
94 {
95     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
96
97     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
98
99     if (p_FmMacControllerDriver->resetOnInit &&
100         !p_FmMacControllerDriver->f_FM_MAC_ConfigResetOnInit &&
101         (FmResetMac(p_FmMacControllerDriver->h_Fm,
102                     ((ENET_INTERFACE_FROM_MODE(p_FmMacControllerDriver->enetMode) == e_ENET_IF_XGMII) ?
103                         e_FM_MAC_10G : e_FM_MAC_1G),
104                     p_FmMacControllerDriver->macId) != E_OK))
105         RETURN_ERROR(MAJOR, E_INVALID_STATE, ("Can't reset MAC!"));
106
107     if (p_FmMacControllerDriver->f_FM_MAC_Init)
108         return p_FmMacControllerDriver->f_FM_MAC_Init(h_FmMac);
109     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
110 }
111
112 /* ......................................................................... */
113
114 t_Error FM_MAC_Free (t_Handle h_FmMac)
115 {
116     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
117
118     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
119
120     if (p_FmMacControllerDriver->f_FM_MAC_Free)
121         return p_FmMacControllerDriver->f_FM_MAC_Free(h_FmMac);
122
123     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
124 }
125
126 /* ......................................................................... */
127
128 t_Error FM_MAC_ConfigResetOnInit (t_Handle h_FmMac, bool enable)
129 {
130     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
131
132     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
133
134     if (p_FmMacControllerDriver->f_FM_MAC_ConfigResetOnInit)
135         return p_FmMacControllerDriver->f_FM_MAC_ConfigResetOnInit(h_FmMac, enable);
136
137     p_FmMacControllerDriver->resetOnInit = enable;
138
139     return E_OK;
140 }
141
142 /* ......................................................................... */
143
144 t_Error FM_MAC_ConfigLoopback (t_Handle h_FmMac, bool newVal)
145 {
146     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
147
148     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
149
150     if (p_FmMacControllerDriver->f_FM_MAC_ConfigLoopback)
151         return p_FmMacControllerDriver->f_FM_MAC_ConfigLoopback(h_FmMac, newVal);
152
153     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
154 }
155
156 /* ......................................................................... */
157
158 t_Error FM_MAC_ConfigMaxFrameLength (t_Handle h_FmMac, uint16_t newVal)
159 {
160     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
161
162     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
163
164     if (p_FmMacControllerDriver->f_FM_MAC_ConfigMaxFrameLength)
165         return p_FmMacControllerDriver->f_FM_MAC_ConfigMaxFrameLength(h_FmMac, newVal);
166     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
167 }
168
169 /* ......................................................................... */
170
171 t_Error FM_MAC_ConfigWan (t_Handle h_FmMac, bool flag)
172 {
173    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
174
175     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
176
177     if (p_FmMacControllerDriver->f_FM_MAC_ConfigWan)
178         return p_FmMacControllerDriver->f_FM_MAC_ConfigWan(h_FmMac, flag);
179
180     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
181 }
182
183 /* ......................................................................... */
184
185 t_Error FM_MAC_ConfigPadAndCrc (t_Handle h_FmMac, bool newVal)
186 {
187     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
188
189     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
190
191     if (p_FmMacControllerDriver->f_FM_MAC_ConfigPadAndCrc)
192         return p_FmMacControllerDriver->f_FM_MAC_ConfigPadAndCrc(h_FmMac, newVal);
193
194     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
195 }
196
197 /* ......................................................................... */
198
199 t_Error FM_MAC_ConfigHalfDuplex (t_Handle h_FmMac, bool newVal)
200 {
201     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
202
203     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
204
205     if (p_FmMacControllerDriver->f_FM_MAC_ConfigHalfDuplex)
206         return p_FmMacControllerDriver->f_FM_MAC_ConfigHalfDuplex(h_FmMac,newVal);
207
208     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
209 }
210
211 /* ......................................................................... */
212
213 t_Error FM_MAC_ConfigTbiPhyAddr (t_Handle h_FmMac, uint8_t newVal)
214 {
215     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
216
217     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
218
219     if (p_FmMacControllerDriver->f_FM_MAC_ConfigTbiPhyAddr)
220         return p_FmMacControllerDriver->f_FM_MAC_ConfigTbiPhyAddr(h_FmMac,newVal);
221
222     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
223 }
224
225 /* ......................................................................... */
226
227 t_Error FM_MAC_ConfigLengthCheck (t_Handle h_FmMac, bool newVal)
228 {
229     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
230
231     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
232
233     if (p_FmMacControllerDriver->f_FM_MAC_ConfigLengthCheck)
234         return p_FmMacControllerDriver->f_FM_MAC_ConfigLengthCheck(h_FmMac,newVal);
235
236     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
237 }
238
239 /* ......................................................................... */
240
241 t_Error FM_MAC_ConfigException (t_Handle h_FmMac, e_FmMacExceptions ex, bool enable)
242 {
243     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
244
245     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
246
247     if (p_FmMacControllerDriver->f_FM_MAC_ConfigException)
248         return p_FmMacControllerDriver->f_FM_MAC_ConfigException(h_FmMac, ex, enable);
249
250     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
251 }
252
253 #ifdef FM_TX_ECC_FRMS_ERRATA_10GMAC_A004
254 /* ......................................................................... */
255
256 t_Error FM_MAC_ConfigSkipFman11Workaround (t_Handle h_FmMac)
257 {
258     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
259
260     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
261
262     if (p_FmMacControllerDriver->f_FM_MAC_ConfigSkipFman11Workaround)
263         return p_FmMacControllerDriver->f_FM_MAC_ConfigSkipFman11Workaround(h_FmMac);
264
265     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
266 }
267 #endif /* FM_TX_ECC_FRMS_ERRATA_10GMAC_A004 */
268
269
270 /*****************************************************************************/
271 /* Run Time Control                                                          */
272 /*****************************************************************************/
273
274 /* ......................................................................... */
275
276 t_Error FM_MAC_Enable  (t_Handle h_FmMac,  e_CommMode mode)
277 {
278     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
279
280     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
281
282     if (p_FmMacControllerDriver->f_FM_MAC_Enable)
283         return p_FmMacControllerDriver->f_FM_MAC_Enable(h_FmMac, mode);
284
285     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
286 }
287
288 /* ......................................................................... */
289
290 t_Error FM_MAC_Disable (t_Handle h_FmMac, e_CommMode mode)
291 {
292     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
293
294     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
295
296     if (p_FmMacControllerDriver->f_FM_MAC_Disable)
297         return p_FmMacControllerDriver->f_FM_MAC_Disable(h_FmMac, mode);
298
299     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
300 }
301
302 t_Error FM_MAC_Resume (t_Handle h_FmMac)
303 {
304     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
305
306     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
307
308     if (p_FmMacControllerDriver->f_FM_MAC_Resume)
309         return p_FmMacControllerDriver->f_FM_MAC_Resume(h_FmMac);
310
311     return E_OK;
312 }
313
314 /* ......................................................................... */
315
316 t_Error FM_MAC_Enable1588TimeStamp (t_Handle h_FmMac)
317 {
318     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
319
320     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
321
322     if (p_FmMacControllerDriver->f_FM_MAC_Enable1588TimeStamp)
323         return p_FmMacControllerDriver->f_FM_MAC_Enable1588TimeStamp(h_FmMac);
324
325     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
326 }
327
328 /* ......................................................................... */
329
330 t_Error FM_MAC_Disable1588TimeStamp (t_Handle h_FmMac)
331 {
332     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
333
334     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
335
336     if (p_FmMacControllerDriver->f_FM_MAC_Disable1588TimeStamp)
337         return p_FmMacControllerDriver->f_FM_MAC_Disable1588TimeStamp(h_FmMac);
338
339     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
340 }
341
342 /* ......................................................................... */
343
344 t_Error FM_MAC_SetTxAutoPauseFrames(t_Handle h_FmMac,
345                                     uint16_t pauseTime)
346 {
347     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
348
349     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
350
351     if (p_FmMacControllerDriver->f_FM_MAC_SetTxAutoPauseFrames)
352         return p_FmMacControllerDriver->f_FM_MAC_SetTxAutoPauseFrames(h_FmMac,
353                                                                       pauseTime);
354
355     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
356 }
357
358 /* ......................................................................... */
359
360 t_Error FM_MAC_SetTxPauseFrames(t_Handle h_FmMac,
361                                 uint8_t  priority,
362                                 uint16_t pauseTime,
363                                 uint16_t threshTime)
364 {
365     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
366
367     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
368
369     if (p_FmMacControllerDriver->f_FM_MAC_SetTxPauseFrames)
370         return p_FmMacControllerDriver->f_FM_MAC_SetTxPauseFrames(h_FmMac,
371                                                                   priority,
372                                                                   pauseTime,
373                                                                   threshTime);
374
375     RETURN_ERROR(MAJOR, E_NOT_SUPPORTED, NO_MSG);
376 }
377
378 /* ......................................................................... */
379
380 t_Error FM_MAC_SetRxIgnorePauseFrames (t_Handle h_FmMac, bool en)
381 {
382     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
383
384     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
385
386     if (p_FmMacControllerDriver->f_FM_MAC_SetRxIgnorePauseFrames)
387         return p_FmMacControllerDriver->f_FM_MAC_SetRxIgnorePauseFrames(h_FmMac, en);
388
389     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
390 }
391
392 /* ......................................................................... */
393
394 t_Error FM_MAC_SetWakeOnLan (t_Handle h_FmMac, bool en)
395 {
396     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
397
398     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
399
400     if (p_FmMacControllerDriver->f_FM_MAC_SetWakeOnLan)
401         return p_FmMacControllerDriver->f_FM_MAC_SetWakeOnLan(h_FmMac, en);
402
403     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
404 }
405
406 /* ......................................................................... */
407
408 t_Error FM_MAC_ResetCounters (t_Handle h_FmMac)
409 {
410     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
411
412     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
413
414     if (p_FmMacControllerDriver->f_FM_MAC_ResetCounters)
415         return p_FmMacControllerDriver->f_FM_MAC_ResetCounters(h_FmMac);
416
417     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
418 }
419
420 /* ......................................................................... */
421
422 t_Error FM_MAC_SetException(t_Handle h_FmMac, e_FmMacExceptions ex, bool enable)
423 {
424    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
425
426     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
427
428     if (p_FmMacControllerDriver->f_FM_MAC_SetException)
429         return p_FmMacControllerDriver->f_FM_MAC_SetException(h_FmMac, ex, enable);
430
431     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
432 }
433
434 /* ......................................................................... */
435
436 t_Error FM_MAC_SetStatistics (t_Handle h_FmMac, e_FmMacStatisticsLevel statisticsLevel)
437 {
438     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
439
440     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
441
442     if (p_FmMacControllerDriver->f_FM_MAC_SetStatistics)
443         return p_FmMacControllerDriver->f_FM_MAC_SetStatistics(h_FmMac, statisticsLevel);
444
445     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
446 }
447
448 /* ......................................................................... */
449
450 t_Error FM_MAC_GetStatistics (t_Handle h_FmMac, t_FmMacStatistics *p_Statistics)
451 {
452     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
453
454     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
455
456     if (p_FmMacControllerDriver->f_FM_MAC_GetStatistics)
457         return p_FmMacControllerDriver->f_FM_MAC_GetStatistics(h_FmMac, p_Statistics);
458
459     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
460 }
461
462 /* ......................................................................... */
463
464 t_Error FM_MAC_ModifyMacAddr (t_Handle h_FmMac, t_EnetAddr *p_EnetAddr)
465 {
466     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
467
468     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
469
470     if (p_FmMacControllerDriver->f_FM_MAC_ModifyMacAddr)
471         return p_FmMacControllerDriver->f_FM_MAC_ModifyMacAddr(h_FmMac, p_EnetAddr);
472
473     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
474 }
475
476 /* ......................................................................... */
477
478 t_Error FM_MAC_AddHashMacAddr (t_Handle h_FmMac, t_EnetAddr *p_EnetAddr)
479 {
480     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
481
482     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
483
484     if (p_FmMacControllerDriver->f_FM_MAC_AddHashMacAddr)
485         return p_FmMacControllerDriver->f_FM_MAC_AddHashMacAddr(h_FmMac, p_EnetAddr);
486
487     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
488 }
489
490 /* ......................................................................... */
491
492 t_Error FM_MAC_RemoveHashMacAddr (t_Handle h_FmMac, t_EnetAddr *p_EnetAddr)
493 {
494     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
495
496     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
497
498     if (p_FmMacControllerDriver->f_FM_MAC_RemoveHashMacAddr)
499         return p_FmMacControllerDriver->f_FM_MAC_RemoveHashMacAddr(h_FmMac, p_EnetAddr);
500
501     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
502 }
503
504 /* ......................................................................... */
505
506 t_Error FM_MAC_AddExactMatchMacAddr (t_Handle h_FmMac, t_EnetAddr *p_EnetAddr)
507 {
508     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
509
510     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
511
512     if (p_FmMacControllerDriver->f_FM_MAC_AddExactMatchMacAddr)
513         return p_FmMacControllerDriver->f_FM_MAC_AddExactMatchMacAddr(h_FmMac, p_EnetAddr);
514
515     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
516 }
517
518 /* ......................................................................... */
519
520 t_Error FM_MAC_RemovelExactMatchMacAddr (t_Handle h_FmMac, t_EnetAddr *p_EnetAddr)
521 {
522     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
523
524     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
525
526     if (p_FmMacControllerDriver->f_FM_MAC_RemovelExactMatchMacAddr)
527         return p_FmMacControllerDriver->f_FM_MAC_RemovelExactMatchMacAddr(h_FmMac, p_EnetAddr);
528
529     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
530 }
531
532 /* ......................................................................... */
533
534 t_Error FM_MAC_GetVesrion (t_Handle h_FmMac, uint32_t *macVresion)
535 {
536     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
537
538     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
539
540     if (p_FmMacControllerDriver->f_FM_MAC_GetVersion)
541         return p_FmMacControllerDriver->f_FM_MAC_GetVersion(h_FmMac, macVresion);
542
543     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
544
545 }
546
547 /* ......................................................................... */
548
549 t_Error FM_MAC_GetId (t_Handle h_FmMac, uint32_t *macId)
550 {
551     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
552
553     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
554
555     if (p_FmMacControllerDriver->f_FM_MAC_GetId)
556         return p_FmMacControllerDriver->f_FM_MAC_GetId(h_FmMac, macId);
557
558     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
559 }
560
561 /* ......................................................................... */
562
563 t_Error FM_MAC_SetPromiscuous (t_Handle h_FmMac, bool newVal)
564 {
565     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
566
567     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
568
569     if (p_FmMacControllerDriver->f_FM_MAC_SetPromiscuous)
570         return p_FmMacControllerDriver->f_FM_MAC_SetPromiscuous(h_FmMac, newVal);
571
572     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
573 }
574
575 /* ......................................................................... */
576
577 t_Error FM_MAC_AdjustLink(t_Handle h_FmMac, e_EnetSpeed speed, bool fullDuplex)
578 {
579     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
580
581     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
582
583     if (p_FmMacControllerDriver->f_FM_MAC_AdjustLink)
584         return p_FmMacControllerDriver->f_FM_MAC_AdjustLink(h_FmMac, speed, fullDuplex);
585
586     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
587 }
588
589 /* ......................................................................... */
590
591 t_Error FM_MAC_RestartAutoneg(t_Handle h_FmMac)
592 {
593     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
594
595     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
596
597     if (p_FmMacControllerDriver->f_FM_MAC_RestartAutoneg)
598         return p_FmMacControllerDriver->f_FM_MAC_RestartAutoneg(h_FmMac);
599
600     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
601 }
602
603 /* ......................................................................... */
604
605 t_Error FM_MAC_MII_WritePhyReg (t_Handle h_FmMac, uint8_t phyAddr, uint8_t reg, uint16_t data)
606 {
607     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
608
609     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
610
611     if (p_FmMacControllerDriver->f_FM_MAC_MII_WritePhyReg)
612         return p_FmMacControllerDriver->f_FM_MAC_MII_WritePhyReg(h_FmMac, phyAddr, reg, data);
613
614     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
615 }
616
617 /* ......................................................................... */
618
619 t_Error FM_MAC_MII_ReadPhyReg(t_Handle h_FmMac,  uint8_t phyAddr, uint8_t reg, uint16_t *p_Data)
620 {
621     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
622
623     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
624
625     if (p_FmMacControllerDriver->f_FM_MAC_MII_ReadPhyReg)
626         return p_FmMacControllerDriver->f_FM_MAC_MII_ReadPhyReg(h_FmMac, phyAddr, reg, p_Data);
627
628     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
629 }
630
631 /* ......................................................................... */
632
633 uint16_t FM_MAC_GetMaxFrameLength(t_Handle h_FmMac)
634 {
635     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
636
637     SANITY_CHECK_RETURN_VALUE(p_FmMacControllerDriver, E_INVALID_HANDLE, 0);
638
639     if (p_FmMacControllerDriver->f_FM_MAC_GetMaxFrameLength)
640         return p_FmMacControllerDriver->f_FM_MAC_GetMaxFrameLength(h_FmMac);
641
642     REPORT_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
643     return 0;
644 }
645
646 #if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0))
647 /*****************************************************************************/
648 t_Error FM_MAC_DumpRegs(t_Handle h_FmMac)
649 {
650     t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
651
652     SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
653
654     if (p_FmMacControllerDriver->f_FM_MAC_DumpRegs)
655          return p_FmMacControllerDriver->f_FM_MAC_DumpRegs(h_FmMac);
656     RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
657 }
658 #endif /* (defined(DEBUG_ERRORS) && ... */