| /******************************************************************************* |
| 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_CLS3_HW_H__ |
| #define __MV_CLS3_HW_H__ |
| |
| #include "mvPp2ClsActHw.h" |
| #include "mvPp2ClsHw.h" |
| #include "../common/mvPp2ErrCode.h" |
| #include "../common/mvPp2Common.h" |
| #include "../gbe/mvPp2GbeRegs.h" |
| |
| /*-------------------------------------------------------------------------------*/ |
| /* Classifier C3 Top Registers */ |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_KEY_CTRL_REG (MV_PP2_REG_BASE + 0x1C10) |
| #define KEY_CTRL_L4 0 |
| #define KEY_CTRL_L4_BITS 3 |
| #define KEY_CTRL_L4_MAX ((1 << KEY_CTRL_L4_BITS) - 1) |
| #define KEY_CTRL_L4_MASK (((1 << KEY_CTRL_L4_BITS) - 1) << KEY_CTRL_L4) |
| |
| /* |
| PPv2.1 (feature MAS 3.16) LKP_TYPE size and offset changed |
| */ |
| #define KEY_CTRL_LKP_TYPE 4 |
| #define KEY_CTRL_LKP_TYPE_BITS 6 |
| |
| #define KEY_CTRL_LKP_TYPE_MAX ((1 << KEY_CTRL_LKP_TYPE_BITS) - 1) |
| #define KEY_CTRL_LKP_TYPE_MASK (((1 << KEY_CTRL_LKP_TYPE_BITS) - 1) << KEY_CTRL_LKP_TYPE) |
| |
| |
| #define KEY_CTRL_PRT_ID_TYPE 12 |
| #define KEY_CTRL_PRT_ID_TYPE_BITS 2 |
| #define KEY_CTRL_PRT_ID_TYPE_MAX ((1 << KEY_CTRL_PRT_ID_TYPE_BITS) - 1) |
| #define KEY_CTRL_PRT_ID_TYPE_MASK ((KEY_CTRL_PRT_ID_TYPE_MAX) << KEY_CTRL_PRT_ID_TYPE) |
| |
| #define KEY_CTRL_PRT_ID 16 |
| #define KEY_CTRL_PRT_ID_BITS 8 |
| #define KEY_CTRL_PRT_ID_MAX ((1 << KEY_CTRL_PRT_ID_BITS) - 1) |
| #define KEY_CTRL_PRT_ID_MASK (((1 << KEY_CTRL_PRT_ID_BITS) - 1) << KEY_CTRL_PRT_ID) |
| |
| #define KEY_CTRL_HEK_SIZE 24 |
| #define KEY_CTRL_HEK_SIZE_BITS 6 |
| #define KEY_CTRL_HEK_SIZE_MAX 36 |
| #define KEY_CTRL_HEK_SIZE_MASK (((1 << KEY_CTRL_HEK_SIZE_BITS) - 1) << KEY_CTRL_HEK_SIZE) |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_KEY_HEK_REG(reg_num) (MV_PP2_REG_BASE + 0x1C34 - 4*(reg_num)) |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_QRY_ACT_REG (MV_PP2_REG_BASE + 0x1C40) |
| #define MV_PP2_CLS3_QRY_ACT 0 |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_QRY_RES_HASH_REG(hash) (MV_PP2_REG_BASE + 0x1C50 + 4*(hash)) |
| #define MV_PP2_CLS3_HASH_BANKS_NUM 8 |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_INIT_HIT_CNT_REG (MV_PP2_REG_BASE + 0x1C80) |
| #define MV_PP2_CLS3_INIT_HIT_CNT_OFFS 6 |
| #define MV_PP2_CLS3_INIT_HIT_CNT_BITS 18 |
| #define MV_PP2_CLS3_INIT_HIT_CNT_MASK (((1 << MV_PP2_CLS3_INIT_HIT_CNT_BITS) - 1) << MV_PP2_CLS3_INIT_HIT_CNT_OFFS) |
| #define MV_PP2_CLS3_INIT_HIT_CNT_MAX ((1 << MV_PP2_CLS3_INIT_HIT_CNT_BITS) - 1) |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_HASH_OP_REG (MV_PP2_REG_BASE + 0x1C84) |
| |
| #define MV_PP2_CLS3_HASH_OP_TBL_ADDR 0 |
| #define MV_PP2_CLS3_HASH_OP_TBL_ADDR_BITS 12 |
| #define MV_PP2_CLS3_HASH_OP_TBL_ADDR_MAX ((1 << MV_PP2_CLS3_HASH_OP_TBL_ADDR_BITS) - 1) |
| #define MV_PP2_CLS3_HASH_OP_TBL_ADDR_MASK ((MV_PP2_CLS3_HASH_OP_TBL_ADDR_MAX) << MV_PP2_CLS3_HASH_OP_TBL_ADDR) |
| |
| /*PPv2.1 (feature MAS 3.16) MISS_PTR is new field (one bit) at HASH_OP_REG */ |
| #define MV_PP2_CLS3_MISS_PTR 12 |
| #define MV_PP2_CLS3_MISS_PTR_MASK (1 << MV_PP2_CLS3_MISS_PTR) |
| |
| #define MV_PP2_CLS3_HASH_OP_DEL 14 |
| #define MV_PP2_CLS3_HASH_OP_ADD 15 |
| |
| #define MV_PP2_CLS3_HASH_OP_EXT_TBL_ADDR 16 |
| #define MV_PP2_CLS3_HASH_OP_EXT_TBL_ADDR_BITS 8 |
| #define MV_PP2_CLS3_HASH_OP_EXT_TBL_ADDR_MAX ((1 << MV_PP2_CLS3_HASH_OP_EXT_TBL_ADDR_BITS) - 1) |
| #define MV_PP2_CLS3_HASH_OP_EXT_TBL_ADDR_MASK \ |
| ((MV_PP2_CLS3_HASH_OP_EXT_TBL_ADDR_MAX) << MV_PP2_CLS3_HASH_OP_EXT_TBL_ADDR) |
| |
| /*PPv2.1 (feature MAS 3.16) INIT_CNT_VAL field removed*/ |
| #define MV_PP2_CLS3_HASH_OP_INIT_CTR_VAL 24 |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_STATE_REG (MV_PP2_REG_BASE + 0x1C8C) |
| #define MV_PP2_CLS3_STATE_CPU_DONE 0 |
| #define MV_PP2_CLS3_STATE_CPU_DONE_MASK (1 << MV_PP2_CLS3_STATE_CPU_DONE) |
| |
| #define MV_PP2_CLS3_STATE_CLEAR_CTR_DONE 1 |
| #define MV_PP2_CLS3_STATE_CLEAR_CTR_DONE_MASK (1 << MV_PP2_CLS3_STATE_CLEAR_CTR_DONE) |
| |
| #define MV_PP2_CLS3_STATE_SC_DONE 2 |
| #define MV_PP2_CLS3_STATE_SC_DONE_MASK (1 << MV_PP2_CLS3_STATE_SC_DONE) |
| |
| #define MV_PP2_CLS3_STATE_OCCIPIED 8 |
| #define MV_PP2_CLS3_STATE_OCCIPIED_BITS 8 |
| #define MV_PP2_CLS3_STATE_OCCIPIED_MASK \ |
| (((1 << MV_PP2_CLS3_STATE_OCCIPIED_BITS) - 1) << MV_PP2_CLS3_STATE_OCCIPIED) |
| |
| #define MV_PP2_CLS3_STATE_SC_STATE 16 |
| #define MV_PP2_CLS3_STATE_SC_STATE_BITS 2 |
| #define MV_PP2_CLS3_STATE_SC_STATE_MASK \ |
| (((1 << MV_PP2_CLS3_STATE_SC_STATE_BITS) - 1) << MV_PP2_CLS3_STATE_SC_STATE) |
| /* |
| SCAN STATUS |
| 0 - scan compleat |
| 1 - hit counter clear |
| 3 - scan wait |
| 4 - scan in progress |
| */ |
| |
| #define MV_PP2_CLS3_STATE_NO_OF_SC_RES 20 |
| #define MV_PP2_CLS3_STATE_NO_OF_SC_RES_BITS 9 |
| #define MV_PP2_CLS3_STATE_NO_OF_SC_RES_MASK \ |
| (((1 << MV_PP2_CLS3_STATE_NO_OF_SC_RES_BITS) - 1) << MV_PP2_CLS3_STATE_NO_OF_SC_RES) |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_DB_INDEX_REG (MV_PP2_REG_BASE + 0x1C90) |
| #define MV_PP2_CLS3_DB_MISS_OFFS 12 |
| #define MV_PP2_CLS3_DB_MISS_MASK (1 << MV_PP2_CLS3_DB_MISS_OFFS) |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_HASH_DATA_REG(num) (MV_PP2_REG_BASE + 0x1CA0 + 4*(num)) /* 0-3 valid val*/ |
| #define MV_PP2_CLS3_HASH_DATA_REG_NUM 4 |
| #define MV_PP2_CLS3_HASH_EXT_DATA_REG(num) (MV_PP2_REG_BASE + 0x1CC0 + 4*(num)) |
| #define MV_PP2_CLS3_HASH_EXT_DATA_REG_NUM 7 |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_CLEAR_COUNTERS_REG (MV_PP2_REG_BASE + 0x1D00) |
| #define MV_PP2_CLS3_CLEAR_COUNTERS 0 |
| /* |
| PPv2.1 (feature MAS 3.16) CLEAR_COUNTERS size changed, clear all code changed from 0x1f to 0x3f |
| */ |
| #define MV_PP2_V1_CLS3_CLEAR_COUNTERS_BITS 7 |
| #define MV_PP2_V1_CLS3_CLEAR_ALL 0x3f |
| #define MV_PP2_V1_CLS3_CLEAR_COUNTERS_MAX 0x3F |
| #define MV_PP2_V1_CLS3_CLEAR_COUNTERS_MASK ((MV_PP2_V1_CLS3_CLEAR_COUNTERS_MAX) << MV_PP2_V1_CLS3_CLEAR_COUNTERS) |
| |
| #define MV_PP2_V0_CLS3_CLEAR_COUNTERS_BITS 5 |
| #define MV_PP2_V0_CLS3_CLEAR_ALL 0x1f |
| #define MV_PP2_V0_CLS3_CLEAR_COUNTERS_MAX 0x1F |
| #define MV_PP2_V0_CLS3_CLEAR_COUNTERS_MASK ((MV_PP2_V0_CLS3_CLEAR_COUNTERS_MAX) << MV_PP2_V0_CLS3_CLEAR_COUNTERS) |
| |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_HIT_COUNTER_REG (MV_PP2_REG_BASE + 0x1D08) |
| #define MV_PP2_CLS3_HIT_COUNTER 0 |
| /*ppv2.1 his counter field size changed from 14 bits to 24 bits*/ |
| #define MV_PP2_V0_CLS3_HIT_COUNTER_BITS 14 |
| #define MV_PP2_V0_CLS3_HIT_COUNTER_MAX ((1 << MV_PP2_V0_CLS3_HIT_COUNTER_BITS) - 1) |
| #define MV_PP2_V0_CLS3_HIT_COUNTER_MASK ((MV_PP2_V0_CLS3_HIT_COUNTER_MAX) << MV_PP2_CLS3_HIT_COUNTER) |
| |
| #define MV_PP2_V1_CLS3_HIT_COUNTER_BITS 24 |
| #define MV_PP2_V1_CLS3_HIT_COUNTER_MAX ((1 << MV_PP2_V1_CLS3_HIT_COUNTER_BITS) - 1) |
| #define MV_PP2_V1_CLS3_HIT_COUNTER_MASK ((MV_PP2_V1_CLS3_HIT_COUNTER_MAX) << MV_PP2_CLS3_HIT_COUNTER) |
| |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_SC_PROP_REG (MV_PP2_REG_BASE + 0x1D10) |
| |
| #define MV_PP2_CLS3_SC_PROP_TH_MODE 0 |
| #define MV_PP2_CLS3_SC_PROP_TH_MODE_MASK (1 << MV_PP2_CLS3_SC_PROP_TH_MODE) |
| |
| #define MV_PP2_CLS3_SC_PROP_CLEAR 1 |
| #define MV_PP2_CLS3_SC_PROP_CLEAR_MASK (1 << MV_PP2_CLS3_SC_PROP_CLEAR) |
| |
| #define MV_PP2_CLS3_SC_PROP_LKP_TYPE_EN 3 |
| #define MV_PP2_CLS3_SC_PROP_LKP_TYPE_EN_MASK (1 << MV_PP2_CLS3_SC_PROP_LKP_TYPE_EN) |
| |
| #define MV_PP2_CLS3_SC_PROP_LKP_TYPE 4 |
| /* |
| PPv2.1 (feature MAS 3.16) LKP_TYPE size and offset changed |
| */ |
| |
| #define MV_PP2_CLS3_SC_PROP_LKP_TYPE_BITS 6 |
| |
| #define MV_PP2_CLS3_SC_PROP_LKP_TYPE_MAX ((1 << MV_PP2_CLS3_SC_PROP_LKP_TYPE_BITS) - 1) |
| #define MV_PP2_CLS3_SC_PROP_LKP_TYPE_MASK ((MV_PP2_CLS3_SC_PROP_LKP_TYPE_MAX) << MV_PP2_CLS3_SC_PROP_LKP_TYPE) |
| |
| #define MV_PP2_CLS3_SC_PROP_START_ENTRY 16 |
| #define MV_PP2_CLS3_SC_PROP_START_ENTRY_MASK ((MV_PP2_CLS3_HASH_OP_TBL_ADDR_MAX) << MV_PP2_CLS3_SC_PROP_START_ENTRY) |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_SC_PROP_VAL_REG (MV_PP2_REG_BASE + 0x1D14) |
| |
| /* ppv2.1 field removed from this reg */ |
| #define MV_PP2_V0_CLS3_SC_PROP_VAL_TH 0 |
| #define MV_PP2_V0_CLS3_SC_PROP_VAL_TH_BITS 13 |
| #define MV_PP2_V0_CLS3_SC_PROP_VAL_TH_MAX ((1 << MV_PP2_V0_CLS3_SC_PROP_VAL_TH_BITS) - 1) |
| #define MV_PP2_V0_CLS3_SC_PROP_VAL_TH_MASK ((MV_PP2_V0_CLS3_SC_PROP_VAL_TH_MAX) << MV_PP2_V0_CLS3_SC_PROP_VAL_TH) |
| |
| /* ppv2.1 field offsett changed */ |
| #define MV_PP2_V0_CLS3_SC_PROP_VAL_DELAY 16 |
| #define MV_PP2_V1_CLS3_SC_PROP_VAL_DELAY 0 |
| #define MV_PP2_CLS3_SC_PROP_VAL_DELAY_BITS 16 |
| #define MV_PP2_CLS3_SC_PROP_VAL_DELAY_MAX ((1 << MV_PP2_CLS3_SC_PROP_VAL_DELAY_BITS) - 1) |
| #define MV_PP2_V0_CLS3_SC_PROP_VAL_DELAY_MASK (MV_PP2_CLS3_SC_PROP_VAL_DELAY_MAX << MV_PP2_V0_CLS3_SC_PROP_VAL_DELAY) |
| #define MV_PP2_V1_CLS3_SC_PROP_VAL_DELAY_MASK (MV_PP2_CLS3_SC_PROP_VAL_DELAY_MAX << MV_PP2_V1_CLS3_SC_PROP_VAL_DELAY) |
| |
| |
| /*-------------------------------------------------------------------------------*/ |
| /* PPv2.1 new reg in cls3 */ |
| #define MV_PP2_CLS3_SC_TH_REG (MV_PP2_REG_BASE + 0x1D18) |
| #define MV_PP2_CLS3_SC_TH 4 |
| #define MV_PP2_CLS3_SC_TH_BITS 20 |
| #define MV_PP2_CLS3_SC_TH_MAX ((1 << MV_PP2_CLS3_SC_TH_BITS) - 1) |
| #define MV_PP2_CLS3_SC_TH_MASK (((1 << MV_PP2_CLS3_SC_TH_BITS) - 1) << MV_PP2_CLS3_SC_TH) |
| |
| |
| |
| /*-------------------------------------------------------------------------------*/ |
| /* ppv2.1 TIMER REG ADDRESS changed */ |
| #define MV_PP2_V0_CLS3_SC_TIMER_REG (MV_PP2_REG_BASE + 0x1D18) |
| #define MV_PP2_V1_CLS3_SC_TIMER_REG (MV_PP2_REG_BASE + 0x1D1c) |
| |
| #define MV_PP2_CLS3_SC_TIMER 0 |
| #define MV_PP2_CLS3_SC_TIMER_BITS 16 |
| #define MV_PP2_CLS3_SC_TIMER_MASK (((1 << MV_PP2_CLS3_SC_TIMER_BITS) - 1) << MV_PP2_CLS3_SC_TIMER) |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_SC_ACT_REG (MV_PP2_REG_BASE + 0x1D20) |
| #define MV_PP2_CLS3_SC_ACT 0 |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_SC_INDEX_REG (MV_PP2_REG_BASE + 0x1D28) |
| #define MV_PP2_CLS3_SC_INDEX 0 |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_SC_RES_REG (MV_PP2_REG_BASE + 0x1D2C) |
| #define MV_PP2_CLS3_SC_RES_ENTRY 0 |
| #define MV_PP2_CLS3_SC_RES_ENTRY_MASK ((MV_PP2_CLS3_HASH_OP_TBL_ADDR_MAX) << MV_PP2_CLS3_SC_RES_ENTRY) |
| |
| /*ppv2.1 field offset and size changed */ |
| #define MV_PP2_V0_CLS3_SC_RES_CTR 16 |
| #define MV_PP2_V0_CLS3_SC_RES_CTR_MASK ((MV_PP2_V0_CLS3_HIT_COUNTER_MAX) << MV_PP2_V0_CLS3_SC_RES_CTR) |
| #define MV_PP2_V1_CLS3_SC_RES_CTR 12 |
| #define MV_PP2_V1_CLS3_SC_RES_CTR_MASK ((MV_PP2_V1_CLS3_HIT_COUNTER_MAX) << MV_PP2_V1_CLS3_SC_RES_CTR) |
| |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_ACT_REG (MV_PP2_REG_BASE + 0x1D40) |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_ACT_QOS_ATTR_REG (MV_PP2_REG_BASE + 0x1D44) |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_ACT_HWF_ATTR_REG (MV_PP2_REG_BASE + 0x1D48) |
| /*-------------------------------------------------------------------------------*/ |
| |
| #define MV_PP2_CLS3_ACT_DUP_ATTR_REG (MV_PP2_REG_BASE + 0x1D4C) |
| /*-------------------------------------------------------------------------------*/ |
| /*ppv2.1: 0x1D50 0x1D54 are new registers, additional fields for action table*/ |
| #define MV_PP2_CLS3_ACT_SEQ_L_ATTR_REG (MV_PP2_REG_BASE + 0x1D50) |
| #define MV_PP2_CLS3_ACT_SEQ_H_ATTR_REG (MV_PP2_REG_BASE + 0x1D54) |
| #define MV_PP2_CLS3_ACT_SEQ_SIZE 38 |
| /*-------------------------------------------------------------------------------*/ |
| |
| /*-------------------------------------------------------------------------------*/ |
| /* Classifier C3 offsets in hash table */ |
| /*-------------------------------------------------------------------------------*/ |
| /* PPv2.1 (feature MAS 3.16) LKP_TYPE size and offset changed */ |
| |
| #define KEY_OCCUPIED 116 |
| #define KEY_FORMAT 115 |
| #define KEY_PTR_EXT 107 |
| |
| #define KEY_PRT_ID(ext_mode) ((ext_mode == 1) ? (99) : (107)) |
| #define KEY_PRT_ID_MASK(ext_mode) (((1 << KEY_CTRL_PRT_ID_BITS) - 1) << (KEY_PRT_ID(ext_mode) % 32)) |
| |
| #define KEY_PRT_ID_TYPE(ext_mode) ((ext_mode == 1) ? (97) : (105)) |
| #define KEY_PRT_ID_TYPE_MASK(ext_mode) ((KEY_CTRL_PRT_ID_TYPE_MAX) << (KEY_PRT_ID_TYPE(ext_mode) % 32)) |
| |
| #define KEY_LKP_TYPE(ext_mode) ((ext_mode == 1) ? (91) : (99)) |
| #define KEY_LKP_TYPE_MASK(ext_mode) (((1 << KEY_CTRL_LKP_TYPE_BITS) - 1) << (KEY_LKP_TYPE(ext_mode) % 32)) |
| |
| #define KEY_L4_INFO(ext_mode) ((ext_mode == 1) ? (88) : (96)) |
| #define KEY_L4_INFO_MASK(ext_mode) (((1 << KEY_CTRL_L4_BITS) - 1) << (KEY_L4_INFO(ext_mode) % 32)) |
| |
| |
| /*-------------------------------------------------------------------------------*/ |
| /* Classifier C3 engine Key public APIs */ |
| /*-------------------------------------------------------------------------------*/ |
| |
| typedef struct { |
| /* valid if size > 0 */ |
| /* size include the extension*/ |
| int ext_ptr; |
| int size; |
| } CLS3_SHADOW_HASH_ENTRY; |
| |
| #define HEK_EXT_FMT "%8.8x %8.8x %8.8x | %8.8x %8.8x %8.8x %8.8x %8.8x %8.8x" |
| #define HEK_EXT_VAL(p) p[8], p[7], p[6], p[5], p[4], p[3], p[2], p[1], p[0] |
| |
| #define HEK_FMT "%8.8x %8.8x %8.8x" |
| #define HEK_VAL(p) p[8], p[7], p[6] |
| |
| /*-------------------------------------------------------------------------------*/ |
| /* Classifier C3 engine Public APIs */ |
| /*-------------------------------------------------------------------------------*/ |
| #define MV_PP2_CLS_C3_HASH_TBL_SIZE (4096) |
| #define MV_PP2_CLS_C3_MISS_TBL_SIZE (64) |
| #define MV_PP2_CLS_C3_EXT_HEK_WORDS (9) |
| #define MV_PP2_CLS_C3_SRAM_WORDS (5) |
| #define MV_PP2_CLS_C3_EXT_TBL_SIZE (256) |
| #define MV_PP2_CLS_C3_HEK_WORDS (3) |
| #define MV_PP2_CLS_C3_HEK_BYTES 12 /* size in bytes */ |
| #define MV_PP2_CLS_C3_BANK_SIZE (512) |
| #define MV_PP2_CLS_C3_MAX_SEARCH_DEPTH (16) |
| |
| typedef struct mvPp2Cls3HashPair { |
| unsigned short pair_num; |
| unsigned short old_idx[MV_PP2_CLS_C3_MAX_SEARCH_DEPTH]; |
| unsigned short new_idx[MV_PP2_CLS_C3_MAX_SEARCH_DEPTH]; |
| } MV_PP2_CLS3_HASH_PAIR; |
| |
| typedef struct mvPp2ClsC3Entry { |
| unsigned int index; |
| unsigned int ext_index; |
| |
| struct { |
| union { |
| MV_U32 words[MV_PP2_CLS_C3_EXT_HEK_WORDS]; |
| MV_U8 bytes[MV_PP2_CLS_C3_EXT_HEK_WORDS * 4]; |
| } hek; |
| MV_U32 key_ctrl;/*0x1C10*/ |
| } key; |
| union { |
| MV_U32 words[MV_PP2_CLS_C3_SRAM_WORDS]; |
| struct { |
| MV_U32 actions;/*0x1D40*/ |
| MV_U32 qos_attr;/*0x1D44*/ |
| MV_U32 hwf_attr;/*0x1D48*/ |
| MV_U32 dup_attr;/*0x1D4C*/ |
| /*ppv2.1: 0x1D50 0x1D54 are new registers, additional fields for action table*/ |
| MV_U32 seq_l_attr;/*0x1D50*/ |
| MV_U32 seq_h_attr;/*0x1D54*/ |
| } regs; |
| } sram; |
| } MV_PP2_CLS_C3_ENTRY; |
| |
| |
| /*-------------------------------------------------------------------------------*/ |
| /* Common utilities */ |
| /*-------------------------------------------------------------------------------*/ |
| int mvPp2ClsC3Init(void); |
| void mvPp2ClsC3ShadowInit(void); |
| int mvPp2ClsC3ShadowFreeGet(void); |
| int mvPp2ClsC3ShadowExtFreeGet(void); |
| void mvPp2C3ShadowClear(int index); |
| |
| /*-------------------------------------------------------------------------------*/ |
| /* APIs for Classification C3 engine */ |
| /*-------------------------------------------------------------------------------*/ |
| |
| int mvPp2ClsC3HwRead(MV_PP2_CLS_C3_ENTRY *c3, int index); |
| int mvPp2ClsC3HwAdd(MV_PP2_CLS_C3_ENTRY *c3, int index, int ext_index); |
| int mvPp2ClsC3HwMissAdd(MV_PP2_CLS_C3_ENTRY *c3, int lkp_type); |
| int mvPp2ClsC3HwDump(void); |
| int mvPp2ClsC3HwMissDump(void); |
| int mvPp2ClsC3HwExtDump(void); |
| int mvPp2ClsC3HwDel(int index); |
| int mvPp2ClsC3HwDelAll(void); |
| int mvPp2ClsC3SwDump(MV_PP2_CLS_C3_ENTRY *c3); |
| void mvPp2ClsC3SwClear(MV_PP2_CLS_C3_ENTRY *c3); |
| void mvPp2ClsC3HwInitCtrSet(int cntVal); |
| int mvPp2ClsC3HwQuery(MV_PP2_CLS_C3_ENTRY *c3, unsigned char *occupied_bmp, int index[]); |
| int mvPp2ClsC3HwQueryAdd(MV_PP2_CLS_C3_ENTRY *c3, int max_search_depth, MV_PP2_CLS3_HASH_PAIR *hash_pair_arr); |
| |
| int mvPp2ClsC3HwMissRead(MV_PP2_CLS_C3_ENTRY *c3, int lkp_type); |
| int mvPp2ClsC3HwMissDump(void); |
| /*-------------------------------------------------------------------------------*/ |
| /* APIs for Classification C3 key fields */ |
| /*-------------------------------------------------------------------------------*/ |
| int mvPp2ClsC3SwL4infoSet(MV_PP2_CLS_C3_ENTRY *c3, int l4info); |
| int mvPp2ClsC3SwLkpTypeSet(MV_PP2_CLS_C3_ENTRY *c3, int lkp_type); |
| int mvPp2ClsC3SwPortIDSet(MV_PP2_CLS_C3_ENTRY *c3, int type, int portid); |
| int mvPp2ClsC3SwHekSizeSet(MV_PP2_CLS_C3_ENTRY *c3, int hek_size); |
| int mvPp2ClsC3SwHekByteSet(MV_PP2_CLS_C3_ENTRY *c3, unsigned int offs, unsigned char byte); |
| int mvPp2ClsC3SwHekWordSet(MV_PP2_CLS_C3_ENTRY *c3, unsigned int offs, unsigned int word); |
| |
| /*-------------------------------------------------------------------------------*/ |
| /* APIs for Classification C3 action table fields */ |
| /*-------------------------------------------------------------------------------*/ |
| int mvPp2ClsC3ColorSet(MV_PP2_CLS_C3_ENTRY *c3, int cmd); |
| int mvPp2ClsC3QueueHighSet(MV_PP2_CLS_C3_ENTRY *c3, int cmd, int q); |
| int mvPp2ClsC3QueueLowSet(MV_PP2_CLS_C3_ENTRY *c3, int cmd, int q); |
| int mvPp2ClsC3QueueSet(MV_PP2_CLS_C3_ENTRY *c3, int cmd, int queue); |
| int mvPp2ClsC3ForwardSet(MV_PP2_CLS_C3_ENTRY *c3, int cmd); |
| int mvPp2ClsC3PolicerSet(MV_PP2_CLS_C3_ENTRY *c3, int cmd, int policerId, int bank); |
| int mvPp2ClsC3FlowIdEn(MV_PP2_CLS_C3_ENTRY *c3, int flowid_en); |
| |
| /* PPv2.1 (feature MAS 3.7) mtu - new field at action table */ |
| int mvPp2ClsC3MtuSet(MV_PP2_CLS_C3_ENTRY *c3, int mtu_inx); |
| int mvPp2ClsC3ModSet(MV_PP2_CLS_C3_ENTRY *c3, int data_ptr, int instr_offs, int l4_csum); |
| int mvPp2ClsC3DupSet(MV_PP2_CLS_C3_ENTRY *c3, int dupid, int count); |
| |
| /* PPv2.1 (feature MAS 3.14) cls sequence */ |
| int mvPp2ClsC3SeqSet(MV_PP2_CLS_C3_ENTRY *c3, int id, int bits_offs, int bits); |
| |
| /*-------------------------------------------------------------------------------*/ |
| /* APIs for Classification C3 Hit counters management */ |
| /*-------------------------------------------------------------------------------*/ |
| int mvPp2ClsC3HitCntrsRead(int index, MV_U32 *cntr); |
| int mvPp2ClsC3HitCntrsClearAll(void); |
| int mvPp2ClsC3HitCntrsReadAll(void); |
| int mvPp2ClsC3HitCntrsClear(int lkpType); |
| int mvPp2ClsC3HitCntrsMissRead(int lkp_type, MV_U32 *cntr); |
| |
| |
| /*-------------------------------------------------------------------------------*/ |
| /* APIs for Classification C3 hit counters scan fields operation */ |
| /*-------------------------------------------------------------------------------*/ |
| #define MV_PP2_CLS_C3_SC_RES_TBL_SIZE (256) |
| |
| int mvPp2ClsC3ScanStart(void); |
| int mvPp2ClsC3ScanRegs(void); |
| int mvPp2ClsC3ScanThreshSet(int mode, int thresh); |
| int mvPp2ClsC3ScanClearBeforeEnSet(int en); |
| int mvPp2ClsC3ScanLkpTypeSet(int type); |
| int mvPp2ClsC3ScanStartIndexSet(int idx); |
| int mvPp2ClsC3ScanDelaySet(int time); |
| int mvPp2ClsC3ScanResRead(int index, int *addr, int *cnt); |
| int mvPp2ClsC3ScanNumOfResGet(int *resNum); |
| int mvPp2ClsC3ScanResDump(void); |
| |
| |
| |
| #endif /* __MV_CLS3_HW_H__ */ |