summaryrefslogtreecommitdiff
path: root/vdservice/virtio_vdi_port.h
blob: 15b6811ce56062ab4a5aef060fedfbfb7d49729a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#ifndef _H_VIRTIO_VDI_PORT
#define _H_VIRTIO_VDI_PORT

#include "vdi_port.h"

enum {
    VIRTIO_VDI_PORT_EVENT_WRITE=0,
    VIRTIO_VDI_PORT_EVENT_READ,
    VIRTIO_VDI_PORT_EVENT_COUNT
};

class VirtioVDIPort : public VDIPort {
public:
    VirtioVDIPort();
    ~VirtioVDIPort();
    virtual const char *name() { return "VirtioVDIPort"; }
    virtual bool init();
    virtual unsigned get_num_events() { return VIRTIO_VDI_PORT_EVENT_COUNT; }
    virtual void fill_events(HANDLE* handles);
    virtual void handle_event(int event);
    virtual int write();
    virtual int read();

private:
    void write_completion();
    void read_completion();

private:
    static VirtioVDIPort* _singleton;
    HANDLE _handle;
};

#endif //_H_VIRTIO_VDI_PORT