Преглед изворни кода

Kernel: Specify I/O size for BMIDEChannel

Gunnar Beutner пре 4 година
родитељ
комит
a0c1af4327
2 измењених фајлова са 3 додато и 1 уклоњено
  1. 2 0
      Kernel/IO.h
  2. 1 1
      Kernel/Storage/BMIDEChannel.cpp

+ 2 - 0
Kernel/IO.h

@@ -82,6 +82,7 @@ public:
     template<typename T>
     ALWAYS_INLINE T in()
     {
+        static_assert(sizeof(T) <= 4);
         if constexpr (sizeof(T) == 4)
             return IO::in32(get());
         if constexpr (sizeof(T) == 2)
@@ -94,6 +95,7 @@ public:
     template<typename T>
     ALWAYS_INLINE void out(T value)
     {
+        static_assert(sizeof(T) <= 4);
         if constexpr (sizeof(T) == 4) {
             IO::out32(get(), value);
             return;

+ 1 - 1
Kernel/Storage/BMIDEChannel.cpp

@@ -212,7 +212,7 @@ void BMIDEChannel::ata_read_sectors(bool slave_request, u16 capabilities)
     m_io_group.bus_master_base().value().out<u8>(0);
 
     // Write the PRDT location
-    m_io_group.bus_master_base().value().offset(4).out(m_prdt_page->paddr().get());
+    m_io_group.bus_master_base().value().offset(4).out<u32>(m_prdt_page->paddr().get());
 
     // Set transfer direction
     m_io_group.bus_master_base().value().out<u8>(0x8);