1a2a55e51SPrabhakar Kushwaha /* 2a2a55e51SPrabhakar Kushwaha * Freescale Layerscape MC I/O wrapper 3a2a55e51SPrabhakar Kushwaha * 4a2a55e51SPrabhakar Kushwaha * Copyright (C) 2013-2015 Freescale Semiconductor, Inc. 5a2a55e51SPrabhakar Kushwaha * Author: German Rivera <German.Rivera@freescale.com> 6a2a55e51SPrabhakar Kushwaha * 7a2a55e51SPrabhakar Kushwaha * SPDX-License-Identifier: GPL-2.0+ 8a2a55e51SPrabhakar Kushwaha */ 9a2a55e51SPrabhakar Kushwaha #ifndef _FSL_DPRC_H 10a2a55e51SPrabhakar Kushwaha #define _FSL_DPRC_H 11a2a55e51SPrabhakar Kushwaha 12a2a55e51SPrabhakar Kushwaha /* DPRC Version */ 1387457d11SPrabhakar Kushwaha #define DPRC_VER_MAJOR 5 14a2a55e51SPrabhakar Kushwaha #define DPRC_VER_MINOR 0 15a2a55e51SPrabhakar Kushwaha 16a2a55e51SPrabhakar Kushwaha /* Command IDs */ 17a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_CLOSE 0x800 18a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_OPEN 0x805 19*1ebbe4fcSPrabhakar Kushwaha #define DPRC_CMDID_CREATE 0x905 20a2a55e51SPrabhakar Kushwaha 21a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_ATTR 0x004 22a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_RESET_CONT 0x005 23a2a55e51SPrabhakar Kushwaha 24*1ebbe4fcSPrabhakar Kushwaha #define DPRC_CMDID_CREATE_CONT 0x151 25*1ebbe4fcSPrabhakar Kushwaha #define DPRC_CMDID_DESTROY_CONT 0x152 26a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_CONT_ID 0x830 27a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_OBJ_COUNT 0x159 28a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_OBJ 0x15A 29a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_RES_COUNT 0x15B 30a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_RES_IDS 0x15C 31a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_OBJ_REG 0x15E 32a2a55e51SPrabhakar Kushwaha 33a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_CONNECT 0x167 34a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_DISCONNECT 0x168 35a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_CONNECTION 0x16C 36a2a55e51SPrabhakar Kushwaha 37a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 38a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_CONTAINER_ID(cmd, container_id) \ 39a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, container_id) 40a2a55e51SPrabhakar Kushwaha 41a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 42a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_OPEN(cmd, container_id) \ 43a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, container_id) 44a2a55e51SPrabhakar Kushwaha 45a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 46*1ebbe4fcSPrabhakar Kushwaha #define DPRC_CMD_CREATE_CONTAINER(cmd, cfg) \ 47*1ebbe4fcSPrabhakar Kushwaha do { \ 48*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 16, uint16_t, cfg->icid); \ 49*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, uint32_t, cfg->options); \ 50*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 32, int, cfg->portal_id); \ 51*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, cfg->label[0]);\ 52*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, cfg->label[1]);\ 53*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, cfg->label[2]);\ 54*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, cfg->label[3]);\ 55*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, cfg->label[4]);\ 56*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, cfg->label[5]);\ 57*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, cfg->label[6]);\ 58*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, cfg->label[7]);\ 59*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 8, char, cfg->label[8]);\ 60*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 8, char, cfg->label[9]);\ 61*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 16, 8, char, cfg->label[10]);\ 62*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 24, 8, char, cfg->label[11]);\ 63*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 8, char, cfg->label[12]);\ 64*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 40, 8, char, cfg->label[13]);\ 65*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 48, 8, char, cfg->label[14]);\ 66*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 56, 8, char, cfg->label[15]);\ 67*1ebbe4fcSPrabhakar Kushwaha } while (0) 68*1ebbe4fcSPrabhakar Kushwaha 69*1ebbe4fcSPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 70*1ebbe4fcSPrabhakar Kushwaha #define DPRC_RSP_CREATE_CONTAINER(cmd, child_container_id, child_portal_offset)\ 71*1ebbe4fcSPrabhakar Kushwaha do { \ 72*1ebbe4fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 32, int, child_container_id); \ 73*1ebbe4fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 64, uint64_t, child_portal_offset);\ 74*1ebbe4fcSPrabhakar Kushwaha } while (0) 75*1ebbe4fcSPrabhakar Kushwaha 76*1ebbe4fcSPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 77*1ebbe4fcSPrabhakar Kushwaha #define DPRC_CMD_DESTROY_CONTAINER(cmd, child_container_id) \ 78*1ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, child_container_id) 79*1ebbe4fcSPrabhakar Kushwaha 80*1ebbe4fcSPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 81a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_RESET_CONTAINER(cmd, child_container_id) \ 82a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, child_container_id) 83a2a55e51SPrabhakar Kushwaha 84a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 85a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_ATTRIBUTES(cmd, attr) \ 86a2a55e51SPrabhakar Kushwaha do { \ 87a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, attr->container_id); \ 88a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 16, uint16_t, attr->icid); \ 89a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 32, uint32_t, attr->options);\ 90a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 32, int, attr->portal_id); \ 91a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 16, uint16_t, attr->version.major);\ 92a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 16, 16, uint16_t, attr->version.minor);\ 93a2a55e51SPrabhakar Kushwaha } while (0) 94a2a55e51SPrabhakar Kushwaha 95a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 96a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_OBJ_COUNT(cmd, obj_count) \ 97a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 32, int, obj_count) 98a2a55e51SPrabhakar Kushwaha 99a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 100a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_OBJ(cmd, obj_index) \ 101a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, obj_index) 102a2a55e51SPrabhakar Kushwaha 103a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 104a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_OBJ(cmd, obj_desc) \ 105a2a55e51SPrabhakar Kushwaha do { \ 106a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 32, int, obj_desc->id); \ 107a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 16, uint16_t, obj_desc->vendor); \ 108a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 16, 8, uint8_t, obj_desc->irq_count); \ 109a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 24, 8, uint8_t, obj_desc->region_count); \ 110a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 32, uint32_t, obj_desc->state);\ 111a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 16, uint16_t, obj_desc->ver_major);\ 112a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 16, 16, uint16_t, obj_desc->ver_minor);\ 113a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 0, 8, char, obj_desc->type[0]);\ 114a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 8, 8, char, obj_desc->type[1]);\ 115a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 16, 8, char, obj_desc->type[2]);\ 116a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 24, 8, char, obj_desc->type[3]);\ 117a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 32, 8, char, obj_desc->type[4]);\ 118a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 40, 8, char, obj_desc->type[5]);\ 119a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 48, 8, char, obj_desc->type[6]);\ 120a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 56, 8, char, obj_desc->type[7]);\ 121a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 0, 8, char, obj_desc->type[8]);\ 122a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 8, 8, char, obj_desc->type[9]);\ 123a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 16, 8, char, obj_desc->type[10]);\ 124a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 24, 8, char, obj_desc->type[11]);\ 125a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 32, 8, char, obj_desc->type[12]);\ 126a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 40, 8, char, obj_desc->type[13]);\ 127a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 48, 8, char, obj_desc->type[14]);\ 128a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 56, 8, char, obj_desc->type[15]);\ 1291f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 0, 8, char, obj_desc->label[0]);\ 1301f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 8, 8, char, obj_desc->label[1]);\ 1311f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 16, 8, char, obj_desc->label[2]);\ 1321f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 24, 8, char, obj_desc->label[3]);\ 1331f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 32, 8, char, obj_desc->label[4]);\ 1341f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 40, 8, char, obj_desc->label[5]);\ 1351f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 48, 8, char, obj_desc->label[6]);\ 1361f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 56, 8, char, obj_desc->label[7]);\ 1371f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 0, 8, char, obj_desc->label[8]);\ 1381f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 8, 8, char, obj_desc->label[9]);\ 1391f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 16, 8, char, obj_desc->label[10]);\ 1401f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 24, 8, char, obj_desc->label[11]);\ 1411f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 32, 8, char, obj_desc->label[12]);\ 1421f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 40, 8, char, obj_desc->label[13]);\ 1431f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 48, 8, char, obj_desc->label[14]);\ 1441f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 56, 8, char, obj_desc->label[15]);\ 145a2a55e51SPrabhakar Kushwaha } while (0) 146a2a55e51SPrabhakar Kushwaha 147a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 148a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_RES_COUNT(cmd, type) \ 149a2a55e51SPrabhakar Kushwaha do { \ 150a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 8, char, type[0]);\ 151a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 8, 8, char, type[1]);\ 152a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 8, char, type[2]);\ 153a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 24, 8, char, type[3]);\ 154a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 8, char, type[4]);\ 155a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 40, 8, char, type[5]);\ 156a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 48, 8, char, type[6]);\ 157a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 56, 8, char, type[7]);\ 158a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, type[8]);\ 159a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, type[9]);\ 160a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, type[10]);\ 161a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, type[11]);\ 162a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, type[12]);\ 163a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, type[13]);\ 164a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, type[14]);\ 165a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, type[15]);\ 166a2a55e51SPrabhakar Kushwaha } while (0) 167a2a55e51SPrabhakar Kushwaha 168a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 169a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_RES_COUNT(cmd, res_count) \ 170a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, res_count) 171a2a55e51SPrabhakar Kushwaha 172a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 173a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_RES_IDS(cmd, range_desc, type) \ 174a2a55e51SPrabhakar Kushwaha do { \ 175a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 42, 7, enum dprc_iter_status, \ 176a2a55e51SPrabhakar Kushwaha range_desc->iter_status); \ 177a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 32, int, range_desc->base_id); \ 178a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 32, int, range_desc->last_id);\ 179a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, type[0]);\ 180a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, type[1]);\ 181a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, type[2]);\ 182a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, type[3]);\ 183a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, type[4]);\ 184a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, type[5]);\ 185a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, type[6]);\ 186a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, type[7]);\ 187a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 8, char, type[8]);\ 188a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 8, char, type[9]);\ 189a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 16, 8, char, type[10]);\ 190a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 24, 8, char, type[11]);\ 191a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 8, char, type[12]);\ 192a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 40, 8, char, type[13]);\ 193a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 48, 8, char, type[14]);\ 194a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 56, 8, char, type[15]);\ 195a2a55e51SPrabhakar Kushwaha } while (0) 196a2a55e51SPrabhakar Kushwaha 197a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 198a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_RES_IDS(cmd, range_desc) \ 199a2a55e51SPrabhakar Kushwaha do { \ 200a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 42, 7, enum dprc_iter_status, \ 201a2a55e51SPrabhakar Kushwaha range_desc->iter_status);\ 202a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 32, int, range_desc->base_id); \ 203a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 32, int, range_desc->last_id);\ 204a2a55e51SPrabhakar Kushwaha } while (0) 205a2a55e51SPrabhakar Kushwaha 206a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 207a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index) \ 208a2a55e51SPrabhakar Kushwaha do { \ 209a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, obj_id); \ 210a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 8, uint8_t, region_index);\ 211a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 8, char, obj_type[0]);\ 212a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 8, char, obj_type[1]);\ 213a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 16, 8, char, obj_type[2]);\ 214a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 24, 8, char, obj_type[3]);\ 215a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 8, char, obj_type[4]);\ 216a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 40, 8, char, obj_type[5]);\ 217a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 48, 8, char, obj_type[6]);\ 218a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 56, 8, char, obj_type[7]);\ 219a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 0, 8, char, obj_type[8]);\ 220a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 8, 8, char, obj_type[9]);\ 221a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 16, 8, char, obj_type[10]);\ 222a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 24, 8, char, obj_type[11]);\ 223a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 32, 8, char, obj_type[12]);\ 224a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 40, 8, char, obj_type[13]);\ 225a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 48, 8, char, obj_type[14]);\ 226a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 56, 8, char, obj_type[15]);\ 227a2a55e51SPrabhakar Kushwaha } while (0) 228a2a55e51SPrabhakar Kushwaha 229a2a55e51SPrabhakar Kushwaha /* param, offset, width, type, arg_name */ 230a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_OBJ_REGION(cmd, region_desc) \ 231a2a55e51SPrabhakar Kushwaha do { \ 23287457d11SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 32, uint32_t, region_desc->base_offset);\ 233a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 32, uint32_t, region_desc->size); \ 23487457d11SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 32, 4, enum dprc_region_type, region_desc->type);\ 23587457d11SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 0, 32, uint32_t, region_desc->flags);\ 236a2a55e51SPrabhakar Kushwaha } while (0) 237a2a55e51SPrabhakar Kushwaha 238a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 23987457d11SPrabhakar Kushwaha #define DPRC_CMD_SET_OBJ_LABEL(cmd, obj_type, obj_id, label) \ 2401f1c25c7SPrabhakar Kushwaha do { \ 24187457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, obj_id); \ 2421f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 8, char, label[0]);\ 2431f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 8, 8, char, label[1]);\ 2441f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 8, char, label[2]);\ 2451f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 24, 8, char, label[3]);\ 2461f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 8, char, label[4]);\ 2471f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 40, 8, char, label[5]);\ 2481f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 48, 8, char, label[6]);\ 2491f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 56, 8, char, label[7]);\ 2501f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, label[8]);\ 2511f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, label[9]);\ 2521f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, label[10]);\ 2531f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, label[11]);\ 2541f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, label[12]);\ 2551f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, label[13]);\ 2561f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, label[14]);\ 2571f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, label[15]);\ 25887457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 8, char, obj_type[0]);\ 25987457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 8, char, obj_type[1]);\ 26087457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 16, 8, char, obj_type[2]);\ 26187457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 24, 8, char, obj_type[3]);\ 26287457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 8, char, obj_type[4]);\ 26387457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 40, 8, char, obj_type[5]);\ 26487457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 48, 8, char, obj_type[6]);\ 26587457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 56, 8, char, obj_type[7]);\ 26687457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 0, 8, char, obj_type[8]);\ 26787457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 8, 8, char, obj_type[9]);\ 26887457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 16, 8, char, obj_type[10]);\ 26987457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 24, 8, char, obj_type[11]);\ 27087457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 32, 8, char, obj_type[12]);\ 27187457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 40, 8, char, obj_type[13]);\ 27287457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 48, 8, char, obj_type[14]);\ 27387457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 56, 8, char, obj_type[15]);\ 2741f1c25c7SPrabhakar Kushwaha } while (0) 2751f1c25c7SPrabhakar Kushwaha 2761f1c25c7SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 27787457d11SPrabhakar Kushwaha #define DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg) \ 278a2a55e51SPrabhakar Kushwaha do { \ 279a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, endpoint1->id); \ 28087457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint1->if_id); \ 281a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 32, int, endpoint2->id); \ 28287457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 16, uint16_t, endpoint2->if_id); \ 283a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, endpoint1->type[0]); \ 284a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, endpoint1->type[1]); \ 285a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, endpoint1->type[2]); \ 286a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, endpoint1->type[3]); \ 287a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, endpoint1->type[4]); \ 288a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, endpoint1->type[5]); \ 289a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, endpoint1->type[6]); \ 290a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, endpoint1->type[7]); \ 291a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 8, char, endpoint1->type[8]); \ 292a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 8, char, endpoint1->type[9]); \ 293a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 16, 8, char, endpoint1->type[10]); \ 294a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 24, 8, char, endpoint1->type[11]); \ 295a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 8, char, endpoint1->type[12]); \ 296a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 40, 8, char, endpoint1->type[13]); \ 297a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 48, 8, char, endpoint1->type[14]); \ 298a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 56, 8, char, endpoint1->type[15]); \ 29987457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 0, 32, uint32_t, cfg->max_rate); \ 30087457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 32, 32, uint32_t, cfg->committed_rate); \ 301a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 0, 8, char, endpoint2->type[0]); \ 302a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 8, 8, char, endpoint2->type[1]); \ 303a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 16, 8, char, endpoint2->type[2]); \ 304a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 24, 8, char, endpoint2->type[3]); \ 305a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 32, 8, char, endpoint2->type[4]); \ 306a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 40, 8, char, endpoint2->type[5]); \ 307a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 48, 8, char, endpoint2->type[6]); \ 308a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 56, 8, char, endpoint2->type[7]); \ 309a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 0, 8, char, endpoint2->type[8]); \ 310a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 8, 8, char, endpoint2->type[9]); \ 311a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 16, 8, char, endpoint2->type[10]); \ 312a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 24, 8, char, endpoint2->type[11]); \ 313a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 32, 8, char, endpoint2->type[12]); \ 314a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 40, 8, char, endpoint2->type[13]); \ 315a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 48, 8, char, endpoint2->type[14]); \ 316a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 56, 8, char, endpoint2->type[15]); \ 317a2a55e51SPrabhakar Kushwaha } while (0) 318a2a55e51SPrabhakar Kushwaha 319a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 320a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_DISCONNECT(cmd, endpoint) \ 321a2a55e51SPrabhakar Kushwaha do { \ 322a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, endpoint->id); \ 32387457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint->if_id); \ 324a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 8, char, endpoint->type[0]); \ 325a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 8, 8, char, endpoint->type[1]); \ 326a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 8, char, endpoint->type[2]); \ 327a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 24, 8, char, endpoint->type[3]); \ 328a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 8, char, endpoint->type[4]); \ 329a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 40, 8, char, endpoint->type[5]); \ 330a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 48, 8, char, endpoint->type[6]); \ 331a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 56, 8, char, endpoint->type[7]); \ 332a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, endpoint->type[8]); \ 333a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, endpoint->type[9]); \ 334a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, endpoint->type[10]); \ 335a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, endpoint->type[11]); \ 336a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, endpoint->type[12]); \ 337a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, endpoint->type[13]); \ 338a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, endpoint->type[14]); \ 339a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, endpoint->type[15]); \ 340a2a55e51SPrabhakar Kushwaha } while (0) 341a2a55e51SPrabhakar Kushwaha 342a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 343a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_CONNECTION(cmd, endpoint1) \ 344a2a55e51SPrabhakar Kushwaha do { \ 345a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, endpoint1->id); \ 34687457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint1->if_id); \ 347a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 8, char, endpoint1->type[0]); \ 348a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 8, 8, char, endpoint1->type[1]); \ 349a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 8, char, endpoint1->type[2]); \ 350a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 24, 8, char, endpoint1->type[3]); \ 351a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 8, char, endpoint1->type[4]); \ 352a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 40, 8, char, endpoint1->type[5]); \ 353a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 48, 8, char, endpoint1->type[6]); \ 354a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 56, 8, char, endpoint1->type[7]); \ 355a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, endpoint1->type[8]); \ 356a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, endpoint1->type[9]); \ 357a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, endpoint1->type[10]); \ 358a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, endpoint1->type[11]); \ 359a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, endpoint1->type[12]); \ 360a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, endpoint1->type[13]); \ 361a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, endpoint1->type[14]); \ 362a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, endpoint1->type[15]); \ 363a2a55e51SPrabhakar Kushwaha } while (0) 364a2a55e51SPrabhakar Kushwaha 365a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 366a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_CONNECTION(cmd, endpoint2, state) \ 367a2a55e51SPrabhakar Kushwaha do { \ 368a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 0, 32, int, endpoint2->id); \ 36987457d11SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 32, 16, uint16_t, endpoint2->if_id); \ 370a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 0, 8, char, endpoint2->type[0]); \ 371a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 8, 8, char, endpoint2->type[1]); \ 372a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 16, 8, char, endpoint2->type[2]); \ 373a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 24, 8, char, endpoint2->type[3]); \ 374a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 32, 8, char, endpoint2->type[4]); \ 375a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 40, 8, char, endpoint2->type[5]); \ 376a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 48, 8, char, endpoint2->type[6]); \ 377a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 56, 8, char, endpoint2->type[7]); \ 378a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 0, 8, char, endpoint2->type[8]); \ 379a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 8, 8, char, endpoint2->type[9]); \ 380a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 16, 8, char, endpoint2->type[10]); \ 381a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 24, 8, char, endpoint2->type[11]); \ 382a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 32, 8, char, endpoint2->type[12]); \ 383a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 40, 8, char, endpoint2->type[13]); \ 384a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 48, 8, char, endpoint2->type[14]); \ 385a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 56, 8, char, endpoint2->type[15]); \ 386a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 0, 32, int, state); \ 387a2a55e51SPrabhakar Kushwaha } while (0) 388a2a55e51SPrabhakar Kushwaha 389a2a55e51SPrabhakar Kushwaha /* Data Path Resource Container API 390a2a55e51SPrabhakar Kushwaha * Contains DPRC API for managing and querying DPAA resources 391a2a55e51SPrabhakar Kushwaha */ 3921f1c25c7SPrabhakar Kushwaha 393a2a55e51SPrabhakar Kushwaha struct fsl_mc_io; 394a2a55e51SPrabhakar Kushwaha 395a2a55e51SPrabhakar Kushwaha /** 396a2a55e51SPrabhakar Kushwaha * Set this value as the icid value in dprc_cfg structure when creating a 397a2a55e51SPrabhakar Kushwaha * container, in case the ICID is not selected by the user and should be 398a2a55e51SPrabhakar Kushwaha * allocated by the DPRC from the pool of ICIDs. 399a2a55e51SPrabhakar Kushwaha */ 400a2a55e51SPrabhakar Kushwaha #define DPRC_GET_ICID_FROM_POOL (uint16_t)(~(0)) 401a2a55e51SPrabhakar Kushwaha 402a2a55e51SPrabhakar Kushwaha /** 403a2a55e51SPrabhakar Kushwaha * Set this value as the portal_id value in dprc_cfg structure when creating a 404a2a55e51SPrabhakar Kushwaha * container, in case the portal ID is not specifically selected by the 405a2a55e51SPrabhakar Kushwaha * user and should be allocated by the DPRC from the pool of portal ids. 406a2a55e51SPrabhakar Kushwaha */ 407a2a55e51SPrabhakar Kushwaha #define DPRC_GET_PORTAL_ID_FROM_POOL (int)(~(0)) 408a2a55e51SPrabhakar Kushwaha 409a2a55e51SPrabhakar Kushwaha /** 410a2a55e51SPrabhakar Kushwaha * dprc_get_container_id() - Get container ID associated with a given portal. 411a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 41287457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 413a2a55e51SPrabhakar Kushwaha * @container_id: Requested container ID 414a2a55e51SPrabhakar Kushwaha * 415a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 416a2a55e51SPrabhakar Kushwaha */ 41787457d11SPrabhakar Kushwaha int dprc_get_container_id(struct fsl_mc_io *mc_io, 41887457d11SPrabhakar Kushwaha uint32_t cmd_flags, 41987457d11SPrabhakar Kushwaha int *container_id); 420a2a55e51SPrabhakar Kushwaha 421a2a55e51SPrabhakar Kushwaha /** 422a2a55e51SPrabhakar Kushwaha * dprc_open() - Open DPRC object for use 423a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 42487457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 425a2a55e51SPrabhakar Kushwaha * @container_id: Container ID to open 426a2a55e51SPrabhakar Kushwaha * @token: Returned token of DPRC object 427a2a55e51SPrabhakar Kushwaha * 428a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 429a2a55e51SPrabhakar Kushwaha * 430a2a55e51SPrabhakar Kushwaha * @warning Required before any operation on the object. 431a2a55e51SPrabhakar Kushwaha */ 43287457d11SPrabhakar Kushwaha int dprc_open(struct fsl_mc_io *mc_io, 43387457d11SPrabhakar Kushwaha uint32_t cmd_flags, 43487457d11SPrabhakar Kushwaha int container_id, 43587457d11SPrabhakar Kushwaha uint16_t *token); 436a2a55e51SPrabhakar Kushwaha 437a2a55e51SPrabhakar Kushwaha /** 438a2a55e51SPrabhakar Kushwaha * dprc_close() - Close the control session of the object 439a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 44087457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 441a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 442a2a55e51SPrabhakar Kushwaha * 443a2a55e51SPrabhakar Kushwaha * After this function is called, no further operations are 444a2a55e51SPrabhakar Kushwaha * allowed on the object without opening a new control session. 445a2a55e51SPrabhakar Kushwaha * 446a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 447a2a55e51SPrabhakar Kushwaha */ 44887457d11SPrabhakar Kushwaha int dprc_close(struct fsl_mc_io *mc_io, 44987457d11SPrabhakar Kushwaha uint32_t cmd_flags, 45087457d11SPrabhakar Kushwaha uint16_t token); 451a2a55e51SPrabhakar Kushwaha 452a2a55e51SPrabhakar Kushwaha /** 453a2a55e51SPrabhakar Kushwaha * Container general options 454a2a55e51SPrabhakar Kushwaha * 455a2a55e51SPrabhakar Kushwaha * These options may be selected at container creation by the container creator 456a2a55e51SPrabhakar Kushwaha * and can be retrieved using dprc_get_attributes() 457a2a55e51SPrabhakar Kushwaha */ 458a2a55e51SPrabhakar Kushwaha 459a2a55e51SPrabhakar Kushwaha /* Spawn Policy Option allowed - Indicates that the new container is allowed 460a2a55e51SPrabhakar Kushwaha * to spawn and have its own child containers. 461a2a55e51SPrabhakar Kushwaha */ 462a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_SPAWN_ALLOWED 0x00000001 463a2a55e51SPrabhakar Kushwaha 464a2a55e51SPrabhakar Kushwaha /* General Container allocation policy - Indicates that the new container is 465a2a55e51SPrabhakar Kushwaha * allowed to allocate requested resources from its parent container; if not 466a2a55e51SPrabhakar Kushwaha * set, the container is only allowed to use resources in its own pools; Note 467a2a55e51SPrabhakar Kushwaha * that this is a container's global policy, but the parent container may 468a2a55e51SPrabhakar Kushwaha * override it and set specific quota per resource type. 469a2a55e51SPrabhakar Kushwaha */ 470a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_ALLOC_ALLOWED 0x00000002 471a2a55e51SPrabhakar Kushwaha 472a2a55e51SPrabhakar Kushwaha /* Object initialization allowed - software context associated with this 473a2a55e51SPrabhakar Kushwaha * container is allowed to invoke object initialization operations. 474a2a55e51SPrabhakar Kushwaha */ 475a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_OBJ_CREATE_ALLOWED 0x00000004 476a2a55e51SPrabhakar Kushwaha 477a2a55e51SPrabhakar Kushwaha /* Topology change allowed - software context associated with this 478a2a55e51SPrabhakar Kushwaha * container is allowed to invoke topology operations, such as attach/detach 479a2a55e51SPrabhakar Kushwaha * of network objects. 480a2a55e51SPrabhakar Kushwaha */ 481a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_TOPOLOGY_CHANGES_ALLOWED 0x00000008 482a2a55e51SPrabhakar Kushwaha 483a2a55e51SPrabhakar Kushwaha /* IOMMU bypass - indicates whether objects of this container are permitted 484a2a55e51SPrabhakar Kushwaha * to bypass the IOMMU. 485a2a55e51SPrabhakar Kushwaha */ 486a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_IOMMU_BYPASS 0x00000010 487a2a55e51SPrabhakar Kushwaha 488a2a55e51SPrabhakar Kushwaha /* AIOP - Indicates that container belongs to AIOP. */ 489a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_AIOP 0x00000020 490a2a55e51SPrabhakar Kushwaha 491a2a55e51SPrabhakar Kushwaha /** 492a2a55e51SPrabhakar Kushwaha * struct dprc_cfg - Container configuration options 493a2a55e51SPrabhakar Kushwaha * @icid: Container's ICID; if set to 'DPRC_GET_ICID_FROM_POOL', a free 494a2a55e51SPrabhakar Kushwaha * ICID value is allocated by the DPRC 495a2a55e51SPrabhakar Kushwaha * @portal_id: Portal ID; if set to 'DPRC_GET_PORTAL_ID_FROM_POOL', a free 496a2a55e51SPrabhakar Kushwaha * portal ID is allocated by the DPRC 497a2a55e51SPrabhakar Kushwaha * @options: Combination of 'DPRC_CFG_OPT_<X>' options 4981f1c25c7SPrabhakar Kushwaha * @label: Object's label 499a2a55e51SPrabhakar Kushwaha */ 500a2a55e51SPrabhakar Kushwaha struct dprc_cfg { 501a2a55e51SPrabhakar Kushwaha uint16_t icid; 502a2a55e51SPrabhakar Kushwaha int portal_id; 503a2a55e51SPrabhakar Kushwaha uint64_t options; 5041f1c25c7SPrabhakar Kushwaha char label[16]; 505a2a55e51SPrabhakar Kushwaha }; 506a2a55e51SPrabhakar Kushwaha 507a2a55e51SPrabhakar Kushwaha /** 508*1ebbe4fcSPrabhakar Kushwaha * dprc_create_container() - Create child container 509*1ebbe4fcSPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 510*1ebbe4fcSPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 511*1ebbe4fcSPrabhakar Kushwaha * @token: Token of DPRC object 512*1ebbe4fcSPrabhakar Kushwaha * @cfg: Child container configuration 513*1ebbe4fcSPrabhakar Kushwaha * @child_container_id: Returned child container ID 514*1ebbe4fcSPrabhakar Kushwaha * @child_portal_offset: Returned child portal offset from MC portal base 515*1ebbe4fcSPrabhakar Kushwaha * 516*1ebbe4fcSPrabhakar Kushwaha * 517*1ebbe4fcSPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 518*1ebbe4fcSPrabhakar Kushwaha */ 519*1ebbe4fcSPrabhakar Kushwaha int dprc_create_container(struct fsl_mc_io *mc_io, 520*1ebbe4fcSPrabhakar Kushwaha uint32_t cmd_flags, 521*1ebbe4fcSPrabhakar Kushwaha uint16_t token, 522*1ebbe4fcSPrabhakar Kushwaha struct dprc_cfg *cfg, 523*1ebbe4fcSPrabhakar Kushwaha int *child_container_id, 524*1ebbe4fcSPrabhakar Kushwaha uint64_t *child_portal_offset); 525*1ebbe4fcSPrabhakar Kushwaha 526*1ebbe4fcSPrabhakar Kushwaha /** 527*1ebbe4fcSPrabhakar Kushwaha * dprc_destroy_container() - Destroy child container. 528*1ebbe4fcSPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 529*1ebbe4fcSPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 530*1ebbe4fcSPrabhakar Kushwaha * @token: Token of DPRC object 531*1ebbe4fcSPrabhakar Kushwaha * @child_container_id: ID of the container to destroy 532*1ebbe4fcSPrabhakar Kushwaha * 533*1ebbe4fcSPrabhakar Kushwaha * This function terminates the child container, so following this call the 534*1ebbe4fcSPrabhakar Kushwaha * child container ID becomes invalid. 535*1ebbe4fcSPrabhakar Kushwaha * 536*1ebbe4fcSPrabhakar Kushwaha * Notes: 537*1ebbe4fcSPrabhakar Kushwaha * - All resources and objects of the destroyed container are returned to the 538*1ebbe4fcSPrabhakar Kushwaha * parent container or destroyed if were created be the destroyed container. 539*1ebbe4fcSPrabhakar Kushwaha * - This function destroy all the child containers of the specified 540*1ebbe4fcSPrabhakar Kushwaha * container prior to destroying the container itself. 541*1ebbe4fcSPrabhakar Kushwaha * 542*1ebbe4fcSPrabhakar Kushwaha * warning: Only the parent container is allowed to destroy a child policy 543*1ebbe4fcSPrabhakar Kushwaha * Container 0 can't be destroyed 544*1ebbe4fcSPrabhakar Kushwaha * 545*1ebbe4fcSPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 546*1ebbe4fcSPrabhakar Kushwaha * 547*1ebbe4fcSPrabhakar Kushwaha */ 548*1ebbe4fcSPrabhakar Kushwaha int dprc_destroy_container(struct fsl_mc_io *mc_io, 549*1ebbe4fcSPrabhakar Kushwaha uint32_t cmd_flags, 550*1ebbe4fcSPrabhakar Kushwaha uint16_t token, 551*1ebbe4fcSPrabhakar Kushwaha int child_container_id); 552*1ebbe4fcSPrabhakar Kushwaha 553*1ebbe4fcSPrabhakar Kushwaha /** 554a2a55e51SPrabhakar Kushwaha * dprc_reset_container - Reset child container. 555a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 55687457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 557a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 558a2a55e51SPrabhakar Kushwaha * @child_container_id: ID of the container to reset 559a2a55e51SPrabhakar Kushwaha * 560a2a55e51SPrabhakar Kushwaha * In case a software context crashes or becomes non-responsive, the parent 561a2a55e51SPrabhakar Kushwaha * may wish to reset its resources container before the software context is 562a2a55e51SPrabhakar Kushwaha * restarted. 563a2a55e51SPrabhakar Kushwaha * 564a2a55e51SPrabhakar Kushwaha * This routine informs all objects assigned to the child container that the 565a2a55e51SPrabhakar Kushwaha * container is being reset, so they may perform any cleanup operations that are 566a2a55e51SPrabhakar Kushwaha * needed. All objects handles that were owned by the child container shall be 567a2a55e51SPrabhakar Kushwaha * closed. 568a2a55e51SPrabhakar Kushwaha * 569a2a55e51SPrabhakar Kushwaha * Note that such request may be submitted even if the child software context 570a2a55e51SPrabhakar Kushwaha * has not crashed, but the resulting object cleanup operations will not be 571a2a55e51SPrabhakar Kushwaha * aware of that. 572a2a55e51SPrabhakar Kushwaha * 573a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 574a2a55e51SPrabhakar Kushwaha */ 575a2a55e51SPrabhakar Kushwaha int dprc_reset_container(struct fsl_mc_io *mc_io, 57687457d11SPrabhakar Kushwaha uint32_t cmd_flags, 577a2a55e51SPrabhakar Kushwaha uint16_t token, 578a2a55e51SPrabhakar Kushwaha int child_container_id); 579a2a55e51SPrabhakar Kushwaha 580a2a55e51SPrabhakar Kushwaha /** 581a2a55e51SPrabhakar Kushwaha * struct dprc_attributes - Container attributes 582a2a55e51SPrabhakar Kushwaha * @container_id: Container's ID 583a2a55e51SPrabhakar Kushwaha * @icid: Container's ICID 584a2a55e51SPrabhakar Kushwaha * @portal_id: Container's portal ID 585a2a55e51SPrabhakar Kushwaha * @options: Container's options as set at container's creation 586a2a55e51SPrabhakar Kushwaha * @version: DPRC version 587a2a55e51SPrabhakar Kushwaha */ 588a2a55e51SPrabhakar Kushwaha struct dprc_attributes { 589a2a55e51SPrabhakar Kushwaha int container_id; 590a2a55e51SPrabhakar Kushwaha uint16_t icid; 591a2a55e51SPrabhakar Kushwaha int portal_id; 592a2a55e51SPrabhakar Kushwaha uint64_t options; 593a2a55e51SPrabhakar Kushwaha /** 594a2a55e51SPrabhakar Kushwaha * struct version - DPRC version 595a2a55e51SPrabhakar Kushwaha * @major: DPRC major version 596a2a55e51SPrabhakar Kushwaha * @minor: DPRC minor version 597a2a55e51SPrabhakar Kushwaha */ 598a2a55e51SPrabhakar Kushwaha struct { 599a2a55e51SPrabhakar Kushwaha uint16_t major; 600a2a55e51SPrabhakar Kushwaha uint16_t minor; 601a2a55e51SPrabhakar Kushwaha } version; 602a2a55e51SPrabhakar Kushwaha }; 603a2a55e51SPrabhakar Kushwaha 604a2a55e51SPrabhakar Kushwaha /** 605a2a55e51SPrabhakar Kushwaha * dprc_get_attributes() - Obtains container attributes 606a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 60787457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 608a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 60987457d11SPrabhakar Kushwaha * @attributes: Returned container attributes 610a2a55e51SPrabhakar Kushwaha * 611a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 612a2a55e51SPrabhakar Kushwaha */ 613a2a55e51SPrabhakar Kushwaha int dprc_get_attributes(struct fsl_mc_io *mc_io, 61487457d11SPrabhakar Kushwaha uint32_t cmd_flags, 615a2a55e51SPrabhakar Kushwaha uint16_t token, 616a2a55e51SPrabhakar Kushwaha struct dprc_attributes *attributes); 617a2a55e51SPrabhakar Kushwaha 618a2a55e51SPrabhakar Kushwaha /** 619a2a55e51SPrabhakar Kushwaha * dprc_get_obj_count() - Obtains the number of objects in the DPRC 620a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 62187457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 622a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 623a2a55e51SPrabhakar Kushwaha * @obj_count: Number of objects assigned to the DPRC 624a2a55e51SPrabhakar Kushwaha * 625a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 626a2a55e51SPrabhakar Kushwaha */ 62787457d11SPrabhakar Kushwaha int dprc_get_obj_count(struct fsl_mc_io *mc_io, 62887457d11SPrabhakar Kushwaha uint32_t cmd_flags, 62987457d11SPrabhakar Kushwaha uint16_t token, 63087457d11SPrabhakar Kushwaha int *obj_count); 631a2a55e51SPrabhakar Kushwaha 632a2a55e51SPrabhakar Kushwaha /* Objects Attributes Flags */ 633a2a55e51SPrabhakar Kushwaha 634a2a55e51SPrabhakar Kushwaha /* Opened state - Indicates that an object is open by at least one owner */ 635a2a55e51SPrabhakar Kushwaha #define DPRC_OBJ_STATE_OPEN 0x00000001 636a2a55e51SPrabhakar Kushwaha /* Plugged state - Indicates that the object is plugged */ 637a2a55e51SPrabhakar Kushwaha #define DPRC_OBJ_STATE_PLUGGED 0x00000002 638a2a55e51SPrabhakar Kushwaha 639a2a55e51SPrabhakar Kushwaha /** 640a2a55e51SPrabhakar Kushwaha * struct dprc_obj_desc - Object descriptor, returned from dprc_get_obj() 641a2a55e51SPrabhakar Kushwaha * @type: Type of object: NULL terminated string 642a2a55e51SPrabhakar Kushwaha * @id: ID of logical object resource 643a2a55e51SPrabhakar Kushwaha * @vendor: Object vendor identifier 644a2a55e51SPrabhakar Kushwaha * @ver_major: Major version number 645a2a55e51SPrabhakar Kushwaha * @ver_minor: Minor version number 646a2a55e51SPrabhakar Kushwaha * @irq_count: Number of interrupts supported by the object 647a2a55e51SPrabhakar Kushwaha * @region_count: Number of mappable regions supported by the object 648a2a55e51SPrabhakar Kushwaha * @state: Object state: combination of DPRC_OBJ_STATE_ states 6491f1c25c7SPrabhakar Kushwaha * @label: Object label 650a2a55e51SPrabhakar Kushwaha */ 651a2a55e51SPrabhakar Kushwaha struct dprc_obj_desc { 652a2a55e51SPrabhakar Kushwaha char type[16]; 653a2a55e51SPrabhakar Kushwaha int id; 654a2a55e51SPrabhakar Kushwaha uint16_t vendor; 655a2a55e51SPrabhakar Kushwaha uint16_t ver_major; 656a2a55e51SPrabhakar Kushwaha uint16_t ver_minor; 657a2a55e51SPrabhakar Kushwaha uint8_t irq_count; 658a2a55e51SPrabhakar Kushwaha uint8_t region_count; 659a2a55e51SPrabhakar Kushwaha uint32_t state; 6601f1c25c7SPrabhakar Kushwaha char label[16]; 661a2a55e51SPrabhakar Kushwaha }; 662a2a55e51SPrabhakar Kushwaha 663a2a55e51SPrabhakar Kushwaha /** 664a2a55e51SPrabhakar Kushwaha * dprc_get_obj() - Get general information on an object 665a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 66687457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 667a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 668a2a55e51SPrabhakar Kushwaha * @obj_index: Index of the object to be queried (< obj_count) 669a2a55e51SPrabhakar Kushwaha * @obj_desc: Returns the requested object descriptor 670a2a55e51SPrabhakar Kushwaha * 671a2a55e51SPrabhakar Kushwaha * The object descriptors are retrieved one by one by incrementing 672a2a55e51SPrabhakar Kushwaha * obj_index up to (not including) the value of obj_count returned 673a2a55e51SPrabhakar Kushwaha * from dprc_get_obj_count(). dprc_get_obj_count() must 674a2a55e51SPrabhakar Kushwaha * be called prior to dprc_get_obj(). 675a2a55e51SPrabhakar Kushwaha * 676a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 677a2a55e51SPrabhakar Kushwaha */ 678a2a55e51SPrabhakar Kushwaha int dprc_get_obj(struct fsl_mc_io *mc_io, 67987457d11SPrabhakar Kushwaha uint32_t cmd_flags, 680a2a55e51SPrabhakar Kushwaha uint16_t token, 681a2a55e51SPrabhakar Kushwaha int obj_index, 682a2a55e51SPrabhakar Kushwaha struct dprc_obj_desc *obj_desc); 683a2a55e51SPrabhakar Kushwaha 684a2a55e51SPrabhakar Kushwaha /** 6851f1c25c7SPrabhakar Kushwaha * dprc_get_res_count() - Obtains the number of free resources that are 6861f1c25c7SPrabhakar Kushwaha * assigned to this container, by pool type 687a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 68887457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 689a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 690a2a55e51SPrabhakar Kushwaha * @type: pool type 691a2a55e51SPrabhakar Kushwaha * @res_count: Returned number of free resources of the given 692a2a55e51SPrabhakar Kushwaha * resource type that are assigned to this DPRC 693a2a55e51SPrabhakar Kushwaha * 694a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 695a2a55e51SPrabhakar Kushwaha */ 696a2a55e51SPrabhakar Kushwaha int dprc_get_res_count(struct fsl_mc_io *mc_io, 69787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 698a2a55e51SPrabhakar Kushwaha uint16_t token, 699a2a55e51SPrabhakar Kushwaha char *type, 700a2a55e51SPrabhakar Kushwaha int *res_count); 701a2a55e51SPrabhakar Kushwaha 702a2a55e51SPrabhakar Kushwaha /** 703a2a55e51SPrabhakar Kushwaha * enum dprc_iter_status - Iteration status 704a2a55e51SPrabhakar Kushwaha * @DPRC_ITER_STATUS_FIRST: Perform first iteration 705a2a55e51SPrabhakar Kushwaha * @DPRC_ITER_STATUS_MORE: Indicates more/next iteration is needed 706a2a55e51SPrabhakar Kushwaha * @DPRC_ITER_STATUS_LAST: Indicates last iteration 707a2a55e51SPrabhakar Kushwaha */ 708a2a55e51SPrabhakar Kushwaha enum dprc_iter_status { 709a2a55e51SPrabhakar Kushwaha DPRC_ITER_STATUS_FIRST = 0, 710a2a55e51SPrabhakar Kushwaha DPRC_ITER_STATUS_MORE = 1, 711a2a55e51SPrabhakar Kushwaha DPRC_ITER_STATUS_LAST = 2 712a2a55e51SPrabhakar Kushwaha }; 713a2a55e51SPrabhakar Kushwaha 714a2a55e51SPrabhakar Kushwaha /** 715a2a55e51SPrabhakar Kushwaha * struct dprc_res_ids_range_desc - Resource ID range descriptor 716a2a55e51SPrabhakar Kushwaha * @base_id: Base resource ID of this range 717a2a55e51SPrabhakar Kushwaha * @last_id: Last resource ID of this range 718a2a55e51SPrabhakar Kushwaha * @iter_status: Iteration status - should be set to DPRC_ITER_STATUS_FIRST at 719a2a55e51SPrabhakar Kushwaha * first iteration; while the returned marker is DPRC_ITER_STATUS_MORE, 720a2a55e51SPrabhakar Kushwaha * additional iterations are needed, until the returned marker is 721a2a55e51SPrabhakar Kushwaha * DPRC_ITER_STATUS_LAST 722a2a55e51SPrabhakar Kushwaha */ 723a2a55e51SPrabhakar Kushwaha struct dprc_res_ids_range_desc { 724a2a55e51SPrabhakar Kushwaha int base_id; 725a2a55e51SPrabhakar Kushwaha int last_id; 726a2a55e51SPrabhakar Kushwaha enum dprc_iter_status iter_status; 727a2a55e51SPrabhakar Kushwaha }; 728a2a55e51SPrabhakar Kushwaha 729a2a55e51SPrabhakar Kushwaha /** 730a2a55e51SPrabhakar Kushwaha * dprc_get_res_ids() - Obtains IDs of free resources in the container 731a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 73287457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 733a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 734a2a55e51SPrabhakar Kushwaha * @type: pool type 735a2a55e51SPrabhakar Kushwaha * @range_desc: range descriptor 736a2a55e51SPrabhakar Kushwaha * 737a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 738a2a55e51SPrabhakar Kushwaha */ 739a2a55e51SPrabhakar Kushwaha int dprc_get_res_ids(struct fsl_mc_io *mc_io, 74087457d11SPrabhakar Kushwaha uint32_t cmd_flags, 741a2a55e51SPrabhakar Kushwaha uint16_t token, 742a2a55e51SPrabhakar Kushwaha char *type, 743a2a55e51SPrabhakar Kushwaha struct dprc_res_ids_range_desc *range_desc); 744a2a55e51SPrabhakar Kushwaha 74587457d11SPrabhakar Kushwaha /* Region flags */ 74687457d11SPrabhakar Kushwaha /* Cacheable - Indicates that region should be mapped as cacheable */ 74787457d11SPrabhakar Kushwaha #define DPRC_REGION_CACHEABLE 0x00000001 74887457d11SPrabhakar Kushwaha 74987457d11SPrabhakar Kushwaha /** 75087457d11SPrabhakar Kushwaha * enum dprc_region_type - Region type 75187457d11SPrabhakar Kushwaha * @DPRC_REGION_TYPE_MC_PORTAL: MC portal region 75287457d11SPrabhakar Kushwaha * @DPRC_REGION_TYPE_QBMAN_PORTAL: Qbman portal region 75387457d11SPrabhakar Kushwaha */ 75487457d11SPrabhakar Kushwaha enum dprc_region_type { 75587457d11SPrabhakar Kushwaha DPRC_REGION_TYPE_MC_PORTAL, 75687457d11SPrabhakar Kushwaha DPRC_REGION_TYPE_QBMAN_PORTAL 75787457d11SPrabhakar Kushwaha }; 75887457d11SPrabhakar Kushwaha 759a2a55e51SPrabhakar Kushwaha /** 760a2a55e51SPrabhakar Kushwaha * struct dprc_region_desc - Mappable region descriptor 7611f1c25c7SPrabhakar Kushwaha * @base_offset: Region offset from region's base address. 7621f1c25c7SPrabhakar Kushwaha * For DPMCP and DPRC objects, region base is offset from SoC MC portals 7631f1c25c7SPrabhakar Kushwaha * base address; For DPIO, region base is offset from SoC QMan portals 7641f1c25c7SPrabhakar Kushwaha * base address 765a2a55e51SPrabhakar Kushwaha * @size: Region size (in bytes) 76687457d11SPrabhakar Kushwaha * @flags: Region attributes 76787457d11SPrabhakar Kushwaha * @type: Portal region type 768a2a55e51SPrabhakar Kushwaha */ 769a2a55e51SPrabhakar Kushwaha struct dprc_region_desc { 77087457d11SPrabhakar Kushwaha uint32_t base_offset; 771a2a55e51SPrabhakar Kushwaha uint32_t size; 77287457d11SPrabhakar Kushwaha uint32_t flags; 77387457d11SPrabhakar Kushwaha enum dprc_region_type type; 774a2a55e51SPrabhakar Kushwaha }; 775a2a55e51SPrabhakar Kushwaha 776a2a55e51SPrabhakar Kushwaha /** 777a2a55e51SPrabhakar Kushwaha * dprc_get_obj_region() - Get region information for a specified object. 778a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 77987457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 780a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 78187457d11SPrabhakar Kushwaha * @obj_type: Object type as returned in dprc_get_obj() 782a2a55e51SPrabhakar Kushwaha * @obj_id: Unique object instance as returned in dprc_get_obj() 783a2a55e51SPrabhakar Kushwaha * @region_index: The specific region to query 784a2a55e51SPrabhakar Kushwaha * @region_desc: Returns the requested region descriptor 785a2a55e51SPrabhakar Kushwaha * 786a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 787a2a55e51SPrabhakar Kushwaha */ 788a2a55e51SPrabhakar Kushwaha int dprc_get_obj_region(struct fsl_mc_io *mc_io, 78987457d11SPrabhakar Kushwaha uint32_t cmd_flags, 790a2a55e51SPrabhakar Kushwaha uint16_t token, 791a2a55e51SPrabhakar Kushwaha char *obj_type, 792a2a55e51SPrabhakar Kushwaha int obj_id, 793a2a55e51SPrabhakar Kushwaha uint8_t region_index, 794a2a55e51SPrabhakar Kushwaha struct dprc_region_desc *region_desc); 795a2a55e51SPrabhakar Kushwaha /** 796a2a55e51SPrabhakar Kushwaha * struct dprc_endpoint - Endpoint description for link connect/disconnect 797a2a55e51SPrabhakar Kushwaha * operations 798a2a55e51SPrabhakar Kushwaha * @type: Endpoint object type: NULL terminated string 799a2a55e51SPrabhakar Kushwaha * @id: Endpoint object ID 80087457d11SPrabhakar Kushwaha * @if_id: Interface ID; should be set for endpoints with multiple 801a2a55e51SPrabhakar Kushwaha * interfaces ("dpsw", "dpdmux"); for others, always set to 0 802a2a55e51SPrabhakar Kushwaha */ 803a2a55e51SPrabhakar Kushwaha struct dprc_endpoint { 804a2a55e51SPrabhakar Kushwaha char type[16]; 805a2a55e51SPrabhakar Kushwaha int id; 80687457d11SPrabhakar Kushwaha uint16_t if_id; 80787457d11SPrabhakar Kushwaha }; 80887457d11SPrabhakar Kushwaha 80987457d11SPrabhakar Kushwaha /** 81087457d11SPrabhakar Kushwaha * struct dprc_connection_cfg - Connection configuration. 81187457d11SPrabhakar Kushwaha * Used for virtual connections only 81287457d11SPrabhakar Kushwaha * @committed_rate: Committed rate (Mbits/s) 81387457d11SPrabhakar Kushwaha * @max_rate: Maximum rate (Mbits/s) 81487457d11SPrabhakar Kushwaha */ 81587457d11SPrabhakar Kushwaha struct dprc_connection_cfg { 81687457d11SPrabhakar Kushwaha uint32_t committed_rate; 81787457d11SPrabhakar Kushwaha uint32_t max_rate; 818a2a55e51SPrabhakar Kushwaha }; 819a2a55e51SPrabhakar Kushwaha 820a2a55e51SPrabhakar Kushwaha /** 821a2a55e51SPrabhakar Kushwaha * dprc_connect() - Connect two endpoints to create a network link between them 822a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 82387457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 824a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 825a2a55e51SPrabhakar Kushwaha * @endpoint1: Endpoint 1 configuration parameters 826a2a55e51SPrabhakar Kushwaha * @endpoint2: Endpoint 2 configuration parameters 82787457d11SPrabhakar Kushwaha * @cfg: Connection configuration. The connection configuration is ignored for 82887457d11SPrabhakar Kushwaha * connections made to DPMAC objects, where rate is retrieved from the 82987457d11SPrabhakar Kushwaha * MAC configuration. 830a2a55e51SPrabhakar Kushwaha * 831a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 832a2a55e51SPrabhakar Kushwaha */ 833a2a55e51SPrabhakar Kushwaha int dprc_connect(struct fsl_mc_io *mc_io, 83487457d11SPrabhakar Kushwaha uint32_t cmd_flags, 835a2a55e51SPrabhakar Kushwaha uint16_t token, 836a2a55e51SPrabhakar Kushwaha const struct dprc_endpoint *endpoint1, 83787457d11SPrabhakar Kushwaha const struct dprc_endpoint *endpoint2, 83887457d11SPrabhakar Kushwaha const struct dprc_connection_cfg *cfg); 839a2a55e51SPrabhakar Kushwaha 840a2a55e51SPrabhakar Kushwaha /** 841a2a55e51SPrabhakar Kushwaha * dprc_disconnect() - Disconnect one endpoint to remove its network connection 842a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 84387457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 844a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 845a2a55e51SPrabhakar Kushwaha * @endpoint: Endpoint configuration parameters 846a2a55e51SPrabhakar Kushwaha * 847a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 848a2a55e51SPrabhakar Kushwaha */ 849a2a55e51SPrabhakar Kushwaha int dprc_disconnect(struct fsl_mc_io *mc_io, 85087457d11SPrabhakar Kushwaha uint32_t cmd_flags, 851a2a55e51SPrabhakar Kushwaha uint16_t token, 852a2a55e51SPrabhakar Kushwaha const struct dprc_endpoint *endpoint); 853a2a55e51SPrabhakar Kushwaha 854a2a55e51SPrabhakar Kushwaha /** 855a2a55e51SPrabhakar Kushwaha * dprc_get_connection() - Get connected endpoint and link status if connection 856a2a55e51SPrabhakar Kushwaha * exists. 85787457d11SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 85887457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 85987457d11SPrabhakar Kushwaha * @token: Token of DPRC object 86087457d11SPrabhakar Kushwaha * @endpoint1: Endpoint 1 configuration parameters 86187457d11SPrabhakar Kushwaha * @endpoint2: Returned endpoint 2 configuration parameters 862a2a55e51SPrabhakar Kushwaha * @state: Returned link state: 1 - link is up, 0 - link is down 863a2a55e51SPrabhakar Kushwaha * 864a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; -ENAVAIL if connection does not exist. 865a2a55e51SPrabhakar Kushwaha */ 866a2a55e51SPrabhakar Kushwaha int dprc_get_connection(struct fsl_mc_io *mc_io, 86787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 868a2a55e51SPrabhakar Kushwaha uint16_t token, 869a2a55e51SPrabhakar Kushwaha const struct dprc_endpoint *endpoint1, 870a2a55e51SPrabhakar Kushwaha struct dprc_endpoint *endpoint2, 871a2a55e51SPrabhakar Kushwaha int *state); 872a2a55e51SPrabhakar Kushwaha 873a2a55e51SPrabhakar Kushwaha #endif /* _FSL_DPRC_H */ 874