root/drivers/net/ethernet/ti/icssm/icssm_prueth_fdb_tbl.h
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright (C) 2019-2021 Texas Instruments Incorporated - https://www.ti.com */
#ifndef __NET_TI_PRUSS_FDB_TBL_H
#define __NET_TI_PRUSS_FDB_TBL_H

#include <linux/kernel.h>
#include <linux/debugfs.h>
#include "icssm_prueth.h"

/* 4 bytes */
struct fdb_index_tbl_entry {
        /* Bucket Table index of first Bucket with this MAC address */
        u16 bucket_idx;
        u16 bucket_entries; /* Number of entries in this bucket */
};

/* 4 * 256 = 1024 = 0x200 bytes */
struct fdb_index_array {
        struct fdb_index_tbl_entry index_tbl_entry[FDB_INDEX_TBL_MAX_ENTRIES];
};

/* 10 bytes */
struct fdb_mac_tbl_entry {
        u8  mac[ETH_ALEN];
        u16 age;
        u8  port; /* 0 based: 0=port1, 1=port2 */
        union {
                struct {
                        u8  is_static:1;
                        u8  active:1;
                };
                u8 flags;
        };
};

/* 10 * 256 = 2560 = 0xa00 bytes */
struct fdb_mac_tbl_array {
        struct fdb_mac_tbl_entry mac_tbl_entry[FDB_MAC_TBL_MAX_ENTRIES];
};

/* 1 byte */
struct fdb_stp_config {
        u8  state; /* per-port STP state (defined in FW header) */
};

/* 1 byte */
struct fdb_flood_config {
        u8 host_flood_enable:1;
        u8 port1_flood_enable:1;
        u8 port2_flood_enable:1;
};

/* 2 byte */
struct fdb_arbitration {
        u8  host_lock;
        u8  pru_locks;
};

struct fdb_tbl {
        /* fdb index table */
        struct fdb_index_array __iomem *index_a;
        /* fdb MAC table */
        struct fdb_mac_tbl_array __iomem *mac_tbl_a;
        /* port 1 stp config */
        struct fdb_stp_config __iomem *port1_stp_cfg;
        /* port 2 stp config */
        struct fdb_stp_config __iomem *port2_stp_cfg;
        /* per-port flood enable */
        struct fdb_flood_config __iomem *flood_enable_flags;
        /* fdb locking mechanism */
        struct fdb_arbitration __iomem *locks;
        /* total number of entries in hash table */
        u16 total_entries;
};

#endif