6export module zxfoundation.sys.service.core;
7import zxfoundation.base.types;
8import zxfoundation.scoms.kobject.base;
9import zxfoundation.memory.objects;
10import zxfoundation.dgp.cap.types;
14#define __zxmacro_want_assert
15#include macro_extensions
19namespace zxfoundation::sys::service {
22 constexpr u32 MAX_SERVICES = 64;
25 constexpr u32 SERVICE_NAME_MAX_LEN = 64;
28 struct service_entry {
29 scoms::kobject::bobject ko{};
30 char name[SERVICE_NAME_MAX_LEN]{};
31 dgp::cap::cap_token token{};
32 memory::objects::memory_object_ref authority{};
34 service_entry()
noexcept =
default;
36 assert_offset(service_entry, ko, 0);
39 auto init()
noexcept ->
void;
42 auto destroy_for_domain(u32 domain_id)
noexcept ->
void;
44 auto register_service_cap_lookup()
noexcept ->
void;
51 [[nodiscard]]
auto register_service(
52 std::string_view name,
53 dgp::cap::cap_token token,
55 )
noexcept -> std::expected<u32, lib::kernel_error>;
62 [[nodiscard]]
auto lookup_service(
63 std::string_view name,
65 )
noexcept -> std::expected<dgp::cap::cap_token, lib::kernel_error>;
71 [[nodiscard]]
auto unregister_service(
74 )
noexcept -> std::expected<
void, lib::kernel_error>;
77 [[nodiscard]]
auto service_count()
noexcept -> u32;