Merge branch 'master' into proc-work
[akaros.git] / kern / include / workqueue.h
1 /*
2  * Copyright (c) 2009 The Regents of the University of California
3  * Barret Rhoden <brho@cs.berkeley.edu>
4  * See LICENSE for details.
5  *
6  * Workqueue: This is a todo list of func, void* that get executed whenever
7  * process_workqueue is called.  Typically, this is called from smp_idle().
8  * Note that every core will run this, so be careful with dynamic memory mgmt.
9  */
10
11 #ifndef ROS_KERN_WORKQUEUE_H
12 #define ROS_KERN_WORKQUEUE_H
13
14 #include <sys/queue.h>
15 #include <arch/types.h>
16
17 typedef void (*func_t)(void *data);
18 struct work {
19         LIST_ENTRY(work) work_link;
20         func_t func;
21         void *data;
22 };
23
24 // TODO make these dynamic and hold more than 1.  might want better list macros.
25 #define WORKQUEUE_ELEMENTS 1
26 struct workqueue {
27         struct work statics[WORKQUEUE_ELEMENTS];
28 };
29
30 void process_workqueue(void);
31 // For now, the caller should free their struct work after this call
32 int enqueue_work(struct workqueue *queue, struct work *job);
33
34 #endif /* ROS_KERN_WORKQUEUE_H */