Subversion Repositories Kolibri OS

Rev

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