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
1 changed files with 91 additions and 112 deletions

View File

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