libretro: allow unlimited cheat length
[pcsx_rearmed.git] / frontend / wiiu / coreinit / memorymap.h
CommitLineData
323bb280
AL
1//SPDX-License-Identifier: GPL-2.0-or-later
2/* From wut:
3 * https://github.com/devkitPro/wut/blob/0b196e8abcedeb0238105f3ffab7cb0093638b86/include/coreinit/memorymap.h
4 */
5
6#pragma once
7#include <stdint.h>
8#include <stdbool.h>
9typedef bool BOOL;
10
11/**
12 * \defgroup coreinit_memorymap Memory Map
13 * \ingroup coreinit
14 *
15 * @{
16 */
17
18#ifdef __cplusplus
19extern "C" {
20#endif
21
22typedef enum OSMemoryMapMode
23{
24 OS_MAP_MEMORY_INVALID = 0,
25 OS_MAP_MEMORY_READ_ONLY = 1,
26 OS_MAP_MEMORY_READ_WRITE = 2,
27 OS_MAP_MEMORY_FREE = 3,
28 OS_MAP_MEMORY_ALLOCATED = 4,
29} OSMemoryMapMode;
30
31#define OS_PAGE_SIZE (128 * 1024)
32
33uint32_t
34OSEffectiveToPhysical(uint32_t virtualAddress);
35
36BOOL
37OSIsAddressValid(uint32_t virtualAddress);
38
39BOOL
40__OSValidateAddressSpaceRange(int /* unused */,
41 uint32_t virtualAddress,
42 uint32_t size);
43
44/**
45 * Allocates virtual address range for later mapping.
46 *
47 * \param virtualAddress
48 * Requested start address for the range. If there is no preference, NULL can be
49 * used.
50 *
51 * \param size
52 * Size of address range to allocate.
53 *
54 * \param align
55 * Alignment of address range to allocate.
56 *
57 * \return
58 * The starting address of the newly allocated range, or NULL on failure.
59 *
60 * \sa
61 * - OSFreeVirtAddr()
62 * - OSMapMemory()
63 */
64uint32_t
65OSAllocVirtAddr(uint32_t virtualAddress,
66 uint32_t size,
67 uint32_t align);
68
69/**
70 * Frees a previously allocated virtual address range back to the system.
71 *
72 * \param virtualAddress
73 * The start of the virtual address range to free.
74 *
75 * \param size
76 * The size of the virtual address range to free.
77 *
78 * \return
79 * \c true on success.
80 */
81BOOL
82OSFreeVirtAddr(uint32_t virtualAddress,
83 uint32_t size);
84
85/**
86 * Determines the status of the given virtual memory address - mapped read-write
87 * or read-only, free, allocated or invalid.
88 *
89 * \param virtualAddress
90 * The virtual address to query.
91 *
92 * \return
93 * The status of the memory address - see #OSMemoryMapMode.
94 */
95OSMemoryMapMode
96OSQueryVirtAddr(uint32_t virtualAddress);
97
98/**
99 * Maps a physical address to a virtual address, with a given size and set of
100 * permissions.
101 *
102 * \param virtualAddress
103 * The target virtual address for the mapping.
104 *
105 * \param physicalAddress
106 * Physical address of the memory to back the mapping.
107 *
108 * \param size
109 * Size, in bytes, of the desired mapping. Likely has an alignment requirement.
110 *
111 * \param mode
112 * Permissions to map the memory with - see #OSMemoryMapMode.
113 *
114 * \return
115 * \c true on success.
116 *
117 * \sa
118 * - OSAllocVirtAddr()
119 * - OSUnmapMemory()
120 */
121BOOL
122OSMapMemory(uint32_t virtualAddress,
123 uint32_t physicalAddress,
124 uint32_t size,
125 OSMemoryMapMode mode);
126
127/**
128 * Unmaps previously mapped memory.
129 *
130 * \param virtualAddress
131 * Starting address of the area to unmap.
132 *
133 * \param size
134 * Size of the memory area to unmap.
135 *
136 * \return
137 * \c true on success.
138 */
139BOOL
140OSUnmapMemory(uint32_t virtualAddress,
141 uint32_t size);
142
143/**
144 * Gets the range of virtual addresses available for mapping.
145 *
146 * \param outVirtualAddress
147 * Pointer to write the starting address of the memory area to.
148 *
149 * \param outSize
150 * Pointer to write the size of the memory area to.
151 *
152 * \sa
153 * - OSMapMemory()
154 */
155void
156OSGetMapVirtAddrRange(uint32_t *outVirtualAddress,
157 uint32_t *outSize);
158
159/**
160 * Gets the range of available physical memory (not reserved for app code or
161 * data).
162 *
163 * \param outPhysicalAddress
164 * Pointer to write the starting physical address of the memory area to.
165 *
166 * \param outSize
167 * Pointer to write the size of the memory area to.
168 *
169 * \if false
170 * Is memory returned by this function actually safe to map and use? couldn't
171 * get a straight answer from decaf-emu's kernel_memory.cpp...
172 * \endif
173 */
174void
175OSGetAvailPhysAddrRange(uint32_t *outPhysicalAddress,
176 uint32_t *outSize);
177
178/**
179 * Gets the range of physical memory used for the application's data.
180 *
181 * \param outPhysicalAddress
182 * Pointer to write the starting physical address of the memory area to.
183 *
184 * \param outSize
185 * Pointer to write the size of the memory area to.
186 *
187 * \if false
188 * does this include the main heap?
189 * \endif
190 */
191void
192OSGetDataPhysAddrRange(uint32_t *outPhysicalAddress,
193 uint32_t *outSize);
194
195#ifdef __cplusplus
196}
197#endif
198
199/** @} */