Merge tag 'xilinx-for-v2018.07' of git://www.denx.de/git/u-boot-microblaze
[oweals/u-boot.git] / drivers / net / fsl-mc / dpmac.c
index 072a90dcaee6c48c21b3150fd914914ef690eee0..43a2ff43f8883baec29bfda6c7601b2c29a60de1 100644 (file)
@@ -1,10 +1,10 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Freescale Layerscape MC I/O wrapper
  *
- * Copyright (C) 2015 Freescale Semiconductor, Inc.
+ * Copyright 2015-2016 Freescale Semiconductor, Inc.
+ * Copyright 2017 NXP
  * Author: Prabhakar Kushwaha <prabhakar@freescale.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <fsl-mc/fsl_mc_sys.h>
@@ -51,9 +51,10 @@ int dpmac_close(struct fsl_mc_io *mc_io,
 }
 
 int dpmac_create(struct fsl_mc_io *mc_io,
+                uint16_t dprc_token,
                 uint32_t cmd_flags,
                 const struct dpmac_cfg *cfg,
-                uint16_t *token)
+                uint32_t *obj_id)
 {
        struct mc_command cmd = { 0 };
        int err;
@@ -61,7 +62,7 @@ int dpmac_create(struct fsl_mc_io *mc_io,
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPMAC_CMDID_CREATE,
                                          cmd_flags,
-                                         0);
+                                         dprc_token);
        DPMAC_CMD_CREATE(cmd, cfg);
 
        /* send command to mc*/
@@ -70,21 +71,25 @@ int dpmac_create(struct fsl_mc_io *mc_io,
                return err;
 
        /* retrieve response parameters */
-       *token = MC_CMD_HDR_READ_TOKEN(cmd.header);
+       MC_CMD_READ_OBJ_ID(cmd, *obj_id);
 
        return 0;
 }
 
 int dpmac_destroy(struct fsl_mc_io *mc_io,
+                 uint16_t dprc_token,
                  uint32_t cmd_flags,
-                 uint16_t token)
+                 uint32_t obj_id)
 {
        struct mc_command cmd = { 0 };
 
        /* prepare command */
        cmd.header = mc_encode_cmd_header(DPMAC_CMDID_DESTROY,
                                          cmd_flags,
-                                         token);
+                                         dprc_token);
+
+       /* set object id to destroy */
+       CMD_DESTROY_SET_OBJ_ID_PARAM0(cmd, obj_id);
 
        /* send command to mc*/
        return mc_send_command(mc_io, &cmd);
@@ -220,3 +225,26 @@ int dpmac_get_counter(struct fsl_mc_io *mc_io,
 
        return 0;
 }
+
+int dpmac_get_api_version(struct fsl_mc_io *mc_io,
+                        u32 cmd_flags,
+                        u16 *major_ver,
+                        u16 *minor_ver)
+{
+       struct mc_command cmd = { 0 };
+       int err;
+
+       /* prepare command */
+       cmd.header = mc_encode_cmd_header(DPMAC_CMDID_GET_API_VERSION,
+                                         cmd_flags, 0);
+
+       /* send command to mc */
+       err = mc_send_command(mc_io, &cmd);
+       if (err)
+               return err;
+
+       /* retrieve response parameters */
+       mc_cmd_read_api_version(&cmd, major_ver, minor_ver);
+
+       return 0;
+}