42 lines
1.1 KiB
C
42 lines
1.1 KiB
C
#pragma once
|
|
|
|
#include <lib/type.h>
|
|
typedef struct ipc_struct {
|
|
u64 conn_cap;
|
|
u64 shared_buf;
|
|
u64 shared_buf_len;
|
|
} ipc_struct_t;
|
|
|
|
typedef struct ipc_msg {
|
|
u64 server_conn_cap;
|
|
u64 data_len;
|
|
u64 cap_slot_number;
|
|
u64 data_offset;
|
|
u64 cap_slots_offset;
|
|
} ipc_msg_t;
|
|
|
|
struct ipc_vm_config {
|
|
u64 stack_base_addr;
|
|
u64 stack_size;
|
|
u64 buf_base_addr;
|
|
u64 buf_size;
|
|
};
|
|
|
|
int ipc_register_client(int server_thread_cap, ipc_struct_t * ipc_struct);
|
|
ipc_msg_t *ipc_create_msg(ipc_struct_t * icb, u64 data_len,
|
|
u64 cap_slot_number);
|
|
char *ipc_get_msg_data(ipc_msg_t * ipc_msg);
|
|
u64 ipc_get_msg_cap(ipc_msg_t * ipc_msg, u64 cap_id);
|
|
int ipc_set_msg_data(ipc_msg_t * ipc_msg, char *data, u64 offset, u64 len);
|
|
int ipc_set_msg_cap(ipc_msg_t * ipc_msg, u64 cap_slot_index, u32 cap);
|
|
int ipc_destroy_msg(ipc_msg_t * ipc_msg);
|
|
|
|
int ipc_call(ipc_struct_t * icb, ipc_msg_t * ipc_msg);
|
|
int ipc_reg_call(ipc_struct_t * icb, u64 arg);
|
|
void ipc_return(int ret);
|
|
|
|
typedef void (*server_handler) (ipc_msg_t * ipc_msg);
|
|
int ipc_register_server(server_handler server_handler);
|
|
|
|
#define INFO_PAGE_VADDR ((void *)0x100000ll)
|