Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updated ncm to new libnx ipc #331

Merged
merged 15 commits into from Sep 26, 2019
2 changes: 1 addition & 1 deletion nx/include/switch/services/ncm.h
Expand Up @@ -154,7 +154,7 @@ Result ncmContentStorageRegister(NcmContentStorage* cs, const NcmNcaId* content_
Result ncmContentStorageDelete(NcmContentStorage* cs, const NcmNcaId* content_id);
Result ncmContentStorageHas(NcmContentStorage* cs, bool* out, const NcmNcaId* content_id);
Result ncmContentStorageGetPath(NcmContentStorage* cs, char* out_path, size_t out_size, const NcmNcaId* content_id);
Result ncmContentStorageGetPlaceHolderPath(NcmContentStorage* cs, const char* out_path, size_t out_size, NcmNcaId* placeholder_id);
Result ncmContentStorageGetPlaceHolderPath(NcmContentStorage* cs, const char* out_path, size_t out_size, const NcmNcaId* placeholder_id);
Result ncmContentStorageCleanupAllPlaceHolder(NcmContentStorage* cs);
Result ncmContentStorageListPlaceHolder(NcmContentStorage* cs, NcmNcaId* out_ids, size_t out_ids_size, u32* out_count);
Result ncmContentStorageGetContentCount(NcmContentStorage* cs, u32* out_count);
Expand Down
56 changes: 36 additions & 20 deletions nx/source/services/ncm.c
Expand Up @@ -27,14 +27,30 @@ static Result _ncmGetInterfaceInU8(Service* srv_out, u32 cmd_id, u8 inval) {
);
}

