diff options
author | Iru Cai <mytbk920423@gmail.com> | 2018-12-14 08:33:25 +0800 |
---|---|---|
committer | Iru Cai <mytbk920423@gmail.com> | 2019-11-17 15:10:42 +0800 |
commit | ff91ecb2596c58ebe1cc9325316c504773dc93b1 (patch) | |
tree | d6e116375444fa113198dbf0b76b9c08807d6463 /src | |
parent | 35ed65cdf6bb4d13d8eba29d4d1770163516631f (diff) | |
download | coreboot-ff91ecb2596c58ebe1cc9325316c504773dc93b1.tar.xz |
add pei_svc
Diffstat (limited to 'src')
-rw-r--r-- | src/northbridge/intel/haswell/Makefile.inc | 4 | ||||
-rw-r--r-- | src/northbridge/intel/haswell/mrc.asm | 394 | ||||
-rw-r--r-- | src/northbridge/intel/haswell/pei_svc.asm | 381 |
3 files changed, 400 insertions, 379 deletions
diff --git a/src/northbridge/intel/haswell/Makefile.inc b/src/northbridge/intel/haswell/Makefile.inc index 8b4e35e37b..86f5ada5a5 100644 --- a/src/northbridge/intel/haswell/Makefile.inc +++ b/src/northbridge/intel/haswell/Makefile.inc @@ -32,7 +32,9 @@ romstage-y += report_platform.c smm-y += finalize.c romstage-libs += $(obj)/mrc.o -$(obj)/mrc.o: $(src)/northbridge/intel/haswell/mrc.asm +romstage-libs += $(obj)/pei_svc.o +$(obj)/%.o: $(src)/northbridge/intel/haswell/%.asm + echo "NASM $@" nasm -f elf32 -o $@ $< romstage-y += mrc_utils.c diff --git a/src/northbridge/intel/haswell/mrc.asm b/src/northbridge/intel/haswell/mrc.asm index 137a5f1bba..3f5255377a 100644 --- a/src/northbridge/intel/haswell/mrc.asm +++ b/src/northbridge/intel/haswell/mrc.asm @@ -22,6 +22,14 @@ extern mrc_sku_5da5 extern fcn_fffa0250 extern printGuid +; PEI services +extern PeiInstallPpi +extern PeiLocatePpi +extern PeiNotifyPpi +extern PeiGetBootMode +extern PeiGetHobList +extern PeiCreateHob + mrc_entry: mov ecx, esp mov esp, 0xff800000 @@ -295,91 +303,6 @@ pop esi pop ebp ret -fcn_fffa03fd: ; not directly referenced -push ebp -mov ebp, esp -mov eax, dword [ebp + 8] -mov eax, dword [eax] -cmp dword [eax - 4], 0xfeadb00b -je short loc_fffa0410 ; je 0xfffa0410 - -loc_fffa040e: ; not directly referenced -jmp short loc_fffa040e ; jmp 0xfffa040e - -loc_fffa0410: ; not directly referenced -mov edx, dword [eax + 0x254] -mov eax, dword [ebp + 0xc] -mov dword [eax], edx -xor eax, eax -pop ebp -ret - -fcn_fffa041f: ; not directly referenced -push ebp -mov ebp, esp -mov eax, dword [ebp + 8] -mov eax, dword [eax] -cmp dword [eax - 4], 0xfeadb00b -je short loc_fffa0432 ; je 0xfffa0432 - -loc_fffa0430: ; not directly referenced -jmp short loc_fffa0430 ; jmp 0xfffa0430 - -loc_fffa0432: ; not directly referenced -mov edx, dword [eax + 0x68] -mov eax, dword [ebp + 0xc] -mov dword [eax], edx -xor eax, eax -pop ebp -ret - -fcn_fffa043e: ; not directly referenced -push ebp -mov ebp, esp -push edi -push esi -mov eax, dword [ebp + 8] -push ebx -mov eax, dword [eax] -cmp dword [eax - 4], 0xfeadb00b -jne short loc_fffa0462 ; jne 0xfffa0462 -lea edx, [eax - 4] -mov ebx, 3 -mov eax, dword [eax + 0x250] -jmp short loc_fffa0464 ; jmp 0xfffa0464 - -loc_fffa0462: ; not directly referenced -jmp short loc_fffa0462 ; jmp 0xfffa0462 - -loc_fffa0464: ; not directly referenced -cmp eax, 0x13 -ja short loc_fffa0494 ; ja 0xfffa0494 -inc eax -mov esi, dword [ebp + 0xc] -imul ecx, eax, 0xc -mov dword [edx + 0x254], eax -lea edi, [edx + ecx + 0x158] -mov ecx, ebx -rep movsd ; rep movsd dword es:[edi], dword ptr [esi] -mov esi, dword [ebp + 0xc] -mov ecx, dword [esi] -add esi, 0xc -test ecx, ecx -mov dword [ebp + 0xc], esi -jns short loc_fffa0464 ; jns 0xfffa0464 -xor eax, eax -jmp short loc_fffa0499 ; jmp 0xfffa0499 - -loc_fffa0494: ; not directly referenced -mov eax, 0x80000009 - -loc_fffa0499: ; not directly referenced -pop ebx -pop esi -pop edi -pop ebp -ret - fcn_fffa049e: ; not directly referenced push ebp mov ebp, esp @@ -412,7 +335,7 @@ mov ebp, esp pop ebp ret -fcn_fffa04e7: ; not directly referenced +dummy_func: push ebp xor eax, eax mov ebp, esp @@ -2388,282 +2311,6 @@ pop edi pop ebp ret -fcn_fffa29ba: ; not directly referenced -push ebp -mov ebp, esp -push edi -push esi -push ebx -lea esp, [esp - 0x1c] -mov ecx, dword [ebp + 8] -mov edi, dword [ebp + 0x10] -mov edx, dword [ebp + 0xc] -movzx eax, di -mov esi, dword [ebp + 0x14] -mov ebx, dword [ecx] -cmp dword [ebx - 4], 0xfeadb00b -jne short loc_fffa29f2 ; jne 0xfffa29f2 -add eax, 4 -mov dword [ebp - 0x1c], edx -call mrc_alloc -test eax, eax -mov edx, dword [ebp - 0x1c] -jne short loc_fffa29f4 ; jne 0xfffa29f4 -jmp short loc_fffa2a1e ; jmp 0xfffa2a1e - -loc_fffa29f2: ; not directly referenced -jmp short loc_fffa29f2 ; jmp 0xfffa29f2 - -loc_fffa29f4: ; not directly referenced -lea ecx, [eax + 4] -mov dword [esi], ecx -mov word [eax + 4], dx -mov edx, dword [esi] -mov word [edx + 2], di -mov edx, dword [esi] -mov dword [edx + 4], 0 -mov edx, dword [ebx + 0x254] -mov dword [eax], edx -mov dword [ebx + 0x254], eax -xor eax, eax -jmp short loc_fffa2a23 ; jmp 0xfffa2a23 - -loc_fffa2a1e: ; not directly referenced -mov eax, 0x80000009 - -loc_fffa2a23: ; not directly referenced -lea esp, [esp + 0x1c] -pop ebx -pop esi -pop edi -pop ebp -ret - -fcn_fffa2a76: ; not directly referenced -push ebp -mov ebp, esp -push edi -push esi -push ebx -lea esp, [esp - 0x1c] -mov edx, dword [ebp + 8] -mov eax, dword [ebp + 0xc] -mov edx, dword [edx] -cmp dword [edx - 4], 0xfeadb00b -jne short loc_fffa2aa4 ; jne 0xfffa2aa4 -lea ecx, [edx - 4] -mov edx, dword [edx + 0x15c] -mov dword [ebp - 0x20], edx -mov dword [ebp - 0x1c], ecx -xor edx, edx -jmp short loc_fffa2aea ; jmp 0xfffa2aea - -loc_fffa2aa4: ; not directly referenced -jmp short loc_fffa2aa4 ; jmp 0xfffa2aa4 - -loc_fffa2aa6: ; not directly referenced -imul ecx, edx, 0xc -mov ebx, dword [ebp - 0x1c] -lea edi, [ebx + ecx + 0x70] -mov ebx, dword [eax] -mov ecx, dword [edi + 4] -mov esi, dword [ecx + 4] -cmp dword [eax + 4], esi -jne short loc_fffa2ad7 ; jne 0xfffa2ad7 -cmp ebx, dword [ecx] -jne short loc_fffa2ad7 ; jne 0xfffa2ad7 -mov esi, dword [eax + 8] -mov ebx, dword [eax + 0xc] -xor esi, dword [ecx + 8] -xor ebx, dword [ecx + 0xc] -or esi, ebx -sete cl -movzx ecx, cl -jmp short loc_fffa2ad9 ; jmp 0xfffa2ad9 - -loc_fffa2ad7: ; not directly referenced -xor ecx, ecx - -loc_fffa2ad9: ; not directly referenced -test ecx, ecx -je short loc_fffa2ae9 ; je 0xfffa2ae9 -mov eax, dword [ebp + 0x18] -mov edx, dword [edi + 8] -mov dword [eax], edx -xor eax, eax -jmp short loc_fffa2af9 ; jmp 0xfffa2af9 - -loc_fffa2ae9: ; not directly referenced -inc edx - -loc_fffa2aea: ; not directly referenced -cmp edx, dword [ebp - 0x20] -jl short loc_fffa2aa6 ; jl 0xfffa2aa6 -call printGuid -mov eax, 0x8000000e - -loc_fffa2af9: ; not directly referenced -lea esp, [esp + 0x1c] -pop ebx -pop esi -pop edi -pop ebp -ret - -fcn_fffa2b02: ; not directly referenced -push ebp -mov ebp, esp -push edi -push esi -push ebx -lea esp, [esp - 0x1c] -mov edx, dword [ebp + 8] -mov ebx, dword [edx] -cmp dword [ebx - 4], 0xfeadb00b -jne short loc_fffa2b1f ; jne 0xfffa2b1f -sub ebx, 4 -jmp short loc_fffa2b21 ; jmp 0xfffa2b21 - -loc_fffa2b1f: ; not directly referenced -jmp short loc_fffa2b1f ; jmp 0xfffa2b1f - -loc_fffa2b21: ; not directly referenced -mov edi, dword [ebx + 0x160] -xor esi, esi -mov dword [ebp - 0x1c], edi -jmp short loc_fffa2b87 ; jmp 0xfffa2b87 - -loc_fffa2b2e: ; not directly referenced -mov edx, dword [ebp + 0xc] -mov eax, dword [edx + 4] -imul edx, esi, 0xc -mov edi, dword [eax + 4] -mov edx, dword [ebx + edx + 0x74] -cmp dword [edx + 4], edi -mov ecx, dword [edx] -jne short loc_fffa2b5f ; jne 0xfffa2b5f -cmp ecx, dword [eax] -jne short loc_fffa2b5f ; jne 0xfffa2b5f -mov ecx, dword [edx + 8] -mov edx, dword [edx + 0xc] -xor ecx, dword [eax + 8] -xor edx, dword [eax + 0xc] -or ecx, edx -sete al -movzx eax, al -jmp short loc_fffa2b61 ; jmp 0xfffa2b61 - -loc_fffa2b5f: ; not directly referenced -xor eax, eax - -loc_fffa2b61: ; not directly referenced -test eax, eax -je short loc_fffa2b86 ; je 0xfffa2b86 -push eax -push eax -push ref_fffc9eec ; push 0xfffc9eec -push ref_fffcc505 ; push 0xfffcc505 -call mrc_printk ; call 0xfffa1253 -mov edx, dword [ebp + 0xc] -mov eax, dword [edx + 4] -call printGuid -add esp, 0x10 -jmp short loc_fffa2b8c ; jmp 0xfffa2b8c - -loc_fffa2b86: ; not directly referenced -inc esi - -loc_fffa2b87: ; not directly referenced -cmp esi, dword [ebp - 0x1c] -jne short loc_fffa2b2e ; jne 0xfffa2b2e - -loc_fffa2b8c: ; not directly referenced -cmp esi, dword [ebx + 0x160] -jne short loc_fffa2bc0 ; jne 0xfffa2bc0 -cmp esi, 0x13 -jbe short loc_fffa2bb7 ; jbe 0xfffa2bb7 -push eax -push eax -push ref_fffc9eec ; push 0xfffc9eec -push ref_fffcc519 ; push 0xfffcc519 -call mrc_printk ; call 0xfffa1253 -add esp, 0x10 -mov eax, 0x80000009 -jmp near loc_fffa2c49 ; jmp 0xfffa2c49 - -loc_fffa2bb7: ; not directly referenced -lea eax, [esi + 1] -mov dword [ebx + 0x160], eax - -loc_fffa2bc0: ; not directly referenced -imul esi, esi, 0xc -mov ecx, 3 -lea eax, [ebx + esi + 0x70] -mov esi, dword [ebp + 0xc] -mov edi, eax -rep movsd ; rep movsd dword es:[edi], dword ptr [esi] -xor esi, esi -jmp short loc_fffa2c2c ; jmp 0xfffa2c2c - -loc_fffa2bd7: ; not directly referenced -imul eax, esi, 0xc -mov edi, dword [ebp + 0xc] -lea ecx, [ebx + eax + 0x164] -mov eax, dword [edi + 4] -mov edx, dword [ecx + 4] -mov edi, dword [edx] -mov dword [ebp - 0x1c], edi -mov edi, dword [eax + 4] -cmp dword [edx + 4], edi -jne short loc_fffa2c14 ; jne 0xfffa2c14 -mov edi, dword [ebp - 0x1c] -cmp edi, dword [eax] -jne short loc_fffa2c14 ; jne 0xfffa2c14 -mov edi, dword [edx + 8] -mov edx, dword [edx + 0xc] -xor edi, dword [eax + 8] -xor edx, dword [eax + 0xc] -or edi, edx -sete al -movzx eax, al -jmp short loc_fffa2c16 ; jmp 0xfffa2c16 - -loc_fffa2c14: ; not directly referenced -xor eax, eax - -loc_fffa2c16: ; not directly referenced -test eax, eax -je short loc_fffa2c2b ; je 0xfffa2c2b -mov eax, dword [ebp + 0xc] -push edi -push dword [eax + 8] -push ecx -push dword [ebp + 8] -call dword [ecx + 8] ; ucall -add esp, 0x10 - -loc_fffa2c2b: ; not directly referenced -inc esi - -loc_fffa2c2c: ; not directly referenced -cmp esi, dword [ebx + 0x254] -jb short loc_fffa2bd7 ; jb 0xfffa2bd7 -mov edx, dword [ebp + 0xc] -mov eax, dword [edx] -add edx, 0xc -test eax, eax -mov dword [ebp + 0xc], edx -jns loc_fffa2b21 ; jns 0xfffa2b21 -xor eax, eax - -loc_fffa2c49: ; not directly referenced -lea esp, [ebp - 0xc] -pop ebx -pop esi -pop edi -pop ebp -ret - do_raminit: push ebp xor edx, edx @@ -3197,19 +2844,19 @@ mov byte [ebp - 0x62f], 1 lea eax, [ebp - 0x5d4] mov dword [ebp - 0x278], 0xfeadb00b mov dword [ebp - 0x200], eax -mov dword [ebp - 0x25c], fcn_fffa2b02 ; mov dword [ebp - 0x25c], 0xfffa2b02 +mov dword [ebp - 0x25c], PeiInstallPpi lea eax, [ebp - 0x526] -mov dword [ebp - 0x254], fcn_fffa2a76 ; mov dword [ebp - 0x254], 0xfffa2a76 +mov dword [ebp - 0x254], PeiLocatePpi mov dword [ebp - 0x1f4], eax -mov dword [ebp - 0x250], fcn_fffa043e ; mov dword [ebp - 0x250], 0xfffa043e +mov dword [ebp - 0x250], PeiNotifyPpi lea eax, [ebp - 0x5dc] -mov dword [ebp - 0x24c], fcn_fffa041f ; mov dword [ebp - 0x24c], 0xfffa041f +mov dword [ebp - 0x24c], PeiGetBootMode mov dword [ebp - 0x1e8], eax -mov dword [ebp - 0x244], fcn_fffa03fd ; mov dword [ebp - 0x244], 0xfffa03fd +mov dword [ebp - 0x244], PeiGetHobList lea eax, [ebp - 0x4c0] -mov dword [ebp - 0x240], fcn_fffa29ba ; mov dword [ebp - 0x240], 0xfffa29ba +mov dword [ebp - 0x240], PeiCreateHob mov dword [ebp - 0x1dc], eax -mov dword [ebp - 0x230], fcn_fffa04e7 ; mov dword [ebp - 0x230], 0xfffa04e7 +mov dword [ebp - 0x230], dummy_func lea eax, [ebp - 0x565] mov dword [ebp - 0x224], memcpy ; mov dword [ebp - 0x224], 0xfffa1178 mov dword [ebp - 0x1d0], eax @@ -53189,9 +52836,6 @@ dd fcn_fffc5b3c dd fcn_fffc5b27 dd fcn_fffc5b14 -ref_fffc9eec: -db 'install_ppi',0x00 - ref_fffc9ef8: dd 0x05010400 dd 0x07030602 @@ -55774,12 +55418,6 @@ dd loc_fffc85f0 ref_fffcc46a: db 'Copy SPD for Channel %d Dimm %d',0x0a,0x00 -ref_fffcc505: -db '%s: overwrite GUID ',0x00 - -ref_fffcc519: -db '%s: no room for a new PPI',0x0a,0x00 - ref_fffcc534: db 'System Agent: Starting up...',0x0a,0x00 diff --git a/src/northbridge/intel/haswell/pei_svc.asm b/src/northbridge/intel/haswell/pei_svc.asm new file mode 100644 index 0000000000..364b1d1407 --- /dev/null +++ b/src/northbridge/intel/haswell/pei_svc.asm @@ -0,0 +1,381 @@ +global PeiInstallPpi +global PeiLocatePpi +global PeiNotifyPpi +global PeiGetBootMode +global PeiGetHobList +global PeiCreateHob + +extern mrc_alloc +extern mrc_printk +extern printGuid + +PeiGetHobList: +push ebp +mov ebp, esp +mov eax, dword [ebp + 8] +mov eax, dword [eax] +cmp dword [eax - 4], 0xfeadb00b +je short loc_fffa0410 + +loc_fffa040e: +jmp short loc_fffa040e + +loc_fffa0410: +mov edx, dword [eax + 0x254] +mov eax, dword [ebp + 0xc] +mov dword [eax], edx +xor eax, eax +pop ebp +ret + +PeiGetBootMode: +push ebp +mov ebp, esp +mov eax, dword [ebp + 8] +mov eax, dword [eax] +cmp dword [eax - 4], 0xfeadb00b +je short loc_fffa0432 + +loc_fffa0430: +jmp short loc_fffa0430 + +loc_fffa0432: +mov edx, dword [eax + 0x68] +mov eax, dword [ebp + 0xc] +mov dword [eax], edx +xor eax, eax +pop ebp +ret + +PeiCreateHob: +push ebp +mov ebp, esp +push edi +push esi +push ebx +lea esp, [esp - 0x1c] +mov ecx, dword [ebp + 8] +mov edi, dword [ebp + 0x10] +mov edx, dword [ebp + 0xc] +movzx eax, di +mov esi, dword [ebp + 0x14] +mov ebx, dword [ecx] +cmp dword [ebx - 4], 0xfeadb00b +jne short loc_fffa29f2 +add eax, 4 +mov dword [ebp - 0x1c], edx +call mrc_alloc +test eax, eax +mov edx, dword [ebp - 0x1c] +jne short loc_fffa29f4 +jmp short loc_fffa2a1e + +loc_fffa29f2: +jmp short loc_fffa29f2 + +loc_fffa29f4: +lea ecx, [eax + 4] +mov dword [esi], ecx +mov word [eax + 4], dx +mov edx, dword [esi] +mov word [edx + 2], di +mov edx, dword [esi] +mov dword [edx + 4], 0 +mov edx, dword [ebx + 0x254] +mov dword [eax], edx +mov dword [ebx + 0x254], eax +xor eax, eax +jmp short loc_fffa2a23 + +loc_fffa2a1e: +mov eax, 0x80000009 + +loc_fffa2a23: +lea esp, [esp + 0x1c] +pop ebx +pop esi +pop edi +pop ebp +ret + +PeiNotifyPpi: +push ebp +mov ebp, esp +push edi +push esi +mov eax, dword [ebp + 8] +push ebx +mov eax, dword [eax] +cmp dword [eax - 4], 0xfeadb00b +jne short loc_fffa0462 +lea edx, [eax - 4] +mov ebx, 3 +mov eax, dword [eax + 0x250] +jmp short loc_fffa0464 + +loc_fffa0462: +jmp short loc_fffa0462 + +loc_fffa0464: +cmp eax, 0x13 +ja short loc_fffa0494 +inc eax +mov esi, dword [ebp + 0xc] +imul ecx, eax, 0xc +mov dword [edx + 0x254], eax +lea edi, [edx + ecx + 0x158] +mov ecx, ebx +rep movsd +mov esi, dword [ebp + 0xc] +mov ecx, dword [esi] +add esi, 0xc +test ecx, ecx +mov dword [ebp + 0xc], esi +jns short loc_fffa0464 +xor eax, eax +jmp short loc_fffa0499 + +loc_fffa0494: +mov eax, 0x80000009 + +loc_fffa0499: +pop ebx +pop esi +pop edi +pop ebp +ret + +PeiLocatePpi: +push ebp +mov ebp, esp +push edi +push esi +push ebx +lea esp, [esp - 0x1c] +mov edx, dword [ebp + 8] +mov eax, dword [ebp + 0xc] +mov edx, dword [edx] +cmp dword [edx - 4], 0xfeadb00b +jne short loc_fffa2aa4 +lea ecx, [edx - 4] +mov edx, dword [edx + 0x15c] +mov dword [ebp - 0x20], edx +mov dword [ebp - 0x1c], ecx +xor edx, edx +jmp short loc_fffa2aea + +loc_fffa2aa4: +jmp short loc_fffa2aa4 + +loc_fffa2aa6: +imul ecx, edx, 0xc +mov ebx, dword [ebp - 0x1c] +lea edi, [ebx + ecx + 0x70] +mov ebx, dword [eax] +mov ecx, dword [edi + 4] +mov esi, dword [ecx + 4] +cmp dword [eax + 4], esi +jne short loc_fffa2ad7 +cmp ebx, dword [ecx] +jne short loc_fffa2ad7 +mov esi, dword [eax + 8] +mov ebx, dword [eax + 0xc] +xor esi, dword [ecx + 8] +xor ebx, dword [ecx + 0xc] +or esi, ebx +sete cl +movzx ecx, cl +jmp short loc_fffa2ad9 + +loc_fffa2ad7: +xor ecx, ecx + +loc_fffa2ad9: +test ecx, ecx +je short loc_fffa2ae9 +mov eax, dword [ebp + 0x18] +mov edx, dword [edi + 8] +mov dword [eax], edx +xor eax, eax +jmp short loc_fffa2af9 + +loc_fffa2ae9: +inc edx + +loc_fffa2aea: +cmp edx, dword [ebp - 0x20] +jl short loc_fffa2aa6 +call printGuid +mov eax, 0x8000000e + +loc_fffa2af9: +lea esp, [esp + 0x1c] +pop ebx +pop esi +pop edi +pop ebp +ret + +PeiInstallPpi: +push ebp +mov ebp, esp +push edi +push esi +push ebx +lea esp, [esp - 0x1c] +mov edx, dword [ebp + 8] +mov ebx, dword [edx] +cmp dword [ebx - 4], 0xfeadb00b +jne short loc_fffa2b1f +sub ebx, 4 +jmp short loc_fffa2b21 + +loc_fffa2b1f: +jmp short loc_fffa2b1f + +loc_fffa2b21: +mov edi, dword [ebx + 0x160] +xor esi, esi +mov dword [ebp - 0x1c], edi +jmp short loc_fffa2b87 + +loc_fffa2b2e: +mov edx, dword [ebp + 0xc] +mov eax, dword [edx + 4] +imul edx, esi, 0xc +mov edi, dword [eax + 4] +mov edx, dword [ebx + edx + 0x74] +cmp dword [edx + 4], edi +mov ecx, dword [edx] +jne short loc_fffa2b5f +cmp ecx, dword [eax] +jne short loc_fffa2b5f +mov ecx, dword [edx + 8] +mov edx, dword [edx + 0xc] +xor ecx, dword [eax + 8] +xor edx, dword [eax + 0xc] +or ecx, edx +sete al +movzx eax, al +jmp short loc_fffa2b61 + +loc_fffa2b5f: +xor eax, eax + +loc_fffa2b61: +test eax, eax +je short loc_fffa2b86 +push eax +push eax +push ref_fffc9eec +push ref_fffcc505 +call mrc_printk +mov edx, dword [ebp + 0xc] +mov eax, dword [edx + 4] +call printGuid +add esp, 0x10 +jmp short loc_fffa2b8c + +loc_fffa2b86: +inc esi + +loc_fffa2b87: +cmp esi, dword [ebp - 0x1c] +jne short loc_fffa2b2e + +loc_fffa2b8c: +cmp esi, dword [ebx + 0x160] +jne short loc_fffa2bc0 +cmp esi, 0x13 +jbe short loc_fffa2bb7 +push eax +push eax +push ref_fffc9eec +push ref_fffcc519 +call mrc_printk +add esp, 0x10 +mov eax, 0x80000009 +jmp near loc_fffa2c49 + +loc_fffa2bb7: +lea eax, [esi + 1] +mov dword [ebx + 0x160], eax + +loc_fffa2bc0: +imul esi, esi, 0xc +mov ecx, 3 +lea eax, [ebx + esi + 0x70] +mov esi, dword [ebp + 0xc] +mov edi, eax +rep movsd +xor esi, esi +jmp short loc_fffa2c2c + +loc_fffa2bd7: +imul eax, esi, 0xc +mov edi, dword [ebp + 0xc] +lea ecx, [ebx + eax + 0x164] +mov eax, dword [edi + 4] +mov edx, dword [ecx + 4] +mov edi, dword [edx] +mov dword [ebp - 0x1c], edi +mov edi, dword [eax + 4] +cmp dword [edx + 4], edi +jne short loc_fffa2c14 +mov edi, dword [ebp - 0x1c] +cmp edi, dword [eax] +jne short loc_fffa2c14 +mov edi, dword [edx + 8] +mov edx, dword [edx + 0xc] +xor edi, dword [eax + 8] +xor edx, dword [eax + 0xc] +or edi, edx +sete al +movzx eax, al +jmp short loc_fffa2c16 + +loc_fffa2c14: +xor eax, eax + +loc_fffa2c16: +test eax, eax +je short loc_fffa2c2b +mov eax, dword [ebp + 0xc] +push edi +push dword [eax + 8] +push ecx +push dword [ebp + 8] +call dword [ecx + 8] +add esp, 0x10 + +loc_fffa2c2b: +inc esi + +loc_fffa2c2c: +cmp esi, dword [ebx + 0x254] +jb short loc_fffa2bd7 +mov edx, dword [ebp + 0xc] +mov eax, dword [edx] +add edx, 0xc +test eax, eax +mov dword [ebp + 0xc], edx +jns loc_fffa2b21 +xor eax, eax + +loc_fffa2c49: +lea esp, [ebp - 0xc] +pop ebx +pop esi +pop edi +pop ebp +ret + +ref_fffc9eec: +db 'install_ppi',0x00 + +ref_fffcc505: +db '%s: overwrite GUID ',0x00 + +ref_fffcc519: +db '%s: no room for a new PPI',0x0a,0x00 + |