blob: f1beb49a1a9d4b29618814ef75a353c8842eb723 [file] [log] [blame]
/* 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;
};