]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
drivers/fsl-mc: flib changes for mc 8.0.0
authorPrabhakar Kushwaha <prabhakar@freescale.com>
Tue, 7 Jul 2015 10:10:06 +0000 (15:40 +0530)
committerYork Sun <yorksun@freescale.com>
Mon, 3 Aug 2015 19:06:37 +0000 (12:06 -0700)
MC firware version 8.0.0 contains new command flags. This patch
contains modifications in FLIB files to support the new command flags.

Signed-off-by: Itai Katz <itai.katz@freescale.com>
Signed-off-by: Prabhakar Kushwaha <prabhakar@freescale.com>
Reviewed-by: York Sun <yorksun@freescale.com>
14 files changed:
drivers/net/fsl-mc/dpbp.c
drivers/net/fsl-mc/dpio/dpio.c
drivers/net/fsl-mc/dpmng.c
drivers/net/fsl-mc/dpni.c
drivers/net/fsl-mc/dprc.c
drivers/net/fsl-mc/mc.c
drivers/net/fsl-mc/mc_sys.c
drivers/net/ldpaa_eth/ldpaa_eth.c
include/fsl-mc/fsl_dpbp.h
include/fsl-mc/fsl_dpio.h
include/fsl-mc/fsl_dpmng.h
include/fsl-mc/fsl_dpni.h
include/fsl-mc/fsl_dprc.h
include/fsl-mc/fsl_mc_cmd.h

index 3853e58ef92ac7ef8a858a98d5d2a626c7e021db..1517a70083811d689bcdffc35a8880f496974150 100644 (file)
 #include <fsl-mc/fsl_mc_cmd.h>
 #include <fsl-mc/fsl_dpbp.h>
 
-int dpbp_open(struct fsl_mc_io *mc_io, int dpbp_id, uint16_t *token)
+int dpbp_open(struct fsl_mc_io *mc_io,
+             uint32_t cmd_flags,
+             int dpbp_id,
+             uint16_t *token)
 {
        struct mc_command cmd = { 0 };
        int err;
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPBP_CMDID_OPEN,
-                                         MC_CMD_PRI_LOW, 0);
+                                         cmd_flags,
+                                         0);
        DPBP_CMD_OPEN(cmd, dpbp_id);
 
        /* send command to mc*/
@@ -31,55 +35,66 @@ int dpbp_open(struct fsl_mc_io *mc_io, int dpbp_id, uint16_t *token)
        return err;
 }
 
-int dpbp_close(struct fsl_mc_io *mc_io, uint16_t token)
+int dpbp_close(struct fsl_mc_io *mc_io,
+              uint32_t cmd_flags,
+              uint16_t token)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
-       cmd.header = mc_encode_cmd_header(DPBP_CMDID_CLOSE, MC_CMD_PRI_HIGH,
+       cmd.header = mc_encode_cmd_header(DPBP_CMDID_CLOSE, cmd_flags,
                                          token);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
 
-int dpbp_enable(struct fsl_mc_io *mc_io, uint16_t token)
+int dpbp_enable(struct fsl_mc_io *mc_io,
+               uint32_t cmd_flags,
+               uint16_t token)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
-       cmd.header = mc_encode_cmd_header(DPBP_CMDID_ENABLE, MC_CMD_PRI_LOW,
+       cmd.header = mc_encode_cmd_header(DPBP_CMDID_ENABLE, cmd_flags,
                                          token);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
 
-int dpbp_disable(struct fsl_mc_io *mc_io, uint16_t token)
+int dpbp_disable(struct fsl_mc_io *mc_io,
+                uint32_t cmd_flags,
+                uint16_t token)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPBP_CMDID_DISABLE,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
 
-int dpbp_reset(struct fsl_mc_io *mc_io, uint16_t token)
+int dpbp_reset(struct fsl_mc_io *mc_io,
+              uint32_t cmd_flags,
+              uint16_t token)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPBP_CMDID_RESET,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
 
 int dpbp_get_attributes(struct fsl_mc_io *mc_io,
+                       uint32_t cmd_flags,
                        uint16_t token,
                        struct dpbp_attr *attr)
 {
@@ -88,7 +103,8 @@ int dpbp_get_attributes(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_ATTR,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        err = mc_send_command(mc_io, &cmd);
index b07eff7e3ca161a32751cc014e72bae7d54ddc3e..cd3fd50fdd9627addfe9dc521253b572d9362490 100644 (file)
@@ -8,14 +8,18 @@
 #include <fsl-mc/fsl_mc_cmd.h>
 #include <fsl-mc/fsl_dpio.h>
 
-int dpio_open(struct fsl_mc_io *mc_io, int dpio_id, uint16_t *token)
+int dpio_open(struct fsl_mc_io *mc_io,
+             uint32_t cmd_flags,
+             int dpio_id,
+             uint16_t *token)
 {
        struct mc_command cmd = { 0 };
        int err;
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPIO_CMDID_OPEN,
-                                         MC_CMD_PRI_LOW, 0);
+                                         cmd_flags,
+                                         0);
        DPIO_CMD_OPEN(cmd, dpio_id);
 
        /* send command to mc*/
@@ -29,56 +33,68 @@ int dpio_open(struct fsl_mc_io *mc_io, int dpio_id, uint16_t *token)
        return 0;
 }
 
-int dpio_close(struct fsl_mc_io *mc_io, uint16_t token)
+int dpio_close(struct fsl_mc_io *mc_io,
+              uint32_t cmd_flags,
+              uint16_t token)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPIO_CMDID_CLOSE,
-                                         MC_CMD_PRI_HIGH, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
 
-int dpio_enable(struct fsl_mc_io *mc_io, uint16_t token)
+int dpio_enable(struct fsl_mc_io *mc_io,
+               uint32_t cmd_flags,
+               uint16_t token)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPIO_CMDID_ENABLE,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
 
-int dpio_disable(struct fsl_mc_io *mc_io, uint16_t token)
+int dpio_disable(struct fsl_mc_io *mc_io,
+                uint32_t cmd_flags,
+                uint16_t token)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPIO_CMDID_DISABLE,
-                                         MC_CMD_PRI_LOW,
+                                         cmd_flags,
                                          token);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
 
-int dpio_reset(struct fsl_mc_io *mc_io, uint16_t token)
+int dpio_reset(struct fsl_mc_io *mc_io,
+              uint32_t cmd_flags,
+              uint16_t token)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPIO_CMDID_RESET,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
 
 int dpio_get_attributes(struct fsl_mc_io *mc_io,
+                       uint32_t cmd_flags,
                        uint16_t token,
                        struct dpio_attr *attr)
 {
@@ -87,7 +103,7 @@ int dpio_get_attributes(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPIO_CMDID_GET_ATTR,
-                                         MC_CMD_PRI_LOW,
+                                         cmd_flags,
                                          token);
 
        /* send command to mc*/
index 01ee1126a97e4308f30267af9936d2c710ed42de..d96e26b757c01ef85a8089a9eb4b14fb576adcb2 100644 (file)
@@ -7,14 +7,17 @@
 #include <fsl-mc/fsl_dpmng.h>
 #include "fsl_dpmng_cmd.h"
 
-int mc_get_version(struct fsl_mc_io *mc_io, struct mc_version *mc_ver_info)
+int mc_get_version(struct fsl_mc_io *mc_io,
+                  uint32_t cmd_flags,
+                  struct mc_version *mc_ver_info)
 {
        struct mc_command cmd = { 0 };
        int err;
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPMNG_CMDID_GET_VERSION,
-                                         MC_CMD_PRI_LOW, 0);
+                                         cmd_flags,
+                                         0);
 
        /* send command to mc*/
        err = mc_send_command(mc_io, &cmd);
index 7bc2504f8c3482ade14283f9b8419ecbf59cb4cf..9111f35b700a0525744e92b486275b5ee805e173 100644 (file)
@@ -8,14 +8,18 @@
 #include <fsl-mc/fsl_mc_cmd.h>
 #include <fsl-mc/fsl_dpni.h>
 
-int dpni_open(struct fsl_mc_io *mc_io, int dpni_id, uint16_t *token)
+int dpni_open(struct fsl_mc_io *mc_io,
+             uint32_t cmd_flags,
+             int dpni_id,
+             uint16_t *token)
 {
        struct mc_command cmd = { 0 };
        int err;
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_OPEN,
-                                         MC_CMD_PRI_LOW, 0);
+                                         cmd_flags,
+                                         0);
        DPNI_CMD_OPEN(cmd, dpni_id);
 
        /* send command to mc*/
@@ -29,19 +33,23 @@ int dpni_open(struct fsl_mc_io *mc_io, int dpni_id, uint16_t *token)
        return 0;
 }
 
-int dpni_close(struct fsl_mc_io *mc_io, uint16_t token)
+int dpni_close(struct fsl_mc_io *mc_io,
+              uint32_t cmd_flags,
+              uint16_t token)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_CLOSE,
-                                         MC_CMD_PRI_HIGH, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
 
 int dpni_set_pools(struct fsl_mc_io *mc_io,
+                  uint32_t cmd_flags,
                   uint16_t token,
                   const struct dpni_pools_cfg *cfg)
 {
@@ -49,7 +57,7 @@ int dpni_set_pools(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_POOLS,
-                                         MC_CMD_PRI_LOW,
+                                         cmd_flags,
                                          token);
        DPNI_CMD_SET_POOLS(cmd, cfg);
 
@@ -57,44 +65,53 @@ int dpni_set_pools(struct fsl_mc_io *mc_io,
        return mc_send_command(mc_io, &cmd);
 }
 
-int dpni_enable(struct fsl_mc_io *mc_io, uint16_t token)
+int dpni_enable(struct fsl_mc_io *mc_io,
+               uint32_t cmd_flags,
+               uint16_t token)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_ENABLE,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
 
-int dpni_disable(struct fsl_mc_io *mc_io, uint16_t token)
+int dpni_disable(struct fsl_mc_io *mc_io,
+                uint32_t cmd_flags,
+                uint16_t token)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_DISABLE,
-                                         MC_CMD_PRI_LOW,
+                                         cmd_flags,
                                          token);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
 
