From mboxrd@z Thu Jan 1 00:00:00 1970
Received: from eggs.gnu.org ([2001:4830:134:3::10]:49076)
by lists.gnu.org with esmtp (Exim 4.71)
(envelope-from
) id 1YxZAd-00039J-Uv
for qemu-devel@nongnu.org; Wed, 27 May 2015 07:06:49 -0400
Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
(envelope-from ) id 1YxZAa-0006mG-Mg
for qemu-devel@nongnu.org; Wed, 27 May 2015 07:06:47 -0400
Received: from mailout3.w1.samsung.com ([210.118.77.13]:16090)
by eggs.gnu.org with esmtp (Exim 4.71)
(envelope-from ) id 1YxZAa-0006jp-GU
for qemu-devel@nongnu.org; Wed, 27 May 2015 07:06:44 -0400
Received: from eucpsbgm1.samsung.com (unknown [203.254.199.244])
by mailout3.w1.samsung.com
(Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5
2014)) with ESMTP id <0NP0004ME9J5ULA0@mailout3.w1.samsung.com> for
qemu-devel@nongnu.org; Wed, 27 May 2015 12:06:41 +0100 (BST)
From: Pavel Fedin
Date: Wed, 27 May 2015 14:06:40 +0300
Message-id: <012901d0986d$3574ab00$a05e0100$@samsung.com>
MIME-version: 1.0
Content-type: text/plain; charset=US-ASCII
Content-transfer-encoding: 7bit
Content-language: ru
Subject: [Qemu-devel] [PATCH] Add stream ID to MSI write
List-Id:
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
To: 'QEMU Developers'
Cc: 'Peter Maydell' , "'Michael S. Tsirkin'"
GICv3 ITS distinguishes between devices by using hardwired device IDs passed on the bus.
This patch implements passing these IDs in qemu.
SMMU is also known to use stream IDs, therefore this addition can also be useful for
implementing platforms with SMMU.
Unfortunately currently qemu does not seem to have such thing as bus number, therefore we
use only devfn. This is OK for platforms with only one PCI bus instance. Perhaps
additional property should be implemented when we emulate some GICv3-based machine with
more than one bus.
Signed-off-by: Pavel Fedin
---
hw/pci/msix.c | 4 +++-
include/exec/memattrs.h | 2 ++
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/hw/pci/msix.c b/hw/pci/msix.c
index 9935f98..e85ce10 100644
--- a/hw/pci/msix.c
+++ b/hw/pci/msix.c
@@ -433,6 +433,7 @@ int msix_enabled(PCIDevice *dev)
void msix_notify(PCIDevice *dev, unsigned vector)
{
MSIMessage msg;
+ MemTxAttrs attrs = {};
if (vector >= dev->msix_entries_nr || !dev->msix_entry_used[vector])
return;
@@ -442,9 +443,10 @@ void msix_notify(PCIDevice *dev, unsigned vector)
}
msg = msix_get_message(dev, vector);
+ attrs.stream_id = dev->devfn; /* TODO: Add bus number here */
address_space_stl_le(&dev->bus_master_as, msg.address, msg.data,
- MEMTXATTRS_UNSPECIFIED, NULL);
+ attrs, NULL);
}
void msix_reset(PCIDevice *dev)
diff --git a/include/exec/memattrs.h b/include/exec/memattrs.h
index 1389b4b..96dc440 100644
--- a/include/exec/memattrs.h
+++ b/include/exec/memattrs.h
@@ -33,6 +33,8 @@ typedef struct MemTxAttrs {
unsigned int secure:1;
/* Memory access is usermode (unprivileged) */
unsigned int user:1;
+ /* Stream ID (for MSI for example) */
+ unsigned int stream_id:16;
} MemTxAttrs;
/* Bus masters which don't specify any attributes will get this,
--
1.9.5.msysgit.0