1*a2a55e51SPrabhakar Kushwaha /* 2*a2a55e51SPrabhakar Kushwaha * Freescale Layerscape MC I/O wrapper 3*a2a55e51SPrabhakar Kushwaha * 4*a2a55e51SPrabhakar Kushwaha * Copyright (C) 2013-2015 Freescale Semiconductor, Inc. 5*a2a55e51SPrabhakar Kushwaha * Author: German Rivera <German.Rivera@freescale.com> 6*a2a55e51SPrabhakar Kushwaha * 7*a2a55e51SPrabhakar Kushwaha * SPDX-License-Identifier: GPL-2.0+ 8*a2a55e51SPrabhakar Kushwaha */ 9*a2a55e51SPrabhakar Kushwaha #ifndef _FSL_DPRC_H 10*a2a55e51SPrabhakar Kushwaha #define _FSL_DPRC_H 11*a2a55e51SPrabhakar Kushwaha 12*a2a55e51SPrabhakar Kushwaha /* DPRC Version */ 13*a2a55e51SPrabhakar Kushwaha #define DPRC_VER_MAJOR 2 14*a2a55e51SPrabhakar Kushwaha #define DPRC_VER_MINOR 0 15*a2a55e51SPrabhakar Kushwaha 16*a2a55e51SPrabhakar Kushwaha /* Command IDs */ 17*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_CLOSE 0x800 18*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_OPEN 0x805 19*a2a55e51SPrabhakar Kushwaha 20*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_ATTR 0x004 21*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_RESET_CONT 0x005 22*a2a55e51SPrabhakar Kushwaha 23*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_CONT_ID 0x830 24*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_OBJ_COUNT 0x159 25*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_OBJ 0x15A 26*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_RES_COUNT 0x15B 27*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_RES_IDS 0x15C 28*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_OBJ_REG 0x15E 29*a2a55e51SPrabhakar Kushwaha 30*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_CONNECT 0x167 31*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_DISCONNECT 0x168 32*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_CONNECTION 0x16C 33*a2a55e51SPrabhakar Kushwaha 34*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 35*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_CONTAINER_ID(cmd, container_id) \ 36*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, container_id) 37*a2a55e51SPrabhakar Kushwaha 38*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 39*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_OPEN(cmd, container_id) \ 40*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, container_id) 41*a2a55e51SPrabhakar Kushwaha 42*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 43*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_RESET_CONTAINER(cmd, child_container_id) \ 44*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, child_container_id) 45*a2a55e51SPrabhakar Kushwaha 46*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 47*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_ATTRIBUTES(cmd, attr) \ 48*a2a55e51SPrabhakar Kushwaha do { \ 49*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, attr->container_id); \ 50*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 16, uint16_t, attr->icid); \ 51*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 32, uint32_t, attr->options);\ 52*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 32, int, attr->portal_id); \ 53*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 16, uint16_t, attr->version.major);\ 54*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 16, 16, uint16_t, attr->version.minor);\ 55*a2a55e51SPrabhakar Kushwaha } while (0) 56*a2a55e51SPrabhakar Kushwaha 57*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 58*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_OBJ_COUNT(cmd, obj_count) \ 59*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 32, int, obj_count) 60*a2a55e51SPrabhakar Kushwaha 61*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 62*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_OBJ(cmd, obj_index) \ 63*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, obj_index) 64*a2a55e51SPrabhakar Kushwaha 65*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 66*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_OBJ(cmd, obj_desc) \ 67*a2a55e51SPrabhakar Kushwaha do { \ 68*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 32, 32, int, obj_desc->id); \ 69*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 16, uint16_t, obj_desc->vendor); \ 70*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 16, 8, uint8_t, obj_desc->irq_count); \ 71*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 24, 8, uint8_t, obj_desc->region_count); \ 72*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 32, uint32_t, obj_desc->state);\ 73*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 16, uint16_t, obj_desc->ver_major);\ 74*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 16, 16, uint16_t, obj_desc->ver_minor);\ 75*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 0, 8, char, obj_desc->type[0]);\ 76*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 8, 8, char, obj_desc->type[1]);\ 77*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 16, 8, char, obj_desc->type[2]);\ 78*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 24, 8, char, obj_desc->type[3]);\ 79*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 32, 8, char, obj_desc->type[4]);\ 80*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 40, 8, char, obj_desc->type[5]);\ 81*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 48, 8, char, obj_desc->type[6]);\ 82*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 56, 8, char, obj_desc->type[7]);\ 83*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 0, 8, char, obj_desc->type[8]);\ 84*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 8, 8, char, obj_desc->type[9]);\ 85*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 16, 8, char, obj_desc->type[10]);\ 86*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 24, 8, char, obj_desc->type[11]);\ 87*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 32, 8, char, obj_desc->type[12]);\ 88*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 40, 8, char, obj_desc->type[13]);\ 89*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 48, 8, char, obj_desc->type[14]);\ 90*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 56, 8, char, obj_desc->type[15]);\ 91*a2a55e51SPrabhakar Kushwaha } while (0) 92*a2a55e51SPrabhakar Kushwaha 93*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 94*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_RES_COUNT(cmd, type) \ 95*a2a55e51SPrabhakar Kushwaha do { \ 96*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 8, char, type[0]);\ 97*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 8, 8, char, type[1]);\ 98*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 8, char, type[2]);\ 99*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 24, 8, char, type[3]);\ 100*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 8, char, type[4]);\ 101*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 40, 8, char, type[5]);\ 102*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 48, 8, char, type[6]);\ 103*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 56, 8, char, type[7]);\ 104*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, type[8]);\ 105*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, type[9]);\ 106*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, type[10]);\ 107*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, type[11]);\ 108*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, type[12]);\ 109*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, type[13]);\ 110*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, type[14]);\ 111*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, type[15]);\ 112*a2a55e51SPrabhakar Kushwaha } while (0) 113*a2a55e51SPrabhakar Kushwaha 114*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 115*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_RES_COUNT(cmd, res_count) \ 116*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 0, 32, int, res_count) 117*a2a55e51SPrabhakar Kushwaha 118*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 119*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_RES_IDS(cmd, range_desc, type) \ 120*a2a55e51SPrabhakar Kushwaha do { \ 121*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 42, 7, enum dprc_iter_status, \ 122*a2a55e51SPrabhakar Kushwaha range_desc->iter_status); \ 123*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 32, int, range_desc->base_id); \ 124*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 32, int, range_desc->last_id);\ 125*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, type[0]);\ 126*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, type[1]);\ 127*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, type[2]);\ 128*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, type[3]);\ 129*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, type[4]);\ 130*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, type[5]);\ 131*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, type[6]);\ 132*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, type[7]);\ 133*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 8, char, type[8]);\ 134*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 8, char, type[9]);\ 135*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 16, 8, char, type[10]);\ 136*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 24, 8, char, type[11]);\ 137*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 8, char, type[12]);\ 138*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 40, 8, char, type[13]);\ 139*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 48, 8, char, type[14]);\ 140*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 56, 8, char, type[15]);\ 141*a2a55e51SPrabhakar Kushwaha } while (0) 142*a2a55e51SPrabhakar Kushwaha 143*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 144*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_RES_IDS(cmd, range_desc) \ 145*a2a55e51SPrabhakar Kushwaha do { \ 146*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 0, 42, 7, enum dprc_iter_status, \ 147*a2a55e51SPrabhakar Kushwaha range_desc->iter_status);\ 148*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 32, int, range_desc->base_id); \ 149*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 32, 32, int, range_desc->last_id);\ 150*a2a55e51SPrabhakar Kushwaha } while (0) 151*a2a55e51SPrabhakar Kushwaha 152*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 153*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index) \ 154*a2a55e51SPrabhakar Kushwaha do { \ 155*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, obj_id); \ 156*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 48, 8, uint8_t, region_index);\ 157*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 8, char, obj_type[0]);\ 158*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 8, char, obj_type[1]);\ 159*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 16, 8, char, obj_type[2]);\ 160*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 24, 8, char, obj_type[3]);\ 161*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 8, char, obj_type[4]);\ 162*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 40, 8, char, obj_type[5]);\ 163*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 48, 8, char, obj_type[6]);\ 164*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 56, 8, char, obj_type[7]);\ 165*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 0, 8, char, obj_type[8]);\ 166*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 8, 8, char, obj_type[9]);\ 167*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 16, 8, char, obj_type[10]);\ 168*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 24, 8, char, obj_type[11]);\ 169*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 32, 8, char, obj_type[12]);\ 170*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 40, 8, char, obj_type[13]);\ 171*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 48, 8, char, obj_type[14]);\ 172*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 4, 56, 8, char, obj_type[15]);\ 173*a2a55e51SPrabhakar Kushwaha } while (0) 174*a2a55e51SPrabhakar Kushwaha 175*a2a55e51SPrabhakar Kushwaha /* param, offset, width, type, arg_name */ 176*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_OBJ_REGION(cmd, region_desc) \ 177*a2a55e51SPrabhakar Kushwaha do { \ 178*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 1, 0, 64, uint64_t, region_desc->base_paddr);\ 179*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 2, 0, 32, uint32_t, region_desc->size); \ 180*a2a55e51SPrabhakar Kushwaha } while (0) 181*a2a55e51SPrabhakar Kushwaha 182*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 183*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2) \ 184*a2a55e51SPrabhakar Kushwaha do { \ 185*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, endpoint1->id); \ 186*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 32, int, endpoint1->interface_id); \ 187*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 32, int, endpoint2->id); \ 188*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 32, int, endpoint2->interface_id); \ 189*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, endpoint1->type[0]); \ 190*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, endpoint1->type[1]); \ 191*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, endpoint1->type[2]); \ 192*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, endpoint1->type[3]); \ 193*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, endpoint1->type[4]); \ 194*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, endpoint1->type[5]); \ 195*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, endpoint1->type[6]); \ 196*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, endpoint1->type[7]); \ 197*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 0, 8, char, endpoint1->type[8]); \ 198*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 8, 8, char, endpoint1->type[9]); \ 199*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 16, 8, char, endpoint1->type[10]); \ 200*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 24, 8, char, endpoint1->type[11]); \ 201*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 32, 8, char, endpoint1->type[12]); \ 202*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 40, 8, char, endpoint1->type[13]); \ 203*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 48, 8, char, endpoint1->type[14]); \ 204*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 3, 56, 8, char, endpoint1->type[15]); \ 205*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 0, 8, char, endpoint2->type[0]); \ 206*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 8, 8, char, endpoint2->type[1]); \ 207*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 16, 8, char, endpoint2->type[2]); \ 208*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 24, 8, char, endpoint2->type[3]); \ 209*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 32, 8, char, endpoint2->type[4]); \ 210*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 40, 8, char, endpoint2->type[5]); \ 211*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 48, 8, char, endpoint2->type[6]); \ 212*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 5, 56, 8, char, endpoint2->type[7]); \ 213*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 0, 8, char, endpoint2->type[8]); \ 214*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 8, 8, char, endpoint2->type[9]); \ 215*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 16, 8, char, endpoint2->type[10]); \ 216*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 24, 8, char, endpoint2->type[11]); \ 217*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 32, 8, char, endpoint2->type[12]); \ 218*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 40, 8, char, endpoint2->type[13]); \ 219*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 48, 8, char, endpoint2->type[14]); \ 220*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 6, 56, 8, char, endpoint2->type[15]); \ 221*a2a55e51SPrabhakar Kushwaha } while (0) 222*a2a55e51SPrabhakar Kushwaha 223*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 224*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_DISCONNECT(cmd, endpoint) \ 225*a2a55e51SPrabhakar Kushwaha do { \ 226*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, endpoint->id); \ 227*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 32, int, endpoint->interface_id); \ 228*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 8, char, endpoint->type[0]); \ 229*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 8, 8, char, endpoint->type[1]); \ 230*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 8, char, endpoint->type[2]); \ 231*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 24, 8, char, endpoint->type[3]); \ 232*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 8, char, endpoint->type[4]); \ 233*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 40, 8, char, endpoint->type[5]); \ 234*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 48, 8, char, endpoint->type[6]); \ 235*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 56, 8, char, endpoint->type[7]); \ 236*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, endpoint->type[8]); \ 237*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, endpoint->type[9]); \ 238*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, endpoint->type[10]); \ 239*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, endpoint->type[11]); \ 240*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, endpoint->type[12]); \ 241*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, endpoint->type[13]); \ 242*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, endpoint->type[14]); \ 243*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, endpoint->type[15]); \ 244*a2a55e51SPrabhakar Kushwaha } while (0) 245*a2a55e51SPrabhakar Kushwaha 246*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 247*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_CONNECTION(cmd, endpoint1) \ 248*a2a55e51SPrabhakar Kushwaha do { \ 249*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 0, 32, int, endpoint1->id); \ 250*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 0, 32, 32, int, endpoint1->interface_id); \ 251*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 0, 8, char, endpoint1->type[0]); \ 252*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 8, 8, char, endpoint1->type[1]); \ 253*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 16, 8, char, endpoint1->type[2]); \ 254*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 24, 8, char, endpoint1->type[3]); \ 255*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 32, 8, char, endpoint1->type[4]); \ 256*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 40, 8, char, endpoint1->type[5]); \ 257*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 48, 8, char, endpoint1->type[6]); \ 258*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 1, 56, 8, char, endpoint1->type[7]); \ 259*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 0, 8, char, endpoint1->type[8]); \ 260*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 8, 8, char, endpoint1->type[9]); \ 261*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 16, 8, char, endpoint1->type[10]); \ 262*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 24, 8, char, endpoint1->type[11]); \ 263*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 32, 8, char, endpoint1->type[12]); \ 264*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 40, 8, char, endpoint1->type[13]); \ 265*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 48, 8, char, endpoint1->type[14]); \ 266*a2a55e51SPrabhakar Kushwaha MC_CMD_OP(cmd, 2, 56, 8, char, endpoint1->type[15]); \ 267*a2a55e51SPrabhakar Kushwaha } while (0) 268*a2a55e51SPrabhakar Kushwaha 269*a2a55e51SPrabhakar Kushwaha 270*a2a55e51SPrabhakar Kushwaha /* cmd, param, offset, width, type, arg_name */ 271*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_CONNECTION(cmd, endpoint2, state) \ 272*a2a55e51SPrabhakar Kushwaha do { \ 273*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 0, 32, int, endpoint2->id); \ 274*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 3, 32, 32, int, endpoint2->interface_id); \ 275*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 0, 8, char, endpoint2->type[0]); \ 276*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 8, 8, char, endpoint2->type[1]); \ 277*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 16, 8, char, endpoint2->type[2]); \ 278*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 24, 8, char, endpoint2->type[3]); \ 279*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 32, 8, char, endpoint2->type[4]); \ 280*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 40, 8, char, endpoint2->type[5]); \ 281*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 48, 8, char, endpoint2->type[6]); \ 282*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 4, 56, 8, char, endpoint2->type[7]); \ 283*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 0, 8, char, endpoint2->type[8]); \ 284*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 8, 8, char, endpoint2->type[9]); \ 285*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 16, 8, char, endpoint2->type[10]); \ 286*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 24, 8, char, endpoint2->type[11]); \ 287*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 32, 8, char, endpoint2->type[12]); \ 288*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 40, 8, char, endpoint2->type[13]); \ 289*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 48, 8, char, endpoint2->type[14]); \ 290*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 5, 56, 8, char, endpoint2->type[15]); \ 291*a2a55e51SPrabhakar Kushwaha MC_RSP_OP(cmd, 6, 0, 32, int, state); \ 292*a2a55e51SPrabhakar Kushwaha } while (0) 293*a2a55e51SPrabhakar Kushwaha 294*a2a55e51SPrabhakar Kushwaha /* Data Path Resource Container API 295*a2a55e51SPrabhakar Kushwaha * Contains DPRC API for managing and querying DPAA resources 296*a2a55e51SPrabhakar Kushwaha */ 297*a2a55e51SPrabhakar Kushwaha struct fsl_mc_io; 298*a2a55e51SPrabhakar Kushwaha 299*a2a55e51SPrabhakar Kushwaha /** 300*a2a55e51SPrabhakar Kushwaha * Set this value as the icid value in dprc_cfg structure when creating a 301*a2a55e51SPrabhakar Kushwaha * container, in case the ICID is not selected by the user and should be 302*a2a55e51SPrabhakar Kushwaha * allocated by the DPRC from the pool of ICIDs. 303*a2a55e51SPrabhakar Kushwaha */ 304*a2a55e51SPrabhakar Kushwaha #define DPRC_GET_ICID_FROM_POOL (uint16_t)(~(0)) 305*a2a55e51SPrabhakar Kushwaha 306*a2a55e51SPrabhakar Kushwaha /** 307*a2a55e51SPrabhakar Kushwaha * Set this value as the portal_id value in dprc_cfg structure when creating a 308*a2a55e51SPrabhakar Kushwaha * container, in case the portal ID is not specifically selected by the 309*a2a55e51SPrabhakar Kushwaha * user and should be allocated by the DPRC from the pool of portal ids. 310*a2a55e51SPrabhakar Kushwaha */ 311*a2a55e51SPrabhakar Kushwaha #define DPRC_GET_PORTAL_ID_FROM_POOL (int)(~(0)) 312*a2a55e51SPrabhakar Kushwaha 313*a2a55e51SPrabhakar Kushwaha /** 314*a2a55e51SPrabhakar Kushwaha * dprc_get_container_id() - Get container ID associated with a given portal. 315*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 316*a2a55e51SPrabhakar Kushwaha * @container_id: Requested container ID 317*a2a55e51SPrabhakar Kushwaha * 318*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 319*a2a55e51SPrabhakar Kushwaha */ 320*a2a55e51SPrabhakar Kushwaha int dprc_get_container_id(struct fsl_mc_io *mc_io, int *container_id); 321*a2a55e51SPrabhakar Kushwaha 322*a2a55e51SPrabhakar Kushwaha /** 323*a2a55e51SPrabhakar Kushwaha * dprc_open() - Open DPRC object for use 324*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 325*a2a55e51SPrabhakar Kushwaha * @container_id: Container ID to open 326*a2a55e51SPrabhakar Kushwaha * @token: Returned token of DPRC object 327*a2a55e51SPrabhakar Kushwaha * 328*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 329*a2a55e51SPrabhakar Kushwaha * 330*a2a55e51SPrabhakar Kushwaha * @warning Required before any operation on the object. 331*a2a55e51SPrabhakar Kushwaha */ 332*a2a55e51SPrabhakar Kushwaha int dprc_open(struct fsl_mc_io *mc_io, int container_id, uint16_t *token); 333*a2a55e51SPrabhakar Kushwaha 334*a2a55e51SPrabhakar Kushwaha /** 335*a2a55e51SPrabhakar Kushwaha * dprc_close() - Close the control session of the object 336*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 337*a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 338*a2a55e51SPrabhakar Kushwaha * 339*a2a55e51SPrabhakar Kushwaha * After this function is called, no further operations are 340*a2a55e51SPrabhakar Kushwaha * allowed on the object without opening a new control session. 341*a2a55e51SPrabhakar Kushwaha * 342*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 343*a2a55e51SPrabhakar Kushwaha */ 344*a2a55e51SPrabhakar Kushwaha int dprc_close(struct fsl_mc_io *mc_io, uint16_t token); 345*a2a55e51SPrabhakar Kushwaha 346*a2a55e51SPrabhakar Kushwaha /** 347*a2a55e51SPrabhakar Kushwaha * Container general options 348*a2a55e51SPrabhakar Kushwaha * 349*a2a55e51SPrabhakar Kushwaha * These options may be selected at container creation by the container creator 350*a2a55e51SPrabhakar Kushwaha * and can be retrieved using dprc_get_attributes() 351*a2a55e51SPrabhakar Kushwaha */ 352*a2a55e51SPrabhakar Kushwaha 353*a2a55e51SPrabhakar Kushwaha /* Spawn Policy Option allowed - Indicates that the new container is allowed 354*a2a55e51SPrabhakar Kushwaha * to spawn and have its own child containers. 355*a2a55e51SPrabhakar Kushwaha */ 356*a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_SPAWN_ALLOWED 0x00000001 357*a2a55e51SPrabhakar Kushwaha 358*a2a55e51SPrabhakar Kushwaha /* General Container allocation policy - Indicates that the new container is 359*a2a55e51SPrabhakar Kushwaha * allowed to allocate requested resources from its parent container; if not 360*a2a55e51SPrabhakar Kushwaha * set, the container is only allowed to use resources in its own pools; Note 361*a2a55e51SPrabhakar Kushwaha * that this is a container's global policy, but the parent container may 362*a2a55e51SPrabhakar Kushwaha * override it and set specific quota per resource type. 363*a2a55e51SPrabhakar Kushwaha */ 364*a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_ALLOC_ALLOWED 0x00000002 365*a2a55e51SPrabhakar Kushwaha 366*a2a55e51SPrabhakar Kushwaha /* Object initialization allowed - software context associated with this 367*a2a55e51SPrabhakar Kushwaha * container is allowed to invoke object initialization operations. 368*a2a55e51SPrabhakar Kushwaha */ 369*a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_OBJ_CREATE_ALLOWED 0x00000004 370*a2a55e51SPrabhakar Kushwaha 371*a2a55e51SPrabhakar Kushwaha /* Topology change allowed - software context associated with this 372*a2a55e51SPrabhakar Kushwaha * container is allowed to invoke topology operations, such as attach/detach 373*a2a55e51SPrabhakar Kushwaha * of network objects. 374*a2a55e51SPrabhakar Kushwaha */ 375*a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_TOPOLOGY_CHANGES_ALLOWED 0x00000008 376*a2a55e51SPrabhakar Kushwaha 377*a2a55e51SPrabhakar Kushwaha /* IOMMU bypass - indicates whether objects of this container are permitted 378*a2a55e51SPrabhakar Kushwaha * to bypass the IOMMU. 379*a2a55e51SPrabhakar Kushwaha */ 380*a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_IOMMU_BYPASS 0x00000010 381*a2a55e51SPrabhakar Kushwaha 382*a2a55e51SPrabhakar Kushwaha /* AIOP - Indicates that container belongs to AIOP. */ 383*a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_AIOP 0x00000020 384*a2a55e51SPrabhakar Kushwaha 385*a2a55e51SPrabhakar Kushwaha /** 386*a2a55e51SPrabhakar Kushwaha * struct dprc_cfg - Container configuration options 387*a2a55e51SPrabhakar Kushwaha * @icid: Container's ICID; if set to 'DPRC_GET_ICID_FROM_POOL', a free 388*a2a55e51SPrabhakar Kushwaha * ICID value is allocated by the DPRC 389*a2a55e51SPrabhakar Kushwaha * @portal_id: Portal ID; if set to 'DPRC_GET_PORTAL_ID_FROM_POOL', a free 390*a2a55e51SPrabhakar Kushwaha * portal ID is allocated by the DPRC 391*a2a55e51SPrabhakar Kushwaha * @options: Combination of 'DPRC_CFG_OPT_<X>' options 392*a2a55e51SPrabhakar Kushwaha */ 393*a2a55e51SPrabhakar Kushwaha struct dprc_cfg { 394*a2a55e51SPrabhakar Kushwaha uint16_t icid; 395*a2a55e51SPrabhakar Kushwaha int portal_id; 396*a2a55e51SPrabhakar Kushwaha uint64_t options; 397*a2a55e51SPrabhakar Kushwaha }; 398*a2a55e51SPrabhakar Kushwaha 399*a2a55e51SPrabhakar Kushwaha /** 400*a2a55e51SPrabhakar Kushwaha * dprc_reset_container - Reset child container. 401*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 402*a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 403*a2a55e51SPrabhakar Kushwaha * @child_container_id: ID of the container to reset 404*a2a55e51SPrabhakar Kushwaha * 405*a2a55e51SPrabhakar Kushwaha * In case a software context crashes or becomes non-responsive, the parent 406*a2a55e51SPrabhakar Kushwaha * may wish to reset its resources container before the software context is 407*a2a55e51SPrabhakar Kushwaha * restarted. 408*a2a55e51SPrabhakar Kushwaha * 409*a2a55e51SPrabhakar Kushwaha * This routine informs all objects assigned to the child container that the 410*a2a55e51SPrabhakar Kushwaha * container is being reset, so they may perform any cleanup operations that are 411*a2a55e51SPrabhakar Kushwaha * needed. All objects handles that were owned by the child container shall be 412*a2a55e51SPrabhakar Kushwaha * closed. 413*a2a55e51SPrabhakar Kushwaha * 414*a2a55e51SPrabhakar Kushwaha * Note that such request may be submitted even if the child software context 415*a2a55e51SPrabhakar Kushwaha * has not crashed, but the resulting object cleanup operations will not be 416*a2a55e51SPrabhakar Kushwaha * aware of that. 417*a2a55e51SPrabhakar Kushwaha * 418*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 419*a2a55e51SPrabhakar Kushwaha */ 420*a2a55e51SPrabhakar Kushwaha int dprc_reset_container(struct fsl_mc_io *mc_io, 421*a2a55e51SPrabhakar Kushwaha uint16_t token, 422*a2a55e51SPrabhakar Kushwaha int child_container_id); 423*a2a55e51SPrabhakar Kushwaha 424*a2a55e51SPrabhakar Kushwaha /** 425*a2a55e51SPrabhakar Kushwaha * struct dprc_attributes - Container attributes 426*a2a55e51SPrabhakar Kushwaha * @container_id: Container's ID 427*a2a55e51SPrabhakar Kushwaha * @icid: Container's ICID 428*a2a55e51SPrabhakar Kushwaha * @portal_id: Container's portal ID 429*a2a55e51SPrabhakar Kushwaha * @options: Container's options as set at container's creation 430*a2a55e51SPrabhakar Kushwaha * @version: DPRC version 431*a2a55e51SPrabhakar Kushwaha */ 432*a2a55e51SPrabhakar Kushwaha struct dprc_attributes { 433*a2a55e51SPrabhakar Kushwaha int container_id; 434*a2a55e51SPrabhakar Kushwaha uint16_t icid; 435*a2a55e51SPrabhakar Kushwaha int portal_id; 436*a2a55e51SPrabhakar Kushwaha uint64_t options; 437*a2a55e51SPrabhakar Kushwaha /** 438*a2a55e51SPrabhakar Kushwaha * struct version - DPRC version 439*a2a55e51SPrabhakar Kushwaha * @major: DPRC major version 440*a2a55e51SPrabhakar Kushwaha * @minor: DPRC minor version 441*a2a55e51SPrabhakar Kushwaha */ 442*a2a55e51SPrabhakar Kushwaha struct { 443*a2a55e51SPrabhakar Kushwaha uint16_t major; 444*a2a55e51SPrabhakar Kushwaha uint16_t minor; 445*a2a55e51SPrabhakar Kushwaha } version; 446*a2a55e51SPrabhakar Kushwaha }; 447*a2a55e51SPrabhakar Kushwaha 448*a2a55e51SPrabhakar Kushwaha /** 449*a2a55e51SPrabhakar Kushwaha * dprc_get_attributes() - Obtains container attributes 450*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 451*a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 452*a2a55e51SPrabhakar Kushwaha * @attributes Returned container attributes 453*a2a55e51SPrabhakar Kushwaha * 454*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 455*a2a55e51SPrabhakar Kushwaha */ 456*a2a55e51SPrabhakar Kushwaha int dprc_get_attributes(struct fsl_mc_io *mc_io, 457*a2a55e51SPrabhakar Kushwaha uint16_t token, 458*a2a55e51SPrabhakar Kushwaha struct dprc_attributes *attributes); 459*a2a55e51SPrabhakar Kushwaha 460*a2a55e51SPrabhakar Kushwaha /** 461*a2a55e51SPrabhakar Kushwaha * dprc_get_obj_count() - Obtains the number of objects in the DPRC 462*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 463*a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 464*a2a55e51SPrabhakar Kushwaha * @obj_count: Number of objects assigned to the DPRC 465*a2a55e51SPrabhakar Kushwaha * 466*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 467*a2a55e51SPrabhakar Kushwaha */ 468*a2a55e51SPrabhakar Kushwaha int dprc_get_obj_count(struct fsl_mc_io *mc_io, uint16_t token, int *obj_count); 469*a2a55e51SPrabhakar Kushwaha 470*a2a55e51SPrabhakar Kushwaha /* Objects Attributes Flags */ 471*a2a55e51SPrabhakar Kushwaha 472*a2a55e51SPrabhakar Kushwaha /* Opened state - Indicates that an object is open by at least one owner */ 473*a2a55e51SPrabhakar Kushwaha #define DPRC_OBJ_STATE_OPEN 0x00000001 474*a2a55e51SPrabhakar Kushwaha /* Plugged state - Indicates that the object is plugged */ 475*a2a55e51SPrabhakar Kushwaha #define DPRC_OBJ_STATE_PLUGGED 0x00000002 476*a2a55e51SPrabhakar Kushwaha 477*a2a55e51SPrabhakar Kushwaha /** 478*a2a55e51SPrabhakar Kushwaha * struct dprc_obj_desc - Object descriptor, returned from dprc_get_obj() 479*a2a55e51SPrabhakar Kushwaha * @type: Type of object: NULL terminated string 480*a2a55e51SPrabhakar Kushwaha * @id: ID of logical object resource 481*a2a55e51SPrabhakar Kushwaha * @vendor: Object vendor identifier 482*a2a55e51SPrabhakar Kushwaha * @ver_major: Major version number 483*a2a55e51SPrabhakar Kushwaha * @ver_minor: Minor version number 484*a2a55e51SPrabhakar Kushwaha * @irq_count: Number of interrupts supported by the object 485*a2a55e51SPrabhakar Kushwaha * @region_count: Number of mappable regions supported by the object 486*a2a55e51SPrabhakar Kushwaha * @state: Object state: combination of DPRC_OBJ_STATE_ states 487*a2a55e51SPrabhakar Kushwaha */ 488*a2a55e51SPrabhakar Kushwaha struct dprc_obj_desc { 489*a2a55e51SPrabhakar Kushwaha char type[16]; 490*a2a55e51SPrabhakar Kushwaha int id; 491*a2a55e51SPrabhakar Kushwaha uint16_t vendor; 492*a2a55e51SPrabhakar Kushwaha uint16_t ver_major; 493*a2a55e51SPrabhakar Kushwaha uint16_t ver_minor; 494*a2a55e51SPrabhakar Kushwaha uint8_t irq_count; 495*a2a55e51SPrabhakar Kushwaha uint8_t region_count; 496*a2a55e51SPrabhakar Kushwaha uint32_t state; 497*a2a55e51SPrabhakar Kushwaha }; 498*a2a55e51SPrabhakar Kushwaha 499*a2a55e51SPrabhakar Kushwaha /** 500*a2a55e51SPrabhakar Kushwaha * dprc_get_obj() - Get general information on an object 501*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 502*a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 503*a2a55e51SPrabhakar Kushwaha * @obj_index: Index of the object to be queried (< obj_count) 504*a2a55e51SPrabhakar Kushwaha * @obj_desc: Returns the requested object descriptor 505*a2a55e51SPrabhakar Kushwaha * 506*a2a55e51SPrabhakar Kushwaha * The object descriptors are retrieved one by one by incrementing 507*a2a55e51SPrabhakar Kushwaha * obj_index up to (not including) the value of obj_count returned 508*a2a55e51SPrabhakar Kushwaha * from dprc_get_obj_count(). dprc_get_obj_count() must 509*a2a55e51SPrabhakar Kushwaha * be called prior to dprc_get_obj(). 510*a2a55e51SPrabhakar Kushwaha * 511*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 512*a2a55e51SPrabhakar Kushwaha */ 513*a2a55e51SPrabhakar Kushwaha int dprc_get_obj(struct fsl_mc_io *mc_io, 514*a2a55e51SPrabhakar Kushwaha uint16_t token, 515*a2a55e51SPrabhakar Kushwaha int obj_index, 516*a2a55e51SPrabhakar Kushwaha struct dprc_obj_desc *obj_desc); 517*a2a55e51SPrabhakar Kushwaha 518*a2a55e51SPrabhakar Kushwaha /** 519*a2a55e51SPrabhakar Kushwaha * dprc_get_res_count() - Obtains the number of free resources that are assigned 520*a2a55e51SPrabhakar Kushwaha * to this container, by pool type 521*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 522*a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 523*a2a55e51SPrabhakar Kushwaha * @type: pool type 524*a2a55e51SPrabhakar Kushwaha * @res_count: Returned number of free resources of the given 525*a2a55e51SPrabhakar Kushwaha * resource type that are assigned to this DPRC 526*a2a55e51SPrabhakar Kushwaha * 527*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 528*a2a55e51SPrabhakar Kushwaha */ 529*a2a55e51SPrabhakar Kushwaha int dprc_get_res_count(struct fsl_mc_io *mc_io, 530*a2a55e51SPrabhakar Kushwaha uint16_t token, 531*a2a55e51SPrabhakar Kushwaha char *type, 532*a2a55e51SPrabhakar Kushwaha int *res_count); 533*a2a55e51SPrabhakar Kushwaha 534*a2a55e51SPrabhakar Kushwaha /** 535*a2a55e51SPrabhakar Kushwaha * enum dprc_iter_status - Iteration status 536*a2a55e51SPrabhakar Kushwaha * @DPRC_ITER_STATUS_FIRST: Perform first iteration 537*a2a55e51SPrabhakar Kushwaha * @DPRC_ITER_STATUS_MORE: Indicates more/next iteration is needed 538*a2a55e51SPrabhakar Kushwaha * @DPRC_ITER_STATUS_LAST: Indicates last iteration 539*a2a55e51SPrabhakar Kushwaha */ 540*a2a55e51SPrabhakar Kushwaha enum dprc_iter_status { 541*a2a55e51SPrabhakar Kushwaha DPRC_ITER_STATUS_FIRST = 0, 542*a2a55e51SPrabhakar Kushwaha DPRC_ITER_STATUS_MORE = 1, 543*a2a55e51SPrabhakar Kushwaha DPRC_ITER_STATUS_LAST = 2 544*a2a55e51SPrabhakar Kushwaha }; 545*a2a55e51SPrabhakar Kushwaha 546*a2a55e51SPrabhakar Kushwaha /** 547*a2a55e51SPrabhakar Kushwaha * struct dprc_res_ids_range_desc - Resource ID range descriptor 548*a2a55e51SPrabhakar Kushwaha * @base_id: Base resource ID of this range 549*a2a55e51SPrabhakar Kushwaha * @last_id: Last resource ID of this range 550*a2a55e51SPrabhakar Kushwaha * @iter_status: Iteration status - should be set to DPRC_ITER_STATUS_FIRST at 551*a2a55e51SPrabhakar Kushwaha * first iteration; while the returned marker is DPRC_ITER_STATUS_MORE, 552*a2a55e51SPrabhakar Kushwaha * additional iterations are needed, until the returned marker is 553*a2a55e51SPrabhakar Kushwaha * DPRC_ITER_STATUS_LAST 554*a2a55e51SPrabhakar Kushwaha */ 555*a2a55e51SPrabhakar Kushwaha struct dprc_res_ids_range_desc { 556*a2a55e51SPrabhakar Kushwaha int base_id; 557*a2a55e51SPrabhakar Kushwaha int last_id; 558*a2a55e51SPrabhakar Kushwaha enum dprc_iter_status iter_status; 559*a2a55e51SPrabhakar Kushwaha }; 560*a2a55e51SPrabhakar Kushwaha 561*a2a55e51SPrabhakar Kushwaha /** 562*a2a55e51SPrabhakar Kushwaha * dprc_get_res_ids() - Obtains IDs of free resources in the container 563*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 564*a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 565*a2a55e51SPrabhakar Kushwaha * @type: pool type 566*a2a55e51SPrabhakar Kushwaha * @range_desc: range descriptor 567*a2a55e51SPrabhakar Kushwaha * 568*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 569*a2a55e51SPrabhakar Kushwaha */ 570*a2a55e51SPrabhakar Kushwaha int dprc_get_res_ids(struct fsl_mc_io *mc_io, 571*a2a55e51SPrabhakar Kushwaha uint16_t token, 572*a2a55e51SPrabhakar Kushwaha char *type, 573*a2a55e51SPrabhakar Kushwaha struct dprc_res_ids_range_desc *range_desc); 574*a2a55e51SPrabhakar Kushwaha 575*a2a55e51SPrabhakar Kushwaha /** 576*a2a55e51SPrabhakar Kushwaha * struct dprc_region_desc - Mappable region descriptor 577*a2a55e51SPrabhakar Kushwaha * @base_paddr: Region base physical address 578*a2a55e51SPrabhakar Kushwaha * @size: Region size (in bytes) 579*a2a55e51SPrabhakar Kushwaha */ 580*a2a55e51SPrabhakar Kushwaha struct dprc_region_desc { 581*a2a55e51SPrabhakar Kushwaha uint64_t base_paddr; 582*a2a55e51SPrabhakar Kushwaha uint32_t size; 583*a2a55e51SPrabhakar Kushwaha }; 584*a2a55e51SPrabhakar Kushwaha 585*a2a55e51SPrabhakar Kushwaha /** 586*a2a55e51SPrabhakar Kushwaha * dprc_get_obj_region() - Get region information for a specified object. 587*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 588*a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 589*a2a55e51SPrabhakar Kushwaha * @obj_type; Object type as returned in dprc_get_obj() 590*a2a55e51SPrabhakar Kushwaha * @obj_id: Unique object instance as returned in dprc_get_obj() 591*a2a55e51SPrabhakar Kushwaha * @region_index: The specific region to query 592*a2a55e51SPrabhakar Kushwaha * @region_desc: Returns the requested region descriptor 593*a2a55e51SPrabhakar Kushwaha * 594*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 595*a2a55e51SPrabhakar Kushwaha */ 596*a2a55e51SPrabhakar Kushwaha int dprc_get_obj_region(struct fsl_mc_io *mc_io, 597*a2a55e51SPrabhakar Kushwaha uint16_t token, 598*a2a55e51SPrabhakar Kushwaha char *obj_type, 599*a2a55e51SPrabhakar Kushwaha int obj_id, 600*a2a55e51SPrabhakar Kushwaha uint8_t region_index, 601*a2a55e51SPrabhakar Kushwaha struct dprc_region_desc *region_desc); 602*a2a55e51SPrabhakar Kushwaha /** 603*a2a55e51SPrabhakar Kushwaha * struct dprc_endpoint - Endpoint description for link connect/disconnect 604*a2a55e51SPrabhakar Kushwaha * operations 605*a2a55e51SPrabhakar Kushwaha * @type: Endpoint object type: NULL terminated string 606*a2a55e51SPrabhakar Kushwaha * @id: Endpoint object ID 607*a2a55e51SPrabhakar Kushwaha * @interface_id: Interface ID; should be set for endpoints with multiple 608*a2a55e51SPrabhakar Kushwaha * interfaces ("dpsw", "dpdmux"); for others, always set to 0 609*a2a55e51SPrabhakar Kushwaha */ 610*a2a55e51SPrabhakar Kushwaha struct dprc_endpoint { 611*a2a55e51SPrabhakar Kushwaha char type[16]; 612*a2a55e51SPrabhakar Kushwaha int id; 613*a2a55e51SPrabhakar Kushwaha int interface_id; 614*a2a55e51SPrabhakar Kushwaha }; 615*a2a55e51SPrabhakar Kushwaha 616*a2a55e51SPrabhakar Kushwaha /** 617*a2a55e51SPrabhakar Kushwaha * dprc_connect() - Connect two endpoints to create a network link between them 618*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 619*a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 620*a2a55e51SPrabhakar Kushwaha * @endpoint1: Endpoint 1 configuration parameters 621*a2a55e51SPrabhakar Kushwaha * @endpoint2: Endpoint 2 configuration parameters 622*a2a55e51SPrabhakar Kushwaha * 623*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 624*a2a55e51SPrabhakar Kushwaha */ 625*a2a55e51SPrabhakar Kushwaha int dprc_connect(struct fsl_mc_io *mc_io, 626*a2a55e51SPrabhakar Kushwaha uint16_t token, 627*a2a55e51SPrabhakar Kushwaha const struct dprc_endpoint *endpoint1, 628*a2a55e51SPrabhakar Kushwaha const struct dprc_endpoint *endpoint2); 629*a2a55e51SPrabhakar Kushwaha 630*a2a55e51SPrabhakar Kushwaha /** 631*a2a55e51SPrabhakar Kushwaha * dprc_disconnect() - Disconnect one endpoint to remove its network connection 632*a2a55e51SPrabhakar Kushwaha * @mc_io: Pointer to MC portal's I/O object 633*a2a55e51SPrabhakar Kushwaha * @token: Token of DPRC object 634*a2a55e51SPrabhakar Kushwaha * @endpoint: Endpoint configuration parameters 635*a2a55e51SPrabhakar Kushwaha * 636*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; Error code otherwise. 637*a2a55e51SPrabhakar Kushwaha */ 638*a2a55e51SPrabhakar Kushwaha int dprc_disconnect(struct fsl_mc_io *mc_io, 639*a2a55e51SPrabhakar Kushwaha uint16_t token, 640*a2a55e51SPrabhakar Kushwaha const struct dprc_endpoint *endpoint); 641*a2a55e51SPrabhakar Kushwaha 642*a2a55e51SPrabhakar Kushwaha /** 643*a2a55e51SPrabhakar Kushwaha * dprc_get_connection() - Get connected endpoint and link status if connection 644*a2a55e51SPrabhakar Kushwaha * exists. 645*a2a55e51SPrabhakar Kushwaha * @mc_io Pointer to MC portal's I/O object 646*a2a55e51SPrabhakar Kushwaha * @token Token of DPRC object 647*a2a55e51SPrabhakar Kushwaha * @endpoint1 Endpoint 1 configuration parameters 648*a2a55e51SPrabhakar Kushwaha * @endpoint2 Returned endpoint 2 configuration parameters 649*a2a55e51SPrabhakar Kushwaha * @state: Returned link state: 1 - link is up, 0 - link is down 650*a2a55e51SPrabhakar Kushwaha * 651*a2a55e51SPrabhakar Kushwaha * Return: '0' on Success; -ENAVAIL if connection does not exist. 652*a2a55e51SPrabhakar Kushwaha */ 653*a2a55e51SPrabhakar Kushwaha int dprc_get_connection(struct fsl_mc_io *mc_io, 654*a2a55e51SPrabhakar Kushwaha uint16_t token, 655*a2a55e51SPrabhakar Kushwaha const struct dprc_endpoint *endpoint1, 656*a2a55e51SPrabhakar Kushwaha struct dprc_endpoint *endpoint2, 657*a2a55e51SPrabhakar Kushwaha int *state); 658*a2a55e51SPrabhakar Kushwaha 659*a2a55e51SPrabhakar Kushwaha #endif /* _FSL_DPRC_H */ 660