-int dpni_reset(struct fsl_mc_io *mc_io, uint16_t token)
+int dpni_reset(struct fsl_mc_io *mc_io,
+              uint32_t cmd_flags,
+              uint16_t token)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_RESET,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
 
 int dpni_get_attributes(struct fsl_mc_io *mc_io,
+                       uint32_t cmd_flags,
                        uint16_t token,
                        struct dpni_attr *attr)
 {
@@ -103,7 +120,7 @@ int dpni_get_attributes(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_ATTR,
-                                         MC_CMD_PRI_LOW,
+                                         cmd_flags,
                                          token);
 
        /* send command to mc*/
@@ -118,6 +135,7 @@ int dpni_get_attributes(struct fsl_mc_io *mc_io,
 }
 
 int dpni_get_rx_buffer_layout(struct fsl_mc_io *mc_io,
+                             uint32_t cmd_flags,
                              uint16_t token,
                              struct dpni_buffer_layout *layout)
 {
@@ -126,7 +144,8 @@ int dpni_get_rx_buffer_layout(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_RX_BUFFER_LAYOUT,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        err = mc_send_command(mc_io, &cmd);
@@ -140,6 +159,7 @@ int dpni_get_rx_buffer_layout(struct fsl_mc_io *mc_io,
 }
 
 int dpni_set_rx_buffer_layout(struct fsl_mc_io *mc_io,
+                             uint32_t cmd_flags,
                              uint16_t token,
                              const struct dpni_buffer_layout *layout)
 {
@@ -147,7 +167,8 @@ int dpni_set_rx_buffer_layout(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_RX_BUFFER_LAYOUT,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPNI_CMD_SET_RX_BUFFER_LAYOUT(cmd, layout);
 
        /* send command to mc*/
@@ -155,6 +176,7 @@ int dpni_set_rx_buffer_layout(struct fsl_mc_io *mc_io,
 }
 
 int dpni_get_tx_buffer_layout(struct fsl_mc_io *mc_io,
+                             uint32_t cmd_flags,
                              uint16_t token,
                              struct dpni_buffer_layout *layout)
 {
@@ -163,7 +185,8 @@ int dpni_get_tx_buffer_layout(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_TX_BUFFER_LAYOUT,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        err = mc_send_command(mc_io, &cmd);
@@ -177,6 +200,7 @@ int dpni_get_tx_buffer_layout(struct fsl_mc_io *mc_io,
 }
 
 int dpni_set_tx_buffer_layout(struct fsl_mc_io *mc_io,
+                             uint32_t cmd_flags,
                              uint16_t token,
                              const struct dpni_buffer_layout *layout)
 {
@@ -184,7 +208,8 @@ int dpni_set_tx_buffer_layout(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_TX_BUFFER_LAYOUT,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPNI_CMD_SET_TX_BUFFER_LAYOUT(cmd, layout);
 
        /* send command to mc*/
@@ -192,6 +217,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,
+                                  uint32_t cmd_flags,
                                   uint16_t token,
                                   struct dpni_buffer_layout *layout)
 {
@@ -200,7 +226,8 @@ int dpni_get_tx_conf_buffer_layout(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_TX_CONF_BUFFER_LAYOUT,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        err = mc_send_command(mc_io, &cmd);
@@ -214,6 +241,7 @@ 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,
+                                  uint32_t cmd_flags,
                                   uint16_t token,
                                   const struct dpni_buffer_layout *layout)
 {
@@ -221,21 +249,25 @@ int dpni_set_tx_conf_buffer_layout(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_TX_CONF_BUFFER_LAYOUT,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPNI_CMD_SET_TX_CONF_BUFFER_LAYOUT(cmd, layout);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
 
-int dpni_get_qdid(struct fsl_mc_io *mc_io, uint16_t token, uint16_t *qdid)
+int dpni_get_qdid(struct fsl_mc_io *mc_io,
+                 uint32_t cmd_flags,
+                 uint16_t token,
+                 uint16_t *qdid)
 {
        struct mc_command cmd = { 0 };
        int err;
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_QDID,
-                                         MC_CMD_PRI_LOW,
+                                         cmd_flags,
                                          token);
 
        /* send command to mc*/
@@ -250,6 +282,7 @@ int dpni_get_qdid(struct fsl_mc_io *mc_io, uint16_t token, uint16_t *qdid)
 }
 
 int dpni_get_tx_data_offset(struct fsl_mc_io *mc_io,
+                           uint32_t cmd_flags,
                            uint16_t token,
                            uint16_t *data_offset)
 {
@@ -258,7 +291,8 @@ int dpni_get_tx_data_offset(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_TX_DATA_OFFSET,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        err = mc_send_command(mc_io, &cmd);
@@ -272,6 +306,7 @@ int dpni_get_tx_data_offset(struct fsl_mc_io *mc_io,
 }
 
 int dpni_get_counter(struct fsl_mc_io *mc_io,
+                    uint32_t cmd_flags,
                     uint16_t token,
                     enum dpni_counter counter,
                     uint64_t *value)
@@ -281,7 +316,8 @@ int dpni_get_counter(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_COUNTER,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPNI_CMD_GET_COUNTER(cmd, counter);
 
        /* send command to mc*/
@@ -296,6 +332,7 @@ int dpni_get_counter(struct fsl_mc_io *mc_io,
 }
 
 int dpni_set_counter(struct fsl_mc_io *mc_io,
+                    uint32_t cmd_flags,
                     uint16_t token,
                     enum dpni_counter counter,
                     uint64_t value)
@@ -304,7 +341,8 @@ int dpni_set_counter(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_COUNTER,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPNI_CMD_SET_COUNTER(cmd, counter, value);
 
        /* send command to mc*/
@@ -312,14 +350,16 @@ int dpni_set_counter(struct fsl_mc_io *mc_io,
 }
 
 int dpni_set_link_cfg(struct fsl_mc_io *mc_io,
+                     uint32_t cmd_flags,
                      uint16_t token,
-                    const struct dpni_link_cfg *cfg)
+                     const struct dpni_link_cfg *cfg)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_LINK_CFG,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPNI_CMD_SET_LINK_CFG(cmd, cfg);
 
        /* send command to mc*/
@@ -327,6 +367,7 @@ int dpni_set_link_cfg(struct fsl_mc_io *mc_io,
 }
 
 int dpni_get_link_state(struct fsl_mc_io *mc_io,
+                       uint32_t cmd_flags,
                        uint16_t token,
                        struct dpni_link_state *state)
 {
@@ -335,7 +376,8 @@ int dpni_get_link_state(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_LINK_STATE,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        err = mc_send_command(mc_io, &cmd);
@@ -350,6 +392,7 @@ int dpni_get_link_state(struct fsl_mc_io *mc_io,
 
 
 int dpni_set_primary_mac_addr(struct fsl_mc_io *mc_io,
+                             uint32_t cmd_flags,
                              uint16_t token,
                              const uint8_t mac_addr[6])
 {
@@ -357,7 +400,8 @@ int dpni_set_primary_mac_addr(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_PRIM_MAC,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPNI_CMD_SET_PRIMARY_MAC_ADDR(cmd, mac_addr);
 
        /* send command to mc*/
@@ -365,6 +409,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,
+                             uint32_t cmd_flags,
                              uint16_t token,
                              uint8_t mac_addr[6])
 {
@@ -373,7 +418,8 @@ int dpni_get_primary_mac_addr(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_PRIM_MAC,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        err = mc_send_command(mc_io, &cmd);
@@ -387,6 +433,7 @@ int dpni_get_primary_mac_addr(struct fsl_mc_io *mc_io,
 }
 
 int dpni_add_mac_addr(struct fsl_mc_io *mc_io,
+                     uint32_t cmd_flags,
                      uint16_t token,
                      const uint8_t mac_addr[6])
 {
@@ -394,7 +441,8 @@ int dpni_add_mac_addr(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_ADD_MAC_ADDR,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPNI_CMD_ADD_MAC_ADDR(cmd, mac_addr);
 
        /* send command to mc*/
@@ -402,6 +450,7 @@ int dpni_add_mac_addr(struct fsl_mc_io *mc_io,
 }
 
 int dpni_remove_mac_addr(struct fsl_mc_io *mc_io,
+                        uint32_t cmd_flags,
                         uint16_t token,
                         const uint8_t mac_addr[6])
 {
@@ -409,7 +458,8 @@ int dpni_remove_mac_addr(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_REMOVE_MAC_ADDR,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPNI_CMD_REMOVE_MAC_ADDR(cmd, mac_addr);
 
        /* send command to mc*/
@@ -417,6 +467,7 @@ int dpni_remove_mac_addr(struct fsl_mc_io *mc_io,
 }
 
 int dpni_set_tx_flow(struct fsl_mc_io *mc_io,
+                    uint32_t cmd_flags,
                     uint16_t token,
                     uint16_t *flow_id,
                     const struct dpni_tx_flow_cfg *cfg)
@@ -426,7 +477,8 @@ int dpni_set_tx_flow(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_TX_FLOW,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPNI_CMD_SET_TX_FLOW(cmd, *flow_id, cfg);
 
        /* send command to mc*/
@@ -441,6 +493,7 @@ int dpni_set_tx_flow(struct fsl_mc_io *mc_io,
 }
 
 int dpni_get_tx_flow(struct fsl_mc_io *mc_io,
+                    uint32_t cmd_flags,
                     uint16_t token,
                     uint16_t flow_id,
                     struct dpni_tx_flow_attr *attr)
@@ -450,7 +503,8 @@ int dpni_get_tx_flow(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_TX_FLOW,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPNI_CMD_GET_TX_FLOW(cmd, flow_id);
 
        /* send command to mc*/
@@ -465,6 +519,7 @@ int dpni_get_tx_flow(struct fsl_mc_io *mc_io,
 }
 
 int dpni_set_rx_flow(struct fsl_mc_io *mc_io,
+                    uint32_t cmd_flags,
                     uint16_t token,
                     uint8_t tc_id,
                     uint16_t flow_id,
@@ -474,7 +529,8 @@ int dpni_set_rx_flow(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_RX_FLOW,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPNI_CMD_SET_RX_FLOW(cmd, tc_id, flow_id, cfg);
 
        /* send command to mc*/
@@ -482,6 +538,7 @@ int dpni_set_rx_flow(struct fsl_mc_io *mc_io,
 }
 
 int dpni_get_rx_flow(struct fsl_mc_io *mc_io,
+                    uint32_t cmd_flags,
                     uint16_t token,
                     uint8_t tc_id,
                     uint16_t flow_id,
@@ -491,7 +548,8 @@ int dpni_get_rx_flow(struct fsl_mc_io *mc_io,
        int err;
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_RX_FLOW,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPNI_CMD_GET_RX_FLOW(cmd, tc_id, flow_id);
 
        /* send command to mc*/
index d481200243cac2ae02c037b2b8e62a343dfb3b08..357aa4808b5a1843798716c593be29a99957cbb1 100644 (file)
 #include <fsl-mc/fsl_mc_cmd.h>
 #include <fsl-mc/fsl_dprc.h>
 
-int dprc_get_container_id(struct fsl_mc_io *mc_io, int *container_id)
+int dprc_get_container_id(struct fsl_mc_io *mc_io,
+                         uint32_t cmd_flags,
+                         int *container_id)
 {
        struct mc_command cmd = { 0 };
        int err;
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONT_ID,
-                                         MC_CMD_PRI_LOW, 0);
+                                         cmd_flags,
+                                         0);
 
        /* send command to mc*/
        err = mc_send_command(mc_io, &cmd);
@@ -31,13 +34,16 @@ int dprc_get_container_id(struct fsl_mc_io *mc_io, int *container_id)
        return 0;
 }
 
-int dprc_open(struct fsl_mc_io *mc_io, int container_id, uint16_t *token)
+int dprc_open(struct fsl_mc_io *mc_io,
+             uint32_t cmd_flags,
+             int container_id,
+             uint16_t *token)
 {
        struct mc_command cmd = { 0 };
        int err;
 
        /* prepare command */
-       cmd.header = mc_encode_cmd_header(DPRC_CMDID_OPEN, MC_CMD_PRI_LOW,
+       cmd.header = mc_encode_cmd_header(DPRC_CMDID_OPEN, cmd_flags,
                                          0);
        DPRC_CMD_OPEN(cmd, container_id);
 
@@ -52,12 +58,14 @@ int dprc_open(struct fsl_mc_io *mc_io, int container_id, uint16_t *token)
        return 0;
 }
 
-int dprc_close(struct fsl_mc_io *mc_io, uint16_t token)
+int dprc_close(struct fsl_mc_io *mc_io,
+              uint32_t cmd_flags,
+              uint16_t token)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
-       cmd.header = mc_encode_cmd_header(DPRC_CMDID_CLOSE, MC_CMD_PRI_HIGH,
+       cmd.header = mc_encode_cmd_header(DPRC_CMDID_CLOSE, cmd_flags,
                                          token);
 
        /* send command to mc*/
@@ -65,6 +73,7 @@ int dprc_close(struct fsl_mc_io *mc_io, uint16_t token)
 }
 
 int dprc_reset_container(struct fsl_mc_io *mc_io,
+                        uint32_t cmd_flags,
                         uint16_t token,
                         int child_container_id)
 {
@@ -72,7 +81,8 @@ int dprc_reset_container(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPRC_CMDID_RESET_CONT,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPRC_CMD_RESET_CONTAINER(cmd, child_container_id);
 
        /* send command to mc*/
@@ -80,6 +90,7 @@ int dprc_reset_container(struct fsl_mc_io *mc_io,
 }
 
 int dprc_get_attributes(struct fsl_mc_io *mc_io,
+                       uint32_t cmd_flags,
                        uint16_t token,
                        struct dprc_attributes *attr)
 {
@@ -88,7 +99,7 @@ int dprc_get_attributes(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_ATTR,
-                                         MC_CMD_PRI_LOW,
+                                         cmd_flags,
                                          token);
 
        /* send command to mc*/
@@ -102,14 +113,18 @@ int dprc_get_attributes(struct fsl_mc_io *mc_io,
        return 0;
 }
 
-int dprc_get_obj_count(struct fsl_mc_io *mc_io, uint16_t token, int *obj_count)
+int dprc_get_obj_count(struct fsl_mc_io *mc_io,
+                      uint32_t cmd_flags,
+                      uint16_t token,
+                      int *obj_count)
 {
        struct mc_command cmd = { 0 };
        int err;
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_COUNT,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
 
        /* send command to mc*/
        err = mc_send_command(mc_io, &cmd);
@@ -123,6 +138,7 @@ int dprc_get_obj_count(struct fsl_mc_io *mc_io, uint16_t token, int *obj_count)
 }
 
 int dprc_get_obj(struct fsl_mc_io *mc_io,
+                uint32_t cmd_flags,
                 uint16_t token,
                 int obj_index,
                 struct dprc_obj_desc *obj_desc)
@@ -132,7 +148,7 @@ int dprc_get_obj(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ,
-                                         MC_CMD_PRI_LOW,
+                                         cmd_flags,
                                          token);
        DPRC_CMD_GET_OBJ(cmd, obj_index);
 
@@ -148,6 +164,7 @@ int dprc_get_obj(struct fsl_mc_io *mc_io,
 }
 
 int dprc_get_res_count(struct fsl_mc_io *mc_io,
+                      uint32_t cmd_flags,
                       uint16_t token,
                       char *type,
                       int *res_count)
@@ -159,7 +176,8 @@ int dprc_get_res_count(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_COUNT,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPRC_CMD_GET_RES_COUNT(cmd, type);
 
        /* send command to mc*/
@@ -174,6 +192,7 @@ int dprc_get_res_count(struct fsl_mc_io *mc_io,
 }
 
 int dprc_get_res_ids(struct fsl_mc_io *mc_io,
+                    uint32_t cmd_flags,
                     uint16_t token,
                     char *type,
                     struct dprc_res_ids_range_desc *range_desc)
@@ -183,7 +202,8 @@ int dprc_get_res_ids(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_IDS,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPRC_CMD_GET_RES_IDS(cmd, range_desc, type);
 
        /* send command to mc*/
@@ -198,6 +218,7 @@ int dprc_get_res_ids(struct fsl_mc_io *mc_io,
 }
 
 int dprc_get_obj_region(struct fsl_mc_io *mc_io,
+                       uint32_t cmd_flags,
                        uint16_t token,
                        char *obj_type,
                        int obj_id,
@@ -209,7 +230,8 @@ int dprc_get_obj_region(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG,
-                                         MC_CMD_PRI_LOW, token);
+                                         cmd_flags,
+                                         token);
        DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index);
 
        /* send command to mc*/
@@ -224,23 +246,26 @@ int dprc_get_obj_region(struct fsl_mc_io *mc_io,
 }
 
 int dprc_connect(struct fsl_mc_io *mc_io,
+                uint32_t cmd_flags,
                 uint16_t token,
                 const struct dprc_endpoint *endpoint1,
-                const struct dprc_endpoint *endpoint2)
+                const struct dprc_endpoint *endpoint2,
+                const struct dprc_connection_cfg *cfg)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPRC_CMDID_CONNECT,
-                                         MC_CMD_PRI_LOW,
+                                         cmd_flags,
                                          token);
-       DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2);
+       DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
 }
 
 int dprc_disconnect(struct fsl_mc_io *mc_io,
+                   uint32_t cmd_flags,
                    uint16_t token,
                    const struct dprc_endpoint *endpoint)
 {
@@ -248,7 +273,7 @@ int dprc_disconnect(struct fsl_mc_io *mc_io,
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPRC_CMDID_DISCONNECT,
-                                         MC_CMD_PRI_LOW,
+                                         cmd_flags,
                                          token);
        DPRC_CMD_DISCONNECT(cmd, endpoint);
 
@@ -257,17 +282,18 @@ int dprc_disconnect(struct fsl_mc_io *mc_io,
 }
 
 int dprc_get_connection(struct fsl_mc_io *mc_io,
+                       uint32_t cmd_flags,
                        uint16_t token,
-                                       const struct dprc_endpoint *endpoint1,
-                                       struct dprc_endpoint *endpoint2,
-                                       int *state)
+                       const struct dprc_endpoint *endpoint1,
+                       struct dprc_endpoint *endpoint2,
+                       int *state)
 {
        struct mc_command cmd = { 0 };
        int err;
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONNECTION,
-                                         MC_CMD_PRI_LOW,
+                                         cmd_flags,
                                          token);
        DPRC_CMD_GET_CONNECTION(cmd, endpoint1);
 
index 62a68c27441ffcb2956aed40eb831869a923a6dd..ea987d79ddaaa777320de7539ef68a471e0e7984 100644 (file)
@@ -547,7 +547,7 @@ int mc_init(void)
        debug("Checking access to MC portal of root DPRC container (portal_id %d, portal physical addr %p)\n",
              portal_id, dflt_mc_io->mmio_regs);
 
-       error = mc_get_version(dflt_mc_io, &mc_ver_info);
+       error = mc_get_version(dflt_mc_io, MC_CMD_NO_FLAGS, &mc_ver_info);
        if (error != 0) {
                printf("fsl-mc: ERROR: Firmware version check failed (error: %d)\n",
                       error);
@@ -634,19 +634,21 @@ int dpio_init(struct dprc_obj_desc obj_desc)
 
        dflt_dpio->dpio_id = obj_desc.id;
 
-       err = dpio_open(dflt_mc_io, obj_desc.id, &dflt_dpio_handle);
+       err = dpio_open(dflt_mc_io, MC_CMD_NO_FLAGS, obj_desc.id,
+                       &dflt_dpio_handle);
        if (err) {
                printf("dpio_open() failed\n");
                goto err_open;
        }
 
-       err = dpio_get_attributes(dflt_mc_io, dflt_dpio_handle, &attr);
+       err = dpio_get_attributes(dflt_mc_io, MC_CMD_NO_FLAGS,
+                                 dflt_dpio_handle, &attr);
        if (err) {
                printf("dpio_get_attributes() failed %d\n", err);
                goto err_get_attr;
        }
 
-       err = dpio_enable(dflt_mc_io, dflt_dpio_handle);
+       err = dpio_enable(dflt_mc_io, MC_CMD_NO_FLAGS, dflt_dpio_handle);
        if (err) {
                printf("dpio_enable() failed %d\n", err);
                goto err_get_enable;
@@ -671,9 +673,9 @@ int dpio_init(struct dprc_obj_desc obj_desc)
 
 err_get_swp_init:
 err_get_enable:
-       dpio_disable(dflt_mc_io, dflt_dpio_handle);
+       dpio_disable(dflt_mc_io, MC_CMD_NO_FLAGS, dflt_dpio_handle);
 err_get_attr:
-       dpio_close(dflt_mc_io, dflt_dpio_handle);
+       dpio_close(dflt_mc_io, MC_CMD_NO_FLAGS, dflt_dpio_handle);
 err_open:
        free(dflt_dpio);
        return err;
@@ -710,8 +712,9 @@ int dprc_init_container_obj(struct dprc_obj_desc obj_desc, uint16_t dprc_handle)
        } else if (!strcmp(obj_desc.type, "dpni")) {
                strcpy(dpni_endpoint.type, obj_desc.type);
                dpni_endpoint.id = obj_desc.id;
-               error = dprc_get_connection(dflt_mc_io, dprc_handle,
-                                    &dpni_endpoint, &dpmac_endpoint, &state);
+               error = dprc_get_connection(dflt_mc_io, MC_CMD_NO_FLAGS,
+                                           dprc_handle, &dpni_endpoint,
+                                           &dpmac_endpoint, &state);
                if (!strcmp(dpmac_endpoint.type, "dpmac"))
                        error = ldpaa_eth_init(obj_desc);
                if (error < 0)
@@ -728,7 +731,7 @@ int dprc_scan_container_obj(uint16_t dprc_handle, char *obj_type, int i)
 
        memset((void *)&obj_desc, 0x00, sizeof(struct dprc_obj_desc));
 
-       error = dprc_get_obj(dflt_mc_io, dprc_handle,
+       error = dprc_get_obj(dflt_mc_io, MC_CMD_NO_FLAGS, dprc_handle,
                             i, &obj_desc);
        if (error < 0) {
                printf("dprc_get_obj(i=%d) failed: %d\n",
@@ -761,7 +764,8 @@ int fsl_mc_ldpaa_init(bd_t *bis)
        if (error < 0)
                goto error;
 
-       error = dprc_get_container_id(dflt_mc_io, &container_id);
+       error = dprc_get_container_id(dflt_mc_io, MC_CMD_NO_FLAGS,
+                                     &container_id);
        if (error < 0) {
                printf("dprc_get_container_id() failed: %d\n", error);
                goto error;
@@ -769,7 +773,8 @@ int fsl_mc_ldpaa_init(bd_t *bis)
 
        debug("fsl-mc: Container id=0x%x\n", container_id);
 
-       error = dprc_open(dflt_mc_io, container_id, &dflt_dprc_handle);
+       error = dprc_open(dflt_mc_io, MC_CMD_NO_FLAGS, container_id,
+                         &dflt_dprc_handle);
        if (error < 0) {
                printf("dprc_open() failed: %d\n", error);
                goto error;
@@ -777,7 +782,7 @@ int fsl_mc_ldpaa_init(bd_t *bis)
        dprc_opened = true;
 
        error = dprc_get_obj_count(dflt_mc_io,
-                                  dflt_dprc_handle,
+                                  MC_CMD_NO_FLAGS, dflt_dprc_handle,
                                   &num_child_objects);
        if (error < 0) {
                printf("dprc_get_obj_count() failed: %d\n", error);
@@ -804,7 +809,7 @@ int fsl_mc_ldpaa_init(bd_t *bis)
        }
 error:
        if (dprc_opened)
-               dprc_close(dflt_mc_io, dflt_dprc_handle);
+               dprc_close(dflt_mc_io, MC_CMD_NO_FLAGS, dflt_dprc_handle);
 
        return error;
 }
@@ -814,17 +819,20 @@ void fsl_mc_ldpaa_exit(bd_t *bis)
        int err;
 
        if (get_mc_boot_status() == 0) {
-               err = dpio_disable(dflt_mc_io, dflt_dpio_handle);
+               err = dpio_disable(dflt_mc_io, MC_CMD_NO_FLAGS,
+                                  dflt_dpio_handle);
                if (err < 0) {
                        printf("dpio_disable() failed: %d\n", err);
                        return;
                }
-               err = dpio_reset(dflt_mc_io, dflt_dpio_handle);
+               err = dpio_reset(dflt_mc_io, MC_CMD_NO_FLAGS,
+                                dflt_dpio_handle);
                if (err < 0) {
                        printf("dpio_reset() failed: %d\n", err);
                        return;
                }
-               err = dpio_close(dflt_mc_io, dflt_dpio_handle);
+               err = dpio_close(dflt_mc_io, MC_CMD_NO_FLAGS,
+                                dflt_dpio_handle);
                if (err < 0) {
                        printf("dpio_close() failed: %d\n", err);
                        return;
index 3fc1f98341568595c4616670091e40a028dec562..2136670370049546cd6c2f2f1e507ff8b3a52fa1 100644 (file)
@@ -14,7 +14,7 @@
 #include <asm/io.h>
 
 #define MC_CMD_HDR_READ_CMDID(_hdr) \
-       ((uint16_t)u64_dec((_hdr), MC_CMD_HDR_CMDID_O, MC_CMD_HDR_CMDID_S))
+       ((uint16_t)mc_dec((_hdr), MC_CMD_HDR_CMDID_O, MC_CMD_HDR_CMDID_S))
 
 /**
  * mc_send_command - Send MC command and wait for response
index 50ca6e45fb16d66b894433d8e8deddec6a349516..4de7586408e48171ab030e5bad711c3d15c93a90 100644 (file)
@@ -240,8 +240,8 @@ static int ldpaa_eth_open(struct eth_device *net_dev, bd_t *bd)
        if (err)
                goto err_bind;
 
-       err = dpni_get_primary_mac_addr(dflt_mc_io, priv->dpni_handle,
-                                       mac_addr);
+       err = dpni_get_primary_mac_addr(dflt_mc_io, MC_CMD_NO_FLAGS,
+                                       priv->dpni_handle, mac_addr);
        if (err) {
                printf("dpni_get_primary_mac_addr() failed\n");
                return err;
@@ -268,15 +268,15 @@ static int ldpaa_eth_open(struct eth_device *net_dev, bd_t *bd)
        priv->phydev->duplex = DUPLEX_FULL;
 #endif
 
-       err = dpni_enable(dflt_mc_io, priv->dpni_handle);
+       err = dpni_enable(dflt_mc_io, MC_CMD_NO_FLAGS, priv->dpni_handle);
        if (err < 0) {
                printf("dpni_enable() failed\n");
                return err;
        }
 
        /* TODO: support multiple Rx flows */
-       err = dpni_get_rx_flow(dflt_mc_io, priv->dpni_handle, 0, 0,
-                              &rx_queue_attr);
+       err = dpni_get_rx_flow(dflt_mc_io, MC_CMD_NO_FLAGS, priv->dpni_handle,
+                              0, 0, &rx_queue_attr);
        if (err) {
                printf("dpni_get_rx_flow() failed\n");
                goto err_rx_flow;
@@ -284,7 +284,8 @@ static int ldpaa_eth_open(struct eth_device *net_dev, bd_t *bd)
 
        priv->rx_dflt_fqid = rx_queue_attr.fqid;
 
-       err = dpni_get_qdid(dflt_mc_io, priv->dpni_handle, &priv->tx_qdid);
+       err = dpni_get_qdid(dflt_mc_io, MC_CMD_NO_FLAGS, priv->dpni_handle,
+                           &priv->tx_qdid);
        if (err) {
                printf("dpni_get_qdid() failed\n");
                goto err_qdid;
@@ -297,11 +298,11 @@ static int ldpaa_eth_open(struct eth_device *net_dev, bd_t *bd)
 
 err_qdid:
 err_rx_flow:
-       dpni_disable(dflt_mc_io, priv->dpni_handle);
+       dpni_disable(dflt_mc_io, MC_CMD_NO_FLAGS, priv->dpni_handle);
 err_bind:
        ldpaa_dpbp_free();
 err_dpbp_setup:
-       dpni_close(dflt_mc_io, priv->dpni_handle);
+       dpni_close(dflt_mc_io, MC_CMD_NO_FLAGS, priv->dpni_handle);
 err_dpni_setup:
        return err;
 }
@@ -315,7 +316,7 @@ static void ldpaa_eth_stop(struct eth_device *net_dev)
            (net_dev->state == ETH_STATE_INIT))
                return;
        /* Stop Tx and Rx traffic */
-       err = dpni_disable(dflt_mc_io, priv->dpni_handle);
+       err = dpni_disable(dflt_mc_io, MC_CMD_NO_FLAGS, priv->dpni_handle);
        if (err < 0)
                printf("dpni_disable() failed\n");
 
@@ -324,8 +325,8 @@ static void ldpaa_eth_stop(struct eth_device *net_dev)
 #endif
 
        ldpaa_dpbp_free();
-       dpni_reset(dflt_mc_io, priv->dpni_handle);
-       dpni_close(dflt_mc_io, priv->dpni_handle);
+       dpni_reset(dflt_mc_io, MC_CMD_NO_FLAGS, priv->dpni_handle);
+       dpni_close(dflt_mc_io, MC_CMD_NO_FLAGS, priv->dpni_handle);
 }
 
 static void ldpaa_dpbp_drain_cnt(int count)
@@ -419,20 +420,21 @@ static int ldpaa_dpbp_setup(void)
 {
        int err;
 
-       err = dpbp_open(dflt_mc_io, dflt_dpbp->dpbp_attr.id,
+       err = dpbp_open(dflt_mc_io, MC_CMD_NO_FLAGS, dflt_dpbp->dpbp_attr.id,
                        &dflt_dpbp->dpbp_handle);
        if (err) {
                printf("dpbp_open() failed\n");
                goto err_open;
        }
 
-       err = dpbp_enable(dflt_mc_io, dflt_dpbp->dpbp_handle);
+       err = dpbp_enable(dflt_mc_io, MC_CMD_NO_FLAGS, dflt_dpbp->dpbp_handle);
        if (err) {
                printf("dpbp_enable() failed\n");
                goto err_enable;
        }
 
-       err = dpbp_get_attributes(dflt_mc_io, dflt_dpbp->dpbp_handle,
+       err = dpbp_get_attributes(dflt_mc_io, MC_CMD_NO_FLAGS,
+                                 dflt_dpbp->dpbp_handle,
                                  &dflt_dpbp->dpbp_attr);
        if (err) {
                printf("dpbp_get_attributes() failed\n");
@@ -450,9 +452,9 @@ static int ldpaa_dpbp_setup(void)
 
 err_seed:
 err_get_attr:
-       dpbp_disable(dflt_mc_io, dflt_dpbp->dpbp_handle);
+       dpbp_disable(dflt_mc_io, MC_CMD_NO_FLAGS, dflt_dpbp->dpbp_handle);
 err_enable:
-       dpbp_close(dflt_mc_io, dflt_dpbp->dpbp_handle);
+       dpbp_close(dflt_mc_io, MC_CMD_NO_FLAGS, dflt_dpbp->dpbp_handle);
 err_open:
        return err;
 }
@@ -460,9 +462,9 @@ err_open:
 static void ldpaa_dpbp_free(void)
 {
        ldpaa_dpbp_drain();
-       dpbp_disable(dflt_mc_io, dflt_dpbp->dpbp_handle);
-       dpbp_reset(dflt_mc_io, dflt_dpbp->dpbp_handle);
-       dpbp_close(dflt_mc_io, dflt_dpbp->dpbp_handle);
+       dpbp_disable(dflt_mc_io, MC_CMD_NO_FLAGS, dflt_dpbp->dpbp_handle);
+       dpbp_reset(dflt_mc_io, MC_CMD_NO_FLAGS, dflt_dpbp->dpbp_handle);
+       dpbp_close(dflt_mc_io, MC_CMD_NO_FLAGS, dflt_dpbp->dpbp_handle);
 }
 
 static int ldpaa_dpni_setup(struct ldpaa_eth_priv *priv)
@@ -470,14 +472,15 @@ static int ldpaa_dpni_setup(struct ldpaa_eth_priv *priv)
        int err;
 
        /* and get a handle for the DPNI this interface is associate with */
-       err = dpni_open(dflt_mc_io, priv->dpni_id, &priv->dpni_handle);
+       err = dpni_open(dflt_mc_io, MC_CMD_NO_FLAGS, priv->dpni_id,
+                       &priv->dpni_handle);
        if (err) {
                printf("dpni_open() failed\n");
                goto err_open;
        }
 
-       err = dpni_get_attributes(dflt_mc_io, priv->dpni_handle,
-                                 &priv->dpni_attrs);
+       err = dpni_get_attributes(dflt_mc_io, MC_CMD_NO_FLAGS,
+                                 priv->dpni_handle, &priv->dpni_attrs);
        if (err) {
                printf("dpni_get_attributes() failed (err=%d)\n", err);
                goto err_get_attr;
@@ -491,8 +494,8 @@ static int ldpaa_dpni_setup(struct ldpaa_eth_priv *priv)
        priv->buf_layout.pass_frame_status = true;
        priv->buf_layout.private_data_size = LDPAA_ETH_SWA_SIZE;
        /* ...rx, ... */
-       err = dpni_set_rx_buffer_layout(dflt_mc_io, priv->dpni_handle,
-                                       &priv->buf_layout);
+       err = dpni_set_rx_buffer_layout(dflt_mc_io, MC_CMD_NO_FLAGS,
+                                       priv->dpni_handle, &priv->buf_layout);
        if (err) {
                printf("dpni_set_rx_buffer_layout() failed");
                goto err_buf_layout;
@@ -500,8 +503,8 @@ static int ldpaa_dpni_setup(struct ldpaa_eth_priv *priv)
 
        /* ... tx, ... */
        priv->buf_layout.options &= ~DPNI_BUF_LAYOUT_OPT_PARSER_RESULT;
-       err = dpni_set_tx_buffer_layout(dflt_mc_io, priv->dpni_handle,
-                                       &priv->buf_layout);
+       err = dpni_set_tx_buffer_layout(dflt_mc_io, MC_CMD_NO_FLAGS,
+                                       priv->dpni_handle, &priv->buf_layout);
        if (err) {
                printf("dpni_set_tx_buffer_layout() failed");
                goto err_buf_layout;
@@ -509,7 +512,8 @@ static int ldpaa_dpni_setup(struct ldpaa_eth_priv *priv)
 
        /* ... tx-confirm. */
        priv->buf_layout.options &= ~DPNI_BUF_LAYOUT_OPT_PRIVATE_DATA_SIZE;
-       err = dpni_set_tx_conf_buffer_layout(dflt_mc_io, priv->dpni_handle,
+       err = dpni_set_tx_conf_buffer_layout(dflt_mc_io, MC_CMD_NO_FLAGS,
+                                            priv->dpni_handle,
                                             &priv->buf_layout);
        if (err) {
                printf("dpni_set_tx_conf_buffer_layout() failed");
@@ -519,8 +523,8 @@ static int ldpaa_dpni_setup(struct ldpaa_eth_priv *priv)
        /* Now that we've set our tx buffer layout, retrieve the minimum
         * required tx data offset.
         */
-       err = dpni_get_tx_data_offset(dflt_mc_io, priv->dpni_handle,
-                                     &priv->tx_data_offset);
+       err = dpni_get_tx_data_offset(dflt_mc_io, MC_CMD_NO_FLAGS,
+                                     priv->dpni_handle, &priv->tx_data_offset);
        if (err) {
                printf("dpni_get_tx_data_offset() failed\n");
                goto err_data_offset;
@@ -538,7 +542,7 @@ static int ldpaa_dpni_setup(struct ldpaa_eth_priv *priv)
 err_data_offset:
 err_buf_layout:
 err_get_attr:
-       dpni_close(dflt_mc_io, priv->dpni_handle);
+       dpni_close(dflt_mc_io, MC_CMD_NO_FLAGS, priv->dpni_handle);
 err_open:
        return err;
 }
@@ -552,7 +556,8 @@ static int ldpaa_dpni_bind(struct ldpaa_eth_priv *priv)
        pools_params.num_dpbp = 1;
        pools_params.pools[0].dpbp_id = (uint16_t)dflt_dpbp->dpbp_attr.id;
        pools_params.pools[0].buffer_size = LDPAA_ETH_RX_BUFFER_SIZE;
-       err = dpni_set_pools(dflt_mc_io, priv->dpni_handle, &pools_params);
+       err = dpni_set_pools(dflt_mc_io, MC_CMD_NO_FLAGS, priv->dpni_handle,
+                            &pools_params);
        if (err) {
                printf("dpni_set_pools() failed\n");
                return err;
@@ -564,7 +569,7 @@ static int ldpaa_dpni_bind(struct ldpaa_eth_priv *priv)
        dflt_tx_flow.options = DPNI_TX_FLOW_OPT_ONLY_TX_ERROR;
        dflt_tx_flow.conf_err_cfg.use_default_queue = 0;
        dflt_tx_flow.conf_err_cfg.errors_only = 1;
-       err = dpni_set_tx_flow(dflt_mc_io, priv->dpni_handle,
+       err = dpni_set_tx_flow(dflt_mc_io, MC_CMD_NO_FLAGS, priv->dpni_handle,
                               &priv->tx_flow_id, &dflt_tx_flow);
        if (err) {
                printf("dpni_set_tx_flow() failed\n");
index 7f0075c71f0bc60ed9dee5fc9b09f4fa4ffe9db5..3cdc94e4129d3eca598102143f6df81845160372 100644 (file)
@@ -15,7 +15,7 @@
 
 /* DPBP Version */
 #define DPBP_VER_MAJOR                         2
-#define DPBP_VER_MINOR                         0
+#define DPBP_VER_MINOR                         1
 
 /* Command IDs */
 #define DPBP_CMDID_CLOSE                               0x800
@@ -30,7 +30,7 @@
 #define DPBP_CMD_OPEN(cmd, dpbp_id) \
        MC_CMD_OP(cmd, 0, 0,  32, int,      dpbp_id)
 
-/*                cmd, param, offset, width, type,     arg_name */
+/*                cmd, param, offset, width, type, arg_name */
 #define DPBP_RSP_GET_ATTRIBUTES(cmd, attr) \
 do { \
        MC_RSP_OP(cmd, 0, 16, 16, uint16_t, attr->bpid); \
@@ -48,6 +48,7 @@ struct fsl_mc_io;
 /**
  * dpbp_open() - Open a control session for the specified object.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @dpbp_id:   DPBP unique ID
  * @token:     Returned token; use in subsequent API calls
  *
@@ -61,11 +62,15 @@ struct fsl_mc_io;
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpbp_open(struct fsl_mc_io *mc_io, int dpbp_id, uint16_t *token);
+int dpbp_open(struct fsl_mc_io *mc_io,
+             uint32_t          cmd_flags,
+             int               dpbp_id,
+             uint16_t          *token);
 
 /**
  * dpbp_close() - Close the control session of the object
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPBP object
  *
  * After this function is called, no further operations are
@@ -73,35 +78,60 @@ int dpbp_open(struct fsl_mc_io *mc_io, int dpbp_id, uint16_t *token);
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpbp_close(struct fsl_mc_io *mc_io, uint16_t token);
+int dpbp_close(struct fsl_mc_io        *mc_io,
+              uint32_t         cmd_flags,
+              uint16_t token);
 
 /**
  * dpbp_enable() - Enable the DPBP.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPBP object
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-
-int dpbp_enable(struct fsl_mc_io *mc_io, uint16_t token);
+int dpbp_enable(struct fsl_mc_io       *mc_io,
+               uint32_t                cmd_flags,
+               uint16_t                token);
 
 /**
  * dpbp_disable() - Disable the DPBP.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPBP object
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpbp_disable(struct fsl_mc_io *mc_io, uint16_t token);
+int dpbp_disable(struct fsl_mc_io      *mc_io,
+                uint32_t               cmd_flags,
+                uint16_t               token);
+
+/**
+ * dpbp_is_enabled() - Check if the DPBP is enabled.
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
+ * @token:     Token of DPBP object
+ * @en:                Returns '1' if object is enabled; '0' otherwise
+ *
+ * Return:     '0' on Success; Error code otherwise.
+ */
+int dpbp_is_enabled(struct fsl_mc_io   *mc_io,
+                   uint32_t            cmd_flags,
+                   uint16_t            token,
+                   int         *en);
 
 /**
  * dpbp_reset() - Reset the DPBP, returns the object to initial state.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPBP object
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpbp_reset(struct fsl_mc_io *mc_io, uint16_t token);
+int dpbp_reset(struct fsl_mc_io        *mc_io,
+              uint32_t         cmd_flags,
+              uint16_t token);
+
 
 /**
  * struct dpbp_attr - Structure representing DPBP attributes
@@ -124,17 +154,18 @@ struct dpbp_attr {
        uint16_t bpid;
 };
 
-
 /**
  * dpbp_get_attributes - Retrieve DPBP attributes.
  *
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPBP object
  * @attr:      Returned object's attributes
  *
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpbp_get_attributes(struct fsl_mc_io       *mc_io,
+                       uint32_t        cmd_flags,
                        uint16_t                token,
                        struct dpbp_attr        *attr);
 
index e779909ccce6eee523d5e7ce4009e75202184275..9e83a2eb433d0fadf94a511992b253ea44ddd772 100644 (file)
@@ -9,7 +9,7 @@
 
 /* DPIO Version */
 #define DPIO_VER_MAJOR                         3
-#define DPIO_VER_MINOR                         0
+#define DPIO_VER_MINOR                         1
 
 /* Command IDs */
 #define DPIO_CMDID_CLOSE                                       0x800
@@ -46,6 +46,7 @@ struct fsl_mc_io;
 /**
  * dpio_open() - Open a control session for the specified object
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @dpio_id:   DPIO unique ID
  * @token:     Returned token; use in subsequent API calls
  *
@@ -59,16 +60,22 @@ struct fsl_mc_io;
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpio_open(struct fsl_mc_io *mc_io, int dpio_id, uint16_t *token);
+int dpio_open(struct fsl_mc_io *mc_io,
+             uint32_t          cmd_flags,
+             int               dpio_id,
+             uint16_t          *token);
 
 /**
  * dpio_close() - Close the control session of the object
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPIO object
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpio_close(struct fsl_mc_io *mc_io, uint16_t token);
+int dpio_close(struct fsl_mc_io        *mc_io,
+              uint32_t         cmd_flags,
+              uint16_t         token);
 
 /**
  * enum dpio_channel_mode - DPIO notification channel mode
@@ -85,29 +92,38 @@ enum dpio_channel_mode {
 /**
  * dpio_enable() - Enable the DPIO, allow I/O portal operations.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPIO object
  *
  * Return:     '0' on Success; Error code otherwise
  */
-int dpio_enable(struct fsl_mc_io *mc_io, uint16_t token);
+int dpio_enable(struct fsl_mc_io       *mc_io,
+               uint32_t                cmd_flags,
+               uint16_t                token);
 
 /**
  * dpio_disable() - Disable the DPIO, stop any I/O portal operation.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPIO object
  *
  * Return:     '0' on Success; Error code otherwise
  */
-int dpio_disable(struct fsl_mc_io *mc_io, uint16_t token);
+int dpio_disable(struct fsl_mc_io      *mc_io,
+                uint32_t               cmd_flags,
+                uint16_t               token);
 
 /**
  * dpio_reset() - Reset the DPIO, returns the object to initial state.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPIO object
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpio_reset(struct fsl_mc_io *mc_io, uint16_t token);
+int dpio_reset(struct fsl_mc_io        *mc_io,
+              uint32_t                 cmd_flags,
+              uint16_t         token);
 
 /**
  * struct dpio_attr - Structure representing DPIO attributes
@@ -141,12 +157,14 @@ struct dpio_attr {
 /**
  * dpio_get_attributes() - Retrieve DPIO attributes
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPIO object
  * @attr:      Returned object's attributes
  *
  * Return:     '0' on Success; Error code otherwise
  */
 int dpio_get_attributes(struct fsl_mc_io       *mc_io,
+                       uint32_t                cmd_flags,
                        uint16_t                token,
                        struct dpio_attr        *attr);
 
index 6feb29225d8a93004dde8785a1a7837ed769938e..b0a87a9082b59cf122ec3978240e38df41a8ba02 100644 (file)
@@ -14,7 +14,7 @@ struct fsl_mc_io;
 /**
  * Management Complex firmware version information
  */
-#define MC_VER_MAJOR 7
+#define MC_VER_MAJOR 8
 #define MC_VER_MINOR 0
 
 /**
@@ -35,10 +35,13 @@ struct mc_version {
  * mc_get_version() - Retrieves the Management Complex firmware
  *                     version information
  * @mc_io:             Pointer to opaque I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @mc_ver_info:       Returned version information structure
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int mc_get_version(struct fsl_mc_io *mc_io, struct mc_version *mc_ver_info);
+int mc_get_version(struct fsl_mc_io    *mc_io,
+                  uint32_t             cmd_flags,
+                  struct mc_version    *mc_ver_info);
 
 #endif /* __FSL_DPMNG_H */
index 26b67f0fb046600d08fd77d691f958054545c24c..e9a4712c054aea0e5c31aa66c8c4877491d67882 100644 (file)
@@ -8,7 +8,7 @@
 
 /* DPNI Version */
 #define DPNI_VER_MAJOR                         5
-#define DPNI_VER_MINOR                         0
+#define DPNI_VER_MINOR                         1
 
 /* Command IDs */
 #define DPNI_CMDID_OPEN                                0x801
@@ -324,6 +324,7 @@ do { \
        MC_CMD_OP(cmd, 0, 0,  32, int,      cfg->dest_cfg.dest_id); \
        MC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  cfg->dest_cfg.priority);\
        MC_CMD_OP(cmd, 0, 40, 2,  enum dpni_dest, cfg->dest_cfg.dest_type);\
+       MC_CMD_OP(cmd, 0, 42, 1,  int,      cfg->order_preservation_en);\
        MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id); \
        MC_CMD_OP(cmd, 1, 0,  64, uint64_t, cfg->user_ctx); \
        MC_CMD_OP(cmd, 2, 16, 8,  uint8_t,  tc_id); \
@@ -350,6 +351,7 @@ do { \
        MC_RSP_OP(cmd, 0, 0,  32, int,      attr->dest_cfg.dest_id); \
        MC_RSP_OP(cmd, 0, 32, 8,  uint8_t,  attr->dest_cfg.priority);\
        MC_RSP_OP(cmd, 0, 40, 2,  enum dpni_dest, attr->dest_cfg.dest_type); \
+       MC_CMD_OP(cmd, 0, 42, 1,  int,      attr->order_preservation_en);\
        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); \
@@ -439,6 +441,7 @@ struct fsl_mc_io;
 /**
  * dpni_open() - Open a control session for the specified object
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @dpni_id:   DPNI unique ID
  * @token:     Returned token; use in subsequent API calls
  *
@@ -452,11 +455,15 @@ struct fsl_mc_io;
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpni_open(struct fsl_mc_io *mc_io, int dpni_id, uint16_t *token);
+int dpni_open(struct fsl_mc_io *mc_io,
+             uint32_t          cmd_flags,
+             int               dpni_id,
+             uint16_t          *token);
 
 /**
  * dpni_close() - Close the control session of the object
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  *
  * After this function is called, no further operations are
@@ -464,7 +471,9 @@ int dpni_open(struct fsl_mc_io *mc_io, int dpni_id, uint16_t *token);
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpni_close(struct fsl_mc_io *mc_io, uint16_t token);
+int dpni_close(struct fsl_mc_io        *mc_io,
+              uint32_t         cmd_flags,
+              uint16_t         token);
 
 /**
  * struct dpni_ipr_cfg - Structure representing IP reassembly configuration
@@ -494,16 +503,19 @@ struct dpni_pools_cfg {
         * struct pools - Buffer pools parameters
         * @dpbp_id: DPBP object ID
         * @buffer_size: Buffer size
+        * @backup_pool: Backup pool
         */
        struct {
-               int dpbp_id;
-               uint16_t buffer_size;
+               int             dpbp_id;
+               uint16_t        buffer_size;
+               int             backup_pool;
        } pools[DPNI_MAX_DPBP];
 };
 
 /**
  * dpni_set_pools() - Set buffer pools configuration
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @cfg:       Buffer pools configuration
  *
@@ -513,36 +525,46 @@ struct dpni_pools_cfg {
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpni_set_pools(struct fsl_mc_io            *mc_io,
+                  uint32_t                     cmd_flags,
                   uint16_t                     token,
                   const struct dpni_pools_cfg  *cfg);
 
 /**
  * dpni_enable() - Enable the DPNI, allow sending and receiving frames.
- * @mc_io:             Pointer to MC portal's I/O object
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:             Token of DPNI object
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpni_enable(struct fsl_mc_io *mc_io, uint16_t token);
+int dpni_enable(struct fsl_mc_io       *mc_io,
+               uint32_t                cmd_flags,
+               uint16_t                token);
 
 /**
  * dpni_disable() - Disable the DPNI, stop sending and receiving frames.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpni_disable(struct fsl_mc_io *mc_io, uint16_t token);
+int dpni_disable(struct fsl_mc_io      *mc_io,
+                uint32_t               cmd_flags,
+                uint16_t               token);
 
 
 /**
- * @dpni_reset() - Reset the DPNI, returns the object to initial state.
+ * dpni_reset() - Reset the DPNI, returns the object to initial state.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpni_reset(struct fsl_mc_io *mc_io, uint16_t token);
+int dpni_reset(struct fsl_mc_io        *mc_io,
+              uint32_t         cmd_flags,
+              uint16_t         token);
 
 /**
  * struct dpni_attr - Structure representing DPNI attributes
@@ -595,13 +617,15 @@ struct dpni_attr {
 
 /**
  * dpni_get_attributes() - Retrieve DPNI attributes.
- * @mc_io:     Pointer to MC portal's I/O objec
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @attr:      Returned object's attributes
  *
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpni_get_attributes(struct fsl_mc_io       *mc_io,
+                       uint32_t                cmd_flags,
                        uint16_t                token,
                        struct dpni_attr        *attr);
 
@@ -648,18 +672,21 @@ struct dpni_buffer_layout {
 /**
  * dpni_get_rx_buffer_layout() - Retrieve Rx buffer layout attributes.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @layout:    Returns buffer layout attributes
  *
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpni_get_rx_buffer_layout(struct fsl_mc_io         *mc_io,
+                             uint32_t                  cmd_flags,
                              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
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @layout:    Buffer layout configuration
  *
@@ -668,24 +695,28 @@ int dpni_get_rx_buffer_layout(struct fsl_mc_io            *mc_io,
  * @warning    Allowed only when DPNI is disabled
  */
 int dpni_set_rx_buffer_layout(struct fsl_mc_io                 *mc_io,
+                             uint32_t                          cmd_flags,
                              uint16_t                          token,
                              const struct dpni_buffer_layout   *layout);
 
 /**
  * dpni_get_tx_buffer_layout() - Retrieve Tx buffer layout attributes.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @layout:    Returns buffer layout attributes
  *
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpni_get_tx_buffer_layout(struct fsl_mc_io         *mc_io,
+                             uint32_t                  cmd_flags,
                              uint16_t                  token,
                              struct dpni_buffer_layout *layout);
 
 /**
  * dpni_set_tx_buffer_layout() - Set Tx buffer layout configuration.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @layout:    Buffer layout configuration
  *
@@ -694,6 +725,7 @@ int dpni_get_tx_buffer_layout(struct fsl_mc_io              *mc_io,
  * @warning    Allowed only when DPNI is disabled
  */
 int dpni_set_tx_buffer_layout(struct fsl_mc_io                 *mc_io,
+                             uint32_t                          cmd_flags,
                              uint16_t                          token,
                              const struct dpni_buffer_layout   *layout);
 
@@ -701,12 +733,14 @@ int dpni_set_tx_buffer_layout(struct fsl_mc_io                    *mc_io,
  * dpni_get_tx_conf_buffer_layout() - Retrieve Tx confirmation buffer layout
  *                             attributes.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @layout:    Returns buffer layout attributes
  *
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpni_get_tx_conf_buffer_layout(struct fsl_mc_io            *mc_io,
+                                  uint32_t                     cmd_flags,
                                   uint16_t                     token,
                                   struct dpni_buffer_layout    *layout);
 
@@ -714,6 +748,7 @@ int dpni_get_tx_conf_buffer_layout(struct fsl_mc_io         *mc_io,
  * dpni_set_tx_conf_buffer_layout() - Set Tx confirmation buffer layout
  *                                     configuration.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @layout:    Buffer layout configuration
  *
@@ -722,6 +757,7 @@ int dpni_get_tx_conf_buffer_layout(struct fsl_mc_io         *mc_io,
  * @warning    Allowed only when DPNI is disabled
  */
 int dpni_set_tx_conf_buffer_layout(struct fsl_mc_io               *mc_io,
+                                  uint32_t                        cmd_flags,
                                   uint16_t                        token,
                                   const struct dpni_buffer_layout *layout);
 
@@ -729,23 +765,29 @@ int dpni_set_tx_conf_buffer_layout(struct fsl_mc_io                  *mc_io,
  * 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
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @qdid:      Returned virtual QDID value that should be used as an argument
  *                     in all enqueue operations
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpni_get_qdid(struct fsl_mc_io *mc_io, uint16_t token, uint16_t *qdid);
+int dpni_get_qdid(struct fsl_mc_io     *mc_io,
+                 uint32_t              cmd_flags,
+                 uint16_t              token,
+                 uint16_t              *qdid);
 
 /**
  * dpni_get_tx_data_offset() - Get the Tx data offset (from start of buffer)
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @data_offset: Tx data offset (from start of buffer)
  *
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpni_get_tx_data_offset(struct fsl_mc_io   *mc_io,
+                           uint32_t            cmd_flags,
                            uint16_t            token,
                            uint16_t            *data_offset);
 
@@ -781,6 +823,7 @@ enum dpni_counter {
 /**
  * dpni_get_counter() - Read a specific DPNI counter
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @counter:   The requested counter
  * @value:     Returned counter's current value
@@ -788,6 +831,7 @@ enum dpni_counter {
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpni_get_counter(struct fsl_mc_io  *mc_io,
+                    uint32_t           cmd_flags,
                     uint16_t           token,
                     enum dpni_counter  counter,
                     uint64_t           *value);
@@ -795,6 +839,7 @@ int dpni_get_counter(struct fsl_mc_io       *mc_io,
 /**
  * dpni_set_counter() - Set (or clear) a specific DPNI counter
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @counter:   The requested counter
  * @value:     New counter value; typically pass '0' for resetting
@@ -803,6 +848,7 @@ int dpni_get_counter(struct fsl_mc_io       *mc_io,
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpni_set_counter(struct fsl_mc_io  *mc_io,
+                    uint32_t           cmd_flags,
                     uint16_t           token,
                     enum dpni_counter  counter,
                     uint64_t           value);
@@ -829,14 +875,16 @@ struct dpni_link_cfg {
 /**
  * dpni_set_link_cfg() - set the link configuration.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @cfg:       Link configuration
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpni_set_link_cfg(struct fsl_mc_io *mc_io,
-                     uint16_t token,
-                     const struct dpni_link_cfg *cfg);
+int dpni_set_link_cfg(struct fsl_mc_io                 *mc_io,
+                     uint32_t                          cmd_flags,
+                     uint16_t                          token,
+                     const struct dpni_link_cfg        *cfg);
 
 /**
  * struct dpni_link_state - Structure representing DPNI link state
@@ -853,60 +901,70 @@ struct dpni_link_state {
 /**
  * dpni_get_link_state() - Return the link state (either up or down)
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @state:     Returned link state;
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpni_get_link_state(struct fsl_mc_io *mc_io,
-                       uint16_t token,
-                       struct dpni_link_state *state);
+int dpni_get_link_state(struct fsl_mc_io       *mc_io,
+                       uint32_t                cmd_flags,
+                       uint16_t                token,
+                       struct dpni_link_state  *state);
 
 /**
  * dpni_set_primary_mac_addr() - Set the primary MAC address
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @mac_addr:  MAC address to set as primary address
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dpni_set_primary_mac_addr(struct fsl_mc_io *mc_io,
+int dpni_set_primary_mac_addr(struct fsl_mc_io *mc_io,
+                             uint32_t          cmd_flags,
                              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
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @mac_addr:  Returned MAC address
  *
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpni_get_primary_mac_addr(struct fsl_mc_io *mc_io,
+                             uint32_t          cmd_flags,
                              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
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @mac_addr:  MAC address to add
  *
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpni_add_mac_addr(struct fsl_mc_io *mc_io,
+                     uint32_t          cmd_flags,
                      uint16_t          token,
                      const uint8_t     mac_addr[6]);
 
 /**
  * dpni_remove_mac_addr() - Remove MAC address filter
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @mac_addr:  MAC address to remove
  *
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpni_remove_mac_addr(struct fsl_mc_io      *mc_io,
+                        uint32_t               cmd_flags,
                         uint16_t               token,
                         const uint8_t          mac_addr[6]);
 
@@ -1005,7 +1063,8 @@ struct dpni_flc_cfg {
  * not applicable for Tx-conf/Err queues as the FD comes from the user
  */
 #define DPNI_QUEUE_OPT_FLC             0x00000004
-
+/* Select to modify the queue's order preservation */
+#define DPNI_QUEUE_OPT_ORDER_PRESERVATION 0x00000008
 
 /**
  * struct dpni_queue_cfg - Structure representing queue configuration
@@ -1021,12 +1080,16 @@ struct dpni_flc_cfg {
  *             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'
+ * @order_preservation_en: enable/disable order preservation;
+ *             valid only if 'DPNI_QUEUE_OPT_ORDER_PRESERVATION' 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;
+       int order_preservation_en;
 };
 
 /**
@@ -1035,12 +1098,14 @@ struct dpni_queue_cfg {
  *     dequeued frame
  * @dest_cfg: Queue destination configuration
  * @flc_cfg: Flow context configuration
+ * @order_preservation_en: enable/disable order preservation
  * @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;
+       int order_preservation_en;
        uint32_t fqid;
 };
 
@@ -1100,6 +1165,7 @@ struct dpni_tx_flow_cfg {
 /**
  * dpni_set_tx_flow() - Set Tx flow configuration
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @flow_id:   Provides (or returns) the sender's flow ID;
  *                             for each new sender set (*flow_id) to
@@ -1111,6 +1177,7 @@ struct dpni_tx_flow_cfg {
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpni_set_tx_flow(struct fsl_mc_io                  *mc_io,
+                    uint32_t                           cmd_flags,
                     uint16_t                           token,
                     uint16_t                           *flow_id,
                     const struct dpni_tx_flow_cfg      *cfg);
@@ -1144,6 +1211,7 @@ struct dpni_tx_flow_attr {
 /**
  * dpni_get_tx_flow() - Get Tx flow attributes
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @flow_id:   The sender's flow ID, as returned by the
  *                     dpni_set_tx_flow() function
@@ -1152,6 +1220,7 @@ struct dpni_tx_flow_attr {
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpni_get_tx_flow(struct fsl_mc_io          *mc_io,
+                    uint32_t                   cmd_flags,
                     uint16_t                   token,
                     uint16_t                   flow_id,
                     struct dpni_tx_flow_attr   *attr);
@@ -1159,10 +1228,11 @@ int dpni_get_tx_flow(struct fsl_mc_io           *mc_io,
 /**
  * dpni_set_rx_flow() - Set Rx flow configuration
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @tc_id:     Traffic class selection (0-7);
  *                     use 'DPNI_ALL_TCS' to set all TCs and all flows
- * @flow_id    Rx flow id within the traffic class; use
+ * @flow_id:   Rx flow id within the traffic class; use
  *                     'DPNI_ALL_TC_FLOWS' to set all flows within
  *                     this tc_id; ignored if tc_id is set to
  *                     'DPNI_ALL_TCS';
@@ -1171,6 +1241,7 @@ int dpni_get_tx_flow(struct fsl_mc_io             *mc_io,
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpni_set_rx_flow(struct fsl_mc_io                  *mc_io,
+                    uint32_t                           cmd_flags,
                     uint16_t                           token,
                     uint8_t                            tc_id,
                     uint16_t                           flow_id,
@@ -1179,6 +1250,7 @@ int dpni_set_rx_flow(struct fsl_mc_io                     *mc_io,
 /**
  * dpni_get_rx_flow() -        Get Rx flow attributes
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPNI object
  * @tc_id:     Traffic class selection (0-7)
  * @flow_id:   Rx flow id within the traffic class
@@ -1187,6 +1259,7 @@ int dpni_set_rx_flow(struct fsl_mc_io                     *mc_io,
  * Return:     '0' on Success; Error code otherwise.
  */
 int dpni_get_rx_flow(struct fsl_mc_io          *mc_io,
+                    uint32_t                   cmd_flags,
                     uint16_t                   token,
                     uint8_t                    tc_id,
                     uint16_t                   flow_id,
index 26a4598b610cc44fa620d88ea24c425ee30ba225..b2cd2cb1608200ab23e9428a80f3add51fe191f6 100644 (file)
@@ -10,7 +10,7 @@
 #define _FSL_DPRC_H
 
 /* DPRC Version */
-#define DPRC_VER_MAJOR                         4
+#define DPRC_VER_MAJOR                         5
 #define DPRC_VER_MINOR                         0
 
 /* Command IDs */
@@ -191,14 +191,16 @@ do { \
 /*     param, offset, width,   type,           arg_name */
 #define DPRC_RSP_GET_OBJ_REGION(cmd, region_desc) \
 do { \
-       MC_RSP_OP(cmd, 1, 0,  64, uint64_t, region_desc->base_offset);\
+       MC_RSP_OP(cmd, 1, 0,  32, uint32_t, region_desc->base_offset);\
        MC_RSP_OP(cmd, 2, 0,  32, uint32_t, region_desc->size); \
+       MC_RSP_OP(cmd, 2, 32, 4,  enum dprc_region_type, region_desc->type);\
+       MC_RSP_OP(cmd, 3, 0,  32, uint32_t, region_desc->flags);\
 } while (0)
 
 /*                cmd, param, offset, width, type, arg_name */
-#define DPRC_CMD_SET_OBJ_LABEL(cmd, obj_index, label) \
+#define DPRC_CMD_SET_OBJ_LABEL(cmd, obj_type, obj_id, label) \
 do { \
-       MC_CMD_OP(cmd, 0, 0,  32, int,      obj_index); \
+       MC_CMD_OP(cmd, 0, 0,  32, int,      obj_id); \
        MC_CMD_OP(cmd, 1, 0,  8,  char,     label[0]);\
        MC_CMD_OP(cmd, 1, 8,  8,  char,     label[1]);\
        MC_CMD_OP(cmd, 1, 16, 8,  char,     label[2]);\
@@ -215,15 +217,31 @@ do { \
        MC_CMD_OP(cmd, 2, 40, 8,  char,     label[13]);\
        MC_CMD_OP(cmd, 2, 48, 8,  char,     label[14]);\
        MC_CMD_OP(cmd, 2, 56, 8,  char,     label[15]);\
+       MC_CMD_OP(cmd, 3, 0,  8,  char,     obj_type[0]);\
+       MC_CMD_OP(cmd, 3, 8,  8,  char,     obj_type[1]);\
+       MC_CMD_OP(cmd, 3, 16, 8,  char,     obj_type[2]);\
+       MC_CMD_OP(cmd, 3, 24, 8,  char,     obj_type[3]);\
+       MC_CMD_OP(cmd, 3, 32, 8,  char,     obj_type[4]);\
+       MC_CMD_OP(cmd, 3, 40, 8,  char,     obj_type[5]);\
+       MC_CMD_OP(cmd, 3, 48, 8,  char,     obj_type[6]);\
+       MC_CMD_OP(cmd, 3, 56, 8,  char,     obj_type[7]);\
+       MC_CMD_OP(cmd, 4, 0,  8,  char,     obj_type[8]);\
+       MC_CMD_OP(cmd, 4, 8,  8,  char,     obj_type[9]);\
+       MC_CMD_OP(cmd, 4, 16, 8,  char,     obj_type[10]);\
+       MC_CMD_OP(cmd, 4, 24, 8,  char,     obj_type[11]);\
+       MC_CMD_OP(cmd, 4, 32, 8,  char,     obj_type[12]);\
+       MC_CMD_OP(cmd, 4, 40, 8,  char,     obj_type[13]);\
+       MC_CMD_OP(cmd, 4, 48, 8,  char,     obj_type[14]);\
+       MC_CMD_OP(cmd, 4, 56, 8,  char,     obj_type[15]);\
 } while (0)
 
 /*                cmd, param, offset, width, type, arg_name */
-#define DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2) \
+#define DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg) \
 do { \
        MC_CMD_OP(cmd, 0, 0,  32, int,      endpoint1->id); \
-       MC_CMD_OP(cmd, 0, 32, 32, int,      endpoint1->interface_id); \
+       MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint1->if_id); \
        MC_CMD_OP(cmd, 1, 0,  32, int,      endpoint2->id); \
-       MC_CMD_OP(cmd, 1, 32, 32, int,      endpoint2->interface_id); \
+       MC_CMD_OP(cmd, 1, 32, 16, uint16_t, endpoint2->if_id); \
        MC_CMD_OP(cmd, 2, 0,  8,  char,     endpoint1->type[0]); \
        MC_CMD_OP(cmd, 2, 8,  8,  char,     endpoint1->type[1]); \
        MC_CMD_OP(cmd, 2, 16, 8,  char,     endpoint1->type[2]); \
@@ -240,6 +258,8 @@ do { \
        MC_CMD_OP(cmd, 3, 40, 8,  char,     endpoint1->type[13]); \
        MC_CMD_OP(cmd, 3, 48, 8,  char,     endpoint1->type[14]); \
        MC_CMD_OP(cmd, 3, 56, 8,  char,     endpoint1->type[15]); \
+       MC_CMD_OP(cmd, 4, 0,  32, uint32_t, cfg->max_rate); \
+       MC_CMD_OP(cmd, 4, 32, 32, uint32_t, cfg->committed_rate); \
        MC_CMD_OP(cmd, 5, 0,  8,  char,     endpoint2->type[0]); \
        MC_CMD_OP(cmd, 5, 8,  8,  char,     endpoint2->type[1]); \
        MC_CMD_OP(cmd, 5, 16, 8,  char,     endpoint2->type[2]); \
@@ -262,7 +282,7 @@ do { \
 #define DPRC_CMD_DISCONNECT(cmd, endpoint) \
 do { \
        MC_CMD_OP(cmd, 0, 0,  32, int,      endpoint->id); \
-       MC_CMD_OP(cmd, 0, 32, 32, int,      endpoint->interface_id); \
+       MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint->if_id); \
        MC_CMD_OP(cmd, 1, 0,  8,  char,     endpoint->type[0]); \
        MC_CMD_OP(cmd, 1, 8,  8,  char,     endpoint->type[1]); \
        MC_CMD_OP(cmd, 1, 16, 8,  char,     endpoint->type[2]); \
@@ -285,7 +305,7 @@ do { \
 #define DPRC_CMD_GET_CONNECTION(cmd, endpoint1) \
 do { \
        MC_CMD_OP(cmd, 0, 0,  32, int,      endpoint1->id); \
-       MC_CMD_OP(cmd, 0, 32, 32, int,      endpoint1->interface_id); \
+       MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint1->if_id); \
        MC_CMD_OP(cmd, 1, 0,  8,  char,     endpoint1->type[0]); \
        MC_CMD_OP(cmd, 1, 8,  8,  char,     endpoint1->type[1]); \
        MC_CMD_OP(cmd, 1, 16, 8,  char,     endpoint1->type[2]); \
@@ -304,12 +324,11 @@ do { \
        MC_CMD_OP(cmd, 2, 56, 8,  char,     endpoint1->type[15]); \
 } while (0)
 
-
 /*                cmd, param, offset, width, type, arg_name */
 #define DPRC_RSP_GET_CONNECTION(cmd, endpoint2, state) \
 do { \
        MC_RSP_OP(cmd, 3, 0,  32, int,      endpoint2->id); \
-       MC_RSP_OP(cmd, 3, 32, 32, int,      endpoint2->interface_id); \
+       MC_RSP_OP(cmd, 3, 32, 16, uint16_t, endpoint2->if_id); \
        MC_RSP_OP(cmd, 4, 0,  8,  char,     endpoint2->type[0]); \
        MC_RSP_OP(cmd, 4, 8,  8,  char,     endpoint2->type[1]); \
        MC_RSP_OP(cmd, 4, 16, 8,  char,     endpoint2->type[2]); \
@@ -351,16 +370,20 @@ struct fsl_mc_io;
 
 /**
  * dprc_get_container_id() - Get container ID associated with a given portal.
- * @mc_io:             Pointer to MC portal's I/O object
+ * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @container_id:      Requested container ID
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dprc_get_container_id(struct fsl_mc_io *mc_io, int *container_id);
+int dprc_get_container_id(struct fsl_mc_io     *mc_io,
+                         uint32_t              cmd_flags,
+                         int                   *container_id);
 
 /**
  * dprc_open() - Open DPRC object for use
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @container_id: Container ID to open
  * @token:     Returned token of DPRC object
  *
@@ -368,11 +391,15 @@ int dprc_get_container_id(struct fsl_mc_io *mc_io, int *container_id);
  *
  * @warning    Required before any operation on the object.
  */
-int dprc_open(struct fsl_mc_io *mc_io, int container_id, uint16_t *token);
+int dprc_open(struct fsl_mc_io *mc_io,
+             uint32_t          cmd_flags,
+             int               container_id,
+             uint16_t          *token);
 
 /**
  * dprc_close() - Close the control session of the object
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPRC object
  *
  * After this function is called, no further operations are
@@ -380,7 +407,9 @@ int dprc_open(struct fsl_mc_io *mc_io, int container_id, uint16_t *token);
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dprc_close(struct fsl_mc_io *mc_io, uint16_t token);
+int dprc_close(struct fsl_mc_io        *mc_io,
+              uint32_t         cmd_flags,
+              uint16_t         token);
 
 /**
  * Container general options
@@ -440,6 +469,7 @@ struct dprc_cfg {
 /**
  * dprc_reset_container - Reset child container.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPRC object
  * @child_container_id:        ID of the container to reset
  *
@@ -458,9 +488,10 @@ struct dprc_cfg {
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dprc_reset_container(struct fsl_mc_io *mc_io,
-                        uint16_t token,
-                        int child_container_id);
+int dprc_reset_container(struct fsl_mc_io      *mc_io,
+                        uint32_t               cmd_flags,
+                        uint16_t               token,
+                        int                    child_container_id);
 
 /**
  * struct dprc_attributes - Container attributes
@@ -489,24 +520,30 @@ struct dprc_attributes {
 /**
  * dprc_get_attributes() - Obtains container attributes
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPRC object
- * @attributes Returned container attributes
+ * @attributes:        Returned container attributes
  *
  * Return:     '0' on Success; Error code otherwise.
  */
 int dprc_get_attributes(struct fsl_mc_io       *mc_io,
+                       uint32_t                cmd_flags,
                        uint16_t                token,
                        struct dprc_attributes  *attributes);
 
 /**
  * dprc_get_obj_count() - Obtains the number of objects in the DPRC
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPRC object
  * @obj_count: Number of objects assigned to the DPRC
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dprc_get_obj_count(struct fsl_mc_io *mc_io, uint16_t token, int *obj_count);
+int dprc_get_obj_count(struct fsl_mc_io        *mc_io,
+                      uint32_t         cmd_flags,
+                      uint16_t         token,
+                      int                      *obj_count);
 
 /* Objects Attributes Flags */
 
@@ -542,6 +579,7 @@ struct dprc_obj_desc {
 /**
  * dprc_get_obj() - Get general information on an object
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPRC object
  * @obj_index: Index of the object to be queried (< obj_count)
  * @obj_desc:  Returns the requested object descriptor
@@ -554,6 +592,7 @@ struct dprc_obj_desc {
  * Return:     '0' on Success; Error code otherwise.
  */
 int dprc_get_obj(struct fsl_mc_io      *mc_io,
+                uint32_t               cmd_flags,
                 uint16_t               token,
                 int                    obj_index,
                 struct dprc_obj_desc   *obj_desc);
@@ -562,6 +601,7 @@ int dprc_get_obj(struct fsl_mc_io   *mc_io,
  * dprc_get_res_count() - Obtains the number of free resources that are
  *             assigned to this container, by pool type
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPRC object
  * @type:      pool type
  * @res_count: Returned number of free resources of the given
@@ -569,7 +609,8 @@ int dprc_get_obj(struct fsl_mc_io   *mc_io,
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dprc_get_res_count(struct fsl_mc_io        *mc_io,
+int dprc_get_res_count(struct fsl_mc_io *mc_io,
+                      uint32_t cmd_flags,
                       uint16_t         token,
                       char             *type,
                       int              *res_count);
@@ -604,6 +645,7 @@ struct dprc_res_ids_range_desc {
 /**
  * dprc_get_res_ids() - Obtains IDs of free resources in the container
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPRC object
  * @type:      pool type
  * @range_desc:        range descriptor
@@ -611,10 +653,25 @@ struct dprc_res_ids_range_desc {
  * Return:     '0' on Success; Error code otherwise.
  */
 int dprc_get_res_ids(struct fsl_mc_io                  *mc_io,
+                    uint32_t                           cmd_flags,
                     uint16_t                           token,
                     char                               *type,
                     struct dprc_res_ids_range_desc     *range_desc);
 
+/* Region flags */
+/* Cacheable - Indicates that region should be mapped as cacheable */
+#define DPRC_REGION_CACHEABLE  0x00000001
+
+/**
+ * enum dprc_region_type - Region type
+ * @DPRC_REGION_TYPE_MC_PORTAL: MC portal region
+ * @DPRC_REGION_TYPE_QBMAN_PORTAL: Qbman portal region
+ */
+enum dprc_region_type {
+       DPRC_REGION_TYPE_MC_PORTAL,
+       DPRC_REGION_TYPE_QBMAN_PORTAL
+};
+
 /**
  * struct dprc_region_desc - Mappable region descriptor
  * @base_offset: Region offset from region's base address.
@@ -622,17 +679,22 @@ int dprc_get_res_ids(struct fsl_mc_io                     *mc_io,
  *     base address; For DPIO, region base is offset from SoC QMan portals
  *     base address
  * @size: Region size (in bytes)
+ * @flags: Region attributes
+ * @type: Portal region type
  */
 struct dprc_region_desc {
-       uint64_t base_offset;
+       uint32_t base_offset;
        uint32_t size;
+       uint32_t flags;
+       enum dprc_region_type type;
 };
 
 /**
  * dprc_get_obj_region() - Get region information for a specified object.
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPRC object
- * @obj_type;  Object type as returned in dprc_get_obj()
+ * @obj_type:  Object type as returned in dprc_get_obj()
  * @obj_id:    Unique object instance as returned in dprc_get_obj()
  * @region_index: The specific region to query
  * @region_desc:  Returns the requested region descriptor
@@ -640,6 +702,7 @@ struct dprc_region_desc {
  * Return:     '0' on Success; Error code otherwise.
  */
 int dprc_get_obj_region(struct fsl_mc_io       *mc_io,
+                       uint32_t                cmd_flags,
                        uint16_t                token,
                        char                    *obj_type,
                        int                     obj_id,
@@ -650,53 +713,74 @@ int dprc_get_obj_region(struct fsl_mc_io  *mc_io,
  *                     operations
  * @type: Endpoint object type: NULL terminated string
  * @id: Endpoint object ID
- * @interface_id: Interface ID; should be set for endpoints with multiple
+ * @if_id: Interface ID; should be set for endpoints with multiple
  *             interfaces ("dpsw", "dpdmux"); for others, always set to 0
  */
 struct dprc_endpoint {
-       char type[16];
-       int id;
-       int interface_id;
+       char            type[16];
+       int             id;
+       uint16_t        if_id;
+};
+
+/**
+ * struct dprc_connection_cfg - Connection configuration.
+ *                             Used for virtual connections only
+ * @committed_rate: Committed rate (Mbits/s)
+ * @max_rate: Maximum rate (Mbits/s)
+ */
+struct dprc_connection_cfg {
+       uint32_t committed_rate;
+       uint32_t max_rate;
 };
 
 /**
  * dprc_connect() - Connect two endpoints to create a network link between them
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPRC object
  * @endpoint1: Endpoint 1 configuration parameters
  * @endpoint2: Endpoint 2 configuration parameters
+ * @cfg: Connection configuration. The connection configuration is ignored for
+ *     connections made to DPMAC objects, where rate is retrieved from the
+ *     MAC configuration.
  *
  * Return:     '0' on Success; Error code otherwise.
  */
-int dprc_connect(struct fsl_mc_io              *mc_io,
-                uint16_t                       token,
-                const struct dprc_endpoint     *endpoint1,
-                const struct dprc_endpoint     *endpoint2);
+int dprc_connect(struct fsl_mc_io                      *mc_io,
+                uint32_t                               cmd_flags,
+                uint16_t                               token,
+                const struct dprc_endpoint             *endpoint1,
+                const struct dprc_endpoint             *endpoint2,
+                const struct dprc_connection_cfg       *cfg);
 
 /**
  * dprc_disconnect() - Disconnect one endpoint to remove its network connection
  * @mc_io:     Pointer to MC portal's I/O object
+ * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:     Token of DPRC object
  * @endpoint:  Endpoint configuration parameters
  *
  * Return:     '0' on Success; Error code otherwise.
  */
 int dprc_disconnect(struct fsl_mc_io           *mc_io,
+                   uint32_t                    cmd_flags,
                    uint16_t                    token,
                    const struct dprc_endpoint  *endpoint);
 
 /**
 * dprc_get_connection() - Get connected endpoint and link status if connection
 *                      exists.
-* @mc_io       Pointer to MC portal's I/O object
-* @token       Token of DPRC object
-* @endpoint1   Endpoint 1 configuration parameters
-* @endpoint2   Returned endpoint 2 configuration parameters
+* @mc_io:      Pointer to MC portal's I/O object
+* @cmd_flags:  Command flags; one or more of 'MC_CMD_FLAG_'
+* @token:      Token of DPRC object
+* @endpoint1:  Endpoint 1 configuration parameters
+* @endpoint2:  Returned endpoint 2 configuration parameters
 * @state:      Returned link state: 1 - link is up, 0 - link is down
 *
 * Return:     '0' on Success; -ENAVAIL if connection does not exist.
 */
 int dprc_get_connection(struct fsl_mc_io               *mc_io,
+                       uint32_t                        cmd_flags,
                        uint16_t                        token,
                        const struct dprc_endpoint      *endpoint1,
                        struct dprc_endpoint            *endpoint2,
index cb39c39722a90d8b18dd730efc91b5c601db33ee..7f87d4e3021c0fadd414bfd620aaeef4531631b4 100644 (file)
 #define MAKE_UMASK64(_width) \
        ((uint64_t)((_width) < 64 ? ((uint64_t)1 << (_width)) - 1 : -1))
 
-static inline uint64_t u64_enc(int lsoffset, int width, uint64_t val)
+static inline uint64_t mc_enc(int lsoffset, int width, uint64_t val)
 {
        return (uint64_t)(((uint64_t)val & MAKE_UMASK64(width)) << lsoffset);
 }
-static inline uint64_t u64_dec(uint64_t val, int lsoffset, int width)
+static inline uint64_t mc_dec(uint64_t val, int lsoffset, int width)
 {
        return (uint64_t)((val >> lsoffset) & MAKE_UMASK64(width));
 }
@@ -39,44 +39,55 @@ enum mc_cmd_status {
        MC_CMD_STATUS_INVALID_STATE = 0xC /*!< Invalid state */
 };
 
+/*
+ * MC command flags
+ */
+
+/* High priority flag */
+#define MC_CMD_FLAG_PRI                0x00008000
+/* No flags */
+#define MC_CMD_NO_FLAGS                0x00000000
+/* Command completion flag */
+#define MC_CMD_FLAG_INTR_DIS   0x01000000
+
+
 #define MC_CMD_HDR_CMDID_O     52      /* Command ID field offset */
 #define MC_CMD_HDR_CMDID_S     12      /* Command ID field size */
 #define MC_CMD_HDR_STATUS_O    16      /* Status field offset */
 #define MC_CMD_HDR_TOKEN_O     38      /* Token field offset */
 #define MC_CMD_HDR_TOKEN_S     10      /* Token field size */
 #define MC_CMD_HDR_STATUS_S    8       /* Status field size*/
-#define MC_CMD_HDR_PRI_O       15      /* Priority field offset */
-#define MC_CMD_HDR_PRI_S       1       /* Priority field size */
+#define MC_CMD_HDR_FLAGS_O     0       /* Flags field offset */
+#define MC_CMD_HDR_FLAGS_S     32      /* Flags field size*/
+#define MC_CMD_HDR_FLAGS_MASK  0xFF00FF00 /* Command flags mask */
 
 #define MC_CMD_HDR_READ_STATUS(_hdr) \
-       ((enum mc_cmd_status)u64_dec((_hdr), \
+       ((enum mc_cmd_status)mc_dec((_hdr), \
                MC_CMD_HDR_STATUS_O, MC_CMD_HDR_STATUS_S))
 
 #define MC_CMD_HDR_READ_TOKEN(_hdr) \
-       ((uint16_t)u64_dec((_hdr), MC_CMD_HDR_TOKEN_O, MC_CMD_HDR_TOKEN_S))
-
-#define MC_CMD_PRI_LOW         0 /*!< Low Priority command indication */
-#define MC_CMD_PRI_HIGH                1 /*!< High Priority command indication */
+       ((uint16_t)mc_dec((_hdr), MC_CMD_HDR_TOKEN_O, MC_CMD_HDR_TOKEN_S))
 
 #define MC_EXT_OP(_ext, _param, _offset, _width, _type, _arg) \
-       ((_ext)[_param] |= u64_enc((_offset), (_width), _arg))
+       ((_ext)[_param] |= mc_enc((_offset), (_width), _arg))
 
 #define MC_CMD_OP(_cmd, _param, _offset, _width, _type, _arg) \
-       ((_cmd).params[_param] |= u64_enc((_offset), (_width), _arg))
+       ((_cmd).params[_param] |= mc_enc((_offset), (_width), _arg))
 
 #define MC_RSP_OP(_cmd, _param, _offset, _width, _type, _arg) \
-       (_arg = (_type)u64_dec(_cmd.params[_param], (_offset), (_width)))
+       (_arg = (_type)mc_dec(_cmd.params[_param], (_offset), (_width)))
 
 static inline uint64_t mc_encode_cmd_header(uint16_t cmd_id,
-                                           uint8_t priority,
+                                           uint32_t cmd_flags,
                                            uint16_t token)
 {
        uint64_t hdr;
 
-       hdr = u64_enc(MC_CMD_HDR_CMDID_O, MC_CMD_HDR_CMDID_S, cmd_id);
-       hdr |= u64_enc(MC_CMD_HDR_TOKEN_O, MC_CMD_HDR_TOKEN_S, token);
-       hdr |= u64_enc(MC_CMD_HDR_PRI_O, MC_CMD_HDR_PRI_S, priority);
-       hdr |= u64_enc(MC_CMD_HDR_STATUS_O, MC_CMD_HDR_STATUS_S,
+       hdr = mc_enc(MC_CMD_HDR_CMDID_O, MC_CMD_HDR_CMDID_S, cmd_id);
+       hdr |= mc_enc(MC_CMD_HDR_FLAGS_O, MC_CMD_HDR_FLAGS_S,
+                      (cmd_flags & MC_CMD_HDR_FLAGS_MASK));
+       hdr |= mc_enc(MC_CMD_HDR_TOKEN_O, MC_CMD_HDR_TOKEN_S, token);
+       hdr |= mc_enc(MC_CMD_HDR_STATUS_O, MC_CMD_HDR_STATUS_S,
                       MC_CMD_STATUS_READY);
 
        return hdr;
@@ -130,6 +141,4 @@ static inline enum mc_cmd_status mc_read_response(
        return status;
 }
 
-int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd);
-
 #endif /* __FSL_MC_CMD_H */