aboutsummaryrefslogtreecommitdiffstats
path: root/vhost_user_can.h
blob: 6e2e5d55f0926e908a02098ca916c31a5320ca79 (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
/*
 * Virtio CAN Device
 *
 * Based on virtio_can.h of OpenSynergy's virtio-can RFC
 * https://github.com/OpenSynergy/qemu/tree/virtio-can-spec-rfc-v3
 *
 * Copyright (C) 2021-2023 OpenSynergy GmbH
 * Copyright (c) 2023 Virtual Open Systems SAS.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the
 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 */

#ifndef VHOST_USER_CAN
#define VHOST_USER_CAN

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

/* The following are defined into virtio_can.h -- Delete them in the future */
#define VIRTIO_CAN_S_CTRL_BUSOFF (1u << 0) /* Controller BusOff */
struct virtio_can_config {
    /* CAN controller status */
    __le16 status;
};

typedef struct VHostUserCan {
    VirtIODevice *parent;
    struct vhost_virtqueue *vhost_vqs;
    VirtQueue **virtqs;
    uint16_t num_queues;
    uint32_t queue_size;
    struct virtio_can_config config;
    struct vhost_dev *vhost_dev;
    VirtQueue *ctrl_vq;
    VirtQueue *tx_vq;
    VirtQueue *rx_vq;
    /* Support classic CAN */
    bool support_can_classic;
    /* Support CAN FD */
    bool support_can_fd;
} VHostUserCan;

void vhost_user_can_realize(void);

#endif /* VHOST_USER_CAN */