forked from KolibriOS/kolibrios
update sis.asm
git-svn-id: svn://kolibrios.org@579 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
8f49b3612a
commit
5f63bc470b
@ -12,9 +12,24 @@ include 'imports.inc'
|
|||||||
|
|
||||||
API_VERSION equ 0x01000100
|
API_VERSION equ 0x01000100
|
||||||
|
|
||||||
DEBUG equ 1
|
DEBUG equ 1
|
||||||
|
DEBUG_IRQ equ 0
|
||||||
|
|
||||||
CPU_FREQ equ 2000d ;cpu freq in MHz
|
USE_COM_IRQ equ 0 ;make irq 3 and irq 4 available for PCI devices
|
||||||
|
IRQ_REMAP equ 0
|
||||||
|
IRQ_LINE equ 0
|
||||||
|
|
||||||
|
|
||||||
|
;irq 0,1,2,8,12,13 íåäîñòóïíû
|
||||||
|
; FEDCBA9876543210
|
||||||
|
VALID_IRQ equ 1100111011111000b
|
||||||
|
ATTCH_IRQ equ 0000111010100000b
|
||||||
|
|
||||||
|
if USE_COM_IRQ
|
||||||
|
ATTCH_IRQ equ 0000111010111000b
|
||||||
|
end if
|
||||||
|
|
||||||
|
CPU_FREQ equ 2600d
|
||||||
|
|
||||||
BIT0 EQU 0x00000001
|
BIT0 EQU 0x00000001
|
||||||
BIT1 EQU 0x00000002
|
BIT1 EQU 0x00000002
|
||||||
@ -65,13 +80,12 @@ RR equ BIT1 ; reset registers. Nukes all regs
|
|||||||
|
|
||||||
CODEC_MASTER_VOL_REG equ 0x02
|
CODEC_MASTER_VOL_REG equ 0x02
|
||||||
CODEC_AUX_VOL equ 0x04 ;
|
CODEC_AUX_VOL equ 0x04 ;
|
||||||
CODEC_PCM_OUT_REG equ 18h ; PCM output volume
|
CODEC_PCM_OUT_REG equ 0x18 ; PCM output volume
|
||||||
CODEC_EXT_AUDIO_REG equ 28h ; extended audio
|
CODEC_EXT_AUDIO_REG equ 0x28 ; extended audio
|
||||||
CODEC_EXT_AUDIO_CTRL_REG equ 2ah ; extended audio control
|
CODEC_EXT_AUDIO_CTRL_REG equ 0x2a ; extended audio control
|
||||||
CODEC_PCM_FRONT_DACRATE_REG equ 2ch ; PCM out sample rate
|
CODEC_PCM_FRONT_DACRATE_REG equ 0x2c ; PCM out sample rate
|
||||||
CODEC_PCM_SURND_DACRATE_REG equ 2eh ; surround sound sample rate
|
CODEC_PCM_SURND_DACRATE_REG equ 0x2e ; surround sound sample rate
|
||||||
CODEC_PCM_LFE_DACRATE_REG equ 30h ; LFE sample rate
|
CODEC_PCM_LFE_DACRATE_REG equ 0x30 ; LFE sample rate
|
||||||
|
|
||||||
|
|
||||||
GLOB_CTRL equ 0x2C ; Global Control
|
GLOB_CTRL equ 0x2C ; Global Control
|
||||||
CTRL_STAT equ 0x30 ; Global Status
|
CTRL_STAT equ 0x30 ; Global Status
|
||||||
@ -251,9 +265,6 @@ end virtual
|
|||||||
|
|
||||||
EVENT_NOTIFY equ 0x00000200
|
EVENT_NOTIFY equ 0x00000200
|
||||||
|
|
||||||
OS_BASE equ 0x80000000
|
|
||||||
SLOT_BASE equ OS_BASE+0x0080000
|
|
||||||
|
|
||||||
public START
|
public START
|
||||||
public service_proc
|
public service_proc
|
||||||
public version
|
public version
|
||||||
@ -279,43 +290,68 @@ proc START stdcall, state:dword
|
|||||||
call SysMsgBoardStr
|
call SysMsgBoardStr
|
||||||
mov esi, [ctrl.ctrl_ids]
|
mov esi, [ctrl.ctrl_ids]
|
||||||
call SysMsgBoardStr
|
call SysMsgBoardStr
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
call init_controller
|
call init_controller
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz .fail
|
jz .fail
|
||||||
|
|
||||||
if DEBUG
|
|
||||||
mov esi, msgInitCodec
|
|
||||||
call SysMsgBoardStr
|
|
||||||
end if
|
|
||||||
|
|
||||||
call init_codec
|
call init_codec
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz .fail
|
jz .fail
|
||||||
|
|
||||||
if DEBUG
|
|
||||||
mov esi, [codec.ac_vendor_ids]
|
|
||||||
call SysMsgBoardStr
|
|
||||||
|
|
||||||
mov esi, [codec.chip_ids]
|
|
||||||
call SysMsgBoardStr
|
|
||||||
end if
|
|
||||||
|
|
||||||
call reset_controller
|
call reset_controller
|
||||||
call setup_codec
|
call setup_codec
|
||||||
|
|
||||||
mov esi, msgPrimBuff
|
mov esi, msgPrimBuff
|
||||||
call SysMsgBoardStr
|
call SysMsgBoardStr
|
||||||
|
|
||||||
call create_primary_buff
|
call create_primary_buff
|
||||||
|
mov esi, msgDone
|
||||||
stdcall AttachIntHandler, [ctrl.int_line], ac97_irq
|
|
||||||
|
|
||||||
stdcall RegService, sz_sound_srv, service_proc
|
|
||||||
|
|
||||||
mov esi, msgOk
|
|
||||||
call SysMsgBoardStr
|
call SysMsgBoardStr
|
||||||
|
|
||||||
|
if IRQ_REMAP
|
||||||
|
pushf
|
||||||
|
cli
|
||||||
|
|
||||||
|
mov ebx, [ctrl.int_line]
|
||||||
|
in al, 0xA1
|
||||||
|
mov ah, al
|
||||||
|
in al, 0x21
|
||||||
|
test ebx, ebx
|
||||||
|
jz .skip
|
||||||
|
bts ax, bx ;mask old line
|
||||||
|
.skip
|
||||||
|
bts ax, IRQ_LINE ;mask new ine
|
||||||
|
out 0x21, al
|
||||||
|
mov al, ah
|
||||||
|
out 0xA1, al
|
||||||
|
;remap IRQ
|
||||||
|
stdcall PciWrite8, 0, 0xF8, 0x61, IRQ_LINE
|
||||||
|
|
||||||
|
mov dx, 0x4d0 ;8259 ELCR1
|
||||||
|
in al, dx
|
||||||
|
bts ax, IRQ_LINE
|
||||||
|
out dx, al ;set level-triggered mode
|
||||||
|
mov [ctrl.int_line], IRQ_LINE
|
||||||
|
popf
|
||||||
|
mov esi, msgRemap
|
||||||
|
call SysMsgBoardStr
|
||||||
|
end if
|
||||||
|
|
||||||
|
mov eax, VALID_IRQ
|
||||||
|
mov ebx, [ctrl.int_line]
|
||||||
|
mov esi, msgInvIRQ
|
||||||
|
bt eax, ebx
|
||||||
|
jnc .fail_msg
|
||||||
|
mov eax, ATTCH_IRQ
|
||||||
|
mov esi, msgAttchIRQ
|
||||||
|
bt eax, ebx
|
||||||
|
jnc .fail_msg
|
||||||
|
|
||||||
|
stdcall AttachIntHandler, ebx, ac97_irq
|
||||||
|
.reg:
|
||||||
|
stdcall RegService, sz_sound_srv, service_proc
|
||||||
ret
|
ret
|
||||||
.fail:
|
.fail:
|
||||||
if DEBUG
|
if DEBUG
|
||||||
@ -324,6 +360,10 @@ proc START stdcall, state:dword
|
|||||||
end if
|
end if
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
|
.fail_msg:
|
||||||
|
call SysMsgBoardStr
|
||||||
|
xor eax, eax
|
||||||
|
ret
|
||||||
.stop:
|
.stop:
|
||||||
call stop
|
call stop
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -412,10 +452,10 @@ restore out_size
|
|||||||
align 4
|
align 4
|
||||||
proc ac97_irq
|
proc ac97_irq
|
||||||
|
|
||||||
; if DEBUG
|
if DEBUG_IRQ
|
||||||
; mov esi, msgIRQ
|
mov esi, msgIRQ
|
||||||
; call SysMsgBoardStr
|
call SysMsgBoardStr
|
||||||
; end if
|
end if
|
||||||
|
|
||||||
mov edx, PCM_OUT_CR_REG
|
mov edx, PCM_OUT_CR_REG
|
||||||
mov al, 0x10
|
mov al, 0x10
|
||||||
@ -484,18 +524,25 @@ proc create_primary_buff
|
|||||||
@@:
|
@@:
|
||||||
mov [edi], eax
|
mov [edi], eax
|
||||||
mov [edi+4], ebx
|
mov [edi+4], ebx
|
||||||
|
|
||||||
mov [edi+32], eax
|
mov [edi+32], eax
|
||||||
mov [edi+4+32], ebx
|
mov [edi+4+32], ebx
|
||||||
|
|
||||||
mov [edi+64], eax
|
mov [edi+64], eax
|
||||||
mov [edi+4+64], ebx
|
mov [edi+4+64], ebx
|
||||||
|
|
||||||
mov [edi+96], eax
|
mov [edi+96], eax
|
||||||
mov [edi+4+96], ebx
|
mov [edi+4+96], ebx
|
||||||
|
|
||||||
mov [edi+128], eax
|
mov [edi+128], eax
|
||||||
mov [edi+4+128], ebx
|
mov [edi+4+128], ebx
|
||||||
|
|
||||||
mov [edi+160], eax
|
mov [edi+160], eax
|
||||||
mov [edi+4+160], ebx
|
mov [edi+4+160], ebx
|
||||||
|
|
||||||
mov [edi+192], eax
|
mov [edi+192], eax
|
||||||
mov [edi+4+192], ebx
|
mov [edi+4+192], ebx
|
||||||
|
|
||||||
mov [edi+224], eax
|
mov [edi+224], eax
|
||||||
mov [edi+4+224], ebx
|
mov [edi+4+224], ebx
|
||||||
|
|
||||||
@ -569,6 +616,7 @@ proc detect_controller
|
|||||||
jz .next
|
jz .next
|
||||||
cmp eax, -1
|
cmp eax, -1
|
||||||
je .next
|
je .next
|
||||||
|
|
||||||
mov edi, devices
|
mov edi, devices
|
||||||
@@:
|
@@:
|
||||||
mov ebx, [edi]
|
mov ebx, [edi]
|
||||||
@ -579,7 +627,6 @@ proc detect_controller
|
|||||||
je .found
|
je .found
|
||||||
add edi, 12
|
add edi, 12
|
||||||
jmp @B
|
jmp @B
|
||||||
|
|
||||||
.next:
|
.next:
|
||||||
inc [devfn]
|
inc [devfn]
|
||||||
cmp [devfn], 256
|
cmp [devfn], 256
|
||||||
@ -626,22 +673,60 @@ proc init_controller
|
|||||||
shr ebx, 16
|
shr ebx, 16
|
||||||
mov [ctrl.pci_stat], ebx
|
mov [ctrl.pci_stat], ebx
|
||||||
|
|
||||||
|
mov esi, msgPciCmd
|
||||||
|
call SysMsgBoardStr
|
||||||
|
call dword2str
|
||||||
|
call SysMsgBoardStr
|
||||||
|
|
||||||
|
mov esi, msgPciStat
|
||||||
|
call SysMsgBoardStr
|
||||||
|
mov eax, [ctrl.pci_stat]
|
||||||
|
call dword2str
|
||||||
|
call SysMsgBoardStr
|
||||||
|
|
||||||
|
mov esi, msgMixIsaIo
|
||||||
|
call SysMsgBoardStr
|
||||||
|
|
||||||
stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x10
|
stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x10
|
||||||
|
|
||||||
|
call dword2str
|
||||||
|
call SysMsgBoardStr
|
||||||
|
|
||||||
and eax,0xFFFE
|
and eax,0xFFFE
|
||||||
mov [ctrl.codec_io_base], eax
|
mov [ctrl.codec_io_base], eax
|
||||||
|
|
||||||
|
mov esi, msgCtrlIsaIo
|
||||||
|
call SysMsgBoardStr
|
||||||
|
|
||||||
stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x14
|
stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x14
|
||||||
|
|
||||||
|
call dword2str
|
||||||
|
call SysMsgBoardStr
|
||||||
|
|
||||||
and eax, 0xFFC0
|
and eax, 0xFFC0
|
||||||
mov [ctrl.ctrl_io_base], eax
|
mov [ctrl.ctrl_io_base], eax
|
||||||
|
|
||||||
|
mov esi, msgMixMMIo
|
||||||
|
call SysMsgBoardStr
|
||||||
|
|
||||||
stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x18
|
stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x18
|
||||||
mov [ctrl.codec_mem_base], eax
|
mov [ctrl.codec_mem_base], eax
|
||||||
|
|
||||||
|
call dword2str
|
||||||
|
call SysMsgBoardStr
|
||||||
|
|
||||||
|
mov esi, msgCtrlMMIo
|
||||||
|
call SysMsgBoardStr
|
||||||
|
|
||||||
stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x1C
|
stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x1C
|
||||||
mov [ctrl.ctrl_mem_base], eax
|
mov [ctrl.ctrl_mem_base], eax
|
||||||
|
|
||||||
|
call dword2str
|
||||||
|
call SysMsgBoardStr
|
||||||
|
.default:
|
||||||
stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x3C
|
stdcall PciRead32, [ctrl.bus], [ctrl.devfn], dword 0x3C
|
||||||
and eax, 0xFF
|
and eax, 0xFF
|
||||||
|
@@:
|
||||||
mov [ctrl.int_line], eax
|
mov [ctrl.int_line], eax
|
||||||
|
|
||||||
stdcall PciRead8, [ctrl.bus], [ctrl.devfn], dword 0x41
|
stdcall PciRead8, [ctrl.bus], [ctrl.devfn], dword 0x41
|
||||||
@ -713,17 +798,21 @@ proc init_codec
|
|||||||
|
|
||||||
mov edx, CTRL_STAT
|
mov edx, CTRL_STAT
|
||||||
call [ctrl.ctrl_read32]
|
call [ctrl.ctrl_read32]
|
||||||
|
push eax
|
||||||
call dword2str
|
call dword2str
|
||||||
call SysMsgBoardStr
|
call SysMsgBoardStr
|
||||||
|
pop eax
|
||||||
|
cmp eax, 0xFFFFFFFF
|
||||||
|
je .err
|
||||||
|
|
||||||
test eax, CTRL_ST_CREADY
|
test eax, CTRL_ST_CREADY
|
||||||
jnz .ready
|
jnz .ready
|
||||||
|
|
||||||
call reset_codec
|
call reset_codec
|
||||||
and eax, eax
|
test eax, eax
|
||||||
jz .err
|
jz .err
|
||||||
|
|
||||||
|
.ready:
|
||||||
xor edx, edx ;ac_reg_0
|
xor edx, edx ;ac_reg_0
|
||||||
call [ctrl.codec_write16]
|
call [ctrl.codec_write16]
|
||||||
|
|
||||||
@ -733,20 +822,27 @@ proc init_codec
|
|||||||
|
|
||||||
mov [counter], 200 ; total 200*5 ms = 1s
|
mov [counter], 200 ; total 200*5 ms = 1s
|
||||||
.wait:
|
.wait:
|
||||||
|
mov eax, 5000 ; wait 5 ms
|
||||||
|
call StallExec
|
||||||
|
|
||||||
mov edx, CODEC_REG_POWERDOWN
|
mov edx, CODEC_REG_POWERDOWN
|
||||||
call [ctrl.codec_read16]
|
call [ctrl.codec_read16]
|
||||||
and eax, 0x0F
|
and eax, 0x0F
|
||||||
cmp eax, 0x0F
|
cmp eax, 0x0F
|
||||||
je .ready
|
jz .done
|
||||||
|
|
||||||
mov eax, 5000 ; wait 5 ms
|
|
||||||
call StallExec
|
|
||||||
sub [counter] , 1
|
sub [counter] , 1
|
||||||
jnz .wait
|
jnz .wait
|
||||||
.err:
|
.err:
|
||||||
xor eax, eax ; timeout error
|
xor eax, eax ; timeout error
|
||||||
ret
|
ret
|
||||||
.ready:
|
.done:
|
||||||
|
mov eax, 2 ;force set 16-bit 2-channel PCM
|
||||||
|
mov edx, GLOB_CTRL
|
||||||
|
call [ctrl.ctrl_write32]
|
||||||
|
mov eax, 5000 ; wait 5 ms
|
||||||
|
call StallExec
|
||||||
|
|
||||||
call detect_codec
|
call detect_codec
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -800,29 +896,24 @@ proc warm_reset
|
|||||||
mov eax, 100000 ; wait 100 ms
|
mov eax, 100000 ; wait 100 ms
|
||||||
call StallExec
|
call StallExec
|
||||||
|
|
||||||
mov edx, GLOB_CTRL
|
mov edx, CTRL_STAT
|
||||||
call [ctrl.ctrl_read32]
|
call [ctrl.ctrl_read32]
|
||||||
test eax, 4
|
test eax, CTRL_ST_CREADY
|
||||||
jz .ok
|
jnz .ok
|
||||||
sub [counter], 1
|
|
||||||
|
dec [counter]
|
||||||
jnz .wait
|
jnz .wait
|
||||||
|
|
||||||
if DEBUG
|
if DEBUG
|
||||||
mov esi, msgWRFail
|
mov esi, msgWRFail
|
||||||
call SysMsgBoardStr
|
call SysMsgBoardStr
|
||||||
end if
|
end if
|
||||||
|
.fail:
|
||||||
stc
|
stc
|
||||||
ret
|
ret
|
||||||
.ok:
|
.ok:
|
||||||
mov edx, CTRL_STAT
|
|
||||||
call [ctrl.ctrl_read32]
|
|
||||||
and eax, CTRL_ST_CREADY
|
|
||||||
jz .fail
|
|
||||||
clc
|
clc
|
||||||
ret
|
ret
|
||||||
.fail:
|
|
||||||
stc
|
|
||||||
ret
|
|
||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@ -831,10 +922,7 @@ proc cold_reset
|
|||||||
counter dd ?
|
counter dd ?
|
||||||
endl
|
endl
|
||||||
|
|
||||||
mov edx, GLOB_CTRL
|
mov eax, 0x02
|
||||||
call [ctrl.ctrl_read32]
|
|
||||||
and eax, not 0x08
|
|
||||||
or eax, 0x02
|
|
||||||
mov edx, GLOB_CTRL
|
mov edx, GLOB_CTRL
|
||||||
call [ctrl.ctrl_write32]
|
call [ctrl.ctrl_write32]
|
||||||
|
|
||||||
@ -843,36 +931,58 @@ proc cold_reset
|
|||||||
call SysMsgBoardStr
|
call SysMsgBoardStr
|
||||||
end if
|
end if
|
||||||
|
|
||||||
mov [counter], 10 ; total 10*100 ms = 1s
|
mov eax, 400000 ; wait 400 ms
|
||||||
|
call StallExec
|
||||||
|
|
||||||
|
mov [counter], 16 ; total 20*100 ms = 2s
|
||||||
.wait:
|
.wait:
|
||||||
|
|
||||||
|
mov edx, CTRL_STAT
|
||||||
|
call [ctrl.ctrl_read32]
|
||||||
|
test eax, CTRL_ST_CREADY
|
||||||
|
jnz .ok
|
||||||
|
|
||||||
mov eax, 100000 ; wait 100 ms
|
mov eax, 100000 ; wait 100 ms
|
||||||
call StallExec
|
call StallExec
|
||||||
|
|
||||||
mov edx, GLOB_CTRL
|
dec [counter]
|
||||||
call [ctrl.ctrl_read32]
|
|
||||||
test eax, 4
|
|
||||||
jz .ok
|
|
||||||
sub [counter], 1
|
|
||||||
jnz .wait
|
jnz .wait
|
||||||
|
|
||||||
if DEBUG
|
if DEBUG
|
||||||
mov esi, msgCRFail
|
mov esi, msgCRFail
|
||||||
call SysMsgBoardStr
|
call SysMsgBoardStr
|
||||||
end if
|
end if
|
||||||
|
|
||||||
.fail:
|
.fail:
|
||||||
stc
|
stc
|
||||||
ret
|
ret
|
||||||
.ok:
|
.ok:
|
||||||
|
mov esi, msgControl
|
||||||
|
call SysMsgBoardStr
|
||||||
|
|
||||||
|
mov edx, GLOB_CTRL
|
||||||
|
call [ctrl.ctrl_read32]
|
||||||
|
call dword2str
|
||||||
|
call SysMsgBoardStr
|
||||||
|
|
||||||
|
mov esi, msgStatus
|
||||||
|
call SysMsgBoardStr
|
||||||
|
|
||||||
mov edx, CTRL_STAT
|
mov edx, CTRL_STAT
|
||||||
call [ctrl.ctrl_read32]
|
call [ctrl.ctrl_read32]
|
||||||
and eax, CTRL_ST_CREADY
|
push eax
|
||||||
|
call dword2str
|
||||||
|
call SysMsgBoardStr
|
||||||
|
pop eax
|
||||||
|
|
||||||
|
test eax, CTRL_ST_CREADY
|
||||||
jz .fail
|
jz .fail
|
||||||
clc
|
clc
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc play
|
play:
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
mov [civ_val], eax
|
mov [civ_val], eax
|
||||||
mov edx, PCM_OUT_CIV_REG
|
mov edx, PCM_OUT_CIV_REG
|
||||||
@ -886,11 +996,11 @@ proc play
|
|||||||
mov edx, PCM_OUT_CR_REG
|
mov edx, PCM_OUT_CR_REG
|
||||||
mov ax, 0x1D
|
mov ax, 0x1D
|
||||||
call [ctrl.ctrl_write8]
|
call [ctrl.ctrl_write8]
|
||||||
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
endp
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc stop
|
stop:
|
||||||
mov edx, PCM_OUT_CR_REG
|
mov edx, PCM_OUT_CR_REG
|
||||||
mov ax, 0x0
|
mov ax, 0x0
|
||||||
call [ctrl.ctrl_write8]
|
call [ctrl.ctrl_write8]
|
||||||
@ -898,8 +1008,8 @@ proc stop
|
|||||||
mov ax, 0x1c
|
mov ax, 0x1c
|
||||||
mov edx, PCM_OUT_SR_REG
|
mov edx, PCM_OUT_SR_REG
|
||||||
call [ctrl.ctrl_write16]
|
call [ctrl.ctrl_write16]
|
||||||
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
endp
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc get_dev_info stdcall, p_info:dword
|
proc get_dev_info stdcall, p_info:dword
|
||||||
@ -933,7 +1043,6 @@ proc get_dev_info stdcall, p_info:dword
|
|||||||
|
|
||||||
mov ebx, [ctrl.pci_cmd]
|
mov ebx, [ctrl.pci_cmd]
|
||||||
mov [CTRL_INFO.pci_cmd], ebx
|
mov [CTRL_INFO.pci_cmd], ebx
|
||||||
|
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
@ -998,7 +1107,6 @@ proc codec_write stdcall, ac_reg:dword
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc codec_check_ready
|
proc codec_check_ready
|
||||||
|
|
||||||
@ -1010,14 +1118,11 @@ proc codec_check_ready
|
|||||||
xor eax, wax
|
xor eax, wax
|
||||||
inc eax
|
inc eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
align 4
|
|
||||||
.not_ready:
|
.not_ready:
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc check_semafore
|
proc check_semafore
|
||||||
local counter:DWORD
|
local counter:DWORD
|
||||||
@ -1143,6 +1248,8 @@ dword2str:
|
|||||||
jnz @B
|
jnz @B
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
hexletters db '0123456789ABCDEF'
|
||||||
|
hex_buff db 8 dup(0),13,10,0
|
||||||
|
|
||||||
include "codec.inc"
|
include "codec.inc"
|
||||||
|
|
||||||
@ -1159,26 +1266,34 @@ sz_sound_srv db 'SOUND',0
|
|||||||
|
|
||||||
msgInit db 'detect hardware...',13,10,0
|
msgInit db 'detect hardware...',13,10,0
|
||||||
msgFail db 'device not found',13,10,0
|
msgFail db 'device not found',13,10,0
|
||||||
|
msgAttchIRQ db 'IRQ line not supported', 13,10, 0
|
||||||
|
msgInvIRQ db 'IRQ line not assigned or invalid', 13,10, 0
|
||||||
msgPlay db 'start play', 13,10,0
|
msgPlay db 'start play', 13,10,0
|
||||||
msgStop db 'stop play', 13,10,0
|
msgStop db 'stop play', 13,10,0
|
||||||
msgNotify db 'call notify',13,10,0
|
;msgNotify db 'call notify',13,10,0
|
||||||
msgIRQ db 'AC97 IRQ', 13,10,0
|
msgIRQ db 'AC97 IRQ', 13,10,0
|
||||||
msgInitCtrl db 'init controller',13,10,0
|
msgInitCtrl db 'init controller',13,10,0
|
||||||
msgInitCodec db 'init codec',13,10,0
|
;msgInitCodec db 'init codec',13,10,0
|
||||||
msgPrimBuff db 'create primary buffer',13,10,0
|
msgPrimBuff db 'create primary buffer ...',0
|
||||||
msgReg db 'set service handler',13,10,0
|
msgDone db 'done',13,10,0
|
||||||
|
msgRemap db 'Remap IRQ',13,10,0
|
||||||
|
;msgReg db 'set service handler',13,10,0
|
||||||
msgOk db 'service installed',13,10,0
|
msgOk db 'service installed',13,10,0
|
||||||
msgCold db 'cold resret',13,10,0
|
msgCold db 'cold reset',13,10,0
|
||||||
msgWarm db 'warm reset',13,10,0
|
msgWarm db 'warm reset',13,10,0
|
||||||
msgWRFail db 'warm reset failed',13,10,0
|
msgWRFail db 'warm reset failed',13,10,0
|
||||||
msgCRFail db 'cold reset failed',13,10,0
|
msgCRFail db 'cold reset failed',13,10,0
|
||||||
msgCFail db 'codec not ready',13,10,0
|
msgCFail db 'codec not ready',13,10,0
|
||||||
|
msgResetOk db 'reset complete',13,10,0
|
||||||
msgStatus db 'global status ',0
|
msgStatus db 'global status ',0
|
||||||
msgControl db 'global control ',0
|
msgControl db 'global control ',0
|
||||||
|
msgPciCmd db 'PCI command ',0
|
||||||
hexletters db '0123456789ABCDEF'
|
msgPciStat db 'PCI status ',0
|
||||||
hex_buff db 8 dup(0),13,10,0
|
msgCtrlIsaIo db 'controller io base ',0
|
||||||
|
msgMixIsaIo db 'codec io base ',0
|
||||||
|
msgCtrlMMIo db 'controller mmio base ',0
|
||||||
|
msgMixMMIo db 'codec mmio base ',0
|
||||||
|
msgIrqMap db 'AC97 irq map as ',0
|
||||||
|
|
||||||
section '.data' data readable writable align 16
|
section '.data' data readable writable align 16
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user