brintos

brintos / linux-shallow public Read only

0
0
Text · 4.7 KiB · 9003cd3 Raw
186 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 * dpbp_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 * @dpbp_id:	DPBP 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 dpbp_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 dpbp_open(struct fsl_mc_io *mc_io,29	      u32 cmd_flags,30	      int dpbp_id,31	      u16 *token)32{33	struct fsl_mc_command cmd = { 0 };34	struct dpbp_cmd_open *cmd_params;35	int err;36 37	/* prepare command */38	cmd.header = mc_encode_cmd_header(DPBP_CMDID_OPEN,39					  cmd_flags, 0);40	cmd_params = (struct dpbp_cmd_open *)cmd.params;41	cmd_params->dpbp_id = cpu_to_le32(dpbp_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}53EXPORT_SYMBOL_GPL(dpbp_open);54 55/**56 * dpbp_close() - Close the control session of the object57 * @mc_io:	Pointer to MC portal's I/O object58 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'59 * @token:	Token of DPBP object60 *61 * After this function is called, no further operations are62 * allowed on the object without opening a new control session.63 *64 * Return:	'0' on Success; Error code otherwise.65 */66int dpbp_close(struct fsl_mc_io *mc_io,67	       u32 cmd_flags,68	       u16 token)69{70	struct fsl_mc_command cmd = { 0 };71 72	/* prepare command */73	cmd.header = mc_encode_cmd_header(DPBP_CMDID_CLOSE, cmd_flags,74					  token);75 76	/* send command to mc*/77	return mc_send_command(mc_io, &cmd);78}79EXPORT_SYMBOL_GPL(dpbp_close);80 81/**82 * dpbp_enable() - Enable the DPBP.83 * @mc_io:	Pointer to MC portal's I/O object84 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'85 * @token:	Token of DPBP object86 *87 * Return:	'0' on Success; Error code otherwise.88 */89int dpbp_enable(struct fsl_mc_io *mc_io,90		u32 cmd_flags,91		u16 token)92{93	struct fsl_mc_command cmd = { 0 };94 95	/* prepare command */96	cmd.header = mc_encode_cmd_header(DPBP_CMDID_ENABLE, cmd_flags,97					  token);98 99	/* send command to mc*/100	return mc_send_command(mc_io, &cmd);101}102EXPORT_SYMBOL_GPL(dpbp_enable);103 104/**105 * dpbp_disable() - Disable the DPBP.106 * @mc_io:	Pointer to MC portal's I/O object107 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'108 * @token:	Token of DPBP object109 *110 * Return:	'0' on Success; Error code otherwise.111 */112int dpbp_disable(struct fsl_mc_io *mc_io,113		 u32 cmd_flags,114		 u16 token)115{116	struct fsl_mc_command cmd = { 0 };117 118	/* prepare command */119	cmd.header = mc_encode_cmd_header(DPBP_CMDID_DISABLE,120					  cmd_flags, token);121 122	/* send command to mc*/123	return mc_send_command(mc_io, &cmd);124}125EXPORT_SYMBOL_GPL(dpbp_disable);126 127/**128 * dpbp_reset() - Reset the DPBP, returns the object to initial state.129 * @mc_io:	Pointer to MC portal's I/O object130 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'131 * @token:	Token of DPBP object132 *133 * Return:	'0' on Success; Error code otherwise.134 */135int dpbp_reset(struct fsl_mc_io *mc_io,136	       u32 cmd_flags,137	       u16 token)138{139	struct fsl_mc_command cmd = { 0 };140 141	/* prepare command */142	cmd.header = mc_encode_cmd_header(DPBP_CMDID_RESET,143					  cmd_flags, token);144 145	/* send command to mc*/146	return mc_send_command(mc_io, &cmd);147}148EXPORT_SYMBOL_GPL(dpbp_reset);149 150/**151 * dpbp_get_attributes - Retrieve DPBP attributes.152 *153 * @mc_io:	Pointer to MC portal's I/O object154 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'155 * @token:	Token of DPBP object156 * @attr:	Returned object's attributes157 *158 * Return:	'0' on Success; Error code otherwise.159 */160int dpbp_get_attributes(struct fsl_mc_io *mc_io,161			u32 cmd_flags,162			u16 token,163			struct dpbp_attr *attr)164{165	struct fsl_mc_command cmd = { 0 };166	struct dpbp_rsp_get_attributes *rsp_params;167	int err;168 169	/* prepare command */170	cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_ATTR,171					  cmd_flags, token);172 173	/* send command to mc*/174	err = mc_send_command(mc_io, &cmd);175	if (err)176		return err;177 178	/* retrieve response parameters */179	rsp_params = (struct dpbp_rsp_get_attributes *)cmd.params;180	attr->bpid = le16_to_cpu(rsp_params->bpid);181	attr->id = le32_to_cpu(rsp_params->id);182 183	return 0;184}185EXPORT_SYMBOL_GPL(dpbp_get_attributes);186