pci-server

Updated: October 28, 2024

Resource manager process that manages the PCI hierarchy

Note: You must be root in order to start this manager.

Syntax:

pci-server [-c] [-n path] [-v[v...]] [--aspace-enable[=all|mem|io]]
           [--bus-scan-limit=value] [--config=config_file]

Runs on:

QNX Neutrino

Options:

-c
Configure bridges and devices. The generic bus configuration module is used along with default configuration settings. You can also control configuration with the DO_BUS_CONFIG parameter in a server configuration file; this option takes precedence.
-n path
Specify the server's namespace entry. The default is /dev/pci.

You can also change this name by using the SERVER_NODE_NAME parameter in a configuration file specified with the --config option. The -n option takes precedence.

Note: You typically don't need to change this name, and we don't encourage you to do so.
-v[v...]
Be verbose. Specifying additional -v options increases the verbosity of displayed and logged detail.
--aspace-enable[=all|mem|io]
Enable the Memory and/or I/O address spaces in devices that have been assigned that address space type but haven't had that address space enabled in the CMD register. This option is applicable only in enumeration-only mode, as configuration mode (-c command-line option or DO_BUS_CONFIG=yes in a server configuration file) enables assigned address spaces automatically.

In recent UEFI-based x86 platforms, it has been observed that even though the UEFI has assigned address space to a device, that address space isn't being enabled. This option corrects that behavior.

If you use this option without an = or with =all, all assigned address spaces are enabled. The mutually exclusive =mem and =io variants let you to restrict which address spaces are acted on. You aren't likely to use these very often if at all.

Note: This option operates on all devices. You can use pci-tool or a similar utility to selectively enable address spaces if desired. See the ASPACE_ENABLE parameter in the [buscfg] section of the ${QNX_TARGET}/etc/system/config/pci/pci_server-template.cfg file for an example.
--bus-scan-limit=value
Specify the highest bus to scan during enumeration. You can also set this value with the BUS_SCAN_LIMIT parameter in a server configuration file; this option takes precedence.
Note: This parameter doesn't limit the highest assigned bus number, only the highest bus scanned during enumeration.
--config=config_file
Specify a configuration file that controls the PCI server's runtime mode. See ${QNX_TARGET}/etc/system/config/pci/pci_server-template.cfg for reference. You can edit this file (or a copy) to alter the PCI server's runtime behavior.

Description:

The pci-server utility is the PCI server resource manager that's responsible for enumerating and optionally configuring all PCI/PCIe devices, providing access control to some device information and settings and for all configuration space writes.

Without any command-line arguments, the PCI server enumerates the PCI bus, but doesn't configure it. This is the mode of operation for systems that have already enumerated and configured the PCI devices.

If configuration is required (or desired), the PCI server performs a bus configuration using the bus configuration module specified with the PCI_SERVER_BUSCFG_MODULE environment variable (or /lib/dll/pci/pci_server-buscfg-generic.so if that variable is unset). A bus configuration is also performed if you provide the --config=filename option and filename is a server configuration file that contains the parameter DO_BUS_CONFIG=yes/true in the [buscfg] section.

The PCI server can load other optional modules, each with its own set of arguments. For more information, see Configuration files in the Overview chapter of the PCI Server User's Guide, as well as ${QNX_TARGET}/etc/system/config/pci/pci_server-template.cfg.

The pci_server-qvm_support.so module

If you're using the smmuman safety variant (smmuman-safety) or the qvm safety variant (qvm-safety), you need to load the pci_server-qvm_support.so module:
  1. Define PCI_SERVER_MODULE_LIST in the configuration file. For example, you could define the configuration file in your buildfile like this:
      /proc/boot/pci_server.cfg={
    
         [runtime]
         PCI_SERVER_MODULE_LIST=/lib/dll/pci/pci_server-qvm_support.so
    
      }
    
  2. Include pci_server-qvm_support.so in your buildfile. For example:
      /lib/dll/pci/pci_server-qvm_support.so=pci/pci_server-qvm_support.so
    
  3. Specify the --config option when you start pci-server:
      pci-server --bus-scan-limit=16 --aspace-enable --config=/proc/boot/pci_server.cfg
    

There's no harm in loading pci_server-qvm_support.so if you aren't using qvm-safety or smmuman-safety. There's no impact on pci-server's behavior if clients don't use the new APIs that the module defines.