From: Isaku Yamahata <yamahata@valinux.co.jp>
To: "Michael S. Tsirkin" <mst@redhat.com>
Cc: skandasa@cisco.com, adhyas@gmail.com, etmartin@cisco.com,
qemu-devel@nongnu.org, wexu2@cisco.com
Subject: [Qemu-devel] Re: [PATCH v2 2/9] pcie: helper functions for pcie extended capability.
Date: Tue, 14 Sep 2010 19:29:15 +0900 [thread overview]
Message-ID: <20100914102915.GC29080@valinux.co.jp> (raw)
In-Reply-To: <20100908103122.GF23051@redhat.com>
On Wed, Sep 08, 2010 at 01:31:22PM +0300, Michael S. Tsirkin wrote:
> > +/*
> > + * RW1C: Write-1-to-clear
> > + * regiger written val result
> > + * 0 0 => 0
> > + * 1 0 => 1
> > + * 0 1 => 0
> > + * 1 1 => 0
> > + */
> > +static inline void pcie_w1c_long(PCIDevice *d, uint32_t pos, uint32_t mask,
> > + uint32_t addr, uint32_t val)
> > +{
> > + uint32_t written = pcie_written_val_long(addr, val, pos) & mask;
> > + uint32_t reg = pci_get_long(d->config + pos);
> > + reg &= ~written;
> > + pci_set_long(d->config + pos, reg);
> > +}
> > +
> > +static inline void pcie_w1c_word(PCIDevice *d, uint32_t pos, uint16_t mask,
> > + uint32_t addr, uint32_t val)
> > +{
> > + uint16_t written = pcie_written_val_word(addr, val, pos) & mask;
> > + uint16_t reg = pci_get_word(d->config + pos);
> > + reg &= ~written;
> > + pci_set_word(d->config + pos, reg);
> > +}
> > +
>
> So the SERR bit support IMO belongs in pci. And this means the W1C
> inline functions need to move there.
>
> pci.c implemented this in a simpler way, by shifting
> val by 8 bytes each time. Can we find a way to do it
> in a similar way? I'll try to think about it.
How about the following?
diff --git a/hw/pci.c b/hw/pci.c
index ceee291..6f1ce48 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -627,6 +627,7 @@ static void pci_config_alloc(PCIDevice *pci_dev)
pci_dev->config = qemu_mallocz(config_size);
pci_dev->cmask = qemu_mallocz(config_size);
pci_dev->wmask = qemu_mallocz(config_size);
+ pci_dev->w1cmask = qemu_mallocz(config_size);
pci_dev->used = qemu_mallocz(config_size);
}
@@ -635,6 +636,7 @@ static void pci_config_free(PCIDevice *pci_dev)
qemu_free(pci_dev->config);
qemu_free(pci_dev->cmask);
qemu_free(pci_dev->wmask);
+ qemu_free(pci_dev->w1cmask);
qemu_free(pci_dev->used);
}
@@ -997,7 +999,10 @@ void pci_default_write_config(PCIDevice *d, uint32_t addr, uint32_t val, int l)
for (i = 0; i < l && addr + i < config_size; val >>= 8, ++i) {
uint8_t wmask = d->wmask[addr + i];
+ uint8_t w1cmask = d->w1cmask[addr + i];
+ assert(!(wmask & w1cmask));
d->config[addr + i] = (d->config[addr + i] & ~wmask) | (val & wmask);
+ d->config[addr + i] &= ~(val & w1cmask);
}
if (ranges_overlap(addr, l, PCI_BASE_ADDRESS_0, 24) ||
ranges_overlap(addr, l, PCI_ROM_ADDRESS, 4) ||
diff --git a/hw/pci.h b/hw/pci.h
index e001f92..3509459 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -132,6 +132,15 @@ struct PCIDevice {
/* Used to implement R/W bytes */
uint8_t *wmask;
+ /* Used to implement RW1C bytes
+ * regiger written val result
+ * 0 0 => 0
+ * 1 0 => 1
+ * 0 1 => 0
+ * 1 1 => 0
+ */
+ uint8_t *w1cmask;
+
/* Used to allocate config space for capabilities. */
uint8_t *used;
> > +int pci_pcie_cap_init(PCIDevice *dev,
> > + uint8_t offset, uint8_t type, uint8_t port)
>
> I think we should have
> pcie_init
> that would init everything and be external,
> and this one should be static, and this one
> should be static.
Ah, please take a look at Figure 7-10 if possible.
Express capability structure is too complex to initialize
by single function.
So I introduce functions that applies to all devices,
functions that applies to root complex,
function that applies, ...
--
yamahata
next prev parent reply other threads:[~2010-09-14 10:29 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-08 7:39 [Qemu-devel] [PATCH v2 0/9] pcie port switch emulators Isaku Yamahata
2010-09-08 7:39 ` [Qemu-devel] [PATCH v2 1/9] msi: implemented msi Isaku Yamahata
2010-09-08 9:13 ` [Qemu-devel] " Michael S. Tsirkin
2010-09-08 9:49 ` Isaku Yamahata
2010-09-08 7:39 ` [Qemu-devel] [PATCH v2 2/9] pcie: helper functions for pcie extended capability Isaku Yamahata
2010-09-08 10:31 ` [Qemu-devel] " Michael S. Tsirkin
2010-09-14 10:29 ` Isaku Yamahata [this message]
2010-09-14 12:23 ` Michael S. Tsirkin
2010-09-15 5:50 ` Isaku Yamahata
2010-09-15 13:05 ` Michael S. Tsirkin
2010-09-19 4:11 ` Isaku Yamahata
2010-09-19 11:51 ` Michael S. Tsirkin
2010-09-08 17:38 ` Wei Xu
2010-09-12 7:49 ` Blue Swirl
2010-09-12 13:26 ` Michael S. Tsirkin
2010-09-08 7:39 ` [Qemu-devel] [PATCH v2 3/9] pcie port: define struct PCIEPort/PCIESlot and helper functions Isaku Yamahata
2010-09-08 7:39 ` [Qemu-devel] [PATCH v2 4/9] pcie root port: implement pcie root port Isaku Yamahata
2010-09-08 7:39 ` [Qemu-devel] [PATCH v2 5/9] pcie upstream port: pci express switch upstream port Isaku Yamahata
2010-09-08 7:39 ` [Qemu-devel] [PATCH v2 6/9] pcie downstream port: pci express switch downstream port Isaku Yamahata
2010-09-08 7:39 ` [Qemu-devel] [PATCH v2 7/9] pcie/hotplug: glue pushing attention button command. pcie_abp Isaku Yamahata
2010-09-08 10:34 ` [Qemu-devel] " Michael S. Tsirkin
2010-09-09 3:43 ` Isaku Yamahata
2010-09-08 7:39 ` [Qemu-devel] [PATCH v2 8/9] pcie/aer: glue aer error injection into qemu monitor Isaku Yamahata
2010-09-08 7:39 ` [Qemu-devel] [PATCH v2 9/9] msix: clear not only INTA, but all INTx when MSI-X is enabled Isaku Yamahata
2010-09-08 10:33 ` [Qemu-devel] " 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=20100914102915.GC29080@valinux.co.jp \
--to=yamahata@valinux.co.jp \
--cc=adhyas@gmail.com \
--cc=etmartin@cisco.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=skandasa@cisco.com \
--cc=wexu2@cisco.com \
/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).