/*******************************************************************************
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.

******************************************************************************/
/*******************************************************************************
* tpm_types.h
*
* DESCRIPTION:
*               Traffic Processor Manager - types definition.
*
* DEPENDENCIES:
*               None
*
* CREATED BY:   OctaviaP
*
* DATE CREATED:
*
* FILE REVISION NUMBER:
*               Revision: 1.4
*
*
*******************************************************************************/

#ifndef _TPM_TYPES_H_
#define _TPM_TYPES_H_

#ifdef __cplusplus
extern "C" {
#endif

/******************************************************************************/
/********************************** Administrative ****************************/
/******************************************************************************/

/* API group ownership error codes */
typedef enum tpm_api_ownership_error {
	API_OWNERSHIP_SUCCESS,
	API_OWNERID_UNKNOWN,
	API_TYPE_UNKNOWN,
	API_OWNED,
	API_OWNERSHIP_ERROR
} tpm_api_ownership_error_t;


/* Maximum number of parallel running API calls to a certain API */
#define TPM_MAX_PARALLEL_API_CALLS	(4)

/******************************************************************************/
/********************************** Packet Processing *************************/
/******************************************************************************/

/*************************************/
/* Packet Processor API Types  *******/
/*************************************/
typedef enum {
	TPM_API_MGMT,
	TPM_API_MAC_LEARN,
	TPM_API_DS_LOAD_BALANCE,
	TPM_API_CPU_LOOPBACK,
	TPM_API_L2_PRIM,
	TPM_API_L3_TYPE,
	TPM_API_IPV4,
	TPM_API_IPV4_MC,
	TPM_API_IPV6_NH,
	TPM_API_IPV6_L4,
	TPM_API_IPV6_GEN,
	TPM_API_IPV6_DIP,
	TPM_API_IPV6_MC,
	TPM_API_CNM,
	TPM_API_TYPE_ILLEGAL,
	TPM_MAX_API_TYPES = TPM_API_TYPE_ILLEGAL
} tpm_api_type_t;

/*************************************/
/* Parse fields **********************/
/* tpm_parse_fields_t bitmap **********/
/*************************************/

#define     TPM_L2_PARSE_MAC_DA             (0x0001)	/* parsing DEST MAC Address */
#define     TPM_L2_PARSE_MAC_SA             (0x0002)	/* parsing SRC MAC Address */
#define     TPM_L2_PARSE_ONE_VLAN_TAG       (0x0004)	/* parsing external VLAN tag */
#define     TPM_L2_PARSE_TWO_VLAN_TAG       (0x0008)	/* parsing external and inner VLAN tag */
#define     TPM_L2_PARSE_ETYPE              (0x0010)	/* parsing Ether type */
#define     TPM_L2_PARSE_PPPOE_SES          (0x0020)	/* parsing PPPOE session */
#define     TPM_L2_PARSE_PPP_PROT           (0x0040)	/* parsing PPP protocol */
#define     TPM_L2_PARSE_GEMPORT            (0x0080)	/* parsing the GEM port */

#define     TPM_IPv4_PARSE_SIP              (0x0001)	/* parsing IPv4 Source IP address */
#define     TPM_IPv4_PARSE_DIP              (0x0002)	/* parsing IPv4 Dest IP address */
#define     TPM_IPv4_PARSE_DSCP             (0x0004)	/* parsing IPv4 DSCP */
#define     TPM_IPv4_PARSE_PROTO            (0x0008)	/* parsing IPv4 protocol */

#define     TPM_IPv6_PARSE_SIP              (0x0001)	/* parsing IPv6 Source IP address */
#define     TPM_IPv6_PARSE_DIP              (0x0002)	/* parsing IPv6 Dest IP address */
#define     TPM_IPv6_PARSE_DSCP             (0x0004)	/* parsing IPv6 DSCP */
#define     TPM_IPv6_PARSE_NH               (0x0008)	/* parsing IPv6 next hop */
#define     TPM_IPv6_PARSE_HOPL             (0x0040)	/* parsing IPv6 hop limit */
/* for CnM IPv6, there is the possibility that parse_bm has IPv6_HOPL, L4_SRC and L4_DST together,
   so they can not have the same value, that is the reason HOPL is changed from 0x10 to 0x40, since
   L4_SRC has 0x10 and L4_DST has 0x20
*/

/* Both for IPV4 and IPV6 */
#define     TPM_PARSE_L4_SRC                (0x0010)	/* parsing L4 source port */
#define     TPM_PARSE_L4_DST                (0x0020)	/* parsing L4 destination port */

typedef uint32_t tpm_parse_fields_t;

/*************************************/
/* Parse flags ***********************/
/* tpm_parse_flags_t bitmap **********/
/*************************************/
#define     TPM_PARSE_FLAG_TAG1_TRUE        (0x00001)
#define     TPM_PARSE_FLAG_TAG1_FALSE       (0x00002)
#define     TPM_PARSE_FLAG_TAG1_DC          (0x0)
#define     TPM_PARSE_FLAG_TAG2_TRUE        (0x00004)
#define     TPM_PARSE_FLAG_TAG2_FALSE       (0x00008)
#define     TPM_PARSE_FLAG_TAG2_DC          (0x0)
#define     TPM_PARSE_FLAG_MTM_TRUE         (0x00010)
#define     TPM_PARSE_FLAG_MTM_FALSE        (0x00020)
#define     TPM_PARSE_FLAG_MTM_DC           (0x0)
#define     TPM_PARSE_FLAG_TO_CPU_TRUE      (0x00040)
#define     TPM_PARSE_FLAG_TO_CPU_FALSE     (0x00080)
#define     TPM_PARSE_FLAG_TO_CPU_DC        (0x0)
#define     TPM_PARSE_FLAG_L4_UDP           (0x00100)
#define     TPM_PARSE_FLAG_L4_TCP           (0x00200)
#define     TPM_PARSE_FLAG_L4_DC            (0x0)
#define     TPM_PARSE_FLAG_PPPOE_TRUE       (0x00400)
#define     TPM_PARSE_FLAG_PPPOE_FALSE      (0x00800)
#define     TPM_PARSE_FLAG_PPPOE_DC         (0x0)

typedef uint32_t tpm_parse_flags_t;

/* Source port - used to specify through which port the packet entered the processor  */
typedef enum {
	TPM_SRC_PORT_UNI_0,		/* upstream */
	TPM_SRC_PORT_UNI_1,		/* upstream */
	TPM_SRC_PORT_UNI_2,		/* upstream */
	TPM_SRC_PORT_UNI_3,		/* upstream */
	TPM_SRC_PORT_UNI_4,		/* upstream */
	TPM_SRC_PORT_UNI_5,		/* upstream */
	TPM_SRC_PORT_UNI_6,		/* upstream */
	TPM_SRC_PORT_UNI_7,		/* upstream */
	TPM_SRC_PORT_UNI_VIRT,		/* upstream */
	TPM_SRC_PORT_WAN,		/* downstram */
	TPM_SRC_PORT_UNI_ANY,		/* upstream - all UNI ports */
	TPM_SRC_PORT_WAN_OR_LAN,	/* Any Port, currently not supported */
	TPM_SRC_PORT_ILLEGAL = 0xFF
} tpm_src_port_type_t;

/* Source Port derivatives : */
#define     TPM_MAX_NUM_UNI_PORTS           (TPM_SRC_PORT_UNI_VIRT - TPM_SRC_PORT_UNI_0 + 1)
#define     TPM_MAX_NUM_ETH_PORTS           (1/*wan*/+TPM_MAX_NUM_UNI_PORTS)
#define     TPM_RATE_LIMIT_MIN_VAL          (64)

/***********************************************/
/* Target port - bitmap ************************/
/* Used for forwarding decision making *********/
/* For EPON/GPON - same bitmap for LLID/TCONTs */
/***********************************************/
#define	TPM_TRG_PORT_WAN		(0x00000001)	/* upstream */

#define	TPM_TRG_TCONT_0			(0x00000001)	/* upstream */
#define	TPM_TRG_TCONT_1			(0x00000002)	/* upstream */
#define	TPM_TRG_TCONT_2			(0x00000004)	/* upstream */
#define	TPM_TRG_TCONT_3			(0x00000008)	/* upstream */
#define	TPM_TRG_TCONT_4			(0x00000010)	/* upstream */
#define	TPM_TRG_TCONT_5			(0x00000020)	/* upstream */
#define	TPM_TRG_TCONT_6			(0x00000040)	/* upstream */
#define	TPM_TRG_TCONT_7			(0x00000080)	/* upstream */
#define	TPM_TRG_LLID_0 			(0x00000001)	/* upstream */
#define	TPM_TRG_LLID_1 			(0x00000002)	/* upstream */
#define	TPM_TRG_LLID_2 			(0x00000004)	/* upstream */
#define	TPM_TRG_LLID_3 			(0x00000008)	/* upstream */
#define	TPM_TRG_LLID_4 			(0x00000010)	/* upstream */
#define	TPM_TRG_LLID_5 			(0x00000020)	/* upstream */
#define	TPM_TRG_LLID_6 			(0x00000040)	/* upstream */
#define	TPM_TRG_LLID_7			(0x00000080)	/* upstream */
#define	TPM_TRG_UNI_0			(0x00000100)	/* downstream */
#define	TPM_TRG_UNI_1			(0x00000200)	/* downstream */
#define	TPM_TRG_UNI_2			(0x00000400)	/* downstream */
#define	TPM_TRG_UNI_3			(0x00000800)	/* downstream */
#define	TPM_TRG_UNI_4			(0x00001000)	/* downstream */
#define	TPM_TRG_UNI_5			(0x00002000)	/* downstream */
#define	TPM_TRG_UNI_6			(0x00004000)	/* downstream */
#define	TPM_TRG_UNI_7			(0x00008000)	/* downstream */
#define	TPM_TRG_UNI_VIRT		(0x00010000)	/* downstream */

#define	TPM_TRG_PORT_CPU		(0x00020000)	/* upstream / downstream - CPU port */
#define	TPM_TRG_PORT_UNI_ANY		(0x00040000)	/* downstream - all UNI ports */
#define	TPM_TRG_PORT_UNI_CPU_LOOP	(0x00080000)	/* downstream - loop to the CPU port */

#define TPM_TRG_LOAD_BAL                (0x80000000)    /* for 2G DS Load-Balancing,
							   set target_gmac to GMAC1 */

#define	TPM_TRG_PORT_ILLEGAL		(0xFFFFFFFF)	/* illegal port number value */
#define	TPM_TRG_UNI_OFFSET		8
#define	TPM_TRG_UNI_MASK		0x1FF

typedef enum {
	TPM_DS_TGRT_G0,
	TPM_DS_TGRT_G1,
	TPM_DS_TGRT_CPU,
} tpm_ds_load_balance_tgrt_t;

/* target port type - bitmap */
typedef uint32_t tpm_trg_port_type_t;	/*ex: TPM_TRG_PORT_WAN or TPM_TRG_TCONT_0 */
/* YUVAL_NOW - add allowed bitmaps here */

/* GPON GEM port id */
typedef uint16_t tpm_gem_port_key_t;

/* Structure for packet forwarding decision making */
typedef struct tpm_pkt_frwd {
	tpm_trg_port_type_t trg_port;	/* Bitmap of the ports where the packet is targeted */
					/*(ATTENTION - today only single target port in bm */
	uint8_t trg_queue;		/* Queue id for the target port. */
	uint8_t dummy;
	tpm_gem_port_key_t gem_port;	/* GEM port id. */
} tpm_pkt_frwd_t;

/* Next Parsing Stage options */
typedef enum tpm_parse_stage {
	STAGE_L2_PRIM,
	STAGE_L3_TYPE,
	STAGE_IPv4,
	STAGE_IPv6_GEN,
	STAGE_IPv6_DIP,
	STAGE_IPv6_NH,
	STAGE_IPV6_L4,
	STAGE_CTC_CM,
	STAGE_DONE
} tpm_parse_stage_t;

/*************************************/
/* Classifying flags rules - bitmap **/
/* tpm_pkt_action_t bitmap **********/
/*************************************/
#define     TPM_ACTION_DROP_PK              (0x001)	/* drop packet */
#define     TPM_ACTION_SET_TARGET_PORT      (0x002)	/* set forwarding dest Tx_port(GPON:+GemPort) */
#define     TPM_ACTION_SET_TARGET_QUEUE     (0x004)	/* set forwarding dest Tx_queue */
#define     TPM_ACTION_SET_PKT_MOD          (0x008)	/* set packet modification command */
#define     TPM_ACTION_TO_CPU               (0x010)	/* packet should be trapped to CPU */
#define     TPM_ACTION_MTM                  (0x020)	/* packet is MAC-to-ME */
#define     TPM_ACTION_CUST_CPU_PKT_PARSE   (0x040)	/* packet should be sent to Customization package */
#define     TPM_ACTION_SPEC_MC_VID          (0x080)	/* Specific multicast VID  */
#define     TPM_ACTION_UDP_CHKSUM_CALC      (0x100)	/* UDP Checksum should be updated, due to non-zero udp_checksum */

typedef uint32_t tpm_pkt_action_t;	/*ex: TPM_ACTION_DROP_PK */

/*****************/
/* Packet Action */
/*****************/
typedef struct tpm_rule_action {
	tpm_pkt_action_t pkt_act;
	tpm_parse_stage_t next_phase;
} tpm_rule_action_t;

/******************* Packet fields modification command bitmap ***************/
#define    TPM_MH_SET                       0x00001
#define    TPM_MAC_DA_SET                   0x00002	/*Update the MAC DA Address */
#define    TPM_MAC_SA_SET                   0x00004	/*Update the MAC SA Address */
#define    TPM_VLAN_MOD                     0x00008	/*Update the VLAN Tags (add/del/update) */
#define    TPM_PPPOE_DEL                    0x00010	/*Delete a PPPoE encapsulation */
#define    TPM_PPPOE_ADD                    0x00020	/*Add a PPPoE encapsulation */
#define    TPM_DSCP_SET                     0x00040	/* Set the DSCP value */
#define    TPM_TTL_DEC                      0x00080	/* Decrease the TTL value */
#define    TPM_IPV4_UPDATE                  0x00100	/*Update the IPv4 Header */
#define    TPM_IPV4_SRC_SET                 0x00200	/* Set the IPV4 Source Address */
#define    TPM_IPV4_DST_SET                 0x00400	/* Set the IPV4 Destination Address */
#define    TPM_IPV6_UPDATE                  0x00800	/* Update the IPv6 Header */
#define    TPM_HOPLIM_DEC                   0x01000	/* Decrease the Hop Limit value */
#define    TPM_IPV6_SRC_SET                 0x02000	/* Set the IPV6 Source Address */
#define    TPM_IPV6_DST_SET                 0x04000	/* Set the IPV6 Destination Address */
#define    TPM_L4_SRC_SET                   0x08000	/* Set the L4 Source Port (UDP or TCP) */
#define    TPM_L4_DST_SET                   0x10000	/* Set the L4 Destination Port (UDP or TCP) */

typedef uint32_t tpm_pkt_mod_bm_t;	/*ex: TPM_MAC_DA_SET | TPM_MAC_SA_SET .... */
#define    TPM_CHAIN_NUM_UNLIMITED          (0x1000)

/* Add. Modification flags, used only for tpm_mod_entry_set API */
#define     TPM_INT_L4_TCP        (0x0001)
#define     TPM_INT_L4_UDP        (0x0002)
#define     TPM_INT_SPLIT_MOD     (0x0004)
#define     TPM_INT_UDP_CHECKSUM  (0x0008)
#define     TPM_INT_MC_MOD        (0x0010)

typedef uint32_t tpm_pkt_mod_int_bm_t;  /*ex: TPM_INT_L4_TCP | TPM_INT_L4_UDP ....*/

/****************************************************************/
/*          L2/L3 ACL rule related structures                   */
/****************************************************************/

/* L2 MAC key structure */
typedef struct tpm_mac_key {
	uint8_t mac_da[6];
	uint8_t mac_da_mask[6];
	uint8_t mac_sa[6];
	uint8_t mac_sa_mask[6];
} tpm_mac_key_t;

/* L2 VLAN key structure */
typedef struct tpm_vlan_key {
	uint16_t tpid;
	uint16_t tpid_mask;
	uint16_t vid;
	uint16_t vid_mask;
	uint8_t cfi;
	uint8_t cfi_mask;
	uint8_t pbit;
	uint8_t pbit_mask;
} tpm_vlan_key_t;

/* Ethernet type - for example 0x0800 */
typedef uint16_t tpm_ether_type_key_t;

/* PPP key structure */
typedef struct tpm_pppoe_key {
	uint16_t ppp_session;
	uint16_t ppp_proto;
} tpm_pppoe_key_t;

/* L2 ACL key structure - for creating a new L2 ACL rule */
typedef struct tpm_l2_acl_key {
	tpm_mac_key_t mac;
	tpm_vlan_key_t vlan1;
	tpm_vlan_key_t vlan2;
	tpm_pppoe_key_t pppoe_hdr;
	tpm_ether_type_key_t ether_type;
	tpm_gem_port_key_t gem_port;
} tpm_l2_acl_key_t;

/****************************************************************/
/*          L3 Type - ACL key structure                         */
/****************************************************************/
typedef struct tpm_l3_type_key {
	tpm_ether_type_key_t ether_type_key;
	uint16_t dummy;
	tpm_pppoe_key_t pppoe_key;
} tpm_l3_type_key_t;

/****************************************************************/
/*          IPv4 - ACL key structure                            */
/****************************************************************/
typedef struct tpm_ipv4_acl_key {
	uint8_t ipv4_dscp;
	uint8_t ipv4_dscp_mask;
	uint8_t ipv4_proto;
	uint8_t dummy;
	uint8_t ipv4_src_ip_add[4];
	uint8_t ipv4_src_ip_add_mask[4];
	uint8_t ipv4_dst_ip_add[4];
	uint8_t ipv4_dst_ip_add_mask[4];
	uint16_t l4_src_port;
	uint16_t l4_dst_port;
} tpm_ipv4_acl_key_t;

/****************************************************************/
/*          IPv6 - ACL key structure                            */
/****************************************************************/

typedef enum tpm_nh_iter {
	NH_ITER_0,
	NH_ITER_1,
} tpm_nh_iter_t;

typedef struct tpm_ipv6_gen_acl_key {
	uint8_t ipv6_dscp;
	uint8_t ipv6_dscp_mask;
	uint8_t hop_limit;
	uint8_t dummy;
	uint8_t ipv6_src_ip_add[16];
	uint8_t ipv6_src_ip_add_mask[16];
} tpm_ipv6_gen_acl_key_t;

typedef struct tpm_ipv6_acl_key {
	uint8_t ipv6_dscp;
	uint8_t ipv6_dscp_mask;
	uint8_t ipv6_next_header;
	uint8_t ipv6_hoplimit;
	uint8_t ipv6_src_ip_add[16];
	uint8_t ipv6_src_ip_add_mask[16];
	uint8_t ipv6_dst_ip_add[16];
	uint8_t ipv6_dst_ip_add_mask[16];
	uint16_t l4_src_port;
	uint16_t l4_dst_port;
} tpm_ipv6_acl_key_t;

typedef struct tpm_ipv6_addr_key {
	uint8_t ipv6_ip_add[16];
	uint8_t ipv6_ip_add_mask[16];
} tpm_ipv6_addr_key_t;

typedef struct tpm_l4_ports_key {
	uint16_t l4_src_port;
	uint16_t l4_dst_port;
} tpm_l4_ports_key_t;

/****************************************************************/
/*          IPV4 Multicast definitions                          */
/****************************************************************/
typedef enum {
	TPM_MC_ALL_CPU_FRWD,
	TPM_MC_MAC_ONLY_FILTER,
	TPM_MC_COMBINED_IP_MAC_FILTER,
	TPM_MC_IP_ONLY_FILTER,
	TPM_MC_FILTER_MODE_MAX,
} tpm_mc_filter_mode_t;

typedef enum {
	TPM_MC_IGMP_SNOOPING,
	TPM_MC_IGMP_PROXY,
	TPM_MC_IGMP_MODE_MAX,
} tpm_mc_igmp_mode_t;

typedef enum tpm_mc_port_mode {
	TPM_MC_UNI_MODE_EXCLUDE,
	TPM_MC_UNI_MODE_TRANSPARENT,
	TPM_MC_UNI_MODE_STRIP,
	TPM_MC_UNI_MODE_TRANSLATE
} tpm_mc_port_mode_t;

typedef struct tpm_mc_vid_port_cfg {
	tpm_src_port_type_t tpm_src_port;
	tpm_mc_port_mode_t mc_uni_port_mode;
	uint32_t uni_port_vid;
} tpm_mc_vid_port_cfg_t;

typedef struct {
	tpm_mc_vid_port_cfg_t mc_vid_port_vids[TPM_MAX_NUM_UNI_PORTS];
} tpm_mc_vid_port_vid_set_t;

/* Port IGMP forward mode */
typedef enum {
	TPM_IGMP_FRWD_MODE_DROP,
	TPM_IGMP_FRWD_MODE_FORWARD,
	TPM_IGMP_FRWD_MODE_SNOOPING,
} tpm_igmp_frwd_mode_t;

/****************************************************************/
/*          Packet modification structures                      */
/****************************************************************/

/* VLAN modification commands */
typedef enum tpm_vlan_oper {
	VLANOP_NOOP,	/* no VLAN operation performed */
	VLANOP_EXT_TAG_MOD,	/* modify external tag */
	VLANOP_EXT_TAG_DEL,	/* delete external tag */
	VLANOP_EXT_TAG_INS,	/* insert(prepend) external tag */
	VLANOP_EXT_TAG_MOD_INS,	/* modify existing external tag and insert(prepend) new tag */
	VLANOP_INS_2TAG,	/* insert(prepend) 2 new tags */
	VLANOP_MOD_2TAG,	/* modify 2 tags */
	VLANOP_SWAP_TAGS,	/* swap internal and external tags */
	VLANOP_DEL_2TAG,	/* delete 2 existing tags */
	VLANOP_INT_TAG_MOD,	/* modify existing internal tag */
	VLANOP_EXT_TAG_DEL_INT_MOD,	/* delete existing external tag and modify internal tag */
	VLANOP_SPLIT_MOD_PBIT, /* split mod stage 2, only modify p-bit */
	VLANOP_ILLEGAL,	/* illegal VLAN operation */

	VLANOP_MAX_NUM
} tpm_vlan_oper_t;

typedef enum tpm_mod_owner {
	TPM_MOD_OWNER_TPM,
	TPM_MOD_OWNER_CPU,
	TPM_MAX_MOD_OWNERS
} tpm_mod_owner_t;

typedef struct tpm_vlan_mod {
	tpm_vlan_oper_t vlan_op;	/* Vlan operation/modification command */
	tpm_vlan_key_t vlan1_out;	/* structure for outer VLAN key */
	tpm_vlan_key_t vlan2_out;	/* structure for inner VLAN key. */
} tpm_vlan_mod_t;

typedef struct tpm_pkt_mod {
	uint16_t mh_mod;
	tpm_vlan_mod_t vlan_mod;
	tpm_mac_key_t mac_mod;
	tpm_pppoe_key_t pppoe_mod;
	union {
		tpm_ipv4_acl_key_t ipv4_mod;
		tpm_ipv6_acl_key_t ipv6_mod;
	} l3;
} tpm_pkt_mod_t;

/****************************************************************/
/*          CPU loopback related structures                     */
/****************************************************************/

typedef struct {
	uint32_t in_use;
	uint32_t trg_port;
	uint8_t trg_queue;
	uint16_t gem_port;
	uint32_t rule_idx;	/* PnC rule index returned when add PnC rule to GMAC0 and mod to PON MAC for CPU loopback */
	uint32_t mod_idx;	/* Modification index returned when add mod to GMAC1 for CPU loopback */
} tpm_cpu_loopback_t;

/****************************************************************/
/*          PnC aging counter structure & defines               */
/****************************************************************/

typedef struct {
	uint32_t rule_idx;
	uint32_t hit_count;
} tpm_api_entry_count_t;

typedef struct {
	uint32_t cntr_grp;
	uint32_t lu_mask;
} tpm_api_lu_conf_t;

#define TPM_MAX_LU_ENTRY_NUM  (100)	/* Max. allowed returned LU entries in single API call */
#define TPM_MAX_MOD_RULE_NUM  (32)	/* YUVAL_NOW - add description here */
#define TPM_MAX_PNC_COUNTER_NUM  (450)  /* Max allowed returned PNC counter entries in single API call
					   Root cause for not using 512 is 4K copy_to_user limitation  */

/****************************************************************/
/*          Generic key structure from PnC - for GetNext entry  */
/****************************************************************/

typedef struct tpm_rule_l2_prim_key {
	tpm_src_port_type_t src_port;
	tpm_parse_fields_t parse_rule_bm;
	tpm_parse_flags_t parse_flags_bm;
	tpm_l2_acl_key_t l2_key;
	tpm_pkt_frwd_t pkt_frwd;
	tpm_pkt_mod_t pkt_mod;
	tpm_pkt_mod_bm_t pkt_mod_bm;
	tpm_rule_action_t rule_action;
} tpm_rule_l2_prim_key_t;

typedef struct tpm_rule_l3_type_key {
	tpm_src_port_type_t src_port;
	tpm_parse_fields_t parse_rule_bm;
	tpm_l3_type_key_t l3_key;
	tpm_parse_flags_t parse_flags_bm;
	tpm_pkt_frwd_t pkt_frwd;
	tpm_rule_action_t rule_action;
} tpm_rule_l3_type_key_t;

typedef struct tpm_rule_ipv4_key {
	tpm_src_port_type_t src_port;
	tpm_parse_fields_t parse_rule_bm;
	tpm_ipv4_acl_key_t ipv4_key;
	tpm_parse_flags_t parse_flags_bm;
	tpm_pkt_frwd_t pkt_frwd;
	tpm_pkt_mod_t pkt_mod;
	tpm_pkt_mod_bm_t pkt_mod_bm;
	tpm_rule_action_t rule_action;
} tpm_rule_ipv4_key_t;

typedef struct tpm_rule_ipv4_mc_key {
	uint32_t stream_num;
	tpm_mc_igmp_mode_t igmp_mode;
	uint8_t mc_stream_pppoe;
	uint16_t vid;
	uint8_t ipv4_src_add[4];
	uint8_t ipv4_dest_add[4];
	uint8_t ignore_ipv4_src;
	uint16_t dest_queue;
	tpm_trg_port_type_t dest_port_bm;
} tpm_rule_ipv4_mc_key_t;

typedef struct tpm_rule_ipv6_mc_key {
	uint32_t stream_num;
	tpm_mc_igmp_mode_t igmp_mode;
	uint8_t mc_stream_pppoe;
	uint16_t vid;
	uint8_t ipv6_src_add[16];
	uint8_t ipv6_dest_add[16];
	uint8_t ignore_ipv6_src;
	uint16_t dest_queue;
	tpm_trg_port_type_t dest_port_bm;
} tpm_rule_ipv6_mc_key_t;

typedef struct tpm_rule_ipv6_key {
	tpm_parse_fields_t parse_rule_bm;
	tpm_parse_flags_t parse_flags_bm;
	tpm_src_port_type_t src_port;
	tpm_ipv6_acl_key_t ipv6_key;
	tpm_pkt_frwd_t pkt_frwd;
	tpm_pkt_mod_t pkt_mod;
	tpm_rule_action_t rule_action;
} tpm_rule_ipv6_key_t;

typedef struct tpm_rule_ipv6_gen_key {
	tpm_parse_fields_t parse_rule_bm;
	tpm_parse_flags_t parse_flags_bm;
	tpm_src_port_type_t src_port;
	tpm_l4_ports_key_t l4_key;
	tpm_ipv6_gen_acl_key_t ipv6_gen_key;
	tpm_pkt_frwd_t pkt_frwd;
	tpm_pkt_mod_t pkt_mod;
	tpm_pkt_mod_bm_t pkt_mod_bm;
	tpm_rule_action_t rule_action;
} tpm_rule_ipv6_gen_key_t;

typedef struct tpm_rule_ipv6_dip_key {
	tpm_parse_fields_t parse_rule_bm;
	tpm_parse_flags_t parse_flags_bm;
	tpm_src_port_type_t src_port;
	tpm_l4_ports_key_t l4_key;
	tpm_ipv6_gen_acl_key_t ipv6_gen_key;
	tpm_ipv6_addr_key_t ipv6_dipkey;
	tpm_pkt_frwd_t pkt_frwd;
	tpm_pkt_mod_t pkt_mod;
	tpm_pkt_mod_bm_t pkt_mod_bm;
	tpm_rule_action_t rule_action;
} tpm_rule_ipv6_dip_key_t;

typedef struct tpm_rule_ipv6_l4_key {
	tpm_parse_fields_t parse_rule_bm;
	tpm_parse_flags_t parse_flags_bm;
	tpm_src_port_type_t src_port;
	tpm_l4_ports_key_t l4_key;
	tpm_pkt_frwd_t pkt_frwd;
	tpm_pkt_mod_t pkt_mod;
	tpm_pkt_mod_bm_t pkt_mod_bm;
	tpm_rule_action_t rule_action;
} tpm_rule_ipv6_l4_key_t;

typedef struct tpm_rule_ipv6_nh_key {
	tpm_parse_fields_t parse_rule_bm;
	tpm_parse_flags_t parse_flags_bm;
	tpm_nh_iter_t nh_iter;
	uint32_t nh;
	tpm_pkt_frwd_t pkt_frwd;
	tpm_rule_action_t rule_action;
} tpm_rule_ipv6_nh_key_t;

typedef struct tpm_rule_cnm_key {
	tpm_src_port_type_t src_port;
	tpm_parse_fields_t l2_parse_rule_bm;
	tpm_parse_fields_t ipv4_parse_rule_bm;
	tpm_parse_fields_t ipv6_parse_rule_bm;
	tpm_l2_acl_key_t l2_key;
	tpm_ipv4_acl_key_t ipv4_key;
	tpm_ipv6_acl_key_t ipv6_key;
	uint32_t pbits;
	tpm_pkt_frwd_t pkt_frwd;
	tpm_pkt_action_t pkt_act;
} tpm_rule_cnm_key_t;

typedef union tpm_rule_entry {
	tpm_rule_l2_prim_key_t l2_prim_key;
	tpm_rule_l3_type_key_t l3_type_key;
	tpm_rule_ipv4_key_t ipv4_key;
	tpm_rule_ipv6_key_t ipv6_key;
	tpm_rule_ipv4_mc_key_t ipv4_mc_key;
	tpm_rule_ipv6_gen_key_t ipv6_gen_key;
	tpm_rule_ipv6_mc_key_t ipv6_mc_key;
	tpm_rule_ipv6_dip_key_t ipv6_dip_key;
	tpm_rule_ipv6_nh_key_t ipv6_nh_key;
	tpm_rule_ipv6_l4_key_t ipv6_l4_key;
	tpm_rule_cnm_key_t cnm_key;
} tpm_rule_entry_t;

/*MRU type*/
typedef enum {
	TPM_NETA_MTU_GMAC0,
	TPM_NETA_MTU_GMAC1,
	TPM_NETA_MTU_PONMAC,
	TPM_NETA_MTU_SWITCH
} tpm_mru_type_t;

/******************************************************************************/
/********************************** Switch defs *******************************/
/******************************************************************************/
#define MEMBER_EGRESS_UNMODIFIED	0
#define NOT_A_MEMBER			1
#define MEMBER_EGRESS_UNTAGGED		2
#define MEMBER_EGRESS_TAGGED		3

typedef enum {
	TPM_FLOOD_UNKNOWN_UNICAST,
	TPM_FLOOD_UNKNOWN_MULTI_BROAD_CAST,
} tpm_flood_type_t;

/* switch scheduler type */
typedef enum tpm_sw_sched_type {
	TPM_SW_SCHED_WRR_ALL_Q,
	TPM_SW_SCHED_STRICT_Q3_WRR_Q210,
	TPM_SW_SCHED_STRICT_Q32_WRR_Q10,
	TPM_SW_SCHED_STRICT_ALL_Q,
	TPM_SW_SCHED_ILLEGAL
} tpm_sw_sched_type_t;

/*
* typedef: enum tpm_phy_speed_t
*
* Description: Enumeration of Phy Speed
*
* Enumerations:
*	TPM_PHY_SPEED_10_MBPS   - 10Mbps
*	TPM_PHY_SPEED_100_MBPS	- 100Mbps
*	TPM_PHY_SPEED_1000_MBPS - 1000Mbps
*/
typedef enum {
	TPM_PHY_SPEED_10_MBPS,
	TPM_PHY_SPEED_100_MBPS,
	TPM_PHY_SPEED_1000_MBPS
} tpm_phy_speed_t;

/* switch mirror type */


/* Switch mirror type
typedef struct {
	uint32_t sport;
	uint32_t dport;
	tpm_sw_mirror_type_t mode;
	bool enable;
} tpm_sw_mirror_t;*/

/*
 *  typedef: enum tpm_limit_mode_t
 *
 *  Description: Enumeration of the port ingress/egress rate limit counting mode.
 *
 *  Enumerations:
 *      TPM_SW_LIMIT_FRAME -
 *                Count the number of frames
 *      TPM_SW_LIMIT_LAYER1 -
 *                Count all Layer 1 bytes:
 *                Preamble (8bytes) + Frame's DA to CRC + IFG (12bytes)
 *      TPM_SW_LIMIT_LAYER2 -
 *                Count all Layer 2 bytes: Frame's DA to CRC
 *      TPM_SW_LIMIT_LAYER3 -
 *                Count all Layer 3 bytes:
 *                Frame's DA to CRC - 18 - 4 (if frame is tagged)
 */
typedef enum {
	TPM_SW_LIMIT_FRAME = 0,
	TPM_SW_LIMIT_LAYER1,
	TPM_SW_LIMIT_LAYER2,
	TPM_SW_LIMIT_LAYER3
} tpm_limit_mode_t;

/*
* typedef: enum tpm_autoneg_mode_t
*
* Description: Enumeration of Autonegotiation mode.
*Auto for both speed and duplex.
*Auto for speed only and Full duplex.
*Auto for speed only and Half duplex. (1000Mbps is not supported)
*Auto for duplex only and speed 1000Mbps.
*Auto for duplex only and speed 100Mbps.
*Auto for duplex only and speed 10Mbps.
*1000Mbps Full duplex.
*100Mbps Full duplex.
*100Mbps Half duplex.
*10Mbps Full duplex.
*10Mbps Half duplex.
*/
typedef enum {
	TPM_SPEED_AUTO_DUPLEX_AUTO,
	TPM_SPEED_1000_DUPLEX_AUTO,
	TPM_SPEED_100_DUPLEX_AUTO,
	TPM_SPEED_10_DUPLEX_AUTO,
	TPM_SPEED_AUTO_DUPLEX_FULL,
	TPM_SPEED_AUTO_DUPLEX_HALF,
	TPM_SPEED_1000_DUPLEX_FULL,
	TPM_SPEED_1000_DUPLEX_HALF,
	TPM_SPEED_100_DUPLEX_FULL,
	TPM_SPEED_100_DUPLEX_HALF,
	TPM_SPEED_10_DUPLEX_FULL,
	TPM_SPEED_10_DUPLEX_HALF
} tpm_autoneg_mode_t;

/*
* typedef: enum tpm_phy_loopback_mode_t
*
* Description: Enumeration of Phy loopback mode
*
* Enumerations:
	TPM_PHY_INTERNAL_LOOPBACK: internal loopback mode
	TPM_PHY_EXTERNAL_LOOPBACK:external loopback mode
*/
typedef enum {
	TPM_PHY_INTERNAL_LOOPBACK,
	TPM_PHY_EXTERNAL_LOOPBACK
} tpm_phy_loopback_mode_t;

/*
* typedef: enum tpm_vlan_member_mode_t
*
* Description: Enumeration of VLAN member mode
*
*/
typedef enum {
	TPM_VLAN_EGRESS_UNMODIFIED,
	TPM_VLAN_NOT_A_MEMBER,
	TPM_VLAN_EGRESS_UNTAGGED,
	TPM_VLAN_EGRESS_TAGGED
} tpm_vlan_member_mode_t;

/* switch mirror type */
typedef enum {
	TPM_SW_MIRROR_INGRESS,
	TPM_SW_MIRROR_EGRESS
} tpm_sw_mirror_type_t;

/* Switch mirror type */
typedef struct {
	uint32_t sport;
	uint32_t dport;
	tpm_sw_mirror_type_t mode;
	bool enable;
	uint8_t dummy1;
	uint16_t dummy2;
} tpm_sw_mirror_t;

/* Switch trunk type */
typedef struct {
	uint32_t trunk_id;
	uint32_t port_mask;
	uint32_t mask_num;
	uint32_t trunk_mask;
} tpm_sw_trunk_t;

/*  typedef: struct tpm_sw_pirl_customer_t*/
typedef struct {
	uint32_t ebsLimit;
	uint32_t cbsLimit;
	uint32_t bktIncrement;
	uint32_t bktRateFactor;
	bool isValid;
	uint8_t dummy1;
	uint16_t dummy2;
} tpm_sw_pirl_customer_t;

/******************* Scheduler definitions *****************************/
#define     TPM_PP_SCHED_STRICT             (0x001)	/* strict priority */
#define     TPM_PP_SCHED_WRR                (0x002)	/* WRR - weighted round robin */

/* Packet Processor - scheduler type - bitmap - ex: TPM_PP_SCHED_STRICT | TPM_PP_SCHED_WRR */
typedef uint32_t tpm_pp_sched_type_t;

/* Ethernet counters 1 */
typedef struct {
	uint32_t fcsErrors;
	uint32_t excessiveCollisionCounter;
	uint32_t lateCollisionCounter;
	uint32_t frameTooLongs;
	uint32_t bufferOverflowsOnReceive;
	uint32_t bufferOverflowsOnTransmit;
	uint32_t singleCollisionFrameCounter;
	uint32_t multipleCollisionsFrameCounter;
	uint32_t sqeCounter;
	uint32_t deferredTransmissionCounter;
	uint32_t internalMacTransmitErrorCounter;
	uint32_t carrierSenseErrorCounter;
	uint32_t alignmentErrorCounter;
	uint32_t internalMacReceiveErrorCounter;

} tpm_swport_pm_1_t;

/* Ethernet counters 3 */
typedef struct {
	uint32_t dropEvents;
	uint32_t octets;
	uint32_t packets;
	uint32_t broadcastPackets;
	uint32_t multicastPackets;
	uint32_t undersizePackets;
	uint32_t fragments;
	uint32_t jabbers;
	uint32_t packets_64Octets;
	uint32_t packets_65_127Octets;
	uint32_t packets_128_255Octets;
	uint32_t packets_256_511Octets;
	uint32_t packets_512_1023Octets;
	uint32_t packets_1024_1518Octets;
} tpm_swport_pm_3_t;

/*
  All counter set 3 is used by 88E6093 and 88E6065
*/
typedef struct {
	uint32_t  dropEvents;
	uint32_t  InGoodOctetsLo;
	uint32_t  InGoodOctetsHi;
	uint32_t  InBadOctets;
	uint32_t  OutFCSErr;
	uint32_t  InUnicasts;
	uint32_t  Deferred;
	uint32_t  InBroadcasts;
	uint32_t  InMulticasts;
	uint32_t  Octets64;
	uint32_t  Octets127;
	uint32_t  Octets255;
	uint32_t  Octets511;
	uint32_t  Octets1023;
	uint32_t  OctetsMax;
	uint32_t  OutOctetsLo;
	uint32_t  OutOctetsHi;
	uint32_t  OutUnicasts;
	uint32_t  Excessive;
	uint32_t  OutMulticasts;
	uint32_t  OutBroadcasts;
	uint32_t  Single;
	uint32_t  OutPause;
	uint32_t  InPause;
	uint32_t  Multiple;
	uint32_t  Undersize;
	uint32_t  Fragments;
	uint32_t  Oversize;
	uint32_t  Jabber;
	uint32_t  InMACRcvErr;
	uint32_t  InFCSErr;
	uint32_t  Collisions;
	uint32_t  Late;

} tpm_swport_pm_3_all_t;

/******************************************************************************/
/********************************** Initialisation defs ***********************/
/******************************************************************************/

#define MV_TPM_UN_INITIALIZED_INIT_PARAM   (0xFFFF)

/* UpStream and DownStream general convention */
#define TPM_DOWNSTREAM          (0)
#define TPM_UPSTREAM            (1)

/* Definitions for array sizes */
#define     TPM_NUM_GMACS                   (3)
#define     TPM_MAX_NUM_TX_QUEUE            (8)
#define     TPM_MAX_NUM_RX_QUEUE            (8)
#define     TPM_MAX_NUM_PORTS               (10)	/* WAN 1 + UNI 0..7 + 1 VIRT_UNI see  tpm_src_port_type_t */
#define     TPM_NUM_VLAN_ETYPE_REGS         (4)
#define     TPM_MAX_MOD_CHAIN_NUM           (16)
#define     TPM_MAX_TPID_COMB_NUM           (16)

typedef enum {
	TPM_DIR_DS,
	TPM_DIR_US,
	TPM_NUM_DIRECTIONS
} tpm_dir_t;

typedef enum {
	TPM_PON_WAN_DUAL_MAC_INT_SWITCH = 1,
	TPM_PON_WAN_G0_INT_SWITCH,
	TPM_PON_WAN_G1_LAN_G0_INT_SWITCH,
	TPM_G0_WAN_G1_INT_SWITCH,
	TPM_G1_WAN_G0_INT_SWITCH,
	TPM_PON_G1_WAN_G0_INT_SWITCH,
	TPM_PON_G0_WAN_G1_INT_SWITCH,
	TPM_PON_WAN_DUAL_MAC_EXT_SWITCH,
	TPM_PON_WAN_G1_MNG_EXT_SWITCH,
	TPM_PON_WAN_G0_SINGLE_PORT,
	TPM_PON_WAN_G1_SINGLE_PORT,
	TPM_PON_G1_WAN_G0_SINGLE_PORT,
	TPM_PON_G0_WAN_G1_SINGLE_PORT,
	TPM_PON_WAN_G0_G1_LPBK,
	TPM_PON_WAN_G0_G1_DUAL_LAN
} tpm_eth_complex_profile_t;

typedef enum {
	TPM_PNC_LAST_ENTRY_INIT_DROP,	/* Last (default) entry in PnC is hardcoded to DROP */
	TPM_PNC_LAST_ENTRY_INIT_TRAP	/* Last (default) entry in PnC is hardcoded to TRAP to CPU */
} tpm_init_pnc_last_init_t;

typedef enum {
	TPM_SCHED_SP,
	TPM_SCHED_WRR
} tpm_init_sched_t;

typedef enum {
	TPM_PORT_DOWN,
	TPM_PORT_UP
} tpm_init_port_admin_t;

typedef enum {
	TPM_SPEED_10M,
	TPM_SPEED_100M,
	TPM_SPEED_1G,
	TPM_SPEED_AUTO
} tpm_init_port_speed_t;

typedef enum {
	TPM_DUP_HALF,
	TPM_DUP_FULL,
	TPM_DUP_AUTO
} tpm_init_port_duplex_t;

typedef enum {
	TPM_CONN_DISC,
	TPM_CONN_QSGMII,
	TPM_CONN_FE_PHY,
	TPM_CONN_GE_PHY,
	TPM_CONN_RGMII1,
	TPM_CONN_RGMII2
} tpm_init_chip_conn_t;

/* Possible internal ethernet connnection devices for an external ethernet port */
typedef enum {
	TPM_INTCON_GMAC0,
	TPM_INTCON_GMAC1,
	TPM_INTCON_SWITCH
} tpm_init_int_conn_t;

/* Possible Physical internal connections for a Packet Processor Ethernet GMAC (GMAC0/GMAC1) */
typedef enum {
	TPM_GMAC_CON_DISC,	/* Disconnected */
	TPM_GMAC_CON_QSGMII,	/* Quad SGMII */
	TPM_GMAC_CON_SWITCH_4,	/* Amber Switch Port #4 */
	TPM_GMAC_CON_SWITCH_5,	/* Amber Switch Port #5 */
	TPM_GMAC_CON_SWITCH_6,	/* Amber Switch Port #6 */
	TPM_GMAC_CON_RGMII1,
	TPM_GMAC_CON_RGMII2,
	TPM_GMAC_CON_GE_PHY	/* Internal Gig PHY */
} tpm_init_gmac_conn_t;

typedef enum {
	TPM_Q_OWNER_CPU,
	TPM_Q_OWNER_GMAC0,
	TPM_Q_OWNER_GMAC1,
	TPM_Q_OWNER_PMAC,
	TPM_Q_OWNER_MAX
} tpm_init_txq_owner_t;

typedef enum {
	TPM_EPON,
	TPM_GPON,
	TPM_P2P,
	TPM_NONE
} tpm_init_pon_type_t;

typedef enum {
	TPM_ACTIVE_WAN,
	TPM_STNDBY_WAN
} tpm_init_wan_mode_t;

typedef enum {
	TPM_TX_MOD_GMAC0,	/* = TPM_ENUM_GMAC_0 */
	TPM_TX_MOD_GMAC1,	/*= TPM_ENUM_GMAC_1 */
	TPM_TX_MOD_PMAC_0,	/* = TPM_ENUM_PMAC */
	TPM_TX_MOD_PMAC_1,
	TPM_TX_MOD_PMAC_2,
	TPM_TX_MOD_PMAC_3,
	TPM_TX_MOD_PMAC_4,
	TPM_TX_MOD_PMAC_5,
	TPM_TX_MOD_PMAC_6,
	TPM_TX_MOD_PMAC_7,
	TPM_MAX_NUM_TX_PORTS
} tpm_init_tx_mod_t;

/* Structure holds the physical connections of all external Ethernet ports */
typedef struct {
	uint32_t		valid;
	tpm_init_gmac_conn_t	conn;
	tpm_src_port_type_t	port_src;
} tpm_init_gmac_conn_conf_t;

/* Structure holds the BM Pool Buffers for small packets
 * (contribution to shared pool) and large packets(pool per port) */
typedef struct {
	uint32_t valid;
	uint32_t small_pkt_buffers;	/* Defines number of small packet pool BM buffers */
	uint32_t large_pkt_buffers;	/* Defines number of large packet pool BM buffers */
} tpm_init_gmac_bufs_t;

/* Structure holds the physical connections of all external Ethernet ports */
typedef struct {
	uint32_t valid;
	tpm_src_port_type_t port_src;		/* Port number according to Device port numbering scheme	*/
	tpm_init_chip_conn_t chip_connect;	/* Connection to physical output lines on SoC			*/
	tpm_init_int_conn_t int_connect;	/* Internal Ethernet device port is connected to		*/
	uint32_t switch_port;			/* Port of Internal_Switch, the port is connected to		*/
} tpm_init_eth_port_conf_t;

typedef struct {
	uint32_t valid;
	tpm_init_sched_t sched_method;
	tpm_init_txq_owner_t queue_owner;
	uint32_t owner_queue_num;
	uint32_t queue_size;
	uint32_t queue_weight;
} tpm_init_gmac_txq_t;

typedef struct {
	uint32_t valid;
	uint32_t queue_size;
} tpm_init_gmac_rxq_t;

/*Structure defines the details of a Packet Processor Tx component  */
typedef struct {
	uint32_t valid;	/* Defines if the Tx component is used */
	tpm_init_gmac_txq_t tx_queue[TPM_MAX_NUM_TX_QUEUE];	/* Config. of each of the 8 Tx queue of this Tx component */
} tpm_init_gmac_tx_t;

typedef struct {
	uint32_t valid;	/* Defines if any of the GMAC queues are defined */
	tpm_init_gmac_rxq_t rx_queue[TPM_MAX_NUM_RX_QUEUE];	/* Config. of each of the 8 Rx queue of this GMAC component */
} tpm_init_gmac_rx_t;

typedef enum {
	TPM_INVALID_RANGE = -1,
	TPM_MIN_RANGE,
	TPM_PNC_MNGMT_DS = TPM_MIN_RANGE,
	TPM_PNC_MAC_LEARN,
	TPM_PNC_CPU_WAN_LPBK_US,
	TPM_PNC_NUM_VLAN_TAGS,
	TPM_PNC_DS_LOAD_BALANCE,
	TPM_PNC_MULTI_LPBK,
	TPM_PNC_VIRT_UNI,
	TPM_PNC_LOOP_DET_US,
	TPM_PNC_L2_MAIN,
	TPM_PNC_ETH_TYPE,
	TPM_PNC_IGMP,
	TPM_PNC_IPV4_MC_DS,
	TPM_PNC_IPV4_MAIN,
	TPM_PNC_IPV4_TCP_FLAG,
	TPM_PNC_TTL,
	TPM_PNC_IPV4_PROTO,
	TPM_PNC_IPV4_FRAG,
	TPM_PNC_IPV4_LEN,
	TPM_PNC_IPV6_NH,
	TPM_PNC_IPV6_L4_MC_DS,
	TPM_PNC_IPV6_TCP_FLAG,
	TPM_PNC_IPV6_L4,
	TPM_PNC_IPV6_HOPL,
	TPM_PNC_IPV6_MC_SIP,
	TPM_PNC_IPV6_GEN,
	TPM_PNC_IPV6_MC_DS,
	TPM_PNC_IPV6_DIP,
	TPM_PNC_CNM_IPV4_PRE,
	TPM_PNC_CNM_MAIN,
	TPM_PNC_CATCH_ALL,
	TPM_MAX_RANGE = TPM_PNC_CATCH_ALL,
	TPM_MAX_NUM_RANGES
} tpm_pnc_ranges_t;

typedef enum {
	TPM_RANGE_TYPE_ACL,
	TPM_RANGE_TYPE_TABLE
} tpm_range_type_t;

typedef enum {
	TPM_MH_SRC_RX_CTRL = 0,
	TPM_MH_SRC_PNC_RI,
} tpm_init_mh_src_t;

typedef enum {
	TPM_VALID_DISABLED = 0,
	TPM_VALID_ENABLED
} tpm_init_tpm_validation_t;

typedef enum {
	TPM_ENUM_RESET_LEVEL0,
	TPM_ENUM_RESET_LEVEL1,
	TPM_ENUM_MAX_RESET_LEVEL = TPM_ENUM_RESET_LEVEL1
} tpm_reset_level_enum_t;

typedef enum {
	TPM_IPV6_5T_DISABLED = 0,
	TPM_IPV6_5T_ENABLED,
} tpm_init_ipv6_5t_enable_t;
typedef enum {
	TPM_DS_MAC_BASED_TRUNK_DISABLED = 0,
	TPM_DS_MAC_BASED_TRUNK_ENABLED,
} tpm_init_ds_mac_based_trunk_enable_t;

typedef enum {
	TPM_CTC_CM_DISABLED = 0,
	TPM_CTC_CM_ENABLED,
} tpm_init_ctc_cm_enable_t;

typedef enum {
	TPM_CTC_CM_IPv6_FIRST_24B = 0,
	TPM_CTC_CM_IPv6_SECOND_24B,
} tpm_ctc_cm_ipv6_parse_win_t;
typedef enum {
	TPM_SPLIT_MOD_MODE_CTC = 0,
	TPM_SPLIT_MOD_MODE_TR156,
} tpm_init_split_mod_mode_t;
typedef enum {
	TPM_PNC_MAC_LEARN_DISABLED = 0,
	TPM_PNC_MAC_LEARN_ENABLED,
} tpm_init_pnc_mac_learn_enable_t;

typedef enum {
	TPM_VIRT_UNI_DISABLED = 0,
	TPM_VIRT_UNI_ENABLED
} tpm_init_virt_uni_enable_t;

typedef enum {
	TPM_CFG_PNC_PARSE_DISABLED,
	TPM_CFG_PNC_PARSE_ENABLED
} tpm_init_cfg_pnc_parse_t;

typedef enum {
	TPM_CPU_LOOPBACK_DISABLED,
	TPM_CPU_LOOPBACK_ENABLED
} tpm_init_cpu_loopback_t;

typedef enum {
	TPM_DOUBLE_TAG_DISABLED,
	TPM_DOUBLE_TAG_ENABLED
} tpm_init_double_tag_t;

typedef enum {
	TPM_CFG_MODE_APPL = 0,
	TPM_CFG_MODE_KERNEL
} tpm_config_mode_t;

typedef enum {
	TPM_FLUSH_ATU_ALL = 0,
	TPM_FLUSH_ATU_DYNAMIC
} tpm_flush_atu_type_t;

typedef struct {
	tpm_pnc_ranges_t range_num;
	tpm_range_type_t range_type;
	uint32_t range_size;	/* Range's Physical PnC size */
	uint32_t cntr_grp;
	uint32_t lu_mask;
	tpm_reset_level_enum_t min_reset_level;
	uint32_t valid;
} tpm_init_pnc_range_t;

typedef struct {
	uint16_t v1_tpid;
	uint16_t v2_tpid;
} tpm_init_tpid_comb_t;

typedef struct {
	uint32_t opt_num;
	tpm_init_tpid_comb_t opt[TPM_MAX_TPID_COMB_NUM];
} tpm_init_tpid_opt_t;

typedef struct {
	tpm_init_virt_uni_enable_t enabled;
	tpm_src_port_type_t uni_port;
	uint32_t switch_port;
} tpm_init_virt_uni_t;

typedef struct {
	uint32_t udp_checksum_use_init_bm;
	uint32_t udp_checksum_update;
} tpm_init_mod_params_t;

typedef struct {
	uint16_t opcode;
	uint16_t data;
	uint8_t last;
	uint8_t updt_ipv4;
	uint8_t updt_tcp;
	uint8_t dummy;
} tpm_mod2_entry_t;

typedef struct {
	uint32_t entry_id;
	tpm_mod2_entry_t entry_data;
} tpm_mod_rule_t;

typedef enum {
	TPM_MTU_CHECK_DISABLED = 0,
	TPM_MTU_CHECK_ENABLED
} tpm_init_mtu_setting_enable_t;

typedef enum {
	TPM_TTL_ZERO_ACTION_NOTHING = 0,
	TPM_TTL_ZERO_ACTION_DROP,
	TPM_TTL_ZERO_ACTION_TO_CPU
} tpm_init_ttl_illegal_action_t;

typedef enum {
	TPM_TCP_FLAG_NOT_CHECK = 0,
	TPM_TCP_FLAG_CHECK
} tpm_init_tcp_flag_check_t;

typedef enum {
	TPM_ETY_DSA_DISABLE = 0,
	TPM_ETY_DSA_ENABLE
} tpm_init_ety_dsa_enable_t;

typedef enum {
	TPM_PPPOE_ADD_DISABLED = 0,
	TPM_PPPOE_ADD_ENABLED
} tpm_init_pppoe_add_enable_t;
typedef enum {
	TPM_SPLIT_MOD_DISABLED = 0,
	TPM_SPLIT_MOD_ENABLED
} tpm_init_split_mod_enable_t;

typedef enum {
	TPM_MTU_IPV4,	/* IPV4 */
	TPM_MTU_IPV6,	/* IPV6 */
} tpm_mtu_ethertype_t;

typedef enum {
	TPM_SELF_CHECK_LEVEL0,
	TPM_SELF_CHECK_LEVEL1,
	TPM_ENUM_MAX_CHECK_LEVEL = TPM_SELF_CHECK_LEVEL1
} tpm_self_check_level_enum_t;

typedef enum tpm_unknown_mac_conf {
	TPM_UNK_MAC_TRAP,/*default rule trap packet to CPU*/
	TPM_UNK_MAC_DROP,/*default rule drop the packet*/
	TPM_UNK_MAC_CONTINUE/*default rule frwd packet to GMAC1*/
} tpm_unknown_mac_conf_t;

typedef struct {
	tpm_init_mtu_setting_enable_t mtu_enable;
	uint32_t ipv4_mtu_us;
	uint32_t ipv4_pppoe_mtu_us;
	uint32_t ipv6_mtu_us;
	uint32_t ipv6_pppoe_mtu_us;
	uint32_t ipv4_mtu_ds;
	uint32_t ipv6_mtu_ds;
} tpm_init_mtu_params_t;

typedef struct {
	uint32_t type;
	uint32_t num;
} tpm_init_chain_data_t;

typedef struct {
	uint32_t chain_num;
	tpm_init_chain_data_t chain_data[TPM_MAX_MOD_CHAIN_NUM];
} tpm_init_mod_chain_t;

typedef struct {
	tpm_mc_filter_mode_t filter_mode;
	uint32_t per_uni_vlan_xlat;
	uint32_t mc_pppoe_enable;
	uint32_t mc_hwf_queue;
	uint32_t mc_cpu_queue;
	uint32_t ipv4_mc_support;
	uint32_t ipv6_mc_support;
} tpm_init_mc_setting_t;

typedef enum {
	TPM_INVALID_GMAC = -1,
	TPM_ENUM_GMAC_0,
	TPM_ENUM_GMAC_1,
	TPM_ENUM_PMAC,
	TPM_MAX_GMAC = TPM_ENUM_PMAC,
	TPM_MAX_NUM_GMACS
} tpm_gmacs_enum_t;


typedef struct {
	tpm_init_split_mod_enable_t split_mod_enable;
	uint8_t p_bit[8];
	uint32_t p_bit_num;
	uint32_t vlan_num;
	tpm_init_split_mod_mode_t split_mod_mode;
} tpm_init_split_mod_params_t;

typedef struct {
	uint8_t		enabled;
	uint8_t		port;
	uint8_t		tx_port;
	uint8_t		tx_queue;
	uint32_t	tgt_port;
	uint32_t	queue_sample_freq;
	uint32_t	thresh_high;
	uint32_t	thresh_low;
} tpm_init_fc_params_t;

typedef struct {
	uint32_t omci_etype;
	tpm_init_pon_type_t pon_type;
	uint32_t igmp_snoop;
	uint32_t igmp_cpu_queue;
	uint32_t igmp_pkt_frwd_mod[TPM_MAX_NUM_ETH_PORTS+1]; /* save space for UNI_ANY */
	uint32_t num_tcont_llid;
	tpm_init_gmac_bufs_t gmac_bp_bufs[TPM_NUM_GMACS];
	uint32_t gmac0_mh_en;
	uint32_t gmac1_mh_en;
	tpm_init_fc_params_t		port_fc_conf;
	tpm_eth_complex_profile_t	eth_cmplx_profile;
	tpm_init_eth_port_conf_t	eth_port_conf[TPM_MAX_NUM_ETH_PORTS];
	tpm_init_gmac_conn_conf_t	gmac_port_conf[TPM_NUM_GMACS];
	uint32_t			active_wan;
	tpm_init_ds_mac_based_trunk_enable_t ds_mac_based_trunk_enable;

	tpm_init_gmac_tx_t gmac_tx[TPM_MAX_NUM_TX_PORTS];
	tpm_init_gmac_rx_t gmac_rx[TPM_NUM_GMACS];
	tpm_init_pnc_range_t pnc_range[TPM_MAX_NUM_RANGES];
	tpm_init_pnc_last_init_t catch_all_pkt_action;

	tpm_init_mh_src_t ds_mh_set_conf;
	tpm_init_tpm_validation_t validation_en;
	tpm_init_tpid_opt_t tpid_opt;
	uint32_t vlan_etypes[TPM_NUM_VLAN_ETYPE_REGS];
	tpm_init_mod_params_t mod_config;
	tpm_init_mod_chain_t mod_chain;
	tpm_init_cfg_pnc_parse_t cfg_pnc_parse;
	tpm_init_cpu_loopback_t cpu_loopback;
	uint32_t trace_debug_info;
	tpm_init_ipv6_5t_enable_t ipv6_5t_enable;
	tpm_init_ctc_cm_enable_t ctc_cm_enable;
	tpm_ctc_cm_ipv6_parse_win_t  ctc_cm_ipv6_parse_window;
	tpm_init_virt_uni_t virt_uni_info;

#if 0
	uint16_t vlan1_tpid;
	uint16_t vlan2_tpid;
#endif

	tpm_init_mtu_params_t mtu_config;
	tpm_init_pppoe_add_enable_t pppoe_add_enable;
	uint32_t num_vlan_tags;
	uint32_t cpu_rx_queue;
	tpm_init_ttl_illegal_action_t ttl_illegal_action;
	tpm_init_tcp_flag_check_t tcp_flag_check;
	tpm_init_ety_dsa_enable_t ety_dsa_enable;

	tpm_init_mc_setting_t mc_setting;
	tpm_init_split_mod_params_t split_mod_config;
	uint32_t switch_init;
	tpm_init_pnc_mac_learn_enable_t pnc_mac_learn_enable;
} tpm_init_t;

#define XML_FILE_PATH_LENGTH  (64)
typedef struct {
	char xml_file_path[XML_FILE_PATH_LENGTH];
} tpm_setup_t;

/******************* TPM global ERROR codes  **************************/
typedef enum tpm_error_code {
	TPM_RC_OK,	/*Return ok (=0). */
	ERR_GENERAL,	/*General purpose error. */
	ERR_OWNER_INVALID,	/*Illegal owner id. */
	ERR_SRC_PORT_INVALID,	/*Illegal source port. */
	ERR_RULE_NUM_INVALID,	/*Illegal rule number. */
	ERR_RULE_IDX_INVALID,	/*Illegal rule idx. */
	ERR_PARSE_MAP_INVALID,	/*Illegal parse mapping. */
	ERR_VLAN_OP_INVALID,	/*Illegal VLAN operation. */
	ERR_L2_KEY_INVALID,	/*Illegal key information for creating the ACL rule. */
	ERR_FRWD_INVALID,	/*Illegal forwarding decision for packet. */
	ERR_MOD_INVALID,	/*Illegal modification command on packet. */
	ERR_ACTION_INVALID,	/*Illegal action on the packet. */
	ERR_NEXT_PHASE_INVALID,	/*Illegal next phase for  ACL */
	ERR_RULE_KEY_MISMATCH,	/*Inconsistency between rule_num, src_port, l2_acl_key. */
	ERR_IPV4_NO_CONT_L4,	/*There is no continuous block with L4 src port and destination port in packet. */
	ERR_IPV6_ADD_FAIL,	/*Inconsistency in the building of the IPv6 rule. */
	ERR_MC_STREAM_INVALID,	/*Illegal stream number. */
	ERR_MC_STREAM_EXISTS,	/*Stream number already exists. */
	ERR_MC_DST_PORT_INVALID,	/*Destination port bitmap does not match the UNI ports. */
	ERR_MC_DST_QUEUE_INVALID,	/*Destination queue number invalid. */
	ERR_IPV4_MC_DST_IP_INVALID,	/*Destination IP address is not in the MC range. */
	ERR_IPV6_MC_DST_IP_INVALID,	/*Destination IPv6 address is not in the MC range. */
	ERR_IPV6_MC_SRC_IP_INVALID,	/*SRC IPv6 address is not in the MC_SIP range. */
	ERR_OMCI_TCONT_INVALID,	/*Illegal TCONT. */
	ERR_MNGT_TX_Q_INVALID,	/*Illegal management TX queue. */
	ERR_MNGT_CREATE_DUPLICATE_CHANNEL,	/*Create channel that already exists, */
	ERR_MNGT_DEL_CHANNEL_INVALID,	/*Delete an unexisting management channel. */
	ERR_OAM_LLID_INVALID,	/*Illegal LLID. */
	ERR_CFG_GETNEXT_INDEX_INVALID,	/*Illegal get_next index for retrieving existing configuration. */
	ERR_CFG_GETNEXT_DIRECTION_INVALID,	/*Illegal direction set (0-upstream, 1-downstream). */
	ERR_CFG_GET_CHANNEL_INVALID,	/*Get an unexisting management channel. */
	ERR_SW_MAC_INVALID,	/*Illegal MAC address. */
	ERR_SW_MAC_STATIC_NOT_FOUND,	/*Delete an unexisting static MAC. */
	ERR_SW_MAC_PER_PORT_INVALID,	/*Illegal limit of MAC per port (1-265). */
	ERR_SW_NUM_OF_MAC_PER_PORT_INVALID,	/*Illegal limit of MAC per port (1-265). */
	ERR_SW_VID_INVALID,	/*Illegal VLAN ID. */
	ERR_SW_TM_QUEUE_INVALID,	/*Illegal queue id. */
	ERR_SW_TM_WEIGHT_INVALID,	/*Illegal weight value. */
	ERR_SW_TM_WRR_MODE_INVALID,	/*Illegal WRR mode. */
	ERR_API_TYPE_INVALID,	/*Illegal API type */
	ERR_DIR_INVALID,	/*Illegal direction value */
	ERR_NULL_POINTER,	/* NULL pointer */
	ERR_IGMP_NOT_ENABLED,	/* Try to disable IGMP which was not enabled */
	ERR_OUT_OF_RESOURCES,	/* No more resources of certain type */
	ERR_AI_SESS_EXISTS,	/* AI Session already exists */
	ERR_AI_SESS_DELETING,	/* AI Session was deleted in this API call */
	ERR_SW_TM_BUCKET_SIZE_INVALID,	/*Illegal bucket size. */
	ERR_SW_TM_RATE_LIMIT_INVALID,	/*Illegal rate limit. */
	ERR_DELETE_KEY_INVALID,	/* Illegal combination of key / rule_index for delete action */
	ERR_L3_KEY_INVALID,	/*Illegal key information for creating the ACL rule. */
	ERR_IPV4_KEY_INVALID,	/*Illegal key information for creating the ACL rule. */
	ERR_IPV6_KEY_INVALID,	/*Illegal key information for creating the ACL rule. */
	ERR_PORT_IGMP_FRWD_MODE_INVALID,	/*Illegal IGMP forward mode. */
	ERR_IPV6_API_ILLEGAL_CALL,  /* Invoke the IPV6 API which is forbidden in current mode */
	ERR_IPV6_5T_RULE_EXISTS,	/* IPV6 rule already exists */
	ERR_IPV6_5T_FLOW_PARTIAL_MATCHED,	/* IPV6 5-tuple flow is a subflow of another flow */
	ERR_IPV6_5T_RULE_IN_USE,	/* Try to delete a rule which is referred by other flows */
	ERR_IPV6_5T_FLOW_AI_BITS_EXHAUSED, /* No enough AI resource for new subflow */
	ERR_SW_NOT_INIT,	/* TPM was not successfully intiailized . */
	ERR_FEAT_UNSUPPORT,	/* TPM feature not supported  . */
	ERR_API_BUSY,
	ERR_CTC_CM_DB_ERR,  /* CTC CnM DB Error */
	ERR_CTC_CM_PREC_INVALID,   /* CTC CnM Precedence invalid */
	ERR_TPMCHECK_DB_CHAIN_TYPE_MISMATCH,/*DB main chain type check FAIL */
	ERR_TPMCHECK_HW_CHAIN_TYPE_MISMATCH,/*HW main chain type check FAIL */
	ERR_TPMCHECK_BOTH_CHAIN_TYPE_MISMATCH,/*HW & DB main chain type check FAIL */
	ERR_TPMCHECK_DB_MISMATCH,/*tpm check with DB FAIL */
	ERR_TPMCHECK_HW_MISMATCH,/*tpm check with HW FAIL */
	ERR_TPMCHECK_PNC_DB_MISMATCH,/*DB PNC check FAIL */
	ERR_TPMCHECK_PNC_HW_MISMATCH,/*HW PNC check FAIL */
	ERR_TPMCHECK_PMT_DB_MISMATCH,/*DB PMT check FAIL */
	ERR_TPMCHECK_PMT_HW_MISMATCH,/*HW PMT check FAIL */
	ERR_UNKNOWN_MAC_CONF_INVALID,/*Illegal MAC learn default conf*/
	ERR_PHY_SRC_PORT_CONN_INVALID,/*PHY and source port connection invalid*/
	ERR_PHY_STATUS_UNKNOWN,/*PHY status info is unknown*/
} tpm_error_code_t;

#ifdef __cplusplus
}
#endif
#endif
