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 10*a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_sys.h> 11*a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_cmd.h> 12*a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_dprc.h> 13*a2a55e51SPrabhakar Kushwaha 14*a2a55e51SPrabhakar Kushwaha int dprc_get_container_id(struct fsl_mc_io *mc_io, int *container_id) 15*a2a55e51SPrabhakar Kushwaha { 16*a2a55e51SPrabhakar Kushwaha struct mc_command cmd = { 0 }; 17*a2a55e51SPrabhakar Kushwaha int err; 18*a2a55e51SPrabhakar Kushwaha 19*a2a55e51SPrabhakar Kushwaha /* prepare command */ 20*a2a55e51SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONT_ID, 21*a2a55e51SPrabhakar Kushwaha MC_CMD_PRI_LOW, 0); 22*a2a55e51SPrabhakar Kushwaha 23*a2a55e51SPrabhakar Kushwaha /* send command to mc*/ 24*a2a55e51SPrabhakar Kushwaha err = mc_send_command(mc_io, &cmd); 25*a2a55e51SPrabhakar Kushwaha if (err) 26*a2a55e51SPrabhakar Kushwaha return err; 27*a2a55e51SPrabhakar Kushwaha 28*a2a55e51SPrabhakar Kushwaha /* retrieve response parameters */ 29*a2a55e51SPrabhakar Kushwaha DPRC_RSP_GET_CONTAINER_ID(cmd, *container_id); 30*a2a55e51SPrabhakar Kushwaha 31*a2a55e51SPrabhakar Kushwaha return 0; 32*a2a55e51SPrabhakar Kushwaha } 33*a2a55e51SPrabhakar Kushwaha 34*a2a55e51SPrabhakar Kushwaha int dprc_open(struct fsl_mc_io *mc_io, int container_id, uint16_t *token) 35*a2a55e51SPrabhakar Kushwaha { 36*a2a55e51SPrabhakar Kushwaha struct mc_command cmd = { 0 }; 37*a2a55e51SPrabhakar Kushwaha int err; 38*a2a55e51SPrabhakar Kushwaha 39*a2a55e51SPrabhakar Kushwaha /* prepare command */ 40*a2a55e51SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPRC_CMDID_OPEN, MC_CMD_PRI_LOW, 41*a2a55e51SPrabhakar Kushwaha 0); 42*a2a55e51SPrabhakar Kushwaha DPRC_CMD_OPEN(cmd, container_id); 43*a2a55e51SPrabhakar Kushwaha 44*a2a55e51SPrabhakar Kushwaha /* send command to mc*/ 45*a2a55e51SPrabhakar Kushwaha err = mc_send_command(mc_io, &cmd); 46*a2a55e51SPrabhakar Kushwaha if (err) 47*a2a55e51SPrabhakar Kushwaha return err; 48*a2a55e51SPrabhakar Kushwaha 49*a2a55e51SPrabhakar Kushwaha /* retrieve response parameters */ 50*a2a55e51SPrabhakar Kushwaha *token = MC_CMD_HDR_READ_TOKEN(cmd.header); 51*a2a55e51SPrabhakar Kushwaha 52*a2a55e51SPrabhakar Kushwaha return 0; 53*a2a55e51SPrabhakar Kushwaha } 54*a2a55e51SPrabhakar Kushwaha 55*a2a55e51SPrabhakar Kushwaha int dprc_close(struct fsl_mc_io *mc_io, uint16_t token) 56*a2a55e51SPrabhakar Kushwaha { 57*a2a55e51SPrabhakar Kushwaha struct mc_command cmd = { 0 }; 58*a2a55e51SPrabhakar Kushwaha 59*a2a55e51SPrabhakar Kushwaha /* prepare command */ 60*a2a55e51SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPRC_CMDID_CLOSE, MC_CMD_PRI_HIGH, 61*a2a55e51SPrabhakar Kushwaha token); 62*a2a55e51SPrabhakar Kushwaha 63*a2a55e51SPrabhakar Kushwaha /* send command to mc*/ 64*a2a55e51SPrabhakar Kushwaha return mc_send_command(mc_io, &cmd); 65*a2a55e51SPrabhakar Kushwaha } 66*a2a55e51SPrabhakar Kushwaha 67*a2a55e51SPrabhakar Kushwaha int dprc_reset_container(struct fsl_mc_io *mc_io, 68*a2a55e51SPrabhakar Kushwaha uint16_t token, 69*a2a55e51SPrabhakar Kushwaha int child_container_id) 70*a2a55e51SPrabhakar Kushwaha { 71*a2a55e51SPrabhakar Kushwaha struct mc_command cmd = { 0 }; 72*a2a55e51SPrabhakar Kushwaha 73*a2a55e51SPrabhakar Kushwaha /* prepare command */ 74*a2a55e51SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPRC_CMDID_RESET_CONT, 75*a2a55e51SPrabhakar Kushwaha MC_CMD_PRI_LOW, token); 76*a2a55e51SPrabhakar Kushwaha DPRC_CMD_RESET_CONTAINER(cmd, child_container_id); 77*a2a55e51SPrabhakar Kushwaha 78*a2a55e51SPrabhakar Kushwaha /* send command to mc*/ 79*a2a55e51SPrabhakar Kushwaha return mc_send_command(mc_io, &cmd); 80*a2a55e51SPrabhakar Kushwaha } 81*a2a55e51SPrabhakar Kushwaha 82*a2a55e51SPrabhakar Kushwaha int dprc_get_attributes(struct fsl_mc_io *mc_io, 83*a2a55e51SPrabhakar Kushwaha uint16_t token, 84*a2a55e51SPrabhakar Kushwaha struct dprc_attributes *attr) 85*a2a55e51SPrabhakar Kushwaha { 86*a2a55e51SPrabhakar Kushwaha struct mc_command cmd = { 0 }; 87*a2a55e51SPrabhakar Kushwaha int err; 88*a2a55e51SPrabhakar Kushwaha 89*a2a55e51SPrabhakar Kushwaha /* prepare command */ 90*a2a55e51SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_ATTR, 91*a2a55e51SPrabhakar Kushwaha MC_CMD_PRI_LOW, 92*a2a55e51SPrabhakar Kushwaha token); 93*a2a55e51SPrabhakar Kushwaha 94*a2a55e51SPrabhakar Kushwaha /* send command to mc*/ 95*a2a55e51SPrabhakar Kushwaha err = mc_send_command(mc_io, &cmd); 96*a2a55e51SPrabhakar Kushwaha if (err) 97*a2a55e51SPrabhakar Kushwaha return err; 98*a2a55e51SPrabhakar Kushwaha 99*a2a55e51SPrabhakar Kushwaha /* retrieve response parameters */ 100*a2a55e51SPrabhakar Kushwaha DPRC_RSP_GET_ATTRIBUTES(cmd, attr); 101*a2a55e51SPrabhakar Kushwaha 102*a2a55e51SPrabhakar Kushwaha return 0; 103*a2a55e51SPrabhakar Kushwaha } 104*a2a55e51SPrabhakar Kushwaha 105*a2a55e51SPrabhakar Kushwaha int dprc_get_obj_count(struct fsl_mc_io *mc_io, uint16_t token, int *obj_count) 106*a2a55e51SPrabhakar Kushwaha { 107*a2a55e51SPrabhakar Kushwaha struct mc_command cmd = { 0 }; 108*a2a55e51SPrabhakar Kushwaha int err; 109*a2a55e51SPrabhakar Kushwaha 110*a2a55e51SPrabhakar Kushwaha /* prepare command */ 111*a2a55e51SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_COUNT, 112*a2a55e51SPrabhakar Kushwaha MC_CMD_PRI_LOW, token); 113*a2a55e51SPrabhakar Kushwaha 114*a2a55e51SPrabhakar Kushwaha /* send command to mc*/ 115*a2a55e51SPrabhakar Kushwaha err = mc_send_command(mc_io, &cmd); 116*a2a55e51SPrabhakar Kushwaha if (err) 117*a2a55e51SPrabhakar Kushwaha return err; 118*a2a55e51SPrabhakar Kushwaha 119*a2a55e51SPrabhakar Kushwaha /* retrieve response parameters */ 120*a2a55e51SPrabhakar Kushwaha DPRC_RSP_GET_OBJ_COUNT(cmd, *obj_count); 121*a2a55e51SPrabhakar Kushwaha 122*a2a55e51SPrabhakar Kushwaha return 0; 123*a2a55e51SPrabhakar Kushwaha } 124*a2a55e51SPrabhakar Kushwaha 125*a2a55e51SPrabhakar Kushwaha int dprc_get_obj(struct fsl_mc_io *mc_io, 126*a2a55e51SPrabhakar Kushwaha uint16_t token, 127*a2a55e51SPrabhakar Kushwaha int obj_index, 128*a2a55e51SPrabhakar Kushwaha struct dprc_obj_desc *obj_desc) 129*a2a55e51SPrabhakar Kushwaha { 130*a2a55e51SPrabhakar Kushwaha struct mc_command cmd = { 0 }; 131*a2a55e51SPrabhakar Kushwaha int err; 132*a2a55e51SPrabhakar Kushwaha 133*a2a55e51SPrabhakar Kushwaha /* prepare command */ 134*a2a55e51SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ, 135*a2a55e51SPrabhakar Kushwaha MC_CMD_PRI_LOW, 136*a2a55e51SPrabhakar Kushwaha token); 137*a2a55e51SPrabhakar Kushwaha DPRC_CMD_GET_OBJ(cmd, obj_index); 138*a2a55e51SPrabhakar Kushwaha 139*a2a55e51SPrabhakar Kushwaha /* send command to mc*/ 140*a2a55e51SPrabhakar Kushwaha err = mc_send_command(mc_io, &cmd); 141*a2a55e51SPrabhakar Kushwaha if (err) 142*a2a55e51SPrabhakar Kushwaha return err; 143*a2a55e51SPrabhakar Kushwaha 144*a2a55e51SPrabhakar Kushwaha /* retrieve response parameters */ 145*a2a55e51SPrabhakar Kushwaha DPRC_RSP_GET_OBJ(cmd, obj_desc); 146*a2a55e51SPrabhakar Kushwaha 147*a2a55e51SPrabhakar Kushwaha return 0; 148*a2a55e51SPrabhakar Kushwaha } 149*a2a55e51SPrabhakar Kushwaha 150*a2a55e51SPrabhakar Kushwaha int dprc_get_res_count(struct fsl_mc_io *mc_io, 151*a2a55e51SPrabhakar Kushwaha uint16_t token, 152*a2a55e51SPrabhakar Kushwaha char *type, 153*a2a55e51SPrabhakar Kushwaha int *res_count) 154*a2a55e51SPrabhakar Kushwaha { 155*a2a55e51SPrabhakar Kushwaha struct mc_command cmd = { 0 }; 156*a2a55e51SPrabhakar Kushwaha int err; 157*a2a55e51SPrabhakar Kushwaha 158*a2a55e51SPrabhakar Kushwaha *res_count = 0; 159*a2a55e51SPrabhakar Kushwaha 160*a2a55e51SPrabhakar Kushwaha /* prepare command */ 161*a2a55e51SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_COUNT, 162*a2a55e51SPrabhakar Kushwaha MC_CMD_PRI_LOW, token); 163*a2a55e51SPrabhakar Kushwaha DPRC_CMD_GET_RES_COUNT(cmd, type); 164*a2a55e51SPrabhakar Kushwaha 165*a2a55e51SPrabhakar Kushwaha /* send command to mc*/ 166*a2a55e51SPrabhakar Kushwaha err = mc_send_command(mc_io, &cmd); 167*a2a55e51SPrabhakar Kushwaha if (err) 168*a2a55e51SPrabhakar Kushwaha return err; 169*a2a55e51SPrabhakar Kushwaha 170*a2a55e51SPrabhakar Kushwaha /* retrieve response parameters */ 171*a2a55e51SPrabhakar Kushwaha DPRC_RSP_GET_RES_COUNT(cmd, *res_count); 172*a2a55e51SPrabhakar Kushwaha 173*a2a55e51SPrabhakar Kushwaha return 0; 174*a2a55e51SPrabhakar Kushwaha } 175*a2a55e51SPrabhakar Kushwaha 176*a2a55e51SPrabhakar Kushwaha int dprc_get_res_ids(struct fsl_mc_io *mc_io, 177*a2a55e51SPrabhakar Kushwaha uint16_t token, 178*a2a55e51SPrabhakar Kushwaha char *type, 179*a2a55e51SPrabhakar Kushwaha struct dprc_res_ids_range_desc *range_desc) 180*a2a55e51SPrabhakar Kushwaha { 181*a2a55e51SPrabhakar Kushwaha struct mc_command cmd = { 0 }; 182*a2a55e51SPrabhakar Kushwaha int err; 183*a2a55e51SPrabhakar Kushwaha 184*a2a55e51SPrabhakar Kushwaha /* prepare command */ 185*a2a55e51SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_IDS, 186*a2a55e51SPrabhakar Kushwaha MC_CMD_PRI_LOW, token); 187*a2a55e51SPrabhakar Kushwaha DPRC_CMD_GET_RES_IDS(cmd, range_desc, type); 188*a2a55e51SPrabhakar Kushwaha 189*a2a55e51SPrabhakar Kushwaha /* send command to mc*/ 190*a2a55e51SPrabhakar Kushwaha err = mc_send_command(mc_io, &cmd); 191*a2a55e51SPrabhakar Kushwaha if (err) 192*a2a55e51SPrabhakar Kushwaha return err; 193*a2a55e51SPrabhakar Kushwaha 194*a2a55e51SPrabhakar Kushwaha /* retrieve response parameters */ 195*a2a55e51SPrabhakar Kushwaha DPRC_RSP_GET_RES_IDS(cmd, range_desc); 196*a2a55e51SPrabhakar Kushwaha 197*a2a55e51SPrabhakar Kushwaha return 0; 198*a2a55e51SPrabhakar Kushwaha } 199*a2a55e51SPrabhakar Kushwaha 200*a2a55e51SPrabhakar Kushwaha int dprc_get_obj_region(struct fsl_mc_io *mc_io, 201*a2a55e51SPrabhakar Kushwaha uint16_t token, 202*a2a55e51SPrabhakar Kushwaha char *obj_type, 203*a2a55e51SPrabhakar Kushwaha int obj_id, 204*a2a55e51SPrabhakar Kushwaha uint8_t region_index, 205*a2a55e51SPrabhakar Kushwaha struct dprc_region_desc *region_desc) 206*a2a55e51SPrabhakar Kushwaha { 207*a2a55e51SPrabhakar Kushwaha struct mc_command cmd = { 0 }; 208*a2a55e51SPrabhakar Kushwaha int err; 209*a2a55e51SPrabhakar Kushwaha 210*a2a55e51SPrabhakar Kushwaha /* prepare command */ 211*a2a55e51SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG, 212*a2a55e51SPrabhakar Kushwaha MC_CMD_PRI_LOW, token); 213*a2a55e51SPrabhakar Kushwaha DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index); 214*a2a55e51SPrabhakar Kushwaha 215*a2a55e51SPrabhakar Kushwaha /* send command to mc*/ 216*a2a55e51SPrabhakar Kushwaha err = mc_send_command(mc_io, &cmd); 217*a2a55e51SPrabhakar Kushwaha if (err) 218*a2a55e51SPrabhakar Kushwaha return err; 219*a2a55e51SPrabhakar Kushwaha 220*a2a55e51SPrabhakar Kushwaha /* retrieve response parameters */ 221*a2a55e51SPrabhakar Kushwaha DPRC_RSP_GET_OBJ_REGION(cmd, region_desc); 222*a2a55e51SPrabhakar Kushwaha 223*a2a55e51SPrabhakar Kushwaha return 0; 224*a2a55e51SPrabhakar Kushwaha } 225*a2a55e51SPrabhakar Kushwaha 226*a2a55e51SPrabhakar Kushwaha int dprc_connect(struct fsl_mc_io *mc_io, 227*a2a55e51SPrabhakar Kushwaha uint16_t token, 228*a2a55e51SPrabhakar Kushwaha const struct dprc_endpoint *endpoint1, 229*a2a55e51SPrabhakar Kushwaha const struct dprc_endpoint *endpoint2) 230*a2a55e51SPrabhakar Kushwaha { 231*a2a55e51SPrabhakar Kushwaha struct mc_command cmd = { 0 }; 232*a2a55e51SPrabhakar Kushwaha 233*a2a55e51SPrabhakar Kushwaha /* prepare command */ 234*a2a55e51SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPRC_CMDID_CONNECT, 235*a2a55e51SPrabhakar Kushwaha MC_CMD_PRI_LOW, 236*a2a55e51SPrabhakar Kushwaha token); 237*a2a55e51SPrabhakar Kushwaha DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2); 238*a2a55e51SPrabhakar Kushwaha 239*a2a55e51SPrabhakar Kushwaha /* send command to mc*/ 240*a2a55e51SPrabhakar Kushwaha return mc_send_command(mc_io, &cmd); 241*a2a55e51SPrabhakar Kushwaha } 242*a2a55e51SPrabhakar Kushwaha 243*a2a55e51SPrabhakar Kushwaha int dprc_disconnect(struct fsl_mc_io *mc_io, 244*a2a55e51SPrabhakar Kushwaha uint16_t token, 245*a2a55e51SPrabhakar Kushwaha const struct dprc_endpoint *endpoint) 246*a2a55e51SPrabhakar Kushwaha { 247*a2a55e51SPrabhakar Kushwaha struct mc_command cmd = { 0 }; 248*a2a55e51SPrabhakar Kushwaha 249*a2a55e51SPrabhakar Kushwaha /* prepare command */ 250*a2a55e51SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPRC_CMDID_DISCONNECT, 251*a2a55e51SPrabhakar Kushwaha MC_CMD_PRI_LOW, 252*a2a55e51SPrabhakar Kushwaha token); 253*a2a55e51SPrabhakar Kushwaha DPRC_CMD_DISCONNECT(cmd, endpoint); 254*a2a55e51SPrabhakar Kushwaha 255*a2a55e51SPrabhakar Kushwaha /* send command to mc*/ 256*a2a55e51SPrabhakar Kushwaha return mc_send_command(mc_io, &cmd); 257*a2a55e51SPrabhakar Kushwaha } 258*a2a55e51SPrabhakar Kushwaha 259*a2a55e51SPrabhakar Kushwaha int dprc_get_connection(struct fsl_mc_io *mc_io, 260*a2a55e51SPrabhakar Kushwaha uint16_t token, 261*a2a55e51SPrabhakar Kushwaha const struct dprc_endpoint *endpoint1, 262*a2a55e51SPrabhakar Kushwaha struct dprc_endpoint *endpoint2, 263*a2a55e51SPrabhakar Kushwaha int *state) 264*a2a55e51SPrabhakar Kushwaha { 265*a2a55e51SPrabhakar Kushwaha struct mc_command cmd = { 0 }; 266*a2a55e51SPrabhakar Kushwaha int err; 267*a2a55e51SPrabhakar Kushwaha 268*a2a55e51SPrabhakar Kushwaha /* prepare command */ 269*a2a55e51SPrabhakar Kushwaha cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONNECTION, 270*a2a55e51SPrabhakar Kushwaha MC_CMD_PRI_LOW, 271*a2a55e51SPrabhakar Kushwaha token); 272*a2a55e51SPrabhakar Kushwaha DPRC_CMD_GET_CONNECTION(cmd, endpoint1); 273*a2a55e51SPrabhakar Kushwaha 274*a2a55e51SPrabhakar Kushwaha /* send command to mc*/ 275*a2a55e51SPrabhakar Kushwaha err = mc_send_command(mc_io, &cmd); 276*a2a55e51SPrabhakar Kushwaha if (err) 277*a2a55e51SPrabhakar Kushwaha return err; 278*a2a55e51SPrabhakar Kushwaha 279*a2a55e51SPrabhakar Kushwaha /* retrieve response parameters */ 280*a2a55e51SPrabhakar Kushwaha DPRC_RSP_GET_CONNECTION(cmd, endpoint2, *state); 281*a2a55e51SPrabhakar Kushwaha 282*a2a55e51SPrabhakar Kushwaha return 0; 283*a2a55e51SPrabhakar Kushwaha } 284