/*******************************************************************************
Copyright (C) Marvell International Ltd. and its affiliates

This software file (the "File") is owned and distributed by Marvell
International Ltd. and/or its affiliates ("Marvell") under the following
alternative licensing terms.  Once you have made an election to distribute the
File under one of the following license alternatives, please (i) delete this
introductory statement regarding license alternatives, (ii) delete the two
license alternatives that you have not elected to use and (iii) preserve the
Marvell copyright notice above.

********************************************************************************
Marvell Commercial License Option

If you received this File from Marvell and you have entered into a commercial
license agreement (a "Commercial License") with Marvell, the File is licensed
to you under the terms of the applicable Commercial License.

********************************************************************************
Marvell GPL License Option

If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File in accordance with the terms and conditions of the General
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
available along with the File in the license.txt file or by writing to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.

THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
DISCLAIMED.  The GPL License provides additional details about this warranty
disclaimer.
********************************************************************************
Marvell BSD License Option

If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File under the following licensing terms.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

    *   Redistributions of source code must retain the above copyright notice,
	this list of conditions and the following disclaimer.

    *   Redistributions in binary form must reproduce the above copyright
	notice, this list of conditions and the following disclaimer in the
	documentation and/or other materials provided with the distribution.

    *   Neither the name of Marvell nor the names of its contributors may be
	used to endorse or promote products derived from this software without
	specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*******************************************************************************/

#ifndef __MV_PRS_HW_H__
#define __MV_PRS_HW_H__

#include "mvTypes.h"
#include "mvCommon.h"
#include "mvOs.h"
#include "../common/mvPp2ErrCode.h"
#include "../common/mvPp2Common.h"
#include "../gbe/mvPp2GbeRegs.h"
/************************** Parser HW Configuration ***********************/

/************************** Parser Registers ******************************/

#define MV_PP2_PRS_INIT_LOOKUP_REG              (MV_PP2_REG_BASE + 0x1000)

#define MV_PP2_PRS_PORT_LU_BITS                 4
#define MV_PP2_PRS_PORT_LU_MAX			((1 << MV_PP2_PRS_PORT_LU_BITS) - 1)
#define MV_PP2_PRS_PORT_LU_MASK(port)           (MV_PP2_PRS_PORT_LU_MAX << ((port) * MV_PP2_PRS_PORT_LU_BITS))
#define MV_PP2_PRS_PORT_LU_VAL(port, val)       ((val) << ((port) * MV_PP2_PRS_PORT_LU_BITS))

/*-------------------------------------------------------------------------------*/

#define MV_PP2_PRS_INIT_OFFS_0_REG              (MV_PP2_REG_BASE + 0x1004)
#define MV_PP2_PRS_INIT_OFFS_1_REG              (MV_PP2_REG_BASE + 0x1008)

#define MV_PP2_PRS_INIT_OFFS_REG(port)         	(MV_PP2_PRS_INIT_OFFS_0_REG + ((port) & 4))
#define MV_PP2_PRS_INIT_OFF_BITS					6
#define MV_PP2_PRS_INIT_OFF_FIXED_BITS		8 /*only for offsets calculations*/
#define MV_PP2_PRS_INIT_OFF_MAX			((1 << MV_PP2_PRS_INIT_OFF_BITS) - 1)
#define MV_PP2_PRS_INIT_OFF_MASK(port)		(MV_PP2_PRS_INIT_OFF_MAX << (((port) % 4) * MV_PP2_PRS_INIT_OFF_FIXED_BITS))
#define MV_PP2_PRS_INIT_OFF_VAL(port, val)	((val) << (((port) % 4) * MV_PP2_PRS_INIT_OFF_FIXED_BITS))

/*-------------------------------------------------------------------------------*/

#define MV_PP2_PRS_MAX_LOOP_0_REG		(MV_PP2_REG_BASE + 0x100c)
#define MV_PP2_PRS_MAX_LOOP_1_REG		(MV_PP2_REG_BASE + 0x1010)

#define MV_PP2_PRS_MAX_LOOP_REG(port)		(MV_PP2_PRS_MAX_LOOP_0_REG + ((port) & 4))
#define MV_PP2_PRS_MAX_LOOP_BITS                8
#define MV_PP2_PRS_MAX_LOOP_MAX			((1 << MV_PP2_PRS_MAX_LOOP_BITS) - 1) /*MAX VALID VALUE*/
#define MV_PP2_PRS_MAX_LOOP_MIN			1 /*MIN VALID VALUE*/
#define MV_PP2_PRS_MAX_LOOP_MASK(port)		(MV_PP2_PRS_MAX_LOOP_MAX << (((port) % 4) * MV_PP2_PRS_MAX_LOOP_BITS))
#define MV_PP2_PRS_MAX_LOOP_VAL(port, val)      ((val) << (((port) % 4) * MV_PP2_PRS_MAX_LOOP_BITS))

/*-------------------------------------------------------------------------------*/

#define MV_PP2_PRS_INTR_CAUSE_REG		(MV_PP2_REG_BASE + 0x1020)
#define MV_PP2_PRS_INTR_MASK_REG		(MV_PP2_REG_BASE + 0x1024)

#define PRS_INTR_MISS				0
#define PRS_INTR_MAX_LOOPS			1
#define PRS_INTR_INV_OFF			2
#define PRS_INTR_PARITY				4
#define PRS_INTR_SRAM_PARITY			5

