From patchwork Mon Oct 13 20:13:05 2008 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: stephen hemminger X-Patchwork-Id: 4351 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id 5A7FBDDF16 for ; Tue, 14 Oct 2008 08:05:30 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755926AbYJMVF0 (ORCPT ); Mon, 13 Oct 2008 17:05:26 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755913AbYJMVFZ (ORCPT ); Mon, 13 Oct 2008 17:05:25 -0400 Received: from suva.vyatta.com ([76.74.103.44]:57906 "EHLO suva.vyatta.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755909AbYJMVFY (ORCPT ); Mon, 13 Oct 2008 17:05:24 -0400 Received: from suva.vyatta.com (suva [127.0.0.1]) by suva.vyatta.com (8.13.7/8.13.7) with ESMTP id m9DL3Zp7010557; Mon, 13 Oct 2008 14:03:35 -0700 Received: (from shemminger@localhost) by suva.vyatta.com (8.13.7/8.13.7/Submit) id m9DL3ZZu010554; Mon, 13 Oct 2008 14:03:35 -0700 Message-Id: <20081013201452.870891660@vyatta.com> References: <20081013201302.899587376@vyatta.com> User-Agent: quilt/0.46-1 Date: Mon, 13 Oct 2008 13:13:05 -0700 From: Stephen Hemminger To: David Miller , Jeff Garzik Cc: netdev@vger.kernel.org, linux-pci@vger.kernel.org Subject: [PATCH 3/9] PCI: add interface to set visible size of VPD (rev3) Content-Disposition: inline; filename=vpd-size.patch Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The VPD on all devices may not really be 32K. Unfortunately, there is no generic way to find the size, so this adds a simple API hook to resize it. Signed-off-by: Stephen Hemminger --- drivers/pci/access.c | 23 +++++++++++++++++++++++ include/linux/pci.h | 1 + 2 files changed, 24 insertions(+) --- a/drivers/pci/access.c 2008-10-13 13:03:58.000000000 -0700 +++ b/drivers/pci/access.c 2008-10-13 13:04:01.000000000 -0700 @@ -340,6 +340,29 @@ int pci_vpd_pci22_init(struct pci_dev *d } /** + * pci_vpd_truncate - Set available Vital Product Data size + * @dev: pci device struct + * @size: available memory in bytes + * + * Adjust size of available VPD area. + */ +int pci_vpd_truncate(struct pci_dev *dev, size_t size) +{ + if (!dev->vpd) + return -EINVAL; + + /* limited by the access method */ + if (size > dev->vpd->len) + return -EINVAL; + + dev->vpd->len = size; + dev->vpd->attr->size = size; + + return 0; +} +EXPORT_SYMBOL(pci_vpd_truncate); + +/** * pci_block_user_cfg_access - Block userspace PCI config reads/writes * @dev: pci device struct * --- a/include/linux/pci.h 2008-10-13 13:03:58.000000000 -0700 +++ b/include/linux/pci.h 2008-10-13 13:04:01.000000000 -0700 @@ -653,6 +653,7 @@ int pci_bus_find_capability(struct pci_b /* Vital product data routines */ ssize_t pci_read_vpd(struct pci_dev *dev, loff_t pos, size_t count, void *buf); ssize_t pci_write_vpd(struct pci_dev *dev, loff_t pos, size_t count, const void *buf); +int pci_vpd_truncate(struct pci_dev *dev, size_t size); /* Helper functions for low-level code (drivers/pci/setup-[bus,res].c) */ void pci_bus_assign_resources(struct pci_bus *bus);