mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-03-06 13:35:03 +00:00
Kernel/PCI: Add small access spinlock to each HostController
Prepare to remove biglock on PCI::Access in a future commit, so we can ensure we only lock a spinlock on a precise PCI HostController if needed instead of the entire subsystem.
This commit is contained in:
@@ -41,42 +41,42 @@ NonnullOwnPtr<VolumeManagementDevice> VolumeManagementDevice::must_create(PCI::D
|
||||
return adopt_own_if_nonnull(new (nothrow) VolumeManagementDevice(domain, start_address)).release_nonnull();
|
||||
}
|
||||
|
||||
void VolumeManagementDevice::write8_field(BusNumber bus, DeviceNumber device, FunctionNumber function, u32 field, u8 value)
|
||||
void VolumeManagementDevice::write8_field_locked(BusNumber bus, DeviceNumber device, FunctionNumber function, u32 field, u8 value)
|
||||
{
|
||||
SpinlockLocker locker(m_config_lock);
|
||||
// Note: We must write then read to ensure completion before returning.
|
||||
MemoryBackedHostBridge::write8_field(bus, device, function, field, value);
|
||||
MemoryBackedHostBridge::read8_field(bus, device, function, field);
|
||||
MemoryBackedHostBridge::write8_field_locked(bus, device, function, field, value);
|
||||
MemoryBackedHostBridge::read8_field_locked(bus, device, function, field);
|
||||
}
|
||||
void VolumeManagementDevice::write16_field(BusNumber bus, DeviceNumber device, FunctionNumber function, u32 field, u16 value)
|
||||
void VolumeManagementDevice::write16_field_locked(BusNumber bus, DeviceNumber device, FunctionNumber function, u32 field, u16 value)
|
||||
{
|
||||
SpinlockLocker locker(m_config_lock);
|
||||
// Note: We must write then read to ensure completion before returning.
|
||||
MemoryBackedHostBridge::write16_field(bus, device, function, field, value);
|
||||
MemoryBackedHostBridge::read16_field(bus, device, function, field);
|
||||
MemoryBackedHostBridge::write16_field_locked(bus, device, function, field, value);
|
||||
MemoryBackedHostBridge::read16_field_locked(bus, device, function, field);
|
||||
}
|
||||
void VolumeManagementDevice::write32_field(BusNumber bus, DeviceNumber device, FunctionNumber function, u32 field, u32 value)
|
||||
void VolumeManagementDevice::write32_field_locked(BusNumber bus, DeviceNumber device, FunctionNumber function, u32 field, u32 value)
|
||||
{
|
||||
SpinlockLocker locker(m_config_lock);
|
||||
// Note: We must write then read to ensure completion before returning.
|
||||
MemoryBackedHostBridge::write32_field(bus, device, function, field, value);
|
||||
MemoryBackedHostBridge::read32_field(bus, device, function, field);
|
||||
MemoryBackedHostBridge::write32_field_locked(bus, device, function, field, value);
|
||||
MemoryBackedHostBridge::read32_field_locked(bus, device, function, field);
|
||||
}
|
||||
|
||||
u8 VolumeManagementDevice::read8_field(BusNumber bus, DeviceNumber device, FunctionNumber function, u32 field)
|
||||
u8 VolumeManagementDevice::read8_field_locked(BusNumber bus, DeviceNumber device, FunctionNumber function, u32 field)
|
||||
{
|
||||
SpinlockLocker locker(m_config_lock);
|
||||
return MemoryBackedHostBridge::read8_field(bus, device, function, field);
|
||||
return MemoryBackedHostBridge::read8_field_locked(bus, device, function, field);
|
||||
}
|
||||
u16 VolumeManagementDevice::read16_field(BusNumber bus, DeviceNumber device, FunctionNumber function, u32 field)
|
||||
u16 VolumeManagementDevice::read16_field_locked(BusNumber bus, DeviceNumber device, FunctionNumber function, u32 field)
|
||||
{
|
||||
SpinlockLocker locker(m_config_lock);
|
||||
return MemoryBackedHostBridge::read16_field(bus, device, function, field);
|
||||
return MemoryBackedHostBridge::read16_field_locked(bus, device, function, field);
|
||||
}
|
||||
u32 VolumeManagementDevice::read32_field(BusNumber bus, DeviceNumber device, FunctionNumber function, u32 field)
|
||||
u32 VolumeManagementDevice::read32_field_locked(BusNumber bus, DeviceNumber device, FunctionNumber function, u32 field)
|
||||
{
|
||||
SpinlockLocker locker(m_config_lock);
|
||||
return MemoryBackedHostBridge::read32_field(bus, device, function, field);
|
||||
return MemoryBackedHostBridge::read32_field_locked(bus, device, function, field);
|
||||
}
|
||||
|
||||
VolumeManagementDevice::VolumeManagementDevice(PCI::Domain const& domain, PhysicalAddress start_address)
|
||||
|
||||
Reference in New Issue
Block a user