aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2009-04-06 13:52:56 +0100
committerKeir Fraser <keir.fraser@citrix.com>2009-04-06 13:52:56 +0100
commitfdd33002ee45be20b317cad3e165714d14009390 (patch)
treeea4433999a8e128215d2c0b071c3bab0ac795428
parentb812d1ddc4f23d3781fefff6fdcac9d247ab7ebb (diff)
downloadxen-fdd33002ee45be20b317cad3e165714d14009390.tar.gz
xen-fdd33002ee45be20b317cad3e165714d14009390.tar.bz2
xen-fdd33002ee45be20b317cad3e165714d14009390.zip
tools: Add device-path command to convert SBDF into device path.
'SBDF' format is "[SEG#:]BUS#:DEV#.FUNC#" ex) 0000:0a:1f.3 Device path format is "HID[:UID]-DEV#.FUNC#[-DEV#.FUNC#[...]]" ex) PNP0A08:0-2.0-0.0 The command can be executed as follows. # device_path 0a:1f.3 PNP0A08:0-2.0-0.0 Signed-off-by: Yuji Shimada <shimada-yxb@necst.nec.co.jp>
-rw-r--r--Makefile2
-rw-r--r--tools/misc/Makefile2
-rw-r--r--tools/misc/device-path78
3 files changed, 80 insertions, 2 deletions
diff --git a/Makefile b/Makefile
index 131ab3d1a3..6081f4c0cd 100644
--- a/Makefile
+++ b/Makefile
@@ -224,7 +224,7 @@ uninstall:
rm -rf $(D)$(LIBDIR)/xen/
rm -rf $(D)/usr/lib/xen/
rm -rf $(D)/usr/local/sbin/setmask $(D)/usr/local/sbin/xen*
- rm -rf $(D)/usr/sbin/xen* $(D)/usr/sbin/netfix $(D)/usr/sbin/xm
+ rm -rf $(D)/usr/sbin/xen* $(D)/usr/sbin/netfix $(D)/usr/sbin/xm $(D)/usr/sbin/device-path
rm -rf $(D)/usr/share/doc/xen
rm -rf $(D)/usr/share/xen
rm -rf $(D)/usr/share/man/man1/xen*
diff --git a/tools/misc/Makefile b/tools/misc/Makefile
index 12c599cd75..83423e1537 100644
--- a/tools/misc/Makefile
+++ b/tools/misc/Makefile
@@ -22,7 +22,7 @@ INSTALL_BIN-y := xencons
INSTALL_BIN-$(CONFIG_X86) += xen-detect
INSTALL_BIN := $(INSTALL_BIN-y)
-INSTALL_SBIN-y := netfix xm xen-bugtool xen-python-path xend xenperf xsview xenpm
+INSTALL_SBIN-y := netfix xm xen-bugtool xen-python-path xend xenperf xsview xenpm device-path
INSTALL_SBIN := $(INSTALL_SBIN-y)
DEFAULT_PYTHON_PATH := $(shell $(XEN_ROOT)/tools/python/get-path)
diff --git a/tools/misc/device-path b/tools/misc/device-path
new file mode 100644
index 0000000000..b192eb2222
--- /dev/null
+++ b/tools/misc/device-path
@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+# -*- mode: python; -*-
+#============================================================================
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of version 2.1 of the GNU Lesser General Public
+# License as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#============================================================================
+# Copyright (c) 2009, NEC Corporation.
+#============================================================================
+# This script converts SBDF into device path.
+# 'SBDF' format is "[SEG#:]BUS#:DEV#.FUNC#"
+# ex) 0000:0a:1f.3
+# Device path format is "HID[:UID]-DEV#.FUNC#[-DEV#.FUNC#[...]]"
+# ex) PNP0A08:0-2.0-0.0
+#============================================================================
+
+import sys
+import os
+
+# add fallback path for non-native python path installs if needed
+sys.path.append('/usr/lib/python')
+sys.path.append('/usr/lib64/python')
+from xen.util.pci import *
+
+SYSFS_ACPI_DEVS_PATH = '/firmware/acpi/namespace/ACPI/_SB'
+
+def find_hid_uid(dom, b, d, f):
+ sb_path = find_sysfs_mnt() + SYSFS_ACPI_DEVS_PATH
+ obj_list = os.listdir(sb_path)
+ for obj in obj_list:
+ obj_path = sb_path + '/' + obj.strip() + '/'
+ if os.path.exists(obj_path + 'seg') and \
+ os.path.exists(obj_path + 'bbn'):
+ seg = open(obj_path + 'seg').read()
+ bbn = open(obj_path + 'bbn').read()
+ if int(seg) == dom and int(bbn) == b:
+ hid = open(obj_path + 'hid').read()
+ if os.path.exists(obj_path + 'uid') is False:
+ path_str = hid.strip()
+ else:
+ uid = open(obj_path + 'uid').read()
+ path_str = hid.strip() + ':' + uid.strip()
+ return path_str
+ return None
+
+def make_device_path(dom, b, d, f):
+ dev = PciDevice(dom, b, d, f)
+ parent = dev.find_parent()
+ if parent is None:
+ path_str = find_hid_uid(dom, b, d, f)
+ path_str = path_str + '-' + hex(d).replace('0x', '') + '.' + \
+ hex(f).replace('0x', '')
+ return path_str
+ (pdom, pb, pd, pf) = parent
+ path_str = make_device_path(pdom, pb, pd, pf)
+ path_str = path_str + '-' + hex(d).replace('0x', '') + '.' + \
+ hex(f).replace('0x', '')
+ return path_str
+
+# main
+if len(sys.argv) <> 2:
+ print 'Usage: device-path SBDF\n'
+else:
+ path = os.environ['PATH']
+ os.environ['PATH'] = path + ':/sbin' + ':/user/sbin'
+ sbdf = sys.argv[1]
+ (dom, b, d, f) = parse_pci_name(sbdf)
+ path_str = make_device_path(dom, b, d, f)
+ print path_str