| // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) | |
| /* | |
| * Copyright 2021 NXP | |
| * | |
| */ | |
| #include <linux/kernel.h> | |
| #include <linux/fsl/mc.h> | |
| #include "fsl-mc-private.h" | |
| static int fsl_mc_get_open_cmd_id(const char *type) | |
| { | |
| static const struct { | |
| int cmd_id; | |
| const char *type; | |
| } dev_ids[] = { | |
| { DPRTC_CMDID_OPEN, "dprtc" }, | |
| { DPRC_CMDID_OPEN, "dprc" }, | |
| { DPNI_CMDID_OPEN, "dpni" }, | |
| { DPIO_CMDID_OPEN, "dpio" }, | |
| { DPSW_CMDID_OPEN, "dpsw" }, | |
| { DPBP_CMDID_OPEN, "dpbp" }, | |
| { DPCON_CMDID_OPEN, "dpcon" }, | |
| { DPMCP_CMDID_OPEN, "dpmcp" }, | |
| { DPMAC_CMDID_OPEN, "dpmac" }, | |
| { DPSECI_CMDID_OPEN, "dpseci" }, | |
| { DPDMUX_CMDID_OPEN, "dpdmux" }, | |
| { DPDCEI_CMDID_OPEN, "dpdcei" }, | |
| { DPAIOP_CMDID_OPEN, "dpaiop" }, | |
| { DPCI_CMDID_OPEN, "dpci" }, | |
| { DPDMAI_CMDID_OPEN, "dpdmai" }, | |
| { DPDBG_CMDID_OPEN, "dpdbg" }, | |
| { 0, NULL } | |
| }; | |
| int i; | |
| for (i = 0; dev_ids[i].type; i++) | |
| if (!strcmp(dev_ids[i].type, type)) | |
| return dev_ids[i].cmd_id; | |
| return -1; | |
| } | |
| int fsl_mc_obj_open(struct fsl_mc_io *mc_io, | |
| u32 cmd_flags, | |
| int obj_id, | |
| char *obj_type, | |
| u16 *token) | |
| { | |
| struct fsl_mc_command cmd = { 0 }; | |
| struct fsl_mc_obj_cmd_open *cmd_params; | |
| int err = 0; | |
| int cmd_id = fsl_mc_get_open_cmd_id(obj_type); | |
| if (cmd_id == -1) | |
| return -ENODEV; | |
| /* prepare command */ | |
| cmd.header = mc_encode_cmd_header(cmd_id, cmd_flags, 0); | |
| cmd_params = (struct fsl_mc_obj_cmd_open *)cmd.params; | |
| cmd_params->obj_id = cpu_to_le32(obj_id); | |
| /* send command to mc*/ | |
| err = mc_send_command(mc_io, &cmd); | |
| if (err) | |
| return err; | |
| /* retrieve response parameters */ | |
| *token = mc_cmd_hdr_read_token(&cmd); | |
| return err; | |
| } | |
| EXPORT_SYMBOL_GPL(fsl_mc_obj_open); | |
| int fsl_mc_obj_close(struct fsl_mc_io *mc_io, | |
| u32 cmd_flags, | |
| u16 token) | |
| { | |
| struct fsl_mc_command cmd = { 0 }; | |
| /* prepare command */ | |
| cmd.header = mc_encode_cmd_header(OBJ_CMDID_CLOSE, cmd_flags, | |
| token); | |
| /* send command to mc*/ | |
| return mc_send_command(mc_io, &cmd); | |
| } | |
| EXPORT_SYMBOL_GPL(fsl_mc_obj_close); | |
| int fsl_mc_obj_reset(struct fsl_mc_io *mc_io, | |
| u32 cmd_flags, | |
| u16 token) | |
| { | |
| struct fsl_mc_command cmd = { 0 }; | |
| /* prepare command */ | |
| cmd.header = mc_encode_cmd_header(OBJ_CMDID_RESET, cmd_flags, | |
| token); | |
| /* send command to mc*/ | |
| return mc_send_command(mc_io, &cmd); | |
| } | |
| EXPORT_SYMBOL_GPL(fsl_mc_obj_reset); |