xref: /qemu/include/io/channel-buffer.h (revision db1015e92e04835c9eb50c29625fe566d1202dbd)
1d98e4eb7SDaniel P. Berrange /*
2d98e4eb7SDaniel P. Berrange  * QEMU I/O channels memory buffer driver
3d98e4eb7SDaniel P. Berrange  *
4d98e4eb7SDaniel P. Berrange  * Copyright (c) 2015 Red Hat, Inc.
5d98e4eb7SDaniel P. Berrange  *
6d98e4eb7SDaniel P. Berrange  * This library is free software; you can redistribute it and/or
7d98e4eb7SDaniel P. Berrange  * modify it under the terms of the GNU Lesser General Public
8d98e4eb7SDaniel P. Berrange  * License as published by the Free Software Foundation; either
9d98e4eb7SDaniel P. Berrange  * version 2 of the License, or (at your option) any later version.
10d98e4eb7SDaniel P. Berrange  *
11d98e4eb7SDaniel P. Berrange  * This library is distributed in the hope that it will be useful,
12d98e4eb7SDaniel P. Berrange  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13d98e4eb7SDaniel P. Berrange  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14d98e4eb7SDaniel P. Berrange  * Lesser General Public License for more details.
15d98e4eb7SDaniel P. Berrange  *
16d98e4eb7SDaniel P. Berrange  * You should have received a copy of the GNU Lesser General Public
17d98e4eb7SDaniel P. Berrange  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
18d98e4eb7SDaniel P. Berrange  *
19d98e4eb7SDaniel P. Berrange  */
20d98e4eb7SDaniel P. Berrange 
212a6a4076SMarkus Armbruster #ifndef QIO_CHANNEL_BUFFER_H
222a6a4076SMarkus Armbruster #define QIO_CHANNEL_BUFFER_H
23d98e4eb7SDaniel P. Berrange 
24d98e4eb7SDaniel P. Berrange #include "io/channel.h"
25*db1015e9SEduardo Habkost #include "qom/object.h"
26d98e4eb7SDaniel P. Berrange 
27d98e4eb7SDaniel P. Berrange #define TYPE_QIO_CHANNEL_BUFFER "qio-channel-buffer"
28*db1015e9SEduardo Habkost typedef struct QIOChannelBuffer QIOChannelBuffer;
29d98e4eb7SDaniel P. Berrange #define QIO_CHANNEL_BUFFER(obj)                                     \
30d98e4eb7SDaniel P. Berrange     OBJECT_CHECK(QIOChannelBuffer, (obj), TYPE_QIO_CHANNEL_BUFFER)
31d98e4eb7SDaniel P. Berrange 
32d98e4eb7SDaniel P. Berrange 
33d98e4eb7SDaniel P. Berrange /**
34d98e4eb7SDaniel P. Berrange  * QIOChannelBuffer:
35d98e4eb7SDaniel P. Berrange  *
36d98e4eb7SDaniel P. Berrange  * The QIOChannelBuffer object provides a channel implementation
37d98e4eb7SDaniel P. Berrange  * that is able to perform I/O to/from a memory buffer.
38d98e4eb7SDaniel P. Berrange  *
39d98e4eb7SDaniel P. Berrange  */
40d98e4eb7SDaniel P. Berrange 
41d98e4eb7SDaniel P. Berrange struct QIOChannelBuffer {
42d98e4eb7SDaniel P. Berrange     QIOChannel parent;
43d98e4eb7SDaniel P. Berrange     size_t capacity; /* Total allocated memory */
44d98e4eb7SDaniel P. Berrange     size_t usage;    /* Current size of data */
45d98e4eb7SDaniel P. Berrange     size_t offset;   /* Offset for future I/O ops */
46e8f117f3SDaniel P. Berrange     uint8_t *data;
47d98e4eb7SDaniel P. Berrange };
48d98e4eb7SDaniel P. Berrange 
49d98e4eb7SDaniel P. Berrange 
50d98e4eb7SDaniel P. Berrange /**
51d98e4eb7SDaniel P. Berrange  * qio_channel_buffer_new:
52d98e4eb7SDaniel P. Berrange  * @capacity: the initial buffer capacity to allocate
53d98e4eb7SDaniel P. Berrange  *
54d98e4eb7SDaniel P. Berrange  * Allocate a new buffer which is initially empty
55d98e4eb7SDaniel P. Berrange  *
56d98e4eb7SDaniel P. Berrange  * Returns: the new channel object
57d98e4eb7SDaniel P. Berrange  */
58d98e4eb7SDaniel P. Berrange QIOChannelBuffer *
59d98e4eb7SDaniel P. Berrange qio_channel_buffer_new(size_t capacity);
60d98e4eb7SDaniel P. Berrange 
612a6a4076SMarkus Armbruster #endif /* QIO_CHANNEL_BUFFER_H */
62