// Copyright (c) 2019 Huawei Corporation
//
// SPDX-License-Identifier: Apache-2.0
//

package hypervisors

// Bridge is a bridge where devices can be hot plugged
type Bridge struct {
	// DeviceAddr contains information about devices plugged and its address in the bridge
	DeviceAddr map[uint32]string

	// Type is the type of the bridge (pci, pcie, etc)
	Type string

	//ID is used to identify the bridge in the hypervisor
	ID string

	// Addr is the PCI/e slot of the bridge
	Addr int
}

// CPUDevice represents a CPU device which was hot-added in a running VM
type CPUDevice struct {
	// ID is used to identify this CPU in the hypervisor options.
	ID string
}

type HypervisorState struct {
	BlockIndexMap map[int]struct{}

	// Type of hypervisor, E.g. qemu/firecracker/acrn.
	Type string
	UUID string
	// clh sepcific: refer to 'virtcontainers/clh.go:CloudHypervisorState'
	APISocket string

	// Belows are qemu specific
	// Refs: virtcontainers/qemu.go:QemuState
	Bridges []Bridge
	// HotpluggedCPUs is the list of CPUs that were hot-added
	HotpluggedVCPUs []CPUDevice

	HotpluggedMemory  int
	VirtiofsDaemonPid int
	Pid               int
	PCIeRootPort      int

	HotplugVFIOOnRootBus bool
}
