diff --git a/rpcsx-os/CMakeLists.txt b/rpcsx-os/CMakeLists.txt index 194607d65..ed732150f 100644 --- a/rpcsx-os/CMakeLists.txt +++ b/rpcsx-os/CMakeLists.txt @@ -31,6 +31,11 @@ add_executable(rpcsx-os iodev/urandom.cpp iodev/xpt.cpp iodev/zero.cpp + iodev/aout.cpp + iodev/av_control.cpp + iodev/hdmi.cpp + iodev/mbus_av.cpp + iodev/scanin.cpp main.cpp backtrace.cpp diff --git a/rpcsx-os/io-devices.hpp b/rpcsx-os/io-devices.hpp index a55b6beb7..3bba5e821 100644 --- a/rpcsx-os/io-devices.hpp +++ b/rpcsx-os/io-devices.hpp @@ -30,3 +30,8 @@ IoDevice *createXptCharacterDevice(); IoDevice *createCdCharacterDevice(); IoDevice *createMetaDbgCharacterDevice(); IoDevice *createHddCharacterDevice(); +IoDevice *createAoutCharacterDevice(); +IoDevice *createAVControlCharacterDevice(); +IoDevice *createHDMICharacterDevice(); +IoDevice *createMBusAVCharacterDevice(); +IoDevice *createScaninCharacterDevice(); diff --git a/rpcsx-os/iodev/aout.cpp b/rpcsx-os/iodev/aout.cpp new file mode 100644 index 000000000..9613be818 --- /dev/null +++ b/rpcsx-os/iodev/aout.cpp @@ -0,0 +1,32 @@ +#include "io-device.hpp" +#include "orbis/KernelAllocator.hpp" +#include "orbis/file.hpp" +#include "orbis/utils/Logs.hpp" + +struct AoutFile : orbis::File {}; + +static orbis::ErrorCode aout_ioctl(orbis::File *file, std::uint64_t request, + void *argp, orbis::Thread *thread) { + + ORBIS_LOG_FATAL("Unhandled aout ioctl", request); + return {}; +} + +static const orbis::FileOps fileOps = { + .ioctl = aout_ioctl, +}; + +struct AoutDevice : IoDevice { + orbis::ErrorCode open(orbis::Ref *file, const char *path, + std::uint32_t flags, std::uint32_t mode, + orbis::Thread *thread) override { + auto newFile = orbis::knew(); + newFile->ops = &fileOps; + newFile->device = this; + + *file = newFile; + return {}; + } +}; + +IoDevice *createAoutCharacterDevice() { return orbis::knew(); } diff --git a/rpcsx-os/iodev/av_control.cpp b/rpcsx-os/iodev/av_control.cpp new file mode 100644 index 000000000..328317a21 --- /dev/null +++ b/rpcsx-os/iodev/av_control.cpp @@ -0,0 +1,32 @@ +#include "io-device.hpp" +#include "orbis/KernelAllocator.hpp" +#include "orbis/file.hpp" +#include "orbis/utils/Logs.hpp" + +struct AVControlFile : orbis::File {}; + +static orbis::ErrorCode av_control_ioctl(orbis::File *file, std::uint64_t request, + void *argp, orbis::Thread *thread) { + + ORBIS_LOG_FATAL("Unhandled av_control ioctl", request); + return {}; +} + +static const orbis::FileOps fileOps = { + .ioctl = av_control_ioctl, +}; + +struct AVControlDevice : IoDevice { + orbis::ErrorCode open(orbis::Ref *file, const char *path, + std::uint32_t flags, std::uint32_t mode, + orbis::Thread *thread) override { + auto newFile = orbis::knew(); + newFile->ops = &fileOps; + newFile->device = this; + + *file = newFile; + return {}; + } +}; + +IoDevice *createAVControlCharacterDevice() { return orbis::knew(); } diff --git a/rpcsx-os/iodev/hdmi.cpp b/rpcsx-os/iodev/hdmi.cpp new file mode 100644 index 000000000..b892a75ea --- /dev/null +++ b/rpcsx-os/iodev/hdmi.cpp @@ -0,0 +1,32 @@ +#include "io-device.hpp" +#include "orbis/KernelAllocator.hpp" +#include "orbis/file.hpp" +#include "orbis/utils/Logs.hpp" + +struct HDMIFile : orbis::File {}; + +static orbis::ErrorCode hdmi_ioctl(orbis::File *file, std::uint64_t request, + void *argp, orbis::Thread *thread) { + + ORBIS_LOG_FATAL("Unhandled hdmi ioctl", request); + return {}; +} + +static const orbis::FileOps fileOps = { + .ioctl = hdmi_ioctl, +}; + +struct HDMIDevice : IoDevice { + orbis::ErrorCode open(orbis::Ref *file, const char *path, + std::uint32_t flags, std::uint32_t mode, + orbis::Thread *thread) override { + auto newFile = orbis::knew(); + newFile->ops = &fileOps; + newFile->device = this; + + *file = newFile; + return {}; + } +}; + +IoDevice *createHDMICharacterDevice() { return orbis::knew(); } diff --git a/rpcsx-os/iodev/mbus_av.cpp b/rpcsx-os/iodev/mbus_av.cpp new file mode 100644 index 000000000..3d5646417 --- /dev/null +++ b/rpcsx-os/iodev/mbus_av.cpp @@ -0,0 +1,32 @@ +#include "io-device.hpp" +#include "orbis/KernelAllocator.hpp" +#include "orbis/file.hpp" +#include "orbis/utils/Logs.hpp" + +struct MBusAVFile : orbis::File {}; + +static orbis::ErrorCode mbus_av_ioctl(orbis::File *file, std::uint64_t request, + void *argp, orbis::Thread *thread) { + + ORBIS_LOG_FATAL("Unhandled mbus_av ioctl", request); + return {}; +} + +static const orbis::FileOps fileOps = { + .ioctl = mbus_av_ioctl, +}; + +struct MBusAVDevice : IoDevice { + orbis::ErrorCode open(orbis::Ref *file, const char *path, + std::uint32_t flags, std::uint32_t mode, + orbis::Thread *thread) override { + auto newFile = orbis::knew(); + newFile->ops = &fileOps; + newFile->device = this; + + *file = newFile; + return {}; + } +}; + +IoDevice *createMBusAVCharacterDevice() { return orbis::knew(); } diff --git a/rpcsx-os/iodev/scanin.cpp b/rpcsx-os/iodev/scanin.cpp new file mode 100644 index 000000000..a5c1e20da --- /dev/null +++ b/rpcsx-os/iodev/scanin.cpp @@ -0,0 +1,32 @@ +#include "io-device.hpp" +#include "orbis/KernelAllocator.hpp" +#include "orbis/file.hpp" +#include "orbis/utils/Logs.hpp" + +struct ScaninFile : orbis::File {}; + +static orbis::ErrorCode scanin_ioctl(orbis::File *file, std::uint64_t request, + void *argp, orbis::Thread *thread) { + + ORBIS_LOG_FATAL("Unhandled scanin ioctl", request); + return {}; +} + +static const orbis::FileOps fileOps = { + .ioctl = scanin_ioctl, +}; + +struct ScaninDevice : IoDevice { + orbis::ErrorCode open(orbis::Ref *file, const char *path, + std::uint32_t flags, std::uint32_t mode, + orbis::Thread *thread) override { + auto newFile = orbis::knew(); + newFile->ops = &fileOps; + newFile->device = this; + + *file = newFile; + return {}; + } +}; + +IoDevice *createScaninCharacterDevice() { return orbis::knew(); } diff --git a/rpcsx-os/main.cpp b/rpcsx-os/main.cpp index f09cf9b99..f08b61075 100644 --- a/rpcsx-os/main.cpp +++ b/rpcsx-os/main.cpp @@ -373,6 +373,11 @@ static void ps4InitDev() { rx::vfs::addDevice("notification3", createNotificationCharacterDevice(3)); rx::vfs::addDevice("notification4", createNotificationCharacterDevice(4)); rx::vfs::addDevice("notification5", createNotificationCharacterDevice(5)); + rx::vfs::addDevice("aout0", createAoutCharacterDevice()); + rx::vfs::addDevice("av_control", createAVControlCharacterDevice()); + rx::vfs::addDevice("hdmi", createHDMICharacterDevice()); + rx::vfs::addDevice("mbus_av", createMBusAVCharacterDevice()); + rx::vfs::addDevice("scanin", createScaninCharacterDevice()); orbis::g_context.shmDevice = createShmDevice(); orbis::g_context.blockpoolDevice = createBlockPoolDevice(); diff --git a/rpcsx-os/orbis-kernel-config/orbis-config.hpp b/rpcsx-os/orbis-kernel-config/orbis-config.hpp index fa52bf945..9f44e951b 100644 --- a/rpcsx-os/orbis-kernel-config/orbis-config.hpp +++ b/rpcsx-os/orbis-kernel-config/orbis-config.hpp @@ -73,7 +73,7 @@ uwriteRaw(ptr userAddress, const void *kernelAddress, size_t size) { return {}; } -template [[nodiscard]] ErrorCode uread(T &result, ptr pointer) { +template [[nodiscard]] ErrorCode uread(T &result, ptr pointer) { return ureadRaw(&result, pointer, sizeof(T)); } @@ -90,7 +90,7 @@ template } template -[[nodiscard]] ErrorCode uread(T *result, ptr pointer, std::size_t count) { +[[nodiscard]] ErrorCode uread(T *result, ptr pointer, std::size_t count) { return ureadRaw(&result, pointer, sizeof(T) * count); }