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 */
11enum 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 */
18enum 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 */
26enum 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 */
44enum 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 */
59enum 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
65enum 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
80enum 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 */
99

source code of linux/drivers/platform/goldfish/goldfish_pipe_qemu.h