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 object 14 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 15 * @dpmcp_id: DPMCP 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 dpmcp_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 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 object 56 * @mc_io: Pointer to MC portal's I/O object 57 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 58 * @token: Token of DPMCP object 59 * 60 * After this function is called, no further operations are 61 * allowed on the object without opening a new control session. 62 * 63 * Return: '0' on Success; Error code otherwise. 64 */ 65 int 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 object 82 * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 83 * @token: Token of DPMCP object 84 * 85 * Return: '0' on Success; Error code otherwise. 86 */ 87 int 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