This repository was archived by the owner on Nov 27, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
This repository was archived by the owner on Nov 27, 2025. It is now read-only.
Tracking issue: Ports / Services #2
Copy link
Copy link
Open
Labels
contributor friendlyeasy to get into it / doesn't need a lot of knowledge about the internalseasy to get into it / doesn't need a lot of knowledge about the internals
Description
A service/port in the list is considered completed when it is fully implemented (i.e: all commands and wrapper methods are defined).
Example of how commands for a service/port are defined:
zitrus/src/horizon/services/GspGpu.zig
Lines 709 to 800 in 24448e3
| pub const command = struct { | |
| pub const WriteHwRegs = ipc.Command(Id, .write_hw_regs, struct { | |
| offset: usize, | |
| size: usize, | |
| data: ipc.StaticSlice(0), | |
| }, struct {}); | |
| pub const WriteHwRegsWithMask = ipc.Command(Id, .write_hw_regs_with_mask, struct { | |
| offset: usize, | |
| size: usize, | |
| data: ipc.StaticSlice(0), | |
| mask: ipc.StaticSlice(1), | |
| }, struct {}); | |
| pub const WriteHwRegRepeat = ipc.Command(Id, .write_hw_reg_repeat, struct { | |
| offset: usize, | |
| size: usize, | |
| data: ipc.StaticSlice(0), | |
| }, struct {}); | |
| pub const ReadHwRegs = ipc.Command(Id, .read_hw_regs, struct { | |
| pub const static_buffers = 1; | |
| offset: usize, | |
| size: usize, | |
| }, struct { | |
| output: ipc.StaticSlice(0), | |
| }); | |
| pub const SetBufferSwap = ipc.Command(Id, .set_buffer_swap, struct { screen: Screen, info: FramebufferInfo }, struct {}); | |
| // SetCommandList stubbed | |
| // RequestDma stubbed | |
| pub const FlushDataCache = ipc.Command(Id, .flush_data_cache, struct { address: usize, size: usize, process: horizon.Process }, struct {}); | |
| pub const InvalidateDataCache = ipc.Command(Id, .invalidate_data_cache, struct { address: usize, size: usize, process: horizon.Process }, struct {}); | |
| // RegisterInterruptEvents stubbed | |
| pub const SetLcdForceBlack = ipc.Command(Id, .set_lcd_force_black, struct { fill: bool }, struct {}); | |
| pub const TriggerCmdReqQueue = ipc.Command(Id, .trigger_cmd_req_queue, struct {}, struct {}); | |
| // SetDisplayTransfer stubbed | |
| // SetTextureCopy stubbed | |
| // SetMemoryFill stubbed | |
| pub const SetAxiConfigQosMode = ipc.Command(Id, .set_axi_config_qos_mode, struct { qos: u32 }, struct {}); | |
| pub const SetPerfLogMode = ipc.Command(Id, .set_perf_log_mode, struct { enabled: bool }, struct {}); | |
| pub const GetPerfLog = ipc.Command(Id, .get_perf_log, struct {}, struct { info: PerfLogInfo }); | |
| pub const RegisterInterruptRelayQueue = ipc.Command(Id, .register_interrupt_relay_queue, struct { | |
| flags: u32, | |
| ev: Event, | |
| }, struct { | |
| thread_index: u32, | |
| gsp_memory: MemoryBlock, | |
| }); | |
| pub const UnregisterInterruptRelayQueue = ipc.Command(Id, .unregister_interrupt_relay_queue, struct {}, struct {}); | |
| pub const TryAcquireRight = ipc.Command(Id, .try_acquire_right, struct { process: horizon.Process }, struct {}); | |
| pub const AcquireRight = ipc.Command(Id, .acquire_right, struct { init_hw: u32, process: horizon.Process }, struct {}); | |
| pub const ReleaseRight = ipc.Command(Id, .release_right, struct {}, struct {}); | |
| pub const ImportDisplayCaptureInfo = ipc.Command(Id, .import_display_capture_info, struct {}, struct { capture: ScreenCapture }); | |
| pub const SaveVRamSysArea = ipc.Command(Id, .save_vram_sys_area, struct {}, struct {}); | |
| pub const RestoreVRamSysArea = ipc.Command(Id, .restore_vram_sys_area, struct {}, struct {}); | |
| pub const ResetGpuCore = ipc.Command(Id, .reset_gpu_core, struct {}, struct {}); | |
| pub const SetLedForceOff = ipc.Command(Id, .set_led_force_off, struct { disable: bool }, struct {}); | |
| // SetTestCommand stubbed | |
| pub const SetInternalPriorities = ipc.Command(Id, .set_internal_priorities, struct { session_thread: u6, command_queue: u6 }, struct {}); | |
| pub const StoreDataCache = ipc.Command(Id, .store_data_cache, struct { address: usize, size: usize, process: horizon.Process }, struct {}); | |
| pub const Id = enum(u16) { | |
| write_hw_regs = 0x0001, | |
| write_hw_regs_with_mask, | |
| write_hw_reg_repeat, | |
| read_hw_regs, | |
| set_buffer_swap, | |
| set_command_list, | |
| request_dma, | |
| flush_data_cache, | |
| invalidate_data_cache, | |
| register_interrupt_events, | |
| set_lcd_force_black, | |
| trigger_cmd_req_queue, | |
| set_display_transfer, | |
| set_texture_copy, | |
| set_memory_fill, | |
| set_axi_config_qos_mode, | |
| set_perf_log_mode, | |
| get_perf_log, | |
| register_interrupt_relay_queue, | |
| unregister_interrupt_relay_queue, | |
| try_acquire_right, | |
| acquire_right, | |
| release_right, | |
| import_display_capture_info, | |
| save_vram_sys_area, | |
| restore_vram_sys_area, | |
| reset_gpu_core, | |
| set_led_force_off, | |
| set_test_command, | |
| set_internal_priorities, | |
| store_data_cache, | |
| }; | |
| }; |
list of all services and ports
Ports
Services (not exhaustive)
- GspGpu 'gsp::Gpu'
- GspLcd 'gsp::Lcd'
- Applet 'APT:S/A/U'
- Hid 'hid:SPRV/USER'
- IrRst 'ir:rst'
- Config 'cfg:i/s/u'
- Filesystem user/loader 'fs:USER/LDR'
- NUserShell 'ns:s'
- NUserShellPower 'ns:p'
- NUserShellContent 'ns:c'
- ChannelSound 'csnd:SND'
- ProcessManagerApp 'pm:app'
- ProcessManagerDebug 'pm:dbg'
- SocketUser 'soc:U'
- Process 'ps:ps'
- PxiProcess9 'pxi:ps9'
- Loader 'Loader'
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
contributor friendlyeasy to get into it / doesn't need a lot of knowledge about the internalseasy to get into it / doesn't need a lot of knowledge about the internals