1/* 2 * dspapi-ioctl.h 3 * 4 * DSP-BIOS Bridge driver support functions for TI OMAP processors. 5 * 6 * Contains structures and commands that are used for interaction 7 * between the DDSP API and Bridge driver. 8 * 9 * Copyright (C) 2008 Texas Instruments, Inc. 10 * 11 * This package is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License version 2 as 13 * published by the Free Software Foundation. 14 * 15 * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 16 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 17 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 18 */ 19 20#ifndef DSPAPIIOCTL_ 21#define DSPAPIIOCTL_ 22 23#include <dspbridge/cmm.h> 24#include <dspbridge/strmdefs.h> 25#include <dspbridge/dbdcd.h> 26 27union trapped_args { 28 29 /* MGR Module */ 30 struct { 31 u32 node_id; 32 struct dsp_ndbprops __user *pndb_props; 33 u32 undb_props_size; 34 u32 __user *pu_num_nodes; 35 } args_mgr_enumnode_info; 36 37 struct { 38 u32 processor_id; 39 struct dsp_processorinfo __user *processor_info; 40 u32 processor_info_size; 41 u32 __user *pu_num_procs; 42 } args_mgr_enumproc_info; 43 44 struct { 45 struct dsp_uuid *uuid_obj; 46 enum dsp_dcdobjtype obj_type; 47 char *psz_path_name; 48 } args_mgr_registerobject; 49 50 struct { 51 struct dsp_uuid *uuid_obj; 52 enum dsp_dcdobjtype obj_type; 53 } args_mgr_unregisterobject; 54 55 struct { 56 struct dsp_notification __user *__user *anotifications; 57 u32 count; 58 u32 __user *pu_index; 59 u32 utimeout; 60 } args_mgr_wait; 61 62 /* PROC Module */ 63 struct { 64 u32 processor_id; 65 struct dsp_processorattrin __user *attr_in; 66 void *__user *ph_processor; 67 } args_proc_attach; 68 69 struct { 70 void *hprocessor; 71 u32 dw_cmd; 72 struct dsp_cbdata __user *pargs; 73 } args_proc_ctrl; 74 75 struct { 76 void *hprocessor; 77 } args_proc_detach; 78 79 struct { 80 void *hprocessor; 81 void *__user *node_tab; 82 u32 node_tab_size; 83 u32 __user *pu_num_nodes; 84 u32 __user *pu_allocated; 85 } args_proc_enumnode_info; 86 87 struct { 88 void *hprocessor; 89 u32 resource_type; 90 struct dsp_resourceinfo *resource_info; 91 u32 resource_info_size; 92 } args_proc_enumresources; 93 94 struct { 95 void *hprocessor; 96 struct dsp_processorstate __user *proc_state_obj; 97 u32 state_info_size; 98 } args_proc_getstate; 99 100 struct { 101 void *hprocessor; 102 u8 __user *pbuf; 103 u8 __user *psize; 104 u32 max_size; 105 } args_proc_gettrace; 106 107 struct { 108 void *hprocessor; 109 s32 argc_index; 110 char __user *__user *user_args; 111 char *__user *user_envp; 112 } args_proc_load; 113 114 struct { 115 void *hprocessor; 116 u32 event_mask; 117 u32 notify_type; 118 struct dsp_notification __user *hnotification; 119 } args_proc_register_notify; 120 121 struct { 122 void *hprocessor; 123 } args_proc_start; 124 125 struct { 126 void *hprocessor; 127 u32 ul_size; 128 void *__user *pp_rsv_addr; 129 } args_proc_rsvmem; 130 131 struct { 132 void *hprocessor; 133 u32 ul_size; 134 void *prsv_addr; 135 } args_proc_unrsvmem; 136 137 struct { 138 void *hprocessor; 139 void *pmpu_addr; 140 u32 ul_size; 141 void *req_addr; 142 void *__user *pp_map_addr; 143 u32 ul_map_attr; 144 } args_proc_mapmem; 145 146 struct { 147 void *hprocessor; 148 u32 ul_size; 149 void *map_addr; 150 } args_proc_unmapmem; 151 152 struct { 153 void *hprocessor; 154 void *pmpu_addr; 155 u32 ul_size; 156 u32 dir; 157 } args_proc_dma; 158 159 struct { 160 void *hprocessor; 161 void *pmpu_addr; 162 u32 ul_size; 163 u32 ul_flags; 164 } args_proc_flushmemory; 165 166 struct { 167 void *hprocessor; 168 } args_proc_stop; 169 170 struct { 171 void *hprocessor; 172 void *pmpu_addr; 173 u32 ul_size; 174 } args_proc_invalidatememory; 175 176 /* NODE Module */ 177 struct { 178 void *hprocessor; 179 struct dsp_uuid __user *node_id_ptr; 180 struct dsp_cbdata __user *pargs; 181 struct dsp_nodeattrin __user *attr_in; 182 void *__user *ph_node; 183 } args_node_allocate; 184 185 struct { 186 void *hnode; 187 u32 usize; 188 struct dsp_bufferattr __user *pattr; 189 u8 *__user *pbuffer; 190 } args_node_allocmsgbuf; 191 192 struct { 193 void *hnode; 194 s32 prio; 195 } args_node_changepriority; 196 197 struct { 198 void *hnode; 199 u32 stream_id; 200 void *other_node; 201 u32 other_stream; 202 struct dsp_strmattr __user *pattrs; 203 struct dsp_cbdata __user *conn_param; 204 } args_node_connect; 205 206 struct { 207 void *hnode; 208 } args_node_create; 209 210 struct { 211 void *hnode; 212 } args_node_delete; 213 214 struct { 215 void *hnode; 216 struct dsp_bufferattr __user *pattr; 217 u8 *pbuffer; 218 } args_node_freemsgbuf; 219 220 struct { 221 void *hnode; 222 struct dsp_nodeattr __user *pattr; 223 u32 attr_size; 224 } args_node_getattr; 225 226 struct { 227 void *hnode; 228 struct dsp_msg __user *message; 229 u32 utimeout; 230 } args_node_getmessage; 231 232 struct { 233 void *hnode; 234 } args_node_pause; 235 236 struct { 237 void *hnode; 238 struct dsp_msg __user *message; 239 u32 utimeout; 240 } args_node_putmessage; 241 242 struct { 243 void *hnode; 244 u32 event_mask; 245 u32 notify_type; 246 struct dsp_notification __user *hnotification; 247 } args_node_registernotify; 248 249 struct { 250 void *hnode; 251 } args_node_run; 252 253 struct { 254 void *hnode; 255 int __user *pstatus; 256 } args_node_terminate; 257 258 struct { 259 void *hprocessor; 260 struct dsp_uuid __user *node_id_ptr; 261 struct dsp_ndbprops __user *node_props; 262 } args_node_getuuidprops; 263 264 /* STRM module */ 265 266 struct { 267 void *hstream; 268 u32 usize; 269 u8 *__user *ap_buffer; 270 u32 num_bufs; 271 } args_strm_allocatebuffer; 272 273 struct { 274 void *hstream; 275 } args_strm_close; 276 277 struct { 278 void *hstream; 279 u8 *__user *ap_buffer; 280 u32 num_bufs; 281 } args_strm_freebuffer; 282 283 struct { 284 void *hstream; 285 void **ph_event; 286 } args_strm_geteventhandle; 287 288 struct { 289 void *hstream; 290 struct stream_info __user *stream_info; 291 u32 stream_info_size; 292 } args_strm_getinfo; 293 294 struct { 295 void *hstream; 296 bool flush_flag; 297 } args_strm_idle; 298 299 struct { 300 void *hstream; 301 u8 *pbuffer; 302 u32 dw_bytes; 303 u32 dw_buf_size; 304 u32 dw_arg; 305 } args_strm_issue; 306 307 struct { 308 void *hnode; 309 u32 direction; 310 u32 index; 311 struct strm_attr __user *attr_in; 312 void *__user *ph_stream; 313 } args_strm_open; 314 315 struct { 316 void *hstream; 317 u8 *__user *buf_ptr; 318 u32 __user *bytes; 319 u32 __user *buf_size_ptr; 320 u32 __user *pdw_arg; 321 } args_strm_reclaim; 322 323 struct { 324 void *hstream; 325 u32 event_mask; 326 u32 notify_type; 327 struct dsp_notification __user *hnotification; 328 } args_strm_registernotify; 329 330 struct { 331 void *__user *stream_tab; 332 u32 strm_num; 333 u32 __user *pmask; 334 u32 utimeout; 335 } args_strm_select; 336 337 /* CMM Module */ 338 struct { 339 struct cmm_object *hcmm_mgr; 340 u32 usize; 341 struct cmm_attrs *pattrs; 342 void **pp_buf_va; 343 } args_cmm_allocbuf; 344 345 struct { 346 struct cmm_object *hcmm_mgr; 347 void *buf_pa; 348 u32 ul_seg_id; 349 } args_cmm_freebuf; 350 351 struct { 352 void *hprocessor; 353 struct cmm_object *__user *ph_cmm_mgr; 354 } args_cmm_gethandle; 355 356 struct { 357 struct cmm_object *hcmm_mgr; 358 struct cmm_info __user *cmm_info_obj; 359 } args_cmm_getinfo; 360 361 /* UTIL module */ 362 struct { 363 s32 util_argc; 364 char **pp_argv; 365 } args_util_testdll; 366}; 367 368/* 369 * Dspbridge Ioctl numbering scheme 370 * 371 * 7 0 372 * --------------------------------- 373 * | Module | Ioctl Number | 374 * --------------------------------- 375 * | x | x | x | 0 | 0 | 0 | 0 | 0 | 376 * --------------------------------- 377 */ 378 379/* Ioctl driver identifier */ 380#define DB 0xDB 381 382/* 383 * Following are used to distinguish between module ioctls, this is needed 384 * in case new ioctls are introduced. 385 */ 386#define DB_MODULE_MASK 0xE0 387#define DB_IOC_MASK 0x1F 388 389/* Ioctl module masks */ 390#define DB_MGR 0x0 391#define DB_PROC 0x20 392#define DB_NODE 0x40 393#define DB_STRM 0x60 394#define DB_CMM 0x80 395 396#define DB_MODULE_SHIFT 5 397 398/* Used to calculate the ioctl per dspbridge module */ 399#define DB_IOC(module, num) \ 400 (((module) & DB_MODULE_MASK) | ((num) & DB_IOC_MASK)) 401/* Used to get dspbridge ioctl module */ 402#define DB_GET_MODULE(cmd) ((cmd) & DB_MODULE_MASK) 403/* Used to get dspbridge ioctl number */ 404#define DB_GET_IOC(cmd) ((cmd) & DB_IOC_MASK) 405 406/* TODO: Remove deprecated and not implemented */ 407 408/* MGR Module */ 409#define MGR_ENUMNODE_INFO _IOWR(DB, DB_IOC(DB_MGR, 0), unsigned long) 410#define MGR_ENUMPROC_INFO _IOWR(DB, DB_IOC(DB_MGR, 1), unsigned long) 411#define MGR_REGISTEROBJECT _IOWR(DB, DB_IOC(DB_MGR, 2), unsigned long) 412#define MGR_UNREGISTEROBJECT _IOWR(DB, DB_IOC(DB_MGR, 3), unsigned long) 413#define MGR_WAIT _IOWR(DB, DB_IOC(DB_MGR, 4), unsigned long) 414/* MGR_GET_PROC_RES Deprecated */ 415#define MGR_GET_PROC_RES _IOR(DB, DB_IOC(DB_MGR, 5), unsigned long) 416 417/* PROC Module */ 418#define PROC_ATTACH _IOWR(DB, DB_IOC(DB_PROC, 0), unsigned long) 419#define PROC_CTRL _IOR(DB, DB_IOC(DB_PROC, 1), unsigned long) 420/* PROC_DETACH Deprecated */ 421#define PROC_DETACH _IOR(DB, DB_IOC(DB_PROC, 2), unsigned long) 422#define PROC_ENUMNODE _IOWR(DB, DB_IOC(DB_PROC, 3), unsigned long) 423#define PROC_ENUMRESOURCES _IOWR(DB, DB_IOC(DB_PROC, 4), unsigned long) 424#define PROC_GET_STATE _IOWR(DB, DB_IOC(DB_PROC, 5), unsigned long) 425#define PROC_GET_TRACE _IOWR(DB, DB_IOC(DB_PROC, 6), unsigned long) 426#define PROC_LOAD _IOW(DB, DB_IOC(DB_PROC, 7), unsigned long) 427#define PROC_REGISTERNOTIFY _IOWR(DB, DB_IOC(DB_PROC, 8), unsigned long) 428#define PROC_START _IOW(DB, DB_IOC(DB_PROC, 9), unsigned long) 429#define PROC_RSVMEM _IOWR(DB, DB_IOC(DB_PROC, 10), unsigned long) 430#define PROC_UNRSVMEM _IOW(DB, DB_IOC(DB_PROC, 11), unsigned long) 431#define PROC_MAPMEM _IOWR(DB, DB_IOC(DB_PROC, 12), unsigned long) 432#define PROC_UNMAPMEM _IOR(DB, DB_IOC(DB_PROC, 13), unsigned long) 433#define PROC_FLUSHMEMORY _IOW(DB, DB_IOC(DB_PROC, 14), unsigned long) 434#define PROC_STOP _IOWR(DB, DB_IOC(DB_PROC, 15), unsigned long) 435#define PROC_INVALIDATEMEMORY _IOW(DB, DB_IOC(DB_PROC, 16), unsigned long) 436#define PROC_BEGINDMA _IOW(DB, DB_IOC(DB_PROC, 17), unsigned long) 437#define PROC_ENDDMA _IOW(DB, DB_IOC(DB_PROC, 18), unsigned long) 438 439/* NODE Module */ 440#define NODE_ALLOCATE _IOWR(DB, DB_IOC(DB_NODE, 0), unsigned long) 441#define NODE_ALLOCMSGBUF _IOWR(DB, DB_IOC(DB_NODE, 1), unsigned long) 442#define NODE_CHANGEPRIORITY _IOW(DB, DB_IOC(DB_NODE, 2), unsigned long) 443#define NODE_CONNECT _IOW(DB, DB_IOC(DB_NODE, 3), unsigned long) 444#define NODE_CREATE _IOW(DB, DB_IOC(DB_NODE, 4), unsigned long) 445#define NODE_DELETE _IOW(DB, DB_IOC(DB_NODE, 5), unsigned long) 446#define NODE_FREEMSGBUF _IOW(DB, DB_IOC(DB_NODE, 6), unsigned long) 447#define NODE_GETATTR _IOWR(DB, DB_IOC(DB_NODE, 7), unsigned long) 448#define NODE_GETMESSAGE _IOWR(DB, DB_IOC(DB_NODE, 8), unsigned long) 449#define NODE_PAUSE _IOW(DB, DB_IOC(DB_NODE, 9), unsigned long) 450#define NODE_PUTMESSAGE _IOW(DB, DB_IOC(DB_NODE, 10), unsigned long) 451#define NODE_REGISTERNOTIFY _IOWR(DB, DB_IOC(DB_NODE, 11), unsigned long) 452#define NODE_RUN _IOW(DB, DB_IOC(DB_NODE, 12), unsigned long) 453#define NODE_TERMINATE _IOWR(DB, DB_IOC(DB_NODE, 13), unsigned long) 454#define NODE_GETUUIDPROPS _IOWR(DB, DB_IOC(DB_NODE, 14), unsigned long) 455 456/* STRM Module */ 457#define STRM_ALLOCATEBUFFER _IOWR(DB, DB_IOC(DB_STRM, 0), unsigned long) 458#define STRM_CLOSE _IOW(DB, DB_IOC(DB_STRM, 1), unsigned long) 459#define STRM_FREEBUFFER _IOWR(DB, DB_IOC(DB_STRM, 2), unsigned long) 460#define STRM_GETEVENTHANDLE _IO(DB, DB_IOC(DB_STRM, 3)) /* Not Impl'd */ 461#define STRM_GETINFO _IOWR(DB, DB_IOC(DB_STRM, 4), unsigned long) 462#define STRM_IDLE _IOW(DB, DB_IOC(DB_STRM, 5), unsigned long) 463#define STRM_ISSUE _IOW(DB, DB_IOC(DB_STRM, 6), unsigned long) 464#define STRM_OPEN _IOWR(DB, DB_IOC(DB_STRM, 7), unsigned long) 465#define STRM_RECLAIM _IOWR(DB, DB_IOC(DB_STRM, 8), unsigned long) 466#define STRM_REGISTERNOTIFY _IOWR(DB, DB_IOC(DB_STRM, 9), unsigned long) 467#define STRM_SELECT _IOWR(DB, DB_IOC(DB_STRM, 10), unsigned long) 468 469/* CMM Module */ 470#define CMM_ALLOCBUF _IO(DB, DB_IOC(DB_CMM, 0)) /* Not Impl'd */ 471#define CMM_FREEBUF _IO(DB, DB_IOC(DB_CMM, 1)) /* Not Impl'd */ 472#define CMM_GETHANDLE _IOR(DB, DB_IOC(DB_CMM, 2), unsigned long) 473#define CMM_GETINFO _IOR(DB, DB_IOC(DB_CMM, 3), unsigned long) 474 475#endif /* DSPAPIIOCTL_ */ 476