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