Clarify some MPCalls

The old "KC" names have been fixed.
This commit is contained in:
Elliot Nunn 2018-05-21 20:14:27 +08:00
parent 0470029cac
commit 5f395530ab

View File

@ -350,8 +350,6 @@ MPCall_1 ; OUTSIDE REFERER
; KCRegisterCpuPlugin
; ARG MPCoherenceGroupID r3, CpuPluginPtr r4, CpuPluginSize r5, CpuPluginDesc r6 ; ARG MPCoherenceGroupID r3, CpuPluginPtr r4, CpuPluginSize r5, CpuPluginDesc r6
; RET OSStatus r3 ; RET OSStatus r3
@ -860,9 +858,10 @@ MPCall_36 ; OUTSIDE REFERER
; < r3 = MP result code ; < r3 = MP result code
; < r4 = next_id ; < r4 = next_id
DeclareMPCall 37, KCGetNextID DeclareMPCall 37, MPGetNextID
MPGetNextID
KCGetNextID ; OUTSIDE REFERER
mr r8, r4 mr r8, r4
mr r9, r3 mr r9, r3
bl GetNextIDOfClass bl GetNextIDOfClass
@ -886,9 +885,9 @@ KCGetNextID ; OUTSIDE REFERER
; ARG ProcessID r3, IDClass r4, ID r5 ; ARG ProcessID r3, IDClass r4, ID r5
; RET MPErr r3, IDClass r4, ID r5 ; RET MPErr r3, IDClass r4, ID r5
DeclareMPCall 116, KCGetNextIDOwnedByProcess DeclareMPCall 116, MPGetNextIDOwnedByProcess
KCGetNextIDOwnedByProcess ; OUTSIDE REFERER MPGetNextIDOwnedByProcess
; Confirm that owner ID in r3 is a Process ; Confirm that owner ID in r3 is a Process
@ -1051,85 +1050,79 @@ MPCall_38_0x48
DeclareMPCall 62, MPCall_62 DeclareMPCall 62, MPGetNextCpuID
MPGetNextCpuID
MPCall_62 ; OUTSIDE REFERER
mr. r8, r3 mr. r8, r3
bne MPCall_62_0x18 bne @r3_nonzero
;r3 zero
mfsprg r15, 0 mfsprg r15, 0
lwz r31, EWA.CPUBase + CPU.LLL + LLL.Freeform(r15) lwz r31, EWA.CPUBase + CPU.LLL + LLL.Freeform(r15)
lwz r3, 0x0000(r31) lwz r3, 0(r31)
b MPCall_62_0x24 b @endif
MPCall_62_0x18 @r3_nonzero
; r8 = id
bl LookupID bl LookupID
cmpwi r9, CoherenceGroup.kIDClass cmpwi r9, CoherenceGroup.kIDClass
bne ReturnMPCallInvalidIDErr bne ReturnMPCallInvalidIDErr
@endif
MPCall_62_0x24 @loop
mr r8, r4 mr r8, r4
li r9, 0x07 li r9, CPU.kIDClass
bl GetNextIDOfClass bl GetNextIDOfClass
cmpwi r8, 0x00 cmpwi r8, 0
beq ReturnMPCallInvalidIDErr beq ReturnMPCallInvalidIDErr
mr r4, r8 mr r4, r8
; r8 = id
bl LookupID bl LookupID
; r8 = something not sure what lwz r16, CPU.LLL + LLL.Freeform(r8)
; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cohg, 11:area, 12:not, 13:log lwz r17, CPU.ID(r16)
lwz r16, 0x0008(r8)
lwz r17, 0x0000(r16)
cmpw r17, r3 cmpw r17, r3
bne MPCall_62_0x24 bne @loop
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
DeclareMPCall 42, KCCreateCpuStruct DeclareMPCall 42, MPCreateProcessor
MPCreateProcessor
KCCreateCpuStruct ; OUTSIDE REFERER
mr. r8, r3 mr. r8, r3
bne KCCreateCpuStruct_0x14 bne @cgrpProvided
mfsprg r15, 0 mfsprg r15, 0
lwz r30, EWA.CPUBase + CPU.LLL + LLL.Freeform(r15) lwz r30, EWA.CPUBase + CPU.LLL + LLL.Freeform(r15)
b KCCreateCpuStruct_0x24 b @gotCgrp
KCCreateCpuStruct_0x14 @cgrpProvided
; r8 = id
bl LookupID bl LookupID
cmpwi r9, CoherenceGroup.kIDClass cmpwi r9, CoherenceGroup.kIDClass
mr r30, r8 mr r30, r8
bne ReturnMPCallInvalidIDErr bne ReturnMPCallInvalidIDErr
KCCreateCpuStruct_0x24 @gotCgrp
li r8, 960
; r1 = kdp li r8, CPU.Size
; r8 = size
bl PoolAllocClear bl PoolAllocClear
; r8 = ptr
mr. r31, r8 mr. r31, r8
beq ScrambleMPCall beq ScrambleMPCall
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17
li r9, 0x07 li r9, CPU.kIDClass
; r1 = kdp
; r9 = kind
bl MakeID bl MakeID
cmpwi r8, 0x00 cmpwi r8, 0
bne+ KCCreateCpuStruct_0x68 bne+ @success
mr r8, r31 mr r8, r31
bl PoolFree bl PoolFree
b ReleaseAndScrambleMPCall b ReleaseAndScrambleMPCall
KCCreateCpuStruct_0x68 @success
stw r8, CPU.ID(r31) stw r8, CPU.ID(r31)
@ -1193,7 +1186,6 @@ KCCreateCpuStruct_0x68
oris r8, r8, 0xffff oris r8, r8, 0xffff
stw r8, 0x003c(r30) stw r8, 0x003c(r30)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall b ReleaseAndReturnZeroFromMPCall
@ -1242,11 +1234,11 @@ MPDeleteProcessor
DeclareMPCall 44, KCStartCPU DeclareMPCall 44, MPStartScheduling
; ARG CpuID r3 ; ARG CpuID r3
KCStartCPU ; OUTSIDE REFERER MPStartScheduling
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17
@ -1380,34 +1372,30 @@ MPCall_44_0x15c
; KCStopScheduling DeclareMPCall 45, MPStopScheduling
MPStopScheduling
DeclareMPCall 45, KCStopScheduling
KCStopScheduling ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3 mr r8, r3
; r8 = id
bl LookupID bl LookupID
cmpwi r9, CPU.kIDClass cmpwi r9, CPU.kIDClass
bne ReleaseAndReturnMPCallInvalidIDErr bne ReleaseAndReturnMPCallInvalidIDErr
mr r30, r8
lwz r16, 0x0018(r30)
rlwinm. r8, r16, 0, 28, 28
; r1 = kdp mr r30, r8
lwz r16, CPU.Flags(r30)
rlwinm. r8, r16, 0, CPU.kFlagScheduled, CPU.kFlagScheduled
beq ReleaseAndReturnZeroFromMPCall beq ReleaseAndReturnZeroFromMPCall
lwz r31, 0x001c(r30)
clrlwi. r8, r16, 0x1f lwz r31, CPU.IdleTaskPtr(r30)
rlwinm. r8, r16, 0, CPU.kFlag31, CPU.kFlag31
bne ReleaseAndReturnMPCallOOM bne ReleaseAndReturnMPCallOOM
lbz r17, 0x0019(r31)
cmpwi r17, 0x00 lbz r17, Task.Priority(r31)
beq KCStopScheduling_0x94 cmpwi r17, Task.kCriticalPriority
beq @running_critical_task
lwz r17, Task.Flags(r31) lwz r17, Task.Flags(r31)
_bset r17, r17, Task.kFlag8 _bset r17, r17, Task.kFlag8
@ -1415,19 +1403,24 @@ KCStopScheduling ; OUTSIDE REFERER
mr r8, r31 mr r8, r31
bl SchTaskUnrdy bl SchTaskUnrdy
li r17, 0x00
stb r17, 0x0019(r31) li r17, Task.kCriticalPriority
stb r17, Task.Priority(r31)
mr r8, r31 mr r8, r31
bl SchRdyTaskLater bl SchRdyTaskLater
bl CalculateTimeslice bl CalculateTimeslice
mr r8, r31 mr r8, r31
bl FlagSchEval bl FlagSchEval
lwz r8, 0x064c(r1)
lwz r8, KDP.PA_NanoKernelCode(r1)
llabel r9, SchIdleTaskStopper llabel r9, SchIdleTaskStopper
add r8, r8, r9 add r8, r8, r9
stw r8, 0x01fc(r31) stw r8, Task.ContextBlock + ContextBlock.CodePtr(r31)
KCStopScheduling_0x94 @running_critical_task
_AssertAndRelease PSA.SchLock + Lock.Count, scratch=r16 _AssertAndRelease PSA.SchLock + Lock.Count, scratch=r16
b MPCall_6_0x78 b MPCall_6_0x78
@ -1486,25 +1479,25 @@ MPCall_48_Bad ; OUTSIDE REFERER
; NKxprintf ; MPDebugPutString
DeclareMPCall 96, NKxprintf DeclareMPCall 96, MPDebugPutString
NKxprintf ; OUTSIDE REFERER MPDebugPutString ; OUTSIDE REFERER
rlwinm. r9, r11, 0, 27, 27 rlwinm. r9, r11, 0, 27, 27
mr r8, r3 mr r8, r3
beq NKxprintf_0x1c beq MPDebugPutString_0x1c
li r9, 0x00 li r9, 0x00
bl SpaceL2PUsingBATs ; LogicalPage *r8, MPAddressSpace *r9 // PhysicalPage *r17 bl SpaceL2PUsingBATs ; LogicalPage *r8, MPAddressSpace *r9 // PhysicalPage *r17
beq NKxprintf_0x24 beq MPDebugPutString_0x24
rlwimi r8, r17, 0, 0, 19 rlwimi r8, r17, 0, 0, 19
NKxprintf_0x1c MPDebugPutString_0x1c
bl PrintS bl PrintS
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
NKxprintf_0x24 MPDebugPutString_0x24
_log 'NKxprintf (V->P translation error)^n' _log 'NKxprintf (V->P translation error)^n'
b ReturnMPCallOOM b ReturnMPCallOOM
@ -1512,9 +1505,10 @@ NKxprintf_0x24
; ARG long r3, int r4 size (1:byte, 2:half, else:word) ; ARG long r3, int r4 size (1:byte, 2:half, else:word)
DeclareMPCall 97, NKPrintHex DeclareMPCall 97, MPDebugPutHex
MPDebugPutHex
NKPrintHex
mr r8, r3 mr r8, r3
cmpwi r4, 1 cmpwi r4, 1
@ -1537,46 +1531,40 @@ NKPrintHex
DeclareMPCall 124, NKPrintDecimal DeclareMPCall 124, MPDebugPutDec
MPDebugPutDec
NKPrintDecimal ; OUTSIDE REFERER
mr r8, r3 mr r8, r3
bl Printd bl Printd
b CommonMPCallReturnPath b CommonMPCallReturnPath
; KCSetBlueProcessID DeclareMPCall 99, MPSetBlueProcessID
MPSetBlueProcessID
DeclareMPCall 99, KCSetBlueProcessID
KCSetBlueProcessID ; OUTSIDE REFERER
mfsprg r16, 0 mfsprg r16, 0
rlwinm. r8, r7, 0, 10, 10 rlwinm. r8, r7, 0, EWA.kFlagBlue, EWA.kFlagBlue
lwz r31, EWA.PA_CurTask(r16) lwz r31, EWA.PA_CurTask(r16)
beq ReturnMPCallOOM beq ReturnMPCallOOM ; not in blue -> fail
mr r8, r3 mr r8, r3
; r8 = id
bl LookupID bl LookupID
; r8 = something not sure what
; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cohg, 11:area, 12:not, 13:log
cmpwi r9, Process.kIDClass cmpwi r9, Process.kIDClass
bne ReturnMPCallInvalidIDErr bne ReturnMPCallInvalidIDErr
stw r3, Task.ProcessID(r31) stw r3, Task.ProcessID(r31)
stw r4, 0x00ec(r31) stw r4, Task.SomeLabelField(r31)
b ReturnZeroFromMPCall b ReturnZeroFromMPCall
; KCRegisterThermalHandler DeclareMPCall 104, MPRegisterThermalHandler
MPRegisterThermalHandler
DeclareMPCall 104, KCRegisterThermalHandler
KCRegisterThermalHandler ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17
@ -1593,12 +1581,9 @@ KCRegisterThermalHandler ; OUTSIDE REFERER
; KCRegisterPMFHandler DeclareMPCall 105, MPRegisterPMFHandler
MPRegisterPMFHandler
DeclareMPCall 105, KCRegisterPMFHandler
KCRegisterPMFHandler ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17
@ -1615,12 +1600,9 @@ KCRegisterPMFHandler ; OUTSIDE REFERER
; KCMarkPMFTask DeclareMPCall 106, MPMarkPMFTask
MPMarkPMFTask
DeclareMPCall 106, KCMarkPMFTask
KCMarkPMFTask ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17
@ -2025,14 +2007,11 @@ MPCall_115_0x144
; KCRegisterExternalHandler
; Point external interrupts (thing PIHes) towards this notification ; Point external interrupts (thing PIHes) towards this notification
DeclareMPCall 121, MPRegisterExternalHandler
DeclareMPCall 121, KCRegisterExternalHandler MPRegisterExternalHandler
KCRegisterExternalHandler
_Lock PSA.SchLock, scratch1=r16, scratch2=r17 _Lock PSA.SchLock, scratch1=r16, scratch2=r17