mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 21:27:35 +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:
parent
441e374396
commit
8abbb7e090
11 changed files with 320 additions and 100 deletions
|
@ -50,6 +50,12 @@ enum class AcpiFeatureLevel {
|
|||
Disabled,
|
||||
};
|
||||
|
||||
enum class PCIAccessLevel {
|
||||
IOAddressing,
|
||||
MappingPerBus,
|
||||
MappingPerDevice,
|
||||
};
|
||||
|
||||
enum class AHCIResetMode {
|
||||
ControllerOnly,
|
||||
Complete,
|
||||
|
@ -71,7 +77,7 @@ public:
|
|||
[[nodiscard]] bool is_ide_enabled() const;
|
||||
[[nodiscard]] bool is_smp_enabled() const;
|
||||
[[nodiscard]] bool is_vmmouse_enabled() const;
|
||||
[[nodiscard]] bool is_pci_ecam_enabled() const;
|
||||
[[nodiscard]] PCIAccessLevel pci_access_level() const;
|
||||
[[nodiscard]] bool is_legacy_time_enabled() const;
|
||||
[[nodiscard]] bool is_text_mode() const;
|
||||
[[nodiscard]] bool is_force_pio() const;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue