qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Marcel Apfelbaum <marcel.a@redhat.com>
To: qemu-devel@nongnu.org
Cc: pbonzini@redhat.com, aliguori@us.ibm.com, afaerber@suse.de,
	mst@redhat.com
Subject: [Qemu-devel] [PATCH RFC 2/3] hw/pci: add MemoryRegion ops for unassigned pci addresses
Date: Mon,  2 Sep 2013 17:13:08 +0300	[thread overview]
Message-ID: <1378131189-25538-3-git-send-email-marcel.a@redhat.com> (raw)
In-Reply-To: <1378131189-25538-1-git-send-email-marcel.a@redhat.com>

The MemoryRegions assigned with this ops shall "intercept"
the accesses to unassigned pci address space and the
associated callback will set MASTER ABORT bit in the
STATUS register of the device that initiated the
transaction as defined in PCI spec.

Note: This implementation assumes that all the reads/writes to
the pci address space are done by the cpu.

Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com>
---
 hw/pci/pci.c         | 18 ++++++++++++++++++
 include/hw/pci/pci.h |  3 +++
 2 files changed, 21 insertions(+)

diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index 4c004f5..f0289fc 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -2229,6 +2229,24 @@ MemoryRegion *pci_address_space_io(PCIDevice *dev)
     return dev->bus->address_space_io;
 }
 
+static bool pci_unassigned_mem_accepts(void *opaque, hwaddr addr,
+                                       unsigned size, bool is_write)
+{
+    PCIDevice *d = opaque;
+
+    /* FIXME assumption: the cpu initiated the pci transaction
+     * and not another pci device */
+    pci_word_test_and_set_mask(d->config + PCI_STATUS,
+                               PCI_STATUS_REC_MASTER_ABORT);
+
+    return false;
+}
+
+const MemoryRegionOps pci_unassigned_mem_ops = {
+    .valid.accepts = pci_unassigned_mem_accepts,
+    .endianness = DEVICE_NATIVE_ENDIAN,
+};
+
 static void pci_device_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *k = DEVICE_CLASS(klass);
diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h
index ccec2ba..854681c 100644
--- a/include/hw/pci/pci.h
+++ b/include/hw/pci/pci.h
@@ -329,6 +329,9 @@ int pci_device_load(PCIDevice *s, QEMUFile *f);
 MemoryRegion *pci_address_space(PCIDevice *dev);
 MemoryRegion *pci_address_space_io(PCIDevice *dev);
 
+#define PCI_UNASSIGNED_MEM_PRIORITY -1
+extern const MemoryRegionOps pci_unassigned_mem_ops;
+
 typedef void (*pci_set_irq_fn)(void *opaque, int irq_num, int level);
 typedef int (*pci_map_irq_fn)(PCIDevice *pci_dev, int irq_num);
 typedef PCIINTxRoute (*pci_route_irq_fn)(void *opaque, int pin);
-- 
1.8.3.1

  parent reply	other threads:[~2013-09-02 14:13 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-02 14:13 [Qemu-devel] [PATCH RFC 0/3] pci: complete master abort protocol Marcel Apfelbaum
2013-09-02 14:13 ` [Qemu-devel] [PATCH RFC 1/3] memory: allow MemoryRegion's priority field to accept negative values Marcel Apfelbaum
2013-09-02 14:38   ` Peter Maydell
2013-09-02 14:46     ` Marcel Apfelbaum
2013-09-09 12:16     ` Marcel Apfelbaum
2013-09-02 14:13 ` Marcel Apfelbaum [this message]
2013-09-02 14:42   ` [Qemu-devel] [PATCH RFC 2/3] hw/pci: add MemoryRegion ops for unassigned pci addresses Peter Maydell
2013-09-02 15:46     ` Marcel Apfelbaum
2013-09-02 14:48   ` Michael S. Tsirkin
2013-09-02 14:51     ` Marcel Apfelbaum
2013-09-02 14:13 ` [Qemu-devel] [PATCH RFC 3/3] hw/pci-host: catch acesses to " Marcel Apfelbaum
2013-09-02 14:39   ` Peter Maydell
2013-09-02 15:42     ` Marcel Apfelbaum
2013-09-02 15:48       ` Andreas Färber
2013-09-02 15:53       ` Peter Maydell
2013-09-02 15:58         ` Peter Maydell
2013-09-02 16:00         ` Michael S. Tsirkin
2013-09-02 16:05           ` Peter Maydell
2013-09-02 16:17             ` Michael S. Tsirkin
2013-09-02 16:02         ` Marcel Apfelbaum
2013-09-02 15:57       ` Michael S. Tsirkin
2013-09-02 14:30 ` [Qemu-devel] [PATCH RFC 0/3] pci: complete master abort protocol Peter Maydell
2013-09-02 14:39   ` Marcel Apfelbaum
2013-09-02 14:43     ` Peter Maydell
2013-09-02 15:49       ` Marcel Apfelbaum

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=1378131189-25538-3-git-send-email-marcel.a@redhat.com \
    --to=marcel.a@redhat.com \
    --cc=afaerber@suse.de \
    --cc=aliguori@us.ibm.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /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).