This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / include / linux / ckrm.h
1 /* ckrm.h - Class-based Kernel Resource Management (CKRM)
2  *
3  * Copyright (C) Hubertus Franke, IBM Corp. 2003,2004
4  *           (C) Shailabh Nagar,  IBM Corp. 2003
5  *           (C) Chandra Seetharaman, IBM Corp. 2003
6  * 
7  * 
8  * Provides a base header file including macros and basic data structures.
9  *
10  * Latest version, more details at http://ckrm.sf.net
11  * 
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU General Public License as published by
14  * the Free Software Foundation; either version 2 of the License, or
15  * (at your option) any later version.
16  *
17  */
18
19 /* Changes
20  *
21  * 28 Aug 2003
22  *        Created.
23  * 06 Nov 2003
24  *        Made modifications to suit the new RBCE module.
25  * 10 Nov 2003
26  *        Added callbacks_active and surrounding logic. Added task paramter
27  *        for all CE callbacks.
28  * 19 Nov 2004
29  *        New Event callback structure
30  */
31
32 #ifndef _LINUX_CKRM_H
33 #define _LINUX_CKRM_H
34
35 #ifdef CONFIG_CKRM
36
37 // Data structure and function to get the list of registered 
38 // resource controllers.
39
40 // #include <linux/sched.h>
41
42 /* CKRM defines a set of events at particular points in the kernel
43  * at which callbacks registered by various class types are called
44  */
45
46 enum ckrm_event {
47         /* we distinguish various events types
48          *
49          * (a) CKRM_LATCHABLE_EVENTS
50          *      events can be latched for event callbacks by classtypes
51          *
52          * (b) CKRM_NONLATACHBLE_EVENTS
53          *     events can not be latched but can be used to call classification
54          * 
55          * (c) event that are used for notification purposes
56          *     range: [ CKRM_EVENT_CANNOT_CLASSIFY .. )
57          */
58
59         /* events (a) */
60
61         CKRM_LATCHABLE_EVENTS,
62
63         CKRM_EVENT_NEWTASK = CKRM_LATCHABLE_EVENTS,
64         CKRM_EVENT_FORK,
65         CKRM_EVENT_EXIT,
66         CKRM_EVENT_EXEC,
67         CKRM_EVENT_UID,
68         CKRM_EVENT_GID,
69         CKRM_EVENT_XID,
70         CKRM_EVENT_LOGIN,
71         CKRM_EVENT_USERADD,
72         CKRM_EVENT_USERDEL,
73         CKRM_EVENT_LISTEN_START,
74         CKRM_EVENT_LISTEN_STOP,
75         CKRM_EVENT_APPTAG,
76
77         /* events (b) */
78
79         CKRM_NONLATCHABLE_EVENTS,
80
81         CKRM_EVENT_RECLASSIFY = CKRM_NONLATCHABLE_EVENTS,
82
83         /* events (c) */
84         CKRM_NOTCLASSIFY_EVENTS,
85
86         CKRM_EVENT_MANUAL = CKRM_NOTCLASSIFY_EVENTS,
87
88         CKRM_NUM_EVENTS
89 };
90 #endif
91
92 #ifdef __KERNEL__
93 #ifdef CONFIG_CKRM
94
95 extern void ckrm_invoke_event_cb_chain(enum ckrm_event ev, void *arg);
96
97 typedef void (*ckrm_event_cb) (void *arg);
98
99 struct ckrm_hook_cb {
100         ckrm_event_cb fct;
101         struct ckrm_hook_cb *next;
102 };
103
104 #define CKRM_DEF_CB(EV,fct)                                     \
105 static inline void ckrm_cb_##fct(void)                          \
106 {                                                               \
107          ckrm_invoke_event_cb_chain(CKRM_EVENT_##EV,NULL);      \
108 }
109
110 #define CKRM_DEF_CB_ARG(EV,fct,argtp)                                   \
111 static inline void ckrm_cb_##fct(argtp arg)                             \
112 {                                                                       \
113          ckrm_invoke_event_cb_chain(CKRM_EVENT_##EV,(void*)arg);        \
114 }
115
116 #else                           // !CONFIG_CKRM
117
118 #define CKRM_DEF_CB(EV,fct)                     \
119 static inline void ckrm_cb_##fct(void)  { }
120
121 #define CKRM_DEF_CB_ARG(EV,fct,argtp)           \
122 static inline void ckrm_cb_##fct(argtp arg) { }
123
124 #endif                          // CONFIG_CKRM
125
126 /*-----------------------------------------------------------------
127  *   define the CKRM event functions 
128  *               EVENT          FCT           ARG         
129  *-----------------------------------------------------------------*/
130
131 // types we refer at 
132 struct task_struct;
133 struct sock;
134 struct user_struct;
135
136 CKRM_DEF_CB_ARG(FORK, fork, struct task_struct *);
137 CKRM_DEF_CB_ARG(EXEC, exec, const char *);
138 CKRM_DEF_CB(UID, uid);
139 CKRM_DEF_CB(GID, gid);
140 CKRM_DEF_CB_ARG(XID, xid, struct task_struct *);
141 CKRM_DEF_CB(APPTAG, apptag);
142 CKRM_DEF_CB(LOGIN, login);
143 CKRM_DEF_CB_ARG(USERADD, useradd, struct user_struct *);
144 CKRM_DEF_CB_ARG(USERDEL, userdel, struct user_struct *);
145 CKRM_DEF_CB_ARG(LISTEN_START, listen_start, struct sock *);
146 CKRM_DEF_CB_ARG(LISTEN_STOP, listen_stop, struct sock *);
147
148 // some other functions required
149 #ifdef CONFIG_CKRM
150 extern void ckrm_init(void);
151 void ckrm_cb_newtask(struct task_struct *);
152 void ckrm_cb_exit(struct task_struct *);
153 #else
154 #define ckrm_init(x)            do { } while (0)
155 #define ckrm_cb_newtask(x)      do { } while (0)
156 #define ckrm_cb_exit(x)         do { } while (0)
157 #endif
158
159 extern int get_exe_path_name(struct task_struct *, char *, int);
160
161 #endif                          // __KERNEL__
162
163 #endif                          // _LINUX_CKRM_H