[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2] Add sbdf2devicepath command.
Thanks for all of your comments. I change command name from 'device-path'to 'sbdf2devicepath'. And I add error message in case ACPI namespace directory does not present. Thanks, -- Yuji Shimada This patch adds 'sbdf2devicepath' command that 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 The command can be executed as follows. # sbdf2devicepath 0a:1f.3 PNP0A08:0-2.0-0.0 Signed-off-by: Yuji Shimada <shimada-yxb@xxxxxxxxxxxxxxx> diff -r accf139b2eb9 Makefile --- a/Makefile Mon Apr 06 21:12:33 2009 +0100 +++ b/Makefile Thu Apr 09 17:12:34 2009 +0900 @@ -224,7 +224,7 @@ 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/sbdf2devicepath rm -rf $(D)/usr/share/doc/xen rm -rf $(D)/usr/share/xen rm -rf $(D)/usr/share/man/man1/xen* diff -r accf139b2eb9 tools/misc/Makefile --- a/tools/misc/Makefile Mon Apr 06 21:12:33 2009 +0100 +++ b/tools/misc/Makefile Thu Apr 09 17:12:34 2009 +0900 @@ -22,7 +22,7 @@ INSTALL_BIN-$(CONFIG_X86) += xen-detect INSTALL_BIN := $(INSTALL_BIN-y) -INSTALL_SBIN-y := xm xen-bugtool xen-python-path xend xenperf xsview xenpm +INSTALL_SBIN-y := xm xen-bugtool xen-python-path xend xenperf xsview xenpm sbdf2devicepath INSTALL_SBIN := $(INSTALL_SBIN-y) DEFAULT_PYTHON_PATH := $(shell $(XEN_ROOT)/tools/python/get-path) diff -r accf139b2eb9 tools/misc/sbdf2devicepath --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/misc/sbdf2devicepath Thu Apr 09 17:12:34 2009 +0900 @@ -0,0 +1,82 @@ +#!/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): + 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: sbdf2devicepath SBDF\n' +else: + sb_path = find_sysfs_mnt() + SYSFS_ACPI_DEVS_PATH + if os.path.exists(sb_path): + 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 + else: + print sb_path + ' not found.\n' + print 'This command is only for linux 2.6.18.8 xen kernel.\n' _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |