1,11 → 1,26 |
; |
; HWM abstract interface, provide: |
; hwm_init, hwm_get_params, hwm_enable, hwm_temps, hwm_rpms, hwm_voltages, hwm_chip_name |
; |
|
|
if SMBus eq yes |
include 'SMBus.inc' |
end if |
|
include 'hwm_wb.inc' |
include 'hwm_it87.inc' |
include 'hwm_uguru.inc' |
;include 'hwm_via686.inc' |
|
uglobal |
hwm_enable:db 0 ; 0 - no, 1 - Winbond, 2 - ITE |
temps db 0,0, 0,0, 0,0 ; ãðàäóñ, äåñÿòûå, ãðàäóñ, ... |
rpms dd 0, 0, 0 ; fan1, fan2, fan3 |
hwm_enable: |
dd 0 ; 0 - no, 1 - Winbond, 2 - ITE, ... see HWMProbe list |
hwm_temps: |
db 0,0, 0,0, 0,0 ; ãðàäóñ, äåñÿòûå, ãðàäóñ, ... |
hwm_rpms: |
dd 0, 0, 0, 0, 0 ; fan1, fan2, fan3, ... |
hwm_voltages: |
Vcore dd 0.0 |
Vin0 dd 0.0 |
Vin1 dd 0.0 |
13,68 → 28,126 |
Vin2 dd 0.0 |
V12 dd 0.0 |
V5 dd 0.0 |
vol8 dd 0.0 |
vol9 dd 0.0 |
vol10 dd 0.0 |
vol11 dd 0.0 |
acc_type db 0 ; 0 - ISA Bus, 1 - SMBus, 2 - other |
endg |
|
IO_Read dd isaRead ; In : al - addr, out : al - value |
IO_Write dd isaWrite ; In : al - addr, bl - value |
|
hwm_unk db 9, 'Not found' |
hwm_chip_name dd hwm_unk |
|
; NOTE !!! |
; HWMProbe - ñïèñîê, ïðîöåäóð ïðîâåðêè ÷èïîâ, çàêàí÷èâàåòñÿ |
; íóëåâûì äâîéíûì ñëîâîì |
; HWMGetParam - ñïèñîê, ïðîöåäóð ïîëó÷åíèÿ ïàðàìåòðîâ |
; îáà ýòè ñïèñêà äîëæíû ñîîòâåòñòâîâàòü äðóã äðóãó ïî |
; ïî ïîðÿäêó ïðîöåäóð |
HWMProbe: dd wb_init |
dd it87_init |
dd uGuru_init |
dd 0 ; <- êîíåö ñïèñêà |
|
HWMGetParam: dd wb_getparam |
dd it87_getparam |
dd uGuru_getparam |
|
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= |
hwm_init: |
; Ïðîâåðêà íàëè÷èÿ è èíèöèàëèçàöèÿ |
pusha |
; Èùåì äàò÷èêè íà øèíå ISA |
call isaInit |
jc @f |
call chips_probe |
cmp byte[hwm_enable], 0 |
jne .exit |
@@: call isaClose |
|
mov eax, 46 ; ðåçåðâèðóåì 0x295 è 0x296 ïîðòû |
xor ebx, ebx |
mov ecx, 0x295 |
mov edx, 0x296 |
int 0x40 |
; Èùåì äàò÷èêè íà øèíå SMBus |
inc byte [acc_type] |
if SMBus eq yes |
call smbInit |
jc @f |
call chips_probe |
cmp byte[hwm_enable], 0 |
jne .exit |
@@: call smbClose |
end if |
; Èùåì äàò÷èêè íà ñîáñòâåííîé øèíå (LPC etc) |
inc byte [acc_type] |
call chips_probe |
|
.exit: popa |
ret |
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= |
chips_probe: |
; Íàõîäèì íóæíûé ÷èï |
; Out : hwm_enable = !0 if found, else hwm_enable not changed |
cld ; Paranoia |
mov esi, HWMProbe |
@@: lodsd |
test eax, eax |
jz hwm_ports_ok |
hwm_no: |
mov eax, 46 ; îñâîáîæäàåì 0x295 è 0x296 ïîðòû |
xor ebx, ebx |
inc ebx |
mov ecx, 0x295 |
mov edx, 0x296 |
int 0x40 |
popa |
jz @f ; Êîíåö ñïèñêà |
call eax |
jc @b |
sub esi, HWMProbe |
shr esi, 2 |
mov dword[hwm_enable], esi |
@@: ret |
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= |
hwm_get_params: |
pusha |
mov eax, [hwm_enable] |
test eax, eax |
jz @f |
dec eax |
sal eax, 2 |
call dword[eax + HWMGetParam] |
@@: popa |
ret |
hwm_ports_ok: |
|
call wb_init |
jc not_wb |
mov byte [hwm_enable], 1 |
call wb_get_name |
jmp hwm_ok |
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= |
; ISA interface |
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= |
isaRead: |
push edx |
mov dx, 0x295 |
out dx, al |
inc edx |
in al, dx |
pop edx |
ret |
|
not_wb: call it87_init |
jc hwm_no |
mov byte [hwm_enable], 2 |
call it87_get_name |
isaWrite: |
push edx |
mov dx, 0x295 |
out dx, al |
inc edx |
mov al, bl |
out dx, al |
pop edx |
ret |
|
hwm_ok: mov [hwm_chip_name], edx |
popa |
isaInit: |
; Out : CF = 0 if Ok |
; ðåçåðâèðóåì 0x295 è 0x296 ïîðòû |
mov ecx, 0x295 |
mov edx, 0x296 |
call ReservePorts |
; jc @f |
; mov [IO_Read], isaRead |
; mov [IO_Write], isaWrite |
; @@: |
ret |
;---------------------------------------------------- |
hwm_get_params: |
; Âûçûâàòü òîëüêî åñëè íàéäåí |
pusha |
mov al, [hwm_enable] |
dec al |
jnz @f |
call wb_get_temp |
call wb_get_fan_speed |
mov edi, wb_coeff |
call wb_get_volt |
fld dword[V12] |
fld dword[wb_n12v_const] |
faddp st1, st0 |
fstp dword[V12] |
popa |
|
isaClose: |
; îñâîáîæäàåì 0x295 è 0x296 ïîðòû |
mov ecx, 0x295 |
mov edx, 0x296 |
call FreePorts |
ret |
@@: call it87_get_temp |
call it87_get_fan_speed |
mov edi, ite_coeff |
call wb_get_volt |
popa |
ret |
;---------------------------------------------------- |