|  | /* Copyright (c) 2009 The Regents of the University of California | 
|  | * See LICENSE for details.  */ | 
|  |  | 
|  | #ifndef ROS_PROCDATA_H | 
|  | #define ROS_PROCDATA_H | 
|  |  | 
|  | #include <ros/memlayout.h> | 
|  | #include <ros/ring_syscall.h> | 
|  | #include <ros/sysevent.h> | 
|  | #include <ros/arch/arch.h> | 
|  | #include <ros/common.h> | 
|  | #include <ros/procinfo.h> | 
|  | #include <ros/event.h> | 
|  |  | 
|  | typedef struct procdata { | 
|  | /* | 
|  | syscall_sring_t			syscallring; | 
|  | char					pad1[SYSCALLRINGSIZE - sizeof(syscall_sring_t)]; | 
|  | */ | 
|  | syscall_sring_t			*syscallring; | 
|  | sysevent_sring_t		syseventring; | 
|  | char					pad2[SYSEVENTRINGSIZE - sizeof(sysevent_sring_t)]; | 
|  | #if defined (__i386__) || defined (__x86_64) /* TODO: 64b */ | 
|  | segdesc_t				*ldt; // TODO: bug with this. (TLSV) | 
|  | #endif | 
|  | /* glibc relies on stuff above this point.  if you change it, you need to | 
|  | * rebuild glibc. */ | 
|  | struct resource_req		res_req[MAX_NUM_RESOURCES]; | 
|  | struct event_queue		*kernel_evts[MAX_NR_EVENT]; | 
|  | /* Long range, would like these to be mapped in lazily, as the vcores are | 
|  | * requested.  Sharing MAX_NUM_CPUS is a bit weird too. */ | 
|  | struct preempt_data		vcore_preempt_data[MAX_NUM_CPUS]; | 
|  | } procdata_t; | 
|  |  | 
|  | #define PROCDATA_NUM_PAGES  ((sizeof(procdata_t)-1)/PGSIZE + 1) | 
|  |  | 
|  | /* TODO: I dislike having this not be a pointer (for kernel programming) */ | 
|  | #define __procdata (*(procdata_t*)UDATA) | 
|  |  | 
|  | #endif /* ROS_PROCDATA_H */ |