Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/bus/fsl-mc/obj-api.c
26282 views
1
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
2
/*
3
* Copyright 2021 NXP
4
*
5
*/
6
#include <linux/kernel.h>
7
#include <linux/fsl/mc.h>
8
9
#include "fsl-mc-private.h"
10
11
static int fsl_mc_get_open_cmd_id(const char *type)
12
{
13
static const struct {
14
int cmd_id;
15
const char *type;
16
} dev_ids[] = {
17
{ DPRTC_CMDID_OPEN, "dprtc" },
18
{ DPRC_CMDID_OPEN, "dprc" },
19
{ DPNI_CMDID_OPEN, "dpni" },
20
{ DPIO_CMDID_OPEN, "dpio" },
21
{ DPSW_CMDID_OPEN, "dpsw" },
22
{ DPBP_CMDID_OPEN, "dpbp" },
23
{ DPCON_CMDID_OPEN, "dpcon" },
24
{ DPMCP_CMDID_OPEN, "dpmcp" },
25
{ DPMAC_CMDID_OPEN, "dpmac" },
26
{ DPSECI_CMDID_OPEN, "dpseci" },
27
{ DPDMUX_CMDID_OPEN, "dpdmux" },
28
{ DPDCEI_CMDID_OPEN, "dpdcei" },
29
{ DPAIOP_CMDID_OPEN, "dpaiop" },
30
{ DPCI_CMDID_OPEN, "dpci" },
31
{ DPDMAI_CMDID_OPEN, "dpdmai" },
32
{ DPDBG_CMDID_OPEN, "dpdbg" },
33
{ 0, NULL }
34
};
35
int i;
36
37
for (i = 0; dev_ids[i].type; i++)
38
if (!strcmp(dev_ids[i].type, type))
39
return dev_ids[i].cmd_id;
40
41
return -1;
42
}
43
44
int fsl_mc_obj_open(struct fsl_mc_io *mc_io,
45
u32 cmd_flags,
46
int obj_id,
47
char *obj_type,
48
u16 *token)
49
{
50
struct fsl_mc_command cmd = { 0 };
51
struct fsl_mc_obj_cmd_open *cmd_params;
52
int err = 0;
53
int cmd_id = fsl_mc_get_open_cmd_id(obj_type);
54
55
if (cmd_id == -1)
56
return -ENODEV;
57
58
/* prepare command */
59
cmd.header = mc_encode_cmd_header(cmd_id, cmd_flags, 0);
60
cmd_params = (struct fsl_mc_obj_cmd_open *)cmd.params;
61
cmd_params->obj_id = cpu_to_le32(obj_id);
62
63
/* send command to mc*/
64
err = mc_send_command(mc_io, &cmd);
65
if (err)
66
return err;
67
68
/* retrieve response parameters */
69
*token = mc_cmd_hdr_read_token(&cmd);
70
71
return err;
72
}
73
EXPORT_SYMBOL_GPL(fsl_mc_obj_open);
74
75
int fsl_mc_obj_close(struct fsl_mc_io *mc_io,
76
u32 cmd_flags,
77
u16 token)
78
{
79
struct fsl_mc_command cmd = { 0 };
80
81
/* prepare command */
82
cmd.header = mc_encode_cmd_header(OBJ_CMDID_CLOSE, cmd_flags,
83
token);
84
85
/* send command to mc*/
86
return mc_send_command(mc_io, &cmd);
87
}
88
EXPORT_SYMBOL_GPL(fsl_mc_obj_close);
89
90
int fsl_mc_obj_reset(struct fsl_mc_io *mc_io,
91
u32 cmd_flags,
92
u16 token)
93
{
94
struct fsl_mc_command cmd = { 0 };
95
96
/* prepare command */
97
cmd.header = mc_encode_cmd_header(OBJ_CMDID_RESET, cmd_flags,
98
token);
99
100
/* send command to mc*/
101
return mc_send_command(mc_io, &cmd);
102
}
103
EXPORT_SYMBOL_GPL(fsl_mc_obj_reset);
104
105