• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * disp.h
3  *
4  * DSP-BIOS Bridge driver support functions for TI OMAP processors.
5  *
6  * DSP/BIOS Bridge Node Dispatcher.
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 DISP_
20 #define DISP_
21 
22 #include <dspbridge/dbdefs.h>
23 #include <dspbridge/nodedefs.h>
24 #include <dspbridge/nodepriv.h>
25 
26 struct disp_object;
27 
28 /* Node Dispatcher attributes */
29 struct disp_attr {
30 	u32 chnl_offset;	/* Offset of channel ids reserved for RMS */
31 	/* Size of buffer for sending data to RMS */
32 	u32 chnl_buf_size;
33 	int proc_family;	/* eg, 5000 */
34 	int proc_type;		/* eg, 5510 */
35 	void *reserved1;	/* Reserved for future use. */
36 	u32 reserved2;		/* Reserved for future use. */
37 };
38 
39 
40 /*
41  *  ======== disp_create ========
42  *  Create a NODE Dispatcher object. This object handles the creation,
43  *  deletion, and execution of nodes on the DSP target, through communication
44  *  with the Resource Manager Server running on the target. Each NODE
45  *  Manager object should have exactly one NODE Dispatcher.
46  *
47  *  Parameters:
48  *      dispatch_obj:   Location to store node dispatcher object on output.
49  *      hdev_obj:     Device for this processor.
50  *      disp_attrs:     Node dispatcher attributes.
51  *  Returns:
52  *      0:                Success;
53  *      -ENOMEM:            Insufficient memory for requested resources.
54  *      -EPERM:              Unable to create dispatcher.
55  *  Requires:
56  *      disp_attrs != NULL.
57  *      hdev_obj != NULL.
58  *      dispatch_obj != NULL.
59  *  Ensures:
60  *      0:        IS_VALID(*dispatch_obj).
61  *      error:          *dispatch_obj == NULL.
62  */
63 extern int disp_create(struct disp_object **dispatch_obj,
64 			      struct dev_object *hdev_obj,
65 			      const struct disp_attr *disp_attrs);
66 
67 /*
68  *  ======== disp_delete ========
69  *  Delete the NODE Dispatcher.
70  *
71  *  Parameters:
72  *      disp_obj:  Node Dispatcher object.
73  *  Returns:
74  *  Requires:
75  *      Valid disp_obj.
76  *  Ensures:
77  *      disp_obj is invalid.
78  */
79 extern void disp_delete(struct disp_object *disp_obj);
80 
81 /*
82  *  ======== disp_node_change_priority ========
83  *  Change the priority of a node currently running on the target.
84  *
85  *  Parameters:
86  *      disp_obj:            Node Dispatcher object.
87  *      hnode:                  Node object representing a node currently
88  *                              allocated or running on the DSP.
89  *      ulFxnAddress:           Address of RMS function for changing priority.
90  *      node_env:                Address of node's environment structure.
91  *      prio:              New priority level to set node's priority to.
92  *  Returns:
93  *      0:                Success.
94  *      -ETIME:           A timeout occurred before the DSP responded.
95  *  Requires:
96  *      Valid disp_obj.
97  *      hnode != NULL.
98  *  Ensures:
99  */
100 extern int disp_node_change_priority(struct disp_object
101 					    *disp_obj,
102 					    struct node_object *hnode,
103 					    u32 rms_fxn,
104 					    nodeenv node_env, s32 prio);
105 
106 /*
107  *  ======== disp_node_create ========
108  *  Create a node on the DSP by remotely calling the node's create function.
109  *
110  *  Parameters:
111  *      disp_obj:    Node Dispatcher object.
112  *      hnode:          Node handle obtained from node_allocate().
113  *      ul_fxn_addr:      Address or RMS create node function.
114  *      ul_create_fxn:    Address of node's create function.
115  *      pargs:          Arguments to pass to RMS node create function.
116  *      node_env:       Location to store node environment pointer on
117  *                      output.
118  *  Returns:
119  *      0:        Success.
120  *      -ETIME:   A timeout occurred before the DSP responded.
121  *      -EPERM:      A failure occurred, unable to create node.
122  *  Requires:
123  *      Valid disp_obj.
124  *      pargs != NULL.
125  *      hnode != NULL.
126  *      node_env != NULL.
127  *      node_get_type(hnode) != NODE_DEVICE.
128  *  Ensures:
129  */
130 extern int disp_node_create(struct disp_object *disp_obj,
131 				   struct node_object *hnode,
132 				   u32 rms_fxn,
133 				   u32 ul_create_fxn,
134 				   const struct node_createargs
135 				   *pargs, nodeenv *node_env);
136 
137 /*
138  *  ======== disp_node_delete ========
139  *  Delete a node on the DSP by remotely calling the node's delete function.
140  *
141  *  Parameters:
142  *      disp_obj:    Node Dispatcher object.
143  *      hnode:          Node object representing a node currently
144  *                      loaded on the DSP.
145  *      ul_fxn_addr:      Address or RMS delete node function.
146  *      ul_delete_fxn:    Address of node's delete function.
147  *      node_env:        Address of node's environment structure.
148  *  Returns:
149  *      0:        Success.
150  *      -ETIME:   A timeout occurred before the DSP responded.
151  *  Requires:
152  *      Valid disp_obj.
153  *      hnode != NULL.
154  *  Ensures:
155  */
156 extern int disp_node_delete(struct disp_object *disp_obj,
157 				   struct node_object *hnode,
158 				   u32 rms_fxn,
159 				   u32 ul_delete_fxn, nodeenv node_env);
160 
161 /*
162  *  ======== disp_node_run ========
163  *  Start execution of a node's execute phase, or resume execution of a node
164  *  that has been suspended (via DISP_NodePause()) on the DSP.
165  *
166  *  Parameters:
167  *      disp_obj:    Node Dispatcher object.
168  *      hnode:          Node object representing a node to be executed
169  *                      on the DSP.
170  *      ul_fxn_addr:      Address or RMS node execute function.
171  *      ul_execute_fxn:   Address of node's execute function.
172  *      node_env:        Address of node's environment structure.
173  *  Returns:
174  *      0:        Success.
175  *      -ETIME:   A timeout occurred before the DSP responded.
176  *  Requires:
177  *      Valid disp_obj.
178  *      hnode != NULL.
179  *  Ensures:
180  */
181 extern int disp_node_run(struct disp_object *disp_obj,
182 				struct node_object *hnode,
183 				u32 rms_fxn,
184 				u32 ul_execute_fxn, nodeenv node_env);
185 
186 #endif /* DISP_ */
187