]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - include/fsl-mc/fsl_dpni.h
drivers: fsl-mc: Update flibs to mc-0.6.0.1
[karo-tx-uboot.git] / include / fsl-mc / fsl_dpni.h
index 67c087d469277af30d1ce22b55302edf840f5493..26b67f0fb046600d08fd77d691f958054545c24c 100644 (file)
@@ -7,7 +7,7 @@
 #define _FSL_DPNI_H
 
 /* DPNI Version */
-#define DPNI_VER_MAJOR                         4
+#define DPNI_VER_MAJOR                         5
 #define DPNI_VER_MINOR                         0
 
 /* Command IDs */
@@ -78,7 +78,7 @@ do { \
        MC_RSP_OP(cmd, 0, 32, 8,  uint8_t,  attr->max_tcs); \
        MC_RSP_OP(cmd, 0, 40, 8,  uint8_t,  attr->max_senders); \
        MC_RSP_OP(cmd, 0, 48, 8,  enum net_prot, attr->start_hdr); \
-       MC_RSP_OP(cmd, 1, 0,  64, uint64_t, attr->options); \
+       MC_RSP_OP(cmd, 1, 0,  32, uint32_t, attr->options); \
        MC_RSP_OP(cmd, 2, 0,  8,  uint8_t,  attr->max_unicast_filters); \
        MC_RSP_OP(cmd, 2, 8,  8,  uint8_t,  attr->max_multicast_filters);\
        MC_RSP_OP(cmd, 2, 16, 8,  uint8_t,  attr->max_vlan_filters); \
@@ -98,7 +98,9 @@ do { \
        MC_RSP_OP(cmd, 4, 16,   16, uint16_t, \
                                    attr->ipr_cfg.min_frag_size_ipv4); \
        MC_RSP_OP(cmd, 4, 32,   16, uint16_t, \
-                                   attr->ipr_cfg.min_frag_size_ipv6); \
+                                   attr->ipr_cfg.min_frag_size_ipv6);\
+       MC_RSP_OP(cmd, 4, 48,   8,  uint8_t, attr->max_policers); \
+       MC_RSP_OP(cmd, 4, 56,   8,  uint8_t, attr->max_congestion_ctrl); \
        MC_RSP_OP(cmd, 5, 0,    16, uint16_t, \
                                  attr->ipr_cfg.max_open_frames_ipv4); \
        MC_RSP_OP(cmd, 5, 16,   16, uint16_t, \
@@ -208,7 +210,7 @@ do { \
 /*                cmd, param, offset, width, type, arg_name */
 #define DPNI_CMD_SET_LINK_CFG(cmd, cfg) \
 do { \
-       MC_CMD_OP(cmd, 1, 0,  64, uint64_t, cfg->rate);\
+       MC_CMD_OP(cmd, 1, 0,  32, uint32_t, cfg->rate);\
        MC_CMD_OP(cmd, 2, 0,  64, uint64_t, cfg->options);\
 } while (0)
 
@@ -216,7 +218,7 @@ do { \
 #define DPNI_RSP_GET_LINK_STATE(cmd, state) \
 do { \
        MC_RSP_OP(cmd, 0, 32,  1, int,      state->up);\
-       MC_RSP_OP(cmd, 1, 0,  64, uint64_t, state->rate);\
+       MC_RSP_OP(cmd, 1, 0,  32, uint32_t, state->rate);\
        MC_RSP_OP(cmd, 2, 0,  64, uint64_t, state->options);\
 } while (0)
 
@@ -326,6 +328,13 @@ do { \
        MC_CMD_OP(cmd, 1, 0,  64, uint64_t, cfg->user_ctx); \
        MC_CMD_OP(cmd, 2, 16, 8,  uint8_t,  tc_id); \
        MC_CMD_OP(cmd, 2, 32,  32, uint32_t, cfg->options); \
+       MC_CMD_OP(cmd, 3, 0,  4,  enum dpni_flc_type, cfg->flc_cfg.flc_type); \
+       MC_CMD_OP(cmd, 3, 4,  4,  enum dpni_stash_size, \
+               cfg->flc_cfg.frame_data_size);\
+       MC_CMD_OP(cmd, 3, 8,  4,  enum dpni_stash_size, \
+               cfg->flc_cfg.flow_context_size);\
+       MC_CMD_OP(cmd, 3, 32, 32, uint32_t, cfg->flc_cfg.options);\
+       MC_CMD_OP(cmd, 4, 0,  64, uint64_t, cfg->flc_cfg.flow_context);\
 } while (0)
 
 /*                cmd, param, offset, width, type, arg_name */
@@ -343,6 +352,13 @@ do { \
        MC_RSP_OP(cmd, 0, 40, 2,  enum dpni_dest, attr->dest_cfg.dest_type); \
        MC_RSP_OP(cmd, 1, 0,  64, uint64_t, attr->user_ctx); \
        MC_RSP_OP(cmd, 2, 32, 32, uint32_t, attr->fqid); \
+       MC_RSP_OP(cmd, 3, 0,  4,  enum dpni_flc_type, attr->flc_cfg.flc_type); \
+       MC_RSP_OP(cmd, 3, 4,  4,  enum dpni_stash_size, \
+               attr->flc_cfg.frame_data_size);\
+       MC_RSP_OP(cmd, 3, 8,  4,  enum dpni_stash_size, \
+               attr->flc_cfg.flow_context_size);\
+       MC_RSP_OP(cmd, 3, 32, 32, uint32_t, attr->flc_cfg.options);\
+       MC_RSP_OP(cmd, 4, 0,  64, uint64_t, attr->flc_cfg.flow_context);\
 } while (0)
 
 enum net_prot {
@@ -399,7 +415,8 @@ enum net_prot {
        NET_PROT_DUMMY_LAST
 };
 
-/* Data Path Network Interface API
+/**
+ * Data Path Network Interface API
  * Contains initialization APIs and runtime control APIs for DPNI
  */
 
@@ -545,6 +562,8 @@ int dpni_reset(struct fsl_mc_io *mc_io, uint16_t token);
  * @max_qos_entries: if 'max_tcs > 1', declares the maximum entries in QoS table
  * @max_qos_key_size: Maximum key size for the QoS look-up
  * @max_dist_key_size: Maximum key size for the distribution look-up
+ * @max_policers: Maximum number of policers;
+ * @max_congestion_ctrl: Maximum number of congestion control groups (CGs);
  * @ipr_cfg: IP reassembly configuration
  */
 struct dpni_attr {
@@ -559,7 +578,7 @@ struct dpni_attr {
                uint16_t minor;
        } version;
        enum net_prot start_hdr;
-       uint64_t options;
+       uint32_t options;
        uint8_t max_senders;
        uint8_t max_tcs;
        uint8_t max_dist_per_tc[DPNI_MAX_TC];
@@ -569,8 +588,11 @@ struct dpni_attr {
        uint8_t max_qos_entries;
        uint8_t max_qos_key_size;
        uint8_t max_dist_key_size;
+       uint8_t max_policers;
+       uint8_t max_congestion_ctrl;
        struct dpni_ipr_cfg ipr_cfg;
 };
+
 /**
  * dpni_get_attributes() - Retrieve DPNI attributes.
  * @mc_io:     Pointer to MC portal's I/O objec
@@ -634,6 +656,7 @@ struct dpni_buffer_layout {
 int dpni_get_rx_buffer_layout(struct fsl_mc_io         *mc_io,
                              uint16_t                  token,
                              struct dpni_buffer_layout *layout);
+
 /**
  * dpni_set_rx_buffer_layout() - Set Rx buffer layout configuration.
  * @mc_io:     Pointer to MC portal's I/O object
@@ -661,19 +684,19 @@ int dpni_get_tx_buffer_layout(struct fsl_mc_io            *mc_io,
                              struct dpni_buffer_layout *layout);
 
 /**
- * @brief      Set Tx buffer layout configuration.
- *
- * @param[in]  mc_io   Pointer to MC portal's I/O object
- * @param[in]   token  Token of DPNI object
- * @param[in]  layout  Buffer layout configuration
+ * dpni_set_tx_buffer_layout() - Set Tx buffer layout configuration.
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @token:     Token of DPNI object
+ * @layout:    Buffer layout configuration
  *
- * @returns    '0' on Success; Error code otherwise.
+ * Return:     '0' on Success; Error code otherwise.
  *
  * @warning    Allowed only when DPNI is disabled
  */
 int dpni_set_tx_buffer_layout(struct fsl_mc_io                 *mc_io,
                              uint16_t                          token,
                              const struct dpni_buffer_layout   *layout);
+
 /**
  * dpni_get_tx_conf_buffer_layout() - Retrieve Tx confirmation buffer layout
  *                             attributes.
@@ -686,6 +709,7 @@ int dpni_set_tx_buffer_layout(struct fsl_mc_io                      *mc_io,
 int dpni_get_tx_conf_buffer_layout(struct fsl_mc_io            *mc_io,
                                   uint16_t                     token,
                                   struct dpni_buffer_layout    *layout);
+
 /**
  * dpni_set_tx_conf_buffer_layout() - Set Tx confirmation buffer layout
  *                                     configuration.
@@ -700,15 +724,16 @@ int dpni_get_tx_conf_buffer_layout(struct fsl_mc_io               *mc_io,
 int dpni_set_tx_conf_buffer_layout(struct fsl_mc_io               *mc_io,
                                   uint16_t                        token,
                                   const struct dpni_buffer_layout *layout);
+
 /**
- * dpni_get_spid() - Get the AIOP storage profile ID associated with the DPNI
+ * dpni_get_qdid() - Get the Queuing Destination ID (QDID) that should be used
+ *                     for enqueue operations
  * @mc_io:     Pointer to MC portal's I/O object
  * @token:     Token of DPNI object
- * @spid:      Returned aiop storage-profile ID
+ * @qdid:      Returned virtual QDID value that should be used as an argument
+ *                     in all enqueue operations
  *
  * Return:     '0' on Success; Error code otherwise.
- *
- * @warning    Only relevant for DPNI that belongs to AIOP container.
  */
 int dpni_get_qdid(struct fsl_mc_io *mc_io, uint16_t token, uint16_t *qdid);
 
@@ -781,13 +806,23 @@ int dpni_set_counter(struct fsl_mc_io     *mc_io,
                     uint16_t           token,
                     enum dpni_counter  counter,
                     uint64_t           value);
+
+/* Enable auto-negotiation */
+#define DPNI_LINK_OPT_AUTONEG          0x0000000000000001ULL
+/* Enable half-duplex mode */
+#define DPNI_LINK_OPT_HALF_DUPLEX      0x0000000000000002ULL
+/* Enable pause frames */
+#define DPNI_LINK_OPT_PAUSE            0x0000000000000004ULL
+/* Enable a-symmetric pause frames */
+#define DPNI_LINK_OPT_ASYM_PAUSE       0x0000000000000008ULL
+
 /**
  * struct - Structure representing DPNI link configuration
  * @rate: Rate
  * @options: Mask of available options; use 'DPNI_LINK_OPT_<X>' values
  */
 struct dpni_link_cfg {
-       uint64_t rate;
+       uint32_t rate;
        uint64_t options;
 };
 
@@ -801,7 +836,7 @@ struct dpni_link_cfg {
  */
 int dpni_set_link_cfg(struct fsl_mc_io *mc_io,
                      uint16_t token,
-                     struct dpni_link_cfg *cfg);
+                     const struct dpni_link_cfg *cfg);
 
 /**
  * struct dpni_link_state - Structure representing DPNI link state
@@ -810,7 +845,7 @@ int dpni_set_link_cfg(struct fsl_mc_io *mc_io,
  * @up: Link state; '0' for down, '1' for up
  */
 struct dpni_link_state {
-       uint64_t rate;
+       uint32_t rate;
        uint64_t options;
        int up;
 };
@@ -838,6 +873,7 @@ int dpni_get_link_state(struct fsl_mc_io *mc_io,
 int dpni_set_primary_mac_addr(struct fsl_mc_io *mc_io,
                              uint16_t          token,
                              const uint8_t     mac_addr[6]);
+
 /**
  * dpni_get_primary_mac_addr() - Get the primary MAC address
  * @mc_io:     Pointer to MC portal's I/O object
@@ -849,6 +885,7 @@ int dpni_set_primary_mac_addr(struct fsl_mc_io      *mc_io,
 int dpni_get_primary_mac_addr(struct fsl_mc_io *mc_io,
                              uint16_t          token,
                              uint8_t           mac_addr[6]);
+
 /**
  * dpni_add_mac_addr() - Add MAC address filter
  * @mc_io:     Pointer to MC portal's I/O object
@@ -875,7 +912,7 @@ int dpni_remove_mac_addr(struct fsl_mc_io   *mc_io,
 
 /**
  * enum dpni_dest - DPNI destination types
- * DPNI_DEST_NONE: Unassigned destination; The queue is set in parked mode and
+ * @DPNI_DEST_NONE: Unassigned destination; The queue is set in parked mode and
  *             does not generate FQDAN notifications; user is expected to
  *             dequeue from the queue based on polling or other user-defined
  *             method
@@ -906,12 +943,69 @@ struct dpni_dest_cfg {
        uint8_t priority;
 };
 
+/**
+ * enum dpni_flc_type - DPNI FLC types
+ * @DPNI_FLC_USER_DEFINED: select the FLC to be used for user defined value
+ * @DPNI_FLC_STASH: select the FLC to be used for stash control
+ */
+enum dpni_flc_type {
+       DPNI_FLC_USER_DEFINED = 0,
+       DPNI_FLC_STASH = 1,
+};
+
+/**
+ * enum dpni_stash_size - DPNI FLC stashing size
+ * @DPNI_STASH_SIZE_0B: no stash
+ * @DPNI_STASH_SIZE_64B: stashes 64 bytes
+ * @DPNI_STASH_SIZE_128B: stashes 128 bytes
+ * @DPNI_STASH_SIZE_192B: stashes 192 bytes
+ */
+enum dpni_stash_size {
+       DPNI_STASH_SIZE_0B = 0,
+       DPNI_STASH_SIZE_64B = 1,
+       DPNI_STASH_SIZE_128B = 2,
+       DPNI_STASH_SIZE_192B = 3,
+};
+
+/* DPNI FLC stash options */
+
+/* stashes the whole annotation area (up to 192 bytes) */
+#define DPNI_FLC_STASH_FRAME_ANNOTATION        0x00000001
+
+/**
+ * struct dpni_flc_cfg - Structure representing DPNI FLC configuration
+ * @flc_type: FLC type
+ * @options: Mask of available options;
+ *     use 'DPNI_FLC_STASH_<X>' values
+ * @frame_data_size: Size of frame data to be stashed
+ * @flow_context_size: Size of flow context to be stashed
+ * @flow_context: 1. In case flc_type is 'DPNI_FLC_USER_DEFINED':
+ *                     this value will be provided in the frame descriptor
+ *                     (FD[FLC])
+ *               2. In case flc_type is 'DPNI_FLC_STASH':
+ *                     this value will be I/O virtual address of the
+ *                     flow-context;
+ *                     Must be cacheline-aligned and DMA-able memory
+ */
+struct dpni_flc_cfg {
+       enum dpni_flc_type flc_type;
+       uint32_t options;
+       enum dpni_stash_size frame_data_size;
+       enum dpni_stash_size flow_context_size;
+       uint64_t flow_context;
+};
+
 /* DPNI queue modification options */
 
 /* Select to modify the user's context associated with the queue */
 #define DPNI_QUEUE_OPT_USER_CTX                0x00000001
 /* Select to modify the queue's destination */
 #define DPNI_QUEUE_OPT_DEST            0x00000002
+/** Select to modify the flow-context parameters;
+ * not applicable for Tx-conf/Err queues as the FD comes from the user
+ */
+#define DPNI_QUEUE_OPT_FLC             0x00000004
+
 
 /**
  * struct dpni_queue_cfg - Structure representing queue configuration
@@ -922,11 +1016,17 @@ struct dpni_dest_cfg {
  *             is contained in 'options'
  * @dest_cfg: Queue destination parameters;
  *             valid only if 'DPNI_QUEUE_OPT_DEST' is contained in 'options'
+ * @flc_cfg: Flow context configuration; in case the TC's distribution
+ *             is either NONE or HASH the FLC's settings of flow#0 are used.
+ *             in the case of FS (flow-steering) the flow's FLC settings
+ *             are used.
+ *             valid only if 'DPNI_QUEUE_OPT_FLC' is contained in 'options'
  */
 struct dpni_queue_cfg {
        uint32_t options;
        uint64_t user_ctx;
        struct dpni_dest_cfg dest_cfg;
+       struct dpni_flc_cfg flc_cfg;
 };
 
 /**
@@ -934,11 +1034,13 @@ struct dpni_queue_cfg {
  * @user_ctx: User context value provided in the frame descriptor of each
  *     dequeued frame
  * @dest_cfg: Queue destination configuration
+ * @flc_cfg: Flow context configuration
  * @fqid: Virtual fqid value to be used for dequeue operations
  */
 struct dpni_queue_attr {
        uint64_t user_ctx;
        struct dpni_dest_cfg dest_cfg;
+       struct dpni_flc_cfg flc_cfg;
        uint32_t fqid;
 };