New vcoremap in procinfo
[akaros.git] / kern / include / ros / procdata.h
1 /* Copyright (c) 2009 The Regents of the University of California
2  * See LICENSE for details.  */
3
4 #ifndef ROS_PROCDATA_H
5 #define ROS_PROCDATA_H
6
7 #include <ros/memlayout.h>
8 #include <ros/ring_syscall.h>
9 #include <ros/arch/arch.h>
10 #include <ros/common.h>
11 #include <ros/procinfo.h>
12 #include <ros/notification.h>
13 #include <arch/mmu.h>
14
15 typedef struct procdata {
16         syscall_sring_t                 syscallring;
17         char                                    pad1[SYSCALLRINGSIZE - sizeof(syscall_sring_t)];
18         sysevent_sring_t                syseventring;
19         char                                    pad2[SYSEVENTRINGSIZE - sizeof(sysevent_sring_t)];
20 #ifdef __i386__
21         segdesc_t                               *ldt; // TODO: bug with this.  needs to go
22 #endif
23         // TODO: will replace these in a later commit
24         uintptr_t stack_pointers[MAX_NUM_CPUS];
25         /* glibc relies on stuff above this point.  if you change it, you need to
26          * rebuild glibc. */
27         struct notif_method             notif_methods[MAX_NR_NOTIF];
28         /* Long range, would like these to be mapped in lazily, as the vcores are
29          * requested.  Sharing MAX_NUM_CPUS is a bit weird too. */
30         struct preempt_data             vcore_preempt_data[MAX_NUM_CPUS];
31 } procdata_t;
32
33 #define PROCDATA_NUM_PAGES  ((sizeof(procdata_t)-1)/PGSIZE + 1)
34
35 // this is how user programs access the procdata page
36 #ifndef ROS_KERNEL
37 # define __procdata (*(procdata_t*)UDATA)
38 #endif
39
40 #endif // !ROS_PROCDATA_H