summaryrefslogtreecommitdiffstats
path: root/vhost_user_console.h
blob: e0e40e087e93d9935e934548a7d60960feb46911 (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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
 *
 * Copyright (c) 2023-2024 Virtual Open Systems SAS.
 *
 * This work is licensed under the terms of the GNU GPL, version 2 or
 * (at your option) any later version.  See the COPYING file in the
 * top-level directory.
 *
 */

#ifndef VHOST_USER_CONSOLE
#define VHOST_USER_CONSOLE

#include "virtio_loopback.h"
#include "vhost_loopback.h"
#include "vhost_user_loopback.h"

/* Feature bits */
#define VIRTIO_CONSOLE_F_SIZE 0        /* Does host provide console size? */
#define VIRTIO_CONSOLE_F_MULTIPORT 1   /* Does host provide multiple ports? */
#define VIRTIO_CONSOLE_F_EMERG_WRITE 2 /* Does host support emergency write? */

/* Some events for control messages */
#define VIRTIO_CONSOLE_DEVICE_READY 0
#define VIRTIO_CONSOLE_PORT_ADD 1
#define VIRTIO_CONSOLE_PORT_REMOVE 2
#define VIRTIO_CONSOLE_PORT_READY 3
#define VIRTIO_CONSOLE_CONSOLE_PORT 4
#define VIRTIO_CONSOLE_RESIZE 5
#define VIRTIO_CONSOLE_PORT_OPEN 6
#define VIRTIO_CONSOLE_PORT_NAME 7

struct virtio_console_config {
    /* colums of the screens */
    __virtio16 cols;
    /* rows of the screens */
    __virtio16 rows;
    /* max. number of ports this device can hold */
    __virtio32 max_nr_ports;
    /* emergency write register */
    __virtio32 emerg_wr;
};

/*
 * A message that's passed between the Host and the Guest for a
 * particular port.
 */
struct virtio_console_control {
    __virtio32 id;       /* Port number */
    __virtio16 event;    /* The kind of control event (see below) */
    __virtio16 value;    /* Extra information for the key */
};

typedef struct VHostUserConsole {
    VirtIODevice *parent;
    struct vhost_virtqueue *vhost_vqs;
    VirtQueue **virtqs;
    uint16_t num_queues;
    uint32_t queue_size;
    struct virtio_console_config config;
    struct vhost_dev *vhost_dev;
    VirtQueue *rx_vq;
    VirtQueue *tx_vq;
    VirtQueue *ctrl_rx_vq;
    VirtQueue *ctrl_tx_vq;
} VHostUserConsole;

void vhost_user_console_realize(int queue_num, int queue_size);

#endif /* VHOST_USER_CONSOLE */