Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
0002 /*
0003  * Copyright 2021 NXP
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     /* prepare command */
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     /* send command to mc*/
0064     err = mc_send_command(mc_io, &cmd);
0065     if (err)
0066         return err;
0067 
0068     /* retrieve response parameters */
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     /* prepare command */
0082     cmd.header = mc_encode_cmd_header(OBJ_CMDID_CLOSE, cmd_flags,
0083                       token);
0084 
0085     /* send command to mc*/
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     /* prepare command */
0097     cmd.header = mc_encode_cmd_header(OBJ_CMDID_RESET, cmd_flags,
0098                       token);
0099 
0100     /* send command to mc*/
0101     return mc_send_command(mc_io, &cmd);
0102 }
0103 EXPORT_SYMBOL_GPL(fsl_mc_obj_reset);