GSP Services

From 3dbrew
Jump to: navigation, search

GSP service "gsp::Gpu"[edit]

Command Header Available since system version GSP rights required Description
0x00010082 WriteHWRegs
0x00020084 WriteHWRegsWithMask
0x00030082 WriteHWRegRepeat
0x00040080 ReadHWRegs
0x00050200 SetBufferSwap
0x00060082 SetCommandList (Stubbed)
0x000700C2 RequestDma (Stubbed)
0x00080082 No FlushDataCache
0x00090082 No InvalidateDataCache
0x000A0044 RegisterInterruptEvents
0x000B0040 SetLcdForceBlack
0x000C0000 TriggerCmdReqQueue
0x000D0140 SetDisplayTransfer (Stubbed)
0x000E0180 SetTextureCopy (Stubbed)
0x000F0200 SetMemoryFill (Stubbed)
0x00100040 SetAxiConfigQoSMode
0x00110040 SetPerfLogMode
0x00120000 GetPerfLog
0x00130042 RegisterInterruptRelayQueue
0x00140000 UnregisterInterruptRelayQueue
0x00150002 TryAcquireRight
0x00160042 AcquireRight
0x00170000 ReleaseRight
0x00180000 ImportDisplayCaptureInfo
0x00190000 SaveVramSysArea
0x001A0000 RestoreVramSysArea
0x001B0000 ResetGpuCore
0x001C0040 SetLedForceOff
0x001D0040 SetTestCommand (Stubbed)
0x001E0080 SetInternalPriorities
0x001F0082 8.0.0-18 StoreDataCache

The GSP module starts a thread for handling commands for each service session, a maximum of 4 processes can use this service at once. Official applications have an optional code-path which writes to registers during initialization, this is normally not used however.

GSP service "gsp::Lcd"[edit]

Command Header Available since system version Description
0x00010040  ?
0x00020040  ?
0x00030080  ?
0x000400C0  ?
0x00050140  ?
0x00060140  ?
0x00070080  ?
0x000800C0  ?
0x00090140  ?
0x000A0080 SetBrightnessRaw
0x000B0080 SetBrightness
0x000C0040  ?
0x000D0040  ?
0x000E0000  ?
0x000F0000 PowerOnAllBacklights
0x00100000 PowerOffAllBacklights
0x00110040 PowerOnBacklight
0x00120040 PowerOffBacklight
0x00130040 SetLedForceOff
0x00140000 8.0.0-18 GetVendor New3DS-only, stubbed on Old3DS: This only returns an error. Uninitialized data(not set by this command itself) is also written to u8 cmdreply_word[2].
0x00150040 8.0.0-18 GetBrightness New3DS-only, stubbed on Old3DS: This only returns an error. Uninitialized data(not set by this command itself) is also written to u32 cmdreply_word[2].

Unlike gsp::Gpu, GSP module does not start a separate thread for handling these service commands.

Version history[edit]

Version Changes
v8196 Support for the new LINEAR memory region was implemented(for cache commands and vaddr->physaddr conversion). Support for the new process-mem 0x1E800000 region(however the GPU can't actually access this memory) was added for vaddr->physaddr conversion. Originally GSP module ignored vaddr->physaddr conversion errors(like with vaddrs outside of the handled ranges) and just wrote physaddr value0 to the GPU registers, however now GSP module returns an error for that instead(see here regarding errors being written to GSP shared-mem). New services commands were added too, see above.


There's separate GSP-module titles for Old3DS and New3DS. PTM CheckNew3DS is only used by the New3DS title, for copying that flag into a state field. Elsewhere that field is checked for running additional code only on New3DS, for processing various state / using QTM commands.