Home | History | Annotate | Download | only in fsl-mc
      1 // SPDX-License-Identifier: GPL-2.0+
      2 /*
      3  * Freescale Layerscape MC I/O wrapper
      4  *
      5  * Copyright 2013-2016 Freescale Semiconductor, Inc.
      6  * Copyright 2017 NXP
      7  */
      8 #include <fsl-mc/fsl_mc_sys.h>
      9 #include <fsl-mc/fsl_mc_cmd.h>
     10 #include <fsl-mc/fsl_dpbp.h>
     11 
     12 int dpbp_open(struct fsl_mc_io *mc_io,
     13 	      uint32_t cmd_flags,
     14 	      int dpbp_id,
     15 	      uint16_t *token)
     16 {
     17 	struct mc_command cmd = { 0 };
     18 	int err;
     19 
     20 	/* prepare command */
     21 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_OPEN,
     22 					  cmd_flags,
     23 					  0);
     24 	DPBP_CMD_OPEN(cmd, dpbp_id);
     25 
     26 	/* send command to mc*/
     27 	err = mc_send_command(mc_io, &cmd);
     28 	if (err)
     29 		return err;
     30 
     31 	/* retrieve response parameters */
     32 	*token = MC_CMD_HDR_READ_TOKEN(cmd.header);
     33 
     34 	return err;
     35 }
     36 
     37 int dpbp_close(struct fsl_mc_io *mc_io,
     38 	       uint32_t cmd_flags,
     39 	       uint16_t token)
     40 {
     41 	struct mc_command cmd = { 0 };
     42 
     43 	/* prepare command */
     44 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_CLOSE, cmd_flags,
     45 					  token);
     46 
     47 	/* send command to mc*/
     48 	return mc_send_command(mc_io, &cmd);
     49 }
     50 
     51 int dpbp_create(struct fsl_mc_io *mc_io,
     52 		uint16_t dprc_token,
     53 		uint32_t cmd_flags,
     54 		const struct dpbp_cfg *cfg,
     55 		uint32_t *obj_id)
     56 {
     57 	struct mc_command cmd = { 0 };
     58 	int err;
     59 
     60 	(void)(cfg); /* unused */
     61 
     62 	/* prepare command */
     63 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_CREATE,
     64 					  cmd_flags,
     65 					  dprc_token);
     66 
     67 	/* send command to mc*/
     68 	err = mc_send_command(mc_io, &cmd);
     69 	if (err)
     70 		return err;
     71 
     72 	/* retrieve response parameters */
     73 	MC_CMD_READ_OBJ_ID(cmd, *obj_id);
     74 
     75 	return 0;
     76 }
     77 
     78 int dpbp_destroy(struct fsl_mc_io *mc_io,
     79 		 uint16_t dprc_token,
     80 		 uint32_t cmd_flags,
     81 		 uint32_t obj_id)
     82 {
     83 	struct mc_command cmd = { 0 };
     84 
     85 	/* prepare command */
     86 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_DESTROY,
     87 					  cmd_flags,
     88 					  dprc_token);
     89 
     90 	/* set object id to destroy */
     91 	CMD_DESTROY_SET_OBJ_ID_PARAM0(cmd, obj_id);
     92 
     93 	/* send command to mc*/
     94 	return mc_send_command(mc_io, &cmd);
     95 }
     96 
     97 int dpbp_enable(struct fsl_mc_io *mc_io,
     98 		uint32_t cmd_flags,
     99 		uint16_t token)
    100 {
    101 	struct mc_command cmd = { 0 };
    102 
    103 	/* prepare command */
    104 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_ENABLE, cmd_flags,
    105 					  token);
    106 
    107 	/* send command to mc*/
    108 	return mc_send_command(mc_io, &cmd);
    109 }
    110 
    111 int dpbp_disable(struct fsl_mc_io *mc_io,
    112 		 uint32_t cmd_flags,
    113 		 uint16_t token)
    114 {
    115 	struct mc_command cmd = { 0 };
    116 
    117 	/* prepare command */
    118 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_DISABLE,
    119 					  cmd_flags,
    120 					  token);
    121 
    122 	/* send command to mc*/
    123 	return mc_send_command(mc_io, &cmd);
    124 }
    125 
    126 int dpbp_reset(struct fsl_mc_io *mc_io,
    127 	       uint32_t cmd_flags,
    128 	       uint16_t token)
    129 {
    130 	struct mc_command cmd = { 0 };
    131 
    132 	/* prepare command */
    133 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_RESET,
    134 					  cmd_flags,
    135 					  token);
    136 
    137 	/* send command to mc*/
    138 	return mc_send_command(mc_io, &cmd);
    139 }
    140 
    141 int dpbp_get_attributes(struct fsl_mc_io *mc_io,
    142 			uint32_t cmd_flags,
    143 			uint16_t token,
    144 			struct dpbp_attr *attr)
    145 {
    146 	struct mc_command cmd = { 0 };
    147 	int err;
    148 
    149 	/* prepare command */
    150 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_ATTR,
    151 					  cmd_flags,
    152 					  token);
    153 
    154 	/* send command to mc*/
    155 	err = mc_send_command(mc_io, &cmd);
    156 	if (err)
    157 		return err;
    158 
    159 	/* retrieve response parameters */
    160 	DPBP_RSP_GET_ATTRIBUTES(cmd, attr);
    161 
    162 	return 0;
    163 }
    164 
    165 int dpbp_get_api_version(struct fsl_mc_io *mc_io,
    166 			 u32 cmd_flags,
    167 			 u16 *major_ver,
    168 			 u16 *minor_ver)
    169 {
    170 	struct mc_command cmd = { 0 };
    171 	int err;
    172 
    173 	/* prepare command */
    174 	cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_API_VERSION,
    175 					  cmd_flags, 0);
    176 
    177 	/* send command to mc */
    178 	err = mc_send_command(mc_io, &cmd);
    179 	if (err)
    180 		return err;
    181 
    182 	/* retrieve response parameters */
    183 	mc_cmd_read_api_version(&cmd, major_ver, minor_ver);
    184 
    185 	return 0;
    186 }
    187