mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-06-03 12:27:21 +12:00
Started work on services
This commit is contained in:
parent
3259c5c7a6
commit
208c18356b
9 changed files with 169 additions and 18 deletions
|
@ -6,6 +6,7 @@
|
|||
#include "kernel_types.hpp"
|
||||
#include "helpers.hpp"
|
||||
#include "memory.hpp"
|
||||
#include "services/service_manager.hpp"
|
||||
|
||||
class Kernel {
|
||||
std::array<u32, 16>& regs;
|
||||
|
@ -17,6 +18,7 @@ class Kernel {
|
|||
std::vector<Handle> portHandles;
|
||||
|
||||
u32 currentProcess;
|
||||
ServiceManager serviceManager;
|
||||
|
||||
// Get pointer to the object with the specified handle
|
||||
KernelObject* getObject(u32 handle) {
|
||||
|
@ -49,12 +51,14 @@ class Kernel {
|
|||
|
||||
Handle makeProcess();
|
||||
Handle makePort(const char* name);
|
||||
Handle makeSession(Handle port);
|
||||
std::optional<Handle> getPortHandle(const char* name);
|
||||
void deleteObjectData(KernelObject& object);
|
||||
|
||||
KernelObject* getProcessFromPID(Handle handle);
|
||||
s32 getCurrentResourceValue(const KernelObject* limit, u32 resourceName);
|
||||
u32 getMaxForResource(const KernelObject* limit, u32 resourceName);
|
||||
u32 getTLSPointer();
|
||||
std::string getProcessName(u32 pid);
|
||||
|
||||
// SVC implementations
|
||||
|
@ -68,7 +72,7 @@ class Kernel {
|
|||
void connectToPort();
|
||||
|
||||
public:
|
||||
Kernel(std::array<u32, 16>& regs, Memory& mem) : regs(regs), mem(mem), handleCounter(0) {
|
||||
Kernel(std::array<u32, 16>& regs, Memory& mem) : regs(regs), mem(mem), handleCounter(0), serviceManager(regs, mem) {
|
||||
objects.reserve(512); // Make room for a few objects to avoid further memory allocs later
|
||||
portHandles.reserve(32);
|
||||
}
|
||||
|
|
|
@ -57,15 +57,21 @@ struct ProcessData {
|
|||
ResourceLimits limits;
|
||||
};
|
||||
|
||||
enum class PortType {
|
||||
Generic,
|
||||
ServiceManager // For the service manager port "srv:"
|
||||
};
|
||||
|
||||
struct PortData {
|
||||
static constexpr u32 maxNameLen = 11;
|
||||
|
||||
char name[maxNameLen + 1] = {};
|
||||
bool isPublic = false; // Setting name=NULL creates a private port not accessible from svcConnectToPort.
|
||||
PortType type = PortType::Generic;
|
||||
};
|
||||
|
||||
struct SessionData {
|
||||
|
||||
Handle portHandle; // The port this session is subscribed to
|
||||
};
|
||||
|
||||
static const char* kernelObjectTypeToString(KernelObjectType t) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue