Subversion Repositories Kolibri OS

Rev

Rev 205 | Rev 313 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
223 Ghost 1
;
2
; HWM abstract interface, provide:
3
;  hwm_init, hwm_get_params, hwm_enable, hwm_temps, hwm_rpms, hwm_voltages, hwm_chip_name
4
;
205 heavyiron 5
 
223 Ghost 6
 
7
if SMBus eq yes
8
 include	'SMBus.inc'
9
end if
10
 
205 heavyiron 11
include		'hwm_wb.inc'
12
include		'hwm_it87.inc'
223 Ghost 13
include		'hwm_uguru.inc'
14
;include	'hwm_via686.inc'
205 heavyiron 15
 
16
uglobal
223 Ghost 17
	hwm_enable:
18
		dd	0		; 0 - no, 1 - Winbond, 2 - ITE, ... see HWMProbe list
19
	hwm_temps:
20
		db	0,0, 0,0, 0,0	; градус, десятые, градус, ...
21
	hwm_rpms:
22
		dd	0, 0, 0, 0, 0	; fan1, fan2, fan3, ...
23
	hwm_voltages:
205 heavyiron 24
	Vcore 	dd	0.0
25
	Vin0	dd	0.0
26
	Vin1	dd	0.0
27
	AVcc	dd	0.0
28
	Vin2	dd	0.0
29
	V12	dd	0.0
30
	V5	dd	0.0
223 Ghost 31
	vol8	dd	0.0
32
	vol9	dd	0.0
33
	vol10	dd	0.0
34
	vol11	dd	0.0
35
	acc_type db	0		; 0 - ISA Bus, 1 - SMBus, 2 - other
205 heavyiron 36
endg
37
 
223 Ghost 38
IO_Read		dd	isaRead		; In : al - addr, out : al - value
39
IO_Write	dd	isaWrite	; In : al - addr, bl - value
40
 
205 heavyiron 41
hwm_unk		db	9, 'Not found'
42
hwm_chip_name	dd	hwm_unk
43
 
223 Ghost 44
; NOTE !!!
45
; HWMProbe - список, процедур проверки чипов, заканчивается
46
; нулевым двойным словом
47
; HWMGetParam - список, процедур получения параметров
48
; оба эти списка должны соответствовать друг другу по
49
; по порядку процедур
50
HWMProbe:	dd	wb_init
51
		dd	it87_init
52
		dd	uGuru_init
53
		dd	0		; <- конец списка
54
 
55
HWMGetParam:	dd	wb_getparam
56
		dd	it87_getparam
57
		dd	uGuru_getparam
58
 
59
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
205 heavyiron 60
hwm_init:
61
; Проверка наличия и инициализация
62
	pusha
223 Ghost 63
	; Ищем датчики на шине ISA
64
	call	isaInit
65
	jc	@f
66
	call	chips_probe
67
	cmp	byte[hwm_enable], 0
68
	jne	.exit
69
@@:	call	isaClose
205 heavyiron 70
 
223 Ghost 71
	; Ищем датчики на шине SMBus
72
	inc	byte [acc_type]
73
if SMBus eq yes
74
	call	smbInit
75
	jc	@f
76
	call	chips_probe
77
	cmp	byte[hwm_enable], 0
78
	jne	.exit
79
@@:	call	smbClose
80
end if
81
	; Ищем датчики на собственной шине (LPC etc)
82
	inc	byte [acc_type]
83
	call	chips_probe
84
 
85
.exit:	popa
86
	ret
87
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
88
chips_probe:
89
; Находим нужный чип
90
; Out : hwm_enable = !0 if found, else hwm_enable not changed
91
	cld			; Paranoia
92
	mov	esi, HWMProbe
93
@@:	lodsd
205 heavyiron 94
	test	eax, eax
223 Ghost 95
	jz	@f		; Конец списка
96
	call	eax
97
	jc	@b
98
	sub	esi, HWMProbe
99
	shr	esi, 2
100
	mov	dword[hwm_enable], esi
101
@@:	ret
102
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
103
hwm_get_params:
104
	pusha
105
	mov	eax, [hwm_enable]
106
	test	eax, eax
107
	jz	@f
108
	dec	eax
109
	sal	eax, 2
110
	call	dword[eax + HWMGetParam]
111
@@:	popa
205 heavyiron 112
	ret
113
 
223 Ghost 114
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
115
; ISA interface
116
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
117
isaRead:
118
	push	edx
119
	mov	dx, 0x295
120
	out	dx, al
121
	inc	edx
122
	in	al, dx
123
	pop	edx
124
	ret
205 heavyiron 125
 
223 Ghost 126
isaWrite:
127
	push	edx
128
	mov	dx, 0x295
129
	out	dx, al
130
	inc	edx
131
	mov	al, bl
132
	out	dx, al
133
	pop	edx
205 heavyiron 134
	ret
223 Ghost 135
 
136
isaInit:
137
	; Out : CF = 0 if Ok
138
	; резервируем 0x295 и 0x296 порты
139
	mov	ecx, 0x295
140
	mov	edx, 0x296
141
	call	ReservePorts
142
	; jc	@f
143
	; mov	[IO_Read], isaRead
144
	; mov	[IO_Write], isaWrite
145
	; @@:
205 heavyiron 146
	ret
223 Ghost 147
 
148
isaClose:
149
	; освобождаем 0x295 и 0x296 порты
150
	mov	ecx, 0x295
151
	mov	edx, 0x296
152
	call	FreePorts
205 heavyiron 153
	ret