Rev 205 | Rev 239 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
205 | heavyiron | 1 | ; |
2 | ; Библиотека для чипов WinBond |
||
3 | ; |
||
4 | ; |
||
5 | ; Дописать получение инфы с других датчиков |
||
6 | ; + 16.03.06 Исправлена ошибка в wb_get_cpu_temper с десятых градуса (было 30.5 30.0 31.5 ...) |
||
7 | ; |
||
8 | ; |
||
223 | Ghost | 9 | ; | Chip name | ID Vin Fanin PWM Temp ISA SMBus |
10 | msg_wb27HF: db 8, 'W83627HF' ; 0x20|0x21 9 3 2 3 + + |
||
11 | msg_wb27THF: db 9, 'W83627THF' ; 0x90|0x91 7 3 3 3 + + |
||
12 | msg_wb37THF: db 9, 'W83637THF' ; 0x80 7 3 3 3 + + |
||
13 | msg_wb97HF: db 8, 'W83697HF' ; 0x60|0x61 8 2 2 2 + - |
||
205 | heavyiron | 14 | msg_wb27EHF: db 11,'W83627EHF-A' ; 0x88 |
15 | msg_wb27THFA: db 11,'W83627THF-A' ; 0x1A |
||
223 | Ghost | 16 | ; db 7, 'W83781D' ; 0x10|0x11 7 3 3 + + |
17 | ; db 7, 'W83782D' ; 0x30 9 3 3 + + |
||
18 | ; db 8, 'AS99127F' ; 0x31 7 3 3 - + |
||
19 | ; db 7, 'W83783S' ; 0x40|0x41 5-6 3 1-2 - + |
||
20 | ; db 7, 'W83791D' ; 0x70|0x71 10 5 3 - + |
||
205 | heavyiron | 21 | msg_wbunk: db 15,'Unknown Winbond' ; other, non zero ;-) |
22 | |||
23 | ;----------------------------------- |
||
24 | wb_init: |
||
25 | ; Проверка наличия и инициализация |
||
26 | ; OUT - CF = 1 - error |
||
223 | Ghost | 27 | cmp byte[acc_type], 2 ; Only ISA and SMBus |
28 | jae wb_no |
||
29 | |||
205 | heavyiron | 30 | mov al, 0x4e |
223 | Ghost | 31 | xor bl, bl |
32 | call [IO_Write] |
||
205 | heavyiron | 33 | mov al, 0x4f |
223 | Ghost | 34 | call [IO_Read] |
205 | heavyiron | 35 | mov ah, al ;! |
36 | mov al, 0x4e |
||
223 | Ghost | 37 | mov bl, 0x80 |
38 | call [IO_Write] |
||
205 | heavyiron | 39 | mov al, 0x4f |
223 | Ghost | 40 | call [IO_Read] |
205 | heavyiron | 41 | cmp ax, 0xa35c |
42 | jne wb_no ; это не Winbond !!! |
||
223 | Ghost | 43 | |
44 | ; --- узнаём идентификатор чипа -- |
||
205 | heavyiron | 45 | mov al, 0x58 |
223 | Ghost | 46 | call [IO_Read] |
47 | and al, 0xFE ; 0x20 = 0x21, 0x60 = 0x61, etc |
||
48 | mov edx, msg_wb27HF |
||
49 | cmp al, 0x20 |
||
50 | je @f |
||
51 | mov edx, msg_wb27THF |
||
52 | cmp al, 0x90 |
||
53 | je @f |
||
54 | mov edx, msg_wb37THF |
||
55 | cmp al, 0x80 |
||
56 | je @f |
||
57 | mov edx, msg_wb97HF |
||
58 | cmp al, 0x60 |
||
59 | je @f |
||
60 | mov edx, msg_wb27EHF |
||
61 | cmp al, 0x88 |
||
62 | je @f |
||
63 | mov edx, msg_wb27THFA |
||
64 | cmp al, 0x1A |
||
65 | je @f |
||
66 | mov edx, msg_wbunk |
||
67 | @@: mov [hwm_chip_name], edx |
||
205 | heavyiron | 68 | clc |
69 | ret |
||
70 | wb_no: stc |
||
71 | ret |
||
72 | |||
73 | ;----------------------------------- |
||
223 | Ghost | 74 | wb_getparam: |
75 | call wb_get_temp |
||
76 | call wb_get_fan_speed |
||
77 | mov edi, wb_coeff |
||
78 | call wb_get_volt |
||
79 | fld dword[V12] |
||
80 | fld dword[wb_n12v_const] |
||
81 | faddp st1, st0 |
||
82 | fstp dword[V12] |
||
83 | ret |
||
84 | ;----------------------------------- |
||
205 | heavyiron | 85 | wb_get_temp: |
86 | ; temp 1 |
||
223 | Ghost | 87 | mov al, 0x4e ; Выбираем bank 1 |
88 | mov bl, 1 |
||
89 | call [IO_Write] |
||
90 | mov al, 0x50 ; Получаем старший байт температуры (градусы) |
||
91 | call [IO_Read] |
||
92 | mov [hwm_temps], al |
||
93 | mov al, 0x51 ; Получаем младший байт температуры (x.5`C) |
||
94 | call [IO_Read] |
||
95 | cmp al, 0 ; if al == 0 then x.0, else x.5 |
||
205 | heavyiron | 96 | je @f |
97 | mov al, 5 |
||
223 | Ghost | 98 | @@: mov [hwm_temps + 1], al |
99 | |||
205 | heavyiron | 100 | ; temp 2 (3 SYSTIN) |
223 | Ghost | 101 | mov al, 0x4e ; Выбираем bank 0 |
102 | xor bl, bl |
||
103 | call [IO_Write] |
||
104 | mov al, 0x27 ; Получаем старший байт температуры (градусы) |
||
105 | call [IO_Read] |
||
106 | mov [hwm_temps + 2], al |
||
107 | |||
205 | heavyiron | 108 | ; temp 3 (VTIN) |
223 | Ghost | 109 | mov al, 0x4e ; Выбираем bank 2 |
110 | mov bl, 2 |
||
111 | call [IO_Write] |
||
112 | mov al, 0x50 ; Получаем старший байт температуры (градусы) |
||
113 | call [IO_Read] |
||
114 | mov [hwm_temps + 4], al |
||
115 | mov al, 0x51 ; Получаем младший байт температуры (x.5`C) |
||
116 | call [IO_Read] |
||
117 | cmp al, 0 ; if al == 0 then x.0, else x.5 |
||
205 | heavyiron | 118 | je @f |
119 | mov al, 5 |
||
223 | Ghost | 120 | @@: mov [hwm_temps + 5], al |
121 | |||
205 | heavyiron | 122 | ; Проверка температуры, датчики с 127.5`C не используются |
123 | mov ecx, 3 |
||
223 | Ghost | 124 | mov esi, hwm_temps |
205 | heavyiron | 125 | wb_check_temp: |
126 | cmp word[esi + ecx * 2 - 2], 0x057F |
||
127 | jne wb_temp_ok |
||
128 | mov word[esi + ecx * 2 - 2], 0 |
||
129 | wb_temp_ok: |
||
130 | loop wb_check_temp |
||
131 | |||
132 | ret |
||
133 | ;----------------------------------- |
||
134 | wb_get_fan_speed: |
||
135 | ; fan1 |
||
136 | mov al, 0x47 |
||
223 | Ghost | 137 | call [IO_Read] |
205 | heavyiron | 138 | and al, 0x30 |
139 | shr al, 4 |
||
140 | mov ebx, 1 |
||
141 | mov cl, al |
||
142 | shl ebx, cl ; <- div1 |
||
143 | xor eax, eax |
||
223 | Ghost | 144 | mov al, 0x28 |
145 | call [IO_Read] |
||
205 | heavyiron | 146 | cmp al, 255 |
147 | jne @f |
||
223 | Ghost | 148 | xor eax, eax ; ??? |
149 | ret ; ??? |
||
205 | heavyiron | 150 | @@: mul ebx |
151 | mov ebx, eax |
||
152 | mov eax, 1350000 |
||
153 | xor edx, edx |
||
154 | div ebx |
||
223 | Ghost | 155 | mov [hwm_rpms], eax |
205 | heavyiron | 156 | mov al, 0x47 |
223 | Ghost | 157 | call [IO_Read] |
205 | heavyiron | 158 | shr al, 6 |
159 | mov ebx, 1 |
||
160 | mov cl, al |
||
161 | shl ebx, cl ; <- div2 |
||
162 | xor eax, eax |
||
223 | Ghost | 163 | mov al, 0x29 |
164 | call [IO_Read] |
||
205 | heavyiron | 165 | cmp al, 255 |
166 | jne @f |
||
167 | xor eax, eax |
||
168 | ret |
||
169 | @@: mul ebx |
||
170 | mov ebx, eax |
||
171 | mov eax, 1350000 |
||
172 | xor edx, edx |
||
173 | div ebx |
||
223 | Ghost | 174 | mov [hwm_rpms + 4], eax |
205 | heavyiron | 175 | ret |
176 | ;----------------------------------- |
||
177 | wb_get_volt: |
||
223 | Ghost | 178 | ;mov edi, wb_coeff ; <-- possible differences for miscellaneous chip |
179 | mov esi, hwm_voltages |
||
180 | xor ecx, ecx |
||
205 | heavyiron | 181 | @@: mov eax, ecx |
182 | add al, 0x20 |
||
223 | Ghost | 183 | call [IO_Read] |
205 | heavyiron | 184 | fld dword [edi + ecx * 4] |
185 | push eax |
||
186 | fild dword [esp] |
||
187 | fmulp st1, st0 |
||
188 | fstp dword [esi + ecx * 4] |
||
189 | pop eax |
||
190 | inc ecx |
||
191 | cmp ecx, 7 |
||
192 | jb @b |
||
193 | ret |
||
194 | |||
195 | wb_coeff: dd 0.016 ; Vcore |
||
196 | dd 0.016 ; Vin0 |
||
197 | dd 0.016 ; Vin1 (+3.3V) |
||
198 | dd 0.02688 ; AVcc (+5V) |
||
199 | dd 0.0608 ; Vin2 (+12V) |
||
200 | dd 0.0822857142857145 ; -12V |
||
201 | dd -0.02408 ; -5V ; false |
||
202 | |||
203 | wb_n12v_const dd -14.9142857142857-->->-> |
||
223 | Ghost | 204 |