cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

obj-api.c (2327B)


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