forked from KolibriOS/kolibrios
8871a59fcf
* kernel.asm free port area 0xe0-0xe4 (special for uGuru) + CPUID by Wildwest * APM GDT limit fix 3 git-svn-id: svn://kolibrios.org@223 a494cfbc-eb01-0410-851d-a64ba20cac60
154 lines
3.0 KiB
PHP
154 lines
3.0 KiB
PHP
;
|
|
; 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:
|
|
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
|
|
AVcc dd 0.0
|
|
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
|
|
|
|
; Èùåì äàò÷èêè íà øèíå 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 @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
|
|
|
|
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
; ISA interface
|
|
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
isaRead:
|
|
push edx
|
|
mov dx, 0x295
|
|
out dx, al
|
|
inc edx
|
|
in al, dx
|
|
pop edx
|
|
ret
|
|
|
|
isaWrite:
|
|
push edx
|
|
mov dx, 0x295
|
|
out dx, al
|
|
inc edx
|
|
mov al, bl
|
|
out dx, al
|
|
pop edx
|
|
ret
|
|
|
|
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
|
|
|
|
isaClose:
|
|
; îñâîáîæäàåì 0x295 è 0x296 ïîðòû
|
|
mov ecx, 0x295
|
|
mov edx, 0x296
|
|
call FreePorts
|
|
ret
|