diff options
-rw-r--r-- | include/kernel/kernel/sysmem.h | 41 | ||||
-rw-r--r-- | include/kernel/kernel/sysmem/memblock.h | 52 | ||||
-rw-r--r-- | nids/360/SceSysmem.yml | 117 | ||||
-rw-r--r-- | nids/365/SceSysmem.yml | 5 |
4 files changed, 113 insertions, 102 deletions
diff --git a/include/kernel/kernel/sysmem.h b/include/kernel/kernel/sysmem.h index 026ee01..c0f28dd 100644 --- a/include/kernel/kernel/sysmem.h +++ b/include/kernel/kernel/sysmem.h @@ -32,7 +32,7 @@ typedef struct SceKernelHeapCreateOpt { SceUInt32 field_18; } SceKernelHeapCreateOpt; -typedef struct SceCreateUidObjOpt { +typedef struct SceGUIDKernelCreateOpt { SceUInt32 flags; SceUInt32 field_4; SceUInt32 field_8; @@ -40,7 +40,8 @@ typedef struct SceCreateUidObjOpt { SceUInt32 field_10; SceUInt32 field_14; SceUInt32 field_18; -} SceCreateUidObjOpt; + SceUInt32 field_1C; +} SceGUIDKernelCreateOpt; typedef enum SceKernelModel { SCE_KERNEL_MODEL_VITA = 0x10000, @@ -80,23 +81,23 @@ int sceKernelDeleteHeap(SceUID uid); void *sceKernelAllocHeapMemory(SceUID uid, SceSize size); void sceKernelFreeHeapMemory(SceUID uid, void *ptr); -int sceKernelMemcpyUserToKernelForPid(SceUID pid, void *dst, uintptr_t src, SceSize len); -int sceKernelMemcpyUserToKernel(void *dst, uintptr_t src, SceSize len); -int sceKernelMemcpyKernelToUser(uintptr_t dst, const void *src, SceSize len); -int sceKernelRxMemcpyKernelToUserForPid(SceUID pid, uintptr_t dst, const void *src, SceSize len); +int sceKernelCopyFromUserProc(SceUID pid, void *dst, uintptr_t src, SceSize len); +int sceKernelCopyFromUser(void *dst, uintptr_t src, SceSize len); +int sceKernelCopyToUser(uintptr_t dst, const void *src, SceSize len); +int sceKernelCopyToUserProcTextDomain(SceUID pid, uintptr_t dst, const void *src, SceSize len); -int sceKernelStrncpyUserToKernel(void *dst, uintptr_t src, SceSize len); -int sceKernelStrncpyKernelToUser(uintptr_t dst, const void *src, SceSize len); -int sceKernelStrncpyUserForPid(SceUID pid, void *dst, uintptr_t src, SceSize len); +int sceKernelStrncpyFromUser(void *dst, uintptr_t src, SceSize len); +int sceKernelStrncpyToUser(uintptr_t dst, const void *src, SceSize len); +int sceKernelStrncpyFromUserProc(SceUID pid, void *dst, uintptr_t src, SceSize len); -SceUID sceKernelKernelUidForUserUid(SceUID pid, SceUID user_uid); -SceUID sceKernelCreateUserUid(SceUID pid, SceUID kern_uid); -SceUID sceKernelCreateUidObj(SceClass *cls, const char *name, SceCreateUidObjOpt *opt, SceObjectBase **obj); +SceUID scePUIDtoGUID(SceUID pid, SceUID puid); +SceUID scePUIDOpenByGUID(SceUID pid, SceUID guid); +SceUID sceGUIDKernelCreateWithOpt(SceClass *cls, const char *name, SceGUIDKernelCreateOpt *opt, SceObjectBase **obj); /** * Gets an object from a UID. * - * This retains the object internally! You must call `sceKernelUidRelease` + * This retains the object internally! You must call `sceGUIDReleaseObject` * after you are done using it. * * @param[in] uid The uid @@ -105,7 +106,7 @@ SceUID sceKernelCreateUidObj(SceClass *cls, const char *name, SceCreateUidObjOpt * * @return 0 on success, < 0 on error. */ -int sceKernelGetObjForUid(SceUID uid, SceClass *cls, SceObjectBase **obj); +int sceGUIDReferObjectWithClass(SceUID uid, SceClass *cls, SceObjectBase **obj); /** * Retains an object referenced by the UID. @@ -116,7 +117,7 @@ int sceKernelGetObjForUid(SceUID uid, SceClass *cls, SceObjectBase **obj); * * @return 0 on success, < 0 on error. */ -int sceKernelUidRetain(SceUID uid); +int sceGUIDReferObject(SceUID uid); /** * Releases an object referenced by the UID. @@ -127,7 +128,11 @@ int sceKernelUidRetain(SceUID uid); * * @return 0 on success, < 0 on error. */ -int sceKernelUidRelease(SceUID uid); +int sceGUIDReleaseObject(SceUID uid); + +int sceGUIDSet(SceUID guid, SceClass *pClass, const char *name, SceObjectBase *pObject); + +int sceGUIDSetName(SceUID guid, const char *name); SceClass *sceKernelGetUidClass(void); SceClass *sceKernelGetUidDLinkClass(void); @@ -135,8 +140,8 @@ SceClass *sceKernelGetUidHeapClass(void); SceClass *sceKernelGetUidMemBlockClass(void); int sceKernelCreateClass(SceClass *cls, const char *name, void *uidclass, SceSize itemsize, SceClassCallback create, SceClassCallback destroy); -int sceKernelDeleteUserUid(SceUID pid, SceUID user_uid); -int sceKernelDeleteUid(SceUID uid); +int scePUIDClose(SceUID pid, SceUID puid); +int sceGUIDClose(SceUID guid); int sceKernelFindClassByName(const char *name, SceClass **cls); int sceKernelGetPidContext(SceUID pid, SceKernelProcessContext **ctx); diff --git a/include/kernel/kernel/sysmem/memblock.h b/include/kernel/kernel/sysmem/memblock.h index d12e19d..1e62493 100644 --- a/include/kernel/kernel/sysmem/memblock.h +++ b/include/kernel/kernel/sysmem/memblock.h @@ -32,18 +32,22 @@ typedef enum SceKernelMemoryRefPerm { SCE_KERNEL_MEMORY_REF_PERM_KERN_X = 0x40, } SceKernelMemoryRefPerm; -typedef struct SceKernelAddrPair { - uint32_t addr; //!< Address - uint32_t length; //!< Length -} SceKernelAddrPair; - -typedef struct SceKernelPaddrList { - uint32_t size; //!< sizeof(SceKernelPaddrList) - uint32_t list_size; //!< Size in elements of the list array - uint32_t ret_length; //!< Total physical size of the memory pairs - uint32_t ret_count; //!< Number of elements of list filled by sceKernelGetPaddrList - SceKernelAddrPair *list; //!< Array of physical addresses and their lengths pairs -} SceKernelPaddrList; +typedef struct SceKernelAddressRange { + uint32_t addr; //!< Address + uint32_t length; //!< Length +} SceKernelAddressRange; + +typedef SceKernelAddressRange SceKernelPARange; + +typedef SceKernelAddressRange SceKernelVARange; + +typedef struct SceKernelPAVector { + SceSize size; //!< sizeof(SceKernelPAVector) + uint32_t nRanges; //!< Size in elements of the vector + uint32_t nDataInVector; //!< Total physical size of the address ranges + uint32_t nTotalSize; //!< Number of elements of list filled by sceKernelVARangeToPAVector + SceKernelPARange *pVector; //!< Vector of address ranges +} SceKernelPAVector; // specific to 3.60 typedef struct SceKernelAllocMemBlockKernelOpt { @@ -57,7 +61,7 @@ typedef struct SceKernelAllocMemBlockKernelOpt { SceUInt32 extraHigh; SceUInt32 mirror_blockid; SceUID pid; - SceKernelPaddrList *pVector; + SceKernelPAVector *pVector; SceUInt32 field_2C; SceUInt32 field_30; SceUInt32 field_34; @@ -79,7 +83,7 @@ typedef struct SceKernelAllocMemBlockKernelOpt { * * @return 0 on success, < 0 on error. */ -int sceKernelGetMemBlockType(SceUID uid, unsigned int *type); +int sceKernelGetMemBlockType(SceUID uid, SceKernelMemBlockType *type); /** * Find the SceUID of a memory block for a PID @@ -90,7 +94,7 @@ int sceKernelGetMemBlockType(SceUID uid, unsigned int *type); * * @return SceUID of the memory block on success, < 0 on error. */ -SceUID sceKernelFindMemBlockByAddrForPid(SceUID pid, const void *addr, SceSize size); +SceUID sceKernelFindProcMemBlockByAddr(SceUID pid, const void *addr, SceSize size); /** * Changes the block type @@ -102,17 +106,17 @@ SceUID sceKernelFindMemBlockByAddrForPid(SceUID pid, const void *addr, SceSize s */ int sceKernelRemapBlock(SceUID uid, SceKernelMemBlockType type); -int sceKernelMapBlockUserVisible(SceUID uid); +int sceKernelMapMemBlock(SceUID uid); -int sceKernelMapUserBlock(const char *name, int permission, int type, +int sceKernelUserMapWithFlags(const char *name, int permission, int flags, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, unsigned int *kernel_offset); -int sceKernelMapUserBlockDefaultType(const char *name, int permission, const void *user_buf, +int sceKernelUserMap(const char *name, int permission, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, unsigned int *kernel_offset); -int sceKernelMapUserBlockDefaultTypeForPid(int pid, const char *name, int permission, +int sceKernelUserMapProc(int pid, const char *name, int permission, const void *user_buf, SceSize size, void **kernel_page, SceSize *kernel_size, unsigned int *kernel_offset); @@ -124,17 +128,17 @@ int sceKernelMapUserBlockDefaultTypeForPid(int pid, const char *name, int permis * * @return 0 on success, < 0 on error. */ -int sceKernelGetPaddr(const void *addr, uintptr_t *paddr); +int sceKernelVAtoPA(const void *addr, uintptr_t *paddr); /** * Get the physical address list of a given virtual address range * - * @param[in] input - The virtual address range - * @param[out] list - The list of physical addresses + * @param[in] pRange - The virtual address range + * @param[out] pVector - The list of physical addresses * * @return 0 on success, < 0 on error. */ -int sceKernelGetPaddrList(const SceKernelAddrPair *input, SceKernelPaddrList *list); +int sceKernelVARangeToPAVector(const SceKernelVARange *pRange, SceKernelPAVector *pVector); /** * Releases a memblock referenced by the UID. @@ -145,7 +149,7 @@ int sceKernelGetPaddrList(const SceKernelAddrPair *input, SceKernelPaddrList *li * * @return 0 on success, < 0 on error. */ -int sceKernelMemBlockRelease(SceUID uid); +int sceKernelUserUnmap(SceUID uid); /** * Retains a memory range diff --git a/nids/360/SceSysmem.yml b/nids/360/SceSysmem.yml index 86ae8ac..2d11b96 100644 --- a/nids/360/SceSysmem.yml +++ b/nids/360/SceSysmem.yml @@ -360,8 +360,21 @@ modules: SceSysmemForDriver: nid: 0x6F25E18A functions: + sceGUIDClose: 0x047D32F2 + sceGUIDCreate: 0x89A44858 + sceGUIDGetClass: 0xC74B0152 + sceGUIDGetName: 0xA78755EB + sceGUIDGetName2: 0xE655852F + sceGUIDGetObject: 0x0FC24464 + sceGUIDKernelCreate: 0x56A13E90 + sceGUIDOpenByName: 0xD76E7452 + sceGUIDReferObject: 0x0F5C84B7 + sceGUIDReferObjectWithClass: 0x00ED6C14 sceGUIDReferObjectWithClassLevel: 0x77066FD1 - sceKernelAddressSpaceVAtoPABySW: 0x65419BD3 + sceGUIDReferObjectWithLevel: 0xF6DB54BA + sceGUIDReferObjectWithSubclass: 0x72A98D17 + sceGUIDReleaseObject: 0x149885C4 + sceGUIDSetName: 0x4CFA4100 sceKernelAllocHeapMemory: 0x7B4CB60A sceKernelAllocHeapMemoryFromGlobalHeap: 0x7750CEA7 sceKernelAllocHeapMemoryFromGlobalHeapWithOpt: 0x0B4ED16A @@ -369,21 +382,19 @@ modules: sceKernelAllocHeapMemoryWithOption: 0x49D4DD9B sceKernelAllocMemBlock: 0xC94850C9 sceKernelAllocMemBlockWithInfo: 0xD44F464D + sceKernelCopyFromUser: 0xBC996A7A + sceKernelCopyFromUserProc: 0x605275F8 + sceKernelCopyToUser: 0x6D88EF8A + sceKernelCopyToUserProc: 0x6B825479 + sceKernelCopyUser: 0x1BD44DD5 + sceKernelCopyUserProc: 0x8E086C33 sceKernelCreateClass: 0x61317102 sceKernelCreateHeap: 0x9328E0E8 - sceKernelCreateUidObj2: 0x56A13E90 - sceKernelCreateUidObjForUid: 0x89A44858 - sceKernelCreateUserUid: 0xBF209859 - sceKernelCreateUserUidForClass: 0xCED1547B - sceKernelCreateUserUidForName: 0x513B9DDD - sceKernelCreateUserUidForNameWithClass: 0x8DA0BCA5 + sceKernelDecRefCountMemBlock: 0xF50BDC0C sceKernelDeleteHeap: 0xD6437637 - sceKernelDeleteUid: 0x047D32F2 - sceKernelDeleteUserUid: 0x84A4AF5E sceKernelFindMemBlock: 0x9C78064C sceKernelFindMemBlockByAddr: 0x8A1742F6 - sceKernelFindMemBlockByAddrForDefaultSize: 0xF3BBE2E1 - sceKernelFindMemBlockByAddrForPid: 0x857F1D5A + sceKernelFindProcMemBlockByAddr: 0x857F1D5A sceKernelFirstDifferentBlock32User: 0xBDA6E42B sceKernelFirstDifferentBlock64User: 0xBB3B02C2 sceKernelFirstDifferentBlock64UserForPid: 0xE83855FD @@ -391,46 +402,23 @@ modules: sceKernelFreeHeapMemory: 0x3EBCE343 sceKernelFreeHeapMemoryFromGlobalHeap: 0xFB817A59 sceKernelFreeMemBlock: 0x009E1C61 - sceKernelGUIDGetObject: 0x0FC24464 - sceKernelGetClassForPidForUid: 0xE9728A12 - sceKernelGetClassForUid: 0xC74B0152 sceKernelGetMemBlockBase: 0xA841EDDA sceKernelGetMemBlockMappedBase: 0x0B1FD5C3 + sceKernelGetMemBlockMemtypeByAddr: 0xF3BBE2E1 sceKernelGetMemBlockPARange: 0x98C15666 - sceKernelGetMemBlockPaddrListForUid: 0x19A51AC7 + sceKernelGetMemBlockPAVector: 0x19A51AC7 sceKernelGetMemBlockVBase: 0xB81CF0A3 - sceKernelGetNameForPidByUid: 0x09896EB7 - sceKernelGetNameForUid: 0xA78755EB - sceKernelGetNameForUid2: 0xE655852F - sceKernelGetObjForUid: 0x00ED6C14 - sceKernelGetObjectForPidForUid: 0xFE6D7FAE - sceKernelGetObjectForUidForAttr: 0xF6DB54BA - sceKernelGetObjectForUidForClassTree: 0x72A98D17 - sceKernelGetPaddr: 0x8D160E65 - sceKernelGetPaddrList: 0xE68BEEBD - sceKernelGetPaddrListForLargePage: 0x08A8A7E8 - sceKernelGetPaddrListForSmallPage: 0x16844CE6 - sceKernelGetPaddrPair: 0xAE36C775 - sceKernelGetPaddrPairForLargePage: 0x32257A24 - sceKernelGetPaddrPairForSmallPage: 0xB3575090 sceKernelGetPhysicalMemoryType: 0x0AAA4FDD sceKernelGetPidContext: 0x2ECF7944 sceKernelGetUidClass: 0x85336A1C + sceKernelIncRefCountMemBlock: 0xEAF3849B sceKernelIsAccessibleRangeProc: 0x9F6E45E3 sceKernelIsPaddrWithinSameSectionForUid: 0xF4AD89D8 - sceKernelKernelUidForUserUid: 0x45D22597 - sceKernelKernelUidForUserUidForClass: 0x184172B1 - sceKernelMapBlockUserVisible: 0x58D21746 - sceKernelMapBlockUserVisibleWithFlag: 0x04059C4B - sceKernelMapUserBlock: 0x7D4F8B5F - sceKernelMapUserBlockDefaultType: 0x278BC201 - sceKernelMapUserBlockDefaultTypeForPid: 0x0091D74D - sceKernelMemBlockDecRefCounterAndReleaseUid: 0xF50BDC0C + sceKernelMapMemBlock: 0x58D21746 + sceKernelMapMemBlockWithFlags: 0x04059C4B sceKernelMemBlockGetInfoEx: 0x24A99FFF sceKernelMemBlockGetInfoExForVisibilityLevel: 0xA73CFFEF sceKernelMemBlockGetSomeSize: 0x78337B62 - sceKernelMemBlockIncRefCounterAndReleaseUid: 0xEAF3849B - sceKernelMemBlockRelease: 0x00575B00 sceKernelMemBlockType2Memtype: 0x20C811FA sceKernelMemBlockTypeGetPrivileges: 0x6A0792A3 sceKernelMemRangeRelease: 0x75C70DE0 @@ -439,41 +427,55 @@ modules: sceKernelMemRangeRetain: 0x59A4402F sceKernelMemRangeRetainForPid: 0x659586BF sceKernelMemRangeRetainWithPerm: 0xBC0A1D60 - sceKernelMemcpyKernelToUser: 0x6D88EF8A - sceKernelMemcpyKernelToUserForPid: 0x6B825479 - sceKernelMemcpyKernelToUserForPidUnchecked: 0xFED82F2D - sceKernelMemcpyUserToKernel: 0xBC996A7A - sceKernelMemcpyUserToKernelForPid: 0x605275F8 - sceKernelMemcpyUserToUser: 0x1BD44DD5 - sceKernelMemcpyUserToUserForPid: 0x8E086C33 - sceKernelOpenUidForName: 0xD76E7452 sceKernelProcModeVAtoPA: 0x61A67D32 sceKernelRemapBlock: 0xDFE2C8CB - sceKernelSetNameForPidForUid: 0x12624884 - sceKernelSetObjectForUid: 0x4CFA4100 - sceKernelStrncpyKernelToUser: 0x80BD6FEB - sceKernelStrncpyUserForPid: 0x75AAF178 - sceKernelStrncpyUserToKernel: 0xDB3EC244 - sceKernelStrnlenUser: 0xB429D419 - sceKernelStrnlenUserForPid: 0x9929EB07 + sceKernelStrncpyFromUser: 0xDB3EC244 + sceKernelStrncpyFromUserProc: 0x75AAF178 + sceKernelStrncpyToUser: 0x80BD6FEB + sceKernelStrncpyToUserProc: 0xFED82F2D + sceKernelStrnlenFromUser: 0xB429D419 + sceKernelStrnlenFromUserProc: 0x9929EB07 sceKernelSwitchPidContext: 0x2D711589 - sceKernelUidRelease: 0x149885C4 - sceKernelUidRetain: 0x0F5C84B7 sceKernelUnmapMemBlock: 0xFFCD9B60 + sceKernelUserMap: 0x278BC201 + sceKernelUserMapProc: 0x0091D74D + sceKernelUserMapWithFlags: 0x7D4F8B5F + sceKernelUserUnmap: 0x00575B00 + sceKernelVARangeToPARange: 0xAE36C775 + sceKernelVARangeToPARangeForLargePage: 0x32257A24 + sceKernelVARangeToPARangeForSmallPage: 0xB3575090 + sceKernelVARangeToPAVector: 0xE68BEEBD + sceKernelVARangeToPAVectorForLargePage: 0x08A8A7E8 + sceKernelVARangeToPAVectorForSmallPage: 0x16844CE6 + sceKernelVAtoPA: 0x8D160E65 + sceKernelVAtoPABySW: 0x65419BD3 + scePUIDClose: 0x84A4AF5E + scePUIDGetClass: 0xE9728A12 + scePUIDGetName: 0x09896EB7 + scePUIDGetObject: 0xFE6D7FAE + scePUIDOpenByGUID: 0xBF209859 + scePUIDOpenByGUIDWithFlags: 0xCED1547B + scePUIDOpenByName: 0x513B9DDD + scePUIDOpenByNameWithClass: 0x8DA0BCA5 + scePUIDSetName: 0x12624884 + scePUIDtoGUID: 0x45D22597 + scePUIDtoGUIDWithClass: 0x184172B1 SceSysmemForKernel: nid: 0x63A519E5 functions: sceGUIDGetObjectWithClass: 0x7ABFA9A7 sceGUIDGetUIDVectorByClass: 0xEC7D36EF sceGUIDKernelCreateWithAttr: 0x53E1FFDE + sceGUIDKernelCreateWithOpt: 0xDF0288D7 sceGUIDOpenByGUID: 0xCF53EEE4 + sceGUIDSet: 0xD7B323EB sceKernelAddressSpaceFreeAllMemBlock: 0x89CE1F31 sceKernelAddressSpaceSetPhyMemPart: 0x67955EE9 sceKernelAddressSpaceUnmap: 0xCE72839E sceKernelAddressSpaceVAtoPA: 0xF2179820 sceKernelAllocSystemCallTable: 0x5FFE4B79 + sceKernelCopyToUserProcTextDomain: 0x30931572 sceKernelCreateAddressSpace: 0x4A3737F0 - sceKernelCreateUidObj: 0xDF0288D7 sceKernelDeleteAddressSpace: 0xF2D7FE3A sceKernelFindClassByName: 0x62989905 sceKernelFreeSimpleMemBlock: 0xA1FFA2C9 @@ -485,7 +487,6 @@ modules: sceKernelGetUidHeapClass: 0x4CCA935D sceKernelGetUidMemBlockClass: 0xAF729575 sceKernelNameHeapGetInfo: 0xE443253B - sceKernelRxMemcpyKernelToUserForPid: 0x30931572 sceKernelSysrootAlloc: 0xC0A4D2F3 sceKernelUIDEntryHeapGetInfo: 0x686AA15C SceSysrootForDriver: diff --git a/nids/365/SceSysmem.yml b/nids/365/SceSysmem.yml index 0fa3b00..e2be720 100644 --- a/nids/365/SceSysmem.yml +++ b/nids/365/SceSysmem.yml @@ -23,10 +23,11 @@ modules: SceSysmemForKernel: nid: 0x02451F0F functions: - sceKernelCreateUidObj: 0xFB6390CE + sceGUIDKernelCreateWithOpt: 0xFB6390CE + sceGUIDSet: 0xBF275C5A + sceKernelCopyToUserProcTextDomain: 0x2995558D sceKernelFindClassByName: 0x7D87F706 sceKernelGetMemBlockType: 0xD44FE44B - sceKernelRxMemcpyKernelToUserForPid: 0x2995558D SceUartForKernel: nid: 0x1CCD9BA3 functions: |