module.hpp 717 B

12345678910111213141516171819202122232425262728293031323334
  1. #pragma once
  2. #include <types/types.h>
  3. #define INTERNAL_MODULE(name, func) \
  4. SECTION(".kmods") __attribute__((used)) \
  5. kernel::module::module_loader const name = (func)
  6. namespace kernel::module {
  7. struct module {
  8. const char* const name;
  9. explicit module(const char* name);
  10. virtual ~module() = default;
  11. module(const module&) = delete;
  12. module& operator=(const module&) = delete;
  13. virtual int init() = 0;
  14. };
  15. using module_loader = module* (*)();
  16. constexpr int MODULE_SUCCESS = 0;
  17. constexpr int MODULE_FAILED = 1;
  18. constexpr int MODULE_DELAYED = 2;
  19. // TODO: unique_ptr and Deleter
  20. int insmod(module* mod);
  21. extern "C" module_loader kmod_loaders_start[];
  22. } // namespace kernel::module