1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright 2011 Google LLC 3*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT 4*61046927SAndroid Build Coastguard Worker */ 5*61046927SAndroid Build Coastguard Worker #ifndef __QEMU_PIPE_STREAM_H 6*61046927SAndroid Build Coastguard Worker #define __QEMU_PIPE_STREAM_H 7*61046927SAndroid Build Coastguard Worker 8*61046927SAndroid Build Coastguard Worker /* This file implements an IOStream that uses a QEMU fast-pipe 9*61046927SAndroid Build Coastguard Worker * to communicate with the emulator's 'opengles' service. See 10*61046927SAndroid Build Coastguard Worker * <hardware/qemu_pipe.h> for more details. 11*61046927SAndroid Build Coastguard Worker */ 12*61046927SAndroid Build Coastguard Worker #include <stdlib.h> 13*61046927SAndroid Build Coastguard Worker 14*61046927SAndroid Build Coastguard Worker #include <memory> 15*61046927SAndroid Build Coastguard Worker 16*61046927SAndroid Build Coastguard Worker #include "gfxstream/guest/IOStream.h" 17*61046927SAndroid Build Coastguard Worker 18*61046927SAndroid Build Coastguard Worker class QemuPipeStream : public gfxstream::guest::IOStream { 19*61046927SAndroid Build Coastguard Worker public: 20*61046927SAndroid Build Coastguard Worker typedef enum { ERR_INVALID_SOCKET = -1000 } QemuPipeStreamError; 21*61046927SAndroid Build Coastguard Worker 22*61046927SAndroid Build Coastguard Worker explicit QemuPipeStream(size_t bufsize = 10000); 23*61046927SAndroid Build Coastguard Worker ~QemuPipeStream(); 24*61046927SAndroid Build Coastguard Worker 25*61046927SAndroid Build Coastguard Worker virtual int connect(const char* serviceName = nullptr); 26*61046927SAndroid Build Coastguard Worker virtual uint64_t processPipeInit(); 27*61046927SAndroid Build Coastguard Worker 28*61046927SAndroid Build Coastguard Worker virtual void* allocBuffer(size_t minSize); 29*61046927SAndroid Build Coastguard Worker virtual int commitBuffer(size_t size); 30*61046927SAndroid Build Coastguard Worker virtual const unsigned char* readFully(void* buf, size_t len); 31*61046927SAndroid Build Coastguard Worker virtual const unsigned char* commitBufferAndReadFully(size_t size, void* buf, size_t len); 32*61046927SAndroid Build Coastguard Worker virtual const unsigned char* read(void* buf, size_t* inout_len); 33*61046927SAndroid Build Coastguard Worker 34*61046927SAndroid Build Coastguard Worker bool valid(); 35*61046927SAndroid Build Coastguard Worker int recv(void* buf, size_t len); 36*61046927SAndroid Build Coastguard Worker 37*61046927SAndroid Build Coastguard Worker virtual int writeFully(const void* buf, size_t len); 38*61046927SAndroid Build Coastguard Worker 39*61046927SAndroid Build Coastguard Worker private: 40*61046927SAndroid Build Coastguard Worker int m_sock; 41*61046927SAndroid Build Coastguard Worker size_t m_bufsize; 42*61046927SAndroid Build Coastguard Worker unsigned char* m_buf; 43*61046927SAndroid Build Coastguard Worker size_t m_read; 44*61046927SAndroid Build Coastguard Worker size_t m_readLeft; 45*61046927SAndroid Build Coastguard Worker QemuPipeStream(int sock, size_t bufSize); 46*61046927SAndroid Build Coastguard Worker }; 47*61046927SAndroid Build Coastguard Worker 48*61046927SAndroid Build Coastguard Worker #endif 49