Line 1:
Line 1:
−
[[Category:Services]]
+
__TOC__
+
{{Anchor|GSPGPU}}{{Anchor|gsp::Gpu}}
= GSP service "gsp::Gpu" =
= GSP service "gsp::Gpu" =
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Command Header
! Command Header
+
! Available since system version
+
! GSP rights required
! Description
! Description
|-
|-
| 0x00010082
| 0x00010082
+
|
+
| Yes
| [[GSPGPU:WriteHWRegs|WriteHWRegs]]
| [[GSPGPU:WriteHWRegs|WriteHWRegs]]
|-
|-
| 0x00020084
| 0x00020084
+
|
+
| Yes
| [[GSPGPU:WriteHWRegsWithMask|WriteHWRegsWithMask]]
| [[GSPGPU:WriteHWRegsWithMask|WriteHWRegsWithMask]]
|-
|-
| 0x00030082
| 0x00030082
+
|
+
| Yes
| [[GSPGPU:WriteHWRegRepeat|WriteHWRegRepeat]]
| [[GSPGPU:WriteHWRegRepeat|WriteHWRegRepeat]]
|-
|-
| 0x00040080
| 0x00040080
+
|
+
| Yes
| [[GSPGPU:ReadHWRegs|ReadHWRegs]]
| [[GSPGPU:ReadHWRegs|ReadHWRegs]]
|-
|-
| 0x00050200
| 0x00050200
+
|
+
| Yes
| [[GSPGPU:SetBufferSwap|SetBufferSwap]]
| [[GSPGPU:SetBufferSwap|SetBufferSwap]]
|-
|-
| 0x00060082
| 0x00060082
+
|
+
| No
| SetCommandList (Stubbed)
| SetCommandList (Stubbed)
|-
|-
| 0x000700C2
| 0x000700C2
+
|
+
| No
| RequestDma (Stubbed)
| RequestDma (Stubbed)
|-
|-
| 0x00080082
| 0x00080082
+
|
+
| No
| [[GSPGPU:FlushDataCache|FlushDataCache]]
| [[GSPGPU:FlushDataCache|FlushDataCache]]
|-
|-
| 0x00090082
| 0x00090082
+
|
+
| No
| [[GSPGPU:InvalidateDataCache|InvalidateDataCache]]
| [[GSPGPU:InvalidateDataCache|InvalidateDataCache]]
|-
|-
| 0x000A0044
| 0x000A0044
−
| RegisterInterruptEvents
+
|
+
| No
+
| RegisterInterruptEvents (Stubbed)
|-
|-
| 0x000B0040
| 0x000B0040
+
|
+
| Usually not (see below)
| [[GSPGPU:SetLcdForceBlack|SetLcdForceBlack]]
| [[GSPGPU:SetLcdForceBlack|SetLcdForceBlack]]
|-
|-
| 0x000C0000
| 0x000C0000
+
|
+
| No
| [[GSPGPU:TriggerCmdReqQueue|TriggerCmdReqQueue]]
| [[GSPGPU:TriggerCmdReqQueue|TriggerCmdReqQueue]]
|-
|-
| 0x000D0140
| 0x000D0140
−
| SetDisplayTransfer (Stubbed)
+
|
+
| No
+
| [[GSPGPU:SetDisplayTransfer|SetDisplayTransfer]]
|-
|-
| 0x000E0180
| 0x000E0180
−
| SetTextureCopy (Stubbed)
+
|
+
| No
+
| [[GSPGPU:SetTextureCopy|SetTextureCopy]]
|-
|-
| 0x000F0200
| 0x000F0200
−
| SetMemoryFill (Stubbed)
+
|
+
| No
+
| [[GSPGPU:SetMemoryFill|SetMemoryFill]]
|-
|-
| 0x00100040
| 0x00100040
−
| SetAxiConfigQoSMode
+
|
+
| No
+
| [[GSPGPU:SetAxiConfigQoSMode|SetAxiConfigQoSMode]]
|-
|-
| 0x00110040
| 0x00110040
−
| SetPerfLogMode
+
|
+
| No
+
| [[GSPGPU:SetPerfLogMode|SetPerfLogMode]]
|-
|-
| 0x00120000
| 0x00120000
−
| GetPerfLog
+
|
+
| No
+
| [[GSPGPU:GetPerfLog|GetPerfLog]]
|-
|-
| 0x00130042
| 0x00130042
+
|
+
| No
| [[GSPGPU:RegisterInterruptRelayQueue|RegisterInterruptRelayQueue]]
| [[GSPGPU:RegisterInterruptRelayQueue|RegisterInterruptRelayQueue]]
|-
|-
| 0x00140000
| 0x00140000
−
| UnregisterInterruptRelayQueue
+
|
+
| No
+
| [[GSPGPU:UnregisterInterruptRelayQueue|UnregisterInterruptRelayQueue]]
|-
|-
| 0x00150002
| 0x00150002
−
| TryAcquireRight
+
|
+
| No
+
| [[GSPGPU:TryAcquireRight|TryAcquireRight]]
|-
|-
| 0x00160042
| 0x00160042
+
|
+
| No
| [[GSPGPU:AcquireRight|AcquireRight]]
| [[GSPGPU:AcquireRight|AcquireRight]]
|-
|-
| 0x00170000
| 0x00170000
−
| ReleaseRight
+
|
+
| No
+
| [[GSPGPU:ReleaseRight|ReleaseRight]]
|-
|-
| 0x00180000
| 0x00180000
+
|
+
| No
| [[GSPGPU:ImportDisplayCaptureInfo|ImportDisplayCaptureInfo]]
| [[GSPGPU:ImportDisplayCaptureInfo|ImportDisplayCaptureInfo]]
|-
|-
| 0x00190000
| 0x00190000
+
|
+
| See below
| [[GSPGPU:SaveVramSysArea|SaveVramSysArea]]
| [[GSPGPU:SaveVramSysArea|SaveVramSysArea]]
|-
|-
| 0x001A0000
| 0x001A0000
+
|
+
| See below
| [[GSPGPU:RestoreVramSysArea|RestoreVramSysArea]]
| [[GSPGPU:RestoreVramSysArea|RestoreVramSysArea]]
|-
|-
| 0x001B0000
| 0x001B0000
−
| ResetGpuCore
+
|
+
| Yes
+
| [[GSPGPU:ResetGpuCore|ResetGpuCore]]
|-
|-
| 0x001C0040
| 0x001C0040
+
|
+
| No
| [[GSPGPU:SetLedForceOff|SetLedForceOff]]
| [[GSPGPU:SetLedForceOff|SetLedForceOff]]
|-
|-
| 0x001D0040
| 0x001D0040
+
|
+
| No
| SetTestCommand (Stubbed)
| SetTestCommand (Stubbed)
|-
|-
| 0x001E0080
| 0x001E0080
−
| SetInternalPriorities
+
|
+
| No
+
| [[GSPGPU:SetInternalPriorities|SetInternalPriorities]]
+
|-
+
| 0x001F0082
+
| [[8.0.0-18]]
+
| No
+
| [[GSPGPU:StoreDataCache|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 [[GSPGPU:WriteHWRegs|writes]] to registers during initialization, this is normally not used however.
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 [[GSPGPU:WriteHWRegs|writes]] to registers during initialization, this is normally not used however.
+
If a process has forcefully acquired rights (ErrDisp), attempting [[GSPGPU:SetLcdForceBlack|unset LCDs black-fill]] from another process will fail.
+
Saving/restoring VRAM requires bit0 of process [[GSPGPU:RegisterInterruptRelayQueue|flags]] to be set.
+
+
{{Anchor|GSPLCD}}{{Anchor|gsp::Lcd}}
= GSP service "gsp::Lcd" =
= GSP service "gsp::Lcd" =
{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 106:
Line 178:
! Description
! Description
|-
|-
−
| 0x0001....
+
| 0x00010040
|
|
−
| ?
+
| [[GSPLCD:EnableABL|EnableABL]]
|-
|-
−
| 0x0002....
+
| 0x00020040
|
|
−
| ?
+
| [[GSPLCD:DisableABL|DisableABL]]
|-
|-
−
| 0x0003....
+
| 0x00030080
|
|
−
| ?
+
| [[GSPLCD:SetRSLut|SetRSLut]]
|-
|-
−
| 0x0004....
+
| 0x000400C0
|
|
−
| ?
+
| [[GSPLCD:SetRSParams|SetRSParams]]
|-
|-
−
| 0x0005....
+
| 0x00050140
|
|
−
| ?
+
| [[GSPLCD:SetABLArea|SetABLArea]]
|-
|-
−
| 0x0006....
+
| 0x00060140
|
|
| ?
| ?
|-
|-
−
| 0x0007....
+
| 0x00070080
|
|
−
| ?
+
| [[GSPLCD:SetInertia|SetInertia]]
|-
|-
−
| 0x0008....
+
| 0x000800C0
|
|
−
| ?
+
| [[GSPLCD:SetDitherMode|SetDitherMode]]
|-
|-
−
| 0x0009....
+
| 0x00090140
|
|
−
| ?
+
| [[GSPLCD:SetDitherParams|SetDitherParams]]
|-
|-
−
| 0x000A....
+
| 0x000A0080
|
|
−
| ?
+
| [[GSPLCD:SetBrightnessRaw|SetBrightnessRaw]]
|-
|-
−
| 0x000B....
+
| 0x000B0080
|
|
−
| ?
+
| [[GSPLCD:SetBrightness|SetBrightness]]
|-
|-
−
| 0x000C....
+
| 0x000C0040
|
|
−
| ?
+
| [[GSPLCD:ReloadConfig|ReloadConfig]]
|-
|-
−
| 0x000D....
+
| 0x000D0040
|
|
−
| ?
+
| [[GSPLCD:RestoreConfig|RestoreConfig]]
|-
|-
−
| 0x000E....
+
| 0x000E0000
|
|
−
| ?
+
| [[GSPLCD:GetPowerState|GetPowerState]]
|-
|-
−
| 0x000F....
+
| 0x000F0000
|
|
−
| ?
+
| [[GSPLCD:PowerOnAllBacklights|PowerOnAllBacklights]]
|-
|-
−
| 0x0010....
+
| 0x00100000
|
|
−
| ?
+
| [[GSPLCD:PowerOffAllBacklights|PowerOffAllBacklights]]
|-
|-
−
| 0x0011....
+
| 0x00110040
|
|
−
| ?
+
| [[GSPLCD:PowerOnBacklight|PowerOnBacklight]]
|-
|-
−
| 0x0012....
+
| 0x00120040
|
|
−
| ?
+
| [[GSPLCD:PowerOffBacklight|PowerOffBacklight]]
|-
|-
−
| 0x0013....
+
| 0x00130040
|
|
−
| ?
+
| [[GSPLCD:SetLedForceOff|SetLedForceOff]]
|-
|-
−
| 0x0014....
+
| 0x00140000
| [[8.0.0-18]]
| [[8.0.0-18]]
−
| This only returns an error. Uninitialized data(not set by this command itself) is also written to u8 cmdreply_word[2].
+
| [[GSPLCD:GetVendor|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].
|-
|-
−
| 0x0015....
+
| 0x00150040
| [[8.0.0-18]]
| [[8.0.0-18]]
−
| This only returns an error. Uninitialized data(not set by this command itself) is also written to u32 cmdreply_word[2].
+
| [[GSPLCD:GetBrightness|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.
Unlike gsp::Gpu, GSP module does not start a separate thread for handling these service commands.
+
+
= Version history =
+
{| class="wikitable" border="1"
+
|-
+
! Version
+
! Changes
+
|-
+
| [[8.0.0-18|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 [[GSP_Shared_Memory#Command_Buffer_Header|here]] regarding errors being written to GSP shared-mem). New services commands were added too, see above.
+
|}
+
+
=New3DS=
+
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_Services|QTM]] commands.
+
+
[[Category:Services]]