Subversion Repositories Kolibri OS

Rev

Rev 313 | 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. ; Áèáëèîòåêà äëÿ ÷èïîâ WinBond
  8. ;
  9. ;
  10. ;    Äîïèñàòü ïîëó÷åíèå èíôû ñ äðóãèõ äàò÷èêîâ
  11. ;    W83627DHG ìîíèòîðèíã àíàëîãè÷åí W83627EHF, äîïèñàòü ó÷¸ò DIV_B2
  12. ;  + 16.03.06 Èñïðàâëåíà îøèáêà â wb_get_cpu_temper ñ äåñÿòûõ ãðàäóñà (áûëî 30.5 30.0 31.5 ...)
  13. ;
  14. ;
  15. ;    Î ìàðêèðîâêå (?) : H - H/W Monitor, G - Pb-free package, T - ACPI, S - Smart Card Reader Interface
  16. ;      D - SuperIO supporting Intel* PECI* & SST* interfaces, U - UART
  17. ;
  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      +      -
  23. msg_wb27THFA:   db 'W83627THF-A', 0     ; 0x1A
  24.  
  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      +      +
  28.  
  29.  
  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 ;-)
  36.  
  37. uglobal
  38. wb_fans_num     db      0
  39. endg
  40.  
  41. ;-----------------------------------
  42. wb_init:
  43. ; Ïðîâåðêà íàëè÷èÿ è èíèöèàëèçàöèÿ
  44. ; OUT - CF = 1 - error
  45.         cmp     byte[acc_type], 2       ; Only ISA and SMBus
  46.         jae     wb_no
  47.  
  48.         mov     al, 0x4e
  49.         xor     bl, bl
  50.         call    [IO_Write]
  51.         mov     al, 0x4f
  52.         call    [IO_Read]
  53.         mov     ah, al          ;!
  54.         mov     al, 0x4e
  55.         mov     bl, 0x80
  56.         call    [IO_Write]     
  57.         mov     al, 0x4f
  58.         call    [IO_Read]
  59.         cmp     ax, 0xa35c
  60.         jne     wb_no           ; ýòî íå Winbond !!!
  61.  
  62.         ; --- óçíà¸ì èäåíòèôèêàòîð ÷èïà --
  63.         mov     al, 0x58
  64.         call    [IO_Read]
  65.         and     al, 0xFE        ; 0x20 = 0x21, 0x60 = 0x61, etc
  66.         mov     byte[wb_fans_num], 3
  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
  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
  93.         mov     edx, msg_wbunk
  94. @@:     mov     [hwm_chip_name], edx
  95.         clc
  96.         ret
  97. wb_no:  stc
  98.         ret
  99.  
  100. ;-----------------------------------
  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. ;-----------------------------------
  112. wb_get_temp:
  113.         ; temp 1
  114.         mov     al, 0x4e        ; Âûáèðàåì bank 1
  115.         mov     bl, 1
  116.         call    [IO_Write]
  117.         mov     al, 0x50        ; Ïîëó÷àåì ñòàðøèé áàéò òåìïåðàòóðû (ãðàäóñû)
  118.         call    [IO_Read]
  119.         mov     [hwm_temps], al
  120.         mov     al, 0x51        ; Ïîëó÷àåì ìëàäøèé áàéò òåìïåðàòóðû  (x.5`C)
  121.         call    [IO_Read]
  122.         cmp     al, 0           ; if al == 0 then x.0, else x.5
  123.         je      @f
  124.         mov     al, 5
  125. @@:     mov     [hwm_temps + 1], al
  126.  
  127.         ; temp 2 (3 SYSTIN)
  128.         mov     al, 0x4e        ; Âûáèðàåì bank 0
  129.         xor     bl, bl
  130.         call    [IO_Write]
  131.         mov     al, 0x27        ; Ïîëó÷àåì ñòàðøèé áàéò òåìïåðàòóðû (ãðàäóñû)
  132.         call    [IO_Read]
  133.         mov     [hwm_temps + 2], al
  134.        
  135.         ; temp 3 (VTIN)
  136.         mov     al, 0x4e        ; Âûáèðàåì bank 2
  137.         mov     bl, 2
  138.         call    [IO_Write]
  139.         mov     al, 0x50        ; Ïîëó÷àåì ñòàðøèé áàéò òåìïåðàòóðû (ãðàäóñû)
  140.         call    [IO_Read]
  141.         mov     [hwm_temps + 4], al
  142.         mov     al, 0x51        ; Ïîëó÷àåì ìëàäøèé áàéò òåìïåðàòóðû  (x.5`C)
  143.         call    [IO_Read]
  144.         cmp     al, 0           ; if al == 0 then x.0, else x.5
  145.         je      @f
  146.         mov     al, 5
  147. @@:     mov     [hwm_temps + 5], al
  148.  
  149.         ; Ïðîâåðêà òåìïåðàòóðû, äàò÷èêè ñ 127.5`C íå èñïîëüçóþòñÿ
  150.         mov     ecx, 3
  151.         mov     esi, hwm_temps
  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
  158.        
  159.         ret
  160. ;-----------------------------------
  161. wb_get_fan_speed:
  162.         ; fan1
  163.         mov     al, 0x47
  164.         call    [IO_Read]
  165.         and     al, 0x30
  166.         shr     al, 4
  167.         mov     ebx, 1
  168.         mov     cl, al
  169.         shl     ebx, cl ; <- div1
  170.         xor     eax, eax
  171.         mov     al,  0x28
  172.         call    [IO_Read]
  173.         cmp     al, 255
  174.         jne     @f
  175.         xor     eax, eax        ; ???
  176.         ret                     ; ???
  177. @@:     mul     ebx
  178.         mov     ebx, eax
  179.         mov     eax, 1350000
  180.         xor     edx, edx
  181.         div     ebx
  182.         mov     [hwm_rpms], eax
  183.        
  184.         mov     al, 0x47
  185.         call    [IO_Read]
  186.         shr     al, 6
  187.         mov     ebx, 1
  188.         mov     cl, al
  189.         shl     ebx, cl ; <- div2
  190.         xor     eax, eax
  191.         mov     al,  0x29
  192.         call    [IO_Read]
  193.         cmp     al, 255
  194.         jne     @f
  195.         xor     eax, eax
  196.         ret
  197. @@:     mul     ebx
  198.         mov     ebx, eax
  199.         mov     eax, 1350000
  200.         xor     edx, edx
  201.         div     ebx
  202.         mov     [hwm_rpms + 4], eax
  203.        
  204.         mov     al, 0x4B
  205.         call    [IO_Read]
  206.         shr     al, 6
  207.         mov     ebx, 1
  208.         mov     cl, al
  209.         shl     ebx, cl ; <- div3
  210.         xor     eax, eax
  211.         mov     al,  0x2A
  212.         call    [IO_Read]
  213.         cmp     al, 255
  214.         jne     @f
  215.         xor     eax, eax
  216.         ret
  217. @@:     mul     ebx
  218.         mov     ebx, eax
  219.         mov     eax, 1350000
  220.         xor     edx, edx
  221.         div     ebx
  222.         mov     [hwm_rpms + 8], eax
  223.  
  224.         cmp     byte[wb_fans_num], 3
  225.         jna     .wb_f_e
  226.  
  227.         mov     al, 0x59
  228.         call    [IO_Read]
  229.         and     al, 3
  230.         mov     ebx, 1
  231.         mov     cl, al
  232.         shl     ebx, cl ; <- div4, äîïèñàòü ó÷¸ò DIV_B2
  233.         xor     eax, eax
  234.         mov     al,  0x3F
  235.         call    [IO_Read]
  236.         cmp     al, 255
  237.         jne     @f
  238.         xor     eax, eax
  239.         ret
  240. @@:     mul     ebx
  241.         mov     ebx, eax
  242.         mov     eax, 1350000
  243.         xor     edx, edx
  244.         div     ebx
  245.         mov     [hwm_rpms + 12], eax
  246.        
  247.         mov     al, 0x59
  248.         call    [IO_Read]
  249.         shr     al, 2
  250.         and     al, 3
  251.         mov     ebx, 1
  252.         mov     cl, al
  253.         shl     ebx, cl ; <- div5, äîïèñàòü ó÷¸ò DIV_B2
  254.         xor     eax, eax
  255.         mov     al, 0x4e        ; Âûáèðàåì bank 5
  256.         mov     bl, 5
  257.         call    [IO_Write]
  258.         mov     al,  0x53
  259.         call    [IO_Read]
  260.         cmp     al, 255
  261.         jne     @f
  262.         xor     eax, eax
  263.         ret
  264. @@:     mul     ebx
  265.         mov     ebx, eax
  266.         mov     eax, 1350000
  267.         xor     edx, edx
  268.         div     ebx
  269.         mov     [hwm_rpms + 16], eax
  270.  
  271. .wb_f_e:
  272.         ret
  273. ;-----------------------------------
  274. wb_get_volt:
  275.         ;mov    edi, wb_coeff           ; <-- possible differences for miscellaneous chip
  276.         mov     esi, hwm_voltages
  277.         xor     ecx, ecx
  278. @@:     mov     eax, ecx
  279.         add     al, 0x20
  280.         call    [IO_Read]
  281.         fld     dword [edi + ecx * 4]
  282.         push    eax
  283.         fild    dword [esp]
  284.         fmulp   st1, st0
  285.         fstp    dword [esi + ecx * 4]
  286.         pop     eax
  287.         inc     ecx
  288.         cmp     ecx, 7
  289.         jb      @b
  290.         ret
  291.  
  292. wb_coeff:       dd 0.016                ; Vcore
  293.                 dd 0.016                ; Vin0
  294.                 dd 0.016                ; Vin1 (+3.3V)
  295.                 dd 0.02688              ; AVcc (+5V)
  296.                 dd 0.0608               ; Vin2 (+12V)
  297.                 dd 0.0822857142857145   ; -12V
  298.                 dd -0.02408             ; -5V ; false
  299.                
  300. wb_n12v_const   dd -14.9142857142857
  301.  
  302.        
  303.        
  304.