mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-24 05:42: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 = {};
|
CmifRequest req = {};
|
||||||
req.hipc = hipcMakeRequestInline(base,
|
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_statics = fmt.num_in_auto_buffers + fmt.num_in_pointers,
|
||||||
.num_send_buffers = fmt.num_in_auto_buffers + fmt.num_in_buffers,
|
.num_send_buffers = fmt.num_in_auto_buffers + fmt.num_in_buffers,
|
||||||
.num_recv_buffers = fmt.num_out_auto_buffers + fmt.num_out_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,
|
.data_size = (u16)payload_size,
|
||||||
.object_id = fmt.object_id,
|
.object_id = fmt.object_id,
|
||||||
.padding = 0,
|
.padding = 0,
|
||||||
.token = 0,
|
.token = fmt.context,
|
||||||
};
|
};
|
||||||
hdr = (CmifInHeader*)(domain_hdr+1);
|
hdr = (CmifInHeader*)(domain_hdr+1);
|
||||||
req.objects = (u32*)((u8*)hdr + payload_size);
|
req.objects = (u32*)((u8*)hdr + payload_size);
|
||||||
@ -144,9 +144,9 @@ NX_CONSTEXPR CmifRequest cmifMakeRequest(void* base, CmifRequestFormat fmt)
|
|||||||
|
|
||||||
*hdr = (CmifInHeader){
|
*hdr = (CmifInHeader){
|
||||||
.magic = CMIF_IN_HEADER_MAGIC,
|
.magic = CMIF_IN_HEADER_MAGIC,
|
||||||
.version = 0,
|
.version = fmt.context ? 1 : 0,
|
||||||
.command_id = fmt.request_id,
|
.command_id = fmt.request_id,
|
||||||
.token = 0,
|
.token = fmt.object_id ? 0 : fmt.context,
|
||||||
};
|
};
|
||||||
|
|
||||||
req.data = hdr+1;
|
req.data = hdr+1;
|
||||||
|
@ -68,6 +68,7 @@ typedef struct SfOutHandleAttrs
|
|||||||
typedef struct SfDispatchParams
|
typedef struct SfDispatchParams
|
||||||
{
|
{
|
||||||
Handle target_session;
|
Handle target_session;
|
||||||
|
u32 context;
|
||||||
|
|
||||||
SfBufferAttrs buffer_attrs;
|
SfBufferAttrs buffer_attrs;
|
||||||
SfBuffer buffers[8];
|
SfBuffer buffers[8];
|
||||||
@ -305,7 +306,7 @@ NX_CONSTEXPR void _serviceRequestProcessBuffer(CmifRequest* req, const SfBuffer*
|
|||||||
}
|
}
|
||||||
|
|
||||||
NX_INLINE void* serviceMakeRequest(
|
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,
|
const SfBufferAttrs buffer_attrs, const SfBuffer* buffers,
|
||||||
u32 num_objects, const Service* const* objects,
|
u32 num_objects, const Service* const* objects,
|
||||||
u32 num_handles, const Handle* handles
|
u32 num_handles, const Handle* handles
|
||||||
@ -318,6 +319,7 @@ NX_INLINE void* serviceMakeRequest(
|
|||||||
CmifRequestFormat fmt = {};
|
CmifRequestFormat fmt = {};
|
||||||
fmt.object_id = s->object_id;
|
fmt.object_id = s->object_id;
|
||||||
fmt.request_id = request_id;
|
fmt.request_id = request_id;
|
||||||
|
fmt.context = context;
|
||||||
fmt.data_size = data_size;
|
fmt.data_size = data_size;
|
||||||
fmt.server_pointer_size = s->pointer_buffer_size;
|
fmt.server_pointer_size = s->pointer_buffer_size;
|
||||||
fmt.num_objects = num_objects;
|
fmt.num_objects = num_objects;
|
||||||
@ -416,7 +418,7 @@ NX_INLINE Result serviceDispatchImpl(
|
|||||||
SfDispatchParams disp
|
SfDispatchParams disp
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
void* in = serviceMakeRequest(s, request_id,
|
void* in = serviceMakeRequest(s, request_id, disp.context,
|
||||||
in_data_size, disp.in_send_pid,
|
in_data_size, disp.in_send_pid,
|
||||||
disp.buffer_attrs, disp.buffers,
|
disp.buffer_attrs, disp.buffers,
|
||||||
disp.in_num_objects, disp.in_objects,
|
disp.in_num_objects, disp.in_objects,
|
||||||
|
Loading…
Reference in New Issue
Block a user