[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: [PATCH 16/23] pci: pcie host and mmcfg support.
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] Re: [PATCH 16/23] pci: pcie host and mmcfg support. |
Date: |
Mon, 5 Oct 2009 13:41:21 +0200 |
User-agent: |
Mutt/1.5.19 (2009-01-05) |
On Mon, Oct 05, 2009 at 07:06:56PM +0900, Isaku Yamahata wrote:
> @@ -1052,9 +1242,10 @@ PCIDevice *pci_create_simple(PCIBus *bus, int devfn,
> const char *name)
>
> static int pci_find_space(PCIDevice *pdev, uint8_t size)
> {
> + int config_size = pcie_config_size(pdev);
> int offset = PCI_CONFIG_HEADER_SIZE;
> int i;
> - for (i = PCI_CONFIG_HEADER_SIZE; i < PCI_CONFIG_SPACE_SIZE; ++i)
> + for (i = PCI_CONFIG_HEADER_SIZE; i < config_size; ++i)
> if (pdev->used[i])
> offset = i + 1;
> else if (i - offset + 1 == size)
> diff --git a/hw/pci.h b/hw/pci.h
> index 00f2b78..1f402d2 100644
> --- a/hw/pci.h
> +++ b/hw/pci.h
> @@ -175,20 +175,26 @@ enum {
> QEMU_PCI_CAP_MSIX = 0x1,
> };
>
> +/* Size of the standart PCIe config space: 4KB */
> +#define PCIE_CONFIG_SPACE_SIZE 0x1000
> +#define PCIE_EXT_CONFIG_SPACE_SIZE \
> + (PCIE_CONFIG_SPACE_SIZE - PCI_CONFIG_SPACE_SIZE)
> +
> struct PCIDevice {
> DeviceState qdev;
> +
> /* PCI config space */
> - uint8_t config[PCI_CONFIG_SPACE_SIZE];
> + uint8_t *config;
>
> /* Used to enable config checks on load. Note that writeable bits are
> * never checked even if set in cmask. */
> - uint8_t cmask[PCI_CONFIG_SPACE_SIZE];
> + uint8_t *cmask;
>
> /* Used to implement R/W bytes */
> - uint8_t wmask[PCI_CONFIG_SPACE_SIZE];
> + uint8_t *wmask;
>
> /* Used to allocate config space for capabilities. */
> - uint8_t used[PCI_CONFIG_SPACE_SIZE];
> + uint8_t *used;
>
> /* the following fields are read only */
> PCIBus *bus;
So I thought about this some more, and I think that this change
in unnecessary. PCI Express adds support for extended 4K
configuration space, but the only thing that must reside
there is the optional advanced error reporting capability,
which I don't think we'll need to implement, ever.
Everything else can reside in the first 256 bytes, just as for regular
PCI. And pci code already returns 0 for accesses outside the first 256
bytes, so express specific code is necessary.
If we do this, we can keep memcpy for the full original
space (it's just 4 cache lines) and simple memcmp
with no overlap checks will be enough to figure out
if something changed. To make that also possible for
bridges, we'll then just put the orig array inside
PCIDevice. Not sure I explain this last point clearly -
would you like to see a patch?
--
MST
- [Qemu-devel] Re: [PATCH 23/23] pci/monitor: print out bridge's filtering values and so on., (continued)
- [Qemu-devel] [PATCH 04/23] pci: use the symbolic constant, PCI_ROM_ADDRESS_ENABLE instead of 1., Isaku Yamahata, 2009/10/05
- [Qemu-devel] [PATCH 18/23] pci: add helper functions for pci config write function., Isaku Yamahata, 2009/10/05
- [Qemu-devel] [PATCH 09/23] pci: introduce pcibus_t to represent pci bus address/size instead of uint32_t, Isaku Yamahata, 2009/10/05
- [Qemu-devel] [PATCH 19/23] pci: use helper function in pci_default_write_config(), Isaku Yamahata, 2009/10/05
- [Qemu-devel] Re: [PATCH v4 00/23] pci: various pci clean up and pci express support., Michael S. Tsirkin, 2009/10/05
- [Qemu-devel] [PATCH 16/23] pci: pcie host and mmcfg support., Isaku Yamahata, 2009/10/05
- [Qemu-devel] Re: [PATCH 16/23] pci: pcie host and mmcfg support.,
Michael S. Tsirkin <=
- [Qemu-devel] Re: [PATCH 16/23] pci: pcie host and mmcfg support., Isaku Yamahata, 2009/10/06
- [Qemu-devel] Re: [PATCH 16/23] pci: pcie host and mmcfg support., Michael S. Tsirkin, 2009/10/06
- [Qemu-devel] Re: [PATCH 16/23] pci: pcie host and mmcfg support., Michael S. Tsirkin, 2009/10/06
- [Qemu-devel] Re: [PATCH 16/23] pci: pcie host and mmcfg support., Isaku Yamahata, 2009/10/06
- [Qemu-devel] Re: [PATCH 16/23] pci: pcie host and mmcfg support., Michael S. Tsirkin, 2009/10/07
- Re: [Qemu-devel] Re: [PATCH 16/23] pci: pcie host and mmcfg support., Akio Takebe, 2009/10/07
[Qemu-devel] [PATCH 14/23] pci: factor out the logic to get pci device from address., Isaku Yamahata, 2009/10/05