#define PRS_INTR_MISS_MASK			(1 << PRS_INTR_MISS)
#define PRS_INTR_MAX_LOOP_MASK			(1 << PRS_INTR_MAX_LOOPS)
#define PRS_INTR_INV_OFF_MASK			(1 << PRS_INTR_INV_OFF)
#define PRS_INTR_PARITY_MASK			(1 << PRS_INTR_PARITY)
#define PRS_INTR_SRAM_PARITY_MASK		(1 << PRS_INTR_SRAM_PARITY)

/*-------------------------------------------------------------------------------*/

#define MV_PP2_PRS_TCAM_IDX_REG			(MV_PP2_REG_BASE + 0x1100)
#define MV_PP2_PRS_TCAM_DATA_REG(idx)		(MV_PP2_REG_BASE + 0x1104 + (idx) * 4)
#define MV_PP2_PRS_TCAM_DATA0_REG		(MV_PP2_REG_BASE + 0x1104)
#define MV_PP2_PRS_TCAM_DATA1_REG		(MV_PP2_REG_BASE + 0x1108)
#define MV_PP2_PRS_TCAM_DATA2_REG		(MV_PP2_REG_BASE + 0x110c)
#define MV_PP2_PRS_TCAM_DATA3_REG		(MV_PP2_REG_BASE + 0x1110)
#define MV_PP2_PRS_TCAM_DATA4_REG		(MV_PP2_REG_BASE + 0x1114)
#define MV_PP2_PRS_TCAM_DATA5_REG		(MV_PP2_REG_BASE + 0x1118)

#define MV_PP2_PRS_TCAM_DATA_OFFS		0
#define MV_PP2_PRS_TCAM_MASK_OFFS		16
/*-------------------------------------------------------------------------------*/

#define MV_PP2_PRS_SRAM_IDX_REG			(MV_PP2_REG_BASE + 0x1200)
#define MV_PP2_PRS_SRAM_DATA_REG(idx)		(MV_PP2_REG_BASE + 0x1204 + (idx) * 4)
#define MV_PP2_PRS_SRAM_DATA0_REG		(MV_PP2_REG_BASE + 0x1204)
#define MV_PP2_PRS_SRAM_DATA1_REG		(MV_PP2_REG_BASE + 0x1208)
#define MV_PP2_PRS_SRAM_DATA2_REG		(MV_PP2_REG_BASE + 0x120c)
#define MV_PP2_PRS_SRAM_DATA3_REG		(MV_PP2_REG_BASE + 0x1210)
/*-------------------------------------------------------------------------------*/
#define MV_PP2_PRS_EXP_REG			(MV_PP2_REG_BASE + 0x1214)
#define MV_PP2_PRS_EXP_MISS			0
#define MV_PP2_PRS_EXP_EXEED			1
#define MV_PP2_PRS_EXP_OF			2

/*-------------------------------------------------------------------------------*/
#define MV_PP2_PRS_TCAM_CTRL_REG		(MV_PP2_REG_BASE + 0x1230)
#define MV_PP2_PRS_TCAM_CTRL_EN			0

/*-------------------------------------------------------------------------------*/
/*PPv2.1 MASS 3.20 new feature */
#define MV_PP2_PRS_TCAM_HIT_IDX_REG		(MV_PP2_REG_BASE + 0x1240)
/*-------------------------------------------------------------------------------*/
/*PPv2.1 MASS 3.20 new feature */
#define MV_PP2_PRS_TCAM_HIT_CNT_REG		(MV_PP2_REG_BASE + 0x1244)
#define MV_PP2_PRS_TCAM_HIT_CNT_BITS		16
#define MV_PP2_PRS_TCAM_HIT_CNT_OFFS		0
#define MV_PP2_PRS_TCAM_HIT_CNT_MASK		\
	(((1 << MV_PP2_PRS_TCAM_HIT_CNT_BITS) - 1) << MV_PP2_PRS_TCAM_HIT_CNT_OFFS)

/*-------------------------------------------------------------------------------*/
/*				TCAM 						*/
/*-------------------------------------------------------------------------------*/
#define AI_BITS  				8
#define AI_MASK					((1 << AI_BITS) - 1)
#define AI_DONE_BIT				7
#define AI_DONE					(1 << 7)

#define PORT_BITS  				8
#define PORT_MASK				((1 << PORT_BITS) - 1)

#define LU_BITS  				4
#define LU_MASK					((1 << LU_BITS) - 1)

/****************************************************************/
/*			endians support				*/
/****************************************************************/

/*
  TCAM_MASK_OFFS
  return tcam fileds (AI/LKP_ID/PRT_ID) mask offset
  not relevant for TCAM_DATA bytes
  _offs_: native offset if LE
	  swapped offset if BE
*/

#if defined(MV_CPU_LE)
	#define TCAM_MASK_OFFS(_offs_)		((_offs_) + 2)
#else
	#define TCAM_MASK_OFFS(_offs_)		((_offs_) - 2)
#endif

/************************* TCAM structure **********************/
/*
 ____________________________________________
|  LKP ID  | PORT ID |    AI  | HEADER DATA  |
| 4 bits   | 1 byte  | 1 byte |   8 byte     |
----------------------------------------------
reg 5 --> reg 0
*/

#define TCAM_DATA_OFFS				0
#define TCAM_DATA_SIZE				8 /*bytes*/
#define TCAM_DATA_MAX				(TCAM_DATA_SIZE - 1) /*bytes*/
#define TCAM_DATA_WORD_MAX			((TCAM_DATA_SIZE / 4) - 1) /*words*/
#define TCAM_AI_BYTE				HW_BYTE_OFFS(16)

#define TCAM_PORT_BYTE				HW_BYTE_OFFS(17)

