whole_func_string: function locateAcpiDevice(dev) {
    if (!dev.isDevice()) {
      return null;
    }
  
    const addr = dev.address();
    const slotId = ((addr >>> 16) & 0xffff) >>> 0;
    const funcId = (addr & 0xffff) >>> 0;
    let busId = 0;
  
    if (dev.isRootBridge()) {
      busId = dev.getRootBridgeBusNumber();
  
      return {
        bus: busId,
        slot: slotId,
        func: funcId,
      };
    }
  
    const parentDev = dev.parent();
    if (parentDev === null) {
      return null;
    }
  
    if (!parentDev.isDevice()) {
      return null;
    }
  
    if (parentDev.isRootBridge()) {
      busId = parentDev.getRootBridgeBusNumber();
  
      return {
        bus: busId,
        slot: slotId,
        func: funcId,
      };
    }
  
    const parentLocation = locateAcpiDevice(parentDev);
    if (parentLocation === null) {
      return null;
    }
  
    const pciParent = pciAccessorFactory.get({
      bus: parentLocation.bus,
      slot: parentLocation.slot,
      func: parentLocation.func,
    });
  
    const header = pciParent.read(pciParent.fields().HEADER_TYPE);
  
    // Mask multifunction bit
    const headerType = (header & 0x7f) >>> 0;
    if (headerType !== 0x01 && headerType !== 0x02) {
      return null;
    }
  
    const bridgeBus = pciParent.read(pciParent.bridgeFields().SECONDARY_BUS);
  
    return {
      bus: bridgeBus,
      slot: slotId,
      func: funcId,
    };
  }
func_code_string: function locateAcpiDevice(dev) {
    if (!dev.isDevice()) {
      return null;
    }
  
    const addr = dev.address();
    const slotId = ((addr >>> 16) & 0xffff) >>> 0;
    const funcId = (addr & 0xffff) >>> 0;
    let busId = 0;
  
    if (dev.isRootBridge()) {
      busId = dev.getRootBridgeBusNumber();
  
      return {
        bus: busId,
        slot: slotId,
        func: funcId,
      };
    }
  
    const parentDev = dev.parent();
    if (parentDev === null) {
      return null;
    }
  
    if (!parentDev.isDevice()) {
      return null;
    }
  
    if (parentDev.isRootBridge()) {
      busId = parentDev.getRootBridgeBusNumber();
  
      return {
        bus: busId,
        slot: slotId,
        func: funcId,
      };
    }
  
    const parentLocation = locateAcpiDevice(parentDev);
    if (parentLocation === null) {
      return null;
    }
  
    const pciParent = pciAccessorFactory.get({
      bus: parentLocation.bus,
      slot: parentLocation.slot,
      func: parentLocation.func,
    });
  
    const header = pciParent.read(pciParent.fields().HEADER_TYPE);
  
    // Mask multifunction bit
    const headerType = (header & 0x7f) >>> 0;
    if (headerType !== 0x01 && headerType !== 0x02) {
      return null;
    }
  
    const bridgeBus = pciParent.read(pciParent.bridgeFields().SECONDARY_BUS);
  
    return {
      bus: bridgeBus,
      slot: slotId,
      func: funcId,
    };
  }
func_documentation_string: Find ACPI PCI device bus, slot and function