// Copyright 2020 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #pragma once #include #include // Shared type and constant declarations between android_pipe.h and // android_pipe_host.h // Buffer descriptor for android_pipe_guest_send() and // android_pipe_guest_recv(). typedef struct AndroidPipeBuffer { uint8_t* data; size_t size; } AndroidPipeBuffer; /* 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 - see goldfish_pipe_error_convert */ 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 { PIPE_WAKE_CLOSED = 1 << 0, /* emulator closed pipe */ PIPE_WAKE_READ = 1 << 1, /* pipe can now be read from */ PIPE_WAKE_WRITE = 1 << 2, /* pipe can now be written to */ PIPE_WAKE_UNLOCK_DMA = 1 << 3, /* unlock this pipe's DMA buffer */ PIPE_WAKE_UNLOCK_DMA_SHARED = 1 << 4, /* unlock DMA buffer of the pipe shared to this pipe */ }; /* Possible pipe closing reasons */ typedef enum PipeCloseReason { PIPE_CLOSE_GRACEFUL = 0, /* guest sent a close command */ PIPE_CLOSE_REBOOT = 1, /* guest rebooted, we're closing the pipes */ PIPE_CLOSE_LOAD_SNAPSHOT = 2, /* close old pipes on snapshot load */ PIPE_CLOSE_ERROR = 3, /* some unrecoverable error on the pipe */ } PipeCloseReason; /* Pipe flags for special transports and properties */ enum AndroidPipeFlags { /* first 4 bits are about whether it's using the normal goldfish pipe * or using virtio-gpu / address space */ ANDROID_PIPE_DEFAULT = 0, ANDROID_PIPE_VIRTIO_GPU_BIT = (1 << 0), ANDROID_PIPE_ADDRESS_SPACE_BIT = (1 << 1), ANDROID_PIPE_RESERVED0_BIT = (1 << 2), ANDROID_PIPE_RESERVED1_BIT = (1 << 3), ANDROID_PIPE_VIRTIO_VSOCK_BIT = (1 << 4), };