0,0 → 1,413 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; Copyright (C) KolibriOS team 2004-2013. All rights reserved. ;; |
;; Distributed under terms of the GNU General Public License ;; |
;; ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
format PE DLL native 0.05 |
entry START |
|
DEBUG = 1 |
|
section '.flat' code readable writable executable |
include '../proc32.inc' |
include '../struct.inc' |
include '../macros.inc' |
include '../peimport.inc' |
|
VID_INTEL = 0x8086 |
VID_NVIDIA = 0x10DE |
VID_VIA = 0x1106 |
VID_SIS = 0x1039 |
VID_FM801 = 0x1319 |
VID_CREATIVE = 0x1102 |
VID_ATI = 0x1002 |
VID_AMD = 0x1022 |
VID_ULI = 0x10B9 |
VID_TERA = 0x6549 |
VID_RDC = 0x17F3 |
VID_VMWARE = 0x15AD |
|
CTRL_ICH = 0x2415 |
CTRL_ICH0 = 0x2425 |
CTRL_ICH2 = 0x2435 |
CTRL_ICH3 = 0x2445 |
CTRL_ICH4 = 0x24C5 |
CTRL_ICH5 = 0x24D5 |
CTRL_ICH6 = 0x266E |
CTRL_ICH7 = 0x27DE |
|
CTRL_NFORCE = 0x01B1 |
CTRL_NFORCE2 = 0x006A |
CTRL_NFORCE3 = 0x00DA |
CTRL_MCP04 = 0x003A |
CTRL_CK804 = 0x0059 |
CTRL_CK8 = 0x008A |
CTRL_CK8S = 0x00EA |
CTRL_MCP51 = 0x026B |
|
CTRL_VT82C686 = 0x3058 |
CTRL_VT8233_5 = 0x3059 |
|
CTRL_SIS = 0x7012 |
|
CTRL_FM801 = 0x0801 |
|
CTRL_CT0200 = 0x0006 ; Dell OEM version (EMU10K1X) |
|
CTRL_INTEL_SCH2 = 0x080a |
CTRL_INTEL_HPT = 0x0c0c |
CTRL_INTEL_CPT = 0x1c20 |
CTRL_INTEL_PGB = 0x1d20 |
CTRL_INTEL_PPT1 = 0x1e20 |
CTRL_INTEL_82801F = 0x2668 |
CTRL_INTEL_63XXESB = 0x269a |
CTRL_INTEL_82801G = 0x27d8 |
CTRL_INTEL_82801H = 0x284b |
CTRL_INTEL_82801_UNK1 = 0x2911 |
CTRL_INTEL_82801I = 0x293e |
CTRL_INTEL_82801_UNK2 = 0x293f |
CTRL_INTEL_82801JI = 0x3a3e |
CTRL_INTEL_82801JD = 0x3a6e |
CTRL_INTEL_PCH = 0x3b56 |
CTRL_INTEL_PCH2 = 0x3b57 |
CTRL_INTEL_SCH = 0x811b |
CTRL_INTEL_LPT = 0x8c20 |
|
CTRL_NVIDIA_MCP51 = 0x026c |
CTRL_NVIDIA_MCP55 = 0x0371 |
CTRL_NVIDIA_MCP61_1 = 0x03e4 |
CTRL_NVIDIA_MCP61_2 = 0x03f0 |
CTRL_NVIDIA_MCP65_1 = 0x044a |
CTRL_NVIDIA_MCP65_2 = 0x044b |
CTRL_NVIDIA_MCP67_1 = 0x055c |
CTRL_NVIDIA_MCP67_2 = 0x055d |
CTRL_NVIDIA_MCP78_1 = 0x0774 |
CTRL_NVIDIA_MCP78_2 = 0x0775 |
CTRL_NVIDIA_MCP78_3 = 0x0776 |
CTRL_NVIDIA_MCP78_4 = 0x0777 |
CTRL_NVIDIA_MCP73_1 = 0x07fc |
CTRL_NVIDIA_MCP73_2 = 0x07fd |
CTRL_NVIDIA_MCP79_1 = 0x0ac0 |
CTRL_NVIDIA_MCP79_2 = 0x0ac1 |
CTRL_NVIDIA_MCP79_3 = 0x0ac2 |
CTRL_NVIDIA_MCP79_4 = 0x0ac3 |
CTRL_NVIDIA_0BE2 = 0x0be2 |
CTRL_NVIDIA_0BE3 = 0x0be3 |
CTRL_NVIDIA_0BE4 = 0x0be4 |
CTRL_NVIDIA_GT100 = 0x0be5 |
CTRL_NVIDIA_GT106 = 0x0be9 |
CTRL_NVIDIA_GT108 = 0x0bea |
CTRL_NVIDIA_GT104 = 0x0beb |
CTRL_NVIDIA_GT116 = 0x0bee |
CTRL_NVIDIA_MCP89_1 = 0x0d94 |
CTRL_NVIDIA_MCP89_2 = 0x0d95 |
CTRL_NVIDIA_MCP89_3 = 0x0d96 |
CTRL_NVIDIA_MCP89_4 = 0x0d97 |
CTRL_NVIDIA_GF119 = 0x0e08 |
CTRL_NVIDIA_GF110_1 = 0x0e09 |
CTRL_NVIDIA_GF110_2 = 0x0e0c |
|
CTRL_ATI_SB450 = 0x437b |
CTRL_ATI_SB600 = 0x4383 |
|
CTRL_ATI_RS600 = 0x793b |
CTRL_ATI_RS690 = 0x7919 |
CTRL_ATI_RS780 = 0x960f |
CTRL_ATI_RS_UNK1 = 0x970f |
CTRL_ATI_R600 = 0xaa00 |
CTRL_ATI_RV630 = 0xaa08 |
CTRL_ATI_RV610 = 0xaa10 |
CTRL_ATI_RV670 = 0xaa18 |
CTRL_ATI_RV635 = 0xaa20 |
CTRL_ATI_RV620 = 0xaa28 |
CTRL_ATI_RV770 = 0xaa30 |
CTRL_ATI_RV730 = 0xaa38 |
CTRL_ATI_RV710 = 0xaa40 |
CTRL_ATI_RV740 = 0xaa48 |
|
CTRL_AMD_HUDSON = 0x780d |
|
CTRL_VIA_VT82XX = 0x3288 |
CTRL_VIA_VT61XX = 0x9140 |
CTRL_VIA_VT71XX = 0x9170 |
|
CTRL_SIS_966 = 0x7502 |
|
CTRL_ULI_M5461 = 0x5461 |
|
CTRL_CREATIVE_CA0110_IBG = 0x0009 |
CTRL_CREATIVE_SOUND_CORE3D_1 = 0x0010 |
CTRL_CREATIVE_SOUND_CORE3D_2 = 0x0012 |
|
CTRL_TERA_UNK1 = 0x1200 |
|
CTRL_RDC_R3010 = 0x3010 |
|
CTRL_VMWARE_UNK1 = 0x1977 |
|
struct SRV |
srv_name rb 16 ;ASCIIZ string |
magic dd ? ;+0x10 ;'SRV ' |
size dd ? ;+0x14 ;size of structure SRV |
fd dd ? ;+0x18 ;next SRV descriptor |
bk dd ? ;+0x1C ;prev SRV descriptor |
base dd ? ;+0x20 ;service base address |
entry dd ? ;+0x24 ;service START function |
srv_proc dd ? ;+0x28 ;user mode service handler |
srv_proc_ex dd ? ;+0x2C ;kernel mode service handler |
ends |
|
|
proc START c, state:dword, cmdline:dword |
|
cmp [state], 1 |
jne .stop |
|
if DEBUG |
mov esi, msgInit |
invoke SysMsgBoardStr |
end if |
|
test eax, eax |
jnz .done |
call detect_controller |
ret |
.stop: |
test eax, eax |
jz .done |
leave |
jmp eax |
.done: |
xor eax, eax |
ret |
endp |
|
proc service_proc stdcall, ioctl:dword |
|
or eax, -1 |
ret |
endp |
|
proc detect_controller |
|
locals |
last_bus dd ? |
bus dd ? |
devfn dd ? |
endl |
|
xor eax, eax |
mov [bus], eax |
inc eax |
invoke PciApi |
cmp eax, -1 |
je .err |
|
mov [last_bus], eax |
|
.next_bus: |
and [devfn], 0 |
.next_dev: |
invoke PciRead32, [bus], [devfn], dword 0 |
test eax, eax |
jz .next |
cmp eax, -1 |
je .next |
|
mov edi, devices |
@@: |
mov ebx, [edi] |
test ebx, ebx |
jz .next |
|
cmp eax, ebx |
je .found |
add edi, 8 |
jmp @B |
.next: |
inc [devfn] |
cmp [devfn], 256 |
jb .next_dev |
mov eax, [bus] |
inc eax |
mov [bus], eax |
cmp eax, [last_bus] |
jna .next_bus |
xor eax, eax |
ret |
.found: |
|
if DEBUG |
mov esi, msgLoading |
invoke SysMsgBoardStr |
|
mov esi, dword[edi+4] |
invoke SysMsgBoardStr |
|
mov esi, msgNewline |
invoke SysMsgBoardStr |
end if |
|
invoke GetService, dword[edi+4] |
test eax, eax |
jz .err |
|
mov edx, [eax+SRV.entry] |
mov [srv_entry], edx |
ret |
|
.err: |
if DEBUG |
mov esi, msgFail |
invoke SysMsgBoardStr |
end if |
|
xor eax, eax |
ret |
|
endp |
|
align 4 |
devices dd (CTRL_ICH shl 16)+VID_INTEL, intelac97 |
dd (CTRL_ICH0 shl 16)+VID_INTEL, intelac97 |
dd (CTRL_ICH2 shl 16)+VID_INTEL, intelac97 |
dd (CTRL_ICH3 shl 16)+VID_INTEL, intelac97 |
dd (CTRL_ICH4 shl 16)+VID_INTEL, intelac97 |
dd (CTRL_ICH5 shl 16)+VID_INTEL, intelac97 |
dd (CTRL_ICH6 shl 16)+VID_INTEL, intelac97 |
dd (CTRL_ICH7 shl 16)+VID_INTEL, intelac97 |
|
dd (CTRL_NFORCE shl 16)+VID_NVIDIA, intelac97 |
dd (CTRL_NFORCE2 shl 16)+VID_NVIDIA, intelac97 |
dd (CTRL_NFORCE3 shl 16)+VID_NVIDIA, intelac97 |
dd (CTRL_MCP04 shl 16)+VID_NVIDIA, intelac97 |
dd (CTRL_CK804 shl 16)+VID_NVIDIA, intelac97 |
dd (CTRL_CK8 shl 16)+VID_NVIDIA, intelac97 |
dd (CTRL_CK8S shl 16)+VID_NVIDIA, intelac97 |
dd (CTRL_MCP51 shl 16)+VID_NVIDIA, intelac97 |
|
dd (CTRL_VT82C686 shl 16)+VID_VIA, vt823x |
dd (CTRL_VT8233_5 shl 16)+VID_VIA, vt823x |
|
dd (CTRL_SIS shl 16)+VID_SIS, sis |
|
dd (CTRL_FM801 shl 16)+VID_FM801, fm801 |
|
dd (0x5000 shl 16)+0x1274, ensoniq |
dd (0x5880 shl 16)+0x1274, ensoniq |
|
dd (CTRL_CT0200 shl 16)+VID_CREATIVE, emu10k1x |
; Intel |
dd (CTRL_INTEL_SCH2 shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_HPT shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_CPT shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_PGB shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_PPT1 shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_82801F shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_63XXESB shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_82801G shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_82801H shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_82801_UNK1 shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_82801I shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_82801_UNK2 shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_82801JI shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_82801JD shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_PCH shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_PCH2 shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_SCH shl 16)+VID_INTEL, intelhda |
dd (CTRL_INTEL_LPT shl 16)+VID_INTEL, intelhda |
; Nvidia |
dd (CTRL_NVIDIA_MCP51 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP55 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP61_1 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP61_2 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP65_1 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP65_2 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP67_1 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP67_2 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP73_1 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP73_2 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP78_1 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP78_2 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP78_3 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP78_4 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP79_1 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP79_2 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP79_3 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP79_4 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_0BE2 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_0BE3 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_0BE4 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_GT100 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_GT106 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_GT108 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_GT104 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_GT116 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP89_1 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP89_2 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP89_3 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_MCP89_4 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_GF119 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_GF110_1 shl 16)+VID_NVIDIA, intelhda |
dd (CTRL_NVIDIA_GF110_2 shl 16)+VID_NVIDIA, intelhda |
; ATI |
dd (CTRL_ATI_SB450 shl 16)+VID_ATI, intelhda |
dd (CTRL_ATI_SB600 shl 16)+VID_ATI, intelhda |
dd (CTRL_ATI_RS600 shl 16)+VID_ATI, intelhda |
dd (CTRL_ATI_RS690 shl 16)+VID_ATI, intelhda |
dd (CTRL_ATI_RS780 shl 16)+VID_ATI, intelhda |
dd (CTRL_ATI_RS_UNK1 shl 16)+VID_ATI, intelhda |
dd (CTRL_ATI_R600 shl 16)+VID_ATI, intelhda |
dd (CTRL_ATI_RV610 shl 16)+VID_ATI, intelhda |
dd (CTRL_ATI_RV620 shl 16)+VID_ATI, intelhda |
dd (CTRL_ATI_RV630 shl 16)+VID_ATI, intelhda |
dd (CTRL_ATI_RV635 shl 16)+VID_ATI, intelhda |
dd (CTRL_ATI_RV670 shl 16)+VID_ATI, intelhda |
dd (CTRL_ATI_RV710 shl 16)+VID_ATI, intelhda |
dd (CTRL_ATI_RV730 shl 16)+VID_ATI, intelhda |
dd (CTRL_ATI_RV740 shl 16)+VID_ATI, intelhda |
dd (CTRL_ATI_RV770 shl 16)+VID_ATI, intelhda |
; AMD |
dd (CTRL_AMD_HUDSON shl 16)+VID_AMD, intelhda |
; VIA |
dd (CTRL_VIA_VT82XX shl 16)+VID_VIA, intelhda |
dd (CTRL_VIA_VT61XX shl 16)+VID_VIA, intelhda |
dd (CTRL_VIA_VT71XX shl 16)+VID_VIA, intelhda |
; SiS |
dd (CTRL_SIS_966 shl 16)+VID_SIS, intelhda |
; ULI |
dd (CTRL_ULI_M5461 shl 16)+VID_ULI, intelhda |
; Teradici |
dd (CTRL_TERA_UNK1 shl 16)+VID_ULI, intelhda |
; Creative |
dd (CTRL_CREATIVE_CA0110_IBG shl 16)+VID_CREATIVE, intelhda |
dd (CTRL_CREATIVE_SOUND_CORE3D_1 shl 16)+VID_CREATIVE, intelhda |
dd (CTRL_CREATIVE_SOUND_CORE3D_2 shl 16)+VID_CREATIVE, intelhda |
; RDC Semiconductor |
dd (CTRL_RDC_R3010 shl 16)+VID_RDC, intelhda |
; VMware |
dd (CTRL_VMWARE_UNK1 shl 16)+VID_VMWARE, intelhda |
|
dd 0 ; terminator |
|
|
srv_entry dd 0 |
|
intelac97 db 'INTELAC97', 0 |
vt823x db 'VT823X', 0 |
sis db 'SIS', 0 |
fm801 db 'FM801', 0 |
ensoniq db 'ENSONIQ', 0 |
emu10k1x db 'EMU10K1X', 0 |
intelhda db 'INTEL_HDA', 0 |
|
msgInit db 'Detecting hardware...',13,10,0 |
msgFail db 'No compatible soundcard found!',13,10,0 |
msgLoading db 'Loading ',0 |
msgNewline db 13,10,0 |
|
align 4 |
data fixups |
end data |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |