Merge tag 'platform-drivers-x86-v4.20-1' of git://git.infradead.org/linux-platform...
[sfrench/cifs-2.6.git] / drivers / platform / goldfish / goldfish_pipe_qemu.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * IMPORTANT: The following constants must match the ones used and defined in
4  * external/qemu/include/hw/misc/goldfish_pipe.h
5  */
6
7 #ifndef GOLDFISH_PIPE_QEMU_H
8 #define GOLDFISH_PIPE_QEMU_H
9
10 /* List of bitflags returned in status of CMD_POLL command */
11 enum PipePollFlags {
12         PIPE_POLL_IN    = 1 << 0,
13         PIPE_POLL_OUT   = 1 << 1,
14         PIPE_POLL_HUP   = 1 << 2
15 };
16
17 /* Possible status values used to signal errors */
18 enum PipeErrors {
19         PIPE_ERROR_INVAL        = -1,
20         PIPE_ERROR_AGAIN        = -2,
21         PIPE_ERROR_NOMEM        = -3,
22         PIPE_ERROR_IO           = -4
23 };
24
25 /* Bit-flags used to signal events from the emulator */
26 enum PipeWakeFlags {
27         /* emulator closed pipe */
28         PIPE_WAKE_CLOSED                = 1 << 0,
29
30         /* pipe can now be read from */
31         PIPE_WAKE_READ                  = 1 << 1,
32
33         /* pipe can now be written to */
34         PIPE_WAKE_WRITE                 = 1 << 2,
35
36         /* unlock this pipe's DMA buffer */
37         PIPE_WAKE_UNLOCK_DMA            = 1 << 3,
38
39         /* unlock DMA buffer of the pipe shared to this pipe */
40         PIPE_WAKE_UNLOCK_DMA_SHARED     = 1 << 4,
41 };
42
43 /* Possible pipe closing reasons */
44 enum PipeCloseReason {
45         /* guest sent a close command */
46         PIPE_CLOSE_GRACEFUL             = 0,
47
48         /* guest rebooted, we're closing the pipes */
49         PIPE_CLOSE_REBOOT               = 1,
50
51         /* close old pipes on snapshot load */
52         PIPE_CLOSE_LOAD_SNAPSHOT        = 2,
53
54         /* some unrecoverable error on the pipe */
55         PIPE_CLOSE_ERROR                = 3,
56 };
57
58 /* Bit flags for the 'flags' field */
59 enum PipeFlagsBits {
60         BIT_CLOSED_ON_HOST = 0,  /* pipe closed by host */
61         BIT_WAKE_ON_WRITE  = 1,  /* want to be woken on writes */
62         BIT_WAKE_ON_READ   = 2,  /* want to be woken on reads */
63 };
64
65 enum PipeRegs {
66         PIPE_REG_CMD = 0,
67
68         PIPE_REG_SIGNAL_BUFFER_HIGH = 4,
69         PIPE_REG_SIGNAL_BUFFER = 8,
70         PIPE_REG_SIGNAL_BUFFER_COUNT = 12,
71
72         PIPE_REG_OPEN_BUFFER_HIGH = 20,
73         PIPE_REG_OPEN_BUFFER = 24,
74
75         PIPE_REG_VERSION = 36,
76
77         PIPE_REG_GET_SIGNALLED = 48,
78 };
79
80 enum PipeCmdCode {
81         /* to be used by the pipe device itself */
82         PIPE_CMD_OPEN           = 1,
83
84         PIPE_CMD_CLOSE,
85         PIPE_CMD_POLL,
86         PIPE_CMD_WRITE,
87         PIPE_CMD_WAKE_ON_WRITE,
88         PIPE_CMD_READ,
89         PIPE_CMD_WAKE_ON_READ,
90
91         /*
92          * TODO(zyy): implement a deferred read/write execution to allow
93          * parallel processing of pipe operations on the host.
94          */
95         PIPE_CMD_WAKE_ON_DONE_IO,
96 };
97
98 #endif /* GOLDFISH_PIPE_QEMU_H */