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