feat(papi): wipe remains of VAT
[csit.git] / resources / libraries / python / DUTSetup.py
index 5040223..6e35302 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 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:
@@ -266,7 +266,7 @@ class DUTSetup:
         initialize or remove VFs on QAT.
 
         :param node: DUT node.
-        :crypto_type: Crypto device type - HW_DH895xcc or HW_C3xxx.
+        :crypto_type: Crypto device type - HW_DH895xcc, HW_C3xxx or HW_C4xxx.
         :param numvfs: Number of VFs to initialize, 0 - disable the VFs.
         :param force_init: If True then try to initialize to specific value.
         :type node: dict
@@ -294,7 +294,7 @@ class DUTSetup:
         """Init Crypto QAT device virtual functions on DUT.
 
         :param node: DUT node.
-        :crypto_type: Crypto device type - HW_DH895xcc or HW_C3xxx.
+        :crypto_type: Crypto device type - HW_DH895xcc, HW_C3xxx or HW_C4xxx.
         :param numvfs: Number of VFs to initialize, 0 - disable the VFs.
         :type node: dict
         :type crypto_type: string
@@ -308,6 +308,9 @@ class DUTSetup:
         elif crypto_type == u"HW_C3xxx":
             kernel_mod = u"qat_c3xxx"
             kernel_drv = u"c3xxx"
+        elif crypto_type == u"HW_C4xxx":
+            kernel_mod = u"qat_c4xxx"
+            kernel_drv = u"c4xxx"
         else:
             raise RuntimeError(
                 f"Unsupported crypto device type on {node[u'host']}"
@@ -408,11 +411,11 @@ class DUTSetup:
                 # sriov is not supported and we want 0 VFs
                 # no need to do anything
                 return
-            else:
-                raise RuntimeError(
-                    f"Can't configure {numvfs} VFs on {pf_pci_addr} device "
-                    f"on {node[u'host']} since it doesn't support SR-IOV."
-                )
+
+            raise RuntimeError(
+                f"Can't configure {numvfs} VFs on {pf_pci_addr} device "
+                f"on {node[u'host']} since it doesn't support SR-IOV."
+            )
 
         pci = pf_pci_addr.replace(u":", r"\:")
         command = f"sh -c \"echo {numvfs} | " \
@@ -444,16 +447,21 @@ class DUTSetup:
         )
 
     @staticmethod
-    def pci_driver_unbind_list(node, *pci_addrs):
-        """Unbind PCI devices from current driver on node.
+    def unbind_pci_devices_from_other_driver(node, driver, *pci_addrs):
+        """Unbind PCI devices from driver other than input driver on node.
 
         :param node: DUT node.
+        :param driver: Driver to not unbind from. If None or empty string,
+            will attempt to unbind from the current driver.
         :param pci_addrs: PCI device addresses.
         :type node: dict
+        :type driver: str
         :type pci_addrs: list
         """
         for pci_addr in pci_addrs:
-            DUTSetup.pci_driver_unbind(node, pci_addr)
+            if not driver or \
+                    DUTSetup.get_pci_dev_driver(node, pci_addr) != driver:
+                DUTSetup.pci_driver_unbind(node, pci_addr)
 
     @staticmethod
     def pci_driver_bind(node, pci_addr, driver):
@@ -572,10 +580,9 @@ class DUTSetup:
             # the directory doesn't exist which means the device is not bound
             # to any driver
             return None
-        else:
-            cmd = f"basename $(readlink -f {driver_path})"
-            ret_val, _ = exec_cmd_no_error(node, cmd)
-            return ret_val.strip()
+        cmd = f"basename $(readlink -f {driver_path})"
+        ret_val, _ = exec_cmd_no_error(node, cmd)
+        return ret_val.strip()
 
     @staticmethod
     def verify_kernel_module(node, module, force_load=False):
@@ -677,7 +684,7 @@ class DUTSetup:
                     )
                     # workaround to avoid installation of vpp-api-python
                     exec_cmd_no_error(
-                        node, u"rm -f {vpp_pkg_dir}vpp-api-python.deb",
+                        node, f"rm -f {vpp_pkg_dir}vpp-api-python.deb",
                         timeout=120, sudo=True
                     )
                     exec_cmd_no_error(
@@ -694,7 +701,7 @@ class DUTSetup:
                     )
                     # workaround to avoid installation of vpp-api-python
                     exec_cmd_no_error(
-                        node, u"rm -f {vpp_pkg_dir}vpp-api-python.rpm",
+                        node, f"rm -f {vpp_pkg_dir}vpp-api-python.rpm",
                         timeout=120, sudo=True
                     )
                     exec_cmd_no_error(