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