static Result _ncmCmdNoIo(Service* srv, u32 cmd_id) {
NX_INLINE Result _ncmCmdNoIo(Service* srv, u32 cmd_id) {
Adubbz marked this conversation as resolved.
Show resolved Hide resolved
return serviceDispatch(srv, cmd_id);
}

static Result _ncmCmdInU8(Service* srv, u32 cmd_id, u8 inval) {
NX_INLINE Result _ncmCmdNoInOutU64(Service* srv, u32 cmd_id, u64* outval) {
return serviceDispatchOut(srv, cmd_id, *outval);
}

NX_INLINE Result _ncmCmdOutNcaId(Service* srv, u32 cmd_id, NcmNcaId* outval) {
return serviceDispatchOut(srv, cmd_id, *outval);
}

NX_INLINE Result _ncmCmdInU8(Service* srv, u32 cmd_id, u8 inval) {
return serviceDispatchIn(srv, cmd_id, inval);
}

NX_INLINE Result _ncmCmdInNcaId(Service* srv, u32 cmd_id, const NcmNcaId* inval) {
return serviceDispatchIn(srv, cmd_id, *inval);
}

NX_INLINE Result _ncmCmdInNcaIdOutU64(Service* srv, u32 cmd_id, const NcmNcaId* inval, u64* outval) {
return serviceDispatchInOut(srv, cmd_id, *inval, *outval);
}

Result ncmCreateContentStorage(FsStorageId storage_id) {
return _ncmCmdInU8(&g_ncmSrv, 0, storage_id);
}
Expand Down Expand Up @@ -98,8 +114,12 @@ Result ncmInvalidateRightsIdCache(void) {
return _ncmCmdNoIo(&g_ncmSrv, 13);
}

void ncmContentStorageClose(NcmContentStorage* cs) {
serviceClose(&cs->s);
}

Result ncmContentStorageGeneratePlaceHolderId(NcmContentStorage* cs, NcmNcaId* out_id) {
return serviceDispatchOut(&cs->s, 0, *out_id);
return _ncmCmdOutNcaId(&cs->s, 0, out_id);
}

Result ncmContentStorageCreatePlaceHolder(NcmContentStorage* cs, const NcmNcaId* content_id, const NcmNcaId* placeholder_id, u64 size) {
Expand All @@ -112,7 +132,7 @@ Result ncmContentStorageCreatePlaceHolder(NcmContentStorage* cs, const NcmNcaId*
}

Result ncmContentStorageDeletePlaceHolder(NcmContentStorage* cs, const NcmNcaId* placeholder_id) {
return serviceDispatchIn(&cs->s, 2, *placeholder_id);
return _ncmCmdInNcaId(&cs->s, 2, placeholder_id);
}

Result ncmContentStorageHasPlaceHolder(NcmContentStorage* cs, bool* out, const NcmNcaId* placeholder_id) {
Expand All @@ -139,7 +159,7 @@ Result ncmContentStorageRegister(NcmContentStorage* cs, const NcmNcaId* content_
}

Result ncmContentStorageDelete(NcmContentStorage* cs, const NcmNcaId* content_id) {
return serviceDispatchIn(&cs->s, 6, *content_id);
return _ncmCmdInNcaId(&cs->s, 6, content_id);
}

Result ncmContentStorageHas(NcmContentStorage* cs, bool* out, const NcmNcaId* content_id) {
Expand All @@ -153,15 +173,15 @@ Result ncmContentStorageGetPath(NcmContentStorage* cs, char* out_path, size_t ou
);
}

Result ncmContentStorageGetPlaceHolderPath(NcmContentStorage* cs, const char* out_path, size_t out_size, NcmNcaId* placeholder_id) {
Result ncmContentStorageGetPlaceHolderPath(NcmContentStorage* cs, const char* out_path, size_t out_size, const NcmNcaId* placeholder_id) {
return serviceDispatchIn(&cs->s, 9, *placeholder_id,
.buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcPointer | SfBufferAttr_Out },
.buffers = { { out_path, out_size } },
);
}

Result ncmContentStorageCleanupAllPlaceHolder(NcmContentStorage* cs) {
return serviceDispatch(&cs->s, 10);
return _ncmCmdNoIo(&cs->s, 10);
}

Result ncmContentStorageListPlaceHolder(NcmContentStorage* cs, NcmNcaId* out_ids, size_t out_ids_size, u32* out_count) {
Expand All @@ -183,11 +203,11 @@ Result ncmContentStorageListContentId(NcmContentStorage* cs, NcmNcaId* out_ids,
}

Result ncmContentStorageGetSizeFromContentId(NcmContentStorage* cs, u64* out_size, const NcmNcaId* content_id) {
return serviceDispatchInOut(&cs->s, 14, *content_id, *out_size);
return _ncmCmdInNcaIdOutU64(&cs->s, 14, content_id, out_size);
}

Result ncmContentStorageDisableForcibly(NcmContentStorage* cs) {
return serviceDispatch(&cs->s, 15);
return _ncmCmdNoIo(&cs->s, 15);
}

Result ncmContentStorageRevertToPlaceHolder(NcmContentStorage* cs, const NcmNcaId* placeholder_id, const NcmNcaId* old_content_id, const NcmNcaId* new_content_id) {
Expand Down Expand Up @@ -273,17 +293,17 @@ Result ncmContentStorageGetTotalSpaceSize(NcmContentStorage* cs, u64* out_size)

Result ncmContentStorageFlushPlaceHolder(NcmContentStorage* cs) {
if (hosversionBefore(3,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return serviceDispatch(&cs->s, 24);
return _ncmCmdNoIo(&cs->s, 24);
}

Result ncmContentStorageGetSizeFromPlaceHolderId(NcmContentStorage* cs, u64* out_size, const NcmNcaId* placeholder_id) {
if (hosversionBefore(4,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return serviceDispatchInOut(&cs->s, 25, *placeholder_id, *out_size);
return _ncmCmdInNcaIdOutU64(&cs->s, 25, placeholder_id, out_size);
}

Result ncmContentStorageRepairInvalidFileAttribute(NcmContentStorage* cs) {
if (hosversionBefore(4,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
return serviceDispatch(&cs->s, 26);
return _ncmCmdNoIo(&cs->s, 26);
}

Result ncmContentStorageGetRightsIdFromPlaceHolderIdWithCache(NcmContentStorage* cs, FsRightsId* out_rights_id, u32* out_key_generation, const NcmNcaId* placeholder_id, const NcmNcaId* cache_content_id) {
Expand All @@ -304,8 +324,8 @@ Result ncmContentStorageGetRightsIdFromPlaceHolderIdWithCache(NcmContentStorage*
return rc;
}

void ncmContentStorageClose(NcmContentStorage* cs) {
serviceClose(&cs->s);
void ncmContentMetaDatabaseClose(NcmContentMetaDatabase* db) {
serviceClose(&db->s);
}

Result ncmContentMetaDatabaseSet(NcmContentMetaDatabase* db, const NcmContentMetaKey* key, const void* data, u64 data_size) {
Expand Down Expand Up @@ -403,7 +423,7 @@ Result ncmContentMetaDatabaseGetPatchId(NcmContentMetaDatabase* db, u64* out_pat
}

Result ncmContentMetaDatabaseDisableForcibly(NcmContentMetaDatabase* db) {
return serviceDispatch(&db->s, 13);
return _ncmCmdNoIo(&db->s, 13);
}

Result ncmContentMetaDatabaseLookupOrphanContent(NcmContentMetaDatabase* db, bool* out_orphaned, size_t out_orphaned_size, const NcmNcaId* content_ids, size_t content_ids_size) {
Expand All @@ -420,7 +440,7 @@ Result ncmContentMetaDatabaseLookupOrphanContent(NcmContentMetaDatabase* db, boo
}

Result ncmContentMetaDatabaseCommit(NcmContentMetaDatabase* db) {
return serviceDispatch(&db->s, 15);
return _ncmCmdNoIo(&db->s, 15);
}

Result ncmContentMetaDatabaseHasContent(NcmContentMetaDatabase* db, bool* out, const NcmContentMetaKey* key, const NcmNcaId* content_id) {
Expand Down Expand Up @@ -462,7 +482,3 @@ Result ncmContentMetaDatabaseGetContentIdByTypeAndIdOffset(NcmContentMetaDatabas
} in = { type, id_offset, {0}, *key };
return serviceDispatchInOut(&db->s, 20, in, *out_content_id);
}

void ncmContentMetaDatabaseClose(NcmContentMetaDatabase* db) {
serviceClose(&db->s);
}