8a5f34d0500e62cc75ff8464f82b2799f8e946a5
[barrelfish] / include / barrelfish / dispatcher.h
1 /**
2  * \file
3  * \brief Generic dispatcher structure private to the user
4  */
5
6 /*
7  * Copyright (c) 2007, 2008, 2009, 2010, 2011, ETH Zurich.
8  * All rights reserved.
9  *
10  * This file is distributed under the terms in the attached LICENSE file.
11  * If you do not find this file, copies can be found by writing to:
12  * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
13  */
14
15 #ifndef BARRELFISH_DISPATCHER_H
16 #define BARRELFISH_DISPATCHER_H
17
18 #include <barrelfish/dispatch.h>
19 #include <barrelfish/core_state_arch.h>
20 #include <barrelfish/heap.h>
21 #include <barrelfish/threads.h>
22
23 struct lmp_chan;
24 struct ump_chan;
25 struct deferred_event;
26 struct notificator;
27
28 // Architecture generic user only dispatcher struct
29 struct dispatcher_generic {
30     /// stack for traps and disabled pagefaults
31     uintptr_t trap_stack[DISPATCHER_STACK_WORDS] __attribute__ ((aligned (16)));
32     /// all other dispatcher upcalls run on this stack
33     uintptr_t stack[DISPATCHER_STACK_WORDS] __attribute__ ((aligned (16)));
34
35     /// Currently-running (or last-run) thread, if any
36     struct thread *current;
37
38     /// Thread run queue (all threads eligible to be run)
39     struct thread *runq;
40
41     /// Cap to this dispatcher, used for creating new endpoints
42     struct capref dcb_cap;
43
44 #ifdef CONFIG_INTERCONNECT_DRIVER_LMP
45     /// List of LMP endpoints to poll
46     struct lmp_endpoint *lmp_poll_list;
47
48     /// List of LMP channels waiting to retry a send
49     struct lmp_chan *lmp_send_events_list;
50     struct ump_chan *ump_send_events_list;
51
52     /// LMP endpoint heap state
53     struct heap lmp_endpoint_heap;
54 #endif // CONFIG_INTERCONNECT_DRIVER_LMP
55
56     /// Queue of deferred events (i.e. timers)
57     struct deferred_event *deferred_events;
58
59     /// The core the dispatcher is running on
60     coreid_t core_id;
61
62     uintptr_t timeslice;
63
64     /// Per core dispatcher state
65     struct core_state_arch core_state;
66
67     /// Tracing buffer
68     struct trace_buffer *trace_buf;
69
70     struct thread *cleanupthread;
71     struct thread_mutex cleanupthread_lock;
72
73     /// Last FPU-using thread
74     struct thread *fpu_thread;
75
76     /// Domain ID cache
77     domainid_t domain_id;
78
79     /// virtual address of the eh_frame
80     lvaddr_t eh_frame;
81
82     /// size of the eh frame
83     size_t   eh_frame_size;
84
85     /// virtual address of the eh_frame
86     lvaddr_t eh_frame_hdr;
87
88     /// size of the eh frame
89     size_t   eh_frame_hdr_size;
90
91     /// list of polled channels
92     struct waitset_chanstate *polled_channels;
93     
94     struct notificator *notificators;
95 };
96
97 #endif // BARRELFISH_DISPATCHER_H