forked from mirrors/linux
		
	PCI: add interface to set visible size of VPD
The VPD on all devices may not be 32K. Unfortunately, there is no generic way to find the size, so this adds a simple API hook to reset it. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
		
							parent
							
								
									287d19ce2e
								
							
						
					
					
						commit
						db5679437a
					
				
					 2 changed files with 24 additions and 0 deletions
				
			
		| 
						 | 
					@ -339,6 +339,29 @@ int pci_vpd_pci22_init(struct pci_dev *dev)
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 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
 | 
					 * pci_block_user_cfg_access - Block userspace PCI config reads/writes
 | 
				
			||||||
 * @dev:	pci device struct
 | 
					 * @dev:	pci device struct
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -690,6 +690,7 @@ int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap);
 | 
				
			||||||
/* Vital product data routines */
 | 
					/* Vital product data routines */
 | 
				
			||||||
ssize_t pci_read_vpd(struct pci_dev *dev, loff_t pos, size_t count, void *buf);
 | 
					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);
 | 
					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) */
 | 
					/* Helper functions for low-level code (drivers/pci/setup-[bus,res].c) */
 | 
				
			||||||
void pci_bus_assign_resources(struct pci_bus *bus);
 | 
					void pci_bus_assign_resources(struct pci_bus *bus);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue