source: rtems/cpukit/libdrvmgr/drvmgr_internal.h @ c130387

5
Last change on this file since c130387 was bb2f220, checked in by Daniel Hellstrom <daniel@…>, on 04/13/15 at 08:49:47

DRVMGR: renamed private drv_mgr and its struct name

  • Property mode set to 100644
File size: 2.1 KB
RevLine 
[e7fade3]1/* Private driver manager declarations
2 *
[65d1f35]3 * COPYRIGHT (c) 2009 Cobham Gaisler AB.
[e7fade3]4 *
5 * The license and distribution terms for this file may be
6 * found in the file LICENSE in this distribution or at
[0decc806]7 * http://www.rtems.org/license/LICENSE.
[e7fade3]8 */
9
10/*  Structure hold all information the driver manager needs to know of. Used
11 *  internally by Driver Manager routines.
12 */
[bb2f220]13struct drvmgr {
[e7fade3]14        int     level;
15        int     initializing_objs;
16
17        /* Device tree Lock */
18        rtems_id                lock;
19
20        /* The first device - The root device and it's driver */
21        struct drvmgr_drv       *root_drv;
22        struct drvmgr_dev       root_dev;
23
24        /*!< Linked list of all registered drivers */
25        struct drvmgr_list      drivers;
26
27        /* Buses that reached a certain initialization level.
28         * Lists by Level:
29         *  N=0         - Not intialized, just registered
30         *  N=1..MAX-1  - Reached init level N
31         *  N=MAX       - Successfully initialized bus
32         */
33        struct drvmgr_list      buses[DRVMGR_LEVEL_MAX+1];
34        /* Buses failed to initialize or has been removed by not freed */
35        struct drvmgr_list      buses_inactive;
36
37        /* Devices that reached a certain initialization level.
38         * Lists by Level:
39         *  N=0         - Not intialized, just registered
40         *  N=1..MAX-1  - Reached init level N
41         *  N=MAX       - Successfully initialized device
42         */
43        struct drvmgr_list      devices[DRVMGR_LEVEL_MAX+1];
44        /*!< Devices failed to initialize, removed, ignored, no driver */
45        struct drvmgr_list      devices_inactive;
46};
47
[bb2f220]48extern struct drvmgr drvmgr;
[e7fade3]49
50extern void _DRV_Manager_Lock(void);
51extern void _DRV_Manager_Unlock(void);
52extern int _DRV_Manager_Init_Lock(void);
53
54/* The best solution is to implement the locking with a RW lock, however there
55 * is no such API available. Care must be taken so that dead-lock isn't created
56 * for example in recursive functions.
57 */
58#if defined(DRVMGR_USE_LOCKS) && (DRVMGR_USE_LOCKS == 1)
59 #define DRVMGR_LOCK_INIT() _DRV_Manager_Init_Lock()
60 #define DRVMGR_LOCK_WRITE() _DRV_Manager_Lock()
61 #define DRVMGR_LOCK_READ() _DRV_Manager_Lock()
62 #define DRVMGR_UNLOCK() _DRV_Manager_Unlock()
63#else
64 /* no locking */
65 #define DRVMGR_LOCK_INIT()
66 #define DRVMGR_LOCK_WRITE()
67 #define DRVMGR_LOCK_READ()
68 #define DRVMGR_UNLOCK()
69#endif
Note: See TracBrowser for help on using the repository browser.