0001
0002
0003
0004
0005
0006 #include <linux/kernel.h>
0007 #include <linux/fsl/mc.h>
0008
0009 #include "fsl-mc-private.h"
0010
0011 static int fsl_mc_get_open_cmd_id(const char *type)
0012 {
0013 static const struct {
0014 int cmd_id;
0015 const char *type;
0016 } dev_ids[] = {
0017 { DPRTC_CMDID_OPEN, "dprtc" },
0018 { DPRC_CMDID_OPEN, "dprc" },
0019 { DPNI_CMDID_OPEN, "dpni" },
0020 { DPIO_CMDID_OPEN, "dpio" },
0021 { DPSW_CMDID_OPEN, "dpsw" },
0022 { DPBP_CMDID_OPEN, "dpbp" },
0023 { DPCON_CMDID_OPEN, "dpcon" },
0024 { DPMCP_CMDID_OPEN, "dpmcp" },
0025 { DPMAC_CMDID_OPEN, "dpmac" },
0026 { DPSECI_CMDID_OPEN, "dpseci" },
0027 { DPDMUX_CMDID_OPEN, "dpdmux" },
0028 { DPDCEI_CMDID_OPEN, "dpdcei" },
0029 { DPAIOP_CMDID_OPEN, "dpaiop" },
0030 { DPCI_CMDID_OPEN, "dpci" },
0031 { DPDMAI_CMDID_OPEN, "dpdmai" },
0032 { DPDBG_CMDID_OPEN, "dpdbg" },
0033 { 0, NULL }
0034 };
0035 int i;
0036
0037 for (i = 0; dev_ids[i].type; i++)
0038 if (!strcmp(dev_ids[i].type, type))
0039 return dev_ids[i].cmd_id;
0040
0041 return -1;
0042 }
0043
0044 int fsl_mc_obj_open(struct fsl_mc_io *mc_io,
0045 u32 cmd_flags,
0046 int obj_id,
0047 char *obj_type,
0048 u16 *token)
0049 {
0050 struct fsl_mc_command cmd = { 0 };
0051 struct fsl_mc_obj_cmd_open *cmd_params;
0052 int err = 0;
0053 int cmd_id = fsl_mc_get_open_cmd_id(obj_type);
0054
0055 if (cmd_id == -1)
0056 return -ENODEV;
0057
0058
0059 cmd.header = mc_encode_cmd_header(cmd_id, cmd_flags, 0);
0060 cmd_params = (struct fsl_mc_obj_cmd_open *)cmd.params;
0061 cmd_params->obj_id = cpu_to_le32(obj_id);
0062
0063
0064 err = mc_send_command(mc_io, &cmd);
0065 if (err)
0066 return err;
0067
0068
0069 *token = mc_cmd_hdr_read_token(&cmd);
0070
0071 return err;
0072 }
0073 EXPORT_SYMBOL_GPL(fsl_mc_obj_open);
0074
0075 int fsl_mc_obj_close(struct fsl_mc_io *mc_io,
0076 u32 cmd_flags,
0077 u16 token)
0078 {
0079 struct fsl_mc_command cmd = { 0 };
0080
0081
0082 cmd.header = mc_encode_cmd_header(OBJ_CMDID_CLOSE, cmd_flags,
0083 token);
0084
0085
0086 return mc_send_command(mc_io, &cmd);
0087 }
0088 EXPORT_SYMBOL_GPL(fsl_mc_obj_close);
0089
0090 int fsl_mc_obj_reset(struct fsl_mc_io *mc_io,
0091 u32 cmd_flags,
0092 u16 token)
0093 {
0094 struct fsl_mc_command cmd = { 0 };
0095
0096
0097 cmd.header = mc_encode_cmd_header(OBJ_CMDID_RESET, cmd_flags,
0098 token);
0099
0100
0101 return mc_send_command(mc_io, &cmd);
0102 }
0103 EXPORT_SYMBOL_GPL(fsl_mc_obj_reset);