Changes

1,827 bytes added ,  21:59, 18 October 2023
m
no edit summary
Line 5: Line 5:  
!  Command Header
 
!  Command Header
 
!  Available since system version
 
!  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
 
|  
 
|  
 +
| See below
 
| [[GSPGPU:SetLcdForceBlack|SetLcdForceBlack]]
 
| [[GSPGPU:SetLcdForceBlack|SetLcdForceBlack]]
 
|-
 
|-
 
| 0x000C0000
 
| 0x000C0000
 
|  
 
|  
 +
| No
 
| [[GSPGPU:TriggerCmdReqQueue|TriggerCmdReqQueue]]
 
| [[GSPGPU:TriggerCmdReqQueue|TriggerCmdReqQueue]]
 
|-
 
|-
 
| 0x000D0140
 
| 0x000D0140
 
|  
 
|  
 +
| No
 
| SetDisplayTransfer (Stubbed)
 
| SetDisplayTransfer (Stubbed)
 
|-
 
|-
 
| 0x000E0180
 
| 0x000E0180
 
|  
 
|  
 +
| No
 
| SetTextureCopy (Stubbed)
 
| SetTextureCopy (Stubbed)
 
|-
 
|-
 
| 0x000F0200
 
| 0x000F0200
 
|  
 
|  
 +
| No
 
| SetMemoryFill (Stubbed)
 
| SetMemoryFill (Stubbed)
 
|-
 
|-
 
| 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
 
| 0x001F0082
 
| [[8.0.0-18]]
 
| [[8.0.0-18]]
 +
| No
 
| [[GSPGPU:StoreDataCache|StoreDataCache]]
 
| [[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 acquired rights, attempting to [[GSPGPU:SetLcdForceBlack|set LCDs to black]] from another process will fail.
 +
Saving/restoring VRAM requires bit0 of process [[GSPGPU:RegisterInterruptRelayQueue|flags]] to be set.
    
= GSP service "gsp::Lcd" =
 
= GSP service "gsp::Lcd" =
Line 141: Line 176:  
!  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].
 
|}
 
|}
   Line 235: Line 270:  
|-
 
|-
 
| [[8.0.0-18|v8196]]
 
| [[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(bitmask 0x80 gets set in GSP shared memory somewhere for that now). New services commands were added too, see above.
+
| 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.
51

edits