Remove EVENT_JUSTHANDLEIT (XCC)
[akaros.git] / kern / include / ros / event.h
index 9b167ba..dee54b0 100644 (file)
 /* #include <ros/ucq.h> included below */
 
 /* Event Delivery Flags from the process to the kernel */
-#define EVENT_IPI                              0x001   /* IPI the vcore (usually with INDIR) */
-#define EVENT_NOMSG                            0x002   /* just send the bit, not the msg */
-#define EVENT_SPAM_PUBLIC              0x004   /* spam the msg to public vcpd mboxes */
-#define EVENT_INDIR                            0x008   /* send an indirection event to vcore */
-#define EVENT_VCORE_PRIVATE            0x010   /* Will go to the private VCPD mbox */
-/* Delivery style flags */
-#define EVENT_FALLBACK                 0x020   /* spam INDIRs if the vcore's offline */
-#define EVENT_VCORE_MUST_RUN   0x040   /* Alerts go to a vcore that will run */
-#define EVENT_NOTHROTTLE               0x080   /* send all INDIRs (no throttling) */
-/* Not seriously used flags */
-#define EVENT_ROUNDROBIN               0x100   /* pick a vcore, RR style */
-#define EVENT_VCORE_APPRO              0x200   /* send to where the kernel wants */
-
-/* Flags from the program to the 2LS */
-#define EVENT_JUSTHANDLEIT             0x400   /* 2LS should handle the ev_q */
-#define EVENT_THREAD                   0x800   /* spawn thread to handle ev_q */
-
-/* Certain event flags apply to spam/fallback messages */
-#define EVENT_SPAM_FLAGS               (EVENT_IPI | EVENT_VCORE_MUST_RUN)
+#define EVENT_IPI                              0x00001 /* IPI the vcore (usually with INDIR) */
+#define EVENT_NOMSG                            0x00002 /* just send the bit, not the msg */
+#define EVENT_SPAM_PUBLIC              0x00004 /* spam the msg to public vcpd mboxes */
+#define EVENT_INDIR                            0x00008 /* send an indirection event to vcore */
+#define EVENT_VCORE_PRIVATE            0x00010 /* Will go to the private VCPD mbox */
+#define EVENT_SPAM_INDIR               0x00020 /* spam INDIRs if the vcore's offline */
+#define EVENT_VCORE_MUST_RUN   0x00040 /* spams go to a vcore that will run */
+#define EVENT_NOTHROTTLE               0x00080 /* send all INDIRs (no throttling) */
+#define EVENT_ROUNDROBIN               0x00100 /* pick a vcore, RR style */
+#define EVENT_VCORE_APPRO              0x00200 /* send to where the kernel wants */
+#define EVENT_WAKEUP                   0x00400 /* wake up the process after sending */
 
 /* Event Message Types */
 #define EV_NONE                                         0
@@ -85,6 +77,7 @@ struct event_queue {
        bool                                            ev_alert_pending;
        uint32_t                                        ev_vcore;
        void                                            (*ev_handler)(struct event_queue *);
+       void                                            *ev_udata;
 };
 
 /* Big version, contains storage space for the ev_mbox.  Never access the
@@ -95,13 +88,14 @@ struct event_queue_big {
        bool                                            ev_alert_pending;
        uint32_t                                        ev_vcore;
        void                                            (*ev_handler)(struct event_queue *);
+       void                                            *ev_udata;
        struct event_mbox                       ev_imbox;
 };
 
 /* Vcore state flags.  K_LOCK means the kernel is writing */
 #define VC_K_LOCK                              0x001                           /* CASing with the kernel */
 #define VC_PREEMPTED                   0x002                           /* VC is preempted */
-#define VC_CAN_RCV_MSG                 0x004                           /* can receive FALLBACK */
+#define VC_CAN_RCV_MSG                 0x004                           /* someone will get msg */
 #define VC_UTHREAD_STEALING            0x008                           /* Uthread being stolen */
 #define VC_SCP_NOVCCTX                 0x010                           /* can't go into vc ctx */