blob: 1348f4e3c8572f692578f468840631183f16f801 [file] [log] [blame]
Wolfgang Denk4646d2a2006-05-30 15:56:48 +02001/**
2 * @file IxEthAcc_p.h
3 *
4 * @author Intel Corporation
5 * @date 12-Feb-2002
6 *
7 * @brief Internal Header file for IXP425 Ethernet Access component.
8 *
9 * Design Notes:
10 *
11 *
12 * @par
13 * IXP400 SW Release version 2.0
14 *
15 * -- Copyright Notice --
16 *
17 * @par
18 * Copyright 2001-2005, Intel Corporation.
19 * All rights reserved.
20 *
21 * @par
Wolfgang Denkc57eadc2013-07-28 22:12:47 +020022 * SPDX-License-Identifier: BSD-3-Clause
Wolfgang Denk4646d2a2006-05-30 15:56:48 +020023 * @par
24 * -- End of Copyright Notice --
25 */
26
27/**
28 * @addtogroup IxEthAccPri
29 *@{
30 */
31
32#ifndef IxEthAcc_p_H
33#define IxEthAcc_p_H
34
35/*
36 * Os/System dependancies.
37 */
38#include "IxOsal.h"
39
40/*
41 * Intermodule dependancies
42 */
43#include "IxNpeDl.h"
44#include "IxQMgr.h"
45
46#include "IxEthNpe.h"
47
48/*
49 * Intra module dependancies
50 */
51
52#include "IxEthAccDataPlane_p.h"
53#include "IxEthAccMac_p.h"
54
55
56#define INLINE __inline__
57
58#ifdef NDEBUG
59
60#define IX_ETH_ACC_PRIVATE static
61
62#else
63
64#define IX_ETH_ACC_PRIVATE
65
66#endif /* ndef NDEBUG */
67
68#define IX_ETH_ACC_PUBLIC
69
70
York Sun4a598092013-04-01 11:29:11 -070071#define IX_ETH_ACC_IS_PORT_VALID(port) ((port) < IX_ETH_ACC_NUMBER_OF_PORTS ? true : false )
Wolfgang Denk4646d2a2006-05-30 15:56:48 +020072
73
74
75#ifndef NDEBUG
76#define IX_ETH_ACC_FATAL_LOG(a,b,c,d,e,f,g) { ixOsalLog ( IX_OSAL_LOG_LVL_FATAL,IX_OSAL_LOG_DEV_STDOUT,a,b,c,d,e,f,g);}
77#define IX_ETH_ACC_WARNING_LOG(a,b,c,d,e,f,g) { ixOsalLog ( IX_OSAL_LOG_LVL_WARNING,IX_OSAL_LOG_DEV_STDOUT,a,b,c,d,e,f,g);}
78#define IX_ETH_ACC_DEBUG_LOG(a,b,c,d,e,f,g) { ixOsalLog ( IX_OSAL_LOG_LVL_FATAL,IX_OSAL_LOG_DEV_STDOUT,a,b,c,d,e,f,g);}
79#else
80#define IX_ETH_ACC_FATAL_LOG(a,b,c,d,e,f,g) { ixOsalLog ( IX_OSAL_LOG_LVL_FATAL,IX_OSAL_LOG_DEV_STDOUT,a,b,c,d,e,f,g);}
81#define IX_ETH_ACC_WARNING_LOG(a,b,c,d,e,f,g) { ixOsalLog ( IX_OSAL_LOG_LVL_WARNING,IX_OSAL_LOG_DEV_STDOUT,a,b,c,d,e,f,g);}
82#define IX_ETH_ACC_DEBUG_LOG(a,b,c,d,e,f,g) {}
83#endif
84
85IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccInitDataPlane(void);
86IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccQMgrQueuesConfig(void);
87IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccQMgrRxCallbacksRegister(IxQMgrCallback ixQMgrCallback);
88IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccSingleEthNpeCheck(IxEthAccPortId portId);
89IX_ETH_ACC_PUBLIC void ixEthAccQMgrRxQEntryGet(UINT32 *numRxQueueEntries);
90
91/* prototypes for the private control plane functions (used by the control interface wrapper) */
92IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortEnablePriv(IxEthAccPortId portId);
93IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortDisablePriv(IxEthAccPortId portId);
94IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortEnabledQueryPriv(IxEthAccPortId portId, BOOL *enabled);
95IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortPromiscuousModeClearPriv(IxEthAccPortId portId);
96IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortPromiscuousModeSetPriv(IxEthAccPortId portId);
97IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortUnicastMacAddressSetPriv(IxEthAccPortId portId, IxEthAccMacAddr *macAddr);
98IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortUnicastMacAddressGetPriv(IxEthAccPortId portId, IxEthAccMacAddr *macAddr);
99IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortMulticastAddressJoinPriv(IxEthAccPortId portId, IxEthAccMacAddr *macAddr);
100IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortMulticastAddressJoinAllPriv(IxEthAccPortId portId);
101IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortMulticastAddressLeavePriv(IxEthAccPortId portId, IxEthAccMacAddr *macAddr);
102IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortMulticastAddressLeaveAllPriv(IxEthAccPortId portId);
103IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortUnicastAddressShowPriv(IxEthAccPortId portId);
104IX_ETH_ACC_PUBLIC void ixEthAccPortMulticastAddressShowPriv(IxEthAccPortId portId);
105IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortDuplexModeSetPriv(IxEthAccPortId portId, IxEthAccDuplexMode mode);
106IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortDuplexModeGetPriv(IxEthAccPortId portId, IxEthAccDuplexMode *mode);
107IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortTxFrameAppendPaddingEnablePriv(IxEthAccPortId portId);
108IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortTxFrameAppendPaddingDisablePriv(IxEthAccPortId portId);
109IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortTxFrameAppendFCSEnablePriv(IxEthAccPortId portId);
110IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortTxFrameAppendFCSDisablePriv(IxEthAccPortId portId);
111IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortRxFrameAppendFCSEnablePriv(IxEthAccPortId portId);
112IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccPortRxFrameAppendFCSDisablePriv(IxEthAccPortId portId);
113IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccTxSchedulingDisciplineSetPriv(IxEthAccPortId portId, IxEthAccSchedulerDiscipline sched);
114IX_ETH_ACC_PUBLIC IxEthAccStatus ixEthAccRxSchedulingDisciplineSetPriv(IxEthAccSchedulerDiscipline sched);
115
116/**
117 * @struct ixEthAccRxDataStats
118 * @brief Stats data structures for data path. - Not obtained from h/w
119 *
120 */
121typedef struct
122{
123 UINT32 rxFrameClientCallback;
124 UINT32 rxFreeRepOK;
125 UINT32 rxFreeRepDelayed;
126 UINT32 rxFreeRepFromSwQOK;
127 UINT32 rxFreeRepFromSwQDelayed;
128 UINT32 rxFreeLateNotificationEnabled;
129 UINT32 rxFreeLowCallback;
130 UINT32 rxFreeOverflow;
131 UINT32 rxFreeLock;
132 UINT32 rxDuringDisable;
133 UINT32 rxSwQDuringDisable;
134 UINT32 rxUnlearnedMacAddress;
135 UINT32 rxPriority[IX_ETH_ACC_TX_PRIORITY_7 + 1];
136 UINT32 rxUnexpectedError;
137 UINT32 rxFiltered;
138} IxEthAccRxDataStats;
139
140/**
141 * @struct IxEthAccTxDataStats
142 * @brief Stats data structures for data path. - Not obtained from h/w
143 *
144 */
145typedef struct
146{
147 UINT32 txQOK;
148 UINT32 txQDelayed;
149 UINT32 txFromSwQOK;
150 UINT32 txFromSwQDelayed;
151 UINT32 txLowThreshCallback;
152 UINT32 txDoneClientCallback;
153 UINT32 txDoneClientCallbackDisable;
154 UINT32 txOverflow;
155 UINT32 txLock;
156 UINT32 txPriority[IX_ETH_ACC_TX_PRIORITY_7 + 1];
157 UINT32 txLateNotificationEnabled;
158 UINT32 txDoneDuringDisable;
159 UINT32 txDoneSwQDuringDisable;
160 UINT32 txUnexpectedError;
161} IxEthAccTxDataStats;
162
163/* port Disable state machine : list of states */
164typedef enum
165{
166 /* general port states */
167 DISABLED = 0,
168 ACTIVE,
169
170 /* particular Tx/Rx states */
171 REPLENISH,
172 RECEIVE,
173 TRANSMIT,
174 TRANSMIT_DONE
175} IxEthAccPortDisableState;
176
177typedef struct
178{
179 BOOL fullDuplex;
180 BOOL rxFCSAppend;
181 BOOL txFCSAppend;
182 BOOL txPADAppend;
183 BOOL enabled;
184 BOOL promiscuous;
185 BOOL joinAll;
186 IxOsalMutex ackMIBStatsLock;
187 IxOsalMutex ackMIBStatsResetLock;
188 IxOsalMutex MIBStatsGetAccessLock;
189 IxOsalMutex MIBStatsGetResetAccessLock;
190 IxOsalMutex npeLoopbackMessageLock;
191 IxEthAccMacAddr mcastAddrsTable[IX_ETH_ACC_MAX_MULTICAST_ADDRESSES];
192 UINT32 mcastAddrIndex;
193 IX_OSAL_MBUF *portDisableTxMbufPtr;
194 IX_OSAL_MBUF *portDisableRxMbufPtr;
195
196 volatile IxEthAccPortDisableState portDisableState;
197 volatile IxEthAccPortDisableState rxState;
198 volatile IxEthAccPortDisableState txState;
199
200 BOOL initDone;
201 BOOL macInitialised;
202} IxEthAccMacState;
203
204/**
205 * @struct IxEthAccRxInfo
206 * @brief System-wide data structures associated with the data plane.
207 *
208 */
209typedef struct
210{
211 IxQMgrQId higherPriorityQueue[IX_QMGR_MAX_NUM_QUEUES]; /**< higher priority queue list */
212 IxEthAccSchedulerDiscipline schDiscipline; /**< Receive Xscale QoS type */
213} IxEthAccInfo;
214
215/**
216 * @struct IxEthAccRxDataInfo
217 * @brief Per Port data structures associated with the receive data plane.
218 *
219 */
220typedef struct
221{
222 IxQMgrQId rxFreeQueue; /**< rxFree Queue for this port */
223 IxEthAccPortRxCallback rxCallbackFn;
224 UINT32 rxCallbackTag;
225 IxEthAccDataPlaneQList freeBufferList;
226 IxEthAccPortMultiBufferRxCallback rxMultiBufferCallbackFn;
227 UINT32 rxMultiBufferCallbackTag;
228 BOOL rxMultiBufferCallbackInUse;
229 IxEthAccRxDataStats stats; /**< Receive s/w stats */
230} IxEthAccRxDataInfo;
231
232/**
233 * @struct IxEthAccTxDataInfo
234 * @brief Per Port data structures associated with the transmit data plane.
235 *
236 */
237typedef struct
238{
239 IxEthAccPortTxDoneCallback txBufferDoneCallbackFn;
240 UINT32 txCallbackTag;
Wolfgang Denka1be4762008-05-20 16:00:29 +0200241 IxEthAccDataPlaneQList txQ[IX_ETH_ACC_NUM_TX_PRIORITIES]; /**< Transmit Q */
Wolfgang Denk4646d2a2006-05-30 15:56:48 +0200242 IxEthAccSchedulerDiscipline schDiscipline; /**< Transmit Xscale QoS */
243 IxQMgrQId txQueue; /**< txQueue for this port */
244 IxEthAccTxDataStats stats; /**< Transmit s/w stats */
245} IxEthAccTxDataInfo;
246
247
248/**
249 * @struct IxEthAccPortDataInfo
250 * @brief Per Port data structures associated with the port data plane.
251 *
252 */
253typedef struct
254{
255 BOOL portInitialized;
256 UINT32 npeId; /**< NpeId for this port */
257 IxEthAccTxDataInfo ixEthAccTxData; /**< Transmit data control structures */
Mike Williamsbf895ad2011-07-22 04:01:30 +0000258 IxEthAccRxDataInfo ixEthAccRxData; /**< Receive data control structures */
Wolfgang Denk4646d2a2006-05-30 15:56:48 +0200259} IxEthAccPortDataInfo;
260
261extern IxEthAccPortDataInfo ixEthAccPortData[];
262#define IX_ETH_IS_PORT_INITIALIZED(port) (ixEthAccPortData[port].portInitialized)
263
264extern BOOL ixEthAccServiceInit;
York Sun4a598092013-04-01 11:29:11 -0700265#define IX_ETH_ACC_IS_SERVICE_INITIALIZED() (ixEthAccServiceInit == true )
Wolfgang Denk4646d2a2006-05-30 15:56:48 +0200266
267/*
268 * Maximum number of frames to consume from the Rx Frame Q.
269 */
270
271#define IX_ETH_ACC_MAX_RX_FRAME_CONSUME_PER_CALLBACK (128)
272
273/*
274 * Max number of times to load the Rx Free Q from callback.
275 */
276#define IX_ETH_ACC_MAX_RX_FREE_BUFFERS_LOAD (256) /* Set greater than depth of h/w Q + drain time at line rate */
277
278/*
279 * Max number of times to read from the Tx Done Q in one sitting.
280 */
281
282#define IX_ETH_ACC_MAX_TX_FRAME_DONE_CONSUME_PER_CALLBACK (256)
283
284/*
285 * Max number of times to take buffers from S/w queues and write them to the H/w Tx
286 * queues on receipt of a Tx low threshold callback
287 */
288
289#define IX_ETH_ACC_MAX_TX_FRAME_TX_CONSUME_PER_CALLBACK (16)
290
291
292#define IX_ETH_ACC_FLUSH_CACHE(addr,size) IX_OSAL_CACHE_FLUSH((addr),(size))
293#define IX_ETH_ACC_INVALIDATE_CACHE(addr,size) IX_OSAL_CACHE_INVALIDATE((addr),(size))
294
295
296#define IX_ETH_ACC_MEMSET(start,value,size) memset(start,value,size)
297
298#endif /* ndef IxEthAcc_p_H */
299
300
301