brintos

brintos / linux-shallow public Read only

0
0
Text · 2.3 KiB · 06c1dd8 Raw
104 lines · c
1// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)2/*3 * Copyright 2021 NXP4 *5 */6#include <linux/kernel.h>7#include <linux/fsl/mc.h>8 9#include "fsl-mc-private.h"10 11static int fsl_mc_get_open_cmd_id(const char *type)12{13	static const struct {14		int cmd_id;15		const char *type;16	} dev_ids[] = {17		{ DPRTC_CMDID_OPEN, "dprtc" },18		{ DPRC_CMDID_OPEN, "dprc" },19		{ DPNI_CMDID_OPEN, "dpni" },20		{ DPIO_CMDID_OPEN, "dpio" },21		{ DPSW_CMDID_OPEN, "dpsw" },22		{ DPBP_CMDID_OPEN, "dpbp" },23		{ DPCON_CMDID_OPEN, "dpcon" },24		{ DPMCP_CMDID_OPEN, "dpmcp" },25		{ DPMAC_CMDID_OPEN, "dpmac" },26		{ DPSECI_CMDID_OPEN, "dpseci" },27		{ DPDMUX_CMDID_OPEN, "dpdmux" },28		{ DPDCEI_CMDID_OPEN, "dpdcei" },29		{ DPAIOP_CMDID_OPEN, "dpaiop" },30		{ DPCI_CMDID_OPEN, "dpci" },31		{ DPDMAI_CMDID_OPEN, "dpdmai" },32		{ DPDBG_CMDID_OPEN, "dpdbg" },33		{ 0, NULL }34	};35	int i;36 37	for (i = 0; dev_ids[i].type; i++)38		if (!strcmp(dev_ids[i].type, type))39			return dev_ids[i].cmd_id;40 41	return -1;42}43 44int fsl_mc_obj_open(struct fsl_mc_io *mc_io,45		    u32 cmd_flags,46		    int obj_id,47		    char *obj_type,48		    u16 *token)49{50	struct fsl_mc_command cmd = { 0 };51	struct fsl_mc_obj_cmd_open *cmd_params;52	int err = 0;53	int cmd_id = fsl_mc_get_open_cmd_id(obj_type);54 55	if (cmd_id == -1)56		return -ENODEV;57 58	/* prepare command */59	cmd.header = mc_encode_cmd_header(cmd_id, cmd_flags, 0);60	cmd_params = (struct fsl_mc_obj_cmd_open *)cmd.params;61	cmd_params->obj_id = cpu_to_le32(obj_id);62 63	/* send command to mc*/64	err = mc_send_command(mc_io, &cmd);65	if (err)66		return err;67 68	/* retrieve response parameters */69	*token = mc_cmd_hdr_read_token(&cmd);70 71	return err;72}73EXPORT_SYMBOL_GPL(fsl_mc_obj_open);74 75int fsl_mc_obj_close(struct fsl_mc_io *mc_io,76		     u32 cmd_flags,77		     u16 token)78{79	struct fsl_mc_command cmd = { 0 };80 81	/* prepare command */82	cmd.header = mc_encode_cmd_header(OBJ_CMDID_CLOSE, cmd_flags,83					  token);84 85	/* send command to mc*/86	return mc_send_command(mc_io, &cmd);87}88EXPORT_SYMBOL_GPL(fsl_mc_obj_close);89 90int fsl_mc_obj_reset(struct fsl_mc_io *mc_io,91		     u32 cmd_flags,92		     u16 token)93{94	struct fsl_mc_command cmd = { 0 };95 96	/* prepare command */97	cmd.header = mc_encode_cmd_header(OBJ_CMDID_RESET, cmd_flags,98					  token);99 100	/* send command to mc*/101	return mc_send_command(mc_io, &cmd);102}103EXPORT_SYMBOL_GPL(fsl_mc_obj_reset);104