re-Deputized some things and added Deputy polymorphic types to active messages
[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 <ros/common.h>
16 #include <env.h>
17
18 typedef void (*func_t)(TV(t) data);
19 struct work {
20         LIST_ENTRY(work) work_link;
21         func_t func;
22         TV(t) data;
23 };
24
25 // TODO make these dynamic and hold more than 1.  might want better list macros.
26 #define WORKQUEUE_ELEMENTS 1
27 struct workqueue {
28         struct work TP(TV(t)) statics[WORKQUEUE_ELEMENTS];
29 };
30
31 void process_workqueue(void);
32 // For now, the caller should free their struct work after this call
33 int enqueue_work(struct workqueue TP(TV(t)) *queue, struct work TP(TV(t)) *job);
34
35 #endif /* ROS_KERN_WORKQUEUE_H */