Subversion Repositories Kolibri OS

Rev

Rev 500 | 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.         test    ebx, ebx
  182.         jz      .div0
  183.         div     ebx
  184.         mov     [hwm_rpms], eax
  185.  
  186.         mov     al, 0x47
  187.         call    [IO_Read]
  188.         shr     al, 6
  189.         mov     ebx, 1
  190.         mov     cl, al
  191.         shl     ebx, cl ; <- div2
  192.         xor     eax, eax
  193.         mov     al,  0x29
  194.         call    [IO_Read]
  195.         cmp     al, 255
  196.         jne     @f
  197.         xor     eax, eax
  198. .div0:
  199.         ret
  200. @@:     mul     ebx
  201.         mov     ebx, eax
  202.         mov     eax, 1350000
  203.         xor     edx, edx
  204.         test    ebx, ebx
  205.         jz      .div0
  206.         div     ebx
  207.         mov     [hwm_rpms + 4], eax
  208.  
  209.         mov     al, 0x4B
  210.         call    [IO_Read]
  211.         shr     al, 6
  212.         mov     ebx, 1
  213.         mov     cl, al
  214.         shl     ebx, cl ; <- div3
  215.         xor     eax, eax
  216.         mov     al,  0x2A
  217.         call    [IO_Read]
  218.         cmp     al, 255
  219.         jne     @f
  220.         xor     eax, eax
  221.         ret
  222. @@:     mul     ebx
  223.         mov     ebx, eax
  224.         mov     eax, 1350000
  225.         xor     edx, edx
  226.         test    ebx, ebx
  227.         jz      .div0
  228.         div     ebx
  229.         mov     [hwm_rpms + 8], eax
  230.  
  231.         cmp     byte[wb_fans_num], 3
  232.         jna     .wb_f_e
  233.  
  234.         mov     al, 0x59
  235.         call    [IO_Read]
  236.         and     al, 3
  237.         mov     ebx, 1
  238.         mov     cl, al
  239.         shl     ebx, cl ; <- div4, ¤®¯¨á âì ãçñâ DIV_B2
  240.         xor     eax, eax
  241.         mov     al,  0x3F
  242.         call    [IO_Read]
  243.         cmp     al, 255
  244.         jne     @f
  245.         xor     eax, eax
  246.         ret
  247. @@:     mul     ebx
  248.         mov     ebx, eax
  249.         mov     eax, 1350000
  250.         xor     edx, edx
  251.         test    ebx, ebx
  252.         jz      .div0
  253.         div     ebx
  254.         mov     [hwm_rpms + 12], eax
  255.  
  256.         mov     al, 0x59
  257.         call    [IO_Read]
  258.         shr     al, 2
  259.         and     al, 3
  260.         mov     ebx, 1
  261.         mov     cl, al
  262.         shl     ebx, cl ; <- div5, ¤®¯¨á âì ãçñâ DIV_B2
  263.         xor     eax, eax
  264.         mov     al, 0x4e        ; ‚롨ࠥ¬ bank 5
  265.         mov     bl, 5
  266.         call    [IO_Write]
  267.         mov     al,  0x53
  268.         call    [IO_Read]
  269.         cmp     al, 255
  270.         jne     @f
  271.         xor     eax, eax
  272.         ret
  273. @@:     mul     ebx
  274.         mov     ebx, eax
  275.         mov     eax, 1350000
  276.         xor     edx, edx
  277.         test    ebx, ebx
  278.         jz      .wb_f_e
  279.         div     ebx
  280.         mov     [hwm_rpms + 16], eax
  281.  
  282. .wb_f_e:
  283.         ret
  284. ;-----------------------------------
  285. wb_get_volt:
  286.         ;mov    edi, wb_coeff           ; <-- possible differences for miscellaneous chip
  287.         mov     esi, hwm_voltages
  288.         xor     ecx, ecx
  289. @@:     mov     eax, ecx
  290.         add     al, 0x20
  291.         call    [IO_Read]
  292.         fld     dword [edi + ecx * 4]
  293.         push    eax
  294.         fild    dword [esp]
  295.         fmulp   st1, st0
  296.         fstp    dword [esi + ecx * 4]
  297.         pop     eax
  298.         inc     ecx
  299.         cmp     ecx, 7
  300.         jb      @b
  301.         ret
  302.  
  303. wb_coeff:       dd 0.016                ; Vcore
  304.                 dd 0.016                ; Vin0
  305.                 dd 0.016                ; Vin1 (+3.3V)
  306.                 dd 0.02688              ; AVcc (+5V)
  307.                 dd 0.0608               ; Vin2 (+12V)
  308.                 dd 0.0822857142857145   ; -12V
  309.                 dd -0.02408             ; -5V ; false
  310.  
  311. wb_n12v_const   dd -14.9142857142857
  312.  
  313.  
  314.  
  315.