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 14*53e353fcSPrabhakar Kushwaha #define DPRC_VER_MINOR 1 15a2a55e51SPrabhakar Kushwaha 16a2a55e51SPrabhakar Kushwaha /* Command IDs */ 17a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_CLOSE 0x800 18a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_OPEN 0x805 191ebbe4fcSPrabhakar 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 241ebbe4fcSPrabhakar Kushwaha #define DPRC_CMDID_CREATE_CONT 0x151 251ebbe4fcSPrabhakar 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 */ 461ebbe4fcSPrabhakar Kushwaha #define DPRC_CMD_CREATE_CONTAINER(cmd, cfg) \ 471ebbe4fcSPrabhakar Kushwaha do { \ 481ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 16, uint16_t, cfg->icid); \ 491ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, uint32_t, cfg->options); \ 501ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 32, int, cfg->portal_id); \ 511ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, cfg->label[0]);\ 521ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, cfg->label[1]);\ 531ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, cfg->label[2]);\ 541ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, cfg->label[3]);\ 551ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, cfg->label[4]);\ 561ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, cfg->label[5]);\ 571ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, cfg->label[6]);\ 581ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, cfg->label[7]);\ 591ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 8, char, cfg->label[8]);\ 601ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 8, char, cfg->label[9]);\ 611ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 16, 8, char, cfg->label[10]);\ 621ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 24, 8, char, cfg->label[11]);\ 631ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 8, char, cfg->label[12]);\ 641ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 40, 8, char, cfg->label[13]);\ 651ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 48, 8, char, cfg->label[14]);\ 661ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 56, 8, char, cfg->label[15]);\ 671ebbe4fcSPrabhakar Kushwaha } while (0) 681ebbe4fcSPrabhakar Kushwaha 691ebbe4fcSPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 701ebbe4fcSPrabhakar Kushwaha #define DPRC_RSP_CREATE_CONTAINER(cmd, child_container_id, child_portal_offset)\ 711ebbe4fcSPrabhakar Kushwaha do { \ 721ebbe4fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 32, int, child_container_id); \ 731ebbe4fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 64, uint64_t, child_portal_offset);\ 741ebbe4fcSPrabhakar Kushwaha } while (0) 751ebbe4fcSPrabhakar Kushwaha 761ebbe4fcSPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 771ebbe4fcSPrabhakar Kushwaha #define DPRC_CMD_DESTROY_CONTAINER(cmd, child_container_id) \ 781ebbe4fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, child_container_id) 791ebbe4fcSPrabhakar Kushwaha 801ebbe4fcSPrabhakar 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);\ 113*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 32, 16, uint16_t, obj_desc->flags); \ 114*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 0, 8, char, obj_desc->type[0]);\ 115*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 8, 8, char, obj_desc->type[1]);\ 116*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 16, 8, char, obj_desc->type[2]);\ 117*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 24, 8, char, obj_desc->type[3]);\ 118*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 32, 8, char, obj_desc->type[4]);\ 119*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 40, 8, char, obj_desc->type[5]);\ 120*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 48, 8, char, obj_desc->type[6]);\ 121*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 56, 8, char, obj_desc->type[7]);\ 122*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 0, 8, char, obj_desc->type[8]);\ 123*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 8, 8, char, obj_desc->type[9]);\ 124*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 16, 8, char, obj_desc->type[10]);\ 125*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 24, 8, char, obj_desc->type[11]);\ 126*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 32, 8, char, obj_desc->type[12]);\ 127*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 40, 8, char, obj_desc->type[13]);\ 128*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 48, 8, char, obj_desc->type[14]);\ 129*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 56, 8, char, obj_desc->type[15]);\ 130*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 0, 8, char, obj_desc->label[0]);\ 131*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 8, 8, char, obj_desc->label[1]);\ 132*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 16, 8, char, obj_desc->label[2]);\ 133*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 24, 8, char, obj_desc->label[3]);\ 134*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 32, 8, char, obj_desc->label[4]);\ 135*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 40, 8, char, obj_desc->label[5]);\ 136*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 48, 8, char, obj_desc->label[6]);\ 137*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 56, 8, char, obj_desc->label[7]);\ 138*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 0, 8, char, obj_desc->label[8]);\ 139*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 8, 8, char, obj_desc->label[9]);\ 140*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 16, 8, char, obj_desc->label[10]);\ 141*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 24, 8, char, obj_desc->label[11]);\ 142*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 32, 8, char, obj_desc->label[12]);\ 143*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 40, 8, char, obj_desc->label[13]);\ 144*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 48, 8, char, obj_desc->label[14]);\ 145*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 56, 8, char, obj_desc->label[15]);\ 146*53e353fcSPrabhakar Kushwaha } while (0) 147*53e353fcSPrabhakar Kushwaha 148*53e353fcSPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 149*53e353fcSPrabhakar Kushwaha #define DPRC_CMD_GET_OBJ_DESC(cmd, obj_type, obj_id) \ 150*53e353fcSPrabhakar Kushwaha do { \ 151*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, obj_id);\ 152*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 8, char, obj_type[0]);\ 153*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 8, 8, char, obj_type[1]);\ 154*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 8, char, obj_type[2]);\ 155*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 24, 8, char, obj_type[3]);\ 156*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 8, char, obj_type[4]);\ 157*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 40, 8, char, obj_type[5]);\ 158*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 48, 8, char, obj_type[6]);\ 159*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 56, 8, char, obj_type[7]);\ 160*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, obj_type[8]);\ 161*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, obj_type[9]);\ 162*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, obj_type[10]);\ 163*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, obj_type[11]);\ 164*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, obj_type[12]);\ 165*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, obj_type[13]);\ 166*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, obj_type[14]);\ 167*53e353fcSPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, obj_type[15]);\ 168*53e353fcSPrabhakar Kushwaha } while (0) 169*53e353fcSPrabhakar Kushwaha 170*53e353fcSPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 171*53e353fcSPrabhakar Kushwaha #define DPRC_RSP_GET_OBJ_DESC(cmd, obj_desc) \ 172*53e353fcSPrabhakar Kushwaha do { \ 173*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 32, int, obj_desc->id); \ 174*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 16, uint16_t, obj_desc->vendor); \ 175*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 16, 8, uint8_t, obj_desc->irq_count); \ 176*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 24, 8, uint8_t, obj_desc->region_count); \ 177*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 32, uint32_t, obj_desc->state);\ 178*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 16, uint16_t, obj_desc->ver_major);\ 179*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 16, 16, uint16_t, obj_desc->ver_minor);\ 180*53e353fcSPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 32, 16, uint16_t, obj_desc->flags); \ 181a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 0, 8, char, obj_desc->type[0]);\ 182a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 8, 8, char, obj_desc->type[1]);\ 183a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 16, 8, char, obj_desc->type[2]);\ 184a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 24, 8, char, obj_desc->type[3]);\ 185a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 32, 8, char, obj_desc->type[4]);\ 186a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 40, 8, char, obj_desc->type[5]);\ 187a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 48, 8, char, obj_desc->type[6]);\ 188a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 56, 8, char, obj_desc->type[7]);\ 189a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 0, 8, char, obj_desc->type[8]);\ 190a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 8, 8, char, obj_desc->type[9]);\ 191a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 16, 8, char, obj_desc->type[10]);\ 192a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 24, 8, char, obj_desc->type[11]);\ 193a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 32, 8, char, obj_desc->type[12]);\ 194a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 40, 8, char, obj_desc->type[13]);\ 195a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 48, 8, char, obj_desc->type[14]);\ 196a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 56, 8, char, obj_desc->type[15]);\ 1971f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 0, 8, char, obj_desc->label[0]);\ 1981f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 8, 8, char, obj_desc->label[1]);\ 1991f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 16, 8, char, obj_desc->label[2]);\ 2001f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 24, 8, char, obj_desc->label[3]);\ 2011f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 32, 8, char, obj_desc->label[4]);\ 2021f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 40, 8, char, obj_desc->label[5]);\ 2031f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 48, 8, char, obj_desc->label[6]);\ 2041f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 56, 8, char, obj_desc->label[7]);\ 2051f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 0, 8, char, obj_desc->label[8]);\ 2061f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 8, 8, char, obj_desc->label[9]);\ 2071f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 16, 8, char, obj_desc->label[10]);\ 2081f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 24, 8, char, obj_desc->label[11]);\ 2091f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 32, 8, char, obj_desc->label[12]);\ 2101f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 40, 8, char, obj_desc->label[13]);\ 2111f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 48, 8, char, obj_desc->label[14]);\ 2121f1c25c7SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 56, 8, char, obj_desc->label[15]);\ 213a2a55e51SPrabhakar Kushwaha } while (0) 214a2a55e51SPrabhakar Kushwaha 215a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 216a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_RES_COUNT(cmd, type) \ 217a2a55e51SPrabhakar Kushwaha do { \ 218a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 8, char, type[0]);\ 219a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 8, 8, char, type[1]);\ 220a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 8, char, type[2]);\ 221a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 24, 8, char, type[3]);\ 222a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 8, char, type[4]);\ 223a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 40, 8, char, type[5]);\ 224a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 48, 8, char, type[6]);\ 225a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 56, 8, char, type[7]);\ 226a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, type[8]);\ 227a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, type[9]);\ 228a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, type[10]);\ 229a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, type[11]);\ 230a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, type[12]);\ 231a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, type[13]);\ 232a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, type[14]);\ 233a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, type[15]);\ 234a2a55e51SPrabhakar Kushwaha } while (0) 235a2a55e51SPrabhakar Kushwaha 236a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 237a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_RES_COUNT(cmd, res_count) \ 238a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, res_count) 239a2a55e51SPrabhakar Kushwaha 240a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 241a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_RES_IDS(cmd, range_desc, type) \ 242a2a55e51SPrabhakar Kushwaha do { \ 243a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 42, 7, enum dprc_iter_status, \ 244a2a55e51SPrabhakar Kushwaha range_desc->iter_status); \ 245a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 32, int, range_desc->base_id); \ 246a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 32, int, range_desc->last_id);\ 247a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, type[0]);\ 248a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, type[1]);\ 249a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, type[2]);\ 250a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, type[3]);\ 251a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, type[4]);\ 252a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, type[5]);\ 253a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, type[6]);\ 254a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, type[7]);\ 255a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 8, char, type[8]);\ 256a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 8, char, type[9]);\ 257a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 16, 8, char, type[10]);\ 258a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 24, 8, char, type[11]);\ 259a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 8, char, type[12]);\ 260a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 40, 8, char, type[13]);\ 261a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 48, 8, char, type[14]);\ 262a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 56, 8, char, type[15]);\ 263a2a55e51SPrabhakar Kushwaha } while (0) 264a2a55e51SPrabhakar Kushwaha 265a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 266a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_RES_IDS(cmd, range_desc) \ 267a2a55e51SPrabhakar Kushwaha do { \ 268a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 42, 7, enum dprc_iter_status, \ 269a2a55e51SPrabhakar Kushwaha range_desc->iter_status);\ 270a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 32, int, range_desc->base_id); \ 271a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 32, int, range_desc->last_id);\ 272a2a55e51SPrabhakar Kushwaha } while (0) 273a2a55e51SPrabhakar Kushwaha 274a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 275a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index) \ 276a2a55e51SPrabhakar Kushwaha do { \ 277a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, obj_id); \ 278a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 8, uint8_t, region_index);\ 279a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 8, char, obj_type[0]);\ 280a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 8, char, obj_type[1]);\ 281a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 16, 8, char, obj_type[2]);\ 282a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 24, 8, char, obj_type[3]);\ 283a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 8, char, obj_type[4]);\ 284a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 40, 8, char, obj_type[5]);\ 285a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 48, 8, char, obj_type[6]);\ 286a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 56, 8, char, obj_type[7]);\ 287a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 0, 8, char, obj_type[8]);\ 288a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 8, 8, char, obj_type[9]);\ 289a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 16, 8, char, obj_type[10]);\ 290a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 24, 8, char, obj_type[11]);\ 291a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 32, 8, char, obj_type[12]);\ 292a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 40, 8, char, obj_type[13]);\ 293a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 48, 8, char, obj_type[14]);\ 294a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 56, 8, char, obj_type[15]);\ 295a2a55e51SPrabhakar Kushwaha } while (0) 296a2a55e51SPrabhakar Kushwaha 297a2a55e51SPrabhakar Kushwaha /* param, offset, width, type, arg_name */ 298a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_OBJ_REGION(cmd, region_desc) \ 299a2a55e51SPrabhakar Kushwaha do { \ 30087457d11SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 32, uint32_t, region_desc->base_offset);\ 301a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 32, uint32_t, region_desc->size); \ 30287457d11SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 32, 4, enum dprc_region_type, region_desc->type);\ 30387457d11SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 0, 32, uint32_t, region_desc->flags);\ 304a2a55e51SPrabhakar Kushwaha } while (0) 305a2a55e51SPrabhakar Kushwaha 306a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 30787457d11SPrabhakar Kushwaha #define DPRC_CMD_SET_OBJ_LABEL(cmd, obj_type, obj_id, label) \ 3081f1c25c7SPrabhakar Kushwaha do { \ 30987457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, obj_id); \ 3101f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 8, char, label[0]);\ 3111f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 8, 8, char, label[1]);\ 3121f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 8, char, label[2]);\ 3131f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 24, 8, char, label[3]);\ 3141f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 8, char, label[4]);\ 3151f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 40, 8, char, label[5]);\ 3161f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 48, 8, char, label[6]);\ 3171f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 56, 8, char, label[7]);\ 3181f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, label[8]);\ 3191f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, label[9]);\ 3201f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, label[10]);\ 3211f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, label[11]);\ 3221f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, label[12]);\ 3231f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, label[13]);\ 3241f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, label[14]);\ 3251f1c25c7SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, label[15]);\ 32687457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 8, char, obj_type[0]);\ 32787457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 8, char, obj_type[1]);\ 32887457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 16, 8, char, obj_type[2]);\ 32987457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 24, 8, char, obj_type[3]);\ 33087457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 8, char, obj_type[4]);\ 33187457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 40, 8, char, obj_type[5]);\ 33287457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 48, 8, char, obj_type[6]);\ 33387457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 56, 8, char, obj_type[7]);\ 33487457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 0, 8, char, obj_type[8]);\ 33587457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 8, 8, char, obj_type[9]);\ 33687457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 16, 8, char, obj_type[10]);\ 33787457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 24, 8, char, obj_type[11]);\ 33887457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 32, 8, char, obj_type[12]);\ 33987457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 40, 8, char, obj_type[13]);\ 34087457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 48, 8, char, obj_type[14]);\ 34187457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 56, 8, char, obj_type[15]);\ 3421f1c25c7SPrabhakar Kushwaha } while (0) 3431f1c25c7SPrabhakar Kushwaha 3441f1c25c7SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 34587457d11SPrabhakar Kushwaha #define DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg) \ 346a2a55e51SPrabhakar Kushwaha do { \ 347a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, endpoint1->id); \ 34887457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint1->if_id); \ 349a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 32, int, endpoint2->id); \ 35087457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 16, uint16_t, endpoint2->if_id); \ 351a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, endpoint1->type[0]); \ 352a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, endpoint1->type[1]); \ 353a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, endpoint1->type[2]); \ 354a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, endpoint1->type[3]); \ 355a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, endpoint1->type[4]); \ 356a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, endpoint1->type[5]); \ 357a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, endpoint1->type[6]); \ 358a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, endpoint1->type[7]); \ 359a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 8, char, endpoint1->type[8]); \ 360a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 8, char, endpoint1->type[9]); \ 361a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 16, 8, char, endpoint1->type[10]); \ 362a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 24, 8, char, endpoint1->type[11]); \ 363a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 8, char, endpoint1->type[12]); \ 364a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 40, 8, char, endpoint1->type[13]); \ 365a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 48, 8, char, endpoint1->type[14]); \ 366a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 56, 8, char, endpoint1->type[15]); \ 36787457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 0, 32, uint32_t, cfg->max_rate); \ 36887457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 32, 32, uint32_t, cfg->committed_rate); \ 369a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 0, 8, char, endpoint2->type[0]); \ 370a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 8, 8, char, endpoint2->type[1]); \ 371a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 16, 8, char, endpoint2->type[2]); \ 372a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 24, 8, char, endpoint2->type[3]); \ 373a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 32, 8, char, endpoint2->type[4]); \ 374a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 40, 8, char, endpoint2->type[5]); \ 375a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 48, 8, char, endpoint2->type[6]); \ 376a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 56, 8, char, endpoint2->type[7]); \ 377a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 0, 8, char, endpoint2->type[8]); \ 378a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 8, 8, char, endpoint2->type[9]); \ 379a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 16, 8, char, endpoint2->type[10]); \ 380a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 24, 8, char, endpoint2->type[11]); \ 381a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 32, 8, char, endpoint2->type[12]); \ 382a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 40, 8, char, endpoint2->type[13]); \ 383a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 48, 8, char, endpoint2->type[14]); \ 384a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 56, 8, char, endpoint2->type[15]); \ 385a2a55e51SPrabhakar Kushwaha } while (0) 386a2a55e51SPrabhakar Kushwaha 387a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 388a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_DISCONNECT(cmd, endpoint) \ 389a2a55e51SPrabhakar Kushwaha do { \ 390a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, endpoint->id); \ 39187457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint->if_id); \ 392a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 8, char, endpoint->type[0]); \ 393a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 8, 8, char, endpoint->type[1]); \ 394a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 8, char, endpoint->type[2]); \ 395a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 24, 8, char, endpoint->type[3]); \ 396a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 8, char, endpoint->type[4]); \ 397a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 40, 8, char, endpoint->type[5]); \ 398a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 48, 8, char, endpoint->type[6]); \ 399a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 56, 8, char, endpoint->type[7]); \ 400a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, endpoint->type[8]); \ 401a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, endpoint->type[9]); \ 402a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, endpoint->type[10]); \ 403a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, endpoint->type[11]); \ 404a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, endpoint->type[12]); \ 405a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, endpoint->type[13]); \ 406a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, endpoint->type[14]); \ 407a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, endpoint->type[15]); \ 408a2a55e51SPrabhakar Kushwaha } while (0) 409a2a55e51SPrabhakar Kushwaha 410a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 411a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_CONNECTION(cmd, endpoint1) \ 412a2a55e51SPrabhakar Kushwaha do { \ 413a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, endpoint1->id); \ 41487457d11SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint1->if_id); \ 415a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 8, char, endpoint1->type[0]); \ 416a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 8, 8, char, endpoint1->type[1]); \ 417a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 8, char, endpoint1->type[2]); \ 418a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 24, 8, char, endpoint1->type[3]); \ 419a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 8, char, endpoint1->type[4]); \ 420a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 40, 8, char, endpoint1->type[5]); \ 421a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 48, 8, char, endpoint1->type[6]); \ 422a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 56, 8, char, endpoint1->type[7]); \ 423a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, endpoint1->type[8]); \ 424a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, endpoint1->type[9]); \ 425a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, endpoint1->type[10]); \ 426a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, endpoint1->type[11]); \ 427a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, endpoint1->type[12]); \ 428a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, endpoint1->type[13]); \ 429a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, endpoint1->type[14]); \ 430a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, endpoint1->type[15]); \ 431a2a55e51SPrabhakar Kushwaha } while (0) 432a2a55e51SPrabhakar Kushwaha 433a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 434a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_CONNECTION(cmd, endpoint2, state) \ 435a2a55e51SPrabhakar Kushwaha do { \ 436a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 0, 32, int, endpoint2->id); \ 43787457d11SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 32, 16, uint16_t, endpoint2->if_id); \ 438a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 0, 8, char, endpoint2->type[0]); \ 439a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 8, 8, char, endpoint2->type[1]); \ 440a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 16, 8, char, endpoint2->type[2]); \ 441a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 24, 8, char, endpoint2->type[3]); \ 442a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 32, 8, char, endpoint2->type[4]); \ 443a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 40, 8, char, endpoint2->type[5]); \ 444a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 48, 8, char, endpoint2->type[6]); \ 445a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 56, 8, char, endpoint2->type[7]); \ 446a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 0, 8, char, endpoint2->type[8]); \ 447a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 8, 8, char, endpoint2->type[9]); \ 448a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 16, 8, char, endpoint2->type[10]); \ 449a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 24, 8, char, endpoint2->type[11]); \ 450a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 32, 8, char, endpoint2->type[12]); \ 451a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 40, 8, char, endpoint2->type[13]); \ 452a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 48, 8, char, endpoint2->type[14]); \ 453a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 56, 8, char, endpoint2->type[15]); \ 454a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 0, 32, int, state); \ 455a2a55e51SPrabhakar Kushwaha } while (0) 456a2a55e51SPrabhakar Kushwaha 457a2a55e51SPrabhakar Kushwaha /* Data Path Resource Container API 458a2a55e51SPrabhakar Kushwaha * Contains DPRC API for managing and querying DPAA resources 459a2a55e51SPrabhakar Kushwaha */ 4601f1c25c7SPrabhakar Kushwaha 461a2a55e51SPrabhakar Kushwaha struct fsl_mc_io; 462a2a55e51SPrabhakar Kushwaha 463a2a55e51SPrabhakar Kushwaha /** 464a2a55e51SPrabhakar Kushwaha * Set this value as the icid value in dprc_cfg structure when creating a 465a2a55e51SPrabhakar Kushwaha * container, in case the ICID is not selected by the user and should be 466a2a55e51SPrabhakar Kushwaha * allocated by the DPRC from the pool of ICIDs. 467a2a55e51SPrabhakar Kushwaha */ 468a2a55e51SPrabhakar Kushwaha #define DPRC_GET_ICID_FROM_POOL (uint16_t)(~(0)) 469a2a55e51SPrabhakar Kushwaha 470a2a55e51SPrabhakar Kushwaha /** 471a2a55e51SPrabhakar Kushwaha * Set this value as the portal_id value in dprc_cfg structure when creating a 472a2a55e51SPrabhakar Kushwaha * container, in case the portal ID is not specifically selected by the 473a2a55e51SPrabhakar Kushwaha * user and should be allocated by the DPRC from the pool of portal ids. 474a2a55e51SPrabhakar Kushwaha */ 475a2a55e51SPrabhakar Kushwaha #define DPRC_GET_PORTAL_ID_FROM_POOL (int)(~(0)) 476a2a55e51SPrabhakar Kushwaha 477a2a55e51SPrabhakar Kushwaha /** 478a2a55e51SPrabhakar Kushwaha * dprc_get_container_id() - Get container ID associated with a given portal. 479a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 48087457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 481a2a55e51SPrabhakar Kushwaha * @container_id: Requested container ID 482a2a55e51SPrabhakar Kushwaha * 483a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 484a2a55e51SPrabhakar Kushwaha */ 48587457d11SPrabhakar Kushwaha int dprc_get_container_id(struct fsl_mc_io *mc_io, 48687457d11SPrabhakar Kushwaha uint32_t cmd_flags, 48787457d11SPrabhakar Kushwaha int *container_id); 488a2a55e51SPrabhakar Kushwaha 489a2a55e51SPrabhakar Kushwaha /** 490a2a55e51SPrabhakar Kushwaha * dprc_open() - Open DPRC object for use 491a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 49287457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 493a2a55e51SPrabhakar Kushwaha * @container_id: Container ID to open 494a2a55e51SPrabhakar Kushwaha * @token: Returned token of DPRC object 495a2a55e51SPrabhakar Kushwaha * 496a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 497a2a55e51SPrabhakar Kushwaha * 498a2a55e51SPrabhakar Kushwaha * @warning Required before any operation on the object. 499a2a55e51SPrabhakar Kushwaha */ 50087457d11SPrabhakar Kushwaha int dprc_open(struct fsl_mc_io *mc_io, 50187457d11SPrabhakar Kushwaha uint32_t cmd_flags, 50287457d11SPrabhakar Kushwaha int container_id, 50387457d11SPrabhakar Kushwaha uint16_t *token); 504a2a55e51SPrabhakar Kushwaha 505a2a55e51SPrabhakar Kushwaha /** 506a2a55e51SPrabhakar Kushwaha * dprc_close() - Close the control session of the object 507a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 50887457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 509a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 510a2a55e51SPrabhakar Kushwaha * 511a2a55e51SPrabhakar Kushwaha * After this function is called, no further operations are 512a2a55e51SPrabhakar Kushwaha * allowed on the object without opening a new control session. 513a2a55e51SPrabhakar Kushwaha * 514a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 515a2a55e51SPrabhakar Kushwaha */ 51687457d11SPrabhakar Kushwaha int dprc_close(struct fsl_mc_io *mc_io, 51787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 51887457d11SPrabhakar Kushwaha uint16_t token); 519a2a55e51SPrabhakar Kushwaha 520a2a55e51SPrabhakar Kushwaha /** 521a2a55e51SPrabhakar Kushwaha * Container general options 522a2a55e51SPrabhakar Kushwaha * 523a2a55e51SPrabhakar Kushwaha * These options may be selected at container creation by the container creator 524a2a55e51SPrabhakar Kushwaha * and can be retrieved using dprc_get_attributes() 525a2a55e51SPrabhakar Kushwaha */ 526a2a55e51SPrabhakar Kushwaha 527a2a55e51SPrabhakar Kushwaha /* Spawn Policy Option allowed - Indicates that the new container is allowed 528a2a55e51SPrabhakar Kushwaha * to spawn and have its own child containers. 529a2a55e51SPrabhakar Kushwaha */ 530a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_SPAWN_ALLOWED 0x00000001 531a2a55e51SPrabhakar Kushwaha 532a2a55e51SPrabhakar Kushwaha /* General Container allocation policy - Indicates that the new container is 533a2a55e51SPrabhakar Kushwaha * allowed to allocate requested resources from its parent container; if not 534a2a55e51SPrabhakar Kushwaha * set, the container is only allowed to use resources in its own pools; Note 535a2a55e51SPrabhakar Kushwaha * that this is a container's global policy, but the parent container may 536a2a55e51SPrabhakar Kushwaha * override it and set specific quota per resource type. 537a2a55e51SPrabhakar Kushwaha */ 538a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_ALLOC_ALLOWED 0x00000002 539a2a55e51SPrabhakar Kushwaha 540a2a55e51SPrabhakar Kushwaha /* Object initialization allowed - software context associated with this 541a2a55e51SPrabhakar Kushwaha * container is allowed to invoke object initialization operations. 542a2a55e51SPrabhakar Kushwaha */ 543a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_OBJ_CREATE_ALLOWED 0x00000004 544a2a55e51SPrabhakar Kushwaha 545a2a55e51SPrabhakar Kushwaha /* Topology change allowed - software context associated with this 546a2a55e51SPrabhakar Kushwaha * container is allowed to invoke topology operations, such as attach/detach 547a2a55e51SPrabhakar Kushwaha * of network objects. 548a2a55e51SPrabhakar Kushwaha */ 549a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_TOPOLOGY_CHANGES_ALLOWED 0x00000008 550a2a55e51SPrabhakar Kushwaha 551a2a55e51SPrabhakar Kushwaha 552a2a55e51SPrabhakar Kushwaha /* AIOP - Indicates that container belongs to AIOP. */ 553a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_AIOP 0x00000020 554a2a55e51SPrabhakar Kushwaha 555*53e353fcSPrabhakar Kushwaha /* IRQ Config - Indicates that the container allowed to configure its IRQs.*/ 556*53e353fcSPrabhakar Kushwaha #define DPRC_CFG_OPT_IRQ_CFG_ALLOWED 0x00000040 557*53e353fcSPrabhakar Kushwaha 558a2a55e51SPrabhakar Kushwaha /** 559a2a55e51SPrabhakar Kushwaha * struct dprc_cfg - Container configuration options 560a2a55e51SPrabhakar Kushwaha * @icid: Container's ICID; if set to 'DPRC_GET_ICID_FROM_POOL', a free 561a2a55e51SPrabhakar Kushwaha * ICID value is allocated by the DPRC 562a2a55e51SPrabhakar Kushwaha * @portal_id: Portal ID; if set to 'DPRC_GET_PORTAL_ID_FROM_POOL', a free 563a2a55e51SPrabhakar Kushwaha * portal ID is allocated by the DPRC 564a2a55e51SPrabhakar Kushwaha * @options: Combination of 'DPRC_CFG_OPT_<X>' options 5651f1c25c7SPrabhakar Kushwaha * @label: Object's label 566a2a55e51SPrabhakar Kushwaha */ 567a2a55e51SPrabhakar Kushwaha struct dprc_cfg { 568a2a55e51SPrabhakar Kushwaha uint16_t icid; 569a2a55e51SPrabhakar Kushwaha int portal_id; 570a2a55e51SPrabhakar Kushwaha uint64_t options; 5711f1c25c7SPrabhakar Kushwaha char label[16]; 572a2a55e51SPrabhakar Kushwaha }; 573a2a55e51SPrabhakar Kushwaha 574a2a55e51SPrabhakar Kushwaha /** 5751ebbe4fcSPrabhakar Kushwaha * dprc_create_container() - Create child container 5761ebbe4fcSPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 5771ebbe4fcSPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 5781ebbe4fcSPrabhakar Kushwaha * @token: Token of DPRC object 5791ebbe4fcSPrabhakar Kushwaha * @cfg: Child container configuration 5801ebbe4fcSPrabhakar Kushwaha * @child_container_id: Returned child container ID 5811ebbe4fcSPrabhakar Kushwaha * @child_portal_offset: Returned child portal offset from MC portal base 5821ebbe4fcSPrabhakar Kushwaha * 5831ebbe4fcSPrabhakar Kushwaha * 5841ebbe4fcSPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 5851ebbe4fcSPrabhakar Kushwaha */ 5861ebbe4fcSPrabhakar Kushwaha int dprc_create_container(struct fsl_mc_io *mc_io, 5871ebbe4fcSPrabhakar Kushwaha uint32_t cmd_flags, 5881ebbe4fcSPrabhakar Kushwaha uint16_t token, 5891ebbe4fcSPrabhakar Kushwaha struct dprc_cfg *cfg, 5901ebbe4fcSPrabhakar Kushwaha int *child_container_id, 5911ebbe4fcSPrabhakar Kushwaha uint64_t *child_portal_offset); 5921ebbe4fcSPrabhakar Kushwaha 5931ebbe4fcSPrabhakar Kushwaha /** 5941ebbe4fcSPrabhakar Kushwaha * dprc_destroy_container() - Destroy child container. 5951ebbe4fcSPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 5961ebbe4fcSPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 5971ebbe4fcSPrabhakar Kushwaha * @token: Token of DPRC object 5981ebbe4fcSPrabhakar Kushwaha * @child_container_id: ID of the container to destroy 5991ebbe4fcSPrabhakar Kushwaha * 6001ebbe4fcSPrabhakar Kushwaha * This function terminates the child container, so following this call the 6011ebbe4fcSPrabhakar Kushwaha * child container ID becomes invalid. 6021ebbe4fcSPrabhakar Kushwaha * 6031ebbe4fcSPrabhakar Kushwaha * Notes: 6041ebbe4fcSPrabhakar Kushwaha * - All resources and objects of the destroyed container are returned to the 6051ebbe4fcSPrabhakar Kushwaha * parent container or destroyed if were created be the destroyed container. 6061ebbe4fcSPrabhakar Kushwaha * - This function destroy all the child containers of the specified 6071ebbe4fcSPrabhakar Kushwaha * container prior to destroying the container itself. 6081ebbe4fcSPrabhakar Kushwaha * 6091ebbe4fcSPrabhakar Kushwaha * warning: Only the parent container is allowed to destroy a child policy 6101ebbe4fcSPrabhakar Kushwaha * Container 0 can't be destroyed 6111ebbe4fcSPrabhakar Kushwaha * 6121ebbe4fcSPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 6131ebbe4fcSPrabhakar Kushwaha * 6141ebbe4fcSPrabhakar Kushwaha */ 6151ebbe4fcSPrabhakar Kushwaha int dprc_destroy_container(struct fsl_mc_io *mc_io, 6161ebbe4fcSPrabhakar Kushwaha uint32_t cmd_flags, 6171ebbe4fcSPrabhakar Kushwaha uint16_t token, 6181ebbe4fcSPrabhakar Kushwaha int child_container_id); 6191ebbe4fcSPrabhakar Kushwaha 6201ebbe4fcSPrabhakar Kushwaha /** 621a2a55e51SPrabhakar Kushwaha * dprc_reset_container - Reset child container. 622a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 62387457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 624a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 625a2a55e51SPrabhakar Kushwaha * @child_container_id: ID of the container to reset 626a2a55e51SPrabhakar Kushwaha * 627a2a55e51SPrabhakar Kushwaha * In case a software context crashes or becomes non-responsive, the parent 628a2a55e51SPrabhakar Kushwaha * may wish to reset its resources container before the software context is 629a2a55e51SPrabhakar Kushwaha * restarted. 630a2a55e51SPrabhakar Kushwaha * 631a2a55e51SPrabhakar Kushwaha * This routine informs all objects assigned to the child container that the 632a2a55e51SPrabhakar Kushwaha * container is being reset, so they may perform any cleanup operations that are 633a2a55e51SPrabhakar Kushwaha * needed. All objects handles that were owned by the child container shall be 634a2a55e51SPrabhakar Kushwaha * closed. 635a2a55e51SPrabhakar Kushwaha * 636a2a55e51SPrabhakar Kushwaha * Note that such request may be submitted even if the child software context 637a2a55e51SPrabhakar Kushwaha * has not crashed, but the resulting object cleanup operations will not be 638a2a55e51SPrabhakar Kushwaha * aware of that. 639a2a55e51SPrabhakar Kushwaha * 640a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 641a2a55e51SPrabhakar Kushwaha */ 642a2a55e51SPrabhakar Kushwaha int dprc_reset_container(struct fsl_mc_io *mc_io, 64387457d11SPrabhakar Kushwaha uint32_t cmd_flags, 644a2a55e51SPrabhakar Kushwaha uint16_t token, 645a2a55e51SPrabhakar Kushwaha int child_container_id); 646a2a55e51SPrabhakar Kushwaha 647a2a55e51SPrabhakar Kushwaha /** 648a2a55e51SPrabhakar Kushwaha * struct dprc_attributes - Container attributes 649a2a55e51SPrabhakar Kushwaha * @container_id: Container's ID 650a2a55e51SPrabhakar Kushwaha * @icid: Container's ICID 651a2a55e51SPrabhakar Kushwaha * @portal_id: Container's portal ID 652a2a55e51SPrabhakar Kushwaha * @options: Container's options as set at container's creation 653a2a55e51SPrabhakar Kushwaha * @version: DPRC version 654a2a55e51SPrabhakar Kushwaha */ 655a2a55e51SPrabhakar Kushwaha struct dprc_attributes { 656a2a55e51SPrabhakar Kushwaha int container_id; 657a2a55e51SPrabhakar Kushwaha uint16_t icid; 658a2a55e51SPrabhakar Kushwaha int portal_id; 659a2a55e51SPrabhakar Kushwaha uint64_t options; 660a2a55e51SPrabhakar Kushwaha /** 661a2a55e51SPrabhakar Kushwaha * struct version - DPRC version 662a2a55e51SPrabhakar Kushwaha * @major: DPRC major version 663a2a55e51SPrabhakar Kushwaha * @minor: DPRC minor version 664a2a55e51SPrabhakar Kushwaha */ 665a2a55e51SPrabhakar Kushwaha struct { 666a2a55e51SPrabhakar Kushwaha uint16_t major; 667a2a55e51SPrabhakar Kushwaha uint16_t minor; 668a2a55e51SPrabhakar Kushwaha } version; 669a2a55e51SPrabhakar Kushwaha }; 670a2a55e51SPrabhakar Kushwaha 671a2a55e51SPrabhakar Kushwaha /** 672a2a55e51SPrabhakar Kushwaha * dprc_get_attributes() - Obtains container attributes 673a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 67487457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 675a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 67687457d11SPrabhakar Kushwaha * @attributes: Returned container attributes 677a2a55e51SPrabhakar Kushwaha * 678a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 679a2a55e51SPrabhakar Kushwaha */ 680a2a55e51SPrabhakar Kushwaha int dprc_get_attributes(struct fsl_mc_io *mc_io, 68187457d11SPrabhakar Kushwaha uint32_t cmd_flags, 682a2a55e51SPrabhakar Kushwaha uint16_t token, 683a2a55e51SPrabhakar Kushwaha struct dprc_attributes *attributes); 684a2a55e51SPrabhakar Kushwaha 685a2a55e51SPrabhakar Kushwaha /** 686a2a55e51SPrabhakar Kushwaha * dprc_get_obj_count() - Obtains the number of objects in the DPRC 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 * @obj_count: Number of objects assigned to the DPRC 691a2a55e51SPrabhakar Kushwaha * 692a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 693a2a55e51SPrabhakar Kushwaha */ 69487457d11SPrabhakar Kushwaha int dprc_get_obj_count(struct fsl_mc_io *mc_io, 69587457d11SPrabhakar Kushwaha uint32_t cmd_flags, 69687457d11SPrabhakar Kushwaha uint16_t token, 69787457d11SPrabhakar Kushwaha int *obj_count); 698a2a55e51SPrabhakar Kushwaha 699a2a55e51SPrabhakar Kushwaha /* Objects Attributes Flags */ 700a2a55e51SPrabhakar Kushwaha 701a2a55e51SPrabhakar Kushwaha /* Opened state - Indicates that an object is open by at least one owner */ 702a2a55e51SPrabhakar Kushwaha #define DPRC_OBJ_STATE_OPEN 0x00000001 703a2a55e51SPrabhakar Kushwaha /* Plugged state - Indicates that the object is plugged */ 704a2a55e51SPrabhakar Kushwaha #define DPRC_OBJ_STATE_PLUGGED 0x00000002 705a2a55e51SPrabhakar Kushwaha 706a2a55e51SPrabhakar Kushwaha /** 707*53e353fcSPrabhakar Kushwaha * Shareability flag - Object flag indicating no memory shareability. 708*53e353fcSPrabhakar Kushwaha * the object generates memory accesses that are non coherent with other 709*53e353fcSPrabhakar Kushwaha * masters; 710*53e353fcSPrabhakar Kushwaha * user is responsible for proper memory handling through IOMMU configuration. 711*53e353fcSPrabhakar Kushwaha */ 712*53e353fcSPrabhakar Kushwaha #define DPRC_OBJ_FLAG_NO_MEM_SHAREABILITY 0x0001 713*53e353fcSPrabhakar Kushwaha 714*53e353fcSPrabhakar Kushwaha /** 715a2a55e51SPrabhakar Kushwaha * struct dprc_obj_desc - Object descriptor, returned from dprc_get_obj() 716a2a55e51SPrabhakar Kushwaha * @type: Type of object: NULL terminated string 717a2a55e51SPrabhakar Kushwaha * @id: ID of logical object resource 718a2a55e51SPrabhakar Kushwaha * @vendor: Object vendor identifier 719a2a55e51SPrabhakar Kushwaha * @ver_major: Major version number 720a2a55e51SPrabhakar Kushwaha * @ver_minor: Minor version number 721a2a55e51SPrabhakar Kushwaha * @irq_count: Number of interrupts supported by the object 722a2a55e51SPrabhakar Kushwaha * @region_count: Number of mappable regions supported by the object 723a2a55e51SPrabhakar Kushwaha * @state: Object state: combination of DPRC_OBJ_STATE_ states 7241f1c25c7SPrabhakar Kushwaha * @label: Object label 725*53e353fcSPrabhakar Kushwaha * @flags: Object's flags 726a2a55e51SPrabhakar Kushwaha */ 727a2a55e51SPrabhakar Kushwaha struct dprc_obj_desc { 728a2a55e51SPrabhakar Kushwaha char type[16]; 729a2a55e51SPrabhakar Kushwaha int id; 730a2a55e51SPrabhakar Kushwaha uint16_t vendor; 731a2a55e51SPrabhakar Kushwaha uint16_t ver_major; 732a2a55e51SPrabhakar Kushwaha uint16_t ver_minor; 733a2a55e51SPrabhakar Kushwaha uint8_t irq_count; 734a2a55e51SPrabhakar Kushwaha uint8_t region_count; 735a2a55e51SPrabhakar Kushwaha uint32_t state; 7361f1c25c7SPrabhakar Kushwaha char label[16]; 737*53e353fcSPrabhakar Kushwaha uint16_t flags; 738a2a55e51SPrabhakar Kushwaha }; 739a2a55e51SPrabhakar Kushwaha 740a2a55e51SPrabhakar Kushwaha /** 741a2a55e51SPrabhakar Kushwaha * dprc_get_obj() - Get general information on an object 742a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 74387457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 744a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 745a2a55e51SPrabhakar Kushwaha * @obj_index: Index of the object to be queried (< obj_count) 746a2a55e51SPrabhakar Kushwaha * @obj_desc: Returns the requested object descriptor 747a2a55e51SPrabhakar Kushwaha * 748a2a55e51SPrabhakar Kushwaha * The object descriptors are retrieved one by one by incrementing 749a2a55e51SPrabhakar Kushwaha * obj_index up to (not including) the value of obj_count returned 750a2a55e51SPrabhakar Kushwaha * from dprc_get_obj_count(). dprc_get_obj_count() must 751a2a55e51SPrabhakar Kushwaha * be called prior to dprc_get_obj(). 752a2a55e51SPrabhakar Kushwaha * 753a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 754a2a55e51SPrabhakar Kushwaha */ 755a2a55e51SPrabhakar Kushwaha int dprc_get_obj(struct fsl_mc_io *mc_io, 75687457d11SPrabhakar Kushwaha uint32_t cmd_flags, 757a2a55e51SPrabhakar Kushwaha uint16_t token, 758a2a55e51SPrabhakar Kushwaha int obj_index, 759a2a55e51SPrabhakar Kushwaha struct dprc_obj_desc *obj_desc); 760a2a55e51SPrabhakar Kushwaha 761a2a55e51SPrabhakar Kushwaha /** 7621f1c25c7SPrabhakar Kushwaha * dprc_get_res_count() - Obtains the number of free resources that are 7631f1c25c7SPrabhakar Kushwaha * assigned to this container, by pool type 764a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 76587457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 766a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 767a2a55e51SPrabhakar Kushwaha * @type: pool type 768a2a55e51SPrabhakar Kushwaha * @res_count: Returned number of free resources of the given 769a2a55e51SPrabhakar Kushwaha * resource type that are assigned to this DPRC 770a2a55e51SPrabhakar Kushwaha * 771a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 772a2a55e51SPrabhakar Kushwaha */ 773a2a55e51SPrabhakar Kushwaha int dprc_get_res_count(struct fsl_mc_io *mc_io, 77487457d11SPrabhakar Kushwaha uint32_t cmd_flags, 775a2a55e51SPrabhakar Kushwaha uint16_t token, 776a2a55e51SPrabhakar Kushwaha char *type, 777a2a55e51SPrabhakar Kushwaha int *res_count); 778a2a55e51SPrabhakar Kushwaha 779a2a55e51SPrabhakar Kushwaha /** 780a2a55e51SPrabhakar Kushwaha * enum dprc_iter_status - Iteration status 781a2a55e51SPrabhakar Kushwaha * @DPRC_ITER_STATUS_FIRST: Perform first iteration 782a2a55e51SPrabhakar Kushwaha * @DPRC_ITER_STATUS_MORE: Indicates more/next iteration is needed 783a2a55e51SPrabhakar Kushwaha * @DPRC_ITER_STATUS_LAST: Indicates last iteration 784a2a55e51SPrabhakar Kushwaha */ 785a2a55e51SPrabhakar Kushwaha enum dprc_iter_status { 786a2a55e51SPrabhakar Kushwaha DPRC_ITER_STATUS_FIRST = 0, 787a2a55e51SPrabhakar Kushwaha DPRC_ITER_STATUS_MORE = 1, 788a2a55e51SPrabhakar Kushwaha DPRC_ITER_STATUS_LAST = 2 789a2a55e51SPrabhakar Kushwaha }; 790a2a55e51SPrabhakar Kushwaha 791a2a55e51SPrabhakar Kushwaha /** 792a2a55e51SPrabhakar Kushwaha * struct dprc_res_ids_range_desc - Resource ID range descriptor 793a2a55e51SPrabhakar Kushwaha * @base_id: Base resource ID of this range 794a2a55e51SPrabhakar Kushwaha * @last_id: Last resource ID of this range 795a2a55e51SPrabhakar Kushwaha * @iter_status: Iteration status - should be set to DPRC_ITER_STATUS_FIRST at 796a2a55e51SPrabhakar Kushwaha * first iteration; while the returned marker is DPRC_ITER_STATUS_MORE, 797a2a55e51SPrabhakar Kushwaha * additional iterations are needed, until the returned marker is 798a2a55e51SPrabhakar Kushwaha * DPRC_ITER_STATUS_LAST 799a2a55e51SPrabhakar Kushwaha */ 800a2a55e51SPrabhakar Kushwaha struct dprc_res_ids_range_desc { 801a2a55e51SPrabhakar Kushwaha int base_id; 802a2a55e51SPrabhakar Kushwaha int last_id; 803a2a55e51SPrabhakar Kushwaha enum dprc_iter_status iter_status; 804a2a55e51SPrabhakar Kushwaha }; 805a2a55e51SPrabhakar Kushwaha 806a2a55e51SPrabhakar Kushwaha /** 807a2a55e51SPrabhakar Kushwaha * dprc_get_res_ids() - Obtains IDs of free resources in the container 808a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 80987457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 810a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 811a2a55e51SPrabhakar Kushwaha * @type: pool type 812a2a55e51SPrabhakar Kushwaha * @range_desc: range descriptor 813a2a55e51SPrabhakar Kushwaha * 814a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 815a2a55e51SPrabhakar Kushwaha */ 816a2a55e51SPrabhakar Kushwaha int dprc_get_res_ids(struct fsl_mc_io *mc_io, 81787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 818a2a55e51SPrabhakar Kushwaha uint16_t token, 819a2a55e51SPrabhakar Kushwaha char *type, 820a2a55e51SPrabhakar Kushwaha struct dprc_res_ids_range_desc *range_desc); 821a2a55e51SPrabhakar Kushwaha 82287457d11SPrabhakar Kushwaha /* Region flags */ 82387457d11SPrabhakar Kushwaha /* Cacheable - Indicates that region should be mapped as cacheable */ 82487457d11SPrabhakar Kushwaha #define DPRC_REGION_CACHEABLE 0x00000001 82587457d11SPrabhakar Kushwaha 82687457d11SPrabhakar Kushwaha /** 82787457d11SPrabhakar Kushwaha * enum dprc_region_type - Region type 82887457d11SPrabhakar Kushwaha * @DPRC_REGION_TYPE_MC_PORTAL: MC portal region 82987457d11SPrabhakar Kushwaha * @DPRC_REGION_TYPE_QBMAN_PORTAL: Qbman portal region 83087457d11SPrabhakar Kushwaha */ 83187457d11SPrabhakar Kushwaha enum dprc_region_type { 83287457d11SPrabhakar Kushwaha DPRC_REGION_TYPE_MC_PORTAL, 83387457d11SPrabhakar Kushwaha DPRC_REGION_TYPE_QBMAN_PORTAL 83487457d11SPrabhakar Kushwaha }; 83587457d11SPrabhakar Kushwaha 836a2a55e51SPrabhakar Kushwaha /** 837a2a55e51SPrabhakar Kushwaha * struct dprc_region_desc - Mappable region descriptor 8381f1c25c7SPrabhakar Kushwaha * @base_offset: Region offset from region's base address. 8391f1c25c7SPrabhakar Kushwaha * For DPMCP and DPRC objects, region base is offset from SoC MC portals 8401f1c25c7SPrabhakar Kushwaha * base address; For DPIO, region base is offset from SoC QMan portals 8411f1c25c7SPrabhakar Kushwaha * base address 842a2a55e51SPrabhakar Kushwaha * @size: Region size (in bytes) 84387457d11SPrabhakar Kushwaha * @flags: Region attributes 84487457d11SPrabhakar Kushwaha * @type: Portal region type 845a2a55e51SPrabhakar Kushwaha */ 846a2a55e51SPrabhakar Kushwaha struct dprc_region_desc { 84787457d11SPrabhakar Kushwaha uint32_t base_offset; 848a2a55e51SPrabhakar Kushwaha uint32_t size; 84987457d11SPrabhakar Kushwaha uint32_t flags; 85087457d11SPrabhakar Kushwaha enum dprc_region_type type; 851a2a55e51SPrabhakar Kushwaha }; 852a2a55e51SPrabhakar Kushwaha 853a2a55e51SPrabhakar Kushwaha /** 854a2a55e51SPrabhakar Kushwaha * dprc_get_obj_region() - Get region information for a specified object. 855a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 85687457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 857a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 85887457d11SPrabhakar Kushwaha * @obj_type: Object type as returned in dprc_get_obj() 859a2a55e51SPrabhakar Kushwaha * @obj_id: Unique object instance as returned in dprc_get_obj() 860a2a55e51SPrabhakar Kushwaha * @region_index: The specific region to query 861a2a55e51SPrabhakar Kushwaha * @region_desc: Returns the requested region descriptor 862a2a55e51SPrabhakar Kushwaha * 863a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 864a2a55e51SPrabhakar Kushwaha */ 865a2a55e51SPrabhakar Kushwaha int dprc_get_obj_region(struct fsl_mc_io *mc_io, 86687457d11SPrabhakar Kushwaha uint32_t cmd_flags, 867a2a55e51SPrabhakar Kushwaha uint16_t token, 868a2a55e51SPrabhakar Kushwaha char *obj_type, 869a2a55e51SPrabhakar Kushwaha int obj_id, 870a2a55e51SPrabhakar Kushwaha uint8_t region_index, 871a2a55e51SPrabhakar Kushwaha struct dprc_region_desc *region_desc); 872a2a55e51SPrabhakar Kushwaha /** 873a2a55e51SPrabhakar Kushwaha * struct dprc_endpoint - Endpoint description for link connect/disconnect 874a2a55e51SPrabhakar Kushwaha * operations 875a2a55e51SPrabhakar Kushwaha * @type: Endpoint object type: NULL terminated string 876a2a55e51SPrabhakar Kushwaha * @id: Endpoint object ID 87787457d11SPrabhakar Kushwaha * @if_id: Interface ID; should be set for endpoints with multiple 878a2a55e51SPrabhakar Kushwaha * interfaces ("dpsw", "dpdmux"); for others, always set to 0 879a2a55e51SPrabhakar Kushwaha */ 880a2a55e51SPrabhakar Kushwaha struct dprc_endpoint { 881a2a55e51SPrabhakar Kushwaha char type[16]; 882a2a55e51SPrabhakar Kushwaha int id; 88387457d11SPrabhakar Kushwaha uint16_t if_id; 88487457d11SPrabhakar Kushwaha }; 88587457d11SPrabhakar Kushwaha 88687457d11SPrabhakar Kushwaha /** 88787457d11SPrabhakar Kushwaha * struct dprc_connection_cfg - Connection configuration. 88887457d11SPrabhakar Kushwaha * Used for virtual connections only 88987457d11SPrabhakar Kushwaha * @committed_rate: Committed rate (Mbits/s) 89087457d11SPrabhakar Kushwaha * @max_rate: Maximum rate (Mbits/s) 89187457d11SPrabhakar Kushwaha */ 89287457d11SPrabhakar Kushwaha struct dprc_connection_cfg { 89387457d11SPrabhakar Kushwaha uint32_t committed_rate; 89487457d11SPrabhakar Kushwaha uint32_t max_rate; 895a2a55e51SPrabhakar Kushwaha }; 896a2a55e51SPrabhakar Kushwaha 897a2a55e51SPrabhakar Kushwaha /** 898a2a55e51SPrabhakar Kushwaha * dprc_connect() - Connect two endpoints to create a network link between them 899a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 90087457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 901a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 902a2a55e51SPrabhakar Kushwaha * @endpoint1: Endpoint 1 configuration parameters 903a2a55e51SPrabhakar Kushwaha * @endpoint2: Endpoint 2 configuration parameters 90487457d11SPrabhakar Kushwaha * @cfg: Connection configuration. The connection configuration is ignored for 90587457d11SPrabhakar Kushwaha * connections made to DPMAC objects, where rate is retrieved from the 90687457d11SPrabhakar Kushwaha * MAC configuration. 907a2a55e51SPrabhakar Kushwaha * 908a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 909a2a55e51SPrabhakar Kushwaha */ 910a2a55e51SPrabhakar Kushwaha int dprc_connect(struct fsl_mc_io *mc_io, 91187457d11SPrabhakar Kushwaha uint32_t cmd_flags, 912a2a55e51SPrabhakar Kushwaha uint16_t token, 913a2a55e51SPrabhakar Kushwaha const struct dprc_endpoint *endpoint1, 91487457d11SPrabhakar Kushwaha const struct dprc_endpoint *endpoint2, 91587457d11SPrabhakar Kushwaha const struct dprc_connection_cfg *cfg); 916a2a55e51SPrabhakar Kushwaha 917a2a55e51SPrabhakar Kushwaha /** 918a2a55e51SPrabhakar Kushwaha * dprc_disconnect() - Disconnect one endpoint to remove its network connection 919a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 92087457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 921a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 922a2a55e51SPrabhakar Kushwaha * @endpoint: Endpoint configuration parameters 923a2a55e51SPrabhakar Kushwaha * 924a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 925a2a55e51SPrabhakar Kushwaha */ 926a2a55e51SPrabhakar Kushwaha int dprc_disconnect(struct fsl_mc_io *mc_io, 92787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 928a2a55e51SPrabhakar Kushwaha uint16_t token, 929a2a55e51SPrabhakar Kushwaha const struct dprc_endpoint *endpoint); 930a2a55e51SPrabhakar Kushwaha 931a2a55e51SPrabhakar Kushwaha /** 932a2a55e51SPrabhakar Kushwaha * dprc_get_connection() - Get connected endpoint and link status if connection 933a2a55e51SPrabhakar Kushwaha * exists. 93487457d11SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 93587457d11SPrabhakar Kushwaha * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 93687457d11SPrabhakar Kushwaha * @token: Token of DPRC object 93787457d11SPrabhakar Kushwaha * @endpoint1: Endpoint 1 configuration parameters 93887457d11SPrabhakar Kushwaha * @endpoint2: Returned endpoint 2 configuration parameters 939*53e353fcSPrabhakar Kushwaha * @state: Returned link state: 940*53e353fcSPrabhakar Kushwaha * 1 - link is up; 941*53e353fcSPrabhakar Kushwaha * 0 - link is down; 942*53e353fcSPrabhakar Kushwaha * -1 - no connection (endpoint2 information is irrelevant) 943a2a55e51SPrabhakar Kushwaha * 944a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; -ENAVAIL if connection does not exist. 945a2a55e51SPrabhakar Kushwaha */ 946a2a55e51SPrabhakar Kushwaha int dprc_get_connection(struct fsl_mc_io *mc_io, 94787457d11SPrabhakar Kushwaha uint32_t cmd_flags, 948a2a55e51SPrabhakar Kushwaha uint16_t token, 949a2a55e51SPrabhakar Kushwaha const struct dprc_endpoint *endpoint1, 950a2a55e51SPrabhakar Kushwaha struct dprc_endpoint *endpoint2, 951a2a55e51SPrabhakar Kushwaha int *state); 952a2a55e51SPrabhakar Kushwaha 953a2a55e51SPrabhakar Kushwaha #endif /* _FSL_DPRC_H */ 954