summaryrefslogtreecommitdiff
path: root/include/user/kernel/sysmem/memblock.h
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/user/kernel/sysmem/memblock.h
parentSceIniFileProcessor: fixes for type and names (diff)
downloadvds-libraries-70004ae88d2bdb1feb56e5d2b4ba35c3b309dc92.tar.gz
Add memblock.h
Diffstat (limited to '')
-rw-r--r--include/user/kernel/sysmem/memblock.h263
1 files changed, 263 insertions, 0 deletions
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_ */