Pipes (XCC)
[akaros.git] / kern / include / ros / procdata.h
index f9fac3b..6211846 100644 (file)
@@ -1,33 +1,40 @@
-/* See COPYRIGHT for copyright information. */
+/* 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/syscall.h>
+#include <ros/ring_syscall.h>
 #include <ros/sysevent.h>
-#include <ros/error.h>
+#include <ros/arch/arch.h>
 #include <ros/common.h>
-
-#define PROCINFO_MAX_ARGC 32
-#define PROCINFO_MAX_ARGV_SIZE 1024
-
-typedef struct procinfo {
-       pid_t pid;
-       size_t max_harts;
-
-       // Temp way to pass arguments to a new process
-       size_t argc;
-       char* argv[PROCINFO_MAX_ARGC];
-       char argv_buf[PROCINFO_MAX_ARGV_SIZE];
-} procinfo_t;
-#define PROCINFO_NUM_PAGES  ((sizeof(procinfo_t)-1)/PGSIZE + 1)        
+#include <ros/procinfo.h>
+#include <ros/event.h>
 
 typedef struct procdata {
-       // The actual ring buffers for communicating with user space
-       syscall_sring_t  syscallring;  // Per-process ring buffer for async syscalls
-       sysevent_sring_t syseventring; // Per-process ring buffer for async sysevents
+       /*
+       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)
 
-#endif // !ROS_PROCDATA_H
+/* TODO: I dislike having this not be a pointer (for kernel programming) */
+#define __procdata (*(procdata_t*)UDATA)
+
+#endif /* ROS_PROCDATA_H */