123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- /*
- * Freescale Layerscape MC I/O wrapper
- *
- * Copyright (C) 2013-2015 Freescale Semiconductor, Inc.
- * Author: German Rivera <German.Rivera@freescale.com>
- *
- * SPDX-License-Identifier: GPL-2.0+
- */
- #include <fsl-mc/fsl_mc_sys.h>
- #include <fsl-mc/fsl_mc_cmd.h>
- #include <fsl-mc/fsl_dprc.h>
- int dprc_get_container_id(struct fsl_mc_io *mc_io,
- uint32_t cmd_flags,
- int *container_id)
- {
- struct mc_command cmd = { 0 };
- int err;
- /* prepare command */
- cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONT_ID,
- cmd_flags,
- 0);
- /* send command to mc*/
- err = mc_send_command(mc_io, &cmd);
- if (err)
- return err;
- /* retrieve response parameters */
- DPRC_RSP_GET_CONTAINER_ID(cmd, *container_id);
- return 0;
- }
- int dprc_open(struct fsl_mc_io *mc_io,
- uint32_t cmd_flags,
- int container_id,
- uint16_t *token)
- {
- struct mc_command cmd = { 0 };
- int err;
- /* prepare command */
- cmd.header = mc_encode_cmd_header(DPRC_CMDID_OPEN, cmd_flags,
- 0);
- DPRC_CMD_OPEN(cmd, container_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.header);
- return 0;
- }
- int dprc_close(struct fsl_mc_io *mc_io,
- uint32_t cmd_flags,
- uint16_t token)
- {
- struct mc_command cmd = { 0 };
- /* prepare command */
- cmd.header = mc_encode_cmd_header(DPRC_CMDID_CLOSE, cmd_flags,
- token);
- /* send command to mc*/
- return mc_send_command(mc_io, &cmd);
- }
- int dprc_create_container(struct fsl_mc_io *mc_io,
- uint32_t cmd_flags,
- uint16_t token,
- struct dprc_cfg *cfg,
- int *child_container_id,
- uint64_t *child_portal_paddr)
- {
- struct mc_command cmd = { 0 };
- int err;
- /* prepare command */
- DPRC_CMD_CREATE_CONTAINER(cmd, cfg);
- cmd.header = mc_encode_cmd_header(DPRC_CMDID_CREATE_CONT,
- cmd_flags,
- token);
- /* send command to mc*/
- err = mc_send_command(mc_io, &cmd);
- if (err)
- return err;
- /* retrieve response parameters */
- DPRC_RSP_CREATE_CONTAINER(cmd, *child_container_id,
- *child_portal_paddr);
- return 0;
- }
- int dprc_destroy_container(struct fsl_mc_io *mc_io,
- uint32_t cmd_flags,
- uint16_t token,
- int child_container_id)
- {
- struct mc_command cmd = { 0 };
- /* prepare command */
- cmd.header = mc_encode_cmd_header(DPRC_CMDID_DESTROY_CONT,
- cmd_flags,
- token);
- DPRC_CMD_DESTROY_CONTAINER(cmd, child_container_id);
- /* send command to mc*/
- return mc_send_command(mc_io, &cmd);
- }
- int dprc_reset_container(struct fsl_mc_io *mc_io,
- uint32_t cmd_flags,
- uint16_t token,
- int child_container_id)
- {
- struct mc_command cmd = { 0 };
- /* prepare command */
- cmd.header = mc_encode_cmd_header(DPRC_CMDID_RESET_CONT,
- cmd_flags,
- token);
- DPRC_CMD_RESET_CONTAINER(cmd, child_container_id);
- /* send command to mc*/
- return mc_send_command(mc_io, &cmd);
- }
- int dprc_get_attributes(struct fsl_mc_io *mc_io,
- uint32_t cmd_flags,
- uint16_t token,
- struct dprc_attributes *attr)
- {
- struct mc_command cmd = { 0 };
- int err;
- /* prepare command */
- cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_ATTR,
- cmd_flags,
- token);
- /* send command to mc*/
- err = mc_send_command(mc_io, &cmd);
- if (err)
- return err;
- /* retrieve response parameters */
- DPRC_RSP_GET_ATTRIBUTES(cmd, attr);
- return 0;
- }
- int dprc_get_obj_count(struct fsl_mc_io *mc_io,
- uint32_t cmd_flags,
- uint16_t token,
- int *obj_count)
- {
- struct mc_command cmd = { 0 };
- int err;
- /* prepare command */
- cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_COUNT,
- cmd_flags,
- token);
- /* send command to mc*/
- err = mc_send_command(mc_io, &cmd);
- if (err)
- return err;
- /* retrieve response parameters */
- DPRC_RSP_GET_OBJ_COUNT(cmd, *obj_count);
- return 0;
- }
- int dprc_get_obj(struct fsl_mc_io *mc_io,
- uint32_t cmd_flags,
- uint16_t token,
- int obj_index,
- struct dprc_obj_desc *obj_desc)
- {
- struct mc_command cmd = { 0 };
- int err;
- /* prepare command */
- cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ,
- cmd_flags,
- token);
- DPRC_CMD_GET_OBJ(cmd, obj_index);
- /* send command to mc*/
- err = mc_send_command(mc_io, &cmd);
- if (err)
- return err;
- /* retrieve response parameters */
- DPRC_RSP_GET_OBJ(cmd, obj_desc);
- return 0;
- }
- int dprc_get_res_count(struct fsl_mc_io *mc_io,
- uint32_t cmd_flags,
- uint16_t token,
- char *type,
- int *res_count)
- {
- struct mc_command cmd = { 0 };
- int err;
- *res_count = 0;
- /* prepare command */
- cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_COUNT,
- cmd_flags,
- token);
- DPRC_CMD_GET_RES_COUNT(cmd, type);
- /* send command to mc*/
- err = mc_send_command(mc_io, &cmd);
- if (err)
- return err;
- /* retrieve response parameters */
- DPRC_RSP_GET_RES_COUNT(cmd, *res_count);
- return 0;
- }
- int dprc_get_res_ids(struct fsl_mc_io *mc_io,
- uint32_t cmd_flags,
- uint16_t token,
- char *type,
- struct dprc_res_ids_range_desc *range_desc)
- {
- struct mc_command cmd = { 0 };
- int err;
- /* prepare command */
- cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_IDS,
- cmd_flags,
- token);
- DPRC_CMD_GET_RES_IDS(cmd, range_desc, type);
- /* send command to mc*/
- err = mc_send_command(mc_io, &cmd);
- if (err)
- return err;
- /* retrieve response parameters */
- DPRC_RSP_GET_RES_IDS(cmd, range_desc);
- return 0;
- }
- int dprc_get_obj_region(struct fsl_mc_io *mc_io,
- uint32_t cmd_flags,
- uint16_t token,
- char *obj_type,
- int obj_id,
- uint8_t region_index,
- struct dprc_region_desc *region_desc)
- {
- struct mc_command cmd = { 0 };
- int err;
- /* prepare command */
- cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG,
- cmd_flags,
- token);
- DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index);
- /* send command to mc*/
- err = mc_send_command(mc_io, &cmd);
- if (err)
- return err;
- /* retrieve response parameters */
- DPRC_RSP_GET_OBJ_REGION(cmd, region_desc);
- return 0;
- }
- int dprc_connect(struct fsl_mc_io *mc_io,
- uint32_t cmd_flags,
- uint16_t token,
- const struct dprc_endpoint *endpoint1,
- const struct dprc_endpoint *endpoint2,
- const struct dprc_connection_cfg *cfg)
- {
- struct mc_command cmd = { 0 };
- /* prepare command */
- cmd.header = mc_encode_cmd_header(DPRC_CMDID_CONNECT,
- cmd_flags,
- token);
- DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg);
- /* send command to mc*/
- return mc_send_command(mc_io, &cmd);
- }
- int dprc_disconnect(struct fsl_mc_io *mc_io,
- uint32_t cmd_flags,
- uint16_t token,
- const struct dprc_endpoint *endpoint)
- {
- struct mc_command cmd = { 0 };
- /* prepare command */
- cmd.header = mc_encode_cmd_header(DPRC_CMDID_DISCONNECT,
- cmd_flags,
- token);
- DPRC_CMD_DISCONNECT(cmd, endpoint);
- /* send command to mc*/
- return mc_send_command(mc_io, &cmd);
- }
- int dprc_get_connection(struct fsl_mc_io *mc_io,
- uint32_t cmd_flags,
- uint16_t token,
- const struct dprc_endpoint *endpoint1,
- struct dprc_endpoint *endpoint2,
- int *state)
- {
- struct mc_command cmd = { 0 };
- int err;
- /* prepare command */
- cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONNECTION,
- cmd_flags,
- token);
- DPRC_CMD_GET_CONNECTION(cmd, endpoint1);
- /* send command to mc*/
- err = mc_send_command(mc_io, &cmd);
- if (err)
- return err;
- /* retrieve response parameters */
- DPRC_RSP_GET_CONNECTION(cmd, endpoint2, *state);
- return 0;
- }
|