]>
Commit | Line | Data |
---|---|---|
6280238c ORL |
1 | /* |
2 | * dev.h | |
3 | * | |
4 | * DSP-BIOS Bridge driver support functions for TI OMAP processors. | |
5 | * | |
6 | * Bridge Bridge driver device operations. | |
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 DEV_ | |
20 | #define DEV_ | |
21 | ||
22 | /* ----------------------------------- Module Dependent Headers */ | |
23 | #include <dspbridge/chnldefs.h> | |
24 | #include <dspbridge/cmm.h> | |
25 | #include <dspbridge/cod.h> | |
157bc26d | 26 | #include <dspbridge/dspdeh.h> |
6280238c | 27 | #include <dspbridge/nodedefs.h> |
157bc26d | 28 | #include <dspbridge/disp.h> |
6280238c | 29 | #include <dspbridge/dspdefs.h> |
677f2ded | 30 | #include <dspbridge/dmm.h> |
6280238c ORL |
31 | #include <dspbridge/host_os.h> |
32 | ||
33 | /* ----------------------------------- This */ | |
34 | #include <dspbridge/devdefs.h> | |
35 | ||
36 | /* | |
37 | * ======== dev_brd_write_fxn ======== | |
38 | * Purpose: | |
39 | * Exported function to be used as the COD write function. This function | |
aa09b091 | 40 | * is passed a handle to a DEV_hObject by ZL in arb, then calls the |
6280238c ORL |
41 | * device's bridge_brd_write() function. |
42 | * Parameters: | |
aa09b091 | 43 | * arb: Handle to a Device Object. |
e6890692 | 44 | * dev_ctxt: Handle to Bridge driver defined device info. |
b301c858 | 45 | * dsp_addr: Address on DSP board (Destination). |
daa89e6c | 46 | * host_buf: Pointer to host buffer (Source). |
6280238c | 47 | * ul_num_bytes: Number of bytes to transfer. |
5e2eae57 | 48 | * mem_type: Memory space on DSP to which to transfer. |
6280238c ORL |
49 | * Returns: |
50 | * Number of bytes written. Returns 0 if the DEV_hObject passed in via | |
aa09b091 | 51 | * arb is invalid. |
6280238c ORL |
52 | * Requires: |
53 | * DEV Initialized. | |
daa89e6c | 54 | * host_buf != NULL |
6280238c ORL |
55 | * Ensures: |
56 | */ | |
aa09b091 | 57 | extern u32 dev_brd_write_fxn(void *arb, |
5e2eae57 | 58 | u32 dsp_add, |
daa89e6c | 59 | void *host_buf, u32 ul_num_bytes, u32 mem_space); |
6280238c ORL |
60 | |
61 | /* | |
62 | * ======== dev_create_device ======== | |
63 | * Purpose: | |
64 | * Called by the operating system to load the Bridge Driver for a | |
65 | * 'Bridge device. | |
66 | * Parameters: | |
e436d07d | 67 | * device_obj: Ptr to location to receive the device object handle. |
6280238c ORL |
68 | * driver_file_name: Name of Bridge driver PE DLL file to load. If the |
69 | * absolute path is not provided, the file is loaded | |
70 | * through 'Bridge's module search path. | |
daa89e6c | 71 | * host_config: Host configuration information, to be passed down |
6280238c ORL |
72 | * to the Bridge driver when bridge_dev_create() is called. |
73 | * pDspConfig: DSP resources, to be passed down to the Bridge driver | |
74 | * when bridge_dev_create() is called. | |
75 | * dev_node_obj: Platform specific device node. | |
76 | * Returns: | |
77 | * 0: Module is loaded, device object has been created | |
78 | * -ENOMEM: Insufficient memory to create needed resources. | |
79 | * -EPERM: Unable to find Bridge driver entry point function. | |
80 | * -ESPIPE: Unable to load ZL DLL. | |
81 | * Requires: | |
82 | * DEV Initialized. | |
e436d07d | 83 | * device_obj != NULL. |
6280238c | 84 | * driver_file_name != NULL. |
daa89e6c | 85 | * host_config != NULL. |
6280238c ORL |
86 | * pDspConfig != NULL. |
87 | * Ensures: | |
e436d07d | 88 | * 0: *device_obj will contain handle to the new device object. |
6280238c | 89 | * Otherwise, does not create the device object, ensures the Bridge driver |
e436d07d | 90 | * module is unloaded, and sets *device_obj to NULL. |
6280238c | 91 | */ |
e6bf74f0 | 92 | extern int dev_create_device(struct dev_object |
e436d07d | 93 | **device_obj, |
9d7d0a52 | 94 | const char *driver_file_name, |
6280238c ORL |
95 | struct cfg_devnode *dev_node_obj); |
96 | ||
6280238c ORL |
97 | /* |
98 | * ======== dev_create2 ======== | |
99 | * Purpose: | |
100 | * After successful loading of the image from api_init_complete2 | |
101 | * (PROC Auto_Start) or proc_load this fxn is called. This creates | |
102 | * the Node Manager and updates the DEV Object. | |
103 | * Parameters: | |
104 | * hdev_obj: Handle to device object created with dev_create_device(). | |
105 | * Returns: | |
106 | * 0: Successful Creation of Node Manager | |
107 | * -EPERM: Some Error Occurred. | |
108 | * Requires: | |
109 | * DEV Initialized | |
110 | * Valid hdev_obj | |
111 | * Ensures: | |
085467b8 RS |
112 | * 0 and hdev_obj->node_mgr != NULL |
113 | * else hdev_obj->node_mgr == NULL | |
6280238c | 114 | */ |
9d7d0a52 | 115 | extern int dev_create2(struct dev_object *hdev_obj); |
6280238c ORL |
116 | |
117 | /* | |
118 | * ======== dev_destroy2 ======== | |
119 | * Purpose: | |
120 | * Destroys the Node manager for this device. | |
121 | * Parameters: | |
122 | * hdev_obj: Handle to device object created with dev_create_device(). | |
123 | * Returns: | |
124 | * 0: Successful Creation of Node Manager | |
125 | * -EPERM: Some Error Occurred. | |
126 | * Requires: | |
127 | * DEV Initialized | |
128 | * Valid hdev_obj | |
129 | * Ensures: | |
085467b8 | 130 | * 0 and hdev_obj->node_mgr == NULL |
6280238c ORL |
131 | * else -EPERM. |
132 | */ | |
9d7d0a52 | 133 | extern int dev_destroy2(struct dev_object *hdev_obj); |
6280238c ORL |
134 | |
135 | /* | |
136 | * ======== dev_destroy_device ======== | |
137 | * Purpose: | |
138 | * Destroys the channel manager for this device, if any, calls | |
139 | * bridge_dev_destroy(), and then attempts to unload the Bridge module. | |
140 | * Parameters: | |
141 | * hdev_obj: Handle to device object created with | |
142 | * dev_create_device(). | |
143 | * Returns: | |
144 | * 0: Success. | |
145 | * -EFAULT: Invalid hdev_obj. | |
146 | * -EPERM: The Bridge driver failed it's bridge_dev_destroy() function. | |
147 | * Requires: | |
148 | * DEV Initialized. | |
149 | * Ensures: | |
150 | */ | |
151 | extern int dev_destroy_device(struct dev_object | |
152 | *hdev_obj); | |
153 | ||
154 | /* | |
155 | * ======== dev_get_chnl_mgr ======== | |
156 | * Purpose: | |
157 | * Retrieve the handle to the channel manager created for this device. | |
158 | * Parameters: | |
159 | * hdev_obj: Handle to device object created with | |
160 | * dev_create_device(). | |
e436d07d | 161 | * *mgr: Ptr to location to store handle. |
6280238c ORL |
162 | * Returns: |
163 | * 0: Success. | |
164 | * -EFAULT: Invalid hdev_obj. | |
165 | * Requires: | |
e436d07d | 166 | * mgr != NULL. |
6280238c ORL |
167 | * DEV Initialized. |
168 | * Ensures: | |
e436d07d | 169 | * 0: *mgr contains a handle to a channel manager object, |
6280238c | 170 | * or NULL. |
e436d07d | 171 | * else: *mgr is NULL. |
6280238c ORL |
172 | */ |
173 | extern int dev_get_chnl_mgr(struct dev_object *hdev_obj, | |
e6bf74f0 | 174 | struct chnl_mgr **mgr); |
6280238c ORL |
175 | |
176 | /* | |
177 | * ======== dev_get_cmm_mgr ======== | |
178 | * Purpose: | |
179 | * Retrieve the handle to the shared memory manager created for this | |
180 | * device. | |
181 | * Parameters: | |
182 | * hdev_obj: Handle to device object created with | |
183 | * dev_create_device(). | |
e436d07d | 184 | * *mgr: Ptr to location to store handle. |
6280238c ORL |
185 | * Returns: |
186 | * 0: Success. | |
187 | * -EFAULT: Invalid hdev_obj. | |
188 | * Requires: | |
e436d07d | 189 | * mgr != NULL. |
6280238c ORL |
190 | * DEV Initialized. |
191 | * Ensures: | |
e436d07d | 192 | * 0: *mgr contains a handle to a channel manager object, |
6280238c | 193 | * or NULL. |
e436d07d | 194 | * else: *mgr is NULL. |
6280238c ORL |
195 | */ |
196 | extern int dev_get_cmm_mgr(struct dev_object *hdev_obj, | |
e6bf74f0 | 197 | struct cmm_object **mgr); |
6280238c | 198 | |
677f2ded FC |
199 | /* |
200 | * ======== dev_get_dmm_mgr ======== | |
201 | * Purpose: | |
202 | * Retrieve the handle to the dynamic memory manager created for this | |
203 | * device. | |
204 | * Parameters: | |
205 | * hdev_obj: Handle to device object created with | |
206 | * dev_create_device(). | |
207 | * *mgr: Ptr to location to store handle. | |
208 | * Returns: | |
209 | * 0: Success. | |
210 | * -EFAULT: Invalid hdev_obj. | |
211 | * Requires: | |
212 | * mgr != NULL. | |
213 | * DEV Initialized. | |
214 | * Ensures: | |
215 | * 0: *mgr contains a handle to a channel manager object, | |
216 | * or NULL. | |
217 | * else: *mgr is NULL. | |
218 | */ | |
219 | extern int dev_get_dmm_mgr(struct dev_object *hdev_obj, | |
220 | struct dmm_object **mgr); | |
221 | ||
6280238c ORL |
222 | /* |
223 | * ======== dev_get_cod_mgr ======== | |
224 | * Purpose: | |
225 | * Retrieve the COD manager create for this device. | |
226 | * Parameters: | |
227 | * hdev_obj: Handle to device object created with | |
228 | * dev_create_device(). | |
a5120278 | 229 | * *cod_mgr: Ptr to location to store handle. |
6280238c ORL |
230 | * Returns: |
231 | * 0: Success. | |
232 | * -EFAULT: Invalid hdev_obj. | |
233 | * Requires: | |
a5120278 | 234 | * cod_mgr != NULL. |
6280238c ORL |
235 | * DEV Initialized. |
236 | * Ensures: | |
a5120278 RS |
237 | * 0: *cod_mgr contains a handle to a COD manager object. |
238 | * else: *cod_mgr is NULL. | |
6280238c ORL |
239 | */ |
240 | extern int dev_get_cod_mgr(struct dev_object *hdev_obj, | |
e6bf74f0 | 241 | struct cod_manager **cod_mgr); |
6280238c ORL |
242 | |
243 | /* | |
244 | * ======== dev_get_deh_mgr ======== | |
245 | * Purpose: | |
246 | * Retrieve the DEH manager created for this device. | |
247 | * Parameters: | |
248 | * hdev_obj: Handle to device object created with dev_create_device(). | |
a5120278 | 249 | * *deh_manager: Ptr to location to store handle. |
6280238c ORL |
250 | * Returns: |
251 | * 0: Success. | |
252 | * -EFAULT: Invalid hdev_obj. | |
253 | * Requires: | |
a5120278 | 254 | * deh_manager != NULL. |
6280238c ORL |
255 | * DEH Initialized. |
256 | * Ensures: | |
a5120278 RS |
257 | * 0: *deh_manager contains a handle to a DEH manager object. |
258 | * else: *deh_manager is NULL. | |
6280238c ORL |
259 | */ |
260 | extern int dev_get_deh_mgr(struct dev_object *hdev_obj, | |
e6bf74f0 | 261 | struct deh_mgr **deh_manager); |
6280238c ORL |
262 | |
263 | /* | |
264 | * ======== dev_get_dev_node ======== | |
265 | * Purpose: | |
266 | * Retrieve the platform specific device ID for this device. | |
267 | * Parameters: | |
268 | * hdev_obj: Handle to device object created with | |
269 | * dev_create_device(). | |
e436d07d | 270 | * dev_nde: Ptr to location to get the device node handle. |
6280238c ORL |
271 | * Returns: |
272 | * 0: Returns a DEVNODE in *dev_node_obj. | |
273 | * -EFAULT: Invalid hdev_obj. | |
274 | * Requires: | |
e436d07d | 275 | * dev_nde != NULL. |
6280238c ORL |
276 | * DEV Initialized. |
277 | * Ensures: | |
e436d07d RS |
278 | * 0: *dev_nde contains a platform specific device ID; |
279 | * else: *dev_nde is NULL. | |
6280238c ORL |
280 | */ |
281 | extern int dev_get_dev_node(struct dev_object *hdev_obj, | |
e6bf74f0 | 282 | struct cfg_devnode **dev_nde); |
6280238c ORL |
283 | |
284 | /* | |
285 | * ======== dev_get_dev_type ======== | |
286 | * Purpose: | |
287 | * Retrieve the platform specific device ID for this device. | |
288 | * Parameters: | |
289 | * hdev_obj: Handle to device object created with | |
290 | * dev_create_device(). | |
e436d07d | 291 | * dev_nde: Ptr to location to get the device node handle. |
6280238c ORL |
292 | * Returns: |
293 | * 0: Success | |
294 | * -EFAULT: Invalid hdev_obj. | |
295 | * Requires: | |
e436d07d | 296 | * dev_nde != NULL. |
6280238c ORL |
297 | * DEV Initialized. |
298 | * Ensures: | |
e436d07d RS |
299 | * 0: *dev_nde contains a platform specific device ID; |
300 | * else: *dev_nde is NULL. | |
6280238c | 301 | */ |
e6890692 | 302 | extern int dev_get_dev_type(struct dev_object *device_obj, |
6280238c ORL |
303 | u8 *dev_type); |
304 | ||
305 | /* | |
306 | * ======== dev_get_first ======== | |
307 | * Purpose: | |
308 | * Retrieve the first Device Object handle from an internal linked list of | |
309 | * of DEV_OBJECTs maintained by DEV. | |
310 | * Parameters: | |
311 | * Returns: | |
312 | * NULL if there are no device objects stored; else | |
313 | * a valid DEV_HOBJECT. | |
314 | * Requires: | |
315 | * No calls to dev_create_device or dev_destroy_device (which my modify the | |
316 | * internal device object list) may occur between calls to dev_get_first | |
317 | * and dev_get_next. | |
318 | * Ensures: | |
319 | * The DEV_HOBJECT returned is valid. | |
320 | * A subsequent call to dev_get_next will return the next device object in | |
321 | * the list. | |
322 | */ | |
323 | extern struct dev_object *dev_get_first(void); | |
324 | ||
325 | /* | |
326 | * ======== dev_get_intf_fxns ======== | |
327 | * Purpose: | |
328 | * Retrieve the Bridge driver interface function structure for the | |
329 | * loaded Bridge driver. | |
330 | * Parameters: | |
331 | * hdev_obj: Handle to device object created with | |
332 | * dev_create_device(). | |
13b18c29 | 333 | * *if_fxns: Ptr to location to store fxn interface. |
6280238c ORL |
334 | * Returns: |
335 | * 0: Success. | |
336 | * -EFAULT: Invalid hdev_obj. | |
337 | * Requires: | |
13b18c29 | 338 | * if_fxns != NULL. |
6280238c ORL |
339 | * DEV Initialized. |
340 | * Ensures: | |
13b18c29 | 341 | * 0: *if_fxns contains a pointer to the Bridge |
6280238c | 342 | * driver interface; |
13b18c29 | 343 | * else: *if_fxns is NULL. |
6280238c ORL |
344 | */ |
345 | extern int dev_get_intf_fxns(struct dev_object *hdev_obj, | |
e6bf74f0 | 346 | struct bridge_drv_interface **if_fxns); |
6280238c ORL |
347 | |
348 | /* | |
349 | * ======== dev_get_io_mgr ======== | |
350 | * Purpose: | |
351 | * Retrieve the handle to the IO manager created for this device. | |
352 | * Parameters: | |
353 | * hdev_obj: Handle to device object created with | |
354 | * dev_create_device(). | |
e436d07d | 355 | * *mgr: Ptr to location to store handle. |
6280238c ORL |
356 | * Returns: |
357 | * 0: Success. | |
358 | * -EFAULT: Invalid hdev_obj. | |
359 | * Requires: | |
e436d07d | 360 | * mgr != NULL. |
6280238c ORL |
361 | * DEV Initialized. |
362 | * Ensures: | |
e436d07d RS |
363 | * 0: *mgr contains a handle to an IO manager object. |
364 | * else: *mgr is NULL. | |
6280238c ORL |
365 | */ |
366 | extern int dev_get_io_mgr(struct dev_object *hdev_obj, | |
e6bf74f0 | 367 | struct io_mgr **mgr); |
6280238c ORL |
368 | |
369 | /* | |
370 | * ======== dev_get_next ======== | |
371 | * Purpose: | |
372 | * Retrieve the next Device Object handle from an internal linked list of | |
373 | * of DEV_OBJECTs maintained by DEV, after having previously called | |
374 | * dev_get_first() and zero or more dev_get_next | |
375 | * Parameters: | |
376 | * hdev_obj: Handle to the device object returned from a previous | |
377 | * call to dev_get_first() or dev_get_next(). | |
378 | * Returns: | |
379 | * NULL if there are no further device objects on the list or hdev_obj | |
380 | * was invalid; | |
381 | * else the next valid DEV_HOBJECT in the list. | |
382 | * Requires: | |
383 | * No calls to dev_create_device or dev_destroy_device (which my modify the | |
384 | * internal device object list) may occur between calls to dev_get_first | |
385 | * and dev_get_next. | |
386 | * Ensures: | |
387 | * The DEV_HOBJECT returned is valid. | |
388 | * A subsequent call to dev_get_next will return the next device object in | |
389 | * the list. | |
390 | */ | |
391 | extern struct dev_object *dev_get_next(struct dev_object | |
392 | *hdev_obj); | |
393 | ||
394 | /* | |
395 | * ========= dev_get_msg_mgr ======== | |
396 | * Purpose: | |
397 | * Retrieve the msg_ctrl Manager Handle from the DevObject. | |
398 | * Parameters: | |
399 | * hdev_obj: Handle to the Dev Object | |
e436d07d | 400 | * msg_man: Location where msg_ctrl Manager handle will be returned. |
6280238c ORL |
401 | * Returns: |
402 | * Requires: | |
403 | * DEV Initialized. | |
404 | * Valid hdev_obj. | |
daa89e6c | 405 | * node_man != NULL. |
6280238c ORL |
406 | * Ensures: |
407 | */ | |
408 | extern void dev_get_msg_mgr(struct dev_object *hdev_obj, | |
e6bf74f0 | 409 | struct msg_mgr **msg_man); |
6280238c ORL |
410 | |
411 | /* | |
412 | * ========= dev_get_node_manager ======== | |
413 | * Purpose: | |
414 | * Retrieve the Node Manager Handle from the DevObject. It is an | |
415 | * accessor function | |
416 | * Parameters: | |
417 | * hdev_obj: Handle to the Dev Object | |
daa89e6c | 418 | * node_man: Location where Handle to the Node Manager will be |
6280238c ORL |
419 | * returned.. |
420 | * Returns: | |
421 | * 0: Success | |
422 | * -EFAULT: Invalid Dev Object handle. | |
423 | * Requires: | |
424 | * DEV Initialized. | |
daa89e6c | 425 | * node_man is not null |
6280238c | 426 | * Ensures: |
daa89e6c RS |
427 | * 0: *node_man contains a handle to a Node manager object. |
428 | * else: *node_man is NULL. | |
6280238c ORL |
429 | */ |
430 | extern int dev_get_node_manager(struct dev_object | |
431 | *hdev_obj, | |
e6bf74f0 | 432 | struct node_mgr **node_man); |
6280238c ORL |
433 | |
434 | /* | |
435 | * ======== dev_get_symbol ======== | |
436 | * Purpose: | |
437 | * Get the value of a symbol in the currently loaded program. | |
438 | * Parameters: | |
439 | * hdev_obj: Handle to device object created with | |
440 | * dev_create_device(). | |
383b8345 | 441 | * str_sym: Name of symbol to look up. |
6280238c ORL |
442 | * pul_value: Ptr to symbol value. |
443 | * Returns: | |
444 | * 0: Success. | |
445 | * -EFAULT: Invalid hdev_obj. | |
446 | * -ESPIPE: Symbols couldn not be found or have not been loaded onto | |
447 | * the board. | |
448 | * Requires: | |
383b8345 | 449 | * str_sym != NULL. |
6280238c ORL |
450 | * pul_value != NULL. |
451 | * DEV Initialized. | |
452 | * Ensures: | |
453 | * 0: *pul_value contains the symbol value; | |
454 | */ | |
455 | extern int dev_get_symbol(struct dev_object *hdev_obj, | |
e6bf74f0 | 456 | const char *str_sym, u32 * pul_value); |
6280238c ORL |
457 | |
458 | /* | |
459 | * ======== dev_get_bridge_context ======== | |
460 | * Purpose: | |
461 | * Retrieve the Bridge Context handle, as returned by the | |
462 | * bridge_dev_create fxn. | |
463 | * Parameters: | |
464 | * hdev_obj: Handle to device object created with dev_create_device() | |
465 | * *phbridge_context: Ptr to location to store context handle. | |
466 | * Returns: | |
467 | * 0: Success. | |
468 | * -EFAULT: Invalid hdev_obj. | |
469 | * Requires: | |
470 | * phbridge_context != NULL. | |
471 | * DEV Initialized. | |
472 | * Ensures: | |
473 | * 0: *phbridge_context contains context handle; | |
474 | * else: *phbridge_context is NULL; | |
475 | */ | |
476 | extern int dev_get_bridge_context(struct dev_object *hdev_obj, | |
e6bf74f0 | 477 | struct bridge_dev_context |
6280238c ORL |
478 | **phbridge_context); |
479 | ||
480 | /* | |
481 | * ======== dev_exit ======== | |
482 | * Purpose: | |
483 | * Decrement reference count, and free resources when reference count is | |
484 | * 0. | |
485 | * Parameters: | |
486 | * Returns: | |
487 | * Requires: | |
488 | * DEV is initialized. | |
489 | * Ensures: | |
490 | * When reference count == 0, DEV's private resources are freed. | |
491 | */ | |
492 | extern void dev_exit(void); | |
493 | ||
494 | /* | |
495 | * ======== dev_init ======== | |
496 | * Purpose: | |
497 | * Initialize DEV's private state, keeping a reference count on each call. | |
498 | * Parameters: | |
499 | * Returns: | |
25985edc | 500 | * TRUE if initialized; FALSE if error occurred. |
6280238c ORL |
501 | * Requires: |
502 | * Ensures: | |
503 | * TRUE: A requirement for the other public DEV functions. | |
504 | */ | |
505 | extern bool dev_init(void); | |
506 | ||
6280238c ORL |
507 | /* |
508 | * ======== dev_insert_proc_object ======== | |
509 | * Purpose: | |
510 | * Inserts the Processor Object into the List of PROC Objects | |
511 | * kept in the DEV Object | |
512 | * Parameters: | |
513 | * proc_obj: Handle to the Proc Object | |
514 | * hdev_obj Handle to the Dev Object | |
515 | * bAttachedNew Specifies if there are already processors attached | |
516 | * Returns: | |
517 | * 0: Successfully inserted into the list | |
518 | * Requires: | |
519 | * proc_obj is not NULL | |
520 | * hdev_obj is a valid handle to the DEV. | |
521 | * DEV Initialized. | |
522 | * List(of Proc object in Dev) Exists. | |
523 | * Ensures: | |
524 | * 0 & the PROC Object is inserted and the list is not empty | |
525 | * Details: | |
526 | * If the List of Proc Object is empty bAttachedNew is TRUE, it indicated | |
527 | * this is the first Processor attaching. | |
528 | * If it is False, there are already processors attached. | |
529 | */ | |
9d7d0a52 | 530 | extern int dev_insert_proc_object(struct dev_object |
6280238c | 531 | *hdev_obj, |
9d7d0a52 | 532 | u32 proc_obj, |
e6bf74f0 | 533 | bool *already_attached); |
6280238c ORL |
534 | |
535 | /* | |
536 | * ======== dev_remove_proc_object ======== | |
537 | * Purpose: | |
538 | * Search for and remove a Proc object from the given list maintained | |
539 | * by the DEV | |
540 | * Parameters: | |
541 | * p_proc_object: Ptr to ProcObject to insert. | |
542 | * dev_obj: Ptr to Dev Object where the list is. | |
aa09b091 | 543 | * already_attached: Ptr to return the bool |
6280238c ORL |
544 | * Returns: |
545 | * 0: If successful. | |
546 | * -EPERM Failure to Remove the PROC Object from the list | |
547 | * Requires: | |
548 | * DevObject is Valid | |
549 | * proc_obj != 0 | |
550 | * dev_obj->proc_list != NULL | |
551 | * !LST_IS_EMPTY(dev_obj->proc_list) | |
aa09b091 | 552 | * already_attached !=NULL |
6280238c ORL |
553 | * Ensures: |
554 | * Details: | |
555 | * List will be deleted when the DEV is destroyed. | |
556 | * | |
557 | */ | |
558 | extern int dev_remove_proc_object(struct dev_object | |
559 | *hdev_obj, u32 proc_obj); | |
560 | ||
561 | /* | |
562 | * ======== dev_notify_clients ======== | |
563 | * Purpose: | |
564 | * Notify all clients of this device of a change in device status. | |
565 | * Clients may include multiple users of BRD, as well as CHNL. | |
566 | * This function is asychronous, and may be called by a timer event | |
567 | * set up by a watchdog timer. | |
568 | * Parameters: | |
569 | * hdev_obj: Handle to device object created with dev_create_device(). | |
5e2eae57 | 570 | * ret: A status word, most likely a BRD_STATUS. |
6280238c ORL |
571 | * Returns: |
572 | * 0: All registered clients were asynchronously notified. | |
573 | * -EINVAL: Invalid hdev_obj. | |
574 | * Requires: | |
575 | * DEV Initialized. | |
576 | * Ensures: | |
577 | * 0: Notifications are queued by the operating system to be | |
578 | * delivered to clients. This function does not ensure that | |
579 | * the notifications will ever be delivered. | |
580 | */ | |
5e2eae57 | 581 | extern int dev_notify_clients(struct dev_object *hdev_obj, u32 ret); |
6280238c ORL |
582 | |
583 | /* | |
584 | * ======== dev_remove_device ======== | |
585 | * Purpose: | |
586 | * Destroys the Device Object created by dev_start_device. | |
587 | * Parameters: | |
588 | * dev_node_obj: Device node as it is know to OS. | |
589 | * Returns: | |
590 | * 0: If success; | |
591 | * <error code> Otherwise. | |
592 | * Requires: | |
593 | * Ensures: | |
594 | */ | |
595 | extern int dev_remove_device(struct cfg_devnode *dev_node_obj); | |
596 | ||
597 | /* | |
598 | * ======== dev_set_chnl_mgr ======== | |
599 | * Purpose: | |
600 | * Set the channel manager for this device. | |
601 | * Parameters: | |
602 | * hdev_obj: Handle to device object created with | |
603 | * dev_create_device(). | |
604 | * hmgr: Handle to a channel manager, or NULL. | |
605 | * Returns: | |
606 | * 0: Success. | |
607 | * -EFAULT: Invalid hdev_obj. | |
608 | * Requires: | |
609 | * DEV Initialized. | |
610 | * Ensures: | |
611 | */ | |
612 | extern int dev_set_chnl_mgr(struct dev_object *hdev_obj, | |
613 | struct chnl_mgr *hmgr); | |
614 | ||
615 | /* | |
616 | * ======== dev_set_msg_mgr ======== | |
617 | * Purpose: | |
618 | * Set the Message manager for this device. | |
619 | * Parameters: | |
620 | * hdev_obj: Handle to device object created with dev_create_device(). | |
621 | * hmgr: Handle to a message manager, or NULL. | |
622 | * Returns: | |
623 | * Requires: | |
624 | * DEV Initialized. | |
625 | * Ensures: | |
626 | */ | |
627 | extern void dev_set_msg_mgr(struct dev_object *hdev_obj, struct msg_mgr *hmgr); | |
628 | ||
629 | /* | |
630 | * ======== dev_start_device ======== | |
631 | * Purpose: | |
632 | * Initializes the new device with bridge environment. This involves | |
633 | * querying CM for allocated resources, querying the registry for | |
634 | * necessary dsp resources (requested in the INF file), and using this | |
635 | * information to create a bridge device object. | |
636 | * Parameters: | |
637 | * dev_node_obj: Device node as it is know to OS. | |
638 | * Returns: | |
639 | * 0: If success; | |
640 | * <error code> Otherwise. | |
641 | * Requires: | |
642 | * DEV initialized. | |
643 | * Ensures: | |
644 | */ | |
645 | extern int dev_start_device(struct cfg_devnode *dev_node_obj); | |
646 | ||
647 | #endif /* DEV_ */ |