From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NzQkk-00048D-J4 for qemu-devel@nongnu.org; Wed, 07 Apr 2010 04:36:50 -0400 Received: from [140.186.70.92] (port=45093 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NzQkf-00046D-F4 for qemu-devel@nongnu.org; Wed, 07 Apr 2010 04:36:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1NzQkd-000357-95 for qemu-devel@nongnu.org; Wed, 07 Apr 2010 04:36:45 -0400 Received: from moutng.kundenserver.de ([212.227.126.171]:58859) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1NzQkc-00034i-UQ for qemu-devel@nongnu.org; Wed, 07 Apr 2010 04:36:43 -0400 Message-ID: <4BBC4417.9030609@mail.berlios.de> Date: Wed, 07 Apr 2010 10:36:39 +0200 From: Stefan Weil MIME-Version: 1.0 References: <2b600ff5a3d1dd5fc1cb4c35c4403d21674b3377.1270627361.git.mst@redhat.com> In-Reply-To: <2b600ff5a3d1dd5fc1cb4c35c4403d21674b3377.1270627361.git.mst@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [PATCH 1/2] pci: add API to add capability at a known offset List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: qemu-devel@nongnu.org Michael S. Tsirkin schrieb: > Unlike virtio, device emulations need to add pci capabilities > at known offsets to match real hardware. Make this possible > by adding an appropriate API. > > Signed-off-by: Michael S. Tsirkin > --- > hw/pci.c | 16 ++++++++++++---- > hw/pci.h | 2 ++ > 2 files changed, 14 insertions(+), 4 deletions(-) > > diff --git a/hw/pci.c b/hw/pci.c > index 0dbca17..df03149 100644 > --- a/hw/pci.c > +++ b/hw/pci.c > @@ -1789,12 +1789,10 @@ static int pci_add_option_rom(PCIDevice *pdev) > } > > /* Reserve space and add capability to the linked list in pci config space */ > -int pci_add_capability(PCIDevice *pdev, uint8_t cap_id, uint8_t size) > +int pci_add_capability_at_offset(PCIDevice *pdev, uint8_t cap_id, > + uint8_t offset, uint8_t size) > { > - uint8_t offset = pci_find_space(pdev, size); > uint8_t *config = pdev->config + offset; > - if (!offset) > - return -ENOSPC; > config[PCI_CAP_LIST_ID] = cap_id; > config[PCI_CAP_LIST_NEXT] = pdev->config[PCI_CAPABILITY_LIST]; > pdev->config[PCI_CAPABILITY_LIST] = offset; > @@ -1807,6 +1805,16 @@ int pci_add_capability(PCIDevice *pdev, uint8_t cap_id, uint8_t size) > return offset; > } > > +/* Find and reserve space and add capability to the linked list > + * in pci config space */ > +int pci_add_capability(PCIDevice *pdev, uint8_t cap_id, uint8_t size) > +{ > + uint8_t offset = pci_find_space(pdev, size); > + if (!offset) > + return -ENOSPC; > {} Coding style? The rest is ok. > + return pci_add_capability_at_offset(pdev, cap_id, offset, size); > +} > + > /* Unlink capability from the pci config space. */ > void pci_del_capability(PCIDevice *pdev, uint8_t cap_id, uint8_t size) > { > diff --git a/hw/pci.h b/hw/pci.h > index 20c670e..625188c 100644 > --- a/hw/pci.h > +++ b/hw/pci.h > @@ -190,6 +190,8 @@ void pci_register_bar(PCIDevice *pci_dev, int region_num, > PCIMapIORegionFunc *map_func); > > int pci_add_capability(PCIDevice *pci_dev, uint8_t cap_id, uint8_t cap_size); > +int pci_add_capability_at_offset(PCIDevice *pci_dev, uint8_t cap_id, > + uint8_t cap_offset, uint8_t cap_size); > > void pci_del_capability(PCIDevice *pci_dev, uint8_t cap_id, uint8_t cap_size); > >