1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 19:17:44 +00:00

Kernel/PCI: Introduce a new ECAM access mechanism

Now the kernel supports 2 ECAM access methods.
MMIOAccess was renamed to WindowedMMIOAccess and is what we had until
now - each device that is detected on boot is assigned to a
memory-mapped window, so IO operations on multiple devices can occur
simultaneously due to creating multiple virtual mappings, hence the name
is a memory-mapped window.

This commit adds a new class called MMIOAccess (not to be confused with
the old MMIOAccess class). This class creates one memory-mapped window.
On each IO operation on a configuration space of a device, it maps the
requested PCI bus region to that window. Therefore it holds a SpinLock
during the operation to ensure that no other PCI bus region was mapped
during the call.

A user can choose to either use PCI ECAM with memory-mapped window
for each device, or for an entire bus. By default, the kernel prefers to
map the entire PCI bus region.
This commit is contained in:
Liav A 2021-04-03 16:46:04 +03:00 committed by Andreas Kling
parent 441e374396
commit 8abbb7e090
11 changed files with 320 additions and 100 deletions

View file

@ -115,8 +115,9 @@ set(KERNEL_SOURCES
PCI/Device.cpp
PCI/DeviceController.cpp
PCI/IOAccess.cpp
PCI/Initializer.cpp
PCI/MMIOAccess.cpp
PCI/Initializer.cpp
PCI/WindowedMMIOAccess.cpp
Panic.cpp
PerformanceEventBuffer.cpp
Process.cpp