FreeCalypso > hg > ffs-editor
comparison src/nucleus/iof.c @ 0:92470e5d0b9e
src: partial import from FC Selenite
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Fri, 15 May 2020 01:28:16 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:92470e5d0b9e |
|---|---|
| 1 /*************************************************************************/ | |
| 2 /* */ | |
| 3 /* Copyright Mentor Graphics Corporation 2002 */ | |
| 4 /* All Rights Reserved. */ | |
| 5 /* */ | |
| 6 /* THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION WHICH IS */ | |
| 7 /* THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS LICENSORS AND IS */ | |
| 8 /* SUBJECT TO LICENSE TERMS. */ | |
| 9 /* */ | |
| 10 /*************************************************************************/ | |
| 11 | |
| 12 /*************************************************************************/ | |
| 13 /* */ | |
| 14 /* FILE NAME VERSION */ | |
| 15 /* */ | |
| 16 /* iof.c Nucleus PLUS 1.14 */ | |
| 17 /* */ | |
| 18 /* COMPONENT */ | |
| 19 /* */ | |
| 20 /* IO - Input/Output Driver Management */ | |
| 21 /* */ | |
| 22 /* DESCRIPTION */ | |
| 23 /* */ | |
| 24 /* This file contains routines to obtain facts about the I/O Driver */ | |
| 25 /* Management component. */ | |
| 26 /* */ | |
| 27 /* DATA STRUCTURES */ | |
| 28 /* */ | |
| 29 /* None */ | |
| 30 /* */ | |
| 31 /* FUNCTIONS */ | |
| 32 /* */ | |
| 33 /* IOF_Established_Drivers Return total number of I/O */ | |
| 34 /* drivers */ | |
| 35 /* IOF_Driver_Pointers Return list of I/O driver */ | |
| 36 /* pointers */ | |
| 37 /* */ | |
| 38 /* DEPENDENCIES */ | |
| 39 /* */ | |
| 40 /* cs_extr.h Common Service functions */ | |
| 41 /* tc_extr.h Thread Control functions */ | |
| 42 /* io_extr.h I/O driver functions */ | |
| 43 /* hi_extr.h History functions */ | |
| 44 /* */ | |
| 45 /* HISTORY */ | |
| 46 /* */ | |
| 47 /* DATE REMARKS */ | |
| 48 /* */ | |
| 49 /* 03-01-1994 Initial version of I/O driver */ | |
| 50 /* fact service file, version 1.1 */ | |
| 51 /* */ | |
| 52 /* 03-18-1994 Verified version 1.1 */ | |
| 53 /* 04-17-1996 updated to version 1.2 */ | |
| 54 /* 03-24-1998 Released version 1.3 */ | |
| 55 /* 03-26-1999 Released 1.11m (new release */ | |
| 56 /* numbering scheme) */ | |
| 57 /* 04-17-2002 Released version 1.13m */ | |
| 58 /* 11-07-2002 Released version 1.14 */ | |
| 59 /*************************************************************************/ | |
| 60 #define NU_SOURCE_FILE | |
| 61 | |
| 62 | |
| 63 #include "cs_extr.h" /* Common service functions */ | |
| 64 #include "tc_extr.h" /* Thread control functions */ | |
| 65 #include "io_extr.h" /* I/O driver functions */ | |
| 66 #include "hi_extr.h" /* History functions */ | |
| 67 | |
| 68 /* Define external inner-component global data references. */ | |
| 69 | |
| 70 extern CS_NODE *IOD_Created_Drivers_List; | |
| 71 extern UNSIGNED IOD_Total_Drivers; | |
| 72 extern TC_PROTECT IOD_List_Protect; | |
| 73 | |
| 74 | |
| 75 | |
| 76 /*************************************************************************/ | |
| 77 /* */ | |
| 78 /* FUNCTION */ | |
| 79 /* */ | |
| 80 /* IOF_Established_Drivers */ | |
| 81 /* */ | |
| 82 /* DESCRIPTION */ | |
| 83 /* */ | |
| 84 /* This function returns the current number of established I/O */ | |
| 85 /* drivers. I/O drivers previously deleted are no longer */ | |
| 86 /* considered established. */ | |
| 87 /* */ | |
| 88 /* CALLED BY */ | |
| 89 /* */ | |
| 90 /* Application */ | |
| 91 /* */ | |
| 92 /* CALLS */ | |
| 93 /* */ | |
| 94 /* [TCT_Check_Stack] Stack checking function */ | |
| 95 /* */ | |
| 96 /* INPUTS */ | |
| 97 /* */ | |
| 98 /* None */ | |
| 99 /* */ | |
| 100 /* OUTPUTS */ | |
| 101 /* */ | |
| 102 /* IOD_Total_Drivers Number of established I/O */ | |
| 103 /* drivers */ | |
| 104 /* */ | |
| 105 /* HISTORY */ | |
| 106 /* */ | |
| 107 /* DATE REMARKS */ | |
| 108 /* */ | |
| 109 /* 03-01-1993 Created initial version 1.0 */ | |
| 110 /* 04-19-1993 Verified version 1.0 */ | |
| 111 /* 03-01-1994 Changed function interface, */ | |
| 112 /* resulting in version 1.1 */ | |
| 113 /* */ | |
| 114 /* 03-18-1994 Verified version 1.1 */ | |
| 115 /* */ | |
| 116 /*************************************************************************/ | |
| 117 UNSIGNED IOF_Established_Drivers(VOID) | |
| 118 { | |
| 119 | |
| 120 | |
| 121 #ifdef NU_ENABLE_STACK_CHECK | |
| 122 | |
| 123 /* Call stack checking function to check for an overflow condition. */ | |
| 124 TCT_Check_Stack(); | |
| 125 | |
| 126 #endif | |
| 127 | |
| 128 /* Return the number of established I/O drivers. */ | |
| 129 return(IOD_Total_Drivers); | |
| 130 } | |
| 131 | |
| 132 | |
| 133 /*************************************************************************/ | |
| 134 /* */ | |
| 135 /* FUNCTION */ | |
| 136 /* */ | |
| 137 /* IOF_Driver_Pointers */ | |
| 138 /* */ | |
| 139 /* DESCRIPTION */ | |
| 140 /* */ | |
| 141 /* This function builds a list of driver pointers, starting at the */ | |
| 142 /* specified location. The number of driver pointers placed in */ | |
| 143 /* the list is equivalent to the total number of drivers or the */ | |
| 144 /* maximum number of pointers specified in the call. */ | |
| 145 /* */ | |
| 146 /* CALLED BY */ | |
| 147 /* */ | |
| 148 /* Application */ | |
| 149 /* */ | |
| 150 /* CALLS */ | |
| 151 /* */ | |
| 152 /* [TCT_Check_Stack] Stack checking function */ | |
| 153 /* TCT_Protect Protect created list */ | |
| 154 /* TCT_Unprotect Release protection */ | |
| 155 /* */ | |
| 156 /* INPUTS */ | |
| 157 /* */ | |
| 158 /* pointer_list Pointer to the list area */ | |
| 159 /* maximum_pointers Maximum number of pointers */ | |
| 160 /* */ | |
| 161 /* OUTPUTS */ | |
| 162 /* */ | |
| 163 /* pointers Number of I/O driver pointers*/ | |
| 164 /* placed in the list */ | |
| 165 /* */ | |
| 166 /* HISTORY */ | |
| 167 /* */ | |
| 168 /* DATE REMARKS */ | |
| 169 /* */ | |
| 170 /* 03-01-1993 Created initial version 1.0 */ | |
| 171 /* 04-19-1993 Verified version 1.0 */ | |
| 172 /* 08-09-1993 Corrected pointer retrieval */ | |
| 173 /* loop, resulting in version 1.0a */ | |
| 174 /* 08-09-1993 Verified version 1.0a */ | |
| 175 /* 03-01-1994 Changed function interface, */ | |
| 176 /* resulting in version 1.1 */ | |
| 177 /* */ | |
| 178 /* 03-18-1994 Verified version 1.1 */ | |
| 179 /* */ | |
| 180 /*************************************************************************/ | |
| 181 UNSIGNED IOF_Driver_Pointers(NU_DRIVER **pointer_list, | |
| 182 UNSIGNED maximum_pointers) | |
| 183 { | |
| 184 CS_NODE *node_ptr; /* Pointer to each NU_DRIVER */ | |
| 185 UNSIGNED pointers; /* Number of pointers in list*/ | |
| 186 NU_SUPERV_USER_VARIABLES | |
| 187 | |
| 188 /* Switch to supervisor mode */ | |
| 189 NU_SUPERVISOR_MODE(); | |
| 190 | |
| 191 #ifdef NU_ENABLE_STACK_CHECK | |
| 192 | |
| 193 /* Call stack checking function to check for an overflow condition. */ | |
| 194 TCT_Check_Stack(); | |
| 195 | |
| 196 #endif | |
| 197 | |
| 198 /* Initialize the number of pointers returned. */ | |
| 199 pointers = 0; | |
| 200 | |
| 201 /* Protect against access to the list of created I/O drivers. */ | |
| 202 TCT_Protect(&IOD_List_Protect); | |
| 203 | |
| 204 /* Loop until all driver pointers are in the list or until the maximum | |
| 205 list size is reached. */ | |
| 206 node_ptr = IOD_Created_Drivers_List; | |
| 207 while ((node_ptr) && (pointers < maximum_pointers)) | |
| 208 { | |
| 209 | |
| 210 /* Place the node into the destination list. */ | |
| 211 *pointer_list++ = (NU_DRIVER *) node_ptr; | |
| 212 | |
| 213 /* Increment the pointers variable. */ | |
| 214 pointers++; | |
| 215 | |
| 216 /* Position the node pointer to the next node. */ | |
| 217 node_ptr = node_ptr -> cs_next; | |
| 218 | |
| 219 /* Determine if the pointer is at the head of the list. */ | |
| 220 if (node_ptr == IOD_Created_Drivers_List) | |
| 221 | |
| 222 /* The list search is complete. */ | |
| 223 node_ptr = NU_NULL; | |
| 224 } | |
| 225 | |
| 226 /* Release protection against access to the list of created drivers. */ | |
| 227 TCT_Unprotect(); | |
| 228 | |
| 229 /* Return to user mode */ | |
| 230 NU_USER_MODE(); | |
| 231 | |
| 232 /* Return the number of pointers in the list. */ | |
| 233 return(pointers); | |
| 234 } | |
| 235 | |
| 236 | |
| 237 | |
| 238 | |
| 239 | |
| 240 |