#define TCAM_LU_BYTE				HW_BYTE_OFFS(20)

/* Special bit in the TCAM register */
#define TCAM_INV_BIT				31
#define TCAM_INV_MASK				(1 << TCAM_INV_BIT)
#define TCAM_VALID				0
#define TCAM_INVALID				1
#define TCAM_INV_WORD				5

/************************* SRAM structure **********************/
/* convert bit offset to byte offset */
#define SRAM_BIT_TO_BYTE(_bit_)			HW_BYTE_OFFS((_bit_) / 8)


#define SRAM_RI_OFFS  					0
#define SRAM_RI_BITS  					32
#define SRAM_RI_MASK  					((1 << SRAM_RI_BITS) - 1)
#define SRAM_RI_WORD  					(SRAM_RI_OFFS / DWORD_BITS_LEN)

#define SRAM_RI_CTRL_OFFS  				32
#define SRAM_RI_CTRL_BITS  				32
#define SRAM_RI_CTRL_WORD  				(SRAM_RI_CTRL_OFFS / DWORD_BITS_LEN)

#define SRAM_SHIFT_OFFS  				64 /*NEXT_LKP*/
#define SRAM_SHIFT_BITS					8
#define SRAM_SHIFT_MASK					((1 << SRAM_SHIFT_BITS) - 1)

#define SRAM_SHIFT_SIGN_BIT  				72 /*NEXT_LKP_SIGN*/

#define SRAM_OFFSET_OFFS				73 /*UDF_OFF*/
#define SRAM_OFFSET_BITS				8
#define SRAM_OFFSET_MASK				((1 << SRAM_OFFSET_BITS) - 1)

#define SRAM_OFFSET_SIGN_BIT  				81 /*UDF_SIGN*/

#define SRAM_OFFSET_TYPE_OFFS  				82 /*UDF_TYPE*/
#define SRAM_OFFSET_TYPE_BITS  				3
#define SRAM_OFFSET_TYPE_MASK  				((1 << SRAM_OFFSET_TYPE_BITS) - 1)
#define SRAM_OFFSET_TYPE_PKT				0
#define SRAM_OFFSET_TYPE_L3				1
#define SRAM_OFFSET_TYPE_IPV6_PROTO		2
#define SRAM_OFFSET_TYPE_L4				4

#define SRAM_OP_SEL_OFFS  				85
#define SRAM_OP_SEL_BITS  				5
#define SRAM_OP_SEL_MASK  				((1 << SRAM_OP_SEL_BITS) - 1)

#define SRAM_OP_SEL_SHIFT_OFFS				85
#define SRAM_OP_SEL_SHIFT_BITS				2
#define SRAM_OP_SEL_SHIFT_MASK  			((1 << SRAM_OP_SEL_SHIFT_BITS) - 1)
#define SRAM_OP_SEL_SHIFT_ADD				1
#define SRAM_OP_SEL_SHIFT_IP4_ADD			2
#define SRAM_OP_SEL_SHIFT_IP6_ADD			3

#define SRAM_OP_SEL_OFFSET_OFFS				87
#define SRAM_OP_SEL_OFFSET_BITS				2
#define SRAM_OP_SEL_OFFSET_MASK  			((1 << SRAM_OP_SEL_OFFSET_BITS) - 1)
#define SRAM_OP_SEL_OFFSET_ADD				0
#define SRAM_OP_SEL_OFFSET_LKP_ADD			1
#define SRAM_OP_SEL_OFFSET_IP4_ADD			2
#define SRAM_OP_SEL_OFFSET_IP6_ADD			3

#define SRAM_OP_SEL_BASE_OFFS				89
#define SRAM_OP_SEL_BASE_BITS				1
#define SRAM_OP_SEL_BASE_MASK				((1 << SRAM_OP_SEL_BASE_BITS) - 1)
#define SRAM_OP_SEL_BASE_CURRENT			0
#define SRAM_OP_SEL_BASE_INIT				1

#define SRAM_AI_OFFS					90
#define SRAM_AI_BITS					8
#define SRAM_AI_MASK					((1 << SRAM_AI_BITS) - 1)
#define SRAM_AI_WORD					(SRAM_AI_OFFS / DWORD_BITS_LEN)

#define SRAM_AI_CTRL_OFFS				98
#define SRAM_AI_CTRL_BITS				8
#define SRAM_AI_CTRL_MASK				((1 << SRAM_AI_CTRL_BITS) - 1)
#define SRAM_AI_CTRL_WORD				(SRAM_AI_CTRL_OFFS / DWORD_BITS_LEN)

#define SRAM_NEXT_LU_OFFS				106 /*LOOKUP ID*/
#define SRAM_NEXT_LU_BITS				4
#define SRAM_NEXT_LU_MASK				((1 << SRAM_NEXT_LU_BITS) - 1)

#define SRAM_LU_DONE_BIT				110
#define SRAM_LU_GEN_BIT					111
/*-------------------------------------------------------------------------------*/

/* Result info bits assigment */
#define RI_MAC_ME_BIT					0
#define RI_MAC_ME_MASK					(1 << RI_MAC_ME_BIT)

#define RI_DSA_BIT                 			1
#define RI_DSA_MASK        				(1 << RI_DSA_BIT)

/* bits 2 - 3 */
#define RI_VLAN_OFFS					2
#define RI_VLAN_BITS					2
#define RI_VLAN_MASK					(((1 << RI_VLAN_BITS) - 1) << RI_VLAN_OFFS)
#define RI_VLAN_NONE          				(0 << RI_VLAN_OFFS)
#define RI_VLAN_SINGLE          			(1 << RI_VLAN_OFFS)
#define RI_VLAN_DOUBLE          			(2 << RI_VLAN_OFFS)
#define RI_VLAN_TRIPLE          			(3 << RI_VLAN_OFFS)

/* bits 4 - 6 */
#define RI_CPU_CODE_OFFS           			4 /* bits 4 - 6 */
#define RI_CPU_CODE_BITS				3
#define RI_CPU_CODE_MASK				(((1 << RI_CPU_CODE_BITS) - 1) << RI_CPU_CODE_OFFS)
#define RI_CPU_CODE_RX_SPEC_VAL				3 /* bit 0 for IGMP, bit 1 for OMCI/eOAM */
#define RI_CPU_CODE_RX_SPEC				(RI_CPU_CODE_RX_SPEC_VAL << RI_CPU_CODE_OFFS)

/* bits 7 - 8 */
#define RI_L2_VER_OFFS					7
#define RI_L2_VER_BITS					2
#define RI_L2_VER_MASK					(((1 << RI_L2_VER_BITS) - 1) << RI_L2_VER_OFFS)
#define RI_L2_LLC               			(0 << RI_L2_VER_OFFS)
#define RI_L2_LLC_SNAP          			(1 << RI_L2_VER_OFFS)
#define RI_L2_ETH2             				(2 << RI_L2_VER_OFFS)
#define RI_L2_OTHER             			(3 << RI_L2_VER_OFFS)

/* bits 9 - 10 */
#define RI_L2_CAST_OFFS					9
#define RI_L2_CAST_BITS					2
#define RI_L2_CAST_MASK					(((1 << RI_L2_CAST_BITS) - 1) << RI_L2_CAST_OFFS)
#define RI_L2_UCAST					(0 << RI_L2_CAST_OFFS)
#define RI_L2_MCAST					(1 << RI_L2_CAST_OFFS)
#define RI_L2_BCAST					(2 << RI_L2_CAST_OFFS)
#define RI_L2_RESERVED					(3 << RI_L2_CAST_OFFS)

/* bit 11 */
#define RI_PPPOE_BIT					11
#define RI_PPPOE_MASK					(1 << RI_PPPOE_BIT)

/* bits 12 - 14 */
#define RI_L3_PROTO_OFFS				12
#define RI_L3_PROTO_BITS				3
#define RI_L3_PROTO_MASK				(((1 << RI_L3_PROTO_BITS) - 1) << RI_L3_PROTO_OFFS)
#define RI_L3_UN              				(0 << RI_L3_PROTO_OFFS)
#define RI_L3_IP4            				(1 << RI_L3_PROTO_OFFS)
#define RI_L3_IP4_OPT          				(2 << RI_L3_PROTO_OFFS)
#define RI_L3_IP4_OTHER       				(3 << RI_L3_PROTO_OFFS)
#define RI_L3_IP6         				(4 << RI_L3_PROTO_OFFS)
#define RI_L3_IP6_EXT          				(5 << RI_L3_PROTO_OFFS)
#define RI_L3_ARP					(6 << RI_L3_PROTO_OFFS)
#define RI_L3_RESERVED					(7 << RI_L3_PROTO_OFFS)


/* bits 15 - 16 */
#define RI_L3_ADDR_OFFS       				15
#define RI_L3_ADDR_BITS       				2
#define RI_L3_ADDR_MASK					(((1 << RI_L3_ADDR_BITS) - 1) << RI_L3_ADDR_OFFS)
#define RI_L3_UCAST            				(0 << RI_L3_ADDR_OFFS)
#define RI_L3_MCAST            				(1 << RI_L3_ADDR_OFFS)
#define RI_L3_ANYCAST					(2 << RI_L3_ADDR_OFFS)
#define RI_L3_BCAST					(3 << RI_L3_ADDR_OFFS)

/* bit 17 */
#define RI_IP_FRAG_BIT					17
#define RI_IP_FRAG_MASK					(1 << RI_IP_FRAG_BIT)

/* Bits 18 - 19 */
#define RI_UDF2_OFFS					18
#define RI_UDF2_BITS					2
#define RI_UDF2_MASK					(((1 << RI_UDF2_BITS) - 1) << RI_UDF2_OFFS)

/* Bits 20 - 21 */
#define RI_UDF3_OFFS					20
#define RI_UDF3_BITS					2
#define RI_UDF3_MASK					(((1 << RI_UDF3_BITS) - 1) << RI_UDF3_OFFS)
#define RI_UDF3_RX_SPEC_VAL				2
#define RI_UDF3_RX_SPECIAL				(RI_UDF3_RX_SPEC_VAL << RI_UDF3_OFFS)

/* Bits 22 - 24 */
#define RI_L4_PROTO_OFFS				22
#define RI_L4_PROTO_BITS				3
#define RI_L4_PROTO_MASK				(((1 << RI_L4_PROTO_BITS) - 1) << RI_L4_PROTO_OFFS)
#define RI_L4_UN					(0 << RI_L4_PROTO_OFFS)
#define RI_L4_TCP					(1 << RI_L4_PROTO_OFFS)
#define RI_L4_UDP					(2 << RI_L4_PROTO_OFFS)
#define RI_L4_OTHER					(3 << RI_L4_PROTO_OFFS)
									/* 3-7 user defined */
/* Bits 25 - 26 */
#define RI_UDF5_OFFS					25
#define RI_UDF5_BITS					2
#define RI_UDF5_MASK					(((1 << RI_UDF5_BITS) - 1) << RI_UDF5_OFFS)

/* Bits 27 - 28 */
#define RI_UDF6_OFFS					27
#define RI_UDF6_BITS					2
#define RI_UDF6_MASK					(((1 << RI_UDF6_BITS) - 1) << RI_UDF6_OFFS)

/* Bits 29 - 30 */
#define RI_UDF7_OFFS					29
#define RI_UDF7_BITS					2
#define RI_UDF7_MASK					(((1 << RI_UDF7_BITS) - 1) << RI_UDF7_OFFS)
#define RI_UDF7_IP6_LITE				(1 << RI_UDF7_OFFS)/* Indicates DS lite, in A0 version */

/* bit 31 - drop */
#define RI_DROP_BIT					31
#define RI_DROP_MASK					(1 << RI_DROP_BIT)
/*---------------------------------------------------------------------------*/

/************* Offfset types *****************/
#define MV_PP2_PKT_OFFSET				0
#define MV_PP2_L3_OFFSET				1
#define MV_PP2_IP6_OFFSET				2
#define MV_PP2_UDF3_OFFSET				3
#define MV_PP2_L4_OFFSET				4
#define MV_PP2_UDF5_OFFSET				5
#define MV_PP2_UDF6_OFFSET				6
#define MV_PP2_UDF7_OFFSET				7


/*-------------------------------------------------------------------------------*/
/* 				Parser Shadow					 */
/*-------------------------------------------------------------------------------*/

#define PRS_TEXT_SIZE					20

typedef struct {
	int             valid;
	int		lu;
	unsigned char   text[PRS_TEXT_SIZE];
	int		udf;
	unsigned	ri;
	unsigned	riMask;
	MV_BOOL		finish;
} PRS_SHADOW_ENTRY;


void mvPp2PrsShadowSet(int index, int lu, char *text);
void mvPp2PrsShadowLuSet(int index, int lu);
int mvPp2PrsShadowUdf(int index);
void mvPp2PrsShadowUdfSet(int index, int udf);
unsigned int mvPp2PrsShadowRi(int index);
unsigned int mvPp2PrsShadowRiMask(int index);
void mvPp2PrsShadowRiSet(int index, unsigned int ri, unsigned int riMask);
void mvPp2PrsShadowFinSet(int index, MV_BOOL finish); /* set bit 111 (GEN_BIT) in SRAM */
MV_BOOL mvPp2PrsShadowFin(int index);
void mvPp2PrsShadowClear(int index);
void mvPp2PrsShadowClearAll(void);
int mvPrsFlowIdGet(int flowId);
void mvPrsFlowIdSet(int flowId);
void mvPrsFlowIdClear(int flowId);
void mvPrsFlowIdClearAll(void);
int mvPrsFlowIdDump(void);
int mvPp2PrsShadowLu(int index);
int mvPp2PrsShadowIsValid(int index);
int mvPp2PrsTcamFirstFree(int start, int end);


/*-------------------------------------------------------------------------------*/
/* 				Parser SW entry 				 */
/*-------------------------------------------------------------------------------*/

/* Parser Public TCAM APIs */
#define MV_PP2_PRS_TCAM_SIZE				(256)

#define MV_PP2_PRS_FLOW_ID_SIZE				(64)
#define MV_PP2_PRS_FIRST_FLOW_ID			(8) /* Flow ID 0~7 are reserved by LSP */
#define MV_PP2_PRS_LAST_FLOW_ID				(64 - 1 - 4) /* Flow ID 60~63 are reserved by HW */

#define MV_PP2_PRC_TCAM_WORDS				6
#define MV_PP2_PRC_SRAM_WORDS				4

#define PRS_SRAM_FMT					"%4.4x %8.8x %8.8x %8.8x"
#define PRS_SRAM_VAL(p)					p[3] & 0xFFFF, p[2], p[1], p[0]

typedef union mvPp2TcamEntry {
	MV_U32 word[MV_PP2_PRC_TCAM_WORDS];
	MV_U8  byte[MV_PP2_PRC_TCAM_WORDS * 4];
} MV_PP2_TCAM_ENTRY;

typedef union mvPp2SramEntry {
	MV_U32 word[MV_PP2_PRC_SRAM_WORDS];
	MV_U8  byte[MV_PP2_PRC_SRAM_WORDS * 4];
} MV_PP2_SRAM_ENTRY;


typedef struct mvPp2PrsEntry {
	unsigned int index;
	MV_PP2_TCAM_ENTRY tcam;
	MV_PP2_SRAM_ENTRY sram;
} MV_PP2_PRS_ENTRY;


/*-------------------------------------------------------------------------------*/
/* 			Parser Public initialization APIs			 */
/*-------------------------------------------------------------------------------*/

/*
 *mvPp2PrsHwInvAll - sign all tcam entries as invalid
*/
int mvPp2PrsHwInvAll(void);

/*
 *mvPp2PrsHwClearAll - clear all tcam and sram entries
*/
int mvPp2PrsHwClearAll(void);

/*
 * mvPp2PrsHwPortInit - set first lookup fileds per port
 * @port: port number
 * @lu_first: first lookup id
 * @lu_max: max number of lookups
 * @offs: initial offset in packet
*/
int mvPp2PrsHwPortInit(int port, int lu_first, int lu_max, int offs);

/*
 * mvPrsSwAlloc - allocate new prs entry
 * @id: tcam lookup id
 */
MV_PP2_PRS_ENTRY *mvPp2PrsSwAlloc(unsigned int luId);

