-
Notifications
You must be signed in to change notification settings - Fork 171
/
vr_dpdk_virtio.h
102 lines (88 loc) · 4.15 KB
/
vr_dpdk_virtio.h
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*
* vr_dpdk_virtio.h - header for DPDK virtio forwarding infrastructure.
*
*
* Copyright (c) 2014 Juniper Networks, Inc. All rights reserved.
*/
#ifndef __VR_DPDK_VIRTIO_H__
#define __VR_DPDK_VIRTIO_H__
/*
* Burst size for packets from a VM
*/
#define VR_DPDK_VIRTIO_RX_BURST_SZ VR_DPDK_RX_BURST_SZ
/*
* Burst size for packets to a VM
*/
#define VR_DPDK_VIRTIO_TX_BURST_SZ VR_DPDK_TX_BURST_SZ
/*
* Maximum number of queues per virtio device
*/
#define VR_DPDK_VIRTIO_MAX_QUEUES 1
typedef enum vq_ready_state {
VQ_NOT_READY,
VQ_READY,
} vq_ready_state_t;
/* virtio queue */
typedef struct vr_dpdk_virtioq {
struct vring_desc *vdv_desc; /**< Virtqueue descriptor ring. */
struct vring_avail *vdv_avail; /**< Virtqueue available ring. */
struct vring_used *vdv_used; /**< Virtqueue used ring. */
uint32_t vdv_size; /**< Size of descriptor ring. */
volatile uint16_t vdv_last_used_idx;
volatile uint16_t vdv_last_used_idx_res;
uint16_t vdv_ready_state;
uint16_t vdv_vif_idx;
/* Big and less frequently used fields */
int vdv_callfd; /**< Used to notify the guest (trigger interrupt). */
int vdv_kickfd; /**< Currently unused as polling mode is enabled. */
/* TODO: not used
int vdv_enabled_state;
int vdv_zero_copy;
*/
DPDK_DEBUG_VAR(uint32_t vdv_hash);
} __rte_cache_aligned vr_dpdk_virtioq_t;
typedef struct vr_dpdk_uvh_mmap_addr{
uint64_t unmap_mmap_addr; /**< mmap() returned address */
uint64_t unmap_size; /**< Size of allocated memory */
uint64_t unmap_blksz; /**< fd block size */
} vr_dpdk_uvh_mmap_addr_t;
typedef struct vr_dpdk_uvh_vif_mmap_addr{
uint32_t vu_nregions;
struct vr_dpdk_uvh_mmap_addr vu_mmap_data[VR_MAX_INTERFACES];
} vr_dpdk_uvh_vif_mmap_addr_t;
int vr_dpdk_virtio_uvh_get_blk_size(int fd, uint64_t *const blksize);
int vr_dpdk_virtio_uvh_vif_munmap(vr_dpdk_uvh_vif_mmap_addr_t *const vif_mmap_addrs);
int vr_dpdk_virtio_uvh_vif_region_munmap(vr_dpdk_uvh_mmap_addr_t *const vif_data_mmap);
uint16_t vr_dpdk_virtio_nrxqs(struct vr_interface *vif);
uint16_t vr_dpdk_virtio_ntxqs(struct vr_interface *vif);
struct vr_dpdk_queue *
vr_dpdk_virtio_rx_queue_init(unsigned int lcore_id, struct vr_interface *vif,
unsigned int queue_id);
struct vr_dpdk_queue *
vr_dpdk_virtio_tx_queue_init(unsigned int lcore_id, struct vr_interface *vif,
unsigned int queue_id);
int vr_dpdk_virtio_set_vring_base(unsigned int vif_idx, unsigned int vring_idx,
unsigned int vring_base);
int vr_dpdk_virtio_get_vring_base(unsigned int vif_idx, unsigned int vring_idx,
unsigned int *vring_basep);
int vr_dpdk_virtio_recover_vring_base(unsigned int vif_idx, unsigned int vring_idx);
int vr_dpdk_set_vring_addr(unsigned int vif_idx, unsigned int vring_idx,
struct vring_desc *vrucv_desc,
struct vring_avail *vrucv_avail,
struct vring_used *vrucv_used);
int vr_dpdk_set_ring_num_desc(unsigned int vif_idx, unsigned int vring_idx,
unsigned int num_desc);
int vr_dpdk_set_ring_callfd(unsigned int vif_idx, unsigned int vring_idx,
int callfd);
int vr_dpdk_set_virtq_ready(unsigned int vif_idx, unsigned int vring_idx,
vq_ready_state_t ready);
void vr_dpdk_virtio_set_vif_client(unsigned int idx, void *client);
void *vr_dpdk_virtio_get_vif_client(unsigned int idx);
void vr_dpdk_virtio_xstats_update(struct vr_interface_stats *stats,
struct vr_dpdk_queue *queue);
extern struct rte_port_in_ops vr_dpdk_virtio_reader_ops;
extern struct rte_port_out_ops vr_dpdk_virtio_writer_ops;
extern vr_dpdk_uvh_vif_mmap_addr_t vr_dpdk_virtio_uvh_vif_mmap[VR_MAX_INTERFACES];
extern struct vr_dpdk_virtioq vr_dpdk_virtio_rxqs[VR_MAX_INTERFACES][VR_DPDK_VIRTIO_MAX_QUEUES];
extern struct vr_dpdk_virtioq vr_dpdk_virtio_txqs[VR_MAX_INTERFACES][VR_DPDK_VIRTIO_MAX_QUEUES];
#endif /* __VR_DPDK_VIRTIO_H__ */