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 
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  */
unsigned long u64
Definition: types.h:89
unsigned char u8
Definition: types.h:56
unsigned int u32
Definition: types.h:88
unsigned short u16
Definition: types.h:57