162306a36Sopenharmony_ci#!/usr/bin/env python 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci 462306a36Sopenharmony_ciimport os 562306a36Sopenharmony_cifrom optparse import OptionParser 662306a36Sopenharmony_ci 762306a36Sopenharmony_cihelp_msg = "print verbose messages. Try -vv, -vvv for more verbose messages" 862306a36Sopenharmony_ciparser = OptionParser() 962306a36Sopenharmony_ciparser.add_option( 1062306a36Sopenharmony_ci "-v", "--verbose", dest="verbose", help=help_msg, action="count") 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci(options, args) = parser.parse_args() 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_civerbose = 0 1562306a36Sopenharmony_ciif options.verbose is not None: 1662306a36Sopenharmony_ci verbose = options.verbose 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_civmbus_sys_path = '/sys/bus/vmbus/devices' 1962306a36Sopenharmony_ciif not os.path.isdir(vmbus_sys_path): 2062306a36Sopenharmony_ci print("%s doesn't exist: exiting..." % vmbus_sys_path) 2162306a36Sopenharmony_ci exit(-1) 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_civmbus_dev_dict = { 2462306a36Sopenharmony_ci '{0e0b6031-5213-4934-818b-38d90ced39db}': '[Operating system shutdown]', 2562306a36Sopenharmony_ci '{9527e630-d0ae-497b-adce-e80ab0175caf}': '[Time Synchronization]', 2662306a36Sopenharmony_ci '{57164f39-9115-4e78-ab55-382f3bd5422d}': '[Heartbeat]', 2762306a36Sopenharmony_ci '{a9a0f4e7-5a45-4d96-b827-8a841e8c03e6}': '[Data Exchange]', 2862306a36Sopenharmony_ci '{35fa2e29-ea23-4236-96ae-3a6ebacba440}': '[Backup (volume checkpoint)]', 2962306a36Sopenharmony_ci '{34d14be3-dee4-41c8-9ae7-6b174977c192}': '[Guest services]', 3062306a36Sopenharmony_ci '{525074dc-8985-46e2-8057-a307dc18a502}': '[Dynamic Memory]', 3162306a36Sopenharmony_ci '{cfa8b69e-5b4a-4cc0-b98b-8ba1a1f3f95a}': 'Synthetic mouse', 3262306a36Sopenharmony_ci '{f912ad6d-2b17-48ea-bd65-f927a61c7684}': 'Synthetic keyboard', 3362306a36Sopenharmony_ci '{da0a7802-e377-4aac-8e77-0558eb1073f8}': 'Synthetic framebuffer adapter', 3462306a36Sopenharmony_ci '{f8615163-df3e-46c5-913f-f2d2f965ed0e}': 'Synthetic network adapter', 3562306a36Sopenharmony_ci '{32412632-86cb-44a2-9b5c-50d1417354f5}': 'Synthetic IDE Controller', 3662306a36Sopenharmony_ci '{ba6163d9-04a1-4d29-b605-72e2ffb1dc7f}': 'Synthetic SCSI Controller', 3762306a36Sopenharmony_ci '{2f9bcc4a-0069-4af3-b76b-6fd0be528cda}': 'Synthetic fiber channel adapter', 3862306a36Sopenharmony_ci '{8c2eaf3d-32a7-4b09-ab99-bd1f1c86b501}': 'Synthetic RDMA adapter', 3962306a36Sopenharmony_ci '{44c4f61d-4444-4400-9d52-802e27ede19f}': 'PCI Express pass-through', 4062306a36Sopenharmony_ci '{276aacf4-ac15-426c-98dd-7521ad3f01fe}': '[Reserved system device]', 4162306a36Sopenharmony_ci '{f8e65716-3cb3-4a06-9a60-1889c5cccab5}': '[Reserved system device]', 4262306a36Sopenharmony_ci '{3375baf4-9e15-4b30-b765-67acb10d607b}': '[Reserved system device]', 4362306a36Sopenharmony_ci} 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_cidef get_vmbus_dev_attr(dev_name, attr): 4762306a36Sopenharmony_ci try: 4862306a36Sopenharmony_ci f = open('%s/%s/%s' % (vmbus_sys_path, dev_name, attr), 'r') 4962306a36Sopenharmony_ci lines = f.readlines() 5062306a36Sopenharmony_ci f.close() 5162306a36Sopenharmony_ci except IOError: 5262306a36Sopenharmony_ci lines = [] 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci return lines 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ciclass VMBus_Dev: 5862306a36Sopenharmony_ci pass 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_civmbus_dev_list = [] 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_cifor f in os.listdir(vmbus_sys_path): 6462306a36Sopenharmony_ci vmbus_id = get_vmbus_dev_attr(f, 'id')[0].strip() 6562306a36Sopenharmony_ci class_id = get_vmbus_dev_attr(f, 'class_id')[0].strip() 6662306a36Sopenharmony_ci device_id = get_vmbus_dev_attr(f, 'device_id')[0].strip() 6762306a36Sopenharmony_ci dev_desc = vmbus_dev_dict.get(class_id, 'Unknown') 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci chn_vp_mapping = get_vmbus_dev_attr(f, 'channel_vp_mapping') 7062306a36Sopenharmony_ci chn_vp_mapping = [c.strip() for c in chn_vp_mapping] 7162306a36Sopenharmony_ci chn_vp_mapping = sorted( 7262306a36Sopenharmony_ci chn_vp_mapping, key=lambda c: int(c.split(':')[0])) 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci chn_vp_mapping = [ 7562306a36Sopenharmony_ci '\tRel_ID=%s, target_cpu=%s' % 7662306a36Sopenharmony_ci (c.split(':')[0], c.split(':')[1]) for c in chn_vp_mapping 7762306a36Sopenharmony_ci ] 7862306a36Sopenharmony_ci d = VMBus_Dev() 7962306a36Sopenharmony_ci d.sysfs_path = '%s/%s' % (vmbus_sys_path, f) 8062306a36Sopenharmony_ci d.vmbus_id = vmbus_id 8162306a36Sopenharmony_ci d.class_id = class_id 8262306a36Sopenharmony_ci d.device_id = device_id 8362306a36Sopenharmony_ci d.dev_desc = dev_desc 8462306a36Sopenharmony_ci d.chn_vp_mapping = '\n'.join(chn_vp_mapping) 8562306a36Sopenharmony_ci if d.chn_vp_mapping: 8662306a36Sopenharmony_ci d.chn_vp_mapping += '\n' 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci vmbus_dev_list.append(d) 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_civmbus_dev_list = sorted(vmbus_dev_list, key=lambda d: int(d.vmbus_id)) 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ciformat0 = '%2s: %s' 9462306a36Sopenharmony_ciformat1 = '%2s: Class_ID = %s - %s\n%s' 9562306a36Sopenharmony_ciformat2 = '%2s: Class_ID = %s - %s\n\tDevice_ID = %s\n\tSysfs path: %s\n%s' 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_cifor d in vmbus_dev_list: 9862306a36Sopenharmony_ci if verbose == 0: 9962306a36Sopenharmony_ci print(('VMBUS ID ' + format0) % (d.vmbus_id, d.dev_desc)) 10062306a36Sopenharmony_ci elif verbose == 1: 10162306a36Sopenharmony_ci print( 10262306a36Sopenharmony_ci ('VMBUS ID ' + format1) % 10362306a36Sopenharmony_ci (d.vmbus_id, d.class_id, d.dev_desc, d.chn_vp_mapping) 10462306a36Sopenharmony_ci ) 10562306a36Sopenharmony_ci else: 10662306a36Sopenharmony_ci print( 10762306a36Sopenharmony_ci ('VMBUS ID ' + format2) % 10862306a36Sopenharmony_ci ( 10962306a36Sopenharmony_ci d.vmbus_id, d.class_id, d.dev_desc, 11062306a36Sopenharmony_ci d.device_id, d.sysfs_path, d.chn_vp_mapping 11162306a36Sopenharmony_ci ) 11262306a36Sopenharmony_ci ) 113