// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/ne-foss-org/nekernel #ifndef __MOD_ACPI_H__ #define __MOD_ACPI_H__ #include #include #include #include #include #include namespace Kernel { class PowerFactory; class ACPIFactoryInterface; typedef ACPIFactoryInterface PowerFactoryInterface; class ACPIFactoryInterface final NE_POWER_FACTORY { public: explicit ACPIFactoryInterface(voidPtr rsp_ptr); ~ACPIFactoryInterface() = default; ACPIFactoryInterface& operator=(const ACPIFactoryInterface&) = default; ACPIFactoryInterface(const ACPIFactoryInterface&) = default; public: Bool Shutdown(); // shutdown Void Reboot(); // soft-reboot public: /// @brief Descriptor find factory. /// @param signature The signature of the descriptor table (MADT, ACPI...) /// @return the blob inside an ErrorOr object. ErrorOr Find(const Char* signature); /// @brief Checksum factory. /// @param checksum the data to checksum /// @param len it's size /// @return if it succeed bool Checksum(const Char* checksum, SSizeT len); // watch for collides! public: ErrorOr operator[](const Char* signature); private: VoidPtr fRsdp{nullptr}; // pointer to root descriptor. SizeT fEntries{0UL}; // number of entries, -1 tells that no invalid entries were // found. }; } // namespace Kernel #endif // !__MOD_ACPI_H__