| /* 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; |
| }; |