mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-28 00:06:55 +00:00
HV: move pci_vdevs[] array from vm.h to vpci.h
pci_vdevs is vpci stuff so it would be better to make it managed by vpci rather than by vm.h, both sharing mode and partition mode can use pci_vdevs[] to maintain its own per vm vdev list. Tracked-On: #2534 Signed-off-by: dongshen <dongsheng.x.zhang@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
parent
8c3cfe62aa
commit
00f9b85072
@ -33,15 +33,18 @@
|
|||||||
#include <logmsg.h>
|
#include <logmsg.h>
|
||||||
#include "pci_priv.h"
|
#include "pci_priv.h"
|
||||||
|
|
||||||
static struct pci_vdev *partition_mode_find_vdev(struct acrn_vpci *vpci, union pci_bdf vbdf)
|
|
||||||
|
/**
|
||||||
|
* @pre tmp != NULL
|
||||||
|
*/
|
||||||
|
static struct pci_vdev *partition_mode_find_vdev(const struct acrn_vpci *vpci, union pci_bdf vbdf)
|
||||||
{
|
{
|
||||||
struct pci_vdev *vdev, *tmp;
|
struct pci_vdev *vdev, *tmp;
|
||||||
struct acrn_vm_config *vm_config = get_vm_config(vpci->vm->vm_id);
|
uint32_t i;
|
||||||
int32_t i;
|
|
||||||
|
|
||||||
vdev = NULL;
|
vdev = NULL;
|
||||||
for (i = 0; i < vm_config->pci_ptdev_num; i++) {
|
for (i = 0U; i < vpci->pci_vdev_cnt; i++) {
|
||||||
tmp = &vpci->vm->pci_vdevs[i];
|
tmp = (struct pci_vdev *)&(vpci->pci_vdevs[i]);
|
||||||
|
|
||||||
if (bdf_is_equal(&(tmp->vbdf), &vbdf)) {
|
if (bdf_is_equal(&(tmp->vbdf), &vbdf)) {
|
||||||
vdev = tmp;
|
vdev = tmp;
|
||||||
@ -95,18 +98,27 @@ static void partition_mode_pdev_init(struct pci_vdev *vdev, union pci_bdf pbdf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @pre vm != NULL
|
||||||
|
* @pre vm->vpci->pci_vdev_cnt <= CONFIG_MAX_PCI_DEV_NUM
|
||||||
|
* @pre vm_config != NULL
|
||||||
|
* @pre vdev != NULL
|
||||||
|
* @pre ptdev_config != NULL
|
||||||
|
*/
|
||||||
static int32_t partition_mode_vpci_init(const struct acrn_vm *vm)
|
static int32_t partition_mode_vpci_init(const struct acrn_vm *vm)
|
||||||
{
|
{
|
||||||
const struct acrn_vpci *vpci = &vm->vpci;
|
struct acrn_vpci *vpci = (struct acrn_vpci *)&(vm->vpci);
|
||||||
struct pci_vdev *vdev;
|
struct pci_vdev *vdev;
|
||||||
struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
|
struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
|
||||||
struct acrn_vm_pci_ptdev_config *ptdev_config;
|
struct acrn_vm_pci_ptdev_config *ptdev_config;
|
||||||
int32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
for (i = 0; i < vm_config->pci_ptdev_num; i++) {
|
vpci->pci_vdev_cnt = vm_config->pci_ptdev_num;
|
||||||
vdev = (struct pci_vdev *)&vm->pci_vdevs[i];
|
|
||||||
ptdev_config = vm_config->pci_ptdevs + i;
|
for (i = 0U; i < vpci->pci_vdev_cnt; i++) {
|
||||||
|
vdev = &vpci->pci_vdevs[i];
|
||||||
vdev->vpci = vpci;
|
vdev->vpci = vpci;
|
||||||
|
ptdev_config = &vm_config->pci_ptdevs[i];
|
||||||
vdev->vbdf.value = ptdev_config->vbdf.value;
|
vdev->vbdf.value = ptdev_config->vbdf.value;
|
||||||
|
|
||||||
if (vdev->vbdf.value != 0U) {
|
if (vdev->vbdf.value != 0U) {
|
||||||
@ -127,14 +139,16 @@ static int32_t partition_mode_vpci_init(const struct acrn_vm *vm)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @pre vdev != NULL
|
||||||
|
*/
|
||||||
static void partition_mode_vpci_deinit(const struct acrn_vm *vm)
|
static void partition_mode_vpci_deinit(const struct acrn_vm *vm)
|
||||||
{
|
{
|
||||||
struct pci_vdev *vdev;
|
struct pci_vdev *vdev;
|
||||||
struct acrn_vm_config *vm_config = get_vm_config(vm->vm_id);
|
uint32_t i;
|
||||||
int32_t i;
|
|
||||||
|
|
||||||
for (i = 0; i < vm_config->pci_ptdev_num; i++) {
|
for (i = 0U; i < vm->vpci.pci_vdev_cnt; i++) {
|
||||||
vdev = (struct pci_vdev *)&vm->pci_vdevs[i];
|
vdev = (struct pci_vdev *) &(vm->vpci.pci_vdevs[i]);
|
||||||
if ((vdev->ops != NULL) && (vdev->ops->deinit != NULL)) {
|
if ((vdev->ops != NULL) && (vdev->ops->deinit != NULL)) {
|
||||||
if (vdev->ops->deinit(vdev) != 0) {
|
if (vdev->ops->deinit(vdev) != 0) {
|
||||||
pr_err("vdev->ops->deinit failed!");
|
pr_err("vdev->ops->deinit failed!");
|
||||||
|
@ -146,10 +146,9 @@ struct acrn_vm {
|
|||||||
uint32_t vcpuid_entry_nr, vcpuid_level, vcpuid_xlevel;
|
uint32_t vcpuid_entry_nr, vcpuid_level, vcpuid_xlevel;
|
||||||
struct vcpuid_entry vcpuid_entries[MAX_VM_VCPUID_ENTRIES];
|
struct vcpuid_entry vcpuid_entries[MAX_VM_VCPUID_ENTRIES];
|
||||||
struct acrn_vpci vpci;
|
struct acrn_vpci vpci;
|
||||||
|
|
||||||
#ifdef CONFIG_PARTITION_MODE
|
#ifdef CONFIG_PARTITION_MODE
|
||||||
struct mptable_info mptable;
|
struct mptable_info mptable;
|
||||||
struct pci_vdev pci_vdevs[CONFIG_MAX_PCI_DEV_NUM];
|
|
||||||
/* the valid number of pci_vdevs[] is vm_config->pci_ptdev_num */
|
|
||||||
uint8_t vrtc_offset;
|
uint8_t vrtc_offset;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -119,11 +119,12 @@ struct vpci_ops {
|
|||||||
uint32_t bytes, uint32_t val);
|
uint32_t bytes, uint32_t val);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct acrn_vpci {
|
struct acrn_vpci {
|
||||||
struct acrn_vm *vm;
|
struct acrn_vm *vm;
|
||||||
struct pci_addr_info addr_info;
|
struct pci_addr_info addr_info;
|
||||||
const struct vpci_ops *ops;
|
const struct vpci_ops *ops;
|
||||||
|
uint32_t pci_vdev_cnt;
|
||||||
|
struct pci_vdev pci_vdevs[CONFIG_MAX_PCI_DEV_NUM];
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_PARTITION_MODE
|
#ifdef CONFIG_PARTITION_MODE
|
||||||
|
Loading…
Reference in New Issue
Block a user