hv: vpci: add callback functions to struct vpci

Add 'struct vpci_ops *ops' to 'struct vpci' so we have clearer structure:

- struct vpci: include struct vpci_ops pointing to different callback
  functions for partition or sharing mode repsectively.
- struct pci_vdev: includes struct pci_vdev_ops to handle different vpci
  functionalities:
      hostbridge emulation
      passthrough device BAR emulation
      msi/msi-x remapping

This patch moves the code around but doesn't change the underlying logic
in terms of PCI spec handling. More detailed implementation:

- create new file partition_mode.c to house the implementation of partition mode
  regarding the vpci layer.
- vpci.c: only keeps the abstract code which calls vpci->ops to functions
  in partition_mode.c, and potentially to sharing_mode.c.
- the following functions are moved to partition_mode.c and renamed with
  partition_mode prefix.
    - vpci_init() -> partition_mode_vpci_init()
    - vpci_cleanup() -> partition_mode_vpci_deinit()
    - pci_cfg_io_write() -> partition_mode_cfgread()
    - pci_cfg_io_read() -> partition_mode_cfgwrite()

Track-On: #1568
Signed-off-by: dongshen <dongsheng.x.zhang@intel.com>
Signed-off-by: Zide Chen <zide.chen@intel.com>
Acked-by: Eddie Dong <eddie.dong@intel.com>
Reviewed-by: Li, Fei1 <fei1.li@intel.com>
This commit is contained in:
Zide Chen
2018-10-08 17:08:04 -07:00
committed by lijinxia
parent 3e54c70d0f
commit 6af47f249c
4 changed files with 96 additions and 67 deletions

View File

@@ -78,9 +78,20 @@ struct pci_addr_info {
uint32_t cached_reg, cached_enable;
};
struct vpci_ops {
int (*init)(struct vm *vm);
void (*deinit)(struct vm *vm);
void (*cfgread)(struct vpci *vpci, union pci_bdf vbdf, uint32_t offset,
uint32_t bytes, uint32_t *val);
void (*cfgwrite)(struct vpci *vpci, union pci_bdf vbdf, uint32_t offset,
uint32_t bytes, uint32_t val);
};
struct vpci {
struct vm *vm;
struct pci_addr_info addr_info;
struct vpci_ops *ops;
};
extern struct pci_vdev_ops pci_ops_vdev_hostbridge;