Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/net/ethernet/microchip/vcap/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 4 kB image not shown  

Quelle  vcap_api_private.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0+ */
/* Copyright (C) 2022 Microchip Technology Inc. and its subsidiaries.
 * Microchip VCAP API
 */


#ifndef __VCAP_API_PRIVATE__
#define __VCAP_API_PRIVATE__

#include <linux/types.h>

#include "vcap_api.h"
#include "vcap_api_client.h"

#define to_intrule(rule) container_of((rule), struct vcap_rule_internal, data)

enum vcap_rule_state {
 VCAP_RS_PERMANENT, /* the rule is always stored in HW */
 VCAP_RS_ENABLED, /* enabled in HW but can be disabled */
 VCAP_RS_DISABLED, /* disabled (stored in SW) and can be enabled */
};

/* Private VCAP API rule data */
struct vcap_rule_internal {
 struct vcap_rule data; /* provided by the client */
 struct list_head list; /* the vcap admin list of rules */
 struct vcap_admin *admin; /* vcap hw instance */
 struct net_device *ndev;  /* the interface that the rule applies to */
 struct vcap_control *vctrl; /* the client control */
 u32 sort_key;  /* defines the position in the VCAP */
 int keyset_sw;  /* subwords in a keyset */
 int actionset_sw;  /* subwords in an actionset */
 int keyset_sw_regs;  /* registers in a subword in an keyset */
 int actionset_sw_regs;  /* registers in a subword in an actionset */
 int size; /* the size of the rule: max(entry, action) */
 u32 addr; /* address in the VCAP at insertion */
 u32 counter_id; /* counter id (if a dedicated counter is available) */
 struct vcap_counter counter; /* last read counter value */
 enum vcap_rule_state state;  /* rule storage state */
};

/* Bit iterator for the VCAP cache streams */
struct vcap_stream_iter {
 u32 offset; /* bit offset from the stream start */
 u32 sw_width; /* subword width in bits */
 u32 regs_per_sw; /* registers per subword */
 u32 reg_idx; /* current register index */
 u32 reg_bitpos; /* bit offset in current register */
 const struct vcap_typegroup *tg; /* current typegroup */
};

/* Check that the control has a valid set of callbacks */
int vcap_api_check(struct vcap_control *ctrl);
/* Erase the VCAP cache area used or encoding and decoding */
void vcap_erase_cache(struct vcap_rule_internal *ri);

/* Iterator functionality */

void vcap_iter_init(struct vcap_stream_iter *itr, int sw_width,
      const struct vcap_typegroup *tg, u32 offset);
void vcap_iter_next(struct vcap_stream_iter *itr);
void vcap_iter_set(struct vcap_stream_iter *itr, int sw_width,
     const struct vcap_typegroup *tg, u32 offset);
void vcap_iter_update(struct vcap_stream_iter *itr);

/* Keyset and keyfield functionality */

/* Return the number of keyfields in the keyset */
int vcap_keyfield_count(struct vcap_control *vctrl,
   enum vcap_type vt, enum vcap_keyfield_set keyset);
/* Return the typegroup table for the matching keyset (using subword size) */
const struct vcap_typegroup *
vcap_keyfield_typegroup(struct vcap_control *vctrl,
   enum vcap_type vt, enum vcap_keyfield_set keyset);
/* Return the list of keyfields for the keyset */
const struct vcap_field *vcap_keyfields(struct vcap_control *vctrl,
     enum vcap_type vt,
     enum vcap_keyfield_set keyset);

/* Actionset and actionfield functionality */

/* Return the actionset information for the actionset */
const struct vcap_set *
vcap_actionfieldset(struct vcap_control *vctrl,
      enum vcap_type vt, enum vcap_actionfield_set actionset);
/* Return the number of actionfields in the actionset */
int vcap_actionfield_count(struct vcap_control *vctrl,
      enum vcap_type vt,
      enum vcap_actionfield_set actionset);
/* Return the typegroup table for the matching actionset (using subword size) */
const struct vcap_typegroup *
vcap_actionfield_typegroup(struct vcap_control *vctrl, enum vcap_type vt,
      enum vcap_actionfield_set actionset);
/* Return the list of actionfields for the actionset */
const struct vcap_field *
vcap_actionfields(struct vcap_control *vctrl,
    enum vcap_type vt, enum vcap_actionfield_set actionset);
/* Map actionset id to a string with the actionset name */
const char *vcap_actionset_name(struct vcap_control *vctrl,
    enum vcap_actionfield_set actionset);
/* Map key field id to a string with the key name */
const char *vcap_actionfield_name(struct vcap_control *vctrl,
      enum vcap_action_field action);

/* Read key data from a VCAP address and discover if there are any rule keysets
 * here
 */

int vcap_addr_keysets(struct vcap_control *vctrl, struct net_device *ndev,
        struct vcap_admin *admin, int addr,
        struct vcap_keyset_list *kslist);

/* Verify that the typegroup information, subword count, keyset and type id
 * are in sync and correct, return the list of matching keysets
 */

int vcap_find_keystream_keysets(struct vcap_control *vctrl, enum vcap_type vt,
    u32 *keystream, u32 *mskstream, bool mask,
    int sw_max, struct vcap_keyset_list *kslist);

/* Get the keysets that matches the rule key type/mask */
int vcap_rule_get_keysets(struct vcap_rule_internal *ri,
     struct vcap_keyset_list *matches);
/* Decode a rule from the VCAP cache and return a copy */
struct vcap_rule *vcap_decode_rule(struct vcap_rule_internal *elem);

#endif /* __VCAP_API_PRIVATE__ */

Messung V0.5
C=88 H=100 G=94

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.