linux/drivers/staging/tidspbridge/include/dspbridge/dspapi-ioctl.h
<<
>>
Prefs
   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 *ndb_props;
  33                u32 ndb_props_size;
  34                u32 __user *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 *num_procs;
  42        } args_mgr_enumproc_info;
  43
  44        struct {
  45                struct dsp_uuid *uuid_obj;
  46                enum dsp_dcdobjtype obj_type;
  47                char *sz_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 *index;
  59                u32 timeout;
  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 *processor;
  71                u32 cmd;
  72                struct dsp_cbdata __user *args;
  73        } args_proc_ctrl;
  74
  75        struct {
  76                void *processor;
  77        } args_proc_detach;
  78
  79        struct {
  80                void *processor;
  81                void *__user *node_tab;
  82                u32 node_tab_size;
  83                u32 __user *num_nodes;
  84                u32 __user *allocated;
  85        } args_proc_enumnode_info;
  86
  87        struct {
  88                void *processor;
  89                u32 resource_type;
  90                struct dsp_resourceinfo *resource_info;
  91                u32 resource_info_size;
  92        } args_proc_enumresources;
  93
  94        struct {
  95                void *processor;
  96                struct dsp_processorstate __user *proc_state_obj;
  97                u32 state_info_size;
  98        } args_proc_getstate;
  99
 100        struct {
 101                void *processor;
 102                u8 __user *buf;
 103                u8 __user *size;
 104                u32 max_size;
 105        } args_proc_gettrace;
 106
 107        struct {
 108                void *processor;
 109                s32 argc_index;
 110                char __user *__user *user_args;
 111                char *__user *user_envp;
 112        } args_proc_load;
 113
 114        struct {
 115                void *processor;
 116                u32 event_mask;
 117                u32 notify_type;
 118                struct dsp_notification __user *notification;
 119        } args_proc_register_notify;
 120
 121        struct {
 122                void *processor;
 123                u32 size;
 124                void *__user *rsv_addr;
 125        } args_proc_rsvmem;
 126
 127        struct {
 128                void *processor;
 129                u32 size;
 130                void *rsv_addr;
 131        } args_proc_unrsvmem;
 132
 133        struct {
 134                void *processor;
 135                void *mpu_addr;
 136                u32 size;
 137                void *req_addr;
 138                void *__user *map_addr;
 139                u32 map_attr;
 140        } args_proc_mapmem;
 141
 142        struct {
 143                void *processor;
 144                u32 size;
 145                void *map_addr;
 146        } args_proc_unmapmem;
 147
 148        struct {
 149                void *processor;
 150                void *mpu_addr;
 151                u32 size;
 152                u32 dir;
 153        } args_proc_dma;
 154
 155        struct {
 156                void *processor;
 157                void *mpu_addr;
 158                u32 size;
 159                u32 flags;
 160        } args_proc_flushmemory;
 161
 162        struct {
 163                void *processor;
 164                void *mpu_addr;
 165                u32 size;
 166        } args_proc_invalidatememory;
 167
 168        /* NODE Module */
 169        struct {
 170                void *processor;
 171                struct dsp_uuid __user *node_id_ptr;
 172                struct dsp_cbdata __user *args;
 173                struct dsp_nodeattrin __user *attr_in;
 174                void *__user *node;
 175        } args_node_allocate;
 176
 177        struct {
 178                void *node;
 179                u32 size;
 180                struct dsp_bufferattr __user *attr;
 181                u8 *__user *buffer;
 182        } args_node_allocmsgbuf;
 183
 184        struct {
 185                void *node;
 186                s32 prio;
 187        } args_node_changepriority;
 188
 189        struct {
 190                void *node;
 191                u32 stream_id;
 192                void *other_node;
 193                u32 other_stream;
 194                struct dsp_strmattr __user *attrs;
 195                struct dsp_cbdata __user *conn_param;
 196        } args_node_connect;
 197
 198        struct {
 199                void *node;
 200        } args_node_create;
 201
 202        struct {
 203                void *node;
 204        } args_node_delete;
 205
 206        struct {
 207                void *node;
 208                struct dsp_bufferattr __user *attr;
 209                u8 *buffer;
 210        } args_node_freemsgbuf;
 211
 212        struct {
 213                void *node;
 214                struct dsp_nodeattr __user *attr;
 215                u32 attr_size;
 216        } args_node_getattr;
 217
 218        struct {
 219                void *node;
 220                struct dsp_msg __user *message;
 221                u32 timeout;
 222        } args_node_getmessage;
 223
 224        struct {
 225                void *node;
 226        } args_node_pause;
 227
 228        struct {
 229                void *node;
 230                struct dsp_msg __user *message;
 231                u32 timeout;
 232        } args_node_putmessage;
 233
 234        struct {
 235                void *node;
 236                u32 event_mask;
 237                u32 notify_type;
 238                struct dsp_notification __user *notification;
 239        } args_node_registernotify;
 240
 241        struct {
 242                void *node;
 243        } args_node_run;
 244
 245        struct {
 246                void *node;
 247                int __user *status;
 248        } args_node_terminate;
 249
 250        struct {
 251                void *processor;
 252                struct dsp_uuid __user *node_id_ptr;
 253                struct dsp_ndbprops __user *node_props;
 254        } args_node_getuuidprops;
 255
 256        /* STRM module */
 257
 258        struct {
 259                void *stream;
 260                u32 size;
 261                u8 *__user *ap_buffer;
 262                u32 num_bufs;
 263        } args_strm_allocatebuffer;
 264
 265        struct {
 266                void *stream;
 267        } args_strm_close;
 268
 269        struct {
 270                void *stream;
 271                u8 *__user *ap_buffer;
 272                u32 num_bufs;
 273        } args_strm_freebuffer;
 274
 275        struct {
 276                void *stream;
 277                void **event;
 278        } args_strm_geteventhandle;
 279
 280        struct {
 281                void *stream;
 282                struct stream_info __user *stream_info;
 283                u32 stream_info_size;
 284        } args_strm_getinfo;
 285
 286        struct {
 287                void *stream;
 288                bool flush_flag;
 289        } args_strm_idle;
 290
 291        struct {
 292                void *stream;
 293                u8 *buffer;
 294                u32 bytes;
 295                u32 buf_size;
 296                u32 arg;
 297        } args_strm_issue;
 298
 299        struct {
 300                void *node;
 301                u32 direction;
 302                u32 index;
 303                struct strm_attr __user *attr_in;
 304                void *__user *stream;
 305        } args_strm_open;
 306
 307        struct {
 308                void *stream;
 309                u8 *__user *buf_ptr;
 310                u32 __user *bytes;
 311                u32 __user *buf_size_ptr;
 312                u32 __user *arg;
 313        } args_strm_reclaim;
 314
 315        struct {
 316                void *stream;
 317                u32 event_mask;
 318                u32 notify_type;
 319                struct dsp_notification __user *notification;
 320        } args_strm_registernotify;
 321
 322        struct {
 323                void *__user *stream_tab;
 324                u32 strm_num;
 325                u32 __user *mask;
 326                u32 timeout;
 327        } args_strm_select;
 328
 329        /* CMM Module */
 330        struct {
 331                struct cmm_object *cmm_mgr;
 332                u32 size;
 333                struct cmm_attrs *attrs;
 334                void **buf_va;
 335        } args_cmm_allocbuf;
 336
 337        struct {
 338                struct cmm_object *cmm_mgr;
 339                void *buf_pa;
 340                u32 seg_id;
 341        } args_cmm_freebuf;
 342
 343        struct {
 344                void *processor;
 345                struct cmm_object *__user *cmm_mgr;
 346        } args_cmm_gethandle;
 347
 348        struct {
 349                struct cmm_object *cmm_mgr;
 350                struct cmm_info __user *cmm_info_obj;
 351        } args_cmm_getinfo;
 352
 353        /* UTIL module */
 354        struct {
 355                s32 util_argc;
 356                char **argv;
 357        } args_util_testdll;
 358};
 359
 360/*
 361 * Dspbridge Ioctl numbering scheme
 362 *
 363 *    7                           0
 364 *  ---------------------------------
 365 *  |  Module   |   Ioctl Number    |
 366 *  ---------------------------------
 367 *  | x | x | x | 0 | 0 | 0 | 0 | 0 |
 368 *  ---------------------------------
 369 */
 370
 371/* Ioctl driver identifier */
 372#define DB              0xDB
 373
 374/*
 375 * Following are used to distinguish between module ioctls, this is needed
 376 * in case new ioctls are introduced.
 377 */
 378#define DB_MODULE_MASK          0xE0
 379#define DB_IOC_MASK             0x1F
 380
 381/* Ioctl module masks */
 382#define DB_MGR          0x0
 383#define DB_PROC         0x20
 384#define DB_NODE         0x40
 385#define DB_STRM         0x60
 386#define DB_CMM          0x80
 387
 388#define DB_MODULE_SHIFT         5
 389
 390/* Used to calculate the ioctl per dspbridge module */
 391#define DB_IOC(module, num) \
 392                        (((module) & DB_MODULE_MASK) | ((num) & DB_IOC_MASK))
 393/* Used to get dspbridge ioctl module */
 394#define DB_GET_MODULE(cmd)      ((cmd) & DB_MODULE_MASK)
 395/* Used to get dspbridge ioctl number */
 396#define DB_GET_IOC(cmd)         ((cmd) & DB_IOC_MASK)
 397
 398/* TODO: Remove deprecated and not implemented */
 399
 400/* MGR Module */
 401#define MGR_ENUMNODE_INFO       _IOWR(DB, DB_IOC(DB_MGR, 0), unsigned long)
 402#define MGR_ENUMPROC_INFO       _IOWR(DB, DB_IOC(DB_MGR, 1), unsigned long)
 403#define MGR_REGISTEROBJECT      _IOWR(DB, DB_IOC(DB_MGR, 2), unsigned long)
 404#define MGR_UNREGISTEROBJECT    _IOWR(DB, DB_IOC(DB_MGR, 3), unsigned long)
 405#define MGR_WAIT                _IOWR(DB, DB_IOC(DB_MGR, 4), unsigned long)
 406/* MGR_GET_PROC_RES Deprecated */
 407#define MGR_GET_PROC_RES        _IOR(DB, DB_IOC(DB_MGR, 5), unsigned long)
 408
 409/* PROC Module */
 410#define PROC_ATTACH             _IOWR(DB, DB_IOC(DB_PROC, 0), unsigned long)
 411#define PROC_CTRL               _IOR(DB, DB_IOC(DB_PROC, 1), unsigned long)
 412/* PROC_DETACH Deprecated */
 413#define PROC_DETACH             _IOR(DB, DB_IOC(DB_PROC, 2), unsigned long)
 414#define PROC_ENUMNODE           _IOWR(DB, DB_IOC(DB_PROC, 3), unsigned long)
 415#define PROC_ENUMRESOURCES      _IOWR(DB, DB_IOC(DB_PROC, 4), unsigned long)
 416#define PROC_GET_STATE          _IOWR(DB, DB_IOC(DB_PROC, 5), unsigned long)
 417#define PROC_GET_TRACE          _IOWR(DB, DB_IOC(DB_PROC, 6), unsigned long)
 418#define PROC_LOAD               _IOW(DB, DB_IOC(DB_PROC, 7), unsigned long)
 419#define PROC_REGISTERNOTIFY     _IOWR(DB, DB_IOC(DB_PROC, 8), unsigned long)
 420#define PROC_START              _IOW(DB, DB_IOC(DB_PROC, 9), unsigned long)
 421#define PROC_RSVMEM             _IOWR(DB, DB_IOC(DB_PROC, 10), unsigned long)
 422#define PROC_UNRSVMEM           _IOW(DB, DB_IOC(DB_PROC, 11), unsigned long)
 423#define PROC_MAPMEM             _IOWR(DB, DB_IOC(DB_PROC, 12), unsigned long)
 424#define PROC_UNMAPMEM           _IOR(DB, DB_IOC(DB_PROC, 13), unsigned long)
 425#define PROC_FLUSHMEMORY        _IOW(DB, DB_IOC(DB_PROC, 14), unsigned long)
 426#define PROC_STOP               _IOWR(DB, DB_IOC(DB_PROC, 15), unsigned long)
 427#define PROC_INVALIDATEMEMORY   _IOW(DB, DB_IOC(DB_PROC, 16), unsigned long)
 428#define PROC_BEGINDMA           _IOW(DB, DB_IOC(DB_PROC, 17), unsigned long)
 429#define PROC_ENDDMA             _IOW(DB, DB_IOC(DB_PROC, 18), unsigned long)
 430
 431/* NODE Module */
 432#define NODE_ALLOCATE           _IOWR(DB, DB_IOC(DB_NODE, 0), unsigned long)
 433#define NODE_ALLOCMSGBUF        _IOWR(DB, DB_IOC(DB_NODE, 1), unsigned long)
 434#define NODE_CHANGEPRIORITY     _IOW(DB, DB_IOC(DB_NODE, 2), unsigned long)
 435#define NODE_CONNECT            _IOW(DB, DB_IOC(DB_NODE, 3), unsigned long)
 436#define NODE_CREATE             _IOW(DB, DB_IOC(DB_NODE, 4), unsigned long)
 437#define NODE_DELETE             _IOW(DB, DB_IOC(DB_NODE, 5), unsigned long)
 438#define NODE_FREEMSGBUF         _IOW(DB, DB_IOC(DB_NODE, 6), unsigned long)
 439#define NODE_GETATTR            _IOWR(DB, DB_IOC(DB_NODE, 7), unsigned long)
 440#define NODE_GETMESSAGE         _IOWR(DB, DB_IOC(DB_NODE, 8), unsigned long)
 441#define NODE_PAUSE              _IOW(DB, DB_IOC(DB_NODE, 9), unsigned long)
 442#define NODE_PUTMESSAGE         _IOW(DB, DB_IOC(DB_NODE, 10), unsigned long)
 443#define NODE_REGISTERNOTIFY     _IOWR(DB, DB_IOC(DB_NODE, 11), unsigned long)
 444#define NODE_RUN                _IOW(DB, DB_IOC(DB_NODE, 12), unsigned long)
 445#define NODE_TERMINATE          _IOWR(DB, DB_IOC(DB_NODE, 13), unsigned long)
 446#define NODE_GETUUIDPROPS       _IOWR(DB, DB_IOC(DB_NODE, 14), unsigned long)
 447
 448/* STRM Module */
 449#define STRM_ALLOCATEBUFFER     _IOWR(DB, DB_IOC(DB_STRM, 0), unsigned long)
 450#define STRM_CLOSE              _IOW(DB, DB_IOC(DB_STRM, 1), unsigned long)
 451#define STRM_FREEBUFFER         _IOWR(DB, DB_IOC(DB_STRM, 2), unsigned long)
 452#define STRM_GETEVENTHANDLE     _IO(DB, DB_IOC(DB_STRM, 3))     /* Not Impl'd */
 453#define STRM_GETINFO            _IOWR(DB, DB_IOC(DB_STRM, 4), unsigned long)
 454#define STRM_IDLE               _IOW(DB, DB_IOC(DB_STRM, 5), unsigned long)
 455#define STRM_ISSUE              _IOW(DB, DB_IOC(DB_STRM, 6), unsigned long)
 456#define STRM_OPEN               _IOWR(DB, DB_IOC(DB_STRM, 7), unsigned long)
 457#define STRM_RECLAIM            _IOWR(DB, DB_IOC(DB_STRM, 8), unsigned long)
 458#define STRM_REGISTERNOTIFY     _IOWR(DB, DB_IOC(DB_STRM, 9), unsigned long)
 459#define STRM_SELECT             _IOWR(DB, DB_IOC(DB_STRM, 10), unsigned long)
 460
 461/* CMM Module */
 462#define CMM_ALLOCBUF            _IO(DB, DB_IOC(DB_CMM, 0))      /* Not Impl'd */
 463#define CMM_FREEBUF             _IO(DB, DB_IOC(DB_CMM, 1))      /* Not Impl'd */
 464#define CMM_GETHANDLE           _IOR(DB, DB_IOC(DB_CMM, 2), unsigned long)
 465#define CMM_GETINFO             _IOR(DB, DB_IOC(DB_CMM, 3), unsigned long)
 466
 467#endif /* DSPAPIIOCTL_ */
 468