summaryrefslogtreecommitdiff
path: root/tao/RTScheduling/RTScheduler.pidl
blob: 76bdac8d8bd93c83b716fb8a06e90d10a16d741a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
//$Id$
// ================================================================
//
// = LIBRARY
//   TAO_RTScheduling
//
// = FILENAME
//   RTScheduling.pidl
//
// = DESCRIPTION
//   Some new data types included for GIOP 1.2
// ================================================================
#ifndef TAO_RTSCHEDULER_PIDL
#define TAO_RTSCHEDULER_PIDL

#include "tao/RTCORBA/RTCORBA_include.pidl"
#include "tao/PortableServer/PortableServer_include.pidl"
#include "tao/PI/PI_include.pidl"
#include "tao/PI_Server/ServerRequestInfo.pidl"
#include "tao/PortableInterceptor.pidl"
#include "tao/PI/PIForwardRequest.pidl"

module CORBA
{
    // Extensions by this proposal:
    native VoidData;

    // Ada:  System.Address
    // C:    void*
    // C++:  void*
    // Java: Object

};

module RTScheduling
{
    // ------------------------------------------------------------------
    // Interfaces that are useful to dynamically schedule applications
    // ------------------------------------------------------------------

    local interface ThreadAction
    {
        void do(in CORBA::VoidData data);
    };

    local interface DistributableThread
    {
        enum DT_State
        {
          ACTIVE,
          CANCELLED
        };

        void cancel();
            // raises CORBA::OBJECT_NOT_FOUND if
            // the distributable thread is
            // not known to the scheduler
        readonly attribute DT_State state;
    };

    local interface Current
        : RTCORBA::Current
    {
        DistributableThread
            spawn
                (in ThreadAction      start,
                in CORBA::VoidData data,
                in string name,
                in CORBA::Policy sched_param,
                in CORBA::Policy implicit_sched_param,
                in unsigned long     stack_size,
                    // zero means use the O/S default
                in RTCORBA::Priority base_priority);

        exception UNSUPPORTED_SCHEDULING_DISCIPLINE {};
    // The scheduling_parameter argument didn't match the
    // active scheduling policy.

        void begin_scheduling_segment
            (in string        name,
             in CORBA::Policy sched_param,
             in CORBA::Policy implicit_sched_param)
            raises (UNSUPPORTED_SCHEDULING_DISCIPLINE );

        void update_scheduling_segment
            (in string       name,
             in CORBA::Policy sched_param,
             in CORBA::Policy implicit_sched_param)
            raises ( UNSUPPORTED_SCHEDULING_DISCIPLINE );

        void end_scheduling_segment(in string name);

        typedef sequence<octet> IdType;

        readonly attribute IdType id;
            // a globally unique id

        //IdType get_current_id();
            // returns id of thread that is running

        DistributableThread lookup(in IdType id);
            // returns a null reference if
            // the distributable thread is
            // not known to the local scheduler

        readonly attribute CORBA::Policy scheduling_parameter;
        readonly attribute CORBA::Policy implicit_scheduling_parameter;

        typedef sequence<string> NameList;

        readonly attribute NameList      current_scheduling_segment_names;
            // Ordered from innermost segment name
            // to outmost segment name
    };

    local interface ResourceManager
        : RTCORBA::Mutex
    {
    };

    local interface Scheduler
    {
        exception INCOMPATIBLE_SCHEDULING_DISCIPLINES {};

        attribute          CORBA::PolicyList scheduling_policies;
        readonly attribute CORBA::PolicyList poa_policies;
        readonly attribute string            scheduling_discipline_name;

        ResourceManager
            create_resource_manager
                (in string        name,
                 in CORBA::Policy scheduling_parameter);

        void set_scheduling_parameter
            (inout PortableServer::Servant resource,
             in    string         name,
             in    CORBA::Policy  scheduling_parameter);

        void begin_new_scheduling_segment (in Current::IdType guid,
                                        in string name,
                                        in CORBA::Policy sched_param,
                                        in CORBA::Policy implicit_sched_param)
        raises (Current::UNSUPPORTED_SCHEDULING_DISCIPLINE);

        void begin_nested_scheduling_segment (in Current::IdType guid,
                                        in string name,
                                        in CORBA::Policy sched_param,
                                        in CORBA::Policy implicit_sched_param)
        raises (Current::UNSUPPORTED_SCHEDULING_DISCIPLINE);


        void update_scheduling_segment (in Current::IdType guid,
                                        in string name,
                                        in CORBA::Policy sched_param,
                                        in CORBA::Policy implicit_sched_param)
        raises (Current::UNSUPPORTED_SCHEDULING_DISCIPLINE);

        void end_scheduling_segment (in Current::IdType guid,
                                        in string name);


        void end_nested_scheduling_segment (in Current::IdType guid,
                                        in string name,
                                        in CORBA::Policy outer_sched_param);

        void send_request (in PortableInterceptor::ClientRequestInfo ri)
        raises (PortableInterceptor::ForwardRequest);

        void receive_request (in PortableInterceptor::ServerRequestInfo ri,
                                out Current::IdType guid,
                                out string name,
                                out CORBA::Policy sched_param,
                                out CORBA::Policy implicit_sched_param)
        raises (PortableInterceptor::ForwardRequest);

        void send_reply (in PortableInterceptor::ServerRequestInfo ri);

        void send_exception (in PortableInterceptor::ServerRequestInfo ri)
        raises (PortableInterceptor::ForwardRequest);

        void send_other (in PortableInterceptor::ServerRequestInfo ri)
        raises (PortableInterceptor::ForwardRequest);

        void send_poll (in PortableInterceptor::ClientRequestInfo ri)
        raises (PortableInterceptor::ForwardRequest);

        void receive_reply (in PortableInterceptor::ClientRequestInfo ri);

        void receive_exception (in PortableInterceptor::ClientRequestInfo ri)
        raises (PortableInterceptor::ForwardRequest);

        void receive_other (in PortableInterceptor::ClientRequestInfo ri)
        raises (PortableInterceptor::ForwardRequest);

        void cancel (in Current::IdType guid);
    };

};

#endif /*TAO_RTSCHEDULER_PIDL*/