The Linux kernel PCI subsystem and data structures
The Linux kernel supports the PCI standard and provides APIs to deal with such devices. In Linux, the PCI implementation can be broadly divided into the following main components:
- PCI BIOS: This is an architecture-dependent part in charge of kicking off the PCI bus initialization. ARM-specific Linux implementation lies in
arch/arm/kernel/bios32.c
. The PCI BIOS code interfaces with PCI Host Controller code as well as the PCI core in order to perform bus enumeration and the allocation of resources, such as memory and interrupts.The successful completion of BIOS execution guarantees that all the PCI devices in the system are assigned parts of available PCI resources and their respective drivers (referred to as slave or endpoint drivers) can take control of them using the facilities provided by the PCI core.
Here, the kernel invokes the services of architecture and board-specific PCI functionalities. Two important tasks of PCI...