openbcm

Git mirror of https://github.com/Broadcom-Network-Switching-Software/OpenBCM
git clone git://git.finwo.net/mirror/broadcom/openbcm
Log | Files | Refs | README

ft_alu.h (35768B)


      1 /*
      2  * 
      3  * This license is set out in https://raw.githubusercontent.com/Broadcom-Network-Switching-Software/OpenBCM/master/Legal/LICENSE file.
      4  * 
      5  * Copyright 2007-2020 Broadcom Inc. All rights reserved.
      6  *
      7  * File:     ft_alu.h
      8  * Purpose:  Function declarations for flowtracker Alu.
      9  */
     10 
     11 #ifndef _BCM_INT_FT_ALU_H_
     12 #define _BCM_INT_FT_ALU_H_
     13 
     14 #include <shared/bsl.h>
     15 #include <soc/helix5.h>
     16 #include <soc/drv.h>
     17 #include <bcm/error.h>
     18 #include <soc/debug.h>
     19 #include <soc/mem.h>
     20 #include <bcm/flowtracker.h>
     21 #include <bcm_int/esw/flowtracker/ft_common.h>
     22 #include <bcm_int/esw/flowtracker/ft_field.h>
     23 
     24 #include <soc/defs.h>
     25 
     26 #if defined(BCM_FLOWTRACKER_SUPPORT)
     27 
     28 /*************************************************************
     29  | Start - Basic ALU/LOAD HW structs & defines               |
     30  */
     31 
     32 typedef enum bcmi_ft_alu_load_type_e {
     33 
     34     /* Load8 resource type. */
     35     bcmiFtAluLoadTypeLoad8 = 0,
     36 
     37     /* Load16 resource type. */
     38     bcmiFtAluLoadTypeLoad16 = 1,
     39 
     40     /* Alu16 resource type. */
     41     bcmiFtAluLoadTypeAlu16 = 2,
     42 
     43     /* Alu32 resource type. */
     44     bcmiFtAluLoadTypeAlu32 = 3,
     45 
     46     /* Aggregate Alu32 resource type. */
     47     bcmiFtAluLoadTypeAggAlu32 = 4,
     48 
     49     /* Resource type none. */
     50     bcmiFtAluLoadTypeNone = 5
     51 
     52 } bcmi_ft_alu_load_type_t;
     53 
     54 extern uint8
     55     alu_type_str[6][50];
     56 
     57 typedef struct bcmi_ft_alu_key_s {
     58 
     59     /* Location of tracking param. */
     60     int location;
     61 
     62     /* Is it a alu. */
     63     int is_alu;
     64 
     65     /* Length of tracking param. */
     66     int length;
     67 
     68 } bcmi_ft_alu_key_t;
     69 
     70 typedef enum bcmi_flowtracker_check_set_e {
     71 
     72     /* Check timestamp set. */
     73     bcmFlowtrackerFlowCheckTsSet = 0,
     74 
     75     /* Check timestamp reset. */
     76     bcmFlowtrackerFlowCheckTsReset = 1
     77 
     78 } bcmi_flowtracker_check_set_t;
     79 
     80 typedef struct bcmi_ft_flowchecker_list_s {
     81 
     82     /* Flowchecker identifier. */
     83     bcm_flowtracker_check_t flowchecker_id;
     84 
     85     /* Next pointer to checker identifier. */
     86     struct bcmi_ft_flowchecker_list_s *next;
     87 
     88 } bcmi_ft_flowchecker_list_t;
     89 
     90 /* ALU/LOAD internal flags. */
     91 /* Next element is attached to this. */
     92 #define BCMI_FT_ALU_LOAD_NEXT_ATTACH                      (1 << 0)
     93 
     94 /* Aggregate ALU32 supported in the group */
     95 #define BCMI_FT_ALU_LOAD_USE_AGG_ALU32                    (1 << 1)
     96 
     97 /* Shift is applied to data (flowcheck action) */
     98 #define BCMI_FT_ALU_LOAD_DATA_SHIFT_APPLIED               (1 << 2)
     99 
    100 /* alu info is installed in the hardware */
    101 #define BCMI_FT_ALU_LOAD_HW_INSTALLED                     (1 << 3)
    102 
    103 /* Internally defined */
    104 #define BCMI_FT_ALU_LOAD_INTERNAL                         (1 << 4)
    105 
    106 /* Extended to other alu info */
    107 #define BCMI_FT_ALU_LOAD_EXTENDED                         (1 << 5)
    108 
    109 /* StickyOr update should be activated */
    110 #define BCMI_FT_ALU_LOAD_STICKYOR_UPDATE                  (1 << 6)
    111 
    112 /* Internal Flowchecker shift adjusted */
    113 #define BCMI_FT_ALU_LOAD_INTERNAL_DATA_SHIFT_ADJUSTED     (1 << 7)
    114 /*************************************************************
    115  | End - Basic ALU/LOAD HW structs & defines                 |
    116  */
    117 
    118 
    119 
    120 /*************************************************************
    121  | Start - FT resource tracking structs & defines            |
    122  */
    123 
    124 /* Session Data size in bits */
    125 #define BCMI_FT_SESSION_DATA_SINGLE_LEN            256
    126 #define BCMI_FT_SESSION_DATA_SINGLE_BANK_SIZE       64
    127 
    128 /* Session Data Bank Mem and their data sizes. */
    129 #define TOTAL_GROUP_SESSION_DATA_BANK_MEM            1
    130 #define TOTAL_GROUP_SESSION_DATA_BANK_SW_DATA_NUM    4
    131 #define TOTAL_GROUP_SESSION_DATA_BANK_DW_DATA_NUM    8
    132 #define TOTAL_GROUP_AGG_SESSION_DATA_BANK_MEM        4
    133 
    134 /* Total ALU memories and their data sizes. */
    135 #define TOTAL_GROUP_ALU32_MEM                       12
    136 #define TOTAL_GROUP_ALU32_DATA_NUM                   1
    137 #define TOTAL_GROUP_ALU16_MEM                        8
    138 #define TOTAL_GROUP_ALU16_DATA_NUM                   1
    139 #define TOTAL_GROUP_LOAD16_MEM                       1
    140 #define TOTAL_GROUP_LOAD16_DATA_NUM                 16
    141 #define TOTAL_GROUP_LOAD8_MEM                        1
    142 #define TOTAL_GROUP_LOAD8_DATA_NUM                   8
    143 #define TOTAL_GROUP_TIMESTAMP_ENGINE_MEM             1
    144 #define TOTAL_GROUP_TIMESTAMP_ENGINE_DATA_NUM        4
    145 #define TOTAL_GROUP_AGG_ALU32_MEM                   16
    146 
    147 /* ALU16/32 & LOAD8/16 */
    148 #define BCMI_FT_ALU_LOAD_MEMS       (bcmiFtAluLoadTypeNone)
    149 
    150 typedef struct alu_load_info_s {
    151 
    152     /* Memory identifier. */
    153     soc_mem_t mem;
    154 
    155     /* Memory size. */
    156     int mem_size;
    157 
    158     /* Flowtracker type. */
    159     bcmi_ft_type_t *resource_ft_type;
    160 
    161 } alu_load_info_t;
    162 
    163 typedef struct bcmi_ft_group_pdd_bus_info_s {
    164 
    165     /* Param identifier. */
    166     int param_id;
    167 
    168     /* End bit. */
    169     int end;
    170 
    171     /* Start bit. */
    172     int start;
    173 
    174     /* Length. */
    175     int length;
    176 
    177 } bcmi_ft_group_pdd_bus_info_t;
    178 
    179 typedef struct alu_load_index_info_s {
    180 
    181     /* Total memory count. */
    182     int total_mem_count;
    183 
    184     /* Total index per memory. */
    185     int total_idx_per_memory;
    186 
    187     /* Index Bitmap. */
    188     SHR_BITDCL *index_bitmap;
    189 
    190     /* Refcounts for all the indexes on this memory. */
    191     uint32 *idx_refcount;
    192 
    193     /* ALU/LOAD memory information. */
    194     alu_load_info_t *alu_load_info;
    195 
    196     /* PDD bus information. */
    197     bcmi_ft_group_pdd_bus_info_t *pdd_bus_info;
    198 
    199     /* Group field information. */
    200     uint32 *group_fid_info;
    201 
    202 } alu_load_index_info_t;
    203 
    204 /* There are 4 different types of memories. */
    205 extern alu_load_index_info_t
    206       alu_load_index_info[BCM_MAX_NUM_UNITS][BCMI_FT_ALU_LOAD_MEMS];
    207 
    208 #define BCMI_FT_ALU_LOAD_INFO(_u, type) \
    209            (alu_load_index_info[_u][type])
    210 
    211 #define BCMI_FT_ALU_LOAD_MEM_COUNT(_u, type) \
    212            ((alu_load_index_info[_u][type]).total_mem_count)
    213 
    214 #define BCMI_FT_ALU_LOAD_MEM_TOTAL_INDEX(_u, type) \
    215            ((alu_load_index_info[_u][type]).total_idx_per_memory)
    216 
    217 #define BCMI_FT_ALU_LOAD_BITMAP_INFO(_u, type) \
    218            (alu_load_index_info[_u][type].index_bitmap)
    219 
    220 #define BCMI_FT_ALU_LOAD_REFCOUNT_INFO(_u, type) \
    221            (alu_load_index_info[_u][type].idx_refcount)
    222 
    223 #define BCMI_FT_ALU_LOAD_REFCOUNT_INCR(_u, type, idx) \
    224            ((alu_load_index_info[_u][type].idx_refcount[idx])++)
    225 
    226 #define BCMI_FT_ALU_LOAD_REFCOUNT_DEC(_u, type, idx) \
    227            ((alu_load_index_info[_u][type].idx_refcount[idx])--)
    228 
    229 #define BCMI_FT_ALU_LOAD_REFCOUNT(_u, type, idx) \
    230            (alu_load_index_info[_u][type].idx_refcount[idx])
    231 
    232 #define BCMI_FT_ALU_LOAD_GROUP_FID_INFO(_u, type) \
    233            ((alu_load_index_info[_u][type]).group_fid_info)
    234 
    235 #define BCMI_FT_ALU_LOAD_PDD_INFO(_u, type) \
    236            (alu_load_index_info[_u][type].pdd_bus_info)
    237 
    238 #define BCMI_FT_ALU_LOAD_MEM_INFO(_u, type) \
    239            ((alu_load_index_info[_u][type]).alu_load_info)
    240 
    241 #define BCMI_FT_ALU_LOAD_MEM(_u, type, mem_idx) \
    242            (((BCMI_FT_ALU_LOAD_MEM_INFO(_u, type))[mem_idx]).mem)
    243 
    244 #define BCMI_FT_ALU_LOAD_MEM_SIZE(_u, type, mem_idx) \
    245            (((BCMI_FT_ALU_LOAD_MEM_INFO(_u, type))[mem_idx]).mem_size)
    246 
    247 #define BCMI_FT_ALU_LOAD_MEM_FT_TYPE(_u, type, mem_idx, bank_idx) \
    248    (((BCMI_FT_ALU_LOAD_MEM_INFO(_u, type))[mem_idx]).resource_ft_type[bank_idx])
    249 
    250 /* Session Data Bank Info */
    251 extern
    252 alu_load_info_t *session_data_bank_info[BCM_MAX_NUM_UNITS];
    253 #define BCMI_FT_SESSION_DATA_BANK_INFO(_u) \
    254             (session_data_bank_info[_u])
    255 
    256 #define BCMI_FT_SESSION_DATA_BANK_MEM(_u) \
    257             ((session_data_bank_info[_u])->mem)
    258 
    259 #define BCMI_FT_SESSION_DATA_BANK_MEM_SIZE(_u) \
    260             ((session_data_bank_info[_u])->mem_size)
    261 
    262 #define BCMI_FT_SESSION_DATA_BANK_FT_TYPE(_u, idx) \
    263             ((session_data_bank_info[_u])->resource_ft_type[idx])
    264 
    265 #if defined(BCM_FLOWTRACKER_V3_SUPPORT)
    266 extern
    267 alu_load_info_t *agg_session_data_bank_info[BCM_MAX_NUM_UNITS];
    268 #define BCMI_FT_AGG_SESSION_DATA_BANK_INFO(_u) \
    269             (agg_session_data_bank_info[_u])
    270 
    271 #define BCMI_FT_AGG_SESSION_DATA_BANK_MEM(_u, _idx) \
    272             ((agg_session_data_bank_info[_u])[_idx].mem)
    273 
    274 #define BCMI_FT_AGG_SESSION_DATA_BANK_MEM_SIZE(_u, _idx) \
    275             ((agg_session_data_bank_info[_u])[_idx].mem_size)
    276 
    277 #define BCMI_FT_AGG_SESSION_DATA_BANK_FT_TYPE(_u, _idx, _ridx) \
    278             ((agg_session_data_bank_info[_u])[_idx].resource_ft_type[_ridx])
    279 #endif
    280 
    281 /* TimeStamp Engine Info */
    282 extern
    283 alu_load_info_t *timestamp_engine_info[BCM_MAX_NUM_UNITS];
    284 #define BCMI_FT_TIMESTAMP_ENGINE_INFO(_u) \
    285             (timestamp_engine_info[_u])
    286 
    287 #define BCMI_FT_TIMESTAMP_ENGINE_MEM(_u) \
    288             ((timestamp_engine_info[_u])->mem)
    289 
    290 #define BCMI_FT_TIMESTAMP_ENGINE_MEM_SIZE(_u) \
    291             ((timestamp_engine_info[_u])->mem_size)
    292 
    293 #define BCMI_FT_TIMESTAMP_ENGINE_FT_TYPE(_u, idx) \
    294             ((timestamp_engine_info[_u])->resource_ft_type[idx])
    295 
    296 /* Resource Software State Info */
    297 typedef struct bcmi_ft_resource_sw_info_s {
    298 
    299     /* Number of banks allocated to each FT stage. */
    300     uint8 num_banks[bcmiFtTypeCount];
    301 
    302     /* Local PDE start offset for each FT stage. */
    303     uint8 bank_start_local_pde_offset[bcmiFtTypeCount];
    304 
    305     /* Export PDE start offset for each FT stage. */
    306     uint8 bank_start_export_pde_offset[bcmiFtTypeCount];
    307 
    308     /* Local offset jump for each FT stage. */
    309     uint8 bank_offset_local_jump[bcmiFtTypeCount];
    310 
    311     /* Export offset jump for each FT stage. */
    312     uint8 bank_offset_export_jump[bcmiFtTypeCount];
    313 
    314     /* Fill bytes for each FT stage. */
    315     uint8 bank_fill_bytes[bcmiFtTypeCount];
    316 
    317     /* No. of fill for each FT stage. */
    318     uint8 bank_num_fills[bcmiFtTypeCount];
    319 
    320     /* No. of Load8 resource allocated to each FT stage. */
    321     uint8 num_load8[bcmiFtTypeCount];
    322 
    323     /* No. of Load16 resource allocated to each FT stage. */
    324     uint8 num_load16[bcmiFtTypeCount];
    325 
    326     /* No. of timestamp resource allocated to each FT stage. */
    327     uint8 num_tsbank[bcmiFtTypeCount];
    328 
    329     /* Chip delay granularity. */
    330     uint8 chip_delay_gran;
    331 
    332     /* End to End delay granularity. */
    333     uint8 e2e_delay_gran;
    334 
    335     /* Inter packet arrival delay granularity. */
    336     uint8 ipat_delay_gran;
    337 
    338     /* Inter packet departure delay granularity. */
    339     uint8 ipdt_delay_gran;
    340 
    341     /* Chip delay offset. */
    342     int chip_delay_offset;
    343 
    344     /* End to End delay offset. */
    345     int e2e_delay_offset;
    346 
    347     /* Inter packet arrival delay offset. */
    348     int ipat_delay_offset;
    349 
    350     /* Inter packet departure delay offset. */
    351     int ipdt_delay_offset;
    352 
    353 } bcmi_ft_resource_sw_info_t;
    354 
    355 extern bcmi_ft_resource_sw_info_t
    356         bcmi_ft_resource_sw_state[BCM_MAX_NUM_UNITS];
    357 
    358 #define BCMI_FT_RESOURCE_SW_INFO(unit) \
    359         (bcmi_ft_resource_sw_state[unit])
    360 
    361 #define BCMI_FT_RESOURCE_SW_INFO_NUM_BANKS(unit, ft_type)  \
    362         (bcmi_ft_resource_sw_state[unit].num_banks[ft_type])
    363 
    364 #define BCMI_FT_RESOURCE_SW_INFO_BANK_START_LOCAL_PDE_OFFSET(unit, ft_type)  \
    365         (bcmi_ft_resource_sw_state[unit].bank_start_local_pde_offset[ft_type])
    366 
    367 #define BCMI_FT_RESOURCE_SW_INFO_BANK_START_EXPORT_PDE_OFFSET(unit, ft_type)  \
    368         (bcmi_ft_resource_sw_state[unit].bank_start_export_pde_offset[ft_type])
    369 
    370 #define BCMI_FT_RESOURCE_SW_INFO_BANK_OFFSET_LOCAL_JUMP(unit, ft_type)  \
    371         (bcmi_ft_resource_sw_state[unit].bank_offset_local_jump[ft_type])
    372 
    373 #define BCMI_FT_RESOURCE_SW_INFO_BANK_OFFSET_EXPORT_JUMP(unit, ft_type)  \
    374         (bcmi_ft_resource_sw_state[unit].bank_offset_export_jump[ft_type])
    375 
    376 #define BCMI_FT_RESOURCE_SW_INFO_BANK_FILL_BYTES(unit, ft_type)  \
    377         (bcmi_ft_resource_sw_state[unit].bank_fill_bytes[ft_type])
    378 
    379 #define BCMI_FT_RESOURCE_SW_INFO_BANK_NUM_FILLS(unit, ft_type)  \
    380         (bcmi_ft_resource_sw_state[unit].bank_num_fills[ft_type])
    381 
    382 #define BCMI_FT_RESOURCE_SW_INFO_BANK_NUM_LOAD8(unit, ft_type)  \
    383         (bcmi_ft_resource_sw_state[unit].num_load8[ft_type])
    384 
    385 #define BCMI_FT_RESOURCE_SW_INFO_BANK_NUM_LOAD16(unit, ft_type)  \
    386         (bcmi_ft_resource_sw_state[unit].num_load16[ft_type])
    387 
    388 #define BCMI_FT_RESOURCE_SW_INFO_BANK_NUM_TS(unit, ft_type)  \
    389         (bcmi_ft_resource_sw_state[unit].num_tsbank[ft_type])
    390 
    391 #define BCMI_FT_RESOURCE_SW_INFO_CHIP_GRAN(unit)  \
    392         (bcmi_ft_resource_sw_state[unit].chip_delay_gran)
    393 
    394 #define BCMI_FT_RESOURCE_SW_INFO_E2E_GRAN(unit)  \
    395         (bcmi_ft_resource_sw_state[unit].e2e_delay_gran)
    396 
    397 #define BCMI_FT_RESOURCE_SW_INFO_IPAT_GRAN(unit)  \
    398         (bcmi_ft_resource_sw_state[unit].ipat_delay_gran)
    399 
    400 #define BCMI_FT_RESOURCE_SW_INFO_IPDT_GRAN(unit)  \
    401         (bcmi_ft_resource_sw_state[unit].ipdt_delay_gran)
    402 
    403 #define BCMI_FT_RESOURCE_SW_INFO_CHIP_OFFSET(unit)  \
    404         (bcmi_ft_resource_sw_state[unit].chip_delay_offset)
    405 
    406 #define BCMI_FT_RESOURCE_SW_INFO_E2E_OFFSET(unit)  \
    407         (bcmi_ft_resource_sw_state[unit].e2e_delay_offset)
    408 
    409 #define BCMI_FT_RESOURCE_SW_INFO_IPAT_OFFSET(unit)  \
    410         (bcmi_ft_resource_sw_state[unit].ipat_delay_offset)
    411 
    412 #define BCMI_FT_RESOURCE_SW_INFO_IPDT_OFFSET(unit)  \
    413         (bcmi_ft_resource_sw_state[unit].ipdt_delay_offset)
    414 /*************************************************************
    415  | End - FT resource tracking structs & defines              |
    416  */
    417 
    418 
    419 /*************************************************************
    420  | Start - ALU Hash structs & defines                        |
    421  */
    422 
    423 /* Hash table defines. */
    424 #define BCMI_FT_ALU_HASH_BUCKETS              1024
    425 #define BCMI_FT_ALU_HASH_KEY_LEN_IN_WORDS     8
    426 
    427 /* Below is the information what will be stored
    428  * in hash table. */
    429 typedef struct bcmi_ft_alu_hash_info_s {
    430 
    431     /* ALU/LOAD index allocated. */
    432     int alu_load_index;
    433 
    434     /* ALU/LOAD type. */
    435     bcmi_ft_alu_load_type_t alu_load_type;
    436 
    437     /* ALU/LOAD key. */
    438     bcmi_ft_alu_key_t key;
    439 
    440     /* Tracking param. */
    441     uint16 param;
    442 
    443     /* Custom Id */
    444     uint16 custom_id;
    445 
    446     /* Id of this flowchecker. */
    447     bcmi_ft_flowchecker_list_t *head;
    448 
    449     /* Flowtracker type (None/IFT/MFT/EFT).
    450      * Not valid for LOAD8/16 memories. */
    451     bcmi_ft_type_t hash_ft_type;
    452 
    453     /* LOAD8/16 banks allocated. */
    454     uint32  hash_load_mem_vector;
    455 
    456     /* Group direction. */
    457     bcm_flowtracker_direction_t direction;
    458 
    459 } bcmi_ft_alu_hash_info_t;
    460 
    461 typedef struct bcmi_ft_alu_entry_list_s {
    462 
    463     /* ALU hash info. */
    464     bcmi_ft_alu_hash_info_t alu_info;
    465 
    466     /* Link to next hash entry. */
    467     struct bcmi_ft_alu_entry_list_s *link;
    468 
    469 } bcmi_ft_alu_entry_list_t;
    470 
    471 typedef struct bcmi_ft_alu_table_hash_s {
    472 
    473     /* Head alu hash entry link. */
    474     bcmi_ft_alu_entry_list_t *head_link;
    475 
    476 } bcmi_ft_alu_table_hash_t;
    477 
    478 /*************************************************************
    479  | End - ALU Hash structs & defines                          |
    480  */
    481 
    482 
    483 
    484 /*************************************************************
    485  | Start - FT checker structs & defines                      |
    486  */
    487 
    488 /* Flowtracker checker software info. */
    489 typedef struct bcmi_flowtracker_flowchecker_info_s {
    490 
    491     /* Check flags. */
    492     uint32 flags;
    493 
    494     /* Primary check of this flowchecker. */
    495     bcm_flowtracker_check_info_t check1;
    496 
    497     /* Second check of this flowchecker. */
    498     bcm_flowtracker_check_info_t check2;
    499 
    500     /* Action to be performed for this flowchecker. */
    501     bcm_flowtracker_check_action_info_t action_info;
    502 
    503     /* Export action information for this flowchecker. */
    504     bcm_flowtracker_check_export_info_t export_info;
    505 
    506     /* Delay information for this flowchecker. */
    507     bcm_flowtracker_check_delay_info_t delay_info;
    508 
    509     /* Supported flowtracker type bitmap. */
    510     uint16 check_ft_type_bmp;
    511 
    512 } bcmi_flowtracker_flowchecker_info_t;
    513 
    514 /* Flowtracker checker software state. */
    515 typedef struct bcmi_ft_flowchecker_sw_info_s {
    516 
    517     /* Flowchecker software info. */
    518     bcmi_flowtracker_flowchecker_info_t **bcmi_sw_info;
    519 
    520     /* Flowchecker index bitmap. */
    521     SHR_BITDCL *ft_flowchecker_bitmap;
    522 
    523     /* Flowchecker index reference count. */
    524     uint32 *fc_idx_refcount;
    525 
    526     /* Flowchecker maximum id. */
    527     uint16 max_check;
    528 
    529 } bcmi_ft_flowchecker_sw_state_t;
    530 
    531 extern bcmi_ft_flowchecker_sw_state_t
    532            bcmi_ft_flowchecker_state[BCM_MAX_NUM_UNITS];
    533 
    534 #define BCMI_FT_FLOWCHECKER_BITMAP(unit)  \
    535             (bcmi_ft_flowchecker_state[unit].ft_flowchecker_bitmap)
    536 
    537 #define BCMI_FT_FLOWCHECKER_STATE(unit)  \
    538             (bcmi_ft_flowchecker_state[unit].bcmi_sw_info)
    539 
    540 #define BCMI_FT_FLOWCHECKER_INFO(unit, index)  \
    541             (bcmi_ft_flowchecker_state[unit].bcmi_sw_info[index])
    542 
    543 #define BCMI_FT_FLOWCHECKER_REFCOUNT_STATE(unit)  \
    544             (bcmi_ft_flowchecker_state[unit].fc_idx_refcount)
    545 
    546 #define BCMI_FT_FLOWCHECKER_REFCOUNT(unit, index)  \
    547             (bcmi_ft_flowchecker_state[unit].fc_idx_refcount[index])
    548 
    549 #define BCMI_FT_FLOWCHECKER_REFCOUNT_DEC(unit, index)  \
    550             ((bcmi_ft_flowchecker_state[unit].fc_idx_refcount[index])--)
    551 
    552 #define BCMI_FT_FLOWCHECKER_REFCOUNT_INC(unit, index)  \
    553             ((bcmi_ft_flowchecker_state[unit].fc_idx_refcount[index])++)
    554 
    555 #define BCMI_FT_FLOWCHECKER_MAX_ID(unit)  \
    556             (bcmi_ft_flowchecker_state[unit].max_check)
    557 
    558 /*************************************************************
    559  | End - FT checker structs & defines                        |
    560  */
    561 
    562 
    563 
    564 /*************************************************************
    565  | Start - ALU/LOAD HW structs & defines                     |
    566  */
    567 
    568 /* Below is the information that FTFP will send to Group. */
    569 typedef struct bcmi_ft_group_alu_info_s {
    570 
    571     /* Flags. */
    572     uint32 flags;
    573 
    574     /* Check 1 data.*/
    575     bcmi_ft_alu_key_t key1;
    576     /* Element type. */
    577     bcm_flowtracker_tracking_param_type_t element_type1;
    578 
    579     /* Check 2 data.*/
    580     bcmi_ft_alu_key_t key2;
    581     /* Element type. */
    582     bcm_flowtracker_tracking_param_type_t element_type2;
    583 
    584     /* action data.*/
    585     bcmi_ft_alu_key_t action_key;
    586 
    587     /* Element type. */
    588     bcm_flowtracker_tracking_param_type_t action_element_type;
    589 
    590     /* id of this flowchecker */
    591     bcm_flowtracker_check_t flowchecker_id;
    592 
    593     /* Flowtracker type (None/IFT/MFT/EFT).
    594      * Not valid for LOAD8/16 memories. */
    595     bcmi_ft_type_t alu_ft_type;
    596 
    597     /* These are needed for warmboot and may be for SER. */
    598     int alu_load_index;
    599 
    600     /* ALU/LOAD type */
    601     bcmi_ft_alu_load_type_t alu_load_type;
    602 
    603     /* Flow direction */
    604     bcm_flowtracker_direction_t direction;
    605 
    606     /* Custom Ids for Key1 */
    607     uint16 custom_id1;
    608 
    609     /* Custom Ids for Key2 */
    610     uint16 custom_id2;
    611 
    612     /* Custom Ids for action_key */
    613     uint16 action_custom_id;
    614 
    615 } bcmi_ft_group_alu_info_t;
    616 
    617 typedef struct bcmi_ft_element_alu_info_s {
    618 
    619     /* Tracking param type. */
    620     bcm_flowtracker_tracking_param_type_t element;
    621 
    622     /* Flowchecker operation. */
    623     bcm_flowtracker_check_operation_t operation;
    624 
    625     /* Flowchecker action. */
    626     bcm_flowtracker_check_action_t action;
    627 
    628 } bcmi_ft_element_alu_info_t;
    629 
    630 /* Select packet attribute from Extracted bus for check */
    631 #define BCMI_FT_ALU_ATTR_SELECT_EXTRACTION     0
    632 
    633 /* Select byte count for check */
    634 #define BCMI_FT_ALU_ATTR_SELECT_BYTE_COUNT     1
    635 
    636 /* ALU Check logic Kmap bit selection */
    637 /* DO NOT CHANGE. Hw encoding */
    638 #define BCMI_FT_ALU_KMAP_BIT_SEL_CHECK0_RES     0
    639 #define BCMI_FT_ALU_KMAP_BIT_SEL_CHECK1_RES     1
    640 #define BCMI_FT_ALU_KMAP_BIT_SEL_PKT_FLAGS0     2
    641 #define BCMI_FT_ALU_KMAP_BIT_SEL_PKT_FLAGS1     3
    642 #define BCMI_FT_ALU_KMAP_BIT_SEL_PKT_FLAGS2     4
    643 #define BCMI_FT_ALU_KMAP_BIT_SEL_PKT_FLAGS3     5
    644 #define BCMI_FT_ALU_KMAP_BIT_SEL_PKT_FLAGS4     6
    645 #define BCMI_FT_ALU_KMAP_BIT_SEL_STATE_TRIG     7
    646 
    647 /* Vector definitions for various ALU/LOAD methods. */
    648 typedef struct bcmi_ft_alu_load_method_s {
    649 
    650     int (*alu_load_match)(int unit,
    651             bcm_flowtracker_group_t id,
    652             bcmi_ft_group_alu_info_t *temp,
    653             bcmi_ft_alu_hash_info_t *alu_info,
    654             int *load16_indexes, int *index);
    655 
    656     int (*alu_load_install)(
    657             int unit,
    658             bcm_flowtracker_group_t id,
    659             bcmi_ft_group_alu_info_t *info,
    660             int *indexes);
    661 
    662     int (*alu_load_uninstall)(
    663             int unit,
    664             bcm_flowtracker_group_t id,
    665             bcmi_ft_group_alu_info_t *info,
    666             int *indexes);
    667 
    668 } bcmi_ft_alu_load_method_t;
    669 
    670 extern
    671 bcmi_ft_alu_load_method_t
    672     *alu_load_methods[BCMI_FT_ALU_LOAD_MEMS];
    673 
    674 /* ALU/LOAD match methods. */
    675 #define bcmi_ft_method_match(type) \
    676     (alu_load_methods[type]->alu_load_match)
    677 
    678 #define BCMI_FT_METHOD_MATCH_CHECK(type) \
    679     do { \
    680         if (!bcmi_ft_method_match(type)) { \
    681             rv = BCM_E_UNAVAIL; \
    682         } \
    683     } while(0);
    684 
    685 #define BCMI_FT_METHOD_MATCH_EXEC(type) \
    686     (*(bcmi_ft_method_match(type)))
    687 
    688 
    689 /* ALU/LOAD Install methods. */
    690 #define bcmi_ft_method_install(type) \
    691     (alu_load_methods[type]->alu_load_install)
    692 
    693 #define BCMI_FT_METHOD_INSTALL_CHECK(type) \
    694     do { \
    695         if (!bcmi_ft_method_install(type)) { \
    696             rv = BCM_E_UNAVAIL; \
    697         } \
    698     } while(0);
    699 
    700 #define BCMI_FT_METHOD_INSTALL_EXEC(type) \
    701     (*(bcmi_ft_method_install(type)))
    702 
    703 /* ALU/LOAD uninstall methods. */
    704 #define bcmi_ft_method_uninstall(type) \
    705     (alu_load_methods[type]->alu_load_uninstall)
    706 
    707 #define BCMI_FT_METHOD_UNINSTALL_CHECK(type) \
    708     do { \
    709         if (!bcmi_ft_method_uninstall(type)) { \
    710             rv = BCM_E_UNAVAIL; \
    711         } \
    712     } while(0);
    713 
    714 #define BCMI_FT_METHOD_UNINSTALL_EXEC(type) \
    715     (*(bcmi_ft_method_uninstall(type)))
    716 
    717 /*************************************************************
    718  | End - ALU/LOAD HW structs & defines                       |
    719  */
    720 
    721 
    722 
    723 /*************************************************************
    724  | Start - Chip debug structs & defines                      |
    725  */
    726 
    727 typedef struct bcmi_ft_chip_debug_param_s {
    728 
    729     /* Tracking param type. */
    730     bcm_flowtracker_tracking_param_type_t param;
    731 
    732     /* ALU/LOAD type. */
    733     bcmi_ft_alu_load_type_t alu_type;
    734 
    735     /* Memory identifier. */
    736     int mem_id;
    737 
    738     /* Count. */
    739     uint32 count;
    740 
    741 } bcmi_ft_chip_debug_param_t;
    742 
    743 typedef struct bcmi_ft_chip_debug_s {
    744 
    745     /* Chip debug enable status. */
    746     int chip_debug_enable;
    747 
    748     /* Number of debug information. */
    749     int num_debug_info;
    750 
    751     /* ALU32 mem resource used. */
    752     int alu32_mem_used[TOTAL_GROUP_ALU32_MEM];
    753 
    754     /* ALU16 mem resource used. */
    755     int alu16_mem_used[TOTAL_GROUP_ALU16_MEM];
    756 
    757     /* ALU32 mem resource reference count. */
    758     int alu32_ref_count[TOTAL_GROUP_ALU32_MEM];
    759 
    760     /* ALU16 mem resource reference count. */
    761     int alu16_ref_count[TOTAL_GROUP_ALU16_MEM];
    762 
    763     /* Chip debug param information. */
    764     bcmi_ft_chip_debug_param_t *param_info;
    765 
    766 } bcmi_ft_chip_debug_t;
    767 
    768 extern
    769 bcmi_ft_chip_debug_t chip_debug_info[BCM_MAX_NUM_UNITS];
    770 
    771 #define BCMI_FT_CHIP_DEBUG_INFO(unit) \
    772     (chip_debug_info[unit])
    773 
    774 #define BCMI_FT_CHIP_DEBUG_ENABLE(unit) \
    775     ((chip_debug_info[unit]).chip_debug_enable)
    776 
    777 #define BCMI_FT_CHIP_NUM_DEBUG_INFO(unit) \
    778     ((chip_debug_info[unit]).num_debug_info)
    779 
    780 #define BCMI_FT_CHIP_DEBUG_PARAM_INFO(unit) \
    781     (chip_debug_info[unit].param_info)
    782 
    783 #define BCMI_FT_CHIP_DEBUG_PARAM(unit, id) \
    784     (chip_debug_info[unit].param_info[id])
    785 
    786 /*************************************************************
    787  | End - Chip debug structs & defines                        |
    788  */
    789 
    790 
    791 
    792 
    793 /*************************************************************
    794  | Start - FT resource methods                               |
    795  */
    796 
    797 extern int
    798 bcmi_ft_alu_load_init(int unit);
    799 
    800 extern void
    801 bcmi_ft_alu_load_cleanup(int unit);
    802 
    803 /*************************************************************
    804  | End - FT resource methods                                 |
    805  */
    806 
    807 
    808 
    809 /*************************************************************
    810  | Start - ALU Hash methods                                  |
    811  */
    812 
    813 extern int
    814 bcmi_ft_alu_hash_init(int unit);
    815 
    816 extern void
    817 bcmi_ft_alu_hash_cleanup(int unit);
    818 
    819 /* Functions for hash insert/remove. */
    820 extern int
    821 bcmi_ft_alu_hash_insert(
    822         int unit, bcm_flowtracker_group_t id,
    823         bcmi_ft_alu_load_type_t alu_load_type,
    824         bcmi_ft_group_alu_info_t *group_alu_info,
    825         int *load_indexes,
    826         int *alu_load_index);
    827 
    828 extern int
    829 bcmi_ft_alu_hash_remove(
    830         int unit, bcm_flowtracker_group_t id,
    831         bcmi_ft_alu_load_type_t alu_load_type,
    832         bcmi_ft_group_alu_info_t *group_alu_info,
    833         int *load_indexes,
    834         int *alu_load_index);
    835 
    836 extern int
    837 bcmi_ft_alu_hash_mem_index_get (
    838         int unit,  bcm_flowtracker_group_t id,
    839         bcmi_ft_alu_load_type_t alu_load_type,
    840         bcmi_ft_group_alu_info_t *group_alu_info,
    841         int *load_indexes,
    842         int *alu_load_index);
    843 
    844 extern int
    845 bcmi_ft_alu_load_compare(
    846         int unit, bcm_flowtracker_group_t id,
    847         bcmi_ft_group_alu_info_t *group_alu_info,
    848         bcmi_ft_alu_load_type_t alu_load_type,
    849         bcmi_ft_alu_hash_info_t *alu_info,
    850         int *indexes);
    851 
    852 extern int
    853 bcmi_ft_alu_check16_mapping_get(
    854         int unit,
    855         bcm_flowtracker_group_t id,
    856         bcm_flowtracker_check_t *check_map);
    857 
    858 extern int
    859 bcmi_ft_alu_load_hash_dump(
    860         int unit);
    861 
    862 /*************************************************************
    863  | End - ALU Hash methods                                    |
    864  */
    865 
    866 
    867 /*************************************************************
    868  | Start - ALU hardware methods                              |
    869  */
    870 
    871 extern int
    872 bcmi_ft_alu_entry_match(
    873         int unit,
    874         bcm_flowtracker_group_t id,
    875         bcmi_ft_group_alu_info_t *temp,
    876         bcmi_ft_alu_hash_info_t *alu_info,
    877         int *load8_indexes, int *index);
    878 
    879 extern int
    880 bcmi_ft_alu32_entry_install(
    881         int unit, bcm_flowtracker_group_t id,
    882         bcmi_ft_group_alu_info_t *info,
    883         int *indexes);
    884 
    885 extern int
    886 bcmi_ft_alu32_entry_uninstall(
    887         int unit, bcm_flowtracker_group_t id,
    888         bcmi_ft_group_alu_info_t *info,
    889         int *indexes);
    890 
    891 extern int
    892 bcmi_ft_alu16_entry_install(
    893         int unit, bcm_flowtracker_group_t id,
    894         bcmi_ft_group_alu_info_t *info,
    895         int *indexes);
    896 
    897 extern int
    898 bcmi_ft_alu16_entry_uninstall(
    899         int unit, bcm_flowtracker_group_t id,
    900         bcmi_ft_group_alu_info_t *info,
    901         int *indexes);
    902 
    903 extern int
    904 bcmi_ft_load16_entry_match(
    905         int unit,
    906         bcm_flowtracker_group_t id,
    907         bcmi_ft_group_alu_info_t *temp,
    908         bcmi_ft_alu_hash_info_t *alu_info,
    909         int *load16_indexes, int *index);
    910 
    911 extern int
    912 bcmi_ft_load16_entry_install(
    913         int unit, bcm_flowtracker_group_t id,
    914         bcmi_ft_group_alu_info_t *info,
    915         int *indexes);
    916 
    917 extern int
    918 bcmi_ft_load16_entry_uninstall(
    919         int unit,
    920         bcm_flowtracker_group_t id,
    921         bcmi_ft_group_alu_info_t *info,
    922         int *indexes);
    923 
    924 extern int
    925 bcmi_ft_load8_entry_match(
    926         int unit,
    927         bcm_flowtracker_group_t id,
    928         bcmi_ft_group_alu_info_t *temp,
    929         bcmi_ft_alu_hash_info_t *alu_info,
    930         int *load8_indexes, int *index);
    931 
    932 extern int
    933 bcmi_ft_load8_entry_install(
    934         int unit, bcm_flowtracker_group_t id,
    935         bcmi_ft_group_alu_info_t *info,
    936         int *indexes);
    937 
    938 extern int
    939 bcmi_ft_load8_entry_uninstall(
    940         int unit,
    941         bcm_flowtracker_group_t id,
    942         bcmi_ft_group_alu_info_t *info,
    943         int *indexes);
    944 
    945 /* Utility Functions - install/uninstall. */
    946 extern int
    947 bcmi_ft_flowchecker_alu_base_control_set(
    948         int unit,
    949         bcm_flowtracker_group_t id,
    950         bcmi_ft_group_alu_info_t *info,
    951         uint32 *alu_fmt);
    952 
    953 extern int
    954 bcmi_ft_load16_entry_write(
    955         int unit, bcm_flowtracker_group_t id,
    956         bcmi_ft_group_alu_info_t *temp,
    957         int *load16_indexes, int index);
    958 
    959 extern int
    960 bcmi_ft_load8_entry_write(
    961         int unit, bcm_flowtracker_group_t id,
    962         bcmi_ft_group_alu_info_t *temp,
    963         int *load8_indexes, int index);
    964 
    965 extern int
    966 bcmi_ft_load16_entry_clear(int unit, int index);
    967 
    968 /* Utility Functions - index. */
    969 extern int
    970 bcmi_ft_alu_check_free_index(
    971         int unit,
    972         bcm_flowtracker_group_t id,
    973         bcmi_ft_alu_load_type_t alu_load_type,
    974         int index);
    975 
    976 extern int
    977 bcmi_ft_alu_get_free_index(
    978         int unit,
    979         bcm_flowtracker_group_t id,
    980         bcmi_ft_alu_load_type_t alu_load_type,
    981         bcmi_ft_group_alu_info_t *group_alu_info,
    982         int *load_indexes,
    983         int *index);
    984 
    985 extern void
    986 bcmi_ft_alu_load_mem_index_get(
    987         int unit,
    988         int index, bcmi_ft_alu_load_type_t type,
    989         int *new_index, soc_mem_t *mem, int *bit);
    990 
    991 /* Utility methods - other. */
    992 extern void
    993 bcmi_ft_alu_load_pdd_mem_get(int unit,
    994         bcmi_ft_type_t ft_type,
    995         soc_mem_t *mem);
    996 
    997 extern int
    998 bcmi_ft_alu_hw_operation_get(
    999         int unit,
   1000         bcm_flowtracker_check_operation_t operation,
   1001         int *check_0_operation,
   1002         int *check_1_operation);
   1003 
   1004 extern int
   1005 bcmi_ft_flowchecker_opr_is_dual(
   1006         int unit,
   1007         bcm_flowtracker_check_operation_t operation);
   1008 
   1009 extern int
   1010 bcmi_ft_alu_hw_action_get(
   1011         int unit,
   1012         bcmi_ft_group_alu_info_t *alu_info,
   1013         bcm_flowtracker_check_action_t action,
   1014         int * hw_action);
   1015 
   1016 extern void
   1017 bcmi_ft_group_alu_action_shift_bits_get(
   1018         int unit,
   1019         bcm_flowtracker_check_action_t action,
   1020         bcmi_ft_group_alu_info_t *info,
   1021         int *action_shift_bits);
   1022 
   1023 extern int
   1024 bcmi_ft_group_alu_load_trigger_set(
   1025         int unit,
   1026         bcm_flowtracker_group_t id,
   1027         bcm_flowtracker_direction_t direction);
   1028 
   1029 extern int
   1030 bcmi_ft_alu_load_values_normalize(int unit,
   1031                                   bcmi_ft_group_alu_info_t *info,
   1032                                   int *length,
   1033                                   int *alu);
   1034 
   1035 extern int
   1036 bcmi_ft_alu_load_type_get(
   1037         int unit,
   1038         int alu,
   1039         int length,
   1040         bcmi_ft_alu_load_type_t *type);
   1041 
   1042 #ifdef BCM_FLOWTRACKER_V2_SUPPORT
   1043 extern void
   1044 bcmi_ftv2_get_load_mem_vector(int unit,
   1045                               bcm_flowtracker_group_t id,
   1046                               bcmi_ft_alu_load_type_t alu_load_type,
   1047                               int *load_indexes,
   1048                               uint32 *load_mem_vector);
   1049 #endif /* BCM_FLOWTRACKER_V2_SUPPORT */
   1050 
   1051 extern int
   1052 bcmi_ft_group_alu_load_index_match(
   1053         int unit,
   1054         bcm_flowtracker_group_t id,
   1055         bcmi_ft_alu_load_type_t alu_load_type,
   1056         bcmi_ft_alu_hash_info_t *alu_info);
   1057 
   1058 extern int
   1059 bcmi_ft_tracking_param_in_Debug_mode(int unit,
   1060                                      bcm_flowtracker_group_t id,
   1061                                      bcmi_ft_group_alu_info_t *group_alu_info,
   1062                                      bcmi_ft_alu_load_type_t alu_load_type);
   1063 
   1064 extern int
   1065 bcmi_ft_chip_debug_counter_get(int unit,
   1066                                int mem_idx,
   1067                                bcmi_ft_alu_load_type_t alu_load_type,
   1068                                uint32 *count);
   1069 
   1070 extern void
   1071 bcmi_ft_chip_debug_use_mem_update(int unit,
   1072                                   bcmi_ft_alu_load_type_t alu_load_type,
   1073                                   int mem_idx,
   1074                                   int val);
   1075 
   1076 extern int
   1077 bcmi_ft_chip_debug_mem_check(int unit,
   1078                              bcmi_ft_alu_load_type_t alu_load_type,
   1079                              int mem_idx);
   1080 
   1081 extern int
   1082 bcmi_ft_chip_debug_info_get(int unit,
   1083                             int max_size,
   1084                             bcm_flowtracker_chip_debug_info_t *info,
   1085                             int *num_debug_info);
   1086 
   1087 extern int
   1088 bcmi_ft_chip_debug_alu_index_get(int unit,
   1089                                  bcm_flowtracker_group_t id,
   1090                                  bcmi_ft_group_alu_info_t *group_alu_info,
   1091                                  bcmi_ft_alu_load_type_t alu_load_type,
   1092                                  int *index);
   1093 
   1094 extern int
   1095 bcmi_ft_chip_debug_data_sanity(int unit,
   1096                                int num_info,
   1097                                bcm_flowtracker_chip_debug_info_t *info);
   1098 
   1099 /* Get the matching data from valid pdd entry. */
   1100 extern int
   1101 bcmi_ft_group_alu_load_index_match_data_get(int unit,
   1102                                             bcm_flowtracker_group_t id,
   1103                                             bcmi_ft_alu_load_type_t alu_load_type,
   1104                                             int iter,
   1105                                             bcmi_ft_group_alu_info_t **temp);
   1106 
   1107 extern int
   1108 bcmi_ft_group_alu_load_pdd_status_get(int unit,
   1109                                       bcm_flowtracker_group_t id,
   1110                                       uint32 *in_pdd_entry,
   1111                                       bcmi_ft_alu_load_type_t alu_load_type,
   1112                                       int iter);
   1113 
   1114 extern int
   1115 bcmi_ft_tracking_param_weight_hw_val_get(
   1116         int unit,
   1117         bcm_flowtracker_tracking_param_weight_t weight,
   1118         uint32 *hw_val);
   1119 
   1120 extern int
   1121 bcmit_ft_tracking_param_weight_enum_get(
   1122         int unit,
   1123         uint32 hw_val,
   1124         bcm_flowtracker_tracking_param_weight_t *weight);
   1125 
   1126 extern int
   1127 bcmi_ft_check_ft_type_bmp_set(
   1128         int unit,
   1129         bcmi_flowtracker_flowchecker_info_t *fc_info);
   1130 
   1131 /*************************************************************
   1132  | End - ALU hardware methods                                |
   1133  */
   1134 
   1135 
   1136 
   1137 /*************************************************************
   1138  | Start - Chip debug methods                                |
   1139  */
   1140 
   1141 extern int
   1142 bcmi_ft_chip_debug_info_set(int unit,
   1143                             int num_info,
   1144                             bcm_flowtracker_chip_debug_info_t *info);
   1145 
   1146 extern int
   1147 bcmi_ft_chip_debug_info_get(int unit,
   1148                             int max_size,
   1149                             bcm_flowtracker_chip_debug_info_t *info,
   1150                             int *num_debug_info);
   1151 
   1152 /*************************************************************
   1153  | End - Chip debug methods                                  |
   1154  */
   1155 
   1156 
   1157 
   1158 /*************************************************************
   1159  | Start - Flowtracker version 2 methods                     |
   1160  */
   1161 
   1162 #if defined(BCM_FLOWTRACKER_V2_SUPPORT)
   1163 extern int
   1164 bcmi_ftv2_alu_load_mem_config_init(int unit);
   1165 
   1166 extern int
   1167 bcmi_ftv2_resource_info_init(int unit);
   1168 
   1169 extern int
   1170 bcmi_ftv2_group_alu_mask_set(int unit,
   1171                              bcmi_ft_group_alu_info_t *alu_info,
   1172                              bcmi_flowtracker_flowchecker_info_t *fc_info,
   1173                              uint32 *alu_fmt);
   1174 
   1175 extern int
   1176 bcmi_ftv2_group_alu16_mask_clear(int unit,
   1177                                  soc_mem_t mem,
   1178                                  int index);
   1179 
   1180 extern int
   1181 bcmi_ftv2_group_alu32_mask_clear(int unit,
   1182                                  bcmi_ft_alu_load_type_t alu_load_type,
   1183                                  soc_mem_t mem,
   1184                                  int index);
   1185 
   1186 extern int
   1187 bcmi_ftv2_group_param_delay_set(int unit,
   1188                                 bcm_flowtracker_group_t id,
   1189                                 bcmi_ft_group_alu_info_t *alu_info,
   1190                                 uint32 *alu32_specific_ctrlfmt);
   1191 
   1192 extern int
   1193 bcmi_ftv2_group_check_delay_set(int unit,
   1194                                 bcm_flowtracker_group_t id,
   1195                                 bcmi_flowtracker_flowchecker_info_t *fc_info,
   1196                                 uint32 *alu32_specific_ctrlfmt);
   1197 extern int
   1198 bcmi_ftv2_alu_hw_timestamp_get(int unit,
   1199                                bcm_flowtracker_group_t id,
   1200                                int user_req,
   1201                                bcm_flowtracker_timestamp_source_t sw_ts,
   1202                                int *hw_ts);
   1203 #endif /* BCM_FLOWTRACKER_V2_SUPPORT */
   1204 
   1205 /*************************************************************
   1206  | End - Flowtracker version 2 methods                       |
   1207  */
   1208 
   1209 /*************************************************************
   1210  | Start - Flowtracker version 3 methods                     |
   1211  */
   1212 
   1213 #if defined(BCM_FLOWTRACKER_V3_SUPPORT)
   1214 extern int
   1215 bcmi_ftv3_alu_load_mem_config_init(int unit);
   1216 
   1217 extern void
   1218 bcmi_ftv3_alu_check_attr_select_get(int unit,
   1219         bcmi_flowtracker_flowchecker_info_t *fc_info,
   1220         int *check1_attr_sel,
   1221         int *check2_attr_sel,
   1222         int *update_attr_sel);
   1223 
   1224 #endif /* BCM_FLOWTRACKER_V3_SUPPORT */
   1225 
   1226 /*************************************************************
   1227  | End - Flowtracker version 3 methods                       |
   1228  */
   1229 
   1230 #endif /* BCM_FLOWTRACKER_SUPPORT */
   1231 #endif /* _BCM_INT_FT_ALU_H_ */