Subversion Repositories Kolibri OS

Rev

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

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