Subversion Repositories Kolibri OS

Rev

Rev 5168 | Rev 5173 | Go to most recent revision | Blame | Compare with Previous | 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 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. locals
  198.         last_bus dd ?
  199.         bus      dd ?
  200.         devfn    dd ?
  201. endl
  202.  
  203.         xor     eax, eax
  204.         mov     [bus], eax
  205.         inc     eax
  206.         invoke  PciApi
  207.         cmp     eax, -1
  208.         je      .no_pci
  209.  
  210.         mov     [last_bus], eax
  211.  
  212.   .next_bus:
  213.         and     [devfn], 0
  214.   .next_dev:
  215.         invoke  PciRead32, [bus], [devfn], PCI_header.vendor_id
  216.         test    eax, eax
  217.         jz      .next
  218.         cmp     eax, -1
  219.         je      .next
  220.  
  221.         mov     edi, devices
  222.   @@:
  223.         mov     ebx, [edi]
  224.         test    ebx, ebx
  225.         jz      .next
  226.  
  227.         cmp     eax, ebx
  228.         je      .found
  229.         add     edi, 8
  230.         jmp     @B
  231.  
  232.   .next:
  233.         test    [devfn], 7
  234.         jnz     .next_fn
  235.         invoke  PciRead8, [bus], [devfn], PCI_header.header_type
  236.         test    al, al
  237.         js      .next_fn
  238.         or      [devfn], 7
  239.  
  240.   .next_fn:
  241.         inc     [devfn]
  242.         cmp     [devfn], 256
  243.         jb      .next_dev
  244.         mov     eax, [bus]
  245.         inc     eax
  246.         mov     [bus], eax
  247.         cmp     eax, [last_bus]
  248.         jna     .next_bus
  249.  
  250.   .no_pci:
  251.      if DEBUG
  252.         mov     esi, msgFail
  253.         invoke  SysMsgBoardStr
  254.  
  255.         mov     esi, msgLoading
  256.         invoke  SysMsgBoardStr
  257.  
  258.         mov     esi, sb16
  259.         invoke  SysMsgBoardStr
  260.  
  261.         mov     esi, msgNewline
  262.         invoke  SysMsgBoardStr
  263.      end if
  264.  
  265.         invoke  GetService, sb16
  266.         test    eax, eax
  267.         jz      .fail
  268.  
  269.         mov     edx, [eax+SRV.entry]
  270.         mov     [srv_entry], edx
  271.         ret
  272.  
  273.   .found:
  274.      if DEBUG
  275.         mov     esi, msgLoading
  276.         invoke  SysMsgBoardStr
  277.  
  278.         mov     esi, dword[edi+4]
  279.         invoke  SysMsgBoardStr
  280.  
  281.         mov     esi, msgNewline
  282.         invoke  SysMsgBoardStr
  283.      end if
  284.  
  285.         invoke  GetService, dword[edi+4]
  286.         test    eax, eax
  287.         jz      .next
  288.  
  289.         mov     edx, [eax+SRV.entry]
  290.         mov     [srv_entry], edx
  291.         ret
  292.  
  293.   .fail:
  294.         xor     eax, eax
  295.         ret
  296.  
  297. endp
  298.  
  299. align 4
  300. devices         dd (CTRL_ICH  shl 16)+VID_INTEL, intelac97
  301.                 dd (CTRL_ICH0 shl 16)+VID_INTEL, intelac97
  302.                 dd (CTRL_ICH2 shl 16)+VID_INTEL, intelac97
  303.                 dd (CTRL_ICH3 shl 16)+VID_INTEL, intelac97
  304.                 dd (CTRL_ICH4 shl 16)+VID_INTEL, intelac97
  305.                 dd (CTRL_ICH5 shl 16)+VID_INTEL, intelac97
  306.                 dd (CTRL_ICH6 shl 16)+VID_INTEL, intelac97
  307.                 dd (CTRL_ICH7 shl 16)+VID_INTEL, intelac97
  308.  
  309.                 dd (CTRL_NFORCE  shl 16)+VID_NVIDIA, intelac97
  310.                 dd (CTRL_NFORCE2 shl 16)+VID_NVIDIA, intelac97
  311.                 dd (CTRL_NFORCE3 shl 16)+VID_NVIDIA, intelac97
  312.                 dd (CTRL_MCP04   shl 16)+VID_NVIDIA, intelac97
  313.                 dd (CTRL_CK804   shl 16)+VID_NVIDIA, intelac97
  314.                 dd (CTRL_CK8     shl 16)+VID_NVIDIA, intelac97
  315.                 dd (CTRL_CK8S    shl 16)+VID_NVIDIA, intelac97
  316.                 dd (CTRL_MCP51   shl 16)+VID_NVIDIA, intelac97
  317.  
  318.                 dd (CTRL_VT82C686  shl 16)+VID_VIA, vt823x
  319.                 dd (CTRL_VT8233_5  shl 16)+VID_VIA, vt823x
  320.  
  321.                 dd (CTRL_SIS  shl 16)+VID_SIS, sis
  322.  
  323.                 dd (CTRL_FM801 shl 16)+VID_FM801, fm801
  324.  
  325.                 dd (0x5000 shl 16)+0x1274, ensoniq
  326.                 dd (0x5880 shl 16)+0x1274, ensoniq
  327.  
  328.                 dd (CTRL_CT0200 shl 16)+VID_CREATIVE, emu10k1x
  329. ; Intel
  330.                 dd (CTRL_INTEL_SCH2    shl 16)+VID_INTEL, intelhda
  331.                 dd (CTRL_INTEL_HPT     shl 16)+VID_INTEL, intelhda
  332.                 dd (CTRL_INTEL_CPT     shl 16)+VID_INTEL, intelhda
  333.                 dd (CTRL_INTEL_PGB     shl 16)+VID_INTEL, intelhda
  334.                 dd (CTRL_INTEL_PPT1    shl 16)+VID_INTEL, intelhda
  335.                 dd (CTRL_INTEL_82801F  shl 16)+VID_INTEL, intelhda
  336.                 dd (CTRL_INTEL_63XXESB shl 16)+VID_INTEL, intelhda
  337.                 dd (CTRL_INTEL_82801G  shl 16)+VID_INTEL, intelhda
  338.                 dd (CTRL_INTEL_82801H  shl 16)+VID_INTEL, intelhda
  339.                 dd (CTRL_INTEL_82801_UNK1  shl 16)+VID_INTEL, intelhda
  340.                 dd (CTRL_INTEL_82801I  shl 16)+VID_INTEL, intelhda
  341.                 dd (CTRL_INTEL_82801_UNK2  shl 16)+VID_INTEL, intelhda
  342.                 dd (CTRL_INTEL_82801JI shl 16)+VID_INTEL, intelhda
  343.                 dd (CTRL_INTEL_82801JD shl 16)+VID_INTEL, intelhda
  344.                 dd (CTRL_INTEL_PCH     shl 16)+VID_INTEL, intelhda
  345.                 dd (CTRL_INTEL_PCH2    shl 16)+VID_INTEL, intelhda
  346.                 dd (CTRL_INTEL_SCH     shl 16)+VID_INTEL, intelhda
  347.                 dd (CTRL_INTEL_LPT     shl 16)+VID_INTEL, intelhda
  348. ; Nvidia
  349.                 dd (CTRL_NVIDIA_MCP51    shl 16)+VID_NVIDIA, intelhda
  350.                 dd (CTRL_NVIDIA_MCP55    shl 16)+VID_NVIDIA, intelhda
  351.                 dd (CTRL_NVIDIA_MCP61_1  shl 16)+VID_NVIDIA, intelhda
  352.                 dd (CTRL_NVIDIA_MCP61_2  shl 16)+VID_NVIDIA, intelhda
  353.                 dd (CTRL_NVIDIA_MCP65_1  shl 16)+VID_NVIDIA, intelhda
  354.                 dd (CTRL_NVIDIA_MCP65_2  shl 16)+VID_NVIDIA, intelhda
  355.                 dd (CTRL_NVIDIA_MCP67_1  shl 16)+VID_NVIDIA, intelhda
  356.                 dd (CTRL_NVIDIA_MCP67_2  shl 16)+VID_NVIDIA, intelhda
  357.                 dd (CTRL_NVIDIA_MCP73_1  shl 16)+VID_NVIDIA, intelhda
  358.                 dd (CTRL_NVIDIA_MCP73_2  shl 16)+VID_NVIDIA, intelhda
  359.                 dd (CTRL_NVIDIA_MCP78_1  shl 16)+VID_NVIDIA, intelhda
  360.                 dd (CTRL_NVIDIA_MCP78_2  shl 16)+VID_NVIDIA, intelhda
  361.                 dd (CTRL_NVIDIA_MCP78_3  shl 16)+VID_NVIDIA, intelhda
  362.                 dd (CTRL_NVIDIA_MCP78_4  shl 16)+VID_NVIDIA, intelhda
  363.                 dd (CTRL_NVIDIA_MCP79_1  shl 16)+VID_NVIDIA, intelhda
  364.                 dd (CTRL_NVIDIA_MCP79_2  shl 16)+VID_NVIDIA, intelhda
  365.                 dd (CTRL_NVIDIA_MCP79_3  shl 16)+VID_NVIDIA, intelhda
  366.                 dd (CTRL_NVIDIA_MCP79_4  shl 16)+VID_NVIDIA, intelhda
  367.                 dd (CTRL_NVIDIA_0BE2     shl 16)+VID_NVIDIA, intelhda
  368.                 dd (CTRL_NVIDIA_0BE3     shl 16)+VID_NVIDIA, intelhda
  369.                 dd (CTRL_NVIDIA_0BE4     shl 16)+VID_NVIDIA, intelhda
  370.                 dd (CTRL_NVIDIA_GT100    shl 16)+VID_NVIDIA, intelhda
  371.                 dd (CTRL_NVIDIA_GT106    shl 16)+VID_NVIDIA, intelhda
  372.                 dd (CTRL_NVIDIA_GT108    shl 16)+VID_NVIDIA, intelhda
  373.                 dd (CTRL_NVIDIA_GT104    shl 16)+VID_NVIDIA, intelhda
  374.                 dd (CTRL_NVIDIA_GT116    shl 16)+VID_NVIDIA, intelhda
  375.                 dd (CTRL_NVIDIA_MCP89_1  shl 16)+VID_NVIDIA, intelhda
  376.                 dd (CTRL_NVIDIA_MCP89_2  shl 16)+VID_NVIDIA, intelhda
  377.                 dd (CTRL_NVIDIA_MCP89_3  shl 16)+VID_NVIDIA, intelhda
  378.                 dd (CTRL_NVIDIA_MCP89_4  shl 16)+VID_NVIDIA, intelhda
  379.                 dd (CTRL_NVIDIA_GF119    shl 16)+VID_NVIDIA, intelhda
  380.                 dd (CTRL_NVIDIA_GF110_1  shl 16)+VID_NVIDIA, intelhda
  381.                 dd (CTRL_NVIDIA_GF110_2  shl 16)+VID_NVIDIA, intelhda
  382. ; ATI
  383.                 dd (CTRL_ATI_SB450   shl 16)+VID_ATI, intelhda
  384.                 dd (CTRL_ATI_SB600   shl 16)+VID_ATI, intelhda
  385.                 dd (CTRL_ATI_RS600   shl 16)+VID_ATI, intelhda
  386.                 dd (CTRL_ATI_RS690   shl 16)+VID_ATI, intelhda
  387.                 dd (CTRL_ATI_RS780   shl 16)+VID_ATI, intelhda
  388.                 dd (CTRL_ATI_RS_UNK1 shl 16)+VID_ATI, intelhda
  389.                 dd (CTRL_ATI_R600    shl 16)+VID_ATI, intelhda
  390.                 dd (CTRL_ATI_RV610   shl 16)+VID_ATI, intelhda
  391.                 dd (CTRL_ATI_RV620   shl 16)+VID_ATI, intelhda
  392.                 dd (CTRL_ATI_RV630   shl 16)+VID_ATI, intelhda
  393.                 dd (CTRL_ATI_RV635   shl 16)+VID_ATI, intelhda
  394.                 dd (CTRL_ATI_RV670   shl 16)+VID_ATI, intelhda
  395.                 dd (CTRL_ATI_RV710   shl 16)+VID_ATI, intelhda
  396.                 dd (CTRL_ATI_RV730   shl 16)+VID_ATI, intelhda
  397.                 dd (CTRL_ATI_RV740   shl 16)+VID_ATI, intelhda
  398.                 dd (CTRL_ATI_RV770   shl 16)+VID_ATI, intelhda
  399. ; AMD
  400.                 dd (CTRL_AMD_HUDSON shl 16)+VID_AMD, intelhda
  401. ; VIA
  402.                 dd (CTRL_VIA_VT82XX shl 16)+VID_VIA, intelhda
  403.                 dd (CTRL_VIA_VT61XX shl 16)+VID_VIA, intelhda
  404.                 dd (CTRL_VIA_VT71XX shl 16)+VID_VIA, intelhda
  405. ; SiS
  406.                 dd (CTRL_SIS_966    shl 16)+VID_SIS, intelhda
  407. ; ULI
  408.                 dd (CTRL_ULI_M5461  shl 16)+VID_ULI, intelhda
  409. ; Teradici
  410.                 dd (CTRL_TERA_UNK1  shl 16)+VID_ULI, intelhda
  411. ; Creative
  412.                 dd (CTRL_CREATIVE_CA0110_IBG     shl 16)+VID_CREATIVE, intelhda
  413.                 dd (CTRL_CREATIVE_SOUND_CORE3D_1 shl 16)+VID_CREATIVE, intelhda
  414.                 dd (CTRL_CREATIVE_SOUND_CORE3D_2 shl 16)+VID_CREATIVE, intelhda
  415. ; RDC Semiconductor
  416.                 dd (CTRL_RDC_R3010  shl 16)+VID_RDC, intelhda
  417. ; VMware
  418.                 dd (CTRL_VMWARE_UNK1  shl 16)+VID_VMWARE, intelhda
  419.  
  420.                 dd 0    ; terminator
  421.  
  422.  
  423. srv_entry       dd 0
  424.  
  425. intelac97       db 'INTELAC97', 0
  426. vt823x          db 'VT823X', 0
  427. sis             db 'SIS', 0
  428. fm801           db 'FM801', 0
  429. ensoniq         db 'ENSONIQ', 0
  430. emu10k1x        db 'EMU10K1X', 0
  431. intelhda        db 'INTEL_HDA', 0
  432. sb16            db 'SB16', 0
  433.  
  434. msgInit         db 'Detecting hardware...',13,10,0
  435. msgFail         db 'No compatible PCI soundcard found!',13,10,0
  436. msgLoading      db 'Loading ',0
  437. msgNewline      db 13,10,0
  438.  
  439. align 4
  440. data fixups
  441. end data
  442.