Rev 997 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1063 | tullio | 1 | |
2 | /* |
||
3 | * This program is free software; you can redistribute it and/or modify |
||
4 | * it under the terms of the GNU General Public License as published by |
||
5 | * the Free Software Foundation; either version 2 of the License, or |
||
6 | * (at your option) any later version. |
||
7 | * |
||
8 | * This program is distributed in the hope that it will be useful, |
||
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
11 | * GNU General Public License for more details. |
||
12 | * |
||
13 | * You should have received a copy of the GNU General Public License |
||
14 | * along with this program; if not, write to the Free Software |
||
15 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
||
16 | * |
||
17 | */ |
||
18 | |||
985 | julio | 19 | //fsf_implementation_specific.h |
20 | //=================================================== |
||
21 | // FFFFFFIII RRRRR SSTTTTTTT |
||
22 | // FF IIR RR SS |
||
23 | // FF IR SS |
||
24 | // FFFFFF RRRR SSSSST |
||
25 | // FF FI RRR SS |
||
26 | // FF II RRR SS |
||
27 | // FF IIIIIR RS |
||
28 | // |
||
29 | // FSF(FIRST Scheduling Framework) |
||
30 | //implementation-defined optional functionality |
||
31 | //================================================ |
||
32 | |||
33 | #include "fsf_basic_types.h" |
||
34 | #include "fsf_core.h" |
||
35 | |||
36 | |||
37 | #ifndef _FSF_IMPLEMENTATION_SPECIFIC_H_ |
||
38 | #define _FSF_IMPLEMENTATION_SPECIFIC_H_ |
||
39 | |||
40 | #define FSF_IMPLEMENTATION_SPECIFIC_MODULE_SUPPORTED 1 |
||
41 | |||
42 | |||
43 | // The operations defined in this module are of optional use. They |
||
44 | // only work in the fixed priority implementation, and they may be |
||
45 | // used to enhance the behavior of the applications running under the |
||
46 | // fsf scheduler. |
||
47 | |||
48 | //// The definition of this type is in fsf_basic_types.h |
||
49 | // |
||
50 | //typedef unsigned long fsf_preemption_level_t; |
||
51 | // // range 1..2**32-1 |
||
52 | |||
53 | |||
54 | //fsf_set_contract_preemption_level: The operation updates the |
||
55 | //specified contract parameters object by setting its preemption level |
||
56 | //to the specified input parameter. |
||
57 | |||
58 | int |
||
59 | fsf_set_contract_preemption_level |
||
60 | (fsf_contract_parameters_t *contract, |
||
61 | fsf_preemption_level_t preemption_level); |
||
62 | |||
63 | |||
64 | //fsf_get_contract_preemption_level: The operation obtains from the |
||
65 | //specified contract parameters object its preemption level and copies |
||
66 | //it to the place pointed to by the specified input parameter. |
||
67 | |||
68 | int |
||
69 | fsf_get_contract_preemption_level |
||
70 | (const fsf_contract_parameters_t *contract, |
||
71 | fsf_preemption_level_t *preemption_level); |
||
72 | |||
73 | |||
74 | //fsf_set_service_thread_preemption_level: this function sets the |
||
75 | //preemption level of the service thread to the specified value. The |
||
997 | julio | 76 | //initial preemption level is a configurable parameter. This value |
77 | //is stored in a temporary variable and it is used the next time the |
||
78 | //service thread data is updated with the fsf_set_service_thread_data |
||
79 | //function |
||
985 | julio | 80 | |
81 | int |
||
82 | fsf_set_service_thread_preemption_level |
||
83 | (fsf_preemption_level_t preemption_level); |
||
84 | |||
85 | //fsf_get_service_thread_preemption_level: this function stores the |
||
86 | //current preemption level of the service thread in the variable |
||
87 | //pointed to by preemption_level |
||
88 | |||
89 | int |
||
90 | fsf_get_service_thread_preemption_level |
||
91 | (fsf_preemption_level_t *preemption_level); |
||
92 | |||
93 | |||
94 | //fsf_thread_exit: There is a limitation in the current version of the |
||
95 | //MaRTE implementation that causes the information of a terminated |
||
96 | //thread to continue to be stored in the fsf scheduler, and the thread |
||
97 | //to continue to be counted in the number of threads. The |
||
98 | //fsf_thread_exit operation allows the implementation to delete the |
||
99 | //thread's information, and then terminate the thread. Therefore, it |
||
100 | //is recommended to use this function to terminate a thread under fsf. |
||
101 | |||
102 | //This operation shall terminate the calling thread, make the value |
||
103 | //value_ptr available to any successful join with the terminating |
||
104 | //thread, and unbind the thread from its associated server. After |
||
105 | //cleaning up the thread management data, it is unbound and the |
||
106 | //scheduling policy is changed to fixed priority before the posix |
||
107 | //pthread_exit() function is called. |
||
108 | |||
109 | void |
||
110 | fsf_thread_exit (void *value_ptr); |
||
111 | |||
112 | |||
113 | //fsf_set_shared_obj_preemption_level: The operation updates the |
||
114 | //specified shared object by setting its preemption level |
||
115 | //to the specified input parameter. |
||
116 | //OBSERVATION: if this value is changed being any contract that |
||
117 | //uses the resource already accepted, the system's behavior and |
||
118 | //particularly the acceptance tests correctness are not garantee |
||
119 | //and probably wrong. |
||
120 | |||
121 | int |
||
122 | fsf_set_shared_obj_preemption_level |
||
123 | (fsf_shared_obj_handle_t obj_handle, |
||
124 | fsf_preemption_level_t preemption_level); |
||
125 | |||
126 | |||
127 | //fsf_get_shared_obj_preemption_level: The operation obtains from the |
||
128 | //specified shared object its preemption level and copies |
||
129 | //it to the place pointed to by the specified input parameter. |
||
130 | |||
131 | int |
||
132 | fsf_get_shared_obj_preemption_level |
||
133 | (fsf_shared_obj_handle_t obj_handle, |
||
134 | fsf_preemption_level_t *preemption_level); |
||
135 | |||
136 | |||
137 | |||
138 | #endif // _FSF_IMPLEMENTATION_SPECIFIC_H_ |