Subversion Repositories HelenOS

Rev

Rev 2296 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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