drivers/net/dsa/mv88e6xxx/tcam.h

Source file repositories/reference/linux-study-clean/drivers/net/dsa/mv88e6xxx/tcam.h

File Facts

System
Linux kernel
Corpus path
drivers/net/dsa/mv88e6xxx/tcam.h
Extension
.h
Size
1305 bytes
Lines
42
Domain
Driver Families
Bucket
drivers/net
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

#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

Annotation

Implementation Notes