// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) /* * Copyright 2021 NXP * */ #include #include #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);