Added (Partial) sceKernelBatchMap/sceKernelBatchMap2
This commit is contained in:
parent
1ef85bd51d
commit
cb9216d73f
|
@ -405,6 +405,9 @@ void LibKernel_Register(Core::Loader::SymbolsResolver* sym) {
|
||||||
LIB_FUNCTION("VOx8NGmHXTs", "libkernel", 1, "libkernel", 1, 1, sceKernelGetCpumode);
|
LIB_FUNCTION("VOx8NGmHXTs", "libkernel", 1, "libkernel", 1, 1, sceKernelGetCpumode);
|
||||||
LIB_FUNCTION("Xjoosiw+XPI", "libkernel", 1, "libkernel", 1, 1, sceKernelUuidCreate);
|
LIB_FUNCTION("Xjoosiw+XPI", "libkernel", 1, "libkernel", 1, 1, sceKernelUuidCreate);
|
||||||
|
|
||||||
|
LIB_FUNCTION("2SKEx6bSq-4", "libkernel", 1, "libkernel", 1, 1, sceKernelBatchMap);
|
||||||
|
LIB_FUNCTION("kBJzF8x4SyE", "libkernel", 1, "libkernel", 1, 1, sceKernelBatchMap2);
|
||||||
|
|
||||||
// equeue
|
// equeue
|
||||||
LIB_FUNCTION("D0OdFMjp46I", "libkernel", 1, "libkernel", 1, 1, sceKernelCreateEqueue);
|
LIB_FUNCTION("D0OdFMjp46I", "libkernel", 1, "libkernel", 1, 1, sceKernelCreateEqueue);
|
||||||
LIB_FUNCTION("jpFjmgAC5AE", "libkernel", 1, "libkernel", 1, 1, sceKernelDeleteEqueue);
|
LIB_FUNCTION("jpFjmgAC5AE", "libkernel", 1, "libkernel", 1, 1, sceKernelDeleteEqueue);
|
||||||
|
|
|
@ -225,4 +225,42 @@ int PS4_SYSV_ABI sceKernelGetDirectMemoryType(u64 addr, int* directMemoryTypeOut
|
||||||
directMemoryEndOut);
|
directMemoryEndOut);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s32 PS4_SYSV_ABI sceKernelBatchMap(OrbisKernelBatchMapEntry* entries, int numEntries,
|
||||||
|
int* numEntriesOut) {
|
||||||
|
return sceKernelBatchMap2(entries, numEntries, numEntriesOut, 0x10); // 0x10 : Fixed / 0x410
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 PS4_SYSV_ABI sceKernelBatchMap2(OrbisKernelBatchMapEntry* entries, int numEntries,
|
||||||
|
int* numEntriesOut, int flags) {
|
||||||
|
int processed = 0;
|
||||||
|
int result = 0;
|
||||||
|
for (int i = 0; i < numEntries; i++) {
|
||||||
|
if (entries == nullptr || entries[i].length == 0 || entries[i].operation > 4) {
|
||||||
|
result = ORBIS_KERNEL_ERROR_EINVAL;
|
||||||
|
break; // break and assign a value to numEntriesOut.
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entries[i].operation == 0) { // MAP_DIRECT
|
||||||
|
result = sceKernelMapNamedDirectMemory(&entries[i].start, entries[i].length,
|
||||||
|
entries[i].protection, flags,
|
||||||
|
static_cast<s64>(entries[i].offset), 0, "");
|
||||||
|
LOG_INFO(
|
||||||
|
Kernel_Vmm,
|
||||||
|
"BatchMap: entry = {}, operation = {}, len = {:#x}, offset = {:#x}, type = {}, "
|
||||||
|
"result = {}",
|
||||||
|
i, entries[i].operation, entries[i].length, entries[i].offset, (u8)entries[i].type,
|
||||||
|
result);
|
||||||
|
|
||||||
|
if (result == 0)
|
||||||
|
processed++;
|
||||||
|
} else {
|
||||||
|
LOG_ERROR(Kernel_Vmm, "called: Unimplemented Operation = {}", entries[i].operation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (numEntriesOut != NULL) { // can be zero. do not return an error code.
|
||||||
|
*numEntriesOut = processed;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Libraries::Kernel
|
} // namespace Libraries::Kernel
|
||||||
|
|
|
@ -53,6 +53,16 @@ struct OrbisVirtualQueryInfo {
|
||||||
std::array<char, 32> name;
|
std::array<char, 32> name;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct OrbisKernelBatchMapEntry {
|
||||||
|
void* start;
|
||||||
|
off_t offset;
|
||||||
|
size_t length;
|
||||||
|
char protection;
|
||||||
|
char type;
|
||||||
|
short reserved;
|
||||||
|
int operation;
|
||||||
|
};
|
||||||
|
|
||||||
u64 PS4_SYSV_ABI sceKernelGetDirectMemorySize();
|
u64 PS4_SYSV_ABI sceKernelGetDirectMemorySize();
|
||||||
int PS4_SYSV_ABI sceKernelAllocateDirectMemory(s64 searchStart, s64 searchEnd, u64 len,
|
int PS4_SYSV_ABI sceKernelAllocateDirectMemory(s64 searchStart, s64 searchEnd, u64 len,
|
||||||
u64 alignment, int memoryType, s64* physAddrOut);
|
u64 alignment, int memoryType, s64* physAddrOut);
|
||||||
|
@ -85,4 +95,9 @@ int PS4_SYSV_ABI sceKernelGetDirectMemoryType(u64 addr, int* directMemoryTypeOut
|
||||||
void** directMemoryStartOut,
|
void** directMemoryStartOut,
|
||||||
void** directMemoryEndOut);
|
void** directMemoryEndOut);
|
||||||
|
|
||||||
|
s32 PS4_SYSV_ABI sceKernelBatchMap(OrbisKernelBatchMapEntry* entries, int numEntries,
|
||||||
|
int* numEntriesOut);
|
||||||
|
s32 PS4_SYSV_ABI sceKernelBatchMap2(OrbisKernelBatchMapEntry* entries, int numEntries,
|
||||||
|
int* numEntriesOut, int flags);
|
||||||
|
|
||||||
} // namespace Libraries::Kernel
|
} // namespace Libraries::Kernel
|
||||||
|
|
Loading…
Reference in New Issue