![]() |
|
|||
File indexing completed on 2025-05-11 08:24:16
0001 /* SPDX-License-Identifier: BSD-2-Clause */ 0002 0003 /* Private driver manager declarations 0004 * 0005 * COPYRIGHT (c) 2009 Cobham Gaisler AB. 0006 * 0007 * Redistribution and use in source and binary forms, with or without 0008 * modification, are permitted provided that the following conditions 0009 * are met: 0010 * 1. Redistributions of source code must retain the above copyright 0011 * notice, this list of conditions and the following disclaimer. 0012 * 2. Redistributions in binary form must reproduce the above copyright 0013 * notice, this list of conditions and the following disclaimer in the 0014 * documentation and/or other materials provided with the distribution. 0015 * 0016 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 0017 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 0018 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 0019 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 0020 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 0021 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 0022 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 0023 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 0024 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 0025 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 0026 * POSSIBILITY OF SUCH DAMAGE. 0027 */ 0028 0029 #include <rtems/score/apimutex.h> 0030 0031 /* Structure hold all information the driver manager needs to know of. Used 0032 * internally by Driver Manager routines. 0033 */ 0034 struct drvmgr { 0035 int level; 0036 int initializing_objs; 0037 0038 /* Device tree Lock */ 0039 API_Mutex_Control lock; 0040 0041 /* The first device - The root device and it's driver */ 0042 struct drvmgr_drv *root_drv; 0043 struct drvmgr_dev root_dev; 0044 0045 /*!< Linked list of all registered drivers */ 0046 struct drvmgr_list drivers; 0047 0048 /* Buses that reached a certain initialization level. 0049 * Lists by Level: 0050 * N=0 - Not intialized, just registered 0051 * N=1..MAX-1 - Reached init level N 0052 * N=MAX - Successfully initialized bus 0053 */ 0054 struct drvmgr_list buses[DRVMGR_LEVEL_MAX+1]; 0055 /* Buses failed to initialize or has been removed by not freed */ 0056 struct drvmgr_list buses_inactive; 0057 0058 /* Devices that reached a certain initialization level. 0059 * Lists by Level: 0060 * N=0 - Not intialized, just registered 0061 * N=1..MAX-1 - Reached init level N 0062 * N=MAX - Successfully initialized device 0063 */ 0064 struct drvmgr_list devices[DRVMGR_LEVEL_MAX+1]; 0065 /*!< Devices failed to initialize, removed, ignored, no driver */ 0066 struct drvmgr_list devices_inactive; 0067 }; 0068 0069 extern struct drvmgr drvmgr; 0070 0071 extern void _DRV_Manager_Lock(void); 0072 extern void _DRV_Manager_Unlock(void); 0073 0074 /* The best solution is to implement the locking with a RW lock, however there 0075 * is no such API available. Care must be taken so that dead-lock isn't created 0076 * for example in recursive functions. 0077 */ 0078 #if defined(DRVMGR_USE_LOCKS) && (DRVMGR_USE_LOCKS == 1) 0079 #define DRVMGR_LOCK_WRITE() _DRV_Manager_Lock() 0080 #define DRVMGR_LOCK_READ() _DRV_Manager_Lock() 0081 #define DRVMGR_UNLOCK() _DRV_Manager_Unlock() 0082 #else 0083 /* no locking */ 0084 #define DRVMGR_LOCK_WRITE() 0085 #define DRVMGR_LOCK_READ() 0086 #define DRVMGR_UNLOCK() 0087 #endif
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |