[Zion] Use the glacier ArrayView class for sending IPC msgs.
This commit is contained in:
parent
6feb13d042
commit
277b0d3ccc
8 changed files with 82 additions and 85 deletions
|
|
@ -5,18 +5,3 @@
|
|||
glcr::RefPtr<Endpoint> Endpoint::Create() {
|
||||
return glcr::AdoptPtr(new Endpoint);
|
||||
}
|
||||
|
||||
glcr::ErrorCode Endpoint::Send(uint64_t num_bytes, const void* data,
|
||||
uint64_t num_caps, const z_cap_t* caps,
|
||||
z_cap_t reply_port_cap) {
|
||||
auto& message_queue = GetSendMessageQueue();
|
||||
return message_queue.PushBack(num_bytes, data, num_caps, caps,
|
||||
reply_port_cap);
|
||||
}
|
||||
glcr::ErrorCode Endpoint::Recv(uint64_t* num_bytes, void* data,
|
||||
uint64_t* num_caps, z_cap_t* caps,
|
||||
z_cap_t* reply_port_cap) {
|
||||
auto& message_queue = GetRecvMessageQueue();
|
||||
return message_queue.PopFront(num_bytes, data, num_caps, caps,
|
||||
reply_port_cap);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,12 +26,6 @@ class Endpoint : public IpcObject {
|
|||
|
||||
static glcr::RefPtr<Endpoint> Create();
|
||||
|
||||
// FIXME: These are hacky "almost" overrides that could lead to bugs.
|
||||
glcr::ErrorCode Send(uint64_t num_bytes, const void* data, uint64_t num_caps,
|
||||
const z_cap_t* caps, z_cap_t reply_port_cap);
|
||||
glcr::ErrorCode Recv(uint64_t* num_bytes, void* data, uint64_t* num_caps,
|
||||
z_cap_t* caps, z_cap_t* reply_port_cap);
|
||||
|
||||
virtual MessageQueue& GetSendMessageQueue() override {
|
||||
return message_queue_;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,14 +2,26 @@
|
|||
|
||||
#include "scheduler/scheduler.h"
|
||||
|
||||
glcr::ErrorCode IpcObject::Send(uint64_t num_bytes, const void* bytes,
|
||||
uint64_t num_caps, const z_cap_t* caps) {
|
||||
glcr::ErrorCode IpcObject::Send(const glcr::ArrayView<uint8_t>& message,
|
||||
const glcr::ArrayView<z_cap_t>& caps) {
|
||||
return Send(message, caps, kZionInvalidCapability);
|
||||
}
|
||||
|
||||
glcr::ErrorCode IpcObject::Send(const glcr::ArrayView<uint8_t>& message,
|
||||
const glcr::ArrayView<z_cap_t>& caps,
|
||||
const z_cap_t reply_port) {
|
||||
auto& message_queue = GetSendMessageQueue();
|
||||
return message_queue.PushBack(num_bytes, bytes, num_caps, caps);
|
||||
return message_queue.PushBack(message, caps, reply_port);
|
||||
}
|
||||
|
||||
glcr::ErrorCode IpcObject::Recv(uint64_t* num_bytes, void* bytes,
|
||||
uint64_t* num_caps, z_cap_t* caps) {
|
||||
auto& message_queue = GetRecvMessageQueue();
|
||||
return message_queue.PopFront(num_bytes, bytes, num_caps, caps);
|
||||
return Recv(num_bytes, bytes, num_caps, caps, nullptr);
|
||||
}
|
||||
|
||||
glcr::ErrorCode IpcObject::Recv(uint64_t* num_bytes, void* bytes,
|
||||
uint64_t* num_caps, z_cap_t* caps,
|
||||
z_cap_t* reply_port) {
|
||||
auto& message_queue = GetRecvMessageQueue();
|
||||
return message_queue.PopFront(num_bytes, bytes, num_caps, caps, reply_port);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,10 +11,17 @@ class IpcObject : public KernelObject {
|
|||
IpcObject(){};
|
||||
virtual ~IpcObject() {}
|
||||
|
||||
virtual glcr::ErrorCode Send(uint64_t num_bytes, const void* bytes,
|
||||
uint64_t num_caps, const z_cap_t* caps) final;
|
||||
virtual glcr::ErrorCode Send(const glcr::ArrayView<uint8_t>& message,
|
||||
const glcr::ArrayView<z_cap_t>& caps) final;
|
||||
virtual glcr::ErrorCode Send(const glcr::ArrayView<uint8_t>& message,
|
||||
const glcr::ArrayView<z_cap_t>& caps,
|
||||
const z_cap_t reply_port) final;
|
||||
|
||||
virtual glcr::ErrorCode Recv(uint64_t* num_bytes, void* bytes,
|
||||
uint64_t* num_caps, z_cap_t* caps) final;
|
||||
virtual glcr::ErrorCode Recv(uint64_t* num_bytes, void* bytes,
|
||||
uint64_t* num_caps, z_cap_t* caps,
|
||||
z_cap_t* reply_port) final;
|
||||
|
||||
bool HasMessages() { return !GetRecvMessageQueue().empty(); }
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue