FD.io VPP
v20.09-64-g4f7b92f0a
Vector Packet Processing
virtio_pci_modern.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2020 Cisco and/or its affiliates.
3
* Licensed under the Apache License, Version 2.0 (the "License");
4
* you may not use this file except in compliance with the License.
5
* You may obtain a copy of the License at:
6
*
7
* http://www.apache.org/licenses/LICENSE-2.0
8
*
9
* Unless required by applicable law or agreed to in writing, software
10
* distributed under the License is distributed on an "AS IS" BASIS,
11
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
* See the License for the specific language governing permissions and
13
* limitations under the License.
14
*/
15
16
#include <
vnet/devices/virtio/virtio.h
>
17
#include <
vnet/devices/virtio/pci.h
>
18
19
/* common configuration */
20
#define VIRTIO_FEATURE_SELECT_HI 1
21
#define VIRTIO_FEATURE_SELECT_LO 0
22
23
#define VIRTIO_DEVICE_FEATURE_SELECT_OFFSET(v) \
24
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
25
device_feature_select))
26
#define VIRTIO_DEVICE_FEATURE_OFFSET(v) \
27
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
28
device_feature))
29
#define VIRTIO_DRIVER_FEATURE_SELECT_OFFSET(v) \
30
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
31
driver_feature_select))
32
#define VIRTIO_DRIVER_FEATURE_OFFSET(v) \
33
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
34
driver_feature))
35
#define VIRTIO_MSIX_CONFIG_VECTOR_OFFSET(v) \
36
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
37
msix_config))
38
#define VIRTIO_NUM_QUEUES_OFFSET(v) \
39
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
40
num_queues))
41
#define VIRTIO_DEVICE_STATUS_OFFSET(v) \
42
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
43
device_status))
44
#define VIRTIO_CONFIG_GENERATION_OFFSET(v) \
45
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
46
config_generation))
47
#define VIRTIO_QUEUE_SELECT_OFFSET(v) \
48
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
49
queue_select))
50
#define VIRTIO_QUEUE_SIZE_OFFSET(v) \
51
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
52
queue_size))
53
#define VIRTIO_QUEUE_MSIX_VECTOR_OFFSET(v) \
54
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
55
queue_msix_vector))
56
#define VIRTIO_QUEUE_ENABLE_OFFSET(v) \
57
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
58
queue_enable))
59
#define VIRTIO_QUEUE_NOTIFY_OFF_OFFSET(v) \
60
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
61
queue_notify_off))
62
#define VIRTIO_QUEUE_DESC_OFFSET(v) \
63
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
64
queue_desc))
65
#define VIRTIO_QUEUE_DRIVER_OFFSET(v) \
66
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
67
queue_driver))
68
#define VIRTIO_QUEUE_DEVICE_OFFSET(v) \
69
(v->common_offset + STRUCT_OFFSET_OF (virtio_pci_common_cfg_t, \
70
queue_device))
71
/* device configuration */
72
#define VIRTIO_MAC_OFFSET(v) \
73
(v->device_offset + STRUCT_OFFSET_OF (virtio_net_config_t, \
74
mac))
75
#define VIRTIO_STATUS_OFFSET(v) \
76
(v->device_offset + STRUCT_OFFSET_OF (virtio_net_config_t, \
77
status))
78
#define VIRTIO_MAX_VIRTQUEUE_PAIRS_OFFSET(v) \
79
(v->device_offset + STRUCT_OFFSET_OF (virtio_net_config_t, \
80
max_virtqueue_pairs))
81
#define VIRTIO_MTU_OFFSET(v) \
82
(v->device_offset + STRUCT_OFFSET_OF (virtio_net_config_t, \
83
mtu))
84
/* interrupt service routine */
85
#define VIRTIO_ISR_OFFSET(v) (v->isr_offset)
86
/* notification */
87
#define VIRTIO_NOTIFICATION_OFFSET(v) (v->notify_offset)
88
89
#define _(t) \
90
static_always_inline t \
91
virtio_pci_reg_read_##t (virtio_if_t * vif, u32 offset) \
92
{ \
93
t val; \
94
val = *(volatile t *) (vif->bar + offset); \
95
return val; \
96
}
97
98
_(
u64
);
99
_(
u32
);
100
_(
u16
);
101
_(
u8
);
102
103
#undef _
104
105
#define _(t) \
106
static_always_inline void \
107
virtio_pci_reg_write_##t (virtio_if_t * vif, u32 offset, t val) \
108
{ \
109
*(volatile t *) ((u8 *) vif->bar + offset) = val; \
110
}
111
112
_(
u64
);
113
_(
u32
);
114
_(
u16
);
115
_(
u8
);
116
117
#undef _
118
119
/*
120
* fd.io coding-style-patch-verification: ON
121
*
122
* Local Variables:
123
* eval: (c-set-style "gnu")
124
* End:
125
*/
u64
unsigned long u64
Definition:
types.h:89
u8
unsigned char u8
Definition:
types.h:56
u32
unsigned int u32
Definition:
types.h:88
u16
unsigned short u16
Definition:
types.h:57
pci.h
virtio.h
src
vnet
devices
virtio
virtio_pci_modern.h
Generated on Thu Jun 3 2021 16:05:34 for FD.io VPP by
1.8.13