/kernel/branches/Kolibri-acpi/bus/pci/pci32.inc |
---|
652,3 → 652,47 |
.return_a: |
mov dword[esp + 32], eax |
ret |
align 4 |
pci_irq_fixup: |
push ebp |
stdcall load_file, dev_data_path |
test eax, eax |
jz .fail |
push eax |
mov esi, eax |
lea edi, [eax+ebx] |
.iterate: |
cmp esi, edi |
jae .done |
mov eax, [esi] |
cmp eax, -1 |
je .done |
movzx ebx, al |
movzx ebp, ah |
stdcall pci_read32, ebp, ebx, 0 |
cmp eax, [esi+4] |
jne .skip |
mov eax, [esi+8] |
stdcall pci_write8, ebp, ebx, 0x3C, eax |
.skip: |
add esi, 16 |
jmp .iterate |
.done: |
call kernel_free ;and pop file base from stack |
.fail: |
pop ebp |
ret |
/kernel/branches/Kolibri-acpi/data32.inc |
---|
114,6 → 114,7 |
vrr_m db 'VRR_M',0 |
kernel_file db 'KERNEL MNT' |
dev_data_path db '/RD/1/DRIVERS/DEVICES.DAT',0 |
align 4 |
/kernel/branches/Kolibri-acpi/drivers/sound.asm |
---|
334,7 → 334,37 |
mov esi, msgDone |
call SysMsgBoardStr |
stdcall AttachIntHandler, 17, ac97_irq, dword 0 |
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 ebx, [ctrl.int_line] |
stdcall AttachIntHandler, ebx, ac97_irq, dword 0 |
.reg: |
stdcall RegService, sz_sound_srv, service_proc |
ret |
511,7 → 541,7 |
stdcall [ctrl.user_callback], ebx |
.done: |
pop eax |
and eax, 0x40 |
; and eax, 0x40 |
mov edx, CTRL_STAT |
call [ctrl.ctrl_write32] |
ret |
/kernel/branches/Kolibri-acpi/gui/mouse.inc |
---|
306,6 → 306,7 |
call sys_window_end_moving_handler |
.exit: |
and [mouse.active_sys_window.action], 0 |
ret |
align 4 |
/kernel/branches/Kolibri-acpi/kernel.asm |
---|
563,7 → 563,7 |
mov edi, irq_tab |
xor eax, eax |
mov ecx, 16 |
mov ecx, IRQ_RESERVE |
rep stosd |
;Set base of graphic segment to linear address of LFB |
613,6 → 613,8 |
; Try to Initialize APIC |
call APIC_init |
call pci_irq_fixup |
; Enable timer IRQ (IRQ0) and hard drives IRQs (IRQ14, IRQ15) |
; they are used: when partitions are scanned, hd_read relies on timer |
call unmask_timer |