/* Copyright (c) 2009 The Regents of the University of California
 * See LICENSE for details.  */

#pragma once

#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_CORES is a bit weird too. */
	struct preempt_data		vcore_preempt_data[MAX_NUM_CORES];
} 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)
