From 76d42fe3e3f2007e4fe18e27e0a68840713cda2a Mon Sep 17 00:00:00 2001 From: Tom Rix 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 --- 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