2018-08-27 12:52:31 +00:00
|
|
|
/* SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
* Copyright(c) 2018 Chelsio Communications.
|
|
|
|
* All rights reserved.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _CXGBE_MPSTCAM_H_
|
|
|
|
#define _CXGBE_MPSTCAM_H_
|
|
|
|
|
2018-12-19 16:28:23 +00:00
|
|
|
#include "base/common.h"
|
2018-08-27 12:52:31 +00:00
|
|
|
|
|
|
|
enum {
|
|
|
|
MPS_ENTRY_UNUSED, /* Keep this first so memset 0 renders
|
|
|
|
* the correct state. Other states can
|
|
|
|
* be added in future like MPS_ENTRY_BUSY
|
|
|
|
* to reduce contention while mboxing
|
|
|
|
* the request to f/w or to denote attributes
|
|
|
|
* for a specific entry
|
|
|
|
*/
|
|
|
|
MPS_ENTRY_USED,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct mps_tcam_entry {
|
|
|
|
u8 state;
|
|
|
|
u16 idx;
|
|
|
|
|
|
|
|
/* add data here which uniquely defines an entry */
|
2019-05-21 16:13:05 +00:00
|
|
|
u8 eth_addr[RTE_ETHER_ADDR_LEN];
|
|
|
|
u8 mask[RTE_ETHER_ADDR_LEN];
|
2018-08-27 12:52:31 +00:00
|
|
|
|
|
|
|
struct mpstcam_table *mpstcam; /* backptr */
|
|
|
|
rte_atomic32_t refcnt;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct mpstcam_table {
|
|
|
|
u16 size;
|
|
|
|
rte_rwlock_t lock;
|
|
|
|
u16 free_idx; /* next free index */
|
|
|
|
bool full; /* since free index can be present
|
|
|
|
* anywhere in the table, size and
|
|
|
|
* free_idx cannot alone determine
|
|
|
|
* if the table is full
|
|
|
|
*/
|
|
|
|
struct mps_tcam_entry entry[0];
|
|
|
|
};
|
|
|
|
|
|
|
|
struct mpstcam_table *t4_init_mpstcam(struct adapter *adap);
|
|
|
|
void t4_cleanup_mpstcam(struct adapter *adap);
|
|
|
|
int cxgbe_mpstcam_alloc(struct port_info *pi, const u8 *mac, const u8 *mask);
|
|
|
|
int cxgbe_mpstcam_remove(struct port_info *pi, u16 idx);
|
|
|
|
int cxgbe_mpstcam_modify(struct port_info *pi, int idx, const u8 *addr);
|
|
|
|
|
|
|
|
#endif /* _CXGBE_MPSTCAM_H_ */
|