2018-01-17 19:36:44 +03:00
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
2016-10-26 19:20:28 +03:00
/*
* Copyright 2013 - 2016 Freescale Semiconductor Inc .
2015-03-06 04:35:25 +03:00
*
*/
2017-06-27 17:41:32 +03:00
# include <linux/kernel.h>
2018-02-05 17:07:42 +03:00
# include <linux/fsl/mc.h>
2016-08-24 01:14:23 +03:00
2018-01-16 16:19:04 +03:00
# include "fsl-mc-private.h"
2015-03-06 04:35:25 +03:00
2015-09-24 22:26:54 +03:00
/**
* 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 .
*/
2015-09-24 00:11:01 +03:00
int dpmcp_open ( struct fsl_mc_io * mc_io ,
2015-09-25 19:21:01 +03:00
u32 cmd_flags ,
2015-09-24 00:11:01 +03:00
int dpmcp_id ,
2015-09-25 19:21:01 +03:00
u16 * token )
2015-03-06 04:35:25 +03:00
{
2018-03-15 20:05:31 +03:00
struct fsl_mc_command cmd = { 0 } ;
2016-06-23 00:40:52 +03:00
struct dpmcp_cmd_open * cmd_params ;
2015-03-06 04:35:25 +03:00
int err ;
/* prepare command */
cmd . header = mc_encode_cmd_header ( DPMCP_CMDID_OPEN ,
2015-09-24 00:11:01 +03:00
cmd_flags , 0 ) ;
2016-06-23 00:40:52 +03:00
cmd_params = ( struct dpmcp_cmd_open * ) cmd . params ;
cmd_params - > dpmcp_id = cpu_to_le32 ( dpmcp_id ) ;
2015-03-06 04:35:25 +03:00
/* send command to mc*/
err = mc_send_command ( mc_io , & cmd ) ;
if ( err )
return err ;
/* retrieve response parameters */
2016-06-23 00:40:52 +03:00
* token = mc_cmd_hdr_read_token ( & cmd ) ;
2015-03-06 04:35:25 +03:00
return err ;
}
2015-09-24 22:26:54 +03:00
/**
* 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 .
*/
2015-09-24 00:11:01 +03:00
int dpmcp_close ( struct fsl_mc_io * mc_io ,
2015-09-25 19:21:01 +03:00
u32 cmd_flags ,
u16 token )
2015-03-06 04:35:25 +03:00
{
2018-03-15 20:05:31 +03:00
struct fsl_mc_command cmd = { 0 } ;
2015-03-06 04:35:25 +03:00
/* prepare command */
2015-09-24 00:11:01 +03:00
cmd . header = mc_encode_cmd_header ( DPMCP_CMDID_CLOSE ,
cmd_flags , token ) ;
2015-03-06 04:35:25 +03:00
/* send command to mc*/
return mc_send_command ( mc_io , & cmd ) ;
}
2015-09-24 22:26:54 +03:00
/**
* 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 .
*/
2015-09-24 00:11:01 +03:00
int dpmcp_reset ( struct fsl_mc_io * mc_io ,
2015-09-25 19:21:01 +03:00
u32 cmd_flags ,
u16 token )
2015-03-06 04:35:25 +03:00
{
2018-03-15 20:05:31 +03:00
struct fsl_mc_command cmd = { 0 } ;
2015-03-06 04:35:25 +03:00
/* prepare command */
cmd . header = mc_encode_cmd_header ( DPMCP_CMDID_RESET ,
2015-09-24 00:11:01 +03:00
cmd_flags , token ) ;
2015-03-06 04:35:25 +03:00
/* send command to mc*/
return mc_send_command ( mc_io , & cmd ) ;
}