devices: virtio API cleanup 79/22279/2
authorJakub Grajciar <jgrajcia@cisco.com>
Thu, 26 Sep 2019 08:34:41 +0000 (10:34 +0200)
committerJakub Grajciar <jgrajcia@cisco.com>
Fri, 3 Jan 2020 10:44:17 +0000 (11:44 +0100)
Use consistent API types.

Type: fix

Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
Change-Id: I38a409af770c88c1eb2c68b24abef2a5a91e1b9a

src/vat/api_format.c
src/vnet/CMakeLists.txt
src/vnet/devices/virtio/virtio.api
src/vnet/devices/virtio/virtio_api.c
src/vnet/pci/pci_types.api [new file with mode: 0644]
src/vnet/pci/pci_types_api.c [new file with mode: 0644]
src/vnet/pci/pci_types_api.h [new file with mode: 0644]

index 98081ee..ac04abe 100644 (file)
@@ -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));
index 37f7810..56db742 100644 (file)
@@ -1508,6 +1508,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
 ##############################################################################
index f2a3a41..b191810 100644 (file)
  * 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;
index 9d009f3..ac167e8 100644 (file)
@@ -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 (file)
index 0000000..d3654af
--- /dev/null
@@ -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 (file)
index 0000000..5d1abec
--- /dev/null
@@ -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 (file)
index 0000000..16e126d
--- /dev/null
@@ -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 */