mirror of
https://github.com/elliotnunn/powermac-rom.git
synced 2024-12-01 09:50:31 +00:00
299 lines
5.2 KiB
ArmAsm
299 lines
5.2 KiB
ArmAsm
|
;_______________________________________________________________________
|
||
|
; NanoKernel Opaque ID Index
|
||
|
;
|
||
|
; Creates opaque structure IDs and stores them in the Pool. An opaque
|
||
|
; ID maps back to the (type, pointer) pair passed to MakeID.
|
||
|
;
|
||
|
; This abstraction is very important to the Multiprocessing Services.
|
||
|
;
|
||
|
; Rene on comp.sys.mac.programmer.help, 26 Oct 01:
|
||
|
;
|
||
|
; Total opaque IDs - The number of IDs currently in use. All MP
|
||
|
; objects: address spaces, areas, processors, memory coherence groups,
|
||
|
; queues, semaphores, critical regions, event groups, timers,
|
||
|
; notifications, etc. are assigned an ID when created, and they are
|
||
|
; accessed by way of this ID. The kernel presently handles 65,000
|
||
|
; simultaneous IDs with a bit pattern reuse probability of 1 in 4
|
||
|
; billion.
|
||
|
;_______________________________________________________________________
|
||
|
|
||
|
Local_Panic set *
|
||
|
b panic
|
||
|
|
||
|
|
||
|
|
||
|
; ARG KDP *r1
|
||
|
|
||
|
InitIDIndex
|
||
|
mflr r23
|
||
|
|
||
|
li r8, Index.Size
|
||
|
bl PoolAlloc
|
||
|
|
||
|
mr. r22, r8
|
||
|
stw r8, PSA.IndexPtr(r1)
|
||
|
beq+ Local_Panic
|
||
|
|
||
|
li r9, 0
|
||
|
stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1)
|
||
|
|
||
|
sth r9, Index.HalfOne(r22)
|
||
|
sth r9, Index.HalfTwo(r22)
|
||
|
|
||
|
lisori r9, Index.kSignature
|
||
|
stw r9, Index.Signature(r22)
|
||
|
|
||
|
|
||
|
; Then what the hell is this?
|
||
|
li r8, 0xfd8
|
||
|
bl PoolAlloc
|
||
|
|
||
|
cmpwi r8, 0
|
||
|
stw r8, Index.IDsPtr(r22)
|
||
|
beq+ Local_Panic
|
||
|
|
||
|
mtlr r23
|
||
|
|
||
|
li r9, 0x00
|
||
|
sth r9, 0x0000(r8)
|
||
|
li r9, 0x1fa
|
||
|
sth r9, 0x0002(r8)
|
||
|
lisori r9, 'IDs '
|
||
|
stw r9, 0x0004(r8)
|
||
|
blr
|
||
|
|
||
|
|
||
|
|
||
|
; ARG void *r8, IDClass r9
|
||
|
; RET ID r8
|
||
|
|
||
|
MakeID
|
||
|
lwz r18, -0x0a98(r1)
|
||
|
lhz r19, 0x0000(r18)
|
||
|
mr r21, r19
|
||
|
|
||
|
@_c
|
||
|
lwz r18, -0x0a98(r1)
|
||
|
rlwinm r20, r19, 25, 23, 29
|
||
|
addi r20, r20, 0x08
|
||
|
clrlwi. r19, r19, 0x17
|
||
|
lwzx r18, r18, r20
|
||
|
slwi r22, r19, 3
|
||
|
addi r20, r18, 0x08
|
||
|
cmpwi r18, 0x00
|
||
|
add r22, r22, r20
|
||
|
bne- @_48
|
||
|
li r19, 0x00
|
||
|
b @_c
|
||
|
|
||
|
@_3c
|
||
|
add r20, r20, r19
|
||
|
cmpw r20, r21
|
||
|
beq- @_70
|
||
|
|
||
|
@_48
|
||
|
lbz r23, 0x0000(r22)
|
||
|
cmpwi r23, 0x00
|
||
|
beq- @_f0
|
||
|
addi r19, r19, 0x01
|
||
|
cmpwi cr1, r19, 0x1fa
|
||
|
addi r22, r22, 0x08
|
||
|
lhz r20, 0x0000(r18)
|
||
|
blt+ cr1, @_3c
|
||
|
addi r19, r20, 0x200
|
||
|
b @_c
|
||
|
|
||
|
@_70
|
||
|
lwz r18, -0x0a98(r1)
|
||
|
mr r21, r8
|
||
|
lhz r19, 0x0002(r18)
|
||
|
mr r22, r9
|
||
|
addi r19, r19, 0x200
|
||
|
rlwinm. r20, r19, 25, 23, 29
|
||
|
li r8, 0x00
|
||
|
beqlr-
|
||
|
mflr r23
|
||
|
li r8, 0xfd8
|
||
|
|
||
|
; r1 = kdp
|
||
|
; r8 = size
|
||
|
bl PoolAlloc
|
||
|
; r8 = ptr
|
||
|
|
||
|
mr. r18, r8
|
||
|
mtlr r23
|
||
|
li r8, 0x00
|
||
|
beqlr-
|
||
|
lwz r17, -0x0a98(r1)
|
||
|
lhz r19, 0x0002(r17)
|
||
|
addi r19, r19, 0x200
|
||
|
rlwinm r20, r19, 25, 23, 29
|
||
|
addi r20, r20, 0x08
|
||
|
sth r19, 0x0002(r17)
|
||
|
stwx r18, r20, r17
|
||
|
sth r19, 0x0000(r18)
|
||
|
li r9, 0x1fa
|
||
|
sth r9, 0x0002(r18)
|
||
|
lis r9, 0x4944
|
||
|
ori r9, r9, 0x7320
|
||
|
stw r9, 0x0004(r18)
|
||
|
li r19, 0x00
|
||
|
mr r8, r21
|
||
|
mr r9, r22
|
||
|
addi r22, r18, 0x08
|
||
|
|
||
|
@_f0
|
||
|
stw r8, 0x0004(r22)
|
||
|
stb r9, 0x0000(r22)
|
||
|
lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1)
|
||
|
addi r9, r9, 0x01
|
||
|
stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1)
|
||
|
lhz r20, 0x0000(r18)
|
||
|
lhz r8, 0x0002(r22)
|
||
|
lwz r21, -0x0a98(r1)
|
||
|
add r19, r19, r20
|
||
|
addi r8, r8, 0x01
|
||
|
lhz r20, 0x0002(r18)
|
||
|
sth r8, 0x0002(r22)
|
||
|
addi r20, r20, -0x01
|
||
|
rlwimi. r8, r19, 16, 0, 15
|
||
|
sth r20, 0x0002(r18)
|
||
|
sth r19, 0x0000(r21)
|
||
|
bnelr+
|
||
|
lhz r8, 0x0002(r22)
|
||
|
addi r8, r8, 0x01
|
||
|
sth r8, 0x0002(r22)
|
||
|
rlwimi r8, r19, 16, 0, 15
|
||
|
blr
|
||
|
|
||
|
|
||
|
|
||
|
; ARG ID r8
|
||
|
|
||
|
align 5
|
||
|
|
||
|
DeleteID
|
||
|
rlwinm r20, r8, 9, 23, 29
|
||
|
lwz r18, -0x0a98(r1)
|
||
|
addi r20, r20, 0x08
|
||
|
rlwinm. r19, r8, 16, 23, 31
|
||
|
lwzx r18, r18, r20
|
||
|
cmplwi cr1, r19, 0x1fa
|
||
|
cmpwi r18, 0x00
|
||
|
addi r20, r18, 0x08
|
||
|
slwi r22, r19, 3
|
||
|
add r22, r22, r20
|
||
|
clrlwi r20, r8, 0x10
|
||
|
li r8, 0x00
|
||
|
bgelr- cr1
|
||
|
beqlr-
|
||
|
lbz r19, 0x0000(r22)
|
||
|
lhz r23, 0x0002(r22)
|
||
|
cmpwi r19, 0x00
|
||
|
cmpw cr1, r23, r20
|
||
|
beqlr-
|
||
|
bnelr- cr1
|
||
|
lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1)
|
||
|
addi r9, r9, -0x01
|
||
|
stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1)
|
||
|
lhz r20, 0x0002(r18)
|
||
|
stb r8, 0x0000(r22)
|
||
|
addi r20, r20, 0x01
|
||
|
li r8, 0x01
|
||
|
sth r20, 0x0002(r18)
|
||
|
blr
|
||
|
|
||
|
|
||
|
|
||
|
; ARG ID r8
|
||
|
; RET Ptr r8, IDClass r9
|
||
|
|
||
|
align 5
|
||
|
|
||
|
LookupID
|
||
|
rlwinm r20, r8, 9, 23, 29
|
||
|
lwz r18, -0x0a98(r1)
|
||
|
addi r20, r20, 0x08
|
||
|
rlwinm. r19, r8, 16, 23, 31
|
||
|
lwzx r18, r18, r20
|
||
|
cmplwi cr1, r19, 0x1fa
|
||
|
cmpwi r18, 0x00
|
||
|
addi r20, r18, 0x08
|
||
|
slwi r22, r19, 3
|
||
|
add r22, r22, r20
|
||
|
clrlwi r20, r8, 0x10
|
||
|
li r8, 0x00
|
||
|
li r9, 0x00
|
||
|
bgelr- cr1
|
||
|
beqlr-
|
||
|
lbz r19, 0x0000(r22)
|
||
|
lhz r23, 0x0002(r22)
|
||
|
cmpwi r19, 0x00
|
||
|
cmpw cr1, r23, r20
|
||
|
beqlr-
|
||
|
bnelr- cr1
|
||
|
lwz r8, 0x0004(r22)
|
||
|
mr r9, r19
|
||
|
blr
|
||
|
|
||
|
|
||
|
|
||
|
; ARG ID r8, IDClass r9
|
||
|
; RET ID r8
|
||
|
|
||
|
align 5
|
||
|
|
||
|
GetNextIDOfClass
|
||
|
rlwinm r20, r8, 9, 23, 29
|
||
|
lwz r18, -0x0a98(r1)
|
||
|
addi r20, r20, 0x08
|
||
|
rlwinm. r19, r8, 16, 23, 31
|
||
|
lwzx r18, r18, r20
|
||
|
cmplwi cr1, r19, 0x1fa
|
||
|
cmpwi r18, 0x00
|
||
|
cmpwi cr2, r8, 0x00
|
||
|
addi r20, r18, 0x08
|
||
|
slwi r22, r19, 3
|
||
|
li r8, 0x00
|
||
|
bgelr- cr1
|
||
|
beqlr-
|
||
|
add r22, r22, r20
|
||
|
bne- cr2, @_48
|
||
|
|
||
|
@_3c
|
||
|
lbz r23, 0x0000(r22)
|
||
|
cmpwi r23, 0x00
|
||
|
bne- @_8c
|
||
|
|
||
|
@_48
|
||
|
addi r19, r19, 0x01
|
||
|
cmpwi r19, 0x1fa
|
||
|
addi r22, r22, 0x08
|
||
|
blt+ @_3c
|
||
|
lhz r20, 0x0000(r18)
|
||
|
addi r20, r20, 0x200
|
||
|
rlwinm. r20, r20, 25, 23, 29
|
||
|
lwz r18, -0x0a98(r1)
|
||
|
beqlr-
|
||
|
addi r20, r20, 0x08
|
||
|
li r19, 0x00
|
||
|
lwzx r18, r18, r20
|
||
|
cmpwi r18, 0x00
|
||
|
addi r22, r18, 0x08
|
||
|
bne+ @_3c
|
||
|
li r8, 0x00
|
||
|
blr
|
||
|
|
||
|
@_8c
|
||
|
cmpwi r9, 0x00
|
||
|
cmpw cr1, r9, r23
|
||
|
beq- @_9c
|
||
|
bne+ cr1, @_48
|
||
|
|
||
|
@_9c
|
||
|
lhz r20, 0x0000(r18)
|
||
|
lhz r8, 0x0002(r22)
|
||
|
add r19, r19, r20
|
||
|
rlwimi r8, r19, 16, 0, 15
|
||
|
blr
|