18c2ecf20Sopenharmony_ci#!/usr/bin/env python 28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ciimport os 58c2ecf20Sopenharmony_cifrom optparse import OptionParser 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_cihelp_msg = "print verbose messages. Try -vv, -vvv for more verbose messages" 88c2ecf20Sopenharmony_ciparser = OptionParser() 98c2ecf20Sopenharmony_ciparser.add_option( 108c2ecf20Sopenharmony_ci "-v", "--verbose", dest="verbose", help=help_msg, action="count") 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci(options, args) = parser.parse_args() 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_civerbose = 0 158c2ecf20Sopenharmony_ciif options.verbose is not None: 168c2ecf20Sopenharmony_ci verbose = options.verbose 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_civmbus_sys_path = '/sys/bus/vmbus/devices' 198c2ecf20Sopenharmony_ciif not os.path.isdir(vmbus_sys_path): 208c2ecf20Sopenharmony_ci print("%s doesn't exist: exiting..." % vmbus_sys_path) 218c2ecf20Sopenharmony_ci exit(-1) 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_civmbus_dev_dict = { 248c2ecf20Sopenharmony_ci '{0e0b6031-5213-4934-818b-38d90ced39db}': '[Operating system shutdown]', 258c2ecf20Sopenharmony_ci '{9527e630-d0ae-497b-adce-e80ab0175caf}': '[Time Synchronization]', 268c2ecf20Sopenharmony_ci '{57164f39-9115-4e78-ab55-382f3bd5422d}': '[Heartbeat]', 278c2ecf20Sopenharmony_ci '{a9a0f4e7-5a45-4d96-b827-8a841e8c03e6}': '[Data Exchange]', 288c2ecf20Sopenharmony_ci '{35fa2e29-ea23-4236-96ae-3a6ebacba440}': '[Backup (volume checkpoint)]', 298c2ecf20Sopenharmony_ci '{34d14be3-dee4-41c8-9ae7-6b174977c192}': '[Guest services]', 308c2ecf20Sopenharmony_ci '{525074dc-8985-46e2-8057-a307dc18a502}': '[Dynamic Memory]', 318c2ecf20Sopenharmony_ci '{cfa8b69e-5b4a-4cc0-b98b-8ba1a1f3f95a}': 'Synthetic mouse', 328c2ecf20Sopenharmony_ci '{f912ad6d-2b17-48ea-bd65-f927a61c7684}': 'Synthetic keyboard', 338c2ecf20Sopenharmony_ci '{da0a7802-e377-4aac-8e77-0558eb1073f8}': 'Synthetic framebuffer adapter', 348c2ecf20Sopenharmony_ci '{f8615163-df3e-46c5-913f-f2d2f965ed0e}': 'Synthetic network adapter', 358c2ecf20Sopenharmony_ci '{32412632-86cb-44a2-9b5c-50d1417354f5}': 'Synthetic IDE Controller', 368c2ecf20Sopenharmony_ci '{ba6163d9-04a1-4d29-b605-72e2ffb1dc7f}': 'Synthetic SCSI Controller', 378c2ecf20Sopenharmony_ci '{2f9bcc4a-0069-4af3-b76b-6fd0be528cda}': 'Synthetic fiber channel adapter', 388c2ecf20Sopenharmony_ci '{8c2eaf3d-32a7-4b09-ab99-bd1f1c86b501}': 'Synthetic RDMA adapter', 398c2ecf20Sopenharmony_ci '{44c4f61d-4444-4400-9d52-802e27ede19f}': 'PCI Express pass-through', 408c2ecf20Sopenharmony_ci '{276aacf4-ac15-426c-98dd-7521ad3f01fe}': '[Reserved system device]', 418c2ecf20Sopenharmony_ci '{f8e65716-3cb3-4a06-9a60-1889c5cccab5}': '[Reserved system device]', 428c2ecf20Sopenharmony_ci '{3375baf4-9e15-4b30-b765-67acb10d607b}': '[Reserved system device]', 438c2ecf20Sopenharmony_ci} 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_cidef get_vmbus_dev_attr(dev_name, attr): 478c2ecf20Sopenharmony_ci try: 488c2ecf20Sopenharmony_ci f = open('%s/%s/%s' % (vmbus_sys_path, dev_name, attr), 'r') 498c2ecf20Sopenharmony_ci lines = f.readlines() 508c2ecf20Sopenharmony_ci f.close() 518c2ecf20Sopenharmony_ci except IOError: 528c2ecf20Sopenharmony_ci lines = [] 538c2ecf20Sopenharmony_ci 548c2ecf20Sopenharmony_ci return lines 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ciclass VMBus_Dev: 588c2ecf20Sopenharmony_ci pass 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_civmbus_dev_list = [] 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_cifor f in os.listdir(vmbus_sys_path): 648c2ecf20Sopenharmony_ci vmbus_id = get_vmbus_dev_attr(f, 'id')[0].strip() 658c2ecf20Sopenharmony_ci class_id = get_vmbus_dev_attr(f, 'class_id')[0].strip() 668c2ecf20Sopenharmony_ci device_id = get_vmbus_dev_attr(f, 'device_id')[0].strip() 678c2ecf20Sopenharmony_ci dev_desc = vmbus_dev_dict.get(class_id, 'Unknown') 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci chn_vp_mapping = get_vmbus_dev_attr(f, 'channel_vp_mapping') 708c2ecf20Sopenharmony_ci chn_vp_mapping = [c.strip() for c in chn_vp_mapping] 718c2ecf20Sopenharmony_ci chn_vp_mapping = sorted( 728c2ecf20Sopenharmony_ci chn_vp_mapping, key=lambda c: int(c.split(':')[0])) 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ci chn_vp_mapping = [ 758c2ecf20Sopenharmony_ci '\tRel_ID=%s, target_cpu=%s' % 768c2ecf20Sopenharmony_ci (c.split(':')[0], c.split(':')[1]) for c in chn_vp_mapping 778c2ecf20Sopenharmony_ci ] 788c2ecf20Sopenharmony_ci d = VMBus_Dev() 798c2ecf20Sopenharmony_ci d.sysfs_path = '%s/%s' % (vmbus_sys_path, f) 808c2ecf20Sopenharmony_ci d.vmbus_id = vmbus_id 818c2ecf20Sopenharmony_ci d.class_id = class_id 828c2ecf20Sopenharmony_ci d.device_id = device_id 838c2ecf20Sopenharmony_ci d.dev_desc = dev_desc 848c2ecf20Sopenharmony_ci d.chn_vp_mapping = '\n'.join(chn_vp_mapping) 858c2ecf20Sopenharmony_ci if d.chn_vp_mapping: 868c2ecf20Sopenharmony_ci d.chn_vp_mapping += '\n' 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_ci vmbus_dev_list.append(d) 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ci 918c2ecf20Sopenharmony_civmbus_dev_list = sorted(vmbus_dev_list, key=lambda d: int(d.vmbus_id)) 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_ciformat0 = '%2s: %s' 948c2ecf20Sopenharmony_ciformat1 = '%2s: Class_ID = %s - %s\n%s' 958c2ecf20Sopenharmony_ciformat2 = '%2s: Class_ID = %s - %s\n\tDevice_ID = %s\n\tSysfs path: %s\n%s' 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_cifor d in vmbus_dev_list: 988c2ecf20Sopenharmony_ci if verbose == 0: 998c2ecf20Sopenharmony_ci print(('VMBUS ID ' + format0) % (d.vmbus_id, d.dev_desc)) 1008c2ecf20Sopenharmony_ci elif verbose == 1: 1018c2ecf20Sopenharmony_ci print( 1028c2ecf20Sopenharmony_ci ('VMBUS ID ' + format1) % 1038c2ecf20Sopenharmony_ci (d.vmbus_id, d.class_id, d.dev_desc, d.chn_vp_mapping) 1048c2ecf20Sopenharmony_ci ) 1058c2ecf20Sopenharmony_ci else: 1068c2ecf20Sopenharmony_ci print( 1078c2ecf20Sopenharmony_ci ('VMBUS ID ' + format2) % 1088c2ecf20Sopenharmony_ci ( 1098c2ecf20Sopenharmony_ci d.vmbus_id, d.class_id, d.dev_desc, 1108c2ecf20Sopenharmony_ci d.device_id, d.sysfs_path, d.chn_vp_mapping 1118c2ecf20Sopenharmony_ci ) 1128c2ecf20Sopenharmony_ci ) 113