100 lines · c
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 * dpmcp_open() - Open a control session for the specified object.13 * @mc_io: Pointer to MC portal's I/O object14 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'15 * @dpmcp_id: DPMCP unique ID16 * @token: Returned token; use in subsequent API calls17 *18 * This function can be used to open a control session for an19 * already created object; an object may have been declared in20 * the DPL or by calling the dpmcp_create function.21 * This function returns a unique authentication token,22 * associated with the specific object ID and the specific MC23 * portal; this token must be used in all subsequent commands for24 * this specific object25 *26 * Return: '0' on Success; Error code otherwise.27 */28int dpmcp_open(struct fsl_mc_io *mc_io,29 u32 cmd_flags,30 int dpmcp_id,31 u16 *token)32{33 struct fsl_mc_command cmd = { 0 };34 struct dpmcp_cmd_open *cmd_params;35 int err;36 37 /* prepare command */38 cmd.header = mc_encode_cmd_header(DPMCP_CMDID_OPEN,39 cmd_flags, 0);40 cmd_params = (struct dpmcp_cmd_open *)cmd.params;41 cmd_params->dpmcp_id = cpu_to_le32(dpmcp_id);42 43 /* send command to mc*/44 err = mc_send_command(mc_io, &cmd);45 if (err)46 return err;47 48 /* retrieve response parameters */49 *token = mc_cmd_hdr_read_token(&cmd);50 51 return err;52}53 54/**55 * dpmcp_close() - Close the control session of the object56 * @mc_io: Pointer to MC portal's I/O object57 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'58 * @token: Token of DPMCP object59 *60 * After this function is called, no further operations are61 * allowed on the object without opening a new control session.62 *63 * Return: '0' on Success; Error code otherwise.64 */65int dpmcp_close(struct fsl_mc_io *mc_io,66 u32 cmd_flags,67 u16 token)68{69 struct fsl_mc_command cmd = { 0 };70 71 /* prepare command */72 cmd.header = mc_encode_cmd_header(DPMCP_CMDID_CLOSE,73 cmd_flags, token);74 75 /* send command to mc*/76 return mc_send_command(mc_io, &cmd);77}78 79/**80 * dpmcp_reset() - Reset the DPMCP, returns the object to initial state.81 * @mc_io: Pointer to MC portal's I/O object82 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_'83 * @token: Token of DPMCP object84 *85 * Return: '0' on Success; Error code otherwise.86 */87int dpmcp_reset(struct fsl_mc_io *mc_io,88 u32 cmd_flags,89 u16 token)90{91 struct fsl_mc_command cmd = { 0 };92 93 /* prepare command */94 cmd.header = mc_encode_cmd_header(DPMCP_CMDID_RESET,95 cmd_flags, token);96 97 /* send command to mc*/98 return mc_send_command(mc_io, &cmd);99}100