Subversion Repositories Kolibri OS

Rev

Rev 510 | 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_hudson.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      'Not found', 0
  47. hwm_chip_name   dd      hwm_unk
  48.  
  49. ; NOTE !!!
  50. ; HWMProbe - ñïèñîê, ïðîöåäóð ïðîâåðêè ÷èïîâ, çàêàí÷èâàåòñÿ
  51. ; íóëåâûì äâîéíûì ñëîâîì
  52. ; HWMGetParam - ñïèñîê, ïðîöåäóð ïîëó÷åíèÿ ïàðàìåòðîâ
  53. ; îáà ýòè ñïèñêà äîëæíû ñîîòâåòñòâîâàòü äðóã äðóãó ïî
  54. ; ïî ïîðÿäêó ïðîöåäóð
  55. HWMProbe:      
  56.         dd      wb_init
  57.                 dd      it87_init
  58.                 dd      uGuru_init
  59. ;        dd  hudson_init
  60.                 dd      0               ; <- êîíåö ñïèñêà
  61.                
  62. HWMGetParam:   
  63.         dd      wb_getparam
  64.                 dd      it87_getparam
  65.                 dd      uGuru_getparam
  66. ;        dd  hudson_getparam
  67.                
  68. ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  69. hwm_init:
  70. ; Ïðîâåðêà íàëè÷èÿ è èíèöèàëèçàöèÿ
  71.         pusha
  72.         ; Èùåì äàò÷èêè íà øèíå ISA
  73.         call    isaInit
  74.         jc      @f
  75.         call    chips_probe
  76.         cmp     byte[hwm_enable], 0
  77.         jne     .exit
  78. @@:     call    isaClose
  79.  
  80.         ; Èùåì äàò÷èêè íà øèíå SMBus
  81.         inc     byte [acc_type]
  82. if SMBus eq yes
  83.         call    smbInit
  84.         jc      @f
  85.         call    chips_probe
  86.         cmp     byte[hwm_enable], 0
  87.         jne     .exit
  88. @@:     call    smbClose
  89. end if
  90.         ; Èùåì äàò÷èêè íà ñîáñòâåííîé øèíå (LPC etc)
  91.         inc     byte [acc_type]
  92.         call    chips_probe
  93.  
  94. .exit:  popa
  95.         ret
  96. ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  97. chips_probe:
  98. ; Íàõîäèì íóæíûé ÷èï
  99. ; Out : hwm_enable = !0 if found, else hwm_enable not changed
  100.         cld                     ; Paranoia
  101.         mov     esi, HWMProbe
  102. @@:     lodsd
  103.         test    eax, eax
  104.         jz      @f              ; Êîíåö ñïèñêà
  105.         call    eax
  106.         jc      @b
  107.         sub     esi, HWMProbe
  108.         shr     esi, 2
  109.         mov     dword[hwm_enable], esi
  110. @@:     ret
  111. ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  112. hwm_get_params:
  113.         pusha
  114.         mov     eax, [hwm_enable]
  115.         test    eax, eax
  116.         jz      @f
  117.         dec     eax
  118.         sal     eax, 2
  119.         call    dword[eax + HWMGetParam]
  120. @@:     popa
  121.         ret
  122.  
  123. ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  124. ; ISA interface
  125. ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  126. isaRead:
  127.         push    edx
  128.         mov     dx, 0x295
  129.         out     dx, al
  130.         inc     edx
  131.         in      al, dx
  132.         pop     edx
  133.         ret
  134.        
  135. isaWrite:
  136.         push    edx
  137.         mov     dx, 0x295
  138.         out     dx, al
  139.         inc     edx
  140.         mov     al, bl
  141.         out     dx, al
  142.         pop     edx
  143.         ret
  144.  
  145. isaInit:
  146.         ; Out : CF = 0 if Ok
  147.         ; ðåçåðâèðóåì 0x295 è 0x296 ïîðòû
  148.         mov     ecx, 0x295
  149.         mov     edx, 0x296
  150.         call    ReservePorts
  151.         ; jc    @f
  152.         ; mov   [IO_Read], isaRead
  153.         ; mov   [IO_Write], isaWrite
  154.         ; @@:  
  155.         ret
  156.  
  157. isaClose:
  158.         ; îñâîáîæäàåì 0x295 è 0x296 ïîðòû
  159.         mov     ecx, 0x295
  160.         mov     edx, 0x296
  161.         call    FreePorts
  162.         ret
  163.