1296177Sjhibbits/* Copyright (c) 2008-2011 Freescale Semiconductor, Inc.
2296177Sjhibbits * All rights reserved.
3296177Sjhibbits *
4296177Sjhibbits * Redistribution and use in source and binary forms, with or without
5296177Sjhibbits * modification, are permitted provided that the following conditions are met:
6296177Sjhibbits *     * Redistributions of source code must retain the above copyright
7296177Sjhibbits *       notice, this list of conditions and the following disclaimer.
8296177Sjhibbits *     * Redistributions in binary form must reproduce the above copyright
9296177Sjhibbits *       notice, this list of conditions and the following disclaimer in the
10296177Sjhibbits *       documentation and/or other materials provided with the distribution.
11296177Sjhibbits *     * Neither the name of Freescale Semiconductor nor the
12296177Sjhibbits *       names of its contributors may be used to endorse or promote products
13296177Sjhibbits *       derived from this software without specific prior written permission.
14296177Sjhibbits *
15296177Sjhibbits *
16296177Sjhibbits * ALTERNATIVELY, this software may be distributed under the terms of the
17296177Sjhibbits * GNU General Public License ("GPL") as published by the Free Software
18296177Sjhibbits * Foundation, either version 2 of that License or (at your option) any
19296177Sjhibbits * later version.
20296177Sjhibbits *
21296177Sjhibbits * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
22296177Sjhibbits * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23296177Sjhibbits * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24296177Sjhibbits * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
25296177Sjhibbits * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26296177Sjhibbits * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27296177Sjhibbits * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28296177Sjhibbits * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29296177Sjhibbits * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30296177Sjhibbits * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31296177Sjhibbits */
32296177Sjhibbits
33296177Sjhibbits/******************************************************************************
34296177Sjhibbits @File          fm_cc.h
35296177Sjhibbits
36296177Sjhibbits @Description   FM PCD CC ...
37296177Sjhibbits*//***************************************************************************/
38296177Sjhibbits#ifndef __FM_CC_H
39296177Sjhibbits#define __FM_CC_H
40296177Sjhibbits
41296177Sjhibbits#include "std_ext.h"
42296177Sjhibbits#include "error_ext.h"
43296177Sjhibbits#include "list_ext.h"
44296177Sjhibbits
45296177Sjhibbits#include "fm_pcd.h"
46296177Sjhibbits
47296177Sjhibbits
48296177Sjhibbits/***********************************************************************/
49296177Sjhibbits/*          Coarse classification defines                              */
50296177Sjhibbits/***********************************************************************/
51296177Sjhibbits
52296177Sjhibbits#define CC_PC_FF_MACDST                     0x00
53296177Sjhibbits#define CC_PC_FF_MACSRC                     0x01
54296177Sjhibbits#define CC_PC_FF_ETYPE                      0x02
55296177Sjhibbits
56296177Sjhibbits#define CC_PC_FF_TCI1                       0x03
57296177Sjhibbits#define CC_PC_FF_TCI2                       0x04
58296177Sjhibbits
59296177Sjhibbits#define CC_PC_FF_MPLS1                      0x06
60296177Sjhibbits#define CC_PC_FF_MPLS_LAST                  0x07
61296177Sjhibbits
62296177Sjhibbits#define CC_PC_FF_IPV4DST1                   0x08
63296177Sjhibbits#define CC_PC_FF_IPV4DST2                   0x16
64296177Sjhibbits#define CC_PC_FF_IPV4IPTOS_TC1              0x09
65296177Sjhibbits#define CC_PC_FF_IPV4IPTOS_TC2              0x17
66296177Sjhibbits#define CC_PC_FF_IPV4PTYPE1                 0x0A
67296177Sjhibbits#define CC_PC_FF_IPV4PTYPE2                 0x18
68296177Sjhibbits#define CC_PC_FF_IPV4SRC1                   0x0b
69296177Sjhibbits#define CC_PC_FF_IPV4SRC2                   0x19
70296177Sjhibbits#define CC_PC_FF_IPV4SRC1_IPV4DST1          0x0c
71296177Sjhibbits#define CC_PC_FF_IPV4SRC2_IPV4DST2          0x1a
72296177Sjhibbits#define CC_PC_FF_IPV4TTL                    0x29
73296177Sjhibbits
74296177Sjhibbits
75296177Sjhibbits#define CC_PC_FF_IPTOS_IPV6TC1_IPV6FLOW1    0x0d /*TODO - CLASS - what is it? TOS*/
76296177Sjhibbits#define CC_PC_FF_IPTOS_IPV6TC2_IPV6FLOW2    0x1b
77296177Sjhibbits#define CC_PC_FF_IPV6PTYPE1                 0x0e
78296177Sjhibbits#define CC_PC_FF_IPV6PTYPE2                 0x1c
79296177Sjhibbits#define CC_PC_FF_IPV6DST1                   0x0f
80296177Sjhibbits#define CC_PC_FF_IPV6DST2                   0x1d
81296177Sjhibbits#define CC_PC_FF_IPV6SRC1                   0x10
82296177Sjhibbits#define CC_PC_FF_IPV6SRC2                   0x1e
83296177Sjhibbits#define CC_PC_FF_IPV6HOP_LIMIT              0x2a
84296177Sjhibbits#define CC_PC_FF_GREPTYPE                   0x11
85296177Sjhibbits
86296177Sjhibbits#define CC_PC_FF_MINENCAP_PTYPE             0x12
87296177Sjhibbits#define CC_PC_FF_MINENCAP_IPDST             0x13
88296177Sjhibbits#define CC_PC_FF_MINENCAP_IPSRC             0x14
89296177Sjhibbits#define CC_PC_FF_MINENCAP_IPSRC_IPDST       0x15
90296177Sjhibbits
91296177Sjhibbits#define CC_PC_FF_L4PSRC                     0x1f
92296177Sjhibbits#define CC_PC_FF_L4PDST                     0x20
93296177Sjhibbits#define CC_PC_FF_L4PSRC_L4PDST              0x21
94296177Sjhibbits
95296177Sjhibbits#define CC_PC_FF_PPPPID                     0x05
96296177Sjhibbits
97296177Sjhibbits#define CC_PC_PR_SHIM1                      0x22
98296177Sjhibbits#define CC_PC_PR_SHIM2                      0x23
99296177Sjhibbits
100296177Sjhibbits#define CC_PC_GENERIC_WITHOUT_MASK          0x27
101296177Sjhibbits#define CC_PC_GENERIC_WITH_MASK             0x28
102296177Sjhibbits#define CC_PC_GENERIC_IC_GMASK              0x2B
103296177Sjhibbits#define CC_PC_GENERIC_IC_HASH_INDEXED       0x2C
104296177Sjhibbits
105296177Sjhibbits#define CC_PR_OFFSET                        0x25
106296177Sjhibbits#define CC_PR_WITHOUT_OFFSET                0x26
107296177Sjhibbits
108296177Sjhibbits#define CC_PC_PR_ETH_OFFSET                 19
109296177Sjhibbits#define CC_PC_PR_USER_DEFINED_SHIM1_OFFSET  16
110296177Sjhibbits#define CC_PC_PR_USER_DEFINED_SHIM2_OFFSET  17
111296177Sjhibbits#define CC_PC_PR_USER_LLC_SNAP_OFFSET       20
112296177Sjhibbits#define CC_PC_PR_VLAN1_OFFSET               21
113296177Sjhibbits#define CC_PC_PR_VLAN2_OFFSET               22
114296177Sjhibbits#define CC_PC_PR_PPPOE_OFFSET               24
115296177Sjhibbits#define CC_PC_PR_MPLS1_OFFSET               25
116296177Sjhibbits#define CC_PC_PR_MPLS_LAST_OFFSET           26
117296177Sjhibbits#define CC_PC_PR_IP1_OFFSET                 27
118296177Sjhibbits#define CC_PC_PR_IP_LAST_OFFSET             28
119296177Sjhibbits#define CC_PC_PR_MINENC_OFFSET              28
120296177Sjhibbits#define CC_PC_PR_L4_OFFSET                  30
121296177Sjhibbits#define CC_PC_PR_GRE_OFFSET                 29
122296177Sjhibbits#define CC_PC_PR_ETYPE_LAST_OFFSET          23
123296177Sjhibbits#define CC_PC_PR_NEXT_HEADER_OFFSET         31
124296177Sjhibbits
125296177Sjhibbits#define CC_PC_ILLEGAL                       0xff
126296177Sjhibbits#define CC_SIZE_ILLEGAL                     0
127296177Sjhibbits
128296177Sjhibbits#define FM_PCD_CC_KEYS_MATCH_TABLE_ALIGN    16
129296177Sjhibbits#define FM_PCD_CC_AD_TABLE_ALIGN            256
130296177Sjhibbits#define FM_PCD_CC_AD_ENTRY_SIZE             16
131296177Sjhibbits#define FM_PCD_CC_NUM_OF_KEYS               255
132296177Sjhibbits
133296177Sjhibbits#define FM_PCD_AD_RESULT_CONTRL_FLOW_TYPE   0x00000000
134296177Sjhibbits#define FM_PCD_AD_RESULT_DATA_FLOW_TYPE     0x80000000
135296177Sjhibbits#define FM_PCD_AD_RESULT_PLCR_DIS           0x20000000
136296177Sjhibbits#define FM_PCD_AD_RESULT_EXTENDED_MODE      0x80000000
137296177Sjhibbits#define FM_PCD_AD_RESULT_NADEN              0x20000000
138296177Sjhibbits#define FM_PCD_AD_RESULT_STATISTICS_EN      0x40000000
139296177Sjhibbits
140296177Sjhibbits
141296177Sjhibbits#define FM_PCD_AD_CONT_LOOKUP_TYPE          0x40000000
142296177Sjhibbits#define FM_PCD_AD_CONT_LOOKUP_LCL_MASK      0x00800000
143296177Sjhibbits
144296177Sjhibbits#define FM_PCD_AD_TYPE_MASK                 0xc0000000
145296177Sjhibbits#define FM_PCD_AD_OPCODE_MASK               0x0000000f
146296177Sjhibbits
147296177Sjhibbits#define FM_PCD_AD_PROFILEID_FOR_CNTRL_SHIFT 16
148296177Sjhibbits
149296177Sjhibbits#define GLBL_MASK_FOR_HASH_INDEXED          0xfff00000
150296177Sjhibbits#define CC_GLBL_MASK_SIZE                   4
151296177Sjhibbits
152296177Sjhibbitstypedef uint32_t ccPrivateInfo_t; /**< private info of CC: */
153296177Sjhibbits
154296177Sjhibbits#define CC_PRIVATE_INFO_NONE                       0
155296177Sjhibbits#define CC_PRIVATE_INFO_IC_HASH_INDEX_LOOKUP       0x80000000
156296177Sjhibbits#define CC_PRIVATE_INFO_IC_HASH_EXACT_MATCH        0x40000000
157296177Sjhibbits#define CC_PRIVATE_INFO_IC_KEY_EXACT_MATCH         0x20000000
158296177Sjhibbits#define CC_PRIVATE_INFO_IC_DEQ_FQID_INDEX_LOOKUP   0x10000000
159296177Sjhibbits
160296177Sjhibbits/***********************************************************************/
161296177Sjhibbits/*          Memory map                                                 */
162296177Sjhibbits/***********************************************************************/
163296177Sjhibbits#if defined(__MWERKS__) && !defined(__GNUC__)
164296177Sjhibbits#pragma pack(push,1)
165296177Sjhibbits#endif /* defined(__MWERKS__) && ... */
166296177Sjhibbits#define MEM_MAP_START
167296177Sjhibbits
168296177Sjhibbitstypedef _Packed struct {
169296177Sjhibbits    volatile uint32_t fqid;
170296177Sjhibbits    volatile uint32_t plcrProfile;
171296177Sjhibbits    volatile uint32_t nia;
172296177Sjhibbits    volatile uint32_t  res;
173296177Sjhibbits} _PackedType t_AdOfTypeResult;
174296177Sjhibbits
175296177Sjhibbitstypedef _Packed struct {
176296177Sjhibbits    volatile uint32_t ccAdBase;
177296177Sjhibbits    volatile uint32_t matchTblPtr;
178296177Sjhibbits    volatile uint32_t pcAndOffsets;
179296177Sjhibbits    volatile uint32_t gmask;
180296177Sjhibbits} _PackedType t_AdOfTypeContLookup;
181296177Sjhibbits
182296177Sjhibbitstypedef _Packed union {
183296177Sjhibbits    volatile t_AdOfTypeResult        adResult;
184296177Sjhibbits    volatile t_AdOfTypeContLookup    adContLookup;
185296177Sjhibbits} _PackedType t_Ad;
186296177Sjhibbits
187296177Sjhibbits#define MEM_MAP_END
188296177Sjhibbits#if defined(__MWERKS__) && !defined(__GNUC__)
189296177Sjhibbits#pragma pack(pop)
190296177Sjhibbits#endif /* defined(__MWERKS__) && ... */
191296177Sjhibbits
192296177Sjhibbits
193296177Sjhibbits/***********************************************************************/
194296177Sjhibbits/*  Driver's internal structures                                        */
195296177Sjhibbits/***********************************************************************/
196296177Sjhibbits
197296177Sjhibbitstypedef enum e_ModifyState {
198296177Sjhibbits    e_MODIFY_STATE_ADD = 0,
199296177Sjhibbits    e_MODIFY_STATE_REMOVE,
200296177Sjhibbits    e_MODIFY_STATE_CHANGE
201296177Sjhibbits} e_ModifyState;
202296177Sjhibbits
203296177Sjhibbitstypedef struct {
204296177Sjhibbits    t_FmPcdCcNextEngineParams   nextEngineParams;
205296177Sjhibbits    uint32_t                    requiredAction;
206296177Sjhibbits    uint32_t                    shadowAction;
207296177Sjhibbits} t_FmPcdCcNextEngineAndRequiredActionParams;
208296177Sjhibbits
209296177Sjhibbitstypedef struct {
210296177Sjhibbits    t_Handle         p_Ad;
211296177Sjhibbits    e_FmPcdEngine    fmPcdEngine;
212296177Sjhibbits    bool             adAllocated;
213296177Sjhibbits    bool             isTree;
214296177Sjhibbits
215296177Sjhibbits    uint32_t    myInfo;
216296177Sjhibbits    t_List      *h_CcNextNodesLst;
217296177Sjhibbits    t_Handle    h_AdditionalInfo;
218296177Sjhibbits    t_Handle    h_Node;
219296177Sjhibbits} t_FmPcdModifyCcAdditionalParams;
220296177Sjhibbits
221296177Sjhibbitstypedef struct {
222296177Sjhibbits    t_Handle p_AdTableNew;
223296177Sjhibbits    t_Handle p_KeysMatchTableNew;
224296177Sjhibbits    t_Handle p_AdTableOld;
225296177Sjhibbits    t_Handle p_KeysMatchTableOld;
226296177Sjhibbits    uint16_t numOfKeys;
227296177Sjhibbits    t_Handle h_CurrentNode;
228296177Sjhibbits    uint16_t keyIndex;
229296177Sjhibbits    t_Handle h_NodeForAdd;
230296177Sjhibbits    t_Handle h_NodeForRmv;
231296177Sjhibbits    t_Handle h_ManipForRmv;
232296177Sjhibbits    bool     tree;
233296177Sjhibbits
234296177Sjhibbits    t_FmPcdCcNextEngineAndRequiredActionParams nextEngineAndRequiredAction[256];
235296177Sjhibbits} t_FmPcdModifyCcKeyAdditionalParams;
236296177Sjhibbits
237296177Sjhibbitstypedef struct {
238296177Sjhibbits    t_Handle h_Manip;
239296177Sjhibbits    t_Handle h_CcNode;
240296177Sjhibbits} t_CcNextEngineInfo;
241296177Sjhibbits
242296177Sjhibbitstypedef struct {
243296177Sjhibbits    uint16_t    numOfKeys;
244296177Sjhibbits    bool        glblMaskUpdated;
245296177Sjhibbits    t_Handle    p_GlblMask;
246296177Sjhibbits    bool        lclMask;
247296177Sjhibbits    uint8_t     parseCode;
248296177Sjhibbits    uint8_t     offset;
249296177Sjhibbits    uint8_t     prsArrayOffset;
250296177Sjhibbits    bool        ctrlFlow;
251296177Sjhibbits    uint8_t     owners;
252296177Sjhibbits
253296177Sjhibbits    uint8_t     ccKeySizeAccExtraction;
254296177Sjhibbits    uint8_t     sizeOfExtraction;
255296177Sjhibbits    uint8_t     glblMaskSize;
256296177Sjhibbits
257296177Sjhibbits    t_Handle    h_KeysMatchTable;
258296177Sjhibbits    t_Handle    h_AdTable;
259296177Sjhibbits
260296177Sjhibbits    t_List      ccPrevNodesLst;
261296177Sjhibbits
262296177Sjhibbits    t_List      ccTreeIdLst;
263296177Sjhibbits    t_List      ccTreesLst;
264296177Sjhibbits
265296177Sjhibbits    t_Handle    h_FmPcd;
266296177Sjhibbits    uint32_t    shadowAction;
267296177Sjhibbits    bool        modifiedState;
268296177Sjhibbits    uint8_t     userSizeOfExtraction;
269296177Sjhibbits
270296177Sjhibbits    t_FmPcdCcNextEngineAndRequiredActionParams nextEngineAndRequiredAction[256];
271296177Sjhibbits} t_FmPcdCcNode;
272296177Sjhibbits
273296177Sjhibbitstypedef struct {
274296177Sjhibbits    t_FmPcdCcNode       *p_FmPcdCcNode;
275296177Sjhibbits    bool                occupied;
276296177Sjhibbits    uint8_t             owners;
277296177Sjhibbits    volatile bool       lock;
278296177Sjhibbits} t_FmPcdCcNodeArray;
279296177Sjhibbits
280296177Sjhibbitstypedef struct {
281296177Sjhibbits    uint8_t             numOfEntriesInGroup;
282296177Sjhibbits    uint32_t            totalBitsMask;
283296177Sjhibbits    uint8_t             baseGroupEntry;
284296177Sjhibbits} t_FmPcdCcGroupParam;
285296177Sjhibbits
286296177Sjhibbitstypedef struct {
287296177Sjhibbits    uint8_t             netEnvId;
288296177Sjhibbits    uintptr_t           ccTreeBaseAddr;
289296177Sjhibbits    uint8_t             numOfGrps;
290296177Sjhibbits    t_FmPcdCcGroupParam fmPcdGroupParam[FM_PCD_MAX_NUM_OF_CC_GROUPS];
291296177Sjhibbits    t_List              fmPortsLst;
292296177Sjhibbits    volatile bool       lock;
293296177Sjhibbits    uint8_t             numOfEntries;
294296177Sjhibbits    uint8_t             owners;
295296177Sjhibbits    t_Handle            *fmPcdCcSavedManipParams[256];
296296177Sjhibbits    bool                modifiedState;
297296177Sjhibbits    uint32_t            requiredAction;
298296177Sjhibbits    t_FmPcdCcNextEngineAndRequiredActionParams nextEngineAndRequiredAction[FM_PCD_MAX_NUM_OF_KEYS];
299296177Sjhibbits} t_FmPcdCcTree;
300296177Sjhibbits
301296177Sjhibbitstypedef struct {
302296177Sjhibbits    t_FmPcdCcTree       *p_FmPcdCcTree;
303296177Sjhibbits    bool                occupied;
304296177Sjhibbits    uint8_t             owners;
305296177Sjhibbits    volatile bool       lock;
306296177Sjhibbits} t_FmPcdCcTreeArray;
307296177Sjhibbits
308296177Sjhibbits
309296177Sjhibbitsbool FmPcdManipIsManipNode(t_Handle h_Ad);
310296177Sjhibbits
311296177Sjhibbits
312296177Sjhibbits#endif /* __FM_CC_H */
313