mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
cmif/service: Support passing optional 5.0.0+ context data to requests
This commit is contained in:
parent
4eda677b93
commit
c3b920d210
@ -112,7 +112,7 @@ NX_CONSTEXPR CmifRequest cmifMakeRequest(void* base, CmifRequestFormat fmt)
|
||||
|
||||
CmifRequest req = {};
|
||||
req.hipc = hipcMakeRequestInline(base,
|
||||
.type = CmifCommandType_Request,
|
||||
.type = fmt.context ? CmifCommandType_RequestWithContext : CmifCommandType_Request,
|
||||
.num_send_statics = fmt.num_in_auto_buffers + fmt.num_in_pointers,
|
||||
.num_send_buffers = fmt.num_in_auto_buffers + fmt.num_in_buffers,
|
||||
.num_recv_buffers = fmt.num_out_auto_buffers + fmt.num_out_buffers,
|
||||
@ -135,7 +135,7 @@ NX_CONSTEXPR CmifRequest cmifMakeRequest(void* base, CmifRequestFormat fmt)
|
||||
.data_size = (u16)payload_size,
|
||||
.object_id = fmt.object_id,
|
||||
.padding = 0,
|
||||
.token = 0,
|
||||
.token = fmt.context,
|
||||
};
|
||||
hdr = (CmifInHeader*)(domain_hdr+1);
|
||||
req.objects = (u32*)((u8*)hdr + payload_size);
|
||||
@ -144,9 +144,9 @@ NX_CONSTEXPR CmifRequest cmifMakeRequest(void* base, CmifRequestFormat fmt)
|
||||
|
||||
*hdr = (CmifInHeader){
|
||||
.magic = CMIF_IN_HEADER_MAGIC,
|
||||
.version = 0,
|
||||
.version = fmt.context ? 1 : 0,
|
||||
.command_id = fmt.request_id,
|
||||
.token = 0,
|
||||
.token = fmt.object_id ? 0 : fmt.context,
|
||||
};
|
||||
|
||||
req.data = hdr+1;
|
||||
|
@ -68,6 +68,7 @@ typedef struct SfOutHandleAttrs
|
||||
typedef struct SfDispatchParams
|
||||
{
|
||||
Handle target_session;
|
||||
u32 context;
|
||||
|
||||
SfBufferAttrs buffer_attrs;
|
||||
SfBuffer buffers[8];
|
||||
@ -305,7 +306,7 @@ NX_CONSTEXPR void _serviceRequestProcessBuffer(CmifRequest* req, const SfBuffer*
|
||||
}
|
||||
|
||||
NX_INLINE void* serviceMakeRequest(
|
||||
Service* s, u32 request_id, u32 data_size, bool send_pid,
|
||||
Service* s, u32 request_id, u32 context, u32 data_size, bool send_pid,
|
||||
const SfBufferAttrs buffer_attrs, const SfBuffer* buffers,
|
||||
u32 num_objects, const Service* const* objects,
|
||||
u32 num_handles, const Handle* handles
|
||||
@ -318,6 +319,7 @@ NX_INLINE void* serviceMakeRequest(
|
||||
CmifRequestFormat fmt = {};
|
||||
fmt.object_id = s->object_id;
|
||||
fmt.request_id = request_id;
|
||||
fmt.context = context;
|
||||
fmt.data_size = data_size;
|
||||
fmt.server_pointer_size = s->pointer_buffer_size;
|
||||
fmt.num_objects = num_objects;
|
||||
@ -416,7 +418,7 @@ NX_INLINE Result serviceDispatchImpl(
|
||||
SfDispatchParams disp
|
||||
)
|
||||
{
|
||||
void* in = serviceMakeRequest(s, request_id,
|
||||
void* in = serviceMakeRequest(s, request_id, disp.context,
|
||||
in_data_size, disp.in_send_pid,
|
||||
disp.buffer_attrs, disp.buffers,
|
||||
disp.in_num_objects, disp.in_objects,
|
||||
|
Loading…
Reference in New Issue
Block a user