| /* 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 */ |