Subversion Repositories Kolibri OS

Rev

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

  1. ;
  2. ; HWM abstract interface, provide:
  3. ;  hwm_init, hwm_get_params, hwm_enable, hwm_temps, hwm_rpms, hwm_voltages, hwm_chip_name
  4. ;
  5.  
  6.  
  7. if SMBus eq yes
  8.  include        'SMBus.inc'
  9. end if
  10.  
  11. include         'hwm_wb.inc'
  12. include         'hwm_it87.inc'
  13. include         'hwm_uguru.inc'
  14. ;include        'hwm_via686.inc'
  15.  
  16. uglobal
  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:
  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
  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
  36. endg
  37.  
  38. IO_Read         dd      isaRead         ; In : al - addr, out : al - value
  39. IO_Write        dd      isaWrite        ; In : al - addr, bl - value
  40.  
  41. hwm_unk         db      9, 'Not found'
  42. hwm_chip_name   dd      hwm_unk
  43.  
  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. ;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  60. hwm_init:
  61. ; Ïðîâåðêà íàëè÷èÿ è èíèöèàëèçàöèÿ
  62.         pusha
  63.         ; Èùåì äàò÷èêè íà øèíå ISA
  64.         call    isaInit
  65.         jc      @f
  66.         call    chips_probe
  67.         cmp     byte[hwm_enable], 0
  68.         jne     .exit
  69. @@:     call    isaClose
  70.  
  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
  94.         test    eax, eax
  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
  112.         ret
  113.  
  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
  125.        
  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
  134.         ret
  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.         ; @@:  
  146.         ret
  147.  
  148. isaClose:
  149.         ; îñâîáîæäàåì 0x295 è 0x296 ïîðòû
  150.         mov     ecx, 0x295
  151.         mov     edx, 0x296
  152.         call    FreePorts
  153.         ret
  154.