qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCHv5 04/12] libqos: Better handling of PCI legacy I


From: Greg Kurz
Subject: Re: [Qemu-devel] [PATCHv5 04/12] libqos: Better handling of PCI legacy IO
Date: Tue, 25 Oct 2016 14:34:37 +0200

On Mon, 24 Oct 2016 15:59:53 +1100
David Gibson <address@hidden> wrote:

> The usual model for PCI IO with libqos is to use qpci_iomap() to map a
> specific BAR for a PCI device, then perform IOs within that BAR using
> qpci_io_{read,write}*().
> 
> However, certain devices also have legacy PCI IO.  In this case, instead of
> (or as well as) being accessed via PCI BARs, the device can be accessed
> via certain well-known, fixed addresses in PCI IO space.
> 
> Two existing tests use legacy PCI IO, and take different flawed approaches
> to it:
>     * tco-test manually constructs a tco_io_base value instead of calling
>       qpci_iomap(), which assumes internal knowledge of the structure of
>       the value it shouldn't have
>     * ide-test uses direct in*() and out*() calls instead of using
>       qpci_io_*() accessors, meaning it's not portable to non-x86 machine
>       types.
> 
> This patch implements a new qpci_iomap_legacy() interface which gets a
> handle in the same format as qpci_iomap() but refers to a region in
> the legacy PIO space.  For a device which has the same registers
> available both in a BAR and in legacy space (quite common), this
> allows the same test code to test both options with just a different
> iomap() at the beginning.
> 
> Signed-off-by: David Gibson <address@hidden>
> Reviewed-by: Laurent Vivier <address@hidden>
> ---

The explanations provided in address@hidden are
enough for me.

Reviewed-by: Greg Kurz <address@hidden>

>  tests/libqos/pci.c | 5 +++++
>  tests/libqos/pci.h | 1 +
>  2 files changed, 6 insertions(+)
> 
> diff --git a/tests/libqos/pci.c b/tests/libqos/pci.c
> index bf1c532..98a2e56 100644
> --- a/tests/libqos/pci.c
> +++ b/tests/libqos/pci.c
> @@ -350,6 +350,11 @@ void qpci_iounmap(QPCIDevice *dev, void *data)
>      /* FIXME */
>  }
>  
> +void *qpci_legacy_iomap(QPCIDevice *dev, uint16_t addr)
> +{
> +    return (void *)(uintptr_t)addr;
> +}
> +
>  void qpci_plug_device_test(const char *driver, const char *id,
>                             uint8_t slot, const char *opts)
>  {
> diff --git a/tests/libqos/pci.h b/tests/libqos/pci.h
> index f6f916d..b6f855e 100644
> --- a/tests/libqos/pci.h
> +++ b/tests/libqos/pci.h
> @@ -94,6 +94,7 @@ void qpci_io_writel(QPCIDevice *dev, void *data, uint32_t 
> value);
>  
>  void *qpci_iomap(QPCIDevice *dev, int barno, uint64_t *sizeptr);
>  void qpci_iounmap(QPCIDevice *dev, void *data);
> +void *qpci_legacy_iomap(QPCIDevice *dev, uint16_t addr);
>  
>  void qpci_plug_device_test(const char *driver, const char *id,
>                             uint8_t slot, const char *opts);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]