]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - drivers/net/npe/include/IxEthAccDataPlane_p.h
doc: SPI: Add qspi test details on AM43xx
[karo-tx-uboot.git] / drivers / net / npe / include / IxEthAccDataPlane_p.h
1 /**
2  * @file IxEthAccDataPlane_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
22  * SPDX-License-Identifier:     BSD-3-Clause
23  * @par
24  * -- End of Copyright Notice --
25  */
26
27
28
29 #ifndef IxEthAccDataPlane_p_H
30 #define IxEthAccDataPlane_p_H
31
32 #include <IxOsal.h>
33 #include <IxQMgr.h>
34
35 /**
36  * @addtogroup IxEthAccPri
37  *@{
38  */
39
40 /* typedefs global to this file*/
41
42 typedef struct
43 {
44     IX_OSAL_MBUF *pHead;
45     IX_OSAL_MBUF *pTail;
46 }IxEthAccDataPlaneQList;
47
48
49 /**
50  * @struct  IxEthAccDataPlaneStats
51  * @brief   Statistics data structure associated with the data plane
52  *
53  */
54 typedef struct
55 {
56     UINT32 addToSwQ;
57     UINT32 removeFromSwQ;
58     UINT32 unchainedTxMBufs;
59     UINT32 chainedTxMBufs;
60     UINT32 unchainedTxDoneMBufs;
61     UINT32 chainedTxDoneMBufs;
62     UINT32 unchainedRxMBufs;
63     UINT32 chainedRxMBufs;
64     UINT32 unchainedRxFreeMBufs;
65     UINT32 chainedRxFreeMBufs;
66     UINT32 rxCallbackCounter;
67     UINT32 rxCallbackBurstRead;
68     UINT32 txDoneCallbackCounter;
69     UINT32 unexpectedError;
70 } IxEthAccDataPlaneStats;
71
72 /**
73  * @fn ixEthAccMbufFromSwQ
74  * @brief  used during disable steps to convert mbufs from 
75  *  swq format, ready to be pushed into hw queues for NPE, 
76  *  back into XScale format 
77  */
78 IX_OSAL_MBUF *ixEthAccMbufFromSwQ(IX_OSAL_MBUF *mbuf);
79
80 /**
81  * @fn ixEthAccDataPlaneShow
82  * @brief  Show function (for data plane statistics
83  */
84 void ixEthAccDataPlaneShow(void);
85
86 /*
87  * lock dataplane when atomic operation is required
88  */
89 #define IX_ETH_ACC_DATA_PLANE_LOCK(arg) arg = ixOsalIrqLock();
90 #define IX_ETH_ACC_DATA_PLANE_UNLOCK(arg) ixOsalIrqUnlock(arg);
91
92 /*
93  * Use MBUF fields
94  */
95 #define IX_ETHACC_NE_SHARED(mBufPtr) \
96  ((IxEthAccNe *)&((mBufPtr)->ix_ne))
97
98 #if 1
99
100 #define IX_ETHACC_NE_NEXT(mBufPtr) (mBufPtr)->ix_ne.reserved[0]
101
102 /* tm - wrong!! len and pkt_len are in the second word - #define IX_ETHACC_NE_LEN(mBufPtr) (mBufPtr)->ix_ne.reserved[3] */
103 #define IX_ETHACC_NE_LEN(mBufPtr) (mBufPtr)->ix_ne.reserved[1]
104
105 #define IX_ETHACC_NE_DATA(mBufPtr)(mBufPtr)->ix_ne.reserved[2]
106
107 #else
108
109 #define IX_ETHACC_NE_NEXT(mBufPtr) \
110   IX_ETHACC_NE_SHARED(mBufPtr)->ixReserved_next
111
112 #define IX_ETHACC_NE_LEN(mBufPtr) \
113   IX_ETHACC_NE_SHARED(mBufPtr)->ixReserved_lengths
114
115 #define IX_ETHACC_NE_DATA(mBufPtr) \
116   IX_ETHACC_NE_SHARED(mBufPtr)->ixReserved_data
117 #endif
118
119 /*
120  * Use MBUF  next pointer field to chain data.
121  */
122 #define IX_ETH_ACC_MBUF_NEXT_PKT_CHAIN_MEMBER(mbuf) (mbuf)->ix_ctrl.ix_chain
123
124
125
126 #define IX_ETH_ACC_DATAPLANE_IS_Q_EMPTY(mbuf_list) ((mbuf_list.pHead) == NULL)
127     
128
129 #define IX_ETH_ACC_DATAPLANE_ADD_MBUF_TO_Q_HEAD(mbuf_list,mbuf_to_add)          \
130   do {                                                                          \
131     int lockVal;                                                                \
132     IX_ETH_ACC_DATA_PLANE_LOCK(lockVal);                                        \
133     IX_ETH_ACC_STATS_INC(ixEthAccDataStats.addToSwQ);                           \
134     if ( (mbuf_list.pHead) != NULL )                                            \
135     {                                                                           \
136       (IX_ETH_ACC_MBUF_NEXT_PKT_CHAIN_MEMBER((mbuf_to_add))) = (mbuf_list.pHead);\
137       (mbuf_list.pHead) = (mbuf_to_add);                                        \
138     }                                                                           \
139     else {                                                                      \
140       (mbuf_list.pTail) = (mbuf_list.pHead) = (mbuf_to_add);                    \
141       IX_ETH_ACC_MBUF_NEXT_PKT_CHAIN_MEMBER((mbuf_to_add)) = NULL;              \
142     }                                                                           \
143     IX_ETH_ACC_DATA_PLANE_UNLOCK(lockVal);                                      \
144   } while(0)
145
146
147 #define IX_ETH_ACC_DATAPLANE_ADD_MBUF_TO_Q_TAIL(mbuf_list,mbuf_to_add)          \
148   do {                                                                          \
149     int lockVal;                                                                \
150     IX_ETH_ACC_DATA_PLANE_LOCK(lockVal);                                        \
151     IX_ETH_ACC_STATS_INC(ixEthAccDataStats.addToSwQ);                           \
152     if ( (mbuf_list.pHead) == NULL )                                            \
153     {                                                                           \
154       (mbuf_list.pHead) = mbuf_to_add;                                          \
155       IX_ETH_ACC_MBUF_NEXT_PKT_CHAIN_MEMBER((mbuf_to_add)) = NULL;              \
156     }                                                                           \
157     else {                                                                      \
158       IX_ETH_ACC_MBUF_NEXT_PKT_CHAIN_MEMBER((mbuf_list.pTail)) = (mbuf_to_add); \
159       IX_ETH_ACC_MBUF_NEXT_PKT_CHAIN_MEMBER((mbuf_to_add)) = NULL;              \
160     }                                                                           \
161     (mbuf_list.pTail) = mbuf_to_add;                                            \
162     IX_ETH_ACC_DATA_PLANE_UNLOCK(lockVal);                                      \
163   } while (0)
164
165
166 #define IX_ETH_ACC_DATAPLANE_REMOVE_MBUF_FROM_Q_HEAD(mbuf_list,mbuf_to_rem)     \
167   do {                                                                          \
168     int lockVal;                                                                \
169     IX_ETH_ACC_DATA_PLANE_LOCK(lockVal);                                        \
170     if ( (mbuf_list.pHead) != NULL )                                            \
171     {                                                                           \
172       IX_ETH_ACC_STATS_INC(ixEthAccDataStats.removeFromSwQ);                    \
173       (mbuf_to_rem) = (mbuf_list.pHead) ;                                       \
174       (mbuf_list.pHead) = (IX_ETH_ACC_MBUF_NEXT_PKT_CHAIN_MEMBER((mbuf_to_rem)));\
175     }                                                                           \
176     else {                                                                      \
177       (mbuf_to_rem) = NULL;                                                     \
178     }                                                                           \
179     IX_ETH_ACC_DATA_PLANE_UNLOCK(lockVal);                                      \
180   } while (0)
181
182
183 /**
184  * @brief message handler QManager entries for NPE id => port ID conversion (NPE_B => 0, NPE_C => 1)
185  */
186 #define IX_ETH_ACC_PORT_TO_NPE_ID(port) \
187    ixEthAccPortData[(port)].npeId
188
189 #define IX_ETH_ACC_NPE_TO_PORT_ID(npe) ((npe == 0 ? 2 : (npe == 1 ? 0 : ( npe == 2 ? 1 : -1 ))))
190
191 #define IX_ETH_ACC_PORT_TO_TX_Q_ID(port)  \
192    ixEthAccPortData[(port)].ixEthAccTxData.txQueue
193
194 #define IX_ETH_ACC_PORT_TO_RX_FREE_Q_ID(port) \
195    ixEthAccPortData[(port)].ixEthAccRxData.rxFreeQueue
196
197 #define IX_ETH_ACC_PORT_TO_TX_Q_SOURCE(port)    (port == IX_ETH_PORT_1 ? IX_ETH_ACC_TX_FRAME_ENET0_Q_SOURCE : (port == IX_ETH_PORT_2 ? IX_ETH_ACC_TX_FRAME_ENET1_Q_SOURCE : IX_ETH_ACC_TX_FRAME_ENET2_Q_SOURCE))
198
199 #define IX_ETH_ACC_PORT_TO_RX_FREE_Q_SOURCE(port) (port == IX_ETH_PORT_1 ? IX_ETH_ACC_RX_FREE_BUFF_ENET0_Q_SOURCE : (port == IX_ETH_PORT_2 ? IX_ETH_ACC_RX_FREE_BUFF_ENET1_Q_SOURCE : IX_ETH_ACC_RX_FREE_BUFF_ENET2_Q_SOURCE ))
200
201 /* Flush the mbufs chain and all data pointed to by the mbuf */
202
203 #ifndef NDEBUG
204 #define IX_ETH_ACC_STATS_INC(x) (x++)
205 #else
206 #define IX_ETH_ACC_STATS_INC(x)
207 #endif
208
209 #define IX_ETH_ACC_MAX_TX_FRAMES_TO_SUBMIT 128
210
211 void ixEthRxFrameQMCallback(IxQMgrQId qId, IxQMgrCallbackId callbackId);
212 void ixEthRxMultiBufferQMCallback(IxQMgrQId qId, IxQMgrCallbackId callbackId);
213 void ixEthTxFrameDoneQMCallback(IxQMgrQId qId, IxQMgrCallbackId callbackId);
214
215 #endif /* IxEthAccDataPlane_p_H */
216
217
218 /**
219  *@}
220  */
221