Subversion Repositories Kolibri OS

Rev

Rev 500 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
205 heavyiron 1
;
2429 art_zh 2
; Ghost Monitor - утилита (стресс) тестирования и мониторинга системы
313 Ghost 3
; Copyright (C) 2005, 2006, 2007 Mihailov Ilia (ghost.nsk@mail.ru)
4
; All Right Reserved
5
 
6
;
2429 art_zh 7
; Библиотека для чипов WinBond
205 heavyiron 8
;
9
;
2429 art_zh 10
;    Дописать получение инфы с других датчиков
11
;    W83627DHG мониторинг аналогичен W83627EHF, дописать учёт DIV_B2
12
;  + 16.03.06 Исправлена ошибка в wb_get_cpu_temper с десятых градуса (было 30.5 30.0 31.5 ...)
205 heavyiron 13
;
14
;
2429 art_zh 15
;    О маркировке (?) : H - H/W Monitor, G - Pb-free package, T - ACPI, S - Smart Card Reader Interface
239 Ghost 16
;      D - SuperIO supporting Intel* PECI* & SST* interfaces, U - UART
17
;
2429 art_zh 18
;                  | Chip name           | ID           Vin     Fanin   PWM     Temp   ISA   SMBus
19
msg_wb27HF:	db 'W83627HF', 0	; 0x20|0x21      9        3      2       3      +      +
20
msg_wb27THF:	db 'W83627THF', 0	; 0x90|0x91      7        3      3       3      +      +
21
msg_wb37THF:	db 'W83637THF', 0	; 0x80           7        3      3       3      +      +
22
msg_wb97HF:	db 'W83697HF', 0	; 0x60|0x61      8        2      2       2      +      -
500 Ghost 23
msg_wb27THFA:	db 'W83627THF-A', 0	; 0x1A
239 Ghost 24
 
2429 art_zh 25
msg_w83627DHG:	db 'W83627DHG', 0	; 0xC1           ?        5      ?       3      +      +
26
msg_w83627EHF:	db 'W83627EHF', 0	; 0x88           10       5      3       3      +      +
27
msg_w83627EHG:	db 'W83627EHG', 0	; 0xA1           10       5      3       3      +      +
239 Ghost 28
 
29
 
2429 art_zh 30
;               db 'W83781D', 0         ; 0x10|0x11      7               3       3      +      +
31
;               db 'W83782D', 0         ; 0x30           9               3       3      +      +
32
;               db 'AS99127F', 0        ; 0x31           7               3       3      -      +
33
;               db 'W83783S', 0         ; 0x40|0x41      5-6             3       1-2    -      +
34
;               db 'W83791D', 0         ; 0x70|0x71      10              5       3      -      +
35
msg_wbunk:	db 'Unknown Winbond', 0 ; other, non zero ;-)
205 heavyiron 36
 
239 Ghost 37
uglobal
38
wb_fans_num	db	0
39
endg
40
 
205 heavyiron 41
;-----------------------------------
42
wb_init:
2429 art_zh 43
; Проверка наличия и инициализация
205 heavyiron 44
; OUT - CF = 1 - error
223 Ghost 45
	cmp	byte[acc_type], 2	; Only ISA and SMBus
46
	jae	wb_no
47
 
205 heavyiron 48
	mov	al, 0x4e
223 Ghost 49
	xor	bl, bl
50
	call	[IO_Write]
205 heavyiron 51
	mov	al, 0x4f
223 Ghost 52
	call	[IO_Read]
205 heavyiron 53
	mov	ah, al		;!
54
	mov	al, 0x4e
223 Ghost 55
	mov	bl, 0x80
2429 art_zh 56
	call	[IO_Write]
205 heavyiron 57
	mov	al, 0x4f
223 Ghost 58
	call	[IO_Read]
205 heavyiron 59
	cmp	ax, 0xa35c
2429 art_zh 60
	jne	wb_no		; это не Winbond !!!
239 Ghost 61
 
2429 art_zh 62
	; --- узнаём идентификатор чипа --
205 heavyiron 63
	mov	al, 0x58
223 Ghost 64
	call	[IO_Read]
65
	and	al, 0xFE	; 0x20 = 0x21, 0x60 = 0x61, etc
239 Ghost 66
	mov	byte[wb_fans_num], 3
223 Ghost 67
	mov	edx, msg_wb27HF
68
	cmp	al, 0x20
69
	je	@f
70
	mov	edx, msg_wb27THF
71
	cmp	al, 0x90
72
	je	@f
73
	mov	edx, msg_wb37THF
74
	cmp	al, 0x80
75
	je	@f
76
	mov	edx, msg_wb97HF
77
	cmp	al, 0x60
78
	je	@f
79
	mov	edx, msg_wb27THFA
80
	cmp	al, 0x1A
81
	je	@f
