Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 594 → Rev 593

/kernel/trunk/bus/pci/pci32.inc
1,4 → 1,3
$Revision$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
22,7 → 21,9
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
$Revision$
 
 
;***************************************************************************
; Function
; pci_api:
374,21 → 375,21
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
align 4
sys_pcibios:
cmp [pci_access_enabled], 1
jne .unsupported_func
mov edi, [pci_bios_entry]
test edi, edi
jz .emulate_bios
xchg ebx, eax
xchg ecx, eax
xchg edx, eax
xchg esi, eax
xchg edi, eax
cmp [pci_access_enabled], 1
jne .unsupported_func
cmp [pci_bios_entry], 0
jz .emulate_bios
mov edi, eax
 
push ds
mov ax, pci_data_sel
mov ds, ax
mov eax, ebp
mov ah, 0B1h
call pword [cs:pci_bios_entry]
pop ds
 
398,47 → 399,50
cmp ebp, 1 ; PCI_FUNCTION_ID
jnz .not_PCI_BIOS_PRESENT
mov edx, 'PCI '
xor ah, ah
mov al, [OS_BASE+0x2F0000 + 0x9020]
mov bx, [OS_BASE+0x2F0000 + 0x9022]
mov cl, [OS_BASE+0x2F0000 + 0x9021]
xor ah, ah
jmp .return_abcd
jmp .return
 
.not_PCI_BIOS_PRESENT:
cmp ebp, 2 ; FIND_PCI_DEVICE
jne .not_FIND_PCI_DEVICE
mov ebx, pci_emu_dat
..nxt: cmp [ebx], dx
mov esi, pci_emu_dat
..nxt: cmp [esi], cx
jne ..no
cmp [ebx + 2], cx
cmp [esi + 2], bx
jne ..no
dec si
dec dx
jns ..no
mov bx, [ebx + 4]
mov bx, [esi + 4]
xor ah, ah
jmp .return_ab
..no: cmp word[ebx], 0
jmp .return
..no: cmp word[esi], 0
je ..dev_not_found
add ebx, 10
add esi, 10
jmp ..nxt
..dev_not_found:
mov ah, 0x86 ; DEVICE_NOT_FOUND
jmp .return_a
jmp .return
 
.not_FIND_PCI_DEVICE:
cmp ebp, 3 ; FIND_PCI_CLASS_CODE
jne .not_FIND_PCI_CLASS_CODE
mov esi, pci_emu_dat
shl ecx, 8
..nxt2: cmp [esi], ecx
shl ebx, 8
..nxt2: cmp [esi], ebx
jne ..no2
mov bx, [esi]
xor ah, ah
jmp .return_ab
jmp .return
..no2: cmp dword[esi], 0
je ..dev_not_found
je ..dev_not_found2
add esi, 10
jmp ..nxt2
..dev_not_found2:
mov ah, 0x86 ; DEVICE_NOT_FOUND
jmp .return
 
.not_FIND_PCI_CLASS_CODE:
cmp ebp, 8 ; READ_CONFIG_*
445,39 → 449,35
jb .not_READ_CONFIG
cmp ebp, 0x0A
ja .not_READ_CONFIG
mov eax, ebp
mov ah, bh
mov edx, edi
mov bh, bl
mov bl, dl
mov ebx, esi
mov bh, al
mov edx, ebp
mov al, dl
call pci_read_reg
mov ecx, eax
xor ah, ah ; SUCCESSFUL
jmp .return_abc
jmp .return
.not_READ_CONFIG:
cmp ebp, 0x0B ; WRITE_CONFIG_*
jb .not_WRITE_CONFIG
cmp ebp, 0x0D
ja .not_WRITE_CONFIG
lea eax, [ebp+1]
mov ah, bh
mov edx, edi
mov bh, bl
mov bl, dl
mov ecx, ebx
mov ebx, esi
mov bh, al
mov edx, ebp
inc edx
mov al, dl
call pci_write_reg
xor ah, ah ; SUCCESSFUL
jmp .return_abc
jmp .return
.not_WRITE_CONFIG:
.unsupported_func:
mov ah, 0x81 ; FUNC_NOT_SUPPORTED
.return:mov dword[esp + 8 ], edi
mov dword[esp + 12], esi
.return_abcd:
mov dword[esp + 24], ebx
mov dword[esp + 28], edx
.return_abc:
mov dword[esp + 32], ecx
.return_ab:
mov dword[esp + 24], ebx
.return_a:
mov dword[esp + 36], eax
ret