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 .
2016-09-30 17:01:21 +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-10-17 21:42:18 +03:00
2018-03-02 13:23:58 +03:00
# include "fsl-mc-private.h"
2015-03-06 04:35:25 +03:00
2015-09-24 22:26:54 +03:00
/**
* dpbp_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_ '
* @ dpbp_id : DPBP 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 dpbp_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:00 +03:00
int dpbp_open ( struct fsl_mc_io * mc_io ,
2015-09-25 19:21:01 +03:00
u32 cmd_flags ,
2015-09-24 00:11:00 +03:00
int dpbp_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 dpbp_cmd_open * cmd_params ;
2015-03-06 04:35:25 +03:00
int err ;
/* prepare command */
cmd . header = mc_encode_cmd_header ( DPBP_CMDID_OPEN ,
2015-09-24 00:11:00 +03:00
cmd_flags , 0 ) ;
2016-06-23 00:40:52 +03:00
cmd_params = ( struct dpbp_cmd_open * ) cmd . params ;
cmd_params - > dpbp_id = cpu_to_le32 ( dpbp_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 ;
}
2017-11-17 16:38:29 +03:00
EXPORT_SYMBOL_GPL ( dpbp_open ) ;
2015-03-06 04:35:25 +03:00
2015-09-24 22:26:54 +03:00
/**
* dpbp_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 DPBP 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:00 +03:00
int dpbp_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:00 +03:00
cmd . header = mc_encode_cmd_header ( DPBP_CMDID_CLOSE , cmd_flags ,
2015-03-06 04:35:25 +03:00
token ) ;
/* send command to mc*/
return mc_send_command ( mc_io , & cmd ) ;
}
2017-11-17 16:38:29 +03:00
EXPORT_SYMBOL_GPL ( dpbp_close ) ;
2015-03-06 04:35:25 +03:00
2015-09-24 22:26:54 +03:00
/**
* dpbp_enable ( ) - Enable the DPBP .
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ token : Token of DPBP object
*
* Return : ' 0 ' on Success ; Error code otherwise .
*/
2015-09-24 00:11:00 +03:00
int dpbp_enable ( 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:00 +03:00
cmd . header = mc_encode_cmd_header ( DPBP_CMDID_ENABLE , cmd_flags ,
2015-03-06 04:35:25 +03:00
token ) ;
/* send command to mc*/
return mc_send_command ( mc_io , & cmd ) ;
}
2017-11-17 16:38:29 +03:00
EXPORT_SYMBOL_GPL ( dpbp_enable ) ;
2015-03-06 04:35:25 +03:00
2015-09-24 22:26:54 +03:00
/**
* dpbp_disable ( ) - Disable the DPBP .
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ token : Token of DPBP object
*
* Return : ' 0 ' on Success ; Error code otherwise .
*/
2015-09-24 00:11:00 +03:00
int dpbp_disable ( 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 ( DPBP_CMDID_DISABLE ,
2015-09-24 00:11:00 +03:00
cmd_flags , token ) ;
2015-03-06 04:35:25 +03:00
/* send command to mc*/
return mc_send_command ( mc_io , & cmd ) ;
}
2017-11-17 16:38:29 +03:00
EXPORT_SYMBOL_GPL ( dpbp_disable ) ;
2015-03-06 04:35:25 +03:00
2015-09-24 22:26:54 +03:00
/**
* dpbp_reset ( ) - Reset the DPBP , 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 DPBP object
*
* Return : ' 0 ' on Success ; Error code otherwise .
*/
2015-09-24 00:11:00 +03:00
int dpbp_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 ( DPBP_CMDID_RESET ,
2015-09-24 00:11:00 +03:00
cmd_flags , token ) ;
2015-03-06 04:35:25 +03:00
/* send command to mc*/
return mc_send_command ( mc_io , & cmd ) ;
}
2017-11-17 16:38:29 +03:00
EXPORT_SYMBOL_GPL ( dpbp_reset ) ;
2015-03-06 04:35:25 +03:00
2015-09-24 22:26:54 +03:00
/**
* dpbp_get_attributes - Retrieve DPBP attributes .
*
* @ mc_io : Pointer to MC portal ' s I / O object
* @ cmd_flags : Command flags ; one or more of ' MC_CMD_FLAG_ '
* @ token : Token of DPBP object
* @ attr : Returned object ' s attributes
*
* Return : ' 0 ' on Success ; Error code otherwise .
*/
2015-03-06 04:35:25 +03:00
int dpbp_get_attributes ( 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
struct dpbp_attr * attr )
{
2018-03-15 20:05:31 +03:00
struct fsl_mc_command cmd = { 0 } ;
2016-06-23 00:40:52 +03:00
struct dpbp_rsp_get_attributes * rsp_params ;
2015-03-06 04:35:25 +03:00
int err ;
/* prepare command */
cmd . header = mc_encode_cmd_header ( DPBP_CMDID_GET_ATTR ,
2015-09-24 00:11:00 +03:00
cmd_flags , token ) ;
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
rsp_params = ( struct dpbp_rsp_get_attributes * ) cmd . params ;
attr - > bpid = le16_to_cpu ( rsp_params - > bpid ) ;
attr - > id = le32_to_cpu ( rsp_params - > id ) ;
2015-03-06 04:35:25 +03:00
return 0 ;
}
2017-11-17 16:38:29 +03:00
EXPORT_SYMBOL_GPL ( dpbp_get_attributes ) ;