+++ /dev/null
-#!/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'