1/* Copyright (c) 2008-2011 Freescale Semiconductor, Inc.
2 * All rights reserved.
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 @File          fm_mac.c
35
36 @Description   FM MAC ...
37*//***************************************************************************/
38#include "std_ext.h"
39#include "string_ext.h"
40#include "sprint_ext.h"
41#include "error_ext.h"
42#include "fm_ext.h"
43
44#include "fm_common.h"
45#include "fm_mac.h"
46
47
48/* ........................................................................... */
49
50t_Handle FM_MAC_Config (t_FmMacParams *p_FmMacParam)
51{
52    t_FmMacControllerDriver *p_FmMacControllerDriver;
53
54    SANITY_CHECK_RETURN_VALUE(p_FmMacParam, E_INVALID_HANDLE, NULL);
55
56    if(ENET_SPEED_FROM_MODE(p_FmMacParam->enetMode) < e_ENET_SPEED_10000)
57        p_FmMacControllerDriver = (t_FmMacControllerDriver *)DTSEC_Config(p_FmMacParam);
58    else
59       p_FmMacControllerDriver = (t_FmMacControllerDriver *)TGEC_Config(p_FmMacParam);
60
61    if (!p_FmMacControllerDriver)
62        return NULL;
63
64    p_FmMacControllerDriver->h_Fm           = p_FmMacParam->h_Fm;
65    p_FmMacControllerDriver->enetMode       = p_FmMacParam->enetMode;
66    p_FmMacControllerDriver->macId          = p_FmMacParam->macId;
67    p_FmMacControllerDriver->resetOnInit    = DEFAULT_resetOnInit;
68
69    return (t_Handle)p_FmMacControllerDriver;
70}
71
72/* ........................................................................... */
73
74t_Error FM_MAC_Init (t_Handle h_FmMac)
75{
76    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
77
78    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
79
80    if (p_FmMacControllerDriver->resetOnInit &&
81        (FmResetMac(p_FmMacControllerDriver->h_Fm,
82                    ((ENET_INTERFACE_FROM_MODE(p_FmMacControllerDriver->enetMode) == e_ENET_IF_XGMII) ? e_FM_MAC_10G : e_FM_MAC_1G),
83                     p_FmMacControllerDriver->macId) != E_OK))
84        RETURN_ERROR(MAJOR, E_INVALID_STATE, ("Can't reset MAC!"));
85
86    if ((p_FmMacControllerDriver->clkFreq = FmGetClockFreq(p_FmMacControllerDriver->h_Fm)) == 0)
87        RETURN_ERROR(MAJOR, E_INVALID_STATE, ("Can't get clock for MAC!"));
88
89    if (p_FmMacControllerDriver->f_FM_MAC_Init)
90        return p_FmMacControllerDriver->f_FM_MAC_Init(h_FmMac);
91    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
92}
93
94/* ........................................................................... */
95
96t_Error FM_MAC_Free (t_Handle h_FmMac)
97{
98    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
99
100    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
101
102    if (p_FmMacControllerDriver->f_FM_MAC_Free)
103        return p_FmMacControllerDriver->f_FM_MAC_Free(h_FmMac);
104
105    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
106}
107
108/* ........................................................................... */
109
110t_Error FM_MAC_ConfigResetOnInit (t_Handle h_FmMac, bool enable)
111{
112    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
113
114    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
115
116    p_FmMacControllerDriver->resetOnInit = enable;
117
118    return E_OK;
119}
120
121/* ........................................................................... */
122
123t_Error FM_MAC_ConfigLoopback (t_Handle h_FmMac, bool newVal)
124{
125    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
126
127    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
128
129    if (p_FmMacControllerDriver->f_FM_MAC_ConfigLoopback)
130        return p_FmMacControllerDriver->f_FM_MAC_ConfigLoopback(h_FmMac, newVal);
131
132    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
133}
134
135/* ........................................................................... */
136
137t_Error FM_MAC_ConfigMaxFrameLength (t_Handle h_FmMac, uint16_t newVal)
138{
139    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
140
141    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
142
143    if (p_FmMacControllerDriver->f_FM_MAC_ConfigMaxFrameLength)
144        return p_FmMacControllerDriver->f_FM_MAC_ConfigMaxFrameLength(h_FmMac, newVal);
145    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
146}
147
148/* ........................................................................... */
149
150t_Error FM_MAC_ConfigWan (t_Handle h_FmMac, bool flag)
151{
152   t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
153
154    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
155
156    if (p_FmMacControllerDriver->f_FM_MAC_ConfigWan)
157        return p_FmMacControllerDriver->f_FM_MAC_ConfigWan(h_FmMac, flag);
158
159    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
160}
161
162/* ........................................................................... */
163
164t_Error FM_MAC_ConfigPadAndCrc (t_Handle h_FmMac, bool newVal)
165{
166    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
167
168    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
169
170    if (p_FmMacControllerDriver->f_FM_MAC_ConfigPadAndCrc)
171        return p_FmMacControllerDriver->f_FM_MAC_ConfigPadAndCrc(h_FmMac, newVal);
172
173    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
174}
175
176/* ........................................................................... */
177
178t_Error FM_MAC_ConfigHalfDuplex (t_Handle h_FmMac, bool newVal)
179{
180    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
181
182    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
183
184    if (p_FmMacControllerDriver->f_FM_MAC_ConfigHalfDuplex)
185        return p_FmMacControllerDriver->f_FM_MAC_ConfigHalfDuplex(h_FmMac,newVal);
186
187    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
188}
189
190/* ........................................................................... */
191
192t_Error FM_MAC_ConfigLengthCheck (t_Handle h_FmMac, bool newVal)
193{
194    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
195
196    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
197
198    if (p_FmMacControllerDriver->f_FM_MAC_ConfigLengthCheck)
199        return p_FmMacControllerDriver->f_FM_MAC_ConfigLengthCheck(h_FmMac,newVal);
200
201    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
202}
203
204/* ........................................................................... */
205
206t_Error FM_MAC_ConfigException (t_Handle h_FmMac, e_FmMacExceptions ex, bool enable)
207{
208    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
209
210    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
211
212    if (p_FmMacControllerDriver->f_FM_MAC_ConfigException)
213        return p_FmMacControllerDriver->f_FM_MAC_ConfigException(h_FmMac, ex, enable);
214
215    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
216}
217
218#ifdef FM_TX_ECC_FRMS_ERRATA_10GMAC_A004
219/* ........................................................................... */
220
221t_Error FM_MAC_ConfigSkipFman11Workaround (t_Handle h_FmMac)
222{
223    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
224
225    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
226
227    if (p_FmMacControllerDriver->f_FM_MAC_ConfigSkipFman11Workaround)
228        return p_FmMacControllerDriver->f_FM_MAC_ConfigSkipFman11Workaround(h_FmMac);
229
230    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
231}
232#endif /* FM_TX_ECC_FRMS_ERRATA_10GMAC_A004 */
233
234
235/*****************************************************************************/
236/* Run Time Control                                                          */
237/*****************************************************************************/
238
239/* ........................................................................... */
240
241t_Error FM_MAC_Enable  (t_Handle h_FmMac,  e_CommMode mode)
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_Enable)
248        return p_FmMacControllerDriver->f_FM_MAC_Enable(h_FmMac, mode);
249
250    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
251}
252
253/* ........................................................................... */
254
255t_Error FM_MAC_Disable (t_Handle h_FmMac, e_CommMode mode)
256{
257    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
258
259    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
260
261    if (p_FmMacControllerDriver->f_FM_MAC_Disable)
262        return p_FmMacControllerDriver->f_FM_MAC_Disable(h_FmMac, mode);
263
264    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
265}
266
267/* ........................................................................... */
268
269t_Error FM_MAC_Enable1588TimeStamp (t_Handle h_FmMac)
270{
271    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
272
273    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
274
275    if (p_FmMacControllerDriver->f_FM_MAC_Enable1588TimeStamp)
276        return p_FmMacControllerDriver->f_FM_MAC_Enable1588TimeStamp(h_FmMac);
277
278    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
279}
280
281/* ........................................................................... */
282
283t_Error FM_MAC_Disable1588TimeStamp (t_Handle h_FmMac)
284{
285    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
286
287    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
288
289    if (p_FmMacControllerDriver->f_FM_MAC_Disable1588TimeStamp)
290        return p_FmMacControllerDriver->f_FM_MAC_Disable1588TimeStamp(h_FmMac);
291
292    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
293}
294
295/* ........................................................................... */
296
297t_Error FM_MAC_SetTxAutoPauseFrames (t_Handle h_FmMac, uint16_t pauseTime)
298{
299    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
300
301    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
302
303    if (p_FmMacControllerDriver->f_FM_MAC_SetTxAutoPauseFrames)
304        return p_FmMacControllerDriver->f_FM_MAC_SetTxAutoPauseFrames(h_FmMac, pauseTime);
305
306    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
307}
308
309/* ........................................................................... */
310
311t_Error FM_MAC_SetRxIgnorePauseFrames (t_Handle h_FmMac, bool en)
312{
313    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
314
315    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
316
317    if (p_FmMacControllerDriver->f_FM_MAC_SetRxIgnorePauseFrames)
318        return p_FmMacControllerDriver->f_FM_MAC_SetRxIgnorePauseFrames(h_FmMac, en);
319
320    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
321}
322
323/* ........................................................................... */
324
325t_Error FM_MAC_ResetCounters (t_Handle h_FmMac)
326{
327    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
328
329    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
330
331    if (p_FmMacControllerDriver->f_FM_MAC_ResetCounters)
332        return p_FmMacControllerDriver->f_FM_MAC_ResetCounters(h_FmMac);
333
334    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
335}
336
337/* ........................................................................... */
338
339t_Error FM_MAC_SetException(t_Handle h_FmMac, e_FmMacExceptions ex, bool enable)
340{
341   t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
342
343    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
344
345    if (p_FmMacControllerDriver->f_FM_MAC_SetException)
346        return p_FmMacControllerDriver->f_FM_MAC_SetException(h_FmMac, ex, enable);
347
348    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
349}
350
351/* ........................................................................... */
352
353t_Error FM_MAC_SetStatistics (t_Handle h_FmMac, e_FmMacStatisticsLevel statisticsLevel)
354{
355    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
356
357    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
358
359    if (p_FmMacControllerDriver->f_FM_MAC_SetStatistics)
360        return p_FmMacControllerDriver->f_FM_MAC_SetStatistics(h_FmMac, statisticsLevel);
361    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
362}
363
364/* ........................................................................... */
365
366t_Error FM_MAC_GetStatistics (t_Handle h_FmMac, t_FmMacStatistics *p_Statistics)
367{
368    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
369
370    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
371
372    if (p_FmMacControllerDriver->f_FM_MAC_GetStatistics)
373        return p_FmMacControllerDriver->f_FM_MAC_GetStatistics(h_FmMac, p_Statistics);
374
375    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
376}
377
378/* ........................................................................... */
379
380t_Error FM_MAC_ModifyMacAddr (t_Handle h_FmMac, t_EnetAddr *p_EnetAddr)
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_ModifyMacAddr)
387        return p_FmMacControllerDriver->f_FM_MAC_ModifyMacAddr(h_FmMac, p_EnetAddr);
388
389    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
390}
391
392/* ........................................................................... */
393
394t_Error FM_MAC_AddHashMacAddr (t_Handle h_FmMac, t_EnetAddr *p_EnetAddr)
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_AddHashMacAddr)
401        return p_FmMacControllerDriver->f_FM_MAC_AddHashMacAddr(h_FmMac, p_EnetAddr);
402
403    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
404}
405
406/* ........................................................................... */
407
408t_Error FM_MAC_RemoveHashMacAddr (t_Handle h_FmMac, t_EnetAddr *p_EnetAddr)
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_RemoveHashMacAddr)
415        return p_FmMacControllerDriver->f_FM_MAC_RemoveHashMacAddr(h_FmMac, p_EnetAddr);
416
417    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
418}
419
420/* ........................................................................... */
421
422t_Error FM_MAC_AddExactMatchMacAddr (t_Handle h_FmMac, t_EnetAddr *p_EnetAddr)
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_AddExactMatchMacAddr)
429        return p_FmMacControllerDriver->f_FM_MAC_AddExactMatchMacAddr(h_FmMac, p_EnetAddr);
430
431    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
432}
433
434/* ........................................................................... */
435
436t_Error FM_MAC_RemovelExactMatchMacAddr (t_Handle h_FmMac, t_EnetAddr *p_EnetAddr)
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_RemovelExactMatchMacAddr)
443        return p_FmMacControllerDriver->f_FM_MAC_RemovelExactMatchMacAddr(h_FmMac, p_EnetAddr);
444
445    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
446}
447
448/* ........................................................................... */
449
450t_Error FM_MAC_GetVesrion (t_Handle h_FmMac, uint32_t *macVresion)
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_GetVersion)
457        return p_FmMacControllerDriver->f_FM_MAC_GetVersion(h_FmMac, macVresion);
458
459    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
460
461}
462
463/* ........................................................................... */
464
465t_Error FM_MAC_GetId (t_Handle h_FmMac, uint32_t *macId)
466{
467    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
468
469    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
470
471    if (p_FmMacControllerDriver->f_FM_MAC_GetId)
472        return p_FmMacControllerDriver->f_FM_MAC_GetId(h_FmMac, macId);
473
474    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
475}
476
477/* ........................................................................... */
478
479t_Error FM_MAC_SetPromiscuous (t_Handle h_FmMac, bool newVal)
480{
481    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
482
483    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
484
485    if (p_FmMacControllerDriver->f_FM_MAC_SetPromiscuous)
486        return p_FmMacControllerDriver->f_FM_MAC_SetPromiscuous(h_FmMac, newVal);
487
488    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
489}
490
491/* ........................................................................... */
492
493t_Error FM_MAC_AdjustLink(t_Handle h_FmMac, e_EnetSpeed speed, bool fullDuplex)
494{
495    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
496
497    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
498
499    if (p_FmMacControllerDriver->f_FM_MAC_AdjustLink)
500        return p_FmMacControllerDriver->f_FM_MAC_AdjustLink(h_FmMac, speed, fullDuplex);
501
502    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
503}
504
505/* ........................................................................... */
506
507t_Error FM_MAC_MII_WritePhyReg (t_Handle h_FmMac, uint8_t phyAddr, uint8_t reg, uint16_t data)
508{
509    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
510
511    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
512
513    if (p_FmMacControllerDriver->f_FM_MAC_MII_WritePhyReg)
514        return p_FmMacControllerDriver->f_FM_MAC_MII_WritePhyReg(h_FmMac, phyAddr, reg, data);
515
516    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
517}
518
519/* ........................................................................... */
520
521t_Error FM_MAC_MII_ReadPhyReg(t_Handle h_FmMac,  uint8_t phyAddr, uint8_t reg, uint16_t *p_Data)
522{
523    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
524
525    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
526
527    if (p_FmMacControllerDriver->f_FM_MAC_MII_ReadPhyReg)
528        return p_FmMacControllerDriver->f_FM_MAC_MII_ReadPhyReg(h_FmMac, phyAddr, reg, p_Data);
529
530    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
531}
532
533/* ........................................................................... */
534
535uint16_t FM_MAC_GetMaxFrameLength(t_Handle h_FmMac)
536{
537    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
538
539    SANITY_CHECK_RETURN_VALUE(p_FmMacControllerDriver, E_INVALID_HANDLE, 0);
540
541    if (p_FmMacControllerDriver->f_FM_MAC_GetMaxFrameLength)
542        return p_FmMacControllerDriver->f_FM_MAC_GetMaxFrameLength(h_FmMac);
543
544    REPORT_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
545    return 0;
546}
547
548#if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0))
549/*****************************************************************************/
550t_Error FM_MAC_DumpRegs(t_Handle h_FmMac)
551{
552    t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
553
554    SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
555
556    if (p_FmMacControllerDriver->f_FM_MAC_DumpRegs)
557         return p_FmMacControllerDriver->f_FM_MAC_DumpRegs(h_FmMac);
558    RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
559}
560#endif /* (defined(DEBUG_ERRORS) && ... */
561