1 // SPDX-License-Identifier: GPL-2.0+
3 * Freescale Layerscape MC I/O wrapper
5 * Copyright 2015-2016 Freescale Semiconductor, Inc.
7 * Author: Prabhakar Kushwaha <prabhakar@freescale.com>
10 #include <fsl-mc/fsl_mc_sys.h>
11 #include <fsl-mc/fsl_mc_cmd.h>
12 #include <fsl-mc/fsl_dpmac.h>
14 int dpmac_open(struct fsl_mc_io *mc_io,
19 struct mc_command cmd = { 0 };
23 cmd.header = mc_encode_cmd_header(DPMAC_CMDID_OPEN,
26 DPMAC_CMD_OPEN(cmd, dpmac_id);
28 /* send command to mc*/
29 err = mc_send_command(mc_io, &cmd);
33 /* retrieve response parameters */
34 *token = MC_CMD_HDR_READ_TOKEN(cmd.header);
39 int dpmac_close(struct fsl_mc_io *mc_io,
43 struct mc_command cmd = { 0 };
46 cmd.header = mc_encode_cmd_header(DPMAC_CMDID_CLOSE, cmd_flags,
49 /* send command to mc*/
50 return mc_send_command(mc_io, &cmd);
53 int dpmac_create(struct fsl_mc_io *mc_io,
56 const struct dpmac_cfg *cfg,
59 struct mc_command cmd = { 0 };
63 cmd.header = mc_encode_cmd_header(DPMAC_CMDID_CREATE,
66 DPMAC_CMD_CREATE(cmd, cfg);
68 /* send command to mc*/
69 err = mc_send_command(mc_io, &cmd);
73 /* retrieve response parameters */
74 MC_CMD_READ_OBJ_ID(cmd, *obj_id);
79 int dpmac_destroy(struct fsl_mc_io *mc_io,
84 struct mc_command cmd = { 0 };
87 cmd.header = mc_encode_cmd_header(DPMAC_CMDID_DESTROY,
91 /* set object id to destroy */
92 CMD_DESTROY_SET_OBJ_ID_PARAM0(cmd, obj_id);
94 /* send command to mc*/
95 return mc_send_command(mc_io, &cmd);
98 int dpmac_get_attributes(struct fsl_mc_io *mc_io,
101 struct dpmac_attr *attr)
103 struct mc_command cmd = { 0 };
106 /* prepare command */
107 cmd.header = mc_encode_cmd_header(DPMAC_CMDID_GET_ATTR,
111 /* send command to mc*/
112 err = mc_send_command(mc_io, &cmd);
116 /* retrieve response parameters */
117 DPMAC_RSP_GET_ATTRIBUTES(cmd, attr);
122 int dpmac_mdio_read(struct fsl_mc_io *mc_io,
125 struct dpmac_mdio_cfg *cfg)
127 struct mc_command cmd = { 0 };
130 /* prepare command */
131 cmd.header = mc_encode_cmd_header(DPMAC_CMDID_MDIO_READ,
134 DPMAC_CMD_MDIO_READ(cmd, cfg);
136 /* send command to mc*/
137 err = mc_send_command(mc_io, &cmd);
141 /* retrieve response parameters */
142 DPMAC_RSP_MDIO_READ(cmd, cfg->data);
147 int dpmac_mdio_write(struct fsl_mc_io *mc_io,
150 struct dpmac_mdio_cfg *cfg)
152 struct mc_command cmd = { 0 };
154 /* prepare command */
155 cmd.header = mc_encode_cmd_header(DPMAC_CMDID_MDIO_WRITE,
158 DPMAC_CMD_MDIO_WRITE(cmd, cfg);
160 /* send command to mc*/
161 return mc_send_command(mc_io, &cmd);
164 int dpmac_get_link_cfg(struct fsl_mc_io *mc_io,
167 struct dpmac_link_cfg *cfg)
169 struct mc_command cmd = { 0 };
172 /* prepare command */
173 cmd.header = mc_encode_cmd_header(DPMAC_CMDID_GET_LINK_CFG,
177 /* send command to mc*/
178 err = mc_send_command(mc_io, &cmd);
182 DPMAC_RSP_GET_LINK_CFG(cmd, cfg);
187 int dpmac_set_link_state(struct fsl_mc_io *mc_io,
190 struct dpmac_link_state *link_state)
192 struct mc_command cmd = { 0 };
194 /* prepare command */
195 cmd.header = mc_encode_cmd_header(DPMAC_CMDID_SET_LINK_STATE,
198 DPMAC_CMD_SET_LINK_STATE(cmd, link_state);
200 /* send command to mc*/
201 return mc_send_command(mc_io, &cmd);
204 int dpmac_get_counter(struct fsl_mc_io *mc_io,
207 enum dpmac_counter type,
210 struct mc_command cmd = { 0 };
213 /* prepare command */
214 cmd.header = mc_encode_cmd_header(DPMAC_CMDID_GET_COUNTER,
217 DPMAC_CMD_GET_COUNTER(cmd, type);
219 /* send command to mc*/
220 err = mc_send_command(mc_io, &cmd);
224 DPMAC_RSP_GET_COUNTER(cmd, *counter);
229 int dpmac_get_api_version(struct fsl_mc_io *mc_io,
234 struct mc_command cmd = { 0 };
237 /* prepare command */
238 cmd.header = mc_encode_cmd_header(DPMAC_CMDID_GET_API_VERSION,
241 /* send command to mc */
242 err = mc_send_command(mc_io, &cmd);
246 /* retrieve response parameters */
247 mc_cmd_read_api_version(&cmd, major_ver, minor_ver);