42 lines
1.3 KiB
C
42 lines
1.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/*
|
|
* Copyright (c) 2026 Luminex Network Intelligence
|
|
*/
|
|
#ifndef _MV88E6XXX_TCAM_H_
|
|
#define _MV88E6XXX_TCAM_H_
|
|
|
|
#define PAGE0_MATCH_SIZE 22
|
|
#define PAGE1_MATCH_SIZE 26
|
|
|
|
#define DPV_MODE_NOP 0x0
|
|
#define DPV_MODE_AND 0x1
|
|
#define DPV_MODE_OR 0x2
|
|
#define DPV_MODE_REPLACE 0x3
|
|
|
|
int mv88e6xxx_tcam_entry_add(struct mv88e6xxx_chip *chip,
|
|
struct mv88e6xxx_tcam_entry *entry);
|
|
int mv88e6xxx_tcam_entry_del(struct mv88e6xxx_chip *chip,
|
|
struct mv88e6xxx_tcam_entry *entry);
|
|
struct mv88e6xxx_tcam_entry *
|
|
mv88e6xxx_tcam_entry_find(struct mv88e6xxx_chip *chip, unsigned long cookie);
|
|
#define mv88e6xxx_tcam_match_set(key, _offset, data, mask) \
|
|
do { \
|
|
typeof(_offset) (offset) = (_offset); \
|
|
BUILD_BUG_ON((offset) + sizeof((data)) > TCAM_MATCH_SIZE); \
|
|
__mv88e6xxx_tcam_match_set(key, offset, sizeof(data), \
|
|
(u8 *)&(data), (u8 *)&(mask)); \
|
|
} while (0)
|
|
|
|
static inline void __mv88e6xxx_tcam_match_set(struct mv88e6xxx_tcam_key *key,
|
|
unsigned int offset, size_t size,
|
|
u8 *data, u8 *mask)
|
|
{
|
|
memcpy(&key->frame_data[offset], data, size);
|
|
memcpy(&key->frame_mask[offset], mask, size);
|
|
}
|
|
|
|
extern const struct mv88e6xxx_tcam_ops mv88e6390_tcam_ops;
|
|
extern const struct mv88e6xxx_tcam_ops mv88e6393_tcam_ops;
|
|
#endif
|