From 76d42fe3e3f2007e4fe18e27e0a68840713cda2a Mon Sep 17 00:00:00 2001
From: Tom Rix <trix@redhat.com>
Date: Wed, 13 May 2020 10:57:37 -0400
Subject: [PATCH 1/2] Reinclude fpgaport in tools
In existing documentation fpgaport is the used to do the driver
ioctl call for fme port release and assign. This is needed for
the sr-iov workflow.
Import from 1.4.0 and change to python3
Signed-off-by: Tom Rix <trix@redhat.com>
---
tools/CMakeLists.txt | 1 +
tools/fpgaport/CMakeLists.txt | 29 ++++++++++++++
tools/fpgaport/fpgaport | 72 +++++++++++++++++++++++++++++++++++
3 files changed, 102 insertions(+)
create mode 100644 tools/fpgaport/CMakeLists.txt
create mode 100755 tools/fpgaport/fpgaport
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
index 9674af02..d4b55036 100644
--- a/tools/CMakeLists.txt
+++ b/tools/CMakeLists.txt
@@ -31,6 +31,7 @@ opae_add_subdirectory(libboard/board_dc)
opae_add_subdirectory(fpgaconf)
opae_add_subdirectory(fpgainfo)
opae_add_subdirectory(fpgametrics)
+opae_add_subdirectory(fpgaport)
# extra
opae_add_subdirectory(extra/userclk)
diff --git a/tools/fpgaport/CMakeLists.txt b/tools/fpgaport/CMakeLists.txt
new file mode 100644
index 00000000..cb16c8e9
--- /dev/null
+++ b/tools/fpgaport/CMakeLists.txt
@@ -0,0 +1,29 @@
+## Copyright(c) 2017, Intel Corporation
+##
+## Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following conditions are met:
+##
+## * Redistributions of source code must retain the above copyright notice,
+## this list of conditions and the following disclaimer.
+## * Redistributions in binary form must reproduce the above copyright notice,
+## this list of conditions and the following disclaimer in the documentation
+## and/or other materials provided with the distribution.
+## * Neither the name of Intel Corporation nor the names of its contributors
+## may be used to endorse or promote products derived from this software
+## without specific prior written permission.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+## ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+## LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+## CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+## SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+## INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+## CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+## POSSIBILITY OF SUCH DAMAGE.
+
+install(PROGRAMS fpgaport
+ DESTINATION bin
+ COMPONENT toolfpgaport)
diff --git a/tools/fpgaport/fpgaport b/tools/fpgaport/fpgaport
new file mode 100755
index 00000000..2f707183
--- /dev/null
+++ b/tools/fpgaport/fpgaport
@@ -0,0 +1,72 @@
+#! /usr/bin/python3
+# Copyright(c) 2017, Intel Corporation
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+# * Neither the name of Intel Corporation nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+import fcntl, os, sys, argparse, stat, struct
+
+FPGA_FME_PORT_ASSIGN = 0xB582
+FPGA_FME_PORT_RELEASE = 0xB581
+
+if __name__ == "__main__":
+
+ # parse command line arguments
+ parser = argparse.ArgumentParser()
+ parser.add_argument('action', help = 'action to perform', action = 'store', choices = ['assign', 'release'])
+ parser.add_argument('device', help = 'the FPGA (FME) device')
+ parser.add_argument('port', type = int, help = 'the number of the port')
+
+ args = parser.parse_args()
+
+ # check device file
+ try:
+ mode = os.stat(args.device).st_mode
+ if not stat.S_ISCHR(mode):
+ print( args.device, "is not a device file.")
+ except Exception as e:
+ print("Couldn't open", args.device, ":", e)
+ sys.exit(1)
+
+ # open FPGA device
+ try:
+ f = open(args.device, "rw")
+ except Exception as e:
+ print("open() failed:", e)
+ sys.exit(1)
+
+ # send IOCTL
+ ioctl_data = struct.pack('III', 12, 0, args.port)
+ try:
+ if args.action == 'assign':
+ ret = fcntl.ioctl(f, FPGA_FME_PORT_ASSIGN, ioctl_data)
+ else:
+ ret = fcntl.ioctl(f, FPGA_FME_PORT_RELEASE, ioctl_data)
+ except Exception as e:
+ print("ioctl() failed:", e)
+ f.close()
+ sys.exit(1)
+
+ # close FPGA device
+ f.close()
--
2.18.2