1 /* 2 * Copyright 2013-2016 Freescale Semiconductor Inc. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are met: 6 * * Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * * Redistributions in binary form must reproduce the above copyright 9 * notice, this list of conditions and the following disclaimer in the 10 * documentation and/or other materials provided with the distribution. 11 * * Neither the name of the above-listed copyright holders nor the 12 * names of any contributors may be used to endorse or promote products 13 * derived from this software without specific prior written permission. 14 * 15 * ALTERNATIVELY, this software may be distributed under the terms of the 16 * GNU General Public License ("GPL") as published by the Free Software 17 * Foundation, either version 2 of that License or (at your option) any 18 * later version. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE 24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 /* 34 * dprc-cmd.h 35 * 36 * defines dprc portal commands 37 * 38 */ 39 40 #ifndef _FSL_DPRC_CMD_H 41 #define _FSL_DPRC_CMD_H 42 43 /* Minimal supported DPRC Version */ 44 #define DPRC_MIN_VER_MAJOR 6 45 #define DPRC_MIN_VER_MINOR 0 46 47 /* Command versioning */ 48 #define DPRC_CMD_BASE_VERSION 1 49 #define DPRC_CMD_ID_OFFSET 4 50 51 #define DPRC_CMD(id) (((id) << DPRC_CMD_ID_OFFSET) | DPRC_CMD_BASE_VERSION) 52 53 /* Command IDs */ 54 #define DPRC_CMDID_CLOSE DPRC_CMD(0x800) 55 #define DPRC_CMDID_OPEN DPRC_CMD(0x805) 56 #define DPRC_CMDID_GET_API_VERSION DPRC_CMD(0xa05) 57 58 #define DPRC_CMDID_GET_ATTR DPRC_CMD(0x004) 59 60 #define DPRC_CMDID_SET_IRQ DPRC_CMD(0x010) 61 #define DPRC_CMDID_GET_IRQ DPRC_CMD(0x011) 62 #define DPRC_CMDID_SET_IRQ_ENABLE DPRC_CMD(0x012) 63 #define DPRC_CMDID_GET_IRQ_ENABLE DPRC_CMD(0x013) 64 #define DPRC_CMDID_SET_IRQ_MASK DPRC_CMD(0x014) 65 #define DPRC_CMDID_GET_IRQ_MASK DPRC_CMD(0x015) 66 #define DPRC_CMDID_GET_IRQ_STATUS DPRC_CMD(0x016) 67 #define DPRC_CMDID_CLEAR_IRQ_STATUS DPRC_CMD(0x017) 68 69 #define DPRC_CMDID_GET_CONT_ID DPRC_CMD(0x830) 70 #define DPRC_CMDID_GET_OBJ_COUNT DPRC_CMD(0x159) 71 #define DPRC_CMDID_GET_OBJ DPRC_CMD(0x15A) 72 #define DPRC_CMDID_GET_RES_COUNT DPRC_CMD(0x15B) 73 #define DPRC_CMDID_GET_OBJ_REG DPRC_CMD(0x15E) 74 #define DPRC_CMDID_SET_OBJ_IRQ DPRC_CMD(0x15F) 75 #define DPRC_CMDID_GET_OBJ_IRQ DPRC_CMD(0x160) 76 77 struct dprc_cmd_open { 78 __le32 container_id; 79 }; 80 81 struct dprc_cmd_create_container { 82 /* cmd word 0 */ 83 __le32 options; 84 __le16 icid; 85 __le16 pad0; 86 /* cmd word 1 */ 87 __le32 pad1; 88 __le32 portal_id; 89 /* cmd words 2-3 */ 90 u8 label[16]; 91 }; 92 93 struct dprc_rsp_create_container { 94 /* response word 0 */ 95 __le64 pad0; 96 /* response word 1 */ 97 __le32 child_container_id; 98 __le32 pad1; 99 /* response word 2 */ 100 __le64 child_portal_addr; 101 }; 102 103 struct dprc_cmd_destroy_container { 104 __le32 child_container_id; 105 }; 106 107 struct dprc_cmd_reset_container { 108 __le32 child_container_id; 109 }; 110 111 struct dprc_cmd_set_irq { 112 /* cmd word 0 */ 113 __le32 irq_val; 114 u8 irq_index; 115 u8 pad[3]; 116 /* cmd word 1 */ 117 __le64 irq_addr; 118 /* cmd word 2 */ 119 __le32 irq_num; 120 }; 121 122 struct dprc_cmd_get_irq { 123 __le32 pad; 124 u8 irq_index; 125 }; 126 127 struct dprc_rsp_get_irq { 128 /* response word 0 */ 129 __le32 irq_val; 130 __le32 pad; 131 /* response word 1 */ 132 __le64 irq_addr; 133 /* response word 2 */ 134 __le32 irq_num; 135 __le32 type; 136 }; 137 138 #define DPRC_ENABLE 0x1 139 140 struct dprc_cmd_set_irq_enable { 141 u8 enable; 142 u8 pad[3]; 143 u8 irq_index; 144 }; 145 146 struct dprc_cmd_get_irq_enable { 147 __le32 pad; 148 u8 irq_index; 149 }; 150 151 struct dprc_rsp_get_irq_enable { 152 u8 enabled; 153 }; 154 155 struct dprc_cmd_set_irq_mask { 156 __le32 mask; 157 u8 irq_index; 158 }; 159 160 struct dprc_cmd_get_irq_mask { 161 __le32 pad; 162 u8 irq_index; 163 }; 164 165 struct dprc_rsp_get_irq_mask { 166 __le32 mask; 167 }; 168 169 struct dprc_cmd_get_irq_status { 170 __le32 status; 171 u8 irq_index; 172 }; 173 174 struct dprc_rsp_get_irq_status { 175 __le32 status; 176 }; 177 178 struct dprc_cmd_clear_irq_status { 179 __le32 status; 180 u8 irq_index; 181 }; 182 183 struct dprc_rsp_get_attributes { 184 /* response word 0 */ 185 __le32 container_id; 186 __le16 icid; 187 __le16 pad; 188 /* response word 1 */ 189 __le32 options; 190 __le32 portal_id; 191 }; 192 193 struct dprc_cmd_set_res_quota { 194 /* cmd word 0 */ 195 __le32 child_container_id; 196 __le16 quota; 197 __le16 pad; 198 /* cmd words 1-2 */ 199 u8 type[16]; 200 }; 201 202 struct dprc_cmd_get_res_quota { 203 /* cmd word 0 */ 204 __le32 child_container_id; 205 __le32 pad; 206 /* cmd word 1-2 */ 207 u8 type[16]; 208 }; 209 210 struct dprc_rsp_get_res_quota { 211 __le32 pad; 212 __le16 quota; 213 }; 214 215 struct dprc_cmd_assign { 216 /* cmd word 0 */ 217 __le32 container_id; 218 __le32 options; 219 /* cmd word 1 */ 220 __le32 num; 221 __le32 id_base_align; 222 /* cmd word 2-3 */ 223 u8 type[16]; 224 }; 225 226 struct dprc_cmd_unassign { 227 /* cmd word 0 */ 228 __le32 child_container_id; 229 __le32 options; 230 /* cmd word 1 */ 231 __le32 num; 232 __le32 id_base_align; 233 /* cmd word 2-3 */ 234 u8 type[16]; 235 }; 236 237 struct dprc_rsp_get_pool_count { 238 __le32 pool_count; 239 }; 240 241 struct dprc_cmd_get_pool { 242 __le32 pool_index; 243 }; 244 245 struct dprc_rsp_get_pool { 246 /* response word 0 */ 247 __le64 pad; 248 /* response word 1-2 */ 249 u8 type[16]; 250 }; 251 252 struct dprc_rsp_get_obj_count { 253 __le32 pad; 254 __le32 obj_count; 255 }; 256 257 struct dprc_cmd_get_obj { 258 __le32 obj_index; 259 }; 260 261 struct dprc_rsp_get_obj { 262 /* response word 0 */ 263 __le32 pad0; 264 __le32 id; 265 /* response word 1 */ 266 __le16 vendor; 267 u8 irq_count; 268 u8 region_count; 269 __le32 state; 270 /* response word 2 */ 271 __le16 version_major; 272 __le16 version_minor; 273 __le16 flags; 274 __le16 pad1; 275 /* response word 3-4 */ 276 u8 type[16]; 277 /* response word 5-6 */ 278 u8 label[16]; 279 }; 280 281 struct dprc_cmd_get_obj_desc { 282 /* cmd word 0 */ 283 __le32 obj_id; 284 __le32 pad; 285 /* cmd word 1-2 */ 286 u8 type[16]; 287 }; 288 289 struct dprc_rsp_get_obj_desc { 290 /* response word 0 */ 291 __le32 pad0; 292 __le32 id; 293 /* response word 1 */ 294 __le16 vendor; 295 u8 irq_count; 296 u8 region_count; 297 __le32 state; 298 /* response word 2 */ 299 __le16 version_major; 300 __le16 version_minor; 301 __le16 flags; 302 __le16 pad1; 303 /* response word 3-4 */ 304 u8 type[16]; 305 /* response word 5-6 */ 306 u8 label[16]; 307 }; 308 309 struct dprc_cmd_get_res_count { 310 /* cmd word 0 */ 311 __le64 pad; 312 /* cmd word 1-2 */ 313 u8 type[16]; 314 }; 315 316 struct dprc_rsp_get_res_count { 317 __le32 res_count; 318 }; 319 320 struct dprc_cmd_get_res_ids { 321 /* cmd word 0 */ 322 u8 pad0[5]; 323 u8 iter_status; 324 __le16 pad1; 325 /* cmd word 1 */ 326 __le32 base_id; 327 __le32 last_id; 328 /* cmd word 2-3 */ 329 u8 type[16]; 330 }; 331 332 struct dprc_rsp_get_res_ids { 333 /* response word 0 */ 334 u8 pad0[5]; 335 u8 iter_status; 336 __le16 pad1; 337 /* response word 1 */ 338 __le32 base_id; 339 __le32 last_id; 340 }; 341 342 struct dprc_cmd_get_obj_region { 343 /* cmd word 0 */ 344 __le32 obj_id; 345 __le16 pad0; 346 u8 region_index; 347 u8 pad1; 348 /* cmd word 1-2 */ 349 __le64 pad2[2]; 350 /* cmd word 3-4 */ 351 u8 obj_type[16]; 352 }; 353 354 struct dprc_rsp_get_obj_region { 355 /* response word 0 */ 356 __le64 pad; 357 /* response word 1 */ 358 __le64 base_addr; 359 /* response word 2 */ 360 __le32 size; 361 }; 362 363 struct dprc_cmd_set_obj_label { 364 /* cmd word 0 */ 365 __le32 obj_id; 366 __le32 pad; 367 /* cmd word 1-2 */ 368 u8 label[16]; 369 /* cmd word 3-4 */ 370 u8 obj_type[16]; 371 }; 372 373 struct dprc_cmd_set_obj_irq { 374 /* cmd word 0 */ 375 __le32 irq_val; 376 u8 irq_index; 377 u8 pad[3]; 378 /* cmd word 1 */ 379 __le64 irq_addr; 380 /* cmd word 2 */ 381 __le32 irq_num; 382 __le32 obj_id; 383 /* cmd word 3-4 */ 384 u8 obj_type[16]; 385 }; 386 387 struct dprc_cmd_get_obj_irq { 388 /* cmd word 0 */ 389 __le32 obj_id; 390 u8 irq_index; 391 u8 pad[3]; 392 /* cmd word 1-2 */ 393 u8 obj_type[16]; 394 }; 395 396 struct dprc_rsp_get_obj_irq { 397 /* response word 0 */ 398 __le32 irq_val; 399 __le32 pad; 400 /* response word 1 */ 401 __le64 irq_addr; 402 /* response word 2 */ 403 __le32 irq_num; 404 __le32 type; 405 }; 406 407 struct dprc_cmd_connect { 408 /* cmd word 0 */ 409 __le32 ep1_id; 410 __le32 ep1_interface_id; 411 /* cmd word 1 */ 412 __le32 ep2_id; 413 __le32 ep2_interface_id; 414 /* cmd word 2-3 */ 415 u8 ep1_type[16]; 416 /* cmd word 4 */ 417 __le32 max_rate; 418 __le32 committed_rate; 419 /* cmd word 5-6 */ 420 u8 ep2_type[16]; 421 }; 422 423 struct dprc_cmd_disconnect { 424 /* cmd word 0 */ 425 __le32 id; 426 __le32 interface_id; 427 /* cmd word 1-2 */ 428 u8 type[16]; 429 }; 430 431 struct dprc_cmd_get_connection { 432 /* cmd word 0 */ 433 __le32 ep1_id; 434 __le32 ep1_interface_id; 435 /* cmd word 1-2 */ 436 u8 ep1_type[16]; 437 }; 438 439 struct dprc_rsp_get_connection { 440 /* response word 0-2 */ 441 __le64 pad[3]; 442 /* response word 3 */ 443 __le32 ep2_id; 444 __le32 ep2_interface_id; 445 /* response word 4-5 */ 446 u8 ep2_type[16]; 447 /* response word 6 */ 448 __le32 state; 449 }; 450 451 #endif /* _FSL_DPRC_CMD_H */ 452