1 // 2 // Copyright (c) 2010-2022 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 using System; 8 using System.Collections.Generic; 9 using System.Linq; 10 using System.Text; 11 using Antmicro.Renode.Core; 12 using Antmicro.Renode.Peripherals.Bus; 13 using Antmicro.Renode.Peripherals.CPU; 14 15 namespace Antmicro.Renode.Logging.Profiling 16 { 17 public class ProfilerHeader 18 { ProfilerHeader()19 public ProfilerHeader() 20 { 21 buffer = new List<byte>(); 22 } 23 RegisterPeripherals(IMachine machine)24 public void RegisterPeripherals(IMachine machine) 25 { 26 var peripherals = machine.GetRegisteredPeripherals(); 27 var cpus = peripherals.Where(x => x.Peripheral is ICPU).ToList(); 28 29 buffer.AddRange(BitConverter.GetBytes(cpus.Count)); 30 31 foreach(var cpu in cpus) 32 { 33 buffer.AddRange(BitConverter.GetBytes(machine.SystemBus.GetCPUSlot(cpu.Peripheral as ICPU))); 34 buffer.AddRange(BitConverter.GetBytes(cpu.Name.Length)); 35 buffer.AddRange(Encoding.ASCII.GetBytes(cpu.Name)); 36 } 37 38 var busPeripherals = peripherals.Where(x => x.RegistrationPoint is BusRangeRegistration && x.Name != null); 39 buffer.AddRange(BitConverter.GetBytes(busPeripherals.Count())); 40 foreach(var peripheral in busPeripherals) 41 { 42 var name = peripheral.Name; 43 if(peripheral.RegistrationPoint is BusMultiRegistration bmr) 44 { 45 name = $"{bmr.ConnectionRegionName}@{name}"; 46 } 47 buffer.AddRange(BitConverter.GetBytes(name.Length)); 48 buffer.AddRange(Encoding.ASCII.GetBytes(name)); 49 var registrationPoint = peripheral.RegistrationPoint as BusRangeRegistration; 50 buffer.AddRange(BitConverter.GetBytes(registrationPoint.Range.StartAddress)); 51 buffer.AddRange(BitConverter.GetBytes(registrationPoint.Range.EndAddress)); 52 } 53 } 54 55 public byte[] Bytes => buffer.ToArray(); 56 57 private readonly List<byte> buffer; 58 } 59 } 60