3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * CDDL HEADER START
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * The contents of this file are subject to the terms of the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Common Development and Distribution License (the "License").
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * You may not use this file except in compliance with the License.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * or http://www.opensolaris.org/os/licensing.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * See the License for the specific language governing permissions
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * and limitations under the License.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * When distributing Covered Code, include this CDDL HEADER in each
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * If applicable, add the following below this CDDL HEADER, with the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * fields enclosed by brackets "[]" replaced with your own identifying
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * information: Portions Copyright [yyyy] [name of copyright owner]
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * CDDL HEADER END
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Use is subject to license terms.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#ifndef _HXGE_PFC_H
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define _HXGE_PFC_H
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#pragma ident "%Z%%M% %I% %E% SMI"
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#ifdef __cplusplus
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern "C" {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* 0 and 4095 are reserved */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define VLAN_ID_MIN 1
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define VLAN_ID_MAX 4094
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define VLAN_ID_IMPLICIT 0
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HXGE_MAC_DEFAULT_ADDR_SLOT 0
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HASH_BITS 8
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define NMCFILTER_BITS (1 << HASH_BITS)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HASH_REG_WIDTH 16
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define NMCFILTER_REGS (NMCFILTER_BITS / HASH_REG_WIDTH)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* Number of multicast filter regs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define MAC_MAX_HASH_ENTRY NMCFILTER_REGS
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define REG_PIO_WRITE64(handle, offset, value) \
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_WR64((handle), (offset), (value))
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define REG_PIO_READ64(handle, offset, val_p) \
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_REG_RD64((handle), (offset), (val_p))
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define TCAM_CTL_RWC_TCAM_WR 0x0
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define TCAM_CTL_RWC_TCAM_CMP 0x2
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define TCAM_CTL_RWC_RAM_WR 0x4
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define TCAM_CTL_RWC_RAM_RD 0x5
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define TCAM_CTL_RWC_RWC_STAT 0x1
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define TCAM_CTL_RWC_RWC_MATCH 0x1
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define WRITE_TCAM_REG_CTL(handle, ctl) \
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs REG_PIO_WRITE64(handle, PFC_TCAM_CTRL, ctl)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define READ_TCAM_REG_CTL(handle, val_p) \
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs REG_PIO_READ64(handle, PFC_TCAM_CTRL, val_p)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define WRITE_TCAM_REG_KEY0(handle, key) \
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs REG_PIO_WRITE64(handle, PFC_TCAM_KEY0, key)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define WRITE_TCAM_REG_KEY1(handle, key) \
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs REG_PIO_WRITE64(handle, PFC_TCAM_KEY1, key)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define WRITE_TCAM_REG_MASK0(handle, mask) \
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs REG_PIO_WRITE64(handle, PFC_TCAM_MASK0, mask)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define WRITE_TCAM_REG_MASK1(handle, mask) \
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs REG_PIO_WRITE64(handle, PFC_TCAM_MASK1, mask)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define READ_TCAM_REG_KEY0(handle, val_p) \
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs REG_PIO_READ64(handle, PFC_TCAM_KEY0, val_p)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define READ_TCAM_REG_KEY1(handle, val_p) \
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs REG_PIO_READ64(handle, PFC_TCAM_KEY1, val_p)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define READ_TCAM_REG_MASK0(handle, val_p) \
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs REG_PIO_READ64(handle, PFC_TCAM_MASK0, val_p)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define READ_TCAM_REG_MASK1(handle, val_p) \
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs REG_PIO_READ64(handle, PFC_TCAM_MASK1, val_p)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef union _hxge_tcam_res_t {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint64_t value;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs struct {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#if defined(_BIG_ENDIAN)
fe930412c257f961ae67039de3b164b83717976aqs uint32_t padding:32;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t padding_l:2;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t reserved:15;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t parity:1;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t hit_count:4;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t channel_d:2;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t channel_c:2;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t channel_b:2;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t channel_a:2;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t source_hash:1;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t discard:1;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#else
fe930412c257f961ae67039de3b164b83717976aqs uint32_t discard:1;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t source_hash:1;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t channel_a:2;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t channel_b:2;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t channel_c:2;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t channel_d:2;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t hit_count:4;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t parity:1;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t reserved:15;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t padding_l:2;
fe930412c257f961ae67039de3b164b83717976aqs uint32_t padding:32;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs } bits;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_tcam_res_t, *p_hxge_tcam_res_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct tcam_reg {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#if defined(_BIG_ENDIAN)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint64_t reg1; /* 99:64 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint64_t reg0; /* 63:0 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#else
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint64_t reg0; /* 63:0 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint64_t reg1; /* 99:64 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_tcam_reg_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct hxge_tcam_ipv4_S {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#if defined(_BIG_ENDIAN)
fe930412c257f961ae67039de3b164b83717976aqs uint32_t class_code:4; /* 99:96 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t class_code_l:1; /* 95:95 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t blade_id:4; /* 94:91 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t rsrvd2:2; /* 90:89 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t noport:1; /* 88 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t protocol:8; /* 87:80 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t l4_hdr:16; /* 79:64 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t l4_hdr_l:16; /* 63:48 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t rsrvd:16; /* 47:32 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t ip_daddr; /* 31:0 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#else
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t ip_daddr; /* 31:0 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t rsrvd:16; /* 47:32 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t l4_hdr_l:16; /* 63:48 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t l4_hdr:16; /* 79:64 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t protocol:8; /* 87:80 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t noport:1; /* 88 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t rsrvd2:2; /* 90:89 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t blade_id:4; /* 94:91 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t class_code_l:1; /* 95:95 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t class_code:4; /* 99:96 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_tcam_ipv4_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct hxge_tcam_ipv6_S {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#if defined(_BIG_ENDIAN)
fe930412c257f961ae67039de3b164b83717976aqs uint32_t class_code:4; /* 99:96 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t class_code_l:1; /* 95:95 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t blade_id:4; /* 94:91 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t rsrvd2:3; /* 90:88 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t protocol:8; /* 87:80 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t l4_hdr:16; /* 79:64 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t l4_hdr_l:16; /* 63:48 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t rsrvd:16; /* 47:32 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t rsrvd_l:32; /* 31:0 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#else
fe930412c257f961ae67039de3b164b83717976aqs uint32_t rsrvd_l:32; /* 31:0 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t rsrvd:16; /* 47:32 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t l4_hdr_l:16; /* 63:48 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t l4_hdr:16; /* 79:64 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t protocol:8; /* 87:80 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t rsrvd2:3; /* 90:88 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t blade_id:4; /* 94:91 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t class_code_l:1; /* 95:95 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t class_code:4; /* 99:96 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_tcam_ipv6_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct hxge_tcam_enet_S {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#if defined(_BIG_ENDIAN)
fe930412c257f961ae67039de3b164b83717976aqs uint8_t class_code:4; /* 99:96 */
fe930412c257f961ae67039de3b164b83717976aqs uint8_t class_code_l:1; /* 95:95 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint8_t blade_id:4; /* 94:91 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint8_t rsrvd:3; /* 90:88 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint8_t eframe[11]; /* 87:0 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#else
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint8_t eframe[11]; /* 87:0 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint8_t rsrvd:3; /* 90:88 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint8_t blade_id:4; /* 94:91 */
fe930412c257f961ae67039de3b164b83717976aqs uint8_t class_code_l:1; /* 95:95 */
fe930412c257f961ae67039de3b164b83717976aqs uint8_t class_code:4; /* 99:96 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_tcam_ether_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct hxge_tcam_spread_S {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#if defined(_BIG_ENDIAN)
fe930412c257f961ae67039de3b164b83717976aqs uint32_t unused:28; /* 127:100 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t class_code:4; /* 99:96 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t class_code_l:1; /* 95:95 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t blade_id:4; /* 94:91 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t wild1:27; /* 90:64 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t wild; /* 63:32 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t wild_l; /* 31:0 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#else
fe930412c257f961ae67039de3b164b83717976aqs uint32_t wild_l; /* 31:0 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t wild; /* 63:32 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t wild1:27; /* 90:64 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t blade_id:4; /* 94:91 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t class_code_l:1; /* 95:95 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t class_code:4; /* 99:96 */
fe930412c257f961ae67039de3b164b83717976aqs uint32_t unused:28; /* 127:100 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_tcam_spread_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct hxge_tcam_entry_S {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs union _hxge_tcam_entry {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_tcam_ipv4_t ipv4;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_tcam_ipv6_t ipv6;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_tcam_ether_t enet;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_tcam_reg_t regs;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_tcam_spread_t spread;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs } key, mask;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs hxge_tcam_res_t match_action;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint16_t ether_type;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_tcam_entry_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define key_reg0 key.regs.reg0
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define key_reg1 key.regs.reg1
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define mask_reg0 mask.regs.reg0
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define mask_reg1 mask.regs.reg1
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define key0 key.regs.reg0
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define key1 key.regs.reg1
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define mask0 mask.regs.reg0
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define mask1 mask.regs.reg1
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip4_class_key key.ipv4.class_code
fe930412c257f961ae67039de3b164b83717976aqs#define ip4_class_key_l key.ipv4.class_code_l
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip4_blade_id_key key.ipv4.blade_id
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip4_noport_key key.ipv4.noport
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip4_proto_key key.ipv4.protocol
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip4_l4_hdr_key key.ipv4.l4_hdr
fe930412c257f961ae67039de3b164b83717976aqs#define ip4_l4_hdr_key_l key.ipv4.l4_hdr_l
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip4_dest_key key.ipv4.ip_daddr
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip4_class_mask mask.ipv4.class_code
fe930412c257f961ae67039de3b164b83717976aqs#define ip4_class_mask_l mask.ipv4.class_code_l
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip4_blade_id_mask mask.ipv4.blade_id
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip4_noport_mask mask.ipv4.noport
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip4_proto_mask mask.ipv4.protocol
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip4_l4_hdr_mask mask.ipv4.l4_hdr
fe930412c257f961ae67039de3b164b83717976aqs#define ip4_l4_hdr_mask_l mask.ipv4.l4_hdr_l
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip4_dest_mask mask.ipv4.ip_daddr
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip6_class_key key.ipv6.class_code
fe930412c257f961ae67039de3b164b83717976aqs#define ip6_class_key_l key.ipv6.class_code_l
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip6_blade_id_key key.ipv6.blade_id
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip6_proto_key key.ipv6.protocol
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip6_l4_hdr_key key.ipv6.l4_hdr
fe930412c257f961ae67039de3b164b83717976aqs#define ip6_l4_hdr_key_l key.ipv6.l4_hdr_l
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip6_class_mask mask.ipv6.class_code
fe930412c257f961ae67039de3b164b83717976aqs#define ip6_class_mask_l mask.ipv6.class_code_l
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip6_blade_id_mask mask.ipv6.blade_id
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip6_proto_mask mask.ipv6.protocol
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ip6_l4_hdr_mask mask.ipv6.l4_hdr
fe930412c257f961ae67039de3b164b83717976aqs#define ip6_l4_hdr_mask_l mask.ipv6.l4_hdr_l
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ether_class_key key.enet.class_code
fe930412c257f961ae67039de3b164b83717976aqs#define ether_class_key_l key.enet.class_code_l
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ether_blade_id_key key.enet.blade_id
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ether_ethframe_key key.enet.eframe
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ether_class_mask mask.enet.class_code
fe930412c257f961ae67039de3b164b83717976aqs#define ether_class_mask_l mask.enet.class_code_l
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ether_blade_id_mask mask.enet.blade_id
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define ether_ethframe_mask mask.enet.eframe
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct _pfc_errlog {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t tcp_ctrl_drop; /* pfc_drop_log */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t l2_addr_drop;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t class_code_drop;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t tcam_drop;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t vlan_drop;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t vlan_par_err_log; /* pfc_vlan_par_err_log */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t tcam_par_err_log; /* pfc_tcam_par_err_log */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} pfc_errlog_t, *p_pfc_errlog_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct _pfc_stats {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t pkt_drop; /* pfc_int_status */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t tcam_parity_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t vlan_parity_err;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t bad_cs_count; /* pfc_bad_cs_counter */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t drop_count; /* pfc_drop_counter */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs pfc_errlog_t errlog;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hxge_pfc_stats_t, *p_hxge_pfc_stats_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef enum pfc_tcam_class {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_INVALID = 0,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_DUMMY = 1,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_ETYPE_1 = 2,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_ETYPE_2,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_RESERVED_4,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_RESERVED_5,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_RESERVED_6,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_RESERVED_7,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_TCP_IPV4,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_UDP_IPV4,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_AH_ESP_IPV4,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_SCTP_IPV4,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_TCP_IPV6,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_UDP_IPV6,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_AH_ESP_IPV6,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_SCTP_IPV6,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_ARP,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_RARP,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_DUMMY_12,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_DUMMY_13,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_DUMMY_14,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_DUMMY_15,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs TCAM_CLASS_MAX
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} tcam_class_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct _tcam_key_cfg_t {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs boolean_t lookup_enable;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs boolean_t discard;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} tcam_key_cfg_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct _hash_filter_t {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint_t hash_ref_cnt;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint16_t hash_filter_regs[NMCFILTER_REGS];
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uint32_t hash_bit_ref_cnt[NMCFILTER_BITS];
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} hash_filter_t, *p_hash_filter_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HXGE_ETHER_FLOWS (FLOW_ETHER_DHOST | FLOW_ETHER_SHOST | \
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs FLOW_ETHER_TYPE)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HXGE_VLAN_FLOWS (FLOW_ETHER_TPID | FLOW_ETHER_TCI)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HXGE_ETHERNET_FLOWS (HXGE_ETHER_FLOWS | HXGE_VLAN_FLOWS)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HXGE_PORT_FLOWS (FLOW_ULP_PORT_REMOTE | FLOW_ULP_PORT_LOCAL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HXGE_ADDR_FLOWS (FLOW_IP_REMOTE | FLOW_IP_LOCAL)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HXGE_IP_FLOWS (FLOW_IP_VERSION | FLOW_IP_PROTOCOL | \
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs HXGE_PORT_FLOWS | HXGE_ADDR_FLOWS)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define HXGE_SUPPORTED_FLOWS (HXGE_ETHERNET_FLOWS | HXGE_IP_FLOWS)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define CLS_CODE_MASK 0x1f
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define BLADE_ID_MASK 0xf
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define PID_MASK 0xff
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define IP_PORT_MASK 0xffff
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define IP_ADDR_SA_MASK 0xFFFFFFFF
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define IP_ADDR_DA_MASK IP_ADDR_SA_MASK
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define L4PT_SPI_MASK IP_ADDR_SA_MASK
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define BLADE_ID_OFFSET 127 /* Last entry in HCR_REG */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#ifdef __cplusplus
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif /* !_HXGE_PFC_H */