x86: Rename VPD (XCC)
[akaros.git] / kern / include / ros / fdtap.h
1 /* Copyright (c) 2015 Google Inc
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details. */
4
5 #pragma once
6
7 #include <ros/event.h>
8
9 /* FD Tap commands.  The commands get passed to the device, but intermediate
10  * code will process them to some extent. */
11 #define FDTAP_CMD_ADD                   1
12 #define FDTAP_CMD_REM                   2
13 #define FDTAP_CMD_MOD                   3
14
15 /* FD Tap Event/Filter types.  These are somewhat a mix of kqueue and epoll
16  * filters and are in flux.  For instance, we don't support things like
17  * ONESHOT/DISPATCH yet.
18  *
19  * When using these, you're communicating directly with the device, so really
20  * anything goes, but we'll try to standardize on a few flags. */
21 #define FDTAP_FILT_READABLE             0x00000001
22 #define FDTAP_FILT_WRITABLE             0x00000002
23 #define FDTAP_FILT_WRITTEN              0x00000004
24 #define FDTAP_FILT_DELETED              0x00000008
25 #define FDTAP_FILT_ERROR                0x00000010      /* may overwrite *data */
26 #define FDTAP_FILT_RENAME               0x00000020
27 #define FDTAP_FILT_TRUNCATE             0x00000040
28 #define FDTAP_FILT_ATTRIB               0x00000080
29 #define FDTAP_FILT_PRIORITY             0x00000100
30 #define FDTAP_FILT_HANGUP               0x00000200
31 #define FDTAP_FILT_RDHUP                0x00000400
32
33 /* When an event on FD matches filter, that event will be sent to ev_q with
34  * ev_id, with an optional data blob passed back.  The specifics will depend on
35  * the type of ev_q used.  For a CEQ, the event will coalesce, and the data will
36  * be a 'last write wins'. */
37 struct fd_tap_req {
38         int                                                     fd;
39         int                                                     cmd;
40         int                                                     filter;
41         int                                                     ev_id;
42         struct event_queue                      *ev_q;
43         void                                            *data;
44 };