forked from KolibriOS/kolibrios
AMD SB710/Hudson HWM template for GMon
git-svn-id: svn://kolibrios.org@3008 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
e626668c98
commit
52deb93f4b
298
programs/system/gmon/HWM_HUDSON.INC
Normal file
298
programs/system/gmon/HWM_HUDSON.INC
Normal file
@ -0,0 +1,298 @@
|
|||||||
|
;
|
||||||
|
; Ghost Monitor - ã⨫¨â (áâà¥áá) â¥áâ¨à®¢ ¨ï ¨ ¬®¨â®à¨£ á¨á⥬ë
|
||||||
|
; Copyright (C) 2005, 2006, 2007 Mihailov Ilia (ghost.nsk@mail.ru)
|
||||||
|
; All Right Reserved
|
||||||
|
|
||||||
|
;
|
||||||
|
; <20>¨¡«¨®â¥ª ¤«ï 稯®¢ Hudson
|
||||||
|
;
|
||||||
|
;
|
||||||
|
;
|
||||||
|
; | Chip name | ID Vin Fanin PWM Temp ISA SMBus
|
||||||
|
msg_A50: db 'AMD Hudson A50', 0 ; 0x20|0x21 9 3 2 3 + +
|
||||||
|
msg_A55: db 'AMD Hudson A55', 0 ; 0x20|0x21 9 3 2 3 + +
|
||||||
|
|
||||||
|
msg_amdunk: db 'Unknown AMD', 0 ; other, non zero ;-)
|
||||||
|
|
||||||
|
uglobal
|
||||||
|
wb_fans_num db 0
|
||||||
|
endg
|
||||||
|
|
||||||
|
;-----------------------------------
|
||||||
|
hudson_init:
|
||||||
|
; OUT - CF = 1 - error
|
||||||
|
|
||||||
|
mov ebx, 0xF00C3000
|
||||||
|
mov eax, [ebx]
|
||||||
|
cmp eax, 0x17031022
|
||||||
|
jne .not_found ; not a Fusion!
|
||||||
|
|
||||||
|
mov byte[wb_fans_num], 3
|
||||||
|
mov edx, msg_A55
|
||||||
|
@@: mov [hwm_chip_name], edx
|
||||||
|
mov dword[hwm_enable],1
|
||||||
|
mov al, 0xE6
|
||||||
|
mov bl, 0x0A
|
||||||
|
call pm2write ; init PWM_Control register
|
||||||
|
|
||||||
|
|
||||||
|
clc
|
||||||
|
ret
|
||||||
|
.not_found: stc
|
||||||
|
ret
|
||||||
|
|
||||||
|
;-----------------------------------
|
||||||
|
hudson_getparam:
|
||||||
|
call hudson_get_temp
|
||||||
|
call hudson_get_fan_speed
|
||||||
|
mov edi, hudson_coeff
|
||||||
|
call hudson_get_volt
|
||||||
|
fld dword[V12]
|
||||||
|
fld dword[hudson_n12v_const]
|
||||||
|
faddp st1, st0
|
||||||
|
fstp dword[V12]
|
||||||
|
ret
|
||||||
|
;-----------------------------------
|
||||||
|
hudson_get_temp:
|
||||||
|
; temp 1
|
||||||
|
mov ebx, 0xF00C3000
|
||||||
|
mov eax, [ebx+0xA4]
|
||||||
|
mov edx, eax
|
||||||
|
shr edx, 24
|
||||||
|
mov [hwm_temps], dl ; integer degrees
|
||||||
|
mov edx, eax
|
||||||
|
shr edx, 21
|
||||||
|
and dl, 7 ; 1/8th fractions of degree
|
||||||
|
cmp dl, 3 ; round 3/8 upto 0.4
|
||||||
|
jb .corrected
|
||||||
|
inc dl
|
||||||
|
cmp dl, 8 ; 7/8 ~ 0.9
|
||||||
|
jb .corrected
|
||||||
|
inc dl
|
||||||
|
.corrected:
|
||||||
|
mov [hwm_temps + 1], dl
|
||||||
|
|
||||||
|
; temp 2 (3 SYSTIN)
|
||||||
|
xor ebx, ebx
|
||||||
|
mov al, 0x95
|
||||||
|
call pm2read
|
||||||
|
mov bl, al
|
||||||
|
mov al, 0x96 ; SB internal sensor
|
||||||
|
call pm2read
|
||||||
|
mov bh, al
|
||||||
|
mov [hudson_temp_read], ebx
|
||||||
|
fild dword[hudson_temp_read]
|
||||||
|
fmul dword[hudson_temp_coef]
|
||||||
|
fidiv dword[hudson_int_64]
|
||||||
|
fadd dword[hudson_temp_offs]
|
||||||
|
fimul dword[hudson_int_2]
|
||||||
|
fistp dword[hudson_temp_read]
|
||||||
|
mov bx, word[hudson_temp_read]
|
||||||
|
mov ax, bx
|
||||||
|
xor bh, bh
|
||||||
|
shr eax, 1
|
||||||
|
mov byte[hwm_temps + 2], al
|
||||||
|
or bl, 1
|
||||||
|
jz @f
|
||||||
|
mov bh, 5
|
||||||
|
mov byte[hwm_temps + 3], bh
|
||||||
|
|
||||||
|
|
||||||
|
; temp 3 (VTIN)
|
||||||
|
xor ebx, ebx
|
||||||
|
mov al, 0xA1
|
||||||
|
call pm2read
|
||||||
|
mov bl, al
|
||||||
|
mov al, 0xA2 ; temp sensor #2
|
||||||
|
call pm2read
|
||||||
|
mov bh, al
|
||||||
|
mov [hudson_temp_read], ebx
|
||||||
|
fild dword[hudson_temp_read]
|
||||||
|
fmul dword[hudson_temp_coef]
|
||||||
|
fidiv dword[hudson_int_64]
|
||||||
|
fadd dword[hudson_temp_offs]
|
||||||
|
fimul dword[hudson_int_2]
|
||||||
|
fistp dword[hudson_temp_read]
|
||||||
|
mov bx, word[hudson_temp_read]
|
||||||
|
mov ax, bx
|
||||||
|
xor bh, bh
|
||||||
|
shr eax, 1
|
||||||
|
mov byte[hwm_temps + 4], al
|
||||||
|
or bl, 1
|
||||||
|
jz @f
|
||||||
|
mov bh, 5
|
||||||
|
mov byte[hwm_temps + 5], bh
|
||||||
|
|
||||||
|
|
||||||
|
mov ecx, 3
|
||||||
|
mov esi, hwm_temps
|
||||||
|
hudson_check_temp:
|
||||||
|
cmp word[esi + ecx * 2 - 2], 0x057F
|
||||||
|
jne hudson_temp_ok
|
||||||
|
mov word[esi + ecx * 2 - 2], 0
|
||||||
|
hudson_temp_ok:
|
||||||
|
loop hudson_check_temp
|
||||||
|
|
||||||
|
ret
|
||||||
|
;-----------------------------------
|
||||||
|
hudson_get_fan_speed:
|
||||||
|
; fan1
|
||||||
|
mov al, 0x47
|
||||||
|
call [IO_Read]
|
||||||
|
and al, 0x30
|
||||||
|
shr al, 4
|
||||||
|
mov ebx, 1
|
||||||
|
mov cl, al
|
||||||
|
shl ebx, cl ; <- div1
|
||||||
|
xor eax, eax
|
||||||
|
mov al, 0x28
|
||||||
|
call [IO_Read]
|
||||||
|
cmp al, 255
|
||||||
|
jne @f
|
||||||
|
xor eax, eax ; ???
|
||||||
|
ret ; ???
|
||||||
|
@@: mul ebx
|
||||||
|
mov ebx, eax
|
||||||
|
mov eax, 1350000
|
||||||
|
xor edx, edx
|
||||||
|
test ebx, ebx
|
||||||
|
jz .div0
|
||||||
|
div ebx
|
||||||
|
mov [hwm_rpms], eax
|
||||||
|
|
||||||
|
mov al, 0x47
|
||||||
|
call [IO_Read]
|
||||||
|
shr al, 6
|
||||||
|
mov ebx, 1
|
||||||
|
mov cl, al
|
||||||
|
shl ebx, cl ; <- div2
|
||||||
|
xor eax, eax
|
||||||
|
mov al, 0x29
|
||||||
|
call [IO_Read]
|
||||||
|
cmp al, 255
|
||||||
|
jne @f
|
||||||
|
xor eax, eax
|
||||||
|
.div0:
|
||||||
|
ret
|
||||||
|
@@: mul ebx
|
||||||
|
mov ebx, eax
|
||||||
|
mov eax, 1350000
|
||||||
|
xor edx, edx
|
||||||
|
test ebx, ebx
|
||||||
|
jz .div0
|
||||||
|
div ebx
|
||||||
|
mov [hwm_rpms + 4], eax
|
||||||
|
|
||||||
|
mov al, 0x4B
|
||||||
|
call [IO_Read]
|
||||||
|
shr al, 6
|
||||||
|
mov ebx, 1
|
||||||
|
mov cl, al
|
||||||
|
shl ebx, cl ; <- div3
|
||||||
|
xor eax, eax
|
||||||
|
mov al, 0x2A
|
||||||
|
call [IO_Read]
|
||||||
|
cmp al, 255
|
||||||
|
jne @f
|
||||||
|
xor eax, eax
|
||||||
|
ret
|
||||||
|
@@: mul ebx
|
||||||
|
mov ebx, eax
|
||||||
|
mov eax, 1350000
|
||||||
|
xor edx, edx
|
||||||
|
test ebx, ebx
|
||||||
|
jz .div0
|
||||||
|
div ebx
|
||||||
|
mov [hwm_rpms + 8], eax
|
||||||
|
|
||||||
|
cmp byte[wb_fans_num], 3
|
||||||
|
jna .wb_f_e
|
||||||
|
|
||||||
|
mov al, 0x59
|
||||||
|
call [IO_Read]
|
||||||
|
and al, 3
|
||||||
|
mov ebx, 1
|
||||||
|
mov cl, al
|
||||||
|
shl ebx, cl ; <- div4, ¤®¯¨á âì ãçñâ DIV_B2
|
||||||
|
xor eax, eax
|
||||||
|
mov al, 0x3F
|
||||||
|
call [IO_Read]
|
||||||
|
cmp al, 255
|
||||||
|
jne @f
|
||||||
|
xor eax, eax
|
||||||
|
ret
|
||||||
|
@@: mul ebx
|
||||||
|
mov ebx, eax
|
||||||
|
mov eax, 1350000
|
||||||
|
xor edx, edx
|
||||||
|
test ebx, ebx
|
||||||
|
jz .div0
|
||||||
|
div ebx
|
||||||
|
mov [hwm_rpms + 12], eax
|
||||||
|
|
||||||
|
mov al, 0x59
|
||||||
|
call [IO_Read]
|
||||||
|
shr al, 2
|
||||||
|
and al, 3
|
||||||
|
mov ebx, 1
|
||||||
|
mov cl, al
|
||||||
|
shl ebx, cl ; <- div5, ¤®¯¨á âì ãçñâ DIV_B2
|
||||||
|
xor eax, eax
|
||||||
|
mov al, 0x4e ; ‚ë¡¨à ¥¬ bank 5
|
||||||
|
mov bl, 5
|
||||||
|
call [IO_Write]
|
||||||
|
mov al, 0x53
|
||||||
|
call [IO_Read]
|
||||||
|
cmp al, 255
|
||||||
|
jne @f
|
||||||
|
xor eax, eax
|
||||||
|
ret
|
||||||
|
@@: mul ebx
|
||||||
|
mov ebx, eax
|
||||||
|
mov eax, 1350000
|
||||||
|
xor edx, edx
|
||||||
|
test ebx, ebx
|
||||||
|
jz .wb_f_e
|
||||||
|
div ebx
|
||||||
|
mov [hwm_rpms + 16], eax
|
||||||
|
|
||||||
|
.wb_f_e:
|
||||||
|
ret
|
||||||
|
;-----------------------------------
|
||||||
|
hudson_get_volt:
|
||||||
|
;mov edi, wb_coeff ; <-- possible differences for miscellaneous chip
|
||||||
|
mov esi, hwm_voltages
|
||||||
|
xor ecx, ecx
|
||||||
|
@@: mov eax, ecx
|
||||||
|
add al, 0x20
|
||||||
|
call [IO_Read]
|
||||||
|
fld dword [edi + ecx * 4]
|
||||||
|
push eax
|
||||||
|
fild dword [esp]
|
||||||
|
fmulp st1, st0
|
||||||
|
fstp dword [esi + ecx * 4]
|
||||||
|
pop eax
|
||||||
|
inc ecx
|
||||||
|
cmp ecx, 7
|
||||||
|
jb @b
|
||||||
|
ret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
hudson_coeff: dd 0.016 ; Vcore
|
||||||
|
dd 0.016 ; Vin0
|
||||||
|
dd 0.016 ; Vin1 (+3.3V)
|
||||||
|
dd 0.02688 ; AVcc (+5V)
|
||||||
|
dd 0.0608 ; Vin2 (+12V)
|
||||||
|
dd 0.0822857142857145 ; -12V
|
||||||
|
dd -0.02408 ; -5V ; false
|
||||||
|
|
||||||
|
hudson_n12v_const dd -14.9142857142857
|
||||||
|
|
||||||
|
hudson_temp_offs dd -273.65
|
||||||
|
hudson_temp_coef dd 0.517
|
||||||
|
hudson_temp_read dd 0
|
||||||
|
hudson_int_2 dd 2
|
||||||
|
hudson_int_64 dd 64
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -16,7 +16,7 @@ end if
|
|||||||
include 'hwm_wb.inc'
|
include 'hwm_wb.inc'
|
||||||
include 'hwm_it87.inc'
|
include 'hwm_it87.inc'
|
||||||
include 'hwm_uguru.inc'
|
include 'hwm_uguru.inc'
|
||||||
;include 'hwm_via686.inc'
|
;include 'hwm_hudson.inc'
|
||||||
|
|
||||||
uglobal
|
uglobal
|
||||||
hwm_enable:
|
hwm_enable:
|
||||||
@ -52,14 +52,18 @@ hwm_chip_name dd hwm_unk
|
|||||||
; HWMGetParam - список, процедур получения параметров
|
; HWMGetParam - список, процедур получения параметров
|
||||||
; оба эти списка должны соответствовать друг другу по
|
; оба эти списка должны соответствовать друг другу по
|
||||||
; по порядку процедур
|
; по порядку процедур
|
||||||
HWMProbe: dd wb_init
|
HWMProbe:
|
||||||
|
dd wb_init
|
||||||
dd it87_init
|
dd it87_init
|
||||||
dd uGuru_init
|
dd uGuru_init
|
||||||
|
; dd hudson_init
|
||||||
dd 0 ; <- конец списка
|
dd 0 ; <- конец списка
|
||||||
|
|
||||||
HWMGetParam: dd wb_getparam
|
HWMGetParam:
|
||||||
|
dd wb_getparam
|
||||||
dd it87_getparam
|
dd it87_getparam
|
||||||
dd uGuru_getparam
|
dd uGuru_getparam
|
||||||
|
; dd hudson_getparam
|
||||||
|
|
||||||
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||||
hwm_init:
|
hwm_init:
|
||||||
|
Loading…
Reference in New Issue
Block a user