dpmcp.c 2.6 KB
Newer Older
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 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
/**
 * dpmcp_open() - Open a control session for the specified object.
 * @mc_io:	Pointer to MC portal's I/O object
 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
 * @dpmcp_id:	DPMCP unique ID
 * @token:	Returned token; use in subsequent API calls
 *
 * This function can be used to open a control session for an
 * already created object; an object may have been declared in
 * the DPL or by calling the dpmcp_create function.
 * This function returns a unique authentication token,
 * associated with the specific object ID and the specific MC
 * portal; this token must be used in all subsequent commands for
 * this specific object
 *
 * Return:	'0' on Success; Error code otherwise.
 */
28
int dpmcp_open(struct fsl_mc_io *mc_io,
29
	       u32 cmd_flags,
30
	       int dpmcp_id,
31
	       u16 *token)
32 33
{
	struct mc_command cmd = { 0 };
34
	struct dpmcp_cmd_open *cmd_params;
35 36 37 38
	int err;

	/* prepare command */
	cmd.header = mc_encode_cmd_header(DPMCP_CMDID_OPEN,
39
					  cmd_flags, 0);
40 41
	cmd_params = (struct dpmcp_cmd_open *)cmd.params;
	cmd_params->dpmcp_id = cpu_to_le32(dpmcp_id);
42 43 44 45 46 47 48

	/* send command to mc*/
	err = mc_send_command(mc_io, &cmd);
	if (err)
		return err;

	/* retrieve response parameters */
49
	*token = mc_cmd_hdr_read_token(&cmd);
50 51 52 53

	return err;
}

54 55 56 57 58 59 60 61 62 63 64
/**
 * dpmcp_close() - Close the control session of the object
 * @mc_io:	Pointer to MC portal's I/O object
 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
 * @token:	Token of DPMCP object
 *
 * After this function is called, no further operations are
 * allowed on the object without opening a new control session.
 *
 * Return:	'0' on Success; Error code otherwise.
 */
65
int dpmcp_close(struct fsl_mc_io *mc_io,
66 67
		u32 cmd_flags,
		u16 token)
68 69 70 71
{
	struct mc_command cmd = { 0 };

	/* prepare command */
72 73
	cmd.header = mc_encode_cmd_header(DPMCP_CMDID_CLOSE,
					  cmd_flags, token);
74 75 76 77 78

	/* send command to mc*/
	return mc_send_command(mc_io, &cmd);
}

79 80 81 82 83 84 85 86
/**
 * dpmcp_reset() - Reset the DPMCP, returns the object to initial state.
 * @mc_io:	Pointer to MC portal's I/O object
 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
 * @token:	Token of DPMCP object
 *
 * Return:	'0' on Success; Error code otherwise.
 */
87
int dpmcp_reset(struct fsl_mc_io *mc_io,
88 89
		u32 cmd_flags,
		u16 token)
90 91 92 93 94
{
	struct mc_command cmd = { 0 };

	/* prepare command */
	cmd.header = mc_encode_cmd_header(DPMCP_CMDID_RESET,
95
					  cmd_flags, token);
96 97 98 99

	/* send command to mc*/
	return mc_send_command(mc_io, &cmd);
}