summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorReiko Asakura2020-10-10 15:27:06 -0400
committerReiko Asakura2020-10-10 15:27:06 -0400
commit70004ae88d2bdb1feb56e5d2b4ba35c3b309dc92 (patch)
tree7326f8b3c4cb850880b98c884149d2f5538d4e26 /include
parentSceIniFileProcessor: fixes for type and names (diff)
downloadvds-libraries-70004ae88d2bdb1feb56e5d2b4ba35c3b309dc92.tar.gz
Add memblock.h
Diffstat (limited to 'include')
-rw-r--r--include/user/kernel/sysmem.h83
-rw-r--r--include/user/kernel/sysmem/memblock.h263
2 files changed, 267 insertions, 79 deletions
diff --git a/include/user/kernel/sysmem.h b/include/user/kernel/sysmem.h
index 6a55a46..04e3ea2 100644
--- a/include/user/kernel/sysmem.h
+++ b/include/user/kernel/sysmem.h
@@ -1,99 +1,24 @@
#ifndef _PSP2_KERNEL_SYSMEM_H_
#define _PSP2_KERNEL_SYSMEM_H_
-#include <psp2/kernel/types.h>
+#include <psp2/kernel/sysmem/memblock.h>
#ifdef __cplusplus
extern "C" {
#endif
-typedef enum _SceKernelMemBlockType {
- SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE = 0x0C208060,
- SCE_KERNEL_MEMBLOCK_TYPE_USER_RX = 0x0C20D050,
- SCE_KERNEL_MEMBLOCK_TYPE_USER_RW = 0x0C20D060,
- SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW = 0x0C80D060,
- SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW = 0x0D808060,
- SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW = 0x09408060
-} _SceKernelMemBlockType;
-
-typedef struct SceKernelAllocMemBlockOpt {
- SceSize size;
- SceUInt32 attr;
- SceSize alignment;
- SceUInt32 uidBaseBlock;
- const char *strBaseBlockName;
- int flags; //! Unknown flags 0x10 or 0x30 for ::sceKernelOpenMemBlock
- int reserved[10];
-} SceKernelAllocMemBlockOpt;
-
typedef struct SceKernelFreeMemorySizeInfo {
int size; //!< sizeof(SceKernelFreeMemorySizeInfo)
int size_user; //!< Free memory size for *_USER_RW memory
int size_cdram; //!< Free memory size for USER_CDRAM_RW memory
int size_phycont; //!< Free memory size for USER_MAIN_PHYCONT_*_RW memory
-} SceKernelFreeMemorySizeInfo;
-
+} SceKernelFreeMemorySizeInfo;
+
typedef enum SceKernelModel {
SCE_KERNEL_MODEL_VITA = 0x10000,
SCE_KERNEL_MODEL_VITATV = 0x20000
} SceKernelModel;
-typedef struct SceKernelMemBlockInfo {
- SceSize size;
- void *mappedBase;
- SceSize mappedSize;
- int memoryType;
- SceUInt32 access;
- SceKernelMemBlockType type;
-} SceKernelMemBlockInfo;
-
-typedef enum SceKernelMemoryAccessType {
- SCE_KERNEL_MEMORY_ACCESS_X = 0x01,
- SCE_KERNEL_MEMORY_ACCESS_W = 0x02,
- SCE_KERNEL_MEMORY_ACCESS_R = 0x04
-} SceKernelMemoryAccessType;
-
-typedef enum SceKernelMemoryType {
- SCE_KERNEL_MEMORY_TYPE_NORMAL_NC = 0x80,
- SCE_KERNEL_MEMORY_TYPE_NORMAL = 0xD0
-} SceKernelMemoryType;
-
-/**
- * Allocates a new memory block
- *
- * @param[in] name - Name for the memory block
- * @param[in] type - Type of the memory to allocate
- * @param[in] size - Size of the memory to allocate
- * @param[in] opt - Memory block options?
- *
- * @return SceUID of the memory block on success, < 0 on error.
-*/
-SceUID sceKernelAllocMemBlock(const char *name, SceKernelMemBlockType type, SceSize size, SceKernelAllocMemBlockOpt *opt);
-
-/**
- * Frees new memory block
- *
- * @param[in] uid - SceUID of the memory block to free
- *
- * @return 0 on success, < 0 on error.
-*/
-int sceKernelFreeMemBlock(SceUID uid);
-
-/**
- * Gets the base address of a memory block
- *
- * @param[in] uid - SceUID of the memory block to free
- * @param[out] base - Base address of the memory block identified by SceUID
- *
- * @return 0 on success, < 0 on error.
-*/
-int sceKernelGetMemBlockBase(SceUID uid, void **base);
-
-SceUID sceKernelFindMemBlockByAddr(const void *addr, SceSize size);
-
-int sceKernelGetMemBlockInfoByAddr(void *base, SceKernelMemBlockInfo *info);
-int sceKernelGetMemBlockInfoByRange(void *base, SceSize size, SceKernelMemBlockInfo *info);
-
SceUID sceKernelAllocMemBlockForVM(const char *name, SceSize size);
int sceKernelSyncVMDomain(SceUID uid, void *data, SceSize size);
int sceKernelOpenVMDomain(void);
@@ -115,7 +40,7 @@ int sceKernelGetModelForCDialog(void);
* @return A value from SCE_KERNEL_MODEL
*/
int sceKernelGetModel(void);
-
+
/**
* Get free memory size in bytes
*
diff --git a/include/user/kernel/sysmem/memblock.h b/include/user/kernel/sysmem/memblock.h
new file mode 100644
index 0000000..4d720cb
--- /dev/null
+++ b/include/user/kernel/sysmem/memblock.h
@@ -0,0 +1,263 @@
+#ifndef _DOLCESDK_PSP2_KERNEL_SYSMEM_MEMBLOCK_H_
+#define _DOLCESDK_PSP2_KERNEL_SYSMEM_MEMBLOCK_H_
+
+#include <psp2/cdefs.h>
+#include <psp2/kernel/types.h>
+
+/** @name sceKernelAllocMemBlockで指定可能なメモリタイプ
+ */
+/*@{*/
+
+/**
+ * memory block type for read write cache allocated on LPDDR2
+ */
+#define SCE_KERNEL_MEMBLOCK_TYPE_USER_RW 0x0c20d060U
+
+#define SCE_KERNEL_MEMBLOCK_TYPE_USER_RWDATA SCE_KERNEL_MEMBLOCK_TYPE_USER_RW
+
+/**
+ * memory block type for read execute cache allocated on LPDDR2
+ */
+#define SCE_KERNEL_MEMBLOCK_TYPE_USER_RX 0x0c20d050U
+
+/**
+ * memory block type for read write uncache allocated on LPDDR2
+ */
+#define SCE_KERNEL_MEMBLOCK_TYPE_USER_NC_RW 0x0c208060U
+
+/**
+ * alias of SCE_KERNEL_MEMBLOCK_TYPE_USER_NC_RW
+ */
+#define SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE SCE_KERNEL_MEMBLOCK_TYPE_USER_NC_RW
+
+/**
+ * alias of SCE_KERNEL_MEMBLOCK_TYPE_USER_NC_RW
+ */
+#define SCE_KERNEL_MEMBLOCK_TYPE_USER_RWDATA_UNCACHE SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE
+
+/**
+ * memory block type for read write cache allocated on LPDDR2 physical continuous area
+ */
+#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_RW 0x0c80d060U
+
+/**
+ * memory block type for read write uncache allocated on LPDDR2 physical continuous area
+ */
+#define SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW 0x0d808060U
+
+/**
+ * memory block type for read write uncache allocated on CDRAM
+ */
+#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW 0x09408060U
+
+#define SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RWDATA SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW
+
+/*@}*/
+
+SCE_CDECL_BEGIN
+
+#if !defined(_LANGUAGE_ASSEMBLY)
+
+typedef struct SceKernelAllocMemBlockOpt0940 {
+ SceSize size;
+ SceUInt32 attr;
+ SceSize alignment;
+ SceUID uidBaseBlock;
+ const char *strBaseBlockName;
+} SceKernelAllocMemBlockOpt0940;
+
+/**
+ * Option parameter for sceKernelAllocMemBlock
+ */
+ typedef struct SceKernelAllocMemBlockOpt {
+ /**
+ * size of this
+ */
+ SceSize size;
+
+ /**
+ * attributes field
+ */
+ SceUInt32 attr;
+
+ /**
+ * alignment option
+ * must set SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ALIGNMENT to 'attr'
+ */
+ SceSize alignment;
+
+ /**
+ * reserved
+ */
+ SceUInt32 reserved;
+
+ /**
+ * reserved2
+ */
+ const char *strBaseBlockName;
+
+#if 0
+ /**
+ * mapped base address [out]
+ */
+ void *mappedBase;
+
+ /**
+ * mapped size [out]
+ */
+ SceSize mappedSize;
+
+ /**
+ * memory type [out]
+ */
+ SceKernelMemoryType memoryType;
+
+ SceUInt32 access;
+#endif
+} SceKernelAllocMemBlockOpt;
+
+/**
+ * Enable 'alignment' member
+ */
+#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_HAS_ALIGNMENT 0x00000004U
+
+#define SCE_KERNEL_ALLOC_MEMBLOCK_ATTR_PHYCONT 0x00200000U
+
+/**
+ * Allocating memory block
+ *
+ * @param[in] name memory block name
+ * @param[in] vsize memory block virtual size
+ * @param[in] flags options
+ * @retval id UID of memory block
+ * @retval <SCE_OK Error code
+ *
+ */
+SceUID sceKernelAllocMemBlock(
+ const char *name,
+ SceKernelMemBlockType type,
+ SceSize vsize,
+ const struct SceKernelAllocMemBlockOpt *pOpt);
+
+/**
+ * free memory block
+ * @param[in] uid block uid
+ */
+int sceKernelFreeMemBlock(SceUID uid);
+
+/**
+ * Get base address of memory block.
+ * @param[in] uid block id
+ * @param[out] ppBase base address of memory block
+ * @retval SCE_OK success
+ * @retval <SCE_OK Error
+ */
+#if !defined(__INTELLISENSE__)
+int sceKernelGetMemBlockBase(SceUID uid, void **ppBase)
+ __attribute__((__nonnull__(2)));
+#else /* !defined(__INTELLISENSE__) */
+int sceKernelGetMemBlockBase(SceUID uid, void **ppBase);
+#endif /* !defined(__INTELLISENSE__) */
+
+/**
+ * Find memory block by virtual range (base address and size)
+ * If size == 0, API returns a memory block which contains 'start'
+ * If size > 0, API returns a memory block just fit range [start, start + size].
+ * @param[in] vaddr base address
+ * @param[in] size address size
+ * @retval >=SCE_OK block id
+ * @retval <SCE_OK error
+ */
+SceUID sceKernelFindMemBlockByAddr(
+ void *uaddr,
+ SceSize size);
+
+/**
+ * type for memory block type used in sceKernelAllocMemBlock
+ */
+typedef int SceKernelMemoryType;
+
+/**
+ * information structure for memory block
+ */
+typedef struct SceKernelMemBlockInfo {
+ SceSize size; /**< sizeof this */
+ void *mappedBase; /**< mapped base address */
+ SceSize mappedSize; /**< mapped size */
+
+ SceKernelMemoryType memoryType; /**< memory type like cache, uncache */
+
+ SceUInt32 access; /**< memory access permission */
+ SceKernelMemBlockType type; /**< Memory Block type */
+
+} SceKernelMemBlockInfo;
+
+/*----- memory access permission -----*/
+
+/**
+ * readable memory
+ */
+#define SCE_KERNEL_MEMORY_ACCESS_R 0x04U
+
+/**
+ * writable memory
+ */
+#define SCE_KERNEL_MEMORY_ACCESS_W 0x02U
+
+/**
+ * executable memory
+ */
+#define SCE_KERNEL_MEMORY_ACCESS_X 0x01U
+
+/*----- memory type -----*/
+
+/**
+ * uncache normal memory
+ */
+#define SCE_KERNEL_MEMORY_TYPE_NORMAL_NC 0x80
+
+/**
+ * cache normal memory
+ */
+#define SCE_KERNEL_MEMORY_TYPE_NORMAL 0xD0
+
+/**
+ * Get memory block information by giving virtual address
+ * @param[in] vbase base address
+ * @param[inout] pInfo pointer to information structure
+ */
+#if !defined(__INTELLISENSE__)
+int sceKernelGetMemBlockInfoByAddr(
+ void *vbase,
+ SceKernelMemBlockInfo *pInfo)
+ __attribute__((__nonnull__(1,2), __warn_unused_result__));
+#else /* !defined(__INTELLISENSE__) */
+int sceKernelGetMemBlockInfoByAddr(
+ void *vbase,
+ SceKernelMemBlockInfo *pInfo);
+#endif /* !defined(__INTELLISENSE__) */
+
+/**
+ * Get memory block informaton by virtuak address range
+ * @param[in] vbase base address
+ * @param[in] vsize size
+ * @param[inout] pInfo information structure
+ */
+#if !defined(__INTELLISENSE__)
+int sceKernelGetMemBlockInfoByRange(
+ void *vbase,
+ SceSize vsize,
+ SceKernelMemBlockInfo *pInfo)
+ __attribute__((__nonnull__(1,3), __warn_unused_result__));
+#else /* !defined(__INTELLISENSE__) */
+int sceKernelGetMemBlockInfoByRange(
+ void *vbase,
+ SceSize vsize,
+ SceKernelMemBlockInfo *pInfo);
+#endif /* !defined(__INTELLISENSE__) */
+
+#endif /* !defined(_LANGUAGE_ASSEMBLY) */
+
+SCE_CDECL_END
+
+#endif /* _DOLCESDK_PSP2_KERNEL_SYSMEM_MEMBLOCK_H_ */