diff options
author | H. Peter Anvin <hpa@zytor.com> | 2010-02-03 16:06:41 -0800 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2010-02-03 16:06:41 -0800 |
commit | addaeaeb3949d576c4e0eb5cfc133b7c3bcfa8fa (patch) | |
tree | 2ffea726dc494e87ecc9f506bc6a2bc9242730e3 /gpxe/src/drivers/bus/pciextra.c | |
parent | 5c0f48e49f8d7d084810ecf0b98a76aaebb44835 (diff) | |
parent | e7a5f95432132c8fc8f8ede39fda1d368002ddd8 (diff) | |
download | syslinux.git-addaeaeb3949d576c4e0eb5cfc133b7c3bcfa8fa.tar.gz syslinux.git-addaeaeb3949d576c4e0eb5cfc133b7c3bcfa8fa.tar.xz syslinux.git-addaeaeb3949d576c4e0eb5cfc133b7c3bcfa8fa.zip |
Merge branch 'master' into i915res
Diffstat (limited to 'gpxe/src/drivers/bus/pciextra.c')
-rw-r--r-- | gpxe/src/drivers/bus/pciextra.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gpxe/src/drivers/bus/pciextra.c b/gpxe/src/drivers/bus/pciextra.c index 4603bcb9..74c40990 100644 --- a/gpxe/src/drivers/bus/pciextra.c +++ b/gpxe/src/drivers/bus/pciextra.c @@ -1,3 +1,5 @@ +FILE_LICENCE ( GPL2_OR_LATER ); + #include <stdint.h> #include <gpxe/pci.h> @@ -58,8 +60,11 @@ int pci_find_capability ( struct pci_device *pci, int cap ) { * function. */ unsigned long pci_bar_size ( struct pci_device *pci, unsigned int reg ) { + uint16_t cmd; uint32_t start, size; + /* Save the original command register */ + pci_read_config_word ( pci, PCI_COMMAND, &cmd ); /* Save the original bar */ pci_read_config_dword ( pci, reg, &start ); /* Compute which bits can be set */ @@ -68,6 +73,8 @@ unsigned long pci_bar_size ( struct pci_device *pci, unsigned int reg ) { /* Restore the original size */ pci_write_config_dword ( pci, reg, start ); /* Find the significant bits */ + /* Restore the original command register. This reenables decoding. */ + pci_write_config_word ( pci, PCI_COMMAND, cmd ); if ( start & PCI_BASE_ADDRESS_SPACE_IO ) { size &= PCI_BASE_ADDRESS_IO_MASK; } else { |