powermac-rom/NanoKernel/NKQueues.s

2527 lines
42 KiB
ArmAsm

DeclareMPCall 15, MPCall_15
MPCall_15 ; OUTSIDE REFERER
li r8, 0x34
bl PoolAlloc_with_crset
mr. r31, r8
beq+ major_0x0af60_0x20
lis r16, 'MS'
stw r8, 0x0008(r8)
ori r16, r16, 'GQ'
stw r8, 0x000c(r8)
stw r16, 0x0004(r8)
addi r9, r8, 0x10
lis r16, 'NO'
stw r9, 0x0008(r9)
ori r16, r16, 'TQ'
stw r9, 0x000c(r9)
stw r16, 0x0004(r9)
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
li r9, 0x04
; r1 = kdp
; r9 = kind
bl MakeID
cmpwi r8, 0x00
bne+ MPCall_15_0x70
mr r8, r31
bl PoolFree
b major_0x0af60
MPCall_15_0x70
mfsprg r30, 0
lwz r30, -0x0008(r30)
stw r8, 0x0000(r31)
lwz r17, 0x0060(r30)
stw r17, 0x0020(r31)
mr r4, r8
li r17, 0x00
stw r17, 0x0024(r31)
stw r17, 0x0028(r31)
stw r17, 0x002c(r31)
stw r17, 0x0030(r31)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 16, MPCall_16
MPCall_16 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Queue.kIDClass
mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
MPCall_16_0x2c
addi r30, r31, 0x10
lwz r8, 0x0018(r31)
cmpw r8, r30
beq- MPCall_16_0x60
lwz r16, 0x0008(r8)
lwz r17, 0x000c(r8)
stw r16, 0x0008(r17)
stw r17, 0x000c(r16)
li r16, 0x00
stw r16, 0x0008(r8)
stw r16, 0x000c(r8)
bl PoolFree
b MPCall_16_0x2c
MPCall_16_0x60
lwz r30, 0x0028(r31)
MPCall_16_0x64
mr. r8, r30
beq- MPCall_16_0x78
lwz r30, 0x0008(r30)
bl PoolFree
b MPCall_16_0x64
MPCall_16_0x78
mr r8, r3
bl major_0x0dce8
MPCall_16_0x80
addi r30, r31, 0x00
lwz r16, 0x0008(r31)
cmpw r16, r30
addi r8, r16, -0x08
beq- MPCall_16_0xe4
lwz r17, 0x0088(r8)
li r18, -0x726f
stw r18, 0x011c(r17)
lbz r17, 0x0037(r8)
cmpwi r17, 0x01
bne- MPCall_16_0xb4
addi r8, r8, 0x20
bl major_0x136c8
MPCall_16_0xb4
lwz r16, 0x0008(r31)
lwz r17, 0x0008(r16)
lwz r18, 0x000c(r16)
stw r17, 0x0008(r18)
stw r18, 0x000c(r17)
li r17, 0x00
stw r17, 0x0008(r16)
stw r17, 0x000c(r16)
addi r8, r16, -0x08
bl TaskReadyAsPrev
bl major_0x14af8
b MPCall_16_0x80
MPCall_16_0xe4
mr r8, r31
bl PoolFree
mr r8, r3
bl DeleteID
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 39, MPCall_39
MPCall_39 ; OUTSIDE REFERER
cmpwi r4, 0x00
blt+ ReturnMPCallOOM
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Queue.kIDClass
mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
lwz r29, 0x0024(r31)
lwz r30, 0x0028(r31)
cmpw r29, r4
; r1 = kdp
beq+ ReleaseAndReturnZeroFromMPCall
blt- MPCall_39_0x7c
MPCall_39_0x48
mr. r8, r30
beq- MPCall_39_0x70
addi r29, r29, -0x01
lwz r30, 0x0008(r30)
bl PoolFree
cmpw r29, r4
bgt+ MPCall_39_0x48
stw r4, 0x0024(r31)
stw r30, 0x0028(r31)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_39_0x70
stw r29, 0x0024(r31)
stw r30, 0x0028(r31)
b ReleaseAndReturnMPCallOOM
MPCall_39_0x7c
li r8, 0x1c
bl PoolAlloc_with_crset
cmpwi r8, 0x00
beq+ major_0x0af60
addi r29, r29, 0x01
lis r17, 0x6e6f
ori r17, r17, 0x7472
stw r17, 0x0004(r8)
stw r30, 0x0008(r8)
stw r29, 0x0024(r31)
cmpw r29, r4
stw r8, 0x0028(r31)
mr r30, r8
blt+ MPCall_39_0x7c
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 17, MPCall_17
MPCall_17 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Queue.kIDClass
mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
lwz r16, 0x0024(r31)
li r8, 0x1c
cmpwi r16, 0x00
bne- MPCall_17_0x58
bl PoolAlloc_with_crset
cmpwi r8, 0x00
beq+ major_0x0af60
lis r17, 0x6e6f
ori r17, r17, 0x7465
stw r17, 0x0004(r8)
b MPCall_17_0x6c
MPCall_17_0x58
lwz r17, 0x0028(r31)
mr. r8, r17
beq+ ReleaseAndReturnMPCallOOM
lwz r17, 0x0008(r17)
stw r17, 0x0028(r31)
MPCall_17_0x6c
lwz r16, 0x0134(r6)
stw r4, 0x0010(r8)
stw r5, 0x0014(r8)
stw r16, 0x0018(r8)
bl major_0x0c8b4
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
; major_0x0c8b4
; Xrefs:
; major_0x02ccc
; MPCall_17
; major_0x0db04
; MPCall_9
; MPCall_58
major_0x0c8b4 ; OUTSIDE REFERER
addi r17, r31, 0x10
stw r17, 0x0000(r8)
stw r17, 0x0008(r8)
lwz r16, 0x000c(r17)
stw r16, 0x000c(r8)
stw r8, 0x0008(r16)
stw r8, 0x000c(r17)
lwz r18, 0x0030(r31)
addi r18, r18, 0x01
stw r18, 0x0030(r31)
mflr r27
lwz r8, 0x0000(r31)
bl major_0x0dce8
lwz r16, 0x0008(r31)
cmpw r16, r31
addi r8, r16, -0x08
beq- major_0x0c8b4_0xac
lwz r17, 0x0088(r8)
lwz r18, 0x00fc(r17)
subi r18, r18, 4
stw r18, 0x00fc(r17)
lbz r17, 0x0037(r8)
cmpwi r17, 0x01
bne- major_0x0c8b4_0x68
addi r8, r8, 0x20
bl major_0x136c8
major_0x0c8b4_0x68
lwz r16, 0x0008(r31)
lwz r17, 0x0008(r16)
lwz r18, 0x000c(r16)
stw r17, 0x0008(r18)
stw r18, 0x000c(r17)
li r17, 0x00
stw r17, 0x0008(r16)
stw r17, 0x000c(r16)
lwz r18, 0x002c(r31)
addi r18, r18, -0x01
stw r18, 0x002c(r31)
addi r8, r16, -0x08
li r17, 0x01
stb r17, 0x0019(r8)
bl TaskReadyAsPrev
bl CalculateTimeslice
bl major_0x14af8
major_0x0c8b4_0xac
mtlr r27
blr
DeclareMPCall 18, MPCall_18
MPCall_18 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Queue.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8
lwz r16, 0x0018(r31)
addi r17, r31, 0x10
cmpw r16, r17
beq- MPCall_18_0x9c
lwz r4, 0x0010(r16)
lwz r5, 0x0014(r16)
lwz r17, 0x0018(r16)
stw r17, 0x0134(r6)
lwz r17, 0x0008(r16)
lwz r18, 0x000c(r16)
stw r17, 0x0008(r18)
stw r18, 0x000c(r17)
li r17, 0x00
stw r17, 0x0008(r16)
stw r17, 0x000c(r16)
lwz r18, 0x0030(r31)
addi r18, r18, -0x01
stw r18, 0x0030(r31)
lbz r17, 0x0007(r16)
mr r8, r16
cmpwi r17, 0x72
beq- MPCall_18_0x8c
bl PoolFree
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_18_0x8c
lwz r17, 0x0028(r31)
stw r16, 0x0028(r31)
stw r17, 0x0008(r16)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_18_0x9c
lwz r17, 0x013c(r6)
mfsprg r30, 0
cmpwi r17, 0x00
lwz r19, -0x0008(r30)
beq+ ReleaseAndTimeoutMPCall
lwz r16, 0x0064(r19)
rlwinm. r16, r16, 0, 15, 15
beq- MPCall_18_0xc4
stw r3, -0x0410(r1)
b ReleaseAndReturnMPCallBlueBlocking
MPCall_18_0xc4
mr r8, r19
bl major_0x13e4c
lwz r19, -0x0008(r30)
addi r16, r31, 0x00
addi r17, r19, 0x08
stw r16, 0x0000(r17)
stw r16, 0x0008(r17)
lwz r18, 0x000c(r16)
stw r18, 0x000c(r17)
stw r17, 0x0008(r18)
stw r17, 0x000c(r16)
lwz r18, 0x002c(r31)
addi r18, r18, 0x01
stw r18, 0x002c(r31)
lis r16, 0x7fff
lwz r17, 0x013c(r6)
ori r16, r16, 0xffff
addi r30, r19, 0x20
cmpw r17, r16
li r16, 0x02
beq- MPCall_18_0x154
stb r16, 0x0014(r30)
stw r19, 0x0018(r30)
mr r8, r17
; r1 = kdp
; r8 = multiple (pos: /250; neg: /250000)
bl TimebaseTicksPerPeriod
; r8 = hi
; r9 = lo
mr r27, r8
mr r28, r9
bl GetTime
mfxer r16
addc r9, r9, r28
adde r8, r8, r27
mtxer r16
stw r8, 0x0038(r30)
stw r9, 0x003c(r30)
mr r8, r30
bl called_by_init_tmrqs
MPCall_18_0x154
b AlternateMPCallReturnPath
DeclareMPCall 19, MPCall_19
MPCall_19 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Queue.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8
lwz r16, 0x0018(r31)
addi r17, r31, 0x10
cmpw r16, r17
beq+ ReleaseAndTimeoutMPCall
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 20, MPCall_20
MPCall_20 ; OUTSIDE REFERER
cmpw r4, r3
bgt+ ReturnMPCallOOM
li r8, 0x20
bl PoolAlloc_with_crset
mr. r31, r8
beq+ major_0x0af60_0x20
lis r16, 0x5345
stw r31, 0x0008(r31)
ori r16, r16, 0x4d41
stw r31, 0x000c(r31)
stw r16, 0x0004(r31)
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
li r9, 0x05
; r1 = kdp
; r9 = kind
bl MakeID
cmpwi r8, 0x00
bne+ MPCall_20_0x60
mr r8, r31
bl PoolFree
b major_0x0af60
MPCall_20_0x60
li r18, 0x00
stw r8, 0x0000(r31)
mfsprg r30, 0
lwz r30, -0x0008(r30)
stw r3, 0x0014(r31)
stw r4, 0x0010(r31)
lwz r17, 0x0060(r30)
stw r18, 0x001c(r31)
stw r17, 0x0018(r31)
mr r5, r8
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 23, MPCall_23
MPCall_23 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Semaphore.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8
lwz r16, 0x0010(r31)
cmpwi r16, 0x00
addi r16, r16, -0x01
ble- MPCall_23_0x44
stw r16, 0x0010(r31)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_23_0x44
cmpwi r4, 0x00
mfsprg r30, 0
beq+ ReleaseAndTimeoutMPCall
lwz r8, -0x0008(r30)
lwz r16, 0x0064(r8)
rlwinm. r16, r16, 0, 15, 15
beq- MPCall_23_0x68
stw r3, -0x0410(r1)
b ReleaseAndReturnMPCallBlueBlocking
MPCall_23_0x68
bl major_0x13e4c
addi r16, r31, 0x00
addi r17, r8, 0x08
stw r16, 0x0000(r17)
stw r16, 0x0008(r17)
lwz r18, 0x000c(r16)
stw r18, 0x000c(r17)
stw r17, 0x0008(r18)
stw r17, 0x000c(r16)
lwz r18, 0x001c(r31)
addi r18, r18, 0x01
stw r18, 0x001c(r31)
lis r16, 0x7fff
addi r30, r8, 0x20
ori r16, r16, 0xffff
cmpw r4, r16
li r17, 0x02
beq- MPCall_23_0xec
stb r17, 0x0014(r30)
stw r8, 0x0018(r30)
mr r8, r4
; r1 = kdp
; r8 = multiple (pos: /250; neg: /250000)
bl TimebaseTicksPerPeriod
; r8 = hi
; r9 = lo
mr r27, r8
mr r28, r9
bl GetTime
mfxer r16
addc r9, r9, r28
adde r8, r8, r27
mtxer r16
stw r8, 0x0038(r30)
stw r9, 0x003c(r30)
mr r8, r30
bl called_by_init_tmrqs
MPCall_23_0xec
li r3, 0x00
b AlternateMPCallReturnPath
DeclareMPCall 24, MPCall_24
MPCall_24 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Semaphore.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8
lwz r16, 0x0010(r31)
cmpwi r16, 0x00
ble+ ReleaseAndTimeoutMPCall
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 22, MPCall_22
MPCall_22 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Semaphore.kIDClass
mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
bl major_0x0ccf4
mr r3, r8
b ReleaseAndReturnMPCall
; major_0x0ccf4
; Xrefs:
; MPCall_22
; major_0x0db04
major_0x0ccf4 ; OUTSIDE REFERER
mflr r27
lwz r8, 0x0000(r31)
bl major_0x0dce8
lwz r16, 0x0008(r31)
cmpw r16, r31
beq- major_0x0ccf4_0x80
addi r8, r16, -0x08
lbz r17, 0x0037(r8)
cmpwi r17, 0x01
bne- major_0x0ccf4_0x30
addi r8, r8, 0x20
bl major_0x136c8
major_0x0ccf4_0x30
lwz r16, 0x0008(r31)
lwz r17, 0x0008(r16)
lwz r18, 0x000c(r16)
stw r17, 0x0008(r18)
stw r18, 0x000c(r17)
li r17, 0x00
stw r17, 0x0008(r16)
stw r17, 0x000c(r16)
lwz r18, 0x001c(r31)
addi r18, r18, -0x01
stw r18, 0x001c(r31)
addi r8, r16, -0x08
li r17, 0x01
stb r17, 0x0019(r8)
bl TaskReadyAsPrev
bl CalculateTimeslice
bl major_0x14af8
mtlr r27
li r8, 0x00
blr
major_0x0ccf4_0x80
mtlr r27
lwz r16, 0x0010(r31)
lwz r17, 0x0014(r31)
cmpw r16, r17
addi r16, r16, 0x01
li r8, -0x7272
bgelr-
stw r16, 0x0010(r31)
li r8, 0x00
blr
DeclareMPCall 21, MPCall_21
MPCall_21 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Semaphore.kIDClass
mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r8, r3
bl major_0x0dce8
MPCall_21_0x34
addi r30, r31, 0x00
lwz r16, 0x0008(r31)
cmpw r16, r30
addi r8, r16, -0x08
beq- MPCall_21_0x98
lwz r17, 0x0088(r8)
li r18, -0x726f
stw r18, 0x011c(r17)
lbz r17, 0x0037(r8)
cmpwi r17, 0x01
bne- MPCall_21_0x68
addi r8, r8, 0x20
bl major_0x136c8
MPCall_21_0x68
lwz r16, 0x0008(r31)
lwz r17, 0x0008(r16)
lwz r18, 0x000c(r16)
stw r17, 0x0008(r18)
stw r18, 0x000c(r17)
li r17, 0x00
stw r17, 0x0008(r16)
stw r17, 0x000c(r16)
addi r8, r16, -0x08
bl TaskReadyAsPrev
bl major_0x14af8
b MPCall_21_0x34
MPCall_21_0x98
mr r8, r31
bl PoolFree
mr r8, r3
bl DeleteID
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 25, MPCall_25
MPCall_25 ; OUTSIDE REFERER
li r8, 0x24
bl PoolAlloc_with_crset
mr. r31, r8
beq+ major_0x0af60_0x20
lis r16, 0x4352
stw r31, 0x0008(r31)
ori r16, r16, 0x474e
stw r31, 0x000c(r31)
stw r16, 0x0004(r31)
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
li r9, 0x06
; r1 = kdp
; r9 = kind
bl MakeID
cmpwi r8, 0x00
bne+ MPCall_25_0x58
mr r8, r31
bl PoolFree
b major_0x0af60
MPCall_25_0x58
li r18, 0x00
mfsprg r30, 0
lwz r30, -0x0008(r30)
li r16, 0x00
stw r8, 0x0000(r31)
stw r16, 0x0014(r31)
stw r16, 0x001c(r31)
stw r16, 0x0018(r31)
lwz r17, 0x0060(r30)
stw r18, 0x0020(r31)
stw r17, 0x0010(r31)
mr r4, r8
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 27, MPCall_27
MPCall_27 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, CriticalRegion.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8
mfsprg r17, 0
lwz r18, 0x0014(r31)
lwz r30, -0x0008(r17)
cmpwi r18, 0x00
lwz r16, 0x0018(r31)
beq- MPCall_27_0x64
lwz r17, 0x001c(r31)
cmpw r16, r30
cmpw cr1, r17, r5
bne- MPCall_27_0x78
bne- cr1, MPCall_27_0x78
addi r18, r18, 0x01
stw r18, 0x0014(r31)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_27_0x64
addi r18, r18, 0x01
stw r30, 0x0018(r31)
stw r5, 0x001c(r31)
stw r18, 0x0014(r31)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_27_0x78
lwz r8, 0x0000(r16)
; r8 = id
bl LookupID
cmpwi r9, Task.kIDClass
bne+ ReleaseAndReturnMPCallTaskAborted
lwz r8, 0x001c(r31)
; r8 = id
bl LookupID
cmpwi r9, Process.kIDClass
bne+ ReleaseAndReturnMPCallTaskAborted
cmpwi r4, 0x00
lwz r16, 0x0064(r30)
beq+ ReleaseAndTimeoutMPCall
rlwinm. r16, r16, 0, 15, 15
beq- MPCall_27_0xb4
stw r3, -0x0410(r1)
b ReleaseAndReturnMPCallBlueBlocking
MPCall_27_0xb4
mr r8, r30
bl major_0x13e4c
lis r16, 0x7fff
addi r18, r30, 0x08
ori r16, r16, 0xffff
stw r31, 0x0000(r18)
stw r31, 0x0008(r18)
lwz r19, 0x000c(r31)
stw r19, 0x000c(r18)
stw r18, 0x0008(r19)
stw r18, 0x000c(r31)
lwz r18, 0x0020(r31)
addi r18, r18, 0x01
stw r18, 0x0020(r31)
cmpw r4, r16
beq- MPCall_27_0x138
addi r29, r30, 0x20
li r8, 0x02
stw r30, 0x0018(r29)
stb r8, 0x0014(r29)
mr r8, r4
; r1 = kdp
; r8 = multiple (pos: /250; neg: /250000)
bl TimebaseTicksPerPeriod
; r8 = hi
; r9 = lo
mr r27, r8
mr r28, r9
bl GetTime
mfxer r16
addc r9, r9, r28
adde r8, r8, r27
mtxer r16
stw r8, 0x0038(r29)
stw r9, 0x003c(r29)
mr r8, r29
bl called_by_init_tmrqs
MPCall_27_0x138
b AlternateMPCallReturnPath
DeclareMPCall 29, MPCall_29
MPCall_29 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, CriticalRegion.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8
mfsprg r17, 0
lwz r18, 0x0014(r31)
cmpwi r18, 0x00
; r1 = kdp
beq+ ReleaseAndReturnZeroFromMPCall
lwz r30, -0x0008(r17)
lwz r16, 0x0018(r31)
lwz r17, 0x001c(r31)
cmpw r16, r30
cmpw cr1, r17, r4
bne+ ReleaseAndTimeoutMPCall
bne+ cr1, ReleaseAndTimeoutMPCall
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 28, MPCall_28
MPCall_28 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, CriticalRegion.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8
mfsprg r17, 0
lwz r16, 0x0018(r31)
lwz r30, -0x0008(r17)
lwz r18, 0x0014(r31)
lwz r17, 0x001c(r31)
cmpw r16, r30
cmpw cr1, r17, r4
bne+ ReleaseAndReturnMPCallOOM
bne+ cr1, ReleaseAndReturnMPCallOOM
addi r18, r18, -0x01
cmpwi r18, 0x00
stw r18, 0x0014(r31)
; r1 = kdp
bne+ ReleaseAndReturnZeroFromMPCall
stw r18, 0x0018(r31)
stw r18, 0x001c(r31)
mr r8, r3
bl major_0x0dce8
lwz r16, 0x0008(r31)
cmpw r16, r31
; r1 = kdp
beq+ ReleaseAndReturnZeroFromMPCall
addi r8, r16, -0x08
lbz r17, 0x0037(r8)
cmpwi r17, 0x01
bne- MPCall_28_0x94
addi r8, r8, 0x20
bl major_0x136c8
MPCall_28_0x94
lwz r16, 0x0008(r31)
lwz r17, 0x0008(r16)
lwz r18, 0x000c(r16)
stw r17, 0x0008(r18)
stw r18, 0x000c(r17)
li r17, 0x00
stw r17, 0x0008(r16)
stw r17, 0x000c(r16)
lwz r18, 0x0020(r31)
addi r18, r18, -0x01
stw r18, 0x0020(r31)
addi r8, r16, -0x08
lwz r17, 0x0088(r8)
lwz r18, 0x00fc(r17)
subi r18, r18, 4
stw r18, 0x00fc(r17)
li r17, 0x01
stb r17, 0x0019(r8)
bl TaskReadyAsPrev
bl CalculateTimeslice
bl major_0x14af8
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 26, MPCall_26
MPCall_26 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, CriticalRegion.kIDClass
mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r8, r3
bl major_0x0dce8
MPCall_26_0x34
addi r30, r31, 0x00
lwz r16, 0x0008(r31)
cmpw r16, r30
addi r8, r16, -0x08
beq- MPCall_26_0x98
lwz r17, 0x0088(r8)
li r18, -0x726f
stw r18, 0x011c(r17)
lbz r17, 0x0037(r8)
cmpwi r17, 0x01
bne- MPCall_26_0x68
addi r8, r8, 0x20
bl major_0x136c8
MPCall_26_0x68
lwz r16, 0x0008(r31)
lwz r17, 0x0008(r16)
lwz r18, 0x000c(r16)
stw r17, 0x0008(r18)
stw r18, 0x000c(r17)
li r17, 0x00
stw r17, 0x0008(r16)
stw r17, 0x000c(r16)
addi r8, r16, -0x08
bl TaskReadyAsPrev
bl major_0x14af8
b MPCall_26_0x34
MPCall_26_0x98
mr r8, r31
bl PoolFree
mr r8, r3
bl DeleteID
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 49, NKCreateEventGroupForThisTask
NKCreateEventGroupForThisTask
li r8, EventGroup.Size
bl PoolAlloc
mr. r31, r8
beq+ major_0x0af60_0x20
InitList r8, EventGroup.kSignature, scratch=r16
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
li r9, EventGroup.kIDClass
bl MakeID
cmpwi r8, 0
bne+ @success
mr r8, r31
bl PoolFree
b major_0x0af60
@success
mfsprg r30, 0
lwz r30, EWA.PA_CurTask(r30)
stw r8, EventGroup.LLL + LLL.Freeform(r31)
lwz r17, Task.ProcessID(r30)
stw r17, EventGroup.ProcessID(r31)
mr r4, r8
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 50, MPCall_50
MPCall_50 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, EventGroup.kIDClass
mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r8, r3
bl major_0x0dce8
MPCall_50_0x34
addi r30, r31, 0x00
lwz r16, 0x0008(r31)
cmpw r16, r30
addi r8, r16, -0x08
beq- MPCall_50_0x98
lwz r17, 0x0088(r8)
li r18, -0x726f
stw r18, 0x011c(r17)
lbz r17, 0x0037(r8)
cmpwi r17, 0x01
bne- MPCall_50_0x68
addi r8, r8, 0x20
bl major_0x136c8
MPCall_50_0x68
lwz r16, 0x0008(r31)
lwz r17, 0x0008(r16)
lwz r18, 0x000c(r16)
stw r17, 0x0008(r18)
stw r18, 0x000c(r17)
li r17, 0x00
stw r17, 0x0008(r16)
stw r17, 0x000c(r16)
addi r8, r16, -0x08
bl TaskReadyAsPrev
bl major_0x14af8
b MPCall_50_0x34
MPCall_50_0x98
mr r8, r31
bl PoolFree
mr r8, r3
bl DeleteID
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 51, MPCall_51
MPCall_51 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, EventGroup.kIDClass
mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r8, r4
bl major_0x0d35c
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
; major_0x0d35c
; Xrefs:
; MPCall_51
; major_0x0db04
; MPCall_83
major_0x0d35c ; OUTSIDE REFERER
lwz r16, 0x0010(r31)
or r16, r16, r8
stw r16, 0x0010(r31)
mflr r27
lwz r8, 0x0000(r31)
bl major_0x0dce8
lwz r16, 0x0008(r31)
cmpw r16, r31
addi r8, r16, -0x08
beq- major_0x0d35c_0x90
lwz r17, 0x0088(r8)
lwz r18, 0x00fc(r17)
subi r18, r18, 4
stw r18, 0x00fc(r17)
lbz r17, 0x0037(r8)
cmpwi r17, 0x01
bne- major_0x0d35c_0x4c
addi r8, r8, 0x20
bl major_0x136c8
major_0x0d35c_0x4c
lwz r16, 0x0008(r31)
lwz r17, 0x0008(r16)
lwz r18, 0x000c(r16)
stw r17, 0x0008(r18)
stw r18, 0x000c(r17)
li r17, 0x00
stw r17, 0x0008(r16)
stw r17, 0x000c(r16)
lwz r18, 0x001c(r31)
addi r18, r18, -0x01
stw r18, 0x001c(r31)
addi r8, r16, -0x08
li r17, 0x01
stb r17, 0x0019(r8)
bl TaskReadyAsPrev
bl CalculateTimeslice
bl major_0x14af8
major_0x0d35c_0x90
lwz r16, 0x0018(r31)
rlwinm. r17, r16, 0, 27, 27
beq- major_0x0d35c_0x1a0
lwz r17, 0x0658(r1)
lwz r26, -0x08f0(r1)
lwz r18, 0x00c8(r17)
lwz r19, 0x00d0(r17)
cmpwi cr1, r18, 0x00
cmpwi r19, 0x00
bne- cr1, major_0x0d35c_0xc8
bne- major_0x0d35c_0x1a0
lwz r8, 0x0000(r31)
stw r8, 0x00d0(r17)
b major_0x0d35c_0x118
major_0x0d35c_0xc8
lwz r9, 0x0634(r1)
rlwinm r16, r16, 2, 26, 29
add r18, r18, r9
lwzx r19, r16, r18
cmpwi r19, 0x00
bne- major_0x0d35c_0x1a0
lwz r8, 0x0000(r31)
stwx r8, r16, r18
li r19, 0x1c
li r9, 0x04
major_0x0d35c_0xf0
lwzx r8, r19, r18
cmpwi r8, 0x00
bne- major_0x0d35c_0x108
subf. r19, r9, r19
bgt+ major_0x0d35c_0xf0
bl panic
major_0x0d35c_0x108
cmplw r16, r19
srwi r16, r16, 2
blt- major_0x0d35c_0x1a0
stw r16, 0x00d0(r17)
major_0x0d35c_0x118
lwz r16, 0x0064(r26)
lbz r19, 0x0018(r26)
ori r16, r16, 0x10
stw r16, 0x0064(r26)
lwz r17, -0x0440(r1)
lwz r16, 0x0674(r1)
lwz r8, 0x0678(r1)
and r16, r16, r8
or r17, r17, r16
stw r17, -0x0440(r1)
cmpwi r19, 0x00
addi r16, r26, 0x08
bne- major_0x0d35c_0x198
lwz r17, 0x0008(r16)
lwz r18, 0x000c(r16)
stw r17, 0x0008(r18)
stw r18, 0x000c(r17)
li r17, 0x00
stw r17, 0x0008(r16)
stw r17, 0x000c(r16)
lbz r17, 0x0037(r26)
cmpwi r17, 0x01
bne- major_0x0d35c_0x17c
addi r8, r26, 0x20
bl major_0x136c8
major_0x0d35c_0x17c
lwz r18, -0x08f0(r1)
li r16, 0x00
stb r16, 0x0019(r26)
mr r8, r26
bl TaskReadyAsNext
mr r8, r26
bl CalculateTimeslice
major_0x0d35c_0x198
mr r8, r26
bl major_0x14af8
major_0x0d35c_0x1a0
mtlr r27
blr
DeclareMPCall 52, MPCall_52
MPCall_52 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, EventGroup.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8
lwz r16, 0x0010(r31)
cmpwi r16, 0x00
beq- MPCall_52_0xc0
mr r4, r16
li r16, 0x00
stw r16, 0x0010(r31)
lwz r16, 0x0018(r31)
lwz r17, 0x0658(r1)
rlwinm. r18, r16, 0, 27, 27
rlwinm r16, r16, 2, 26, 29
; r1 = kdp
beq+ ReleaseAndReturnZeroFromMPCall
lwz r18, 0x00c8(r17)
lwz r9, 0x0634(r1)
cmpwi r18, 0x00
add r18, r18, r9
bne- MPCall_52_0x84
lwz r18, 0x00d0(r17)
cmpw r18, r3
li r18, 0x00
; r1 = kdp
bne+ ReleaseAndReturnZeroFromMPCall
stw r18, 0x00d0(r17)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_52_0x84
lwzx r19, r16, r18
cmpw r19, r3
li r19, 0x00
; r1 = kdp
bne+ ReleaseAndReturnZeroFromMPCall
stwx r19, r16, r18
li r19, 0x1c
li r9, 0x04
MPCall_52_0xa0
lwzx r8, r19, r18
cmpwi r8, 0x00
bne- MPCall_52_0xb4
subf. r19, r9, r19
bgt+ MPCall_52_0xa0
MPCall_52_0xb4
srwi r19, r19, 2
stw r19, 0x00d0(r17)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_52_0xc0
mfsprg r30, 0
cmpwi r5, 0x00
lwz r19, -0x0008(r30)
beq+ ReleaseAndTimeoutMPCall
lwz r16, 0x0064(r19)
rlwinm. r16, r16, 0, 15, 15
beq- MPCall_52_0xe4
stw r3, -0x0410(r1)
b ReleaseAndReturnMPCallBlueBlocking
MPCall_52_0xe4
mr r8, r19
bl major_0x13e4c
lwz r19, -0x0008(r30)
addi r16, r31, 0x00
addi r17, r19, 0x08
stw r16, 0x0000(r17)
stw r16, 0x0008(r17)
lwz r18, 0x000c(r16)
stw r18, 0x000c(r17)
stw r17, 0x0008(r18)
stw r17, 0x000c(r16)
lwz r18, 0x001c(r31)
addi r18, r18, 0x01
stw r18, 0x001c(r31)
lis r16, 0x7fff
ori r16, r16, 0xffff
addi r30, r19, 0x20
cmpw r5, r16
li r16, 0x02
beq- MPCall_52_0x170
stb r16, 0x0014(r30)
stw r19, 0x0018(r30)
mr r8, r5
; r1 = kdp
; r8 = multiple (pos: /250; neg: /250000)
bl TimebaseTicksPerPeriod
; r8 = hi
; r9 = lo
mr r27, r8
mr r28, r9
bl GetTime
mfxer r16
addc r9, r9, r28
adde r8, r8, r27
mtxer r16
stw r8, 0x0038(r30)
stw r9, 0x003c(r30)
mr r8, r30
bl called_by_init_tmrqs
MPCall_52_0x170
b AlternateMPCallReturnPath
DeclareMPCall 53, MPCall_53
MPCall_53 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, EventGroup.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8
lwz r16, 0x0010(r31)
cmpwi r16, 0x00
beq+ ReleaseAndTimeoutMPCall
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 54, MPCall_54
MPCall_54 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
bl LookupID
cmpwi r9, EventGroup.kIDClass
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r31, r8
li r17, 1
cmpwi r4, 0
cmplwi cr1, r4, 8
lwz r16, 0x0018(r31)
beq- @use_1
bgt- cr1, @use_1
mr r17, r4
@use_1
; r17 = 1 if outside 1-8 (inc) range
ori r16, r16, 0x10
rlwimi r16, r17, 0, 28, 31
stw r16, 0x0018(r31)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 40, MPCall_40
MPCall_40 ; OUTSIDE REFERER
li r8, 0x40
; r1 = kdp
; r8 = size
bl PoolAlloc
; r8 = ptr
mr. r31, r8
beq+ major_0x0af60_0x20
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r31
li r9, 0x03
; r1 = kdp
; r9 = kind
bl MakeID
cmpwi r8, 0x00
bne- MPCall_40_0x48
mr r8, r31
bl PoolFree
b major_0x0af60
MPCall_40_0x48
mfsprg r30, 0
stw r8, 0x0000(r31)
lwz r30, -0x0008(r30)
mr r4, r8
lwz r17, 0x0060(r30)
stw r17, 0x0010(r31)
bl GetTime
stw r8, 0x0038(r31)
stw r9, 0x003c(r31)
lis r17, 0x5449
ori r17, r17, 0x4d45
stw r17, 0x0004(r31)
li r17, 0x03
stb r17, 0x0014(r31)
li r17, 0x00
stb r17, 0x0016(r31)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 41, MPCall_41
MPCall_41 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Timer.kIDClass
mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r8, r3
bl DeleteID
lwz r16, 0x0008(r31)
cmpwi r16, 0x00
beq- MPCall_41_0x48
mr r8, r31
bl major_0x136c8
MPCall_41_0x48
sync
lwz r16, PSA.SchLock + Lock.Count(r1)
cmpwi cr1, r16, 0x00
li r16, 0x00
bne+ cr1, MPCall_41_0x64
mflr r16
bl panic
MPCall_41_0x64
stw r16, PSA.SchLock + Lock.Count(r1)
lwz r8, 0x001c(r31)
cmpwi r8, 0x00
bnel- PoolFree
mr r8, r31
bl PoolFree
b ReturnZeroFromMPCall
DeclareMPCall 30, MPCall_30
MPCall_30 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Timer.kIDClass
mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
lbz r16, 0x0014(r31)
cmpwi r16, 0x03
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r8, r4
; r8 = id
bl LookupID
cmpwi r9, Semaphore.kIDClass
cmpwi cr2, r9, 0x04
beq- MPCall_30_0x80
cmpwi r9, 0x09
beq- cr2, MPCall_30_0x64
bne+ ReleaseAndReturnMPCallInvalidIDErr
stw r4, 0x002c(r31)
stw r5, 0x0030(r31)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_30_0x64
stw r4, 0x0018(r31)
lwz r16, 0x0134(r6)
lwz r17, 0x013c(r6)
stw r5, 0x0020(r31)
stw r16, 0x0024(r31)
stw r17, 0x0028(r31)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_30_0x80
stw r4, 0x0034(r31)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 31, MPCall_31
MPCall_31 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Timer.kIDClass
mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
lbz r16, 0x0014(r31)
cmpwi r16, 0x03
bne+ ReleaseAndReturnMPCallInvalidIDErr
lwz r16, 0x0008(r31)
cmpwi r16, 0x00
mr r8, r31
beq- MPCall_31_0x4c
bl major_0x136c8
MPCall_31_0x4c
lwz r9, 0x001c(r31)
lwz r8, 0x0018(r31)
cmpwi r9, 0x00
cmpwi cr1, r8, 0x00
bne- MPCall_31_0x9c
beq- cr1, MPCall_31_0x9c
; r8 = id
bl LookupID
cmpwi r9, Queue.kIDClass
bne- MPCall_31_0x9c
lwz r9, 0x0024(r8)
li r8, 0x1c
cmpwi r9, 0x00
bne- MPCall_31_0x9c
; r1 = kdp
; r8 = size
bl PoolAlloc
; r8 = ptr
mr. r30, r8
beq+ major_0x0af60
lis r8, 0x6e6f
ori r8, r8, 0x7465
stw r8, 0x0004(r30)
stw r30, 0x001c(r31)
MPCall_31_0x9c
lwz r16, 0x0134(r6)
rlwinm. r9, r16, 0, 29, 29
mr r8, r4
beq- MPCall_31_0xb8
; r1 = kdp
; r8 = multiple (pos: /250; neg: /250000)
bl TimebaseTicksPerPeriod
; r8 = hi
; r9 = lo
mr r4, r8
mr r5, r9
MPCall_31_0xb8
lwz r16, 0x0134(r6)
rlwinm. r8, r16, 0, 30, 30
mfxer r17
beq- MPCall_31_0xdc
lwz r19, 0x003c(r31)
lwz r18, 0x0038(r31)
addc r5, r5, r19
adde r4, r4, r18
mtxer r17
MPCall_31_0xdc
stw r4, 0x0038(r31)
stw r5, 0x003c(r31)
lwz r16, 0x0134(r6)
clrlwi. r16, r16, 0x1f
li r17, 0x00
beq- MPCall_31_0xf8
li r17, 0x01
MPCall_31_0xf8
stb r17, 0x0016(r31)
mr r8, r31
bl called_by_init_tmrqs
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 32, MPCall_32
MPCall_32 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Timer.kIDClass
mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
lbz r16, 0x0017(r31)
cmpwi r16, 0x01
bne- MPCall_32_0x58
lwz r4, 0x0038(r31)
lwz r5, 0x003c(r31)
bl GetTime
mfxer r16
subfc r5, r9, r5
subfe. r4, r8, r4
mtxer r16
bge+ MPCall_32_0x60
MPCall_32_0x58
li r4, 0x00
li r5, 0x00
MPCall_32_0x60
lwz r16, 0x0008(r31)
cmpwi r16, 0x00
mr r8, r31
beq- MPCall_32_0x74
bl major_0x136c8
MPCall_32_0x74
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 64, MPCall_64
MPCall_64 ; OUTSIDE REFERER
li r8, 0x28
; r1 = kdp
; r8 = size
bl PoolAlloc
; r8 = ptr
mr. r31, r8
beq+ major_0x0af60_0x20
lis r16, 0x4b4e
ori r16, r16, 0x4f54
stw r16, 0x0004(r31)
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
li r9, 0x0c
; r1 = kdp
; r9 = kind
bl MakeID
cmpwi r8, 0x00
bne+ MPCall_64_0x50
mr r8, r31
bl PoolFree
b major_0x0af60
MPCall_64_0x50
mfsprg r30, 0
lwz r30, -0x0008(r30)
stw r8, 0x0000(r31)
lwz r17, 0x0060(r30)
stw r17, 0x0008(r31)
mr r4, r8
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 65, MPCall_65
MPCall_65 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Notification.kIDClass
mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r8, r31
bl PoolFree
mr r8, r3
bl DeleteID
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 67, MPCall_67
MPCall_67 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Notification.kIDClass
mr r30, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
bl major_0x0db04
mr r3, r8
b ReleaseAndReturnMPCall
; major_0x0db04
; Xrefs:
; major_0x02ccc
; IntPerfMonitor
; IntThermalEvent
; MPCall_67
; major_0x102c8
; CommonPIHPath
major_0x0db04 ; OUTSIDE REFERER
mflr r29
lwz r16, 0x000c(r30)
lwz r17, 0x0024(r30)
cmplwi r16, 0x00
cmplwi cr1, r17, 0x00
bne- major_0x0db04_0x28
bne- cr1, major_0x0db04_0x28
lwz r18, 0x001c(r30)
cmplwi r18, 0x00
beq- major_0x0db04_0xf0
major_0x0db04_0x28
lwz r8, 0x000c(r30)
cmplwi r8, 0x00
beq- major_0x0db04_0x94
; r8 = id
bl LookupID
cmpwi r9, Queue.kIDClass
mr r31, r8
bne- major_0x0db04_0xfc
lwz r16, 0x0024(r31)
cmpwi r16, 0x00
lwz r17, 0x0028(r31)
beq- major_0x0db04_0x68
mr. r8, r17
lwz r17, 0x0008(r17)
beq- major_0x0db04_0xf0
stw r17, 0x0028(r31)
b major_0x0db04_0x78
major_0x0db04_0x68
li r8, 0x1c
bl PoolAlloc_with_crset
cmpwi r8, 0x00
beq- major_0x0db04_0xe4
major_0x0db04_0x78
lwz r16, 0x0010(r30)
lwz r17, 0x0014(r30)
lwz r18, 0x0018(r30)
stw r16, 0x0010(r8)
stw r17, 0x0014(r8)
stw r18, 0x0018(r8)
bl major_0x0c8b4
major_0x0db04_0x94
lwz r8, 0x0024(r30)
cmplwi r8, 0x00
beq- major_0x0db04_0xb4
; r8 = id
bl LookupID
cmpwi r9, Semaphore.kIDClass
mr r31, r8
bne- major_0x0db04_0xfc
bl major_0x0ccf4
major_0x0db04_0xb4
lwz r8, 0x001c(r30)
cmplwi r8, 0x00
beq- major_0x0db04_0xd8
; r8 = id
bl LookupID
cmpwi r9, EventGroup.kIDClass
mr r31, r8
bne- major_0x0db04_0xfc
lwz r8, 0x0020(r30)
bl major_0x0d35c
major_0x0db04_0xd8
mtlr r29
li r8, 0x00
blr
major_0x0db04_0xe4
mtlr r29
li r8, -0x726e
blr
major_0x0db04_0xf0
mtlr r29
li r8, -0x7272
blr
major_0x0db04_0xfc
mtlr r29
li r8, -0x7273
blr
DeclareMPCall 66, MPCall_66
MPCall_66 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Notification.kIDClass
mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
mr r8, r4
; r8 = id
bl LookupID
cmpwi r9, Semaphore.kIDClass
cmpwi cr2, r9, 0x04
beq- MPCall_66_0x74
cmpwi r9, 0x09
beq- cr2, MPCall_66_0x58
bne+ ReleaseAndReturnMPCallInvalidIDErr
stw r4, 0x001c(r31)
stw r5, 0x0020(r31)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_66_0x58
stw r4, 0x000c(r31)
lwz r16, 0x0134(r6)
lwz r17, 0x013c(r6)
stw r5, 0x0010(r31)
stw r16, 0x0014(r31)
stw r17, 0x0018(r31)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_66_0x74
stw r4, 0x0024(r31)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
DeclareMPCall 128, MPCall_128
MPCall_128 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
mr r8, r3
; r8 = id
bl LookupID
cmpwi r9, Notification.kIDClass
mr r31, r8
bne+ ReleaseAndReturnMPCallInvalidIDErr
cmpwi r4, 0x04
cmpwi cr1, r4, 0x09
beq- MPCall_128_0x40
beq- cr1, MPCall_128_0x58
b major_0x0b054
MPCall_128_0x40
lwz r16, 0x0134(r6)
lwz r17, 0x013c(r6)
stw r5, 0x0010(r31)
stw r16, 0x0014(r31)
stw r17, 0x0018(r31)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_128_0x58
stw r5, 0x0020(r31)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
; major_0x0dce8
; Xrefs:
; major_0x02ccc
; MPCall_16
; major_0x0c8b4
; major_0x0ccf4
; MPCall_21
; MPCall_28
; MPCall_26
; MPCall_50
; major_0x0d35c
major_0x0dce8 ; OUTSIDE REFERER
lwz r9, -0x0410(r1)
lwz r19, -0x08f0(r1)
cmpw r8, r9
bnelr-
li r9, -0x01
mflr r24
stw r9, -0x0410(r1)
lbz r17, 0x0018(r19)
cmpwi r17, 0x00
addi r16, r19, 0x08
bne- major_0x0dce8_0x70
lwz r17, 0x0008(r16)
lwz r18, 0x000c(r16)
stw r17, 0x0008(r18)
stw r18, 0x000c(r17)
li r17, 0x00
stw r17, 0x0008(r16)
stw r17, 0x000c(r16)
lbz r17, 0x0037(r19)
cmpwi r17, 0x01
bne- major_0x0dce8_0x60
addi r8, r19, 0x20
bl major_0x136c8
lwz r19, -0x08f0(r1)
major_0x0dce8_0x60
li r16, 0x01
stb r16, 0x0019(r19)
lwz r8, -0x08f0(r1)
bl TaskReadyAsPrev
major_0x0dce8_0x70
lwz r8, -0x08f0(r1)
mtlr r24
b major_0x14af8
DeclareMPCall 120, MPCall_120
MPCall_120 ; OUTSIDE REFERER
_Lock PSA.SchLock, scratch1=r16, scratch2=r17
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
mr r31, r8
cmpwi r9, 0x05
cmpwi cr1, r9, 0x04
beq- MPCall_120_0x33c
beq- cr1, MPCall_120_0x248
cmpwi r9, 0x09
cmpwi cr1, r9, 0x06
beq- MPCall_120_0x1b4
beq- cr1, MPCall_120_0x10c
cmpwi r9, 0x0c
cmpwi cr1, r9, 0x08
beq- MPCall_120_0x58
beq- cr1, MPCall_120_0x3d8
b major_0x0b054
MPCall_120_0x58
lis r8, 0x0c
ori r8, r8, 0x01
cmpw r8, r4
bne+ major_0x0b054
cmplwi r5, 0x00
bne- MPCall_120_0xa0
lis r16, 0x0c
ori r16, r16, 0x01
stw r16, 0x0134(r6)
lwz r16, 0x0008(r31)
stw r16, 0x013c(r6)
lwz r16, 0x0004(r31)
stw r16, 0x0144(r6)
lwz r16, 0x000c(r31)
stw r16, 0x014c(r6)
li r16, 0x10
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0xa0
cmplwi r5, 0x10
bne- MPCall_120_0xd4
lwz r16, 0x0010(r31)
stw r16, 0x0134(r6)
lwz r16, 0x0014(r31)
stw r16, 0x013c(r6)
lwz r16, 0x0018(r31)
stw r16, 0x0144(r6)
lwz r16, 0x001c(r31)
stw r16, 0x014c(r6)
li r16, 0x10
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0xd4
cmplwi r5, 0x20
bne- MPCall_120_0xf8
lwz r16, 0x0020(r31)
stw r16, 0x0134(r6)
lwz r16, 0x0024(r31)
stw r16, 0x013c(r6)
li r16, 0x08
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0xf8
cmpwi r5, 0x28
bne+ major_0x0b054
li r16, 0x00
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x10c
lis r8, 0x06
ori r8, r8, 0x01
cmpw r8, r4
bne+ major_0x0b054
cmplwi r5, 0x00
bne- MPCall_120_0x154
lis r16, 0x06
ori r16, r16, 0x01
stw r16, 0x0134(r6)
lwz r16, 0x0010(r31)
stw r16, 0x013c(r6)
lwz r16, 0x0004(r31)
stw r16, 0x0144(r6)
lwz r16, 0x0020(r31)
stw r16, 0x014c(r6)
li r16, 0x10
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x154
cmplwi r5, 0x10
bne- MPCall_120_0x1a0
addi r17, r31, 0x00
lwz r18, 0x0008(r31)
li r16, 0x00
cmpw r17, r18
beq- MPCall_120_0x174
lwz r16, -0x0008(r18)
MPCall_120_0x174
stw r16, 0x0134(r6)
lwz r16, 0x0018(r31)
cmpwi r16, 0x00
beq- MPCall_120_0x188
lwz r16, 0x0000(r16)
MPCall_120_0x188
stw r16, 0x013c(r6)
lwz r16, 0x0014(r31)
stw r16, 0x0144(r6)
li r16, 0x0c
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x1a0
cmpwi r5, 0x1c
bne+ major_0x0b054
li r16, 0x00
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x1b4
lis r8, 0x09
ori r8, r8, 0x01
cmpw r8, r4
bne+ major_0x0b054
cmplwi r5, 0x00
bne- MPCall_120_0x1fc
lis r16, 0x09
ori r16, r16, 0x01
stw r16, 0x0134(r6)
lwz r16, 0x0014(r31)
stw r16, 0x013c(r6)
lwz r16, 0x0004(r31)
stw r16, 0x0144(r6)
lwz r16, 0x001c(r31)
stw r16, 0x014c(r6)
li r16, 0x10
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x1fc
cmplwi r5, 0x10
bne- MPCall_120_0x234
addi r17, r31, 0x00
lwz r18, 0x0008(r31)
li r16, 0x00
cmpw r17, r18
beq- MPCall_120_0x21c
lwz r16, -0x0008(r18)
MPCall_120_0x21c
stw r16, 0x0134(r6)
lwz r16, 0x0010(r31)
stw r16, 0x013c(r6)
li r16, 0x08
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x234
cmpwi r5, 0x18
bne+ major_0x0b054
li r16, 0x00
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x248
lis r8, 0x04
ori r8, r8, 0x01
cmpw r8, r4
bne+ major_0x0b054
cmplwi r5, 0x00
bne- MPCall_120_0x290
lis r16, 0x04
ori r16, r16, 0x01
stw r16, 0x0134(r6)
lwz r16, 0x0020(r31)
stw r16, 0x013c(r6)
lwz r16, 0x0004(r31)
stw r16, 0x0144(r6)
lwz r16, 0x002c(r31)
stw r16, 0x014c(r6)
li r16, 0x10
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x290
cmplwi r5, 0x10
bne- MPCall_120_0x2ec
addi r17, r31, 0x00
lwz r18, 0x0008(r31)
li r16, 0x00
cmpw r17, r18
beq- MPCall_120_0x2b0
lwz r16, -0x0008(r18)
MPCall_120_0x2b0
stw r16, 0x0134(r6)
lwz r16, 0x0030(r31)
stw r16, 0x013c(r6)
lwz r16, 0x0024(r31)
stw r16, 0x0144(r6)
lwz r18, 0x0018(r31)
addi r17, r31, 0x10
li r16, 0x00
cmpw r17, r18
beq- MPCall_120_0x2dc
lwz r16, 0x0010(r18)
MPCall_120_0x2dc
stw r16, 0x014c(r6)
li r16, 0x10
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x2ec
cmplwi r5, 0x20
bne- MPCall_120_0x328
lwz r18, 0x0018(r31)
addi r17, r31, 0x10
li r16, 0x00
cmpw r17, r18
li r17, 0x00
beq- MPCall_120_0x314
lwz r16, 0x0014(r18)
lwz r17, 0x0018(r18)
MPCall_120_0x314
stw r16, 0x0134(r6)
stw r17, 0x013c(r6)
li r16, 0x08
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x328
cmpwi r5, 0x28
bne+ major_0x0b054
li r16, 0x00
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x33c
lis r8, 0x05
ori r8, r8, 0x01
cmpw r8, r4
bne+ major_0x0b054
cmplwi r5, 0x00
bne- MPCall_120_0x384
lis r16, 0x05
ori r16, r16, 0x01
stw r16, 0x0134(r6)
lwz r16, 0x0018(r31)
stw r16, 0x013c(r6)
lwz r16, 0x0004(r31)
stw r16, 0x0144(r6)
lwz r16, 0x001c(r31)
stw r16, 0x014c(r6)
li r16, 0x10
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x384
cmplwi r5, 0x10
bne- MPCall_120_0x3c4
addi r17, r31, 0x00
lwz r18, 0x0008(r31)
li r16, 0x00
cmpw r17, r18
beq- MPCall_120_0x3a4
lwz r16, -0x0008(r18)
MPCall_120_0x3a4
stw r16, 0x0134(r6)
lwz r16, 0x0014(r31)
stw r16, 0x013c(r6)
lwz r16, 0x0010(r31)
stw r16, 0x0144(r6)
li r16, 0x0c
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x3c4
cmpwi r5, 0x1c
bne+ major_0x0b054
li r16, 0x00
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x3d8
lis r8, 0x08
ori r8, r8, 0x01
cmpw r8, r4
bne+ major_0x0b054
cmplwi r5, 0x00
bne- MPCall_120_0x420
lis r16, 0x08
ori r16, r16, 0x01
stw r16, 0x0134(r6)
lwz r16, 0x0074(r31)
stw r16, 0x013c(r6)
lwz r16, 0x0070(r31)
stw r16, 0x0144(r6)
lwz r16, 0x000c(r31)
stw r16, 0x014c(r6)
li r16, 0x10
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x420
cmplwi r5, 0x10
bne- MPCall_120_0x454
lwz r16, 0x0030(r31)
stw r16, 0x0134(r6)
lwz r16, 0x0034(r31)
stw r16, 0x013c(r6)
lwz r16, 0x0038(r31)
stw r16, 0x0144(r6)
lwz r16, 0x003c(r31)
stw r16, 0x014c(r6)
li r16, 0x10
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x454
cmplwi r5, 0x20
bne- MPCall_120_0x488
lwz r16, 0x0040(r31)
stw r16, 0x0134(r6)
lwz r16, 0x0044(r31)
stw r16, 0x013c(r6)
lwz r16, 0x0048(r31)
stw r16, 0x0144(r6)
lwz r16, 0x004c(r31)
stw r16, 0x014c(r6)
li r16, 0x10
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x488
cmplwi r5, 0x30
bne- MPCall_120_0x4bc
lwz r16, 0x0050(r31)
stw r16, 0x0134(r6)
lwz r16, 0x0054(r31)
stw r16, 0x013c(r6)
lwz r16, 0x0058(r31)
stw r16, 0x0144(r6)
lwz r16, 0x005c(r31)
stw r16, 0x014c(r6)
li r16, 0x10
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x4bc
cmplwi r5, 0x40
bne- MPCall_120_0x4f0
lwz r16, 0x0060(r31)
stw r16, 0x0134(r6)
lwz r16, 0x0064(r31)
stw r16, 0x013c(r6)
lwz r16, 0x0068(r31)
stw r16, 0x0144(r6)
lwz r16, 0x006c(r31)
stw r16, 0x014c(r6)
li r16, 0x10
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall
MPCall_120_0x4f0
cmpwi r5, 0x50
bne+ major_0x0b054
li r16, 0x00
stw r16, 0x0154(r6)
; r1 = kdp
b ReleaseAndReturnZeroFromMPCall