qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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
> 
> 

  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).