ISAController.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. * Copyright (c) 2022, Liav A. <liavalb@hotmail.co.il>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <AK/OwnPtr.h>
  7. #include <AK/RefPtr.h>
  8. #include <AK/Types.h>
  9. #include <Kernel/Bus/PCI/API.h>
  10. #include <Kernel/FileSystem/ProcFS.h>
  11. #include <Kernel/Sections.h>
  12. #include <Kernel/Storage/ATA/ATADiskDevice.h>
  13. #include <Kernel/Storage/ATA/GenericIDE/BusMasterChannel.h>
  14. #include <Kernel/Storage/ATA/GenericIDE/ISAController.h>
  15. namespace Kernel {
  16. UNMAP_AFTER_INIT NonnullRefPtr<ISAIDEController> ISAIDEController::initialize()
  17. {
  18. return adopt_ref(*new ISAIDEController());
  19. }
  20. UNMAP_AFTER_INIT ISAIDEController::ISAIDEController()
  21. {
  22. initialize_channels();
  23. }
  24. UNMAP_AFTER_INIT void ISAIDEController::initialize_channels()
  25. {
  26. auto primary_base_io = IOAddress(0x1F0);
  27. auto primary_control_io = IOAddress(0x3F6);
  28. auto secondary_base_io = IOAddress(0x170);
  29. auto secondary_control_io = IOAddress(0x376);
  30. m_channels.append(IDEChannel::create(*this, { primary_base_io, primary_control_io }, IDEChannel::ChannelType::Primary));
  31. m_channels[0].enable_irq();
  32. m_channels.append(IDEChannel::create(*this, { secondary_base_io, secondary_control_io }, IDEChannel::ChannelType::Secondary));
  33. m_channels[1].enable_irq();
  34. dbgln("ISA IDE controller detected and initialized");
  35. }
  36. }