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