Subversion Repositories Kolibri OS

Rev

Rev 3766 | Blame | Last modification | View Log | Download | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                              ;;
  3. ;; Copyright (C) KolibriOS team 2004-2013. All rights reserved. ;;
  4. ;; Distributed under terms of the GNU General Public License    ;;
  5. ;;                                                              ;;
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7.  
  8. format MS COFF
  9.  
  10. DEBUG           = 1
  11.  
  12. include 'proc32.inc'
  13. include 'imports.inc'
  14. include '../struct.inc'
  15.  
  16.  
  17. VID_INTEL         = 0x8086
  18. VID_NVIDIA        = 0x10DE
  19. VID_VIA           = 0x1106
  20. VID_SIS           = 0x1039
  21. VID_FM801         = 0x1319
  22. VID_CREATIVE      = 0x1102
  23. VID_ATI           = 0x1002
  24. VID_AMD           = 0x1022
  25. VID_ULI           = 0x10B9
  26. VID_TERA          = 0x6549
  27. VID_RDC           = 0x17F3
  28. VID_VMWARE        = 0x15AD
  29.  
  30. CTRL_ICH          = 0x2415
  31. CTRL_ICH0         = 0x2425
  32. CTRL_ICH2         = 0x2435
  33. CTRL_ICH3         = 0x2445
  34. CTRL_ICH4         = 0x24C5
  35. CTRL_ICH5         = 0x24D5
  36. CTRL_ICH6         = 0x266E
  37. CTRL_ICH7         = 0x27DE
  38.  
  39. CTRL_NFORCE       = 0x01B1
  40. CTRL_NFORCE2      = 0x006A
  41. CTRL_NFORCE3      = 0x00DA
  42. CTRL_MCP04        = 0x003A
  43. CTRL_CK804        = 0x0059
  44. CTRL_CK8          = 0x008A
  45. CTRL_CK8S         = 0x00EA
  46. CTRL_MCP51        = 0x026B
  47.  
  48. CTRL_VT82C686     = 0x3058
  49. CTRL_VT8233_5     = 0x3059
  50.  
  51. CTRL_SIS          = 0x7012
  52.  
  53. CTRL_FM801        = 0x0801
  54.  
  55. CTRL_CT0200       = 0x0006  ; Dell OEM version (EMU10K1X)
  56.  
  57. CTRL_INTEL_SCH2          =  0x080a
  58. CTRL_INTEL_HPT           =  0x0c0c
  59. CTRL_INTEL_CPT           =  0x1c20
  60. CTRL_INTEL_PGB           =  0x1d20
  61. CTRL_INTEL_PPT1          =  0x1e20
  62. CTRL_INTEL_82801F        =  0x2668
  63. CTRL_INTEL_63XXESB       =  0x269a
  64. CTRL_INTEL_82801G        =  0x27d8
  65. CTRL_INTEL_82801H        =  0x284b
  66. CTRL_INTEL_82801_UNK1    =  0x2911
  67. CTRL_INTEL_82801I        =  0x293e
  68. CTRL_INTEL_82801_UNK2    =  0x293f
  69. CTRL_INTEL_82801JI       =  0x3a3e
  70. CTRL_INTEL_82801JD       =  0x3a6e
  71. CTRL_INTEL_PCH           =  0x3b56
  72. CTRL_INTEL_PCH2          =  0x3b57
  73. CTRL_INTEL_SCH           =  0x811b
  74. CTRL_INTEL_LPT           =  0x8c20
  75.  
  76. CTRL_NVIDIA_MCP51        =  0x026c
  77. CTRL_NVIDIA_MCP55        =  0x0371
  78. CTRL_NVIDIA_MCP61_1      =  0x03e4
  79. CTRL_NVIDIA_MCP61_2      =  0x03f0
  80. CTRL_NVIDIA_MCP65_1      =  0x044a
  81. CTRL_NVIDIA_MCP65_2      =  0x044b
  82. CTRL_NVIDIA_MCP67_1      =  0x055c
  83. CTRL_NVIDIA_MCP67_2      =  0x055d
  84. CTRL_NVIDIA_MCP78_1      =  0x0774
  85. CTRL_NVIDIA_MCP78_2      =  0x0775
  86. CTRL_NVIDIA_MCP78_3      =  0x0776
  87. CTRL_NVIDIA_MCP78_4      =  0x0777
  88. CTRL_NVIDIA_MCP73_1      =  0x07fc
  89. CTRL_NVIDIA_MCP73_2      =  0x07fd
  90. CTRL_NVIDIA_MCP79_1      =  0x0ac0
  91. CTRL_NVIDIA_MCP79_2      =  0x0ac1
  92. CTRL_NVIDIA_MCP79_3      =  0x0ac2
  93. CTRL_NVIDIA_MCP79_4      =  0x0ac3
  94. CTRL_NVIDIA_0BE2         =  0x0be2
  95. CTRL_NVIDIA_0BE3         =  0x0be3
  96. CTRL_NVIDIA_0BE4         =  0x0be4
  97. CTRL_NVIDIA_GT100        =  0x0be5
  98. CTRL_NVIDIA_GT106        =  0x0be9
  99. CTRL_NVIDIA_GT108        =  0x0bea
  100. CTRL_NVIDIA_GT104        =  0x0beb
  101. CTRL_NVIDIA_GT116        =  0x0bee
  102. CTRL_NVIDIA_MCP89_1      =  0x0d94
  103. CTRL_NVIDIA_MCP89_2      =  0x0d95
  104. CTRL_NVIDIA_MCP89_3      =  0x0d96
  105. CTRL_NVIDIA_MCP89_4      =  0x0d97
  106. CTRL_NVIDIA_GF119        =  0x0e08
  107. CTRL_NVIDIA_GF110_1      =  0x0e09
  108. CTRL_NVIDIA_GF110_2      =  0x0e0c
  109.  
  110. CTRL_ATI_SB450           =  0x437b
  111. CTRL_ATI_SB600           =  0x4383
  112.  
  113. CTRL_ATI_RS600           =  0x793b
  114. CTRL_ATI_RS690           =  0x7919
  115. CTRL_ATI_RS780           =  0x960f
  116. CTRL_ATI_RS_UNK1         =  0x970f
  117. CTRL_ATI_R600            =  0xaa00
  118. CTRL_ATI_RV630           =  0xaa08
  119. CTRL_ATI_RV610           =  0xaa10
  120. CTRL_ATI_RV670           =  0xaa18
  121. CTRL_ATI_RV635           =  0xaa20
  122. CTRL_ATI_RV620           =  0xaa28
  123. CTRL_ATI_RV770           =  0xaa30
  124. CTRL_ATI_RV730           =  0xaa38
  125. CTRL_ATI_RV710           =  0xaa40
  126. CTRL_ATI_RV740           =  0xaa48
  127.  
  128. CTRL_AMD_HUDSON          =  0x780d
  129.  
  130. CTRL_VIA_VT82XX          =  0x3288
  131. CTRL_VIA_VT61XX          =  0x9140
  132. CTRL_VIA_VT71XX          =  0x9170
  133.  
  134. CTRL_SIS_966             =  0x7502
  135.  
  136. CTRL_ULI_M5461           =  0x5461
  137.  
  138. CTRL_CREATIVE_CA0110_IBG     =  0x0009
  139. CTRL_CREATIVE_SOUND_CORE3D_1 =  0x0010
  140. CTRL_CREATIVE_SOUND_CORE3D_2 =  0x0012
  141.  
  142. CTRL_TERA_UNK1           =  0x1200
  143.  
  144. CTRL_RDC_R3010           =  0x3010
  145.  
  146. CTRL_VMWARE_UNK1         =  0x1977
  147.  
  148. API_VERSION             = 0x01000100
  149.  
  150. public START
  151. public service_proc
  152. public version
  153.  
  154. struct  SRV
  155.         srv_name        rb 16    ;ASCIIZ string
  156.         magic           dd ?     ;+0x10 ;'SRV '
  157.         size            dd ?     ;+0x14 ;size of structure SRV
  158.         fd              dd ?     ;+0x18 ;next SRV descriptor
  159.         bk              dd ?     ;+0x1C ;prev SRV descriptor
  160.         base            dd ?     ;+0x20 ;service base address
  161.         entry           dd ?     ;+0x24 ;service START function
  162.         srv_proc        dd ?     ;+0x28 ;user mode service handler
  163.         srv_proc_ex     dd ?     ;+0x2C ;kernel mode service handler
  164. ends
  165.  
  166.  
  167. section '.flat' code readable align 16
  168.  
  169. proc START stdcall, state:dword
  170.  
  171.         mov     eax, [srv_entry]
  172.         cmp     [state], 1
  173.         jne     .stop
  174.  
  175.      if DEBUG
  176.         mov     esi, msgInit
  177.         call    SysMsgBoardStr
  178.      end if
  179.  
  180.         test    eax, eax
  181.         jnz     .done
  182.         call    detect_controller
  183.         ret
  184. .stop:
  185.         test    eax, eax
  186.         jz      .done
  187.         leave
  188.         jmp     eax
  189. .done:
  190.         xor     eax, eax
  191.         ret
  192. endp
  193.  
  194. align 4
  195. proc service_proc stdcall, ioctl:dword
  196.  
  197.         or      eax, -1
  198.         ret
  199. endp
  200.  
  201. align 4
  202. proc detect_controller
  203.  
  204.            locals
  205.              last_bus dd ?
  206.              bus      dd ?
  207.              devfn    dd ?
  208.            endl
  209.  
  210.         xor     eax, eax
  211.         mov     [bus], eax
  212.         inc     eax
  213.         call    PciApi
  214.         cmp     eax, -1
  215.         je      .err
  216.  
  217.         mov     [last_bus], eax
  218.  
  219.   .next_bus:
  220.         and     [devfn], 0
  221.   .next_dev:
  222.         stdcall PciRead32, [bus], [devfn], dword 0
  223.         test    eax, eax
  224.         jz      .next
  225.         cmp     eax, -1
  226.         je      .next
  227.  
  228.         mov     edi, devices
  229.   @@:
  230.         mov     ebx, [edi]
  231.         test    ebx, ebx
  232.         jz      .next
  233.  
  234.         cmp     eax, ebx
  235.         je      .found
  236.         add     edi, 8
  237.         jmp     @B
  238.   .next:
  239.         inc     [devfn]
  240.         cmp     [devfn], 256
  241.         jb      .next_dev
  242.         mov     eax, [bus]
  243.         inc     eax
  244.         mov     [bus], eax
  245.         cmp     eax, [last_bus]
  246.         jna     .next_bus
  247.         xor     eax, eax
  248.         ret
  249.   .found:
  250.  
  251.      if DEBUG
  252.         mov     esi, msgLoading
  253.         call    SysMsgBoardStr
  254.  
  255.         mov     esi, dword[edi+4]
  256.         call    SysMsgBoardStr
  257.  
  258.         mov     esi, msgNewline
  259.         call    SysMsgBoardStr
  260.      end if
  261.  
  262.         stdcall GetService, dword[edi+4]
  263.         test    eax, eax
  264.         jz      .err
  265.  
  266.         mov     edx, [eax+SRV.entry]
  267.         mov     [srv_entry], edx
  268.         ret
  269.  
  270.   .err:
  271.      if DEBUG
  272.         mov     esi, msgFail
  273.         call    SysMsgBoardStr
  274.      end if
  275.  
  276.         xor     eax, eax
  277.         ret
  278.  
  279. endp
  280.  
  281. align 4
  282. devices         dd (CTRL_ICH  shl 16)+VID_INTEL, intelac97
  283.                 dd (CTRL_ICH0 shl 16)+VID_INTEL, intelac97
  284.                 dd (CTRL_ICH2 shl 16)+VID_INTEL, intelac97
  285.                 dd (CTRL_ICH3 shl 16)+VID_INTEL, intelac97
  286.                 dd (CTRL_ICH4 shl 16)+VID_INTEL, intelac97
  287.                 dd (CTRL_ICH5 shl 16)+VID_INTEL, intelac97
  288.                 dd (CTRL_ICH6 shl 16)+VID_INTEL, intelac97
  289.                 dd (CTRL_ICH7 shl 16)+VID_INTEL, intelac97
  290.  
  291.                 dd (CTRL_NFORCE  shl 16)+VID_NVIDIA, intelac97
  292.                 dd (CTRL_NFORCE2 shl 16)+VID_NVIDIA, intelac97
  293.                 dd (CTRL_NFORCE3 shl 16)+VID_NVIDIA, intelac97
  294.                 dd (CTRL_MCP04   shl 16)+VID_NVIDIA, intelac97
  295.                 dd (CTRL_CK804   shl 16)+VID_NVIDIA, intelac97
  296.                 dd (CTRL_CK8     shl 16)+VID_NVIDIA, intelac97
  297.                 dd (CTRL_CK8S    shl 16)+VID_NVIDIA, intelac97
  298.                 dd (CTRL_MCP51   shl 16)+VID_NVIDIA, intelac97
  299.  
  300.                 dd (CTRL_VT82C686  shl 16)+VID_VIA, vt823x
  301.                 dd (CTRL_VT8233_5  shl 16)+VID_VIA, vt823x
  302.  
  303.                 dd (CTRL_SIS  shl 16)+VID_SIS, sis
  304.  
  305.                 dd (CTRL_FM801 shl 16)+VID_FM801, fm801
  306.  
  307.                 dd (0x5000 shl 16)+0x1274, ensoniq
  308.                 dd (0x5880 shl 16)+0x1274, ensoniq
  309.  
  310.                 dd (CTRL_CT0200 shl 16)+VID_CREATIVE, emu10k1x
  311. ; Intel
  312.                 dd (CTRL_INTEL_SCH2    shl 16)+VID_INTEL, intelhda
  313.                 dd (CTRL_INTEL_HPT     shl 16)+VID_INTEL, intelhda
  314.                 dd (CTRL_INTEL_CPT     shl 16)+VID_INTEL, intelhda
  315.                 dd (CTRL_INTEL_PGB     shl 16)+VID_INTEL, intelhda
  316.                 dd (CTRL_INTEL_PPT1    shl 16)+VID_INTEL, intelhda
  317.                 dd (CTRL_INTEL_82801F  shl 16)+VID_INTEL, intelhda
  318.                 dd (CTRL_INTEL_63XXESB shl 16)+VID_INTEL, intelhda
  319.                 dd (CTRL_INTEL_82801G  shl 16)+VID_INTEL, intelhda
  320.                 dd (CTRL_INTEL_82801H  shl 16)+VID_INTEL, intelhda
  321.                 dd (CTRL_INTEL_82801_UNK1  shl 16)+VID_INTEL, intelhda
  322.                 dd (CTRL_INTEL_82801I  shl 16)+VID_INTEL, intelhda
  323.                 dd (CTRL_INTEL_82801_UNK2  shl 16)+VID_INTEL, intelhda
  324.                 dd (CTRL_INTEL_82801JI shl 16)+VID_INTEL, intelhda
  325.                 dd (CTRL_INTEL_82801JD shl 16)+VID_INTEL, intelhda
  326.                 dd (CTRL_INTEL_PCH     shl 16)+VID_INTEL, intelhda
  327.                 dd (CTRL_INTEL_PCH2    shl 16)+VID_INTEL, intelhda
  328.                 dd (CTRL_INTEL_SCH     shl 16)+VID_INTEL, intelhda
  329.                 dd (CTRL_INTEL_LPT     shl 16)+VID_INTEL, intelhda
  330. ; Nvidia
  331.                 dd (CTRL_NVIDIA_MCP51    shl 16)+VID_NVIDIA, intelhda
  332.                 dd (CTRL_NVIDIA_MCP55    shl 16)+VID_NVIDIA, intelhda
  333.                 dd (CTRL_NVIDIA_MCP61_1  shl 16)+VID_NVIDIA, intelhda
  334.                 dd (CTRL_NVIDIA_MCP61_2  shl 16)+VID_NVIDIA, intelhda
  335.                 dd (CTRL_NVIDIA_MCP65_1  shl 16)+VID_NVIDIA, intelhda
  336.                 dd (CTRL_NVIDIA_MCP65_2  shl 16)+VID_NVIDIA, intelhda
  337.                 dd (CTRL_NVIDIA_MCP67_1  shl 16)+VID_NVIDIA, intelhda
  338.                 dd (CTRL_NVIDIA_MCP67_2  shl 16)+VID_NVIDIA, intelhda
  339.                 dd (CTRL_NVIDIA_MCP73_1  shl 16)+VID_NVIDIA, intelhda
  340.                 dd (CTRL_NVIDIA_MCP73_2  shl 16)+VID_NVIDIA, intelhda
  341.                 dd (CTRL_NVIDIA_MCP78_1  shl 16)+VID_NVIDIA, intelhda
  342.                 dd (CTRL_NVIDIA_MCP78_2  shl 16)+VID_NVIDIA, intelhda
  343.                 dd (CTRL_NVIDIA_MCP78_3  shl 16)+VID_NVIDIA, intelhda
  344.                 dd (CTRL_NVIDIA_MCP78_4  shl 16)+VID_NVIDIA, intelhda
  345.                 dd (CTRL_NVIDIA_MCP79_1  shl 16)+VID_NVIDIA, intelhda
  346.                 dd (CTRL_NVIDIA_MCP79_2  shl 16)+VID_NVIDIA, intelhda
  347.                 dd (CTRL_NVIDIA_MCP79_3  shl 16)+VID_NVIDIA, intelhda
  348.                 dd (CTRL_NVIDIA_MCP79_4  shl 16)+VID_NVIDIA, intelhda
  349.                 dd (CTRL_NVIDIA_0BE2     shl 16)+VID_NVIDIA, intelhda
  350.                 dd (CTRL_NVIDIA_0BE3     shl 16)+VID_NVIDIA, intelhda
  351.                 dd (CTRL_NVIDIA_0BE4     shl 16)+VID_NVIDIA, intelhda
  352.                 dd (CTRL_NVIDIA_GT100    shl 16)+VID_NVIDIA, intelhda
  353.                 dd (CTRL_NVIDIA_GT106    shl 16)+VID_NVIDIA, intelhda
  354.                 dd (CTRL_NVIDIA_GT108    shl 16)+VID_NVIDIA, intelhda
  355.                 dd (CTRL_NVIDIA_GT104    shl 16)+VID_NVIDIA, intelhda
  356.                 dd (CTRL_NVIDIA_GT116    shl 16)+VID_NVIDIA, intelhda
  357.                 dd (CTRL_NVIDIA_MCP89_1  shl 16)+VID_NVIDIA, intelhda
  358.                 dd (CTRL_NVIDIA_MCP89_2  shl 16)+VID_NVIDIA, intelhda
  359.                 dd (CTRL_NVIDIA_MCP89_3  shl 16)+VID_NVIDIA, intelhda
  360.                 dd (CTRL_NVIDIA_MCP89_4  shl 16)+VID_NVIDIA, intelhda
  361.                 dd (CTRL_NVIDIA_GF119    shl 16)+VID_NVIDIA, intelhda
  362.                 dd (CTRL_NVIDIA_GF110_1  shl 16)+VID_NVIDIA, intelhda
  363.                 dd (CTRL_NVIDIA_GF110_2  shl 16)+VID_NVIDIA, intelhda
  364. ; ATI
  365.                 dd (CTRL_ATI_SB450   shl 16)+VID_ATI, intelhda
  366.                 dd (CTRL_ATI_SB600   shl 16)+VID_ATI, intelhda
  367.                 dd (CTRL_ATI_RS600   shl 16)+VID_ATI, intelhda
  368.                 dd (CTRL_ATI_RS690   shl 16)+VID_ATI, intelhda
  369.                 dd (CTRL_ATI_RS780   shl 16)+VID_ATI, intelhda
  370.                 dd (CTRL_ATI_RS_UNK1 shl 16)+VID_ATI, intelhda
  371.                 dd (CTRL_ATI_R600    shl 16)+VID_ATI, intelhda
  372.                 dd (CTRL_ATI_RV610   shl 16)+VID_ATI, intelhda
  373.                 dd (CTRL_ATI_RV620   shl 16)+VID_ATI, intelhda
  374.                 dd (CTRL_ATI_RV630   shl 16)+VID_ATI, intelhda
  375.                 dd (CTRL_ATI_RV635   shl 16)+VID_ATI, intelhda
  376.                 dd (CTRL_ATI_RV670   shl 16)+VID_ATI, intelhda
  377.                 dd (CTRL_ATI_RV710   shl 16)+VID_ATI, intelhda
  378.                 dd (CTRL_ATI_RV730   shl 16)+VID_ATI, intelhda
  379.                 dd (CTRL_ATI_RV740   shl 16)+VID_ATI, intelhda
  380.                 dd (CTRL_ATI_RV770   shl 16)+VID_ATI, intelhda
  381. ; AMD
  382.                 dd (CTRL_AMD_HUDSON shl 16)+VID_AMD, intelhda
  383. ; VIA
  384.                 dd (CTRL_VIA_VT82XX shl 16)+VID_VIA, intelhda
  385.                 dd (CTRL_VIA_VT61XX shl 16)+VID_VIA, intelhda
  386.                 dd (CTRL_VIA_VT71XX shl 16)+VID_VIA, intelhda
  387. ; SiS
  388.                 dd (CTRL_SIS_966    shl 16)+VID_SIS, intelhda
  389. ; ULI
  390.                 dd (CTRL_ULI_M5461  shl 16)+VID_ULI, intelhda
  391. ; Teradici
  392.                 dd (CTRL_TERA_UNK1  shl 16)+VID_ULI, intelhda
  393. ; Creative
  394.                 dd (CTRL_CREATIVE_CA0110_IBG     shl 16)+VID_CREATIVE, intelhda
  395.                 dd (CTRL_CREATIVE_SOUND_CORE3D_1 shl 16)+VID_CREATIVE, intelhda
  396.                 dd (CTRL_CREATIVE_SOUND_CORE3D_2 shl 16)+VID_CREATIVE, intelhda
  397. ; RDC Semiconductor
  398.                 dd (CTRL_RDC_R3010  shl 16)+VID_RDC, intelhda
  399. ; VMware
  400.                 dd (CTRL_VMWARE_UNK1  shl 16)+VID_VMWARE, intelhda
  401.  
  402.                 dd 0    ;terminator
  403.  
  404.  
  405. version         dd (5 shl 16) or (API_VERSION and 0xFFFF)
  406.  
  407. srv_entry       dd 0
  408.  
  409. intelac97       db 'INTELAC97', 0
  410. vt823x          db 'VT823X', 0
  411. sis             db 'SIS', 0
  412. fm801           db 'FM801', 0
  413. ensoniq         db 'ENSONIQ', 0
  414. emu10k1x        db 'EMU10K1X', 0
  415. intelhda        db 'INTEL_HDA', 0
  416.  
  417. msgInit         db 'Detecting hardware...',13,10,0
  418. msgFail         db 'No compatible soundcard found!',13,10,0
  419. msgLoading      db 'Loading ',0
  420. msgNewline      db 13,10,0
  421.  
  422.  
  423. section '.data' data readable writable align 16
  424.