1 /***************************************************************************
2  * Copyright (c) 2024 Microsoft Corporation
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the MIT License which is available at
6  * https://opensource.org/licenses/MIT.
7  *
8  * SPDX-License-Identifier: MIT
9  **************************************************************************/
10 
11 
12 /**************************************************************************/
13 /**************************************************************************/
14 /**                                                                       */
15 /** FileX Component                                                       */
16 /**                                                                       */
17 /**   System                                                              */
18 /**                                                                       */
19 /**************************************************************************/
20 /**************************************************************************/
21 
22 #define FX_SOURCE_CODE
23 
24 
25 /* Locate FileX control component data in this file.  */
26 
27 #define FX_SYSTEM_INIT
28 
29 
30 /* Include necessary system files.  */
31 
32 #include "fx_api.h"
33 #include "fx_system.h"
34 
35 
36 /**************************************************************************/
37 /*                                                                        */
38 /*  FUNCTION                                               RELEASE        */
39 /*                                                                        */
40 /*    _fx_system_initialize                               PORTABLE C      */
41 /*                                                           6.1          */
42 /*  AUTHOR                                                                */
43 /*                                                                        */
44 /*    William E. Lamie, Microsoft Corporation                             */
45 /*                                                                        */
46 /*  DESCRIPTION                                                           */
47 /*                                                                        */
48 /*    This function initializes the various control data structures for   */
49 /*    the FileX System component.                                         */
50 /*                                                                        */
51 /*  INPUT                                                                 */
52 /*                                                                        */
53 /*    None                                                                */
54 /*                                                                        */
55 /*  OUTPUT                                                                */
56 /*                                                                        */
57 /*    None                                                                */
58 /*                                                                        */
59 /*  CALLS                                                                 */
60 /*                                                                        */
61 /*    tx_timer_create                       Create system timer           */
62 /*                                                                        */
63 /*  CALLED BY                                                             */
64 /*                                                                        */
65 /*    Application Initialization                                          */
66 /*                                                                        */
67 /*  RELEASE HISTORY                                                       */
68 /*                                                                        */
69 /*    DATE              NAME                      DESCRIPTION             */
70 /*                                                                        */
71 /*  05-19-2020     William E. Lamie         Initial Version 6.0           */
72 /*  09-30-2020     William E. Lamie         Modified comment(s), and      */
73 /*                                            added conditional to        */
74 /*                                            disable build options,      */
75 /*                                            resulting in version 6.1    */
76 /*                                                                        */
77 /**************************************************************************/
_fx_system_initialize(VOID)78 VOID  _fx_system_initialize(VOID)
79 {
80 
81     /* If trace is enabled, insert this event into the trace buffer.  */
82     FX_TRACE_IN_LINE_INSERT(FX_TRACE_SYSTEM_INITIALIZE, 0, 0, 0, 0, FX_TRACE_INTERNAL_EVENTS, 0, 0)
83 
84     /* Initialize the head pointer of the opened media list and the
85        number of opened media.  */
86     _fx_system_media_opened_ptr =       FX_NULL;
87     _fx_system_media_opened_count =     0;
88 
89     /* Initialize the time and date fields with their default values.  */
90     _fx_system_date =   FX_INITIAL_DATE;
91     _fx_system_time =   FX_INITIAL_TIME;
92 
93     /* Initialize the sector and FAT cache sizes.  */
94     _fx_system_media_max_sector_cache =  FX_MAX_SECTOR_CACHE;
95     _fx_system_media_max_fat_cache =     FX_MAX_FAT_CACHE;
96 
97     /* Create the FileX system timer.  This is responsible for updating
98        the specified date and time at the rate specified by
99        FX_UPDATE_RATE_IN_TICKS.  Note that the timer is not necessary for
100        regular FileX operation - it is only needed for accurate system
101        date and time stamps on files.  */
102 
103 #ifndef FX_NO_TIMER
104     tx_timer_create(&_fx_system_timer, "FileX System Timer", _fx_system_timer_entry, FX_TIMER_ID,
105                     FX_UPDATE_RATE_IN_TICKS, FX_UPDATE_RATE_IN_TICKS, TX_AUTO_ACTIVATE);
106 #endif
107 
108 #ifndef FX_DISABLE_BUILD_OPTIONS
109     /* Setup the build options variables.  */
110 
111     /* Setup the first build options variable.  */
112     if (FX_MAX_LONG_NAME_LEN > 0xFF)
113     {
114         _fx_system_build_options_1 =  _fx_system_build_options_1 | (((ULONG)0xFF) << 24);
115     }
116     else
117     {
118         _fx_system_build_options_1 =  _fx_system_build_options_1 | (((ULONG)(FX_MAX_LONG_NAME_LEN & 0xFF)) << 24);
119     }
120     if (FX_MAX_LAST_NAME_LEN > 0xFF)
121     {
122         _fx_system_build_options_1 =  _fx_system_build_options_1 | (((ULONG)0xFF) << 16);
123     }
124     else
125     {
126         _fx_system_build_options_1 =  _fx_system_build_options_1 | (((ULONG)(FX_MAX_LAST_NAME_LEN & 0xFF)) << 24);
127     }
128 
129 #ifdef FX_NO_TIMER
130     _fx_system_build_options_1 = _fx_system_build_options_1 | (((ULONG)1) << 10);
131 #endif
132 #ifdef FX_SINGLE_THREAD
133     _fx_system_build_options_1 = _fx_system_build_options_1 | (((ULONG)1) << 9);
134 #endif
135 #ifdef FX_DONT_UPDATE_OPEN_FILES
136     _fx_system_build_options_1 = _fx_system_build_options_1 | (((ULONG)1) << 8);
137 #endif
138 #ifdef FX_MEDIA_DISABLE_SEARCH_CACHE
139     _fx_system_build_options_1 = _fx_system_build_options_1 | (((ULONG)1) << 7);
140 #endif
141 #ifdef FX_MEDIA_STATISTICS_DISABLE
142     _fx_system_build_options_1 = _fx_system_build_options_1 | (((ULONG)1) << 6);
143 #endif
144 
145 #ifdef FX_SINGLE_OPEN_LEGACY
146     _fx_system_build_options_1 = _fx_system_build_options_1 | (((ULONG)1) << 4);
147 #endif
148 #ifdef FX_RENAME_PATH_INHERIT
149     _fx_system_build_options_1 = _fx_system_build_options_1 | (((ULONG)1) << 3);
150 #endif
151 #ifdef FX_NO_LOCAL_PATH
152     _fx_system_build_options_1 = _fx_system_build_options_1 | (((ULONG)1) << 2);
153 #endif
154 #ifdef FX_FAULT_TOLERANT_DATA
155     _fx_system_build_options_1 = _fx_system_build_options_1 | (((ULONG)1) << 1);
156 #endif
157 #ifdef FX_FAULT_TOLERANT
158     _fx_system_build_options_1 = _fx_system_build_options_1 | ((ULONG)1);
159 #endif
160 
161     /* Setup the second build options variable.  */
162     if (FX_MAX_SECTOR_CACHE > ((ULONG)0xFFFF))
163     {
164         _fx_system_build_options_2 =  _fx_system_build_options_2 | (((ULONG)0xFFFF) << 16);
165     }
166     else
167     {
168         _fx_system_build_options_2 =  _fx_system_build_options_2 | (((ULONG)FX_MAX_SECTOR_CACHE) << 16);
169     }
170     if (FX_FAT_MAP_SIZE > 0xFF)
171     {
172         _fx_system_build_options_2 =  _fx_system_build_options_2 | (((ULONG)0xFF) << 8);
173     }
174     else
175     {
176         _fx_system_build_options_2 =  _fx_system_build_options_2 | (((ULONG)FX_FAT_MAP_SIZE) << 8);
177     }
178     if (FX_MAX_FAT_CACHE > 0xFF)
179     {
180         _fx_system_build_options_2 =  _fx_system_build_options_2 | ((ULONG)0xFF);
181     }
182     else
183     {
184         _fx_system_build_options_2 =  _fx_system_build_options_2 | ((ULONG)FX_MAX_FAT_CACHE);
185     }
186 
187     /* Setup the third build options variable.  */
188     if (FX_UPDATE_RATE_IN_SECONDS > 0xFF)
189     {
190         _fx_system_build_options_3 =  _fx_system_build_options_3 | (((ULONG)0xFF) << 16);
191     }
192     else
193     {
194         _fx_system_build_options_3 =  _fx_system_build_options_3 | (((ULONG)FX_UPDATE_RATE_IN_SECONDS) << 16);
195     }
196     if (FX_UPDATE_RATE_IN_TICKS > ((ULONG)0xFFFF))
197     {
198         _fx_system_build_options_3 =  _fx_system_build_options_3 | ((ULONG)0xFFFF);
199     }
200     else
201     {
202         _fx_system_build_options_3 =  _fx_system_build_options_3 | ((ULONG)FX_UPDATE_RATE_IN_TICKS);
203     }
204 #endif /* FX_DISABLE_BUILD_OPTIONS */
205 }
206 
207