/*
 * mvPp2PrsSwFree
 * @pe: entry to free
*/
void mvPp2PrsSwFree(MV_PP2_PRS_ENTRY *pe);

/*-------------------------------------------------------------------------------*/
/* 			Parser internal initialization functions		 */
/*-------------------------------------------------------------------------------*/

/*
 * mvPrsHwLkpFirstSet - set first lookup id per port
 * @port: port number
 * @lu_first: first lookup id
*/
int mvPrsHwLkpFirstSet(int port, int lu_first);

/*
 * mvPrsHwLkpMaxSet - set max number of lookups per port
 * @port: port number
 * @lu_max: max number of lookups
*/
int mvPrsHwLkpMaxSet(int port, int lu_max);

/*
 * mvPrsHwLkpMaxSet - set first lookup initial packet offset
 * @port: port number
 * @offs: initial offset in packet
*/
int mvPrsHwLkpFirstOffsSet(int port, int off);

/*-------------------------------------------------------------------------------*/
/* 			Parser Public TCAM APIs 				*/
/*-------------------------------------------------------------------------------*/

/*
 * mvPp2PrsHwRead - read prs entry
*/
int mvPp2PrsHwRead(MV_PP2_PRS_ENTRY *pe);

/*
 * mvPp2PrsHwWrite - write prs entry
*/
int mvPp2PrsHwWrite(MV_PP2_PRS_ENTRY *pe);

/*
 * mvPp2PrsHwInv - invalidate prs entry
 * @tid: entry id
*/
int mvPp2PrsHwInv(int tid);

/*
 * mvPp2PrsHwRegsDump - dump all prs registers into buffer
*/
int mvPp2PrsHwRegsDump(void);

/*
 * mvPp2PrsSwDump - dump sw prs entry
 * @pe: sw prs entry
*/
int mvPp2PrsSwDump(MV_PP2_PRS_ENTRY *pe);

/*
 * mvPp2PrsSwClear - clear prs sw entry
 * @pe: sw prs entry
*/
void mvPp2PrsSwClear(MV_PP2_PRS_ENTRY *pe);
/*
 * mvPp2PrsHwDump - dump all valid hw entries
*/

int mvPp2PrsHwDump(void);

/*
	mvPp2V1PrsHwHitsDump - dump all entries with non zeroed hit counters
*/
int mvPp2V1PrsHwHitsDump(void);

/*
	enable - Tcam Ebable/Disable
*/

int mvPp2PrsSwTcam(int enable);

/*
 * mvPp2PrsSwTcamWordGet - get byte form tcam data and tcam mask
 * @pe: sw prs entry
 * @offs: offset in tcam data, valid value 0 - 7
 * @woed: data from tcam
 * @enablek: data from tcam mask
*/
int mvPp2PrsSwTcamWordGet(MV_PP2_PRS_ENTRY *pe, unsigned int offs, unsigned int *word, unsigned int *enable);
/*
 * mvPp2PrsSwTcamWordSet - set byte in tcam data and tcam mask
 * @pe: sw prs entry
 * @offs: offset in tcam data, valid value 0, 1
 * @word: data to tcam
 * enable: data to tcam mask
*/
int mvPp2PrsSwTcamWordSet(MV_PP2_PRS_ENTRY *pe, unsigned int offs, unsigned int word, unsigned int mask);

/*
 * mvPp2PrsSwTcamByteGet - get byte form tcam data and tcam mask
 * @pe: sw prs entry
 * @offs: offset in tcam data, valid value 0, 1
 * @byte: data from tcam
 * @mask: data from tcam mask
*/
int mvPp2PrsSwTcamByteGet(MV_PP2_PRS_ENTRY *pe, unsigned int offs, unsigned char *byte, unsigned char *enable);
/*
 * mvPp2PrsSwTcamByteSet - set byte in tcam data and tcam mask
 * @pe: sw prs entry
 * @offs: offset in tcam data, valid value 0 - 7
 * @byte: data to tcam
 * enable: data to tcam mask
*/
int mvPp2PrsSwTcamByteSet(MV_PP2_PRS_ENTRY *pe, unsigned int offs, unsigned char byte, unsigned char mask);

/*
 * mvPp2PrsSwTcamByteCmp - compare one byte in tcam data of prs sw entery
 * @pe: sw prs entry
 * @offs: offset in tcam data, valid value 0 - 7
 * @byte: data to compare
 * return value: tcam[off] & tcam_mask[off] == byte & tcam_mask[off]
*/
int mvPp2PrsSwTcamByteCmp(MV_PP2_PRS_ENTRY *pe, unsigned int offs, unsigned char byte);

/*
 * mvPp2PrsSwTcamBytesCmp - compare bytes sequence in tcam data of prs sw entery
 * call to  mvPp2PrsSwTcamByteCmp fpr each byte in the sequence.
 * @pe: sw prs entry
 * @offs: bytes sequence start offset in tcam dat
 * @size: number of bytes to compare
 * return value: tcam[off] & tcam_mask[off] == byte & tcam_mask[off] for all bytes
*/
int mvPp2PrsSwTcamBytesCmp(MV_PP2_PRS_ENTRY *pe, unsigned int offset, unsigned int size, unsigned char *bytes);

