468 lines
11 KiB
C
468 lines
11 KiB
C
/*
|
|
* dspapi-ioctl.h
|
|
*
|
|
* DSP-BIOS Bridge driver support functions for TI OMAP processors.
|
|
*
|
|
* Contains structures and commands that are used for interaction
|
|
* between the DDSP API and Bridge driver.
|
|
*
|
|
* Copyright (C) 2008 Texas Instruments, Inc.
|
|
*
|
|
* This package is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
|
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
*/
|
|
|
|
#ifndef DSPAPIIOCTL_
|
|
#define DSPAPIIOCTL_
|
|
|
|
#include <dspbridge/cmm.h>
|
|
#include <dspbridge/strmdefs.h>
|
|
#include <dspbridge/dbdcd.h>
|
|
|
|
union trapped_args {
|
|
|
|
/* MGR Module */
|
|
struct {
|
|
u32 node_id;
|
|
struct dsp_ndbprops __user *ndb_props;
|
|
u32 ndb_props_size;
|
|
u32 __user *num_nodes;
|
|
} args_mgr_enumnode_info;
|
|
|
|
struct {
|
|
u32 processor_id;
|
|
struct dsp_processorinfo __user *processor_info;
|
|
u32 processor_info_size;
|
|
u32 __user *num_procs;
|
|
} args_mgr_enumproc_info;
|
|
|
|
struct {
|
|
struct dsp_uuid *uuid_obj;
|
|
enum dsp_dcdobjtype obj_type;
|
|
char *sz_path_name;
|
|
} args_mgr_registerobject;
|
|
|
|
struct {
|
|
struct dsp_uuid *uuid_obj;
|
|
enum dsp_dcdobjtype obj_type;
|
|
} args_mgr_unregisterobject;
|
|
|
|
struct {
|
|
struct dsp_notification __user *__user *anotifications;
|
|
u32 count;
|
|
u32 __user *index;
|
|
u32 timeout;
|
|
} args_mgr_wait;
|
|
|
|
/* PROC Module */
|
|
struct {
|
|
u32 processor_id;
|
|
struct dsp_processorattrin __user *attr_in;
|
|
void *__user *ph_processor;
|
|
} args_proc_attach;
|
|
|
|
struct {
|
|
void *processor;
|
|
u32 cmd;
|
|
struct dsp_cbdata __user *args;
|
|
} args_proc_ctrl;
|
|
|
|
struct {
|
|
void *processor;
|
|
} args_proc_detach;
|
|
|
|
struct {
|
|
void *processor;
|
|
void *__user *node_tab;
|
|
u32 node_tab_size;
|
|
u32 __user *num_nodes;
|
|
u32 __user *allocated;
|
|
} args_proc_enumnode_info;
|
|
|
|
struct {
|
|
void *processor;
|
|
u32 resource_type;
|
|
struct dsp_resourceinfo *resource_info;
|
|
u32 resource_info_size;
|
|
} args_proc_enumresources;
|
|
|
|
struct {
|
|
void *processor;
|
|
struct dsp_processorstate __user *proc_state_obj;
|
|
u32 state_info_size;
|
|
} args_proc_getstate;
|
|
|
|
struct {
|
|
void *processor;
|
|
u8 __user *buf;
|
|
u8 __user *size;
|
|
u32 max_size;
|
|
} args_proc_gettrace;
|
|
|
|
struct {
|
|
void *processor;
|
|
s32 argc_index;
|
|
char __user *__user *user_args;
|
|
char *__user *user_envp;
|
|
} args_proc_load;
|
|
|
|
struct {
|
|
void *processor;
|
|
u32 event_mask;
|
|
u32 notify_type;
|
|
struct dsp_notification __user *notification;
|
|
} args_proc_register_notify;
|
|
|
|
struct {
|
|
void *processor;
|
|
u32 size;
|
|
void *__user *rsv_addr;
|
|
} args_proc_rsvmem;
|
|
|
|
struct {
|
|
void *processor;
|
|
u32 size;
|
|
void *rsv_addr;
|
|
} args_proc_unrsvmem;
|
|
|
|
struct {
|
|
void *processor;
|
|
void *mpu_addr;
|
|
u32 size;
|
|
void *req_addr;
|
|
void *__user *map_addr;
|
|
u32 map_attr;
|
|
} args_proc_mapmem;
|
|
|
|
struct {
|
|
void *processor;
|
|
u32 size;
|
|
void *map_addr;
|
|
} args_proc_unmapmem;
|
|
|
|
struct {
|
|
void *processor;
|
|
void *mpu_addr;
|
|
u32 size;
|
|
u32 dir;
|
|
} args_proc_dma;
|
|
|
|
struct {
|
|
void *processor;
|
|
void *mpu_addr;
|
|
u32 size;
|
|
u32 flags;
|
|
} args_proc_flushmemory;
|
|
|
|
struct {
|
|
void *processor;
|
|
void *mpu_addr;
|
|
u32 size;
|
|
} args_proc_invalidatememory;
|
|
|
|
/* NODE Module */
|
|
struct {
|
|
void *processor;
|
|
struct dsp_uuid __user *node_id_ptr;
|
|
struct dsp_cbdata __user *args;
|
|
struct dsp_nodeattrin __user *attr_in;
|
|
void *__user *node;
|
|
} args_node_allocate;
|
|
|
|
struct {
|
|
void *node;
|
|
u32 size;
|
|
struct dsp_bufferattr __user *attr;
|
|
u8 *__user *buffer;
|
|
} args_node_allocmsgbuf;
|
|
|
|
struct {
|
|
void *node;
|
|
s32 prio;
|
|
} args_node_changepriority;
|
|
|
|
struct {
|
|
void *node;
|
|
u32 stream_id;
|
|
void *other_node;
|
|
u32 other_stream;
|
|
struct dsp_strmattr __user *attrs;
|
|
struct dsp_cbdata __user *conn_param;
|
|
} args_node_connect;
|
|
|
|
struct {
|
|
void *node;
|
|
} args_node_create;
|
|
|
|
struct {
|
|
void *node;
|
|
} args_node_delete;
|
|
|
|
struct {
|
|
void *node;
|
|
struct dsp_bufferattr __user *attr;
|
|
u8 *buffer;
|
|
} args_node_freemsgbuf;
|
|
|
|
struct {
|
|
void *node;
|
|
struct dsp_nodeattr __user *attr;
|
|
u32 attr_size;
|
|
} args_node_getattr;
|
|
|
|
struct {
|
|
void *node;
|
|
struct dsp_msg __user *message;
|
|
u32 timeout;
|
|
} args_node_getmessage;
|
|
|
|
struct {
|
|
void *node;
|
|
} args_node_pause;
|
|
|
|
struct {
|
|
void *node;
|
|
struct dsp_msg __user *message;
|
|
u32 timeout;
|
|
} args_node_putmessage;
|
|
|
|
struct {
|
|
void *node;
|
|
u32 event_mask;
|
|
u32 notify_type;
|
|
struct dsp_notification __user *notification;
|
|
} args_node_registernotify;
|
|
|
|
struct {
|
|
void *node;
|
|
} args_node_run;
|
|
|
|
struct {
|
|
void *node;
|
|
int __user *status;
|
|
} args_node_terminate;
|
|
|
|
struct {
|
|
void *processor;
|
|
struct dsp_uuid __user *node_id_ptr;
|
|
struct dsp_ndbprops __user *node_props;
|
|
} args_node_getuuidprops;
|
|
|
|
/* STRM module */
|
|
|
|
struct {
|
|
void *stream;
|
|
u32 size;
|
|
u8 *__user *ap_buffer;
|
|
u32 num_bufs;
|
|
} args_strm_allocatebuffer;
|
|
|
|
struct {
|
|
void *stream;
|
|
} args_strm_close;
|
|
|
|
struct {
|
|
void *stream;
|
|
u8 *__user *ap_buffer;
|
|
u32 num_bufs;
|
|
} args_strm_freebuffer;
|
|
|
|
struct {
|
|
void *stream;
|
|
void **event;
|
|
} args_strm_geteventhandle;
|
|
|
|
struct {
|
|
void *stream;
|
|
struct stream_info __user *stream_info;
|
|
u32 stream_info_size;
|
|
} args_strm_getinfo;
|
|
|
|
struct {
|
|
void *stream;
|
|
bool flush_flag;
|
|
} args_strm_idle;
|
|
|
|
struct {
|
|
void *stream;
|
|
u8 *buffer;
|
|
u32 bytes;
|
|
u32 buf_size;
|
|
u32 arg;
|
|
} args_strm_issue;
|
|
|
|
struct {
|
|
void *node;
|
|
u32 direction;
|
|
u32 index;
|
|
struct strm_attr __user *attr_in;
|
|
void *__user *stream;
|
|
} args_strm_open;
|
|
|
|
struct {
|
|
void *stream;
|
|
u8 *__user *buf_ptr;
|
|
u32 __user *bytes;
|
|
u32 __user *buf_size_ptr;
|
|
u32 __user *arg;
|
|
} args_strm_reclaim;
|
|
|
|
struct {
|
|
void *stream;
|
|
u32 event_mask;
|
|
u32 notify_type;
|
|
struct dsp_notification __user *notification;
|
|
} args_strm_registernotify;
|
|
|
|
struct {
|
|
void *__user *stream_tab;
|
|
u32 strm_num;
|
|
u32 __user *mask;
|
|
u32 timeout;
|
|
} args_strm_select;
|
|
|
|
/* CMM Module */
|
|
struct {
|
|
struct cmm_object *cmm_mgr;
|
|
u32 size;
|
|
struct cmm_attrs *attrs;
|
|
void **buf_va;
|
|
} args_cmm_allocbuf;
|
|
|
|
struct {
|
|
struct cmm_object *cmm_mgr;
|
|
void *buf_pa;
|
|
u32 seg_id;
|
|
} args_cmm_freebuf;
|
|
|
|
struct {
|
|
void *processor;
|
|
struct cmm_object *__user *cmm_mgr;
|
|
} args_cmm_gethandle;
|
|
|
|
struct {
|
|
struct cmm_object *cmm_mgr;
|
|
struct cmm_info __user *cmm_info_obj;
|
|
} args_cmm_getinfo;
|
|
|
|
/* UTIL module */
|
|
struct {
|
|
s32 util_argc;
|
|
char **argv;
|
|
} args_util_testdll;
|
|
};
|
|
|
|
/*
|
|
* Dspbridge Ioctl numbering scheme
|
|
*
|
|
* 7 0
|
|
* ---------------------------------
|
|
* | Module | Ioctl Number |
|
|
* ---------------------------------
|
|
* | x | x | x | 0 | 0 | 0 | 0 | 0 |
|
|
* ---------------------------------
|
|
*/
|
|
|
|
/* Ioctl driver identifier */
|
|
#define DB 0xDB
|
|
|
|
/*
|
|
* Following are used to distinguish between module ioctls, this is needed
|
|
* in case new ioctls are introduced.
|
|
*/
|
|
#define DB_MODULE_MASK 0xE0
|
|
#define DB_IOC_MASK 0x1F
|
|
|
|
/* Ioctl module masks */
|
|
#define DB_MGR 0x0
|
|
#define DB_PROC 0x20
|
|
#define DB_NODE 0x40
|
|
#define DB_STRM 0x60
|
|
#define DB_CMM 0x80
|
|
|
|
#define DB_MODULE_SHIFT 5
|
|
|
|
/* Used to calculate the ioctl per dspbridge module */
|
|
#define DB_IOC(module, num) \
|
|
(((module) & DB_MODULE_MASK) | ((num) & DB_IOC_MASK))
|
|
/* Used to get dspbridge ioctl module */
|
|
#define DB_GET_MODULE(cmd) ((cmd) & DB_MODULE_MASK)
|
|
/* Used to get dspbridge ioctl number */
|
|
#define DB_GET_IOC(cmd) ((cmd) & DB_IOC_MASK)
|
|
|
|
/* TODO: Remove deprecated and not implemented */
|
|
|
|
/* MGR Module */
|
|
#define MGR_ENUMNODE_INFO _IOWR(DB, DB_IOC(DB_MGR, 0), unsigned long)
|
|
#define MGR_ENUMPROC_INFO _IOWR(DB, DB_IOC(DB_MGR, 1), unsigned long)
|
|
#define MGR_REGISTEROBJECT _IOWR(DB, DB_IOC(DB_MGR, 2), unsigned long)
|
|
#define MGR_UNREGISTEROBJECT _IOWR(DB, DB_IOC(DB_MGR, 3), unsigned long)
|
|
#define MGR_WAIT _IOWR(DB, DB_IOC(DB_MGR, 4), unsigned long)
|
|
/* MGR_GET_PROC_RES Deprecated */
|
|
#define MGR_GET_PROC_RES _IOR(DB, DB_IOC(DB_MGR, 5), unsigned long)
|
|
|
|
/* PROC Module */
|
|
#define PROC_ATTACH _IOWR(DB, DB_IOC(DB_PROC, 0), unsigned long)
|
|
#define PROC_CTRL _IOR(DB, DB_IOC(DB_PROC, 1), unsigned long)
|
|
/* PROC_DETACH Deprecated */
|
|
#define PROC_DETACH _IOR(DB, DB_IOC(DB_PROC, 2), unsigned long)
|
|
#define PROC_ENUMNODE _IOWR(DB, DB_IOC(DB_PROC, 3), unsigned long)
|
|
#define PROC_ENUMRESOURCES _IOWR(DB, DB_IOC(DB_PROC, 4), unsigned long)
|
|
#define PROC_GET_STATE _IOWR(DB, DB_IOC(DB_PROC, 5), unsigned long)
|
|
#define PROC_GET_TRACE _IOWR(DB, DB_IOC(DB_PROC, 6), unsigned long)
|
|
#define PROC_LOAD _IOW(DB, DB_IOC(DB_PROC, 7), unsigned long)
|
|
#define PROC_REGISTERNOTIFY _IOWR(DB, DB_IOC(DB_PROC, 8), unsigned long)
|
|
#define PROC_START _IOW(DB, DB_IOC(DB_PROC, 9), unsigned long)
|
|
#define PROC_RSVMEM _IOWR(DB, DB_IOC(DB_PROC, 10), unsigned long)
|
|
#define PROC_UNRSVMEM _IOW(DB, DB_IOC(DB_PROC, 11), unsigned long)
|
|
#define PROC_MAPMEM _IOWR(DB, DB_IOC(DB_PROC, 12), unsigned long)
|
|
#define PROC_UNMAPMEM _IOR(DB, DB_IOC(DB_PROC, 13), unsigned long)
|
|
#define PROC_FLUSHMEMORY _IOW(DB, DB_IOC(DB_PROC, 14), unsigned long)
|
|
#define PROC_STOP _IOWR(DB, DB_IOC(DB_PROC, 15), unsigned long)
|
|
#define PROC_INVALIDATEMEMORY _IOW(DB, DB_IOC(DB_PROC, 16), unsigned long)
|
|
#define PROC_BEGINDMA _IOW(DB, DB_IOC(DB_PROC, 17), unsigned long)
|
|
#define PROC_ENDDMA _IOW(DB, DB_IOC(DB_PROC, 18), unsigned long)
|
|
|
|
/* NODE Module */
|
|
#define NODE_ALLOCATE _IOWR(DB, DB_IOC(DB_NODE, 0), unsigned long)
|
|
#define NODE_ALLOCMSGBUF _IOWR(DB, DB_IOC(DB_NODE, 1), unsigned long)
|
|
#define NODE_CHANGEPRIORITY _IOW(DB, DB_IOC(DB_NODE, 2), unsigned long)
|
|
#define NODE_CONNECT _IOW(DB, DB_IOC(DB_NODE, 3), unsigned long)
|
|
#define NODE_CREATE _IOW(DB, DB_IOC(DB_NODE, 4), unsigned long)
|
|
#define NODE_DELETE _IOW(DB, DB_IOC(DB_NODE, 5), unsigned long)
|
|
#define NODE_FREEMSGBUF _IOW(DB, DB_IOC(DB_NODE, 6), unsigned long)
|
|
#define NODE_GETATTR _IOWR(DB, DB_IOC(DB_NODE, 7), unsigned long)
|
|
#define NODE_GETMESSAGE _IOWR(DB, DB_IOC(DB_NODE, 8), unsigned long)
|
|
#define NODE_PAUSE _IOW(DB, DB_IOC(DB_NODE, 9), unsigned long)
|
|
#define NODE_PUTMESSAGE _IOW(DB, DB_IOC(DB_NODE, 10), unsigned long)
|
|
#define NODE_REGISTERNOTIFY _IOWR(DB, DB_IOC(DB_NODE, 11), unsigned long)
|
|
#define NODE_RUN _IOW(DB, DB_IOC(DB_NODE, 12), unsigned long)
|
|
#define NODE_TERMINATE _IOWR(DB, DB_IOC(DB_NODE, 13), unsigned long)
|
|
#define NODE_GETUUIDPROPS _IOWR(DB, DB_IOC(DB_NODE, 14), unsigned long)
|
|
|
|
/* STRM Module */
|
|
#define STRM_ALLOCATEBUFFER _IOWR(DB, DB_IOC(DB_STRM, 0), unsigned long)
|
|
#define STRM_CLOSE _IOW(DB, DB_IOC(DB_STRM, 1), unsigned long)
|
|
#define STRM_FREEBUFFER _IOWR(DB, DB_IOC(DB_STRM, 2), unsigned long)
|
|
#define STRM_GETEVENTHANDLE _IO(DB, DB_IOC(DB_STRM, 3)) /* Not Impl'd */
|
|
#define STRM_GETINFO _IOWR(DB, DB_IOC(DB_STRM, 4), unsigned long)
|
|
#define STRM_IDLE _IOW(DB, DB_IOC(DB_STRM, 5), unsigned long)
|
|
#define STRM_ISSUE _IOW(DB, DB_IOC(DB_STRM, 6), unsigned long)
|
|
#define STRM_OPEN _IOWR(DB, DB_IOC(DB_STRM, 7), unsigned long)
|
|
#define STRM_RECLAIM _IOWR(DB, DB_IOC(DB_STRM, 8), unsigned long)
|
|
#define STRM_REGISTERNOTIFY _IOWR(DB, DB_IOC(DB_STRM, 9), unsigned long)
|
|
#define STRM_SELECT _IOWR(DB, DB_IOC(DB_STRM, 10), unsigned long)
|
|
|
|
/* CMM Module */
|
|
#define CMM_ALLOCBUF _IO(DB, DB_IOC(DB_CMM, 0)) /* Not Impl'd */
|
|
#define CMM_FREEBUF _IO(DB, DB_IOC(DB_CMM, 1)) /* Not Impl'd */
|
|
#define CMM_GETHANDLE _IOR(DB, DB_IOC(DB_CMM, 2), unsigned long)
|
|
#define CMM_GETINFO _IOR(DB, DB_IOC(DB_CMM, 3), unsigned long)
|
|
|
|
#endif /* DSPAPIIOCTL_ */
|