ethdev: promote sibling iterators to stable
[dpdk.git] / drivers / net / dpaa2 / mc / fsl_dpdmux.h
index 2f167ee..f4f9598 100644 (file)
@@ -39,6 +39,12 @@ int dpdmux_close(struct fsl_mc_io *mc_io,
  */
 #define DPDMUX_OPT_CLS_MASK_SUPPORT            0x0000000000000020ULL
 
+/**
+ * Automatic max frame length - maximum frame length for dpdmux interface will
+ * be changed automatically by connected dpni objects.
+ */
+#define DPDMUX_OPT_AUTO_MAX_FRAME_LEN  0x0000000000000040ULL
+
 #define DPDMUX_IRQ_INDEX_IF    0x0000
 #define DPDMUX_IRQ_INDEX       0x0001
 
@@ -79,6 +85,8 @@ enum dpdmux_method {
  * @method: Defines the operation method for the DPDMUX address table
  * @manip: Required manipulation operation
  * @num_ifs: Number of interfaces (excluding the uplink interface)
+ * @default_if: Default interface number (different from uplink,
+       maximum value num_ifs)
  * @adv: Advanced parameters; default is all zeros;
  *     use this structure to change default settings
  * @adv.options: DPDMUX options - combination of 'DPDMUX_OPT_<X>' flags.
@@ -89,16 +97,20 @@ enum dpdmux_method {
  * @adv.max_vlan_ids: Maximum vlan ids allowed in the system -
  *     relevant only case of working in mac+vlan method.
  *     0 - indicates default 16 vlan ids.
+ * @adv.mem_size: Size of the memory used for internal buffers expressed as
+ * number of 256byte buffers.
  */
 struct dpdmux_cfg {
        enum dpdmux_method method;
        enum dpdmux_manip manip;
        uint16_t num_ifs;
+       uint16_t default_if;
        struct {
                uint64_t options;
                uint16_t max_dmat_entries;
                uint16_t max_mc_groups;
                uint16_t max_vlan_ids;
+               uint16_t mem_size;
        } adv;
 };
 
@@ -130,6 +142,29 @@ int dpdmux_reset(struct fsl_mc_io *mc_io,
                 uint32_t cmd_flags,
                 uint16_t token);
 
+/**
+ *Setting 1 DPDMUX_RESET will not reset default interface
+ */
+#define DPDMUX_SKIP_DEFAULT_INTERFACE  0x01
+/**
+ *Setting 1 DPDMUX_RESET will not reset unicast rules
+ */
+#define DPDMUX_SKIP_UNICAST_RULES      0x02
+/**
+ *Setting 1 DPDMUX_RESET will not reset multicast rules
+ */
+#define DPDMUX_SKIP_MULTICAST_RULES    0x04
+
+int dpdmux_set_resetable(struct fsl_mc_io *mc_io,
+                                 uint32_t cmd_flags,
+                                 uint16_t token,
+                                 uint8_t skip_reset_flags);
+
+int dpdmux_get_resetable(struct fsl_mc_io *mc_io,
+                                 uint32_t cmd_flags,
+                                 uint16_t token,
+                                 uint8_t *skip_reset_flags);
+
 /**
  * struct dpdmux_attr - Structure representing DPDMUX attributes
  * @id: DPDMUX object ID
@@ -138,6 +173,8 @@ int dpdmux_reset(struct fsl_mc_io *mc_io,
  * @manip: DPDMUX manipulation type
  * @num_ifs: Number of interfaces (excluding the uplink interface)
  * @mem_size: DPDMUX frame storage memory size
+ * @default_if: Default interface number (different from uplink,
+       maximum value num_ifs)
  */
 struct dpdmux_attr {
        int id;
@@ -146,6 +183,7 @@ struct dpdmux_attr {
        enum dpdmux_manip manip;
        uint16_t num_ifs;
        uint16_t mem_size;
+       uint16_t default_if;
 };
 
 int dpdmux_get_attributes(struct fsl_mc_io *mc_io,
@@ -171,6 +209,7 @@ int dpdmux_set_max_frame_length(struct fsl_mc_io *mc_io,
  * @DPDMUX_CNT_EGR_FRAME: Counts egress frames
  * @DPDMUX_CNT_EGR_BYTE: Counts egress bytes
  * @DPDMUX_CNT_EGR_FRAME_DISCARD: Counts discarded egress frames
+ * @DPDMUX_CNT_ING_NO_BUFFER_DISCARD: Counts ingress no buffer discard frames
  */
 enum dpdmux_counter_type {
        DPDMUX_CNT_ING_FRAME = 0x0,
@@ -183,7 +222,8 @@ enum dpdmux_counter_type {
        DPDMUX_CNT_ING_BCAST_BYTES = 0x7,
        DPDMUX_CNT_EGR_FRAME = 0x8,
        DPDMUX_CNT_EGR_BYTE = 0x9,
-       DPDMUX_CNT_EGR_FRAME_DISCARD = 0xa
+       DPDMUX_CNT_EGR_FRAME_DISCARD = 0xa,
+       DPDMUX_CNT_ING_NO_BUFFER_DISCARD = 0xb,
 };
 
 /**
@@ -415,4 +455,107 @@ int dpdmux_get_api_version(struct fsl_mc_io *mc_io,
                           uint16_t *major_ver,
                           uint16_t *minor_ver);
 
+/**
+ * Discard bit. This bit must be used together with other bits in
+ * DPDMUX_ERROR_ACTION_CONTINUE to disable discarding of frames containing
+ * errors
+ */
+#define DPDMUX_ERROR_DISC              0x80000000
+/**
+ * MACSEC is enabled
+ */
+#define DPDMUX_ERROR_MS                        0x40000000
+/**
+ * PTP event frame
+ */
+#define DPDMUX_ERROR_PTP                       0x08000000
+/**
+ * This is a multicast frame
+ */
+#define DPDMUX_ERROR_MC                        0x04000000
+/**
+ * This is a broadcast frame
+ */
+#define DPDMUX_ERROR_BC                        0x02000000
+/**
+ * Invalid Key composition or key size error
+ */
+#define DPDMUX_ERROR_KSE                       0x00040000
+/**
+ * Extract out of frame header
+ */
+#define DPDMUX_ERROR_EOFHE             0x00020000
+/**
+ * Maximum number of chained lookups is reached
+ */
+#define DPDMUX_ERROR_MNLE                      0x00010000
+/**
+ * Invalid table ID
+ */
+#define DPDMUX_ERROR_TIDE                      0x00008000
+/**
+ * Policer initialization entry error
+ */
+#define DPDMUX_ERROR_PIEE                      0x00004000
+/**
+ * Frame length error
+ */
+#define DPDMUX_ERROR_FLE                       0x00002000
+/**
+ * Frame physical error
+ */
+#define DPDMUX_ERROR_FPE                       0x00001000
+/**
+ * Cycle limit is exceeded and frame parsing is forced to terminate early
+ */
+#define DPDMUX_ERROR_PTE                       0x00000080
+/**
+ * Invalid softparse instruction is encountered
+ */
+#define DPDMUX_ERROR_ISP                       0x00000040
+/**
+ * Parsing header error
+ */
+#define DPDMUX_ERROR_PHE                       0x00000020
+/*
+ * Block limit is exceeded. Maximum data that can be read and parsed is 256
+ * bytes.
+ * Parser will set this bit if it needs more that this limit to parse.
+ */
+#define DPDMUX_ERROR_BLE                       0x00000010
+/**
+ * L3 checksum validation
+ */
+#define DPDMUX__ERROR_L3CV                     0x00000008
+/**
+ * L3 checksum error
+ */
+#define DPDMUX__ERROR_L3CE                     0x00000004
+/**
+ * L4 checksum validation
+ */
+#define DPDMUX__ERROR_L4CV                     0x00000002
+/**
+ * L4 checksum error
+ */
+#define DPDMUX__ERROR_L4CE                     0x00000001
+
+enum dpdmux_error_action {
+       DPDMUX_ERROR_ACTION_DISCARD = 0,
+       DPDMUX_ERROR_ACTION_CONTINUE = 1
+};
+
+/**
+ * Configure how dpdmux interface behaves on errors
+ * @errors - or'ed combination of DPDMUX_ERROR_*
+ * @action - set to DPDMUX_ERROR_ACTION_DISCARD or DPDMUX_ERROR_ACTION_CONTINUE
+ */
+struct dpdmux_error_cfg {
+       uint32_t errors;
+       enum dpdmux_error_action error_action;
+};
+
+int dpdmux_if_set_errors_behavior(struct fsl_mc_io *mc_io, uint32_t cmd_flags,
+               uint16_t token, uint16_t if_id, struct dpdmux_error_cfg *cfg);
+
 #endif /* __FSL_DPDMUX_H */