/*
 * mvPp2PrsSwTcamBytesCmpIgnorMask - compare bytes sequence in tcam data of prs sw entery
 * call to  mvPp2PrsSwTcamByteCmp fpr each byte in the sequence.
 * @pe: sw prs entry
 * @offs: bytes sequence start offset in tcam dat
 * @size: number of bytes to compare
 * return value: tcam[off] == byte for all bytes
*/
int mvPp2PrsSwTcamBytesIgnorMaskCmp(MV_PP2_PRS_ENTRY *pe, unsigned int offs, unsigned int size, unsigned char *bytes);
/*
 * mvPp2PrsSwTcamAiUpdate - update tcam ai bits in prs sw entry.
 * @pe: sw prs entry
 * @bits: bits to set
 * @enable: bits mask
 * tcam AI[i] <-- bits[i] only if  enable[i] is set.
 * tcam_mask AI[i] <--1 only if enable[i] is set.
*/
int mvPp2PrsSwTcamAiUpdate(MV_PP2_PRS_ENTRY *pe, unsigned int bits, unsigned int enable);

/*
 * mvPp2PrsSwTcamAiGet - get tcam AI and tcam_mask AI from prs sw entry.
 * @pe: sw prs entry
 * @bits: get tcam AI val
 * @enable: get tcam mask AI val
*/
int mvPp2PrsSwTcamAiGet(MV_PP2_PRS_ENTRY *pe, unsigned int *bits, unsigned int *enable);

/*
 * mvPp2PrsSwTcamAiSetBit - set tcam AI bit in prs sw entry.
 * @pe: sw prs entry
 * @bit: bit offset
 * tcam AI[bit] = 1 , tcam mask AI[bit] = 1
*/
int mvPp2PrsSwTcamAiSetBit(MV_PP2_PRS_ENTRY *pe, unsigned char bit);

/*
 * mvPp2PrsSwTcamAiClearBit - clear tcam AI bit in prs sw entry.
 * @pe: sw prs entry
 * @bit: bit offset
 * tcam AI[bit] = 0 , tcam mask AI[bit] = 1
*/
int mvPp2PrsSwTcamAiClearBit(MV_PP2_PRS_ENTRY *pe, unsigned char bit);
/*
 * mvPp2PrsSwTcamPortGet - return tcam port status in prs sw entry.
 * @pe: sw prs entry
 * @port: single port
 * @status: 1 - port bit is set, 0 - port bit is not set
*/

int mvPp2PrsSwTcamPortGet(MV_PP2_PRS_ENTRY *pe, unsigned int port, MV_BOOL *status);
/*
 * mvPp2PrsSwTcamPortSet - set tcam port map in prs sw entry.
 * @pe: sw prs entry
 * @port: single port to be add or delete
 * @add: 1 - add port, 0 - delete port
*/
int mvPp2PrsSwTcamPortSet(MV_PP2_PRS_ENTRY *pe, unsigned int port, int add);

/*
 * mvPp2PrsSwTcamPortMapSet - set tcam port map in prs sw entry.
 * @pe: sw prs entry
 * @ports: ports bitmap to be set
*/
int mvPp2PrsSwTcamPortMapSet(MV_PP2_PRS_ENTRY *pe, unsigned int ports);

/*
 * mvPp2PrsSwTcamPortMapGet - get tcam PORT bitmap from prs sw entry.
 * @pe: sw prs entry
 * @port: get tcam PORTS val
*/
int mvPp2PrsSwTcamPortMapGet(MV_PP2_PRS_ENTRY *pe, unsigned int *ports);

/*
 * mvPp2PrsSwTcamLuSet - set tcam lookup id in prs sw entry.
 * @pe: sw prs entry
 * @lu: lookup id
 * set tcam mask LU to 0xff
*/
int mvPp2PrsSwTcamLuSet(MV_PP2_PRS_ENTRY *pe, unsigned int lu);

/*
 * mvPp2PrsSwTcamLuGet - get tcam lookup id from prs sw entry.
 * @pe: sw prs entry
 * @lu: get tcam lookup id
 * @enable: get tcam mask lookup id
*/
int mvPp2PrsSwTcamLuGet(MV_PP2_PRS_ENTRY *pe, unsigned int *lu, unsigned int *enable);


/*
 * mvPp2PrsSwSramRiSetBit - set sram result info bit in prs sw entry.
 * @pe: sw prs entry
 * @bit: bit offset in result info
 * set sram RI_EN[bit]
 */
int mvPp2PrsSwSramRiSetBit(MV_PP2_PRS_ENTRY *pe, unsigned int bit);

/*
 * mvPp2PrsSwSramRiClearBit - clear sram result info bit in prs sw entry.
 * @pe: sw prs entry
 * @bit: bit offset in result info
 * set sram RI_EN[bit]
 */
int mvPp2PrsSwSramRiClearBit(MV_PP2_PRS_ENTRY *pe, unsigned int bit);

/*
 * mvPp2PrsSwSramRiUpdate - update sram result info bits in prs sw entry.
 * @pe: sw prs entry
 * @bits: bits to set
 * @enable: bits mask
 * sram RI[i] <-- bits[i] only if  sram RI_EN[i] is set.
 * sram RI_EN[i] <--1 only if enable[i] is set.
 */
int mvPp2PrsSwSramRiUpdate(MV_PP2_PRS_ENTRY *pe, unsigned int bits, unsigned int enable);
/*
 * mvPp2PrsSwSramRiSet - set sram result info bits in prs sw entry.
 * @pe: sw prs entry
 * @bits: bits to set
 * @enable: bits mask
  */

int mvPp2PrsSwSramRiSet(MV_PP2_PRS_ENTRY *pe, unsigned int bits, unsigned int enable);
/*
 * mvPp2PrsSwSramRiGet - get sram result info from prs sw entry.
 * @pe: sw prs entry
 * @bits: get result info bits
 * @enable: get result info update bits
*/
int mvPp2PrsSwSramRiGet(MV_PP2_PRS_ENTRY *pe, unsigned int *bits, unsigned int *enable);


