ldr: update SetProgramArguments for 11.0.0 abi change

This commit is contained in:
Michael Scire 2020-11-30 22:11:08 -08:00
parent e5ae43f4c2
commit 594929189d

View File

@ -24,7 +24,7 @@ LDR_GENERATE_SERVICE_INIT(Shell, shel);
LDR_GENERATE_SERVICE_INIT(Dmnt, dmnt); LDR_GENERATE_SERVICE_INIT(Dmnt, dmnt);
LDR_GENERATE_SERVICE_INIT(Pm, pm); LDR_GENERATE_SERVICE_INIT(Pm, pm);
static Result _ldrSetProgramArguments(Service* srv, u64 program_id, const void *args, size_t args_size) { static Result _ldrSetProgramArgumentsDeprecated(Service* srv, u64 program_id, const void *args, size_t args_size) {
const struct { const struct {
u32 args_size; u32 args_size;
u32 pad; u32 pad;
@ -37,6 +37,21 @@ static Result _ldrSetProgramArguments(Service* srv, u64 program_id, const void *
); );
} }
static Result _ldrSetProgramArgumentsModern(Service* srv, u64 program_id, const void *args, size_t args_size) {
return serviceDispatchIn(srv, 0, program_id,
.buffer_attrs = { SfBufferAttr_In | SfBufferAttr_HipcPointer },
.buffers = { { args, args_size } },
);
}
static Result _ldrSetProgramArguments(Service* srv, u64 program_id, const void *args, size_t args_size) {
if (hosversionAtLeast(11,0,0)) {
return _ldrSetProgramArgumentsModern(srv, program_id, args, args_size);
} else {
return _ldrSetProgramArgumentsDeprecated(srv, program_id, args, args_size);
}
}
static Result _ldrFlushArguments(Service* srv) { static Result _ldrFlushArguments(Service* srv) {
return serviceDispatch(srv, 1); return serviceDispatch(srv, 1);
} }
@ -50,7 +65,7 @@ Result ldrShellFlushArguments(void) {
} }
Result ldrDmntSetProgramArguments(u64 program_id, const void *args, size_t args_size) { Result ldrDmntSetProgramArguments(u64 program_id, const void *args, size_t args_size) {
return _ldrSetProgramArguments(&g_ldrDmntSrv, program_id, args, args_size); return _ldrSetProgramArguments(&g_ldrShellSrv, program_id, args, args_size);
} }
Result ldrDmntFlushArguments(void) { Result ldrDmntFlushArguments(void) {