Line 10: |
Line 10: |
| | 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) |
| |- | | |- |
Line 55: |
Line 55: |
| | 0x000A0044 | | | 0x000A0044 |
| | | | | |
− | | | + | | No |
− | | RegisterInterruptEvents | + | | 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 |
| | | | | |
− | | | + | | No |
− | | SetAxiConfigQoSMode | + | | [[GSPGPU:SetAxiConfigQoSMode|SetAxiConfigQoSMode]] |
| |- | | |- |
| | 0x00110040 | | | 0x00110040 |
| | | | | |
− | | | + | | No |
− | | SetPerfLogMode | + | | [[GSPGPU:SetPerfLogMode|SetPerfLogMode]] |
| |- | | |- |
| | 0x00120000 | | | 0x00120000 |
| | | | | |
− | | | + | | No |
− | | GetPerfLog | + | | [[GSPGPU:GetPerfLog|GetPerfLog]] |
| |- | | |- |
| | 0x00130042 | | | 0x00130042 |
| | | | | |
− | | | + | | No |
| | [[GSPGPU:RegisterInterruptRelayQueue|RegisterInterruptRelayQueue]] | | | [[GSPGPU:RegisterInterruptRelayQueue|RegisterInterruptRelayQueue]] |
| |- | | |- |
| | 0x00140000 | | | 0x00140000 |
| | | | | |
− | | | + | | No |
− | | UnregisterInterruptRelayQueue | + | | [[GSPGPU:UnregisterInterruptRelayQueue|UnregisterInterruptRelayQueue]] |
| |- | | |- |
| | 0x00150002 | | | 0x00150002 |
| | | | | |
− | | | + | | No |
− | | TryAcquireRight | + | | [[GSPGPU:TryAcquireRight|TryAcquireRight]] |
| |- | | |- |
| | 0x00160042 | | | 0x00160042 |
| | | | | |
− | | | + | | No |
| | [[GSPGPU:AcquireRight|AcquireRight]] | | | [[GSPGPU:AcquireRight|AcquireRight]] |
| |- | | |- |
| | 0x00170000 | | | 0x00170000 |
| | | | | |
− | | | + | | No |
− | | ReleaseRight | + | | [[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 |
| | | | | |
− | | | + | | Yes |
− | | ResetGpuCore | + | | [[GSPGPU:ResetGpuCore|ResetGpuCore]] |
| |- | | |- |
| | 0x001C0040 | | | 0x001C0040 |
| | | | | |
− | | | + | | No |
| | [[GSPGPU:SetLedForceOff|SetLedForceOff]] | | | [[GSPGPU:SetLedForceOff|SetLedForceOff]] |
| |- | | |- |
| | 0x001D0040 | | | 0x001D0040 |
| | | | | |
− | | | + | | No |
| | SetTestCommand (Stubbed) | | | SetTestCommand (Stubbed) |
| |- | | |- |
| | 0x001E0080 | | | 0x001E0080 |
| | | | | |
− | | | + | | No |
− | | SetInternalPriorities | + | | [[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 173: |
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]] |
| |- | | |- |
| | 0x000F0000 | | | 0x000F0000 |
| | | | | |
− | | Turns on top and bottom lcd | + | | [[GSPLCD:PowerOnAllBacklights|PowerOnAllBacklights]] |
| |- | | |- |
| | 0x00100000 | | | 0x00100000 |
| | | | | |
− | | Turns off top and bottom lcd | + | | [[GSPLCD:PowerOffAllBacklights|PowerOffAllBacklights]] |
| |- | | |- |
| | 0x00110040 | | | 0x00110040 |
| | | | | |
− | | Turns on lcd backlight (1:top, 2:bottom, 3:both) | + | | [[GSPLCD:PowerOnBacklight|PowerOnBacklight]] |
| |- | | |- |
| | 0x00120040 | | | 0x00120040 |
| | | | | |
− | | Turns off lcd backlight (1:top, 2:bottom, 3:both) | + | | [[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 269: |
Line 272: |
| | 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. | | | 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. |