SPDX: Convert all of our single license tags to Linux Kernel style
[oweals/u-boot.git] / drivers / net / fsl-mc / dpio / dpio.c
index b07eff7e3ca161a32751cc014e72bae7d54ddc3e..0bbb76072818c673c3b5837ab39662b4b34d1841 100644 (file)
@@ -1,21 +1,25 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
- * Copyright (C) 2013-2015 Freescale Semiconductor
- *
- * SPDX-License-Identifier:    GPL-2.0+
+ * Copyright (C) 2013-2016 Freescale Semiconductor
+ * Copyright 2017 NXP
  */
 
 #include <fsl-mc/fsl_mc_sys.h>
 #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,
+             uint32_t 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,113 @@ 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_create(struct fsl_mc_io *mc_io,
+               uint16_t dprc_token,
+               uint32_t cmd_flags,
+               const struct dpio_cfg *cfg,
+               uint32_t *obj_id)
+{
+       struct mc_command cmd = { 0 };
+       int err;
+
+       /* prepare command */
+       cmd.header = mc_encode_cmd_header(DPIO_CMDID_CREATE,
+                                         cmd_flags,
+                                         dprc_token);
+       DPIO_CMD_CREATE(cmd, cfg);
+
+       /* send command to mc*/
+       err = mc_send_command(mc_io, &cmd);
+       if (err)
+               return err;
+
+       /* retrieve response parameters */
+       MC_CMD_READ_OBJ_ID(cmd, *obj_id);
+
+       return 0;
+}
+
+int dpio_destroy(struct fsl_mc_io *mc_io,
+                uint16_t dprc_token,
+                uint32_t cmd_flags,
+                uint32_t obj_id)
+{
+       struct mc_command cmd = { 0 };
+
+       /* prepare command */
+       cmd.header = mc_encode_cmd_header(DPIO_CMDID_DESTROY,
+                                         cmd_flags,
+                                         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);
 }
 
-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 +148,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*/
@@ -100,3 +161,26 @@ int dpio_get_attributes(struct fsl_mc_io *mc_io,
 
        return 0;
 }
+
+int dpio_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(DPIO_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;
+}