From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tejun Heo Subject: [PATCH] devres: implement pcim_iomap_regions_request_all() Date: Tue, 11 Mar 2008 19:51:38 +0900 Message-ID: <47D6643A.6060001@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Return-path: Received: from wa-out-1112.google.com ([209.85.146.179]:46582 "EHLO wa-out-1112.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751382AbYCKKvo (ORCPT ); Tue, 11 Mar 2008 06:51:44 -0400 Received: by wa-out-1112.google.com with SMTP id v27so2784709wah.23 for ; Tue, 11 Mar 2008 03:51:44 -0700 (PDT) Sender: linux-ide-owner@vger.kernel.org List-Id: linux-ide@vger.kernel.org To: Jeff Garzik , IDE/ATA development list , linux-pci@atrey.karlin.mff.cuni.cz, Linux Kernel , Greg KH Some drivers need to reserve all PCI BARs to prevent other drivers misusing unoccupied BARs. pcim_iomap_regions_request_all() requests all BARs and iomap specified BARs. Signed-off-by: Tejun Heo Cc: Greg Kroah-Hartman Cc: Alan Cox Cc: Jeff Garzik --- After acked, it's probably best to push this through libata-dev as that's the only user for now. Thanks. lib/devres.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) Index: work/lib/devres.c =================================================================== --- work.orig/lib/devres.c +++ work/lib/devres.c @@ -298,6 +298,31 @@ int pcim_iomap_regions(struct pci_dev *p EXPORT_SYMBOL(pcim_iomap_regions); /** + * pcim_iomap_regions_request_all - Request all BARs and iomap specified ones + * @pdev: PCI device to map IO resources for + * @mask: Mask of BARs to iomap + * @name: Name used when requesting regions + * + * Request all PCI BARs and iomap regions specified by @mask. + */ +int pcim_iomap_regions_request_all(struct pci_dev *pdev, u16 mask, + const char *name) +{ + int request_mask = ((1 << 6) - 1) & ~mask; + int rc; + + rc = pci_request_selected_regions(pdev, request_mask, name); + if (rc) + return rc; + + rc = pcim_iomap_regions(pdev, mask, name); + if (rc) + pci_release_selected_regions(pdev, request_mask); + return rc; +} +EXPORT_SYMBOL(pcim_iomap_regions_request_all); + +/** * pcim_iounmap_regions - Unmap and release PCI BARs * @pdev: PCI device to map IO resources for * @mask: Mask of BARs to unmap and release