From 7bd6aa42b030696b6f3697d2d32c78019933ac32 Mon Sep 17 00:00:00 2001 From: Drew Galbraith Date: Sat, 17 Jun 2023 01:53:19 -0700 Subject: [PATCH] [zion] Declare z_cap_t and start replacing existing types --- zion/include/zcall.h | 54 +++++++++++++++++++-------------------- zion/include/ztypes.h | 3 +++ zion/usr/zcall.cpp | 52 ++++++++++++++++++------------------- zion/usr/zcall_internal.h | 52 +++++++++++++++++++------------------ 4 files changed, 83 insertions(+), 78 deletions(-) diff --git a/zion/include/zcall.h b/zion/include/zcall.h index ec0269f..82679ab 100644 --- a/zion/include/zcall.h +++ b/zion/include/zcall.h @@ -6,59 +6,59 @@ void ZProcessExit(uint64_t code); -[[nodiscard]] z_err_t ZProcessSpawn(uint64_t proc_cap, uint64_t bootstrap_cap, - uint64_t* new_proc_cap, - uint64_t* new_vmas_cap, - uint64_t* new_bootstrap_cap); +[[nodiscard]] z_err_t ZProcessSpawn(z_cap_t proc_cap, z_cap_t bootstrap_cap, + z_cap_t* new_proc_cap, + z_cap_t* new_vmas_cap, + z_cap_t* new_bootstrap_cap); // UNUSED for now, I think we can get away with just starting a thread. -[[nodiscard]] z_err_t ZProcessStart(uint64_t proc_cap, uint64_t thread_cap, +[[nodiscard]] z_err_t ZProcessStart(z_cap_t proc_cap, z_cap_t thread_cap, uint64_t entry, uint64_t arg1, uint64_t arg2); -[[nodiscard]] z_err_t ZThreadCreate(uint64_t proc_cap, uint64_t* thread_cap); +[[nodiscard]] z_err_t ZThreadCreate(z_cap_t proc_cap, z_cap_t* thread_cap); -[[nodiscard]] z_err_t ZThreadStart(uint64_t thread_cap, uint64_t entry, +[[nodiscard]] z_err_t ZThreadStart(z_cap_t thread_cap, uint64_t entry, uint64_t arg1, uint64_t arg2); void ZThreadExit(); -[[nodiscard]] z_err_t ZAddressSpaceMap(uint64_t vmas_cap, uint64_t vmas_offset, - uint64_t vmmo_cap, uint64_t* vaddr); -[[nodiscard]] z_err_t ZMemoryObjectCreate(uint64_t size, uint64_t* vmmo_cap); +[[nodiscard]] z_err_t ZAddressSpaceMap(z_cap_t vmas_cap, uint64_t vmas_offset, + z_cap_t vmmo_cap, uint64_t* vaddr); +[[nodiscard]] z_err_t ZMemoryObjectCreate(uint64_t size, z_cap_t* vmmo_cap); [[nodiscard]] z_err_t ZMemoryObjectCreatePhysical(uint64_t paddr, uint64_t size, - uint64_t* vmmo_cap); + z_cap_t* vmmo_cap); [[nodiscard]] z_err_t ZMemoryObjectCreateContiguous(uint64_t size, - uint64_t* vmmo_cap, + z_cap_t* vmmo_cap, uint64_t* paddr); -[[nodiscard]] z_err_t ZTempPcieConfigObjectCreate(uint64_t* vmmo_cap, +[[nodiscard]] z_err_t ZTempPcieConfigObjectCreate(z_cap_t* vmmo_cap, uint64_t* vmmo_size); -[[nodiscard]] z_err_t ZChannelCreate(uint64_t* channel1, uint64_t* channel2); -[[nodiscard]] z_err_t ZChannelSend(uint64_t chan_cap, uint64_t type, +[[nodiscard]] z_err_t ZChannelCreate(z_cap_t* channel1, z_cap_t* channel2); +[[nodiscard]] z_err_t ZChannelSend(z_cap_t chan_cap, uint64_t type, uint64_t num_bytes, const uint8_t* bytes, - uint64_t num_caps, const uint64_t* caps); -[[nodiscard]] z_err_t ZChannelRecv(uint64_t chan_cap, uint64_t num_bytes, + uint64_t num_caps, const z_cap_t* caps); +[[nodiscard]] z_err_t ZChannelRecv(z_cap_t chan_cap, uint64_t num_bytes, uint8_t* bytes, uint64_t num_caps, - uint64_t* caps, uint64_t* type, + z_cap_t* caps, uint64_t* type, uint64_t* actual_bytes, uint64_t* actual_caps); -[[nodiscard]] z_err_t ZPortCreate(uint64_t* port_cap); -[[nodiscard]] z_err_t ZPortSend(uint64_t port_cap, uint64_t num_bytes, +[[nodiscard]] z_err_t ZPortCreate(z_cap_t* port_cap); +[[nodiscard]] z_err_t ZPortSend(z_cap_t port_cap, uint64_t num_bytes, const uint8_t* bytes, uint64_t num_caps, - uint64_t* caps); -[[nodiscard]] z_err_t ZPortRecv(uint64_t port_cap, uint64_t num_bytes, + z_cap_t* caps); +[[nodiscard]] z_err_t ZPortRecv(z_cap_t port_cap, uint64_t num_bytes, uint8_t* bytes, uint64_t num_caps, - uint64_t* caps, uint64_t* type, + z_cap_t* caps, uint64_t* type, uint64_t* actual_bytes, uint64_t* actual_caps); -[[nodiscard]] z_err_t ZPortPoll(uint64_t port_cap, uint64_t num_bytes, +[[nodiscard]] z_err_t ZPortPoll(z_cap_t port_cap, uint64_t num_bytes, uint8_t* bytes, uint64_t num_caps, - uint64_t* caps, uint64_t* type, + z_cap_t* caps, uint64_t* type, uint64_t* actual_bytes, uint64_t* actual_caps); -[[nodiscard]] z_err_t ZIrqRegister(uint64_t irq_num, uint64_t* port_cap); +[[nodiscard]] z_err_t ZIrqRegister(uint64_t irq_num, z_cap_t* port_cap); -[[nodiscard]] z_err_t ZCapDuplicate(uint64_t cap_in, uint64_t* cap_out); +[[nodiscard]] z_err_t ZCapDuplicate(z_cap_t cap_in, z_cap_t* cap_out); [[nodiscard]] z_err_t ZDebug(const char* message); diff --git a/zion/include/ztypes.h b/zion/include/ztypes.h index 37caeab..dd2b382 100644 --- a/zion/include/ztypes.h +++ b/zion/include/ztypes.h @@ -72,6 +72,9 @@ typedef uint64_t z_err_t; /* ------------------------------ * Capability Types * ------------------------------*/ + +typedef uint64_t z_cap_t; + #define Z_INVALID 0x0 // General Capability Permissions diff --git a/zion/usr/zcall.cpp b/zion/usr/zcall.cpp index 3a6d09f..a663cc3 100644 --- a/zion/usr/zcall.cpp +++ b/zion/usr/zcall.cpp @@ -23,9 +23,9 @@ void ZProcessExit(uint64_t code) { SysCall1(Z_PROCESS_EXIT, reinterpret_cast(code)); } -z_err_t ZProcessSpawn(uint64_t proc_cap, uint64_t bootstrap_cap, - uint64_t* new_proc_cap, uint64_t* new_vmas_cap, - uint64_t* new_bootstrap_cap) { +z_err_t ZProcessSpawn(z_cap_t proc_cap, z_cap_t bootstrap_cap, + z_cap_t* new_proc_cap, z_cap_t* new_vmas_cap, + z_cap_t* new_bootstrap_cap) { ZProcessSpawnReq req{ .proc_cap = proc_cap, .bootstrap_cap = bootstrap_cap, @@ -38,7 +38,7 @@ z_err_t ZProcessSpawn(uint64_t proc_cap, uint64_t bootstrap_cap, return ret; } -z_err_t ZThreadCreate(uint64_t proc_cap, uint64_t* thread_cap) { +z_err_t ZThreadCreate(z_cap_t proc_cap, z_cap_t* thread_cap) { ZThreadCreateReq req{ .proc_cap = proc_cap, }; @@ -48,7 +48,7 @@ z_err_t ZThreadCreate(uint64_t proc_cap, uint64_t* thread_cap) { return ret; } -z_err_t ZThreadStart(uint64_t thread_cap, uint64_t entry, uint64_t arg1, +z_err_t ZThreadStart(z_cap_t thread_cap, uint64_t entry, uint64_t arg1, uint64_t arg2) { ZThreadStartReq req{ .thread_cap = thread_cap, @@ -61,8 +61,8 @@ z_err_t ZThreadStart(uint64_t thread_cap, uint64_t entry, uint64_t arg1, void ZThreadExit() { SysCall0(Z_THREAD_EXIT); } -z_err_t ZAddressSpaceMap(uint64_t vmas_cap, uint64_t vmas_offset, - uint64_t vmmo_cap, uint64_t* vaddr) { +z_err_t ZAddressSpaceMap(z_cap_t vmas_cap, uint64_t vmas_offset, + z_cap_t vmmo_cap, uint64_t* vaddr) { ZAddressSpaceMapReq req{ .vmas_cap = vmas_cap, .vmas_offset = vmas_offset, @@ -74,7 +74,7 @@ z_err_t ZAddressSpaceMap(uint64_t vmas_cap, uint64_t vmas_offset, return ret; } -z_err_t ZMemoryObjectCreate(uint64_t size, uint64_t* vmmo_cap) { +z_err_t ZMemoryObjectCreate(uint64_t size, z_cap_t* vmmo_cap) { ZMemoryObjectCreateReq req{ .size = size, }; @@ -85,7 +85,7 @@ z_err_t ZMemoryObjectCreate(uint64_t size, uint64_t* vmmo_cap) { } z_err_t ZMemoryObjectCreatePhysical(uint64_t paddr, uint64_t size, - uint64_t* vmmo_cap) { + z_cap_t* vmmo_cap) { ZMemoryObjectCreatePhysicalReq req{ .paddr = paddr, .size = size, @@ -96,7 +96,7 @@ z_err_t ZMemoryObjectCreatePhysical(uint64_t paddr, uint64_t size, return ret; } -z_err_t ZMemoryObjectCreateContiguous(uint64_t size, uint64_t* vmmo_cap, +z_err_t ZMemoryObjectCreateContiguous(uint64_t size, z_cap_t* vmmo_cap, uint64_t* paddr) { ZMemoryObjectCreatePhysicalReq req{ .paddr = 0, @@ -109,7 +109,7 @@ z_err_t ZMemoryObjectCreateContiguous(uint64_t size, uint64_t* vmmo_cap, return ret; } -z_err_t ZTempPcieConfigObjectCreate(uint64_t* vmmo_cap, uint64_t* vmmo_size) { +z_err_t ZTempPcieConfigObjectCreate(z_cap_t* vmmo_cap, uint64_t* vmmo_size) { ZTempPcieConfigObjectCreateResp resp; z_err_t ret = SysCall2(Z_TEMP_PCIE_CONFIG_OBJECT_CREATE, 0, &resp); *vmmo_cap = resp.vmmo_cap; @@ -117,7 +117,7 @@ z_err_t ZTempPcieConfigObjectCreate(uint64_t* vmmo_cap, uint64_t* vmmo_size) { return ret; } -z_err_t ZChannelCreate(uint64_t* channel1, uint64_t* channel2) { +z_err_t ZChannelCreate(z_cap_t* channel1, z_cap_t* channel2) { ZChannelCreateResp resp; z_err_t ret = SysCall2(Z_CHANNEL_CREATE, 0, &resp); *channel1 = resp.chan_cap1; @@ -125,9 +125,9 @@ z_err_t ZChannelCreate(uint64_t* channel1, uint64_t* channel2) { return ret; } -z_err_t ZChannelSend(uint64_t chan_cap, uint64_t type, uint64_t num_bytes, +z_err_t ZChannelSend(z_cap_t chan_cap, uint64_t type, uint64_t num_bytes, const uint8_t* bytes, uint64_t num_caps, - const uint64_t* caps) { + const z_cap_t* caps) { ZChannelSendReq req{ .chan_cap = chan_cap, .message = @@ -136,14 +136,14 @@ z_err_t ZChannelSend(uint64_t chan_cap, uint64_t type, uint64_t num_bytes, .num_bytes = num_bytes, .bytes = const_cast(bytes), .num_caps = num_caps, - .caps = const_cast(caps), + .caps = const_cast(caps), }, }; return SysCall1(Z_CHANNEL_SEND, &req); } -z_err_t ZChannelRecv(uint64_t chan_cap, uint64_t num_bytes, uint8_t* bytes, - uint64_t num_caps, uint64_t* caps, uint64_t* type, +z_err_t ZChannelRecv(z_cap_t chan_cap, uint64_t num_bytes, uint8_t* bytes, + uint64_t num_caps, z_cap_t* caps, uint64_t* type, uint64_t* actual_bytes, uint64_t* actual_caps) { ZChannelRecvReq req{ .chan_cap = chan_cap, @@ -163,15 +163,15 @@ z_err_t ZChannelRecv(uint64_t chan_cap, uint64_t num_bytes, uint8_t* bytes, return ret; } -z_err_t ZPortCreate(uint64_t* port_cap) { +z_err_t ZPortCreate(z_cap_t* port_cap) { ZPortCreateResp resp; z_err_t ret = SysCall2(Z_PORT_CREATE, 0, &resp); *port_cap = resp.port_cap; return ret; } -z_err_t ZPortSend(uint64_t port_cap, uint64_t num_bytes, const uint8_t* bytes, - uint64_t num_caps, uint64_t* caps) { +z_err_t ZPortSend(z_cap_t port_cap, uint64_t num_bytes, const uint8_t* bytes, + uint64_t num_caps, z_cap_t* caps) { ZPortSendReq req{.port_cap = port_cap, .message = { .type = 0, @@ -183,8 +183,8 @@ z_err_t ZPortSend(uint64_t port_cap, uint64_t num_bytes, const uint8_t* bytes, return SysCall1(Z_PORT_SEND, &req); } -z_err_t ZPortRecv(uint64_t port_cap, uint64_t num_bytes, uint8_t* bytes, - uint64_t num_caps, uint64_t* caps, uint64_t* type, +z_err_t ZPortRecv(z_cap_t port_cap, uint64_t num_bytes, uint8_t* bytes, + uint64_t num_caps, z_cap_t* caps, uint64_t* type, uint64_t* actual_bytes, uint64_t* actual_caps) { ZPortRecvReq req{ .port_cap = port_cap, @@ -204,8 +204,8 @@ z_err_t ZPortRecv(uint64_t port_cap, uint64_t num_bytes, uint8_t* bytes, return ret; } -z_err_t ZPortPoll(uint64_t port_cap, uint64_t num_bytes, uint8_t* bytes, - uint64_t num_caps, uint64_t* caps, uint64_t* type, +z_err_t ZPortPoll(z_cap_t port_cap, uint64_t num_bytes, uint8_t* bytes, + uint64_t num_caps, z_cap_t* caps, uint64_t* type, uint64_t* actual_bytes, uint64_t* actual_caps) { ZPortRecvReq req{ .port_cap = port_cap, @@ -225,7 +225,7 @@ z_err_t ZPortPoll(uint64_t port_cap, uint64_t num_bytes, uint8_t* bytes, return ret; } -z_err_t ZIrqRegister(uint64_t irq_num, uint64_t* port_cap) { +z_err_t ZIrqRegister(uint64_t irq_num, z_cap_t* port_cap) { ZIrqRegisterReq req{ .irq_num = irq_num, }; @@ -235,7 +235,7 @@ z_err_t ZIrqRegister(uint64_t irq_num, uint64_t* port_cap) { return ret; } -z_err_t ZCapDuplicate(uint64_t cap_in, uint64_t* cap_out) { +z_err_t ZCapDuplicate(z_cap_t cap_in, z_cap_t* cap_out) { ZCapDuplicateReq req{ .cap = cap_in, }; diff --git a/zion/usr/zcall_internal.h b/zion/usr/zcall_internal.h index 1d70406..2eece32 100644 --- a/zion/usr/zcall_internal.h +++ b/zion/usr/zcall_internal.h @@ -2,36 +2,38 @@ #include +#include "include/ztypes.h" + struct ZProcessSpawnReq { - uint64_t proc_cap; - uint64_t bootstrap_cap; + z_cap_t proc_cap; + z_cap_t bootstrap_cap; }; struct ZProcessSpawnResp { - uint64_t proc_cap; - uint64_t vmas_cap; - uint64_t bootstrap_cap; + z_cap_t proc_cap; + z_cap_t vmas_cap; + z_cap_t bootstrap_cap; }; struct ZThreadCreateReq { - uint64_t proc_cap; + z_cap_t proc_cap; }; struct ZThreadCreateResp { - uint64_t thread_cap; + z_cap_t thread_cap; }; struct ZThreadStartReq { - uint64_t thread_cap; + z_cap_t thread_cap; uint64_t entry; uint64_t arg1; uint64_t arg2; }; struct ZAddressSpaceMapReq { - uint64_t vmas_cap; - uint64_t vmas_offset; - uint64_t vmmo_cap; + z_cap_t vmas_cap; + z_cap_t vmas_offset; + z_cap_t vmmo_cap; }; struct ZAddressSpaceMapResp { @@ -43,7 +45,7 @@ struct ZMemoryObjectCreateReq { }; struct ZMemoryObjectCreateResp { - uint64_t vmmo_cap; + z_cap_t vmmo_cap; }; struct ZMemoryObjectCreatePhysicalReq { @@ -52,18 +54,18 @@ struct ZMemoryObjectCreatePhysicalReq { }; struct ZMemoryObjectCreatePhysicalResp { - uint64_t vmmo_cap; + z_cap_t vmmo_cap; uint64_t paddr; }; struct ZTempPcieConfigObjectCreateResp { - uint64_t vmmo_cap; + z_cap_t vmmo_cap; uint64_t vmmo_size; }; struct ZChannelCreateResp { - uint64_t chan_cap1; - uint64_t chan_cap2; + z_cap_t chan_cap1; + z_cap_t chan_cap2; }; struct ZMessage { @@ -73,30 +75,30 @@ struct ZMessage { uint8_t* bytes; uint64_t num_caps; - uint64_t* caps; + z_cap_t* caps; }; struct ZChannelSendReq { - uint64_t chan_cap; + z_cap_t chan_cap; ZMessage message; }; struct ZChannelRecvReq { - uint64_t chan_cap; + z_cap_t chan_cap; ZMessage message; }; struct ZPortCreateResp { - uint64_t port_cap; + z_cap_t port_cap; }; struct ZPortSendReq { - uint64_t port_cap; + z_cap_t port_cap; ZMessage message; }; struct ZPortRecvReq { - uint64_t port_cap; + z_cap_t port_cap; ZMessage message; }; @@ -105,13 +107,13 @@ struct ZIrqRegisterReq { }; struct ZIrqRegisterResp { - uint64_t port_cap; + z_cap_t port_cap; }; struct ZCapDuplicateReq { - uint64_t cap; + z_cap_t cap; }; struct ZCapDuplicateResp { - uint64_t cap; + z_cap_t cap; };