From: "Michael S. Tsirkin" <mst@redhat.com>
To: Isaku Yamahata <yamahata@valinux.co.jp>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 5/9] pci: 64bit bar support.
Date: Wed, 30 Sep 2009 13:43:17 +0200 [thread overview]
Message-ID: <20090930114316.GH18802@redhat.com> (raw)
In-Reply-To: <1247656509-32227-6-git-send-email-yamahata@valinux.co.jp>
On Wed, Jul 15, 2009 at 08:15:05PM +0900, Isaku Yamahata wrote:
> implemented pci 64bit bar support.
Minor style suggestions below.
Acked-by: Michael S. Tsirkin <mst@redhat.com>
> Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
> ---
> hw/pci.c | 46 ++++++++++++++++++++++++++++++++++++++++------
> hw/pci.h | 9 +++++++++
> 2 files changed, 49 insertions(+), 6 deletions(-)
>
> diff --git a/hw/pci.c b/hw/pci.c
> index 2d985f0..9639a32 100644
> --- a/hw/pci.c
> +++ b/hw/pci.c
> @@ -429,9 +429,15 @@ void pci_register_bar(PCIDevice *pci_dev, int region_num,
> } else {
> addr = 0x10 + region_num * 4;
> }
> +
don't add empty lines after } - block stands out enough already.
> *(uint32_t *)(pci_dev->config + addr) = cpu_to_le32(type);
> - *(uint32_t *)(pci_dev->wmask + addr) = cpu_to_le32(wmask & 0xffffffff);
> - *(uint32_t *)(pci_dev->cmask + addr) = 0xffffffff;
> + if (pci_bar_is_64bit(r)) {
> + *(uint64_t *)(pci_dev->wmask + addr) = cpu_to_le64(wmask);
> + *(uint64_t *)(pci_dev->cmask + addr) = ~0ULL;
> + } else {
> + *(uint32_t *)(pci_dev->wmask + addr) = cpu_to_le32(wmask & 0xffffffff);
> + *(uint32_t *)(pci_dev->cmask + addr) = 0xffffffff;
> + }
> }
>
> static void pci_update_mappings(PCIDevice *d)
> @@ -466,8 +472,14 @@ static void pci_update_mappings(PCIDevice *d)
> }
> } else {
> if (cmd & PCI_COMMAND_MEMORY) {
> - new_addr = le32_to_cpu(*(uint32_t *)(d->config +
> - config_ofs));
> +
> + if (pci_bar_is_64bit(r)) {
> + new_addr = le64_to_cpu(*(uint64_t *)(d->config +
> + config_ofs));
Use pci_get_quad here?
> + } else {
> + new_addr = le32_to_cpu(*(uint32_t *)(d->config +
> + config_ofs));
> + }
> /* the ROM slot has a specific enable bit */
> if (i == PCI_ROM_SLOT && !(new_addr & 1))
> goto no_mem_map;
> @@ -482,7 +494,7 @@ static void pci_update_mappings(PCIDevice *d)
>
> /* keep old behaviour
> * without this, PC ide doesn't work well. */
> - last_addr >= UINT32_MAX) {
> + (!pci_bar_is_64bit(r) && last_addr >= UINT32_MAX)) {
> new_addr = PCI_BAR_UNMAPPED;
> }
> } else {
> @@ -741,7 +753,29 @@ static void pci_info_device(PCIDevice *d)
> monitor_printf(mon, "I/O at 0x%04"PRIx64" [0x%04"PRIx64"].\n",
> r->addr, r->addr + r->size - 1);
> } else {
> - monitor_printf(mon, "32 bit memory at 0x%08"PRIx64" [0x%08"PRIx64"].\n",
> + const char *type;
> + const char* prefetch;
> +
> + switch (r->type & PCI_ADDRESS_SPACE_MEM_TYPE_MASK) {
> + case PCI_ADDRESS_SPACE_MEM:
> + type = "32 bit";
> + break;
> + case PCI_ADDRESS_SPACE_MEM_64:
> + type = "64 bit";
> + break;
> + default:
> + type = "unknown";
> + break;
> + }
> +
> + prefetch = "";
> + if (r->type & PCI_ADDRESS_SPACE_MEM_PREFETCH) {
> + prefetch = " prefetchable";
> + }
> +
> + monitor_printf(mon, "%s%s memory at "
> + "0x%08"PRIx64" [0x%08"PRIx64"].\n",
> + type, prefetch,
> r->addr, r->addr + r->size - 1);
> }
> }
> diff --git a/hw/pci.h b/hw/pci.h
> index fee9ed6..33e2ef2 100644
> --- a/hw/pci.h
> +++ b/hw/pci.h
> @@ -80,6 +80,8 @@ typedef int PCIUnregisterFunc(PCIDevice *pci_dev);
>
> #define PCI_ADDRESS_SPACE_MEM 0x00
> #define PCI_ADDRESS_SPACE_IO 0x01
> +#define PCI_ADDRESS_SPACE_MEM_64 0x04 /* 64 bit address */
> +#define PCI_ADDRESS_SPACE_MEM_TYPE_MASK 0x06
> #define PCI_ADDRESS_SPACE_MEM_PREFETCH 0x08
>
> typedef struct PCIIORegion {
> @@ -90,6 +92,13 @@ typedef struct PCIIORegion {
> PCIMapIORegionFunc *map_func;
> } PCIIORegion;
>
> +static inline int pci_bar_is_64bit(const PCIIORegion *r)
> +{
> + return !(r->type & PCI_ADDRESS_SPACE_IO) &&
> + ((r->type & PCI_ADDRESS_SPACE_MEM_TYPE_MASK) ==
> + PCI_ADDRESS_SPACE_MEM_64);
> +}
> +
> #define PCI_ROM_SLOT 6
> #define PCI_NUM_REGIONS 7
>
> --
> 1.6.0.2
>
>
next prev parent reply other threads:[~2009-09-30 11:45 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-15 11:15 [Qemu-devel] [PATCH 0/9] pci: pcie host and mmcfg support Isaku Yamahata
2009-07-15 11:15 ` [Qemu-devel] [PATCH 1/9] pci: fix PCI_DPRINTF() wrt variadic macro Isaku Yamahata
2009-09-30 11:36 ` Michael S. Tsirkin
2009-07-15 11:15 ` [Qemu-devel] [PATCH 2/9] pci.c: use appropriate PRIs in PCI_DPRINTF() Isaku Yamahata
2009-09-30 11:37 ` Michael S. Tsirkin
2009-09-30 11:58 ` Michael S. Tsirkin
2009-07-15 11:15 ` [Qemu-devel] [PATCH 3/9] pci: define a constant to represent a unmapped bar and use it Isaku Yamahata
2009-09-30 11:37 ` Michael S. Tsirkin
2009-07-15 11:15 ` [Qemu-devel] [PATCH 4/9] pci: use uint64_t for bar addr and size instead of uint32_t Isaku Yamahata
2009-09-30 11:41 ` Michael S. Tsirkin
2009-09-30 15:25 ` malc
2009-09-30 16:15 ` Michael S. Tsirkin
2009-09-30 16:51 ` malc
2009-09-30 17:26 ` Michael S. Tsirkin
2009-09-30 17:59 ` malc
2009-10-01 5:33 ` Michael S. Tsirkin
2009-10-01 12:15 ` malc
2009-10-01 12:26 ` Michael S. Tsirkin
2009-10-01 12:45 ` malc
2009-10-01 13:54 ` Anthony Liguori
2009-10-01 18:46 ` malc
2009-10-01 23:41 ` Jamie Lokier
2009-10-01 3:44 ` Isaku Yamahata
2009-07-15 11:15 ` [Qemu-devel] [PATCH 5/9] pci: 64bit bar support Isaku Yamahata
2009-09-30 11:43 ` Michael S. Tsirkin [this message]
2009-10-06 9:33 ` Michael S. Tsirkin
2009-07-15 11:15 ` [Qemu-devel] [PATCH 6/9] pci.c: factor out while(bus) bus->next loop logic into pci_find_bus_from() Isaku Yamahata
2009-09-30 11:45 ` Michael S. Tsirkin
2009-10-01 3:29 ` Isaku Yamahata
2009-10-01 6:28 ` Michael S. Tsirkin
2009-10-01 7:00 ` Isaku Yamahata
2009-10-01 7:14 ` Michael S. Tsirkin
2009-10-01 11:24 ` Gerd Hoffmann
2009-07-15 11:15 ` [Qemu-devel] [PATCH 7/9] pci: factor out the logic to get pci device from address Isaku Yamahata
2009-09-30 11:30 ` Michael S. Tsirkin
2009-10-01 3:59 ` Isaku Yamahata
2009-07-15 11:15 ` [Qemu-devel] [PATCH 8/9] pci_host.h: split non-inline static function in pci_host.h into pci_host_c.h Isaku Yamahata
2009-09-30 11:47 ` Michael S. Tsirkin
2009-10-01 4:13 ` Isaku Yamahata
2009-07-15 11:15 ` [Qemu-devel] [PATCH 9/9] [RFC] pci: pcie host and mmcfg support Isaku Yamahata
2009-10-06 9:32 ` Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090930114316.GH18802@redhat.com \
--to=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=yamahata@valinux.co.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.