Remove nolock CfgAccess methods

They are only called by the corresponding locked methods.
This commit is contained in:
bjorn3
2024-01-18 19:32:14 +01:00
parent bf441b01f1
commit 07d5d730d2
2 changed files with 12 additions and 30 deletions
+6 -21
View File
@@ -23,10 +23,7 @@ pub mod header;
pub mod msi;
pub trait CfgAccess {
unsafe fn read_nolock(&self, bus: u8, dev: u8, func: u8, offset: u16) -> u32;
unsafe fn read(&self, bus: u8, dev: u8, func: u8, offset: u16) -> u32;
unsafe fn write_nolock(&self, bus: u8, dev: u8, func: u8, offset: u16, value: u32);
unsafe fn write(&self, bus: u8, dev: u8, func: u8, offset: u16, value: u32);
}
@@ -68,7 +65,9 @@ impl Pci {
}
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
impl CfgAccess for Pci {
unsafe fn read_nolock(&self, bus: u8, dev: u8, func: u8, offset: u16) -> u32 {
unsafe fn read(&self, bus: u8, dev: u8, func: u8, offset: u16) -> u32 {
let _guard = self.lock.lock().unwrap();
self.iopl_once.call_once(Self::set_iopl);
let offset = u8::try_from(offset).expect("offset too large for PCI 3.0 configuration space");
@@ -78,12 +77,9 @@ impl CfgAccess for Pci {
Pio::<u32>::new(0xCFC).read()
}
unsafe fn read(&self, bus: u8, dev: u8, func: u8, offset: u16) -> u32 {
unsafe fn write(&self, bus: u8, dev: u8, func: u8, offset: u16, value: u32) {
let _guard = self.lock.lock().unwrap();
self.read_nolock(bus, dev, func, offset)
}
unsafe fn write_nolock(&self, bus: u8, dev: u8, func: u8, offset: u16, value: u32) {
self.iopl_once.call_once(Self::set_iopl);
let offset = u8::try_from(offset).expect("offset too large for PCI 3.0 configuration space");
@@ -92,28 +88,17 @@ impl CfgAccess for Pci {
Pio::<u32>::new(0xCF8).write(address);
Pio::<u32>::new(0xCFC).write(value);
}
unsafe fn write(&self, bus: u8, dev: u8, func: u8, offset: u16, value: u32) {
let _guard = self.lock.lock().unwrap();
self.write_nolock(bus, dev, func, offset, value)
}
}
#[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))]
impl CfgAccess for Pci {
unsafe fn read_nolock(&self, bus: u8, dev: u8, func: u8, offset: u16) -> u32 {
todo!("Pci::CfgAccess::read_nolock on this architecture")
}
unsafe fn read(&self, bus: u8, dev: u8, func: u8, offset: u16) -> u32 {
let _guard = self.lock.lock().unwrap();
self.read_nolock(bus, dev, func, offset)
todo!("Pci::CfgAccess::read on this architecture")
}
unsafe fn write_nolock(&self, bus: u8, dev: u8, func: u8, offset: u16, value: u32) {
todo!("Pci::CfgAccess::write_nolock on this architecture")
}
unsafe fn write(&self, bus: u8, dev: u8, func: u8, offset: u16, value: u32) {
let _guard = self.lock.lock().unwrap();
self.write_nolock(bus, dev, func, offset, value)
todo!("Pci::CfgAccess::write on this architecture")
}
}
+6 -9
View File
@@ -189,26 +189,23 @@ impl Pcie {
}
impl CfgAccess for Pcie {
unsafe fn read_nolock(&self, bus: u8, dev: u8, func: u8, offset: u16) -> u32 {
unsafe fn read(&self, bus: u8, dev: u8, func: u8, offset: u16) -> u32 {
let _guard = self.lock.lock().unwrap();
self.with_pointer(bus, dev, func, offset, |pointer| match pointer {
Some(address) => ptr::read_volatile::<u32>(address),
None => self.fallback.read(bus, dev, func, offset),
})
}
unsafe fn read(&self, bus: u8, dev: u8, func: u8, offset: u16) -> u32 {
unsafe fn write(&self, bus: u8, dev: u8, func: u8, offset: u16, value: u32) {
let _guard = self.lock.lock().unwrap();
self.read_nolock(bus, dev, func, offset)
}
unsafe fn write_nolock(&self, bus: u8, dev: u8, func: u8, offset: u16, value: u32) {
self.with_pointer(bus, dev, func, offset, |pointer| match pointer {
Some(address) => ptr::write_volatile::<u32>(address, value),
None => { self.fallback.read(bus, dev, func, offset); }
});
}
unsafe fn write(&self, bus: u8, dev: u8, func: u8, offset: u16, value: u32) {
let _guard = self.lock.lock().unwrap();
self.write_nolock(bus, dev, func, offset, value);
}
}
impl Drop for Pcie {