Diff
checker
Text
Text
Images
Documents
Excel
Folders
Legal
Enterprise
Desktop
Pricing
Sign in
Download Diffchecker Desktop
Compare text
Find the difference between two text files
Tools
History
Real-time editor
Hide whitespace changes
Hide unchanged lines
Disable line wrap
Layout
Split
Unified
Diff precision
Smart
Word
Char
Text styles
Change appearance
Syntax highlighting
Choose syntax
Ignore
Transform text
Go to first change
Edit input
Diffchecker Desktop
The most secure way to run Diffchecker. Get the Diffchecker Desktop app: your diffs never leave your computer!
Get Desktop
Untitled diff
Created
8 years ago
Diff never expires
Clear
Export
Share
Explain
35 removals
Lines
Total
Removed
Characters
Total
Removed
To continue using this feature, upgrade to
Diff
checker
Pro
View Pricing
213 lines
Copy
38 additions
Lines
Total
Added
Characters
Total
Added
To continue using this feature, upgrade to
Diff
checker
Pro
View Pricing
215 lines
Copy
__int64 __usercall si_pmu_set_lpoclk@<rax>(char a1@<al>, __int64 a2@<rdi>, __int64 a3@<rsi>, char a4)
__int64 __usercall si_pmu_set_lpoclk@<rax>(char a1@<al>, __int64 a2@<rdi>, __int64 a3@<rsi>, char a4)
{
{
__int64 v4; // rbx
__int64 v4; // rbx
__int64 v5; // r14
__int64 v5; // r14
__int64 result; // rax
__int64 result; // rax
int v7; // er13
int v7; // er13
int v8; // er15
int v8; // er15
bool v9; // zf
bool v9; // zf
__int64 v10; // r15
__int64 v10; // r15
__int64 v11; // rsi
__int64 v11; // rsi
int v12; // ecx
int v12; // ecx
__int64 v13; // r15
__int64 v13; // r15
__int64 v14; // rsi
__int64 v14; // rsi
__int64 v15; // rax
__int64 v15; // rax
__int64 v16; // rax
__int64 v16; // rax
unsigned int v17; // ebx
unsigned int v17; // ebx
__int64 v18; // rsi
__int64 v18; // rsi
__int64 v19; // rdi
__int64 v19; // rdi
__int64 v20; // rax
__int64 v20; // rax
__int64 v21; // rax
__int64 v21; // rax
int v22; // eax
int v22; // eax
__int64 v23; // rsi
__int64 v23; // rsi
__int64 v24; // rdi
__int64 v24; // rdi
__int64 v25; // rax
__int64 v25; // rax
unsigned int v26; // ebx
unsigned int v26; // ebx
__int64 v27; // rsi
__int64 v27; // rsi
__int64 v28; // rdi
__int64 v28; // rdi
__int64 v29; // rax
__int64 v29; // rax
Copy
Copied
Copy
Copied
int v3
0
; // eax
char v30; // ST00_1
signed __int64 v3
1
; // rdx
int v3
1
; // eax
__int64 v3
2
; // rax
signed __int64 v3
2
; // rdx
unsigned int v3
3
; // ebx
__int64 v3
3
; // rax
__int64 v3
4
; // rsi
unsigned int v3
4
; // ebx
__int64 v3
5
; // rdi
__int64 v3
5
; // rsi
__int64 v3
6
; // rax
__int64 v3
6
; // rdi
char v3
7
; // [rsp-8h] [rbp-30h]
__int64 v3
7
; // rax
char v3
8
; // [rsp-8h] [rbp-30h]
Copy
Copied
Copy
Copied
v3
7
= a1;
v3
8
= a1;
v4 = a3;
v4 = a3;
v5 = a2;
v5 = a2;
result = getintvar(*(_QWORD *)(a2 + 184), "boardflags3");
result = getintvar(*(_QWORD *)(a2 + 184), "boardflags3");
if ( (_DWORD)result )
if ( (_DWORD)result )
{
{
v7 = getintvar(*(_QWORD *)(a2 + 184), "boardflags3");
v7 = getintvar(*(_QWORD *)(a2 + 184), "boardflags3");
v8 = getintvar(*(_QWORD *)(a2 + 184), "boardflags3");
v8 = getintvar(*(_QWORD *)(a2 + 184), "boardflags3");
result = getintvar(*(_QWORD *)(a2 + 184), "boardflags3");
result = getintvar(*(_QWORD *)(a2 + 184), "boardflags3");
if ( v7 & 0x8000000 )
if ( v7 & 0x8000000 )
{
{
v12 = *(_DWORD *)(a2 + 60);
v12 = *(_DWORD *)(a2 + 60);
if ( v12 != 43602 && v12 != 43462 )
if ( v12 != 43602 && v12 != 43462 )
{
{
si_pmu_chipcontrol(a2, 0LL, 0x200000LL, 0x200000LL);
si_pmu_chipcontrol(a2, 0LL, 0x200000LL, 0x200000LL);
si_gci_chipcontrol(a2, 6LL, 2LL, 2LL);
si_gci_chipcontrol(a2, 6LL, 2LL, 2LL);
}
}
else
else
{
{
si_pmu_chipcontrol(a2, 2LL, 0x40000000LL, ~(32 * (_DWORD)result) & 0x40000000);
si_pmu_chipcontrol(a2, 2LL, 0x40000000LL, ~(32 * (_DWORD)result) & 0x40000000);
}
}
v13 = a3;
v13 = a3;
if ( *(_DWORD *)(a2 + 20) >= 35 && *(_BYTE *)(a2 + 28) & 0x40 )
if ( *(_DWORD *)(a2 + 20) >= 35 && *(_BYTE *)(a2 + 28) & 0x40 )
v14 = (unsigned int)si_findcoreidx(a2, 2087LL, 0LL);
v14 = (unsigned int)si_findcoreidx(a2, 2087LL, 0LL);
else
else
v14 = 0LL;
v14 = 0LL;
v15 = si_corereg_addr(a2, v14, 1544LL);
v15 = si_corereg_addr(a2, v14, 1544LL);
v16 = read_bpt_reg(v4, v15, 4LL);
v16 = read_bpt_reg(v4, v15, 4LL);
if ( !(v16 & 0x100) )
if ( !(v16 & 0x100) )
{
{
v17 = 0;
v17 = 0;
do
do
{
{
IODelay(1000LL);
IODelay(1000LL);
if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 )
if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 )
{
{
v19 = v5;
v19 = v5;
v18 = (unsigned int)si_findcoreidx(v5, 2087LL, 0LL);
v18 = (unsigned int)si_findcoreidx(v5, 2087LL, 0LL);
}
}
else
else
{
{
v18 = 0LL;
v18 = 0LL;
v19 = v5;
v19 = v5;
}
}
v20 = si_corereg_addr(v19, v18, 1544LL);
v20 = si_corereg_addr(v19, v18, 1544LL);
v21 = read_bpt_reg(v13, v20, 4LL);
v21 = read_bpt_reg(v13, v20, 4LL);
++v17;
++v17;
}
}
while ( !(v21 & 0x100) && v17 < 0x3E8 );
while ( !(v21 & 0x100) && v17 < 0x3E8 );
if ( v17 >= 0x3E8 )
if ( v17 >= 0x3E8 )
{
{
osl_wificc_logDebug((unsigned __int64)"External LPO is not available\n");
osl_wificc_logDebug((unsigned __int64)"External LPO is not available\n");
return osl_printf("External LPO is not available\n", a4);
return osl_printf("External LPO is not available\n", a4);
}
}
}
}
IODelay(1000LL);
IODelay(1000LL);
v22 = *(_DWORD *)(v5 + 60);
v22 = *(_DWORD *)(v5 + 60);
if ( v22 != 43602 && v22 != 43462 )
if ( v22 != 43602 && v22 != 43462 )
{
{
si_gci_chipcontrol(v5, 6LL, 8LL, 8LL);
si_gci_chipcontrol(v5, 6LL, 8LL, 8LL);
si_gci_chipcontrol(v5, 6LL, 4LL, 0LL);
si_gci_chipcontrol(v5, 6LL, 4LL, 0LL);
IODelay(1000LL);
IODelay(1000LL);
if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 )
if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 )
{
{
v24 = v5;
v24 = v5;
v23 = (unsigned int)si_findcoreidx(v5, 2087LL, 0LL);
v23 = (unsigned int)si_findcoreidx(v5, 2087LL, 0LL);
}
}
else
else
{
{
v23 = 0LL;
v23 = 0LL;
v24 = v5;
v24 = v5;
}
}
v25 = si_corereg_addr(v24, v23, 1536LL);
v25 = si_corereg_addr(v24, v23, 1536LL);
if ( read_bpt_reg(v13, v25, 4LL) & 1 )
if ( read_bpt_reg(v13, v25, 4LL) & 1 )
{
{
v26 = 0;
v26 = 0;
do
do
{
{
IODelay(1000LL);
IODelay(1000LL);
if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 )
if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 )
{
{
v28 = v5;
v28 = v5;
v27 = (unsigned int)si_findcoreidx(v5, 2087LL, 0LL);
v27 = (unsigned int)si_findcoreidx(v5, 2087LL, 0LL);
}
}
else
else
{
{
v27 = 0LL;
v27 = 0LL;
v28 = v5;
v28 = v5;
}
}
v29 = si_corereg_addr(v28, v27, 1536LL);
v29 = si_corereg_addr(v28, v27, 1536LL);
++v26;
++v26;
}
}
while ( read_bpt_reg(v13, v29, 4LL) & 1 && v26 < 0x3E8 );
while ( read_bpt_reg(v13, v29, 4LL) & 1 && v26 < 0x3E8 );
if ( v26 >= 0x3E8 )
if ( v26 >= 0x3E8 )
{
{
osl_wificc_logDebug((unsigned __int64)"External LPO is not set\n");
osl_wificc_logDebug((unsigned __int64)"External LPO is not set\n");
Copy
Copied
Copy
Copied
osl_printf("External LPO is not set\n", v3
7
);
osl_printf("External LPO is not set\n", v3
8);
v3
0
= *(_DWORD *)(v5 + 60);
osl_panic("32KHz LPO Clock not running", v30
);
if ( v3
0
== 43602 || v3
0
== 43462 )
v3
1
= *(_DWORD *)(v5 + 60);
if ( v3
1
== 43602 || v3
1
== 43462 )
return si_pmu_chipcontrol(v5, 2LL, 0x80000LL, 0LL);
return si_pmu_chipcontrol(v5, 2LL, 0x80000LL, 0LL);
Copy
Copied
Copy
Copied
v3
1
= 8LL;
v3
2
= 8LL;
return si_gci_chipcontrol(v5, 6LL, v3
1
, 0LL);
return si_gci_chipcontrol(v5, 6LL, v3
2
, 0LL);
}
}
}
}
}
}
else
else
{
{
si_pmu_chipcontrol(v5, 2LL, 0x80000LL, 0x80000LL);
si_pmu_chipcontrol(v5, 2LL, 0x80000LL, 0x80000LL);
}
}
result = *(unsigned int *)(v5 + 60);
result = *(unsigned int *)(v5 + 60);
if ( (_DWORD)result != 43462 && (_DWORD)result != 43602 )
if ( (_DWORD)result != 43462 && (_DWORD)result != 43602 )
{
{
si_pmu_chipcontrol(v5, 0LL, 0x100000LL, 0LL);
si_pmu_chipcontrol(v5, 0LL, 0x100000LL, 0LL);
Copy
Copied
Copy
Copied
v3
1
= 1LL;
v3
2
= 1LL;
return si_gci_chipcontrol(v5, 6LL, v3
1
, 0LL);
return si_gci_chipcontrol(v5, 6LL, v3
2
, 0LL);
}
}
}
}
else
else
{
{
v9 = (v8 & 0x4000000) == 0;
v9 = (v8 & 0x4000000) == 0;
v10 = a3;
v10 = a3;
if ( !v9 )
if ( !v9 )
{
{
result = *(unsigned int *)(a2 + 60);
result = *(unsigned int *)(a2 + 60);
if ( (_DWORD)result != 43462 && (_DWORD)result != 43602 )
if ( (_DWORD)result != 43462 && (_DWORD)result != 43602 )
{
{
si_pmu_chipcontrol(a2, 0LL, 0x100000LL, 0x100000LL);
si_pmu_chipcontrol(a2, 0LL, 0x100000LL, 0x100000LL);
si_gci_chipcontrol(a2, 6LL, 1LL, 1LL);
si_gci_chipcontrol(a2, 6LL, 1LL, 1LL);
IODelay(1000LL);
IODelay(1000LL);
si_gci_chipcontrol(a2, 6LL, 4LL, 4LL);
si_gci_chipcontrol(a2, 6LL, 4LL, 4LL);
si_gci_chipcontrol(a2, 6LL, 8LL, 0LL);
si_gci_chipcontrol(a2, 6LL, 8LL, 0LL);
IODelay(1000LL);
IODelay(1000LL);
if ( *(_DWORD *)(a2 + 20) >= 35 && *(_BYTE *)(a2 + 28) & 0x40 )
if ( *(_DWORD *)(a2 + 20) >= 35 && *(_BYTE *)(a2 + 28) & 0x40 )
v11 = (unsigned int)si_findcoreidx(a2, 2087LL, 0LL);
v11 = (unsigned int)si_findcoreidx(a2, 2087LL, 0LL);
else
else
v11 = 0LL;
v11 = 0LL;
Copy
Copied
Copy
Copied
v3
2
= si_corereg_addr(a2, v11, 1536LL);
v3
3
= si_corereg_addr(a2, v11, 1536LL);
if ( read_bpt_reg(v4, v3
2
, 4LL) & 1 )
if ( read_bpt_reg(v4, v3
3
, 4LL) & 1 )
goto LABEL_66;
goto LABEL_66;
Copy
Copied
Copy
Copied
v3
3
= 0;
v3
4
= 0;
do
do
{
{
IODelay(1000LL);
IODelay(1000LL);
if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 )
if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 )
{
{
Copy
Copied
Copy
Copied
v3
5
= v5;
v3
6
= v5;
v3
4
= (unsigned int)si_findcoreidx(v5, 2087LL, 0LL);
v3
5
= (unsigned int)si_findcoreidx(v5, 2087LL, 0LL);
}
}
else
else
{
{
Copy
Copied
Copy
Copied
v3
4
= 0LL;
v3
5
= 0LL;
v3
5
= v5;
v3
6
= v5;
}
}
Copy
Copied
Copy
Copied
v3
6
= si_corereg_addr(v3
5
, v3
4
, 1536LL);
v3
7
= si_corereg_addr(v3
6
, v3
5
, 1536LL);
++v3
3
;
++v3
4
;
}
}
Copy
Copied
Copy
Copied
while ( !(read_bpt_reg(v10, v3
6
, 4LL) & 1) && v3
3
< 0x3E8 );
while ( !(read_bpt_reg(v10, v3
7
, 4LL) & 1) && v3
4
< 0x3E8 );
if ( v3
3
< 0x3E8 )
if ( v3
4
< 0x3E8 )
{
{
LABEL_66:
LABEL_66:
si_pmu_chipcontrol(v5, 0LL, 0x200000LL, 0LL);
si_pmu_chipcontrol(v5, 0LL, 0x200000LL, 0LL);
Copy
Copied
Copy
Copied
v3
1
= 2LL;
v3
2
= 2LL;
}
}
else
else
{
{
osl_wificc_logDebug((unsigned __int64)"Internal LPO is not set\n");
osl_wificc_logDebug((unsigned __int64)"Internal LPO is not set\n");
Copy
Copied
Copy
Copied
osl_printf("Internal LPO is not set\n", v3
7
);
osl_printf("Internal LPO is not set\n", v3
8
);
v3
1
= 4LL;
v3
2
= 4LL;
}
}
Copy
Copied
Copy
Copied
return si_gci_chipcontrol(v5, 6LL, v3
1
, 0LL);
return si_gci_chipcontrol(v5, 6LL, v3
2
, 0LL);
}
}
}
}
}
}
}
}
return result;
return result;
}
}
Saved diffs
Original text
Open file
__int64 __usercall si_pmu_set_lpoclk@<rax>(char a1@<al>, __int64 a2@<rdi>, __int64 a3@<rsi>, char a4) { __int64 v4; // rbx __int64 v5; // r14 __int64 result; // rax int v7; // er13 int v8; // er15 bool v9; // zf __int64 v10; // r15 __int64 v11; // rsi int v12; // ecx __int64 v13; // r15 __int64 v14; // rsi __int64 v15; // rax __int64 v16; // rax unsigned int v17; // ebx __int64 v18; // rsi __int64 v19; // rdi __int64 v20; // rax __int64 v21; // rax int v22; // eax __int64 v23; // rsi __int64 v24; // rdi __int64 v25; // rax unsigned int v26; // ebx __int64 v27; // rsi __int64 v28; // rdi __int64 v29; // rax int v30; // eax signed __int64 v31; // rdx __int64 v32; // rax unsigned int v33; // ebx __int64 v34; // rsi __int64 v35; // rdi __int64 v36; // rax char v37; // [rsp-8h] [rbp-30h] v37 = a1; v4 = a3; v5 = a2; result = getintvar(*(_QWORD *)(a2 + 184), "boardflags3"); if ( (_DWORD)result ) { v7 = getintvar(*(_QWORD *)(a2 + 184), "boardflags3"); v8 = getintvar(*(_QWORD *)(a2 + 184), "boardflags3"); result = getintvar(*(_QWORD *)(a2 + 184), "boardflags3"); if ( v7 & 0x8000000 ) { v12 = *(_DWORD *)(a2 + 60); if ( v12 != 43602 && v12 != 43462 ) { si_pmu_chipcontrol(a2, 0LL, 0x200000LL, 0x200000LL); si_gci_chipcontrol(a2, 6LL, 2LL, 2LL); } else { si_pmu_chipcontrol(a2, 2LL, 0x40000000LL, ~(32 * (_DWORD)result) & 0x40000000); } v13 = a3; if ( *(_DWORD *)(a2 + 20) >= 35 && *(_BYTE *)(a2 + 28) & 0x40 ) v14 = (unsigned int)si_findcoreidx(a2, 2087LL, 0LL); else v14 = 0LL; v15 = si_corereg_addr(a2, v14, 1544LL); v16 = read_bpt_reg(v4, v15, 4LL); if ( !(v16 & 0x100) ) { v17 = 0; do { IODelay(1000LL); if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 ) { v19 = v5; v18 = (unsigned int)si_findcoreidx(v5, 2087LL, 0LL); } else { v18 = 0LL; v19 = v5; } v20 = si_corereg_addr(v19, v18, 1544LL); v21 = read_bpt_reg(v13, v20, 4LL); ++v17; } while ( !(v21 & 0x100) && v17 < 0x3E8 ); if ( v17 >= 0x3E8 ) { osl_wificc_logDebug((unsigned __int64)"External LPO is not available\n"); return osl_printf("External LPO is not available\n", a4); } } IODelay(1000LL); v22 = *(_DWORD *)(v5 + 60); if ( v22 != 43602 && v22 != 43462 ) { si_gci_chipcontrol(v5, 6LL, 8LL, 8LL); si_gci_chipcontrol(v5, 6LL, 4LL, 0LL); IODelay(1000LL); if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 ) { v24 = v5; v23 = (unsigned int)si_findcoreidx(v5, 2087LL, 0LL); } else { v23 = 0LL; v24 = v5; } v25 = si_corereg_addr(v24, v23, 1536LL); if ( read_bpt_reg(v13, v25, 4LL) & 1 ) { v26 = 0; do { IODelay(1000LL); if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 ) { v28 = v5; v27 = (unsigned int)si_findcoreidx(v5, 2087LL, 0LL); } else { v27 = 0LL; v28 = v5; } v29 = si_corereg_addr(v28, v27, 1536LL); ++v26; } while ( read_bpt_reg(v13, v29, 4LL) & 1 && v26 < 0x3E8 ); if ( v26 >= 0x3E8 ) { osl_wificc_logDebug((unsigned __int64)"External LPO is not set\n"); osl_printf("External LPO is not set\n", v37); v30 = *(_DWORD *)(v5 + 60); if ( v30 == 43602 || v30 == 43462 ) return si_pmu_chipcontrol(v5, 2LL, 0x80000LL, 0LL); v31 = 8LL; return si_gci_chipcontrol(v5, 6LL, v31, 0LL); } } } else { si_pmu_chipcontrol(v5, 2LL, 0x80000LL, 0x80000LL); } result = *(unsigned int *)(v5 + 60); if ( (_DWORD)result != 43462 && (_DWORD)result != 43602 ) { si_pmu_chipcontrol(v5, 0LL, 0x100000LL, 0LL); v31 = 1LL; return si_gci_chipcontrol(v5, 6LL, v31, 0LL); } } else { v9 = (v8 & 0x4000000) == 0; v10 = a3; if ( !v9 ) { result = *(unsigned int *)(a2 + 60); if ( (_DWORD)result != 43462 && (_DWORD)result != 43602 ) { si_pmu_chipcontrol(a2, 0LL, 0x100000LL, 0x100000LL); si_gci_chipcontrol(a2, 6LL, 1LL, 1LL); IODelay(1000LL); si_gci_chipcontrol(a2, 6LL, 4LL, 4LL); si_gci_chipcontrol(a2, 6LL, 8LL, 0LL); IODelay(1000LL); if ( *(_DWORD *)(a2 + 20) >= 35 && *(_BYTE *)(a2 + 28) & 0x40 ) v11 = (unsigned int)si_findcoreidx(a2, 2087LL, 0LL); else v11 = 0LL; v32 = si_corereg_addr(a2, v11, 1536LL); if ( read_bpt_reg(v4, v32, 4LL) & 1 ) goto LABEL_66; v33 = 0; do { IODelay(1000LL); if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 ) { v35 = v5; v34 = (unsigned int)si_findcoreidx(v5, 2087LL, 0LL); } else { v34 = 0LL; v35 = v5; } v36 = si_corereg_addr(v35, v34, 1536LL); ++v33; } while ( !(read_bpt_reg(v10, v36, 4LL) & 1) && v33 < 0x3E8 ); if ( v33 < 0x3E8 ) { LABEL_66: si_pmu_chipcontrol(v5, 0LL, 0x200000LL, 0LL); v31 = 2LL; } else { osl_wificc_logDebug((unsigned __int64)"Internal LPO is not set\n"); osl_printf("Internal LPO is not set\n", v37); v31 = 4LL; } return si_gci_chipcontrol(v5, 6LL, v31, 0LL); } } } } return result; }
Changed text
Open file
__int64 __usercall si_pmu_set_lpoclk@<rax>(char a1@<al>, __int64 a2@<rdi>, __int64 a3@<rsi>, char a4) { __int64 v4; // rbx __int64 v5; // r14 __int64 result; // rax int v7; // er13 int v8; // er15 bool v9; // zf __int64 v10; // r15 __int64 v11; // rsi int v12; // ecx __int64 v13; // r15 __int64 v14; // rsi __int64 v15; // rax __int64 v16; // rax unsigned int v17; // ebx __int64 v18; // rsi __int64 v19; // rdi __int64 v20; // rax __int64 v21; // rax int v22; // eax __int64 v23; // rsi __int64 v24; // rdi __int64 v25; // rax unsigned int v26; // ebx __int64 v27; // rsi __int64 v28; // rdi __int64 v29; // rax char v30; // ST00_1 int v31; // eax signed __int64 v32; // rdx __int64 v33; // rax unsigned int v34; // ebx __int64 v35; // rsi __int64 v36; // rdi __int64 v37; // rax char v38; // [rsp-8h] [rbp-30h] v38 = a1; v4 = a3; v5 = a2; result = getintvar(*(_QWORD *)(a2 + 184), "boardflags3"); if ( (_DWORD)result ) { v7 = getintvar(*(_QWORD *)(a2 + 184), "boardflags3"); v8 = getintvar(*(_QWORD *)(a2 + 184), "boardflags3"); result = getintvar(*(_QWORD *)(a2 + 184), "boardflags3"); if ( v7 & 0x8000000 ) { v12 = *(_DWORD *)(a2 + 60); if ( v12 != 43602 && v12 != 43462 ) { si_pmu_chipcontrol(a2, 0LL, 0x200000LL, 0x200000LL); si_gci_chipcontrol(a2, 6LL, 2LL, 2LL); } else { si_pmu_chipcontrol(a2, 2LL, 0x40000000LL, ~(32 * (_DWORD)result) & 0x40000000); } v13 = a3; if ( *(_DWORD *)(a2 + 20) >= 35 && *(_BYTE *)(a2 + 28) & 0x40 ) v14 = (unsigned int)si_findcoreidx(a2, 2087LL, 0LL); else v14 = 0LL; v15 = si_corereg_addr(a2, v14, 1544LL); v16 = read_bpt_reg(v4, v15, 4LL); if ( !(v16 & 0x100) ) { v17 = 0; do { IODelay(1000LL); if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 ) { v19 = v5; v18 = (unsigned int)si_findcoreidx(v5, 2087LL, 0LL); } else { v18 = 0LL; v19 = v5; } v20 = si_corereg_addr(v19, v18, 1544LL); v21 = read_bpt_reg(v13, v20, 4LL); ++v17; } while ( !(v21 & 0x100) && v17 < 0x3E8 ); if ( v17 >= 0x3E8 ) { osl_wificc_logDebug((unsigned __int64)"External LPO is not available\n"); return osl_printf("External LPO is not available\n", a4); } } IODelay(1000LL); v22 = *(_DWORD *)(v5 + 60); if ( v22 != 43602 && v22 != 43462 ) { si_gci_chipcontrol(v5, 6LL, 8LL, 8LL); si_gci_chipcontrol(v5, 6LL, 4LL, 0LL); IODelay(1000LL); if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 ) { v24 = v5; v23 = (unsigned int)si_findcoreidx(v5, 2087LL, 0LL); } else { v23 = 0LL; v24 = v5; } v25 = si_corereg_addr(v24, v23, 1536LL); if ( read_bpt_reg(v13, v25, 4LL) & 1 ) { v26 = 0; do { IODelay(1000LL); if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 ) { v28 = v5; v27 = (unsigned int)si_findcoreidx(v5, 2087LL, 0LL); } else { v27 = 0LL; v28 = v5; } v29 = si_corereg_addr(v28, v27, 1536LL); ++v26; } while ( read_bpt_reg(v13, v29, 4LL) & 1 && v26 < 0x3E8 ); if ( v26 >= 0x3E8 ) { osl_wificc_logDebug((unsigned __int64)"External LPO is not set\n"); osl_printf("External LPO is not set\n", v38); osl_panic("32KHz LPO Clock not running", v30); v31 = *(_DWORD *)(v5 + 60); if ( v31 == 43602 || v31 == 43462 ) return si_pmu_chipcontrol(v5, 2LL, 0x80000LL, 0LL); v32 = 8LL; return si_gci_chipcontrol(v5, 6LL, v32, 0LL); } } } else { si_pmu_chipcontrol(v5, 2LL, 0x80000LL, 0x80000LL); } result = *(unsigned int *)(v5 + 60); if ( (_DWORD)result != 43462 && (_DWORD)result != 43602 ) { si_pmu_chipcontrol(v5, 0LL, 0x100000LL, 0LL); v32 = 1LL; return si_gci_chipcontrol(v5, 6LL, v32, 0LL); } } else { v9 = (v8 & 0x4000000) == 0; v10 = a3; if ( !v9 ) { result = *(unsigned int *)(a2 + 60); if ( (_DWORD)result != 43462 && (_DWORD)result != 43602 ) { si_pmu_chipcontrol(a2, 0LL, 0x100000LL, 0x100000LL); si_gci_chipcontrol(a2, 6LL, 1LL, 1LL); IODelay(1000LL); si_gci_chipcontrol(a2, 6LL, 4LL, 4LL); si_gci_chipcontrol(a2, 6LL, 8LL, 0LL); IODelay(1000LL); if ( *(_DWORD *)(a2 + 20) >= 35 && *(_BYTE *)(a2 + 28) & 0x40 ) v11 = (unsigned int)si_findcoreidx(a2, 2087LL, 0LL); else v11 = 0LL; v33 = si_corereg_addr(a2, v11, 1536LL); if ( read_bpt_reg(v4, v33, 4LL) & 1 ) goto LABEL_66; v34 = 0; do { IODelay(1000LL); if ( *(_DWORD *)(v5 + 20) >= 35 && *(_BYTE *)(v5 + 28) & 0x40 ) { v36 = v5; v35 = (unsigned int)si_findcoreidx(v5, 2087LL, 0LL); } else { v35 = 0LL; v36 = v5; } v37 = si_corereg_addr(v36, v35, 1536LL); ++v34; } while ( !(read_bpt_reg(v10, v37, 4LL) & 1) && v34 < 0x3E8 ); if ( v34 < 0x3E8 ) { LABEL_66: si_pmu_chipcontrol(v5, 0LL, 0x200000LL, 0LL); v32 = 2LL; } else { osl_wificc_logDebug((unsigned __int64)"Internal LPO is not set\n"); osl_printf("Internal LPO is not set\n", v38); v32 = 4LL; } return si_gci_chipcontrol(v5, 6LL, v32, 0LL); } } } } return result; }
Find difference