root/drivers/bus/fsl-mc/dpcon.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. dpcon_open
  2. dpcon_close
  3. dpcon_enable
  4. dpcon_disable
  5. dpcon_reset
  6. dpcon_get_attributes
  7. dpcon_set_notification

   1 // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
   2 /*
   3  * Copyright 2013-2016 Freescale Semiconductor Inc.
   4  *
   5  */
   6 #include <linux/kernel.h>
   7 #include <linux/fsl/mc.h>
   8 
   9 #include "fsl-mc-private.h"
  10 
  11 /**
  12  * dpcon_open() - Open a control session for the specified object
  13  * @mc_io:      Pointer to MC portal's I/O object
  14  * @cmd_flags:  Command flags; one or more of 'MC_CMD_FLAG_'
  15  * @dpcon_id:   DPCON unique ID
  16  * @token:      Returned token; use in subsequent API calls
  17  *
  18  * This function can be used to open a control session for an
  19  * already created object; an object may have been declared in
  20  * the DPL or by calling the dpcon_create() function.
  21  * This function returns a unique authentication token,
  22  * associated with the specific object ID and the specific MC
  23  * portal; this token must be used in all subsequent commands for
  24  * this specific object.
  25  *
  26  * Return:      '0' on Success; Error code otherwise.
  27  */
  28 int dpcon_open(struct fsl_mc_io *mc_io,
  29                u32 cmd_flags,
  30                int dpcon_id,
  31                u16 *token)
  32 {
  33         struct fsl_mc_command cmd = { 0 };
  34         struct dpcon_cmd_open *dpcon_cmd;
  35         int err;
  36 
  37         /* prepare command */
  38         cmd.header = mc_encode_cmd_header(DPCON_CMDID_OPEN,
  39                                           cmd_flags,
  40                                           0);
  41         dpcon_cmd = (struct dpcon_cmd_open *)cmd.params;
  42         dpcon_cmd->dpcon_id = cpu_to_le32(dpcon_id);
  43 
  44         /* send command to mc*/
  45         err = mc_send_command(mc_io, &cmd);
  46         if (err)
  47                 return err;
  48 
  49         /* retrieve response parameters */
  50         *token = mc_cmd_hdr_read_token(&cmd);
  51 
  52         return 0;
  53 }
  54 EXPORT_SYMBOL_GPL(dpcon_open);
  55 
  56 /**
  57  * dpcon_close() - Close the control session of the object
  58  * @mc_io:      Pointer to MC portal's I/O object
  59  * @cmd_flags:  Command flags; one or more of 'MC_CMD_FLAG_'
  60  * @token:      Token of DPCON object
  61  *
  62  * After this function is called, no further operations are
  63  * allowed on the object without opening a new control session.
  64  *
  65  * Return:      '0' on Success; Error code otherwise.
  66  */
  67 int dpcon_close(struct fsl_mc_io *mc_io,
  68                 u32 cmd_flags,
  69                 u16 token)
  70 {
  71         struct fsl_mc_command cmd = { 0 };
  72 
  73         /* prepare command */
  74         cmd.header = mc_encode_cmd_header(DPCON_CMDID_CLOSE,
  75                                           cmd_flags,
  76                                           token);
  77 
  78         /* send command to mc*/
  79         return mc_send_command(mc_io, &cmd);
  80 }
  81 EXPORT_SYMBOL_GPL(dpcon_close);
  82 
  83 /**
  84  * dpcon_enable() - Enable the DPCON
  85  * @mc_io:      Pointer to MC portal's I/O object
  86  * @cmd_flags:  Command flags; one or more of 'MC_CMD_FLAG_'
  87  * @token:      Token of DPCON object
  88  *
  89  * Return:      '0' on Success; Error code otherwise
  90  */
  91 int dpcon_enable(struct fsl_mc_io *mc_io,
  92                  u32 cmd_flags,
  93                  u16 token)
  94 {
  95         struct fsl_mc_command cmd = { 0 };
  96 
  97         /* prepare command */
  98         cmd.header = mc_encode_cmd_header(DPCON_CMDID_ENABLE,
  99                                           cmd_flags,
 100                                           token);
 101 
 102         /* send command to mc*/
 103         return mc_send_command(mc_io, &cmd);
 104 }
 105 EXPORT_SYMBOL_GPL(dpcon_enable);
 106 
 107 /**
 108  * dpcon_disable() - Disable the DPCON
 109  * @mc_io:      Pointer to MC portal's I/O object
 110  * @cmd_flags:  Command flags; one or more of 'MC_CMD_FLAG_'
 111  * @token:      Token of DPCON object
 112  *
 113  * Return:      '0' on Success; Error code otherwise
 114  */
 115 int dpcon_disable(struct fsl_mc_io *mc_io,
 116                   u32 cmd_flags,
 117                   u16 token)
 118 {
 119         struct fsl_mc_command cmd = { 0 };
 120 
 121         /* prepare command */
 122         cmd.header = mc_encode_cmd_header(DPCON_CMDID_DISABLE,
 123                                           cmd_flags,
 124                                           token);
 125 
 126         /* send command to mc*/
 127         return mc_send_command(mc_io, &cmd);
 128 }
 129 EXPORT_SYMBOL_GPL(dpcon_disable);
 130 
 131 /**
 132  * dpcon_reset() - Reset the DPCON, returns the object to initial state.
 133  * @mc_io:      Pointer to MC portal's I/O object
 134  * @cmd_flags:  Command flags; one or more of 'MC_CMD_FLAG_'
 135  * @token:      Token of DPCON object
 136  *
 137  * Return:      '0' on Success; Error code otherwise.
 138  */
 139 int dpcon_reset(struct fsl_mc_io *mc_io,
 140                 u32 cmd_flags,
 141                 u16 token)
 142 {
 143         struct fsl_mc_command cmd = { 0 };
 144 
 145         /* prepare command */
 146         cmd.header = mc_encode_cmd_header(DPCON_CMDID_RESET,
 147                                           cmd_flags, token);
 148 
 149         /* send command to mc*/
 150         return mc_send_command(mc_io, &cmd);
 151 }
 152 EXPORT_SYMBOL_GPL(dpcon_reset);
 153 
 154 /**
 155  * dpcon_get_attributes() - Retrieve DPCON attributes.
 156  * @mc_io:      Pointer to MC portal's I/O object
 157  * @cmd_flags:  Command flags; one or more of 'MC_CMD_FLAG_'
 158  * @token:      Token of DPCON object
 159  * @attr:       Object's attributes
 160  *
 161  * Return:      '0' on Success; Error code otherwise.
 162  */
 163 int dpcon_get_attributes(struct fsl_mc_io *mc_io,
 164                          u32 cmd_flags,
 165                          u16 token,
 166                          struct dpcon_attr *attr)
 167 {
 168         struct fsl_mc_command cmd = { 0 };
 169         struct dpcon_rsp_get_attr *dpcon_rsp;
 170         int err;
 171 
 172         /* prepare command */
 173         cmd.header = mc_encode_cmd_header(DPCON_CMDID_GET_ATTR,
 174                                           cmd_flags,
 175                                           token);
 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         dpcon_rsp = (struct dpcon_rsp_get_attr *)cmd.params;
 184         attr->id = le32_to_cpu(dpcon_rsp->id);
 185         attr->qbman_ch_id = le16_to_cpu(dpcon_rsp->qbman_ch_id);
 186         attr->num_priorities = dpcon_rsp->num_priorities;
 187 
 188         return 0;
 189 }
 190 EXPORT_SYMBOL_GPL(dpcon_get_attributes);
 191 
 192 /**
 193  * dpcon_set_notification() - Set DPCON notification destination
 194  * @mc_io:      Pointer to MC portal's I/O object
 195  * @cmd_flags:  Command flags; one or more of 'MC_CMD_FLAG_'
 196  * @token:      Token of DPCON object
 197  * @cfg:        Notification parameters
 198  *
 199  * Return:      '0' on Success; Error code otherwise
 200  */
 201 int dpcon_set_notification(struct fsl_mc_io *mc_io,
 202                            u32 cmd_flags,
 203                            u16 token,
 204                            struct dpcon_notification_cfg *cfg)
 205 {
 206         struct fsl_mc_command cmd = { 0 };
 207         struct dpcon_cmd_set_notification *dpcon_cmd;
 208 
 209         /* prepare command */
 210         cmd.header = mc_encode_cmd_header(DPCON_CMDID_SET_NOTIFICATION,
 211                                           cmd_flags,
 212                                           token);
 213         dpcon_cmd = (struct dpcon_cmd_set_notification *)cmd.params;
 214         dpcon_cmd->dpio_id = cpu_to_le32(cfg->dpio_id);
 215         dpcon_cmd->priority = cfg->priority;
 216         dpcon_cmd->user_ctx = cpu_to_le64(cfg->user_ctx);
 217 
 218         /* send command to mc*/
 219         return mc_send_command(mc_io, &cmd);
 220 }
 221 EXPORT_SYMBOL_GPL(dpcon_set_notification);

/* [<][>][^][v][top][bottom][index][help] */