aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/vat/api_format.c21
-rw-r--r--src/vnet/CMakeLists.txt14
-rw-r--r--src/vnet/devices/virtio/virtio.api31
-rw-r--r--src/vnet/devices/virtio/virtio_api.c6
-rw-r--r--src/vnet/pci/pci_types.api24
-rw-r--r--src/vnet/pci/pci_types_api.c57
-rw-r--r--src/vnet/pci/pci_types_api.h27
7 files changed, 161 insertions, 19 deletions
diff --git a/src/vat/api_format.c b/src/vat/api_format.c
index 98081ee6fb9..ac04abe96e6 100644
--- a/src/vat/api_format.c
+++ b/src/vat/api_format.c
@@ -7541,7 +7541,11 @@ api_virtio_pci_create (vat_main_t * vam)
mp->use_random_mac = random_mac;
- mp->pci_addr = htonl (pci_addr);
+ mp->pci_addr.domain = htons (((vlib_pci_addr_t) pci_addr).domain);
+ mp->pci_addr.bus = ((vlib_pci_addr_t) pci_addr).bus;
+ mp->pci_addr.slot = ((vlib_pci_addr_t) pci_addr).slot;
+ mp->pci_addr.function = ((vlib_pci_addr_t) pci_addr).function;
+
mp->features = clib_host_to_net_u64 (features);
mp->gso_enabled = gso_enabled;
@@ -11401,7 +11405,12 @@ static void vl_api_sw_interface_virtio_pci_details_t_handler
u32 as_u32;
} pci_addr_t;
pci_addr_t addr;
- addr.as_u32 = ntohl (mp->pci_addr);
+
+ addr.domain = ntohs (mp->pci_addr.domain);
+ addr.bus = mp->pci_addr.bus;
+ addr.slot = mp->pci_addr.slot;
+ addr.function = mp->pci_addr.function;
+
u8 *pci_addr = format (0, "%04x:%02x:%02x.%x", addr.domain, addr.bus,
addr.slot, addr.function);
@@ -11419,6 +11428,7 @@ static void vl_api_sw_interface_virtio_pci_details_t_handler_json
{
vat_main_t *vam = &vat_main;
vat_json_node_t *node = NULL;
+ vlib_pci_addr_t pci_addr;
if (VAT_JSON_ARRAY != vam->json_tree.type)
{
@@ -11427,8 +11437,13 @@ static void vl_api_sw_interface_virtio_pci_details_t_handler_json
}
node = vat_json_array_add (&vam->json_tree);
+ pci_addr.domain = ntohs (mp->pci_addr.domain);
+ pci_addr.bus = mp->pci_addr.bus;
+ pci_addr.slot = mp->pci_addr.slot;
+ pci_addr.function = mp->pci_addr.function;
+
vat_json_init_object (node);
- vat_json_object_add_uint (node, "pci-addr", ntohl (mp->pci_addr));
+ vat_json_object_add_uint (node, "pci-addr", pci_addr.as_u32);
vat_json_object_add_uint (node, "sw_if_index", ntohl (mp->sw_if_index));
vat_json_object_add_uint (node, "rx_ring_sz", ntohs (mp->rx_ring_sz));
vat_json_object_add_uint (node, "tx_ring_sz", ntohs (mp->tx_ring_sz));
diff --git a/src/vnet/CMakeLists.txt b/src/vnet/CMakeLists.txt
index 37f7810e229..56db74265cc 100644
--- a/src/vnet/CMakeLists.txt
+++ b/src/vnet/CMakeLists.txt
@@ -1509,6 +1509,20 @@ list(APPEND VNET_HEADERS
list(APPEND VNET_API_FILES syslog/syslog.api)
##############################################################################
+# PCI
+##############################################################################
+
+list (APPEND VNET_SOURCES
+ pci/pci_types_api.c
+)
+
+list(APPEND VNET_HEADERS
+ pci/pci_types_api.h
+)
+
+list(APPEND VNET_API_FILES pci/pci_types.api)
+
+##############################################################################
# NHRP
##############################################################################
diff --git a/src/vnet/devices/virtio/virtio.api b/src/vnet/devices/virtio/virtio.api
index f2a3a412126..b191810d71b 100644
--- a/src/vnet/devices/virtio/virtio.api
+++ b/src/vnet/devices/virtio/virtio.api
@@ -13,13 +13,17 @@
* limitations under the License.
*/
-option version = "1.0.0";
+option version = "2.0.0";
+
+import "vnet/interface_types.api";
+import "vnet/ethernet/ethernet_types.api";
+import "vnet/pci/pci_types.api";
+
/** \brief Initialize a new virtio pci interface with the given parameters
@param client_index - opaque cookie to identify the sender
@param context - sender context, to match reply w/ request
- @param pci_addr - pci address as unsigned 32bit integer:
- 0-15 domain, 16-23 bus, 24-28 slot, 29-31 function
+ @param pci_addr - pci address
@param use_random_mac - let the system generate a unique mac address
@param mac_address - mac addr to assign to the interface if use_random not set
@param gso_enabled - enable gso feature if available, 1 to enable
@@ -29,10 +33,10 @@ define virtio_pci_create
{
u32 client_index;
u32 context;
- u32 pci_addr;
- u8 use_random_mac;
- u8 mac_address[6];
- u8 gso_enabled;
+ vl_api_pci_address_t pci_addr;
+ bool use_random_mac;
+ vl_api_mac_address_t mac_address;
+ bool gso_enabled;
u64 features;
};
@@ -45,7 +49,7 @@ define virtio_pci_create_reply
{
u32 context;
i32 retval;
- u32 sw_if_index;
+ vl_api_interface_index_t sw_if_index;
};
/** \brief Delete virtio pci interface
@@ -57,7 +61,7 @@ autoreply define virtio_pci_delete
{
u32 client_index;
u32 context;
- u32 sw_if_index;
+ vl_api_interface_index_t sw_if_index;
};
/** \brief Dump virtio pci interfaces request */
@@ -69,8 +73,7 @@ define sw_interface_virtio_pci_dump
/** \brief Reply for virtio pci interface dump request
@param sw_if_index - software index of virtio pci interface
- @param pci_addr - pci address as unsigned 32bit integer:
- 0-15 domain, 16-23 bus, 24-28 slot, 29-31 function
+ @param pci_addr - pci address
@param mac_addr - native virtio device mac address
@param tx_ring_sz - the number of entries of TX ring
@param rx_ring_sz - the number of entries of RX ring
@@ -79,9 +82,9 @@ define sw_interface_virtio_pci_dump
define sw_interface_virtio_pci_details
{
u32 context;
- u32 sw_if_index;
- u32 pci_addr;
- u8 mac_addr[6];
+ vl_api_interface_index_t sw_if_index;
+ vl_api_pci_address_t pci_addr;
+ vl_api_mac_address_t mac_addr;
u16 tx_ring_sz;
u16 rx_ring_sz;
u64 features;
diff --git a/src/vnet/devices/virtio/virtio_api.c b/src/vnet/devices/virtio/virtio_api.c
index 9d009f37a38..ac167e827c6 100644
--- a/src/vnet/devices/virtio/virtio_api.c
+++ b/src/vnet/devices/virtio/virtio_api.c
@@ -25,6 +25,7 @@
#include <vnet/ip/ip.h>
#include <vnet/devices/virtio/virtio.h>
#include <vnet/devices/virtio/pci.h>
+#include <vnet/pci/pci_types_api.h>
#include <vnet/vnet_msg_enum.h>
@@ -59,7 +60,7 @@ vl_api_virtio_pci_create_t_handler (vl_api_virtio_pci_create_t * mp)
clib_memset (ap, 0, sizeof (*ap));
- ap->addr = ntohl (mp->pci_addr);
+ pci_address_decode (&mp->pci_addr, (vlib_pci_addr_t *) & ap->addr);
if (!mp->use_random_mac)
{
clib_memcpy (ap->mac_addr, mp->mac_address, 6);
@@ -136,7 +137,8 @@ virtio_pci_send_sw_interface_details (vpe_api_main_t * am,
clib_memset (mp, 0, sizeof (*mp));
mp->_vl_msg_id = htons (VL_API_SW_INTERFACE_VIRTIO_PCI_DETAILS);
- mp->pci_addr = htonl (vif->pci_addr.as_u32);
+ pci_address_encode ((vlib_pci_addr_t *) & vif->pci_addr.as_u32,
+ &mp->pci_addr);
mp->sw_if_index = htonl (vif->sw_if_index);
virtio_vring_t *vring = vec_elt_at_index (vif->rxq_vrings, 0);
mp->rx_ring_sz = htons (vring->size);
diff --git a/src/vnet/pci/pci_types.api b/src/vnet/pci/pci_types.api
new file mode 100644
index 00000000000..d3654af536c
--- /dev/null
+++ b/src/vnet/pci/pci_types.api
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2019 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+option version = "1.0.0";
+
+typedef pci_address
+{
+ u16 domain;
+ u8 bus;
+ u8 slot;
+ u8 function;
+};
diff --git a/src/vnet/pci/pci_types_api.c b/src/vnet/pci/pci_types_api.c
new file mode 100644
index 00000000000..5d1abec5af8
--- /dev/null
+++ b/src/vnet/pci/pci_types_api.c
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2019 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <vlibapi/api_types.h>
+#include <vnet/pci/pci_types_api.h>
+
+#define vl_typedefs /* define message structures */
+#include <vnet/vnet_all_api_h.h>
+#undef vl_typedefs
+
+#define vl_endianfun /* define message structures */
+#include <vnet/vnet_all_api_h.h>
+#undef vl_endianfun
+
+/* instantiate all the print functions we know about */
+#define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__)
+#define vl_printfun
+#include <vnet/vnet_all_api_h.h>
+#undef vl_printfun
+
+void
+pci_address_decode (const vl_api_pci_address_t * in, vlib_pci_addr_t * out)
+{
+ out->domain = in->domain;
+ out->bus = in->bus;
+ out->slot = in->slot;
+ out->function = in->function;
+}
+
+void
+pci_address_encode (const vlib_pci_addr_t * in, vl_api_pci_address_t * out)
+{
+ out->domain = in->domain;
+ out->bus = in->bus;
+ out->slot = in->slot;
+ out->function = in->function;
+}
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */
diff --git a/src/vnet/pci/pci_types_api.h b/src/vnet/pci/pci_types_api.h
new file mode 100644
index 00000000000..16e126d5c99
--- /dev/null
+++ b/src/vnet/pci/pci_types_api.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2019 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __PCI_TYPES_API_H__
+#define __PCI_TYPES_API_H__
+
+#include <vlibapi/api_types.h>
+#include <vlib/pci/pci.h>
+
+struct _vl_api_pci_address;
+
+extern void pci_address_decode (const struct _vl_api_pci_address * in, vlib_pci_addr_t * out);
+extern void pci_address_encode (const vlib_pci_addr_t * in, struct _vl_api_pci_address * out);
+
+#endif /* PCI_TYPES_API_H */