Subversion Repositories Kolibri OS

Rev

Rev 3766 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3171 hidnplayr 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'
3767 Serge 13
include 'imports.inc'
3766 Serge 14
include '../struct.inc'
3171 hidnplayr 15
 
3767 Serge 16
 
3171 hidnplayr 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
 
3765 Serge 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
 
3171 hidnplayr 167
section '.flat' code readable align 16
168
 
169
proc START stdcall, state:dword
170
 
3765 Serge 171
        mov     eax, [srv_entry]
3171 hidnplayr 172
        cmp     [state], 1
173
        jne     .stop
174
 
175
     if DEBUG
176
        mov     esi, msgInit
177
        call    SysMsgBoardStr
178
     end if
179
 
3767 Serge 180
        test    eax, eax
181
        jnz     .done
3171 hidnplayr 182
        call    detect_controller
183
        ret
3765 Serge 184
.stop:
3767 Serge 185
        test    eax, eax
186
        jz      .done
187
        leave
3765 Serge 188
        jmp     eax
189
.done:
3171 hidnplayr 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]
3765 Serge 263
        test    eax, eax
264
        jz      .err
3171 hidnplayr 265
 
3765 Serge 266
        mov     edx, [eax+SRV.entry]
267
        mov     [srv_entry], edx
3171 hidnplayr 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
3765 Serge 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
3171 hidnplayr 290
 
3765 Serge 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
3171 hidnplayr 299
 
3765 Serge 300
                dd (CTRL_VT82C686  shl 16)+VID_VIA, vt823x
301
                dd (CTRL_VT8233_5  shl 16)+VID_VIA, vt823x
3171 hidnplayr 302
 
3765 Serge 303
                dd (CTRL_SIS  shl 16)+VID_SIS, sis
3171 hidnplayr 304
 
3765 Serge 305
                dd (CTRL_FM801 shl 16)+VID_FM801, fm801
3171 hidnplayr 306
 
3765 Serge 307
                dd (0x5000 shl 16)+0x1274, ensoniq
308
                dd (0x5880 shl 16)+0x1274, ensoniq
3171 hidnplayr 309
 
3765 Serge 310
                dd (CTRL_CT0200 shl 16)+VID_CREATIVE, emu10k1x
3171 hidnplayr 311
; Intel
3765 Serge 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
3171 hidnplayr 330
; Nvidia
3765 Serge 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
3171 hidnplayr 364
; ATI
3765 Serge 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
3171 hidnplayr 381
; AMD
3765 Serge 382
                dd (CTRL_AMD_HUDSON shl 16)+VID_AMD, intelhda
3171 hidnplayr 383
; VIA
3765 Serge 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
3171 hidnplayr 387
; SiS
3765 Serge 388
                dd (CTRL_SIS_966    shl 16)+VID_SIS, intelhda
3171 hidnplayr 389
; ULI
3765 Serge 390
                dd (CTRL_ULI_M5461  shl 16)+VID_ULI, intelhda
3171 hidnplayr 391
; Teradici
3765 Serge 392
                dd (CTRL_TERA_UNK1  shl 16)+VID_ULI, intelhda
3171 hidnplayr 393
; Creative
3765 Serge 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
3171 hidnplayr 397
; RDC Semiconductor
3765 Serge 398
                dd (CTRL_RDC_R3010  shl 16)+VID_RDC, intelhda
3171 hidnplayr 399
; VMware
3765 Serge 400
                dd (CTRL_VMWARE_UNK1  shl 16)+VID_VMWARE, intelhda
3171 hidnplayr 401
 
3765 Serge 402
                dd 0    ;terminator
3171 hidnplayr 403
 
404
 
3765 Serge 405
version         dd (5 shl 16) or (API_VERSION and 0xFFFF)
3171 hidnplayr 406
 
3765 Serge 407
srv_entry       dd 0
408
 
3171 hidnplayr 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
 
3767 Serge 422
 
3171 hidnplayr 423
section '.data' data readable writable align 16