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