/* 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)];
	bool				printx_on;
	uint8_t				pad8;
	uint16_t			pad16;
	uint32_t			pad32;
	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)
