4 * @author Intel Corporation
7 * @brief This file contains the implementation of the IXP425 Ethernet Access Component
12 * IXP400 SW Release version 2.0
14 * -- Copyright Notice --
17 * Copyright 2001-2005, Intel Corporation.
18 * All rights reserved.
21 * SPDX-License-Identifier: BSD-3-Clause
23 * -- End of Copyright Notice --
29 #ifdef CONFIG_IXP425_COMPONENT_ETHDB
32 #include "IxFeatureCtrl.h"
34 #include "IxEthAcc_p.h"
35 #include "IxEthAccMac_p.h"
36 #include "IxEthAccMii_p.h"
39 * @addtogroup IxEthAcc
45 * @brief System-wide information data strucure.
47 * @ingroup IxEthAccPri
51 IxEthAccInfo ixEthAccDataInfo;
52 extern PUBLIC IxEthAccMacState ixEthAccMacState[];
53 extern PUBLIC IxOsalMutex ixEthAccControlInterfaceMutex;
56 * @brief System-wide information
58 * @ingroup IxEthAccPri
61 BOOL ixEthAccServiceInit = false;
63 /* global filtering bit mask */
64 PUBLIC UINT32 ixEthAccNewSrcMask;
67 * @brief Per port information data strucure.
69 * @ingroup IxEthAccPri
73 IxEthAccPortDataInfo ixEthAccPortData[IX_ETH_ACC_NUMBER_OF_PORTS];
75 PUBLIC IxEthAccStatus ixEthAccInit()
77 #ifdef CONFIG_IXP425_COMPONENT_ETHDB
79 * Initialize Control plane
81 if (ixEthDBInit() != IX_ETH_DB_SUCCESS)
83 IX_ETH_ACC_WARNING_LOG("ixEthAccInit: EthDB init failed\n", 0, 0, 0, 0, 0, 0);
85 return IX_ETH_ACC_FAIL;
89 if (IX_FEATURE_CTRL_SWCONFIG_ENABLED == ixFeatureCtrlSwConfigurationCheck (IX_FEATURECTRL_ETH_LEARNING))
91 ixEthAccNewSrcMask = (~0); /* want all the bits */
95 ixEthAccNewSrcMask = (~IX_ETHACC_NE_NEWSRCMASK); /* want all but the NewSrc bit */
99 * Initialize Data plane
101 if ( ixEthAccInitDataPlane() != IX_ETH_ACC_SUCCESS )
103 IX_ETH_ACC_WARNING_LOG("ixEthAccInit: data plane init failed\n", 0, 0, 0, 0, 0, 0);
105 return IX_ETH_ACC_FAIL;
109 if ( ixEthAccQMgrQueuesConfig() != IX_ETH_ACC_SUCCESS )
111 IX_ETH_ACC_WARNING_LOG("ixEthAccInit: queue config failed\n", 0, 0, 0, 0, 0, 0);
113 return IX_ETH_ACC_FAIL;
119 if ( ixEthAccMiiInit() != IX_ETH_ACC_SUCCESS )
121 IX_ETH_ACC_WARNING_LOG("ixEthAccInit: Mii init failed\n", 0, 0, 0, 0, 0, 0);
123 return IX_ETH_ACC_FAIL;
127 * Initialize MAC I/O memory
129 if (ixEthAccMacMemInit() != IX_ETH_ACC_SUCCESS)
131 IX_ETH_ACC_WARNING_LOG("ixEthAccInit: Mac init failed\n", 0, 0, 0, 0, 0, 0);
133 return IX_ETH_ACC_FAIL;
137 * Initialize control plane interface lock
139 if (ixOsalMutexInit(&ixEthAccControlInterfaceMutex) != IX_SUCCESS)
141 IX_ETH_ACC_WARNING_LOG("ixEthAccInit: Control plane interface lock initialization failed\n", 0, 0, 0, 0, 0, 0);
143 return IX_ETH_ACC_FAIL;
146 /* initialiasation is complete */
147 ixEthAccServiceInit = true;
149 return IX_ETH_ACC_SUCCESS;
153 PUBLIC void ixEthAccUnload(void)
155 IxEthAccPortId portId;
157 if ( IX_ETH_ACC_IS_SERVICE_INITIALIZED() )
159 /* check none of the port is still active */
160 for (portId = 0; portId < IX_ETH_ACC_NUMBER_OF_PORTS; portId++)
162 if ( IX_ETH_IS_PORT_INITIALIZED(portId) )
164 if (ixEthAccMacState[portId].portDisableState == ACTIVE)
166 IX_ETH_ACC_WARNING_LOG("ixEthAccUnload: port %u still active, bail out\n", portId, 0, 0, 0, 0, 0);
172 /* unmap the memory areas */
176 /* set all ports as uninitialized */
177 for (portId = 0; portId < IX_ETH_ACC_NUMBER_OF_PORTS; portId++)
179 ixEthAccPortData[portId].portInitialized = false;
182 /* uninitialize the service */
183 ixEthAccServiceInit = false;
187 PUBLIC IxEthAccStatus ixEthAccPortInit( IxEthAccPortId portId)
190 IxEthAccStatus ret=IX_ETH_ACC_SUCCESS;
192 if ( ! IX_ETH_ACC_IS_SERVICE_INITIALIZED() )
194 return(IX_ETH_ACC_FAIL);
198 * Check for valid port
201 if ( ! IX_ETH_ACC_IS_PORT_VALID(portId) )
203 return (IX_ETH_ACC_INVALID_PORT);
206 if (IX_ETH_ACC_SUCCESS != ixEthAccSingleEthNpeCheck(portId))
208 IX_ETH_ACC_WARNING_LOG("EthAcc: Unavailable Eth %d: Cannot initialize Eth port.\n",(INT32) portId,0,0,0,0,0);
209 return IX_ETH_ACC_SUCCESS ;
212 if ( IX_ETH_IS_PORT_INITIALIZED(portId) )
214 /* Already initialized */
215 return(IX_ETH_ACC_FAIL);
218 if(ixEthAccMacInit(portId)!=IX_ETH_ACC_SUCCESS)
220 return IX_ETH_ACC_FAIL;
224 * Set the port init flag.
227 ixEthAccPortData[portId].portInitialized = true;
229 #ifdef CONFIG_IXP425_COMPONENT_ETHDB
230 /* init learning/filtering database structures for this port */
231 ixEthDBPortInit(portId);