cmif/service: Support passing optional 5.0.0+ context data to requests

This commit is contained in:
fincs 2019-09-20 01:48:10 +02:00
parent 4eda677b93
commit c3b920d210
No known key found for this signature in database
GPG Key ID: 62C7609ADA219C60
2 changed files with 8 additions and 6 deletions

View File

@ -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;

View File

@ -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,