qemu/include/hw/stream.h
<<
>>
Prefs
   1#ifndef STREAM_H
   2#define STREAM_H
   3
   4#include "qom/object.h"
   5
   6#define TYPE_STREAM_SINK "stream-sink"
   7
   8typedef struct StreamSinkClass StreamSinkClass;
   9DECLARE_CLASS_CHECKERS(StreamSinkClass, STREAM_SINK,
  10                       TYPE_STREAM_SINK)
  11#define STREAM_SINK(obj) \
  12     INTERFACE_CHECK(StreamSink, (obj), TYPE_STREAM_SINK)
  13
  14typedef struct StreamSink StreamSink;
  15
  16typedef void (*StreamCanPushNotifyFn)(void *opaque);
  17
  18struct StreamSinkClass {
  19    InterfaceClass parent;
  20    /**
  21     * can push - determine if a stream sink is capable of accepting at least
  22     * one byte of data. Returns false if cannot accept. If not implemented, the
  23     * sink is assumed to always be capable of receiving.
  24     * @notify: Optional callback that the sink will call when the sink is
  25     * capable of receiving again. Only called if false is returned.
  26     * @notify_opaque: opaque data to pass to notify call.
  27     */
  28    bool (*can_push)(StreamSink *obj, StreamCanPushNotifyFn notify,
  29                     void *notify_opaque);
  30    /**
  31     * push - push data to a Stream sink. The number of bytes pushed is
  32     * returned. If the sink short returns, the master must wait before trying
  33     * again, the sink may continue to just return 0 waiting for the vm time to
  34     * advance. The can_push() function can be used to trap the point in time
  35     * where the sink is ready to receive again, otherwise polling on a QEMU
  36     * timer will work.
  37     * @obj: Stream sink to push to
  38     * @buf: Data to write
  39     * @len: Maximum number of bytes to write
  40     * @eop: End of packet flag
  41     */
  42    size_t (*push)(StreamSink *obj, unsigned char *buf, size_t len, bool eop);
  43};
  44
  45size_t
  46stream_push(StreamSink *sink, uint8_t *buf, size_t len, bool eop);
  47
  48bool
  49stream_can_push(StreamSink *sink, StreamCanPushNotifyFn notify,
  50                void *notify_opaque);
  51
  52
  53#endif /* STREAM_H */
  54