1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Freescale Layerscape MC I/O wrapper 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Copyright (C) 2013-2015 Freescale Semiconductor, Inc. 5*4882a593Smuzhiyun * Author: German Rivera <German.Rivera@freescale.com> 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun #ifndef _FSL_DPRC_H 10*4882a593Smuzhiyun #define _FSL_DPRC_H 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun /* DPRC Version */ 13*4882a593Smuzhiyun #define DPRC_VER_MAJOR 5 14*4882a593Smuzhiyun #define DPRC_VER_MINOR 1 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /* Command IDs */ 17*4882a593Smuzhiyun #define DPRC_CMDID_CLOSE 0x800 18*4882a593Smuzhiyun #define DPRC_CMDID_OPEN 0x805 19*4882a593Smuzhiyun #define DPRC_CMDID_CREATE 0x905 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #define DPRC_CMDID_GET_ATTR 0x004 22*4882a593Smuzhiyun #define DPRC_CMDID_RESET_CONT 0x005 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #define DPRC_CMDID_CREATE_CONT 0x151 25*4882a593Smuzhiyun #define DPRC_CMDID_DESTROY_CONT 0x152 26*4882a593Smuzhiyun #define DPRC_CMDID_GET_CONT_ID 0x830 27*4882a593Smuzhiyun #define DPRC_CMDID_GET_OBJ_COUNT 0x159 28*4882a593Smuzhiyun #define DPRC_CMDID_GET_OBJ 0x15A 29*4882a593Smuzhiyun #define DPRC_CMDID_GET_RES_COUNT 0x15B 30*4882a593Smuzhiyun #define DPRC_CMDID_GET_RES_IDS 0x15C 31*4882a593Smuzhiyun #define DPRC_CMDID_GET_OBJ_REG 0x15E 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun #define DPRC_CMDID_CONNECT 0x167 34*4882a593Smuzhiyun #define DPRC_CMDID_DISCONNECT 0x168 35*4882a593Smuzhiyun #define DPRC_CMDID_GET_CONNECTION 0x16C 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 38*4882a593Smuzhiyun #define DPRC_RSP_GET_CONTAINER_ID(cmd, container_id) \ 39*4882a593Smuzhiyun MC_RSP_OP(cmd, 0, 0, 32, int, container_id) 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 42*4882a593Smuzhiyun #define DPRC_CMD_OPEN(cmd, container_id) \ 43*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 0, 32, int, container_id) 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 46*4882a593Smuzhiyun #define DPRC_CMD_CREATE_CONTAINER(cmd, cfg) \ 47*4882a593Smuzhiyun do { \ 48*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 32, 16, uint16_t, cfg->icid); \ 49*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 0, 32, uint32_t, cfg->options); \ 50*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 32, 32, int, cfg->portal_id); \ 51*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 0, 8, char, cfg->label[0]);\ 52*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 8, 8, char, cfg->label[1]);\ 53*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 16, 8, char, cfg->label[2]);\ 54*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 24, 8, char, cfg->label[3]);\ 55*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 32, 8, char, cfg->label[4]);\ 56*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 40, 8, char, cfg->label[5]);\ 57*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 48, 8, char, cfg->label[6]);\ 58*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 56, 8, char, cfg->label[7]);\ 59*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 0, 8, char, cfg->label[8]);\ 60*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 8, 8, char, cfg->label[9]);\ 61*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 16, 8, char, cfg->label[10]);\ 62*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 24, 8, char, cfg->label[11]);\ 63*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 32, 8, char, cfg->label[12]);\ 64*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 40, 8, char, cfg->label[13]);\ 65*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 48, 8, char, cfg->label[14]);\ 66*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 56, 8, char, cfg->label[15]);\ 67*4882a593Smuzhiyun } while (0) 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 70*4882a593Smuzhiyun #define DPRC_RSP_CREATE_CONTAINER(cmd, child_container_id, child_portal_offset)\ 71*4882a593Smuzhiyun do { \ 72*4882a593Smuzhiyun MC_RSP_OP(cmd, 1, 0, 32, int, child_container_id); \ 73*4882a593Smuzhiyun MC_RSP_OP(cmd, 2, 0, 64, uint64_t, child_portal_offset);\ 74*4882a593Smuzhiyun } while (0) 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 77*4882a593Smuzhiyun #define DPRC_CMD_DESTROY_CONTAINER(cmd, child_container_id) \ 78*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 0, 32, int, child_container_id) 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 81*4882a593Smuzhiyun #define DPRC_CMD_RESET_CONTAINER(cmd, child_container_id) \ 82*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 0, 32, int, child_container_id) 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 85*4882a593Smuzhiyun #define DPRC_RSP_GET_ATTRIBUTES(cmd, attr) \ 86*4882a593Smuzhiyun do { \ 87*4882a593Smuzhiyun MC_RSP_OP(cmd, 0, 0, 32, int, attr->container_id); \ 88*4882a593Smuzhiyun MC_RSP_OP(cmd, 0, 32, 16, uint16_t, attr->icid); \ 89*4882a593Smuzhiyun MC_RSP_OP(cmd, 1, 0, 32, uint32_t, attr->options);\ 90*4882a593Smuzhiyun MC_RSP_OP(cmd, 1, 32, 32, int, attr->portal_id); \ 91*4882a593Smuzhiyun MC_RSP_OP(cmd, 2, 0, 16, uint16_t, attr->version.major);\ 92*4882a593Smuzhiyun MC_RSP_OP(cmd, 2, 16, 16, uint16_t, attr->version.minor);\ 93*4882a593Smuzhiyun } while (0) 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 96*4882a593Smuzhiyun #define DPRC_RSP_GET_OBJ_COUNT(cmd, obj_count) \ 97*4882a593Smuzhiyun MC_RSP_OP(cmd, 0, 32, 32, int, obj_count) 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 100*4882a593Smuzhiyun #define DPRC_CMD_GET_OBJ(cmd, obj_index) \ 101*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 0, 32, int, obj_index) 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 104*4882a593Smuzhiyun #define DPRC_RSP_GET_OBJ(cmd, obj_desc) \ 105*4882a593Smuzhiyun do { \ 106*4882a593Smuzhiyun MC_RSP_OP(cmd, 0, 32, 32, int, obj_desc->id); \ 107*4882a593Smuzhiyun MC_RSP_OP(cmd, 1, 0, 16, uint16_t, obj_desc->vendor); \ 108*4882a593Smuzhiyun MC_RSP_OP(cmd, 1, 16, 8, uint8_t, obj_desc->irq_count); \ 109*4882a593Smuzhiyun MC_RSP_OP(cmd, 1, 24, 8, uint8_t, obj_desc->region_count); \ 110*4882a593Smuzhiyun MC_RSP_OP(cmd, 1, 32, 32, uint32_t, obj_desc->state);\ 111*4882a593Smuzhiyun MC_RSP_OP(cmd, 2, 0, 16, uint16_t, obj_desc->ver_major);\ 112*4882a593Smuzhiyun MC_RSP_OP(cmd, 2, 16, 16, uint16_t, obj_desc->ver_minor);\ 113*4882a593Smuzhiyun MC_RSP_OP(cmd, 2, 32, 16, uint16_t, obj_desc->flags); \ 114*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 0, 8, char, obj_desc->type[0]);\ 115*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 8, 8, char, obj_desc->type[1]);\ 116*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 16, 8, char, obj_desc->type[2]);\ 117*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 24, 8, char, obj_desc->type[3]);\ 118*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 32, 8, char, obj_desc->type[4]);\ 119*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 40, 8, char, obj_desc->type[5]);\ 120*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 48, 8, char, obj_desc->type[6]);\ 121*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 56, 8, char, obj_desc->type[7]);\ 122*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 0, 8, char, obj_desc->type[8]);\ 123*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 8, 8, char, obj_desc->type[9]);\ 124*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 16, 8, char, obj_desc->type[10]);\ 125*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 24, 8, char, obj_desc->type[11]);\ 126*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 32, 8, char, obj_desc->type[12]);\ 127*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 40, 8, char, obj_desc->type[13]);\ 128*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 48, 8, char, obj_desc->type[14]);\ 129*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 56, 8, char, obj_desc->type[15]);\ 130*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 0, 8, char, obj_desc->label[0]);\ 131*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 8, 8, char, obj_desc->label[1]);\ 132*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 16, 8, char, obj_desc->label[2]);\ 133*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 24, 8, char, obj_desc->label[3]);\ 134*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 32, 8, char, obj_desc->label[4]);\ 135*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 40, 8, char, obj_desc->label[5]);\ 136*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 48, 8, char, obj_desc->label[6]);\ 137*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 56, 8, char, obj_desc->label[7]);\ 138*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 0, 8, char, obj_desc->label[8]);\ 139*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 8, 8, char, obj_desc->label[9]);\ 140*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 16, 8, char, obj_desc->label[10]);\ 141*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 24, 8, char, obj_desc->label[11]);\ 142*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 32, 8, char, obj_desc->label[12]);\ 143*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 40, 8, char, obj_desc->label[13]);\ 144*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 48, 8, char, obj_desc->label[14]);\ 145*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 56, 8, char, obj_desc->label[15]);\ 146*4882a593Smuzhiyun } while (0) 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 149*4882a593Smuzhiyun #define DPRC_CMD_GET_OBJ_DESC(cmd, obj_type, obj_id) \ 150*4882a593Smuzhiyun do { \ 151*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 0, 32, int, obj_id);\ 152*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 0, 8, char, obj_type[0]);\ 153*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 8, 8, char, obj_type[1]);\ 154*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 16, 8, char, obj_type[2]);\ 155*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 24, 8, char, obj_type[3]);\ 156*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 32, 8, char, obj_type[4]);\ 157*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 40, 8, char, obj_type[5]);\ 158*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 48, 8, char, obj_type[6]);\ 159*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 56, 8, char, obj_type[7]);\ 160*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 0, 8, char, obj_type[8]);\ 161*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 8, 8, char, obj_type[9]);\ 162*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 16, 8, char, obj_type[10]);\ 163*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 24, 8, char, obj_type[11]);\ 164*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 32, 8, char, obj_type[12]);\ 165*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 40, 8, char, obj_type[13]);\ 166*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 48, 8, char, obj_type[14]);\ 167*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 56, 8, char, obj_type[15]);\ 168*4882a593Smuzhiyun } while (0) 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 171*4882a593Smuzhiyun #define DPRC_RSP_GET_OBJ_DESC(cmd, obj_desc) \ 172*4882a593Smuzhiyun do { \ 173*4882a593Smuzhiyun MC_RSP_OP(cmd, 0, 32, 32, int, obj_desc->id); \ 174*4882a593Smuzhiyun MC_RSP_OP(cmd, 1, 0, 16, uint16_t, obj_desc->vendor); \ 175*4882a593Smuzhiyun MC_RSP_OP(cmd, 1, 16, 8, uint8_t, obj_desc->irq_count); \ 176*4882a593Smuzhiyun MC_RSP_OP(cmd, 1, 24, 8, uint8_t, obj_desc->region_count); \ 177*4882a593Smuzhiyun MC_RSP_OP(cmd, 1, 32, 32, uint32_t, obj_desc->state);\ 178*4882a593Smuzhiyun MC_RSP_OP(cmd, 2, 0, 16, uint16_t, obj_desc->ver_major);\ 179*4882a593Smuzhiyun MC_RSP_OP(cmd, 2, 16, 16, uint16_t, obj_desc->ver_minor);\ 180*4882a593Smuzhiyun MC_RSP_OP(cmd, 2, 32, 16, uint16_t, obj_desc->flags); \ 181*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 0, 8, char, obj_desc->type[0]);\ 182*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 8, 8, char, obj_desc->type[1]);\ 183*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 16, 8, char, obj_desc->type[2]);\ 184*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 24, 8, char, obj_desc->type[3]);\ 185*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 32, 8, char, obj_desc->type[4]);\ 186*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 40, 8, char, obj_desc->type[5]);\ 187*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 48, 8, char, obj_desc->type[6]);\ 188*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 56, 8, char, obj_desc->type[7]);\ 189*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 0, 8, char, obj_desc->type[8]);\ 190*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 8, 8, char, obj_desc->type[9]);\ 191*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 16, 8, char, obj_desc->type[10]);\ 192*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 24, 8, char, obj_desc->type[11]);\ 193*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 32, 8, char, obj_desc->type[12]);\ 194*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 40, 8, char, obj_desc->type[13]);\ 195*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 48, 8, char, obj_desc->type[14]);\ 196*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 56, 8, char, obj_desc->type[15]);\ 197*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 0, 8, char, obj_desc->label[0]);\ 198*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 8, 8, char, obj_desc->label[1]);\ 199*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 16, 8, char, obj_desc->label[2]);\ 200*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 24, 8, char, obj_desc->label[3]);\ 201*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 32, 8, char, obj_desc->label[4]);\ 202*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 40, 8, char, obj_desc->label[5]);\ 203*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 48, 8, char, obj_desc->label[6]);\ 204*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 56, 8, char, obj_desc->label[7]);\ 205*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 0, 8, char, obj_desc->label[8]);\ 206*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 8, 8, char, obj_desc->label[9]);\ 207*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 16, 8, char, obj_desc->label[10]);\ 208*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 24, 8, char, obj_desc->label[11]);\ 209*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 32, 8, char, obj_desc->label[12]);\ 210*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 40, 8, char, obj_desc->label[13]);\ 211*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 48, 8, char, obj_desc->label[14]);\ 212*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 56, 8, char, obj_desc->label[15]);\ 213*4882a593Smuzhiyun } while (0) 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 216*4882a593Smuzhiyun #define DPRC_CMD_GET_RES_COUNT(cmd, type) \ 217*4882a593Smuzhiyun do { \ 218*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 0, 8, char, type[0]);\ 219*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 8, 8, char, type[1]);\ 220*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 16, 8, char, type[2]);\ 221*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 24, 8, char, type[3]);\ 222*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 32, 8, char, type[4]);\ 223*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 40, 8, char, type[5]);\ 224*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 48, 8, char, type[6]);\ 225*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 56, 8, char, type[7]);\ 226*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 0, 8, char, type[8]);\ 227*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 8, 8, char, type[9]);\ 228*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 16, 8, char, type[10]);\ 229*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 24, 8, char, type[11]);\ 230*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 32, 8, char, type[12]);\ 231*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 40, 8, char, type[13]);\ 232*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 48, 8, char, type[14]);\ 233*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 56, 8, char, type[15]);\ 234*4882a593Smuzhiyun } while (0) 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 237*4882a593Smuzhiyun #define DPRC_RSP_GET_RES_COUNT(cmd, res_count) \ 238*4882a593Smuzhiyun MC_RSP_OP(cmd, 0, 0, 32, int, res_count) 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 241*4882a593Smuzhiyun #define DPRC_CMD_GET_RES_IDS(cmd, range_desc, type) \ 242*4882a593Smuzhiyun do { \ 243*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 42, 7, enum dprc_iter_status, \ 244*4882a593Smuzhiyun range_desc->iter_status); \ 245*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 0, 32, int, range_desc->base_id); \ 246*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 32, 32, int, range_desc->last_id);\ 247*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 0, 8, char, type[0]);\ 248*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 8, 8, char, type[1]);\ 249*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 16, 8, char, type[2]);\ 250*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 24, 8, char, type[3]);\ 251*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 32, 8, char, type[4]);\ 252*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 40, 8, char, type[5]);\ 253*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 48, 8, char, type[6]);\ 254*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 56, 8, char, type[7]);\ 255*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 0, 8, char, type[8]);\ 256*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 8, 8, char, type[9]);\ 257*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 16, 8, char, type[10]);\ 258*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 24, 8, char, type[11]);\ 259*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 32, 8, char, type[12]);\ 260*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 40, 8, char, type[13]);\ 261*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 48, 8, char, type[14]);\ 262*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 56, 8, char, type[15]);\ 263*4882a593Smuzhiyun } while (0) 264*4882a593Smuzhiyun 265*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 266*4882a593Smuzhiyun #define DPRC_RSP_GET_RES_IDS(cmd, range_desc) \ 267*4882a593Smuzhiyun do { \ 268*4882a593Smuzhiyun MC_RSP_OP(cmd, 0, 42, 7, enum dprc_iter_status, \ 269*4882a593Smuzhiyun range_desc->iter_status);\ 270*4882a593Smuzhiyun MC_RSP_OP(cmd, 1, 0, 32, int, range_desc->base_id); \ 271*4882a593Smuzhiyun MC_RSP_OP(cmd, 1, 32, 32, int, range_desc->last_id);\ 272*4882a593Smuzhiyun } while (0) 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 275*4882a593Smuzhiyun #define DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index) \ 276*4882a593Smuzhiyun do { \ 277*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 0, 32, int, obj_id); \ 278*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 48, 8, uint8_t, region_index);\ 279*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 0, 8, char, obj_type[0]);\ 280*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 8, 8, char, obj_type[1]);\ 281*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 16, 8, char, obj_type[2]);\ 282*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 24, 8, char, obj_type[3]);\ 283*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 32, 8, char, obj_type[4]);\ 284*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 40, 8, char, obj_type[5]);\ 285*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 48, 8, char, obj_type[6]);\ 286*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 56, 8, char, obj_type[7]);\ 287*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 0, 8, char, obj_type[8]);\ 288*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 8, 8, char, obj_type[9]);\ 289*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 16, 8, char, obj_type[10]);\ 290*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 24, 8, char, obj_type[11]);\ 291*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 32, 8, char, obj_type[12]);\ 292*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 40, 8, char, obj_type[13]);\ 293*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 48, 8, char, obj_type[14]);\ 294*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 56, 8, char, obj_type[15]);\ 295*4882a593Smuzhiyun } while (0) 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun /* param, offset, width, type, arg_name */ 298*4882a593Smuzhiyun #define DPRC_RSP_GET_OBJ_REGION(cmd, region_desc) \ 299*4882a593Smuzhiyun do { \ 300*4882a593Smuzhiyun MC_RSP_OP(cmd, 1, 0, 32, uint32_t, region_desc->base_offset);\ 301*4882a593Smuzhiyun MC_RSP_OP(cmd, 2, 0, 32, uint32_t, region_desc->size); \ 302*4882a593Smuzhiyun MC_RSP_OP(cmd, 2, 32, 4, enum dprc_region_type, region_desc->type);\ 303*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 0, 32, uint32_t, region_desc->flags);\ 304*4882a593Smuzhiyun } while (0) 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 307*4882a593Smuzhiyun #define DPRC_CMD_SET_OBJ_LABEL(cmd, obj_type, obj_id, label) \ 308*4882a593Smuzhiyun do { \ 309*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 0, 32, int, obj_id); \ 310*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 0, 8, char, label[0]);\ 311*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 8, 8, char, label[1]);\ 312*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 16, 8, char, label[2]);\ 313*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 24, 8, char, label[3]);\ 314*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 32, 8, char, label[4]);\ 315*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 40, 8, char, label[5]);\ 316*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 48, 8, char, label[6]);\ 317*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 56, 8, char, label[7]);\ 318*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 0, 8, char, label[8]);\ 319*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 8, 8, char, label[9]);\ 320*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 16, 8, char, label[10]);\ 321*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 24, 8, char, label[11]);\ 322*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 32, 8, char, label[12]);\ 323*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 40, 8, char, label[13]);\ 324*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 48, 8, char, label[14]);\ 325*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 56, 8, char, label[15]);\ 326*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 0, 8, char, obj_type[0]);\ 327*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 8, 8, char, obj_type[1]);\ 328*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 16, 8, char, obj_type[2]);\ 329*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 24, 8, char, obj_type[3]);\ 330*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 32, 8, char, obj_type[4]);\ 331*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 40, 8, char, obj_type[5]);\ 332*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 48, 8, char, obj_type[6]);\ 333*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 56, 8, char, obj_type[7]);\ 334*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 0, 8, char, obj_type[8]);\ 335*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 8, 8, char, obj_type[9]);\ 336*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 16, 8, char, obj_type[10]);\ 337*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 24, 8, char, obj_type[11]);\ 338*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 32, 8, char, obj_type[12]);\ 339*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 40, 8, char, obj_type[13]);\ 340*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 48, 8, char, obj_type[14]);\ 341*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 56, 8, char, obj_type[15]);\ 342*4882a593Smuzhiyun } while (0) 343*4882a593Smuzhiyun 344*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 345*4882a593Smuzhiyun #define DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg) \ 346*4882a593Smuzhiyun do { \ 347*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 0, 32, int, endpoint1->id); \ 348*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint1->if_id); \ 349*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 0, 32, int, endpoint2->id); \ 350*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 32, 16, uint16_t, endpoint2->if_id); \ 351*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 0, 8, char, endpoint1->type[0]); \ 352*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 8, 8, char, endpoint1->type[1]); \ 353*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 16, 8, char, endpoint1->type[2]); \ 354*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 24, 8, char, endpoint1->type[3]); \ 355*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 32, 8, char, endpoint1->type[4]); \ 356*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 40, 8, char, endpoint1->type[5]); \ 357*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 48, 8, char, endpoint1->type[6]); \ 358*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 56, 8, char, endpoint1->type[7]); \ 359*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 0, 8, char, endpoint1->type[8]); \ 360*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 8, 8, char, endpoint1->type[9]); \ 361*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 16, 8, char, endpoint1->type[10]); \ 362*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 24, 8, char, endpoint1->type[11]); \ 363*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 32, 8, char, endpoint1->type[12]); \ 364*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 40, 8, char, endpoint1->type[13]); \ 365*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 48, 8, char, endpoint1->type[14]); \ 366*4882a593Smuzhiyun MC_CMD_OP(cmd, 3, 56, 8, char, endpoint1->type[15]); \ 367*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 0, 32, uint32_t, cfg->max_rate); \ 368*4882a593Smuzhiyun MC_CMD_OP(cmd, 4, 32, 32, uint32_t, cfg->committed_rate); \ 369*4882a593Smuzhiyun MC_CMD_OP(cmd, 5, 0, 8, char, endpoint2->type[0]); \ 370*4882a593Smuzhiyun MC_CMD_OP(cmd, 5, 8, 8, char, endpoint2->type[1]); \ 371*4882a593Smuzhiyun MC_CMD_OP(cmd, 5, 16, 8, char, endpoint2->type[2]); \ 372*4882a593Smuzhiyun MC_CMD_OP(cmd, 5, 24, 8, char, endpoint2->type[3]); \ 373*4882a593Smuzhiyun MC_CMD_OP(cmd, 5, 32, 8, char, endpoint2->type[4]); \ 374*4882a593Smuzhiyun MC_CMD_OP(cmd, 5, 40, 8, char, endpoint2->type[5]); \ 375*4882a593Smuzhiyun MC_CMD_OP(cmd, 5, 48, 8, char, endpoint2->type[6]); \ 376*4882a593Smuzhiyun MC_CMD_OP(cmd, 5, 56, 8, char, endpoint2->type[7]); \ 377*4882a593Smuzhiyun MC_CMD_OP(cmd, 6, 0, 8, char, endpoint2->type[8]); \ 378*4882a593Smuzhiyun MC_CMD_OP(cmd, 6, 8, 8, char, endpoint2->type[9]); \ 379*4882a593Smuzhiyun MC_CMD_OP(cmd, 6, 16, 8, char, endpoint2->type[10]); \ 380*4882a593Smuzhiyun MC_CMD_OP(cmd, 6, 24, 8, char, endpoint2->type[11]); \ 381*4882a593Smuzhiyun MC_CMD_OP(cmd, 6, 32, 8, char, endpoint2->type[12]); \ 382*4882a593Smuzhiyun MC_CMD_OP(cmd, 6, 40, 8, char, endpoint2->type[13]); \ 383*4882a593Smuzhiyun MC_CMD_OP(cmd, 6, 48, 8, char, endpoint2->type[14]); \ 384*4882a593Smuzhiyun MC_CMD_OP(cmd, 6, 56, 8, char, endpoint2->type[15]); \ 385*4882a593Smuzhiyun } while (0) 386*4882a593Smuzhiyun 387*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 388*4882a593Smuzhiyun #define DPRC_CMD_DISCONNECT(cmd, endpoint) \ 389*4882a593Smuzhiyun do { \ 390*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 0, 32, int, endpoint->id); \ 391*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint->if_id); \ 392*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 0, 8, char, endpoint->type[0]); \ 393*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 8, 8, char, endpoint->type[1]); \ 394*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 16, 8, char, endpoint->type[2]); \ 395*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 24, 8, char, endpoint->type[3]); \ 396*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 32, 8, char, endpoint->type[4]); \ 397*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 40, 8, char, endpoint->type[5]); \ 398*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 48, 8, char, endpoint->type[6]); \ 399*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 56, 8, char, endpoint->type[7]); \ 400*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 0, 8, char, endpoint->type[8]); \ 401*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 8, 8, char, endpoint->type[9]); \ 402*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 16, 8, char, endpoint->type[10]); \ 403*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 24, 8, char, endpoint->type[11]); \ 404*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 32, 8, char, endpoint->type[12]); \ 405*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 40, 8, char, endpoint->type[13]); \ 406*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 48, 8, char, endpoint->type[14]); \ 407*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 56, 8, char, endpoint->type[15]); \ 408*4882a593Smuzhiyun } while (0) 409*4882a593Smuzhiyun 410*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 411*4882a593Smuzhiyun #define DPRC_CMD_GET_CONNECTION(cmd, endpoint1) \ 412*4882a593Smuzhiyun do { \ 413*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 0, 32, int, endpoint1->id); \ 414*4882a593Smuzhiyun MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint1->if_id); \ 415*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 0, 8, char, endpoint1->type[0]); \ 416*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 8, 8, char, endpoint1->type[1]); \ 417*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 16, 8, char, endpoint1->type[2]); \ 418*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 24, 8, char, endpoint1->type[3]); \ 419*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 32, 8, char, endpoint1->type[4]); \ 420*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 40, 8, char, endpoint1->type[5]); \ 421*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 48, 8, char, endpoint1->type[6]); \ 422*4882a593Smuzhiyun MC_CMD_OP(cmd, 1, 56, 8, char, endpoint1->type[7]); \ 423*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 0, 8, char, endpoint1->type[8]); \ 424*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 8, 8, char, endpoint1->type[9]); \ 425*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 16, 8, char, endpoint1->type[10]); \ 426*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 24, 8, char, endpoint1->type[11]); \ 427*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 32, 8, char, endpoint1->type[12]); \ 428*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 40, 8, char, endpoint1->type[13]); \ 429*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 48, 8, char, endpoint1->type[14]); \ 430*4882a593Smuzhiyun MC_CMD_OP(cmd, 2, 56, 8, char, endpoint1->type[15]); \ 431*4882a593Smuzhiyun } while (0) 432*4882a593Smuzhiyun 433*4882a593Smuzhiyun /* cmd, param, offset, width, type, arg_name */ 434*4882a593Smuzhiyun #define DPRC_RSP_GET_CONNECTION(cmd, endpoint2, state) \ 435*4882a593Smuzhiyun do { \ 436*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 0, 32, int, endpoint2->id); \ 437*4882a593Smuzhiyun MC_RSP_OP(cmd, 3, 32, 16, uint16_t, endpoint2->if_id); \ 438*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 0, 8, char, endpoint2->type[0]); \ 439*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 8, 8, char, endpoint2->type[1]); \ 440*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 16, 8, char, endpoint2->type[2]); \ 441*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 24, 8, char, endpoint2->type[3]); \ 442*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 32, 8, char, endpoint2->type[4]); \ 443*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 40, 8, char, endpoint2->type[5]); \ 444*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 48, 8, char, endpoint2->type[6]); \ 445*4882a593Smuzhiyun MC_RSP_OP(cmd, 4, 56, 8, char, endpoint2->type[7]); \ 446*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 0, 8, char, endpoint2->type[8]); \ 447*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 8, 8, char, endpoint2->type[9]); \ 448*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 16, 8, char, endpoint2->type[10]); \ 449*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 24, 8, char, endpoint2->type[11]); \ 450*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 32, 8, char, endpoint2->type[12]); \ 451*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 40, 8, char, endpoint2->type[13]); \ 452*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 48, 8, char, endpoint2->type[14]); \ 453*4882a593Smuzhiyun MC_RSP_OP(cmd, 5, 56, 8, char, endpoint2->type[15]); \ 454*4882a593Smuzhiyun MC_RSP_OP(cmd, 6, 0, 32, int, state); \ 455*4882a593Smuzhiyun } while (0) 456*4882a593Smuzhiyun 457*4882a593Smuzhiyun /* Data Path Resource Container API 458*4882a593Smuzhiyun * Contains DPRC API for managing and querying DPAA resources 459*4882a593Smuzhiyun */ 460*4882a593Smuzhiyun 461*4882a593Smuzhiyun struct fsl_mc_io; 462*4882a593Smuzhiyun 463*4882a593Smuzhiyun /** 464*4882a593Smuzhiyun * Set this value as the icid value in dprc_cfg structure when creating a 465*4882a593Smuzhiyun * container, in case the ICID is not selected by the user and should be 466*4882a593Smuzhiyun * allocated by the DPRC from the pool of ICIDs. 467*4882a593Smuzhiyun */ 468*4882a593Smuzhiyun #define DPRC_GET_ICID_FROM_POOL (uint16_t)(~(0)) 469*4882a593Smuzhiyun 470*4882a593Smuzhiyun /** 471*4882a593Smuzhiyun * Set this value as the portal_id value in dprc_cfg structure when creating a 472*4882a593Smuzhiyun * container, in case the portal ID is not specifically selected by the 473*4882a593Smuzhiyun * user and should be allocated by the DPRC from the pool of portal ids. 474*4882a593Smuzhiyun */ 475*4882a593Smuzhiyun #define DPRC_GET_PORTAL_ID_FROM_POOL (int)(~(0)) 476*4882a593Smuzhiyun 477*4882a593Smuzhiyun /** 478*4882a593Smuzhiyun * dprc_get_container_id() - Get container ID associated with a given portal. 479*4882a593Smuzhiyun * @mc_io: Pointer to MC portal's I/O object 480*4882a593Smuzhiyun * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 481*4882a593Smuzhiyun * @container_id: Requested container ID 482*4882a593Smuzhiyun * 483*4882a593Smuzhiyun * Return: '0' on Success; Error code otherwise. 484*4882a593Smuzhiyun */ 485*4882a593Smuzhiyun int dprc_get_container_id(struct fsl_mc_io *mc_io, 486*4882a593Smuzhiyun uint32_t cmd_flags, 487*4882a593Smuzhiyun int *container_id); 488*4882a593Smuzhiyun 489*4882a593Smuzhiyun /** 490*4882a593Smuzhiyun * dprc_open() - Open DPRC object for use 491*4882a593Smuzhiyun * @mc_io: Pointer to MC portal's I/O object 492*4882a593Smuzhiyun * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 493*4882a593Smuzhiyun * @container_id: Container ID to open 494*4882a593Smuzhiyun * @token: Returned token of DPRC object 495*4882a593Smuzhiyun * 496*4882a593Smuzhiyun * Return: '0' on Success; Error code otherwise. 497*4882a593Smuzhiyun * 498*4882a593Smuzhiyun * @warning Required before any operation on the object. 499*4882a593Smuzhiyun */ 500*4882a593Smuzhiyun int dprc_open(struct fsl_mc_io *mc_io, 501*4882a593Smuzhiyun uint32_t cmd_flags, 502*4882a593Smuzhiyun int container_id, 503*4882a593Smuzhiyun uint16_t *token); 504*4882a593Smuzhiyun 505*4882a593Smuzhiyun /** 506*4882a593Smuzhiyun * dprc_close() - Close the control session of the object 507*4882a593Smuzhiyun * @mc_io: Pointer to MC portal's I/O object 508*4882a593Smuzhiyun * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 509*4882a593Smuzhiyun * @token: Token of DPRC object 510*4882a593Smuzhiyun * 511*4882a593Smuzhiyun * After this function is called, no further operations are 512*4882a593Smuzhiyun * allowed on the object without opening a new control session. 513*4882a593Smuzhiyun * 514*4882a593Smuzhiyun * Return: '0' on Success; Error code otherwise. 515*4882a593Smuzhiyun */ 516*4882a593Smuzhiyun int dprc_close(struct fsl_mc_io *mc_io, 517*4882a593Smuzhiyun uint32_t cmd_flags, 518*4882a593Smuzhiyun uint16_t token); 519*4882a593Smuzhiyun 520*4882a593Smuzhiyun /** 521*4882a593Smuzhiyun * Container general options 522*4882a593Smuzhiyun * 523*4882a593Smuzhiyun * These options may be selected at container creation by the container creator 524*4882a593Smuzhiyun * and can be retrieved using dprc_get_attributes() 525*4882a593Smuzhiyun */ 526*4882a593Smuzhiyun 527*4882a593Smuzhiyun /* Spawn Policy Option allowed - Indicates that the new container is allowed 528*4882a593Smuzhiyun * to spawn and have its own child containers. 529*4882a593Smuzhiyun */ 530*4882a593Smuzhiyun #define DPRC_CFG_OPT_SPAWN_ALLOWED 0x00000001 531*4882a593Smuzhiyun 532*4882a593Smuzhiyun /* General Container allocation policy - Indicates that the new container is 533*4882a593Smuzhiyun * allowed to allocate requested resources from its parent container; if not 534*4882a593Smuzhiyun * set, the container is only allowed to use resources in its own pools; Note 535*4882a593Smuzhiyun * that this is a container's global policy, but the parent container may 536*4882a593Smuzhiyun * override it and set specific quota per resource type. 537*4882a593Smuzhiyun */ 538*4882a593Smuzhiyun #define DPRC_CFG_OPT_ALLOC_ALLOWED 0x00000002 539*4882a593Smuzhiyun 540*4882a593Smuzhiyun /* Object initialization allowed - software context associated with this 541*4882a593Smuzhiyun * container is allowed to invoke object initialization operations. 542*4882a593Smuzhiyun */ 543*4882a593Smuzhiyun #define DPRC_CFG_OPT_OBJ_CREATE_ALLOWED 0x00000004 544*4882a593Smuzhiyun 545*4882a593Smuzhiyun /* Topology change allowed - software context associated with this 546*4882a593Smuzhiyun * container is allowed to invoke topology operations, such as attach/detach 547*4882a593Smuzhiyun * of network objects. 548*4882a593Smuzhiyun */ 549*4882a593Smuzhiyun #define DPRC_CFG_OPT_TOPOLOGY_CHANGES_ALLOWED 0x00000008 550*4882a593Smuzhiyun 551*4882a593Smuzhiyun 552*4882a593Smuzhiyun /* AIOP - Indicates that container belongs to AIOP. */ 553*4882a593Smuzhiyun #define DPRC_CFG_OPT_AIOP 0x00000020 554*4882a593Smuzhiyun 555*4882a593Smuzhiyun /* IRQ Config - Indicates that the container allowed to configure its IRQs.*/ 556*4882a593Smuzhiyun #define DPRC_CFG_OPT_IRQ_CFG_ALLOWED 0x00000040 557*4882a593Smuzhiyun 558*4882a593Smuzhiyun /** 559*4882a593Smuzhiyun * struct dprc_cfg - Container configuration options 560*4882a593Smuzhiyun * @icid: Container's ICID; if set to 'DPRC_GET_ICID_FROM_POOL', a free 561*4882a593Smuzhiyun * ICID value is allocated by the DPRC 562*4882a593Smuzhiyun * @portal_id: Portal ID; if set to 'DPRC_GET_PORTAL_ID_FROM_POOL', a free 563*4882a593Smuzhiyun * portal ID is allocated by the DPRC 564*4882a593Smuzhiyun * @options: Combination of 'DPRC_CFG_OPT_<X>' options 565*4882a593Smuzhiyun * @label: Object's label 566*4882a593Smuzhiyun */ 567*4882a593Smuzhiyun struct dprc_cfg { 568*4882a593Smuzhiyun uint16_t icid; 569*4882a593Smuzhiyun int portal_id; 570*4882a593Smuzhiyun uint64_t options; 571*4882a593Smuzhiyun char label[16]; 572*4882a593Smuzhiyun }; 573*4882a593Smuzhiyun 574*4882a593Smuzhiyun /** 575*4882a593Smuzhiyun * dprc_create_container() - Create child container 576*4882a593Smuzhiyun * @mc_io: Pointer to MC portal's I/O object 577*4882a593Smuzhiyun * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 578*4882a593Smuzhiyun * @token: Token of DPRC object 579*4882a593Smuzhiyun * @cfg: Child container configuration 580*4882a593Smuzhiyun * @child_container_id: Returned child container ID 581*4882a593Smuzhiyun * @child_portal_offset: Returned child portal offset from MC portal base 582*4882a593Smuzhiyun * 583*4882a593Smuzhiyun * 584*4882a593Smuzhiyun * Return: '0' on Success; Error code otherwise. 585*4882a593Smuzhiyun */ 586*4882a593Smuzhiyun int dprc_create_container(struct fsl_mc_io *mc_io, 587*4882a593Smuzhiyun uint32_t cmd_flags, 588*4882a593Smuzhiyun uint16_t token, 589*4882a593Smuzhiyun struct dprc_cfg *cfg, 590*4882a593Smuzhiyun int *child_container_id, 591*4882a593Smuzhiyun uint64_t *child_portal_offset); 592*4882a593Smuzhiyun 593*4882a593Smuzhiyun /** 594*4882a593Smuzhiyun * dprc_destroy_container() - Destroy child container. 595*4882a593Smuzhiyun * @mc_io: Pointer to MC portal's I/O object 596*4882a593Smuzhiyun * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 597*4882a593Smuzhiyun * @token: Token of DPRC object 598*4882a593Smuzhiyun * @child_container_id: ID of the container to destroy 599*4882a593Smuzhiyun * 600*4882a593Smuzhiyun * This function terminates the child container, so following this call the 601*4882a593Smuzhiyun * child container ID becomes invalid. 602*4882a593Smuzhiyun * 603*4882a593Smuzhiyun * Notes: 604*4882a593Smuzhiyun * - All resources and objects of the destroyed container are returned to the 605*4882a593Smuzhiyun * parent container or destroyed if were created be the destroyed container. 606*4882a593Smuzhiyun * - This function destroy all the child containers of the specified 607*4882a593Smuzhiyun * container prior to destroying the container itself. 608*4882a593Smuzhiyun * 609*4882a593Smuzhiyun * warning: Only the parent container is allowed to destroy a child policy 610*4882a593Smuzhiyun * Container 0 can't be destroyed 611*4882a593Smuzhiyun * 612*4882a593Smuzhiyun * Return: '0' on Success; Error code otherwise. 613*4882a593Smuzhiyun * 614*4882a593Smuzhiyun */ 615*4882a593Smuzhiyun int dprc_destroy_container(struct fsl_mc_io *mc_io, 616*4882a593Smuzhiyun uint32_t cmd_flags, 617*4882a593Smuzhiyun uint16_t token, 618*4882a593Smuzhiyun int child_container_id); 619*4882a593Smuzhiyun 620*4882a593Smuzhiyun /** 621*4882a593Smuzhiyun * dprc_reset_container - Reset child container. 622*4882a593Smuzhiyun * @mc_io: Pointer to MC portal's I/O object 623*4882a593Smuzhiyun * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 624*4882a593Smuzhiyun * @token: Token of DPRC object 625*4882a593Smuzhiyun * @child_container_id: ID of the container to reset 626*4882a593Smuzhiyun * 627*4882a593Smuzhiyun * In case a software context crashes or becomes non-responsive, the parent 628*4882a593Smuzhiyun * may wish to reset its resources container before the software context is 629*4882a593Smuzhiyun * restarted. 630*4882a593Smuzhiyun * 631*4882a593Smuzhiyun * This routine informs all objects assigned to the child container that the 632*4882a593Smuzhiyun * container is being reset, so they may perform any cleanup operations that are 633*4882a593Smuzhiyun * needed. All objects handles that were owned by the child container shall be 634*4882a593Smuzhiyun * closed. 635*4882a593Smuzhiyun * 636*4882a593Smuzhiyun * Note that such request may be submitted even if the child software context 637*4882a593Smuzhiyun * has not crashed, but the resulting object cleanup operations will not be 638*4882a593Smuzhiyun * aware of that. 639*4882a593Smuzhiyun * 640*4882a593Smuzhiyun * Return: '0' on Success; Error code otherwise. 641*4882a593Smuzhiyun */ 642*4882a593Smuzhiyun int dprc_reset_container(struct fsl_mc_io *mc_io, 643*4882a593Smuzhiyun uint32_t cmd_flags, 644*4882a593Smuzhiyun uint16_t token, 645*4882a593Smuzhiyun int child_container_id); 646*4882a593Smuzhiyun 647*4882a593Smuzhiyun /** 648*4882a593Smuzhiyun * struct dprc_attributes - Container attributes 649*4882a593Smuzhiyun * @container_id: Container's ID 650*4882a593Smuzhiyun * @icid: Container's ICID 651*4882a593Smuzhiyun * @portal_id: Container's portal ID 652*4882a593Smuzhiyun * @options: Container's options as set at container's creation 653*4882a593Smuzhiyun * @version: DPRC version 654*4882a593Smuzhiyun */ 655*4882a593Smuzhiyun struct dprc_attributes { 656*4882a593Smuzhiyun int container_id; 657*4882a593Smuzhiyun uint16_t icid; 658*4882a593Smuzhiyun int portal_id; 659*4882a593Smuzhiyun uint64_t options; 660*4882a593Smuzhiyun /** 661*4882a593Smuzhiyun * struct version - DPRC version 662*4882a593Smuzhiyun * @major: DPRC major version 663*4882a593Smuzhiyun * @minor: DPRC minor version 664*4882a593Smuzhiyun */ 665*4882a593Smuzhiyun struct { 666*4882a593Smuzhiyun uint16_t major; 667*4882a593Smuzhiyun uint16_t minor; 668*4882a593Smuzhiyun } version; 669*4882a593Smuzhiyun }; 670*4882a593Smuzhiyun 671*4882a593Smuzhiyun /** 672*4882a593Smuzhiyun * dprc_get_attributes() - Obtains container attributes 673*4882a593Smuzhiyun * @mc_io: Pointer to MC portal's I/O object 674*4882a593Smuzhiyun * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 675*4882a593Smuzhiyun * @token: Token of DPRC object 676*4882a593Smuzhiyun * @attributes: Returned container attributes 677*4882a593Smuzhiyun * 678*4882a593Smuzhiyun * Return: '0' on Success; Error code otherwise. 679*4882a593Smuzhiyun */ 680*4882a593Smuzhiyun int dprc_get_attributes(struct fsl_mc_io *mc_io, 681*4882a593Smuzhiyun uint32_t cmd_flags, 682*4882a593Smuzhiyun uint16_t token, 683*4882a593Smuzhiyun struct dprc_attributes *attributes); 684*4882a593Smuzhiyun 685*4882a593Smuzhiyun /** 686*4882a593Smuzhiyun * dprc_get_obj_count() - Obtains the number of objects in the DPRC 687*4882a593Smuzhiyun * @mc_io: Pointer to MC portal's I/O object 688*4882a593Smuzhiyun * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 689*4882a593Smuzhiyun * @token: Token of DPRC object 690*4882a593Smuzhiyun * @obj_count: Number of objects assigned to the DPRC 691*4882a593Smuzhiyun * 692*4882a593Smuzhiyun * Return: '0' on Success; Error code otherwise. 693*4882a593Smuzhiyun */ 694*4882a593Smuzhiyun int dprc_get_obj_count(struct fsl_mc_io *mc_io, 695*4882a593Smuzhiyun uint32_t cmd_flags, 696*4882a593Smuzhiyun uint16_t token, 697*4882a593Smuzhiyun int *obj_count); 698*4882a593Smuzhiyun 699*4882a593Smuzhiyun /* Objects Attributes Flags */ 700*4882a593Smuzhiyun 701*4882a593Smuzhiyun /* Opened state - Indicates that an object is open by at least one owner */ 702*4882a593Smuzhiyun #define DPRC_OBJ_STATE_OPEN 0x00000001 703*4882a593Smuzhiyun /* Plugged state - Indicates that the object is plugged */ 704*4882a593Smuzhiyun #define DPRC_OBJ_STATE_PLUGGED 0x00000002 705*4882a593Smuzhiyun 706*4882a593Smuzhiyun /** 707*4882a593Smuzhiyun * Shareability flag - Object flag indicating no memory shareability. 708*4882a593Smuzhiyun * the object generates memory accesses that are non coherent with other 709*4882a593Smuzhiyun * masters; 710*4882a593Smuzhiyun * user is responsible for proper memory handling through IOMMU configuration. 711*4882a593Smuzhiyun */ 712*4882a593Smuzhiyun #define DPRC_OBJ_FLAG_NO_MEM_SHAREABILITY 0x0001 713*4882a593Smuzhiyun 714*4882a593Smuzhiyun /** 715*4882a593Smuzhiyun * struct dprc_obj_desc - Object descriptor, returned from dprc_get_obj() 716*4882a593Smuzhiyun * @type: Type of object: NULL terminated string 717*4882a593Smuzhiyun * @id: ID of logical object resource 718*4882a593Smuzhiyun * @vendor: Object vendor identifier 719*4882a593Smuzhiyun * @ver_major: Major version number 720*4882a593Smuzhiyun * @ver_minor: Minor version number 721*4882a593Smuzhiyun * @irq_count: Number of interrupts supported by the object 722*4882a593Smuzhiyun * @region_count: Number of mappable regions supported by the object 723*4882a593Smuzhiyun * @state: Object state: combination of DPRC_OBJ_STATE_ states 724*4882a593Smuzhiyun * @label: Object label 725*4882a593Smuzhiyun * @flags: Object's flags 726*4882a593Smuzhiyun */ 727*4882a593Smuzhiyun struct dprc_obj_desc { 728*4882a593Smuzhiyun char type[16]; 729*4882a593Smuzhiyun int id; 730*4882a593Smuzhiyun uint16_t vendor; 731*4882a593Smuzhiyun uint16_t ver_major; 732*4882a593Smuzhiyun uint16_t ver_minor; 733*4882a593Smuzhiyun uint8_t irq_count; 734*4882a593Smuzhiyun uint8_t region_count; 735*4882a593Smuzhiyun uint32_t state; 736*4882a593Smuzhiyun char label[16]; 737*4882a593Smuzhiyun uint16_t flags; 738*4882a593Smuzhiyun }; 739*4882a593Smuzhiyun 740*4882a593Smuzhiyun /** 741*4882a593Smuzhiyun * dprc_get_obj() - Get general information on an object 742*4882a593Smuzhiyun * @mc_io: Pointer to MC portal's I/O object 743*4882a593Smuzhiyun * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 744*4882a593Smuzhiyun * @token: Token of DPRC object 745*4882a593Smuzhiyun * @obj_index: Index of the object to be queried (< obj_count) 746*4882a593Smuzhiyun * @obj_desc: Returns the requested object descriptor 747*4882a593Smuzhiyun * 748*4882a593Smuzhiyun * The object descriptors are retrieved one by one by incrementing 749*4882a593Smuzhiyun * obj_index up to (not including) the value of obj_count returned 750*4882a593Smuzhiyun * from dprc_get_obj_count(). dprc_get_obj_count() must 751*4882a593Smuzhiyun * be called prior to dprc_get_obj(). 752*4882a593Smuzhiyun * 753*4882a593Smuzhiyun * Return: '0' on Success; Error code otherwise. 754*4882a593Smuzhiyun */ 755*4882a593Smuzhiyun int dprc_get_obj(struct fsl_mc_io *mc_io, 756*4882a593Smuzhiyun uint32_t cmd_flags, 757*4882a593Smuzhiyun uint16_t token, 758*4882a593Smuzhiyun int obj_index, 759*4882a593Smuzhiyun struct dprc_obj_desc *obj_desc); 760*4882a593Smuzhiyun 761*4882a593Smuzhiyun /** 762*4882a593Smuzhiyun * dprc_get_res_count() - Obtains the number of free resources that are 763*4882a593Smuzhiyun * assigned to this container, by pool type 764*4882a593Smuzhiyun * @mc_io: Pointer to MC portal's I/O object 765*4882a593Smuzhiyun * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 766*4882a593Smuzhiyun * @token: Token of DPRC object 767*4882a593Smuzhiyun * @type: pool type 768*4882a593Smuzhiyun * @res_count: Returned number of free resources of the given 769*4882a593Smuzhiyun * resource type that are assigned to this DPRC 770*4882a593Smuzhiyun * 771*4882a593Smuzhiyun * Return: '0' on Success; Error code otherwise. 772*4882a593Smuzhiyun */ 773*4882a593Smuzhiyun int dprc_get_res_count(struct fsl_mc_io *mc_io, 774*4882a593Smuzhiyun uint32_t cmd_flags, 775*4882a593Smuzhiyun uint16_t token, 776*4882a593Smuzhiyun char *type, 777*4882a593Smuzhiyun int *res_count); 778*4882a593Smuzhiyun 779*4882a593Smuzhiyun /** 780*4882a593Smuzhiyun * enum dprc_iter_status - Iteration status 781*4882a593Smuzhiyun * @DPRC_ITER_STATUS_FIRST: Perform first iteration 782*4882a593Smuzhiyun * @DPRC_ITER_STATUS_MORE: Indicates more/next iteration is needed 783*4882a593Smuzhiyun * @DPRC_ITER_STATUS_LAST: Indicates last iteration 784*4882a593Smuzhiyun */ 785*4882a593Smuzhiyun enum dprc_iter_status { 786*4882a593Smuzhiyun DPRC_ITER_STATUS_FIRST = 0, 787*4882a593Smuzhiyun DPRC_ITER_STATUS_MORE = 1, 788*4882a593Smuzhiyun DPRC_ITER_STATUS_LAST = 2 789*4882a593Smuzhiyun }; 790*4882a593Smuzhiyun 791*4882a593Smuzhiyun /** 792*4882a593Smuzhiyun * struct dprc_res_ids_range_desc - Resource ID range descriptor 793*4882a593Smuzhiyun * @base_id: Base resource ID of this range 794*4882a593Smuzhiyun * @last_id: Last resource ID of this range 795*4882a593Smuzhiyun * @iter_status: Iteration status - should be set to DPRC_ITER_STATUS_FIRST at 796*4882a593Smuzhiyun * first iteration; while the returned marker is DPRC_ITER_STATUS_MORE, 797*4882a593Smuzhiyun * additional iterations are needed, until the returned marker is 798*4882a593Smuzhiyun * DPRC_ITER_STATUS_LAST 799*4882a593Smuzhiyun */ 800*4882a593Smuzhiyun struct dprc_res_ids_range_desc { 801*4882a593Smuzhiyun int base_id; 802*4882a593Smuzhiyun int last_id; 803*4882a593Smuzhiyun enum dprc_iter_status iter_status; 804*4882a593Smuzhiyun }; 805*4882a593Smuzhiyun 806*4882a593Smuzhiyun /** 807*4882a593Smuzhiyun * dprc_get_res_ids() - Obtains IDs of free resources in the container 808*4882a593Smuzhiyun * @mc_io: Pointer to MC portal's I/O object 809*4882a593Smuzhiyun * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 810*4882a593Smuzhiyun * @token: Token of DPRC object 811*4882a593Smuzhiyun * @type: pool type 812*4882a593Smuzhiyun * @range_desc: range descriptor 813*4882a593Smuzhiyun * 814*4882a593Smuzhiyun * Return: '0' on Success; Error code otherwise. 815*4882a593Smuzhiyun */ 816*4882a593Smuzhiyun int dprc_get_res_ids(struct fsl_mc_io *mc_io, 817*4882a593Smuzhiyun uint32_t cmd_flags, 818*4882a593Smuzhiyun uint16_t token, 819*4882a593Smuzhiyun char *type, 820*4882a593Smuzhiyun struct dprc_res_ids_range_desc *range_desc); 821*4882a593Smuzhiyun 822*4882a593Smuzhiyun /* Region flags */ 823*4882a593Smuzhiyun /* Cacheable - Indicates that region should be mapped as cacheable */ 824*4882a593Smuzhiyun #define DPRC_REGION_CACHEABLE 0x00000001 825*4882a593Smuzhiyun 826*4882a593Smuzhiyun /** 827*4882a593Smuzhiyun * enum dprc_region_type - Region type 828*4882a593Smuzhiyun * @DPRC_REGION_TYPE_MC_PORTAL: MC portal region 829*4882a593Smuzhiyun * @DPRC_REGION_TYPE_QBMAN_PORTAL: Qbman portal region 830*4882a593Smuzhiyun */ 831*4882a593Smuzhiyun enum dprc_region_type { 832*4882a593Smuzhiyun DPRC_REGION_TYPE_MC_PORTAL, 833*4882a593Smuzhiyun DPRC_REGION_TYPE_QBMAN_PORTAL 834*4882a593Smuzhiyun }; 835*4882a593Smuzhiyun 836*4882a593Smuzhiyun /** 837*4882a593Smuzhiyun * struct dprc_region_desc - Mappable region descriptor 838*4882a593Smuzhiyun * @base_offset: Region offset from region's base address. 839*4882a593Smuzhiyun * For DPMCP and DPRC objects, region base is offset from SoC MC portals 840*4882a593Smuzhiyun * base address; For DPIO, region base is offset from SoC QMan portals 841*4882a593Smuzhiyun * base address 842*4882a593Smuzhiyun * @size: Region size (in bytes) 843*4882a593Smuzhiyun * @flags: Region attributes 844*4882a593Smuzhiyun * @type: Portal region type 845*4882a593Smuzhiyun */ 846*4882a593Smuzhiyun struct dprc_region_desc { 847*4882a593Smuzhiyun uint32_t base_offset; 848*4882a593Smuzhiyun uint32_t size; 849*4882a593Smuzhiyun uint32_t flags; 850*4882a593Smuzhiyun enum dprc_region_type type; 851*4882a593Smuzhiyun }; 852*4882a593Smuzhiyun 853*4882a593Smuzhiyun /** 854*4882a593Smuzhiyun * dprc_get_obj_region() - Get region information for a specified object. 855*4882a593Smuzhiyun * @mc_io: Pointer to MC portal's I/O object 856*4882a593Smuzhiyun * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 857*4882a593Smuzhiyun * @token: Token of DPRC object 858*4882a593Smuzhiyun * @obj_type: Object type as returned in dprc_get_obj() 859*4882a593Smuzhiyun * @obj_id: Unique object instance as returned in dprc_get_obj() 860*4882a593Smuzhiyun * @region_index: The specific region to query 861*4882a593Smuzhiyun * @region_desc: Returns the requested region descriptor 862*4882a593Smuzhiyun * 863*4882a593Smuzhiyun * Return: '0' on Success; Error code otherwise. 864*4882a593Smuzhiyun */ 865*4882a593Smuzhiyun int dprc_get_obj_region(struct fsl_mc_io *mc_io, 866*4882a593Smuzhiyun uint32_t cmd_flags, 867*4882a593Smuzhiyun uint16_t token, 868*4882a593Smuzhiyun char *obj_type, 869*4882a593Smuzhiyun int obj_id, 870*4882a593Smuzhiyun uint8_t region_index, 871*4882a593Smuzhiyun struct dprc_region_desc *region_desc); 872*4882a593Smuzhiyun /** 873*4882a593Smuzhiyun * struct dprc_endpoint - Endpoint description for link connect/disconnect 874*4882a593Smuzhiyun * operations 875*4882a593Smuzhiyun * @type: Endpoint object type: NULL terminated string 876*4882a593Smuzhiyun * @id: Endpoint object ID 877*4882a593Smuzhiyun * @if_id: Interface ID; should be set for endpoints with multiple 878*4882a593Smuzhiyun * interfaces ("dpsw", "dpdmux"); for others, always set to 0 879*4882a593Smuzhiyun */ 880*4882a593Smuzhiyun struct dprc_endpoint { 881*4882a593Smuzhiyun char type[16]; 882*4882a593Smuzhiyun int id; 883*4882a593Smuzhiyun uint16_t if_id; 884*4882a593Smuzhiyun }; 885*4882a593Smuzhiyun 886*4882a593Smuzhiyun /** 887*4882a593Smuzhiyun * struct dprc_connection_cfg - Connection configuration. 888*4882a593Smuzhiyun * Used for virtual connections only 889*4882a593Smuzhiyun * @committed_rate: Committed rate (Mbits/s) 890*4882a593Smuzhiyun * @max_rate: Maximum rate (Mbits/s) 891*4882a593Smuzhiyun */ 892*4882a593Smuzhiyun struct dprc_connection_cfg { 893*4882a593Smuzhiyun uint32_t committed_rate; 894*4882a593Smuzhiyun uint32_t max_rate; 895*4882a593Smuzhiyun }; 896*4882a593Smuzhiyun 897*4882a593Smuzhiyun /** 898*4882a593Smuzhiyun * dprc_connect() - Connect two endpoints to create a network link between them 899*4882a593Smuzhiyun * @mc_io: Pointer to MC portal's I/O object 900*4882a593Smuzhiyun * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 901*4882a593Smuzhiyun * @token: Token of DPRC object 902*4882a593Smuzhiyun * @endpoint1: Endpoint 1 configuration parameters 903*4882a593Smuzhiyun * @endpoint2: Endpoint 2 configuration parameters 904*4882a593Smuzhiyun * @cfg: Connection configuration. The connection configuration is ignored for 905*4882a593Smuzhiyun * connections made to DPMAC objects, where rate is retrieved from the 906*4882a593Smuzhiyun * MAC configuration. 907*4882a593Smuzhiyun * 908*4882a593Smuzhiyun * Return: '0' on Success; Error code otherwise. 909*4882a593Smuzhiyun */ 910*4882a593Smuzhiyun int dprc_connect(struct fsl_mc_io *mc_io, 911*4882a593Smuzhiyun uint32_t cmd_flags, 912*4882a593Smuzhiyun uint16_t token, 913*4882a593Smuzhiyun const struct dprc_endpoint *endpoint1, 914*4882a593Smuzhiyun const struct dprc_endpoint *endpoint2, 915*4882a593Smuzhiyun const struct dprc_connection_cfg *cfg); 916*4882a593Smuzhiyun 917*4882a593Smuzhiyun /** 918*4882a593Smuzhiyun * dprc_disconnect() - Disconnect one endpoint to remove its network connection 919*4882a593Smuzhiyun * @mc_io: Pointer to MC portal's I/O object 920*4882a593Smuzhiyun * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 921*4882a593Smuzhiyun * @token: Token of DPRC object 922*4882a593Smuzhiyun * @endpoint: Endpoint configuration parameters 923*4882a593Smuzhiyun * 924*4882a593Smuzhiyun * Return: '0' on Success; Error code otherwise. 925*4882a593Smuzhiyun */ 926*4882a593Smuzhiyun int dprc_disconnect(struct fsl_mc_io *mc_io, 927*4882a593Smuzhiyun uint32_t cmd_flags, 928*4882a593Smuzhiyun uint16_t token, 929*4882a593Smuzhiyun const struct dprc_endpoint *endpoint); 930*4882a593Smuzhiyun 931*4882a593Smuzhiyun /** 932*4882a593Smuzhiyun * dprc_get_connection() - Get connected endpoint and link status if connection 933*4882a593Smuzhiyun * exists. 934*4882a593Smuzhiyun * @mc_io: Pointer to MC portal's I/O object 935*4882a593Smuzhiyun * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_' 936*4882a593Smuzhiyun * @token: Token of DPRC object 937*4882a593Smuzhiyun * @endpoint1: Endpoint 1 configuration parameters 938*4882a593Smuzhiyun * @endpoint2: Returned endpoint 2 configuration parameters 939*4882a593Smuzhiyun * @state: Returned link state: 940*4882a593Smuzhiyun * 1 - link is up; 941*4882a593Smuzhiyun * 0 - link is down; 942*4882a593Smuzhiyun * -1 - no connection (endpoint2 information is irrelevant) 943*4882a593Smuzhiyun * 944*4882a593Smuzhiyun * Return: '0' on Success; -ENAVAIL if connection does not exist. 945*4882a593Smuzhiyun */ 946*4882a593Smuzhiyun int dprc_get_connection(struct fsl_mc_io *mc_io, 947*4882a593Smuzhiyun uint32_t cmd_flags, 948*4882a593Smuzhiyun uint16_t token, 949*4882a593Smuzhiyun const struct dprc_endpoint *endpoint1, 950*4882a593Smuzhiyun struct dprc_endpoint *endpoint2, 951*4882a593Smuzhiyun int *state); 952*4882a593Smuzhiyun 953*4882a593Smuzhiyun #endif /* _FSL_DPRC_H */ 954