vi: rewrite IHOSBinderDriver

This commit is contained in:
Liam
2024-02-14 00:09:29 -05:00
parent c448001d47
commit 59011a04a1
5 changed files with 53 additions and 49 deletions

View File

@@ -6,6 +6,8 @@
#pragma once
#include <span>
#include "common/common_types.h"
namespace Kernel {
@@ -38,7 +40,8 @@ enum class TransactionId {
class IBinder {
public:
virtual ~IBinder() = default;
virtual void Transact(HLERequestContext& ctx, android::TransactionId code, u32 flags) = 0;
virtual void Transact(android::TransactionId code, u32 flags, std::span<const u8> parcel_data,
std::span<u8> parcel_reply) = 0;
virtual Kernel::KReadableEvent& GetNativeHandle() = 0;
};

View File

@@ -807,9 +807,10 @@ Status BufferQueueProducer::SetPreallocatedBuffer(s32 slot,
return Status::NoError;
}
void BufferQueueProducer::Transact(HLERequestContext& ctx, TransactionId code, u32 flags) {
void BufferQueueProducer::Transact(TransactionId code, u32 flags, std::span<const u8> parcel_data,
std::span<u8> parcel_reply) {
Status status{Status::NoError};
InputParcel parcel_in{ctx.ReadBuffer()};
InputParcel parcel_in{parcel_data};
OutputParcel parcel_out{};
switch (code) {
@@ -917,7 +918,9 @@ void BufferQueueProducer::Transact(HLERequestContext& ctx, TransactionId code, u
parcel_out.Write(status);
ctx.WriteBuffer(parcel_out.Serialize());
const auto serialized = parcel_out.Serialize();
std::memcpy(parcel_reply.data(), serialized.data(),
std::min(parcel_reply.size(), serialized.size()));
}
Kernel::KReadableEvent& BufferQueueProducer::GetNativeHandle() {

View File

@@ -47,7 +47,8 @@ public:
Service::Nvidia::NvCore::NvMap& nvmap_);
~BufferQueueProducer();
void Transact(HLERequestContext& ctx, android::TransactionId code, u32 flags) override;
void Transact(android::TransactionId code, u32 flags, std::span<const u8> parcel_data,
std::span<u8> parcel_reply) override;
Kernel::KReadableEvent& GetNativeHandle() override;