Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
nodepriv.h
Go to the documentation of this file.
1 /*
2  * nodepriv.h
3  *
4  * DSP-BIOS Bridge driver support functions for TI OMAP processors.
5  *
6  * Private node header shared by NODE and DISP.
7  *
8  * Copyright (C) 2005-2006 Texas Instruments, Inc.
9  *
10  * This package is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License version 2 as
12  * published by the Free Software Foundation.
13  *
14  * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
15  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
16  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17  */
18 
19 #ifndef NODEPRIV_
20 #define NODEPRIV_
21 
22 #include <dspbridge/strmdefs.h>
23 #include <dspbridge/nodedefs.h>
24 #include <dspbridge/nldrdefs.h>
25 
26 /* DSP address of node environment structure */
27 typedef u32 nodeenv;
28 
29 /*
30  * Node create structures
31  */
32 
33 /* Message node */
34 struct node_msgargs {
35  u32 max_msgs; /* Max # of simultaneous messages for node */
36  u32 seg_id; /* Segment for allocating message buffers */
37  u32 notify_type; /* Notify type (SEM_post, SWI_post, etc.) */
38  u32 arg_length; /* Length in 32-bit words of arg data block */
39  u8 *pdata; /* Argument data for node */
40 };
41 
42 struct node_strmdef {
43  u32 buf_size; /* Size of buffers for SIO stream */
44  u32 num_bufs; /* max # of buffers in SIO stream at once */
45  u32 seg_id; /* Memory segment id to allocate buffers */
46  u32 timeout; /* Timeout for blocking SIO calls */
47  u32 buf_alignment; /* Buffer alignment */
48  char *sz_device; /* Device name for stream */
49 };
50 
51 /* Task node */
52 struct node_taskargs {
58  u32 dsp_heap_res_addr; /* DSP virtual heap address */
59  u32 dsp_heap_addr; /* DSP virtual heap address */
60  u32 heap_size; /* Heap size */
61  u32 gpp_heap_addr; /* GPP virtual heap address */
62  u32 profile_id; /* Profile ID */
65  u32 dais_arg; /* Address of iAlg object */
68 };
69 
70 /*
71  * ======== node_createargs ========
72  */
74  union {
77  } asa;
78 };
79 
80 /*
81  * ======== node_get_channel_id ========
82  * Purpose:
83  * Get the channel index reserved for a stream connection between the
84  * host and a node. This index is reserved when node_connect() is called
85  * to connect the node with the host. This index should be passed to
86  * the CHNL_Open function when the stream is actually opened.
87  * Parameters:
88  * hnode: Node object allocated from node_allocate().
89  * dir: Input (DSP_TONODE) or output (DSP_FROMNODE).
90  * index: Stream index.
91  * chan_id: Location to store channel index.
92  * Returns:
93  * 0: Success.
94  * -EFAULT: Invalid hnode.
95  * -EPERM: Not a task or DAIS socket node.
96  * -EINVAL: The node's stream corresponding to index and dir
97  * is not a stream to or from the host.
98  * Requires:
99  * Valid dir.
100  * chan_id != NULL.
101  * Ensures:
102  */
103 extern int node_get_channel_id(struct node_object *hnode,
104  u32 dir, u32 index, u32 *chan_id);
105 
106 /*
107  * ======== node_get_strm_mgr ========
108  * Purpose:
109  * Get the STRM manager for a node.
110  * Parameters:
111  * hnode: Node allocated with node_allocate().
112  * strm_man: Location to store STRM manager on output.
113  * Returns:
114  * 0: Success.
115  * -EFAULT: Invalid hnode.
116  * Requires:
117  * strm_man != NULL.
118  * Ensures:
119  */
120 extern int node_get_strm_mgr(struct node_object *hnode,
121  struct strm_mgr **strm_man);
122 
123 /*
124  * ======== node_get_timeout ========
125  * Purpose:
126  * Get the timeout value of a node.
127  * Parameters:
128  * hnode: Node allocated with node_allocate(), or DSP_HGPPNODE.
129  * Returns:
130  * Node's timeout value.
131  * Requires:
132  * Valid hnode.
133  * Ensures:
134  */
135 extern u32 node_get_timeout(struct node_object *hnode);
136 
137 /*
138  * ======== node_get_type ========
139  * Purpose:
140  * Get the type (device, message, task, or XDAIS socket) of a node.
141  * Parameters:
142  * hnode: Node allocated with node_allocate(), or DSP_HGPPNODE.
143  * Returns:
144  * Node type: NODE_DEVICE, NODE_TASK, NODE_XDAIS, or NODE_GPP.
145  * Requires:
146  * Valid hnode.
147  * Ensures:
148  */
149 extern enum node_type node_get_type(struct node_object *hnode);
150 
151 /*
152  * ======== get_node_info ========
153  * Purpose:
154  * Get node information without holding semaphore.
155  * Parameters:
156  * hnode: Node allocated with node_allocate(), or DSP_HGPPNODE.
157  * Returns:
158  * Node info: priority, device owner, no. of streams, execution state
159  * NDB properties.
160  * Requires:
161  * Valid hnode.
162  * Ensures:
163  */
164 extern void get_node_info(struct node_object *hnode,
165  struct dsp_nodeinfo *node_info);
166 
167 /*
168  * ======== node_get_load_type ========
169  * Purpose:
170  * Get the load type (dynamic, overlay, static) of a node.
171  * Parameters:
172  * hnode: Node allocated with node_allocate(), or DSP_HGPPNODE.
173  * Returns:
174  * Node type: NLDR_DYNAMICLOAD, NLDR_OVLYLOAD, NLDR_STATICLOAD
175  * Requires:
176  * Valid hnode.
177  * Ensures:
178  */
179 extern enum nldr_loadtype node_get_load_type(struct node_object *hnode);
180 
181 #endif /* NODEPRIV_ */