1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 3 /* 4 * Copyright (c) 2026 Luminex Network Intelligence 5 */ 6 #ifndef _MV88E6XXX_TCAM_H_ 7 #define _MV88E6XXX_TCAM_H_ 8 9 #define PAGE0_MATCH_SIZE 22 10 #define PAGE1_MATCH_SIZE 26 11 12 #define DPV_MODE_NOP 0x0 13 #define DPV_MODE_AND 0x1 14 #define DPV_MODE_OR 0x2 15 #define DPV_MODE_REPLACE 0x3 16 17 int mv88e6xxx_tcam_entry_add(struct mv88e6xxx_chip *chip, 18 struct mv88e6xxx_tcam_entry *entry); 19 int mv88e6xxx_tcam_entry_del(struct mv88e6xxx_chip *chip, 20 struct mv88e6xxx_tcam_entry *entry); 21 struct mv88e6xxx_tcam_entry * 22 mv88e6xxx_tcam_entry_find(struct mv88e6xxx_chip *chip, unsigned long cookie); 23 #define mv88e6xxx_tcam_match_set(key, _offset, data, mask) \ 24 do { \ 25 typeof(_offset) (offset) = (_offset); \ 26 BUILD_BUG_ON((offset) + sizeof((data)) > TCAM_MATCH_SIZE); \ 27 __mv88e6xxx_tcam_match_set(key, offset, sizeof(data), \ 28 (u8 *)&(data), (u8 *)&(mask)); \ 29 } while (0) 30 31 static inline void __mv88e6xxx_tcam_match_set(struct mv88e6xxx_tcam_key *key, 32 unsigned int offset, size_t size, 33 u8 *data, u8 *mask) 34 { 35 memcpy(&key->frame_data[offset], data, size); 36 memcpy(&key->frame_mask[offset], mask, size); 37 } 38 39 extern const struct mv88e6xxx_tcam_ops mv88e6390_tcam_ops; 40 extern const struct mv88e6xxx_tcam_ops mv88e6393_tcam_ops; 41 #endif 42