/*
 * mvPp2PrsSwSramAiSetBit - set sram AI bit in prs sw entry.
 * @pe: sw prs entry
 * @bit: bit offset
 * sram AI[bit] = 1 , sram AI_EN[bit] = 1
*/
int mvPp2PrsSwSramAiSetBit(MV_PP2_PRS_ENTRY *pe, unsigned char bit);

/*
 * mvPp2PrsSwSramAiClearBit - clear sram AI bit in prs sw entry.
 * @pe: sw prs entry
 * @bit: bit offset
 * sram AI[bit] = 0 , sram AI_EN[bit] = 1
*/
int mvPp2PrsSwSramAiClearBit(MV_PP2_PRS_ENTRY *pe, unsigned char bit);

/*
 * mvPp2PrsSwSramAiUpdate - update sram ai bits in prs sw entry.
 * @pe: sw prs entry
 * @bits: bits to set
 * @enable: bits mask
 * sram AI[i] <-- bits[i] only if  enable[i] is set.
 * sram AI_EN[i] <--1 only if enable[i] is set.
*/
int mvPp2PrsSwSramAiUpdate(MV_PP2_PRS_ENTRY *pe, unsigned int bits, unsigned int enable);

/*
 * mvPp2PrsSwSramAiGet - get sram AI and AI_EN from prs sw entry.
 * @pe: sw prs entry
 * @bits: get sram AI val
 * @enable: get sram AI_EN val
*/
int mvPp2PrsSwSramAiGet(MV_PP2_PRS_ENTRY *pe, unsigned int *bits, unsigned int *enable);


/*
 * mvPp2PrsSwSramNextLuSet - set prs sram next lookup id.
 * @pe: sw prs entry
 * @lu: next lookup id
*/
int mvPp2PrsSwSramNextLuSet(MV_PP2_PRS_ENTRY *pe, unsigned int lu);

/*
 * mvPp2PrsSwSramNextLuGet - got prs sram next lookup id.
 * @pe: sw prs entry
 * @lu: get next lookup id
*/
int mvPp2PrsSwSramNextLuGet(MV_PP2_PRS_ENTRY *pe, unsigned int *lu);


/*
 * mvPp2PrsSwSramShiftSet - set prs sram shift.
 * @pe: sw prs entry
 * @shift
 * @op
*/
int mvPp2PrsSwSramShiftSet(MV_PP2_PRS_ENTRY *pe, int shift, unsigned int op);

/*
 * mvPp2PrsSwSramShiftGet - get prs sram shift.
 * @pe: sw prs entry
 * @shift: get shift val
 * @op: get shift op
*/
int mvPp2PrsSwSramShiftGet(MV_PP2_PRS_ENTRY *pe, int *shift);

/*
 * mvPp2PrsSwSramShiftAbsUpdate - set sram shift value according to initial offset
 * @pe: sw prs entry
 * @shift: get shift val
 * shift value = @shift + inital value (store in reg 0x1004, 0x1008)
*/
int mvPp2PrsSwSramShiftAbsUpdate(MV_PP2_PRS_ENTRY *pe, int shift, unsigned int op);

/*
 * mvPp2PrsSwSramOffsetSet - set prs sram offset.
 * @pe: sw prs entry
 * @type: offset type
 * @offset: signed offset value
 * @op: offset operation
*/
int mvPp2PrsSwSramOffsetSet(MV_PP2_PRS_ENTRY *pe, unsigned int type, int offset, unsigned int op);

/*
 * mvPp2PrsSwSramOffsetGet - get prs sram offset.
 * @pe: sw prs entry
 * @type: get offset type
 * @offset: get offset
 * @op: get offset operation
*/
int mvPp2PrsSwSramOffsetGet(MV_PP2_PRS_ENTRY *pe, unsigned int *type, int *offset, unsigned int *op);

/*
 * mvPp2PrsSwSramLuDoneSet - set prs sram lookup done bit.
 * @pe: sw prs entry
*/
int mvPp2PrsSwSramLuDoneSet(MV_PP2_PRS_ENTRY *pe);

/*
 * mvPp2PrsSwSramLuDoneClear - clear prs sram lookup done bit.
 * @pe: sw prs entry
*/
int mvPp2PrsSwSramLuDoneClear(MV_PP2_PRS_ENTRY *pe);

/*
 * mvPp2PrsSwSramLuDoneGet - get prs sram lookup done bit.
 * @pe: sw prs entry
 * bit: get lookup done bit
*/
int mvPp2PrsSwSramLuDoneGet(MV_PP2_PRS_ENTRY *pe, unsigned int *bit);

/*
 * mvPp2PrsSwSramFlowidGenSet - set prs sram flowid gen bit.
 * @pe: sw prs entry
*/
int mvPp2PrsSwSramFlowidGenSet(MV_PP2_PRS_ENTRY *pe);

/*
 * mvPp2PrsSwSramFlowidGenClear - clear prs sram flowid gen bit.
 * @pe: sw prs entry
*/
int mvPp2PrsSwSramFlowidGenClear(MV_PP2_PRS_ENTRY *pe);

/*
 * mvPp2PrsSwSramFlowidGenGet - get prs sram flowid gen bit.
 * @pe: sw prs entry
 * bit: get lowid gen bit.
*/
int mvPp2PrsSwSramFlowidGenGet(MV_PP2_PRS_ENTRY *pe, unsigned int *bit);

#endif /* __MV_PRS_HW_H__ */
