Subversion Repositories Kolibri OS

Rev

Rev 223 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;
  2. ; Ghost Monitor - óòèëèòà (ñòðåññ) òåñòèðîâàíèÿ è ìîíèòîðèíãà ñèñòåìû
  3. ; Copyright (C) 2005, 2006, 2007 Mihailov Ilia (ghost.nsk@mail.ru)
  4. ; All Right Reserved
  5.  
  6. ;
  7. ; HWM abstract interface, provide:
  8. ;  hwm_init, hwm_get_params, hwm_enable, hwm_temps, hwm_rpms, hwm_voltages, hwm_chip_name
  9. ;
  10.  
  11.  
  12. if SMBus eq yes
  13.  include        'SMBus.inc'
  14. end if
  15.  
  16. include         'hwm_wb.inc'
  17. include         'hwm_it87.inc'
  18. include         'hwm_uguru.inc'
  19. ;include        'hwm_via686.inc'
  20.  
  21. uglobal
  22.         hwm_enable:
  23.                 dd      0               ; 0 - no, 1 - Winbond, 2 - ITE, ... see HWMProbe list
  24.         hwm_temps:
  25.                 db      0,0, 0,0, 0,0   ; ãðàäóñ, äåñÿòûå, ãðàäóñ, ...
  26.         hwm_rpms:
  27.                 dd      0, 0, 0, 0, 0   ; fan1, fan2, fan3, ...
  28.         hwm_voltages:
  29.         Vcore   dd      0.0
  30.         Vin0    dd      0.0
  31.         Vin1    dd      0.0
  32.         AVcc    dd      0.0
  33.         Vin2    dd      0.0
  34.         V12     dd      0.0
  35.         V5      dd      0.0
  36.         vol8    dd      0.0
  37.         vol9    dd      0.0
  38.         vol10   dd      0.0
  39.         vol11   dd      0.0
  40.         acc_type db     0               ; 0 - ISA Bus, 1 - SMBus, 2 - other
  41. endg
  42.  
  43. IO_Read         dd      isaRead         ; In : al - addr, out : al - value
  44. IO_Write        dd      isaWrite        ; In : al - addr, bl - value
  45.  
  46. hwm_unk         db      9, 'Not found'
  47. hwm_chip_name   dd      hwm_unk
  48.  
  49. ; NOTE !!!
  50. ; HWMProbe - ñïèñîê, ïðîöåäóð ïðîâåðêè ÷èïîâ, çàêàí÷èâàåòñÿ
  51. ; íóëåâûì äâîéíûì ñëîâîì
  52. ; HWMGetParam - ñïèñîê, ïðîöåäóð ïîëó÷åíèÿ ïàðàìåòðîâ
  53. ; îáà ýòè ñïèñêà äîëæíû ñîîòâåòñòâîâàòü äðóã äðóãó ïî
  54. ; ïî ïîðÿäêó ïðîöåäóð
  55. HWMProbe:       dd      wb_init
  56.                 dd      it87_init
  57.                 dd      uGuru_init
  58.                 dd      0               ; <- êîíåö ñïèñêà
  59.                
  60. HWMGetParam:    dd      wb_getparam
  61.                 dd      it87_getparam
  62.                 dd      uGuru_getparam
  63.                
  64. ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  65. hwm_init:
  66. ; Ïðîâåðêà íàëè÷èÿ è èíèöèàëèçàöèÿ
  67.         pusha
  68.         ; Èùåì äàò÷èêè íà øèíå ISA
  69.         call    isaInit
  70.         jc      @f
  71.         call    chips_probe
  72.         cmp     byte[hwm_enable], 0
  73.         jne     .exit
  74. @@:     call    isaClose
  75.  
  76.         ; Èùåì äàò÷èêè íà øèíå SMBus
  77.         inc     byte [acc_type]
  78. if SMBus eq yes
  79.         call    smbInit
  80.         jc      @f
  81.         call    chips_probe
  82.         cmp     byte[hwm_enable], 0
  83.         jne     .exit
  84. @@:     call    smbClose
  85. end if
  86.         ; Èùåì äàò÷èêè íà ñîáñòâåííîé øèíå (LPC etc)
  87.         inc     byte [acc_type]
  88.         call    chips_probe
  89.  
  90. .exit:  popa
  91.         ret
  92. ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  93. chips_probe:
  94. ; Íàõîäèì íóæíûé ÷èï
  95. ; Out : hwm_enable = !0 if found, else hwm_enable not changed
  96.         cld                     ; Paranoia
  97.         mov     esi, HWMProbe
  98. @@:     lodsd
  99.         test    eax, eax
  100.         jz      @f              ; Êîíåö ñïèñêà
  101.         call    eax
  102.         jc      @b
  103.         sub     esi, HWMProbe
  104.         shr     esi, 2
  105.         mov     dword[hwm_enable], esi
  106. @@:     ret
  107. ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  108. hwm_get_params:
  109.         pusha
  110.         mov     eax, [hwm_enable]
  111.         test    eax, eax
  112.         jz      @f
  113.         dec     eax
  114.         sal     eax, 2
  115.         call    dword[eax + HWMGetParam]
  116. @@:     popa
  117.         ret
  118.  
  119. ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  120. ; ISA interface
  121. ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  122. isaRead:
  123.         push    edx
  124.         mov     dx, 0x295
  125.         out     dx, al
  126.         inc     edx
  127.         in      al, dx
  128.         pop     edx
  129.         ret
  130.        
  131. isaWrite:
  132.         push    edx
  133.         mov     dx, 0x295
  134.         out     dx, al
  135.         inc     edx
  136.         mov     al, bl
  137.         out     dx, al
  138.         pop     edx
  139.         ret
  140.  
  141. isaInit:
  142.         ; Out : CF = 0 if Ok
  143.         ; ðåçåðâèðóåì 0x295 è 0x296 ïîðòû
  144.         mov     ecx, 0x295
  145.         mov     edx, 0x296
  146.         call    ReservePorts
  147.         ; jc    @f
  148.         ; mov   [IO_Read], isaRead
  149.         ; mov   [IO_Write], isaWrite
  150.         ; @@:  
  151.         ret
  152.  
  153. isaClose:
  154.         ; îñâîáîæäàåì 0x295 è 0x296 ïîðòû
  155.         mov     ecx, 0x295
  156.         mov     edx, 0x296
  157.         call    FreePorts
  158.         ret
  159.