Files
2026-08-18 01:28:35 +02:00

37 lines
946 B
C++

#pragma once
#include <zinnia/channel.h>
#include <zinnia/handle.h>
#include <common/utils.h>
#include <stdint.h>
#define ZN_IPC_NUM(group, num) ((uint32_t)(group) << 24u) | ((uint32_t)(num) & 0xffffffu)
#define ZN_IPC(name, group, num, num_handles) \
name##_inner; \
constexpr uint32_t name##_num = ZN_IPC_NUM(group, num); \
typedef struct { \
uint32_t id; \
zn_handle_t handles[num_handles]; \
name##_inner inner; \
} name
#define zn_ipc_write(channel, obj) \
zn_channel_write(channel, (obj)->handles, &(obj)->inner, ARRAY_SIZE((obj)->handles), sizeof((obj)->inner))
#define zn_ipc_read(channel, obj) \
zn_channel_read( \
channel, \
(obj)->handles, \
&(obj)->inner, \
ARRAY_SIZE((obj)->handles), \
sizeof((obj)->inner), \
nullptr, \
nullptr \
)
#define zn_ipc_new(name) \
(zn_ipc_fw_rsdp) { \
.id = name##_num \
}