239 Ghost 82
	mov	byte[wb_fans_num], 5
83
	mov	edx, msg_w83627EHF
84
	cmp	al, 0x88
85
	je	@f
86
	mov	edx, msg_w83627EHG
87
	cmp	al, 0xA0
88
	je	@f
89
	mov	edx, msg_w83627DHG
90
	cmp	al, 0xC0
91
	je	@f
92
	mov	byte[wb_fans_num], 3
223 Ghost 93
	mov	edx, msg_wbunk
94
@@:	mov	[hwm_chip_name], edx
205 heavyiron 95
	clc
96
	ret
97
wb_no:	stc
98
	ret
99
 
100
;-----------------------------------
223 Ghost 101
wb_getparam:
102
	call	wb_get_temp
103
	call	wb_get_fan_speed
104
	mov	edi, wb_coeff
105
	call	wb_get_volt
106
	fld	dword[V12]
107
	fld	dword[wb_n12v_const]
108
	faddp	st1, st0
109
	fstp	dword[V12]
110
	ret
111
;-----------------------------------
205 heavyiron 112
wb_get_temp:
113
	; temp 1
2429 art_zh 114
	mov	al, 0x4e	; Выбираем bank 1
223 Ghost 115
	mov	bl, 1
116
	call	[IO_Write]
2429 art_zh 117
	mov	al, 0x50	; Получаем старший байт температуры (градусы)
223 Ghost 118
	call	[IO_Read]
119
	mov	[hwm_temps], al
2429 art_zh 120
	mov	al, 0x51	; Получаем младший байт температуры  (x.5`C)
223 Ghost 121
	call	[IO_Read]
122
	cmp	al, 0		; if al == 0 then x.0, else x.5
205 heavyiron 123
	je	@f
124
	mov	al, 5
223 Ghost 125
@@:	mov	[hwm_temps + 1], al
126
 
205 heavyiron 127
	; temp 2 (3 SYSTIN)
2429 art_zh 128
	mov	al, 0x4e	; Выбираем bank 0
223 Ghost 129
	xor	bl, bl
130
	call	[IO_Write]
2429 art_zh 131
	mov	al, 0x27	; Получаем старший байт температуры (градусы)
223 Ghost 132
	call	[IO_Read]
133
	mov	[hwm_temps + 2], al
2429 art_zh 134
 
205 heavyiron 135
	; temp 3 (VTIN)
2429 art_zh 136
	mov	al, 0x4e	; Выбираем bank 2
223 Ghost 137
	mov	bl, 2
138
	call	[IO_Write]
2429 art_zh 139
	mov	al, 0x50	; Получаем старший байт температуры (градусы)
223 Ghost 140
	call	[IO_Read]
141
	mov	[hwm_temps + 4], al
2429 art_zh 142
	mov	al, 0x51	; Получаем младший байт температуры  (x.5`C)
223 Ghost 143
	call	[IO_Read]
144
	cmp	al, 0		; if al == 0 then x.0, else x.5
205 heavyiron 145
	je	@f
146
	mov	al, 5
223 Ghost 147
@@:	mov	[hwm_temps + 5], al
148
 
