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 = {};
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;

View File

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