Blob Blame History Raw
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