|  | /* Copyright (c) 2010-2011 The Regents of the University of California | 
|  | * Barret Rhoden <brho@cs.berkeley.edu> | 
|  | * See LICENSE for details. | 
|  | * | 
|  | * Bits for the kernel interface for event. */ | 
|  |  | 
|  | #pragma once | 
|  |  | 
|  | #include <ros/common.h> | 
|  |  | 
|  | /* Event Delivery Flags from the process to the kernel */ | 
|  | #define EVENT_IPI		0x00001	/* IPI the vcore (usually with INDIR) */ | 
|  | #define EVENT_SPAM_PUBLIC	0x00002	/* spam the msg to public vcpd mboxes */ | 
|  | #define EVENT_INDIR		0x00004	/* send an indirection event to vcore */ | 
|  | #define EVENT_VCORE_PRIVATE	0x00008	/* Will go to the private VCPD mbox */ | 
|  | #define EVENT_SPAM_INDIR	0x00010	/* spam INDIRs if the vcore's offline */ | 
|  | #define EVENT_VCORE_MUST_RUN	0x00020	/* spams go to a vcore that will run */ | 
|  | #define EVENT_NOTHROTTLE	0x00040	/* send all INDIRs (no throttling) */ | 
|  | #define EVENT_ROUNDROBIN	0x00080	/* pick a vcore, RR style */ | 
|  | #define EVENT_VCORE_APPRO	0x00100	/* send to where the kernel wants */ | 
|  | #define EVENT_WAKEUP		0x00200	/* wake up the process after sending */ | 
|  |  | 
|  | /* Event Message Types */ | 
|  | #define EV_NONE			 0 | 
|  | #define EV_PREEMPT_PENDING	 1 | 
|  | #define EV_GANG_PREMPT_PENDING	 2 | 
|  | #define EV_VCORE_PREEMPT	 3 | 
|  | #define EV_GANG_RETURN		 4 | 
|  | #define EV_USER_IPI		 5 | 
|  | #define EV_PAGE_FAULT		 6 | 
|  | #define EV_ALARM		 7 | 
|  | #define EV_EVENT		 8 | 
|  | #define EV_FREE_APPLE_PIE	 9 | 
|  | #define EV_SYSCALL		10 | 
|  | #define EV_CHECK_MSGS		11 | 
|  | #define EV_POSIX_SIGNAL		12 | 
|  | #define NR_EVENT_TYPES		25 /* keep me last (and 1 > the last one) */ | 
|  |  | 
|  | /* Will probably have dynamic notifications later */ | 
|  | #define MAX_NR_DYN_EVENT	25 | 
|  | #define MAX_NR_EVENT		(NR_EVENT_TYPES + MAX_NR_DYN_EVENT) | 
|  |  | 
|  | /* Want to keep this small and generic, but add items as you need them.  One | 
|  | * item some will need is an expiration time, which ought to be put in the 64 | 
|  | * bit arg.  Will need tweaking / thought as we come up with events.  These are | 
|  | * what get put on the per-core queue in procdata. */ | 
|  | struct event_msg { | 
|  | uint16_t			ev_type; | 
|  | uint16_t			ev_arg1; | 
|  | uint32_t			ev_arg2; | 
|  | void				*ev_arg3; | 
|  | uint64_t			ev_arg4; | 
|  | }; |