File Index
Files and directories
Sign in
FILE

dpbp.c

File preview with syntax highlighting.

linux-6.19.14/drivers/bus/fsl-mc/dpbp.c 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 object
 14 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
 15 * @dpbp_id:	DPBP 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 dpbp_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 */
 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 object
 57 * @mc_io:	Pointer to MC portal's I/O object
 58 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
 59 * @token:	Token of DPBP object
 60 *
 61 * After this function is called, no further operations are
 62 * 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 object
 84 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
 85 * @token:	Token of DPBP object
 86 *
 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 object
107 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
108 * @token:	Token of DPBP object
109 *
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 object
130 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
131 * @token:	Token of DPBP object
132 *
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 object
154 * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
155 * @token:	Token of DPBP object
156 * @attr:	Returned object's attributes
157 *
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);
~/ Read-only file preview.