[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH V7 07/11] vpci/header: emulate PCI_COMMAND register for guests
On 19.07.2022 19:42, Oleksandr Tyshchenko wrote: > --- a/xen/drivers/vpci/header.c > +++ b/xen/drivers/vpci/header.c > @@ -443,11 +443,27 @@ static int modify_bars(const struct pci_dev *pdev, > uint16_t cmd, bool rom_only) > return 0; > } > > +/* TODO: Add proper emulation for all bits of the command register. */ > static void cf_check cmd_write( > const struct pci_dev *pdev, unsigned int reg, uint32_t cmd, void *data) > { > uint16_t current_cmd = pci_conf_read16(pdev->sbdf, reg); > > + if ( !is_hardware_domain(pdev->domain) ) > + { > + struct vpci_header *header = data; > + > + header->guest_cmd = cmd; > +#ifdef CONFIG_HAS_PCI_MSI > + if ( pdev->vpci->msi->enabled || pdev->vpci->msix->enabled ) > + /* > + * Guest wants to enable INTx, but it can't be enabled > + * if MSI/MSI-X enabled. > + */ > + cmd |= PCI_COMMAND_INTX_DISABLE; > +#endif > + } > + > /* > * Let Dom0 play with all the bits directly except for the memory > * decoding one. > @@ -464,6 +480,19 @@ static void cf_check cmd_write( > pci_conf_write16(pdev->sbdf, reg, cmd); > } > > +static uint32_t cf_check cmd_read( > + const struct pci_dev *pdev, unsigned int reg, void *data) > +{ > + if ( !is_hardware_domain(pdev->domain) ) > + { > + struct vpci_header *header = data; > + > + return header->guest_cmd; > + } > + > + return pci_conf_read16(pdev->sbdf, reg); > +} This function wants the same leading comment as cmd_write(). I also think you better wouldn't give the guest the impression that r/o bits can actually be written to (but getting this right may well fall under the TODO). Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |