| 123456789101112131415161718192021222324252627282930313233343536373839 |
- using Ryujinx.Horizon.Common;
- using Ryujinx.Horizon.Sdk.Sf.Cmif;
- using Ryujinx.Horizon.Sdk.Sf.Hipc;
- using System;
- namespace Ryujinx.Horizon.Sdk
- {
- static class ServiceUtil
- {
- public static Result SendRequest(out CmifResponse response, int sessionHandle, uint requestId, bool sendPid, scoped ReadOnlySpan<byte> data)
- {
- ulong tlsAddress = HorizonStatic.ThreadContext.TlsAddress;
- int tlsSize = Api.TlsMessageBufferSize;
- using (var tlsRegion = HorizonStatic.AddressSpace.GetWritableRegion(tlsAddress, tlsSize))
- {
- CmifRequest request = CmifMessage.CreateRequest(tlsRegion.Memory.Span, new CmifRequestFormat()
- {
- DataSize = data.Length,
- RequestId = requestId,
- SendPid = sendPid
- });
- data.CopyTo(request.Data);
- }
- Result result = HorizonStatic.Syscall.SendSyncRequest(sessionHandle);
- if (result.IsFailure)
- {
- response = default;
- return result;
- }
- return CmifMessage.ParseResponse(out response, HorizonStatic.AddressSpace.GetWritableRegion(tlsAddress, tlsSize).Memory.Span, false, 0);
- }
- }
- }
|