Subversion Repositories HelenOS

Rev

Rev 2296 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2296 Rev 2309
1
/*
1
/*
2
 * Copyright (c) 2007 Jan Hudecek
2
 * Copyright (c) 2007 Jan Hudecek
3
 * Copyright (c) 2006 Jakub Jermar
3
 * Copyright (c) 2006 Jakub Jermar
4
 * All rights reserved.
4
 * All rights reserved.
5
 *
5
 *
6
 * Redistribution and use in source and binary forms, with or without
6
 * Redistribution and use in source and binary forms, with or without
7
 * modification, are permitted provided that the following conditions
7
 * modification, are permitted provided that the following conditions
8
 * are met:
8
 * are met:
9
 *
9
 *
10
 * - Redistributions of source code must retain the above copyright
10
 * - Redistributions of source code must retain the above copyright
11
 *   notice, this list of conditions and the following disclaimer.
11
 *   notice, this list of conditions and the following disclaimer.
12
 * - Redistributions in binary form must reproduce the above copyright
12
 * - Redistributions in binary form must reproduce the above copyright
13
 *   notice, this list of conditions and the following disclaimer in the
13
 *   notice, this list of conditions and the following disclaimer in the
14
 *   documentation and/or other materials provided with the distribution.
14
 *   documentation and/or other materials provided with the distribution.
15
 * - The name of the author may not be used to endorse or promote products
15
 * - The name of the author may not be used to endorse or promote products
16
 *   derived from this software without specific prior written permission.
16
 *   derived from this software without specific prior written permission.
17
 *
17
 *
18
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
 */
28
 */
29
 
29
 
30
/** @addtogroup genericddi
30
/** @addtogroup genericddi
31
 * @{
31
 * @{
32
 */
32
 */
33
/** @file
33
/** @file
34
 */
34
 */
35
 
35
 
36
#ifndef KERN_TASKLET_H_
36
#ifndef KERN_TASKLET_H_
37
#define KERN_TASKLET_H_
37
#define KERN_TASKLET_H_
38
 
38
 
39
#include <arch/types.h>
39
#include <arch/types.h>
40
#include <proc/task.h>
40
#include <proc/task.h>
41
 
41
 
42
 
42
 
43
 
43
 
44
/** Structure describing a tasklet*/
44
/** Structure describing a tasklet*/
45
typedef struct tasklet_descriptor {
45
typedef struct tasklet_descriptor {
46
 /** callback to call */
46
 /** callback to call */
47
 void (*func)(void* data);
47
 void (*func)(void* data);
48
 /** parameters to pass to func */
48
 /** parameters to pass to func */
49
 void* data;
49
 void* data;
50
 /** state of the tasklet one of tasklet_state_enum */
50
 /** state of the tasklet one of tasklet_state_enum */
51
 uint32_t state;
51
 uint32_t state;
52
 struct tasklet_descriptor *next;
52
 struct tasklet_descriptor *next;
53
} tasklet_descriptor_t;
53
} tasklet_descriptor_t;
54
 
54
 
55
/** Initializes tasklets - except for the tasklet thread */
55
/** Initializes tasklets - except for the tasklet thread */
56
void tasklet_init(void);
56
void tasklet_init(void);
57
 
57
 
58
/**
58
/**
59
* Creates and runs the tasklet thread
59
* Creates and runs the tasklet thread
60
*
60
*
61
*  @param kernel_task Pointer to the kernel task - for create_thread
61
*  @param kernel_task Pointer to the kernel task - for create_thread
62
*/
62
*/
63
void tasklet_run_tasklet_thread(task_t * kernel_task);
63
void tasklet_run_tasklet_thread(task_t * kernel_task);
64
 
64
 
65
/** Thread which keeps executing scheduled enabled tasklets
65
/** Thread which keeps executing scheduled enabled tasklets
66
* @param data not used
66
* @param data not used
67
*/
67
*/
68
void tasklet_thread(void* data);
68
void tasklet_thread(void* data);
69
 
69
 
70
 
70
 
71
/** Executes scheduled enabled tasklets */
71
/** Executes scheduled enabled tasklets */
72
void tasklet_do(void);
72
void tasklet_do(void);
73
 
73
 
74
/** Initializes tasklet structure
74
/** Initializes tasklet structure
75
* @param func tasklet callback function to be called
75
* @param func tasklet callback function to be called
76
* @param data pointer to be passed to the tasklet function
76
* @param data pointer to be passed to the tasklet function
77
*/
77
*/
78
tasklet_descriptor_t* tasklet_register(void (*func)(void* data), void* data);
78
tasklet_descriptor_t* tasklet_register(void (*func)(void* data), void* data);
79
 
79
 
80
/** Schedules the tasklet for execution on current CPU
80
/** Schedules the tasklet for execution on current CPU
81
* @param t tasklet to be scheduled
81
* @param t tasklet to be scheduled
82
*/
82
*/
83
void tasklet_schedule(tasklet_descriptor_t* t);
83
void tasklet_schedule(tasklet_descriptor_t* t);
84
 
84
 
-
 
85
 
-
 
86
/** Schedules the tasklet for execution on id CPU
-
 
87
* @param t tasklet to be scheduled
-
 
88
* @param id CPU id on which the tasklet will be scheduled
-
 
89
*/
-
 
90
void tasklet_schedule_SMP(tasklet_descriptor_t* t, uint32_t id);
-
 
91
 
85
/** Tasklet will not be run, even if scheduled
92
/** Tasklet will not be run, even if scheduled
86
* @param t tasklet to be disabled
93
* @param t tasklet to be disabled
87
*/
94
*/
88
void tasklet_disable(tasklet_descriptor_t* t);
95
void tasklet_disable(tasklet_descriptor_t* t);
89
 
96
 
90
/** Tasklet will be run if scheduled
97
/** Tasklet will be run if scheduled
91
* @param t tasklet to be enabled
98
* @param t tasklet to be enabled
92
*/
99
*/
93
void tasklet_enable(tasklet_descriptor_t* t);
100
void tasklet_enable(tasklet_descriptor_t* t);
94
 
101
 
95
/** Frees the tasklet structure when no longer needed. The function doesn't provide
102
/** Frees the tasklet structure when no longer needed. The function doesn't provide
96
*   any synchronization, the caller must be sure, the tasklet is not scheduled.
103
*   any synchronization, the caller must be sure, the tasklet is not scheduled.
97
*
104
*
98
* @param tasklet to be freed
105
* @param tasklet to be freed
99
*/
106
*/
100
void tasklet_free(tasklet_descriptor_t* t);
107
void tasklet_free(tasklet_descriptor_t* t);
101
 
108
 
102
 
109
 
103
#endif
110
#endif
104
 
111
 
105
/** @}
112
/** @}
106
 */
113
 */
107
 
114