2429 art_zh 149
	; Проверка температуры, датчики с 127.5`C не используются
205 heavyiron 150
	mov	ecx, 3
223 Ghost 151
	mov	esi, hwm_temps
205 heavyiron 152
wb_check_temp:
153
	cmp	word[esi + ecx * 2 - 2], 0x057F
154
	jne	wb_temp_ok
155
	mov	word[esi + ecx * 2 - 2], 0
156
wb_temp_ok:
157
	loop	wb_check_temp
2429 art_zh 158
 
205 heavyiron 159
	ret
160
;-----------------------------------
161
wb_get_fan_speed:
162
	; fan1
163
	mov	al, 0x47
223 Ghost 164
	call	[IO_Read]
205 heavyiron 165
	and	al, 0x30
166
	shr	al, 4
167
	mov	ebx, 1
168
	mov	cl, al
2429 art_zh 169
	shl	ebx, cl ; <- div1
205 heavyiron 170
	xor	eax, eax
223 Ghost 171
	mov	al,  0x28
172
	call	[IO_Read]
205 heavyiron 173
	cmp	al, 255
174
	jne	@f
223 Ghost 175
	xor	eax, eax	; ???
176
	ret			; ???
205 heavyiron 177
@@:	mul	ebx
178
	mov	ebx, eax
179
	mov	eax, 1350000
180
	xor	edx, edx
2429 art_zh 181
	test	ebx, ebx
182
	jz	.div0
205 heavyiron 183
	div	ebx
223 Ghost 184
	mov	[hwm_rpms], eax
2429 art_zh 185
 
205 heavyiron 186
	mov	al, 0x47
223 Ghost 187
	call	[IO_Read]
205 heavyiron 188
	shr	al, 6
189
	mov	ebx, 1
190
	mov	cl, al
2429 art_zh 191
	shl	ebx, cl ; <- div2
205 heavyiron 192
	xor	eax, eax
223 Ghost 193
	mov	al,  0x29
194
	call	[IO_Read]
205 heavyiron 195
	cmp	al, 255
196
	jne	@f
197
	xor	eax, eax
2429 art_zh 198
.div0:
205 heavyiron 199
	ret
200
@@:	mul	ebx
201
	mov	ebx, eax
202
	mov	eax, 1350000
203
	xor	edx, edx
2429 art_zh 204
	test	ebx, ebx
205
	jz	.div0
205 heavyiron 206
	div	ebx
223 Ghost 207
	mov	[hwm_rpms + 4], eax
2429 art_zh 208
 
239 Ghost 209
	mov	al, 0x4B
210
	call	[IO_Read]
211
	shr	al, 6
212
	mov	ebx, 1
213
	mov	cl, al
2429 art_zh 214
	shl	ebx, cl ; <- div3
239 Ghost 215
	xor	eax, eax
216
	mov	al,  0x2A
217
	call	[IO_Read]
218
	cmp	al, 255
219
	jne	@f
220
	xor	eax, eax
205 heavyiron 221
	ret
239 Ghost 222
@@:	mul	ebx
223
	mov	ebx, eax
224
	mov	eax, 1350000
225
	xor	edx, edx
2429 art_zh 226
	test	ebx, ebx
227
	jz	.div0
239 Ghost 228
	div	ebx
229
	mov	[hwm_rpms + 8], eax
230
 
231
	cmp	byte[wb_fans_num], 3
232
	jna	.wb_f_e
233
 
234
	mov	al, 0x59
235
	call	[IO_Read]
236
	and	al, 3
237
	mov	ebx, 1
238
	mov	cl, al
2429 art_zh 239
	shl	ebx, cl ; <- div4, дописать учёт DIV_B2
239 Ghost 240
	xor	eax, eax
241
	mov	al,  0x3F
242
	call	[IO_Read]
243
	cmp	al, 255
244
	jne	@f
245
	xor	eax, eax
246
	ret
247
@@:	mul	ebx
248
	mov	ebx, eax
249
	mov	eax, 1350000
250
	xor	edx, edx
2429 art_zh 251
	test	ebx, ebx
252
	jz	.div0
239 Ghost 253
	div	ebx
254
	mov	[hwm_rpms + 12], eax
2429 art_zh 255
 
239 Ghost 256
	mov	al, 0x59
257
	call	[IO_Read]
258
	shr	al, 2
259
	and	al, 3
260
	mov	ebx, 1
261
	mov	cl, al
2429 art_zh 262
	shl	ebx, cl ; <- div5, дописать учёт DIV_B2
239 Ghost 263
	xor	eax, eax
2429 art_zh 264
	mov	al, 0x4e	; Выбираем bank 5
239 Ghost 265
	mov	bl, 5
266
	call	[IO_Write]
267
	mov	al,  0x53
268
	call	[IO_Read]
269
	cmp	al, 255
270
	jne	@f
271
	xor	eax, eax
272
	ret
273
@@:	mul	ebx
274
	mov	ebx, eax
275
	mov	eax, 1350000
276
	xor	edx, edx
2429 art_zh 277
	test	ebx, ebx
278
	jz	.wb_f_e
239 Ghost 279
	div	ebx
280
	mov	[hwm_rpms + 16], eax
281
 
282
.wb_f_e:
283
	ret
205 heavyiron 284
;-----------------------------------
285
wb_get_volt:
2429 art_zh 286
	;mov    edi, wb_coeff           ; <-- possible differences for miscellaneous chip
223 Ghost 287
	mov	esi, hwm_voltages
288
	xor	ecx, ecx
205 heavyiron 289
@@:	mov	eax, ecx
290
	add	al, 0x20
223 Ghost 291
	call	[IO_Read]
205 heavyiron 292
	fld	dword [edi + ecx * 4]
293
	push	eax
294
	fild	dword [esp]
295
	fmulp	st1, st0
296
	fstp	dword [esi + ecx * 4]
297
	pop	eax
298
	inc	ecx
299
	cmp	ecx, 7
300
	jb	@b
301
	ret
302
 
303
wb_coeff:	dd 0.016		; Vcore
304
		dd 0.016		; Vin0
305
		dd 0.016		; Vin1 (+3.3V)
306
		dd 0.02688		; AVcc (+5V)
307
		dd 0.0608		; Vin2 (+12V)
308
		dd 0.0822857142857145	; -12V
309
		dd -0.02408		; -5V ; false
2429 art_zh 310
 
205 heavyiron 311
wb_n12v_const	dd -14.9142857142857
223 Ghost 312