blob: b11667dfbc37701d255cbaea63897304796190db [file] [log] [blame]
/*******************************************************************************
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_internal_types.h
*
* DESCRIPTION:
* Traffic Processor Manager = TPM
*
* DEPENDENCIES:
* None
*
* CREATED BY: OctaviaP
*
* DATE CREATED:
*
* FILE REVISION NUMBER:
* Revision: 1.3
*
*
*******************************************************************************/
#ifndef _TPM_INT_TYPES_H_
#define _TPM_INT_TYPES_H_
#ifdef __cplusplus
extern "C" {
#endif
/*************************************************************/
/* ENUMERATIONS */
/*************************************************************/
#define TPM_MAX_NUM_GEM_PORT (4096)
#define TPM_CHAIN_NUM_UNLIMITED (0x1000)
/* PNC Target TXP, in exact numbering scheme, do not change !! */
typedef enum {
TPM_INVALID_PNC_TRG = -1,
TPM_PNC_TRG_CPU,
TPM_PNC_TRG_GMAC0,
TPM_PNC_TRG_GMAC1,
TPM_PNC_TRG_PMAC0,
TPM_PNC_TRG_PMAC1,
TPM_PNC_TRG_PMAC2,
TPM_PNC_TRG_PMAC3,
TPM_PNC_TRG_PMAC4,
TPM_PNC_TRG_PMAC5,
TPM_PNC_TRG_PMAC6,
TPM_PNC_TRG_PMAC7
} tpm_pnc_trg_t;
typedef enum {
TPM_INT_CALL = 0,
TPM_EXT_CALL
} tpm_caller_t;
#define TPM_MAX_VID (4096) /* legal VLAN ID = 0-4095 */
#define TPM_MAX_NUM_CTC_PRECEDENCE (8)
#define PON_PORT (2)
#define SW_GMAC_0 (0)
#define SW_GMAC_1 (1)
#define TPM_MAX_NUM_DROP_PRECEDENCE (4)
/* MH configuration - fixed values - will be supported via xml params */
#define TPM_GMAC0_AMBER_PORT_NUM 4
#define TPM_GMAC1_AMBER_PORT_NUM 5
/* Hardware GMAC number to HAL Port number conversion, note that the numbers are currently equal */
#define TPM_GMAC0_PP_PORT_NUM 0
#define TPM_GMAC1_PP_PORT_NUM 1
#define TPM_PMAC_PP_PORT_NUM 2
/* retrieve the num of TCONTs and LLIDs from the .config - kernel global params */
#define TPM_GPON_MAX_NUM_OF_T_CONTS (CONFIG_MV_PON_TCONTS)
#define TPM_EPON_MAX_MAC_NUM (CONFIG_MV_EPON_LLID)
/* Currently hardcoded, must update if pp_port_numbers will be reshuffled */
#define TPM_GMAC_TO_PP_PORT(x) (x)
#define TPM_NUM_MC_VID_BITS (2)
#define TPM_NUM_IPV6_SUBFLOW_BITS_P1 (1)
#define TPM_NUM_IPV6_SUBFLOW_BITS_P2 (2)
#define TPM_NUM_IPV6_SUBFLOW_BITS (TPM_NUM_IPV6_SUBFLOW_BITS_P1 + TPM_NUM_IPV6_SUBFLOW_BITS_P2)
#define TPM_NUM_IPV6_MC_SIP_BITS_P1 (1)
#define TPM_NUM_IPV6_MC_SIP_BITS_P2 (2)
#define TPM_NUM_IPV6_MC_SIP_BITS (TPM_NUM_IPV6_MC_SIP_BITS_P1 + TPM_NUM_IPV6_MC_SIP_BITS_P2)
#define ILLEGAL_API(api_type) ((api_type >= TPM_API_TYPE_ILLEGAL) || (api_type < 0))
#define TPM_INTERNAL_OWNER_ID (0xABBACDDC)
#define TPM_INVALID_QUEUE (0xFFFF)
typedef enum {
TPM_INVALID_SECTION = -1,
TPM_PNC_MAC_LEARN_ACL,
TPM_DS_LOAD_BALANCE_ACL,
TPM_CPU_LOOPBACK_ACL,
TPM_L2_PRIM_ACL,
TPM_L3_TYPE_ACL,
TPM_IPV4_ACL,
TPM_IPV4_MC,
TPM_IPV6_NH_ACL,
TPM_L4_ACL,
TPM_IPV6_GEN_ACL,
TPM_IPV6_DIP_ACL,
TPM_IPV6_MC_ACL,
TPM_CNM_MAIN_ACL,
TPM_MAX_NUM_API_SECTIONS /* Equals to number of entries in enum */
} tpm_api_sections_t;
#define ILLEGAL_API_SEC(api_sec) ((api_sec >= TPM_MAX_NUM_API_SECTIONS) || (api_sec < 0))
typedef enum {
TPM_AI_DS_MAC_IP_SES,
TPM_AI_US_MAC_IP_SES,
TPM_AI_IPV6_DS_SIP_SES,
TPM_AI_IPV6_US_SIP_SES,
TPM_AI_IPV6_DS_NH_SES,
TPM_AI_IPV6_US_NH_SES,
TPM_AI_IPV6_DS_5T_SES,
TPM_AI_IPV6_US_5T_SES
} tpm_ai_ses_type_t;
typedef enum {
SES_IN,
SES_OUT
} tpm_ai_con_type_t;
/*************************************************************/
/* DEFINITIONS */
/*************************************************************/
/* Amber related */
#define TPM_AMBER_MH_EN_MASK (0x800)
/* End Amber related */
/* Following are derivatives of the TPM_PARSE_FLAGs in tpm_types.h */
#define TPM_PARSE_FLAG_TAG1_MASK (TPM_PARSE_FLAG_TAG1_TRUE | TPM_PARSE_FLAG_TAG1_FALSE)
#define TPM_PARSE_FLAG_TAG2_MASK (TPM_PARSE_FLAG_TAG2_TRUE | TPM_PARSE_FLAG_TAG2_FALSE)
#define TPM_PARSE_FLAG_MTM_MASK (TPM_PARSE_FLAG_MTM_TRUE | TPM_PARSE_FLAG_MTM_FALSE)
#define TPM_PARSE_FLAG_TO_CPU_MASK (TPM_PARSE_FLAG_TO_CPU_TRUE | TPM_PARSE_FLAG_TO_CPU_FALSE)
#define TPM_PARSE_FLAG_L4P_MASK (TPM_PARSE_FLAG_L4_TCP | TPM_PARSE_FLAG_L4_UDP)
#define TPM_PARSE_FLAG_PPPOE_MASK (TPM_PARSE_FLAG_PPPOE_TRUE | TPM_PARSE_FLAG_PPPOE_FALSE)
#define TPM_PARSE_FLAG_PPPOE_ADD_MASK (TPM_PARSE_FLAG_PPPOE_ADD_TRUE | TPM_PARSE_FLAG_PPPOE_ADD_FALSE)
#define TPM_PARSE_FLAG_NO_PROTO_MASK (TPM_PARSE_FLAG_NO_PROTO_TRUE | TPM_PARSE_FLAG_NO_PROTO_FALSE)
#define TPM_PARSE_FLAG_NO_FRAG_MASK (TPM_PARSE_FLAG_NO_FRAG_TRUE | TPM_PARSE_FLAG_NO_FRAG_FALSE)
#define TPM_PARSE_FLAG_MC_VID_MASK (TPM_PARSE_FLAG_MC_VID_TRUE | TPM_PARSE_FLAG_MC_VID_FALSE)
#define TPM_PARSE_FLAG_NH2_ITER_MASK (TPM_PARSE_FLAG_NH2_ITER_TRUE | TPM_PARSE_FLAG_NH2_ITER_FALSE)
#define TPM_PARSE_FLAG_CNM_IPV4_MASK (TPM_PARSE_FLAG_CNM_IPV4_TRUE | TPM_PARSE_FLAG_CNM_IPV4_FALSE)
#define TPM_PARSE_FLAG_SPLIT_MOD_MASK (TPM_PARSE_FLGA_SPLIT_MOD_TRUE | TPM_PARSE_FLGA_SPLIT_MOD_FALSE)
#define TPM_DS_LOAD_BALNC_PARSE_BM_MASK \
(TPM_L2_PARSE_MAC_DA | TPM_L2_PARSE_MAC_SA | TPM_L2_PARSE_ONE_VLAN_TAG | TPM_L2_PARSE_TWO_VLAN_TAG |\
TPM_L2_PARSE_ETYPE | TPM_L2_PARSE_PPPOE_SES | TPM_L2_PARSE_PPP_PROT | TPM_L2_PARSE_GEMPORT)
#define TPM_L2_PARSE_BM_MASK \
(TPM_L2_PARSE_MAC_DA | TPM_L2_PARSE_MAC_SA | TPM_L2_PARSE_ONE_VLAN_TAG | TPM_L2_PARSE_TWO_VLAN_TAG |\
TPM_L2_PARSE_ETYPE | TPM_L2_PARSE_PPPOE_SES | TPM_L2_PARSE_PPP_PROT | TPM_L2_PARSE_GEMPORT)
#define TPM_L3_PARSE_BM_MASK (TPM_L2_PARSE_ETYPE | TPM_L2_PARSE_PPPOE_SES | TPM_L2_PARSE_PPP_PROT)
#define TPM_IPV4_PARSE_BM_MASK \
(TPM_IPv4_PARSE_SIP | TPM_IPv4_PARSE_DIP | TPM_IPv4_PARSE_DSCP | TPM_IPv4_PARSE_PROTO |\
TPM_PARSE_L4_SRC|TPM_PARSE_L4_DST)
#define TPM_IPV6_GEN_BM_MASK (TPM_IPv6_PARSE_SIP | TPM_IPv6_PARSE_DSCP | TPM_IPv6_PARSE_HOPL)
#define TPM_IPV6_L4_BM_MASK (TPM_PARSE_L4_SRC | TPM_PARSE_L4_DST)
/* in PARSE_FLAG_BM - bit#0 and bit#1 - TRUE and FALSE - should not be set simultaneously */
#define TPM_PARSE_FLAG_CHECK_TRUE_FALSE (0x0003)
/* number of pairs of TRUE/FALSE bits present in the PARSE_FLAG_BM:
TAG1 / TAG2 / MTM / TO_CPU / L2 */
#define TPM_PARSE_FLAG_CHECK_FIELD_NUMBER (6)
/* Following additional TPM_PARSE_FLAGs for internal use, they must co-exist (not overlap)
with existing TPM_PARSE_FLAGs in types.h */
#define TPM_PARSE_FLAG_UNI_PORT_PARSE (0x00000001LL)
#define TPM_PARSE_FLAG_PPPOE_ADD_TRUE (0x00000002LL)
#define TPM_PARSE_FLAG_PPPOE_ADD_FALSE (0x00000004LL)
#define TPM_PARSE_FLAG_NO_PROTO_TRUE (0x00000008LL)
#define TPM_PARSE_FLAG_NO_PROTO_FALSE (0x00000010LL)
#define TPM_PARSE_FLAG_NO_FRAG_TRUE (0x00000020LL)
#define TPM_PARSE_FLAG_NO_FRAG_FALSE (0x00000040LL)
#define TPM_PARSE_FLAG_MC_VID_TRUE (0x00000080LL)
#define TPM_PARSE_FLAG_MC_VID_FALSE (0x00000100LL)
#define TPM_PARSE_FLAG_MC_VID_PARSE (0x00000200LL)
#define TPM_PARSE_FLAG_NH2_ITER_TRUE (0x00000400LL)
#define TPM_PARSE_FLAG_NH2_ITER_FALSE (0x00000800LL)
#define TPM_PARSE_FLAG_IPV6_SUBFLOW_PARSE (0x00001000LL)
#define TPM_PARSE_FLAG_CNM_IPV4_TRUE (0x00002000LL)
#define TPM_PARSE_FLAG_CNM_IPV4_FALSE (0x00004000LL)
#define TPM_PARSE_FLGA_SPLIT_MOD_TRUE (0x00008000LL)
#define TPM_PARSE_FLGA_SPLIT_MOD_FALSE (0x00010000LL)
#define TPM_PARSE_FLAG_IPV4_PRE_KEY_PARSE (0x00020000LL)
#define TPM_PARSE_FLAG_CNM_PREC_PARSE (0x00040000LL)
#define TPM_PARSE_FLAG_IPV6_MC_SIP_PARSE (0x00080000LL)
#define TPM_PARSE_FLAG_DNRT_DS_TRUNK (0x00100000LL) /* Set DNRT_DS_TRUNK bit */
/* Following additional TPM_ACTIONs for internal use, they must co-exist (not overlap)
with existing TPM_ACTIONs in types.h */
#define TPM_ACTION_SET_UNI_PORT (0x00000001LL) /* Set UNI Port */
#define TPM_ACTION_SET_TAG1 (0x00000002LL) /* Set TAG1 */
#define TPM_ACTION_SET_TAG2 (0x00000004LL) /* Set TAG2 */
#define TPM_ACTION_SET_L4P_TOG_UDP (0x00000008LL) /* Set L4 proto toggle bit to '1' (=UDP) */
#define TPM_ACTION_SET_L4P_TOG_TCP (0x00000010LL) /* Set L4 proto toggle bit to '0' (=TCP) */
#define TPM_ACTION_UNSET_DNRT (0x00000020LL) /* Unset DNRT bit */
#define TPM_ACTION_UNSET_MC_VID_VALID (0x00000040LL) /* Unset MC_VID valid bit */
#define TPM_ACTION_SET_PPPOE (0x00000080LL) /* Set PPPOE packet */
#define TPM_ACTION_UNSET_PPPOE (0x00000100LL) /* Set not PPPOE packet */
#define TPM_ACTION_SET_NO_PROTO_CHECK (0x00000200LL) /* Set no IPV4 proto check */
#define TPM_ACTION_SET_NO_FRAG_CHECK (0x00000400LL) /* Set no IPV4 fragment check */
#define TPM_ACTION_SET_ADD_PPPOE (0x00000800LL) /* Set PPPOE header is added */
#define TPM_ACTION_UNSET_UNI_PORT (0x00001000LL) /* UnSet UNI Port */
#define TPM_ACTION_SET_NH2_ITER (0x00002000LL) /* Set NH2 iteration */
#define TPM_ACTION_UNSET_NH2_ITER (0x00004000LL) /* Unset NH2 iteration */
#define TPM_ACTION_SET_IPV6_SUBFLOW (0x00008000LL) /* Set IPV6 subflow */
#define TPM_ACTION_UNSET_IPV6_SUBFLOW (0x00010000LL) /* Unset IPV6 subflow */
#define TPM_ACTION_SET_CNM_IPV4 (0x00020000LL)
#define TPM_ACTION_UNSET_CNM_IPV4 (0x00040000LL)
#define TPM_ACTION_SET_SPLIT_MOD (0x00080000LL)
#define TPM_ACTION_UNSET_SPLIT_MOD (0x00100000LL)
#define TPM_ACTION_SET_IPV4_PRE_KEY (0x00200000LL)
#define TPM_ACTION_UNSET_IPV4_PRE_KEY (0x00400000LL)
#define TPM_ACTION_SET_CNM_PREC (0x00800000LL)
#define TPM_ACTION_UNSET_CNM_PREC (0x01000000LL)
#define TPM_ACTION_UNSET_DNRT_DS_TRUNK (0x02000000LL) /* Unset DNRT_DS_TRUNK bit */
#define TPM_MAX_WRR_WEIGHT (255)
#define TPM_MH_LEN (2)
#define TPM_DA_LEN (6)
#define TPM_SA_LEN (6)
#define TPM_VLAN_LEN (4)
#define TPM_ETYPE_LEN (2)
#define TPM_PPPOE_HDR_LEN (8)
#define TPM_PPPOE_SES_LEN (2)
#define TPM_PPP_PROTO_LEN (2)
#define TPM_IPV4_VER_IHL_LEN (1)
#define TPM_IPV4_DSCP_LEN (1)
#define TPM_IPV4_TOTLEN_LEN (2)
#define TPM_IPV4_IDENT_LEN (2)
#define TPM_IPV4_FLAG_OFF_LEN (2)
#define TPM_IPV4_TTL_LEN (1)
#define TPM_IPV4_PROTO_LEN (1)
#define TPM_IPV4_SIP_LEN (4)
#define TPM_IPV4_DIP_LEN (4)
#define TPM_IPV4_L4_PORT_LEN (2)
#define TPM_TCP_DUMMY_LEN (13)
#define TPM_TCP_FLAGS_LEN (1)
#define TPM_IPV6_VER_DSCP_LEN (1)
#define TPM_IPV6_DSCP_FLOW_LEN (1)
#define TPM_IPV6_FLOW_LEN (2)
#define TPM_IPV6_PLLEN_LEN (2)
#define TPM_IPV6_NH_LEN (1)
#define TPM_IPV6_HOPLIM_LEN (1)
#define TPM_IPV6_SIP_LEN (16)
#define TPM_IPV6_DIP_LEN (16)
#define TPM_L4_SPORT_LEN (2)
#define TPM_L4_DPORT_LEN (2)
#define TPM_UDP_LEN_LEN (2)
#define TPM_L4_CHECKSUM_LEN (2)
#define TPM_TCP_SEQ_NUM_LEN (4)
#define TPM_TCP_ACK_NUM_LEN (4)
#define TPM_TCP_OFFSET_LEN (1)
#define TPM_TCP_FLAGS_LEN (1)
#define TPM_TCP_WIN_LEN (2)
#define TPM_TCP_URGTPTR_LEN (2)
#define TPM_VLAN_CFI_OFFSET (12)
#define TPM_VLAN_PBIT_OFFSET (13)
#define TPM_VLAN_VID_OFFSET (0)
#define TPM_IPV4_IHL_OFFSET (0) /* Offset in the VER_IHL byte */
#define TPM_IPV4_IHL_MASK (0x0F) /* Mask in the IHL byte */
#define TPM_IPV4_VER_OFFSET (4) /* Offset in the VER_IHL byte */
#define TPM_IPV4_VER_MASK (0x0F) /* Mask in the VER byte */
#define TPM_IPV4_FRAG_OFFSET (0) /* Offset in the FLAGS_FRAGMENT 2_byte */
#define TPM_IPV4_FRAG_MASK (0x1FFF) /* Mask in the FRAGMENT byte */
#define TPM_IPV4_MF_OFFSET (13) /* Offset in the FLAGS_FRAGMENT 2_byte */
#define TPM_IPV4_MF_MASK (0x01) /* Mask in the FLAGS byte */
#define TPM_IPV4_TOT_LEN_MASK (0xFFFF)
#define TPM_IPV4_IDENT_MASK (0xFFFF)
#define TPM_IPV4_TTL_MASK (0xFF)
#define MH_UNI_PORT_MASK (0x000F)
#define MH_UNI_PORT_OFFSET (0)
#define MH_GEM_PORT_MASK (0x0FFF)
#define MH_GEM_PORT_OFFSET (0)
/* Maximum number of pnc ranges a single API can be spanned upon.
* Max. is currently two, to support IPV6 session DIP + SIP Routing + DSCP API call */
#define TPM_MAX_API_MULTI_RANGES (3)
#define TPM_MAX_AI_REFS (4)
#define TPM_BM_GMAC_0 (0x04)
#define TPM_BM_GMAC_1 (0x10)
#define TPM_BM_PMAC (0x01)
/* Bitmap of the GMACs */
typedef uint32_t tpm_gmac_bm_t;
/* TODO - add Amber to part of dynamc Init */
#define TPM_AMBER (1)
/* Direction Bitmap*/
#define TPM_BM_DIR_DS (1<<TPM_DIR_DS)
#define TPM_BM_DIR_US (1<<TPM_DIR_US)
#define TPM_BM_DIR_BIDIR (TPM_BM_DIR_DS|TPM_BM_DIR_US)
#define TPM_RESERVED_WINDOW_SIZE_DEFAULT 0
typedef enum {
TPM_IP_VER_4,
TPM_IP_VER_6,
TPM_IP_VER_MAX,
} tpm_ip_ver_t;
/* TPM flowid update values */
#define TPM_FLOW_ID_31_16 (0x02)
#define TPM_FLOW_ID_15_00 (0x01)
#define TPM_TCAM_PKT_WIDTH (24)
#define TPM_SWITCH_NUM_PORTS (6)
#define TPM_PNC_LU_REG0 (0)
#define TPM_PNC_LU_REG1 (1)
#define TPM_PNC_LU_REG2 (2)
#define TPM_PNC_ETY_REG (3)
#define TPM_PNC_CNM_L2_REG (5) /* KEEP IT ZERO, DON'T TOUCH IT!! THIS IS FOR CNM L2 LOOKUP. */
#define TPM_PNC_IPV6_DIP_REG (6)
#define TPM_PNC_NOSHIFT_UPDATE_REG (7)
#define TPM_MAX_NUM_TCONT (8)
#define TPM_MAX_NUM_GIG_MAC (2)
#define TPM_MAX_MOD_RANGES (1)
#define TPM_MOD_TABL_SIZE (256)
#define TPM_PNC_SIZE (512)
#define TPM_TX_MAX_MH_REGS (15)
/* TPM modification (z2) definitions */
#define TPM_MOD2_TABL_SIZE (4095)
#define TPM_MOD2_MAC_TRANSLATIONS_NUM (100)
#define TPM_MOD2_IP_TRANSLATIONS_NUM (200)
#define TPM_MAX_MOD2_FLOWS ((TPM_MOD2_MAC_TRANSLATIONS_NUM) + (TPM_MOD2_IP_TRANSLATIONS_NUM))
#define TPM_MOD2_DSCP_DATA_MASK (0x00FC) /* IPv4 DSCP */
#define TPM_MOD2_DSCP_DATA_BIT (2)
#define TPM_MOD2_TC_DATA_MASK (0x0FC0) /* IPv6 DSCP */
#define TPM_MOD2_TC_DATA_BIT (6)
#define TPM_PNC_ANY_LUID (0xFFFF)
#define TPM_TRUE (1)
#define TPM_FALSE (0)
#define TPM_OK (0)
#define TPM_FAIL (1)
#define TPM_NOT_FOUND (2)
#define TPM_MC_MAX_STREAM_NUM (256)
#define TPM_MC_MAX_MAC_NUM (256)
#define TPM_MAX_CPU_LOOPBACK_NUM (4096)
#define TPM_MAX_CPU_LOOPBACK_ENTRY (64)
#define TPM_MC_MAX_LPBK_ENTRIES_NUM (128)
#define TPM_MAX_LU_THRESH_VAL (0x3ffffff)
#define TPM_MC_MAX_MVLAN_XITS_NUM (16)
typedef enum {
TPM_MOD_MH_SET, /* 0 - Update the Marvell Header */
TPM_MOD_MAC_DA_SET, /* 1 - Update the MAC DA Address */
TPM_MOD_MAC_SA_SET, /* 2 - Update the MAC SA Address */
TPM_MOD_VLAN_MOD, /* 3 - Update the VLAN Tags (add/del/update) */
TPM_MOD_PPPOE_DEL, /* 4 - Delete a PPPoE encapsulation */
TPM_MOD_PPPOE_ADD, /* 5 - Add a PPPoE encapsulation */
TPM_MOD_DSCP_SET, /* 6 - Set the DSCP value */
TPM_MOD_TTL_DEC, /* 7 - Decrease the TTL value */
TPM_MOD_IPV4_UPDATE, /* 8 - Update the IPv4 Header */
TPM_MOD_IPV4_SRC_SET, /* 9 - Set the IPV4 Source Address */
TPM_MOD_IPV4_DST_SET, /* 10 - Set the IPV4 Destination Address */
TPM_MOD_IPV6_UPDATE, /* 11 - Update the IPv6 Header */
TPM_MOD_HOPLIM_DEC, /* 12 - Decrease the Hop Limit value */
TPM_MOD_IPV6_SRC_SET, /* 13 - Set the IPV6 Source Address */
TPM_MOD_IPV6_DST_SET, /* 14 - Set the IPV6 Destination Address */
TPM_MOD_L4_SRC_SET, /* 15 - Set the L4 Source Port (UDP or TCP) */
TPM_MOD_L4_DST_SET, /* 16 - Set the L4 Destination Port (UDP or TCP) */
TPM_MAX_PKT_MOD_FLAGS
} tpm_pkt_mod_flags_t;
typedef enum {
TPM_AREA_TYPE_JUMP = 0,
TPM_AREA_TYPE_CHAIN,
TPM_AREA_TYPE_MAX,
} tpm_area_type_t;
typedef enum {
TPM_CHAIN_TYPE_NONE = 0,
TPM_CHAIN_TYPE_MH,
TPM_CHAIN_TYPE_MAC,
TPM_CHAIN_TYPE_VLAN,
TPM_CHAIN_TYPE_PPPOE,
TPM_CHAIN_TYPE_IPV6_PPPOE,
TPM_CHAIN_TYPE_L2,
TPM_CHAIN_TYPE_IPV4_NAPT,
TPM_CHAIN_TYPE_IPV4_MC,
TPM_CHAIN_TYPE_ROUTE,
TPM_CHAIN_TYPE_IPV6_MC,
TPM_CHAIN_TYPE_MAX,
} tpm_chain_type_t;
/******************* Internal modification flags *****************************/
typedef enum {
TPM_MOD_INT_L4_TCP, /* Update TCP checksum */
TPM_MOD_INT_L4_UDP, /* Update UDP checksum */
TPM_MOD_INT_SPLIT_MOD, /* First part of split modification */
TPM_MOD_INT_UDP_CHECKSUM, /* Update UDP checksum - user control */
TPM_MAX_INT_MOD_FLAGS
} tpm_pkt_int_mod_flags_t;
/* CNM related */
typedef enum {
TPM_CNM_IPV4_PRE_FILTER_KEY_1 = 0,
TPM_CNM_IPV4_PRE_FILTER_KEY_2,
TPM_CNM_IPV4_PRE_FILTER_KEY_3,
TPM_CNM_IPV4_PRE_FILTER_KEY_MAX,
} tpm_cnm_ipv4_pre_filter_key_id_t;
#define TPM_CNM_IPV4_PRE_FILTER_KEY_1_MASK (1 << TPM_CNM_IPV4_PRE_FILTER_KEY_1)
#define TPM_CNM_IPV4_PRE_FILTER_KEY_2_MASK (1 << TPM_CNM_IPV4_PRE_FILTER_KEY_2)
#define TPM_CNM_IPV4_PRE_FILTER_KEY_3_MASK (1 << TPM_CNM_IPV4_PRE_FILTER_KEY_3)
#define TPM_CNM_INVALID_IPV4_PRE_FILTER_KEY_ID (0xFF)
#define TPM_CNM_MAX_IPV4_PRE_FILTER_RULE_PER_KEY (4)
#define TPM_CNM_MAX_IPV4_PRE_FILTER_RULE_PER_PORT (7)
/*************************************************************/
/* STRUCTURES */
/*************************************************************/
/* Structure for mapping tx_mod to HAL port and txp */
typedef struct {
uint32_t hal_port;
uint32_t hal_txp;
} tpm_tx_mod_hal_map_t;
/* Structure for mapping pnc_range to lookup_id */
typedef struct {
tpm_pnc_ranges_t pnc_range;
uint32_t lookup_id;
uint32_t last_lookup_range;
uint32_t valid;
} tpm_pnc_range_lookup_map_t;
typedef struct {
uint32_t enum_in;
uint8_t str_out[50];
} tpm_str_map_t;
/*****************************/
/* PNC related structures */
/*****************************/
/* Structure represents 24byte packet data in TCAM */
typedef struct {
uint8_t pkt_byte[TPM_TCAM_PKT_WIDTH];
} tpm_pkt_data_t;
/* Structure represents 24byte mask on packet data in TCAM */
typedef tpm_pkt_data_t tpm_pkt_mask_t;
/* Structure represents complete TCAM key */
typedef struct {
uint32_t lu_id; /* TPM_PNC_ANY_LUID , for unmasking LU_ID */
tpm_gmac_bm_t port_ids;
tpm_pkt_data_t pkt_data;
tpm_pkt_mask_t pkt_mask;
uint32_t add_info_data;
uint32_t add_info_mask;
} tpm_tcam_all_t;
/* Structure represents complete SRAM entry */
typedef struct {
uint32_t next_lu_id;
uint32_t lookup_done;
uint32_t pnc_queue; /* 0xFFFF, don't update queue */
uint32_t res_info_15_0_data;
uint32_t res_info_15_0_mask;
uint32_t res_info_23_16_data;
uint32_t res_info_23_16_mask;
uint32_t add_info_data;
uint32_t add_info_mask;
uint32_t flowid_val;
uint32_t flowid_updt_mask;
uint32_t shift_updt_reg;
uint32_t shift_updt_val;
uint32_t next_lu_off_reg;
} tpm_sram_all_t;
/* Structure represents PnC entry, (TCAM, SRAM) without Index */
typedef struct {
tpm_tcam_all_t tcam_entry;
tpm_sram_all_t sram_entry;
} tpm_pnc_all_t;
#define TPM_MOD2_MAX_PATTERN_ENTRIES (20)
/* Max number of modification pattern sets:
1 - jump entry
7 - main chains
*/
#define TPM_MOD2_MAX_PATTERN_SETS (8)
/* Structure for fields that may need to be parsed for internal functions (e.g. creating hardcoded pnc entries),
these fields are not exposed to the API's */
typedef struct {
uint8_t ipv4_ver;
uint8_t ipv4_ver_mask; /* 0-MASK , 1-PARSE */
uint8_t ipv4_ihl;
uint8_t ipv4_ihl_mask; /* 0-MASK , 1-PARSE */
uint16_t ipv4_totlen;
uint16_t ipv4_totlen_mask; /* 16-bits */
uint16_t ipv4_ident;
uint16_t ipv4_flags; /* MF Flag at bit 0 */
uint16_t ipv4_flags_mask; /* 0-MASK , 1-PARSE */
uint8_t ipv4_frag_offset;
uint8_t ipv4_frag_offset_mask; /* 0-MASK , 1-PARSE */
uint8_t ipv4_ttl;
} tpm_ipv4_add_key_t;
typedef struct {
uint8_t ipv6_hopl;
uint16_t ipv6_totlen;
uint16_t ipv6_totlen_mask; /* 16-bits */
} tpm_ipv6_add_key_t;
typedef struct {
uint8_t tcp_flags;
uint8_t tcp_flags_mask; /* Bit7-0 - signal each of the TCP flags */
} tpm_tcp_key_t;
#ifdef __cplusplus
}
#endif
#endif /* _TPM_INT_TYPES_H_ */