From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Huth Subject: Re: [kvm-unit-tests PATCH v4 03/12] pci: x86: Add remaining PCI configuration space accessors Date: Tue, 7 Jun 2016 08:48:46 +0200 Message-ID: <57566E4E.4020602@redhat.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: Andrew Jones To: Alexander Gordeev , kvm@vger.kernel.org Return-path: Received: from mx1.redhat.com ([209.132.183.28]:35745 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753788AbcFGGsu (ORCPT ); Tue, 7 Jun 2016 02:48:50 -0400 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4A9FF64D0F for ; Tue, 7 Jun 2016 06:48:49 +0000 (UTC) In-Reply-To: Sender: kvm-owner@vger.kernel.org List-ID: On 06.06.2016 14:46, Alexander Gordeev wrote: > Cc: Thomas Huth > Cc: Andrew Jones > Reviewed-by: Andrew Jones > Signed-off-by: Alexander Gordeev > --- > lib/pci.c | 5 ++--- > lib/x86/asm/pci.h | 23 +++++++++++++++++++++-- > 2 files changed, 23 insertions(+), 5 deletions(-) > > diff --git a/lib/pci.c b/lib/pci.c > index 7ddaac639006..b0d89bf98067 100644 > --- a/lib/pci.c > +++ b/lib/pci.c > @@ -13,9 +13,8 @@ pcidevaddr_t pci_find_dev(uint16_t vendor_id, uint16_t device_id) > pcidevaddr_t dev; > > for (dev = 0; dev < 256; ++dev) { > - uint32_t id = pci_config_readl(dev, 0); > - > - if ((id & 0xFFFF) == vendor_id && (id >> 16) == device_id) > + if (pci_config_readw(dev, PCI_VENDOR_ID) == vendor_id && > + pci_config_readw(dev, PCI_DEVICE_ID) == device_id) > return dev; > } > > diff --git a/lib/x86/asm/pci.h b/lib/x86/asm/pci.h > index d00438fe91e4..821a2c1e180a 100644 > --- a/lib/x86/asm/pci.h > +++ b/lib/x86/asm/pci.h > @@ -9,11 +9,30 @@ > #include "pci.h" > #include "x86/asm/io.h" > > +#define PCI_CONF1_ADDRESS(dev, reg) ((0x1 << 31) | (dev << 8) | reg) > + > +static inline uint8_t pci_config_readb(pcidevaddr_t dev, uint8_t reg) > +{ > + outl(PCI_CONF1_ADDRESS(dev, reg), 0xCF8); > + return inb(0xCFC); > +} > + > +static inline uint16_t pci_config_readw(pcidevaddr_t dev, uint8_t reg) > +{ > + outl(PCI_CONF1_ADDRESS(dev, reg), 0xCF8); > + return inw(0xCFC); > +} > + > static inline uint32_t pci_config_readl(pcidevaddr_t dev, uint8_t reg) > { > - uint32_t index = reg | (dev << 8) | (0x1 << 31); > - outl(index, 0xCF8); > + outl(PCI_CONF1_ADDRESS(dev, reg), 0xCF8); > return inl(0xCFC); > } > > +static inline void pci_config_writel(pcidevaddr_t dev, uint8_t reg, uint32_t val) > +{ > + outl(PCI_CONF1_ADDRESS(dev, reg), 0xCF8); > + outl(val, 0xCFC); > +} > + > #endif Maybe add a #define for that magic value 0xCF8, now that you use it multiple times? Anyway, Reviewed-by: Thomas Huth