xref: /qemu/include/io/channel-buffer.h (revision e0622ae3)
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
9*e0622ae3SChetan Pant  * version 2.1 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"
25db1015e9SEduardo Habkost #include "qom/object.h"
26d98e4eb7SDaniel P. Berrange 
27d98e4eb7SDaniel P. Berrange #define TYPE_QIO_CHANNEL_BUFFER "qio-channel-buffer"
288063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(QIOChannelBuffer, QIO_CHANNEL_BUFFER)
29d98e4eb7SDaniel P. Berrange 
30d98e4eb7SDaniel P. Berrange 
31d98e4eb7SDaniel P. Berrange /**
32d98e4eb7SDaniel P. Berrange  * QIOChannelBuffer:
33d98e4eb7SDaniel P. Berrange  *
34d98e4eb7SDaniel P. Berrange  * The QIOChannelBuffer object provides a channel implementation
35d98e4eb7SDaniel P. Berrange  * that is able to perform I/O to/from a memory buffer.
36d98e4eb7SDaniel P. Berrange  *
37d98e4eb7SDaniel P. Berrange  */
38d98e4eb7SDaniel P. Berrange 
39d98e4eb7SDaniel P. Berrange struct QIOChannelBuffer {
40d98e4eb7SDaniel P. Berrange     QIOChannel parent;
41d98e4eb7SDaniel P. Berrange     size_t capacity; /* Total allocated memory */
42d98e4eb7SDaniel P. Berrange     size_t usage;    /* Current size of data */
43d98e4eb7SDaniel P. Berrange     size_t offset;   /* Offset for future I/O ops */
44e8f117f3SDaniel P. Berrange     uint8_t *data;
45d98e4eb7SDaniel P. Berrange };
46d98e4eb7SDaniel P. Berrange 
47d98e4eb7SDaniel P. Berrange 
48d98e4eb7SDaniel P. Berrange /**
49d98e4eb7SDaniel P. Berrange  * qio_channel_buffer_new:
50d98e4eb7SDaniel P. Berrange  * @capacity: the initial buffer capacity to allocate
51d98e4eb7SDaniel P. Berrange  *
52d98e4eb7SDaniel P. Berrange  * Allocate a new buffer which is initially empty
53d98e4eb7SDaniel P. Berrange  *
54d98e4eb7SDaniel P. Berrange  * Returns: the new channel object
55d98e4eb7SDaniel P. Berrange  */
56d98e4eb7SDaniel P. Berrange QIOChannelBuffer *
57d98e4eb7SDaniel P. Berrange qio_channel_buffer_new(size_t capacity);
58d98e4eb7SDaniel P. Berrange 
592a6a4076SMarkus Armbruster #endif /* QIO_CHANNEL_BUFFER_H */
60