1 /*
2  * mgr.h
3  *
4  * DSP-BIOS Bridge driver support functions for TI OMAP processors.
5  *
6  * This is the DSP API RM module interface.
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 MGR_
20 #define MGR_
21 
22 #include <dspbridge/mgrpriv.h>
23 
24 #define MAX_EVENTS 32
25 
26 /*
27  *  ======== mgr_wait_for_bridge_events ========
28  *  Purpose:
29  *      Block on any Bridge event(s)
30  *  Parameters:
31  *      anotifications  : array of pointers to notification objects.
32  *      count          : number of elements in above array
33  *      pu_index         : index of signaled event object
34  *      utimeout        : timeout interval in milliseocnds
35  *  Returns:
36  *      0         : Success.
37  *      -ETIME    : Wait timed out. *pu_index is undetermined.
38  *  Details:
39  */
40 
41 int mgr_wait_for_bridge_events(struct dsp_notification
42 				      **anotifications,
43 				      u32 count, u32 *pu_index,
44 				      u32 utimeout);
45 
46 /*
47  *  ======== mgr_create ========
48  *  Purpose:
49  *      Creates the Manager Object. This is done during the driver loading.
50  *      There is only one Manager Object in the DSP/BIOS Bridge.
51  *  Parameters:
52  *      mgr_obj:        Location to store created MGR Object handle.
53  *      dev_node_obj:       Device object as known to the system.
54  *  Returns:
55  *      0:        Success
56  *      -ENOMEM:    Failed to Create the Object
57  *      -EPERM:      General Failure
58  *  Requires:
59  *      MGR Initialized (refs > 0 )
60  *      mgr_obj != NULL.
61  *  Ensures:
62  *      0:        *mgr_obj is a valid MGR interface to the device.
63  *                      MGR Object stores the DCD Manager Handle.
64  *                      MGR Object stored in the Regsitry.
65  *      !0:       MGR Object not created
66  *  Details:
67  *      DCD Dll is loaded and MGR Object stores the handle of the DLL.
68  */
69 extern int mgr_create(struct mgr_object **mgr_obj,
70 			     struct cfg_devnode *dev_node_obj);
71 
72 /*
73  *  ======== mgr_destroy ========
74  *  Purpose:
75  *      Destroys the MGR object. Called upon driver unloading.
76  *  Parameters:
77  *      hmgr_obj:     Handle to Manager object .
78  *  Returns:
79  *      0:        Success.
80  *                      DCD Manager freed; MGR Object destroyed;
81  *                      MGR Object deleted from the Registry.
82  *      -EPERM:      Failed to destroy MGR Object
83  *  Requires:
84  *      MGR Initialized (refs > 0 )
85  *      hmgr_obj is a valid MGR handle .
86  *  Ensures:
87  *      0:        MGR Object destroyed and hmgr_obj is Invalid MGR
88  *                      Handle.
89  */
90 extern int mgr_destroy(struct mgr_object *hmgr_obj);
91 
92 /*
93  *  ======== mgr_enum_node_info ========
94  *  Purpose:
95  *      Enumerate and get configuration information about nodes configured
96  *      in the node database.
97  *  Parameters:
98  *      node_id:              The node index (base 0).
99  *      pndb_props:          Ptr to the dsp_ndbprops structure for output.
100  *      undb_props_size:      Size of the dsp_ndbprops structure.
101  *      pu_num_nodes:         Location where the number of nodes configured
102  *                          in the database will be returned.
103  *  Returns:
104  *      0:            Success.
105  *      -EINVAL:    Parameter node_id is > than the number of nodes.
106  *                          configutred in the system
107  *      -EIDRM:  During Enumeration there has been a change in
108  *                              the number of nodes configured or in the
109  *                              the properties of the enumerated nodes.
110  *      -EPERM:          Failed to querry the Node Data Base
111  *  Requires:
112  *      pNDBPROPS is not null
113  *      undb_props_size >= sizeof(dsp_ndbprops)
114  *      pu_num_nodes is not null
115  *      MGR Initialized (refs > 0 )
116  *  Ensures:
117  *      SUCCESS on successful retreival of data and *pu_num_nodes > 0 OR
118  *      DSP_FAILED  && *pu_num_nodes == 0.
119  *  Details:
120  */
121 extern int mgr_enum_node_info(u32 node_id,
122 				     struct dsp_ndbprops *pndb_props,
123 				     u32 undb_props_size,
124 				     u32 *pu_num_nodes);
125 
126 /*
127  *  ======== mgr_enum_processor_info ========
128  *  Purpose:
129  *      Enumerate and get configuration information about available DSP
130  *      processors
131  *  Parameters:
132  *      processor_id:         The processor index (zero-based).
133  *      processor_info:     Ptr to the dsp_processorinfo structure .
134  *      processor_info_size: Size of dsp_processorinfo structure.
135  *      pu_num_procs:         Location where the number of DSPs configured
136  *                          in the database will be returned
137  *  Returns:
138  *      0:            Success.
139  *      -EINVAL:    Parameter processor_id is > than the number of
140  *                          DSP Processors in the system.
141  *      -EPERM:          Failed to querry the Node Data Base
142  *  Requires:
143  *      processor_info is not null
144  *      pu_num_procs is not null
145  *      processor_info_size >= sizeof(dsp_processorinfo)
146  *      MGR Initialized (refs > 0 )
147  *  Ensures:
148  *      SUCCESS on successful retreival of data and *pu_num_procs > 0 OR
149  *      DSP_FAILED && *pu_num_procs == 0.
150  *  Details:
151  */
152 extern int mgr_enum_processor_info(u32 processor_id,
153 					  struct dsp_processorinfo
154 					  *processor_info,
155 					  u32 processor_info_size,
156 					  u8 *pu_num_procs);
157 /*
158  *  ======== mgr_exit ========
159  *  Purpose:
160  *      Decrement reference count, and free resources when reference count is
161  *      0.
162  *  Parameters:
163  *  Returns:
164  *  Requires:
165  *      MGR is initialized.
166  *  Ensures:
167  *      When reference count == 0, MGR's private resources are freed.
168  */
169 extern void mgr_exit(void);
170 
171 /*
172  *  ======== mgr_get_dcd_handle ========
173  *  Purpose:
174  *      Retrieves the MGR handle. Accessor Function
175  *  Parameters:
176  *      mgr_handle:     Handle to the Manager Object
177  *      dcd_handle:     Ptr to receive the DCD Handle.
178  *  Returns:
179  *      0:        Success
180  *      -EPERM:      Failure to get the Handle
181  *  Requires:
182  *      MGR is initialized.
183  *      dcd_handle != NULL
184  *  Ensures:
185  *      0 and *dcd_handle != NULL ||
186  *      -EPERM and *dcd_handle == NULL
187  */
188 extern int mgr_get_dcd_handle(struct mgr_object
189 				     *mgr_handle, u32 *dcd_handle);
190 
191 /*
192  *  ======== mgr_init ========
193  *  Purpose:
194  *      Initialize MGR's private state, keeping a reference count on each
195  *      call. Initializes the DCD.
196  *  Parameters:
197  *  Returns:
198  *      TRUE if initialized; FALSE if error occurred.
199  *  Requires:
200  *  Ensures:
201  *      TRUE: A requirement for the other public MGR functions.
202  */
203 extern bool mgr_init(void);
204 
205 #endif /* MGR_ */
206