Line 4: |
Line 4: |
| |- | | |- |
| ! Command Header | | ! Command Header |
| + | ! Available since system version |
| + | ! GSP rights required |
| ! Description | | ! Description |
| |- | | |- |
| | 0x00010082 | | | 0x00010082 |
− | | WriteHWRegs | + | | |
| + | | Yes |
| + | | [[GSPGPU:WriteHWRegs|WriteHWRegs]] |
| |- | | |- |
| | 0x00020084 | | | 0x00020084 |
− | | WriteHWRegsWithMask | + | | |
| + | | Yes |
| + | | [[GSPGPU:WriteHWRegsWithMask|WriteHWRegsWithMask]] |
| + | |- |
| + | | 0x00030082 |
| + | | |
| + | | Yes |
| + | | [[GSPGPU:WriteHWRegRepeat|WriteHWRegRepeat]] |
| |- | | |- |
| | 0x00040080 | | | 0x00040080 |
− | | ReadHWRegs | + | | |
| + | | Yes |
| + | | [[GSPGPU:ReadHWRegs|ReadHWRegs]] |
| |- | | |- |
| | 0x00050200 | | | 0x00050200 |
− | | SetBufferSwap | + | | |
| + | | Yes |
| + | | [[GSPGPU:SetBufferSwap|SetBufferSwap]] |
| + | |- |
| + | | 0x00060082 |
| + | | |
| + | | No |
| + | | SetCommandList (Stubbed) |
| |- | | |- |
| | 0x000700C2 | | | 0x000700C2 |
− | | RequestDma | + | | |
| + | | No |
| + | | RequestDma (Stubbed) |
| |- | | |- |
| | 0x00080082 | | | 0x00080082 |
− | | FlushDataCache | + | | |
| + | | No |
| + | | [[GSPGPU:FlushDataCache|FlushDataCache]] |
| + | |- |
| + | | 0x00090082 |
| + | | |
| + | | No |
| + | | [[GSPGPU:InvalidateDataCache|InvalidateDataCache]] |
| + | |- |
| + | | 0x000A0044 |
| + | | |
| + | | No |
| + | | RegisterInterruptEvents (Stubbed) |
| + | |- |
| + | | 0x000B0040 |
| + | | |
| + | | See below |
| + | | [[GSPGPU:SetLcdForceBlack|SetLcdForceBlack]] |
| + | |- |
| + | | 0x000C0000 |
| + | | |
| + | | No |
| + | | [[GSPGPU:TriggerCmdReqQueue|TriggerCmdReqQueue]] |
| + | |- |
| + | | 0x000D0140 |
| + | | |
| + | | No |
| + | | SetDisplayTransfer (Stubbed) |
| + | |- |
| + | | 0x000E0180 |
| + | | |
| + | | No |
| + | | SetTextureCopy (Stubbed) |
| |- | | |- |
| | 0x000F0200 | | | 0x000F0200 |
− | | SetMemoryFill | + | | |
| + | | No |
| + | | SetMemoryFill (Stubbed) |
| + | |- |
| + | | 0x00100040 |
| + | | |
| + | | No |
| + | | [[GSPGPU:SetAxiConfigQoSMode|SetAxiConfigQoSMode]] |
| |- | | |- |
− | | 0x000B0040 | + | | 0x00110040 |
− | | SetLcdForceBlack | + | | |
| + | | No |
| + | | [[GSPGPU:SetPerfLogMode|SetPerfLogMode]] |
| |- | | |- |
| | 0x00120000 | | | 0x00120000 |
− | | GetPerfLog | + | | |
| + | | No |
| + | | [[GSPGPU:GetPerfLog|GetPerfLog]] |
| |- | | |- |
| | 0x00130042 | | | 0x00130042 |
− | | RegisterInterruptRelayQueue | + | | |
| + | | No |
| + | | [[GSPGPU:RegisterInterruptRelayQueue|RegisterInterruptRelayQueue]] |
| + | |- |
| + | | 0x00140000 |
| + | | |
| + | | No |
| + | | [[GSPGPU:UnregisterInterruptRelayQueue|UnregisterInterruptRelayQueue]] |
| + | |- |
| + | | 0x00150002 |
| + | | |
| + | | No |
| + | | [[GSPGPU:TryAcquireRight|TryAcquireRight]] |
| |- | | |- |
| | 0x00160042 | | | 0x00160042 |
− | | AcquireRight (bool unk, 0, u32 processhandle) | + | | |
| + | | No |
| + | | [[GSPGPU:AcquireRight|AcquireRight]] |
| |- | | |- |
| | 0x00170000 | | | 0x00170000 |
− | | ReleaseRight | + | | |
| + | | No |
| + | | [[GSPGPU:ReleaseRight|ReleaseRight]] |
| + | |- |
| + | | 0x00180000 |
| + | | |
| + | | No |
| + | | [[GSPGPU:ImportDisplayCaptureInfo|ImportDisplayCaptureInfo]] |
| + | |- |
| + | | 0x00190000 |
| + | | |
| + | | See below |
| + | | [[GSPGPU:SaveVramSysArea|SaveVramSysArea]] |
| + | |- |
| + | | 0x001A0000 |
| + | | |
| + | | See below |
| + | | [[GSPGPU:RestoreVramSysArea|RestoreVramSysArea]] |
| |- | | |- |
| | 0x001B0000 | | | 0x001B0000 |
− | | ResetGpuCore | + | | |
| + | | Yes |
| + | | [[GSPGPU:ResetGpuCore|ResetGpuCore]] |
| + | |- |
| + | | 0x001C0040 |
| + | | |
| + | | No |
| + | | [[GSPGPU:SetLedForceOff|SetLedForceOff]] |
| + | |- |
| + | | 0x001D0040 |
| + | | |
| + | | No |
| + | | SetTestCommand (Stubbed) |
| + | |- |
| + | | 0x001E0080 |
| + | | |
| + | | No |
| + | | [[GSPGPU:SetInternalPriorities|SetInternalPriorities]] |
| + | |- |
| + | | 0x001F0082 |
| + | | [[8.0.0-18]] |
| + | | No |
| + | | [[GSPGPU:StoreDataCache|StoreDataCache]] |
| |} | | |} |
| | | |
− | ==WriteHWRegs Request==
| + | 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" = |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Index Word | + | ! Command Header |
| + | ! Available since system version |
| ! Description | | ! Description |
| |- | | |- |
− | | 0 | + | | 0x00010040 |
− | | Header code [0x00010082] | + | | |
| + | | [[GSPLCD:EnableABL|EnableABL]] |
| |- | | |- |
− | | 1 | + | | 0x00020040 |
− | | GPU Address - 0x1EB00000 | + | | |
| + | | [[GSPLCD:DisableABL|DisableABL]] |
| |- | | |- |
− | | 2 | + | | 0x00030080 |
− | | Size | + | | |
| + | | [[GSPLCD:SetRSLut|SetRSLut]] |
| |- | | |- |
− | | 3 | + | | 0x000400C0 |
− | | (Size<<14) <nowiki>|</nowiki> 2 | + | | |
| + | | [[GSPLCD:SetRSParams|SetRSParams]] |
| |- | | |- |
− | | 4 | + | | 0x00050140 |
− | | Data Pointer | + | | |
| + | | [[GSPLCD:SetABLArea|SetABLArea]] |
| + | |- |
| + | | 0x00060140 |
| + | | |
| + | | ? |
| + | |- |
| + | | 0x00070080 |
| + | | |
| + | | [[GSPLCD:SetInertia|SetInertia]] |
| + | |- |
| + | | 0x000800C0 |
| + | | |
| + | | [[GSPLCD:SetDitherMode|SetDitherMode]] |
| + | |- |
| + | | 0x00090140 |
| + | | |
| + | | [[GSPLCD:SetDitherParams|SetDitherParams]] |
| + | |- |
| + | | 0x000A0080 |
| + | | |
| + | | [[GSPLCD:SetBrightnessRaw|SetBrightnessRaw]] |
| + | |- |
| + | | 0x000B0080 |
| + | | |
| + | | [[GSPLCD:SetBrightness|SetBrightness]] |
| + | |- |
| + | | 0x000C0040 |
| + | | |
| + | | [[GSPLCD:ReloadConfig|ReloadConfig]] |
| + | |- |
| + | | 0x000D0040 |
| + | | |
| + | | [[GSPLCD:RestoreConfig|RestoreConfig]] |
| + | |- |
| + | | 0x000E0000 |
| + | | |
| + | | [[GSPLCD:GetPowerState|GetPowerState]] |
| + | |- |
| + | | 0x000F0000 |
| + | | |
| + | | [[GSPLCD:PowerOnAllBacklights|PowerOnAllBacklights]] |
| + | |- |
| + | | 0x00100000 |
| + | | |
| + | | [[GSPLCD:PowerOffAllBacklights|PowerOffAllBacklights]] |
| + | |- |
| + | | 0x00110040 |
| + | | |
| + | | [[GSPLCD:PowerOnBacklight|PowerOnBacklight]] |
| + | |- |
| + | | 0x00120040 |
| + | | |
| + | | [[GSPLCD:PowerOffBacklight|PowerOffBacklight]] |
| + | |- |
| + | | 0x00130040 |
| + | | |
| + | | [[GSPLCD:SetLedForceOff|SetLedForceOff]] |
| + | |- |
| + | | 0x00140000 |
| + | | [[8.0.0-18]] |
| + | | [[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]. |
| + | |- |
| + | | 0x00150040 |
| + | | [[8.0.0-18]] |
| + | | [[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. |
| + | |
| + | = 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. |