Explorar o código

Kernel: Add write{8,16,32} to the PCI Capability struct

MSI(x) mechanism requires the device to write to its Capability
structure. Add write{8,16,32} similar to read{8,16,32}.
Pankaj Raghav %!s(int64=2) %!d(string=hai) anos
pai
achega
71c75873c9
Modificáronse 2 ficheiros con 24 adicións e 0 borrados
  1. 21 0
      Kernel/Bus/PCI/API.cpp
  2. 3 0
      Kernel/Bus/PCI/Definitions.h

+ 21 - 0
Kernel/Bus/PCI/API.cpp

@@ -285,6 +285,27 @@ u32 Capability::read32(size_t offset) const
     return read32_offsetted(identifier, m_ptr + offset);
 }
 
+void Capability::write8(size_t offset, u8 value) const
+{
+    auto& identifier = get_device_identifier(m_address);
+    SpinlockLocker locker(identifier.operation_lock());
+    write8_offsetted(identifier, m_ptr + offset, value);
+}
+
+void Capability::write16(size_t offset, u16 value) const
+{
+    auto& identifier = get_device_identifier(m_address);
+    SpinlockLocker locker(identifier.operation_lock());
+    write16_offsetted(identifier, m_ptr + offset, value);
+}
+
+void Capability::write32(size_t offset, u32 value) const
+{
+    auto& identifier = get_device_identifier(m_address);
+    SpinlockLocker locker(identifier.operation_lock());
+    write32_offsetted(identifier, m_ptr + offset, value);
+}
+
 DeviceIdentifier const& get_device_identifier(Address address)
 {
     return Access::the().get_device_identifier(address);

+ 3 - 0
Kernel/Bus/PCI/Definitions.h

@@ -238,6 +238,9 @@ public:
     u8 read8(size_t offset) const;
     u16 read16(size_t offset) const;
     u32 read32(size_t offset) const;
+    void write8(size_t offset, u8 value) const;
+    void write16(size_t offset, u16 value) const;
+    void write32(size_t offset, u32 value) const;
 
 private:
     const Address m_address;