Subversion Repositories HelenOS

Rev

Rev 2309 | 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
 */
2430 hudecek 33
/** @file tasklet.h
34
 * @brief Tasklets declarations
2296 hudecek 35
 */
36
 
37
#ifndef KERN_TASKLET_H_
38
#define KERN_TASKLET_H_
39
 
40
#include <arch/types.h>
41
#include <proc/task.h>
42
 
43
 
44
 
45
/** Structure describing a tasklet*/
46
typedef struct tasklet_descriptor {
47
 /** callback to call */
48
 void (*func)(void* data);
49
 /** parameters to pass to func */
50
 void* data;
51
 /** state of the tasklet one of tasklet_state_enum */
52
 uint32_t state;
53
 struct tasklet_descriptor *next;
54
} tasklet_descriptor_t;
55
 
56
/** Initializes tasklets - except for the tasklet thread */
57
void tasklet_init(void);
58
 
59
/**
60
* Creates and runs the tasklet thread
61
*
62
*  @param kernel_task Pointer to the kernel task - for create_thread
63
*/
64
void tasklet_run_tasklet_thread(task_t * kernel_task);
65
 
66
/** Thread which keeps executing scheduled enabled tasklets
67
* @param data not used
68
*/
69
void tasklet_thread(void* data);
70
 
71
 
72
/** Executes scheduled enabled tasklets */
73
void tasklet_do(void);
74
 
75
/** Initializes tasklet structure
76
* @param func tasklet callback function to be called
77
* @param data pointer to be passed to the tasklet function
78
*/
79
tasklet_descriptor_t* tasklet_register(void (*func)(void* data), void* data);
80
 
81
/** Schedules the tasklet for execution on current CPU
82
* @param t tasklet to be scheduled
83
*/
84
void tasklet_schedule(tasklet_descriptor_t* t);
85
 
2309 hudecek 86
 
87
/** Schedules the tasklet for execution on id CPU
88
* @param t tasklet to be scheduled
89
* @param id CPU id on which the tasklet will be scheduled
90
*/
91
void tasklet_schedule_SMP(tasklet_descriptor_t* t, uint32_t id);
92
 
2296 hudecek 93
/** Tasklet will not be run, even if scheduled
94
* @param t tasklet to be disabled
95
*/
96
void tasklet_disable(tasklet_descriptor_t* t);
97
 
98
/** Tasklet will be run if scheduled
99
* @param t tasklet to be enabled
100
*/
101
void tasklet_enable(tasklet_descriptor_t* t);
102
 
103
/** Frees the tasklet structure when no longer needed. The function doesn't provide
104
*   any synchronization, the caller must be sure, the tasklet is not scheduled.
105
*
106
* @param tasklet to be freed
107
*/
108
void tasklet_free(tasklet_descriptor_t* t);
109
 
110
 
111
#endif
112
 
113
/** @}
114
 */