diff options
author | Martin Mares <mj@ucw.cz> | 2022-10-30 13:29:34 +0100 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 2022-10-30 13:29:34 +0100 |
commit | 8683ca3b20878a24ae1166111a635ee1c0c7b16e (patch) | |
tree | ccbf859b7e1359e4a44f682572298d4fc06e8334 | |
parent | 2849db6749c75b465b38efbc603a4cf33076d05a (diff) | |
parent | 4bb972945cd7076d0b7b128fdf31015329ef9d52 (diff) | |
download | pciutils-8683ca3b20878a24ae1166111a635ee1c0c7b16e.tar.gz |
Merge remote-tracking branch 'sthibaul/master'
-rw-r--r-- | lib/hurd.c | 28 |
1 files changed, 20 insertions, 8 deletions
@@ -260,7 +260,7 @@ hurd_write(struct pci_dev *d, int pos, byte * buf, int len) /* Get requested info from the server */ -static void +static int hurd_fill_regions(struct pci_dev *d) { mach_port_t device_port = device_port_lookup(d); @@ -270,7 +270,7 @@ hurd_fill_regions(struct pci_dev *d) int err = pci_get_dev_regions(device_port, &buf, &size); if (err) - return; + return 0; if ((char *) ®ions != buf) { @@ -278,7 +278,7 @@ hurd_fill_regions(struct pci_dev *d) if (size > sizeof(regions)) { vm_deallocate(mach_task_self(), (vm_address_t) buf, size); - return; + return 0; } memcpy(®ions, buf, size); @@ -297,9 +297,11 @@ hurd_fill_regions(struct pci_dev *d) d->size[i] = regions[i].size; } + + return 1; } -static void +static int hurd_fill_rom(struct pci_dev *d) { struct pci_xrom_bar rom; @@ -309,7 +311,7 @@ hurd_fill_rom(struct pci_dev *d) int err = pci_get_dev_rom(device_port, &buf, &size); if (err) - return; + return 0; if ((char *) &rom != buf) { @@ -317,7 +319,7 @@ hurd_fill_rom(struct pci_dev *d) if (size > sizeof(rom)) { vm_deallocate(mach_task_self(), (vm_address_t) buf, size); - return; + return 0; } memcpy(&rom, buf, size); @@ -326,6 +328,8 @@ hurd_fill_rom(struct pci_dev *d) d->rom_base_addr = rom.base_addr; d->rom_size = rom.size; + + return 1; } static void @@ -334,10 +338,18 @@ hurd_fill_info(struct pci_dev *d, unsigned int flags) if (!d->access->buscentric) { if (want_fill(d, flags, PCI_FILL_BASES | PCI_FILL_SIZES)) - hurd_fill_regions(d); + { + if (hurd_fill_regions(d)) + clear_fill(d, PCI_FILL_BASES | PCI_FILL_SIZES); + } if (want_fill(d, flags, PCI_FILL_ROM_BASE)) - hurd_fill_rom(d); + { + if (hurd_fill_rom(d)) + clear_fill(d, PCI_FILL_ROM_BASE); + } } + + pci_generic_fill_info(d, flags); } struct pci_methods pm_hurd = { |