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