1#ifndef STREAM_H
2#define STREAM_H
3
4#include "qemu-common.h"
5#include "qom/object.h"
6
7
8#define TYPE_STREAM_SLAVE "stream-slave"
9
10#define STREAM_SLAVE_CLASS(klass) \
11 OBJECT_CLASS_CHECK(StreamSlaveClass, (klass), TYPE_STREAM_SLAVE)
12#define STREAM_SLAVE_GET_CLASS(obj) \
13 OBJECT_GET_CLASS(StreamSlaveClass, (obj), TYPE_STREAM_SLAVE)
14#define STREAM_SLAVE(obj) \
15 INTERFACE_CHECK(StreamSlave, (obj), TYPE_STREAM_SLAVE)
16
17#define STREAM_ATTR_EOP (1 << 0)
18
19typedef struct StreamSlave {
20 Object Parent;
21} StreamSlave;
22
23typedef void (*StreamCanPushNotifyFn)(void *opaque);
24
25typedef struct StreamSlaveClass {
26 InterfaceClass parent;
27
28
29
30
31
32
33
34
35 bool (*can_push)(StreamSlave *obj, StreamCanPushNotifyFn notify,
36 void *notify_opaque);
37
38
39
40
41
42
43
44
45
46
47
48
49 size_t (*push)(StreamSlave *obj, unsigned char *buf, size_t len,
50 uint32_t attr);
51} StreamSlaveClass;
52
53size_t
54stream_push(StreamSlave *sink, uint8_t *buf, size_t len, uint32_t attr);
55
56bool
57stream_can_push(StreamSlave *sink, StreamCanPushNotifyFn notify,
58 void *notify_opaque);
59
60static inline bool stream_attr_has_eop(uint32_t attr)
61{
62 return (attr & STREAM_ATTR_EOP) != 0;
63}
64
65
66#endif
67